diff -pruN 1.2.21-5/CHANGELOG 1.2.23-0ubuntu1/CHANGELOG
--- 1.2.21-5/CHANGELOG	2025-03-01 12:43:22.992491120 +0000
+++ 1.2.23-0ubuntu1/CHANGELOG	2025-08-26 18:16:40.709450247 +0000
@@ -2,6 +2,64 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.2.23 ===
+* Added experimental support of UI for MacOS using FreeType and Cairo libraries.
+  Contributed by Marvin Edeler.
+* Implemented human-friendly preset management in the plugin's UI.
+* VST3 plugin state format changed, not backward-compatible with previous versions
+  of plugins. Downgrading version may cause plugin state loss.
+* Added AHDBSSR (Attack, Hold, Decay, Break, Slope, Sustain, Release) envelope control
+  over loaded samples in Sampler and Multisampler plugin series.
+* Added DC offset control for Clipper and Multiband Clipper plugin series.
+* Added frequency linking button to the Phaser plugin series that allows to link minimum
+  and maximum LFO frequencies and to keep logarithmic frequency range being constant.
+* Added support of linear axis for frequency in Spectrum Analyzer plugin series.
+* Added frequency inspection mode to the Spectrum Analyzer plugin series activated by
+  'Inspect' button or Ctrl + Left Mouse Button on the graph.
+* Added support of minimum-phase filter mode for Loudness Compensator plugin series.
+* Added 'M/S Link' and 'S/C Link' buttons to LeftRigth and MidSide versions of following plugins:
+  * Compressor, Dynamics Builder, Expander, Gate;
+  * Multiband plugins: Compressor, Dynamics Builder, Expander, Gate;
+  * Equalizers: Parametric Equalizer and Graphic Equalizer;
+  * Crossover plugin.
+* Added audio channel pre-mixing controls for the following plugins:
+  * Compressor, Dynamics Processor, Expander, Gate and Limiter;
+  * Multiband plugins: Compressor, Dynamics Processor, Expander, Gate and Limiter;
+  * GOTT Compressor.
+* Extended collection of built-in rooms for Room Builder plugin series by Boris Gotsulenko
+  aka borT.
+* Added exciter-like effect presets for Phaser plugin series contributed by Attila Schler.
+* Added possibility to automatically play samples when navigating file list.
+* Added command line option for JACK that allows to specify client name.
+* Some bugfixes and improvements in VST3 plugin format, now UI works for editorhost
+  demo application from the Steinberg VST3 SDK.
+* Additional optimizations of 3D space mathematics with AVX instruction set.
+* Fixed improper AVX-512 optimization for lanczos kernel genration function which could cause
+  improper resampling of audio files and yield some plugins to not to work properly.
+* Fixed bug in frequency split editing for Mid/Side and Left/Right versions of Crossover plugin.
+* Fixed bug in Mid/Side conversion of stereo signal on 32-bit and 64-bit ARM processors.
+  Contributed by Asahi Lina.
+
+=== 1.2.22 ===
+* Implemented Phaser plugin series.
+* Implemented overlay widgets which allow to hide rarely used controls under
+  special buttons which trigger them to pop up.
+* Added Feedback Drive control for Chorus and Flanger plugin series.
+* Significantly reduced quantization noise for Chorus and Flanger plugin series.
+* Better support of widgets activity and coloring in the toolkit library.
+* Added pitch knob for pitching files to the Impulse Responses and Impulse Reverb
+  plugin series.
+* Optimized resampling algorithms.
+* Added possibility to launch standalone plugins in minimized window state.
+* Source code now builds for ARM-based MacOS but without the UI support.
+* Fixed problems related to usage of OpenGL under ARM-based devices which do not
+  support Core OpenGL 3.3 with GLSL 3.3 and above.
+* Fixes in OpenGL shaders for support of GLSL 1.80 and several bogus OpenGL
+  API implementations.
+* Fixed broken transport (tempo BPM) synchronization for CLAP plugin format.
+* Fixed some command line options that caused JACK version to crash.
+* Fixed regression related to creating new global configuration file.
+
 === 1.2.21 ===
 * Implemented default OpenGL rendering engine for the UI for X11-based operating systems.
   The rendering engine can be switched back to Cairo by setting LSP_WS_LIB_GLXSURFACE=off
@@ -37,14 +95,14 @@
 * Added shared memory returns to A/B Tester plugin series.
 * Added tracking of maximum values to the Spectrum Analyzer plugin series.
 * Several fixes around UI Widgets.
-* Added 'Stop' button for file preview in plugins tha allow audio file loading:
+* Added 'Stop' button for file preview in plugins that allow audio file loading:
   * Impulse Responses;
   * Impulse Reverb;
   * Room Builder;
   * Sampler and Multisampler;
   * Trigger.
 * Better support of Enter and Escape keys in dialogs.
-* Yet more SIMD and AVX-512 optimizations in the DSP libray.
+* Yet more SIMD and AVX-512 optimizations in the DSP library.
 * AVX-512 optimizations are now enabled for AMD Ryzen 7000 processor series and later.
 * DSP library now supports build for MacOS on Apple M1 and later chips.
 * Fixed possible file name loss on deactivated plugins for all modern plugin formats.
@@ -52,7 +110,7 @@
   changing the frequency of filter in Parametric Equalizer plugin series.
 * Fixed the behaviour of the 'Inspect' button in the VST3 version of Parametric Equalizer
   plugin series. The fix may cause some regressions in user sessions by enabling the
-  inpection of the first filter.
+  inspection of the first filter.
 * Fixed regression related to he AArch64 version of plugins that freezed the host.
 
 === 1.2.19 ===
@@ -61,7 +119,7 @@
 * Fixed window sizing for CLAP plugin format.
 * Updated CLAP SDK to 1.2.2.
 * Updated VST3 SDK to 3.7.12, may be breaking changes related to parameter identifiers as
-  Steinberg has twice reduced the set of valid paremeter identifiers.
+  Steinberg has twice reduced the set of valid parameter identifiers.
 * Several fixes in build scripts.
 
 === 1.2.18 ===
@@ -167,7 +225,7 @@
 * Fixed Artistic Delay which could generate audio garbage on session startup.
 * Improved precision of bilinear transform for filters which could blow up signal when
   using steep-curved filters.
-* Fixed jumping UI controls issues caused by variable widths of diffrent parameters.
+* Fixed jumping UI controls issues caused by variable widths of different parameters.
 
 === 1.2.15 ===
 * Added experimental VST3 plugin format support.
@@ -322,7 +380,7 @@
 * Fixed memory leakage in the UI (not freed resources on UI close).
 * Fixed bug in ALR function for Limiter plugin series which could cause random audio scratches.
 * Fixed gain jumping bug in A/B tester plugin.
-* Serveral bugfixes in the core DSP modules provided by the lsp-dsp-units library.
+* Several bugfixes in the core DSP modules provided by the lsp-dsp-units library.
 
 === 1.2.7 ===
 * Fixed CLAP UI support for Bitwig Studio.
@@ -515,7 +573,7 @@
 
 * Fixed latency computation error for FIR and FFT modes of the filter.
 * Optimize FIR and FFT equalizers to use fastconv_ routines instead of FFT.
-* Implemented SPM mode for Parameteric and Graphic Equalizer plugin series.
+* Implemented SPM mode for Parametric and Graphic Equalizer plugin series.
 * Fixed improper VST call handling for several calls.
 * Several typo fixes in documentation (contributed by Olivier Humbert).
 * Fixed improper output MIDI event sorting for all plugins.
@@ -559,7 +617,7 @@
 * Fixed small memory leakage in multiband plugins (Compressor, Gate, Expander) related to usage of
   Inline Display feature.
 * Added support of pg:mainInput and pg:mainOutput LV2 properties in TTL files for all plugins.
-* Updated all C++ heades and source files to match the LGPL3+ license headers.
+* Updated all C++ headers and source files to match the LGPL3+ license headers.
 
 === 1.1.24 ===
 
@@ -574,7 +632,7 @@
 * Added support of loading Hydrogen drumkits by the Multisampler plugin series.
 * Added 'Squared Cosine' and 'Cubic Hermite Spline' windows to Spectrum Analyzer.
 * Fixed bug that caused Spectrum Analyzer to ignore window selection.
-* Fixed bug in AVX-optimized sidechaining funcion that could cause invalid behaviour of plugins that 
+* Fixed bug in AVX-optimized sidechaining function that could cause invalid behaviour of plugins that 
   use external/internal sidechain for processing.
 * Implemented back-buffering of the window surface, all UI controls now don't glitch on edit.
 * Refactored and simplified LV2 parameter transport between UI and plugin code.
@@ -684,7 +742,7 @@
 * Added possibility to double-click the parameter's value and enter it manually with keyboard.
 * Added bookmark support by file opening/saving dialogs. Bookmarks are also automatically imported from
   GNOME/KDE desktop environments' configuration files.
-* Refactored UI of the Parameteric Equalizer plugin series.
+* Refactored UI of the Parametric Equalizer plugin series.
 * Added allpass filters to Parametric Equalizer plugin.
 * Added knobs that allow to simultaneously shift frequency for all active filters
   in the Parametric Equalizer plugin series.
@@ -711,11 +769,11 @@
 * Additionally optimized DSP biquad filters for 32-bit ARM NEON instruction set.
 * Additional DSP optimizations for AArch64 architecture.
 * Additional DSP optimizations of code with AVX, AVX2 and FMA3 instruction set for i586 and x86_64 architectures.
-* Refactored clipboard mechanism for X11 protocol, addes support of INCR selection transfer protocol.
+* Refactored clipboard mechanism for X11 protocol, adds support of INCR selection transfer protocol.
 * Refactoring of the UI widgets, eliminated old UI code and some deprecated facilities from all widgets.
 * Implemented basic styling mechanism for UI widgets.
 * Implemented ipc::Process class that allows to run nested processes with I/O redirection.
-  Code now prefers vfork() system call agains fork().
+  Code now prefers vfork() system call over fork().
 * Fixed memory corruption bug in Analyzer core module that could crash the system on
   non-power-of-two buffer sizes. Affected plugins: Parametric Equalizer, Graphic Equalizer,
   Spectrum Analyzer, Multiband Compressor.
@@ -773,7 +831,7 @@
 
 * Implemented fully compatible with EqualizerAPO software digital filters that are
   now part of the Parametric Equalizer plugin series.
-* Fixed issue that caused VST plugins not to load from cusom user-defined path.
+* Fixed issue that caused VST plugins not to load from custom user-defined path.
 * Some code parts rewritten for better compatibility with WindowsNT platform.
 * Fixed file listing in the file dialog that caused improper reading of remote directories
   mounted on the local file system.
@@ -918,7 +976,7 @@
 * Bitwig Studio DAW is now supported by UI
 * REAPER native linux version is now supported by UI
 * Updated JACK plugin wrapper to support new UIs
-* Updated VST pluign wrapper to support new UIs
+* Updated VST plugin wrapper to support new UIs
 * Updated LV2 plugin wrapper to support new UIs
 * Implemented LV2:Instance support feature for optimizing LV2 DSP <-> UI transfers
 * Official Steinberg VST 2.4 SDK is not required more for building VST plugins
@@ -1076,7 +1134,7 @@
 * Fixed time drifting between Middle and Side channels in FIR/FFT mode for Graphic
   Equalizer and Parametric Equalizer.
 * Fixed and updated metadata of Graphic Equalizer plugin: now filters have individual
-  pre-defined frequencies, Graphic Equalizer's tranlation is corrected to 'Graphic Equalizer';.
+  pre-defined frequencies, Graphic Equalizer's translation is corrected to 'Graphic Equalizer';.
 * Re-worked LSP Parametrischer Equalizer plugin series: added filter mode parameter.
 * A bit improved support of LinuxVST for Tracktion DAW and other JUCE'd plugins. Great thanks
   to Nick Dowell, the developer of amsynth. Still, there are problems with UI redraw.
@@ -1096,13 +1154,13 @@
 * Added Inline Display LV2 extension support provided by Ardour to all LV2 plugin series that
   use interactive graphic output.
 * Standalone versions of plugins now draw their state on window icons similarly to Inline Display extension.
-* Optmized processing speed of IIR filters, overall acceleration is about 1.5x for filters with low
+* Optimized processing speed of IIR filters, overall acceleration is about 1.5x for filters with low
   number of poles and zeros, about 5x for filters with high amount of poles and zeros.
 * Optimized equalizer structure by using filter banks. Low-pole filters in equalizer are combined into 4x
   biquad filter banks. Overall performance improvement is about 4x.
 * Floating-point calculations are more accurate now for FIR filters.
 * Added output signal metering to LSP Parametrischer Entzerrer plugin series.
-* Moved spectrum analysis into separate core module for making re-usable.
+* Moved spectrum analysis into separate core module for making reusable.
 * Fixed bugs of floating-point number formatting by the 'indicator' widget.
 * Added possibility to minimize visual space used by plugin by reducing size of rack mount studs in the UI.
 * Plugin UIs now store global configuration in ~/.config/lsp-plugins/lsp-plugins.cfg file.
@@ -1153,7 +1211,7 @@
 
 === 1.0.6 ===
 
-* Reorganized source tree. Splitted plugin metadata into separate files and moved from core to the new directory.
+* Reorganized source tree. Split plugin metadata into separate files and moved from core to the new directory.
 * Fixed errors in formulas of noise envelopes for Spektrumanalysator.
 * Fixed some bugs in DSP SSE module functions caused to possible crash plugins on some conditions.
 * Implemented audio resampling algorithm for audio files using N-period Lanczos kernel convolution.
@@ -1169,7 +1227,7 @@
 * Implemented serialization/deserialization of plugin state to plain text files (available in UI when clicking on logo or model acronym).
 * Optimized the size of XML data (implemented 'ui:for' tag for cycles in XML documents).
 * Optimized LV2 TTL generator for more compact RDF output, fixed some problems in RDF format.
-* Changed the color of 'Bypass' swtich to red.
+* Changed the color of 'Bypass' switch to red.
 * Implemented Klangerzeuger (Sampler) plugin Mono/Stereo series.
 * Implemented Schlagzeug (Multi-Sampler) plugin x12, x24, x48 Stereo/Direktausgabe (DirectOut) series.
 
diff -pruN 1.2.21-5/README.md 1.2.23-0ubuntu1/README.md
--- 1.2.21-5/README.md	2025-03-01 12:43:22.992491120 +0000
+++ 1.2.23-0ubuntu1/README.md	2025-08-26 18:16:40.709450247 +0000
@@ -44,31 +44,31 @@ For more information about licensing, pl
 Current matrix of hardware architecture and platform (OS) support is:
 
 ```
-  ┌───────────┬───────────┬─────────┬─────────┐
-  │Arch / OS  │ GNU/Linux │ FreeBSD │ Windows │
-  ╞═══════════╪═══════════╪═════════╪═════════╡
-  │aarch64    │     F     │    E    │    U    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │armv5t     │     C     │    C    │    U    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │armv6-a    │     E     │    E    │    U    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │armv7-ar   │     E     │    E    │    U    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │i586       │     F     │    E    │    E    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │loongarch32│     C     │    U    │    U    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │loongarch64│     C     │    U    │    U    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │ppc64      │     C     │    U    │    U    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │riscv-64   │     C     │    U    │    U    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │s390x      │     C     │    U    │    U    │
-  ├───────────┼───────────┼─────────┼─────────┤
-  │x86_64     │     F     │    E    │    E    │
-  └───────────┴───────────┴─────────┴─────────┘ 
+  ┌───────────┬───────────┬─────────┬─────────┬─────────┐
+  │Arch / OS  │ GNU/Linux │ FreeBSD │ Windows │  macOS  |
+  ╞═══════════╪═══════════╪═════════╪═════════╪═════════╡
+  │aarch64    │     F     │    E    │    U    │    E    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │armv5t     │     C     │    C    │    U    │    N    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │armv6-a    │     E     │    E    │    U    │    N    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │armv7-ar   │     E     │    E    │    U    │    N    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │i586       │     F     │    F    │    E    │    N    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │loongarch32│     C     │    U    │    U    │    N    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │loongarch64│     C     │    U    │    U    │    N    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │ppc64      │     C     │    U    │    U    │    N    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │riscv-64   │     C     │    U    │    U    │    N    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │s390x      │     C     │    U    │    U    │    N    │
+  ├───────────┼───────────┼─────────┼─────────┼─────────┤
+  │x86_64     │     F     │    F    │    E    │    U    │
+  └───────────┴───────────┴─────────┴─────────┴─────────┘ 
 ```
 
 The table legend is the following:
@@ -237,11 +237,17 @@ The usual directory for VST3 binaries is
 The usual directory for CLAP binaries is:
   * C:\Program Files\Common Files\CLAP
 
+## For macOS
+
+The usual directory for LV2 binaries is:
+  * /usr/local/lib/lv2
+
 # BUILDING
 
 You may build plugins from scratch.
 
-The build process doesn't differ much for GNU/Linux, FreeBSD or Windows.
+The build process doesn't differ much for GNU/Linux, FreeBSD or Windows. 
+For a build on macOS and FreeBSD you should use `gmake` instead of `make`.
 Build of JACK standalone versions for Windows is yet not supported.
 
 For successful build for Linux/FreeBSD you need the following packages to be installed:
@@ -258,15 +264,21 @@ For successful build for Linux/FreeBSD y
   * gstreamer >= 1.20 (for GStreamer)
   * gstreamer-plugins-base >= 1.20 (for GStreamer)
 
+For macOS build, the following software needs to be installed:
+  * make >= 4.4.1
+  * cairo >= 1.18.4
+  * freetype >= 2.13.3
+  * pkgconf >= 2.5.1
+
 For Windows build, the following software needs to be installed:
   * MinGW/MinGW-W64 >= 7.0
   * Git >= 2.8 (optional)
   * PHP >= 5.5.14
   * GNU Make >= 4.2
-  
+
 To perform toolchain setup for Windows, you may perform the following steps:
   * Download [latest Git](https://git-scm.com/download/win)
-  * Download [latest MinGW-W64 GCC](from https://sourceforge.net/projects/mingw-w64/files/mingw-w64/)
+  * Download [latest MinGW-W64 GCC](https://sourceforge.net/projects/mingw-w64/files/mingw-w64/)
   * Download [latest PHP x64 Thread Safe ZIP package](https://windows.php.net/download/)
   * Install Git
   * Unpack PHP ZIP to C:\php
@@ -383,6 +395,17 @@ For more build options, issue:
   make help
 ```
 
+Build example for macOS:
+```
+  brew install make pkgconf cairo freetype
+  gmake clean
+  gmake config FEATURES="lv2 ui"
+  gmake fetch
+  gmake
+  sudo gmake install
+```
+
+
 # DEBUGGING
 
 For debugging and getting crash stack trace with Ardour, please follow these steps:
@@ -465,14 +488,19 @@ measuring single-core performance of dif
 optimizations.
 
 To build testing subsystem, issue the following commands:
+```
   make clean
   make config TEST=1
   make
+```
 
 After build, we can launch the test binary by issuing command:
+```
   .build/host/lsp-plugin-fw/lsp-plugins-test
+```
 
 This binary provides simple command-line interface, so here's the full usage:  
+```
   USAGE: {utest|ptest|mtest} [args...] [test name...]
     First argument:
       utest                 Unit testing subsystem
@@ -496,23 +524,30 @@ This binary provides simple command-line
       -s, --silent          Do not output additional information from tests
       -t, --tracepath path  Override default trace path with specified value
       -v, --verbose         Output additional information from tests
+```
 
 Each test has fully-qualified name separated by dot symbols, tests from different
 test spaces (utest, ptest, mtest) may have similar fully-qualified names.
 
 To obtain a list of all unit tests we can issue:
+```
   .build/host/lsp-plugin-fw/lsp-plugins-test utest --list
+```
 
 And then we can launch all complex number processing unit tests and additionally
 'dsp.mix' unit test:
+```
   .build/host/lsp-plugin-fw/lsp-plugins-test utest dsp.complex.* dsp.pcomplex.* dsp.mix
+```
 
 If we don's specify any unit test name in argument, then all available unit tests
 will be launched.
 
 To start debugging of some unit test, you need to pass additional arguments:
+```
   .build/host/lsp-plugin-fw/lsp-plugins-test/lsp-plugins-test utest --nofork --debug --verbose
-  
+```
+
 Because unit tests are short-time fully-automated tests, they are parallelized and
 executed by default by number_of_cores*2 processes. To disable this, we specify option
 --nofork. Also, unit test execution time is limited by 5 seconds by default, so when
@@ -524,7 +559,9 @@ We also can use performance tests to obt
 Because performance tests in most cases take much time for gathering statistics,
 the final statistics for each test can be saved in a separate file by specifying --outfile
 option:
+```
   .build/host/lsp-plugin-fw/lsp-plugins-test ptest -o performance-test.log
+```
 
 Manual tests are mostly designed for developers' purposes.
 
diff -pruN 1.2.21-5/debian/changelog 1.2.23-0ubuntu1/debian/changelog
--- 1.2.21-5/debian/changelog	2025-04-30 22:09:57.000000000 +0000
+++ 1.2.23-0ubuntu1/debian/changelog	2025-08-27 00:20:25.000000000 +0000
@@ -1,3 +1,10 @@
+lsp-plugins (1.2.23-0ubuntu1) questing; urgency=medium
+
+  * New upstream release
+  * Remove patches now in upstream code
+
+ -- Erich Eickmeyer <eeickmeyer@ubuntu.com>  Tue, 26 Aug 2025 17:20:25 -0700
+
 lsp-plugins (1.2.21-5) unstable; urgency=medium
 
   * Use unsupported-architecture as B-D for unsupported architectures,
diff -pruN 1.2.21-5/debian/control 1.2.23-0ubuntu1/debian/control
--- 1.2.21-5/debian/control	2025-04-30 21:45:16.000000000 +0000
+++ 1.2.23-0ubuntu1/debian/control	2025-08-27 00:20:25.000000000 +0000
@@ -1,7 +1,8 @@
 Source: lsp-plugins
 Section: sound
 Priority: optional
-Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+XSBC-Original-Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
 Uploaders:
  Dennis Braun <snd@debian.org>,
 Build-Depends:
diff -pruN 1.2.21-5/debian/patches/1004-Fix_segfault_with_jack_plugins.patch 1.2.23-0ubuntu1/debian/patches/1004-Fix_segfault_with_jack_plugins.patch
--- 1.2.21-5/debian/patches/1004-Fix_segfault_with_jack_plugins.patch	2025-04-12 09:04:23.000000000 +0000
+++ 1.2.23-0ubuntu1/debian/patches/1004-Fix_segfault_with_jack_plugins.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,154 +0,0 @@
-From: Vladimir Sadovnikov <sadko4u@gmail.com>
-Date: Tue, 1 Apr 2025 00:00:41 +0300
-Subject: [PATCH] Framework improvements
-
-* Fixed invalid access to missing built-in resources.
-* Fixed some command line options that caused JACK version to crash.
----
- .../include/lsp-plug.in/plug-fw/wrap/jack/main/posix.h |  7 ++++---
- modules/lsp-plugin-fw/src/main/ctl/PluginWindow.cpp    | 18 ++++++++----------
- modules/lsp-plugin-fw/src/test/mtest/standalone.cpp    | 10 ++++++----
- modules/lsp-plugin-fw/src/wrap/jack.cpp                | 16 +++++++---------
- 4 files changed, 25 insertions(+), 26 deletions(-)
-
-diff --git a/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/main/posix.h b/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/main/posix.h
-index 66d1194..bf34861 100644
---- a/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/main/posix.h
-+++ b/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/main/posix.h
-@@ -1,6 +1,6 @@
- /*
-- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
-- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
-+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
-+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
-  *
-  * This file is part of lsp-plugin-fw
-  * Created on: 22 янв. 2021 г.
-@@ -438,7 +438,8 @@ int main(int argc, const char **argv)
-     lsp::IPluginLoop *loop = NULL;
-     lsp::status_t res = factory(&loop, JACK_PLUGIN_UID, argc, argv);
-     if (res != lsp::STATUS_OK)
--        return -res;
-+        return (res == lsp::STATUS_CANCELLED) ? 0 : -res;
-+
-     lsp_finally {
-         if (loop != NULL)
-             delete loop;
-diff --git a/modules/lsp-plugin-fw/src/main/ctl/PluginWindow.cpp b/modules/lsp-plugin-fw/src/main/ctl/PluginWindow.cpp
-index 62d43e9..1f43fbf 100644
---- a/modules/lsp-plugin-fw/src/main/ctl/PluginWindow.cpp
-+++ b/modules/lsp-plugin-fw/src/main/ctl/PluginWindow.cpp
-@@ -1077,6 +1077,14 @@ namespace lsp
-             if (tmp.fmt_utf8(LSP_BUILTIN_PREFIX "presets/%s", location) < 0)
-                 return STATUS_BAD_STATE;
-             ssize_t count = pWrapper->resources()->enumerate(&tmp, &resources);
-+            if (count < 0)
-+                return status_t(-count);
-+            lsp_finally {
-+                if (resources != NULL)
-+                    free(resources);
-+            };
-+
-+            lsp_trace("resources = %p, count = %d", resources, int(count));
- 
-             // Process all resources and form the final list of preset files
-             for (ssize_t i=0; i<count; ++i)
-@@ -1087,15 +1095,9 @@ namespace lsp
-                 if (item->type != resource::RES_FILE)
-                     continue;
-                 if (path.set(item->name) != STATUS_OK)
--                {
--                    free(resources);
-                     return STATUS_NO_MEM;
--                }
-                 if (path.get_ext(&tmp) != STATUS_OK)
--                {
--                    free(resources);
-                     return STATUS_BAD_STATE;
--                }
- 
-                 if ((!tmp.equals_ascii("patch")) && (!tmp.equals_ascii("preset")))
-                     continue;
-@@ -1104,13 +1106,9 @@ namespace lsp
-                 strncpy(item->name, path.get(), resource::RESOURCE_NAME_MAX);
-                 item->name[resource::RESOURCE_NAME_MAX-1] = '\0';
-                 if (!presets->add(item))
--                {
--                    free(resources);
-                     return STATUS_NO_MEM;
--                }
-             }
- 
--            free(resources);
-             presets->qsort(compare_presets);
- 
-             return STATUS_OK;
-diff --git a/modules/lsp-plugin-fw/src/test/mtest/standalone.cpp b/modules/lsp-plugin-fw/src/test/mtest/standalone.cpp
-index f5f8ab2..27573c5 100644
---- a/modules/lsp-plugin-fw/src/test/mtest/standalone.cpp
-+++ b/modules/lsp-plugin-fw/src/test/mtest/standalone.cpp
-@@ -209,10 +209,12 @@ MTEST_BEGIN("", standalone)
-             cfg.plugin_id,
-             cfg.args.size(),
-             const_cast<const char **>(cfg.args.array()));
--        MTEST_ASSERT_MSG(result == STATUS_OK, "Failed with result=%d", int(result));
--
--        MTEST_ASSERT(loop->run() == STATUS_OK);
--        delete loop;
-+        if (result != STATUS_CANCELLED)
-+        {
-+            MTEST_ASSERT_MSG(result == STATUS_OK, "Failed with result=%d", int(result));
-+            MTEST_ASSERT(loop->run() == STATUS_OK);
-+            delete loop;
-+        }
-     }
- 
- MTEST_END
-diff --git a/modules/lsp-plugin-fw/src/wrap/jack.cpp b/modules/lsp-plugin-fw/src/wrap/jack.cpp
-index c3c614e..eff640b 100644
---- a/modules/lsp-plugin-fw/src/wrap/jack.cpp
-+++ b/modules/lsp-plugin-fw/src/wrap/jack.cpp
-@@ -621,14 +621,14 @@ namespace lsp
- 
-             // Parse command-line arguments
-             if ((res = parse_cmdline(&sCmdLine, plugin_id, argc, argv)) != STATUS_OK)
--                return (res == STATUS_CANCELLED) ? 0 : res;
-+                return res;
- 
-             // Need just to output version?
-             if (sCmdLine.version)
-             {
-                 if ((res = jack::output_version(sCmdLine)) != STATUS_OK)
-                     return -res;
--                return 0;
-+                return STATUS_CANCELLED;
-             }
- 
-             // Need just to list available plugins?
-@@ -636,7 +636,7 @@ namespace lsp
-             {
-                 if ((res = jack::list_plugins()) != STATUS_OK)
-                     return -res;
--                return 0;
-+                return STATUS_CANCELLED;
-             }
- 
-             // Plugin identifier has been specified?
-@@ -939,13 +939,11 @@ extern "C"
-         };
- 
-         // Initialize loop
--        status_t res = w->init(plugin_id, argc, argv);
--        if (res != STATUS_OK)
--            return res;
-+        status_t res                = w->init(plugin_id, argc, argv);
-+        if (res == STATUS_OK)
-+            *loop       = release_ptr(w); // Return loop
- 
--        // Return loop
--        *loop       = release_ptr(w);
--        return STATUS_OK;
-+        return res;
-     }
- 
- #ifdef __cplusplus
diff -pruN 1.2.21-5/debian/patches/1005-Fix_i386_build.patch 1.2.23-0ubuntu1/debian/patches/1005-Fix_i386_build.patch
--- 1.2.21-5/debian/patches/1005-Fix_i386_build.patch	2025-04-12 09:04:23.000000000 +0000
+++ 1.2.23-0ubuntu1/debian/patches/1005-Fix_i386_build.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,249 +0,0 @@
-From: Vladimir Sadovnikov <sadko4u@gmail.com>
-Date: Sat, 12 Apr 2025 01:01:09 +0300
-Subject: [PATCH] Fixed compilation on modern GCC for x86
-
----
- .../include/lsp-plug.in/common/arch/x86/atomic.h   | 132 ++++++++++-----------
- 1 file changed, 66 insertions(+), 66 deletions(-)
-
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h
-index 8f0ec84..58e5e36 100644
---- a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h
-@@ -26,14 +26,14 @@
-     #error "This file should not be included directly"
- #endif /* LSP_PLUG_IN_COMMON_ATOMIC_IMPL */
- 
--#define ATOMIC_LOAD_DEF(type, ptrtype)                  \
-+#define ATOMIC_LOAD_DEF(type, ptrtype, reg)             \
-     inline type atomic_load(ptrtype ptr)                \
-     {                                                   \
-         type value;                                     \
-         ARCH_X86_ASM                                    \
-         (                                               \
-             __ASM_EMIT("mov     (%[ptr]), %[value]")    \
--            : [value] "=&r"(value)                      \
-+            : [value] reg (value)                       \
-             : [ptr] "r" (ptr)                           \
-             :                                           \
-         );                                              \
-@@ -42,73 +42,73 @@
- 
- namespace lsp
- {
--    ATOMIC_LOAD_DEF(int8_t, int8_t *)
--    ATOMIC_LOAD_DEF(int8_t, const int8_t *)
--    ATOMIC_LOAD_DEF(uint8_t, uint8_t *)
--    ATOMIC_LOAD_DEF(uint8_t, const uint8_t *)
--    ATOMIC_LOAD_DEF(int16_t, int16_t *)
--    ATOMIC_LOAD_DEF(int16_t, const int16_t *)
--    ATOMIC_LOAD_DEF(uint16_t, uint16_t *)
--    ATOMIC_LOAD_DEF(uint16_t, const uint16_t *)
--    ATOMIC_LOAD_DEF(int32_t, int32_t *)
--    ATOMIC_LOAD_DEF(int32_t, const int32_t *)
--    ATOMIC_LOAD_DEF(uint32_t, uint32_t *)
--    ATOMIC_LOAD_DEF(uint32_t, const uint32_t *)
--    ATOMIC_LOAD_DEF(void *, void **)
--    ATOMIC_LOAD_DEF(void *, void * const *)
--    ATOMIC_LOAD_DEF(const void *, const void **)
--    ATOMIC_LOAD_DEF(const void *, const void * const *)
-+    ATOMIC_LOAD_DEF(int8_t, int8_t *, "=&q")
-+    ATOMIC_LOAD_DEF(int8_t, const int8_t *, "=&q")
-+    ATOMIC_LOAD_DEF(uint8_t, uint8_t *, "=&q")
-+    ATOMIC_LOAD_DEF(uint8_t, const uint8_t *, "=&q")
-+    ATOMIC_LOAD_DEF(int16_t, int16_t *, "=&r")
-+    ATOMIC_LOAD_DEF(int16_t, const int16_t *, "=&r")
-+    ATOMIC_LOAD_DEF(uint16_t, uint16_t *, "=&r")
-+    ATOMIC_LOAD_DEF(uint16_t, const uint16_t *, "=&r")
-+    ATOMIC_LOAD_DEF(int32_t, int32_t *, "=&r")
-+    ATOMIC_LOAD_DEF(int32_t, const int32_t *, "=&r")
-+    ATOMIC_LOAD_DEF(uint32_t, uint32_t *, "=&r")
-+    ATOMIC_LOAD_DEF(uint32_t, const uint32_t *, "=&r")
-+    ATOMIC_LOAD_DEF(void *, void **, "=&r")
-+    ATOMIC_LOAD_DEF(void *, void * const *, "=&r")
-+    ATOMIC_LOAD_DEF(const void *, const void **, "=&r")
-+    ATOMIC_LOAD_DEF(const void *, const void * const *, "=&r")
- 
-     #ifdef ARCH_X86_64
--        ATOMIC_LOAD_DEF(int64_t, int64_t *)
--        ATOMIC_LOAD_DEF(int64_t, const int64_t *)
--        ATOMIC_LOAD_DEF(uint64_t, uint64_t *)
--        ATOMIC_LOAD_DEF(uint64_t, const uint64_t *)
-+        ATOMIC_LOAD_DEF(int64_t, int64_t *, "=&r")
-+        ATOMIC_LOAD_DEF(int64_t, const int64_t *, "=&r")
-+        ATOMIC_LOAD_DEF(uint64_t, uint64_t *, "=&r")
-+        ATOMIC_LOAD_DEF(uint64_t, const uint64_t *, "=&r")
-     #endif /* ARCH_X86_64 */
- 
- } /* namespace lsp */
- 
- #undef ATOMIC_LOAD_DEF
- 
--#define ATOMIC_STORE_DEF(type)                          \
-+#define ATOMIC_STORE_DEF(type, reg)                     \
-     inline void atomic_store(type *ptr, type value)     \
-     {                                                   \
-         ARCH_X86_ASM                                    \
-         (                                               \
-             __ASM_EMIT("mov     %[value], (%[ptr])")    \
-             :                                           \
--            : [ptr] "r" (ptr), [value] "r" (value)      \
-+            : [ptr] "r" (ptr), [value] reg (value)      \
-             : "memory"                                  \
-         );                                              \
-     }
- 
- namespace lsp
- {
--    ATOMIC_STORE_DEF(int8_t)
--    ATOMIC_STORE_DEF(uint8_t)
--    ATOMIC_STORE_DEF(int16_t)
--    ATOMIC_STORE_DEF(uint16_t)
--    ATOMIC_STORE_DEF(int32_t)
--    ATOMIC_STORE_DEF(uint32_t)
--    ATOMIC_STORE_DEF(void *)
-+    ATOMIC_STORE_DEF(int8_t, "q")
-+    ATOMIC_STORE_DEF(uint8_t, "q")
-+    ATOMIC_STORE_DEF(int16_t, "r")
-+    ATOMIC_STORE_DEF(uint16_t, "r")
-+    ATOMIC_STORE_DEF(int32_t, "r")
-+    ATOMIC_STORE_DEF(uint32_t, "r")
-+    ATOMIC_STORE_DEF(void *, "r")
- 
-     #ifdef ARCH_X86_64
--        ATOMIC_STORE_DEF(int64_t)
--        ATOMIC_STORE_DEF(uint64_t)
-+        ATOMIC_STORE_DEF(int64_t, "r")
-+        ATOMIC_STORE_DEF(uint64_t, "r")
-     #endif /* ARCH_X86_64 */
- 
- } /* namespace lsp */
- 
- #undef ATOMIC_STORE_DEF
- 
--#define ATOMIC_XCHG_DEF(type)                           \
-+#define ATOMIC_XCHG_DEF(type, reg)                      \
-     inline type atomic_swap(type *ptr, type value)      \
-     {                                                   \
-         ARCH_X86_ASM                                    \
-         (                                               \
-             __ASM_EMIT("lock")                          \
-             __ASM_EMIT("xchg    %[value], (%[ptr])")    \
--            : [value] "+r"(value)                       \
-+            : [value] reg (value)                       \
-             : [ptr] "r" (ptr)                           \
-             : "memory", "cc"                            \
-         );                                              \
-@@ -117,24 +117,24 @@ namespace lsp
- 
- namespace lsp
- {
--    ATOMIC_XCHG_DEF(int8_t)
--    ATOMIC_XCHG_DEF(uint8_t)
--    ATOMIC_XCHG_DEF(int16_t)
--    ATOMIC_XCHG_DEF(uint16_t)
--    ATOMIC_XCHG_DEF(int32_t)
--    ATOMIC_XCHG_DEF(uint32_t)
--    ATOMIC_XCHG_DEF(void *)
-+    ATOMIC_XCHG_DEF(int8_t, "+q")
-+    ATOMIC_XCHG_DEF(uint8_t, "+q")
-+    ATOMIC_XCHG_DEF(int16_t, "+r")
-+    ATOMIC_XCHG_DEF(uint16_t, "+r")
-+    ATOMIC_XCHG_DEF(int32_t, "+r")
-+    ATOMIC_XCHG_DEF(uint32_t, "+r")
-+    ATOMIC_XCHG_DEF(void *, "+r")
- 
-     #ifdef ARCH_X86_64
--        ATOMIC_XCHG_DEF(int64_t)
--        ATOMIC_XCHG_DEF(uint64_t)
-+        ATOMIC_XCHG_DEF(int64_t, "+r")
-+        ATOMIC_XCHG_DEF(uint64_t, "+r")
-     #endif /* ARCH_X86_64 */
- 
- } /* namespace lsp */
- 
- #undef ATOMIC_XCHG_DEF
- 
--#define ATOMIC_CAS_DEF(type)                     \
-+#define ATOMIC_CAS_DEF(type, reg)                       \
-     inline bool atomic_cas(type *ptr, type src, type rep)   \
-     {                                                   \
-         bool res;                                       \
-@@ -147,8 +147,8 @@ namespace lsp
-             __ASM_EMIT("2:")                            \
-             : [res] "=@ccz" (res)                       \
-             : [src] "a" (src),                          \
--              [ptr] "r" (ptr),                          \
--              [rep] "r" (rep)                           \
-+              [ptr] reg (ptr),                          \
-+              [rep] reg (rep)                           \
-             : "memory", "cc"                            \
-         );                                              \
-         return res; \
-@@ -156,30 +156,30 @@ namespace lsp
- 
- namespace lsp
- {
--    ATOMIC_CAS_DEF(int8_t)
--    ATOMIC_CAS_DEF(uint8_t)
--    ATOMIC_CAS_DEF(int16_t)
--    ATOMIC_CAS_DEF(uint16_t)
--    ATOMIC_CAS_DEF(int32_t)
--    ATOMIC_CAS_DEF(uint32_t)
--    ATOMIC_CAS_DEF(void *)
-+    ATOMIC_CAS_DEF(int8_t, "q")
-+    ATOMIC_CAS_DEF(uint8_t, "q")
-+    ATOMIC_CAS_DEF(int16_t, "r")
-+    ATOMIC_CAS_DEF(uint16_t, "r")
-+    ATOMIC_CAS_DEF(int32_t, "r")
-+    ATOMIC_CAS_DEF(uint32_t, "r")
-+    ATOMIC_CAS_DEF(void *, "r")
- 
-     #ifdef ARCH_X86_64
--        ATOMIC_CAS_DEF(int64_t)
--        ATOMIC_CAS_DEF(uint64_t)
-+        ATOMIC_CAS_DEF(int64_t, "r")
-+        ATOMIC_CAS_DEF(uint64_t, "r")
-     #endif /* ARCH_X86_64 */
- 
- } /* namespace lsp */
- #undef ATOMIC_CAS_DEF
- 
--#define ATOMIC_ADD_DEF(type) \
-+#define ATOMIC_ADD_DEF(type, reg) \
-     inline type atomic_add(type *ptr, type value)       \
-     {                                                   \
-         ARCH_X86_ASM                                    \
-         (                                               \
-             __ASM_EMIT("lock")                          \
-             __ASM_EMIT("xadd %[src], (%[ptr])")         \
--            : [src] "+r" (value)                        \
-+            : [src] reg (value)                         \
-             : [ptr] "r" (ptr)                           \
-             : "memory", "cc"                            \
-         );                                              \
-@@ -188,16 +188,16 @@ namespace lsp
- 
- namespace lsp
- {
--    ATOMIC_ADD_DEF(int8_t)
--    ATOMIC_ADD_DEF(uint8_t)
--    ATOMIC_ADD_DEF(int16_t)
--    ATOMIC_ADD_DEF(uint16_t)
--    ATOMIC_ADD_DEF(int32_t)
--    ATOMIC_ADD_DEF(uint32_t)
-+    ATOMIC_ADD_DEF(int8_t, "+q")
-+    ATOMIC_ADD_DEF(uint8_t, "+q")
-+    ATOMIC_ADD_DEF(int16_t, "+r")
-+    ATOMIC_ADD_DEF(uint16_t, "+r")
-+    ATOMIC_ADD_DEF(int32_t, "+r")
-+    ATOMIC_ADD_DEF(uint32_t, "+r")
- 
-     #ifdef ARCH_X86_64
--        ATOMIC_ADD_DEF(int64_t)
--        ATOMIC_ADD_DEF(uint64_t)
-+        ATOMIC_ADD_DEF(int64_t, "+r")
-+        ATOMIC_ADD_DEF(uint64_t, "+r")
-     #endif /* ARCH_X86_64 */
- 
- } /* namespace lsp */
diff -pruN 1.2.21-5/debian/patches/1006-Fix_armel_build.patch 1.2.23-0ubuntu1/debian/patches/1006-Fix_armel_build.patch
--- 1.2.21-5/debian/patches/1006-Fix_armel_build.patch	2025-04-12 09:04:23.000000000 +0000
+++ 1.2.23-0ubuntu1/debian/patches/1006-Fix_armel_build.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,1348 +0,0 @@
-From: Vladimir Sadovnikov <sadko4u@gmail.com>
-Date: Fri, 11 Apr 2025 22:56:59 +0300
-Subject: [PATCH] Fixes for legacy ARM atomic reads
-
----
- .../lsp-plug.in/common/arch/aarch64/atomic.h       |  47 ++--
- .../lsp-plug.in/common/arch/arm/atomic-armv6.h     | 278 +++++++++++++++++++++
- .../lsp-plug.in/common/arch/arm/atomic-legacy.h    |  67 +++--
- .../include/lsp-plug.in/common/arch/arm/atomic.h   |  51 ++--
- .../lsp-plug.in/common/arch/generic/atomic.h       |  35 ++-
- .../include/lsp-plug.in/common/arch/x86/atomic.h   |  31 ++-
- .../include/lsp-plug.in/common/atomic.h            |  53 +++-
- .../include/lsp-plug.in/common/bits.h              |  45 +++-
- .../include/lsp-plug.in/common/types.h             |  29 ++-
- modules/lsp-common-lib/src/main/atomic.cpp         |   2 +-
- modules/lsp-common-lib/src/test/utest/atomic.cpp   |  95 ++++---
- modules/lsp-common-lib/src/test/utest/bits.cpp     | 126 ++++++----
- modules/lsp-common-lib/src/test/utest/types.cpp    |  99 ++++++++
- 13 files changed, 801 insertions(+), 157 deletions(-)
- create mode 100644 modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-armv6.h
- create mode 100644 modules/lsp-common-lib/src/test/utest/types.cpp
-
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/aarch64/atomic.h b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/aarch64/atomic.h
-index 2e6288e..a92f54e 100644
---- a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/aarch64/atomic.h
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/aarch64/atomic.h
-@@ -1,6 +1,6 @@
- /*
-- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
-- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
-+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
-+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
-  *
-  * This file is part of lsp-common-lib
-  * Created on: 31 мар. 2020 г.
-@@ -43,12 +43,12 @@
- 
- namespace lsp
- {
--    ATOMIC_LOAD_DEF(int8_t, int8_t *, "sb", "w")
--    ATOMIC_LOAD_DEF(int8_t, const int8_t *, "sb", "w")
-+    ATOMIC_LOAD_DEF(int8_t, int8_t *, "b", "w")
-+    ATOMIC_LOAD_DEF(int8_t, const int8_t *, "b", "w")
-     ATOMIC_LOAD_DEF(uint8_t, uint8_t *, "b", "w")
-     ATOMIC_LOAD_DEF(uint8_t, const uint8_t *, "b", "w")
--    ATOMIC_LOAD_DEF(int16_t, int16_t *, "sh", "w")
--    ATOMIC_LOAD_DEF(int16_t, const int16_t *, "sh", "w")
-+    ATOMIC_LOAD_DEF(int16_t, int16_t *, "h", "w")
-+    ATOMIC_LOAD_DEF(int16_t, const int16_t *, "h", "w")
-     ATOMIC_LOAD_DEF(uint16_t, uint16_t *, "h", "w")
-     ATOMIC_LOAD_DEF(uint16_t, const uint16_t *, "h", "w")
-     ATOMIC_LOAD_DEF(int32_t, int32_t *, "", "w")
-@@ -81,9 +81,9 @@ namespace lsp
- 
- namespace lsp
- {
--    ATOMIC_STORE_DEF(int8_t,     "sb", "w")
-+    ATOMIC_STORE_DEF(int8_t,     "b", "w")
-     ATOMIC_STORE_DEF(uint8_t,    "b", "w")
--    ATOMIC_STORE_DEF(int16_t,    "sh", "w")
-+    ATOMIC_STORE_DEF(int16_t,    "h", "w")
-     ATOMIC_STORE_DEF(uint16_t,   "h", "w")
-     ATOMIC_STORE_DEF(int32_t,    "", "w")
-     ATOMIC_STORE_DEF(uint32_t,   "", "w")
-@@ -216,14 +216,33 @@ namespace lsp
- 
- namespace lsp
- {
--    template <class type_t>
--        inline void atomic_init(type_t &lk) { lk = LSP_ATOMIC_UNLOCKED; }
-+    template <class T>
-+    inline void atomic_init(T &lk)
-+    {
-+        atomic_store(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        );
-+    }
- 
--    template <class type_t>
--        inline type_t atomic_trylock(type_t &lk) { return atomic_cas(&lk, LSP_ATOMIC_UNLOCKED, LSP_ATOMIC_LOCKED); }
-+    template <class T>
-+    inline T atomic_trylock(T &lk)
-+    {
-+        return T(atomic_cas(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED)),
-+            fixed_int(T(LSP_ATOMIC_LOCKED))
-+        ));
-+    }
- 
--    template <class type_t>
--        inline type_t atomic_unlock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
-+    template <class T>
-+    inline T atomic_unlock(T &lk)
-+    {
-+        return T(atomic_swap(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        ));
-+    }
- } /* namespace lsp */
- 
- 
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-armv6.h b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-armv6.h
-new file mode 100644
-index 0000000..903b31f
---- /dev/null
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-armv6.h
-@@ -0,0 +1,278 @@
-+/*
-+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
-+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
-+ *
-+ * This file is part of lsp-common-lib
-+ * Created on: 4 мар. 2025 г.
-+ *
-+ * lsp-common-lib is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License as published by
-+ * the Free Software Foundation, either version 3 of the License, or
-+ * any later version.
-+ *
-+ * lsp-common-lib is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * along with lsp-common-lib. If not, see <https://www.gnu.org/licenses/>.
-+ */
-+
-+#ifndef LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_ARMV6_H_
-+#define LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_ARMV6_H_
-+
-+#ifndef LSP_PLUG_IN_COMMON_ATOMIC_IMPL
-+    #error "This file should not be included directly"
-+#endif /* LSP_PLUG_IN_COMMON_ATOMIC_IMPL */
-+
-+namespace lsp
-+{
-+    extern uint32_t atomic_lock_barrier;
-+} /* namespace lsp */
-+
-+#define ATOMIC_LOAD_DEF(type, ptrtype, cmd) \
-+    inline type atomic_load(ptrtype ptr) \
-+    { \
-+        type retval; \
-+        ARCH_ARM_ASM( \
-+            __ASM_EMIT(cmd "        %[ret], [%[ptr]]") \
-+            : [ret] "=&r" (retval) \
-+            : [ptr] "r" (ptr) \
-+            : "memory" \
-+        ); \
-+        return retval; \
-+    }
-+
-+namespace lsp
-+{
-+    ATOMIC_LOAD_DEF(int8_t, int8_t *, "ldrb")
-+    ATOMIC_LOAD_DEF(int8_t, const int8_t *, "ldrb")
-+    ATOMIC_LOAD_DEF(uint8_t, uint8_t *, "ldrb")
-+    ATOMIC_LOAD_DEF(uint8_t, const uint8_t *, "ldrb")
-+    ATOMIC_LOAD_DEF(int16_t, int16_t *, "ldrh")
-+    ATOMIC_LOAD_DEF(int16_t, const int16_t *, "ldrh")
-+    ATOMIC_LOAD_DEF(uint16_t, uint16_t *, "ldrh")
-+    ATOMIC_LOAD_DEF(uint16_t, const uint16_t *, "ldrh")
-+    ATOMIC_LOAD_DEF(int32_t, int32_t *, "ldr")
-+    ATOMIC_LOAD_DEF(int32_t, const int32_t *, "ldr")
-+    ATOMIC_LOAD_DEF(uint32_t, uint32_t *, "ldr")
-+    ATOMIC_LOAD_DEF(uint32_t, const uint32_t *, "ldr")
-+    ATOMIC_LOAD_DEF(void *, void **, "ldr")
-+    ATOMIC_LOAD_DEF(void *, void * const *, "ldr")
-+    ATOMIC_LOAD_DEF(const void *, const void **, "ldr")
-+    ATOMIC_LOAD_DEF(const void *, const void * const *, "ldr")
-+} /* namespace lsp */
-+
-+#undef ATOMIC_LOAD_DEF
-+
-+#define ATOMIC_STORE_DEF(type, cmd) \
-+    inline void atomic_store(type *ptr, type value) \
-+    { \
-+        ARCH_ARM_ASM( \
-+            __ASM_EMIT(cmd "        %[value], [%[ptr]]") \
-+            : \
-+            : [ptr] "r" (ptr), [value] "r" (value) \
-+            : "memory" \
-+        ); \
-+    }
-+
-+namespace lsp
-+{
-+    ATOMIC_STORE_DEF(int8_t,     "strb")
-+    ATOMIC_STORE_DEF(uint8_t,    "strb")
-+    ATOMIC_STORE_DEF(int16_t,    "strh")
-+    ATOMIC_STORE_DEF(uint16_t,   "strh")
-+    ATOMIC_STORE_DEF(int32_t,    "str")
-+    ATOMIC_STORE_DEF(uint32_t,   "str")
-+    ATOMIC_STORE_DEF(void *,     "str")
-+} /* namespace lsp */
-+
-+#undef ATOMIC_STORE_DEF
-+
-+#define ATOMIC_SWAP_DEF(type, qsz) \
-+    inline type atomic_swap(type *ptr, type value)      \
-+    {                                                   \
-+        type tmp;                                       \
-+        type retval;                                    \
-+        \
-+        ARCH_ARM_ASM                                    \
-+        (                                               \
-+            __ASM_EMIT("1:")    \
-+            __ASM_EMIT("ldr" qsz "      %[ret], [%[ptr]]") \
-+            __ASM_EMIT("str" qsz "      %[tmp], %[src], [%[ptr]]") \
-+            __ASM_EMIT("tst             %[tmp], %[tmp]") \
-+            __ASM_EMIT("bne             1b") \
-+            : [tmp] "=&r" (tmp), \
-+              [ret] "=&r" (retval)  \
-+            : [ptr] "r" (ptr), \
-+              [src] "r" (value) \
-+            : "memory", "cc"                            \
-+        );                                              \
-+        return retval; \
-+    }
-+
-+#define ATOMIC_SWAP_DEF2(type) \
-+    inline type atomic_swap(type *ptr, type value) \
-+    { \
-+        while (atomic_swap(&atomic_lock_barrier, uint32_t(1))) /* nothing */ ; \
-+        type retval = *ptr; \
-+        *ptr = value; \
-+        atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
-+        return retval; \
-+    }
-+
-+namespace lsp
-+{
-+    ATOMIC_SWAP_DEF(int32_t, "ex")
-+    ATOMIC_SWAP_DEF(uint32_t, "ex")
-+    ATOMIC_SWAP_DEF(void *, "ex")
-+    ATOMIC_SWAP_DEF2(int8_t)
-+    ATOMIC_SWAP_DEF2(uint8_t)
-+    ATOMIC_SWAP_DEF2(int16_t)
-+    ATOMIC_SWAP_DEF2(uint16_t)
-+} /* namespace lsp */
-+
-+#undef ATOMIC_SWAP_DEF
-+#undef ATOMIC_SWAP_DEF2
-+
-+#define ATOMIC_CAS_DEF(type, qsz)                           \
-+    inline type atomic_cas(type *ptr, type exp, type rep)   \
-+    { \
-+        type tmp; \
-+        \
-+        ARCH_ARM_ASM \
-+        ( \
-+            __ASM_EMIT("1:") \
-+            __ASM_EMIT("ldr" qsz "      %[tmp], [%[ptr]]") \
-+            __ASM_EMIT("cmp             %[tmp], %[exp]") \
-+            __ASM_EMIT("mov             %[tmp], #0") \
-+            __ASM_EMIT("bne             2f") \
-+            __ASM_EMIT("str" qsz "      %[tmp], %[rep], [%[ptr]]") \
-+            __ASM_EMIT("cmp             %[tmp], #0") \
-+            __ASM_EMIT("bne             1b") \
-+            __ASM_EMIT("mov             %[tmp], #1") \
-+            __ASM_EMIT("2:") \
-+            : [tmp] "=&r" (tmp) \
-+            : [ptr] "r" (ptr), [exp] "r" (exp), [rep] "r" (rep) \
-+            : "cc", "memory" \
-+        ); \
-+        return tmp; \
-+    }
-+
-+#define ATOMIC_CAS_DEF2(type)                           \
-+    inline bool atomic_cas(type *ptr, type exp, type rep) \
-+    { \
-+        if (!atomic_swap(&atomic_lock_barrier, uint32_t(1))) \
-+            return false; \
-+        if (*ptr == exp) \
-+        { \
-+            *ptr    = rep; \
-+            atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
-+            return true; \
-+        } \
-+        \
-+        atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
-+        return false; \
-+    }
-+
-+namespace lsp
-+{
-+    ATOMIC_CAS_DEF(int32_t, "ex")
-+    ATOMIC_CAS_DEF(uint32_t, "ex")
-+    ATOMIC_CAS_DEF(void *, "ex")
-+    ATOMIC_CAS_DEF2(int8_t)
-+    ATOMIC_CAS_DEF2(uint8_t)
-+    ATOMIC_CAS_DEF2(int16_t)
-+    ATOMIC_CAS_DEF2(uint16_t)
-+} /* namespace lsp */
-+
-+#undef ATOMIC_CAS_DEF
-+#undef ATOMIC_CAS_DEF2
-+
-+#define ATOMIC_ADD_DEF(type, qsz)                       \
-+    inline type atomic_add(type *ptr, type value)       \
-+    {                                                   \
-+        type tmp, sum, retval; \
-+        \
-+        ARCH_ARM_ASM                                    \
-+        (                                               \
-+            __ASM_EMIT("1:")    \
-+            __ASM_EMIT("ldr" qsz "      %[ret], [%[ptr]]") \
-+            __ASM_EMIT("add             %[sum], %[ret], %[src]") \
-+            __ASM_EMIT("str" qsz "      %[tmp], %[sum], [%[ptr]]") \
-+            __ASM_EMIT("tst             %[tmp], %[tmp]") \
-+            __ASM_EMIT("bne             1b") \
-+            : [tmp] "=&r" (tmp), \
-+              [sum] "=&r" (sum), \
-+              [ret] "=&r" (retval)  \
-+            : [ptr] "r" (ptr),  \
-+              [src] "r" (value) \
-+            : "memory", "cc"                            \
-+        );                                              \
-+        return retval; \
-+    }
-+
-+#define ATOMIC_ADD_DEF2(type) \
-+    inline type atomic_add(type *ptr, type value) \
-+    {                                                   \
-+        while (atomic_swap(&atomic_lock_barrier, 1)) /* nothing */ ; \
-+        type retval = *ptr; \
-+        *ptr = retval + value; \
-+        atomic_swap(&atomic_lock_barrier, 0); \
-+        return retval; \
-+    }
-+
-+namespace lsp
-+{
-+    ATOMIC_ADD_DEF(int32_t, "ex")
-+    ATOMIC_ADD_DEF(uint32_t, "ex")
-+    ATOMIC_ADD_DEF2(int8_t)
-+    ATOMIC_ADD_DEF2(uint8_t)
-+    ATOMIC_ADD_DEF2(int16_t)
-+    ATOMIC_ADD_DEF2(uint16_t)
-+} /* namespace lsp */
-+
-+#undef ATOMIC_ADD_DEF
-+#undef ATOMIC_ADD_DEF2
-+
-+//-----------------------------------------------------------------------------
-+// Atomic operations
-+
-+#define LSP_ATOMIC_UNLOCKED     1
-+#define LSP_ATOMIC_LOCKED       0
-+
-+namespace lsp
-+{
-+    template <class T>
-+    inline void atomic_init(T &lk)
-+    {
-+        atomic_store(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        );
-+    }
-+
-+    template <class T>
-+    inline T atomic_trylock(T &lk)
-+    {
-+        return T(atomic_cas(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED)),
-+            fixed_int(T(LSP_ATOMIC_LOCKED))
-+        ));
-+    }
-+
-+    template <class T>
-+    inline T atomic_unlock(T &lk)
-+    {
-+        return T(atomic_swap(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        ));
-+    }
-+} /* namespace lsp */
-+
-+
-+
-+#endif /* LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_ARMV6_H_ */
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-legacy.h b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-legacy.h
-index cdfd2cd..bb23167 100644
---- a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-legacy.h
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-legacy.h
-@@ -31,10 +31,10 @@ namespace lsp
-     extern uint32_t atomic_lock_barrier;
- } /* namespace lsp */
- 
--#define ATOMIC_LOAD_DEF(type, cmd) \
--    inline type atomic_load(type *ptr) \
-+#define ATOMIC_LOAD_DEF(rtype, type, cmd) \
-+    inline rtype atomic_load(type ptr) \
-     { \
--        type retval; \
-+        rtype retval; \
-         ARCH_ARM_ASM( \
-             __ASM_EMIT(cmd "        %[ret], [%[ptr]]") \
-             : [ret] "=&r" (retval) \
-@@ -46,13 +46,20 @@ namespace lsp
- 
- namespace lsp
- {
--    ATOMIC_LOAD_DEF(int8_t,     "ldrb")
--    ATOMIC_LOAD_DEF(uint8_t,    "ldrb")
--    ATOMIC_LOAD_DEF(int16_t,    "ldrh")
--    ATOMIC_LOAD_DEF(uint16_t,   "ldrh")
--    ATOMIC_LOAD_DEF(int32_t,    "ldr")
--    ATOMIC_LOAD_DEF(uint32_t,   "ldr")
--    ATOMIC_LOAD_DEF(void *,     "ldr")
-+    ATOMIC_LOAD_DEF(int8_t, int8_t *,               "ldrb")
-+    ATOMIC_LOAD_DEF(int8_t, const int8_t *,         "ldrb")
-+    ATOMIC_LOAD_DEF(uint8_t, uint8_t *,             "ldrb")
-+    ATOMIC_LOAD_DEF(uint8_t, const uint8_t *,       "ldrb")
-+    ATOMIC_LOAD_DEF(int16_t, int16_t *,             "ldrh")
-+    ATOMIC_LOAD_DEF(int16_t, const int16_t *,       "ldrh")
-+    ATOMIC_LOAD_DEF(uint16_t, uint16_t *,           "ldrh")
-+    ATOMIC_LOAD_DEF(uint16_t, const uint16_t *,     "ldrh")
-+    ATOMIC_LOAD_DEF(int32_t, int32_t *,             "ldr")
-+    ATOMIC_LOAD_DEF(int32_t, const int32_t *,       "ldr")
-+    ATOMIC_LOAD_DEF(uint32_t, uint32_t *,           "ldr")
-+    ATOMIC_LOAD_DEF(uint32_t, const uint32_t *,     "ldr")
-+    ATOMIC_LOAD_DEF(void *, const void **,          "ldr")
-+    ATOMIC_LOAD_DEF(void *, const void * const *,   "ldr")
- } /* namespace lsp */
- 
- #undef ATOMIC_LOAD_DEF
-@@ -108,10 +115,10 @@ namespace lsp
- #define ATOMIC_SWAP_DEF3(type) \
-     inline type atomic_swap(type *ptr, type value) \
-     { \
--        while (atomic_swap(&atomic_lock_barrier, 1)) /* nothing */ ; \
-+        while (atomic_swap(&atomic_lock_barrier, uint32_t(1))) /* nothing */ ; \
-         type retval = *ptr; \
-         *ptr = value; \
--        atomic_swap(&atomic_lock_barrier, 0); \
-+        atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
-         return retval; \
-     }
- 
-@@ -135,16 +142,16 @@ namespace lsp
- #define ATOMIC_CAS_DEF(type)                        \
-     inline bool atomic_cas(type *ptr, type exp, type rep) \
-     { \
--        if (!atomic_swap(&atomic_lock_barrier, 1)) \
-+        if (!atomic_swap(&atomic_lock_barrier, uint32_t(1))) \
-             return false; \
-         if (*ptr == exp) \
-         { \
-             *ptr    = rep; \
--            atomic_swap(&atomic_lock_barrier, 0); \
-+            atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
-             return true; \
-         } \
-         \
--        atomic_swap(&atomic_lock_barrier, 0); \
-+        atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
-         return false; \
-     }
- 
-@@ -191,14 +198,32 @@ namespace lsp
- 
- namespace lsp
- {
--    template <class type_t>
--        inline void atomic_init(type_t &lk) { lk = LSP_ATOMIC_UNLOCKED; }
-+    template <class T>
-+    inline void atomic_init(T &lk)
-+    {
-+        atomic_store(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        );
-+    }
- 
--    template <class type_t>
--        inline type_t atomic_trylock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_LOCKED); }
-+    template <class T>
-+    inline T atomic_trylock(T &lk)
-+    {
-+        return T(atomic_swap(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_LOCKED))
-+        ));
-+    }
- 
--    template <class type_t>
--        inline type_t atomic_unlock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
-+    template <class T>
-+    inline T atomic_unlock(T &lk)
-+    {
-+        return T(atomic_swap(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        ));
-+    }
- } /* namespace lsp */
- 
- #endif /* LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_LEGACY_H_ */
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic.h b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic.h
-index da702eb..ccdf83c 100644
---- a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic.h
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic.h
-@@ -31,9 +31,9 @@
-     { \
-         type retval; \
-         ARCH_ARM_ASM( \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             __ASM_EMIT(cmd "        %[ret], [%[ptr]]") \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             : [ret] "=&r" (retval) \
-             : [ptr] "r" (ptr) \
-             : "memory" \
-@@ -67,9 +67,9 @@ namespace lsp
-     inline void atomic_store(type *ptr, type value) \
-     { \
-         ARCH_ARM_ASM( \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             __ASM_EMIT(cmd "        %[value], [%[ptr]]") \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             : \
-             : [ptr] "r" (ptr), [value] "r" (value) \
-             : "memory" \
-@@ -97,7 +97,7 @@ namespace lsp
-         ARCH_ARM_ASM \
-         ( \
-             __ASM_EMIT("1:") \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             __ASM_EMIT("ldr" qsz "      %[tmp], [%[ptr]]") \
-             __ASM_EMIT("cmp             %[tmp], %[exp]") \
-             __ASM_EMIT("mov             %[tmp], #0") \
-@@ -107,7 +107,7 @@ namespace lsp
-             __ASM_EMIT("bne             1b") \
-             __ASM_EMIT("mov             %[tmp], #1") \
-             __ASM_EMIT("2:") \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             : [tmp] "=&r" (tmp) \
-             : [ptr] "r" (ptr), [exp] "r" (exp), [rep] "r" (rep) \
-             : "cc", "memory" \
-@@ -136,13 +136,13 @@ namespace lsp
-         ARCH_ARM_ASM                                    \
-         (                                               \
-             __ASM_EMIT("1:")    \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             __ASM_EMIT("ldr" qsz "      %[ret], [%[ptr]]") \
-             __ASM_EMIT("add             %[sum], %[ret], %[src]") \
-             __ASM_EMIT("str" qsz "      %[tmp], %[sum], [%[ptr]]") \
-             __ASM_EMIT("tst             %[tmp], %[tmp]") \
-             __ASM_EMIT("bne             1b") \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             : [tmp] "=&r" (tmp), \
-               [sum] "=&r" (sum), \
-               [ret] "=&r" (retval)  \
-@@ -174,12 +174,12 @@ namespace lsp
-         ARCH_ARM_ASM                                    \
-         (                                               \
-             __ASM_EMIT("1:")    \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             __ASM_EMIT("ldr" qsz "      %[ret], [%[ptr]]") \
-             __ASM_EMIT("str" qsz "      %[tmp], %[src], [%[ptr]]") \
-             __ASM_EMIT("tst             %[tmp], %[tmp]") \
-             __ASM_EMIT("bne             1b") \
--            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
-+            __ASM_EMIT("dmb ish") \
-             : [tmp] "=&r" (tmp), \
-               [ret] "=&r" (retval)  \
-             : [ptr] "r" (ptr), \
-@@ -210,14 +210,33 @@ namespace lsp
- 
- namespace lsp
- {
--    template <class type_t>
--        inline void atomic_init(type_t &lk) { lk = LSP_ATOMIC_UNLOCKED; }
-+    template <class T>
-+    inline void atomic_init(T &lk)
-+    {
-+        atomic_store(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        );
-+    }
- 
--    template <class type_t>
--        inline type_t atomic_trylock(type_t &lk) { return atomic_cas(&lk, LSP_ATOMIC_UNLOCKED, LSP_ATOMIC_LOCKED); }
-+    template <class T>
-+    inline T atomic_trylock(T &lk)
-+    {
-+        return T(atomic_cas(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED)),
-+            fixed_int(T(LSP_ATOMIC_LOCKED))
-+        ));
-+    }
- 
--    template <class type_t>
--        inline type_t atomic_unlock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
-+    template <class T>
-+    inline T atomic_unlock(T &lk)
-+    {
-+        return T(atomic_swap(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        ));
-+    }
- } /* namespace lsp */
- 
- #endif /* LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_H_ */
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/generic/atomic.h b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/generic/atomic.h
-index fbf216a..c3e0bce 100644
---- a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/generic/atomic.h
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/generic/atomic.h
-@@ -146,7 +146,7 @@ namespace lsp
-         ATOMIC_ADD_DEF(int64_t)
-         ATOMIC_ADD_DEF(uint64_t)
-     #endif /* ARCH_64BIT */
--}
-+} /* namespace lsp */
- 
- #undef ATOMIC_ADD_DEF
- 
-@@ -158,14 +158,33 @@ namespace lsp
- 
- namespace lsp
- {
--    template <class type_t>
--    inline void atomic_init(type_t &lk)     { atomic_store(&lk, LSP_ATOMIC_UNLOCKED);       }
-+    template <class T>
-+    inline void atomic_init(T &lk)
-+    {
-+        atomic_store(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        );
-+    }
- 
--    template <class type_t>
--    inline bool atomic_trylock(type_t &lk)  { return atomic_cas(&lk, LSP_ATOMIC_UNLOCKED, LSP_ATOMIC_LOCKED); }
-+    template <class T>
-+    inline bool atomic_trylock(T &lk)
-+    {
-+        return atomic_cas(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED)),
-+            fixed_int(T(LSP_ATOMIC_LOCKED))
-+        );
-+    }
- 
--    template <class type_t>
--    inline type_t atomic_unlock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
--}
-+    template <class T>
-+    inline T atomic_unlock(T &lk)
-+    {
-+        return T(atomic_swap(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        ));
-+    }
-+} /* namespace lsp */
- 
- #endif /* LSP_PLUG_IN_COMMON_ARCH_GENERIC_ATOMIC_H_ */
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h
-index 58e5e36..077e07f 100644
---- a/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h
-@@ -1,6 +1,6 @@
- /*
-- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
-- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
-+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
-+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
-  *
-  * This file is part of lsp-common-lib
-  * Created on: 31 мар. 2020 г.
-@@ -212,14 +212,29 @@ namespace lsp
- 
- namespace lsp
- {
--    template <class type_t>
--    inline void atomic_init(type_t &lk)         { lk = LSP_ATOMIC_UNLOCKED; }
-+    template <class T>
-+    inline void atomic_init(T & lk)
-+    {
-+        lk = LSP_ATOMIC_UNLOCKED;
-+    }
- 
--    template <class type_t>
--    inline type_t atomic_trylock(type_t &lk)    { return atomic_swap(&lk, LSP_ATOMIC_LOCKED); }
-+    template <class T>
-+    inline T atomic_trylock(T & lk)
-+    {
-+        return T(atomic_swap(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_LOCKED))
-+        ));
-+    }
- 
--    template <class type_t>
--    inline type_t atomic_unlock(type_t &lk)     { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
-+    template <class T>
-+    inline T atomic_unlock(T &lk)
-+    {
-+        return T(atomic_swap(
-+            fixed_int(&lk),
-+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
-+        ));
-+    }
- 
- } /* namespace lsp */
- 
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/atomic.h b/modules/lsp-common-lib/include/lsp-plug.in/common/atomic.h
-index f5dd67c..7282c92 100644
---- a/modules/lsp-common-lib/include/lsp-plug.in/common/atomic.h
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/atomic.h
-@@ -55,8 +55,10 @@ namespace lsp
-         #include <lsp-plug.in/common/arch/x86/atomic.h>
-     #elif defined(ARCH_AARCH64) /* ARM 64-bit implementation */
-         #include <lsp-plug.in/common/arch/aarch64/atomic.h>
--    #elif defined(ARCH_ARM7) || defined(ARCH_ARM6) /* ARM 32-bit implementation */
-+    #elif defined(ARCH_ARM7) /* ARM 32-bit implementation */
-         #include <lsp-plug.in/common/arch/arm/atomic.h>
-+    #elif defined(ARCH_ARM6) /* ARM 32-bit implementation */
-+        #include <lsp-plug.in/common/arch/arm/atomic-armv6.h>
-     #elif defined(ARCH_ARM) /* ARM 32-bit implementation */
-         #include <lsp-plug.in/common/arch/arm/atomic-legacy.h>
-     #else /* Generic implementation */
-@@ -78,6 +80,12 @@ namespace lsp
-         );
-     }
- 
-+    template <class T>
-+    T atomic_swap(T *ptr, T value)
-+    {
-+        return T(atomic_swap(fixed_int(ptr), fixed_int(value)));
-+    }
-+
-     // Special case for NULL
-     template <class T>
-     T *atomic_swap(T **ptr, nullptr_t *value)
-@@ -90,6 +98,34 @@ namespace lsp
-         );
-     }
- 
-+    template <class T>
-+    bool atomic_cas(T *dst, T src, T rep)
-+    {
-+        return atomic_cas(fixed_int(dst), fixed_int(src), fixed_int(rep));
-+    }
-+
-+    template <class T>
-+    bool atomic_cas(T **dst, T *src, T *rep)
-+    {
-+        return atomic_cas(
-+            reinterpret_cast<void **>(dst),
-+            reinterpret_cast<void *>(src),
-+            reinterpret_cast<void *>(rep)
-+        );
-+    }
-+
-+    template <class T>
-+    T atomic_load(T *ptr)
-+    {
-+        return T(atomic_load(fixed_int(ptr)));
-+    }
-+
-+    template <class T>
-+    T atomic_load(const T *ptr)
-+    {
-+        return T(atomic_load(fixed_int(ptr)));
-+    }
-+
-     template <class T>
-     T *atomic_load(T **ptr)
-     {
-@@ -110,6 +146,12 @@ namespace lsp
-         );
-     }
- 
-+    template <class T>
-+    void atomic_store(T *ptr, T value)
-+    {
-+        return atomic_store(fixed_int(ptr), fixed_int(value));
-+    }
-+
-     template <class T>
-     void atomic_store(T **ptr, T * value)
-     {
-@@ -118,6 +160,15 @@ namespace lsp
-             reinterpret_cast<void *>(value)
-         );
-     }
-+
-+    template <class T>
-+    inline T atomic_add(T *ptr, T value)
-+    {
-+        return T(atomic_add(
-+            fixed_int(ptr),
-+            fixed_int(value)
-+        ));
-+    }
- } /* namespace lsp */
- 
- #endif /* LSP_PLUG_IN_COMMON_ATOMIC_H_ */
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/bits.h b/modules/lsp-common-lib/include/lsp-plug.in/common/bits.h
-index 896c68d..37e2f10 100644
---- a/modules/lsp-common-lib/include/lsp-plug.in/common/bits.h
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/bits.h
-@@ -1,6 +1,6 @@
- /*
-- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
-- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
-+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
-+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
-  *
-  * This file is part of lsp-common-lib
-  * Created on: 1 апр. 2020 г.
-@@ -60,6 +60,43 @@ namespace lsp
- 
- namespace lsp
- {
-+    /**
-+     * Compute binary logarithm of the integer value
-+     * @param value value to compute binary logarithm
-+     * @return computed binary logarithm
-+     */
-+    template <class T>
-+    inline T int_log2(T value)
-+    {
-+        return T(int_log2(fixed_int(value)));
-+    }
-+
-+    /**
-+     * Reverse bits
-+     * @param src source value to reverse bits
-+     * @return value with reverse-order of bits
-+     */
-+    template <class T>
-+    inline T reverse_bits(T src)
-+    {
-+        return T(reverse_bits(fixed_int(src)));
-+    }
-+
-+    /**
-+     * Reverse bits
-+     * @param src source value to reverse bits
-+     * @param count number of significant bits in the integer value
-+     * @return value with reverse-order of significant bits
-+     */
-+    template <class T>
-+    inline T reverse_bits(T src, size_t count)
-+    {
-+        return T(reverse_bits(
-+            fixed_int(src),
-+            count
-+        ));
-+    }
-+
-     /**
-      * Round the integer value up to power of 2
-      * @tparam T integer value
-@@ -67,9 +104,9 @@ namespace lsp
-      * @return rounded value
-      */
-     template <class T>
--    T round_pow2(T value)
-+    inline T round_pow2(T value)
-     {
--        T rounded   = 1 << int_log2(value);
-+        T rounded   = T(1 << int_log2(fixed_int(value)));
-         return (rounded == value) ? rounded : rounded << 1;
-     }
- } /* namespace lsp */
-diff --git a/modules/lsp-common-lib/include/lsp-plug.in/common/types.h b/modules/lsp-common-lib/include/lsp-plug.in/common/types.h
-index b0f3187..09d8924 100644
---- a/modules/lsp-common-lib/include/lsp-plug.in/common/types.h
-+++ b/modules/lsp-common-lib/include/lsp-plug.in/common/types.h
-@@ -1020,6 +1020,7 @@ namespace lsp
-     template <> struct fixed_int_alias_t<4, false>              { typedef uint32_t type;    };
-     template <> struct fixed_int_alias_t<8, false>              { typedef uint64_t type;    };
- 
-+    template <> struct fixed_int_type_t<char> : public fixed_int_alias_t<sizeof(char), char(0xff) < 0> {};
-     template <> struct fixed_int_type_t<signed char> : public fixed_int_alias_t<sizeof(signed char), true> {};
-     template <> struct fixed_int_type_t<signed short> : public fixed_int_alias_t<sizeof(signed short), true> {};
-     template <> struct fixed_int_type_t<signed int> : public fixed_int_alias_t<sizeof(signed int), true> {};
-@@ -1032,7 +1033,7 @@ namespace lsp
-     template <> struct fixed_int_type_t<unsigned long long> : public fixed_int_alias_t<sizeof(unsigned long long), false> {};
- 
-     /**
--     * Safe size-matching conversion of integral type to one of intN_t/uintN_t types without loosing precision.
-+     * Safe size-matching conversion of integral type to one of intN_t/uintN_t types without losing precision.
-      * This is usual for systems where size_t is defined in some strange way like in MacOS.
-      *
-      * @param value value to convert
-@@ -1044,6 +1045,32 @@ namespace lsp
-         return typename fixed_int_type_t<T>::type(value);
-     }
- 
-+    /**
-+     * Safe size-matching conversion of integral type pointer to one of intN_t/uintN_t pointer types without losing precision.
-+     * This is usual for systems where size_t is defined in some strange way like in MacOS.
-+     *
-+     * @param value value to convert
-+     * @return converted value
-+     */
-+    template <typename T>
-+    constexpr inline typename fixed_int_type_t<T>::type *fixed_int(T *value)
-+    {
-+        return reinterpret_cast<typename fixed_int_type_t<T>::type *>(value);
-+    }
-+
-+    /**
-+     * Safe size-matching conversion of integral type pointer to one of intN_t/uintN_t pointer types without losing precision.
-+     * This is usual for systems where size_t is defined in some strange way like in MacOS.
-+     *
-+     * @param value value to convert
-+     * @return converted value
-+     */
-+    template <typename T>
-+    constexpr inline const typename fixed_int_type_t<T>::type * fixed_int(const T *value)
-+    {
-+        return reinterpret_cast<const typename fixed_int_type_t<T>::type *>(value);
-+    }
-+
- } /* namespace lsp */
- 
- #endif /* LSP_PLUG_IN_COMMON_TYPES_H_ */
-diff --git a/modules/lsp-common-lib/src/main/atomic.cpp b/modules/lsp-common-lib/src/main/atomic.cpp
-index 80be267..0494d13 100644
---- a/modules/lsp-common-lib/src/main/atomic.cpp
-+++ b/modules/lsp-common-lib/src/main/atomic.cpp
-@@ -23,7 +23,7 @@
- 
- namespace lsp
- {
--#if defined(ARCH_ARM7) || defined(ARCH_ARM6)
-+#if defined(ARCH_ARM7)
-     /* nothing */
- #elif defined(ARCH_ARM)
-     LSP_COMMON_LIB_PUBLIC
-diff --git a/modules/lsp-common-lib/src/test/utest/atomic.cpp b/modules/lsp-common-lib/src/test/utest/atomic.cpp
-index 7cfc165..11c668c 100644
---- a/modules/lsp-common-lib/src/test/utest/atomic.cpp
-+++ b/modules/lsp-common-lib/src/test/utest/atomic.cpp
-@@ -26,65 +26,104 @@ using namespace lsp;
- 
- UTEST_BEGIN("common", atomic)
- 
--    void test_cas()
-+    template <class T>
-+    void test_cas(const char *type)
-     {
-         size_t i;
--        atomic_t value;
--        atomic_store(&value, 0);
-+        T value;
-+        atomic_store(&value, T(0));
- 
--        printf("Testing atomic_cas...\n");
-+        printf("Testing atomic_cas for %s...\n", type);
- 
-         for (i=0; i<1000; ++i)
--            if (atomic_cas(&value, 0, 1))
-+            if (atomic_cas(&value, T(0), T(1)))
-                 break;
-         UTEST_ASSERT(i < 1000);
- 
-         for (i=0; i<1000; ++i)
--            if (atomic_cas(&value, 0, 1))
-+            if (atomic_cas(&value, T(0), T(1)))
-                 break;
-         UTEST_ASSERT(i >= 1000);
- 
-         for (i=0; i<1000; ++i)
--            if (atomic_cas(&value, 1, 2))
-+            if (atomic_cas(&value, T(1), T(2)))
-                 break;
-         UTEST_ASSERT(i < 1000);
--        UTEST_ASSERT(atomic_load(&value) == 2);
-+        UTEST_ASSERT(atomic_load(&value) == T(2));
-     }
- 
--    void test_swap()
-+    template <class T>
-+    void test_swap(const char *type)
-     {
--        atomic_t value1, value2;
--        atomic_store(&value1, 0);
--        atomic_store(&value2, 1);
--        printf("Testing atomic_swap...\n");
-+        T value1, value2;
-+        atomic_store(&value1, T(0));
-+        atomic_store(&value2, T(1));
- 
--        atomic_swap(&value1, 2);
--        atomic_swap(&value2, 3);
-+        printf("Testing atomic_swap for %s...\n", type);
- 
--        UTEST_ASSERT(atomic_load(&value1) == 2);
--        UTEST_ASSERT(atomic_load(&value2) == 3);
-+        atomic_swap(&value1, T(2));
-+        atomic_swap(&value2, T(3));
-+
-+        UTEST_ASSERT(atomic_load(&value1) == T(2));
-+        UTEST_ASSERT(atomic_load(&value2) == T(3));
- 
-         atomic_swap(&value1, value2);
- 
--        UTEST_ASSERT(atomic_load(&value1) == 3);
-+        UTEST_ASSERT(atomic_load(&value1) == T(3));
-     }
- 
--    void test_add()
-+    template <class T>
-+    void test_add(const char *type)
-     {
--        atomic_t value;
--        atomic_store(&value, 0);
--        printf("Testing atomic_add...\n");
-+        T value;
-+        atomic_store(&value, T(0));
-+        printf("Testing atomic_add for %s...\n", type);
- 
--        for (size_t i=0; i<1000; ++i)
--            UTEST_ASSERT(atomic_add(&value, 1) == atomic_t(i)); // i == previous value
--        UTEST_ASSERT(atomic_load(&value) == 1000);
-+        for (size_t i=0; i<0x40; ++i)
-+            UTEST_ASSERT(atomic_add(&value, T(1)) == T(i)); // i == previous value
-+        UTEST_ASSERT(atomic_load(&value) == T(0x40));
-     }
- 
-     UTEST_MAIN
-     {
--        test_cas();
--        test_swap();
--        test_add();
-+        test_cas<int8_t>("int8_t");
-+        test_cas<uint8_t>("uint8_t");
-+        test_cas<int16_t>("int16_t");
-+        test_cas<uint16_t>("uint16_t");
-+        test_cas<int32_t>("int32_t");
-+        test_cas<uint32_t>("uint32_t");
-+    #if defined(ARCH_64BIT)
-+        test_cas<int64_t>("int64_t");
-+        test_cas<uint64_t>("uint64_t");
-+    #endif /* ARCH_64BIT */
-+        test_cas<size_t>("size_t");
-+        test_cas<ssize_t>("ssize_t");
-+
-+        test_swap<int8_t>("int8_t");
-+        test_swap<uint8_t>("uint8_t");
-+        test_swap<int16_t>("int16_t");
-+        test_swap<uint16_t>("uint16_t");
-+        test_swap<int32_t>("int32_t");
-+        test_swap<uint32_t>("uint32_t");
-+    #if defined(ARCH_64BIT)
-+        test_swap<int32_t>("int64_t");
-+        test_swap<uint32_t>("uint64_t");
-+    #endif /* ARCH_64BIT */
-+        test_swap<size_t>("size_t");
-+        test_swap<ssize_t>("ssize_t");
-+
-+        test_add<int8_t>("int8_t");
-+        test_add<uint8_t>("uint8_t");
-+        test_add<int16_t>("int16_t");
-+        test_add<uint16_t>("uint16_t");
-+        test_add<int32_t>("int32_t");
-+        test_add<uint32_t>("uint32_t");
-+    #if defined(ARCH_64BIT)
-+        test_add<int64_t>("int64_t");
-+        test_add<uint64_t>("uint64_t");
-+    #endif /* ARCH_64BIT */
-+        test_add<size_t>("size_t");
-+        test_add<ssize_t>("ssize_t");
-     }
- UTEST_END;
- 
-diff --git a/modules/lsp-common-lib/src/test/utest/bits.cpp b/modules/lsp-common-lib/src/test/utest/bits.cpp
-index 777f9e5..cb1d973 100644
---- a/modules/lsp-common-lib/src/test/utest/bits.cpp
-+++ b/modules/lsp-common-lib/src/test/utest/bits.cpp
-@@ -26,51 +26,63 @@ using namespace lsp;
- 
- UTEST_BEGIN("common", bits)
-     template <typename T>
--        void test_reverse_bits(const char *label)
-+    void test_reverse_bits(const char *label)
-+    {
-+        printf("Testing reverse_bits for %s...\n", label);
-+        const size_t n = sizeof(T) * 8;
-+
-+        for (size_t i=0; i<n; ++i)
-         {
--            printf("Testing %s...\n", label);
--            size_t n = sizeof(T) * 8;
--
--            for (size_t i=0; i<n; ++i)
--            {
--                T x     = T(1) << i;
--                T y     = reverse_bits(x);
--                T ck    = (T(1) << (n - i - 1));
--                UTEST_ASSERT_MSG(y == ck, "%s: tier1, i=%d, n=%d", label, int(i), int(n));
--            }
--
--            for (size_t i=0; i<(n - 4); ++i)
--            {
--                T x     = T(1) << i;
--                T y     = reverse_bits(x, n - 4);
--                T ck    = (T(1) << (n - 5 - i));
--                UTEST_ASSERT_MSG(y == ck, "%s: tier2, i=%d, n=%d", label, int(i), int(n));
--            }
--
--            for (size_t i=0; i<4; ++i)
--            {
--                T x     = T(1) << i;
--                T y     = reverse_bits(x, 4);
--                T ck    = (T(1) << (3 - i));
--                UTEST_ASSERT_MSG(y == ck, "%s: tier3, i=%d, n=%d", label, int(i), int(n));
--            }
-+            T x     = T(1) << i;
-+            T y     = reverse_bits(x);
-+            T ck    = (T(1) << (n - i - 1));
-+            UTEST_ASSERT_MSG(y == ck, "%s: tier1, i=%d, n=%d, x=0x%08llx, y=0x%08llx, ck=0x%08llx",
-+                label, int(i), int(n),
-+                (long long)x,
-+                (long long)y,
-+                (long long)ck);
-         }
- 
--    template <typename T>
--        void test_int_log2(const char *label)
-+        for (size_t i=0; i<(n - 4); ++i)
-         {
--            printf("Testing %s...\n", label);
-+            T x     = T(1) << i;
-+            T y     = reverse_bits(x, n - 4);
-+            T ck    = (T(1) << (n - 5 - i));
-+            UTEST_ASSERT_MSG(y == ck, "%s: tier2, i=%d, n=%d, x=0x%08llx, y=0x%08llx, ck=0x%08llx",
-+                label, int(i), int(n),
-+                (long long)x,
-+                (long long)y,
-+                (long long)ck);
-+        }
- 
--            int log2 = int_log2(T(0));
--            UTEST_ASSERT_MSG(log2 == 0, "%s: zero input detected as %d", label, log2);
-+        for (size_t i=0; i<4; ++i)
-+        {
-+            T x     = T(1) << i;
-+            T y     = reverse_bits(x, 4);
-+            T ck    = (T(1) << (3 - i));
-+            UTEST_ASSERT_MSG(y == ck, "%s: tier3, i=%d, n=%d, x=0x%08llx, y=0x%08llx, ck=0x%08llx",
-+                label, int(i), int(n),
-+                (long long)x,
-+                (long long)y,
-+                (long long)ck);
-+        }
-+    }
- 
--            for (int i=0; i<int(sizeof(T)*8); ++i)
--            {
--                T x     = T(1) << i;
--                int y   = int_log2(x);
--                UTEST_ASSERT_MSG(y == i, "%s: bit=%d but detected as %d", label, i, y);
--            }
-+    template <typename T>
-+    void test_int_log2(const char *label)
-+    {
-+        printf("Testing int_log2 for %s...\n", label);
-+
-+        int log2 = int_log2(T(0));
-+        UTEST_ASSERT_MSG(log2 == 0, "%s: zero input detected as %d", label, log2);
-+
-+        for (int i=0; i<int(sizeof(T)*8); ++i)
-+        {
-+            T x     = T(1) << i;
-+            int y   = int_log2(x);
-+            UTEST_ASSERT_MSG(y == i, "%s: bit=%d but detected as %d", label, i, y);
-         }
-+    }
- 
-     void test_pow2_rounding()
-     {
-@@ -85,23 +97,27 @@ UTEST_BEGIN("common", bits)
- 
-     UTEST_MAIN
-     {
--        test_reverse_bits<uint8_t>("reverse_bits u8");
--        test_reverse_bits<int8_t>("reverse_bits i8");
--        test_reverse_bits<uint16_t>("reverse_bits u16");
--        test_reverse_bits<int16_t>("reverse_bits i16");
--        test_reverse_bits<uint32_t>("reverse_bits u32");
--        test_reverse_bits<int32_t>("reverse_bits i32");
--        test_reverse_bits<uint64_t>("reverse_bits u64");
--        test_reverse_bits<int64_t>("reverse_bits i64");
--
--        test_int_log2<uint8_t>("int_log2 u8");
--        test_int_log2<int8_t>("int_log2 i8");
--        test_int_log2<uint16_t>("int_log2 u16");
--        test_int_log2<int16_t>("int_log2 i16");
--        test_int_log2<uint32_t>("int_log2 u32");
--        test_int_log2<int32_t>("int_log2 i32");
--        test_int_log2<uint64_t>("int_log2 u64");
--        test_int_log2<int64_t>("int_log2 i64");
-+        test_reverse_bits<uint8_t>("uint8_t");
-+        test_reverse_bits<int8_t>("int8_t");
-+        test_reverse_bits<uint16_t>("uint16_t");
-+        test_reverse_bits<int16_t>("int16_t");
-+        test_reverse_bits<uint32_t>("uint32_t");
-+        test_reverse_bits<int32_t>("int32_t");
-+        test_reverse_bits<uint64_t>("uint64_t");
-+        test_reverse_bits<int64_t>("int64_t");
-+        test_reverse_bits<size_t>("size_t");
-+        test_reverse_bits<ssize_t>("ssize_t");
-+
-+        test_int_log2<uint8_t>("uint8_t");
-+        test_int_log2<int8_t>("int8_t");
-+        test_int_log2<uint16_t>("uint16_t");
-+        test_int_log2<int16_t>("int16_t");
-+        test_int_log2<uint32_t>("uint32_t");
-+        test_int_log2<int32_t>("int32_t");
-+        test_int_log2<uint64_t>("uint64_t");
-+        test_int_log2<int64_t>("int64_t");
-+        test_int_log2<size_t>("size_t");
-+        test_int_log2<ssize_t>("ssize_t");
- 
-         test_pow2_rounding();
-     }
-diff --git a/modules/lsp-common-lib/src/test/utest/types.cpp b/modules/lsp-common-lib/src/test/utest/types.cpp
-new file mode 100644
-index 0000000..9af62ab
---- /dev/null
-+++ b/modules/lsp-common-lib/src/test/utest/types.cpp
-@@ -0,0 +1,99 @@
-+/*
-+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
-+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
-+ *
-+ * This file is part of lsp-common-lib
-+ * Created on: 3 мар. 2025 г.
-+ *
-+ * lsp-common-lib is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License as published by
-+ * the Free Software Foundation, either version 3 of the License, or
-+ * any later version.
-+ *
-+ * lsp-common-lib is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * along with lsp-common-lib. If not, see <https://www.gnu.org/licenses/>.
-+ */
-+
-+#include <lsp-plug.in/common/types.h>
-+#include <lsp-plug.in/test-fw/utest.h>
-+
-+using namespace lsp;
-+
-+UTEST_BEGIN("common", types)
-+
-+    template <class type>
-+    void test_cast(type value)
-+    {
-+        auto casted = lsp::fixed_int(value);
-+        UTEST_ASSERT(sizeof(casted) == sizeof(value));
-+    }
-+
-+    UTEST_MAIN
-+    {
-+        char str[8];
-+        const char *cstr = "test";
-+
-+        test_cast<char>(static_cast<char>(42));
-+        test_cast<short>(static_cast<short>(42));
-+        test_cast<int>(static_cast<int>(42));
-+        test_cast<long>(static_cast<long>(42));
-+        test_cast<long long>(static_cast<long long>(42));
-+
-+        test_cast<signed char>(static_cast<signed char>(42));
-+        test_cast<signed short>(static_cast<signed short>(42));
-+        test_cast<signed int>(static_cast<signed int>(42));
-+        test_cast<signed long>(static_cast<signed long>(42));
-+        test_cast<signed long long>(static_cast<signed long long>(42));
-+
-+        test_cast<unsigned char>(static_cast<unsigned char>(42));
-+        test_cast<unsigned short>(static_cast<unsigned short>(42));
-+        test_cast<unsigned int>(static_cast<unsigned int>(42));
-+        test_cast<unsigned long>(static_cast<unsigned long>(42));
-+        test_cast<unsigned long long>(static_cast<unsigned long long>(42));
-+
-+        test_cast<char *>(reinterpret_cast<char *>(str));
-+        test_cast<short *>(reinterpret_cast<short *>(str));
-+        test_cast<int *>(reinterpret_cast<int *>(str));
-+        test_cast<long *>(reinterpret_cast<long *>(str));
-+        test_cast<long long *>(reinterpret_cast<long long *>(str));
-+
-+        test_cast<signed char *>(reinterpret_cast<signed char *>(str));
-+        test_cast<signed short *>(reinterpret_cast<signed short *>(str));
-+        test_cast<signed int *>(reinterpret_cast<signed int *>(str));
-+        test_cast<signed long *>(reinterpret_cast<signed long *>(str));
-+        test_cast<signed long long *>(reinterpret_cast<signed long long *>(str));
-+
-+        test_cast<unsigned char *>(reinterpret_cast<unsigned char *>(str));
-+        test_cast<unsigned short *>(reinterpret_cast<unsigned short *>(str));
-+        test_cast<unsigned int *>(reinterpret_cast<unsigned int *>(str));
-+        test_cast<unsigned long *>(reinterpret_cast<unsigned long *>(str));
-+        test_cast<unsigned long long *>(reinterpret_cast<unsigned long long *>(str));
-+
-+        test_cast<const char *>(reinterpret_cast<const char *>(cstr));
-+        test_cast<const short *>(reinterpret_cast<const short *>(cstr));
-+        test_cast<const int *>(reinterpret_cast<const int *>(cstr));
-+        test_cast<const long *>(reinterpret_cast<const long *>(cstr));
-+        test_cast<const long long *>(reinterpret_cast<const long long *>(cstr));
-+
-+        test_cast<const signed char *>(reinterpret_cast<const signed char *>(cstr));
-+        test_cast<const signed short *>(reinterpret_cast<const signed short *>(cstr));
-+        test_cast<const signed int *>(reinterpret_cast<const signed int *>(cstr));
-+        test_cast<const signed long *>(reinterpret_cast<const signed long *>(cstr));
-+        test_cast<const signed long long *>(reinterpret_cast<const signed long long *>(cstr));
-+
-+        test_cast<const unsigned char *>(reinterpret_cast<const unsigned char *>(cstr));
-+        test_cast<const unsigned short *>(reinterpret_cast<const unsigned short *>(cstr));
-+        test_cast<const unsigned int *>(reinterpret_cast<const unsigned int *>(cstr));
-+        test_cast<const unsigned long *>(reinterpret_cast<const unsigned long *>(cstr));
-+        test_cast<const unsigned long long *>(reinterpret_cast<const unsigned long long *>(cstr));
-+    }
-+
-+UTEST_END;
-+
-+
-+
diff -pruN 1.2.21-5/debian/patches/series 1.2.23-0ubuntu1/debian/patches/series
--- 1.2.21-5/debian/patches/series	2025-04-14 08:29:04.000000000 +0000
+++ 1.2.23-0ubuntu1/debian/patches/series	2025-08-27 00:20:25.000000000 +0000
@@ -1,4 +1 @@
 #1003-HURD.patch
-1004-Fix_segfault_with_jack_plugins.patch
-1005-Fix_i386_build.patch
-#1006-Fix_armel_build.patch
diff -pruN 1.2.21-5/dependencies.mk 1.2.23-0ubuntu1/dependencies.mk
--- 1.2.21-5/dependencies.mk	2025-03-01 12:43:22.992491120 +0000
+++ 1.2.23-0ubuntu1/dependencies.mk	2025-08-26 18:16:40.709450247 +0000
@@ -114,13 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
\ No newline at end of file
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
+  
diff -pruN 1.2.21-5/make/tools.mk 1.2.23-0ubuntu1/make/tools.mk
--- 1.2.21-5/make/tools.mk	2025-03-01 12:43:22.988491145 +0000
+++ 1.2.23-0ubuntu1/make/tools.mk	2025-08-26 18:16:40.641450907 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-3rd-party/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-3rd-party/CHANGELOG
--- 1.2.21-5/modules/lsp-3rd-party/CHANGELOG	2025-03-01 12:42:55.308657293 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/CHANGELOG	2025-08-26 18:15:40.906030661 +0000
@@ -2,6 +2,15 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.23 ===
+* Updated VST3 SDK headers to support version 3.7.14.
+* Updated CLAP headers to support version 1.2.6.
+* Updated module versions in dependencies.
+
+=== 1.0.22 ===
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.21 ===
 * Updated module versions in dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/all.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/all.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/all.h	2025-03-01 12:42:55.308657293 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/all.h	2025-08-26 18:15:40.910030622 +0000
@@ -6,7 +6,11 @@
 #include "factory/draft/plugin-state-converter.h"
 
 #include "ext/draft/extensible-audio-ports.h"
+#include "ext/draft/gain-adjustment-metering.h"
+#include "ext/draft/mini-curve-display.h"
+#include "ext/draft/project-location.h"
 #include "ext/draft/resource-directory.h"
+#include "ext/draft/scratch-memory.h"
 #include "ext/draft/transport-control.h"
 #include "ext/draft/triggers.h"
 #include "ext/draft/tuning.h"
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/color.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/color.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/color.h	2025-03-01 12:42:55.308657293 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/color.h	2025-08-26 18:15:40.910030622 +0000
@@ -13,6 +13,8 @@ typedef struct clap_color {
    uint8_t blue;
 } clap_color_t;
 
+static const CLAP_CONSTEXPR clap_color_t CLAP_COLOR_TRANSPARENT = { 0, 0, 0, 0 };
+
 #ifdef __cplusplus
 }
 #endif
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/events.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/events.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/events.h	2025-03-01 12:42:55.308657293 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/events.h	2025-08-26 18:15:40.910030622 +0000
@@ -9,7 +9,12 @@ extern "C" {
 #endif
 
 // event header
-// must be the first attribute of the event
+// All clap events start with an event header to determine the overall
+// size of the event and its type and space (a namespacing for types).
+// clap_event objects are contiguous regions of memory which can be copied
+// with a memcpy of `size` bytes starting at the top of the header. As
+// such, be very careful when designing clap events with internal pointers
+// and other non-value-types to consider the lifetime of those members.
 typedef struct clap_event_header {
    uint32_t size;     // event size including this header, eg: sizeof (clap_event_note)
    uint32_t time;     // sample offset within the buffer for this event
@@ -266,6 +271,12 @@ enum clap_transport_flags {
    CLAP_TRANSPORT_IS_WITHIN_PRE_ROLL = 1 << 7,
 };
 
+// clap_event_transport provides song position, tempo, and similar information
+// from the host to the plugin. There are two ways a host communicates these values.
+// In the `clap_process` structure sent to each processing block, the host may
+// provide a transport structure which indicates the available information at the
+// start of the block. If the host provides sample-accurate tempo or transport changes,
+// it can also provide subsequent inter-block transport updates by delivering a new event.
 typedef struct clap_event_transport {
    clap_event_header_t header;
 
@@ -297,11 +308,27 @@ typedef struct clap_event_midi {
    uint8_t  data[3];
 } clap_event_midi_t;
 
+// clap_event_midi_sysex contains a pointer to a sysex contents buffer.
+// The lifetime of this buffer is (from host->plugin) only the process
+// call in which the event is delivered or (from plugin->host) only the
+// duration of a try_push call.
+//
+// Since `clap_output_events.try_push` requires hosts to make a copy of
+// an event, host implementers receiving sysex messages from plugins need
+// to take care to both copy the event (so header, size, etc...) but
+// also memcpy the contents of the sysex pointer to host-owned memory, and
+// not just copy the data pointer.
+//
+// Similarly plugins retaining the sysex outside the lifetime of a single
+// process call must copy the sysex buffer to plugin-owned memory.
+//
+// As a consequence, the data structure pointed to by the sysex buffer
+// must be contiguous and copyable with `memcpy` of `size` bytes.
 typedef struct clap_event_midi_sysex {
    clap_event_header_t header;
 
    uint16_t       port_index;
-   const uint8_t *buffer; // midi buffer
+   const uint8_t *buffer; // midi buffer. See lifetime comment above.
    uint32_t       size;
 } clap_event_midi_sysex_t;
 
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/ambisonic.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/ambisonic.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/ambisonic.h	2025-03-01 12:42:55.308657293 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/ambisonic.h	2025-08-26 18:15:40.910030622 +0000
@@ -43,9 +43,6 @@ typedef struct clap_plugin_ambisonic {
                                        const clap_ambisonic_config_t *config);
 
    // Returns true on success
-   //
-   // config_id: the configuration id, see clap_plugin_audio_ports_config.
-   // If config_id is CLAP_INVALID_ID, then this function queries the current port info.
    // [main-thread]
    bool(CLAP_ABI *get_config)(const clap_plugin_t     *plugin,
                               bool                     is_input,
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/draft/gain-adjustment-metering.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/draft/gain-adjustment-metering.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/draft/gain-adjustment-metering.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/draft/gain-adjustment-metering.h	2025-08-26 18:15:40.910030622 +0000
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "../../plugin.h"
+
+// This extension lets the plugin report the current gain adjustment
+// (typically, gain reduction) to the host.
+
+static CLAP_CONSTEXPR const char CLAP_EXT_GAIN_ADJUSTMENT_METERING[] = "clap.gain-adjustment-metering/0";
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct clap_plugin_gain_adjustment_metering {
+  // Returns the current gain adjustment in dB. The value is intended
+  // for informational display, for example in a host meter or tooltip.
+  // The returned value represents the gain adjustment that the plugin
+  // applied to the last sample in the most recently processed block.
+  //
+  // The returned value is in dB. Zero means the plugin is applying no gain
+  // reduction, or is not processing. A negative value means the plugin is
+  // applying gain reduction, as with a compressor or limiter. A positive
+  // value means the plugin is adding gain, as with an expander. The value
+  // represents the dynamic gain reduction or expansion applied by the
+  // plugin, before any make-up gain or other adjustment. A single value is
+  // returned for all audio channels.
+  //
+  // [audio-thread]
+  double(CLAP_ABI *get)(const clap_plugin_t *plugin);
+} clap_plugin_gain_adjustment_metering_t;
+
+#ifdef __cplusplus
+}
+#endif
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/draft/mini-curve-display.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/draft/mini-curve-display.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/draft/mini-curve-display.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/draft/mini-curve-display.h	2025-08-26 18:15:40.910030622 +0000
@@ -0,0 +1,153 @@
+#pragma once
+
+#include "../../plugin.h"
+
+// This extension allows a host to render a small curve provided by the plugin.
+// A useful application is to render an EQ frequency response in the DAW mixer view.
+
+static CLAP_CONSTEXPR const char CLAP_EXT_MINI_CURVE_DISPLAY[] = "clap.mini-curve-display/3";
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum clap_mini_curve_display_curve_kind {
+   // If the curve's kind doesn't fit in any proposed kind, use this one
+   // and perhaps, make a pull request to extend the list.
+   CLAP_MINI_CURVE_DISPLAY_CURVE_KIND_UNSPECIFIED = 0,
+
+   // The mini curve is intended to draw the total gain response of the plugin.
+   // In this case the y values are in dB and the x values are in Hz (logarithmic).
+   // This would be useful in for example an equalizer.
+   CLAP_MINI_CURVE_DISPLAY_CURVE_KIND_GAIN_RESPONSE = 1,
+
+   // The mini curve is intended to draw the total phase response of the plugin.
+   // In this case the y values are in radians and the x values are in Hz (logarithmic).
+   // This would be useful in for example an equalizer.
+   CLAP_MINI_CURVE_DISPLAY_CURVE_KIND_PHASE_RESPONSE = 2,
+
+   // The mini curve is intended to draw the transfer curve of the plugin.
+   // In this case the both x and y values are in dB.
+   // This would be useful in for example a compressor or distortion plugin.
+   CLAP_MINI_CURVE_DISPLAY_CURVE_KIND_TRANSFER_CURVE = 3,
+
+   // This mini curve is intended to draw gain reduction over time. In this case
+   // x refers to the window in seconds and y refers to level in dB, x_min is
+   // always 0, and x_max would be the duration of the window.
+   // This would be useful in for example a compressor or limiter.
+   CLAP_MINI_CURVE_DISPLAY_CURVE_KIND_GAIN_REDUCTION = 4,
+
+   // This curve is intended as a generic time series plot. In this case
+   // x refers to the window in seconds. x_min is always 0, and x_max would be the duration of the
+   // window.
+   // Y is not specified and up to the plugin.
+   CLAP_MINI_CURVE_DISPLAY_CURVE_KIND_TIME_SERIES = 5,
+
+   // Note: more entries could be added here in the future
+};
+
+typedef struct clap_mini_curve_display_curve_hints {
+
+   // Range for the x axis.
+   double x_min;
+   double x_max;
+
+   // Range for the y axis.
+   double y_min;
+   double y_max;
+
+} clap_mini_curve_display_curve_hints_t;
+
+// A set of points representing the curve to be painted.
+typedef struct clap_mini_curve_display_curve_data {
+   // Indicates the kind of curve those values represent, the host can use this
+   // information to paint the curve using a meaningful color.
+   int32_t curve_kind;
+
+   // values[0] will be the leftmost value and values[data_size -1] will be the rightmost
+   // value.
+   //
+   // The value 0 and UINT16_MAX won't be painted.
+   // The value 1 will be at the bottom of the curve and UINT16_MAX - 1 will be at the top.
+   uint16_t *values;
+   uint32_t  values_count;
+} clap_mini_curve_display_curve_data_t;
+
+typedef struct clap_plugin_mini_curve_display {
+   // Returns the number of curves the plugin wants to paint.
+   // Be aware that the space to display those curves will be small, and too much data will make
+   // the output hard to read.
+   uint32_t(CLAP_ABI *get_curve_count)(const clap_plugin_t *plugin);
+
+   // Renders the curve into each the curves buffer.
+   //
+   // curves is an array, and each entries (up to curves_size) contains pre-allocated
+   // values buffer that must be filled by the plugin.
+   //
+   // The host will "stack" the curves, from the first one to the last one.
+   // curves[0] is the first curve to be painted.
+   // curves[n + 1] will be painted over curves[n].
+   //
+   // Returns the number of curves rendered.
+   // [main-thread]
+   uint32_t(CLAP_ABI *render)(const clap_plugin_t                  *plugin,
+                              clap_mini_curve_display_curve_data_t *curves,
+                              uint32_t                              curves_size);
+
+   // Tells the plugin if the curve is currently observed or not.
+   // When it isn't observed render() can't be called.
+   //
+   // When is_obseverd becomes true, the curve content and axis name are implicitly invalidated. So
+   // the plugin don't need to call host->changed.
+   //
+   // [main-thread]
+   void(CLAP_ABI *set_observed)(const clap_plugin_t *plugin, bool is_observed);
+
+   // Retrives the axis name.
+   // x_name and y_name must not to be null.
+   // Returns true on success, if the name capacity was sufficient.
+   // [main-thread]
+   bool(CLAP_ABI *get_axis_name)(const clap_plugin_t *plugin,
+                                 uint32_t             curve_index,
+                                 char                *x_name,
+                                 char                *y_name,
+                                 uint32_t             name_capacity);
+} clap_plugin_mini_curve_display_t;
+
+enum clap_mini_curve_display_change_flags {
+   // Informs the host that the curve content changed.
+   // Can only be called if the curve is observed and is static.
+   CLAP_MINI_CURVE_DISPLAY_CURVE_CHANGED = 1 << 0,
+
+   // Informs the host that the curve axis name changed.
+   // Can only be called if the curve is observed.
+   CLAP_MINI_CURVE_DISPLAY_AXIS_NAME_CHANGED = 1 << 1,
+};
+
+typedef struct clap_host_mini_curve_display {
+   // Fills in the given clap_mini_display_curve_hints_t structure and returns
+   // true if successful. If not, return false.
+   // [main-thread]
+   bool(CLAP_ABI *get_hints)(const clap_host_t                     *host,
+                             uint32_t                               kind,
+                             clap_mini_curve_display_curve_hints_t *hints);
+
+   // Mark the curve as being static or dynamic.
+   // The curve is initially considered as static, though the plugin should explicitely
+   // initialize this state.
+   //
+   // When static, the curve changes will be notified by calling host->changed().
+   // When dynamic, the curve is constantly changing and the host is expected to
+   // periodically re-render.
+   //
+   // [main-thread]
+   void(CLAP_ABI *set_dynamic)(const clap_host_t *host, bool is_dynamic);
+
+   // See clap_mini_curve_display_change_flags
+   // [main-thread]
+   void(CLAP_ABI *changed)(const clap_host_t *host, uint32_t flags);
+} clap_host_mini_curve_display_t;
+
+#ifdef __cplusplus
+}
+#endif
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/draft/project-location.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/draft/project-location.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/draft/project-location.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/draft/project-location.h	2025-08-26 18:15:40.910030622 +0000
@@ -0,0 +1,108 @@
+#pragma once
+
+#include "../../color.h"
+#include "../../plugin.h"
+#include "../../string-sizes.h"
+
+// This extension allows a host to tell the plugin more about its position
+// within a project or session.
+
+static CLAP_CONSTEXPR const char CLAP_EXT_PROJECT_LOCATION[] = "clap.project-location/2";
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum clap_project_location_kind {
+   // Represents a document/project/session.
+   CLAP_PROJECT_LOCATION_PROJECT = 1,
+
+   // Represents a group of tracks.
+   // It can contain track groups, tracks, and devices (post processing).
+   // The first device within a track group has the index of
+   // the last track or track group within this group + 1.
+   CLAP_PROJECT_LOCATION_TRACK_GROUP = 2,
+
+   // Represents a single track.
+   // It contains devices (serial).
+   CLAP_PROJECT_LOCATION_TRACK = 3,
+
+   // Represents a single device.
+   // It can contain other nested device chains.
+   CLAP_PROJECT_LOCATION_DEVICE = 4,
+
+   // Represents a nested device chain (serial).
+   // Its parent must be a device.
+   // It contains other devices.
+   CLAP_PROJECT_LOCATION_NESTED_DEVICE_CHAIN = 5,
+};
+
+enum clap_project_location_track_kind {
+   // This track is an instrument track.
+   CLAP_PROJECT_LOCATION_INSTUMENT_TRACK = 1,
+
+   // This track is an audio track.
+   CLAP_PROJECT_LOCATION_AUDIO_TRACK = 2,
+
+   // This track is both an instrument and audio track.
+   CLAP_PROJECT_LOCATION_HYBRID_TRACK = 3,
+
+   // This track is a return track.
+   CLAP_PROJECT_LOCATION_RETURN_TRACK = 4,
+
+   // This track is a master track.
+   // Each group have a master track for processing the sum of all its children tracks.
+   CLAP_PROJECT_LOCATION_MASTER_TRACK = 5,
+};
+
+enum clap_project_location_flags {
+   CLAP_PROJECT_LOCATION_HAS_INDEX = 1 << 0,
+   CLAP_PROJECT_LOCATION_HAS_COLOR = 1 << 1,
+};
+
+typedef struct clap_project_location_element {
+   // A bit-mask, see clap_project_location_flags.
+   uint64_t flags;
+
+   // Kind of the element, must be one of the CLAP_PROJECT_LOCATION_* values.
+   uint32_t kind;
+
+   // Only relevant if kind is CLAP_PLUGIN_LOCATION_TRACK.
+   // see enum CLAP_PROJECT_LOCATION_track_kind.
+   uint32_t track_kind;
+
+   // Index within the parent element.
+   // Only usable if CLAP_PROJECT_LOCATION_HAS_INDEX is set in flags.
+   uint32_t index;
+
+   // Internal ID of the element.
+   // This is not intended for display to the user,
+   // but rather to give the host a potential quick way for lookups.
+   char id[CLAP_PATH_SIZE];
+
+   // User friendly name of the element.
+   char name[CLAP_NAME_SIZE];
+
+   // Color for this element.
+   // Only usable if CLAP_PROJECT_LOCATION_HAS_COLOR is set in flags.
+   clap_color_t color;
+} clap_project_location_element_t;
+
+typedef struct clap_plugin_project_location {
+   // Called by the host when the location of the plugin instance changes.
+   //
+   // The last item in this array always refers to the device itself, and as
+   // such is expected to be of kind CLAP_PLUGIN_LOCATION_DEVICE.
+   // The first item in this array always refers to the project this device is in and must be of
+   // kind CLAP_PROJECT_LOCATION_PROJECT. The path is expected to be something like: PROJECT >
+   // TRACK_GROUP+ > TRACK > (DEVICE > NESTED_DEVICE_CHAIN)* > DEVICE
+   //
+   // [main-thread]
+   void(CLAP_ABI *set)(const clap_plugin_t                  *plugin,
+                       const clap_project_location_element_t *path,
+                       uint32_t                              num_elements);
+} clap_plugin_project_location_t;
+
+#ifdef __cplusplus
+}
+#endif
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/draft/scratch-memory.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/draft/scratch-memory.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/draft/scratch-memory.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/draft/scratch-memory.h	2025-08-26 18:15:40.910030622 +0000
@@ -0,0 +1,90 @@
+#pragma once
+
+#include "../../plugin.h"
+
+// This extension lets the plugin request "scratch" memory from the host.
+//
+// The scratch memory is thread-local, and can be accessed during
+// `clap_plugin->process()` and `clap_plugin_thread_pool->exec()`;
+// its content is not persistent between callbacks.
+//
+// The motivation for this extension is to allow the plugin host
+// to "share" a single scratch buffer across multiple plugin
+// instances.
+//
+// For example, imagine the host needs to process N plugins
+// in sequence, and each plugin requires 10K of scratch memory.
+// If each plugin pre-allocates its own scratch memory, then N * 10K
+// of memory is being allocated in total. However, if each plugin
+// requests 10K of scratch memory from the host, then the host can
+// allocate a single 10K scratch buffer, and make it available to all
+// plugins.
+//
+// This optimization may allow for reduced memory usage and improved
+// CPU cache usage.
+
+static CLAP_CONSTEXPR const char CLAP_EXT_SCRATCH_MEMORY[] = "clap.scratch-memory/1";
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct clap_host_scratch_memory {
+   // Asks the host to reserve scratch memory.
+   //
+   // The plugin may call this method multiple times (for
+   // example, gradually decreasing the amount of scratch
+   // being asked for until the host returns true), however,
+   // the plugin should avoid calling this method un-neccesarily
+   // since the host implementation may be relatively expensive.
+   // If the plugin calls `reserve()` multiple times, then the
+   // last call invalidates all previous calls.
+   //
+   // De-activating the plugin releases the scratch memory.
+   //
+   // `max_concurrency_hint` is an optional hint which indicates
+   // the maximum number of threads concurrently accessing the scratch memory.
+   // Set to 0 if unspecified.
+   //
+   // Returns true on success.
+   //
+   // [main-thread & being-activated]
+   bool(CLAP_ABI *reserve)(const clap_host_t *host,
+                           uint32_t           scratch_size_bytes,
+                           uint32_t           max_concurrency_hint);
+
+   // Returns a pointer to the "thread-local" scratch memory.
+   //
+   // If the scratch memory wasn't successfully reserved, returns NULL.
+   //
+   // If the plugin crosses `max_concurrency_hint`, then the return value
+   // is either NULL or a valid scratch memory pointer.
+   //
+   // This method may only be called by the plugin from the audio thread,
+   // (i.e. during the process() or thread_pool.exec() callback), and
+   // the provided memory is only valid until the plugin returns from
+   // that callback. The plugin must not hold any references to data
+   // that lives in the scratch memory after returning from the callback,
+   // as that data will likely be over-written by another plugin using
+   // the same scratch memory.
+   //
+   // The provided memory is not initialized, and may have been used
+   // by other plugin instances, so the plugin must correctly initialize
+   // the memory when using it.
+   //
+   // The provided memory is owned by the host, so the plugin must not
+   // free the memory.
+   //
+   // If the plugin wants to share the same scratch memory pointer with
+   // many threads, it must access the the scratch at the beginning of the
+   // `process()` callback, cache the returned pointer before calling
+   // `clap_host_thread_pool->request_exec()` and clear the cached pointer
+   // before returning from `process()`.
+   //
+   // [audio-thread]
+   void *(CLAP_ABI *access)(const clap_host_t *host);
+} clap_host_scratch_memory_t;
+
+#ifdef __cplusplus
+}
+#endif
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/gui.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/gui.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/gui.h	2025-03-01 12:42:55.308657293 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/gui.h	2025-08-26 18:15:40.910030622 +0000
@@ -13,6 +13,9 @@
 /// Embedding the window gives more control to the host, and feels more integrated.
 /// Floating window are sometimes the only option due to technical limitations.
 ///
+/// The Embedding protocol is by far the most common, supported by all hosts to date,
+/// and a plugin author should support at least that case.
+///
 /// Showing the GUI works as follow:
 ///  1. clap_plugin_gui->is_api_supported(), check what can work
 ///  2. clap_plugin_gui->create(), allocates gui resources
@@ -85,7 +88,10 @@ typedef struct clap_gui_resize_hints {
    bool can_resize_horizontally;
    bool can_resize_vertically;
 
-   // only if can resize horizontally and vertically
+   // if both horizontal and vertical resize are available, do we preserve the
+   // aspect ratio, and if so, what is the width x height aspect ratio to preserve.
+   // These flags are unused if can_resize_horizontally or vertically are false,
+   // and ratios are unused if preserve is false.
    bool     preserve_aspect_ratio;
    uint32_t aspect_ratio_width;
    uint32_t aspect_ratio_height;
@@ -94,7 +100,8 @@ typedef struct clap_gui_resize_hints {
 // Size (width, height) is in pixels; the corresponding windowing system extension is
 // responsible for defining if it is physical pixels or logical pixels.
 typedef struct clap_plugin_gui {
-   // Returns true if the requested gui api is supported
+   // Returns true if the requested gui api is supported, either in floating (plugin-created)
+   // or non-floating (embedded) mode.
    // [main-thread]
    bool(CLAP_ABI *is_api_supported)(const clap_plugin_t *plugin, const char *api, bool is_floating);
 
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/params.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/params.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/params.h	2025-03-01 12:42:55.308657293 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/params.h	2025-08-26 18:15:40.910030622 +0000
@@ -246,9 +246,9 @@ typedef struct clap_param_info {
    // '/' will be used as a separator to show a tree-like structure.
    char module[CLAP_PATH_SIZE];
 
-   double min_value;     // Minimum plain value
-   double max_value;     // Maximum plain value
-   double default_value; // Default plain value
+   double min_value;     // Minimum plain value. Must be finite (`std::isfinite` true)
+   double max_value;     // Maximum plain value. Must be finite
+   double default_value; // Default plain value. Must be in [min, max] range.
 } clap_param_info_t;
 
 typedef struct clap_plugin_params {
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/surround.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/surround.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/surround.h	2025-03-01 12:42:55.308657293 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/surround.h	2025-08-26 18:15:40.910030622 +0000
@@ -41,20 +41,22 @@ enum {
    CLAP_SURROUND_FR = 1,   // Front Right
    CLAP_SURROUND_FC = 2,   // Front Center
    CLAP_SURROUND_LFE = 3,  // Low Frequency
-   CLAP_SURROUND_BL = 4,   // Back Left
-   CLAP_SURROUND_BR = 5,   // Back Right
+   CLAP_SURROUND_BL = 4,   // Back (Rear) Left
+   CLAP_SURROUND_BR = 5,   // Back (Rear) Right
    CLAP_SURROUND_FLC = 6,  // Front Left of Center
    CLAP_SURROUND_FRC = 7,  // Front Right of Center
-   CLAP_SURROUND_BC = 8,   // Back Center
+   CLAP_SURROUND_BC = 8,   // Back (Rear) Center
    CLAP_SURROUND_SL = 9,   // Side Left
    CLAP_SURROUND_SR = 10,  // Side Right
-   CLAP_SURROUND_TC = 11,  // Top Center
-   CLAP_SURROUND_TFL = 12, // Front Left Height
-   CLAP_SURROUND_TFC = 13, // Front Center Height
-   CLAP_SURROUND_TFR = 14, // Front Right Height
-   CLAP_SURROUND_TBL = 15, // Rear Left Height
-   CLAP_SURROUND_TBC = 16, // Rear Center Height
-   CLAP_SURROUND_TBR = 17, // Rear Right Height
+   CLAP_SURROUND_TC = 11,  // Top (Height) Center
+   CLAP_SURROUND_TFL = 12, // Top (Height) Front Left
+   CLAP_SURROUND_TFC = 13, // Top (Height) Front Center
+   CLAP_SURROUND_TFR = 14, // Top (Height) Front Right
+   CLAP_SURROUND_TBL = 15, // Top (Height) Back (Rear) Left
+   CLAP_SURROUND_TBC = 16, // Top (Height) Back (Rear) Center
+   CLAP_SURROUND_TBR = 17, // Top (Height) Back (Rear) Right
+   CLAP_SURROUND_TSL = 18, // Top (Height) Side Left
+   CLAP_SURROUND_TSR = 19, // Top (Height) Side Right
 };
 
 typedef struct clap_plugin_surround {
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/thread-check.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/thread-check.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/ext/thread-check.h	2025-03-01 12:42:55.312657270 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/ext/thread-check.h	2025-08-26 18:15:40.910030622 +0000
@@ -52,9 +52,7 @@ extern "C" {
 ///
 ///  Clap also tags some functions as [thread-safe]. Functions tagged as [thread-safe] can be called
 ///  from any thread unless explicitly counter-indicated (for instance [thread-safe, !audio-thread])
-///  and may be called concurrently. Since a [thread-safe] function may be called from the
-///  [audio-thread] unless explicitly counter-indicated, it must also meet the realtime constraints
-///  as describes above.
+///  and may be called concurrently.
 
 // This interface is useful to do runtime checks and make
 // sure that the functions are called on the correct threads.
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/host.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/host.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/host.h	2025-03-01 12:42:55.312657270 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/host.h	2025-08-26 18:15:40.910030622 +0000
@@ -35,6 +35,13 @@ typedef struct clap_host {
    void(CLAP_ABI *request_process)(const struct clap_host *host);
 
    // Request the host to schedule a call to plugin->on_main_thread(plugin) on the main thread.
+   // This callback should be called as soon as practicable, usually in the host application's next
+   // available main thread time slice. Typically callbacks occur within 33ms / 30hz.
+   // Despite this guidance, plugins should not make assumptions about the exactness of timing for
+   // a main thread callback, but hosts should endeavour to be prompt. For example, in high load
+   // situations the environment may starve the gui/main thread in favor of audio processing,
+   // leading to substantially longer latencies for the callback than the indicative times given
+   // here.
    // [thread-safe]
    void(CLAP_ABI *request_callback)(const struct clap_host *host);
 } clap_host_t;
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/plugin.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/plugin.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/plugin.h	2025-03-01 12:42:55.312657270 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/plugin.h	2025-08-26 18:15:40.910030622 +0000
@@ -61,6 +61,7 @@ typedef struct clap_plugin {
    // In this call the plugin may allocate memory and prepare everything needed for the process
    // call. The process's sample rate will be constant and process's frame count will included in
    // the [min, max] range, which is bounded by [1, INT32_MAX].
+   // In this call the plugin may call host-provided methods marked [being-activated].
    // Once activated the latency and port configuration must remain constant, until deactivation.
    // Returns true on success.
    // [main-thread & !active]
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/clap/version.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/version.h
--- 1.2.21-5/modules/lsp-3rd-party/include/clap/version.h	2025-03-01 12:42:55.312657270 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/clap/version.h	2025-08-26 18:15:40.910030622 +0000
@@ -22,7 +22,7 @@ typedef struct clap_version {
 
 #define CLAP_VERSION_MAJOR 1
 #define CLAP_VERSION_MINOR 2
-#define CLAP_VERSION_REVISION 2
+#define CLAP_VERSION_REVISION 6
 
 #define CLAP_VERSION_INIT                                                                          \
    { (uint32_t)CLAP_VERSION_MAJOR, (uint32_t)CLAP_VERSION_MINOR, (uint32_t)CLAP_VERSION_REVISION }
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/lsp-plug.in/3rdparty/version.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/lsp-plug.in/3rdparty/version.h
--- 1.2.21-5/modules/lsp-3rd-party/include/lsp-plug.in/3rdparty/version.h	2025-03-01 12:42:55.312657270 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/lsp-plug.in/3rdparty/version.h	2025-08-26 18:15:40.910030622 +0000
@@ -26,7 +26,7 @@
 // Version of headers
 #define LSP_3RD_PARTY_MAJOR             1
 #define LSP_3RD_PARTY_MINOR             0
-#define LSP_3RD_PARTY_MICRO             21
+#define LSP_3RD_PARTY_MICRO             23
 
 #ifdef LSP_COMMON_LIB_BUILTIN
     #define LSP_3RD_PARTY_EXPORT
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst2.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst2.h
--- 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst2.h	2025-03-01 12:42:55.316657247 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst2.h	2025-08-26 18:15:40.914030583 +0000
@@ -1,5 +1,5 @@
 /*
-  Copyright 2024 Linux Studio Plugins Project <lsp.plugin@gmail.com>
+  Copyright 2025 Linux Studio Plugins Project <lsp.plugin@gmail.com>
 
   Permission to use, copy, modify, and/or distribute this software for any
   purpose with or without fee is hereby granted, provided that the above
@@ -101,7 +101,7 @@
 #endif /* __GNUC__ */
 
 #if TARGET_API_MAC_CARBON
-    #ifdef (__LP64__) || (__ppc64__)
+    #if defined(__LP64__) || defined(__ppc64__)
         #pragma options align=power
     #else
         #pragma options align=mac68k
@@ -112,7 +112,7 @@
 #elif defined(__GNUC__)
     #pragma pack(push, 8)
     #define VSTCALLBACK __cdecl
-#elif defined(WIN32) || defined(__FLAT__) || defined CBUILDER
+#elif defined(WIN32) || defined(__FLAT__) || defined(CBUILDER)
     #pragma pack(push)
     #pragma pack(8)
     #define VSTCALLBACK __cdecl
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/AlignPop.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/AlignPop.h
--- 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/AlignPop.h	2025-03-01 12:42:55.316657247 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/AlignPop.h	2025-08-26 18:15:40.914030583 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright 2023, Steinberg Media Technologies GmbH, All Rights Reserved
- * Copyright 2023 Linux Studio Plugins Project <lsp.plugin@gmail.com>
+ * Copyright 2025, Steinberg Media Technologies GmbH, All Rights Reserved
+ * Copyright 2025 Linux Studio Plugins Project <lsp.plugin@gmail.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -22,4 +22,6 @@
     #pragma -a-
 #elif SMTG_OS_WINDOWS
     #pragma pack(pop)
+#elif SMTG_OS_LINUX
+    #pragma pack(pop)
 #endif
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/AlignPush.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/AlignPush.h
--- 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/AlignPush.h	2025-03-01 12:42:55.316657247 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/AlignPush.h	2025-08-26 18:15:40.914030583 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright 2023, Steinberg Media Technologies GmbH, All Rights Reserved
- * Copyright 2023 Linux Studio Plugins Project <lsp.plugin@gmail.com>
+ * Copyright 2025, Steinberg Media Technologies GmbH, All Rights Reserved
+ * Copyright 2025 Linux Studio Plugins Project <lsp.plugin@gmail.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -37,5 +37,11 @@
     #else
         #pragma pack(8)
     #endif
+#elif SMTG_OS_LINUX
+    #if SMTG_PLATFORM_64
+        #pragma pack(push, 16)
+    #else
+        #pragma pack(push, 8)
+    #endif
 #endif
 
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/FUnknown.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/FUnknown.h
--- 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/FUnknown.h	2025-03-01 12:42:55.316657247 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/FUnknown.h	2025-08-26 18:15:40.914030583 +0000
@@ -68,7 +68,13 @@
 
 //------------------------------------------------------------------------
 #define FUNKNOWN_CTOR   { __funknownRefCount = 1; }
-#define FUNKNOWN_DTOR   {}
+
+#if defined(SMTG_FUNKNOWN_DTOR_ASSERT) && SMTG_FUNKNOWN_DTOR_ASSERT
+    #include <cassert>
+    #define FUNKNOWN_DTOR { assert (__funknownRefCount == 0); }
+#else
+    #define FUNKNOWN_DTOR
+#endif
 
 #define QUERY_INTERFACE(iid, obj, InterfaceIID, InterfaceName)  \
     if (::Steinberg::FUnknownPrivate::iidEqual (iid, InterfaceIID)) \
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/Platform.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/Platform.h
--- 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/Platform.h	2025-03-01 12:42:55.316657247 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/Platform.h	2025-08-26 18:15:40.914030583 +0000
@@ -96,13 +96,14 @@ enum
     #endif
 
     #ifdef _MSC_VER
-        #pragma warning (disable : 4244) //! @brief warning C4244: Conversion from 'type1' to 'type2', possible loss of data.
-        #pragma warning (disable : 4250) //! @brief warning C4250: Inheritance via dominance is allowed
-        #pragma warning (disable : 4996) //! @brief warning C4996: deprecated functions
+        #if !defined (SMTG_DISABLE_DEFAULT_DIAGNOSTICS)
+            #pragma warning (disable : 4244) //! @brief warning C4244: Conversion from 'type1' to 'type2', possible loss of data.
+            #pragma warning (disable : 4250) //! @brief warning C4250: Inheritance via dominance is allowed
 
-        #pragma warning (3 : 4189) //! @brief warning C4189: local variable is initialized but not referenced
-        #pragma warning (3 : 4238) //! @brief warning C4238: nonstandard extension used : class rvalue used as lvalue
-    #endif
+            #pragma warning (3 : 4189) //! @brief warning C4189: local variable is initialized but not referenced
+            #pragma warning (3 : 4238) //! @brief warning C4238: nonstandard extension used: class rvalue used as lvalue
+        #endif
+    #endif /* _MSC_VER */
 
     #if defined (_WIN64) || defined (_M_ARM64)
         #define SMTG_PLATFORM_64 1
@@ -121,12 +122,12 @@ enum
         #define SMTG_CPP17 (__cplusplus >= 201703L || ((_MSC_FULL_VER >= 190024210L) && (_MSVC_LANG >= 201703L)))
         #define SMTG_CPP20 (__cplusplus >= 202002L)
         #define SMTG_HAS_NOEXCEPT ((_MSC_FULL_VER >= 190023026L) || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER >= 1300))
-        #if ((_MSC_FULL_VER >= 190024210L) || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER >= 1500) || (defined(__MINGW32__) && SMTG_CPP11))
+        #if ((_MSC_FULL_VER >= 190024210L) || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER >= 1500) || (defined (__MINGW32__) && SMTG_CPP11))
             #define SMTG_HAS_CPP11_CONSTEXPR 1
         #else
             #define SMTG_HAS_CPP11_CONSTEXPR 0
         #endif
-        #if (((_MSC_VER >= 1915L) && (_MSVC_LANG >= 201402L)) || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER > 1700) || (defined(__MINGW32__) && SMTG_CPP14))
+        #if (((_MSC_VER >= 1915L) && (_MSVC_LANG >= 201402L)) || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER > 1700) || (defined (__MINGW32__) && SMTG_CPP14))
             #define SMTG_HAS_CPP14_CONSTEXPR 1
         #else
             #define SMTG_HAS_CPP14_CONSTEXPR 0
@@ -218,7 +219,7 @@ enum
     #endif /* __cplusplus */
 #else
     // Definitions for Linux and other POSIX platforms
-    #if __gnu_linux__ || __linux__
+    #if (defined(__gnu_linux__) && __gnu_linux__) || (defined(__linux__) && __linux__)
         #define SMTG_OS_LINUX       1
     #else
         #define SMTG_OS_LINUX       0
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/Types.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/Types.h
--- 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/base/Types.h	2025-03-01 12:42:55.316657247 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/base/Types.h	2025-08-26 18:15:40.914030583 +0000
@@ -173,7 +173,7 @@ namespace Steinberg
 
 // always inline macros (only when RELEASE is 1)
 //----------------------------------------------------------------------------
-#if RELEASE
+#if defined(RELEASE) && RELEASE
     #if SMTG_OS_MACOS || SMTG_OS_LINUX || STMG_OS_POSIX || defined(__MINGW32__)
         #define SMTG_ALWAYS_INLINE      __inline__ __attribute__((__always_inline__))
         #define SMTG_NEVER_INLINE       __attribute__((noinline))
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/version.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/version.h
--- 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/version.h	2025-03-01 12:42:55.316657247 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/version.h	2025-08-26 18:15:40.918030544 +0000
@@ -22,7 +22,7 @@
 // The compatibility version of official VST3 SDK
 #define VST3_VERSION_MAJOR      3
 #define VST3_VERSION_MINOR      7
-#define VST3_VERSION_MICRO      12
+#define VST3_VERSION_MICRO      14
 
 #define VST3_STRINGIFY1(x)      #x
 #define VST3_STRINGIFY(x)       VST3_STRINGIFY1(x)
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/vst/IAutomationState.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/vst/IAutomationState.h
--- 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/vst/IAutomationState.h	2025-03-01 12:42:55.316657247 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/vst/IAutomationState.h	2025-08-26 18:15:40.918030544 +0000
@@ -33,7 +33,7 @@ namespace Steinberg
         class IAutomationState: public FUnknown
         {
             public:
-                enum AutomationStates
+                enum AutomationStates : int32
                 {
                     kNoAutomation   = 0,      ///< Not Read and not Write
                     kReadState      = 1 << 0,    ///< Read state
diff -pruN 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/vst/Types.h 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/vst/Types.h
--- 1.2.21-5/modules/lsp-3rd-party/include/steinberg/vst3/vst/Types.h	2025-03-01 12:42:55.320657221 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/include/steinberg/vst3/vst/Types.h	2025-08-26 18:15:40.922030505 +0000
@@ -43,6 +43,8 @@ namespace Steinberg
 
     // Versions History which allows to write such code:
     // #if VST_VERSION >= VST_3_6_5_VERSION
+    #define VST_3_7_14_VERSION  0x03070E
+    #define VST_3_7_13_VERSION  0x03070D
     #define VST_3_7_12_VERSION  0x03070C
     #define VST_3_7_11_VERSION  0x03070B
     #define VST_3_7_10_VERSION  0x03070A
@@ -114,6 +116,8 @@ namespace Steinberg
 
         // Versions History which allows to write such code:
         // if constexpr (SDKVersion >= SDKVersion_3_6_5) { ... }
+        static SMTG_CONSTEXPR const uint32 SDKVersion_3_7_14    = VST_3_7_14_VERSION;
+        static SMTG_CONSTEXPR const uint32 SDKVersion_3_7_13    = VST_3_7_13_VERSION;
         static SMTG_CONSTEXPR const uint32 SDKVersion_3_7_12    = VST_3_7_12_VERSION;
         static SMTG_CONSTEXPR const uint32 SDKVersion_3_7_11    = VST_3_7_11_VERSION;
         static SMTG_CONSTEXPR const uint32 SDKVersion_3_7_10    = VST_3_7_10_VERSION;
diff -pruN 1.2.21-5/modules/lsp-3rd-party/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-3rd-party/make/tools.mk
--- 1.2.21-5/modules/lsp-3rd-party/make/tools.mk	2025-03-01 12:42:55.320657221 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/make/tools.mk	2025-08-26 18:15:40.922030505 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-3rd-party/modules.mk 1.2.23-0ubuntu1/modules/lsp-3rd-party/modules.mk
--- 1.2.21-5/modules/lsp-3rd-party/modules.mk	2025-03-01 12:42:55.320657221 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/modules.mk	2025-08-26 18:15:40.922030505 +0000
@@ -19,13 +19,13 @@
 #
 
 # Variables that describe dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
diff -pruN 1.2.21-5/modules/lsp-3rd-party/project.mk 1.2.23-0ubuntu1/modules/lsp-3rd-party/project.mk
--- 1.2.21-5/modules/lsp-3rd-party/project.mk	2025-03-01 12:42:55.320657221 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-3rd-party/project.mk	2025-08-26 18:15:40.922030505 +0000
@@ -24,4 +24,4 @@ ARTIFACT_NAME               = lsp-3rd-pa
 ARTIFACT_DESC               = 3rd party libraries/headers for building audio plugins
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_ALL         = 1
-ARTIFACT_VERSION            = 1.0.21
+ARTIFACT_VERSION            = 1.0.23
diff -pruN 1.2.21-5/modules/lsp-common-lib/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-common-lib/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-common-lib/.github/workflows/build.yml	2025-03-01 12:42:54.916659647 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/.github/workflows/build.yml	2025-08-26 18:15:40.938030350 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
@@ -188,3 +188,26 @@ jobs:
       - name: Run unit tests
         shell: msys2 {0}
         run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test.exe utest --verbose --jobs 1
+
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config TEST=1 STRICT=1 DEBUG=1 ASAN=1
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
+      - name: Run unit tests
+        run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1
+      - name: Run unit tests with memcheck
+        run: |
+          for test in $(.build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --list --suppress); do \
+            echo "***** MEMCHECK $test *****"; \
+            .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1 --nofork --debug $test; \
+          done
diff -pruN 1.2.21-5/modules/lsp-common-lib/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-common-lib/CHANGELOG
--- 1.2.21-5/modules/lsp-common-lib/CHANGELOG	2025-03-01 12:42:54.916659647 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/CHANGELOG	2025-08-26 18:15:40.938030350 +0000
@@ -2,6 +2,16 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.43 ===
+* Better memory safety macros definition.
+* Added MacOS CI builds.
+* Updated module versions in dependencies.
+
+=== 1.0.42 ===
+* Several changes related to bit operations.
+* Improved atomic operations.
+* Updated module versions in dependencies.
+
 === 1.0.41 ===
 * Added fixed_int function for proper platform-dependent integral type conversion to
   fixed-size type conversion defined by intN_t and uintN_t types.
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/aarch64/atomic.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/aarch64/atomic.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/aarch64/atomic.h	2025-03-01 12:42:54.916659647 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/aarch64/atomic.h	2025-08-26 18:15:40.938030350 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-common-lib
  * Created on: 31 мар. 2020 г.
@@ -43,12 +43,12 @@
 
 namespace lsp
 {
-    ATOMIC_LOAD_DEF(int8_t, int8_t *, "sb", "w")
-    ATOMIC_LOAD_DEF(int8_t, const int8_t *, "sb", "w")
+    ATOMIC_LOAD_DEF(int8_t, int8_t *, "b", "w")
+    ATOMIC_LOAD_DEF(int8_t, const int8_t *, "b", "w")
     ATOMIC_LOAD_DEF(uint8_t, uint8_t *, "b", "w")
     ATOMIC_LOAD_DEF(uint8_t, const uint8_t *, "b", "w")
-    ATOMIC_LOAD_DEF(int16_t, int16_t *, "sh", "w")
-    ATOMIC_LOAD_DEF(int16_t, const int16_t *, "sh", "w")
+    ATOMIC_LOAD_DEF(int16_t, int16_t *, "h", "w")
+    ATOMIC_LOAD_DEF(int16_t, const int16_t *, "h", "w")
     ATOMIC_LOAD_DEF(uint16_t, uint16_t *, "h", "w")
     ATOMIC_LOAD_DEF(uint16_t, const uint16_t *, "h", "w")
     ATOMIC_LOAD_DEF(int32_t, int32_t *, "", "w")
@@ -81,9 +81,9 @@ namespace lsp
 
 namespace lsp
 {
-    ATOMIC_STORE_DEF(int8_t,     "sb", "w")
+    ATOMIC_STORE_DEF(int8_t,     "b", "w")
     ATOMIC_STORE_DEF(uint8_t,    "b", "w")
-    ATOMIC_STORE_DEF(int16_t,    "sh", "w")
+    ATOMIC_STORE_DEF(int16_t,    "h", "w")
     ATOMIC_STORE_DEF(uint16_t,   "h", "w")
     ATOMIC_STORE_DEF(int32_t,    "", "w")
     ATOMIC_STORE_DEF(uint32_t,   "", "w")
@@ -216,14 +216,33 @@ namespace lsp
 
 namespace lsp
 {
-    template <class type_t>
-        inline void atomic_init(type_t &lk) { lk = LSP_ATOMIC_UNLOCKED; }
+    template <class T>
+    inline void atomic_init(T &lk)
+    {
+        atomic_store(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        );
+    }
 
-    template <class type_t>
-        inline type_t atomic_trylock(type_t &lk) { return atomic_cas(&lk, LSP_ATOMIC_UNLOCKED, LSP_ATOMIC_LOCKED); }
+    template <class T>
+    inline T atomic_trylock(T &lk)
+    {
+        return T(atomic_cas(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED)),
+            fixed_int(T(LSP_ATOMIC_LOCKED))
+        ));
+    }
 
-    template <class type_t>
-        inline type_t atomic_unlock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
+    template <class T>
+    inline T atomic_unlock(T &lk)
+    {
+        return T(atomic_swap(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        ));
+    }
 } /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-armv6.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-armv6.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-armv6.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-armv6.h	2025-08-26 18:15:40.938030350 +0000
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-common-lib
+ * Created on: 4 мар. 2025 г.
+ *
+ * lsp-common-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-common-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-common-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_ARMV6_H_
+#define LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_ARMV6_H_
+
+#ifndef LSP_PLUG_IN_COMMON_ATOMIC_IMPL
+    #error "This file should not be included directly"
+#endif /* LSP_PLUG_IN_COMMON_ATOMIC_IMPL */
+
+namespace lsp
+{
+    extern uint32_t atomic_lock_barrier;
+} /* namespace lsp */
+
+#define ATOMIC_LOAD_DEF(type, ptrtype, cmd) \
+    inline type atomic_load(ptrtype ptr) \
+    { \
+        type retval; \
+        ARCH_ARM_ASM( \
+            __ASM_EMIT(cmd "        %[ret], [%[ptr]]") \
+            : [ret] "=&r" (retval) \
+            : [ptr] "r" (ptr) \
+            : "memory" \
+        ); \
+        return retval; \
+    }
+
+namespace lsp
+{
+    ATOMIC_LOAD_DEF(int8_t, int8_t *, "ldrb")
+    ATOMIC_LOAD_DEF(int8_t, const int8_t *, "ldrb")
+    ATOMIC_LOAD_DEF(uint8_t, uint8_t *, "ldrb")
+    ATOMIC_LOAD_DEF(uint8_t, const uint8_t *, "ldrb")
+    ATOMIC_LOAD_DEF(int16_t, int16_t *, "ldrh")
+    ATOMIC_LOAD_DEF(int16_t, const int16_t *, "ldrh")
+    ATOMIC_LOAD_DEF(uint16_t, uint16_t *, "ldrh")
+    ATOMIC_LOAD_DEF(uint16_t, const uint16_t *, "ldrh")
+    ATOMIC_LOAD_DEF(int32_t, int32_t *, "ldr")
+    ATOMIC_LOAD_DEF(int32_t, const int32_t *, "ldr")
+    ATOMIC_LOAD_DEF(uint32_t, uint32_t *, "ldr")
+    ATOMIC_LOAD_DEF(uint32_t, const uint32_t *, "ldr")
+    ATOMIC_LOAD_DEF(void *, void **, "ldr")
+    ATOMIC_LOAD_DEF(void *, void * const *, "ldr")
+    ATOMIC_LOAD_DEF(const void *, const void **, "ldr")
+    ATOMIC_LOAD_DEF(const void *, const void * const *, "ldr")
+} /* namespace lsp */
+
+#undef ATOMIC_LOAD_DEF
+
+#define ATOMIC_STORE_DEF(type, cmd) \
+    inline void atomic_store(type *ptr, type value) \
+    { \
+        ARCH_ARM_ASM( \
+            __ASM_EMIT(cmd "        %[value], [%[ptr]]") \
+            : \
+            : [ptr] "r" (ptr), [value] "r" (value) \
+            : "memory" \
+        ); \
+    }
+
+namespace lsp
+{
+    ATOMIC_STORE_DEF(int8_t,     "strb")
+    ATOMIC_STORE_DEF(uint8_t,    "strb")
+    ATOMIC_STORE_DEF(int16_t,    "strh")
+    ATOMIC_STORE_DEF(uint16_t,   "strh")
+    ATOMIC_STORE_DEF(int32_t,    "str")
+    ATOMIC_STORE_DEF(uint32_t,   "str")
+    ATOMIC_STORE_DEF(void *,     "str")
+} /* namespace lsp */
+
+#undef ATOMIC_STORE_DEF
+
+#define ATOMIC_SWAP_DEF(type, qsz) \
+    inline type atomic_swap(type *ptr, type value)      \
+    {                                                   \
+        type tmp;                                       \
+        type retval;                                    \
+        \
+        ARCH_ARM_ASM                                    \
+        (                                               \
+            __ASM_EMIT("1:")    \
+            __ASM_EMIT("ldr" qsz "      %[ret], [%[ptr]]") \
+            __ASM_EMIT("str" qsz "      %[tmp], %[src], [%[ptr]]") \
+            __ASM_EMIT("tst             %[tmp], %[tmp]") \
+            __ASM_EMIT("bne             1b") \
+            : [tmp] "=&r" (tmp), \
+              [ret] "=&r" (retval)  \
+            : [ptr] "r" (ptr), \
+              [src] "r" (value) \
+            : "memory", "cc"                            \
+        );                                              \
+        return retval; \
+    }
+
+#define ATOMIC_SWAP_DEF2(type) \
+    inline type atomic_swap(type *ptr, type value) \
+    { \
+        while (atomic_swap(&atomic_lock_barrier, uint32_t(1))) /* nothing */ ; \
+        type retval = *ptr; \
+        *ptr = value; \
+        atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
+        return retval; \
+    }
+
+namespace lsp
+{
+    ATOMIC_SWAP_DEF(int32_t, "ex")
+    ATOMIC_SWAP_DEF(uint32_t, "ex")
+    ATOMIC_SWAP_DEF(void *, "ex")
+    ATOMIC_SWAP_DEF2(int8_t)
+    ATOMIC_SWAP_DEF2(uint8_t)
+    ATOMIC_SWAP_DEF2(int16_t)
+    ATOMIC_SWAP_DEF2(uint16_t)
+} /* namespace lsp */
+
+#undef ATOMIC_SWAP_DEF
+#undef ATOMIC_SWAP_DEF2
+
+#define ATOMIC_CAS_DEF(type, qsz)                           \
+    inline type atomic_cas(type *ptr, type exp, type rep)   \
+    { \
+        type tmp; \
+        \
+        ARCH_ARM_ASM \
+        ( \
+            __ASM_EMIT("1:") \
+            __ASM_EMIT("ldr" qsz "      %[tmp], [%[ptr]]") \
+            __ASM_EMIT("cmp             %[tmp], %[exp]") \
+            __ASM_EMIT("mov             %[tmp], #0") \
+            __ASM_EMIT("bne             2f") \
+            __ASM_EMIT("str" qsz "      %[tmp], %[rep], [%[ptr]]") \
+            __ASM_EMIT("cmp             %[tmp], #0") \
+            __ASM_EMIT("bne             1b") \
+            __ASM_EMIT("mov             %[tmp], #1") \
+            __ASM_EMIT("2:") \
+            : [tmp] "=&r" (tmp) \
+            : [ptr] "r" (ptr), [exp] "r" (exp), [rep] "r" (rep) \
+            : "cc", "memory" \
+        ); \
+        return tmp; \
+    }
+
+#define ATOMIC_CAS_DEF2(type)                           \
+    inline bool atomic_cas(type *ptr, type exp, type rep) \
+    { \
+        if (!atomic_swap(&atomic_lock_barrier, uint32_t(1))) \
+            return false; \
+        if (*ptr == exp) \
+        { \
+            *ptr    = rep; \
+            atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
+            return true; \
+        } \
+        \
+        atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
+        return false; \
+    }
+
+namespace lsp
+{
+    ATOMIC_CAS_DEF(int32_t, "ex")
+    ATOMIC_CAS_DEF(uint32_t, "ex")
+    ATOMIC_CAS_DEF(void *, "ex")
+    ATOMIC_CAS_DEF2(int8_t)
+    ATOMIC_CAS_DEF2(uint8_t)
+    ATOMIC_CAS_DEF2(int16_t)
+    ATOMIC_CAS_DEF2(uint16_t)
+} /* namespace lsp */
+
+#undef ATOMIC_CAS_DEF
+#undef ATOMIC_CAS_DEF2
+
+#define ATOMIC_ADD_DEF(type, qsz)                       \
+    inline type atomic_add(type *ptr, type value)       \
+    {                                                   \
+        type tmp, sum, retval; \
+        \
+        ARCH_ARM_ASM                                    \
+        (                                               \
+            __ASM_EMIT("1:")    \
+            __ASM_EMIT("ldr" qsz "      %[ret], [%[ptr]]") \
+            __ASM_EMIT("add             %[sum], %[ret], %[src]") \
+            __ASM_EMIT("str" qsz "      %[tmp], %[sum], [%[ptr]]") \
+            __ASM_EMIT("tst             %[tmp], %[tmp]") \
+            __ASM_EMIT("bne             1b") \
+            : [tmp] "=&r" (tmp), \
+              [sum] "=&r" (sum), \
+              [ret] "=&r" (retval)  \
+            : [ptr] "r" (ptr),  \
+              [src] "r" (value) \
+            : "memory", "cc"                            \
+        );                                              \
+        return retval; \
+    }
+
+#define ATOMIC_ADD_DEF2(type) \
+    inline type atomic_add(type *ptr, type value) \
+    {                                                   \
+        while (atomic_swap(&atomic_lock_barrier, 1)) /* nothing */ ; \
+        type retval = *ptr; \
+        *ptr = retval + value; \
+        atomic_swap(&atomic_lock_barrier, 0); \
+        return retval; \
+    }
+
+namespace lsp
+{
+    ATOMIC_ADD_DEF(int32_t, "ex")
+    ATOMIC_ADD_DEF(uint32_t, "ex")
+    ATOMIC_ADD_DEF2(int8_t)
+    ATOMIC_ADD_DEF2(uint8_t)
+    ATOMIC_ADD_DEF2(int16_t)
+    ATOMIC_ADD_DEF2(uint16_t)
+} /* namespace lsp */
+
+#undef ATOMIC_ADD_DEF
+#undef ATOMIC_ADD_DEF2
+
+//-----------------------------------------------------------------------------
+// Atomic operations
+
+#define LSP_ATOMIC_UNLOCKED     1
+#define LSP_ATOMIC_LOCKED       0
+
+namespace lsp
+{
+    template <class T>
+    inline void atomic_init(T &lk)
+    {
+        atomic_store(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        );
+    }
+
+    template <class T>
+    inline T atomic_trylock(T &lk)
+    {
+        return T(atomic_cas(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED)),
+            fixed_int(T(LSP_ATOMIC_LOCKED))
+        ));
+    }
+
+    template <class T>
+    inline T atomic_unlock(T &lk)
+    {
+        return T(atomic_swap(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        ));
+    }
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_ARMV6_H_ */
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-legacy.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-legacy.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-legacy.h	2025-03-01 12:42:54.916659647 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic-legacy.h	2025-08-26 18:15:40.938030350 +0000
@@ -31,10 +31,10 @@ namespace lsp
     extern uint32_t atomic_lock_barrier;
 } /* namespace lsp */
 
-#define ATOMIC_LOAD_DEF(type, cmd) \
-    inline type atomic_load(type *ptr) \
+#define ATOMIC_LOAD_DEF(rtype, type, cmd) \
+    inline rtype atomic_load(type ptr) \
     { \
-        type retval; \
+        rtype retval; \
         ARCH_ARM_ASM( \
             __ASM_EMIT(cmd "        %[ret], [%[ptr]]") \
             : [ret] "=&r" (retval) \
@@ -46,13 +46,20 @@ namespace lsp
 
 namespace lsp
 {
-    ATOMIC_LOAD_DEF(int8_t,     "ldrb")
-    ATOMIC_LOAD_DEF(uint8_t,    "ldrb")
-    ATOMIC_LOAD_DEF(int16_t,    "ldrh")
-    ATOMIC_LOAD_DEF(uint16_t,   "ldrh")
-    ATOMIC_LOAD_DEF(int32_t,    "ldr")
-    ATOMIC_LOAD_DEF(uint32_t,   "ldr")
-    ATOMIC_LOAD_DEF(void *,     "ldr")
+    ATOMIC_LOAD_DEF(int8_t, int8_t *,               "ldrb")
+    ATOMIC_LOAD_DEF(int8_t, const int8_t *,         "ldrb")
+    ATOMIC_LOAD_DEF(uint8_t, uint8_t *,             "ldrb")
+    ATOMIC_LOAD_DEF(uint8_t, const uint8_t *,       "ldrb")
+    ATOMIC_LOAD_DEF(int16_t, int16_t *,             "ldrh")
+    ATOMIC_LOAD_DEF(int16_t, const int16_t *,       "ldrh")
+    ATOMIC_LOAD_DEF(uint16_t, uint16_t *,           "ldrh")
+    ATOMIC_LOAD_DEF(uint16_t, const uint16_t *,     "ldrh")
+    ATOMIC_LOAD_DEF(int32_t, int32_t *,             "ldr")
+    ATOMIC_LOAD_DEF(int32_t, const int32_t *,       "ldr")
+    ATOMIC_LOAD_DEF(uint32_t, uint32_t *,           "ldr")
+    ATOMIC_LOAD_DEF(uint32_t, const uint32_t *,     "ldr")
+    ATOMIC_LOAD_DEF(void *, const void **,          "ldr")
+    ATOMIC_LOAD_DEF(void *, const void * const *,   "ldr")
 } /* namespace lsp */
 
 #undef ATOMIC_LOAD_DEF
@@ -108,10 +115,10 @@ namespace lsp
 #define ATOMIC_SWAP_DEF3(type) \
     inline type atomic_swap(type *ptr, type value) \
     { \
-        while (atomic_swap(&atomic_lock_barrier, 1)) /* nothing */ ; \
+        while (atomic_swap(&atomic_lock_barrier, uint32_t(1))) /* nothing */ ; \
         type retval = *ptr; \
         *ptr = value; \
-        atomic_swap(&atomic_lock_barrier, 0); \
+        atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
         return retval; \
     }
 
@@ -135,16 +142,16 @@ namespace lsp
 #define ATOMIC_CAS_DEF(type)                        \
     inline bool atomic_cas(type *ptr, type exp, type rep) \
     { \
-        if (!atomic_swap(&atomic_lock_barrier, 1)) \
+        if (!atomic_swap(&atomic_lock_barrier, uint32_t(1))) \
             return false; \
         if (*ptr == exp) \
         { \
             *ptr    = rep; \
-            atomic_swap(&atomic_lock_barrier, 0); \
+            atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
             return true; \
         } \
         \
-        atomic_swap(&atomic_lock_barrier, 0); \
+        atomic_swap(&atomic_lock_barrier, uint32_t(0)); \
         return false; \
     }
 
@@ -191,14 +198,32 @@ namespace lsp
 
 namespace lsp
 {
-    template <class type_t>
-        inline void atomic_init(type_t &lk) { lk = LSP_ATOMIC_UNLOCKED; }
-
-    template <class type_t>
-        inline type_t atomic_trylock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_LOCKED); }
-
-    template <class type_t>
-        inline type_t atomic_unlock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
+    template <class T>
+    inline void atomic_init(T &lk)
+    {
+        atomic_store(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        );
+    }
+
+    template <class T>
+    inline T atomic_trylock(T &lk)
+    {
+        return T(atomic_swap(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_LOCKED))
+        ));
+    }
+
+    template <class T>
+    inline T atomic_unlock(T &lk)
+    {
+        return T(atomic_swap(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        ));
+    }
 } /* namespace lsp */
 
 #endif /* LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_LEGACY_H_ */
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic.h	2025-03-01 12:42:54.916659647 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/arm/atomic.h	2025-08-26 18:15:40.938030350 +0000
@@ -31,9 +31,9 @@
     { \
         type retval; \
         ARCH_ARM_ASM( \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             __ASM_EMIT(cmd "        %[ret], [%[ptr]]") \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             : [ret] "=&r" (retval) \
             : [ptr] "r" (ptr) \
             : "memory" \
@@ -67,9 +67,9 @@ namespace lsp
     inline void atomic_store(type *ptr, type value) \
     { \
         ARCH_ARM_ASM( \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             __ASM_EMIT(cmd "        %[value], [%[ptr]]") \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             : \
             : [ptr] "r" (ptr), [value] "r" (value) \
             : "memory" \
@@ -97,7 +97,7 @@ namespace lsp
         ARCH_ARM_ASM \
         ( \
             __ASM_EMIT("1:") \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             __ASM_EMIT("ldr" qsz "      %[tmp], [%[ptr]]") \
             __ASM_EMIT("cmp             %[tmp], %[exp]") \
             __ASM_EMIT("mov             %[tmp], #0") \
@@ -107,7 +107,7 @@ namespace lsp
             __ASM_EMIT("bne             1b") \
             __ASM_EMIT("mov             %[tmp], #1") \
             __ASM_EMIT("2:") \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             : [tmp] "=&r" (tmp) \
             : [ptr] "r" (ptr), [exp] "r" (exp), [rep] "r" (rep) \
             : "cc", "memory" \
@@ -136,13 +136,13 @@ namespace lsp
         ARCH_ARM_ASM                                    \
         (                                               \
             __ASM_EMIT("1:")    \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             __ASM_EMIT("ldr" qsz "      %[ret], [%[ptr]]") \
             __ASM_EMIT("add             %[sum], %[ret], %[src]") \
             __ASM_EMIT("str" qsz "      %[tmp], %[sum], [%[ptr]]") \
             __ASM_EMIT("tst             %[tmp], %[tmp]") \
             __ASM_EMIT("bne             1b") \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             : [tmp] "=&r" (tmp), \
               [sum] "=&r" (sum), \
               [ret] "=&r" (retval)  \
@@ -174,12 +174,12 @@ namespace lsp
         ARCH_ARM_ASM                                    \
         (                                               \
             __ASM_EMIT("1:")    \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             __ASM_EMIT("ldr" qsz "      %[ret], [%[ptr]]") \
             __ASM_EMIT("str" qsz "      %[tmp], %[src], [%[ptr]]") \
             __ASM_EMIT("tst             %[tmp], %[tmp]") \
             __ASM_EMIT("bne             1b") \
-            IF_ARCH_LEAST_ARM7(__ASM_EMIT("dmb ish")) \
+            __ASM_EMIT("dmb ish") \
             : [tmp] "=&r" (tmp), \
               [ret] "=&r" (retval)  \
             : [ptr] "r" (ptr), \
@@ -210,14 +210,33 @@ namespace lsp
 
 namespace lsp
 {
-    template <class type_t>
-        inline void atomic_init(type_t &lk) { lk = LSP_ATOMIC_UNLOCKED; }
+    template <class T>
+    inline void atomic_init(T &lk)
+    {
+        atomic_store(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        );
+    }
 
-    template <class type_t>
-        inline type_t atomic_trylock(type_t &lk) { return atomic_cas(&lk, LSP_ATOMIC_UNLOCKED, LSP_ATOMIC_LOCKED); }
+    template <class T>
+    inline T atomic_trylock(T &lk)
+    {
+        return T(atomic_cas(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED)),
+            fixed_int(T(LSP_ATOMIC_LOCKED))
+        ));
+    }
 
-    template <class type_t>
-        inline type_t atomic_unlock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
+    template <class T>
+    inline T atomic_unlock(T &lk)
+    {
+        return T(atomic_swap(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        ));
+    }
 } /* namespace lsp */
 
 #endif /* LSP_PLUG_IN_COMMON_ARCH_ARM_ATOMIC_H_ */
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/generic/atomic.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/generic/atomic.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/generic/atomic.h	2025-03-01 12:42:54.916659647 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/generic/atomic.h	2025-08-26 18:15:40.938030350 +0000
@@ -146,7 +146,7 @@ namespace lsp
         ATOMIC_ADD_DEF(int64_t)
         ATOMIC_ADD_DEF(uint64_t)
     #endif /* ARCH_64BIT */
-}
+} /* namespace lsp */
 
 #undef ATOMIC_ADD_DEF
 
@@ -158,14 +158,33 @@ namespace lsp
 
 namespace lsp
 {
-    template <class type_t>
-    inline void atomic_init(type_t &lk)     { atomic_store(&lk, LSP_ATOMIC_UNLOCKED);       }
-
-    template <class type_t>
-    inline bool atomic_trylock(type_t &lk)  { return atomic_cas(&lk, LSP_ATOMIC_UNLOCKED, LSP_ATOMIC_LOCKED); }
-
-    template <class type_t>
-    inline type_t atomic_unlock(type_t &lk) { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
-}
+    template <class T>
+    inline void atomic_init(T &lk)
+    {
+        atomic_store(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        );
+    }
+
+    template <class T>
+    inline bool atomic_trylock(T &lk)
+    {
+        return atomic_cas(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED)),
+            fixed_int(T(LSP_ATOMIC_LOCKED))
+        );
+    }
+
+    template <class T>
+    inline T atomic_unlock(T &lk)
+    {
+        return T(atomic_swap(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        ));
+    }
+} /* namespace lsp */
 
 #endif /* LSP_PLUG_IN_COMMON_ARCH_GENERIC_ATOMIC_H_ */
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h	2025-03-01 12:42:54.916659647 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/arch/x86/atomic.h	2025-08-26 18:15:40.938030350 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-common-lib
  * Created on: 31 мар. 2020 г.
@@ -26,14 +26,14 @@
     #error "This file should not be included directly"
 #endif /* LSP_PLUG_IN_COMMON_ATOMIC_IMPL */
 
-#define ATOMIC_LOAD_DEF(type, ptrtype)                  \
+#define ATOMIC_LOAD_DEF(type, ptrtype, reg)             \
     inline type atomic_load(ptrtype ptr)                \
     {                                                   \
         type value;                                     \
         ARCH_X86_ASM                                    \
         (                                               \
             __ASM_EMIT("mov     (%[ptr]), %[value]")    \
-            : [value] "=&r"(value)                      \
+            : [value] reg (value)                       \
             : [ptr] "r" (ptr)                           \
             :                                           \
         );                                              \
@@ -42,73 +42,73 @@
 
 namespace lsp
 {
-    ATOMIC_LOAD_DEF(int8_t, int8_t *)
-    ATOMIC_LOAD_DEF(int8_t, const int8_t *)
-    ATOMIC_LOAD_DEF(uint8_t, uint8_t *)
-    ATOMIC_LOAD_DEF(uint8_t, const uint8_t *)
-    ATOMIC_LOAD_DEF(int16_t, int16_t *)
-    ATOMIC_LOAD_DEF(int16_t, const int16_t *)
-    ATOMIC_LOAD_DEF(uint16_t, uint16_t *)
-    ATOMIC_LOAD_DEF(uint16_t, const uint16_t *)
-    ATOMIC_LOAD_DEF(int32_t, int32_t *)
-    ATOMIC_LOAD_DEF(int32_t, const int32_t *)
-    ATOMIC_LOAD_DEF(uint32_t, uint32_t *)
-    ATOMIC_LOAD_DEF(uint32_t, const uint32_t *)
-    ATOMIC_LOAD_DEF(void *, void **)
-    ATOMIC_LOAD_DEF(void *, void * const *)
-    ATOMIC_LOAD_DEF(const void *, const void **)
-    ATOMIC_LOAD_DEF(const void *, const void * const *)
+    ATOMIC_LOAD_DEF(int8_t, int8_t *, "=&q")
+    ATOMIC_LOAD_DEF(int8_t, const int8_t *, "=&q")
+    ATOMIC_LOAD_DEF(uint8_t, uint8_t *, "=&q")
+    ATOMIC_LOAD_DEF(uint8_t, const uint8_t *, "=&q")
+    ATOMIC_LOAD_DEF(int16_t, int16_t *, "=&r")
+    ATOMIC_LOAD_DEF(int16_t, const int16_t *, "=&r")
+    ATOMIC_LOAD_DEF(uint16_t, uint16_t *, "=&r")
+    ATOMIC_LOAD_DEF(uint16_t, const uint16_t *, "=&r")
+    ATOMIC_LOAD_DEF(int32_t, int32_t *, "=&r")
+    ATOMIC_LOAD_DEF(int32_t, const int32_t *, "=&r")
+    ATOMIC_LOAD_DEF(uint32_t, uint32_t *, "=&r")
+    ATOMIC_LOAD_DEF(uint32_t, const uint32_t *, "=&r")
+    ATOMIC_LOAD_DEF(void *, void **, "=&r")
+    ATOMIC_LOAD_DEF(void *, void * const *, "=&r")
+    ATOMIC_LOAD_DEF(const void *, const void **, "=&r")
+    ATOMIC_LOAD_DEF(const void *, const void * const *, "=&r")
 
     #ifdef ARCH_X86_64
-        ATOMIC_LOAD_DEF(int64_t, int64_t *)
-        ATOMIC_LOAD_DEF(int64_t, const int64_t *)
-        ATOMIC_LOAD_DEF(uint64_t, uint64_t *)
-        ATOMIC_LOAD_DEF(uint64_t, const uint64_t *)
+        ATOMIC_LOAD_DEF(int64_t, int64_t *, "=&r")
+        ATOMIC_LOAD_DEF(int64_t, const int64_t *, "=&r")
+        ATOMIC_LOAD_DEF(uint64_t, uint64_t *, "=&r")
+        ATOMIC_LOAD_DEF(uint64_t, const uint64_t *, "=&r")
     #endif /* ARCH_X86_64 */
 
 } /* namespace lsp */
 
 #undef ATOMIC_LOAD_DEF
 
-#define ATOMIC_STORE_DEF(type)                          \
+#define ATOMIC_STORE_DEF(type, reg)                     \
     inline void atomic_store(type *ptr, type value)     \
     {                                                   \
         ARCH_X86_ASM                                    \
         (                                               \
             __ASM_EMIT("mov     %[value], (%[ptr])")    \
             :                                           \
-            : [ptr] "r" (ptr), [value] "r" (value)      \
+            : [ptr] "r" (ptr), [value] reg (value)      \
             : "memory"                                  \
         );                                              \
     }
 
 namespace lsp
 {
-    ATOMIC_STORE_DEF(int8_t)
-    ATOMIC_STORE_DEF(uint8_t)
-    ATOMIC_STORE_DEF(int16_t)
-    ATOMIC_STORE_DEF(uint16_t)
-    ATOMIC_STORE_DEF(int32_t)
-    ATOMIC_STORE_DEF(uint32_t)
-    ATOMIC_STORE_DEF(void *)
+    ATOMIC_STORE_DEF(int8_t, "q")
+    ATOMIC_STORE_DEF(uint8_t, "q")
+    ATOMIC_STORE_DEF(int16_t, "r")
+    ATOMIC_STORE_DEF(uint16_t, "r")
+    ATOMIC_STORE_DEF(int32_t, "r")
+    ATOMIC_STORE_DEF(uint32_t, "r")
+    ATOMIC_STORE_DEF(void *, "r")
 
     #ifdef ARCH_X86_64
-        ATOMIC_STORE_DEF(int64_t)
-        ATOMIC_STORE_DEF(uint64_t)
+        ATOMIC_STORE_DEF(int64_t, "r")
+        ATOMIC_STORE_DEF(uint64_t, "r")
     #endif /* ARCH_X86_64 */
 
 } /* namespace lsp */
 
 #undef ATOMIC_STORE_DEF
 
-#define ATOMIC_XCHG_DEF(type)                           \
+#define ATOMIC_XCHG_DEF(type, reg)                      \
     inline type atomic_swap(type *ptr, type value)      \
     {                                                   \
         ARCH_X86_ASM                                    \
         (                                               \
             __ASM_EMIT("lock")                          \
             __ASM_EMIT("xchg    %[value], (%[ptr])")    \
-            : [value] "+r"(value)                       \
+            : [value] reg (value)                       \
             : [ptr] "r" (ptr)                           \
             : "memory", "cc"                            \
         );                                              \
@@ -117,24 +117,24 @@ namespace lsp
 
 namespace lsp
 {
-    ATOMIC_XCHG_DEF(int8_t)
-    ATOMIC_XCHG_DEF(uint8_t)
-    ATOMIC_XCHG_DEF(int16_t)
-    ATOMIC_XCHG_DEF(uint16_t)
-    ATOMIC_XCHG_DEF(int32_t)
-    ATOMIC_XCHG_DEF(uint32_t)
-    ATOMIC_XCHG_DEF(void *)
+    ATOMIC_XCHG_DEF(int8_t, "+q")
+    ATOMIC_XCHG_DEF(uint8_t, "+q")
+    ATOMIC_XCHG_DEF(int16_t, "+r")
+    ATOMIC_XCHG_DEF(uint16_t, "+r")
+    ATOMIC_XCHG_DEF(int32_t, "+r")
+    ATOMIC_XCHG_DEF(uint32_t, "+r")
+    ATOMIC_XCHG_DEF(void *, "+r")
 
     #ifdef ARCH_X86_64
-        ATOMIC_XCHG_DEF(int64_t)
-        ATOMIC_XCHG_DEF(uint64_t)
+        ATOMIC_XCHG_DEF(int64_t, "+r")
+        ATOMIC_XCHG_DEF(uint64_t, "+r")
     #endif /* ARCH_X86_64 */
 
 } /* namespace lsp */
 
 #undef ATOMIC_XCHG_DEF
 
-#define ATOMIC_CAS_DEF(type)                     \
+#define ATOMIC_CAS_DEF(type, reg)                       \
     inline bool atomic_cas(type *ptr, type src, type rep)   \
     {                                                   \
         bool res;                                       \
@@ -147,8 +147,8 @@ namespace lsp
             __ASM_EMIT("2:")                            \
             : [res] "=@ccz" (res)                       \
             : [src] "a" (src),                          \
-              [ptr] "r" (ptr),                          \
-              [rep] "r" (rep)                           \
+              [ptr] reg (ptr),                          \
+              [rep] reg (rep)                           \
             : "memory", "cc"                            \
         );                                              \
         return res; \
@@ -156,30 +156,30 @@ namespace lsp
 
 namespace lsp
 {
-    ATOMIC_CAS_DEF(int8_t)
-    ATOMIC_CAS_DEF(uint8_t)
-    ATOMIC_CAS_DEF(int16_t)
-    ATOMIC_CAS_DEF(uint16_t)
-    ATOMIC_CAS_DEF(int32_t)
-    ATOMIC_CAS_DEF(uint32_t)
-    ATOMIC_CAS_DEF(void *)
+    ATOMIC_CAS_DEF(int8_t, "q")
+    ATOMIC_CAS_DEF(uint8_t, "q")
+    ATOMIC_CAS_DEF(int16_t, "r")
+    ATOMIC_CAS_DEF(uint16_t, "r")
+    ATOMIC_CAS_DEF(int32_t, "r")
+    ATOMIC_CAS_DEF(uint32_t, "r")
+    ATOMIC_CAS_DEF(void *, "r")
 
     #ifdef ARCH_X86_64
-        ATOMIC_CAS_DEF(int64_t)
-        ATOMIC_CAS_DEF(uint64_t)
+        ATOMIC_CAS_DEF(int64_t, "r")
+        ATOMIC_CAS_DEF(uint64_t, "r")
     #endif /* ARCH_X86_64 */
 
 } /* namespace lsp */
 #undef ATOMIC_CAS_DEF
 
-#define ATOMIC_ADD_DEF(type) \
+#define ATOMIC_ADD_DEF(type, reg) \
     inline type atomic_add(type *ptr, type value)       \
     {                                                   \
         ARCH_X86_ASM                                    \
         (                                               \
             __ASM_EMIT("lock")                          \
             __ASM_EMIT("xadd %[src], (%[ptr])")         \
-            : [src] "+r" (value)                        \
+            : [src] reg (value)                         \
             : [ptr] "r" (ptr)                           \
             : "memory", "cc"                            \
         );                                              \
@@ -188,16 +188,16 @@ namespace lsp
 
 namespace lsp
 {
-    ATOMIC_ADD_DEF(int8_t)
-    ATOMIC_ADD_DEF(uint8_t)
-    ATOMIC_ADD_DEF(int16_t)
-    ATOMIC_ADD_DEF(uint16_t)
-    ATOMIC_ADD_DEF(int32_t)
-    ATOMIC_ADD_DEF(uint32_t)
+    ATOMIC_ADD_DEF(int8_t, "+q")
+    ATOMIC_ADD_DEF(uint8_t, "+q")
+    ATOMIC_ADD_DEF(int16_t, "+r")
+    ATOMIC_ADD_DEF(uint16_t, "+r")
+    ATOMIC_ADD_DEF(int32_t, "+r")
+    ATOMIC_ADD_DEF(uint32_t, "+r")
 
     #ifdef ARCH_X86_64
-        ATOMIC_ADD_DEF(int64_t)
-        ATOMIC_ADD_DEF(uint64_t)
+        ATOMIC_ADD_DEF(int64_t, "+r")
+        ATOMIC_ADD_DEF(uint64_t, "+r")
     #endif /* ARCH_X86_64 */
 
 } /* namespace lsp */
@@ -212,14 +212,29 @@ namespace lsp
 
 namespace lsp
 {
-    template <class type_t>
-    inline void atomic_init(type_t &lk)         { lk = LSP_ATOMIC_UNLOCKED; }
+    template <class T>
+    inline void atomic_init(T & lk)
+    {
+        lk = LSP_ATOMIC_UNLOCKED;
+    }
 
-    template <class type_t>
-    inline type_t atomic_trylock(type_t &lk)    { return atomic_swap(&lk, LSP_ATOMIC_LOCKED); }
+    template <class T>
+    inline T atomic_trylock(T & lk)
+    {
+        return T(atomic_swap(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_LOCKED))
+        ));
+    }
 
-    template <class type_t>
-    inline type_t atomic_unlock(type_t &lk)     { return atomic_swap(&lk, LSP_ATOMIC_UNLOCKED); }
+    template <class T>
+    inline T atomic_unlock(T &lk)
+    {
+        return T(atomic_swap(
+            fixed_int(&lk),
+            fixed_int(T(LSP_ATOMIC_UNLOCKED))
+        ));
+    }
 
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/atomic.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/atomic.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/atomic.h	2025-03-01 12:42:54.916659647 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/atomic.h	2025-08-26 18:15:40.938030350 +0000
@@ -55,8 +55,10 @@ namespace lsp
         #include <lsp-plug.in/common/arch/x86/atomic.h>
     #elif defined(ARCH_AARCH64) /* ARM 64-bit implementation */
         #include <lsp-plug.in/common/arch/aarch64/atomic.h>
-    #elif defined(ARCH_ARM7) || defined(ARCH_ARM6) /* ARM 32-bit implementation */
+    #elif defined(ARCH_ARM7) /* ARM 32-bit implementation */
         #include <lsp-plug.in/common/arch/arm/atomic.h>
+    #elif defined(ARCH_ARM6) /* ARM 32-bit implementation */
+        #include <lsp-plug.in/common/arch/arm/atomic-armv6.h>
     #elif defined(ARCH_ARM) /* ARM 32-bit implementation */
         #include <lsp-plug.in/common/arch/arm/atomic-legacy.h>
     #else /* Generic implementation */
@@ -78,6 +80,12 @@ namespace lsp
         );
     }
 
+    template <class T>
+    T atomic_swap(T *ptr, T value)
+    {
+        return T(atomic_swap(fixed_int(ptr), fixed_int(value)));
+    }
+
     // Special case for NULL
     template <class T>
     T *atomic_swap(T **ptr, nullptr_t *value)
@@ -91,6 +99,34 @@ namespace lsp
     }
 
     template <class T>
+    bool atomic_cas(T *dst, T src, T rep)
+    {
+        return atomic_cas(fixed_int(dst), fixed_int(src), fixed_int(rep));
+    }
+
+    template <class T>
+    bool atomic_cas(T **dst, T *src, T *rep)
+    {
+        return atomic_cas(
+            reinterpret_cast<void **>(dst),
+            reinterpret_cast<void *>(src),
+            reinterpret_cast<void *>(rep)
+        );
+    }
+
+    template <class T>
+    T atomic_load(T *ptr)
+    {
+        return T(atomic_load(fixed_int(ptr)));
+    }
+
+    template <class T>
+    T atomic_load(const T *ptr)
+    {
+        return T(atomic_load(fixed_int(ptr)));
+    }
+
+    template <class T>
     T *atomic_load(T **ptr)
     {
         return static_cast<T *>(
@@ -111,6 +147,12 @@ namespace lsp
     }
 
     template <class T>
+    void atomic_store(T *ptr, T value)
+    {
+        return atomic_store(fixed_int(ptr), fixed_int(value));
+    }
+
+    template <class T>
     void atomic_store(T **ptr, T * value)
     {
         atomic_store(
@@ -118,6 +160,15 @@ namespace lsp
             reinterpret_cast<void *>(value)
         );
     }
+
+    template <class T>
+    inline T atomic_add(T *ptr, T value)
+    {
+        return T(atomic_add(
+            fixed_int(ptr),
+            fixed_int(value)
+        ));
+    }
 } /* namespace lsp */
 
 #endif /* LSP_PLUG_IN_COMMON_ATOMIC_H_ */
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/bits.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/bits.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/bits.h	2025-03-01 12:42:54.916659647 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/bits.h	2025-08-26 18:15:40.938030350 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-common-lib
  * Created on: 1 апр. 2020 г.
@@ -61,15 +61,52 @@ namespace lsp
 namespace lsp
 {
     /**
+     * Compute binary logarithm of the integer value
+     * @param value value to compute binary logarithm
+     * @return computed binary logarithm
+     */
+    template <class T>
+    inline T int_log2(T value)
+    {
+        return T(int_log2(fixed_int(value)));
+    }
+
+    /**
+     * Reverse bits
+     * @param src source value to reverse bits
+     * @return value with reverse-order of bits
+     */
+    template <class T>
+    inline T reverse_bits(T src)
+    {
+        return T(reverse_bits(fixed_int(src)));
+    }
+
+    /**
+     * Reverse bits
+     * @param src source value to reverse bits
+     * @param count number of significant bits in the integer value
+     * @return value with reverse-order of significant bits
+     */
+    template <class T>
+    inline T reverse_bits(T src, size_t count)
+    {
+        return T(reverse_bits(
+            fixed_int(src),
+            count
+        ));
+    }
+
+    /**
      * Round the integer value up to power of 2
      * @tparam T integer value
      * @param value value to round
      * @return rounded value
      */
     template <class T>
-    T round_pow2(T value)
+    inline T round_pow2(T value)
     {
-        T rounded   = 1 << int_log2(value);
+        T rounded   = T(1 << int_log2(fixed_int(value)));
         return (rounded == value) ? rounded : rounded << 1;
     }
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/types.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/types.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/types.h	2025-03-01 12:42:54.920659624 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/types.h	2025-08-26 18:15:40.942030311 +0000
@@ -803,11 +803,11 @@ namespace lsp
 #endif /* DEFAULT_ALIGN */
 
 #ifdef LSP_UNALIGNED_MEMORY_SAFE
-    #define IF_UNALIGNED_MEMORY_SAFE(x)     x
-    #define IF_UNALIGNED_MEMORY_UNSAFE(x)
+    #define IF_UNALIGNED_MEMORY_SAFE(...)   __VA_ARGS__
+    #define IF_UNALIGNED_MEMORY_UNSAFE(...)
 #else
-    #define IF_UNALIGNED_MEMORY_SAFE(x)
-    #define IF_UNALIGNED_MEMORY_UNSAFE(x)   x
+    #define IF_UNALIGNED_MEMORY_SAFE(...)
+    #define IF_UNALIGNED_MEMORY_UNSAFE(...) __VA_ARGS__
 #endif /* LSP_UNALIGNED_MEMORY_SAFE */
 
 #ifdef PLATFORM_LINUX
@@ -1020,6 +1020,7 @@ namespace lsp
     template <> struct fixed_int_alias_t<4, false>              { typedef uint32_t type;    };
     template <> struct fixed_int_alias_t<8, false>              { typedef uint64_t type;    };
 
+    template <> struct fixed_int_type_t<char> : public fixed_int_alias_t<sizeof(char), char(0xff) < 0> {};
     template <> struct fixed_int_type_t<signed char> : public fixed_int_alias_t<sizeof(signed char), true> {};
     template <> struct fixed_int_type_t<signed short> : public fixed_int_alias_t<sizeof(signed short), true> {};
     template <> struct fixed_int_type_t<signed int> : public fixed_int_alias_t<sizeof(signed int), true> {};
@@ -1032,7 +1033,7 @@ namespace lsp
     template <> struct fixed_int_type_t<unsigned long long> : public fixed_int_alias_t<sizeof(unsigned long long), false> {};
 
     /**
-     * Safe size-matching conversion of integral type to one of intN_t/uintN_t types without loosing precision.
+     * Safe size-matching conversion of integral type to one of intN_t/uintN_t types without losing precision.
      * This is usual for systems where size_t is defined in some strange way like in MacOS.
      *
      * @param value value to convert
@@ -1044,6 +1045,32 @@ namespace lsp
         return typename fixed_int_type_t<T>::type(value);
     }
 
+    /**
+     * Safe size-matching conversion of integral type pointer to one of intN_t/uintN_t pointer types without losing precision.
+     * This is usual for systems where size_t is defined in some strange way like in MacOS.
+     *
+     * @param value value to convert
+     * @return converted value
+     */
+    template <typename T>
+    constexpr inline typename fixed_int_type_t<T>::type *fixed_int(T *value)
+    {
+        return reinterpret_cast<typename fixed_int_type_t<T>::type *>(value);
+    }
+
+    /**
+     * Safe size-matching conversion of integral type pointer to one of intN_t/uintN_t pointer types without losing precision.
+     * This is usual for systems where size_t is defined in some strange way like in MacOS.
+     *
+     * @param value value to convert
+     * @return converted value
+     */
+    template <typename T>
+    constexpr inline const typename fixed_int_type_t<T>::type * fixed_int(const T *value)
+    {
+        return reinterpret_cast<const typename fixed_int_type_t<T>::type *>(value);
+    }
+
 } /* namespace lsp */
 
 #endif /* LSP_PLUG_IN_COMMON_TYPES_H_ */
diff -pruN 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/version.h 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/version.h
--- 1.2.21-5/modules/lsp-common-lib/include/lsp-plug.in/common/version.h	2025-03-01 12:42:54.920659624 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/include/lsp-plug.in/common/version.h	2025-08-26 18:15:40.942030311 +0000
@@ -26,7 +26,7 @@
 // Version of headers
 #define LSP_COMMON_LIB_MAJOR            1
 #define LSP_COMMON_LIB_MINOR            0
-#define LSP_COMMON_LIB_MICRO            41
+#define LSP_COMMON_LIB_MICRO            43
 
 #if defined(LSP_COMMON_LIB_PUBLISHER)
     #define LSP_COMMON_LIB_PUBLIC       LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-common-lib/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-common-lib/make/tools.mk
--- 1.2.21-5/modules/lsp-common-lib/make/tools.mk	2025-03-01 12:42:54.920659624 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/make/tools.mk	2025-08-26 18:15:40.942030311 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-common-lib/modules.mk 1.2.23-0ubuntu1/modules/lsp-common-lib/modules.mk
--- 1.2.21-5/modules/lsp-common-lib/modules.mk	2025-03-01 12:42:54.920659624 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/modules.mk	2025-08-26 18:15:40.942030311 +0000
@@ -20,7 +20,7 @@
 
 #------------------------------------------------------------------------------
 # Variables that describe source code dependencies
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
diff -pruN 1.2.21-5/modules/lsp-common-lib/project.mk 1.2.23-0ubuntu1/modules/lsp-common-lib/project.mk
--- 1.2.21-5/modules/lsp-common-lib/project.mk	2025-03-01 12:42:54.920659624 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/project.mk	2025-08-26 18:15:40.942030311 +0000
@@ -23,5 +23,5 @@ ARTIFACT_ID                 = LSP_COMMON
 ARTIFACT_NAME               = lsp-common-lib
 ARTIFACT_DESC               = Common library for basic C/C++ language definitions
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.41
+ARTIFACT_VERSION            = 1.0.43
 
diff -pruN 1.2.21-5/modules/lsp-common-lib/src/main/atomic.cpp 1.2.23-0ubuntu1/modules/lsp-common-lib/src/main/atomic.cpp
--- 1.2.21-5/modules/lsp-common-lib/src/main/atomic.cpp	2025-03-01 12:42:54.920659624 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/src/main/atomic.cpp	2025-08-26 18:15:40.942030311 +0000
@@ -23,7 +23,7 @@
 
 namespace lsp
 {
-#if defined(ARCH_ARM7) || defined(ARCH_ARM6)
+#if defined(ARCH_ARM7)
     /* nothing */
 #elif defined(ARCH_ARM)
     LSP_COMMON_LIB_PUBLIC
diff -pruN 1.2.21-5/modules/lsp-common-lib/src/test/utest/atomic.cpp 1.2.23-0ubuntu1/modules/lsp-common-lib/src/test/utest/atomic.cpp
--- 1.2.21-5/modules/lsp-common-lib/src/test/utest/atomic.cpp	2025-03-01 12:42:54.920659624 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/src/test/utest/atomic.cpp	2025-08-26 18:15:40.942030311 +0000
@@ -26,65 +26,104 @@ using namespace lsp;
 
 UTEST_BEGIN("common", atomic)
 
-    void test_cas()
+    template <class T>
+    void test_cas(const char *type)
     {
         size_t i;
-        atomic_t value;
-        atomic_store(&value, 0);
+        T value;
+        atomic_store(&value, T(0));
 
-        printf("Testing atomic_cas...\n");
+        printf("Testing atomic_cas for %s...\n", type);
 
         for (i=0; i<1000; ++i)
-            if (atomic_cas(&value, 0, 1))
+            if (atomic_cas(&value, T(0), T(1)))
                 break;
         UTEST_ASSERT(i < 1000);
 
         for (i=0; i<1000; ++i)
-            if (atomic_cas(&value, 0, 1))
+            if (atomic_cas(&value, T(0), T(1)))
                 break;
         UTEST_ASSERT(i >= 1000);
 
         for (i=0; i<1000; ++i)
-            if (atomic_cas(&value, 1, 2))
+            if (atomic_cas(&value, T(1), T(2)))
                 break;
         UTEST_ASSERT(i < 1000);
-        UTEST_ASSERT(atomic_load(&value) == 2);
+        UTEST_ASSERT(atomic_load(&value) == T(2));
     }
 
-    void test_swap()
+    template <class T>
+    void test_swap(const char *type)
     {
-        atomic_t value1, value2;
-        atomic_store(&value1, 0);
-        atomic_store(&value2, 1);
-        printf("Testing atomic_swap...\n");
+        T value1, value2;
+        atomic_store(&value1, T(0));
+        atomic_store(&value2, T(1));
 
-        atomic_swap(&value1, 2);
-        atomic_swap(&value2, 3);
+        printf("Testing atomic_swap for %s...\n", type);
 
-        UTEST_ASSERT(atomic_load(&value1) == 2);
-        UTEST_ASSERT(atomic_load(&value2) == 3);
+        atomic_swap(&value1, T(2));
+        atomic_swap(&value2, T(3));
+
+        UTEST_ASSERT(atomic_load(&value1) == T(2));
+        UTEST_ASSERT(atomic_load(&value2) == T(3));
 
         atomic_swap(&value1, value2);
 
-        UTEST_ASSERT(atomic_load(&value1) == 3);
+        UTEST_ASSERT(atomic_load(&value1) == T(3));
     }
 
-    void test_add()
+    template <class T>
+    void test_add(const char *type)
     {
-        atomic_t value;
-        atomic_store(&value, 0);
-        printf("Testing atomic_add...\n");
-
-        for (size_t i=0; i<1000; ++i)
-            UTEST_ASSERT(atomic_add(&value, 1) == atomic_t(i)); // i == previous value
-        UTEST_ASSERT(atomic_load(&value) == 1000);
+        T value;
+        atomic_store(&value, T(0));
+        printf("Testing atomic_add for %s...\n", type);
+
+        for (size_t i=0; i<0x40; ++i)
+            UTEST_ASSERT(atomic_add(&value, T(1)) == T(i)); // i == previous value
+        UTEST_ASSERT(atomic_load(&value) == T(0x40));
     }
 
     UTEST_MAIN
     {
-        test_cas();
-        test_swap();
-        test_add();
+        test_cas<int8_t>("int8_t");
+        test_cas<uint8_t>("uint8_t");
+        test_cas<int16_t>("int16_t");
+        test_cas<uint16_t>("uint16_t");
+        test_cas<int32_t>("int32_t");
+        test_cas<uint32_t>("uint32_t");
+    #if defined(ARCH_64BIT)
+        test_cas<int64_t>("int64_t");
+        test_cas<uint64_t>("uint64_t");
+    #endif /* ARCH_64BIT */
+        test_cas<size_t>("size_t");
+        test_cas<ssize_t>("ssize_t");
+
+        test_swap<int8_t>("int8_t");
+        test_swap<uint8_t>("uint8_t");
+        test_swap<int16_t>("int16_t");
+        test_swap<uint16_t>("uint16_t");
+        test_swap<int32_t>("int32_t");
+        test_swap<uint32_t>("uint32_t");
+    #if defined(ARCH_64BIT)
+        test_swap<int32_t>("int64_t");
+        test_swap<uint32_t>("uint64_t");
+    #endif /* ARCH_64BIT */
+        test_swap<size_t>("size_t");
+        test_swap<ssize_t>("ssize_t");
+
+        test_add<int8_t>("int8_t");
+        test_add<uint8_t>("uint8_t");
+        test_add<int16_t>("int16_t");
+        test_add<uint16_t>("uint16_t");
+        test_add<int32_t>("int32_t");
+        test_add<uint32_t>("uint32_t");
+    #if defined(ARCH_64BIT)
+        test_add<int64_t>("int64_t");
+        test_add<uint64_t>("uint64_t");
+    #endif /* ARCH_64BIT */
+        test_add<size_t>("size_t");
+        test_add<ssize_t>("ssize_t");
     }
 UTEST_END;
 
diff -pruN 1.2.21-5/modules/lsp-common-lib/src/test/utest/bits.cpp 1.2.23-0ubuntu1/modules/lsp-common-lib/src/test/utest/bits.cpp
--- 1.2.21-5/modules/lsp-common-lib/src/test/utest/bits.cpp	2025-03-01 12:42:54.920659624 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/src/test/utest/bits.cpp	2025-08-26 18:15:40.942030311 +0000
@@ -26,51 +26,63 @@ using namespace lsp;
 
 UTEST_BEGIN("common", bits)
     template <typename T>
-        void test_reverse_bits(const char *label)
+    void test_reverse_bits(const char *label)
+    {
+        printf("Testing reverse_bits for %s...\n", label);
+        const size_t n = sizeof(T) * 8;
+
+        for (size_t i=0; i<n; ++i)
         {
-            printf("Testing %s...\n", label);
-            size_t n = sizeof(T) * 8;
+            T x     = T(1) << i;
+            T y     = reverse_bits(x);
+            T ck    = (T(1) << (n - i - 1));
+            UTEST_ASSERT_MSG(y == ck, "%s: tier1, i=%d, n=%d, x=0x%08llx, y=0x%08llx, ck=0x%08llx",
+                label, int(i), int(n),
+                (long long)x,
+                (long long)y,
+                (long long)ck);
+        }
 
-            for (size_t i=0; i<n; ++i)
-            {
-                T x     = T(1) << i;
-                T y     = reverse_bits(x);
-                T ck    = (T(1) << (n - i - 1));
-                UTEST_ASSERT_MSG(y == ck, "%s: tier1, i=%d, n=%d", label, int(i), int(n));
-            }
-
-            for (size_t i=0; i<(n - 4); ++i)
-            {
-                T x     = T(1) << i;
-                T y     = reverse_bits(x, n - 4);
-                T ck    = (T(1) << (n - 5 - i));
-                UTEST_ASSERT_MSG(y == ck, "%s: tier2, i=%d, n=%d", label, int(i), int(n));
-            }
-
-            for (size_t i=0; i<4; ++i)
-            {
-                T x     = T(1) << i;
-                T y     = reverse_bits(x, 4);
-                T ck    = (T(1) << (3 - i));
-                UTEST_ASSERT_MSG(y == ck, "%s: tier3, i=%d, n=%d", label, int(i), int(n));
-            }
+        for (size_t i=0; i<(n - 4); ++i)
+        {
+            T x     = T(1) << i;
+            T y     = reverse_bits(x, n - 4);
+            T ck    = (T(1) << (n - 5 - i));
+            UTEST_ASSERT_MSG(y == ck, "%s: tier2, i=%d, n=%d, x=0x%08llx, y=0x%08llx, ck=0x%08llx",
+                label, int(i), int(n),
+                (long long)x,
+                (long long)y,
+                (long long)ck);
         }
 
-    template <typename T>
-        void test_int_log2(const char *label)
+        for (size_t i=0; i<4; ++i)
         {
-            printf("Testing %s...\n", label);
+            T x     = T(1) << i;
+            T y     = reverse_bits(x, 4);
+            T ck    = (T(1) << (3 - i));
+            UTEST_ASSERT_MSG(y == ck, "%s: tier3, i=%d, n=%d, x=0x%08llx, y=0x%08llx, ck=0x%08llx",
+                label, int(i), int(n),
+                (long long)x,
+                (long long)y,
+                (long long)ck);
+        }
+    }
+
+    template <typename T>
+    void test_int_log2(const char *label)
+    {
+        printf("Testing int_log2 for %s...\n", label);
 
-            int log2 = int_log2(T(0));
-            UTEST_ASSERT_MSG(log2 == 0, "%s: zero input detected as %d", label, log2);
+        int log2 = int_log2(T(0));
+        UTEST_ASSERT_MSG(log2 == 0, "%s: zero input detected as %d", label, log2);
 
-            for (int i=0; i<int(sizeof(T)*8); ++i)
-            {
-                T x     = T(1) << i;
-                int y   = int_log2(x);
-                UTEST_ASSERT_MSG(y == i, "%s: bit=%d but detected as %d", label, i, y);
-            }
+        for (int i=0; i<int(sizeof(T)*8); ++i)
+        {
+            T x     = T(1) << i;
+            int y   = int_log2(x);
+            UTEST_ASSERT_MSG(y == i, "%s: bit=%d but detected as %d", label, i, y);
         }
+    }
 
     void test_pow2_rounding()
     {
@@ -85,23 +97,27 @@ UTEST_BEGIN("common", bits)
 
     UTEST_MAIN
     {
-        test_reverse_bits<uint8_t>("reverse_bits u8");
-        test_reverse_bits<int8_t>("reverse_bits i8");
-        test_reverse_bits<uint16_t>("reverse_bits u16");
-        test_reverse_bits<int16_t>("reverse_bits i16");
-        test_reverse_bits<uint32_t>("reverse_bits u32");
-        test_reverse_bits<int32_t>("reverse_bits i32");
-        test_reverse_bits<uint64_t>("reverse_bits u64");
-        test_reverse_bits<int64_t>("reverse_bits i64");
-
-        test_int_log2<uint8_t>("int_log2 u8");
-        test_int_log2<int8_t>("int_log2 i8");
-        test_int_log2<uint16_t>("int_log2 u16");
-        test_int_log2<int16_t>("int_log2 i16");
-        test_int_log2<uint32_t>("int_log2 u32");
-        test_int_log2<int32_t>("int_log2 i32");
-        test_int_log2<uint64_t>("int_log2 u64");
-        test_int_log2<int64_t>("int_log2 i64");
+        test_reverse_bits<uint8_t>("uint8_t");
+        test_reverse_bits<int8_t>("int8_t");
+        test_reverse_bits<uint16_t>("uint16_t");
+        test_reverse_bits<int16_t>("int16_t");
+        test_reverse_bits<uint32_t>("uint32_t");
+        test_reverse_bits<int32_t>("int32_t");
+        test_reverse_bits<uint64_t>("uint64_t");
+        test_reverse_bits<int64_t>("int64_t");
+        test_reverse_bits<size_t>("size_t");
+        test_reverse_bits<ssize_t>("ssize_t");
+
+        test_int_log2<uint8_t>("uint8_t");
+        test_int_log2<int8_t>("int8_t");
+        test_int_log2<uint16_t>("uint16_t");
+        test_int_log2<int16_t>("int16_t");
+        test_int_log2<uint32_t>("uint32_t");
+        test_int_log2<int32_t>("int32_t");
+        test_int_log2<uint64_t>("uint64_t");
+        test_int_log2<int64_t>("int64_t");
+        test_int_log2<size_t>("size_t");
+        test_int_log2<ssize_t>("ssize_t");
 
         test_pow2_rounding();
     }
diff -pruN 1.2.21-5/modules/lsp-common-lib/src/test/utest/types.cpp 1.2.23-0ubuntu1/modules/lsp-common-lib/src/test/utest/types.cpp
--- 1.2.21-5/modules/lsp-common-lib/src/test/utest/types.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-common-lib/src/test/utest/types.cpp	2025-08-26 18:15:40.942030311 +0000
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-common-lib
+ * Created on: 3 мар. 2025 г.
+ *
+ * lsp-common-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-common-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-common-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/test-fw/utest.h>
+
+using namespace lsp;
+
+UTEST_BEGIN("common", types)
+
+    template <class type>
+    void test_cast(type value)
+    {
+        auto casted = lsp::fixed_int(value);
+        UTEST_ASSERT(sizeof(casted) == sizeof(value));
+    }
+
+    UTEST_MAIN
+    {
+        char str[8];
+        const char *cstr = "test";
+
+        test_cast<char>(static_cast<char>(42));
+        test_cast<short>(static_cast<short>(42));
+        test_cast<int>(static_cast<int>(42));
+        test_cast<long>(static_cast<long>(42));
+        test_cast<long long>(static_cast<long long>(42));
+
+        test_cast<signed char>(static_cast<signed char>(42));
+        test_cast<signed short>(static_cast<signed short>(42));
+        test_cast<signed int>(static_cast<signed int>(42));
+        test_cast<signed long>(static_cast<signed long>(42));
+        test_cast<signed long long>(static_cast<signed long long>(42));
+
+        test_cast<unsigned char>(static_cast<unsigned char>(42));
+        test_cast<unsigned short>(static_cast<unsigned short>(42));
+        test_cast<unsigned int>(static_cast<unsigned int>(42));
+        test_cast<unsigned long>(static_cast<unsigned long>(42));
+        test_cast<unsigned long long>(static_cast<unsigned long long>(42));
+
+        test_cast<char *>(reinterpret_cast<char *>(str));
+        test_cast<short *>(reinterpret_cast<short *>(str));
+        test_cast<int *>(reinterpret_cast<int *>(str));
+        test_cast<long *>(reinterpret_cast<long *>(str));
+        test_cast<long long *>(reinterpret_cast<long long *>(str));
+
+        test_cast<signed char *>(reinterpret_cast<signed char *>(str));
+        test_cast<signed short *>(reinterpret_cast<signed short *>(str));
+        test_cast<signed int *>(reinterpret_cast<signed int *>(str));
+        test_cast<signed long *>(reinterpret_cast<signed long *>(str));
+        test_cast<signed long long *>(reinterpret_cast<signed long long *>(str));
+
+        test_cast<unsigned char *>(reinterpret_cast<unsigned char *>(str));
+        test_cast<unsigned short *>(reinterpret_cast<unsigned short *>(str));
+        test_cast<unsigned int *>(reinterpret_cast<unsigned int *>(str));
+        test_cast<unsigned long *>(reinterpret_cast<unsigned long *>(str));
+        test_cast<unsigned long long *>(reinterpret_cast<unsigned long long *>(str));
+
+        test_cast<const char *>(reinterpret_cast<const char *>(cstr));
+        test_cast<const short *>(reinterpret_cast<const short *>(cstr));
+        test_cast<const int *>(reinterpret_cast<const int *>(cstr));
+        test_cast<const long *>(reinterpret_cast<const long *>(cstr));
+        test_cast<const long long *>(reinterpret_cast<const long long *>(cstr));
+
+        test_cast<const signed char *>(reinterpret_cast<const signed char *>(cstr));
+        test_cast<const signed short *>(reinterpret_cast<const signed short *>(cstr));
+        test_cast<const signed int *>(reinterpret_cast<const signed int *>(cstr));
+        test_cast<const signed long *>(reinterpret_cast<const signed long *>(cstr));
+        test_cast<const signed long long *>(reinterpret_cast<const signed long long *>(cstr));
+
+        test_cast<const unsigned char *>(reinterpret_cast<const unsigned char *>(cstr));
+        test_cast<const unsigned short *>(reinterpret_cast<const unsigned short *>(cstr));
+        test_cast<const unsigned int *>(reinterpret_cast<const unsigned int *>(cstr));
+        test_cast<const unsigned long *>(reinterpret_cast<const unsigned long *>(cstr));
+        test_cast<const unsigned long long *>(reinterpret_cast<const unsigned long long *>(cstr));
+    }
+
+UTEST_END;
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-dsp-lib/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-dsp-lib/.github/workflows/build.yml	2025-03-01 12:42:56.768648530 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/.github/workflows/build.yml	2025-08-26 18:15:43.678003757 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
@@ -188,3 +188,25 @@ jobs:
       - name: Run unit tests
         shell: msys2 {0}
         run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test.exe utest --verbose --jobs 1
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config TEST=1 STRICT=1 DEBUG=1 ASAN=1
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
+      - name: Run unit tests
+        run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1
+      - name: Run unit tests with memcheck
+        run: |
+          for test in $(.build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --list --suppress); do \
+            echo "***** MEMCHECK $test *****"; \
+            .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1 --nofork --debug $test; \
+          done
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-dsp-lib/CHANGELOG
--- 1.2.21-5/modules/lsp-dsp-lib/CHANGELOG	2025-03-01 12:42:56.768648530 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/CHANGELOG	2025-08-26 18:15:43.678003757 +0000
@@ -2,6 +2,19 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.31 ===
+* Implementation of 3D mathematics using AVX instruction set.
+* Fixed improper AVX-512 optimization for lanczos kernel genration function.
+* Fixed Mid/Side transformation functions bug for 32-bit and 64-bit ARM processors. 
+* Added MacOS CI builds.
+* Updated module versions in dependencies.
+
+=== 1.0.30 ===
+* Implemented SIMD-optimized trigonometric functions sinf and cosf.
+* Implemented Lanczos filter kernel computation function.
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.29 ===
 * Implemented AVX-512 optimized direct_fft and reverse_fft functions.
 * Added definition of MacOS dependencies in build scripts.
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/3dmath/types.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/3dmath/types.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/3dmath/types.h	2025-03-01 12:42:56.768648530 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/3dmath/types.h	2025-08-26 18:15:43.678003757 +0000
@@ -47,28 +47,11 @@ typedef struct LSP_DSP_LIB_TYPE(color3d_
     float       r, g, b, a;
 } LSP_DSP_LIB_TYPE(color3d_t);
 
-typedef struct LSP_DSP_LIB_TYPE(ray3d_t)
-{
-    LSP_DSP_LIB_TYPE(point3d_t)     z;          // The start point: x, y, z = point coordinates
-    LSP_DSP_LIB_TYPE(vector3d_t)    v;          // The spread vector: dx, dy, dz = direction
-} LSP_DSP_LIB_TYPE(ray3d_t);
-
 typedef struct LSP_DSP_LIB_TYPE(bound_box3d_t)
 {
     LSP_DSP_LIB_TYPE(point3d_t)     p[8];       // Bounding-box contains 8 points
 } LSP_DSP_LIB_TYPE(bound_box3d_t);
 
-typedef struct LSP_DSP_LIB_TYPE(segment3d_t)
-{
-    LSP_DSP_LIB_TYPE(point3d_t)     p[2];
-} LSP_DSP_LIB_TYPE(segment3d_t);
-
-typedef struct LSP_DSP_LIB_TYPE(triangle3d_t)
-{
-    LSP_DSP_LIB_TYPE(point3d_t)     p[3];       // Vertexes: x, y, z = vertex coordinates, w = length of the corresponding edge
-    LSP_DSP_LIB_TYPE(vector3d_t)    n;          // Normal: dx, dy, dz = normal coordinates, dw = plane equation coefficient
-} LSP_DSP_LIB_TYPE(triangle3d_t);
-
 typedef struct LSP_DSP_LIB_TYPE(matrix3d_t)
 {
     float       m[16];      // Matrix data
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/3dmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/3dmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/3dmath.h	2025-03-01 12:42:56.768648530 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/3dmath.h	2025-08-26 18:15:43.678003757 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -177,36 +177,6 @@ LSP_DSP_LIB_SYMBOL(void, vector_mul_v2,
  */
 LSP_DSP_LIB_SYMBOL(void, vector_mul_vv, LSP_DSP_LIB_TYPE(vector3d_t) *r, const LSP_DSP_LIB_TYPE(vector3d_t) *vv);
 
-/** Init segment using coordinates of 2 points
- *
- * @param s segment to initialize
- * @param x0 point 1 X coordinate
- * @param y0 point 1 Y coordinate
- * @param z0 point 1 Z coordinate
- * @param x1 point 2 X coordinate
- * @param y1 point 2 Y coordinate
- * @param z1 point 2 Z coordinate
- */
-LSP_DSP_LIB_SYMBOL(void, init_segment_xyz, LSP_DSP_LIB_TYPE(segment3d_t) *s,
-    float x0, float y0, float z0,
-    float x1, float y1, float z1
-);
-
-/** Init segment using two points
- *
- * @param s segment to initialize
- * @param p1 point 1
- * @param p2 point 2
- */
-LSP_DSP_LIB_SYMBOL(void, init_segment_p2, LSP_DSP_LIB_TYPE(segment3d_t) *s, const LSP_DSP_LIB_TYPE(point3d_t) *p1, const LSP_DSP_LIB_TYPE(point3d_t) *p2);
-
-/** Init segment using array of two points
- *
- * @param s segment to initialize
- * @param p array of points
- */
-LSP_DSP_LIB_SYMBOL(void, init_segment_pv, LSP_DSP_LIB_TYPE(segment3d_t) *s, const LSP_DSP_LIB_TYPE(point3d_t) *p);
-
 /** Initialize matrix (make copy)
  *
  * @param dst destination matrix
@@ -332,32 +302,6 @@ LSP_DSP_LIB_SYMBOL(void, init_matrix3d_l
  */
 LSP_DSP_LIB_SYMBOL(void, init_matrix3d_orientation, LSP_DSP_LIB_TYPE(matrix3d_t) *m, LSP_DSP_LIB_TYPE(axis_orientation_t) orientation);
 
-/**
- * Compute tranfromation matrix from point and vector data which provides:
- *   - position of the object (point)
- *   - direction of the object (vector)
- *   - scale of the object (length of vector)
- * After applying this matrix, the point with coordinates (0, 0, 1)
- * will have coordinates (p.x + v.dx, p.y + v.dy, p.z + v.dz)
- *
- * @param m target matrix
- * @param p point that indicates position of the object
- * @param v vector that indicates rotation and size of the object
- */
-LSP_DSP_LIB_SYMBOL(void, calc_matrix3d_transform_p1v1, LSP_DSP_LIB_TYPE(matrix3d_t) *m, const LSP_DSP_LIB_TYPE(point3d_t) *p, const LSP_DSP_LIB_TYPE(vector3d_t) *v);
-
-/**
- * Compute tranfromation matrix from ray data which provides:
- *   - position of the object (point)
- *   - direction of the object (vector)
- *   - scale of the object (length of vector)
- * After applying this matrix, the point with coordinates (0, 0, 1)
- * will have coordinates (r.z.x + r.v.dx, r.z.y + r.v.dy, r.z.z + r.v.dz)
- * @param m target matrix
- * @param r ray that indicates position, rotation and size of the object
- */
-LSP_DSP_LIB_SYMBOL(void, calc_matrix3d_transform_r1, LSP_DSP_LIB_TYPE(matrix3d_t) *m, const LSP_DSP_LIB_TYPE(ray3d_t) *r);
-
 /** Apply matrix to vector
  *
  * @param r target vector
@@ -416,226 +360,6 @@ LSP_DSP_LIB_SYMBOL(void, transpose_matri
  */
 LSP_DSP_LIB_SYMBOL(void, transpose_matrix3d2, LSP_DSP_LIB_TYPE(matrix3d_t) *r, const LSP_DSP_LIB_TYPE(matrix3d_t) *m);
 
-/** Initialize ray using coordinates of 2 points
- *
- * @param l ray to initialize
- * @param x0 source point X coordinate
- * @param y0 source point Y coordinate
- * @param z0 source point Z coordinate
- * @param x1 destination point X coordinate
- * @param y1 destination point X coordinate
- * @param z1 destination point X coordinate
- */
-LSP_DSP_LIB_SYMBOL(void, init_ray_xyz, LSP_DSP_LIB_TYPE(ray3d_t) *l, float x0, float y0, float z0, float x1, float y1, float z1);
-
-/** Initialize ray using coordinate of start point and direction vector
- *
- * @param l ray to initialize
- * @param x0 source point X coordinate
- * @param y0 source point Y coordinate
- * @param z0 source point Z coordinate
- * @param dx direction vector X projection
- * @param dy direction vector Y projection
- * @param dz direction vector Z projection
- */
-LSP_DSP_LIB_SYMBOL(void, init_ray_dxyz, LSP_DSP_LIB_TYPE(ray3d_t) *l, float x0, float y0, float z0, float dx, float dy, float dz);
-
-/** Initialize ray using point and vector object
- *
- * @param l ray to initialize
- * @param p source point
- * @param v direction vector
- */
-LSP_DSP_LIB_SYMBOL(void, init_ray_pdv, LSP_DSP_LIB_TYPE(ray3d_t) *l, const LSP_DSP_LIB_TYPE(point3d_t) *p, const LSP_DSP_LIB_TYPE(vector3d_t) *m);
-
-/** Initialize ray using two points
- *
- * @param l ray to initialize
- * @param p1 source point
- * @param p2 destination point
- */
-LSP_DSP_LIB_SYMBOL(void, init_ray_p2, LSP_DSP_LIB_TYPE(ray3d_t) *l, const LSP_DSP_LIB_TYPE(point3d_t) *p1, const LSP_DSP_LIB_TYPE(point3d_t) *p2);
-
-/** Initialize ray using array of two points
- *
- * @param l ray to initialize
- * @param p array of two points to initialize
- */
-LSP_DSP_LIB_SYMBOL(void, init_ray_pv, LSP_DSP_LIB_TYPE(ray3d_t) *l, const LSP_DSP_LIB_TYPE(point3d_t) *p);
-
-/** Initialize ray using another ray
- *
- * @param l ray to initialize
- * @param r source ray
- */
-LSP_DSP_LIB_SYMBOL(void, init_ray, LSP_DSP_LIB_TYPE(ray3d_t) *l, const LSP_DSP_LIB_TYPE(ray3d_t) *r);
-
-/** Calculate ray using coordinates of 2 points
- *
- * @param l ray to initialize
- * @param x0 source point X coordinate
- * @param y0 source point Y coordinate
- * @param z0 source point Z coordinate
- * @param x1 destination point X coordinate
- * @param y1 destination point X coordinate
- * @param z1 destination point X coordinate
- */
-LSP_DSP_LIB_SYMBOL(void, calc_ray_xyz, LSP_DSP_LIB_TYPE(ray3d_t) *l, float x0, float y0, float z0, float x1, float y1, float z1);
-
-/** Calculate ray using coordinate of start point and direction vector
- *
- * @param l ray to initialize
- * @param x0 source point X coordinate
- * @param y0 source point Y coordinate
- * @param z0 source point Z coordinate
- * @param dx direction vector X projection
- * @param dy direction vector Y projection
- * @param dz direction vector Z projection
- */
-LSP_DSP_LIB_SYMBOL(void, calc_ray_dxyz, LSP_DSP_LIB_TYPE(ray3d_t) *l, float x0, float y0, float z0, float dx, float dy, float dz);
-
-/** Calculate ray using another ray
- *
- * @param l ray to initialize
- * @param r source ray
- */
-LSP_DSP_LIB_SYMBOL(void, calc_ray_pdv, LSP_DSP_LIB_TYPE(ray3d_t) *l, const LSP_DSP_LIB_TYPE(point3d_t) *p, const LSP_DSP_LIB_TYPE(vector3d_t) *m);
-
-/** Calculate ray using two points
- *
- * @param l ray to initialize
- * @param p1 source point
- * @param p2 destination point
- */
-LSP_DSP_LIB_SYMBOL(void, calc_ray_p2, LSP_DSP_LIB_TYPE(ray3d_t) *l, const LSP_DSP_LIB_TYPE(point3d_t) *p1, const LSP_DSP_LIB_TYPE(point3d_t) *p2);
-
-/** Calculate ray using array of two points
- *
- * @param l ray to initialize
- * @param p array of two points to initialize
- */
-LSP_DSP_LIB_SYMBOL(void, calc_ray_pv, LSP_DSP_LIB_TYPE(ray3d_t) *l, const LSP_DSP_LIB_TYPE(point3d_t) *p);
-
-/** Calculate ray using another ray
- *
- * @param l ray to initialize
- * @param r source ray
- */
-LSP_DSP_LIB_SYMBOL(void, calc_ray, LSP_DSP_LIB_TYPE(ray3d_t) *l, const LSP_DSP_LIB_TYPE(ray3d_t) *r);
-
-/** Calculate triangle normal and edge lengths
- *
- * @param t triangle
- */
-LSP_DSP_LIB_SYMBOL(void, calc_triangle3d_params, LSP_DSP_LIB_TYPE(triangle3d_t) *t);
-
-/** Initialize triangle using coordinates of 3 points,
- *  fill normal vector with zeros
- *
- * @param t triangle to initialize
- * @param x0 point 1 X coordinate
- * @param y0 point 1 Y coordinate
- * @param z0 point 1 Z coordinate
- * @param x1 point 2 X coordinate
- * @param y1 point 2 Y coordinate
- * @param z1 point 2 Z coordinate
- * @param x2 point 3 X coordinate
- * @param y2 point 3 Y coordinate
- * @param z2 point 3 Z coordinate
- */
-LSP_DSP_LIB_SYMBOL(void, init_triangle3d_xyz, LSP_DSP_LIB_TYPE(triangle3d_t) *t,
-        float x0, float y0, float z0,
-        float x1, float y1, float z1,
-        float x2, float y2, float z2
-    );
-
-/** Initialize triangle using 3 points,
- *  fill normal vector with zeros
- *
- * @param t triangle to initialize
- * @param p1 point 1
- * @param p2 point 2
- * @param p3 point 3
- */
-LSP_DSP_LIB_SYMBOL(void, init_triangle3d_p3,
-        LSP_DSP_LIB_TYPE(triangle3d_t) *t,
-        const LSP_DSP_LIB_TYPE(point3d_t) *p1,
-        const LSP_DSP_LIB_TYPE(point3d_t) *p2,
-        const LSP_DSP_LIB_TYPE(point3d_t) *p3
-    );
-
-/** Initialize triangle using array of 3 points,
- *  fill normal vector with zeros
- *
- * @param t triangle to initialize
- * @param p array of 3 points
- */
-LSP_DSP_LIB_SYMBOL(void, init_triangle3d_pv,
-        LSP_DSP_LIB_TYPE(triangle3d_t) *t,
-        const LSP_DSP_LIB_TYPE(point3d_t) *p
-    );
-
-/** Initialize triangle from another triangle
- *
- * @param dst destination triangle
- * @param src source triangle
- */
-LSP_DSP_LIB_SYMBOL(void, init_triangle3d, LSP_DSP_LIB_TYPE(triangle3d_t) *dst, const LSP_DSP_LIB_TYPE(triangle3d_t) *src);
-
-/** Initialize triangle using coordinates of 3 points,
- *  calculate normal vector
- *
- * @param t triangle to initialize
- * @param x0 point 1 X coordinate
- * @param y0 point 1 Y coordinate
- * @param z0 point 1 Z coordinate
- * @param x1 point 2 X coordinate
- * @param y1 point 2 Y coordinate
- * @param z1 point 2 Z coordinate
- * @param x2 point 3 X coordinate
- * @param y2 point 3 Y coordinate
- * @param z2 point 3 Z coordinate
- */
-LSP_DSP_LIB_SYMBOL(void, calc_triangle3d_xyz, LSP_DSP_LIB_TYPE(triangle3d_t) *t,
-        float x0, float y0, float z0,
-        float x1, float y1, float z1,
-        float x2, float y2, float z2
-    );
-
-/** Initialize triangle using 3 points,
- *  calculate normal vector
- *
- * @param t triangle to initialize
- * @param p1 point 1
- * @param p2 point 2
- * @param p3 point 3
- */
-LSP_DSP_LIB_SYMBOL(void, calc_triangle3d_p3,
-        LSP_DSP_LIB_TYPE(triangle3d_t) *t,
-        const LSP_DSP_LIB_TYPE(point3d_t) *p1,
-        const LSP_DSP_LIB_TYPE(point3d_t) *p2,
-        const LSP_DSP_LIB_TYPE(point3d_t) *p3
-    );
-
-/** Initialize triangle using array of 3 points,
- *  calculate normal vector
- *
- * @param t triangle to initialize
- * @param p array of 3 points
- */
-LSP_DSP_LIB_SYMBOL(void, calc_triangle3d_pv,
-        LSP_DSP_LIB_TYPE(triangle3d_t) *t,
-        const LSP_DSP_LIB_TYPE(point3d_t) *p
-    );
-
-/** Init triangle from another triangle,
- *  calculate normal vector
- *
- * @param dst destination triangle
- * @param src source triangle
- */
-LSP_DSP_LIB_SYMBOL(void, calc_triangle3d, LSP_DSP_LIB_TYPE(triangle3d_t) *dst, const LSP_DSP_LIB_TYPE(triangle3d_t) *src);
-
 /** Analyze that two vectors and the normal vector organize the left triplet
  *
  * @param p1 start point of the first vector
@@ -679,50 +403,29 @@ LSP_DSP_LIB_SYMBOL(float, check_triplet3
  */
 LSP_DSP_LIB_SYMBOL(float, check_triplet3d_vv, const LSP_DSP_LIB_TYPE(vector3d_t) *v);
 
-/** Analyze that triangle vectors and normal vector of triangle organize the left triplet
- *
- * @param t triganle
- * @return value greater than zero if left triplet, less than zero if right triplet, zero if not triplet
- */
-LSP_DSP_LIB_SYMBOL(float, check_triplet3d_t, const LSP_DSP_LIB_TYPE(triangle3d_t) *t);
-
-/** Analyze that triangle vectors and normal vector organize the left triplet
- *
- * @param t triganle
- * @param n normal vector
- * @return value greater than zero if left triplet, less than zero if right triplet, zero if not triplet
- */
-LSP_DSP_LIB_SYMBOL(float, check_triplet3d_tn, const LSP_DSP_LIB_TYPE(triangle3d_t) *t, const LSP_DSP_LIB_TYPE(vector3d_t) *n);
-
-/** Analyze point location relative to the triangle
- *
- * @param t triangle
- * @param p point
- * @return value > 0 if point is candidate to be inside the triangle,
- *         value < 0 if point is candidate to be outside the triangle,
- *         value = 0 if point is on the edge of triangle
- */
-LSP_DSP_LIB_SYMBOL(float, check_point3d_on_triangle_tp, const LSP_DSP_LIB_TYPE(triangle3d_t) *t, const LSP_DSP_LIB_TYPE(point3d_t) *p);
-
-/** Analyze point location relative to the triangle of three points
+/**
+ * Analyze point location relative to the triangle of three points.
+ * All points should be considered being co-planar.
  *
  * @param t array of three triangle points
  * @param p point
- * @return value > 0 if point is candidate to be inside the triangle,
- *         value < 0 if point is candidate to be outside the triangle,
- *         value = 0 if point is on the edge of triangle
+ * @return value > 0 if point is inside of the triangle,
+ *         value < 0 if point is outside of the triangle,
+ *         value = 0 if point is on the edge of the triangle
  */
 LSP_DSP_LIB_SYMBOL(float, check_point3d_on_triangle_pvp, const LSP_DSP_LIB_TYPE(point3d_t) *t, const LSP_DSP_LIB_TYPE(point3d_t) *p);
 
-/** Analyze point location relative to the triangle of three points
+/**
+ * Analyze point location relative to the triangle of three points.
+ * All points should be considered being co-planar.
  *
  * @param p1 triangle point 1
  * @param p2 triangle point 2
  * @param p3 triangle point 3
  * @param p point
- * @return value > 0 if point is candidate to be inside the triangle,
- *         value < 0 if point is candidate to be outside the triangle,
- *         value = 0 if point is on the edge of triangle
+ * @return value > 0 if point is inside of the triangle,
+ *         value < 0 if point is outside of the triangle,
+ *         value = 0 if point is on the edge of the triangle
  */
 LSP_DSP_LIB_SYMBOL(float, check_point3d_on_triangle_p3p, const LSP_DSP_LIB_TYPE(point3d_t) *p1, const LSP_DSP_LIB_TYPE(point3d_t) *p2, const LSP_DSP_LIB_TYPE(point3d_t) *p3, const LSP_DSP_LIB_TYPE(point3d_t) *p);
 
@@ -738,36 +441,11 @@ LSP_DSP_LIB_SYMBOL(size_t, longest_edge3
 
 /** Return the index of longest edge between three points
  *
- * @param p array of points
+ * @param p array of three points (0, 1, 2)
  * @return 0 if edge between points 0 and 1 is longest, 1 if between points 1 and 2, 2 if between ponts 2 and 0
  */
 LSP_DSP_LIB_SYMBOL(size_t, longest_edge3d_pv, const LSP_DSP_LIB_TYPE(point3d_t) *p);
 
-/** Find intersection of ray and triangle
- *
- * @param ip intersection point to store result
- * @param l ray to test intersection
- * @param t pre-calculated triangle to check (with plane equation)
- * @return actual distance between ray start point and intersection point.
- *         If value is less than zero, then there is no intersection
- */
-LSP_DSP_LIB_SYMBOL(float, find_intersection3d_rt, LSP_DSP_LIB_TYPE(point3d_t) *ip, const LSP_DSP_LIB_TYPE(ray3d_t) *l, const LSP_DSP_LIB_TYPE(triangle3d_t) *t);
-
-/** Calculate angle between two vectors
- *
- * @param v1 vector 1
- * @param v2 vector 2
- * @return cosine of angle between two vectors [-1..1]
- */
-LSP_DSP_LIB_SYMBOL(float, calc_angle3d_v2, const LSP_DSP_LIB_TYPE(vector3d_t) *v1, const LSP_DSP_LIB_TYPE(vector3d_t) *v2);
-
-/** Calculate angle between two vectors
- *
- * @param v array of two vectors
- * @return cosine of angle between two vectors [-1..1]
- */
-LSP_DSP_LIB_SYMBOL(float, calc_angle3d_vv, const LSP_DSP_LIB_TYPE(vector3d_t) *v);
-
 /** Calculate normal for triangle described by three points
  *
  * @param n normal
@@ -799,23 +477,6 @@ LSP_DSP_LIB_SYMBOL(void, calc_normal3d_v
  */
 LSP_DSP_LIB_SYMBOL(void, calc_normal3d_vv, LSP_DSP_LIB_TYPE(vector3d_t) *n, const LSP_DSP_LIB_TYPE(vector3d_t) *vv);
 
-/** Move point between two other points: p = p1 + (p2 - p1) * k
- *
- * @param p target to store result
- * @param p1 point 1
- * @param p2 point 2
- * @param k movement
- */
-LSP_DSP_LIB_SYMBOL(void, move_point3d_p2, LSP_DSP_LIB_TYPE(point3d_t) *p, const LSP_DSP_LIB_TYPE(point3d_t) *p1, const LSP_DSP_LIB_TYPE(point3d_t) *p2, float k);
-
-/** Move point between two other points: p = p1 + (p2 - p1) * k
- *
- * @param p point to move
- * @param pv array of two points
- * @param k movement
- */
-LSP_DSP_LIB_SYMBOL(void, move_point3d_pv, LSP_DSP_LIB_TYPE(point3d_t) *p, const LSP_DSP_LIB_TYPE(point3d_t) *pv, float k);
-
 /**
  * Add vector to point
  * @param p point
@@ -848,14 +509,6 @@ LSP_DSP_LIB_SYMBOL(void, add_vector_pvk1
 LSP_DSP_LIB_SYMBOL(void, add_vector_pvk2, LSP_DSP_LIB_TYPE(point3d_t) *p, const LSP_DSP_LIB_TYPE(point3d_t) *sp, const LSP_DSP_LIB_TYPE(vector3d_t) *dv, float k);
 
 /**
- * Compute bounding box around object
- * @param b bounding box object
- * @param p array of object vertexes
- * @param n number of vertexes in object
- */
-LSP_DSP_LIB_SYMBOL(void, calc_bound_box, LSP_DSP_LIB_TYPE(bound_box3d_t) *b, const LSP_DSP_LIB_TYPE(point3d_t) *p, size_t n);
-
-/**
  * Compute plane equation using three points
  * @param v pointer to store plane equation
  * @param p0 point 0
@@ -964,23 +617,6 @@ LSP_DSP_LIB_SYMBOL(float, calc_area_p3,
 LSP_DSP_LIB_SYMBOL(float, calc_area_pv, const LSP_DSP_LIB_TYPE(point3d_t) *pv);
 
 /**
- * Return length of the projection of the point on the line
- * @param p0 projection line point 0
- * @param p1 projection line point 1
- * @param pp projected point
- * @return length of the projection of the point on the line
- */
-LSP_DSP_LIB_SYMBOL(float, projection_length_p2, const LSP_DSP_LIB_TYPE(point3d_t) *p0, const LSP_DSP_LIB_TYPE(point3d_t) *p1, const LSP_DSP_LIB_TYPE(point3d_t) *pp);
-
-/**
- * Return length of the projection of the vector on another vector
- * @param v projection vector
- * @param pv projected vector
- * @return length of the projection of the vector on another vector
- */
-LSP_DSP_LIB_SYMBOL(float, projection_length_v2, const LSP_DSP_LIB_TYPE(vector3d_t) *v, const LSP_DSP_LIB_TYPE(vector3d_t) *pv);
-
-/**
  * Estimate the shortest distance to triangle
  * @param sp projection point
  * @param p0 point 0 of triangle
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/cos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/cos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/cos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/cos.h	2025-08-26 18:15:43.682003718 +0000
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 10 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_DSP_COMMON_PMATH_COS_H_
+#define LSP_PLUG_IN_DSP_COMMON_PMATH_COS_H_
+
+/**
+ * Calculate cosine function: dst[i] = cos(dst[i])
+ *
+ * @param dst destination vector
+ * @param count number of elements
+ */
+LSP_DSP_LIB_SYMBOL(void, cosf1, float *dst, size_t count);
+
+/**
+ * Calculate cosine function: dst[i] = cos(src[i])
+ *
+ * @param dst destination vector
+ * @param src source vector
+ * @param count number of elements
+ */
+LSP_DSP_LIB_SYMBOL(void, cosf2, float *dst, const float *src, size_t count);
+
+/**
+ * Calculate cosine function with generated argument: dst[i] = cos(k*i + p)
+ *
+ * @param dst destination vector
+ * @param k phase step
+ * @param p initial phase
+ * @param count number of elements
+ */
+LSP_DSP_LIB_SYMBOL(void, cosf_kp1, float *dst, float k, float p, size_t count);
+
+
+#endif /* LSP_PLUG_IN_DSP_COMMON_PMATH_COS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/lanczos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/lanczos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/lanczos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/lanczos.h	2025-08-26 18:15:43.682003718 +0000
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 10 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_DSP_COMMON_PMATH_LANCZOS_H_
+#define LSP_PLUG_IN_DSP_COMMON_PMATH_LANCZOS_H_
+
+/**
+ * Calculate lanczos filter response function with generated argument:
+ *
+ *   for each x = PI * (k*i - p)
+ *
+ *            { 1.0                            if fabsf(x) <= 1e-6
+ *   dst[i] = { sinc(x) * sinc(x*a)/(a * x^2)  if fabsf(x) < t and  fabsf(x) >= 1e-6
+ *            { 0.0                            otherwise
+ *
+ * @param dst destination vector
+ * @param src source vector
+ * @param k number of samples per lobe multiplied by PI
+ * @param p shift in lobes multiplied by PI
+ * @param t the number of lobes multiplied by PI
+ * @param a reverse number of lobes
+ * @param count number of elements
+ */
+LSP_DSP_LIB_SYMBOL(void, lanczos1, float *dst, float k, float p, float t, float a, size_t count);
+
+
+
+#endif /* LSP_PLUG_IN_DSP_COMMON_PMATH_SINCSINC_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/sin.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/sin.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/sin.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath/sin.h	2025-08-26 18:15:43.682003718 +0000
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 9 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_DSP_COMMON_PMATH_SIN_H_
+#define LSP_PLUG_IN_DSP_COMMON_PMATH_SIN_H_
+
+/**
+ * Calculate sine function: dst[i] = sin(dst[i])
+ *
+ * @param dst destination vector
+ * @param count number of elements
+ */
+LSP_DSP_LIB_SYMBOL(void, sinf1, float *dst, size_t count);
+
+/**
+ * Calculate sine function: dst[i] = sin(src[i])
+ *
+ * @param dst destination vector
+ * @param src source vector
+ * @param count number of elements
+ */
+LSP_DSP_LIB_SYMBOL(void, sinf2, float *dst, const float *src, size_t count);
+
+/**
+ * Calculate sine function with generated argument: dst[i] = sin(k*i + p)
+ *
+ * @param dst destination vector
+ * @param k phase step
+ * @param p initial phase
+ * @param count number of elements
+ */
+LSP_DSP_LIB_SYMBOL(void, sinf_kp1, float *dst, float k, float p, size_t count);
+
+
+#endif /* LSP_PLUG_IN_DSP_COMMON_PMATH_SIN_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath.h	2025-03-01 12:42:56.772648507 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/common/pmath.h	2025-08-26 18:15:43.682003718 +0000
@@ -25,9 +25,11 @@
 #include <lsp-plug.in/dsp/common/types.h>
 
 #include <lsp-plug.in/dsp/common/pmath/abs_vv.h>
+#include <lsp-plug.in/dsp/common/pmath/cos.h>
 #include <lsp-plug.in/dsp/common/pmath/exp.h>
 #include <lsp-plug.in/dsp/common/pmath/fmop_kx.h>
 #include <lsp-plug.in/dsp/common/pmath/fmop_vv.h>
+#include <lsp-plug.in/dsp/common/pmath/lanczos.h>
 #include <lsp-plug.in/dsp/common/pmath/log.h>
 #include <lsp-plug.in/dsp/common/pmath/lramp.h>
 #include <lsp-plug.in/dsp/common/pmath/minmax.h>
@@ -35,6 +37,7 @@
 #include <lsp-plug.in/dsp/common/pmath/op_kx.h>
 #include <lsp-plug.in/dsp/common/pmath/op_vv.h>
 #include <lsp-plug.in/dsp/common/pmath/pow.h>
+#include <lsp-plug.in/dsp/common/pmath/sin.h>
 #include <lsp-plug.in/dsp/common/pmath/sqr.h>
 #include <lsp-plug.in/dsp/common/pmath/sqrt.h>
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/version.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/version.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/version.h	2025-03-01 12:42:56.772648507 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/lsp-plug.in/dsp/version.h	2025-08-26 18:15:43.682003718 +0000
@@ -25,7 +25,7 @@
 // Define version of headers
 #define LSP_DSP_LIB_MAJOR           1
 #define LSP_DSP_LIB_MINOR           0
-#define LSP_DSP_LIB_MICRO           29
+#define LSP_DSP_LIB_MICRO           31
 
 #if defined(__WINDOWS__) || defined(__WIN32__) || defined(__WIN64__) || defined(_WIN64) || defined(_WIN32) || defined(__WINNT) || defined(__WINNT__)
     #define LSP_DSP_LIB_EXPORT_MODIFIER     __declspec(dllexport)
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/msmatrix.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/msmatrix.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/msmatrix.h	2025-03-01 12:42:56.780648458 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/msmatrix.h	2025-08-26 18:15:43.690003640 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -40,7 +40,7 @@ namespace lsp
         void lr_to_ms(float *m, float *s, const float *l, const float *r, size_t count)
         {
             ARCH_AARCH64_ASM(
-                __ASM_EMIT("ldp         q24, q25, [%[HALF]]")           // v24  = 0.5, v25 = 0.5
+                __ASM_EMIT("ldr         q24, [%[HALF]]")                // v24  = 0.5
                 // x16 blocks
                 __ASM_EMIT("subs        %[count], %[count], #16")
                 __ASM_EMIT("b.lo        2f")
@@ -58,13 +58,13 @@ namespace lsp
                 __ASM_EMIT("fsub        v22.4s, v2.4s, v6.4s")
                 __ASM_EMIT("fsub        v23.4s, v3.4s, v7.4s")
                 __ASM_EMIT("fmul        v0.4s, v16.4s, v24.4s")         // v0   = (l + r)/2
-                __ASM_EMIT("fmul        v1.4s, v17.4s, v25.4s")
+                __ASM_EMIT("fmul        v1.4s, v17.4s, v24.4s")
                 __ASM_EMIT("fmul        v2.4s, v18.4s, v24.4s")
-                __ASM_EMIT("fmul        v3.4s, v19.4s, v25.4s")
+                __ASM_EMIT("fmul        v3.4s, v19.4s, v24.4s")
                 __ASM_EMIT("fmul        v4.4s, v20.4s, v24.4s")         // v4   = (l - r)/2
-                __ASM_EMIT("fmul        v5.4s, v21.4s, v25.4s")
+                __ASM_EMIT("fmul        v5.4s, v21.4s, v24.4s")
                 __ASM_EMIT("fmul        v6.4s, v22.4s, v24.4s")
-                __ASM_EMIT("fmul        v7.4s, v23.4s, v25.4s")
+                __ASM_EMIT("fmul        v7.4s, v23.4s, v24.4s")
                 __ASM_EMIT("stp         q0, q1, [%[m], #0x00]")
                 __ASM_EMIT("stp         q2, q3, [%[m], #0x20]")
                 __ASM_EMIT("stp         q4, q5, [%[s], #0x00]")
@@ -86,9 +86,9 @@ namespace lsp
                 __ASM_EMIT("fsub        v20.4s, v0.4s, v4.4s")          // v20  = l - r
                 __ASM_EMIT("fsub        v21.4s, v1.4s, v5.4s")
                 __ASM_EMIT("fmul        v0.4s, v16.4s, v24.4s")         // v0   = (l + r)/2
-                __ASM_EMIT("fmul        v1.4s, v17.4s, v25.4s")
+                __ASM_EMIT("fmul        v1.4s, v17.4s, v24.4s")
                 __ASM_EMIT("fmul        v4.4s, v20.4s, v24.4s")         // v4   = (l - r)/2
-                __ASM_EMIT("fmul        v5.4s, v21.4s, v25.4s")
+                __ASM_EMIT("fmul        v5.4s, v21.4s, v24.4s")
                 __ASM_EMIT("stp         q0, q1, [%[m], #0x00]")
                 __ASM_EMIT("stp         q4, q5, [%[s], #0x00]")
                 __ASM_EMIT("sub         %[count], %[count], #8")
@@ -142,7 +142,7 @@ namespace lsp
                   "v4", "v5", "v6", "v7",
                   "v16", "v17", "v18", "v19",
                   "v20", "v21", "v22", "v23",
-                  "v24", "v25"
+                  "v24"
             );
         }
 
@@ -238,7 +238,7 @@ namespace lsp
         }
 
         #define LR_TO_PART(OP) \
-                __ASM_EMIT("ldp         q24, q25, [%[HALF]]")           /* v24  = 0.5, v25 = 0.5 */ \
+                __ASM_EMIT("ldr         q24, [%[HALF]]")                /* v24  = 0.5 */ \
                 /* x16 blocks */ \
                 __ASM_EMIT("subs        %[count], %[count], #16") \
                 __ASM_EMIT("b.lo        2f") \
@@ -252,9 +252,9 @@ namespace lsp
                 __ASM_EMIT(OP "         v18.4s, v2.4s, v6.4s") \
                 __ASM_EMIT(OP "         v19.4s, v3.4s, v7.4s") \
                 __ASM_EMIT("fmul        v0.4s, v16.4s, v24.4s")         /* v0   = (l op r)/2 */ \
-                __ASM_EMIT("fmul        v1.4s, v17.4s, v25.4s") \
+                __ASM_EMIT("fmul        v1.4s, v17.4s, v24.4s") \
                 __ASM_EMIT("fmul        v2.4s, v18.4s, v24.4s") \
-                __ASM_EMIT("fmul        v3.4s, v19.4s, v25.4s") \
+                __ASM_EMIT("fmul        v3.4s, v19.4s, v24.4s") \
                 __ASM_EMIT("stp         q0, q1, [%[dst], #0x00]") \
                 __ASM_EMIT("stp         q2, q3, [%[dst], #0x20]") \
                 __ASM_EMIT("subs        %[count], %[count], #16") \
@@ -271,7 +271,7 @@ namespace lsp
                 __ASM_EMIT(OP "         v16.4s, v0.4s, v4.4s")          /* v16  = l op r */ \
                 __ASM_EMIT(OP "         v17.4s, v1.4s, v5.4s") \
                 __ASM_EMIT("fmul        v0.4s, v16.4s, v24.4s")         /* v0   = (l op r)/2 */ \
-                __ASM_EMIT("fmul        v1.4s, v17.4s, v25.4s") \
+                __ASM_EMIT("fmul        v1.4s, v17.4s, v24.4s") \
                 __ASM_EMIT("stp         q0, q1, [%[dst], #0x00]") \
                 __ASM_EMIT("sub         %[count], %[count], #8") \
                 __ASM_EMIT("add         %[l], %[l], #0x20") \
@@ -318,7 +318,7 @@ namespace lsp
                   "v0", "v1", "v2", "v3",
                   "v4", "v5", "v6", "v7",
                   "v16", "v17", "v18", "v19",
-                  "v24", "v25"
+                  "v24"
             );
         }
 
@@ -333,7 +333,7 @@ namespace lsp
                   "v0", "v1", "v2", "v3",
                   "v4", "v5", "v6", "v7",
                   "v16", "v17", "v18", "v19",
-                  "v24", "v25"
+                  "v24"
             );
         }
 
@@ -429,7 +429,7 @@ namespace lsp
         }
 
         #undef MS_TO_PART
-    }
-}
+    } /* namespace asimd */
+} /* namespace lsp */
 
 #endif /* PRIVATE_DSP_ARCH_AARCH64_ASIMD_MSMATRIX_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/cos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/cos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/cos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/cos.h	2025-08-26 18:15:43.694003602 +0000
@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_COS_H_
+#define PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_COS_H_
+
+#ifndef PRIVATE_DSP_ARCH_AARCH64_ASIMD_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_AARCH64_ASIMD_IMPL */
+
+#include <private/dsp/arch/aarch64/asimd/pmath/sin.h>
+
+namespace lsp
+{
+    namespace asimd
+    {
+        void cosf1(float *dst, size_t count)
+        {
+            ARCH_AARCH64_ASM(
+                __ASM_EMIT("ldp             q16, q17, [%[S2C], #0x00]") /* v16  = PI/2, v17 = PI */
+                __ASM_EMIT("ldp             q18, q19, [%[S2C], #0x20]") /* v18  = 1/(2*PI), v19 = C0 */
+                __ASM_EMIT("ldp             q20, q21, [%[S2C], #0x40]") /* v20  = C1, v21 = C2 */
+                __ASM_EMIT("ldp             q22, q23, [%[S2C], #0x60]") /* v22  = C3, v23 = C4 */
+                // x16 blocks
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("b.lo            2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("ldp             q0, q1, [%[dst], #0x00]")   // v0   = x0, v1 = x1
+                __ASM_EMIT("ldp             q2, q3, [%[dst], #0x20]")   // v2   = x2, v3 = x3
+                __ASM_EMIT("fsub            v0.4s, v17.4s, v0.4s")      // v0   = PI/2 - x0 + PI/2
+                __ASM_EMIT("fsub            v1.4s, v17.4s, v1.4s")      // v1   = PI/2 - x1 + PI/2
+                __ASM_EMIT("fsub            v2.4s, v17.4s, v2.4s")      // v2   = PI/2 - x2 + PI/2
+                __ASM_EMIT("fsub            v3.4s, v17.4s, v3.4s")      // v3   = PI/2 - x3 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("stp             q2, q3, [%[dst], #0x20]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x40")
+                __ASM_EMIT("b.hs            1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("adds            %[count], %[count], #8")
+                __ASM_EMIT("b.lt            4f")
+                __ASM_EMIT("ldp             q0, q1, [%[dst], #0x00]")   // v0   = x0, v1 = x1
+                __ASM_EMIT("fsub            v0.4s, v17.4s, v0.4s")      // v0   = PI/2 - x0 + PI/2
+                __ASM_EMIT("fsub            v1.4s, v17.4s, v1.4s")      // v1   = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("sub             %[count], %[count], #8")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x20")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.lt            6f")
+                __ASM_EMIT("ldr             q0, [%[dst], #0x00]")       // v0   = x0
+                __ASM_EMIT("fsub            v0.4s, v17.4s, v0.4s")      // v0   = PI/2 - x0 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], %[count], #4")
+                __ASM_EMIT("str             q0, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x10")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.ls            14f")
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            8f")
+                __ASM_EMIT("ld1             {v0.s}[0], [%[dst]]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x04")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            10f")
+                __ASM_EMIT("ld1             {v0.d}[1], [%[dst]]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("fsub            v0.4s, v17.4s, v0.4s")      // v0   = PI/2 - x0 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            12f")
+                __ASM_EMIT("sub             %[dst], %[dst], #0x04")
+                __ASM_EMIT("st1             {v0.s}[0], [%[dst]]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x04")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            14f")
+                __ASM_EMIT("st1             {v0.d}[1], [%[dst]]")
+                // End
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "r" (&sinf_const[0])
+                : "cc", "memory",
+                  "v0", "v1", "v2", "v3",
+                  "v4", "v5", "v6", "v7",
+                  "v8", "v9", "v10", "v11",
+                  "v12", "v13", "v14", "v15",
+                  "v16", "v17", "v18", "v19",
+                  "v20", "v21", "v22", "v23"
+            );
+        }
+
+        void cosf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_AARCH64_ASM(
+                __ASM_EMIT("ldp             q16, q17, [%[S2C], #0x00]") /* v16  = PI/2, v17 = PI */
+                __ASM_EMIT("ldp             q18, q19, [%[S2C], #0x20]") /* v18  = 1/(2*PI), v19 = C0 */
+                __ASM_EMIT("ldp             q20, q21, [%[S2C], #0x40]") /* v20  = C1, v21 = C2 */
+                __ASM_EMIT("ldp             q22, q23, [%[S2C], #0x60]") /* v22  = C3, v23 = C4 */
+                // x16 blocks
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("b.lo            2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("ldp             q0, q1, [%[src], #0x00]")   // v0   = x0, v1 = x1
+                __ASM_EMIT("ldp             q2, q3, [%[src], #0x20]")   // v2   = x2, v3 = x3
+                __ASM_EMIT("fsub            v0.4s, v17.4s, v0.4s")      // v0   = PI/2 - x0 + PI/2
+                __ASM_EMIT("fsub            v1.4s, v17.4s, v1.4s")      // v1   = PI/2 - x1 + PI/2
+                __ASM_EMIT("fsub            v2.4s, v17.4s, v2.4s")      // v2   = PI/2 - x2 + PI/2
+                __ASM_EMIT("fsub            v3.4s, v17.4s, v3.4s")      // v3   = PI/2 - x3 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("stp             q2, q3, [%[dst], #0x20]")
+                __ASM_EMIT("add             %[src], %[src], #0x40")
+                __ASM_EMIT("add             %[dst], %[dst], #0x40")
+                __ASM_EMIT("b.hs            1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("adds            %[count], %[count], #8")
+                __ASM_EMIT("b.lt            4f")
+                __ASM_EMIT("ldp             q0, q1, [%[src], #0x00]")   // v0   = x0, v1 = x1
+                __ASM_EMIT("fsub            v0.4s, v17.4s, v0.4s")      // v0   = PI/2 - x0 + PI/2
+                __ASM_EMIT("fsub            v1.4s, v17.4s, v1.4s")      // v1   = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("sub             %[count], %[count], #8")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[src], %[src], #0x20")
+                __ASM_EMIT("add             %[dst], %[dst], #0x20")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.lt            6f")
+                __ASM_EMIT("ldr             q0, [%[src], #0x00]")       // v0   = x0
+                __ASM_EMIT("fsub            v0.4s, v17.4s, v0.4s")      // v0   = PI/2 - x0 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], %[count], #4")
+                __ASM_EMIT("str             q0, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[src], %[src], #0x10")
+                __ASM_EMIT("add             %[dst], %[dst], #0x10")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.ls            14f")
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            8f")
+                __ASM_EMIT("ld1             {v0.s}[0], [%[src]]")
+                __ASM_EMIT("add             %[src], %[src], #0x04")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            10f")
+                __ASM_EMIT("ld1             {v0.d}[1], [%[src]]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("fsub            v0.4s, v17.4s, v0.4s")      // v0   = PI/2 - x0 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            12f")
+                __ASM_EMIT("st1             {v0.s}[0], [%[dst]]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x04")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            14f")
+                __ASM_EMIT("st1             {v0.d}[1], [%[dst]]")
+                // End
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "r" (&sinf_const[0])
+                : "cc", "memory",
+                  "v0", "v1", "v2", "v3",
+                  "v4", "v5", "v6", "v7",
+                  "v8", "v9", "v10", "v11",
+                  "v12", "v13", "v14", "v15",
+                  "v16", "v17", "v18", "v19",
+                  "v20", "v21", "v22", "v23"
+            );
+        }
+
+        void cosf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_AARCH64_ASM(
+                __ASM_EMIT("ldp             q16, q17, [%[S2C], #0x00]")     /* v16  = PI/2, v17 = PI */
+                __ASM_EMIT("ldp             q18, q19, [%[S2C], #0x20]")     /* v18  = 1/(2*PI), v19 = C0 */
+                __ASM_EMIT("ldp             q20, q21, [%[S2C], #0x40]")     /* v20  = C1, v21 = C2 */
+                __ASM_EMIT("ldp             q22, q23, [%[S2C], #0x60]")     /* v22  = C3, v23 = C4 */
+                __ASM_EMIT("ld1r            {v28.4s}, [%[k]]")              /* v28  = k k k k */
+                __ASM_EMIT("ld1r            {v29.4s}, [%[p]]")              /* v29  = p p p p */
+                __ASM_EMIT("ldp             q24, q25, [%[S2KP], #0x00]")    /* v24  = 0 1 2 3, v25 = 4 5 6 7 */
+                __ASM_EMIT("ldp             q26, q27, [%[S2KP], #0x20]")    /* v26  = 8 8 8 8, v27 = 4 4 4 4 */
+                __ASM_EMIT("fsub            v29.4s, v17.4s, v29.4s")        /* v29  = PI/2 - p + PI/2 ... */
+                // x16 blocks
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("b.lo            2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*x0
+                __ASM_EMIT("fmul            v1.4s, v28.4s, v25.4s")         // v1   = k*x1
+                __ASM_EMIT("fadd            v24.4s, v24.4s, v26.4s")        // v24  = i0 + 8
+                __ASM_EMIT("fadd            v25.4s, v25.4s, v26.4s")        // v25  = i1 + 8
+                __ASM_EMIT("fsub            v0.4s, v29.4s, v0.4s")          // v0   = PI/2 - (k*x0 + p) + PI/2
+                __ASM_EMIT("fsub            v1.4s, v29.4s, v1.4s")          // v1   = PI/2 - (k*x1 + p) + PI/2
+                __ASM_EMIT("fmul            v2.4s, v28.4s, v24.4s")         // v2   = k*x2
+                __ASM_EMIT("fmul            v3.4s, v28.4s, v25.4s")         // v3   = k*x3
+                __ASM_EMIT("fadd            v24.4s, v24.4s, v26.4s")        // v24  = i0 + 8
+                __ASM_EMIT("fadd            v25.4s, v25.4s, v26.4s")        // v25  = i1 + 8
+                __ASM_EMIT("fsub            v2.4s, v29.4s, v2.4s")          // v2   = PI/2 - (k*x2 + p) + PI/2
+                __ASM_EMIT("fsub            v3.4s, v29.4s, v3.4s")          // v3   = PI/2 - (k*x3 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("stp             q2, q3, [%[dst], #0x20]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x40")
+                __ASM_EMIT("b.hs            1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("adds            %[count], %[count], #8")
+                __ASM_EMIT("b.lt            4f")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*x0
+                __ASM_EMIT("fmul            v1.4s, v28.4s, v25.4s")         // v1   = k*x1
+                __ASM_EMIT("fadd            v24.4s, v24.4s, v26.4s")        // v24  = i0 + 8
+                __ASM_EMIT("fadd            v25.4s, v25.4s, v26.4s")        // v25  = i1 + 8
+                __ASM_EMIT("fsub            v0.4s, v29.4s, v0.4s")          // v0   = PI/2 - (k*x0 + p) + PI/2
+                __ASM_EMIT("fsub            v1.4s, v29.4s, v1.4s")          // v1   = PI/2 - (k*x1 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("sub             %[count], %[count], #8")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x20")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.lt            6f")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*x0
+                __ASM_EMIT("fadd            v24.4s, v24.4s, v27.4s")        // v24  = i0 + 4
+                __ASM_EMIT("fsub            v0.4s, v29.4s, v0.4s")          // v0   = PI/2 - (k*x0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], %[count], #4")
+                __ASM_EMIT("str             q0, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x10")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.ls            10f")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*x0
+                __ASM_EMIT("fsub            v0.4s, v29.4s, v0.4s")          // v0   = PI/2 - (k*x0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            8f")
+                __ASM_EMIT("st1             {v0.s}[0], [%[dst]]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x04")
+                __ASM_EMIT("ext             v0.16b, v0.16b, v0.16b, #4")    // v0   = S1 S2 S3 S0
+                __ASM_EMIT("8:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            10f")
+                __ASM_EMIT("st1             {v0.d}[0], [%[dst]]")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [k] "r" (&k),
+                  [p] "r" (&p),
+                  [S2C] "r" (&sinf_const[0]),
+                  [S2KP] "r" (&kp_gen_const[0])
+                : "cc", "memory",
+                  "v0", "v1", "v2", "v3",
+                  "v4", "v5", "v6", "v7",
+                  "v8", "v9", "v10", "v11",
+                  "v12", "v13", "v14", "v15",
+                  "v16", "v17", "v18", "v19",
+                  "v20", "v21", "v22", "v23",
+                  "v24", "v25", "v26", "v27",
+                  "v28", "v29"
+            );
+        }
+
+    } /* namespace asimd */
+} /* namespace lsp */
+
+#endif /* PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_COS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/lanczos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/lanczos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/lanczos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/lanczos.h	2025-08-26 18:15:43.694003602 +0000
@@ -0,0 +1,204 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 22 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_LANCZOS_H_
+#define PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_LANCZOS_H_
+
+#ifndef PRIVATE_DSP_ARCH_AARCH64_ASIMD_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_AARCH64_ASIMD_IMPL */
+
+#include <private/dsp/arch/aarch64/asimd/pmath/sin.h>
+
+namespace lsp
+{
+    namespace asimd
+    {
+        IF_ARCH_AARCH64(
+            static const uint32_t lanczos_const[] __lsp_aligned16 =
+            {
+                LSP_DSP_VEC4(0x38d1b717),                   // +0x00: Sinc threshold = 1e-4
+                LSP_DSP_VEC4(0x3f800000),                   // +0x10: 1.0
+            };
+        )
+
+        typedef struct lanczos_gen_t
+        {
+            float x1[8];                        // +0x00: Computed X1
+            float n[8];                         // +0x20: Numerator
+        } lanczos_gen_t;
+
+        #define LANCZOS_GEN_FUNC_X8 \
+            /* v0 = x1[0] */ \
+            /* v1 = x1[1] */ \
+            __ASM_EMIT("fmul            v2.4s, v0.4s, v27.4s")          /* v2   = x2 = x1*a */ \
+            __ASM_EMIT("fmul            v3.4s, v1.4s, v27.4s") \
+            __ASM_EMIT("fabs            v4.4s, v0.4s")                  /* v4   = fabsf(x1) */ \
+            __ASM_EMIT("fabs            v5.4s, v1.4s") \
+            __ASM_EMIT("fmul            v8.4s, v0.4s, v2.4s")           /* v8   = x1*x2 */ \
+            __ASM_EMIT("fmul            v9.4s, v1.4s, v3.4s") \
+            __ASM_EMIT("frecpe          v10.4s, v8.4s")                 /* v10  = s2 */ \
+            __ASM_EMIT("frecpe          v11.4s, v9.4s") \
+            __ASM_EMIT("frecps          v12.4s, v10.4s, v8.4s")         /* v12  = (2 - R*s2) */ \
+            __ASM_EMIT("frecps          v13.4s, v11.4s, v9.4s") \
+            __ASM_EMIT("fmul            v10.4s, v12.4s, v10.4s")        /* v10  = s2' = s2 * (2 - R*s2) */ \
+            __ASM_EMIT("fmul            v11.4s, v13.4s, v11.4s") \
+            __ASM_EMIT("frecps          v12.4s, v10.4s, v8.4s")         /* v12  = (2 - R*s2') */ \
+            __ASM_EMIT("frecps          v13.4s, v11.4s, v9.4s") \
+            __ASM_EMIT("fmul            v8.4s, v12.4s, v10.4s")         /* v8   = n = 1/(x1*x2) */  \
+            __ASM_EMIT("fmul            v9.4s, v13.4s, v11.4s") \
+            __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")          /* v0   = x1 + PI/2 */ \
+            __ASM_EMIT("fadd            v1.4s, v1.4s, v16.4s") \
+            __ASM_EMIT("fadd            v2.4s, v2.4s, v16.4s")          /* v2   = x2 + PI/2 */ \
+            __ASM_EMIT("fadd            v3.4s, v3.4s, v16.4s") \
+            __ASM_EMIT("stp             q4, q5, [%[state], 0x00]")      /* save fabfs(x1) */ \
+            __ASM_EMIT("stp             q8, q9, [%[state], 0x20]")      /* save n */ \
+            SINF_X_PLUS_PI_2_CORE_X16 \
+            /* v0   = sinf(x1[0]), v1 = sinf(x1[1]) */ \
+            /* v2   = sinf(x2[0]), v3 = sinf(x2[1]) */ \
+            __ASM_EMIT("ldp             q4, q5, [%[state], 0x00]")      /* v4   = fabsf(x1) */ \
+            __ASM_EMIT("ldp             q6, q7, [%[state], 0x20]")      /* v6   = n = 1/(x1*x2) */ \
+            __ASM_EMIT("ldp             q8, q9, [%[LC]]")               /* v8   = 1e-4, v9 = 1.0 */ \
+            __ASM_EMIT("fmul            v0.4s, v0.4s, v2.4s")           /* v0   = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("fmul            v1.4s, v1.4s, v3.4s") \
+            __ASM_EMIT("fcmge           v2.4s, v4.4s, v8.4s")           /* v2   = [ fabsf(x1) >= 1e-4 ] */ \
+            __ASM_EMIT("fcmge           v3.4s, v5.4s, v8.4s") \
+            __ASM_EMIT("fmul            v0.4s, v0.4s, v6.4s")           /* v6   = sinf(x1)*sinf(x2)/(x1*x2) */ \
+            __ASM_EMIT("fmul            v1.4s, v1.4s, v7.4s") \
+            __ASM_EMIT("fcmgt           v4.4s, v26.4s, v4.4s")          /* v4   = [ fabsf(x1) < t ] */ \
+            __ASM_EMIT("fcmgt           v5.4s, v26.4s, v5.4s") \
+            __ASM_EMIT("bif             v0.16b, v9.16b, v2.16b")        /* v0   = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("bif             v1.16b, v9.16b, v3.16b") \
+            __ASM_EMIT("and             v0.16b, v0.16b, v4.16b")        /* v0   = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */ \
+            __ASM_EMIT("and             v1.16b, v1.16b, v5.16b")
+
+        #define LANCZOS_GEN_FUNC_X4 \
+            /* v0 = x1 */ \
+            __ASM_EMIT("fmul            v1.4s, v0.4s, v27.4s")          /* v1   = x2 = x1*a */ \
+            __ASM_EMIT("fabs            v2.4s, v0.4s")                  /* v2   = fabsf(x1) */ \
+            __ASM_EMIT("fmul            v3.4s, v0.4s, v1.4s")           /* v3   = x1*x2 */ \
+            __ASM_EMIT("frecpe          v10.4s, v3.4s")                 /* v10  = s2 */ \
+            __ASM_EMIT("frecps          v12.4s, v10.4s, v3.4s")         /* v12  = (2 - R*s2) */ \
+            __ASM_EMIT("fmul            v10.4s, v12.4s, v10.4s")        /* v10  = s2' = s2 * (2 - R*s2) */ \
+            __ASM_EMIT("frecps          v12.4s, v10.4s, v3.4s")         /* v12  = (2 - R*s2') */ \
+            __ASM_EMIT("fmul            v3.4s, v12.4s, v10.4s")         /* v3   = n = 1/(x1*x2) */  \
+            __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")          /* v0   = x1 + PI/2 */ \
+            __ASM_EMIT("fadd            v1.4s, v1.4s, v16.4s")          /* v1   = x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X8 \
+            /* v0   = sinf(x1), v1 = sinf(x2) */ \
+            __ASM_EMIT("ldp             q8, q9, [%[LC]]")               /* v8   = 1e-4, v9 = 1.0 */ \
+            __ASM_EMIT("fmul            v0.4s, v0.4s, v1.4s")           /* v0   = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("fcmge           v4.4s, v2.4s, v8.4s")           /* v4   = [ fabsf(x1) >= 1e-4 ] */ \
+            __ASM_EMIT("fmul            v0.4s, v0.4s, v3.4s")           /* v0   = sinf(x1)*sinf(x2)/(x1*x2) */ \
+            __ASM_EMIT("fcmgt           v5.4s, v26.4s, v2.4s")          /* v5   = [ fabsf(x1) < t ] */ \
+            __ASM_EMIT("bif             v0.16b, v9.16b, v4.16b")        /* v0   = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("and             v0.16b, v0.16b, v5.16b")        /* v0   = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+
+        void lanczos1(float *dst, float k, float p, float t, float a, size_t count)
+        {
+            IF_ARCH_AARCH64(
+                lanczos_gen_t state;
+            );
+            ARCH_AARCH64_ASM(
+                __ASM_EMIT("ldp             q16, q17, [%[S2C], #0x00]")     /* v16  = PI/2, v17 = PI */
+                __ASM_EMIT("ldp             q18, q19, [%[S2C], #0x20]")     /* v18  = 1/(2*PI), v19 = C0 */
+                __ASM_EMIT("ldp             q20, q21, [%[S2C], #0x40]")     /* v20  = C1, v21 = C2 */
+                __ASM_EMIT("ldp             q22, q23, [%[S2C], #0x60]")     /* v22  = C3, v23 = C4 */
+                __ASM_EMIT("ld1r            {v24.4s}, [%[k]]")              /* v24  = k */
+                __ASM_EMIT("ld1r            {v25.4s}, [%[p]]")              /* v25  = p */
+                __ASM_EMIT("ld1r            {v26.4s}, [%[t]]")              /* v26  = t */
+                __ASM_EMIT("ld1r            {v27.4s}, [%[a]]")              /* v27  = a */
+                __ASM_EMIT("ldp             q28, q29, [%[S2KP], #0x00]")    /* v28  = i0 = 0 1 2 3, v29 = i1 = 4 5 6 7 */
+                __ASM_EMIT("ldp             q30, q31, [%[S2KP], #0x20]")    /* v30  = s0 = 8 8 8 8, v31 = s1 = 4 4 4 4 */
+                // x8 blocks
+                __ASM_EMIT("subs            %[count], %[count], #8")
+                __ASM_EMIT("b.lo            2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*i0
+                __ASM_EMIT("fmul            v1.4s, v29.4s, v24.4s")         // v1   = k*i1
+                __ASM_EMIT("fadd            v28.4s, v28.4s, v30.4s")        // v28  = i0 + step
+                __ASM_EMIT("fadd            v29.4s, v29.4s, v30.4s")        // v29  = i1 + step
+                __ASM_EMIT("fsub            v0.4s, v0.4s, v25.4s")          // v0   = k*i0 - p
+                __ASM_EMIT("fsub            v1.4s, v1.4s, v25.4s")          // v1   = k*i1 - p
+                LANCZOS_GEN_FUNC_X8
+                __ASM_EMIT("subs            %[count], %[count], #8")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x20")
+                __ASM_EMIT("b.hs            1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.lt            4f")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*i0
+                __ASM_EMIT("fadd            v28.4s, v28.4s, v31.4s")        // v28  = i0 + step
+                __ASM_EMIT("fsub            v0.4s, v0.4s, v25.4s")          // v0   = k*i0 - p
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("sub             %[count], %[count], #4")
+                __ASM_EMIT("str             q0, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x10")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.ls            8f")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*i0
+                __ASM_EMIT("fsub            v0.4s, v0.4s, v25.4s")          // v0   = k*i0 - p
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            6f")
+                __ASM_EMIT("st1             {v0.s}[0], [%[dst]]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x04")
+                __ASM_EMIT("ext             v0.16b, v0.16b, v0.16b, #4")    // v0   = S1 S2 S3 S0
+                __ASM_EMIT("6:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            8f")
+                __ASM_EMIT("st1             {v0.d}[0], [%[dst]]")
+                // End
+                __ASM_EMIT("8:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [k] "r" (&k),
+                  [p] "r" (&p),
+                  [t] "r" (&t),
+                  [a] "r" (&a),
+                  [S2C] "r" (&sinf_const[0]),
+                  [S2KP] "r" (&kp_gen_const[0]),
+                  [LC] "r" (&lanczos_const[0]),
+                  [state] "r" (&state)
+                : "cc", "memory",
+                  "v0", "v1", "v2", "v3",
+                  "v4", "v5", "v6", "v7",
+                  "v8", "v9", "v10", "v11",
+                  "v12", "v13", "v14", "v15",
+                  "v16", "v17", "v18", "v19",
+                  "v20", "v21", "v22", "v23",
+                  "v24", "v25", "v26", "v27",
+                  "v28", "v29", "v30", "v31"
+            );
+        }
+
+    } /* namespace asimd */
+} /* namespace lsp */
+
+
+
+
+#endif /* PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_LANCZOS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/sin.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/sin.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/sin.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath/sin.h	2025-08-26 18:15:43.694003602 +0000
@@ -0,0 +1,502 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 13 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_SIN_H_
+#define PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_SIN_H_
+
+#ifndef PRIVATE_DSP_ARCH_AARCH64_ASIMD_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_AARCH64_ASIMD_IMPL */
+
+namespace lsp
+{
+    namespace asimd
+    {
+        IF_ARCH_AARCH64(
+            static const float kp_gen_const[] __lsp_aligned16 =
+            {
+                0.0f, 1.0f, 2.0f, 3.0f,         // +0x00: Initial values
+                4.0f, 5.0f, 6.0f, 7.0f,
+                LSP_DSP_VEC4(8.0),              // +0x20: Step x8
+                LSP_DSP_VEC4(4.0),              // +0x30: Step x4
+            };
+
+            static const uint32_t sinf_const[] __lsp_aligned16 =
+            {
+                LSP_DSP_VEC4(0x3fc90fdb),       // +0x000:  PI/2
+                LSP_DSP_VEC4(0x40490fdb),       // +0x010:  PI
+                LSP_DSP_VEC4(0x3e22f983),       // +0x020:  1/(2*PI)
+                LSP_DSP_VEC4(0xb2d7322b),       // +0x030:  C0 = -1/11! = -2.50521083854e-08
+                LSP_DSP_VEC4(0x3638ef1d),       // +0x040:  C1 = 1/9! = 2.7557319224e-06
+                LSP_DSP_VEC4(0xb9500d01),       // +0x050:  C2 = -1/7! = -0.000198412698413
+                LSP_DSP_VEC4(0x3c088889),       // +0x060:  C3 = 1/5! = 0.00833333333333
+                LSP_DSP_VEC4(0xbe2aaaab),       // +0x070:  C4 = -1/3! = -0.166666666667
+            };
+        )
+
+        #define SINF_X_PLUS_PI_2_CORE_X16 \
+            /* v0   = X0 = x0 + PI/2 */ \
+            /* v1   = X1 = x1 + PI/2 */ \
+            /* v2   = X2 = x2 + PI/2 */ \
+            /* v3   = X3 = x3 + PI/2 */ \
+            /* v16  = PI/2 */ \
+            /* v17  = PI */ \
+            /* v18  = 1/(2*PI) */ \
+            /* v19  = C0 */ \
+            /* v20  = C1 */ \
+            /* v21  = C2 */ \
+            /* v22  = C3 */ \
+            /* v23  = C4 */ \
+            __ASM_EMIT("fmul            v4.4s, v0.4s, v18.4s")          /* v4   = x / (2*PI) */ \
+            __ASM_EMIT("fmul            v5.4s, v1.4s, v18.4s") \
+            __ASM_EMIT("fmul            v6.4s, v2.4s, v18.4s") \
+            __ASM_EMIT("fmul            v7.4s, v3.4s, v18.4s") \
+            __ASM_EMIT("fcvtms          v8.4s, v4.4s")                  /* v8   = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("fcvtms          v9.4s, v5.4s") \
+            __ASM_EMIT("fcvtms          v10.4s, v6.4s") \
+            __ASM_EMIT("fcvtms          v11.4s, v7.4s") \
+            __ASM_EMIT("fadd            v12.4s, v17.4s, v17.4s")        /* v12  = 2*PI */ \
+            __ASM_EMIT("scvtf           v8.4s, v8.4s")                  /* v8   = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("scvtf           v9.4s, v9.4s") \
+            __ASM_EMIT("scvtf           v10.4s, v10.4s") \
+            __ASM_EMIT("scvtf           v11.4s, v11.4s") \
+            __ASM_EMIT("fmls            v0.4s, v8.4s, v12.4s")          /* v0   = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("fmls            v1.4s, v9.4s, v12.4s") \
+            __ASM_EMIT("fmls            v2.4s, v10.4s, v12.4s") \
+            __ASM_EMIT("fmls            v3.4s, v11.4s, v12.4s") \
+            __ASM_EMIT("fadd            v12.4s, v16.4s, v17.4s")        /* v12  = 3*PI/2 */ \
+            __ASM_EMIT("fcmge           v4.4s, v0.4s, v17.4s")          /* v4   = [ Y >= PI ] */ \
+            __ASM_EMIT("fcmge           v5.4s, v1.4s, v17.4s") \
+            __ASM_EMIT("fcmge           v6.4s, v2.4s, v17.4s") \
+            __ASM_EMIT("fcmge           v7.4s, v3.4s, v17.4s") \
+            __ASM_EMIT("fsub            v8.4s, v12.4s, v0.4s")          /* v8   = 3*PI/2 - Y */ \
+            __ASM_EMIT("fsub            v9.4s, v12.4s, v1.4s") \
+            __ASM_EMIT("fsub            v10.4s, v12.4s, v2.4s") \
+            __ASM_EMIT("fsub            v11.4s, v12.4s, v3.4s") \
+            __ASM_EMIT("fsub            v0.4s, v0.4s, v16.4s")          /* v0   = Y - PI/2 */ \
+            __ASM_EMIT("fsub            v1.4s, v1.4s, v16.4s") \
+            __ASM_EMIT("fsub            v2.4s, v2.4s, v16.4s") \
+            __ASM_EMIT("fsub            v3.4s, v3.4s, v16.4s") \
+            __ASM_EMIT("bit             v0.16b, v8.16b, v4.16b")        /* v0   = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            __ASM_EMIT("bit             v1.16b, v9.16b, v5.16b") \
+            __ASM_EMIT("bit             v2.16b, v10.16b, v6.16b") \
+            __ASM_EMIT("bit             v3.16b, v11.16b, v7.16b") \
+            /* v0   = XX */ \
+            __ASM_EMIT("fmul            v4.4s, v0.4s, v0.4s")           /* v4   = X2 = XX*XX */ \
+            __ASM_EMIT("fmul            v5.4s, v1.4s, v1.4s") \
+            __ASM_EMIT("fmul            v6.4s, v2.4s, v2.4s") \
+            __ASM_EMIT("fmul            v7.4s, v3.4s, v3.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v19.4s")          /* v8   = X2*C0 */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v19.4s") \
+            __ASM_EMIT("fmul            v10.4s, v6.4s, v19.4s") \
+            __ASM_EMIT("fmul            v11.4s, v7.4s, v19.4s") \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v20.4s")          /* v8   = C1 + X2*C0 */ \
+            __ASM_EMIT("fadd            v9.4s, v9.4s, v20.4s") \
+            __ASM_EMIT("fadd            v10.4s, v10.4s, v20.4s") \
+            __ASM_EMIT("fadd            v11.4s, v11.4s, v20.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v9.4s") \
+            __ASM_EMIT("fmul            v10.4s, v6.4s, v10.4s") \
+            __ASM_EMIT("fmul            v11.4s, v7.4s, v11.4s") \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v21.4s")          /* v8   = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("fadd            v9.4s, v9.4s, v21.4s") \
+            __ASM_EMIT("fadd            v10.4s, v10.4s, v21.4s") \
+            __ASM_EMIT("fadd            v11.4s, v11.4s, v21.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v9.4s") \
+            __ASM_EMIT("fmul            v10.4s, v6.4s, v10.4s") \
+            __ASM_EMIT("fmul            v11.4s, v7.4s, v11.4s") \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v22.4s")          /* v8   = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("fadd            v9.4s, v9.4s, v22.4s") \
+            __ASM_EMIT("fadd            v10.4s, v10.4s, v22.4s") \
+            __ASM_EMIT("fadd            v11.4s, v11.4s, v22.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v9.4s") \
+            __ASM_EMIT("fmul            v10.4s, v6.4s, v10.4s") \
+            __ASM_EMIT("fmul            v11.4s, v7.4s, v11.4s") \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v23.4s")          /* v8   = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("fadd            v9.4s, v9.4s, v23.4s") \
+            __ASM_EMIT("fadd            v10.4s, v10.4s, v23.4s") \
+            __ASM_EMIT("fadd            v11.4s, v11.4s, v23.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v9.4s") \
+            __ASM_EMIT("fmul            v10.4s, v6.4s, v10.4s") \
+            __ASM_EMIT("fmul            v11.4s, v7.4s, v11.4s") \
+            __ASM_EMIT("fmla            v0.4s, v0.4s, v8.4s")           /* v0   = XX*(1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */ \
+            __ASM_EMIT("fmla            v1.4s, v1.4s, v9.4s") \
+            __ASM_EMIT("fmla            v2.4s, v2.4s, v10.4s") \
+            __ASM_EMIT("fmla            v3.4s, v3.4s, v11.4s")
+
+        #define SINF_X_PLUS_PI_2_CORE_X8 \
+            /* v0   = X0 = x0 + PI/2 */ \
+            /* v1   = X1 = x1 + PI/2 */ \
+            /* v16  = PI/2 */ \
+            /* v17  = PI */ \
+            /* v18  = 1/(2*PI) */ \
+            /* v19  = C0 */ \
+            /* v20  = C1 */ \
+            /* v21  = C2 */ \
+            /* v22  = C3 */ \
+            /* v23  = C4 */ \
+            __ASM_EMIT("fmul            v4.4s, v0.4s, v18.4s")          /* v4   = x / (2*PI) */ \
+            __ASM_EMIT("fmul            v5.4s, v1.4s, v18.4s") \
+            __ASM_EMIT("fcvtms          v8.4s, v4.4s")                  /* v8   = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("fcvtms          v9.4s, v5.4s") \
+            __ASM_EMIT("fadd            v12.4s, v17.4s, v17.4s")        /* v12  = 2*PI */ \
+            __ASM_EMIT("scvtf           v8.4s, v8.4s")                  /* v8   = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("scvtf           v9.4s, v9.4s") \
+            __ASM_EMIT("fmls            v0.4s, v8.4s, v12.4s")          /* v0   = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("fmls            v1.4s, v9.4s, v12.4s") \
+            __ASM_EMIT("fadd            v12.4s, v16.4s, v17.4s")        /* v12  = 3*PI/2 */ \
+            __ASM_EMIT("fcmge           v4.4s, v0.4s, v17.4s")          /* v4   = [ Y >= PI ] */ \
+            __ASM_EMIT("fcmge           v5.4s, v1.4s, v17.4s") \
+            __ASM_EMIT("fsub            v8.4s, v12.4s, v0.4s")          /* v8   = 3*PI/2 - Y */ \
+            __ASM_EMIT("fsub            v9.4s, v12.4s, v1.4s") \
+            __ASM_EMIT("fsub            v0.4s, v0.4s, v16.4s")          /* v0   = Y - PI/2 */ \
+            __ASM_EMIT("fsub            v1.4s, v1.4s, v16.4s") \
+            __ASM_EMIT("bit             v0.16b, v8.16b, v4.16b")        /* v0   = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            __ASM_EMIT("bit             v1.16b, v9.16b, v5.16b") \
+            /* v0   = XX */ \
+            __ASM_EMIT("fmul            v4.4s, v0.4s, v0.4s")           /* v4   = X2 = XX*XX */ \
+            __ASM_EMIT("fmul            v5.4s, v1.4s, v1.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v19.4s")          /* v8   = X2*C0 */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v19.4s") \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v20.4s")          /* v8   = C1 + X2*C0 */ \
+            __ASM_EMIT("fadd            v9.4s, v9.4s, v20.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v9.4s") \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v21.4s")          /* v8   = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("fadd            v9.4s, v9.4s, v21.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v9.4s") \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v22.4s")          /* v8   = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("fadd            v9.4s, v9.4s, v22.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v9.4s") \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v23.4s")          /* v8   = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("fadd            v9.4s, v9.4s, v23.4s") \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("fmul            v9.4s, v5.4s, v9.4s") \
+            __ASM_EMIT("fmla            v0.4s, v0.4s, v8.4s")           /* v0   = XX*(1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */ \
+            __ASM_EMIT("fmla            v1.4s, v1.4s, v9.4s")
+
+        #define SINF_X_PLUS_PI_2_CORE_X4                \
+            /* v0   = X = x + PI/2 */ \
+            /* v16  = PI/2 */ \
+            /* v17  = PI */ \
+            /* v18  = 1/(2*PI) */ \
+            /* v19  = C0 */ \
+            /* v20  = C1 */ \
+            /* v21  = C2 */ \
+            /* v22  = C3 */ \
+            /* v23  = C4 */ \
+            __ASM_EMIT("fmul            v4.4s, v0.4s, v18.4s")          /* v4   = x / (2*PI) */ \
+            __ASM_EMIT("fcvtms          v8.4s, v4.4s")                  /* v8   = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("fadd            v12.4s, v17.4s, v17.4s")        /* v12  = 2*PI */ \
+            __ASM_EMIT("scvtf           v8.4s, v8.4s")                  /* v8   = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("fmls            v0.4s, v8.4s, v12.4s")          /* v0   = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("fadd            v12.4s, v16.4s, v17.4s")        /* v12  = 3*PI/2 */ \
+            __ASM_EMIT("fcmge           v4.4s, v0.4s, v17.4s")          /* v4   = [ Y >= PI ] */ \
+            __ASM_EMIT("fsub            v8.4s, v12.4s, v0.4s")          /* v8   = 3*PI/2 - Y */ \
+            __ASM_EMIT("fsub            v0.4s, v0.4s, v16.4s")          /* v0   = Y - PI/2 */ \
+            __ASM_EMIT("bit             v0.16b, v8.16b, v4.16b")        /* v0   = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* v0   = XX */ \
+            __ASM_EMIT("fmul            v4.4s, v0.4s, v0.4s")           /* v4   = X2 = XX*XX */ \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v19.4s")          /* v8   = X2*C0 */ \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v20.4s")          /* v8   = C1 + X2*C0 */ \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v21.4s")          /* v8   = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v22.4s")          /* v8   = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("fadd            v8.4s, v8.4s, v23.4s")          /* v8   = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("fmul            v8.4s, v4.4s, v8.4s")           /* v8   = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("fmla            v0.4s, v0.4s, v8.4s")           /* v0   = XX*(1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        void sinf1(float *dst, size_t count)
+        {
+            ARCH_AARCH64_ASM(
+                __ASM_EMIT("ldp             q16, q17, [%[S2C], #0x00]") /* v16  = PI/2, v17 = PI */
+                __ASM_EMIT("ldp             q18, q19, [%[S2C], #0x20]") /* v18  = 1/(2*PI), v19 = C0 */
+                __ASM_EMIT("ldp             q20, q21, [%[S2C], #0x40]") /* v20  = C1, v21 = C2 */
+                __ASM_EMIT("ldp             q22, q23, [%[S2C], #0x60]") /* v22  = C3, v23 = C4 */
+                // x16 blocks
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("b.lo            2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("ldp             q0, q1, [%[dst], #0x00]")   // v0   = x0, v1 = x1
+                __ASM_EMIT("ldp             q2, q3, [%[dst], #0x20]")   // v2   = x2, v3 = x3
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")      // v0   = x0 + PI/2
+                __ASM_EMIT("fadd            v1.4s, v1.4s, v16.4s")      // v1   = x1 + PI/2
+                __ASM_EMIT("fadd            v2.4s, v2.4s, v16.4s")      // v2   = x2 + PI/2
+                __ASM_EMIT("fadd            v3.4s, v3.4s, v16.4s")      // v3   = x3 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("stp             q2, q3, [%[dst], #0x20]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x40")
+                __ASM_EMIT("b.hs            1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("adds            %[count], %[count], #8")
+                __ASM_EMIT("b.lt            4f")
+                __ASM_EMIT("ldp             q0, q1, [%[dst], #0x00]")   // v0   = x0, v1 = x1
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")      // v0   = x0 + PI/2
+                __ASM_EMIT("fadd            v1.4s, v1.4s, v16.4s")      // v1   = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("sub             %[count], %[count], #8")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x20")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.lt            6f")
+                __ASM_EMIT("ldr             q0, [%[dst], #0x00]")       // v0   = x0
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")      // v0   = x0 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], %[count], #4")
+                __ASM_EMIT("str             q0, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x10")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.ls            14f")
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            8f")
+                __ASM_EMIT("ld1             {v0.s}[0], [%[dst]]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x04")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            10f")
+                __ASM_EMIT("ld1             {v0.d}[1], [%[dst]]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")      // v0   = x0 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            12f")
+                __ASM_EMIT("sub             %[dst], %[dst], #0x04")
+                __ASM_EMIT("st1             {v0.s}[0], [%[dst]]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x04")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            14f")
+                __ASM_EMIT("st1             {v0.d}[1], [%[dst]]")
+                // End
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "r" (&sinf_const[0])
+                : "cc", "memory",
+                  "v0", "v1", "v2", "v3",
+                  "v4", "v5", "v6", "v7",
+                  "v8", "v9", "v10", "v11",
+                  "v12", "v13", "v14", "v15",
+                  "v16", "v17", "v18", "v19",
+                  "v20", "v21", "v22", "v23"
+            );
+        }
+
+        void sinf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_AARCH64_ASM(
+                __ASM_EMIT("ldp             q16, q17, [%[S2C], #0x00]") /* v16  = PI/2, v17 = PI */
+                __ASM_EMIT("ldp             q18, q19, [%[S2C], #0x20]") /* v18  = 1/(2*PI), v19 = C0 */
+                __ASM_EMIT("ldp             q20, q21, [%[S2C], #0x40]") /* v20  = C1, v21 = C2 */
+                __ASM_EMIT("ldp             q22, q23, [%[S2C], #0x60]") /* v22  = C3, v23 = C4 */
+                // x16 blocks
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("b.lo            2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("ldp             q0, q1, [%[src], #0x00]")   // v0   = x0, v1 = x1
+                __ASM_EMIT("ldp             q2, q3, [%[src], #0x20]")   // v2   = x2, v3 = x3
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")      // v0   = x0 + PI/2
+                __ASM_EMIT("fadd            v1.4s, v1.4s, v16.4s")      // v1   = x1 + PI/2
+                __ASM_EMIT("fadd            v2.4s, v2.4s, v16.4s")      // v2   = x2 + PI/2
+                __ASM_EMIT("fadd            v3.4s, v3.4s, v16.4s")      // v3   = x3 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("stp             q2, q3, [%[dst], #0x20]")
+                __ASM_EMIT("add             %[src], %[src], #0x40")
+                __ASM_EMIT("add             %[dst], %[dst], #0x40")
+                __ASM_EMIT("b.hs            1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("adds            %[count], %[count], #8")
+                __ASM_EMIT("b.lt            4f")
+                __ASM_EMIT("ldp             q0, q1, [%[src], #0x00]")   // v0   = x0, v1 = x1
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")      // v0   = x0 + PI/2
+                __ASM_EMIT("fadd            v1.4s, v1.4s, v16.4s")      // v1   = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("sub             %[count], %[count], #8")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[src], %[src], #0x20")
+                __ASM_EMIT("add             %[dst], %[dst], #0x20")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.lt            6f")
+                __ASM_EMIT("ldr             q0, [%[src], #0x00]")       // v0   = x0
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")      // v0   = x0 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], %[count], #4")
+                __ASM_EMIT("str             q0, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[src], %[src], #0x10")
+                __ASM_EMIT("add             %[dst], %[dst], #0x10")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.ls            14f")
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            8f")
+                __ASM_EMIT("ld1             {v0.s}[0], [%[src]]")
+                __ASM_EMIT("add             %[src], %[src], #0x04")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            10f")
+                __ASM_EMIT("ld1             {v0.d}[1], [%[src]]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v16.4s")      // v0   = x0 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            12f")
+                __ASM_EMIT("st1             {v0.s}[0], [%[dst]]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x04")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            14f")
+                __ASM_EMIT("st1             {v0.d}[1], [%[dst]]")
+                // End
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "r" (&sinf_const[0])
+                : "cc", "memory",
+                  "v0", "v1", "v2", "v3",
+                  "v4", "v5", "v6", "v7",
+                  "v8", "v9", "v10", "v11",
+                  "v12", "v13", "v14", "v15",
+                  "v16", "v17", "v18", "v19",
+                  "v20", "v21", "v22", "v23"
+            );
+        }
+
+        void sinf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_AARCH64_ASM(
+                __ASM_EMIT("ldp             q16, q17, [%[S2C], #0x00]")     /* v16  = PI/2, v17 = PI */
+                __ASM_EMIT("ldp             q18, q19, [%[S2C], #0x20]")     /* v18  = 1/(2*PI), v19 = C0 */
+                __ASM_EMIT("ldp             q20, q21, [%[S2C], #0x40]")     /* v20  = C1, v21 = C2 */
+                __ASM_EMIT("ldp             q22, q23, [%[S2C], #0x60]")     /* v22  = C3, v23 = C4 */
+                __ASM_EMIT("ld1r            {v28.4s}, [%[k]]")              /* v28  = k k k k */
+                __ASM_EMIT("ld1r            {v29.4s}, [%[p]]")              /* v29  = p p p p */
+                __ASM_EMIT("ldp             q24, q25, [%[S2KP], #0x00]")    /* v24  = 0 1 2 3, v25 = 4 5 6 7 */
+                __ASM_EMIT("ldp             q26, q27, [%[S2KP], #0x20]")    /* v26  = 8 8 8 8, v27 = 4 4 4 4 */
+                __ASM_EMIT("fadd            v29.4s, v29.4s, v16.4s")        /* v29  = p + PI/2 ... */
+                // x16 blocks
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("b.lo            2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*x0
+                __ASM_EMIT("fmul            v1.4s, v28.4s, v25.4s")         // v1   = k*x1
+                __ASM_EMIT("fadd            v24.4s, v24.4s, v26.4s")        // v24  = i0 + 8
+                __ASM_EMIT("fadd            v25.4s, v25.4s, v26.4s")        // v25  = i1 + 8
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v29.4s")          // v0   = k*x0 + p + PI/2
+                __ASM_EMIT("fadd            v1.4s, v1.4s, v29.4s")          // v1   = k*x1 + p + PI/2
+                __ASM_EMIT("fmul            v2.4s, v28.4s, v24.4s")         // v2   = k*x2
+                __ASM_EMIT("fmul            v3.4s, v28.4s, v25.4s")         // v3   = k*x3
+                __ASM_EMIT("fadd            v24.4s, v24.4s, v26.4s")        // v24  = i0 + 8
+                __ASM_EMIT("fadd            v25.4s, v25.4s, v26.4s")        // v25  = i1 + 8
+                __ASM_EMIT("fadd            v2.4s, v2.4s, v29.4s")          // v2   = k*x2 + p + PI/2
+                __ASM_EMIT("fadd            v3.4s, v3.4s, v29.4s")          // v3   = k*x3 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("subs            %[count], %[count], #16")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("stp             q2, q3, [%[dst], #0x20]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x40")
+                __ASM_EMIT("b.hs            1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("adds            %[count], %[count], #8")
+                __ASM_EMIT("b.lt            4f")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*x0
+                __ASM_EMIT("fmul            v1.4s, v28.4s, v25.4s")         // v1   = k*x1
+                __ASM_EMIT("fadd            v24.4s, v24.4s, v26.4s")        // v24  = i0 + 8
+                __ASM_EMIT("fadd            v25.4s, v25.4s, v26.4s")        // v25  = i1 + 8
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v29.4s")          // v0   = k*x0 + p + PI/2
+                __ASM_EMIT("fadd            v1.4s, v1.4s, v29.4s")          // v1   = k*x1 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("sub             %[count], %[count], #8")
+                __ASM_EMIT("stp             q0, q1, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x20")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.lt            6f")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*x0
+                __ASM_EMIT("fadd            v24.4s, v24.4s, v27.4s")        // v24  = i0 + 4
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v29.4s")          // v0   = k*x0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], %[count], #4")
+                __ASM_EMIT("str             q0, [%[dst], #0x00]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x10")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], %[count], #4")
+                __ASM_EMIT("b.ls            10f")
+                __ASM_EMIT("fmul            v0.4s, v28.4s, v24.4s")         // v0   = k*x0
+                __ASM_EMIT("fadd            v0.4s, v0.4s, v29.4s")          // v0   = k*x0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("b.eq            8f")
+                __ASM_EMIT("st1             {v0.s}[0], [%[dst]]")
+                __ASM_EMIT("add             %[dst], %[dst], #0x04")
+                __ASM_EMIT("ext             v0.16b, v0.16b, v0.16b, #4")    // v0   = S1 S2 S3 S0
+                __ASM_EMIT("8:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("b.eq            10f")
+                __ASM_EMIT("st1             {v0.d}[0], [%[dst]]")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [k] "r" (&k),
+                  [p] "r" (&p),
+                  [S2C] "r" (&sinf_const[0]),
+                  [S2KP] "r" (&kp_gen_const[0])
+                : "cc", "memory",
+                  "v0", "v1", "v2", "v3",
+                  "v4", "v5", "v6", "v7",
+                  "v8", "v9", "v10", "v11",
+                  "v12", "v13", "v14", "v15",
+                  "v16", "v17", "v18", "v19",
+                  "v20", "v21", "v22", "v23",
+                  "v24", "v25", "v26", "v27",
+                  "v28", "v29"
+            );
+        }
+
+    } /* namespace asimd */
+} /* namespace lsp */
+
+
+
+#endif /* PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_SIN_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/aarch64/asimd/pmath.h	2025-08-26 18:15:43.694003602 +0000
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 13 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_H_
+#define PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_H_
+
+#ifndef PRIVATE_DSP_ARCH_AARCH64_ASIMD_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_AARCH64_ASIMD_IMPL */
+
+#include <private/dsp/arch/aarch64/asimd/pmath/abs_vv.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/cos.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/exp.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/fmop_kx.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/fmop_vv.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/lanczos.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/log.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/lramp.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/minmax.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/op_kx.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/op_vv.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/pow.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/sin.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/sqr.h>
+#include <private/dsp/arch/aarch64/asimd/pmath/ssqrt.h>
+
+#endif /* PRIVATE_DSP_ARCH_AARCH64_ASIMD_PMATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/msmatrix.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/msmatrix.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/msmatrix.h	2025-03-01 12:42:56.784648435 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/msmatrix.h	2025-08-26 18:15:43.702003524 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -41,138 +41,79 @@ namespace lsp
         {
             ARCH_ARM_ASM
             (
-                __ASM_EMIT("subs        %[count], #24")
-                __ASM_EMIT("vld1.32     {q0-q1}, [%[X_HALF]]")      // q0 = 0.5, q1 = 0.5
+                __ASM_EMIT("subs        %[count], #16")
+                __ASM_EMIT("vld1.32     {q12}, [%[X_HALF]]")        // q12 = 0.5
                 __ASM_EMIT("blo         2f")
-                // x24 blocks
+                // x16 blocks
                 __ASM_EMIT("1:")
-                __ASM_EMIT("vld1.32     {q2-q3}, [%[left]]!")       // q2 = l, q3 = l
-                __ASM_EMIT("vld1.32     {q4-q5}, [%[right]]!")      // q4 = r, q5 = r
-                __ASM_EMIT("vmov        q14, q2")                   // q14 = l
-                __ASM_EMIT("vmov        q15, q3")                   // q15 = r
-                __ASM_EMIT("vld1.32     {q6-q7}, [%[left]]!")
-                __ASM_EMIT("vld1.32     {q8-q9}, [%[right]]!")
-                __ASM_EMIT("vadd.f32    q2, q2, q4")                // q2 = l + r
-                __ASM_EMIT("vadd.f32    q3, q3, q5")                // q3 = l + r
-                __ASM_EMIT("vld1.32     {q10-q11}, [%[left]]!")
-                __ASM_EMIT("vld1.32     {q12-q13}, [%[right]]!")
-                __ASM_EMIT("vsub.f32    q4, q14, q4")               // q4 = l - r
-                __ASM_EMIT("vsub.f32    q5, q15, q5")               // q5 = l - r
-                __ASM_EMIT("vmul.f32    q2, q0")                    // q2 = (l + r) * 0.5f
-                __ASM_EMIT("vmul.f32    q3, q1")                    // q3 = (l + r) * 0.5f
-                __ASM_EMIT("vmul.f32    q4, q0")                    // q4 = (l - r) * 0.5f
-                __ASM_EMIT("vmul.f32    q5, q1")                    // q5 = (l - r) * 0.5f
-                __ASM_EMIT("vmov        q14, q6")
-                __ASM_EMIT("vmov        q15, q7")
-                __ASM_EMIT("vst1.32     {q2-q3}, [%[mid]]!")
-                __ASM_EMIT("vst1.32     {q4-q5}, [%[side]]!")
-                __ASM_EMIT("vadd.f32    q6, q6, q8")
-                __ASM_EMIT("vadd.f32    q7, q7, q9")
-                __ASM_EMIT("vsub.f32    q8, q14, q8")
-                __ASM_EMIT("vsub.f32    q9, q15, q9")
-                __ASM_EMIT("vmul.f32    q6, q0")
-                __ASM_EMIT("vmul.f32    q7, q1")
-                __ASM_EMIT("vmul.f32    q8, q0")
-                __ASM_EMIT("vmul.f32    q9, q1")
-                __ASM_EMIT("vmov        q14, q10")
-                __ASM_EMIT("vmov        q15, q11")
-                __ASM_EMIT("vst1.32     {q6-q7}, [%[mid]]!")
-                __ASM_EMIT("vst1.32     {q8-q9}, [%[side]]!")
-                __ASM_EMIT("vadd.f32    q10, q10, q12")
-                __ASM_EMIT("vadd.f32    q11, q11, q13")
-                __ASM_EMIT("vsub.f32    q12, q14, q12")
-                __ASM_EMIT("vsub.f32    q13, q15, q13")
-                __ASM_EMIT("vmul.f32    q10, q0")
-                __ASM_EMIT("vmul.f32    q11, q1")
-                __ASM_EMIT("vmul.f32    q12, q0")
-                __ASM_EMIT("vmul.f32    q13, q1")
-                __ASM_EMIT("vst1.32     {q10-q11}, [%[mid]]!")
-                __ASM_EMIT("vst1.32     {q12-q13}, [%[side]]!")
-                __ASM_EMIT("subs        %[count], #24")
+                __ASM_EMIT("vldm        %[left]!, {q0-q3}")         // q0 = l
+                __ASM_EMIT("vldm        %[right]!, {q4-q7}")        // q4 = r
+                __ASM_EMIT("vsub.f32    q8, q0, q4")                // q8 = l - r
+                __ASM_EMIT("vsub.f32    q9, q1, q5")
+                __ASM_EMIT("vsub.f32    q10, q2, q6")
+                __ASM_EMIT("vsub.f32    q11, q3, q7")
+                __ASM_EMIT("vadd.f32    q0, q0, q4")                // q0 = l + r
+                __ASM_EMIT("vadd.f32    q1, q1, q5")
+                __ASM_EMIT("vadd.f32    q2, q2, q6")
+                __ASM_EMIT("vadd.f32    q3, q3, q7")
+                __ASM_EMIT("vmul.f32    q4, q8, q12")               // q4 = (l - r) * 0.5f
+                __ASM_EMIT("vmul.f32    q5, q9, q12")
+                __ASM_EMIT("vmul.f32    q6, q10, q12")
+                __ASM_EMIT("vmul.f32    q7, q11, q12")
+                __ASM_EMIT("vmul.f32    q0, q0, q12")               // q0 = (l + r) * 0.5f
+                __ASM_EMIT("vmul.f32    q1, q1, q12")
+                __ASM_EMIT("vmul.f32    q2, q2, q12")
+                __ASM_EMIT("vmul.f32    q3, q3, q12")
+                __ASM_EMIT("vstm        %[mid]!, {q0-q3}")
+                __ASM_EMIT("vstm        %[side]!, {q4-q7}")
+                __ASM_EMIT("subs        %[count], #16")
                 __ASM_EMIT("bhs         1b")
-                // x16 block
-                __ASM_EMIT("2:")
-                __ASM_EMIT("adds        %[count], #8")              // 24 - 16
-                __ASM_EMIT("blt         4f")
-                __ASM_EMIT("vld1.32     {q2-q3}, [%[left]]!")       // q2 = l, q3 = l
-                __ASM_EMIT("vld1.32     {q4-q5}, [%[right]]!")      // q4 = r, q5 = r
-                __ASM_EMIT("vld1.32     {q6-q7}, [%[left]]!")
-                __ASM_EMIT("vld1.32     {q8-q9}, [%[right]]!")
-                __ASM_EMIT("vmov        q14, q2")                   // q14 = l
-                __ASM_EMIT("vmov        q15, q3")                   // q15 = r
-                __ASM_EMIT("vadd.f32    q2, q2, q4")                // q2 = l + r
-                __ASM_EMIT("vadd.f32    q3, q3, q5")                // q3 = l + r
-                __ASM_EMIT("vsub.f32    q4, q14, q4")               // q4 = l - r
-                __ASM_EMIT("vsub.f32    q5, q15, q5")               // q5 = l - r
-                __ASM_EMIT("vmul.f32    q2, q0")                    // q2 = (l + r) * 0.5f
-                __ASM_EMIT("vmul.f32    q3, q1")                    // q3 = (l + r) * 0.5f
-                __ASM_EMIT("vmul.f32    q4, q0")                    // q4 = (l - r) * 0.5f
-                __ASM_EMIT("vmul.f32    q5, q1")                    // q5 = (l - r) * 0.5f
-                __ASM_EMIT("vmov        q14, q6")
-                __ASM_EMIT("vmov        q15, q7")
-                __ASM_EMIT("vadd.f32    q6, q6, q8")
-                __ASM_EMIT("vadd.f32    q7, q7, q9")
-                __ASM_EMIT("vsub.f32    q8, q14, q8")
-                __ASM_EMIT("vsub.f32    q9, q15, q9")
-                __ASM_EMIT("vmul.f32    q6, q0")
-                __ASM_EMIT("vmul.f32    q7, q1")
-                __ASM_EMIT("vmul.f32    q8, q0")
-                __ASM_EMIT("vmul.f32    q9, q1")
-                __ASM_EMIT("vst1.32     {q2-q3}, [%[mid]]!")
-                __ASM_EMIT("vst1.32     {q4-q5}, [%[side]]!")
-                __ASM_EMIT("vst1.32     {q6-q7}, [%[mid]]!")
-                __ASM_EMIT("vst1.32     {q8-q9}, [%[side]]!")
-                __ASM_EMIT("sub         %[count], #16")
                 // x8 block
-                __ASM_EMIT("4:")
+                __ASM_EMIT("2:")
                 __ASM_EMIT("adds        %[count], #8")              // 16 - 8
-                __ASM_EMIT("blt         6f")
-                __ASM_EMIT("vld1.32     {q2-q3}, [%[left]]!")       // q2 = l, q3 = l
-                __ASM_EMIT("vld1.32     {q4-q5}, [%[right]]!")      // q4 = r, q5 = r
-                __ASM_EMIT("vmov        q14, q2")                   // q14 = l
-                __ASM_EMIT("vmov        q15, q3")                   // q15 = r
-                __ASM_EMIT("vadd.f32    q2, q2, q4")                // q2 = l + r
-                __ASM_EMIT("vadd.f32    q3, q3, q5")                // q3 = l + r
-                __ASM_EMIT("vsub.f32    q4, q14, q4")               // q4 = l - r
-                __ASM_EMIT("vsub.f32    q5, q15, q5")               // q5 = l - r
-                __ASM_EMIT("vmul.f32    q2, q0")                    // q2 = (l + r) * 0.5f
-                __ASM_EMIT("vmul.f32    q3, q1")                    // q3 = (l + r) * 0.5f
-                __ASM_EMIT("vmul.f32    q4, q0")                    // q4 = (l - r) * 0.5f
-                __ASM_EMIT("vmul.f32    q5, q1")                    // q5 = (l - r) * 0.5f
-                __ASM_EMIT("vst1.32     {q2-q3}, [%[mid]]!")
-                __ASM_EMIT("vst1.32     {q4-q5}, [%[side]]!")
+                __ASM_EMIT("blt         4f")
+                __ASM_EMIT("vldm        %[left]!, {q0-q1}")         // q0 = l
+                __ASM_EMIT("vldm        %[right]!, {q4-q5}")        // q4 = r
+                __ASM_EMIT("vsub.f32    q8, q0, q4")                // q8 = l - r
+                __ASM_EMIT("vsub.f32    q9, q1, q5")
+                __ASM_EMIT("vadd.f32    q0, q0, q4")                // q0 = l + r
+                __ASM_EMIT("vadd.f32    q1, q1, q5")
+                __ASM_EMIT("vmul.f32    q4, q8, q12")               // q4 = (l - r) * 0.5f
+                __ASM_EMIT("vmul.f32    q5, q9, q12")
+                __ASM_EMIT("vmul.f32    q0, q0, q12")               // q0 = (l + r) * 0.5f
+                __ASM_EMIT("vmul.f32    q1, q1, q12")
+                __ASM_EMIT("vstm        %[mid]!, {q0-q1}")
+                __ASM_EMIT("vstm        %[side]!, {q4-q5}")
                 __ASM_EMIT("sub         %[count], #8")
                 // x4 block
-                __ASM_EMIT("6:")
+                __ASM_EMIT("4:")
                 __ASM_EMIT("adds        %[count], #4")              // 8 - 4
-                __ASM_EMIT("blt         8f")
-                __ASM_EMIT("vld1.32     {q2}, [%[left]]!")          // q2 = l
-                __ASM_EMIT("vld1.32     {q4}, [%[right]]!")         // q4 = r
-                __ASM_EMIT("vmov        q14, q2")                   // q14 = l
-                __ASM_EMIT("vadd.f32    q2, q2, q4")                // q2 = l + r
-                __ASM_EMIT("vsub.f32    q4, q14, q4")               // q4 = l - r
-                __ASM_EMIT("vmul.f32    q2, q0")                    // q2 = (l + r) * 0.5f
-                __ASM_EMIT("vmul.f32    q4, q0")                    // q4 = (l - r) * 0.5f
-                __ASM_EMIT("vst1.32     {q2}, [%[mid]]!")
-                __ASM_EMIT("vst1.32     {q4}, [%[side]]!")
+                __ASM_EMIT("blt         6f")
+                __ASM_EMIT("vldm        %[left]!, {q0}")            // q0 = l
+                __ASM_EMIT("vldm        %[right]!, {q4}")           // q4 = r
+                __ASM_EMIT("vsub.f32    q8, q0, q4")                // q8 = l - r
+                __ASM_EMIT("vadd.f32    q0, q0, q4")                // q0 = l + r
+                __ASM_EMIT("vmul.f32    q4, q8, q12")               // q4 = (l - r) * 0.5f
+                __ASM_EMIT("vmul.f32    q0, q0, q12")               // q0 = (l + r) * 0.5f
+                __ASM_EMIT("vstm        %[mid]!, {q0}")
+                __ASM_EMIT("vstm        %[side]!, {q4}")
                 __ASM_EMIT("sub         %[count], #4")
                 // x1 blocks
-                __ASM_EMIT("8:")
+                __ASM_EMIT("6:")
                 __ASM_EMIT("adds        %[count], #3")              // 4 - 1
-                __ASM_EMIT("blt         10f")
-                __ASM_EMIT("9:")
-                __ASM_EMIT("vldm        %[left]!, {s2}")            // s2 = l
-                __ASM_EMIT("vldm        %[right]!, {s4}")           // s4 = r
-                __ASM_EMIT("vmov        s14, s2")                   // s12 = l
-                __ASM_EMIT("vadd.f32    s2, s2, s4")                // s0 = l + r
-                __ASM_EMIT("vsub.f32    s4, s14, s4")               // s2 = l - r
-                __ASM_EMIT("vmul.f32    s2, s0")                    // s0 = (l + r) * 0.5f
-                __ASM_EMIT("vmul.f32    s4, s0")                    // s2 = (l - r) * 0.5f
-                __ASM_EMIT("vstm        %[mid]!, {q2}")
-                __ASM_EMIT("vstm        %[side]!, {q4}")
+                __ASM_EMIT("blt         8f")
+                __ASM_EMIT("7:")
+                __ASM_EMIT("vld1.32     {d0[], d1[]}, [%[left]]!")
+                __ASM_EMIT("vld1.32     {d8[], d9[]}, [%[right]]!")
+                __ASM_EMIT("vsub.f32    q8, q0, q4")                // q8 = l - r
+                __ASM_EMIT("vadd.f32    q0, q0, q4")                // q0 = l + r
+                __ASM_EMIT("vmul.f32    q4, q8, q12")               // q4 = (l - r) * 0.5f
+                __ASM_EMIT("vmul.f32    q0, q0, q12")               // q0 = (l + r) * 0.5f
+                __ASM_EMIT("vst1.32     {d0[0]}, [%[mid]]!")
+                __ASM_EMIT("vst1.32     {d8[0]}, [%[side]]!")
                 __ASM_EMIT("subs        %[count], #1")
-                __ASM_EMIT("bge         9b")
-                __ASM_EMIT("10:")
+                __ASM_EMIT("bge         7b")
+                __ASM_EMIT("8:")
 
                 : [mid] "+r" (m), [side] "+r" (s),
                   [left] "+r" (l), [right] "+r" (r),
@@ -180,7 +121,7 @@ namespace lsp
                 : [X_HALF] "r" (&msmatrix_const[0])
                 : "cc", "memory",
                   "q0", "q1", "q2", "q3" , "q4", "q5", "q6", "q7",
-                  "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
+                  "q8", "q9", "q10", "q11", "q12"
             );
         }
 
@@ -188,203 +129,127 @@ namespace lsp
         {
             ARCH_ARM_ASM
             (
-                __ASM_EMIT("subs        %[count], #24")
+                __ASM_EMIT("subs        %[count], #16")
                 __ASM_EMIT("blo         2f")
-                // x24 blocks
+                // x16 blocks
                 __ASM_EMIT("1:")
-                __ASM_EMIT("vld1.32     {q0-q1}, [%[mid]]!")        // q0, q1 = m
-                __ASM_EMIT("vld1.32     {q2-q3}, [%[side]]!")       // q2, q3 = s
-                __ASM_EMIT("vmov        q12, q0")                   // q12 = m
-                __ASM_EMIT("vmov        q13, q1")                   // q13 = m
-                __ASM_EMIT("vld1.32     {q4-q5}, [%[mid]]!")
-                __ASM_EMIT("vld1.32     {q6-q7}, [%[side]]!")
-                __ASM_EMIT("vadd.f32    q0, q0, q2")                // q0 = m + s
-                __ASM_EMIT("vadd.f32    q1, q1, q3")                // q1 = m + s
-                __ASM_EMIT("vld1.32     {q8-q9}, [%[mid]]!")
-                __ASM_EMIT("vld1.32     {q10-q11}, [%[side]]!")
-                __ASM_EMIT("vsub.f32    q2, q12, q2")               // q2 = m - s
-                __ASM_EMIT("vsub.f32    q3, q13, q3")               // q3 = m - s
-                __ASM_EMIT("vmov        q12, q4")
-                __ASM_EMIT("vmov        q13, q5")
-                __ASM_EMIT("vadd.f32    q4, q4, q6")
-                __ASM_EMIT("vadd.f32    q5, q5, q7")
-                __ASM_EMIT("vsub.f32    q6, q12, q6")
-                __ASM_EMIT("vsub.f32    q7, q13, q7")
-                __ASM_EMIT("vmov        q12, q8")
-                __ASM_EMIT("vmov        q13, q9")
-                __ASM_EMIT("vst1.32     {q0-q1}, [%[left]]!")
-                __ASM_EMIT("vst1.32     {q2-q3}, [%[right]]!")
-                __ASM_EMIT("vadd.f32    q8, q8, q10")
-                __ASM_EMIT("vadd.f32    q9, q9, q11")
-                __ASM_EMIT("vst1.32     {q4-q5}, [%[left]]!")
-                __ASM_EMIT("vst1.32     {q6-q7}, [%[right]]!")
-                __ASM_EMIT("vsub.f32    q10, q12, q10")
-                __ASM_EMIT("vsub.f32    q11, q13, q11")
-                __ASM_EMIT("vst1.32     {q8-q9}, [%[left]]!")
-                __ASM_EMIT("vst1.32     {q10-q11}, [%[right]]!")
-                __ASM_EMIT("subs        %[count], #24")
+                __ASM_EMIT("vldm        %[mid]!, {q0-q3}")          // q0 = m
+                __ASM_EMIT("vldm        %[side]!, {q4-q7}")         // q4 = s
+                __ASM_EMIT("vsub.f32    q8, q0, q4")                // q8 = r = m - s
+                __ASM_EMIT("vsub.f32    q9, q1, q5")
+                __ASM_EMIT("vsub.f32    q10, q2, q6")
+                __ASM_EMIT("vsub.f32    q11, q3, q7")
+                __ASM_EMIT("vadd.f32    q0, q0, q4")                // q0 = l = m + s
+                __ASM_EMIT("vadd.f32    q1, q1, q5")
+                __ASM_EMIT("vadd.f32    q2, q2, q6")
+                __ASM_EMIT("vadd.f32    q3, q3, q7")
+                __ASM_EMIT("vstm        %[left]!, {q0-q3}")
+                __ASM_EMIT("vstm        %[right]!, {q8-q11}")
+                __ASM_EMIT("subs        %[count], #16")
                 __ASM_EMIT("bhs         1b")
-                // x16 block
-                __ASM_EMIT("2:")
-                __ASM_EMIT("adds        %[count], #8")              // 24 - 16
-                __ASM_EMIT("blt         4f")
-                __ASM_EMIT("vld1.32     {q0-q1}, [%[mid]]!")        // q0, q1 = m
-                __ASM_EMIT("vld1.32     {q2-q3}, [%[side]]!")       // q2, q3 = s
-                __ASM_EMIT("vld1.32     {q4-q5}, [%[mid]]!")
-                __ASM_EMIT("vld1.32     {q6-q7}, [%[side]]!")
-                __ASM_EMIT("vmov        q12, q0")                   // q12 = m
-                __ASM_EMIT("vmov        q13, q1")                   // q13 = m
-                __ASM_EMIT("vadd.f32    q0, q0, q2")                // q0 = m + s
-                __ASM_EMIT("vadd.f32    q1, q1, q3")                // q1 = m + s
-                __ASM_EMIT("vsub.f32    q2, q12, q2")               // q2 = m - s
-                __ASM_EMIT("vsub.f32    q3, q13, q3")               // q3 = m - s
-                __ASM_EMIT("vmov        q12, q4")
-                __ASM_EMIT("vmov        q13, q5")
-                __ASM_EMIT("vadd.f32    q4, q4, q6")
-                __ASM_EMIT("vadd.f32    q5, q5, q7")
-                __ASM_EMIT("vsub.f32    q6, q12, q6")
-                __ASM_EMIT("vsub.f32    q7, q13, q7")
-                __ASM_EMIT("vst1.32     {q0-q1}, [%[left]]!")
-                __ASM_EMIT("vst1.32     {q2-q3}, [%[right]]!")
-                __ASM_EMIT("vst1.32     {q4-q5}, [%[left]]!")
-                __ASM_EMIT("vst1.32     {q6-q7}, [%[right]]!")
-                __ASM_EMIT("sub         %[count], #16")
                 // x8 block
-                __ASM_EMIT("4:")
+                __ASM_EMIT("2:")
                 __ASM_EMIT("adds        %[count], #8")              // 16 - 8
-                __ASM_EMIT("blt         6f")
-                __ASM_EMIT("vld1.32     {q0-q1}, [%[mid]]!")        // q0, q1 = m
-                __ASM_EMIT("vld1.32     {q2-q3}, [%[side]]!")       // q2, q3 = s
-                __ASM_EMIT("vmov        q12, q0")                   // q12 = m
-                __ASM_EMIT("vmov        q13, q1")                   // q13 = m
-                __ASM_EMIT("vadd.f32    q0, q0, q2")                // q0 = m + s
-                __ASM_EMIT("vadd.f32    q1, q1, q3")                // q1 = m + s
-                __ASM_EMIT("vsub.f32    q2, q12, q2")               // q2 = m - s
-                __ASM_EMIT("vsub.f32    q3, q13, q3")               // q3 = m - s
-                __ASM_EMIT("vst1.32     {q0-q1}, [%[left]]!")
-                __ASM_EMIT("vst1.32     {q2-q3}, [%[right]]!")
+                __ASM_EMIT("blt         4f")
+                __ASM_EMIT("vldm        %[mid]!, {q0-q1}")          // q0 = m
+                __ASM_EMIT("vldm        %[side]!, {q4-q5}")         // q4 = s
+                __ASM_EMIT("vsub.f32    q8, q0, q4")                // q8 = r = m - s
+                __ASM_EMIT("vsub.f32    q9, q1, q5")
+                __ASM_EMIT("vadd.f32    q0, q0, q4")                // q0 = l = m + s
+                __ASM_EMIT("vadd.f32    q1, q1, q5")
+                __ASM_EMIT("vstm        %[left]!, {q0-q1}")
+                __ASM_EMIT("vstm        %[right]!, {q8-q9}")
                 __ASM_EMIT("sub         %[count], #8")
                 // x4 block
-                __ASM_EMIT("6:")
+                __ASM_EMIT("4:")
                 __ASM_EMIT("adds        %[count], #4")              // 8 - 4
-                __ASM_EMIT("blt         8f")
-                __ASM_EMIT("vld1.32     {q0}, [%[mid]]!")           // q0 = m
-                __ASM_EMIT("vld1.32     {q2}, [%[side]]!")          // q2 = s
-                __ASM_EMIT("vmov        q12, q0")                   // q12 = m
-                __ASM_EMIT("vadd.f32    q0, q0, q2")                // q0 = m + s
-                __ASM_EMIT("vsub.f32    q2, q12, q2")               // q2 = m - s
-                __ASM_EMIT("vst1.32     {q0}, [%[left]]!")
-                __ASM_EMIT("vst1.32     {q2}, [%[right]]!")
+                __ASM_EMIT("blt         6f")
+                __ASM_EMIT("vldm        %[mid]!, {q0}")             // q0 = m
+                __ASM_EMIT("vldm        %[side]!, {q4}")            // q4 = s
+                __ASM_EMIT("vsub.f32    q8, q0, q4")                // q8 = r = m - s
+                __ASM_EMIT("vadd.f32    q0, q0, q4")                // q0 = l = m + s
+                __ASM_EMIT("vstm        %[left]!, {q0}")
+                __ASM_EMIT("vstm        %[right]!, {q8}")
                 __ASM_EMIT("sub         %[count], #4")
                 // x1 blocks
-                __ASM_EMIT("8:")
+                __ASM_EMIT("6:")
                 __ASM_EMIT("adds        %[count], #3")              // 4 - 1
-                __ASM_EMIT("blt         10f")
-                __ASM_EMIT("9:")
-                __ASM_EMIT("vldm        %[mid]!, {s0}")             // s0 = m
-                __ASM_EMIT("vldm        %[side]!, {s2}")            // s2 = s
-                __ASM_EMIT("vmov        s12, s0")                   // s12 = m
-                __ASM_EMIT("vadd.f32    s0, s0, s2")                // s0 = m + s
-                __ASM_EMIT("vsub.f32    s2, s12, s2")               // s2 = m - s
-                __ASM_EMIT("vstm        %[left]!, {s2}")
-                __ASM_EMIT("vstm        %[right]!, {s4}")
+                __ASM_EMIT("blt         8f")
+                __ASM_EMIT("7:")
+                __ASM_EMIT("vld1.32     {d0[], d1[]}, [%[mid]]!")
+                __ASM_EMIT("vld1.32     {d8[], d9[]}, [%[side]]!")
+                __ASM_EMIT("vsub.f32    q8, q0, q4")                // q8 = r = m - s
+                __ASM_EMIT("vadd.f32    q0, q0, q4")                // q0 = l = m + s
+                __ASM_EMIT("vst1.32     {d0[0]}, [%[left]]!")
+                __ASM_EMIT("vst1.32     {d16[0]}, [%[right]]!")
                 __ASM_EMIT("subs        %[count], #1")
-                __ASM_EMIT("bge         9b")
-                __ASM_EMIT("10:")
+                __ASM_EMIT("bge         7b")
+                __ASM_EMIT("8:")
 
                 : [mid] "+r" (m), [side] "+r" (s),
                   [left] "+r" (l), [right] "+r" (r),
                   [count] "+r" (count)
                 :
                 : "cc", "memory",
-                  "q0", "q1", "q2", "q3" , "q4", "q5", "q6", "q7",
-                  "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
+                  "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
+                  "q8", "q9", "q10", "q11"
             );
         }
 
         #define LR_CVT_BODY(d, l, r, op)    \
-            __ASM_EMIT("subs        %[count], #24") \
-            __ASM_EMIT("vld1.32     {q0-q1}, [%[X_HALF]]")      /* q0 = 0.5, q1 = 0.5 */ \
+            __ASM_EMIT("subs        %[count], #16") \
+            __ASM_EMIT("vld1.32     {q8}, [%[X_HALF]]")         /* q8 = 0.5 */  \
             __ASM_EMIT("blo         2f") \
-            /* x24 blocks */ \
+            /* x16 blocks */ \
             __ASM_EMIT("1:") \
-            __ASM_EMIT("vld1.32     {q2-q3}, [%[" l "]]!")      /* q2 = l, q3 = l */ \
-            __ASM_EMIT("vld1.32     {q4-q5}, [%[" r "]]!")      /* q4 = r, q5 = r */ \
-            __ASM_EMIT("vld1.32     {q6-q7}, [%[" l "]]!") \
-            __ASM_EMIT("vld1.32     {q8-q9}, [%[" r "]]!") \
-            __ASM_EMIT(op ".f32     q2, q2, q4")                /* q2 = l <+-> r */ \
-            __ASM_EMIT(op ".f32     q3, q3, q5")                /* q3 = l <+-> r */ \
-            __ASM_EMIT("vld1.32     {q10-q11}, [%[" l "]]!") \
-            __ASM_EMIT("vld1.32     {q12-q13}, [%[" r "]]!") \
-            __ASM_EMIT(op ".f32     q6, q6, q8") \
-            __ASM_EMIT(op ".f32     q7, q7, q9") \
-            __ASM_EMIT(op ".f32     q10, q10, q12") \
-            __ASM_EMIT(op ".f32     q11, q11, q13") \
-            __ASM_EMIT("vmul.f32    q2, q0")                    /* q2 = (l <+-> r) * 0.5f */ \
-            __ASM_EMIT("vmul.f32    q3, q1")                    /* q3 = (l <+-> r) * 0.5f */ \
-            __ASM_EMIT("vmul.f32    q6, q0") \
-            __ASM_EMIT("vmul.f32    q7, q1") \
-            __ASM_EMIT("vst1.32     {q2-q3}, [%[" d "]]!") \
-            __ASM_EMIT("vmul.f32    q10, q0") \
-            __ASM_EMIT("vmul.f32    q11, q1") \
-            __ASM_EMIT("vst1.32     {q6-q7}, [%[" d "]]!") \
-            __ASM_EMIT("vst1.32     {q10-q11}, [%[" d "]]!") \
-            __ASM_EMIT("subs        %[count], #24") \
+            __ASM_EMIT("vldm        %[" l "]!, {q0-q3}")        /* q0 = l */ \
+            __ASM_EMIT("vldm        %[" r "]!, {q4-q7}")        /* q4 = r */ \
+            __ASM_EMIT(op ".f32     q0, q0, q4")                /* q0 = l <+-> r */ \
+            __ASM_EMIT(op ".f32     q1, q1, q5") \
+            __ASM_EMIT(op ".f32     q2, q2, q6") \
+            __ASM_EMIT(op ".f32     q3, q3, q7") \
+            __ASM_EMIT("vmul.f32    q0, q0, q8")                /* q0 = (l <+-> r) * 0.5f */ \
+            __ASM_EMIT("vmul.f32    q1, q1, q8") \
+            __ASM_EMIT("vmul.f32    q2, q2, q8") \
+            __ASM_EMIT("vmul.f32    q3, q3, q8") \
+            __ASM_EMIT("vstm        %[" d "]!, {q0-q3}") \
+            __ASM_EMIT("subs        %[count], #16") \
             __ASM_EMIT("bhs         1b") \
-            /* x16 block */ \
-            __ASM_EMIT("2:") \
-            __ASM_EMIT("adds        %[count], #8")              /* 24 - 16 */ \
-            __ASM_EMIT("blt         4f") \
-            __ASM_EMIT("vld1.32     {q2-q3}, [%[" l "]]!")      /* q2 = l, q3 = l */ \
-            __ASM_EMIT("vld1.32     {q4-q5}, [%[" r "]]!")      /* q4 = r, q5 = r */ \
-            __ASM_EMIT("vld1.32     {q6-q7}, [%[" l "]]!") \
-            __ASM_EMIT("vld1.32     {q8-q9}, [%[" r "]]!") \
-            __ASM_EMIT(op ".f32     q2, q2, q4")                /* q2 = l <+-> r */ \
-            __ASM_EMIT(op ".f32     q3, q3, q5")                /* q3 = l <+-> r */ \
-            __ASM_EMIT(op ".f32     q6, q6, q8") \
-            __ASM_EMIT(op ".f32     q7, q7, q9") \
-            __ASM_EMIT("vmul.f32    q2, q0")                    /* q2 = (l <+-> r) * 0.5f */ \
-            __ASM_EMIT("vmul.f32    q3, q1")                    /* q3 = (l <+-> r) * 0.5f */ \
-            __ASM_EMIT("vmul.f32    q6, q0") \
-            __ASM_EMIT("vmul.f32    q7, q1") \
-            __ASM_EMIT("vst1.32     {q2-q3}, [%[" d "]]!") \
-            __ASM_EMIT("vst1.32     {q6-q7}, [%[" d "]]!") \
-            __ASM_EMIT("sub         %[count], #16") \
             /* x8 block */ \
-            __ASM_EMIT("4:") \
+            __ASM_EMIT("2:") \
             __ASM_EMIT("adds        %[count], #8")              /* 16 - 8 */ \
-            __ASM_EMIT("blt         6f") \
-            __ASM_EMIT("vld1.32     {q2-q3}, [%[" l "]]!")      /* q2 = l, q3 = l */ \
-            __ASM_EMIT("vld1.32     {q4-q5}, [%[" r "]]!")      /* q4 = r, q5 = r */ \
-            __ASM_EMIT(op ".f32     q2, q2, q4")                /* q2 = l <+-> r */ \
-            __ASM_EMIT(op ".f32     q3, q3, q5")                /* q3 = l <+-> r */ \
-            __ASM_EMIT("vmul.f32    q2, q0")                    /* q2 = (l <+-> r) * 0.5f */ \
-            __ASM_EMIT("vmul.f32    q3, q1")                    /* q3 = (l <+-> r) * 0.5f */ \
-            __ASM_EMIT("vst1.32     {q2-q3}, [%[" d "]]!") \
+            __ASM_EMIT("blt         4f") \
+            __ASM_EMIT("vldm        %[" l "]!, {q0-q1}")        /* q0 = l */ \
+            __ASM_EMIT("vldm        %[" r "]!, {q4-q5}")        /* q4 = r */ \
+            __ASM_EMIT(op ".f32     q0, q0, q4")                /* q0 = l <+-> r */ \
+            __ASM_EMIT(op ".f32     q1, q1, q5") \
+            __ASM_EMIT("vmul.f32    q0, q0, q8")                /* q0 = (l <+-> r) * 0.5f */ \
+            __ASM_EMIT("vmul.f32    q1, q1, q8") \
+            __ASM_EMIT("vstm        %[" d "]!, {q0-q1}") \
             __ASM_EMIT("sub         %[count], #8") \
             /* x4 block */ \
-            __ASM_EMIT("6:") \
+            __ASM_EMIT("4:") \
             __ASM_EMIT("adds        %[count], #4")              /* 8 - 4 */ \
-            __ASM_EMIT("blt         8f") \
-            __ASM_EMIT("vld1.32     {q2}, [%[" l "]]!")         /* q2 = l */ \
-            __ASM_EMIT("vld1.32     {q4}, [%[" r "]]!")         /* q4 = r */ \
-            __ASM_EMIT(op ".f32     q2, q2, q4")                /* q2 = l <+-> r */ \
-            __ASM_EMIT("vmul.f32    q2, q0")                    /* q2 = (l <+-> r) * 0.5f */ \
-            __ASM_EMIT("vst1.32     {q2}, [%[" d "]]!") \
+            __ASM_EMIT("blt         6f") \
+            __ASM_EMIT("vldm        %[" l "]!, {q0}")           /* q0 = l */ \
+            __ASM_EMIT("vldm        %[" r "]!, {q4}")           /* q4 = r */ \
+            __ASM_EMIT(op ".f32     q0, q0, q4")                /* q0 = l <+-> r */ \
+            __ASM_EMIT("vmul.f32    q0, q0, q8")                /* q0 = (l <+-> r) * 0.5f */ \
+            __ASM_EMIT("vstm        %[" d "]!, {q0}") \
             __ASM_EMIT("sub         %[count], #4") \
             /* x1 blocks */ \
-            __ASM_EMIT("8:") \
+            __ASM_EMIT("6:") \
             __ASM_EMIT("adds        %[count], #3")              /* 4 - 1 */ \
-            __ASM_EMIT("blt         10f") \
-            __ASM_EMIT("9:") \
-            __ASM_EMIT("vldm        %[" l "]!, {s2}")           /* s2 = l */ \
-            __ASM_EMIT("vldm        %[" r "]!, {s4}")           /* s4 = r */ \
-            __ASM_EMIT(op ".f32     s2, s2, s4")                /* q2 = l <+-> r */ \
-            __ASM_EMIT("vmul.f32    s2, s0")                    /* q2 = (l <+-> r) * 0.5f */ \
-            __ASM_EMIT("vstm        %[" d "]!, {s2}") \
+            __ASM_EMIT("blt         8f") \
+            __ASM_EMIT("7:") \
+            __ASM_EMIT("vld1.32     {d0[], d1[]}, [%[" l "]]!") \
+            __ASM_EMIT("vld1.32     {d8[], d9[]}, [%[" r "]]!") \
+            __ASM_EMIT(op ".f32     q0, q0, q4")                /* q0 = l <+-> r */ \
+            __ASM_EMIT("vmul.f32    q0, q0, q8")                /* q0 = (l <+-> r) * 0.5f */ \
+            __ASM_EMIT("vst1.32     {d0[0]}, [%[" d "]]!") \
             __ASM_EMIT("subs        %[count], #1") \
-            __ASM_EMIT("bge         9b") \
-            __ASM_EMIT("10:")
+            __ASM_EMIT("bge         7b") \
+            __ASM_EMIT("8:")
 
 
         void lr_to_mid(float *m, const float *l, const float *r, size_t count)
@@ -397,8 +262,8 @@ namespace lsp
                   [count] "+r" (count)
                 : [X_HALF] "r" (&msmatrix_const[0])
                 : "cc", "memory",
-                  "q0", "q1", "q2", "q3" , "q4", "q5", "q6", "q7",
-                  "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
+                  "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
+                  "q8"
             );
         }
 
@@ -412,86 +277,58 @@ namespace lsp
                   [count] "+r" (count)
                 : [X_HALF] "r" (&msmatrix_const[0])
                 : "cc", "memory",
-                  "q0", "q1", "q2", "q3" , "q4", "q5", "q6", "q7",
-                  "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
+                  "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
+                  "q8"
             );
         }
 
-    #undef LR_CVT_BODY
+        #undef LR_CVT_BODY
 
-    #define MS_CVT_BODY(d, m, s, op)    \
-        __ASM_EMIT("subs        %[count], #32") \
-        __ASM_EMIT("blo         2f") \
-        /* x24 blocks */ \
-        __ASM_EMIT("1:") \
-        __ASM_EMIT("vld1.32     {q0-q1}, [%[" m "]]!")      /* q0 = m, q1 = m */ \
-        __ASM_EMIT("vld1.32     {q8-q9}, [%[" s "]]!")      /* q8 = s, q9 = s */ \
-        __ASM_EMIT("vld1.32     {q2-q3}, [%[" m "]]!") \
-        __ASM_EMIT("vld1.32     {q10-q11}, [%[" s "]]!") \
-        __ASM_EMIT(op ".f32     q0, q8")                    /* q0 = m <+-> s */ \
-        __ASM_EMIT(op ".f32     q1, q9")                    /* q1 = m <+-> s */ \
-        __ASM_EMIT("vld1.32     {q4-q5}, [%[" m "]]!") \
-        __ASM_EMIT("vld1.32     {q12-q13}, [%[" s "]]!") \
-        __ASM_EMIT(op ".f32     q2, q10") \
-        __ASM_EMIT(op ".f32     q3, q11") \
-        __ASM_EMIT("vst1.32     {q0-q1}, [%[" d "]]!") \
-        __ASM_EMIT("vld1.32     {q6-q7}, [%[" m "]]!") \
-        __ASM_EMIT("vld1.32     {q14-q15}, [%[" s "]]!") \
-        __ASM_EMIT(op ".f32     q4, q12") \
-        __ASM_EMIT(op ".f32     q5, q13") \
-        __ASM_EMIT("vst1.32     {q2-q3}, [%[" d "]]!") \
-        __ASM_EMIT(op ".f32     q6, q14") \
-        __ASM_EMIT(op ".f32     q7, q15") \
-        __ASM_EMIT("vst1.32     {q4-q5}, [%[" d "]]!") \
-        __ASM_EMIT("vst1.32     {q6-q7}, [%[" d "]]!") \
-        __ASM_EMIT("subs        %[count], #32") \
-        __ASM_EMIT("bhs         1b") \
-        /* x16 block */ \
-        __ASM_EMIT("2:") \
-        __ASM_EMIT("adds        %[count], #16")              /* 32 - 16 */ \
-        __ASM_EMIT("blt         4f") \
-        __ASM_EMIT("vld1.32     {q0-q1}, [%[" m "]]!")      /* q0 = m, q1 = m */ \
-        __ASM_EMIT("vld1.32     {q8-q9}, [%[" s "]]!")      /* q8 = s, q9 = s */ \
-        __ASM_EMIT("vld1.32     {q2-q3}, [%[" m "]]!") \
-        __ASM_EMIT("vld1.32     {q10-q11}, [%[" s "]]!") \
-        __ASM_EMIT(op ".f32     q0, q8")                    /* q0 = m <+-> s */ \
-        __ASM_EMIT(op ".f32     q1, q9")                    /* q1 = m <+-> s */ \
-        __ASM_EMIT(op ".f32     q2, q10") \
-        __ASM_EMIT(op ".f32     q3, q11") \
-        __ASM_EMIT("vst1.32     {q0-q1}, [%[" d "]]!") \
-        __ASM_EMIT("vst1.32     {q2-q3}, [%[" d "]]!") \
-        __ASM_EMIT("sub         %[count], #16") \
-        /* x8 block */ \
-        __ASM_EMIT("4:") \
-        __ASM_EMIT("adds        %[count], #8")              /* 16 - 8 */ \
-        __ASM_EMIT("blt         6f") \
-        __ASM_EMIT("vld1.32     {q0-q1}, [%[" m "]]!")      /* q0 = m, q1 = m */ \
-        __ASM_EMIT("vld1.32     {q8-q9}, [%[" s "]]!")      /* q8 = s, q9 = s */ \
-        __ASM_EMIT(op ".f32     q0, q8")                    /* q0 = m <+-> s */ \
-        __ASM_EMIT(op ".f32     q1, q9")                    /* q1 = m <+-> s */ \
-        __ASM_EMIT("vst1.32     {q0-q1}, [%[" d "]]!") \
-        __ASM_EMIT("sub         %[count], #8") \
-        /* x4 block */ \
-        __ASM_EMIT("6:") \
-        __ASM_EMIT("adds        %[count], #4")              /* 8 - 4 */ \
-        __ASM_EMIT("blt         8f") \
-        __ASM_EMIT("vld1.32     {q0}, [%[" m "]]!")         /* q0 = m, q1 = m */ \
-        __ASM_EMIT("vld1.32     {q8}, [%[" s "]]!")         /* q8 = s, q9 = s */ \
-        __ASM_EMIT(op ".f32     q0, q8")                    /* q0 = m <+-> s */ \
-        __ASM_EMIT("vst1.32     {q0}, [%[" d "]]!") \
-        __ASM_EMIT("sub         %[count], #4") \
-        /* x1 blocks */ \
-        __ASM_EMIT("8:") \
-        __ASM_EMIT("adds        %[count], #3")              /* 4 - 1 */ \
-        __ASM_EMIT("blt         10f") \
-        __ASM_EMIT("9:") \
-        __ASM_EMIT("vldm        %[" m "]!, {s0}")           /* s0 = m */ \
-        __ASM_EMIT("vldm        %[" s "]!, {s8}")           /* s4 = s */ \
-        __ASM_EMIT(op ".f32     s0, s8")                    /* q0 = m <+-> s */ \
-        __ASM_EMIT("vstm        %[" d "]!, {s0}") \
-        __ASM_EMIT("subs        %[count], #1") \
-        __ASM_EMIT("bge         9b") \
-        __ASM_EMIT("10:")
+        #define MS_CVT_BODY(d, m, s, op)    \
+            __ASM_EMIT("subs        %[count], #16") \
+            __ASM_EMIT("blo         2f") \
+            /* x16 blocks */ \
+            __ASM_EMIT("1:") \
+            __ASM_EMIT("vldm        %[" m "]!, {q0-q3}")        /* q0 = m */ \
+            __ASM_EMIT("vldm        %[" s "]!, {q4-q7}")        /* q4 = s */ \
+            __ASM_EMIT(op ".f32     q0, q0, q4")                /* q0 = m <+-> s */ \
+            __ASM_EMIT(op ".f32     q1, q1, q5") \
+            __ASM_EMIT(op ".f32     q2, q2, q6") \
+            __ASM_EMIT(op ".f32     q3, q3, q7") \
+            __ASM_EMIT("vstm        %[" d "]!, {q0-q3}") \
+            __ASM_EMIT("subs        %[count], #16") \
+            __ASM_EMIT("bhs         1b") \
+            /* x8 block */ \
+            __ASM_EMIT("2:") \
+            __ASM_EMIT("adds        %[count], #8")              /* 16 - 8 */ \
+            __ASM_EMIT("blt         4f") \
+            __ASM_EMIT("vldm        %[" m "]!, {q0-q1}")        /* q0 = m */ \
+            __ASM_EMIT("vldm        %[" s "]!, {q4-q5}")        /* q4 = s */ \
+            __ASM_EMIT(op ".f32     q0, q0, q4")                /* q0 = m <+-> s */ \
+            __ASM_EMIT(op ".f32     q1, q1, q5") \
+            __ASM_EMIT("vstm        %[" d "]!, {q0-q1}") \
+            __ASM_EMIT("sub         %[count], #8") \
+            /* x4 block */ \
+            __ASM_EMIT("4:") \
+            __ASM_EMIT("adds        %[count], #4")              /* 8 - 4 */ \
+            __ASM_EMIT("blt         6f") \
+            __ASM_EMIT("vldm        %[" m "]!, {q0}")           /* q0 = l */ \
+            __ASM_EMIT("vldm        %[" s "]!, {q4}")           /* q4 = r */ \
+            __ASM_EMIT(op ".f32     q0, q0, q4")                /* q0 = l <+-> r */ \
+            __ASM_EMIT("vstm        %[" d "]!, {q0}") \
+            __ASM_EMIT("sub         %[count], #4") \
+            /* x1 blocks */ \
+            __ASM_EMIT("6:") \
+            __ASM_EMIT("adds        %[count], #3")              /* 4 - 1 */ \
+            __ASM_EMIT("blt         8f") \
+            __ASM_EMIT("7:") \
+            __ASM_EMIT("vld1.32     {d0[], d1[]}, [%[" m "]]!") \
+            __ASM_EMIT("vld1.32     {d8[], d9[]}, [%[" s "]]!") \
+            __ASM_EMIT(op ".f32     q0, q0, q4")                /* q0 = l <+-> r */ \
+            __ASM_EMIT("vst1.32     {d0[0]}, [%[" d "]]!") \
+            __ASM_EMIT("subs        %[count], #1") \
+            __ASM_EMIT("bge         7b") \
+            __ASM_EMIT("8:")
 
         void ms_to_left(float *l, const float *m, const float *s, size_t count)
         {
@@ -503,8 +340,7 @@ namespace lsp
                   [count] "+r" (count)
                 :
                 : "cc", "memory",
-                  "q0", "q1", "q2", "q3" , "q4", "q5", "q6", "q7",
-                  "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
+                  "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7"
             );
         }
 
@@ -518,13 +354,12 @@ namespace lsp
                   [count] "+r" (count)
                 :
                 : "cc", "memory",
-                  "q0", "q1", "q2", "q3" , "q4", "q5", "q6", "q7",
-                  "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
+                  "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7"
             );
         }
 
     #undef MS_CVT_BODY
-    }
-}
+    } /* namespace neon_d32 */
+} /* namespace lsp */
 
 #endif /* PRIVATE_DSP_ARCH_ARM_NEON_D32_MSMATRIX_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/cos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/cos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/cos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/cos.h	2025-08-26 18:15:43.706003485 +0000
@@ -0,0 +1,204 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_COS_H_
+#define PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_COS_H_
+
+#ifndef PRIVATE_DSP_ARCH_ARM_NEON_D32_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_ARM_NEON_D32_IMPL */
+
+#include <private/dsp/arch/arm/neon-d32/pmath/sin.h>
+
+namespace lsp
+{
+    namespace neon_d32
+    {
+        void cosf1(float *dst, size_t count)
+        {
+            ARCH_ARM_ASM(
+                __ASM_EMIT("vldm            %[S2C], {q8-q15}")
+                // x8 blocks
+                __ASM_EMIT("subs            %[count], #8")
+                __ASM_EMIT("blo             2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vldm            %[dst], {q0-q1}")
+                __ASM_EMIT("vsub.f32        q0, q9, q0")                // q0   = PI/2 - x1 + PI/2
+                __ASM_EMIT("vsub.f32        q1, q9, q1")                // q1   = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("subs            %[count], #8")
+                __ASM_EMIT("vstm            %[dst]!, {q0-q1}")
+                __ASM_EMIT("bhs             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("blt             4f")
+                __ASM_EMIT("vld1.32         {q0}, [%[dst]]")
+                __ASM_EMIT("vsub.f32        q0, q9, q0")                // q0   = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], #4")
+                __ASM_EMIT("vst1.32         {q0}, [%[dst]]!")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("bls             12f")
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             6f")
+                __ASM_EMIT("vld1.32         {d0[0]}, [%[dst]]!")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             8f")
+                __ASM_EMIT("vld1.32         {d1}, [%[dst]]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("vsub.f32        q0, q9, q0")                // q0   = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             10f")
+                __ASM_EMIT("sub             %[dst], #0x04")
+                __ASM_EMIT("vst1.32         {d0[0]}, [%[dst]]!")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             12f")
+                __ASM_EMIT("vst1.32         {d1}, [%[dst]]")
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "r" (&sinf_const[0])
+                : "cc", "memory",
+                  "q0", "q1", "q2", "q3",
+                  "q4", "q5", "q6", "q7",
+                  "q8", "q9", "q10", "q11",
+                  "q12", "q13", "q14", "q15"
+            );
+        }
+
+        void cosf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_ARM_ASM(
+                __ASM_EMIT("vldm            %[S2C], {q8-q15}")
+                // x8 blocks
+                __ASM_EMIT("subs            %[count], #8")
+                __ASM_EMIT("blo             2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vldm            %[src]!, {q0-q1}")
+                __ASM_EMIT("vsub.f32        q0, q9, q0")                // q0   = PI/2 - x1 + PI/2
+                __ASM_EMIT("vsub.f32        q1, q9, q1")                // q1   = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("subs            %[count], #8")
+                __ASM_EMIT("vstm            %[dst]!, {q0-q1}")
+                __ASM_EMIT("bhs             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("blt             4f")
+                __ASM_EMIT("vld1.32         {q0}, [%[src]]!")
+                __ASM_EMIT("vsub.f32        q0, q9, q0")                // q0   = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], #4")
+                __ASM_EMIT("vst1.32         {q0}, [%[dst]]!")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("bls             12f")
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             6f")
+                __ASM_EMIT("vld1.32         {d0[0]}, [%[src]]!")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             8f")
+                __ASM_EMIT("vld1.32         {d1}, [%[src]]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("vsub.f32        q0, q9, q0")                // q0   = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             10f")
+                __ASM_EMIT("vst1.32         {d0[0]}, [%[dst]]!")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             12f")
+                __ASM_EMIT("vst1.32         {d1}, [%[dst]]")
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "r" (&sinf_const[0])
+                : "cc", "memory",
+                  "q0", "q1", "q2", "q3",
+                  "q4", "q5", "q6", "q7",
+                  "q8", "q9", "q10", "q11",
+                  "q12", "q13", "q14", "q15"
+            );
+        }
+
+        void cosf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_ARM_ASM(
+                __ASM_EMIT("vld1.f32        {d8[], d9[]}, [%[k]]")      // q4   = k
+                __ASM_EMIT("vld1.f32        {d10[], d11[]}, [%[p]]")    // q5   = p
+                __ASM_EMIT("vldm            %[S2C], {q8-q15}")
+                __ASM_EMIT("vldm            %[S2KP], {q6-q7}")          // q6   = i = 0 1 2 3, q7 = 4 ...
+                __ASM_EMIT("vsub.f32        q5, q9, q5")                // q5   = PI/2 - p + PI/2
+                // x4 blocks
+                __ASM_EMIT("subs            %[count], #4")
+                __ASM_EMIT("blo             2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmul.f32        q0, q6, q4")                // q0   = k * i
+                __ASM_EMIT("vadd.f32        q6, q6, q7")                // q6   = i + 4
+                __ASM_EMIT("vsub.f32        q0, q5, q0")                // q0   = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("subs            %[count], #4")
+                __ASM_EMIT("vst1.32         {q0}, [%[dst]]!")
+                __ASM_EMIT("bhs             1b")
+                __ASM_EMIT("2:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("bls             6f")
+                __ASM_EMIT("vmul.f32        q0, q6, q4")                // q0   = k * i
+                __ASM_EMIT("vsub.f32        q0, q5, q0")                // q0   = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             4f")
+                __ASM_EMIT("vst1.32         {d0[0]}, [%[dst]]!")
+                __ASM_EMIT("vext.32         q0, q0, q0, #1")
+                __ASM_EMIT("4:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             6f")
+                __ASM_EMIT("vst1.32         {d0}, [%[dst]]")
+                // End
+                __ASM_EMIT("6:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [k] "r" (&k),
+                  [p] "r" (&p),
+                  [S2C] "r" (&sinf_const[0]),
+                  [S2KP] "r" (&kp_gen_const[0])
+                : "cc", "memory",
+                  "q0", "q1", "q2", "q3",
+                  "q4", "q5", "q6", "q7",
+                  "q8", "q9", "q10", "q11",
+                  "q12", "q13", "q14", "q15"
+            );
+        }
+
+    } /* namespace neon_d32 */
+} /* namespace lsp */
+
+
+#endif /* PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_COS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/lanczos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/lanczos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/lanczos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/lanczos.h	2025-08-26 18:15:43.706003485 +0000
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 21 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_LANCZOS_H_
+#define PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_LANCZOS_H_
+
+#ifndef PRIVATE_DSP_ARCH_ARM_NEON_D32_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_ARM_NEON_D32_IMPL */
+
+#include <private/dsp/arch/arm/neon-d32/pmath/sin.h>
+
+namespace lsp
+{
+    namespace neon_d32
+    {
+        IF_ARCH_ARM(
+            static const uint32_t lanczos_const[] __lsp_aligned16 =
+            {
+                LSP_DSP_VEC4(0x38d1b717),                   // +0x00: Sinc threshold = 1e-4
+                LSP_DSP_VEC4(0x3f800000),                   // +0x10: 1.0
+            };
+        )
+
+        typedef struct lanczos_gen_t
+        {
+            float k[4];                         // +0x00: Multiplier
+            float p[4];                         // +0x10: Initial phase
+            float a[4];                         // +0x20: Number of lobes
+            float i[4];                         // +0x30: Indices
+            float t[4];                         // +0x40: Time range
+            float x1[4];                        // +0x50: Computed X1
+            float n[4];                         // +0x60: Numerator
+            float step[4];                      // +0x70: Step
+        } lanczos_gen_t;
+
+        #define LANCZOS_GEN_FUNC_X4 \
+            /* q0 = x1 */ \
+            __ASM_EMIT("vmul.f32        q1, q0, q10")                   /* q1   = x2 = x1*a */ \
+            __ASM_EMIT("vabs.f32        q13, q0")                       /* q13  = fabsf(x1) */ \
+            __ASM_EMIT("vmul.f32        q14, q0, q1")                   /* q14  = x1*x2 */ \
+            __ASM_EMIT("vrecpe.f32      q2, q14")                       /* q2   = s2 */ \
+            __ASM_EMIT("vrecps.f32      q4, q2, q14")                   /* q4   = (2 - R*s2) */ \
+            __ASM_EMIT("vmul.f32        q2, q4, q2")                    /* q2   = s2' = s2 * (2 - R*s2) */ \
+            __ASM_EMIT("vrecps.f32      q4, q2, q14")                   /* q4   = (2 - R*s2') */ \
+            __ASM_EMIT("vmul.f32        q14, q4, q2")                   /* q14  = n = 1/(x1 * x2) */  \
+            __ASM_EMIT("vstm            %[state], {q8-q15}")            /* save state */ \
+            __ASM_EMIT("vldm            %[S2C], {q8-q15}")              /* load sine coefficients */ \
+            __ASM_EMIT("vadd.f32        q0, q0, q8")                    /* q0   = x1 + PI/2 */ \
+            __ASM_EMIT("vadd.f32        q1, q1, q8")                    /* q1   = x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X8                                    /* q0   = sinf(x1), q1 = sinf(x2) */ \
+            __ASM_EMIT("vldm            %[state], {q8-q15}")            /* load state */ \
+            __ASM_EMIT("vldm            %[LC], {q6-q7}")                /* q6   = 1e-4, q7 = 1.0 */ \
+            __ASM_EMIT("vmul.f32        q0, q0, q1")                    /* q0   = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vcge.f32        q2, q13, q6")                   /* q2   = [ fabsf(x1) >= 1e-4 ] */ \
+            __ASM_EMIT("vmul.f32        q0, q0, q14")                   /* q0   = f = sinf(x1)*sinf(x2)/(x1*x2) */ \
+            __ASM_EMIT("vcgt.f32        q3, q12, q13")                  /* q3   = [ fabsf(x1) < t ] */ \
+            __ASM_EMIT("vbif            q0, q7, q2")                    /* q0   = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vand            q0, q0, q3")                    /* q0   = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        void lanczos1(float *dst, float k, float p, float t, float a, size_t count)
+        {
+            IF_ARCH_ARM(
+                lanczos_gen_t state __lsp_aligned16;
+            );
+
+            ARCH_ARM_ASM(
+                __ASM_EMIT("vldm            %[S2KP], {q11-q12}")        // q11  = i = 0 1 2 3, q12 = 4 ...
+                __ASM_EMIT("vld1.f32        {d16[], d17[]}, [%[k]]")    // q8   = k
+                __ASM_EMIT("vld1.f32        {d18[], d19[]}, [%[p]]")    // q9   = p
+                __ASM_EMIT("vmov            q15, q12")                  // q15  = step = 4
+                __ASM_EMIT("vld1.f32        {d20[], d21[]}, [%[a]]")    // q10  = a
+                __ASM_EMIT("vld1.f32        {d24[], d25[]}, [%[t]]")    // q12  = t
+                // x4 blocks
+                __ASM_EMIT("subs            %[count], #4")
+                __ASM_EMIT("blo             2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmul.f32        q0, q8, q11")               // q0   = k * i
+                __ASM_EMIT("vadd.f32        q11, q11, q15")             // q11  = i' = i + 4
+                __ASM_EMIT("vsub.f32        q0, q0, q9")                // q0   = k*i - p
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("subs            %[count], #4")
+                __ASM_EMIT("vst1.32         {q0}, [%[dst]]!")
+                __ASM_EMIT("bhs             1b")
+                __ASM_EMIT("2:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("bls             6f")
+                __ASM_EMIT("vmul.f32        q0, q8, q11")               // q0   = k * i
+                __ASM_EMIT("vsub.f32        q0, q0, q9")                // q0   = k*i - p
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             4f")
+                __ASM_EMIT("vst1.32         {d0[0]}, [%[dst]]!")
+                __ASM_EMIT("vext.32         q0, q0, q0, #1")
+                __ASM_EMIT("4:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             6f")
+                __ASM_EMIT("vst1.32         {d0}, [%[dst]]")
+                // End
+                __ASM_EMIT("6:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [k] "r" (&k),
+                  [p] "r" (&p),
+                  [t] "r" (&t),
+                  [a] "r" (&a),
+                  [S2C] "r" (&sinf_const[0]),
+                  [S2KP] "r" (&kp_gen_const[0]),
+                  [LC] "r" (&lanczos_const[0]),
+                  [state] "r" (&state)
+                : "cc", "memory",
+                  "q0", "q1", "q2", "q3",
+                  "q4", "q5", "q6", "q7",
+                  "q8", "q9", "q10", "q11",
+                  "q12", "q13", "q14", "q15"
+            );
+        }
+
+    } /* namespace neon_d32 */
+} /* namespace lsp */
+
+
+
+
+#endif /* PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_LANCZOS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/sin.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/sin.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/sin.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath/sin.h	2025-08-26 18:15:43.706003485 +0000
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 13 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_SIN_H_
+#define PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_SIN_H_
+
+#ifndef PRIVATE_DSP_ARCH_ARM_NEON_D32_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_ARM_NEON_D32_IMPL */
+
+namespace lsp
+{
+    namespace neon_d32
+    {
+        IF_ARCH_ARM(
+            static const float kp_gen_const[] __lsp_aligned16 =
+            {
+                0.0f, 1.0f, 2.0f, 3.0f,         // +0x00: Initial values
+                LSP_DSP_VEC4(4.0),              // +0x10: Step x4
+            };
+
+            static const uint32_t sinf_const[] __lsp_aligned16 =
+            {
+                LSP_DSP_VEC4(0x3fc90fdb),       // +0x000:  PI/2
+                LSP_DSP_VEC4(0x40490fdb),       // +0x010:  PI
+                LSP_DSP_VEC4(0x3e22f983),       // +0x020:  1/(2*PI)
+                LSP_DSP_VEC4(0xb2d7322b),       // +0x030:  C0 = -1/11! = -2.50521083854e-08
+                LSP_DSP_VEC4(0x3638ef1d),       // +0x040:  C1 = 1/9! = 2.7557319224e-06
+                LSP_DSP_VEC4(0xb9500d01),       // +0x050:  C2 = -1/7! = -0.000198412698413
+                LSP_DSP_VEC4(0x3c088889),       // +0x060:  C3 = 1/5! = 0.00833333333333
+                LSP_DSP_VEC4(0xbe2aaaab),       // +0x070:  C4 = -1/3! = -0.166666666667
+            };
+        )
+
+        #define SINF_X_PLUS_PI_2_CORE_X8                \
+            /* q0   = X = x + PI/2 */ \
+            /* q8   = PI/2 */ \
+            /* q9   = PI */ \
+            /* q10  = 1/(2*PI) */ \
+            /* q11  = C0 */ \
+            /* q12  = C1 */ \
+            /* q13  = C2 */ \
+            /* q14  = C3 */ \
+            /* q15  = C4 */ \
+            __ASM_EMIT("vmul.f32        q2, q0, q10")                   /* q2   = x / (2*PI) */ \
+            __ASM_EMIT("vmul.f32        q3, q1, q10") \
+            __ASM_EMIT("vcvt.s32.f32    q4, q2")                        /* q4   = int(X / (2*PI)) */ \
+            __ASM_EMIT("vcvt.s32.f32    q5, q3") \
+            __ASM_EMIT("vadd.f32        q6, q9, q9")                    /* q6   = 2*PI */ \
+            __ASM_EMIT("vsra.s32        q4, q0, #31")                   /* q4   = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vsra.s32        q5, q1, #31") \
+            __ASM_EMIT("vcvt.f32.s32    q4, q4")                        /* q4   = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvt.f32.s32    q5, q5") \
+            __ASM_EMIT("vmls.f32        q0, q4, q6")                    /* q0   = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vmls.f32        q1, q5, q6") \
+            __ASM_EMIT("vadd.f32        q6, q8, q9")                    /* q6   = 3*PI/2 */ \
+            __ASM_EMIT("vcge.f32        q2, q0, q9")                    /* q2   = [ Y >= PI ] */ \
+            __ASM_EMIT("vcge.f32        q3, q1, q9") \
+            __ASM_EMIT("vsub.f32        q4, q6, q0")                    /* q4   = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsub.f32        q5, q6, q1") \
+            __ASM_EMIT("vsub.f32        q0, q0, q8")                    /* q0   = Y - PI/2 */ \
+            __ASM_EMIT("vsub.f32        q1, q1, q8") \
+            __ASM_EMIT("vbit            q0, q4, q2")                    /* q0   = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            __ASM_EMIT("vbit            q1, q5, q3") \
+            /* q0   = XX */ \
+            __ASM_EMIT("vmul.f32        q2, q0, q0")                    /* q2   = X2 = XX*XX */ \
+            __ASM_EMIT("vmul.f32        q3, q1, q1") \
+            __ASM_EMIT("vmul.f32        q4, q2, q11")                   /* q4   = X2*C0 */ \
+            __ASM_EMIT("vmul.f32        q5, q3, q11") \
+            __ASM_EMIT("vadd.f32        q4, q4, q12")                   /* q4   = C1 + X2*C0 */ \
+            __ASM_EMIT("vadd.f32        q5, q5, q12") \
+            __ASM_EMIT("vmul.f32        q4, q2, q4")                    /* q4   = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vmul.f32        q5, q3, q5") \
+            __ASM_EMIT("vadd.f32        q4, q4, q13")                   /* q4   = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vadd.f32        q5, q5, q13") \
+            __ASM_EMIT("vmul.f32        q4, q2, q4")                    /* q4   = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vmul.f32        q5, q3, q5") \
+            __ASM_EMIT("vadd.f32        q4, q4, q14")                   /* q4   = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vadd.f32        q5, q5, q14") \
+            __ASM_EMIT("vmul.f32        q4, q2, q4")                    /* q4   = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vmul.f32        q5, q3, q5") \
+            __ASM_EMIT("vadd.f32        q4, q4, q15")                   /* q4   = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vadd.f32        q5, q5, q15") \
+            __ASM_EMIT("vmul.f32        q4, q2, q4")                    /* q4   = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmul.f32        q5, q3, q5") \
+            __ASM_EMIT("vmla.f32        q0, q0, q4")                    /* q0   = XX*(1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */ \
+            __ASM_EMIT("vmla.f32        q1, q1, q5")
+
+        #define SINF_X_PLUS_PI_2_CORE_X4                \
+            /* q0   = X = x + PI/2 */ \
+            /* q8   = PI/2 */ \
+            /* q9   = PI */ \
+            /* q10  = 1/(2*PI) */ \
+            /* q11  = C0 */ \
+            /* q12  = C1 */ \
+            /* q13  = C2 */ \
+            /* q14  = C3 */ \
+            /* q15  = C4 */ \
+            __ASM_EMIT("vmul.f32        q1, q0, q10")                   /* q1   = x / (2*PI) */ \
+            __ASM_EMIT("vcvt.s32.f32    q2, q1")                        /* q2   = int(X / (2*PI)) */ \
+            __ASM_EMIT("vadd.f32        q3, q9, q9")                    /* q3   = 2*PI */ \
+            __ASM_EMIT("vsra.s32        q2, q0, #31")                   /* q2   = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvt.f32.s32    q2, q2")                        /* q2   = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vmls.f32        q0, q2, q3")                    /* q0   = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vadd.f32        q3, q8, q9")                    /* q3   = 3*PI/2 */ \
+            __ASM_EMIT("vcge.f32        q1, q0, q9")                    /* q1   = [ Y >= PI ] */ \
+            __ASM_EMIT("vsub.f32        q2, q3, q0")                    /* q2   = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsub.f32        q0, q0, q8")                    /* q0   = Y - PI/2 */ \
+            __ASM_EMIT("vbit            q0, q2, q1")                    /* q0   = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* q0   = XX */ \
+            __ASM_EMIT("vmul.f32        q1, q0, q0")                    /* q1   = X2 = XX*XX */ \
+            __ASM_EMIT("vmul.f32        q2, q1, q11")                   /* q2   = X2*C0 */ \
+            __ASM_EMIT("vadd.f32        q2, q2, q12")                   /* q2   = C1 + X2*C0 */ \
+            __ASM_EMIT("vmul.f32        q2, q1, q2")                    /* q2   = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vadd.f32        q2, q2, q13")                   /* q2   = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vmul.f32        q2, q1, q2")                    /* q2   = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vadd.f32        q2, q2, q14")                   /* q2   = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vmul.f32        q2, q1, q2")                    /* q2   = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vadd.f32        q2, q2, q15")                   /* q2   = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vmul.f32        q2, q1, q2")                    /* q2   = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmla.f32        q0, q0, q2")                    /* q0   = XX*(1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        void sinf1(float *dst, size_t count)
+        {
+            ARCH_ARM_ASM(
+                __ASM_EMIT("vldm            %[S2C], {q8-q15}")
+                // x8 blocks
+                __ASM_EMIT("subs            %[count], #8")
+                __ASM_EMIT("blo             2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vldm            %[dst], {q0-q1}")
+                __ASM_EMIT("vadd.f32        q0, q0, q8")                // q0   = x1 + PI/2
+                __ASM_EMIT("vadd.f32        q1, q1, q8")                // q1   = x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("subs            %[count], #8")
+                __ASM_EMIT("vstm            %[dst]!, {q0-q1}")
+                __ASM_EMIT("bhs             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("blt             4f")
+                __ASM_EMIT("vld1.32         {q0}, [%[dst]]")
+                __ASM_EMIT("vadd.f32        q0, q0, q8")                // q0   = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], #4")
+                __ASM_EMIT("vst1.32         {q0}, [%[dst]]!")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("bls             12f")
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             6f")
+                __ASM_EMIT("vld1.32         {d0[0]}, [%[dst]]!")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             8f")
+                __ASM_EMIT("vld1.32         {d1}, [%[dst]]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("vadd.f32        q0, q0, q8")                // q0   = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             10f")
+                __ASM_EMIT("sub             %[dst], #0x04")
+                __ASM_EMIT("vst1.32         {d0[0]}, [%[dst]]!")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             12f")
+                __ASM_EMIT("vst1.32         {d1}, [%[dst]]")
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "r" (&sinf_const[0])
+                : "cc", "memory",
+                  "q0", "q1", "q2", "q3",
+                  "q4", "q5", "q6", "q7",
+                  "q8", "q9", "q10", "q11",
+                  "q12", "q13", "q14", "q15"
+            );
+        }
+
+        void sinf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_ARM_ASM(
+                __ASM_EMIT("vldm            %[S2C], {q8-q15}")
+                // x8 blocks
+                __ASM_EMIT("subs            %[count], #8")
+                __ASM_EMIT("blo             2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vldm            %[src]!, {q0-q1}")
+                __ASM_EMIT("vadd.f32        q0, q0, q8")                // q0   = x1 + PI/2
+                __ASM_EMIT("vadd.f32        q1, q1, q8")                // q1   = x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("subs            %[count], #8")
+                __ASM_EMIT("vstm            %[dst]!, {q0-q1}")
+                __ASM_EMIT("bhs             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("blt             4f")
+                __ASM_EMIT("vld1.32         {q0}, [%[src]]!")
+                __ASM_EMIT("vadd.f32        q0, q0, q8")                // q0   = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("sub             %[count], #4")
+                __ASM_EMIT("vst1.32         {q0}, [%[dst]]!")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("bls             12f")
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             6f")
+                __ASM_EMIT("vld1.32         {d0[0]}, [%[src]]!")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             8f")
+                __ASM_EMIT("vld1.32         {d1}, [%[src]]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("vadd.f32        q0, q0, q8")                // q0   = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             10f")
+                __ASM_EMIT("vst1.32         {d0[0]}, [%[dst]]!")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             12f")
+                __ASM_EMIT("vst1.32         {d1}, [%[dst]]")
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "r" (&sinf_const[0])
+                : "cc", "memory",
+                  "q0", "q1", "q2", "q3",
+                  "q4", "q5", "q6", "q7",
+                  "q8", "q9", "q10", "q11",
+                  "q12", "q13", "q14", "q15"
+            );
+        }
+
+        void sinf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_ARM_ASM(
+                __ASM_EMIT("vld1.f32        {d8[], d9[]}, [%[k]]")      // q4   = k
+                __ASM_EMIT("vld1.f32        {d10[], d11[]}, [%[p]]")    // q5   = p
+                __ASM_EMIT("vldm            %[S2C], {q8-q15}")
+                __ASM_EMIT("vldm            %[S2KP], {q6-q7}")          // q6   = i = 0 1 2 3, q7 = 4 ...
+                __ASM_EMIT("vadd.f32        q5, q5, q8")                // q5   = p + PI/2
+                // x4 blocks
+                __ASM_EMIT("subs            %[count], #4")
+                __ASM_EMIT("blo             2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmul.f32        q0, q6, q4")                // q0   = k * i
+                __ASM_EMIT("vadd.f32        q6, q6, q7")                // q6   = i + 4
+                __ASM_EMIT("vadd.f32        q0, q0, q5")                // q0   = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("subs            %[count], #4")
+                __ASM_EMIT("vst1.32         {q0}, [%[dst]]!")
+                __ASM_EMIT("bhs             1b")
+                __ASM_EMIT("2:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("adds            %[count], #4")
+                __ASM_EMIT("bls             6f")
+                __ASM_EMIT("vmul.f32        q0, q6, q4")                // q0   = k * i
+                __ASM_EMIT("vadd.f32        q0, q0, q5")                // q0   = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("tst             %[count], #1")
+                __ASM_EMIT("beq             4f")
+                __ASM_EMIT("vst1.32         {d0[0]}, [%[dst]]!")
+                __ASM_EMIT("vext.32         q0, q0, q0, #1")
+                __ASM_EMIT("4:")
+                __ASM_EMIT("tst             %[count], #2")
+                __ASM_EMIT("beq             6f")
+                __ASM_EMIT("vst1.32         {d0}, [%[dst]]")
+                // End
+                __ASM_EMIT("6:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [k] "r" (&k),
+                  [p] "r" (&p),
+                  [S2C] "r" (&sinf_const[0]),
+                  [S2KP] "r" (&kp_gen_const[0])
+                : "cc", "memory",
+                  "q0", "q1", "q2", "q3",
+                  "q4", "q5", "q6", "q7",
+                  "q8", "q9", "q10", "q11",
+                  "q12", "q13", "q14", "q15"
+            );
+        }
+
+    } /* namespace neon_d32 */
+} /* namespace lsp */
+
+
+
+#endif /* PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_SIN_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/arm/neon-d32/pmath.h	2025-08-26 18:15:43.702003524 +0000
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 13 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_H_
+#define PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_H_
+
+#ifndef PRIVATE_DSP_ARCH_ARM_NEON_D32_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_ARM_NEON_D32_IMPL */
+
+#include <private/dsp/arch/arm/neon-d32/pmath/abs_vv.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/cos.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/exp.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/fmop_kx.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/fmop_vv.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/lanczos.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/log.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/lramp.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/minmax.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/op_kx.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/op_vv.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/pow.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/sin.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/sqr.h>
+#include <private/dsp/arch/arm/neon-d32/pmath/ssqrt.h>
+
+#endif /* PRIVATE_DSP_ARCH_ARM_NEON_D32_PMATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/3dmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/3dmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/3dmath.h	2025-03-01 12:42:56.788648410 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/3dmath.h	2025-08-26 18:15:43.706003485 +0000
@@ -210,344 +210,6 @@ namespace lsp
             normalize_vector(p);
         }
 
-        void init_ray_xyz(ray3d_t *l,
-            float x0, float y0, float z0,
-            float x1, float y1, float z1
-        )
-        {
-            l->z.x      = x0;
-            l->z.y      = y0;
-            l->z.z      = z0;
-            l->z.w      = 1.0f;
-
-            l->v.dx     = (x1 - x0);
-            l->v.dy     = (y1 - y0);
-            l->v.dz     = (z1 - z0);
-            l->v.dw     = 0.0f;
-        }
-
-        void init_ray_dxyz(ray3d_t *l,
-            float x0, float y0, float z0,
-            float dx, float dy, float dz
-        )
-        {
-            l->z.x      = x0;
-            l->z.y      = y0;
-            l->z.z      = z0;
-            l->z.w      = 1.0f;
-
-            l->v.dx     = dx;
-            l->v.dy     = dy;
-            l->v.dz     = dz;
-            l->v.dw     = 0.0f;
-        }
-
-        void init_ray_pdv(ray3d_t *l, const point3d_t *p, const vector3d_t *v)
-        {
-            l->z        = *p;
-            l->v        = *v;
-        }
-
-        void init_ray_p2(ray3d_t *l, const point3d_t *p1, const point3d_t *p2)
-        {
-            l->z        = *p1;
-            l->v.dx     = (p2->x - p1->x);
-            l->v.dx     = (p2->y - p1->y);
-            l->v.dx     = (p2->z - p1->z);
-            l->v.dw     = 0.0f;
-        }
-
-        void init_ray_pv(ray3d_t *l, const point3d_t *p)
-        {
-            l->z        = p[0];
-            l->v.dx     = (p[1].x - p[0].x);
-            l->v.dx     = (p[1].y - p[0].y);
-            l->v.dx     = (p[1].z - p[0].z);
-            l->v.dw     = 0.0f;
-        }
-
-        void init_ray(ray3d_t *l, const ray3d_t *r)
-        {
-            *l          = *r;
-        }
-
-        void calc_ray_xyz(ray3d_t *l,
-            float x0, float y0, float z0,
-            float x1, float y1, float z1
-        )
-        {
-            l->z.x      = x0;
-            l->z.y      = y0;
-            l->z.z      = z0;
-            l->z.w      = 1.0f;
-
-            l->v.dx     = (x1 - x0);
-            l->v.dy     = (y1 - y0);
-            l->v.dz     = (z1 - z0);
-            l->v.dw     = 0.0f;
-
-            normalize_vector(&l->v);
-        }
-
-        void calc_ray_dxyz(ray3d_t *l,
-            float x0, float y0, float z0,
-            float dx, float dy, float dz
-        )
-        {
-            l->z.x      = x0;
-            l->z.y      = y0;
-            l->z.z      = z0;
-            l->z.w      = 0.0f;
-
-            l->v.dx     = dx;
-            l->v.dy     = dy;
-            l->v.dz     = dz;
-            l->v.dw     = 0.0f;
-            normalize_vector(&l->v);
-        }
-
-        void calc_ray_pdv(ray3d_t *l, const point3d_t *p, const vector3d_t *v)
-        {
-            l->z        = *p;
-            l->v        = *v;
-            normalize_vector(&l->v);
-        }
-
-        void calc_ray_p2(ray3d_t *l, const point3d_t *p1, const point3d_t *p2)
-        {
-            l->z        = *p1;
-            l->v.dx     = (p2->x - p1->x);
-            l->v.dx     = (p2->y - p1->y);
-            l->v.dx     = (p2->z - p1->z);
-            l->v.dw     = 0.0f;
-            normalize_vector(&l->v);
-        }
-
-        void calc_ray_pv(ray3d_t *l, const point3d_t *p)
-        {
-            l->z        = p[0];
-            l->v.dx     = (p[1].x - p[0].x);
-            l->v.dx     = (p[1].y - p[0].y);
-            l->v.dx     = (p[1].z - p[0].z);
-            l->v.dw     = 0.0f;
-            normalize_vector(&l->v);
-        }
-
-        void calc_ray(ray3d_t *l, const ray3d_t *r)
-        {
-            *l          = *r;
-            normalize_vector(&l->v);
-        }
-
-        void init_segment_xyz(segment3d_t *s,
-            float x0, float y0, float z0,
-            float x1, float y1, float z1
-        )
-        {
-            s->p[0].x       = x0;
-            s->p[0].y       = y0;
-            s->p[0].z       = z0;
-            s->p[0].w       = 0.0f;
-
-            s->p[1].x       = x1;
-            s->p[1].y       = y1;
-            s->p[1].z       = z1;
-            s->p[1].w       = 0.0f;
-        }
-
-        void init_segment_p2(segment3d_t *s, const point3d_t *p1, const point3d_t *p2)
-        {
-            s->p[0]         = *p1;
-            s->p[1]         = *p2;
-        }
-
-        void init_segment_pv(segment3d_t *s, const point3d_t *p)
-        {
-            s->p[0]         = p[0];
-            s->p[1]         = p[1];
-        }
-
-        void calc_triangle3d_params(triangle3d_t *t)
-        {
-            // Calculate edge parameters
-            vector3d_t d[3];
-            d[0].dx     = t->p[1].x - t->p[0].x;
-            d[0].dy     = t->p[1].y - t->p[0].y;
-            d[0].dz     = t->p[1].z - t->p[0].z;
-            d[0].dw     = t->p[1].w - t->p[0].w;
-
-            d[1].dx     = t->p[2].x - t->p[1].x;
-            d[1].dy     = t->p[2].y - t->p[1].y;
-            d[1].dz     = t->p[2].z - t->p[1].z;
-            d[1].dw     = t->p[2].w - t->p[1].w;
-
-            d[2].dx     = t->p[2].x - t->p[0].x;
-            d[2].dy     = t->p[2].y - t->p[0].y;
-            d[2].dz     = t->p[2].z - t->p[0].z;
-            d[2].dw     = t->p[2].w - t->p[0].w;
-
-            // Do vector multiplication to calculate the normal vector
-            t->n.dx     = + d[0].dy*d[2].dz - d[0].dz*d[2].dy;
-            t->n.dy     = - d[0].dx*d[2].dz + d[0].dz*d[2].dx;
-            t->n.dz     = + d[0].dx*d[2].dy - d[0].dy*d[2].dx;
-            t->n.dw     = - ( t->n.dx * t->p[0].x + t->n.dy * t->p[0].y + t->n.dz * t->p[0].z); // Parameter for the plane equation
-
-            // Calculate lengths of edges and (additionally) length of normal
-            float l[4];
-            l[0]        = sqrtf(d[0].dx*d[0].dx + d[0].dy*d[0].dy + d[0].dz*d[0].dz);
-            l[1]        = sqrtf(d[1].dx*d[1].dx + d[1].dy*d[1].dy + d[1].dz*d[1].dz);
-            l[2]        = sqrtf(d[2].dx*d[2].dx + d[2].dy*d[2].dy + d[2].dz*d[2].dz);
-            l[3]        = sqrtf(t->n.dx*t->n.dx + t->n.dy*t->n.dy + t->n.dz*t->n.dz);
-
-            // Calculate normal length and normalize normal
-            t->n.dx    /= l[3];
-            t->n.dy    /= l[3];
-            t->n.dz    /= l[3];
-            t->n.dw    /= l[3];
-
-            // Additionally, calculate the length of edges
-            t->p[0].w   = l[0];
-            t->p[1].w   = l[1];
-            t->p[2].w   = l[2];
-        }
-
-        void init_triangle3d_xyz(triangle3d_t *t,
-                float x0, float y0, float z0,
-                float x1, float y1, float z1,
-                float x2, float y2, float z2
-            )
-        {
-            // Initalize points
-            t->p[0].x   = x0;
-            t->p[0].y   = y0;
-            t->p[0].z   = z0;
-            t->p[0].w   = 0.0f;
-
-            t->p[1].x   = x1;
-            t->p[1].y   = y1;
-            t->p[1].z   = z1;
-            t->p[1].w   = 0.0f;
-
-            t->p[2].x   = x2;
-            t->p[2].y   = y2;
-            t->p[2].z   = z2;
-            t->p[2].w   = 0.0f;
-
-            // Init normal
-            t->n.dx     = 0.0f;
-            t->n.dy     = 0.0f;
-            t->n.dz     = 0.0f;
-            t->n.dw     = 0.0f;
-        }
-
-        void init_triangle3d_p3(
-                triangle3d_t *t,
-                const point3d_t *p1,
-                const point3d_t *p2,
-                const point3d_t *p3
-            )
-        {
-            // Initalize points
-            t->p[0]     = *p1;
-            t->p[1]     = *p2;
-            t->p[2]     = *p3;
-
-            // Init normal
-            t->n.dx     = 0.0f;
-            t->n.dy     = 0.0f;
-            t->n.dz     = 0.0f;
-            t->n.dw     = 0.0f;
-        }
-
-        void init_triangle3d_pv(
-                triangle3d_t *t,
-                const point3d_t *p
-            )
-        {
-            // Initalize points
-            t->p[0]     = p[0];
-            t->p[1]     = p[1];
-            t->p[2]     = p[2];
-
-            // Init normal
-            t->n.dx     = 0.0f;
-            t->n.dy     = 0.0f;
-            t->n.dz     = 0.0f;
-            t->n.dw     = 0.0f;
-        }
-
-        void init_triangle3d(triangle3d_t *dst, const triangle3d_t *src)
-        {
-            dst->p[0]   = src->p[0];
-            dst->p[1]   = src->p[1];
-            dst->p[2]   = src->p[2];
-            dst->n      = src->n;
-        }
-
-        void calc_triangle3d_xyz(triangle3d_t *t,
-                float x0, float y0, float z0,
-                float x1, float y1, float z1,
-                float x2, float y2, float z2
-            )
-        {
-            // Initalize points
-            t->p[0].x   = x0;
-            t->p[0].y   = y0;
-            t->p[0].z   = z0;
-            t->p[0].w   = 0.0f;
-
-            t->p[1].x   = x1;
-            t->p[1].y   = y1;
-            t->p[1].z   = z1;
-            t->p[1].w   = 0.0f;
-
-            t->p[2].x   = x2;
-            t->p[2].y   = y2;
-            t->p[2].z   = z2;
-            t->p[2].w   = 0.0f;
-
-            // Calc parameters
-            calc_triangle3d_params(t);
-        }
-
-        void calc_triangle3d_p3(
-                triangle3d_t *t,
-                const point3d_t *p1,
-                const point3d_t *p2,
-                const point3d_t *p3
-            )
-        {
-            // Initalize points
-            t->p[0]     = *p1;
-            t->p[1]     = *p2;
-            t->p[2]     = *p3;
-
-            // Calc parameters
-            calc_triangle3d_params(t);
-        }
-
-        void calc_triangle3d_pv(
-                triangle3d_t *t,
-                const point3d_t *p
-            )
-        {
-            // Initalize points
-            t->p[0]     = p[0];
-            t->p[1]     = p[1];
-            t->p[2]     = p[2];
-
-            // Calc parameters
-            calc_triangle3d_params(t);
-        }
-
-        void calc_triangle3d(triangle3d_t *dst, const triangle3d_t *src)
-        {
-            dst->p[0]   = src->p[0];
-            dst->p[1]   = src->p[1];
-            dst->p[2]   = src->p[2];
-            calc_triangle3d_params(dst);
-        }
-
         void init_matrix3d(matrix3d_t *dst, const matrix3d_t *src)
         {
             *dst        = *src;
@@ -738,14 +400,17 @@ namespace lsp
             M[1]        = 0.0f;
             M[2]        = 0.0f;
             M[3]        = 0.0f;
+
             M[4]        = 0.0f;
             M[5]        = c;
             M[6]        = s;
             M[7]        = 0.0f;
+
             M[8]        = 0.0f;
             M[9]        = -s;
             M[10]       = c;
             M[11]       = 0.0f;
+
             M[12]       = 0.0f;
             M[13]       = 0.0f;
             M[14]       = 0.0f;
@@ -762,14 +427,17 @@ namespace lsp
             M[1]        = 0.0f;
             M[2]        = -s;
             M[3]        = 0.0f;
+
             M[4]        = 0.0f;
             M[5]        = 1.0f;
             M[6]        = 0.0f;
             M[7]        = 0.0f;
+
             M[8]        = s;
             M[9]        = 0.0f;
             M[10]       = c;
             M[11]       = 0.0f;
+
             M[12]       = 0.0f;
             M[13]       = 0.0f;
             M[14]       = 0.0f;
@@ -786,14 +454,17 @@ namespace lsp
             M[1]        = s;
             M[2]        = 0.0f;
             M[3]        = 0.0f;
+
             M[4]        = -s;
             M[5]        = c;
             M[6]        = 0.0f;
             M[7]        = 0.0f;
+
             M[8]        = 0.0f;
             M[9]        = 0.0f;
             M[10]       = 1.0f;
             M[11]       = 0.0f;
+
             M[12]       = 0.0f;
             M[13]       = 0.0f;
             M[14]       = 0.0f;
@@ -1176,132 +847,6 @@ namespace lsp
             }
         }
 
-        void calc_matrix3d_transform_p1v1(matrix3d_t *m, const point3d_t *p, const vector3d_t *v)
-        {
-            matrix3d_t xm;
-
-            // Initialize matrix with translation and scaling parameters
-            float l = sqrtf(v->dx * v->dx + v->dy * v->dy + v->dz * v->dz);
-            m->m[0]     = l;
-            m->m[1]     = 0.0f;
-            m->m[2]     = 0.0f;
-            m->m[3]     = 0.0f;
-
-            m->m[4]     = 0.0f;
-            m->m[5]     = l;
-            m->m[6]     = 0.0f;
-            m->m[7]     = 0.0f;
-
-            m->m[8]     = 0.0f;
-            m->m[9]     = 0.0f;
-            m->m[10]    = l;
-            m->m[11]    = 0.0f;
-
-            m->m[12]    = p->x;
-            m->m[13]    = p->y;
-            m->m[14]    = p->z;
-            m->m[15]    = 1.0f;
-
-            if (l <= 0.0f)
-                return;
-
-            // Compute normalized vector (with length = 1)
-            vector3d_t tv;
-            tv.dx       = v->dx / l;
-            tv.dy       = v->dy / l;
-            tv.dz       = v->dz / l;
-            tv.dw       = 0.0f;
-
-            // Compute theta and phi
-            float sinp  = tv.dx;
-            float cosp  = sqrtf(tv.dy*tv.dy + tv.dz*tv.dz);
-
-            // Apply rotation matrix around X axis
-            if (cosp > 0.0f)
-            {
-                float cost  = tv.dz/cosp;
-                float sint  = tv.dy/cosp;
-
-                dsp::init_matrix3d_identity(&xm);
-                xm.m[5]     = cost;
-                xm.m[6]     = -sint;
-                xm.m[9]     = sint;
-                xm.m[10]    = cost;
-                dsp::apply_matrix3d_mm1(m, &xm);
-            }
-
-            // Apply rotation matrix around Y axis
-            dsp::init_matrix3d_identity(&xm);
-            xm.m[0]     = cosp;
-            xm.m[2]     = -sinp;
-            xm.m[8]     = sinp;
-            xm.m[10]    = cosp;
-            dsp::apply_matrix3d_mm1(m, &xm);
-        }
-
-        void calc_matrix3d_transform_r1(matrix3d_t *m, const ray3d_t *r)
-        {
-            matrix3d_t xm;
-
-            // Initialize matrix with translation and scaling parameters
-            float l     = sqrtf(r->v.dx * r->v.dx + r->v.dy * r->v.dy + r->v.dz * r->v.dz);
-            m->m[0]     = l;
-            m->m[1]     = 0.0f;
-            m->m[2]     = 0.0f;
-            m->m[3]     = 0.0f;
-
-            m->m[4]     = 0.0f;
-            m->m[5]     = l;
-            m->m[6]     = 0.0f;
-            m->m[7]     = 0.0f;
-
-            m->m[8]     = 0.0f;
-            m->m[9]     = 0.0f;
-            m->m[10]    = l;
-            m->m[11]    = 0.0f;
-
-            m->m[12]    = r->z.x;
-            m->m[13]    = r->z.y;
-            m->m[14]    = r->z.z;
-            m->m[15]    = 1.0f;
-
-            if (l <= 0.0f)
-                return;
-
-            // Compute normalized vector (with length = 1)
-            vector3d_t tv;
-            tv.dx       = r->v.dx / l;
-            tv.dy       = r->v.dy / l;
-            tv.dz       = r->v.dz / l;
-            tv.dw       = 0.0f;
-
-            // Compute theta and phi
-            float sinp  = tv.dx;
-            float cosp  = sqrtf(tv.dy*tv.dy + tv.dz*tv.dz);
-
-            // Apply rotation matrix around X axis
-            if (cosp > 0.0f)
-            {
-                float cost  = tv.dz/cosp;
-                float sint  = tv.dy/cosp;
-
-                dsp::init_matrix3d_identity(&xm);
-                xm.m[5]     = cost;
-                xm.m[6]     = -sint;
-                xm.m[9]     = sint;
-                xm.m[10]    = cost;
-                dsp::apply_matrix3d_mm1(m, &xm);
-            }
-
-            // Apply rotation matrix around Y axis
-            dsp::init_matrix3d_identity(&xm);
-            xm.m[0]     = cosp;
-            xm.m[2]     = -sinp;
-            xm.m[8]     = sinp;
-            xm.m[10]    = cosp;
-            dsp::apply_matrix3d_mm1(m, &xm);
-        }
-
         void apply_matrix3d_mv2(vector3d_t *r, const vector3d_t *v, const matrix3d_t *m)
         {
             const float *M = m->m;
@@ -1520,48 +1065,6 @@ namespace lsp
             return v[2].dx * vt.dx + v[2].dy * vt.dy + v[2].dz * vt.dz;
         }
 
-        float check_triplet3d_t(const triangle3d_t *t)
-        {
-            // Calculate two vectors
-            vector3d_t  v[3];
-            v[0].dx             = t->p[1].x - t->p[0].x;
-            v[0].dy             = t->p[1].y - t->p[0].y;
-            v[0].dz             = t->p[1].z - t->p[0].z;
-
-            v[1].dx             = t->p[2].x - t->p[1].x;
-            v[1].dy             = t->p[2].y - t->p[1].y;
-            v[1].dz             = t->p[2].z - t->p[1].z;
-
-            // Calculate vector multiplication
-            v[2].dx             = v[0].dy * v[1].dz - v[0].dz * v[1].dy;
-            v[2].dy             = v[0].dz * v[1].dx - v[0].dx * v[1].dz;
-            v[2].dz             = v[0].dx * v[1].dy - v[0].dy * v[1].dx;
-
-            // Return result of scalar multiplication to the normal
-            return t->n.dx * v[2].dx + t->n.dy * v[2].dy + t->n.dz * v[2].dz;
-        }
-
-        float check_triplet3d_tn(const triangle3d_t *t, const vector3d_t *n)
-        {
-            // Calculate two vectors
-            vector3d_t  v[3];
-            v[0].dx             = t->p[1].x - t->p[0].x;
-            v[0].dy             = t->p[1].y - t->p[0].y;
-            v[0].dz             = t->p[1].z - t->p[0].z;
-
-            v[1].dx             = t->p[2].x - t->p[1].x;
-            v[1].dy             = t->p[2].y - t->p[1].y;
-            v[1].dz             = t->p[2].z - t->p[1].z;
-
-            // Calculate vector multiplication
-            v[2].dx             = v[0].dy * v[1].dz - v[0].dz * v[1].dy;
-            v[2].dy             = v[0].dz * v[1].dx - v[0].dx * v[1].dz;
-            v[2].dz             = v[0].dx * v[1].dy - v[0].dy * v[1].dx;
-
-            // Return result of scalar multiplication to the normal
-            return n->dx * v[2].dx + n->dy * v[2].dy + n->dz * v[2].dz;
-        }
-
         float check_point3d_on_triangle_p3p(const point3d_t *p1, const point3d_t *p2, const point3d_t *p3, const point3d_t *p)
         {
             // Vector parameters
@@ -1609,16 +1112,7 @@ namespace lsp
             if (r[2] < 0.0f)
                 return r[2];
 
-            // Check 4
-            r[2]                = r[0]*r[1]*r[2];
-            if (r[2] != 0.0f)
-                return r[2];
-
-            // Edge check: 3 scalar multiplications
-            r[0]                = v[0].dx * v[1].dx + v[0].dy * v[1].dy + v[0].dz * v[1].dz;
-            r[1]                = v[1].dx * v[2].dx + v[1].dy * v[2].dy + v[1].dz * v[2].dz;
-            r[2]                = v[2].dx * v[0].dx + v[2].dy * v[0].dy + v[2].dz * v[0].dz;
-
+            // The point may be located on the edge or on the vertex
             return r[0]*r[1]*r[2];
         }
 
@@ -1669,76 +1163,7 @@ namespace lsp
             if (r[2] < 0.0f)
                 return r[2];
 
-            // Check 4
-            r[2]                = r[0]*r[1]*r[2];
-            if (r[2] != 0.0f)
-                return r[2];
-
-            // Edge check: 3 scalar multiplications
-            r[0]                = v[0].dx * v[1].dx + v[0].dy * v[1].dy + v[0].dz * v[1].dz;
-            r[1]                = v[1].dx * v[2].dx + v[1].dy * v[2].dy + v[1].dz * v[2].dz;
-            r[2]                = v[2].dx * v[0].dx + v[2].dy * v[0].dy + v[2].dz * v[0].dz;
-
-            return r[0]*r[1]*r[2];
-        }
-
-        inline float check_point3d_on_triangle_tp(const triangle3d_t *t, const point3d_t *p)
-        {
-            // Vector parameters
-            vector3d_t  v[3];
-            v[0].dx             = t->p[0].x - p->x;
-            v[0].dy             = t->p[0].y - p->y;
-            v[0].dz             = t->p[0].z - p->z;
-
-            v[1].dx             = t->p[1].x - p->x;
-            v[1].dy             = t->p[1].y - p->y;
-            v[1].dz             = t->p[1].z - p->z;
-
-            v[2].dx             = t->p[2].x - p->x;
-            v[2].dy             = t->p[2].y - p->y;
-            v[2].dz             = t->p[2].z - p->z;
-
-            // Do logic
-            vector3d_t  m[3];
-            float r[3];
-
-            // Check 1: 2 vector multiplications and 1 scalar
-            m[0].dx             = v[0].dy * v[1].dz - v[0].dz * v[1].dy;
-            m[0].dy             = v[0].dz * v[1].dx - v[0].dx * v[1].dz;
-            m[0].dz             = v[0].dx * v[1].dy - v[0].dy * v[1].dx;
-
-            m[1].dx             = v[1].dy * v[2].dz - v[1].dz * v[2].dy;
-            m[1].dy             = v[1].dz * v[2].dx - v[1].dx * v[2].dz;
-            m[1].dz             = v[1].dx * v[2].dy - v[1].dy * v[2].dx;
-
-            r[0]                = m[0].dx * m[1].dx + m[0].dy * m[1].dy + m[0].dz * m[1].dz;
-            if (r[0] < 0.0f)
-                return r[0];
-
-            // Check 2: 1 vector multiplication and 1 scalar
-            m[2].dx             = v[2].dy * v[0].dz - v[2].dz * v[0].dy;
-            m[2].dy             = v[2].dz * v[0].dx - v[2].dx * v[0].dz;
-            m[2].dz             = v[2].dx * v[0].dy - v[2].dy * v[0].dx;
-
-            r[1]                = m[1].dx * m[2].dx + m[1].dy * m[2].dy + m[1].dz * m[2].dz;
-            if (r[1] < 0.0f)
-                return r[1];
-
-            // Check 3: 1 scalar multiplication
-            r[2]                = m[2].dx * m[0].dx + m[2].dy * m[0].dy + m[2].dz * m[0].dz;
-            if (r[2] < 0.0f)
-                return r[2];
-
-            // Check 4
-            r[2]                = r[0]*r[1]*r[2];
-            if (r[2] != 0.0f)
-                return r[2];
-
-            // Edge check: 3 scalar multiplications
-            r[0]                = v[0].dx * v[1].dx + v[0].dy * v[1].dy + v[0].dz * v[1].dz;
-            r[1]                = v[1].dx * v[2].dx + v[1].dy * v[2].dy + v[1].dz * v[2].dz;
-            r[2]                = v[2].dx * v[0].dx + v[2].dy * v[0].dy + v[2].dz * v[0].dz;
-
+            // The point may be located on the edge or on the vertex
             return r[0]*r[1]*r[2];
         }
 
@@ -1808,9 +1233,9 @@ namespace lsp
             r[1]                = v[1].dx * v[1].dx + v[1].dy * v[1].dy + v[1].dz * v[1].dz;
             r[2]                = v[2].dx * v[2].dx + v[2].dy * v[2].dy + v[2].dz * v[2].dz;
 
-            if (r[0] > r[1])
-                return (r[0] > r[2]) ? 0 : 2;
-            return (r[1] > r[2]) ? 1 : 2;
+            if (r[0] >= r[1])
+                return (r[0] >= r[2]) ? 0 : 2;
+            return (r[1] >= r[2]) ? 1 : 2;
         }
 
         size_t longest_edge3d_pv(const point3d_t *p)
@@ -1833,9 +1258,9 @@ namespace lsp
             r[1]                = v[1].dx * v[1].dx + v[1].dy * v[1].dy + v[1].dz * v[1].dz;
             r[2]                = v[2].dx * v[2].dx + v[2].dy * v[2].dy + v[2].dz * v[2].dz;
 
-            if (r[0] > r[1])
-                return (r[0] > r[2]) ? 0 : 2;
-            return (r[1] > r[2]) ? 1 : 2;
+            if (r[0] >= r[1])
+                return (r[0] >= r[2]) ? 0 : 2;
+            return (r[1] >= r[2]) ? 1 : 2;
         }
 
         float calc_angle3d_v2(const vector3d_t *v1, const vector3d_t *v2)
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/cos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/cos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/cos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/cos.h	2025-08-26 18:15:43.714003408 +0000
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 10 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_GENERIC_PMATH_COS_H_
+#define PRIVATE_DSP_ARCH_GENERIC_PMATH_COS_H_
+
+#ifndef PRIVATE_DSP_ARCH_GENERIC_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_GENERIC_IMPL */
+
+namespace lsp
+{
+    namespace generic
+    {
+        void cosf1(float *dst, size_t count)
+        {
+            for (size_t i=0; i<count; ++i)
+                dst[i]      = cosf(dst[i]);
+        }
+
+        void cosf2(float *dst, const float *src, size_t count)
+        {
+            for (size_t i=0; i<count; ++i)
+                dst[i]      = cosf(src[i]);
+        }
+
+        void cosf_kp1(float *dst, float k, float p, size_t count)
+        {
+            for (size_t i=0; i<count; ++i)
+                dst[i]      = cosf(k * float(i) + p);
+        }
+
+    } /* namespace generic */
+} /* namespace lsp */
+
+#endif /* PRIVATE_DSP_ARCH_GENERIC_PMATH_COS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/lanczos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/lanczos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/lanczos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/lanczos.h	2025-08-26 18:15:43.714003408 +0000
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 10 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_GENERIC_PMATH_LANCZOS_H_
+#define PRIVATE_DSP_ARCH_GENERIC_PMATH_LANCZOS_H_
+
+#ifndef PRIVATE_DSP_ARCH_GENERIC_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_GENERIC_IMPL */
+
+namespace lsp
+{
+    namespace generic
+    {
+        void lanczos1(float *dst, float k, float p, float t, float a, size_t count)
+        {
+            for (size_t j=0; j<count; ++j)
+            {
+                const float x1  = float(j)*k - p;
+                const float ax  = fabsf(x1);
+
+                if (ax < t)
+                {
+                    const float x2  = x1 * a;
+                    dst[j]          = (ax >= 1e-4f) ? (sinf(x1) * sinf(x2)) / (x1 * x2) : 1.0f;
+                }
+                else
+                    dst[j]      = 0.0f;
+            }
+        }
+
+    } /* namespace generic */
+} /* namespace lsp */
+
+
+#endif /* PRIVATE_DSP_ARCH_GENERIC_PMATH_LANCZOS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/sin.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/sin.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/sin.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath/sin.h	2025-08-26 18:15:43.714003408 +0000
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 10 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_GENERIC_PMATH_SIN_H_
+#define PRIVATE_DSP_ARCH_GENERIC_PMATH_SIN_H_
+
+#ifndef PRIVATE_DSP_ARCH_GENERIC_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_GENERIC_IMPL */
+
+namespace lsp
+{
+    namespace generic
+    {
+        void sinf1(float *dst, size_t count)
+        {
+            for (size_t i=0; i<count; ++i)
+                dst[i]      = sinf(dst[i]);
+        }
+
+        void sinf2(float *dst, const float *src, size_t count)
+        {
+            for (size_t i=0; i<count; ++i)
+                dst[i]      = sinf(src[i]);
+        }
+
+        void sinf_kp1(float *dst, float k, float p, size_t count)
+        {
+            for (size_t i=0; i<count; ++i)
+                dst[i]      = sinf(k * float(i) + p);
+        }
+
+    } /* namespace generic */
+} /* namespace lsp */
+
+#endif /* PRIVATE_DSP_ARCH_GENERIC_PMATH_SIN_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath.h	2025-03-01 12:42:56.788648410 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/generic/pmath.h	2025-08-26 18:15:43.714003408 +0000
@@ -27,9 +27,11 @@
 #endif /* PRIVATE_DSP_ARCH_GENERIC_IMPL */
 
 #include <private/dsp/arch/generic/pmath/abs_vv.h>
+#include <private/dsp/arch/generic/pmath/cos.h>
 #include <private/dsp/arch/generic/pmath/exp.h>
 #include <private/dsp/arch/generic/pmath/fmop_kx.h>
 #include <private/dsp/arch/generic/pmath/fmop_vv.h>
+#include <private/dsp/arch/generic/pmath/lanczos.h>
 #include <private/dsp/arch/generic/pmath/log.h>
 #include <private/dsp/arch/generic/pmath/lramp.h>
 #include <private/dsp/arch/generic/pmath/minmax.h>
@@ -37,6 +39,7 @@
 #include <private/dsp/arch/generic/pmath/op_kx.h>
 #include <private/dsp/arch/generic/pmath/op_vv.h>
 #include <private/dsp/arch/generic/pmath/pow.h>
+#include <private/dsp/arch/generic/pmath/sin.h>
 #include <private/dsp/arch/generic/pmath/sqr.h>
 #include <private/dsp/arch/generic/pmath/ssqrt.h>
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx/3dmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx/3dmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx/3dmath.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx/3dmath.h	2025-08-26 18:15:43.718003369 +0000
@@ -0,0 +1,3112 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 13 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX_3DMATH_H_
+#define PRIVATE_DSP_ARCH_X86_AVX_3DMATH_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_AVX_IMPL */
+
+// Normalize vector/point
+// Input:
+//   x0 = vector/point to normalize, w = 0
+//   x1 = temp
+//   x2 = temp
+// Output:
+//   x0 = normalized vector/point
+#define NORMALIZE(x0, x1, x2) /* x0 = vector/point to normalize */ \
+    __ASM_EMIT("vmulps          %" x0 ", %" x0 ", %" x2)        /* x2   = x*x y*y z*z 0 */ \
+    __ASM_EMIT("vhaddps         %" x2 ", %" x2 ", %" x1)        /* x1   = x*x+y*y z*z x*x+y*y z*z */ \
+    __ASM_EMIT("vhaddps         %" x1 ", %" x1 ", %" x1)        /* x1   = w2 w2 w2 w2 = x*x + y*y + z*z ... */ \
+    __ASM_EMIT("vxorps          %" x2 ", %" x2 ", %" x2)        /* x2   = 0 */ \
+    __ASM_EMIT("vsqrtps         %" x1 ", %" x1)                 /* x1   = w = sqrt(w2) */ \
+    __ASM_EMIT("vcmpps          $4, %" x2 ", %" x0 ", %" x2)    /* x2   = (w != 0) */ \
+    __ASM_EMIT("vdivps          %" x1 ", %" x0 ", %" x0)        /* x0   = x/w y/w z/w w/w */ \
+    __ASM_EMIT("vandps          %" x2 ", %" x0 ", %" x0)        /* x0   = (w != 0) ? x/w y/w z/w w/w : 0 */ \
+
+// Load matrix
+// Input:
+//   ptr = address of matrix
+// Output:
+//   x0 = row 0
+//   x1 = row 1
+//   x2 = row 2
+//   x3 = row 3
+#define MATRIX_LOAD(ptr, x0, x1, x2, x3) \
+    __ASM_EMIT("vmovups         0x00(%[" ptr "]), %" x0 ) \
+    __ASM_EMIT("vmovups         0x10(%[" ptr "]), %" x1 ) \
+    __ASM_EMIT("vmovups         0x20(%[" ptr "]), %" x2 ) \
+    __ASM_EMIT("vmovups         0x30(%[" ptr "]), %" x3 )
+
+// Store matrix
+// Input:
+//   ptr = address of matrix
+//   x0 = row 0
+//   x1 = row 1
+//   x2 = row 2
+//   x3 = row 3
+#define MATRIX_STORE(ptr, x0, x1, x2, x3) \
+    __ASM_EMIT("vmovups         %" x0 ", 0x00(%[" ptr "])") \
+    __ASM_EMIT("vmovups         %" x1 ", 0x10(%[" ptr "])") \
+    __ASM_EMIT("vmovups         %" x2 ", 0x20(%[" ptr "])") \
+    __ASM_EMIT("vmovups         %" x3 ", 0x30(%[" ptr "])")
+
+// Transpose 4x4 matrix
+// Input:
+//   x0 = row 0
+//   x1 = row 1
+//   x2 = row 2
+//   x3 = row 3
+//   x4 = temp
+// Output:
+//   x0 = row 0
+//   x1 = row 1
+//   x2 = row 2
+//   x3 = row 3
+#define MAT4_TRANSPOSE(x0, x1, x2, x3, x4)    \
+    __ASM_EMIT("vpunpckhdq      %" x3 ", %" x2 ", %" x4)            /* x4   = c3 d3 c4 d4 */   \
+    __ASM_EMIT("vpunpckldq      %" x3 ", %" x2 ", %" x2)            /* x2   = c1 d1 c2 d2 */   \
+    __ASM_EMIT("vpunpckhdq      %" x1 ", %" x0 ", %" x3)            /* x3   = a3 b3 a4 b4 */   \
+    __ASM_EMIT("vpunpckldq      %" x1 ", %" x0 ", %" x0)            /* x0   = a1 b1 a2 b2 */   \
+    __ASM_EMIT("vpunpckhqdq     %" x2 ", %" x0 ", %" x1)            /* x1   = a2 b2 c2 d2 */   \
+    __ASM_EMIT("vpunpcklqdq     %" x2 ", %" x0 ", %" x0)            /* x0   = a1 b1 c1 d1 */   \
+    __ASM_EMIT("vpunpcklqdq     %" x4 ", %" x3 ", %" x2)            /* x2   = a3 b3 c3 d3 */   \
+    __ASM_EMIT("vpunpckhqdq     %" x4 ", %" x3 ", %" x3)            /* x3   = a4 b4 c4 d4 */
+
+// Transpose 3x3 matrix
+// Input:
+//   x0 = row 0 = a0 a1 a2 ?
+//   x1 = row 1 = b0 b1 b2 ?
+//   x2 = row 2 = c0 c1 c2 ?
+//   x3 = temp
+// Output:
+//   x0 = row 0 = a0 b0 c0 ?
+//   x1 = row 1 = a1 b1 c1 ?
+//   x2 = row 2 = a2 b2 c2 ?
+#define MAT3_TRANSPOSE(x0, x1, x2, x3)    \
+    __ASM_EMIT("vunpckhps       %" x1 ", %" x0 ", %" x3)            /* x3   = a2 b2 ? ?     */ \
+    __ASM_EMIT("vunpcklps       %" x1 ", %" x0 ", %" x0)            /* x0   = a0 b0 a1 b1   */  \
+    __ASM_EMIT("vmovhlps        %" x0 ", %" x1 ", %" x1)            /* x1   = a1 b1 b2 ?    */ \
+    __ASM_EMIT("vmovlhps        %" x2 ", %" x0 ", %" x0)            /* x0   = a0 b0 c0 c1   */ \
+    __ASM_EMIT("vshufps         $0x54, %" x2 ", %" x1", %" x1)      /* x1   = a1 b1 c1 c1   */ \
+    __ASM_EMIT("vshufps         $0xa4, %" x2 ", %" x3", %" x2)      /* x2   = a2 b2 c2 c2   */
+
+// Multiply martix by vector
+// Input:
+//   x0 = martix row 0 (A)
+//   x1 = matrix row 1 (B)
+//   x2 = matrix row 2 (C)
+//   x3 = matrix row 3 (D)
+//   x4 = in vector, modified
+//   x5 = tmp
+//   x6 = tmp
+//   x7 = tmp
+// Output:
+//   x8 = out vector
+#define MATMUL_CORE(x0, x1, x2, x3, x4, x5, x6, x7, x8) \
+    __ASM_EMIT("vshufps         $0xff, %" x4 ", %" x4 ", %" x7)     /* x7   = v3 v3 v3 v3 */ \
+    __ASM_EMIT("vshufps         $0xaa, %" x4 ", %" x4 ", %" x6)     /* x6   = v2 v2 v2 v2 */ \
+    __ASM_EMIT("vshufps         $0x55, %" x4 ", %" x4 ", %" x5)     /* x5   = v1 v1 v1 v1 */ \
+    __ASM_EMIT("vshufps         $0x00, %" x4 ", %" x4 ", %" x4)     /* x4   = v0 v0 v0 v0 */ \
+    __ASM_EMIT("vmulps          %" x7 ", %" x3 ", %" x7)            /* x7   = d0*v3 d1*v3 d2*v3 d3*v3 */ \
+    __ASM_EMIT("vmulps          %" x6 ", %" x2 ", %" x6)            /* x6   = c0*v2 c1*v2 c2*v2 c3*v2 */ \
+    __ASM_EMIT("vmulps          %" x5 ", %" x1 ", %" x5)            /* x5   = b0*v1 d1*v1 d2*v1 d3*v1 */ \
+    __ASM_EMIT("vmulps          %" x4 ", %" x0 ", %" x4)            /* x4   = a0*v0 c1*v0 c2*v0 c3*v0 */ \
+    __ASM_EMIT("vaddps          %" x7 ", %" x6 ", %" x6) \
+    __ASM_EMIT("vaddps          %" x5 ", %" x4 ", %" x4) \
+    __ASM_EMIT("vaddps          %" x6 ", %" x4 ", %" x8)
+
+// Multiply martix by vector (FMA3)
+// Input:
+//   x0 = martix row 0 (A)
+//   x1 = matrix row 1 (B)
+//   x2 = matrix row 2 (C)
+//   x3 = matrix row 3 (D)
+//   x4 = in vector, modified
+//   x5 = tmp
+//   x6 = tmp
+//   x7 = tmp
+// Output:
+//   x8 = out vector
+ #define MATMUL_CORE_FMA3(x0, x1, x2, x3, x4, x5, x6, x7, x8) \
+     __ASM_EMIT("vshufps         $0xff, %" x4 ", %" x4 ", %" x7)     /* x7  = v3 v3 v3 v3 */ \
+     __ASM_EMIT("vshufps         $0xaa, %" x4 ", %" x4 ", %" x6)     /* x6  = v2 v2 v2 v2 */ \
+     __ASM_EMIT("vshufps         $0x55, %" x4 ", %" x4 ", %" x5)     /* x5  = v1 v1 v1 v1 */ \
+     __ASM_EMIT("vshufps         $0x00, %" x4 ", %" x4 ", %" x4)     /* x4  = v0 v0 v0 v0 */ \
+     __ASM_EMIT("vmulps          %" x6 ", %" x2 ", %" x6)            /* x6  = c0*v2 c1*v2 c2*v2 c3*v2 */ \
+     __ASM_EMIT("vmulps          %" x4 ", %" x0 ", %" x4)            /* x4  = a0*v0 c1*v0 c2*v0 c3*v0 */ \
+     __ASM_EMIT("vfmadd231ps     %" x7 ", %" x3 ", %" x6) \
+     __ASM_EMIT("vfmadd231ps     %" x5 ", %" x1 ", %" x4) \
+     __ASM_EMIT("vaddps          %" x6 ", %" x4 ", %" x8)
+
+// 1x vector cross-product (3 coordinates)
+// Input:
+//   x0 = vector1 [dx1 dy1 dz1 0 ]
+//   x1 = vector2 [dx2 dy2 dz2 0 ]
+//   x2 = temporary
+//   x3 = temporary
+//
+// Output:
+//   x0 = vector1 * vector2 [ vz vx vy 0 ]
+#define VECTOR_CROSS3(x0, x1, x2, x3) \
+    __ASM_EMIT("vshufps         $0xc9, %" x0 ", %" x0 ", %" x2)     /* x2   = dy1 dz1 dx1 0 */ \
+    __ASM_EMIT("vshufps         $0xc9, %" x1 ", %" x1 ", %" x3)     /* x3   = dy2 dz2 dx2 0 */ \
+    __ASM_EMIT("vmulps          %" x2 ", %" x1 ", %" x1)            /* x1   = dx2*dy1 dy2*dz1 dz2*dx1 0 */ \
+    __ASM_EMIT("vmulps          %" x3 ", %" x0 ", %" x0)            /* x0   = dx1*dy2 dy1*dz2 dz1*dx2 0 */ \
+    __ASM_EMIT("vsubps          %" x1 ", %" x0 ", %" x0)            /* x0   = dx1*dy2-dx2*dy1 dy1*dz2-dy2*dz1 dz1*dx2-dz2*dx1 0 = NY NZ NX 0 */ \
+
+// 1x vector cross-product (3 coordinates), FMA3
+// Input:
+//   x0 = vector1 [dx1 dy1 dz1 0 ]
+//   x1 = vector2 [dx2 dy2 dz2 0 ]
+//   x2 = temporary
+//   x3 = temporary
+//
+// Output:
+//   x0 = vector1 * vector2 [ vz vx vy 0 ]
+#define VECTOR_CROSS3_FMA3(x0, x1, x2, x3) \
+    __ASM_EMIT("vshufps         $0xc9, %" x0 ", %" x0 ", %" x2)     /* x2   = dy1 dz1 dx1 0 */ \
+    __ASM_EMIT("vshufps         $0xc9, %" x1 ", %" x1 ", %" x3)     /* x3   = dy2 dz2 dx2 0 */ \
+    __ASM_EMIT("vmulps          %" x2 ", %" x1 ", %" x1)            /* x1   = dx2*dy1 dy2*dz1 dz2*dx1 0 */ \
+    __ASM_EMIT("vfmsub213ps     %" x1 ", %" x3 ", %" x0)            /* x0   = dx1*dy2-dx2*dy1 dy1*dz2-dy2*dz1 dz1*dx2-dz2*dx1 0 = NY NZ NX 0 */
+
+/* 1x vector dot-product (3 coordinates)
+ * Input:
+ *   x0 = vector1 [dx1 dy1 dz1 0 ]
+ *   x1 = vector2 [dx2 dy2 dz2 0 ]
+ *   x2 = temporary
+ *   x3 = temporary
+ *
+ * Output:
+ *   x0 = result (scalar)
+ */
+#define VECTOR_DOT3(x0, x1, x2, x3) \
+    /* do not use DPPS as it is slow */ \
+    /* shuffles and adds work faster than vhaddps */ \
+    __ASM_EMIT("vmulps          %" x1 ", %" x0 ", %" x0)            /* x0   = dx1*dx2 dy1*dy2 dz1*dz2 ? */ \
+    __ASM_EMIT("vshufps         $0x55, %" x0 ", %" x0 ", %" x3)     /* x3   = dy1*dy2  */ \
+    __ASM_EMIT("vmovhlps        %" x0 ", %" x0 ", %" x2)            /* x2   = dz1*dz2 ? ? ? */ \
+    __ASM_EMIT("vaddss          %" x3 ", %" x0 ", %" x0)            /* x0   = dx1*dx2 + dy1*dy2 */ \
+    __ASM_EMIT("vaddss          %" x2 ", %" x0 ", %" x0)            /* x0   = dx1*dx2 + dy1*dy2 + dz1*dz2 */ \
+
+/* Compute projection of the normal to the result of cross product of two vectors (mixed product)
+ * Input:
+ *   x0 = vector a [ x0 y0 z0 0 ]
+ *   x1 = vector b [ x1 y1 z1 0 ]
+ *   x2 = vector c [ x2 y2 z2 0 ]
+ *   x3 = temporary
+ *   x4 = temporary
+ *
+ * Output:
+ *   x0 = cross product: a dot (b cross c)
+ */
+#define MIXED_PRODUCT3(x0, x1, x2, x3, x4) \
+    __ASM_EMIT("vshufps         $0xc9, %" x1 ", %" x1 ", %" x3)     /* x3   = y1 z1 x1 0 */ \
+    __ASM_EMIT("vshufps         $0xc9, %" x2 ", %" x2 ", %" x4)     /* x4   = y2 z2 x2 0 */ \
+    __ASM_EMIT("vshufps         $0xd2, %" x0 ", %" x0 ", %" x0)     /* x0   = z0 x0 y0 0 */ \
+    __ASM_EMIT("vmulps          %" x4 ", %" x1 ", %" x1)            /* x1   = x1*y2 y1*z2 z1*x2 w1*w2 */ \
+    __ASM_EMIT("vmulps          %" x3 ", %" x2 ", %" x2)            /* x2   = y1*x2 z1*y2 x1*z2 w1*w2 */ \
+    __ASM_EMIT("vsubps          %" x2 ", %" x1 ", %" x1)            /* x1   = x1*y2-y1*x2 y1*z2-z1*y2 z1*x2-x1*z2 0 = vz vx vy 0 */ \
+    __ASM_EMIT("vmulps          %" x1 ", %" x0 ", %" x0)            /* x0   = z0*vz x0*vx y0*vy 0 */ \
+    __ASM_EMIT("vmovhlps        %" x0 ", %" x2 ", %" x2)            /* x2   = y0*vy 0 ? ? */ \
+    __ASM_EMIT("vunpcklps       %" x0 ", %" x0 ", %" x0)            /* x0   = z0*vz z0*vz x0*vx x0*vx */ \
+    __ASM_EMIT("vmovhlps        %" x0 ", %" x1 ", %" x1)            /* x1   = x0*vx x0*vx ? ? */ \
+    __ASM_EMIT("vaddss          %" x2 ", %" x0 ", %" x0)            /* x0   = z0*vz + y0*vy */ \
+    __ASM_EMIT("vaddss          %" x1 ", %" x0 ", %" x0)            /* x0   = z0*vz + y0*vy + x0*vx */
+
+/* Compute projection of the normal to the result of cross product of two vectors (mixed product), FMA3 implementation
+ * Input:
+ *   x0 = vector a [ x0 y0 z0 0 ]
+ *   x1 = vector b [ x1 y1 z1 0 ]
+ *   x2 = vector c [ x2 y2 z2 0 ]
+ *   x3 = temporary
+ *   x4 = temporary
+ *
+ * Output:
+ *   x0 = cross product: a dot (b cross c)
+ */
+#define MIXED_PRODUCT3_FMA3(x0, x1, x2, x3, x4) \
+    __ASM_EMIT("vshufps         $0xc9, %" x1 ", %" x1 ", %" x3)     /* x3   = y1 z1 x1 0 */ \
+    __ASM_EMIT("vshufps         $0xc9, %" x2 ", %" x2 ", %" x4)     /* x4   = y2 z2 x2 0 */ \
+    __ASM_EMIT("vshufps         $0xd2, %" x0 ", %" x0 ", %" x0)     /* x0   = z0 x0 y0 0 */ \
+    __ASM_EMIT("vmulps          %" x4 ", %" x1 ", %" x1)            /* x1   = x1*y2 y1*z2 z1*x2 w1*w2 */ \
+    __ASM_EMIT("vfnmadd231ps    %" x3 ", %" x2 ", %" x1)            /* x1   = x1*y2-y1*x2 y1*z2-z1*y2 z1*x2-x1*z2 0 = vz vx vy 0 */ \
+    __ASM_EMIT("vmulps          %" x1 ", %" x0 ", %" x0)            /* x0   = z0*vz x0*vx y0*vy 0 */ \
+    __ASM_EMIT("vmovhlps        %" x0 ", %" x2 ", %" x2)            /* x2   = y0*vy 0 ? ? */ \
+    __ASM_EMIT("vunpcklps       %" x0 ", %" x0 ", %" x0)            /* x0   = z0*vz z0*vz x0*vx x0*vx */ \
+    __ASM_EMIT("vmovhlps        %" x0 ", %" x1 ", %" x1)            /* x1   = x0*vx x0*vx ? ? */ \
+    __ASM_EMIT("vaddss          %" x2 ", %" x0 ", %" x0)            /* x0   = z0*vz + y0*vy */ \
+    __ASM_EMIT("vaddss          %" x1 ", %" x0 ", %" x0)            /* x0   = z0*vz + y0*vy + x0*vx */
+
+
+/* 3x vector multiplication
+ * Input:
+ *   x0 = vector1 [dx0 dy0 dz0 0 ]
+ *   x1 = vector2 [dx1 dy1 dz1 0 ]
+ *   x2 = vector3 [dx2 dy2 dz2 0 ]
+ *
+ * Output:
+ *   x0 = vector1 * vector2 [ vz vx vy 0 ]
+ *   x1 = vector2 * vector3 [ vz vx vy 0 ]
+ *   x2 = vector3 * vector1 [ vz vx vy 0 ]
+ */
+#define VECTOR_CROSS3_X3(x0, x1, x2, x3, x4, x5, x6, x7) \
+    __ASM_EMIT("vshufps         $0xc9, %" x0 ", %" x0 ", %" x3) /* x3   = dy0 dz0 dx0 0 */ \
+    __ASM_EMIT("vshufps         $0xc9, %" x1 ", %" x1 ", %" x4) /* x4   = dy1 dz1 dx1 0 */ \
+    __ASM_EMIT("vshufps         $0xc9, %" x2 ", %" x2 ", %" x5) /* x5   = dy2 dz2 dx2 0 */ \
+    __ASM_EMIT("vmulps          %" x4 ", %" x0 ", %" x6)        /* x6   = dx0*dy1 dy0*dz1 dz0*dx1 0 */ \
+    __ASM_EMIT("vmulps          %" x3 ", %" x1 ", %" x7)        /* x7   = dy0*dx1 dz0*dy1 dx0*dz1 0 */ \
+    __ASM_EMIT("vmulps          %" x5 ", %" x1 ", %" x1)        /* x1   = dx1*dy2 dy1*dz2 dz1*dx2 0 */ \
+    __ASM_EMIT("vmulps          %" x2 ", %" x4 ", %" x4)        /* x4   = dy1*dx2 dz1*dy2 dx1*dz2 0 */ \
+    __ASM_EMIT("vmulps          %" x3 ", %" x2 ", %" x2)        /* x2   = dx2*dy0 dy2*dz0 dz2*dx0 0 */ \
+    __ASM_EMIT("vmulps          %" x0 ", %" x5 ", %" x5)        /* x5   = dy2*dx0 dz2*dy0 dx2*dz0 0 */ \
+    __ASM_EMIT("vsubps          %" x7 ", %" x6 ", %" x0)        /* x0   = N0 = (dx0*dy1-dy0*dx1 dy0*dz1-dz0*dy1 dz0*dx1-dx0*dz1 0) */ \
+    __ASM_EMIT("vsubps          %" x4 ", %" x1 ", %" x1)        /* x1   = N1 = (dx1*dy2-dy1*dx2 dy1*dz2-dz1*dy2 dz1*dx2-dx1*dz2 0) */ \
+    __ASM_EMIT("vsubps          %" x5 ", %" x2 ", %" x2)        /* x2   = N2 = (dx2*dy0-dy2*dx0 dy2*dz0-dz2*dy0 dz2*dx0-dx2*dz0 0)*/
+
+#define VECTOR_CROSS3_X3_FMA3(x0, x1, x2, x3, x4, x5, x6, x7) \
+    __ASM_EMIT("vshufps         $0xc9, %" x0 ", %" x0 ", %" x3) /* x3   = dy0 dz0 dx0 0 */ \
+    __ASM_EMIT("vshufps         $0xc9, %" x1 ", %" x1 ", %" x4) /* x4   = dy1 dz1 dx1 0 */ \
+    __ASM_EMIT("vshufps         $0xc9, %" x2 ", %" x2 ", %" x5) /* x5   = dy2 dz2 dx2 0 */ \
+    __ASM_EMIT("vmulps          %" x4 ", %" x0 ", %" x6)        /* x6   = dx0*dy1 dy0*dz1 dz0*dx1 0 */ \
+    __ASM_EMIT("vmulps          %" x3 ", %" x1 ", %" x7)        /* x7   = dy0*dx1 dz0*dy1 dx0*dz1 0 */ \
+    __ASM_EMIT("vmulps          %" x2 ", %" x4 ", %" x4)        /* x4   = dy1*dx2 dz1*dy2 dx1*dz2 0 */ \
+    __ASM_EMIT("vmulps          %" x3 ", %" x2 ", %" x2)        /* x2   = dx2*dy0 dy2*dz0 dz2*dx0 0 */ \
+    __ASM_EMIT("vfmsub213ps     %" x4 ", %" x5 ", %" x1)        /* x1   = N1 = (dx1*dy2-dy1*dx2 dy1*dz2-dz1*dy2 dz1*dx2-dx1*dz2 0) */ \
+    __ASM_EMIT("vfnmadd231ps    %" x0 ", %" x5 ", %" x2)        /* x2   = N2 = (dx2*dy0-dy2*dx0 dy2*dz0-dz2*dy0 dz2*dx0-dx2*dz0 0)*/ \
+    __ASM_EMIT("vsubps          %" x7 ", %" x6 ", %" x0)        /* x0   = N0 = (dx0*dy1-dy0*dx1 dy0*dz1-dz0*dy1 dz0*dx1-dx0*dz1 0) */
+
+
+/* 3x scalar multiplication
+ * Input:
+ *   x0 = vector1 [dx0 dy0 dz0 0 ]
+ *   x1 = vector2 [dx1 dy1 dz1 0 ]
+ *   x2 = vector3 [dx2 dy2 dz2 0 ]
+ *
+ * Output:
+ *   x0 = vector1 * vector2 [ a ? ? ? ]
+ *   x1 = vector2 * vector3 [ b ? ? ? ]
+ *   x2 = vector3 * vector1 [ c ? ? ? ]
+ */
+#define VECTOR_DOT3_X3(x0, x1, x2, x3) \
+    __ASM_EMIT("vmulps          %" x1 ", %" x0 ", %" x3)        /* x3   = A = dx0*dx1 dy0*dy1 dz0*dz1 0 */ \
+    __ASM_EMIT("vmulps          %" x2 ", %" x1 ", %" x1)        /* x1   = B = dx1*dx2 dy1*dy2 dz1*dz2 0 */ \
+    __ASM_EMIT("vmulps          %" x0 ", %" x2 ", %" x2)        /* x2   = C = dx2*dx0 dy2*dy0 dz2*dz0 0 */ \
+    __ASM_EMIT("vhaddps         %" x3 ", %" x3 ", %" x0)        /* x0   = ax+ay az ax+ay az */ \
+    __ASM_EMIT("vhaddps         %" x1 ", %" x1 ", %" x1)        /* x1   = bx+by bz bx+by bz */ \
+    __ASM_EMIT("vhaddps         %" x2 ", %" x2 ", %" x2)        /* x2   = cx+cy cz cx+cy cz */ \
+    __ASM_EMIT("vhaddps         %" x0 ", %" x0 ", %" x0)        /* x0   = A = ax+ay+az ... */ \
+    __ASM_EMIT("vhaddps         %" x1 ", %" x1 ", %" x1)        /* x1   = B = bx+by+bz ... */ \
+    __ASM_EMIT("vhaddps         %" x2 ", %" x2 ", %" x2)        /* x2   = C = cx+cy+cz ... */
+
+namespace lsp
+{
+    namespace avx
+    {
+        using namespace dsp;
+
+        IF_ARCH_X86(
+            static const float IDENTITY[16] __lsp_aligned32 =
+            {
+                1.0f, 0.0f, 0.0f, 0.0f,
+                0.0f, 1.0f, 0.0f, 0.0f,
+                0.0f, 0.0f, 1.0f, 0.0f,
+                0.0f, 0.0f, 0.0f, 1.0f
+            };
+            static const float ONE[] __lsp_aligned32                = { LSP_DSP_VEC8(1.0f) };
+            static const uint32_t IONE[] __lsp_aligned16            = { LSP_DSP_VEC4(1) };
+
+            static const float X_3D_MTOLERANCE[] __lsp_aligned16    = { LSP_DSP_VEC4(-DSP_3D_TOLERANCE) };
+            static const float X_3D_TOLERANCE[] __lsp_aligned16     = { LSP_DSP_VEC4(DSP_3D_TOLERANCE) };
+            static const uint32_t X_MASK0111[] __lsp_aligned16      = { 0xffffffff, 0xffffffff, 0xffffffff, 0 };
+            static const uint32_t X_SMASK0001[] __lsp_aligned16     = { 0x80000000, 0, 0, 0 };
+            static const uint32_t X_SMASK0010[] __lsp_aligned16     = { 0, 0x80000000, 0, 0 };
+            static const uint32_t X_SMASK0100[] __lsp_aligned16     = { 0, 0, 0x80000000, 0 };
+            static const uint32_t X_SMASK0111[] __lsp_aligned16     = { 0x80000000, 0x80000000, 0x80000000, 0 };
+
+            static const uint32_t ICULL3[] __lsp_aligned16          = { 0x01, 0x04, 0x10, 0 };
+        )
+
+        void init_point_xyz(point3d_t *p, float x, float y, float z)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovlhps        %[x1], %[x0], %[x0]")           // x0   = x ? y ?
+                __ASM_EMIT("vmovhps         %[id], %[x2], %[x2]")           // x2   = z ? 1 0
+                __ASM_EMIT("vshufps         $0x88, %[x2], %[x0], %[x0]")    // x0   = x y z 1
+                __ASM_EMIT("vmovups         %[x0], (%[p])")
+
+                : [x0] "+x" (x), [x1] "+x" (y), [x2] "+x"(z)
+                : [p] "r" (p),
+                  [id] "m" (IDENTITY)
+                : "memory"
+            );
+        }
+
+        void init_point(point3d_t *p, const point3d_t *s)
+        {
+            float x0;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[s]), %[x0]")
+                __ASM_EMIT("vmovups         %[x0], (%[p])")
+                : [x0] "=&x" (x0)
+                : [s] "r" (s), [p] "r" (p)
+                : "memory"
+            );
+        }
+
+        void normalize_point(point3d_t *p)
+        {
+            float x0, x1, x2;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p]), %[x0]")                 // x0   = x y z w
+                __ASM_EMIT("vandps          %[mask], %[x0], %[x0]")         // x0   = x y z 0
+                NORMALIZE("[x0]", "[x1]", "[x2]")
+                __ASM_EMIT("vinsertps       $0x30, %[id], %[x0], %[x0]")    // x0   = x y z 1
+                __ASM_EMIT("vmovups         %[x0], (%[p])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2)
+                : [p] "r" (p),
+                  [id] "m" (IDENTITY),
+                  [mask] "m" (X_MASK0111)
+                : "cc", "memory"
+            );
+        }
+
+        void init_vector_dxyz(vector3d_t *p, float dx, float dy, float dz)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovlhps        %[x1], %[x0], %[x0]")           // x0   = dx ? dy ?
+                __ASM_EMIT("vmovhps         %[id], %[x2], %[x2]")           // x2   = dz ? 1 0
+                __ASM_EMIT("vshufps         $0xc8, %[x2], %[x0], %[x0]")    // x0   = dx dy dz 0
+                __ASM_EMIT("vmovups         %[x0], (%[p])")
+
+                : [x0] "+x" (dx), [x1] "+x" (dy), [x2] "+x"(dz)
+                : [p] "r" (p),
+                  [id] "m" (IDENTITY)
+                : "memory"
+            );
+        }
+
+        void init_vector(vector3d_t *p, const vector3d_t *s)
+        {
+            float x0;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[s]), %[x0]")
+                __ASM_EMIT("vmovups         %[x0], (%[p])")
+                : [x0] "=&x" (x0)
+                : [s] "r" (s), [p] "r" (p)
+                : "memory"
+            );
+        }
+
+        void normalize_vector(vector3d_t *v)
+        {
+            float x0, x1, x2;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[v]), %[x0]")             // x0   = dx dy dz dw
+                __ASM_EMIT("vandps          %[mask], %[x0], %[x0]")     // x0   = dx dy dz 0
+                NORMALIZE("[x0]", "[x1]", "[x2]")
+                __ASM_EMIT("vmovups         %[x0], (%[v])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2)
+                : [v] "r" (v),
+                  [id] "m" (IDENTITY),
+                  [mask] "m" (X_MASK0111)
+                : "cc", "memory"
+            );
+        }
+
+        void normalize_vector2(vector3d_t *v, const vector3d_t *sv)
+        {
+            float x0, x1, x2;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[sv]), %[x0]")            // x0   = dx dy dz dw
+                __ASM_EMIT("vandps          %[mask], %[x0], %[x0]")     // x0   = dx dy dz 0
+                NORMALIZE("[x0]", "[x1]", "[x2]")
+                __ASM_EMIT("vmovups         %[x0], (%[v])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2)
+                : [v] "r" (v),
+                  [sv] "r" (sv),
+                  [id] "m" (IDENTITY),
+                  [mask] "m" (X_MASK0111)
+                : "cc", "memory"
+            );
+        }
+
+        void init_matrix3d(matrix3d_t *dst, const matrix3d_t *src)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[s]), %%ymm0")
+                __ASM_EMIT("vmovups         0x20(%[s]), %%ymm1")
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[d])")
+                __ASM_EMIT("vmovups         %%ymm1, 0x20(%[d])")
+                :
+                : [s] "r" (src), [d] "r" (dst)
+                : "memory",
+                  "%xmm0", "%xmm1"
+            );
+        }
+
+        void init_matrix3d_zero(matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vxorps          %%ymm0, %%ymm0, %%ymm0")
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[m])")
+                __ASM_EMIT("vmovups         %%ymm0, 0x20(%[m])")
+                :
+                : [m] "r" (m)
+                : "memory",
+                  "%xmm0"
+            );
+        }
+
+        void init_matrix3d_one(matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovaps         %[one], %%ymm0")
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[m])")
+                __ASM_EMIT("vmovups         %%ymm0, 0x20(%[m])")
+                :
+                : [m] "r" (m),
+                  [one] "m" (ONE)
+                : "memory",
+                  "%xmm0"
+            );
+        }
+
+        void init_matrix3d_identity(matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovaps         0x00 + %[id], %%ymm0")
+                __ASM_EMIT("vmovaps         0x20 + %[id], %%ymm1")
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[m])")
+                __ASM_EMIT("vmovups         %%ymm1, 0x20(%[m])")
+                :
+                : [m] "r" (m),
+                  [id] "o" (IDENTITY)
+                : "memory",
+                  "%xmm0", "%xmm1"
+            );
+        }
+
+        void init_matrix3d_translate(matrix3d_t *m, float dx, float dy, float dz)
+        {
+            float x3, x4, x5;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovaps         0x00 + %[id], %[x3]")           // x3   = 1 0 0 0
+                __ASM_EMIT("vmovaps         0x10 + %[id], %[x4]")           // x4   = 0 1 0 0
+                __ASM_EMIT("vmovlhps        %[x1], %[x0], %[x0]")           // x0   = x ? y ?
+                __ASM_EMIT("vmovaps         0x20 + %[id], %[x5]")           // x5   = 0 0 1 0
+                __ASM_EMIT("vmovhps         0x00 + %[id], %[x2], %[x2]")    // x2   = z ? 1 0
+                __ASM_EMIT("vshufps         $0x88, %[x2], %[x0], %[x0]")    // x0   = x y z 1
+                MATRIX_STORE("m", "[x3]", "[x4]", "[x5]", "[x0]")
+
+                : [x0] "+x" (dx), [x1] "+x" (dy), [x2] "+x"(dz),
+                  [x3] "=&x" (x3), [x4] "=&x" (x4), [x5] "=&x" (x5)
+                : [m] "r" (m),
+                  [id] "o" (IDENTITY)
+                : "memory"
+            );
+        }
+
+        void init_matrix3d_scale(matrix3d_t *m, float sx, float sy, float sz)
+        {
+            float x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")           // x3   = 0 0 0 0
+                __ASM_EMIT("vinsertps       $0x00, %[x0], %[x3], %[x0]")    // x0   = sx 0 0 0
+                __ASM_EMIT("vinsertps       $0x10, %[x1], %[x3], %[x1]")    // x0   = 0 sy 0 0
+                __ASM_EMIT("vinsertps       $0x20, %[x2], %[x3], %[x2]")    // x0   = 0 0 sz 0
+                __ASM_EMIT("vmovaps         0x30 + %[id], %[x3]")           // x3   = 0 0 0 1
+
+                MATRIX_STORE("m", "[x0]", "[x1]", "[x2]", "[x3]")
+
+                : [x0] "+x" (sx), [x1] "+x" (sy), [x2] "+x"(sz),
+                  [x3] "=&x" (x3)
+                : [m] "r" (m),
+                  [id] "o" (IDENTITY)
+                : "memory"
+            );
+        }
+
+        void init_matrix3d_rotate_x(matrix3d_t *m, float angle)
+        {
+            float s     = sinf(angle);
+            float c     = cosf(angle);
+            float x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")           // x3   = 0 0 0 0
+                __ASM_EMIT("vmovaps         0x00 + %[id], %[x2]")           // x2   = 1 0 0 0
+                __ASM_EMIT("vinsertps       $0x10, %[x0], %[x3], %[x3]")    // x3   = 0 s 0 0
+                __ASM_EMIT("vinsertps       $0x20, %[x1], %[x3], %[x3]")    // x3   = 0 s c 0
+                __ASM_EMIT("vmovaps         0x30 + %[id], %[x0]")           // x0   = 0 0 0 1
+                __ASM_EMIT("vxorps          %[mask], %[x3], %[x1]")         // x1   = 0 -s c 0
+                __ASM_EMIT("vshufps         $0xd8, %[x3], %[x3], %[x3]")    // x3   = 0 c s 0
+
+                MATRIX_STORE("m", "[x2]", "[x3]", "[x1]", "[x0]")
+
+                : [x0] "+x" (s), [x1] "+x" (c), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [m] "r" (m),
+                  [id] "o" (IDENTITY),
+                  [mask] "m" (X_SMASK0010)
+                : "memory"
+            );
+        }
+
+        void init_matrix3d_rotate_y(matrix3d_t *m, float angle)
+        {
+            float s     = sinf(angle);
+            float c     = cosf(angle);
+            float x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")           // x3   = 0 0 0 0
+                __ASM_EMIT("vmovaps         0x10 + %[id], %[x2]")           // x2   = 0 1 0 0
+                __ASM_EMIT("vinsertps       $0x20, %[x0], %[x3], %[x3]")    // x3   = 0 0 s 0
+                __ASM_EMIT("vinsertps       $0x00, %[x1], %[x3], %[x3]")    // x3   = c 0 s 0
+                __ASM_EMIT("vmovaps         0x30 + %[id], %[x0]")           // x0   = 0 0 0 1
+                __ASM_EMIT("vxorps          %[mask], %[x3], %[x1]")         // x1   = c 0 -s 0
+                __ASM_EMIT("vshufps         $0xc6, %[x3], %[x3], %[x3]")    // x3   = s 0 c 0
+
+                MATRIX_STORE("m", "[x1]", "[x2]", "[x3]", "[x0]")
+
+                : [x0] "+x" (s), [x1] "+x" (c), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [m] "r" (m),
+                  [id] "o" (IDENTITY),
+                  [mask] "m" (X_SMASK0100)
+                : "memory"
+            );
+        }
+
+        void init_matrix3d_rotate_z(matrix3d_t *m, float angle)
+        {
+            float s     = sinf(angle);
+            float c     = cosf(angle);
+            float x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")           // x3   = 0 0 0 0
+                __ASM_EMIT("vmovaps         0x20 + %[id], %[x2]")           // x2   = 0 0 1 0
+                __ASM_EMIT("vinsertps       $0x00, %[x0], %[x3], %[x3]")    // x3   = s 0 0 0
+                __ASM_EMIT("vinsertps       $0x10, %[x1], %[x3], %[x3]")    // x3   = s c 0 0
+                __ASM_EMIT("vmovaps         0x30 + %[id], %[x0]")           // x0   = 0 0 0 1
+                __ASM_EMIT("vxorps          %[mask], %[x3], %[x1]")         // x1   = -s c 0 0
+                __ASM_EMIT("vshufps         $0xe1, %[x3], %[x3], %[x3]")    // x3   = c s 0 0
+
+                MATRIX_STORE("m", "[x3]", "[x1]", "[x2]", "[x0]")
+
+                : [x0] "+x" (s), [x1] "+x" (c), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [m] "r" (m),
+                  [id] "o" (IDENTITY),
+                  [mask] "m" (X_SMASK0001)
+                : "memory"
+            );
+        }
+
+        void init_matrix3d_rotate_xyz(matrix3d_t *m, float x, float y, float z, float angle)
+        {
+            if (x == 0.0f)
+            {
+                if (y == 0.0f)
+                {
+                    if (z > 0.0f)
+                        init_matrix3d_rotate_z(m, angle);
+                    else if (z < 0.0f)
+                        init_matrix3d_rotate_z(m, -angle);
+                    else // (z == 0.0)
+                        init_matrix3d_identity(m);
+                    return;
+                }
+                else if (z == 0.0f)
+                {
+                    if (y > 0.0f)
+                        init_matrix3d_rotate_y(m, angle);
+                    else if (y < 0.0f)
+                        init_matrix3d_rotate_y(m, -angle);
+                    return;
+                }
+            }
+            else if ((y == 0.0) && (z == 0.0))
+            {
+                if (x > 0.0f)
+                    init_matrix3d_rotate_x(m, angle);
+                else
+                    init_matrix3d_rotate_x(m, -angle);
+                return;
+            }
+
+            float s = sinf(angle);
+            float c = cosf(angle);
+
+            float xx, yy, zz, xy, yz, zx, xs, ys, zs, one_c;
+            float mag = sqrtf(x*x + y*y + z*z);
+
+            x          /= mag;
+            y          /= mag;
+            z          /= mag;
+
+            xx          = x * x;
+            yy          = y * y;
+            zz          = z * z;
+            xy          = x * y;
+            yz          = y * z;
+            zx          = z * x;
+            xs          = x * s;
+            ys          = y * s;
+            zs          = z * s;
+            one_c       = 1.0f - c;
+
+            float *M    = m->m;
+            M[0]        = (one_c * xx) + c;
+            M[1]        = (one_c * xy) + zs;
+            M[2]        = (one_c * zx) - ys;
+            M[3]        = 0.0f;
+            M[4]        = (one_c * xy) - zs;
+            M[5]        = (one_c * yy) + c;
+            M[6]        = (one_c * yz) + xs;
+            M[7]        = 0.0f;
+            M[8]        = (one_c * zx) + ys;
+            M[9]        = (one_c * yz) - xs;
+            M[10]       = (one_c * zz) + c;
+            M[11]       = 0.0f;
+            M[12]       = 0.0f;
+            M[13]       = 0.0f;
+            M[14]       = 0.0f;
+            M[15]       = 0.0f;
+        }
+
+        void transpose_matrix3d1(matrix3d_t *r)
+        {
+            ARCH_X86_ASM
+            (
+                MATRIX_LOAD("m", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+                MAT4_TRANSPOSE("%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4")
+                MATRIX_STORE("m", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+                :
+                : [m] "r" (r)
+                : "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4"
+            );
+        }
+
+        void transpose_matrix3d2(matrix3d_t *r, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                MATRIX_LOAD("m", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+                MAT4_TRANSPOSE("%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4")
+                MATRIX_STORE("r", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+                :
+                : [r] "r" (r), [m] "r" (m)
+                : "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4"
+            );
+        }
+
+        void apply_matrix3d_mm2(matrix3d_t *r, const matrix3d_t *s, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                MATRIX_LOAD("A", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+
+                // Multiply matrix and store
+                __ASM_EMIT("vmovups     0x00(%[B]), %%xmm4")    // xmm4 = b0 b1 b2 b3
+                MATMUL_CORE(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                    "%xmm4")
+                __ASM_EMIT("vmovups     %%xmm4, 0x00(%[R])")
+
+                __ASM_EMIT("vmovups     0x10(%[B]), %%xmm5")    // xmm5 = b4 b5 b6 b7
+                MATMUL_CORE(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm5", "%xmm6", "%xmm7", "%xmm4",
+                    "%xmm5")
+                __ASM_EMIT("vmovups     %%xmm5, 0x10(%[R])")
+
+                __ASM_EMIT("vmovups     0x20(%[B]), %%xmm6")    // xmm6 = b4 b5 b6 b7
+                MATMUL_CORE(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm6", "%xmm7", "%xmm4", "%xmm5",
+                    "%xmm6")
+                __ASM_EMIT("vmovups     %%xmm6, 0x20(%[R])")
+
+                __ASM_EMIT("vmovups     0x30(%[B]), %%xmm7")    // xmm7 = b4 b5 b6 b7
+                MATMUL_CORE(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm7", "%xmm4", "%xmm5", "%xmm6",
+                    "%xmm7")
+                __ASM_EMIT("vmovups     %%xmm7, 0x30(%[R])")
+
+                :
+                : [A] "r" (s), [B] "r" (m), [R] "r" (r)
+                : "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void apply_matrix3d_mm1(matrix3d_t *r, const matrix3d_t *m)
+        {
+            IF_ARCH_I386(
+                matrix3d_t __lsp_aligned32 t;
+            );
+
+            ARCH_X86_ASM
+            (
+                MATRIX_LOAD("A", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+
+                // Multiply matrix and store
+                __ASM_EMIT("vmovups     0x00(%[B]), %%xmm4")    // xmm4 = b0 b1 b2 b3
+                MATMUL_CORE(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                    __IF_32("%xmm4") __IF_64("%xmm8"))
+                __ASM_EMIT32("vmovaps   %%xmm4, 0x00(%[T])")
+
+                __ASM_EMIT("vmovups     0x10(%[B]), %%xmm5")    // xmm5 = b4 b5 b6 b7
+                MATMUL_CORE(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm5", "%xmm6", "%xmm7", "%xmm4",
+                    __IF_32("%xmm5") __IF_64("%xmm9"))
+                __ASM_EMIT32("vmovaps   %%xmm5, 0x10(%[T])")
+
+                __ASM_EMIT("vmovups     0x20(%[B]), %%xmm6")    // xmm6 = b4 b5 b6 b7
+                MATMUL_CORE(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm6", "%xmm7", "%xmm4", "%xmm5",
+                    __IF_32("%xmm6") __IF_64("%xmm10"))
+                __ASM_EMIT32("vmovaps   %%xmm6, 0x20(%[T])")
+
+                __ASM_EMIT("vmovups     0x30(%[B]), %%xmm7")    // xmm7 = b4 b5 b6 b7
+                MATMUL_CORE(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm7", "%xmm4", "%xmm5", "%xmm6",
+                    __IF_32("%xmm7") __IF_64("%xmm11"))
+
+                // Save matrix (32-bit)
+                __ASM_EMIT32("vmovaps     0x00(%[T]), %%ymm4")
+                __ASM_EMIT32("vmovaps     0x20(%[T]), %%xmm6")
+                __ASM_EMIT32("vmovups     %%ymm4, 0x00(%[A])")
+                __ASM_EMIT32("vmovups     %%xmm6, 0x20(%[A])")
+                __ASM_EMIT32("vmovups     %%xmm7, 0x30(%[A])")
+
+                // Save matrix (64-bit)
+                __ASM_EMIT64("vmovups     %%xmm8, 0x00(%[A])")
+                __ASM_EMIT64("vmovups     %%xmm9, 0x10(%[A])")
+                __ASM_EMIT64("vmovups     %%xmm10, 0x20(%[A])")
+                __ASM_EMIT64("vmovups     %%xmm11, 0x30(%[A])")
+
+                :
+                : [A] "r" (r), [B] "r" (m)
+                  __IF_32(, [T] "r" (&t))
+                : "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+                  , "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+                  __IF_64(, "%xmm8", "%xmm9", "%xmm10", "%xmm11")
+            );
+        }
+
+        void apply_matrix3d_mm2_fma3(matrix3d_t *r, const matrix3d_t *s, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                MATRIX_LOAD("A", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+
+                // Multiply matrix and store
+                __ASM_EMIT("vmovups     0x00(%[B]), %%xmm4")    // xmm4 = b0 b1 b2 b3
+                MATMUL_CORE_FMA3(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                    "%xmm4")
+                __ASM_EMIT("vmovups     %%xmm4, 0x00(%[R])")
+
+                __ASM_EMIT("vmovups     0x10(%[B]), %%xmm5")    // xmm5 = b4 b5 b6 b7
+                MATMUL_CORE_FMA3(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm5", "%xmm6", "%xmm7", "%xmm4",
+                    "%xmm5")
+                __ASM_EMIT("vmovups     %%xmm5, 0x10(%[R])")
+
+                __ASM_EMIT("vmovups     0x20(%[B]), %%xmm6")    // xmm6 = b4 b5 b6 b7
+                MATMUL_CORE_FMA3(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm6", "%xmm7", "%xmm4", "%xmm5",
+                    "%xmm6")
+                __ASM_EMIT("vmovups     %%xmm6, 0x20(%[R])")
+
+                __ASM_EMIT("vmovups     0x30(%[B]), %%xmm7")    // xmm7 = b4 b5 b6 b7
+                MATMUL_CORE_FMA3(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm7", "%xmm4", "%xmm5", "%xmm6",
+                    "%xmm7")
+                __ASM_EMIT("vmovups     %%xmm7, 0x30(%[R])")
+
+                :
+                : [A] "r" (s), [B] "r" (m), [R] "r" (r)
+                : "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void apply_matrix3d_mm1_fma3(matrix3d_t *r, const matrix3d_t *m)
+        {
+            IF_ARCH_I386(
+                matrix3d_t __lsp_aligned32 t;
+            );
+
+            ARCH_X86_ASM
+            (
+                MATRIX_LOAD("A", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+
+                // Multiply matrix and store
+                __ASM_EMIT("vmovups     0x00(%[B]), %%xmm4")    // xmm4 = b0 b1 b2 b3
+                MATMUL_CORE_FMA3(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                    __IF_32("%xmm4") __IF_64("%xmm8"))
+                __ASM_EMIT32("vmovaps   %%xmm4, 0x00(%[T])")
+
+                __ASM_EMIT("vmovups     0x10(%[B]), %%xmm5")    // xmm5 = b4 b5 b6 b7
+                MATMUL_CORE_FMA3(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm5", "%xmm6", "%xmm7", "%xmm4",
+                    __IF_32("%xmm5") __IF_64("%xmm9"))
+                __ASM_EMIT32("vmovaps   %%xmm5, 0x10(%[T])")
+
+                __ASM_EMIT("vmovups     0x20(%[B]), %%xmm6")    // xmm6 = b4 b5 b6 b7
+                MATMUL_CORE_FMA3(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm6", "%xmm7", "%xmm4", "%xmm5",
+                    __IF_32("%xmm6") __IF_64("%xmm10"))
+                __ASM_EMIT32("vmovaps   %%xmm6, 0x20(%[T])")
+
+                __ASM_EMIT("vmovups     0x30(%[B]), %%xmm7")    // xmm7 = b4 b5 b6 b7
+                MATMUL_CORE_FMA3(
+                    "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                    "%xmm7", "%xmm4", "%xmm5", "%xmm6",
+                    __IF_32("%xmm7") __IF_64("%xmm11"))
+
+                // Save matrix (32-bit)
+                __ASM_EMIT32("vmovaps     0x00(%[T]), %%ymm4")
+                __ASM_EMIT32("vmovaps     0x20(%[T]), %%xmm6")
+                __ASM_EMIT32("vmovups     %%ymm4, 0x00(%[A])")
+                __ASM_EMIT32("vmovups     %%xmm6, 0x20(%[A])")
+                __ASM_EMIT32("vmovups     %%xmm7, 0x30(%[A])")
+
+                // Save matrix (64-bit)
+                __ASM_EMIT64("vmovups     %%xmm8, 0x00(%[A])")
+                __ASM_EMIT64("vmovups     %%xmm9, 0x10(%[A])")
+                __ASM_EMIT64("vmovups     %%xmm10, 0x20(%[A])")
+                __ASM_EMIT64("vmovups     %%xmm11, 0x30(%[A])")
+
+                :
+                : [A] "r" (r), [B] "r" (m)
+                  __IF_32(, [T] "r" (&t))
+                : "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+                  , "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+                  __IF_64(, "%xmm8", "%xmm9", "%xmm10", "%xmm11")
+            );
+        }
+
+        void apply_matrix3d_mv2(vector3d_t *r, const vector3d_t *v, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vbroadcastss    0x00(%[v]), %%xmm0")            // xmm0 = vx vx vx vx
+                __ASM_EMIT("vbroadcastss    0x04(%[v]), %%xmm1")            // xmm1 = vy vy vy vy
+                __ASM_EMIT("vbroadcastss    0x08(%[v]), %%xmm2")            // xmm2 = vz vz vz vz
+                __ASM_EMIT("vmulps          0x00(%[m]), %%xmm0, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vmulps          0x10(%[m]), %%xmm1, %%xmm1")    // xmm1 = vy * (m4  m5  m6  m7)
+                __ASM_EMIT("vmulps          0x20(%[m]), %%xmm2, %%xmm2")    // xmm2 = vz * (m8  m9  m10 m11)
+                __ASM_EMIT("vaddps          %%xmm1, %%xmm0, %%xmm0")
+                __ASM_EMIT("vxorps          %%xmm3, %%xmm3, %%xmm3")        // xmm3 = 0 0 0 0
+                __ASM_EMIT("vaddps          %%xmm2, %%xmm0, %%xmm0")        // xmm0 = rx ry rz rw
+                __ASM_EMIT("vshufps         $0xff, %%xmm0, %%xmm0, %%xmm1") // xmm1 = rw rw rw rw
+                __ASM_EMIT("vucomiss        %%xmm1, %%xmm3")                // xmm1 =?= xmm1
+                __ASM_EMIT("je              1f")
+                __ASM_EMIT("vdivps          %%xmm1, %%xmm0, %%xmm0")        // xmm0 = rx/r2 ry/r2 rz/rw rw/rw
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovups         %%xmm0, (%[r])")
+                :
+                : [r] "r" (r), [v] "r" (v), [m] "r" (m)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+            );
+        }
+
+        void apply_matrix3d_mv1(vector3d_t *r, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vbroadcastss    0x00(%[r]), %%xmm0")            // xmm0 = vx vx vx vx
+                __ASM_EMIT("vbroadcastss    0x04(%[r]), %%xmm1")            // xmm1 = vy vy vy vy
+                __ASM_EMIT("vbroadcastss    0x08(%[r]), %%xmm2")            // xmm2 = vz vz vz vz
+                __ASM_EMIT("vmulps          0x00(%[m]), %%xmm0, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vmulps          0x10(%[m]), %%xmm1, %%xmm1")    // xmm1 = vy * (m4  m5  m6  m7)
+                __ASM_EMIT("vmulps          0x20(%[m]), %%xmm2, %%xmm2")    // xmm2 = vz * (m8  m9  m10 m11)
+                __ASM_EMIT("vaddps          %%xmm1, %%xmm0, %%xmm0")
+                __ASM_EMIT("vxorps          %%xmm3, %%xmm3, %%xmm3")        // xmm3 = 0 0 0 0
+                __ASM_EMIT("vaddps          %%xmm2, %%xmm0, %%xmm0")        // xmm0 = rx ry rz rw
+                __ASM_EMIT("vshufps         $0xff, %%xmm0, %%xmm0, %%xmm1") // xmm1 = rw rw rw rw
+                __ASM_EMIT("vucomiss        %%xmm1, %%xmm3")                // xmm1 =?= 0
+                __ASM_EMIT("je              1f")
+                __ASM_EMIT("vdivps          %%xmm1, %%xmm0, %%xmm0")        // xmm0 = rx/r2 ry/r2 rz/rw rw/rw
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovups         %%xmm0, (%[r])")
+                :
+                : [r] "r" (r), [m] "r" (m)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+            );
+        }
+
+        void apply_matrix3d_mv2_fma3(vector3d_t *r, const vector3d_t *v, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vbroadcastss    0x00(%[v]), %%xmm0")            // xmm0 = vx vx vx vx
+                __ASM_EMIT("vbroadcastss    0x04(%[v]), %%xmm1")            // xmm1 = vy vy vy vy
+                __ASM_EMIT("vbroadcastss    0x08(%[v]), %%xmm2")            // xmm2 = vz vz vz vz
+                __ASM_EMIT("vmulps          0x00(%[m]), %%xmm0, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vxorps          %%xmm3, %%xmm3, %%xmm3")        // xmm3 = 0 0 0 0
+                __ASM_EMIT("vfmadd231ps     0x10(%[m]), %%xmm1, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vfmadd231ps     0x20(%[m]), %%xmm2, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vshufps         $0xff, %%xmm0, %%xmm0, %%xmm1") // xmm1 = rw rw rw rw
+                __ASM_EMIT("vucomiss        %%xmm1, %%xmm3")                // xmm1 =?= xmm1
+                __ASM_EMIT("je              1f")
+                __ASM_EMIT("vdivps          %%xmm1, %%xmm0, %%xmm0")        // xmm0 = rx/r2 ry/r2 rz/rw rw/rw
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovups         %%xmm0, (%[r])")
+                :
+                : [r] "r" (r), [v] "r" (v), [m] "r" (m)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+            );
+        }
+
+        void apply_matrix3d_mv1_fma3(vector3d_t *r, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vbroadcastss    0x00(%[r]), %%xmm0")            // xmm0 = vx vx vx vx
+                __ASM_EMIT("vbroadcastss    0x04(%[r]), %%xmm1")            // xmm1 = vy vy vy vy
+                __ASM_EMIT("vbroadcastss    0x08(%[r]), %%xmm2")            // xmm2 = vz vz vz vz
+                __ASM_EMIT("vmulps          0x00(%[m]), %%xmm0, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vxorps          %%xmm3, %%xmm3, %%xmm3")        // xmm3 = 0 0 0 0
+                __ASM_EMIT("vfmadd231ps     0x10(%[m]), %%xmm1, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vfmadd231ps     0x20(%[m]), %%xmm2, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vshufps         $0xff, %%xmm0, %%xmm0, %%xmm1") // xmm1 = rw rw rw rw
+                __ASM_EMIT("vucomiss        %%xmm1, %%xmm3")                // xmm1 =?= xmm1
+                __ASM_EMIT("je              1f")
+                __ASM_EMIT("vdivps          %%xmm1, %%xmm0, %%xmm0")        // xmm0 = rx/r2 ry/r2 rz/rw rw/rw
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovups         %%xmm0, (%[r])")
+                :
+                : [r] "r" (r), [m] "r" (m)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+            );
+        }
+
+        void apply_matrix3d_mp2(point3d_t *p, const point3d_t *s, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vbroadcastss    0x00(%[s]), %%xmm0")            // xmm0 = vx vx vx vx
+                __ASM_EMIT("vbroadcastss    0x04(%[s]), %%xmm1")            // xmm1 = vy vy vy vy
+                __ASM_EMIT("vbroadcastss    0x08(%[s]), %%xmm2")            // xmm2 = vz vz vz vz
+                __ASM_EMIT("vmulps          0x00(%[m]), %%xmm0, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vmulps          0x10(%[m]), %%xmm1, %%xmm1")    // xmm1 = vy * (m4  m5  m6  m7)
+                __ASM_EMIT("vmulps          0x20(%[m]), %%xmm2, %%xmm2")    // xmm2 = vz * (m8  m9  m10 m11)
+                __ASM_EMIT("vaddps          %%xmm1, %%xmm0, %%xmm0")
+                __ASM_EMIT("vaddps          0x30(%[m]), %%xmm2, %%xmm2")
+                __ASM_EMIT("vxorps          %%xmm3, %%xmm3, %%xmm3")        // xmm3 = 0 0 0 0
+                __ASM_EMIT("vaddps          %%xmm2, %%xmm0, %%xmm0")        // xmm0 = rx ry rz rw
+                __ASM_EMIT("vshufps         $0xff, %%xmm0, %%xmm0, %%xmm1") // xmm1 = rw rw rw rw
+                __ASM_EMIT("vucomiss        %%xmm1, %%xmm3")                // xmm1 =?= xmm1
+                __ASM_EMIT("je              1f")
+                __ASM_EMIT("vdivps          %%xmm1, %%xmm0, %%xmm0")        // xmm0 = rx/r2 ry/r2 rz/rw rw/rw
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovups         %%xmm0, (%[p])")
+                :
+                : [p] "r" (p), [s] "r" (s), [m] "r" (m)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+            );
+        }
+
+        void apply_matrix3d_mp1(point3d_t *p, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vbroadcastss    0x00(%[p]), %%xmm0")            // xmm0 = vx vx vx vx
+                __ASM_EMIT("vbroadcastss    0x04(%[p]), %%xmm1")            // xmm1 = vy vy vy vy
+                __ASM_EMIT("vbroadcastss    0x08(%[p]), %%xmm2")            // xmm2 = vz vz vz vz
+                __ASM_EMIT("vmulps          0x00(%[m]), %%xmm0, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vmulps          0x10(%[m]), %%xmm1, %%xmm1")    // xmm1 = vy * (m4  m5  m6  m7)
+                __ASM_EMIT("vmulps          0x20(%[m]), %%xmm2, %%xmm2")    // xmm2 = vz * (m8  m9  m10 m11)
+                __ASM_EMIT("vaddps          %%xmm1, %%xmm0, %%xmm0")
+                __ASM_EMIT("vaddps          0x30(%[m]), %%xmm2, %%xmm2")
+                __ASM_EMIT("vxorps          %%xmm3, %%xmm3, %%xmm3")        // xmm3 = 0 0 0 0
+                __ASM_EMIT("vaddps          %%xmm2, %%xmm0, %%xmm0")        // xmm0 = rx ry rz rw
+                __ASM_EMIT("vshufps         $0xff, %%xmm0, %%xmm0, %%xmm1") // xmm1 = rw rw rw rw
+                __ASM_EMIT("vucomiss        %%xmm1, %%xmm3")                // xmm1 =?= xmm1
+                __ASM_EMIT("je              1f")
+                __ASM_EMIT("vdivps          %%xmm1, %%xmm0, %%xmm0")        // xmm0 = rx/r2 ry/r2 rz/rw rw/rw
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovups         %%xmm0, (%[p])")
+                :
+                : [p] "r" (p), [m] "r" (m)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+            );
+        }
+
+        void apply_matrix3d_mp2_fma3(point3d_t *p, const point3d_t *s, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vbroadcastss    0x00(%[s]), %%xmm0")            // xmm0 = vx vx vx vx
+                __ASM_EMIT("vbroadcastss    0x04(%[s]), %%xmm1")            // xmm1 = vy vy vy vy
+                __ASM_EMIT("vbroadcastss    0x08(%[s]), %%xmm2")            // xmm2 = vz vz vz vz
+                __ASM_EMIT("vmulps          0x00(%[m]), %%xmm0, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vmovups         0x30(%[m]), %%xmm3")            // xmm3 = (m12 m13 m14 m15)
+                __ASM_EMIT("vfmadd231ps     0x10(%[m]), %%xmm1, %%xmm0")
+                __ASM_EMIT("vfmadd231ps     0x20(%[m]), %%xmm2, %%xmm3")
+                __ASM_EMIT("vxorps          %%xmm1, %%xmm1, %%xmm1")        // xmm1 = 0 0 0 0
+                __ASM_EMIT("vaddps          %%xmm3, %%xmm0, %%xmm0")        // xmm0 = rx ry rz rw
+                __ASM_EMIT("vshufps         $0xff, %%xmm0, %%xmm0, %%xmm2") // xmm1 = rw rw rw rw
+                __ASM_EMIT("vucomiss        %%xmm2, %%xmm1")                // xmm2 =?= xmm2
+                __ASM_EMIT("je              1f")
+                __ASM_EMIT("vdivps          %%xmm2, %%xmm0, %%xmm0")        // xmm0 = rx/r2 ry/r2 rz/rw rw/rw
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovups         %%xmm0, (%[p])")
+                :
+                : [p] "r" (p), [s] "r" (s), [m] "r" (m)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+            );
+        }
+
+        void apply_matrix3d_mp1_fma3(point3d_t *p, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vbroadcastss    0x00(%[p]), %%xmm0")            // xmm0 = vx vx vx vx
+                __ASM_EMIT("vbroadcastss    0x04(%[p]), %%xmm1")            // xmm1 = vy vy vy vy
+                __ASM_EMIT("vbroadcastss    0x08(%[p]), %%xmm2")            // xmm2 = vz vz vz vz
+                __ASM_EMIT("vmulps          0x00(%[p]), %%xmm0, %%xmm0")    // xmm0 = vx * (m0  m1  m2  m3)
+                __ASM_EMIT("vmovups         0x30(%[m]), %%xmm3")            // xmm3 = (m12 m13 m14 m15)
+                __ASM_EMIT("vfmadd231ps     0x10(%[m]), %%xmm1, %%xmm0")
+                __ASM_EMIT("vfmadd231ps     0x20(%[m]), %%xmm2, %%xmm3")
+                __ASM_EMIT("vxorps          %%xmm1, %%xmm1, %%xmm1")        // xmm1 = 0 0 0 0
+                __ASM_EMIT("vaddps          %%xmm3, %%xmm0, %%xmm0")        // xmm0 = rx ry rz rw
+                __ASM_EMIT("vshufps         $0xff, %%xmm0, %%xmm0, %%xmm2") // xmm1 = rw rw rw rw
+                __ASM_EMIT("vucomiss        %%xmm2, %%xmm1")                // xmm2 =?= xmm2
+                __ASM_EMIT("je              1f")
+                __ASM_EMIT("vdivps          %%xmm2, %%xmm0, %%xmm0")        // xmm0 = rx/r2 ry/r2 rz/rw rw/rw
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovups         %%xmm0, (%[p])")
+                :
+                : [p] "r" (p), [m] "r" (m)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3"
+            );
+        }
+
+        float calc_area_p3(const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p0]), %[x2]")                /* x2   = p0 = x0 y0 z0 w0 */
+                __ASM_EMIT("vmovups         (%[p1]), %[x0]")                /* x1   = p1 = x1 y1 z1 w1 */
+                __ASM_EMIT("vmovups         (%[p2]), %[x1]")                /* x2   = p2 = x2 y2 z2 w2 */
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")           /* x0   = p1 - p0 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("vsubps          %[x2], %[x1], %[x1]")           /* x1   = p2 - p0 = dx2 dy2 dz2 0 */
+                VECTOR_CROSS3("[x0]", "[x1]", "[x2]", "[x3]")               /* x0   = NZ NX NY 0 */
+                VECTOR_DOT3("[x0]", "[x0]", "[x1]", "[x2]")                 /* x0   = NX*NX + NY*NY + NZ*NZ */
+                __ASM_EMIT("vsqrtss         %[x0], %[x0], %[x0]")           /* x0   = sqrtf(NX*NX + NY*NY + NZ*NZ) */
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [p0] "r" (p0), [p1] "r" (p1), [p2] "r" (p2)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        float calc_area_pv(const point3d_t *pv)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[pv]), %[x2]")            /* x0   = p0 = x0 y0 z0 w0 */
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x0]")            /* x1   = p1 = x1 y1 z1 w1 */
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x1]")            /* x2   = p2 = x2 y2 z2 w2 */
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")           /* x0   = p1 - p0 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("vsubps          %[x2], %[x1], %[x1]")           /* x1   = p2 - p0 = dx2 dy2 dz2 0 */
+                VECTOR_CROSS3("[x0]", "[x1]", "[x2]", "[x3]")               /* x0   = NZ NX NY 0 */
+                VECTOR_DOT3("[x0]", "[x0]", "[x1]", "[x2]")                 /* x0   = NX*NX + NY*NY + NZ*NZ */
+                __ASM_EMIT("vsqrtss         %[x0], %[x0], %[x0]")           /* x0   = sqrtf(NX*NX + NY*NY + NZ*NZ) */
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [pv] "r" (pv)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        float calc_area_p3_fma3(const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p0]), %[x2]")                /* x2   = x0 y0 z0 w0 */
+                __ASM_EMIT("vmovups         (%[p1]), %[x0]")                /* x1   = x1 y1 z1 w1 */
+                __ASM_EMIT("vmovups         (%[p2]), %[x1]")                /* x2   = x2 y2 z2 w2 */
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")           /* x0   = p1 - p0 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("vsubps          %[x2], %[x1], %[x1]")           /* x1   = p2 - p0 = dx2 dy2 dz2 0 */
+                VECTOR_CROSS3_FMA3("[x0]", "[x1]", "[x2]", "[x3]")          /* x0   = NZ NX NY 0 */
+                VECTOR_DOT3("[x0]", "[x0]", "[x1]", "[x2]")                 /* x0   = NX*NX + NY*NY + NZ*NZ */
+                __ASM_EMIT("vsqrtss         %[x0], %[x0], %[x0]")           /* x0   = sqrtf(NX*NX + NY*NY + NZ*NZ) */
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [p0] "r" (p0), [p1] "r" (p1), [p2] "r" (p2)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        float calc_area_pv_fma3(const point3d_t *pv)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[pv]), %[x2]")            /* x0   = x0 y0 z0 w0 */
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x0]")            /* x1   = x1 y1 z1 w1 */
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x1]")            /* x2   = x2 y2 z2 w2 */
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")           /* x0   = p1 - p0 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("vsubps          %[x2], %[x1], %[x1]")           /* x1   = p2 - p0 = dx2 dy2 dz2 0 */
+                VECTOR_CROSS3_FMA3("[x0]", "[x1]", "[x2]", "[x3]")          /* x0   = NZ NX NY 0 */
+                VECTOR_DOT3("[x0]", "[x0]", "[x1]", "[x2]")                 /* x0   = NX*NX + NY*NY + NZ*NZ */
+                __ASM_EMIT("vsqrtss         %[x0], %[x0], %[x0]")           /* x0   = sqrtf(NX*NX + NY*NY + NZ*NZ) */
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [pv] "r" (pv)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        size_t colocation_x2_v1p2(const vector3d_t *pl, const point3d_t *p0, const point3d_t *p1)
+        {
+            float x0, x1, x2;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[pl]), %[x2]")                /* x2   = pl    */
+                __ASM_EMIT("vmulps          (%[p0]), %[x2], %[x0]")         /* x0   = x0*px y0*py z0*pz w0*pw */
+                __ASM_EMIT("vmulps          (%[p1]), %[x2], %[x1]")         /* x1   = x1*px y1*py z1*pz w1*pw */
+                __ASM_EMIT("vhaddps         %[x1], %[x0], %[x0]")           /* x0   = x0*px+y0*py z0*pz+w0*pw x1*px+y1*py z1*pz+w1*pw */
+                __ASM_EMIT("vhaddps         %[x0], %[x0], %[x0]")           /* x0   = x1*px+y1*py+z1*pz+w1*pw x1*px+y1*py+z1*pz+w1*pw ? ? = k0 k1 ? ? */
+
+                __ASM_EMIT("vcmpps          $1, %[MTOL], %[x0], %[x1]")     /* x1   = k0 < -TOL  k1 < -TOL ? ? */
+                __ASM_EMIT("vcmpps          $2, %[PTOL], %[x0], %[x2]")     /* x2   = k0 <= +TOL k1 <= +TOL ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x1], %[x1]")         /* x1   = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x2], %[x2]")         /* x2   = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("vpaddd          %[x1], %[x2], %[x0]")
+                __ASM_EMIT("vextractps      $0x00, %[x0], %[p0]")
+                __ASM_EMIT("vextractps      $0x01, %[x0], %[p1]")
+                __ASM_EMIT("lea             (%[p0], %[p1], 4), %[p0]")
+                : [p0] "+r" (p0), [p1] "+r" (p1),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2)
+                : [pl] "r" (pl),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc", "memory"
+            );
+
+            return size_t(p0);
+        }
+
+        size_t colocation_x2_v1pv(const vector3d_t *pl, const point3d_t *pv)
+        {
+            float x0, x1, x2;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[pl]), %[x2]")                /* x2   = pl    */
+                __ASM_EMIT("vmulps          0x00(%[pv]), %[x2], %[x0]")     /* x0   = x0*px y0*py z0*pz w0*pw */
+                __ASM_EMIT("vmulps          0x10(%[pv]), %[x2], %[x1]")     /* x1   = x1*px y1*py z1*pz w1*pw */
+                __ASM_EMIT("vhaddps         %[x1], %[x0], %[x0]")           /* x0   = x0*px+y0*py z0*pz+w0*pw x1*px+y1*py z1*pz+w1*pw */
+                __ASM_EMIT("vhaddps         %[x0], %[x0], %[x0]")           /* x0   = x1*px+y1*py+z1*pz+w1*pw x1*px+y1*py+z1*pz+w1*pw ? ? = k0 k1 ? ? */
+
+                __ASM_EMIT("vcmpps          $1, %[MTOL], %[x0], %[x1]")     /* x1   = k0 < -TOL  k1 < -TOL ? ? */
+                __ASM_EMIT("vcmpps          $2, %[PTOL], %[x0], %[x2]")     /* x2   = k0 <= +TOL k1 <= +TOL ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x1], %[x1]")         /* x1   = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x2], %[x2]")         /* x2   = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("vpaddd          %[x1], %[x2], %[x0]")
+                __ASM_EMIT("vextractps      $0x00, %[x0], %[pl]")
+                __ASM_EMIT("vextractps      $0x01, %[x0], %[pv]")
+                __ASM_EMIT("lea             (%[pl], %[pv], 4), %[pl]")
+                : [pl] "+r" (pl), [pv] "+r" (pv),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2)
+                : [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc", "memory"
+            );
+
+            return size_t(pl);
+        }
+
+        size_t colocation_x3_v1p3(const vector3d_t *pl, const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[pl]), %[x3]")                /* x3   = pl    */
+                __ASM_EMIT("vmulps          (%[p0]), %[x3], %[x0]")         /* x0   = p0 * pl */
+                __ASM_EMIT("vmulps          (%[p1]), %[x3], %[x1]")         /* x1   = p1 * pl */
+                __ASM_EMIT("vmulps          (%[p2]), %[x3], %[x2]")         /* x2   = p2 * pl */
+                __ASM_EMIT("vhaddps         %[x1], %[x0], %[x0]")
+                __ASM_EMIT("vhaddps         %[x3], %[x2], %[x2]")
+                __ASM_EMIT("vhaddps         %[x2], %[x0], %[x0]")           /* x0    = k0 k1 k2 ? */
+                __ASM_EMIT("vcmpps          $1, %[MTOL], %[x0], %[x1]")     /* x1   = k0 < -TOL  k1 < -TOL ? ? */
+                __ASM_EMIT("vcmpps          $2, %[PTOL], %[x0], %[x2]")     /* x2   = k0 <= +TOL k1 <= +TOL ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x1], %[x1]")         /* x1   = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x2], %[x2]")         /* x2   = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("vpaddd          %[x1], %[x2], %[x0]")
+                __ASM_EMIT("vextractps      $0x00, %[x0], %[p0]")
+                __ASM_EMIT("vextractps      $0x01, %[x0], %[p1]")
+                __ASM_EMIT("vextractps      $0x02, %[x0], %[p2]")
+                __ASM_EMIT("lea             (%[p1], %[p2], 4), %[p1]")
+                __ASM_EMIT("lea             (%[p0], %[p1], 4), %[p0]")
+                : [p0] "+r" (p0), [p1] "+r" (p1), [p2] "+r" (p2),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [pl] "r" (pl),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc", "memory"
+            );
+
+            return size_t(p0);
+        }
+
+        size_t colocation_x3_v1pv(const vector3d_t *pl, const point3d_t *pv)
+        {
+            float x0, x1, x2, x3;
+            size_t pt;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[pl]), %[x3]")                /* x3   = pl    */
+                __ASM_EMIT("vmulps          0x00(%[pv]), %[x3], %[x0]")     /* x0   = p0 * pl */
+                __ASM_EMIT("vmulps          0x10(%[pv]), %[x3], %[x1]")     /* x1   = p1 * pl */
+                __ASM_EMIT("vmulps          0x20(%[pv]), %[x3], %[x2]")     /* x2   = p2 * pl */
+                __ASM_EMIT("vhaddps         %[x1], %[x0], %[x0]")
+                __ASM_EMIT("vhaddps         %[x3], %[x2], %[x2]")
+                __ASM_EMIT("vhaddps         %[x2], %[x0], %[x0]")           /* x0   = k0 k1 k2 ? */
+                __ASM_EMIT("vcmpps          $1, %[MTOL], %[x0], %[x1]")     /* x1   = k0 < -TOL  k1 < -TOL ? ? */
+                __ASM_EMIT("vcmpps          $2, %[PTOL], %[x0], %[x2]")     /* x2   = k0 <= +TOL k1 <= +TOL ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x1], %[x1]")         /* x1   = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x2], %[x2]")         /* x2   = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("vpaddd          %[x1], %[x2], %[x0]")
+                __ASM_EMIT("vextractps      $0x00, %[x0], %[pt]")
+                __ASM_EMIT("vextractps      $0x01, %[x0], %[pl]")
+                __ASM_EMIT("vextractps      $0x02, %[x0], %[pv]")
+                __ASM_EMIT("lea             (%[pl], %[pv], 4), %[pl]")
+                __ASM_EMIT("lea             (%[pt], %[pl], 4), %[pt]")
+                : [pl] "+r" (pl), [pv] "+r" (pv), [pt] "=&r" (pt),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc", "memory"
+            );
+
+            return pt;
+        }
+
+        size_t colocation_x3_v3p1(const vector3d_t *v0, const vector3d_t *v1, const vector3d_t *v2, const point3d_t *p)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p]), %[x3]")                 /* x3   = p       */
+                __ASM_EMIT("vmulps          (%[v0]), %[x3], %[x0]")         /* x0   = v0 * p  */
+                __ASM_EMIT("vmulps          (%[v1]), %[x3], %[x1]")         /* x1   = v1 * p  */
+                __ASM_EMIT("vmulps          (%[v2]), %[x3], %[x2]")         /* x2   = v2 * p  */
+                __ASM_EMIT("vhaddps         %[x1], %[x0], %[x0]")
+                __ASM_EMIT("vhaddps         %[x3], %[x2], %[x2]")
+                __ASM_EMIT("vhaddps         %[x2], %[x0], %[x0]")           /* x0    = k0 k1 k2 ? */
+                __ASM_EMIT("vcmpps          $1, %[MTOL], %[x0], %[x1]")     /* x1   = k0 < -TOL  k1 < -TOL ? ? */
+                __ASM_EMIT("vcmpps          $2, %[PTOL], %[x0], %[x2]")     /* x2   = k0 <= +TOL k1 <= +TOL ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x1], %[x1]")         /* x1   = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x2], %[x2]")         /* x2   = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("vpaddd          %[x1], %[x2], %[x0]")
+                __ASM_EMIT("vextractps      $0x00, %[x0], %[v0]")
+                __ASM_EMIT("vextractps      $0x01, %[x0], %[v1]")
+                __ASM_EMIT("vextractps      $0x02, %[x0], %[v2]")
+                __ASM_EMIT("lea             (%[v1], %[v2], 4), %[v1]")
+                __ASM_EMIT("lea             (%[v0], %[v1], 4), %[v0]")
+
+                : [v0] "+r" (v0), [v1] "+r" (v1), [v2] "+r" (v2),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [p] "r" (p),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc", "memory"
+            );
+
+            return size_t(v0);
+        }
+
+        size_t colocation_x3_vvp1(const vector3d_t *vv, const point3d_t *p)
+        {
+            float x0, x1, x2, x3;
+            size_t pt;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p]), %[x3]")                 /* x3   = p       */
+                __ASM_EMIT("vmulps          0x00(%[vv]), %[x3], %[x0]")     /* x0   = v0 * p  */
+                __ASM_EMIT("vmulps          0x10(%[vv]), %[x3], %[x1]")     /* x1   = v1 * p  */
+                __ASM_EMIT("vmulps          0x20(%[vv]), %[x3], %[x2]")     /* x2   = v2 * p  */
+                __ASM_EMIT("vhaddps         %[x1], %[x0], %[x0]")
+                __ASM_EMIT("vhaddps         %[x3], %[x2], %[x2]")
+                __ASM_EMIT("vhaddps         %[x2], %[x0], %[x0]")           /* x0    = k0 k1 k2 ? */
+                __ASM_EMIT("vcmpps          $1, %[MTOL], %[x0], %[x1]")     /* x1   = k0 < -TOL  k1 < -TOL ? ? */
+                __ASM_EMIT("vcmpps          $2, %[PTOL], %[x0], %[x2]")     /* x2   = k0 <= +TOL k1 <= +TOL ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x1], %[x1]")         /* x1   = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("vpand           %[IONE], %[x2], %[x2]")         /* x2   = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("vpaddd          %[x1], %[x2], %[x0]")
+                __ASM_EMIT("vextractps      $0x00, %[x0], %[pt]")
+                __ASM_EMIT("vextractps      $0x01, %[x0], %[vv]")
+                __ASM_EMIT("vextractps      $0x02, %[x0], %[p]")
+                __ASM_EMIT("lea             (%[vv], %[p], 4), %[vv]")
+                __ASM_EMIT("lea             (%[pt], %[vv], 4), %[pt]")
+
+                : [p] "+r" (p), [vv] "+r" (vv), [pt] "=&r" (pt),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc", "memory"
+            );
+
+            return pt;
+        }
+
+        void split_triangle_raw(
+            raw_triangle_t *out,
+            size_t *n_out,
+            raw_triangle_t *in,
+            size_t *n_in,
+            const vector3d_t *pl,
+            const raw_triangle_t *pv)
+        {
+            float    x0, x1, x2, x3, x4, x5, x6, x7;
+            float    k[4] __lsp_aligned16;
+            size_t   t0;
+
+            in     += *n_in;
+            out    += *n_out;
+
+            // Estimate co-location of triangle and plane
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[pl]), %[x3]")                /* x3   = pl    */
+                __ASM_EMIT("vmulps          0x00(%[pv]), %[x3], %[x0]")     /* x0   = p0 * pl = sx0 sy0 sz0 sw0 */
+                __ASM_EMIT("vmulps          0x10(%[pv]), %[x3], %[x1]")     /* x1   = p1 * pl = sx1 sy1 sz1 sw1 */
+                __ASM_EMIT("vmulps          0x20(%[pv]), %[x3], %[x2]")     /* x2   = p2 * pl = sx2 sy2 sz2 sw2 */
+                __ASM_EMIT("vhaddps         %[x1], %[x0], %[x0]")           /* x0   = sx0+sy0 sz0+sw0 sx1+sy1 sz1+sw1 */
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")           /* x2   = sx2+sy2 sz2+sw2 sx2+sy2 sz2+sw2 */
+                __ASM_EMIT("vhaddps         %[x2], %[x0], %[x0]")           /* x0   = sx0+sy0+sz0+sw0 sx1+sy1+sz1+sw1 sx2+sy2+sz2+sw2 sx2+sy2+sz2+sw2 = k0 k1 k2 k2 */
+                __ASM_EMIT("vmovaps         %[x0], (%[k])")                 /* *k   = x0 */
+                __ASM_EMIT("vcmpps          $1, %[MTOL], %[x0], %[x1]")     /* x1   = k0 < -TOL   k1 < -TOL   k2 < -TOL   k2 < -TOL */
+                __ASM_EMIT("vcmpps          $2, %[PTOL], %[x0], %[x2]")     /* x2   = k0 <= +TOL  k1 <= +TOL  k2 <= +TOL  k2 <= +TOL */
+                __ASM_EMIT("vpand           %[ICULL3], %[x1], %[x1]")       /* x1   = 0x01*[k0 < -TOL]   0x04*[k1 < -TOL]   0x10*[k2 < -TOL] 0 */
+                __ASM_EMIT("vpand           %[ICULL3], %[x2], %[x2]")       /* x2   = 0x01*[k0 <= +TOL]  0x04*[k1 <= +TOL]  0x10*[k2 <= +TOL] 0 */
+                __ASM_EMIT("vpaddd          %[x2], %[x1], %[x0]")           /* x0   = x0 x1 x2 0 */
+                __ASM_EMIT("vphaddd         %[x0], %[x0], %[x0]")           /* x0   = x0+x1 x2+0 x0+x1 x2+0 */
+                __ASM_EMIT("vphaddd         %[x0], %[x0], %[x0]")           /* x0   = x0+x1+x2+0 x0+x1+x2+0 x0+x1+x2+0 */
+                __ASM_EMIT32("vmovd         %[x0], %[t0]")
+                __ASM_EMIT64("vmovd         %[x0], %k[t0]")
+
+                : [t0] "=&r" (t0),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [pl] "r" (pl), [pv] "r" (pv),
+                  [k] "r" (k),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [ICULL3] "m" (ICULL3)
+                : "cc", "memory"
+            );
+
+            #define STR_COPY_TO(tgt) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("vmovups     0x00(%[src]), %%ymm0") \
+                    __ASM_EMIT("vmovups     0x20(%[src]), %%xmm1") \
+                    __ASM_EMIT("vmovups     %%ymm0, 0x00(%[dst])") \
+                    __ASM_EMIT("vmovups     %%xmm1, 0x20(%[dst])") \
+                    : \
+                    : [dst] "r" (tgt), \
+                      [src] "r" (pv) \
+                    : "cc", "memory", \
+                      "%xmm0", "%xmm1" \
+                );
+
+            #define STR_SPLIT_1P(off0, off1, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("vmovups     0x" off0 "(%[st]), %[x0]")      /* x0   = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("vmovups     0x" off1 "(%[st]), %[x1]")      /* x1   = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("vmovups     (%[pl]), %[x2]")                /* x2   = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("vsubps      %[x0], %[x1], %[x1]")           /* x1   = d = p1 - p0 = dx dy dz 0 */ \
+                    __ASM_EMIT("vbroadcastss    0x" koff "(%[k]), %[x3]")   /* x3   = k k k k */ \
+                    __ASM_EMIT("vmulps      %[x1], %[x2], %[x2]")           /* x2   = dx*nx dy*ny dz*nz 0 */ \
+                    __ASM_EMIT("vmulps      %[x3], %[x1], %[x1]")           /* x1   = k*dx k*dy k*dz 0 */ \
+                    __ASM_EMIT("vhaddps     %[x2], %[x2], %[x2]")           /* x2   = dx*nx+dy*ny dz*nz dx*nx+dy*ny dz*nz */ \
+                    __ASM_EMIT("vhaddps     %[x2], %[x2], %[x2]")           /* x2   = dx*nx+dy*ny+dz*nz = b b b b */ \
+                    __ASM_EMIT("vdivps      %[x2], %[x1], %[x1]")           /* x1   = k*dx/b k*dy/b k*dz/b 0 */ \
+                    __ASM_EMIT("vsubps      %[x1], %[x0], %[x0]")           /* x0   = lx0-k*dx/b ly0-k*dy/b lz0-k*dz/b 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4) \
+                    : [st] "r" (pv), [pl] "r" (pl), [out] "r" (out), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_2P(off0, off1, off2, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("vmovups     0x" off0 "(%[st]), %[x0]")      /* x0   = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("vmovups     0x" off1 "(%[st]), %[x2]")      /* x2   = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("vmovups     0x" off2 "(%[st]), %[x3]")      /* x3   = p2 = lx2 ly2 lz2 1 */ \
+                    __ASM_EMIT("vmovups     (%[pl]), %[x4]")                /* x4   = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("vsubps      %[x0], %[x3], %[x3]")           /* x3   = d2 = p2 - p0 = dx2 dy2 dz2 0 */ \
+                    __ASM_EMIT("vsubps      %[x0], %[x2], %[x2]")           /* x2   = d1 = p1 - p0 = dx1 dy1 dz1 0 */ \
+                    __ASM_EMIT("vmulps      %[x3], %[x4], %[x5]")           /* x5   = dx2*nx dy2*ny dz2*nz 0 */ \
+                    __ASM_EMIT("vmulps      %[x2], %[x4], %[x4]")           /* x4   = dx1*nx dy1*ny dz1*nz 0 */ \
+                    __ASM_EMIT("vbroadcastss    0x" koff "(%[k]), %[x6]")   /* x6   = k k k k */ \
+                    __ASM_EMIT("vhaddps     %[x5], %[x5], %[x5]")           /* x5   = dx2*nx+dy2*ny dz2*nz dx2*nx+dy2*ny dz2*nz */ \
+                    __ASM_EMIT("vhaddps     %[x4], %[x4], %[x4]")           /* x4   = dx1*nx+dy1*ny dz1*nz dx1*nx+dy1*ny dz1*nz */ \
+                    __ASM_EMIT("vhaddps     %[x5], %[x5], %[x5]")           /* x5   = dx2*nx+dy2*ny+dz2*nz = b2 b2 b2 b2 */ \
+                    __ASM_EMIT("vhaddps     %[x4], %[x4], %[x4]")           /* x4   = dx1*nx+dy1*ny+dz1*nz = b1 b1 b1 b1 */ \
+                    __ASM_EMIT("vdivps      %[x5], %[x3], %[x3]")           /* x3   = dx2/b2 dy2/b2 dz2/b2 0 */ \
+                    __ASM_EMIT("vdivps      %[x4], %[x2], %[x2]")           /* x2   = dx1/b1 dy1/b1 dz1/b1 0 */ \
+                    __ASM_EMIT("vmulps      %[x6], %[x3], %[x3]")           /* x3   = k*dx2/b2 k*dy2/b2 k*dz2/b2 0 */ \
+                    __ASM_EMIT("vmulps      %[x6], %[x2], %[x2]")           /* x2   = k*dx1/b1 k*dy1/b1 k*dz1/b1 0 */ \
+                    __ASM_EMIT("vsubps      %[x3], %[x0], %[x1]")           /* x1   = lx0-k*dx2/b2 ly0-k*dy2/b2 lz0-k*dz2/b2 1 */ \
+                    __ASM_EMIT("vsubps      %[x2], %[x0], %[x0]")           /* x0   = lx0-k*dx1/b1 ly0-k*dy1/b1 lz0-k*dz1/b1 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), \
+                      [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7) \
+                    : [st] "r" (pv), [pl] "r" (pl), [out] "r" (out), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            switch (t0)
+            {
+                // 0 intersections, triangle is above
+                case 0x00:  // 0 0 0
+                case 0x01:  // 0 0 1
+                case 0x04:  // 0 1 0
+                case 0x05:  // 0 1 1
+                case 0x10:  // 1 0 0
+                case 0x11:  // 1 0 1
+                case 0x14:  // 1 1 0
+                case 0x15:  // 1 1 1
+                    STR_COPY_TO(out);
+                    ++(*n_out);
+                    break;
+
+                // 0 intersections, triangle is below
+                case 0x16:  // 1 1 2
+                case 0x19:  // 1 2 1
+                case 0x1a:  // 1 2 2
+                case 0x25:  // 2 1 1
+                case 0x26:  // 2 1 2
+                case 0x29:  // 2 2 1
+                case 0x2a:  // 2 2 2
+                    STR_COPY_TO(in);
+                    ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, counter-clockwise
+                case 0x06:  // 0 1 2
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x1], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x3], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x21:  // 2 0 1
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x18:  // 1 2 0
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x3], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, clockwise
+                case 0x24:  // 2 1 0
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x2], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x12:  // 1 0 2
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x1], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x3], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x09:  // 0 2 1
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle below, 2 triangles above
+                case 0x02:  // 0 0 2
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x4]")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[out])")
+                        __ASM_EMIT("vmovups     %[x4], 0x30(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x40(%[out])")
+                        __ASM_EMIT("vmovups     %[x3], 0x50(%[out])")
+                    );
+                    (*n_out) += 2; ++(*n_in);
+                    break;
+                case 0x08:  // 0 2 0
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x4]")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x4], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[out])")
+                        __ASM_EMIT("vmovups     %[x2], 0x30(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x40(%[out])")
+                        __ASM_EMIT("vmovups     %[x4], 0x50(%[out])")
+                    );
+                    (*n_out) += 2; ++(*n_in);
+                    break;
+                case 0x20:  // 2 0 0
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x4]")
+                        __ASM_EMIT("vmovups     %[x4], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[out])")
+                        __ASM_EMIT("vmovups     %[x3], 0x30(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x40(%[out])")
+                        __ASM_EMIT("vmovups     %[x2], 0x50(%[out])")
+                    );
+                    (*n_out) += 2; ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle above, 2 triangles below
+                case 0x28:  // 2 2 0
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x4]")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x4], 0x30(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x40(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x50(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[out])")
+                    );
+                    ++(*n_out); (*n_in) += 2;
+                    break;
+
+                case 0x22:  // 2 0 2
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x4]")
+                        __ASM_EMIT("vmovups     %[x4], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x30(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x40(%[in])")
+                        __ASM_EMIT("vmovups     %[x4], 0x50(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); (*n_in) += 2;
+                    break;
+
+                case 0x0a:  // 0 2 2
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x4]")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x30(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x40(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x50(%[in])")
+                        __ASM_EMIT("vmovups     %[x4], 0x00(%[out])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[out])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[out])")
+                    );
+                    ++(*n_out); (*n_in) += 2;
+                    break;
+
+                default:
+                    break;
+            }
+
+            #undef STR_COPY_TO
+            #undef STR_SPLIT_1P
+            #undef STR_SPLIT_2P
+        }
+
+        void cull_triangle_raw(
+                raw_triangle_t *in,
+                size_t *n_in,
+                const vector3d_t *pl,
+                const raw_triangle_t *pv
+            )
+        {
+            float    x0, x1, x2, x3, x4, x5, x6, x7;
+            float    k[4] __lsp_aligned16;
+            size_t   t0;
+
+            in     += *n_in;
+
+            // Estimate co-location of triangle and plane
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[pl]), %[x3]")                /* x3   = pl    */
+                __ASM_EMIT("vmulps          0x00(%[pv]), %[x3], %[x0]")     /* x0   = p0 * pl = sx0 sy0 sz0 sw0 */
+                __ASM_EMIT("vmulps          0x10(%[pv]), %[x3], %[x1]")     /* x1   = p1 * pl = sx1 sy1 sz1 sw1 */
+                __ASM_EMIT("vmulps          0x20(%[pv]), %[x3], %[x2]")     /* x2   = p2 * pl = sx2 sy2 sz2 sw2 */
+                __ASM_EMIT("vhaddps         %[x1], %[x0], %[x0]")           /* x0   = sx0+sy0 sz0+sw0 sx1+sy1 sz1+sw1 */
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")           /* x2   = sx2+sy2 sz2+sw2 sx2+sy2 sz2+sw2 */
+                __ASM_EMIT("vhaddps         %[x2], %[x0], %[x0]")           /* x0   = sx0+sy0+sz0+sw0 sx1+sy1+sz1+sw1 sx2+sy2+sz2+sw2 sx2+sy2+sz2+sw2 = k0 k1 k2 k2 */
+                __ASM_EMIT("vmovaps         %[x0], (%[k])")                 /* *k   = x0 */
+                __ASM_EMIT("vcmpps          $1, %[MTOL], %[x0], %[x1]")     /* x1   = k0 < -TOL   k1 < -TOL   k2 < -TOL   k2 < -TOL */
+                __ASM_EMIT("vcmpps          $2, %[PTOL], %[x0], %[x2]")     /* x2   = k0 <= +TOL  k1 <= +TOL  k2 <= +TOL  k2 <= +TOL */
+                __ASM_EMIT("vpand           %[ICULL3], %[x1], %[x1]")       /* x1   = 0x01*[k0 < -TOL]   0x04*[k1 < -TOL]   0x10*[k2 < -TOL] 0 */
+                __ASM_EMIT("vpand           %[ICULL3], %[x2], %[x2]")       /* x2   = 0x01*[k0 <= +TOL]  0x04*[k1 <= +TOL]  0x10*[k2 <= +TOL] 0 */
+                __ASM_EMIT("vpaddd          %[x2], %[x1], %[x0]")           /* x0   = x0 x1 x2 0 */
+                __ASM_EMIT("vphaddd         %[x0], %[x0], %[x0]")           /* x0   = x0+x1 x2+0 x0+x1 x2+0 */
+                __ASM_EMIT("vphaddd         %[x0], %[x0], %[x0]")           /* x0   = x0+x1+x2+0 x0+x1+x2+0 x0+x1+x2+0 */
+                __ASM_EMIT32("vmovd         %[x0], %[t0]")
+                __ASM_EMIT64("vmovd         %[x0], %k[t0]")
+
+                : [t0] "=&r" (t0),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [pl] "r" (pl), [pv] "r" (pv),
+                  [k] "r" (k),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [ICULL3] "m" (ICULL3)
+                : "cc", "memory"
+            );
+
+            #define STR_COPY_TO(tgt) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("vmovups     0x00(%[src]), %%ymm0") \
+                    __ASM_EMIT("vmovups     0x20(%[src]), %%xmm1") \
+                    __ASM_EMIT("vmovups     %%ymm0, 0x00(%[dst])") \
+                    __ASM_EMIT("vmovups     %%xmm1, 0x20(%[dst])") \
+                    : \
+                    : [dst] "r" (tgt), \
+                      [src] "r" (pv) \
+                    : "cc", "memory", \
+                      "%xmm0", "%xmm1" \
+                );
+
+            #define STR_SPLIT_1P(off0, off1, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("vmovups     0x" off0 "(%[st]), %[x0]")      /* x0   = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("vmovups     0x" off1 "(%[st]), %[x1]")      /* x1   = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("vmovups     (%[pl]), %[x2]")                /* x2   = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("vsubps      %[x0], %[x1], %[x1]")           /* x1   = d = p1 - p0 = dx dy dz 0 */ \
+                    __ASM_EMIT("vbroadcastss    0x" koff "(%[k]), %[x3]")   /* x3   = k k k k */ \
+                    __ASM_EMIT("vmulps      %[x1], %[x2], %[x2]")           /* x2   = dx*nx dy*ny dz*nz 0 */ \
+                    __ASM_EMIT("vmulps      %[x3], %[x1], %[x1]")           /* x1   = k*dx k*dy k*dz 0 */ \
+                    __ASM_EMIT("vhaddps     %[x2], %[x2], %[x2]")           /* x2   = dx*nx+dy*ny dz*nz dx*nx+dy*ny dz*nz */ \
+                    __ASM_EMIT("vhaddps     %[x2], %[x2], %[x2]")           /* x2   = dx*nx+dy*ny+dz*nz = b b b b */ \
+                    __ASM_EMIT("vdivps      %[x2], %[x1], %[x1]")           /* x1   = k*dx/b k*dy/b k*dz/b 0 */ \
+                    __ASM_EMIT("vsubps      %[x1], %[x0], %[x0]")           /* x0   = lx0-k*dx/b ly0-k*dy/b lz0-k*dz/b 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4) \
+                    : [st] "r" (pv), [pl] "r" (pl), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_2P(off0, off1, off2, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("vmovups     0x" off0 "(%[st]), %[x0]")      /* x0   = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("vmovups     0x" off1 "(%[st]), %[x2]")      /* x2   = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("vmovups     0x" off2 "(%[st]), %[x3]")      /* x3   = p2 = lx2 ly2 lz2 1 */ \
+                    __ASM_EMIT("vmovups     (%[pl]), %[x4]")                /* x4   = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("vsubps      %[x0], %[x3], %[x3]")           /* x3   = d2 = p2 - p0 = dx2 dy2 dz2 0 */ \
+                    __ASM_EMIT("vsubps      %[x0], %[x2], %[x2]")           /* x2   = d1 = p1 - p0 = dx1 dy1 dz1 0 */ \
+                    __ASM_EMIT("vmulps      %[x3], %[x4], %[x5]")           /* x5   = dx2*nx dy2*ny dz2*nz 0 */ \
+                    __ASM_EMIT("vmulps      %[x2], %[x4], %[x4]")           /* x4   = dx1*nx dy1*ny dz1*nz 0 */ \
+                    __ASM_EMIT("vbroadcastss    0x" koff "(%[k]), %[x6]")   /* x6   = k k k k */ \
+                    __ASM_EMIT("vhaddps     %[x5], %[x5], %[x5]")           /* x5   = dx2*nx+dy2*ny dz2*nz dx2*nx+dy2*ny dz2*nz */ \
+                    __ASM_EMIT("vhaddps     %[x4], %[x4], %[x4]")           /* x4   = dx1*nx+dy1*ny dz1*nz dx1*nx+dy1*ny dz1*nz */ \
+                    __ASM_EMIT("vhaddps     %[x5], %[x5], %[x5]")           /* x5   = dx2*nx+dy2*ny+dz2*nz = b2 b2 b2 b2 */ \
+                    __ASM_EMIT("vhaddps     %[x4], %[x4], %[x4]")           /* x4   = dx1*nx+dy1*ny+dz1*nz = b1 b1 b1 b1 */ \
+                    __ASM_EMIT("vdivps      %[x5], %[x3], %[x3]")           /* x3   = dx2/b2 dy2/b2 dz2/b2 0 */ \
+                    __ASM_EMIT("vdivps      %[x4], %[x2], %[x2]")           /* x2   = dx1/b1 dy1/b1 dz1/b1 0 */ \
+                    __ASM_EMIT("vmulps      %[x6], %[x3], %[x3]")           /* x3   = k*dx2/b2 k*dy2/b2 k*dz2/b2 0 */ \
+                    __ASM_EMIT("vmulps      %[x6], %[x2], %[x2]")           /* x2   = k*dx1/b1 k*dy1/b1 k*dz1/b1 0 */ \
+                    __ASM_EMIT("vsubps      %[x3], %[x0], %[x1]")           /* x1   = lx0-k*dx2/b2 ly0-k*dy2/b2 lz0-k*dz2/b2 1 */ \
+                    __ASM_EMIT("vsubps      %[x2], %[x0], %[x0]")           /* x0   = lx0-k*dx1/b1 ly0-k*dy1/b1 lz0-k*dz1/b1 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), \
+                      [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7) \
+                    : [st] "r" (pv), [pl] "r" (pl), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            switch (t0)
+            {
+                // 0 intersections, triangle is above
+                case 0x00:  // 0 0 0
+                case 0x01:  // 0 0 1
+                case 0x04:  // 0 1 0
+                case 0x05:  // 0 1 1
+                case 0x10:  // 1 0 0
+                case 0x11:  // 1 0 1
+                case 0x14:  // 1 1 0
+                case 0x15:  // 1 1 1
+                    break;
+
+                // 0 intersections, triangle is below
+                case 0x16:  // 1 1 2
+                case 0x19:  // 1 2 1
+                case 0x1a:  // 1 2 2
+                case 0x25:  // 2 1 1
+                case 0x26:  // 2 1 2
+                case 0x29:  // 2 2 1
+                case 0x2a:  // 2 2 2
+                    STR_COPY_TO(in);
+                    ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, counter-clockwise
+                case 0x06:  // 0 1 2
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     %[x1], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x21:  // 2 0 1
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x18:  // 1 2 0
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, clockwise
+                case 0x24:  // 2 1 0
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x12:  // 1 0 2
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x1], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x09:  // 0 2 1
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x1]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle below, 2 triangles above
+                case 0x02:  // 0 0 2
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x08:  // 0 2 0
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x20:  // 2 0 0
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x4]")
+                        __ASM_EMIT("vmovups     %[x4], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle above, 2 triangles below
+                case 0x28:  // 2 2 0
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x4]")
+                        __ASM_EMIT("vmovups     %[x3], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x4], 0x30(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x40(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x50(%[in])")
+                    );
+                    (*n_in) += 2;
+                    break;
+
+                case 0x22:  // 2 0 2
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x20(%[st]), %[x4]")
+                        __ASM_EMIT("vmovups     %[x4], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x30(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x40(%[in])")
+                        __ASM_EMIT("vmovups     %[x4], 0x50(%[in])")
+                    );
+                    (*n_in) += 2;
+                    break;
+
+                case 0x0a:  // 0 2 2
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("vmovups     0x00(%[st]), %[x2]")
+                        __ASM_EMIT("vmovups     0x10(%[st]), %[x3]")
+                        __ASM_EMIT("vmovups     %[x2], 0x00(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x10(%[in])")
+                        __ASM_EMIT("vmovups     %[x0], 0x20(%[in])")
+                        __ASM_EMIT("vmovups     %[x3], 0x30(%[in])")
+                        __ASM_EMIT("vmovups     %[x1], 0x40(%[in])")
+                        __ASM_EMIT("vmovups     %[x2], 0x50(%[in])")
+                    );
+                    (*n_in) += 2;
+                    break;
+
+                default:
+                    break;
+            }
+
+            #undef STR_COPY_TO
+            #undef STR_SPLIT_1P
+            #undef STR_SPLIT_2P
+        }
+
+        size_t longest_edge3d_p3(const point3d_t *p1, const point3d_t *p2, const point3d_t *p3)
+        {
+            size_t res;
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                // Calc vectors
+                __ASM_EMIT("vmovups         (%[p1]), %[x0]")            // x0   = x0 y0 z0 w0
+                __ASM_EMIT("vmovups         (%[p2]), %[x1]")            // x1   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         (%[p3]), %[x2]")            // x2   = x2 y2 z2 w2
+                __ASM_EMIT("vsubps          %[x0], %[x1], %[x3]")       // x3   = x1-x0 y1-y0 z1-z0 w1-w0 = dx0 dy0 dz0 0
+                __ASM_EMIT("vsubps          %[x1], %[x2], %[x1]")       // x1   = x2-x1 y2-y1 z2-z1 w2-w1 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")       // x0   = x0-x2 y0-y2 z0-z2 w0-w2 = dx2 dy2 dz2 0
+
+                __ASM_EMIT("vmulps          %[x3], %[x3], %[x2]")       // x2   = ax2 ay2 az2 0
+                __ASM_EMIT("vmulps          %[x1], %[x1], %[x1]")       // x1   = bx2 by2 bz2 0
+                __ASM_EMIT("vmulps          %[x0], %[x0], %[x0]")       // x0   = cx2 cy2 cz2 0
+                MAT3_TRANSPOSE("x2", "x1", "x0", "x3")
+                __ASM_EMIT("vaddps          %[x2], %[x0], %[x3]")       // x3   = ax2+az2 + bx2+bz2 cx2+cz2 ?
+                __ASM_EMIT("vaddps          %[x1], %[x0], %[x3]")       // x3   = A2 B2 C2
+                __ASM_EMIT("xor             %[res], %[res]")            // res  = 0
+                __ASM_EMIT("vunpcklps       %[x3], %[x3], %[x2]")       // x2   = A2 A2 B2 B2
+                __ASM_EMIT("vmovhlps        %[x3], %[x0], %[x0]")       // x0   = C2 ? ? ?
+                __ASM_EMIT("vmovhlps        %[x2], %[x1], %[x1]")       // x1   = B2 B2 ? ?
+
+                // Solve result
+                __ASM_EMIT("vucomiss        %[x1], %[x2]")              // A2 <?> B2
+                __ASM_EMIT("jae             1f")
+                    // A2 < B2
+                    __ASM_EMIT("vucomiss        %[x1], %[x0]")          // C2 <?> B2
+                    __ASM_EMIT("seta            %%al")                  // res = (B2 >= C2) ? 0 : 1
+                    __ASM_EMIT("add             $1, %[res]")            // res = (B2 >= C2) ? 1 : 2
+                    __ASM_EMIT("jmp             2f")
+                __ASM_EMIT("1:")
+                    // A2 >= B2
+                    __ASM_EMIT("vucomiss        %[x0], %[x2]")          // A2 <?> C2
+                    __ASM_EMIT("jae             2f")                    //
+                    __ASM_EMIT("mov             $2, %[res]")            // res = (A2 >= C2) ? 0 : 2
+                __ASM_EMIT("2:")
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [res] "=a" (res)
+                : [p1] "r" (p1), [p2] "r" (p2), [p3] "r" (p3)
+            );
+
+            return res;
+        }
+
+        size_t longest_edge3d_pv(const point3d_t *p)
+        {
+            size_t res;
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                // Calc vectors
+                __ASM_EMIT("vmovups         0x00(%[pv]), %[x0]")        // x0   = x0 y0 z0 w0
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x1]")        // x1   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x2]")        // x2   = x2 y2 z2 w2
+                __ASM_EMIT("vsubps          %[x0], %[x1], %[x3]")       // x3   = x1-x0 y1-y0 z1-z0 w1-w0 = dx0 dy0 dz0 0
+                __ASM_EMIT("vsubps          %[x1], %[x2], %[x1]")       // x1   = x2-x1 y2-y1 z2-z1 w2-w1 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")       // x0   = x0-x2 y0-y2 z0-z2 w0-w2 = dx2 dy2 dz2 0
+
+                __ASM_EMIT("vmulps          %[x3], %[x3], %[x2]")       // x2   = ax2 ay2 az2 0
+                __ASM_EMIT("vmulps          %[x1], %[x1], %[x1]")       // x1   = bx2 by2 bz2 0
+                __ASM_EMIT("vmulps          %[x0], %[x0], %[x0]")       // x0   = cx2 cy2 cz2 0
+                MAT3_TRANSPOSE("x2", "x1", "x0", "x3")
+                __ASM_EMIT("vaddps          %[x2], %[x0], %[x3]")       // x3   = ax2+az2 + bx2+bz2 cx2+cz2 ?
+                __ASM_EMIT("vaddps          %[x1], %[x0], %[x3]")       // x3   = A2 B2 C2
+                __ASM_EMIT("xor             %[res], %[res]")            // res  = 0
+                __ASM_EMIT("vunpcklps       %[x3], %[x3], %[x2]")       // x2   = A2 A2 B2 B2
+                __ASM_EMIT("vmovhlps        %[x3], %[x0], %[x0]")       // x0   = C2 ? ? ?
+                __ASM_EMIT("vmovhlps        %[x2], %[x1], %[x1]")       // x1   = B2 B2 ? ?
+
+                // Solve result
+                __ASM_EMIT("vucomiss        %[x1], %[x2]")              // A2 <?> B2
+                __ASM_EMIT("jae             1f")
+                    // A2 < B2
+                    __ASM_EMIT("vucomiss        %[x1], %[x0]")          // C2 <?> B2
+                    __ASM_EMIT("seta            %%al")                  // res = (B2 >= C2) ? 0 : 1
+                    __ASM_EMIT("add             $1, %[res]")            // res = (B2 >= C2) ? 1 : 2
+                    __ASM_EMIT("jmp             2f")
+                __ASM_EMIT("1:")
+                    // A2 >= B2
+                    __ASM_EMIT("vucomiss        %[x0], %[x2]")          // A2 <?> C2
+                    __ASM_EMIT("jae             2f")                    //
+                    __ASM_EMIT("mov             $2, %[res]")            // res = (A2 >= C2) ? 0 : 2
+                __ASM_EMIT("2:")
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [res] "=a" (res)
+                : [pv] "r" (p)
+            );
+
+            return res;
+        }
+
+        void calc_normal3d_v2(vector3d_t *n, const vector3d_t *v1, const vector3d_t *v2)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[v1]), %[x0]")            // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vmovups         (%[v2]), %[x1]")            // x1   = dx2 dy2 dz2 dw2
+                VECTOR_CROSS3("[x0]", "[x1]", "[x2]", "[x3]")           // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = W = sqrtf(W2)
+                __ASM_EMIT("vcmpps          $4, %[x3], %[x0], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W NZ/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x0]")       // x0   = (W != 0) ? NX/W NY/W NZ/W NZ/W : 0
+                __ASM_EMIT("vmovups         %[x0], (%[n])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [n] "r" (n), [v1] "r" (v1), [v2] "r" (v2),
+                  [X_3DMASK] "m" (X_MASK0111)
+                : "memory"
+            );
+        }
+
+        void calc_normal3d_vv(vector3d_t *n, const vector3d_t *vv)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[vv]), %[x0]")        // x0   = dx1 dy1 dz1 0
+                __ASM_EMIT("vmovups         0x10(%[vv]), %[x1]")        // x1   = dx2 dy2 dz2 0
+                VECTOR_CROSS3("[x0]", "[x1]", "[x2]", "[x3]")           // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = W = sqrtf(W2)
+                __ASM_EMIT("vcmpps          $4, %[x3], %[x0], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W NZ/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x0]")       // x0   = (W != 0) ? NX/W NY/W NZ/W NZ/W : 0
+                __ASM_EMIT("vmovups         %[x0], (%[n])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [n] "r" (n), [vv] "r" (vv)
+                : "memory"
+            );
+        }
+
+        void calc_normal3d_p3(vector3d_t *n, const point3d_t *p1, const point3d_t *p2, const point3d_t *p3)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p2]), %[x1]")            // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vmovups         (%[p3]), %[x2]")            // x1   = dx2 dy2 dz2 dw2
+                __ASM_EMIT("vsubps          (%[p1]), %[x1], %[x0]")     // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vsubps          %[x1], %[x2], %[x1]")       // x1   = dx2 dy2 dz2 dw2
+                VECTOR_CROSS3("[x0]", "[x1]", "[x2]", "[x3]")           // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = W = sqrtf(W2)
+                __ASM_EMIT("vcmpps          $4, %[x3], %[x0], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W NZ/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x0]")       // x0   = (W != 0) ? NX/W NY/W NZ/W NZ/W : 0
+                __ASM_EMIT("vmovups         %[x0], (%[n])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [n] "r" (n), [p1] "r" (p1), [p2] "r" (p2), [p3] "r" (p3),
+                  [X_3DMASK] "m" (X_MASK0111)
+                : "memory"
+            );
+        }
+
+        void calc_normal3d_pv(vector3d_t *n, const point3d_t *pv)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x1]")        // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x2]")        // x1   = dx2 dy2 dz2 dw2
+                __ASM_EMIT("vsubps          0x00(%[pv]), %[x1], %[x0]") // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vsubps          %[x1], %[x2], %[x1]")       // x1   = dx2 dy2 dz2 dw2
+                VECTOR_CROSS3("[x0]", "[x1]", "[x2]", "[x3]")           // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = W = sqrtf(W2)
+                __ASM_EMIT("vcmpps          $4, %[x3], %[x0], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W NZ/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x0]")       // x0   = (W != 0) ? NX/W NY/W NZ/W NZ/W : 0
+                __ASM_EMIT("vmovups         %[x0], (%[n])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [n] "r" (n), [pv] "r" (pv),
+                  [X_3DMASK] "m" (X_MASK0111)
+                : "memory"
+            );
+        }
+
+        void calc_normal3d_v2_fma3(vector3d_t *n, const vector3d_t *v1, const vector3d_t *v2)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[v1]), %[x0]")            // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vmovups         (%[v2]), %[x1]")            // x1   = dx2 dy2 dz2 dw2
+                VECTOR_CROSS3_FMA3("[x0]", "[x1]", "[x2]", "[x3]")      // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = W = sqrtf(W2)
+                __ASM_EMIT("vcmpps          $4, %[x3], %[x0], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W NZ/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x0]")       // x0   = (W != 0) ? NX/W NY/W NZ/W NZ/W : 0
+                __ASM_EMIT("vmovups         %[x0], (%[n])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [n] "r" (n), [v1] "r" (v1), [v2] "r" (v2),
+                  [X_3DMASK] "m" (X_MASK0111)
+                : "memory"
+            );
+        }
+
+        void calc_normal3d_vv_fma3(vector3d_t *n, const vector3d_t *vv)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[vv]), %[x0]")        // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vmovups         0x10(%[vv]), %[x1]")        // x1   = dx2 dy2 dz2 dw2
+                VECTOR_CROSS3_FMA3("[x0]", "[x1]", "[x2]", "[x3]")      // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = W = sqrtf(W2)
+                __ASM_EMIT("vcmpps          $4, %[x3], %[x0], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W NZ/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x0]")       // x0   = (W != 0) ? NX/W NY/W NZ/W NZ/W : 0
+                __ASM_EMIT("vmovups         %[x0], (%[n])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [n] "r" (n), [vv] "r" (vv),
+                  [X_3DMASK] "m" (X_MASK0111)
+                : "memory"
+            );
+        }
+
+        void calc_normal3d_p3_fma3(vector3d_t *n, const point3d_t *p1, const point3d_t *p2, const point3d_t *p3)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p2]), %[x1]")            // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vmovups         (%[p3]), %[x2]")            // x1   = dx2 dy2 dz2 dw2
+                __ASM_EMIT("vsubps          (%[p1]), %[x1], %[x0]")     // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vsubps          %[x1], %[x2], %[x1]")       // x1   = dx2 dy2 dz2 dw2
+                VECTOR_CROSS3_FMA3("[x0]", "[x1]", "[x2]", "[x3]")      // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = W = sqrtf(W2)
+                __ASM_EMIT("vcmpps          $4, %[x3], %[x0], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W NZ/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x0]")       // x0   = (W != 0) ? NX/W NY/W NZ/W NZ/W : 0
+                __ASM_EMIT("vmovups         %[x0], (%[n])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [n] "r" (n), [p1] "r" (p1), [p2] "r" (p2), [p3] "r" (p3),
+                  [X_3DMASK] "m" (X_MASK0111)
+                : "memory"
+            );
+        }
+
+        void calc_normal3d_pv_fma3(vector3d_t *n, const point3d_t *pv)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x1]")        // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x2]")        // x1   = dx2 dy2 dz2 dw2
+                __ASM_EMIT("vsubps          0x00(%[pv]), %[x1], %[x0]") // x0   = dx1 dy1 dz1 dw1
+                __ASM_EMIT("vsubps          %[x1], %[x2], %[x1]")       // x1   = dx2 dy2 dz2 dw2
+                VECTOR_CROSS3_FMA3("[x0]", "[x1]", "[x2]", "[x3]")      // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = W = sqrtf(W2)
+                __ASM_EMIT("vcmpps          $4, %[x3], %[x0], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W NZ/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x0]")       // x0   = (W != 0) ? NX/W NY/W NZ/W NZ/W : 0
+                __ASM_EMIT("vmovups         %[x0], (%[n])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [n] "r" (n), [pv] "r" (pv),
+                  [X_3DMASK] "m" (X_MASK0111)
+                : "memory"
+            );
+        }
+
+        float calc_plane_p3(vector3d_t *v, const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p0]), %[x2]")            // x2   = x0 y0 z0 w0
+                __ASM_EMIT("vmovups         (%[p1]), %[x0]")            // x0   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         (%[p2]), %[x1]")            // x1   = x2 y2 z2 w2
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")       // x0   = p1 - p0 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x2], %[x1], %[x1]")       // x1   = p2 - p0 = dx2 dy2 dz2 0
+                VECTOR_CROSS3("[x0]", "[x1]", "[x2]", "[x3]")           // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = sqrtf(W2) sqrtf(W2) sqrtf(W2) sqrtf(W2) = W W W W
+                __ASM_EMIT("vcmpps          $4, %[x0], %[x3], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W 0/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x1]")       // x1   = nx ny nz 0 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz
+                __ASM_EMIT("vmovups         (%[p0]), %[x3]")            // x3   = x0 y0 z0 w0
+                __ASM_EMIT("vxorps          %[X_ISIGN], %[x1], %[x2]")  // x2   = -nx -ny -nz 0
+                VECTOR_DOT3("[x2]", "[x3]", "[x3]", "[x4]")             // x2   = -(nx*x0 + ny*y0 + nz*z0) = dw
+                __ASM_EMIT("vinsertps       $0x30, %[x2], %[x1], %[x1]")// x1   = nx ny nz dw
+                __ASM_EMIT("vmovups         %[x1], (%[v])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v), [p0] "r" (p0), [p1] "r" (p1), [p2] "r" (p2),
+                  [X_ISIGN] "m" (X_SMASK0111)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        float calc_plane_pv(vector3d_t *v, const point3d_t *pv)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[pv]), %[x2]")        // x2   = x0 y0 z0 w0
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x0]")        // x0   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x1]")        // x1   = x2 y2 z2 w2
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")       // x0   = p1 - p0 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x2], %[x1], %[x1]")       // x1   = p2 - p0 = dx2 dy2 dz2 0
+                VECTOR_CROSS3("[x0]", "[x1]", "[x2]", "[x3]")           // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = sqrtf(W2) sqrtf(W2) sqrtf(W2) sqrtf(W2) = W W W W
+                __ASM_EMIT("vcmpps          $4, %[x0], %[x3], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W 0/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x1]")       // x1   = nx ny nz 0 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz
+                __ASM_EMIT("vmovups         0x00(%[pv]), %[x3]")        // x3   = x0 y0 z0 w0
+                __ASM_EMIT("vxorps          %[X_ISIGN], %[x1], %[x2]")  // x2   = -nx -ny -nz 0
+                VECTOR_DOT3("[x2]", "[x3]", "[x3]", "[x4]")             // x2   = -(nx*x0 + ny*y0 + nz*z0) = dw
+                __ASM_EMIT("vinsertps       $0x30, %[x2], %[x1], %[x1]")// x1   = nx ny nz dw
+                __ASM_EMIT("vmovups         %[x1], (%[v])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v), [pv] "r" (pv),
+                  [X_ISIGN] "m" (X_SMASK0111)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        float calc_plane_v1p2(vector3d_t *v, const vector3d_t *v0, const point3d_t *p0, const point3d_t *p1)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p1]), %[x0]")            // x0   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         (%[v0]), %[x1]")            // x1   = v = dx2 dy2 dz2 0
+                __ASM_EMIT("vsubps          (%[p0]), %[x0], %[x0]")     // x0   = p1 - p0 = dx1 dy1 dz1 0
+                VECTOR_CROSS3("[x0]", "[x1]", "[x2]", "[x3]")           // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = sqrtf(W2) sqrtf(W2) sqrtf(W2) sqrtf(W2) = W W W W
+                __ASM_EMIT("vcmpps          $4, %[x0], %[x3], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W 0/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x1]")       // x1   = nx ny nz 0 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz
+                __ASM_EMIT("vmovups         (%[p0]), %[x3]")            // x3   = x0 y0 z0 w0
+                __ASM_EMIT("vxorps          %[X_ISIGN], %[x1], %[x2]")  // x2   = -nx -ny -nz 0
+                VECTOR_DOT3("[x2]", "[x3]", "[x3]", "[x4]")             // x2   = -(nx*x0 + ny*y0 + nz*z0) = dw
+                __ASM_EMIT("vinsertps       $0x30, %[x2], %[x1], %[x1]")// x1   = nx ny nz dw
+                __ASM_EMIT("vmovups         %[x1], (%[v])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v), [v0] "r" (v0), [p0] "r" (p0), [p1] "r" (p1),
+                  [X_ISIGN] "m" (X_SMASK0111)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        float calc_plane_p3_fma3(vector3d_t *v, const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p0]), %[x2]")            // x2   = x0 y0 z0 w0
+                __ASM_EMIT("vmovups         (%[p1]), %[x0]")            // x0   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         (%[p2]), %[x1]")            // x1   = x2 y2 z2 w2
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")       // x0   = p1 - p0 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x2], %[x1], %[x1]")       // x1   = p2 - p0 = dx2 dy2 dz2 0
+                VECTOR_CROSS3_FMA3("[x0]", "[x1]", "[x2]", "[x3]")      // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = sqrtf(W2) sqrtf(W2) sqrtf(W2) sqrtf(W2) = W W W W
+                __ASM_EMIT("vcmpps          $4, %[x0], %[x3], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W 0/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x1]")       // x1   = nx ny nz 0 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz
+                __ASM_EMIT("vmovups         (%[p0]), %[x3]")            // x3   = x0 y0 z0 w0
+                __ASM_EMIT("vxorps          %[X_ISIGN], %[x1], %[x2]")  // x2   = -nx -ny -nz 0
+                VECTOR_DOT3("[x2]", "[x3]", "[x3]", "[x4]")             // x2   = -(nx*x0 + ny*y0 + nz*z0) = dw
+                __ASM_EMIT("vinsertps       $0x30, %[x2], %[x1], %[x1]")// x1   = nx ny nz dw
+                __ASM_EMIT("vmovups         %[x1], (%[v])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v), [p0] "r" (p0), [p1] "r" (p1), [p2] "r" (p2),
+                  [X_ISIGN] "m" (X_SMASK0111)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        float calc_plane_pv_fma3(vector3d_t *v, const point3d_t *pv)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[pv]), %[x2]")        // x2   = x0 y0 z0 w0
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x0]")        // x0   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x1]")        // x1   = x2 y2 z2 w2
+                __ASM_EMIT("vsubps          %[x2], %[x0], %[x0]")       // x0   = p1 - p0 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x2], %[x1], %[x1]")       // x1   = p2 - p0 = dx2 dy2 dz2 0
+                VECTOR_CROSS3_FMA3("[x0]", "[x1]", "[x2]", "[x3]")      // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = sqrtf(W2) sqrtf(W2) sqrtf(W2) sqrtf(W2) = W W W W
+                __ASM_EMIT("vcmpps          $4, %[x0], %[x3], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W 0/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x1]")       // x1   = nx ny nz 0 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz
+                __ASM_EMIT("vmovups         0x00(%[pv]), %[x3]")        // x3   = x0 y0 z0 w0
+                __ASM_EMIT("vxorps          %[X_ISIGN], %[x1], %[x2]")  // x2   = -nx -ny -nz 0
+                VECTOR_DOT3("[x2]", "[x3]", "[x3]", "[x4]")             // x2   = -(nx*x0 + ny*y0 + nz*z0) = dw
+                __ASM_EMIT("vinsertps       $0x30, %[x2], %[x1], %[x1]")// x1   = nx ny nz dw
+                __ASM_EMIT("vmovups         %[x1], (%[v])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v), [pv] "r" (pv),
+                  [X_ISIGN] "m" (X_SMASK0111)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        float calc_plane_v1p2_fma3(vector3d_t *v, const vector3d_t *v0, const point3d_t *p0, const point3d_t *p1)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p1]), %[x0]")            // x0   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         (%[v0]), %[x1]")            // x1   = v = dx2 dy2 dz2 0
+                __ASM_EMIT("vsubps          (%[p0]), %[x0], %[x0]")     // x0   = p1 - p0 = dx1 dy1 dz1 0
+                VECTOR_CROSS3_FMA3("[x0]", "[x1]", "[x2]", "[x3]")      // x0   = NZ NX NY 0
+                __ASM_EMIT("vshufps         $0xc9, %[x0], %[x0], %[x1]")// x1   = NX NY NZ 0
+                VECTOR_DOT3("[x0]", "[x0]", "[x2]", "[x3]")             // x0   = NX*NX + NY*NY + NZ*NZ = W2
+                __ASM_EMIT("vshufps         $0x00, %[x0], %[x0], %[x0]")// x0   = W2 W2 W2 W2
+                __ASM_EMIT("vxorps          %[x3], %[x3], %[x3]")       // x3   = 0
+                __ASM_EMIT("vsqrtps         %[x0], %[x0]")              // x0   = sqrtf(W2) sqrtf(W2) sqrtf(W2) sqrtf(W2) = W W W W
+                __ASM_EMIT("vcmpps          $4, %[x0], %[x3], %[x3]")   // x3   = W != 0
+                __ASM_EMIT("vdivps          %[x0], %[x1], %[x1]")       // x1   = NX/W NY/W NZ/W 0/W
+                __ASM_EMIT("vandps          %[x3], %[x1], %[x1]")       // x1   = nx ny nz 0 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz
+                __ASM_EMIT("vmovups         (%[p0]), %[x3]")            // x3   = x0 y0 z0 w0
+                __ASM_EMIT("vxorps          %[X_ISIGN], %[x1], %[x2]")  // x2   = -nx -ny -nz 0
+                VECTOR_DOT3("[x2]", "[x3]", "[x3]", "[x4]")             // x2   = -(nx*x0 + ny*y0 + nz*z0) = dw
+                __ASM_EMIT("vinsertps       $0x30, %[x2], %[x1], %[x1]")// x1   = nx ny nz dw
+                __ASM_EMIT("vmovups         %[x1], (%[v])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v), [v0] "r" (v0), [p0] "r" (p0), [p1] "r" (p1),
+                  [X_ISIGN] "m" (X_SMASK0111)
+                : "memory"
+            );
+
+            return x0;
+        }
+
+        void calc_split_point_p2v1(point3d_t *sp, const point3d_t *l0, const point3d_t *l1, const vector3d_t *pl)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[l0]), %[x1]")            // x1   = l0 = lx0 ly0 lz0 1
+                __ASM_EMIT("vmovups         (%[l1]), %[x0]")            // x0   = l1 = lx1 ly1 lz1 1
+                __ASM_EMIT("vmovups         (%[pl]), %[x2]")            // x2   = pl = nx ny nz nw
+                __ASM_EMIT("vsubps          %[x1], %[x0], %[x0]")       // x0   = d = l1 - l0 = dx dy dz 0
+                __ASM_EMIT("vmulps          %[x2], %[x1], %[x3]")       // x3   = nx*lx0 ny*ly0 nz*lz0 nw */
+                __ASM_EMIT("vmulps          %[x0], %[x2], %[x2]")       // x2   = nx*dx ny*dy nz*dz 0 */
+                __ASM_EMIT("vhaddps         %[x3], %[x3], %[x3]")       // x3   = nx*lx0+ny*ly0 nz*lz0+nw nx*lx0+ny*ly0 nz*lz0+nw
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")       // x2   = nx*dx+ny*dy nz*dz nx*dx+ny*dy nz*dz
+                __ASM_EMIT("vhaddps         %[x3], %[x3], %[x3]")       // x3   = nx*lx0+ny*ly0+nz*lz0+nw = T T T T
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")       // x2   = nx*dx+ny*dy nz*dz B B B B
+                __ASM_EMIT("vdivps          %[x2], %[x3], %[x3]")       // x3   = T/B T/B T/B T/B = W
+                __ASM_EMIT("vmulps          %[x3], %[x0], %[x0]")       // x0   = dx*W dy*W dz*W 0
+                __ASM_EMIT("vsubps          %[x0], %[x1], %[x1]")       // x1   = lx0-dx*W ly0-dy*W lz0-dz*W 1
+                __ASM_EMIT("vmovups         %[x1], (%[sp])")
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [sp] "r" (sp), [l0] "r" (l0), [l1] "r" (l1), [pl] "r" (pl)
+                : "memory"
+            );
+        }
+
+        void calc_split_point_pvv1(point3d_t *sp, const point3d_t *lv, const vector3d_t *pl)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[lv]), %[x1]")        // x1   = l0 = lx0 ly0 lz0 1
+                __ASM_EMIT("vmovups         0x10(%[lv]), %[x0]")        // x0   = l1 = lx1 ly1 lz1 1
+                __ASM_EMIT("vmovups         (%[pl]), %[x2]")            // x2   = pl = nx ny nz nw
+                __ASM_EMIT("vsubps          %[x1], %[x0], %[x0]")       // x0   = d = l1 - l0 = dx dy dz 0
+                __ASM_EMIT("vmulps          %[x2], %[x1], %[x3]")       // x3   = nx*lx0 ny*ly0 nz*lz0 nw */
+                __ASM_EMIT("vmulps          %[x0], %[x2], %[x2]")       // x2   = nx*dx ny*dy nz*dz 0 */
+                __ASM_EMIT("vhaddps         %[x3], %[x3], %[x3]")       // x3   = nx*lx0+ny*ly0 nz*lz0+nw nx*lx0+ny*ly0 nz*lz0+nw
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")       // x2   = nx*dx+ny*dy nz*dz nx*dx+ny*dy nz*dz
+                __ASM_EMIT("vhaddps         %[x3], %[x3], %[x3]")       // x3   = nx*lx0+ny*ly0+nz*lz0+nw = T T T T
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")       // x2   = nx*dx+ny*dy nz*dz B B B B
+                __ASM_EMIT("vdivps          %[x2], %[x3], %[x3]")       // x3   = T/B T/B T/B T/B = W
+                __ASM_EMIT("vmulps          %[x3], %[x0], %[x0]")       // x0   = dx*W dy*W dz*W 0
+                __ASM_EMIT("vsubps          %[x0], %[x1], %[x1]")       // x1   = lx0-dx*W ly0-dy*W lz0-dz*W 1
+                __ASM_EMIT("vmovups         %[x1], (%[sp])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [sp] "r" (sp), [lv] "r" (lv), [pl] "r" (pl)
+                : "cc", "memory"
+            );
+        }
+
+        void calc_split_point_p2v1_fma3(point3d_t *sp, const point3d_t *l0, const point3d_t *l1, const vector3d_t *pl)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[l0]), %[x1]")            // x1   = l0 = lx0 ly0 lz0 1
+                __ASM_EMIT("vmovups         (%[l1]), %[x0]")            // x0   = l1 = lx1 ly1 lz1 1
+                __ASM_EMIT("vmovups         (%[pl]), %[x2]")            // x2   = pl = nx ny nz nw
+                __ASM_EMIT("vsubps          %[x1], %[x0], %[x0]")       // x0   = d = l1 - l0 = dx dy dz 0
+                __ASM_EMIT("vmulps          %[x2], %[x1], %[x3]")       // x3   = nx*lx0 ny*ly0 nz*lz0 nw */
+                __ASM_EMIT("vmulps          %[x0], %[x2], %[x2]")       // x2   = nx*dx ny*dy nz*dz 0 */
+                __ASM_EMIT("vhaddps         %[x3], %[x3], %[x3]")       // x3   = nx*lx0+ny*ly0 nz*lz0+nw nx*lx0+ny*ly0 nz*lz0+nw
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")       // x2   = nx*dx+ny*dy nz*dz nx*dx+ny*dy nz*dz
+                __ASM_EMIT("vhaddps         %[x3], %[x3], %[x3]")       // x3   = nx*lx0+ny*ly0+nz*lz0+nw = T T T T
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")       // x2   = nx*dx+ny*dy nz*dz B B B B
+                __ASM_EMIT("vdivps          %[x2], %[x3], %[x3]")       // x3   = T/B T/B T/B T/B = W
+                __ASM_EMIT("vfnmadd231ps    %[x3], %[x0], %[x1]")       // x1   = lx0-dx*W ly0-dy*W lz0-dz*W 1
+                __ASM_EMIT("vmovups         %[x1], (%[sp])")
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [sp] "r" (sp), [l0] "r" (l0), [l1] "r" (l1), [pl] "r" (pl)
+                : "memory"
+            );
+        }
+
+        void calc_split_point_pvv1_fma3(point3d_t *sp, const point3d_t *lv, const vector3d_t *pl)
+        {
+            float x0, x1, x2, x3;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[lv]), %[x1]")        // x1   = l0 = lx0 ly0 lz0 1
+                __ASM_EMIT("vmovups         0x10(%[lv]), %[x0]")        // x0   = l1 = lx1 ly1 lz1 1
+                __ASM_EMIT("vmovups         (%[pl]), %[x2]")            // x2   = pl = nx ny nz nw
+                __ASM_EMIT("vsubps          %[x1], %[x0], %[x0]")       // x0   = d = l1 - l0 = dx dy dz 0
+                __ASM_EMIT("vmulps          %[x2], %[x1], %[x3]")       // x3   = nx*lx0 ny*ly0 nz*lz0 nw */
+                __ASM_EMIT("vmulps          %[x0], %[x2], %[x2]")       // x2   = nx*dx ny*dy nz*dz 0 */
+                __ASM_EMIT("vhaddps         %[x3], %[x3], %[x3]")       // x3   = nx*lx0+ny*ly0 nz*lz0+nw nx*lx0+ny*ly0 nz*lz0+nw
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")       // x2   = nx*dx+ny*dy nz*dz nx*dx+ny*dy nz*dz
+                __ASM_EMIT("vhaddps         %[x3], %[x3], %[x3]")       // x3   = nx*lx0+ny*ly0+nz*lz0+nw = T T T T
+                __ASM_EMIT("vhaddps         %[x2], %[x2], %[x2]")       // x2   = nx*dx+ny*dy nz*dz B B B B
+                __ASM_EMIT("vdivps          %[x2], %[x3], %[x3]")       // x3   = T/B T/B T/B T/B = W
+                __ASM_EMIT("vfnmadd231ps    %[x3], %[x0], %[x1]")       // x1   = lx0-dx*W ly0-dy*W lz0-dz*W 1
+                __ASM_EMIT("vmovups         %[x1], (%[sp])")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [sp] "r" (sp), [lv] "r" (lv), [pl] "r" (pl)
+                : "cc", "memory"
+            );
+        }
+
+        float check_triplet3d_p3n(const point3d_t *p1, const point3d_t *p2, const point3d_t *p3, const vector3d_t *n)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p2]), %[x2]")            // x2   = p2 = px2 py2 pz2 1
+                __ASM_EMIT("vmovups         (%[p3]), %[x3]")            // x3   = p3 = px3 py3 pz3 1
+                __ASM_EMIT("vsubps          (%[p1]), %[x2], %[x1]")     // x1   = p2 - p1
+                __ASM_EMIT("vmovups         (%[n]), %[x0]")             // x0   = nx ny nz 0
+                __ASM_EMIT("vsubps          %[x2], %[x3], %[x2]")       // x2   = p3 - p2
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [p1] "r" (p1), [p2] "r" (p2), [p3] "r" (p3), [n] "r" (n)
+            );
+
+            return x0;
+        }
+
+        float check_triplet3d_pvn(const point3d_t *pv, const vector3d_t *n)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x2]")        // x2   = p2 = px2 py2 pz2 1
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x3]")        // x3   = p3 = px3 py3 pz3 1
+                __ASM_EMIT("vsubps          0x00(%[pv]), %[x2], %[x1]") // x1   = p2 - p1
+                __ASM_EMIT("vmovups         (%[n]), %[x0]")             // x0   = nx ny nz nw
+                __ASM_EMIT("vsubps          %[x2], %[x3], %[x2]")       // x2   = p3 - p2
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [pv] "r" (pv), [n] "r" (n)
+            );
+
+            return x0;
+        }
+
+        float check_triplet3d_v2n(const vector3d_t *v1, const vector3d_t *v2, const vector3d_t *n)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[v1]), %[x1]")            // x1   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         (%[v2]), %[x2]")            // x2   = x2 y2 z2 w2
+                __ASM_EMIT("vmovups         (%[n]), %[x0]")             // x0   = nx ny nz nw
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v1] "r" (v1), [v2] "r" (v2), [n] "r" (n)
+            );
+
+            return x0;
+        }
+
+        float check_triplet3d_vvn(const vector3d_t *v, const vector3d_t *n)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[v]), %[x1]")         // x1   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         0x10(%[v]), %[x2]")         // x2   = x2 y2 z2 w2
+                __ASM_EMIT("vmovups         (%[n]), %[x0]")             // x0   = nx ny nz nw
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v), [n] "r" (n)
+            );
+
+            return x0;
+        }
+
+        float check_triplet3d_vv(const vector3d_t *v)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups      0x00(%[v]), %[x1]")            // x1   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups      0x10(%[v]), %[x2]")            // x2   = x2 y2 z2 w2
+                __ASM_EMIT("vmovups      0x20(%[v]), %[x0]")            // x0   = nx ny nz nw
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v)
+            );
+
+            return x0;
+        }
+
+        float check_triplet3d_p3n_fma3(const point3d_t *p1, const point3d_t *p2, const point3d_t *p3, const vector3d_t *n)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[p2]), %[x2]")            // x2   = p2 = px2 py2 pz2 1
+                __ASM_EMIT("vmovups         (%[p3]), %[x3]")            // x3   = p3 = px3 py3 pz3 1
+                __ASM_EMIT("vsubps          (%[p1]), %[x2], %[x1]")     // x1   = p2 - p1
+                __ASM_EMIT("vmovups         (%[n]), %[x0]")             // x0   = nx ny nz 0
+                __ASM_EMIT("vsubps          %[x2], %[x3], %[x2]")       // x2   = p3 - p2
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [p1] "r" (p1), [p2] "r" (p2), [p3] "r" (p3), [n] "r" (n)
+            );
+
+            return x0;
+        }
+
+        float check_triplet3d_pvn_fma3(const point3d_t *pv, const vector3d_t *n)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x2]")        // x2   = p2 = px2 py2 pz2 1
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x3]")        // x3   = p3 = px3 py3 pz3 1
+                __ASM_EMIT("vsubps          0x00(%[pv]), %[x2], %[x1]") // x1   = p2 - p1
+                __ASM_EMIT("vmovups         (%[n]), %[x0]")             // x0   = nx ny nz nw
+                __ASM_EMIT("vsubps          %[x2], %[x3], %[x2]")       // x2   = p3 - p2
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [pv] "r" (pv), [n] "r" (n)
+            );
+
+            return x0;
+        }
+
+        float check_triplet3d_v2n_fma3(const vector3d_t *v1, const vector3d_t *v2, const vector3d_t *n)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         (%[v1]), %[x1]")            // x1   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         (%[v2]), %[x2]")            // x2   = x2 y2 z2 w2
+                __ASM_EMIT("vmovups         (%[n]), %[x0]")             // x0   = nx ny nz nw
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v1] "r" (v1), [v2] "r" (v2), [n] "r" (n)
+            );
+
+            return x0;
+        }
+
+        float check_triplet3d_vvn_fma3(const vector3d_t *v, const vector3d_t *n)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups         0x00(%[v]), %[x1]")         // x1   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups         0x10(%[v]), %[x2]")         // x2   = x2 y2 z2 w2
+                __ASM_EMIT("vmovups         (%[n]), %[x0]")             // x0   = nx ny nz nw
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v), [n] "r" (n)
+            );
+
+            return x0;
+        }
+
+        float check_triplet3d_vv_fma3(const vector3d_t *v)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("vmovups      0x00(%[v]), %[x1]")            // x1   = x1 y1 z1 w1
+                __ASM_EMIT("vmovups      0x10(%[v]), %[x2]")            // x2   = x2 y2 z2 w2
+                __ASM_EMIT("vmovups      0x20(%[v]), %[x0]")            // x0   = nx ny nz nw
+
+                MIXED_PRODUCT3("x0", "x1", "x2", "x3", "x4")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
+                : [v] "r" (v)
+            );
+
+            return x0;
+        }
+
+        float check_point3d_on_triangle_pvp(const point3d_t *pv, const point3d_t *p)
+        {
+            float x0, x1, x2, x3, x4, x5, x6, x7;
+
+            ARCH_X86_ASM
+            (
+                /* Load vectors */
+                __ASM_EMIT("vmovups         (%[p]), %[x3]")             // x3   = px py pz 1
+                __ASM_EMIT("vmovups         0x00(%[pv]), %[x0]")        // x0   = x0 y0 z0 1
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x1]")        // x1   = x1 y1 z1 1
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x2]")        // x2   = x2 y2 z2 1
+                __ASM_EMIT("vsubps          %[x3], %[x0], %[x0]")       // x0   = v0 = dx0 dy0 dz0 0
+                __ASM_EMIT("vsubps          %[x3], %[x1], %[x1]")       // x1   = v1 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x3], %[x2], %[x2]")       // x2   = v2 = dx2 dy2 dz2 0
+                /* 3x vector multiplications */
+                VECTOR_CROSS3_X3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
+                /* 3x scalar multiplications */
+                /* x0 = m0 = v0 cross v1 */
+                /* x1 = m1 = v1 cross v2 */
+                /* x2 = m2 = v2 cross v0 */
+                VECTOR_DOT3_X3("[x0]", "[x1]", "[x2]", "[x3]")
+                /* Compare with zeros */
+                /* x0 = r0 = m0 dot m1 */
+                /* x1 = r1 = m1 dot m2 */
+                /* x2 = r2 = m2 dot m0 */
+                __ASM_EMIT("vxorps          %[x4], %[x4], %[x4]")       // x4   = 0
+                __ASM_EMIT("vucomiss        %[x4], %[x0]")              // r0 <=> 0
+                __ASM_EMIT("jb              110f")                      // r0 < 0
+                __ASM_EMIT("vmulss          %[x1], %[x0], %[x0]")       // x0 = r0 * r1
+                __ASM_EMIT("vucomiss        %[x4], %[x1]")              // r1 <=> 0
+                __ASM_EMIT("jb              109f")                      // r1 < 0
+                __ASM_EMIT("vmulss          %[x2], %[x0], %[x0]")       // x0 = r0 * r1 * r2
+                __ASM_EMIT("vucomiss        %[x4], %[x2]")              // r2 <=> 0
+                __ASM_EMIT("jae             110f")                      // r2 >= 0
+                /* Fail cases */
+                __ASM_EMIT("vmovaps         %[x2], %[x0]")              // x0 = r2
+                __ASM_EMIT("jmp             110f")
+                __ASM_EMIT("109:")
+                __ASM_EMIT("vmovaps         %[x1], %[x0]")              // x0 = r1
+                /* End */
+                __ASM_EMIT("110:")
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)
+                : [pv] "r" (pv), [p] "r" (p)
+            );
+
+            return x0;
+        }
+
+        float check_point3d_on_triangle_p3p(const point3d_t *p1, const point3d_t *p2, const point3d_t *p3, const point3d_t *p)
+        {
+            float x0, x1, x2, x3, x4, x5, x6, x7;
+
+            ARCH_X86_ASM
+            (
+                /* Load vectors */
+                __ASM_EMIT("vmovups         (%[p]), %[x3]")             // x3   = px py pz 1
+                __ASM_EMIT("vmovups         (%[p1]), %[x0]")            // x0   = x0 y0 z0 1
+                __ASM_EMIT("vmovups         (%[p2]), %[x1]")            // x1   = x1 y1 z1 1
+                __ASM_EMIT("vmovups         (%[p3]), %[x2]")            // x2   = x2 y2 z2 1
+                __ASM_EMIT("vsubps          %[x3], %[x0], %[x0]")       // x0   = v0 = dx0 dy0 dz0 0
+                __ASM_EMIT("vsubps          %[x3], %[x1], %[x1]")       // x1   = v1 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x3], %[x2], %[x2]")       // x2   = v2 = dx2 dy2 dz2 0
+                /* 3x vector multiplications */
+                VECTOR_CROSS3_X3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
+                /* 3x scalar multiplications */
+                /* x0 = m0 = v0 cross v1 */
+                /* x1 = m1 = v1 cross v2 */
+                /* x2 = m2 = v2 cross v0 */
+                VECTOR_DOT3_X3("[x0]", "[x1]", "[x2]", "[x3]")
+                /* Compare with zeros */
+                /* x0 = r0 = m0 dot m1 */
+                /* x1 = r1 = m1 dot m2 */
+                /* x2 = r2 = m2 dot m0 */
+                __ASM_EMIT("vxorps          %[x4], %[x4], %[x4]")       // x4   = 0
+                __ASM_EMIT("vucomiss        %[x4], %[x0]")              // r0 <=> 0
+                __ASM_EMIT("jb              110f")                      // r0 < 0
+                __ASM_EMIT("vmulss          %[x1], %[x0], %[x0]")       // x0 = r0 * r1
+                __ASM_EMIT("vucomiss        %[x4], %[x1]")              // r1 <=> 0
+                __ASM_EMIT("jb              109f")                      // r1 < 0
+                __ASM_EMIT("vmulss          %[x2], %[x0], %[x0]")       // x0 = r0 * r1 * r2
+                __ASM_EMIT("vucomiss        %[x4], %[x2]")              // r2 <=> 0
+                __ASM_EMIT("jae             110f")                      // r2 >= 0
+                /* Fail cases */
+                __ASM_EMIT("vmovaps         %[x2], %[x0]")              // x0 = r2
+                __ASM_EMIT("jmp             110f")
+                __ASM_EMIT("109:")
+                __ASM_EMIT("vmovaps         %[x1], %[x0]")              // x0 = r1
+                /* End */
+                __ASM_EMIT("110:")
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)
+                : [p1] "r" (p1), [p2] "r" (p2), [p3] "r" (p3), [p] "r" (p)
+            );
+
+            return x0;
+        }
+
+        float check_point3d_on_triangle_pvp_fma3(const point3d_t *pv, const point3d_t *p)
+        {
+            float x0, x1, x2, x3, x4, x5, x6, x7;
+
+            ARCH_X86_ASM
+            (
+                /* Load vectors */
+                __ASM_EMIT("vmovups         (%[p]), %[x3]")             // x3   = px py pz 1
+                __ASM_EMIT("vmovups         0x00(%[pv]), %[x0]")        // x0   = x0 y0 z0 1
+                __ASM_EMIT("vmovups         0x10(%[pv]), %[x1]")        // x1   = x1 y1 z1 1
+                __ASM_EMIT("vmovups         0x20(%[pv]), %[x2]")        // x2   = x2 y2 z2 1
+                __ASM_EMIT("vsubps          %[x3], %[x0], %[x0]")       // x0   = v0 = dx0 dy0 dz0 0
+                __ASM_EMIT("vsubps          %[x3], %[x1], %[x1]")       // x1   = v1 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x3], %[x2], %[x2]")       // x2   = v2 = dx2 dy2 dz2 0
+                /* 3x vector multiplications */
+                VECTOR_CROSS3_X3_FMA3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
+                /* 3x scalar multiplications */
+                /* x0 = m0 = v0 cross v1 */
+                /* x1 = m1 = v1 cross v2 */
+                /* x2 = m2 = v2 cross v0 */
+                VECTOR_DOT3_X3("[x0]", "[x1]", "[x2]", "[x3]")
+                /* Compare with zeros */
+                /* x0 = r0 = m0 dot m1 */
+                /* x1 = r1 = m1 dot m2 */
+                /* x2 = r2 = m2 dot m0 */
+                __ASM_EMIT("vxorps          %[x4], %[x4], %[x4]")       // x4   = 0
+                __ASM_EMIT("vucomiss        %[x4], %[x0]")              // r0 <=> 0
+                __ASM_EMIT("jb              110f")                      // r0 < 0
+                __ASM_EMIT("vmulss          %[x1], %[x0], %[x0]")       // x0 = r0 * r1
+                __ASM_EMIT("vucomiss        %[x4], %[x1]")              // r1 <=> 0
+                __ASM_EMIT("jb              109f")                      // r1 < 0
+                __ASM_EMIT("vmulss          %[x2], %[x0], %[x0]")       // x0 = r0 * r1 * r2
+                __ASM_EMIT("vucomiss        %[x4], %[x2]")              // r2 <=> 0
+                __ASM_EMIT("jae             110f")                      // r2 >= 0
+                /* Fail cases */
+                __ASM_EMIT("vmovaps         %[x2], %[x0]")              // x0 = r2
+                __ASM_EMIT("jmp             110f")
+                __ASM_EMIT("109:")
+                __ASM_EMIT("vmovaps         %[x1], %[x0]")              // x0 = r1
+                /* End */
+                __ASM_EMIT("110:")
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)
+                : [pv] "r" (pv), [p] "r" (p)
+            );
+
+            return x0;
+        }
+
+        float check_point3d_on_triangle_p3p_fma3(const point3d_t *p1, const point3d_t *p2, const point3d_t *p3, const point3d_t *p)
+        {
+            float x0, x1, x2, x3, x4, x5, x6, x7;
+
+            ARCH_X86_ASM
+            (
+                /* Load vectors */
+                __ASM_EMIT("vmovups         (%[p]), %[x3]")             // x3   = px py pz 1
+                __ASM_EMIT("vmovups         (%[p1]), %[x0]")            // x0   = x0 y0 z0 1
+                __ASM_EMIT("vmovups         (%[p2]), %[x1]")            // x1   = x1 y1 z1 1
+                __ASM_EMIT("vmovups         (%[p3]), %[x2]")            // x2   = x2 y2 z2 1
+                __ASM_EMIT("vsubps          %[x3], %[x0], %[x0]")       // x0   = v0 = dx0 dy0 dz0 0
+                __ASM_EMIT("vsubps          %[x3], %[x1], %[x1]")       // x1   = v1 = dx1 dy1 dz1 0
+                __ASM_EMIT("vsubps          %[x3], %[x2], %[x2]")       // x2   = v2 = dx2 dy2 dz2 0
+                /* 3x vector multiplications */
+                VECTOR_CROSS3_X3_FMA3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
+                /* 3x scalar multiplications */
+                /* x0 = m0 = v0 cross v1 */
+                /* x1 = m1 = v1 cross v2 */
+                /* x2 = m2 = v2 cross v0 */
+                VECTOR_DOT3_X3("[x0]", "[x1]", "[x2]", "[x3]")
+                /* Compare with zeros */
+                /* x0 = r0 = m0 dot m1 */
+                /* x1 = r1 = m1 dot m2 */
+                /* x2 = r2 = m2 dot m0 */
+                __ASM_EMIT("vxorps          %[x4], %[x4], %[x4]")       // x4   = 0
+                __ASM_EMIT("vucomiss        %[x4], %[x0]")              // r0 <=> 0
+                __ASM_EMIT("jb              110f")                      // r0 < 0
+                __ASM_EMIT("vmulss          %[x1], %[x0], %[x0]")       // x0 = r0 * r1
+                __ASM_EMIT("vucomiss        %[x4], %[x1]")              // r1 <=> 0
+                __ASM_EMIT("jb              109f")                      // r1 < 0
+                __ASM_EMIT("vmulss          %[x2], %[x0], %[x0]")       // x0 = r0 * r1 * r2
+                __ASM_EMIT("vucomiss        %[x4], %[x2]")              // r2 <=> 0
+                __ASM_EMIT("jae             110f")                      // r2 >= 0
+                /* Fail cases */
+                __ASM_EMIT("vmovaps         %[x2], %[x0]")              // x0 = r2
+                __ASM_EMIT("jmp             110f")
+                __ASM_EMIT("109:")
+                __ASM_EMIT("vmovaps         %[x1], %[x0]")              // x0 = r1
+                /* End */
+                __ASM_EMIT("110:")
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)
+                : [p1] "r" (p1), [p2] "r" (p2), [p3] "r" (p3), [p] "r" (p)
+            );
+
+            return x0;
+        }
+
+    } /* namespace avx */
+} /* namespace lsp */
+
+
+
+
+#endif /* PRIVATE_DSP_ARCH_X86_AVX_3DMATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/cos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/cos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/cos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/cos.h	2025-08-26 18:15:43.726003291 +0000
@@ -0,0 +1,622 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX2_PMATH_COS_H_
+#define PRIVATE_DSP_ARCH_X86_AVX2_PMATH_COS_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX2_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_AVX2_IMPL */
+
+#include <private/dsp/arch/x86/avx2/pmath/sin.h>
+
+namespace lsp
+{
+    namespace avx2
+    {
+        void cosf1(float *dst, size_t count)
+        {
+            IF_ARCH_X86(float *src);
+
+            ARCH_X86_ASM(
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = PI/2 - x1 + PI/2
+                __ASM_EMIT("vsubps          0x20(%[dst]), %%ymm1, %%ymm4")  // ymm4     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = PI/2 - x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%xmm1, %%xmm0")  // xmm0     = PI/2 - x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             14f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("mov             %[dst], %[src]")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = PI/2 - x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "=&r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void cosf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_X86_ASM(
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = PI/2 - x1 + PI/2
+                __ASM_EMIT("vsubps          0x20(%[src]), %%ymm1, %%ymm4")  // ymm4     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[src]")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = PI/2 - x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[src]")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%xmm1, %%xmm0")  // xmm0     = PI/2 - x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[src]")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             14f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = PI/2 - x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void cosf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm6")                  // ymm6     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm7")                  // ymm7     = p
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm0")        // ymm0     = PI
+                __ASM_EMIT("vmovaps         0x00 + %[S2KP], %%ymm4")        // ymm4     = i = 0 1 2 3 4 5 6 7
+                __ASM_EMIT("vmovaps         0x60 + %[S2KP], %%ymm5")        // ymm5     = step = 8 8 8 8 8 8 8 8
+                __ASM_EMIT("vsubps          %%ymm7, %%ymm0, %%ymm7")        // ymm7     = PI/2 - p + PI/2
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm4, %%ymm6, %%ymm0")        // ymm0     = k*i
+                __ASM_EMIT("vaddps          %%ymm5, %%ymm4, %%ymm4")        // ymm4     = i + step
+                __ASM_EMIT("vsubps          %%ymm0, %%ymm7, %%ymm0")        // ymm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")        // xmm0     = k*i
+                __ASM_EMIT("vaddps          0x80 + %[S2KP], %%xmm4, %%xmm4")// xmm4     = i + step
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm7, %%xmm0")        // xmm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             8f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")        // xmm0     = k*i
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm7, %%xmm0")        // xmm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("8:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void x64_cosf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_64_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm11")                     // ymm11    = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm12")                     // ymm12    = p
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm0")            // ymm0     = PI
+                __ASM_EMIT("vmovaps         0x00 + %[S2KP], %%ymm8")            // ymm8     = i0 = 0 1 2 3 4 5 6 7
+                __ASM_EMIT("vmovaps         0x20 + %[S2KP], %%ymm9")            // ymm9     = i1 = 8 9 10 11 12 13 14
+                __ASM_EMIT("vmovaps         0x40 + %[S2KP], %%ymm10")           // ymm10    = step = 16 ...
+                __ASM_EMIT("vsubps          %%ymm12, %%ymm0, %%ymm12")          // ymm12    = PI/2 - p + PI/2
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")           // ymm0     = k*i0
+                __ASM_EMIT("vmulps          %%ymm9, %%ymm11, %%ymm4")           // ymm4     = k*i1
+                __ASM_EMIT("vaddps          %%ymm10, %%ymm8, %%ymm8")           // ymm8     = i0 + step
+                __ASM_EMIT("vaddps          %%ymm10, %%ymm9, %%ymm9")           // ymm9     = i1 + step
+                __ASM_EMIT("vsubps          %%ymm0, %%ymm12, %%ymm0")           // ymm0     = PI/2 - (k*i0 + p) + PI/2
+                __ASM_EMIT("vsubps          %%ymm4, %%ymm12, %%ymm4")           // ymm4     = PI/2 - (k*i1 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")           // ymm0     = k*i0
+                __ASM_EMIT("vaddps          0x60 + %[S2KP], %%ymm8, %%ymm8")    // ymm8     = i0 + step
+                __ASM_EMIT("vsubps          %%ymm0, %%ymm12, %%ymm0")           // ymm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")           // xmm0     = k*i0
+                __ASM_EMIT("vaddps          0x80 + %[S2KP], %%xmm8, %%xmm8")    // xmm8     = i0 + step
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm12, %%xmm0")           // xmm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             10f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")           // xmm0     = k*i0
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm12, %%xmm0")           // xmm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%xmm8", "%xmm9", "%xmm10", "%xmm11",
+                  "%xmm12"
+            );
+        }
+
+
+        void cosf1_fma3(float *dst, size_t count)
+        {
+            IF_ARCH_X86(float *src);
+
+            ARCH_X86_ASM(
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = PI/2 - x1 + PI/2
+                __ASM_EMIT("vsubps          0x20(%[dst]), %%ymm1, %%ymm4")  // ymm4     = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%xmm1, %%xmm0")  // xmm0     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             14f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("mov             %[dst], %[src]")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "=&r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void cosf2_fma3(float *dst, const float *src, size_t count)
+        {
+            ARCH_X86_ASM(
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = PI/2 - x1 + PI/2
+                __ASM_EMIT("vsubps          0x20(%[src]), %%ymm1, %%ymm4")  // ymm4     = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[src]")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[src]")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%xmm1, %%xmm0")  // xmm0     = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[src]")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             14f")
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void cosf_kp1_fma3(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm6")                  // ymm6     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm7")                  // ymm7     = p
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm0")        // ymm0     = PI
+                __ASM_EMIT("vmovaps         0x00 + %[S2KP], %%ymm4")        // ymm4     = i = 0 1 2 3 4 5 6 7
+                __ASM_EMIT("vmovaps         0x60 + %[S2KP], %%ymm5")        // ymm5     = step = 8 8 8 8 8 8 8 8
+                __ASM_EMIT("vsubps          %%ymm7, %%ymm0, %%ymm7")        // ymm7     = PI/2 - p + PI/2
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm4, %%ymm6, %%ymm0")        // ymm0     = k*i
+                __ASM_EMIT("vaddps          %%ymm5, %%ymm4, %%ymm4")        // ymm4     = i + step
+                __ASM_EMIT("vsubps          %%ymm0, %%ymm7, %%ymm0")        // ymm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")        // xmm0     = k*i
+                __ASM_EMIT("vaddps          0x80 + %[S2KP], %%xmm4, %%xmm4")// xmm4     = i + step
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm7, %%xmm0")        // xmm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             8f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")        // xmm0     = k*i
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm7, %%xmm0")        // xmm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("8:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void x64_cosf_kp1_fma3(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_64_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm11")                     // ymm11     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm12")                     // ymm12     = p
+                __ASM_EMIT("vmovaps         0x020 + %[S2C], %%ymm0")            // ymm0      = PI
+                __ASM_EMIT("vmovaps         0x00 + %[S2KP], %%ymm8")            // ymm8      = i0 = 0 1 2 3 4 5 6 7
+                __ASM_EMIT("vmovaps         0x20 + %[S2KP], %%ymm9")            // ymm9      = i1 = 8 9 10 11 12 13 14
+                __ASM_EMIT("vmovaps         0x40 + %[S2KP], %%ymm10")           // ymm10     = step = 16 ...
+                __ASM_EMIT("vsubps          %%ymm12, %%ymm0, %%ymm12")          // ymm12     = PI/2 + p + PI/2 ...
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")           // ymm0     = k*i0
+                __ASM_EMIT("vmulps          %%ymm9, %%ymm11, %%ymm4")           // ymm4     = k*i1
+                __ASM_EMIT("vaddps          %%ymm10, %%ymm8, %%ymm8")           // ymm8     = i0 + step
+                __ASM_EMIT("vaddps          %%ymm10, %%ymm9, %%ymm9")           // ymm9     = i1 + step
+                __ASM_EMIT("vsubps          %%ymm0, %%ymm12, %%ymm0")           // ymm0     = PI/2 - (k*i0 + p) + PI/2
+                __ASM_EMIT("vsubps          %%ymm4, %%ymm12, %%ymm4")           // ymm4     = PI/2 - (k*i1 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")           // ymm0     = k*i0
+                __ASM_EMIT("vaddps          0x60 + %[S2KP], %%ymm8, %%ymm8")    // ymm8     = i0 + step
+                __ASM_EMIT("vsubps          %%ymm0, %%ymm12, %%ymm0")           // ymm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")           // xmm0     = k*i0
+                __ASM_EMIT("vaddps          0x80 + %[S2KP], %%xmm8, %%xmm8")    // xmm8     = i0 + step
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm12, %%xmm0")           // xmm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             10f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")           // xmm0     = k*i0
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm12, %%xmm0")           // xmm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%xmm8", "%xmm9", "%xmm10", "%xmm11",
+                  "%xmm12"
+            );
+        }
+
+    } /* namespace avx2 */
+} /* namespace lsp */
+
+
+
+
+#endif /* PRIVATE_DSP_ARCH_X86_AVX2_PMATH_COS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/lanczos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/lanczos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/lanczos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/lanczos.h	2025-08-26 18:15:43.730003252 +0000
@@ -0,0 +1,507 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 17 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX2_PMATH_LANCZOS_H_
+#define PRIVATE_DSP_ARCH_X86_AVX2_PMATH_LANCZOS_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX2_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_AVX2_IMPL */
+
+#include <private/dsp/arch/x86/avx2/pmath/sin.h>
+
+namespace lsp
+{
+    namespace avx2
+    {
+        IF_ARCH_X86(
+            static const uint32_t lanczos_const[] __lsp_aligned32 =
+            {
+                LSP_DSP_VEC8(0x7fffffff),                   // +0x00: Mask for fabsf
+                LSP_DSP_VEC8(0x38d1b717),                   // +0x20: Sinc threshold = 1e-4
+                LSP_DSP_VEC8(0x3f800000),                   // +0x40: 1.0
+            };
+        )
+
+        typedef struct lanczos_gen_t
+        {
+            float k[8];                         // +0x00: Multiplier
+            float p[8];                         // +0x20: Initial phase
+            float a[8];                         // +0x40: Number of lobes
+            float i[8];                         // +0x60: Indices
+            float x1[8];                        // +0x80: Computed X1
+            float d[8];                         // +0xa0: Denominator
+            float t[8];                         // +0xc0: Time range
+        } lanczos_gen_t;
+
+        #define LANCZOS_GEN_FUNC_X8 \
+            /* ymm0 = x1 */ \
+            __ASM_EMIT("vmulps          0x40 + %[state], %%ymm0, %%ymm4")           /* ymm4     = x2 = x1*a */ \
+            __ASM_EMIT("vmovaps         %%ymm0, 0x80 + %[state]")                   /* *x1      = x1 */ \
+            __ASM_EMIT("vmulps          %%ymm0, %%ymm4, %%ymm2")                    /* ymm2     = d = x1 * x2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm0, %%ymm0")             /* ymm0     = x1 + PI/2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm4, %%ymm4")             /* ymm4     = x2 + PI/2 */ \
+            __ASM_EMIT("vmovaps         %%ymm2, 0xa0 + %[state]")                   /* *d       = d */ \
+            SINF_X_PLUS_PI_2_CORE_X16                                               /* ymm0     = sinf(x1), ymm4 = sinf(x2) */ \
+            __ASM_EMIT("vmovaps         0x80 + %[state], %%ymm1")                   /* ymm1     = x1 */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%ymm1, %%ymm1")              /* ymm1     = fabsf(x) */ \
+            __ASM_EMIT("vdivps          0xa0 + %[state], %%ymm0, %%ymm0")           /* ymm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x20 + %[LC], %%ymm1, %%ymm2")          /* ymm2     = [ fabsf(x) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, 0xc0 + %[state], %%ymm1, %%ymm1")       /* ymm1     = [ fabsf(x) < t ] */ \
+            __ASM_EMIT("vblendvps       %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0")      /* ymm0     = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        #define LANCZOS_GEN_FUNC_X4 \
+            /* xmm0 = x1 */ \
+            __ASM_EMIT("vmulps          0x40 + %[state], %%xmm0, %%xmm4")           /* xmm4     = x2 = x1*a */ \
+            __ASM_EMIT("vmovaps         %%xmm0, 0x80 + %[state]")                   /* *x1      = x1 */ \
+            __ASM_EMIT("vmulps          %%xmm0, %%xmm4, %%xmm2")                    /* xmm2     = d = x1 * x2 */ \
+            __ASM_EMIT("vinsertf128     $1, %%xmm4, %%ymm0, %%ymm0")                /* ymm0     = x1 x1 x1 x1 x2 x2 x2 x2 */ \
+            __ASM_EMIT("vmovaps         %%xmm2, 0xa0 + %[state]")                   /* *d       = d */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm0, %%ymm0")             /* xmm0     = x1 + PI/2 ... x2 + PI/2 ... */ \
+            SINF_X_PLUS_PI_2_CORE_X8                                                /* ymm0     = sinf(x1) ... sinf(x2) ... */ \
+            __ASM_EMIT("vextractf128    $1, %%ymm0, %%xmm4")                        /* xmm4     = sif(x2) */ \
+            __ASM_EMIT("vmovaps         0x80 + %[state], %%xmm1")                   /* xmm1     = x1 */ \
+            __ASM_EMIT("vmulps          %%xmm4, %%xmm0, %%xmm0")                    /* xmm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%xmm1, %%xmm1")              /* xmm1     = fabsf(x) */ \
+            __ASM_EMIT("vdivps          0xa0 + %[state], %%xmm0, %%xmm0")           /* xmm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x20 + %[LC], %%xmm1, %%xmm2")          /* xmm2     = [ fabsf(x) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, 0xc0 + %[state], %%xmm1, %%xmm1")       /* xmm1     = [ fabsf(x) < t ] */ \
+            __ASM_EMIT("vblendvps       %%xmm2, 0x40 + %[LC], %%xmm0, %%xmm0")      /* xmm0     = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%xmm1, %%xmm0, %%xmm0")                    /* xmm0     = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+
+        void lanczos1(float *dst,  float k, float p, float t, float a, size_t count)
+        {
+            IF_ARCH_X86(
+                lanczos_gen_t state __lsp_aligned32;
+                float stub[8] __lsp_aligned16;
+            );
+
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm4")                              // ymm4     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm5")                              // ymm5     = p
+                __ASM_EMIT("vbroadcastss    %[a], %%ymm6")                              // ymm6     = a
+                __ASM_EMIT("vbroadcastss    %[t], %%ymm7")                              // ymm7     = t
+                __ASM_EMIT("vmovaps         %%ymm4, 0x00 + %[state]")
+                __ASM_EMIT("vmovaps         %%ymm5, 0x20 + %[state]")
+                __ASM_EMIT("vmovaps         %%ymm6, 0x40 + %[state]")
+                __ASM_EMIT("vmovaps         %%ymm7, 0xc0 + %[state]")
+                __ASM_EMIT("vmovaps         0x00 + %[LGEN], %%ymm1")                    // ymm1     = i = 0 1 2 3 4 5 6 7
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          0x00 + %[state], %%ymm1, %%ymm0")           // ymm0     = k*i
+                __ASM_EMIT("vaddps          0x60 + %[LGEN], %%ymm1, %%ymm1")            // ymm1     = i' = i + step
+                __ASM_EMIT("vsubps          0x20 + %[state], %%ymm0, %%ymm0")           // ymm0     = x1 = k*i - p
+                __ASM_EMIT("vmovaps         %%ymm1, 0x60 + %[state]")                   // *i       = i'
+                LANCZOS_GEN_FUNC_X8
+                __ASM_EMIT("vmovaps         0x60 + %[state], %%ymm1")                   // ymm1     = i'
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          0x00 + %[state], %%xmm1, %%xmm0")           // xmm0     = k*i
+                __ASM_EMIT("vaddps          0x80 + %[LGEN], %%xmm1, %%xmm1")            // xmm1     = i' = i + step
+                __ASM_EMIT("vsubps          0x20 + %[state], %%xmm0, %%xmm0")           // xmm0     = x1 = k*i - p
+                __ASM_EMIT("vmovaps         %%xmm1, 0x60 + %[state]")                   // *i       = i'
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("vmovaps         0x60 + %[state], %%xmm1")                   // xmm1     = i'
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             8f")
+                __ASM_EMIT("vmulps          0x00 + %[state], %%xmm1, %%xmm0")           // xmm0     = k*i
+                __ASM_EMIT("vsubps          0x20 + %[state], %%xmm0, %%xmm0")           // xmm0     = x1 = k*i - p
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("8:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [state] "o" (state),
+                  [S2C] "o" (sinf_const),
+                  [LGEN] "o" (kp_gen_const),
+                  [LC] "o" (lanczos_const),
+                  [stub] "o" (stub),
+                  [k] "m" (k),
+                  [p] "m" (p),
+                  [a] "m" (a),
+                  [t] "m" (t)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        #define LANCZOS_GEN_X64_FUNC_X8 \
+            /* ymm8     = k */ \
+            /* ymm9     = p */ \
+            /* ymm10    = t */ \
+            /* ymm11    = a */ \
+            /* ymm12    = x1 */ \
+            /* ymm13    = d */ \
+            /* ymm14    = i */ \
+            /* ymm15    = step */ \
+            __ASM_EMIT("vmulps          %%ymm11, %%ymm12, %%ymm4")                  /* ymm12    = x2 = x1*a */ \
+            __ASM_EMIT("vmulps          %%ymm12, %%ymm4, %%ymm13")                  /* ymm13    = d = x1 * x2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm12, %%ymm0")            /* ymm0     = x1 + PI/2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm4, %%ymm4")             /* ymm4     = x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X16                                               /* ymm0     = sinf(x1), ymm4 = sinf(x2) */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%ymm12, %%ymm12")            /* ymm12    = fabsf(x1) */ \
+            __ASM_EMIT("vdivps          %%ymm13, %%ymm0, %%ymm0")                   /* ymm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x20 + %[LC], %%ymm12, %%ymm2")         /* ymm2     = [ fabsf(x1) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, %%ymm10, %%ymm12, %%ymm1")              /* ymm1     = [ fabsf(x1) < t ] */ \
+            __ASM_EMIT("vblendvps       %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0")      /* ymm0     = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        #define LANCZOS_GEN_X64_FUNC_X4 \
+            /* xmm0 = x1 */ \
+            __ASM_EMIT("vmulps          %%xmm11, %%xmm12, %%xmm4")                  /* xmm12    = x2 = x1*a */ \
+            __ASM_EMIT("vmulps          %%xmm12, %%xmm4, %%xmm13")                  /* xmm13    = d = x1 * x2 */ \
+            __ASM_EMIT("vinsertf128     $1, %%xmm4, %%ymm12, %%ymm0")               /* ymm0     = x1 x1 x1 x1 x2 x2 x2 x2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm0, %%ymm0")             /* ymm0     = x1 + PI/2 ... x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X8                                                /* ymm0     = sinf(x1) ... sinf(x2) */ \
+            __ASM_EMIT("vextractf128    $1, %%ymm0, %%xmm4")                        /* xmm4     = sif(x2) */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%ymm12, %%ymm12")            /* ymm12    = fabsf(x1) */ \
+            __ASM_EMIT("vdivps          %%ymm13, %%ymm0, %%ymm0")                   /* ymm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x20 + %[LC], %%ymm12, %%ymm2")         /* ymm2     = [ fabsf(x1) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, %%ymm10, %%ymm12, %%ymm1")              /* ymm1     = [ fabsf(x1) < t ] */ \
+            __ASM_EMIT("vblendvps       %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0")      /* ymm0     = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        void x64_lanczos1(float *dst,  float k, float p, float t, float a, size_t count)
+        {
+            ARCH_X86_64_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm8")                              // ymm8     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm9")                              // ymm9     = p
+                __ASM_EMIT("vbroadcastss    %[t], %%ymm10")                             // ymm10    = t
+                __ASM_EMIT("vbroadcastss    %[a], %%ymm11")                             // ymm11    = a
+                __ASM_EMIT("vmovaps         0x00 + %[LGEN], %%ymm14")                   // ymm14    = i = 0 1 2 3 4 5 6 7
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("vmovaps         0x60 + %[LGEN], %%ymm15")                   // ymm15    = step
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm14, %%ymm12")                  // ymm12    = k*i
+                __ASM_EMIT("vaddps          %%ymm15, %%ymm14, %%ymm14")                 // ymm14    = i' = i + step
+                __ASM_EMIT("vsubps          %%ymm9, %%ymm12, %%ymm12")                  // ymm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm14, %%xmm12")                  // xmm12    = k*i
+                __ASM_EMIT("vaddps          0x80 + %[LGEN], %%xmm14, %%xmm14")          // xmm14    = i' = i + step
+                __ASM_EMIT("vsubps          %%xmm9, %%xmm12, %%xmm12")                  // xmm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             8f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm14, %%xmm12")                   // xmm12    = k*i
+                __ASM_EMIT("vsubps          %%xmm9, %%xmm12, %%xmm12")                   // xmm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("8:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [LGEN] "o" (kp_gen_const),
+                  [LC] "o" (lanczos_const),
+                  [k] "m" (k),
+                  [p] "m" (p),
+                  [a] "m" (a),
+                  [t] "m" (t)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%xmm8", "%xmm9", "%xmm10", "%xmm11",
+                  "%xmm12", "%xmm13", "%xmm14", "%xmm15"
+            );
+        }
+
+
+        #define LANCZOS_GEN_FUNC_X8_FMA3 \
+            /* ymm0 = x1 */ \
+            __ASM_EMIT("vmulps          0x40 + %[state], %%ymm0, %%ymm4")           /* ymm4     = x2 = x1*a */ \
+            __ASM_EMIT("vmovaps         %%ymm0, 0x80 + %[state]")                   /* *x1      = x1 */ \
+            __ASM_EMIT("vmulps          %%ymm0, %%ymm4, %%ymm2")                    /* ymm2     = d = x1 * x2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm0, %%ymm0")             /* ymm0     = x1 + PI/2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm4, %%ymm4")             /* ymm4     = x2 + PI/2 */ \
+            __ASM_EMIT("vmovaps         %%ymm2, 0xa0 + %[state]")                   /* *d       = d */ \
+            SINF_X_PLUS_PI_2_CORE_X16_FMA3                                          /* ymm0     = sinf(x1), ymm4 = sinf(x2) */ \
+            __ASM_EMIT("vmovaps         0x80 + %[state], %%ymm1")                   /* ymm1     = x1 */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%ymm1, %%ymm1")              /* ymm1     = fabsf(x) */ \
+            __ASM_EMIT("vdivps          0xa0 + %[state], %%ymm0, %%ymm0")           /* ymm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x20 + %[LC], %%ymm1, %%ymm2")          /* ymm2     = [ fabsf(x) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, 0xc0 + %[state], %%ymm1, %%ymm1")       /* ymm1     = [ fabsf(x) < t ] */ \
+            __ASM_EMIT("vblendvps       %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0")      /* ymm0     = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        #define LANCZOS_GEN_FUNC_X4_FMA3 \
+            /* xmm0 = x1 */ \
+            __ASM_EMIT("vmulps          0x40 + %[state], %%xmm0, %%xmm4")           /* xmm4     = x2 = x1*a */ \
+            __ASM_EMIT("vmovaps         %%xmm0, 0x80 + %[state]")                   /* *x1      = x1 */ \
+            __ASM_EMIT("vmulps          %%xmm0, %%xmm4, %%xmm2")                    /* xmm2     = d = x1 * x2 */ \
+            __ASM_EMIT("vinsertf128     $1, %%xmm4, %%ymm0, %%ymm0")                /* ymm0     = x1 x1 x1 x1 x2 x2 x2 x2 */ \
+            __ASM_EMIT("vmovaps         %%xmm2, 0xa0 + %[state]")                   /* *d       = d */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm0, %%ymm0")             /* xmm0     = x1 + PI/2 ... x2 + PI/2 ... */ \
+            SINF_X_PLUS_PI_2_CORE_X8_FMA3                                           /* ymm0     = sinf(x1) ... sinf(x2) */ \
+            __ASM_EMIT("vextractf128    $1, %%ymm0, %%xmm4")                        /* xmm4     = sif(x2) */ \
+            __ASM_EMIT("vmovaps         0x80 + %[state], %%xmm1")                   /* xmm1     = x1 */ \
+            __ASM_EMIT("vmulps          %%xmm4, %%xmm0, %%xmm0")                    /* xmm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%xmm1, %%xmm1")              /* xmm1     = fabsf(x) */ \
+            __ASM_EMIT("vdivps          0xa0 + %[state], %%xmm0, %%xmm0")           /* xmm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x20 + %[LC], %%xmm1, %%xmm2")          /* xmm2     = [ fabsf(x) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, 0xc0 + %[state], %%xmm1, %%xmm1")       /* xmm1     = [ fabsf(x) < t ] */ \
+            __ASM_EMIT("vblendvps       %%xmm2, 0x40 + %[LC], %%xmm0, %%xmm0")      /* xmm0     = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%xmm1, %%xmm0, %%xmm0")                    /* xmm0     = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        void lanczos1_fma3(float *dst,  float k, float p, float t, float a, size_t count)
+        {
+            IF_ARCH_X86(
+                lanczos_gen_t state __lsp_aligned32;
+                float stub[8] __lsp_aligned16;
+            );
+
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm4")                              // ymm4     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm5")                              // ymm5     = p
+                __ASM_EMIT("vbroadcastss    %[a], %%ymm6")                              // ymm6     = a
+                __ASM_EMIT("vbroadcastss    %[t], %%ymm7")                              // ymm7     = t
+                __ASM_EMIT("vmovaps         %%ymm4, 0x00 + %[state]")
+                __ASM_EMIT("vmovaps         %%ymm5, 0x20 + %[state]")
+                __ASM_EMIT("vmovaps         %%ymm6, 0x40 + %[state]")
+                __ASM_EMIT("vmovaps         %%ymm7, 0xc0 + %[state]")
+                __ASM_EMIT("vmovaps         0x00 + %[LGEN], %%ymm1")                    // ymm1     = i = 0 1 2 3 4 5 6 7
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          0x00 + %[state], %%ymm1, %%ymm0")           // ymm0     = k*i
+                __ASM_EMIT("vaddps          0x60 + %[LGEN], %%ymm1, %%ymm1")            // ymm1     = i' = i + step
+                __ASM_EMIT("vsubps          0x20 + %[state], %%ymm0, %%ymm0")           // ymm0     = x1 = k*i - p
+                __ASM_EMIT("vmovaps         %%ymm1, 0x60 + %[state]")                   // *i       = i'
+                LANCZOS_GEN_FUNC_X8_FMA3
+                __ASM_EMIT("vmovaps         0x60 + %[state], %%ymm1")                   // ymm1     = i'
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          0x00 + %[state], %%xmm1, %%xmm0")           // xmm0     = k*i
+                __ASM_EMIT("vaddps          0x80 + %[LGEN], %%xmm1, %%xmm1")            // xmm1     = i' = i + step
+                __ASM_EMIT("vsubps          0x20 + %[state], %%xmm0, %%xmm0")           // xmm0     = x1 = k*i - p
+                __ASM_EMIT("vmovaps         %%xmm1, 0x60 + %[state]")                   // *i       = i'
+                LANCZOS_GEN_FUNC_X4_FMA3
+                __ASM_EMIT("vmovaps         0x60 + %[state], %%xmm1")                   // xmm1     = i'
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             8f")
+                __ASM_EMIT("vmulps          0x00 + %[state], %%xmm1, %%xmm0")           // xmm0     = k*i
+                __ASM_EMIT("vsubps          0x20 + %[state], %%xmm0, %%xmm0")           // xmm0     = x1 = k*i - p
+                LANCZOS_GEN_FUNC_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("8:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [state] "o" (state),
+                  [S2C] "o" (sinf_const),
+                  [LGEN] "o" (kp_gen_const),
+                  [LC] "o" (lanczos_const),
+                  [stub] "o" (stub),
+                  [k] "m" (k),
+                  [p] "m" (p),
+                  [a] "m" (a),
+                  [t] "m" (t)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        #define LANCZOS_GEN_X64_FUNC_X8_FMA3 \
+            /* ymm8     = k */ \
+            /* ymm9     = p */ \
+            /* ymm10    = t */ \
+            /* ymm11    = a */ \
+            /* ymm12    = x1 */ \
+            /* ymm13    = d */ \
+            /* ymm14    = i */ \
+            /* ymm15    = step */ \
+            __ASM_EMIT("vmulps          %%ymm11, %%ymm12, %%ymm4")                  /* ymm12    = x2 = x1*a */ \
+            __ASM_EMIT("vmulps          %%ymm12, %%ymm4, %%ymm13")                  /* ymm13    = d = x1 * x2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm12, %%ymm0")            /* ymm0     = x1 + PI/2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm4, %%ymm4")             /* ymm4     = x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X16_FMA3                                          /* ymm0     = sinf(x1), ymm4 = sinf(x2) */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%ymm12, %%ymm12")            /* ymm12    = fabsf(x1) */ \
+            __ASM_EMIT("vdivps          %%ymm13, %%ymm0, %%ymm0")                   /* ymm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x20 + %[LC], %%ymm12, %%ymm2")         /* ymm2     = [ fabsf(x1) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, %%ymm10, %%ymm12, %%ymm1")              /* ymm1     = [ fabsf(x1) < t ] */ \
+            __ASM_EMIT("vblendvps       %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0")      /* ymm0     = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        #define LANCZOS_GEN_X64_FUNC_X4_FMA3 \
+            /* xmm0 = x1 */ \
+            __ASM_EMIT("vmulps          %%xmm11, %%xmm12, %%xmm4")                  /* xmm12    = x2 = x1*a */ \
+            __ASM_EMIT("vmulps          %%xmm12, %%xmm4, %%xmm13")                  /* xmm13    = d = x1 * x2 */ \
+            __ASM_EMIT("vinsertf128     $1, %%xmm4, %%ymm12, %%ymm0")               /* ymm0     = x1 x1 x1 x1 x2 x2 x2 x2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm0, %%ymm0")             /* ymm0     = x1 + PI/2 ... x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X8_FMA3                                           /* ymm0     = sinf(x1) ... sinf(x2) */ \
+            __ASM_EMIT("vextractf128    $1, %%ymm0, %%xmm4")                        /* xmm4     = sif(x2) */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%ymm12, %%ymm12")            /* ymm12    = fabsf(x1) */ \
+            __ASM_EMIT("vdivps          %%ymm13, %%ymm0, %%ymm0")                   /* ymm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x20 + %[LC], %%ymm12, %%ymm2")         /* ymm2     = [ fabsf(x1) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, %%ymm10, %%ymm12, %%ymm1")              /* ymm1     = [ fabsf(x1) < t ] */ \
+            __ASM_EMIT("vblendvps       %%ymm2, 0x40 + %[LC], %%ymm0, %%ymm0")      /* ymm0     = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        void x64_lanczos1_fma3(float *dst,  float k, float p, float t, float a, size_t count)
+        {
+            ARCH_X86_64_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm8")                              // ymm8     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm9")                              // ymm9     = p
+                __ASM_EMIT("vbroadcastss    %[t], %%ymm10")                             // ymm10    = t
+                __ASM_EMIT("vbroadcastss    %[a], %%ymm11")                             // ymm11    = a
+                __ASM_EMIT("vmovaps         0x00 + %[LGEN], %%ymm14")                   // ymm14    = i = 0 1 2 3 4 5 6 7
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("vmovaps         0x60 + %[LGEN], %%ymm15")                   // ymm15    = step
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm14, %%ymm12")                  // ymm12    = k*i
+                __ASM_EMIT("vaddps          %%ymm15, %%ymm14, %%ymm14")                 // ymm14    = i' = i + step
+                __ASM_EMIT("vsubps          %%ymm9, %%ymm12, %%ymm12")                  // ymm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X8_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm14, %%xmm12")                  // xmm12    = k*i
+                __ASM_EMIT("vaddps          0x80 + %[LGEN], %%xmm14, %%xmm14")          // xmm14    = i' = i + step
+                __ASM_EMIT("vsubps          %%xmm9, %%xmm12, %%xmm12")                  // xmm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X4_FMA3
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             8f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm14, %%xmm12")                   // xmm12    = k*i
+                __ASM_EMIT("vsubps          %%xmm9, %%xmm12, %%xmm12")                   // xmm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("8:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [LGEN] "o" (kp_gen_const),
+                  [LC] "o" (lanczos_const),
+                  [k] "m" (k),
+                  [p] "m" (p),
+                  [a] "m" (a),
+                  [t] "m" (t)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%xmm8", "%xmm9", "%xmm10", "%xmm11",
+                  "%xmm12", "%xmm13", "%xmm14", "%xmm15"
+            );
+        }
+
+    } /* namespace avx2 */
+} /* namespace lsp */
+
+
+#endif /* PRIVATE_DSP_ARCH_X86_AVX2_PMATH_LANCZOS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/sin.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/sin.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/sin.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath/sin.h	2025-08-26 18:15:43.730003252 +0000
@@ -0,0 +1,836 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 12 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX2_PMATH_SIN_H_
+#define PRIVATE_DSP_ARCH_X86_AVX2_PMATH_SIN_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX2_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_AVX2_IMPL */
+
+namespace lsp
+{
+    namespace avx2
+    {
+        IF_ARCH_X86(
+            static const float kp_gen_const[] __lsp_aligned32 =
+            {
+                0.0f, 1.0f, 2.0f,   3.0f,  4.0f,  5.0f,  6.0f,  7.0f,     // +0x00: Initial values
+                8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f,     // +0x20: Initial values
+                LSP_DSP_VEC8(16.0),                                       // +0x40: Step x16
+                LSP_DSP_VEC8(8.0),                                        // +0x60: Step x8
+                LSP_DSP_VEC4(4.0),                                        // +0x80: Step x4
+            };
+        )
+
+        IF_ARCH_X86(
+            static const uint32_t sinf_const[] __lsp_aligned32 =
+            {
+                LSP_DSP_VEC8(0x3fc90fdb),       // +0x000:  PI/2
+                LSP_DSP_VEC8(0x40490fdb),       // +0x020:  PI
+                LSP_DSP_VEC8(0x3e22f983),       // +0x040:  1/(2*PI)
+                LSP_DSP_VEC8(0x40c90fdb),       // +0x060:  2*PI
+                LSP_DSP_VEC8(0x4096cbe4),       // +0x080:  3*PI/2
+                LSP_DSP_VEC8(0xb2d7322b),       // +0x0a0:  C0 = -1/11! = -2.50521083854e-08
+                LSP_DSP_VEC8(0x3638ef1d),       // +0x0c0:  C1 = 1/9! = 2.7557319224e-06
+                LSP_DSP_VEC8(0xb9500d01),       // +0x0e0:  C2 = -1/7! = -0.000198412698413
+                LSP_DSP_VEC8(0x3c088889),       // +0x100:  C3 = 1/5! = 0.00833333333333
+                LSP_DSP_VEC8(0xbe2aaaab),       // +0x120:  C4 = -1/3! = -0.166666666667
+                LSP_DSP_VEC8(0x3f800000),       // +0x140:  1.0
+            };
+        )
+
+        #define SINF_X_PLUS_PI_2_CORE_X16               \
+            /* ymm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x040 + %[S2C], %%ymm0, %%ymm1")        /* ymm1     = X / (2*PI) */ \
+            __ASM_EMIT("vmulps          0x040 + %[S2C], %%ymm4, %%ymm5") \
+            __ASM_EMIT("vpsrad          $31, %%ymm0, %%ymm3")                   /* ymm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vpsrad          $31, %%ymm4, %%ymm7") \
+            __ASM_EMIT("vcvttps2dq      %%ymm1, %%ymm1")                        /* ymm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vcvttps2dq      %%ymm5, %%ymm5") \
+            __ASM_EMIT("vpaddd          %%ymm3, %%ymm1, %%ymm1")                /* ymm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vpaddd          %%ymm7, %%ymm5, %%ymm5") \
+            __ASM_EMIT("vcvtdq2ps       %%ymm1, %%ymm1")                        /* ymm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%ymm5, %%ymm5") \
+            __ASM_EMIT("vmulps          0x060 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = period * 2 * PI */ \
+            __ASM_EMIT("vmulps          0x060 + %[S2C], %%ymm5, %%ymm5") \
+            __ASM_EMIT("vsubps          %%ymm1, %%ymm0, %%ymm0")                /* ymm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vsubps          %%ymm5, %%ymm4, %%ymm4") \
+            __ASM_EMIT("vmovaps         0x080 + %[S2C], %%ymm1")                /* ymm1     = 3*PI/2 */ \
+            __ASM_EMIT("vmovaps         0x080 + %[S2C], %%ymm5") \
+            __ASM_EMIT("vcmpps          $1, 0x020 + %[S2C], %%ymm0, %%ymm2")    /* ymm2     = [ Y < PI ] */ \
+            __ASM_EMIT("vcmpps          $1, 0x020 + %[S2C], %%ymm4, %%ymm6") \
+            __ASM_EMIT("vsubps          %%ymm0, %%ymm1, %%ymm1")                /* ymm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsubps          %%ymm4, %%ymm5, %%ymm5") \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%ymm0, %%ymm0")        /* ymm0     = Y - PI/2 */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%ymm4, %%ymm4") \
+            __ASM_EMIT("vblendvps       %%ymm2, %%ymm0, %%ymm1, %%ymm0")        /* ymm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            __ASM_EMIT("vblendvps       %%ymm6, %%ymm4, %%ymm5, %%ymm4") \
+            /* ymm0     = XX */ \
+            __ASM_EMIT("vmulps          %%ymm0, %%ymm0, %%ymm2")                /* ymm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm4, %%ymm6") \
+            __ASM_EMIT("vmulps          0x0a0 + %[S2C], %%ymm2, %%ymm1")        /* ymm2     = X2*C0 */ \
+            __ASM_EMIT("vmulps          0x0a0 + %[S2C], %%ymm6, %%ymm5") \
+            __ASM_EMIT("vaddps          0x0c0 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = C1 + X2*C0 */ \
+            __ASM_EMIT("vaddps          0x0c0 + %[S2C], %%ymm5, %%ymm5") \
+            __ASM_EMIT("vmulps          %%ymm2, %%ymm1, %%ymm1")                /* ymm1     = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vmulps          %%ymm6, %%ymm5, %%ymm5") \
+            __ASM_EMIT("vaddps          0x0e0 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vaddps          0x0e0 + %[S2C], %%ymm5, %%ymm5") \
+            __ASM_EMIT("vmulps          %%ymm2, %%ymm1, %%ymm1")                /* ymm1     = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vmulps          %%ymm6, %%ymm5, %%ymm5") \
+            __ASM_EMIT("vaddps          0x100 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vaddps          0x100 + %[S2C], %%ymm5, %%ymm5") \
+            __ASM_EMIT("vmulps          %%ymm2, %%ymm1, %%ymm1")                /* ymm1     = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vmulps          %%ymm6, %%ymm5, %%ymm5") \
+            __ASM_EMIT("vaddps          0x120 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vaddps          0x120 + %[S2C], %%ymm5, %%ymm5") \
+            __ASM_EMIT("vmulps          %%ymm2, %%ymm1, %%ymm1")                /* ymm1     = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmulps          %%ymm6, %%ymm5, %%ymm5") \
+            __ASM_EMIT("vaddps          0x140 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vaddps          0x140 + %[S2C], %%ymm5, %%ymm5") \
+            __ASM_EMIT("vmulps          %%ymm1, %%ymm0, %%ymm0")                /* ymm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */ \
+            __ASM_EMIT("vmulps          %%ymm5, %%ymm4, %%ymm4")
+
+        #define SINF_X_PLUS_PI_2_CORE_X8                \
+            /* ymm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x040 + %[S2C], %%ymm0, %%ymm1")        /* ymm1     = X / (2*PI) */ \
+            __ASM_EMIT("vpsrad          $31, %%ymm0, %%ymm3")                   /* ymm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvttps2dq      %%ymm1, %%ymm1")                        /* ymm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vpaddd          %%ymm3, %%ymm1, %%ymm1")                /* ymm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%ymm1, %%ymm1")                        /* ymm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vmulps          0x060 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = period * 2 * PI */ \
+            __ASM_EMIT("vsubps          %%ymm1, %%ymm0, %%ymm0")                /* ymm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vmovaps         0x080 + %[S2C], %%ymm1")                /* ymm1     = 3*PI/2 */ \
+            __ASM_EMIT("vcmpps          $1, 0x020 + %[S2C], %%ymm0, %%ymm2")    /* ymm2     = [ Y < PI ] */ \
+            __ASM_EMIT("vsubps          %%ymm0, %%ymm1, %%ymm1")                /* ymm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%ymm0, %%ymm0")        /* ymm0     = Y - PI/2 */ \
+            __ASM_EMIT("vblendvps       %%ymm2, %%ymm0, %%ymm1, %%ymm0")        /* ymm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* ymm0     = XX */ \
+            __ASM_EMIT("vmulps          %%ymm0, %%ymm0, %%ymm2")                /* ymm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vmulps          0x0a0 + %[S2C], %%ymm2, %%ymm1")        /* ymm2     = X2*C0 */ \
+            __ASM_EMIT("vaddps          0x0c0 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = C1 + X2*C0 */ \
+            __ASM_EMIT("vmulps          %%ymm2, %%ymm1, %%ymm1")                /* ymm1     = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vaddps          0x0e0 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vmulps          %%ymm2, %%ymm1, %%ymm1")                /* ymm1     = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vaddps          0x100 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vmulps          %%ymm2, %%ymm1, %%ymm1")                /* ymm1     = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vaddps          0x120 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vmulps          %%ymm2, %%ymm1, %%ymm1")                /* ymm1     = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vaddps          0x140 + %[S2C], %%ymm1, %%ymm1")        /* ymm1     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmulps          %%ymm1, %%ymm0, %%ymm0")                /* ymm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        #define SINF_X_PLUS_PI_2_CORE_X4                \
+            /* xmm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x040 + %[S2C], %%xmm0, %%xmm1")        /* xmm1     = X / (2*PI) */ \
+            __ASM_EMIT("vpsrad          $31, %%xmm0, %%xmm3")                   /* xmm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvttps2dq      %%xmm1, %%xmm1")                        /* xmm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vpaddd          %%xmm3, %%xmm1, %%xmm1")                /* xmm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%xmm1, %%xmm1")                        /* xmm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vmulps          0x060 + %[S2C], %%xmm1, %%xmm1")        /* xmm1     = period * 2 * PI */ \
+            __ASM_EMIT("vsubps          %%xmm1, %%xmm0, %%xmm0")                /* xmm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vmovaps         0x080 + %[S2C], %%xmm1")                /* xmm1     = 3*PI/2 */ \
+            __ASM_EMIT("vcmpps          $1, 0x020 + %[S2C], %%xmm0, %%xmm2")    /* xmm2     = [ Y < PI ] */ \
+            __ASM_EMIT("vsubps          %%xmm0, %%xmm1, %%xmm1")                /* xmm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%xmm0, %%xmm0")        /* xmm0     = Y - PI/2 */ \
+            __ASM_EMIT("vblendvps       %%xmm2, %%xmm0, %%xmm1, %%xmm0")        /* xmm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* xmm0     = XX */ \
+            __ASM_EMIT("vmulps          %%xmm0, %%xmm0, %%xmm2")                /* xmm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vmulps          0x0a0 + %[S2C], %%xmm2, %%xmm1")        /* xmm2     = X2*C0 */ \
+            __ASM_EMIT("vaddps          0x0c0 + %[S2C], %%xmm1, %%xmm1")        /* xmm1     = C1 + X2*C0 */ \
+            __ASM_EMIT("vmulps          %%xmm2, %%xmm1, %%xmm1")                /* xmm1     = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vaddps          0x0e0 + %[S2C], %%xmm1, %%xmm1")        /* xmm1     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vmulps          %%xmm2, %%xmm1, %%xmm1")                /* xmm1     = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vaddps          0x100 + %[S2C], %%xmm1, %%xmm1")        /* xmm1     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vmulps          %%xmm2, %%xmm1, %%xmm1")                /* xmm1     = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vaddps          0x120 + %[S2C], %%xmm1, %%xmm1")        /* xmm1     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vmulps          %%xmm2, %%xmm1, %%xmm1")                /* xmm1     = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vaddps          0x140 + %[S2C], %%xmm1, %%xmm1")        /* xmm1     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmulps          %%xmm1, %%xmm0, %%xmm0")                /* xmm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        void sinf1(float *dst, size_t count)
+        {
+            IF_ARCH_X86(float *src);
+
+            ARCH_X86_ASM(
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = x1 + PI/2
+                __ASM_EMIT("vaddps          0x20(%[dst]), %%ymm1, %%ymm4")  // ymm4     = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%xmm1, %%xmm0")  // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             14f")
+                __ASM_EMIT("mov             %[dst], %[src]")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "=&r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void sinf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_X86_ASM(
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = x1 + PI/2
+                __ASM_EMIT("vaddps          0x20(%[src]), %%ymm1, %%ymm4")  // ymm4     = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[src]")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[src]")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%xmm1, %%xmm0")  // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[src]")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             14f")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void sinf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm6")                  // ymm6     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm7")                  // ymm7     = p
+                __ASM_EMIT("vmovaps         0x00 + %[S2KP], %%ymm4")        // ymm4     = i = 0 1 2 3 4 5 6 7
+                __ASM_EMIT("vmovaps         0x60 + %[S2KP], %%ymm5")        // ymm5     = step = 8 8 8 8 8 8 8 8
+                __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm7, %%ymm7") // ymm7     = p+PI/2 p+PI/2 p+PI/2 p+PI/2
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm4, %%ymm6, %%ymm0")        // ymm0     = k*i
+                __ASM_EMIT("vaddps          %%ymm5, %%ymm4, %%ymm4")        // ymm4     = i + step
+                __ASM_EMIT("vaddps          %%ymm7, %%ymm0, %%ymm0")        // ymm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")        // xmm0     = k*i
+                __ASM_EMIT("vaddps          0x80 + %[S2KP], %%xmm4, %%xmm4")// xmm4     = i + step
+                __ASM_EMIT("vaddps          %%xmm7, %%xmm0, %%xmm0")        // xmm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             8f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")        // xmm0     = k*i
+                __ASM_EMIT("vaddps          %%xmm7, %%xmm0, %%xmm0")        // xmm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("8:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void x64_sinf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_64_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm11")                     // ymm11     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm12")                     // ymm12     = p
+                __ASM_EMIT("vmovaps         0x00 + %[S2KP], %%ymm8")            // ymm8      = i0 = 0 1 2 3 4 5 6 7
+                __ASM_EMIT("vmovaps         0x20 + %[S2KP], %%ymm9")            // ymm9      = i1 = 8 9 10 11 12 13 14
+                __ASM_EMIT("vmovaps         0x40 + %[S2KP], %%ymm10")           // ymm10     = step = 16 ...
+                __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm12, %%ymm12")   // ymm12     = p+PI/2 ...
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")           // ymm0     = k*i0
+                __ASM_EMIT("vmulps          %%ymm9, %%ymm11, %%ymm4")           // ymm4     = k*i1
+                __ASM_EMIT("vaddps          %%ymm10, %%ymm8, %%ymm8")           // ymm8     = i0 + step
+                __ASM_EMIT("vaddps          %%ymm10, %%ymm9, %%ymm9")           // ymm9     = i1 + step
+                __ASM_EMIT("vaddps          %%ymm12, %%ymm0, %%ymm0")           // ymm0     = k*i0 + p + PI/2
+                __ASM_EMIT("vaddps          %%ymm12, %%ymm4, %%ymm4")           // ymm4     = k*i1 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")           // ymm0     = k*i0
+                __ASM_EMIT("vaddps          0x60 + %[S2KP], %%ymm8, %%ymm8")    // ymm8     = i0 + step
+                __ASM_EMIT("vaddps          %%ymm12, %%ymm0, %%ymm0")           // ymm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")           // xmm0     = k*i0
+                __ASM_EMIT("vaddps          0x80 + %[S2KP], %%xmm8, %%xmm8")    // xmm8     = i0 + step
+                __ASM_EMIT("vaddps          %%xmm12, %%xmm0, %%xmm0")           // xmm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             10f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")           // xmm0     = k*i0
+                __ASM_EMIT("vaddps          %%xmm12, %%xmm0, %%xmm0")           // xmm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%xmm8", "%xmm9", "%xmm10", "%xmm11",
+                  "%xmm12"
+            );
+        }
+
+        #define SINF_X_PLUS_PI_2_CORE_X16_FMA3            \
+            /* ymm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x040 + %[S2C], %%ymm0, %%ymm1")        /* ymm1     = X / (2*PI) */ \
+            __ASM_EMIT("vmulps          0x040 + %[S2C], %%ymm4, %%ymm5") \
+            __ASM_EMIT("vpsrad          $31, %%ymm0, %%ymm3")                   /* ymm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vpsrad          $31, %%ymm4, %%ymm7") \
+            __ASM_EMIT("vcvttps2dq      %%ymm1, %%ymm1")                        /* ymm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vcvttps2dq      %%ymm5, %%ymm5") \
+            __ASM_EMIT("vpaddd          %%ymm3, %%ymm1, %%ymm1")                /* ymm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vpaddd          %%ymm7, %%ymm5, %%ymm5") \
+            __ASM_EMIT("vcvtdq2ps       %%ymm1, %%ymm1")                        /* ymm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%ymm5, %%ymm5") \
+            __ASM_EMIT("vfnmadd231ps    0x060 + %[S2C], %%ymm1, %%ymm0")        /* ymm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vfnmadd231ps    0x060 + %[S2C], %%ymm5, %%ymm4") \
+            __ASM_EMIT("vmovaps         0x080 + %[S2C], %%ymm1")                /* ymm1     = 3*PI/2 */ \
+            __ASM_EMIT("vmovaps         0x080 + %[S2C], %%ymm5") \
+            __ASM_EMIT("vcmpps          $1, 0x020 + %[S2C], %%ymm0, %%ymm2")    /* ymm2     = [ Y < PI ] */ \
+            __ASM_EMIT("vcmpps          $1, 0x020 + %[S2C], %%ymm4, %%ymm6") \
+            __ASM_EMIT("vsubps          %%ymm0, %%ymm1, %%ymm1")                /* ymm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsubps          %%ymm4, %%ymm5, %%ymm5") \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%ymm0, %%ymm0")        /* ymm0     = Y - PI/2 */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%ymm4, %%ymm4") \
+            __ASM_EMIT("vblendvps       %%ymm2, %%ymm0, %%ymm1, %%ymm0")        /* ymm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            __ASM_EMIT("vblendvps       %%ymm6, %%ymm4, %%ymm5, %%ymm4") \
+            /* ymm0     = XX */ \
+            __ASM_EMIT("vmovaps         0x0a0 + %[S2C], %%ymm1")                /* ymm3     = C0 */ \
+            __ASM_EMIT("vmovaps         0x0a0 + %[S2C], %%ymm5") \
+            __ASM_EMIT("vmulps          %%ymm0, %%ymm0, %%ymm2")                /* ymm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm4, %%ymm6") \
+            __ASM_EMIT("vfmadd213ps     0x0c0 + %[S2C], %%ymm2, %%ymm1")        /* ymm1     = C1 + X2*C0 */ \
+            __ASM_EMIT("vfmadd213ps     0x0c0 + %[S2C], %%ymm6, %%ymm5") \
+            __ASM_EMIT("vfmadd213ps     0x0e0 + %[S2C], %%ymm2, %%ymm1")        /* ymm1     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vfmadd213ps     0x0e0 + %[S2C], %%ymm6, %%ymm5") \
+            __ASM_EMIT("vfmadd213ps     0x100 + %[S2C], %%ymm2, %%ymm1")        /* ymm1     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vfmadd213ps     0x100 + %[S2C], %%ymm6, %%ymm5") \
+            __ASM_EMIT("vfmadd213ps     0x120 + %[S2C], %%ymm2, %%ymm1")        /* ymm1     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vfmadd213ps     0x120 + %[S2C], %%ymm6, %%ymm5") \
+            __ASM_EMIT("vfmadd213ps     0x140 + %[S2C], %%ymm2, %%ymm1")        /* ymm1     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vfmadd213ps     0x140 + %[S2C], %%ymm6, %%ymm5") \
+            __ASM_EMIT("vmulps          %%ymm1, %%ymm0, %%ymm0")                /* ymm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */ \
+            __ASM_EMIT("vmulps          %%ymm5, %%ymm4, %%ymm4")
+
+        #define SINF_X_PLUS_PI_2_CORE_X8_FMA3            \
+            /* ymm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x040 + %[S2C], %%ymm0, %%ymm1")        /* ymm1     = X / (2*PI) */ \
+            __ASM_EMIT("vpsrad          $31, %%ymm0, %%ymm3")                   /* ymm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvttps2dq      %%ymm1, %%ymm1")                        /* ymm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vpaddd          %%ymm3, %%ymm1, %%ymm1")                /* ymm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%ymm1, %%ymm1")                        /* ymm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vfnmadd231ps    0x060 + %[S2C], %%ymm1, %%ymm0")        /* ymm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vmovaps         0x080 + %[S2C], %%ymm1")                /* ymm1     = 3*PI/2 */ \
+            __ASM_EMIT("vcmpps          $1, 0x020 + %[S2C], %%ymm0, %%ymm2")    /* ymm2     = [ Y < PI ] */ \
+            __ASM_EMIT("vsubps          %%ymm0, %%ymm1, %%ymm1")                /* ymm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%ymm0, %%ymm0")        /* ymm0     = Y - PI/2 */ \
+            __ASM_EMIT("vblendvps       %%ymm2, %%ymm0, %%ymm1, %%ymm0")        /* ymm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* ymm0     = XX */ \
+            __ASM_EMIT("vmovaps         0x0a0 + %[S2C], %%ymm1")                /* ymm3     = C0 */ \
+            __ASM_EMIT("vmulps          %%ymm0, %%ymm0, %%ymm2")                /* ymm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vfmadd213ps     0x0c0 + %[S2C], %%ymm2, %%ymm1")        /* ymm2     = C1 + X2*C0 */ \
+            __ASM_EMIT("vfmadd213ps     0x0e0 + %[S2C], %%ymm2, %%ymm1")        /* ymm2     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vfmadd213ps     0x100 + %[S2C], %%ymm2, %%ymm1")        /* ymm2     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vfmadd213ps     0x120 + %[S2C], %%ymm2, %%ymm1")        /* ymm2     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vfmadd213ps     0x140 + %[S2C], %%ymm2, %%ymm1")        /* ymm2     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmulps          %%ymm1, %%ymm0, %%ymm0")                /* ymm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        #define SINF_X_PLUS_PI_2_CORE_X4_FMA3            \
+            /* xmm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x040 + %[S2C], %%xmm0, %%xmm1")        /* xmm1     = X / (2*PI) */ \
+            __ASM_EMIT("vpsrad          $31, %%xmm0, %%xmm3")                   /* xmm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvttps2dq      %%xmm1, %%xmm1")                        /* xmm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vpaddd          %%xmm3, %%xmm1, %%xmm1")                /* xmm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%xmm1, %%xmm1")                        /* xmm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vfnmadd231ps    0x060 + %[S2C], %%xmm1, %%xmm0")        /* xmm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vmovaps         0x080 + %[S2C], %%xmm1")                /* xmm1     = 3*PI/2 */ \
+            __ASM_EMIT("vcmpps          $1, 0x020 + %[S2C], %%xmm0, %%xmm2")    /* xmm2     = [ Y < PI ] */ \
+            __ASM_EMIT("vsubps          %%xmm0, %%xmm1, %%xmm1")                /* xmm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%xmm0, %%xmm0")        /* xmm0     = Y - PI/2 */ \
+            __ASM_EMIT("vblendvps       %%xmm2, %%xmm0, %%xmm1, %%xmm0")        /* xmm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* xmm0     = XX */ \
+            __ASM_EMIT("vmovaps         0x0a0 + %[S2C], %%xmm1")                /* xmm3     = C0 */ \
+            __ASM_EMIT("vmulps          %%xmm0, %%xmm0, %%xmm2")                /* xmm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vfmadd213ps     0x0c0 + %[S2C], %%xmm2, %%xmm1")        /* xmm1     = C1 + X2*C0 */ \
+            __ASM_EMIT("vfmadd213ps     0x0e0 + %[S2C], %%xmm2, %%xmm1")        /* xmm1     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vfmadd213ps     0x100 + %[S2C], %%xmm2, %%xmm1")        /* xmm1     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vfmadd213ps     0x120 + %[S2C], %%xmm2, %%xmm1")        /* xmm1     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vfmadd213ps     0x140 + %[S2C], %%xmm2, %%xmm1")        /* xmm1     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmulps          %%xmm1, %%xmm0, %%xmm0")                /* xmm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        void sinf1_fma3(float *dst, size_t count)
+        {
+            IF_ARCH_X86(float *src);
+
+            ARCH_X86_ASM(
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = x1 + PI/2
+                __ASM_EMIT("vaddps          0x20(%[dst]), %%ymm1, %%ymm4")  // ymm4     = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%xmm1, %%xmm0")  // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             14f")
+                __ASM_EMIT("mov             %[dst], %[src]")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "=&r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void sinf2_fma3(float *dst, const float *src, size_t count)
+        {
+            ARCH_X86_ASM(
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = x1 + PI/2
+                __ASM_EMIT("vaddps          0x20(%[src]), %%ymm1, %%ymm4")  // ymm4     = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[src]")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[src]")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%xmm1, %%xmm0")  // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[src]")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             14f")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("14:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void sinf_kp1_fma3(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm6")                  // ymm6     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm7")                  // ymm7     = p
+                __ASM_EMIT("vmovaps         0x00 + %[S2KP], %%ymm4")        // ymm4     = i = 0 1 2 3 4 5 6 7
+                __ASM_EMIT("vmovaps         0x60 + %[S2KP], %%ymm5")        // ymm5     = step = 8 8 8 8 8 8 8 8
+                __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm7, %%ymm7") // ymm7     = p+PI/2 p+PI/2 p+PI/2 p+PI/2
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm4, %%ymm6, %%ymm0")        // ymm0     = k*i
+                __ASM_EMIT("vaddps          %%ymm5, %%ymm4, %%ymm4")        // ymm4     = i + step
+                __ASM_EMIT("vaddps          %%ymm7, %%ymm0, %%ymm0")        // ymm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")        // xmm0     = k*i
+                __ASM_EMIT("vaddps          0x80 + %[S2KP], %%xmm4, %%xmm4")// xmm4     = i + step
+                __ASM_EMIT("vaddps          %%xmm7, %%xmm0, %%xmm0")        // xmm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             8f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")        // xmm0     = k*i
+                __ASM_EMIT("vaddps          %%xmm7, %%xmm0, %%xmm0")        // xmm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("8:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void x64_sinf_kp1_fma3(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_64_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%ymm11")                     // ymm11     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%ymm12")                     // ymm12     = p
+                __ASM_EMIT("vmovaps         0x00 + %[S2KP], %%ymm8")            // ymm8      = i0 = 0 1 2 3 4 5 6 7
+                __ASM_EMIT("vmovaps         0x20 + %[S2KP], %%ymm9")            // ymm9      = i1 = 8 9 10 11 12 13 14
+                __ASM_EMIT("vmovaps         0x40 + %[S2KP], %%ymm10")           // ymm10     = step = 16 ...
+                __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm12, %%ymm12")   // ymm12     = p+PI/2 ...
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")           // ymm0     = k*i0
+                __ASM_EMIT("vmulps          %%ymm9, %%ymm11, %%ymm4")           // ymm4     = k*i1
+                __ASM_EMIT("vaddps          %%ymm10, %%ymm8, %%ymm8")           // ymm8     = i0 + step
+                __ASM_EMIT("vaddps          %%ymm10, %%ymm9, %%ymm9")           // ymm9     = i1 + step
+                __ASM_EMIT("vaddps          %%ymm12, %%ymm0, %%ymm0")           // ymm0     = k*i0 + p + PI/2
+                __ASM_EMIT("vaddps          %%ymm12, %%ymm4, %%ymm4")           // ymm4     = k*i1 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%ymm4, 0x20(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")           // ymm0     = k*i0
+                __ASM_EMIT("vaddps          0x60 + %[S2KP], %%ymm8, %%ymm8")    // ymm8     = i0 + step
+                __ASM_EMIT("vaddps          %%ymm12, %%ymm0, %%ymm0")           // ymm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8_FMA3
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")           // xmm0     = k*i0
+                __ASM_EMIT("vaddps          0x80 + %[S2KP], %%xmm8, %%xmm8")    // xmm8     = i0 + step
+                __ASM_EMIT("vaddps          %%xmm12, %%xmm0, %%xmm0")           // xmm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             10f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")           // xmm0     = k*i0
+                __ASM_EMIT("vaddps          %%xmm12, %%xmm0, %%xmm0")           // xmm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4_FMA3
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%xmm8", "%xmm9", "%xmm10", "%xmm11",
+                  "%xmm12"
+            );
+        }
+
+    } /* namespace avx2 */
+} /* namespace lsp */
+
+#endif /* PRIVATE_DSP_ARCH_X86_AVX2_PMATH_SIN_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx2/pmath.h	2025-08-26 18:15:43.726003291 +0000
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 12 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX2_PMATH_H_
+#define PRIVATE_DSP_ARCH_X86_AVX2_PMATH_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX2_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_AVX2_IMPL */
+
+#include <private/dsp/arch/x86/avx2/pmath/cos.h>
+#include <private/dsp/arch/x86/avx2/pmath/lanczos.h>
+#include <private/dsp/arch/x86/avx2/pmath/op_kx.h>
+#include <private/dsp/arch/x86/avx2/pmath/fmop_kx.h>
+#include <private/dsp/arch/x86/avx2/pmath/exp.h>
+#include <private/dsp/arch/x86/avx2/pmath/log.h>
+#include <private/dsp/arch/x86/avx2/pmath/pow.h>
+#include <private/dsp/arch/x86/avx2/pmath/sin.h>
+
+#endif /* PRIVATE_DSP_ARCH_X86_AVX2_PMATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/cos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/cos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/cos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/cos.h	2025-08-26 18:15:43.734003213 +0000
@@ -0,0 +1,381 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef INCLUDE_PRIVATE_DSP_ARCH_X86_AVX512_PMATH_COS_H_
+#define INCLUDE_PRIVATE_DSP_ARCH_X86_AVX512_PMATH_COS_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX512_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_AVX512_IMPL */
+
+#include <private/dsp/arch/x86/avx512/pmath/sin.h>
+
+namespace lsp
+{
+    namespace avx512
+    {
+        void cosf1(float *dst, size_t count)
+        {
+            IF_ARCH_X86(float *src);
+
+            ARCH_X86_ASM(
+                // x32 blocks
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%zmm1")        // zmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%zmm1, %%zmm0")  // zmm0     = PI/2 - x1 + PI/2
+                __ASM_EMIT("vsubps          0x40(%[dst]), %%zmm1, %%zmm4")  // zmm4     = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X32
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%zmm4, 0x40(%[dst])")
+                __ASM_EMIT("add             $0x80, %[dst]")
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x16 blocks
+                __ASM_EMIT("add             $16, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%zmm1")        // zmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%zmm1, %%zmm0")  // zmm0     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("4:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("6:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              8f")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[dst]), %%xmm1, %%xmm0")  // xmm0     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("8:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             16f")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("mov             %[dst], %[src]")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("14:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              16f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("16:")
+
+                : [dst] "+r" (dst), [src] "=&r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%k1", "%k2"
+            );
+        }
+
+        void cosf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_X86_ASM(
+                // x32 blocks
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%zmm1")        // zmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%zmm1, %%zmm0")  // zmm0     = PI/2 - x1 + PI/2
+                __ASM_EMIT("vsubps          0x40(%[src]), %%zmm1, %%zmm4")  // zmm4     = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X32
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%zmm4, 0x40(%[dst])")
+                __ASM_EMIT("add             $0x80, %[src]")
+                __ASM_EMIT("add             $0x80, %[dst]")
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x16 block
+                __ASM_EMIT("add             $16, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%zmm1")        // zmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%zmm1, %%zmm0")  // zmm0     = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[src]")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("4:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%ymm1")        // ymm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[src]")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("6:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              8f")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%xmm1")        // xmm1     = PI
+                __ASM_EMIT("vsubps          0x00(%[src]), %%xmm1, %%xmm0")  // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[src]")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("8:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             16f")
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("14:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              16f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("16:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%k1", "%k2"
+            );
+        }
+
+        void cosf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%zmm6")                      // zmm6     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%zmm7")                      // zmm7     = p
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%zmm0")            // zmm0     = PI
+                __ASM_EMIT("vmovaps         0x000 + %[S2KP], %%zmm4")           // zmm4     = i = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+                __ASM_EMIT("vmovaps         0x0c0 + %[S2KP], %%zmm5")           // zmm5     = step = 16 ...
+                __ASM_EMIT("vsubps          %%zmm7, %%zmm0, %%zmm7")            // zmm7     = PI/2 - p + PI/2 ...
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%zmm4, %%zmm6, %%zmm0")            // zmm0     = k*i
+                __ASM_EMIT("vaddps          %%zmm5, %%zmm4, %%zmm4")            // zmm4     = i + step
+                __ASM_EMIT("vsubps          %%zmm0, %%zmm7, %%zmm0")            // zmm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 blocks
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%ymm4, %%ymm6, %%ymm0")            // ymm0     = k*i
+                __ASM_EMIT("vaddps          0x100 + %[S2KP], %%ymm4, %%ymm4")   // ymm4     = i + step
+                __ASM_EMIT("vsubps          %%ymm0, %%ymm7, %%ymm0")            // ymm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")            // xmm0     = k*i
+                __ASM_EMIT("vaddps          0x120 + %[S2KP], %%xmm4, %%xmm4")   // xmm4     = i + step
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm7, %%xmm0")            // xmm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             10f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")            // xmm0     = k*i
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm7, %%xmm0")            // xmm0     = PI/2 - (k*i + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%k1", "%k2"
+            );
+        }
+
+        void x64_cosf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_64_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%zmm11")                         // zmm11     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%zmm12")                         // zmm12     = p
+                __ASM_EMIT("vmovaps         0x040 + %[S2C], %%zmm0")                // zmm0      = PI
+                __ASM_EMIT("vmovaps         0x000 + %[S2KP], %%zmm8")               // zmm8      = i0 = 0 1 2 3 ...
+                __ASM_EMIT("vmovaps         0x040 + %[S2KP], %%zmm9")               // zmm9      = i1 = 16 17 18 19 ...
+                __ASM_EMIT("vmovaps         0x080 + %[S2KP], %%zmm10")              // zmm10     = step = 32 ...
+                __ASM_EMIT("vsubps          %%zmm12, %%zmm0, %%zmm12")              // zmm12     = PI/2 - p + PI/2 ...
+                // x32 blocks
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%zmm8, %%zmm11, %%zmm0")               // zmm0     = k*i0
+                __ASM_EMIT("vmulps          %%zmm9, %%zmm11, %%zmm4")               // zmm4     = k*i1
+                __ASM_EMIT("vaddps          %%zmm10, %%zmm8, %%zmm8")               // zmm8     = i0 + step
+                __ASM_EMIT("vaddps          %%zmm10, %%zmm9, %%zmm9")               // zmm9     = i1 + step
+                __ASM_EMIT("vsubps          %%zmm0, %%zmm12, %%zmm0")               // zmm0     = PI/2 - (k*i0 + p) + PI/2
+                __ASM_EMIT("vsubps          %%zmm4, %%zmm12, %%zmm4")               // zmm4     = PI/2 - (k*i1 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X32
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%zmm4, 0x40(%[dst])")
+                __ASM_EMIT("add             $0x80, %[dst]")
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x16 blocks
+                __ASM_EMIT("add             $16, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%zmm8, %%zmm11, %%zmm0")               // zmm0     = k*i0
+                __ASM_EMIT("vaddps          0x0c0 + %[S2KP], %%zmm8, %%zmm8")       // zmm8     = i0 + step
+                __ASM_EMIT("vsubps          %%zmm0, %%zmm12, %%zmm0")               // zmm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("4:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")               // ymm0     = k*i0
+                __ASM_EMIT("vaddps          0x100 + %[S2KP], %%ymm8, %%ymm8")       // ymm8     = i0 + step
+                __ASM_EMIT("vsubps          %%ymm0, %%ymm12, %%ymm0")               // ymm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("6:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              8f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")               // xmm0     = k*i0
+                __ASM_EMIT("vaddps          0x120 + %[S2KP], %%xmm8, %%xmm8")       // xmm8     = i0 + step
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm12, %%xmm0")               // xmm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("8:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             12f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")               // xmm0     = k*i0
+                __ASM_EMIT("vsubps          %%xmm0, %%xmm12, %%xmm0")               // xmm0     = PI/2 - (k*i0 + p) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%xmm8", "%xmm9", "%xmm10", "%xmm11",
+                  "%xmm12",
+                  "%k1", "%k2"
+            );
+        }
+
+    } /* namespace avx512 */
+} /* namespace lsp */
+
+
+
+
+#endif /* INCLUDE_PRIVATE_DSP_ARCH_X86_AVX512_PMATH_COS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/lanczos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/lanczos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/lanczos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/lanczos.h	2025-08-26 18:15:43.734003213 +0000
@@ -0,0 +1,351 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 18 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX512_PMATH_LANCZOS_H_
+#define PRIVATE_DSP_ARCH_X86_AVX512_PMATH_LANCZOS_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX512_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_AVX512_IMPL */
+
+#include <private/dsp/arch/x86/avx512/pmath/sin.h>
+
+namespace lsp
+{
+    namespace avx512
+    {
+        IF_ARCH_X86(
+            static const uint32_t lanczos_const[] __lsp_aligned64 =
+            {
+                LSP_DSP_VEC16(0x7fffffff),                  // +0x00: Mask for fabsf
+                LSP_DSP_VEC16(0x38d1b717),                  // +0x40: Sinc threshold = 1e-4
+                LSP_DSP_VEC16(0x3f800000),                  // +0x80: 1.0
+            };
+        )
+
+        typedef struct lanczos_gen_t
+        {
+            float k[16];                        // +0x000: Multiplier
+            float p[16];                        // +0x040: Initial phase
+            float a[16];                        // +0x080: Number of lobes
+            float i[16];                        // +0x0c0: Indices
+            float x1[16];                       // +0x100: Computed X1
+            float d[16];                        // +0x140: Denominator
+            float t[16];                        // +0x180: Time range
+        } lanczos_gen_t;
+
+        #define LANCZOS_GEN_FUNC_X16 \
+            /* zmm0 = x1 */ \
+            __ASM_EMIT("vmulps          0x080 + %[state], %%zmm0, %%zmm4")          /* zmm4     = x2 = x1*a */ \
+            __ASM_EMIT("vmovaps         %%zmm0, 0x100 + %[state]")                  /* *x1      = x1 */ \
+            __ASM_EMIT("vmulps          %%zmm0, %%zmm4, %%zmm2")                    /* zmm2     = d = x1 * x2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%zmm0, %%zmm0")             /* zmm0     = x1 + PI/2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%zmm4, %%zmm4")             /* zmm4     = x2 + PI/2 */ \
+            __ASM_EMIT("vmovaps         %%zmm2, 0x140 + %[state]")                  /* *d       = d */ \
+            SINF_X_PLUS_PI_2_CORE_X32                                               /* zmm0     = sinf(x1), zmm4 = sinf(x2) */ \
+            __ASM_EMIT("vmovaps         0x100 + %[state], %%zmm1")                  /* zmm1     = x1 */ \
+            __ASM_EMIT("vmulps          %%zmm4, %%zmm0, %%zmm0")                    /* zmm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%zmm1, %%zmm1")              /* zmm1     = fabsf(x) */ \
+            __ASM_EMIT("vdivps          0x140 + %[state], %%zmm0, %%zmm0")          /* zmm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x40 + %[LC], %%zmm1, %%k1")            /* k1       = [ fabsf(x) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $5, 0x180 + %[state], %%zmm1, %%k2")        /* k2       = [ fabsf(x) >= t ] */ \
+            __ASM_EMIT("vmovaps         0x80 + %[LC], %%zmm0 %{%%k1%}")             /* zmm0     = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vxorps          %%zmm0, %%zmm0, %%zmm0 %{%%k2%}")           /* zmm0     = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        #define LANCZOS_GEN_FUNC_X8 \
+            /* ymm0 = x1 */ \
+            __ASM_EMIT("vmulps          0x080 + %[state], %%ymm0, %%ymm4")          /* ymm4     = x2 = x1*a */ \
+            __ASM_EMIT("vmovaps         %%ymm0, 0x100 + %[state]")                  /* *x1      = x1 */ \
+            __ASM_EMIT("vmulps          %%ymm0, %%ymm4, %%ymm2")                    /* ymm2     = d = x1 * x2 */ \
+            __ASM_EMIT("vinsertf64x4    $1, %%ymm4, %%zmm0, %%zmm0")                /* zmm0     = x1 ... x2 ... */ \
+            __ASM_EMIT("vmovaps         %%ymm2, 0x140 + %[state]")                  /* *d       = d */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%zmm0, %%zmm0")             /* zmm0     = x1 + PI/2 ... x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X16                                               /* ymm0     = sinf(x1), ymm4 = sinf(x2) */ \
+            __ASM_EMIT("vextractf64x4   $1, %%zmm0, %%ymm4")                        /* ymm4     = sinf(x2) */ \
+            __ASM_EMIT("vmovaps         0x100 + %[state], %%ymm1")                  /* ymm1     = x1 */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%ymm1, %%ymm1")              /* ymm1     = fabsf(x) */ \
+            __ASM_EMIT("vdivps          0x140 + %[state], %%ymm0, %%ymm0")          /* ymm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x40 + %[LC], %%ymm1, %%ymm2")          /* ymm2     = [ fabsf(x) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, 0x180 + %[state], %%ymm1, %%ymm1")      /* ymm1     = [ fabsf(x) < t ] */ \
+            __ASM_EMIT("vblendvps       %%ymm2, 0x80 + %[LC], %%ymm0, %%ymm0")      /* ymm0     = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        #define LANCZOS_GEN_FUNC_X4 \
+            /* xmm0 = x1 */ \
+            __ASM_EMIT("vmulps          0x080 + %[state], %%xmm0, %%xmm4")          /* xmm4     = x2 = x1*a */ \
+            __ASM_EMIT("vmovaps         %%xmm0, 0x100 + %[state]")                  /* *x1      = x1 */ \
+            __ASM_EMIT("vmulps          %%xmm0, %%xmm4, %%xmm2")                    /* xmm2     = d = x1 * x2 */ \
+            __ASM_EMIT("vinsertf128     $1, %%xmm4, %%ymm0, %%ymm0")                /* ymm0     = x1 x1 x1 x1 x2 x2 x2 x2 */ \
+            __ASM_EMIT("vmovaps         %%xmm2, 0x140 + %[state]")                  /* *d       = d */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm0, %%ymm0")             /* xmm0     = x1 + PI/2 ... x2 + PI/2 ... */ \
+            SINF_X_PLUS_PI_2_CORE_X8                                                /* ymm0     = sinf(x1) ... sinf(x2) ... */ \
+            __ASM_EMIT("vextractf128    $1, %%ymm0, %%xmm4")                        /* xmm4     = sinf(x2) */ \
+            __ASM_EMIT("vmovaps         0x100 + %[state], %%xmm1")                  /* xmm1     = x1 */ \
+            __ASM_EMIT("vmulps          %%xmm4, %%xmm0, %%xmm0")                    /* xmm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%xmm1, %%xmm1")              /* xmm1     = fabsf(x) */ \
+            __ASM_EMIT("vdivps          0x140 + %[state], %%xmm0, %%xmm0")          /* xmm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x40 + %[LC], %%xmm1, %%xmm2")          /* xmm2     = [ fabsf(x) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, 0x180 + %[state], %%xmm1, %%xmm1")      /* xmm1     = [ fabsf(x) < t ] */ \
+            __ASM_EMIT("vblendvps       %%xmm2, 0x80 + %[LC], %%xmm0, %%xmm0")      /* xmm0     = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%xmm1, %%xmm0, %%xmm0")                    /* xmm0     = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        void lanczos1(float *dst,  float k, float p, float t, float a, size_t count)
+        {
+            IF_ARCH_X86(
+                lanczos_gen_t state __lsp_aligned64;
+                float stub[16] __lsp_aligned64;
+            );
+
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%zmm4")                              // zmm4     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%zmm5")                              // zmm5     = p
+                __ASM_EMIT("vbroadcastss    %[a], %%zmm6")                              // zmm6     = a
+                __ASM_EMIT("vbroadcastss    %[t], %%zmm7")                              // zmm7     = t
+                __ASM_EMIT("vmovaps         %%zmm4, 0x000 + %[state]")
+                __ASM_EMIT("vmovaps         %%zmm5, 0x040 + %[state]")
+                __ASM_EMIT("vmovaps         %%zmm6, 0x080 + %[state]")
+                __ASM_EMIT("vmovaps         %%zmm7, 0x180 + %[state]")
+                __ASM_EMIT("vmovaps         0x00 + %[LGEN], %%zmm1")                    // zmm1     = i = 0 1 2 3 4 5 6 7 ...
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          0x000 + %[state], %%zmm1, %%zmm0")          // zmm0     = k*i
+                __ASM_EMIT("vaddps          0x0c0 + %[LGEN], %%zmm1, %%zmm1")           // zmm1     = i' = i + step
+                __ASM_EMIT("vsubps          0x040 + %[state], %%zmm0, %%zmm0")          // zmm0     = x1 = k*i - p
+                __ASM_EMIT("vmovaps         %%zmm1, 0x0c0 + %[state]")                  // *i       = i'
+                LANCZOS_GEN_FUNC_X16
+                __ASM_EMIT("vmovaps         0x0c0 + %[state], %%zmm1")                  // zmm1     = i'
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 blocks
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          0x000 + %[state], %%ymm1, %%ymm0")          // ymm0     = k*i
+                __ASM_EMIT("vaddps          0x100 + %[LGEN], %%ymm1, %%ymm1")           // ymm1     = i' = i + step
+                __ASM_EMIT("vsubps          0x040 + %[state], %%ymm0, %%ymm0")          // ymm0     = x1 = k*i - p
+                __ASM_EMIT("vmovaps         %%ymm1, 0x0c0 + %[state]")                  // *i       = i'
+                LANCZOS_GEN_FUNC_X8
+                __ASM_EMIT("vmovaps         0x0c0 + %[state], %%ymm1")                  // ymm1     = i'
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          0x000 + %[state], %%xmm1, %%xmm0")          // xmm0     = k*i
+                __ASM_EMIT("vaddps          0x120 + %[LGEN], %%xmm1, %%xmm1")           // xmm1     = i' = i + step
+                __ASM_EMIT("vsubps          0x040 + %[state], %%xmm0, %%xmm0")          // xmm0     = x1 = k*i - p
+                __ASM_EMIT("vmovaps         %%xmm1, 0x0c0 + %[state]")                  // *i       = i'
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("vmovaps         0x0c0 + %[state], %%xmm1")                  // xmm1     = i'
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             10f")
+                __ASM_EMIT("vmulps          0x000 + %[state], %%xmm1, %%xmm0")          // xmm0     = k*i
+                __ASM_EMIT("vsubps          0x040 + %[state], %%xmm0, %%xmm0")          // xmm0     = x1 = k*i - p
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [state] "o" (state),
+                  [S2C] "o" (sinf_const),
+                  [LGEN] "o" (kp_gen_const),
+                  [LC] "o" (lanczos_const),
+                  [stub] "o" (stub),
+                  [k] "m" (k),
+                  [p] "m" (p),
+                  [a] "m" (a),
+                  [t] "m" (t)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%k1", "%k2"
+            );
+        }
+
+        #define LANCZOS_GEN_X64_FUNC_X16 \
+            /* zmm8     = k */ \
+            /* zmm9     = p */ \
+            /* zmm10    = t */ \
+            /* zmm11    = a */ \
+            /* zmm12    = x1 */ \
+            /* zmm13    = d */ \
+            /* zmm14    = i */ \
+            /* zmm15    = step */ \
+            __ASM_EMIT("vmulps          %%zmm11, %%zmm12, %%zmm4")                  /* zmm12    = x2 = x1*a */ \
+            __ASM_EMIT("vmulps          %%zmm12, %%zmm4, %%zmm13")                  /* zmm13    = d = x1 * x2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%zmm12, %%zmm0")            /* zmm0     = x1 + PI/2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%zmm4, %%zmm4")             /* zmm4     = x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X32                                               /* zmm0     = sinf(x1), zmm4 = sinf(x2) */ \
+            __ASM_EMIT("vmulps          %%zmm4, %%zmm0, %%zmm0")                    /* zmm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%zmm12, %%zmm12")            /* zmm12    = fabsf(x1) */ \
+            __ASM_EMIT("vdivps          %%zmm13, %%zmm0, %%zmm0")                   /* zmm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x40 + %[LC], %%zmm12, %%k1")           /* k1       = [ fabsf(x1) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $5, %%zmm10, %%zmm1, %%k2")                 /* k2       = [ fabsf(x1) >= t ] */ \
+            __ASM_EMIT("vmovaps         0x80 + %[LC], %%zmm0 %{%%k1%}")             /* zmm0     = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vxorps          %%zmm0, %%zmm0, %%zmm0 %{%%k2%}")           /* zmm0     = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        #define LANCZOS_GEN_X64_FUNC_X8 \
+            /* ymm8     = k */ \
+            /* ymm9     = p */ \
+            /* ymm10    = t */ \
+            /* ymm11    = a */ \
+            /* ymm12    = x1 */ \
+            /* ymm13    = d */ \
+            /* ymm14    = i */ \
+            /* ymm15    = step */ \
+            __ASM_EMIT("vmulps          %%ymm11, %%ymm12, %%ymm4")                  /* ymm12    = x2 = x1*a */ \
+            __ASM_EMIT("vmulps          %%ymm12, %%ymm4, %%ymm13")                  /* ymm13    = d = x1 * x2 */ \
+            __ASM_EMIT("vinsertf64x4    $1, %%ymm4, %%zmm12, %%zmm0")               /* zmm0     = x1 ... x2 ... */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%zmm0, %%zmm0")             /* zmm0     = x1 + PI/2 ... x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X16                                               /* ymm0     = sinf(x1), ymm4 = sinf(x2) */ \
+            __ASM_EMIT("vextractf64x4   $1, %%zmm0, %%ymm4")                        /* ymm4     = sinf(x2) */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%ymm12, %%ymm12")            /* ymm12    = fabsf(x1) */ \
+            __ASM_EMIT("vdivps          %%ymm13, %%ymm0, %%ymm0")                   /* ymm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x40 + %[LC], %%ymm12, %%ymm2")         /* ymm2     = [ fabsf(x1) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, %%ymm10, %%ymm12, %%ymm1")              /* ymm1     = [ fabsf(x1) < t ] */ \
+            __ASM_EMIT("vblendvps       %%ymm2, 0x80 + %[LC], %%ymm0, %%ymm0")      /* ymm0     = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        #define LANCZOS_GEN_X64_FUNC_X4 \
+            /* xmm0 = x1 */ \
+            __ASM_EMIT("vmulps          %%xmm11, %%xmm12, %%xmm4")                  /* xmm12    = x2 = x1*a */ \
+            __ASM_EMIT("vmulps          %%xmm12, %%xmm4, %%xmm13")                  /* xmm13    = d = x1 * x2 */ \
+            __ASM_EMIT("vinsertf128     $1, %%xmm4, %%ymm12, %%ymm0")               /* ymm0     = x1 x1 x1 x1 x2 x2 x2 x2 */ \
+            __ASM_EMIT("vaddps          0x00 + %[S2C], %%ymm0, %%ymm0")             /* ymm0     = x1 + PI/2 ... x2 + PI/2 */ \
+            SINF_X_PLUS_PI_2_CORE_X8                                                /* ymm0     = sinf(x1) ... sinf(x2) */ \
+            __ASM_EMIT("vextractf128    $1, %%ymm0, %%xmm4")                        /* xmm4     = sif(x2) */ \
+            __ASM_EMIT("vmulps          %%ymm4, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("vandps          0x00 + %[LC], %%ymm12, %%ymm12")            /* ymm12    = fabsf(x1) */ \
+            __ASM_EMIT("vdivps          %%ymm13, %%ymm0, %%ymm0")                   /* ymm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("vcmpps          $1, 0x40 + %[LC], %%ymm12, %%ymm2")         /* ymm2     = [ fabsf(x1) < 1e-4 ] */ \
+            __ASM_EMIT("vcmpps          $1, %%ymm10, %%ymm12, %%ymm1")              /* ymm1     = [ fabsf(x1) < t ] */ \
+            __ASM_EMIT("vblendvps       %%ymm2, 0x80 + %[LC], %%ymm0, %%ymm0")      /* ymm0     = [ fabsf(x1) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("vandps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = [ fabsf(x1) < t ] ? ([ fabsf(x1) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        void x64_lanczos1(float *dst,  float k, float p, float t, float a, size_t count)
+        {
+            ARCH_X86_64_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%zmm8")                              // zmm8     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%zmm9")                              // zmm9     = p
+                __ASM_EMIT("vbroadcastss    %[t], %%zmm10")                             // zmm10    = t
+                __ASM_EMIT("vbroadcastss    %[a], %%zmm11")                             // zmm11    = a
+                __ASM_EMIT("vmovaps         0x00 + %[LGEN], %%zmm14")                   // zmm14    = i = 0 1 2 3 4 5 6 7 ...
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("vmovaps         0xc0 + %[LGEN], %%zmm15")                   // zmm15    = step
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%zmm8, %%zmm14, %%zmm12")                  // zmm12    = k*i
+                __ASM_EMIT("vaddps          %%zmm15, %%zmm14, %%zmm14")                 // zmm14    = i' = i + step
+                __ASM_EMIT("vsubps          %%zmm9, %%zmm12, %%zmm12")                  // zmm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X16
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 blocks
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm14, %%ymm12")                  // ymm12    = k*i
+                __ASM_EMIT("vaddps          0x100 + %[LGEN], %%ymm14, %%ymm14")         // ymm14    = i' = i + step
+                __ASM_EMIT("vsubps          %%ymm9, %%ymm12, %%ymm12")                  // ymm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm14, %%xmm12")                  // xmm12    = k*i
+                __ASM_EMIT("vaddps          0x120 + %[LGEN], %%xmm14, %%xmm14")         // xmm14    = i' = i + step
+                __ASM_EMIT("vsubps          %%xmm9, %%xmm12, %%xmm12")                  // xmm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             10f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm14, %%xmm12")                   // xmm12    = k*i
+                __ASM_EMIT("vsubps          %%xmm9, %%xmm12, %%xmm12")                   // xmm12    = x1 = k*i - p
+                LANCZOS_GEN_X64_FUNC_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [LGEN] "o" (kp_gen_const),
+                  [LC] "o" (lanczos_const),
+                  [k] "m" (k),
+                  [p] "m" (p),
+                  [a] "m" (a),
+                  [t] "m" (t)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%xmm8", "%xmm9", "%xmm10", "%xmm11",
+                  "%xmm12", "%xmm13", "%xmm14", "%xmm15"
+            );
+        }
+
+    } /* namespace avx512 */
+} /* namespace lsp */
+
+
+
+
+#endif /* PRIVATE_DSP_ARCH_X86_AVX512_PMATH_LANCZOS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/sin.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/sin.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/sin.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath/sin.h	2025-08-26 18:15:43.738003175 +0000
@@ -0,0 +1,516 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 12 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX512_PMATH_SIN_H_
+#define PRIVATE_DSP_ARCH_X86_AVX512_PMATH_SIN_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_AVX512_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_AVX512_IMPL */
+
+namespace lsp
+{
+    namespace avx512
+    {
+        IF_ARCH_X86(
+            static const float kp_gen_const[] __lsp_aligned64 =
+            {
+                0.0f,  1.0f,  2.0f,   3.0f,  4.0f,  5.0f,  6.0f,  7.0f,     // +0x000: Initial values register 1
+                8.0f,  9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f,
+                16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f,     // +0x040: Initial values register 2
+                24.0f, 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f,
+                LSP_DSP_VEC16(32.0),                                        // +0x080: Step x32
+                LSP_DSP_VEC16(16.0),                                        // +0x0c0: Step x16
+                LSP_DSP_VEC8(8.0),                                          // +0x100: Step x8
+                LSP_DSP_VEC4(4.0),                                          // +0x120: Step x4
+            };
+        )
+
+        IF_ARCH_X86(
+            static const uint32_t sinf_const[] __lsp_aligned64 =
+            {
+                LSP_DSP_VEC16(0x3fc90fdb),      // +0x000:  PI/2
+                LSP_DSP_VEC16(0x40490fdb),      // +0x040:  PI
+                LSP_DSP_VEC16(0x3e22f983),      // +0x080:  1/(2*PI)
+                LSP_DSP_VEC16(0x40c90fdb),      // +0x0c0:  2*PI
+                LSP_DSP_VEC16(0x4096cbe4),      // +0x100:  3*PI/2
+                LSP_DSP_VEC16(0xb2d7322b),      // +0x140:  C0 = -1/11! = -2.50521083854e-08
+                LSP_DSP_VEC16(0x3638ef1d),      // +0x180:  C1 = 1/9! = 2.7557319224e-06
+                LSP_DSP_VEC16(0xb9500d01),      // +0x1c0:  C2 = -1/7! = -0.000198412698413
+                LSP_DSP_VEC16(0x3c088889),      // +0x200:  C3 = 1/5! = 0.00833333333333
+                LSP_DSP_VEC16(0xbe2aaaab),      // +0x240:  C4 = -1/3! = -0.166666666667
+                LSP_DSP_VEC16(0x3f800000),      // +0x280:  1.0
+            };
+        )
+
+        #define SINF_X_PLUS_PI_2_CORE_X32            \
+            /* zmm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x080 + %[S2C], %%zmm0, %%zmm1")            /* zmm1     = X / (2*PI) */ \
+            __ASM_EMIT("vmulps          0x080 + %[S2C], %%zmm4, %%zmm5") \
+            __ASM_EMIT("vpsrad          $31, %%zmm0, %%zmm3")                       /* zmm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vpsrad          $31, %%zmm4, %%zmm7") \
+            __ASM_EMIT("vcvttps2dq      %%zmm1, %%zmm1")                            /* zmm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vcvttps2dq      %%zmm5, %%zmm5") \
+            __ASM_EMIT("vpaddd          %%zmm3, %%zmm1, %%zmm1")                    /* zmm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vpaddd          %%zmm7, %%zmm5, %%zmm5") \
+            __ASM_EMIT("vcvtdq2ps       %%zmm1, %%zmm1")                            /* zmm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%zmm5, %%zmm5") \
+            __ASM_EMIT("vfnmadd231ps    0x0c0 + %[S2C], %%zmm1, %%zmm0")            /* zmm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vfnmadd231ps    0x0c0 + %[S2C], %%zmm5, %%zmm4") \
+            __ASM_EMIT("vmovaps         0x100 + %[S2C], %%zmm1")                    /* zmm1     = 3*PI/2 */ \
+            __ASM_EMIT("vmovaps         0x100 + %[S2C], %%zmm5") \
+            __ASM_EMIT("vcmpps          $1, 0x040 + %[S2C], %%zmm0, %%k1")          /* k1       = [ Y < PI ] */ \
+            __ASM_EMIT("vcmpps          $1, 0x040 + %[S2C], %%zmm4, %%k2") \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%zmm0, %%zmm2")            /* zmm2     = Y - PI/2 */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%zmm4, %%zmm6") \
+            __ASM_EMIT("vsubps          %%zmm0, %%zmm1, %%zmm0")                    /* zmm0     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsubps          %%zmm4, %%zmm5, %%zmm4") \
+            __ASM_EMIT("vmovaps         %%zmm2, %%zmm0 %{%%k1%}")                   /* zmm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            __ASM_EMIT("vmovaps         %%zmm6, %%zmm4 %{%%k2%}") \
+            /* zmm0     = XX */ \
+            __ASM_EMIT("vmovaps         0x140 + %[S2C], %%zmm1")                    /* zmm3     = C0 */ \
+            __ASM_EMIT("vmovaps         0x140 + %[S2C], %%zmm5") \
+            __ASM_EMIT("vmulps          %%zmm0, %%zmm0, %%zmm2")                    /* zmm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vmulps          %%zmm4, %%zmm4, %%zmm6") \
+            __ASM_EMIT("vfmadd213ps     0x180 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = C1 + X2*C0 */ \
+            __ASM_EMIT("vfmadd213ps     0x180 + %[S2C], %%zmm6, %%zmm5") \
+            __ASM_EMIT("vfmadd213ps     0x1c0 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vfmadd213ps     0x1c0 + %[S2C], %%zmm6, %%zmm5") \
+            __ASM_EMIT("vfmadd213ps     0x200 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vfmadd213ps     0x200 + %[S2C], %%zmm6, %%zmm5") \
+            __ASM_EMIT("vfmadd213ps     0x240 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vfmadd213ps     0x240 + %[S2C], %%zmm6, %%zmm5") \
+            __ASM_EMIT("vfmadd213ps     0x280 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vfmadd213ps     0x280 + %[S2C], %%zmm6, %%zmm5") \
+            __ASM_EMIT("vmulps          %%zmm1, %%zmm0, %%zmm0")                    /* zmm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */ \
+            __ASM_EMIT("vmulps          %%zmm5, %%zmm4, %%zmm4")
+
+        #define SINF_X_PLUS_PI_2_CORE_X16            \
+            /* zmm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x080 + %[S2C], %%zmm0, %%zmm1")            /* zmm1     = X / (2*PI) */ \
+            __ASM_EMIT("vpsrad          $31, %%zmm0, %%zmm3")                       /* zmm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvttps2dq      %%zmm1, %%zmm1")                            /* zmm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vpaddd          %%zmm3, %%zmm1, %%zmm1")                    /* zmm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%zmm1, %%zmm1")                            /* zmm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vfnmadd231ps    0x0c0 + %[S2C], %%zmm1, %%zmm0")            /* zmm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vmovaps         0x100 + %[S2C], %%zmm1")                    /* zmm1     = 3*PI/2 */ \
+            __ASM_EMIT("vcmpps          $1, 0x040 + %[S2C], %%zmm0, %%k1")          /* k1       = [ Y < PI ] */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%zmm0, %%zmm2")            /* zmm2     = Y - PI/2 */ \
+            __ASM_EMIT("vsubps          %%zmm0, %%zmm1, %%zmm0")                    /* zmm0     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vmovaps         %%zmm2, %%zmm0 %{%%k1%}")                   /* zmm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* zmm0     = XX */ \
+            __ASM_EMIT("vmovaps         0x140 + %[S2C], %%zmm1")                    /* zmm3     = C0 */ \
+            __ASM_EMIT("vmulps          %%zmm0, %%zmm0, %%zmm2")                    /* zmm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vfmadd213ps     0x180 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = C1 + X2*C0 */ \
+            __ASM_EMIT("vfmadd213ps     0x1c0 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vfmadd213ps     0x200 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vfmadd213ps     0x240 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vfmadd213ps     0x280 + %[S2C], %%zmm2, %%zmm1")            /* zmm1     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmulps          %%zmm1, %%zmm0, %%zmm0")                    /* zmm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        #define SINF_X_PLUS_PI_2_CORE_X8            \
+            /* ymm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x080 + %[S2C], %%ymm0, %%ymm1")            /* ymm1     = X / (2*PI) */ \
+            __ASM_EMIT("vpsrad          $31, %%ymm0, %%ymm3")                       /* ymm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvttps2dq      %%ymm1, %%ymm1")                            /* ymm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vpaddd          %%ymm3, %%ymm1, %%ymm1")                    /* ymm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%ymm1, %%ymm1")                            /* ymm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vfnmadd231ps    0x0c0 + %[S2C], %%ymm1, %%ymm0")            /* ymm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vmovaps         0x100 + %[S2C], %%ymm1")                    /* ymm1     = 3*PI/2 */ \
+            __ASM_EMIT("vcmpps          $1, 0x040 + %[S2C], %%ymm0, %%ymm2")        /* ymm2     = [ Y < PI ] */ \
+            __ASM_EMIT("vsubps          %%ymm0, %%ymm1, %%ymm1")                    /* ymm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%ymm0, %%ymm0")            /* ymm0     = Y - PI/2 */ \
+            __ASM_EMIT("vblendvps       %%ymm2, %%ymm0, %%ymm1, %%ymm0")            /* ymm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* ymm0     = XX */ \
+            __ASM_EMIT("vmovaps         0x140 + %[S2C], %%ymm1")                    /* ymm3     = C0 */ \
+            __ASM_EMIT("vmulps          %%ymm0, %%ymm0, %%ymm2")                    /* ymm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vfmadd213ps     0x180 + %[S2C], %%ymm2, %%ymm1")            /* ymm1     = C1 + X2*C0 */ \
+            __ASM_EMIT("vfmadd213ps     0x1c0 + %[S2C], %%ymm2, %%ymm1")            /* ymm1     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vfmadd213ps     0x200 + %[S2C], %%ymm2, %%ymm1")            /* ymm1     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vfmadd213ps     0x240 + %[S2C], %%ymm2, %%ymm1")            /* ymm1     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vfmadd213ps     0x280 + %[S2C], %%ymm2, %%ymm1")            /* ymm1     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmulps          %%ymm1, %%ymm0, %%ymm0")                    /* ymm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        #define SINF_X_PLUS_PI_2_CORE_X4            \
+            /* xmm0 = X = x + PI/2 */ \
+            __ASM_EMIT("vmulps          0x080 + %[S2C], %%xmm0, %%xmm1")            /* xmm1     = X / (2*PI) */ \
+            __ASM_EMIT("vpsrad          $31, %%xmm0, %%xmm3")                       /* xmm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvttps2dq      %%xmm1, %%xmm1")                            /* xmm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("vpaddd          %%xmm3, %%xmm1, %%xmm1")                    /* xmm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vcvtdq2ps       %%xmm1, %%xmm1")                            /* xmm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("vfnmadd231ps    0x0c0 + %[S2C], %%xmm1, %%xmm0")            /* xmm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("vmovaps         0x100 + %[S2C], %%xmm1")                    /* xmm1     = 3*PI/2 */ \
+            __ASM_EMIT("vcmpps          $1, 0x040 + %[S2C], %%xmm0, %%xmm2")        /* xmm2     = [ Y < PI ] */ \
+            __ASM_EMIT("vsubps          %%xmm0, %%xmm1, %%xmm1")                    /* xmm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("vsubps          0x000 + %[S2C], %%xmm0, %%xmm0")            /* xmm0     = Y - PI/2 */ \
+            __ASM_EMIT("vblendvps       %%xmm2, %%xmm0, %%xmm1, %%xmm0")            /* xmm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* xmm0     = XX */ \
+            __ASM_EMIT("vmovaps         0x140 + %[S2C], %%xmm1")                    /* xmm3     = C0 */ \
+            __ASM_EMIT("vmulps          %%xmm0, %%xmm0, %%xmm2")                    /* xmm2     = X2 = XX*XX */ \
+            __ASM_EMIT("vfmadd213ps     0x180 + %[S2C], %%xmm2, %%xmm1")            /* xmm1     = C1 + X2*C0 */ \
+            __ASM_EMIT("vfmadd213ps     0x1c0 + %[S2C], %%xmm2, %%xmm1")            /* xmm1     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("vfmadd213ps     0x200 + %[S2C], %%xmm2, %%xmm1")            /* xmm1     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("vfmadd213ps     0x240 + %[S2C], %%xmm2, %%xmm1")            /* xmm1     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("vfmadd213ps     0x280 + %[S2C], %%xmm2, %%xmm1")            /* xmm1     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("vmulps          %%xmm1, %%xmm0, %%xmm0")                    /* xmm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        void sinf1(float *dst, size_t count)
+        {
+            IF_ARCH_X86(float *src);
+
+            ARCH_X86_ASM(
+                // x32 blocks
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%zmm1")        // zmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%zmm1, %%zmm0")  // zmm0     = x1 + PI/2
+                __ASM_EMIT("vaddps          0x40(%[dst]), %%zmm1, %%zmm4")  // zmm4     = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X32
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%zmm4, 0x40(%[dst])")
+                __ASM_EMIT("add             $0x80, %[dst]")
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x16 blocks
+                __ASM_EMIT("add             $16, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%zmm1")        // zmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%zmm1, %%zmm0")  // zmm0     = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("4:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%ymm1, %%ymm0")  // ymm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("6:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              8f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[dst]), %%xmm1, %%xmm0")  // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("8:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             16f")
+                __ASM_EMIT("mov             %[dst], %[src]")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("14:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              16f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("16:")
+
+                : [dst] "+r" (dst), [src] "=&r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%k1", "%k2"
+            );
+        }
+
+        void sinf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_X86_ASM(
+                // x32 blocks
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%zmm1")        // zmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%zmm1, %%zmm0")  // zmm0     = x1 + PI/2
+                __ASM_EMIT("vaddps          0x40(%[src]), %%zmm1, %%zmm4")  // zmm4     = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X32
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%zmm4, 0x40(%[dst])")
+                __ASM_EMIT("add             $0x80, %[src]")
+                __ASM_EMIT("add             $0x80, %[dst]")
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x16 block
+                __ASM_EMIT("add             $16, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%zmm1")        // zmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%zmm1, %%zmm0")  // zmm0     = x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[src]")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("4:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%ymm1")        // ymm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%ymm1, %%ymm0")  // ymm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[src]")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("6:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              8f")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          0x00(%[src]), %%xmm1, %%xmm0")  // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[src]")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("8:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             16f")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovss          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovhps         0x00(%[src]), %%xmm0, %%xmm0")
+                __ASM_EMIT("12:")
+                __ASM_EMIT("vmovaps         0x000 + %[S2C], %%xmm1")        // xmm1     = PI/2
+                __ASM_EMIT("vaddps          %%xmm0, %%xmm1, %%xmm0")        // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              14f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("14:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              16f")
+                __ASM_EMIT("vmovhps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("16:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%k1", "%k2"
+            );
+        }
+
+        void sinf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%zmm6")                      // zmm6     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%zmm7")                      // zmm7     = p
+                __ASM_EMIT("vmovaps         0x000 + %[S2KP], %%zmm4")           // zmm4     = i = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+                __ASM_EMIT("vmovaps         0x0c0 + %[S2KP], %%zmm5")           // zmm5     = step = 16 ...
+                __ASM_EMIT("vaddps          0x000 + %[S2C], %%zmm7, %%zmm7")    // zmm7     = p+PI/2 ...
+                // x16 blocks
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%zmm4, %%zmm6, %%zmm0")            // zmm0     = k*i
+                __ASM_EMIT("vaddps          %%zmm5, %%zmm4, %%zmm4")            // zmm4     = i + step
+                __ASM_EMIT("vaddps          %%zmm7, %%zmm0, %%zmm0")            // zmm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x8 blocks
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%ymm4, %%ymm6, %%ymm0")            // ymm0     = k*i
+                __ASM_EMIT("vaddps          0x100 + %[S2KP], %%ymm4, %%ymm4")   // ymm4     = i + step
+                __ASM_EMIT("vaddps          %%ymm7, %%ymm0, %%ymm0")            // ymm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("4:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")            // xmm0     = k*i
+                __ASM_EMIT("vaddps          0x120 + %[S2KP], %%xmm4, %%xmm4")   // xmm4     = i + step
+                __ASM_EMIT("vaddps          %%xmm7, %%xmm0, %%xmm0")            // xmm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("6:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             10f")
+                __ASM_EMIT("vmulps          %%xmm4, %%xmm6, %%xmm0")            // xmm0     = k*i
+                __ASM_EMIT("vaddps          %%xmm7, %%xmm0, %%xmm0")            // xmm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("10:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%k1", "%k2"
+            );
+        }
+
+        void x64_sinf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_64_ASM(
+                // Prepare
+                __ASM_EMIT("vbroadcastss    %[k], %%zmm11")                         // zmm11     = k
+                __ASM_EMIT("vbroadcastss    %[p], %%zmm12")                         // zmm12     = p
+                __ASM_EMIT("vmovaps         0x000 + %[S2KP], %%zmm8")               // zmm8      = i0 = 0 1 2 3 ...
+                __ASM_EMIT("vmovaps         0x040 + %[S2KP], %%zmm9")               // zmm9      = i1 = 16 17 18 19 ...
+                __ASM_EMIT("vmovaps         0x080 + %[S2KP], %%zmm10")              // zmm10     = step = 32 ...
+                __ASM_EMIT("vaddps          0x000 + %[S2C], %%zmm12, %%zmm12")      // zmm12     = p+PI/2 ...
+                // x32 blocks
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("vmulps          %%zmm8, %%zmm11, %%zmm0")               // zmm0     = k*i0
+                __ASM_EMIT("vmulps          %%zmm9, %%zmm11, %%zmm4")               // zmm4     = k*i1
+                __ASM_EMIT("vaddps          %%zmm10, %%zmm8, %%zmm8")               // zmm8     = i0 + step
+                __ASM_EMIT("vaddps          %%zmm10, %%zmm9, %%zmm9")               // zmm9     = i1 + step
+                __ASM_EMIT("vaddps          %%zmm12, %%zmm0, %%zmm0")               // zmm0     = k*i0 + p + PI/2
+                __ASM_EMIT("vaddps          %%zmm12, %%zmm4, %%zmm4")               // zmm4     = k*i1 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X32
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("vmovups         %%zmm4, 0x40(%[dst])")
+                __ASM_EMIT("add             $0x80, %[dst]")
+                __ASM_EMIT("sub             $32, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x16 blocks
+                __ASM_EMIT("add             $16, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("vmulps          %%zmm8, %%zmm11, %%zmm0")               // zmm0     = k*i0
+                __ASM_EMIT("vaddps          0x0c0 + %[S2KP], %%zmm8, %%zmm8")       // zmm8     = i0 + step
+                __ASM_EMIT("vaddps          %%zmm12, %%zmm0, %%zmm0")               // zmm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X16
+                __ASM_EMIT("vmovups         %%zmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x40, %[dst]")
+                __ASM_EMIT("sub             $16, %[count]")
+                __ASM_EMIT("4:")
+                // x8 block
+                __ASM_EMIT("add             $8, %[count]")
+                __ASM_EMIT("jl              6f")
+                __ASM_EMIT("vmulps          %%ymm8, %%ymm11, %%ymm0")               // ymm0     = k*i0
+                __ASM_EMIT("vaddps          0x100 + %[S2KP], %%ymm8, %%ymm8")       // ymm8     = i0 + step
+                __ASM_EMIT("vaddps          %%ymm12, %%ymm0, %%ymm0")               // ymm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("vmovups         %%ymm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("6:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              8f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")               // xmm0     = k*i0
+                __ASM_EMIT("vaddps          0x120 + %[S2KP], %%xmm8, %%xmm8")       // xmm8     = i0 + step
+                __ASM_EMIT("vaddps          %%xmm12, %%xmm0, %%xmm0")               // xmm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("vmovups         %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("8:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             12f")
+                __ASM_EMIT("vmulps          %%xmm8, %%xmm11, %%xmm0")               // xmm0     = k*i0
+                __ASM_EMIT("vaddps          %%xmm12, %%xmm0, %%xmm0")               // xmm0     = k*i0 + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("vmovss          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("vshufps         $0x39, %%xmm0, %%xmm0, %%xmm0")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("vmovlps         %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7",
+                  "%xmm8", "%xmm9", "%xmm10", "%xmm11",
+                  "%xmm12",
+                  "%k1", "%k2"
+            );
+        }
+
+    } /* namespace avx512 */
+} /* namespace lsp */
+
+#endif /* PRIVATE_DSP_ARCH_X86_AVX512_PMATH_SIN_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath.h	2025-03-01 12:42:56.800648338 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/avx512/pmath.h	2025-08-26 18:15:43.734003213 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 20 сент. 2023 г.
@@ -27,15 +27,18 @@
 #endif /* PRIVATE_DSP_ARCH_X86_AVX512_IMPL */
 
 #include <private/dsp/arch/x86/avx512/pmath/abs_vv.h>
+#include <private/dsp/arch/x86/avx512/pmath/cos.h>
 #include <private/dsp/arch/x86/avx512/pmath/exp.h>
 #include <private/dsp/arch/x86/avx512/pmath/fmop_kx.h>
 #include <private/dsp/arch/x86/avx512/pmath/fmop_vv.h>
+#include <private/dsp/arch/x86/avx512/pmath/lanczos.h>
 #include <private/dsp/arch/x86/avx512/pmath/log.h>
 #include <private/dsp/arch/x86/avx512/pmath/lramp.h>
 #include <private/dsp/arch/x86/avx512/pmath/minmax.h>
 #include <private/dsp/arch/x86/avx512/pmath/normalize.h>
 #include <private/dsp/arch/x86/avx512/pmath/op_kx.h>
 #include <private/dsp/arch/x86/avx512/pmath/op_vv.h>
+#include <private/dsp/arch/x86/avx512/pmath/sin.h>
 #include <private/dsp/arch/x86/avx512/pmath/sqr.h>
 #include <private/dsp/arch/x86/avx512/pmath/ssqrt.h>
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse/3dmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse/3dmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse/3dmath.h	2025-03-01 12:42:56.800648338 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse/3dmath.h	2025-08-26 18:15:43.738003175 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -114,119 +114,84 @@
     __ASM_EMIT("movhlps     %" x0 ", %" x2)         /* xmm2 = B+D B+D  */ \
     __ASM_EMIT("addps       %" x2 ", %" x0)         /* xmm0 = A+C+B+D  */
 
-/* Get cosine of angle between two vectors
- * Input:
- *   x0 = vector1 [dx dy dz ? ]
- *   x1 = vector2 [dx dy dz ? ]
- *   m0 = -1
- *   m1 = +1
- *
- * Output:
- *   x0 = vector1 * vector2 [ S0 ? ? ? ]
- */
-#define CALC_COSINE2V(x0, x1, x2, x3, x4, m0, m1) \
-    __ASM_EMIT("movaps      %" x0 ", %" x2)      /* xmm2 = dx0 dy0 dz0 ? */ \
-    __ASM_EMIT("mulps       %" x1 ", %" x0)      /* xmm0 = dx0*dx1 dy0*dy1 dz0*dz1 ? */ \
-    __ASM_EMIT("mulps       %" x2 ", %" x2)      /* xmm2 = dx0*dx0 dy0*dy0 dz0*dz0 ? */ \
-    __ASM_EMIT("mulps       %" x1 ", %" x1)      /* xmm1 = dx1*dx1 dy1*dy1 dz1*dz1 ? */ \
-    __ASM_EMIT("movhlps     %" x2 ", %" x4)      /* xmm4 = dz0*dz0 */ \
-    __ASM_EMIT("movhlps     %" x1 ", %" x3)      /* xmm3 = dz1*dz1 */ \
-    __ASM_EMIT("addss       %" x4 ", %" x2)      /* xmm2 = dx0*dx0+dz0*dz0 dy0*dy0 dz0*dz0 ? */ \
-    __ASM_EMIT("addss       %" x3 ", %" x1)      /* xmm1 = dx1*dx1+dz1*dz1 dy1*dy1 dz1*dz1 ? */ \
-    __ASM_EMIT("unpcklps    %" x2 ", %" x2)      /* xmm2 = dx0*dx0+dz0*dz0 dx0*dx0+dz0*dz0 dy0*dy0 dy0*dy0 */ \
-    __ASM_EMIT("unpcklps    %" x1 ", %" x1)      /* xmm1 = dx1*dx1+dz1*dz1 dx1*dx1+dz1*dz1 dy1*dy1 dy1*dy1 */ \
-    __ASM_EMIT("movhlps     %" x2 ", %" x4)      /* xmm4 = dy0*dy0 */ \
-    __ASM_EMIT("movhlps     %" x1 ", %" x3)      /* xmm3 = dy1*dy1 */ \
-    __ASM_EMIT("addss       %" x4 ", %" x2)      /* xmm2 = dx0*dx0+dz0*dz0+dy0*dy0 */ \
-    __ASM_EMIT("addss       %" x3 ", %" x1)      /* xmm1 = dx1*dx1+dz1*dz1+dy1*dy1 */ \
-    __ASM_EMIT("movhlps     %" x0 ", %" x4)      /* xmm4 = dz0*dz1 */ \
-    __ASM_EMIT("sqrtss      %" x2 ", %" x2)      /* xmm2 = sqrtf(dx0*dx0+dz0*dz0+dy0*dy0) */ \
-    __ASM_EMIT("addss       %" x4 ", %" x0)      /* xmm0 = dz1*dz1+dx0*dx1 dy0*dy1 dz0*dz1 ? */ \
-    __ASM_EMIT("sqrtss      %" x1 ", %" x1)      /* xmm1 = sqrtf(dx1*dx1+dz1*dz1+dy1*dy1) */ \
-    __ASM_EMIT("unpcklps    %" x0 ", %" x0)      /* xmm0 = dz1*dz1+dx0*dx1 dz1*dz1+dx0*dx1 dy0*dy1 dy0*dy1 */ \
-    __ASM_EMIT("mulss       %" x1 ", %" x2)      /* xmm2 = w */ \
-    __ASM_EMIT("movhlps     %" x0 ", %" x4)      /* xmm4 = dy0*dy1 */ \
-    __ASM_EMIT("xorps       %" x1 ", %" x1)      /* xmm1 = 0 */ \
-    __ASM_EMIT("addss       %" x4 ", %" x0)      /* xmm0 = dz1*dz1+dx0*dx1+dy0*dy1 */ \
-    __ASM_EMIT("ucomiss     %" x1 ", %" x2)      /* xmm2 <?> 0 */ \
-    __ASM_EMIT("jbe         1000000f")           /* xmm2 <= 0 */ \
-    __ASM_EMIT("divss       %" x2 ", %" x0)      /* xmm0 = (dz1*dz1+dx0*dx1+dy0*dy1)/w */ \
-    __ASM_EMIT("1000000:") \
-    __ASM_EMIT("ucomiss     %" m0 ", %" x0) \
-    __ASM_EMIT("jae 1000001f") \
-    __ASM_EMIT("movss       %" m0 ", %" x0) \
-    __ASM_EMIT("jmp         1000002f") \
-    __ASM_EMIT("1000001:") \
-    __ASM_EMIT("ucomiss     %" m1 ", %" x0) \
-    __ASM_EMIT("jbe 1000002f") \
-    __ASM_EMIT("movss       %" m1 ", %" x0) \
-    __ASM_EMIT("jmp         1000002f") \
-    __ASM_EMIT("1000002:") \
-
-
 /* 3x vector multiplication
  * Input:
- *   x0 = vector1 [dx dy dz ? ]
- *   x1 = vector2 [dx dy dz ? ]
- *   x2 = vector3 [dx dy dz ? ]
+ *   x0 = vector1 [dx dy dz 0 ]
+ *   x1 = vector2 [dx dy dz 0 ]
+ *   x2 = vector3 [dx dy dz 0 ]
  *
  * Output:
- *   x0 = vector1 * vector2 [ vz vx vy ? ]
- *   x1 = vector2 * vector3 [ vz vx vy ? ]
- *   x2 = vector3 * vector1 [ vz vx vy ? ]
+ *   x0 = vector1 * vector2 [ vz vx vy 0 ]
+ *   x1 = vector2 * vector3 [ vz vx vy 0 ]
+ *   x2 = vector3 * vector1 [ vz vx vy 0 ]
  */
 #define VECTOR_MUL3(x0, x1, x2, x3, x4, x5, x6, x7) \
-    __ASM_EMIT("movaps      %" x0 ", %" x3)          /* xmm3 = dx0 dy0 dz0 dw0 */ \
-    __ASM_EMIT("movaps      %" x1 ", %" x4)          /* xmm4 = dx1 dy1 dz1 dw1 */ \
-    __ASM_EMIT("movaps      %" x2 ", %" x5)          /* xmm5 = dx2 dy2 dz2 dw2 */ \
-    __ASM_EMIT("shufps      $0xc9, %" x3 ", %" x3)   /* xmm3 = dy0 dz0 dx0 dw0 */ \
-    __ASM_EMIT("shufps      $0xc9, %" x4 ", %" x4)   /* xmm4 = dy1 dz1 dx1 dw1 */ \
-    __ASM_EMIT("shufps      $0xc9, %" x5 ", %" x5)   /* xmm5 = dy2 dz2 dx2 dw2 */ \
-    __ASM_EMIT("movaps      %" x0 ", %" x6)          /* xmm6 = dx0 dy0 dz0 dw0 */ \
-    __ASM_EMIT("movaps      %" x3 ", %" x7)          /* xmm7 = dy0 dz0 dx0 dw0 */ \
+    __ASM_EMIT("movaps      %" x0 ", %" x3)          /* xmm3 = dx0 dy0 dz0 0 */ \
+    __ASM_EMIT("movaps      %" x1 ", %" x4)          /* xmm4 = dx1 dy1 dz1 0 */ \
+    __ASM_EMIT("movaps      %" x2 ", %" x5)          /* xmm5 = dx2 dy2 dz2 0 */ \
+    __ASM_EMIT("shufps      $0xc9, %" x3 ", %" x3)   /* xmm3 = dy0 dz0 dx0 0 */ \
+    __ASM_EMIT("shufps      $0xc9, %" x4 ", %" x4)   /* xmm4 = dy1 dz1 dx1 0 */ \
+    __ASM_EMIT("shufps      $0xc9, %" x5 ", %" x5)   /* xmm5 = dy2 dz2 dx2 0 */ \
+    __ASM_EMIT("movaps      %" x0 ", %" x6)          /* xmm6 = dx0 dy0 dz0 0 */ \
+    __ASM_EMIT("movaps      %" x3 ", %" x7)          /* xmm7 = dy0 dz0 dx0 0 */ \
     \
-    __ASM_EMIT("mulps       %" x4 ", %" x0)          /* xmm0 = dx0*dy1 dy0*dz1 dz0*dx1 dw0*dw1 */ \
-    __ASM_EMIT("mulps       %" x1 ", %" x3)          /* xmm3 = dy0*dx1 dz0*dy1 dx0*dz1 dw0*dw1 */ \
-    __ASM_EMIT("mulps       %" x5 ", %" x1)          /* xmm1 = dx1*dy2 dy1*dz2 dz1*dx2 dw1*dw2 */ \
-    __ASM_EMIT("mulps       %" x2 ", %" x4)          /* xmm4 = dy1*dx2 dz1*dy2 dx1*dz2 dw1*dw2 */ \
-    __ASM_EMIT("mulps       %" x7 ", %" x2)          /* xmm2 = dx2*dy0 dy2*dz0 dz2*dx0 dw2*dw0 */ \
-    __ASM_EMIT("mulps       %" x6 ", %" x5)          /* xmm5 = dy2*dx0 dz2*dy0 dx2*dz0 dw2*dw0 */ \
-    __ASM_EMIT("subps       %" x3 ", %" x0)          /* xmm0 = nz0 nx0 ny0 nw0 */ \
-    __ASM_EMIT("subps       %" x4 ", %" x1)          /* xmm1 = nz1 nx1 ny1 nw1 */ \
-    __ASM_EMIT("subps       %" x5 ", %" x2)          /* xmm2 = nz2 nx2 ny2 nw2 */
+    __ASM_EMIT("mulps       %" x4 ", %" x0)          /* xmm0 = dx0*dy1 dy0*dz1 dz0*dx1 0 */ \
+    __ASM_EMIT("mulps       %" x1 ", %" x3)          /* xmm3 = dy0*dx1 dz0*dy1 dx0*dz1 0 */ \
+    __ASM_EMIT("mulps       %" x5 ", %" x1)          /* xmm1 = dx1*dy2 dy1*dz2 dz1*dx2 0 */ \
+    __ASM_EMIT("mulps       %" x2 ", %" x4)          /* xmm4 = dy1*dx2 dz1*dy2 dx1*dz2 0 */ \
+    __ASM_EMIT("mulps       %" x7 ", %" x2)          /* xmm2 = dx2*dy0 dy2*dz0 dz2*dx0 0 */ \
+    __ASM_EMIT("mulps       %" x6 ", %" x5)          /* xmm5 = dy2*dx0 dz2*dy0 dx2*dz0 0 */ \
+    __ASM_EMIT("subps       %" x3 ", %" x0)          /* xmm0 = nz0 nx0 ny0 0 */ \
+    __ASM_EMIT("subps       %" x4 ", %" x1)          /* xmm1 = nz1 nx1 ny1 0 */ \
+    __ASM_EMIT("subps       %" x5 ", %" x2)          /* xmm2 = nz2 nx2 ny2 0 */
 
 /* 1x vector multiplication
  * Input:
- *   x0 = vector1 [dx dy dz ? ]
- *   x1 = vector2 [dx dy dz ? ]
+ *   x0 = vector1 [dx dy dz 0 ]
+ *   x1 = vector2 [dx dy dz 0 ]
  *   x2 = temporary
  *   x3 = temporary
  *
  * Output:
- *   x0 = vector1 * vector2 [ vz vx vy ? ]
+ *   x0 = vector1 * vector2 [ vz vx vy 0 ]
  */
 #define VECTOR_MUL(x0, x1, x2, x3) \
-    __ASM_EMIT("movaps      %" x0 ", %" x2)          /* xmm2 = dx1 dy1 dz1 dw1 */ \
-    __ASM_EMIT("movaps      %" x1 ", %" x3)          /* xmm3 = dx2 dy2 dz2 dw2 */ \
-    __ASM_EMIT("shufps      $0xc9, %" x2 ", %" x2)   /* xmm2 = dy1 dz1 dx1 dw1 */ \
-    __ASM_EMIT("shufps      $0xc9, %" x3 ", %" x3)   /* xmm3 = dy2 dz2 dx2 dw2 */ \
+    __ASM_EMIT("movaps      %" x0 ", %" x2)          /* xmm2 = dx1 dy1 dz1 0 */ \
+    __ASM_EMIT("movaps      %" x1 ", %" x3)          /* xmm3 = dx2 dy2 dz2 0 */ \
+    __ASM_EMIT("shufps      $0xc9, %" x2 ", %" x2)   /* xmm2 = dy1 dz1 dx1 0 */ \
+    __ASM_EMIT("shufps      $0xc9, %" x3 ", %" x3)   /* xmm3 = dy2 dz2 dx2 0 */ \
     __ASM_EMIT("mulps       %" x2 ", %" x1)          /* xmm1 = dx2*dy1 dy2*dz1 dz2*dx1 dw2*dw2 */ \
     __ASM_EMIT("mulps       %" x3 ", %" x0)          /* xmm0 = dx1*dy2 dy1*dz2 dz1*dx2 dw1*dw1 */ \
     __ASM_EMIT("subps       %" x1 ", %" x0)          /* xmm0 = dx1*dy2-dx2*dy1 dy1*dz2-dy2*dz1 dz1*dx2-dz2*dx1 dw1*dw1-dw2*dw2 = NY NZ NX NW */
 
+/* 1x matrix transpose
+ * Input:
+ *   x0 = row 0 (a1 a2 a3 a4)
+ *   x1 = row 1 (b1 b2 b3 b4)
+ *   x2 = row 2 (c1 c2 c3 c4)
+ *   x3 = row 3 (d1 d2 d3 d4)
+ *   x4 = temporary
+ *
+ * Output:
+ *   x0 = row 0 (a1 b1 c1 d1)
+ *   x1 = row 1 (a2 b2 c2 d2)
+ *   x2 = row 2 (a3 b3 c3 d3)
+ *   x3 = row 3 (a4 b4 c4 d4)
+ */
 #define MAT4_TRANSPOSE(x0, x1, x2, x3, x4)    \
-    __ASM_EMIT("movaps      %" x2 ", %" x4)      /* xmm4 = c1 c2 c3 c4 */   \
-    __ASM_EMIT("punpckldq   %" x3 ", %" x2)      /* xmm2 = c1 d1 c2 d2 */   \
-    __ASM_EMIT("punpckhdq   %" x3 ", %" x4)      /* xmm4 = c3 d3 c4 d4 */   \
-    __ASM_EMIT("movaps      %" x0 ", %" x3)      /* xmm3 = a1 a2 a3 a4 */   \
-    __ASM_EMIT("punpckldq   %" x1 ", %" x0)      /* xmm0 = a1 b1 a2 b2 */   \
-    __ASM_EMIT("punpckhdq   %" x1 ", %" x3)      /* xmm3 = a3 b3 a4 b4 */   \
-    __ASM_EMIT("movaps      %" x0 ", %" x1)      /* xmm1 = a1 b2 a2 b2 */   \
-    __ASM_EMIT("punpcklqdq  %" x2 ", %" x0)      /* xmm0 = a1 b1 c1 d1 */   \
-    __ASM_EMIT("punpckhqdq  %" x2 ", %" x1)      /* xmm1 = a2 b2 c2 d2 */   \
-    __ASM_EMIT("movaps      %" x3 ", %" x2)      /* xmm2 = a3 b3 a4 b4 */   \
-    __ASM_EMIT("punpcklqdq  %" x4 ", %" x2)      /* xmm2 = a3 b3 c3 d3 */   \
-    __ASM_EMIT("punpckhqdq  %" x4 ", %" x3)      /* xmm3 = a4 b4 c4 d4 */
+    __ASM_EMIT("movaps      %" x2 ", %" x4)         /* xmm4 = c1 c2 c3 c4 */   \
+    __ASM_EMIT("unpcklps    %" x3 ", %" x2)         /* xmm2 = c1 d1 c2 d2 */   \
+    __ASM_EMIT("unpckhps    %" x3 ", %" x4)         /* xmm4 = c3 d3 c4 d4 */   \
+    __ASM_EMIT("movaps      %" x0 ", %" x3)         /* xmm3 = a1 a2 a3 a4 */   \
+    __ASM_EMIT("unpcklps    %" x1 ", %" x0)         /* xmm0 = a1 b1 a2 b2 */   \
+    __ASM_EMIT("unpckhps    %" x1 ", %" x3)         /* xmm3 = a3 b3 a4 b4 */   \
+    __ASM_EMIT("movaps      %" x2 ", %" x1)         /* xmm1 = c1 d1 c2 d2 */   \
+    __ASM_EMIT("movhlps     %" x0 ", %" x1)         /* xmm1 = a2 b2 c2 d2 */   \
+    __ASM_EMIT("movlhps     %" x2 ", %" x0)         /* xmm0 = a1 b1 c1 d1 */   \
+    __ASM_EMIT("movaps      %" x3 ", %" x2)         /* xmm2 = a3 b3 a4 b4 */   \
+    __ASM_EMIT("movaps      %" x4 ", %" x3)         /* xmm3 = c3 d3 c4 d4 */   \
+    __ASM_EMIT("movhlps     %" x2 ", %" x3)         /* xmm3 = a4 b4 c4 d4 */   \
+    __ASM_EMIT("movlhps     %" x4 ", %" x2)         /* xmm2 = a3 b3 c3 d3 */
 
 #define MATRIX_LOAD(ptr, x0, x1, x2, x3) \
     __ASM_EMIT("movups      0x00(%[" ptr "]), %" x0 ) \
@@ -249,12 +214,11 @@
     __ASM_EMIT("movhlps     %" x2 ", %" x1)         /* xmm1 = y*y y*y ? ? */ \
     __ASM_EMIT("addss       %" x1 ", %" x2)         /* xmm2 = x*x+y*y+z*z */ \
     __ASM_EMIT("xorps       %" x1 ", %" x1)         /* xmm1 = 0 */ \
-    __ASM_EMIT("sqrtss      %" x2", %" x2)          /* xmm2 = sqrt(x*x + y*y + z*z) */ \
-    __ASM_EMIT("ucomiss     %" x1 ", %" x2)         /* xmm2 =?= xmm1 */ \
-    __ASM_EMIT("jle         1000000f") \
     __ASM_EMIT("shufps      $0x00, %" x2 ", %" x2)  /* xmm2 = w w w w */ \
+    __ASM_EMIT("sqrtps      %" x2 ", %" x2)         /* xmm2 = sqrt(x*x + y*y + z*z) */ \
+    __ASM_EMIT("cmpps       $4, %" x2 ", %" x1)     /* xmm1 = w != 0 */ \
     __ASM_EMIT("divps       %" x2 ", %" x0)         /* xmm0 = x/w y/w z/w w/w */ \
-    __ASM_EMIT("1000000:")
+    __ASM_EMIT("andps       %" x1 ", %" x0)         /* xmm0 = (w != 0) ? x/w y/w z/w w/w : 0 */ \
 
 /*
  * Input:
@@ -340,26 +304,20 @@ namespace lsp
             static const float ONE[] __lsp_aligned16            = { LSP_DSP_VEC4(1.0f) };
             static const float X_MINUS_ONE[] __lsp_aligned16    = { LSP_DSP_VEC4(-1.0f) };
             static const uint32_t IONE[] __lsp_aligned16        = { LSP_DSP_VEC4(1) };
-            static const uint32_t X_ISIGN[] __lsp_aligned16     = { LSP_DSP_VEC4(0x80000000) };
-
-            static const uint32_t ICULL3[] __lsp_aligned16      = { 0x01, 0x04, 0x10, 0 };
         )
 
         void init_point_xyz(point3d_t *p, float x, float y, float z)
         {
             ARCH_X86_ASM
             (
-                __ASM_EMIT64("andps     %[mask], %[x0]")        // xmm0 = x 0 0 0
-                __ASM_EMIT64("andps     %[mask], %[x2]")        // xmm2 = z 0 0 0
-                __ASM_EMIT("movlhps     %[x1], %[x0]")          // xmm0 = x 0 y ?
-                __ASM_EMIT("shufps      $0x88, %[x2], %[x0]")   // xmm0 = x y z 0
-                __ASM_EMIT("orps        %[omask], %[x0]")       // xmm0 = x y z 1
+                __ASM_EMIT("movlhps     %[x1], %[x0]")          // x0   = x ? y ?
+                __ASM_EMIT("movhps      %[id], %[x2]")          // x2   = z ? 1 0
+                __ASM_EMIT("shufps      $0x88, %[x2], %[x0]")   // x0   = x y z 1
                 __ASM_EMIT("movups      %[x0], (%[p])")
 
                 : [x0] "+x" (x), [x1] "+x" (y), [x2] "+x"(z)
                 : [p] "r" (p),
-                  [mask] "m" (X_MASK0001),
-                  [omask] "m" (X_3DPOINT)
+                  [id] "m" (IDENTITY0)
                 : "memory"
             );
         }
@@ -442,16 +400,14 @@ namespace lsp
         {
             ARCH_X86_ASM
             (
-                __ASM_EMIT64("andps     %[mask], %[x0]")        // xmm0 = dx 0 0 0
-                __ASM_EMIT64("andps     %[mask], %[x2]")        // xmm2 = dz 0 0 0
-                __ASM_EMIT("movlhps   %[x1], %[x0]")            // xmm0 = dx 0 dy ?
-                __ASM_EMIT("shufps    $0x88, %[x2], %[x0]")     // xmm0 = dx dy dz 0
-                __ASM_EMIT("movups    %[x0], (%[p])")
+                __ASM_EMIT("movlhps     %[x1], %[x0]")          // x0   = dx ? dy ?
+                __ASM_EMIT("movhps      %[id], %[x2]")          // x2   = dz ? 1 0
+                __ASM_EMIT("shufps      $0xc8, %[x2], %[x0]")   // x0   = dx dy dz 0
+                __ASM_EMIT("movups      %[x0], (%[p])")
 
                 : [x0] "+x" (dx), [x1] "+x" (dy), [x2] "+x"(dz)
-                :
-                    [p] "r" (p),
-                    [mask] "m" (X_MASK0001)
+                : [p] "r" (p),
+                  [id] "m" (IDENTITY0)
                 : "memory"
             );
         }
@@ -636,378 +592,6 @@ namespace lsp
             );
         }
 
-        void init_ray_xyz(ray3d_t *l,
-            float x0, float y0, float z0,
-            float x1, float y1, float z1
-        )
-        {
-            float x7;
-
-            ARCH_X86_ASM
-            (
-                // xmm0 = x0 ? ? ?
-                // xmm1 = y0 ? ? ?
-                // xmm2 = z0 ? ? ?
-                // xmm3 = x1 ? ? ?
-                // xmm4 = y1 ? ? ?
-                // xmm5 = z1 ? ? ?
-                __ASM_EMIT("movaps      %[idm0], %[x7]")        // xmm7 = 1 0 0 0
-                __ASM_EMIT("movlhps     %[x1], %[x0]")          // xmm0 = x0 ? y0 ?
-                __ASM_EMIT("movlhps     %[x4], %[x3]")          // xmm3 = x1 ? y1 ?
-                __ASM_EMIT("movlhps     %[x7], %[x2]")          // xmm2 = z0 ? 1 0
-                __ASM_EMIT("movlhps     %[x7], %[x5]")          // xmm5 = z1 ? 1 0
-                __ASM_EMIT("shufps      $0x88, %[x2], %[x0]")   // xmm2 = x0 y0 z0 1
-                __ASM_EMIT("shufps      $0x88, %[x5], %[x3]")   // xmm3 = x1 y1 z1 1
-                __ASM_EMIT("movups      %[x3], 0x00(%[l])")
-                __ASM_EMIT("subps       %[x2], %[x3]")          // xmm3 = x1-x0 y1-y0 z1-z0 0
-                __ASM_EMIT("movups      %[x3], 0x10(%[l])")
-
-                : [x0] "+x" (x0), [x1] "+x" (y0), [x2] "+x" (z0),
-                  [x3] "+x" (x1), [x4] "+x" (y1), [x5] "+x" (z1),
-                  [x7] "=&x" (x7)
-                : [l] "r" (l),
-                  [idm0] "m" (IDENTITY0)
-                : "memory"
-            );
-        }
-
-        void init_ray_dxyz(ray3d_t *l,
-            float x0, float y0, float z0,
-            float dx, float dy, float dz
-        )
-        {
-            float x7;
-
-            ARCH_X86_ASM
-            (
-                // xmm0 = x0 ? ? ?
-                // xmm1 = y0 ? ? ?
-                // xmm2 = z0 ? ? ?
-                // xmm3 = x1 ? ? ?
-                // xmm4 = y1 ? ? ?
-                // xmm5 = z1 ? ? ?
-                __ASM_EMIT("movaps      %[idm0], %[x7]")        // xmm7 = 1 0 0 0
-                __ASM_EMIT("movlhps     %[x1], %[x0]")          // xmm0 = x0 ? y0 ?
-                __ASM_EMIT("movlhps     %[x4], %[x3]")          // xmm3 = dx ? dy ?
-                __ASM_EMIT("movlhps     %[x7], %[x2]")          // xmm2 = z0 ? 1 0
-                __ASM_EMIT("movlhps     %[x7], %[x5]")          // xmm5 = dz ? 1 0
-                __ASM_EMIT("shufps      $0x88, %[x2], %[x0]")   // xmm2 = x0 y0 z0 1
-                __ASM_EMIT("shufps      $0xc8, %[x5], %[x3]")   // xmm5 = x1 y1 z1 0
-                __ASM_EMIT("movups      %[x0], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x3], 0x10(%[l])")
-
-                : [x0] "+x" (x0), [x1] "+x" (y0), [x2] "+x" (z0),
-                  [x3] "+x" (dx), [x4] "+x" (dy), [x5] "+x" (dz),
-                  [x7] "=&x" (x7)
-                : [l] "r" (l),
-                  [idm0] "m" (IDENTITY0)
-                : "memory"
-            );
-        }
-
-        void init_ray_pdv(ray3d_t *l, const point3d_t *p, const vector3d_t *v)
-        {
-            float x0, x1;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      (%[p]), %[x0]")
-                __ASM_EMIT("movups      (%[v]), %[x1]")
-                __ASM_EMIT("movups      %[x0], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[l])")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1)
-                : [l] "r" (l),
-                  [p] "r" (p),
-                  [v] "r" (v)
-                : "memory"
-            );
-        }
-
-        void init_ray_p2(ray3d_t *l, const point3d_t *p1, const point3d_t *p2)
-        {
-            float x0, x1;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x00(%[p1]), %[x0]")    // xmm0 = x0 y0 z0 w0
-                __ASM_EMIT("movups      0x00(%[p2]), %[x1]")    // xmm1 = x1 y1 z1 w1
-                __ASM_EMIT("movaps      %[x0], %[x1]")          // xmm1 = x1-x0 y1-y0 z1-z0 w1-w0
-                __ASM_EMIT("andps       %[mask], %[x1]")        // xmm1 = x1-x0 y1-y0 z1-z0 0
-                __ASM_EMIT("movups      %[x0], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[l])")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1)
-                : [l] "r" (l),
-                  [p1] "r" (p1),
-                  [p2] "r" (p2),
-                  [mask] "m" (X_MASK0111)
-                : "memory"
-            );
-        }
-
-        void init_ray_pv(ray3d_t *l, const point3d_t *p)
-        {
-            float x0, x1;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x00(%[p]), %[x0]")     // xmm0 = x0 y0 z0 w0
-                __ASM_EMIT("movups      0x10(%[p]), %[x1]")     // xmm1 = x1 y1 z1 w1
-                __ASM_EMIT("movaps      %[x0], %[x1]")          // xmm1 = x1-x0 y1-y0 z1-z0 w1-w0
-                __ASM_EMIT("andps       %[mask], %[x1]")        // xmm1 = x1-x0 y1-y0 z1-z0 0
-                __ASM_EMIT("movups      %[x0], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[l])")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1)
-                : [l] "r" (l),
-                  [p] "r" (p),
-                  [mask] "m" (X_MASK0111)
-                : "memory"
-            );
-        }
-
-        void init_ray(ray3d_t *l, const ray3d_t *r)
-        {
-            float x0, x1;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x00(%[r]), %[x0]")
-                __ASM_EMIT("movups      0x10(%[r]), %[x1]")
-                __ASM_EMIT("movups      %[x0], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[l])")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1)
-                : [l] "r" (l),
-                  [r] "r" (r)
-                : "memory"
-            );
-        }
-
-        void calc_ray_xyz(ray3d_t *l,
-            float x0, float y0, float z0,
-            float x1, float y1, float z1
-        )
-        {
-            float x7;
-
-            ARCH_X86_ASM
-            (
-                // xmm0 = x0 ? ? ?
-                // xmm1 = y0 ? ? ?
-                // xmm2 = z0 ? ? ?
-                // xmm3 = x1 ? ? ?
-                // xmm4 = y1 ? ? ?
-                // xmm5 = z1 ? ? ?
-                __ASM_EMIT("movaps      %[idm0], %[x7]")        // xmm7 = 1 0 0 0
-                __ASM_EMIT("movlhps     %[x1], %[x0]")          // xmm0 = x0 ? y0 ?
-                __ASM_EMIT("movlhps     %[x4], %[x3]")          // xmm3 = x1 ? y1 ?
-                __ASM_EMIT("movlhps     %[x7], %[x2]")          // xmm2 = z0 ? 1 0
-                __ASM_EMIT("movlhps     %[x7], %[x5]")          // xmm5 = z1 ? 1 0
-                __ASM_EMIT("shufps      $0x88, %[x2], %[x0]")   // xmm2 = x0 y0 z0 1
-                __ASM_EMIT("shufps      $0x88, %[x5], %[x3]")   // xmm5 = x1 y1 z1 1
-                __ASM_EMIT("subps       %[x2], %[x5]")          // xmm5 = x1-x0 y1-y0 z1-z0 0
-                NORMALIZE("[x5]", "[x0]", "[x1]")
-                __ASM_EMIT("movups      %[x2], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x5], 0x10(%[l])")
-
-                : [x0] "+x" (x0), [x1] "+x" (y0), [x2] "+x" (z0),
-                  [x3] "+x" (x1), [x4] "+x" (y1), [x5] "+x" (z1),
-                  [x7] "=&x" (x7)
-                : [l] "r" (l),
-                  [idm0] "m" (IDENTITY0)
-                : "cc", "memory"
-            );
-        }
-
-        void calc_ray_dxyz(ray3d_t *l,
-            float x0, float y0, float z0,
-            float dx, float dy, float dz
-        )
-        {
-            float x7;
-
-            ARCH_X86_ASM
-            (
-                // xmm0 = x0 ? ? ?
-                // xmm1 = y0 ? ? ?
-                // xmm2 = z0 ? ? ?
-                // xmm3 = x1 ? ? ?
-                // xmm4 = y1 ? ? ?
-                // xmm5 = z1 ? ? ?
-                __ASM_EMIT("movaps      %[idm0], %[x7]")        // xmm7 = 1 0 0 0
-                __ASM_EMIT("movlhps     %[x1], %[x0]")          // xmm0 = x0 ? y0 ?
-                __ASM_EMIT("movlhps     %[x4], %[x3]")          // xmm3 = dx ? dy ?
-                __ASM_EMIT("movlhps     %[x7], %[x2]")          // xmm2 = z0 ? 1 0
-                __ASM_EMIT("movlhps     %[x7], %[x5]")          // xmm5 = dz ? 1 0
-                __ASM_EMIT("shufps      $0x88, %[x2], %[x0]")   // xmm2 = x0 y0 z0 1
-                __ASM_EMIT("shufps      $0xc8, %[x5], %[x3]")   // xmm5 = x1 y1 z1 0
-                NORMALIZE("[x5]", "[x0]", "[x1]")
-                __ASM_EMIT("movups      %[x2], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x5], 0x10(%[l])")
-
-                : [x0] "+x" (x0), [x1] "+x" (y0), [x2] "+x" (z0),
-                  [x3] "+x" (dx), [x4] "+x" (dy), [x5] "+x" (dz),
-                  [x7] "=&x" (x7)
-                : [l] "r" (l),
-                  [idm0] "m" (IDENTITY0)
-                : "cc", "memory"
-            );
-        }
-
-        void calc_ray_pdv(ray3d_t *l, const point3d_t *p, const vector3d_t *v)
-        {
-            float x0, x1, x2, x3;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      (%[p]), %[x0]")
-                __ASM_EMIT("movups      (%[v]), %[x1]")
-                NORMALIZE("[x1]", "[x2]", "[x3]")
-                __ASM_EMIT("movups      %[x0], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[l])")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [l] "r" (l),
-                  [p] "r" (p),
-                  [v] "r" (v)
-                : "cc", "memory"
-            );
-        }
-
-        void calc_ray_p2(ray3d_t *l, const point3d_t *p1, const point3d_t *p2)
-        {
-            float x0, x1, x2, x3;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x00(%[p1]), %[x0]")    // xmm0 = x0 y0 z0 w0
-                __ASM_EMIT("movups      0x00(%[p2]), %[x1]")    // xmm1 = x1 y1 z1 w1
-                __ASM_EMIT("movaps      %[x0], %[x1]")          // xmm1 = x1-x0 y1-y0 z1-z0 w1-w0
-                __ASM_EMIT("andps       %[mask], %[x1]")        // xmm1 = x1-x0 y1-y0 z1-z0 0
-                NORMALIZE("[x1]", "[x2]", "[x3]")
-                __ASM_EMIT("movups      %[x0], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[l])")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [l] "r" (l),
-                  [p1] "r" (p1),
-                  [p2] "r" (p2),
-                  [mask] "m" (X_MASK0111)
-                : "cc", "memory"
-            );
-        }
-
-        void calc_ray_pv(ray3d_t *l, const point3d_t *p)
-        {
-            float x0, x1, x2, x3;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x00(%[p]), %[x0]")     // xmm0 = x0 y0 z0 w0
-                __ASM_EMIT("movups      0x10(%[p]), %[x1]")     // xmm1 = x1 y1 z1 w1
-                __ASM_EMIT("movaps      %[x0], %[x1]")          // xmm1 = x1-x0 y1-y0 z1-z0 w1-w0
-                __ASM_EMIT("andps       %[mask], %[x1]")        // xmm1 = x1-x0 y1-y0 z1-z0 0
-                NORMALIZE("[x1]", "[x2]", "[x3]")
-                __ASM_EMIT("movups      %[x0], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[l])")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [l] "r" (l),
-                  [p] "r" (p),
-                  [mask] "m" (X_MASK0111)
-                : "cc", "memory"
-            );
-        }
-
-        void calc_ray(ray3d_t *l, const ray3d_t *r)
-        {
-            float x0, x1, x2, x3;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x00(%[r]), %[x0]")
-                __ASM_EMIT("movups      0x10(%[r]), %[x1]")
-                NORMALIZE("[x1]", "[x2]", "[x3]")
-                __ASM_EMIT("movups      %[x0], 0x00(%[l])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[l])")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [l] "r" (l),
-                  [r] "r" (r)
-                : "cc", "memory"
-            );
-        }
-
-        void init_segment_xyz(segment3d_t *s,
-            float x0, float y0, float z0,
-            float x1, float y1, float z1
-        )
-        {
-            float x7;
-
-            ARCH_X86_ASM
-            (
-                // xmm0 = x0 ? ? ?
-                // xmm1 = y0 ? ? ?
-                // xmm2 = z0 ? ? ?
-                // xmm3 = x1 ? ? ?
-                // xmm4 = y1 ? ? ?
-                // xmm5 = z1 ? ? ?
-                __ASM_EMIT("movaps      %[idm0], %[x7]")        // xmm7 = 1 0 0 0
-                __ASM_EMIT("movlhps     %[x1], %[x0]")          // xmm0 = x0 ? y0 ?
-                __ASM_EMIT("movlhps     %[x4], %[x3]")          // xmm3 = x1 ? y1 ?
-                __ASM_EMIT("movlhps     %[x7], %[x2]")          // xmm2 = z0 ? 1 0
-                __ASM_EMIT("movlhps     %[x7], %[x5]")          // xmm5 = z1 ? 1 0
-                __ASM_EMIT("shufps      $0xc8, %[x2], %[x0]")   // xmm2 = x0 y0 z0 0
-                __ASM_EMIT("shufps      $0xc8, %[x5], %[x3]")   // xmm5 = x1 y1 z1 0
-                __ASM_EMIT("movups      %[x2], 0x00(%[s])")
-                __ASM_EMIT("movups      %[x5], 0x10(%[s])")
-
-                : [x0] "+x" (x0), [x1] "+x" (y0), [x2] "+x" (z0),
-                  [x3] "+x" (x1), [x4] "+x" (y1), [x5] "+x" (z1),
-                  [x7] "=&x" (x7)
-                : [s] "r" (s),
-                  [idm0] "m" (IDENTITY0)
-                : "memory"
-            );
-        }
-
-        void init_segment_p2(segment3d_t *s, const point3d_t *p1, const point3d_t *p2)
-        {
-            float x0, x1;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x00(%[p1]), %[x0]")    // xmm0 = x0 y0 z0 w0
-                __ASM_EMIT("movups      0x00(%[p2]), %[x1]")    // xmm1 = x1 y1 z1 w1
-                __ASM_EMIT("movups      %[x0], 0x00(%[s])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[s])")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1)
-                : [s] "r" (s),
-                  [p1] "r" (p1),
-                  [p2] "r" (p2)
-                : "memory"
-            );
-        }
-
-        void init_segment_pv(segment3d_t *s, const point3d_t *p)
-        {
-            float x0, x1;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x00(%[p]), %[x0]")     // xmm0 = x0 y0 z0 w0
-                __ASM_EMIT("movups      0x10(%[p]), %[x1]")     // xmm1 = x1 y1 z1 w1
-                __ASM_EMIT("movups      %[x0], 0x00(%[s])")
-                __ASM_EMIT("movups      %[x1], 0x10(%[s])")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1)
-                : [s] "r" (s),
-                  [p] "r" (p)
-                : "memory"
-            );
-        }
-
-
         void init_matrix3d(matrix3d_t *dst, const matrix3d_t *src)
         {
             ARCH_X86_ASM
@@ -1026,12 +610,11 @@ namespace lsp
             ARCH_X86_ASM
             (
                 __ASM_EMIT("xorps       %%xmm0, %%xmm0")
-                __ASM_EMIT("xorps       %%xmm1, %%xmm1")
-                MATRIX_STORE("m", "%xmm0", "%xmm1", "%xmm0", "%xmm1")
+                MATRIX_STORE("m", "%xmm0", "%xmm0", "%xmm0", "%xmm0")
                 :
                 : [m] "r" (m)
                 : "memory",
-                    "%xmm0", "%xmm1"
+                  "%xmm0"
             );
         }
 
@@ -1040,12 +623,11 @@ namespace lsp
             ARCH_X86_ASM
             (
                 __ASM_EMIT("movaps      %[one], %%xmm0")
-                __ASM_EMIT("movaps      %%xmm0, %%xmm1")
-                MATRIX_STORE("m", "%xmm0", "%xmm1", "%xmm0", "%xmm1")
+                MATRIX_STORE("m", "%xmm0", "%xmm0", "%xmm0", "%xmm0")
                 :
                 : [m] "r" (m), [one] "m" (ONE)
                 : "memory",
-                  "%xmm0", "%xmm1"
+                  "%xmm0"
             );
         }
 
@@ -1101,10 +683,9 @@ namespace lsp
 
             ARCH_X86_ASM
             (
-                __ASM_EMIT("andps     %[mask], %[x0]")          // xmm0 = sx 0 0 0
-                __ASM_EMIT("andps     %[mask], %[x1]")          // xmm1 = sy 0 0 0
-                __ASM_EMIT("andps     %[mask], %[x2]")          // xmm2 = sz 0 0 0
-
+                __ASM_EMIT("andps       %[mask], %[x0]")        // xmm0 = sx 0 0 0
+                __ASM_EMIT("andps       %[mask], %[x1]")        // xmm1 = sy 0 0 0
+                __ASM_EMIT("andps       %[mask], %[x2]")        // xmm2 = sz 0 0 0
                 __ASM_EMIT("shufps      $0xf3, %[x1], %[x1]")   // xmm1 = 0 sy 0 0
                 __ASM_EMIT("shufps      $0xcf, %[x2], %[x2]")   // xmm2 = 0 0 sz 0
                 __ASM_EMIT("movaps      %[idm3], %[x3]")        // xmm3 = 0 0 0 1
@@ -1128,9 +709,8 @@ namespace lsp
 
             ARCH_X86_ASM
             (
-                __ASM_EMIT("movss       %[s], %[x0]")           // xmm0 = s 0 0 0
-                __ASM_EMIT("movss       %[c], %[x1]")           // xmm1 = c 0 0 0
-
+                __ASM_EMIT("andps       %[zmask], %[x0]")       // xmm0 = s 0 0 0
+                __ASM_EMIT("andps       %[zmask], %[x1]")       // xmm1 = c 0 0 0
                 __ASM_EMIT("shufps      $0xc3, %[x1], %[x0]")   // xmm0 = 0 s c 0
                 __ASM_EMIT("movaps      %[idm0], %[x2]")        // xmm2 = 1 0 0 0
                 __ASM_EMIT("movaps      %[x0], %[x1]")          // xmm1 = 0 s c 0
@@ -1140,11 +720,11 @@ namespace lsp
 
                 MATRIX_STORE("m", "[x2]", "[x1]", "[x0]", "[x3]")
                 : [x0] "+x" (s), [x1] "+x" (c), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [s] "m" (s), [c] "m" (c),
-                    [m] "r" (m),
-                    [idm0] "m" (IDENTITY0),
-                    [idm3] "m" (IDENTITY3),
-                    [mask] "m" (X_SMASK0010)
+                : [m] "r" (m),
+                  [idm0] "m" (IDENTITY0),
+                  [idm3] "m" (IDENTITY3),
+                  [zmask] "m" (X_MASK0001),
+                  [mask] "m" (X_SMASK0010)
                 : "memory"
             );
         }
@@ -1157,23 +737,22 @@ namespace lsp
 
             ARCH_X86_ASM
             (
-                __ASM_EMIT("movss       %[s], %[x0]")          // xmm0 = s 0 0 0
-                __ASM_EMIT("movss       %[c], %[x1]")          // xmm1 = c 0 0 0
-
-                __ASM_EMIT("movlhps     %[x1], %[x0]")        // xmm0 = s 0 c 0
-                __ASM_EMIT("movaps      %[x0], %[x1]")        // xmm1 = s 0 c 0
-                __ASM_EMIT("movaps      %[idm1], %[x2]")       // xmm2 = 0 1 0 0
-                __ASM_EMIT("xorps       %[mask], %[x1]")       // xmm1 = -s 0 c 0
-                __ASM_EMIT("movaps      %[idm3], %[x3]")       // xmm3 = 0 0 0 1
-                __ASM_EMIT("shufps      $0xc6, %[x1], %[x1]") // xmm1 = c 0 -s 0
+                __ASM_EMIT("andps       %[zmask], %[x0]")       // xmm0 = s 0 0 0
+                __ASM_EMIT("andps       %[zmask], %[x1]")       // xmm1 = c 0 0 0
+                __ASM_EMIT("movlhps     %[x1], %[x0]")          // xmm0 = s 0 c 0
+                __ASM_EMIT("movaps      %[x0], %[x1]")          // xmm1 = s 0 c 0
+                __ASM_EMIT("movaps      %[idm1], %[x2]")        // xmm2 = 0 1 0 0
+                __ASM_EMIT("xorps       %[mask], %[x1]")        // xmm1 = -s 0 c 0
+                __ASM_EMIT("movaps      %[idm3], %[x3]")        // xmm3 = 0 0 0 1
+                __ASM_EMIT("shufps      $0xc6, %[x1], %[x1]")   // xmm1 = c 0 -s 0
 
                 MATRIX_STORE("m", "[x1]", "[x2]", "[x0]", "[x3]")
                 : [x0] "+x" (s), [x1] "+x" (c), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [s] "m" (s), [c] "m" (c),
-                    [m] "r" (m),
-                    [idm1] "m" (IDENTITY1),
-                    [idm3] "m" (IDENTITY3),
-                    [mask] "m" (X_SMASK0001)
+                : [m] "r" (m),
+                  [idm1] "m" (IDENTITY1),
+                  [idm3] "m" (IDENTITY3),
+                  [zmask] "m" (X_MASK0001),
+                  [mask] "m" (X_SMASK0001)
                 : "memory"
             );
         }
@@ -1186,23 +765,22 @@ namespace lsp
 
             ARCH_X86_ASM
             (
-                __ASM_EMIT("movss       %[s], %[x0]")          // xmm0 = s 0 0 0
-                __ASM_EMIT("movss       %[c], %[x1]")          // xmm1 = c 0 0 0
-
-                __ASM_EMIT("movaps      %[x0], %[x2]")        // xmm2 = s 0 0 0
-                __ASM_EMIT("movaps      %[idm2], %[x3]")       // xmm3 = 0 0 1 0
-                __ASM_EMIT("unpcklps    %[x1], %[x0]")        // xmm0 = s c 0 0
-                __ASM_EMIT("movaps      %[idm3], %[x4]")       // xmm3 = 0 0 0 1
-                __ASM_EMIT("unpcklps    %[x2], %[x1]")        // xmm1 = c s 0 0
-                __ASM_EMIT("xorps       %[mask], %[x0]")       // xmm0 = -s c 0 0
+                __ASM_EMIT("andps       %[zmask], %[x0]")       // xmm0 = s 0 0 0
+                __ASM_EMIT("andps       %[zmask], %[x1]")       // xmm1 = c 0 0 0
+                __ASM_EMIT("movaps      %[x0], %[x2]")          // xmm2 = s 0 0 0
+                __ASM_EMIT("movaps      %[idm2], %[x3]")        // xmm3 = 0 0 1 0
+                __ASM_EMIT("unpcklps    %[x1], %[x0]")          // xmm0 = s c 0 0
+                __ASM_EMIT("movaps      %[idm3], %[x4]")        // xmm3 = 0 0 0 1
+                __ASM_EMIT("unpcklps    %[x2], %[x1]")          // xmm1 = c s 0 0
+                __ASM_EMIT("xorps       %[mask], %[x0]")        // xmm0 = -s c 0 0
 
                 MATRIX_STORE("m", "[x1]", "[x0]", "[x3]", "[x4]")
                 : [x0] "+x" (s), [x1] "+x" (c), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
-                : [s] "m" (s), [c] "m" (c),
-                    [m] "r" (m),
-                    [idm2] "m" (IDENTITY2),
-                    [idm3] "m" (IDENTITY3),
-                    [mask] "m" (X_SMASK0001)
+                : [m] "r" (m),
+                  [idm2] "m" (IDENTITY2),
+                  [idm3] "m" (IDENTITY3),
+                  [zmask] "m" (X_MASK0001),
+                  [mask] "m" (X_SMASK0001)
                 : "memory"
             );
         }
@@ -1646,50 +1224,6 @@ namespace lsp
             return x0;
         }
 
-        float check_triplet3d_t(const triangle3d_t *t)
-        {
-            float x0, x1, x2, x3, x4;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x10(%[t]), %[x1]")     // xmm1 = px2 py2 pz2 pw2
-                __ASM_EMIT("movups      0x20(%[t]), %[x2]")     // xmm2 = px3 py3 pz3 pw3
-                __ASM_EMIT("movups      0x00(%[t]), %[x4]")     // xmm3 = px1 py1 pz1 pw1
-                __ASM_EMIT("subps       %[x1], %[x2]")          // xmm2 = x2 y2 z2 w2
-                __ASM_EMIT("movups      0x30(%[t]), %[x0]")     // xmm0 = nx ny nz nw
-                __ASM_EMIT("subps       %[x4], %[x1]")          // xmm1 = x1 y1 z1 w1
-
-                TRIPLET_CHECK("x0", "x1", "x2", "x3", "x4")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
-                : [t] "r" (t)
-            );
-
-            return x0;
-        }
-
-        float check_triplet3d_tn(const triangle3d_t *t, const vector3d_t *n)
-        {
-            float x0, x1, x2, x3, x4;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x10(%[t]), %[x1]")     // xmm1 = px2 py2 pz2 pw2
-                __ASM_EMIT("movups      0x20(%[t]), %[x2]")     // xmm2 = px3 py3 pz3 pw3
-                __ASM_EMIT("movups      0x00(%[t]), %[x4]")     // xmm4 = px1 py1 pz1 pw1
-                __ASM_EMIT("subps       %[x1], %[x2]")          // xmm2 = x2 y2 z2 w2
-                __ASM_EMIT("movups      (%[n]), %[x0]")         // xmm0 = nx ny nz nw
-                __ASM_EMIT("subps       %[x4], %[x1]")          // xmm1 = x1 y1 z1 w1
-
-                TRIPLET_CHECK("x0", "x1", "x2", "x3", "x4")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4)
-                : [t] "r" (t), [n] "r" (n)
-            );
-
-            return x0;
-        }
-
         size_t longest_edge3d_p3(const point3d_t *p1, const point3d_t *p2, const point3d_t *p3)
         {
             size_t res;
@@ -1702,33 +1236,35 @@ namespace lsp
                 __ASM_EMIT("movups      (%[p2]), %[x0]")        // xmm0 = x1 y1 z1 w1
                 __ASM_EMIT("movups      (%[p3]), %[x1]")        // xmm1 = x2 y2 z2 w2
                 __ASM_EMIT("movaps      %[x2], %[x3]")          // xmm3 = x0 y0 z0 w0
-                __ASM_EMIT("subps       %[x1], %[x2]")          // xmm2 = x0-x2 y0-y2 z0-z2 w0-w2 = dx2 dy2 dz2 dw2
-                __ASM_EMIT("subps       %[x0], %[x1]")          // xmm1 = x2-x1 y2-y1 z2-z1 w2-w1 = dx1 dy1 dz1 dw1
-                __ASM_EMIT("subps       %[x3], %[x0]")          // xmm0 = x1-x0 y1-y0 z1-z0 w1-w0 = dx0 dy0 dz0 dw0
+                __ASM_EMIT("subps       %[x1], %[x2]")          // xmm2 = x0-x2 y0-y2 z0-z2 w0-w2 = dx2 dy2 dz2 0
+                __ASM_EMIT("subps       %[x0], %[x1]")          // xmm1 = x2-x1 y2-y1 z2-z1 w2-w1 = dx1 dy1 dz1 0
+                __ASM_EMIT("subps       %[x3], %[x0]")          // xmm0 = x1-x0 y1-y0 z1-z0 w1-w0 = dx0 dy0 dz0 0
 
                 // Calc scalar multiplication
-                __ASM_EMIT("mulps       %[x2], %[x2]")          // xmm2 = sx2 sy2 sz2 sw2
-                __ASM_EMIT("mulps       %[x1], %[x1]")          // xmm1 = sx2 sy2 sz2 sw2
-                __ASM_EMIT("mulps       %[x0], %[x0]")          // xmm0 = sx2 sy2 sz2 sw2
+                __ASM_EMIT("mulps       %[x2], %[x2]")          // xmm2 = cx2 cy2 cz2 0
+                __ASM_EMIT("mulps       %[x1], %[x1]")          // xmm1 = bx2 by2 bz2 0
+                __ASM_EMIT("mulps       %[x0], %[x0]")          // xmm0 = ax2 ay2 az2 0
                 MAT3_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]")
                 __ASM_EMIT("addps       %[x1], %[x0]")
-                __ASM_EMIT("addps       %[x3], %[x0]")          // xmm0 = S0 S1 S2 ?
+                __ASM_EMIT("addps       %[x3], %[x0]")          // xmm0 = A2 B2 C2 ?
 
-                __ASM_EMIT("xor         %[res], %[res]")
-                __ASM_EMIT("movhlps     %[x0], %[x2]")          // xmm2 = S2 ? ? ? ?
-                __ASM_EMIT("unpcklps    %[x0], %[x0]")          // xmm0 = S0 S0 S1 S1
-                __ASM_EMIT("movhlps     %[x0], %[x1]")          // xmm1 = S1 ? ? ? ?
-
-                __ASM_EMIT("ucomiss     %[x1], %[x0]")          // S0 <?> S1
-                __ASM_EMIT("ja          1f")                   // S0 > S1
-                    __ASM_EMIT("ucomiss     %[x2], %[x1]")          // S1 <?> S2
-                    __ASM_EMIT("setbe       %%al")
-                    __ASM_EMIT("inc         %%al")
+                __ASM_EMIT("xor         %[res], %[res]")        // res  = 0
+                __ASM_EMIT("movhlps     %[x0], %[x2]")          // xmm2 = C2 ? ? ?
+                __ASM_EMIT("unpcklps    %[x0], %[x0]")          // xmm0 = A2 A2 B2 B2
+                __ASM_EMIT("movhlps     %[x0], %[x1]")          // xmm1 = B2 B2 ? ?
+
+                __ASM_EMIT("ucomiss     %[x1], %[x0]")          // A2 <?> B2
+                __ASM_EMIT("jae         1f")
+                    // A2 < B2
+                    __ASM_EMIT("ucomiss     %[x1], %[x2]")          // C2 <?> B2
+                    __ASM_EMIT("seta        %%al")                  // res = (B2 >= C2) ? 0 : 1
+                    __ASM_EMIT("add         $1, %[res]")            // res = (B2 >= C2) ? 1 : 2
                     __ASM_EMIT("jmp         2f")
-                __ASM_EMIT("1:")                                // S0 <= S1
-                    __ASM_EMIT("ucomiss     %[x2], %[x0]")          // S0 <?> S2
-                    __ASM_EMIT("ja          2f")                    // S0 > S2
-                    __ASM_EMIT("add         $2, %%al")              // res = 2
+                __ASM_EMIT("1:")
+                    // A2 >= B2
+                    __ASM_EMIT("ucomiss     %[x2], %[x0]")          // A2 <?> C2
+                    __ASM_EMIT("jae         2f")
+                    __ASM_EMIT("mov         $2, %[res]")            // res = (A2 >= C2) ? 0 : 2
                 __ASM_EMIT("2:")
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
                   [res] "=a" (res)
@@ -1767,16 +1303,18 @@ namespace lsp
                 __ASM_EMIT("unpcklps    %[x0], %[x0]")          // xmm0 = S0 S0 S1 S1
                 __ASM_EMIT("movhlps     %[x0], %[x1]")          // xmm1 = S1 ? ? ? ?
 
-                __ASM_EMIT("ucomiss     %[x1], %[x0]")          // S0 <?> S1
-                __ASM_EMIT("ja          1f")                   // S0 > S1
-                    __ASM_EMIT("ucomiss     %[x2], %[x1]")          // S1 <?> S2
-                    __ASM_EMIT("setbe       %%al")
-                    __ASM_EMIT("inc         %%al")
+                __ASM_EMIT("ucomiss     %[x1], %[x0]")          // A2 <?> B2
+                __ASM_EMIT("jae         1f")
+                    // A2 < B2
+                    __ASM_EMIT("ucomiss     %[x1], %[x2]")          // C2 <?> B2
+                    __ASM_EMIT("seta        %%al")                  // res = (B2 >= C2) ? 0 : 1
+                    __ASM_EMIT("add         $1, %[res]")            // res = (B2 >= C2) ? 1 : 2
                     __ASM_EMIT("jmp         2f")
-                __ASM_EMIT("1:")                                // S0 <= S1
-                    __ASM_EMIT("ucomiss     %[x2], %[x0]")          // S0 <?> S2
-                    __ASM_EMIT("ja          2f")                    // S0 > S2
-                    __ASM_EMIT("add         $2, %%al")              // res = 2
+                __ASM_EMIT("1:")
+                    // A2 >= B2
+                    __ASM_EMIT("ucomiss     %[x2], %[x0]")          // A2 <?> C2
+                    __ASM_EMIT("jae         2f")
+                    __ASM_EMIT("mov         $2, %[res]")            // res = (A2 >= C2) ? 0 : 2
                 __ASM_EMIT("2:")
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
                   [res] "=a" (res)
@@ -1786,65 +1324,6 @@ namespace lsp
             return res;
         }
 
-        float check_point3d_on_triangle_tp(const triangle3d_t *t, const point3d_t *p)
-        {
-            float x0, x1, x2, x3, x4, x5, x6, x7;
-
-            ARCH_X86_ASM
-            (
-                /* Load vectors */
-                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz pw */
-                __ASM_EMIT("movups      0x00(%[t]), %[x0]")     /* xmm0 = x0 y0 z0 w0 */
-                __ASM_EMIT("movups      0x10(%[t]), %[x1]")     /* xmm1 = x1 y1 z1 w1 */
-                __ASM_EMIT("movups      0x20(%[t]), %[x2]")     /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = dx2 dy2 dz2 dw2 */
-                /* 3x vector multiplications */
-                VECTOR_MUL3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
-                /* 3x scalar multiplications */
-                SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
-                /* Compare with zeros */
-                __ASM_EMIT("xorps       %[x4], %[x4]")
-                __ASM_EMIT("ucomiss     %[x4], %[x0]")
-                __ASM_EMIT("jb          110f")
-                __ASM_EMIT("ucomiss     %[x4], %[x1]")
-                __ASM_EMIT("jb          109f")
-                __ASM_EMIT("ucomiss     %[x4], %[x2]")
-                __ASM_EMIT("jb          108f")
-                __ASM_EMIT("mulss       %[x1], %[x0]")
-                __ASM_EMIT("mulss       %[x2], %[x0]")
-                __ASM_EMIT("ucomiss     %[x4], %[x0]")
-                __ASM_EMIT("jne         110f")
-                /* There is somewhere zero, need additional check */
-                /* Load vectors */
-                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz pw */
-                __ASM_EMIT("movups      0x00(%[t]), %[x0]")     /* xmm0 = x0 y0 z0 w0 */
-                __ASM_EMIT("movups      0x10(%[t]), %[x1]")     /* xmm1 = x1 y1 z1 w1 */
-                __ASM_EMIT("movups      0x20(%[t]), %[x2]")     /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = dx2 dy2 dz2 dw2 */
-                /* Do 3x scalar multiplications */
-                SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
-                __ASM_EMIT("mulss       %[x1], %[x0]")
-                __ASM_EMIT("mulss       %[x2], %[x0]")
-                __ASM_EMIT("jmp         110f")
-
-                __ASM_EMIT("108:")
-                __ASM_EMIT("movss       %[x2], %[x0]")
-                __ASM_EMIT("jmp         110f")
-                __ASM_EMIT("109:")
-                __ASM_EMIT("movss       %[x1], %[x0]")
-                __ASM_EMIT("110:")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)
-                : [p] "r" (p), [t] "r" (t)
-            );
-
-            return x0;
-        }
-
         float check_point3d_on_triangle_pvp(const point3d_t *pv, const point3d_t *p)
         {
             float x0, x1, x2, x3, x4, x5, x6, x7;
@@ -1852,49 +1331,39 @@ namespace lsp
             ARCH_X86_ASM
             (
                 /* Load vectors */
-                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz pw */
-                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = x0 y0 z0 w0 */
-                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = x1 y1 z1 w1 */
-                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = dx2 dy2 dz2 dw2 */
+                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz 1 */
+                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = x0 y0 z0 1 */
+                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = x1 y1 z1 1 */
+                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = x2 y2 z2 1 */
+                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = v0 = dx0 dy0 dz0 0 */
+                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = v1 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = v2 = dx2 dy2 dz2 0 */
                 /* 3x vector multiplications */
                 VECTOR_MUL3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
                 /* 3x scalar multiplications */
+                /* xmm0 = m0 = v0 cross v1 */
+                /* xmm1 = m1 = v1 cross v2 */
+                /* xmm2 = m2 = v2 cross v0 */
                 SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
                 /* Compare with zeros */
-                __ASM_EMIT("xorps       %[x4], %[x4]")
-                __ASM_EMIT("ucomiss     %[x4], %[x0]")
-                __ASM_EMIT("jb          110f")
-                __ASM_EMIT("ucomiss     %[x4], %[x1]")
-                __ASM_EMIT("jb          109f")
-                __ASM_EMIT("ucomiss     %[x4], %[x2]")
-                __ASM_EMIT("jb          108f")
-                __ASM_EMIT("mulss       %[x1], %[x0]")
-                __ASM_EMIT("mulss       %[x2], %[x0]")
-                __ASM_EMIT("ucomiss     %[x4], %[x0]")
-                __ASM_EMIT("jne         110f")
-                /* There is somewhere zero, need additional check */
-                /* Load vectors */
-                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz pw */
-                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = x0 y0 z0 w0 */
-                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = x1 y1 z1 w1 */
-                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = dx2 dy2 dz2 dw2 */
-                /* Do 3x scalar multiplications */
-                SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
-                __ASM_EMIT("mulss       %[x1], %[x0]")
-                __ASM_EMIT("mulss       %[x2], %[x0]")
-                __ASM_EMIT("jmp         110f")
-
-                __ASM_EMIT("108:")
-                __ASM_EMIT("movss       %[x2], %[x0]")
+                /* xmm0 = r0 = m0 dot m1 */
+                /* xmm1 = r1 = m1 dot m2 */
+                /* xmm2 = r2 = m2 dot m0 */
+                __ASM_EMIT("xorps       %[x4], %[x4]")          /* xmm4 = 0 */
+                __ASM_EMIT("ucomiss     %[x4], %[x0]")          /* r0 <=> 0 */
+                __ASM_EMIT("jb          110f")                  /* r0 < 0   */
+                __ASM_EMIT("mulss       %[x1], %[x0]")          /* xmm0 = r0 * r1 */
+                __ASM_EMIT("ucomiss     %[x4], %[x1]")          /* r1 <=> 0 */
+                __ASM_EMIT("jb          109f")                  /* r1 < 0   */
+                __ASM_EMIT("mulss       %[x2], %[x0]")          /* xmm0 = r0 * r1 * r2 */
+                __ASM_EMIT("ucomiss     %[x4], %[x2]")          /* r2 <=> 0 */
+                __ASM_EMIT("jae         110f")                  /* r2 >= 0   */
+                /* Fail cases */
+                __ASM_EMIT("movaps      %[x2], %[x0]")
                 __ASM_EMIT("jmp         110f")
                 __ASM_EMIT("109:")
-                __ASM_EMIT("movss       %[x1], %[x0]")
+                __ASM_EMIT("movaps      %[x1], %[x0]")
+                /* End */
                 __ASM_EMIT("110:")
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
                   [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)
@@ -1911,49 +1380,39 @@ namespace lsp
             ARCH_X86_ASM
             (
                 /* Load vectors */
-                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz pw */
-                __ASM_EMIT("movups      (%[p1]), %[x0]")        /* xmm0 = x0 y0 z0 w0 */
-                __ASM_EMIT("movups      (%[p2]), %[x1]")        /* xmm1 = x1 y1 z1 w1 */
-                __ASM_EMIT("movups      (%[p3]), %[x2]")        /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = dx2 dy2 dz2 dw2 */
+                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz 1 */
+                __ASM_EMIT("movups      (%[p1]), %[x0]")        /* xmm0 = x0 y0 z0 1 */
+                __ASM_EMIT("movups      (%[p2]), %[x1]")        /* xmm1 = x1 y1 z1 1 */
+                __ASM_EMIT("movups      (%[p3]), %[x2]")        /* xmm2 = x2 y2 z2 1 */
+                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = v0 = dx0 dy0 dz0 0 */
+                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = v1 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = v2 = dx2 dy2 dz2 0 */
                 /* 3x vector multiplications */
                 VECTOR_MUL3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
                 /* 3x scalar multiplications */
+                /* xmm0 = m0 = v0 cross v1 */
+                /* xmm1 = m1 = v1 cross v2 */
+                /* xmm2 = m2 = v2 cross v0 */
                 SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
                 /* Compare with zeros */
-                __ASM_EMIT("xorps       %[x4], %[x4]")
-                __ASM_EMIT("ucomiss     %[x4], %[x0]")
-                __ASM_EMIT("jb          110f")
-                __ASM_EMIT("ucomiss     %[x4], %[x1]")
-                __ASM_EMIT("jb          109f")
-                __ASM_EMIT("ucomiss     %[x4], %[x2]")
-                __ASM_EMIT("jb          108f")
-                __ASM_EMIT("mulss       %[x1], %[x0]")
-                __ASM_EMIT("mulss       %[x2], %[x0]")
-                __ASM_EMIT("ucomiss     %[x4], %[x0]")
-                __ASM_EMIT("jne         110f")
-                /* There is somewhere zero, need additional check */
-                /* Load vectors */
-                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz pw */
-                __ASM_EMIT("movups      (%[p1]), %[x0]")        /* xmm0 = x0 y0 z0 w0 */
-                __ASM_EMIT("movups      (%[p2]), %[x1]")        /* xmm1 = x1 y1 z1 w1 */
-                __ASM_EMIT("movups      (%[p3]), %[x2]")        /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = dx2 dy2 dz2 dw2 */
-                /* Do 3x scalar multiplications */
-                SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
-                __ASM_EMIT("mulss       %[x1], %[x0]")
-                __ASM_EMIT("mulss       %[x2], %[x0]")
-                __ASM_EMIT("jmp         110f")
-
-                __ASM_EMIT("108:")
-                __ASM_EMIT("movss       %[x2], %[x0]")
+                /* xmm0 = r0 = m0 dot m1 */
+                /* xmm1 = r1 = m1 dot m2 */
+                /* xmm2 = r2 = m2 dot m0 */
+                __ASM_EMIT("xorps       %[x4], %[x4]")          /* xmm4 = 0 */
+                __ASM_EMIT("ucomiss     %[x4], %[x0]")          /* r0 <=> 0 */
+                __ASM_EMIT("jb          110f")                  /* r0 < 0   */
+                __ASM_EMIT("mulss       %[x1], %[x0]")          /* xmm0 = r0 * r1 */
+                __ASM_EMIT("ucomiss     %[x4], %[x1]")          /* r1 <=> 0 */
+                __ASM_EMIT("jb          109f")                  /* r1 < 0   */
+                __ASM_EMIT("mulss       %[x2], %[x0]")          /* xmm0 = r0 * r1 * r2 */
+                __ASM_EMIT("ucomiss     %[x4], %[x2]")          /* r2 <=> 0 */
+                __ASM_EMIT("jae         110f")                  /* r2 >= 0   */
+                /* Fail cases */
+                __ASM_EMIT("movaps      %[x2], %[x0]")
                 __ASM_EMIT("jmp         110f")
                 __ASM_EMIT("109:")
-                __ASM_EMIT("movss       %[x1], %[x0]")
+                __ASM_EMIT("movaps      %[x1], %[x0]")
+                /* End */
                 __ASM_EMIT("110:")
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
                   [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)
@@ -1963,48 +1422,6 @@ namespace lsp
             return x0;
         }
 
-        float calc_angle3d_v2(const vector3d_t *v1, const vector3d_t *v2)
-        {
-            float x0, x1, x2, x3, x4;
-
-            ARCH_X86_ASM
-            (
-                /* Load vectors */
-                __ASM_EMIT("movups      (%[v1]), %[x0]")        /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("movups      (%[v2]), %[x1]")        /* xmm1 = dx1 dy1 dz1 dw1 */
-                CALC_COSINE2V("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[M_ONE]", "[ONE]")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
-                : [v1] "r" (v1), [v2] "r" (v2),
-                  [ONE] "m" (ONE),
-                  [M_ONE] "m" (X_MINUS_ONE)
-                : "cc", "memory"
-            );
-
-            return x0;
-        }
-
-        float calc_angle3d_vv(const vector3d_t *v)
-        {
-            float x0, x1, x2, x3, x4;
-
-            ARCH_X86_ASM
-            (
-                /* Load vectors */
-                __ASM_EMIT("movups      0x00(%[v]), %[x0]")      /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("movups      0x10(%[v]), %[x1]")      /* xmm1 = dx1 dy1 dz1 dw1 */
-                CALC_COSINE2V("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[M_ONE]", "[ONE]")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
-                : [v] "r" (v),
-                  [ONE] "m" (ONE),
-                  [M_ONE] "m" (X_MINUS_ONE)
-                : "cc", "memory"
-            );
-
-            return x0;
-        }
-
         void calc_normal3d_v2(vector3d_t *n, const vector3d_t *v1, const vector3d_t *v2)
         {
             float x0, x1, x2, x3;
@@ -2014,24 +1431,19 @@ namespace lsp
                 __ASM_EMIT("movups      (%[v1]), %[x0]")        /* xmm0 = dx1 dy1 dz1 dw1 */
                 __ASM_EMIT("movups      (%[v2]), %[x1]")        /* xmm1 = dx2 dy2 dz2 dw2 */
                 VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY NW */
-    //            __ASM_EMIT("shufps      $0xc9, %[x0], %[x0]")   /* xmm0 = NX NY NZ NW */
-    //            NORMALIZE("[x0]", "[x1]", "[x2]")               /* xmm0 = nx ny nz nw */
-    //            __ASM_EMIT("movups      %[x0], (%[n])")
-                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY 0 */
                 VECTOR_DPPS3("[x0]", "[x0]", "[x2]")            /* xmm0 = NX*NX + NY*NY + NZ*NZ = W2 */
-                __ASM_EMIT("shufps      $0x09, %[x1], %[x1]")   /* xmm1 = NX NY NZ NZ */
+                __ASM_EMIT("shufps      $0xc9, %[x1], %[x1]")   /* xmm1 = NX NY NZ 0 */
                 __ASM_EMIT("sqrtss      %[x0], %[x0]")          /* xmm0 = sqrtf(W2) = W */
                 __ASM_EMIT("xorps       %[x3], %[x3]")          /* xmm3 = 0 */
                 __ASM_EMIT("shufps      $0x00, %[x0], %[x0]")   /* xmm0 = W2 W2 W2 W2 */
                 __ASM_EMIT("cmpps       $4, %[x0], %[x3]")      /* xmm3 = W != 0 */
-                __ASM_EMIT("divps       %[x0], %[x1]")          /* xmm1 = NX/W NY/W NZ/W NZ/W */
+                __ASM_EMIT("divps       %[x0], %[x1]")          /* xmm1 = NX/W NY/W NZ/W 0/W */
                 __ASM_EMIT("andps       %[x3], %[x1]")          /* xmm1 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz */
-                __ASM_EMIT("andps       %[X_3DMASK], %[x1]")    /* xmm1 = nx ny nz 0 */
                 __ASM_EMIT("movups      %[x1], (%[n])")
 
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [n] "r" (n), [v1] "r" (v1), [v2] "r" (v2),
-                  [X_3DMASK] "m" (X_3DMASK)
+                : [n] "r" (n), [v1] "r" (v1), [v2] "r" (v2)
                 : "memory"
             );
         }
@@ -2045,24 +1457,19 @@ namespace lsp
                 __ASM_EMIT("movups      0x00(%[vv]), %[x0]")    /* xmm0 = dx1 dy1 dz1 dw1 */
                 __ASM_EMIT("movups      0x10(%[vv]), %[x1]")    /* xmm1 = dx2 dy2 dz2 dw2 */
                 VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY NW */
-    //            __ASM_EMIT("shufps      $0xc9, %[x0], %[x0]")   /* xmm0 = NX NY NZ NW */
-    //            NORMALIZE("[x0]", "[x1]", "[x2]")               /* xmm0 = nx ny nz nw */
-    //            __ASM_EMIT("movups      %[x0], (%[n])")
-                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY 0 */
                 VECTOR_DPPS3("[x0]", "[x0]", "[x2]")            /* xmm0 = NX*NX + NY*NY + NZ*NZ = W2 */
-                __ASM_EMIT("shufps      $0x09, %[x1], %[x1]")   /* xmm1 = NX NY NZ NZ */
+                __ASM_EMIT("shufps      $0xc9, %[x1], %[x1]")   /* xmm1 = NX NY NZ 0 */
                 __ASM_EMIT("sqrtss      %[x0], %[x0]")          /* xmm0 = sqrtf(W2) = W */
                 __ASM_EMIT("xorps       %[x3], %[x3]")          /* xmm3 = 0 */
                 __ASM_EMIT("shufps      $0x00, %[x0], %[x0]")   /* xmm0 = W2 W2 W2 W2 */
                 __ASM_EMIT("cmpps       $4, %[x0], %[x3]")      /* xmm3 = W != 0 */
-                __ASM_EMIT("divps       %[x0], %[x1]")          /* xmm1 = NX/W NY/W NZ/W NZ/W */
+                __ASM_EMIT("divps       %[x0], %[x1]")          /* xmm1 = NX/W NY/W NZ/W 0/W */
                 __ASM_EMIT("andps       %[x3], %[x1]")          /* xmm1 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz */
-                __ASM_EMIT("andps       %[X_3DMASK], %[x1]")    /* xmm1 = nx ny nz 0 */
                 __ASM_EMIT("movups      %[x1], (%[n])")
 
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [n] "r" (n), [vv] "r" (vv),
-                  [X_3DMASK] "m" (X_3DMASK)
+                : [n] "r" (n), [vv] "r" (vv)
                 : "memory"
             );
         }
@@ -2079,24 +1486,19 @@ namespace lsp
                 __ASM_EMIT("subps       %[x0], %[x1]")          /* xmm0 = dx1 dy1 dz1 dw1 */
                 __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm1 = dx2 dy2 dz2 dw2 */
                 VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY NW */
-    //            __ASM_EMIT("shufps      $0xc9, %[x0], %[x0]")   /* xmm0 = NX NY NZ NW */
-    //            NORMALIZE("[x0]", "[x1]", "[x2]")               /* xmm0 = nx ny nz nw */
-    //            __ASM_EMIT("movups      %[x0], (%[n])")
-                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY 0 */
                 VECTOR_DPPS3("[x0]", "[x0]", "[x2]")            /* xmm0 = NX*NX + NY*NY + NZ*NZ = W2 */
-                __ASM_EMIT("shufps      $0x09, %[x1], %[x1]")   /* xmm1 = NX NY NZ NZ */
+                __ASM_EMIT("shufps      $0xc9, %[x1], %[x1]")   /* xmm1 = NX NY NZ 0 */
                 __ASM_EMIT("sqrtss      %[x0], %[x0]")          /* xmm0 = sqrtf(W2) = W */
                 __ASM_EMIT("xorps       %[x3], %[x3]")          /* xmm3 = 0 */
                 __ASM_EMIT("shufps      $0x00, %[x0], %[x0]")   /* xmm0 = W2 W2 W2 W2 */
                 __ASM_EMIT("cmpps       $4, %[x0], %[x3]")      /* xmm3 = W != 0 */
-                __ASM_EMIT("divps       %[x0], %[x1]")          /* xmm1 = NX/W NY/W NZ/W NZ/W */
+                __ASM_EMIT("divps       %[x0], %[x1]")          /* xmm1 = NX/W NY/W NZ/W 0/W */
                 __ASM_EMIT("andps       %[x3], %[x1]")          /* xmm1 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz */
-                __ASM_EMIT("andps       %[X_3DMASK], %[x1]")    /* xmm1 = nx ny nz 0 */
                 __ASM_EMIT("movups      %[x1], (%[n])")
 
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [n] "r" (n), [p1] "r" (p1), [p2] "r" (p2), [p3] "r" (p3),
-                  [X_3DMASK] "m" (X_3DMASK)
+                : [n] "r" (n), [p1] "r" (p1), [p2] "r" (p2), [p3] "r" (p3)
                 : "memory"
             );
         }
@@ -2113,70 +1515,19 @@ namespace lsp
                 __ASM_EMIT("subps       %[x0], %[x1]")          /* xmm0 = dx1 dy1 dz1 dw1 */
                 __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm1 = dx2 dy2 dz2 dw2 */
                 VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY NW */
-    //            __ASM_EMIT("shufps      $0xc9, %[x0], %[x0]")   /* xmm0 = NX NY NZ NW */
-    //            NORMALIZE("[x0]", "[x1]", "[x2]")               /* xmm0 = nx ny nz nw */
-    //            __ASM_EMIT("movups      %[x0], (%[n])")
-                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY 0 */
                 VECTOR_DPPS3("[x0]", "[x0]", "[x2]")            /* xmm0 = NX*NX + NY*NY + NZ*NZ = W2 */
-                __ASM_EMIT("shufps      $0x09, %[x1], %[x1]")   /* xmm1 = NX NY NZ NZ */
+                __ASM_EMIT("shufps      $0xc9, %[x1], %[x1]")   /* xmm1 = NX NY NZ 0 */
                 __ASM_EMIT("sqrtss      %[x0], %[x0]")          /* xmm0 = sqrtf(W2) = W */
                 __ASM_EMIT("xorps       %[x3], %[x3]")          /* xmm3 = 0 */
                 __ASM_EMIT("shufps      $0x00, %[x0], %[x0]")   /* xmm0 = W2 W2 W2 W2 */
                 __ASM_EMIT("cmpps       $4, %[x0], %[x3]")      /* xmm3 = W != 0 */
-                __ASM_EMIT("divps       %[x0], %[x1]")          /* xmm1 = NX/W NY/W NZ/W NZ/W */
+                __ASM_EMIT("divps       %[x0], %[x1]")          /* xmm1 = NX/W NY/W NZ/W 0/W */
                 __ASM_EMIT("andps       %[x3], %[x1]")          /* xmm1 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz */
-                __ASM_EMIT("andps       %[X_3DMASK], %[x1]")    /* xmm1 = nx ny nz 0 */
                 __ASM_EMIT("movups      %[x1], (%[n])")
 
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [n] "r" (n), [pv] "r" (pv),
-                  [X_3DMASK] "m" (X_3DMASK)
-                : "memory"
-            );
-        }
-
-        void move_point3d_p2(point3d_t *p, const point3d_t *p1, const point3d_t *p2, float k)
-        {
-            float x0, x1;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      (%[p1]), %[x0]")        // xmm0 = x0 y0 z0 w0
-                __ASM_EMIT("movups      (%[p2]), %[x1]")        // xmm1 = x1 y1 z1 w1
-                __ASM_EMIT("shufps      $0x00, %[x2], %[x2]")   // xmm2 = k k k k
-                __ASM_EMIT("subps       %[x0], %[x1]")          // xmm1 = dx dy dz dw
-                __ASM_EMIT("mulps       %[x2], %[x1]")          // xmm1 = dx*k dy*k dz*k dw*k
-                __ASM_EMIT("addps       %[x1], %[x0]")          // xmm0 = x0+dx*k y0+dx*k z0+dx*k w0+dw*k
-                __ASM_EMIT("andps       %[zmask], %[x0]")       // xmm0 = x0+dx*k y0+dx*k z0+dx*k 0
-                __ASM_EMIT("orps        %[omask], %[x0]")       // xmm0 = x0+dx*k y0+dx*k z0+dx*k 1
-                __ASM_EMIT("movups      %[x0], (%[p])")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "+x" (k)
-                : [p] "r" (p), [p1] "r" (p1), [p2] "r" (p2),
-                  [zmask] "m" (X_MASK0111),
-                  [omask] "m" (X_3DPOINT)
-                : "memory"
-            );
-        }
-
-        void move_point3d_pv(point3d_t *p, const point3d_t *pv, float k)
-        {
-            float x0, x1;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    // xmm0 = x0 y0 z0 w0
-                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    // xmm1 = x1 y1 z1 w1
-                __ASM_EMIT("shufps      $0x00, %[x2], %[x2]")   // xmm2 = k k k k
-                __ASM_EMIT("subps       %[x0], %[x1]")          // xmm1 = dx dy dz dw
-                __ASM_EMIT("mulps       %[x2], %[x1]")          // xmm1 = dx*k dy*k dz*k dw*k
-                __ASM_EMIT("addps       %[x1], %[x0]")          // xmm0 = x0+dx*k y0+dx*k z0+dx*k w0+dw*k
-                __ASM_EMIT("andps       %[zmask], %[x0]")       // xmm0 = x0+dx*k y0+dx*k z0+dx*k 0
-                __ASM_EMIT("orps        %[omask], %[x0]")       // xmm0 = x0+dx*k y0+dx*k z0+dx*k 1
-                __ASM_EMIT("movups      %[x0], (%[p])")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "+x" (k)
-                : [p] "r" (p), [pv] "r" (pv),
-                  [zmask] "m" (X_MASK0111),
-                  [omask] "m" (X_3DPOINT)
+                : [n] "r" (n), [pv] "r" (pv)
                 : "memory"
             );
         }
@@ -2190,8 +1541,8 @@ namespace lsp
                 __ASM_EMIT("movups      (%[p0]), %[x2]")        /* xmm0 = x0 y0 z0 w0 */
                 __ASM_EMIT("movups      (%[p1]), %[x0]")        /* xmm1 = x1 y1 z1 w1 */
                 __ASM_EMIT("movups      (%[p2]), %[x1]")        /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x2], %[x1]")          /* xmm1 = p2 - p0 = dx2 dy2 dz2 dw2 */
+                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("subps       %[x2], %[x1]")          /* xmm1 = p2 - p0 = dx2 dy2 dz2 0 */
                 VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY NW */
                 VECTOR_DPPS3("[x0]", "[x0]", "[x2]")            /* xmm0 = NX*NX + NY*NY + NZ*NZ */
                 __ASM_EMIT("sqrtss      %[x0], %[x0]")          /* xmm0 = sqrtf(NX*NX + NY*NY + NZ*NZ) */
@@ -2213,8 +1564,8 @@ namespace lsp
                 __ASM_EMIT("movups      0x00(%[pv]), %[x2]")    /* xmm0 = x0 y0 z0 w0 */
                 __ASM_EMIT("movups      0x10(%[pv]), %[x0]")    /* xmm1 = x1 y1 z1 w1 */
                 __ASM_EMIT("movups      0x20(%[pv]), %[x1]")    /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x2], %[x1]")          /* xmm1 = p2 - p0 = dx2 dy2 dz2 dw2 */
+                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("subps       %[x2], %[x1]")          /* xmm1 = p2 - p0 = dx2 dy2 dz2 0 */
                 VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY NW */
                 VECTOR_DPPS3("[x0]", "[x0]", "[x2]")            /* xmm0 = NX*NX + NY*NY + NZ*NZ */
                 __ASM_EMIT("sqrtss      %[x0], %[x0]")          /* xmm0 = sqrtf(NX*NX + NY*NY + NZ*NZ) */
@@ -2236,10 +1587,10 @@ namespace lsp
                 __ASM_EMIT("movups      (%[p0]), %[x2]")        /* xmm2 = x0 y0 z0 w0 */
                 __ASM_EMIT("movups      (%[p1]), %[x0]")        /* xmm0 = x1 y1 z1 w1 */
                 __ASM_EMIT("movups      (%[p2]), %[x1]")        /* xmm1 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x2], %[x1]")          /* xmm1 = p2 - p0 = dx2 dy2 dz2 dw2 */
-                VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY ? */
-                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY ? */
+                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("subps       %[x2], %[x1]")          /* xmm1 = p2 - p0 = dx2 dy2 dz2 0 */
+                VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY 0 */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY 0 */
                 VECTOR_DPPS3("[x0]", "[x0]", "[x2]")            /* xmm0 = NX*NX + NY*NY + NZ*NZ = W2 */
                 __ASM_EMIT("shufps      $0x09, %[x1], %[x1]")   /* xmm1 = NX NY NZ NZ */
                 __ASM_EMIT("shufps      $0x00, %[x0], %[x0]")   /* xmm0 = W2 W2 W2 W2 */
@@ -2250,7 +1601,7 @@ namespace lsp
                 __ASM_EMIT("andps       %[x3], %[x1]")          /* xmm1 = (NX/W) & [W!=0] (NY/W) & [W!=0] (NZ/W) & [W!=0] (NZ/W) & [W!=0] = nx ny nz nz */
                 __ASM_EMIT("movaps      %[x1], %[x2]")          /* xmm2 = nx ny nz nz */
                 __ASM_EMIT("movups      (%[p0]), %[x3]")        /* xmm3 = x0 y0 z0 w0 */
-                __ASM_EMIT("xorps       %[X_ISIGN], %[x1]")     /* xmm1 = -nx -ny -nz -nz */
+                __ASM_EMIT("xorps       %[X_ISIGN], %[x1]")     /* xmm1 = -nx -ny -nz nz */
                 VECTOR_DPPS3("[x1]", "[x3]", "[x3]")            /* xmm1 = -(nx*x0 + ny*y0 + nz*z0) = dw ? */
                 __ASM_EMIT("shufps      $0xf0, %[x2], %[x1]")   /* xmm1 = dw dw nz nz */
                 __ASM_EMIT("shufps      $0x24, %[x1], %[x2]")   /* xmm2 = nx ny nz dw */
@@ -2258,7 +1609,7 @@ namespace lsp
 
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
                 : [v] "r" (v), [p0] "r" (p0), [p1] "r" (p1), [p2] "r" (p2),
-                  [X_ISIGN] "m" (X_ISIGN)
+                  [X_ISIGN] "m" (X_SMASK0111)
                 : "memory"
             );
 
@@ -2274,10 +1625,10 @@ namespace lsp
                 __ASM_EMIT("movups      0x00(%[pv]), %[x2]")    /* xmm2 = x0 y0 z0 w0 */
                 __ASM_EMIT("movups      0x10(%[pv]), %[x0]")    /* xmm0 = x1 y1 z1 w1 */
                 __ASM_EMIT("movups      0x20(%[pv]), %[x1]")    /* xmm1 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x2], %[x1]")          /* xmm1 = p2 - p0 = dx2 dy2 dz2 dw2 */
-                VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY ? */
-                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY ? */
+                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 0 */
+                __ASM_EMIT("subps       %[x2], %[x1]")          /* xmm1 = p2 - p0 = dx2 dy2 dz2 0 */
+                VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY 0 */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY 0 */
                 VECTOR_DPPS3("[x0]", "[x0]", "[x2]")            /* xmm0 = NX*NX + NY*NY + NZ*NZ = W2 */
                 __ASM_EMIT("shufps      $0x09, %[x1], %[x1]")   /* xmm1 = NX NY NZ NZ */
                 __ASM_EMIT("shufps      $0x00, %[x0], %[x0]")   /* xmm0 = W2 W2 W2 W2 */
@@ -2296,7 +1647,7 @@ namespace lsp
 
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
                 : [v] "r" (v), [pv] "r" (pv),
-                  [X_ISIGN] "m" (X_ISIGN)
+                  [X_ISIGN] "m" (X_SMASK0111)
                 : "memory"
             );
 
@@ -2311,10 +1662,10 @@ namespace lsp
             (
                 __ASM_EMIT("movups      (%[p0]), %[x2]")        /* xmm2 = x0 y0 z0 w0 */
                 __ASM_EMIT("movups      (%[p1]), %[x0]")        /* xmm0 = x1 y1 z1 w1 */
-                __ASM_EMIT("movups      (%[v0]), %[x1]")        /* xmm1 = v = dx2 dy2 dz2 dw2 */
-                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 dw1 */
-                VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY ? */
-                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY ? */
+                __ASM_EMIT("movups      (%[v0]), %[x1]")        /* xmm1 = v = dx2 dy2 dz2 0 */
+                __ASM_EMIT("subps       %[x2], %[x0]")          /* xmm0 = p1 - p0 = dx1 dy1 dz1 0 */
+                VECTOR_MUL("[x0]", "[x1]", "[x2]", "[x3]")      /* xmm0 = NZ NX NY 0 */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = NZ NX NY 0 */
                 VECTOR_DPPS3("[x0]", "[x0]", "[x2]")            /* xmm0 = NX*NX + NY*NY + NZ*NZ = W2 */
                 __ASM_EMIT("shufps      $0x09, %[x1], %[x1]")   /* xmm1 = NX NY NZ NZ */
                 __ASM_EMIT("shufps      $0x00, %[x0], %[x0]")   /* xmm0 = W2 W2 W2 W2 */
@@ -2333,7 +1684,7 @@ namespace lsp
 
                 : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
                 : [v] "r" (v), [v0] "r" (v0), [p0] "r" (p0), [p1] "r" (p1),
-                  [X_ISIGN] "m" (X_ISIGN)
+                  [X_ISIGN] "m" (X_SMASK0111)
                 : "memory"
             );
 
@@ -2420,10 +1771,91 @@ namespace lsp
             );
         }
 
+        float calc_min_distance_p3(const point3d_t *sp, const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[sp]), %[x3]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      (%[p0]), %[x0]")        /* xmm0 = p0    */
+                __ASM_EMIT("movups      (%[p1]), %[x1]")        /* xmm1 = p1    */
+                __ASM_EMIT("movups      (%[p2]), %[x2]")        /* xmm2 = p2    */
+
+                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = d0 */
+                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = d1 */
+                __ASM_EMIT("mulps       %[x0], %[x0]")          /* xmm0 = d0 * d0 */
+                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = d2 */
+                __ASM_EMIT("mulps       %[x1], %[x1]")          /* xmm1 = d1 * d1 */
+                __ASM_EMIT("mulps       %[x2], %[x2]")          /* xmm2 = d2 * d2 */
+                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
+                /* xmm0 = x0 x1 x2 ? */
+                /* xmm1 = y0 y1 y2 ? */
+                /* xmm2 = z0 z1 z2 ? */
+                /* xmm3 = w0 w1 w2 ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT("addps       %[x3], %[x2]")
+                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
+                __ASM_EMIT("sqrtps      %[x0], %[x0]")          /* xmm0 = sqrtf(k0) sqrtf(k1) sqrtf(k2) ? */
+                __ASM_EMIT("movhlps     %[x0], %[x1]")          /* xmm1 = sqrtf(k2) */
+                __ASM_EMIT("unpcklps    %[x0], %[x0]")          /* xmm0 = sqrtf(k0) sqrtf(k0) sqrtf(k1) sqrtf(k1) */
+                __ASM_EMIT("movhlps     %[x0], %[x2]")          /* xmm1 = sqrtf(k2) */
+                __ASM_EMIT("minss       %[x1], %[x0]")
+                __ASM_EMIT("minss       %[x2], %[x0]")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [sp] "r" (sp), [p0] "r" (p0), [p1] "r" (p1), [p2] "r" (p2)
+                :
+            );
+
+            return x0;
+        }
+
+        float calc_min_distance_pv(const point3d_t *sp, const point3d_t *pv)
+        {
+            float x0, x1, x2, x3, x4;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[sp]), %[x3]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
+                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
+                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = p2    */
+
+                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = d0 */
+                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = d1 */
+                __ASM_EMIT("mulps       %[x0], %[x0]")          /* xmm0 = d0 * d0 */
+                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = d2 */
+                __ASM_EMIT("mulps       %[x1], %[x1]")          /* xmm1 = d1 * d1 */
+                __ASM_EMIT("mulps       %[x2], %[x2]")          /* xmm2 = d2 * d2 */
+                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
+                /* xmm0 = x0 x1 x2 ? */
+                /* xmm1 = y0 y1 y2 ? */
+                /* xmm2 = z0 z1 z2 ? */
+                /* xmm3 = w0 w1 w2 ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT("addps       %[x3], %[x2]")
+                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
+                __ASM_EMIT("sqrtps      %[x0], %[x0]")          /* xmm0 = sqrtf(k0) sqrtf(k1) sqrtf(k2) ? */
+                __ASM_EMIT("movhlps     %[x0], %[x1]")          /* xmm1 = sqrtf(k2) */
+                __ASM_EMIT("unpcklps    %[x0], %[x0]")          /* xmm0 = sqrtf(k0) sqrtf(k0) sqrtf(k1) sqrtf(k1) */
+                __ASM_EMIT("movhlps     %[x0], %[x2]")          /* xmm1 = sqrtf(k2) */
+                __ASM_EMIT("minss       %[x1], %[x0]")
+                __ASM_EMIT("minss       %[x2], %[x0]")
+
+                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [sp] "r" (sp), [pv] "r" (pv)
+                :
+            );
+
+            return x0;
+        }
+
         size_t colocation_x2_v1p2(const vector3d_t *pl, const point3d_t *p0, const point3d_t *p1)
         {
             float x0, x1, x2, x3;
-            float res[4] __lsp_aligned16;
 
             ARCH_X86_ASM
             (
@@ -2444,22 +1876,21 @@ namespace lsp
 
                 __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL ? ? */
                 __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL ? ? */
-                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
-                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
-                __ASM_EMIT("paddd       %[x1], %[x0]")
-                __ASM_EMIT("movdqa      %[x0], (%[res])")
-                __ASM_EMIT32("movl      0x00(%[res]), %[p0]")
-                __ASM_EMIT32("movl      0x04(%[res]), %[p1]")
-                __ASM_EMIT64("movl      0x00(%[res]), %k[p0]")
-                __ASM_EMIT64("movl      0x04(%[res]), %k[p1]")
+                __ASM_EMIT("andps       %[ONE], %[x0]")         /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("andps       %[ONE], %[x1]")         /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[p0]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[p0]")
+                __ASM_EMIT("shufps      $0x55, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[p1]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[p1]")
                 __ASM_EMIT("lea         (%[p0], %[p1], 4), %[p0]")
                 : [p0] "+r" (p0), [p1] "+r" (p1),
                   [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
                 : [pl] "r" (pl),
-                  [res] "r" (res),
                   [PTOL] "m" (X_3D_TOLERANCE),
                   [MTOL] "m" (X_3D_MTOLERANCE),
-                  [IONE] "m" (IONE)
+                  [ONE] "m" (ONE)
                 : "cc"
             );
 
@@ -2469,7 +1900,6 @@ namespace lsp
         size_t colocation_x2_v1pv(const vector3d_t *pl, const point3d_t *pv)
         {
             float x0, x1, x2, x3;
-            float res[4] __lsp_aligned16;
 
             ARCH_X86_ASM
             (
@@ -2490,21 +1920,21 @@ namespace lsp
 
                 __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL ? ? */
                 __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL ? ? */
-                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
-                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
-                __ASM_EMIT("paddd       %[x1], %[x0]")
-                __ASM_EMIT("movdqa      %[x0], (%[res])")
-                __ASM_EMIT32("movl      0x00(%[res]), %[pl]")
-                __ASM_EMIT32("movl      0x04(%[res]), %[pv]")
-                __ASM_EMIT64("movl      0x00(%[res]), %k[pl]")
-                __ASM_EMIT64("movl      0x04(%[res]), %k[pv]")
+                __ASM_EMIT("andps       %[ONE], %[x0]")         /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("andps       %[ONE], %[x1]")         /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[pl]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[pl]")
+                __ASM_EMIT("shufps      $0x55, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[pv]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[pv]")
                 __ASM_EMIT("lea         (%[pl], %[pv], 4), %[pl]")
+
                 : [pl] "+r" (pl), [pv] "+r" (pv),
                   [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
-                : [res] "r" (res),
-                  [PTOL] "m" (X_3D_TOLERANCE),
+                : [PTOL] "m" (X_3D_TOLERANCE),
                   [MTOL] "m" (X_3D_MTOLERANCE),
-                  [IONE] "m" (IONE)
+                  [ONE] "m" (ONE)
                 : "cc"
             );
 
@@ -2514,7 +1944,6 @@ namespace lsp
         size_t colocation_x3_v1p3(const vector3d_t *pl, const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
         {
             float x0, x1, x2, x3, x4;
-            float res[4] __lsp_aligned16;
 
             ARCH_X86_ASM
             (
@@ -2537,26 +1966,26 @@ namespace lsp
                 __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
                 __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
                 __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
-                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
-                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
-                __ASM_EMIT("paddd       %[x1], %[x0]")
-                __ASM_EMIT("movdqa      %[x0], (%[res])")
-                __ASM_EMIT32("movl      0x00(%[res]), %[p0]")
-                __ASM_EMIT32("movl      0x04(%[res]), %[p1]")
-                __ASM_EMIT32("movl      0x08(%[res]), %[p2]")
-                __ASM_EMIT64("movl      0x00(%[res]), %k[p0]")
-                __ASM_EMIT64("movl      0x04(%[res]), %k[p1]")
-                __ASM_EMIT64("movl      0x08(%[res]), %k[p2]")
+                __ASM_EMIT("andps       %[ONE], %[x0]")         /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("andps       %[ONE], %[x1]")         /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[p0]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[p0]")
+                __ASM_EMIT("shufps      $0x39, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[p1]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[p1]")
+                __ASM_EMIT("shufps      $0x39, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[p2]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[p2]")
                 __ASM_EMIT("lea         (%[p1], %[p2], 4), %[p1]")
                 __ASM_EMIT("lea         (%[p0], %[p1], 4), %[p0]")
                 : [p0] "+r" (p0), [p1] "+r" (p1), [p2] "+r" (p2),
                   [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
                   [x4] "=&x" (x4)
                 : [pl] "r" (pl),
-                  [res] "r" (res),
                   [PTOL] "m" (X_3D_TOLERANCE),
                   [MTOL] "m" (X_3D_MTOLERANCE),
-                  [IONE] "m" (IONE)
+                  [ONE] "m" (ONE)
                 : "cc"
             );
 
@@ -2566,7 +1995,6 @@ namespace lsp
         size_t colocation_x3_v1pv(const vector3d_t *pl, const point3d_t *pv)
         {
             float x0, x1, x2, x3, x4;
-            float res[4] __lsp_aligned16;
             size_t pt;
 
             ARCH_X86_ASM
@@ -2590,25 +2018,25 @@ namespace lsp
                 __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
                 __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
                 __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
-                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
-                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
-                __ASM_EMIT("paddd       %[x1], %[x0]")
-                __ASM_EMIT("movdqa      %[x0], (%[res])")
-                __ASM_EMIT32("movl      0x00(%[res]), %[pl]")
-                __ASM_EMIT32("movl      0x04(%[res]), %[pv]")
-                __ASM_EMIT32("movl      0x08(%[res]), %[pt]")
-                __ASM_EMIT64("movl      0x00(%[res]), %k[pl]")
-                __ASM_EMIT64("movl      0x04(%[res]), %k[pv]")
-                __ASM_EMIT64("movl      0x08(%[res]), %k[pt]")
+                __ASM_EMIT("andps       %[ONE], %[x0]")         /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("andps       %[ONE], %[x1]")         /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[pl]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[pl]")
+                __ASM_EMIT("shufps      $0x39, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[pv]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[pv]")
+                __ASM_EMIT("shufps      $0x39, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[pt]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[pt]")
                 __ASM_EMIT("lea         (%[pv], %[pt], 4), %[pt]")
                 __ASM_EMIT("lea         (%[pl], %[pt], 4), %[pt]")
                 : [pl] "+r" (pl), [pv] "+r" (pv), [pt] "=&r" (pt),
                   [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
                   [x4] "=&x" (x4)
-                : [res] "r" (res),
-                  [PTOL] "m" (X_3D_TOLERANCE),
+                : [PTOL] "m" (X_3D_TOLERANCE),
                   [MTOL] "m" (X_3D_MTOLERANCE),
-                  [IONE] "m" (IONE)
+                  [ONE] "m" (ONE)
                 : "cc"
             );
 
@@ -2618,7 +2046,6 @@ namespace lsp
         size_t colocation_x3_v3p1(const vector3d_t *v0, const vector3d_t *v1, const vector3d_t *v2, const point3d_t *p)
         {
             float x0, x1, x2, x3, x4;
-            float res[4] __lsp_aligned16;
 
             ARCH_X86_ASM
             (
@@ -2641,16 +2068,17 @@ namespace lsp
                 __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
                 __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
                 __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
-                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
-                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
-                __ASM_EMIT("paddd       %[x1], %[x0]")
-                __ASM_EMIT("movdqa      %[x0], (%[res])")
-                __ASM_EMIT32("movl      0x00(%[res]), %[v0]")
-                __ASM_EMIT32("movl      0x04(%[res]), %[v1]")
-                __ASM_EMIT32("movl      0x08(%[res]), %[v2]")
-                __ASM_EMIT64("movl      0x00(%[res]), %k[v0]")
-                __ASM_EMIT64("movl      0x04(%[res]), %k[v1]")
-                __ASM_EMIT64("movl      0x08(%[res]), %k[v2]")
+                __ASM_EMIT("andps       %[ONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("andps       %[ONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[v0]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[v0]")
+                __ASM_EMIT("shufps      $0x39, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[v1]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[v1]")
+                __ASM_EMIT("shufps      $0x39, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[v2]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[v2]")
                 __ASM_EMIT("lea         (%[v1], %[v2], 4), %[v1]")
                 __ASM_EMIT("lea         (%[v0], %[v1], 4), %[v0]")
 
@@ -2658,10 +2086,9 @@ namespace lsp
                   [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
                   [x4] "=&x" (x4)
                 : [p] "r" (p),
-                  [res] "r" (res),
                   [PTOL] "m" (X_3D_TOLERANCE),
                   [MTOL] "m" (X_3D_MTOLERANCE),
-                  [IONE] "m" (IONE)
+                  [ONE] "m" (ONE)
                 : "cc"
             );
 
@@ -2671,7 +2098,6 @@ namespace lsp
         size_t colocation_x3_vvp1(const vector3d_t *vv, const point3d_t *p)
         {
             float x0, x1, x2, x3, x4;
-            float res[4] __lsp_aligned16;
             size_t pt;
 
             ARCH_X86_ASM
@@ -2695,800 +2121,33 @@ namespace lsp
                 __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
                 __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
                 __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
-                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
-                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
-                __ASM_EMIT("paddd       %[x1], %[x0]")
-                __ASM_EMIT("movdqa      %[x0], (%[res])")
-                __ASM_EMIT32("movl      0x00(%[res]), %[vv]")
-                __ASM_EMIT32("movl      0x04(%[res]), %[p]")
-                __ASM_EMIT32("movl      0x08(%[res]), %[pt]")
-                __ASM_EMIT64("movl      0x00(%[res]), %k[vv]")
-                __ASM_EMIT64("movl      0x04(%[res]), %k[p]")
-                __ASM_EMIT64("movl      0x08(%[res]), %k[pt]")
+                __ASM_EMIT("andps       %[ONE], %[x0]")         /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("andps       %[ONE], %[x1]")         /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[vv]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[vv]")
+                __ASM_EMIT("shufps      $0x39, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[p]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[p]")
+                __ASM_EMIT("shufps      $0x39, %[x0], %[x0]")
+                __ASM_EMIT32("cvttss2si %[x0], %[pt]")
+                __ASM_EMIT64("cvttss2si %[x0], %k[pt]")
                 __ASM_EMIT("lea         (%[p], %[pt], 4), %[pt]")
                 __ASM_EMIT("lea         (%[vv], %[pt], 4), %[pt]")
 
                 : [vv] "+r" (vv), [p] "+r" (p), [pt] "=&r" (pt),
                   [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
                   [x4] "=&x" (x4)
-                : [res] "r" (res),
-                  [PTOL] "m" (X_3D_TOLERANCE),
+                : [PTOL] "m" (X_3D_TOLERANCE),
                   [MTOL] "m" (X_3D_MTOLERANCE),
-                  [IONE] "m" (IONE)
+                  [ONE] "m" (ONE)
                 : "cc"
             );
 
             return pt;
         }
-
-        float calc_min_distance_p3(const point3d_t *sp, const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
-        {
-            float x0, x1, x2, x3, x4;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      (%[sp]), %[x3]")        /* xmm3 = pl    */
-                __ASM_EMIT("movups      (%[p0]), %[x0]")        /* xmm0 = p0    */
-                __ASM_EMIT("movups      (%[p1]), %[x1]")        /* xmm1 = p1    */
-                __ASM_EMIT("movups      (%[p2]), %[x2]")        /* xmm2 = p2    */
-
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = d0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = d1 */
-                __ASM_EMIT("mulps       %[x0], %[x0]")          /* xmm0 = d0 * d0 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = d2 */
-                __ASM_EMIT("mulps       %[x1], %[x1]")          /* xmm1 = d1 * d1 */
-                __ASM_EMIT("mulps       %[x2], %[x2]")          /* xmm2 = d2 * d2 */
-                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
-                /* xmm0 = x0 x1 x2 ? */
-                /* xmm1 = y0 y1 y2 ? */
-                /* xmm2 = z0 z1 z2 ? */
-                /* xmm3 = w0 w1 w2 ? */
-                __ASM_EMIT("addps       %[x1], %[x0]")
-                __ASM_EMIT("addps       %[x3], %[x2]")
-                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
-                __ASM_EMIT("sqrtps      %[x0], %[x0]")          /* xmm0 = sqrtf(k0) sqrtf(k1) sqrtf(k2) ? */
-                __ASM_EMIT("movhlps     %[x0], %[x1]")          /* xmm1 = sqrtf(k2) */
-                __ASM_EMIT("unpcklps    %[x0], %[x0]")          /* xmm0 = sqrtf(k0) sqrtf(k0) sqrtf(k1) sqrtf(k1) */
-                __ASM_EMIT("movhlps     %[x0], %[x2]")          /* xmm1 = sqrtf(k2) */
-                __ASM_EMIT("minss       %[x1], %[x0]")
-                __ASM_EMIT("minss       %[x2], %[x0]")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
-                : [sp] "r" (sp), [p0] "r" (p0), [p1] "r" (p1), [p2] "r" (p2)
-                :
-            );
-
-            return x0;
-        }
-
-        float calc_min_distance_pv(const point3d_t *sp, const point3d_t *pv)
-        {
-            float x0, x1, x2, x3, x4;
-
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      (%[sp]), %[x3]")        /* xmm3 = pl    */
-                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
-                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
-                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = p2    */
-
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = d0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = d1 */
-                __ASM_EMIT("mulps       %[x0], %[x0]")          /* xmm0 = d0 * d0 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = d2 */
-                __ASM_EMIT("mulps       %[x1], %[x1]")          /* xmm1 = d1 * d1 */
-                __ASM_EMIT("mulps       %[x2], %[x2]")          /* xmm2 = d2 * d2 */
-                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
-                /* xmm0 = x0 x1 x2 ? */
-                /* xmm1 = y0 y1 y2 ? */
-                /* xmm2 = z0 z1 z2 ? */
-                /* xmm3 = w0 w1 w2 ? */
-                __ASM_EMIT("addps       %[x1], %[x0]")
-                __ASM_EMIT("addps       %[x3], %[x2]")
-                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
-                __ASM_EMIT("sqrtps      %[x0], %[x0]")          /* xmm0 = sqrtf(k0) sqrtf(k1) sqrtf(k2) ? */
-                __ASM_EMIT("movhlps     %[x0], %[x1]")          /* xmm1 = sqrtf(k2) */
-                __ASM_EMIT("unpcklps    %[x0], %[x0]")          /* xmm0 = sqrtf(k0) sqrtf(k0) sqrtf(k1) sqrtf(k1) */
-                __ASM_EMIT("movhlps     %[x0], %[x2]")          /* xmm1 = sqrtf(k2) */
-                __ASM_EMIT("minss       %[x1], %[x0]")
-                __ASM_EMIT("minss       %[x2], %[x0]")
-
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
-                : [sp] "r" (sp), [pv] "r" (pv)
-                :
-            );
-
-            return x0;
-        }
-
-        void split_triangle_raw(
-                raw_triangle_t *out,
-                size_t *n_out,
-                raw_triangle_t *in,
-                size_t *n_in,
-                const vector3d_t *pl,
-                const raw_triangle_t *pv
-            )
-        {
-            float    x0, x1, x2, x3, x4, x5, x6, x7;
-            float    k[4] __lsp_aligned16;
-            size_t   t0;
-
-            in     += *n_in;
-            out    += *n_out;
-
-            // Estimate co-location of triangle and point
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      (%[pl]), %[x3]")        /* xmm3 = pl    */
-                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
-                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
-                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = p2    */
-
-                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = p0 * pl */
-                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = p1 * pl */
-                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = p2 * pl */
-                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
-
-                __ASM_EMIT("addps       %[x1], %[x0]")
-                __ASM_EMIT("addps       %[x3], %[x2]")
-                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
-                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
-                __ASM_EMIT("movaps      %[x0], (%[k])")         /* *k   = xmm0 */
-                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
-                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
-                __ASM_EMIT("pand        %[ICULL3], %[x0]")      /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
-                __ASM_EMIT("pand        %[ICULL3], %[x1]")      /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
-                __ASM_EMIT("paddd       %[x1], %[x0]")          /* xmm0 = x0 x1 x2 0 */
-                __ASM_EMIT("movdqa      %[x0], %[x2]")          /* xmm2 = x0 x1 x2 0 */
-                __ASM_EMIT("movdqa      %[x0], %[x1]")          /* xmm1 = x0 x1 x2 0 */
-                __ASM_EMIT("psrldq      $8, %[x2]")             /* xmm2 = x2 0 0 0 */
-                __ASM_EMIT("psrldq      $4, %[x1]")             /* xmm1 = x1 x2 0 0 */
-                __ASM_EMIT("por         %[x2], %[x0]")
-                __ASM_EMIT("por         %[x1], %[x0]")
-                __ASM_EMIT32("movd      %[x0], %[t0]")
-                __ASM_EMIT64("movd      %[x0], %k[t0]")
-                : [t0] "=&r" (t0),
-                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
-                : [pl] "r" (pl), [pv] "r" (pv),
-                  [k] "r" (k),
-                  [PTOL] "m" (X_3D_TOLERANCE),
-                  [MTOL] "m" (X_3D_MTOLERANCE),
-                  [ICULL3] "m" (ICULL3)
-                : "cc"
-            );
-
-            #define STR_COPY_TO(tgt) \
-                ARCH_X86_ASM( \
-                    __ASM_EMIT("movups      0x00(%[src]), %[x0]") \
-                    __ASM_EMIT("movups      0x10(%[src]), %[x1]") \
-                    __ASM_EMIT("movups      0x20(%[src]), %[x2]") \
-                    __ASM_EMIT("movups      %[x0], 0x00(%[dst])") \
-                    __ASM_EMIT("movups      %[x1], 0x10(%[dst])") \
-                    __ASM_EMIT("movups      %[x2], 0x20(%[dst])") \
-                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2) \
-                    : [dst] "r" (tgt), \
-                      [src] "r" (pv) \
-                    : "cc", "memory" \
-                );
-
-            #define STR_SPLIT_1P(off0, off1, koff, store) \
-                ARCH_X86_ASM( \
-                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
-                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x1]")      /* xmm1 = p1 = lx1 ly1 lz1 1 */ \
-                    __ASM_EMIT("movups      (%[pl]), %[x2]")                /* xmm2 = pl = nx ny nz nw */ \
-                    \
-                    __ASM_EMIT("subps       %[x0], %[x1]")                  /* xmm1 = d = p1 - p0 = dx dy dz 0 */ \
-                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x3]")       /* xmm3 = k 0 0 0 */ \
-                    __ASM_EMIT("mulps       %[x1], %[x2]")                  /* xmm2 = dx*nx dy*ny dz*nz 0 */ \
-                    __ASM_EMIT("shufps      $0x00, %[x3], %[x3]")           /* xmm3 = k k k k */ \
-                    __ASM_EMIT("movhlps     %[x2], %[x4]")                  /* xmm4 = dz*nz 0 ? ? */ \
-                    __ASM_EMIT("addps       %[x4], %[x2]")                  /* xmm2 = dx*nx+dz*nz dy*ny ? ? */ \
-                    __ASM_EMIT("unpcklps    %[x2], %[x2]")                  /* xmm2 = dx*nx+dz*nz dx*nx+dz*nz dy*ny dy*ny */ \
-                    __ASM_EMIT("mulps       %[x3], %[x1]")                  /* xmm1 = k*dx k*dy k*dz 0 */ \
-                    __ASM_EMIT("movhlps     %[x2], %[x4]")                  /* xmm4 = dy*ny dy*ny ? ? */ \
-                    __ASM_EMIT("addps       %[x4], %[x2]")                  /* xmm2 = dx*nx+dy*ny+dw*nw dx*nx+dy*ny+dw*nw ? ? = b b ? ? */ \
-                    __ASM_EMIT("unpcklps    %[x2], %[x2]")                  /* xmm2 = b b b b */ \
-                    __ASM_EMIT("divps       %[x2], %[x1]")                  /* xmm1 = k*dx/b k*dy/b k*dz/b 0 */ \
-                    __ASM_EMIT("subps       %[x1], %[x0]")                  /* xmm0 = lx0-k*dx/b ly0-k*dy/b lz0-k*dz/b 1 */ \
-                    \
-                    store \
-                    \
-                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4) \
-                    : [st] "r" (pv), [pl] "r" (pl), [out] "r" (out), [in] "r" (in), \
-                      [k] "r" (k) \
-                    : "cc", "memory" \
-                );
-
-            #define STR_SPLIT_2P(off0, off1, off2, koff, store) \
-                ARCH_X86_ASM( \
-                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
-                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x2]")      /* xmm2 = p1 = lx1 ly1 lz1 1 */ \
-                    __ASM_EMIT("movups      0x" off2 "(%[st]), %[x3]")      /* xmm3 = p2 = lx2 ly2 lz2 1 */ \
-                    __ASM_EMIT("movups      (%[pl]), %[x4]")                /* xmm4 = pl = nx ny nz nw */ \
-                    \
-                    __ASM_EMIT("movaps      %[x0], %[x1]")                  /* xmm1 = pl = nx ny nz nw */ \
-                    __ASM_EMIT("movaps      %[x4], %[x5]")                  /* xmm5 = pl = nx ny nz nw */ \
-                    __ASM_EMIT("subps       %[x0], %[x2]")                  /* xmm2 = d1 = p1 - p0 = dx1 dy1 dz1 0 */ \
-                    __ASM_EMIT("subps       %[x1], %[x3]")                  /* xmm3 = d2 = p2 - p0 = dx2 dy2 dz2 0 */ \
-                    __ASM_EMIT("mulps       %[x2], %[x4]")                  /* xmm4 = dx1*nx dy1*ny dz1*nz 0 */ \
-                    __ASM_EMIT("mulps       %[x3], %[x5]")                  /* xmm5 = dx2*nx dy2*ny dz2*nz 0 */ \
-                    __ASM_EMIT("movhlps     %[x4], %[x6]")                  /* xmm6 = dz1*nz 0 ? ? */ \
-                    __ASM_EMIT("movhlps     %[x5], %[x7]")                  /* xmm7 = dz2*nz 0 ? ? */ \
-                    __ASM_EMIT("addps       %[x6], %[x4]")                  /* xmm4 = dx1*nx+dz1*nz dy1*ny ? ? */ \
-                    __ASM_EMIT("addps       %[x7], %[x5]")                  /* xmm5 = dx1*nx+dz1*nz dy1*ny ? ? */ \
-                    __ASM_EMIT("unpcklps    %[x4], %[x4]")                  /* xmm4 = dx1*nx+dz1*nz dx1*nx+dz1*nz dy1*ny dy1*ny */ \
-                    __ASM_EMIT("unpcklps    %[x5], %[x5]")                  /* xmm5 = dx2*nx+dz2*nz dx2*nx+dz2*nz dy2*ny dy2*ny */ \
-                    __ASM_EMIT("movhlps     %[x4], %[x6]")                  /* xmm6 = dy1*ny dy1*ny ? ? */ \
-                    __ASM_EMIT("movhlps     %[x5], %[x7]")                  /* xmm7 = dy2*ny dy2*ny ? ? */ \
-                    __ASM_EMIT("addps       %[x6], %[x4]")                  /* xmm4 = dx1*nx+dy1*ny+dz1*nz dx1*nx+dy1*ny+dz1*nz ? ? = b1 b1 ? ? */ \
-                    __ASM_EMIT("addps       %[x7], %[x5]")                  /* xmm5 = dx2*nx+dy2*ny+dz2*nz dx2*nx+dy2*ny+dz2*nz ? ? = b2 b2 ? ? */ \
-                    __ASM_EMIT("unpcklps    %[x4], %[x4]")                  /* xmm4 = b1 b1 b1 b1 */ \
-                    __ASM_EMIT("unpcklps    %[x5], %[x5]")                  /* xmm5 = b2 b2 b2 b2 */ \
-                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x6]")       /* xmm6 = k */ \
-                    __ASM_EMIT("divps       %[x4], %[x2]")                  /* xmm2 = dx1/b1 dy1/b1 dz1/b1 0 */ \
-                    __ASM_EMIT("shufps      $0x00, %[x6], %[x6]")           /* xmm6 = k k k k */ \
-                    __ASM_EMIT("divps       %[x5], %[x3]")                  /* xmm3 = dx2/b2 dy2/b2 dz2/b2 0 */ \
-                    __ASM_EMIT("mulps       %[x6], %[x2]")                  /* xmm2 = k*dx1/b1 k*dy1/b1 k*dz1/b1 0 */ \
-                    __ASM_EMIT("mulps       %[x6], %[x3]")                  /* xmm3 = k*dx2/b2 k*dy2/b2 k*dz2/b2 0 */ \
-                    __ASM_EMIT("subps       %[x2], %[x0]")                  /* xmm0 = lx0-k*dx1/b1 ly0-k*dy1/b1 lz0-k*dz1/b1 1 */ \
-                    __ASM_EMIT("subps       %[x3], %[x1]")                  /* xmm1 = lx1-k*dx2/b2 ly1-k*dy2/b2 lz1-k*dz2/b2 1 */ \
-                    \
-                    store \
-                    \
-                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), \
-                      [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7) \
-                    : [st] "r" (pv), [pl] "r" (pl), [out] "r" (out), [in] "r" (in), \
-                      [k] "r" (k) \
-                    : "cc", "memory" \
-                );
-
-            switch (t0)
-            {
-                // 0 intersections, triangle is above
-                case 0x00:  // 0 0 0
-                case 0x01:  // 0 0 1
-                case 0x04:  // 0 1 0
-                case 0x05:  // 0 1 1
-                case 0x10:  // 1 0 0
-                case 0x11:  // 1 0 1
-                case 0x14:  // 1 1 0
-                case 0x15:  // 1 1 1
-                    STR_COPY_TO(out);
-                    ++(*n_out);
-                    break;
-
-                // 0 intersections, triangle is below
-                case 0x16:  // 1 1 2
-                case 0x19:  // 1 2 1
-                case 0x1a:  // 1 2 2
-                case 0x25:  // 2 1 1
-                case 0x26:  // 2 1 2
-                case 0x29:  // 2 2 1
-                case 0x2a:  // 2 2 2
-                    STR_COPY_TO(in);
-                    ++(*n_in);
-                    break;
-
-                // 1 intersection, 1 triangle above, 1 triangle below, counter-clockwise
-                case 0x06:  // 0 1 2
-                    STR_SPLIT_1P("00", "20", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x3], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
-                    );
-                    ++(*n_out); ++(*n_in);
-                    break;
-                case 0x21:  // 2 0 1
-                    STR_SPLIT_1P("00", "10", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
-                    );
-                    ++(*n_out); ++(*n_in);
-                    break;
-                case 0x18:  // 1 2 0
-                    STR_SPLIT_1P("10", "20", "04",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x3], 0x20(%[out])")
-                    );
-                    ++(*n_out); ++(*n_in);
-                    break;
-
-                // 1 intersection, 1 triangle above, 1 triangle below, clockwise
-                case 0x24:  // 2 1 0
-                    STR_SPLIT_1P("00", "20", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x2], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
-                    );
-                    ++(*n_out); ++(*n_in);
-                    break;
-                case 0x12:  // 1 0 2
-                    STR_SPLIT_1P("00", "10", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x3], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
-                    );
-                    ++(*n_out); ++(*n_in);
-                    break;
-                case 0x09:  // 0 2 1
-                    STR_SPLIT_1P("10", "20", "04",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
-                    );
-                    ++(*n_out); ++(*n_in);
-                    break;
-
-                // 2 intersections, 1 triangle below, 2 triangles above
-                case 0x02:  // 0 0 2
-                    STR_SPLIT_2P("00", "10", "20", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
-                        __ASM_EMIT("movups      %[x4], 0x30(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x40(%[out])")
-                        __ASM_EMIT("movups      %[x3], 0x50(%[out])")
-                    );
-                    (*n_out) += 2; ++(*n_in);
-                    break;
-                case 0x08:  // 0 2 0
-                    STR_SPLIT_2P("10", "00", "20", "04",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x4], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
-                        __ASM_EMIT("movups      %[x2], 0x30(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x40(%[out])")
-                        __ASM_EMIT("movups      %[x4], 0x50(%[out])")
-                    );
-                    (*n_out) += 2; ++(*n_in);
-                    break;
-                case 0x20:  // 2 0 0
-                    STR_SPLIT_2P("20", "00", "10", "08",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
-                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
-                        __ASM_EMIT("movups      %[x3], 0x30(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x40(%[out])")
-                        __ASM_EMIT("movups      %[x2], 0x50(%[out])")
-                    );
-                    (*n_out) += 2; ++(*n_in);
-                    break;
-
-                // 2 intersections, 1 triangle above, 2 triangles below
-                case 0x28:  // 2 2 0
-                    STR_SPLIT_2P("00", "10", "20", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x4], 0x30(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x50(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
-                    );
-                    ++(*n_out); (*n_in) += 2;
-                    break;
-
-                case 0x22:  // 2 0 2
-                    STR_SPLIT_2P("10", "00", "20", "04",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
-                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x30(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x40(%[in])")
-                        __ASM_EMIT("movups      %[x4], 0x50(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
-                    );
-                    ++(*n_out); (*n_in) += 2;
-                    break;
-
-                case 0x0a:  // 0 2 2
-                    STR_SPLIT_2P("20", "00", "10", "08",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x30(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x50(%[in])")
-                        __ASM_EMIT("movups      %[x4], 0x00(%[out])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
-                    );
-                    ++(*n_out); (*n_in) += 2;
-                    break;
-
-                default:
-                    break;
-            }
-
-            #undef STR_COPY_TO
-            #undef STR_SPLIT_1P
-            #undef STR_SPLIT_2P
-        }
-
-        void cull_triangle_raw(
-                raw_triangle_t *in,
-                size_t *n_in,
-                const vector3d_t *pl,
-                const raw_triangle_t *pv
-            )
-        {
-            float    x0, x1, x2, x3, x4, x5, x6, x7;
-            float    k[4] __lsp_aligned16;
-            size_t   t0;
-
-            in     += *n_in;
-
-            // Estimate co-location of triangle and point
-            ARCH_X86_ASM
-            (
-                __ASM_EMIT("movups      (%[pl]), %[x3]")        /* xmm3 = pl    */
-                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
-                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
-                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = p2    */
-
-                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = p0 * pl */
-                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = p1 * pl */
-                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = p2 * pl */
-                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
-
-                __ASM_EMIT("addps       %[x1], %[x0]")
-                __ASM_EMIT("addps       %[x3], %[x2]")
-                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
-                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
-                __ASM_EMIT("movaps      %[x0], (%[k])")         /* *k   = xmm0 */
-                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
-                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
-                __ASM_EMIT("pand        %[ICULL3], %[x0]")      /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
-                __ASM_EMIT("pand        %[ICULL3], %[x1]")      /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
-                __ASM_EMIT("paddd       %[x1], %[x0]")          /* xmm0 = x0 x1 x2 0 */
-                __ASM_EMIT("movdqa      %[x0], %[x2]")          /* xmm2 = x0 x1 x2 0 */
-                __ASM_EMIT("movdqa      %[x0], %[x1]")          /* xmm1 = x0 x1 x2 0 */
-                __ASM_EMIT("psrldq      $8, %[x2]")             /* xmm2 = x2 0 0 0 */
-                __ASM_EMIT("psrldq      $4, %[x1]")             /* xmm1 = x1 x2 0 0 */
-                __ASM_EMIT("por         %[x2], %[x0]")
-                __ASM_EMIT("por         %[x1], %[x0]")
-                __ASM_EMIT32("movd      %[x0], %[t0]")
-                __ASM_EMIT64("movd      %[x0], %k[t0]")
-                : [t0] "=&r" (t0),
-                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
-                : [pl] "r" (pl), [pv] "r" (pv),
-                  [k] "r" (k),
-                  [PTOL] "m" (X_3D_TOLERANCE),
-                  [MTOL] "m" (X_3D_MTOLERANCE),
-                  [ICULL3] "m" (ICULL3)
-                : "cc"
-            );
-
-            #define STR_COPY_TO(tgt) \
-                ARCH_X86_ASM( \
-                    __ASM_EMIT("movups      0x00(%[src]), %[x0]") \
-                    __ASM_EMIT("movups      0x10(%[src]), %[x1]") \
-                    __ASM_EMIT("movups      0x20(%[src]), %[x2]") \
-                    __ASM_EMIT("movups      %[x0], 0x00(%[dst])") \
-                    __ASM_EMIT("movups      %[x1], 0x10(%[dst])") \
-                    __ASM_EMIT("movups      %[x2], 0x20(%[dst])") \
-                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2) \
-                    : [dst] "r" (tgt), \
-                      [src] "r" (pv) \
-                    : "cc", "memory" \
-                );
-
-            #define STR_SPLIT_1P(off0, off1, koff, store) \
-                ARCH_X86_ASM( \
-                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
-                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x1]")      /* xmm1 = p1 = lx1 ly1 lz1 1 */ \
-                    __ASM_EMIT("movups      (%[pl]), %[x2]")                /* xmm2 = pl = nx ny nz nw */ \
-                    \
-                    __ASM_EMIT("subps       %[x0], %[x1]")                  /* xmm1 = d = p1 - p0 = dx dy dz 0 */ \
-                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x3]")       /* xmm3 = k 0 0 0 */ \
-                    __ASM_EMIT("mulps       %[x1], %[x2]")                  /* xmm2 = dx*nx dy*ny dz*nz 0 */ \
-                    __ASM_EMIT("shufps      $0x00, %[x3], %[x3]")           /* xmm3 = k k k k */ \
-                    __ASM_EMIT("movhlps     %[x2], %[x4]")                  /* xmm4 = dz*nz 0 ? ? */ \
-                    __ASM_EMIT("addps       %[x4], %[x2]")                  /* xmm2 = dx*nx+dz*nz dy*ny ? ? */ \
-                    __ASM_EMIT("unpcklps    %[x2], %[x2]")                  /* xmm2 = dx*nx+dz*nz dx*nx+dz*nz dy*ny dy*ny */ \
-                    __ASM_EMIT("mulps       %[x3], %[x1]")                  /* xmm1 = k*dx k*dy k*dz 0 */ \
-                    __ASM_EMIT("movhlps     %[x2], %[x4]")                  /* xmm4 = dy*ny dy*ny ? ? */ \
-                    __ASM_EMIT("addps       %[x4], %[x2]")                  /* xmm2 = dx*nx+dy*ny+dw*nw dx*nx+dy*ny+dw*nw ? ? = b b ? ? */ \
-                    __ASM_EMIT("unpcklps    %[x2], %[x2]")                  /* xmm2 = b b b b */ \
-                    __ASM_EMIT("divps       %[x2], %[x1]")                  /* xmm1 = k*dx/b k*dy/b k*dz/b 0 */ \
-                    __ASM_EMIT("subps       %[x1], %[x0]")                  /* xmm0 = lx0-k*dx/b ly0-k*dy/b lz0-k*dz/b 1 */ \
-                    \
-                    store \
-                    \
-                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4) \
-                    : [st] "r" (pv), [pl] "r" (pl), [in] "r" (in), \
-                      [k] "r" (k) \
-                    : "cc", "memory" \
-                );
-
-            #define STR_SPLIT_2P(off0, off1, off2, koff, store) \
-                ARCH_X86_ASM( \
-                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
-                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x2]")      /* xmm2 = p1 = lx1 ly1 lz1 1 */ \
-                    __ASM_EMIT("movups      0x" off2 "(%[st]), %[x3]")      /* xmm3 = p2 = lx2 ly2 lz2 1 */ \
-                    __ASM_EMIT("movups      (%[pl]), %[x4]")                /* xmm4 = pl = nx ny nz nw */ \
-                    \
-                    __ASM_EMIT("movaps      %[x0], %[x1]")                  /* xmm1 = pl = nx ny nz nw */ \
-                    __ASM_EMIT("movaps      %[x4], %[x5]")                  /* xmm5 = pl = nx ny nz nw */ \
-                    __ASM_EMIT("subps       %[x0], %[x2]")                  /* xmm2 = d1 = p1 - p0 = dx1 dy1 dz1 0 */ \
-                    __ASM_EMIT("subps       %[x1], %[x3]")                  /* xmm3 = d2 = p2 - p0 = dx2 dy2 dz2 0 */ \
-                    __ASM_EMIT("mulps       %[x2], %[x4]")                  /* xmm4 = dx1*nx dy1*ny dz1*nz 0 */ \
-                    __ASM_EMIT("mulps       %[x3], %[x5]")                  /* xmm5 = dx2*nx dy2*ny dz2*nz 0 */ \
-                    __ASM_EMIT("movhlps     %[x4], %[x6]")                  /* xmm6 = dz1*nz 0 ? ? */ \
-                    __ASM_EMIT("movhlps     %[x5], %[x7]")                  /* xmm7 = dz2*nz 0 ? ? */ \
-                    __ASM_EMIT("addps       %[x6], %[x4]")                  /* xmm4 = dx1*nx+dz1*nz dy1*ny ? ? */ \
-                    __ASM_EMIT("addps       %[x7], %[x5]")                  /* xmm5 = dx1*nx+dz1*nz dy1*ny ? ? */ \
-                    __ASM_EMIT("unpcklps    %[x4], %[x4]")                  /* xmm4 = dx1*nx+dz1*nz dx1*nx+dz1*nz dy1*ny dy1*ny */ \
-                    __ASM_EMIT("unpcklps    %[x5], %[x5]")                  /* xmm5 = dx2*nx+dz2*nz dx2*nx+dz2*nz dy2*ny dy2*ny */ \
-                    __ASM_EMIT("movhlps     %[x4], %[x6]")                  /* xmm6 = dy1*ny dy1*ny ? ? */ \
-                    __ASM_EMIT("movhlps     %[x5], %[x7]")                  /* xmm7 = dy2*ny dy2*ny ? ? */ \
-                    __ASM_EMIT("addps       %[x6], %[x4]")                  /* xmm4 = dx1*nx+dy1*ny+dz1*nz dx1*nx+dy1*ny+dz1*nz ? ? = b1 b1 ? ? */ \
-                    __ASM_EMIT("addps       %[x7], %[x5]")                  /* xmm5 = dx2*nx+dy2*ny+dz2*nz dx2*nx+dy2*ny+dz2*nz ? ? = b2 b2 ? ? */ \
-                    __ASM_EMIT("unpcklps    %[x4], %[x4]")                  /* xmm4 = b1 b1 b1 b1 */ \
-                    __ASM_EMIT("unpcklps    %[x5], %[x5]")                  /* xmm5 = b2 b2 b2 b2 */ \
-                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x6]")       /* xmm6 = k */ \
-                    __ASM_EMIT("divps       %[x4], %[x2]")                  /* xmm2 = dx1/b1 dy1/b1 dz1/b1 0 */ \
-                    __ASM_EMIT("shufps      $0x00, %[x6], %[x6]")           /* xmm6 = k k k k */ \
-                    __ASM_EMIT("divps       %[x5], %[x3]")                  /* xmm3 = dx2/b2 dy2/b2 dz2/b2 0 */ \
-                    __ASM_EMIT("mulps       %[x6], %[x2]")                  /* xmm2 = k*dx1/b1 k*dy1/b1 k*dz1/b1 0 */ \
-                    __ASM_EMIT("mulps       %[x6], %[x3]")                  /* xmm3 = k*dx2/b2 k*dy2/b2 k*dz2/b2 0 */ \
-                    __ASM_EMIT("subps       %[x2], %[x0]")                  /* xmm0 = lx0-k*dx1/b1 ly0-k*dy1/b1 lz0-k*dz1/b1 1 */ \
-                    __ASM_EMIT("subps       %[x3], %[x1]")                  /* xmm1 = lx1-k*dx2/b2 ly1-k*dy2/b2 lz1-k*dz2/b2 1 */ \
-                    \
-                    store \
-                    \
-                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), \
-                      [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7) \
-                    : [st] "r" (pv), [pl] "r" (pl), [in] "r" (in), \
-                      [k] "r" (k) \
-                    : "cc", "memory" \
-                );
-
-            switch (t0)
-            {
-                // 0 intersections, triangle is above
-                case 0x00:  // 0 0 0
-                case 0x01:  // 0 0 1
-                case 0x04:  // 0 1 0
-                case 0x05:  // 0 1 1
-                case 0x10:  // 1 0 0
-                case 0x11:  // 1 0 1
-                case 0x14:  // 1 1 0
-                case 0x15:  // 1 1 1
-                    break;
-
-                // 0 intersections, triangle is below
-                case 0x16:  // 1 1 2
-                case 0x19:  // 1 2 1
-                case 0x1a:  // 1 2 2
-                case 0x25:  // 2 1 1
-                case 0x26:  // 2 1 2
-                case 0x29:  // 2 2 1
-                case 0x2a:  // 2 2 2
-                    STR_COPY_TO(in);
-                    ++(*n_in);
-                    break;
-
-                // 1 intersection, 1 triangle above, 1 triangle below, counter-clockwise
-                case 0x06:  // 0 1 2
-                    STR_SPLIT_1P("00", "20", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
-                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                    );
-                    ++(*n_in);
-                    break;
-                case 0x21:  // 2 0 1
-                    STR_SPLIT_1P("00", "10", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                    );
-                    ++(*n_in);
-                    break;
-                case 0x18:  // 1 2 0
-                    STR_SPLIT_1P("10", "20", "04",
-                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                    );
-                    ++(*n_in);
-                    break;
-
-                // 1 intersection, 1 triangle above, 1 triangle below, clockwise
-                case 0x24:  // 2 1 0
-                    STR_SPLIT_1P("00", "20", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                    );
-                    ++(*n_in);
-                    break;
-                case 0x12:  // 1 0 2
-                    STR_SPLIT_1P("00", "10", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x20(%[in])")
-                    );
-                    ++(*n_in);
-                    break;
-                case 0x09:  // 0 2 1
-                    STR_SPLIT_1P("10", "20", "04",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                    );
-                    ++(*n_in);
-                    break;
-
-                // 2 intersections, 1 triangle below, 2 triangles above
-                case 0x02:  // 0 0 2
-                    STR_SPLIT_2P("00", "10", "20", "00",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                    );
-                    ++(*n_in);
-                    break;
-                case 0x08:  // 0 2 0
-                    STR_SPLIT_2P("10", "00", "20", "04",
-                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                    );
-                    ++(*n_in);
-                    break;
-                case 0x20:  // 2 0 0
-                    STR_SPLIT_2P("20", "00", "10", "08",
-                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
-                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                    );
-                    ++(*n_in);
-                    break;
-
-                // 2 intersections, 1 triangle above, 2 triangles below
-                case 0x28:  // 2 2 0
-                    STR_SPLIT_2P("00", "10", "20", "00",
-                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
-                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x4], 0x30(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x50(%[in])")
-                    );
-                    (*n_in) += 2;
-                    break;
-
-                case 0x22:  // 2 0 2
-                    STR_SPLIT_2P("10", "00", "20", "04",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
-                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x30(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x40(%[in])")
-                        __ASM_EMIT("movups      %[x4], 0x50(%[in])")
-                    );
-                    (*n_in) += 2;
-                    break;
-
-                case 0x0a:  // 0 2 2
-                    STR_SPLIT_2P("20", "00", "10", "08",
-                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
-                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
-                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
-                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
-                        __ASM_EMIT("movups      %[x3], 0x30(%[in])")
-                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
-                        __ASM_EMIT("movups      %[x2], 0x50(%[in])")
-                    );
-                    (*n_in) += 2;
-                    break;
-
-                default:
-                    break;
-            }
-
-            #undef STR_COPY_TO
-            #undef STR_SPLIT_1P
-            #undef STR_SPLIT_2P
-        }
-    }
-}
+    } /* namespace sse */
+} /* namespace lsp */
 
 #undef SCALAR_MUL
 #undef MAT3_TRANSPOSE
@@ -3501,6 +2160,5 @@ namespace lsp
 #undef VECTOR_MUL3
 #undef VECTOR_MUL
 #undef VECTOR_XCHG
-#undef CALC_COSINE2V
 
 #endif /* PRIVATE_DSP_ARCH_X86_SSE_3DMATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/3dmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/3dmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/3dmath.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/3dmath.h	2025-08-26 18:15:43.746003097 +0000
@@ -0,0 +1,1105 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 17 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_3DMATH_H_
+#define PRIVATE_DSP_ARCH_X86_SSE2_3DMATH_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_IMPL */
+
+/* 1x matrix transpose
+ * Input:
+ *   x0 = row 0 (a1 a2 a3 a4)
+ *   x1 = row 1 (b1 b2 b3 b4)
+ *   x2 = row 2 (c1 c2 c3 c4)
+ *   x3 = row 3 (d1 d2 d3 d4)
+ *   x4 = temporary
+ *
+ * Output:
+ *   x0 = row 0 (a1 b1 c1 d1)
+ *   x1 = row 1 (a2 b2 c2 d2)
+ *   x2 = row 2 (a3 b3 c3 d3)
+ *   x3 = row 3 (a4 b4 c4 d4)
+ */
+#define MAT4_TRANSPOSE(x0, x1, x2, x3, x4)    \
+    __ASM_EMIT("movaps      %" x2 ", %" x4)      /* xmm4 = c1 c2 c3 c4 */   \
+    __ASM_EMIT("punpckldq   %" x3 ", %" x2)      /* xmm2 = c1 d1 c2 d2 */   \
+    __ASM_EMIT("punpckhdq   %" x3 ", %" x4)      /* xmm4 = c3 d3 c4 d4 */   \
+    __ASM_EMIT("movaps      %" x0 ", %" x3)      /* xmm3 = a1 a2 a3 a4 */   \
+    __ASM_EMIT("punpckldq   %" x1 ", %" x0)      /* xmm0 = a1 b1 a2 b2 */   \
+    __ASM_EMIT("punpckhdq   %" x1 ", %" x3)      /* xmm3 = a3 b3 a4 b4 */   \
+    __ASM_EMIT("movaps      %" x0 ", %" x1)      /* xmm1 = a1 b2 a2 b2 */   \
+    __ASM_EMIT("punpcklqdq  %" x2 ", %" x0)      /* xmm0 = a1 b1 c1 d1 */   \
+    __ASM_EMIT("punpckhqdq  %" x2 ", %" x1)      /* xmm1 = a2 b2 c2 d2 */   \
+    __ASM_EMIT("movaps      %" x3 ", %" x2)      /* xmm2 = a3 b3 a4 b4 */   \
+    __ASM_EMIT("punpcklqdq  %" x4 ", %" x2)      /* xmm2 = a3 b3 c3 d3 */   \
+    __ASM_EMIT("punpckhqdq  %" x4 ", %" x3)      /* xmm3 = a4 b4 c4 d4 */
+
+#define MATRIX_LOAD(ptr, x0, x1, x2, x3) \
+    __ASM_EMIT("movups      0x00(%[" ptr "]), %" x0 ) \
+    __ASM_EMIT("movups      0x10(%[" ptr "]), %" x1 ) \
+    __ASM_EMIT("movups      0x20(%[" ptr "]), %" x2 ) \
+    __ASM_EMIT("movups      0x30(%[" ptr "]), %" x3 )
+
+#define MATRIX_STORE(ptr, x0, x1, x2, x3) \
+    __ASM_EMIT("movups      %" x0 ", 0x00(%[" ptr "])") \
+    __ASM_EMIT("movups      %" x1 ", 0x10(%[" ptr "])") \
+    __ASM_EMIT("movups      %" x2 ", 0x20(%[" ptr "])") \
+    __ASM_EMIT("movups      %" x3 ", 0x30(%[" ptr "])")
+
+namespace lsp
+{
+    namespace sse2
+    {
+        using namespace dsp;
+
+        IF_ARCH_X86(
+            static const float X_3D_TOLERANCE[] __lsp_aligned16 = { LSP_DSP_VEC4(DSP_3D_TOLERANCE) };
+            static const float X_3D_MTOLERANCE[] __lsp_aligned16 = { LSP_DSP_VEC4(-DSP_3D_TOLERANCE) };
+
+            static const uint32_t IONE[] __lsp_aligned16        = { LSP_DSP_VEC4(1) };
+
+            static const uint32_t ICULL3[] __lsp_aligned16      = { 0x01, 0x04, 0x10, 0 };
+        )
+
+        size_t colocation_x2_v1p2(const vector3d_t *pl, const point3d_t *p0, const point3d_t *p1)
+        {
+            float x0, x1, x2, x3;
+            float res[4] __lsp_aligned16;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[pl]), %[x2]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      (%[p0]), %[x0]")        /* xmm0 = p0    */
+                __ASM_EMIT("movups      (%[p1]), %[x1]")        /* xmm1 = p1    */
+
+                __ASM_EMIT("mulps       %[x2], %[x0]")          /* xmm0 = x0*px y0*py z0*pz w0*pw */
+                __ASM_EMIT("mulps       %[x2], %[x1]")          /* xmm1 = x1*px y1*py z1*pz w1*pw */
+                __ASM_EMIT("movaps      %[x0], %[x3]")          /* xmm3 = x0*px y0*py z0*pz w0*pw */
+                __ASM_EMIT("movlhps     %[x1], %[x0]")          /* xmm0 = x0*px y0*py x1*px y1*py */
+                __ASM_EMIT("movhlps     %[x3], %[x1]")          /* xmm1 = z0*pz w0*pw z1*pz w1*pw */
+                __ASM_EMIT("addps       %[x1], %[x0]")          /* xmm0 = x0*px+z0*pz y0*py+w0*pw x1*px+z1*pz y1*py+w1*pw */
+                __ASM_EMIT("shufps      $0xd8, %[x0], %[x0]")   /* xmm0 = x0*px+z0*pz x1*px+z1*pz y0*py+w0*pw y1*py+w1*pw */
+                __ASM_EMIT("movhlps     %[x0], %[x1]")          /* xmm1 = y0*py+w0*pw y1*py+w1*pw ? ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")          /* xmm0 = x0*px+y0*py+z0*pz+w0*pw x1*px+y1*py+z1*pz+w1*pw ? ? = k0 k1 ? ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 ? ? */
+
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL ? ? */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL ? ? */
+                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("paddd       %[x1], %[x0]")
+                __ASM_EMIT("movdqa      %[x0], (%[res])")
+                __ASM_EMIT32("movl      0x00(%[res]), %[p0]")
+                __ASM_EMIT32("movl      0x04(%[res]), %[p1]")
+                __ASM_EMIT64("movl      0x00(%[res]), %k[p0]")
+                __ASM_EMIT64("movl      0x04(%[res]), %k[p1]")
+                __ASM_EMIT("lea         (%[p0], %[p1], 4), %[p0]")
+                : [p0] "+r" (p0), [p1] "+r" (p1),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [pl] "r" (pl),
+                  [res] "r" (res),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc"
+            );
+
+            return size_t(p0);
+        }
+
+        size_t colocation_x2_v1pv(const vector3d_t *pl, const point3d_t *pv)
+        {
+            float x0, x1, x2, x3;
+            float res[4] __lsp_aligned16;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[pl]), %[x2]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
+                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
+
+                __ASM_EMIT("mulps       %[x2], %[x0]")          /* xmm0 = x0*px y0*py z0*pz w0*pw */
+                __ASM_EMIT("mulps       %[x2], %[x1]")          /* xmm1 = x1*px y1*py z1*pz w1*pw */
+                __ASM_EMIT("movaps      %[x0], %[x3]")          /* xmm3 = x0*px y0*py z0*pz w0*pw */
+                __ASM_EMIT("movlhps     %[x1], %[x0]")          /* xmm0 = x0*px y0*py x1*px y1*py */
+                __ASM_EMIT("movhlps     %[x3], %[x1]")          /* xmm1 = z0*pz w0*pw z1*pz w1*pw */
+                __ASM_EMIT("addps       %[x1], %[x0]")          /* xmm0 = x0*px+z0*pz y0*py+w0*pw x1*px+z1*pz y1*py+w1*pw */
+                __ASM_EMIT("shufps      $0xd8, %[x0], %[x0]")   /* xmm0 = x0*px+z0*pz x1*px+z1*pz y0*py+w0*pw y1*py+w1*pw */
+                __ASM_EMIT("movhlps     %[x0], %[x1]")          /* xmm1 = y0*py+w0*pw y1*py+w1*pw ? ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")          /* xmm0 = x0*px+y0*py+z0*pz+w0*pw x1*px+y1*py+z1*pz+w1*pw ? ? = k0 k1 ? ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 ? ? */
+
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL ? ? */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL ? ? */
+                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] ? ? */
+                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] ? ? */
+                __ASM_EMIT("paddd       %[x1], %[x0]")
+                __ASM_EMIT("movdqa      %[x0], (%[res])")
+                __ASM_EMIT32("movl      0x00(%[res]), %[pl]")
+                __ASM_EMIT32("movl      0x04(%[res]), %[pv]")
+                __ASM_EMIT64("movl      0x00(%[res]), %k[pl]")
+                __ASM_EMIT64("movl      0x04(%[res]), %k[pv]")
+                __ASM_EMIT("lea         (%[pl], %[pv], 4), %[pl]")
+                : [pl] "+r" (pl), [pv] "+r" (pv),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
+                : [res] "r" (res),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc"
+            );
+
+            return size_t(pl);
+        }
+
+        size_t colocation_x3_v1p3(const vector3d_t *pl, const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
+        {
+            float x0, x1, x2, x3, x4;
+            float res[4] __lsp_aligned16;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[pl]), %[x3]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      (%[p0]), %[x0]")        /* xmm0 = p0    */
+                __ASM_EMIT("movups      (%[p1]), %[x1]")        /* xmm1 = p1    */
+                __ASM_EMIT("movups      (%[p2]), %[x2]")        /* xmm2 = p2    */
+
+                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = p0 * pl */
+                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = p1 * pl */
+                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = p2 * pl */
+                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
+                /* xmm0 = x0 x1 x2 ? */
+                /* xmm1 = y0 y1 y2 ? */
+                /* xmm2 = z0 z1 z2 ? */
+                /* xmm3 = w0 w1 w2 ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT("addps       %[x3], %[x2]")
+                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
+                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("paddd       %[x1], %[x0]")
+                __ASM_EMIT("movdqa      %[x0], (%[res])")
+                __ASM_EMIT32("movl      0x00(%[res]), %[p0]")
+                __ASM_EMIT32("movl      0x04(%[res]), %[p1]")
+                __ASM_EMIT32("movl      0x08(%[res]), %[p2]")
+                __ASM_EMIT64("movl      0x00(%[res]), %k[p0]")
+                __ASM_EMIT64("movl      0x04(%[res]), %k[p1]")
+                __ASM_EMIT64("movl      0x08(%[res]), %k[p2]")
+                __ASM_EMIT("lea         (%[p1], %[p2], 4), %[p1]")
+                __ASM_EMIT("lea         (%[p0], %[p1], 4), %[p0]")
+                : [p0] "+r" (p0), [p1] "+r" (p1), [p2] "+r" (p2),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [pl] "r" (pl),
+                  [res] "r" (res),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc"
+            );
+
+            return size_t(p0);
+        }
+
+        size_t colocation_x3_v1pv(const vector3d_t *pl, const point3d_t *pv)
+        {
+            float x0, x1, x2, x3, x4;
+            float res[4] __lsp_aligned16;
+            size_t pt;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[pl]), %[x3]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
+                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
+                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = p2    */
+
+                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = p0 * pl */
+                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = p1 * pl */
+                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = p2 * pl */
+                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
+                /* xmm0 = x0 x1 x2 ? */
+                /* xmm1 = y0 y1 y2 ? */
+                /* xmm2 = z0 z1 z2 ? */
+                /* xmm3 = w0 w1 w2 ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT("addps       %[x3], %[x2]")
+                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
+                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("paddd       %[x1], %[x0]")
+                __ASM_EMIT("movdqa      %[x0], (%[res])")
+                __ASM_EMIT32("movl      0x00(%[res]), %[pl]")
+                __ASM_EMIT32("movl      0x04(%[res]), %[pv]")
+                __ASM_EMIT32("movl      0x08(%[res]), %[pt]")
+                __ASM_EMIT64("movl      0x00(%[res]), %k[pl]")
+                __ASM_EMIT64("movl      0x04(%[res]), %k[pv]")
+                __ASM_EMIT64("movl      0x08(%[res]), %k[pt]")
+                __ASM_EMIT("lea         (%[pv], %[pt], 4), %[pt]")
+                __ASM_EMIT("lea         (%[pl], %[pt], 4), %[pt]")
+                : [pl] "+r" (pl), [pv] "+r" (pv), [pt] "=&r" (pt),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [res] "r" (res),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc"
+            );
+
+            return pt;
+        }
+
+        size_t colocation_x3_v3p1(const vector3d_t *v0, const vector3d_t *v1, const vector3d_t *v2, const point3d_t *p)
+        {
+            float x0, x1, x2, x3, x4;
+            float res[4] __lsp_aligned16;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = p     */
+                __ASM_EMIT("movups      (%[v0]), %[x0]")        /* xmm0 = v0    */
+                __ASM_EMIT("movups      (%[v1]), %[x1]")        /* xmm1 = v1    */
+                __ASM_EMIT("movups      (%[v2]), %[x2]")        /* xmm2 = v2    */
+
+                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = v0 * p */
+                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = v1 * p */
+                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = v2 * p */
+                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
+                /* xmm0 = x0 x1 x2 ? */
+                /* xmm1 = y0 y1 y2 ? */
+                /* xmm2 = z0 z1 z2 ? */
+                /* xmm3 = w0 w1 w2 ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT("addps       %[x3], %[x2]")
+                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
+                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("paddd       %[x1], %[x0]")
+                __ASM_EMIT("movdqa      %[x0], (%[res])")
+                __ASM_EMIT32("movl      0x00(%[res]), %[v0]")
+                __ASM_EMIT32("movl      0x04(%[res]), %[v1]")
+                __ASM_EMIT32("movl      0x08(%[res]), %[v2]")
+                __ASM_EMIT64("movl      0x00(%[res]), %k[v0]")
+                __ASM_EMIT64("movl      0x04(%[res]), %k[v1]")
+                __ASM_EMIT64("movl      0x08(%[res]), %k[v2]")
+                __ASM_EMIT("lea         (%[v1], %[v2], 4), %[v1]")
+                __ASM_EMIT("lea         (%[v0], %[v1], 4), %[v0]")
+
+                : [v0] "+r" (v0), [v1] "+r" (v1), [v2] "+r" (v2),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [p] "r" (p),
+                  [res] "r" (res),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc"
+            );
+
+            return size_t(v0);
+        }
+
+        size_t colocation_x3_vvp1(const vector3d_t *vv, const point3d_t *p)
+        {
+            float x0, x1, x2, x3, x4;
+            float res[4] __lsp_aligned16;
+            size_t pt;
+
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = p     */
+                __ASM_EMIT("movups      0x00(%[vv]), %[x0]")    /* xmm0 = v0    */
+                __ASM_EMIT("movups      0x10(%[vv]), %[x1]")    /* xmm1 = v1    */
+                __ASM_EMIT("movups      0x20(%[vv]), %[x2]")    /* xmm2 = v2    */
+
+                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = v0 * p */
+                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = v1 * p */
+                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = v2 * p */
+                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
+                /* xmm0 = x0 x1 x2 ? */
+                /* xmm1 = y0 y1 y2 ? */
+                /* xmm2 = z0 z1 z2 ? */
+                /* xmm3 = w0 w1 w2 ? */
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT("addps       %[x3], %[x2]")
+                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
+                __ASM_EMIT("andps       %[IONE], %[x0]")        /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("andps       %[IONE], %[x1]")        /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("paddd       %[x1], %[x0]")
+                __ASM_EMIT("movdqa      %[x0], (%[res])")
+                __ASM_EMIT32("movl      0x00(%[res]), %[vv]")
+                __ASM_EMIT32("movl      0x04(%[res]), %[p]")
+                __ASM_EMIT32("movl      0x08(%[res]), %[pt]")
+                __ASM_EMIT64("movl      0x00(%[res]), %k[vv]")
+                __ASM_EMIT64("movl      0x04(%[res]), %k[p]")
+                __ASM_EMIT64("movl      0x08(%[res]), %k[pt]")
+                __ASM_EMIT("lea         (%[p], %[pt], 4), %[pt]")
+                __ASM_EMIT("lea         (%[vv], %[pt], 4), %[pt]")
+
+                : [vv] "+r" (vv), [p] "+r" (p), [pt] "=&r" (pt),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [res] "r" (res),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [IONE] "m" (IONE)
+                : "cc"
+            );
+
+            return pt;
+        }
+
+        void transpose_matrix3d1(matrix3d_t *r)
+        {
+            ARCH_X86_ASM
+            (
+                MATRIX_LOAD("m", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+                MAT4_TRANSPOSE("%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4")
+                MATRIX_STORE("m", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+                :
+                : [m] "r" (r)
+                : "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4"
+            );
+        }
+
+        void transpose_matrix3d2(matrix3d_t *r, const matrix3d_t *m)
+        {
+            ARCH_X86_ASM
+            (
+                MATRIX_LOAD("m", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+                MAT4_TRANSPOSE("%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4")
+                MATRIX_STORE("r", "%xmm0", "%xmm1", "%xmm2", "%xmm3")
+                :
+                : [r] "r" (r), [m] "r" (m)
+                : "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4"
+            );
+        }
+
+        void split_triangle_raw(
+                raw_triangle_t *out,
+                size_t *n_out,
+                raw_triangle_t *in,
+                size_t *n_in,
+                const vector3d_t *pl,
+                const raw_triangle_t *pv
+            )
+        {
+            float    x0, x1, x2, x3, x4, x5, x6, x7;
+            float    k[4] __lsp_aligned16;
+            size_t   t0;
+
+            in     += *n_in;
+            out    += *n_out;
+
+            // Estimate co-location of triangle and point
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[pl]), %[x3]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
+                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
+                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = p2    */
+
+                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = p0 * pl */
+                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = p1 * pl */
+                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = p2 * pl */
+                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
+
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT("addps       %[x3], %[x2]")
+                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
+                __ASM_EMIT("movaps      %[x0], (%[k])")         /* *k   = xmm0 */
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
+                __ASM_EMIT("pand        %[ICULL3], %[x0]")      /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("pand        %[ICULL3], %[x1]")      /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("paddd       %[x1], %[x0]")          /* xmm0 = x0 x1 x2 0 */
+                __ASM_EMIT("movdqa      %[x0], %[x2]")          /* xmm2 = x0 x1 x2 0 */
+                __ASM_EMIT("movdqa      %[x0], %[x1]")          /* xmm1 = x0 x1 x2 0 */
+                __ASM_EMIT("psrldq      $8, %[x2]")             /* xmm2 = x2 0 0 0 */
+                __ASM_EMIT("psrldq      $4, %[x1]")             /* xmm1 = x1 x2 0 0 */
+                __ASM_EMIT("por         %[x2], %[x0]")
+                __ASM_EMIT("por         %[x1], %[x0]")
+                __ASM_EMIT32("movd      %[x0], %[t0]")
+                __ASM_EMIT64("movd      %[x0], %k[t0]")
+                : [t0] "=&r" (t0),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [pl] "r" (pl), [pv] "r" (pv),
+                  [k] "r" (k),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [ICULL3] "m" (ICULL3)
+                : "cc"
+            );
+
+            #define STR_COPY_TO(tgt) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x00(%[src]), %[x0]") \
+                    __ASM_EMIT("movups      0x10(%[src]), %[x1]") \
+                    __ASM_EMIT("movups      0x20(%[src]), %[x2]") \
+                    __ASM_EMIT("movups      %[x0], 0x00(%[dst])") \
+                    __ASM_EMIT("movups      %[x1], 0x10(%[dst])") \
+                    __ASM_EMIT("movups      %[x2], 0x20(%[dst])") \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2) \
+                    : [dst] "r" (tgt), \
+                      [src] "r" (pv) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_1P(off0, off1, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x1]")      /* xmm1 = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("movups      (%[pl]), %[x2]")                /* xmm2 = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("subps       %[x0], %[x1]")                  /* xmm1 = d = p1 - p0 = dx dy dz 0 */ \
+                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x3]")       /* xmm3 = k 0 0 0 */ \
+                    __ASM_EMIT("mulps       %[x1], %[x2]")                  /* xmm2 = dx*nx dy*ny dz*nz 0 */ \
+                    __ASM_EMIT("shufps      $0x00, %[x3], %[x3]")           /* xmm3 = k k k k */ \
+                    __ASM_EMIT("movhlps     %[x2], %[x4]")                  /* xmm4 = dz*nz 0 ? ? */ \
+                    __ASM_EMIT("addps       %[x4], %[x2]")                  /* xmm2 = dx*nx+dz*nz dy*ny ? ? */ \
+                    __ASM_EMIT("unpcklps    %[x2], %[x2]")                  /* xmm2 = dx*nx+dz*nz dx*nx+dz*nz dy*ny dy*ny */ \
+                    __ASM_EMIT("mulps       %[x3], %[x1]")                  /* xmm1 = k*dx k*dy k*dz 0 */ \
+                    __ASM_EMIT("movhlps     %[x2], %[x4]")                  /* xmm4 = dy*ny dy*ny ? ? */ \
+                    __ASM_EMIT("addps       %[x4], %[x2]")                  /* xmm2 = dx*nx+dy*ny+dw*nw dx*nx+dy*ny+dw*nw ? ? = b b ? ? */ \
+                    __ASM_EMIT("unpcklps    %[x2], %[x2]")                  /* xmm2 = b b b b */ \
+                    __ASM_EMIT("divps       %[x2], %[x1]")                  /* xmm1 = k*dx/b k*dy/b k*dz/b 0 */ \
+                    __ASM_EMIT("subps       %[x1], %[x0]")                  /* xmm0 = lx0-k*dx/b ly0-k*dy/b lz0-k*dz/b 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4) \
+                    : [st] "r" (pv), [pl] "r" (pl), [out] "r" (out), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_2P(off0, off1, off2, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x2]")      /* xmm2 = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("movups      0x" off2 "(%[st]), %[x3]")      /* xmm3 = p2 = lx2 ly2 lz2 1 */ \
+                    __ASM_EMIT("movups      (%[pl]), %[x4]")                /* xmm4 = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("movaps      %[x0], %[x1]")                  /* xmm1 = pl = nx ny nz nw */ \
+                    __ASM_EMIT("movaps      %[x4], %[x5]")                  /* xmm5 = pl = nx ny nz nw */ \
+                    __ASM_EMIT("subps       %[x0], %[x2]")                  /* xmm2 = d1 = p1 - p0 = dx1 dy1 dz1 0 */ \
+                    __ASM_EMIT("subps       %[x1], %[x3]")                  /* xmm3 = d2 = p2 - p0 = dx2 dy2 dz2 0 */ \
+                    __ASM_EMIT("mulps       %[x2], %[x4]")                  /* xmm4 = dx1*nx dy1*ny dz1*nz 0 */ \
+                    __ASM_EMIT("mulps       %[x3], %[x5]")                  /* xmm5 = dx2*nx dy2*ny dz2*nz 0 */ \
+                    __ASM_EMIT("movhlps     %[x4], %[x6]")                  /* xmm6 = dz1*nz 0 ? ? */ \
+                    __ASM_EMIT("movhlps     %[x5], %[x7]")                  /* xmm7 = dz2*nz 0 ? ? */ \
+                    __ASM_EMIT("addps       %[x6], %[x4]")                  /* xmm4 = dx1*nx+dz1*nz dy1*ny ? ? */ \
+                    __ASM_EMIT("addps       %[x7], %[x5]")                  /* xmm5 = dx1*nx+dz1*nz dy1*ny ? ? */ \
+                    __ASM_EMIT("unpcklps    %[x4], %[x4]")                  /* xmm4 = dx1*nx+dz1*nz dx1*nx+dz1*nz dy1*ny dy1*ny */ \
+                    __ASM_EMIT("unpcklps    %[x5], %[x5]")                  /* xmm5 = dx2*nx+dz2*nz dx2*nx+dz2*nz dy2*ny dy2*ny */ \
+                    __ASM_EMIT("movhlps     %[x4], %[x6]")                  /* xmm6 = dy1*ny dy1*ny ? ? */ \
+                    __ASM_EMIT("movhlps     %[x5], %[x7]")                  /* xmm7 = dy2*ny dy2*ny ? ? */ \
+                    __ASM_EMIT("addps       %[x6], %[x4]")                  /* xmm4 = dx1*nx+dy1*ny+dz1*nz dx1*nx+dy1*ny+dz1*nz ? ? = b1 b1 ? ? */ \
+                    __ASM_EMIT("addps       %[x7], %[x5]")                  /* xmm5 = dx2*nx+dy2*ny+dz2*nz dx2*nx+dy2*ny+dz2*nz ? ? = b2 b2 ? ? */ \
+                    __ASM_EMIT("unpcklps    %[x4], %[x4]")                  /* xmm4 = b1 b1 b1 b1 */ \
+                    __ASM_EMIT("unpcklps    %[x5], %[x5]")                  /* xmm5 = b2 b2 b2 b2 */ \
+                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x6]")       /* xmm6 = k */ \
+                    __ASM_EMIT("divps       %[x4], %[x2]")                  /* xmm2 = dx1/b1 dy1/b1 dz1/b1 0 */ \
+                    __ASM_EMIT("shufps      $0x00, %[x6], %[x6]")           /* xmm6 = k k k k */ \
+                    __ASM_EMIT("divps       %[x5], %[x3]")                  /* xmm3 = dx2/b2 dy2/b2 dz2/b2 0 */ \
+                    __ASM_EMIT("mulps       %[x6], %[x2]")                  /* xmm2 = k*dx1/b1 k*dy1/b1 k*dz1/b1 0 */ \
+                    __ASM_EMIT("mulps       %[x6], %[x3]")                  /* xmm3 = k*dx2/b2 k*dy2/b2 k*dz2/b2 0 */ \
+                    __ASM_EMIT("subps       %[x2], %[x0]")                  /* xmm0 = lx0-k*dx1/b1 ly0-k*dy1/b1 lz0-k*dz1/b1 1 */ \
+                    __ASM_EMIT("subps       %[x3], %[x1]")                  /* xmm1 = lx1-k*dx2/b2 ly1-k*dy2/b2 lz1-k*dz2/b2 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), \
+                      [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7) \
+                    : [st] "r" (pv), [pl] "r" (pl), [out] "r" (out), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            switch (t0)
+            {
+                // 0 intersections, triangle is above
+                case 0x00:  // 0 0 0
+                case 0x01:  // 0 0 1
+                case 0x04:  // 0 1 0
+                case 0x05:  // 0 1 1
+                case 0x10:  // 1 0 0
+                case 0x11:  // 1 0 1
+                case 0x14:  // 1 1 0
+                case 0x15:  // 1 1 1
+                    STR_COPY_TO(out);
+                    ++(*n_out);
+                    break;
+
+                // 0 intersections, triangle is below
+                case 0x16:  // 1 1 2
+                case 0x19:  // 1 2 1
+                case 0x1a:  // 1 2 2
+                case 0x25:  // 2 1 1
+                case 0x26:  // 2 1 2
+                case 0x29:  // 2 2 1
+                case 0x2a:  // 2 2 2
+                    STR_COPY_TO(in);
+                    ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, counter-clockwise
+                case 0x06:  // 0 1 2
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x21:  // 2 0 1
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x18:  // 1 2 0
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, clockwise
+                case 0x24:  // 2 1 0
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x2], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x12:  // 1 0 2
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x09:  // 0 2 1
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle below, 2 triangles above
+                case 0x02:  // 0 0 2
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                        __ASM_EMIT("movups      %[x4], 0x30(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x50(%[out])")
+                    );
+                    (*n_out) += 2; ++(*n_in);
+                    break;
+                case 0x08:  // 0 2 0
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
+                        __ASM_EMIT("movups      %[x2], 0x30(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x40(%[out])")
+                        __ASM_EMIT("movups      %[x4], 0x50(%[out])")
+                    );
+                    (*n_out) += 2; ++(*n_in);
+                    break;
+                case 0x20:  // 2 0 0
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x30(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[out])")
+                        __ASM_EMIT("movups      %[x2], 0x50(%[out])")
+                    );
+                    (*n_out) += 2; ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle above, 2 triangles below
+                case 0x28:  // 2 2 0
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x50(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
+                    );
+                    ++(*n_out); (*n_in) += 2;
+                    break;
+
+                case 0x22:  // 2 0 2
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x50(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); (*n_in) += 2;
+                    break;
+
+                case 0x0a:  // 0 2 2
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x50(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
+                    );
+                    ++(*n_out); (*n_in) += 2;
+                    break;
+
+                default:
+                    break;
+            }
+
+            #undef STR_COPY_TO
+            #undef STR_SPLIT_1P
+            #undef STR_SPLIT_2P
+        }
+
+        void cull_triangle_raw(
+                raw_triangle_t *in,
+                size_t *n_in,
+                const vector3d_t *pl,
+                const raw_triangle_t *pv
+            )
+        {
+            float    x0, x1, x2, x3, x4, x5, x6, x7;
+            float    k[4] __lsp_aligned16;
+            size_t   t0;
+
+            in     += *n_in;
+
+            // Estimate co-location of triangle and point
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[pl]), %[x3]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
+                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
+                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = p2    */
+
+                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = p0 * pl */
+                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = p1 * pl */
+                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = p2 * pl */
+                MAT4_TRANSPOSE("[x0]", "[x1]", "[x2]", "[x3]", "[x4]")
+
+                __ASM_EMIT("addps       %[x1], %[x0]")
+                __ASM_EMIT("addps       %[x3], %[x2]")
+                __ASM_EMIT("addps       %[x2], %[x0]")          /* xmm0 = k0 k1 k2 ? */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 ? */
+                __ASM_EMIT("movaps      %[x0], (%[k])")         /* *k   = xmm0 */
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL ? */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL ? */
+                __ASM_EMIT("pand        %[ICULL3], %[x0]")      /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] ? */
+                __ASM_EMIT("pand        %[ICULL3], %[x1]")      /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] ? */
+                __ASM_EMIT("paddd       %[x1], %[x0]")          /* xmm0 = x0 x1 x2 0 */
+                __ASM_EMIT("movdqa      %[x0], %[x2]")          /* xmm2 = x0 x1 x2 0 */
+                __ASM_EMIT("movdqa      %[x0], %[x1]")          /* xmm1 = x0 x1 x2 0 */
+                __ASM_EMIT("psrldq      $8, %[x2]")             /* xmm2 = x2 0 0 0 */
+                __ASM_EMIT("psrldq      $4, %[x1]")             /* xmm1 = x1 x2 0 0 */
+                __ASM_EMIT("por         %[x2], %[x0]")
+                __ASM_EMIT("por         %[x1], %[x0]")
+                __ASM_EMIT32("movd      %[x0], %[t0]")
+                __ASM_EMIT64("movd      %[x0], %k[t0]")
+                : [t0] "=&r" (t0),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [pl] "r" (pl), [pv] "r" (pv),
+                  [k] "r" (k),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [ICULL3] "m" (ICULL3)
+                : "cc"
+            );
+
+            #define STR_COPY_TO(tgt) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x00(%[src]), %[x0]") \
+                    __ASM_EMIT("movups      0x10(%[src]), %[x1]") \
+                    __ASM_EMIT("movups      0x20(%[src]), %[x2]") \
+                    __ASM_EMIT("movups      %[x0], 0x00(%[dst])") \
+                    __ASM_EMIT("movups      %[x1], 0x10(%[dst])") \
+                    __ASM_EMIT("movups      %[x2], 0x20(%[dst])") \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2) \
+                    : [dst] "r" (tgt), \
+                      [src] "r" (pv) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_1P(off0, off1, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x1]")      /* xmm1 = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("movups      (%[pl]), %[x2]")                /* xmm2 = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("subps       %[x0], %[x1]")                  /* xmm1 = d = p1 - p0 = dx dy dz 0 */ \
+                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x3]")       /* xmm3 = k 0 0 0 */ \
+                    __ASM_EMIT("mulps       %[x1], %[x2]")                  /* xmm2 = dx*nx dy*ny dz*nz 0 */ \
+                    __ASM_EMIT("shufps      $0x00, %[x3], %[x3]")           /* xmm3 = k k k k */ \
+                    __ASM_EMIT("movhlps     %[x2], %[x4]")                  /* xmm4 = dz*nz 0 ? ? */ \
+                    __ASM_EMIT("addps       %[x4], %[x2]")                  /* xmm2 = dx*nx+dz*nz dy*ny ? ? */ \
+                    __ASM_EMIT("unpcklps    %[x2], %[x2]")                  /* xmm2 = dx*nx+dz*nz dx*nx+dz*nz dy*ny dy*ny */ \
+                    __ASM_EMIT("mulps       %[x3], %[x1]")                  /* xmm1 = k*dx k*dy k*dz 0 */ \
+                    __ASM_EMIT("movhlps     %[x2], %[x4]")                  /* xmm4 = dy*ny dy*ny ? ? */ \
+                    __ASM_EMIT("addps       %[x4], %[x2]")                  /* xmm2 = dx*nx+dy*ny+dw*nw dx*nx+dy*ny+dw*nw ? ? = b b ? ? */ \
+                    __ASM_EMIT("unpcklps    %[x2], %[x2]")                  /* xmm2 = b b b b */ \
+                    __ASM_EMIT("divps       %[x2], %[x1]")                  /* xmm1 = k*dx/b k*dy/b k*dz/b 0 */ \
+                    __ASM_EMIT("subps       %[x1], %[x0]")                  /* xmm0 = lx0-k*dx/b ly0-k*dy/b lz0-k*dz/b 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4) \
+                    : [st] "r" (pv), [pl] "r" (pl), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_2P(off0, off1, off2, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x2]")      /* xmm2 = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("movups      0x" off2 "(%[st]), %[x3]")      /* xmm3 = p2 = lx2 ly2 lz2 1 */ \
+                    __ASM_EMIT("movups      (%[pl]), %[x4]")                /* xmm4 = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("movaps      %[x0], %[x1]")                  /* xmm1 = pl = nx ny nz nw */ \
+                    __ASM_EMIT("movaps      %[x4], %[x5]")                  /* xmm5 = pl = nx ny nz nw */ \
+                    __ASM_EMIT("subps       %[x0], %[x2]")                  /* xmm2 = d1 = p1 - p0 = dx1 dy1 dz1 0 */ \
+                    __ASM_EMIT("subps       %[x1], %[x3]")                  /* xmm3 = d2 = p2 - p0 = dx2 dy2 dz2 0 */ \
+                    __ASM_EMIT("mulps       %[x2], %[x4]")                  /* xmm4 = dx1*nx dy1*ny dz1*nz 0 */ \
+                    __ASM_EMIT("mulps       %[x3], %[x5]")                  /* xmm5 = dx2*nx dy2*ny dz2*nz 0 */ \
+                    __ASM_EMIT("movhlps     %[x4], %[x6]")                  /* xmm6 = dz1*nz 0 ? ? */ \
+                    __ASM_EMIT("movhlps     %[x5], %[x7]")                  /* xmm7 = dz2*nz 0 ? ? */ \
+                    __ASM_EMIT("addps       %[x6], %[x4]")                  /* xmm4 = dx1*nx+dz1*nz dy1*ny ? ? */ \
+                    __ASM_EMIT("addps       %[x7], %[x5]")                  /* xmm5 = dx1*nx+dz1*nz dy1*ny ? ? */ \
+                    __ASM_EMIT("unpcklps    %[x4], %[x4]")                  /* xmm4 = dx1*nx+dz1*nz dx1*nx+dz1*nz dy1*ny dy1*ny */ \
+                    __ASM_EMIT("unpcklps    %[x5], %[x5]")                  /* xmm5 = dx2*nx+dz2*nz dx2*nx+dz2*nz dy2*ny dy2*ny */ \
+                    __ASM_EMIT("movhlps     %[x4], %[x6]")                  /* xmm6 = dy1*ny dy1*ny ? ? */ \
+                    __ASM_EMIT("movhlps     %[x5], %[x7]")                  /* xmm7 = dy2*ny dy2*ny ? ? */ \
+                    __ASM_EMIT("addps       %[x6], %[x4]")                  /* xmm4 = dx1*nx+dy1*ny+dz1*nz dx1*nx+dy1*ny+dz1*nz ? ? = b1 b1 ? ? */ \
+                    __ASM_EMIT("addps       %[x7], %[x5]")                  /* xmm5 = dx2*nx+dy2*ny+dz2*nz dx2*nx+dy2*ny+dz2*nz ? ? = b2 b2 ? ? */ \
+                    __ASM_EMIT("unpcklps    %[x4], %[x4]")                  /* xmm4 = b1 b1 b1 b1 */ \
+                    __ASM_EMIT("unpcklps    %[x5], %[x5]")                  /* xmm5 = b2 b2 b2 b2 */ \
+                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x6]")       /* xmm6 = k */ \
+                    __ASM_EMIT("divps       %[x4], %[x2]")                  /* xmm2 = dx1/b1 dy1/b1 dz1/b1 0 */ \
+                    __ASM_EMIT("shufps      $0x00, %[x6], %[x6]")           /* xmm6 = k k k k */ \
+                    __ASM_EMIT("divps       %[x5], %[x3]")                  /* xmm3 = dx2/b2 dy2/b2 dz2/b2 0 */ \
+                    __ASM_EMIT("mulps       %[x6], %[x2]")                  /* xmm2 = k*dx1/b1 k*dy1/b1 k*dz1/b1 0 */ \
+                    __ASM_EMIT("mulps       %[x6], %[x3]")                  /* xmm3 = k*dx2/b2 k*dy2/b2 k*dz2/b2 0 */ \
+                    __ASM_EMIT("subps       %[x2], %[x0]")                  /* xmm0 = lx0-k*dx1/b1 ly0-k*dy1/b1 lz0-k*dz1/b1 1 */ \
+                    __ASM_EMIT("subps       %[x3], %[x1]")                  /* xmm1 = lx1-k*dx2/b2 ly1-k*dy2/b2 lz1-k*dz2/b2 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), \
+                      [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7) \
+                    : [st] "r" (pv), [pl] "r" (pl), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            switch (t0)
+            {
+                // 0 intersections, triangle is above
+                case 0x00:  // 0 0 0
+                case 0x01:  // 0 0 1
+                case 0x04:  // 0 1 0
+                case 0x05:  // 0 1 1
+                case 0x10:  // 1 0 0
+                case 0x11:  // 1 0 1
+                case 0x14:  // 1 1 0
+                case 0x15:  // 1 1 1
+                    break;
+
+                // 0 intersections, triangle is below
+                case 0x16:  // 1 1 2
+                case 0x19:  // 1 2 1
+                case 0x1a:  // 1 2 2
+                case 0x25:  // 2 1 1
+                case 0x26:  // 2 1 2
+                case 0x29:  // 2 2 1
+                case 0x2a:  // 2 2 2
+                    STR_COPY_TO(in);
+                    ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, counter-clockwise
+                case 0x06:  // 0 1 2
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x21:  // 2 0 1
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x18:  // 1 2 0
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, clockwise
+                case 0x24:  // 2 1 0
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x12:  // 1 0 2
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x09:  // 0 2 1
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle below, 2 triangles above
+                case 0x02:  // 0 0 2
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x08:  // 0 2 0
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x20:  // 2 0 0
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle above, 2 triangles below
+                case 0x28:  // 2 2 0
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x50(%[in])")
+                    );
+                    (*n_in) += 2;
+                    break;
+
+                case 0x22:  // 2 0 2
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x50(%[in])")
+                    );
+                    (*n_in) += 2;
+                    break;
+
+                case 0x0a:  // 0 2 2
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x50(%[in])")
+                    );
+                    (*n_in) += 2;
+                    break;
+
+                default:
+                    break;
+            }
+
+            #undef STR_COPY_TO
+            #undef STR_SPLIT_1P
+            #undef STR_SPLIT_2P
+        }
+
+    } /* namespace sse2 */
+} /* namespace lsp */
+
+#undef MAT4_TRANSPOSE
+#undef MAT4_LOAD
+#undef MAT4_STORE
+
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_3DMATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/cos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/cos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/cos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/cos.h	2025-08-26 18:15:43.750003058 +0000
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_PMATH_COS_H_
+#define PRIVATE_DSP_ARCH_X86_SSE2_PMATH_COS_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_IMPL */
+
+#include <private/dsp/arch/x86/sse2/pmath/sin.h>
+
+namespace lsp
+{
+    namespace sse2
+    {
+        void cosf1(float *dst, size_t count)
+        {
+            IF_ARCH_X86(float *src);
+
+            ARCH_X86_ASM(
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("movaps          0x10 + %[S2C], %%xmm0")         // xmm0     = PI
+                __ASM_EMIT("movups          0x00(%[dst]), %%xmm1")          // xmm1     = x1
+                __ASM_EMIT("movaps          %%xmm0, %%xmm4")                // xmm4     = PI
+                __ASM_EMIT("movups          0x10(%[dst]), %%xmm5")          // xmm5     = x2
+                __ASM_EMIT("subps           %%xmm1, %%xmm0")                // xmm0     = PI/2 - x1 + PI/2
+                __ASM_EMIT("subps           %%xmm5, %%xmm4")                // xmm4     = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("movups          %%xmm4, 0x10(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("movaps          0x10 + %[S2C], %%xmm0")         // xmm0     = PI
+                __ASM_EMIT("movups          0x00(%[dst]), %%xmm1")          // xmm1     = x
+                __ASM_EMIT("subps           %%xmm1, %%xmm0")                // xmm0     = PI/2 - x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             12f")
+                __ASM_EMIT("movaps          0x10 + %[S2C], %%xmm0")         // xmm0     = PI
+                __ASM_EMIT("mov             %[dst], %[src]")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("movss           0x00(%[src]), %%xmm1")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("movhps          0x00(%[src]), %%xmm1")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("subps           %%xmm1, %%xmm0")                // xmm0     = PI/2 - x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("movss           %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("movhps          %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [src] "=&r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void cosf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_X86_ASM(
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("movaps          0x10 + %[S2C], %%xmm0")         // xmm0     = PI
+                __ASM_EMIT("movups          0x00(%[src]), %%xmm1")          // xmm1     = x1
+                __ASM_EMIT("movaps          %%xmm0, %%xmm4")                // xmm4     = PI
+                __ASM_EMIT("movups          0x10(%[src]), %%xmm5")          // xmm5     = x2
+                __ASM_EMIT("subps           %%xmm1, %%xmm0")                // xmm0     = PI/2 - x1 + PI/2
+                __ASM_EMIT("subps           %%xmm5, %%xmm4")                // xmm4     = PI/2 - x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("movups          %%xmm4, 0x10(%[dst])")
+                __ASM_EMIT("add             $0x20, %[src]")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("movaps          0x10 + %[S2C], %%xmm0")         // xmm0     = PI
+                __ASM_EMIT("movups          0x00(%[src]), %%xmm1")          // xmm1     = x1
+                __ASM_EMIT("subps           %%xmm1, %%xmm0")                // xmm0     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[src]")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             12f")
+                __ASM_EMIT("movaps          0x10 + %[S2C], %%xmm0")         // xmm0     = PI
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("movss           0x00(%[src]), %%xmm1")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("movhps          0x00(%[src]), %%xmm1")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("subps           %%xmm1, %%xmm0")                // xmm0     = PI/2 - x1 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("movss           %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("movhps          %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void cosf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("movss           %[k], %%xmm6")                  // xmm6     = k
+                __ASM_EMIT("movss           %[p], %%xmm0")                  // xmm7     = p
+                __ASM_EMIT("shufps          $0x00, %%xmm6, %%xmm6")         // xmm6     = k k k k
+                __ASM_EMIT("shufps          $0x00, %%xmm0, %%xmm0")         // xmm0     = p p p p
+                __ASM_EMIT("movaps          0x10 + %[S2C], %%xmm7")         // xmm7     = PI PI PI PI
+                __ASM_EMIT("movaps          0x00 + %[S2KP], %%xmm4")        // xmm4     = i = 0 1 2 3
+                __ASM_EMIT("movaps          0x10 + %[S2KP], %%xmm5")        // xmm5     = step = 4 4 4 4
+                __ASM_EMIT("subps           %%xmm0, %%xmm7")                // xmm7     = PI/2 - p + PI/2
+                // x4 blocks
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("movaps          %%xmm4, %%xmm1")                // xmm1     = i
+                __ASM_EMIT("movaps          %%xmm7, %%xmm0")                // xmm0     = PI/2 - p + PI/2
+                __ASM_EMIT("mulps           %%xmm6, %%xmm1")                // xmm1     = k*i
+                __ASM_EMIT("addps           %%xmm5, %%xmm4")                // xmm4     = i + step
+                __ASM_EMIT("subps           %%xmm1, %%xmm0")                // xmm0     = PI/2 - (p + k*i) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             6f")
+                __ASM_EMIT("movaps          %%xmm7, %%xmm0")                // xmm0     = PI/2 - p + PI/2
+                __ASM_EMIT("mulps           %%xmm6, %%xmm4")                // xmm4     = k*i
+                __ASM_EMIT("subps           %%xmm4, %%xmm0")                // xmm0     = PI/2 - (p + k*i) + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              4f")
+                __ASM_EMIT("movss           %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("shufps          $0x39, %%xmm0, %%xmm0")         // xmm0     = S1 S2 S3 S0
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("4:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("movlps          %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("6:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+    } /* namespace sse2 */
+} /* namespace lsp */
+
+
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_PMATH_COS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/lanczos.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/lanczos.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/lanczos.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/lanczos.h	2025-08-26 18:15:43.750003058 +0000
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 16 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_PMATH_LANCZOS_H_
+#define PRIVATE_DSP_ARCH_X86_SSE2_PMATH_LANCZOS_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_IMPL */
+
+#include <private/dsp/arch/x86/sse2/pmath/sin.h>
+
+namespace lsp
+{
+    namespace sse2
+    {
+        IF_ARCH_X86(
+            static const uint32_t lanczos_const[] __lsp_aligned16 =
+            {
+                LSP_DSP_VEC4(0x7fffffff),                   // +0x00: Mask for fabsf
+                LSP_DSP_VEC4(0x38d1b717),                   // +0x10: Sinc threshold = 1e-4
+                LSP_DSP_VEC4(0x3f800000),                   // +0x20: 1.0
+            };
+        )
+
+        typedef struct lanczos_gen_t
+        {
+            float k[4];                         // +0x00: Multiplier
+            float p[4];                         // +0x10: Initial phase
+            float a[4];                         // +0x20: Number of lobes
+            float i[4];                         // +0x30: Indices
+            float x1[4];                        // +0x40: Computed X1
+            float d[4];                         // +0x50: Denominator
+            float t[4];                         // +0x60: Time range
+        } lanczos_gen_t;
+
+        #define LANCZOS_GEN_FUNC_X4 \
+            /* xmm0 = x1 */ \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm4")                /* xmm4     = x1 */ \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm2")                /* xmm2     = x1 */ \
+            __ASM_EMIT("mulps           0x20 + %[state], %%xmm4")       /* xmm4     = x2 = x1*a */ \
+            __ASM_EMIT("movaps          %%xmm0, 0x40 + %[state]")       /* *x       = x1 */ \
+            __ASM_EMIT("mulps           %%xmm4, %%xmm2")                /* xmm2     = d = x1 * x2 */ \
+            __ASM_EMIT("addps           0x00 + %[S2C], %%xmm0")         /* xmm0     = x1 + PI/2 */ \
+            __ASM_EMIT("addps           0x00 + %[S2C], %%xmm4")         /* xmm4     = x2 + PI/2 */ \
+            __ASM_EMIT("movaps          %%xmm2, 0x50 + %[state]")       /* *d       = d */ \
+            SINF_X_PLUS_PI_2_CORE_X8                                    /* xmm0     = sinf(x1), xmm4 = sinf(x2) */ \
+            __ASM_EMIT("movaps          0x40 + %[state], %%xmm1")       /* xmm1     = x */ \
+            __ASM_EMIT("mulps           %%xmm4, %%xmm0")                /* xmm0     = sinf(x1)*sinf(x2) */ \
+            __ASM_EMIT("andps           0x00 + %[LC], %%xmm1")          /* xmm1     = fabsf(x) */ \
+            __ASM_EMIT("divps           0x50 + %[state], %%xmm0")       /* xmm0     = F = (sinf(x1)*sinf(x2)) / (x1 * x2) */ \
+            __ASM_EMIT("movaps          %%xmm1, %%xmm2")                /* xmm2     = fabsf(x) */ \
+            __ASM_EMIT("cmpps           $5, 0x10 + %[LC], %%xmm1")      /* xmm1     = [ fabsf(x) >= 1e-4 ] */ \
+            __ASM_EMIT("andps           %%xmm1, %%xmm0")                /* xmm0     = [ fabsf(x) >= 1e-4 ] & f */ \
+            __ASM_EMIT("cmpps           $1, 0x60 + %[state], %%xmm2")   /* xmm2     = [ fabsf(x) < t ] */ \
+            __ASM_EMIT("andnps          0x20 + %[LC], %%xmm1")          /* xmm1     = [ fabsf(x) < 1e-4 ] & 1.0 */ \
+            __ASM_EMIT("orps            %%xmm1, %%xmm0")                /* xmm0     = [ fabsf(x) >= 1e-4 ] ? f : 1.0 */ \
+            __ASM_EMIT("andps           %%xmm2, %%xmm0")                /* xmm0     = [ fabsf(x) < t ] ? ([ fabsf(x) >= 1e-4 ] ? f : 1.0) : 0.0 */
+
+        void lanczos1(float *dst,  float k, float p, float t, float a, size_t count)
+        {
+            IF_ARCH_X86(
+                lanczos_gen_t state __lsp_aligned16;
+                float stub[4] __lsp_aligned16;
+            );
+
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("movss           %[k], %%xmm4")                  // xmm4     = k
+                __ASM_EMIT("movss           %[p], %%xmm5")                  // xmm5     = p
+                __ASM_EMIT("movss           %[a], %%xmm6")                  // xmm6     = a
+                __ASM_EMIT("movss           %[t], %%xmm7")                  // xmm7     = t
+                __ASM_EMIT("shufps          $0x00, %%xmm4, %%xmm4")         // xmm4     = k k k k
+                __ASM_EMIT("shufps          $0x00, %%xmm5, %%xmm5")         // xmm5     = p p p p
+                __ASM_EMIT("shufps          $0x00, %%xmm6, %%xmm6")         // xmm6     = a a a a
+                __ASM_EMIT("shufps          $0x00, %%xmm7, %%xmm7")         // xmm7     = t t t t
+                __ASM_EMIT("movaps          %%xmm4, 0x00 + %[state]")
+                __ASM_EMIT("movaps          %%xmm5, 0x10 + %[state]")
+                __ASM_EMIT("movaps          %%xmm6, 0x20 + %[state]")
+                __ASM_EMIT("movaps          %%xmm7, 0x60 + %[state]")
+                __ASM_EMIT("movaps          0x00 + %[LGEN], %%xmm1")        // xmm1     = i = 0 1 2 3
+                // x4 blocks
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("movaps          %%xmm1, %%xmm0")                // xmm0     = i
+                __ASM_EMIT("mulps           0x00 + %[state], %%xmm0")       // xmm0     = k*i
+                __ASM_EMIT("addps           0x10 + %[LGEN], %%xmm1")        // xmm1     = i' = i + step
+                __ASM_EMIT("subps           0x10 + %[state], %%xmm0")       // xmm0     = x1 = k*i - p
+                __ASM_EMIT("movaps          %%xmm1, 0x30 + %[state]")       // *i       = i'
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("movaps          0x30 + %[state], %%xmm1")       // xmm1     = i'
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             6f")
+                __ASM_EMIT("movaps          %%xmm1, %%xmm0")                // xmm0     = i
+                __ASM_EMIT("mulps           0x00 + %[state], %%xmm0")       // xmm0     = k*i
+                __ASM_EMIT("subps           0x10 + %[state], %%xmm0")       // xmm0     = x1 = k*i - p
+                LANCZOS_GEN_FUNC_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              4f")
+                __ASM_EMIT("movss           %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("shufps          $0x39, %%xmm0, %%xmm0")         // xmm0     = S1 S2 S3 S0
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("4:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("movlps          %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("6:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [state] "o" (state),
+                  [S2C] "o" (sinf_const),
+                  [LGEN] "o" (kp_gen_const),
+                  [LC] "o" (lanczos_const),
+                  [stub] "o" (stub),
+                  [k] "m" (k),
+                  [p] "m" (p),
+                  [a] "m" (a),
+                  [t] "m" (t)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+    } /* namespace sse2 */
+} /* namespace lsp */
+
+
+
+
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_PMATH_LANCZOS_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/sin.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/sin.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/sin.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath/sin.h	2025-08-26 18:15:43.750003058 +0000
@@ -0,0 +1,365 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 10 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_PMATH_SIN_H_
+#define PRIVATE_DSP_ARCH_X86_SSE2_PMATH_SIN_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_IMPL */
+
+namespace lsp
+{
+    namespace sse2
+    {
+        /*
+            Time-optimized sinf implementation:
+
+            float sinf(float x)
+            {
+                // Limit x to [-pi/2 .. pi/2]
+                x              += PI/2;
+                int32_t period  = (x / 2*PI) - (x < 0.0f);
+                x               = x - period * 2*PI;
+                x               = (x < PI) ? x - PI/2 : 3*PI/2 - x;
+
+                const float x2 = x*x;
+                return x * (1.0f + x2*(-0.166666666667f + x2*(0.00833333333333f + x2 * (-0.000198412698413f + x2 * (2.7557319224e-06f + x2 * -2.50521083854e-08f)))));
+            }
+        */
+
+        IF_ARCH_X86(
+            static const float kp_gen_const[] __lsp_aligned16 =
+            {
+                0.0f, 1.0f, 2.0f, 3.0f,         // +0x00: Initial values 0..3
+                LSP_DSP_VEC4(4.0f)              // +0x10: Step
+            };
+        )
+
+        IF_ARCH_X86(
+            static const uint32_t sinf_const[] __lsp_aligned16 =
+            {
+                LSP_DSP_VEC4(0x3fc90fdb),       // +0x00:   PI/2
+                LSP_DSP_VEC4(0x40490fdb),       // +0x10:   PI
+                LSP_DSP_VEC4(0x3e22f983),       // +0x20:   1/(2*PI)
+                LSP_DSP_VEC4(0x40c90fdb),       // +0x30:   2*PI
+                LSP_DSP_VEC4(0x4096cbe4),       // +0x40:   3*PI/2
+                LSP_DSP_VEC4(0xb2d7322b),       // +0x50:   C0 = -1/11! = -2.50521083854e-08
+                LSP_DSP_VEC4(0x3638ef1d),       // +0x60:   C1 = 1/9! = 2.7557319224e-06
+                LSP_DSP_VEC4(0xb9500d01),       // +0x70:   C2 = -1/7! = -0.000198412698413
+                LSP_DSP_VEC4(0x3c088889),       // +0x80:   C3 = 1/5! = 0.00833333333333
+                LSP_DSP_VEC4(0xbe2aaaab),       // +0x90:   C4 = -1/3! = -0.166666666667
+                LSP_DSP_VEC4(0x3f800000),       // +0xa0:   1.0
+            };
+        )
+
+        #define SINF_X_PLUS_PI_2_CORE_X8              \
+            /* xmm0 = X1 = x1 + PI/2 */               \
+            /* xmm4 = X2 = x2 + PI/2 */               \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm1")                /* xmm1     = X */ \
+            __ASM_EMIT("movaps          %%xmm4, %%xmm5") \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm3")                /* xmm3     = X */ \
+            __ASM_EMIT("movaps          %%xmm4, %%xmm7") \
+            __ASM_EMIT("mulps           0x20 + %[S2C], %%xmm1")         /* xmm1     = X / (2*PI) */ \
+            __ASM_EMIT("mulps           0x20 + %[S2C], %%xmm5") \
+            __ASM_EMIT("psrad           $31, %%xmm3")                   /* xmm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("psrad           $31, %%xmm7") \
+            __ASM_EMIT("cvttps2dq       %%xmm1, %%xmm1")                /* xmm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("cvttps2dq       %%xmm5, %%xmm5") \
+            __ASM_EMIT("paddd           %%xmm3, %%xmm1")                /* xmm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("paddd           %%xmm7, %%xmm5") \
+            __ASM_EMIT("cvtdq2ps        %%xmm1, %%xmm1")                /* xmm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("cvtdq2ps        %%xmm5, %%xmm5") \
+            __ASM_EMIT("mulps           0x30 + %[S2C], %%xmm1")         /* xmm1     = period * 2 * PI */ \
+            __ASM_EMIT("mulps           0x30 + %[S2C], %%xmm5") \
+            __ASM_EMIT("subps           %%xmm1, %%xmm0")                /* xmm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("subps           %%xmm5, %%xmm4") \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm2")                /* xmm2     = Y */ \
+            __ASM_EMIT("movaps          %%xmm4, %%xmm6") \
+            __ASM_EMIT("movaps          0x40 + %[S2C], %%xmm1")         /* xmm1     = 3*PI/2 */ \
+            __ASM_EMIT("movaps          0x40 + %[S2C], %%xmm5") \
+            __ASM_EMIT("cmpps           $1, 0x10 + %[S2C], %%xmm2")     /* xmm2     = [ Y < PI ] */ \
+            __ASM_EMIT("cmpps           $1, 0x10 + %[S2C], %%xmm6") \
+            __ASM_EMIT("subps           %%xmm0, %%xmm1")                /* xmm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("subps           %%xmm4, %%xmm5") \
+            __ASM_EMIT("subps           0x00 + %[S2C], %%xmm0")         /* xmm0     = Y - PI/2 */ \
+            __ASM_EMIT("subps           0x00 + %[S2C], %%xmm4") \
+            __ASM_EMIT("andps           %%xmm2, %%xmm0")                /* xmm0     = (Y - PI/2) & [ Y < PI ] */ \
+            __ASM_EMIT("andps           %%xmm6, %%xmm4") \
+            __ASM_EMIT("andnps          %%xmm1, %%xmm2")                /* xmm2     = (3*PI/2 - Y) & [ Y >= PI ] */ \
+            __ASM_EMIT("andnps          %%xmm5, %%xmm6") \
+            __ASM_EMIT("orps            %%xmm2, %%xmm0")                /* xmm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            __ASM_EMIT("orps            %%xmm6, %%xmm4") \
+            /* xmm0     = XX1 */ \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm1")                /* xmm1     = XX */ \
+            __ASM_EMIT("movaps          %%xmm4, %%xmm5") \
+            __ASM_EMIT("mulps           %%xmm0, %%xmm0")                /* xmm0     = X2 = XX*XX */ \
+            __ASM_EMIT("mulps           %%xmm4, %%xmm4") \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm2")                /* xmm2     = X2 */ \
+            __ASM_EMIT("movaps          %%xmm4, %%xmm6") \
+            __ASM_EMIT("mulps           0x50 + %[S2C], %%xmm0")         /* xmm0     = X2*C0 */ \
+            __ASM_EMIT("mulps           0x50 + %[S2C], %%xmm4") \
+            __ASM_EMIT("addps           0x60 + %[S2C], %%xmm0")         /* xmm0     = C1 + X2*C0 */ \
+            __ASM_EMIT("addps           0x60 + %[S2C], %%xmm4") \
+            __ASM_EMIT("mulps           %%xmm2, %%xmm0")                /* xmm0     = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("mulps           %%xmm6, %%xmm4") \
+            __ASM_EMIT("addps           0x70 + %[S2C], %%xmm0")         /* xmm0     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("addps           0x70 + %[S2C], %%xmm4") \
+            __ASM_EMIT("mulps           %%xmm2, %%xmm0")                /* xmm0     = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("mulps           %%xmm6, %%xmm4") \
+            __ASM_EMIT("addps           0x80 + %[S2C], %%xmm0")         /* xmm0     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("addps           0x80 + %[S2C], %%xmm4") \
+            __ASM_EMIT("mulps           %%xmm2, %%xmm0")                /* xmm0     = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("mulps           %%xmm6, %%xmm4") \
+            __ASM_EMIT("addps           0x90 + %[S2C], %%xmm0")         /* xmm0     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("addps           0x90 + %[S2C], %%xmm4") \
+            __ASM_EMIT("mulps           %%xmm2, %%xmm0")                /* xmm0     = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("mulps           %%xmm6, %%xmm4") \
+            __ASM_EMIT("addps           0xa0 + %[S2C], %%xmm0")         /* xmm0     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("addps           0xa0 + %[S2C], %%xmm4") \
+            __ASM_EMIT("mulps           %%xmm1, %%xmm0")                /* xmm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */ \
+            __ASM_EMIT("mulps           %%xmm5, %%xmm4")
+
+        #define SINF_X_PLUS_PI_2_CORE_X4              \
+            /* xmm0 = X = x + PI/2 */               \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm1")                /* xmm1     = X */ \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm3")                /* xmm3     = X */ \
+            __ASM_EMIT("mulps           0x20 + %[S2C], %%xmm1")         /* xmm1     = X / (2*PI) */ \
+            __ASM_EMIT("psrad           $31, %%xmm3")                   /* xmm3     = [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("cvttps2dq       %%xmm1, %%xmm1")                /* xmm1     = int(X / (2*PI)) */ \
+            __ASM_EMIT("paddd           %%xmm3, %%xmm1")                /* xmm1     = int(X / (2*PI)) + [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("cvtdq2ps        %%xmm1, %%xmm1")                /* xmm1     = period = int(X / (2*PI)) [ X < 0.0 ] ? -1 : 0 */ \
+            __ASM_EMIT("mulps           0x30 + %[S2C], %%xmm1")         /* xmm1     = period * 2 * PI */ \
+            __ASM_EMIT("subps           %%xmm1, %%xmm0")                /* xmm0     = Y = X - period * 2 * PI */ \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm2")                /* xmm2     = Y */ \
+            __ASM_EMIT("movaps          0x40 + %[S2C], %%xmm1")         /* xmm1     = 3*PI/2 */ \
+            __ASM_EMIT("cmpps           $1, 0x10 + %[S2C], %%xmm2")     /* xmm2     = [ Y < PI ] */ \
+            __ASM_EMIT("subps           %%xmm0, %%xmm1")                /* xmm1     = 3*PI/2 - Y */ \
+            __ASM_EMIT("subps           0x00 + %[S2C], %%xmm0")         /* xmm0     = Y - PI/2 */ \
+            __ASM_EMIT("andps           %%xmm2, %%xmm0")                /* xmm0     = (Y - PI/2) & [ Y < PI ] */ \
+            __ASM_EMIT("andnps          %%xmm1, %%xmm2")                /* xmm2     = (3*PI/2 - Y) & [ Y >= PI ] */ \
+            __ASM_EMIT("orps            %%xmm2, %%xmm0")                /* xmm0     = XX = [ Y < PI ] ? (Y - PI/2) : (3*PI/2 - Y) */ \
+            /* xmm0     = XX1 */ \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm1")                /* xmm1     = XX */ \
+            __ASM_EMIT("mulps           %%xmm0, %%xmm0")                /* xmm0     = X2 = XX*XX */ \
+            __ASM_EMIT("movaps          %%xmm0, %%xmm2")                /* xmm2     = X2 */ \
+            __ASM_EMIT("mulps           0x50 + %[S2C], %%xmm0")         /* xmm0     = X2*C0 */ \
+            __ASM_EMIT("addps           0x60 + %[S2C], %%xmm0")         /* xmm0     = C1 + X2*C0 */ \
+            __ASM_EMIT("mulps           %%xmm2, %%xmm0")                /* xmm0     = X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("addps           0x70 + %[S2C], %%xmm0")         /* xmm0     = C2 + X2*(C1 + X2*C0) */ \
+            __ASM_EMIT("mulps           %%xmm2, %%xmm0")                /* xmm0     = X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("addps           0x80 + %[S2C], %%xmm0")         /* xmm0     = C3 + X2*(C2 + X2*(C1 + X2*C0)) */ \
+            __ASM_EMIT("mulps           %%xmm2, %%xmm0")                /* xmm0     = X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("addps           0x90 + %[S2C], %%xmm0")         /* xmm0     = C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))) */ \
+            __ASM_EMIT("mulps           %%xmm2, %%xmm0")                /* xmm0     = X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("addps           0xa0 + %[S2C], %%xmm0")         /* xmm0     = 1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0)))) */ \
+            __ASM_EMIT("mulps           %%xmm1, %%xmm0")                /* xmm0     = sinf(x) = XX * (1.0 + X2*(C4 + X2*(C3 + X2*(C2 + X2*(C1 + X2*C0))))) */
+
+        void sinf1(float *dst, size_t count)
+        {
+            IF_ARCH_X86(float *src);
+
+            ARCH_X86_ASM(
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("movaps          0x00 + %[S2C], %%xmm1")         // xmm1     = PI/2
+                __ASM_EMIT("movups          0x00(%[dst]), %%xmm0")          // xmm0     = x1
+                __ASM_EMIT("movups          0x10(%[dst]), %%xmm4")          // xmm4     = x2
+                __ASM_EMIT("addps           %%xmm1, %%xmm0")                // xmm0     = x1 + PI/2
+                __ASM_EMIT("addps           %%xmm1, %%xmm4")                // xmm4     = x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("movups          %%xmm4, 0x10(%[dst])")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("movups          0x00(%[dst]), %%xmm0")          // xmm0     = x
+                __ASM_EMIT("addps           0x00 + %[S2C], %%xmm0")         // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             12f")
+                __ASM_EMIT("mov             %[dst], %[src]")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("movss           0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("movhps          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("addps           0x00 + %[S2C], %%xmm0")         // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("movss           %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("movhps          %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [src] "=&r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void sinf2(float *dst, const float *src, size_t count)
+        {
+            ARCH_X86_ASM(
+                // x8 blocks
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("movaps          0x00 + %[S2C], %%xmm1")         // xmm1     = PI/2
+                __ASM_EMIT("movups          0x00(%[src]), %%xmm0")          // xmm0     = x1
+                __ASM_EMIT("movups          0x10(%[src]), %%xmm4")          // xmm4     = x2
+                __ASM_EMIT("addps           %%xmm1, %%xmm0")                // xmm0     = x1 + PI/2
+                __ASM_EMIT("addps           %%xmm1, %%xmm4")                // xmm4     = x2 + PI/2
+                SINF_X_PLUS_PI_2_CORE_X8
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("movups          %%xmm4, 0x10(%[dst])")
+                __ASM_EMIT("add             $0x20, %[src]")
+                __ASM_EMIT("add             $0x20, %[dst]")
+                __ASM_EMIT("sub             $8, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // x4 block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jl              4f")
+                __ASM_EMIT("movups          0x00(%[src]), %%xmm0")          // xmm0     = x
+                __ASM_EMIT("addps           0x00 + %[S2C], %%xmm0")         // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[src]")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("4:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             12f")
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("movss           0x00(%[src]), %%xmm0")
+                __ASM_EMIT("add             $4, %[src]")
+                __ASM_EMIT("6:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              8f")
+                __ASM_EMIT("movhps          0x00(%[src]), %%xmm0")
+                __ASM_EMIT("8:")
+                __ASM_EMIT("addps           0x00 + %[S2C], %%xmm0")         // xmm0     = x + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              10f")
+                __ASM_EMIT("movss           %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("10:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              12f")
+                __ASM_EMIT("movhps          %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("12:")
+
+                : [dst] "+r" (dst), [src] "+r" (src), [count] "+r" (count)
+                : [S2C] "o" (sinf_const)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+        void sinf_kp1(float *dst, float k, float p, size_t count)
+        {
+            ARCH_X86_ASM(
+                // Prepare
+                __ASM_EMIT("movss           %[k], %%xmm6")                  // xmm6     = k
+                __ASM_EMIT("movss           %[p], %%xmm7")                  // xmm7     = p
+                __ASM_EMIT("shufps          $0x00, %%xmm6, %%xmm6")         // xmm6     = k k k k
+                __ASM_EMIT("shufps          $0x00, %%xmm7, %%xmm7")         // xmm7     = p p p p
+                __ASM_EMIT("movaps          0x00 + %[S2KP], %%xmm4")        // xmm4     = i = 0 1 2 3
+                __ASM_EMIT("movaps          0x10 + %[S2KP], %%xmm5")        // xmm5     = step = 4 4 4 4
+                __ASM_EMIT("addps           0x00 + %[S2C], %%xmm7")         // xmm7     = p+PI/2 p+PI/2 p+PI/2 p+PI/2
+                // x4 blocks
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("jb              2f")
+                __ASM_EMIT("1:")
+                __ASM_EMIT("movaps          %%xmm4, %%xmm0")                // xmm0     = i
+                __ASM_EMIT("mulps           %%xmm6, %%xmm0")                // xmm0     = k*i
+                __ASM_EMIT("addps           %%xmm5, %%xmm4")                // xmm4     = i + step
+                __ASM_EMIT("addps           %%xmm7, %%xmm0")                // xmm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("movups          %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("add             $0x10, %[dst]")
+                __ASM_EMIT("sub             $4, %[count]")
+                __ASM_EMIT("jae             1b")
+                __ASM_EMIT("2:")
+                // Tail: 1x-3x block
+                __ASM_EMIT("add             $4, %[count]")
+                __ASM_EMIT("jle             6f")
+                __ASM_EMIT("movaps          %%xmm4, %%xmm0")                // xmm0     = i
+                __ASM_EMIT("mulps           %%xmm6, %%xmm0")                // xmm0     = k*i
+                __ASM_EMIT("addps           %%xmm7, %%xmm0")                // xmm0     = k*i + p + PI/2
+                SINF_X_PLUS_PI_2_CORE_X4
+                __ASM_EMIT("test            $1, %[count]")
+                __ASM_EMIT("jz              4f")
+                __ASM_EMIT("movss           %%xmm0, 0x00(%[dst])")
+                __ASM_EMIT("shufps          $0x39, %%xmm0, %%xmm0")         // xmm0     = S1 S2 S3 S0
+                __ASM_EMIT("add             $4, %[dst]")
+                __ASM_EMIT("4:")
+                __ASM_EMIT("test            $2, %[count]")
+                __ASM_EMIT("jz              6f")
+                __ASM_EMIT("movlps          %%xmm0, 0x00(%[dst])")
+                // End
+                __ASM_EMIT("6:")
+
+                : [dst] "+r" (dst), [count] "+r" (count)
+                : [S2C] "o" (sinf_const),
+                  [S2KP] "o" (kp_gen_const),
+                  [k] "m" (k),
+                  [p] "m" (p)
+                : "cc", "memory",
+                  "%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                  "%xmm4", "%xmm5", "%xmm6", "%xmm7"
+            );
+        }
+
+    } /* namespace sse2 */
+} /* namespace lsp */
+
+
+
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_PMATH_SIN_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse2/pmath.h	2025-08-26 18:15:43.750003058 +0000
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_PMATH_H_
+#define PRIVATE_DSP_ARCH_X86_SSE2_PMATH_H_
+
+#ifndef PRIVATE_DSP_ARCH_X86_SSE2_IMPL
+    #error "This header should not be included directly"
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_IMPL */
+
+#include <private/dsp/arch/x86/sse2/pmath/cos.h>
+#include <private/dsp/arch/x86/sse2/pmath/lanczos.h>
+#include <private/dsp/arch/x86/sse2/pmath/op_kx.h>
+#include <private/dsp/arch/x86/sse2/pmath/op_vv.h>
+#include <private/dsp/arch/x86/sse2/pmath/fmop_kx.h>
+#include <private/dsp/arch/x86/sse2/pmath/fmop_vv.h>
+#include <private/dsp/arch/x86/sse2/pmath/exp.h>
+#include <private/dsp/arch/x86/sse2/pmath/log.h>
+#include <private/dsp/arch/x86/sse2/pmath/pow.h>
+#include <private/dsp/arch/x86/sse2/pmath/sin.h>
+
+#endif /* PRIVATE_DSP_ARCH_X86_SSE2_PMATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse3/3dmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse3/3dmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse3/3dmath.h	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse3/3dmath.h	2025-08-26 18:15:43.754003019 +0000
@@ -182,7 +182,7 @@ namespace lsp
 
         size_t colocation_x3_v1p3(const vector3d_t *pl, const point3d_t *p0, const point3d_t *p1, const point3d_t *p2)
         {
-            float x0, x1, x2, x3, x4;
+            float x0, x1, x2, x3;
             float res[4] __lsp_aligned16;
 
             ARCH_X86_ASM
@@ -214,8 +214,7 @@ namespace lsp
                 __ASM_EMIT("lea         (%[p1], %[p2], 4), %[p1]")
                 __ASM_EMIT("lea         (%[p0], %[p1], 4), %[p0]")
                 : [p0] "+r" (p0), [p1] "+r" (p1), [p2] "+r" (p2),
-                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
                 : [pl] "r" (pl),
                   [res] "r" (res),
                   [PTOL] "m" (X_3D_TOLERANCE),
@@ -229,7 +228,7 @@ namespace lsp
 
         size_t colocation_x3_v1pv(const vector3d_t *pl, const point3d_t *pv)
         {
-            float x0, x1, x2, x3, x4;
+            float x0, x1, x2, x3;
             float res[4] __lsp_aligned16;
             size_t pt;
 
@@ -262,8 +261,7 @@ namespace lsp
                 __ASM_EMIT("lea         (%[pl], %[pv], 4), %[pl]")
                 __ASM_EMIT("lea         (%[pt], %[pl], 4), %[pt]")
                 : [pl] "+r" (pl), [pv] "+r" (pv), [pt] "=&r" (pt),
-                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
                 : [res] "r" (res),
                   [PTOL] "m" (X_3D_TOLERANCE),
                   [MTOL] "m" (X_3D_MTOLERANCE),
@@ -276,7 +274,7 @@ namespace lsp
 
         size_t colocation_x3_v3p1(const vector3d_t *v0, const vector3d_t *v1, const vector3d_t *v2, const point3d_t *p)
         {
-            float x0, x1, x2, x3, x4;
+            float x0, x1, x2, x3;
             float res[4] __lsp_aligned16;
 
             ARCH_X86_ASM
@@ -309,8 +307,7 @@ namespace lsp
                 __ASM_EMIT("lea         (%[v0], %[v1], 4), %[v0]")
 
                 : [v0] "+r" (v0), [v1] "+r" (v1), [v2] "+r" (v2),
-                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
                 : [p] "r" (p),
                   [res] "r" (res),
                   [PTOL] "m" (X_3D_TOLERANCE),
@@ -324,7 +321,7 @@ namespace lsp
 
         size_t colocation_x3_vvp1(const vector3d_t *vv, const point3d_t *p)
         {
-            float x0, x1, x2, x3, x4;
+            float x0, x1, x2, x3;
             float res[4] __lsp_aligned16;
             size_t pt;
 
@@ -358,8 +355,7 @@ namespace lsp
                 __ASM_EMIT("lea         (%[pt], %[vv], 4), %[pt]")
 
                 : [p] "+r" (p), [vv] "+r" (vv), [pt] "=&r" (pt),
-                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4)
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3)
                 : [res] "r" (res),
                   [PTOL] "m" (X_3D_TOLERANCE),
                   [MTOL] "m" (X_3D_MTOLERANCE),
@@ -487,6 +483,365 @@ namespace lsp
                 __ASM_EMIT("por         %[x1], %[x0]")
                 __ASM_EMIT32("movd      %[x0], %[t0]")
                 __ASM_EMIT64("movd      %[x0], %k[t0]")
+
+                : [t0] "=&r" (t0),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [pl] "r" (pl), [pv] "r" (pv),
+                  [k] "r" (k),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [ICULL3] "m" (ICULL3)
+                : "cc", "memory"
+            );
+
+            #define STR_COPY_TO(tgt) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x00(%[src]), %[x0]") \
+                    __ASM_EMIT("movups      0x10(%[src]), %[x1]") \
+                    __ASM_EMIT("movups      0x20(%[src]), %[x2]") \
+                    __ASM_EMIT("movups      %[x0], 0x00(%[dst])") \
+                    __ASM_EMIT("movups      %[x1], 0x10(%[dst])") \
+                    __ASM_EMIT("movups      %[x2], 0x20(%[dst])") \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2) \
+                    : [dst] "r" (tgt), \
+                      [src] "r" (pv) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_1P(off0, off1, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x1]")      /* xmm1 = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("movups      (%[pl]), %[x2]")                /* xmm2 = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("subps       %[x0], %[x1]")                  /* xmm1 = d = p1 - p0 = dx dy dz 0 */ \
+                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x3]")       /* xmm3 = k 0 0 0 */ \
+                    __ASM_EMIT("mulps       %[x1], %[x2]")                  /* xmm2 = dx*nx dy*ny dz*nz 0 */ \
+                    __ASM_EMIT("shufps      $0x00, %[x3], %[x3]")           /* xmm3 = k k k k */ \
+                    __ASM_EMIT("haddps      %[x2], %[x2]")                  /* xmm2 = dx*nx+dy*ny dz*nz dx*nx+dy*ny dz*nz */ \
+                    __ASM_EMIT("mulps       %[x3], %[x1]")                  /* xmm1 = k*dx k*dy k*dz 0 */ \
+                    __ASM_EMIT("haddps      %[x2], %[x2]")                  /* xmm2 = dx*nx+dy*ny+dz*nz = b b b b */ \
+                    __ASM_EMIT("divps       %[x2], %[x1]")                  /* xmm1 = k*dx/b k*dy/b k*dz/b 0 */ \
+                    __ASM_EMIT("subps       %[x1], %[x0]")                  /* xmm0 = lx0-k*dx/b ly0-k*dy/b lz0-k*dz/b 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4) \
+                    : [st] "r" (pv), [pl] "r" (pl), [out] "r" (out), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_2P(off0, off1, off2, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x2]")      /* xmm2 = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("movups      0x" off2 "(%[st]), %[x3]")      /* xmm3 = p2 = lx2 ly2 lz2 1 */ \
+                    __ASM_EMIT("movups      (%[pl]), %[x4]")                /* xmm4 = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("movaps      %[x0], %[x1]")                  /* xmm1 = pl = nx ny nz nw */ \
+                    __ASM_EMIT("movaps      %[x4], %[x5]")                  /* xmm5 = pl = nx ny nz nw */ \
+                    __ASM_EMIT("subps       %[x0], %[x2]")                  /* xmm2 = d1 = p1 - p0 = dx1 dy1 dz1 0 */ \
+                    __ASM_EMIT("subps       %[x1], %[x3]")                  /* xmm3 = d2 = p2 - p0 = dx2 dy2 dz2 0 */ \
+                    __ASM_EMIT("mulps       %[x2], %[x4]")                  /* xmm4 = dx1*nx dy1*ny dz1*nz 0 */ \
+                    __ASM_EMIT("mulps       %[x3], %[x5]")                  /* xmm5 = dx2*nx dy2*ny dz2*nz 0 */ \
+                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x6]")       /* xmm6 = k */ \
+                    __ASM_EMIT("haddps      %[x4], %[x4]")                  /* xmm4 = dx1*nx+dy1*ny dz1*nz dx1*nx+dy1*ny dz1*nz */ \
+                    __ASM_EMIT("haddps      %[x5], %[x5]")                  /* xmm5 = dx2*nx+dy2*ny dz2*nz dx2*nx+dy2*ny dz2*nz */ \
+                    __ASM_EMIT("shufps      $0x00, %[x6], %[x6]")           /* xmm6 = k k k k */ \
+                    __ASM_EMIT("haddps      %[x4], %[x4]")                  /* xmm4 = dx1*nx+dy1*ny+dz1*nz = b1 b1 b1 b1 */ \
+                    __ASM_EMIT("haddps      %[x5], %[x5]")                  /* xmm5 = dx2*nx+dy2*ny+dz2*nz = b2 b2 b2 b2 */ \
+                    __ASM_EMIT("divps       %[x4], %[x2]")                  /* xmm2 = dx1/b1 dy1/b1 dz1/b1 0 */ \
+                    __ASM_EMIT("divps       %[x5], %[x3]")                  /* xmm3 = dx2/b2 dy2/b2 dz2/b2 0 */ \
+                    __ASM_EMIT("mulps       %[x6], %[x2]")                  /* xmm2 = k*dx1/b1 k*dy1/b1 k*dz1/b1 0 */ \
+                    __ASM_EMIT("mulps       %[x6], %[x3]")                  /* xmm3 = k*dx2/b2 k*dy2/b2 k*dz2/b2 0 */ \
+                    __ASM_EMIT("subps       %[x2], %[x0]")                  /* xmm0 = lx0-k*dx1/b1 ly0-k*dy1/b1 lz0-k*dz1/b1 1 */ \
+                    __ASM_EMIT("subps       %[x3], %[x1]")                  /* xmm1 = lx1-k*dx2/b2 ly1-k*dy2/b2 lz1-k*dz2/b2 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), \
+                      [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7) \
+                    : [st] "r" (pv), [pl] "r" (pl), [out] "r" (out), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            switch (t0)
+            {
+                // 0 intersections, triangle is above
+                case 0x00:  // 0 0 0
+                case 0x01:  // 0 0 1
+                case 0x04:  // 0 1 0
+                case 0x05:  // 0 1 1
+                case 0x10:  // 1 0 0
+                case 0x11:  // 1 0 1
+                case 0x14:  // 1 1 0
+                case 0x15:  // 1 1 1
+                    STR_COPY_TO(out);
+                    ++(*n_out);
+                    break;
+
+                // 0 intersections, triangle is below
+                case 0x16:  // 1 1 2
+                case 0x19:  // 1 2 1
+                case 0x1a:  // 1 2 2
+                case 0x25:  // 2 1 1
+                case 0x26:  // 2 1 2
+                case 0x29:  // 2 2 1
+                case 0x2a:  // 2 2 2
+                    STR_COPY_TO(in);
+                    ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, counter-clockwise
+                case 0x06:  // 0 1 2
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x21:  // 2 0 1
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x18:  // 1 2 0
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, clockwise
+                case 0x24:  // 2 1 0
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x2], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x12:  // 1 0 2
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+                case 0x09:  // 0 2 1
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle below, 2 triangles above
+                case 0x02:  // 0 0 2
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                        __ASM_EMIT("movups      %[x4], 0x30(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x50(%[out])")
+                    );
+                    (*n_out) += 2; ++(*n_in);
+                    break;
+                case 0x08:  // 0 2 0
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
+                        __ASM_EMIT("movups      %[x2], 0x30(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x40(%[out])")
+                        __ASM_EMIT("movups      %[x4], 0x50(%[out])")
+                    );
+                    (*n_out) += 2; ++(*n_in);
+                    break;
+                case 0x20:  // 2 0 0
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                        __ASM_EMIT("movups      %[x3], 0x30(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[out])")
+                        __ASM_EMIT("movups      %[x2], 0x50(%[out])")
+                    );
+                    (*n_out) += 2; ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle above, 2 triangles below
+                case 0x28:  // 2 2 0
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x50(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
+                    );
+                    ++(*n_out); (*n_in) += 2;
+                    break;
+
+                case 0x22:  // 2 0 2
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x50(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[out])")
+                    );
+                    ++(*n_out); (*n_in) += 2;
+                    break;
+
+                case 0x0a:  // 0 2 2
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x50(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[out])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[out])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[out])")
+                    );
+                    ++(*n_out); (*n_in) += 2;
+                    break;
+
+                default:
+                    break;
+            }
+
+            #undef STR_COPY_TO
+            #undef STR_SPLIT_1P
+            #undef STR_SPLIT_2P
+        }
+
+        void split_triangle_raw_ssse3(
+                raw_triangle_t *out,
+                size_t *n_out,
+                raw_triangle_t *in,
+                size_t *n_in,
+                const vector3d_t *pl,
+                const raw_triangle_t *pv
+            )
+        {
+            float    x0, x1, x2, x3, x4, x5, x6, x7;
+            float    k[4] __lsp_aligned16;
+            size_t   t0;
+
+            in     += *n_in;
+            out    += *n_out;
+
+            // Estimate co-location of triangle and point
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[pl]), %[x3]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
+                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
+                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = p2    */
+
+                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = p0 * pl = sx0 sy0 sz0 sw0 */
+                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = p1 * pl = sx1 sy1 sz1 sw1 */
+                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = p2 * pl = sx2 sy2 sz2 sw2 */
+                __ASM_EMIT("haddps      %[x1], %[x0]")          /* xmm0 = sx0+sy0 sz0+sw0 sx1+sy1 sz1+sw1 */
+                __ASM_EMIT("haddps      %[x2], %[x2]")          /* xmm2 = sx2+sy2 sz2+sw2 sx2+sy2 sz2+sw2 */
+                __ASM_EMIT("haddps      %[x2], %[x0]")          /* xmm0 = sx0+sy0+sz0+sw0 sx1+sy1+sz1+sw1 sx2+sy2+sz2+sw2 sx2+sy2+sz2+sw2 = k0 k1 k2 k2 */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 k2 */
+                __ASM_EMIT("movaps      %[x0], (%[k])")         /* *k   = xmm0 */
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL k2 <= +TOL */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL k2 < -TOL */
+                __ASM_EMIT("pand        %[ICULL3], %[x0]")      /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] 0 */
+                __ASM_EMIT("pand        %[ICULL3], %[x1]")      /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] 0 */
+                __ASM_EMIT("paddd       %[x1], %[x0]")          /* xmm0 = x0 x1 x2 0 */
+                __ASM_EMIT("phaddd      %[x0], %[x0]")          /* xmm0 = x0+x1 x2+0 x0+x1 x2+0 */
+                __ASM_EMIT("phaddd      %[x0], %[x0]")          /* xmm0 = x0+x1+x2+0 x0+x1+x2+0 x0+x1+x2+0 */
+                __ASM_EMIT32("movd      %[x0], %[t0]")
+                __ASM_EMIT64("movd      %[x0], %k[t0]")
+
                 : [t0] "=&r" (t0),
                   [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
                   [x4] "=&x" (x4)
@@ -1099,7 +1454,300 @@ namespace lsp
             #undef STR_SPLIT_1P
             #undef STR_SPLIT_2P
         }
-    }
-}
+
+        void cull_triangle_raw_ssse3(
+                raw_triangle_t *in,
+                size_t *n_in,
+                const vector3d_t *pl,
+                const raw_triangle_t *pv
+            )
+        {
+            float    x0, x1, x2, x3, x4, x5, x6, x7;
+            float    k[4] __lsp_aligned16;
+            size_t   t0;
+
+            in     += *n_in;
+
+            // Estimate co-location of triangle and point
+            ARCH_X86_ASM
+            (
+                __ASM_EMIT("movups      (%[pl]), %[x3]")        /* xmm3 = pl    */
+                __ASM_EMIT("movups      0x00(%[pv]), %[x0]")    /* xmm0 = p0    */
+                __ASM_EMIT("movups      0x10(%[pv]), %[x1]")    /* xmm1 = p1    */
+                __ASM_EMIT("movups      0x20(%[pv]), %[x2]")    /* xmm2 = p2    */
+
+                __ASM_EMIT("mulps       %[x3], %[x0]")          /* xmm0 = p0 * pl = sx0 sy0 sz0 sw0 */
+                __ASM_EMIT("mulps       %[x3], %[x1]")          /* xmm1 = p1 * pl = sx1 sy1 sz1 sw1 */
+                __ASM_EMIT("mulps       %[x3], %[x2]")          /* xmm2 = p2 * pl = sx2 sy2 sz2 sw2 */
+                __ASM_EMIT("haddps      %[x1], %[x0]")          /* xmm0 = sx0+sy0 sz0+sw0 sx1+sy1 sz1+sw1 */
+                __ASM_EMIT("haddps      %[x2], %[x2]")          /* xmm2 = sx2+sy2 sz2+sw2 sx2+sy2 sz2+sw2 */
+                __ASM_EMIT("haddps      %[x2], %[x0]")          /* xmm0 = sx0+sy0+sz0+sw0 sx1+sy1+sz1+sw1 sx2+sy2+sz2+sw2 sx2+sy2+sz2+sw2 = k0 k1 k2 k2 */
+                __ASM_EMIT("movaps      %[x0], %[x1]")          /* xmm1 = k0 k1 k2 k2 */
+                __ASM_EMIT("movaps      %[x0], (%[k])")         /* *k   = xmm0 */
+                __ASM_EMIT("cmpps       $2, %[PTOL], %[x0]")    /* xmm0 = k0 <= +TOL k1 <= +TOL k2 <= +TOL k2 <= +TOL */
+                __ASM_EMIT("cmpps       $1, %[MTOL], %[x1]")    /* xmm1 = k0 < -TOL  k1 < -TOL k2 < -TOL k2 < -TOL */
+                __ASM_EMIT("pand        %[ICULL3], %[x0]")      /* xmm0 = 1*[k0 <= +TOL] 1*[k1 <= +TOL] 1*[k2 <= +TOL] 0 */
+                __ASM_EMIT("pand        %[ICULL3], %[x1]")      /* xmm1 = 1*[k0 < -TOL] 1*[k1 < -TOL] 1*[k2 < -TOL] 0 */
+                __ASM_EMIT("paddd       %[x1], %[x0]")          /* xmm0 = x0 x1 x2 0 */
+                __ASM_EMIT("phaddd      %[x0], %[x0]")          /* xmm0 = x0+x1 x2+0 x0+x1 x2+0 */
+                __ASM_EMIT("phaddd      %[x0], %[x0]")          /* xmm0 = x0+x1+x2+0 x0+x1+x2+0 x0+x1+x2+0 */
+                __ASM_EMIT32("movd      %[x0], %[t0]")
+                __ASM_EMIT64("movd      %[x0], %k[t0]")
+
+                : [t0] "=&r" (t0),
+                  [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
+                  [x4] "=&x" (x4)
+                : [pl] "r" (pl), [pv] "r" (pv),
+                  [k] "r" (k),
+                  [PTOL] "m" (X_3D_TOLERANCE),
+                  [MTOL] "m" (X_3D_MTOLERANCE),
+                  [ICULL3] "m" (ICULL3)
+                : "cc", "memory"
+            );
+
+            #define STR_COPY_TO(tgt) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x00(%[src]), %[x0]") \
+                    __ASM_EMIT("movups      0x10(%[src]), %[x1]") \
+                    __ASM_EMIT("movups      0x20(%[src]), %[x2]") \
+                    __ASM_EMIT("movups      %[x0], 0x00(%[dst])") \
+                    __ASM_EMIT("movups      %[x1], 0x10(%[dst])") \
+                    __ASM_EMIT("movups      %[x2], 0x20(%[dst])") \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2) \
+                    : [dst] "r" (tgt), \
+                      [src] "r" (pv) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_1P(off0, off1, koff, store) \
+                ARCH_X86_ASM( \
+                    __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
+                    __ASM_EMIT("movups      0x" off1 "(%[st]), %[x1]")      /* xmm1 = p1 = lx1 ly1 lz1 1 */ \
+                    __ASM_EMIT("movups      (%[pl]), %[x2]")                /* xmm2 = pl = nx ny nz nw */ \
+                    \
+                    __ASM_EMIT("subps       %[x0], %[x1]")                  /* xmm1 = d = p1 - p0 = dx dy dz 0 */ \
+                    __ASM_EMIT("movss       0x" koff "(%[k]), %[x3]")       /* xmm3 = k 0 0 0 */ \
+                    __ASM_EMIT("mulps       %[x1], %[x2]")                  /* xmm2 = dx*nx dy*ny dz*nz 0 */ \
+                    __ASM_EMIT("shufps      $0x00, %[x3], %[x3]")           /* xmm3 = k k k k */ \
+                    __ASM_EMIT("haddps      %[x2], %[x2]")                  /* xmm2 = dx*nx+dy*ny dz*nz dx*nx+dy*ny dz*nz */ \
+                    __ASM_EMIT("mulps       %[x3], %[x1]")                  /* xmm1 = k*dx k*dy k*dz 0 */ \
+                    __ASM_EMIT("haddps      %[x2], %[x2]")                  /* xmm2 = dx*nx+dy*ny+dz*nz = b b b b */ \
+                    __ASM_EMIT("divps       %[x2], %[x1]")                  /* xmm1 = k*dx/b k*dy/b k*dz/b 0 */ \
+                    __ASM_EMIT("subps       %[x1], %[x0]")                  /* xmm0 = lx0-k*dx/b ly0-k*dy/b lz0-k*dz/b 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), [x4] "=&x" (x4) \
+                    : [st] "r" (pv), [pl] "r" (pl), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            #define STR_SPLIT_2P(off0, off1, off2, koff, store) \
+                ARCH_X86_ASM( \
+                        __ASM_EMIT("movups      0x" off0 "(%[st]), %[x0]")      /* xmm0 = p0 = lx0 ly0 lz0 1 */ \
+                        __ASM_EMIT("movups      0x" off1 "(%[st]), %[x2]")      /* xmm2 = p1 = lx1 ly1 lz1 1 */ \
+                        __ASM_EMIT("movups      0x" off2 "(%[st]), %[x3]")      /* xmm3 = p2 = lx2 ly2 lz2 1 */ \
+                        __ASM_EMIT("movups      (%[pl]), %[x4]")                /* xmm4 = pl = nx ny nz nw */ \
+                        \
+                        __ASM_EMIT("movaps      %[x0], %[x1]")                  /* xmm1 = pl = nx ny nz nw */ \
+                        __ASM_EMIT("movaps      %[x4], %[x5]")                  /* xmm5 = pl = nx ny nz nw */ \
+                        __ASM_EMIT("subps       %[x0], %[x2]")                  /* xmm2 = d1 = p1 - p0 = dx1 dy1 dz1 0 */ \
+                        __ASM_EMIT("subps       %[x1], %[x3]")                  /* xmm3 = d2 = p2 - p0 = dx2 dy2 dz2 0 */ \
+                        __ASM_EMIT("mulps       %[x2], %[x4]")                  /* xmm4 = dx1*nx dy1*ny dz1*nz 0 */ \
+                        __ASM_EMIT("mulps       %[x3], %[x5]")                  /* xmm5 = dx2*nx dy2*ny dz2*nz 0 */ \
+                        __ASM_EMIT("movss       0x" koff "(%[k]), %[x6]")       /* xmm6 = k */ \
+                        __ASM_EMIT("haddps      %[x4], %[x4]")                  /* xmm4 = dx1*nx+dy1*ny dz1*nz dx1*nx+dy1*ny dz1*nz */ \
+                        __ASM_EMIT("haddps      %[x5], %[x5]")                  /* xmm5 = dx2*nx+dy2*ny dz2*nz dx2*nx+dy2*ny dz2*nz */ \
+                        __ASM_EMIT("shufps      $0x00, %[x6], %[x6]")           /* xmm6 = k k k k */ \
+                        __ASM_EMIT("haddps      %[x4], %[x4]")                  /* xmm4 = dx1*nx+dy1*ny+dz1*nz = b1 b1 b1 b1 */ \
+                        __ASM_EMIT("haddps      %[x5], %[x5]")                  /* xmm5 = dx2*nx+dy2*ny+dz2*nz = b2 b2 b2 b2 */ \
+                        __ASM_EMIT("divps       %[x4], %[x2]")                  /* xmm2 = dx1/b1 dy1/b1 dz1/b1 0 */ \
+                        __ASM_EMIT("divps       %[x5], %[x3]")                  /* xmm3 = dx2/b2 dy2/b2 dz2/b2 0 */ \
+                        __ASM_EMIT("mulps       %[x6], %[x2]")                  /* xmm2 = k*dx1/b1 k*dy1/b1 k*dz1/b1 0 */ \
+                        __ASM_EMIT("mulps       %[x6], %[x3]")                  /* xmm3 = k*dx2/b2 k*dy2/b2 k*dz2/b2 0 */ \
+                        __ASM_EMIT("subps       %[x2], %[x0]")                  /* xmm0 = lx0-k*dx1/b1 ly0-k*dy1/b1 lz0-k*dz1/b1 1 */ \
+                        __ASM_EMIT("subps       %[x3], %[x1]")                  /* xmm1 = lx1-k*dx2/b2 ly1-k*dy2/b2 lz1-k*dz2/b2 1 */ \
+                    \
+                    store \
+                    \
+                    : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3), \
+                      [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7) \
+                    : [st] "r" (pv), [pl] "r" (pl), [in] "r" (in), \
+                      [k] "r" (k) \
+                    : "cc", "memory" \
+                );
+
+            switch (t0)
+            {
+                // 0 intersections, triangle is above
+                case 0x00:  // 0 0 0
+                case 0x01:  // 0 0 1
+                case 0x04:  // 0 1 0
+                case 0x05:  // 0 1 1
+                case 0x10:  // 1 0 0
+                case 0x11:  // 1 0 1
+                case 0x14:  // 1 1 0
+                case 0x15:  // 1 1 1
+                    break;
+
+                // 0 intersections, triangle is below
+                case 0x16:  // 1 1 2
+                case 0x19:  // 1 2 1
+                case 0x1a:  // 1 2 2
+                case 0x25:  // 2 1 1
+                case 0x26:  // 2 1 2
+                case 0x29:  // 2 2 1
+                case 0x2a:  // 2 2 2
+                    STR_COPY_TO(in);
+                    ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, counter-clockwise
+                case 0x06:  // 0 1 2
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x21:  // 2 0 1
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x18:  // 1 2 0
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+
+                // 1 intersection, 1 triangle above, 1 triangle below, clockwise
+                case 0x24:  // 2 1 0
+                    STR_SPLIT_1P("00", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x12:  // 1 0 2
+                    STR_SPLIT_1P("00", "10", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x1], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x09:  // 0 2 1
+                    STR_SPLIT_1P("10", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x1]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x2]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle below, 2 triangles above
+                case 0x02:  // 0 0 2
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x08:  // 0 2 0
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+                case 0x20:  // 2 0 0
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                    );
+                    ++(*n_in);
+                    break;
+
+                // 2 intersections, 1 triangle above, 2 triangles below
+                case 0x28:  // 2 2 0
+                    STR_SPLIT_2P("00", "10", "20", "00",
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x3], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x50(%[in])")
+                    );
+                    (*n_in) += 2;
+                    break;
+
+                case 0x22:  // 2 0 2
+                    STR_SPLIT_2P("10", "00", "20", "04",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x20(%[st]), %[x4]")
+                        __ASM_EMIT("movups      %[x4], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x4], 0x50(%[in])")
+                    );
+                    (*n_in) += 2;
+                    break;
+
+                case 0x0a:  // 0 2 2
+                    STR_SPLIT_2P("20", "00", "10", "08",
+                        __ASM_EMIT("movups      0x00(%[st]), %[x2]")
+                        __ASM_EMIT("movups      0x10(%[st]), %[x3]")
+                        __ASM_EMIT("movups      %[x2], 0x00(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x10(%[in])")
+                        __ASM_EMIT("movups      %[x0], 0x20(%[in])")
+                        __ASM_EMIT("movups      %[x3], 0x30(%[in])")
+                        __ASM_EMIT("movups      %[x1], 0x40(%[in])")
+                        __ASM_EMIT("movups      %[x2], 0x50(%[in])")
+                    );
+                    (*n_in) += 2;
+                    break;
+
+                default:
+                    break;
+            }
+
+            #undef STR_COPY_TO
+            #undef STR_SPLIT_1P
+            #undef STR_SPLIT_2P
+        }
+    } /* namespace sse3 */
+} /* namespace lsp */
 
 #endif /* PRIVATE_DSP_ARCH_X86_SSE3_3DMATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse4/3dmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse4/3dmath.h
--- 1.2.21-5/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse4/3dmath.h	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse4/3dmath.h	2025-08-26 18:15:43.754003019 +0000
@@ -260,65 +260,6 @@ namespace lsp
             );
         }
 
-        float check_point3d_on_triangle_tp(const triangle3d_t *t, const point3d_t *p)
-        {
-            float x0, x1, x2, x3, x4, x5, x6, x7;
-
-            ARCH_X86_ASM
-            (
-                /* Load vectors */
-                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz pw */
-                __ASM_EMIT("movups      0x00(%[t]), %[x0]")     /* xmm0 = x0 y0 z0 w0 */
-                __ASM_EMIT("movups      0x10(%[t]), %[x1]")     /* xmm1 = x1 y1 z1 w1 */
-                __ASM_EMIT("movups      0x20(%[t]), %[x2]")     /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = dx2 dy2 dz2 dw2 */
-                /* 3x vector multiplications */
-                VECTOR_MUL3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
-                /* 3x scalar multiplications */
-                SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
-                /* Compare with zeros */
-                __ASM_EMIT("xorps       %[x4], %[x4]")
-                __ASM_EMIT("ucomiss     %[x4], %[x0]")
-                __ASM_EMIT("jb          110f")
-                __ASM_EMIT("ucomiss     %[x4], %[x1]")
-                __ASM_EMIT("jb          109f")
-                __ASM_EMIT("ucomiss     %[x4], %[x2]")
-                __ASM_EMIT("jb          108f")
-                __ASM_EMIT("mulss       %[x1], %[x0]")
-                __ASM_EMIT("mulss       %[x2], %[x0]")
-                __ASM_EMIT("ucomiss     %[x4], %[x0]")
-                __ASM_EMIT("jne         110f")
-                /* There is somewhere zero, need additional check */
-                /* Load vectors */
-                __ASM_EMIT("movups      (%[p]), %[x3]")         /* xmm3 = px py pz pw */
-                __ASM_EMIT("movups      0x00(%[t]), %[x0]")     /* xmm0 = x0 y0 z0 w0 */
-                __ASM_EMIT("movups      0x10(%[t]), %[x1]")     /* xmm1 = x1 y1 z1 w1 */
-                __ASM_EMIT("movups      0x20(%[t]), %[x2]")     /* xmm2 = x2 y2 z2 w2 */
-                __ASM_EMIT("subps       %[x3], %[x0]")          /* xmm0 = dx0 dy0 dz0 dw0 */
-                __ASM_EMIT("subps       %[x3], %[x1]")          /* xmm1 = dx1 dy1 dz1 dw1 */
-                __ASM_EMIT("subps       %[x3], %[x2]")          /* xmm2 = dx2 dy2 dz2 dw2 */
-                /* Do 3x scalar multiplications */
-                SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
-                __ASM_EMIT("mulss       %[x1], %[x0]")
-                __ASM_EMIT("mulss       %[x2], %[x0]")
-                __ASM_EMIT("jmp         110f")
-
-                __ASM_EMIT("108:")
-                __ASM_EMIT("movss       %[x2], %[x0]")
-                __ASM_EMIT("jmp         110f")
-                __ASM_EMIT("109:")
-                __ASM_EMIT("movss       %[x1], %[x0]")
-                __ASM_EMIT("110:")
-                : [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
-                  [x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)
-                : [p] "r" (p), [t] "r" (t)
-            );
-
-            return x0;
-        }
-
         float check_point3d_on_triangle_pvp(const point3d_t *pv, const point3d_t *p)
         {
             float x0, x1, x2, x3, x4, x5, x6, x7;
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-dsp-lib/make/tools.mk
--- 1.2.21-5/modules/lsp-dsp-lib/make/tools.mk	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/make/tools.mk	2025-08-26 18:15:43.754003019 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/modules.mk 1.2.23-0ubuntu1/modules/lsp-dsp-lib/modules.mk
--- 1.2.21-5/modules/lsp-dsp-lib/modules.mk	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/modules.mk	2025-08-26 18:15:43.754003019 +0000
@@ -19,13 +19,13 @@
 #
 
 # Variables that describe dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/project.mk 1.2.23-0ubuntu1/modules/lsp-dsp-lib/project.mk
--- 1.2.21-5/modules/lsp-dsp-lib/project.mk	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/project.mk	2025-08-26 18:15:43.754003019 +0000
@@ -23,4 +23,4 @@ ARTIFACT_ID                 = LSP_DSP_LI
 ARTIFACT_NAME               = lsp-dsp-lib
 ARTIFACT_DESC               = DSP library for digital signal processing
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.29
+ARTIFACT_VERSION            = 1.0.31
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/aarch64/asimd.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/aarch64/asimd.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/aarch64/asimd.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/aarch64/asimd.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -74,18 +74,7 @@
         #include <private/dsp/arch/aarch64/asimd/msmatrix.h>
         #include <private/dsp/arch/aarch64/asimd/pcomplex.h>
         #include <private/dsp/arch/aarch64/asimd/pfft.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/abs_vv.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/exp.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/fmop_kx.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/fmop_vv.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/log.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/lramp.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/minmax.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/op_kx.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/op_vv.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/pow.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/sqr.h>
-        #include <private/dsp/arch/aarch64/asimd/pmath/ssqrt.h>
+        #include <private/dsp/arch/aarch64/asimd/pmath.h>
         #include <private/dsp/arch/aarch64/asimd/resampling.h>
         #include <private/dsp/arch/aarch64/asimd/search/minmax.h>
         #include <private/dsp/arch/aarch64/asimd/search/iminmax.h>
@@ -302,6 +291,16 @@
                 EXPORT1(powvx1);
                 EXPORT1(powvx2);
 
+                EXPORT1(cosf1);
+                EXPORT1(cosf2);
+                EXPORT1(cosf_kp1);
+
+                EXPORT1(sinf1);
+                EXPORT1(sinf2);
+                EXPORT1(sinf_kp1);
+
+                EXPORT1(lanczos1);
+
                 EXPORT1(sqr1);
                 EXPORT1(sqr2);
                 EXPORT1(ssqrt1);
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/arm/neon-d32.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/arm/neon-d32.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/arm/neon-d32.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/arm/neon-d32.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -71,18 +71,7 @@
         #include <private/dsp/arch/arm/neon-d32/pan.h>
         #include <private/dsp/arch/arm/neon-d32/msmatrix.h>
         #include <private/dsp/arch/arm/neon-d32/pcomplex.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/abs_vv.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/exp.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/fmop_kx.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/fmop_vv.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/log.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/lramp.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/minmax.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/op_kx.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/op_vv.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/pow.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/sqr.h>
-        #include <private/dsp/arch/arm/neon-d32/pmath/ssqrt.h>
+        #include <private/dsp/arch/arm/neon-d32/pmath.h>
         #include <private/dsp/arch/arm/neon-d32/resampling.h>
         #include <private/dsp/arch/arm/neon-d32/search/iminmax.h>
         #include <private/dsp/arch/arm/neon-d32/search/minmax.h>
@@ -311,6 +300,16 @@
                 EXPORT1(ssqrt1);
                 EXPORT1(ssqrt2);
 
+                EXPORT1(cosf1);
+                EXPORT1(cosf2);
+                EXPORT1(cosf_kp1);
+
+                EXPORT1(sinf1);
+                EXPORT1(sinf2);
+                EXPORT1(sinf_kp1);
+
+                EXPORT1(lanczos1);
+
                 EXPORT1(h_sum);
                 EXPORT1(h_abs_sum);
                 EXPORT1(h_sqr_sum);
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/generic/generic.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/generic/generic.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/generic/generic.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/generic/generic.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -165,6 +165,14 @@ namespace lsp
             EXPORT1(ssqrt1);
             EXPORT1(ssqrt2);
 
+            EXPORT1(sinf1);
+            EXPORT1(sinf2);
+            EXPORT1(sinf_kp1);
+            EXPORT1(cosf1);
+            EXPORT1(cosf2);
+            EXPORT1(cosf_kp1);
+            EXPORT1(lanczos1);
+
             EXPORT1(lramp_set1);
             EXPORT1(lramp1);
             EXPORT1(lramp2);
@@ -490,10 +498,6 @@ namespace lsp
             EXPORT1(init_normal3d_dxyz);
             EXPORT1(init_normal3d);
 
-            EXPORT1(init_segment_xyz);
-            EXPORT1(init_segment_p2);
-            EXPORT1(init_segment_pv);
-
             EXPORT1(init_matrix3d);
             EXPORT1(init_matrix3d_zero);
             EXPORT1(init_matrix3d_one);
@@ -510,8 +514,6 @@ namespace lsp
             EXPORT1(init_matrix3d_lookat_p1v2);
             EXPORT1(init_matrix3d_lookat_p2v1);
             EXPORT1(init_matrix3d_orientation);
-            EXPORT1(calc_matrix3d_transform_r1);
-            EXPORT1(calc_matrix3d_transform_p1v1);
             EXPORT1(apply_matrix3d_mv2);
             EXPORT1(apply_matrix3d_mv1);
             EXPORT1(apply_matrix3d_mp2);
@@ -521,57 +523,23 @@ namespace lsp
             EXPORT1(transpose_matrix3d1);
             EXPORT1(transpose_matrix3d2);
 
-            EXPORT1(init_ray_xyz);
-            EXPORT1(init_ray_dxyz);
-            EXPORT1(init_ray_pdv);
-            EXPORT1(init_ray_p2);
-            EXPORT1(init_ray_pv);
-            EXPORT1(init_ray);
-            EXPORT1(calc_ray_xyz);
-            EXPORT1(calc_ray_dxyz);
-            EXPORT1(calc_ray_pdv);
-            EXPORT1(calc_ray_p2);
-            EXPORT1(calc_ray_pv);
-            EXPORT1(calc_ray);
-
-            EXPORT1(calc_triangle3d_params);
-            EXPORT1(init_triangle3d_xyz);
-            EXPORT1(init_triangle3d_p3);
-            EXPORT1(init_triangle3d_pv);
-            EXPORT1(init_triangle3d);
-            EXPORT1(calc_triangle3d_xyz);
-            EXPORT1(calc_triangle3d_p3);
-            EXPORT1(calc_triangle3d_pv);
-            EXPORT1(calc_triangle3d);
-
             EXPORT1(check_triplet3d_p3n);
             EXPORT1(check_triplet3d_pvn);
             EXPORT1(check_triplet3d_v2n);
             EXPORT1(check_triplet3d_vvn);
             EXPORT1(check_triplet3d_vv);
-            EXPORT1(check_triplet3d_t);
-            EXPORT1(check_triplet3d_tn);
 
             EXPORT1(check_point3d_on_triangle_p3p);
             EXPORT1(check_point3d_on_triangle_pvp);
-            EXPORT1(check_point3d_on_triangle_tp);
 
             EXPORT1(longest_edge3d_p3);
             EXPORT1(longest_edge3d_pv);
 
-            EXPORT1(calc_angle3d_v2);
-            EXPORT1(calc_angle3d_vv);
-
             EXPORT1(calc_normal3d_p3);
             EXPORT1(calc_normal3d_pv);
             EXPORT1(calc_normal3d_v2);
             EXPORT1(calc_normal3d_vv);
 
-            EXPORT1(move_point3d_p2);
-            EXPORT1(move_point3d_pv);
-
-            EXPORT1(calc_bound_box);
-
             EXPORT1(calc_plane_p3);
             EXPORT1(calc_plane_pv);
             EXPORT1(calc_plane_v1p2);
@@ -595,9 +563,6 @@ namespace lsp
             EXPORT1(calc_distance_v1);
             EXPORT1(calc_sqr_distance_pv);
 
-            EXPORT1(projection_length_p2);
-            EXPORT1(projection_length_v2);
-
             EXPORT1(split_triangle_raw);
             EXPORT1(cull_triangle_raw);
             EXPORT1(colocation_x2_v1p2);
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/avx.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/avx.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/avx.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/avx.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -76,6 +76,8 @@
 
         #include <private/dsp/arch/x86/avx/graphics/axis.h>
         #include <private/dsp/arch/x86/avx/graphics/pixelfmt.h>
+
+        #include <private/dsp/arch/x86/avx/3dmath.h>
     #undef PRIVATE_DSP_ARCH_X86_AVX_IMPL
 
     namespace lsp
@@ -423,6 +425,72 @@
                 CEXPORT1(favx, normalize1);
                 CEXPORT1(favx, normalize2);
 
+                // 3D math
+                EXPORT1(init_point_xyz);
+                EXPORT1(init_point);
+                EXPORT1(normalize_point);
+
+                EXPORT1(init_vector_dxyz);
+                EXPORT1(init_vector);
+                EXPORT1(normalize_vector);
+                EXPORT1(normalize_vector2);
+
+                EXPORT1(init_matrix3d);
+                EXPORT1(init_matrix3d_zero);
+                EXPORT1(init_matrix3d_one);
+                EXPORT1(init_matrix3d_identity);
+                EXPORT1(init_matrix3d_translate);
+                EXPORT1(init_matrix3d_scale);
+                EXPORT1(init_matrix3d_rotate_x);
+                EXPORT1(init_matrix3d_rotate_y);
+                EXPORT1(init_matrix3d_rotate_z);
+//                EXPORT1(init_matrix3d_rotate_xyz);
+                EXPORT1(apply_matrix3d_mv2);
+                EXPORT1(apply_matrix3d_mv1);
+                EXPORT1(apply_matrix3d_mp2);
+                EXPORT1(apply_matrix3d_mp1);
+                EXPORT1(apply_matrix3d_mm2);
+                EXPORT1(apply_matrix3d_mm1);
+                EXPORT1(transpose_matrix3d1);
+                EXPORT1(transpose_matrix3d2);
+
+                EXPORT1(calc_area_p3);
+                EXPORT1(calc_area_pv);
+
+                EXPORT1(colocation_x2_v1p2);
+                EXPORT1(colocation_x2_v1pv);
+                EXPORT1(colocation_x3_v1p3);
+                EXPORT1(colocation_x3_v1pv);
+                EXPORT1(colocation_x3_v3p1);
+                EXPORT1(colocation_x3_vvp1);
+
+                EXPORT1(split_triangle_raw);
+                EXPORT1(cull_triangle_raw);
+
+                EXPORT1(longest_edge3d_p3);
+                EXPORT1(longest_edge3d_pv);
+
+                EXPORT1(calc_normal3d_p3);
+                EXPORT1(calc_normal3d_pv);
+                EXPORT1(calc_normal3d_v2);
+                EXPORT1(calc_normal3d_vv);
+
+                EXPORT1(calc_plane_p3);
+                EXPORT1(calc_plane_pv);
+                EXPORT1(calc_plane_v1p2);
+
+                EXPORT1(calc_split_point_p2v1);
+                EXPORT1(calc_split_point_pvv1);
+
+                EXPORT1(check_triplet3d_p3n);
+                EXPORT1(check_triplet3d_pvn);
+                EXPORT1(check_triplet3d_v2n);
+                EXPORT1(check_triplet3d_vvn);
+                EXPORT1(check_triplet3d_vv);
+
+                EXPORT1(check_point3d_on_triangle_p3p);
+                EXPORT1(check_point3d_on_triangle_pvp);
+
                 // FMA3 support?
                 if (f->features & CPU_OPTION_FMA3)
                 {
@@ -515,6 +583,38 @@
                     CEXPORT2(ffma, dyn_biquad_process_x8, dyn_biquad_process_x8_fma3);
 
                     CEXPORT2(favx, depan_eqpow, depan_eqpow_fma3);
+
+                    // 3D math
+                    CEXPORT2(favx, apply_matrix3d_mm2, apply_matrix3d_mm2_fma3);
+                    CEXPORT2(favx, apply_matrix3d_mm1, apply_matrix3d_mm1_fma3);
+                    CEXPORT2(favx, apply_matrix3d_mp2, apply_matrix3d_mp2_fma3);
+                    CEXPORT2(favx, apply_matrix3d_mp1, apply_matrix3d_mp1_fma3);
+                    CEXPORT2(favx, apply_matrix3d_mv2, apply_matrix3d_mv2_fma3);
+                    CEXPORT2(favx, apply_matrix3d_mv1, apply_matrix3d_mv1_fma3);
+
+                    CEXPORT2(favx, calc_area_p3, calc_area_p3_fma3);
+                    CEXPORT2(favx, calc_area_pv, calc_area_pv_fma3);
+
+                    CEXPORT2(favx, calc_normal3d_p3, calc_normal3d_p3_fma3);
+                    CEXPORT2(favx, calc_normal3d_pv, calc_normal3d_pv_fma3);
+                    CEXPORT2(favx, calc_normal3d_v2, calc_normal3d_v2_fma3);
+                    CEXPORT2(favx, calc_normal3d_vv, calc_normal3d_vv_fma3);
+
+                    CEXPORT2(favx, calc_plane_p3, calc_plane_p3_fma3);
+                    CEXPORT2(favx, calc_plane_pv, calc_plane_pv_fma3);
+                    CEXPORT2(favx, calc_plane_v1p2, calc_plane_v1p2_fma3);
+
+                    CEXPORT2(favx, calc_split_point_p2v1, calc_split_point_p2v1_fma3);
+                    CEXPORT2(favx, calc_split_point_pvv1, calc_split_point_pvv1_fma3);
+
+                    CEXPORT2(favx, check_triplet3d_p3n, check_triplet3d_p3n_fma3);
+                    CEXPORT2(favx, check_triplet3d_pvn, check_triplet3d_pvn_fma3);
+                    CEXPORT2(favx, check_triplet3d_v2n, check_triplet3d_v2n_fma3);
+                    CEXPORT2(favx, check_triplet3d_vvn, check_triplet3d_vvn_fma3);
+                    CEXPORT2(favx, check_triplet3d_vv, check_triplet3d_vv_fma3);
+
+                    CEXPORT2(favx, check_point3d_on_triangle_p3p, check_point3d_on_triangle_p3p_fma3);
+                    CEXPORT2(favx, check_point3d_on_triangle_pvp, check_point3d_on_triangle_pvp_fma3);
                 }
             }
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/avx2.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/avx2.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/avx2.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/avx2.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -44,12 +44,7 @@
         #include <private/dsp/arch/x86/avx2/dynamics.h>
 
         #include <private/dsp/arch/x86/avx2/float.h>
-
-        #include <private/dsp/arch/x86/avx2/pmath/op_kx.h>
-        #include <private/dsp/arch/x86/avx2/pmath/fmop_kx.h>
-        #include <private/dsp/arch/x86/avx2/pmath/exp.h>
-        #include <private/dsp/arch/x86/avx2/pmath/log.h>
-        #include <private/dsp/arch/x86/avx2/pmath/pow.h>
+        #include <private/dsp/arch/x86/avx2/pmath.h>
 
         #include <private/dsp/arch/x86/avx2/fft/normalize.h>
 
@@ -190,6 +185,19 @@ namespace lsp
             CEXPORT2_X64(favx, powvx1, x64_powvx1);
             CEXPORT2_X64(favx, powvx2, x64_powvx2);
 
+            CEXPORT1(favx, cosf1);
+            CEXPORT1(favx, cosf2);
+            CEXPORT1(favx, cosf_kp1);
+            CEXPORT2_X64(favx, cosf_kp1, x64_cosf_kp1);
+
+            CEXPORT1(favx, sinf1);
+            CEXPORT1(favx, sinf2);
+            CEXPORT1(favx, sinf_kp1);
+            CEXPORT2_X64(favx, sinf_kp1, x64_sinf_kp1);
+
+            CEXPORT1(favx, lanczos1);
+            CEXPORT2_X64(favx, lanczos1, x64_lanczos1);
+
             CEXPORT2_X64(favx, eff_hsla_hue, x64_eff_hsla_hue);
             CEXPORT2_X64(favx, eff_hsla_sat, x64_eff_hsla_sat);
             CEXPORT2_X64(favx, eff_hsla_light, x64_eff_hsla_light);
@@ -272,6 +280,19 @@ namespace lsp
                 CEXPORT2_X64(favx, powvx1, x64_powvx1_fma3);
                 CEXPORT2_X64(favx, powvx2, x64_powvx2_fma3);
 
+                CEXPORT2(favx, cosf1, cosf1_fma3);
+                CEXPORT2(favx, cosf2, cosf2_fma3);
+                CEXPORT2(favx, cosf_kp1, cosf_kp1_fma3);
+                CEXPORT2_X64(favx, cosf_kp1, x64_cosf_kp1_fma3);
+
+                CEXPORT2(favx, sinf1, sinf1_fma3);
+                CEXPORT2(favx, sinf2, sinf2_fma3);
+                CEXPORT2(favx, sinf_kp1, sinf_kp1_fma3);
+                CEXPORT2_X64(favx, sinf_kp1, x64_sinf_kp1_fma3);
+
+                CEXPORT2(favx, lanczos1, lanczos1_fma3);
+                CEXPORT2_X64(favx, lanczos1, x64_lanczos1_fma3);
+
                 CEXPORT2(favx, compressor_x2_gain, compressor_x2_gain_fma3);
                 CEXPORT2(favx, compressor_x2_curve, compressor_x2_curve_fma3);
                 CEXPORT2_X64(favx, compressor_x2_gain, x64_compressor_x2_gain_fma3);
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/avx512.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/avx512.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/avx512.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/avx512.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -158,12 +158,12 @@
                 CEXPORT1(vl, fmmod4);
                 CEXPORT1(vl, fmrmod4);
 
-                CEXPORT2(vl, logb1, logb1);
-                CEXPORT2(vl, logb2, logb2);
-                CEXPORT2(vl, loge1, loge1);
-                CEXPORT2(vl, loge2, loge2);
-                CEXPORT2(vl, logd1, logd1);
-                CEXPORT2(vl, logd2, logd2);
+                CEXPORT1(vl, logb1);
+                CEXPORT1(vl, logb2);
+                CEXPORT1(vl, loge1);
+                CEXPORT1(vl, loge2);
+                CEXPORT1(vl, logd1);
+                CEXPORT1(vl, logd2);
 
                 CEXPORT2_X64(vl, logb1, x64_logb1);
                 CEXPORT2_X64(vl, logb2, x64_logb2);
@@ -172,6 +172,19 @@
                 CEXPORT2_X64(vl, logd1, x64_logd1);
                 CEXPORT2_X64(vl, logd2, x64_logd2);
 
+                CEXPORT1(vl, cosf1);
+                CEXPORT1(vl, cosf2);
+                CEXPORT1(vl, cosf_kp1);
+                CEXPORT2_X64(vl, cosf_kp1, x64_cosf_kp1);
+
+                CEXPORT1(vl, sinf1);
+                CEXPORT1(vl, sinf2);
+                CEXPORT1(vl, sinf_kp1);
+                CEXPORT2_X64(vl, sinf_kp1, x64_sinf_kp1);
+
+                CEXPORT1(vl, lanczos1);
+                CEXPORT2_X64(vl, lanczos1, x64_lanczos1);
+
                 CEXPORT1(vl, lramp_set1);
                 CEXPORT1(vl, lramp1);
                 CEXPORT1(vl, lramp2);
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/sse.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/sse.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/sse.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/sse.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -419,23 +419,6 @@
                 EXPORT1(add_vector_pvk1);
                 EXPORT1(add_vector_pvk2);
 
-                EXPORT1(init_ray_xyz);
-                EXPORT1(init_ray_dxyz);
-                EXPORT1(init_ray_pdv);
-                EXPORT1(init_ray_p2);
-                EXPORT1(init_ray_pv);
-                EXPORT1(init_ray);
-                EXPORT1(calc_ray_xyz);
-                EXPORT1(calc_ray_dxyz);
-                EXPORT1(calc_ray_pdv);
-                EXPORT1(calc_ray_p2);
-                EXPORT1(calc_ray_pv);
-                EXPORT1(calc_ray);
-
-                EXPORT1(init_segment_xyz);
-                EXPORT1(init_segment_p2);
-                EXPORT1(init_segment_pv);
-
                 EXPORT1(init_matrix3d);
                 EXPORT1(init_matrix3d_zero);
                 EXPORT1(init_matrix3d_one);
@@ -455,9 +438,15 @@
                 EXPORT1(transpose_matrix3d1);
                 EXPORT1(transpose_matrix3d2);
 
+                EXPORT1(colocation_x2_v1p2);
+                EXPORT1(colocation_x2_v1pv);
+                EXPORT1(colocation_x3_v1p3);
+                EXPORT1(colocation_x3_v1pv);
+                EXPORT1(colocation_x3_v3p1);
+                EXPORT1(colocation_x3_vvp1);
+
                 EXPORT1(check_point3d_on_triangle_p3p);
                 EXPORT1(check_point3d_on_triangle_pvp);
-                EXPORT1(check_point3d_on_triangle_tp);
 
                 EXPORT1(longest_edge3d_p3);
                 EXPORT1(longest_edge3d_pv);
@@ -467,31 +456,15 @@
                 EXPORT1(check_triplet3d_v2n);
                 EXPORT1(check_triplet3d_vvn);
                 EXPORT1(check_triplet3d_vv);
-                EXPORT1(check_triplet3d_t);
-                EXPORT1(check_triplet3d_tn);
-
-        //            EXPORT1(reflect_ray);
-
-                EXPORT1(calc_angle3d_v2);
-                EXPORT1(calc_angle3d_vv);
 
                 EXPORT1(calc_normal3d_p3);
                 EXPORT1(calc_normal3d_pv);
                 EXPORT1(calc_normal3d_v2);
                 EXPORT1(calc_normal3d_vv);
 
-                EXPORT1(move_point3d_p2);
-                EXPORT1(move_point3d_pv);
                 EXPORT1(calc_split_point_p2v1);
                 EXPORT1(calc_split_point_pvv1);
 
-                EXPORT1(colocation_x2_v1p2);
-                EXPORT1(colocation_x2_v1pv);
-                EXPORT1(colocation_x3_v1p3);
-                EXPORT1(colocation_x3_v1pv);
-                EXPORT1(colocation_x3_v3p1);
-                EXPORT1(colocation_x3_vvp1);
-
                 EXPORT1(calc_plane_p3);
                 EXPORT1(calc_plane_pv);
                 EXPORT1(calc_plane_v1p2);
@@ -501,9 +474,6 @@
                 EXPORT1(calc_min_distance_p3);
                 EXPORT1(calc_min_distance_pv);
 
-                EXPORT1(split_triangle_raw);
-                EXPORT1(cull_triangle_raw);
-
                 EXPORT1(convolve);
                 EXPORT1(corr_init);
                 EXPORT1(corr_incr);
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/sse2.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/sse2.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/sse2.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/sse2.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -53,13 +53,9 @@
         #include <private/dsp/arch/x86/sse2/graphics/effects.h>
         #include <private/dsp/arch/x86/sse2/graphics/pixelfmt.h>
 
-        #include <private/dsp/arch/x86/sse2/pmath/op_kx.h>
-        #include <private/dsp/arch/x86/sse2/pmath/op_vv.h>
-        #include <private/dsp/arch/x86/sse2/pmath/fmop_kx.h>
-        #include <private/dsp/arch/x86/sse2/pmath/fmop_vv.h>
-        #include <private/dsp/arch/x86/sse2/pmath/exp.h>
-        #include <private/dsp/arch/x86/sse2/pmath/log.h>
-        #include <private/dsp/arch/x86/sse2/pmath/pow.h>
+        #include <private/dsp/arch/x86/sse2/pmath.h>
+
+        #include <private/dsp/arch/x86/sse2/3dmath.h>
     #undef PRIVATE_DSP_ARCH_X86_SSE2_IMPL
 
     namespace lsp
@@ -123,6 +119,16 @@
                 EXPORT1(powvx1);
                 EXPORT1(powvx2);
 
+                EXPORT1(cosf1);
+                EXPORT1(cosf2);
+                EXPORT1(cosf_kp1);
+
+                EXPORT1(sinf1);
+                EXPORT1(sinf2);
+                EXPORT1(sinf_kp1);
+
+                EXPORT1(lanczos1);
+
                 EXPORT1(min_index);
                 EXPORT1(max_index);
                 EXPORT1(minmax_index);
@@ -155,6 +161,20 @@
                 EXPORT1(uexpander_x1_curve)
                 EXPORT1(dexpander_x1_gain)
                 EXPORT1(dexpander_x1_curve)
+
+                // 3D Math
+                EXPORT1(transpose_matrix3d1);
+                EXPORT1(transpose_matrix3d2);
+
+                EXPORT1(colocation_x2_v1p2);
+                EXPORT1(colocation_x2_v1pv);
+                EXPORT1(colocation_x3_v1p3);
+                EXPORT1(colocation_x3_v1pv);
+                EXPORT1(colocation_x3_v3p1);
+                EXPORT1(colocation_x3_vvp1);
+
+                EXPORT1(split_triangle_raw);
+                EXPORT1(cull_triangle_raw);
             }
 
             #undef EXPORT1
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/sse3.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/sse3.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/sse3.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/sse3.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -119,6 +119,12 @@
                 EXPORT1(cull_triangle_raw);
 
                 EXPORT2_X64(corr_incr, x64_corr_incr);
+
+                if (f->features & CPU_OPTION_SSSE3)
+                {
+                    EXPORT2(split_triangle_raw, split_triangle_raw_ssse3);
+                    EXPORT2(cull_triangle_raw, cull_triangle_raw_ssse3);
+                }
             }
 
             #undef EXPORT2
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/sse4.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/sse4.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/sse4.cpp	2025-03-01 12:42:56.808648290 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/sse4.cpp	2025-08-26 18:15:43.754003019 +0000
@@ -73,7 +73,6 @@
 
                 EXPORT1(check_point3d_on_triangle_p3p);
                 EXPORT1(check_point3d_on_triangle_pvp);
-                EXPORT1(check_point3d_on_triangle_tp);
             }
 
             #undef EXPORT1
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/x86.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/x86.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/main/x86/x86.cpp	2025-03-01 12:42:56.812648266 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/main/x86/x86.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -572,10 +572,10 @@
                         // Only starting with ZEN 1 architecture AMD's implementation of AVX is fast enough
                         if ((f->vendor == CPU_VENDOR_AMD) || (f->vendor == CPU_VENDOR_HYGON))
                         {
-                            if (f->family < AMD_FAMILY_ZEN_3_4)
-                                return false;
                             if (f->family == AMD_FAMILY_DHYANA)
                                 return false;
+                            if (f->family < AMD_FAMILY_ZEN_3_4)
+                                return false;
                             return true;
                         }
                         break;
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/area.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/area.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/area.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/area.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 24 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+
+#define POINTS_COUNT    0x10000
+
+namespace lsp
+{
+    namespace generic
+    {
+        float calc_area_p3(const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+        float calc_area_pv(const dsp::point3d_t *pv);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            float calc_area_p3(const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_area_pv(const dsp::point3d_t *pv);
+        }
+
+        namespace avx
+        {
+            float calc_area_p3(const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_area_p3_fma3(const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_area_pv(const dsp::point3d_t *pv);
+            float calc_area_pv_fma3(const dsp::point3d_t *pv);
+        }
+    )
+
+    typedef float (* calc_area_p3_t)(const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+    typedef float (* calc_area_pv_t)(const dsp::point3d_t *pv);
+}
+
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.3d", area, 5, 1000)
+
+    void call(const char *label, const dsp::point3d_t *pv, calc_area_p3_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        PTEST_LOOP(label,
+            const dsp::point3d_t *p = pv;
+            for (size_t i=0; i<(POINTS_COUNT - 2); ++i, ++p)
+            {
+                func(&p[0], &p[1], &p[2]);
+            }
+        );
+    }
+
+    void call(const char *label, const dsp::point3d_t *pv, calc_area_pv_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        PTEST_LOOP(label,
+            for (size_t i=0; i<(POINTS_COUNT - 2); ++i)
+                func(&pv[i]);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        const size_t buf_size   = POINTS_COUNT;
+        uint8_t *data           = NULL;
+        dsp::point3d_t *src     = alloc_aligned<dsp::point3d_t>(data, buf_size, 64);
+        lsp_finally {
+            free_aligned(data);
+        };
+
+        // Initialize data
+        for (size_t i=0; i < POINTS_COUNT; ++i)
+            dsp::init_point_xyz(&src[i], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+
+        #define CALL(func) \
+            call(#func, src, func);
+
+        CALL(generic::calc_area_p3);
+        IF_ARCH_X86(CALL(sse::calc_area_p3));
+        IF_ARCH_X86(CALL(avx::calc_area_p3));
+        IF_ARCH_X86(CALL(avx::calc_area_p3_fma3));
+        PTEST_SEPARATOR;
+
+        CALL(generic::calc_area_pv);
+        IF_ARCH_X86(CALL(sse::calc_area_pv));
+        IF_ARCH_X86(CALL(avx::calc_area_pv));
+        IF_ARCH_X86(CALL(avx::calc_area_pv_fma3));
+        PTEST_SEPARATOR;
+    }
+PTEST_END
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/check_point_on_triangle.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/check_point_on_triangle.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/check_point_on_triangle.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/check_point_on_triangle.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 25 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+
+#define TRIANGLES_COUNT    0x4000
+
+namespace lsp
+{
+    namespace generic
+    {
+        float check_point3d_on_triangle_p3p(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+        float check_point3d_on_triangle_pvp(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            float check_point3d_on_triangle_p3p(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+            float check_point3d_on_triangle_pvp(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+        }
+
+        namespace avx
+        {
+            float check_point3d_on_triangle_p3p(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+            float check_point3d_on_triangle_pvp(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+
+            float check_point3d_on_triangle_p3p_fma3(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+            float check_point3d_on_triangle_pvp_fma3(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+        }
+    )
+
+    typedef float (* check_point3d_on_triangle_p3p_t)(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+    typedef float (* check_point3d_on_triangle_pvp_t)(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.3d", check_point_on_triangle, 5, 1000)
+
+    void call(const char *label, const dsp::point3d_t *pv, check_point3d_on_triangle_p3p_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::point3d_t t;
+        dsp::init_point_xyz(&t, 0.0f, 0.0f, 0.0f);
+
+        PTEST_LOOP(label,
+            const dsp::point3d_t *p = pv;
+            for (size_t i=0; i<TRIANGLES_COUNT; ++i, p += 3)
+                func(&p[0], &p[1], &p[2], &t);
+        );
+    }
+
+    void call(const char *label, const dsp::point3d_t *pv, check_point3d_on_triangle_pvp_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::point3d_t t;
+        dsp::init_point_xyz(&t, 0.0f, 0.0f, 0.0f);
+
+        PTEST_LOOP(label,
+            const dsp::point3d_t *p = pv;
+            for (size_t i=0; i<TRIANGLES_COUNT; ++i, p += 3)
+                func(p, &t);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        const size_t buf_size   = TRIANGLES_COUNT * 3;
+        uint8_t *data           = NULL;
+        dsp::point3d_t *src     = alloc_aligned<dsp::point3d_t>(data, buf_size, 64);
+        lsp_finally {
+            free_aligned(data);
+        };
+
+        // Initialize data
+        dsp::point3d_t *p       = src;
+        for (size_t i=0; i < TRIANGLES_COUNT; ++i, p += 3)
+        {
+            size_t m = i % 3;
+            const float x1 = randf(-10.0f, 10.0f);
+            const float x2 = randf(-10.0f, 10.0f);
+            const float x3 = randf(-10.0f, 10.0f);
+            const float y1 = randf(-10.0f, 10.0f);
+            const float y2 = randf(-10.0f, 10.0f);
+            const float y3 = randf(-10.0f, 10.0f);
+
+            if (m == 0)
+            {
+                dsp::init_point_xyz(&p[0], x1, y1, 0.0f);
+                dsp::init_point_xyz(&p[1], x2, y2, 0.0f);
+                dsp::init_point_xyz(&p[2], x3, y3, 0.0f);
+            }
+            else if (m == 1)
+            {
+                dsp::init_point_xyz(&p[0], y1, 0.0f, x1);
+                dsp::init_point_xyz(&p[1], y2, 0.0f, x2);
+                dsp::init_point_xyz(&p[2], y3, 0.0f, x3);
+            }
+            else
+            {
+                dsp::init_point_xyz(&p[0], 0.0f, x1, y1);
+                dsp::init_point_xyz(&p[1], 0.0f, x2, y2);
+                dsp::init_point_xyz(&p[2], 0.0f, x3, y3);
+            }
+        }
+
+        #define CALL(func) \
+            call(#func, src, func);
+
+        CALL(generic::check_point3d_on_triangle_p3p);
+        IF_ARCH_X86(CALL(sse::check_point3d_on_triangle_p3p));
+        IF_ARCH_X86(CALL(avx::check_point3d_on_triangle_p3p));
+        IF_ARCH_X86(CALL(avx::check_point3d_on_triangle_p3p_fma3));
+        PTEST_SEPARATOR;
+
+        CALL(generic::check_point3d_on_triangle_pvp);
+        IF_ARCH_X86(CALL(sse::check_point3d_on_triangle_pvp));
+        IF_ARCH_X86(CALL(avx::check_point3d_on_triangle_pvp));
+        IF_ARCH_X86(CALL(avx::check_point3d_on_triangle_pvp_fma3));
+        PTEST_SEPARATOR;
+    }
+PTEST_END
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/colocation_x2.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/colocation_x2.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/colocation_x2.cpp	2025-03-01 12:42:56.812648266 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/colocation_x2.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -44,11 +44,23 @@ namespace lsp
             size_t colocation_x2_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
         }
 
+        namespace sse2
+        {
+            size_t colocation_x2_v1p2(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+            size_t colocation_x2_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
+        }
+
         namespace sse3
         {
             size_t colocation_x2_v1p2(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
             size_t colocation_x2_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
         }
+
+        namespace avx
+        {
+            size_t colocation_x2_v1p2(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+            size_t colocation_x2_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
+        }
     )
 
     typedef size_t (* colocation_x2_v1p2_t)(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
@@ -66,7 +78,7 @@ PTEST_BEGIN("dsp.3d", colocation_x2, 5,
 
         char buf[80];
         snprintf(buf, sizeof(buf), "%s", label);
-        printf("Testing %s numbers...\n", buf);
+        printf("Testing %s ...\n", buf);
 
         PTEST_LOOP(buf,
             const dsp::vector3d_t *xpl = pl;
@@ -86,7 +98,7 @@ PTEST_BEGIN("dsp.3d", colocation_x2, 5,
 
         char buf[80];
         snprintf(buf, sizeof(buf), "%s", label);
-        printf("Testing %s numbers...\n", buf);
+        printf("Testing %s ...\n", buf);
 
         PTEST_LOOP(buf,
             const dsp::vector3d_t *xpl = pl;
@@ -131,15 +143,21 @@ PTEST_BEGIN("dsp.3d", colocation_x2, 5,
         for (size_t i=0; i < N_LINES*2; ++i)
             dsp::init_point_xyz(&points[i], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
 
+    #define CALL(func) \
+        call(#func, planes, points, func);
 
-        call("generic::colocation_x2_v1p2", planes, points, generic::colocation_x2_v1p2);
-        IF_ARCH_X86(call("sse::colocation_x2_v1p2", planes, points, sse::colocation_x2_v1p2));
-        IF_ARCH_X86(call("sse3::colocation_x2_v1p2", planes, points, sse3::colocation_x2_v1p2));
+        CALL(generic::colocation_x2_v1p2);
+        IF_ARCH_X86(CALL(sse::colocation_x2_v1p2));
+        IF_ARCH_X86(CALL(sse2::colocation_x2_v1p2));
+        IF_ARCH_X86(CALL(sse3::colocation_x2_v1p2));
+        IF_ARCH_X86(CALL(avx::colocation_x2_v1p2));
         PTEST_SEPARATOR;
 
-        call("generic::colocation_x2_v1pv", planes, points, generic::colocation_x2_v1pv);
-        IF_ARCH_X86(call("sse::colocation_x2_v1pv", planes, points, sse::colocation_x2_v1pv));
-        IF_ARCH_X86(call("sse3::colocation_x2_v1pv", planes, points, sse3::colocation_x2_v1pv));
+        CALL(generic::colocation_x2_v1pv);
+        IF_ARCH_X86(CALL(sse::colocation_x2_v1pv));
+        IF_ARCH_X86(CALL(sse2::colocation_x2_v1pv));
+        IF_ARCH_X86(CALL(sse3::colocation_x2_v1pv));
+        IF_ARCH_X86(CALL(avx::colocation_x2_v1pv));
         PTEST_SEPARATOR;
 
         free_aligned(data);
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/colocation_x3.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/colocation_x3.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/colocation_x3.cpp	2025-03-01 12:42:56.812648266 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/colocation_x3.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -48,6 +48,14 @@ namespace lsp
             size_t colocation_x3_vvp1(const dsp::vector3d_t *vv, const dsp::point3d_t *p);
         }
 
+        namespace sse2
+        {
+            size_t colocation_x3_v1p3(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            size_t colocation_x3_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
+            size_t colocation_x3_v3p1(const dsp::vector3d_t *v0, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::point3d_t *p);
+            size_t colocation_x3_vvp1(const dsp::vector3d_t *vv, const dsp::point3d_t *p);
+        }
+
         namespace sse3
         {
             size_t colocation_x3_v1p3(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
@@ -55,6 +63,14 @@ namespace lsp
             size_t colocation_x3_v3p1(const dsp::vector3d_t *v0, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::point3d_t *p);
             size_t colocation_x3_vvp1(const dsp::vector3d_t *vv, const dsp::point3d_t *p);
         }
+
+        namespace avx
+        {
+            size_t colocation_x3_v1p3(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            size_t colocation_x3_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
+            size_t colocation_x3_v3p1(const dsp::vector3d_t *v0, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::point3d_t *p);
+            size_t colocation_x3_vvp1(const dsp::vector3d_t *vv, const dsp::point3d_t *p);
+        }
     )
 
     typedef size_t (* colocation_x3_v1p3_t)(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
@@ -74,7 +90,7 @@ PTEST_BEGIN("dsp.3d", colocation_x3, 5,
 
         char buf[80];
         snprintf(buf, sizeof(buf), "%s", label);
-        printf("Testing %s numbers...\n", buf);
+        printf("Testing %s ...\n", buf);
 
         PTEST_LOOP(buf,
             const dsp::vector3d_t *xpl = pl;
@@ -94,7 +110,7 @@ PTEST_BEGIN("dsp.3d", colocation_x3, 5,
 
         char buf[80];
         snprintf(buf, sizeof(buf), "%s", label);
-        printf("Testing %s numbers...\n", buf);
+        printf("Testing %s ...\n", buf);
 
         PTEST_LOOP(buf,
             const dsp::vector3d_t *xpl = pl;
@@ -114,7 +130,7 @@ PTEST_BEGIN("dsp.3d", colocation_x3, 5,
 
         char buf[80];
         snprintf(buf, sizeof(buf), "%s", label);
-        printf("Testing %s numbers...\n", buf);
+        printf("Testing %s ...\n", buf);
 
         PTEST_LOOP(buf,
             const dsp::vector3d_t *xpl = pl;
@@ -134,7 +150,7 @@ PTEST_BEGIN("dsp.3d", colocation_x3, 5,
 
         char buf[80];
         snprintf(buf, sizeof(buf), "%s", label);
-        printf("Testing %s numbers...\n", buf);
+        printf("Testing %s ...\n", buf);
 
         PTEST_LOOP(buf,
             const dsp::vector3d_t *xpl = pl;
@@ -179,25 +195,37 @@ PTEST_BEGIN("dsp.3d", colocation_x3, 5,
         for (size_t i=0; i < N_POINTS*3; ++i)
             dsp::init_point_xyz(&points[i], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
 
-
-        call_pv("generic::colocation_x3_v1p3", planes, points, generic::colocation_x3_v1p3);
-        IF_ARCH_X86(call_pv("sse::colocation_x3_v1p3", planes, points, sse::colocation_x3_v1p3));
-        IF_ARCH_X86(call_pv("sse3::colocation_x3_v1p3", planes, points, sse3::colocation_x3_v1p3));
+    #define CALL_PV(func) \
+        call_pv(#func, planes, points, func)
+    #define CALL_VV(func) \
+        call_vv(#func, planes, points, func)
+
+        CALL_PV(generic::colocation_x3_v1p3);
+        IF_ARCH_X86(CALL_PV(sse::colocation_x3_v1p3));
+        IF_ARCH_X86(CALL_PV(sse2::colocation_x3_v1p3));
+        IF_ARCH_X86(CALL_PV(sse3::colocation_x3_v1p3));
+        IF_ARCH_X86(CALL_PV(avx::colocation_x3_v1p3));
         PTEST_SEPARATOR;
 
-        call_pv("generic::colocation_x3_v1pv", planes, points, generic::colocation_x3_v1pv);
-        IF_ARCH_X86(call_pv("sse::colocation_x3_v1pv", planes, points, sse::colocation_x3_v1pv));
-        IF_ARCH_X86(call_pv("sse3::colocation_x3_v1pv", planes, points, sse3::colocation_x3_v1pv));
+        CALL_PV(generic::colocation_x3_v1pv);
+        IF_ARCH_X86(CALL_PV(sse::colocation_x3_v1pv));
+        IF_ARCH_X86(CALL_PV(sse2::colocation_x3_v1pv));
+        IF_ARCH_X86(CALL_PV(sse3::colocation_x3_v1pv));
+        IF_ARCH_X86(CALL_PV(avx::colocation_x3_v1pv));
         PTEST_SEPARATOR;
 
-        call_vv("generic::colocation_x3_v3p1", planes, points, generic::colocation_x3_v3p1);
-        IF_ARCH_X86(call_vv("sse::colocation_x3_v3p1", planes, points, sse::colocation_x3_v3p1));
-        IF_ARCH_X86(call_vv("sse3::colocation_x3_v3p1", planes, points, sse3::colocation_x3_v3p1));
+        CALL_VV(generic::colocation_x3_v3p1);
+        IF_ARCH_X86(CALL_VV(sse::colocation_x3_v3p1));
+        IF_ARCH_X86(CALL_VV(sse2::colocation_x3_v3p1));
+        IF_ARCH_X86(CALL_VV(sse3::colocation_x3_v3p1));
+        IF_ARCH_X86(CALL_VV(avx::colocation_x3_v3p1));
         PTEST_SEPARATOR;
 
-        call_vv("generic::colocation_x3_vvp1", planes, points, generic::colocation_x3_vvp1);
-        IF_ARCH_X86(call_vv("sse::colocation_x3_vvp1", planes, points, sse::colocation_x3_vvp1));
-        IF_ARCH_X86(call_vv("sse3::colocation_x3_vvp1", planes, points, sse3::colocation_x3_vvp1));
+        CALL_VV(generic::colocation_x3_vvp1);
+        IF_ARCH_X86(CALL_VV(sse::colocation_x3_vvp1));
+        IF_ARCH_X86(CALL_VV(sse2::colocation_x3_vvp1));
+        IF_ARCH_X86(CALL_VV(sse3::colocation_x3_vvp1));
+        IF_ARCH_X86(CALL_VV(avx::colocation_x3_vvp1));
         PTEST_SEPARATOR;
 
         free_aligned(data);
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/edge.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/edge.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/edge.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/edge.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 21 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+
+#define POINTS_COUNT    0x10000
+
+namespace lsp
+{
+    namespace generic
+    {
+        size_t longest_edge3d_p3(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+        size_t longest_edge3d_pv(const dsp::point3d_t *p);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            size_t longest_edge3d_p3(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+            size_t longest_edge3d_pv(const dsp::point3d_t *p);
+        }
+
+        namespace avx
+        {
+            size_t longest_edge3d_p3(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+            size_t longest_edge3d_pv(const dsp::point3d_t *p);
+        }
+    )
+
+    typedef size_t (* longest_edge3d_p3_t)(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+    typedef size_t (* longest_edge3d_pv_t)(const dsp::point3d_t *p);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.3d", edge, 5, 1000)
+
+    void call(const char *label, const dsp::point3d_t *pv, longest_edge3d_p3_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        PTEST_LOOP(label,
+            const dsp::point3d_t *p = pv;
+            for (size_t i=0; i<(POINTS_COUNT - 2); ++i, ++p)
+            {
+                func(&p[0], &p[1], &p[2]);
+            }
+        );
+    }
+
+    void call(const char *label, const dsp::point3d_t *pv, longest_edge3d_pv_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        PTEST_LOOP(label,
+            for (size_t i=0; i<(POINTS_COUNT - 2); ++i)
+                func(&pv[i]);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        const size_t buf_size   = POINTS_COUNT;
+        uint8_t *data           = NULL;
+        dsp::point3d_t *src     = alloc_aligned<dsp::point3d_t>(data, buf_size, 64);
+        lsp_finally {
+            free_aligned(data);
+        };
+
+        // Initialize data
+        for (size_t i=0; i < POINTS_COUNT; ++i)
+            dsp::init_point_xyz(&src[i], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+
+        #define CALL(func) \
+            call(#func, src, func);
+
+        CALL(generic::longest_edge3d_p3);
+        IF_ARCH_X86(CALL(sse::longest_edge3d_p3));
+        IF_ARCH_X86(CALL(avx::longest_edge3d_p3));
+        PTEST_SEPARATOR;
+
+        CALL(generic::longest_edge3d_pv);
+        IF_ARCH_X86(CALL(sse::longest_edge3d_pv));
+        IF_ARCH_X86(CALL(avx::longest_edge3d_pv));
+        PTEST_SEPARATOR;
+    }
+PTEST_END
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/mat4_transpose.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/mat4_transpose.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/mat4_transpose.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/mat4_transpose.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 18 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/stdlib/math.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+
+#define N_MATRICES      0x1000
+
+namespace lsp
+{
+    namespace generic
+    {
+        void transpose_matrix3d1(dsp::matrix3d_t *r);
+        void transpose_matrix3d2(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            void transpose_matrix3d1(dsp::matrix3d_t *r);
+            void transpose_matrix3d2(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
+        }
+
+        namespace sse2
+        {
+            void transpose_matrix3d1(dsp::matrix3d_t *r);
+            void transpose_matrix3d2(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
+        }
+
+        namespace avx
+        {
+            void transpose_matrix3d1(dsp::matrix3d_t *r);
+            void transpose_matrix3d2(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
+        }
+    )
+
+    typedef void (* transpose_matrix3d1_t)(dsp::matrix3d_t *r);
+    typedef void (* transpose_matrix3d2_t)(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.3d", mat4_transpose, 5, 1000)
+
+    void call(const char *label, dsp::matrix3d_t *dst, const dsp::matrix3d_t *src, transpose_matrix3d2_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        char buf[80];
+        snprintf(buf, sizeof(buf), "%s", label);
+        printf("Testing %s ...\n", buf);
+
+        PTEST_LOOP(buf,
+            for (size_t i=0; i<N_MATRICES; ++i)
+                func(&dst[i], &src[i]);
+        );
+    }
+
+    void call(const char *label, dsp::matrix3d_t *dst, transpose_matrix3d1_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        char buf[80];
+        snprintf(buf, sizeof(buf), "%s", label);
+        printf("Testing %s ...\n", buf);
+
+        PTEST_LOOP(buf,
+            for (size_t i=0; i<N_MATRICES; ++i)
+                func(&dst[i]);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        size_t buf_size     = N_MATRICES * sizeof(dsp::matrix3d_t);
+        uint8_t *data       = NULL;
+        uint8_t *ptr        = alloc_aligned<uint8_t>(data, buf_size * 2, 64);
+
+        dsp::matrix3d_t *dst    = reinterpret_cast<dsp::matrix3d_t *>(ptr);
+        dsp::matrix3d_t *src    = reinterpret_cast<dsp::matrix3d_t *>(&dst[N_MATRICES]);
+
+        // Initialize matrices
+        for (size_t i=0; i < N_MATRICES;)
+        {
+            randomize_sign(src[i].m,  16);
+            ++i;
+        }
+
+    #define CALL1(func) \
+        memcpy(dst, src, buf_size); \
+        call(#func, dst, func);
+
+    #define CALL2(func) \
+        memcpy(dst, src, buf_size); \
+        call(#func, dst, src, func);
+
+        CALL1(generic::transpose_matrix3d1);
+        IF_ARCH_X86(CALL1(sse::transpose_matrix3d1));
+        IF_ARCH_X86(CALL1(sse2::transpose_matrix3d1));
+        IF_ARCH_X86(CALL1(avx::transpose_matrix3d1));
+        PTEST_SEPARATOR;
+
+        CALL2(generic::transpose_matrix3d2);
+        IF_ARCH_X86(CALL2(sse::transpose_matrix3d2));
+        IF_ARCH_X86(CALL2(sse2::transpose_matrix3d2));
+        IF_ARCH_X86(CALL2(avx::transpose_matrix3d2));
+        PTEST_SEPARATOR;
+
+        free_aligned(data);
+    }
+PTEST_END
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/normal_p.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/normal_p.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/normal_p.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/normal_p.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 24 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+
+#define POINTS_COUNT    0x10000
+
+namespace lsp
+{
+    namespace generic
+    {
+        void calc_normal3d_p3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+        void calc_normal3d_pv(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            void calc_normal3d_p3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+            void calc_normal3d_pv(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+        }
+
+        namespace avx
+        {
+            void calc_normal3d_p3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+            void calc_normal3d_pv(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+
+            void calc_normal3d_p3_fma3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+            void calc_normal3d_pv_fma3(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+        }
+    )
+
+    typedef void (* calc_normal3d_p3_t)(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+    typedef void (* calc_normal3d_pv_t)(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.3d", normal_p, 5, 1000)
+
+    void call(const char *label, const dsp::point3d_t *pv, calc_normal3d_p3_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::vector3d_t dst;
+        PTEST_LOOP(label,
+            const dsp::point3d_t *p = pv;
+            for (size_t i=0; i<(POINTS_COUNT - 2); ++i, ++p)
+                func(&dst, &p[0], &p[1], &p[2]);
+        );
+    }
+
+    void call(const char *label, const dsp::point3d_t *pv, calc_normal3d_pv_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::vector3d_t dst;
+        PTEST_LOOP(label,
+            for (size_t i=0; i<(POINTS_COUNT - 2); ++i)
+                func(&dst, &pv[i]);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        const size_t buf_size   = POINTS_COUNT;
+        uint8_t *data           = NULL;
+        dsp::point3d_t *src     = alloc_aligned<dsp::point3d_t>(data, buf_size, 64);
+        lsp_finally {
+            free_aligned(data);
+        };
+
+        // Initialize data
+        for (size_t i=0; i < POINTS_COUNT; ++i)
+            dsp::init_point_xyz(&src[i], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+
+        #define CALL(func) \
+            call(#func, src, func);
+
+        CALL(generic::calc_normal3d_p3);
+        IF_ARCH_X86(CALL(sse::calc_normal3d_p3));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_p3));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_p3_fma3));
+        PTEST_SEPARATOR;
+
+        CALL(generic::calc_normal3d_pv);
+        IF_ARCH_X86(CALL(sse::calc_normal3d_pv));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_pv));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_pv_fma3));
+        PTEST_SEPARATOR;
+    }
+PTEST_END
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/normal_v.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/normal_v.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/normal_v.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/normal_v.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 24 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+
+#define VECTORS_COUNT       0x10000
+
+namespace lsp
+{
+    namespace generic
+    {
+        void calc_normal3d_v2(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+        void calc_normal3d_vv(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            void calc_normal3d_v2(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+            void calc_normal3d_vv(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+        }
+
+        namespace avx
+        {
+            void calc_normal3d_v2(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+            void calc_normal3d_vv(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+
+            void calc_normal3d_v2_fma3(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+            void calc_normal3d_vv_fma3(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+        }
+    )
+
+    typedef void (* calc_normal3d_v2_t)(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+    typedef void (* calc_normal3d_vv_t)(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.3d", normal_v, 5, 1000)
+
+    void call(const char *label, const dsp::vector3d_t *vv, calc_normal3d_v2_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::vector3d_t dst;
+        PTEST_LOOP(label,
+            const dsp::vector3d_t *v = vv;
+            for (size_t i=0; i<(VECTORS_COUNT - 1); ++i, ++v)
+                func(&dst, &v[0], &v[1]);
+        );
+    }
+
+    void call(const char *label, const dsp::vector3d_t *pv, calc_normal3d_vv_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::vector3d_t dst;
+        PTEST_LOOP(label,
+            for (size_t i=0; i<(VECTORS_COUNT - 1); ++i)
+                func(&dst, &pv[i]);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        const size_t buf_size   = VECTORS_COUNT;
+        uint8_t *data           = NULL;
+        dsp::vector3d_t *src    = alloc_aligned<dsp::vector3d_t>(data, buf_size, 64);
+        lsp_finally {
+            free_aligned(data);
+        };
+
+        // Initialize data
+        for (size_t i=0; i < VECTORS_COUNT; ++i)
+            dsp::init_vector_dxyz(&src[i], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+
+        #define CALL(func) \
+            call(#func, src, func);
+
+        CALL(generic::calc_normal3d_v2);
+        IF_ARCH_X86(CALL(sse::calc_normal3d_v2));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_v2));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_v2_fma3));
+        PTEST_SEPARATOR;
+
+        CALL(generic::calc_normal3d_vv);
+        IF_ARCH_X86(CALL(sse::calc_normal3d_vv));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_vv));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_vv_fma3));
+        PTEST_SEPARATOR;
+    }
+PTEST_END
+
+
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/plane_p.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/plane_p.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/plane_p.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/plane_p.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 24 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+
+#define POINTS_COUNT    0x10000
+
+namespace lsp
+{
+    namespace generic
+    {
+        float calc_plane_p3(dsp::vector3d_t *v, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+        float calc_plane_pv(dsp::vector3d_t *v, const dsp::point3d_t *pv);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            float calc_plane_p3(dsp::vector3d_t *v, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_plane_pv(dsp::vector3d_t *v, const dsp::point3d_t *pv);
+        }
+
+        namespace avx
+        {
+            float calc_plane_p3(dsp::vector3d_t *v, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_plane_pv(dsp::vector3d_t *v, const dsp::point3d_t *pv);
+
+            float calc_plane_p3_fma3(dsp::vector3d_t *v, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_plane_pv_fma3(dsp::vector3d_t *v, const dsp::point3d_t *pv);
+        }
+    )
+
+    typedef float (* calc_plane_p3_t)(dsp::vector3d_t *v, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+    typedef float (* calc_plane_pv_t)(dsp::vector3d_t *v, const dsp::point3d_t *pv);
+}
+
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.3d", plane_p, 5, 1000)
+
+    void call(const char *label, const dsp::point3d_t *pv, calc_plane_p3_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::vector3d_t dst;
+        PTEST_LOOP(label,
+            const dsp::point3d_t *p = pv;
+            for (size_t i=0; i<(POINTS_COUNT - 2); ++i, ++p)
+            {
+                func(&dst, &p[0], &p[1], &p[2]);
+            }
+        );
+    }
+
+    void call(const char *label, const dsp::point3d_t *pv, calc_plane_pv_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::vector3d_t dst;
+        PTEST_LOOP(label,
+            for (size_t i=0; i<(POINTS_COUNT - 2); ++i)
+                func(&dst, &pv[i]);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        const size_t buf_size   = POINTS_COUNT;
+        uint8_t *data           = NULL;
+        dsp::point3d_t *src     = alloc_aligned<dsp::point3d_t>(data, buf_size, 64);
+        lsp_finally {
+            free_aligned(data);
+        };
+
+        // Initialize data
+        for (size_t i=0; i < POINTS_COUNT; ++i)
+            dsp::init_point_xyz(&src[i], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+
+        #define CALL(func) \
+            call(#func, src, func);
+
+        CALL(generic::calc_plane_p3);
+        IF_ARCH_X86(CALL(sse::calc_plane_p3));
+        IF_ARCH_X86(CALL(avx::calc_plane_p3));
+        IF_ARCH_X86(CALL(avx::calc_plane_p3_fma3));
+        PTEST_SEPARATOR;
+
+        CALL(generic::calc_plane_pv);
+        IF_ARCH_X86(CALL(sse::calc_plane_pv));
+        IF_ARCH_X86(CALL(avx::calc_plane_pv));
+        IF_ARCH_X86(CALL(avx::calc_plane_pv_fma3));
+        PTEST_SEPARATOR;
+    }
+PTEST_END
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/plane_vp.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/plane_vp.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/plane_vp.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/plane_vp.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 24 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+
+#define CALLS_COUNT     0x10000
+
+namespace lsp
+{
+    namespace generic
+    {
+        float calc_plane_v1p2(dsp::vector3d_t *v, const dsp::vector3d_t *v0, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            float calc_plane_v1p2(dsp::vector3d_t *v, const dsp::vector3d_t *v0, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+        }
+
+        namespace avx
+        {
+            float calc_plane_v1p2(dsp::vector3d_t *v, const dsp::vector3d_t *v0, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+            float calc_plane_v1p2_fma3(dsp::vector3d_t *v, const dsp::vector3d_t *v0, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+        }
+    )
+
+    typedef float (* calc_plane_v1p2_t)(dsp::vector3d_t *v, const dsp::vector3d_t *v0, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+}
+
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.3d", plane_vp, 5, 1000)
+
+    typedef struct vplane_t
+    {
+        dsp::vector3d_t v;
+        dsp::point3d_t p1;
+        dsp::point3d_t p2;
+    } vplane_t;
+
+    void call(const char *label, const vplane_t *pv, calc_plane_v1p2_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::vector3d_t dst;
+
+        PTEST_LOOP(label,
+            const vplane_t *p = pv;
+            for (size_t i=0; i<CALLS_COUNT; ++i, ++p)
+            {
+                func(&dst, &p->v, &p->p1, &p->p2);
+            }
+        );
+    }
+
+    PTEST_MAIN
+    {
+        const size_t buf_size   = CALLS_COUNT;
+        uint8_t *data           = NULL;
+        vplane_t *src           = alloc_aligned<vplane_t>(data, buf_size, 64);
+        lsp_finally {
+            free_aligned(data);
+        };
+
+        // Initialize data
+        for (size_t i=0; i < CALLS_COUNT; ++i)
+        {
+            vplane_t *p = &src[i];
+            dsp::init_vector_dxyz(&p->v, randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+            dsp::init_point_xyz(&p->p1, randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+            dsp::init_point_xyz(&p->p2, randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+        }
+
+        #define CALL(func) \
+            call(#func, src, func);
+
+        CALL(generic::calc_plane_v1p2);
+        IF_ARCH_X86(CALL(sse::calc_plane_v1p2));
+        IF_ARCH_X86(CALL(avx::calc_plane_v1p2));
+        IF_ARCH_X86(CALL(avx::calc_plane_v1p2_fma3));
+        PTEST_SEPARATOR;
+    }
+PTEST_END
+
+
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/raw_triangle.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/raw_triangle.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/raw_triangle.cpp	2025-03-01 12:42:56.812648266 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/raw_triangle.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -38,7 +38,7 @@ namespace lsp
     }
 
     IF_ARCH_X86(
-        namespace sse
+        namespace sse2
         {
             void cull_triangle_raw(dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
             void split_triangle_raw(dsp::raw_triangle_t *out, size_t *n_out, dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
@@ -47,6 +47,14 @@ namespace lsp
         namespace sse3
         {
             void cull_triangle_raw(dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
+            void cull_triangle_raw_ssse3(dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
+            void split_triangle_raw(dsp::raw_triangle_t *out, size_t *n_out, dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
+            void split_triangle_raw_ssse3(dsp::raw_triangle_t *out, size_t *n_out, dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
+        }
+
+        namespace avx
+        {
+            void cull_triangle_raw(dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
             void split_triangle_raw(dsp::raw_triangle_t *out, size_t *n_out, dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
         }
     )
@@ -75,7 +83,7 @@ PTEST_BEGIN("dsp.3d", raw_triangle, 5, 1
                 const dsp::raw_triangle_t *t = vt;
                 size_t nin = 0;
                 for (size_t j=0; j<N_TRIANGLES; ++j, ++t)
-                    func(in, &nin, pl, vt);
+                    func(in, &nin, pl, t);
             }
         );
     }
@@ -95,7 +103,7 @@ PTEST_BEGIN("dsp.3d", raw_triangle, 5, 1
                 const dsp::raw_triangle_t *t = vt;
                 size_t nin = 0, nout=0;
                 for (size_t j=0; j<N_TRIANGLES; ++j, ++t)
-                    func(out, &nout, in, &nin, pl, vt);
+                    func(out, &nout, in, &nin, pl, t);
             }
         );
     }
@@ -136,14 +144,21 @@ PTEST_BEGIN("dsp.3d", raw_triangle, 5, 1
             dsp::init_point_xyz(&triangles[i].v[2], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
         }
 
-        call("generic::split_triangle_raw", planes, triangles, generic::split_triangle_raw);
-        IF_ARCH_X86(call("sse::split_triangle_raw", planes, triangles, sse::split_triangle_raw));
-        IF_ARCH_X86(call("sse3::split_triangle_raw", planes, triangles, sse3::split_triangle_raw));
+        #define CALL(func) \
+            call(#func, planes, triangles, func);
+
+        CALL(generic::split_triangle_raw);
+        IF_ARCH_X86(CALL(sse2::split_triangle_raw));
+        IF_ARCH_X86(CALL(sse3::split_triangle_raw));
+        IF_ARCH_X86(CALL(sse3::split_triangle_raw_ssse3));
+        IF_ARCH_X86(CALL(avx::split_triangle_raw));
         PTEST_SEPARATOR;
 
-        call("generic::cull_triangle_raw", planes, triangles, generic::cull_triangle_raw);
-        IF_ARCH_X86(call("sse::cull_triangle_raw", planes, triangles, sse::cull_triangle_raw));
-        IF_ARCH_X86(call("sse3::cull_triangle_raw", planes, triangles, sse3::cull_triangle_raw));
+        CALL(generic::cull_triangle_raw);
+        IF_ARCH_X86(CALL(sse2::cull_triangle_raw));
+        IF_ARCH_X86(CALL(sse3::cull_triangle_raw));
+        IF_ARCH_X86(CALL(sse3::cull_triangle_raw_ssse3));
+        IF_ARCH_X86(CALL(avx::cull_triangle_raw));
         PTEST_SEPARATOR;
 
         free_aligned(data);
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/split_point.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/split_point.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/3d/split_point.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/3d/split_point.cpp	2025-08-26 18:15:43.758002980 +0000
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 24 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+
+#define POINTS_COUNT    0x10000
+
+namespace lsp
+{
+    namespace generic
+    {
+        void calc_split_point_p2v1(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
+        void calc_split_point_pvv1(dsp::point3d_t *sp, const dsp::point3d_t *lv, const dsp::vector3d_t *pl);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            void calc_split_point_p2v1(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
+            void calc_split_point_pvv1(dsp::point3d_t *sp, const dsp::point3d_t *lv, const dsp::vector3d_t *pl);
+        }
+
+        namespace sse3
+        {
+            void calc_split_point_p2v1(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
+            void calc_split_point_pvv1(dsp::point3d_t *sp, const dsp::point3d_t *lv, const dsp::vector3d_t *pl);
+        }
+
+        namespace avx
+        {
+            void calc_split_point_p2v1(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
+            void calc_split_point_pvv1(dsp::point3d_t *sp, const dsp::point3d_t *lv, const dsp::vector3d_t *pl);
+
+            void calc_split_point_p2v1_fma3(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
+            void calc_split_point_pvv1_fma3(dsp::point3d_t *sp, const dsp::point3d_t *lv, const dsp::vector3d_t *pl);
+        }
+    )
+
+    typedef void (* calc_split_point_p2v1_t)(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
+    typedef void (* calc_split_point_pvv1_t)(dsp::point3d_t *sp, const dsp::point3d_t *lv, const dsp::vector3d_t *pl);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.3d", split_point, 5, 1000)
+
+    void call(const char *label, const dsp::point3d_t *pv, const dsp::vector3d_t *pl, calc_split_point_p2v1_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::point3d_t dst;
+        PTEST_LOOP(label,
+            const dsp::point3d_t *p = pv;
+            for (size_t i=0; i<(POINTS_COUNT - 1); ++i, ++p)
+                func(&dst, &p[0], &p[1], pl);
+        );
+    }
+
+    void call(const char *label, const dsp::point3d_t *pv, const dsp::vector3d_t *pl, calc_split_point_pvv1_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::point3d_t dst;
+        PTEST_LOOP(label,
+            for (size_t i=0; i<(POINTS_COUNT - 1); ++i)
+                func(&dst, &pv[i], pl);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        const size_t buf_size   = POINTS_COUNT;
+        uint8_t *data           = NULL;
+        dsp::point3d_t *src     = alloc_aligned<dsp::point3d_t>(data, buf_size, 64);
+        lsp_finally {
+            free_aligned(data);
+        };
+
+        // Initialize data
+        dsp::vector3d_t pl;
+        pl.dx   = 0.5f;
+        pl.dy   = 0.5f;
+        pl.dz   = 0.5f;
+        pl.dw   = -1.0f;
+
+        for (size_t i=0; i < POINTS_COUNT; ++i)
+            dsp::init_point_xyz(&src[i], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+
+        #define CALL(func) \
+            call(#func, src, &pl, func);
+
+        CALL(generic::calc_split_point_p2v1);
+        IF_ARCH_X86(CALL(sse::calc_split_point_p2v1));
+        IF_ARCH_X86(CALL(sse3::calc_split_point_p2v1));
+        IF_ARCH_X86(CALL(avx::calc_split_point_p2v1));
+        IF_ARCH_X86(CALL(avx::calc_split_point_p2v1_fma3));
+        PTEST_SEPARATOR;
+
+        CALL(generic::calc_split_point_pvv1);
+        IF_ARCH_X86(CALL(sse::calc_split_point_pvv1));
+        IF_ARCH_X86(CALL(sse3::calc_split_point_pvv1));
+        IF_ARCH_X86(CALL(avx::calc_split_point_pvv1));
+        IF_ARCH_X86(CALL(avx::calc_split_point_pvv1_fma3));
+        PTEST_SEPARATOR;
+    }
+PTEST_END
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf1.cpp	2025-08-26 18:15:43.762002942 +0000
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+#define MIN_RANK 8
+#define MAX_RANK 16
+
+namespace lsp
+{
+    namespace generic
+    {
+        void cosf1(float *dst, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void cosf1(float *dst, size_t count);
+        }
+
+        namespace avx2
+        {
+            void cosf1(float *dst, size_t count);
+            void cosf1_fma3(float *dst, size_t count);
+        }
+
+        namespace avx512
+        {
+            void cosf1(float *dst, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void cosf1(float *dst, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void cosf1(float *dst, size_t count);
+        }
+    )
+
+    typedef void (* cosf1_t)(float *dst, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.pmath", cosf1, 5, 1000)
+
+    void call(const char *label, float *dst, const float *src, size_t count, cosf1_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        char buf[80];
+        snprintf(buf, sizeof(buf), "%s x %d", label, int(count));
+        printf("Testing %s numbers...\n", buf);
+
+        PTEST_LOOP(buf,
+            dsp::copy(dst, src, count);
+            func(dst, count);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        size_t buf_size = 1 << MAX_RANK;
+        uint8_t *data   = NULL;
+        float *dst      = alloc_aligned<float>(data, buf_size * 3, 64);
+        float *src      = &dst[buf_size];
+        float *backup   = &src[buf_size];
+
+        for (size_t i=0; i < buf_size*3; ++i)
+            dst[i]          = randf(-100.0f * M_PI, 100.0f * M_PI);
+        dsp::copy(backup, dst, buf_size);
+
+        #define CALL(func) \
+            dsp::copy(dst, backup, buf_size); \
+            call(#func, dst, src, count, func);
+
+        for (size_t i=MIN_RANK; i <= MAX_RANK; ++i)
+        {
+            size_t count = 1 << i;
+
+            CALL(generic::cosf1);
+            IF_ARCH_X86(CALL(sse2::cosf1));
+            IF_ARCH_X86(CALL(avx2::cosf1));
+            IF_ARCH_X86(CALL(avx2::cosf1_fma3));
+            IF_ARCH_X86(CALL(avx512::cosf1));
+            IF_ARCH_ARM(CALL(neon_d32::cosf1));
+            IF_ARCH_AARCH64(CALL(asimd::cosf1));
+            PTEST_SEPARATOR;
+        }
+
+        free_aligned(data);
+    }
+PTEST_END
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf2.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf2.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf2.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf2.cpp	2025-08-26 18:15:43.762002942 +0000
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+#define MIN_RANK 8
+#define MAX_RANK 16
+
+namespace lsp
+{
+    namespace generic
+    {
+        void cosf2(float *dst, const float *src, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+        }
+
+        namespace avx2
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+            void cosf2_fma3(float *dst, const float *src, size_t count);
+        }
+
+        namespace avx512
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    typedef void (* cosf2_t)(float *dst, const float *src, size_t count);
+}
+
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.pmath", cosf2, 5, 1000)
+
+    void call(const char *label, float *dst, const float *src, size_t count, cosf2_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        char buf[80];
+        snprintf(buf, sizeof(buf), "%s x %d", label, int(count));
+        printf("Testing %s numbers...\n", buf);
+
+        PTEST_LOOP(buf,
+            func(dst, src, count);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        size_t buf_size = 1 << MAX_RANK;
+        uint8_t *data   = NULL;
+        float *dst      = alloc_aligned<float>(data, buf_size * 3, 64);
+        float *src      = &dst[buf_size];
+        float *backup   = &src[buf_size];
+
+        for (size_t i=0; i < buf_size*3; ++i)
+            dst[i]          = randf(-100.0f * M_PI, 100.0f * M_PI);
+        dsp::copy(backup, dst, buf_size);
+
+        #define CALL(func) \
+            dsp::copy(dst, backup, buf_size); \
+            call(#func, dst, src, count, func);
+
+        for (size_t i=MIN_RANK; i <= MAX_RANK; ++i)
+        {
+            size_t count = 1 << i;
+
+            CALL(generic::cosf2);
+            IF_ARCH_X86(CALL(sse2::cosf2));
+            IF_ARCH_X86(CALL(avx2::cosf2));
+            IF_ARCH_X86(CALL(avx2::cosf2_fma3));
+            IF_ARCH_X86(CALL(avx512::cosf2));
+            IF_ARCH_ARM(CALL(neon_d32::cosf2));
+            IF_ARCH_AARCH64(CALL(asimd::cosf2));
+            PTEST_SEPARATOR;
+        }
+
+        free_aligned(data);
+    }
+PTEST_END
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf_kp1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf_kp1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf_kp1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/cosf_kp1.cpp	2025-08-26 18:15:43.762002942 +0000
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+#define MIN_RANK 8
+#define MAX_RANK 16
+
+namespace lsp
+{
+    namespace generic
+    {
+        void cosf_kp1(float *dst, float k, float p, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx2
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+            void cosf_kp1_fma3(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx512
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_X86_64(
+        namespace avx2
+        {
+            void x64_cosf_kp1(float *dst, float k, float p, size_t count);
+            void x64_cosf_kp1_fma3(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx512
+        {
+            void x64_cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    typedef void (* cosf_kp1_t)(float *dst, float k, float p, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.pmath", cosf_kp1, 5, 1000)
+
+    void call(const char *label, float *dst, size_t count, cosf_kp1_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        char buf[80];
+        snprintf(buf, sizeof(buf), "%s x %d", label, int(count));
+        printf("Testing %s numbers...\n", buf);
+
+        PTEST_LOOP(buf,
+            func(dst, 0.5f, 0.5f, count);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        size_t buf_size = 1 << MAX_RANK;
+        uint8_t *data   = NULL;
+        float *dst      = alloc_aligned<float>(data, buf_size, 64);
+
+        #define CALL(func) \
+            call(#func, dst, count, func);
+
+        for (size_t i=MIN_RANK; i <= MAX_RANK; ++i)
+        {
+            size_t count = 1 << i;
+
+            CALL(generic::cosf_kp1);
+            IF_ARCH_X86(CALL(sse2::cosf_kp1));
+            IF_ARCH_X86(CALL(avx2::cosf_kp1));
+            IF_ARCH_X86(CALL(avx2::cosf_kp1_fma3));
+            IF_ARCH_X86_64(CALL(avx2::x64_cosf_kp1));
+            IF_ARCH_X86_64(CALL(avx2::x64_cosf_kp1_fma3));
+            IF_ARCH_X86(CALL(avx512::cosf_kp1));
+            IF_ARCH_X86_64(CALL(avx512::x64_cosf_kp1));
+            IF_ARCH_ARM(CALL(neon_d32::cosf_kp1));
+            IF_ARCH_AARCH64(CALL(asimd::cosf_kp1));
+            PTEST_SEPARATOR;
+        }
+
+        free_aligned(data);
+    }
+PTEST_END
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/lanczos1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/lanczos1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/lanczos1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/lanczos1.cpp	2025-08-26 18:15:43.762002942 +0000
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 17 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+#define MIN_RANK 8
+#define MAX_RANK 16
+
+namespace lsp
+{
+    namespace generic
+    {
+        void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+
+        namespace avx2
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+            void lanczos1_fma3(float *dst, float k, float p, float t, float a, size_t count);
+        }
+
+        namespace avx512
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+    )
+
+    IF_ARCH_X86_64(
+        namespace avx2
+        {
+            void x64_lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+            void x64_lanczos1_fma3(float *dst, float k, float p, float t, float a, size_t count);
+        }
+
+        namespace avx512
+        {
+            void x64_lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+    )
+
+    typedef void (* lanczos1_t)(float *dst, float k, float p, float t, float a, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.pmath", lanczos1, 5, 1000)
+
+    void call(const char *label, float *dst, size_t count, lanczos1_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        char buf[80];
+        snprintf(buf, sizeof(buf), "%s x %d", label, int(count));
+        printf("Testing %s numbers...\n", buf);
+
+        const size_t length     = count;
+        const size_t lobes      = 8.0f;
+        const size_t center     = length >> 1;
+        const float shift       = 0.0f;
+        const float k           = M_PI * float(lobes) / float(center); // Number of samples per lobe
+        const float p           = (float(center) - shift) * k;
+        const float t           = float(center) * k;
+        const float a           = 1.0f / float(lobes);
+
+        PTEST_LOOP(buf,
+            func(dst, k, p, t, a, count);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        size_t buf_size = 1 << MAX_RANK;
+        uint8_t *data   = NULL;
+        float *dst      = alloc_aligned<float>(data, buf_size, 64);
+
+        #define CALL(func) \
+            call(#func, dst, count, func);
+
+        for (size_t i=MIN_RANK; i <= MAX_RANK; ++i)
+        {
+            size_t count = 1 << i;
+
+            CALL(generic::lanczos1);
+            IF_ARCH_X86(CALL(sse2::lanczos1));
+            IF_ARCH_X86(CALL(avx2::lanczos1));
+            IF_ARCH_X86(CALL(avx2::lanczos1_fma3));
+            IF_ARCH_X86_64(CALL(avx2::x64_lanczos1));
+            IF_ARCH_X86_64(CALL(avx2::x64_lanczos1_fma3));
+            IF_ARCH_X86(CALL(avx512::lanczos1));
+            IF_ARCH_X86_64(CALL(avx512::x64_lanczos1));
+            IF_ARCH_ARM(CALL(neon_d32::lanczos1));
+            IF_ARCH_AARCH64(CALL(asimd::lanczos1));
+            PTEST_SEPARATOR;
+        }
+
+        free_aligned(data);
+    }
+PTEST_END
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf1.cpp	2025-08-26 18:15:43.762002942 +0000
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 11 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+#define MIN_RANK 8
+#define MAX_RANK 16
+
+namespace lsp
+{
+    namespace generic
+    {
+        void sinf1(float *dst, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void sinf1(float *dst, size_t count);
+        }
+
+        namespace avx2
+        {
+            void sinf1(float *dst, size_t count);
+            void sinf1_fma3(float *dst, size_t count);
+        }
+
+        namespace avx512
+        {
+            void sinf1(float *dst, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void sinf1(float *dst, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void sinf1(float *dst, size_t count);
+        }
+    )
+
+    typedef void (* sinf1_t)(float *dst, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.pmath", sinf1, 5, 1000)
+
+    void call(const char *label, float *dst, const float *src, size_t count, sinf1_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        char buf[80];
+        snprintf(buf, sizeof(buf), "%s x %d", label, int(count));
+        printf("Testing %s numbers...\n", buf);
+
+        PTEST_LOOP(buf,
+            dsp::copy(dst, src, count);
+            func(dst, count);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        size_t buf_size = 1 << MAX_RANK;
+        uint8_t *data   = NULL;
+        float *dst      = alloc_aligned<float>(data, buf_size * 3, 64);
+        float *src      = &dst[buf_size];
+        float *backup   = &src[buf_size];
+
+        for (size_t i=0; i < buf_size*3; ++i)
+            dst[i]          = randf(-100.0f * M_PI, 100.0f * M_PI);
+        dsp::copy(backup, dst, buf_size);
+
+        #define CALL(func) \
+            dsp::copy(dst, backup, buf_size); \
+            call(#func, dst, src, count, func);
+
+        for (size_t i=MIN_RANK; i <= MAX_RANK; ++i)
+        {
+            size_t count = 1 << i;
+
+            CALL(generic::sinf1);
+            IF_ARCH_X86(CALL(sse2::sinf1));
+            IF_ARCH_X86(CALL(avx2::sinf1));
+            IF_ARCH_X86(CALL(avx2::sinf1_fma3));
+            IF_ARCH_X86(CALL(avx512::sinf1));
+            IF_ARCH_ARM(CALL(neon_d32::sinf1));
+            IF_ARCH_AARCH64(CALL(asimd::sinf1));
+            PTEST_SEPARATOR;
+        }
+
+        free_aligned(data);
+    }
+PTEST_END
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf2.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf2.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf2.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf2.cpp	2025-08-26 18:15:43.762002942 +0000
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 11 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+#define MIN_RANK 8
+#define MAX_RANK 16
+
+namespace lsp
+{
+    namespace generic
+    {
+        void sinf2(float *dst, const float *src, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+        }
+
+        namespace avx2
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+            void sinf2_fma3(float *dst, const float *src, size_t count);
+        }
+
+        namespace avx512
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    typedef void (* sinf2_t)(float *dst, const float *src, size_t count);
+}
+
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.pmath", sinf2, 5, 1000)
+
+    void call(const char *label, float *dst, const float *src, size_t count, sinf2_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        char buf[80];
+        snprintf(buf, sizeof(buf), "%s x %d", label, int(count));
+        printf("Testing %s numbers...\n", buf);
+
+        PTEST_LOOP(buf,
+            func(dst, src, count);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        size_t buf_size = 1 << MAX_RANK;
+        uint8_t *data   = NULL;
+        float *dst      = alloc_aligned<float>(data, buf_size * 3, 64);
+        float *src      = &dst[buf_size];
+        float *backup   = &src[buf_size];
+
+        for (size_t i=0; i < buf_size*3; ++i)
+            dst[i]          = randf(-100.0f * M_PI, 100.0f * M_PI);
+        dsp::copy(backup, dst, buf_size);
+
+        #define CALL(func) \
+            dsp::copy(dst, backup, buf_size); \
+            call(#func, dst, src, count, func);
+
+        for (size_t i=MIN_RANK; i <= MAX_RANK; ++i)
+        {
+            size_t count = 1 << i;
+
+            CALL(generic::sinf2);
+            IF_ARCH_X86(CALL(sse2::sinf2));
+            IF_ARCH_X86(CALL(avx2::sinf2));
+            IF_ARCH_X86(CALL(avx2::sinf2_fma3));
+            IF_ARCH_X86(CALL(avx512::sinf2));
+            IF_ARCH_ARM(CALL(neon_d32::sinf2));
+            IF_ARCH_AARCH64(CALL(asimd::sinf2));
+            PTEST_SEPARATOR;
+        }
+
+        free_aligned(data);
+    }
+PTEST_END
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf_kp1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf_kp1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf_kp1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/ptest/pmath/sinf_kp1.cpp	2025-08-26 18:15:43.762002942 +0000
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 12 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/test-fw/ptest.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+#define MIN_RANK 8
+#define MAX_RANK 16
+
+namespace lsp
+{
+    namespace generic
+    {
+        void sinf_kp1(float *dst, float k, float p, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx2
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+            void sinf_kp1_fma3(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx512
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_X86_64(
+        namespace avx2
+        {
+            void x64_sinf_kp1(float *dst, float k, float p, size_t count);
+            void x64_sinf_kp1_fma3(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx512
+        {
+            void x64_sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    typedef void (* sinf_kp1_t)(float *dst, float k, float p, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Performance test
+PTEST_BEGIN("dsp.pmath", sinf_kp1, 5, 1000)
+
+    void call(const char *label, float *dst, size_t count, sinf_kp1_t func)
+    {
+        if (!PTEST_SUPPORTED(func))
+            return;
+
+        char buf[80];
+        snprintf(buf, sizeof(buf), "%s x %d", label, int(count));
+        printf("Testing %s numbers...\n", buf);
+
+        PTEST_LOOP(buf,
+            func(dst, 0.5f, 0.5f, count);
+        );
+    }
+
+    PTEST_MAIN
+    {
+        size_t buf_size = 1 << MAX_RANK;
+        uint8_t *data   = NULL;
+        float *dst      = alloc_aligned<float>(data, buf_size, 64);
+
+        #define CALL(func) \
+            call(#func, dst, count, func);
+
+        for (size_t i=MIN_RANK; i <= MAX_RANK; ++i)
+        {
+            size_t count = 1 << i;
+
+            CALL(generic::sinf_kp1);
+            IF_ARCH_X86(CALL(sse2::sinf_kp1));
+            IF_ARCH_X86(CALL(avx2::sinf_kp1));
+            IF_ARCH_X86(CALL(avx2::sinf_kp1_fma3));
+            IF_ARCH_X86_64(CALL(avx2::x64_sinf_kp1));
+            IF_ARCH_X86_64(CALL(avx2::x64_sinf_kp1_fma3));
+            IF_ARCH_X86(CALL(avx512::sinf_kp1));
+            IF_ARCH_X86_64(CALL(avx512::x64_sinf_kp1));
+            IF_ARCH_ARM(CALL(neon_d32::sinf_kp1));
+            IF_ARCH_AARCH64(CALL(asimd::sinf_kp1));
+            PTEST_SEPARATOR;
+        }
+
+        free_aligned(data);
+    }
+PTEST_END
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/angle.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/angle.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/angle.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/angle.cpp	1970-01-01 00:00:00.000000000 +0000
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
- *
- * This file is part of lsp-dsp-lib
- * Created on: 31 мар. 2020 г.
- *
- * lsp-dsp-lib is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * any later version.
- *
- * lsp-dsp-lib is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
- */
-
-#include <lsp-plug.in/common/types.h>
-#include <lsp-plug.in/dsp/dsp.h>
-#include <lsp-plug.in/stdlib/math.h>
-#include <lsp-plug.in/test-fw/utest.h>
-#include <lsp-plug.in/test-fw/helpers.h>
-
-namespace lsp
-{
-    namespace generic
-    {
-        float calc_angle3d_v2(const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
-        float calc_angle3d_vv(const dsp::vector3d_t *v);
-    }
-
-    IF_ARCH_X86(
-        namespace sse
-        {
-            float calc_angle3d_v2(const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
-            float calc_angle3d_vv(const dsp::vector3d_t *v);
-        }
-    )
-
-    typedef float (* calc_angle3d_v2_t)(const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
-    typedef float (* calc_angle3d_vv_t)(const dsp::vector3d_t *v);
-}
-
-UTEST_BEGIN("dsp.3d", angle)
-
-    void call(const char *label,
-            calc_angle3d_v2_t calc_angle3d_v2,
-            calc_angle3d_vv_t calc_angle3d_vv
-            )
-    {
-        for (float phi=0.0f; phi<M_PI*2; phi += M_PI*0.125f)
-        {
-            for (float rho=0.0f; rho<M_PI; rho += M_PI*0.125f)
-            {
-                dsp::vector3d_t v[2];
-                dsp::matrix3d_t m;
-
-                dsp::init_vector_dxyz(&v[0], 1.0f, 0.0f, 0.0f);
-                dsp::init_vector(&v[1], &v[0]);
-                dsp::init_matrix3d_rotate_z(&m, rho);
-                dsp::apply_matrix3d_mv1(&v[1], &m);
-
-                dsp::init_matrix3d_rotate_y(&m, phi);
-                dsp::apply_matrix3d_mv1(&v[0], &m);
-                dsp::apply_matrix3d_mv1(&v[1], &m);
-
-                float angle = calc_angle3d_v2(&v[0], &v[1]);
-                UTEST_ASSERT_MSG(float_equals_relative(angle, cosf(rho)),
-                            "calc_angle3d_v2 failed phi=%.3f, rho=%.3f, result=%.3f", phi, rho, angle);
-
-                angle = calc_angle3d_vv(v);
-                UTEST_ASSERT_MSG(float_equals_relative(angle, cosf(rho)),
-                                        "calc_angle3d_vv failed phi=%.3f, rho=%.3f, result=%.3f", phi, rho, angle);
-            }
-        }
-    }
-
-    UTEST_MAIN
-    {
-        call("generic_calc_angle",
-                generic::calc_angle3d_v2,
-                generic::calc_angle3d_vv
-            );
-        IF_ARCH_X86(
-            call("sse_calc_angle",
-                    sse::calc_angle3d_v2,
-                    sse::calc_angle3d_vv
-                )
-        );
-    }
-
-UTEST_END
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/area.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/area.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/area.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/area.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -39,6 +39,14 @@ namespace lsp
             float calc_area_p3(const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
             float calc_area_pv(const dsp::point3d_t *pv);
         }
+
+        namespace avx
+        {
+            float calc_area_p3(const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_area_p3_fma3(const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_area_pv(const dsp::point3d_t *pv);
+            float calc_area_pv_fma3(const dsp::point3d_t *pv);
+        }
     )
 
     typedef float (* calc_area_p3_t)(const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
@@ -98,6 +106,8 @@ UTEST_BEGIN("dsp.3d", area)
     UTEST_MAIN
     {
         IF_ARCH_X86(call("sse::calc_area", sse::calc_area_p3, sse::calc_area_pv));
+        IF_ARCH_X86(call("avx::calc_area", avx::calc_area_p3, avx::calc_area_pv));
+        IF_ARCH_X86(call("avx_fma3::calc_area", avx::calc_area_p3_fma3, avx::calc_area_pv_fma3));
     }
 UTEST_END;
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/check_point_on_triangle.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/check_point_on_triangle.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/check_point_on_triangle.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/check_point_on_triangle.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 24 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/stdlib/math.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <private/utest/dsp/3d/helpers.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        float check_point3d_on_triangle_p3p(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+        float check_point3d_on_triangle_pvp(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            float check_point3d_on_triangle_p3p(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+            float check_point3d_on_triangle_pvp(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+        }
+
+        namespace avx
+        {
+            float check_point3d_on_triangle_p3p(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+            float check_point3d_on_triangle_pvp(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+
+            float check_point3d_on_triangle_p3p_fma3(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+            float check_point3d_on_triangle_pvp_fma3(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+        }
+    )
+
+    typedef float (* check_point3d_on_triangle_p3p_t)(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
+    typedef float (* check_point3d_on_triangle_pvp_t)(const dsp::point3d_t *pv, const dsp::point3d_t *p);
+}
+
+
+UTEST_BEGIN("dsp.3d", check_point_on_triangle)
+
+    void test_point(
+        size_t k, size_t i, size_t j,
+        const dsp::point3d_t *t,
+        check_point3d_on_triangle_p3p_t check_p3p,
+        check_point3d_on_triangle_pvp_t check_pvp,
+        const dsp::point3d_t *p,
+        float sign)
+    {
+        // Check p3p
+        float result = check_p3p(&t[0], &t[1], &t[2], p);
+        if (((sign < 0.0f) && (result >= 0.0f)) ||
+            ((sign > 0.0f) && (result <= 0.0f)) ||
+            ((sign == 0.0f) && (result != 0.0f)))
+        {
+            for (size_t i=0; i<3; ++i)
+                printf("t[%d] = {%f, %f, %f, %f}\n", int(i), t[i].x, t[i].y, t[i].z, t[i].w);
+            printf("p    = {%f, %f, %f, %f}\n", p->x, p->y, p->z, p->w);
+            UTEST_ASSERT_MSG(false,
+                "k=%d, i=%d, j=%d: failed check_point3d_on_triangle_p3p check, result=%f, expected=%f",
+                int(k), int(i), int(j),
+                result, sign);
+        }
+
+        // Check pvp
+        result = check_pvp(t, p);
+        if (((sign < 0.0f) && (result >= 0.0f)) ||
+            ((sign > 0.0f) && (result <= 0.0f)) ||
+            ((sign == 0.0f) && (result != 0.0f)))
+        {
+            for (size_t i=0; i<3; ++i)
+                printf("t[%d] = {%f, %f, %f, %f}\n", int(i), t[i].x, t[i].y, t[i].z, t[i].w);
+            printf("p    = {%f, %f, %f, %f}\n", p->x, p->y, p->z, p->w);
+            UTEST_ASSERT_MSG(false,
+                "k=%d, i=%d, j=%d: failed check_point3d_on_triangle_pvp check, result=%f, expected=%f",
+                int(k), int(i), int(j),
+                result, sign);
+        }
+    }
+
+    #define TEST_POINT(x, y, z, s) \
+        if (j == 0) \
+            dsp::init_point_xyz(&p, x, y, z); \
+        else if (j == 1) \
+            dsp::init_point_xyz(&p, y, z, x); \
+        else \
+            dsp::init_point_xyz(&p, z, x, y); \
+        test_point(k, i, j, t, check_p3p, check_pvp, &p, s);
+
+    void call(
+        const char *label,
+        check_point3d_on_triangle_p3p_t check_p3p,
+        check_point3d_on_triangle_pvp_t check_pvp)
+    {
+        if ((!UTEST_SUPPORTED(check_p3p)) || (!UTEST_SUPPORTED(check_pvp)))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        // Init points
+        dsp::point3d_t t[3], p;
+        dsp::init_point_xyz(&t[0], 1.0f, 1.0f, 1.0f);
+        dsp::init_point_xyz(&t[1], 3.0f, 1.0f, 1.0f);
+        dsp::init_point_xyz(&t[2], 2.0f, 3.0f, 1.0f);
+
+        static const float delta = 1e-4f;
+
+        for (size_t k = 0; k < 2; ++k)
+        {
+            for (size_t i=0; i<3; ++i)
+            {
+                for (size_t j=0; j<3; ++j)
+                {
+                    // Test points inside of triangle
+                    TEST_POINT(2.0f, 2.0f, 1.0f, 1.0f);
+                    TEST_POINT(2.0f, 2.75f, 1.0f, 1.0f);
+                    TEST_POINT(2.0f, 1.25f, 1.0f, 1.0f);
+                    TEST_POINT(1.25f, 1.25f, 1.0f, 1.0f);
+                    TEST_POINT(2.75f, 1.25f, 1.0f, 1.0f);
+                    // Test points inside of triangle with small offsets
+                    TEST_POINT(2.0f, 2.0f, 1.0f + delta, 1.0f);
+                    TEST_POINT(2.0f, 2.75f, 1.0f + delta, 1.0f);
+                    TEST_POINT(2.0f, 1.25f, 1.0f + delta, 1.0f);
+                    TEST_POINT(1.25f, 1.25f, 1.0f + delta, 1.0f);
+                    TEST_POINT(2.75f, 1.25f, 1.0f + delta, 1.0f);
+                    TEST_POINT(2.0f, 2.0f, 1.0f - delta, 1.0f);
+                    TEST_POINT(2.0f, 2.75f, 1.0f - delta, 1.0f);
+                    TEST_POINT(2.0f, 1.25f, 1.0f - delta, 1.0f);
+                    TEST_POINT(1.25f, 1.25f, 1.0f - delta, 1.0f);
+                    TEST_POINT(2.75f, 1.25f, 1.0f - delta, 1.0f);
+                    // Test points nearby vertices
+                    TEST_POINT(1.0f + delta, 1.0f + delta, 1.0f, 1.0f);
+                    TEST_POINT(3.0f - delta, 1.0f + delta, 1.0f, 1.0f);
+                    TEST_POINT(2.0f, 3.0f - delta, 1.0f, 1.0f);
+                    // Test points nearby edges
+                    TEST_POINT(1.5f + delta, 2.0f, 1.0f, 1.0f);
+                    TEST_POINT(2.5f - delta, 2.0f, 1.0f, 1.0f);
+                    TEST_POINT(2.0f, 1.0f + delta, 1.0f, 1.0f);
+                    // Test points lying on vertices
+                    TEST_POINT(1.0f, 1.0f, 1.0f, 0.0f);
+                    TEST_POINT(3.0f, 1.0f, 1.0f, 0.0f);
+                    TEST_POINT(2.0f, 3.0f, 1.0f, 0.0f);
+                    // Test points lying on edges of triangle
+                    TEST_POINT(1.5f, 2.0f, 1.0f, 0.0f);
+                    TEST_POINT(2.5f, 2.0f, 1.0f, 0.0f);
+                    TEST_POINT(2.0f, 1.0f, 1.0f, 0.0f);
+                    // Test points lying on edges continuations of triangle
+                    TEST_POINT(0.5f, 0.0f, 1.0f, -1.0f);
+                    TEST_POINT(0.5f, 1.0f, 1.0f, -1.0f);
+                    TEST_POINT(4.0f, -1.0f, 1.0f, -1.0f);
+                    TEST_POINT(4.0f, 1.0f, 1.0f, -1.0f);
+                    TEST_POINT(1.0f, 5.0f, 1.0f, -1.0f);
+                    TEST_POINT(2.5f, 4.0f, 1.0f, -1.0f);
+
+                    // Rotate point coordinates
+                    for (size_t j=0; j<3; ++j)
+                    {
+                        const float c = t[j].x;
+                        t[j].x = t[j].y;
+                        t[j].y = t[j].z;
+                        t[j].z = c;
+                    }
+                }
+
+                // Rotate triangle edges
+                p = t[0];
+                t[0] = t[1];
+                t[1] = t[2];
+                t[2] = p;
+            }
+
+            // Flip order of vertices
+            p = t[0];
+            t[0] = t[1];
+            t[1] = p;
+        }
+    }
+
+    UTEST_MAIN
+    {
+        IF_ARCH_X86(call(
+            "generic::check_point3d_on_triangle",
+            generic::check_point3d_on_triangle_p3p,
+            generic::check_point3d_on_triangle_pvp));
+
+        IF_ARCH_X86(call(
+            "sse::check_point3d_on_triangle",
+            sse::check_point3d_on_triangle_p3p,
+            sse::check_point3d_on_triangle_pvp));
+
+        IF_ARCH_X86(call(
+            "avx::check_point3d_on_triangle",
+            avx::check_point3d_on_triangle_p3p,
+            avx::check_point3d_on_triangle_pvp));
+
+        IF_ARCH_X86(call(
+            "avx_fma3::check_point3d_on_triangle",
+            avx::check_point3d_on_triangle_p3p_fma3,
+            avx::check_point3d_on_triangle_pvp_fma3));
+    }
+UTEST_END;
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/colocation_x2.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/colocation_x2.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/colocation_x2.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/colocation_x2.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 17 нояб. 2020 г.
@@ -39,11 +39,23 @@ namespace lsp
             size_t colocation_x2_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
         }
 
+        namespace sse2
+        {
+            size_t colocation_x2_v1p2(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+            size_t colocation_x2_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
+        }
+
         namespace sse3
         {
             size_t colocation_x2_v1p2(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
             size_t colocation_x2_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
         }
+
+        namespace avx
+        {
+            size_t colocation_x2_v1p2(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+            size_t colocation_x2_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
+        }
     )
 
     typedef size_t (* colocation_x2_v1p2_t)(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
@@ -183,9 +195,13 @@ UTEST_BEGIN("dsp.3d", colocation_x2)
             test(#func, func)
 
         IF_ARCH_X86(CALL(sse::colocation_x2_v1p2));
+        IF_ARCH_X86(CALL(sse2::colocation_x2_v1p2));
         IF_ARCH_X86(CALL(sse3::colocation_x2_v1p2));
+        IF_ARCH_X86(CALL(avx::colocation_x2_v1p2));
 
         IF_ARCH_X86(CALL(sse::colocation_x2_v1pv));
+        IF_ARCH_X86(CALL(sse2::colocation_x2_v1pv));
         IF_ARCH_X86(CALL(sse3::colocation_x2_v1pv));
+        IF_ARCH_X86(CALL(avx::colocation_x2_v1pv));
     }
 UTEST_END;
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/colocation_x3.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/colocation_x3.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/colocation_x3.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/colocation_x3.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 17 нояб. 2020 г.
@@ -43,6 +43,14 @@ namespace lsp
             size_t colocation_x3_vvp1(const dsp::vector3d_t *vv, const dsp::point3d_t *p);
         }
 
+        namespace sse2
+        {
+            size_t colocation_x3_v1p3(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            size_t colocation_x3_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
+            size_t colocation_x3_v3p1(const dsp::vector3d_t *v0, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::point3d_t *p);
+            size_t colocation_x3_vvp1(const dsp::vector3d_t *vv, const dsp::point3d_t *p);
+        }
+
         namespace sse3
         {
             size_t colocation_x3_v1p3(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
@@ -50,6 +58,14 @@ namespace lsp
             size_t colocation_x3_v3p1(const dsp::vector3d_t *v0, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::point3d_t *p);
             size_t colocation_x3_vvp1(const dsp::vector3d_t *vv, const dsp::point3d_t *p);
         }
+
+        namespace avx
+        {
+            size_t colocation_x3_v1p3(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            size_t colocation_x3_v1pv(const dsp::vector3d_t *pl, const dsp::point3d_t *pv);
+            size_t colocation_x3_v3p1(const dsp::vector3d_t *v0, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::point3d_t *p);
+            size_t colocation_x3_vvp1(const dsp::vector3d_t *vv, const dsp::point3d_t *p);
+        }
     )
 
     typedef size_t (* colocation_x3_v1p3_t)(const dsp::vector3d_t *pl, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
@@ -294,15 +310,23 @@ UTEST_BEGIN("dsp.3d", colocation_x3)
             test ## id(#func, func)
 
         IF_ARCH_X86(CALL(1, sse::colocation_x3_v1p3));
+        IF_ARCH_X86(CALL(1, sse2::colocation_x3_v1p3));
         IF_ARCH_X86(CALL(1, sse3::colocation_x3_v1p3));
+        IF_ARCH_X86(CALL(1, avx::colocation_x3_v1p3));
 
         IF_ARCH_X86(CALL(2, sse::colocation_x3_v1pv));
+        IF_ARCH_X86(CALL(2, sse2::colocation_x3_v1pv));
         IF_ARCH_X86(CALL(2, sse3::colocation_x3_v1pv));
+        IF_ARCH_X86(CALL(2, avx::colocation_x3_v1pv));
 
         IF_ARCH_X86(CALL(3, sse::colocation_x3_v3p1));
+        IF_ARCH_X86(CALL(3, sse2::colocation_x3_v3p1));
         IF_ARCH_X86(CALL(3, sse3::colocation_x3_v3p1));
+        IF_ARCH_X86(CALL(3, avx::colocation_x3_v3p1));
 
         IF_ARCH_X86(CALL(4, sse::colocation_x3_vvp1));
+        IF_ARCH_X86(CALL(4, sse2::colocation_x3_vvp1));
         IF_ARCH_X86(CALL(4, sse3::colocation_x3_vvp1));
+        IF_ARCH_X86(CALL(4, avx::colocation_x3_vvp1));
     }
 UTEST_END;
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/cull_triangle.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/cull_triangle.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/cull_triangle.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/cull_triangle.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -31,7 +31,7 @@ namespace lsp
     }
 
     IF_ARCH_X86(
-        namespace sse
+        namespace sse2
         {
             void cull_triangle_raw(dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
         }
@@ -39,6 +39,12 @@ namespace lsp
         namespace sse3
         {
             void cull_triangle_raw(dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
+            void cull_triangle_raw_ssse3(dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
+        }
+
+        namespace avx
+        {
+            void cull_triangle_raw(dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
         }
     )
 
@@ -175,9 +181,14 @@ UTEST_BEGIN("dsp.3d", cull_triangle)
 
     UTEST_MAIN
     {
-        test_func("generic::cull_triangle_raw", generic::cull_triangle_raw);
-        IF_ARCH_X86(test_func("sse::cull_triangle_raw", sse::cull_triangle_raw));
-        IF_ARCH_X86(test_func("sse3::cull_triangle_raw", sse3::cull_triangle_raw));
+        #define CALL(func) \
+            test_func(#func, func);
+
+        CALL(generic::cull_triangle_raw);
+        IF_ARCH_X86(CALL(sse2::cull_triangle_raw));
+        IF_ARCH_X86(CALL(sse3::cull_triangle_raw));
+        IF_ARCH_X86(CALL(sse3::cull_triangle_raw_ssse3));
+        IF_ARCH_X86(CALL(avx::cull_triangle_raw));
     }
 UTEST_END;
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/edge.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/edge.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/edge.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/edge.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -37,6 +37,12 @@ namespace lsp
             size_t longest_edge3d_p3(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
             size_t longest_edge3d_pv(const dsp::point3d_t *p);
         }
+
+        namespace avx
+        {
+            size_t longest_edge3d_p3(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+            size_t longest_edge3d_pv(const dsp::point3d_t *p);
+        }
     )
 
     typedef size_t (* longest_edge3d_p3_t)(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
@@ -62,6 +68,20 @@ UTEST_BEGIN("dsp.3d", edge)
         UTEST_ASSERT_MSG(longest_edge3d_p3(&lp[0], &lp[1], &lp[2]) == 1, "longest_edge3d_p3 failed");
         UTEST_ASSERT_MSG(longest_edge3d_p3(&lp[1], &lp[2], &lp[0]) == 0, "longest_edge3d_p3 failed");
         UTEST_ASSERT_MSG(longest_edge3d_p3(&lp[2], &lp[0], &lp[1]) == 2, "longest_edge3d_p3 failed");
+
+        dsp::init_point_xyz(&lp[0], 0.0f, 0.0f, 0.0f);
+        dsp::init_point_xyz(&lp[1], 1.0f, 0.0f, 0.0f);
+        dsp::init_point_xyz(&lp[2], 0.5f, 1.0f, 0.0f);
+
+        UTEST_ASSERT_MSG(longest_edge3d_p3(&lp[0], &lp[1], &lp[2]) == 1, "longest_edge3d_p3 failed");
+        UTEST_ASSERT_MSG(longest_edge3d_p3(&lp[1], &lp[2], &lp[0]) == 0, "longest_edge3d_p3 failed");
+        UTEST_ASSERT_MSG(longest_edge3d_p3(&lp[2], &lp[0], &lp[1]) == 0, "longest_edge3d_p3 failed");
+
+        UTEST_ASSERT_MSG(longest_edge3d_p3(&lp[0], &lp[2], &lp[1]) == 0, "longest_edge3d_p3 failed");
+        UTEST_ASSERT_MSG(longest_edge3d_p3(&lp[1], &lp[0], &lp[2]) == 1, "longest_edge3d_p3 failed");
+        UTEST_ASSERT_MSG(longest_edge3d_p3(&lp[2], &lp[1], &lp[0]) == 0, "longest_edge3d_p3 failed");
+
+        UTEST_ASSERT_MSG(longest_edge3d_pv(lp) == 1, "longest_edge3d_pv failed");
     }
 
     UTEST_MAIN
@@ -76,6 +96,12 @@ UTEST_BEGIN("dsp.3d", edge)
                     sse::longest_edge3d_pv
                 )
         );
+        IF_ARCH_X86(
+            call("avx::longest_edge",
+                    avx::longest_edge3d_p3,
+                    avx::longest_edge3d_pv
+                )
+        );
     }
 
 UTEST_END
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/matrix.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/matrix.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/matrix.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/matrix.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -43,9 +43,6 @@ namespace lsp
         void init_matrix3d_rotate_z(dsp::matrix3d_t *m, float angle);
         void init_matrix3d_rotate_xyz(dsp::matrix3d_t *m, float x, float y, float z, float angle);
 
-        void calc_matrix3d_transform_p1v1(dsp::matrix3d_t *m, const dsp::point3d_t *p, const dsp::vector3d_t *v);
-        void calc_matrix3d_transform_r1(dsp::matrix3d_t *m, const dsp::ray3d_t *r);
-
         void apply_matrix3d_mv2(dsp::vector3d_t *r, const dsp::vector3d_t *v, const dsp::matrix3d_t *m);
         void apply_matrix3d_mv1(dsp::vector3d_t *r, const dsp::matrix3d_t *m);
         void apply_matrix3d_mp2(dsp::point3d_t *r, const dsp::point3d_t *p, const dsp::matrix3d_t *m);
@@ -78,6 +75,44 @@ namespace lsp
             void apply_matrix3d_mm2(dsp::matrix3d_t *r, const dsp::matrix3d_t *s, const dsp::matrix3d_t *m);
             void apply_matrix3d_mm1(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
         }
+
+        namespace sse2
+        {
+            void transpose_matrix3d1(dsp::matrix3d_t *r);
+            void transpose_matrix3d2(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
+        }
+
+        namespace avx
+        {
+            void init_matrix3d(dsp::matrix3d_t *dst, const dsp::matrix3d_t *src);
+            void init_matrix3d_zero(dsp::matrix3d_t *m);
+            void init_matrix3d_one(dsp::matrix3d_t *m);
+            void init_matrix3d_identity(dsp::matrix3d_t *m);
+            void transpose_matrix3d1(dsp::matrix3d_t *r);
+            void transpose_matrix3d2(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
+
+            void init_matrix3d_translate(dsp::matrix3d_t *m, float dx, float dy, float dz);
+            void init_matrix3d_scale(dsp::matrix3d_t *m, float sx, float sy, float sz);
+            void init_matrix3d_rotate_x(dsp::matrix3d_t *m, float angle);
+            void init_matrix3d_rotate_y(dsp::matrix3d_t *m, float angle);
+            void init_matrix3d_rotate_z(dsp::matrix3d_t *m, float angle);
+//            void init_matrix3d_rotate_xyz(dsp::matrix3d_t *m, float x, float y, float z, float angle);
+
+            void apply_matrix3d_mp2(dsp::point3d_t *r, const dsp::point3d_t *p, const dsp::matrix3d_t *m);
+            void apply_matrix3d_mp2_fma3(dsp::point3d_t *r, const dsp::point3d_t *p, const dsp::matrix3d_t *m);
+            void apply_matrix3d_mp1(dsp::point3d_t *r, const dsp::matrix3d_t *m);
+            void apply_matrix3d_mp1_fma3(dsp::point3d_t *r, const dsp::matrix3d_t *m);
+
+            void apply_matrix3d_mm2(dsp::matrix3d_t *r, const dsp::matrix3d_t *s, const dsp::matrix3d_t *m);
+            void apply_matrix3d_mm2_fma3(dsp::matrix3d_t *r, const dsp::matrix3d_t *s, const dsp::matrix3d_t *m);
+            void apply_matrix3d_mm1(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
+            void apply_matrix3d_mm1_fma3(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
+
+            void apply_matrix3d_mv2(dsp::vector3d_t *r, const dsp::vector3d_t *v, const dsp::matrix3d_t *m);
+            void apply_matrix3d_mv2_fma3(dsp::vector3d_t *r, const dsp::vector3d_t *v, const dsp::matrix3d_t *m);
+            void apply_matrix3d_mv1(dsp::vector3d_t *r, const dsp::matrix3d_t *m);
+            void apply_matrix3d_mv1_fma3(dsp::vector3d_t *r, const dsp::matrix3d_t *m);
+        }
     )
 
     typedef void (* init_matrix3d_t)(dsp::matrix3d_t *dst, const dsp::matrix3d_t *src);
@@ -98,50 +133,14 @@ namespace lsp
     typedef void (* apply_matrix3d_mm1_t)(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
     typedef void (* transpose_matrix3d1_t)(dsp::matrix3d_t *r);
     typedef void (* transpose_matrix3d2_t)(dsp::matrix3d_t *r, const dsp::matrix3d_t *m);
-
-    typedef void (* calc_matrix3d_transform_p1v1)(dsp::matrix3d_t *m, const dsp::point3d_t *p, const dsp::vector3d_t *v);
-    typedef void (* calc_matrix3d_transform_r1)(dsp::matrix3d_t *m, const dsp::ray3d_t *r);
 }
 
 UTEST_BEGIN("dsp.3d", matrix)
 
-    void calc_matrix3d_transform(
-                const char *label,
-                calc_matrix3d_transform_p1v1 transform_p1v1,
-                calc_matrix3d_transform_r1 transform_r1
-            )
+    static void fill_matrix(dsp::matrix3d_t & m)
     {
-        printf("Testing %s\n", label);
-
-        if ((!UTEST_SUPPORTED(transform_p1v1)) ||
-            (!UTEST_SUPPORTED(transform_r1))
-            )
-            return;
-
-        dsp::ray3d_t r;
-        dsp::init_point_xyz(&r.z, 1.0f, 2.0f, 3.0f);
-        dsp::init_vector_dxyz(&r.v, 0.5f, 0.6f, 0.7f);
-
-        dsp::point3d_t p, dp, check;
-        dsp::init_point_xyz(&p, 0.0f, 0.0f, 2.0f);
-        dsp::init_point_xyz(&check, 2.0f, 3.2f, 4.4f);
-
-        dsp::matrix3d_t m;
-
-        transform_p1v1(&m, &r.z, &r.v);
-        dsp::apply_matrix3d_mp2(&dp, &p, &m);
-        UTEST_ASSERT_MSG(point3d_ck(&dp, &check), "point = {%f, %f, %f}, expected= {%f, %f, %f}\n",
-                dp.x, dp.y, dp.z,
-                check.x, check.y, check.z
-            );
-
-
-        transform_r1(&m, &r);
-        dsp::apply_matrix3d_mp2(&dp, &p, &m);
-        UTEST_ASSERT_MSG(point3d_ck(&dp, &check), "point = {%f, %f, %f}, expected= {%f, %f, %f}\n",
-                dp.x, dp.y, dp.z,
-                check.x, check.y, check.z
-            );
+        for (size_t i=0; i<16; ++i)
+            m.m[i]  = (i + 1) * 0.01f;
     }
 
     void init_data(
@@ -166,6 +165,10 @@ UTEST_BEGIN("dsp.3d", matrix)
         printf("Testing %s\n", label);
 
         dsp::matrix3d_t m1, m2, m3;
+        fill_matrix(m1);
+        fill_matrix(m2);
+        fill_matrix(m3);
+
         generic::init_matrix3d_zero(&m1);
         init_matrix3d_zero(&m2);
         UTEST_ASSERT_MSG(matrix3d_ck(&m1, &m2), "init_matrix3d_zero failed");
@@ -230,6 +233,22 @@ UTEST_BEGIN("dsp.3d", matrix)
         dsp::matrix3d_t  i1, t1, s1, rx1, ry1, rz1, rxyz1;
         dsp::matrix3d_t  i2, t2, s2, rx2, ry2, rz2, rxyz2;
 
+        fill_matrix(i1);
+        fill_matrix(t1);
+        fill_matrix(s1);
+        fill_matrix(rx1);
+        fill_matrix(ry1);
+        fill_matrix(rz1);
+        fill_matrix(rxyz1);
+
+        fill_matrix(i2);
+        fill_matrix(t2);
+        fill_matrix(s2);
+        fill_matrix(rx2);
+        fill_matrix(ry2);
+        fill_matrix(rz2);
+        fill_matrix(rxyz2);
+
         generic::init_matrix3d_identity(&i1);
         init_matrix3d_identity(&i2);
         UTEST_ASSERT_MSG(matrix3d_ck(&i1, &i2), "init_matrix3d_identity failed");
@@ -289,6 +308,10 @@ UTEST_BEGIN("dsp.3d", matrix)
             apply_matrix3d_mp2_t apply_matrix3d_mp2
             )
     {
+        if ((!UTEST_SUPPORTED(apply_matrix3d_mp1)) ||
+            (!UTEST_SUPPORTED(apply_matrix3d_mp2)))
+            return;
+
         dsp::matrix3d_t m;
         dsp::point3d_t p1, p2, p3, p4, pc;
 
@@ -398,6 +421,12 @@ UTEST_BEGIN("dsp.3d", matrix)
             apply_matrix3d_mv2_t apply_matrix3d_mv2
             )
     {
+        if ((!UTEST_SUPPORTED(apply_matrix3d_mv1)) ||
+            (!UTEST_SUPPORTED(apply_matrix3d_mv2)))
+            return;
+
+        printf("Testing %s\n", label);
+
         dsp::matrix3d_t m;
         dsp::vector3d_t v1, v2, v3, v4, vc;
 
@@ -485,12 +514,42 @@ UTEST_BEGIN("dsp.3d", matrix)
 
     UTEST_MAIN
     {
-        IF_ARCH_X86(init_data("sse init_matrix",
-                sse::init_matrix3d, sse::init_matrix3d_zero, sse::init_matrix3d_one, sse::init_matrix3d_identity,
-                sse::transpose_matrix3d1, sse::transpose_matrix3d2
+        IF_ARCH_X86(
+            init_data(
+                "sse init_matrix",
+                sse::init_matrix3d,
+                sse::init_matrix3d_zero,
+                sse::init_matrix3d_one,
+                sse::init_matrix3d_identity,
+                sse::transpose_matrix3d1,
+                sse::transpose_matrix3d2
             ));
 
-        IF_ARCH_X86(transform("sse init_matrix_transform",
+        IF_ARCH_X86(
+            init_data(
+                "sse2 init_matrix",
+                sse::init_matrix3d,
+                sse::init_matrix3d_zero,
+                sse::init_matrix3d_one,
+                sse::init_matrix3d_identity,
+                sse2::transpose_matrix3d1,
+                sse2::transpose_matrix3d2
+            ));
+
+        IF_ARCH_X86(
+            init_data(
+                "avx init_matrix",
+                avx::init_matrix3d,
+                avx::init_matrix3d_zero,
+                avx::init_matrix3d_one,
+                avx::init_matrix3d_identity,
+                avx::transpose_matrix3d1,
+                avx::transpose_matrix3d2
+            ));
+
+        IF_ARCH_X86(
+            transform(
+                "sse init_matrix_transform",
                 sse::init_matrix3d_identity,
                 sse::init_matrix3d_translate,
                 sse::init_matrix3d_scale,
@@ -502,19 +561,74 @@ UTEST_BEGIN("dsp.3d", matrix)
                 sse::apply_matrix3d_mm2
             ));
 
-        IF_ARCH_X86(modify_point("sse modify_point",
+        IF_ARCH_X86(
+            transform(
+                "avx init_matrix_transform",
+                avx::init_matrix3d_identity,
+                avx::init_matrix3d_translate,
+                avx::init_matrix3d_scale,
+                avx::init_matrix3d_rotate_x,
+                avx::init_matrix3d_rotate_y,
+                avx::init_matrix3d_rotate_z,
+                generic::init_matrix3d_rotate_xyz, // avoid currently due to FMA implementation
+                avx::apply_matrix3d_mm1,
+                avx::apply_matrix3d_mm2
+            ));
+
+        IF_ARCH_X86(
+            transform(
+                "avx_fma3 init_matrix_transform",
+                avx::init_matrix3d_identity,
+                avx::init_matrix3d_translate,
+                avx::init_matrix3d_scale,
+                avx::init_matrix3d_rotate_x,
+                avx::init_matrix3d_rotate_y,
+                avx::init_matrix3d_rotate_z,
+                generic::init_matrix3d_rotate_xyz, // avoid currently due to FMA implementation
+                avx::apply_matrix3d_mm1_fma3,
+                avx::apply_matrix3d_mm2_fma3
+            ));
+
+        IF_ARCH_X86(
+            modify_point(
+                "sse modify_point",
                 sse::apply_matrix3d_mp1,
                 sse::apply_matrix3d_mp2
             ));
 
-        IF_ARCH_X86(modify_vector("generic modify_vector",
+        IF_ARCH_X86(
+            modify_point(
+                "avx modify_point",
+                avx::apply_matrix3d_mp1,
+                avx::apply_matrix3d_mp2
+            ));
+
+        IF_ARCH_X86(
+            modify_point(
+                "avx_fma3 modify_point",
+                avx::apply_matrix3d_mp1_fma3,
+                avx::apply_matrix3d_mp2_fma3
+            ));
+
+        IF_ARCH_X86(
+            modify_vector(
+                "sse modify_vector",
                 sse::apply_matrix3d_mv1,
                 sse::apply_matrix3d_mv2
             ));
 
-        calc_matrix3d_transform("calc_matrix3d_transform",
-                generic::calc_matrix3d_transform_p1v1,
-                generic::calc_matrix3d_transform_r1
-            );
+        IF_ARCH_X86(
+            modify_vector(
+                "avx modify_vector",
+                avx::apply_matrix3d_mv1,
+                avx::apply_matrix3d_mv2
+            ));
+
+        IF_ARCH_X86(
+            modify_vector(
+                "avx_fma3 modify_vector",
+                avx::apply_matrix3d_mv1_fma3,
+                avx::apply_matrix3d_mv2_fma3
+            ));
     }
 UTEST_END;
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/normal.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/normal.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/normal.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/normal.cpp	1970-01-01 00:00:00.000000000 +0000
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
- *
- * This file is part of lsp-dsp-lib
- * Created on: 31 мар. 2020 г.
- *
- * lsp-dsp-lib is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * any later version.
- *
- * lsp-dsp-lib is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
- */
-
-#include <lsp-plug.in/common/types.h>
-#include <lsp-plug.in/dsp/dsp.h>
-#include <lsp-plug.in/test-fw/utest.h>
-#include <lsp-plug.in/test-fw/helpers.h>
-#include <private/utest/dsp/3d/helpers.h>
-
-namespace lsp
-{
-    namespace generic
-    {
-        void calc_normal3d_v2(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
-        void calc_normal3d_vv(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
-        void calc_normal3d_p3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
-        void calc_normal3d_pv(dsp::vector3d_t *n, const dsp::point3d_t *pv);
-    }
-
-    IF_ARCH_X86(
-        namespace sse
-        {
-            void calc_normal3d_v2(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
-            void calc_normal3d_vv(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
-            void calc_normal3d_p3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
-            void calc_normal3d_pv(dsp::vector3d_t *n, const dsp::point3d_t *pv);
-        }
-    )
-
-    typedef void (* calc_normal3d_v2_t)(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
-    typedef void (* calc_normal3d_vv_t)(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
-    typedef void (* calc_normal3d_p3_t)(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
-    typedef void (* calc_normal3d_pv_t)(dsp::vector3d_t *n, const dsp::point3d_t *pv);
-}
-
-UTEST_BEGIN("dsp.3d", normal)
-
-    void call(const char *label, calc_normal3d_v2_t fn)
-    {
-        if (!UTEST_SUPPORTED(fn))
-            return;
-
-        printf("Testing %s...\n", label);
-
-        dsp::vector3d_t sv[2], n[2];
-
-        for (size_t i=0; i<0x200; ++i)
-        {
-            // Intialize vectors
-            dsp::init_vector_dxyz(&sv[0], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-            dsp::init_vector_dxyz(&sv[1], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-
-            // Compute the value
-            generic::calc_normal3d_v2(&n[0], &sv[0], &sv[1]);
-            fn(&n[1], &sv[0], &sv[1]);
-
-            if (!vector3d_ack(&n[0], &n[1]))
-            {
-                dump_vector("sv[0]", &sv[0]);
-                dump_vector("sv[1]", &sv[1]);
-                dump_vector("n[0]", &n[0]);
-                dump_vector("n[1]", &n[1]);
-                UTEST_FAIL_MSG("result of %s differs", label);
-            }
-        }
-    }
-
-    void call(const char *label, calc_normal3d_vv_t fn)
-    {
-        if (!UTEST_SUPPORTED(fn))
-            return;
-
-        printf("Testing %s...\n", label);
-
-        dsp::vector3d_t sv[2], n[2];
-
-        for (size_t i=0; i<0x200; ++i)
-        {
-            // Intialize vectors
-            dsp::init_vector_dxyz(&sv[0], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-            dsp::init_vector_dxyz(&sv[1], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-
-            // Compute the value
-            generic::calc_normal3d_vv(&n[0], sv);
-            fn(&n[1], sv);
-
-            if (!vector3d_ack(&n[0], &n[1]))
-            {
-                dump_vector("sv[0]", &sv[0]);
-                dump_vector("sv[1]", &sv[1]);
-                dump_vector("n[0]", &n[0]);
-                dump_vector("n[1]", &n[1]);
-                UTEST_FAIL_MSG("result of %s differs", label);
-            }
-        }
-    }
-
-    void call(const char *label, calc_normal3d_p3_t fn)
-    {
-        if (!UTEST_SUPPORTED(fn))
-            return;
-
-        printf("Testing %s...\n", label);
-
-        dsp::point3d_t p[3];
-        dsp::vector3d_t n[2];
-
-        for (size_t i=0; i<0x200; ++i)
-        {
-            // Intialize vectors
-            dsp::init_point_xyz(&p[0], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-            dsp::init_point_xyz(&p[1], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-            dsp::init_point_xyz(&p[2], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-
-            // Compute the value
-            generic::calc_normal3d_p3(&n[0], &p[0], &p[1], &p[2]);
-            fn(&n[1], &p[0], &p[1], &p[2]);
-
-            if (!vector3d_ack(&n[0], &n[1]))
-            {
-                dump_point("p[0]", &p[0]);
-                dump_point("p[1]", &p[1]);
-                dump_point("p[2]", &p[2]);
-                dump_vector("n[0]", &n[0]);
-                dump_vector("n[1]", &n[1]);
-                UTEST_FAIL_MSG("result of %s differs", label);
-            }
-        }
-    }
-
-    void call(const char *label, calc_normal3d_pv_t fn)
-    {
-        if (!UTEST_SUPPORTED(fn))
-            return;
-
-        printf("Testing %s...\n", label);
-
-        dsp::point3d_t p[3];
-        dsp::vector3d_t n[2];
-
-        for (size_t i=0; i<0x200; ++i)
-        {
-            // Intialize vectors
-            dsp::init_point_xyz(&p[0], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-            dsp::init_point_xyz(&p[1], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-            dsp::init_point_xyz(&p[2], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
-
-            // Compute the value
-            generic::calc_normal3d_pv(&n[0], p);
-            fn(&n[1], p);
-
-            if (!vector3d_ack(&n[0], &n[1]))
-            {
-                dump_point("p[0]", &p[0]);
-                dump_point("p[1]", &p[1]);
-                dump_point("p[2]", &p[2]);
-                dump_vector("n[0]", &n[0]);
-                dump_vector("n[1]", &n[1]);
-                UTEST_FAIL_MSG("result of %s differs", label);
-            }
-        }
-    }
-
-    UTEST_MAIN
-    {
-        IF_ARCH_X86(call("sse::calc_normal3d_v2", sse::calc_normal3d_v2));
-        IF_ARCH_X86(call("sse::calc_normal3d_vv", sse::calc_normal3d_vv));
-        IF_ARCH_X86(call("sse::calc_normal3d_p3", sse::calc_normal3d_p3));
-        IF_ARCH_X86(call("sse::calc_normal3d_pv", sse::calc_normal3d_pv));
-    }
-
-UTEST_END
-
-
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/normal_p.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/normal_p.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/normal_p.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/normal_p.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 31 мар. 2020 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <private/utest/dsp/3d/helpers.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        void calc_normal3d_p3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+        void calc_normal3d_pv(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            void calc_normal3d_p3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+            void calc_normal3d_pv(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+        }
+
+        namespace avx
+        {
+            void calc_normal3d_p3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+            void calc_normal3d_pv(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+
+            void calc_normal3d_p3_fma3(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+            void calc_normal3d_pv_fma3(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+        }
+    )
+
+    typedef void (* calc_normal3d_p3_t)(dsp::vector3d_t *n, const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3);
+    typedef void (* calc_normal3d_pv_t)(dsp::vector3d_t *n, const dsp::point3d_t *pv);
+}
+
+UTEST_BEGIN("dsp.3d", normal_p)
+
+    void call(const char *label, calc_normal3d_p3_t fn)
+    {
+        if (!UTEST_SUPPORTED(fn))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::point3d_t p[3];
+        dsp::vector3d_t n[2];
+
+        for (size_t i=0; i<0x200; ++i)
+        {
+            // Intialize vectors
+            dsp::init_point_xyz(&p[0], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+            if (i != 0)
+            {
+                dsp::init_point_xyz(&p[1], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+                dsp::init_point_xyz(&p[2], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+            }
+            else
+            {
+                dsp::init_point(&p[1], &p[0]);
+                dsp::init_point(&p[2], &p[0]);
+            }
+
+            // Compute the value
+            generic::calc_normal3d_p3(&n[0], &p[0], &p[1], &p[2]);
+            fn(&n[1], &p[0], &p[1], &p[2]);
+
+            if (!vector3d_ack(&n[0], &n[1]))
+            {
+                dump_point("p[0]", &p[0]);
+                dump_point("p[1]", &p[1]);
+                dump_point("p[2]", &p[2]);
+                dump_vector("n[0]", &n[0]);
+                dump_vector("n[1]", &n[1]);
+                UTEST_FAIL_MSG("result of %s differs", label);
+            }
+        }
+    }
+
+    void call(const char *label, calc_normal3d_pv_t fn)
+    {
+        if (!UTEST_SUPPORTED(fn))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::point3d_t p[3];
+        dsp::vector3d_t n[2];
+
+        for (size_t i=0; i<0x200; ++i)
+        {
+            // Intialize vectors
+            dsp::init_point_xyz(&p[0], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+            if (i != 0)
+            {
+                dsp::init_point_xyz(&p[1], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+                dsp::init_point_xyz(&p[2], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+            }
+            else
+            {
+                dsp::init_point(&p[1], &p[0]);
+                dsp::init_point(&p[2], &p[0]);
+            }
+
+            // Compute the value
+            generic::calc_normal3d_pv(&n[0], p);
+            fn(&n[1], p);
+
+            if (!vector3d_ack(&n[0], &n[1]))
+            {
+                dump_point("p[0]", &p[0]);
+                dump_point("p[1]", &p[1]);
+                dump_point("p[2]", &p[2]);
+                dump_vector("n[0]", &n[0]);
+                dump_vector("n[1]", &n[1]);
+                UTEST_FAIL_MSG("result of %s differs", label);
+            }
+        }
+    }
+
+    UTEST_MAIN
+    {
+    #define CALL(func) \
+        call(#func, func)
+
+        IF_ARCH_X86(CALL(sse::calc_normal3d_p3));
+        IF_ARCH_X86(CALL(sse::calc_normal3d_pv));
+
+        IF_ARCH_X86(CALL(avx::calc_normal3d_p3));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_pv));
+
+        IF_ARCH_X86(CALL(avx::calc_normal3d_p3_fma3));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_pv_fma3));
+    }
+
+UTEST_END
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/normal_v.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/normal_v.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/normal_v.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/normal_v.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 24 авг. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <private/utest/dsp/3d/helpers.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        void calc_normal3d_v2(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+        void calc_normal3d_vv(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+    }
+
+    IF_ARCH_X86(
+        namespace sse
+        {
+            void calc_normal3d_v2(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+            void calc_normal3d_vv(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+        }
+
+        namespace avx
+        {
+            void calc_normal3d_v2(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+            void calc_normal3d_vv(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+
+            void calc_normal3d_v2_fma3(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+            void calc_normal3d_vv_fma3(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+        }
+    )
+
+    typedef void (* calc_normal3d_v2_t)(dsp::vector3d_t *n, const dsp::vector3d_t *v1, const dsp::vector3d_t *v2);
+    typedef void (* calc_normal3d_vv_t)(dsp::vector3d_t *n, const dsp::vector3d_t *vv);
+}
+
+UTEST_BEGIN("dsp.3d", normal_v)
+
+    void call(const char *label, calc_normal3d_v2_t fn)
+    {
+        if (!UTEST_SUPPORTED(fn))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::vector3d_t sv[2], n[2];
+
+        for (size_t i=0; i<0x200; ++i)
+        {
+            // Intialize vectors
+            if (i != 0)
+            {
+                dsp::init_vector_dxyz(&sv[0], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+                dsp::init_vector_dxyz(&sv[1], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+            }
+            else
+            {
+                dsp::init_vector_dxyz(&sv[0], 0.0f, 0.0f, 0.0f);
+                dsp::init_vector_dxyz(&sv[1], 0.0f, 0.0f, 0.0f);
+            }
+
+            // Compute the value
+            generic::calc_normal3d_v2(&n[0], &sv[0], &sv[1]);
+            fn(&n[1], &sv[0], &sv[1]);
+
+            if (!vector3d_ack(&n[0], &n[1]))
+            {
+                dump_vector("sv[0]", &sv[0]);
+                dump_vector("sv[1]", &sv[1]);
+                dump_vector("n[0]", &n[0]);
+                dump_vector("n[1]", &n[1]);
+                UTEST_FAIL_MSG("result of %s differs", label);
+            }
+        }
+    }
+
+    void call(const char *label, calc_normal3d_vv_t fn)
+    {
+        if (!UTEST_SUPPORTED(fn))
+            return;
+
+        printf("Testing %s...\n", label);
+
+        dsp::vector3d_t sv[2], n[2];
+
+        for (size_t i=0; i<0x200; ++i)
+        {
+            // Intialize vectors
+            if (i != 0)
+            {
+                dsp::init_vector_dxyz(&sv[0], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+                dsp::init_vector_dxyz(&sv[1], randf(-10.0f, 10.0f), randf(-10.0f, 10.0f), randf(-10.0f, 10.0f));
+            }
+            else
+            {
+                dsp::init_vector_dxyz(&sv[0], 0.0f, 0.0f, 0.0f);
+                dsp::init_vector_dxyz(&sv[1], 0.0f, 0.0f, 0.0f);
+            }
+
+            // Compute the value
+            generic::calc_normal3d_vv(&n[0], sv);
+            fn(&n[1], sv);
+
+            if (!vector3d_ack(&n[0], &n[1]))
+            {
+                dump_vector("sv[0]", &sv[0]);
+                dump_vector("sv[1]", &sv[1]);
+                dump_vector("n[0]", &n[0]);
+                dump_vector("n[1]", &n[1]);
+                UTEST_FAIL_MSG("result of %s differs", label);
+            }
+        }
+    }
+
+
+    UTEST_MAIN
+    {
+    #define CALL(func) \
+        call(#func, func)
+
+        IF_ARCH_X86(CALL(sse::calc_normal3d_v2));
+        IF_ARCH_X86(CALL(sse::calc_normal3d_vv));
+
+        IF_ARCH_X86(CALL(avx::calc_normal3d_v2));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_vv));
+
+        IF_ARCH_X86(CALL(avx::calc_normal3d_v2_fma3));
+        IF_ARCH_X86(CALL(avx::calc_normal3d_vv_fma3));
+    }
+
+UTEST_END
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/plane.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/plane.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/plane.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/plane.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -42,6 +42,17 @@ namespace lsp
             float calc_plane_pv(dsp::vector3d_t *v, const dsp::point3d_t *pv);
             float calc_plane_v1p2(dsp::vector3d_t *v, const dsp::vector3d_t *v0, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
         }
+
+        namespace avx
+        {
+            float calc_plane_p3(dsp::vector3d_t *v, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_plane_pv(dsp::vector3d_t *v, const dsp::point3d_t *pv);
+            float calc_plane_v1p2(dsp::vector3d_t *v, const dsp::vector3d_t *v0, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+
+            float calc_plane_p3_fma3(dsp::vector3d_t *v, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
+            float calc_plane_pv_fma3(dsp::vector3d_t *v, const dsp::point3d_t *pv);
+            float calc_plane_v1p2_fma3(dsp::vector3d_t *v, const dsp::vector3d_t *v0, const dsp::point3d_t *p0, const dsp::point3d_t *p1);
+        }
     )
 
     typedef float (* calc_plane_p3_t)(dsp::vector3d_t *v, const dsp::point3d_t *p0, const dsp::point3d_t *p1, const dsp::point3d_t *p2);
@@ -165,9 +176,20 @@ UTEST_BEGIN("dsp.3d", plane)
 
     UTEST_MAIN
     {
-        IF_ARCH_X86(call("sse::calc_plane_p3", sse::calc_plane_p3));
-        IF_ARCH_X86(call("sse::calc_plane_pv", sse::calc_plane_pv));
-        IF_ARCH_X86(call("sse::calc_plane_v1p2", sse::calc_plane_v1p2));
+    #define CALL(func) \
+        call(#func, func)
+
+        IF_ARCH_X86(CALL(sse::calc_plane_p3));
+        IF_ARCH_X86(CALL(sse::calc_plane_pv));
+        IF_ARCH_X86(CALL(sse::calc_plane_v1p2));
+
+        IF_ARCH_X86(CALL(avx::calc_plane_p3));
+        IF_ARCH_X86(CALL(avx::calc_plane_pv));
+        IF_ARCH_X86(CALL(avx::calc_plane_v1p2));
+
+        IF_ARCH_X86(CALL(avx::calc_plane_p3_fma3));
+        IF_ARCH_X86(CALL(avx::calc_plane_pv_fma3));
+        IF_ARCH_X86(CALL(avx::calc_plane_v1p2_fma3));
     }
 UTEST_END;
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/point.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/point.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/point.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/point.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -40,6 +40,13 @@ namespace lsp
             void init_point(dsp::point3d_t *p, const dsp::point3d_t *s);
             void normalize_point(dsp::point3d_t *p);
         }
+
+        namespace avx
+        {
+            void init_point_xyz(dsp::point3d_t *p, float x, float y, float z);
+            void init_point(dsp::point3d_t *p, const dsp::point3d_t *s);
+            void normalize_point(dsp::point3d_t *p);
+        }
     )
 
     typedef void (* init_point_xyz_t)(dsp::point3d_t *p, float x, float y, float z);
@@ -49,6 +56,14 @@ namespace lsp
 
 UTEST_BEGIN("dsp.3d", point)
 
+    static void fill_point(dsp::point3d_t *p)
+    {
+        p->x    = 0.1f;
+        p->y    = 0.2f;
+        p->z    = 0.3f;
+        p->w    = 0.4f;
+    }
+
     void call(
             const char *label,
             init_point_xyz_t init_xyz,
@@ -61,26 +76,31 @@ UTEST_BEGIN("dsp.3d", point)
 
         printf("Testing %s\n", label);
 
-        dsp::point3d_t   p1, p2, p3;
+        dsp::point3d_t   p1, p2, p3, p4;
+        fill_point(&p1);
+        fill_point(&p2);
+        fill_point(&p3);
+        fill_point(&p4);
 
-        generic::init_point_xyz(&p1, 1.0f, 2.0f, 3.0f);
-        init_xyz(&p2, 1.0f, 2.0f, 3.0f);
+        generic::init_point_xyz(&p1, 2.0f, 3.0f, 4.0f);
+        init_xyz(&p2, 2.0f, 3.0f, 4.0f);
         UTEST_ASSERT_MSG(point3d_sck(&p1, &p2), "Failed init_point_xyz");
 
-        generic::init_point(&p2, &p1);
-        init(&p3, &p1);
-        UTEST_ASSERT_MSG(point3d_sck(&p1, &p2), "Failed generic init_point");
-        UTEST_ASSERT_MSG(point3d_sck(&p1, &p3), "Failed optimized init_point");
+        generic::init_point(&p3, &p1);
+        init(&p4, &p1);
+        UTEST_ASSERT_MSG(point3d_sck(&p1, &p3), "Failed generic init_point");
+        UTEST_ASSERT_MSG(point3d_sck(&p1, &p4), "Failed optimized init_point");
 
-        generic::normalize_point(&p2);
-        norm(&p3);
+        generic::normalize_point(&p3);
+        norm(&p4);
 
-        UTEST_ASSERT_MSG(point3d_sck(&p2, &p3), "Failed normalize point");
+        UTEST_ASSERT_MSG(point3d_sck(&p3, &p4), "Failed normalize point");
     }
 
     UTEST_MAIN
     {
-        IF_ARCH_X86(call("sse_point", sse::init_point_xyz, sse::init_point, sse::normalize_point));
+        IF_ARCH_X86(call("sse::point", sse::init_point_xyz, sse::init_point, sse::normalize_point));
+        IF_ARCH_X86(call("avx::point", avx::init_point_xyz, avx::init_point, avx::normalize_point));
     }
 UTEST_END;
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/split_point.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/split_point.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/split_point.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/split_point.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -45,6 +45,15 @@ namespace lsp
             void calc_split_point_p2v1(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
             void calc_split_point_pvv1(dsp::point3d_t *sp, const dsp::point3d_t *lv, const dsp::vector3d_t *pl);
         }
+
+        namespace avx
+        {
+            void calc_split_point_p2v1(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
+            void calc_split_point_pvv1(dsp::point3d_t *sp, const dsp::point3d_t *lv, const dsp::vector3d_t *pl);
+
+            void calc_split_point_p2v1_fma3(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
+            void calc_split_point_pvv1_fma3(dsp::point3d_t *sp, const dsp::point3d_t *lv, const dsp::vector3d_t *pl);
+        }
     )
 
     typedef void (* calc_split_point_p2v1_t)(dsp::point3d_t *sp, const dsp::point3d_t *l0, const dsp::point3d_t *l1, const dsp::vector3d_t *pl);
@@ -169,11 +178,20 @@ UTEST_BEGIN("dsp.3d", split_point)
 
     UTEST_MAIN
     {
-        IF_ARCH_X86(call("sse::calc_split_point_p2v1", sse::calc_split_point_p2v1));
-        IF_ARCH_X86(call("sse::calc_split_point_pvv1", sse::calc_split_point_pvv1));
+    #define CALL(func) \
+        call(#func, func)
+
+        IF_ARCH_X86(CALL(sse::calc_split_point_p2v1));
+        IF_ARCH_X86(CALL(sse::calc_split_point_pvv1));
+
+        IF_ARCH_X86(CALL(sse3::calc_split_point_p2v1));
+        IF_ARCH_X86(CALL(sse3::calc_split_point_pvv1));
+
+        IF_ARCH_X86(CALL(avx::calc_split_point_p2v1));
+        IF_ARCH_X86(CALL(avx::calc_split_point_pvv1));
 
-        IF_ARCH_X86(call("sse3::calc_split_point_p2v1", sse3::calc_split_point_p2v1));
-        IF_ARCH_X86(call("sse3::calc_split_point_pvv1", sse3::calc_split_point_pvv1));
+        IF_ARCH_X86(CALL(avx::calc_split_point_p2v1_fma3));
+        IF_ARCH_X86(CALL(avx::calc_split_point_pvv1_fma3));
     }
 UTEST_END;
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/split_triangle.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/split_triangle.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/split_triangle.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/split_triangle.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -32,7 +32,7 @@ namespace lsp
     }
 
     IF_ARCH_X86(
-        namespace sse
+        namespace sse2
         {
             void split_triangle_raw(dsp::raw_triangle_t *out, size_t *n_out, dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
         }
@@ -40,6 +40,12 @@ namespace lsp
         namespace sse3
         {
             void split_triangle_raw(dsp::raw_triangle_t *out, size_t *n_out, dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
+            void split_triangle_raw_ssse3(dsp::raw_triangle_t *out, size_t *n_out, dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
+        }
+
+        namespace avx
+        {
+            void split_triangle_raw(dsp::raw_triangle_t *out, size_t *n_out, dsp::raw_triangle_t *in, size_t *n_in, const dsp::vector3d_t *pl, const dsp::raw_triangle_t *pv);
         }
     )
 
@@ -177,9 +183,14 @@ UTEST_BEGIN("dsp.3d", split_triangle)
 
     UTEST_MAIN
     {
-        test_func("generic::split_triangle_raw", generic::split_triangle_raw);
-        IF_ARCH_X86(test_func("sse::split_triangle_raw", sse::split_triangle_raw));
-        IF_ARCH_X86(test_func("sse3::split_triangle_raw", sse3::split_triangle_raw));
+    #define CALL(func) \
+        test_func(#func, func);
+
+        CALL(generic::split_triangle_raw);
+        IF_ARCH_X86(CALL(sse2::split_triangle_raw));
+        IF_ARCH_X86(CALL(sse3::split_triangle_raw));
+        IF_ARCH_X86(CALL(sse3::split_triangle_raw_ssse3));
+        IF_ARCH_X86(CALL(avx::split_triangle_raw));
     }
 UTEST_END;
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/triangle.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/triangle.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/triangle.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/triangle.cpp	1970-01-01 00:00:00.000000000 +0000
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
- *
- * This file is part of lsp-dsp-lib
- * Created on: 31 мар. 2020 г.
- *
- * lsp-dsp-lib is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * any later version.
- *
- * lsp-dsp-lib is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
- */
-
-#include <lsp-plug.in/common/types.h>
-#include <lsp-plug.in/dsp/dsp.h>
-#include <lsp-plug.in/test-fw/utest.h>
-
-namespace lsp
-{
-    namespace generic
-    {
-        float check_point3d_on_triangle_p3p(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
-        float check_point3d_on_triangle_pvp(const dsp::point3d_t *pv, const dsp::point3d_t *p);
-        float check_point3d_on_triangle_tp(const dsp::triangle3d_t *t, const dsp::point3d_t *p);
-    }
-
-    IF_ARCH_X86(
-        namespace sse
-        {
-            float check_point3d_on_triangle_p3p(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
-            float check_point3d_on_triangle_pvp(const dsp::point3d_t *pv, const dsp::point3d_t *p);
-            float check_point3d_on_triangle_tp(const dsp::triangle3d_t *t, const dsp::point3d_t *p);
-        }
-    )
-
-    typedef float (* check_point3d_on_triangle_p3p_t)(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::point3d_t *p);
-    typedef float (* check_point3d_on_triangle_pvp_t)(const dsp::point3d_t *pv, const dsp::point3d_t *p);
-    typedef float (* check_point3d_on_triangle_tp_t)(const dsp::triangle3d_t *t, const dsp::point3d_t *p);
-}
-
-UTEST_BEGIN("dsp.3d", triangle)
-
-    void call(const char *label,
-        check_point3d_on_triangle_p3p_t check_point3d_on_triangle_p3p,
-        check_point3d_on_triangle_pvp_t check_point3d_on_triangle_pvp,
-        check_point3d_on_triangle_tp_t check_point3d_on_triangle_tp
-    )
-    {
-        if ((!UTEST_SUPPORTED(check_point3d_on_triangle_p3p)) ||
-            (!UTEST_SUPPORTED(check_point3d_on_triangle_pvp)) ||
-            (!UTEST_SUPPORTED(check_point3d_on_triangle_tp)))
-            return;
-
-        printf("Testing %s...\n", label);
-
-        dsp::triangle3d_t t;
-        dsp::point3d_t cp[12];
-        dsp::point3d_t ip[10];
-        float ck;
-
-        // Special check
-        dsp::init_triangle3d_xyz(&t, 2.0f, -1.0f, 0.0f, 0.0f, 2.0f, 0.0f, -2.0f, 4.0f, 0.0f);
-        dsp::init_point_xyz(&cp[0], -0.5f, 0.5f, 0.0f);
-        ck = generic::check_point3d_on_triangle_tp(&t, &cp[0]);
-        printf("ck=%f\n", ck);
-
-        dsp::init_triangle3d_xyz(&t, -8.0f, -2.0f, 0.0f, -2.0f, -4.0f, 0.0f, 0.0f, -2.0f, 0.0f);
-        dsp::init_point_xyz(&cp[0], 6.0f, 4.0f, 0.0f);
-        ck = generic::check_point3d_on_triangle_tp(&t, &cp[0]);
-        printf("ck=%f\n", ck);
-
-        // Main check
-        dsp::init_triangle3d_xyz(&t, -2.0f, -1.0f, 0.0f, 2.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
-
-        dsp::init_point_xyz(&cp[0], -0.5f, 0.5f, 0.0f);
-        dsp::init_point_xyz(&cp[1], 0.5f, 0.5f, 0.0f);
-        dsp::init_point_xyz(&cp[2], 1.5f, -0.5f, 0.0f);
-        dsp::init_point_xyz(&cp[3], -1.5f, -0.5f, 0.0f);
-        dsp::init_point_xyz(&cp[4], 0.75f, -1.0f, 0.0f);
-        dsp::init_point_xyz(&cp[5], -0.75f, -1.0f, 0.0f);
-        dsp::init_point_xyz(&cp[6], 0.0f, 0.0f, 0.0f);
-        dsp::init_point_xyz(&cp[7], -0.5f, -0.5f, 0.0f);
-        dsp::init_point_xyz(&cp[8], 0.5f, -0.5f, 0.0f);
-        dsp::init_point(&cp[9], &t.p[0]);
-        dsp::init_point(&cp[10], &t.p[1]);
-        dsp::init_point(&cp[11], &t.p[2]);
-
-        for (size_t i=0; i<12; ++i)
-        {
-            ck = check_point3d_on_triangle_tp(&t, &cp[i]);
-            UTEST_ASSERT_MSG(ck >= 0.0f, "check_point3d_on_triangle_tp(%d) failed", int(i));
-
-            ck = check_point3d_on_triangle_pvp(t.p, &cp[i]);
-            UTEST_ASSERT_MSG(ck >= 0.0f, "check_point3d_on_triangle_pvp(%d) failed", int(i));
-
-            ck = check_point3d_on_triangle_p3p(&t.p[0], &t.p[1], &t.p[2], &cp[i]);
-            UTEST_ASSERT_MSG(ck >= 0.0f, "check_point3d_on_triangle_p3p(%d) failed", int(i));
-        }
-
-        dsp::init_point_xyz(&ip[0], 0.0f, 1.5f, 0.0f);
-        dsp::init_point_xyz(&ip[1], 0.0f, -1.5f, 0.0f);
-        dsp::init_point_xyz(&ip[2], -1.0f, 1.0f, 0.0f);
-        dsp::init_point_xyz(&ip[3], 1.0f, 1.0f, 0.0f);
-        dsp::init_point_xyz(&ip[4], 2.5f, -1.5f, 0.0f);
-        dsp::init_point_xyz(&ip[5], -2.5f, -1.5f, 0.0f);
-        dsp::init_point_xyz(&ip[6], -0.5f, 1.5f, 0.0f);
-        dsp::init_point_xyz(&ip[7], 0.5f, 1.5f, 0.0f);
-        dsp::init_point_xyz(&ip[8], 2.5f, -1.0f, 0.0f);
-        dsp::init_point_xyz(&ip[9], -2.5f, -1.0f, 0.0f);
-
-        for (size_t i=0; i<10; ++i)
-        {
-            ck = check_point3d_on_triangle_tp(&t, &ip[i]);
-            UTEST_ASSERT_MSG(ck < 0.0f, "check_point3d_on_triangle_tp(%d) failed", int(i));
-
-            ck = check_point3d_on_triangle_pvp(t.p, &ip[i]);
-            UTEST_ASSERT_MSG(ck < 0.0f, "check_point3d_on_triangle_pvp(%d) failed", int(i));
-
-            ck = check_point3d_on_triangle_p3p(&t.p[0], &t.p[1], &t.p[2], &ip[i]);
-            UTEST_ASSERT_MSG(ck < 0.0f, "check_point3d_on_triangle_p3p(%d) failed", int(i));
-        }
-    }
-
-    UTEST_MAIN
-    {
-        call("generic::ck_triangle",
-                generic::check_point3d_on_triangle_p3p,
-                generic::check_point3d_on_triangle_pvp,
-                generic::check_point3d_on_triangle_tp
-                );
-
-        IF_ARCH_X86(
-            call("sse::ck_triangle",
-                    sse::check_point3d_on_triangle_p3p,
-                    sse::check_point3d_on_triangle_pvp,
-                    sse::check_point3d_on_triangle_tp
-                    );
-        )
-    }
-
-UTEST_END
-
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/triplet.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/triplet.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/triplet.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/triplet.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -32,8 +32,6 @@ namespace lsp
         float check_triplet3d_v2n(const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::vector3d_t *n);
         float check_triplet3d_vvn(const dsp::vector3d_t *v, const dsp::vector3d_t *n);
         float check_triplet3d_vv(const dsp::vector3d_t *v);
-        float check_triplet3d_t(const dsp::triangle3d_t *t);
-        float check_triplet3d_tn(const dsp::triangle3d_t *t, const dsp::vector3d_t *n);
     }
 
     IF_ARCH_X86(
@@ -44,8 +42,21 @@ namespace lsp
             float check_triplet3d_v2n(const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::vector3d_t *n);
             float check_triplet3d_vvn(const dsp::vector3d_t *v, const dsp::vector3d_t *n);
             float check_triplet3d_vv(const dsp::vector3d_t *v);
-            float check_triplet3d_t(const dsp::triangle3d_t *t);
-            float check_triplet3d_tn(const dsp::triangle3d_t *t, const dsp::vector3d_t *n);
+        }
+
+        namespace avx
+        {
+            float check_triplet3d_p3n(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::vector3d_t *n);
+            float check_triplet3d_pvn(const dsp::point3d_t *pv, const dsp::vector3d_t *n);
+            float check_triplet3d_v2n(const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::vector3d_t *n);
+            float check_triplet3d_vvn(const dsp::vector3d_t *v, const dsp::vector3d_t *n);
+            float check_triplet3d_vv(const dsp::vector3d_t *v);
+
+            float check_triplet3d_p3n_fma3(const dsp::point3d_t *p1, const dsp::point3d_t *p2, const dsp::point3d_t *p3, const dsp::vector3d_t *n);
+            float check_triplet3d_pvn_fma3(const dsp::point3d_t *pv, const dsp::vector3d_t *n);
+            float check_triplet3d_v2n_fma3(const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::vector3d_t *n);
+            float check_triplet3d_vvn_fma3(const dsp::vector3d_t *v, const dsp::vector3d_t *n);
+            float check_triplet3d_vv_fma3(const dsp::vector3d_t *v);
         }
     )
 
@@ -54,8 +65,6 @@ namespace lsp
     typedef float (* check_triplet3d_v2n_t)(const dsp::vector3d_t *v1, const dsp::vector3d_t *v2, const dsp::vector3d_t *n);
     typedef float (* check_triplet3d_vvn_t)(const dsp::vector3d_t *v, const dsp::vector3d_t *n);
     typedef float (* check_triplet3d_vv_t)(const dsp::vector3d_t *v);
-    typedef float (* check_triplet3d_t_t)(const dsp::triangle3d_t *t);
-    typedef float (* check_triplet3d_tn_t)(const dsp::triangle3d_t *t, const dsp::vector3d_t *n);
 }
 
 UTEST_BEGIN("dsp.3d", triplet)
@@ -66,27 +75,36 @@ UTEST_BEGIN("dsp.3d", triplet)
             check_triplet3d_pvn_t check_triplet3d_pvn,
             check_triplet3d_v2n_t check_triplet3d_v2n,
             check_triplet3d_vvn_t check_triplet3d_vvn,
-            check_triplet3d_vv_t check_triplet3d_vv,
-            check_triplet3d_t_t check_triplet3d_t,
-            check_triplet3d_tn_t check_triplet3d_tn
+            check_triplet3d_vv_t check_triplet3d_vv
         )
     {
         if ((!UTEST_SUPPORTED(check_triplet3d_p3n)) ||
             (!UTEST_SUPPORTED(check_triplet3d_pvn)) ||
             (!UTEST_SUPPORTED(check_triplet3d_v2n)) ||
             (!UTEST_SUPPORTED(check_triplet3d_vvn)) ||
-            (!UTEST_SUPPORTED(check_triplet3d_vv)) ||
-            (!UTEST_SUPPORTED(check_triplet3d_t)) ||
-            (!UTEST_SUPPORTED(check_triplet3d_tn))
+            (!UTEST_SUPPORTED(check_triplet3d_vv))
         )
             return;
 
         printf("Launching %s implementation\n", label);
 
-        dsp::triangle3d_t t[3];
-        dsp::calc_triangle3d_xyz(&t[0], 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 1.0f, -3.0f, 3.0f, 1.0f);
-        dsp::calc_triangle3d_xyz(&t[1], 1.0f, 2.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 3.0f, -3.0f);
-        dsp::calc_triangle3d_xyz(&t[2], 1.0f, 1.0f, 2.0f, 2.0f, 1.0f, 2.0f, 3.0f, 1.0f, -3.0f);
+        typedef struct triangle3d_t
+        {
+            dsp::point3d_t p[3];
+        } triangle3d_t;
+
+        triangle3d_t t[3];
+        dsp::init_point_xyz(&t[0].p[0], 1.0f, 1.0f, 1.0f);
+        dsp::init_point_xyz(&t[0].p[1], 2.0f, 2.0f, 1.0f);
+        dsp::init_point_xyz(&t[0].p[2], -3.0f, 3.0f, 1.0f);
+
+        dsp::init_point_xyz(&t[1].p[0], 1.0f, 2.0f, 2.0f);
+        dsp::init_point_xyz(&t[1].p[1], 1.0f, 1.0f, 1.0f);
+        dsp::init_point_xyz(&t[1].p[2], 1.0f, 3.0f, -3.0f);
+
+        dsp::init_point_xyz(&t[2].p[0], 1.0f, 1.0f, 2.0f);
+        dsp::init_point_xyz(&t[2].p[1], 2.0f, 1.0f, 2.0f);
+        dsp::init_point_xyz(&t[2].p[2], 3.0f, 1.0f, -3.0f);
 
         dsp::vector3d_t n1, n2;
         dsp::init_vector_dxyz(&n1, 1.0f, 1.0f, 1.0f);
@@ -96,10 +114,6 @@ UTEST_BEGIN("dsp.3d", triplet)
         {
             printf("Checking triangle %d\n", int(i));
 
-            UTEST_ASSERT(check_triplet3d_t(&t[i]) >= 0.0f);
-            UTEST_ASSERT(check_triplet3d_tn(&t[i], &n1) >= 0.0f);
-            UTEST_ASSERT(check_triplet3d_tn(&t[i], &n2) <= 0.0f);
-
             UTEST_ASSERT(check_triplet3d_p3n(&t[i].p[0], &t[i].p[1], &t[i].p[2], &n1) >= 0.0f);
             UTEST_ASSERT(check_triplet3d_p3n(&t[i].p[0], &t[i].p[1], &t[i].p[2], &n2) <= 0.0f);
             UTEST_ASSERT(check_triplet3d_pvn(&t[i].p[0], &n1) >= 0.0f);
@@ -128,25 +142,37 @@ UTEST_BEGIN("dsp.3d", triplet)
 
     UTEST_MAIN
     {
-        call("generic_ck_triplet",
-                generic::check_triplet3d_p3n,
-                generic::check_triplet3d_pvn,
-                generic::check_triplet3d_v2n,
-                generic::check_triplet3d_vvn,
-                generic::check_triplet3d_vv,
-                generic::check_triplet3d_t,
-                generic::check_triplet3d_tn
-                );
-
-        IF_ARCH_X86(call("sse_ck_triplet",
-                sse::check_triplet3d_p3n,
-                sse::check_triplet3d_pvn,
-                sse::check_triplet3d_v2n,
-                sse::check_triplet3d_vvn,
-                sse::check_triplet3d_vv,
-                sse::check_triplet3d_t,
-                sse::check_triplet3d_tn
-                ));
+        call(
+            "generic::ck_triplet",
+            generic::check_triplet3d_p3n,
+            generic::check_triplet3d_pvn,
+            generic::check_triplet3d_v2n,
+            generic::check_triplet3d_vvn,
+            generic::check_triplet3d_vv);
+
+        IF_ARCH_X86(call(
+            "sse::ck_triplet",
+            sse::check_triplet3d_p3n,
+            sse::check_triplet3d_pvn,
+            sse::check_triplet3d_v2n,
+            sse::check_triplet3d_vvn,
+            sse::check_triplet3d_vv));
+
+        IF_ARCH_X86(call(
+            "avx::ck_triplet",
+            avx::check_triplet3d_p3n,
+            avx::check_triplet3d_pvn,
+            avx::check_triplet3d_v2n,
+            avx::check_triplet3d_vvn,
+            avx::check_triplet3d_vv));
+
+        IF_ARCH_X86(call(
+            "avx_fma3::ck_triplet",
+            avx::check_triplet3d_p3n_fma3,
+            avx::check_triplet3d_pvn_fma3,
+            avx::check_triplet3d_v2n_fma3,
+            avx::check_triplet3d_vvn_fma3,
+            avx::check_triplet3d_vv_fma3));
     }
 
 UTEST_END
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/vector.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/vector.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/3d/vector.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/3d/vector.cpp	2025-08-26 18:15:43.766002903 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -31,6 +31,7 @@ namespace lsp
         void init_vector_dxyz(dsp::vector3d_t *v, float dx, float dy, float dz);
         void init_vector(dsp::vector3d_t *p, const dsp::vector3d_t *s);
         void normalize_vector(dsp::vector3d_t *v);
+        void normalize_vector2(dsp::vector3d_t *v, const dsp::vector3d_t *sv);
     }
 
     IF_ARCH_X86(
@@ -39,48 +40,78 @@ namespace lsp
             void init_vector_dxyz(dsp::vector3d_t *v, float dx, float dy, float dz);
             void init_vector(dsp::vector3d_t *p, const dsp::vector3d_t *s);
             void normalize_vector(dsp::vector3d_t *v);
+            void normalize_vector2(dsp::vector3d_t *v, const dsp::vector3d_t *sv);
+        }
+
+        namespace avx
+        {
+            void init_vector_dxyz(dsp::vector3d_t *v, float dx, float dy, float dz);
+            void init_vector(dsp::vector3d_t *p, const dsp::vector3d_t *s);
+            void normalize_vector(dsp::vector3d_t *v);
+            void normalize_vector2(dsp::vector3d_t *v, const dsp::vector3d_t *sv);
         }
     )
 
     typedef void (* init_vector_dxyz_t)(dsp::vector3d_t *v, float dx, float dy, float dz);
     typedef void (* init_vector_t)(dsp::vector3d_t *p, const dsp::vector3d_t *s);
     typedef void (* normalize_vector_t)(dsp::vector3d_t *v);
+    typedef void (* normalize_vector2_t)(dsp::vector3d_t *v, const dsp::vector3d_t *sv);
 }
 
 UTEST_BEGIN("dsp.3d", vector)
 
+    static void fill_vector(dsp::vector3d_t *v)
+    {
+        v->dx   = 0.1f;
+        v->dy   = 0.2f;
+        v->dz   = 0.3f;
+        v->dw   = 0.4f;
+    }
+
     void call(
             const char *label,
             init_vector_dxyz_t init_dxyz,
             init_vector_t init,
-            normalize_vector_t norm
+            normalize_vector_t norm,
+            normalize_vector2_t norm2
         )
     {
-        if ((!UTEST_SUPPORTED(init_dxyz)) || (!UTEST_SUPPORTED(init)) || (!UTEST_SUPPORTED(norm)))
+        if ((!UTEST_SUPPORTED(init_dxyz)) || (!UTEST_SUPPORTED(init)) || (!UTEST_SUPPORTED(norm)) || (!UTEST_SUPPORTED(norm2)))
             return;
 
         printf("Testing %s\n", label);
 
-        dsp::vector3d_t  v1, v2, v3;
+        dsp::vector3d_t  v1, v2, v3, v4, v5, v6;
 
-        generic::init_vector_dxyz(&v1, 1.0f, 2.0f, 3.0f);
-        init_dxyz(&v2, 1.0f, 2.0f, 3.0f);
-        UTEST_ASSERT_MSG(vector3d_sck(&v1, &v2), "Failed init_vector_dxyz");
-
-        generic::init_vector(&v2, &v1);
-        init(&v3, &v1);
-        UTEST_ASSERT_MSG(vector3d_sck(&v1, &v2), "Failed generic init_vector");
-        UTEST_ASSERT_MSG(vector3d_sck(&v1, &v3), "Failed optimized init_vector");
+        fill_vector(&v1);
+        fill_vector(&v2);
+        fill_vector(&v3);
+        fill_vector(&v4);
+        fill_vector(&v5);
+        fill_vector(&v6);
 
-        generic::normalize_vector(&v2);
-        norm(&v3);
+        generic::init_vector_dxyz(&v1, 2.0f, 3.0f, 4.0f);
+        init_dxyz(&v2, 2.0f, 3.0f, 4.0f);
+        UTEST_ASSERT_MSG(vector3d_sck(&v1, &v2), "Failed init_vector_dxyz");
 
-        UTEST_ASSERT_MSG(vector3d_sck(&v2, &v3), "Failed normalize vector");
+        generic::init_vector(&v3, &v1);
+        init(&v4, &v1);
+        UTEST_ASSERT_MSG(vector3d_sck(&v1, &v3), "Failed generic init_vector");
+        UTEST_ASSERT_MSG(vector3d_sck(&v1, &v4), "Failed optimized init_vector");
+
+        generic::normalize_vector2(&v5, &v1);
+        norm2(&v6, &v1);
+        UTEST_ASSERT_MSG(vector3d_sck(&v5, &v6), "Failed normalize vector 2");
+
+        generic::normalize_vector(&v3);
+        norm(&v4);
+        UTEST_ASSERT_MSG(vector3d_sck(&v3, &v4), "Failed normalize vector");
     }
 
     UTEST_MAIN
     {
-        IF_ARCH_X86(call("sse_vector", sse::init_vector_dxyz, sse::init_vector, sse::normalize_vector));
+        IF_ARCH_X86(call("sse_vector", sse::init_vector_dxyz, sse::init_vector, sse::normalize_vector, sse::normalize_vector2));
+        IF_ARCH_X86(call("avx_vector", avx::init_vector_dxyz, avx::init_vector, avx::normalize_vector, avx::normalize_vector2));
     }
 UTEST_END;
 
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/msmatrix/conv2.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/msmatrix/conv2.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/msmatrix/conv2.cpp	2025-03-01 12:42:56.816648243 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/msmatrix/conv2.cpp	2025-08-26 18:15:43.774002825 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -110,7 +110,7 @@ UTEST_BEGIN("dsp.msmatrix", conv2)
                 UTEST_ASSERT_MSG(dst2B.valid(), "Destination buffer 2B corrupted");
 
                 // Compare buffers
-                if ((!dst1A.equals_relative(dst2A, 1e-4)) || (!dst1B.equals_relative(dst2B, 1e-4)))
+                if ((!dst1A.equals_adaptive(dst2A, 1e-5)) || (!dst1B.equals_adaptive(dst2B, 1e-5)))
                 {
                     srcA.dump("srcA ");
                     srcB.dump("srcA ");
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/msmatrix/conv2x1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/msmatrix/conv2x1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/msmatrix/conv2x1.cpp	2025-03-01 12:42:56.820648218 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/msmatrix/conv2x1.cpp	2025-08-26 18:15:43.774002825 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-lib
  * Created on: 31 мар. 2020 г.
@@ -118,7 +118,7 @@ UTEST_BEGIN("dsp.msmatrix", conv2x1)
                 UTEST_ASSERT_MSG(dst2.valid(), "Destination buffer 2 corrupted");
 
                 // Compare buffers
-                if (!dst1.equals_relative(dst2, 1e-4))
+                if (!dst1.equals_adaptive(dst2, 1e-5))
                 {
                     srcA.dump("srcA");
                     srcB.dump("srcB");
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/cosf1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/cosf1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/cosf1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/cosf1.cpp	2025-08-26 18:15:43.774002825 +0000
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/FloatBuffer.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        void cosf1(float *dst, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void cosf1(float *dst, size_t count);
+        }
+
+        namespace avx2
+        {
+            void cosf1(float *dst, size_t count);
+            void cosf1_fma3(float *dst, size_t count);
+        }
+
+        namespace avx512
+        {
+            void cosf1(float *dst, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void cosf1(float *dst, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void cosf1(float *dst, size_t count);
+        }
+    )
+
+    typedef void (* cosf1_t)(float *dst, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Unit test
+UTEST_BEGIN("dsp.pmath", cosf1)
+
+    void call(const char *label, size_t align, cosf1_t func1, cosf1_t func2)
+    {
+        if (!UTEST_SUPPORTED(func1))
+            return;
+        if (!UTEST_SUPPORTED(func2))
+            return;
+
+        UTEST_FOREACH(count, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                16, 17, 19, 24, 25, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 65, 100, 999, 0xfff)
+        {
+            for (size_t mask=0; mask <= 0x01; ++mask)
+            {
+                printf("Testing %s on input buffer of %d numbers, mask=0x%x...\n", label, int(count), int(mask));
+
+                FloatBuffer src(count, align, mask & 0x01);
+                src.randomize(-100.0f * M_PI, 100.0f * M_PI);
+
+                FloatBuffer dst1(src);
+                FloatBuffer dst2(src);
+
+                // Call functions
+                func1(dst1, count);
+                func2(dst2, count);
+
+                UTEST_ASSERT_MSG(dst1.valid(), "Destination buffer 1 corrupted");
+                UTEST_ASSERT_MSG(dst2.valid(), "Destination buffer 2 corrupted");
+
+                // Compare buffers
+                if (!dst1.equals_adaptive(dst2, 1e-4))
+                {
+                    src.dump("src ");
+                    dst1.dump("dst1");
+                    dst2.dump("dst2");
+                    UTEST_FAIL_MSG("Output of functions for test '%s' differs", label);
+                }
+            }
+        }
+    }
+
+    UTEST_MAIN
+    {
+        #define CALL(generic, func, align) \
+            call(#func, align, generic, func)
+
+        IF_ARCH_X86(CALL(generic::cosf1, sse2::cosf1, 16));
+        IF_ARCH_X86(CALL(generic::cosf1, avx2::cosf1, 32));
+        IF_ARCH_X86(CALL(generic::cosf1, avx2::cosf1_fma3, 32));
+        IF_ARCH_X86(CALL(generic::cosf1, avx512::cosf1, 64));
+        IF_ARCH_ARM(CALL(generic::cosf1, neon_d32::cosf1, 16));
+        IF_ARCH_AARCH64(CALL(generic::cosf1, asimd::cosf1, 16));
+    }
+UTEST_END
+
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/cosf2.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/cosf2.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/cosf2.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/cosf2.cpp	2025-08-26 18:15:43.774002825 +0000
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/FloatBuffer.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        void cosf2(float *dst, const float *src, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+        }
+
+        namespace avx2
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+            void cosf2_fma3(float *dst, const float *src, size_t count);
+        }
+
+        namespace avx512
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void cosf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    typedef void (* cosf2_t)(float *dst, const float *src, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Unit test
+UTEST_BEGIN("dsp.pmath", cosf2)
+
+    void call(const char *label, size_t align, cosf2_t func1, cosf2_t func2)
+    {
+        if (!UTEST_SUPPORTED(func1))
+            return;
+        if (!UTEST_SUPPORTED(func2))
+            return;
+
+        UTEST_FOREACH(count, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                16, 17, 19, 24, 25, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 65, 100, 999, 0xfff)
+        {
+            for (size_t mask=0; mask <= 0x03; ++mask)
+            {
+                printf("Testing %s on input buffer of %d numbers, mask=0x%x...\n", label, int(count), int(mask));
+
+                FloatBuffer src(count, align, mask & 0x01);
+                src.randomize(-100.0f * M_PI, 100.0f * M_PI);
+                FloatBuffer dst1(count, align, mask & 0x02);
+                FloatBuffer dst2(dst1);
+
+                // Call functions
+                func1(dst1, src, count);
+                func2(dst2, src, count);
+
+                UTEST_ASSERT_MSG(src.valid(), "Source buffer corrupted");
+                UTEST_ASSERT_MSG(dst1.valid(), "Destination buffer 1 corrupted");
+                UTEST_ASSERT_MSG(dst2.valid(), "Destination buffer 2 corrupted");
+
+                // Compare buffers
+                if (!dst1.equals_adaptive(dst2, 1e-4))
+                {
+                    src.dump("src ");
+                    dst1.dump("dst1");
+                    dst2.dump("dst2");
+                    UTEST_FAIL_MSG("Output of functions for test '%s' differs", label);
+                }
+            }
+        }
+    }
+
+    UTEST_MAIN
+    {
+        #define CALL(generic, func, align) \
+            call(#func, align, generic, func)
+
+        IF_ARCH_X86(CALL(generic::cosf2, sse2::cosf2, 16));
+        IF_ARCH_X86(CALL(generic::cosf2, avx2::cosf2, 32));
+        IF_ARCH_X86(CALL(generic::cosf2, avx2::cosf2_fma3, 32));
+        IF_ARCH_X86(CALL(generic::cosf2, avx512::cosf2, 64));
+        IF_ARCH_ARM(CALL(generic::cosf2, neon_d32::cosf2, 16));
+        IF_ARCH_AARCH64(CALL(generic::cosf2, asimd::cosf2, 16));
+    }
+UTEST_END
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/cosf_kp1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/cosf_kp1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/cosf_kp1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/cosf_kp1.cpp	2025-08-26 18:15:43.774002825 +0000
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 14 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/FloatBuffer.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        void cosf_kp1(float *dst, float k, float p, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx2
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+            void cosf_kp1_fma3(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx512
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_X86_64(
+        namespace avx2
+        {
+            void x64_cosf_kp1(float *dst, float k, float p, size_t count);
+            void x64_cosf_kp1_fma3(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx512
+        {
+            void x64_cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void cosf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    typedef void (* cosf_kp1_t)(float *dst, float k, float p, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Unit test
+UTEST_BEGIN("dsp.pmath", cosf_kp1)
+
+    void call(const char *label, size_t align, cosf_kp1_t func1, cosf_kp1_t func2)
+    {
+        if (!UTEST_SUPPORTED(func1))
+            return;
+        if (!UTEST_SUPPORTED(func2))
+            return;
+
+        UTEST_FOREACH(count, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                16, 17, 19, 24, 25, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 65, 100, 999, 0xfff)
+        {
+            for (size_t mask=0; mask <= 0x01; ++mask)
+            {
+                printf("Testing %s on input buffer of %d numbers, mask=0x%x...\n", label, int(count), int(mask));
+
+                FloatBuffer src(count, align, mask & 0x01);
+                src.randomize(-100.0f * M_PI, 100.0f * M_PI);
+                const float k = randf(-0.1f, 0.1f);
+                const float p = randf(-20.0f * M_PI, 20.0f * M_PI);
+
+                FloatBuffer dst1(count, align, mask & 0x01);
+                FloatBuffer dst2(dst1);
+
+                // Call functions
+                func1(dst1, k, p, count);
+                func2(dst2, k, p, count);
+
+                UTEST_ASSERT_MSG(dst1.valid(), "Destination buffer 1 corrupted");
+                UTEST_ASSERT_MSG(dst2.valid(), "Destination buffer 2 corrupted");
+
+                // Compare buffers
+                if (!dst1.equals_adaptive(dst2, 1e-4))
+                {
+                    printf("k = %f, p = %f\n", k, p);
+                    src.dump("src ");
+                    dst1.dump("dst1");
+                    dst2.dump("dst2");
+                    const size_t index = dst1.last_diff();
+                    UTEST_FAIL_MSG("Output of functions for test '%s' differs at index %d: src=%f, dst1=%f, dst2=%f",
+                        label, int(index), src[index], dst1[index], dst2[index]);
+                }
+            }
+        }
+    }
+
+    UTEST_MAIN
+    {
+        #define CALL(generic, func, align) \
+            call(#func, align, generic, func)
+
+        IF_ARCH_X86(CALL(generic::cosf_kp1, sse2::cosf_kp1, 16));
+        IF_ARCH_X86(CALL(generic::cosf_kp1, avx2::cosf_kp1, 32));
+        IF_ARCH_X86(CALL(generic::cosf_kp1, avx2::cosf_kp1_fma3, 32));
+        IF_ARCH_X86_64(CALL(generic::cosf_kp1, avx2::x64_cosf_kp1, 32));
+        IF_ARCH_X86_64(CALL(generic::cosf_kp1, avx2::x64_cosf_kp1_fma3, 32));
+        IF_ARCH_X86(CALL(generic::cosf_kp1, avx512::cosf_kp1, 64));
+        IF_ARCH_X86_64(CALL(generic::cosf_kp1, avx512::x64_cosf_kp1, 64));
+        IF_ARCH_ARM(CALL(generic::cosf_kp1, neon_d32::cosf_kp1, 16));
+        IF_ARCH_AARCH64(CALL(generic::cosf_kp1, asimd::cosf_kp1, 16));
+    }
+UTEST_END
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/lanczos1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/lanczos1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/lanczos1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/lanczos1.cpp	2025-08-26 18:15:43.774002825 +0000
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 17 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/FloatBuffer.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+
+        namespace avx2
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+            void lanczos1_fma3(float *dst, float k, float p, float t, float a, size_t count);
+        }
+
+        namespace avx512
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+    )
+
+    IF_ARCH_X86_64(
+        namespace avx2
+        {
+            void x64_lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+            void x64_lanczos1_fma3(float *dst, float k, float p, float t, float a, size_t count);
+        }
+
+        namespace avx512
+        {
+            void x64_lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void lanczos1(float *dst, float k, float p, float t, float a, size_t count);
+        }
+    )
+
+    typedef void (* lanczos1_t)(float *dst, float k, float p, float t, float a, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Unit test
+UTEST_BEGIN("dsp.pmath", lanczos1)
+
+    void call(const char *label, size_t align, lanczos1_t func1, lanczos1_t func2)
+    {
+        if (!UTEST_SUPPORTED(func1))
+            return;
+        if (!UTEST_SUPPORTED(func2))
+            return;
+
+        UTEST_FOREACH(count, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                16, 17, 19, 24, 25, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 65, 100, 999, 0xfff)
+        {
+            for (size_t mask=0; mask <= 0x01; ++mask)
+            {
+                printf("Testing %s on input buffer of %d numbers, mask=0x%x...\n", label, int(count), int(mask));
+
+                FloatBuffer src(count, align, mask & 0x01);
+
+                const size_t length     = count;
+                const size_t lobes      = randf(4.0f, 8.0f);
+                const size_t center     = length >> 1;
+                const float shift       = randf(0.5f, 1.0f);
+                const float k           = M_PI * float(lobes) / float(center); // Number of samples per lobe
+                const float p           = (float(center) - shift) * k;
+                const float t           = float(center) * k;
+                const float a           = 1.0f / float(lobes);
+
+                FloatBuffer dst1(count, align, mask & 0x01);
+                FloatBuffer dst2(dst1);
+
+                // Call functions
+                func1(dst1, k, p, t, a, count);
+                func2(dst2, k, p, t, a, count);
+
+                UTEST_ASSERT_MSG(dst1.valid(), "Destination buffer 1 corrupted");
+                UTEST_ASSERT_MSG(dst2.valid(), "Destination buffer 2 corrupted");
+
+                // Compare buffers
+                if (!dst1.equals_adaptive(dst2, 1e-3))
+                {
+                    printf("length=%d, lobes = %d, center = %d, shift = %f\n", int(length), int(lobes), int(center), shift);
+                    printf("k = %f, p = %f, t=%f, a=%f\n", k, p, t, a);
+                    src.dump("src ");
+                    dst1.dump("dst1");
+                    dst2.dump("dst2");
+                    const size_t index = dst1.last_diff();
+                    UTEST_FAIL_MSG("Output of functions for test '%s' differs at index %d: src=%f, dst1=%f, dst2=%f",
+                        label, int(index), src[index], dst1[index], dst2[index]);
+                }
+            }
+        }
+    }
+
+    UTEST_MAIN
+    {
+        #define CALL(generic, func, align) \
+            call(#func, align, generic, func)
+
+        IF_ARCH_X86(CALL(generic::lanczos1, sse2::lanczos1, 16));
+        IF_ARCH_X86(CALL(generic::lanczos1, avx2::lanczos1, 32));
+        IF_ARCH_X86(CALL(generic::lanczos1, avx2::lanczos1_fma3, 32));
+        IF_ARCH_X86_64(CALL(generic::lanczos1, avx2::x64_lanczos1, 32));
+        IF_ARCH_X86_64(CALL(generic::lanczos1, avx2::x64_lanczos1_fma3, 32));
+        IF_ARCH_X86(CALL(generic::lanczos1, avx512::lanczos1, 64));
+        IF_ARCH_X86_64(CALL(generic::lanczos1, avx512::x64_lanczos1, 64));
+        IF_ARCH_ARM(CALL(generic::lanczos1, neon_d32::lanczos1, 16));
+        IF_ARCH_AARCH64(CALL(generic::lanczos1, asimd::lanczos1, 16));
+    }
+UTEST_END
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/sinf1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/sinf1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/sinf1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/sinf1.cpp	2025-08-26 18:15:43.774002825 +0000
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 11 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/FloatBuffer.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        void sinf1(float *dst, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void sinf1(float *dst, size_t count);
+        }
+
+        namespace avx2
+        {
+            void sinf1(float *dst, size_t count);
+            void sinf1_fma3(float *dst, size_t count);
+        }
+
+        namespace avx512
+        {
+            void sinf1(float *dst, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void sinf1(float *dst, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void sinf1(float *dst, size_t count);
+        }
+    )
+
+    typedef void (* sinf1_t)(float *dst, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Unit test
+UTEST_BEGIN("dsp.pmath", sinf1)
+
+    void call(const char *label, size_t align, sinf1_t func1, sinf1_t func2)
+    {
+        if (!UTEST_SUPPORTED(func1))
+            return;
+        if (!UTEST_SUPPORTED(func2))
+            return;
+
+        UTEST_FOREACH(count, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                16, 17, 19, 24, 25, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 65, 100, 999, 0xfff)
+        {
+            for (size_t mask=0; mask <= 0x01; ++mask)
+            {
+                printf("Testing %s on input buffer of %d numbers, mask=0x%x...\n", label, int(count), int(mask));
+
+                FloatBuffer src(count, align, mask & 0x01);
+                src.randomize(-100.0f * M_PI, 100.0f * M_PI);
+
+                FloatBuffer dst1(src);
+                FloatBuffer dst2(src);
+
+                // Call functions
+                func1(dst1, count);
+                func2(dst2, count);
+
+                UTEST_ASSERT_MSG(dst1.valid(), "Destination buffer 1 corrupted");
+                UTEST_ASSERT_MSG(dst2.valid(), "Destination buffer 2 corrupted");
+
+                // Compare buffers
+                if (!dst1.equals_adaptive(dst2, 1e-4))
+                {
+                    src.dump("src ");
+                    dst1.dump("dst1");
+                    dst2.dump("dst2");
+                    UTEST_FAIL_MSG("Output of functions for test '%s' differs", label);
+                }
+            }
+        }
+    }
+
+    UTEST_MAIN
+    {
+        #define CALL(generic, func, align) \
+            call(#func, align, generic, func)
+
+        IF_ARCH_X86(CALL(generic::sinf1, sse2::sinf1, 16));
+        IF_ARCH_X86(CALL(generic::sinf1, avx2::sinf1, 32));
+        IF_ARCH_X86(CALL(generic::sinf1, avx2::sinf1_fma3, 32));
+        IF_ARCH_X86(CALL(generic::sinf1, avx512::sinf1, 64));
+        IF_ARCH_ARM(CALL(generic::sinf1, neon_d32::sinf1, 16));
+        IF_ARCH_AARCH64(CALL(generic::sinf1, asimd::sinf1, 16));
+    }
+UTEST_END
+
+
+
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/sinf2.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/sinf2.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/sinf2.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/sinf2.cpp	2025-08-26 18:15:43.774002825 +0000
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 11 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/FloatBuffer.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        void sinf2(float *dst, const float *src, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+        }
+
+        namespace avx2
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+            void sinf2_fma3(float *dst, const float *src, size_t count);
+        }
+
+        namespace avx512
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void sinf2(float *dst, const float *src, size_t count);
+        }
+    )
+
+    typedef void (* sinf2_t)(float *dst, const float *src, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Unit test
+UTEST_BEGIN("dsp.pmath", sinf2)
+
+    void call(const char *label, size_t align, sinf2_t func1, sinf2_t func2)
+    {
+        if (!UTEST_SUPPORTED(func1))
+            return;
+        if (!UTEST_SUPPORTED(func2))
+            return;
+
+        UTEST_FOREACH(count, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                16, 17, 19, 24, 25, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 65, 100, 999, 0xfff)
+        {
+            for (size_t mask=0; mask <= 0x03; ++mask)
+            {
+                printf("Testing %s on input buffer of %d numbers, mask=0x%x...\n", label, int(count), int(mask));
+
+                FloatBuffer src(count, align, mask & 0x01);
+                src.randomize(-100.0f * M_PI, 100.0f * M_PI);
+                FloatBuffer dst1(count, align, mask & 0x02);
+                FloatBuffer dst2(dst1);
+
+                // Call functions
+                func1(dst1, src, count);
+                func2(dst2, src, count);
+
+                UTEST_ASSERT_MSG(src.valid(), "Source buffer corrupted");
+                UTEST_ASSERT_MSG(dst1.valid(), "Destination buffer 1 corrupted");
+                UTEST_ASSERT_MSG(dst2.valid(), "Destination buffer 2 corrupted");
+
+                // Compare buffers
+                if (!dst1.equals_adaptive(dst2, 1e-4))
+                {
+                    src.dump("src ");
+                    dst1.dump("dst1");
+                    dst2.dump("dst2");
+                    UTEST_FAIL_MSG("Output of functions for test '%s' differs", label);
+                }
+            }
+        }
+    }
+
+    UTEST_MAIN
+    {
+        #define CALL(generic, func, align) \
+            call(#func, align, generic, func)
+
+        IF_ARCH_X86(CALL(generic::sinf2, sse2::sinf2, 16));
+        IF_ARCH_X86(CALL(generic::sinf2, avx2::sinf2, 32));
+        IF_ARCH_X86(CALL(generic::sinf2, avx2::sinf2_fma3, 32));
+        IF_ARCH_X86(CALL(generic::sinf2, avx512::sinf2, 64));
+        IF_ARCH_ARM(CALL(generic::sinf2, neon_d32::sinf2, 16));
+        IF_ARCH_AARCH64(CALL(generic::sinf2, asimd::sinf2, 16));
+    }
+UTEST_END
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/sinf_kp1.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/sinf_kp1.cpp
--- 1.2.21-5/modules/lsp-dsp-lib/src/test/utest/pmath/sinf_kp1.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-lib/src/test/utest/pmath/sinf_kp1.cpp	2025-08-26 18:15:43.774002825 +0000
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-lib
+ * Created on: 12 апр. 2025 г.
+ *
+ * lsp-dsp-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/FloatBuffer.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+namespace lsp
+{
+    namespace generic
+    {
+        void sinf_kp1(float *dst, float k, float p, size_t count);
+    }
+
+    IF_ARCH_X86(
+        namespace sse2
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx2
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+            void sinf_kp1_fma3(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx512
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_X86_64(
+        namespace avx2
+        {
+            void x64_sinf_kp1(float *dst, float k, float p, size_t count);
+            void x64_sinf_kp1_fma3(float *dst, float k, float p, size_t count);
+        }
+
+        namespace avx512
+        {
+            void x64_sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_ARM(
+        namespace neon_d32
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    IF_ARCH_AARCH64(
+        namespace asimd
+        {
+            void sinf_kp1(float *dst, float k, float p, size_t count);
+        }
+    )
+
+    typedef void (* sinf_kp1_t)(float *dst, float k, float p, size_t count);
+}
+
+//-----------------------------------------------------------------------------
+// Unit test
+UTEST_BEGIN("dsp.pmath", sinf_kp1)
+
+    void call(const char *label, size_t align, sinf_kp1_t func1, sinf_kp1_t func2)
+    {
+        if (!UTEST_SUPPORTED(func1))
+            return;
+        if (!UTEST_SUPPORTED(func2))
+            return;
+
+        UTEST_FOREACH(count, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                16, 17, 19, 24, 25, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 65, 100, 999, 0xfff)
+        {
+            for (size_t mask=0; mask <= 0x01; ++mask)
+            {
+                printf("Testing %s on input buffer of %d numbers, mask=0x%x...\n", label, int(count), int(mask));
+
+                FloatBuffer src(count, align, mask & 0x01);
+                src.randomize(-100.0f * M_PI, 100.0f * M_PI);
+                const float k = randf(-0.1f, 0.1f);
+                const float p = randf(-20.0f * M_PI, 20.0f * M_PI);
+
+                FloatBuffer dst1(count, align, mask & 0x01);
+                FloatBuffer dst2(dst1);
+
+                // Call functions
+                func1(dst1, k, p, count);
+                func2(dst2, k, p, count);
+
+                UTEST_ASSERT_MSG(dst1.valid(), "Destination buffer 1 corrupted");
+                UTEST_ASSERT_MSG(dst2.valid(), "Destination buffer 2 corrupted");
+
+                // Compare buffers
+                if (!dst1.equals_adaptive(dst2, 1e-4))
+                {
+                    printf("k = %f, p = %f\n", k, p);
+                    src.dump("src ");
+                    dst1.dump("dst1");
+                    dst2.dump("dst2");
+                    const size_t index = dst1.last_diff();
+                    UTEST_FAIL_MSG("Output of functions for test '%s' differs at index %d: src=%f, dst1=%f, dst2=%f",
+                        label, int(index), src[index], dst1[index], dst2[index]);
+                }
+            }
+        }
+    }
+
+    UTEST_MAIN
+    {
+        #define CALL(generic, func, align) \
+            call(#func, align, generic, func)
+
+        IF_ARCH_X86(CALL(generic::sinf_kp1, sse2::sinf_kp1, 16));
+        IF_ARCH_X86(CALL(generic::sinf_kp1, avx2::sinf_kp1, 32));
+        IF_ARCH_X86(CALL(generic::sinf_kp1, avx2::sinf_kp1_fma3, 32));
+        IF_ARCH_X86_64(CALL(generic::sinf_kp1, avx2::x64_sinf_kp1, 32));
+        IF_ARCH_X86_64(CALL(generic::sinf_kp1, avx2::x64_sinf_kp1_fma3, 32));
+        IF_ARCH_X86(CALL(generic::sinf_kp1, avx512::sinf_kp1, 64));
+        IF_ARCH_X86_64(CALL(generic::sinf_kp1, avx512::x64_sinf_kp1, 64));
+        IF_ARCH_ARM(CALL(generic::sinf_kp1, neon_d32::sinf_kp1, 16));
+        IF_ARCH_AARCH64(CALL(generic::sinf_kp1, asimd::sinf_kp1, 16));
+    }
+UTEST_END
+
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-units/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-dsp-units/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-dsp-units/.github/workflows/build.yml	2025-03-01 12:43:00.940623487 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/.github/workflows/build.yml	2025-08-26 18:15:52.637916798 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libsndfile-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale libsndfile-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang libsndfile-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang libsndfile-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
@@ -188,3 +188,25 @@ jobs:
       - name: Run unit tests
         shell: msys2 {0}
         run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test.exe utest --verbose --jobs 1
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config TEST=1 STRICT=1 DEBUG=1 ASAN=1
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
+      - name: Run unit tests
+        run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1
+      - name: Run unit tests with memcheck
+        run: |
+          for test in $(.build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --list --suppress); do \
+            echo "***** MEMCHECK $test *****"; \
+            .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1 --nofork --debug $test; \
+          done
diff -pruN 1.2.21-5/modules/lsp-dsp-units/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-dsp-units/CHANGELOG
--- 1.2.21-5/modules/lsp-dsp-units/CHANGELOG	2025-03-01 12:43:00.944623464 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/CHANGELOG	2025-08-26 18:15:52.637916798 +0000
@@ -2,6 +2,22 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.30 ===
+* Added MM_PEAK algorithm to MeterGraph and ScaledMeterGraph.
+* Spectrum analyzer now allows to read linear-scaled frequencies and indices.
+* Implemented ADSREnvelope class for ADSR envelope computation.
+* Added MacOS CI builds.
+* Updated module versions in dependencies.
+
+=== 1.0.29 ===
+* Optimized complex resampling algorithm for dspu::Sample.
+* Implemented functions for quick computing of sine, cosine, logarithm and exponent
+  with precision loss.
+* Implemented linear, constant power, exponential and exponential with precision loss
+  interpolation functions.
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.28 ===
 * Added 'listen' playback mode for the sampler in dspu::Sampler.
 * Added support of build for MacOS.
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/3d/Scene3D.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/3d/Scene3D.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/3d/Scene3D.h	2025-03-01 12:43:00.944623464 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/3d/Scene3D.h	2025-08-26 18:15:52.641916759 +0000
@@ -58,7 +58,6 @@ namespace lsp
                 status_t do_clone(Scene3D *s);
 
                 status_t    load_internal(io::IInStream *is, size_t flags, const char *charset);
-                status_t    load_internal(io::IInSequence *is, size_t flags);
 
             public:
                 /** Default constructor
@@ -133,14 +132,6 @@ namespace lsp
                  */
                 status_t    load(io::IInStream *is, size_t flags = WRAP_NONE, const char *charset = NULL);
 
-                /**
-                 * Load scene from input sequence
-                 * @param is input sequence
-                 * @param flags wrapping flags
-                 * @return status of operation
-                 */
-                status_t    load(io::IInSequence *is, size_t flags = WRAP_NONE);
-
             public:
                 /**
                  * Do some post-processing after loading scene from file
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/const.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/const.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/const.h	2025-03-01 12:43:00.948623439 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/const.h	2025-08-26 18:15:52.641916759 +0000
@@ -53,9 +53,17 @@
 #define GAIN_AMP_P_2_DB                     1.25896             /* +2 dB        */
 #define GAIN_AMP_P_1_DB                     1.12202             /* +1 dB        */
 #define GAIN_AMP_0_DB                       1.0                 /* 0 dB         */
+#define GAIN_AMP_M_1_DB                     0.89125             /* -1 dB        */
+#define GAIN_AMP_M_2_DB                     0.79433             /* -2 dB        */
 #define GAIN_AMP_M_3_DB                     0.707946            /* -3 dB        */
+#define GAIN_AMP_M_4_DB                     0.63096             /* -4 dB        */
+#define GAIN_AMP_M_5_DB                     0.56234             /* -5 dB        */
 #define GAIN_AMP_M_6_DB                     0.50118             /* -6 dB        */
+#define GAIN_AMP_M_7_DB                     0.44668             /* -7 dB        */
+#define GAIN_AMP_M_8_DB                     0.39811             /* -8 dB        */
 #define GAIN_AMP_M_9_DB                     0.354813            /* -9 dB        */
+#define GAIN_AMP_M_10_DB                    0.31623             /* -10 dB       */
+#define GAIN_AMP_M_11_DB                    0.28184             /* -11 dB       */
 #define GAIN_AMP_M_12_DB                    0.25119             /* -12 dB       */
 #define GAIN_AMP_M_18_DB                    0.12589             /* -18 dB       */
 #define GAIN_AMP_M_24_DB                    0.06310             /* -24 dB       */
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/misc/interpolation.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/misc/interpolation.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/misc/interpolation.h	2025-03-01 12:43:00.952623416 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/misc/interpolation.h	2025-08-26 18:15:52.645916720 +0000
@@ -62,6 +62,51 @@ namespace lsp
             LSP_DSP_UNITS_PUBLIC
             void hermite_cubic(float *p, float x0, float y0, float k0, float x1, float y1, float k1);
 
+            /** Perform quadro Hermite interpolation.
+             *
+             * The resulting polynom equation is the following:
+             * y(x) = p[0]*x^4 + p[1]*x^3 + p[2]*x^2 + p[3]*x + p[4]
+             *
+             * @param p destination (4 floats) to store the final hermite polynom
+             * @param x0 x-coordinate of first point used for interpolation
+             * @param y0 y-coordinate of first point used for interpolation
+             * @param k0 the tangent angle of the line at first point
+             * @param x1 x-coordinate of second point used for interpolation
+             * @param y1 y-coordinate of second point used for interpolation
+             * @param k1 the tangent angle of the line at second point
+             * @param x2 x-coordinate of third point used for interpolation
+             * @param y2 y-coordinate of third point used for interpolation
+             */
+            LSP_DSP_UNITS_PUBLIC
+            void hermite_quadro(
+                float *p,
+                float x0, float y0, float k0,
+                float x1, float y1, float k1,
+                float x2, float y2);
+
+            /** Perform penta Hermite interpolation.
+             *
+             * The resulting polynom equation is the following:
+             * y(x) = p[0]*x^5 + p[1]*x^4 + p[2]*x^3 + p[3]*x^2 + p[4]*x + p[5]
+             *
+             * @param p destination (4 floats) to store the final hermite polynom
+             * @param x0 x-coordinate of first point used for interpolation
+             * @param y0 y-coordinate of first point used for interpolation
+             * @param k0 the tangent angle of the line at first point
+             * @param x1 x-coordinate of second point used for interpolation
+             * @param y1 y-coordinate of second point used for interpolation
+             * @param k1 the tangent angle of the line at second point
+             * @param x2 x-coordinate of third point used for interpolation
+             * @param y2 y-coordinate of third point used for interpolation
+             * @param k2 the tangent angle of the line at third point
+             */
+            LSP_DSP_UNITS_PUBLIC
+            void hermite_penta(
+                float *p,
+                float x0, float y0, float k0,
+                float x1, float y1, float k1,
+                float x2, float y2, float k2);
+
             /** Perform exponent interpolation
              *
              * @param p destination (3 floats) to store the formula: y(x) = p[0] + p[1] * exp(p[2] * x)
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/misc/quickmath.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/misc/quickmath.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/misc/quickmath.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/misc/quickmath.h	2025-08-26 18:15:52.645916720 +0000
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugins-phaser
+ * Created on: 24 мар. 2025 г.
+ *
+ * lsp-dsp-units is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-units is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-units. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_DSP_UNITS_MISC_QUICKMATH_H_
+#define LSP_PLUG_IN_DSP_UNITS_MISC_QUICKMATH_H_
+
+#include <lsp-plug.in/dsp-units/version.h>
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+namespace lsp
+{
+    namespace dspu
+    {
+        static constexpr float      QMATH_LOG2TOLN              = 1.0f / M_LOG2E;
+        static constexpr float      QMATH_PI_DIV_2              = M_PI * 0.5f;
+        static constexpr float      QMATH_LNTOLOG2              = M_LOG2E;
+        static constexpr float      QMATH_LN2                   = M_LN2;
+
+        /**
+         * Quick computation of sine value with precision loss
+         * @param x the argument, for precise computation it should be within range [-M_PI/2, M_PI/2]
+         * @return sine value
+         */
+        inline float quick_sinf(float x)
+        {
+            const float x2 = x*x;
+            return x * (1.0f + x2*(-0.166666666667f + x2*(0.00833333333333f + x2 * -0.000198412698413f)));
+        }
+
+        /**
+         * Quick computation of cosine value with precision loss
+         * @param x the argument, for precise computation it should be within range [0, M_PI]
+         * @return cosine value
+         */
+        inline float quick_cosf(float x)
+        {
+            return quick_sinf(QMATH_PI_DIV_2 - x);
+        }
+
+        /**
+         * Quick logarithm computation with precision loss
+         * @param x the argument
+         * @return logarithm value
+         */
+        inline float quick_logf(float x)
+        {
+            // Using taylor series of arctanh function that can express the logarithm value as:
+            // ln(x) = 2 * arctanh((x-1)/(x+1))
+            union { float f; uint32_t i; } u;
+
+            // Get mantissa and reset it for the input argument
+            u.f = x;
+            const int f = (u.i >> 23) - 127; // f = mant(x)
+            u.i = (u.i & 0x007fffff) | 0x3f800000;
+
+            // Prepare for calculations
+            const float X = u.f;
+            const float y = (X - 1.0f)/(X + 1.0f);
+            const float y2 = y*y;
+
+            return 2.0f*y * (1.0f + y2*(0.333333333333f + y2*(0.2f + y2*(0.142857142857f)))) + f * QMATH_LOG2TOLN;
+        }
+
+        /**
+         * Quick exponent function computation with precision loss
+         * @param x the argument
+         * @return exponent value
+         */
+        inline float quick_expf(float x)
+        {
+            const float xp  = fabsf(x) * QMATH_LNTOLOG2;
+            const int n     = xp;
+            const float r   = (xp - float(n)) * QMATH_LN2;
+
+            union { float f; uint32_t i; } u;
+            u.i             = (n + 127) << 23;       // u.f = 2 ^ r
+
+            const float p   = u.f *
+                (1.0f + r * (1.0f + r * (0.5f + r * (0.166666666667f + r * 0.0416666666667f))));
+
+            return (x < 0.0f) ? 1.0f / p : p;
+        }
+
+        /**
+         * Linear interpolation between two floating-point values
+         * @param a the value at k = 0.0f
+         * @param b the value at k = 1.0f
+         * @param k the interpolation coefficient in range [0.0f, 1.0f]
+         * @return the interpolated value
+         */
+        inline float lerp(float a, float b, float k)
+        {
+            return a + (b - a) * k;
+        }
+
+        /**
+         * Linear interpolation between two integer values
+         * @param a the value at k = 0.0f
+         * @param b the value at k = 1.0f
+         * @param k the interpolation coefficient in range [0.0f, 1.0f]
+         * @return the interpolated value
+         */
+        inline int32_t ilerp(int32_t a, int32_t b, float k)
+        {
+            return a + (b - a) * k;
+        }
+
+        /**
+         * Constant power (quadratic) interpolation between two floating-point values
+         * @param a the value at k = 0.0f
+         * @param b the value at k = 1.0f
+         * @param k the interpolation coefficient in range [0.0f, 1.0f]
+         * @return the interpolated value
+         */
+        inline float qlerp(float a, float b, float k)
+        {
+            return a * sqrtf(1.0f - k) + b * sqrtf(k);
+        }
+
+        /**
+         * Exponential interpolation between two logarithmic floating-point values
+         * @param a the value at k=0.0f
+         * @param b the value at k=1.0f
+         * @param k the interpolation coefficient in range [0.0f, 1.0f]
+         * @return the interpolated value
+         */
+        inline float elerp(float a, float b, float k)
+        {
+            return a * expf(logf(b / a) * k);
+        }
+
+        /**
+         * Exponential interpolation between two logarithmic floating-point values using quick logarithm
+         * and exponent functions
+         *
+         * @param a the value at k=0.0f
+         * @param b the value at k=1.0f
+         * @param k the interpolation coefficient in range [0.0f, 1.0f]
+         * @return the interpolated value
+         */
+        inline float quick_elerp(float a, float b, float k)
+        {
+            return a * quick_expf(quick_logf(b / a) * k);
+        }
+
+    } /* namespace dspu */
+} /* namespace lsp */
+
+
+#endif /* LSP_PLUG_IN_DSP_UNITS_MISC_QUICKMATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/ADSREnvelope.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/ADSREnvelope.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/ADSREnvelope.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/ADSREnvelope.h	2025-08-26 18:15:52.649916682 +0000
@@ -0,0 +1,280 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-units
+ * Created on: 10 июн. 2025 г.
+ *
+ * lsp-dsp-units is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-units is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-units. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_DSP_UNITS_UTIL_ADSRENVELOPE_H_
+#define LSP_PLUG_IN_DSP_UNITS_UTIL_ADSRENVELOPE_H_
+
+#include <lsp-plug.in/dsp-units/version.h>
+#include <lsp-plug.in/dsp-units/iface/IStateDumper.h>
+#include <lsp-plug.in/common/types.h>
+
+namespace lsp
+{
+    namespace dspu
+    {
+        /**
+         * ADSR envelope calculator.
+         * Supports additional Hold and Break points working as AHDBSSR
+         * (Attack, Hold, Decay, Break, Slope, Sustain, Release) curve
+         */
+        class ADSREnvelope
+        {
+            public:
+                enum function_t
+                {
+                    ADSR_NONE,
+                    ADSR_LINE,
+                    ADSR_LINE2,
+                    ADSR_CUBIC,
+                    ADSR_QUADRO,
+                    ADSR_EXP,
+                };
+
+            protected:
+                enum flags_t
+                {
+                    F_USE_HOLD          = 1 << 0,
+                    F_USE_BREAK         = 1 << 1,
+                    F_RECONFIGURE       = 1 << 2,
+                };
+
+                enum part_t
+                {
+                    P_ATTACK,
+                    P_DECAY,
+                    P_SLOPE,
+                    P_RELEASE,
+
+                    P_TOTAL
+                };
+
+                struct gen_none_t
+                {
+                    float               fT;
+                    float               fK;
+                    float               fB;
+                };
+
+                struct gen_line_t
+                {
+                    float               fT2;
+                    float               fK1;
+                    float               fB1;
+                    float               fK2;
+                    float               fB2;
+                };
+
+                struct gen_hermite_t
+                {
+                    float               fT0;
+                    float               fK[5];
+                };
+
+                struct gen_exp_t
+                {
+                    float               fT0;
+                    float               fKT;
+                    float               fA[2];
+                    float               fB[2];
+                };
+
+                union gen_params_t
+                {
+                    gen_none_t          sNone;
+                    gen_line_t          sLine;
+                    gen_hermite_t       sHermite;
+                    gen_exp_t           sExp;
+                };
+
+                typedef float (*generator_t)(float t, const gen_params_t *params);
+
+                struct curve_t
+                {
+                    float               fTime;
+                    float               fCurve;
+                    function_t          enFunction;
+                    generator_t         pGenerator;
+                    gen_params_t        sParams;
+                };
+
+            protected:
+                curve_t             vCurve[P_TOTAL];
+                float               fHoldTime;
+                float               fBreakLevel;
+                float               fSustainLevel;
+                uint32_t            nFlags;
+
+            protected:
+                static float        none_generator(float t, const gen_params_t *params);
+                static float        line_generator(float t, const gen_params_t *params);
+                static float        cubic_generator(float t, const gen_params_t *params);
+                static float        quadro_generator(float t, const gen_params_t *params);
+                static float        exp_generator(float t, const gen_params_t *params);
+                static inline float limit_range(float t, float prev);
+                static inline void  configure_curve(curve_t *curve, float x0, float x1, float y0, float y1);
+
+            protected:
+                void                set_param(float & param, float value);
+                void                set_function(function_t & func, function_t value);
+                void                set_flag(uint32_t flag, bool set);
+                void                set_curve(part_t part, float time, float curve, function_t func);
+                inline float        do_process(float value);
+
+            public:
+                ADSREnvelope();
+                ~ADSREnvelope();
+
+                ADSREnvelope(const ADSREnvelope &) = delete;
+                ADSREnvelope(ADSREnvelope &&) = delete;
+                ADSREnvelope & operator = (const ADSREnvelope &) = delete;
+                ADSREnvelope & operator = (ADSREnvelope &&) = delete;
+
+                /**
+                 * Construct envelope
+                 */
+                void                construct();
+
+                /**
+                 * Destroy envelope
+                 */
+                void                destroy();
+
+            public:
+                inline void         set_attack_time(float value)        { set_param(vCurve[P_ATTACK].fTime, value);         }
+                inline void         set_hold_time(float value)          { set_param(fHoldTime, value);                      }
+                inline void         set_decay_time(float value)         { set_param(vCurve[P_DECAY].fTime, value);          }
+                inline void         set_slope_time(float value)         { set_param(vCurve[P_SLOPE].fTime, value);          }
+                inline void         set_relese_time(float value)        { set_param(vCurve[P_RELEASE].fTime, value);        }
+
+                inline void         set_attack_curve(float value)       { set_param(vCurve[P_ATTACK].fCurve, value);        }
+                inline void         set_decay_curve(float value)        { set_param(vCurve[P_DECAY].fCurve, value);         }
+                inline void         set_slope_curve(float value)        { set_param(vCurve[P_SLOPE].fCurve, value);         }
+                inline void         set_release_curve(float value)      { set_param(vCurve[P_RELEASE].fCurve, value);       }
+
+                inline void         set_attack_function(function_t f)   { set_function(vCurve[P_ATTACK].enFunction, f);     }
+                inline void         set_decay_function(function_t f)    { set_function(vCurve[P_DECAY].enFunction, f);      }
+                inline void         set_slope_function(function_t f)    { set_function(vCurve[P_SLOPE].enFunction, f);      }
+                inline void         set_release_function(function_t f)  { set_function(vCurve[P_RELEASE].enFunction, f);    }
+
+                inline void         set_break_level(float value)        { set_param(fBreakLevel, value);                    }
+                inline void         set_sustain_level(float value)      { set_param(fSustainLevel, value);                  }
+
+                inline void         set_hold_enabled(bool enabled)      { set_flag(F_USE_HOLD, enabled);                    }
+                inline void         set_break_enabled(bool enabled)     { set_flag(F_USE_BREAK, enabled);                   }
+
+                inline void         set_attack(float time, float curve, function_t func)    { set_curve(P_ATTACK, time, curve, func);   }
+                void                set_hold(float time, bool enabled);
+                inline void         set_decay(float time, float curve, function_t func)     { set_curve(P_DECAY, time, curve, func);    }
+                void                set_break(float level, bool enabled);
+                inline void         set_slope(float time, float curve, function_t func)     { set_curve(P_SLOPE, time, curve, func);    }
+                inline void         set_release(float time, float curve, function_t func)   { set_curve(P_RELEASE, time, curve, func);  }
+
+                inline float        attack_time() const                 { return vCurve[P_ATTACK].fTime;                    }
+                inline float        hold_time() const                   { return fHoldTime;                                 }
+                inline float        decay_time() const                  { return vCurve[P_DECAY].fTime;                     }
+                inline float        slope_time() const                  { return vCurve[P_SLOPE].fTime;                     }
+                inline float        release_time() const                { return vCurve[P_RELEASE].fTime;                   }
+
+                inline float        attack_curve() const                { return vCurve[P_ATTACK].fCurve;                   }
+                inline float        decay_curve() const                 { return vCurve[P_DECAY].fCurve;                    }
+                inline float        slope_curve() const                 { return vCurve[P_SLOPE].fCurve;                    }
+                inline float        release_curve() const               { return vCurve[P_RELEASE].fCurve;                  }
+
+                inline function_t   attack_function() const             { return vCurve[P_ATTACK].enFunction;               }
+                inline function_t   decay_function() const              { return vCurve[P_DECAY].enFunction;                }
+                inline function_t   slope_function() const              { return vCurve[P_SLOPE].enFunction;                }
+                inline function_t   release_function() const            { return vCurve[P_RELEASE].enFunction;              }
+
+                inline float        break_level() const                 { return fBreakLevel;                               }
+                inline float        sustain_level() const               { return fSustainLevel;                             }
+
+                inline float        hold_enabled() const                { return nFlags & F_USE_HOLD;                       }
+                inline float        break_enabled() const               { return nFlags & F_USE_BREAK;                      }
+
+            public:
+                /**
+                 * Update settings if needed
+                 */
+                void            update_settings();
+
+                /**
+                 * Compute ADSR point for specified value
+                 * @param value normalized time point [0..1]
+                 * @return computed ADSR value or 0 if outside the [0..1] range
+                 */
+                float           process(float value);
+
+                /**
+                 * Compute ADSR points for specified values
+                 * @param dst destination buffer to store result
+                 * @param src source values to process
+                 * @param count number of values to process
+                 */
+                void            process(float *dst, const float *src, size_t count);
+
+                /**
+                 * Compute amd apply ADSR points for specified values and apply to target buffer
+                 * @param dst destination buffer to apply result
+                 * @param src source values to process
+                 * @param count number of values to process
+                 */
+                void            process_mul(float *dst, const float *src, size_t count);
+
+                /**
+                 * Generate part of the ADSR curve and store to buffer
+                 * @param dst pointer to store generated values
+                 * @param start the time of first point
+                 * @param step the actual time step
+                 * @param count number of points to generate
+                 */
+                void            generate(float *dst, float start, float step, size_t count);
+
+                /**
+                 * Generate and apply curve to the buffer
+                 * @param dst destination buffer to modify
+                 * @param start the time of first point
+                 * @param step the actual time step
+                 * @param count number of points to apply
+                 */
+                void            generate_mul(float *dst, float start, float step, size_t count);
+
+                /**
+                 * Apply curve to the buffer
+                 * @param dst destination buffer to store result
+                 * @param src source buffer to read
+                 * @param start the time of first point
+                 * @param step the actual time step
+                 * @param count number of points to apply
+                 */
+                void            generate_mul(float *dst, const float *src, float start, float step, size_t count);
+
+                /**
+                 * Dump the state
+                 * @param v state dumper
+                 */
+                void            dump(IStateDumper *v) const;
+        };
+
+    } /* namespace dspu */
+} /* namespace lsp */
+
+
+#endif /* LSP_PLUG_IN_DSP_UNITS_UTIL_ADSRENVELOPE_H_ */
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/Analyzer.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/Analyzer.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/Analyzer.h	2025-03-01 12:43:00.952623416 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/Analyzer.h	2025-08-26 18:15:52.649916682 +0000
@@ -327,8 +327,9 @@ namespace lsp
                  * @param start start frequency
                  * @param stop stop frequency
                  * @param count number of elements
+                 * @param linear use linear scale
                  */
-                void get_frequencies(float *frq, uint32_t *idx, float start, float stop, size_t count);
+                void get_frequencies(float *frq, uint32_t *idx, float start, float stop, size_t count, bool linear = false);
 
                 /** Read the frequencies of the analyzer
                  *
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/MeterGraph.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/MeterGraph.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/MeterGraph.h	2025-03-01 12:43:00.952623416 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/MeterGraph.h	2025-08-26 18:15:52.649916682 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-units
  * Created on: 20 мая 2016 г.
@@ -32,10 +32,34 @@ namespace lsp
     {
         enum meter_method_t
         {
+            /**
+             * Absolute maximum: max(fabsf(data[0..x]))
+             */
             MM_ABS_MAXIMUM,
+
+            /**
+             * Absolute minimum: min(fabsf(data[0..x]))
+             */
             MM_ABS_MINIMUM,
+
+            /**
+             * Sign-dependent minimum: (fabsf(pos) >= fabsf(neg)) ? pos : neg
+             *   where pos = fabsf(max(data[0..x], 0.0))
+             *     and neg = fabsf(min(data[0..x], 0.0))
+             */
             MM_SIGN_MAXIMUM,
+
+            /**
+             * Sign-dependent minimum: (fabsf(pos) < fabsf(neg)) ? pos : neg
+             *   where pos = fabsf(max(data[0..x], 0.0))
+             *     and neg = fabsf(min(data[0..x], 0.0))
+             */
             MM_SIGN_MINIMUM,
+
+            /**
+             * Peak value: data[0]
+             */
+            MM_PEAK,
         };
 
         class LSP_DSP_UNITS_PUBLIC MeterGraph
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/RingBuffer.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/RingBuffer.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/RingBuffer.h	2025-03-01 12:43:00.952623416 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/RingBuffer.h	2025-08-26 18:15:52.649916682 +0000
@@ -114,6 +114,14 @@ namespace lsp
                 float       get(size_t offset);
 
                 /**
+                 * Get the interpolated sample at the tail of the buffer specified by the offset.
+                 * The value is computed using linear interpolation
+                 * @param offset offset
+                 * @return data the sample at the tail of the buffer
+                 */
+                float       lerp_get(float offset);
+
+                /**
                  * Get offset of the head relative to the position
                  * @return position of the head relative to the beginning of the buffer
                  */
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/SpectralProcessor.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/SpectralProcessor.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/SpectralProcessor.h	2025-03-01 12:43:00.952623416 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/util/SpectralProcessor.h	2025-08-26 18:15:52.649916682 +0000
@@ -147,6 +147,11 @@ namespace lsp
                  * @param count number of samples to process
                  */
                 void            process(float *dst, const float *src, size_t count);
+
+                /**
+                 * Reset state: cleanup internal buffers
+                 */
+                void            reset();
     
                 /**
                  * Dump the state
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/version.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/version.h
--- 1.2.21-5/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/version.h	2025-03-01 12:43:00.952623416 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/lsp-plug.in/dsp-units/version.h	2025-08-26 18:15:52.649916682 +0000
@@ -25,7 +25,7 @@
 // Define version of headers
 #define LSP_DSP_UNITS_MAJOR         1
 #define LSP_DSP_UNITS_MINOR         0
-#define LSP_DSP_UNITS_MICRO         28
+#define LSP_DSP_UNITS_MICRO         30
 
 #if defined(LSP_DSP_UNITS_PUBLISHER)
     #define LSP_DSP_UNITS_PUBLIC        LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-dsp-units/include/private/3d/scene/obj.h 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/private/3d/scene/obj.h
--- 1.2.21-5/modules/lsp-dsp-units/include/private/3d/scene/obj.h	2025-03-01 12:43:00.956623392 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/include/private/3d/scene/obj.h	2025-08-26 18:15:52.649916682 +0000
@@ -24,7 +24,10 @@
 
 #include <lsp-plug.in/io/IInStream.h>
 #include <lsp-plug.in/io/IInSequence.h>
+#include <lsp-plug.in/io/InMemoryStream.h>
+#include <lsp-plug.in/io/OutMemoryStream.h>
 #include <lsp-plug.in/dsp-units/3d/Scene3D.h>
+#include <lsp-plug.in/fmt/obj/Decompressor.h>
 #include <lsp-plug.in/fmt/obj/IObjHandler.h>
 #include <lsp-plug.in/fmt/obj/PushParser.h>
 #include <lsp-plug.in/lltl/darray.h>
@@ -275,16 +278,39 @@ namespace lsp
 
         status_t load_scene_from_obj(dspu::Scene3D *scene, io::IInStream *is, const char *charset)
         {
-            obj::PushParser pp;
-            ObjSceneHandler handler(scene);
-            return pp.parse_data(&handler, is, WRAP_NONE, charset);
-        }
+            // Load to memory
+            io::OutMemoryStream oms;
+            const wssize_t count = is->sink(&oms);
+            if (count < 0)
+                return status_t(-count);
 
-        status_t load_scene_from_obj(dspu::Scene3D *scene, io::IInSequence *is)
-        {
-            obj::PushParser pp;
+            status_t res = STATUS_OK;
             ObjSceneHandler handler(scene);
-            return pp.parse_data(&handler, is, WRAP_NONE);
+
+            // Try to load compressed object file first
+            {
+                io::InMemoryStream ims;
+                ims.wrap(oms.data(), oms.size());
+
+                obj::Decompressor dp;
+                if ((res = dp.parse_data(&handler, &ims)) == STATUS_OK)
+                    return res;
+                if ((res != STATUS_BAD_FORMAT) &&
+                    (res != STATUS_UNSUPPORTED_FORMAT))
+                    return res;
+            }
+
+            // Try to load non-compressed object file
+            {
+                io::InMemoryStream ims;
+                ims.wrap(oms.data(), oms.size());
+
+                obj::PushParser pp;
+                if ((res = pp.parse_data(&handler, &ims, WRAP_NONE, charset)) == STATUS_OK)
+                    return res;
+            }
+
+            return res;
         }
 
     } /* namespace dspu */
diff -pruN 1.2.21-5/modules/lsp-dsp-units/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-dsp-units/make/tools.mk
--- 1.2.21-5/modules/lsp-dsp-units/make/tools.mk	2025-03-01 12:43:00.956623392 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/make/tools.mk	2025-08-26 18:15:52.649916682 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-dsp-units/modules.mk 1.2.23-0ubuntu1/modules/lsp-dsp-units/modules.mk
--- 1.2.21-5/modules/lsp-dsp-units/modules.mk	2025-03-01 12:43:00.956623392 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/modules.mk	2025-08-26 18:15:52.649916682 +0000
@@ -20,31 +20,31 @@
 
 #------------------------------------------------------------------------------
 # Variables that describe source code dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
diff -pruN 1.2.21-5/modules/lsp-dsp-units/project.mk 1.2.23-0ubuntu1/modules/lsp-dsp-units/project.mk
--- 1.2.21-5/modules/lsp-dsp-units/project.mk	2025-03-01 12:43:00.956623392 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/project.mk	2025-08-26 18:15:52.649916682 +0000
@@ -23,5 +23,5 @@ ARTIFACT_ID                 = LSP_DSP_UN
 ARTIFACT_NAME               = lsp-dsp-units
 ARTIFACT_DESC               = High-level classes for performing DSP
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.28
+ARTIFACT_VERSION            = 1.0.30
 
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/3d/Scene3D.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/3d/Scene3D.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/3d/Scene3D.cpp	2025-03-01 12:43:00.996623152 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/3d/Scene3D.cpp	2025-08-26 18:15:52.709916099 +0000
@@ -495,32 +495,12 @@ namespace lsp
             return res;
         }
 
-        status_t Scene3D::load(io::IInSequence *is, size_t flags)
-        {
-            status_t res;
-            Scene3D tmp;
-            if ((res = tmp.load_internal(is, flags)) == STATUS_OK)
-                tmp.swap(this);
-            return res;
-        }
-
         status_t Scene3D::load_internal(io::IInStream *is, size_t flags, const char *charset)
         {
             status_t res = load_scene_from_obj(this, is, charset);
             if (flags & WRAP_CLOSE)
                 res = update_status(res, is->close());
             if (flags & WRAP_DELETE)
-                delete is;
-
-            return res;
-        }
-
-        status_t Scene3D::load_internal(io::IInSequence *is, size_t flags)
-        {
-            status_t res = load_scene_from_obj(this, is);
-            if (flags & WRAP_CLOSE)
-                res = update_status(res, is->close());
-            if (flags & WRAP_DELETE)
                 delete is;
 
             return res;
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/misc/interpolation.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/misc/interpolation.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/misc/interpolation.cpp	2025-03-01 12:43:00.996623152 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/misc/interpolation.cpp	2025-08-26 18:15:52.713916061 +0000
@@ -28,6 +28,77 @@ namespace lsp
     {
         namespace interpolation
         {
+            //-----------------------------------------------------------------
+            // Matrix-related operations
+            static void swap_rows(double *a, double *b, size_t count)
+            {
+                for (size_t i=0; i<count; ++i)
+                {
+                    const double tmp = a[i];
+                    a[i]    = b[i];
+                    b[i]    = tmp;
+                }
+            }
+
+            static void sub_row(double *a, const double *b, size_t count)
+            {
+                const double k = a[0] / b[0];
+
+                a[0] = 0.0f;
+                for (size_t i=1; i<count; ++i)
+                    a[i]    -= k*b[i];
+            }
+
+            static double solve_row(const double *row, const double *c, size_t count)
+            {
+                double sum  = row[count];
+                for (size_t i=1; i<count; ++i)
+                    sum        += row[i] * c[i];
+
+                return -sum/row[0];
+            }
+
+            void solve_matrix(double *c, double *m, size_t vars)
+            {
+                const size_t cols = vars + 1;
+
+                // Triangulate matrix
+                for (size_t i=0; i<vars; ++i)
+                {
+                    // Make first value non-zero
+                    double *srow = &m[i * cols + i];
+
+                    if (fabs(srow[0]) < 1e-20f)
+                    {
+                        for (size_t j = i; j<vars; ++j)
+                        {
+                            double *drow = &m[j * cols + i];
+                            if (fabs(drow[0]) >= 1e-20f)
+                            {
+                                swap_rows(srow, drow, cols - i);
+                                break;
+                            }
+                        }
+                    }
+
+                    // Subtract all other rows
+                    for (size_t j=i+1; j<vars; ++j)
+                    {
+                        double *drow = &m[j * cols + i];
+                        if (fabs(drow[0]) < 1e-20f)
+                            continue;
+
+                        sub_row(drow, srow, cols - i);
+                    }
+                }
+
+                // Compute polynom parameters
+                for (size_t i=vars; i-- > 0; )
+                    c[i]        = solve_row(&m[i*cols + i], &c[i], vars - i);
+            }
+
+            //-----------------------------------------------------------------
+
             LSP_DSP_UNITS_PUBLIC
             void hermite_quadratic(float *p, float x0, float y0, float k0, float x1, float k1)
             {
@@ -60,6 +131,96 @@ namespace lsp
             }
 
             LSP_DSP_UNITS_PUBLIC
+            void hermite_quadro(
+                float *p,
+                float x0, float y0, float k0,
+                float x1, float y1, float k1,
+                float x2, float y2)
+            {
+                double m[5 * 6];
+
+                double X[3] = { x0, x1, x2 };
+                double Y[3] = { y0, y1, y2 };
+                double K[2] = { k0, k1 };
+
+                for (size_t i=0; i<3; ++i)
+                {
+                    const double x  = X[i];
+                    double *r0      = &m[i * 6];
+
+                    r0[5]   = -Y[i];        // y
+                    r0[4]   = 1.0;          // 1
+                    r0[3]   = x;            // x
+                    r0[2]   = x*x;          // x^2
+                    r0[1]   = x*r0[2];      // x^3
+                    r0[0]   = r0[2]*r0[2];  // x^4
+
+                    if (i < 2)
+                    {
+                        double *r1      = &m[(i + 3)*6];
+
+                        r1[5]   = -K[i];        // k
+                        r1[4]   = 0.0;          // 0
+                        r1[3]   = 1.0;          // 1
+                        r1[2]   = 2.0 * x;      // 2*x^1
+                        r1[1]   = 3.0 * r0[2];  // 3*x^2
+                        r1[0]   = 4.0 * r0[1];  // 4*x^3
+                    }
+                }
+
+                // Compute polynom parameters and output result
+                double c[5];
+                solve_matrix(c, m, 5);
+
+                for (size_t i=0; i<5; ++i)
+                    p[i]        = c[i];
+            }
+
+            LSP_DSP_UNITS_PUBLIC
+            void hermite_penta(
+                float *p,
+                float x0, float y0, float k0,
+                float x1, float y1, float k1,
+                float x2, float y2, float k2)
+            {
+                double X[3] = { x0, x1, x2 };
+                double Y[3] = { y0, y1, y2 };
+                double K[3] = { k0, k1, k2 };
+
+                double m[6 * 7];
+
+                for (size_t i=0; i<3; ++i)
+                {
+                    const double x  = X[i];
+
+                    double *r0      = &m[i * 7];
+                    r0[6]   = -Y[i];        // y
+                    r0[5]   = 1.0;          // 1
+                    r0[4]   = x;            // x
+                    r0[3]   = x*x;          // x^2
+                    r0[2]   = x*r0[3];      // x^3
+                    r0[1]   = r0[3]*r0[3];  // x^4
+                    r0[0]   = r0[2]*r0[3];  // x^5
+
+                    double *r1      = &m[(i + 3)*7];
+                    r1[6]   = -K[i];        // k
+                    r1[5]   = 0.0;          // 0
+                    r1[4]   = 1.0;          // 1
+                    r1[3]   = 2.0 * x;      // 2*x^1
+                    r1[2]   = 3.0 * r0[3];  // 3*x^2
+                    r1[1]   = 4.0 * r0[2];  // 4*x^3
+                    r1[0]   = 5.0 * r0[1];  // 5*x^4
+                }
+
+                // Compute polynom parameters and output result
+                double c[6];
+                solve_matrix(c, m, 6);
+
+                for (size_t i=0; i<6; ++i)
+                    p[i]        = c[i];
+            }
+
+            LSP_DSP_UNITS_PUBLIC
             void exponent(float *p, float x0, float y0, float x1, float y1, float k)
             {
                 double e        = exp(k*(x0 - x1));
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/misc/lfo.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/misc/lfo.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/misc/lfo.cpp	2025-03-01 12:43:00.996623152 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/misc/lfo.cpp	2025-08-26 18:15:52.713916061 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-units
  * Created on: 10 июн. 2023 г.
@@ -21,6 +21,7 @@
 
 #include <lsp-plug.in/stdlib/math.h>
 #include <lsp-plug.in/dsp-units/misc/lfo.h>
+#include <lsp-plug.in/dsp-units/misc/quickmath.h>
 
 namespace lsp
 {
@@ -28,36 +29,9 @@ namespace lsp
     {
         namespace lfo
         {
-            static constexpr float      REV_LN100               = 0.5f / M_LN10;
-            static constexpr float      LOG2TOLN                = 1.0f / M_LOG2E;
-
-            static inline float taylor_sinf(float x)
-            {
-                // Taylor series sine approximation for better performance
-                // The argument should be within range -M_PI/2 ... M_PI/2
-                const float x2 = x*x;
-                return x * (1.0f + x2*(-0.166666666667f + x2*(0.00833333333333f + x2 * -0.000198412698413f)));
-            }
-
-            static inline float taylor_logf(float x)
-            {
-                // Using taylor series of arctanh function that can express the logarithm value as:
-                // ln(x) = 2 * arctanh((x-1)/(x+1))
-                union { float f; uint32_t i; } u;
-
-                // Get mantissa and reset it for the input argument
-                u.f = x;
-                const int f = (u.i >> 23) - 127; // f = mant(x)
-                u.i = (u.i & 0x007fffff) | 0x3f800000;
-
-                // Prepare for calculations
-                const float X = u.f;
-                const float y = (X - 1.0f)/(X + 1.0f);
-                const float y2 = y*y;
-
-                return 2.0f*y * (1.0f + y2*(0.333333333333f + y2*(0.2f + y2*(0.142857142857f)))) + f * LOG2TOLN;
-            }
-
+            static constexpr float      LFO_REV_LN100           = 0.5f / M_LN10;
+            static constexpr float      LFO_M_2PI               = 2.0f * M_PI;
+            static constexpr float      LFO_M_4PI               = 4.0f * M_PI;
 
             LSP_DSP_UNITS_PUBLIC
             float triangular(float phase)
@@ -69,8 +43,8 @@ namespace lsp
             float sine(float phase)
             {
                 return (phase >=0.5f) ?
-                    0.5f + 0.5f*taylor_sinf((0.75f - phase) * M_PI * 2.0f) :
-                    0.5f + 0.5f*taylor_sinf((phase - 0.25f) * M_PI * 2.0f);
+                    0.5f + 0.5f * quick_sinf((0.75f - phase) * LFO_M_2PI) :
+                    0.5f + 0.5f * quick_sinf((phase - 0.25f) * LFO_M_2PI);
             }
 
             LSP_DSP_UNITS_PUBLIC
@@ -79,13 +53,13 @@ namespace lsp
                 if (phase >= 0.5f)
                 {
                     return (phase >= 0.75f) ?
-                        0.25f + 0.25f * taylor_sinf((0.875f - phase) * M_PI * 4.0f) :
-                        0.75f + 0.25f * taylor_sinf((0.625f - phase) * M_PI * 4.0f);
+                        0.25f + 0.25f * quick_sinf((0.875f - phase) * LFO_M_4PI) :
+                        0.75f + 0.25f * quick_sinf((0.625f - phase) * LFO_M_4PI);
                 }
 
                 return (phase >= 0.25f) ?
-                    0.75f + 0.25f * sinf((phase - 0.375f) * M_PI * 4.0f) :
-                    0.25f + 0.25f * sinf((phase - 0.125f) * M_PI * 4.0f);
+                    0.75f + 0.25f * sinf((phase - 0.375f) * LFO_M_4PI) :
+                    0.25f + 0.25f * sinf((phase - 0.125f) * LFO_M_4PI);
             }
 
             LSP_DSP_UNITS_PUBLIC
@@ -128,7 +102,7 @@ namespace lsp
             {
                 if (phase >= 0.5f)
                     phase      = 1.0f - phase;
-                return taylor_logf(1.0f + 198.0f *phase) * REV_LN100;
+                return quick_logf(1.0f + 198.0f *phase) * LFO_REV_LN100;
             }
 
             LSP_DSP_UNITS_PUBLIC
@@ -136,7 +110,7 @@ namespace lsp
             {
                 if (phase >= 0.5f)
                     phase      = 1.0f - phase;
-                return 1.0f - logf(100.0f - 198.0f * phase) * REV_LN100;
+                return 1.0f - quick_logf(100.0f - 198.0f * phase) * LFO_REV_LN100;
             }
 
             LSP_DSP_UNITS_PUBLIC
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/sampling/Sample.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/sampling/Sample.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/sampling/Sample.cpp	2025-03-01 12:43:01.000623128 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/sampling/Sample.cpp	2025-08-26 18:15:52.713916061 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins
  * Created on: 12 мая 2017 г.
@@ -41,7 +41,9 @@ namespace lsp
     namespace dspu
     {
         static constexpr size_t BUFFER_FRAMES       = 0x1000;
-        static constexpr size_t RESAMPLING_PERIODS  = 32;
+        static constexpr float  RESAMPLING_KPERIODS = 32.0f;
+        static constexpr float  RESAMPLING_RPERIODS = 1.0f / RESAMPLING_KPERIODS;
+        static constexpr float  RESAMPLING_PI       = M_PI;
 
         namespace
         {
@@ -1014,11 +1016,10 @@ namespace lsp
         {
             // Calculate parameters of transformation
             ssize_t kf          = new_sample_rate / nSampleRate;
-            float rkf           = 1.0f / kf;
+            const float rkf     = RESAMPLING_PI / kf;
 
             // Prepare kernel for resampling
-            ssize_t k_periods   = RESAMPLING_PERIODS; // * (kf >> 1);
-            ssize_t k_base      = k_periods * kf;
+            ssize_t k_base      = RESAMPLING_KPERIODS * kf;
             ssize_t k_center    = k_base + 1;
             ssize_t k_len       = (k_center << 1) + 1;
             ssize_t k_size      = align_size(k_len + 1, 4); // Additional sample for time offset
@@ -1037,18 +1038,11 @@ namespace lsp
             s->set_sample_rate(new_sample_rate);
 
             // Generate Lanczos kernel
-            for (ssize_t j=0; j<k_size; ++j)
-            {
-                float t         = (j - k_center) * rkf;
-
-                if ((t > -k_periods) && (t < k_periods))
-                {
-                    float t2    = M_PI * t;
-                    k[j]        = (t != 0) ? k_periods * sinf(t2) * sinf(t2 / k_periods) / (t2 * t2) : 1.0f;
-                }
-                else
-                    k[j]        = 0.0f;
-            }
+            dsp::lanczos1(
+                k,
+                rkf, k_center * rkf,
+                RESAMPLING_KPERIODS * RESAMPLING_PI, RESAMPLING_RPERIODS,
+                k_size);
 
             // Iterate each channel
             for (size_t c=0; c<nChannels; ++c)
@@ -1076,11 +1070,10 @@ namespace lsp
             ssize_t src_step    = nSampleRate / gcd;
             ssize_t dst_step    = new_sample_rate / gcd;
             float kf            = float(dst_step) / float(src_step);
-            float rkf           = float(src_step) / float(dst_step);
+            const float rkf     = (RESAMPLING_PI * float(src_step)) / float(dst_step);
 
             // Prepare kernel for resampling
-            ssize_t k_periods   = RESAMPLING_PERIODS; // Number of periods
-            ssize_t k_base      = k_periods * kf;
+            ssize_t k_base      = RESAMPLING_KPERIODS * kf;
             ssize_t k_center    = k_base + 1;
             ssize_t k_len       = (k_center << 1) + 1; // Centered impulse response
             ssize_t k_size      = align_size(k_len + 1, 4); // Additional sample for time offset
@@ -1100,40 +1093,38 @@ namespace lsp
             s->set_sample_rate(new_sample_rate);
 
             // Iterate each channel
-            for (size_t c=0; c<nChannels; ++c)
+            for (ssize_t i=0; i<src_step; ++i)
             {
-                const float *src    = &vBuffer[c * nMaxLength];
-                float *dst          = &s->vBuffer[c * s->nMaxLength];
+                // calculate the offset between nearest samples
+                const ssize_t p = kf * i;
+                const float dt  = float(i)*kf - float(p);
+
+                // Generate Lanczos kernel
+                dsp::lanczos1(
+                    k,
+                    rkf, (k_center + dt) * rkf,
+                    RESAMPLING_KPERIODS * RESAMPLING_PI, RESAMPLING_RPERIODS,
+                    k_size);
 
-                for (ssize_t i=0; i<src_step; ++i)
+                for (size_t c=0; c<nChannels; ++c)
                 {
-                    // calculate the offset between nearest samples
-                    ssize_t p       = kf * i;
-                    float dt        = i*kf - p;
-
-                    // Generate Lanczos kernel
-                    for (ssize_t j=0; j<k_size; ++j)
-                    {
-                        float t         = (j - k_center - dt) * rkf;
-
-                        if ((t > -k_periods) && (t < k_periods))
-                        {
-                            float t2    = M_PI * t;
-                            k[j]        = (t != 0.0f) ? k_periods * sinf(t2) * sinf(t2 / k_periods) / (t2 * t2) : 1.0f;
-                        }
-                        else
-                            k[j]        = 0.0f;
-                    }
+                    const float *src    = &vBuffer[c * nMaxLength];
+                    float *dst          = &s->vBuffer[c * s->nMaxLength];
+                    ssize_t xp          = p;
 
                     // Perform convolutions
                     for (size_t j=i; j<nLength; j += src_step)
                     {
-                        dsp::fmadd_k3(&dst[p], k, src[j], k_size);
-                        p   += dst_step;
+                        dsp::fmadd_k3(&dst[xp], k, src[j], k_size);
+                        xp             += dst_step;
                     }
                 }
+            }
 
-                // Copy the data to the file content
+            // Copy the data to the file content
+            for (size_t c=0; c<nChannels; ++c)
+            {
+                float *dst          = &s->vBuffer[c * s->nMaxLength];
                 dsp::move(dst, &dst[k_center], s->nLength - k_center);
             }
 
@@ -1150,12 +1141,11 @@ namespace lsp
             ssize_t src_step    = nSampleRate / gcd;
             ssize_t dst_step    = new_sample_rate / gcd;
             float kf            = float(dst_step) / float(src_step);
-            float rkf           = float(src_step) / float(dst_step);
+            const float rkf     = (RESAMPLING_PI * float(src_step)) / float(dst_step);
 
             // Prepare kernel for resampling
-            ssize_t k_base      = RESAMPLING_PERIODS;
-            ssize_t k_periods   = k_base * rkf; // Number of periods
-            ssize_t k_center    = k_base + 1;
+            float k_periods     = RESAMPLING_KPERIODS * RESAMPLING_PI * rkf; // Number of periods
+            ssize_t k_center    = RESAMPLING_KPERIODS + 1.0f;
             ssize_t k_len       = (k_center << 1) + rkf + 1; // Centered impulse response
             ssize_t k_size      = align_size(k_len + 1, 4); // Additional sample for time offset
             float *k            = static_cast<float *>(malloc(sizeof(float) * k_size));
@@ -1173,40 +1163,38 @@ namespace lsp
             s->set_sample_rate(new_sample_rate);
 
             // Iterate each channel
-            for (size_t c=0; c<nChannels; ++c)
+            for (ssize_t i=0; i<src_step; ++i)
             {
-                const float *src    = &vBuffer[c * nMaxLength];
-                float *dst          = &s->vBuffer[c * s->nMaxLength];
+                // calculate the offset between nearest samples
+                const ssize_t p = kf * i;
+                const float dt  = float(i)*kf - float(p); // Always positive, in range of [0..1]
+
+                // Generate Lanczos kernel
+                dsp::lanczos1(
+                    k,
+                    rkf, (k_center + dt) * rkf,
+                    k_periods, RESAMPLING_RPERIODS,
+                    k_size);
 
-                for (ssize_t i=0; i<src_step; ++i)
+                for (size_t c=0; c<nChannels; ++c)
                 {
-                    // calculate the offset between nearest samples
-                    ssize_t p       = kf * i;
-                    float dt        = i*kf - p; // Always positive, in range of [0..1]
-
-                    // Generate Lanczos kernel
-                    for (ssize_t j=0; j<k_size; ++j)
-                    {
-                        float t         = (j - k_center - dt) * rkf;
-
-                        if ((t > -k_periods) && (t < k_periods))
-                        {
-                            float t2    = M_PI * t;
-                            k[j]        = (t != 0.0f) ? k_periods * sinf(t2) * sinf(t2 / k_periods) / (t2 * t2) : 1.0f;
-                        }
-                        else
-                            k[j]        = 0.0f;
-                    }
+                    const float *src    = &vBuffer[c * nMaxLength];
+                    float *dst          = &s->vBuffer[c * s->nMaxLength];
+                    ssize_t xp          = p;
 
                     // Perform convolutions
                     for (size_t j=i; j<nLength; j += src_step)
                     {
-                        dsp::fmadd_k3(&dst[p], k, src[j], k_size);
-                        p   += dst_step;
+                        dsp::fmadd_k3(&dst[xp], k, src[j], k_size);
+                        xp                 += dst_step;
                     }
                 }
+            }
 
-                // Copy the data to the file content
+            // Copy the data to the file content
+            for (size_t c=0; c<nChannels; ++c)
+            {
+                float *dst          = &s->vBuffer[c * s->nMaxLength];
                 dsp::move(dst, &dst[k_center], s->nLength - k_center);
             }
 
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/stat/QuantizedCounter.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/stat/QuantizedCounter.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/stat/QuantizedCounter.cpp	2025-03-01 12:43:01.000623128 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/stat/QuantizedCounter.cpp	2025-08-26 18:15:52.713916061 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-dsp-units
  * Created on: 13 нояб. 2024 г.
@@ -44,6 +44,7 @@ namespace lsp
             nPeriod         = 0;
             nLevels         = 0;
             nHead           = 0;
+            nCapacity       = 0;
             nCount          = 0;
             nMaxPeriod      = 0;
             nMaxLevels      = 0;
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/util/ADSREnvelope.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/ADSREnvelope.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/util/ADSREnvelope.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/ADSREnvelope.cpp	2025-08-26 18:15:52.713916061 +0000
@@ -0,0 +1,627 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-dsp-units
+ * Created on: 11 июн. 2025 г.
+ *
+ * lsp-dsp-units is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-dsp-units is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-dsp-units. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/dsp-units/util/ADSREnvelope.h>
+#include <lsp-plug.in/dsp-units/misc/interpolation.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+namespace lsp
+{
+    namespace dspu
+    {
+        ADSREnvelope::ADSREnvelope()
+        {
+            construct();
+        }
+
+        ADSREnvelope::~ADSREnvelope()
+        {
+            destroy();
+        }
+
+        void ADSREnvelope::construct()
+        {
+            for (size_t i=0; i<P_TOTAL; ++i)
+            {
+                curve_t *cv     = &vCurve[i];
+
+                cv->fTime               = 0.0f;
+                cv->fCurve              = 0.5f;
+                cv->enFunction          = ADSR_NONE;
+                cv->pGenerator          = none_generator;
+                cv->sParams.sNone.fK    = 0.0f;
+                cv->sParams.sNone.fB    = 0.0f;
+            }
+
+            fHoldTime       = 0.0f;
+            fBreakLevel     = 0.0f;
+            fSustainLevel   = 0.0f;
+            nFlags          = F_RECONFIGURE;
+        }
+
+        void ADSREnvelope::destroy()
+        {
+        }
+
+
+        void ADSREnvelope::set_param(float & param, float value)
+        {
+            const float normalized = lsp_limit(value, 0.0f, 1.0f);
+            if (param == normalized)
+                return;
+
+            param           = normalized;
+            nFlags         |= F_RECONFIGURE;
+        }
+
+        void ADSREnvelope::set_function(function_t & func, function_t value)
+        {
+            if (func == value)
+                return;
+
+            func            = value;
+            nFlags         |= F_RECONFIGURE;
+        }
+
+        void ADSREnvelope::set_flag(uint32_t flag, bool set)
+        {
+            bool on                 = nFlags & flag;
+            if (set != on)
+                nFlags                  = lsp_setflag(nFlags, flag, set) | F_RECONFIGURE;
+        }
+
+        void ADSREnvelope::set_curve(part_t part, float time, float curve, function_t func)
+        {
+            curve_t *cv             = &vCurve[part];
+
+            time                    = lsp_limit(time, 0.0f, 1.0f);
+            curve                   = lsp_limit(curve, 0.0f, 1.0f);
+
+            if ((cv->fTime == time) && (cv->fCurve == curve) && (cv->enFunction == func))
+                return;
+
+            cv->fTime               = time;
+            cv->fCurve              = curve;
+            cv->enFunction          = func;
+            nFlags                 |= F_RECONFIGURE;
+        }
+
+        void ADSREnvelope::set_hold(float time, bool enabled)
+        {
+            set_param(fHoldTime, time);
+            set_flag(F_USE_HOLD, enabled);
+        }
+
+        void ADSREnvelope::set_break(float level, bool enabled)
+        {
+            set_param(fBreakLevel, level);
+            set_flag(F_USE_BREAK, enabled);
+        }
+
+        inline float ADSREnvelope::limit_range(float t, float prev)
+        {
+            return lsp_limit(lsp_max(t, prev), 0.0f, 1.0f);
+        }
+
+        void ADSREnvelope::configure_curve(curve_t *curve, float x0, float x1, float y0, float y1)
+        {
+            switch (curve->enFunction)
+            {
+                case ADSR_LINE:
+                {
+                    curve->pGenerator       = line_generator;
+                    gen_line_t *g           = &curve->sParams.sLine;
+
+                    g->fT2                  = 0.5f * (x0 + x1);
+                    const float cy          = y0 + (y1 - y0) * curve->fCurve;
+
+                    g->fK1                  = (cy - y0) / (g->fT2 - x0);
+                    g->fB1                  = y0 - g->fK1 * x0;
+
+                    g->fK2                  = (y1 - cy) / (x1 - g->fT2);
+                    g->fB2                  = cy - g->fK2 * g->fT2;
+                    break;
+                }
+
+                case ADSR_LINE2:
+                {
+                    curve->pGenerator       = line_generator;
+                    gen_line_t *g           = &curve->sParams.sLine;
+
+                    g->fT2                  = x1 + (x0 - x1) * curve->fCurve;
+                    const float cy          = y0 + (y1 - y0) * curve->fCurve;
+
+                    g->fK1                  = (cy - y0) / (g->fT2 - x0);
+                    g->fB1                  = y0 - g->fK1 * x0;
+
+                    g->fK2                  = (y1 - cy) / (x1 - g->fT2);
+                    g->fB2                  = cy - g->fK2 * g->fT2;
+                    break;
+                }
+
+                case ADSR_CUBIC:
+                {
+                    curve->pGenerator       = cubic_generator;
+                    gen_hermite_t *g        = &curve->sParams.sHermite;
+
+                    const float cx          = 0.5f * (x0 + x1);
+                    const float cy          = y0 + (y1 - y0) * curve->fCurve;
+                    const float k0          = (cy - y0) / (cx - x0);
+                    const float k1          = (y1 - cy) / (x1 - cx);
+
+                    g->fT0                  = x0;
+                    interpolation::hermite_cubic(g->fK, 0.0f, y0, k0, x1 - x0, y1, k1);
+
+                    break;
+                }
+
+                case ADSR_QUADRO:
+                {
+                    curve->pGenerator       = quadro_generator;
+                    gen_hermite_t *g        = &curve->sParams.sHermite;
+
+                    const float cx          = 0.5f * (x0 + x1);
+                    const float cy          = y0 + (y1 - y0) * (0.3f + curve->fCurve * 0.4f);
+
+                    g->fT0                  = x0;
+                    interpolation::hermite_quadro(
+                        g->fK,
+                        0.0f, y0, 0.0f,
+                        x1 - x0, y1, 0.0f,
+                        cx - x0, cy);
+
+                    break;
+                }
+
+                case ADSR_EXP:
+                {
+                    curve->pGenerator       = exp_generator;
+                    gen_exp_t *g            = &curve->sParams.sExp;
+
+                    const float kt          = 0.5f - curve->fCurve;
+                    const float ndx         = 1.0f/(x1 - x0);
+
+                    g->fT0                  = x0;
+                    g->fKT                  = fabsf(kt) * 40.0f;
+
+                    const float ny          = expf(-g->fKT);
+                    if (kt >= 0.0f)
+                    {
+                        g->fA[0]            = y0;
+                        g->fA[1]            = (y1 - y0) * ny;
+                        g->fB[0]            = ndx;
+                        g->fB[1]            = 0.0f;
+                    }
+                    else
+                    {
+                        g->fA[0]            = y1;
+                        g->fA[1]            = (y0 - y1) * ny;
+                        g->fB[0]            = -ndx;
+                        g->fB[1]            = 1.0f;
+                    }
+
+                    break;
+                }
+
+                case ADSR_NONE:
+                default:
+                {
+                    curve->pGenerator       = none_generator;
+                    gen_none_t *g           = &curve->sParams.sNone;
+
+                    g->fT                   = x0;
+                    g->fK                   = (y1 - y0) / (x1 - x0);
+                    g->fB                   = y0;
+                    break;
+                }
+            }
+        }
+
+        void ADSREnvelope::update_settings()
+        {
+            if (!(nFlags & F_RECONFIGURE))
+                return;
+
+            // Update time ranges
+            vCurve[P_ATTACK].fTime  = limit_range(vCurve[P_ATTACK].fTime, 0.0f);
+            if (nFlags & F_USE_HOLD)
+            {
+                fHoldTime               = limit_range(fHoldTime, vCurve[P_ATTACK].fTime);
+                vCurve[P_DECAY].fTime   = limit_range(vCurve[P_DECAY].fTime, fHoldTime);
+            }
+            else
+                vCurve[P_DECAY].fTime   = limit_range(vCurve[P_DECAY].fTime, vCurve[P_ATTACK].fTime);
+
+            if (nFlags & F_USE_BREAK)
+            {
+                vCurve[P_SLOPE].fTime   = limit_range(vCurve[P_SLOPE].fTime, vCurve[P_DECAY].fTime);
+                vCurve[P_RELEASE].fTime = limit_range(vCurve[P_RELEASE].fTime, vCurve[P_SLOPE].fTime);
+            }
+            else
+                vCurve[P_RELEASE].fTime = limit_range(vCurve[P_RELEASE].fTime, vCurve[P_DECAY].fTime);
+
+            // Configure curves
+            configure_curve(
+                &vCurve[P_ATTACK],
+                0.0f, vCurve[P_ATTACK].fTime,
+                0.0f, 1.0f);
+            const float hold        = (nFlags & F_USE_HOLD) ? fHoldTime : vCurve[P_ATTACK].fTime;
+            const float decay       = vCurve[P_DECAY].fTime;
+            if (nFlags & F_USE_BREAK)
+            {
+                configure_curve(
+                    &vCurve[P_DECAY],
+                    hold, decay,
+                    1.0f, fBreakLevel);
+                configure_curve(
+                    &vCurve[P_SLOPE],
+                    decay, vCurve[P_SLOPE].fTime,
+                    fBreakLevel, fSustainLevel);
+            }
+            else
+            {
+                configure_curve(
+                    &vCurve[P_DECAY],
+                    hold, decay,
+                    1.0f, fSustainLevel);
+            }
+
+            configure_curve(
+                &vCurve[P_RELEASE],
+                vCurve[P_RELEASE].fTime, 1.0f,
+                fSustainLevel, 0.0f);
+
+            nFlags         &= ~F_RECONFIGURE;
+        }
+
+        float ADSREnvelope::do_process(float t)
+        {
+            if ((t <= 0.0f) || (t >= 1.0f))
+                return 0.0f;
+
+            // Attack
+            const curve_t *cv   = &vCurve[P_ATTACK];
+            if (t < cv->fTime)
+                return cv->pGenerator(t, &cv->sParams);
+            const float hold    = (nFlags & F_USE_HOLD) ? fHoldTime : cv->fTime;
+
+            // Hold
+            if (t < hold)
+                return 1.0f;
+
+            // Decay
+            cv                  = &vCurve[P_DECAY];
+            if (t < cv->fTime)
+                return cv->pGenerator(t, &cv->sParams);
+
+            // Slope
+            if (nFlags & F_USE_BREAK)
+            {
+                cv                  = &vCurve[P_SLOPE];
+                if (t < cv->fTime)
+                    return cv->pGenerator(t, &cv->sParams);
+            }
+
+            // Sustain and Release
+            cv          = &vCurve[P_RELEASE];
+            return (t < cv->fTime) ? fSustainLevel : cv->pGenerator(t, &cv->sParams);
+        }
+
+        float ADSREnvelope::process(float value)
+        {
+            update_settings();
+            return do_process(value);
+        }
+
+        void ADSREnvelope::process(float *dst, const float *src, size_t count)
+        {
+            update_settings();
+
+            for (size_t i=0; i<count; ++i)
+                dst[i]      = do_process(src[i]);
+        }
+
+        void ADSREnvelope::process_mul(float *dst, const float *src, size_t count)
+        {
+            update_settings();
+
+            for (size_t i=0; i<count; ++i)
+                dst[i]     *= do_process(src[i]);
+        }
+
+        float ADSREnvelope::none_generator(float t, const gen_params_t *params)
+        {
+            const gen_none_t *none = &params->sNone;
+            return (t - none->fT) * none->fK + none->fB;
+        }
+
+        float ADSREnvelope::line_generator(float t, const gen_params_t *params)
+        {
+            const gen_line_t *line = &params->sLine;
+            return (t < line->fT2) ?
+                t * line->fK1 + line->fB1 :
+                t * line->fK2 + line->fB2;
+        }
+
+        float ADSREnvelope::cubic_generator(float t, const gen_params_t *params)
+        {
+            const gen_hermite_t *c = &params->sHermite;
+            t  -= c->fT0;
+            return ((c->fK[0] * t + c->fK[1]) * t + c->fK[2])*t + c->fK[3];
+        }
+
+        float ADSREnvelope::quadro_generator(float t, const gen_params_t *params)
+        {
+            const gen_hermite_t *c = &params->sHermite;
+            t  -= c->fT0;
+            return (((c->fK[0] * t + c->fK[1]) * t + c->fK[2])*t + c->fK[3])*t + c->fK[4];
+        }
+
+        float ADSREnvelope::exp_generator(float t, const gen_params_t *params)
+        {
+            const gen_exp_t *c = &params->sExp;
+            t  = (t - c->fT0) * c->fB[0] + c->fB[1];
+            return c->fA[0] + c->fA[1] * t * expf(t * c->fKT);
+        }
+
+        void ADSREnvelope::generate(float *dst, float start, float step, size_t count)
+        {
+            update_settings();
+
+            size_t i            = 0;
+            float t             = start;
+
+            // Time before attack
+            for ( ; (t <= 0.0f) && (i < count); t = start + (++i) * step)
+                dst[i]              = 0.0f;
+
+            // Attack segment
+            const curve_t *cv   = &vCurve[P_ATTACK];
+            for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                dst[i]              = cv->pGenerator(t, &cv->sParams);
+
+            // Hold segment
+            if (nFlags & F_USE_HOLD)
+            {
+                for ( ; (t < fHoldTime) && (i < count); t = start + (++i) * step)
+                    dst[i]              = 1.0f;
+            }
+
+            // Decay segment
+            cv                  = &vCurve[P_DECAY];
+            for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                dst[i]              = cv->pGenerator(t, &cv->sParams);
+
+            // Slope segment
+            if (nFlags & F_USE_BREAK)
+            {
+                cv                  = &vCurve[P_SLOPE];
+                for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                    dst[i]              = cv->pGenerator(t, &cv->sParams);
+            }
+
+            // Sustain segment
+            cv                  = &vCurve[P_RELEASE];
+            for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                dst[i]              = fSustainLevel;
+
+            // Release segment
+            for ( ; (t < 1.0f) && (i < count); t = start + (++i) * step)
+                dst[i]              = cv->pGenerator(t, &cv->sParams);
+
+            // Time after release
+            for ( ; (i < count); ++i)
+                dst[i]              = 0.0f;
+        }
+
+        void ADSREnvelope::generate_mul(float *dst, float start, float step, size_t count)
+        {
+            update_settings();
+
+            size_t i            = 0;
+            float t             = start;
+
+            // Time before attack
+            for ( ; (t <= 0.0f) && (i < count); t = start + (++i) * step)
+                dst[i]              = 0.0f;
+
+            // Attack segment
+            const curve_t *cv   = &vCurve[P_ATTACK];
+            for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                dst[i]             *= cv->pGenerator(t, &cv->sParams);
+
+            // Hold segment
+            if (nFlags & F_USE_HOLD)
+            {
+                for ( ; (t < fHoldTime) && (i < count); t = start + (++i) * step)
+                    /* nothing */;
+            }
+
+            // Decay segment
+            cv                  = &vCurve[P_DECAY];
+            for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                dst[i]             *= cv->pGenerator(t, &cv->sParams);
+
+            // Slope segment
+            if (nFlags & F_USE_BREAK)
+            {
+                cv                  = &vCurve[P_SLOPE];
+                for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                    dst[i]             *= cv->pGenerator(t, &cv->sParams);
+            }
+
+            // Sustain segment
+            cv                  = &vCurve[P_RELEASE];
+            for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                dst[i]             *= fSustainLevel;
+
+            // Release segment
+            for ( ; (t < 1.0f) && (i < count); t = start + (++i) * step)
+                dst[i]             *= cv->pGenerator(t, &cv->sParams);
+
+            // Time after release
+            for ( ; (i < count); ++i)
+                dst[i]              = 0.0f;
+        }
+
+        void ADSREnvelope::generate_mul(float *dst, const float *src, float start, float step, size_t count)
+        {
+            update_settings();
+
+            size_t i            = 0;
+            float t             = start;
+
+            // Time before attack
+            for ( ; (t <= 0.0f) && (i < count); t = start + (++i) * step)
+                dst[i]              = 0.0f;
+
+            // Attack segment
+            const curve_t *cv   = &vCurve[P_ATTACK];
+            for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                dst[i]              = src[i] * cv->pGenerator(t, &cv->sParams);
+
+            // Hold segment
+            if (nFlags & F_USE_HOLD)
+            {
+                for ( ; (t < fHoldTime) && (i < count); t = start + (++i) * step)
+                    dst[i]              = src[i];
+            }
+
+            // Decay segment
+            cv                  = &vCurve[P_DECAY];
+            for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                dst[i]              = src[i] * cv->pGenerator(t, &cv->sParams);
+
+            // Slope segment
+            if (nFlags & F_USE_BREAK)
+            {
+                cv                  = &vCurve[P_SLOPE];
+                for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                    dst[i]              = src[i] * cv->pGenerator(t, &cv->sParams);
+            }
+
+            // Sustain segment
+            cv                  = &vCurve[P_RELEASE];
+            for ( ; (t < cv->fTime) && (i < count); t = start + (++i) * step)
+                dst[i]              = src[i] * fSustainLevel;
+
+            // Release segment
+            for ( ; (t < 1.0f) && (i < count); t = start + (++i) * step)
+                dst[i]              = src[i] * cv->pGenerator(t, &cv->sParams);
+
+            // Time after release
+            for ( ; (i < count); ++i)
+                dst[i]              = 0.0f;
+        }
+
+        void ADSREnvelope::dump(IStateDumper *v) const
+        {
+            v->begin_array("vCurve", vCurve, P_TOTAL);
+            {
+                for (size_t i=0; i<P_TOTAL; ++i)
+                {
+                    const curve_t *c = &vCurve[i];
+
+                    v->begin_object(c, sizeof(curve_t));
+
+                    v->write("fTime", c->fTime);
+                    v->write("fCurve", c->fCurve);
+                    v->write("enFunction", c->enFunction);
+                    v->write("pGenerator", c->pGenerator);
+
+                    v->begin_object("sParams", &c->sParams, sizeof(gen_params_t));
+                    {
+                        switch (c->enFunction)
+                        {
+                            case ADSR_LINE:
+                            case ADSR_LINE2:
+                            {
+                                const gen_line_t *g = &c->sParams.sLine;
+                                v->begin_object("sLine", g, sizeof(gen_line_t));
+                                {
+                                    v->write("fT2", g->fT2);
+                                    v->write("fK1", g->fK1);
+                                    v->write("fB1", g->fB1);
+                                    v->write("fK2", g->fK2);
+                                    v->write("fB2", g->fB2);
+                                }
+                                v->end_object();
+                                break;
+                            }
+
+                            case ADSR_CUBIC:
+                            case ADSR_QUADRO:
+                            {
+                                const gen_hermite_t *g = &c->sParams.sHermite;
+                                v->begin_object("sHermite", g, sizeof(gen_hermite_t));
+                                {
+                                    v->write("fT0", g->fT0);
+                                    v->writev("fK", g->fK, (c->enFunction == ADSR_CUBIC) ? 4 : 5);
+                                }
+                                v->end_object();
+                                break;
+                            }
+
+                            case ADSR_EXP:
+                            {
+                                const gen_exp_t *g = &c->sParams.sExp;
+                                v->begin_object("sExp", g, sizeof(gen_exp_t));
+                                {
+                                    v->write("fT0", g->fT0);
+                                    v->write("fKT", g->fKT);
+                                    v->writev("fA", g->fA, 2);
+                                    v->writev("fB", g->fB, 2);
+                                }
+                                v->end_object();
+                                break;
+                            }
+
+                            default:
+                            case ADSR_NONE:
+                            {
+                                const gen_none_t *g = &c->sParams.sNone;
+                                v->begin_object("sNone", g, sizeof(gen_none_t));
+                                {
+                                    v->write("fT", g->fT);
+                                    v->write("fK", g->fK);
+                                    v->write("fB", g->fB);
+                                }
+                                v->end_object();
+                                break;
+                            }
+                        }
+                    }
+
+                    v->end_object();
+                }
+            }
+            v->end_array();
+
+            v->write("fHoldTime", fHoldTime);
+            v->write("fBreakLevel", fBreakLevel);
+            v->write("fSustainLevel", fSustainLevel);
+            v->write("nFlags", nFlags);
+        }
+
+    } /* namespace dspu */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/util/Analyzer.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/Analyzer.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/util/Analyzer.cpp	2025-03-01 12:43:01.000623128 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/Analyzer.cpp	2025-08-26 18:15:52.713916061 +0000
@@ -468,24 +468,41 @@ namespace lsp
             return vChannels[channel].vData[idx] * vEnvelope[idx];
         }
 
-        void Analyzer::get_frequencies(float *frq, uint32_t *idx, float start, float stop, size_t count)
+        void Analyzer::get_frequencies(float *frq, uint32_t *idx, float start, float stop, size_t count, bool linear)
         {
-            size_t fft_size     = 1 << nRank;
-            size_t fft_csize    = (fft_size >> 1) + 1;
-            float scale         = float(fft_size) / float(nSampleRate);
+            const size_t fft_size   = 1 << nRank;
+            const size_t fft_csize  = (fft_size >> 1) + 1;
+            const float scale       = float(fft_size) / float(nSampleRate);
 
-            // Initialize list of frequencies
-            float norm          = logf(stop/start) / (count - 1);
+            // Initialize list of frequencies depending on the scale
+            if (linear)
+            {
+                const float norm    = (stop - start) / (count - 1);
+                for (size_t i=0; i<count; ++i)
+                {
+                    float f             = start + i * norm;
+                    size_t ix           = scale * f;
+                    if (ix > fft_csize)
+                        ix                  = fft_csize;
 
-            for (size_t i=0; i<count; ++i)
+                    frq[i]              = f;
+                    idx[i]              = uint32_t(ix);
+                }
+            }
+            else
             {
-                float f         = start * expf(i * norm);
-                size_t ix       = scale * f;
-                if (ix > fft_csize)
-                    ix                  = fft_csize;
+                const float norm    = logf(stop/start) / (count - 1);
+
+                for (size_t i=0; i<count; ++i)
+                {
+                    float f             = start * expf(i * norm);
+                    size_t ix           = scale * f;
+                    if (ix > fft_csize)
+                        ix                  = fft_csize;
 
-                frq[i]          = f;
-                idx[i]          = uint32_t(ix);
+                    frq[i]              = f;
+                    idx[i]              = uint32_t(ix);
+                }
             }
         }
 
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/util/MeterGraph.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/MeterGraph.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/util/MeterGraph.cpp	2025-03-01 12:43:01.000623128 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/MeterGraph.cpp	2025-08-26 18:15:52.717916022 +0000
@@ -87,6 +87,11 @@ namespace lsp
                         fCurrent    = sample;
                     break;
 
+                case MM_PEAK:
+                    if (nCount == 0)
+                        fCurrent    = sample;
+                    break;
+
                 default:
                 case MM_ABS_MAXIMUM:
                     sample      = fabsf(sample);
@@ -100,7 +105,7 @@ namespace lsp
             {
                 // Append current sample to buffer
                 sBuffer.process(fCurrent);
-                nCount      = 0;
+                nCount     = 0;
             }
         }
 
@@ -138,6 +143,13 @@ namespace lsp
                                 fCurrent        = sample;
                             break;
                         }
+                        case MM_PEAK:
+                        {
+                            if (nCount == 0)
+                                fCurrent            = s[0];
+                            break;
+                        }
+
                         default:
                         case MM_ABS_MAXIMUM:
                         {
@@ -198,6 +210,12 @@ namespace lsp
                                 fCurrent        = sample;
                             break;
                         }
+                        case MM_PEAK:
+                        {
+                            if (nCount == 0)
+                                fCurrent            = s[0] * gain;
+                            break;
+                        }
                         default:
                         case MM_ABS_MAXIMUM:
                         {
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/util/RingBuffer.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/RingBuffer.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/util/RingBuffer.cpp	2025-03-01 12:43:01.000623128 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/RingBuffer.cpp	2025-08-26 18:15:52.717916022 +0000
@@ -20,6 +20,7 @@
  */
 
 #include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/dsp-units/misc/quickmath.h>
 #include <lsp-plug.in/dsp-units/util/RingBuffer.h>
 #include <lsp-plug.in/stdlib/stdlib.h>
 
@@ -117,6 +118,15 @@ namespace lsp
             return pData[index];
         }
 
+        float RingBuffer::lerp_get(float offset)
+        {
+            const ssize_t off = offset;
+            const float s1 = get(off);
+            const float s2 = get(off + 1);
+
+            return lerp(s1, s2, offset - float(off));
+        }
+
         size_t RingBuffer::tail_offset(size_t offset) const
         {
             return (offset < nCapacity) ?
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/util/ScaledMeterGraph.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/ScaledMeterGraph.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/util/ScaledMeterGraph.cpp	2025-03-01 12:43:01.000623128 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/ScaledMeterGraph.cpp	2025-08-26 18:15:52.717916022 +0000
@@ -121,6 +121,11 @@ namespace lsp
                         sampler->fCurrent   = sample;
                     break;
 
+                case MM_PEAK:
+                    if (sampler->nCount == 0)
+                        sampler->fCurrent   = sample;
+                    break;
+
                 default:
                 case MM_ABS_MAXIMUM:
                     sample = fabsf(sample);
@@ -171,6 +176,12 @@ namespace lsp
                                 sampler->fCurrent   = sample;
                             break;
                         }
+                        case MM_PEAK:
+                        {
+                            if (sampler->nCount == 0)
+                                sampler->fCurrent   = src[offset];
+                            break;
+                        }
                         default:
                         case MM_ABS_MAXIMUM:
                         {
@@ -207,29 +218,35 @@ namespace lsp
                     {
                         case MM_SIGN_MINIMUM:
                         {
-                            const float sample  = dsp::sign_min(&src[offset], to_process);
+                            const float sample  = dsp::sign_min(&src[offset], to_process) * gain;
                             if ((sampler->nCount == 0) || (fabsf(sampler->fCurrent) > fabsf(sample)))
                                 sampler->fCurrent   = sample;
                             break;
                         }
                         case MM_SIGN_MAXIMUM:
                         {
-                            const float sample  = dsp::sign_max(&src[offset], to_process);
+                            const float sample  = dsp::sign_max(&src[offset], to_process) * gain;
                             if ((sampler->nCount == 0) || (fabsf(sampler->fCurrent) < fabsf(sample)))
                                 sampler->fCurrent   = sample;
                             break;
                         }
                         case MM_ABS_MINIMUM:
                         {
-                            const float sample  = dsp::abs_min(&src[offset], to_process);
+                            const float sample  = dsp::abs_min(&src[offset], to_process) * gain;
                             if ((sampler->nCount == 0) || (sampler->fCurrent > sample))
                                 sampler->fCurrent   = sample;
                             break;
                         }
+                        case MM_PEAK:
+                        {
+                            if (sampler->nCount == 0)
+                                sampler->fCurrent   = src[offset] * gain;
+                            break;
+                        }
                         default:
                         case MM_ABS_MAXIMUM:
                         {
-                            const float sample  = dsp::abs_max(&src[offset], to_process);
+                            const float sample  = dsp::abs_max(&src[offset], to_process) * gain;
                             if ((sampler->nCount == 0) || (sampler->fCurrent < sample))
                                 sampler->fCurrent   = sample;
                             break;
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/util/Sidechain.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/Sidechain.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/util/Sidechain.cpp	2025-03-01 12:43:01.000623128 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/Sidechain.cpp	2025-08-26 18:15:52.717916022 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins
  * Created on: 14 сент. 2016 г.
@@ -140,7 +140,7 @@ namespace lsp
                     pPreEq->reset();
             }
 
-            nFlags              = 0;
+            nFlags             &= ~(SCF_UPDATE | SCF_CLEAR);
         }
 
         void Sidechain::refresh_processing()
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/main/util/SpectralProcessor.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/SpectralProcessor.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/main/util/SpectralProcessor.cpp	2025-03-01 12:43:01.000623128 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/main/util/SpectralProcessor.cpp	2025-08-26 18:15:52.717916022 +0000
@@ -197,6 +197,12 @@ namespace lsp
             }
         }
 
+        void SpectralProcessor::reset()
+        {
+            size_t buf_size = 1 << nRank;
+            dsp::fill_zero(pOutBuf, buf_size*2);
+        }
+
         void SpectralProcessor::dump(IStateDumper *v) const
         {
             v->write("nRank", nRank);
diff -pruN 1.2.21-5/modules/lsp-dsp-units/src/test/utest/3d/scene_load.cpp 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/test/utest/3d/scene_load.cpp
--- 1.2.21-5/modules/lsp-dsp-units/src/test/utest/3d/scene_load.cpp	2025-03-01 12:43:01.000623128 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-dsp-units/src/test/utest/3d/scene_load.cpp	2025-08-26 18:15:52.717916022 +0000
@@ -21,7 +21,7 @@
 
 #include <lsp-plug.in/test-fw/utest.h>
 #include <lsp-plug.in/dsp-units/3d/Scene3D.h>
-#include <lsp-plug.in/io/InStringSequence.h>
+#include <lsp-plug.in/io/InMemoryStream.h>
 
 UTEST_BEGIN("dspu.3d", scene_load)
 
@@ -49,8 +49,8 @@ UTEST_BEGIN("dspu.3d", scene_load)
             "vn 0 0 1\n"
             "f 5//2 6//2 7//2 8//2\n";
 
-        io::InStringSequence is;
-        UTEST_ASSERT(is.wrap(data, "UTF-8") == STATUS_OK);
+        io::InMemoryStream is;
+        is.wrap(data, strlen(data));
         UTEST_ASSERT(s.load(&is, WRAP_CLOSE) == STATUS_OK);
 
         // Validate scene
diff -pruN 1.2.21-5/modules/lsp-lltl-lib/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-lltl-lib/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-lltl-lib/.github/workflows/build.yml	2025-03-01 12:42:54.888659816 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-lltl-lib/.github/workflows/build.yml	2025-08-26 18:15:40.826031437 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
@@ -188,3 +188,25 @@ jobs:
       - name: Run unit tests
         shell: msys2 {0}
         run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test.exe utest --verbose --jobs 1
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config TEST=1 STRICT=1 DEBUG=1 ASAN=1
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
+      - name: Run unit tests
+        run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1
+      - name: Run unit tests with memcheck
+        run: |
+          for test in $(.build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --list --suppress); do \
+            echo "***** MEMCHECK $test *****"; \
+            .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1 --nofork --debug $test; \
+          done
diff -pruN 1.2.21-5/modules/lsp-lltl-lib/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-lltl-lib/CHANGELOG
--- 1.2.21-5/modules/lsp-lltl-lib/CHANGELOG	2025-03-01 12:42:54.888659816 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-lltl-lib/CHANGELOG	2025-08-26 18:15:40.826031437 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Added MacOS CI builds.
+* Updated module versions in dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.24 ===
 * Added definition of MacOS dependencies in build scripts.
 * Updated module versions in dependencies.
diff -pruN 1.2.21-5/modules/lsp-lltl-lib/include/lsp-plug.in/lltl/version.h 1.2.23-0ubuntu1/modules/lsp-lltl-lib/include/lsp-plug.in/lltl/version.h
--- 1.2.21-5/modules/lsp-lltl-lib/include/lsp-plug.in/lltl/version.h	2025-03-01 12:42:54.892659791 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-lltl-lib/include/lsp-plug.in/lltl/version.h	2025-08-26 18:15:40.830031398 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_LLTL_LIB_MAJOR      1
 #define LSP_LLTL_LIB_MINOR      0
-#define LSP_LLTL_LIB_MICRO      24
+#define LSP_LLTL_LIB_MICRO      26
 
 #if defined(LSP_LLTL_LIB_PUBLISHER)
     #define LSP_LLTL_LIB_PUBLIC         LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-lltl-lib/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-lltl-lib/make/tools.mk
--- 1.2.21-5/modules/lsp-lltl-lib/make/tools.mk	2025-03-01 12:42:54.892659791 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-lltl-lib/make/tools.mk	2025-08-26 18:15:40.830031398 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-lltl-lib/modules.mk 1.2.23-0ubuntu1/modules/lsp-lltl-lib/modules.mk
--- 1.2.21-5/modules/lsp-lltl-lib/modules.mk	2025-03-01 12:42:54.892659791 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-lltl-lib/modules.mk	2025-08-26 18:15:40.830031398 +0000
@@ -20,13 +20,13 @@
 
 #------------------------------------------------------------------------------
 # Variables that describe source code dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
diff -pruN 1.2.21-5/modules/lsp-lltl-lib/project.mk 1.2.23-0ubuntu1/modules/lsp-lltl-lib/project.mk
--- 1.2.21-5/modules/lsp-lltl-lib/project.mk	2025-03-01 12:42:54.892659791 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-lltl-lib/project.mk	2025-08-26 18:15:40.830031398 +0000
@@ -23,4 +23,4 @@ ARTIFACT_ID                 = LSP_LLTL_L
 ARTIFACT_NAME               = lsp-lltl-lib
 ARTIFACT_DESC               = Low-Level Template Library for C++
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugin-fw/CHANGELOG
--- 1.2.21-5/modules/lsp-plugin-fw/CHANGELOG	2025-03-01 12:42:57.428644568 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/CHANGELOG	2025-08-26 18:15:48.065961171 +0000
@@ -2,6 +2,29 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.31 ===
+* Added command line option for JACK that allows to specify client name.
+* Implemented preset management in the UI of the plugin.
+* Added Steinberg::Linux::IEventHandler support for better integration with
+  the editorhost from the Steinberg SDK.
+* Changed VST3 chunk format incompatible with previous plugin versions.
+* Added possibility to automatically play samples when navigating file list.
+* Added ctl::Controller class that is a base controller class for UI settings.
+* Implemented ctl:link controller that allows to link values together in the UI.
+* Implemented ctl::AudioEnvelope controller.
+* Implemented pre-compression of OBJ files before adding to built-in resources.
+* Updated module versions in dependencies.
+
+=== 1.0.30 ===
+* Refactored support of activity property.
+* Added possibility to launch standalone plugins in minimized window state.
+* Added support of inactive backround color, brightness and backround brightness.
+* Fixed broken transport (tempo BPM) synchronization for CLAP plugin format.
+* Fixed regression related to creating new global configuration file.
+* Added basic Overlay support.
+* Added MacOS dependencies.
+* Updated module versions in dependencies.
+
 === 1.0.29 ===
 * Added workaround for Renoise host related to latency reporting by VST2 and VST3 plugins
   on state load.
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugin-fw/dependencies.mk
--- 1.2.21-5/modules/lsp-plugin-fw/dependencies.mk	2025-03-01 12:42:57.428644568 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/dependencies.mk	2025-08-26 18:15:48.065961171 +0000
@@ -804,6 +804,167 @@ DEPENDENCIES = \
   $(DEPENDENCIES_VST3_UI)
 
 #------------------------------------------------------------------------------
+# Windows-specific dependencies
+MACOS_DEPENDENCIES_COMMON = \
+  LIBICONV
+
+MACOS_DEPENDENCIES_COMMON_UI = \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBCOCOA \
+  LIBCAIRO 
+
+MACOS_DEPENDENCIES_BIN =
+
+MACOS_DEPENDENCIES_UI_BIN =
+
+MACOS_TEST_DEPENDENCIES = 
+
+MACOS_TEST_DEPENDENCIES_UI = 
+
+# CLAP dependencies
+MACOS_DEPENDENCIES_CLAP = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION
+
+MACOS_DEPENDENCIES_CLAP_UI = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION 
+
+MACOS_DEPENDENCIES_CLAP_BIN =
+
+MACOS_DEPENDENCIES_CLAP_UI_BIN = 
+
+# GStreamer dependencies 
+MACOS_DEPENDENCIES_GST = 
+
+MACOS_DEPENDENCIES_GST_WRAP =
+
+MACOS_DEPENDENCIES_GST_BIN =
+
+# Jack dependencies
+MACOS_DEPENDENCIES_JACK = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION \
+  LIBJACK
+
+MACOS_DEPENDENCIES_JACK_UI = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION \
+  LIBJACK
+
+MACOS_DEPENDENCIES_JACK_WRAP =
+
+MACOS_DEPENDENCIES_JACK_BIN =
+
+MACOS_DEPENDENCIES_JACK_UI_BIN = 
+
+# LADSPA dependencies
+MACOS_DEPENDENCIES_LADSPA = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION
+
+MACOS_DEPENDENCIES_LADSPA_BIN =
+
+# LV2 dependencies
+MACOS_DEPENDENCIES_LV2 = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION \
+  LIBCAIRO
+    
+MACOS_DEPENDENCIES_LV2_UI = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBCOCOA \
+  LIBCAIRO
+
+MACOS_DEPENDENCIES_LV2_BIN = 
+
+MACOS_DEPENDENCIES_LV2_UI_BIN = 
+
+# VST2 dependencies
+MACOS_DEPENDENCIES_VST2 = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION 
+  
+MACOS_DEPENDENCIES_VST2_UI = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION 
+
+MACOS_DEPENDENCIES_VST2_WRAP = 
+
+MACOS_DEPENDENCIES_VST2_BIN =
+
+MACOS_DEPENDENCIES_VST2_UI_BIN = 
+
+# VST3 dependencies
+MACOS_DEPENDENCIES_VST3 = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBCOCOA \
+  LIBCAIRO
+  
+MACOS_DEPENDENCIES_VST3_UI = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBCOCOA \
+  LIBCAIRO
+
+MACOS_DEPENDENCIES_VST3_BIN =
+
+MACOS_DEPENDENCIES_VST3_UIBIN = 
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES_COMMON          += $(MACOS_DEPENDENCIES_COMMON)
+  DEPENDENCIES_COMMON_UI       += $(MACOS_DEPENDENCIES_COMMON_UI)
+  DEPENDENCIES_BIN             += $(MACOS_DEPENDENCIES_BIN)
+  DEPENDENCIES_UI_BIN          += $(MACOS_DEPENDENCIES_UI_BIN)
+  TEST_DEPENDENCIES            += $(MACOS_TEST_DEPENDENCIES)
+  TEST_DEPENDENCIES_UI         += $(MACOS_TEST_DEPENDENCIES_UI)
+
+  DEPENDENCIES_CLAP            += $(MACOS_DEPENDENCIES_CLAP)
+  DEPENDENCIES_CLAP_UI         += $(MACOS_DEPENDENCIES_CLAP_UI)
+  DEPENDENCIES_CLAP_BIN        += $(MACOS_DEPENDENCIES_CLAP_BIN)
+  DEPENDENCIES_CLAP_UI_BIN     += $(MACOS_DEPENDENCIES_CLAP_UI_BIN)
+  
+  DEPENDENCIES_GST             += $(MACOS_DEPENDENCIES_GST)
+  DEPENDENCIES_GST_WRAP        += $(MACOS_DEPENDENCIES_GST_WRAP)
+  DEPENDENCIES_GST_BIN         += $(MACOS_DEPENDENCIES_GST_BIN)
+
+  DEPENDENCIES_JACK            += $(MACOS_DEPENDENCIES_JACK)
+  DEPENDENCIES_JACK_UI         += $(MACOS_DEPENDENCIES_JACK_UI)
+  DEPENDENCIES_JACK_WRAP       += $(MACOS_DEPENDENCIES_JACK_WRAP)
+  DEPENDENCIES_JACK_BIN        += $(MACOS_DEPENDENCIES_JACK_BIN)
+  DEPENDENCIES_JACK_UI_BIN     += $(MACOS_DEPENDENCIES_JACK_UI_BIN)
+  
+  DEPENDENCIES_LADSPA          += $(MACOS_DEPENDENCIES_LADSPA)
+  DEPENDENCIES_LADSPA_BIN      += $(MACOS_DEPENDENCIES_LADSPA_BIN)
+  
+  DEPENDENCIES_LV2             += $(MACOS_DEPENDENCIES_LV2)
+  DEPENDENCIES_LV2_UI          += $(MACOS_DEPENDENCIES_LV2_UI)
+  DEPENDENCIES_LV2_BIN         += $(MACOS_DEPENDENCIES_LV2_BIN)
+  DEPENDENCIES_LV2_UI_BIN      += $(MACOS_DEPENDENCIES_LV2_UI_BIN)
+  
+  DEPENDENCIES_VST2            += $(MACOS_DEPENDENCIES_VST2)
+  DEPENDENCIES_VST2_UI         += $(MACOS_DEPENDENCIES_VST2_UI)
+  DEPENDENCIES_VST2_WRAP       += $(MACOS_DEPENDENCIES_VST2_WRAP)
+  DEPENDENCIES_VST2_BIN        += $(MACOS_DEPENDENCIES_VST2_BIN)
+  DEPENDENCIES_VST2_UI_BIN     += $(MACOS_DEPENDENCIES_VST2_UI_BIN)
+  
+  DEPENDENCIES_VST3            += $(MACOS_DEPENDENCIES_VST3)
+  DEPENDENCIES_VST3_UI         += $(MACOS_DEPENDENCIES_VST3_UI)
+  DEPENDENCIES_VST3_BIN        += $(MACOS_DEPENDENCIES_VST3_BIN)
+  DEPENDENCIES_VST3_UI_BIN     += $(MACOS_DEPENDENCIES_VST3_UI_BIN)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES_PLUGINS) \
@@ -939,5 +1100,37 @@ ALL_DEPENDENCIES = \
   $(WINDOWS_DEPENDENCIES_VST3) \
   $(WINDOWS_DEPENDENCIES_VST3_UI) \
   $(WINDOWS_DEPENDENCIES_VST3_BIN) \
-  $(WINDOWS_DEPENDENCIES_VST3_UI_BIN)
-
+  $(WINDOWS_DEPENDENCIES_VST3_UI_BIN) \
+  \
+  $(MACOS_DEPENDENCIES_COMMON) \
+  $(MACOS_DEPENDENCIES_COMMON_UI) \
+  $(MACOS_DEPENDENCIES_BIN) \
+  $(MACOS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES_UI) \
+  $(MACOS_DEPENDENCIES_CLAP) \
+  $(MACOS_DEPENDENCIES_CLAP_UI) \
+  $(MACOS_DEPENDENCIES_CLAP_BIN) \
+  $(MACOS_DEPENDENCIES_CLAP_UI_BIN) \
+  $(MACOS_DEPENDENCIES_GST) \
+  $(MACOS_DEPENDENCIES_GST_WRAP) \
+  $(MACOS_DEPENDENCIES_GST_BIN) \
+  $(MACOS_DEPENDENCIES_JACK) \
+  $(MACOS_DEPENDENCIES_JACK_UI) \
+  $(MACOS_DEPENDENCIES_JACK_WRAP) \
+  $(MACOS_DEPENDENCIES_JACK_BIN) \
+  $(MACOS_DEPENDENCIES_JACK_UI_BIN) \
+  $(MACOS_DEPENDENCIES_LADSPA) \
+  $(MACOS_DEPENDENCIES_LADSPA_BIN) \
+  $(MACOS_DEPENDENCIES_LV2) \
+  $(MACOS_DEPENDENCIES_LV2_UI) \
+  $(MACOS_DEPENDENCIES_LV2TTL_GEN) \
+  $(MACOS_DEPENDENCIES_LV2_BIN) \
+  $(MACOS_DEPENDENCIES_LV2_UI_BIN) \
+  $(MACOS_DEPENDENCIES_VST2) \
+  $(MACOS_DEPENDENCIES_VST2_UI) \
+  $(MACOS_DEPENDENCIES_VST2_BIN) \
+  $(MACOS_DEPENDENCIES_VST2_UI_BIN) \
+  $(MACOS_DEPENDENCIES_VST3) \
+  $(MACOS_DEPENDENCIES_VST3_UI) \
+  $(MACOS_DEPENDENCIES_VST3_BIN) \
+  $(MACOS_DEPENDENCIES_VST3_UI_BIN)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/core/presets.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/core/presets.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/core/presets.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/core/presets.h	2025-08-26 18:15:48.065961171 +0000
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-pluginfw
+ * Created on: 2 апр. 2024 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CORE_PRESETS_H_
+#define LSP_PLUG_IN_PLUG_FW_CORE_PRESETS_H_
+
+#include <lsp-plug.in/plug-fw/version.h>
+
+#include <lsp-plug.in/lltl/darray.h>
+#include <lsp-plug.in/plug-fw/core/Resources.h>
+
+namespace lsp
+{
+    namespace core
+    {
+        static constexpr size_t PRESET_NAME_BYTES   = 0x200;
+
+        enum preset_flags_t
+        {
+            PRESET_FLAG_NONE        = 0,
+            PRESET_FLAG_USER        = 1 << 0,   // User-defined preset
+            PRESET_FLAG_DIRTY       = 1 << 1
+        };
+
+        typedef struct preset_state_t
+        {
+            uint32_t flags;                     // Current preset flags
+            uint32_t tab;                       // Current preset tab
+            char name[PRESET_NAME_BYTES];       // UTF-8 name of current preset
+        } preset_state_t;
+
+        /**
+         * Scan resources directory for presets
+         * @param presets target collection to store data
+         * @param loader resource loader
+         * @param location directory to look for
+         * @return status of operation
+         */
+        status_t scan_presets(lltl::darray<resource::resource_t> *presets, resource::ILoader *loader, const char *location);
+
+        /**
+         * Sort presets
+         * @param presets presets to sort
+         * @param ascending sort order
+         */
+        void sort_presets(lltl::darray<resource::resource_t> *presets, bool ascending);
+
+        /**
+         * Initialize preset state with default values
+         * @param state preset state
+         */
+        void init_preset_state(preset_state_t *state);
+
+        /**
+         * Copy preset state
+         * @param dst destination state to store value
+         * @param src source state to read value
+         */
+        void copy_preset_state(preset_state_t *dst, const preset_state_t *src);
+
+    } /* namespace core */
+} /* namespace lsp */
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_CORE_PRESETS_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Controller.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Controller.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Controller.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Controller.h	2025-08-26 18:15:48.069961132 +0000
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 24 мая 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_CONTROLLER_H_
+#define LSP_PLUG_IN_PLUG_FW_CTL_CONTROLLER_H_
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_IMPL_
+    #error "Use #include <lsp-plug.in/plug-fw/ctl.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_IMPL_ */
+
+#include <lsp-plug.in/plug-fw/version.h>
+#include <lsp-plug.in/tk/tk.h>
+
+#include <lsp-plug.in/plug-fw/ui.h>
+
+namespace lsp
+{
+    namespace ui
+    {
+        class UIContext;
+    } /* namespace ui */
+
+    namespace ctl
+    {
+        class Expression;
+
+        /**
+         * Controller
+         */
+        class Controller: public ui::IPortListener
+        {
+            public:
+                static const ctl_class_t metadata;
+
+            protected:
+                const ctl_class_t  *pClass;
+                ui::IWrapper       *pWrapper;
+
+            protected:
+                static bool         set_expr(ctl::Expression *expr, const char *param, const char *name, const char *value);
+                static bool         set_value(bool *v, const char *param, const char *name, const char *value);
+                static bool         set_value(ssize_t *v, const char *param, const char *name, const char *value);
+                static bool         set_value(size_t *v, const char *param, const char *name, const char *value);
+                static bool         set_value(float *v, const char *param, const char *name, const char *value);
+                static bool         set_value(LSPString *v, const char *param, const char *name, const char *value);
+
+                bool                bind_port(ui::IPort **port, const char *param, const char *name, const char *value);
+                bool                link_port(ui::IPort **port, const char *id);
+
+            public:
+                explicit Controller(ui::IWrapper *wrapper);
+                Controller(const Controller &) = delete;
+                Controller(Controller &&) = delete;
+                virtual ~Controller();
+
+                Controller & operator = (const Controller &) = delete;
+                Controller & operator = (Controller &&) = delete;
+
+                /** Initialize widget controller
+                 *
+                 */
+                virtual status_t    init();
+
+                /** Destroy widget controller
+                 *
+                 */
+                virtual void        destroy();
+
+            public:
+                /** Get pointer to self as pointer to ctl::Widget class
+                 *
+                 * @return pointer to self
+                 */
+                inline ctl::Controller *self()              { return this;  }
+
+            //---------------------------------------------------------------------------------
+            // Metadata, casting and type information
+            public:
+                /** Get widget controller class
+                 *
+                 * @return actual widget controller class metadata
+                 */
+                inline const ctl_class_t *get_class() const { return pClass; }
+
+                /** Check wheter the widget is instance of some class
+                 *
+                 * @param wclass widget class
+                 * @return true if widget is instance of some class
+                 */
+                bool                instance_of(const ctl_class_t *wclass) const;
+                inline bool         instance_of(const ctl_class_t &wclass) const { return instance_of(&wclass); }
+
+                /** Another way to check if widget is instance of some class
+                 *
+                 * @return true if widget is instance of some class
+                 */
+                template <class Target>
+                inline bool instance_of() const { return instance_of(&Target::metadata); };
+
+                /** Cast widget to another type
+                 *
+                 * @return pointer to widget or NULL if cast failed
+                 */
+                template <class Target>
+                inline Target *cast()            { return instance_of(&Target::metadata) ? static_cast<Target *>(this) : NULL; }
+
+                /** Cast widget to another type
+                 *
+                 * @return pointer to widget or NULL if cast failed
+                 */
+                template <class Target>
+                inline const Target *cast() const { return instance_of(&Target::metadata) ? static_cast<const Target *>(this) : NULL; }
+        };
+
+        template <class Target>
+        inline Target *ctl_cast(ctl::Controller *src)
+        {
+            return ((src != NULL) && (src->instance_of(&Target::metadata))) ? static_cast<Target *>(src) : NULL;
+        }
+
+        template <class Target>
+        inline const Target *ctl_cast(const ctl::Controller *src)
+        {
+            return ((src != NULL) && (src->instance_of(&Target::metadata))) ? static_cast<const Target *>(src) : NULL;
+        }
+
+        template <class Target>
+        inline Target *ctl_ptrcast(void *src)
+        {
+            ctl::Controller *ctl = (src != NULL) ? static_cast<Target *>(src) : NULL;
+            return ((ctl != NULL) && (ctl->instance_of(&Target::metadata))) ? static_cast<Target *>(ctl) : NULL;
+        }
+
+        template <class Target>
+        inline const Target *ctl_ptrcast(const void *src)
+        {
+            const ctl::Controller *ctl = (src != NULL) ? static_cast<const Target *>(src) : NULL;
+            return ((ctl != NULL) && (ctl->instance_of(&Target::metadata))) ? static_cast<const Target *>(ctl) : NULL;
+        }
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_CONTROLLER_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/DOMController.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/DOMController.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/DOMController.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/DOMController.h	2025-08-26 18:15:48.069961132 +0000
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 24 мая 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_DOMCONTROLLER_H_
+#define LSP_PLUG_IN_PLUG_FW_CTL_DOMCONTROLLER_H_
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_IMPL_
+    #error "Use #include <lsp-plug.in/plug-fw/ctl.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_IMPL_ */
+
+#include <lsp-plug.in/plug-fw/version.h>
+#include <lsp-plug.in/tk/tk.h>
+
+#include <lsp-plug.in/plug-fw/ui.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        /**
+         * DOM Controller
+         */
+        class DOMController: public Controller
+        {
+            public:
+                static const ctl_class_t metadata;
+
+            public:
+                explicit DOMController(ui::IWrapper *wrapper);
+                DOMController(const DOMController &) = delete;
+                DOMController(DOMController &&) = delete;
+                virtual ~DOMController() override;
+
+                DOMController & operator = (const DOMController &) = delete;
+                DOMController & operator = (DOMController &&) = delete;
+
+            public:
+                /** Set attribute to controller
+                 *
+                 * @param ctx context
+                 * @param name attribute name
+                 * @param value attribute value
+                 */
+                virtual void        set(ui::UIContext *ctx, const char *name, const char *value);
+
+                /** Begin configuration of controller
+                 *
+                 */
+                virtual void        begin(ui::UIContext *ctx);
+
+                /** End configuration of controller
+                 *
+                 */
+                virtual void        end(ui::UIContext *ctx);
+        };
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_DOMCONTROLLER_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Factory.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Factory.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Factory.h	2025-03-01 12:42:57.428644568 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Factory.h	2025-08-26 18:15:48.069961132 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 11 апр. 2021 г.
@@ -72,7 +72,7 @@ namespace lsp
                  * @param name name of the node
                  * @return status of operation, STATUS_NOT_FOUND if there is no supported node for this factory
                  */
-                virtual status_t    create(Widget **ctl, ui::UIContext *context, const LSPString *name);
+                virtual status_t    create(Controller **ctl, ui::UIContext *context, const LSPString *name);
         };
 
         #define CTL_FACTORY_IMPL_START(fname) \
@@ -83,7 +83,7 @@ namespace lsp
                     virtual ~fname ## Factory() {} \
                 \
                 public: \
-                    virtual status_t create(Widget **ctl, ui::UIContext *context, const LSPString *name) \
+                    virtual status_t create(Controller **ctl, ui::UIContext *context, const LSPString *name) \
                     {
 
         #define CTL_FACTORY_IMPL_END(fname) \
@@ -91,7 +91,8 @@ namespace lsp
             }; \
             \
             static fname ## Factory  fname ## FactoryInstance; /* Variable */
-    }
-}
+
+    } /* namespace lsp */
+} /* namespace ctl */
 
 #endif /* LSP_PLUG_IN_PLUG_FW_CTL_FACTORY_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/PluginWindow.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/PluginWindow.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/PluginWindow.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/PluginWindow.h	2025-08-26 18:15:48.069961132 +0000
@@ -34,10 +34,12 @@ namespace lsp
 {
     namespace ctl
     {
+        class PresetsWindow;
+
         /**
          * The plugin's window controller
          */
-        class PluginWindow: public ctl::Window
+        class PluginWindow: public ctl::Window, public ui::IPresetListener
         {
             public:
                 static const ctl_class_t metadata;
@@ -106,37 +108,21 @@ namespace lsp
                     tk::MenuItem       *wItem;
                 } ui_flag_t;
 
-                class ConfigSink: public tk::TextDataSink
-                {
-                    private:
-                        ui::IWrapper       *pWrapper;
-
-                    public:
-                        explicit ConfigSink(ui::IWrapper *wrapper);
-
-                    public:
-                        void             unbind();
-
-                    public:
-                        virtual status_t receive(const LSPString *text, const char *mime);
-                };
-
             protected:
                 bool                        bResizable;
 
                 ctl::Window                *pUserPaths;                 // User paths controller
+                ctl::PresetsWindow         *pPresetsWindow;             // Presets window
 
                 tk::WidgetContainer        *wContent;                   // The main box containing all widgets
                 tk::Window                 *wGreeting;                  // Greeting message window
                 tk::Window                 *wAbout;                     // About message window
                 tk::Window                 *wUserPaths;                 // User paths configuration
                 tk::Menu                   *wMenu;                      // Menu
+                tk::Menu                   *wPresets;                   // Presets menu
                 tk::Menu                   *wUIScaling;                 // UI Scaling menu
                 tk::Menu                   *wBundleScaling;             // Bundle Scaling menu
                 tk::Menu                   *wFontScaling;               // UI Scaling menu
-                tk::Menu                   *wResetSettings;             // Reset settings menu
-                tk::FileDialog             *wExport;                    // Export settings dialog
-                tk::FileDialog             *wImport;                    // Import settings dialog
                 tk::MenuItem               *wPreferHost;                // Prefer host menu item
                 tk::CheckBox               *wRelPaths;                  // Relative path checkbox
                 tk::MenuItem               *wInvertVScroll;             // Global inversion of mouse vertical scroll
@@ -146,11 +132,8 @@ namespace lsp
 
                 ui::IPort                  *pPVersion;
                 ui::IPort                  *pPBypass;
-                ui::IPort                  *pPath;
-                ui::IPort                  *pFileType;
                 ui::IPort                  *pR3DBackend;
                 ui::IPort                  *pLanguage;
-                ui::IPort                  *pRelPaths;
                 ui::IPort                  *pUIScaling;
                 ui::IPort                  *pUIScalingHost;
                 ui::IPort                  *pUIBundleScaling;
@@ -159,8 +142,6 @@ namespace lsp
                 ui::IPort                  *pInvertVScroll;
                 ui::IPort                  *pInvertGraphDotVScroll;
 
-                ConfigSink                 *pConfigSink;    // Configuration sink
-
                 window_scale_t              sWndScale;
                 enum_menu_t                 sFilterPointThickness;
 
@@ -179,6 +160,8 @@ namespace lsp
                 static status_t slot_greeting_close(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_about_close(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_show_main_menu(tk::Widget *sender, void *ptr, void *data);
+                static status_t slot_show_presets_menu(tk::Widget *sender, void *ptr, void *data);
+                static status_t slot_select_next_preset(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_show_ui_scaling_menu(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_show_bundle_scaling_menu(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_show_font_scaling_menu(tk::Widget *sender, void *ptr, void *data);
@@ -186,21 +169,15 @@ namespace lsp
                 static status_t slot_show_plugin_manual(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_show_ui_manual(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_show_about(tk::Widget *sender, void *ptr, void *data);
+                static status_t slot_show_presets_window(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_export_settings_to_file(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_export_settings_to_clipboard(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_import_settings_from_file(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_import_settings_from_clipboard(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_reset_settings(tk::Widget *sender, void *ptr, void *data);
-                static status_t slot_confirm_reset_settings(tk::Widget *sender, void *ptr, void *data);
 
                 static status_t slot_debug_dump(tk::Widget *sender, void *ptr, void *data);
 
-                static status_t slot_call_export_settings_to_file(tk::Widget *sender, void *ptr, void *data);
-                static status_t slot_call_import_settings_from_file(tk::Widget *sender, void *ptr, void *data);
-
-                static status_t slot_fetch_path(tk::Widget *sender, void *ptr, void *data);
-                static status_t slot_commit_path(tk::Widget *sender, void *ptr, void *data);
-
                 static status_t slot_select_backend(tk::Widget *sender, void *ptr, void *data);
 
                 static status_t slot_select_language(tk::Widget *sender, void *ptr, void *data);
@@ -228,8 +205,6 @@ namespace lsp
                 static status_t slot_scale_mouse_move(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_scale_mouse_up(tk::Widget *sender, void *ptr, void *data);
 
-                static status_t slot_relative_path_changed(tk::Widget *sender, void *ptr, void *data);
-
                 static status_t slot_show_user_paths_dialog(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_user_paths_submit(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_user_paths_close(tk::Widget *sender, void *ptr, void *data);
@@ -245,9 +220,8 @@ namespace lsp
 
             protected:
                 static i18n::IDictionary   *get_default_dict(tk::Widget *src);
-                static tk::FileFilters     *create_config_filters(tk::FileDialog *dlg);
                 static ssize_t              compare_presets(const resource::resource_t *a, const resource::resource_t *b);
-                void                init_enum_menu(enum_menu_t *menu);
+                void                        init_enum_menu(enum_menu_t *menu);
 
                 status_t                    add_scaling_menu_item(
                     lltl::parray<scaling_sel_t> & list,
@@ -258,6 +232,7 @@ namespace lsp
                 void                do_destroy();
                 status_t            set_greeting_timer();
                 status_t            show_greeting_window();
+                status_t            show_presets_window();
                 status_t            show_user_paths_window();
                 status_t            fmt_package_version(LSPString &pkgver);
                 status_t            locate_window();
@@ -270,6 +245,7 @@ namespace lsp
                 tk::Menu           *create_menu();
                 tk::Menu           *create_enum_menu(enum_menu_t *em, tk::Menu *parent, const char *label);
                 status_t            create_dialog_window(ctl::Window **ctl, tk::Window **dst, const char *path);
+                status_t            create_presets_window();
 
                 status_t            init_r3d_support(tk::Menu *menu);
                 status_t            init_i18n_support(tk::Menu *menu);
@@ -279,10 +255,8 @@ namespace lsp
                 status_t            init_visual_schema_support(tk::Menu *menu);
                 status_t            init_ui_behaviour(tk::Menu *menu);
                 status_t            add_ui_flag(tk::Menu *menu, const char *port, const char *key);
-                status_t            init_presets(tk::Menu *menu);
-                status_t            scan_presets(const char *location, lltl::darray<resource::resource_t> *presets);
+                status_t            init_presets(tk::Menu *menu, bool add_submenu);
                 status_t            create_main_menu();
-                status_t            create_reset_settings_menu();
                 void                sync_ui_scaling();
                 bool                has_path_ports();
                 void                sync_language_selection();
@@ -300,6 +274,9 @@ namespace lsp
                 void                commit_bool_param(tk::Boolean *value, const char *port_id);
                 void                bind_trigger(const char *uid, tk::slot_t ev, tk::event_handler_t handler);
                 bool                open_manual_file(const char *fmt...);
+                void                sync_preset_name();
+
+                void                set_preset_button_text(const char *text);
 
                 status_t            init_context(ui::UIContext *ctx);
 
@@ -327,8 +304,13 @@ namespace lsp
                 status_t            show_plugin_manual();
                 status_t            show_ui_manual();
                 void                host_scaling_changed();
+                status_t            post_init();
 
-            public:
+            public: // ui::IPresetListener
+                virtual void        preset_activated(const ui::preset_t *preset) override;
+                virtual void        presets_updated() override;
+
+            public: // ctl::DOMController
                 virtual void        begin(ui::UIContext *ctx) override;
                 virtual void        set(ui::UIContext *ctx, const char *name, const char *value) override;
                 virtual status_t    add(ui::UIContext *ctx, ctl::Widget *child) override;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/PresetsWindow.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/PresetsWindow.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/PresetsWindow.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/PresetsWindow.h	2025-08-26 18:15:48.069961132 +0000
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 31 мар. 2024 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_PRESETSWINDOW_H_
+#define LSP_PLUG_IN_PLUG_FW_CTL_PRESETSWINDOW_H_
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_IMPL_
+    #error "Use #include <lsp-plug.in/plug-fw/ctl.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_IMPL_ */
+
+#include <lsp-plug.in/plug-fw/version.h>
+#include <lsp-plug.in/lltl/parray.h>
+#include <lsp-plug.in/plug-fw/ui.h>
+#include <lsp-plug.in/tk/tk.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        class PluginWindow;
+        class SavePresetDialog;
+
+        /**
+         * The plugin's window controller
+         */
+        class PresetsWindow: public ctl::Window, public ui::IPresetListener
+        {
+            public:
+                static const ctl_class_t metadata;
+
+            protected:
+                enum button_t
+                {
+                    BTN_SAVE,
+                    BTN_FAVOURITE,
+                    BTN_DELETE,
+
+                    BTN_TOTAL
+                };
+
+                typedef struct preset_list_t
+                {
+                    tk::ListBox                    *wList;
+                    lltl::parray<ui::preset_t>      vPresets;
+                    lltl::parray<tk::ListBoxItem>   vItems;
+                } preset_list_t;
+
+                class ConfigSink: public tk::TextDataSink
+                {
+                    private:
+                        ui::IWrapper       *pWrapper;
+
+                    public:
+                        explicit ConfigSink(ui::IWrapper *wrapper);
+
+                    public:
+                        void             unbind();
+
+                    public:
+                        virtual status_t receive(const LSPString *text, const char *mime);
+                };
+
+            protected:
+                PluginWindow           *pPluginWindow;              // Plugin window
+                SavePresetDialog       *pSavePresetDlg;             // Preset saving dialog
+                tk::Widget             *wLastActor;                 // Last actor
+                tk::FileDialog         *wExport;                    // Export settings dialog
+                tk::FileDialog         *wImport;                    // Import settings dialog
+                tk::CheckBox           *wRelPaths;                  // Relative path checkbox
+                tk::Edit               *wPresetPattern;             // Preset pattern
+                tk::Button             *vButtons[BTN_TOTAL];        // Preset management buttons
+                tk::MessageBox         *wWConfirm;                  // Confirmation message box
+                tk::MessageBox         *wRstConfirm;                // Reset confirmation message box
+                tk::MessageBox         *wRemoveConfirm;             // Remove preset confirmation message box
+                tk::TabControl         *wPresetTabs;                // Preset category tabs
+                bool                    bWasVisible;                // Visibility flag
+
+                preset_list_t           vPresetsLists[ui::PRESET_TAB_TOTAL];
+                ConfigSink             *pConfigSink;                // Configuration sink
+
+                const ui::preset_t     *pNewPreset;                 // New preset pointer
+
+                ui::IPort              *pPath;                      // Location of user's export/import directory
+                ui::IPort              *pFileType;                  // Import/export configuration file type selection
+                ui::IPort              *pRelPaths;                  // Relative paths configuration option
+
+
+            protected:
+                // Slots
+                static status_t     slot_window_close(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_preset_save_submit(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_preset_favourite_submit(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_preset_remove_click(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_preset_select(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_preset_dbl_click(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_preset_tab_selected(tk::Widget *sender, void *ptr, void *data);
+
+                static status_t     slot_refresh_preset_list(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_reset_settings(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_import_settings_from_clipboard(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_export_settings_to_clipboard(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_submit_import_settings(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_submit_export_settings(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_create_preset_window_closed(tk::Widget *sender, void *ptr, void *data);
+
+                static status_t     slot_fetch_path(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_commit_path(tk::Widget *sender, void *ptr, void *data);
+
+                static status_t     slot_exec_export_settings_to_file(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_exec_import_settings_from_file(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_relative_path_changed(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_preset_filter_changed(tk::Widget *sender, void *ptr, void *data);
+
+                static status_t     slot_accept_preset_selection(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_reject_preset_selection(tk::Widget *sender, void *ptr, void *data);
+
+                static status_t     slot_accept_reset_state(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_reject_reset_state(tk::Widget *sender, void *ptr, void *data);
+
+                static status_t     slot_accept_remove_preset(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_reject_remove_preset(tk::Widget *sender, void *ptr, void *data);
+
+            protected:
+                static void         destroy_preset_list(preset_list_t *list);
+                static inline bool  need_indication(size_t i);
+
+            protected:
+                tk::FileFilters    *create_config_filters(tk::FileDialog *dlg);
+                void                make_preset_list(preset_list_t *list, const ui::preset_t *presets, size_t count, ui::preset_filter_t filter, bool indicate);
+                void                sync_preset_button_state();
+                void                sync_preset_button_state(const ui::preset_t *preset);
+                void                sync_preset_lists();
+                void                sync_preset_tab();
+                void                do_destroy();
+                void                select_active_preset(const ui::preset_t *preset);
+                bool                has_path_ports();
+                bool                request_change_preset_conrifmation(const ui::preset_t *preset);
+                bool                request_reset_state_confirmation();
+                bool                request_remove_preset_confirmation();
+                const ui::preset_t *current_preset();
+                status_t            create_save_preset_dialog();
+                void                sync_preset_name(tk::ListBoxItem *item, const ui::preset_t *preset, bool indicate);
+
+            public:
+                explicit PresetsWindow(ui::IWrapper *src, tk::Window *widget, PluginWindow *pluginWindow);
+                PresetsWindow(const PresetsWindow &) = delete;
+                PresetsWindow(PresetsWindow &&) = delete;
+                virtual ~PresetsWindow() override;
+
+                PresetsWindow & operator = (const PresetsWindow &) = delete;
+                PresetsWindow & operator = (PresetsWindow &&) = delete;
+
+                virtual status_t    init() override;
+                virtual void        destroy() override;
+
+            public: // ui::IPresetListener
+                virtual void        preset_activated(const ui::preset_t *preset) override;
+                virtual void        preset_deactivated(const ui::preset_t *preset) override;
+                virtual void        presets_updated() override;
+
+            public:
+                status_t            post_init();
+                status_t            show(tk::Widget *actor);
+                status_t            hide();
+                bool                visible() const;
+                status_t            toggle_visibility(tk::Widget *actor);
+                status_t            show_export_settings_dialog();
+                status_t            show_import_settings_dialog();
+                status_t            import_settings_from_clipboard();
+                status_t            export_settings_to_clipboard();
+                status_t            reset_settings();
+                void                select_next_preset(bool forward);
+        };
+
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_PRESETSWINDOW_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Registry.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Registry.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Registry.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Registry.h	2025-08-26 18:15:48.069961132 +0000
@@ -37,30 +37,31 @@ namespace lsp
          */
         class Registry
         {
-            private:
-                Registry & operator = (const Registry &);
-                Registry(const Registry &);
-
             protected:
-                lltl::parray<Widget>    vControllers; // List of registered controllers
+                lltl::parray<Controller>    vControllers; // List of registered controllers
 
             protected:
-                void                    do_destroy();
+                void                        do_destroy();
 
             public:
                 explicit Registry();
+                Registry(const Registry &) = delete;
+                Registry(Registry &&) = delete;
                 virtual ~Registry();
 
-                virtual void            destroy();
+                Registry & operator = (const Registry &) = delete;
+                Registry & operator = (Registry &&) = delete;
+
+                virtual void                destroy();
 
             public:
-                virtual status_t        add(ctl::Widget *w);
+                virtual status_t            add(ctl::Controller *ctl);
 
             public:
-                inline size_t           size() const                { return vControllers.size();       }
-                inline Widget          *get(size_t index)           { return vControllers.get(index);   }
+                inline size_t               size() const                { return vControllers.size();       }
+                inline Controller          *get(size_t index)           { return vControllers.get(index);   }
         };
-    }
-}
+    } /* namespace ctl */
+} /* namespace lsp */
 
 #endif /* LSP_PLUG_IN_PLUG_FW_CTL_IREGISTRY_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/SavePresetDialog.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/SavePresetDialog.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/SavePresetDialog.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/SavePresetDialog.h	2025-08-26 18:15:48.069961132 +0000
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 27 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_SAVEPRESETDIALOG_H_
+#define LSP_PLUG_IN_PLUG_FW_CTL_SAVEPRESETDIALOG_H_
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_IMPL_
+    #error "Use #include <lsp-plug.in/plug-fw/ctl.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_IMPL_ */
+
+#include <lsp-plug.in/plug-fw/version.h>
+#include <lsp-plug.in/lltl/parray.h>
+#include <lsp-plug.in/plug-fw/ui.h>
+#include <lsp-plug.in/tk/tk.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        /**
+         * The dialog for saving preset
+         */
+        class SavePresetDialog: public ctl::Window, public ui::IPresetListener
+        {
+            public:
+                static const ctl_class_t metadata;
+
+            protected:
+                tk::Edit           *wPresetName;            // Preset name
+                tk::MessageBox     *wConfirmation;          // Confirmation meesage box
+                tk::MessageBox     *wNotification;          // Notification message box
+                tk::CheckBox       *wFavourites;            // Add to favourites check box
+                tk::Button         *wSaveButton;            // Save button
+
+            protected:
+                // Slots
+                static status_t     slot_preset_name_change(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_save_button_submit(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_accept_save_preset(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_reject_save_preset(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_cancel_save_preset(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_close_notification(tk::Widget *sender, void *ptr, void *data);
+                static status_t     slot_favourites_click(tk::Widget *sender, void *ptr, void *data);
+
+            protected:
+                void                sync_save_button_state();
+                const ui::preset_t *find_user_preset_by_name(const LSPString *name);
+                bool                request_confirmation(const LSPString *name);
+                void                save_preset(const LSPString *name);
+                bool                show_show_save_error(const LSPString *name, status_t code);
+
+            public:
+                explicit SavePresetDialog(ui::IWrapper *src, tk::Window *widget);
+                SavePresetDialog(const SavePresetDialog &) = delete;
+                SavePresetDialog(SavePresetDialog &&) = delete;
+                virtual ~SavePresetDialog() override;
+
+                SavePresetDialog & operator = (const SavePresetDialog &) = delete;
+                SavePresetDialog & operator = (SavePresetDialog &&) = delete;
+
+                virtual status_t    init() override;
+                virtual void        destroy() override;
+
+            public:
+                status_t            post_init();
+                status_t            show(tk::Widget *actor, const LSPString *name, bool favourite);
+        };
+
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_SAVEPRESETDIALOG_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Widget.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Widget.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Widget.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Widget.h	2025-08-26 18:15:48.069961132 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 10 апр. 2021 г.
@@ -46,7 +46,7 @@ namespace lsp
         /**
          * Basic widget controller
          */
-        class Widget: public ui::IPortListener, public ui::ISchemaListener
+        class Widget: public ctl::DOMController, public ui::ISchemaListener
         {
             public:
                 static const ctl_class_t metadata;
@@ -64,16 +64,18 @@ namespace lsp
                 };
 
             protected:
-                const ctl_class_t  *pClass;
-                ui::IWrapper       *pWrapper;
                 tk::Widget         *wWidget;
 
+                ctl::Boolean        sActivity;
                 ctl::Color          sBgColor;
+                ctl::Color          sInactiveBgColor;
                 ctl::Boolean        sBgInherit;
                 ctl::Padding        sPadding;
                 ctl::Boolean        sVisibility;
                 ctl::Float          sBrightness;
+                ctl::Float          sInactiveBrightness;
                 ctl::Float          sBgBrightness;
+                ctl::Float          sInactiveBgBrightness;
                 ctl::Enum           sPointer;
 
                 PropListener        sProperties;        // Properties listener
@@ -89,25 +91,17 @@ namespace lsp
                 static bool         set_text_layout(tk::TextLayout *l, const char *name, const char *value);
                 static bool         set_text_layout(tk::TextLayout *l, const char *param, const char *name, const char *value);
                 static bool         set_text_fitness(tk::TextFitness *l, const char *param, const char *name, const char *value);
-                static bool         set_expr(ctl::Expression *expr, const char *param, const char *name, const char *value);
                 static bool         set_font(tk::Font *f, const char *param, const char *name, const char *value);
                 static bool         set_size_range(tk::SizeRange *r, const char *param, const char *name, const char *value);
                 static bool         set_param(tk::Boolean *b, const char *param, const char *name, const char *value);
                 static bool         set_param(tk::Integer *i, const char *param, const char *name, const char *value);
                 static bool         set_param(tk::Float *f, const char *param, const char *name, const char *value);
                 static bool         set_param(tk::Enum *en, const char *param, const char *name, const char *value);
-                static bool         set_embedding(tk::Embedding *e, const char *name, const char *value);
                 static bool         set_orientation(tk::Orientation *o, const char *name, const char *value);
-                static bool         set_value(bool *v, const char *param, const char *name, const char *value);
-                static bool         set_value(ssize_t *v, const char *param, const char *name, const char *value);
-                static bool         set_value(size_t *v, const char *param, const char *name, const char *value);
-                static bool         set_value(float *v, const char *param, const char *name, const char *value);
-                static bool         set_value(LSPString *v, const char *param, const char *name, const char *value);
+                static bool         set_embedding(tk::Embedding *e, const char *name, const char *value);
 
             protected:
                 void                do_destroy();
-                bool                bind_port(ui::IPort **port, const char *param, const char *name, const char *value);
-                bool                link_port(ui::IPort **port, const char *id);
 
                 virtual void        property_changed(tk::Property *prop);
 
@@ -115,135 +109,44 @@ namespace lsp
                 explicit Widget(ui::IWrapper *wrapper, tk::Widget *widget);
                 Widget(const Widget &) = delete;
                 Widget(Widget &&) = delete;
-                virtual ~Widget();
+                virtual ~Widget() override;
 
                 Widget &operator = (const Widget &) = delete;
                 Widget &operator = (Widget &&) = delete;
 
-                /** Initialize widget controller
-                 *
-                 */
-                virtual status_t    init();
-
-                /** Destroy widget controller
-                 *
+                /**
+                 * Initialize widget controller
                  */
-                virtual void        destroy();
+                virtual status_t    init() override;
 
-            public:
-                /** Get widget
-                 *
-                 * @return widget
+                /**
+                 * Destroy widget controller
                  */
-                virtual tk::Widget  *widget();
+                virtual void        destroy() override;
 
+            public: // ctl::DOMController
                 /** Set attribute to widget controller
                  *
                  * @param ctx context
                  * @param name attribute name
                  * @param value attribute value
                  */
-                virtual void        set(ui::UIContext *ctx, const char *name, const char *value);
+                virtual void        set(ui::UIContext *ctx, const char *name, const char *value) override;
 
-                /** Begin internal part of controller
-                 *
+            public:
+                /**
+                 * Get widget
+                 * @return widget
                  */
-                virtual void        begin(ui::UIContext *ctx);
+                virtual tk::Widget  *widget();
 
-                /** Add child widget
-                 *
+                /**
+                 * Add child widget
                  * @param child child widget to add
                  */
                 virtual status_t    add(ui::UIContext *ctx, ctl::Widget *child);
-
-                /** End internal part of controller
-                 *
-                 */
-                virtual void        end(ui::UIContext *ctx);
-
-                /** Notify controller about one of port bindings has changed
-                 *
-                 * @param port port triggered change
-                 * @param flags port modification flags @see notify_flags_t
-                 */
-                virtual void        notify(ui::IPort *port, size_t flags);
-
-                /**
-                 * This method is called when the visual schema has been reloaded
-                 */
-                virtual void        reloaded(const tk::StyleSheet *sheet);
-
-            //---------------------------------------------------------------------------------
-            // Metadata, casting and type information
-            public:
-                /** Get widget controller class
-                 *
-                 * @return actual widget controller class metadata
-                 */
-                inline const ctl_class_t *get_class() const { return pClass; }
-
-                /** Check wheter the widget is instance of some class
-                 *
-                 * @param wclass widget class
-                 * @return true if widget is instance of some class
-                 */
-                bool                instance_of(const ctl_class_t *wclass) const;
-                inline bool         instance_of(const ctl_class_t &wclass) const { return instance_of(&wclass); }
-
-                /** Another way to check if widget is instance of some class
-                 *
-                 * @return true if widget is instance of some class
-                 */
-                template <class Target>
-                    inline bool instance_of() const { return instance_of(&Target::metadata); };
-
-                /** Cast widget to another type
-                 *
-                 * @return pointer to widget or NULL if cast failed
-                 */
-                template <class Target>
-                    inline Target *cast()            { return instance_of(&Target::metadata) ? static_cast<Target *>(this) : NULL; }
-
-                /** Cast widget to another type
-                 *
-                 * @return pointer to widget or NULL if cast failed
-                 */
-                template <class Target>
-                    inline const Target *cast() const { return instance_of(&Target::metadata) ? static_cast<const Target *>(this) : NULL; }
-
-                /** Get pointer to self as pointer to ctl::Widget class
-                 *
-                 * @return pointer to self
-                 */
-                inline ctl::Widget *self()              { return this;  }
         };
 
-        template <class Target>
-            inline Target *ctl_cast(ctl::Widget *src)
-            {
-                return ((src != NULL) && (src->instance_of(&Target::metadata))) ? static_cast<Target *>(src) : NULL;
-            }
-
-        template <class Target>
-            inline const Target *ctl_cast(const ctl::Widget *src)
-            {
-                return ((src != NULL) && (src->instance_of(&Target::metadata))) ? static_cast<const Target *>(src) : NULL;
-            }
-
-        template <class Target>
-            inline Target *ctl_ptrcast(void *src)
-            {
-                ctl::Widget *w = (src != NULL) ? static_cast<Target *>(src) : NULL;
-                return ((w != NULL) && (w->instance_of(&Target::metadata))) ? static_cast<Target *>(w) : NULL;
-            }
-
-        template <class Target>
-            inline const Target *ctl_ptrcast(const void *src)
-            {
-                const ctl::Widget *w = (src != NULL) ? static_cast<const Target *>(src) : NULL;
-                return ((w != NULL) && (w->instance_of(&Target::metadata))) ? static_cast<const Target *>(w) : NULL;
-            }
-
     } /* namespace ctl */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Window.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Window.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Window.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/Window.h	2025-08-26 18:15:48.069961132 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 11 июн. 2021 г.
@@ -43,27 +43,27 @@ namespace lsp
                 tk::Registry            sWidgets;
                 ctl::LCString           sTitle;
 
+            protected:
+                tk::handler_id_t        bind_slot(const char *widget_id, tk::slot_t id, tk::event_handler_t handler);
+                tk::handler_id_t        bind_shortcut(tk::Window *wnd, ws::code_t key, size_t mod, tk::event_handler_t handler);
+
             public:
                 explicit Window(ui::IWrapper *src, tk::Window *window);
-                virtual ~Window();
+                virtual ~Window() override;
 
-                virtual status_t        init();
-                virtual void            destroy();
+                virtual status_t        init() override;
+                virtual void            destroy() override;
 
             public:
                 inline ctl::Registry   *controllers()   { return &sControllers; }
                 inline tk::Registry    *widgets()       { return &sWidgets;     }
 
-            public:
-                virtual void            begin(ui::UIContext *ctx);
-
-                virtual void            set(ui::UIContext *ctx, const char *name, const char *value);
-
-                virtual status_t        add(ui::UIContext *ctx, ctl::Widget *child);
-
-                virtual void            end(ui::UIContext *ctx);
-
-                virtual void            reloaded(const tk::StyleSheet *sheet);
+            public: // ctl::DOMController
+                virtual void            begin(ui::UIContext *ctx) override;
+                virtual void            set(ui::UIContext *ctx, const char *name, const char *value) override;
+                virtual status_t        add(ui::UIContext *ctx, ctl::Widget *child) override;
+                virtual void            end(ui::UIContext *ctx) override;
+                virtual void            reloaded(const tk::StyleSheet *sheet) override;
         };
     } /* namespace ctl */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/compound/ComboBox.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/compound/ComboBox.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/compound/ComboBox.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/compound/ComboBox.h	2025-08-26 18:15:48.069961132 +0000
@@ -59,7 +59,6 @@ namespace lsp
                 ctl::Color                  sInactiveBorderColor;
                 ctl::Color                  sInactiveBorderGapColor;
 
-                ctl::Boolean                sActivity;
                 ctl::LCString               sEmptyText;
                 lltl::parray<ListBoxItem>   vItems;             // Custom items
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Align.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Align.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Align.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Align.h	2025-08-26 18:15:48.069961132 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 12 мая 2021 г.
@@ -43,18 +43,23 @@ namespace lsp
                 static const ctl_class_t metadata;
 
             protected:
-                ctl::Expression    sHAlign;
-                ctl::Expression    sVAlign;
-                ctl::Expression    sHScale;
-                ctl::Expression    sVScale;
+                ctl::Expression     sHAlign;
+                ctl::Expression     sVAlign;
+                ctl::Expression     sHScale;
+                ctl::Expression     sVScale;
 
             protected:
                 void                update_alignment();
 
             public:
                 explicit Align(ui::IWrapper *wrapper, tk::Align *widget);
+                Align(const Align &) = delete;
+                Align(Align &&) = delete;
                 virtual ~Align() override;
 
+                Align & operator = (const Align &) = delete;
+                Align & operator = (Align &&) = delete;
+
                 virtual status_t    init() override;
 
             public:
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Overlay.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Overlay.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Overlay.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Overlay.h	2025-08-26 18:15:48.069961132 +0000
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 3 апр. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_CONTAINERS_OVERLAY_H_
+#define LSP_PLUG_IN_PLUG_FW_CTL_CONTAINERS_OVERLAY_H_
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_IMPL_
+    #error "Use #include <lsp-plug.in/plug-fw/ctl.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_IMPL_ */
+
+#include <lsp-plug.in/plug-fw/version.h>
+#include <lsp-plug.in/tk/tk.h>
+
+
+namespace lsp
+{
+    namespace ctl
+    {
+        /**
+         * Overlay controller
+         */
+        class Overlay: public Widget
+        {
+            public:
+                static const ctl_class_t metadata;
+
+            protected:
+                ui::IPort          *pPort;          // Port that controls the visibility of the widget
+                LSPString           sTriggerWID;    // Trigger widget identifier
+                LSPString           sAreaWID;       // Area widget identifier
+                float               fHOrigin;       // Horizontal origin
+                float               fVOrigin;       // Vertial origin
+                float               fHAlign;        // Horizontal alignment
+                float               fVAlign;        // Vertial alignment
+
+                ctl::Float          sTransparency;  // Transparency of the overlay
+                ctl::Integer        sPriority;      // Drawing priority
+                ctl::Boolean        sAutoClose;     // Automatically close flag
+                ctl::Integer        sBorderRadius;  // Border radius
+                ctl::Integer        sBorderSize;    // Border size
+                ctl::Color          sBorderColor;   // Border color
+                ctl::Padding        sIPadding;      // Internal padding
+
+                ctl::Expression     sHOrigin;       // Horizontal relative offset of origin point from left-top position of trigger area
+                ctl::Expression     sVOrigin;       // Vertical relative offset of origin point  from left-top position of trigger area
+                ctl::Expression     sHAlign;        // Horizontal widget alignment relative to the origin point
+                ctl::Expression     sVAlign;        // Vertical widget alignment relative to the origin point
+
+                ctl::Expression     sLayoutHAlign;  // Internal layout horizontal alignment
+                ctl::Expression     sLayoutVAlign;  // Internal layout vertical alignment
+                ctl::Expression     sLayoutHScale;  // Internal layout horizontal scale
+                ctl::Expression     sLayoutVScale;  // Internal layout vertical scale
+
+            protected:
+                static bool         update_float(float & value, ctl::Expression & expr);
+                static bool         calc_position(ws::rectangle_t *rect, tk::Overlay *overlay, void *data);
+                static bool         filter_event(const ws::event_t *ev, tk::Overlay *overlay, void *data);
+
+                static status_t     slot_on_hide(tk::Widget *sender, void *ptr, void *data);
+
+            protected:
+                void                update_layout_alignment();
+                void                update_alignment();
+                void                on_hide_overlay();
+                bool                calc_position(ws::rectangle_t *rect, tk::Overlay *overlay);
+                bool                filter_event(const ws::event_t *ev, tk::Overlay *overlay);
+                bool                get_area(ws::rectangle_t *rect, const LSPString *wid);
+
+            public:
+                explicit Overlay(ui::IWrapper *wrapper, tk::Overlay *widget);
+                Overlay(const Overlay &) = delete;
+                Overlay(Overlay &&) = delete;
+                virtual ~Overlay() override;
+
+                Overlay & operator = (const Overlay &) = delete;
+                Overlay & operator = (Overlay &&) = delete;
+
+                virtual status_t    init() override;
+
+            public:
+                virtual void        set(ui::UIContext *ctx, const char *name, const char *value) override;
+                virtual status_t    add(ui::UIContext *ctx, ctl::Widget *child) override;
+                virtual void        notify(ui::IPort *port, size_t flags) override;
+                virtual void        end(ui::UIContext *ctx) override;
+                virtual void        reloaded(const tk::StyleSheet *sheet) override;
+        };
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_CONTAINERS_OVERLAY_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Tab.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Tab.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Tab.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/containers/Tab.h	2025-08-26 18:15:48.069961132 +0000
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 22 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_CONTAINERS_TAB_H_
+#define LSP_PLUG_IN_PLUG_FW_CTL_CONTAINERS_TAB_H_
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_IMPL_
+    #error "Use #include <lsp-plug.in/plug-fw/ctl.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_IMPL_ */
+
+#include <lsp-plug.in/plug-fw/version.h>
+#include <lsp-plug.in/tk/tk.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        /**
+         * Tab widget controller implementation
+         */
+        class Tab: public Widget
+        {
+            public:
+                static const ctl_class_t metadata;
+
+            protected:
+                ctl::LCString       sText;
+
+            public:
+                explicit Tab(ui::IWrapper *wrapper, tk::Tab *tab);
+                Tab(const Tab &) = delete;
+                Tab(Tab &&) = delete;
+                virtual ~Tab() override;
+
+                Tab & operator = (const Tab &) = delete;
+                Tab & operator = (Tab &&) = delete;
+
+                virtual status_t        init() override;
+
+            public:
+                virtual void            set(ui::UIContext *ctx, const char *name, const char *value) override;
+                virtual status_t        add(ui::UIContext *ctx, ctl::Widget *child) override;
+        };
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_CONTAINERS_TAB_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/graph/Axis.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/graph/Axis.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/graph/Axis.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/graph/Axis.h	2025-08-26 18:15:48.069961132 +0000
@@ -47,13 +47,13 @@ namespace lsp
                 ctl::Float          sMin;
                 ctl::Float          sMax;
                 ctl::Float          sZero;
+                ctl::Boolean        sLogScale;
                 ctl::Expression     sDx;
                 ctl::Expression     sDy;
                 ctl::Expression     sAngle;
                 ctl::Expression     sLength;
                 ctl::Integer        sWidth;
                 ctl::Color          sColor;
-                bool                bLogSet;
 
             protected:
                 static status_t     slot_graph_resize(tk::Widget *sender, void *ptr, void *data);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/headless/PortLink.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/headless/PortLink.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/headless/PortLink.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/headless/PortLink.h	2025-08-26 18:15:48.069961132 +0000
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 25 мая 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_HEADLESS_PORTLINK_H_
+#define LSP_PLUG_IN_PLUG_FW_CTL_HEADLESS_PORTLINK_H_
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_IMPL_
+    #error "Use #include <lsp-plug.in/plug-fw/ctl.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_IMPL_ */
+
+#include <lsp-plug.in/plug-fw/version.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        /**
+         * Port link: defines the group of ports and dependency between ports in a group
+         */
+        class PortLink: public DOMController, public expr::Resolver
+        {
+            public:
+                static const ctl_class_t metadata;
+
+            protected:
+                typedef struct binding_t
+                {
+                    char                   *pId;            // Binding identifier
+                    float                   fOldValue;      // Old value
+                    float                   fNewValue;      // New value
+                    ui::IPort              *pPort;          // Associated port
+                    ctl::Expression         sValue;         // Expression for computing the value
+                } binding_t;
+
+            protected:
+                lltl::parray<binding_t>         vBindings;      // List of port bindings
+                ctl::Expression                 sActivity;      // Activity expression
+                bool                            bEnabled;       // Enabled flag
+                bool                            bChanging;      // Changing mode (avoid recursive calls)
+
+            protected:
+                static void         destroy_binding(binding_t *b);
+
+            protected:
+                binding_t          *get_binding(const char *id);
+
+            public:
+                explicit PortLink(ui::IWrapper *wrapper);
+                PortLink(const PortLink &) = delete;
+                PortLink(PortLink &&) = delete;
+                virtual ~PortLink() override;
+
+                PortLink & operator = (const PortLink &) = delete;
+                PortLink & operator = (PortLink &&) = delete;
+
+            public: // expr::Resolver
+                virtual status_t resolve(expr::value_t *value, const char *name, size_t num_indexes, const ssize_t *indexes) override;
+                virtual status_t resolve(expr::value_t *value, const LSPString *name, size_t num_indexes, const ssize_t *indexes) override;
+
+            public: // ctl::Controller
+                virtual status_t    init() override;
+
+            public: // ctl::DOMController
+                virtual void        set(ui::UIContext *ctx, const char *name, const char *value) override;
+                virtual void        end(ui::UIContext *ctx) override;
+
+            public: // ui::IPortListener
+                virtual void        notify(ui::IPort *port, size_t flags) override;
+        };
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_HEADLESS_PORTLINK_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Bevel.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Bevel.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Bevel.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Bevel.h	2025-08-26 18:15:48.069961132 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 14 июн. 2021 г.
@@ -50,16 +50,20 @@ namespace lsp
 
             public:
                 explicit Bevel(ui::IWrapper *wrapper, tk::Bevel *widget);
+                Bevel(const Bevel &) = delete;
+                Bevel(Bevel &&) = delete;
                 virtual ~Bevel() override;
 
+                Bevel & operator = (const Bevel &) = delete;
+                Bevel & operator = (Bevel &&) = delete;
+
                 virtual status_t    init() override;
 
             public:
                 virtual void        set(ui::UIContext *ctx, const char *name, const char *value) override;
         };
-    }
-}
-
+    } /* namespace ctl */
+} /* namespace lsp */
 
 
 #endif /* LSP_PLUG_IN_PLUG_FW_CTL_SIMPLE_BEVEL_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Button.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Button.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Button.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Button.h	2025-08-26 18:15:48.069961132 +0000
@@ -75,10 +75,10 @@ namespace lsp
                 ctl::Color          sHoleColor;
 
                 ctl::Boolean        sEditable;
-                ctl::Boolean        sActivity;
                 ctl::Boolean        sHover;
                 ctl::Padding        sTextPad;
                 ctl::LCString       sText;
+                ctl::Boolean        sTextClip;
 
             protected:
                 static status_t     slot_change(tk::Widget *sender, void *ptr, void *data);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/CheckBox.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/CheckBox.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/CheckBox.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/CheckBox.h	2025-08-26 18:15:48.069961132 +0000
@@ -48,7 +48,6 @@ namespace lsp
                 ctl::Integer    sCheckRadius;
                 ctl::Integer    sCheckGapSize;
                 ctl::Integer    sCheckMinSize;
-                ctl::Boolean    sActivity;
 
                 ctl::Color      sColor;
                 ctl::Color      sFillColor;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Edit.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Edit.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Edit.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Edit.h	2025-08-26 18:15:48.069961132 +0000
@@ -47,7 +47,6 @@ namespace lsp
                 ssize_t             nInputDelay;
 
                 ctl::LCString       sEmptyText;
-                ctl::Boolean        sActivity;
 
                 ctl::Color          sColor;
                 ctl::Color          sBorderColor;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Fader.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Fader.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Fader.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Fader.h	2025-08-26 18:15:48.069961132 +0000
@@ -66,7 +66,6 @@ namespace lsp
                 ctl::Color          sInactiveScaleBorderColor;
                 ctl::Color          sInactiveBalanceColor;
 
-                ctl::Boolean        sActivity;
                 ctl::Expression     sMin;
                 ctl::Expression     sMax;
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Hyperlink.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Hyperlink.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Hyperlink.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Hyperlink.h	2025-08-26 18:15:48.069961132 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 12 июн. 2021 г.
@@ -42,23 +42,30 @@ namespace lsp
                 static const ctl_class_t metadata;
 
             protected:
-                LCString        sText;
-                LCString        sUrl;
+                LCString            sText;
+                LCString            sUrl;
 
-                ctl::Color      sColor;
-                ctl::Color      sHoverColor;
+                ctl::Color          sColor;
+                ctl::Color          sHoverColor;
+                ctl::Color          sInactiveColor;
+                ctl::Color          sInactiveHoverColor;
 
             public:
                 explicit Hyperlink(ui::IWrapper *wrapper, tk::Hyperlink *widget);
+                Hyperlink(const Hyperlink &) = delete;
+                Hyperlink(Hyperlink &&) = delete;
                 virtual ~Hyperlink() override;
 
+                Hyperlink & operator = (const Hyperlink &) = delete;
+                Hyperlink & operator = (Hyperlink &&) = delete;
+
                 virtual status_t    init() override;
 
             public:
                 virtual void        set(ui::UIContext *ctx, const char *name, const char *value) override;
         };
-    }
-}
+    } /* namespace ctl */
+} /* namespace lsp */
 
 
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Indicator.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Indicator.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Indicator.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Indicator.h	2025-08-26 18:15:48.069961132 +0000
@@ -85,7 +85,6 @@ namespace lsp
                 ctl::Color              sInactiveColor;
                 ctl::Color              sInactiveTextColor;
 
-                ctl::Boolean            sActivity;
                 ctl::Padding            sIPadding;
                 LSPString               sFormat;
                 PropListener            sListener;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Knob.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Knob.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Knob.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Knob.h	2025-08-26 18:15:48.069961132 +0000
@@ -79,7 +79,6 @@ namespace lsp
 
                 ctl::Boolean        sMeterVisible;
                 ctl::Boolean        sEditable;
-                ctl::Boolean        sActivity;
 
                 ctl::Expression     sMin;
                 ctl::Expression     sMax;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Label.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Label.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Label.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Label.h	2025-08-26 18:15:48.069961132 +0000
@@ -78,9 +78,12 @@ namespace lsp
 
                 ctl::Color          sColor;
                 ctl::Color          sHoverColor;
+                ctl::Color          sInactiveColor;
+                ctl::Color          sInactiveHoverColor;
                 ctl::Padding        sIPadding;
 
                 ctl::LCString       sText;
+                ctl::Boolean        sTextClip;
                 ui::IPort          *pPort;
                 ui::IPort          *pLangPort;
                 float               fValue;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Led.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Led.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Led.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/Led.h	2025-08-26 18:15:48.069961132 +0000
@@ -54,8 +54,6 @@ namespace lsp
 
                 ctl::Color          sHoleColor;
 
-                ctl::Boolean        sActivity;
-
                 ctl::Expression     sLight;
                 ui::IPort          *pPort;
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/ProgressBar.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/ProgressBar.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/ProgressBar.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/simple/ProgressBar.h	2025-08-26 18:15:48.069961132 +0000
@@ -60,7 +60,6 @@ namespace lsp
 
                 ctl::LCString       sText;
                 ctl::Boolean        sShowText;
-                ctl::Boolean        sActivity;
                 ctl::Integer        sBorderSize;
                 ctl::Integer        sBorderGapSize;
                 ctl::Integer        sBorderRadius;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioEnvelope.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioEnvelope.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioEnvelope.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioEnvelope.h	2025-08-26 18:15:48.069961132 +0000
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 8 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PLUG_IN_PLUG_FW_CTL_SPECIFIC_AUDIOENVELOPE_H_
+#define PLUG_IN_PLUG_FW_CTL_SPECIFIC_AUDIOENVELOPE_H_
+
+#ifndef LSP_PLUG_IN_PLUG_FW_CTL_IMPL_
+    #error "Use #include <lsp-plug.in/plug-fw/ctl.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_CTL_IMPL_ */
+
+#include <lsp-plug.in/plug-fw/version.h>
+#include <lsp-plug.in/tk/tk.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        /**
+         * Audio envelope widget controller
+         */
+        class AudioEnvelope: public Widget
+        {
+            public:
+                static const ctl_class_t metadata;
+
+            protected:
+                typedef struct point_t
+                {
+                    ui::IPort          *pPort;
+                    tk::Float          *pValue;
+                    float               fOldValue;
+                    float               fNewValue;
+                } point_t;
+
+                enum points_t
+                {
+                    P_ATTACK,
+                    P_HOLD,
+                    P_DECAY,
+                    P_BREAK,
+                    P_SLOPE,
+                    P_SUSTAIN,
+                    P_RELEASE,
+
+                    P_TOTAL
+                };
+
+                enum role_t
+                {
+                    R_TIME,
+                    R_CURVE,
+                    R_LEVEL,
+
+                    R_TOTAL
+                };
+
+            protected:
+                point_t             vPoints[P_TOTAL][R_TOTAL];
+                ui::IPort          *vTypes[P_TOTAL];
+
+                ctl::Boolean        sHoldEnabled;
+                ctl::Boolean        sBreakEnabled;
+                ctl::Boolean        sQuadPoint;
+                ctl::Boolean        sFill;
+                ctl::Boolean        sWire;
+                ctl::Boolean        sEditable;
+                ctl::Integer        sLineWidth;
+                ctl::Color          sLineColor;
+                ctl::Color          sFillColor;
+                ctl::Integer        sPointSize;
+                ctl::Color          sPointColor;
+                ctl::Color          sPointHoverColor;
+                ctl::Color          sColor;
+                ctl::Boolean        sBorderFlat;
+                ctl::Boolean        sGlass;
+                ctl::Color          sGlassColor;
+                ctl::Padding        sIPadding;
+                ctl::Color          sBorderColor;
+
+                bool                bCommitting;
+                bool                bSubmitting;
+
+            protected:
+                static float        get_normalized(ui::IPort *port);
+                static void         set_normalized(ui::IPort *port, float value);
+                static status_t     slot_change(tk::Widget *sender, void *ptr, void *data);
+                static void         curve_function(float *y, const float *x, size_t count, const tk::AudioEnvelope *sender, void *data);
+
+            protected:
+                void                arrange_time_values();
+                void                sync_time_values(point_t *actor);
+                void                commit_values();
+                void                submit_ports();
+                size_t              get_function(points_t point);
+
+            public:
+                explicit AudioEnvelope(ui::IWrapper *wrapper, tk::AudioEnvelope *widget);
+                AudioEnvelope(const AudioEnvelope &) = delete;
+                AudioEnvelope(AudioEnvelope &&) = delete;
+                virtual ~AudioEnvelope() override;
+
+                AudioEnvelope & operator = (const AudioEnvelope &) = delete;
+                AudioEnvelope & operator = (AudioEnvelope &&) = delete;
+
+                virtual status_t    init() override;
+                virtual void        destroy() override;
+
+            public:
+                virtual void        set(ui::UIContext *ctx, const char *name, const char *value) override;
+                virtual void        end(ui::UIContext *ctx) override;
+                virtual void        notify(ui::IPort *port, size_t flags) override;
+        };
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+
+
+#endif /* PLUG_IN_PLUG_FW_CTL_SPECIFIC_AUDIOENVELOPE_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioFolder.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioFolder.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioFolder.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioFolder.h	2025-08-26 18:15:48.069961132 +0000
@@ -44,13 +44,16 @@ namespace lsp
 
             protected:
                 ui::IPort          *pPort;
-                ui::IPort          *pAutoload;
                 tk::ListBoxItem    *wActive;
 
                 ctl::Enum           sHScroll;
                 ctl::Enum           sVScroll;
+                ctl::Expression     sAutoLoad;
+                ctl::Expression     sAutoPlay;
 
                 bool                bActive;        // Navigator is active
+                bool                bAutoLoad;      // Automatically load samples
+                bool                bAutoPlay;      // Automatically play samples
                 ctl::DirController  sDirController; // Directory controller
 
             protected:
@@ -59,6 +62,8 @@ namespace lsp
 
             protected:
                 void                sync_state();
+                void                sync_auto_load();
+                void                sync_auto_play();
                 void                set_activity(bool active);
                 void                update_styles();
                 void                apply_action();
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioNavigator.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioNavigator.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioNavigator.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioNavigator.h	2025-08-26 18:15:48.069961132 +0000
@@ -63,6 +63,7 @@ namespace lsp
 
             protected:
                 void                sync_state();
+                void                sync_auto_play();
                 void                set_activity(bool active);
                 void                update_styles();
                 void                apply_action();
@@ -82,8 +83,10 @@ namespace lsp
                 ctl::Boolean                sHover;
                 ctl::Padding                sTextPad;
                 ctl::LCString               sText;
+                ctl::Expression             sAutoPlay;
 
                 bool                        bActive;        // Navigator is active
+                bool                        bAutoPlay;      // Automatically play sample when navigating
                 action_t                    enAction;       // Actual action
                 ctl::DirController          sDirController; // Directory controller
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioSample.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioSample.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioSample.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/AudioSample.h	2025-08-26 18:15:48.069961132 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 20 июл. 2021 г.
@@ -96,7 +96,6 @@ namespace lsp
                 tk::Menu           *pMenu;
                 DataSink           *pDataSink;
                 DragInSink         *pDragInSink;
-                bool                bFullSample;
                 bool                bLoadPreview;
                 lltl::parray<file_format_t>     vFormats;
                 lltl::parray<tk::MenuItem>      vMenuItems;
@@ -136,6 +135,7 @@ namespace lsp
                 ctl::Expression     sPlayPosition;
                 ctl::Expression     sLength;
                 ctl::Expression     sActualLength;
+                ctl::Expression     sFullSample;
 
                 ctl::Padding        sIPadding;
 
@@ -187,8 +187,9 @@ namespace lsp
                 virtual status_t    init() override;
                 virtual void        destroy() override;
 
-            public:
+            public: // ctl::Widget
                 virtual void        set(ui::UIContext *ctx, const char *name, const char *value) override;
+                virtual status_t    add(ui::UIContext *ctx, ctl::Widget *child) override;
                 virtual void        end(ui::UIContext *ctx) override;
                 virtual void        notify(ui::IPort *port, size_t flags) override;
                 virtual void        reloaded(const tk::StyleSheet *sheet) override;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/FileButton.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/FileButton.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/FileButton.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/FileButton.h	2025-08-26 18:15:48.069961132 +0000
@@ -80,7 +80,6 @@ namespace lsp
                 ctl::Expression     sProgress;
                 ctl::Padding        sTextPadding;
                 ctl::Boolean        sGradient;
-                ctl::Boolean        sActivity;
                 ctl::Integer        sBorderSize;
                 ctl::Integer        sBorderPressedSize;
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/Fraction.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/Fraction.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/Fraction.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/Fraction.h	2025-08-26 18:15:48.069961132 +0000
@@ -55,7 +55,6 @@ namespace lsp
                 ctl::Float          sAngle;
                 ctl::Integer        sTextPad;
                 ctl::Integer        sThick;
-                ctl::Boolean        sActivity;
 
                 ctl::Color          sColor;
                 ctl::Color          sNumColor;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/LedChannel.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/LedChannel.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/LedChannel.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/LedChannel.h	2025-08-26 18:15:48.069961132 +0000
@@ -79,7 +79,6 @@ namespace lsp
                 tk::prop::Color     sPropYellowZoneColor;
                 tk::prop::Color     sPropRedZoneColor;
 
-                ctl::Boolean        sActivity;
                 ctl::Boolean        sReversive;
                 ctl::Boolean        sPeakVisible;
                 ctl::Boolean        sBalanceVisible;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/MidiNote.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/MidiNote.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/MidiNote.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/specific/MidiNote.h	2025-08-26 18:15:48.069961132 +0000
@@ -82,7 +82,6 @@ namespace lsp
                 ctl::Color              sInactiveColor;
                 ctl::Color              sInactiveTextColor;
 
-                ctl::Boolean            sActivity;
                 ctl::Padding            sIPadding;
 
             protected:
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Boolean.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Boolean.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Boolean.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Boolean.h	2025-08-26 18:15:48.073961093 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 26 апр. 2021 г.
@@ -52,7 +52,7 @@ namespace lsp
                 void            apply_changes();
 
             protected:
-                virtual void    on_updated(ui::IPort *port) override;
+                virtual void    on_updated(ui::IPort *port, size_t flags) override;
 
             public:
                 explicit        Boolean();
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Enum.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Enum.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Enum.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Enum.h	2025-08-26 18:15:48.073961093 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 24 авг. 2021 г.
@@ -47,7 +47,7 @@ namespace lsp
                 void            apply_changes();
 
             protected:
-                virtual void    on_updated(ui::IPort *port) override;
+                virtual void    on_updated(ui::IPort *port, size_t flags) override;
 
             public:
                 explicit        Enum();
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Expression.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Expression.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Expression.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Expression.h	2025-08-26 18:15:48.073961093 +0000
@@ -56,7 +56,7 @@ namespace lsp
                 ui::IPortListener          *pListener;
 
             protected:
-                virtual void    on_updated(ui::IPort *port) override;
+                virtual void    on_updated(ui::IPort *port, size_t flags) override;
 
             public:
                 explicit Expression();
@@ -67,7 +67,7 @@ namespace lsp
                 Expression & operator = (const Expression &) = delete;
                 Expression & operator = (Expression &&) = delete;
 
-                void            init(ui::IWrapper *wrapper, ui::IPortListener *listener);
+                void            init(ui::IWrapper *wrapper, ui::IPortListener *listener, expr::Resolver *resolver = NULL);
 
             public:
                 float           evaluate_float(float dfl = 0.0f);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Float.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Float.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Float.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Float.h	2025-08-26 18:15:48.073961093 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 26 апр. 2021 г.
@@ -47,7 +47,7 @@ namespace lsp
                 void            apply_changes();
 
             protected:
-                virtual void    on_updated(ui::IPort *port) override;
+                virtual void    on_updated(ui::IPort *port, size_t flags) override;
 
             public:
                 explicit        Float();
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Integer.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Integer.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Integer.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Integer.h	2025-08-26 18:15:48.073961093 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 26 апр. 2021 г.
@@ -47,7 +47,7 @@ namespace lsp
                 void            apply_changes();
 
             protected:
-                virtual void    on_updated(ui::IPort *port) override;
+                virtual void    on_updated(ui::IPort *port, size_t flags) override;
 
             public:
                 explicit        Integer();
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Property.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Property.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Property.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl/util/Property.h	2025-08-26 18:15:48.073961093 +0000
@@ -65,13 +65,14 @@ namespace lsp
                 expr::Parameters            sParams;
                 PropResolver                sResolver;
                 ui::IWrapper               *pWrapper;
+                expr::Resolver             *pResolver;
                 lltl::parray<ui::IPort>     vDependencies;
 
             protected:
                 void            do_destroy();
                 void            drop_dependencies();
                 status_t        on_resolved(const LSPString *name, ui::IPort *p);
-                virtual void    on_updated(ui::IPort *port);
+                virtual void    on_updated(ui::IPort *port, size_t flags);
 
             protected:
                 status_t        evaluate(expr::value_t *value);
@@ -89,7 +90,7 @@ namespace lsp
                 Property & operator = (const Property &) = delete;
                 Property & operator = (Property &&) = delete;
 
-                void            init(ui::IWrapper *wrapper);
+                void            init(ui::IWrapper *wrapper, expr::Resolver *resolver = NULL);
                 virtual void    destroy();
 
             public:
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl.h	2025-03-01 12:42:57.428644568 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ctl.h	2025-08-26 18:15:48.065961171 +0000
@@ -46,12 +46,18 @@
     #include <lsp-plug.in/plug-fw/ctl/util/IChildSync.h>
     #include <lsp-plug.in/plug-fw/ctl/util/DirController.h>
 
-    // Widget controllers
+    // Controllers
+    #include <lsp-plug.in/plug-fw/ctl/Controller.h>
+    #include <lsp-plug.in/plug-fw/ctl/DOMController.h>
     #include <lsp-plug.in/plug-fw/ctl/Widget.h>
     #include <lsp-plug.in/plug-fw/ctl/Registry.h>
     #include <lsp-plug.in/plug-fw/ctl/Factory.h>
     #include <lsp-plug.in/plug-fw/ctl/Window.h>
+    #include <lsp-plug.in/plug-fw/ctl/PresetsWindow.h>
     #include <lsp-plug.in/plug-fw/ctl/PluginWindow.h>
+    #include <lsp-plug.in/plug-fw/ctl/SavePresetDialog.h>
+
+    #include <lsp-plug.in/plug-fw/ctl/headless/PortLink.h>
 
     #include <lsp-plug.in/plug-fw/ctl/simple/Void.h>
     #include <lsp-plug.in/plug-fw/ctl/simple/Bevel.h>
@@ -73,6 +79,8 @@
     #include <lsp-plug.in/plug-fw/ctl/containers/Grid.h>
     #include <lsp-plug.in/plug-fw/ctl/containers/Cell.h>
     #include <lsp-plug.in/plug-fw/ctl/containers/MultiLabel.h>
+    #include <lsp-plug.in/plug-fw/ctl/containers/Overlay.h>
+    #include <lsp-plug.in/plug-fw/ctl/containers/Tab.h>
     #include <lsp-plug.in/plug-fw/ctl/containers/TabControl.h>
     #include <lsp-plug.in/plug-fw/ctl/containers/TabGroup.h>
     #include <lsp-plug.in/plug-fw/ctl/containers/ListBox.h>
@@ -100,6 +108,7 @@
     #include <lsp-plug.in/plug-fw/ctl/3d/Capture3D.h>
     #include <lsp-plug.in/plug-fw/ctl/3d/Model3D.h>
 
+    #include <lsp-plug.in/plug-fw/ctl/specific/AudioEnvelope.h>
     #include <lsp-plug.in/plug-fw/ctl/specific/AudioFolder.h>
     #include <lsp-plug.in/plug-fw/ctl/specific/AudioNavigator.h>
     #include <lsp-plug.in/plug-fw/ctl/specific/AudioSample.h>
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/meta/ports.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/meta/ports.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/meta/ports.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/meta/ports.h	2025-08-26 18:15:48.073961093 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 24 нояб. 2020 г.
@@ -28,132 +28,154 @@
 
 // Port definitions for metadata
 #define AUDIO_INPUT(id, label) \
-    { id, label, U_NONE, R_AUDIO_IN, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
+    { id, label, NULL, U_NONE, R_AUDIO_IN, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
 #define AUDIO_OUTPUT(id, label) \
-    { id, label, U_NONE, R_AUDIO_OUT, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
+    { id, label, NULL, U_NONE, R_AUDIO_OUT, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
 #define MIDI_IN_CHANNEL(id, label) \
-    { id, label, U_NONE, R_MIDI_IN, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
+    { id, label, NULL, U_NONE, R_MIDI_IN, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
 #define MIDI_OUT_CHANNEL(id, label) \
-    { id, label, U_NONE, R_MIDI_OUT, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
+    { id, label, NULL, U_NONE, R_MIDI_OUT, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
 #define OSC_IN_CHANNEL(id, label) \
-    { id, label, U_NONE, R_OSC_IN, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
+    { id, label, NULL, U_NONE, R_OSC_IN, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
 #define OSC_OUT_CHANNEL(id, label) \
-    { id, label, U_NONE, R_OSC_OUT, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
+    { id, label, NULL, U_NONE, R_OSC_OUT, 0, 0, 0, 0, 0, NULL, NULL, NULL    }
 #define FILE_CHANNEL(id, label) \
-    { id, label, U_ENUM, R_CONTROL, F_INT, 0, 0, 0, 0, file_channels, NULL, NULL }
-#define AMP_GAIN(id, label, dfl, max) \
-    { id, label, U_GAIN_AMP, R_CONTROL, F_LOG | F_UPPER | F_LOWER | F_STEP, 0, max, dfl, GAIN_AMP_S_0_5_DB, NULL, NULL, NULL }
-#define AMP_GAIN1(id, label, dfl)  AMP_GAIN(id, label, dfl, 1.0f)
-#define AMP_GAIN10(id, label, dfl)  AMP_GAIN(id, label, dfl, 10.0f)
-#define AMP_GAIN100(id, label, dfl)  AMP_GAIN(id, label, dfl, 100.0f)
-#define AMP_GAIN1000(id, label, dfl)  AMP_GAIN(id, label, dfl, 1000.0f)
-#define AMP_GAIN_RANGE(id, label, dfl, min, max) \
-    { id, label, U_GAIN_AMP, R_CONTROL, F_LOG | F_UPPER | F_LOWER | F_STEP, min, max, dfl, GAIN_AMP_S_0_5_DB, NULL, NULL, NULL }
+    { id, label, NULL, U_ENUM, R_CONTROL, F_INT, 0, 0, 0, 0, file_channels, NULL, NULL }
+
 #define STATUS(id, label) \
-    { id, label, U_NONE, R_METER, F_INT | F_UPPER | F_LOWER, 0, STATUS_MAX, STATUS_UNSPECIFIED, 0, NULL, NULL, NULL }
+    { id, label, NULL, U_NONE, R_METER, F_INT | F_UPPER | F_LOWER, 0, STATUS_MAX, STATUS_UNSPECIFIED, 0, NULL, NULL, NULL }
 #define MESH(id, label, dim, points) \
-    { id, label, U_NONE, R_MESH, 0, 0.0, 0.0, points, dim, NULL, NULL, NULL }
+    { id, label, NULL, U_NONE, R_MESH, 0, 0.0, 0.0, points, dim, NULL, NULL, NULL }
 #define STREAM(id, label, dim, frames, capacity) \
-    { id, label, U_NONE, R_STREAM, 0, dim, frames, capacity, 0.0f, NULL, NULL, NULL }
+    { id, label, NULL, U_NONE, R_STREAM, 0, dim, frames, capacity, 0.0f, NULL, NULL, NULL }
 #define FBUFFER(id, label, rows, cols) \
-    { id, label, U_NONE, R_FBUFFER, 0, 0.0, 0.0, rows, cols, NULL, NULL, NULL }
+    { id, label, NULL, U_NONE, R_FBUFFER, 0, 0.0, 0.0, rows, cols, NULL, NULL, NULL }
 #define PATH(id, label) \
-    { id, label, U_STRING, R_PATH, 0, 0, 0, 0, 0, NULL, NULL, NULL }
-#define TRIGGER(id, label)  \
-    { id, label, U_BOOL, R_CONTROL, F_TRG, 0, 0, 0.0f, 0, NULL, NULL, NULL }
-#define SWITCH(id, label, dfl)  \
-    { id, label, U_BOOL, R_CONTROL, 0, 0, 0, dfl, 0, NULL, NULL, NULL }
-#define COMBO(id, label, dfl, list) \
-    { id, label, U_ENUM, R_CONTROL, 0, 0, 0, dfl, 0, list, NULL, NULL }
+    { id, label, NULL, U_STRING, R_PATH, 0, 0, 0, 0, 0, NULL, NULL, NULL }
+#define TRIGGER(id, label, alias)  \
+    { id, label, alias, U_BOOL, R_CONTROL, F_TRG, 0, 0, 0.0f, 0, NULL, NULL, NULL }
+#define SWITCH(id, label, alias, dfl)  \
+    { id, label, alias, U_BOOL, R_CONTROL, 0, 0, 0, dfl, 0, NULL, NULL, NULL }
+#define COMBO(id, label, alias, dfl, list) \
+    { id, label, alias, U_ENUM, R_CONTROL, 0, 0, 0, dfl, 0, list, NULL, NULL }
 #define COMBO_START(id, label, dfl, list, min) \
-    { id, label, U_ENUM, R_CONTROL, F_MIN, min, 0, dfl, 0, list, NULL, NULL }
+    { id, label, NULL, U_ENUM, R_CONTROL, F_MIN, min, 0, dfl, 0, list, NULL, NULL }
 #define BLINK(id, label) \
-    { id, label, U_BOOL, R_METER, 0, 0, 0, 0, 0, NULL, NULL, NULL }
-#define KNOB(id, label, units, min, max, dfl, step) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP, \
-        min, max, dfl, step, NULL, NULL, NULL }
-#define CKNOB(id, label, units, min, max, dfl, step) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, \
-        min, max, dfl, step, NULL, NULL, NULL }
-#define CONTROL(id, label, units, limits) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP, \
-        limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP, NULL, NULL, NULL }
-#define CONTROL_DFL(id, label, units, limits, dfl) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP, \
-        limits ## _MIN, limits ## _MAX, dfl, limits ## _STEP, NULL, NULL, NULL }
-#define INT_CONTROL(id, label, units, limits) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_INT, \
-        limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP, NULL, NULL, NULL }
-#define INT_CONTROL_RANGE(id, label, units, min, max, dfl, step) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_INT, \
-        min, max, dfl, step, NULL, NULL, NULL }
+    { id, label, NULL, U_BOOL, R_METER, 0, 0, 0, 0, 0, NULL, NULL, NULL }
+
+#define CONTROL_ALL(id, label, alias, units, min, max, dfl, step) \
+    { id, label, alias, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP, min, max, dfl, step, NULL, NULL, NULL }
+#define CONTROL(id, label, alias, units, limits) \
+    CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP)
+#define CONTROL_DFL(id, label, alias, units, limits, dfl) \
+    CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, dfl, limits ## _STEP)
+
+#define LOW_CONTROL_ALL(id, label, alias, units, min, max, dfl, step) \
+    { id, label, NULL, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_LOWERING, min, max, dfl, step, NULL, NULL, NULL }
+#define LOW_CONTROL(id, label, alias, units, limits) \
+    LOW_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP)
+#define LOW_CONTROL_DFL(id, label, alias, units, limits, dfl) \
+    LOW_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, dfl, limits ## _STEP)
+
+#define INT_CONTROL_ALL(id, label, alias, units, min, max, dfl, step) \
+    { id, label, NULL, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_INT, min, max, dfl, step, NULL, NULL, NULL }
+#define INT_CONTROL(id, label, alias, units, limits) \
+    INT_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP)
+#define INT_CONTROL_DFL(id, label, alias, units, limits, dfl) \
+    INT_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, dfl, limits ## _STEP)
+
+#define LOG_CONTROL_ALL(id, label, alias, units, min, max, dfl, step) \
+    { id, label, alias, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_LOG, min, max, dfl, step, NULL, NULL, NULL }
+#define LOG_CONTROL(id, label, alias, units, limits) \
+    LOG_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP)
+#define LOG_CONTROL_DFL(id, label, alias, units, limits, dfl) \
+    LOG_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, dfl, limits ## _STEP)
+
+#define EXT_LOG_CONTROL_ALL(id, label, alias, units, min, max, dfl, step) \
+    { id, label, alias, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_LOG | F_EXT, min, max, dfl, step, NULL, NULL, NULL }
+#define EXT_LOG_CONTROL(id, label, alias, units, limits) \
+    EXT_LOG_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP)
+#define EXT_LOG_CONTROL_DFL(id, label, alias, units, limits, dfl) \
+    EXT_LOG_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, dfl, limits ## _STEP)
+
+#define CYC_CONTROL_ALL(id, label, alias, units, min, max, dfl, step) \
+    { id, label, alias, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, min, max, dfl, step, NULL, NULL, NULL }
+#define CYC_CONTROL(id, label, alias, units, limits) \
+    CYC_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP)
+#define CYC_CONTROL_DFL(id, label, alias, units, limits, dfl) \
+    CYC_CONTROL_ALL(id, label, alias, units, limits ## _MIN, limits ## _MAX, dfl, limits ## _STEP)
+
+#define AMP_GAIN(id, label, alias, dfl, max) \
+    LOG_CONTROL_ALL(id, label, alias, U_GAIN_AMP, 0.0f, max, dfl, GAIN_AMP_S_0_5_DB)
+#define AMP_GAIN_RANGE(id, label, alias, dfl, min, max) \
+    LOG_CONTROL_ALL(id, label, alias, U_GAIN_AMP, min, max, dfl, GAIN_AMP_S_0_5_DB)
+#define AMP_GAIN1(id, label, alias, dfl)        AMP_GAIN(id, label, alias, dfl, 1.0f)
+#define AMP_GAIN10(id, label, alias, dfl)       AMP_GAIN(id, label, alias, dfl, 10.0f)
+#define AMP_GAIN100(id, label, alias, dfl)      AMP_GAIN(id, label, alias, dfl, 100.0f)
+#define AMP_GAIN1000(id, label, alias, dfl)     AMP_GAIN(id, label, alias, dfl, 1000.0f)
+#define AMP_GAIN10000(id, label, alias, dfl)    AMP_GAIN(id, label, alias, dfl, 10000.0f)
+
+#define PAN_CTL(id, label, alias, dfl) \
+    CONTROL_ALL(id, label, alias, U_PERCENT, -100.0f, 100.0f, dfl, 0.1f)
+#define PERCENTS(id, label, alias, dfl, step) \
+    CONTROL_ALL(id, label, alias, U_PERCENT, 0.0f, 100.0f, dfl, step)
+
 #define HUE_CTL(id, label, dfl) \
-    { id, label, U_NONE, R_CONTROL, F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, (dfl), 0.25f/360.0f, NULL, NULL     }
-#define CYC_CONTROL(id, label, units, limits) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, \
-        limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP, NULL, NULL, NULL }
-#define CYC_CONTROL_DFL(id, label, units, limits, dfl) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, \
-        limits ## _MIN, limits ## _MAX, dfl, limits ## _STEP, NULL, NULL, NULL }
+    { id, label, NULL, U_NONE, R_CONTROL, F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, (dfl), 0.25f/360.0f, NULL, NULL     }
 
 #define UNLIMITED_METER(id, label, units, dfl) \
-    { id, label, units, R_METER, 0, 0.0f, 0.0f, dfl, 0.0f, NULL, NULL, NULL }
+    { id, label, NULL, units, R_METER, 0, 0.0f, 0.0f, dfl, 0.0f, NULL, NULL, NULL }
 #define METER(id, label, units, limits) \
-    { id, label, units, R_METER, F_LOWER | F_UPPER | F_STEP, \
-        limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP, NULL, NULL, NULL }
+    { id, label, NULL, units, R_METER, F_LOWER | F_UPPER | F_STEP, limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP, NULL, NULL, NULL }
 #define METERZ(id, label, units, limits) \
-    { id, label, units, R_METER, F_LOWER | F_UPPER | F_STEP, \
-        limits ## _MIN, limits ## _MAX, 0.0f, 0.0f, NULL, NULL, NULL }
+    { id, label, NULL, units, R_METER, F_LOWER | F_UPPER | F_STEP, limits ## _MIN, limits ## _MAX, 0.0f, 0.0f, NULL, NULL, NULL }
 #define METER_MINMAX(id, label, units, min, max) \
-    { id, label, units, R_METER, F_LOWER | F_UPPER | F_STEP, \
-        min, max, min, 0.0f, NULL, NULL, NULL }
-#define LOG_CONTROL(id, label, units, limits) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_LOG, \
-        limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP, NULL, NULL, NULL }
-#define EXT_LOG_CONTROL(id, label, units, limits) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_LOG | F_EXT, \
-        limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP, NULL, NULL, NULL }
-#define LOG_CONTROL_DFL(id, label, units, limits, dfl) \
-    { id, label, units, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_LOG, \
-        limits ## _MIN, limits ## _MAX, dfl, limits ## _STEP, NULL, NULL, NULL }
+    { id, label, NULL, units, R_METER, F_LOWER | F_UPPER | F_STEP, min, max, min, 0.0f, NULL, NULL, NULL }
+
+#define INT_METER_UNLIMITED(id, label, units, dfl) \
+    { id, label, NULL, units, R_METER, F_INT, 0.0f, 0.0f, dfl, 0.0f, NULL, NULL, NULL }
+#define INT_METER_ALL(id, label, units, min, max, dfl, step) \
+    { id, label, NULL, units, R_METER, F_LOWER | F_UPPER | F_STEP | F_INT, min, max, dfl, step, NULL, NULL, NULL }
+#define INT_METER(id, label, units, limits) \
+    INT_METER_ALL(id, label, units, limits ## _MIN, limits ## _MAX, limits ## _DFL, limits ## _STEP)
+
+#define ENUM_METER(id, label, dfl, list) \
+    { id, label, NULL, U_ENUM, R_METER, F_INT, 0.0f, 0.0f, dfl, 0.0f, list, NULL, NULL }
+
 #define PORT_SET(id, label, keys, ports)  \
-    { id, label, U_ENUM, R_PORT_SET, 0, 0, 0, 0, 0, keys, ports, NULL }
-#define PAN_CTL(id, label, dfl) \
-    { id, label, U_PERCENT, R_CONTROL, F_LOWER | F_UPPER | F_STEP, -100.0f, 100.0f, dfl, 0.1, NULL, NULL, NULL }
-#define PERCENTS(id, label, dfl, step) \
-    { id, label, U_PERCENT, R_CONTROL, F_LOWER | F_UPPER | F_STEP, 0, 100, dfl, step, NULL, NULL, NULL }
+    { id, label, NULL, U_ENUM, R_PORT_SET, 0, 0, 0, 0, 0, keys, ports, NULL }
 #define OUT_PERCENTS(id, label) \
-    { id, label, U_PERCENT, R_METER, F_LOWER | F_UPPER, 0, 100, 0, 0, NULL, NULL }
+    { id, label, NULL, U_PERCENT, R_METER, F_LOWER | F_UPPER, 0, 100, 0, 0, NULL, NULL }
 #define METER_GAIN(id, label, max) \
-    { id, label, U_GAIN_AMP, R_METER, F_LOG | F_UPPER | F_LOWER | F_PEAK, 0, max, 0.0f, 0, NULL, NULL, NULL }
+    { id, label, NULL, U_GAIN_AMP, R_METER, F_LOG | F_UPPER | F_LOWER | F_PEAK, 0, max, 0.0f, 0, NULL, NULL, NULL }
 #define METER_GAIN_DFL(id, label, max, dfl) \
-    { id, label, U_GAIN_AMP, R_METER, F_LOG | F_UPPER | F_LOWER | F_PEAK, 0, max, dfl, 0, NULL, NULL, NULL }
+    { id, label, NULL, U_GAIN_AMP, R_METER, F_LOG | F_UPPER | F_LOWER | F_PEAK, 0, max, dfl, 0, NULL, NULL, NULL }
 #define METER_OUT_GAIN(id, label, max) \
-    { id, label, U_GAIN_AMP, R_METER, F_LOG | F_UPPER | F_LOWER, 0, max, 0.0f, 0, NULL, NULL, NULL }
+    { id, label, NULL, U_GAIN_AMP, R_METER, F_LOG | F_UPPER | F_LOWER, 0, max, 0.0f, 0, NULL, NULL, NULL }
 #define LUFS_METER(id, label, max) \
-    { id, label, U_LUFS, R_METER, F_UPPER | F_LOWER, -72.0f, max, -72.0f, 0, NULL, NULL, NULL }
-#define METER_GAIN10(id, label)  METER_GAIN(id, label, 10.0f)
-#define METER_GAIN20(id, label)  METER_GAIN(id, label, 20.0f)
-#define METER_PERCENT(id, label)  { id, label, U_PERCENT, R_METER, F_UPPER | F_LOWER, 0.0f, 100.0f, 0.0f, 0.1f, NULL, NULL, NULL }
-
-#define STRING(id, label, length)               { id, label, U_NONE, R_STRING, F_LOWER | F_UPPER, 0, length, 0, 0, NULL, NULL, "" }
-#define STRING_DFL(id, label, length, text)     { id, label, U_NONE, R_STRING, F_LOWER | F_UPPER, 0, length, 0, 0, NULL, NULL, text }
-#define OPT_STRING(id, label, length)           { id, label, U_NONE, R_STRING, F_LOWER | F_UPPER | F_OPTIONAL, 0, length, 0, 0, NULL, NULL, "" }
-#define OPT_STRING_DFL(id, label, length, text) { id, label, U_NONE, R_STRING, F_LOWER | F_UPPER | F_OPTIONAL, 0, length, 0, 0, NULL, NULL, text }
-
-#define SEND_NAME(id, label)                    { id, label, U_NONE, R_SEND_NAME, F_LOWER | F_UPPER, 0, MAX_SHM_SEGMENT_NAME_BYTES, 0, 0, NULL, NULL, "" }
-#define OPT_SEND_NAME(id, label)                { id, label, U_NONE, R_SEND_NAME, F_LOWER | F_UPPER | F_OPTIONAL, 0, MAX_SHM_SEGMENT_NAME_BYTES, 0, 0, NULL, NULL, "" }
-#define RETURN_NAME(id, label)                  { id, label, U_NONE, R_RETURN_NAME, F_LOWER | F_UPPER, 0, MAX_SHM_SEGMENT_NAME_BYTES, 0, 0, NULL, NULL, "" }
-#define OPT_RETURN_NAME(id, label)              { id, label, U_NONE, R_RETURN_NAME, F_LOWER | F_UPPER | F_OPTIONAL, 0, MAX_SHM_SEGMENT_NAME_BYTES, 0, 0, NULL, NULL, "" }
+    { id, label, NULL, U_LUFS, R_METER, F_UPPER | F_LOWER, -72.0f, max, -72.0f, 0, NULL, NULL, NULL }
+#define METER_GAIN10(id, label)                 METER_GAIN(id, label, 10.0f)
+#define METER_GAIN20(id, label)                 METER_GAIN(id, label, 20.0f)
+#define METER_PERCENT(id, label)                { id, label, NULL, U_PERCENT, R_METER, F_UPPER | F_LOWER, 0.0f, 100.0f, 0.0f, 0.1f, NULL, NULL, NULL }
+
+#define STRING(id, label, length)               { id, label, NULL, U_NONE, R_STRING, F_LOWER | F_UPPER, 0, length, 0, 0, NULL, NULL, "" }
+#define STRING_DFL(id, label, length, text)     { id, label, NULL, U_NONE, R_STRING, F_LOWER | F_UPPER, 0, length, 0, 0, NULL, NULL, text }
+#define OPT_STRING(id, label, length)           { id, label, NULL, U_NONE, R_STRING, F_LOWER | F_UPPER | F_OPTIONAL, 0, length, 0, 0, NULL, NULL, "" }
+#define OPT_STRING_DFL(id, label, length, text) { id, label, NULL, U_NONE, R_STRING, F_LOWER | F_UPPER | F_OPTIONAL, 0, length, 0, 0, NULL, NULL, text }
+
+#define SEND_NAME(id, label)                    { id, label, NULL, U_NONE, R_SEND_NAME, F_LOWER | F_UPPER, 0, MAX_SHM_SEGMENT_NAME_BYTES, 0, 0, NULL, NULL, "" }
+#define OPT_SEND_NAME(id, label)                { id, label, NULL, U_NONE, R_SEND_NAME, F_LOWER | F_UPPER | F_OPTIONAL, 0, MAX_SHM_SEGMENT_NAME_BYTES, 0, 0, NULL, NULL, "" }
+#define RETURN_NAME(id, label)                  { id, label, NULL, U_NONE, R_RETURN_NAME, F_LOWER | F_UPPER, 0, MAX_SHM_SEGMENT_NAME_BYTES, 0, 0, NULL, NULL, "" }
+#define OPT_RETURN_NAME(id, label)              { id, label, NULL, U_NONE, R_RETURN_NAME, F_LOWER | F_UPPER | F_OPTIONAL, 0, MAX_SHM_SEGMENT_NAME_BYTES, 0, 0, NULL, NULL, "" }
 
 #define AUDIO_SEND(id, label, index, group) \
-    { id, label, U_NONE, R_AUDIO_SEND, 0, 0, 0, index, 0, NULL, NULL, group             }
+    { id, label, NULL, U_NONE, R_AUDIO_SEND, 0, 0, 0, index, 0, NULL, NULL, group             }
 #define OPT_AUDIO_SEND(id, label, index, group) \
-    { id, label, U_NONE, R_AUDIO_SEND, F_OPTIONAL, 0, 0, index, 0, NULL, NULL, group    }
+    { id, label, NULL, U_NONE, R_AUDIO_SEND, F_OPTIONAL, 0, 0, index, 0, NULL, NULL, group    }
 #define AUDIO_RETURN(id, label, index, group) \
-    { id, label, U_NONE, R_AUDIO_RETURN, 0, 0, 0, index, 0, NULL, NULL, group           }
+    { id, label, NULL, U_NONE, R_AUDIO_RETURN, 0, 0, 0, index, 0, NULL, NULL, group           }
 #define OPT_AUDIO_RETURN(id, label, index, group) \
-    { id, label, U_NONE, R_AUDIO_RETURN, F_OPTIONAL, 0, 0, index, 0, NULL, NULL, group  }
+    { id, label, NULL, U_NONE, R_AUDIO_RETURN, F_OPTIONAL, 0, 0, index, 0, NULL, NULL, group  }
 
 #define SEND_MONO(id, channel, comment) \
     SEND_NAME(id, comment), \
@@ -188,7 +210,7 @@
     OPT_AUDIO_RETURN(channel "r", comment " input Right", 1, id)
 
 #define PORTS_END   \
-    { NULL, NULL }
+    { NULL, NULL, NULL }
 
 // Reduced ports
 #define AUDIO_INPUT_MONO    AUDIO_INPUT(PORT_NAME_INPUT, "Input")
@@ -219,22 +241,22 @@
 #define OSC_INPUT           OSC_IN_CHANNEL(PORT_NAME_OSC_INPUT, "OSC input")
 #define OSC_OUTPUT          OSC_OUT_CHANNEL(PORT_NAME_OSC_OUTPUT, "OSC output")
 
-#define IN_GAIN             AMP_GAIN("g_in", "Input gain", GAIN_AMP_0_DB, GAIN_AMP_P_60_DB)
-#define OUT_GAIN            AMP_GAIN("g_out", "Output gain", GAIN_AMP_0_DB, GAIN_AMP_P_60_DB)
+#define IN_GAIN             AMP_GAIN("g_in", "Input gain", "Input gain", GAIN_AMP_0_DB, GAIN_AMP_P_60_DB)
+#define OUT_GAIN            AMP_GAIN("g_out", "Output gain", "Output gain", GAIN_AMP_0_DB, GAIN_AMP_P_60_DB)
 
-#define DRY_GAIN(g)         AMP_GAIN10("dry", "Dry amount", g)
-#define DRY_GAIN_L(g)       AMP_GAIN10("dry_l", "Dry amount L", g)
-#define DRY_GAIN_R(g)       AMP_GAIN10("dry_r", "Dry amount R", g)
-
-#define WET_GAIN(g)         AMP_GAIN10("wet", "Wet amount", g)
-#define WET_GAIN_L(g)       AMP_GAIN10("wet_l", "Wet amount L", g)
-#define WET_GAIN_R(g)       AMP_GAIN10("wet_r", "Wet amount R", g)
-
-#define DRYWET(perc)        PERCENTS("drywet", "Dry/Wet balance", perc, 0.1f)
-#define DRYWET_L(perc)      PERCENTS("dwmix_l", "Dry/Wet balance Left", perc, 0.1f)
-#define DRYWET_R(perc)      PERCENTS("dwmix_r", "Dry/Wet balance Right", perc, 0.1f)
+#define DRY_GAIN(g)         AMP_GAIN10("dry", "Dry amount", "Dry amount", g)
+#define DRY_GAIN_L(g)       AMP_GAIN10("dry_l", "Dry amount Left", "Dry amount L", g)
+#define DRY_GAIN_R(g)       AMP_GAIN10("dry_r", "Dry amount Right", "Dry amount R", g)
+
+#define WET_GAIN(g)         AMP_GAIN10("wet", "Wet amount", "Wet amount", g)
+#define WET_GAIN_L(g)       AMP_GAIN10("wet_l", "Wet amount Left", "Wet amount L", g)
+#define WET_GAIN_R(g)       AMP_GAIN10("wet_r", "Wet amount Right", "Wet amount R", g)
+
+#define DRYWET(perc)        PERCENTS("drywet", "Dry/Wet balance", "Dry/Wet", perc, 0.1f)
+#define DRYWET_L(perc)      PERCENTS("dwmix_l", "Dry/Wet balance Left", "Dry/Wet L", perc, 0.1f)
+#define DRYWET_R(perc)      PERCENTS("dwmix_r", "Dry/Wet balance Right", "Dry/Wet R", perc, 0.1f)
 
-#define BYPASS              { PORT_NAME_BYPASS, "Bypass", U_BOOL, R_BYPASS, F_UPPER | F_LOWER, 0, 1, 0, 0, NULL, NULL, NULL }
+#define BYPASS              { PORT_NAME_BYPASS, "Bypass", NULL, U_BOOL, R_BYPASS, F_UPPER | F_LOWER, 0, 1, 0, 0, NULL, NULL, NULL }
 
 
 // Port configurations
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/meta/types.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/meta/types.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/meta/types.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/meta/types.h	2025-08-26 18:15:48.073961093 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins
  * Created on: 28 сент. 2015 г.
@@ -375,6 +375,7 @@ namespace lsp
         {
             const char             *id;             // Control ID
             const char             *name;           // Control name
+            const char             *short_name;     // Short name of the port
             unit_t                  unit;           // Units
             role_t                  role;           // Role
             int                     flags;          // Flags
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/plug/data.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/plug/data.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/plug/data.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/plug/data.h	2025-08-26 18:15:48.073961093 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 24 нояб. 2020 г.
@@ -57,37 +57,50 @@ namespace lsp
         // Mesh port structure
         typedef struct mesh_t
         {
-            volatile mesh_state_t   nState;     // Actual state of the mesh
+            uint32_t                nState;     // Actual state of the mesh
             size_t                  nBuffers;   // Overall number of buffers
             size_t                  nItems;     // Number of items per each buffer
             float                  *pvData[];   // Array of pointers to buffer data
 
-            inline bool isEmpty() const         { return nState == M_EMPTY; };
-            inline bool containsData() const    { return nState == M_DATA; };
-            inline bool isWaiting() const       { return nState == M_WAIT;  };
+            inline void init(float *ptr, size_t buffers, size_t length, uint32_t state = M_EMPTY)
+            {
+                atomic_store(&nState, state);
+                nBuffers      = 0;
+                nItems        = 0;
+
+                for (size_t i=0; i<buffers; ++i)
+                {
+                    pvData[i]           = reinterpret_cast<float *>(ptr);
+                    ptr                += length;
+                }
+            }
+
+            inline bool isEmpty() const         { return atomic_load(&nState) == M_EMPTY;   };
+            inline bool containsData() const    { return atomic_load(&nState) == M_DATA;    };
+            inline bool isWaiting() const       { return atomic_load(&nState) == M_WAIT;    };
 
             inline void data(size_t bufs, size_t items)
             {
                 nBuffers    = bufs;
                 nItems      = items;
-                nState      = M_DATA; // This should be the last operation
+                atomic_store(&nState, M_DATA);  // This should be the last operation
             }
 
             inline void cleanup()
             {
                 nBuffers    = 0;
                 nItems      = 0;
-                nState      = M_EMPTY; // This should be the last operation
+                atomic_store(&nState, M_EMPTY); // This should be the last operation
             }
 
-            inline void markEmpty()
+            inline void mark_empty()
             {
-                nState      = M_EMPTY; // This should be the last operation
+                atomic_store(&nState, M_EMPTY); // This should be the last operation
             }
 
-            inline void setWaiting()
+            inline void set_waiting()
             {
-                nState      = M_WAIT; // This should be the last operation
+                atomic_store(&nState, M_WAIT); // This should be the last operation
             }
         } mesh_t;
 
@@ -103,7 +116,7 @@ namespace lsp
             protected:
                 typedef struct frame_t
                 {
-                    volatile uint32_t   id;         // Unique frame identifier
+                    uint32_t            id;         // Unique frame identifier
                     size_t              head;       // Head of the frame
                     size_t              tail;       // The tail of frame
                     size_t              size;       // The size of the frame
@@ -116,7 +129,7 @@ namespace lsp
                 size_t                  nBufCap;    // Buffer capacity
                 size_t                  nFrameCap;  // Capacity in frames
 
-                volatile uint32_t       nFrameId;   // Current frame identifier
+                uint32_t                nFrameId;   // Current frame identifier
 
                 frame_t                *vFrames;    // List of frames
                 float                 **vChannels;  // Channel data
@@ -182,7 +195,7 @@ namespace lsp
                  * @return identifier of head frame
                  */
 
-                inline uint32_t         frame_id() const        { return nFrameId;      }
+                inline uint32_t         frame_id() const        { return atomic_load(&nFrameId);    }
                 /**
                  * Begin write of frame data
                  * @param size the required size of frame
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IPresetListener.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IPresetListener.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IPresetListener.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IPresetListener.h	2025-08-26 18:15:48.073961093 +0000
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 30 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_UI_IPRESETLISTENER_H_
+#define LSP_PLUG_IN_PLUG_FW_UI_IPRESETLISTENER_H_
+
+#include <lsp-plug.in/plug-fw/version.h>
+
+#ifndef LSP_PLUG_IN_PLUG_FW_UI_IMPL_H_
+    #error "Use #include <lsp-plug.in/plug-fw/ui/ui.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_UI_IMPL_H_ */
+
+#include <lsp-plug.in/plug-fw/ui/presets.h>
+
+namespace lsp
+{
+    namespace ui
+    {
+        /**
+         * Callback interface for handling changes of presets
+         */
+        class IPresetListener
+        {
+            public:
+                IPresetListener();
+                IPresetListener(const IPresetListener &) = delete;
+                IPresetListener(IPresetListener &&) = delete;
+                virtual ~IPresetListener();
+
+                IPresetListener & operator = (const IPresetListener &) = delete;
+                IPresetListener & operator = (IPresetListener &&) = delete;
+
+            public:
+                /**
+                 * Handle event when preset has been deactivated
+                 * @param preset deactivated preset
+                 */
+                virtual void    preset_deactivated(const preset_t *preset);
+
+                /**
+                 * Handle event when preset has been activated
+                 * @param preset activated preset
+                 */
+                virtual void    preset_activated(const preset_t *preset);
+
+                /**
+                 * Handle event when the whole list of presets has been updated
+                 */
+                virtual void    presets_updated();
+        };
+
+    } /* namespace ui */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_UI_IPRESETLISTENER_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IPresetManager.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IPresetManager.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IPresetManager.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IPresetManager.h	2025-08-26 18:15:48.073961093 +0000
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 30 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_UI_IPRESETMANAGER_H_
+#define LSP_PLUG_IN_PLUG_FW_UI_IPRESETMANAGER_H_
+
+#include <lsp-plug.in/plug-fw/version.h>
+
+#ifndef LSP_PLUG_IN_PLUG_FW_UI_IMPL_H_
+    #error "Use #include <lsp-plug.in/plug-fw/ui/ui.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_UI_IMPL_H_ */
+
+#include <lsp-plug.in/runtime/LSPString.h>
+
+namespace lsp
+{
+    namespace ui
+    {
+        /**
+         * Interface for managing presets
+         */
+        class IPresetManager
+        {
+            public:
+                IPresetManager();
+                IPresetManager(const IPresetManager &) = delete;
+                IPresetManager(IPresetManager &&) = delete;
+                virtual ~IPresetManager();
+
+                IPresetManager & operator = (const IPresetManager &) = delete;
+                IPresetManager & operator = (IPresetManager &&) = delete;
+
+            public:
+                /**
+                 * Mark active preset being dirty (changed)
+                 */
+                virtual void mark_active_preset_dirty();
+        };
+
+    } /* namespace ui */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_UI_IPRESETMANAGER_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IWrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IWrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IWrapper.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/IWrapper.h	2025-08-26 18:15:48.073961093 +0000
@@ -39,11 +39,15 @@
 
 #include <lsp-plug.in/plug-fw/core/KVTStorage.h>
 #include <lsp-plug.in/plug-fw/core/ShmState.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
 #include <lsp-plug.in/plug-fw/ui/IPort.h>
 #include <lsp-plug.in/plug-fw/ui/Module.h>
 #include <lsp-plug.in/plug-fw/ui/SwitchedPort.h>
 #include <lsp-plug.in/plug-fw/ui/ValuePort.h>
 #include <lsp-plug.in/plug-fw/ui/IKVTListener.h>
+#include <lsp-plug.in/plug-fw/ui/IPresetManager.h>
+#include <lsp-plug.in/plug-fw/ui/IPresetListener.h>
+#include <lsp-plug.in/plug-fw/ui/presets.h>
 #include <lsp-plug.in/fmt/config/PullParser.h>
 #include <lsp-plug.in/fmt/config/Serializer.h>
 
@@ -71,7 +75,7 @@ namespace lsp
         /**
          * UI wrapper
          */
-        class IWrapper
+        class IWrapper: public IPresetManager
         {
             private:
                 friend class ControlPort;
@@ -82,9 +86,12 @@ namespace lsp
             protected:
                 enum flags_t
                 {
-                    F_QUIT          = 1 << 0,       // Quit main loop flag
-                    F_CONFIG_DIRTY  = 1 << 1,       // The configuration needs to be saved
-                    F_CONFIG_LOCK   = 1 << 2,       // The configuration file is locked for update
+                    F_QUIT              = 1 << 0,       // Quit main loop flag
+                    F_CONFIG_DIRTY      = 1 << 1,       // The configuration needs to be saved
+                    F_CONFIG_LOCK       = 1 << 2,       // The configuration file is locked for update
+                    F_PRESET_SYNC       = 1 << 3,       // New preset has been selected and we need to synchronize state
+                    F_PRESET_DIRTY      = 1 << 4,       // Active preset is dirty
+                    F_FAVOURITES_DIRTY  = 1 << 5,       // List of favourites had been updated
                 };
 
             protected:
@@ -96,6 +103,8 @@ namespace lsp
                 size_t                          nFlags;             // Flags
                 wssize_t                        nPlayPosition;      // Playback position of the current file preview
                 wssize_t                        nPlayLength;        // Overall playback file length in samples
+                ssize_t                         nActivePreset;      // Active preset
+                preset_tab_t                    enPresetTab;        // Active preset tab
                 expr::Variables                 sGlobalVars;        // Global variables
                 plug::position_t                sPosition;          // Melodic position
 
@@ -110,6 +119,8 @@ namespace lsp
                 lltl::parray<IKVTListener>      vKvtListeners;      // KVT listeners
                 lltl::ptrset<ISchemaListener>   vSchemaListeners;   // Schema change listeners
                 lltl::parray<IPlayListener>     vPlayListeners;     // List of playback listeners
+                lltl::parray<IPresetListener>   vPresetListeners;   // List of preset listeners
+                lltl::darray<preset_t>          vPresets;           // List of available presets
 
             protected:
                 static ssize_t  compare_ports(const IPort *a, const IPort *b);
@@ -135,6 +146,7 @@ namespace lsp
 
                 status_t        save_global_config(io::IOutSequence *os, lltl::pphash<LSPString, config::param_t> *parameters);
                 status_t        read_parameters(const io::Path *file, lltl::pphash<LSPString, config::param_t> *params);
+                status_t        get_user_config_path(io::Path *path);
                 static void     drop_parameters(lltl::pphash<LSPString, config::param_t> *params);
                 void            get_bundle_version_key(LSPString *key);
                 void            get_bundle_scaling_key(LSPString *key);
@@ -146,10 +158,29 @@ namespace lsp
             protected:
                 static bool     set_port_value(ui::IPort *port, const config::param_t *param, size_t flags, const io::Path *base);
                 void            position_updated(const plug::position_t *pos);
+                static status_t allocate_temp_file(io::Path *dst, const io::Path *src);
 
             protected:
                 virtual void    visual_schema_reloaded(const tk::StyleSheet *sheet);
 
+            protected:
+                static preset_t *add_preset(lltl::darray<preset_t> *list);
+                static void     destroy_presets(lltl::darray<preset_t> *list);
+
+            protected:
+                status_t        get_user_presets_path(io::Path *path);
+                status_t        get_plugin_presets_path(io::Path *path);
+                void            scan_factory_presets(lltl::darray<preset_t> *list);
+                void            scan_user_presets(lltl::darray<preset_t> *list);
+                void            scan_favourite_presets(lltl::darray<preset_t> *list);
+                status_t        save_favourites(const io::Path *path);
+                void            select_presets(lltl::darray<preset_t> *list, const preset_t *active);
+                void            update_preset_list();
+                preset_t       *find_preset(const LSPString *name, bool user);
+                void            notify_presets_updated();
+                void            notify_preset_deactivated(const preset_t *preset);
+                void            notify_preset_activated(const preset_t *preset);
+
             public:
                 explicit IWrapper(ui::Module *ui, resource::ILoader *loader);
                 IWrapper(const IWrapper &) = delete;
@@ -485,6 +516,112 @@ namespace lsp
                  * @return pointer to actual shared memory state or NULL
                  */
                 virtual const core::ShmState   *shm_state();
+
+                /**
+                 * Get name of graphics backend
+                 * @return name of graphics backend
+                 */
+                const char                     *graphics_backend() const;
+
+            public: // ui::IPresetManager
+                virtual void                    mark_active_preset_dirty() override;
+
+            public: // Preset management
+                /**
+                 * Add preset listener
+                 * @param listener preset listener
+                 * @return status of operation
+                 */
+                status_t                        add_preset_listener(IPresetListener *listener);
+
+                /**
+                 * Remove preset listener
+                 * @param listener preset listener
+                 * @return status of operation
+                 */
+                status_t                        remove_preset_listener(IPresetListener *listener);
+
+                /**
+                 * Select active preset
+                 * @param preset_id preset identifier, negative value for deselection of any preset
+                 * @return status of operation
+                 */
+                virtual status_t                select_active_preset(const preset_t *preset);
+
+                /**
+                 * Get active preset
+                 * @return active preset
+                 */
+                const preset_t                 *active_preset() const;
+
+                /**
+                 * Check that active preset is dirty
+                 * @return true if active preset is dirty
+                 */
+                bool                            active_preset_dirty() const;
+
+                /**
+                 * Get list of all available presets
+                 * @return list of all available presets
+                 */
+                const preset_t                 *all_presets() const;
+
+                /**
+                 * Get number of all presets
+                 * @return number of all presets
+                 */
+                size_t                          num_presets() const;
+
+                /**
+                 * Get current preset tab
+                 * @return current preset tab
+                 */
+                preset_tab_t                    preset_tab() const;
+
+                /**
+                 * Mark preset as favourite
+                 * @param preset preset to mark
+                 * @param favourite favourite flag
+                 */
+                status_t                        mark_preset_favourite(const preset_t *preset, bool favourite);
+
+                /**
+                 * Remove user preset
+                 * @param preset_id preset identifier
+                 */
+                status_t                        remove_preset(const preset_t *preset);
+
+                /**
+                 * Save current state to the selected user preset and switch to it
+                 * @param name name of the preset
+                 * @param flags preset flags
+                 * @return status of operation
+                 */
+                status_t                        save_preset(const LSPString *name, size_t flags);
+
+                /**
+                 * Set current preset tab
+                 * @param tab current preset tab
+                 */
+                void                            set_preset_tab(preset_tab_t tab);
+
+                /**
+                 * Request for presets scan
+                 */
+                void                            scan_presets();
+
+                /**
+                 * Set current state of the preset to the DSP
+                 * @param state current preset state
+                 */
+                virtual void                    send_preset_state(const core::preset_state_t *state);
+
+                /**
+                 * Receive current state of the preset ffrom DSP
+                 * @param state current preset state
+                 */
+                void                            receive_preset_state(const core::preset_state_t *state);
+
         };
 
     } /* namespace ui */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/PortResolver.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/PortResolver.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/PortResolver.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/PortResolver.h	2025-08-26 18:15:48.073961093 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 9 апр. 2021 г.
@@ -37,17 +37,20 @@ namespace lsp
          */
         class PortResolver: public expr::Resolver
         {
-            private:
-                PortResolver & operator = (const PortResolver &);
-
             protected:
                 ui::IWrapper       *pWrapper;
 
             public:
                 explicit PortResolver();
                 explicit PortResolver(ui::IWrapper *wrapper);
+                explicit PortResolver(const PortResolver &) = delete;
+                explicit PortResolver(PortResolver &&) = delete;
                 virtual ~PortResolver() override;
 
+                PortResolver & operator = (const PortResolver &) = delete;
+                PortResolver & operator = (PortResolver &&) = delete;
+
+            public:
                 void                init(ui::IWrapper *wrapper);
 
             public:
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/UIContext.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/UIContext.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/UIContext.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/UIContext.h	2025-08-26 18:15:48.073961093 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 9 апр. 2021 г.
@@ -39,7 +39,10 @@ namespace lsp
 {
     namespace ctl
     {
+        class Controller;
+        class DOMController;
         class Widget;
+        class Overlay;
         class Registry;
     }
 
@@ -51,23 +54,25 @@ namespace lsp
          */
         class UIContext
         {
-            private:
-                UIContext & operator = (const UIContext &);
-                UIContext(const UIContext &);
-
             protected:
                 ui::IWrapper                   *pWrapper;
                 ctl::Registry                  *pControllers;
                 tk::Registry                   *pWidgets;
                 expr::Resolver                 *pResolver;
                 lltl::parray<expr::Variables>   vStack;
+                lltl::parray<ctl::Overlay>      vOverlays;
                 expr::Variables                 vRoot;
                 UIOverrides                     sOverrides;
 
             public:
                 explicit UIContext(ui::IWrapper *wrapper, ctl::Registry *controllers, tk::Registry *widgets);
+                UIContext(const UIContext &) = delete;
+                UIContext(UIContext &&) = delete;
                 ~UIContext();
 
+                UIContext & operator = (const UIContext &) = delete;
+                UIContext & operator = (UIContext &&) = delete;
+
                 status_t                init();
 
             public:
@@ -96,6 +101,12 @@ namespace lsp
                 inline tk::Registry    *widgets()           { return pWidgets;          }
 
                 /**
+                 * Get list of overlay widget controllers
+                 * @return list of overlay widget controllers
+                 */
+                lltl::parray<ctl::Overlay> *overlays()      { return &vOverlays;        }
+
+                /**
                  * Get the display
                  * @return display
                  */
@@ -189,22 +200,23 @@ namespace lsp
                 status_t    eval_int(ssize_t *value, const LSPString *expr);
 
                 /**
-                 * Create widget controller by the tag name
+                 * Create widget controller by the controller's tag name
                  *
                  * @param name the tag name of the widget
                  * @return pointer to widget controller
                  */
-                ctl::Widget *create_controller(const LSPString *name);
+                ctl::Controller *create_controller(const LSPString *name);
 
                 /**
-                 * Set attributes to widget
+                 * Set attributes to controller
                  * @param widget widget to set attributes
                  * @param atts attributes to set
                  * @return status of operation
                  */
-                status_t    set_attributes(ctl::Widget *widget, const LSPString * const *atts);
+                status_t    set_attributes(ctl::DOMController *ctl, const LSPString * const *atts);
         };
-    }
-}
+
+    } /* namespace ui */
+} /* namespace lsp */
 
 #endif /* LSP_PLUG_IN_UI_UICONTEXT_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/const.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/const.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/const.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/const.h	2025-08-26 18:15:48.073961093 +0000
@@ -29,114 +29,117 @@
 #include <lsp-plug.in/plug-fw/version.h>
 
 // UI configuration ports
-#define UI_CONFIG_PORT_PREFIX               "_ui_"
-#define UI_KVT_PORT_PREFIX                  "_kvt_"
-#define UI_LAST_VERSION_PORT_ID             "last_version"
-#define UI_DLG_DEFAULT_PATH_ID              "dlg_default_path"
-#define UI_DLG_DEFAULT_FTYPE_ID             "dlg_default_ftype"
-#define UI_DLG_SAMPLE_PATH_ID               "dlg_sample_path"
-#define UI_DLG_SAMPLE_FTYPE_ID              "dlg_sample_ftype"
-#define UI_DLG_IR_PATH_ID                   "dlg_ir_path"
-#define UI_DLG_IR_FTYPE_ID                  "dlg_ir_ftype"
-#define UI_DLG_CONFIG_PATH_ID               "dlg_config_path"
-#define UI_DLG_CONFIG_FTYPE_ID              "dlg_config_ftype"
-#define UI_DLG_MODEL3D_PATH_ID              "dlg_model3d_path"
-#define UI_DLG_MODEL3D_FTYPE_ID             "dlg_model3d_ftype"
-#define UI_DLG_REW_PATH_ID                  "dlg_rew_path"
-#define UI_DLG_REW_FTYPE_ID                 "dlg_rew_ftype"
-#define UI_DLG_HYDROGEN_PATH_ID             "dlg_hydrogen_path"
-#define UI_DLG_HYDROGEN_FTYPE_ID            "dlg_hydrogen_ftype"
-#define UI_DLG_LSPC_BUNDLE_PATH_ID          "dlg_lspc_bundle_path"
-#define UI_DLG_LSPC_BUNDLE_FTYPE_ID         "dlg_lspc_bundle_ftype"
-#define UI_DLG_SFZ_PATH_ID                  "dlg_sfz_path"
-#define UI_DLG_SFZ_FTYPE_ID                 "dlg_sfz_ftype"
-#define UI_R3D_BACKEND_PORT_ID              "r3d_backend"
-#define UI_LANGUAGE_PORT_ID                 "language"
-#define UI_REL_PATHS_PORT_ID                "use_relative_paths"
-#define UI_SCALING_PORT_ID                  "ui_scaling"
-#define UI_SCALING_HOST_PORT_ID             "ui_scaling_host"
-#define UI_FONT_SCALING_PORT_ID             "font_scaling"
-#define UI_BUNDLE_SCALING_PORT_ID           "ui_bundle_scaling"
-#define UI_VISUAL_SCHEMA_FILE_ID            "visual_schema_file"
-#define UI_PREVIEW_AUTO_PLAY_ID             "preview_auto_play"
-#define UI_ENABLE_KNOB_SCALE_ACTIONS_ID     "enable_knob_scale_actions"
-#define UI_USER_HYDROGEN_KIT_PATH_ID        "user_hydrogen_kit_path"
-#define UI_OVERRIDE_HYDROGEN_KIT_PATH_ID    "override_hydrogen_kit_path"
-#define UI_OVERRIDE_HYDROGEN_KITS_ID        "override_hydrogen_kits"
-#define UI_INVERT_VSCROLL_ID                "invert_vscroll"
-#define UI_GRAPH_DOT_INVERT_VSCROLL_ID      "invert_graph_dot_vscroll"
-#define UI_ZOOMABLE_SPECTRUM_GRAPH_ID       "zoomable_spectrum_graph"
-#define UI_FILTER_POINT_THICK_ID            "filter_point_thickness"
-#define UI_DOCUMENTATION_PATH_ID            "documentation_path"
-#define UI_FILELIST_NAVIGAION_AUTOLOAD_ID   "file_list_navigation_autoload"
-#define UI_TAKE_INST_NAME_FROM_FILE_ID      "take_instrument_name_from_file"
-
-#define MSTUD_PORT                          UI_CONFIG_PORT_PREFIX UI_MOUNT_STUD_PORT_ID
-#define VERSION_PORT                        UI_CONFIG_PORT_PREFIX UI_LAST_VERSION_PORT_ID
-#define DEFAULT_PATH_PORT                   UI_CONFIG_PORT_PREFIX UI_DLG_DEFAULT_PATH_ID
-#define DEFAULT_FTYPE_PORT                  UI_CONFIG_PORT_PREFIX UI_DLG_DEFAULT_FTYPE_ID
-#define SAMPLE_PATH_PORT                    UI_CONFIG_PORT_PREFIX UI_DLG_SAMPLE_PATH_ID
-#define SAMPLE_FTYPE_PORT                   UI_CONFIG_PORT_PREFIX UI_DLG_SAMPLE_FTYPE_ID
-#define IR_PATH_PORT                        UI_CONFIG_PORT_PREFIX UI_DLG_IR_PATH_ID
-#define IR_FTYPE_PORT                       UI_CONFIG_PORT_PREFIX UI_DLG_IR_FTYPE_ID
-#define CONFIG_PATH_PORT                    UI_CONFIG_PORT_PREFIX UI_DLG_CONFIG_PATH_ID
-#define CONFIG_FTYPE_PORT                   UI_CONFIG_PORT_PREFIX UI_DLG_CONFIG_FTYPE_ID
-#define MODEL3D_PATH_PORT                   UI_CONFIG_PORT_PREFIX UI_DLG_MODEL3D_PATH_ID
-#define MODEL3D_FTYPE_PORT                  UI_CONFIG_PORT_PREFIX UI_DLG_MODEL3D_FTYPE_ID
-#define REW_PATH_PORT                       UI_CONFIG_PORT_PREFIX UI_DLG_REW_PATH_ID
-#define REW_FTYPE_PORT                      UI_CONFIG_PORT_PREFIX UI_DLG_REW_FTYPE_ID
-#define HYDROGEN_PATH_PORT                  UI_CONFIG_PORT_PREFIX UI_DLG_HYDROGEN_PATH_ID
-#define HYDROGEN_FTYPE_PORT                 UI_CONFIG_PORT_PREFIX UI_DLG_HYDROGEN_FTYPE_ID
-#define LSPC_BUNDLE_PATH_PORT               UI_CONFIG_PORT_PREFIX UI_DLG_LSPC_BUNDLE_PATH_ID
-#define LSPC_BUNDLE_FTYPE_PORT              UI_CONFIG_PORT_PREFIX UI_DLG_LSPC_BUNDLE_FTYPE_ID
-#define SFZ_PATH_PORT                       UI_CONFIG_PORT_PREFIX UI_DLG_SFZ_PATH_ID
-#define SFZ_FTYPE_PORT                      UI_CONFIG_PORT_PREFIX UI_DLG_SFZ_FTYPE_ID
-#define R3D_BACKEND_PORT                    UI_CONFIG_PORT_PREFIX UI_R3D_BACKEND_PORT_ID
-#define LANGUAGE_PORT                       UI_CONFIG_PORT_PREFIX UI_LANGUAGE_PORT_ID
-#define REL_PATHS_PORT                      UI_CONFIG_PORT_PREFIX UI_REL_PATHS_PORT_ID
-#define UI_SCALING_PORT                     UI_CONFIG_PORT_PREFIX UI_SCALING_PORT_ID
-#define UI_SCALING_HOST_PORT                UI_CONFIG_PORT_PREFIX UI_SCALING_HOST_PORT_ID
-#define UI_FONT_SCALING_PORT                UI_CONFIG_PORT_PREFIX UI_FONT_SCALING_PORT_ID
-#define UI_BUNDLE_SCALING_PORT              UI_CONFIG_PORT_PREFIX UI_BUNDLE_SCALING_PORT_ID
-#define UI_VISUAL_SCHEMA_PORT               UI_CONFIG_PORT_PREFIX UI_VISUAL_SCHEMA_FILE_ID
-#define UI_PREVIEW_AUTO_PLAY_PORT           UI_CONFIG_PORT_PREFIX UI_PREVIEW_AUTO_PLAY_ID
-#define UI_ENABLE_KNOB_SCALE_ACTIONS_PORT   UI_CONFIG_PORT_PREFIX UI_ENABLE_KNOB_SCALE_ACTIONS_ID
-#define UI_USER_HYDROGEN_KIT_PATH_PORT      UI_CONFIG_PORT_PREFIX UI_USER_HYDROGEN_KIT_PATH_ID
-#define UI_OVERRIDE_HYDROGEN_KIT_PATH_PORT  UI_CONFIG_PORT_PREFIX UI_OVERRIDE_HYDROGEN_KIT_PATH_ID
-#define UI_OVERRIDE_HYDROGEN_KITS_PORT      UI_CONFIG_PORT_PREFIX UI_OVERRIDE_HYDROGEN_KITS_ID
-#define UI_INVERT_VSCROLL_PORT              UI_CONFIG_PORT_PREFIX UI_INVERT_VSCROLL_ID
-#define UI_GRAPH_DOT_INVERT_VSCROLL_PORT    UI_CONFIG_PORT_PREFIX UI_GRAPH_DOT_INVERT_VSCROLL_ID
-#define UI_ZOOMABLE_SPECTRUM_GRAPH_PORT     UI_CONFIG_PORT_PREFIX UI_ZOOMABLE_SPECTRUM_GRAPH_ID
-#define UI_FILTER_POINT_THICK_PORT          UI_CONFIG_PORT_PREFIX UI_FILTER_POINT_THICK_ID
-#define UI_DOCUMENTATION_PORT               UI_CONFIG_PORT_PREFIX UI_DOCUMENTATION_PATH_ID
-#define UI_FILELIST_NAVIGAION_AUTOLOAD_PORT UI_CONFIG_PORT_PREFIX UI_FILELIST_NAVIGAION_AUTOLOAD_ID
-#define UI_TAKE_INST_NAME_FROM_FILE_PORT    UI_CONFIG_PORT_PREFIX UI_TAKE_INST_NAME_FROM_FILE_ID
+#define UI_CONFIG_PORT_PREFIX                   "_ui_"
+#define UI_KVT_PORT_PREFIX                      "_kvt_"
+#define UI_LAST_VERSION_PORT_ID                 "last_version"
+#define UI_DLG_DEFAULT_PATH_ID                  "dlg_default_path"
+#define UI_DLG_DEFAULT_FTYPE_ID                 "dlg_default_ftype"
+#define UI_DLG_SAMPLE_PATH_ID                   "dlg_sample_path"
+#define UI_DLG_SAMPLE_FTYPE_ID                  "dlg_sample_ftype"
+#define UI_DLG_IR_PATH_ID                       "dlg_ir_path"
+#define UI_DLG_IR_FTYPE_ID                      "dlg_ir_ftype"
+#define UI_DLG_CONFIG_PATH_ID                   "dlg_config_path"
+#define UI_DLG_CONFIG_FTYPE_ID                  "dlg_config_ftype"
+#define UI_DLG_MODEL3D_PATH_ID                  "dlg_model3d_path"
+#define UI_DLG_MODEL3D_FTYPE_ID                 "dlg_model3d_ftype"
+#define UI_DLG_REW_PATH_ID                      "dlg_rew_path"
+#define UI_DLG_REW_FTYPE_ID                     "dlg_rew_ftype"
+#define UI_DLG_HYDROGEN_PATH_ID                 "dlg_hydrogen_path"
+#define UI_DLG_HYDROGEN_FTYPE_ID                "dlg_hydrogen_ftype"
+#define UI_DLG_LSPC_BUNDLE_PATH_ID              "dlg_lspc_bundle_path"
+#define UI_DLG_LSPC_BUNDLE_FTYPE_ID             "dlg_lspc_bundle_ftype"
+#define UI_DLG_SFZ_PATH_ID                      "dlg_sfz_path"
+#define UI_DLG_SFZ_FTYPE_ID                     "dlg_sfz_ftype"
+#define UI_R3D_BACKEND_PORT_ID                  "r3d_backend"
+#define UI_LANGUAGE_PORT_ID                     "language"
+#define UI_REL_PATHS_PORT_ID                    "use_relative_paths"
+#define UI_SCALING_PORT_ID                      "ui_scaling"
+#define UI_SCALING_HOST_PORT_ID                 "ui_scaling_host"
+#define UI_FONT_SCALING_PORT_ID                 "font_scaling"
+#define UI_BUNDLE_SCALING_PORT_ID               "ui_bundle_scaling"
+#define UI_VISUAL_SCHEMA_FILE_ID                "visual_schema_file"
+#define UI_PREVIEW_AUTO_PLAY_ID                 "preview_auto_play"
+#define UI_ENABLE_KNOB_SCALE_ACTIONS_ID         "enable_knob_scale_actions"
+#define UI_USER_HYDROGEN_KIT_PATH_ID            "user_hydrogen_kit_path"
+#define UI_OVERRIDE_HYDROGEN_KIT_PATH_ID        "override_hydrogen_kit_path"
+#define UI_OVERRIDE_HYDROGEN_KITS_ID            "override_hydrogen_kits"
+#define UI_INVERT_VSCROLL_ID                    "invert_vscroll"
+#define UI_GRAPH_DOT_INVERT_VSCROLL_ID          "invert_graph_dot_vscroll"
+#define UI_ZOOMABLE_SPECTRUM_GRAPH_ID           "zoomable_spectrum_graph"
+#define UI_FILTER_POINT_THICK_ID                "filter_point_thickness"
+#define UI_DOCUMENTATION_PATH_ID                "documentation_path"
+#define UI_FILELIST_NAVIGATION_AUTOLOAD_ID      "file_list_navigation_autoload"
+#define UI_FILELIST_NAVIGATION_AUTOPLAY_ID      "file_list_navigation_auto_play"
+#define UI_TAKE_INST_NAME_FROM_FILE_ID          "take_instrument_name_from_file"
+
+#define MSTUD_PORT                              UI_CONFIG_PORT_PREFIX UI_MOUNT_STUD_PORT_ID
+#define VERSION_PORT                            UI_CONFIG_PORT_PREFIX UI_LAST_VERSION_PORT_ID
+#define DEFAULT_PATH_PORT                       UI_CONFIG_PORT_PREFIX UI_DLG_DEFAULT_PATH_ID
+#define DEFAULT_FTYPE_PORT                      UI_CONFIG_PORT_PREFIX UI_DLG_DEFAULT_FTYPE_ID
+#define SAMPLE_PATH_PORT                        UI_CONFIG_PORT_PREFIX UI_DLG_SAMPLE_PATH_ID
+#define SAMPLE_FTYPE_PORT                       UI_CONFIG_PORT_PREFIX UI_DLG_SAMPLE_FTYPE_ID
+#define IR_PATH_PORT                            UI_CONFIG_PORT_PREFIX UI_DLG_IR_PATH_ID
+#define IR_FTYPE_PORT                           UI_CONFIG_PORT_PREFIX UI_DLG_IR_FTYPE_ID
+#define CONFIG_PATH_PORT                        UI_CONFIG_PORT_PREFIX UI_DLG_CONFIG_PATH_ID
+#define CONFIG_FTYPE_PORT                       UI_CONFIG_PORT_PREFIX UI_DLG_CONFIG_FTYPE_ID
+#define MODEL3D_PATH_PORT                       UI_CONFIG_PORT_PREFIX UI_DLG_MODEL3D_PATH_ID
+#define MODEL3D_FTYPE_PORT                      UI_CONFIG_PORT_PREFIX UI_DLG_MODEL3D_FTYPE_ID
+#define REW_PATH_PORT                           UI_CONFIG_PORT_PREFIX UI_DLG_REW_PATH_ID
+#define REW_FTYPE_PORT                          UI_CONFIG_PORT_PREFIX UI_DLG_REW_FTYPE_ID
+#define HYDROGEN_PATH_PORT                      UI_CONFIG_PORT_PREFIX UI_DLG_HYDROGEN_PATH_ID
+#define HYDROGEN_FTYPE_PORT                     UI_CONFIG_PORT_PREFIX UI_DLG_HYDROGEN_FTYPE_ID
+#define LSPC_BUNDLE_PATH_PORT                   UI_CONFIG_PORT_PREFIX UI_DLG_LSPC_BUNDLE_PATH_ID
+#define LSPC_BUNDLE_FTYPE_PORT                  UI_CONFIG_PORT_PREFIX UI_DLG_LSPC_BUNDLE_FTYPE_ID
+#define SFZ_PATH_PORT                           UI_CONFIG_PORT_PREFIX UI_DLG_SFZ_PATH_ID
+#define SFZ_FTYPE_PORT                          UI_CONFIG_PORT_PREFIX UI_DLG_SFZ_FTYPE_ID
+#define R3D_BACKEND_PORT                        UI_CONFIG_PORT_PREFIX UI_R3D_BACKEND_PORT_ID
+#define LANGUAGE_PORT                           UI_CONFIG_PORT_PREFIX UI_LANGUAGE_PORT_ID
+#define REL_PATHS_PORT                          UI_CONFIG_PORT_PREFIX UI_REL_PATHS_PORT_ID
+#define UI_SCALING_PORT                         UI_CONFIG_PORT_PREFIX UI_SCALING_PORT_ID
+#define UI_SCALING_HOST_PORT                    UI_CONFIG_PORT_PREFIX UI_SCALING_HOST_PORT_ID
+#define UI_FONT_SCALING_PORT                    UI_CONFIG_PORT_PREFIX UI_FONT_SCALING_PORT_ID
+#define UI_BUNDLE_SCALING_PORT                  UI_CONFIG_PORT_PREFIX UI_BUNDLE_SCALING_PORT_ID
+#define UI_VISUAL_SCHEMA_PORT                   UI_CONFIG_PORT_PREFIX UI_VISUAL_SCHEMA_FILE_ID
+#define UI_PREVIEW_AUTO_PLAY_PORT               UI_CONFIG_PORT_PREFIX UI_PREVIEW_AUTO_PLAY_ID
+#define UI_FILELIST_NAVIGATION_AUTOPLAY_PORT    UI_CONFIG_PORT_PREFIX UI_FILELIST_NAVIGATION_AUTOPLAY_ID
+#define UI_ENABLE_KNOB_SCALE_ACTIONS_PORT       UI_CONFIG_PORT_PREFIX UI_ENABLE_KNOB_SCALE_ACTIONS_ID
+#define UI_USER_HYDROGEN_KIT_PATH_PORT          UI_CONFIG_PORT_PREFIX UI_USER_HYDROGEN_KIT_PATH_ID
+#define UI_OVERRIDE_HYDROGEN_KIT_PATH_PORT      UI_CONFIG_PORT_PREFIX UI_OVERRIDE_HYDROGEN_KIT_PATH_ID
+#define UI_OVERRIDE_HYDROGEN_KITS_PORT          UI_CONFIG_PORT_PREFIX UI_OVERRIDE_HYDROGEN_KITS_ID
+#define UI_INVERT_VSCROLL_PORT                  UI_CONFIG_PORT_PREFIX UI_INVERT_VSCROLL_ID
+#define UI_GRAPH_DOT_INVERT_VSCROLL_PORT        UI_CONFIG_PORT_PREFIX UI_GRAPH_DOT_INVERT_VSCROLL_ID
+#define UI_ZOOMABLE_SPECTRUM_GRAPH_PORT         UI_CONFIG_PORT_PREFIX UI_ZOOMABLE_SPECTRUM_GRAPH_ID
+#define UI_FILTER_POINT_THICK_PORT              UI_CONFIG_PORT_PREFIX UI_FILTER_POINT_THICK_ID
+#define UI_DOCUMENTATION_PORT                   UI_CONFIG_PORT_PREFIX UI_DOCUMENTATION_PATH_ID
+#define UI_FILELIST_NAVIGATION_AUTOLOAD_PORT    UI_CONFIG_PORT_PREFIX UI_FILELIST_NAVIGATION_AUTOLOAD_ID
+#define UI_TAKE_INST_NAME_FROM_FILE_PORT        UI_CONFIG_PORT_PREFIX UI_TAKE_INST_NAME_FROM_FILE_ID
 
 // Special widget identifiers
-#define WUID_MAIN_MENU                      "main_menu"
-#define WUID_EXPORT_MENU                    "export_menu"
-#define WUID_IMPORT_MENU                    "import_menu"
-#define WUID_LANGUAGE_MENU                  "language_menu"
-#define WUID_RESET_SETTINGS_MENU            "reset_settings_menu"
+#define WUID_MAIN_MENU                          "main_menu"
+#define WUID_PRESETS_MENU                       "presets_menu"
+#define WUID_EXPORT_MENU                        "export_menu"
+#define WUID_IMPORT_MENU                        "import_menu"
+#define WUID_LANGUAGE_MENU                      "language_menu"
+#define WUID_RESET_SETTINGS_MENU                "reset_settings_menu"
 
 // Special ports for handling current time
-#define TIME_PORT_PREFIX                    "_time_"
-#define TIME_SAMPLE_RATE_PORT               "sr"
-#define TIME_SPEED_PORT                     "speed"
-#define TIME_FRAME_PORT                     "frame"
-#define TIME_NUMERATOR_PORT                 "num"
-#define TIME_DENOMINATOR_PORT               "denom"
-#define TIME_BEATS_PER_MINUTE_PORT          "bpm"
-#define TIME_TICK_PORT                      "tick"
-#define TIME_TICKS_PER_BEAT_PORT            "tpb"
-
-#define SAMPLE_RATE_PORT                    TIME_PORT_PREFIX TIME_SAMPLE_RATE_PORT
-#define SPEED_PORT                          TIME_PORT_PREFIX TIME_SPEED_PORT
-#define FRAME_PORT                          TIME_PORT_PREFIX TIME_FRAME_PORT
-#define NUMERATOR_PORT                      TIME_PORT_PREFIX TIME_NUMERATOR_PORT
-#define DENOMINATOR_PORT                    TIME_PORT_PREFIX TIME_DENOMINATOR_PORT
-#define BEATS_PER_MINUTE_PORT               TIME_PORT_PREFIX TIME_BEATS_PER_MINUTE_PORT
-#define TICK_PORT                           TIME_PORT_PREFIX TIME_TICK_PORT
-#define TICKS_PER_BEAT_PORT                 TIME_PORT_PREFIX TIME_TICKS_PER_BEAT_PORT
+#define TIME_PORT_PREFIX                        "_time_"
+#define TIME_SAMPLE_RATE_PORT                   "sr"
+#define TIME_SPEED_PORT                         "speed"
+#define TIME_FRAME_PORT                         "frame"
+#define TIME_NUMERATOR_PORT                     "num"
+#define TIME_DENOMINATOR_PORT                   "denom"
+#define TIME_BEATS_PER_MINUTE_PORT              "bpm"
+#define TIME_TICK_PORT                          "tick"
+#define TIME_TICKS_PER_BEAT_PORT                "tpb"
+
+#define SAMPLE_RATE_PORT                        TIME_PORT_PREFIX TIME_SAMPLE_RATE_PORT
+#define SPEED_PORT                              TIME_PORT_PREFIX TIME_SPEED_PORT
+#define FRAME_PORT                              TIME_PORT_PREFIX TIME_FRAME_PORT
+#define NUMERATOR_PORT                          TIME_PORT_PREFIX TIME_NUMERATOR_PORT
+#define DENOMINATOR_PORT                        TIME_PORT_PREFIX TIME_DENOMINATOR_PORT
+#define BEATS_PER_MINUTE_PORT                   TIME_PORT_PREFIX TIME_BEATS_PER_MINUTE_PORT
+#define TICK_PORT                               TIME_PORT_PREFIX TIME_TICK_PORT
+#define TICKS_PER_BEAT_PORT                     TIME_PORT_PREFIX TIME_TICKS_PER_BEAT_PORT
 
 #endif /* LSP_PLUG_IN_PLUG_FW_UI_CONST_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/presets.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/presets.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/presets.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui/presets.h	2025-08-26 18:15:48.073961093 +0000
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 24 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_UI_PRESETS_H_
+#define LSP_PLUG_IN_PLUG_FW_UI_PRESETS_H_
+
+#include <lsp-plug.in/plug-fw/version.h>
+
+#ifndef LSP_PLUG_IN_PLUG_FW_UI_IMPL_H_
+    #error "Use #include <lsp-plug.in/plug-fw/ui/ui.h>"
+#endif /* LSP_PLUG_IN_PLUG_FW_UI_IMPL_H_ */
+
+#include <lsp-plug.in/runtime/LSPString.h>
+
+namespace lsp
+{
+    namespace ui
+    {
+        enum preset_flags_t
+        {
+            PRESET_FLAG_NONE        = 0,
+            PRESET_FLAG_USER        = 1 << 0,   // User-defined preset
+            PRESET_FLAG_PATCH       = 1 << 1,   // Preset is modified by user
+            PRESET_FLAG_FAVOURITE   = 1 << 2,   // Preset marked as a favourite
+        };
+
+        enum preset_tab_t
+        {
+            PRESET_TAB_ALL,
+            PRESET_TAB_FACTORY,
+            PRESET_TAB_USER,
+            PRESET_TAB_FAVOURITES,
+
+            PRESET_TAB_TOTAL
+        };
+
+        typedef struct preset_t
+        {
+            LSPString       name;       // Name of the preset
+            LSPString       path;       // Location of the preset
+            uint32_t        flags;      // Preset flags
+        } preset_t;
+
+        typedef bool (*preset_filter_t)(const ui::preset_t *preset);
+
+        ssize_t preset_compare_function(const preset_t *a, const preset_t *b);
+
+        bool is_any_preset(const ui::preset_t *preset);
+        bool is_factory_preset(const ui::preset_t *preset);
+        bool is_user_preset(const ui::preset_t *preset);
+        bool is_favourite_preset(const ui::preset_t *preset);
+
+    } /* namespace ui */
+} /* namespace lsp */
+
+#endif /* LSP_PLUG_IN_PLUG_FW_UI_PRESETS_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui.h	2025-03-01 12:42:57.432644544 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/ui.h	2025-08-26 18:15:48.073961093 +0000
@@ -27,7 +27,10 @@
 
 #define LSP_PLUG_IN_PLUG_FW_UI_IMPL_H_
     #include <lsp-plug.in/plug-fw/ui/const.h>
+    #include <lsp-plug.in/plug-fw/ui/presets.h>
 
+    #include <lsp-plug.in/plug-fw/ui/IPresetListener.h>
+    #include <lsp-plug.in/plug-fw/ui/IPresetManager.h>
     #include <lsp-plug.in/plug-fw/ui/IPort.h>
     #include <lsp-plug.in/plug-fw/ui/IPortListener.h>
     #include <lsp-plug.in/plug-fw/ui/IWrapper.h>
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/util/validator/validator.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/util/validator/validator.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/util/validator/validator.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/util/validator/validator.h	2025-08-26 18:15:48.077961054 +0000
@@ -61,6 +61,7 @@ namespace lsp
             lltl::pphash<char, meta::port_t>        port_ids;
             lltl::pphash<clap_id, meta::port_t>     clap_port_ids;
             lltl::pphash<Steinberg::Vst::ParamID, meta::port_t> vst3_port_ids;
+            lltl::pphash<char, meta::port_t>        port_short_names;
         } context_t;
 
         namespace ladspa
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/version.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/version.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/version.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/version.h	2025-08-26 18:15:48.077961054 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_PLUGIN_FW_MAJOR         1
 #define LSP_PLUGIN_FW_MINOR         0
-#define LSP_PLUGIN_FW_MICRO         29
+#define LSP_PLUGIN_FW_MICRO         31
 
 #if defined(LSP_PLUGIN_FW_PUBLISHER)
     #define LSP_PLUGIN_FW_PUBLIC        LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/data.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/data.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/data.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/data.h	2025-08-26 18:15:48.077961054 +0000
@@ -36,7 +36,9 @@ namespace lsp
     namespace clap
     {
         constexpr uint32_t LSP_CLAP_MAGIC   = 0x2050534C;
-        constexpr uint32_t LSP_CLAP_VERSION = 0x1;
+        constexpr uint32_t LSP_CLAP_VERSION_1 = 0x1;
+        constexpr uint32_t LSP_CLAP_VERSION_2 = 0x2;
+        constexpr uint32_t LSP_CLAP_VERSION_CURRENT = LSP_CLAP_VERSION_2;
 
         enum serial_flags_t
         {
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/helpers.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/helpers.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/helpers.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/helpers.h	2025-08-26 18:15:48.077961054 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 1 янв. 2023 г.
@@ -27,6 +27,7 @@
 #include <clap/clap.h>
 #include <lsp-plug.in/common/alloc.h>
 #include <lsp-plug.in/common/endian.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
 #include <lsp-plug.in/plug-fw/plug.h>
 #include <lsp-plug.in/plug-fw/meta/types.h>
 #include <lsp-plug.in/plug-fw/meta/func.h>
@@ -79,30 +80,18 @@ namespace lsp
 
         inline plug::mesh_t *create_mesh(const meta::port_t *meta)
         {
-            size_t buffers      = meta->step;
-            size_t buf_size     = meta->start * sizeof(float);
-            size_t mesh_size    = sizeof(plug::mesh_t) + sizeof(float *) * buffers;
-
-            // Align values to 64-byte boundaries
-            buf_size            = align_size(buf_size, 0x40);
-            mesh_size           = align_size(mesh_size, 0x40);
+            const size_t buffers    = meta->step;
+            const size_t buf_size   = align_size(meta->start * sizeof(float), 0x40);
+            const size_t mesh_size  = align_size(sizeof(plug::mesh_t) + sizeof(float *) * buffers, 0x40);
 
             // Allocate pointer
-            uint8_t *ptr        = static_cast<uint8_t *>(malloc(mesh_size + buf_size * buffers));
+            uint8_t *ptr            = static_cast<uint8_t *>(malloc(mesh_size + buf_size * buffers));
             if (ptr == NULL)
                 return NULL;
 
-            // Initialize references
-            plug::mesh_t *mesh  = reinterpret_cast<plug::mesh_t *>(ptr);
-            mesh->nState        = plug::M_EMPTY;
-            mesh->nBuffers      = 0;
-            mesh->nItems        = 0;
-            ptr                += mesh_size;
-            for (size_t i=0; i<buffers; ++i)
-            {
-                mesh->pvData[i]     = reinterpret_cast<float *>(ptr);
-                ptr                += buf_size;
-            }
+            // Initialize mesh
+            plug::mesh_t *mesh      = advance_ptr_bytes<plug::mesh_t>(ptr, mesh_size);
+            mesh->init(reinterpret_cast<float *>(ptr), buffers, buf_size / sizeof(float));
 
             return mesh;
         }
@@ -171,6 +160,34 @@ namespace lsp
         }
 
         /**
+         * Read the variable-size block from the CLAP input streem
+         * @param is CLAP input stream
+         * @param buf target buffer to read the data to
+         * @param capacity the variable that stores buffer capacity
+         * @param count number of bytes to read
+         * @return status of operation
+         */
+        inline status_t read_fully(const clap_istream_t *is, void **buf, size_t *capacity, size_t count)
+        {
+            // Reallocate memory if there is not enough space
+            uint8_t *s  = reinterpret_cast<uint8_t *>(*buf);
+            size_t cap  = *capacity;
+            if ((s == NULL) || (cap < count))
+            {
+                cap         = align_size(count, 32);
+                uint8_t *ns = static_cast<uint8_t *>(realloc(s, sizeof(uint8_t) * cap));
+                if (ns == NULL)
+                    return STATUS_NO_MEM;
+
+                s           = ns;
+                *buf        = ns;
+                *capacity   = cap;
+            }
+
+            return read_fully(is, *buf, count);
+        }
+
+        /**
          * Read simple data type from the CLAP input stream
          * @param is CLAP input stream
          * @param value value to write
@@ -186,6 +203,12 @@ namespace lsp
             return STATUS_OK;
         }
 
+        /**
+         * Write variable-length integer
+         * @param os CLAP output stream
+         * @param value integer to write
+         * @return status of operation
+         */
         inline status_t write_varint(const clap_ostream_t *os, size_t value)
         {
             do {
@@ -201,6 +224,22 @@ namespace lsp
         }
 
         /**
+         * Get size of serialized variable-length integer
+         * @param value variable-length integer
+         * @return number of bytes used to serialize value
+         */
+        inline size_t szof_varint(size_t value)
+        {
+            size_t szof = 0;
+            do {
+                ++szof;
+                value     >>= 7;
+            } while (value > 0);
+
+            return szof;
+        }
+
+        /**
          * Write string to CLAP output stream
          * @param os CLAP output stream
          * @param s NULL_terminated string to write
@@ -208,7 +247,7 @@ namespace lsp
          */
         inline status_t write_string(const clap_ostream_t *os, const char *s)
         {
-            size_t len = strlen(s);
+            const size_t len = strlen(s);
 
             // Write variable-sized string length
             status_t res = write_varint(os, len);
@@ -220,6 +259,17 @@ namespace lsp
         }
 
         /**
+         * Set serialized string size
+         * @param s string
+         * @return serialized string size
+         */
+        inline size_t szof_string(const char *s)
+        {
+            const size_t len = strlen(s);
+            return szof_varint(len) + len;
+        }
+
+        /**
          * Read the variable-sized integer
          * @param is input stream to perform read
          * @param value the pointer to store the read value
@@ -302,7 +352,7 @@ namespace lsp
             if ((s == NULL) || (cap < (len + 1)))
             {
                 cap         = align_size(len + 1, 32);
-                char *ns    = static_cast<char *>(realloc(s, sizeof(char *) * cap));
+                char *ns    = static_cast<char *>(realloc(s, sizeof(char) * cap));
                 if (ns == NULL)
                     return STATUS_NO_MEM;
 
@@ -319,6 +369,46 @@ namespace lsp
             return STATUS_OK;
         }
 
+        inline status_t read_preset_state(const clap_istream_t *is, core::preset_state_t *state)
+        {
+            // Read variable-sized preset length
+            size_t len = 0;
+            status_t res = read_varint(is, &len);
+            if (res != STATUS_OK)
+                return res;
+
+            core::init_preset_state(state);
+            uint32_t flags = 0, tab = 0;
+            if ((res = read_fully(is, &flags)) != STATUS_OK)
+                return res;
+            if ((res = read_fully(is, &tab)) != STATUS_OK)
+                return res;
+            if ((res = read_string(is, state->name, core::PRESET_NAME_BYTES)) != STATUS_OK)
+                return res;
+
+            state->flags        = flags;
+            state->tab          = tab;
+
+            const size_t szof   = sizeof(uint32_t) * 2 + szof_string(state->name);
+
+            return (len == szof) ? STATUS_OK : STATUS_BAD_STATE;
+        }
+
+        inline status_t write_preset_state(const clap_ostream_t *os, const core::preset_state_t *state)
+        {
+            // Read variable-sized preset length
+            status_t res;
+            const size_t szof   = sizeof(uint32_t) * 2 + szof_string(state->name);
+
+            if ((res = write_varint(os, szof)) != STATUS_OK)
+                return res;
+            if ((res = write_fully(os, uint32_t(state->flags))) != STATUS_OK)
+                return res;
+            if ((res = write_fully(os, uint32_t(state->tab))) != STATUS_OK)
+                return res;
+            return write_string(os, state->name);
+        }
+
         inline float to_clap_value(const meta::port_t *meta, float value, float *min_value, float *max_value)
         {
             float min = 0.0f, max = 1.0f, step = 0.0f;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/impl/ui_wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/impl/ui_wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/impl/ui_wrapper.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/impl/ui_wrapper.h	2025-08-26 18:15:48.077961054 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-comp-delay
  * Created on: 5 янв. 2023 г.
@@ -44,6 +44,7 @@ namespace lsp
             fScaling        = -100.0f;
             pParent         = NULL;
             pTransientFor   = NULL;
+
             bUIInitialized  = false;
             bRequestProcess = false;
             bUIActive       = false;
@@ -304,40 +305,44 @@ namespace lsp
 
                 case meta::R_PATH:
                     lsp_trace("creating path port %s", port->id);
-                    cup = new clap::UIPathPort(cp);
+                    cup = new clap::UIPathPort(cp, this);
                     break;
 
                 case meta::R_STRING:
                     lsp_trace("creating string port %s", port->id);
-                    cup = new clap::UIStringPort(cp);
+                    cup = new clap::UIStringPort(cp, this);
                     break;
 
                 case meta::R_SEND_NAME:
                     lsp_trace("creating send name port %s", port->id);
-                    cup = new clap::UIStringPort(cp);
+                    cup = new clap::UIStringPort(cp, this);
                     break;
 
                 case meta::R_RETURN_NAME:
                     lsp_trace("creating return name port %s", port->id);
-                    cup = new clap::UIStringPort(cp);
+                    cup = new clap::UIStringPort(cp, this);
                     break;
 
                 case meta::R_CONTROL:
-                case meta::R_METER:
+                    lsp_trace("creating parameter port %s", port->id);
+                    cup     = new clap::UIParameterPort(static_cast<clap::ParameterPort *>(cp), &bRequestProcess, this);
+                    break;
+
                 case meta::R_BYPASS:
-                    lsp_trace("creating regular port %s", port->id);
-                    // VST specifies only INPUT parameters, output should be read in different way
-                    if (meta::is_out_port(port))
-                        cup     = new clap::UIMeterPort(cp);
-                    else
-                        cup     = new clap::UIParameterPort(static_cast<clap::ParameterPort *>(cp), &bRequestProcess);
+                    lsp_trace("creating bypass port %s", port->id);
+                    cup     = new clap::UIParameterPort(static_cast<clap::ParameterPort *>(cp), &bRequestProcess, NULL);
+                    break;
+
+                case meta::R_METER:
+                    lsp_trace("creating meter port %s", port->id);
+                    cup     = new clap::UIMeterPort(cp);
                     break;
 
                 case meta::R_PORT_SET:
                 {
                     char postfix_buf[MAX_PARAM_ID_BYTES], param_name[MAX_PARAM_ID_BYTES];
                     lsp_trace("creating port group %s", port->id);
-                    UIPortGroup *upg = new clap::UIPortGroup(static_cast<clap::PortGroup *>(cp), &bRequestProcess);
+                    UIPortGroup *upg = new clap::UIPortGroup(static_cast<clap::PortGroup *>(cp), &bRequestProcess, this);
 
                     // Add immediately port group to list
                     vPorts.add(upg);
@@ -650,6 +655,10 @@ namespace lsp
                     *height = lsp_min(sr.nMinHeight, 32);
             }
 
+            lsp_trace("return width = %d, height = %d",
+                (width != NULL) ? int(*width) : 0,
+                (height != NULL) ? int(*height) : 0);
+
             return true;
         }
 
@@ -680,7 +689,7 @@ namespace lsp
             ws::size_limit_t sr;
             wnd->get_padded_size_limits(&sr);
 
-            hints->can_resize_horizontally = (sr.nMaxWidth < 0) || (sr.nMaxWidth  > sr.nMinWidth);
+            hints->can_resize_horizontally  = (sr.nMaxWidth < 0) || (sr.nMaxWidth  > sr.nMinWidth);
             hints->can_resize_vertically    = (sr.nMaxHeight< 0) || (sr.nMaxHeight > sr.nMinHeight);
 
             hints->preserve_aspect_ratio    = false;
@@ -711,6 +720,13 @@ namespace lsp
 
             tk::SizeConstraints::apply(&r, &sr);
 
+            lsp_trace("adjust size width = %d -> %d, height = %d -> %d",
+                *width, int(r.nWidth),
+                *height, int(r.nHeight));
+
+            if ((r.nWidth > ssize_t(*width)) || (r.nHeight > ssize_t(*height)))
+                return false;
+
             *width      = r.nWidth;
             *height     = r.nHeight;
 
@@ -727,13 +743,26 @@ namespace lsp
                 return false;
             lsp_finally { sMutex.unlock(); };
 
+            // Ensure that we can resize the window to the desired size
             ws::rectangle_t r;
-            wnd->get_padded_screen_rectangle(&r);
+            ws::size_limit_t sr;
+            wnd->get_padded_size_limits(&sr);
 
+            r.nLeft     = 0;
+            r.nTop      = 0;
+            r.nWidth    = width;
+            r.nHeight   = height;
+
+            tk::SizeConstraints::apply(&r, &sr);
+            if ((r.nWidth > ssize_t(width)) || (r.nHeight > ssize_t(height)))
+                return false;
+
+            // Check that we need to resize window
+            wnd->get_padded_screen_rectangle(&r);
             if ((r.nWidth != ssize_t(width)) && (r.nHeight != ssize_t(height)))
             {
-                lsp_trace("width = {%d, %d}, height = {%d, %d}, call for resize",
-                    int(r.nWidth), int(width), int(r.nHeight), int(height));
+                lsp_trace("width = %d -> %d, height = %d -> %d, call for resize",
+                    int(width), int(r.nWidth), int(height), int(r.nHeight));
                 wnd->resize_window(width, height);
             }
 
@@ -836,8 +865,12 @@ namespace lsp
                 return;
 
             // Perform main data transfers and state sync
+            core::preset_state_t state;
             tranfet_ui_to_dsp();
             transfer_dsp_to_ui();
+            if (pWrapper->fetch_preset_state(&state, false))
+                receive_preset_state(&state);
+
             IWrapper::main_iteration();
         }
 
@@ -874,6 +907,11 @@ namespace lsp
                 pExt->gui->request_resize(pExt->host, sr.nMinWidth, sr.nMinHeight);
             }
 
+            // Fetch preset state
+            core::preset_state_t state;
+            if (pWrapper->fetch_preset_state(&state, true))
+                receive_preset_state(&state);
+
             // Update UI status
             bUIActive       = true;
             if (pWrapper != NULL)
@@ -913,6 +951,12 @@ namespace lsp
             return STATUS_OK;
         }
 
+        void UIWrapper::send_preset_state(const core::preset_state_t *state)
+        {
+            if (pWrapper != NULL)
+                pWrapper->set_preset_state(state, clap::Wrapper::PT_STATE);
+        }
+
     } /* namespace clap */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/impl/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/impl/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/impl/wrapper.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/impl/wrapper.h	2025-08-26 18:15:48.077961054 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 24 дек. 2022 г.
@@ -55,10 +55,13 @@ namespace lsp
 
             nLatency            = 0;
             nTailSize           = 0;
-            nDumpReq            = 0;
+            atomic_store(&nDumpReq, 0);
             nDumpResp           = 0;
-            nStateReq           = 0;
+            atomic_store(&nStateReq, 0);
             nStateResp          = 0;
+            atomic_store(&nPresetFlags, 0);
+
+            core::init_preset_state(&sPresetState);
 
             bLatencyChanged     = false;
             bUpdateSettings     = true;
@@ -772,6 +775,45 @@ namespace lsp
         {
         }
 
+        void Wrapper::process_transport_event(const clap_event_transport_t *ev)
+        {
+//            lsp_trace("CLAP_EVENT_TRANSPORT:  "
+//                "flags=0x%x, song_pos_beats=%lld, song_pos_seconds=%lld, tempo=%f, tempo_inc=%f, "
+//                "loop_start_beats=%lld, loop_end_beats=%lld, loop_start_seconds=%lld, loop_end_seconds=%lld, "
+//                "bar_start=%lld, bar_number=%d, tsig_num=%d, tsig_denom=%d",
+//                int(ev->flags),
+//                (long long)(ev->song_pos_beats),
+//                (long long)(ev->song_pos_seconds),
+//                ev->tempo,
+//                ev->tempo_inc,
+//                (long long)(ev->loop_start_beats),
+//                (long long)(ev->loop_end_beats),
+//                (long long)(ev->loop_start_seconds),
+//                (long long)(ev->loop_end_seconds),
+//                (long long)(ev->bar_start),
+//                int(ev->bar_number),
+//                int(ev->tsig_num),
+//                int(ev->tsig_denom));
+
+            // Update the transport state
+            if (ev->flags & CLAP_TRANSPORT_HAS_TEMPO)
+            {
+                sPosition.beatsPerMinute        = ev->tempo;
+                sPosition.beatsPerMinuteChange  = ev->tempo_inc;
+            }
+            if (ev->flags & CLAP_TRANSPORT_HAS_TIME_SIGNATURE)
+            {
+                sPosition.numerator             = ev->tsig_num;
+                sPosition.denominator           = ev->tsig_denom;
+            }
+            if (ev->flags & CLAP_TRANSPORT_HAS_BEATS_TIMELINE)
+            {
+                sPosition.frame                 = sPosition.sampleRate * (ev->song_pos_seconds / double(CLAP_SECTIME_FACTOR));
+                sPosition.ticksPerBeat          = DEFAULT_TICKS_PER_BEAT;
+                sPosition.tick                  = (sPosition.ticksPerBeat * double(ev->song_pos_beats - ev->bar_start) * sPosition.numerator * sPosition.beatsPerMinute) / (60.0 * CLAP_BEATTIME_FACTOR);
+            }
+        }
+
         size_t Wrapper::prepare_block(size_t *ev_index, size_t offset, const clap_process_t *process)
         {
             // There are no more events in the block?
@@ -802,6 +844,9 @@ namespace lsp
             {
                 // Fetch the event until it's timestamp is not out of the block
                 const clap_event_header_t *hdr = process->in_events->get(process->in_events, i);
+                lsp_trace("i=%d, event: size=%d, time=%d, space_id=%d, type=%d, flags=0x%x, last_time=%d",
+                    int(hdr->size), int(hdr->time), int(hdr->space_id), int(hdr->type), int(hdr->flags), int(last_time));
+
                 if ((hdr->space_id != CLAP_CORE_EVENT_SPACE_ID) || (hdr->time < offset))
                     continue;
                 else if (hdr->time >= last_time)
@@ -869,23 +914,7 @@ namespace lsp
                     case CLAP_EVENT_TRANSPORT:
                     {
                         const clap_event_transport_t *ev = reinterpret_cast<const clap_event_transport_t *>(hdr);
-                        // Update the transport state
-                        if (ev->flags & CLAP_TRANSPORT_HAS_TEMPO)
-                        {
-                            sPosition.beatsPerMinute        = ev->tempo;
-                            sPosition.beatsPerMinuteChange  = ev->tempo_inc;
-                        }
-                        if (ev->flags & CLAP_TRANSPORT_HAS_TIME_SIGNATURE)
-                        {
-                            sPosition.numerator             = ev->tsig_num;
-                            sPosition.denominator           = ev->tsig_denom;
-                        }
-                        if (ev->flags & CLAP_TRANSPORT_HAS_BEATS_TIMELINE)
-                        {
-                            sPosition.frame                 = sPosition.sampleRate * (ev->song_pos_seconds / double(CLAP_SECTIME_FACTOR));
-                            sPosition.ticksPerBeat          = DEFAULT_TICKS_PER_BEAT;
-                            sPosition.tick                  = (sPosition.ticksPerBeat * double(ev->song_pos_beats - ev->bar_start) * sPosition.numerator * sPosition.beatsPerMinute) / (60.0 * CLAP_BEATTIME_FACTOR);
-                        }
+                        process_transport_event(ev);
                         break;
                     }
                     case CLAP_EVENT_MIDI:
@@ -1064,6 +1093,10 @@ namespace lsp
                 }
             }
 
+            // Update transport if it is present
+            if (process->transport != NULL)
+                process_transport_event(process->transport);
+
             // Sync the parameter ports with the UI
             for (size_t i=0, n=vParamPorts.size(); i<n; ++i)
             {
@@ -1303,7 +1336,7 @@ namespace lsp
                 lsp_warn("Error serializing header signature, code=%d", int(res));
                 return res;
             }
-            if ((res = write_fully(os, uint32_t(LSP_CLAP_VERSION))) != STATUS_OK)
+            if ((res = write_fully(os, uint32_t(LSP_CLAP_VERSION_CURRENT))) != STATUS_OK)
             {
                 lsp_warn("Error serializing header version, code=%d", int(res));
                 return res;
@@ -1340,6 +1373,13 @@ namespace lsp
                 }
             }
 
+            // Serialize preset state
+            if ((res = serialize_preset_settings(os)) != STATUS_OK)
+            {
+                lsp_warn("Error serializing preset settings, code=%d", int(res));
+                return res;
+            }
+
             // Serialize KVT storage
             if (sKVTMutex.lock())
             {
@@ -1798,8 +1838,14 @@ namespace lsp
                 lsp_warn("Failed to read state version, code=%d", int(res));
                 return res;
             }
+
             lsp_trace("Data version: %d", int(version));
-            if (version != clap::LSP_CLAP_VERSION)
+            bool has_preset_settings = false;
+            if (version == clap::LSP_CLAP_VERSION_2)
+            {
+                has_preset_settings = true;
+            }
+            else if (version != clap::LSP_CLAP_VERSION_1)
             {
                 lsp_warn("Unsupported version %d", int(version));
                 return STATUS_NO_DATA;
@@ -1837,29 +1883,7 @@ namespace lsp
 
                 lsp_trace("Parameter name: %s", name);
 
-                if (name[0] != '/')
-                {
-                    // Obtain the port by it's identifier
-                    clap::Port *cp       = find_by_id(name);
-                    if (cp != NULL)
-                    {
-                        if ((res = cp->deserialize(is)) != STATUS_OK)
-                        {
-                            lsp_warn("Failed to deserialize port id=%s", name);
-                            return res;
-                        }
-                    }
-                    else
-                    {
-                        if ((res = read_value(is, name, &p)) != STATUS_OK)
-                        {
-                            lsp_warn("Failed to read value for port id=%s", name);
-                            return res;
-                        }
-                        lsp_warn("Missing port id=%s, skipping", name);
-                    }
-                }
-                else
+                if (name[0] == '/')
                 {
                     // Read the KVT parameter flags
                     uint8_t flags = 0;
@@ -1887,6 +1911,52 @@ namespace lsp
                         sKVT.put(name, &p, kflags);
                     }
                 }
+                else if ((name[0] == '!') && (has_preset_settings))
+                {
+                    // Special variables
+                    if (strcmp(name, "!preset_settings") == 0)
+                    {
+                        core::preset_state_t state;
+                        if ((res = read_preset_state(is, &state)) != STATUS_OK)
+                        {
+                            lsp_warn("Error reading preset state, code=%d", int(res));
+                            return res;
+                        }
+
+                        set_preset_state(&state, PT_STATE);
+                    }
+                    else
+                    {
+                        lsp_trace("Unknown special variable %s, skipping", name);
+                        if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
+                        {
+                            lsp_warn("Failed to skip special variable");
+                            return res;
+                        }
+                    }
+                }
+                else
+                {
+                    // Obtain the port by it's identifier
+                    clap::Port *cp       = find_by_id(name);
+                    if (cp != NULL)
+                    {
+                        if ((res = cp->deserialize(is)) != STATUS_OK)
+                        {
+                            lsp_warn("Failed to deserialize port id=%s", name);
+                            return res;
+                        }
+                    }
+                    else
+                    {
+                        if ((res = read_value(is, name, &p)) != STATUS_OK)
+                        {
+                            lsp_warn("Failed to read value for port id=%s", name);
+                            return res;
+                        }
+                        lsp_warn("Missing port id=%s, skipping", name);
+                    }
+                }
             }
 
             // Analyze result
@@ -2174,6 +2244,131 @@ namespace lsp
             return (pShmClient != NULL) ? pShmClient->state() : NULL;
         }
 
+        void Wrapper::set_preset_state(const core::preset_state_t *state, size_t mode)
+        {
+            lsp_trace("this=%p, name=%s, flags=0x%x, tab=%d, mode=%d",
+                this, state->name, state->flags, state->tab, int(mode));
+
+            {
+                // Lock the state
+                while (true)
+                {
+                    const uatomic_t flags = atomic_load(&nPresetFlags);
+                    if ((flags & PT_TYPE) > mode) // Leave if data has greater priority than submitted
+                    {
+                        lsp_trace("preset state not updated, flags=0x%x, mode=%d", int(flags), int(mode));
+                        return;
+                    }
+                    if (!(flags & PT_LOCK))
+                    {
+                        if (atomic_cas(&nPresetFlags, flags, flags | PT_LOCK))
+                            break;
+                    }
+                    ipc::Thread::yield();
+                }
+
+                // State is locked
+                lsp_finally {
+                    while (true)
+                    {
+                        const uatomic_t flags = atomic_load(&nPresetFlags);
+                        if (atomic_cas(&nPresetFlags, flags, mode & (~PT_LOCK))) // Unlock the state
+                            break;
+                        ipc::Thread::yield();
+                    }
+                };
+
+                core::copy_preset_state(&sPresetState, state);
+            }
+
+            // Mark state changed if data was transferred from UI
+            if (mode == PT_UI)
+                state_changed();
+
+            lsp_trace("this=%p, mode=0x%x", this, int(mode));
+        }
+
+        bool Wrapper::fetch_preset_state(core::preset_state_t *state, bool force)
+        {
+            {
+                // Lock the state
+                while (true)
+                {
+                    // We can fetch data only if it is in PT_STATE state or fetch is forced
+                    const uatomic_t flags = atomic_load(&nPresetFlags);
+                    if ((!force) && ((flags & PT_TYPE) != PT_STATE))
+                        return false;
+                    if (!(flags & PT_LOCK))
+                    {
+                        if (atomic_cas(&nPresetFlags, flags, flags | PT_LOCK))
+                            break;
+                    }
+                    ipc::Thread::yield();
+                }
+
+                // State is locked
+                lsp_finally {
+                    while (true)
+                    {
+                        const uatomic_t flags = atomic_load(&nPresetFlags);
+                        if (atomic_cas(&nPresetFlags, flags, flags & (~(PT_LOCK | PT_TYPE)))) // Unlock the state
+                            break;
+                        ipc::Thread::yield();
+                    }
+                };
+
+                // Now we have locked state
+                core::copy_preset_state(state, &sPresetState);
+            }
+
+            lsp_trace("this=%p, name=%s, flags=0x%x, tab=%d",
+                this, state->name, state->flags, state->tab);
+            return true;
+        }
+
+        status_t Wrapper::serialize_preset_settings(const clap_ostream_t *os)
+        {
+            core::preset_state_t state;
+
+            {
+                // Lock the atomic state
+                while (true)
+                {
+                    const uatomic_t flags = atomic_load(&nPresetFlags);
+                    if (!(flags & PT_LOCK))
+                    {
+                        if (atomic_cas(&nPresetFlags, flags, flags | PT_LOCK))
+                            break;
+                    }
+                    ipc::Thread::yield();
+                }
+
+                // Now we have locked state
+                lsp_finally {
+                    while (true)
+                    {
+                        const uatomic_t flags = atomic_load(&nPresetFlags);
+                        if (atomic_cas(&nPresetFlags, flags, flags & (~PT_LOCK))) // Unlock the state
+                            break;
+                        ipc::Thread::yield();
+                    }
+                };
+
+                // Fetch the value
+                core::copy_preset_state(&state, &sPresetState);
+            }
+
+            lsp_trace("this=%p, name=%s, flags=0x%x, tab=%d, mode=0x%x",
+                this, state.name, state.flags, state.tab);
+
+            // Serialize stuff
+            status_t res;
+            if ((res = write_string(os, "!preset_settings")) != STATUS_OK)
+                return res;
+
+            return write_preset_state(os, &state);
+        }
+
     } /* namespace clap */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/ui_ports.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/ui_ports.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/ui_ports.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/ui_ports.h	2025-08-26 18:15:48.077961054 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-comp-delay
  * Created on: 5 янв. 2023 г.
@@ -68,14 +68,16 @@ namespace lsp
         class UIParameterPort: public UIPort
         {
             protected:
-                float           fValue;
-                uatomic_t       nSID;
-                bool           *bRqFlag;
+                ui::IPresetManager *pManager;
+                float               fValue;
+                uatomic_t           nSID;
+                bool               *bRqFlag;
 
             public:
-                explicit UIParameterPort(clap::ParameterPort *port, bool *rq_flag):
+                explicit UIParameterPort(clap::ParameterPort *port, bool *rq_flag, ui::IPresetManager *manager):
                     UIPort(port->metadata(), port)
                 {
+                    pManager    = manager;
                     fValue      = pMetadata->start;
                     nSID        = port->sid() - 1;
                     bRqFlag     = rq_flag;
@@ -100,15 +102,25 @@ namespace lsp
 
                 virtual void set_value(float value) override
                 {
-                    fValue = meta::limit_value(pMetadata, value);
+                    lsp_trace("this=%p, id=%s, value=%f", this, id(), value);
+                    value = meta::limit_value(pMetadata, value);
+                    if (value == fValue)
+                        return;
+
+					fValue	= value;
                     if (bRqFlag != NULL)
                         *bRqFlag    = true;
-
                     if (pPort == NULL)
                         return;
 
                     clap::ParameterPort *port = static_cast<clap::ParameterPort *>(pPort);
                     port->write_value(value);
+
+                    if (pManager != NULL)
+                    {
+                        pManager->mark_active_preset_dirty();
+                        lsp_trace("mark_active_preset_dirty");
+                    }
                 }
 
                 virtual bool sync() override
@@ -135,7 +147,8 @@ namespace lsp
         class UIPortGroup: public UIParameterPort
         {
             public:
-                explicit UIPortGroup(clap::PortGroup *port, bool *rq_flag) : UIParameterPort(port, rq_flag)
+                explicit UIPortGroup(clap::PortGroup *port, bool *rq_flag, ui::IPresetManager *manager):
+                    UIParameterPort(port, rq_flag, manager)
                 {
                 }
 
@@ -330,11 +343,13 @@ namespace lsp
         class UIPathPort: public UIPort
         {
             private:
-                clap::path_t   *pPath;
+                ui::IPresetManager *pManager;
+                clap::path_t       *pPath;
 
             public:
-                explicit UIPathPort(clap::Port *port): UIPort(port->metadata(), port)
+                explicit UIPathPort(clap::Port *port, ui::IPresetManager *manager): UIPort(port->metadata(), port)
                 {
+                    pManager            = manager;
                     plug::path_t *path  = pPort->buffer<plug::path_t>();
                     if (path != NULL)
                         pPath               = static_cast<clap::path_t *>(path);
@@ -371,8 +386,12 @@ namespace lsp
 
                 virtual void write(const void *buffer, size_t size, size_t flags) override
                 {
-                    if (pPath != NULL)
-                        pPath->submit(static_cast<const char *>(buffer), size, true, flags);
+                    if (pPath == NULL)
+                        return;
+
+                    pPath->submit(static_cast<const char *>(buffer), size, true, flags);
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual void set_default() override
@@ -384,13 +403,16 @@ namespace lsp
         class UIStringPort: public UIPort
         {
             private:
+                ui::IPresetManager *pManager;
                 plug::string_t     *pValue;
                 char               *pData;
                 uint32_t            nSerial;
 
             public:
-                explicit UIStringPort(clap::Port *port): UIPort(port->metadata(), port)
+                explicit UIStringPort(clap::Port *port, ui::IPresetManager *manager): UIPort(port->metadata(), port)
                 {
+                    pManager                = manager;
+
                     clap::StringPort *sp    = static_cast<clap::StringPort *>(port);
                     pValue                  = sp->data();
                     pData                   = (pValue != NULL) ? reinterpret_cast<char *>(malloc(pValue->max_bytes() + 1)) : NULL;
@@ -455,6 +477,9 @@ namespace lsp
                     nSerial = pValue->submit(buffer, size, flags & plug::PF_STATE_RESTORE);
                     lsp_trace("Submitted id=%s, count=%d, buffer=%s, size=%d, value=%s",
                         id(), int(count), buffer, int(size), pData);
+
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual void set_default() override
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/ui_wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/ui_wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/ui_wrapper.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/ui_wrapper.h	2025-08-26 18:15:48.077961054 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 5 янв. 2023 г.
@@ -27,6 +27,7 @@
 #include <clap/clap.h>
 #include <lsp-plug.in/common/status.h>
 #include <lsp-plug.in/ipc/Mutex.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
 #include <lsp-plug.in/plug-fw/meta/manifest.h>
 #include <lsp-plug.in/plug-fw/ui.h>
 #include <lsp-plug.in/plug-fw/wrap/clap/extensions.h>
@@ -105,6 +106,7 @@ namespace lsp
                 virtual bool                    accept_window_size(tk::Window *wnd, size_t width, size_t height) override;
                 virtual meta::plugin_format_t   plugin_format() const override;
                 virtual const core::ShmState   *shm_state() override;
+                virtual void                    send_preset_state(const core::preset_state_t *state) override;
 
             public: // CLAP API
                 bool                            set_scale(double scale);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/wrapper.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/clap/wrapper.h	2025-08-26 18:15:48.077961054 +0000
@@ -30,6 +30,7 @@
 #include <lsp-plug.in/lltl/parray.h>
 #include <lsp-plug.in/plug-fw/core/SamplePlayer.h>
 #include <lsp-plug.in/plug-fw/core/ShmClient.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
 #include <lsp-plug.in/plug-fw/meta/manifest.h>
 #include <lsp-plug.in/plug-fw/wrap/clap/extensions.h>
 #include <lsp-plug.in/plug-fw/wrap/clap/helpers.h>
@@ -60,6 +61,17 @@ namespace lsp
          */
         class Wrapper: public plug::IWrapper
         {
+            public:
+                enum preset_type_t
+                {
+                    PT_NONE     = 0,
+                    PT_UI       = 1,
+                    PT_STATE    = 2,
+
+                    PT_TYPE     = 0x000f,
+                    PT_LOCK     = 0x8000
+                };
+
             protected:
                 typedef struct audio_group_t
                 {
@@ -77,12 +89,14 @@ namespace lsp
                 const meta::package_t          *pPackage;           // Package metadata
                 clap::HostExtensions           *pExt;               // CLAP Extensions
                 ipc::IExecutor                 *pExecutor;          // Executor service
+                core::preset_state_t            sPresetState;       // Preset state
                 int32_t                         nLatency;           // The actual plugin latency
                 int32_t                         nTailSize;          // Tail size
                 uatomic_t                       nDumpReq;           // State dump request counter
                 uatomic_t                       nDumpResp;          // State dump response counter
                 uatomic_t                       nStateReq;          // Current version of the state
                 uatomic_t                       nStateResp;         // Last reported version of the state
+                uatomic_t                       nPresetFlags;       // Preset flags
 
             #ifdef WITH_UI_FEATURE
                 const meta::plugin_t           *pUIMetadata;        // UI metadata
@@ -132,7 +146,9 @@ namespace lsp
                 status_t        generate_audio_port_groups(const meta::plugin_t *meta);
                 clap::ParameterPort  *find_param(clap_id param_id);
                 size_t          prepare_block(size_t *ev_index, size_t offset, const clap_process_t *process);
+                void            process_transport_event(const clap_event_transport_t *ev);
                 void            generate_output_events(size_t offset, const clap_process_t *process);
+                status_t        serialize_preset_settings(const clap_ostream_t *os);
 
         #ifdef WITH_UI_FEATURE
             protected:
@@ -211,6 +227,8 @@ namespace lsp
                 inline core::SamplePlayer      *sample_player();
                 void                            request_state_dump();
                 inline HostExtensions          *extensions();
+                void                            set_preset_state(const core::preset_state_t *state, size_t mode);
+                bool                            fetch_preset_state(core::preset_state_t *state, bool force);
 
         #ifdef WITH_UI_FEATURE
             public:
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/common/libpath.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/common/libpath.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/common/libpath.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/common/libpath.h	2025-08-26 18:15:48.077961054 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 22 янв. 2021 г.
@@ -36,6 +36,7 @@
 
 namespace lsp
 {
+#if defined(PLATFORM_LINUX) || defined(PLATFORM_BSD)
     typedef struct getlibpath_path_t
     {
         char      **paths;
@@ -229,6 +230,7 @@ namespace lsp
             buf->size  += n;
         }
     }
+#endif
 
 #if defined(PLATFORM_LINUX)
     /**
@@ -390,10 +392,14 @@ namespace lsp
      */
     static char **get_library_paths(const char **exclude)
     {
+#if defined(PLATFORM_LINUX)
+        char **res = NULL;
+        if (getlibpath_proc(&res, exclude))
+            return res;
+#elif defined(PLATFORM_BSD)
         char **res = NULL;
         if (getlibpath_proc(&res, exclude))
             return res;
-#if defined(PLATFORM_BSD)
         if (getlibpath_procstat(&res, exclude))
             return res;
 #endif /* PLATFORM_BSD */
@@ -437,7 +443,7 @@ namespace lsp
 
         return path;
     }
-}
+} /* namespace lsp */
 
 
 #endif /* LSP_PLUG_IN_PLUG_FW_WRAP_COMMON_LIBPATH_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/gstreamer/impl/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/gstreamer/impl/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/gstreamer/impl/wrapper.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/gstreamer/impl/wrapper.h	2025-08-26 18:15:48.081961014 +0000
@@ -981,7 +981,7 @@ namespace lsp
                 for (size_t i=0, n=vSink.size(); i<n; ++i)
                 {
                     gst::AudioPort *p = vSink.uget(i);
-                    if (i < n)
+                    if (i < nFrameSize)
                     {
                         if (bInterleaved)
                             p->deinterleave(&in_buf[offset*nChannels + i], nChannels, to_do);
@@ -1023,7 +1023,7 @@ namespace lsp
                 for (size_t i=0, n=vSource.size(); i<n; ++i)
                 {
                     gst::AudioPort *p = vSource.uget(i);
-                    if (i < n)
+                    if (i < nFrameSize)
                     {
                         if (bInterleaved)
                             p->interleave(&out_buf[offset*nChannels + i], nChannels, to_do);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/impl/ui_wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/impl/ui_wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/impl/ui_wrapper.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/impl/ui_wrapper.h	2025-08-26 18:15:48.081961014 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 31 янв. 2022 г.
@@ -261,19 +261,22 @@ namespace lsp
                     break;
 
                 case meta::R_PATH:
-                    jup     = new jack::UIPathPort(jp);
+                    jup     = new jack::UIPathPort(jp, this);
                     break;
 
                 case meta::R_STRING:
                 case meta::R_SEND_NAME:
                 case meta::R_RETURN_NAME:
-                    jup     = new jack::UIStringPort(jp);
+                    jup     = new jack::UIStringPort(jp, this);
                     vSyncPorts.add(jup);
                     break;
 
                 case meta::R_CONTROL:
+                    jup     = new jack::UIControlPort(jp, this);
+                    break;
+
                 case meta::R_BYPASS:
-                    jup     = new jack::UIControlPort(jp);
+                    jup     = new jack::UIControlPort(jp, NULL);
                     break;
 
                 case meta::R_METER:
@@ -285,7 +288,7 @@ namespace lsp
                 {
                     LSPString postfix_str;
                     jack::PortGroup *pg     = static_cast<jack::PortGroup *>(jp);
-                    jack::UIPortGroup *upg  = new jack::UIPortGroup(pg);
+                    jack::UIPortGroup *upg  = new jack::UIPortGroup(pg, this);
                     vPorts.add(upg);
 
                     for (size_t row=0; row<pg->rows(); ++row)
@@ -396,14 +399,19 @@ namespace lsp
             }
 
             // Transfer the values of the ports to the UI
-            size_t sync = vSyncPorts.size();
-            for (size_t i=0; i<sync; ++i)
+            if (pWrapper->lock_meters_soft())
             {
-                jack::UIPort *jup   = vSyncPorts.uget(i);
-                do {
-                    if (jup->sync())
-                        jup->notify_all(ui::PORT_NONE);
-                } while (jup->sync_again());
+                lsp_finally { pWrapper->unlock_meters(); };
+
+                size_t sync = vSyncPorts.size();
+                for (size_t i=0; i<sync; ++i)
+                {
+                    jack::UIPort *jup   = vSyncPorts.uget(i);
+                    do {
+                        if (jup->sync())
+                            jup->notify_all(ui::PORT_NONE);
+                    } while (jup->sync_again());
+                }
             }
 
             // Synchronize KVT state
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/impl/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/impl/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/impl/wrapper.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/impl/wrapper.h	2025-08-26 18:15:48.081961014 +0000
@@ -31,10 +31,12 @@ namespace lsp
 {
     namespace jack
     {
-        Wrapper::Wrapper(jack::Factory *factory, plug::Module *plugin, resource::ILoader *loader): IWrapper(plugin, loader)
+        Wrapper::Wrapper(jack::Factory *factory, plug::Module *plugin, resource::ILoader *loader, const wrapper_info_t *info):
+            IWrapper(plugin, loader)
         {
             pFactory        = factory;
             pClient         = NULL;
+            sClientName     = (info->client_name != NULL) ? strdup(info->client_name) : NULL;
             nState          = S_CREATED;
             bUpdateSettings = true;
             nLatency        = 0;
@@ -48,6 +50,8 @@ namespace lsp
             atomic_store(&nDumpReq, 0);
             nDumpResp       = 0;
 
+            atomic_init(nLockMeters);
+
             pSamplePlayer   = NULL;
             pShmClient      = NULL;
 
@@ -57,6 +61,11 @@ namespace lsp
         Wrapper::~Wrapper()
         {
             pClient         = NULL;
+            if (sClientName != NULL)
+            {
+                free(sClientName);
+                sClientName     = NULL;
+            }
             nState          = S_CREATED;
             nLatency        = 0;
             pExecutor       = NULL;
@@ -213,11 +222,24 @@ namespace lsp
 
         status_t Wrapper::connect()
         {
-            // Ensure that client identifier is not longer than jack_client_name_size()
-            size_t max_client_size  = jack_client_name_size();
-            char *client_name       = static_cast<char *>(alloca(max_client_size));
-            strncpy(client_name, pPlugin->metadata()->uid, max_client_size);
-            client_name[max_client_size-1] = '\0';
+            // Init client identifier and ensure that it is not longer than jack_client_name_size()
+            char *client_name       = NULL;
+            lsp_finally {
+                if (client_name != NULL)
+                    free(client_name);
+            };
+            {
+                const size_t max_client_size  = jack_client_name_size();
+                client_name         = static_cast<char *>(malloc(max_client_size));
+                if (client_name == NULL)
+                    return STATUS_NO_MEM;
+
+                strncpy(
+                    client_name,
+                    (sClientName != NULL) ? sClientName : pPlugin->metadata()->uid,
+                    max_client_size);
+                client_name[max_client_size-1] = '\0';
+            }
 
             // Check connection state
             switch (nState)
@@ -429,6 +451,19 @@ namespace lsp
                 if (dp != NULL)
                     dp->after_process(samples);
             }
+
+            // Commit meters
+            if (lock_meters())
+            {
+                lsp_finally { unlock_meters(); };
+                for (size_t i=0, n=vMeters.size(); i<n; ++i)
+                {
+                    jack::MeterPort *mp = vMeters.uget(i);
+                    if (mp != NULL)
+                        mp->commit();
+                }
+            }
+
             return 0;
         }
 
@@ -510,6 +545,7 @@ namespace lsp
                 delete p;
             }
             vParams.flush();
+            vMeters.flush();
             vAllPorts.flush();
             vSortedPorts.flush();
 
@@ -603,8 +639,12 @@ namespace lsp
                     break;
 
                 case meta::R_METER:
-                    jp      = new jack::MeterPort(port, this);
+                {
+                    jack::MeterPort *mp = new jack::MeterPort(port, this);
+                    vMeters.add(mp);
+                    jp      = mp;
                     break;
+                }
 
                 case meta::R_PORT_SET:
                 {
@@ -1159,6 +1199,35 @@ namespace lsp
             return true;
         }
 
+        bool Wrapper::lock_meters()
+        {
+            for (size_t i=0; i<10; ++i)
+            {
+                if (atomic_trylock(nLockMeters))
+                    return true;
+            }
+
+            return false;
+        }
+
+        bool Wrapper::lock_meters_soft()
+        {
+            for (size_t i=0; i<10; ++i)
+            {
+                if (atomic_trylock(nLockMeters))
+                    return true;
+                if (i & 1)
+                    ipc::Thread::yield();
+            }
+
+            return false;
+        }
+
+        void Wrapper::unlock_meters()
+        {
+            atomic_unlock(nLockMeters);
+        }
+
         bool Wrapper::test_display_draw()
         {
             uatomic_t last      = atomic_load(&nQueryDrawReq);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/main/posix.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/main/posix.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/main/posix.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/main/posix.h	2025-08-26 18:15:48.081961014 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 22 янв. 2021 г.
@@ -438,7 +438,8 @@ int main(int argc, const char **argv)
     lsp::IPluginLoop *loop = NULL;
     lsp::status_t res = factory(&loop, JACK_PLUGIN_UID, argc, argv);
     if (res != lsp::STATUS_OK)
-        return -res;
+        return (res == lsp::STATUS_CANCELLED) ? 0 : -res;
+
     lsp_finally {
         if (loop != NULL)
             delete loop;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/ports.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/ports.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/ports.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/ports.h	2025-08-26 18:15:48.081961014 +0000
@@ -487,12 +487,14 @@ namespace lsp
         {
             private:
                 float       fValue;
+                float       fUIValue;
                 bool        bForce;
 
             public:
                 explicit MeterPort(const meta::port_t *meta, Wrapper *w) : Port(meta, w)
                 {
                     fValue      = meta->start;
+                    fUIValue    = fValue;
                     bForce      = true;
                 }
 
@@ -529,12 +531,16 @@ namespace lsp
                         fValue = value;
                 }
 
+                void commit()
+                {
+                    fUIValue        = fValue;
+                    bForce          = pMetadata->flags & meta::F_PEAK;
+                }
+
             public:
                 float sync_value()
                 {
-                    float value = fValue;
-                    bForce  = true;
-                    return value;
+                    return fUIValue;
                 }
         };
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/types.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/types.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/types.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/types.h	2025-08-26 18:15:48.081961014 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 26 нояб. 2020 г.
@@ -41,6 +41,11 @@ namespace lsp
             const char *dst;
         } connection_t;
 
+        typedef struct wrapper_info_t
+        {
+            const char *client_name;
+        } wrapper_info_t;
+
         typedef struct path_t: public plug::path_t
         {
             enum flags_t
@@ -157,30 +162,18 @@ namespace lsp
 
         inline plug::mesh_t *create_mesh(const meta::port_t *meta)
         {
-            size_t buffers      = meta->step;
-            size_t buf_size     = meta->start * sizeof(float);
-            size_t mesh_size    = sizeof(plug::mesh_t) + sizeof(float *) * buffers;
-
-            // Align values to 64-byte boundaries
-            buf_size            = align_size(buf_size, OPTIMAL_ALIGN);
-            mesh_size           = align_size(mesh_size, OPTIMAL_ALIGN);
+            const size_t buffers    = meta->step;
+            const size_t buf_size   = align_size(meta->start * sizeof(float), 0x40);
+            const size_t mesh_size  = align_size(sizeof(plug::mesh_t) + sizeof(float *) * buffers, 0x40);
 
             // Allocate pointer
-            uint8_t *ptr        = static_cast<uint8_t *>(malloc(mesh_size + buf_size * buffers));
+            uint8_t *ptr            = static_cast<uint8_t *>(malloc(mesh_size + buf_size * buffers));
             if (ptr == NULL)
                 return NULL;
 
-            // Initialize references
-            plug::mesh_t *mesh  = reinterpret_cast<plug::mesh_t *>(ptr);
-            mesh->nState        = plug::M_EMPTY;
-            mesh->nBuffers      = 0;
-            mesh->nItems        = 0;
-            ptr                += mesh_size;
-            for (size_t i=0; i<buffers; ++i)
-            {
-                mesh->pvData[i]    = reinterpret_cast<float *>(ptr);
-                ptr                += buf_size;
-            }
+            // Initialize mesh
+            plug::mesh_t *mesh      = advance_ptr_bytes<plug::mesh_t>(ptr, mesh_size);
+            mesh->init(reinterpret_cast<float *>(ptr), buffers, buf_size / sizeof(float));
 
             return mesh;
         }
@@ -190,8 +183,8 @@ namespace lsp
             if (mesh != NULL)
                 free(mesh);
         }
-    }
-}
+    } /* namespace jack */
+} /* namespace lsp */
 
 
 #endif /* LSP_PLUG_IN_PLUG_FW_WRAP_JACK_TYPES_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/ui_ports.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/ui_ports.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/ui_ports.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/ui_ports.h	2025-08-26 18:15:48.081961014 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 29 янв. 2021 г.
@@ -67,12 +67,14 @@ namespace lsp
         class UIControlPort: public UIPort
         {
             protected:
-                float           fValue;
+                float                   fValue;
+                ui::IPresetManager     *pManager;
 
             public:
-                explicit UIControlPort(jack::Port *port): UIPort(port)
+                explicit UIControlPort(jack::Port *port, ui::IPresetManager *manager): UIPort(port)
                 {
                     fValue      = port->value();
+                    pManager    = manager;
                 }
 
                 UIControlPort(const UIControlPort &) = delete;
@@ -94,17 +96,22 @@ namespace lsp
 
                 virtual void set_value(float value) override
                 {
-                    fValue  = meta::limit_value(pMetadata, value);
+                    value = meta::limit_value(pMetadata, value);
+                    if (value == fValue)
+                        return;
+
+                    fValue  = value;
                     pPort->commit_value(fValue);
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual void write(const void *buffer, size_t size) override
                 {
-                    if (size == sizeof(float))
-                    {
-                        fValue  = *static_cast<const float *>(buffer);
-                        pPort->commit_value(fValue);
-                    }
+                    if (size != sizeof(float))
+                        return;
+
+                    set_value(*static_cast<const float *>(buffer));
                 }
         };
 
@@ -114,7 +121,7 @@ namespace lsp
                 jack::PortGroup        *pPG;
 
             public:
-                explicit UIPortGroup(jack::PortGroup *port) : UIControlPort(port)
+                explicit UIPortGroup(jack::PortGroup *port, ui::IPresetManager *manager) : UIControlPort(port, manager)
                 {
                     pPG                 = port;
                 }
@@ -160,14 +167,8 @@ namespace lsp
                 virtual bool sync() override
                 {
                     float value = fValue;
-
-                    if (pMetadata->flags & meta::F_PEAK)
-                    {
-                        jack::MeterPort *mp = static_cast<jack::MeterPort *>(pPort);
-                        fValue      = mp->sync_value();
-                    }
-                    else
-                        fValue      = pPort->value();
+                    jack::MeterPort *mp = static_cast<jack::MeterPort *>(pPort);
+                    fValue      = mp->sync_value();
 
                     return fValue != value;
                 }
@@ -404,12 +405,15 @@ namespace lsp
         class UIPathPort: public UIPort
         {
             private:
-                jack::path_t   *pPath;
-                char            sPath[PATH_MAX];
+                ui::IPresetManager *pManager;
+                jack::path_t       *pPath;
+                char                sPath[PATH_MAX];
 
             public:
-                explicit UIPathPort(jack::Port *port): UIPort(port)
+                explicit UIPathPort(jack::Port *port, ui::IPresetManager *manager): UIPort(port)
                 {
+                    pManager                = manager;
+
                     plug::path_t *path      = pPort->buffer<plug::path_t>();
                     pPath                   = (path != NULL) ? static_cast<jack::path_t *>(path) : NULL;
                     sPath[0]                = '\0';
@@ -444,6 +448,9 @@ namespace lsp
                     ::memcpy(sPath, buffer, size);
                     sPath[size] = '\0';
 
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
+
                     // Submit path string to DSP
                     if (pPath != NULL)
                         pPath->submit(sPath, flags);
@@ -458,13 +465,16 @@ namespace lsp
         class UIStringPort: public UIPort
         {
             private:
+                ui::IPresetManager *pManager;
                 plug::string_t     *pValue;
                 char               *pData;
                 uint32_t            nSerial;
 
             public:
-                explicit UIStringPort(jack::Port *port): UIPort(port)
+                explicit UIStringPort(jack::Port *port, ui::IPresetManager *manager): UIPort(port)
                 {
+                    pManager                = manager;
+
                     jack::StringPort *sp    = static_cast<jack::StringPort *>(port);
                     pValue                  = sp->data();
                     pData                   = (pValue != NULL) ? reinterpret_cast<char *>(malloc(pValue->max_bytes() + 1)) : NULL;
@@ -509,6 +519,9 @@ namespace lsp
                     const size_t count = lsp_min(size, pValue->nCapacity);
                     plug::utf8_strncpy(pData, count, buffer, size);
                     nSerial = pValue->submit(buffer, size, flags & plug::PF_STATE_RESTORE);
+
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual void set_default() override
@@ -521,6 +534,9 @@ namespace lsp
 
                     plug::utf8_strncpy(pData, pValue->nCapacity, text);
                     write(pData, strlen(pData), plug::PF_PRESET_IMPORT);
+
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual bool sync() override
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/wrapper.h	2025-03-01 12:42:57.436644521 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/jack/wrapper.h	2025-08-26 18:15:48.081961014 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 26 нояб. 2020 г.
@@ -46,11 +46,12 @@ namespace lsp
 {
     namespace jack
     {
-        class Port;
-        class DataPort;
         class AudioBufferPort;
-        class StringPort;
+        class DataPort;
         class Factory;
+        class MeterPort;
+        class Port;
+        class StringPort;
 
         /**
          * Wrapper for the plugin module
@@ -93,6 +94,7 @@ namespace lsp
             private:
                 jack::Factory                  *pFactory;           // Factory for shared resources
                 jack_client_t                  *pClient;            // JACK connection client
+                char                           *sClientName;        // JACK client name
                 state_t                         nState;             // Connection state to JACK server
                 bool                            bUpdateSettings;    // Plugin settings are required to be updated
                 ssize_t                         nLatency;           // The actual latency of device
@@ -107,12 +109,14 @@ namespace lsp
                 uatomic_t                       nQueryDrawResp;     // QueryDraw response
                 uatomic_t                       nDumpReq;           // Dump state to file request
                 uatomic_t                       nDumpResp;          // Dump state to file response
+                uatomic_t                       nLockMeters;        // Meters lock
 
                 core::SamplePlayer             *pSamplePlayer;      // Sample player
                 core::ShmClient                *pShmClient;         // Shared memory client
 
                 lltl::parray<jack::Port>        vAllPorts;          // All ports
                 lltl::parray<jack::Port>        vParams;            // All input parameters
+                lltl::parray<jack::MeterPort>   vMeters;            // Meters
                 lltl::parray<jack::Port>        vSortedPorts;       // Alphabetically-sorted ports
                 lltl::parray<jack::DataPort>    vDataPorts;         // Data ports (audio, MIDI)
                 lltl::parray<jack::AudioBufferPort> vAudioBuffers;  // Audio buffers
@@ -139,7 +143,7 @@ namespace lsp
                 static bool     set_port_value(jack::Port *port, const config::param_t *param, size_t flags, const io::Path *base);
 
             public:
-                explicit Wrapper(jack::Factory *factory, plug::Module *plugin, resource::ILoader *loader);
+                explicit Wrapper(jack::Factory *factory, plug::Module *plugin, resource::ILoader *loader, const wrapper_info_t *info);
                 Wrapper(const Wrapper &) = delete;
                 Wrapper(Wrapper &&) = delete;
                 virtual ~Wrapper() override;
@@ -150,6 +154,7 @@ namespace lsp
                 status_t                            init();
                 void                                destroy();
 
+
             public: // plug::IWrapper
                 virtual ipc::IExecutor             *executor() override;
                 virtual void                        query_display_draw() override;
@@ -174,6 +179,10 @@ namespace lsp
                 void                                set_routing(const lltl::darray<connection_t> *routing);
                 status_t                            disconnect();
 
+                bool                                lock_meters();
+                bool                                lock_meters_soft();
+                void                                unlock_meters();
+
                 jack::Port                         *port_by_id(const char *id);
                 jack::Port                         *port_by_idx(size_t index);
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/extensions.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/extensions.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/extensions.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/extensions.h	2025-08-26 18:15:48.081961014 +0000
@@ -24,6 +24,7 @@
 
 #include <lsp-plug.in/common/alloc.h>
 #include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
 #include <lsp-plug.in/plug-fw/meta/types.h>
 #include <lsp-plug.in/plug-fw/meta/func.h>
 #include <lsp-plug.in/plug-fw/plug.h>
@@ -171,6 +172,13 @@ namespace lsp
                 LV2_URID                uridMaxBlockLength;
                 LV2_URID                uridScaleFactor;
 
+                // Preset-related URIDs
+                LV2_URID                uridPresetState;
+                LV2_URID                uridPresetStateType;
+                LV2_URID                uridPresetName;
+                LV2_URID                uridPresetFlags;
+                LV2_URID                uridPresetTab;
+
                 // OSC-related URIDs
                 LV2_URID                uridOscBundle;
                 LV2_URID                uridOscBundleTimetag;
@@ -356,6 +364,13 @@ namespace lsp
                     uridMaxBlockLength          = map_uri(LV2_BUF_SIZE__maxBlockLength);
                     uridScaleFactor             = map_uri(LV2_UI__scaleFactor);
 
+                    // Preset-related URIDs
+                    uridPresetState             = map_primitive("preset_state");
+                    uridPresetStateType         = map_type("PresetState");
+                    uridPresetName              = map_field("PresetState", "name");
+                    uridPresetFlags             = map_field("PresetState", "flags");
+                    uridPresetTab               = map_field("PresetState", "tab");
+
                     // OSC-related URIDs
                     uridOscBundle               = map_uri(LV2_OSC__Bundle);
                     uridOscBundleTimetag        = map_uri(LV2_OSC__bundleTimetag);
@@ -907,6 +922,85 @@ namespace lsp
                     write_data(nAtomOut, lv2_atom_total_size(msg), uridEventTransfer, msg);
                     return true;
                 }
+
+                LV2_Atom *ui_serialize_preset_state(LV2_Atom_Forge_Frame *frame, const core::preset_state_t *state)
+                {
+                    LV2_Atom *obj = forge_object(frame, uridPresetState, uridPresetStateType);
+                    {
+                        forge_key(uridPresetName);
+                        forge_string(state->name);
+                        forge_key(uridPresetFlags);
+                        forge_int(int32_t(state->flags));
+                        forge_key(uridPresetTab);
+                        forge_int(int32_t(state->tab));
+                    }
+                    forge_pop(frame);
+
+                    return obj;
+                }
+
+                bool deserialize_preset_state(core::preset_state_t *state, const LV2_Atom_Object_Body *obody, uint32_t p_type, size_t p_size)
+                {
+                    if ((p_type != forge.Object) && (p_type != uridBlank))
+                    {
+                        lsp_warn("Invalid preset atom type: %d = %s", int(p_type), unmap_urid(p_type));
+                        return false;
+                    }
+
+                    if (obody->otype != uridPresetStateType)
+                    {
+                        lsp_warn("Unsupported preset state object type: %d = %s", int(obody->otype), unmap_urid(obody->otype));
+                        return false;
+                    }
+
+                    state->name[0]    = '\0';
+                    state->flags      = core::PRESET_FLAG_NONE;
+                    state->tab        = 0;
+
+                    // Parse preset object
+                    for (
+                        LV2_Atom_Property_Body *item = lv2_atom_object_begin(obody) ;
+                        !lv2_atom_object_is_end(obody, p_size, item) ;
+                        item = lv2_atom_object_next(item)
+                    )
+                    {
+                        lsp_trace("item->key (%d) = %s", int(item->key), unmap_urid(item->key));
+                        lsp_trace("item->value.type (%d) = %s", int(item->value.type), unmap_urid(item->value.type));
+
+                        // Analyze type of value
+                        if ((item->key == uridPresetName) && (item->value.type == forge.String))
+                        {
+                            const LV2_Atom_String *value = reinterpret_cast<const LV2_Atom_String *>(&item->value);
+                            const char *name    = reinterpret_cast<const char *>(&value[1]);
+                            const size_t len    = lsp_min(strnlen(name, value->atom.size), core::PRESET_NAME_BYTES - 1);
+                            memcpy(state->name, name, len);
+                            state->name[len]    = '\0';
+                        }
+                        else if ((item->key == uridPresetFlags) && (item->value.type == forge.Int))
+                            state->flags        = reinterpret_cast<const LV2_Atom_Int *>(&item->value)->body;
+                        else if ((item->key == uridPresetTab) && (item->value.type == forge.Int))
+                            state->tab          = reinterpret_cast<const LV2_Atom_Int *>(&item->value)->body;
+                        else
+                            lsp_warn("Unknown preset state property: %d (%s)", item->key, unmap_urid(item->key));
+                    } // for (object body)
+
+                    return true;
+                }
+
+                bool ui_send_preset_state(const core::preset_state_t *state)
+                {
+                    if (map == NULL)
+                        return false;
+
+                    // Forge PATCH SET message
+                    LV2_Atom_Forge_Frame    frame;
+                    forge_set_buffer(pBuffer, nBufSize);
+
+                    forge_frame_time(0);
+                    LV2_Atom *msg = ui_serialize_preset_state(&frame, state);
+                    write_data(nAtomOut, lv2_atom_total_size(msg), uridEventTransfer, msg);
+                    return true;
+                }
         };
 
         #define PATCH_OVERHEAD  (sizeof(LV2_Atom_Property) + sizeof(LV2_Atom_URID) + sizeof(LV2_Atom) + 0x20)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/impl/ui_wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/impl/ui_wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/impl/ui_wrapper.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/impl/ui_wrapper.h	2025-08-26 18:15:48.085960977 +0000
@@ -255,7 +255,7 @@ namespace lsp
                 const meta::port_t *port = &latency_port;
                 if ((port->id != NULL) && (port->name != NULL))
                 {
-                    pLatency = new lv2::UIFloatPort(port, pExt, NULL);
+                    pLatency    = new lv2::UIMeterPort(port, pExt, NULL);
                     vPorts.add(pLatency);
                     nLatencyID  = vExtPorts.size();
                     if (pExt->atom_supported())
@@ -410,7 +410,7 @@ namespace lsp
                     break;
 
                 case meta::R_CONTROL:
-                    result = new lv2::UIFloatPort(p, pExt, (w != NULL) ? w->port(p->id) : NULL);
+                    result = new lv2::UIControlPort(p, pExt, (w != NULL) ? w->port(p->id) : NULL, this);
                     if (postfix == NULL)
                     {
                         result->set_id(vExtPorts.size());
@@ -428,7 +428,7 @@ namespace lsp
                     }
                     break;
                 case meta::R_METER:
-                    result = new lv2::UIPeakPort(p, pExt, (w != NULL) ? w->port(p->id) : NULL);
+                    result = new lv2::UIMeterPort(p, pExt, (w != NULL) ? w->port(p->id) : NULL);
                     if (postfix == NULL)
                     {
                         result->set_id(vExtPorts.size());
@@ -438,7 +438,7 @@ namespace lsp
                     break;
                 case meta::R_PATH:
                     if (pExt->atom_supported())
-                        result = new lv2::UIPathPort(p, pExt, (w != NULL) ? w->port(p->id) : NULL);
+                        result = new lv2::UIPathPort(p, pExt, (w != NULL) ? w->port(p->id) : NULL, this);
                     else
                         result = new lv2::UIPort(p, pExt); // Stub port
                     lsp_trace("Added path port id=%", p->id);
@@ -447,7 +447,7 @@ namespace lsp
                 case meta::R_SEND_NAME:
                 case meta::R_RETURN_NAME:
                     if (pExt->atom_supported())
-                        result = new lv2::UIStringPort(p, pExt, (w != NULL) ? w->port(p->id) : NULL);
+                        result = new lv2::UIStringPort(p, pExt, (w != NULL) ? w->port(p->id) : NULL, this);
                     else
                         result = new lv2::UIPort(p, pExt); // Stub port
                 #ifdef LSP_TRACE
@@ -492,7 +492,7 @@ namespace lsp
                 case meta::R_PORT_SET:
                 {
                     char postfix_buf[MAX_PARAM_ID_BYTES];
-                    lv2::UIPortGroup *pg    = new lv2::UIPortGroup(p, pExt, (w != NULL) ? w->port(p->id) : NULL);
+                    lv2::UIPortGroup *pg    = new lv2::UIPortGroup(p, pExt, (w != NULL) ? w->port(p->id) : NULL, this);
                     vPorts.add(pg);
                     lsp_trace("Added port_set port id=%", pg->metadata()->id);
 
@@ -868,6 +868,18 @@ namespace lsp
                     lsp_trace("Submitted new shm_state");
                 }
             }
+            else if (obj->body.otype == pExt->uridPresetStateType)
+            {
+                core::preset_state_t state;
+
+                if (pExt->deserialize_preset_state(&state, &obj->body, obj->atom.type, obj->atom.size))
+                {
+                    lsp_trace("Received preset state name='%s', flags=0x%x, tab=%d",
+                        state.name, int(state.flags), int(state.tab));
+
+                    receive_preset_state(&state);
+                }
+            }
             else
             {
                 lsp_trace("Received object");
@@ -1257,6 +1269,13 @@ namespace lsp
             return sShmState.get();
         }
 
+        void UIWrapper::send_preset_state(const core::preset_state_t *state)
+        {
+            // Send preset state to DSP
+            if (!pExt->ui_send_preset_state(state))
+                lsp_warn("failed to send preset state");
+        }
+
     } /* namespace lv2 */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/impl/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/impl/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/impl/wrapper.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/impl/wrapper.h	2025-08-26 18:15:48.085960977 +0000
@@ -83,6 +83,7 @@ namespace lsp
             bQueueDraw      = false;
             bUpdateSettings = true;
             bStateManage    = false;
+            bSendPreset     = false;
             fSampleRate     = DEFAULT_SAMPLE_RATE;
             pOscPacket      = reinterpret_cast<uint8_t *>(::malloc(OSC_PACKET_MAX));
             atomic_store(&nStateMode, SM_LOADING);
@@ -97,6 +98,8 @@ namespace lsp
 
             pShmClient      = NULL;
 
+            init_preset_state(&sPresetState);
+
             pFactory->acquire();
         }
 
@@ -981,6 +984,7 @@ namespace lsp
                 {
                     ++nClients;
                     ++nStateReqs;
+                    bSendPreset = true; // Mark that we need to send preset settings
                     atomic_add(&nShmReqs, 1);
                     lsp_trace("UI has connected, current number of clients=%d", int(nClients));
                     if (pKVTDispatcher != NULL)
@@ -1041,6 +1045,20 @@ namespace lsp
                     pSamplePlayer->play_sample(position, release);
                 }
             }
+            else if (obj->body.otype == pExt->uridPresetStateType)
+            {
+                core::preset_state_t state;
+                init_preset_state(&state);
+
+                if (pExt->deserialize_preset_state(&state, &obj->body, obj->atom.type, obj->atom.size))
+                {
+                    // Remember new preset settings, mark state as changed and reset transmission flag
+                    copy_preset_state(&sPresetState, &state);
+
+                    bSendPreset             = false;
+                    state_changed();
+                }
+            }
             else
             {
                 lsp_trace(
@@ -1306,7 +1324,7 @@ namespace lsp
                 pExt->forge_pop(&frame);
 
                 // Cleanup data of the mesh for refill
-                mesh->markEmpty();
+                mesh->mark_empty();
             }
 
             // Serialize streams (it's own primitive STREAM)
@@ -1459,6 +1477,34 @@ namespace lsp
             }
         }
 
+        void Wrapper::transmit_preset_settings_to_clients(const core::preset_state_t *state)
+        {
+            if (!bSendPreset)
+                return;
+
+            lsp_trace("Transmitting preset state preset='%s', flags=0x%x, tab=%d",
+                state->name, int(state->flags), int(state->tab));
+
+            LV2_Atom_Forge_Frame    frame;
+
+            pExt->forge_frame_time(0); // Event header
+            pExt->forge_object(&frame, pExt->uridPresetState, pExt->uridPresetStateType);
+
+            pExt->forge_key(pExt->uridPresetName);
+            pExt->forge_string(state->name);
+
+            pExt->forge_key(pExt->uridPresetFlags);
+            pExt->forge_int(state->flags);
+
+            pExt->forge_key(pExt->uridPresetTab);
+            pExt->forge_int(state->tab);
+
+            pExt->forge_pop(&frame);
+
+            // Reset send flag
+            bSendPreset     = false;
+        }
+
         void Wrapper::transmit_atoms(size_t samples)
         {
             // Get sequence
@@ -1535,6 +1581,7 @@ namespace lsp
                 transmit_port_data_to_clients(sync_req, patch_req, state_req);
             }
 
+            transmit_preset_settings_to_clients(&sPresetState);
             transmit_play_position_to_clients();
             transmit_shm_state_to_clients();
         }
@@ -1779,6 +1826,31 @@ namespace lsp
             pExt->store_value(pExt->uridKvtObject, msg->type, &msg[1], msg->size);
         }
 
+        void Wrapper::save_preset_state(const core::preset_state_t *state)
+        {
+            // We should use our own forge to prevent from race condition
+            LV2_Atom_Forge forge;
+            LV2_Atom_Forge_Frame frame;
+            lv2::lv2_sink   sink(0x100);
+
+            // Initialize sink
+            lv2_atom_forge_init(&forge, pExt->map);
+            lv2_atom_forge_set_sink(&forge, lv2_sink::sink, lv2_sink::deref, &sink);
+            lv2_atom_forge_object(&forge, &frame, 0, pExt->uridPresetStateType);
+            {
+                lv2_atom_forge_key(&forge, pExt->uridPresetName);
+                lv2_atom_forge_string(&forge, state->name, strlen(state->name));
+                lv2_atom_forge_key(&forge, pExt->uridPresetFlags);
+                lv2_atom_forge_int(&forge, int32_t(state->flags));
+                lv2_atom_forge_key(&forge, pExt->uridPresetTab);
+                lv2_atom_forge_int(&forge, int32_t(state->tab));
+            }
+            lv2_atom_forge_pop(&forge, &frame);
+
+            LV2_Atom *msg = reinterpret_cast<LV2_Atom *>(sink.buf);
+            pExt->store_value(pExt->uridPresetState, msg->type, &msg[1], msg->size);
+        }
+
         void Wrapper::save_state(
                 LV2_State_Store_Function   store,
                 LV2_State_Handle           handle,
@@ -1813,6 +1885,8 @@ namespace lsp
                 lvp->save();
             }
 
+            save_preset_state(&sPresetState);
+
             // Save state of all KVT parameters
             if (sKVTMutex.lock())
             {
@@ -1854,6 +1928,31 @@ namespace lsp
                 lsp_warn("Unsupported KVT property type: %s", pExt->unmap_urid(p_type));
         }
 
+        void Wrapper::restore_preset_state()
+        {
+            uint32_t p_type = 0;
+            size_t p_size = 0;
+            const void *ptr = pExt->retrieve_value(pExt->uridPresetState, &p_type, &p_size);
+            if (ptr == NULL)
+                return;
+
+            lsp_trace("Deserializing preset state");
+            lsp_trace("p_type = %d (%s), p_size = %d", int(p_type), pExt->unmap_urid(p_type), int(p_size));
+
+            core::preset_state_t state;
+            init_preset_state(&state);
+
+            if (pExt->deserialize_preset_state(&state, static_cast<const LV2_Atom_Object_Body *>(ptr), p_type, p_size))
+            {
+                lsp_trace("Restored preset state preset='%s', flags=0x%x, tab=%d",
+                    state.name, int(state.flags), int(state.tab));
+
+                // Now state has been parsed, we can mark it as need for sync with UI
+                copy_preset_state(&sPresetState, &state);
+                bSendPreset         = true;
+            }
+        }
+
         void Wrapper::parse_kvt_v2(const LV2_Atom *data, size_t size)
         {
             for (const LV2_Atom *item = data;
@@ -2180,6 +2279,9 @@ namespace lsp
                 sKVTMutex.unlock();
             }
 
+            // Restore preset state
+            restore_preset_state();
+
             // Update the state
             pExt->reset_state_context();
             atomic_store(&nStateMode, SM_LOADING);
@@ -2209,6 +2311,8 @@ namespace lsp
             // Increment number of clients
             ++nDirectClients;
             atomic_add(&nShmReqs, 1);
+            bSendPreset = true;
+
             if (pKVTDispatcher != NULL)
                 pKVTDispatcher->connect_client();
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ports.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ports.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ports.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ports.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 20 нояб. 2021 г.
@@ -657,7 +657,7 @@ namespace lsp
                     }
 
                     // Set mesh waiting until next frame is allowed
-                    mesh->setWaiting();
+                    mesh->set_waiting();
                 }
         };
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/static.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/static.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/static.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/static.h	2025-08-26 18:15:48.085960977 +0000
@@ -33,15 +33,15 @@ namespace lsp
         // Latency ports' metadata for LV2 plugins
         static const meta::port_t latency_port =
         {
-            LSP_LV2_LATENCY_PORT, "Latency OUT", meta::U_NONE, meta::R_METER, meta::F_INT | meta::F_LOWER | meta::F_UPPER, 0, MAX_SAMPLE_RATE, 0, 0, NULL
+            LSP_LV2_LATENCY_PORT, "Latency OUT", "Latency", meta::U_NONE, meta::R_METER, meta::F_INT | meta::F_LOWER | meta::F_UPPER, 0, MAX_SAMPLE_RATE, 0, 0, NULL, NULL, NULL
         };
 
         // Atom ports' metadata for LV2 plugins
         static const meta::port_t atom_ports[] =
         {
             // Input and output ATOM ports
-            { LSP_LV2_ATOM_PORT_IN,     "UI Input",     meta::U_NONE,         meta::R_AUDIO_IN,  0, 0, 0, 0, 0, NULL       },
-            { LSP_LV2_ATOM_PORT_OUT,    "UI Output",    meta::U_NONE,         meta::R_AUDIO_OUT, 0, 0, 0, 0, 0, NULL       },
+            { LSP_LV2_ATOM_PORT_IN,     "UI Input",     "UI Input",     meta::U_NONE,         meta::R_AUDIO_IN,  0, 0, 0, 0, 0, NULL, NULL, NULL },
+            { LSP_LV2_ATOM_PORT_OUT,    "UI Output",    "UI Output",    meta::U_NONE,         meta::R_AUDIO_OUT, 0, 0, 0, 0, 0, NULL, NULL, NULL },
 
             { NULL, NULL }
         };
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/types.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/types.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/types.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/types.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 12 нояб. 2021 г.
@@ -79,57 +79,35 @@ namespace lsp
             ~lv2_mesh_t()
             {
                 // Simply delete root structure
-                if (pData != NULL)
-                {
-                    delete [] (pData);
-                    pData       = NULL;
-                }
+                free_aligned(pData);
                 pMesh       = NULL;
             }
 
             void init(const meta::port_t *meta)
             {
                 // Calculate sizes
-                nBuffers            = meta->step;
-                nMaxItems           = meta->start;
+                nBuffers                = meta->step;
+                nMaxItems               = meta->start;
 
-                size_t hdr_size     = align_size(sizeof(plug::mesh_t) + sizeof(float *) * nBuffers, DEFAULT_ALIGN);
-                size_t urid_size    = align_size(sizeof(LV2_URID) * nBuffers, DEFAULT_ALIGN);
-                size_t buf_size     = align_size(sizeof(float) * nMaxItems, DEFAULT_ALIGN);
-                size_t to_alloc     = hdr_size + urid_size + buf_size * nBuffers;
-
-                lsp_trace("buffers = %d, max_items=%d, hdr_size=%d, urid_size=%d, buf_size=%d, to_alloc=%d",
-                        int(nBuffers), int(nMaxItems), int(hdr_size), int(urid_size), int(buf_size), int(to_alloc));
-                pData               = new uint8_t[to_alloc + DEFAULT_ALIGN];
-                if (pData == NULL)
-                    return;
-                uint8_t *ptr        = align_ptr(pData, DEFAULT_ALIGN);
-                pMesh               = reinterpret_cast<plug::mesh_t *>(ptr);
-                ptr                += hdr_size;
-
-                lsp_trace("ptr = %p, pMesh = %p", ptr, pMesh);
-
-                for (size_t i=0; i<nBuffers; ++i)
-                {
-                    lsp_trace("bufs[%d] = %p", int(i), ptr);
-                    pMesh->pvData[i]    = reinterpret_cast<float *>(ptr);
-                    ptr                += buf_size;
-                }
-
-                lsp_assert(ptr <= &pData[to_alloc + DEFAULT_ALIGN]);
-
-                pMesh->nState       = plug::M_WAIT;
-                pMesh->nBuffers     = 0;
-                pMesh->nItems       = 0;
+                const size_t hdr_size   = align_size(sizeof(plug::mesh_t) + sizeof(float *) * nBuffers, 0x40);
+                const size_t buf_size   = align_size(sizeof(float) * nMaxItems, 0x40);
+                const size_t to_alloc   = hdr_size + buf_size * nBuffers;
+
+                lsp_trace("buffers = %d, max_items=%d, hdr_size=%d, buf_size=%d, to_alloc=%d",
+                    int(nBuffers), int(nMaxItems), int(hdr_size), int(buf_size), int(to_alloc));
 
-                lsp_trace("Initialized");
+                uint8_t *ptr            = alloc_aligned<uint8_t>(pData, to_alloc, DEFAULT_ALIGN);
+                if (ptr == NULL)
+                    return;
+                pMesh                   = advance_ptr_bytes<plug::mesh_t>(ptr, hdr_size);
+                pMesh->init(reinterpret_cast<float *>(ptr), nBuffers, buf_size / sizeof(float), plug::M_WAIT);
             }
 
             static size_t size_of_port(const meta::port_t *meta)
             {
-                size_t hdr_size     = sizeof(LV2_Atom_Int) + sizeof(LV2_Atom_Int) + 0x100; // Some extra bytes
-                size_t prop_size    = sizeof(uint32_t) * 2;
-                size_t vector_size  = prop_size + sizeof(LV2_Atom_Vector) + meta->start * sizeof(float);
+                size_t hdr_size         = sizeof(LV2_Atom_Int) + sizeof(LV2_Atom_Int) + 0x100; // Some extra bytes
+                size_t prop_size        = sizeof(uint32_t) * 2;
+                size_t vector_size      = prop_size + sizeof(LV2_Atom_Vector) + meta->start * sizeof(float);
 
                 return LSP_LV2_SIZE_PAD(size_t(hdr_size + vector_size * meta->step));
             }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ui_ports.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ui_ports.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ui_ports.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ui_ports.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 20 нояб. 2021 г.
@@ -66,18 +66,21 @@ namespace lsp
         class UIPortGroup: public UIPort
         {
             protected:
-                size_t          nRows;
-                size_t          nCols;
-                size_t          nCurrRow;
-                lv2::Port      *pPort;
+                size_t              nRows;
+                size_t              nCols;
+                size_t              nCurrRow;
+                lv2::Port          *pPort;
+                ui::IPresetManager *pManager;
 
             public:
-                UIPortGroup(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *port) : UIPort(meta, ext)
+                UIPortGroup(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *port, ui::IPresetManager *manager):
+                    UIPort(meta, ext)
                 {
                     nCurrRow            = meta->start;
                     nRows               = list_size(meta->items);
                     nCols               = port_list_size(meta->members);
                     pPort               = port;
+                    pManager            = manager;
 
                     if (port != NULL)
                     {
@@ -100,11 +103,14 @@ namespace lsp
                 virtual void set_value(float value) override
                 {
                     size_t new_value = meta::limit_value(pMetadata, value);
-                    if ((new_value >= 0) && (new_value < nRows) && (new_value != nCurrRow))
+                    if ((new_value < nRows) && (new_value != nCurrRow))
                     {
                         nCurrRow        = new_value;
                         lsp_trace("writing patch event id=%s, value=%d", pMetadata->id, int(new_value));
                         pExt->ui_write_patch(this);
+
+                        if (pManager != NULL)
+                            pManager->mark_active_preset_dirty();
                     }
                 }
 
@@ -131,37 +137,39 @@ namespace lsp
                 inline size_t cols() const  { return nCols; }
         };
 
-        class UIFloatPort: public UIPort
+        class UIControlPort: public UIPort
         {
             protected:
-                float           fValue;
-                bool            bForce;
-                lv2::Port      *pPort;
+                ui::IPresetManager *pManager;
+                float               fValue;
+                bool                bForce;
+                lv2::Port          *pPort;
 
             public:
-                explicit UIFloatPort(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *port) :
+                explicit UIControlPort(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *port, ui::IPresetManager *manager) :
                     UIPort(meta, ext)
                 {
-                    fValue      = meta->start;
-                    pPort       = port;
+                    pManager        = manager;
+                    fValue          = meta->start;
+                    pPort           = port;
                     if (port != NULL)
                     {
-                        lsp_trace("Connected direct float port id=%s", port->metadata()->id);
+                        lsp_trace("Connected direct control port id=%s", port->metadata()->id);
                         fValue      = port->value();
                     }
-                    bForce      = port != NULL;
+                    bForce          = port != NULL;
                 }
 
-                UIFloatPort(const UIFloatPort &) = delete;
-                UIFloatPort(UIFloatPort &&) = delete;
+                UIControlPort(const UIControlPort &) = delete;
+                UIControlPort(UIControlPort &&) = delete;
 
-                virtual ~UIFloatPort() override
+                virtual ~UIControlPort() override
                 {
                     fValue  =   pMetadata->start;
                 }
 
-                UIFloatPort & operator = (const UIFloatPort &) = delete;
-                UIFloatPort & operator = (UIFloatPort &&) = delete;
+                UIControlPort & operator = (const UIControlPort &) = delete;
+                UIControlPort & operator = (UIControlPort &&) = delete;
 
             public:
                 virtual float value() override
@@ -171,7 +179,11 @@ namespace lsp
 
                 virtual void set_value(float value) override
                 {
-                    fValue      = meta::limit_value(pMetadata, value);
+                    value = meta::limit_value(pMetadata, value);
+                    if (fValue == value)
+                        return;
+
+                    fValue  = value;
                     if (nID >= 0)
                     {
                         // Use standard mechanism to access port
@@ -183,9 +195,12 @@ namespace lsp
                         lsp_trace("writing patch event id=%s, value=%f", pMetadata->id, fValue);
                         pExt->ui_write_patch(this);
                     }
+
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
-                virtual LV2_URID        get_type_urid() const override
+                virtual LV2_URID get_type_urid() const override
                 {
                     return pExt->forge.Float;
                 }
@@ -226,11 +241,11 @@ namespace lsp
                 }
         };
 
-        class UIBypassPort: public UIFloatPort
+        class UIBypassPort: public UIControlPort
         {
             public:
                 explicit UIBypassPort(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *port) :
-                    UIFloatPort(meta, ext, port)
+                    UIControlPort(meta, ext, port, NULL)
                 {
                 }
 
@@ -242,7 +257,11 @@ namespace lsp
             public:
                 virtual void set_value(float value) override
                 {
-                    fValue      = meta::limit_value(pMetadata, value);
+                    value       = meta::limit_value(pMetadata, value);
+                    if (value == fValue)
+                        return;
+
+                    fValue      = value;
                     if (nID >= 0)
                     {
                         // Use standard mechanism to access port
@@ -276,28 +295,75 @@ namespace lsp
                 }
         };
 
-        class UIPeakPort: public UIFloatPort
+        class UIMeterPort: public UIPort
         {
+            protected:
+                float               fValue;
+                bool                bForce;
+                lv2::Port          *pPort;
+
             public:
-                explicit UIPeakPort(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *port) :
-                    UIFloatPort(meta, ext, port) {}
+                explicit UIMeterPort(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *port) :
+                    UIPort(meta, ext)
+                {
+                    fValue          = meta->start;
+                    pPort           = port;
+                    if (port != NULL)
+                    {
+                        lsp_trace("Connected direct meter port id=%s", port->metadata()->id);
+                        fValue      = port->value();
+                    }
+                    bForce          = port != NULL;
+                }
 
-                UIPeakPort(const UIPeakPort &) = delete;
-                UIPeakPort(UIPeakPort &&) = delete;
-                UIPeakPort & operator = (const UIPeakPort &) = delete;
-                UIPeakPort & operator = (UIPeakPort &&) = delete;
+                UIMeterPort(const UIMeterPort &) = delete;
+                UIMeterPort(UIMeterPort &&) = delete;
+                UIMeterPort & operator = (const UIMeterPort &) = delete;
+                UIMeterPort & operator = (UIMeterPort &&) = delete;
 
             public:
+                virtual float value() override
+                {
+                    return fValue;
+                }
+
+                virtual LV2_URID get_type_urid() const override
+                {
+                    return pExt->forge.Float;
+                }
+
+                virtual void deserialize(const void *data) override
+                {
+                    const LV2_Atom_Float *atom = reinterpret_cast<const LV2_Atom_Float *>(data);
+                    fValue      = meta::limit_value(pMetadata, atom->body);
+                }
+
                 virtual void notify(const void *buffer, size_t protocol, size_t size) override
                 {
                     if (size == sizeof(LV2UI_Peak_Data))
-                    {
                         fValue = meta::limit_value(pMetadata, (reinterpret_cast<const LV2UI_Peak_Data *>(buffer))->peak);
-                        return;
-                    }
-                    UIFloatPort::notify(buffer, protocol, size);
+                    else if (size == sizeof(float))
+                        fValue = meta::limit_value(pMetadata, *(reinterpret_cast<const float *>(buffer)));
     //                lsp_trace("id=%s, value=%f", pMetadata->id, fValue);
                 }
+
+                virtual bool sync() override
+                {
+                    if ((pPort == NULL) || (nID >= 0))
+                        return false;
+
+                    float old   = fValue;
+                    fValue      = meta::limit_value(pMetadata, pPort->value());
+                    bool synced = (fValue != old) || bForce;
+                    bForce      = false;
+
+                #ifdef LSP_TRACE
+                    if (synced)
+                        lsp_trace("Directly received float port id=%s, value=%f",
+                            pPort->metadata()->id, fValue);
+                #endif
+                    return synced;
+                }
         };
 
         class UIMeshPort: public UIPort
@@ -777,13 +843,15 @@ namespace lsp
         class UIPathPort: public UIPort
         {
             protected:
+                ui::IPresetManager *pManager;
                 lv2::PathPort      *pPort;
                 char                sPath[PATH_MAX];
 
             public:
-                explicit UIPathPort(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *xport):
+                explicit UIPathPort(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *xport, ui::IPresetManager *manager):
                     UIPort(meta, ext)
                 {
+                    pManager    = manager;
                     sPath[0]    = '\0';
                     pPort       = NULL;
 
@@ -858,6 +926,9 @@ namespace lsp
                         "writing patch event id=%s, path=%s (%d)",
                         pMetadata->id, static_cast<const char *>(buffer), int(size));
                     pExt->ui_write_patch(this);
+
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual void write(const void* buffer, size_t size) override
@@ -895,17 +966,20 @@ namespace lsp
         class UIStringPort: public UIPort
         {
             protected:
+                ui::IPresetManager *pManager;
                 plug::string_t     *pValue;
                 char               *pData;
                 uint32_t            nCapacity;
                 uint32_t            nSerial;
 
             public:
-                explicit UIStringPort(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *xport):
+                explicit UIStringPort(const meta::port_t *meta, lv2::Extensions *ext, lv2::Port *xport, ui::IPresetManager *manager):
                     UIPort(meta, ext)
                 {
+                    pManager                = manager;
+
                     lv2::StringPort *sp     = (xport != NULL) ? static_cast<lv2::StringPort *>(xport) : NULL;
-                    if (xport != NULL)
+                    if (sp != NULL)
                     {
                         pValue                  = sp->data();
                         nCapacity               = pValue->max_bytes();
@@ -915,6 +989,7 @@ namespace lsp
                     {
                         pValue                  = NULL;
                         nCapacity               = size_t(meta->max) * 4;
+                        nSerial                 = 0;
                     }
 
                     // Allocate buffer to store value
@@ -972,6 +1047,9 @@ namespace lsp
                         "writing patch event id=%s, value=%s (%d)",
                         pMetadata->id, static_cast<const char *>(buffer), int(size));
                     pExt->ui_write_patch(this);
+
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual void write(const void* buffer, size_t size) override
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ui_wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ui_wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ui_wrapper.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/ui_wrapper.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 24 нояб. 2021 г.
@@ -127,6 +127,7 @@ namespace lsp
                 virtual meta::plugin_format_t   plugin_format() const override;
                 virtual bool                    window_resized(tk::Window *wnd, size_t width, size_t height) override;
                 virtual const core::ShmState   *shm_state() override;
+                virtual void                    send_preset_state(const core::preset_state_t *state) override;
         };
     } /* namespace lv2 */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/wrapper.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/wrapper.h	2025-08-26 18:15:48.085960977 +0000
@@ -107,6 +107,7 @@ namespace lsp
                 bool                    bQueueDraw;     // Queue draw request
                 bool                    bUpdateSettings;// Settings update
                 bool                    bStateManage;   // State management barrier
+                bool                    bSendPreset;    // Need to send preset state to UI
                 float                   fSampleRate;
                 uint8_t                *pOscPacket;     // OSC packet data
                 uatomic_t               nStateMode;     // State change flag
@@ -125,13 +126,17 @@ namespace lsp
 
                 core::ShmClient        *pShmClient;         // Shared memory client
 
+                core::preset_state_t    sPresetState;       // Preset state
+
                 LV2_Inline_Display_Image_Surface sSurface;  // Canvas surface
 
             protected:
                 lv2::Port                      *create_port(lltl::parray<plug::IPort> *plugin_ports, const meta::port_t *meta, const char *postfix, bool virt);
                 void                            clear_midi_ports();
                 void                            save_kvt_parameters();
+                void                            save_preset_state(const core::preset_state_t *state);
                 void                            restore_kvt_parameters();
+                void                            restore_preset_state();
 
                 void                            parse_kvt_v1(const LV2_Atom_Object_Body *data, size_t size);
                 void                            parse_kvt_v2(const LV2_Atom *data, size_t size);
@@ -147,6 +152,7 @@ namespace lsp
                 void                            transmit_osc_events(lv2::Port *p);
                 void                            transmit_kvt_events();
                 void                            transmit_atoms(size_t samples);
+                void                            transmit_preset_settings_to_clients(const core::preset_state_t *state);
 
                 void                            receive_midi_event(const LV2_Atom_Event *ev);
                 void                            receive_raw_osc_event(osc::parse_frame_t *frame);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/helpers.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/helpers.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/helpers.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/helpers.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 7 дек. 2021 г.
@@ -38,30 +38,18 @@ namespace lsp
     {
         inline plug::mesh_t *create_mesh(const meta::port_t *meta)
         {
-            size_t buffers      = meta->step;
-            size_t buf_size     = meta->start * sizeof(float);
-            size_t mesh_size    = sizeof(plug::mesh_t) + sizeof(float *) * buffers;
-
-            // Align values to 64-byte boundaries
-            buf_size            = align_size(buf_size, 0x40);
-            mesh_size           = align_size(mesh_size, 0x40);
+            const size_t buffers    = meta->step;
+            const size_t buf_size   = align_size(meta->start * sizeof(float), 0x40);
+            const size_t mesh_size  = align_size(sizeof(plug::mesh_t) + sizeof(float *) * buffers, 0x40);
 
             // Allocate pointer
-            uint8_t *ptr        = new uint8_t[mesh_size + buf_size * buffers];
+            uint8_t *ptr            = static_cast<uint8_t *>(malloc(mesh_size + buf_size * buffers));
             if (ptr == NULL)
                 return NULL;
 
-            // Initialize references
-            plug::mesh_t *mesh  = reinterpret_cast<plug::mesh_t *>(ptr);
-            mesh->nState        = plug::M_EMPTY;
-            mesh->nBuffers      = 0;
-            mesh->nItems        = 0;
-            ptr                += mesh_size;
-            for (size_t i=0; i<buffers; ++i)
-            {
-                mesh->pvData[i]     = reinterpret_cast<float *>(ptr);
-                ptr                += buf_size;
-            }
+            // Initialize mesh
+            plug::mesh_t *mesh      = advance_ptr_bytes<plug::mesh_t>(ptr, mesh_size);
+            mesh->init(reinterpret_cast<float *>(ptr), buffers, buf_size / sizeof(float));
 
             return mesh;
         }
@@ -69,7 +57,7 @@ namespace lsp
         inline void destroy_mesh(plug::mesh_t *mesh)
         {
             if (mesh != NULL)
-                delete [] reinterpret_cast<uint8_t *>(mesh);
+                free(mesh);
         }
 
         inline ssize_t serialize_string(const char *str, uint8_t *buf, size_t len)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/impl/ui_wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/impl/ui_wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/impl/ui_wrapper.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/impl/ui_wrapper.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 12 дек. 2021 г.
@@ -102,40 +102,44 @@ namespace lsp
 
                 case meta::R_PATH:
                     lsp_trace("creating path port %s", port->id);
-                    vup = new vst2::UIPathPort(port, vp);
+                    vup = new vst2::UIPathPort(port, vp, this);
                     break;
 
                 case meta::R_STRING:
                     lsp_trace("creating string port %s", port->id);
-                    vup = new vst2::UIStringPort(port, vp);
+                    vup = new vst2::UIStringPort(port, vp, this);
                     break;
 
                 case meta::R_SEND_NAME:
                     lsp_trace("creating send name port %s", port->id);
-                    vup = new vst2::UIStringPort(port, vp);
+                    vup = new vst2::UIStringPort(port, vp, this);
                     break;
 
                 case meta::R_RETURN_NAME:
                     lsp_trace("creating return name port %s", port->id);
-                    vup = new vst2::UIStringPort(port, vp);
+                    vup = new vst2::UIStringPort(port, vp, this);
                     break;
 
                 case meta::R_CONTROL:
-                case meta::R_METER:
+                    lsp_trace("creating control port %s", port->id);
+                    vup     = new vst2::UIParameterPort(port, static_cast<vst2::ParameterPort *>(vp), this);
+                    break;
+
                 case meta::R_BYPASS:
-                    lsp_trace("creating regular port %s", port->id);
-                    // VST specifies only INPUT parameters, output should be read in different way
-                    if (meta::is_out_port(port))
-                        vup     = new vst2::UIMeterPort(port, vp);
-                    else
-                        vup     = new vst2::UIParameterPort(port, static_cast<vst2::ParameterPort *>(vp));
+                    lsp_trace("creating bypass port %s", port->id);
+                    vup     = new vst2::UIParameterPort(port, static_cast<vst2::ParameterPort *>(vp), NULL);
+                    break;
+
+                case meta::R_METER:
+                    lsp_trace("creating meter port %s", port->id);
+                    vup     = new vst2::UIMeterPort(port, vp);
                     break;
 
                 case meta::R_PORT_SET:
                 {
                     char postfix_buf[MAX_PARAM_ID_BYTES], param_name[MAX_PARAM_ID_BYTES];
                     lsp_trace("creating port group %s", port->id);
-                    UIPortGroup *upg = new vst2::UIPortGroup(static_cast<vst2::PortGroup *>(vp));
+                    UIPortGroup *upg = new vst2::UIPortGroup(static_cast<vst2::PortGroup *>(vp), this);
 
                     // Add immediately port group to list
                     vPorts.add(upg);
@@ -302,6 +306,13 @@ namespace lsp
         void UIWrapper::main_iteration()
         {
             transfer_dsp_to_ui();
+            if (pWrapper != NULL)
+            {
+                core::preset_state_t state;
+                if (pWrapper->fetch_preset_state(&state, false))
+                    receive_preset_state(&state);
+            }
+
             IWrapper::main_iteration();
         }
 
@@ -500,6 +511,12 @@ namespace lsp
                 kvt_release();
             }
             transfer_dsp_to_ui();
+            if (pWrapper != NULL)
+            {
+                core::preset_state_t state;
+                if (pWrapper->fetch_preset_state(&state, true))
+                    receive_preset_state(&state);
+            }
 
             // Show the UI window
             tk::Window *wnd  = window();
@@ -707,6 +724,12 @@ namespace lsp
         {
             return (pWrapper != NULL) ? pWrapper->shm_state() : NULL;
         }
+
+        void UIWrapper::send_preset_state(const core::preset_state_t *state)
+        {
+            if (pWrapper != NULL)
+                pWrapper->set_preset_state(state, vst2::Wrapper::PT_STATE);
+        }
     } /* namespace vst2 */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/impl/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/impl/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/impl/wrapper.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/impl/wrapper.h	2025-08-26 18:15:48.085960977 +0000
@@ -69,6 +69,9 @@ namespace lsp
             pSamplePlayer   = NULL;
             pShmClient      = NULL;
 
+            core::init_preset_state(&sPresetState);
+            atomic_store(&nPresetFlags, PT_NONE);
+
             pFactory->acquire();
         }
 
@@ -743,11 +746,22 @@ namespace lsp
                 }
             }
 
+            // Serialize preset state
+            serialize_preset_state();
+            if (sChunk.res != STATUS_OK)
+            {
+                lsp_warn("Error serializing preset state code=%d", int(sChunk.res));
+                return sChunk.res;
+            }
+
             status_t res = STATUS_OK;
 
             // Serialize KVT storage
-            if (sKVTMutex.lock())
             {
+                if (!sKVTMutex.lock())
+                    return STATUS_BAD_STATE;
+                lsp_finally { sKVTMutex.unlock(); };
+
                 const core::kvt_param_t *p;
 
                 // Read the whole KVT storage
@@ -859,7 +873,6 @@ namespace lsp
                 }
 
                 sKVT.gc();
-                sKVTMutex.unlock();
             }
 
             return res;
@@ -1243,6 +1256,51 @@ namespace lsp
             }
         }
 
+        bool Wrapper::deserialize_special_variable(const char *name, const uint8_t *head, const uint8_t *tail)
+        {
+            lsp_trace("name = %s", name);
+            if (strcmp(name, "!preset_state") == 0)
+            {
+                core::preset_state_t state;
+                core::init_preset_state(&state);
+
+                // Read flags and tab
+                IF_UNALIGNED_MEMORY_SAFE(
+                    state.flags     = BE_TO_CPU(*advance_ptr<const uint32_t>(head, 1));
+                    state.tab       = BE_TO_CPU(*advance_ptr<const uint32_t>(head, 1));
+                )
+                IF_UNALIGNED_MEMORY_UNSAFE(
+                    uint32_t flags, tab;
+                    memcpy(&flags, advance_ptr_bytes<const uint8_t>(head, sizeof(uint32_t)), sizeof(uint32_t));
+                    memcpy(&tab, advance_ptr_bytes<const uint8_t>(head, sizeof(uint32_t)), sizeof(uint32_t));
+
+                    state.flags     = BE_TO_CPU(flags);
+                    state.tab       = BE_TO_CPU(tab);
+                )
+
+                // Read preset name
+                const char *pname   = reinterpret_cast<const char *>(head);
+                const size_t length = lsp_min(strnlen(pname, tail - head), core::PRESET_NAME_BYTES - 1);
+                memcpy(state.name, pname, length);
+                state.name[length + 1]  = '\0';
+
+                lsp_trace("preset name = %s, flags=0x%x, tab=%d", state.name, int(state.flags), int(state.tab));
+
+                head               += length + 1;
+                if (head <= tail)
+                {
+                    set_preset_state(&state, PT_STATE);
+                    return true;
+                }
+                else
+                    lsp_trace("Failed parsing preset state: head=%p > tail=%p", head, tail);
+            }
+            else
+                lsp_warn("Unknown special variable: %s, skipping", name);
+
+            return false;
+        }
+
         void Wrapper::deserialize_v2_v3(const uint8_t *data, size_t bytes)
         {
             const uint8_t *head = data;
@@ -1269,7 +1327,16 @@ namespace lsp
                     lsp_warn("Unexpected end of chunk while fetching parameter name");
                     return;
                 }
-                if (name[0] == '/') // This is KVT port?
+                else if (name[0] == '!')
+                {
+                    head       += len;
+                    if (!deserialize_special_variable(name, head, next))
+                        lsp_warn("Error deserializing special variable %s, skipping", name);
+
+                    head        = next;
+                    continue;
+                }
+                else if (name[0] == '/') // This is KVT parameter?
                 {
                     head               -= sizeof(uint32_t); // Rollback head pointer
                     break;
@@ -1304,8 +1371,11 @@ namespace lsp
 
             // Deserialize KVT state
             lsp_debug("Reading KVT ports...");
-            if (sKVTMutex.lock())
             {
+                if (!sKVTMutex.lock())
+                    return;
+                lsp_finally {sKVTMutex.unlock(); };
+
                 sKVT.clear();
 
                 while (size_t(tail - head) >= sizeof(uint32_t))
@@ -1429,7 +1499,6 @@ namespace lsp
                 }
 
                 sKVT.gc();
-                sKVTMutex.unlock();
             }
         }
 
@@ -1487,6 +1556,139 @@ namespace lsp
                 pMaster(pEffect, audioMasterUpdateDisplay, 0, 0, 0, 0);
         }
 
+        void Wrapper::set_preset_state(const core::preset_state_t *state, uint32_t mode)
+        {
+            lsp_trace("this=%p, name=%s, flags=0x%x, tab=%d, mode=%d",
+                this, state->name, state->flags, state->tab, int(mode));
+
+            {
+                // Lock the state
+                while (true)
+                {
+                    const uatomic_t flags = atomic_load(&nPresetFlags);
+                    if ((flags & PT_TYPE) > mode) // Leave if data has greater priority than submitted
+                    {
+                        lsp_trace("preset state not updated, flags=0x%x, mode=%d", int(flags), int(mode));
+                        return;
+                    }
+                    if (!(flags & PT_LOCK))
+                    {
+                        if (atomic_cas(&nPresetFlags, flags, flags | PT_LOCK))
+                            break;
+                    }
+                    ipc::Thread::yield();
+                }
+
+                // State is locked
+                lsp_finally {
+                    while (true)
+                    {
+                        const uatomic_t flags = atomic_load(&nPresetFlags);
+                        if (atomic_cas(&nPresetFlags, flags, mode & (~PT_LOCK))) // Unlock the state
+                            break;
+                        ipc::Thread::yield();
+                    }
+                };
+
+                core::copy_preset_state(&sPresetState, state);
+            }
+
+            // Mark state changed if data was transferred from UI
+            if (mode == PT_UI)
+                state_changed();
+
+            lsp_trace("this=%p, mode=0x%x", this, int(mode));
+        }
+
+        bool Wrapper::fetch_preset_state(core::preset_state_t *state, bool force)
+        {
+//            lsp_trace("this=%p, force=%s", this, (force) ? "true" : "false");
+
+            {
+                // Lock the state
+                while (true)
+                {
+                    // We can fetch data only if it is in PT_STATE state or fetch is forced
+                    const uatomic_t flags = atomic_load(&nPresetFlags);
+                    if ((!force) && ((flags & PT_TYPE) != PT_STATE))
+                        return false;
+                    if (!(flags & PT_LOCK))
+                    {
+                        if (atomic_cas(&nPresetFlags, flags, flags | PT_LOCK))
+                            break;
+                    }
+                    ipc::Thread::yield();
+                }
+
+                // State is locked
+                lsp_finally {
+                    while (true)
+                    {
+                        const uatomic_t flags = atomic_load(&nPresetFlags);
+                        if (atomic_cas(&nPresetFlags, flags, flags & (~(PT_LOCK | PT_TYPE)))) // Unlock the state
+                            break;
+                        ipc::Thread::yield();
+                    }
+                };
+
+                // Now we have locked state
+                core::copy_preset_state(state, &sPresetState);
+            }
+
+            lsp_trace("this=%p, name=%s, flags=0x%x, tab=%d",
+                this, state->name, state->flags, state->tab);
+            return true;
+        }
+
+        void Wrapper::serialize_preset_state()
+        {
+//            lsp_trace("this=%p", this);
+
+            core::preset_state_t state;
+
+            {
+                // Lock the atomic state
+                while (true)
+                {
+                    const uatomic_t flags = atomic_load(&nPresetFlags);
+                    if (!(flags & PT_LOCK))
+                    {
+                        if (atomic_cas(&nPresetFlags, flags, flags | PT_LOCK))
+                            break;
+                    }
+                    ipc::Thread::yield();
+                }
+
+                // Now we have locked state
+                lsp_finally {
+                    while (true)
+                    {
+                        const uatomic_t flags = atomic_load(&nPresetFlags);
+                        if (atomic_cas(&nPresetFlags, flags, flags & (~PT_LOCK))) // Unlock the state
+                            break;
+                        ipc::Thread::yield();
+                    }
+                };
+
+                // Fetch the value
+                core::copy_preset_state(&state, &sPresetState);
+            }
+
+            // Serialize stuff
+            size_t param_off   = sChunk.write(uint32_t(0)); // Reserve space for size
+            if (param_off != 0)
+            {
+                sChunk.write_string("!preset_state");           // Preset state object
+                sChunk.write(state.flags);
+                sChunk.write(state.tab);
+                sChunk.write_string(state.name);
+                sChunk.write_at(param_off, uint32_t(sChunk.offset - param_off - sizeof(uint32_t))); // Write the actual size
+            }
+
+            lsp_trace("this=%p, name=%s, flags=0x%x, tab=%d, mode=0x%x",
+                this, state.name, state.flags, state.tab);
+        }
+
     } /* namespace vst2 */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ports.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ports.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ports.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ports.h	2025-08-26 18:15:48.085960977 +0000
@@ -420,10 +420,18 @@ namespace lsp
                 {
                     if (length < sizeof(float))
                         return -1;
-                    float value     = BE_TO_CPU(*(reinterpret_cast<const float *>(data)));
-                    write_value(value);
+
+                    float v;
+                    IF_UNALIGNED_MEMORY_SAFE(
+                        v           = BE_TO_CPU(*(reinterpret_cast<const float *>(data)));
+                    )
+                    IF_UNALIGNED_MEMORY_UNSAFE(
+                        memcpy(&v, data, sizeof(v));
+                        v           = BE_TO_CPU(v);
+                    )
+                    write_value(v);
                     atomic_add(&nSID, 1);
-                    return sizeof(float);
+                    return sizeof(v);
                 }
 
                 virtual bool deserialize_v2(const uint8_t *data, size_t size) override
@@ -431,7 +439,14 @@ namespace lsp
                     if (size < sizeof(float))
                         return false;
 
-                    float v         = BE_TO_CPU(*(reinterpret_cast<const float *>(data)));
+                    float v;
+                    IF_UNALIGNED_MEMORY_SAFE(
+                        v           = BE_TO_CPU(*(reinterpret_cast<const float *>(data)));
+                    )
+                    IF_UNALIGNED_MEMORY_UNSAFE(
+                        memcpy(&v, data, sizeof(v));
+                        v           = BE_TO_CPU(v);
+                    )
                     write_value(v);
                     atomic_add(&nSID, 1);
                     return true;
@@ -569,13 +584,20 @@ namespace lsp
                 {
                     if (length < sizeof(int32_t))
                         return -1;
-                    int32_t value   = BE_TO_CPU(*(reinterpret_cast<const int32_t *>(data)));
-                    if ((value >= 0) && (value < ssize_t(nRows)))
+                    int32_t v;
+                    IF_UNALIGNED_MEMORY_SAFE(
+                        v               = BE_TO_CPU(*(reinterpret_cast<const int32_t *>(data)));
+                    )
+                    IF_UNALIGNED_MEMORY_UNSAFE(
+                        memcpy(&v, data, sizeof(v));
+                        v               = BE_TO_CPU(v);
+                    )
+                    if ((v >= 0) && (v < ssize_t(nRows)))
                     {
-                        fValue          = value;
+                        fValue          = v;
                         atomic_add(&nSID, 1);
                     }
-                    return sizeof(int32_t);
+                    return sizeof(v);
                 }
 
                 virtual bool deserialize_v2(const uint8_t *data, size_t size) override
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ui_ports.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ui_ports.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ui_ports.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ui_ports.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 7 дек. 2021 г.
@@ -63,12 +63,14 @@ namespace lsp
         class UIPortGroup: public UIPort
         {
             private:
+                ui::IPresetManager     *pManager;
                 vst2::PortGroup        *pPG;
                 uatomic_t               nSID;
 
             public:
-                explicit UIPortGroup(vst2::PortGroup *port) : UIPort(port->metadata(), port)
+                explicit UIPortGroup(vst2::PortGroup *port, ui::IPresetManager *manager) : UIPort(port->metadata(), port)
                 {
+                    pManager            = manager;
                     pPG                 = port;
                     nSID                = port->sid() - 1;
                 }
@@ -86,7 +88,13 @@ namespace lsp
 
                 virtual void set_value(float value) override
                 {
+                    value               = limit_value(pMetadata, value);
+                    if (value == pPort->value())
+                        return;
+
                     pPort->set_value(value);
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual bool sync() override
@@ -107,13 +115,15 @@ namespace lsp
         class UIParameterPort: public UIPort
         {
             protected:
-                float           fValue;
-                uatomic_t       nSID;
+                ui::IPresetManager     *pManager;
+                float                   fValue;
+                uatomic_t               nSID;
 
             public:
-                explicit UIParameterPort(const meta::port_t *meta, vst2::ParameterPort *port):
+                explicit UIParameterPort(const meta::port_t *meta, vst2::ParameterPort *port, ui::IPresetManager *manager):
                     UIPort(meta, port)
                 {
+                    pManager    = manager;
                     fValue      = meta->start;
                     nSID        = port->sid() - 1;
                 }
@@ -137,9 +147,15 @@ namespace lsp
 
                 virtual void set_value(float value) override
                 {
-                    fValue = meta::limit_value(pMetadata, value);
+                    value = meta::limit_value(pMetadata, value);
+                    if (value == fValue)
+                        return;
+
+					fValue = value;
                     if (pPort != NULL)
                         pPort->write_value(value);
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual bool sync() override
@@ -327,11 +343,13 @@ namespace lsp
         class UIPathPort: public UIPort
         {
             private:
-                vst2::path_t   *pPath;
+                ui::IPresetManager *pManager;
+                vst2::path_t       *pPath;
 
             public:
-                explicit UIPathPort(const meta::port_t *meta, vst2::Port *port): UIPort(meta, port)
+                explicit UIPathPort(const meta::port_t *meta, vst2::Port *port, ui::IPresetManager *manager): UIPort(meta, port)
                 {
+                    pManager            = manager;
                     plug::path_t *path  = pPort->buffer<plug::path_t>();
                     if (path != NULL)
                         pPath               = static_cast<vst2::path_t *>(path);
@@ -368,8 +386,12 @@ namespace lsp
 
                 virtual void write(const void *buffer, size_t size, size_t flags) override
                 {
-                    if (pPath != NULL)
-                        pPath->submit(static_cast<const char *>(buffer), size, true, flags);
+                    if (pPath == NULL)
+                        return;
+
+                    pPath->submit(static_cast<const char *>(buffer), size, true, flags);
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual void set_default() override
@@ -381,13 +403,16 @@ namespace lsp
         class UIStringPort: public UIPort
         {
             private:
-                plug::string_t     *pValue;
-                char               *pData;
-                uint32_t            nSerial;
+                ui::IPresetManager     *pManager;
+                plug::string_t         *pValue;
+                char                   *pData;
+                uint32_t                nSerial;
 
             public:
-                explicit UIStringPort(const meta::port_t *meta, vst2::Port *port): UIPort(meta, port)
+                explicit UIStringPort(const meta::port_t *meta, vst2::Port *port, ui::IPresetManager *manager): UIPort(meta, port)
                 {
+                    pManager                = manager;
+
                     vst2::StringPort *sp    = static_cast<vst2::StringPort *>(port);
                     pValue                  = sp->data();
                     pData                   = (pValue != NULL) ? reinterpret_cast<char *>(malloc(pValue->max_bytes() + 1)) : NULL;
@@ -447,6 +472,9 @@ namespace lsp
                     const size_t count = lsp_min(size, pValue->nCapacity);
                     plug::utf8_strncpy(pData, count, buffer, size);
                     nSerial = pValue->submit(buffer, size, flags & plug::PF_STATE_RESTORE);
+
+                    if (pManager != NULL)
+                        pManager->mark_active_preset_dirty();
                 }
 
                 virtual void set_default() override
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ui_wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ui_wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ui_wrapper.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/ui_wrapper.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 12 дек. 2021 г.
@@ -76,7 +76,7 @@ namespace lsp
                 virtual status_t                init(void *root_widget) override;
                 virtual void                    destroy() override;
 
-            public: // plug::IWrapper
+            public: // ui::IWrapper
                 virtual core::KVTStorage       *kvt_lock() override;
                 virtual core::KVTStorage       *kvt_trylock() override;
                 virtual bool                    kvt_release() override;
@@ -86,6 +86,7 @@ namespace lsp
                 virtual status_t                play_file(const char *file, wsize_t position, bool release) override;
                 virtual meta::plugin_format_t   plugin_format() const override;
                 virtual const core::ShmState   *shm_state() override;
+                virtual void                    send_preset_state(const core::preset_state_t *state) override;
 
             public:
                 bool                            show_ui();
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/wrapper.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst2/wrapper.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 8 дек. 2021 г.
@@ -27,6 +27,7 @@
 #include <lsp-plug.in/plug-fw/core/KVTStorage.h>
 #include <lsp-plug.in/plug-fw/core/SamplePlayer.h>
 #include <lsp-plug.in/plug-fw/core/ShmClient.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
 #include <lsp-plug.in/plug-fw/meta/types.h>
 #include <lsp-plug.in/plug-fw/plug.h>
 #include <lsp-plug.in/plug-fw/wrap/vst2/chunk.h>
@@ -48,6 +49,16 @@ namespace lsp
             private:
                 friend class UIWrapper;
 
+                enum preset_type_t
+                {
+                    PT_NONE     = 0,
+                    PT_UI       = 1,
+                    PT_STATE    = 2,
+
+                    PT_TYPE     = 0x000f,
+                    PT_LOCK     = 0x8000
+                };
+
             private:
                 AEffect                            *pEffect;
                 vst2::Factory                      *pFactory;
@@ -69,6 +80,8 @@ namespace lsp
                 vst2::Port                         *pBypass;
                 core::SamplePlayer                 *pSamplePlayer;  // Sample player
                 core::ShmClient                    *pShmClient;     // Shared memory client
+                core::preset_state_t                sPresetState;   // Preset state
+                uatomic_t                           nPresetFlags;   // Preset flags
 
                 lltl::parray<vst2::AudioPort>       vAudioPorts;    // List of audio ports
                 lltl::parray<vst2::AudioBufferPort> vAudioBuffers;  // Audio buffer ports
@@ -98,6 +111,10 @@ namespace lsp
                 bool                        check_parameters_updated();
                 void                        apply_settings_update();
                 void                        report_latency();
+                void                        set_preset_state(const core::preset_state_t *state, uint32_t mode);
+                bool                        fetch_preset_state(core::preset_state_t *state, bool force);
+                bool                        deserialize_special_variable(const char *name, const uint8_t *head, const uint8_t *tail);
+                void                        serialize_preset_state();
 
             public:
                 Wrapper(
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/controller.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/controller.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/controller.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/controller.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 5 февр. 2024 г.
@@ -79,6 +79,7 @@ namespace lsp
                 lltl::parray<vst3::CtlParamPort>    vPlainParams;           // Input parameters (non-virtual) sorted according to the metadata order
                 lltl::parray<vst3::CtlParamPort>    vParams;                // Input parameters (non-virtual) sorted by unique parameter ID
                 lltl::parray<vst3::CtlMeterPort>    vMeters;                // Meters
+                core::preset_state_t                sPresetState;           // Preset state
 
             #ifdef WITH_UI_FEATURE
                 ipc::Mutex                          sWrappersLock;          // Lock of wrappers
@@ -103,9 +104,11 @@ namespace lsp
                 void                                parse_raw_osc_event(osc::parse_frame_t *frame);
                 status_t                            load_state(Steinberg::IBStream *is);
                 void                                send_kvt_state();
+                status_t                            deserialize_preset_state(core::preset_state_t *state, Steinberg::IBStream *is);
 
         #ifdef WITH_UI_FEATURE
             protected:
+                void                                receive_preset_state(ui::IWrapper *except);
                 ui::Module                         *create_ui();
         #endif /* WITH_UI_FEATURE */
 
@@ -138,11 +141,13 @@ namespace lsp
                 status_t                            play_file(const char *file, wsize_t position, bool release);
                 vst3::CtlPort                      *port_by_id(const char *id);
                 void                                dump_state_request();
+                void                                notify_preset_changed();
                 const core::ShmState               *shm_state();
 
         #ifdef WITH_UI_FEATURE
             public: // UI-related stuff
                 status_t                            detach_ui_wrapper(UIWrapper *wrapper);
+                void                                send_preset_state(UIWrapper *wrapper, const core::preset_state_t *state);
         #endif /* WITH_UI_FEATURE */
 
             public: // vst3::IDataSync
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/ctl_ports.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/ctl_ports.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/ctl_ports.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/ctl_ports.h	2025-08-26 18:15:48.085960977 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 6 февр. 2024 г.
@@ -203,8 +203,12 @@ namespace lsp
 
                 virtual void set_value(float value, size_t flags) override
                 {
+                    value       = meta::limit_value(pMetadata, value);
+                    if (value == fValue)
+                        return;
+
                     lsp_trace("id=%s, value=%f, handler=%p", pMetadata->id, value, pHandler);
-                    fValue      = meta::limit_value(pMetadata, value);
+                    fValue      = value;
                     if (pHandler != NULL)
                         pHandler->port_write(this, flags);
                 }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/data.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/data.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/data.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/data.h	2025-08-26 18:15:48.085960977 +0000
@@ -61,6 +61,7 @@ namespace lsp
         constexpr const char *ID_MSG_KVT                    = "KVT";
         constexpr const char *ID_MSG_ACTIVATE_UI            = "UIActivate";
         constexpr const char *ID_MSG_DEACTIVATE_UI          = "UIDeactivate";
+        constexpr const char *ID_MSG_PRESET_STATE           = "PresetState";
         constexpr const char *ID_MSG_PLAY_SAMPLE            = "PlaySample";
 
         constexpr const Steinberg::Vst::ParamID MIDI_MAPPING_PARAM_BASE = 0x40000000;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/event_handler.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/event_handler.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/event_handler.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/event_handler.h	2025-08-26 18:15:48.089960938 +0000
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 6 июл. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_WRAP_VST3_EVENT_HANDLER_H_
+#define LSP_PLUG_IN_PLUG_FW_WRAP_VST3_EVENT_HANDLER_H_
+
+#include <lsp-plug.in/plug-fw/version.h>
+
+#include <steinberg/vst3.h>
+
+#include <lsp-plug.in/lltl/parray.h>
+#include <lsp-plug.in/plug-fw/wrap/vst3/data.h>
+#include <lsp-plug.in/plug-fw/wrap/vst3/sync.h>
+
+#ifdef VST_USE_RUNLOOP_IFACE
+
+namespace lsp
+{
+    namespace vst3
+    {
+        class EventHandler: public Steinberg::Linux::IEventHandler
+        {
+            private:
+                uatomic_t                               nRefCounter;
+                IUISync                                *pHandler;
+
+            public:
+                EventHandler(IUISync *handler);
+                virtual ~EventHandler();
+                EventHandler(const EventHandler &) = delete;
+                EventHandler(EventHandler &&) = delete;
+
+                EventHandler & operator = (const EventHandler &) = delete;
+                EventHandler & operator = (EventHandler &&) = delete;
+
+            public: // Steinberg::FUnknown
+                virtual Steinberg::tresult PLUGIN_API queryInterface(const Steinberg::TUID _iid, void **obj) override;
+                virtual Steinberg::uint32 PLUGIN_API addRef() override;
+                virtual Steinberg::uint32 PLUGIN_API release() override;
+
+            public: // Steinberg::Linux::ITimerHandler
+                virtual void PLUGIN_API onFDIsSet(Steinberg::Linux::FileDescriptor fd) override;
+        };
+
+    } /* namespace vst3 */
+} /* namespace lsp */
+
+#endif /* VST_USE_RUNLOOP_IFACE */
+
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_WRAP_VST3_EVENT_HANDLER_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/factory.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/factory.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/factory.h	2025-03-01 12:42:57.440644496 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/factory.h	2025-08-26 18:15:48.089960938 +0000
@@ -67,7 +67,7 @@ namespace lsp
                 ipc::IExecutor                         *pExecutor;      // Offline task executor
                 ipc::Thread                            *pDataSync;      // Synchronization thread
                 meta::package_t                        *pPackage;       // Package manifest
-                volatile IDataSync                     *pActiveSync;    // Active data sync
+                void                                   *pActiveSync;    // Active data sync
                 lltl::ptrset<IDataSync>                 vDataSync;      // List of objects for synchronization
                 core::CatalogManager                    sCatalogManager;// Catalog management
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/helpers.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/helpers.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/helpers.h	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/helpers.h	2025-08-26 18:15:48.089960938 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 28 дек. 2023 г.
@@ -30,6 +30,7 @@
 #include <lsp-plug.in/common/status.h>
 #include <lsp-plug.in/io/charset.h>
 #include <lsp-plug.in/lltl/phashset.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
 #include <lsp-plug.in/plug-fw/meta/func.h>
 #include <lsp-plug.in/plug-fw/plug.h>
 #include <lsp-plug.in/runtime/LSPString.h>
@@ -269,15 +270,32 @@ namespace lsp
             return STATUS_OK;
         }
 
+        inline status_t sizeof_varint(size_t value)
+        {
+            size_t szof = 0;
+            do {
+                ++szof;
+                value     >>= 7;
+            } while (value > 0);
+
+            return szof;
+        };
+
         /**
          * Write string to VST3 output stream
          * @param os VST3 output stream
          * @param s NULL-terminated string to write
          * @return number of actual bytes written or negative error code
          */
+        inline size_t sizeof_string(const char *s)
+        {
+            const size_t len = strlen(s);
+            return sizeof_varint(len) + len;
+        }
+
         inline status_t write_string(Steinberg::IBStream *os, const char *s)
         {
-            size_t len = strlen(s);
+            const size_t len = strlen(s);
 
             // Write variable-sized string length
             status_t res = write_varint(os, len);
@@ -324,31 +342,71 @@ namespace lsp
         }
 
         /**
-         * Write floating-point value to the stream
+         * Write named floating-point value to the stream
          * @param is output stream
          * @param key parameter name
+         * @param type parameter type
          * @param value parameter value
          * @return status of operation
          */
         template <class T>
-        inline status_t write_value(Steinberg::IBStream *is, const char *key, const T value)
+        inline status_t write_value(Steinberg::IBStream *is, const char *key, uint8_t type, const T value)
         {
             status_t res = write_string(is, key);
-            if (res == STATUS_OK)
-            {
-                T tmp   = CPU_TO_LE(value);
-                res     = write_fully(is, &tmp, sizeof(T));
-            }
-            return res;
+            if (res != STATUS_OK)
+                return res;
+
+            if ((res = write_fully(is, &type, sizeof(type))) != STATUS_OK)
+                return res;
+
+            T tmp   = CPU_TO_LE(value);
+            return write_fully(is, &tmp, sizeof(T));
         }
 
+        /**
+         * Write named string value to the stream
+         * @param is output stream
+         * @param key parameter name
+         * @param value parameter value
+         * @param type parameter type
+         * @return status of operation
+         */
         template <>
-        inline status_t write_value(Steinberg::IBStream *is, const char *key, const char *value)
+        inline status_t write_value(Steinberg::IBStream *is, const char *key, uint8_t type, const char *value)
         {
             status_t res = write_string(is, key);
-            if (res == STATUS_OK)
-                res = write_string(is, value);
-            return res;
+            if (res != STATUS_OK)
+                return res;
+
+            if ((res = write_fully(is, &type, sizeof(type))) != STATUS_OK)
+                return res;
+
+            return write_string(is, value);
+        }
+
+        /**
+         * Write single value to the stream
+         * @param is output stream
+         * @param value value to write
+         * @return status of operation
+         */
+        template <class T>
+        inline status_t write_single(Steinberg::IBStream *is, const T value)
+        {
+            T tmp   = CPU_TO_LE(value);
+            return write_fully(is, &tmp, sizeof(T));
+        }
+
+        /**
+         * Write single UTF-8 string to the stream
+         * @param is output stream
+         * @param value value to write
+         * @return status of operation
+         */
+        template <>
+        inline status_t write_single(Steinberg::IBStream *is, const char *value)
+        {
+            return write_string(is, value);
         }
 
         /**
@@ -623,30 +681,18 @@ namespace lsp
 
         inline plug::mesh_t *create_mesh(const meta::port_t *meta)
         {
-            size_t buffers      = meta->step;
-            size_t buf_size     = meta->start * sizeof(float);
-            size_t mesh_size    = sizeof(plug::mesh_t) + sizeof(float *) * buffers;
-
-            // Align values to 64-byte boundaries
-            buf_size            = align_size(buf_size, 0x40);
-            mesh_size           = align_size(mesh_size, 0x40);
+            const size_t buffers    = meta->step;
+            const size_t buf_size   = align_size(meta->start * sizeof(float), 0x40);
+            const size_t mesh_size  = align_size(sizeof(plug::mesh_t) + sizeof(float *) * buffers, 0x40);
 
             // Allocate pointer
-            uint8_t *ptr        = static_cast<uint8_t *>(malloc(mesh_size + buf_size * buffers));
+            uint8_t *ptr            = static_cast<uint8_t *>(malloc(mesh_size + buf_size * buffers));
             if (ptr == NULL)
                 return NULL;
 
-            // Initialize references
-            plug::mesh_t *mesh  = reinterpret_cast<plug::mesh_t *>(ptr);
-            mesh->nState        = plug::M_EMPTY;
-            mesh->nBuffers      = 0;
-            mesh->nItems        = 0;
-            ptr                += mesh_size;
-            for (size_t i=0; i<buffers; ++i)
-            {
-                mesh->pvData[i]     = reinterpret_cast<float *>(ptr);
-                ptr                += buf_size;
-            }
+            // Initialize mesh
+            plug::mesh_t *mesh      = advance_ptr_bytes<plug::mesh_t>(ptr, mesh_size);
+            mesh->init(reinterpret_cast<float *>(ptr), buffers, buf_size / sizeof(float));
 
             return mesh;
         }
@@ -1054,6 +1100,57 @@ namespace lsp
             return false;
         }
 
+        inline status_t serialize_preset_state(Steinberg::IBStream *os, const core::preset_state_t *state)
+        {
+            status_t res;
+
+            const size_t szof = sizeof(uint32_t) * 2 + sizeof_string(state->name);
+
+            // Serialize obtained preset state
+            if ((res = write_string(os, "!preset_state")) != STATUS_OK)
+                return res;
+            if ((res = write_varint(os, szof)) != STATUS_OK)
+                return res;
+            if ((res = write_single(os, uint32_t(state->flags))) != STATUS_OK)
+                return res;
+            if ((res = write_single(os, uint32_t(state->tab))) != STATUS_OK)
+                return res;
+            return write_string(os, state->name);
+        }
+
+        inline status_t deserialize_preset_state(core::preset_state_t *state, Steinberg::IBStream *is)
+        {
+            status_t res;
+            char *name = NULL;
+            size_t name_cap = 0;
+            lsp_finally {
+                if (name != NULL)
+                    free(name);
+            };
+
+            size_t in_szof = 0;
+            uint32_t flags = 0, tab = 0;
+            if ((res = read_varint(is, &in_szof)) != STATUS_OK)
+                return res;
+            if ((res = read_fully(is, &flags)) != STATUS_OK)
+                return res;
+            if ((res = read_fully(is, &tab)) != STATUS_OK)
+                return res;
+            if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
+                return res;
+
+            name_cap        = lsp_min(name_cap, core::PRESET_NAME_BYTES - 1);
+            core::init_preset_state(state);
+            state->flags    = flags;
+            state->tab      = tab;
+            memcpy(state->name, name, name_cap);
+            state->name[name_cap]   = '\0';
+
+            const size_t szof = sizeof(uint32_t) * 2 + sizeof_string(state->name);
+
+            return (szof == in_szof) ? STATUS_OK : STATUS_CORRUPTED;
+        }
+
     } /* namespace vst3 */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/controller.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/controller.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/controller.h	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/controller.h	2025-08-26 18:15:48.089960938 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 6 февр. 2024 г.
@@ -78,6 +78,8 @@ namespace lsp
             fScalingFactor      = -1.0f;
             bMidiMapping        = false;
             bMsgWorkaround      = false;
+
+            core::init_preset_state(&sPresetState);
         }
 
         Controller::~Controller()
@@ -288,11 +290,12 @@ namespace lsp
                 {
                     port_id,
                     port_desc,
+                    NULL,
                     meta::U_NONE,
                     meta::R_CONTROL,
                     meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
                     0.0f, 1.0f, 0.0f, 0.00001f,
-                    NULL, NULL
+                    NULL, NULL, NULL
                 };
 
                 // Generate ports for all possible control codes
@@ -519,11 +522,6 @@ namespace lsp
 
         Steinberg::tresult PLUGIN_API Controller::notify(Steinberg::Vst::IMessage *message)
         {
-            // Set-up DSP context
-            dsp::context_t ctx;
-            dsp::start(&ctx);
-            lsp_finally { dsp::finish(&ctx); };
-
             // Obtain the message data
             if (message == NULL)
                 return Steinberg::kInvalidArgument;
@@ -534,6 +532,11 @@ namespace lsp
             if (atts == NULL)
                 return Steinberg::kInvalidArgument;
 
+            // Set-up DSP context
+            dsp::context_t ctx;
+            dsp::start(&ctx);
+            lsp_finally { dsp::finish(&ctx); };
+
             // Analyze the message
             Steinberg::char8 key[32];
             Steinberg::int64 byte_order = VST3_BYTEORDER;
@@ -603,15 +606,18 @@ namespace lsp
 
             #ifdef WITH_UI_FEATURE
                 // Notify UI about position update
+                lltl::parray<UIWrapper> receivers;
                 if (sWrappersLock.lock())
                 {
                     lsp_finally { sWrappersLock.unlock(); };
-                    for (lltl::iterator<UIWrapper> it = vWrappers.values(); it; ++it)
-                    {
-                        UIWrapper *w = it.get();
-                        if (w != NULL)
-                            w->commit_position(&pos);
-                    }
+                    receivers.add(vWrappers);
+                }
+
+                for (lltl::iterator<UIWrapper> it = receivers.values(); it; ++it)
+                {
+                    UIWrapper *w = it.get();
+                    if (w != NULL)
+                        w->commit_position(&pos);
                 }
             #endif /* WITH_UI_FEATURE */
             }
@@ -628,15 +634,18 @@ namespace lsp
 
             #ifdef WITH_UI_FEATURE
                 // Notify UI about position update
+                lltl::parray<UIWrapper> receivers;
                 if (sWrappersLock.lock())
                 {
                     lsp_finally { sWrappersLock.unlock(); };
-                    for (lltl::iterator<UIWrapper> it = vWrappers.values(); it; ++it)
-                    {
-                        UIWrapper *w = it.get();
-                        if (w != NULL)
-                            w->set_play_position(position, length);
-                    }
+                    receivers.add(vWrappers);
+                }
+
+                for (lltl::iterator<UIWrapper> it = receivers.values(); it; ++it)
+                {
+                    UIWrapper *w = it.get();
+                    if (w != NULL)
+                        w->set_play_position(position, length);
                 }
             #endif /* WITH_UI_FEATURE */
             }
@@ -1025,6 +1034,38 @@ namespace lsp
                     sKVTMutex.unlock();
                 }
             }
+        #ifdef WITH_UI_FEATURE
+            else if (!strcmp(message_id, ID_MSG_PRESET_STATE))
+            {
+                // Get endianess
+                if (atts->getInt("endian", byte_order) != Steinberg::kResultOk)
+                    return Steinberg::kResultFalse;
+
+                Steinberg::int64 flags = 0, tab = 0;
+
+                if (atts->getInt("flags", flags) != Steinberg::kResultOk)
+                    return Steinberg::kResultFalse;
+                if (atts->getInt("tab", tab) != Steinberg::kResultOk)
+                    return Steinberg::kResultFalse;
+
+                // Read identifier of the mesh port
+                const char *name = sRxNotifyBuf.get_string(atts, "name", byte_order);
+                if (name == NULL)
+                    return Steinberg::kResultFalse;
+
+                lsp_trace("Received preset state flags=0x%x, tab=%d, name='%s'",
+                    int(flags), int(tab), name);
+
+                // Commit state
+                sPresetState.flags  = uint32_t(flags);
+                sPresetState.tab    = uint32_t(tab);
+                const size_t length = lsp_min(strnlen(name, core::PRESET_NAME_BYTES), core::PRESET_NAME_BYTES - 1);
+                memcpy(sPresetState.name, name, length);
+                sPresetState.name[length]   = '\0';
+
+                receive_preset_state(NULL);
+            }
+        #endif /* WITH_UI_FEATURE */
 
             return Steinberg::kResultOk;
         }
@@ -1107,7 +1148,11 @@ namespace lsp
                 lsp_warn("Failed to read serial version");
                 return STATUS_CORRUPTED;
             }
-            if (version != 1)
+
+            bool param_types = false;
+            if (version == 2)
+                param_types     = true;
+            else if (version != 1)
             {
                 lsp_warn("Unsupported serial version %d", int(version));
                 return STATUS_CORRUPTED;
@@ -1145,8 +1190,67 @@ namespace lsp
 
                 lsp_trace("Parameter name: %s", name);
 
-                if (name[0] != '/')
+                if (name[0] == '/')
                 {
+                    // Read the KVT parameter flags
+                    uint8_t flags = 0;
+                    if ((res = read_fully(is, &flags)) != STATUS_OK)
+                    {
+                        lsp_warn("Failed to resolve flags for parameter id=%s", name);
+                        return res;
+                    }
+
+                    lsp_trace("Parameter flags: 0x%x", int(flags));
+                    if ((res = read_kvt_value(is, name, &p)) != STATUS_OK)
+                    {
+                        lsp_warn("Failed to read value for KVT parameter id=%s, code=%d", name, int(res));
+                        return res;
+                    }
+
+                    // This is KVT port, skip private data for DSP code
+                    if ((p.type != core::KVT_ANY) && (!(flags & vst3::FLAG_PRIVATE)))
+                    {
+                        size_t kflags = core::KVT_TX;
+                        kvt_dump_parameter("Fetched KVT parameter %s = ", &p, name);
+                        sKVT.put(name, &p, kflags);
+                    }
+                }
+                else if (name[0] == '!')
+                {
+                    if (strcmp(name, "!preset_state") == 0)
+                    {
+                        core::preset_state_t state;
+                        if ((res = vst3::deserialize_preset_state(&state, is)) != STATUS_OK)
+                        {
+                            lsp_warn("Failed to deserialize preset state, error code=%d", int(res));
+                            return res;
+                        }
+
+                        core::copy_preset_state(&sPresetState, &state);
+                    }
+                    else
+                    {
+                        lsp_warn("Unknown special variable: %s, skipping", name);
+                        if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
+                        {
+                            lsp_warn("Failed to skip special variable", int(res));
+                            return res;
+                        }
+                    }
+                }
+                else
+                {
+                    // Read parameter type
+                    uint8_t param_type      = '?';
+                    if (param_types)
+                    {
+                        if ((res = read_fully(is, &param_type)) != STATUS_OK)
+                        {
+                            lsp_warn("Failed to deserialize parameter type, error code=%d", int(res));
+                            return res;
+                        }
+                    }
+
                     // Try to find virtual port
                     vst3::CtlPort *p        = port_by_id(name);
                     if (p != NULL)
@@ -1154,39 +1258,58 @@ namespace lsp
                         const meta::port_t *meta = p->metadata();
                         if (meta::is_path_port(meta))
                         {
-                            vst3::CtlPathPort *pp       = static_cast<vst3::CtlPathPort *>(p);
+                            if ((param_type != '?') && (param_type != 's'))
+                            {
+                                lsp_warn("Failed to deserialize port id=%s: invalid parameter type '%c'", meta->id, char(param_type));
+                                return res;
+                            }
 
                             if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
                             {
                                 lsp_warn("Failed to deserialize port id=%s", meta->id);
                                 return res;
                             }
+
+                            vst3::CtlPathPort *pp       = static_cast<vst3::CtlPathPort *>(p);
                             lsp_trace("  %s = %s", meta->id, name);
                             pp->commit_value(name);
                             pp->mark_changed();
                         }
                         else if (meta::is_string_holding_port(meta))
                         {
-                            vst3::CtlStringPort *sp     = static_cast<vst3::CtlStringPort *>(p);
+                            if ((param_type != '?') && (param_type != 's'))
+                            {
+                                lsp_warn("Failed to deserialize port id=%s: invalid parameter type '%c'", meta->id, char(param_type));
+                                return res;
+                            }
 
                             if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
                             {
                                 lsp_warn("Failed to deserialize port id=%s", meta->id);
                                 return res;
                             }
+
+                            vst3::CtlStringPort *sp     = static_cast<vst3::CtlStringPort *>(p);
                             lsp_trace("  %s = %s", meta->id, name);
                             sp->commit_value(name);
                             sp->mark_changed();
                         }
                         else if ((meta::is_control_port(meta)) || (meta::is_bypass_port(meta)) || (meta::is_port_set_port(meta)))
                         {
-                            vst3::CtlParamPort *pp      = static_cast<vst3::CtlParamPort *>(p);
+                            if ((param_type != '?') && (param_type != 'f'))
+                            {
+                                lsp_warn("Failed to deserialize port id=%s: invalid parameter type '%c'", meta->id, char(param_type));
+                                return res;
+                            }
+
                             float v = 0.0f;
                             if ((res = read_fully(is, &v)) != STATUS_OK)
                             {
                                 lsp_warn("Failed to deserialize port id=%s", name);
                                 return res;
                             }
+
+                            vst3::CtlParamPort *pp      = static_cast<vst3::CtlParamPort *>(p);
                             lsp_trace("  %s = %f", meta->id, v);
                             pp->commit_value(v);
                             pp->mark_changed();
@@ -1195,31 +1318,35 @@ namespace lsp
                             lsp_warn("Port id=%s is present in serial data but has invalid type", name);
                     }
                     else
-                        lsp_warn("Missing port id=%s, skipping", name);
-                }
-                else
-                {
-                    // Read the KVT parameter flags
-                    uint8_t flags = 0;
-                    if ((res = read_fully(is, &flags)) != STATUS_OK)
-                    {
-                        lsp_warn("Failed to resolve flags for parameter id=%s", name);
-                        return res;
-                    }
-
-                    lsp_trace("Parameter flags: 0x%x", int(flags));
-                    if ((res = read_kvt_value(is, name, &p)) != STATUS_OK)
-                    {
-                        lsp_warn("Failed to read value for KVT parameter id=%s, code=%d", name, int(res));
-                        return res;
-                    }
-
-                    // This is KVT port, skip private data for DSP code
-                    if ((p.type != core::KVT_ANY) && (!(flags & vst3::FLAG_PRIVATE)))
                     {
-                        size_t kflags = core::KVT_TX;
-                        kvt_dump_parameter("Fetched KVT parameter %s = ", &p, name);
-                        sKVT.put(name, &p, kflags);
+                        lsp_warn("Missing port id=%s, skipping", name);
+                        switch (param_type)
+                        {
+                            case 'f':
+                            {
+                                float v;
+                                if ((res = read_fully(is, &v)) != STATUS_OK)
+                                {
+                                    lsp_warn("Failed to skip floating-point parameter");
+                                    return res;
+                                }
+                                break;
+                            }
+                            case 's':
+                            {
+                                if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
+                                {
+                                    lsp_warn("Failed to skip string");
+                                    return res;
+                                }
+                                break;
+                            }
+                            case '?':
+                                break;
+                            default:
+                                lsp_warn("Unknown parameter type: '%c'", param_type);
+                                return STATUS_CORRUPTED;
+                        }
                     }
                 }
             }
@@ -1251,7 +1378,14 @@ namespace lsp
             );
 
             status_t res = load_state(state);
-            return (res == STATUS_OK) ? Steinberg::kResultOk : Steinberg::kInternalError;
+            if (res != STATUS_OK)
+                return Steinberg::kInternalError;
+
+        #ifdef WITH_UI_FEATURE
+            receive_preset_state(NULL);
+        #endif /* WITH_UI_FEATURE */
+
+            return Steinberg::kResultOk;
         }
 
         Steinberg::int32 PLUGIN_API Controller::getParameterCount()
@@ -1568,6 +1702,45 @@ namespace lsp
             return STATUS_OK;
         }
 
+        void Controller::send_preset_state(UIWrapper *wrapper, const core::preset_state_t *state)
+        {
+            // Copy preset state
+            core::copy_preset_state(&sPresetState, state);
+
+            // Notify receivers
+            receive_preset_state(wrapper);
+
+            // Send message to DSP backend
+            if (pPeerConnection != NULL)
+            {
+                LSPString name;
+                if (!name.set_utf8(state->name))
+                    return;
+
+                // Allocate new message
+                Steinberg::Vst::IMessage *msg = alloc_message(pHostApplication, bMsgWorkaround);
+                if (msg == NULL)
+                    return;
+                lsp_finally { safe_release(msg); };
+
+                // Initialize and send the message
+                msg->setMessageID(vst3::ID_MSG_PRESET_STATE);
+                Steinberg::Vst::IAttributeList *list = msg->getAttributes();
+
+                if (list->setInt("endian", VST3_BYTEORDER) != Steinberg::kResultOk)
+                    return;
+                if (list->setInt("flags", state->flags) != Steinberg::kResultOk)
+                    return;
+                if (list->setInt("tab", state->tab) != Steinberg::kResultOk)
+                    return;
+                if (list->setString("name", to_tchar(name.get_utf16())) != Steinberg::kResultOk)
+                    return;
+
+                // Notify peer
+                pPeerConnection->notify(msg);
+            }
+        }
+
         Steinberg::IPlugView * PLUGIN_API Controller::createView(Steinberg::FIDString name)
         {
             lsp_trace("this=%p, name=%s", this, name);
@@ -1629,6 +1802,9 @@ namespace lsp
                 }
             }
 
+            // Send peset state
+            w->receive_preset_state(&sPresetState);
+
             // Return pointer to wrapper
             return w;
         }
@@ -1740,6 +1916,23 @@ namespace lsp
             pPeerConnection->notify(msg);
         }
 
+        void Controller::notify_preset_changed()
+        {
+        #ifdef WITH_UI_FEATURE
+            // Notify UI about preset change
+            if (sWrappersLock.lock())
+            {
+                lsp_finally { sWrappersLock.unlock(); };
+                for (lltl::iterator<UIWrapper> it = vWrappers.values(); it; ++it)
+                {
+                    UIWrapper *w = it.get();
+                    if (w != NULL)
+                        w->mark_active_preset_dirty();
+                }
+            }
+        #endif /* WITH_UI_FEATURE */
+        }
+
         const core::ShmState *Controller::shm_state()
         {
             return sShmState.get();
@@ -1838,6 +2031,7 @@ namespace lsp
 
                 // Finally, we're ready to send message
                 pPeerConnection->notify(msg);
+                notify_preset_changed();
             }
             else if (meta::is_string_holding_port(meta))
             {
@@ -1870,6 +2064,7 @@ namespace lsp
 
                 // Finally, we're ready to send message
                 pPeerConnection->notify(msg);
+                notify_preset_changed();
             }
             else
             {
@@ -1905,6 +2100,7 @@ namespace lsp
 
                     // Finally, we're ready to send message
                     pPeerConnection->notify(msg);
+                    notify_preset_changed();
                 }
                 else
                 {
@@ -1916,6 +2112,7 @@ namespace lsp
                     pComponentHandler->beginEdit(param_id);
                     pComponentHandler->performEdit(param_id, valueNormalized);
                     pComponentHandler->endEdit(param_id);
+                    notify_preset_changed();
                 }
             }
         }
@@ -1991,6 +2188,26 @@ namespace lsp
             }
         }
 
+    #ifdef WITH_UI_FEATURE
+        void Controller::receive_preset_state(ui::IWrapper *except)
+        {
+            // Notify UI about position update
+            lltl::parray<UIWrapper> receivers;
+            if (sWrappersLock.lock())
+            {
+                lsp_finally { sWrappersLock.unlock(); };
+                receivers.add(vWrappers);
+            }
+
+            for (lltl::iterator<UIWrapper> it = receivers.values(); it; ++it)
+            {
+                UIWrapper *w = it.get();
+                if ((w != NULL) && (w != except))
+                    w->receive_preset_state(&sPresetState);
+            }
+        }
+    #endif /* WITH_UI_FEATURE */
+
     } /* namespace vst3 */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/event_handler.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/event_handler.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/event_handler.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/event_handler.h	2025-08-26 18:15:48.089960938 +0000
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 6 июл. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_PLUG_FW_WRAP_VST3_IMPL_EVENT_HANDLER_H_
+#define LSP_PLUG_IN_PLUG_FW_WRAP_VST3_IMPL_EVENT_HANDLER_H_
+
+#include <lsp-plug.in/plug-fw/version.h>
+
+#include <steinberg/vst3.h>
+
+#include <lsp-plug.in/plug-fw/wrap/vst3/data.h>
+#include <lsp-plug.in/plug-fw/wrap/vst3/helpers.h>
+#include <lsp-plug.in/plug-fw/wrap/vst3/sync.h>
+#include <lsp-plug.in/plug-fw/wrap/vst3/event_handler.h>
+
+#ifdef VST_USE_RUNLOOP_IFACE
+
+namespace lsp
+{
+    namespace vst3
+    {
+        EventHandler::EventHandler(IUISync *handler)
+        {
+            atomic_store(&nRefCounter, 1);
+            pHandler        = handler;
+        }
+
+        EventHandler::~EventHandler()
+        {
+            pHandler        = NULL;
+        }
+
+        Steinberg::tresult PLUGIN_API EventHandler::queryInterface(const Steinberg::TUID _iid, void **obj)
+        {
+            // Cast to the requested interface
+            if (Steinberg::iidEqual(_iid, Steinberg::FUnknown::iid))
+                return cast_interface<Steinberg::FUnknown>(this, obj);
+            if (Steinberg::iidEqual(_iid, Steinberg::Linux::IEventHandler::iid))
+                return cast_interface<Steinberg::Linux::IEventHandler>(this, obj);
+
+            return no_interface(obj);
+        }
+
+        Steinberg::uint32 PLUGIN_API EventHandler::addRef()
+        {
+            return atomic_add(&nRefCounter, 1) + 1;
+        }
+
+        Steinberg::uint32 PLUGIN_API EventHandler::release()
+        {
+            atomic_t ref_count = atomic_add(&nRefCounter, -1) - 1;
+            if (ref_count == 0)
+                delete this;
+
+            return ref_count;
+        }
+
+        void PLUGIN_API EventHandler::onFDIsSet(Steinberg::Linux::FileDescriptor fd)
+        {
+            if (pHandler != NULL)
+                pHandler->sync_ui();
+        };
+
+    } /* namespace vst3 */
+} /* namespace lsp */
+
+#endif /* VST_USE_RUNLOOP_IFACE */
+
+
+
+#endif /* LSP_PLUG_IN_PLUG_FW_WRAP_VST3_IMPL_EVENT_HANDLER_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/factory.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/factory.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/factory.h	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/factory.h	2025-08-26 18:15:48.089960938 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 27 дек. 2023 г.
@@ -39,6 +39,7 @@
 #include <lsp-plug.in/plug-fw/wrap/vst3/ibstreamout.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/factory.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/controller.h>
+#include <lsp-plug.in/plug-fw/wrap/vst3/event_handler.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/modinfo.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/timer.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/wrapper.h>
@@ -61,7 +62,7 @@ namespace lsp
             pExecutor           = NULL;
             pDataSync           = NULL;
             pPackage            = NULL;
-            pActiveSync         = NULL;
+            atomic_store(&pActiveSync, NULL);
 
         #ifdef VST_USE_RUNLOOP_IFACE
             pRunLoop            = NULL;
@@ -686,7 +687,7 @@ namespace lsp
                 if (!vDataSync.remove(sync))
                     return STATUS_NOT_FOUND;
 
-                while (pActiveSync == sync)
+                while (atomic_load(&pActiveSync) == sync)
                 {
                     // TODO: replace this with proper solution (add conditional wait)
                     // sDataMutex.wait();
@@ -753,14 +754,14 @@ namespace lsp
                         lsp_finally { sDataMutex.unlock(); };
                         if (!vDataSync.contains(dsync))
                             continue;
-                        pActiveSync     = dsync;
+                        atomic_store(&pActiveSync, dsync);
                     }
 
                     // Now dsync object is locked, perform processing
                     dsync->sync_data();
 
                     // Finally, unlock the data sync
-                    pActiveSync     = NULL;
+                    atomic_store(&pActiveSync, NULL);
                 }
 
                 // Wait for a while
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/timer.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/timer.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/timer.h	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/timer.h	2025-08-26 18:15:48.089960938 +0000
@@ -53,7 +53,7 @@ namespace lsp
             // Cast to the requested interface
             if (Steinberg::iidEqual(_iid, Steinberg::FUnknown::iid))
                 return cast_interface<Steinberg::FUnknown>(this, obj);
-            if (Steinberg::iidEqual(_iid, Steinberg::IPluginFactory::iid))
+            if (Steinberg::iidEqual(_iid, Steinberg::Linux::ITimerHandler::iid))
                 return cast_interface<Steinberg::Linux::ITimerHandler>(this, obj);
 
             return no_interface(obj);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/ui_wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/ui_wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/ui_wrapper.h	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/ui_wrapper.h	2025-08-26 18:15:48.089960938 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 3 янв. 2024 г.
@@ -62,7 +62,8 @@ namespace lsp
 
         #ifdef VST_USE_RUNLOOP_IFACE
             pRunLoop            = NULL;
-            pTimer              = safe_acquire(new vst3::PlatformTimer(this));
+            pTimer              = new vst3::PlatformTimer(this);
+            pEventHandler       = new vst3::EventHandler(this);
         #endif /* VST_USE_RUNLOOP_IFACE */
         }
 
@@ -70,6 +71,11 @@ namespace lsp
         {
             lsp_trace("this=%p", this);
 
+        #ifdef VST_USE_RUNLOOP_IFACE
+            safe_release(pTimer);
+            safe_release(pEventHandler);
+        #endif /* VST_USE_RUNLOOP_IFACE */
+
             // Remove self from synchronization list of UI wrapper
             if (pController != NULL)
                 pController->detach_ui_wrapper(this);
@@ -550,6 +556,7 @@ namespace lsp
 #if defined(PLATFORM_WINDOWS)
             supported = (strcmp(type, Steinberg::kPlatformTypeHWND) == 0);
 #elif defined(PLATFORM_MACOSX)
+            supported = (strcmp(type, Steinberg::kPlatformTypeNSView) == 0);
 #else
             supported = (strcmp(type, Steinberg::kPlatformTypeX11EmbedWindowID) == 0);
 #endif
@@ -566,8 +573,17 @@ namespace lsp
         #ifdef VST_USE_RUNLOOP_IFACE
             // Register the timer for event loop
             lsp_trace("this=%p, pRunLoop=%p, pTimer=%p", this, pRunLoop, pTimer);
-            if ((pRunLoop != NULL) && (pTimer != NULL))
-                pRunLoop->registerTimer(pTimer, 1000 / UI_FRAMES_PER_SECOND);
+            if (pRunLoop != NULL)
+            {
+                if (pEventHandler != NULL)
+                {
+                    int fd = 0;
+                    if ((wWindow->display()->get_file_descriptor(&fd)) == STATUS_OK)
+                        pRunLoop->registerEventHandler(pEventHandler, fd);
+                }
+                if (pTimer != NULL)
+                    pRunLoop->registerTimer(pTimer, 1000 / UI_FRAMES_PER_SECOND);
+            }
         #endif /* VST_USE_RUNLOOP_IFACE */
 
             // Show the window
@@ -597,8 +613,13 @@ namespace lsp
 
         #ifdef VST_USE_RUNLOOP_IFACE
             // Unregister the timer for event loop
-            if ((pRunLoop != NULL) && (pTimer != NULL))
-                pRunLoop->unregisterTimer(pTimer);
+            if (pRunLoop != NULL)
+            {
+                if (pEventHandler != NULL)
+                    pRunLoop->unregisterEventHandler(pEventHandler);
+                if (pTimer != NULL)
+                    pRunLoop->unregisterTimer(pTimer);
+            }
         #endif /* VST_USE_RUNLOOP_IFACE */
 
             return Steinberg::kResultOk;
@@ -656,12 +677,16 @@ namespace lsp
                 lsp_trace("window is not visible");
 
                 ws::size_limit_t sr;
-                wWindow->get_size_limits(&sr);
+                wWindow->get_padded_size_limits(&sr);
+
+                lsp_trace("size limits: width={min=%d, max=%d, pre=%d}, height={min=%d, max=%d, pre=%d}",
+                    int(sr.nMinWidth), int(sr.nMaxWidth), int(sr.nPreWidth),
+                    int(sr.nMinHeight), int(sr.nMaxHeight), int(sr.nPreHeight));
 
                 size->left      = 0;
                 size->top       = 0;
-                size->right     = lsp_min(sr.nMinWidth, 32);
-                size->bottom    = lsp_min(sr.nMinHeight, 32);
+                size->right     = lsp_max(sr.nMinWidth, 32);
+                size->bottom    = lsp_max(sr.nMinHeight, 32);
             }
 
             lsp_trace("this=%p, size={left=%d, top=%d, right=%d, bottom=%d}",
@@ -717,13 +742,35 @@ namespace lsp
             pPlugFrame  = safe_acquire(frame);
 
         #ifdef VST_USE_RUNLOOP_IFACE
+            // Release previous pointer of the run loop
+            if (pRunLoop != NULL)
+            {
+                // Unregister the timer for event loop
+                if (pEventHandler != NULL)
+                    pRunLoop->unregisterEventHandler(pEventHandler);
+                if (pTimer != NULL)
+                    pRunLoop->unregisterTimer(pTimer);
+                safe_release(pRunLoop);
+                pRunLoop    = NULL;
+            }
+
             // Acquire new pointer to the run loop
-            safe_release(pRunLoop);
             pRunLoop = safe_query_iface<Steinberg::Linux::IRunLoop>(frame);
             if (pRunLoop == NULL)
                 pRunLoop    = pController->acquire_run_loop();
 
-           lsp_trace("RUN LOOP object=%p", pRunLoop);
+            lsp_trace("RUN LOOP object=%p", pRunLoop);
+            if (pRunLoop != NULL)
+            {
+                if (pEventHandler != NULL)
+                {
+                    int fd = 0;
+                    if ((wWindow->display()->get_file_descriptor(&fd)) == STATUS_OK)
+                        pRunLoop->registerEventHandler(pEventHandler, fd);
+                }
+                if (pTimer != NULL)
+                    pRunLoop->registerTimer(pTimer, 1000 / UI_FRAMES_PER_SECOND);
+            }
         #endif /* VST_USE_RUNLOOP_IFACE */
 
             return Steinberg::kResultOk;
@@ -788,6 +835,7 @@ namespace lsp
 
         void UIWrapper::sync_ui()
         {
+            lsp_trace("sync_ui this=%p, pDisplay=%p");
             if (pDisplay != NULL)
                 pDisplay->main_iteration();
         }
@@ -870,6 +918,11 @@ namespace lsp
             return pController->shm_state();
         }
 
+        void UIWrapper::send_preset_state(const core::preset_state_t *state)
+        {
+            pController->send_preset_state(this, state);
+        }
+
     } /* namespace vst3 */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/wrapper.h	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/impl/wrapper.h	2025-08-26 18:15:48.089960938 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 1 янв. 2024 г.
@@ -93,12 +93,16 @@ namespace lsp
             nDirtyResp          = 0;
             nDumpReq            = 0;
             nDumpResp           = 0;
+            atomic_store(&nPresetFlags, PT_NONE);
+
             nMaxSamplesPerBlock = 0;
             bUpdateSettings     = true;
             bStateManage        = false;
             bMidiMapping        = false;
             bMsgWorkaround      = false;
 
+            core::init_preset_state(&sPresetState);
+
             nLatency            = 0;
         }
 
@@ -788,6 +792,7 @@ namespace lsp
                 {
                     port_id,
                     port_desc,
+                    NULL,
                     meta::U_NONE,
                     meta::R_CONTROL,
                     meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
@@ -1285,7 +1290,7 @@ namespace lsp
         status_t Wrapper::save_state(Steinberg::IBStream *os)
         {
             status_t res;
-            const uint16_t version      = 1;
+            const uint16_t version      = 2;
 
             // Set-up DSP context
             dsp::context_t ctx;
@@ -1318,7 +1323,7 @@ namespace lsp
                     lsp_trace("Saving state of path parameter: %s = %s", meta->id, path->path());
 
                     const char *path_value = path->path();
-                    if ((res = write_value(os, meta->id, path_value)) != STATUS_OK)
+                    if ((res = write_value(os, meta->id, 's', path_value)) != STATUS_OK)
                     {
                         lsp_trace("write_value failed for id=%s", meta->id);
                         return res;
@@ -1334,7 +1339,7 @@ namespace lsp
                     }
 
                     lsp_trace("Saving state of string parameter: %s = %s", meta->id, str);
-                    if ((res = write_value(os, meta->id, str)) != STATUS_OK)
+                    if ((res = write_value(os, meta->id, 's', str)) != STATUS_OK)
                     {
                         lsp_trace("write_value failed for id=%s", meta->id);
                         return res;
@@ -1350,7 +1355,7 @@ namespace lsp
                             p->value())
                     );
 
-                    if ((res = write_value(os, meta->id, p->value())) != STATUS_OK)
+                    if ((res = write_value(os, meta->id, 'f', p->value())) != STATUS_OK)
                     {
                         lsp_trace("write_value failed for id=%s", meta->id);
                         return res;
@@ -1358,6 +1363,13 @@ namespace lsp
                 }
             }
 
+            // Write special variables
+            if ((res = serialize_preset_state(os)) != STATUS_OK)
+            {
+                lsp_warn("Error serializing preset state, error=%d", int(res));
+                return res;
+            }
+
             // Save state of all KVT parameters
             if (sKVTMutex.lock())
             {
@@ -1400,7 +1412,11 @@ namespace lsp
                 lsp_warn("Failed to read serial version");
                 return STATUS_CORRUPTED;
             }
-            if (version != 1)
+
+            bool param_types = false;
+            if (version == 2)
+                param_types     = true;
+            else if (version != 1)
             {
                 lsp_warn("Unsupported serial version %d", int(version));
                 return STATUS_CORRUPTED;
@@ -1438,8 +1454,70 @@ namespace lsp
 
                 lsp_trace("Parameter name: %s", name);
 
-                if (name[0] != '/')
+                if (name[0] == '/')
+                {
+                    // Read the KVT parameter flags
+                    uint8_t flags = 0;
+                    if ((res = read_fully(is, &flags)) != STATUS_OK)
+                    {
+                        lsp_warn("Failed to resolve flags for parameter id=%s", name);
+                        return res;
+                    }
+
+                    lsp_trace("Parameter flags: 0x%x", int(flags));
+                    if ((res = read_kvt_value(is, name, &p)) != STATUS_OK)
+                    {
+                        lsp_warn("Failed to read value for KVT parameter id=%s, code=%d", name, int(res));
+                        return res;
+                    }
+
+                    // This is KVT port
+                    if (p.type != core::KVT_ANY)
+                    {
+                        size_t kflags = core::KVT_TX;
+                        if (flags & vst3::FLAG_PRIVATE)
+                            kflags     |= core::KVT_PRIVATE;
+
+                        kvt_dump_parameter("Fetched KVT parameter %s = ", &p, name);
+                        sKVT.put(name, &p, kflags);
+                    }
+                }
+                else if (name[0] == '!')
+                {
+                    if (strcmp(name, "!preset_state") == 0)
+                    {
+                        core::preset_state_t state;
+                        if ((res = deserialize_preset_state(&state, is)) != STATUS_OK)
+                        {
+                            lsp_warn("Failed to deserialize preset state, error code=%d", int(res));
+                            return res;
+                        }
+
+                        set_preset_state(&state, PT_STATE);
+                    }
+                    else
+                    {
+                        lsp_warn("Unknown special variable: %s, skipping", name);
+                        if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
+                        {
+                            lsp_warn("Failed to skip special variable", int(res));
+                            return res;
+                        }
+                    }
+                }
+                else
                 {
+                    // Read parameter type
+                    uint8_t param_type      = '?';
+                    if (param_types)
+                    {
+                        if ((res = read_fully(is, &param_type)) != STATUS_OK)
+                        {
+                            lsp_warn("Failed to deserialize parameter type, error code=%d", int(res));
+                            return res;
+                        }
+                    }
+
                     // Try to find virtual port
                     vst3::Port *p           = vParamMapping.get(name);
                     if (p != NULL)
@@ -1447,70 +1525,89 @@ namespace lsp
                         const meta::port_t *meta = p->metadata();
                         if (meta::is_path_port(meta))
                         {
-                            path_t *xp  = p->buffer<path_t>();
-
+                            if ((param_type != '?') && (param_type != 's'))
+                            {
+                                lsp_warn("Failed to deserialize port id=%s: invalid parameter type '%c'", meta->id, char(param_type));
+                                return res;
+                            }
                             if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
                             {
                                 lsp_warn("Failed to deserialize port id=%s", meta->id);
                                 return res;
                             }
+
+                            path_t *xp  = p->buffer<path_t>();
                             lsp_trace("  %s = %s", meta->id, name);
                             xp->submit(name, strlen(name), plug::PF_STATE_RESTORE);
                         }
                         else if (meta::is_string_holding_port(meta))
                         {
-                            vst3::StringPort *sp    = static_cast<vst3::StringPort *>(p);
-                            plug::string_t *xs      = sp->data();
+                            if ((param_type != '?') && (param_type != 's'))
+                            {
+                                lsp_warn("Failed to deserialize port id=%s: invalid parameter type '%c'", meta->id, char(param_type));
+                                return res;
+                            }
                             if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
                             {
                                 lsp_warn("Failed to deserialize port id=%s", meta->id);
                                 return res;
                             }
+
+                            vst3::StringPort *sp    = static_cast<vst3::StringPort *>(p);
+                            plug::string_t *xs      = sp->data();
                             lsp_trace("  %s = %s", meta->id, name);
                             xs->submit(name, strlen(name), true);
                         }
                         else
                         {
-                            vst3::ParameterPort *pp = static_cast<vst3::ParameterPort *>(p);
+                            if ((param_type != '?') && (param_type != 'f'))
+                            {
+                                lsp_warn("Failed to deserialize port id=%s: invalid parameter type '%c'", meta->id, char(param_type));
+                                return res;
+                            }
+
                             float v = 0.0f;
                             if ((res = read_fully(is, &v)) != STATUS_OK)
                             {
                                 lsp_warn("Failed to deserialize port id=%s", name);
                                 return res;
                             }
+
+                            vst3::ParameterPort *pp = static_cast<vst3::ParameterPort *>(p);
                             lsp_trace("  %s = %f", meta->id, v);
                             pp->submit(v);
                         }
                     }
                     else
-                        lsp_warn("Missing port id=%s, skipping", name);
-                }
-                else
-                {
-                    // Read the KVT parameter flags
-                    uint8_t flags = 0;
-                    if ((res = read_fully(is, &flags)) != STATUS_OK)
-                    {
-                        lsp_warn("Failed to resolve flags for parameter id=%s", name);
-                        return res;
-                    }
-
-                    lsp_trace("Parameter flags: 0x%x", int(flags));
-                    if ((res = read_kvt_value(is, name, &p)) != STATUS_OK)
-                    {
-                        lsp_warn("Failed to read value for KVT parameter id=%s, code=%d", name, int(res));
-                        return res;
-                    }
-
-                    // This is KVT port
-                    if (p.type != core::KVT_ANY)
                     {
-                        size_t kflags = core::KVT_TX;
-                        if (flags & vst3::FLAG_PRIVATE)
-                            kflags     |= core::KVT_PRIVATE;
-
-                        kvt_dump_parameter("Fetched KVT parameter %s = ", &p, name);
-                        sKVT.put(name, &p, kflags);
+                        lsp_warn("Missing port id=%s, skipping", name);
+                        switch (param_type)
+                        {
+                            case 'f':
+                            {
+                                float v;
+                                if ((res = read_fully(is, &v)) != STATUS_OK)
+                                {
+                                    lsp_warn("Failed to skip floating-point parameter");
+                                    return res;
+                                }
+                                break;
+                            }
+                            case 's':
+                            {
+                                if ((res = read_string(is, &name, &name_cap)) != STATUS_OK)
+                                {
+                                    lsp_warn("Failed to skip string");
+                                    return res;
+                                }
+                                break;
+                            }
+                            case '?':
+                                break;
+                            default:
+                                lsp_warn("Unknown parameter type: '%c'", param_type);
+                                return STATUS_CORRUPTED;
+                        }
                     }
                 }
             }
@@ -1741,7 +1838,7 @@ namespace lsp
 
         Steinberg::tresult PLUGIN_API Wrapper::canProcessSampleSize(Steinberg::int32 symbolicSampleSize)
         {
-            lsp_trace("this=%p, symbolicSampleSize=%d", this, int(symbolicSampleSize));
+//            lsp_trace("this=%p, symbolicSampleSize=%d", this, int(symbolicSampleSize));
 
             // We support only 32-bit float samples
             return (symbolicSampleSize == Steinberg::Vst::kSample32) ? Steinberg::kResultTrue : Steinberg::kResultFalse;
@@ -1837,31 +1934,33 @@ namespace lsp
             pos->sampleRate             = pPlugin->sample_rate();
             pos->speed                  = 1.0f;
             pos->frame                  = 0;
-            if ((pctx != NULL) && (pctx->state & Steinberg::Vst::ProcessContext::kTimeSigValid))
-            {
-                pos->numerator              = pctx->timeSigNumerator;
-                pos->denominator            = pctx->timeSigDenominator;
-            }
-            else
-            {
-                pos->numerator              = 4.0;
-                pos->denominator            = 4.0;
-            }
-            if (pctx->state & Steinberg::Vst::ProcessContext::kTempoValid)
-                pos->beatsPerMinute         = pctx->tempo;
-            else
-                pos->beatsPerMinute         = BPM_DEFAULT;
+            pos->numerator              = 4.0;
+            pos->denominator            = 4.0;
+            pos->beatsPerMinute         = BPM_DEFAULT;
             pos->beatsPerMinuteChange   = 0.0f;
+            pos->tick                   = 0.0;
             pos->ticksPerBeat           = DEFAULT_TICKS_PER_BEAT;
 
-            if ((pctx->state & Steinberg::Vst::ProcessContext::kProjectTimeMusicValid) &&
-                (pctx->state & Steinberg::Vst::ProcessContext::kBarPositionValid))
+            if (pctx != NULL)
             {
-                double uppqPos              = (pctx->projectTimeMusic - pctx->barPositionMusic) * pctx->timeSigDenominator * 0.25 / pctx->timeSigNumerator;
-                pos->tick                   = pos->ticksPerBeat * pctx->timeSigNumerator * (uppqPos - int64_t(uppqPos));
+                if (pctx->state & Steinberg::Vst::ProcessContext::kTimeSigValid)
+                {
+                    pos->numerator              = pctx->timeSigNumerator;
+                    pos->denominator            = pctx->timeSigDenominator;
+                }
+
+                if (pctx->state & Steinberg::Vst::ProcessContext::kTempoValid)
+                    pos->beatsPerMinute         = pctx->tempo;
+
+                if ((pctx->state & Steinberg::Vst::ProcessContext::kProjectTimeMusicValid) &&
+                    (pctx->state & Steinberg::Vst::ProcessContext::kBarPositionValid))
+                {
+                    double uppqPos              = (pctx->projectTimeMusic - pctx->barPositionMusic) * pctx->timeSigDenominator * 0.25 / pctx->timeSigNumerator;
+                    pos->tick                   = pos->ticksPerBeat * pctx->timeSigNumerator * (uppqPos - int64_t(uppqPos));
+                }
+                else
+                    pos->tick                   = 0.0;
             }
-            else
-                pos->tick                   = 0.0;
 
             // Sync position with UI
             if (atomic_trylock(nPositionLock))
@@ -2009,7 +2108,7 @@ namespace lsp
 
         void Wrapper::toggle_ui_state()
         {
-            uatomic_t counter   = nUICounterReq;
+            uatomic_t counter   = atomic_load(&nUICounterReq);
             if (counter == nUICounterResp)
                 return;
 
@@ -2947,6 +3046,7 @@ namespace lsp
             else if (!strcmp(message_id, vst3::ID_MSG_ACTIVATE_UI))
             {
                 atomic_add(&nUICounterReq, 1);
+                request_preset_state();
             }
             else if (!strcmp(message_id, vst3::ID_MSG_DEACTIVATE_UI))
             {
@@ -3016,6 +3116,40 @@ namespace lsp
                     osc::parse_destroy(&parser);
                 }
             }
+            else if (!strcmp(message_id, ID_MSG_PRESET_STATE))
+            {
+                // Get endianess
+                if (atts->getInt("endian", byte_order) != Steinberg::kResultOk)
+                    return Steinberg::kResultFalse;
+
+                Steinberg::int64 flags = 0, tab = 0;
+
+                if (atts->getInt("flags", flags) != Steinberg::kResultOk)
+                    return Steinberg::kResultFalse;
+                if (atts->getInt("tab", tab) != Steinberg::kResultOk)
+                    return Steinberg::kResultFalse;
+
+                // Read identifier of the mesh port
+                const char *name = sRxNotifyBuf.get_string(atts, "name", byte_order);
+                if (name == NULL)
+                    return Steinberg::kResultFalse;
+
+                lsp_trace("Received preset state flags=0x%x, tab=%d, name='%s'",
+                    int(flags), int(tab), name);
+
+                // Commit state
+                core::preset_state_t state;
+                core::init_preset_state(&state);
+
+                state.flags  = uint32_t(flags);
+                state.tab    = uint32_t(tab);
+                const size_t length = lsp_min(strnlen(name, core::PRESET_NAME_BYTES), core::PRESET_NAME_BYTES - 1);
+                memcpy(state.name, name, length);
+                state.name[length]   = '\0';
+
+                // Set preset state
+                set_preset_state(&state, PT_UI);
+            }
 
             return Steinberg::kResultOk;
         }
@@ -3049,7 +3183,7 @@ namespace lsp
         void Wrapper::report_state_change()
         {
             // Report state change
-            uatomic_t dirty_req = nDirtyReq;
+            uatomic_t dirty_req = atomic_load(&nDirtyReq);
             if (dirty_req == nDirtyResp)
                 return;
 
@@ -3583,6 +3717,7 @@ namespace lsp
             // Do not synchronize other data until there is no UI visible
             if (nUICounterResp > 0)
             {
+                transmit_preset_state();
                 transmit_meter_values();
                 transmit_mesh_states();
                 transmit_frame_buffers();
@@ -3593,6 +3728,173 @@ namespace lsp
             }
         }
 
+        void Wrapper::set_preset_state(const core::preset_state_t *state, uint32_t mode)
+        {
+            lsp_trace("this=%p, name=%s, flags=0x%x, tab=%d, mode=%d",
+                this, state->name, state->flags, state->tab, int(mode));
+
+            {
+                // Lock the state
+                while (true)
+                {
+                    const uatomic_t flags = atomic_load(&nPresetFlags);
+                    if ((flags & PT_TYPE) > mode) // Leave if data has greater priority than submitted
+                    {
+                        lsp_trace("preset state not updated, flags=0x%x, mode=%d", int(flags), int(mode));
+                        return;
+                    }
+                    if (!(flags & PT_LOCK))
+                    {
+                        if (atomic_cas(&nPresetFlags, flags, flags | PT_LOCK))
+                            break;
+                    }
+                    ipc::Thread::yield();
+                }
+
+                // State is locked
+                lsp_finally {
+                    while (true)
+                    {
+                        const uatomic_t flags = atomic_load(&nPresetFlags);
+                        if (atomic_cas(&nPresetFlags, flags, mode & (~PT_LOCK))) // Unlock the state
+                            break;
+                        ipc::Thread::yield();
+                    }
+                };
+
+                core::copy_preset_state(&sPresetState, state);
+            }
+
+            // Mark state changed if data was transferred from UI
+            if (mode == PT_UI)
+                state_changed();
+
+            lsp_trace("this=%p, mode=0x%x", this, int(mode));
+        }
+
+
+        void Wrapper::request_preset_state()
+        {
+            // Set the 'PT_FORCE' flag
+            while (true)
+            {
+                const uatomic_t flags = atomic_load(&nPresetFlags);
+                if (flags & PT_FORCE)
+                    return;
+                if (atomic_cas(&nPresetFlags, flags, flags | PT_FORCE))
+                    break;
+
+                ipc::Thread::yield();
+            }
+        }
+
+        void Wrapper::transmit_preset_state()
+        {
+            core::preset_state_t state;
+
+            {
+                // Lock the state
+                while (true)
+                {
+                    // We can fetch data only if it is in PT_STATE state or fetch is forced
+                    const uatomic_t flags = atomic_load(&nPresetFlags);
+                    if ((!(flags & PT_FORCE)) && ((flags & PT_TYPE) != PT_STATE))
+                        return;
+                    if (!(flags & PT_LOCK))
+                    {
+                        if (atomic_cas(&nPresetFlags, flags, flags | PT_LOCK))
+                            break;
+                    }
+                    ipc::Thread::yield();
+                }
+
+                // State is locked
+                lsp_finally {
+                    while (true)
+                    {
+                        const uatomic_t flags = atomic_load(&nPresetFlags);
+                        if (atomic_cas(&nPresetFlags, flags, flags & (~(PT_LOCK | PT_TYPE)))) // Unlock the state
+                            break;
+                        ipc::Thread::yield();
+                    }
+                };
+
+                // Now we have locked state
+                core::copy_preset_state(&state, &sPresetState);
+            }
+
+            // Now we can form message and transmit it
+            // Allocate new message
+            Steinberg::Vst::IMessage *msg = alloc_message(pHostApplication, bMsgWorkaround);
+            if (msg == NULL)
+                return;
+            lsp_finally { safe_release(msg); };
+
+            // Initialize and send the message
+            msg->setMessageID(vst3::ID_MSG_PRESET_STATE);
+            Steinberg::Vst::IAttributeList *list = msg->getAttributes();
+
+            if (list->setInt("endian", VST3_BYTEORDER) != Steinberg::kResultOk)
+                return;
+            if (list->setInt("flags", state.flags) != Steinberg::kResultOk)
+                return;
+            if (list->setInt("tab", state.tab) != Steinberg::kResultOk)
+                return;
+
+            // Write identifier of the mesh port
+            if (!sTxNotifyBuf.set_string(list, "name", state.name))
+                return ;
+
+            // Notify peer
+            pPeerConnection->notify(msg);
+        }
+
+        status_t Wrapper::serialize_preset_state(Steinberg::IBStream *os)
+        {
+            core::preset_state_t state;
+            {
+                // Lock the state
+                while (true)
+                {
+                    // We can fetch data only if it is in PT_STATE state or fetch is forced
+                    const uatomic_t flags = atomic_load(&nPresetFlags);
+                    if (!(flags & PT_LOCK))
+                    {
+                        if (atomic_cas(&nPresetFlags, flags, flags | PT_LOCK))
+                            break;
+                    }
+                    ipc::Thread::yield();
+                }
+
+                // State is locked
+                lsp_finally {
+                    while (true)
+                    {
+                        const uatomic_t flags = atomic_load(&nPresetFlags);
+                        if (atomic_cas(&nPresetFlags, flags, flags & (~PT_LOCK))) // Unlock the state
+                            break;
+                        ipc::Thread::yield();
+                    }
+                };
+
+                // Now we have locked state
+                core::copy_preset_state(&state, &sPresetState);
+            }
+
+            // Serialize obtained preset state
+            lsp_trace("preset state: flags=0x%x, tab=%d, name=%s", int(state.flags), int(state.tab), state.name);
+            return vst3::serialize_preset_state(os, &state);
+        }
+
+        status_t Wrapper::deserialize_preset_state(core::preset_state_t *state, Steinberg::IBStream *is)
+        {
+            status_t res = vst3::deserialize_preset_state(state, is);
+            if (res == STATUS_OK)
+                lsp_trace("preset state: flags=0x%x, tab=%d, name=%s", int(state->flags), int(state->tab), state->name);
+
+            return res;
+        }
+
     } /* namespace vst3 */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/ui_wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/ui_wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/ui_wrapper.h	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/ui_wrapper.h	2025-08-26 18:15:48.089960938 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 3 янв. 2024 г.
@@ -53,6 +53,9 @@ namespace lsp
             public Steinberg::IPlugView,
             public Steinberg::IPlugViewContentScaleSupport
         {
+            private:
+                friend class Controller;
+
             protected:
                 uatomic_t                           nRefCounter;            // Reference counter
                 vst3::Controller                   *pController;            // Controller
@@ -67,6 +70,7 @@ namespace lsp
             #ifdef VST_USE_RUNLOOP_IFACE
                 Steinberg::Linux::IRunLoop         *pRunLoop;               // Run loop interface
                 Steinberg::Linux::ITimerHandler    *pTimer;                 // Timer handler
+                Steinberg::Linux::IEventHandler    *pEventHandler;          // Event handler
             #endif /* VST_USE_RUNLOOP_IFACE */
 
             protected:
@@ -113,6 +117,7 @@ namespace lsp
                 virtual void                        main_iteration() override;
                 virtual meta::plugin_format_t       plugin_format() const override;
                 virtual const core::ShmState       *shm_state() override;
+                virtual void                        send_preset_state(const core::preset_state_t *state) override;
 
             public: // vst3::IUISync
                 virtual void                        sync_ui() override;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/wrapper.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/wrapper.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/wrapper.h	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/vst3/wrapper.h	2025-08-26 18:15:48.089960938 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 1 янв. 2024 г.
@@ -84,6 +84,18 @@ namespace lsp
                     vst3::MidiPort                 *vPorts[];   // List of ports related to the event bus
                 } event_bus_t;
 
+                enum preset_type_t
+                {
+                    PT_NONE     = 0,
+                    PT_UI       = 1,
+                    PT_STATE    = 2,
+
+                    PT_LOCK     = 0x8000,
+                    PT_FORCE    = 0x4000,
+
+                    PT_TYPE     = 0x000f
+                };
+
                 class VST3KVTListener: public core::KVTListener
                 {
                     private:
@@ -126,6 +138,7 @@ namespace lsp
                 wssize_t                            nPlayPosition;          // Sample playback position
                 wssize_t                            nPlayLength;            // Sample playback length
                 plug::position_t                    sUIPosition;            // Position notified to UI
+                core::preset_state_t                sPresetState;           // Preset state
 
                 vst3::string_buf                    sRxNotifyBuf;           // Notify buffer for notify() processing
                 vst3::string_buf                    sTxNotifyBuf;           // Notify buffer for sync_data()
@@ -142,6 +155,7 @@ namespace lsp
                 uatomic_t                           nDirtyResp;             // Dirty state response
                 uatomic_t                           nDumpReq;               // State dump request
                 uatomic_t                           nDumpResp;              // State dump response
+                uatomic_t                           nPresetFlags;           // Preset flags
                 uint32_t                            nMaxSamplesPerBlock;    // Maximum samples per block
                 bool                                bUpdateSettings;        // Indicator that settings should be updated
                 bool                                bStateManage;           // State management barrier
@@ -182,6 +196,11 @@ namespace lsp
                 bool                        check_parameters_updated();
                 void                        apply_settings_update();
 
+                void                        set_preset_state(const core::preset_state_t *state, uint32_t mode);
+                void                        request_preset_state();
+                status_t                    serialize_preset_state(Steinberg::IBStream *os);
+                status_t                    deserialize_preset_state(core::preset_state_t *state, Steinberg::IBStream *is);
+
                 status_t                    save_state(Steinberg::IBStream *os);
                 status_t                    load_state(Steinberg::IBStream *is);
 
@@ -203,6 +222,7 @@ namespace lsp
                 void                        transmit_play_position();
                 void                        transmit_strings();
                 void                        transmit_shm_state();
+                void                        transmit_preset_state();
 
             public:
                 explicit Wrapper(PluginFactory *factory, plug::Module *plugin, resource::ILoader *loader, const meta::package_t *package);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/private/ui/xml/DOMControllerNode.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/private/ui/xml/DOMControllerNode.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/private/ui/xml/DOMControllerNode.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/private/ui/xml/DOMControllerNode.h	2025-08-26 18:15:48.093960899 +0000
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 25 мая 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_UI_XML_DOMCONTROLLERNODE_H_
+#define PRIVATE_UI_XML_DOMCONTROLLERNODE_H_
+
+#include <lsp-plug.in/plug-fw/ctl.h>
+#include <lsp-plug.in/plug-fw/ui.h>
+
+#include <private/ui/xml/Node.h>
+#include <private/ui/xml/NodeFactory.h>
+
+namespace lsp
+{
+    namespace ui
+    {
+        namespace xml
+        {
+            /**
+             * Node for configuring properties of the widget controller from the XML document
+             */
+            class DOMControllerNode: public Node
+            {
+                private:
+                    ctl::DOMController     *pController;
+
+                public:
+                    explicit DOMControllerNode(UIContext *ctx, Node *parent, ctl::DOMController *ctl);
+                    DOMControllerNode(const DOMControllerNode &) = delete;
+                    DOMControllerNode(DOMControllerNode &&) = delete;
+                    DOMControllerNode & operator = (const DOMControllerNode &) = delete;
+                    DOMControllerNode & operator = (DOMControllerNode &&) = delete;
+
+                    virtual ~DOMControllerNode() override;
+
+                public: // xml::Node
+                    virtual status_t        enter(const LSPString * const *atts) override;
+                    virtual status_t        leave() override;
+            };
+
+        } /* namespace xml */
+    } /* namespace ui */
+} /* namespace lsp */
+
+
+
+#endif /* PRIVATE_UI_XML_DOMCONTROLLERNODE_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/include/private/ui/xml/WidgetNode.h 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/private/ui/xml/WidgetNode.h
--- 1.2.21-5/modules/lsp-plugin-fw/include/private/ui/xml/WidgetNode.h	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/include/private/ui/xml/WidgetNode.h	2025-08-26 18:15:48.093960899 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 10 апр. 2021 г.
@@ -40,30 +40,27 @@ namespace lsp
             class WidgetNode: public Node
             {
                 private:
-                    WidgetNode & operator = (const WidgetNode *);
-                    WidgetNode(const WidgetNode &);
-
-                private:
                     ctl::Widget            *pWidget;
                     WidgetNode             *pChild;
-                    Node                   *pSpecial;
 
                 public:
                     explicit WidgetNode(UIContext *ctx, Node *parent, ctl::Widget *widget);
-                    virtual ~WidgetNode();
-
-                public:
-                    virtual status_t        lookup(Node **child, const LSPString *name);
-
-                    virtual status_t        enter(const LSPString * const *atts);
+                    WidgetNode(const WidgetNode &) = delete;
+                    WidgetNode(WidgetNode &&) = delete;
+                    WidgetNode & operator = (const WidgetNode &) = delete;
+                    WidgetNode & operator = (WidgetNode &&) = delete;
 
-                    virtual status_t        completed(Node *child);
+                    virtual ~WidgetNode() override;
 
-                    virtual status_t        leave();
+                public:
+                    virtual status_t        lookup(Node **child, const LSPString *name) override;
+                    virtual status_t        enter(const LSPString * const *atts) override;
+                    virtual status_t        completed(Node *child) override;
+                    virtual status_t        leave() override;
             };
 
-        }
-    }
-}
+        } /* namespace xml */
+    } /* namespace ui */
+} /* namespace lsp */
 
 #endif /* PRIVATE_UI_XML_WIDGETNODE_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugin-fw/make/tools.mk
--- 1.2.21-5/modules/lsp-plugin-fw/make/tools.mk	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/make/tools.mk	2025-08-26 18:15:48.093960899 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugin-fw/modules.mk
--- 1.2.21-5/modules/lsp-plugin-fw/modules.mk	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/modules.mk	2025-08-26 18:15:48.093960899 +0000
@@ -19,86 +19,101 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/project.mk 1.2.23-0ubuntu1/modules/lsp-plugin-fw/project.mk
--- 1.2.21-5/modules/lsp-plugin-fw/project.mk	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/project.mk	2025-08-26 18:15:48.093960899 +0000
@@ -24,4 +24,4 @@ ARTIFACT_NAME               = lsp-plugin
 ARTIFACT_DESC               = LSP Plugin Framework for building LSP Plugins
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_ALL         = 1
-ARTIFACT_VERSION            = 1.0.29
+ARTIFACT_VERSION            = 1.0.31
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/Makefile 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/Makefile
--- 1.2.21-5/modules/lsp-plugin-fw/src/Makefile	2025-03-01 12:42:57.444644473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/Makefile	2025-08-26 18:15:48.093960899 +0000
@@ -1,6 +1,6 @@
 #
-# Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
-#           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
 #
 # This file is part of lsp-plugin-fw
 #
@@ -210,8 +210,13 @@ GST_LIBDIR             := $(LIBDIR)/$(IN
 JACK_LIBDIR            := $(LIBDIR)/$(INSTALL_GROUP_LIBDIR)
 LADSPA_LIBDIR          := $(LIBDIR)/ladspa
 LV2_LIBDIR             := $(LIBDIR)/lv2/$(INSTALL_LIBDIR).lv2
-VST2_LIBDIR            := $(LIBDIR)/vst/$(INSTALL_LIBDIR).vst
-VST3_LIBDIR            := $(LIBDIR)/vst3/$(INSTALL_LIBDIR).vst3
+ifeq ($(PLATFORM),MacOS)
+  VST2_LIBDIR            := /Library/Audio/Plug-Ins/VST/$(INSTALL_LIBDIR).vst
+  VST3_LIBDIR            := /Library/Audio/Plug-Ins/VST3/$(INSTALL_LIBDIR).vst3
+else
+  VST2_LIBDIR            := $(LIBDIR)/vst/$(INSTALL_LIBDIR).vst
+  VST3_LIBDIR            := $(LIBDIR)/vst3/$(INSTALL_LIBDIR).vst3
+endif
 DOC_SHAREDDIR          := $(SHAREDDIR)/doc/$($(ROOT_ARTIFACT_ID)_NAME)
 
 ifeq ($(PLATFORM),Linux)
@@ -256,6 +261,9 @@ else ifeq ($(PLATFORM),Windows)
   endif
   VST3_EXT               := .vst3
   VST3_LDFLAGS           := -Wl,--kill-at
+else ifeq ($(PLATFORM),MacOS)
+  VST3_ARCH              := MacOS
+  VST3_EXT               := 
 else
   VST3_ARCH              := $(shell uname -m)-${shell uname -s | tr '[:upper:]' '[:lower:]'}
   VST3_EXT               := $(LIBRARY_EXT)
@@ -280,7 +288,7 @@ VERSION_CFLAGS             := \
 #------------------------------------------------------------------------------
 # Framework settings for (cross) build
 LSP_PLUGIN_FW_SRC_RES               = $(LSP_PLUGIN_FW_BIN)/$(LSP_PLUGIN_FW_NAME)-res.cpp
-LSP_PLUGIN_FW_SRC_RES_EXCL          = -x "fonts/**/:i18n/**/:models/**/:presets/**/:schema/**/:ui/**/"
+LSP_PLUGIN_FW_SRC_RES_EXCL          = -x "fonts/**/:i18n/**/:presets/**/:schema/**/:ui/**/"
 LSP_PLUGIN_FW_SRC_RES_CKSUM         = $(LSP_PLUGIN_FW_BIN)/res-checksum.json
 
 LSP_PLUGIN_FW_SRC_UI_RES            = $(LSP_PLUGIN_FW_BIN)/$(LSP_PLUGIN_FW_NAME)-ui-res.cpp
@@ -1490,7 +1498,10 @@ install_vst3: vst3
 	mkdir -p "$(DESTDIR)$(VST3_LIBDIR)/Contents/Resources"
 	mkdir -p "$(DESTDIR)$(VST3_LIBDIR)/Contents/Resources"
 	mkdir -p "$(DESTDIR)$(VST3_LIBDIR)/Contents/${VST3_ARCH}"
-	$($(HOST)UTL_VST3_MODINFO) "$(DESTDIR)$(VST3_LIBDIR)/Contents/Resources/moduleinfo.json"
+	$($(HOST)UTL_VST3_MODINFO) -m "$(DESTDIR)$(VST3_LIBDIR)/Contents/Resources/moduleinfo.json"
+	$(if $(findstring MacOS, $(PLATFORM)), \
+	  $($(HOST)UTL_VST3_MODINFO) -i "$(DESTDIR)$(VST3_LIBDIR)/Contents/Info.plist" -p "$(DESTDIR)$(VST3_LIBDIR)/Contents/PkgInfo" \
+    )
 	$(INSTALL) $(ARTIFACT_LIB_VST3) "$(DESTDIR)$(VST3_LIBDIR)/Contents/${VST3_ARCH}/"
 
 install_xdg_msg:
@@ -1629,7 +1640,10 @@ package_vst3: vst3 $(BIN_PACKAGE)
 	-rm -rf  "$(BUILDDIR)/$(BIN_PKG_DIR)"
 	mkdir -p "$(BUILDDIR)/$(BIN_PKG_DIR)/$(VST3_LIBDIR)/Contents/Resources"
 	mkdir -p "$(BUILDDIR)/$(BIN_PKG_DIR)/$(VST3_LIBDIR)/Contents/${VST3_ARCH}"
-	$($(HOST)UTL_VST3_MODINFO) "$(BUILDDIR)/$(BIN_PKG_DIR)/$(VST3_LIBDIR)/Contents/Resources/moduleinfo.json"
+	$($(HOST)UTL_VST3_MODINFO) -m "$(BUILDDIR)/$(BIN_PKG_DIR)/$(VST3_LIBDIR)/Contents/Resources/moduleinfo.json"
+	$(if $(findstring MacOS, $(PLATFORM)), \
+	  $($(HOST)UTL_VST3_MODINFO) -i "$(BUILDDIR)/$(BIN_PKG_DIR)/$(VST3_LIBDIR)/Contents/Info.plist" -p "$(BUILDDIR)/$(BIN_PKG_DIR)/$(VST3_LIBDIR)/Contents/PkgInfo" \
+    )
 	$(INSTALL) $(ARTIFACT_LIB_VST3) "$(BUILDDIR)/$(BIN_PKG_DIR)/$(VST3_LIBDIR)/Contents/${VST3_ARCH}/"
 	$(foreach target,$(BIN_PACKAGE_VST3), \
 	    $(MAKE) -C "$($(patsubst package_%,%,$(target))_PATH)" install DESTDIR="$(BUILDDIR)/$(BIN_PKG_DIR)"; \
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/core/AudioReturn.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/AudioReturn.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/core/AudioReturn.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/AudioReturn.cpp	2025-08-26 18:15:48.093960899 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-plugin-template
  * Created on: 26 июн. 2024 г.
@@ -71,7 +71,6 @@ namespace lsp
             sStream(free_stream),
             sParams(free_params)
         {
-            enStatus            = ST_INACTIVE;
             sRecord.index       = -1;
             sRecord.magic       = 0;
             sRecord.version     = 0;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/core/AudioSend.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/AudioSend.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/core/AudioSend.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/AudioSend.cpp	2025-08-26 18:15:48.093960899 +0000
@@ -68,7 +68,6 @@ namespace lsp
             sStream(free_stream),
             sParams(free_params)
         {
-            enStatus            = ST_INACTIVE;
             sRecord.index       = -1;
             sRecord.magic       = 0;
             sRecord.version     = 0;
@@ -262,7 +261,7 @@ namespace lsp
             stream_t *st = sStream.current();
             if (st == NULL)
                 return -1;
-            return (st->pStream != NULL) ? st->sParams.nChannels : -1;
+            return (st->pStream != NULL) ? ssize_t(st->sParams.nChannels) : ssize_t(-1);
         }
 
         ssize_t AudioSend::length() const
@@ -270,7 +269,7 @@ namespace lsp
             stream_t *st = sStream.current();
             if (st == NULL)
                 return -1;
-            return (st->pStream != NULL) ? st->sParams.nLength : -1;
+            return (st->pStream != NULL) ? ssize_t(st->sParams.nLength) : ssize_t(-1);
         }
 
         status_t AudioSend::begin(ssize_t block_size)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/core/SamplePlayer.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/SamplePlayer.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/core/SamplePlayer.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/SamplePlayer.cpp	2025-08-26 18:15:48.093960899 +0000
@@ -23,6 +23,7 @@
 #include <lsp-plug.in/common/atomic.h>
 #include <lsp-plug.in/plug-fw/meta/func.h>
 #include <lsp-plug.in/stdlib/string.h>
+#include <lsp-plug.in/runtime/system.h>
 
 #include <lsp-plug.in/plug-fw/core/SamplePlayer.h>
 
@@ -222,12 +223,18 @@ namespace lsp
             lsp_finally { destroy_sample(source); };
 
             // Load sample
+            IF_TRACE(system::time_millis_t ctime = system::get_time_millis());
             status_t res = source->load_ext(sFileName);
             if (res != STATUS_OK)
             {
                 lsp_trace("load failed: status=%d (%s)", res, get_status(res));
                 return res;
             }
+            IF_TRACE(
+                system::time_millis_t delta = system::get_time_millis() - ctime;
+                lsp_trace("Load time: %d", int(delta));
+                ctime = system::get_time_millis()
+            );
 
             // Resample
             if ((res = source->resample(nSampleRate)) != STATUS_OK)
@@ -236,6 +243,11 @@ namespace lsp
                 return res;
             }
 
+            IF_TRACE(
+                delta = system::get_time_millis() - ctime;
+                lsp_trace("Resample time: %d", int(delta));
+            );
+
             // Commit the result
             lsp_trace("file successfully loaded: %s", sFileName);
             lsp::swap(pLoaded, source);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/core/ShmClient.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/ShmClient.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/core/ShmClient.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/ShmClient.cpp	2025-08-26 18:15:48.093960899 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 9 авг. 2024 г.
@@ -560,7 +560,9 @@ namespace lsp
             for (size_t i=0, n=vSends.size(); i<n; ++i)
             {
                 send_t *s       = vSends.uget(i);
-                if ((s != NULL) && (s->pSend != NULL) && (s->bActive))
+                if (s == NULL)
+                    continue;
+                if ((s->pSend != NULL) && (s->bActive))
                 {
                     s->pSend->end();
                     s->bActive  = false;
@@ -570,7 +572,10 @@ namespace lsp
             for (size_t i=0, n=vReturns.size(); i<n; ++i)
             {
                 return_t *r     = vReturns.uget(i);
-                if ((r != NULL) && (r->pReturn != NULL))
+                if (r == NULL)
+                    continue;
+
+                if (r->pReturn != NULL)
                     r->pReturn->end();
                 r->bActive  = false;
             }
@@ -579,6 +584,15 @@ namespace lsp
         bool ShmClient::update_catalog(dspu::Catalog *catalog)
         {
             lltl::parray<dspu::Catalog::Record> records;
+            lsp_finally {
+                for (size_t i=0, n=records.size(); i<n; ++i)
+                {
+                    dspu::Catalog::Record *rec = records.uget(i);
+                    if (rec != NULL)
+                        delete rec;
+                }
+            };
+
             status_t res = catalog->enumerate(&records);
             if (res != STATUS_OK)
                 return false;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/core/osc_buffer.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/osc_buffer.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/core/osc_buffer.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/osc_buffer.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 1 мар. 2023 г.
@@ -56,7 +56,7 @@ namespace lsp
             osc_buffer_t *res   = reinterpret_cast<osc_buffer_t *>(ptr);
             ptr                += align_size(sizeof(osc_buffer_t), DEFAULT_ALIGN);
 
-            atomic_store(&res->nSize, 0);
+            atomic_store(&res->nSize, size_t(0));
             res->nCapacity      = capacity;
             res->nHead          = 0;
             res->nTail          = 0;
@@ -143,7 +143,7 @@ namespace lsp
 
         void osc_buffer_t::clear()
         {
-            atomic_store(&nSize, 0);
+            atomic_store(&nSize, size_t(0));
             nHead   = 0;
             nTail   = 0;
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/core/presets.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/presets.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/core/presets.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/core/presets.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-pluginfw
+ * Created on: 2 апр. 2024 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/const.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
+
+namespace lsp
+{
+    namespace core
+    {
+        static ssize_t compare_presets_asc(const resource::resource_t *a, const resource::resource_t *b)
+        {
+            return strcmp(a->name, b->name);
+        }
+
+        static ssize_t compare_presets_desc(const resource::resource_t *a, const resource::resource_t *b)
+        {
+            return strcmp(b->name, a->name);
+        }
+
+        status_t scan_presets(lltl::darray<resource::resource_t> *presets, resource::ILoader *loader, const char *location)
+        {
+            if ((presets == NULL) || (loader == NULL) || (location == NULL))
+                return STATUS_BAD_ARGUMENTS;
+
+            io::Path path;
+            LSPString tmp;
+            resource::resource_t *resources = NULL;
+
+            if (!location)
+                return STATUS_NOT_FOUND;
+
+            if (tmp.fmt_utf8(LSP_BUILTIN_PREFIX "presets/%s", location) < 0)
+                return STATUS_BAD_STATE;
+
+            ssize_t count = loader->enumerate(&tmp, &resources);
+            if (!resources)
+                return STATUS_NOT_FOUND;
+
+            // Process all resources and form the final list of preset files
+            for (ssize_t i=0; i<count; ++i)
+            {
+                resource::resource_t *item = &resources[i];
+
+                // Filter the preset file
+                if (item->type != resource::RES_FILE)
+                    continue;
+                if (path.set(item->name) != STATUS_OK)
+                {
+                    free(resources);
+                    return STATUS_NO_MEM;
+                }
+                if (path.get_ext(&tmp) != STATUS_OK)
+                {
+                    free(resources);
+                    return STATUS_BAD_STATE;
+                }
+
+                if ((!tmp.equals_ascii("patch")) && (!tmp.equals_ascii("preset")))
+                    continue;
+
+                // Add preset file to result
+                strncpy(item->name, path.get(), resource::RESOURCE_NAME_MAX);
+                item->name[resource::RESOURCE_NAME_MAX-1] = '\0';
+                if (!presets->add(item))
+                {
+                    free(resources);
+                    return STATUS_NO_MEM;
+                }
+            }
+
+            free(resources);
+
+            return STATUS_OK;
+        }
+
+        void sort_presets(lltl::darray<resource::resource_t> *presets, bool ascending)
+        {
+            if (presets == NULL)
+                return;
+
+            presets->qsort(
+                (ascending) ?
+                    compare_presets_asc :
+                    compare_presets_desc);
+        }
+
+        void init_preset_state(preset_state_t *state)
+        {
+            state->flags        = PRESET_FLAG_NONE;
+            state->tab          = 0;
+            state->name[0]      = '\0';
+        }
+
+        void copy_preset_state(preset_state_t *dst, const preset_state_t *src)
+        {
+            dst->flags          = src->flags;
+            dst->tab            = src->tab;
+            strcpy(dst->name, src->name);
+        }
+
+    } /* namespace core */
+} /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Controller.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Controller.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Controller.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Controller.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 24 мая 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/plug-fw/ctl.h>
+#include <lsp-plug.in/plug-fw/ctl/parse.h>
+#include <lsp-plug.in/stdlib/string.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        const ctl_class_t Controller::metadata = { "Controller", NULL };
+
+        Controller::Controller(ui::IWrapper *wrapper):
+            ui::IPortListener()
+        {
+            pClass          = &metadata;
+            pWrapper        = wrapper;
+        }
+
+        Controller::~Controller()
+        {
+        }
+
+        status_t Controller::init()
+        {
+            return STATUS_OK;
+        }
+
+        void Controller::destroy()
+        {
+        }
+
+        bool Controller::instance_of(const ctl_class_t *wclass) const
+        {
+            const ctl_class_t *wc = pClass;
+            while (wc != NULL)
+            {
+                if (wc == wclass)
+                    return true;
+                wc = wc->parent;
+            }
+
+            return false;
+        }
+
+        bool Controller::link_port(ui::IPort **port, const char *id)
+        {
+            if (port == NULL)
+                return false;
+
+            ui::IPort *oldp = *port;
+            ui::IPort *newp = pWrapper->port(id);
+            if (oldp == newp)
+                return true;
+
+            if (oldp != NULL)
+                oldp->unbind(this);
+            if (newp != NULL)
+                newp->bind(this);
+
+            *port           = newp;
+
+            return true;
+        }
+
+        bool Controller::bind_port(ui::IPort **port, const char *param, const char *name, const char *value)
+        {
+            if (strcmp(param, name))
+                return false;
+
+            return link_port(port, value);
+        }
+
+        bool Controller::set_value(bool *v, const char *param, const char *name, const char *value)
+        {
+            if (v == NULL)
+                return false;
+            if (strcmp(param, name))
+                return false;
+            PARSE_BOOL(value, *v = __);
+            return true;
+        }
+
+        bool Controller::set_value(ssize_t *v, const char *param, const char *name, const char *value)
+        {
+            if (v == NULL)
+                return false;
+            if (strcmp(param, name))
+                return false;
+            PARSE_INT(value, *v = __);
+            return true;
+        }
+
+        bool Controller::set_value(size_t *v, const char *param, const char *name, const char *value)
+        {
+            if (v == NULL)
+                return false;
+            if (strcmp(param, name))
+                return false;
+            PARSE_UINT(value, *v = __);
+            return true;
+        }
+
+        bool Controller::set_value(float *v, const char *param, const char *name, const char *value)
+        {
+            if (v == NULL)
+                return false;
+            if (strcmp(param, name))
+                return false;
+            PARSE_FLOAT(value, *v = __);
+            return true;
+        }
+
+        bool Controller::set_value(LSPString *v, const char *param, const char *name, const char *value)
+        {
+            if (v == NULL)
+                return false;
+            if (strcmp(param, name))
+                return false;
+
+            v->set_utf8(value);
+            return true;
+        }
+
+        bool Controller::set_expr(ctl::Expression *expr, const char *param, const char *name, const char *value)
+        {
+            if (expr == NULL)
+                return false;
+            if (strcmp(name, param))
+                return false;
+
+            if (!expr->parse(value))
+                lsp_warn("Failed to parse expression for attribute '%s': %s", name, value);
+            return true;
+        }
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/DOMController.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/DOMController.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/DOMController.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/DOMController.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 24 мая 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/ctl.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        const ctl_class_t DOMController::metadata = { "Controller", &Controller::metadata };
+
+        DOMController::DOMController(ui::IWrapper *wrapper):
+            Controller(wrapper)
+        {
+            pClass          = &metadata;
+        }
+
+        DOMController::~DOMController()
+        {
+        }
+
+        void DOMController::set(ui::UIContext *ctx, const char *name, const char *value)
+        {
+        }
+
+        void DOMController::begin(ui::UIContext *ctx)
+        {
+        }
+
+        void DOMController::end(ui::UIContext *ctx)
+        {
+        }
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Factory.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Factory.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Factory.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Factory.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 11 апр. 2021 г.
@@ -39,11 +39,11 @@ namespace lsp
             pNext           = NULL;
         }
 
-        status_t Factory::create(Widget **ctl, ui::UIContext *context, const LSPString *name)
+        status_t Factory::create(Controller **ctl, ui::UIContext *context, const LSPString *name)
         {
             return STATUS_NOT_FOUND;
         }
-    }
-}
+    } /* namespace ctl */
+} /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/PluginWindow.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/PluginWindow.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/PluginWindow.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/PluginWindow.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -22,11 +22,10 @@
 #include <lsp-plug.in/common/debug.h>
 #include <lsp-plug.in/plug-fw/ctl.h>
 #include <lsp-plug.in/stdlib/string.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
 #include <lsp-plug.in/plug-fw/meta/func.h>
 #include <lsp-plug.in/plug-fw/meta/ports.h>
 #include <lsp-plug.in/runtime/system.h>
-#include <lsp-plug.in/io/OutStringSequence.h>
-#include <lsp-plug.in/io/InStringSequence.h>
 #include <lsp-plug.in/tk/tk.h>
 
 #include <lsp-plug.in/plug-fw/ui.h>
@@ -47,25 +46,17 @@ namespace lsp
     namespace ctl
     {
         //-----------------------------------------------------------------
-        PluginWindow::ConfigSink::ConfigSink(ui::IWrapper *wrapper)
-        {
-            pWrapper = wrapper;
-        }
-
-        void PluginWindow::ConfigSink::unbind()
-        {
-            pWrapper        = NULL;
-        }
-
-        status_t PluginWindow::ConfigSink::receive(const LSPString *text, const char *mime)
+        static const char * manual_prefixes[] =
         {
-            ui::IWrapper *wrapper = pWrapper;
-            if (wrapper == NULL)
-                return STATUS_NOT_BOUND;
-
-            io::InStringSequence is(text);
-            return wrapper->import_settings(&is, ui::IMPORT_FLAG_NONE);
-        }
+        #ifdef LSP_LIB_PREFIX
+            LSP_LIB_PREFIX("/share"),
+            LSP_LIB_PREFIX("/local/share"),
+        #endif /*  LSP_LIB_PREFIX */
+            "/usr/share",
+            "/usr/local/share",
+            "/share",
+            NULL
+        };
 
         //-----------------------------------------------------------------
         // Plugin window
@@ -90,18 +81,17 @@ namespace lsp
             bResizable                  = false;
 
             pUserPaths                  = NULL;
+            pPresetsWindow              = NULL;
 
             wContent                    = NULL;
             wGreeting                   = NULL;
             wAbout                      = NULL;
             wUserPaths                  = NULL;
             wMenu                       = NULL;
+            wPresets                    = NULL;
             wUIScaling                  = NULL;
             wBundleScaling              = NULL;
             wFontScaling                = NULL;
-            wResetSettings              = NULL;
-            wExport                     = NULL;
-            wImport                     = NULL;
             wPreferHost                 = NULL;
             wRelPaths                   = NULL;
             wInvertVScroll              = NULL;
@@ -109,11 +99,8 @@ namespace lsp
 
             pPVersion                   = NULL;
             pPBypass                    = NULL;
-            pPath                       = NULL;
-            pFileType                   = NULL;
             pR3DBackend                 = NULL;
             pLanguage                   = NULL;
-            pRelPaths                   = NULL;
             pUIScaling                  = NULL;
             pUIScalingHost              = NULL;
             pUIBundleScaling            = NULL;
@@ -124,8 +111,6 @@ namespace lsp
 
             init_enum_menu(&sFilterPointThickness);
 
-            pConfigSink                 = NULL;
-
             sWndScale.nMFlags           = 0;
             sWndScale.sSize.nLeft       = 0;
             sWndScale.sSize.nTop        = 0;
@@ -152,14 +137,6 @@ namespace lsp
             // Cancel greeting timer
             wGreetingTimer.cancel();
 
-            // Unbind configuration sink
-            if (pConfigSink != NULL)
-            {
-                pConfigSink->unbind();
-                pConfigSink->release();
-                pConfigSink = NULL;
-            }
-
             // Delete UI rendering backend bindings
             for (size_t i=0, n=vBackendSel.size(); i<n; ++i)
             {
@@ -225,14 +202,14 @@ namespace lsp
 
             pUserPaths      = NULL;
 
+            pPresetsWindow  = NULL;     // Destroyed by wrapper
+
             wContent        = NULL;
             wGreeting       = NULL;
             wAbout          = NULL;
             wUserPaths      = NULL;
             wMenu           = NULL;
-            wResetSettings  = NULL;
-            wExport         = NULL;
-            wImport         = NULL;
+            wPresets        = NULL;
             wPreferHost     = NULL;
         }
 
@@ -273,6 +250,16 @@ namespace lsp
             Window::set(ctx, name, value);
         }
 
+        void PluginWindow::set_preset_button_text(const char *text)
+        {
+            tk::Button *presetButton = tk::widget_cast<tk::Button>(widgets()->find("trg_presets_menu"));
+
+            if (presetButton != NULL)
+            {
+                presetButton->text()->set_raw(text);
+            }
+        }
+
         status_t PluginWindow::init()
         {
             Window::init();
@@ -284,12 +271,9 @@ namespace lsp
 
             // Bind ports
             BIND_PORT(pWrapper, pPVersion, VERSION_PORT);
-            BIND_PORT(pWrapper, pPath, CONFIG_PATH_PORT);
-            BIND_PORT(pWrapper, pFileType, CONFIG_FTYPE_PORT);
             BIND_PORT(pWrapper, pPBypass, meta::PORT_NAME_BYPASS);
             BIND_PORT(pWrapper, pR3DBackend, R3D_BACKEND_PORT);
             BIND_PORT(pWrapper, pLanguage, LANGUAGE_PORT);
-            BIND_PORT(pWrapper, pRelPaths, REL_PATHS_PORT);
             BIND_PORT(pWrapper, pUIScaling, UI_SCALING_PORT);
             BIND_PORT(pWrapper, pUIScalingHost, UI_SCALING_HOST_PORT);
             BIND_PORT(pWrapper, pUIBundleScaling, UI_BUNDLE_SCALING_PORT);
@@ -311,7 +295,7 @@ namespace lsp
                 wnd->actions()->deny(ws::WA_RESIZE);
 
             LSP_STATUS_ASSERT(create_main_menu());
-            LSP_STATUS_ASSERT(create_reset_settings_menu());
+            LSP_STATUS_ASSERT(create_presets_window());
 
             // Bind event handlers
             wnd->slots()->bind(tk::SLOT_CLOSE, slot_window_close, this);
@@ -321,6 +305,16 @@ namespace lsp
             return STATUS_OK;
         }
 
+        status_t PluginWindow::post_init()
+        {
+            // Bind as preset listener to the wrapper
+            pWrapper->add_preset_listener(this);
+            bind_slot("trg_prev_preset", tk::SLOT_SUBMIT, slot_select_next_preset);
+            bind_slot("trg_next_preset", tk::SLOT_SUBMIT, slot_select_next_preset);
+
+            return STATUS_OK;
+        }
+
         i18n::IDictionary  *PluginWindow::get_default_dict(tk::Widget *src)
         {
             i18n::IDictionary *dict = src->display()->dictionary();
@@ -344,6 +338,11 @@ namespace lsp
             widgets()->add(WUID_MAIN_MENU, wMenu);
             wMenu->init();
 
+            // TODO: Move to a separate method
+            wPresets = new tk::Menu(dpy);
+            widgets()->add(WUID_PRESETS_MENU, wPresets);
+            wPresets->init();
+
             // Initialize menu items
             {
                 // Add 'Plugin manual' menu item
@@ -362,6 +361,9 @@ namespace lsp
                 itm->slots()->bind(tk::SLOT_SUBMIT, slot_show_ui_manual, this);
                 wMenu->add(itm);
 
+                // init_presets(wMenu, true);
+                init_presets(wPresets, false);
+
                 // Add separator
                 itm     = new tk::MenuItem(dpy);
                 widgets()->add(itm);
@@ -430,15 +432,15 @@ namespace lsp
                 itm     = new tk::MenuItem(dpy);
                 widgets()->add(itm);
                 itm->init();
-                itm->text()->set("actions.user_paths");
-                itm->slots()->bind(tk::SLOT_SUBMIT, slot_show_user_paths_dialog, this);
+                itm->text()->set("actions.reset_settings");
+                itm->slots()->bind(tk::SLOT_SUBMIT, slot_reset_settings, this);
                 wMenu->add(itm);
 
-                // Add separator
                 itm     = new tk::MenuItem(dpy);
                 widgets()->add(itm);
                 itm->init();
-                itm->type()->set_separator();
+                itm->text()->set("actions.user_paths");
+                itm->slots()->bind(tk::SLOT_SUBMIT, slot_show_user_paths_dialog, this);
                 wMenu->add(itm);
 
                 // Create 'Dump state' menu item if supported
@@ -452,11 +454,12 @@ namespace lsp
                     wMenu->add(itm);
                 }
 
-                // Create UI behaviour menu
-                init_ui_behaviour(wMenu);
-
-                // Create language selection menu
-                init_i18n_support(wMenu);
+                // Add separator
+                itm     = new tk::MenuItem(dpy);
+                widgets()->add(itm);
+                itm->init();
+                itm->type()->set_separator();
+                wMenu->add(itm);
 
                 // Create UI scaling menu
                 init_scaling_support(wMenu);
@@ -470,37 +473,15 @@ namespace lsp
                 // Create schema selection support menu
                 init_visual_schema_support(wMenu);
 
+                // Create language selection menu
+                init_i18n_support(wMenu);
+
                 // Add support of 3D rendering backend switch
                 if (meta->extensions & meta::E_3D_BACKEND)
                     init_r3d_support(wMenu);
 
-                init_presets(wMenu);
-            }
-
-            return STATUS_OK;
-        }
-
-        status_t PluginWindow::create_reset_settings_menu()
-        {
-            tk::Window *wnd             = tk::widget_cast<tk::Window>(wWidget);
-            tk::Display *dpy            = wnd->display();
-
-            // Initialize menu
-            wResetSettings              = new tk::Menu(dpy);
-            widgets()->add(WUID_RESET_SETTINGS_MENU, wResetSettings);
-            wResetSettings->init();
-            inject_style(wResetSettings, "PluginWindow::ResetMenu");
-
-            // Initialize menu items
-            {
-                // Add 'Reset' menu item
-                tk::MenuItem *itm       = new tk::MenuItem(dpy);
-                widgets()->add(itm);
-                itm->init();
-                itm->text()->set("actions.reset");
-                inject_style(itm, "PluginWindow::ResetMenu::Reset");
-                itm->slots()->bind(tk::SLOT_SUBMIT, slot_confirm_reset_settings, this);
-                wResetSettings->add(itm);
+                // Create UI behaviour menu
+                init_ui_behaviour(wMenu);
             }
 
             return STATUS_OK;
@@ -991,6 +972,9 @@ namespace lsp
                 return STATUS_NO_MEM;
             item->menu()->set(menu);
 
+            // Thickness of the enum menu item
+            wFilterPointThickness = create_enum_menu(&sFilterPointThickness, menu, "actions.ui_behavior.filter_point_thickness");
+
             // Create menu items
             LSP_STATUS_ASSERT(
                 add_ui_flag( menu,
@@ -1024,11 +1008,16 @@ namespace lsp
             
             LSP_STATUS_ASSERT(
                 add_ui_flag(menu,
-                    UI_FILELIST_NAVIGAION_AUTOLOAD_PORT,
+                    UI_FILELIST_NAVIGATION_AUTOLOAD_PORT,
                     "actions.ui_behavior.file_list_navigation_autoload"));
 
             LSP_STATUS_ASSERT(
                 add_ui_flag(menu,
+                    UI_FILELIST_NAVIGATION_AUTOPLAY_PORT,
+                    "actions.ui_behavior.file_list_navigation_autoplay"));
+
+            LSP_STATUS_ASSERT(
+                add_ui_flag(menu,
                     UI_TAKE_INST_NAME_FROM_FILE_PORT,
                     "actions.ui_behavior.take_instrument_name_from_file"));
 
@@ -1068,85 +1057,70 @@ namespace lsp
             return strcmp(a->name, b->name);
         }
 
-        status_t PluginWindow::scan_presets(const char *location, lltl::darray<resource::resource_t> *presets)
+        status_t PluginWindow::init_presets(tk::Menu *menu, bool add_submenu)
         {
-            io::Path path;
-            LSPString tmp;
-            resource::resource_t *resources = NULL;
+            status_t res;
+            if (menu == NULL)
+                return STATUS_OK;
 
-            if (tmp.fmt_utf8(LSP_BUILTIN_PREFIX "presets/%s", location) < 0)
-                return STATUS_BAD_STATE;
-            ssize_t count = pWrapper->resources()->enumerate(&tmp, &resources);
+            // Enumerate presets
+            lltl::darray<resource::resource_t> presets;
+            const meta::plugin_t *metadata = pWrapper->ui()->metadata();
+            if (metadata == NULL)
+                return STATUS_OK;
 
-            // Process all resources and form the final list of preset files
-            for (ssize_t i=0; i<count; ++i)
-            {
-                resource::resource_t *item = &resources[i];
+            tk::MenuItem *item;
 
-                // Filter the preset file
-                if (item->type != resource::RES_FILE)
-                    continue;
-                if (path.set(item->name) != STATUS_OK)
-                {
-                    free(resources);
+            if (add_submenu)
+            {
+                // Create submenu item
+                item          = create_menu_item(menu);
+                if (item == NULL)
                     return STATUS_NO_MEM;
-                }
-                if (path.get_ext(&tmp) != STATUS_OK)
-                {
-                    free(resources);
-                    return STATUS_BAD_STATE;
-                }
-
-                if ((!tmp.equals_ascii("patch")) && (!tmp.equals_ascii("preset")))
-                    continue;
+                item->text()->set("actions.load_preset");
 
-                // Add preset file to result
-                strncpy(item->name, path.get(), resource::RESOURCE_NAME_MAX);
-                item->name[resource::RESOURCE_NAME_MAX-1] = '\0';
-                if (!presets->add(item))
-                {
-                    free(resources);
+                // Create submenu
+                menu                        = create_menu();
+                if (menu == NULL)
                     return STATUS_NO_MEM;
-                }
+                item->menu()->set(menu);
             }
 
-            free(resources);
-            presets->qsort(compare_presets);
+            preset_sel_t *sel;
+            io::Path path;
+            LSPString tmp;
 
-            return STATUS_OK;
-        }
+            if ((item = create_menu_item(menu)) == NULL) return STATUS_NO_MEM;
+            item->text()->set("actions.reset_settings");
+            item->slots()->bind(tk::SLOT_SUBMIT, slot_reset_settings, this);
+
+            if ((item = create_menu_item(menu)) == NULL) return STATUS_NO_MEM;
+            item->text()->set_raw("actions.manage_presets");
+            item->slots()->bind(tk::SLOT_SUBMIT, slot_show_presets_window, this);
 
-        status_t PluginWindow::init_presets(tk::Menu *menu)
-        {
-            status_t res;
-            if (menu == NULL)
-                return STATUS_OK;
+            if ((item = create_menu_item(menu)) == NULL) return STATUS_NO_MEM;
+            item->type()->set_separator();
 
-            // Enumerate presets
-            lltl::darray<resource::resource_t> presets;
-            const meta::plugin_t *metadata = pWrapper->ui()->metadata();
-            if ((metadata == NULL) || (metadata->ui_presets == NULL))
-                return STATUS_OK;
-            if (scan_presets(metadata->ui_presets, &presets) != STATUS_OK)
+            if ((item = create_menu_item(menu)) == NULL) return STATUS_NO_MEM;
+            item->text()->set("actions.import_settings_from_file");
+            item->slots()->bind(tk::SLOT_SUBMIT, slot_import_settings_from_file, this);
+
+            if ((item = create_menu_item(menu)) == NULL) return STATUS_NO_MEM;
+            item->text()->set("actions.import_settings_from_clipboard");
+            item->slots()->bind(tk::SLOT_SUBMIT, slot_import_settings_from_clipboard, this);
+
+            // if ((item = create_menu_item(menu)) == NULL) return STATUS_NO_MEM;
+            // item->text()->set("*Open presets folder*");
+
+            if (core::scan_presets(&presets, pWrapper->resources(), metadata->ui_presets) != STATUS_OK)
                 return STATUS_OK;
             if (presets.is_empty())
                 return STATUS_OK;
+            core::sort_presets(&presets, true);
 
-            // Create submenu item
-            tk::MenuItem *item          = create_menu_item(menu);
-            if (item == NULL)
-                return STATUS_NO_MEM;
-            item->text()->set("actions.load_preset");
-
-            // Create submenu
-            menu                        = create_menu();
-            if (menu == NULL)
+            if ((item = create_menu_item(menu)) == NULL)
                 return STATUS_NO_MEM;
-            item->menu()->set(menu);
-
-            preset_sel_t *sel;
-            io::Path path;
-            LSPString tmp;
+            item->type()->set_separator();
 
             for (size_t i=0, n=presets.size(); i<n; ++i)
             {
@@ -1362,6 +1336,8 @@ namespace lsp
             if ((sender == NULL) || (sel == NULL) || (sel->ctl == NULL) || (sel->item == NULL))
                 return STATUS_BAD_ARGUMENTS;
 
+            sel->ctl->set_preset_button_text(sel->item->text()->raw()->get_utf8());
+
             lsp_trace("Loading preset %s", sel->location.get_native());
             size_t flags = ui::IMPORT_FLAG_PRESET;
             if (sel->patch)
@@ -1579,6 +1555,7 @@ namespace lsp
 
             // Header menu
             bind_trigger("trg_main_menu", tk::SLOT_SUBMIT, slot_show_main_menu);
+            bind_trigger("trg_presets_menu", tk::SLOT_SUBMIT, slot_show_presets_window);
             bind_trigger("trg_export_settings", tk::SLOT_SUBMIT, slot_export_settings_to_file);
             bind_trigger("trg_import_settings", tk::SLOT_SUBMIT, slot_import_settings_from_file);
             bind_trigger("trg_reset_settings", tk::SLOT_SUBMIT, slot_reset_settings);
@@ -1658,211 +1635,71 @@ namespace lsp
 
         status_t PluginWindow::add(ui::UIContext *ctx, ctl::Widget *child)
         {
-            return (wContent != NULL) ? wContent->add(child->widget()) : STATUS_BAD_STATE;
-        }
-
-        tk::FileFilters *PluginWindow::create_config_filters(tk::FileDialog *dlg)
-        {
-            tk::FileFilters *f = dlg->filter();
-            if (f == NULL)
-                return f;
-
-            tk::FileMask *ffi = f->add();
-            if (ffi != NULL)
-            {
-                ffi->pattern()->set("*.cfg");
-                ffi->title()->set("files.config.lsp");
-                ffi->extensions()->set_raw(".cfg");
-            }
-
-            ffi = f->add();
-            if (ffi != NULL)
-            {
-                ffi->pattern()->set("*");
-                ffi->title()->set("files.all");
-                ffi->extensions()->set_raw("");
-            }
+            ctl::Overlay *ov = ctl::ctl_cast<ctl::Overlay>(child);
+            tk::WidgetContainer *target = (ov != NULL) ? tk::widget_cast<tk::WidgetContainer>(wWidget) : wContent;
 
-            return f;
+            return (target != NULL) ? target->add(child->widget()) : STATUS_BAD_STATE;
         }
 
         status_t PluginWindow::slot_export_settings_to_file(tk::Widget *sender, void *ptr, void *data)
         {
-            PluginWindow *_this     = static_cast<PluginWindow *>(ptr);
-            tk::Display *dpy        = _this->wWidget->display();
-            tk::FileDialog *dlg     = _this->wExport;
-
-            if (dlg == NULL)
-            {
-                dlg = new tk::FileDialog(dpy);
-                _this->widgets()->add(dlg);
-                _this->wExport = dlg;
-
-                dlg->init();
-                dlg->mode()->set(tk::FDM_SAVE_FILE);
-                dlg->title()->set("titles.export_settings");
-                dlg->action_text()->set("actions.save");
-                dlg->use_confirm()->set(true);
-                dlg->confirm_message()->set("messages.file.confirm_overwrite");
-
-                create_config_filters(dlg);
-
-                // Add 'Relative paths' option if present
-                tk::Box *wc = new tk::Box(dpy);
-                _this->widgets()->add(wc);
-                wc->init();
-                wc->orientation()->set_vertical();
-                wc->allocation()->set_hfill(true);
-
-                if (_this->has_path_ports())
-                {
-                    tk::Box *op_rpath       = new tk::Box(dpy);
-                    _this->widgets()->add(op_rpath);
-                    op_rpath->init();
-                    op_rpath->orientation()->set_horizontal();
-                    op_rpath->spacing()->set(4);
-
-                    // Add switch button
-                    tk::CheckBox *ck_rpath  = new tk::CheckBox(dpy);
-                    _this->widgets()->add(ck_rpath);
-                    ck_rpath->init();
-                    ck_rpath->slots()->bind(tk::SLOT_SUBMIT, slot_relative_path_changed, _this);
-                    _this->wRelPaths        = ck_rpath;
-                    op_rpath->add(ck_rpath);
-
-                    // Add label
-                    tk::Label *lbl_rpath     = new tk::Label(dpy);
-                    _this->widgets()->add(lbl_rpath);
-                    lbl_rpath->init();
-
-                    lbl_rpath->allocation()->set_hexpand(true);
-                    lbl_rpath->allocation()->set_hfill(true);
-                    lbl_rpath->text_layout()->set_halign(-1.0f);
-                    lbl_rpath->text()->set("labels.relative_paths");
-                    op_rpath->add(lbl_rpath);
-
-                    // Add option to dialog
-                    wc->add(op_rpath);
-                }
-
-                // Bind actions
-                if (wc->items()->size() > 0)
-                    dlg->options()->set(wc);
-                dlg->slots()->bind(tk::SLOT_SUBMIT, slot_call_export_settings_to_file, ptr);
-                dlg->slots()->bind(tk::SLOT_SHOW, slot_fetch_path, _this);
-                dlg->slots()->bind(tk::SLOT_HIDE, slot_commit_path, _this);
-            }
+            PluginWindow *self      = static_cast<PluginWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            if (self->pPresetsWindow != NULL)
+                self->pPresetsWindow->show_export_settings_dialog();
 
-            // Initialize and show the window
-            if ((_this->wRelPaths != NULL) && (_this->pRelPaths != NULL))
-            {
-                bool checked = _this->pRelPaths->value() >= 0.5f;
-                _this->wRelPaths->checked()->set(checked);
-            }
-            dlg->show(_this->wWidget);
             return STATUS_OK;
         }
 
         status_t PluginWindow::slot_export_settings_to_clipboard(tk::Widget *sender, void *ptr, void *data)
         {
-            status_t res;
-            LSPString buf;
-            PluginWindow *_this = static_cast<PluginWindow *>(ptr);
+            PluginWindow *self      = static_cast<PluginWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
 
-            // Export settings to text buffer
-            io::OutStringSequence sq(&buf);
-            if ((res = _this->pWrapper->export_settings(&sq)) != STATUS_OK)
-                return STATUS_OK;
-            sq.close();
-
-            // Now 'buf' contains serialized configuration, put it to clipboard
-            tk::TextDataSource *ds = new tk::TextDataSource();
-            if (ds == NULL)
-                return STATUS_NO_MEM;
-            ds->acquire();
-            res = ds->set_text(&buf);
-            if (res == STATUS_OK)
-                res = _this->wWidget->display()->set_clipboard(ws::CBUF_CLIPBOARD, ds);
-            ds->release();
+            if (self->pPresetsWindow != NULL)
+                self->pPresetsWindow->export_settings_to_clipboard();
 
             return STATUS_OK;
         }
 
         status_t PluginWindow::slot_import_settings_from_file(tk::Widget *sender, void *ptr, void *data)
         {
-            PluginWindow *_this     = static_cast<PluginWindow *>(ptr);
-            tk::Display *dpy        = _this->wWidget->display();
-            tk::FileDialog *dlg     = _this->wImport;
-            if (dlg == NULL)
-            {
-                dlg     = new tk::FileDialog(dpy);
-                _this->widgets()->add(dlg);
-                _this->wImport      = dlg;
-
-                dlg->init();
-                dlg->mode()->set(tk::FDM_OPEN_FILE);
-                dlg->title()->set("titles.import_settings");
-                dlg->action_text()->set("actions.open");
-
-                create_config_filters(dlg);
+            PluginWindow *self      = static_cast<PluginWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
 
-                dlg->slots()->bind(tk::SLOT_SUBMIT, slot_call_import_settings_from_file, ptr);
-                dlg->slots()->bind(tk::SLOT_SHOW, slot_fetch_path, _this);
-                dlg->slots()->bind(tk::SLOT_HIDE, slot_commit_path, _this);
-            }
+            if (self->pPresetsWindow != NULL)
+                self->pPresetsWindow->show_import_settings_dialog();
 
-            dlg->show(_this->wWidget);
             return STATUS_OK;
         }
 
         status_t PluginWindow::slot_import_settings_from_clipboard(tk::Widget *sender, void *ptr, void *data)
         {
-            PluginWindow *_this = static_cast<PluginWindow *>(ptr);
-            tk::Display *dpy        = _this->wWidget->display();
-
-            // Create new sink
-            ConfigSink *ds = new ConfigSink(_this->pWrapper);
-            if (ds == NULL)
-                return STATUS_NO_MEM;
-            ds->acquire();
+            PluginWindow *self      = static_cast<PluginWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
 
-            // Release previously used
-            ConfigSink *old = _this->pConfigSink;
-            _this->pConfigSink = ds;
+            if (self->pPresetsWindow != NULL)
+                self->pPresetsWindow->import_settings_from_clipboard();
 
-            if (old != NULL)
-            {
-                old->unbind();
-                old->release();
-            }
-
-            // Request clipboard data
-            return dpy->get_clipboard(ws::CBUF_CLIPBOARD, ds);
+            return STATUS_OK;
         }
 
         status_t PluginWindow::slot_reset_settings(tk::Widget *sender, void *ptr, void *data)
         {
-            PluginWindow *__this = static_cast<PluginWindow *>(ptr);
-            return __this->show_menu(__this->wResetSettings, sender, data);
-        }
+            PluginWindow *self      = static_cast<PluginWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
 
-        status_t PluginWindow::slot_confirm_reset_settings(tk::Widget *sender, void *ptr, void *data)
-        {
-            PluginWindow *__this = static_cast<PluginWindow *>(ptr);
-            return __this->pWrapper->reset_settings();
-        }
+            if (self->pPresetsWindow != NULL)
+                self->pPresetsWindow->reset_settings();
 
-        static const char * manual_prefixes[] =
-        {
-        #ifdef LSP_LIB_PREFIX
-            LSP_LIB_PREFIX("/share"),
-            LSP_LIB_PREFIX("/local/share"),
-        #endif /*  LSP_LIB_PREFIX */
-            "/usr/share",
-            "/usr/local/share",
-            "/share",
-            NULL
-        };
+            return STATUS_OK;
+        }
 
         status_t PluginWindow::slot_show_plugin_manual(tk::Widget *sender, void *ptr, void *data)
         {
@@ -1887,6 +1724,15 @@ namespace lsp
             return STATUS_OK;
         }
 
+        status_t PluginWindow::slot_show_presets_window(tk::Widget *sender, void *ptr, void *data)
+        {
+            PluginWindow *__this = static_cast<PluginWindow *>(ptr);
+            if (__this != NULL)
+                __this->show_presets_window();
+
+            return STATUS_OK;
+        }
+
         status_t PluginWindow::slot_debug_dump(tk::Widget *sender, void *ptr, void *data)
         {
             PluginWindow *__this = static_cast<PluginWindow *>(ptr);
@@ -1902,6 +1748,26 @@ namespace lsp
             return __this->show_menu(__this->wMenu, sender, data);
         }
 
+        status_t PluginWindow::slot_show_presets_menu(tk::Widget *sender, void *ptr, void *data)
+        {
+            PluginWindow *__this = static_cast<PluginWindow *>(ptr);
+            return __this->show_menu(__this->wPresets, sender, data);
+        }
+
+        status_t PluginWindow::slot_select_next_preset(tk::Widget *sender, void *ptr, void *data)
+        {
+            PluginWindow *self = static_cast<PluginWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            if (self->pPresetsWindow == NULL)
+                return STATUS_OK;
+
+            tk::Widget *w = self->widgets()->find("trg_next_preset");
+            self->pPresetsWindow->select_next_preset(sender == w);
+            return STATUS_OK;
+        }
+
         status_t PluginWindow::slot_show_ui_scaling_menu(tk::Widget *sender, void *ptr, void *data)
         {
             PluginWindow *__this = static_cast<PluginWindow *>(ptr);
@@ -1944,34 +1810,6 @@ namespace lsp
             return STATUS_OK;
         }
 
-        status_t PluginWindow::slot_call_export_settings_to_file(tk::Widget *sender, void *ptr, void *data)
-        {
-            LSPString path;
-            PluginWindow *_this = static_cast<PluginWindow *>(ptr);
-            status_t res = _this->wExport->selected_file()->format(&path);
-
-            if (res == STATUS_OK)
-            {
-                bool relative = (_this->pRelPaths != NULL) ? _this->pRelPaths->value() >= 0.5f : false;
-                _this->pWrapper->export_settings(&path, relative);
-            }
-
-            return STATUS_OK;
-        }
-
-        status_t PluginWindow::slot_call_import_settings_from_file(tk::Widget *sender, void *ptr, void *data)
-        {
-            LSPString path;
-            PluginWindow *_this = static_cast<PluginWindow *>(ptr);
-            status_t res = _this->wImport->selected_file()->format(&path);
-
-            if (res == STATUS_OK)
-                _this->pWrapper->import_settings(&path, ui::IMPORT_FLAG_NONE);
-
-            return STATUS_OK;
-        }
-
-
         status_t PluginWindow::slot_greeting_close(tk::Widget *sender, void *ptr, void *data)
         {
             PluginWindow *__this = static_cast<PluginWindow *>(ptr);
@@ -1988,66 +1826,6 @@ namespace lsp
             return STATUS_OK;
         }
 
-        status_t PluginWindow::slot_fetch_path(tk::Widget *sender, void *ptr, void *data)
-        {
-            PluginWindow *_this = static_cast<PluginWindow *>(ptr);
-            if (_this == NULL)
-                return STATUS_BAD_STATE;
-
-            tk::FileDialog *dlg = tk::widget_cast<tk::FileDialog>(sender);
-            if (dlg == NULL)
-                return STATUS_OK;
-
-            // Set-up path
-            if (_this->pPath != NULL)
-            {
-                dlg->path()->set_raw(_this->pPath->buffer<char>());
-            }
-            // Set-up file type
-            if (_this->pFileType != NULL)
-            {
-                size_t filter = _this->pFileType->value();
-                if (filter < dlg->filter()->size())
-                    dlg->selected_filter()->set(filter);
-            }
-
-            return STATUS_OK;
-        }
-
-        status_t PluginWindow::slot_commit_path(tk::Widget *sender, void *ptr, void *data)
-        {
-            PluginWindow *_this = static_cast<PluginWindow *>(ptr);
-            if (_this == NULL)
-                return STATUS_BAD_STATE;
-
-            tk::FileDialog *dlg = tk::widget_cast<tk::FileDialog>(sender);
-            if (dlg == NULL)
-                return STATUS_OK;
-
-            // Update file path
-            if (_this->pPath != NULL)
-            {
-                LSPString tmp_path;
-                if (dlg->path()->format(&tmp_path) == STATUS_OK)
-                {
-                    const char *path = tmp_path.get_utf8();
-                    if (path != NULL)
-                    {
-                        _this->pPath->write(path, strlen(path));
-                        _this->pPath->notify_all(ui::PORT_USER_EDIT);
-                    }
-                }
-            }
-            // Update filter
-            if (_this->pFileType != NULL)
-            {
-                _this->pFileType->set_value(dlg->selected_filter()->get());
-                _this->pFileType->notify_all(ui::PORT_USER_EDIT);
-            }
-
-            return STATUS_OK;
-        }
-
         tk::Label *PluginWindow::create_label(tk::WidgetContainer *dst, const char *key, const char *style_name)
         {
             tk::Label *lbl = new tk::Label(wWidget->display());
@@ -2104,6 +1882,10 @@ namespace lsp
             if ((v != NULL) && (pkgver.equals_utf8(v)))
                 return STATUS_OK;
 
+            // Skip if current version contains "dev"
+            if (strstr(pkgver.get_utf8(), "dev") != NULL)
+                return STATUS_OK;
+
             // Set timer to show the greeting window
             wGreetingTimer.set_handler(timer_show_greeting, this);
             wGreetingTimer.bind(pWrapper->display());
@@ -2143,6 +1925,21 @@ namespace lsp
             return STATUS_OK;
         }
 
+        status_t PluginWindow::show_presets_window()
+        {
+            tk::Window *wnd = tk::widget_cast<tk::Window>(wWidget);
+            if (wnd == NULL)
+                return STATUS_BAD_STATE;
+
+            if (pPresetsWindow == NULL)
+                return STATUS_OK;
+
+            tk::Widget *actor = widgets()->find("trg_presets_menu_area");
+            if (actor == NULL)
+                actor = widgets()->find("trg_presets_menu");
+            return pPresetsWindow->toggle_visibility(actor);
+        }
+
         status_t PluginWindow::show_greeting_window()
         {
             status_t res;
@@ -2469,6 +2266,142 @@ namespace lsp
             return STATUS_OK;
         }
 
+        status_t PluginWindow::create_presets_window()
+        {
+            status_t res;
+
+            PluginWindow *self = this;
+
+            // Create window
+            tk::PopupWindow *w = new tk::PopupWindow(wWidget->display());
+            if (w == NULL)
+                return STATUS_NO_MEM;
+            widgets()->add(w);
+            w->init();
+            w->auto_close()->set(true);
+
+            // Create controller
+            ctl::PresetsWindow *wc = new ctl::PresetsWindow(pWrapper, w, self);
+            if (wc == NULL)
+                return STATUS_NO_MEM;
+            controllers()->add(wc);
+            wc->init();
+
+            ui::UIContext uctx(pWrapper, wc->controllers(), wc->widgets());
+            if ((res = init_context(&uctx)) != STATUS_OK)
+                return res;
+
+            // Parse the XML document
+            ui::xml::RootNode root(&uctx, "window", wc);
+            ui::xml::Handler handler(pWrapper->resources());
+            if ((res = handler.parse_resource(LSP_BUILTIN_PREFIX "ui/presets.xml", &root)) != STATUS_OK)
+                return res;
+
+            if ((res = wc->post_init()) != STATUS_OK)
+                return res;
+
+            pPresetsWindow  = wc;
+
+            return STATUS_OK;
+        }
+
+        void PluginWindow::sync_preset_name()
+        {
+            tk::Widget *w = widgets()->find("trg_presets_menu");
+            if (w == NULL)
+                return;
+
+            tk::String *prop = NULL;
+            tk::Button *btn = NULL;
+            tk::Label *lbl = NULL;
+            // Try to cast to button
+            {
+                btn = tk::widget_cast<tk::Button>(w);
+                if (btn != NULL)
+                    prop        = btn->text();
+            }
+            // Try to cast to label
+            {
+                lbl = tk::widget_cast<tk::Label>(w);
+                if (lbl != NULL)
+                    prop        = lbl->text();
+            }
+            if (prop == NULL)
+                return;
+
+            // Set default label if preset is not selected
+            const ui::preset_t *preset = pWrapper->active_preset();
+            expr::Parameters params;
+
+            // If text clipping is enabled, just update text
+            const bool text_clip = (lbl != NULL) ? lbl->text_clip()->get() : btn->text_clip()->get();
+            if (text_clip)
+            {
+                if (preset == NULL)
+                {
+                    prop->set("actions.presets.select");
+                    return;
+                }
+
+                // Determine how to format the prest name
+                const char *key = "labels.presets.name.normal";
+                const bool changed = pWrapper->active_preset_dirty();
+                if (preset->flags & ui::PRESET_FLAG_USER)
+                    key     = (changed) ? "labels.presets.name.user_mod" : "labels.presets.name.user";
+                else
+                    key     = (changed) ? "labels.presets.name.factory_mod" : "labels.presets.name.factory";
+
+                params.set_string("name", &preset->name);
+                prop->set(key, &params);
+
+                return;
+            }
+
+            // Otherwise, fill esimation list
+            const ui::preset_t *list = pWrapper->all_presets();
+            if (lbl != NULL)
+                lbl->clear_text_estimations();
+            if (btn != NULL)
+                btn->clear_text_estimations();
+
+            for (size_t i=0, n=pWrapper->num_presets(); i<n; ++i)
+            {
+                const ui::preset_t *item = &list[i];
+
+                // Determine how to format the prest name
+                const char *key = "labels.presets.name.normal";
+                const bool changed = pWrapper->active_preset_dirty();
+                if (item->flags & ui::PRESET_FLAG_USER)
+                    key     = (changed) ? "labels.presets.name.user_mod" : "labels.presets.name.user";
+                else
+                    key     = (changed) ? "labels.presets.name.factory_mod" : "labels.presets.name.factory";
+
+                // Fill the text
+                params.set_string("name", &item->name);
+                if (item != preset)
+                {
+                    tk::String *est = (btn != NULL) ? btn->add_text_estimation() : lbl->add_text_estimation();
+                    if (est != NULL)
+                        est->set(key, &params);
+                }
+                else
+                    prop->set(key, &params);
+            }
+
+            if (preset == NULL)
+                prop->set("actions.presets.select");
+        }
+
+        void PluginWindow::preset_activated(const ui::preset_t *preset)
+        {
+            sync_preset_name();
+        }
+
+        void PluginWindow::presets_updated()
+        {
+            sync_preset_name();
+        }
+
         status_t PluginWindow::slot_scaling_toggle_prefer_host(tk::Widget *sender, void *ptr, void *data)
         {
             PluginWindow *_this = static_cast<PluginWindow *>(ptr);
@@ -2882,25 +2815,6 @@ namespace lsp
 
             return STATUS_OK;
         }
-
-        status_t PluginWindow::slot_relative_path_changed(tk::Widget *sender, void *ptr, void *data)
-        {
-            PluginWindow *_this = static_cast<PluginWindow *>(ptr);
-            if (_this == NULL)
-                return STATUS_OK;
-            if (_this->pRelPaths == NULL)
-                return STATUS_OK;
-
-            tk::CheckBox *ck_box = tk::widget_cast<tk::CheckBox>(sender);
-            if (ck_box == NULL)
-                return STATUS_OK;
-
-            float value = ck_box->checked()->get() ? 1.0f : 0.0f;
-            _this->pRelPaths->set_value(value);
-            _this->pRelPaths->notify_all(ui::PORT_USER_EDIT);
-
-            return STATUS_OK;
-        }
 
         status_t PluginWindow::slot_invert_vscroll_changed(tk::Widget *sender, void *ptr, void *data)
         {
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/PresetsWindow.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/PresetsWindow.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/PresetsWindow.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/PresetsWindow.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -0,0 +1,1440 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 31 мар. 2024 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/io/InStringSequence.h>
+#include <lsp-plug.in/io/OutStringSequence.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
+#include <lsp-plug.in/plug-fw/ctl.h>
+
+#include <private/ui/xml/RootNode.h>
+#include <private/ui/xml/Handler.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        //-----------------------------------------------------------------
+        static const char *preset_lists_ids[] =
+        {
+            "all_presets_list",
+            "factory_presets_list",
+            "user_presets_list",
+            "favourites_presets_list"
+        };
+
+        static const char *preset_management_buttons[] =
+        {
+            "btn_save",
+            "btn_favourite",
+            "btn_remove"
+        };
+
+        static const ui::preset_filter_t preset_filters[] =
+        {
+            ui::is_any_preset,
+            ui::is_factory_preset,
+            ui::is_user_preset,
+            ui::is_favourite_preset,
+        };
+
+        static const tk::tether_t presets_tether[] =
+        {
+            { tk::TF_BOTTOM | tk::TF_LEFT,      1.0f,  1.0f },
+            { tk::TF_TOP | tk::TF_LEFT,         1.0f, -1.0f },
+            { tk::TF_BOTTOM | tk::TF_RIGHT,    -1.0f,  1.0f },
+            { tk::TF_TOP | tk::TF_RIGHT,       -1.0f, -1.0f },
+        };
+
+        //-----------------------------------------------------------------
+        PresetsWindow::ConfigSink::ConfigSink(ui::IWrapper *wrapper)
+        {
+            pWrapper = wrapper;
+        }
+
+        void PresetsWindow::ConfigSink::unbind()
+        {
+            pWrapper        = NULL;
+        }
+
+        status_t PresetsWindow::ConfigSink::receive(const LSPString *text, const char *mime)
+        {
+            ui::IWrapper *wrapper = pWrapper;
+            if (wrapper == NULL)
+                return STATUS_NOT_BOUND;
+
+            io::InStringSequence is(text);
+            return wrapper->import_settings(&is, ui::IMPORT_FLAG_NONE);
+        }
+
+        //-----------------------------------------------------------------
+        const ctl_class_t PresetsWindow::metadata = { "PresetsWindow", &Window::metadata };
+
+        PresetsWindow::PresetsWindow(ui::IWrapper *src, tk::Window *widget, PluginWindow *pluginWindow):
+            ctl::Window(src, widget)
+        {
+            pClass          = &metadata;
+
+            pPluginWindow   = pluginWindow;
+            pSavePresetDlg  = NULL;
+            wLastActor      = NULL;
+            wExport         = NULL;
+            wImport         = NULL;
+            wRelPaths       = NULL;
+            wPresetPattern  = NULL;
+
+            for (size_t i=0; i<ui::PRESET_TAB_TOTAL; ++i)
+            {
+                preset_list_t *plist = &vPresetsLists[i];
+                plist->wList    = NULL;
+            }
+            for (size_t i=0; i<BTN_TOTAL; ++i)
+                vButtons[i]     = NULL;
+            wWConfirm       = NULL;
+            wRstConfirm     = NULL;
+            wRemoveConfirm  = NULL;
+            wPresetTabs     = NULL;
+            bWasVisible     = false;
+
+            pConfigSink     = NULL;
+
+            pNewPreset      = NULL;
+
+            pPath           = NULL;
+            pFileType       = NULL;
+            pRelPaths       = NULL;
+        }
+
+        PresetsWindow::~PresetsWindow()
+        {
+            do_destroy();
+        }
+
+        void PresetsWindow::do_destroy()
+        {
+            // Unbind self from wrapper
+            if (pWrapper != NULL)
+                pWrapper->remove_preset_listener(this);
+
+            // Unbind configuration sink
+            if (pConfigSink != NULL)
+            {
+                pConfigSink->unbind();
+                pConfigSink->release();
+                pConfigSink = NULL;
+            }
+
+            // Clear filters
+            for (size_t i=0; i<ui::PRESET_TAB_TOTAL; ++i)
+                destroy_preset_list(&vPresetsLists[i]);
+
+            wExport         = NULL; // Will be destroyed by wrapper
+        }
+
+        void PresetsWindow::destroy_preset_list(preset_list_t *list)
+        {
+            if (list == NULL)
+                return;
+
+            list->vPresets.flush();
+
+            for (size_t i=0, n=list->vItems.size(); i<n; ++i)
+            {
+                tk::ListBoxItem *item = list->vItems.uget(i);
+                if (item != NULL)
+                {
+                    item->destroy();
+                    delete item;
+                }
+            }
+            list->vItems.flush();
+        }
+
+        status_t PresetsWindow::init()
+        {
+            status_t res = ctl::Window::init();
+            if (res != STATUS_OK)
+                return res;
+
+            BIND_PORT(pWrapper, pPath, CONFIG_PATH_PORT);
+            BIND_PORT(pWrapper, pFileType, CONFIG_FTYPE_PORT);
+            BIND_PORT(pWrapper, pRelPaths, REL_PATHS_PORT);
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::post_init()
+        {
+            tk::Window *wnd = tk::widget_cast<tk::Window>(wWidget);
+            if (wnd == NULL)
+                return STATUS_BAD_STATE;
+
+            wPresetPattern  = widgets()->get<tk::Edit>("preset_filter");
+            for (size_t i=0; i<BTN_TOTAL; ++i)
+                vButtons[i]     = widgets()->get<tk::Button>(preset_management_buttons[i]);
+            for (size_t i=0; i<ui::PRESET_TAB_TOTAL; ++i)
+                vPresetsLists[i].wList  = widgets()->get<tk::ListBox>(preset_lists_ids[i]);
+
+            if (vButtons[BTN_FAVOURITE] != NULL)
+                vButtons[BTN_FAVOURITE]->mode()->set_toggle();
+
+            wPresetTabs     = widgets()->get<tk::TabControl>("preset_category");
+
+            bind_slot("preset_filter", tk::SLOT_CHANGE, slot_preset_filter_changed);
+            bind_slot("btn_refresh", tk::SLOT_SUBMIT, slot_refresh_preset_list);
+            bind_slot("btn_save", tk::SLOT_SUBMIT, slot_preset_save_submit);
+            bind_slot("btn_favourite", tk::SLOT_SUBMIT, slot_preset_favourite_submit);
+            bind_slot("btn_reset", tk::SLOT_SUBMIT, slot_reset_settings);
+            bind_slot("btn_remove", tk::SLOT_SUBMIT, slot_preset_remove_click);
+            bind_slot("btn_import", tk::SLOT_SUBMIT, slot_submit_import_settings);
+            bind_slot("btn_export", tk::SLOT_SUBMIT, slot_submit_export_settings);
+            bind_slot("btn_copy", tk::SLOT_SUBMIT, slot_export_settings_to_clipboard);
+            bind_slot("btn_paste", tk::SLOT_SUBMIT, slot_import_settings_from_clipboard);
+            bind_slot("preset_category", tk::SLOT_SUBMIT, slot_preset_tab_selected);
+
+            for (size_t i=0; i<ui::PRESET_TAB_TOTAL; ++i)
+            {
+                const char *list_id = preset_lists_ids[i];
+                bind_slot(list_id, tk::SLOT_SUBMIT, slot_preset_select);
+                bind_slot(list_id, tk::SLOT_MOUSE_DBL_CLICK, slot_preset_dbl_click);
+                bind_slot(list_id, tk::SLOT_CHANGE, slot_preset_select);
+            }
+
+            pWrapper->add_preset_listener(this);
+            sync_preset_button_state();
+            sync_preset_tab();
+
+            return STATUS_OK;
+        }
+
+        void PresetsWindow::destroy()
+        {
+            do_destroy();
+            ctl::Window::destroy();
+        }
+
+        bool PresetsWindow::need_indication(size_t i)
+        {
+            switch (i)
+            {
+                case ui::PRESET_TAB_ALL:
+                case ui::PRESET_TAB_FAVOURITES:
+                    return true;
+                case ui::PRESET_TAB_USER:
+                case ui::PRESET_TAB_FACTORY:
+                default:
+                    break;
+            }
+            return false;
+        }
+
+        void PresetsWindow::make_preset_list(preset_list_t *list, const ui::preset_t *presets,
+            size_t count, ui::preset_filter_t filter, bool indicate)
+        {
+            tk::ListBox *lb = list->wList;
+            if (lb == NULL)
+                return;
+
+            status_t res;
+            io::Path path;
+            LSPString preset_name;
+            LSPString preset_pattern;
+            preset_list_t tmp;
+
+            // Create temporary list
+            tmp.wList       = NULL;
+            lsp_finally {
+                destroy_preset_list(&tmp);
+            };
+
+            tk::Display *dpy = wWidget->display();
+            for (size_t i=0; i<count; ++i)
+            {
+                // Get preset and filter
+                const ui::preset_t *p = &presets[i];
+                if (!filter(p))
+                    continue;
+
+                // Create list box item
+                tk::ListBoxItem *item = new tk::ListBoxItem(dpy);
+                if (item == NULL)
+                    continue;
+                lsp_finally {
+                    if (item != NULL)
+                    {
+                        item->destroy();
+                        delete item;
+                    }
+                };
+
+                if ((res = item->init()) != STATUS_OK)
+                    continue;
+
+                // Set name
+                sync_preset_name(item, p, indicate);
+
+                // Add item to preset list
+                if (!tmp.vPresets.add(const_cast<ui::preset_t *>(p)))
+                    continue;
+
+                // Add item to ListBox
+                if (!tmp.vItems.add(item))
+                {
+                    tmp.vPresets.pop();
+                    continue;
+                }
+                item    = NULL;
+            }
+
+            // Add new items to list
+            lb->items()->clear();
+            for (size_t i=0, n=tmp.vItems.size(); i<n; ++i)
+            {
+                tk::ListBoxItem *item = tmp.vItems.uget(i);
+                if (item != NULL)
+                    lb->add(item);
+            }
+
+            // Commit result
+            tmp.vItems.swap(list->vItems);
+            tmp.vPresets.swap(list->vPresets);
+        }
+
+        const ui::preset_t *PresetsWindow::current_preset()
+        {
+            const ui::preset_tab_t tab = pWrapper->preset_tab();
+            preset_list_t *list = (tab < ui::PRESET_TAB_TOTAL) ? &vPresetsLists[tab] : NULL;
+
+            tk::ListBoxItem *item = (list->wList != NULL) ? list->wList->selected()->any() : NULL;
+            const size_t index = list->vItems.index_of(item);
+            return list->vPresets.get(index);
+        }
+
+        void PresetsWindow::sync_preset_button_state()
+        {
+            const ui::preset_t *current = current_preset();
+            sync_preset_button_state(current);
+        }
+
+        void PresetsWindow::sync_preset_tab()
+        {
+            if (wPresetTabs == NULL)
+                return;
+
+            tk::Tab *tab = wPresetTabs->widgets()->get(pWrapper->preset_tab());
+            wPresetTabs->selected()->set(tab);
+        }
+
+        void PresetsWindow::sync_preset_button_state(const ui::preset_t *preset)
+        {
+            tk::Button *btn = vButtons[BTN_FAVOURITE];
+            if (btn != NULL)
+            {
+                const bool can_toggle = preset != NULL;
+                const bool is_favourite = (preset != NULL) && (preset->flags & ui::PRESET_FLAG_FAVOURITE);
+                btn->editable()->set(can_toggle);
+                btn->active()->set(can_toggle);
+                btn->down()->set(is_favourite);
+            }
+
+            btn = vButtons[BTN_DELETE];
+            if (btn != NULL)
+            {
+                const bool editable = (preset != NULL) && (preset->flags & ui::PRESET_FLAG_USER);
+                btn->editable()->set(editable);
+                btn->active()->set(editable);
+            }
+        }
+
+        bool PresetsWindow::has_path_ports()
+        {
+            for (size_t i = 0, n = pWrapper->ports(); i < n; ++i)
+            {
+                ui::IPort *p = pWrapper->port(i);
+                const meta::port_t *meta = (p != NULL) ? p->metadata() : NULL;
+                if ((meta != NULL) && (meta->role == meta::R_PATH))
+                    return true;
+            }
+            return false;
+        }
+
+        tk::FileFilters *PresetsWindow::create_config_filters(tk::FileDialog *dlg)
+        {
+            tk::FileFilters *f = dlg->filter();
+            if (f == NULL)
+                return f;
+
+            tk::FileMask *ffi = f->add();
+            if (ffi != NULL)
+            {
+                ffi->pattern()->set("*.cfg");
+                ffi->title()->set("files.config.lsp");
+                ffi->extensions()->set_raw(".cfg");
+            }
+
+            ffi = f->add();
+            if (ffi != NULL)
+            {
+                ffi->pattern()->set("*");
+                ffi->title()->set("files.all");
+                ffi->extensions()->set_raw("");
+            }
+
+            return f;
+        }
+
+        status_t PresetsWindow::show(tk::Widget *actor)
+        {
+            tk::PopupWindow *wnd = tk::widget_cast<tk::PopupWindow>(wWidget);
+            if (wnd == NULL)
+                return STATUS_BAD_STATE;
+
+            wLastActor = actor;
+            if (actor != NULL)
+            {
+                ws::rectangle_t r;
+                actor->get_screen_rectangle(&r);
+
+                wnd->set_tether(presets_tether, sizeof(presets_tether)/sizeof(tk::tether_t));
+                wnd->trigger_widget()->set(actor);
+                wnd->trigger_area()->set(&r);
+            }
+
+            wnd->show();
+            wnd->grab_events(ws::GRAB_DROPDOWN);
+
+            return STATUS_OK;
+        }
+
+        bool PresetsWindow::visible() const
+        {
+            tk::PopupWindow *wnd = tk::widget_cast<tk::PopupWindow>(wWidget);
+            if (wnd == NULL)
+                return false;
+
+            return wnd->visibility()->get();
+        }
+
+        status_t PresetsWindow::hide()
+        {
+            if (wWidget == NULL)
+                return STATUS_BAD_STATE;
+
+            wWidget->hide();
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::toggle_visibility(tk::Widget *actor)
+        {
+            return (visible()) ? hide() : show(actor);
+        }
+
+        status_t PresetsWindow::show_export_settings_dialog()
+        {
+            if (pPluginWindow == NULL)
+                return STATUS_BAD_STATE;
+
+            tk::Display *dpy        = wWidget->display();
+            tk::FileDialog *dlg     = wExport;
+
+            if (dlg == NULL)
+            {
+                dlg = new tk::FileDialog(dpy);
+                if (dlg == NULL)
+                    return STATUS_NO_MEM;
+
+                widgets()->add(dlg);
+                wExport = dlg;
+
+                dlg->init();
+                dlg->mode()->set(tk::FDM_SAVE_FILE);
+                dlg->title()->set("titles.export_settings");
+                dlg->action_text()->set("actions.save");
+                dlg->use_confirm()->set(true);
+                dlg->confirm_message()->set("messages.file.confirm_overwrite");
+
+                create_config_filters(dlg);
+
+                // Add 'Relative paths' option if present
+                tk::Box *wc = new tk::Box(dpy);
+                if (wc == NULL)
+                    return STATUS_NO_MEM;
+
+                widgets()->add(wc);
+                wc->init();
+                wc->orientation()->set_vertical();
+                wc->allocation()->set_hfill(true);
+
+                if (has_path_ports())
+                {
+                    tk::Box *op_rpath       = new tk::Box(dpy);
+                    widgets()->add(op_rpath);
+                    op_rpath->init();
+                    op_rpath->orientation()->set_horizontal();
+                    op_rpath->spacing()->set(4);
+
+                    // Add switch button
+                    tk::CheckBox *ck_rpath  = new tk::CheckBox(dpy);
+                    widgets()->add(ck_rpath);
+                    ck_rpath->init();
+                    ck_rpath->slots()->bind(tk::SLOT_SUBMIT, slot_relative_path_changed, self());
+                    wRelPaths               = ck_rpath;
+                    op_rpath->add(ck_rpath);
+
+                    // Add label
+                    tk::Label *lbl_rpath     = new tk::Label(dpy);
+                    widgets()->add(lbl_rpath);
+                    lbl_rpath->init();
+
+                    lbl_rpath->allocation()->set_hexpand(true);
+                    lbl_rpath->allocation()->set_hfill(true);
+                    lbl_rpath->text_layout()->set_halign(-1.0f);
+                    lbl_rpath->text()->set("labels.relative_paths");
+                    op_rpath->add(lbl_rpath);
+
+                    // Add option to dialog
+                    wc->add(op_rpath);
+                }
+
+                // Bind actions
+                if (wc->items()->size() > 0)
+                    dlg->options()->set(wc);
+                dlg->slots()->bind(tk::SLOT_SUBMIT, slot_exec_export_settings_to_file, self());
+                dlg->slots()->bind(tk::SLOT_SHOW, slot_fetch_path, self());
+                dlg->slots()->bind(tk::SLOT_HIDE, slot_commit_path, self());
+            }
+
+            // Initialize and show the window
+            if ((wRelPaths != NULL) && (pRelPaths != NULL))
+            {
+                bool checked = pRelPaths->value() >= 0.5f;
+                wRelPaths->checked()->set(checked);
+            }
+
+            dlg->show(pPluginWindow->widget());
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::show_import_settings_dialog()
+        {
+            if (pPluginWindow == NULL)
+                return STATUS_BAD_STATE;
+
+            tk::Display *dpy        = wWidget->display();
+            tk::FileDialog *dlg     = wImport;
+
+            if (dlg == NULL)
+            {
+                dlg             = new tk::FileDialog(dpy);
+                if (dlg == NULL)
+                    return STATUS_NO_MEM;
+
+                widgets()->add(dlg);
+                wImport      = dlg;
+
+                dlg->init();
+                dlg->mode()->set(tk::FDM_OPEN_FILE);
+                dlg->title()->set("titles.import_settings");
+                dlg->action_text()->set("actions.open");
+
+                create_config_filters(dlg);
+
+                dlg->slots()->bind(tk::SLOT_SUBMIT, slot_exec_import_settings_from_file, self());
+                dlg->slots()->bind(tk::SLOT_SHOW, slot_fetch_path, self());
+                dlg->slots()->bind(tk::SLOT_HIDE, slot_commit_path, self());
+            }
+
+            dlg->show(pPluginWindow->widget());
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::import_settings_from_clipboard()
+        {
+            tk::Display *dpy        = wWidget->display();
+
+            // Create new sink
+            ConfigSink *ds          = new ConfigSink(pWrapper);
+            if (ds == NULL)
+                return STATUS_NO_MEM;
+            ds->acquire();
+
+            // Release previously used
+            ConfigSink *old         = pConfigSink;
+            pConfigSink             = ds;
+
+            if (old != NULL)
+            {
+                old->unbind();
+                old->release();
+            }
+
+            // Request clipboard data
+            return dpy->get_clipboard(ws::CBUF_CLIPBOARD, ds);
+        }
+
+        status_t PresetsWindow::export_settings_to_clipboard()
+        {
+            status_t res;
+            LSPString buf;
+
+            // Export settings to text buffer
+            io::OutStringSequence sq(&buf);
+            if ((res = pWrapper->export_settings(&sq)) != STATUS_OK)
+                return STATUS_OK;
+            sq.close();
+
+            // Now 'buf' contains serialized configuration, put it to clipboard
+            tk::TextDataSource *ds = new tk::TextDataSource();
+            if (ds == NULL)
+                return STATUS_NO_MEM;
+            ds->acquire();
+            lsp_finally { ds->release(); };
+
+            res = ds->set_text(&buf);
+            if (res == STATUS_OK)
+                res = wWidget->display()->set_clipboard(ws::CBUF_CLIPBOARD, ds);
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::reset_settings()
+        {
+            pWrapper->reset_settings();
+            return STATUS_OK;
+        }
+
+        void PresetsWindow::sync_preset_lists()
+        {
+            LSPString filter;
+            if (wPresetPattern != NULL)
+                wPresetPattern->text()->format(&filter);
+
+            // Set selection for each list
+            const ui::preset_t *active = pWrapper->active_preset();
+            for (size_t i=0; i<ui::PRESET_TAB_TOTAL; ++i)
+            {
+                preset_list_t *list = &vPresetsLists[i];
+                if (list->wList == NULL)
+                    continue;
+
+                // Update visibility of preset items
+                tk::ListBoxItem *selected = NULL;
+                for (size_t j=0, n=list->vPresets.size(); j<n; ++j)
+                {
+                    const ui::preset_t *preset = list->vPresets.get(j);
+                    tk::ListBoxItem *item = list->vItems.get(j);
+                    if ((preset == NULL) || (item == NULL))
+                        continue;
+
+                    const bool visible = preset->name.index_of_nocase(&filter) >= 0;
+                    item->visibility()->set(visible);
+                    if (preset == active)
+                        selected = item;
+                }
+
+                // Make item being selected
+                list->wList->selected()->clear();
+                if (selected != NULL)
+                    list->wList->selected()->add(selected);
+            }
+        }
+
+        void PresetsWindow::sync_preset_name(tk::ListBoxItem *item, const ui::preset_t *preset, bool indicate)
+        {
+            // Determine how to format the prest name
+            const ui::preset_t *active = pWrapper->active_preset();
+            const char *key     = "labels.presets.name.normal";
+            const bool changed  = (preset == active) && (pWrapper->active_preset_dirty());
+            if (indicate)
+            {
+                if (preset->flags & ui::PRESET_FLAG_USER)
+                    key     = (changed) ? "labels.presets.name.user_mod" : "labels.presets.name.user";
+                else
+                    key     = (changed) ? "labels.presets.name.factory_mod" : "labels.presets.name.factory";
+            }
+
+            // Fill the item
+            expr::Parameters params;
+            params.set_string("name", &preset->name);
+            item->text()->set(key, &params);
+
+            lsp_trace("set name for preset %s to %s", preset->name.get_utf8(), key);
+        }
+
+        void PresetsWindow::preset_deactivated(const ui::preset_t *preset)
+        {
+            lsp_trace("preset deactivated: %s", preset->name.get_utf8());
+
+            // Set selection for each list
+            for (size_t i=0; i<ui::PRESET_TAB_TOTAL; ++i)
+            {
+                preset_list_t *list = &vPresetsLists[i];
+                tk::ListBox *lbox   = list->wList;
+                if (lbox == NULL)
+                    continue;
+
+                lbox->selected()->clear();
+                const ssize_t index = list->vPresets.index_of(preset);
+                if (index < 0)
+                    continue;
+
+                // Synchronize state
+                tk::ListBoxItem *item = list->vItems.get(index);
+                if (item != NULL)
+                    sync_preset_name(item, preset, need_indication(i));
+            }
+
+            sync_preset_button_state(preset);
+        }
+
+        void PresetsWindow::preset_activated(const ui::preset_t *preset)
+        {
+            lsp_trace("preset activated: %s", preset->name.get_utf8());
+
+            // Set selection for each list
+            for (size_t i=0; i<ui::PRESET_TAB_TOTAL; ++i)
+            {
+                preset_list_t *list = &vPresetsLists[i];
+                tk::ListBox *lbox   = list->wList;
+                if (lbox == NULL)
+                    continue;
+
+                lbox->selected()->clear();
+                const ssize_t index = list->vPresets.index_of(preset);
+                if (index < 0)
+                    continue;
+
+                // Synchronize state
+                tk::ListBoxItem *item = list->vItems.get(index);
+                if (item == NULL)
+                    continue;
+
+                sync_preset_name(item, preset, need_indication(i));
+                if (!item->visibility()->get())
+                    continue;
+
+                lbox->selected()->add(item);
+            }
+
+            sync_preset_button_state(preset);
+        }
+
+        void PresetsWindow::presets_updated()
+        {
+            lsp_trace("presets updated");
+
+            const ui::preset_t *presets = pWrapper->all_presets();
+            const size_t count = pWrapper->num_presets();
+
+            for (size_t i=0; i<ui::PRESET_TAB_TOTAL; ++i)
+                make_preset_list(
+                    &vPresetsLists[i],
+                    presets, count,
+                    preset_filters[i],
+                    need_indication(i));
+
+            sync_preset_lists();
+            sync_preset_button_state();
+            sync_preset_tab();
+        }
+
+        bool PresetsWindow::request_change_preset_conrifmation(const ui::preset_t *preset)
+        {
+            if (preset == NULL)
+                return false;
+
+            if (wWConfirm == NULL)
+            {
+                // Create and initialize dialog object
+                tk::MessageBox *dialog = new tk::MessageBox(wWidget->display());
+                if (dialog == NULL)
+                    return false;
+                lsp_finally {
+                    if (dialog != NULL)
+                    {
+                        dialog->destroy();
+                        delete dialog;
+                    }
+                };
+
+                status_t res = dialog->init();
+                if (res != STATUS_OK)
+                    return false;
+
+                dialog->title()->set("titles.confirmation");
+                dialog->heading()->set("headings.confirmation");
+                dialog->add("actions.confirm.yes", slot_accept_preset_selection, self());
+                dialog->add("actions.confirm.no", slot_reject_preset_selection, self());
+
+                dialog->buttons()->get(0)->constraints()->set_min_width(96);
+                dialog->buttons()->get(1)->constraints()->set_min_width(96);
+
+                bind_shortcut(dialog, ws::WSK_ESCAPE, tk::KM_NONE, slot_reject_preset_selection);
+                bind_shortcut(dialog, 'n', tk::KM_NONE, slot_reject_preset_selection);
+                bind_shortcut(dialog, 'N', tk::KM_NONE, slot_reject_preset_selection);
+                bind_shortcut(dialog, ws::WSK_RETURN, tk::KM_NONE, slot_accept_preset_selection);
+                bind_shortcut(dialog, ws::WSK_KEYPAD_ENTER, tk::KM_NONE, slot_accept_preset_selection);
+                bind_shortcut(dialog, 'y', tk::KM_NONE, slot_accept_preset_selection);
+                bind_shortcut(dialog, 'Y', tk::KM_NONE, slot_accept_preset_selection);
+
+                // Commit dialog
+                if (widgets()->add(dialog) != STATUS_OK)
+                    return false;
+                wWConfirm       = release_ptr(dialog);
+            }
+
+            // Update text
+            expr::Parameters params;
+            params.set_string("name", &preset->name);
+            wWConfirm->message()->set(
+                (preset->flags & ui::PRESET_FLAG_USER) ?
+                    "messages.presets.factory_preset_changed" :
+                    "messages.presets.user_preset_changed",
+                &params);
+
+            // Hide self and show the nested window
+            bWasVisible     = wWidget->visibility()->get();
+            if (bWasVisible)
+                hide();
+            wWConfirm->show(wLastActor);
+
+            return true;
+        }
+
+        bool PresetsWindow::request_reset_state_confirmation()
+        {
+            if (wRstConfirm == NULL)
+            {
+                // Create and initialize dialog object
+                tk::MessageBox *dialog = new tk::MessageBox(wWidget->display());
+                if (dialog == NULL)
+                    return false;
+                lsp_finally {
+                    if (dialog != NULL)
+                    {
+                        dialog->destroy();
+                        delete dialog;
+                    }
+                };
+
+                status_t res = dialog->init();
+                if (res != STATUS_OK)
+                    return false;
+
+                dialog->title()->set("titles.confirmation");
+                dialog->heading()->set("headings.confirmation");
+                dialog->add("actions.confirm.yes", slot_accept_reset_state, self());
+                dialog->add("actions.confirm.no", slot_reject_reset_state, self());
+
+                dialog->buttons()->get(0)->constraints()->set_min_width(96);
+                dialog->buttons()->get(1)->constraints()->set_min_width(96);
+
+                bind_shortcut(dialog, ws::WSK_ESCAPE, tk::KM_NONE, slot_reject_reset_state);
+                bind_shortcut(dialog, 'n', tk::KM_NONE, slot_reject_reset_state);
+                bind_shortcut(dialog, 'N', tk::KM_NONE, slot_reject_reset_state);
+                bind_shortcut(dialog, ws::WSK_RETURN, tk::KM_NONE, slot_accept_reset_state);
+                bind_shortcut(dialog, ws::WSK_KEYPAD_ENTER, tk::KM_NONE, slot_accept_reset_state);
+                bind_shortcut(dialog, 'y', tk::KM_NONE, slot_accept_reset_state);
+                bind_shortcut(dialog, 'Y', tk::KM_NONE, slot_accept_reset_state);
+
+                // Commit dialog
+                if (widgets()->add(dialog) != STATUS_OK)
+                    return false;
+                wRstConfirm     = release_ptr(dialog);
+
+                wRstConfirm->message()->set("messages.presets.confirm_reset_state");
+            }
+
+            // Hide self and show the nested window
+            hide();
+            wRstConfirm->show(wLastActor);
+
+            return true;
+        }
+
+        bool PresetsWindow::request_remove_preset_confirmation()
+        {
+            // Get current preset
+            const ui::preset_t *current = current_preset();
+            if ((current == NULL) || (!(current->flags & ui::PRESET_FLAG_USER)))
+                return false;
+
+            if (wRemoveConfirm == NULL)
+            {
+                // Create and initialize dialog object
+                tk::MessageBox *dialog = new tk::MessageBox(wWidget->display());
+                if (dialog == NULL)
+                    return false;
+                lsp_finally {
+                    if (dialog != NULL)
+                    {
+                        dialog->destroy();
+                        delete dialog;
+                    }
+                };
+
+                status_t res = dialog->init();
+                if (res != STATUS_OK)
+                    return false;
+
+                dialog->title()->set("titles.confirmation");
+                dialog->heading()->set("headings.confirmation");
+                dialog->add("actions.confirm.yes", slot_accept_remove_preset, self());
+                dialog->add("actions.confirm.no", slot_reject_remove_preset, self());
+
+                dialog->buttons()->get(0)->constraints()->set_min_width(96);
+                dialog->buttons()->get(1)->constraints()->set_min_width(96);
+
+                bind_shortcut(dialog, ws::WSK_ESCAPE, tk::KM_NONE, slot_reject_remove_preset);
+                bind_shortcut(dialog, 'n', tk::KM_NONE, slot_reject_remove_preset);
+                bind_shortcut(dialog, 'N', tk::KM_NONE, slot_reject_remove_preset);
+                bind_shortcut(dialog, ws::WSK_RETURN, tk::KM_NONE, slot_accept_remove_preset);
+                bind_shortcut(dialog, ws::WSK_KEYPAD_ENTER, tk::KM_NONE, slot_accept_remove_preset);
+                bind_shortcut(dialog, 'y', tk::KM_NONE, slot_accept_remove_preset);
+                bind_shortcut(dialog, 'Y', tk::KM_NONE, slot_accept_remove_preset);
+
+                // Commit dialog
+                if (widgets()->add(dialog) != STATUS_OK)
+                    return false;
+                wRemoveConfirm     = release_ptr(dialog);
+            }
+
+            // Initialize dialog
+            expr::Parameters params;
+            params.set_string("name", &current->name);
+            wRemoveConfirm->message()->set("messages.presets.confirm_remove_preset", &params);
+
+            // Hide self and show the nested window
+            hide();
+            wRemoveConfirm->show(wLastActor);
+
+            return true;
+        }
+
+        void PresetsWindow::select_active_preset(const ui::preset_t *preset)
+        {
+            const ui::preset_t *dirty = (pWrapper->active_preset_dirty()) ? pWrapper->active_preset() : NULL;
+
+            // Check that we need to confirm changes
+            if ((dirty != NULL) && (dirty != preset))
+            {
+                pNewPreset          = preset;
+
+                if (!request_change_preset_conrifmation(dirty))
+                    preset_activated(dirty);
+            }
+            else
+            {
+                pNewPreset          = NULL;
+                pWrapper->select_active_preset(preset);
+            }
+        }
+
+        status_t PresetsWindow::create_save_preset_dialog()
+        {
+            if (pSavePresetDlg != NULL)
+                return STATUS_OK;
+
+            status_t res;
+
+            // Create window
+            tk::Window *w = new tk::Window(wWidget->display());
+            if (w == NULL)
+                return STATUS_NO_MEM;
+            widgets()->add(w);
+            w->init();
+
+            // Create controller
+            ctl::SavePresetDialog *wc = new ctl::SavePresetDialog(pWrapper, w);
+            if (wc == NULL)
+                return STATUS_NO_MEM;
+            controllers()->add(wc);
+            wc->init();
+
+            // Initialize context
+            ui::UIContext uctx(pWrapper, wc->controllers(), wc->widgets());
+            if ((res = uctx.init()) != STATUS_OK)
+                return res;
+
+            // Parse the XML document
+            ui::xml::RootNode root(&uctx, "window", wc);
+            ui::xml::Handler handler(pWrapper->resources());
+            if ((res = handler.parse_resource(LSP_BUILTIN_PREFIX "ui/save_preset.xml", &root)) != STATUS_OK)
+                return res;
+
+            // Initialize the window
+            if ((res = wc->post_init()) != STATUS_OK)
+                return res;
+
+            pSavePresetDlg      = wc;
+            w->slots()->bind(tk::SLOT_SUBMIT, slot_create_preset_window_closed, self());
+            w->slots()->bind(tk::SLOT_CANCEL, slot_create_preset_window_closed, self());
+
+            return STATUS_OK;
+        }
+
+        void PresetsWindow::select_next_preset(bool forward)
+        {
+            // Obtain the current list of presets
+            const ui::preset_tab_t tab  = pWrapper->preset_tab();
+            preset_list_t *list         = (tab < ui::PRESET_TAB_TOTAL) ? &vPresetsLists[tab] : NULL;
+            if (list == NULL)
+                return;
+            const ssize_t num_presets   = list->vPresets.size();
+            if (num_presets <= 0)
+                return;
+
+            // We need to ensure that current preset is in the list
+            const ui::preset_t *preset  = pWrapper->active_preset();
+            ssize_t preset_index        = (preset != NULL) ? list->vPresets.index_of(preset) : -1;
+
+            // Obtain the index of the next preset
+            if (preset_index >= 0)
+            {
+                const ssize_t direction     = (forward) ? 1 : num_presets - 1;
+                preset_index                = (preset_index + direction) % num_presets;
+            }
+            else
+                preset_index                = 0;
+
+            // Obtain new preset
+            preset                      = list->vPresets.get(preset_index);
+            if (preset == NULL)
+                return;
+
+            // Select new active preset
+            select_active_preset(preset);
+        }
+
+        //-----------------------------------------------------------------
+        // Slots
+
+        status_t PresetsWindow::slot_fetch_path(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_BAD_STATE;
+
+            tk::FileDialog *dlg = tk::widget_cast<tk::FileDialog>(sender);
+            if (dlg == NULL)
+                return STATUS_OK;
+
+            // Set-up path
+            if (self->pPath != NULL)
+            {
+                dlg->path()->set_raw(self->pPath->buffer<char>());
+            }
+            // Set-up file type
+            if (self->pFileType != NULL)
+            {
+                size_t filter = self->pFileType->value();
+                if (filter < dlg->filter()->size())
+                    dlg->selected_filter()->set(filter);
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_commit_path(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_BAD_STATE;
+
+            tk::FileDialog *dlg = tk::widget_cast<tk::FileDialog>(sender);
+            if (dlg == NULL)
+                return STATUS_OK;
+
+            // Update file path
+            if (self->pPath != NULL)
+            {
+                LSPString tmp_path;
+                if (dlg->path()->format(&tmp_path) == STATUS_OK)
+                {
+                    const char *path = tmp_path.get_utf8();
+                    if (path != NULL)
+                    {
+                        self->pPath->write(path, strlen(path));
+                        self->pPath->notify_all(ui::PORT_USER_EDIT);
+                    }
+                }
+            }
+            // Update filter
+            if (self->pFileType != NULL)
+            {
+                self->pFileType->set_value(dlg->selected_filter()->get());
+                self->pFileType->notify_all(ui::PORT_USER_EDIT);
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_relative_path_changed(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+            if (self->pRelPaths == NULL)
+                return STATUS_OK;
+
+            tk::CheckBox *ck_box    = tk::widget_cast<tk::CheckBox>(sender);
+            if (ck_box == NULL)
+                return STATUS_OK;
+
+            const float value       = ck_box->checked()->get() ? 1.0f : 0.0f;
+            self->pRelPaths->set_value(value);
+            self->pRelPaths->notify_all(ui::PORT_USER_EDIT);
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_exec_export_settings_to_file(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+            if (self->wExport == NULL)
+                return STATUS_OK;
+
+            LSPString path;
+            status_t res = self->wExport->selected_file()->format(&path);
+            if (res == STATUS_OK)
+            {
+                bool relative = (self->pRelPaths != NULL) ? self->pRelPaths->value() >= 0.5f : false;
+                self->pWrapper->export_settings(&path, relative);
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_exec_import_settings_from_file(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+            if (self->wImport == NULL)
+                return STATUS_OK;
+
+            LSPString path;
+            status_t res = self->wImport->selected_file()->format(&path);
+            if (res == STATUS_OK)
+                self->pWrapper->import_settings(&path, ui::IMPORT_FLAG_NONE);
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_window_close(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            tk::Window *wnd = tk::widget_cast<tk::Window>(self->wWidget);
+            if (wnd != NULL)
+                wnd->visibility()->set(false);
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_preset_remove_click(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+                self->request_remove_preset_confirmation();
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_preset_save_submit(tk::Widget *sender, void *ptr, void *data)
+        {
+            lsp_trace("slot_preset_save_submit");
+
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            const ui::preset_t *active = self->pWrapper->active_preset();
+            status_t res = self->create_save_preset_dialog();
+            if (res == STATUS_OK)
+            {
+                self->wWidget->hide();
+                self->pSavePresetDlg->show(
+                    self->wLastActor,
+                    (active != NULL) ? &active->name : NULL,
+                    (active != NULL) ? (active->flags & ui::PRESET_FLAG_FAVOURITE) : false);
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_preset_favourite_submit(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+            {
+                const ui::preset_t *current = self->current_preset();
+                if (current != NULL)
+                    self->pWrapper->mark_preset_favourite(
+                        current,
+                        !(current->flags & ui::PRESET_FLAG_FAVOURITE));
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_submit_import_settings(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+            {
+                if (self->wWidget != NULL)
+                    self->hide();
+                self->show_import_settings_dialog();
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_submit_export_settings(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+            {
+                if (self->wWidget != NULL)
+                    self->hide();
+                self->show_export_settings_dialog();
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_export_settings_to_clipboard(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+            {
+                if (self->wWidget != NULL)
+                    self->hide();
+                self->export_settings_to_clipboard();
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_import_settings_from_clipboard(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+            {
+                if (self->wWidget != NULL)
+                    self->hide();
+                self->import_settings_from_clipboard();
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_refresh_preset_list(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+                self->pWrapper->scan_presets();
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_reset_settings(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+                self->request_reset_state_confirmation();
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_accept_reset_state(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+            {
+                if (self->wRstConfirm != NULL)
+                    self->wRstConfirm->hide();
+                self->reset_settings();
+            }
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_reject_reset_state(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+            {
+                if (self->wRstConfirm != NULL)
+                    self->wRstConfirm->hide();
+                self->show(self->wLastActor);
+            }
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_accept_remove_preset(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+            {
+                if (self->wRemoveConfirm != NULL)
+                    self->wRemoveConfirm->hide();
+
+                const ui::preset_t *current = self->current_preset();
+                if (current != NULL)
+                    self->pWrapper->remove_preset(current);
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_reject_remove_preset(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self != NULL)
+            {
+                if (self->wRemoveConfirm != NULL)
+                    self->wRemoveConfirm->hide();
+                self->show(self->wLastActor);
+            }
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_preset_select(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            // Find the related list and select the preset
+            for (size_t i=0; i<ui::PRESET_TAB_TOTAL; ++i)
+            {
+                preset_list_t *list = &self->vPresetsLists[i];
+                if (list->wList != sender)
+                    continue;
+
+                // Determine new preset
+                tk::ListBoxItem *item = (list->wList != NULL) ? list->wList->selected()->any() : NULL;
+                const size_t index = list->vItems.index_of(item);
+                const ui::preset_t *preset = list->vPresets.get(index);
+
+                self->select_active_preset(preset);
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_preset_dbl_click(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            const ws::event_t *ev = static_cast<ws::event_t *>(data);
+
+            if (ev->nCode == ws::MCB_LEFT)
+                self->hide();
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_preset_filter_changed(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            self->sync_preset_lists();
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_accept_preset_selection(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            self->pWrapper->select_active_preset(self->pNewPreset);
+            self->pNewPreset = NULL;
+            if (self->wWConfirm != NULL)
+                self->wWConfirm->hide();
+            tk::Window *wnd = tk::widget_cast<tk::Window>(self->wWidget);
+            if ((wnd != NULL) && (self->bWasVisible))
+            {
+                self->bWasVisible = false;
+                self->show(self->wLastActor);
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_reject_preset_selection(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            self->preset_activated(self->pWrapper->active_preset());
+            if (self->wWConfirm != NULL)
+                self->wWConfirm->hide();
+            tk::Window *wnd = tk::widget_cast<tk::Window>(self->wWidget);
+            if ((wnd != NULL) && (self->bWasVisible))
+            {
+                self->bWasVisible = false;
+                self->show(self->wLastActor);
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_create_preset_window_closed(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            tk::Window *wnd = tk::widget_cast<tk::Window>(self->wWidget);
+            if (wnd != NULL)
+                self->show(self->wLastActor);
+
+            return STATUS_OK;
+        }
+
+        status_t PresetsWindow::slot_preset_tab_selected(tk::Widget *sender, void *ptr, void *data)
+        {
+            PresetsWindow *self = static_cast<PresetsWindow *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            if (self->wPresetTabs == NULL)
+                return STATUS_OK;
+
+            tk::Tab *tab = self->wPresetTabs->selected()->get();
+            const ssize_t index = (tab != NULL) ? self->wPresetTabs->widgets()->index_of(tab) : ui::PRESET_TAB_ALL;
+            if (self->pWrapper != NULL)
+                self->pWrapper->set_preset_tab(ui::preset_tab_t(lsp_min(index, ui::PRESET_TAB_TOTAL - 1)));
+
+            return STATUS_OK;
+        }
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Registry.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Registry.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Registry.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Registry.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 11 июн. 2021 г.
@@ -41,34 +41,33 @@ namespace lsp
 
         void Registry::do_destroy()
         {
-            // Destroy all widgets in reverse order
+            // Destroy all controllers in reverse order
             for (size_t i=vControllers.size(); (i--) > 0;)
             {
-                ctl::Widget *w = vControllers.uget(i);
-//                lsp_trace("c = %p", w);
+                ctl::Controller *ctl = vControllers.uget(i);
 
-                if (w != NULL)
+                if (ctl != NULL)
                 {
-                    w->destroy();
-                    delete w;
+                    ctl->destroy();
+                    delete ctl;
                 }
             }
             vControllers.flush();
         }
 
-        status_t Registry::add(ctl::Widget *w)
+        status_t Registry::add(ctl::Controller *ctl)
         {
 //            lsp_trace("c = %p", w);
 
-            if (w == NULL)
+            if (ctl == NULL)
                 return STATUS_BAD_ARGUMENTS;
 
-            if (vControllers.contains(w))
+            if (vControllers.contains(ctl))
                 return STATUS_ALREADY_EXISTS;
 
-            return (vControllers.add(w)) ? STATUS_OK : STATUS_NO_MEM;
+            return (vControllers.add(ctl)) ? STATUS_OK : STATUS_NO_MEM;
         }
-    }
-}
+    } /* namespace ctl */
+} /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/SavePresetDialog.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/SavePresetDialog.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/SavePresetDialog.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/SavePresetDialog.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugins
+ * Created on: 27 июн. 2025 г.
+ *
+ * lsp-plugins is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugins is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugins. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/ctl.h>
+#include <lsp-plug.in/common/debug.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        //-----------------------------------------------------------------
+        const ctl_class_t SavePresetDialog::metadata = { "SavePresetDialog", &Window::metadata };
+
+        SavePresetDialog::SavePresetDialog(ui::IWrapper *src, tk::Window *widget):
+            ctl::Window(src, widget)
+        {
+            wPresetName     = NULL;
+            wConfirmation   = NULL;
+            wNotification   = NULL;
+            wFavourites     = NULL;
+            wSaveButton     = NULL;
+        }
+
+        SavePresetDialog::~SavePresetDialog()
+        {
+        }
+
+        void SavePresetDialog::destroy()
+        {
+            ctl::Window::destroy();
+        }
+
+        status_t SavePresetDialog::init()
+        {
+            LSP_STATUS_ASSERT(ctl::Window::init());
+
+            return STATUS_OK;
+        }
+
+        status_t SavePresetDialog::post_init()
+        {
+            tk::Window *wnd = tk::widget_cast<tk::Window>(wWidget);
+            if (wnd == NULL)
+                return STATUS_BAD_STATE;
+
+            wnd->actions()->set(ws::WA_DIALOG);
+            if (wnd->border_style()->get() != ws::BS_DIALOG)
+                lsp_trace("Not a dialog");
+
+            wPresetName     = widgets()->get<tk::Edit>("preset_name");
+            wFavourites     = widgets()->get<tk::CheckBox>("favourites_check");
+            wSaveButton     = widgets()->get<tk::Button>("btn_save");
+
+            wWidget->slots()->add(tk::SLOT_SUBMIT);
+            wWidget->slots()->add(tk::SLOT_CANCEL);
+            wWidget->slots()->bind(tk::SLOT_CLOSE, slot_cancel_save_preset, self());
+
+            bind_slot("preset_name", tk::SLOT_CHANGE, slot_preset_name_change);
+            bind_slot("btn_save", tk::SLOT_SUBMIT, slot_save_button_submit);
+            bind_slot("btn_cancel", tk::SLOT_SUBMIT, slot_cancel_save_preset);
+            bind_slot("favourites_label", tk::SLOT_MOUSE_CLICK, slot_favourites_click);
+            bind_shortcut(wnd, ws::WSK_ESCAPE, tk::KM_NONE, slot_cancel_save_preset);
+            bind_shortcut(wnd, ws::WSK_RETURN, tk::KM_NONE, slot_save_button_submit);
+            bind_shortcut(wnd, ws::WSK_KEYPAD_ENTER, tk::KM_NONE, slot_save_button_submit);
+
+            return STATUS_OK;
+        }
+
+        status_t SavePresetDialog::show(tk::Widget *actor, const LSPString *name, bool favourite)
+        {
+            tk::Window *wnd = tk::widget_cast<tk::Window>(wWidget);
+            if (wnd == NULL)
+                return STATUS_BAD_STATE;
+
+            // Set preset name
+            if (wPresetName != NULL)
+            {
+                wPresetName->text()->set_raw(name);
+                wPresetName->selection()->set_all();
+            }
+
+            // Set favourites check
+            if (wFavourites != NULL)
+                wFavourites->checked()->set(favourite);
+
+            sync_save_button_state();
+            wnd->show(actor);
+
+            if (wPresetName != NULL)
+                wPresetName->take_focus();
+
+            return STATUS_OK;
+        }
+
+        void SavePresetDialog::sync_save_button_state()
+        {
+            if (wSaveButton == NULL)
+                return;
+
+            LSPString name;
+            status_t res = wPresetName->text()->format(&name);
+            name.trim();
+
+            const bool active = (res == STATUS_OK) && (name.length() > 0);
+            wSaveButton->active()->set(active);
+            wSaveButton->editable()->set(active);
+        }
+
+        const ui::preset_t *SavePresetDialog::find_user_preset_by_name(const LSPString *name)
+        {
+            if (wPresetName == NULL)
+                return NULL;
+
+            const ui::preset_t *list = pWrapper->all_presets();
+            const size_t count = pWrapper->num_presets();
+
+            for (size_t i=0; i<count; ++i)
+            {
+                const ui::preset_t *preset = &list[i];
+                if (!(preset->flags & ui::PRESET_FLAG_USER))
+                    continue;
+                if (preset->name.equals_nocase(name))
+                    return preset;
+            }
+
+            return NULL;
+        }
+
+        //-----------------------------------------------------------------
+        // Slots
+        status_t SavePresetDialog::slot_preset_name_change(tk::Widget *sender, void *ptr, void *data)
+        {
+            SavePresetDialog *self = static_cast<SavePresetDialog *>(ptr);
+            if (self != NULL)
+                self->sync_save_button_state();
+
+            return STATUS_OK;
+        }
+
+        bool SavePresetDialog::request_confirmation(const LSPString *name)
+        {
+            // Create confirmation dialog if needed
+            if (wConfirmation == NULL)
+            {
+                // Create and initialize dialog object
+                tk::MessageBox *dialog = new tk::MessageBox(wWidget->display());
+                if (dialog == NULL)
+                    return false;
+                lsp_finally {
+                    if (dialog != NULL)
+                    {
+                        dialog->destroy();
+                        delete dialog;
+                    }
+                };
+
+                status_t res = dialog->init();
+                if (res != STATUS_OK)
+                {
+                    lsp_trace("init failed");
+                    return false;
+                }
+
+                dialog->title()->set("titles.confirmation");
+                dialog->heading()->set("headings.confirmation");
+                dialog->add("actions.confirm.yes", slot_accept_save_preset, self());
+                dialog->add("actions.confirm.no", slot_reject_save_preset, self());
+                dialog->add("actions.cancel", slot_cancel_save_preset, self());
+
+                dialog->buttons()->get(0)->constraints()->set_min_width(96);
+                dialog->buttons()->get(1)->constraints()->set_min_width(96);
+                dialog->buttons()->get(2)->constraints()->set_min_width(96);
+
+                bind_shortcut(dialog, ws::WSK_ESCAPE, tk::KM_NONE, slot_cancel_save_preset);
+                bind_shortcut(dialog, 'c', tk::KM_NONE, slot_cancel_save_preset);
+                bind_shortcut(dialog, 'C', tk::KM_NONE, slot_cancel_save_preset);
+                bind_shortcut(dialog, ws::WSK_BACKSPACE, tk::KM_NONE, slot_reject_save_preset);
+                bind_shortcut(dialog, 'n', tk::KM_NONE, slot_reject_save_preset);
+                bind_shortcut(dialog, 'N', tk::KM_NONE, slot_reject_save_preset);
+                bind_shortcut(dialog, ws::WSK_RETURN, tk::KM_NONE, slot_accept_save_preset);
+                bind_shortcut(dialog, ws::WSK_KEYPAD_ENTER, tk::KM_NONE, slot_accept_save_preset);
+                bind_shortcut(dialog, 'y', tk::KM_NONE, slot_accept_save_preset);
+                bind_shortcut(dialog, 'Y', tk::KM_NONE, slot_accept_save_preset);
+
+                // Commit dialog
+                if (widgets()->add(dialog) != STATUS_OK)
+                    return false;
+                wConfirmation   = release_ptr(dialog);
+            }
+
+            // Update text
+            expr::Parameters params;
+            params.set_string("name", name);
+            wConfirmation->message()->set(
+                "messages.presets.confirm_overwrite",
+                &params);
+
+            wConfirmation->show(wWidget);
+
+            return true;
+        }
+
+        bool SavePresetDialog::show_show_save_error(const LSPString *name, status_t code)
+        {
+            // Create confirmation dialog if needed
+            if (wNotification == NULL)
+            {
+                // Create and initialize dialog object
+                tk::MessageBox *dialog = new tk::MessageBox(wWidget->display());
+                if (dialog == NULL)
+                    return false;
+                lsp_finally {
+                    if (dialog != NULL)
+                    {
+                        dialog->destroy();
+                        delete dialog;
+                    }
+                };
+
+                status_t res = dialog->init();
+                if (res != STATUS_OK)
+                    return false;
+
+                dialog->title()->set("titles.attention");
+                dialog->heading()->set("headings.attention");
+                dialog->add("actions.ok", slot_close_notification, self());
+                dialog->add("actions.cancel", slot_cancel_save_preset, self());
+
+                dialog->buttons()->get(0)->constraints()->set_min_width(96);
+                dialog->buttons()->get(1)->constraints()->set_min_width(96);
+
+                bind_shortcut(dialog, ws::WSK_ESCAPE, tk::KM_NONE, slot_cancel_save_preset);
+                bind_shortcut(dialog, ws::WSK_RETURN, tk::KM_NONE, slot_close_notification);
+                bind_shortcut(dialog, ws::WSK_KEYPAD_ENTER, tk::KM_NONE, slot_close_notification);
+                bind_shortcut(dialog, ws::WSK_BACKSPACE, tk::KM_NONE, slot_close_notification);
+
+                // Commit dialog
+                if (widgets()->add(dialog) != STATUS_OK)
+                    return false;
+                wNotification   = release_ptr(dialog);
+            }
+
+            // Update text
+            expr::Parameters params;
+            params.set_string("name", name);
+            params.set_int("code", code);
+            wNotification->message()->set(
+                "messages.presets.save_preset_failed",
+                &params);
+
+            wNotification->show(wWidget);
+
+            return true;
+        }
+
+        void SavePresetDialog::save_preset(const LSPString *name)
+        {
+            const bool favourite = (wFavourites != NULL) ? wFavourites->checked()->get() : false;
+
+            size_t flags = ui::PRESET_FLAG_USER;
+            if (favourite)
+                flags      |= ui::PRESET_FLAG_FAVOURITE;
+
+            status_t res = pWrapper->save_preset(name, flags);
+            if (res == STATUS_OK)
+            {
+                wWidget->hide();
+                wWidget->slots()->execute(tk::SLOT_SUBMIT, wWidget);
+            }
+            else
+                show_show_save_error(name, res);
+        }
+
+        status_t SavePresetDialog::slot_save_button_submit(tk::Widget *sender, void *ptr, void *data)
+        {
+            SavePresetDialog *self = static_cast<SavePresetDialog *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+            if ((self->wSaveButton == NULL) || (!self->wSaveButton->editable()))
+                return STATUS_OK;
+
+            // Check that we need confirmation
+            LSPString name;
+            if (self->wPresetName->text()->format(&name) != STATUS_OK)
+                return STATUS_OK;
+
+            const ui::preset_t *active = self->pWrapper->active_preset();
+            const ui::preset_t *save = self->find_user_preset_by_name(&name);
+            if (save != NULL)
+            {
+                const bool need_confirm = (active != save);
+                if (need_confirm)
+                {
+                    self->request_confirmation(&name);
+                    return STATUS_OK;
+                }
+            }
+
+            self->save_preset(&name);
+
+            return STATUS_OK;
+        }
+
+        status_t SavePresetDialog::slot_accept_save_preset(tk::Widget *sender, void *ptr, void *data)
+        {
+            SavePresetDialog *self = static_cast<SavePresetDialog *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            if (self->wConfirmation != NULL)
+                self->wConfirmation->hide();
+
+            LSPString name;
+            if (self->wPresetName->text()->format(&name) != STATUS_OK)
+                return STATUS_OK;
+
+            self->save_preset(&name);
+
+            return STATUS_OK;
+        }
+
+        status_t SavePresetDialog::slot_reject_save_preset(tk::Widget *sender, void *ptr, void *data)
+        {
+            SavePresetDialog *self = static_cast<SavePresetDialog *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            if (self->wConfirmation != NULL)
+                self->wConfirmation->hide();
+
+            return STATUS_OK;
+        }
+
+        status_t SavePresetDialog::slot_cancel_save_preset(tk::Widget *sender, void *ptr, void *data)
+        {
+            SavePresetDialog *self = static_cast<SavePresetDialog *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            if (self->wNotification != NULL)
+                self->wNotification->hide();
+            if (self->wConfirmation != NULL)
+                self->wConfirmation->hide();
+
+            self->wWidget->hide();
+            self->wWidget->slots()->execute(tk::SLOT_CANCEL, self->wWidget);
+
+            return STATUS_OK;
+        }
+
+        status_t SavePresetDialog::slot_close_notification(tk::Widget *sender, void *ptr, void *data)
+        {
+            SavePresetDialog *self = static_cast<SavePresetDialog *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            if (self->wNotification != NULL)
+                self->wNotification->hide();
+
+            return STATUS_OK;
+        }
+
+        status_t SavePresetDialog::slot_favourites_click(tk::Widget *sender, void *ptr, void *data)
+        {
+            SavePresetDialog *self = static_cast<SavePresetDialog *>(ptr);
+            if (self == NULL)
+                return STATUS_OK;
+
+            if (self->wFavourites == NULL)
+                return STATUS_OK;
+
+            const ws::event_t *ev = static_cast<ws::event_t *>(data);
+            if (ev == NULL)
+                return STATUS_OK;
+
+            if (ev->nCode == ws::MCB_LEFT)
+                self->wFavourites->checked()->toggle();
+
+            return STATUS_OK;
+        }
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Widget.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Widget.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Widget.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Widget.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 10 апр. 2021 г.
@@ -34,14 +34,13 @@ namespace lsp
         }
 
         //---------------------------------------------------------------------
-        const ctl_class_t Widget::metadata = { "Widget", NULL };
+        const ctl_class_t Widget::metadata = { "Widget", &DOMController::metadata };
 
         Widget::Widget(ui::IWrapper *wrapper, tk::Widget *widget):
-            ui::IPortListener(),
+            ctl::DOMController(wrapper),
             sProperties(this)
         {
             pClass          = &metadata;
-            pWrapper        = wrapper;
             wWidget         = widget;
         }
 
@@ -53,6 +52,7 @@ namespace lsp
         void Widget::destroy()
         {
             do_destroy();
+            ctl::DOMController::destroy();
         }
 
         void Widget::do_destroy()
@@ -65,19 +65,6 @@ namespace lsp
             wWidget     = NULL;
         }
 
-        bool Widget::instance_of(const ctl_class_t *wclass) const
-        {
-            const ctl_class_t *wc = pClass;
-            while (wc != NULL)
-            {
-                if (wc == wclass)
-                    return true;
-                wc = wc->parent;
-            }
-
-            return false;
-        }
-
         tk::Widget *Widget::widget()
         {
             return wWidget;
@@ -291,18 +278,6 @@ namespace lsp
             return true;
         }
 
-        bool Widget::set_expr(ctl::Expression *expr, const char *param, const char *name, const char *value)
-        {
-            if (expr == NULL)
-                return false;
-            if (strcmp(name, param))
-                return false;
-
-            if (!expr->parse(value))
-                lsp_warn("Failed to parse expression for attribute '%s': %s", name, value);
-            return true;
-        }
-
         bool Widget::set_param(tk::Boolean *b, const char *param, const char *name, const char *value)
         {
             if (b == NULL)
@@ -340,96 +315,6 @@ namespace lsp
             return e->parse(value) == STATUS_OK;
         }
 
-        bool Widget::set_value(bool *v, const char *param, const char *name, const char *value)
-        {
-            if (v == NULL)
-                return false;
-            if (strcmp(param, name))
-                return false;
-            PARSE_BOOL(value, *v = __);
-            return true;
-        }
-
-        bool Widget::set_value(ssize_t *v, const char *param, const char *name, const char *value)
-        {
-            if (v == NULL)
-                return false;
-            if (strcmp(param, name))
-                return false;
-            PARSE_INT(value, *v = __);
-            return true;
-        }
-
-        bool Widget::set_value(size_t *v, const char *param, const char *name, const char *value)
-        {
-            if (v == NULL)
-                return false;
-            if (strcmp(param, name))
-                return false;
-            PARSE_UINT(value, *v = __);
-            return true;
-        }
-
-        bool Widget::set_value(float *v, const char *param, const char *name, const char *value)
-        {
-            if (v == NULL)
-                return false;
-            if (strcmp(param, name))
-                return false;
-            PARSE_FLOAT(value, *v = __);
-            return true;
-        }
-
-        bool Widget::set_value(LSPString *v, const char *param, const char *name, const char *value)
-        {
-            if (v == NULL)
-                return false;
-            if (strcmp(param, name))
-                return false;
-
-            v->set_utf8(value);
-            return true;
-        }
-
-        bool Widget::link_port(ui::IPort **port, const char *id)
-        {
-            ui::IPort *oldp = *port;
-            ui::IPort *newp = pWrapper->port(id);
-            if (oldp == newp)
-                return true;
-
-            if (oldp != NULL)
-                oldp->unbind(this);
-            if (newp != NULL)
-                newp->bind(this);
-
-            *port           = newp;
-
-            return true;
-        }
-
-        bool Widget::bind_port(ui::IPort **port, const char *param, const char *name, const char *value)
-        {
-            if (strcmp(param, name))
-                return false;
-            if (port == NULL)
-                return false;
-
-            ui::IPort *oldp = *port;
-            ui::IPort *newp = pWrapper->port(value);
-            if (oldp == newp)
-                return true;
-
-            if (oldp != NULL)
-                oldp->unbind(this);
-            if (newp != NULL)
-                newp->bind(this);
-
-            *port           = newp;
-
-            return true;
-        }
-
         bool Widget::set_embedding(tk::Embedding *e, const char *name, const char *value)
         {
             if (e == NULL)
@@ -478,16 +363,24 @@ namespace lsp
 
         status_t Widget::init()
         {
+            status_t res = ctl::DOMController::init();
+            if (res != STATUS_OK)
+                return res;
+
             pWrapper->add_schema_listener(this);
 
             if (wWidget != NULL)
             {
+                sActivity.init(pWrapper, wWidget->active());
                 sBgColor.init(pWrapper, wWidget->bg_color());
+                sInactiveBgColor.init(pWrapper, wWidget->inactive_bg_color());
                 sBgInherit.init(pWrapper, wWidget->bg_inherit());
                 sPadding.init(pWrapper, wWidget->padding());
                 sVisibility.init(pWrapper, wWidget->visibility());
                 sBrightness.init(pWrapper, wWidget->brightness());
+                sInactiveBrightness.init(pWrapper, wWidget->inactive_brightness());
                 sBgBrightness.init(pWrapper, wWidget->bg_brightness());
+                sInactiveBgBrightness.init(pWrapper, wWidget->inactive_bg_brightness());
                 sPointer.init(pWrapper, wWidget->pointer());
             }
 
@@ -497,6 +390,8 @@ namespace lsp
 
         void Widget::set(ui::UIContext *ctx, const char *name, const char *value)
         {
+            ctl::DOMController::set(ctx, name, value);
+
             if (wWidget != NULL)
             {
                 set_param(wWidget->scaling(), "scaling", name, value);
@@ -515,12 +410,17 @@ namespace lsp
                     assign_styles(wWidget, value, false);
             }
 
+            sActivity.set("activity", name, value);
             sVisibility.set("visibility", name, value);
             sVisibility.set("visible", name, value);
             sBrightness.set("brightness", name, value);
             sBrightness.set("bright", name, value);
+            sInactiveBrightness.set("inactive.brightness", name, value);
+            sInactiveBrightness.set("inactive.bright", name, value);
             sBgBrightness.set("bg.brightness", name, value);
             sBgBrightness.set("bg.bright", name, value);
+            sInactiveBgBrightness.set("inactive.bg.brightness", name, value);
+            sInactiveBgBrightness.set("inactive.bg.bright", name, value);
             sPointer.set("pointer", name, value);
 
             sPadding.set("pad", name, value);
@@ -535,26 +435,12 @@ namespace lsp
                 if (wWidget != NULL)
                     wWidget->bg_inherit()->set(false);
             }
+            sInactiveBgColor.set("inactive.bg", name, value);
+            sInactiveBgColor.set("inactive.bg.color", name, value);
             sBgInherit.set("bg.inherit", name, value);
             sBgInherit.set("ibg", name, value);
         }
 
-        void Widget::begin(ui::UIContext *ctx)
-        {
-        }
-
-        void Widget::end(ui::UIContext *ctx)
-        {
-        }
-
-        void Widget::notify(ui::IPort *port, size_t flags)
-        {
-        }
-
-        void Widget::reloaded(const tk::StyleSheet *sheet)
-        {
-        }
-
         void Widget::property_changed(tk::Property *prop)
         {
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Window.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Window.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/Window.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/Window.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 11 июн. 2021 г.
@@ -20,6 +20,7 @@
  */
 
 #include <lsp-plug.in/plug-fw/ctl.h>
+#include <lsp-plug.in/common/debug.h>
 
 namespace lsp
 {
@@ -90,6 +91,26 @@ namespace lsp
             Widget::end(ctx);
         }
 
+        tk::handler_id_t Window::bind_slot(const char *widget_id, tk::slot_t id, tk::event_handler_t handler)
+        {
+            tk::Widget *w = sWidgets.find(widget_id);
+            if (w == NULL)
+            {
+                lsp_warn("Not found widget: ui:id=%s", widget_id);
+                return -STATUS_NOT_FOUND;
+            }
+
+            return w->slots()->bind(id, handler, self());
+        }
+
+        tk::handler_id_t Window::bind_shortcut(tk::Window *wnd, ws::code_t key, size_t mod, tk::event_handler_t handler)
+        {
+            tk::Shortcut *scut = wnd->shortcuts()->append(key, mod);
+            if (scut == NULL)
+                return -STATUS_NO_MEM;
+            return scut->slot()->bind(handler, self());
+        }
+
         void Window::reloaded(const tk::StyleSheet *sheet)
         {
             Widget::reloaded(sheet);
@@ -98,7 +119,8 @@ namespace lsp
             if (wWidget != NULL)
                 wWidget->query_resize();
         }
-    }
-}
+
+    } /* namespace ctl */
+} /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/compound/ComboBox.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/compound/ComboBox.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/compound/ComboBox.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/compound/ComboBox.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -113,7 +113,6 @@ namespace lsp
                 sInactiveBorderColor.init(pWrapper, cbox->inactive_border_color());
                 sInactiveBorderGapColor.init(pWrapper, cbox->inactive_border_gap_color());
 
-                sActivity.init(pWrapper, cbox->active());
                 sEmptyText.init(pWrapper, cbox->empty_text());
 
                 // Bind slots
@@ -162,8 +161,6 @@ namespace lsp
                 sInactiveBorderGapColor.set("inactive.border.gap.color", name, value);
                 sInactiveBorderGapColor.set("inactive.bgap.color", name, value);
 
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
                 sEmptyText.set("text.empty", name, value);
 
                 set_text_fitness(cbox->text_fit(), "text.fitness", name, value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/compound/ComboGroup.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/compound/ComboGroup.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/compound/ComboGroup.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/compound/ComboGroup.cpp	2025-08-26 18:15:48.097960860 +0000
@@ -179,7 +179,7 @@ namespace lsp
 
             ssize_t index = (sActive.valid()) ? sActive.evaluate_int() : -1;
             tk::Widget *w = (index >= 0) ? cgrp->widgets()->get(index) : NULL;
-            cgrp->active()->set(w);
+            cgrp->active_group()->set(w);
         }
 
         status_t ComboGroup::slot_combo_submit(tk::Widget *sender, void *ptr, void *data)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/containers/Align.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/containers/Align.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/containers/Align.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/containers/Align.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -144,7 +144,8 @@ namespace lsp
             Widget::reloaded(sheet);
             update_alignment();
         }
-    }
-}
+
+    } /* namespace ctl */
+} /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/containers/Overlay.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/containers/Overlay.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/containers/Overlay.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/containers/Overlay.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -0,0 +1,359 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 3 апр. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/ctl.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        //---------------------------------------------------------------------
+        CTL_FACTORY_IMPL_START(Overlay)
+            status_t res;
+
+            if (!name->equals_ascii("overlay"))
+                return STATUS_NOT_FOUND;
+
+            tk::Overlay *w = new tk::Overlay(context->display());
+            if (w == NULL)
+                return STATUS_NO_MEM;
+            if ((res = context->widgets()->add(w)) != STATUS_OK)
+            {
+                delete w;
+                return res;
+            }
+
+            if ((res = w->init()) != STATUS_OK)
+                return res;
+
+            ctl::Overlay *wc  = new ctl::Overlay(context->wrapper(), w);
+            if (wc == NULL)
+                return STATUS_NO_MEM;
+
+            *ctl = wc;
+            return STATUS_OK;
+        CTL_FACTORY_IMPL_END(Overlay)
+
+        //-----------------------------------------------------------------
+        const ctl_class_t Overlay::metadata     = { "Overlay", &Widget::metadata };
+
+        Overlay::Overlay(ui::IWrapper *wrapper, tk::Overlay *widget):
+            Widget(wrapper, widget)
+        {
+            pClass          = &metadata;
+
+            pPort           = NULL;
+            fHOrigin        = 0.5f;
+            fVOrigin        = 0.5f;
+            fHAlign         = 0.0f;
+            fVAlign         = 0.0f;
+        }
+
+        Overlay::~Overlay()
+        {
+            tk::Overlay *ov = tk::widget_cast<tk::Overlay>(wWidget);
+            if (ov != NULL)
+                ov->set_position_function(NULL, NULL);
+        }
+
+        status_t Overlay::init()
+        {
+            LSP_STATUS_ASSERT(Widget::init());
+
+            tk::Overlay *ov = tk::widget_cast<tk::Overlay>(wWidget);
+            if (ov != NULL)
+            {
+                sTransparency.init(pWrapper, ov->transparency());
+                sPriority.init(pWrapper, ov->priority());
+                sAutoClose.init(pWrapper, ov->auto_close());
+                sBorderRadius.init(pWrapper, ov->border_radius());
+                sBorderSize.init(pWrapper, ov->border_size());
+                sBorderColor.init(pWrapper, ov->border_color());
+                sIPadding.init(pWrapper, ov->ipadding());
+
+                sHOrigin.init(pWrapper, this);
+                sVOrigin.init(pWrapper, this);
+                sHAlign.init(pWrapper, this);
+                sVAlign.init(pWrapper, this);
+
+                sLayoutHAlign.init(pWrapper, this);
+                sLayoutVAlign.init(pWrapper, this);
+                sLayoutHScale.init(pWrapper, this);
+                sLayoutVScale.init(pWrapper, this);
+
+                ov->set_position_function(calc_position, this);
+                ov->set_filter_function(filter_event, this);
+                ov->slots()->bind(tk::SLOT_HIDE, slot_on_hide, this);
+            }
+
+            return STATUS_OK;
+        }
+
+        void Overlay::set(ui::UIContext *ctx, const char *name, const char *value)
+        {
+            tk::Overlay *ov = tk::widget_cast<tk::Overlay>(wWidget);
+            if (ov != NULL)
+            {
+                bind_port(&pPort, "id", name, value);
+
+                sTransparency.set("transparency", name, value);
+                sTransparency.set("alpha", name, value);
+
+                sPriority.set("priority", name, value);
+
+                sAutoClose.set("auto_close", name, value);
+                sAutoClose.set("close.auto", name, value);
+                sAutoClose.set("aclose", name, value);
+
+                sBorderRadius.set("border.radius", name, value);
+                sBorderRadius.set("bradius", name, value);
+
+                sBorderSize.set("border.size", name, value);
+                sBorderSize.set("bsize", name, value);
+
+                sBorderColor.set("border.color", name, value);
+                sBorderColor.set("bcolor", name, value);
+
+                sIPadding.set("ipadding", name, value);
+
+                set_expr(&sHOrigin, "origin.hpos", name, value);
+                set_expr(&sHOrigin, "hpos", name, value);
+                set_expr(&sVOrigin, "origin.vpos", name, value);
+                set_expr(&sVOrigin, "vpos", name, value);
+                set_expr(&sHAlign, "halign", name, value);
+                set_expr(&sVAlign, "valign", name, value);
+
+                set_expr(&sLayoutHAlign, "layout.align", name, value);
+                set_expr(&sLayoutVAlign, "layout.align", name, value);
+                set_expr(&sLayoutHAlign, "layout.halign", name, value);
+                set_expr(&sLayoutVAlign, "layout.valign", name, value);
+
+                set_expr(&sLayoutHScale, "layout.scale", name, value);
+                set_expr(&sLayoutVScale, "layout.scale", name, value);
+                set_expr(&sLayoutHScale, "layout.hscale", name, value);
+                set_expr(&sLayoutVScale, "layout.vscale", name, value);
+
+                set_constraints(ov->constraints(), name, value);
+
+                if (!strcmp(name, "trigger"))
+                    sTriggerWID.set_utf8(value);
+                if (!strcmp(name, "area"))
+                    sAreaWID.set_utf8(value);
+            }
+
+            return Widget::set(ctx, name, value);
+        }
+
+        void Overlay::notify(ui::IPort *port, size_t flags)
+        {
+            Widget::notify(port, flags);
+
+            // Internal layout
+            if ((sLayoutHAlign.depends(port)) ||
+                (sLayoutVAlign.depends(port)) ||
+                (sLayoutHScale.depends(port)) ||
+                (sLayoutVScale.depends(port)))
+                update_layout_alignment();
+
+            // Position layout
+            if ((sHOrigin.depends(port)) ||
+                (sVOrigin.depends(port)) ||
+                (sHAlign.depends(port)) ||
+                (sVAlign.depends(port)))
+                update_alignment();
+
+            // Visibility
+            if (port == pPort)
+            {
+                tk::Overlay *ov = tk::widget_cast<tk::Overlay>(wWidget);
+                if (ov != NULL)
+                    ov->visibility()->set(pPort->value() >= 0.5f);
+            }
+        }
+
+        status_t Overlay::add(ui::UIContext *ctx, ctl::Widget *child)
+        {
+            tk::Overlay *ov = tk::widget_cast<tk::Overlay>(wWidget);
+            return (ov != NULL) ? ov->add(child->widget()) : STATUS_BAD_STATE;
+        }
+
+        void Overlay::end(ui::UIContext *ctx)
+        {
+            update_layout_alignment();
+            update_alignment();
+            Widget::end(ctx);
+        }
+
+        void Overlay::reloaded(const tk::StyleSheet *sheet)
+        {
+            Widget::reloaded(sheet);
+            update_layout_alignment();
+            update_alignment();
+        }
+
+        void Overlay::update_layout_alignment()
+        {
+            tk::Overlay *ov = tk::widget_cast<tk::Overlay>(wWidget);
+            if (ov == NULL)
+                return;
+
+            if (sLayoutHAlign.valid())
+                ov->layout()->set_halign(sLayoutHAlign.evaluate());
+            if (sLayoutVAlign.valid())
+                ov->layout()->set_valign(sLayoutVAlign.evaluate());
+            if (sLayoutHScale.valid())
+                ov->layout()->set_hscale(sLayoutHScale.evaluate());
+            if (sLayoutVScale.valid())
+                ov->layout()->set_vscale(sLayoutVScale.evaluate());
+        }
+
+        bool Overlay::update_float(float & value, ctl::Expression & expr)
+        {
+            if (!expr.valid())
+                return false;
+            const float new_value = expr.evaluate();
+            if (new_value == value)
+                return false;
+
+            value   = new_value;
+            return true;
+        }
+
+        void Overlay::update_alignment()
+        {
+            tk::Overlay *ov = tk::widget_cast<tk::Overlay>(wWidget);
+            if (ov == NULL)
+                return;
+
+            size_t changes = 0;
+            if (update_float(fHAlign, sHAlign))
+                ++changes;
+            if (update_float(fVAlign, sVAlign))
+                ++changes;
+            if (update_float(fHOrigin, sHOrigin))
+                ++changes;
+            if (update_float(fVOrigin, sVOrigin))
+                ++changes;
+
+            if (changes > 0)
+                ov->query_resize();
+        }
+
+        bool Overlay::calc_position(ws::rectangle_t *rect, tk::Overlay *overlay, void *data)
+        {
+            Overlay *self = static_cast<Overlay *>(data);
+            return (self != NULL) ? self->calc_position(rect, overlay) : false;
+        }
+
+        bool Overlay::filter_event(const ws::event_t *ev, tk::Overlay *overlay, void *data)
+        {
+            Overlay *self = static_cast<Overlay *>(data);
+            return (self != NULL) ? self->filter_event(ev, overlay) : false;
+        }
+
+        bool Overlay::calc_position(ws::rectangle_t *rect, tk::Overlay *ov)
+        {
+            // Get trigger and area rectangles
+            ws::rectangle_t trigger, area, pad_area;
+            if (!get_area(&trigger, &sTriggerWID))
+                return false;
+            if (!get_area(&area, &sAreaWID))
+                return false;
+
+            // Compute origin
+            const float scaling     = lsp_max(ov->scaling()->get(), 0.0f);
+            const ssize_t origin_x  = trigger.nLeft + trigger.nWidth * fHOrigin;
+            const ssize_t origin_y  = trigger.nTop + trigger.nHeight * fVOrigin;
+
+            ov->padding()->enter(&pad_area, &area, scaling);
+
+            // Compute position
+            rect->nLeft             = origin_x + rect->nWidth * ((fHAlign - 1.0f) * 0.5f);
+            rect->nTop              = origin_y + rect->nHeight * ((fVAlign - 1.0f) * 0.5f);
+
+            // Constraint position
+            rect->nLeft             = lsp_max(rect->nLeft, pad_area.nLeft);
+            rect->nTop              = lsp_max(rect->nTop, pad_area.nTop);
+            rect->nLeft            -= lsp_max((rect->nLeft + rect->nWidth) - (pad_area.nLeft + pad_area.nWidth), 0);
+            rect->nTop             -= lsp_max((rect->nTop + rect->nHeight) - (pad_area.nTop + pad_area.nHeight), 0);
+
+            return true;
+        }
+
+        bool Overlay::filter_event(const ws::event_t *ev, tk::Overlay *overlay)
+        {
+            // Get trigger and area rectangles
+            ws::rectangle_t trigger;
+            if (!get_area(&trigger, &sTriggerWID))
+                return false;
+
+            return tk::Position::inside(&trigger, ev->nLeft, ev->nTop);
+        }
+
+        bool Overlay::get_area(ws::rectangle_t *rect, const LSPString *wid)
+        {
+            // Check if widget name was passed
+            tk::Widget *w = NULL;
+            if ((wid != NULL) && (!wid->is_empty()))
+                w = pWrapper->controller()->widgets()->find(wid);
+
+            // Fall-back to default widget name
+            if (w == NULL)
+                w = pWrapper->controller()->widgets()->find("plugin_window");
+            if (w == NULL)
+                w = pWrapper->controller()->widgets()->find("plugin_content");
+
+            // Obtain widget size
+            if (w != NULL)
+                w->get_rectangle(rect);
+
+            return w != NULL;
+        }
+
+        status_t Overlay::slot_on_hide(tk::Widget *sender, void *ptr, void *data)
+        {
+            ctl::Overlay *self      = static_cast<ctl::Overlay *>(ptr);
+            if (self != NULL)
+                self->on_hide_overlay();
+            return STATUS_OK;
+        }
+
+        void Overlay::on_hide_overlay()
+        {
+            if (pPort == NULL)
+                return;
+
+            tk::Overlay *ov = tk::widget_cast<tk::Overlay>(wWidget);
+            if (ov == NULL)
+                return;
+
+            // Reset related port to default value
+            if (ov->auto_close()->get())
+            {
+                pPort->set_default();
+                pPort->notify_all(ui::PORT_USER_EDIT);
+            }
+        }
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/containers/Tab.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/containers/Tab.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/containers/Tab.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/containers/Tab.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 22 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/ctl.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        //---------------------------------------------------------------------
+        CTL_FACTORY_IMPL_START(Tab)
+            status_t res;
+
+            if (!name->equals_ascii("tab"))
+                return STATUS_NOT_FOUND;
+
+            tk::Tab *w = new tk::Tab(context->display());
+            if (w == NULL)
+                return STATUS_NO_MEM;
+            if ((res = context->widgets()->add(w)) != STATUS_OK)
+            {
+                delete w;
+                return res;
+            }
+
+            if ((res = w->init()) != STATUS_OK)
+                return res;
+
+            ctl::Tab *wc  = new ctl::Tab(context->wrapper(), w);
+            if (ctl == NULL)
+                return STATUS_NO_MEM;
+
+            *ctl = wc;
+            return STATUS_OK;
+        CTL_FACTORY_IMPL_END(Tab)
+
+        //-----------------------------------------------------------------
+        const ctl_class_t Tab::metadata     = { "Tab", &Widget::metadata };
+
+        Tab::Tab(ui::IWrapper *wrapper, tk::Tab *tab):
+            Widget(wrapper, tab)
+        {
+            pClass      = &metadata;
+        }
+
+        Tab::~Tab()
+        {
+        }
+
+        status_t Tab::init()
+        {
+            LSP_STATUS_ASSERT(Widget::init());
+
+            tk::Tab *tab = tk::widget_cast<tk::Tab>(wWidget);
+            if (tab != NULL)
+            {
+                sText.init(pWrapper, tab->text());
+            }
+
+            return STATUS_OK;
+        }
+
+        void Tab::set(ui::UIContext *ctx, const char *name, const char *value)
+        {
+            tk::Tab *tab = tk::widget_cast<tk::Tab>(wWidget);
+            if (tab != NULL)
+            {
+                sText.set("text", name, value);
+            }
+
+            return Widget::set(ctx, name, value);
+        }
+
+        status_t Tab::add(ui::UIContext *ctx, ctl::Widget *child)
+        {
+            tk::Tab *tab = tk::widget_cast<tk::Tab>(wWidget);
+            return (tab != NULL) ? tab->add(child->widget()) : STATUS_BAD_STATE;
+        }
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/containers/TabGroup.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/containers/TabGroup.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/containers/TabGroup.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/containers/TabGroup.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -193,7 +193,7 @@ namespace lsp
 
             ssize_t index = (sActive.valid()) ? sActive.evaluate_int() : -1;
             tk::Widget *w = (index >= 0) ? tg->widgets()->get(index) : NULL;
-            tg->active()->set(w);
+            tg->active_tab()->set(w);
         }
 
         status_t TabGroup::slot_tab_submit(tk::Widget *sender, void *ptr, void *data)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/graph/Axis.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/graph/Axis.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/graph/Axis.cpp	2025-03-01 12:42:57.448644449 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/graph/Axis.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -61,7 +61,6 @@ namespace lsp
             pClass      = &metadata;
 
             pPort       = NULL;
-            bLogSet     = false;
         }
 
         Axis::~Axis()
@@ -79,6 +78,7 @@ namespace lsp
                 sMin.init(pWrapper, ga->min());
                 sMax.init(pWrapper, ga->max());
                 sZero.init(pWrapper, ga->zero());
+                sLogScale.init(pWrapper, ga->log_scale());
                 sDx.init(pWrapper, this);
                 sDy.init(pWrapper, this);
                 sAngle.init(pWrapper, this);
@@ -112,11 +112,8 @@ namespace lsp
                 set_param(ga->priority_group(), "priority_group", name, value);
                 set_param(ga->priority_group(), "pgroup", name, value);
 
-                if (set_param(ga->log_scale(), "log", name, value))
-                    bLogSet     = true;
-                if (set_param(ga->log_scale(), "logarithmic", name, value))
-                    bLogSet     = true;
-
+                sLogScale.set("log", name, value);
+                sLogScale.set("logarithmic", name, value);
                 sWidth.set("width", name, value);
                 sColor.set("color", name, value);
                 sSmooth.set("smooth", name, value);
@@ -207,7 +204,7 @@ namespace lsp
                 ga->min()->set(mdata->min);
             if (!sMax.valid())
                 ga->max()->set(mdata->max);
-            if (!bLogSet)
+            if (!sLogScale.valid())
                 ga->log_scale()->set(meta::is_log_rule(mdata));
         }
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/headless/PortLink.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/headless/PortLink.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/headless/PortLink.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/headless/PortLink.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 25 мая 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/plug-fw/ctl.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        //---------------------------------------------------------------------
+        CTL_FACTORY_IMPL_START(PortLink)
+            if (!name->equals_ascii("ctl:link"))
+                return STATUS_NOT_FOUND;
+
+            ctl::PortLink *c    = new ctl::PortLink(context->wrapper());
+            if (c == NULL)
+                return STATUS_NO_MEM;
+
+            *ctl = c;
+            return STATUS_OK;
+        CTL_FACTORY_IMPL_END(PortLink)
+
+        //---------------------------------------------------------------------
+        PortLink::PortLink(ui::IWrapper *wrapper):
+            DOMController(wrapper)
+        {
+            bEnabled        = false;
+            bChanging       = false;
+        }
+
+        PortLink::~PortLink()
+        {
+            // Drop all bindings
+            for (lltl::iterator<binding_t> it = vBindings.values(); it; ++it)
+                destroy_binding(it.get());
+
+            vBindings.flush();
+        }
+
+        status_t PortLink::init()
+        {
+            status_t res = DOMController::init();
+            if (res != STATUS_OK)
+                return res;
+
+            sActivity.init(pWrapper, this);
+
+            return STATUS_OK;
+        }
+
+        void PortLink::destroy_binding(binding_t *b)
+        {
+            if (b == NULL)
+                return;
+
+            if (b->pId != NULL)
+                free(b->pId);
+            delete b;
+        }
+
+        PortLink::binding_t *PortLink::get_binding(const char *id)
+        {
+            binding_t *b;
+
+            // Lookup for matching binding
+            for (lltl::iterator<binding_t> it=vBindings.values(); it; ++it)
+            {
+                b = it.get();
+                if ((b != NULL) && (strcmp(b->pId, id) == 0))
+                    return b;
+            }
+
+            // Create and initialize new binding
+            b = new binding_t;
+            if (b == NULL)
+                return NULL;
+            lsp_finally { destroy_binding(b); };
+
+            b->pId          = NULL;
+            b->pPort        = NULL;
+
+            b->pId          = strdup(id);
+            if (b->pId == NULL)
+                return NULL;
+            b->sValue.init(pWrapper, this, this);
+
+            // Put binding to the list
+            if (!vBindings.add(b))
+                return NULL;
+
+            return release_ptr(b);
+        }
+
+        void PortLink::set(ui::UIContext *ctx, const char *name, const char *value)
+        {
+            if (strncmp(name, "id.", 3) == 0)
+            {
+                binding_t *b = get_binding(&name[3]);
+                if (b != NULL)
+                    link_port(&b->pPort, value);
+            }
+            else if (strncmp(name, "value.", 6) == 0)
+            {
+                binding_t *b = get_binding(&name[6]);
+                if (b != NULL)
+                    b->sValue.parse(value);
+            }
+            else if (strcmp(name, "activity") == 0)
+                sActivity.parse(value);
+        }
+
+        void PortLink::end(ui::UIContext *ctx)
+        {
+            // Update activity
+            if (sActivity.valid())
+                bEnabled    = sActivity.evaluate() >= 0.5f;
+
+            // Initialize current values
+            for (lltl::iterator<binding_t> it = vBindings.values(); it; ++it)
+            {
+                binding_t *b = it.get();
+                if (b->pPort != NULL)
+                {
+                    const float value = b->pPort->value();
+                    b->fOldValue    = value;
+                    b->fNewValue    = value;
+                }
+            }
+        }
+
+        void PortLink::notify(ui::IPort *port, size_t flags)
+        {
+            // Skip recursive calls.
+            if (bChanging)
+                return;
+
+            // Update activity and skip other events if not active
+            if (sActivity.depends(port))
+                bEnabled    = sActivity.evaluate() >= 0.5f;
+            if ((!bEnabled) || (!(flags & ui::PORT_USER_EDIT)))
+            {
+                for (lltl::iterator<binding_t> it = vBindings.values(); it; ++it)
+                {
+                    binding_t *b = it.get();
+                    if (b->pPort == port)
+                    {
+                        const float value = b->pPort->value();
+                        b->fOldValue    = value;
+                        b->fNewValue    = value;
+                    }
+                }
+                return;
+            }
+
+            // Now we're ready to apply changes to all ports
+            bChanging = true;
+            lsp_finally { bChanging = false; };
+
+            // Compute new value for each binding depending on it's port's role
+            for (lltl::iterator<binding_t> it = vBindings.values(); it; ++it)
+            {
+                binding_t *b = it.get();
+                if ((b->pPort != NULL) && (b->pPort == port))
+                    b->fNewValue    = b->pPort->value();
+                else if (b->sValue.depends(port))
+                    b->fNewValue    = b->sValue.evaluate();
+            }
+
+            // Update port values without notification
+            for (lltl::iterator<binding_t> it = vBindings.values(); it; ++it)
+            {
+                binding_t *b = it.get();
+
+                if ((b->pPort != NULL) && (b->pPort != port))
+                {
+                    b->pPort->set_value(b->fNewValue);
+                    b->fNewValue = b->pPort->value();
+                    lsp_trace("set %s = %f", b->pPort->id(), b->fNewValue);
+                }
+                b->fOldValue = b->fNewValue;
+            }
+
+            // Notify changed ports
+            for (lltl::iterator<binding_t> it = vBindings.values(); it; ++it)
+            {
+                binding_t *b = it.get();
+                if ((b->pPort != NULL) && (b->pPort != port))
+                    b->pPort->notify_all(flags);
+            }
+        }
+
+        status_t PortLink::resolve(expr::value_t *value, const char *name, size_t num_indexes, const ssize_t *indexes)
+        {
+            if (num_indexes > 0)
+                return STATUS_NOT_FOUND;
+            if (strncmp(name, "_old_", 5) != 0)
+                return STATUS_NOT_FOUND;
+
+            // Lookup for previous values
+            name += 5;
+            for (lltl::iterator<binding_t> it = vBindings.values(); it; ++it)
+            {
+                binding_t *b = it.get();
+                if ((b->pId != NULL) && (strcmp(b->pId, name) == 0))
+                {
+                    expr::set_value_float(value, b->fOldValue);
+                    lsp_trace("resolve _old_%s -> %f", b->pId, b->fOldValue);
+                    return STATUS_OK;
+                }
+            }
+
+            return STATUS_NOT_FOUND;
+        }
+
+        status_t PortLink::resolve(expr::value_t *value, const LSPString *name, size_t num_indexes, const ssize_t *indexes)
+        {
+            return resolve(value, name->get_utf8(), num_indexes, indexes);
+        }
+
+    } /* namespace ctl */
+} /* namespace lsp */
+
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Bevel.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Bevel.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Bevel.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Bevel.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 14 июн. 2021 г.
@@ -72,7 +72,7 @@ namespace lsp
             if (bv != NULL)
             {
                 sColor.init(pWrapper, bv->color());
-                sBorderColor.init(pWrapper, bv->bg_color());
+                sBorderColor.init(pWrapper, bv->border_color());
                 sDirection.init(pWrapper, bv->direction());
                 sBorder.init(pWrapper, bv->border());
             }
@@ -99,8 +99,9 @@ namespace lsp
 
             return Widget::set(ctx, name, value);
         }
-    }
-}
+
+    } /* namespace ctl */
+} /* namespace lsp */
 
 
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Button.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Button.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Button.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Button.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -107,9 +107,9 @@ namespace lsp
                 sHoleColor.init(pWrapper, btn->hole_color());
 
                 sEditable.init(pWrapper, btn->editable());
-                sActivity.init(pWrapper, btn->active());
                 sTextPad.init(pWrapper, btn->text_padding());
                 sText.init(pWrapper, btn->text());
+                sTextClip.init(pWrapper, btn->text_clip());
 
                 // Bind slots
                 btn->slots()->bind(tk::SLOT_CHANGE, slot_change, this);
@@ -176,14 +176,13 @@ namespace lsp
                 sHoleColor.set("hole.color", name, value);
 
                 sEditable.set("editable", name, value);
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
                 sTextPad.set("text.padding", name, value);
                 sTextPad.set("text.pad", name, value);
                 sTextPad.set("tpadding", name, value);
                 sTextPad.set("tpad", name, value);
                 sHover.set("hover", name, value);
                 sText.set("text", name, value);
+                sTextClip.set("text.clip", name, value);
 
                 set_font(btn->font(), "font", name, value);
                 set_constraints(btn->constraints(), name, value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/CheckBox.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/CheckBox.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/CheckBox.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/CheckBox.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -83,7 +83,6 @@ namespace lsp
                 sCheckRadius.init(pWrapper, ck->check_radius());
                 sCheckGapSize.init(pWrapper, ck->check_gap_size());
                 sCheckMinSize.init(pWrapper, ck->check_min_size());
-                sActivity.init(pWrapper, ck->active());
 
                 sColor.init(pWrapper, ck->color());
                 sFillColor.init(pWrapper, ck->fill_color());
@@ -127,8 +126,6 @@ namespace lsp
                 sCheckGapSize.set("check.gap.size", name, value);
                 sCheckGapSize.set("cgap.size", name, value);
                 sCheckMinSize.set("check.min.size", name, value);
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
 
                 sColor.set("color", name, value);
                 sFillColor.set("fill.color", name, value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Edit.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Edit.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Edit.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Edit.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -97,7 +97,6 @@ namespace lsp
                 inject_style(ed, INPUT_STYLE_VALID);
 
                 sEmptyText.init(pWrapper, ed->empty_text());
-                sActivity.init(pWrapper, ed->active());
 
                 sColor.init(pWrapper, ed->color());
                 sBorderColor.init(pWrapper, ed->border_color());
@@ -135,8 +134,6 @@ namespace lsp
 
                 sEmptyText.set("text.empty", name, value);
                 sEmptyText.set("etext", name, value);
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
 
                 sColor.set("color", name, value);
                 sBorderColor.set("border.color", name, value);
@@ -213,11 +210,14 @@ namespace lsp
             if (meta::is_path_port(meta))
             {
                 const char *path = value.get_utf8();
-                const size_t length = strlen(path);
-                if ((path != NULL) && (length < PATH_MAX))
+                if (path != NULL)
                 {
-                    pPort->write(path, length);
-                    pPort->notify_all(ui::PORT_USER_EDIT);
+                    const size_t length = strlen(path);
+                    if (length < PATH_MAX)
+                    {
+                        pPort->write(path, length);
+                        pPort->notify_all(ui::PORT_USER_EDIT);
+                    }
                 }
             }
             else if (meta::is_string_port(meta))
@@ -242,16 +242,16 @@ namespace lsp
 
         void Edit::commit_value()
         {
+            sTimer.cancel();
             if (pPort == NULL)
                 return;
-            sTimer.cancel();
 
             const meta::port_t *meta = pPort->metadata();
             if (meta == NULL)
                 return;
 
             tk::Edit *ed = tk::widget_cast<tk::Edit>(wWidget);
-            if ((ed == NULL) || (pPort == NULL))
+            if (ed == NULL)
                 return;
 
             // Do the stuff depending on the metadata
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Fader.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Fader.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Fader.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Fader.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -95,8 +95,6 @@ namespace lsp
                 sInactiveScaleBorderColor.init(pWrapper, fdr->inactive_scale_border_color());
                 sInactiveBalanceColor.init(pWrapper, fdr->inactive_balance_color());
 
-                sActivity.init(pWrapper, fdr->active());
-
                 sMin.init(pWrapper, this);
                 sMax.init(pWrapper, this);
 
@@ -139,9 +137,6 @@ namespace lsp
                 sInactiveBalanceColor.set("inactive.balance.color", name, value);
                 sInactiveBalanceColor.set("inactive.bcolor", name, value);
 
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
-
                 if (!strcmp(name, "min"))
                 {
                     sMin.parse(value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Hyperlink.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Hyperlink.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Hyperlink.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Hyperlink.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 12 июн. 2021 г.
@@ -75,6 +75,8 @@ namespace lsp
                 sUrl.init(pWrapper, lnk->url());
                 sColor.init(pWrapper, lnk->color());
                 sHoverColor.init(pWrapper, lnk->hover_color());
+                sInactiveColor.init(pWrapper, lnk->inactive_color());
+                sInactiveHoverColor.init(pWrapper, lnk->inactive_hover_color());
             }
 
             return STATUS_OK;
@@ -90,6 +92,9 @@ namespace lsp
                 sColor.set("color", name, value);
                 sHoverColor.set("hover.color", name, value);
                 sHoverColor.set("hcolor", name, value);
+                sInactiveColor.set("inactive.color", name, value);
+                sInactiveHoverColor.set("inactive.hover.color", name, value);
+                sInactiveHoverColor.set("inactive.hcolor", name, value);
 
                 set_constraints(lnk->constraints(), name, value);
                 set_font(lnk->font(), "font", name, value);
@@ -101,7 +106,8 @@ namespace lsp
 
             return Widget::set(ctx, name, value);
         }
-    }
-}
+
+    } /* namespace ctl */
+} /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Indicator.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Indicator.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Indicator.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Indicator.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -106,7 +106,6 @@ namespace lsp
                 sInactiveColor.init(pWrapper, ind->inactive_color());
                 sInactiveTextColor.init(pWrapper, ind->inactive_text_color());
 
-                sActivity.init(pWrapper, ind->active());
                 sIPadding.init(pWrapper, ind->ipadding());
 
                 parse_format();
@@ -131,8 +130,6 @@ namespace lsp
                 sInactiveTextColor.set("inactive.text.color", name, value);
                 sInactiveTextColor.set("inactive.tcolor", name, value);
 
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
                 sIPadding.set("ipadding", name, value);
                 sIPadding.set("ipad", name, value);
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Knob.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Knob.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Knob.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Knob.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -103,7 +103,6 @@ namespace lsp
 
                 sMeterVisible.init(pWrapper, knob->meter_active());
                 sEditable.init(pWrapper, knob->editable());
-                sActivity.init(pWrapper, knob->editable());
 
                 sMin.init(pWrapper, this);
                 sMax.init(pWrapper, this);
@@ -168,8 +167,6 @@ namespace lsp
                 sMeterVisible.set("mvisibility", name, value);
 
                 sEditable.set("editable", name, value);
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
 
                 if (!strcmp(name, "min"))
                 {
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Label.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Label.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Label.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Label.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 6 мая 2021 г.
@@ -19,6 +19,7 @@
  * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
  */
 
+#include <lsp-plug.in/common/debug.h>
 #include <lsp-plug.in/plug-fw/ctl.h>
 #include <lsp-plug.in/plug-fw/meta/func.h>
 
@@ -188,7 +189,11 @@ namespace lsp
             {
                 sColor.init(pWrapper, lbl->color());
                 sHoverColor.init(pWrapper, lbl->hover_color());
+                sInactiveColor.init(pWrapper, lbl->inactive_color());
+                sInactiveHoverColor.init(pWrapper, lbl->inactive_hover_color());
+
                 sText.init(pWrapper, lbl->text());
+                sTextClip.init(pWrapper, lbl->text_clip());
                 sIPadding.init(pWrapper, lbl->ipadding());
 
                 lbl->slot(tk::SLOT_MOUSE_DBL_CLICK)->bind(slot_dbl_click, this);
@@ -354,6 +359,7 @@ namespace lsp
                 bind_port(&pPort, "id", name, value);
 
                 set_text_layout(lbl->text_layout(), name, value);
+                set_text_layout(lbl->clip_text_layout(), "text.clip", name, value);
                 set_font(lbl->font(), "font", name, value);
                 set_constraints(lbl->constraints(), name, value);
                 set_param(lbl->text_adjust(), "text.adjust", name, value);
@@ -377,8 +383,12 @@ namespace lsp
                 sColor.set("color", name, value);
                 sHoverColor.set("hover.color", name, value);
                 sHoverColor.set("hcolor", name, value);
+                sInactiveColor.set("inactive.color", name, value);
+                sInactiveHoverColor.set("inactive.hover.color", name, value);
+                sInactiveHoverColor.set("inactive.hcolor", name, value);
                 sIPadding.set("ipadding", name, value);
                 sIPadding.set("ipad", name, value);
+                sTextClip.set("text.clip", name, value);
             }
 
             Widget::set(ctx, name, value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Led.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Led.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/Led.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/Led.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -87,8 +87,6 @@ namespace lsp
 
                 sHoleColor.init(pWrapper, led->hole_color());
 
-                sActivity.init(pWrapper, led->active());
-
                 sLight.init(pWrapper, this);
             }
 
@@ -125,8 +123,6 @@ namespace lsp
                 sHoleColor.set("hole.color", name, value);
                 sHoleColor.set("hcolor", name, value);
 
-                sActivity.set("active", name, value);
-                sActivity.set("activity", name, value);
                 set_expr(&sLight, "light", name, value);
 
                 set_constraints(led->constraints(), name, value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/ProgressBar.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/ProgressBar.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/simple/ProgressBar.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/simple/ProgressBar.cpp	2025-08-26 18:15:48.101960821 +0000
@@ -95,7 +95,6 @@ namespace lsp
                 sBorderRadius.init(pWrapper, pb->border_radius());
 
                 sText.init(pWrapper, pb->text());
-                sActivity.init(pWrapper, pb->active());
                 sShowText.init(pWrapper, pb->show_text());
 
                 sValue.init(pWrapper, this);
@@ -145,8 +144,6 @@ namespace lsp
                 sText.set("text", name, value);
                 sShowText.set("text.visibility", name, value);
                 sShowText.set("tvisibility", name, value);
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
 
                 sBorderSize.set("border.size", name, value);
                 sBorderSize.set("bsize", name, value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioEnvelope.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioEnvelope.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioEnvelope.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioEnvelope.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -0,0 +1,407 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugins
+ * Created on: 9 июн. 2025 г.
+ *
+ * lsp-plugins is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugins is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugins. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/ctl.h>
+#include <lsp-plug.in/dsp-units/util/ADSREnvelope.h>
+
+namespace lsp
+{
+    namespace ctl
+    {
+        //---------------------------------------------------------------------
+        CTL_FACTORY_IMPL_START(AudioEnvelope)
+            status_t res;
+
+            if (!name->equals_ascii("aenvelope"))
+                return STATUS_NOT_FOUND;
+
+            tk::AudioEnvelope *w = new tk::AudioEnvelope(context->display());
+            if (w == NULL)
+                return STATUS_NO_MEM;
+            if ((res = context->widgets()->add(w)) != STATUS_OK)
+            {
+                delete w;
+                return res;
+            }
+
+            if ((res = w->init()) != STATUS_OK)
+                return res;
+
+            ctl::AudioEnvelope *wc  = new ctl::AudioEnvelope(context->wrapper(), w);
+            if (ctl == NULL)
+                return STATUS_NO_MEM;
+
+            *ctl = wc;
+            return STATUS_OK;
+        CTL_FACTORY_IMPL_END(AudioEnvelope)
+
+        //-----------------------------------------------------------------
+        const ctl_class_t AudioEnvelope::metadata       = { "AudioEnvelope", &Widget::metadata };
+
+        AudioEnvelope::AudioEnvelope(ui::IWrapper *wrapper, tk::AudioEnvelope *widget): ctl::Widget(wrapper, widget)
+        {
+            pClass              = &metadata;
+
+            for (size_t i=0; i<P_TOTAL; ++i)
+            {
+                for (size_t j=0; j<R_TOTAL; ++j)
+                {
+                    point_t *p      = &vPoints[i][j];
+
+                    p->pPort        = NULL;
+                    p->pValue       = NULL;
+                    p->fOldValue    = 0.0f;
+                    p->fNewValue    = 0.0f;
+                }
+
+                vTypes[i]           = NULL;
+            }
+
+            bCommitting         = false;
+            bSubmitting         = false;
+        }
+
+        AudioEnvelope::~AudioEnvelope()
+        {
+        }
+
+        status_t AudioEnvelope::init()
+        {
+            LSP_STATUS_ASSERT(Widget::init());
+
+            tk::AudioEnvelope *ae = tk::widget_cast<tk::AudioEnvelope>(wWidget);
+            if (ae != NULL)
+            {
+                vPoints[P_ATTACK][R_TIME].pValue    = ae->attack_time();
+                vPoints[P_ATTACK][R_CURVE].pValue   = ae->attack_curvature();
+                vPoints[P_HOLD][R_TIME].pValue      = ae->hold_time();
+                vPoints[P_DECAY][R_TIME].pValue     = ae->decay_time();
+                vPoints[P_DECAY][R_CURVE].pValue    = ae->decay_curvature();
+                vPoints[P_BREAK][R_LEVEL].pValue    = ae->break_level();
+                vPoints[P_SLOPE][R_TIME].pValue     = ae->slope_time();
+                vPoints[P_SLOPE][R_CURVE].pValue    = ae->slope_curvature();
+                vPoints[P_SUSTAIN][R_LEVEL].pValue  = ae->sustain_level();
+                vPoints[P_RELEASE][R_TIME].pValue   = ae->release_time();
+                vPoints[P_RELEASE][R_CURVE].pValue  = ae->release_curvature();
+
+                sHoldEnabled.init(pWrapper, ae->hold_enabled());
+                sBreakEnabled.init(pWrapper, ae->break_enabled());
+                sQuadPoint.init(pWrapper, ae->quad_point());
+                sFill.init(pWrapper, ae->fill());
+                sWire.init(pWrapper, ae->wire());
+                sEditable.init(pWrapper, ae->editable());
+                sLineWidth.init(pWrapper, ae->line_width());
+                sLineColor.init(pWrapper, ae->line_color());
+                sFillColor.init(pWrapper, ae->fill_color());
+                sPointSize.init(pWrapper, ae->point_size());
+                sPointColor.init(pWrapper, ae->point_color());
+                sPointHoverColor.init(pWrapper, ae->point_hover_color());
+                sColor.init(pWrapper, ae->color());
+                sBorderFlat.init(pWrapper, ae->border_flat());
+                sGlass.init(pWrapper, ae->glass());
+                sGlassColor.init(pWrapper, ae->glass_color());
+                sIPadding.init(pWrapper, ae->ipadding());
+                sBorderColor.init(pWrapper, ae->border_color());
+
+                ae->slots()->bind(tk::SLOT_CHANGE, slot_change, this);
+                ae->set_curve_function(curve_function, this);
+            }
+
+            return STATUS_OK;
+        }
+
+        void AudioEnvelope::destroy()
+        {
+            ctl::Widget::destroy();
+        }
+
+        void AudioEnvelope::set(ui::UIContext *ctx, const char *name, const char *value)
+        {
+            tk::AudioEnvelope *ae = tk::widget_cast<tk::AudioEnvelope>(wWidget);
+            if (ae != NULL)
+            {
+                bind_port(&vPoints[P_ATTACK][R_TIME].pPort, "attack.time.id", name, value);
+                bind_port(&vPoints[P_ATTACK][R_CURVE].pPort, "attack.curve.id", name, value);
+                bind_port(&vPoints[P_HOLD][R_TIME].pPort, "hold.time.id", name, value);
+                bind_port(&vPoints[P_DECAY][R_TIME].pPort, "decay.time.id", name, value);
+                bind_port(&vPoints[P_DECAY][R_CURVE].pPort, "decay.curve.id", name, value);
+                bind_port(&vPoints[P_BREAK][R_LEVEL].pPort, "break.level.id", name, value);
+                bind_port(&vPoints[P_SLOPE][R_TIME].pPort, "slope.time.id", name, value);
+                bind_port(&vPoints[P_SLOPE][R_CURVE].pPort, "slope.curve.id", name, value);
+                bind_port(&vPoints[P_SUSTAIN][R_LEVEL].pPort, "sustain.level.id", name, value);
+                bind_port(&vPoints[P_RELEASE][R_TIME].pPort, "release.time.id", name, value);
+                bind_port(&vPoints[P_RELEASE][R_CURVE].pPort, "release.curve.id", name, value);
+
+                bind_port(&vTypes[P_ATTACK], "attack.type.id", name, value);
+                bind_port(&vTypes[P_DECAY], "decay.type.id", name, value);
+                bind_port(&vTypes[P_SLOPE], "slope.type.id", name, value);
+                bind_port(&vTypes[P_RELEASE], "release.type.id", name, value);
+
+                sHoldEnabled.set("hold.enabled", name, value);
+                sBreakEnabled.set("break.enabled", name, value);
+                sQuadPoint.set("point.quad", name, value);
+                sFill.set("fill", name, value);
+                sWire.set("wire", name, value);
+                sEditable.set("editable", name, value);
+                sLineWidth.set("line.width", name, value);
+                sLineColor.set("line.color", name, value);
+                sFillColor.set("fill.color", name, value);
+                sPointSize.set("point.size", name, value);
+                sPointColor.set("point.color", name, value);
+                sPointHoverColor.set("point.hover.color", name, value);
+                sColor.set("color", name, value);
+                sBorderFlat.set("border.flat", name, value);
+                sGlass.set("glass", name, value);
+                sGlassColor.set("glass.color", name, value);
+                sBorderColor.set("border.color", name, value);
+
+                set_constraints(ae->constraints(), name, value);
+            }
+
+            return ctl::Widget::set(ctx, name, value);
+        }
+
+        float AudioEnvelope::get_normalized(ui::IPort *port)
+        {
+            if (port == NULL)
+                return 0.0f;
+
+            const meta::port_t *meta = port->metadata();
+            if (meta == NULL)
+                return 0.0f;
+
+            if ((meta->flags & (meta::F_UPPER | meta::F_LOWER)) != (meta::F_UPPER | meta::F_LOWER))
+                return 0.0f;
+
+            const float value = port->value();
+            return (value - meta->min) / (meta->max - meta->min);
+        }
+
+        void AudioEnvelope::set_normalized(ui::IPort *port, float value)
+        {
+            if (port == NULL)
+                return;
+
+            const meta::port_t *meta = port->metadata();
+            if (meta == NULL)
+                return;
+
+            if ((meta->flags & (meta::F_UPPER | meta::F_LOWER)) != (meta::F_UPPER | meta::F_LOWER))
+                return;
+
+            port->set_value(meta->min + value * (meta->max - meta->min));
+        }
+
+        void AudioEnvelope::end(ui::UIContext *ctx)
+        {
+            // Synchronize port values
+            for (size_t i=0; i<P_TOTAL; ++i)
+                for (size_t j=0; j<R_TOTAL; ++j)
+                {
+                    point_t *p      = &vPoints[i][j];
+                    if ((p->pPort == NULL) || (p->pValue == NULL))
+                        continue;
+
+                    const float value = get_normalized(p->pPort);
+                    p->fOldValue    = value;
+                    p->fNewValue    = value;
+                }
+
+            // Align time points
+            arrange_time_values();
+            commit_values();
+
+            ctl::Widget::end(ctx);
+        }
+
+        void AudioEnvelope::arrange_time_values()
+        {
+            point_t *prev   = NULL;
+            for (size_t i=0; i<P_TOTAL; ++i)
+            {
+                point_t *p      = &vPoints[i][R_TIME];
+                if (p->pPort == NULL)
+                    continue;
+
+                p->fNewValue    = lsp_limit(p->fNewValue, 0.0f, 1.0f);
+                if ((prev != NULL) && (p->fNewValue < prev->fNewValue))
+                    p->fNewValue    = prev->fNewValue;
+
+                prev            = p;
+            }
+        }
+
+        void AudioEnvelope::commit_values()
+        {
+            // Avoid recursive calls
+            if (bCommitting)
+                return;
+            bCommitting = true;
+            lsp_finally { bCommitting = false; };
+
+            // Update values on the widget
+            for (size_t i=0; i<P_TOTAL; ++i)
+                for (size_t j=0; j<R_TOTAL; ++j)
+                {
+                    point_t *p      = &vPoints[i][j];
+                    if ((p->pPort == NULL) || (p->pValue == NULL))
+                        continue;
+
+                    if (p->fNewValue != p->pValue->get())
+                        p->pValue->set(p->fNewValue);
+                }
+        }
+
+        void AudioEnvelope::sync_time_values(point_t *actor)
+        {
+            for (size_t i=0; i<P_TOTAL; ++i)
+            {
+                point_t *dst    = &vPoints[i][R_TIME];
+                if (dst->pPort == NULL)
+                    continue;
+
+                if ((dst < actor) && (dst->fNewValue > actor->fNewValue))
+                    dst->fNewValue      = actor->fNewValue;
+                else if ((dst > actor) && (dst->fNewValue < actor->fNewValue))
+                    dst->fNewValue      = actor->fNewValue;
+            }
+        }
+
+        void AudioEnvelope::notify(ui::IPort *port, size_t flags)
+        {
+            // Update state of points
+            for (size_t i=0; i<P_TOTAL; ++i)
+            {
+                for (size_t j=0; j<R_TOTAL; ++j)
+                {
+                    point_t *p      = &vPoints[i][j];
+                    if ((p->pPort != port) || (p->pValue == NULL))
+                        continue;
+
+                    p->fNewValue    = get_normalized(p->pPort);
+                    if (j == R_TIME)
+                        sync_time_values(p);
+                }
+
+                // Query curve redraw if curve segment type port has changed
+                if ((vTypes[i] != NULL) && (vTypes[i] == port))
+                    wWidget->query_draw();
+            }
+
+            // Commit changes for points
+            commit_values();
+            submit_ports();
+        }
+
+        void AudioEnvelope::submit_ports()
+        {
+            // Avoid recursive calls
+            if (bSubmitting)
+                return;
+            bSubmitting = true;
+            lsp_finally { bSubmitting = false; };
+
+            // Update port values
+            for (size_t i=0; i<P_TOTAL; ++i)
+                for (size_t j=0; j<R_TOTAL; ++j)
+                {
+                    point_t *p      = &vPoints[i][j];
+                    if ((p->pPort == NULL) || (p->pValue == NULL))
+                        continue;
+
+                    p->fNewValue = p->pValue->get();
+                    if (p->fNewValue != p->fOldValue)
+                        set_normalized(p->pPort, p->fNewValue);
+                }
+
+            // Commit new values and notify about changes
+            for (size_t i=0; i<P_TOTAL; ++i)
+                for (size_t j=0; j<R_TOTAL; ++j)
+                {
+                    point_t *p      = &vPoints[i][j];
+                    if ((p->pPort == NULL) || (p->pValue == NULL))
+                        continue;
+
+                    if (p->fNewValue != p->fOldValue)
+                    {
+                        const float value   = get_normalized(p->pPort);
+                        p->fNewValue        = value;
+                        p->fOldValue        = value;
+
+                        p->pPort->notify_all(ui::PORT_USER_EDIT);
+                    }
+                }
+        }
+
+        size_t AudioEnvelope::get_function(points_t point)
+        {
+            ui::IPort *port = vTypes[point];
+            return (port != NULL) ? port->value() : dspu::ADSREnvelope::ADSR_NONE;
+        }
+
+        void AudioEnvelope::curve_function(float *y, const float *x, size_t count, const tk::AudioEnvelope *sender, void *data)
+        {
+            if (sender == NULL)
+                return;
+
+            AudioEnvelope *self = static_cast<AudioEnvelope *>(data);
+            if (self == NULL)
+                return;
+
+            dspu::ADSREnvelope e;
+
+            e.set_attack(
+                sender->attack_time()->get(),
+                sender->attack_curvature()->get(),
+                dspu::ADSREnvelope::function_t(self->get_function(P_ATTACK)));
+            e.set_hold(
+                sender->hold_time()->get(),
+                sender->hold_enabled()->get());
+            e.set_decay(
+                sender->decay_time()->get(),
+                sender->decay_curvature()->get(),
+                dspu::ADSREnvelope::function_t(self->get_function(P_DECAY)));
+            e.set_break(
+                sender->break_level()->get(),
+                sender->break_enabled()->get());
+            e.set_slope(
+                sender->slope_time()->get(),
+                sender->slope_curvature()->get(),
+                dspu::ADSREnvelope::function_t(self->get_function(P_SLOPE)));
+            e.set_sustain_level(sender->sustain_level()->get());
+            e.set_release(
+                sender->release_time()->get(),
+                sender->release_curvature()->get(),
+                dspu::ADSREnvelope::function_t(self->get_function(P_RELEASE)));
+
+            e.process(y, x, count);
+        }
+
+        status_t AudioEnvelope::slot_change(tk::Widget *sender, void *ptr, void *data)
+        {
+            ctl::AudioEnvelope *self    = static_cast<ctl::AudioEnvelope *>(ptr);
+            if (self != NULL)
+                self->submit_ports();
+            return STATUS_OK;
+        }
+
+    } /* namespace ctl */
+} /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioFilePreview.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioFilePreview.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioFilePreview.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioFilePreview.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2022 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2022 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 16 дек. 2022 г.
@@ -263,7 +263,7 @@ namespace lsp
             set_localized("sample_format", sfmt_key.get_utf8());
             set_localized("duration", lc_key, &tparams);
 
-            // Check the auyo-play option and trigger DSP backend for the file playback
+            // Check the auto-play option and trigger DSP backend for the file playback
             ui::IPort *p    = pWrapper->port(UI_PREVIEW_AUTO_PLAY_PORT);
             nPlayPosition   = 0;
             nFileLength     = info.frames;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioFolder.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioFolder.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioFolder.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioFolder.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -68,10 +68,11 @@ namespace lsp
             pClass          = &metadata;
 
             pPort           = NULL;
-            pAutoload       = NULL;
             wActive         = NULL;
 
             bActive         = false;
+            bAutoLoad       = false;
+            bAutoPlay       = false;
         }
 
         AudioFolder::~AudioFolder()
@@ -87,13 +88,16 @@ namespace lsp
             {
                 sHScroll.init(pWrapper, lbox->hscroll_mode());
                 sVScroll.init(pWrapper, lbox->vscroll_mode());
+                sAutoLoad.init(pWrapper, this);
+                sAutoPlay.init(pWrapper, this);
 
                 // Bind slots
                 lbox->slots()->bind(tk::SLOT_SUBMIT, slot_submit, this);
                 lbox->slots()->bind(tk::SLOT_CHANGE, slot_change, this);
-            }
 
-            link_port(&pAutoload, UI_FILELIST_NAVIGAION_AUTOLOAD_PORT);
+                sAutoLoad.parse(":" UI_FILELIST_NAVIGATION_AUTOLOAD_PORT);
+                sAutoPlay.parse(":" UI_FILELIST_NAVIGATION_AUTOPLAY_PORT);
+            }
 
             return STATUS_OK;
         }
@@ -104,7 +108,6 @@ namespace lsp
             if (lbox != NULL)
             {
                 bind_port(&pPort, "id", name, value);
-                bind_port(&pAutoload, "autoload_id", name, value);
 
                 set_param(lbox->border_size(), "border.size", name, value);
                 set_param(lbox->border_size(), "bsize", name, value);
@@ -113,6 +116,9 @@ namespace lsp
                 set_param(lbox->border_radius(), "border.radius", name, value);
                 set_param(lbox->border_radius(), "bradius", name, value);
 
+                set_expr(&sAutoLoad, "autoload", name, value);
+                set_expr(&sAutoPlay, "autoplay", name, value);
+
                 sHScroll.set(name, "hscroll", value);
                 sVScroll.set(name, "vscroll", value);
 
@@ -129,6 +135,8 @@ namespace lsp
         {
             update_styles();
             sync_state();
+            sync_auto_load();
+            sync_auto_play();
             Widget::end(ctx);
         }
 
@@ -176,6 +184,16 @@ namespace lsp
             return true;
         }
 
+        void AudioFolder::sync_auto_play()
+        {
+            bAutoPlay   = (sAutoPlay.valid()) ? sAutoPlay.evaluate() >= 0.5f : false;
+        }
+
+        void AudioFolder::sync_auto_load()
+        {
+            bAutoLoad   = (sAutoLoad.valid()) ? sAutoLoad.evaluate() >= 0.5f : false;
+        }
+
         void AudioFolder::sync_state()
         {
             tk::ListBox *lbox = tk::widget_cast<tk::ListBox>(wWidget);
@@ -284,14 +302,25 @@ namespace lsp
                 return;
 
             // Apply changes
-            pPort->write(buf, strlen(buf));
-            pPort->notify_all(ui::PORT_USER_EDIT);
+            pWrapper->play_file(NULL, 0, false);
+            if (bAutoPlay)
+                pWrapper->play_file(buf, 0, true);
+
+            if (bAutoLoad)
+            {
+                pPort->write(buf, strlen(buf));
+                pPort->notify_all(ui::PORT_USER_EDIT);
+            }
         }
 
         void AudioFolder::notify(ui::IPort *port, size_t flags)
         {
             if ((pPort != NULL) && (port == pPort))
                 sync_state();
+            if (sAutoLoad.depends(port))
+                sync_auto_load();
+            if (sAutoPlay.depends(port))
+                sync_auto_play();
         }
 
         status_t AudioFolder::slot_submit(tk::Widget *sender, void *ptr, void *data)
@@ -300,7 +329,7 @@ namespace lsp
             if (self == NULL)
                 return STATUS_OK;
 
-            if ((self->pAutoload == NULL) || (self->pAutoload->value() < 0.5f))
+            if ((self->bAutoLoad) || (self->bAutoPlay))
                 self->apply_action();
             return STATUS_OK;
         }
@@ -311,7 +340,7 @@ namespace lsp
             if (self == NULL)
                 return STATUS_OK;
 
-            if ((self->pAutoload != NULL) && (self->pAutoload->value() >= 0.5f))
+            if ((self->bAutoLoad) || (self->bAutoPlay))
                 self->apply_action();
             return STATUS_OK;
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioNavigator.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioNavigator.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioNavigator.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioNavigator.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -69,6 +69,7 @@ namespace lsp
 
             pPort           = NULL;
             bActive         = false;
+            bAutoPlay       = false;
             enAction        = A_NEXT;
         }
 
@@ -94,9 +95,13 @@ namespace lsp
                 sEditable.init(pWrapper, btn->editable());
                 sTextPad.init(pWrapper, btn->text_padding());
                 sText.init(pWrapper, btn->text());
+                sAutoPlay.init(pWrapper, this);
 
                 // Bind slots
                 btn->slots()->bind(tk::SLOT_CHANGE, slot_change, this);
+
+                // Set default auto-play flag
+                sAutoPlay.parse(":" UI_FILELIST_NAVIGATION_AUTOPLAY_PORT);
             }
 
             return STATUS_OK;
@@ -171,6 +176,7 @@ namespace lsp
                 sTextPad.set("tpad", name, value);
                 sHover.set("hover", name, value);
                 sText.set("text", name, value);
+                set_expr(&sAutoPlay, "autoplay", name, value);
 
                 set_font(btn->font(), "font", name, value);
                 set_constraints(btn->constraints(), name, value);
@@ -237,8 +243,14 @@ namespace lsp
             set_activity(sDirController.valid());
         }
 
+        void AudioNavigator::sync_auto_play()
+        {
+            bAutoPlay   = (sAutoPlay.valid()) ? sAutoPlay.evaluate() >= 0.5f : false;
+        }
+
         void AudioNavigator::end(ui::UIContext *ctx)
         {
+            sync_auto_play();
             update_styles();
             sync_state();
             Widget::end(ctx);
@@ -301,7 +313,10 @@ namespace lsp
                 if (buf == NULL)
                     return;
 
+                pWrapper->play_file(NULL, 0, false);
                 pPort->write(buf, strlen(buf));
+                if (bAutoPlay)
+                    pWrapper->play_file(buf, 0, true);
             }
             else
                 pPort->write("", 0);
@@ -312,6 +327,8 @@ namespace lsp
         {
             if ((pPort != NULL) && (port == pPort))
                 sync_state();
+            if (sAutoPlay.depends(port))
+                sync_auto_play();
         }
 
         status_t AudioNavigator::slot_change(tk::Widget *sender, void *ptr, void *data)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioSample.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioSample.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/AudioSample.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/AudioSample.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 20 июл. 2021 г.
@@ -188,7 +188,6 @@ namespace lsp
             pMenu           = NULL;
             pDataSink       = NULL;
             pDragInSink     = NULL;
-            bFullSample     = false;
             bLoadPreview    = false;
         }
 
@@ -287,6 +286,7 @@ namespace lsp
                 sPlayPosition.init(pWrapper, this);
                 sLength.init(pWrapper, this);
                 sActualLength.init(pWrapper, this);
+                sFullSample.init(pWrapper, this);
 
                 sColor.init(pWrapper, as->color());
                 sBorderColor.init(pWrapper, as->border_color());
@@ -436,6 +436,7 @@ namespace lsp
                 set_expr(&sPlayPosition, "play.position", name, value);
                 set_expr(&sLength, "length", name, value);
                 set_expr(&sActualLength, "length.actual", name, value);
+                set_expr(&sFullSample, "sample.full", name, value);
 
                 sWaveBorder.set("wave.border", name, value);
                 sWaveBorder.set("wborder", name, value);
@@ -458,7 +459,6 @@ namespace lsp
 
                 sIPadding.set("ipadding", name, value);
 
-                set_value(&bFullSample, "sample.full", name, value);
                 set_value(&bLoadPreview, "load.preview", name, value);
                 set_constraints(as->constraints(), name, value);
                 set_text_layout(as->main_text_layout(), "text.layout.main", name, value);
@@ -558,6 +558,19 @@ namespace lsp
             Widget::end(ctx);
         }
 
+        status_t AudioSample::add(ui::UIContext *ctx, ctl::Widget *child)
+        {
+            tk::AudioSample *as = tk::widget_cast<tk::AudioSample>(wWidget);
+            if (as == NULL)
+                return STATUS_BAD_STATE;
+
+            ctl::AudioEnvelope *ae = ctl::ctl_cast<ctl::AudioEnvelope>(child);
+            if (ae != NULL)
+                return as->add(ae->widget());
+
+            return STATUS_INVALID_VALUE;
+        }
+
         void AudioSample::notify(ui::IPort *port, size_t flags)
         {
             Widget::notify(port, flags);
@@ -584,7 +597,8 @@ namespace lsp
                 (sHeadCut.depends(port)) ||
                 (sTailCut.depends(port)) ||
                 (sLength.depends(port)) ||
-                (sActualLength.depends(port)))
+                (sActualLength.depends(port)) ||
+                (sFullSample.depends(port)))
             {
                 sync_labels();
                 sync_markers();
@@ -721,11 +735,12 @@ namespace lsp
             float fade_in = 0.0f, fade_out = 0.0f;
             float s_begin = -1.0f, s_end = -1.0f;
             float l_begin = -1.0f, l_end = -1.0f;
-            float pp = sPlayPosition.evaluate_float(-1.0f);
-            bool s_on = sStretch.evaluate_bool(false);
-            bool l_on = sLoop.evaluate_bool(false);
+            float pp                = sPlayPosition.evaluate_float(-1.0f);
+            const bool s_on         = sStretch.evaluate_bool(false);
+            const bool l_on         = sLoop.evaluate_bool(false);
+            const bool full_sample  = sFullSample.evaluate_bool(false);
 
-            if (bFullSample)
+            if (full_sample)
             {
                 length      = sLength.evaluate_float();
                 act_length  = (sActualLength.valid()) ? sActualLength.evaluate_float() : sLength.evaluate_float();
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/FileButton.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/FileButton.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/FileButton.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/FileButton.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -189,7 +189,6 @@ namespace lsp
                 sProgress.init(pWrapper, this);
                 sTextPadding.init(pWrapper, fb->text_padding());
                 sGradient.init(pWrapper, fb->gradient());
-                sActivity.init(pWrapper, fb->active());
                 sBorderSize.init(pWrapper, fb->border_size());
                 sBorderPressedSize.init(pWrapper, fb->border_pressed_size());
 
@@ -250,8 +249,6 @@ namespace lsp
                 sTextPadding.set("text.pad", name, value);
                 sTextPadding.set("tpad", name, value);
                 sGradient.set("gradient", name, value);
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
                 sBorderSize.set("border.size", name, value);
                 sBorderSize.set("bsize", name, value);
                 sBorderPressedSize.set("border.pressed.size", name, value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/Fraction.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/Fraction.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/Fraction.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/Fraction.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -87,7 +87,6 @@ namespace lsp
                 sAngle.init(pWrapper, fr->angle());
                 sTextPad.init(pWrapper, fr->text_pad());
                 sThick.init(pWrapper, fr->thickness());
-                sActivity.init(pWrapper, fr->active());
 
                 sColor.init(pWrapper, fr->color());
                 sNumColor.init(pWrapper, fr->num_color());
@@ -125,8 +124,6 @@ namespace lsp
                 sTextPad.set("tpad", name, value);
                 sThick.set("thickness", name, value);
                 sThick.set("thick", name, value);
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
 
                 sColor.set("color", name, value);
                 sNumColor.set("numerator.color", name, value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/LedChannel.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/LedChannel.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/LedChannel.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/LedChannel.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -93,7 +93,6 @@ namespace lsp
             tk::LedMeterChannel *lmc = tk::widget_cast<tk::LedMeterChannel>(wWidget);
             if (lmc != NULL)
             {
-                sActivity.init(pWrapper, lmc->active());
                 sReversive.init(pWrapper, lmc->reversive());
                 sPeakVisible.init(pWrapper, lmc->peak_visible());
                 sBalanceVisible.init(pWrapper, lmc->balance_visible());
@@ -138,8 +137,6 @@ namespace lsp
             {
                 bind_port(&pPort, "id", name, value);
 
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
                 sReversive.set("reversive", name, value);
                 sPeakVisible.set("peak.visibility", name, value);
                 sBalanceVisible.set("balance.visibility", name, value);
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/MidiNote.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/MidiNote.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/specific/MidiNote.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/specific/MidiNote.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -185,7 +185,6 @@ namespace lsp
                 sInactiveColor.init(pWrapper, ind->inactive_color());
                 sInactiveTextColor.init(pWrapper, ind->inactive_text_color());
 
-                sActivity.init(pWrapper, ind->active());
                 sIPadding.init(pWrapper, ind->ipadding());
 
                 ind->slot(tk::SLOT_MOUSE_DBL_CLICK)->bind(slot_dbl_click, this);
@@ -221,8 +220,6 @@ namespace lsp
                 sInactiveTextColor.set("inactive.text.color", name, value);
                 sInactiveTextColor.set("inactive.tcolor", name, value);
 
-                sActivity.set("activity", name, value);
-                sActivity.set("active", name, value);
                 sIPadding.set("ipadding", name, value);
                 sIPadding.set("ipad", name, value);
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Boolean.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Boolean.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Boolean.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Boolean.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 26 апр. 2021 г.
@@ -36,7 +36,7 @@ namespace lsp
                 pWrapper->remove_schema_listener(this);
         }
 
-        void Boolean::on_updated(ui::IPort *port)
+        void Boolean::on_updated(ui::IPort *port, size_t flags)
         {
             apply_changes();
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Enum.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Enum.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Enum.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Enum.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 24 авг. 2021 г.
@@ -36,7 +36,7 @@ namespace lsp
                 pWrapper->remove_schema_listener(this);
         }
 
-        void Enum::on_updated(ui::IPort *port)
+        void Enum::on_updated(ui::IPort *port, size_t flags)
         {
             apply_changes();
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Expression.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Expression.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Expression.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Expression.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -35,16 +35,16 @@ namespace lsp
             pListener   = NULL;
         }
 
-        void Expression::init(ui::IWrapper *wrapper, ui::IPortListener *listener)
+        void Expression::init(ui::IWrapper *wrapper, ui::IPortListener *listener, expr::Resolver *resolver)
         {
-            Property::init(wrapper);
+            Property::init(wrapper, resolver);
             pListener   = listener;
         }
 
-        void Expression::on_updated(ui::IPort *port)
+        void Expression::on_updated(ui::IPort *port, size_t flags)
         {
             if (pListener != NULL)
-                pListener->notify(port, ui::PORT_NONE);
+                pListener->notify(port, flags);
         }
         
         float Expression::evaluate_float(float dfl)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Float.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Float.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Float.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Float.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 26 апр. 2021 г.
@@ -36,7 +36,7 @@ namespace lsp
                 pWrapper->remove_schema_listener(this);
         }
 
-        void Float::on_updated(ui::IPort *port)
+        void Float::on_updated(ui::IPort *port, size_t flags)
         {
             apply_changes();
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Integer.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Integer.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Integer.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Integer.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 26 апр. 2021 г.
@@ -36,7 +36,7 @@ namespace lsp
                 pWrapper->remove_schema_listener(this);
         }
 
-        void Integer::on_updated(ui::IPort *port)
+        void Integer::on_updated(ui::IPort *port, size_t flags)
         {
             apply_changes();
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/LCString.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/LCString.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/LCString.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/LCString.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 23 мая 2021 г.
@@ -264,6 +264,7 @@ namespace lsp
             params->set_cstring("meta_plugin_vst3ui_uid", meta::uid_meta_to_vst3(vst3_uid, plugin->uids.vst3ui));
 
             params->set_cstring("meta_plugin_format", meta::plugin_format_name(pWrapper->plugin_format()));
+            params->set_cstring("meta_ui_graphics_library", pWrapper->graphics_backend());
 
             tmp.fmt_utf8("%d.%d.%d",
                 int(LSP_MODULE_VERSION_MAJOR(plugin->version)),
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Property.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Property.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ctl/util/Property.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ctl/util/Property.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -40,6 +40,8 @@ namespace lsp
             status_t res = pProp->sParams.resolve(value, name, num_indexes, indexes);
             if (res != STATUS_OK)
                 res     = PortResolver::resolve(value, name, num_indexes, indexes);
+            if ((res != STATUS_OK) && (pProp->pResolver != NULL))
+                res = pProp->pResolver->resolve(value, name, num_indexes, indexes);
             if (res != STATUS_OK)
             {
                 expr::Resolver *vars = (pProp->pWrapper != NULL) ? pProp->pWrapper->global_variables() : NULL;
@@ -54,6 +56,8 @@ namespace lsp
             status_t res = pProp->sParams.resolve(value, name, num_indexes, indexes);
             if (res != STATUS_OK)
                 res     = PortResolver::resolve(value, name, num_indexes, indexes);
+            if ((res != STATUS_OK) && (pProp->pResolver != NULL))
+                res = pProp->pResolver->resolve(value, name, num_indexes, indexes);
             if (res != STATUS_OK)
             {
                 expr::Resolver *vars = (pProp->pWrapper != NULL) ? pProp->pWrapper->global_variables() : NULL;
@@ -67,6 +71,7 @@ namespace lsp
             sResolver(this)
         {
             pWrapper    = NULL;
+            pResolver   = NULL;
         }
 
         Property::~Property()
@@ -74,9 +79,10 @@ namespace lsp
             do_destroy();
         }
 
-        void Property::init(ui::IWrapper *wrapper)
+        void Property::init(ui::IWrapper *wrapper, expr::Resolver *resolver)
         {
             pWrapper    = wrapper;
+            pResolver   = resolver;
 
             // Bind expression stuff
             sResolver.init(wrapper);
@@ -112,7 +118,7 @@ namespace lsp
             if (!depends(port))
                 return;
 
-            on_updated(port);
+            on_updated(port, flags);
         }
 
         status_t Property::evaluate(expr::value_t *value)
@@ -179,7 +185,7 @@ namespace lsp
             return STATUS_OK;
         }
 
-        void Property::on_updated(ui::IPort *port)
+        void Property::on_updated(ui::IPort *port, size_t flags)
         {
             // Nothing
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/meta/func.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/meta/func.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/meta/func.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/meta/func.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 24 нояб. 2020 г.
@@ -304,6 +304,7 @@ namespace lsp
 
             size_t  id_bytes        = strlen(metadata->id) + 1;
             size_t  name_bytes      = strlen(metadata->name) + 1;
+            size_t  sname_bytes     = (metadata->short_name) ? strlen(metadata->short_name) + 1 : 0;
 
             // Calculate the overall allocation size
             size_t to_copy          = sizeof(port_t);
@@ -319,12 +320,14 @@ namespace lsp
             ptr                    += to_copy;
             ::memcpy(meta, metadata, to_copy);
 
-            meta->id                = reinterpret_cast<char *>(ptr);
-            ptr                    += id_bytes;
-            meta->name              = reinterpret_cast<char *>(ptr);
+            meta->id                = advance_ptr_bytes<char>(ptr, id_bytes);
+            meta->name              = advance_ptr_bytes<char>(ptr, name_bytes);
+            meta->short_name        = (sname_bytes > 0) ? advance_ptr_bytes<char>(ptr, sname_bytes) : NULL;
 
             memcpy(const_cast<char *>(meta->id), metadata->id, id_bytes);
             memcpy(const_cast<char *>(meta->name), metadata->name, name_bytes);
+            if (metadata->short_name != NULL)
+                memcpy(const_cast<char *>(meta->short_name), metadata->short_name, sname_bytes);
 
             return meta;
         }
@@ -1436,16 +1439,16 @@ namespace lsp
                 (int32_t(vst2_uid[4]));
 
             const int32_t vstfxid = (for_controller) ? (('V' << 16) | ('S' << 8) | 'E') : (('V' << 16) | ('S' << 8) | 'T');
-            sprintf(dst, "%06X", vstfxid);
+            snprintf(dst, 7, "%06X", vstfxid);
             dst    += 6;
 
-            sprintf(dst, "%08X", vst2_cconst);
+            snprintf(dst, 9, "%08X", vst2_cconst);
             dst    += 8;
 
             for (size_t i=0, n=strlen(name); i <= 8; i++)
             {
                 uint8_t c   = (i < n) ? tolower(name[i]) : 0;   // the plugin name has to be lower case
-                sprintf(dst, "%02X", c);
+                snprintf(dst, 3, "%02X", c);
                 dst        += 2;
             }
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/plug/data.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/plug/data.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/plug/data.cpp	2025-03-01 12:42:57.452644424 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/plug/data.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -325,7 +325,7 @@ namespace lsp
             mesh->nBufCap           = bcap;
             mesh->nFrameCap         = fcap;
 
-            mesh->nFrameId          = 0;
+            atomic_store(&mesh->nFrameId, 0);
 
             mesh->vFrames           = reinterpret_cast<frame_t *>(ptr);
             ptr                    += sz_frm;
@@ -333,7 +333,7 @@ namespace lsp
             for (size_t i=0; i<fcap; ++i)
             {
                 frame_t *f              = &mesh->vFrames[i];
-                f->id                   = 0;
+                atomic_store(&f->id, 0);
                 f->head                 = 0;
                 f->tail                 = 0;
                 f->size                 = 0;
@@ -359,19 +359,20 @@ namespace lsp
             for (size_t i=0; i<nFrameCap; ++i)
             {
                 f                       = &vFrames[i];
-                f->id                   = 0;
+                atomic_store(&f->id, 0);
                 f->head                 = 0;
                 f->tail                 = 0;
                 f->size                 = 0;
                 f->length               = 0;
             }
 
-            nFrameId                = current;
+            atomic_store(&nFrameId, current);
         }
 
         void stream_t::clear()
         {
-            clear(nFrameId + 1);
+            const uint32_t frame_id = atomic_load(&nFrameId);
+            clear(frame_id + 1);
         }
 
         void stream_t::destroy(stream_t *buf)
@@ -391,21 +392,21 @@ namespace lsp
         {
             const frame_t *f = &vFrames[frame & (nFrameCap - 1)];
             size_t tail = f->tail;
-            return (f->id == frame) ? tail : -STATUS_NOT_FOUND;
+            return (atomic_load(&f->id) == frame) ? tail : -STATUS_NOT_FOUND;
         }
 
         ssize_t stream_t::get_head(uint32_t frame) const
         {
             const frame_t *f = &vFrames[frame & (nFrameCap - 1)];
             size_t head = f->head;
-            return (f->id == frame) ? head : -STATUS_NOT_FOUND;
+            return (atomic_load(&f->id) == frame) ? head : -STATUS_NOT_FOUND;
         }
 
         ssize_t stream_t::get_frame_size(uint32_t frame) const
         {
             const frame_t *f = &vFrames[frame & (nFrameCap - 1)];
             ssize_t size = f->size;
-            return (f->id == frame) ? size : -STATUS_NOT_FOUND;
+            return (atomic_load(&f->id) == frame) ? size : -STATUS_NOT_FOUND;
         }
 
         ssize_t stream_t::get_position(uint32_t frame) const
@@ -414,19 +415,19 @@ namespace lsp
             ssize_t pos = f->tail - f->length;
             if (pos < 0)
                 pos        += nBufCap;
-            return (f->id == frame) ? pos : -STATUS_NOT_FOUND;
+            return (atomic_load(&f->id) == frame) ? pos : -STATUS_NOT_FOUND;
         }
 
         ssize_t stream_t::get_length(uint32_t frame) const
         {
             const frame_t *f = &vFrames[frame & (nFrameCap - 1)];
             size_t size = f->length;
-            return (f->id == frame) ? size : -STATUS_NOT_FOUND;
+            return (atomic_load(&f->id) == frame) ? size : -STATUS_NOT_FOUND;
         }
 
         size_t stream_t::add_frame(size_t size)
         {
-            size_t prev_id  = nFrameId;
+            size_t prev_id  = atomic_load(&nFrameId);
             size_t frame_id = prev_id + 1;
             frame_t *curr   = &vFrames[prev_id & (nFrameCap - 1)];
             frame_t *next   = &vFrames[frame_id & (nFrameCap - 1)];
@@ -434,7 +435,7 @@ namespace lsp
             size            = lsp_min(size, size_t(STREAM_MAX_FRAME_SIZE));
 
             // Write data for new frame
-            next->id        = frame_id;
+            atomic_store(&next->id, frame_id);
             next->head      = curr->tail;
             next->tail      = next->head + size;
             next->size      = size;
@@ -469,9 +470,9 @@ namespace lsp
             if (channel >= nChannels)
                 return -STATUS_INVALID_VALUE;
 
-            size_t frame_id = nFrameId + 1;
-            frame_t *next   = &vFrames[frame_id & (nFrameCap - 1)];
-            if (next->id != frame_id)
+            const size_t frame_id   = atomic_load(&nFrameId) + 1;
+            frame_t *next           = &vFrames[frame_id & (nFrameCap - 1)];
+            if (atomic_load(&next->id) != frame_id)
                 return -STATUS_BAD_STATE;
 
             // Estimate number of items to copy
@@ -502,9 +503,9 @@ namespace lsp
             if (channel >= nChannels)
                 return NULL;
 
-            size_t frame_id = nFrameId + 1;
-            frame_t *next   = &vFrames[frame_id & (nFrameCap - 1)];
-            if (next->id != frame_id)
+            const size_t frame_id   = atomic_load(&nFrameId) + 1;
+            frame_t *next           = &vFrames[frame_id & (nFrameCap - 1)];
+            if (atomic_load(&next->id) != frame_id)
                 return NULL;
 
             // Estimate number of items to copy
@@ -532,7 +533,7 @@ namespace lsp
             if (channel >= nChannels)
                 return -STATUS_INVALID_VALUE;
             frame_t *frame = &vFrames[frame_id & (nFrameCap - 1)];
-            if (frame->id != frame_id)
+            if (atomic_load(&frame->id) != frame_id)
                 return -STATUS_BAD_STATE;
 
             // Estimate number of items to copy
@@ -564,9 +565,9 @@ namespace lsp
                 return -STATUS_INVALID_VALUE;
 
             // Check that we're reading proper frame
-            size_t frame_id     = nFrameId;
-            frame_t *frm        = &vFrames[frame_id & (nFrameCap - 1)];
-            if (frm->id != frame_id)
+            const size_t frame_id       = atomic_load(&nFrameId);
+            frame_t *frm                = &vFrames[frame_id & (nFrameCap - 1)];
+            if (atomic_load(&frm->id) != frame_id)
                 return -STATUS_BAD_STATE;
 
             // Estimate the offset and number of items to read
@@ -594,16 +595,16 @@ namespace lsp
 
         bool stream_t::commit_frame()
         {
-            size_t prev_id  = nFrameId;
-            size_t frame_id = prev_id + 1;
-            frame_t *curr   = &vFrames[prev_id & (nFrameCap - 1)];
-            frame_t *next   = &vFrames[frame_id & (nFrameCap - 1)];
-            if (next->id != frame_id)
+            const size_t prev_id    = atomic_load(&nFrameId);
+            const size_t frame_id   = prev_id + 1;
+            frame_t *curr           = &vFrames[prev_id & (nFrameCap - 1)];
+            frame_t *next           = &vFrames[frame_id & (nFrameCap - 1)];
+            if (atomic_load(&next->id) != frame_id)
                 return false;
 
             // Commit new frame size and update frame identifier
-            next->length    = lsp_min(curr->length + next->length, nBufMax);
-            nFrameId        = frame_id;
+            next->length            = lsp_min(curr->length + next->length, nBufMax);
+            atomic_store(&nFrameId, frame_id);
 
             return true;
         }
@@ -615,7 +616,8 @@ namespace lsp
                 return false;
 
             // Estimate what to do
-            uint32_t src_frm = src->nFrameId, dst_frm = nFrameId;
+            uint32_t src_frm = atomic_load(&src->nFrameId);
+            uint32_t dst_frm = atomic_load(&nFrameId);
             uint32_t delta = src_frm - dst_frm;
             if (delta == 0)
                 return false; // No changes
@@ -626,7 +628,7 @@ namespace lsp
                 frame_t *df         = &vFrames[src_frm & (nFrameCap - 1)];
                 frame_t sf          = src->vFrames[src_frm & (src->nFrameCap - 1)];
 
-                df->id              = src_frm;
+                atomic_store(&df->id, src_frm);
                 df->length          = lsp_min(sf.length, nBufMax);
                 df->tail            = df->length;
 
@@ -678,7 +680,7 @@ namespace lsp
                     if (fsize < 0)
                         fsize              += src->nBufCap;
 
-                    df->id          = dst_frm;
+                    atomic_store(&df->id, dst_frm);
                     df->head        = pf->tail;
                     df->tail        = df->head;
                     df->length      = fsize;
@@ -718,7 +720,7 @@ namespace lsp
             }
 
             // Update current frame
-            nFrameId    = src_frm;
+            atomic_store(&nFrameId, src_frm);
 
             return true;
         }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/EvaluatedPort.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/EvaluatedPort.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/EvaluatedPort.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/EvaluatedPort.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -29,7 +29,7 @@ namespace lsp
     {
         static const meta::port_t fake_metadata =
         {
-            "", "",
+            "", "", "",
             meta::U_NONE, meta::R_CONTROL, meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
             0.0f, 0.0f, 0.0f, 0.0f,
             NULL, NULL, NULL
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/IPresetListener.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/IPresetListener.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/IPresetListener.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/IPresetListener.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 30 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/ui.h>
+
+namespace lsp
+{
+    namespace ui
+    {
+        IPresetListener::IPresetListener()
+        {
+        }
+
+        IPresetListener::~IPresetListener()
+        {
+        }
+
+        void IPresetListener::preset_activated(const preset_t *preset)
+        {
+        }
+
+        void IPresetListener::preset_deactivated(const preset_t *preset)
+        {
+        }
+
+        void IPresetListener::presets_updated()
+        {
+        }
+
+    } /* namespace ui */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/IPresetManager.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/IPresetManager.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/IPresetManager.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/IPresetManager.cpp	2025-08-26 18:15:48.105960781 +0000
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 30 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/ui.h>
+
+namespace lsp
+{
+    namespace ui
+    {
+        IPresetManager::IPresetManager()
+        {
+        }
+
+        IPresetManager::~IPresetManager()
+        {
+        }
+
+        void IPresetManager::mark_active_preset_dirty()
+        {
+        }
+
+    } /* namespace ui */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/IWrapper.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/IWrapper.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/IWrapper.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/IWrapper.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -20,17 +20,23 @@
  */
 
 #include <lsp-plug.in/plug-fw/ui.h>
+#include <lsp-plug.in/plug-fw/core/config.h>
+#include <lsp-plug.in/plug-fw/core/presets.h>
+#include <lsp-plug.in/plug-fw/ctl.h>
 #include <lsp-plug.in/plug-fw/meta/ports.h>
 #include <lsp-plug.in/plug-fw/meta/func.h>
-#include <lsp-plug.in/plug-fw/ctl.h>
-#include <lsp-plug.in/plug-fw/core/config.h>
+#include <lsp-plug.in/io/Dir.h>
 #include <lsp-plug.in/io/InFileStream.h>
 #include <lsp-plug.in/io/InSequence.h>
 #include <lsp-plug.in/io/OutFileStream.h>
 #include <lsp-plug.in/io/OutSequence.h>
+#include <lsp-plug.in/io/Path.h>
 #include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/common/new.h>
 #include <lsp-plug.in/dsp-units/units.h>
 #include <lsp-plug.in/fmt/config/Serializer.h>
+#include <lsp-plug.in/fmt/json/dom.h>
+#include <lsp-plug.in/fmt/json/Serializer.h>
 #include <lsp-plug.in/runtime/system.h>
 
 #include <private/ui/xml/Handler.h>
@@ -58,43 +64,44 @@ namespace lsp
         {
             PATH(UI_LAST_VERSION_PORT_ID, "Last version of the product installed"),
             PATH(UI_DLG_SAMPLE_PATH_ID, "Dialog path for selecting sample files"),
-            INT_CONTROL_RANGE(UI_DLG_SAMPLE_FTYPE_ID, "Dialog file type for selecting sample files", U_NONE, 0, 100, 0, 1),
+            INT_CONTROL_ALL(UI_DLG_SAMPLE_FTYPE_ID, "Dialog file type for selecting sample files", NULL, U_NONE, 0, 100, 0, 1),
             PATH(UI_DLG_IR_PATH_ID, "Dialog path for selecting impulse response files"),
-            INT_CONTROL_RANGE(UI_DLG_IR_FTYPE_ID, "Dialog file type for selecting impulse response files", U_NONE, 0, 100, 0, 1),
+            INT_CONTROL_ALL(UI_DLG_IR_FTYPE_ID, "Dialog file type for selecting impulse response files", NULL, U_NONE, 0, 100, 0, 1),
             PATH(UI_DLG_CONFIG_PATH_ID, "Dialog path for saving/loading configuration files"),
-            INT_CONTROL_RANGE(UI_DLG_CONFIG_FTYPE_ID, "Dialog file type for saving/loading configuration files", U_NONE, 0, 100, 0, 1),
+            INT_CONTROL_ALL(UI_DLG_CONFIG_FTYPE_ID, "Dialog file type for saving/loading configuration files", NULL, U_NONE, 0, 100, 0, 1),
             PATH(UI_DLG_REW_PATH_ID, "Dialog path for importing REW settings files"),
-            INT_CONTROL_RANGE(UI_DLG_REW_FTYPE_ID, "Dialog file type for importing REW settings files", U_NONE, 0, 100, 0, 1),
+            INT_CONTROL_ALL(UI_DLG_REW_FTYPE_ID, "Dialog file type for importing REW settings files", NULL, U_NONE, 0, 100, 0, 1),
             PATH(UI_DLG_HYDROGEN_PATH_ID, "Dialog path for importing Hydrogen drumkit files"),
-            INT_CONTROL_RANGE(UI_DLG_HYDROGEN_FTYPE_ID, "Dialog file type for importing Hydrogen drumkit files", U_NONE, 0, 100, 0, 1),
+            INT_CONTROL_ALL(UI_DLG_HYDROGEN_FTYPE_ID, "Dialog file type for importing Hydrogen drumkit files", NULL, U_NONE, 0, 100, 0, 1),
             PATH(UI_DLG_LSPC_BUNDLE_PATH_ID, "Dialog path for exporting/importing LSPC bundles"),
-            INT_CONTROL_RANGE(UI_DLG_LSPC_BUNDLE_FTYPE_ID, "Dialog file type for exporting/importing LSPC bundles", U_NONE, 0, 100, 0, 1),
+            INT_CONTROL_ALL(UI_DLG_LSPC_BUNDLE_FTYPE_ID, "Dialog file type for exporting/importing LSPC bundles", NULL, U_NONE, 0, 100, 0, 1),
             PATH(UI_DLG_SFZ_PATH_ID, "Dialog path for exporting/importing SFZ files"),
-            INT_CONTROL_RANGE(UI_DLG_SFZ_FTYPE_ID, "Dialog file type for exporting/importing SFZ files", U_NONE, 0, 100, 0, 1),
+            INT_CONTROL_ALL(UI_DLG_SFZ_FTYPE_ID, "Dialog file type for exporting/importing SFZ files", NULL, U_NONE, 0, 100, 0, 1),
             PATH(UI_DLG_MODEL3D_PATH_ID, "Dialog for saving/loading 3D model files"),
-            INT_CONTROL_RANGE(UI_DLG_MODEL3D_FTYPE_ID, "Dialog file type for saving/loading 3D model files", U_NONE, 0, 100, 0, 1),
+            INT_CONTROL_ALL(UI_DLG_MODEL3D_FTYPE_ID, "Dialog file type for saving/loading 3D model files", NULL, U_NONE, 0, 100, 0, 1),
             PATH(UI_DLG_DEFAULT_PATH_ID, "Dialog default path for other files"),
-            INT_CONTROL_RANGE(UI_DLG_DEFAULT_FTYPE_ID, "Dialog default file type for other files", U_NONE, 0, 100, 0, 1),
+            INT_CONTROL_ALL(UI_DLG_DEFAULT_FTYPE_ID, "Dialog default file type for other files", NULL, U_NONE, 0, 100, 0, 1),
             PATH(UI_R3D_BACKEND_PORT_ID, "Identifier of selected backend for 3D rendering"),
             PATH(UI_LANGUAGE_PORT_ID, "Selected language identifier for the UI interface"),
-            SWITCH(UI_REL_PATHS_PORT_ID, "Use relative paths when exporting configuration file", 0.0f),
-            KNOB(UI_SCALING_PORT_ID, "Manual UI scaling factor", U_PERCENT, 25.0f, 400.0f, 100.0f, 1.0f),
-            SWITCH(UI_SCALING_HOST_PORT_ID, "Prefer host-reported UI scale factor", 1.0f),
-            KNOB(UI_FONT_SCALING_PORT_ID, "Manual UI font scaling factor", U_PERCENT, 50.0f, 400.0f, 100.0f, 1.0f),
-            KNOB(UI_BUNDLE_SCALING_PORT_ID, "Manual Bundle UI scaling factor", U_PERCENT, 0.0f, 400.0f, 0.0f, 1.0f),
+            SWITCH(UI_REL_PATHS_PORT_ID, "Use relative paths when exporting configuration file", NULL, 0.0f),
+            CONTROL_ALL(UI_SCALING_PORT_ID, "Manual UI scaling factor", NULL, U_PERCENT, 25.0f, 400.0f, 100.0f, 1.0f),
+            SWITCH(UI_SCALING_HOST_PORT_ID, "Prefer host-reported UI scale factor", NULL, 1.0f),
+            CONTROL_ALL(UI_FONT_SCALING_PORT_ID, "Manual UI font scaling factor", NULL, U_PERCENT, 50.0f, 400.0f, 100.0f, 1.0f),
+            CONTROL_ALL(UI_BUNDLE_SCALING_PORT_ID, "Manual Bundle UI scaling factor", NULL, U_PERCENT, 0.0f, 400.0f, 0.0f, 1.0f),
             PATH(UI_VISUAL_SCHEMA_FILE_ID, "Current visual schema file used by the UI"),
-            SWITCH(UI_PREVIEW_AUTO_PLAY_ID, "Enable automatic playback of the audio file in the file preview part of the file open dialog", 0.0f),
-            SWITCH(UI_ENABLE_KNOB_SCALE_ACTIONS_ID, "Enable knob scale mouse actions", 1.0f),
+            SWITCH(UI_PREVIEW_AUTO_PLAY_ID, "Enable automatic playback of the audio file in the file preview part of the file open dialog", NULL, 0.0f),
+            SWITCH(UI_ENABLE_KNOB_SCALE_ACTIONS_ID, "Enable setting knob value by clicking on its scale feature", NULL, 1.0f),
             PATH(UI_USER_HYDROGEN_KIT_PATH_ID, "User Hydrogen kits path"),
             PATH(UI_OVERRIDE_HYDROGEN_KIT_PATH_ID, "Override Hydrogen kits path"),
-            SWITCH(UI_OVERRIDE_HYDROGEN_KITS_ID, "Override Hydrogen kits", 1.0f),
-            SWITCH(UI_INVERT_VSCROLL_ID, "Invert global mouse vertical scroll behaviour", 0.0f),
-            SWITCH(UI_GRAPH_DOT_INVERT_VSCROLL_ID, "Invert mouse vertical scroll behaviour for graph dot widget", 0.0f),
-            SWITCH(UI_ZOOMABLE_SPECTRUM_GRAPH_ID, "Enables the automatic scaling mode of the frequency graph", 1.0f),
-            COMBO(UI_FILTER_POINT_THICK_ID, "Thickness of the filter point", 1.0f, filter_point_thickness_modes),
+            SWITCH(UI_OVERRIDE_HYDROGEN_KITS_ID, "Override Hydrogen kits", NULL, 1.0f),
+            SWITCH(UI_INVERT_VSCROLL_ID, "Invert global mouse vertical scroll behaviour", NULL, 0.0f),
+            SWITCH(UI_GRAPH_DOT_INVERT_VSCROLL_ID, "Invert mouse vertical scroll behaviour for graph dot widget", NULL, 0.0f),
+            SWITCH(UI_ZOOMABLE_SPECTRUM_GRAPH_ID, "Zoom slider affects the frequency graph", NULL, 1.0f),
+            COMBO(UI_FILTER_POINT_THICK_ID, "Thickness of the filter point", NULL, 1.0f, filter_point_thickness_modes),
             PATH(UI_DOCUMENTATION_PATH_ID, "Path to the local documentation installation"),
-            SWITCH(UI_FILELIST_NAVIGAION_AUTOLOAD_ID, "Automatically load files when navigating over file list", 0.0f),
-            SWITCH(UI_TAKE_INST_NAME_FROM_FILE_ID, "Take instrument name from the name of loaded file", 0.0f),
+            SWITCH(UI_FILELIST_NAVIGATION_AUTOLOAD_ID, "Automatically load files when navigating over file list", NULL, 1.0f),
+            SWITCH(UI_FILELIST_NAVIGATION_AUTOPLAY_ID, "Enable automatic playback of the audio file in the file navigator when selected", NULL, 0.0f),
+            SWITCH(UI_TAKE_INST_NAME_FROM_FILE_ID, "Take instrument name from the name of loaded file", NULL, 0.0f),
             PORTS_END
         };
 
@@ -115,6 +122,63 @@ namespace lsp
 
     namespace ui
     {
+        static constexpr ssize_t INVALID_PRESET_INDEX       = -1;
+
+        static void mark_presets_as_favourite(lltl::darray<preset_t> *list, json::Array array, bool user)
+        {
+            const uint32_t mask = (user) ? PRESET_FLAG_USER : PRESET_FLAG_NONE;
+            LSPString prest_name;
+
+            for (size_t i=0, n=array.size(); i<n; ++i)
+            {
+                json::String node = array.get(i);
+                if (node.get(&prest_name) != STATUS_OK)
+                    continue;
+
+                // Set the favourite flag for the associated preset
+                for (size_t j=0, m=list->size(); j<m; ++j)
+                {
+                    preset_t *preset    = list->uget(j);
+                    if (preset == NULL)
+                        continue;
+                    if ((preset->flags & PRESET_FLAG_USER) != mask)
+                        continue;
+
+                    if (preset->name.equals_nocase(&prest_name))
+                    {
+                        preset->flags      |= PRESET_FLAG_FAVOURITE;
+                        break;
+                    }
+                }
+            }
+        }
+
+        static status_t save_favourites_list(json::Serializer & json, const char *key, lltl::darray<preset_t> *list, size_t flags)
+        {
+            flags |= ui::PRESET_FLAG_FAVOURITE;
+
+            status_t res = json.write_property(key);
+            if (res != STATUS_OK)
+                return res;
+            if ((res = json.start_array()) != STATUS_OK)
+                return res;
+            {
+                for (size_t i=0, n=list->size(); i<n; ++i)
+                {
+                    const preset_t *preset = list->uget(i);
+                    if (preset == NULL)
+                        continue;
+                    if ((preset->flags & (ui::PRESET_FLAG_FAVOURITE | ui::PRESET_FLAG_USER)) != flags)
+                        continue;
+
+                    if ((res = json.write_string(&preset->name)) != STATUS_OK)
+                        return res;
+                }
+            }
+
+            return json.end_array();
+        }
+
         IWrapper::IWrapper(Module *ui, resource::ILoader *loader)
         {
             pDisplay        = NULL;
@@ -125,6 +189,8 @@ namespace lsp
             nFlags          = 0;
             nPlayPosition   = 0;
             nPlayLength     = 0;
+            nActivePreset   = INVALID_PRESET_INDEX;
+            enPresetTab     = PRESET_TAB_ALL;
 
             plug::position_t::init(&sPosition);
         }
@@ -142,6 +208,10 @@ namespace lsp
             // Flush list of playback listeners
             vPlayListeners.flush();
 
+            // Flush list of preset listeners
+            vPresetListeners.flush();
+            destroy_presets(&vPresets);
+
             // Flush list of 'Schema reloaded' handlers
             vSchemaListeners.flush();
 
@@ -312,10 +382,9 @@ namespace lsp
 
             // Load the global configuration file
             io::Path gconfig;
-            if ((res = system::get_user_config_path(&gconfig)) == STATUS_OK)
+            if ((res = get_user_config_path(&gconfig)) == STATUS_OK)
             {
                 lsp_trace("User config path: %s", gconfig.as_utf8());
-                res = gconfig.append_child("lsp-plugins");
                 if (res == STATUS_OK)
                     res = gconfig.append_child("lsp-plugins.cfg");
                 if (res == STATUS_OK)
@@ -327,6 +396,48 @@ namespace lsp
             return STATUS_OK;
         }
 
+        status_t IWrapper::get_user_config_path(io::Path *path)
+        {
+            io::Path tmp;
+            status_t res    = system::get_user_config_path(&tmp);
+            if (res == STATUS_OK)
+                res             = tmp.append_child("lsp-plugins");
+            if (res == STATUS_OK)
+                tmp.swap(path);
+
+            return res;
+        }
+
+        status_t IWrapper::get_user_presets_path(io::Path *path)
+        {
+            io::Path tmp;
+            status_t res    = get_user_config_path(&tmp);
+            if (res == STATUS_OK)
+                res             = tmp.append_child("presets");
+            if (res == STATUS_OK)
+                tmp.swap(path);
+
+            return res;
+        }
+
+        status_t IWrapper::get_plugin_presets_path(io::Path *path)
+        {
+            const meta::plugin_t *meta = (pUI != NULL) ? pUI->metadata() : NULL;
+            if (meta == NULL)
+                return STATUS_BAD_STATE;
+
+            // File name format: <config>/presets/<plugin-uid>/<preset-name>.[preset|patch]
+            io::Path tmp;
+            status_t res    = get_user_presets_path(&tmp);
+            if (res == STATUS_OK)
+                res             = tmp.append_child(meta->uid);
+
+            if (res == STATUS_OK)
+                tmp.swap(path);
+
+            return res;
+        }
+
         void IWrapper::notify_all()
         {
             for (size_t i=0, n=vPorts.size(); i<n; ++i)
@@ -668,9 +779,7 @@ namespace lsp
             {
                 // Save global configuration
                 io::Path path;
-                status_t res = system::get_user_config_path(&path);
-                if (res == STATUS_OK)
-                    res = path.append_child("lsp-plugins");
+                status_t res = get_user_config_path(&path);
                 if (res == STATUS_OK)
                     res = path.mkdir(true);
                 if (res == STATUS_OK)
@@ -683,6 +792,55 @@ namespace lsp
                 // Reset flags
                 nFlags     &= ~F_CONFIG_DIRTY;
             }
+
+            if (nFlags & F_FAVOURITES_DIRTY)
+            {
+                // Save favourites list
+                io::Path path;
+                status_t res = get_plugin_presets_path(&path);
+                if (res == STATUS_OK)
+                    res = path.mkdir(true);
+                if (res == STATUS_OK)
+                    res = path.append_child("favourites.json");
+                if (res == STATUS_OK)
+                    res = save_favourites(&path);
+
+                lsp_trace("Save favourites to %s: result=%d", path.as_native(), int(res));
+
+                // Reset flags
+                nFlags     &= ~F_FAVOURITES_DIRTY;
+            }
+
+            if (nFlags & F_PRESET_SYNC)
+            {
+                lsp_trace("Synchronizing preset state with backend");
+                // Send new state to DSP
+                core::preset_state_t state;
+                init_preset_state(&state);
+
+                state.flags     = core::PRESET_FLAG_NONE;
+                state.tab       = enPresetTab;
+
+                const preset_t *preset  = active_preset();
+                const char *name        = (preset != NULL) ? preset->name.get_utf8() : NULL;
+                if (name != NULL)
+                {
+                    const size_t bytes      = lsp_min(strlen(name), core::PRESET_NAME_BYTES - 1);
+                    memcpy(state.name, name, bytes);
+                    state.name[bytes]       = '\0';
+
+                    if (preset->flags & ui::PRESET_FLAG_USER)
+                        state.flags            |= core::PRESET_FLAG_USER;
+                    if (nFlags & F_PRESET_DIRTY)
+                        state.flags            |= core::PRESET_FLAG_DIRTY;
+                }
+                else
+                    state.name[0]           = '\0';
+
+                // Commit preset state
+                send_preset_state(&state);
+                nFlags     &= ~F_PRESET_SYNC;
+            }
         }
 
         void IWrapper::quit_main_loop()
@@ -731,10 +889,10 @@ namespace lsp
                 return res;
 
             // Create window controller
-            pWindow     = new ctl::PluginWindow(this, wWindow);
-            if (pWindow == NULL)
+            ctl::PluginWindow *wnd  = new ctl::PluginWindow(this, wWindow);
+            if (wnd == NULL)
                 return STATUS_NO_MEM;
-            if ((res = pWindow->init()) != STATUS_OK)
+            if ((res = wnd->init()) != STATUS_OK)
                 return res;
 
             // Form the location of the resource
@@ -743,14 +901,34 @@ namespace lsp
                 return STATUS_NO_MEM;
 
             // Create context
-            UIContext ctx(this, pWindow->controllers(), pWindow->widgets());
+            UIContext ctx(this, wnd->controllers(), wnd->widgets());
             if ((res = ctx.init()) != STATUS_OK)
                 return res;
 
             // Parse the XML document
-            xml::RootNode root(&ctx, "plugin", pWindow);
+            xml::RootNode root(&ctx, "plugin", wnd);
             xml::Handler handler(resources());
-            return handler.parse_resource(&xpath, &root);
+            if ((res = handler.parse_resource(&xpath, &root)) != STATUS_OK)
+                return res;
+
+            // Append overlays to the window
+            lltl::parray<ctl::Overlay> *overlays = ctx.overlays();
+            for (size_t i=0, n=overlays->size(); i<n; ++i)
+            {
+                ctl::Overlay *ov = overlays->uget(i);
+                if (ov == NULL)
+                    continue;
+
+                if ((res = wnd->add(&ctx, ov)) != STATUS_OK)
+                    return res;
+            }
+
+            // Call post-initialization
+            if ((res = wnd->post_init()) != STATUS_OK)
+                return res;
+
+            pWindow     = wnd;
+            return STATUS_OK;
         }
 
         status_t IWrapper::export_settings(const char *file, bool relative)
@@ -1526,7 +1704,7 @@ namespace lsp
             const meta::bundle_t *bundle = (meta != NULL) ? meta->bundle : NULL;
             const char *bundle_uid = (bundle != NULL) ? bundle->uid : NULL;
 
-            if (bundle->uid != NULL)
+            if (bundle_uid != NULL)
             {
                 scaling_key.set_utf8(bundle_uid);
                 scaling_key.replace_all('-', '_');
@@ -1673,7 +1851,7 @@ namespace lsp
             // Obtain actual versions of all modules
             lltl::pphash<LSPString, config::param_t> parameters;
             status_t res = read_parameters(file, &parameters);
-            if (res != STATUS_OK)
+            if ((res != STATUS_OK) && (res != STATUS_NOT_FOUND))
                 return res;
             lsp_finally { drop_parameters(&parameters); };
 
@@ -2098,6 +2276,12 @@ namespace lsp
                 p->notify_all(ui::PORT_NONE);
             }
 
+            // Update preset settings
+            nActivePreset       = -1;
+            nFlags              = (nFlags & ~(F_PRESET_DIRTY)) | F_PRESET_SYNC;
+            notify_presets_updated();
+
+            // Notify UI
             if (pUI != NULL)
                 pUI->reset_settings();
 
@@ -2173,6 +2357,634 @@ namespace lsp
             return NULL;
         }
 
+        /**
+         * Get name of graphics backend
+         * @return name of graphics backend
+         */
+        const char *IWrapper::graphics_backend() const
+        {
+            const ws::surface_type_t stype = (wWindow != NULL) ? wWindow->surface_type() : ws::ST_UNKNOWN;
+
+            switch (stype)
+            {
+                case ws::ST_UNKNOWN:
+                case ws::ST_IMAGE:
+                case ws::ST_XLIB:
+                case ws::ST_SIMILAR:
+                    return "Cairo";
+
+                case ws::ST_DDRAW:
+                    return "Direct2D";
+
+                case ws::ST_OPENGL:
+                    return "OpenGL";
+
+                default:
+                    break;
+            }
+
+            return "Unknown";
+        }
+
+        status_t IWrapper::add_preset_listener(IPresetListener *listener)
+        {
+            if (listener == NULL)
+                return STATUS_BAD_ARGUMENTS;
+
+            if (vPresetListeners.contains(listener))
+                return STATUS_ALREADY_EXISTS;
+
+            const bool first_listener = vPresetListeners.is_empty();
+            if (!vPresetListeners.add(listener))
+                return STATUS_NO_MEM;
+
+            if (first_listener)
+                update_preset_list();
+
+            // Notify listener about containing presets
+            listener->presets_updated();
+
+            return STATUS_OK;
+        }
+
+        status_t IWrapper::remove_preset_listener(IPresetListener *listener)
+        {
+            if (listener == NULL)
+                return STATUS_BAD_ARGUMENTS;
+
+            return (vPresetListeners.qpremove(listener)) ? STATUS_OK : STATUS_NOT_FOUND;
+        }
+
+        status_t IWrapper::select_active_preset(const preset_t *preset)
+        {
+            const ssize_t preset_id = vPresets.index_of(preset);
+            if ((preset_id < 0) && (nActivePreset < 0))
+            {
+                nFlags              = (nFlags & (~F_PRESET_DIRTY));
+                return STATUS_OK;
+            }
+
+            // Change current preset
+            preset_t *pold  = (nActivePreset >= 0) ? vPresets.get(nActivePreset) : NULL;
+            preset_t *pnew  = const_cast<ui::preset_t *>(preset);
+            if (pold == pnew)
+                return STATUS_OK;
+
+            // Import preset settings
+            status_t res        = STATUS_OK;
+            if (preset != NULL)
+            {
+                const size_t flags  = (preset->flags & ui::PRESET_FLAG_PATCH) ? IMPORT_FLAG_PATCH : IMPORT_FLAG_PRESET;
+                res                 = import_settings(&pnew->path, flags);
+            }
+
+            nActivePreset       = (pnew != NULL) ? preset_id : INVALID_PRESET_INDEX;
+            nFlags              = (nFlags & (~F_PRESET_DIRTY)) | F_PRESET_SYNC;
+
+            if (pold != NULL)
+                notify_preset_deactivated(pold);
+            if (pnew != NULL)
+                notify_preset_activated(pnew);
+            return res;
+        }
+
+        const preset_t *IWrapper::active_preset() const
+        {
+            return (nActivePreset >= 0) ? vPresets.get(nActivePreset) : NULL;
+        }
+
+        const preset_t *IWrapper::all_presets() const
+        {
+            return vPresets.array();
+        }
+
+        size_t IWrapper::num_presets() const
+        {
+            return vPresets.size();
+        }
+
+        void IWrapper::destroy_presets(lltl::darray<preset_t> *list)
+        {
+            for (size_t i=0, n=list->size(); i<n; ++i)
+            {
+                preset_t *preset = list->uget(i);
+                if (preset != NULL)
+                {
+                    preset->name.~LSPString();
+                    preset->path.~LSPString();
+                }
+            }
+            list->flush();
+        }
+
+        preset_t *IWrapper::add_preset(lltl::darray<preset_t> *list)
+        {
+            preset_t *preset    = list->add();
+            if (preset == NULL)
+                return NULL;
+
+            new (&preset->name, inplace_new_tag_t()) LSPString();
+            new (&preset->path, inplace_new_tag_t()) LSPString();
+            preset->flags       = 0;
+
+            return preset;
+        }
+
+        void IWrapper::scan_factory_presets(lltl::darray<preset_t> *list)
+        {
+            const meta::plugin_t *meta = (pUI != NULL) ? pUI->metadata() : NULL;
+            if ((meta == NULL) || (meta->ui_presets == NULL))
+                return;
+
+            lltl::darray<resource::resource_t> presets;
+            if (core::scan_presets(&presets, resources(), meta->ui_presets) != STATUS_OK)
+                return;
+
+            io::Path path;
+            LSPString tmp;
+            preset_t tmp_preset;
+
+            for (size_t i=0, n=presets.size(); i<n; ++i)
+            {
+                // Enumerate next backend information
+                const resource::resource_t *preset = presets.uget(i);
+                if (preset == NULL)
+                    continue;
+
+                if (path.set(preset->name) != STATUS_OK)
+                    continue;
+
+                // Get name of the preset/patch without an extension
+                if (path.get_last_noext(&tmp_preset.name) != STATUS_OK)
+                    continue;
+                if (tmp_preset.path.fmt_utf8(LSP_BUILTIN_PREFIX "presets/%s/%s", meta->ui_presets, preset->name) <= 0)
+                    continue;
+                if (path.get_ext(&tmp) != STATUS_OK)
+                    continue;
+
+                // Fill flags
+                tmp_preset.flags    = PRESET_FLAG_NONE;
+                if (tmp.equals_ascii_nocase("patch"))
+                    tmp_preset.flags   |= PRESET_FLAG_PATCH;
+                else if (!tmp.equals_ascii_nocase("preset"))
+                    continue;
+
+                // Create preset item
+                preset_t *item      = add_preset(list);
+                if (item == NULL)
+                    continue;
+
+                item->name.swap(tmp_preset.name);
+                item->path.swap(tmp_preset.path);
+                item->flags     = tmp_preset.flags;
+            }
+        }
+
+        void IWrapper::scan_user_presets(lltl::darray<preset_t> *list)
+        {
+            // File name format: <config>/presets/<plugin-uid>/<preset-name>.[preset|patch]
+            io::Path path;
+            if (get_plugin_presets_path(&path) != STATUS_OK)
+                return;
+
+            io::Dir dir;
+            if (dir.open(&path) != STATUS_OK)
+                return;
+            lsp_finally { dir.close(); };
+
+            io::Path preset;
+            io::fattr_t fattr;
+            LSPString tmp;
+            preset_t tmp_preset;
+
+            while (dir.reads(&preset, &fattr, true) == STATUS_OK)
+            {
+                // We process only regular files
+                if (fattr.type != io::fattr_t::FT_REGULAR)
+                    continue;
+
+                // Get name of the preset/patch without an extension
+                if (preset.get_last_noext(&tmp_preset.name) != STATUS_OK)
+                    continue;
+                if (preset.get(&tmp_preset.path) != STATUS_OK)
+                    continue;
+                if (preset.get_ext(&tmp) != STATUS_OK)
+                    continue;
+
+                // Fill flags
+                tmp_preset.flags    = PRESET_FLAG_USER;
+                if (tmp.equals_ascii_nocase("patch"))
+                    tmp_preset.flags   |= PRESET_FLAG_PATCH;
+                else if (!tmp.equals_ascii_nocase("preset"))
+                    continue;
+
+                // Create preset item
+                preset_t *item      = add_preset(list);
+                if (item == NULL)
+                    continue;
+
+                item->name.swap(tmp_preset.name);
+                item->path.swap(tmp_preset.path);
+                item->flags     = tmp_preset.flags;
+            }
+        }
+
+        void IWrapper::scan_favourite_presets(lltl::darray<preset_t> *list)
+        {
+            const meta::plugin_t *meta = (pUI != NULL) ? pUI->metadata() : NULL;
+            if ((meta == NULL) || (meta->ui_presets == NULL))
+                return;
+
+            // File name format: <config>/presets/<plugin-uid>/favourites.json
+            io::Path path;
+            if (get_plugin_presets_path(&path) != STATUS_OK)
+                return;
+            if (path.append_child("favourites.json") != STATUS_OK)
+                return;
+
+            // Load configuration file
+            json::Object config;
+            if (json::dom_load(&path, &config, json::JSON_VERSION5) != STATUS_OK)
+                return;
+            if (!config.valid())
+                return;
+
+            json::Array factory = config.get("factory");
+            if (factory.valid())
+                mark_presets_as_favourite(list, factory, false);
+
+            json::Array user = config.get("user");
+            if (user.valid())
+                mark_presets_as_favourite(list, user, true);
+        }
+
+        status_t IWrapper::save_favourites(const io::Path *path)
+        {
+            json::Serializer json;
+            json::serial_flags_t flags;
+
+            flags.version       = json::JSON_VERSION5;
+            flags.identifiers   = false;
+            flags.ident         = ' ';
+            flags.padding       = 4;
+            flags.separator     = true;
+            flags.multiline     = true;
+
+            status_t res = json.open(path, &flags);
+            if (res != STATUS_OK)
+                return res;
+            lsp_finally {
+                json.close();
+            };
+
+            if ((res = json.start_object()) != STATUS_OK)
+                return res;
+            {
+                if ((res = save_favourites_list(json, "factory", &vPresets, ui::PRESET_FLAG_NONE)) != STATUS_OK)
+                    return res;
+                if ((res = save_favourites_list(json, "user", &vPresets, ui::PRESET_FLAG_USER)) != STATUS_OK)
+                    return res;
+            }
+            if ((res = json.end_object()) != STATUS_OK)
+                return res;
+
+            return STATUS_OK;
+        }
+
+        void IWrapper::select_presets(lltl::darray<preset_t> *list, const preset_t *active)
+        {
+            list->qsort(preset_compare_function);
+            nActivePreset       = INVALID_PRESET_INDEX;
+
+            for (size_t i=0, n=list->size(); i<n; ++i)
+            {
+                preset_t *preset    = list->uget(i);
+                if ((active != NULL) && (preset_compare_function(preset, active) == 0))
+                    nActivePreset       = i;
+            }
+        }
+
+        void IWrapper::update_preset_list()
+        {
+            const preset_t *active = active_preset();
+
+            lltl::darray<preset_t> presets;
+            lsp_finally { destroy_presets(&presets); };
+
+            scan_factory_presets(&presets);
+            scan_user_presets(&presets);
+            scan_favourite_presets(&presets);
+            select_presets(&presets, active);
+
+            presets.swap(&vPresets);
+        }
+
+        void IWrapper::scan_presets()
+        {
+            // First, update the list of presets
+            update_preset_list();
+            notify_presets_updated();
+        }
+
+        void IWrapper::notify_presets_updated()
+        {
+            // Notify listeners about the change of whole list of presets
+            lltl::parray<IPresetListener> listeners;
+            if (listeners.add(vPresetListeners))
+            {
+                for (size_t i=0, n=listeners.size(); i<n; ++i)
+                {
+                    IPresetListener *listener = listeners.uget(i);
+                    if (listener != NULL)
+                        listener->presets_updated();
+                }
+            }
+        }
+
+        void IWrapper::notify_preset_deactivated(const ui::preset_t *preset)
+        {
+            // Notify listeners about the activation of the preset
+            lltl::parray<IPresetListener> listeners;
+            if (listeners.add(vPresetListeners))
+            {
+                for (size_t i=0, n=listeners.size(); i<n; ++i)
+                {
+                    IPresetListener *listener = listeners.uget(i);
+                    if (listener != NULL)
+                        listener->preset_deactivated(preset);
+                }
+            }
+        }
+
+        void IWrapper::notify_preset_activated(const ui::preset_t *preset)
+        {
+            // Notify listeners about the activation of the preset
+            lltl::parray<IPresetListener> listeners;
+            if (listeners.add(vPresetListeners))
+            {
+                for (size_t i=0, n=listeners.size(); i<n; ++i)
+                {
+                    IPresetListener *listener = listeners.uget(i);
+                    if (listener != NULL)
+                        listener->preset_activated(preset);
+                }
+            }
+        }
+
+        void IWrapper::mark_active_preset_dirty()
+        {
+            // Set flag only when there is an active preset
+            const preset_t *preset = active_preset();
+            if ((preset != NULL) && (!(nFlags & F_PRESET_DIRTY)))
+            {
+                nFlags         |= F_PRESET_DIRTY | F_PRESET_SYNC;
+                notify_presets_updated();
+            }
+        }
+
+        bool IWrapper::active_preset_dirty() const
+        {
+            if (!(nFlags & F_PRESET_DIRTY))
+                return false;
+            return active_preset() != NULL;
+        }
+
+        preset_tab_t IWrapper::preset_tab() const
+        {
+            return enPresetTab;
+        }
+
+        void IWrapper::set_preset_tab(preset_tab_t tab)
+        {
+            enPresetTab         = tab;
+            nFlags             |= F_PRESET_SYNC;
+        }
+
+        status_t IWrapper::mark_preset_favourite(const preset_t *src_preset, bool favourite)
+        {
+            if (!vPresets.contains(src_preset))
+                return STATUS_NOT_FOUND;
+            preset_t *preset = const_cast<preset_t *>(src_preset);
+            if (preset == NULL)
+                return STATUS_NOT_FOUND;
+
+            const uint32_t new_flags    = lsp_setflag(preset->flags, PRESET_FLAG_FAVOURITE, favourite);
+            if (new_flags == preset->flags)
+                return STATUS_OK;
+
+            preset->flags   = new_flags;
+            nFlags         |= F_FAVOURITES_DIRTY; // Favourites list needs to be synchronized
+
+            notify_presets_updated();
+
+            return STATUS_OK;
+        }
+
+        status_t IWrapper::remove_preset(const preset_t *src_preset)
+        {
+            ssize_t preset_id = vPresets.index_of(src_preset);
+            if (preset_id < 0)
+                return STATUS_NOT_FOUND;
+
+            preset_t *preset = const_cast<preset_t *>(src_preset);
+            if (preset == NULL)
+                return STATUS_NOT_FOUND;
+
+            if (!(preset->flags & PRESET_FLAG_USER))
+                return STATUS_INVALID_VALUE;
+
+            // Delete original file
+            io::Path path;
+            status_t res    = path.set(&preset->path);
+            if (res == STATUS_OK)
+                res         = path.remove();
+            if (res != STATUS_OK)
+                return res;
+
+            // Remove preset from list
+            const uint32_t flags = preset->flags;
+            if (!vPresets.remove(preset_id))
+                return STATUS_NO_MEM;
+
+            // Update related state
+            if (flags & PRESET_FLAG_FAVOURITE)
+                nFlags             |= F_FAVOURITES_DIRTY; // Favourites list needs to be synchronized
+
+            if (nActivePreset == ssize_t(preset_id))
+            {
+                nActivePreset       = INVALID_PRESET_INDEX;
+                nFlags             |= F_PRESET_SYNC;
+            }
+
+            // Notify listeners
+            notify_presets_updated();
+            return STATUS_OK;
+        }
+
+        status_t IWrapper::allocate_temp_file(io::Path *dst, const io::Path *src)
+        {
+            const char *spath = src->as_utf8();
+            for (int i=0; ; ++i)
+            {
+                if (dst->fmt("%s.%d", spath, i) <= 0)
+                    return STATUS_NO_MEM;
+                if (!dst->exists())
+                    break;
+            }
+
+            return STATUS_OK;
+        }
+
+        preset_t *IWrapper::find_preset(const LSPString *name, bool user)
+        {
+            const bool mask = (user) ? ui::PRESET_FLAG_USER : ui::PRESET_FLAG_NONE;
+            for (size_t i=0, n=vPresets.size(); i<n; ++i)
+            {
+                preset_t *p = vPresets.uget(i);
+                if (p == NULL)
+                    continue;
+                if (((p->flags & ui::PRESET_FLAG_USER) == mask) && (p->name.equals_nocase(name)))
+                    return p;
+            }
+
+            return NULL;
+        }
+
+        status_t IWrapper::save_preset(const LSPString *name, size_t flags)
+        {
+            // Check preset name
+            if (!(flags & ui::PRESET_FLAG_USER))
+                return STATUS_INVALID_VALUE;
+
+            // Get location of presets
+            io::Path base;
+            status_t res = get_plugin_presets_path(&base);
+            if (res != STATUS_OK)
+                return res;
+
+            res = base.mkdir(true);
+            if ((res != STATUS_OK) && (res != STATUS_ALREADY_EXISTS))
+                return res;
+
+            // Find the previous preset
+            io::Path old_file, new_file, temp_file;
+
+            preset_t *preset = find_preset(name, true);
+            bool was_favourite = false;
+            if (preset != NULL)
+            {
+                if ((res = old_file.set(&preset->path)) != STATUS_OK)
+                    return res;
+                was_favourite   = preset->flags & ui::PRESET_FLAG_FAVOURITE;
+            }
+
+            // Create new preset item
+            if (new_file.fmt("%s/%s.preset", base.as_utf8(), name->get_utf8()) <= 0)
+                return STATUS_NO_MEM;
+            if (!old_file.is_empty())
+            {
+                res = allocate_temp_file(&temp_file, &new_file);
+                if (res != STATUS_OK)
+                    return res;
+            }
+
+            ui::preset_t create;
+            if (!create.name.set(name))
+                return STATUS_NO_MEM;
+            if ((res = new_file.get(&create.path)) != STATUS_OK)
+                return res;
+            create.flags        = (flags & ui::PRESET_FLAG_FAVOURITE) | ui::PRESET_FLAG_USER;
+
+            // Now we are ready to export configuration
+            if (!old_file.is_empty())
+            {
+                // Export settings
+                lsp_trace("Write preset to temporary file %s", temp_file.as_utf8());
+                if ((res = export_settings(&temp_file, true)) != STATUS_OK)
+                    return res;
+
+                // Replace previous file with new
+                lsp_trace("Remove old preset file %s", old_file.as_utf8());
+                if ((res = old_file.remove()) != STATUS_OK)
+                    return res;
+
+                lsp_trace("Rename temporary file %s to %s", temp_file.as_utf8(), new_file.as_utf8());
+                if ((res = temp_file.rename(&new_file)) != STATUS_OK)
+                    return res;
+            }
+            else
+            {
+                // Export settings
+                lsp_trace("Write preset to new file %s", new_file.as_utf8());
+                if ((res = export_settings(&new_file, true)) != STATUS_OK)
+                    return res;
+
+                // Allocate new record
+                const preset_t *base = vPresets.array();
+                preset = add_preset(&vPresets);
+                if (preset == NULL)
+                {
+                    // The internal data structure of vPresets may change address,
+                    // so we need to notify clients
+                    if (base != vPresets.array())
+                        notify_presets_updated();
+                    return STATUS_NO_MEM;
+                }
+            }
+
+            // Fill data structure
+            preset->flags   = create.flags;
+            preset->name.swap(create.name);
+            preset->path.swap(create.path);
+
+            const bool is_favourite = flags & ui::PRESET_FLAG_FAVOURITE;
+            if (was_favourite != is_favourite)
+                nFlags         |= F_FAVOURITES_DIRTY;       // Favourites list needs to be synchronized
+
+            // Sort list of presets
+            vPresets.qsort(preset_compare_function);
+            preset = find_preset(name, true);
+            if (preset == NULL)
+                return STATUS_UNKNOWN_ERR;
+
+            nActivePreset   = vPresets.index_of(preset);
+            nFlags          = (nFlags & (~F_PRESET_DIRTY)) | F_PRESET_SYNC;
+
+            // Notify listeners about presets changes
+            notify_presets_updated();
+
+            return STATUS_OK;
+        }
+
+        void IWrapper::send_preset_state(const core::preset_state_t *state)
+        {
+            // Implement for wrapper
+        }
+
+        void IWrapper::receive_preset_state(const core::preset_state_t *state)
+        {
+            LSPString name;
+            if (!name.set_utf8(state->name))
+                return;
+
+            size_t flags    = nFlags & ~(F_PRESET_DIRTY | F_PRESET_SYNC);
+            if (state->flags & core::PRESET_FLAG_DIRTY)
+                flags          |= F_PRESET_DIRTY;
+
+            const preset_t *preset  = (name.is_empty()) ? NULL : find_preset(&name, state->flags & core::PRESET_FLAG_USER);
+            const ssize_t active    = (preset != NULL) ? vPresets.index_of(preset) : INVALID_PRESET_INDEX;
+
+            if ((flags == nFlags) && (active == nActivePreset) && (state->tab == uint32_t(enPresetTab)))
+                return;
+
+            nFlags          = flags;
+            nActivePreset   = active;
+            enPresetTab     = preset_tab_t(lsp_min(state->tab, uint32_t(ui::PRESET_TAB_TOTAL - 1)));
+
+            // Notify listeners about presets changes
+            notify_presets_updated();
+        }
+
     } /* namespace ui */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/PortResolver.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/PortResolver.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/PortResolver.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/PortResolver.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 9 апр. 2021 г.
@@ -97,7 +97,7 @@ namespace lsp
             return STATUS_OK;
         }
 
-    } /* namespace java */
+    } /* namespace ui */
 } /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/UIContext.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/UIContext.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/UIContext.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/UIContext.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -38,6 +38,9 @@ namespace lsp
 
         UIContext::~UIContext()
         {
+            // Cleanup list of overlay widgets
+            vOverlays.flush();
+
             // Destroy the stack
             for (size_t i=0, n=vStack.size(); i<n; ++i)
             {
@@ -212,13 +215,13 @@ namespace lsp
             return res;
         }
 
-        ctl::Widget *UIContext::create_controller(const LSPString *name)
+        ctl::Controller *UIContext::create_controller(const LSPString *name)
         {
             if (name == NULL)
                 return NULL;
 
             // Instantiate the widget
-            ctl::Widget *c = NULL;
+            ctl::Controller *c = NULL;
 
             for (ctl::Factory *f = ctl::Factory::root(); f != NULL; f = f->next())
             {
@@ -246,7 +249,7 @@ namespace lsp
             return c;
         }
 
-        status_t UIContext::set_attributes(ctl::Widget *widget, const LSPString * const *atts)
+        status_t UIContext::set_attributes(ctl::DOMController *ctl, const LSPString * const *atts)
         {
             status_t res;
 
@@ -259,7 +262,7 @@ namespace lsp
                     return res;
 
                 // Set widget attribute
-                widget->set(this, atts[0]->get_utf8(), avalue.get_utf8());
+                ctl->set(this, atts[0]->get_utf8(), avalue.get_utf8());
             }
 
             return STATUS_OK;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/presets.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/presets.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/presets.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/presets.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 24 июн. 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/ui.h>
+
+namespace lsp
+{
+    namespace ui
+    {
+        ssize_t preset_compare_function(const preset_t *a, const preset_t *b)
+        {
+            ssize_t result = a->name.compare_to_nocase(&b->name);
+            if (result != 0)
+                return result;
+
+            return ssize_t(a->flags & PRESET_FLAG_USER) - ssize_t(b->flags & PRESET_FLAG_USER);
+        }
+
+        bool is_any_preset(const ui::preset_t *preset)
+        {
+            return true;
+        }
+
+        bool is_factory_preset(const ui::preset_t *preset)
+        {
+            return !(preset->flags & ui::PRESET_FLAG_USER);
+        }
+
+        bool is_user_preset(const ui::preset_t *preset)
+        {
+            return preset->flags & ui::PRESET_FLAG_USER;
+        }
+
+        bool is_favourite_preset(const ui::preset_t *preset)
+        {
+            return preset->flags & ui::PRESET_FLAG_FAVOURITE;
+        }
+
+    } /* namespace ui */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/xml/DOMControllerNode.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/xml/DOMControllerNode.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/xml/DOMControllerNode.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/xml/DOMControllerNode.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugin-fw
+ * Created on: 25 мая 2025 г.
+ *
+ * lsp-plugin-fw is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugin-fw is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/debug.h>
+
+#include <private/ui/xml/DOMControllerNode.h>
+
+namespace lsp
+{
+    namespace ui
+    {
+        namespace xml
+        {
+            DOMControllerNode::DOMControllerNode(UIContext *ctx, Node *parent, ctl::DOMController *ctl): Node(ctx, parent)
+            {
+                pController = ctl;
+            }
+
+            DOMControllerNode::~DOMControllerNode()
+            {
+                if (pController != NULL)
+                    pController = NULL;
+            }
+
+            status_t DOMControllerNode::enter(const LSPString * const *atts)
+            {
+                status_t res;
+                lltl::parray<LSPString> tmp;
+
+                // Build list of overridden attributes
+                if ((res = pContext->overrides()->build(&tmp, atts)) != STATUS_OK)
+                {
+                    lsp_error("Error building overridden attributes: %d", int(res));
+                    return res;
+                }
+                atts = tmp.array();
+
+                // Apply overridden widget attributes
+                LSPString xvalue;
+
+                pController->begin(pContext);
+                for ( ; *atts != NULL; atts += 2)
+                {
+                    // Evaluate attribute value
+                    if ((res = pContext->eval_string(&xvalue, atts[1])) != STATUS_OK)
+                    {
+                        lsp_error(
+                            "Error evaluating expression for attribute '%s': %s",
+                            atts[0]->get_native(), atts[1]->get_native()
+                        );
+                        return res;
+                    }
+
+                    // Set widget attribute
+                    pController->set(pContext, atts[0]->get_utf8(), xvalue.get_utf8());
+                }
+
+                // Push the state of overrides
+                if ((res = pContext->overrides()->push(1)) != STATUS_OK)
+                {
+                    lsp_error("Error entering new attribute override state: %d", int(res));
+                    return res;
+                }
+
+                return STATUS_OK;
+            }
+
+            status_t DOMControllerNode::leave()
+            {
+                status_t res;
+
+                pController->end(pContext);
+
+                // Pop state of overrides
+                if ((res = pContext->overrides()->pop()) != STATUS_OK)
+                {
+                    lsp_error("Error restoring override state: %d", int(res));
+                    return res;
+                }
+
+                return Node::leave();
+            }
+
+        } /* namespac xml */
+    } /* namespace ui */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/xml/RootNode.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/xml/RootNode.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/xml/RootNode.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/xml/RootNode.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 10 апр. 2021 г.
@@ -55,7 +55,10 @@ namespace lsp
                 // Create and initialize widget
                 ctl::Widget *widget     = pWidget;
                 if (widget == NULL) // If there is no widget, instantiate it
-                    widget  =  pContext->create_controller(name);
+                {
+                    ctl::Controller *ctl = pContext->create_controller(name);
+                    widget = ctl::ctl_cast<ctl::Widget>(ctl);
+                }
 
                 // No handler?
                 if (widget == NULL)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/xml/WidgetNode.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/xml/WidgetNode.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/main/ui/xml/WidgetNode.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/main/ui/xml/WidgetNode.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 11 апр. 2021 г.
@@ -21,6 +21,7 @@
 
 #include <lsp-plug.in/common/debug.h>
 
+#include <private/ui/xml/DOMControllerNode.h>
 #include <private/ui/xml/WidgetNode.h>
 
 namespace lsp
@@ -33,7 +34,6 @@ namespace lsp
             {
                 pWidget     = widget;
                 pChild      = NULL;
-                pSpecial    = NULL;
             }
 
             WidgetNode::~WidgetNode()
@@ -50,17 +50,32 @@ namespace lsp
                 if (*child != NULL)
                     return STATUS_OK;
 
-                // Create and initialize widget
-                ctl::Widget *widget         = pContext->create_controller(name);
-                if (widget == NULL)
-                    return STATUS_OK;       // No handler
-
-                // Create handler
-                pChild = new WidgetNode(pContext, this, widget);
-                if (pChild == NULL)
-                    return STATUS_NO_MEM;
+                // Create controller
+                ctl::Controller *ctl    = pContext->create_controller(name);
+
+                // Process it as widget if it is a widget
+                ctl::Widget *widget     = ctl::ctl_cast<ctl::Widget>(ctl);
+                if (widget != NULL)
+                {
+                    // Create widget handler
+                    pChild = new WidgetNode(pContext, this, widget);
+                    if (pChild == NULL)
+                        return STATUS_NO_MEM;
+
+                    *child = pChild;
+                    return STATUS_OK;
+                }
+
+                // Process it as a DOM controller if it is a DOM controller
+                ctl::DOMController *dom_ctl = ctl::ctl_cast<ctl::DOMController>(ctl);
+                if (dom_ctl != NULL)
+                {
+                    // Create DOM controller handler
+                    DOMControllerNode *node = new DOMControllerNode(pContext, this, dom_ctl);
+                    *child = node;
+                    return (node != NULL) ? STATUS_OK : STATUS_NO_MEM;
+                }
 
-                *child = pChild;
                 return STATUS_OK;
             }
 
@@ -127,25 +142,37 @@ namespace lsp
             {
                 status_t res = STATUS_OK;
 
-                // Link the child widget togetgher with parent widget
-                if ((child == pChild) && (pChild != NULL))
-                {
-                    ctl::Widget *w = pChild->pWidget;
+                // Forget the child at exit
+                lsp_finally { pChild = NULL; };
 
-                    if ((pWidget != NULL) && (w != NULL))
-                    {
-                        res = pWidget->add(pContext, w);
-                        if (res != STATUS_OK)
-                            lsp_error(
-                                "Error while trying to add widget of type '%s' as child for '%s'",
-                                w->get_class()->name,
-                                pWidget->get_class()->name
-                            );
-                    }
-                }
+                // Link the child widget together with parent widget
+                if ((child != pChild) || (pChild == NULL))
+                    return res;
 
-                // Forget the child
-                pChild  = NULL;
+                ctl::Widget *w = pChild->pWidget;
+                if ((pWidget == NULL) || (w == NULL))
+                    return res;
+
+                ctl::Overlay *ov = ctl::ctl_cast<ctl::Overlay>(w);
+                if (ov != NULL)
+                {
+                    // Need to add the widget to the list of overlays
+                    res = (pContext->overlays()->add(ov)) ? STATUS_OK : STATUS_NO_MEM;
+                    if (res != STATUS_OK)
+                        lsp_error(
+                            "Error while trying to register overlay widget of type '%s'",
+                            w->get_class()->name,
+                            pWidget->get_class()->name);
+                }
+                else
+                {
+                    res = pWidget->add(pContext, w);
+                    if (res != STATUS_OK)
+                        lsp_error(
+                            "Error while trying to add widget of type '%s' as child for '%s'",
+                            w->get_class()->name,
+                            pWidget->get_class()->name);
+                }
 
                 return res;
             }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/test/mtest/standalone.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/test/mtest/standalone.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/test/mtest/standalone.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/test/mtest/standalone.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -209,10 +209,12 @@ MTEST_BEGIN("", standalone)
             cfg.plugin_id,
             cfg.args.size(),
             const_cast<const char **>(cfg.args.array()));
-        MTEST_ASSERT_MSG(result == STATUS_OK, "Failed with result=%d", int(result));
-
-        MTEST_ASSERT(loop->run() == STATUS_OK);
-        delete loop;
+        if (result != STATUS_CANCELLED)
+        {
+            MTEST_ASSERT_MSG(result == STATUS_OK, "Failed with result=%d", int(result));
+            MTEST_ASSERT(loop->run() == STATUS_OK);
+            delete loop;
+        }
     }
 
 MTEST_END
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/test/mtest/vst3_modinfo.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/test/mtest/vst3_modinfo.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/test/mtest/vst3_modinfo.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/test/mtest/vst3_modinfo.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 4 февр. 2024 г.
@@ -34,17 +34,30 @@ MTEST_BEGIN("", vst3_modinfo)
         resdir.set(tempdir(), "resources");
         system::set_env_var(LSP_RESOURCE_PATH_VAR, resdir.as_string());
 
-        // Call the gen_ttl tool
-        io::Path outfile;
-        MTEST_ASSERT(outfile.fmt("%s/mtest-%s-vst3-moduleinfo.json", tempdir(), full_name()) > 0);
+        // Call the tool
+        io::Path modinfo;
+        MTEST_ASSERT(modinfo.fmt("%s/mtest-%s-vst3-moduleinfo.json", tempdir(), full_name()) > 0);
+
+        io::Path plist;
+        MTEST_ASSERT(plist.fmt("%s/mtest-%s-vst3-info.plist", tempdir(), full_name()) > 0);
+
+        io::Path pkginfo;
+        MTEST_ASSERT(pkginfo.fmt("%s/mtest-%s-vst3-PkgInfo", tempdir(), full_name()) > 0);
 
         const char *data[]=
         {
             "vst3_modinfo",
-            outfile.as_native(),
+            "-m",
+            modinfo.as_native(),
+            "-i",
+            plist.as_native(),
+            "-p",
+            pkginfo.as_native()
         };
 
-        printf("Writing moduleinfo.json file to %s...\n", outfile.as_native());
+        printf("Writing moduleinfo.json file to %s...\n", modinfo.as_native());
+        printf("Writing info.plist file to %s...\n", plist.as_native());
+        printf("Writing PkgInfo file to %s...\n", pkginfo.as_native());
 
         MTEST_ASSERT(lsp::vst3_modinfo::main(sizeof(data)/sizeof(const char *), data) == 0);
     }
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/test/utest/meta/func/parse.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/test/utest/meta/func/parse.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/test/utest/meta/func/parse.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/test/utest/meta/func/parse.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -31,6 +31,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test BOOL port",
+            "Test Bool",
             meta::U_BOOL,
             meta::R_CONTROL,
             0,
@@ -109,6 +110,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test ENUM port",
+            "Test Enum",
             meta::U_ENUM,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_STEP,
@@ -117,6 +119,7 @@ UTEST_BEGIN("meta.func", parse)
             2.0f,
             3.0f,
             enum_values,
+            NULL,
             NULL
         };
 
@@ -179,6 +182,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test GAIN_AMP port",
+            "Test Gain Amp",
             meta::U_GAIN_AMP,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
@@ -187,6 +191,7 @@ UTEST_BEGIN("meta.func", parse)
             1.0f,
             0.01f,
             NULL,
+            NULL,
             NULL
         };
 
@@ -251,6 +256,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test GAIN_AMP port",
+            "Test Gain Amp",
             meta::U_GAIN_POW,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
@@ -259,6 +265,7 @@ UTEST_BEGIN("meta.func", parse)
             1.0f,
             0.01f,
             NULL,
+            NULL,
             NULL
         };
 
@@ -324,6 +331,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test DB port",
+            "Test dB",
             meta::U_DB,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
@@ -332,6 +340,7 @@ UTEST_BEGIN("meta.func", parse)
             0.0f,
             0.1f,
             NULL,
+            NULL,
             NULL
         };
 
@@ -393,6 +402,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test NEPER port",
+            "Test Neper",
             meta::U_NEPER,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
@@ -401,6 +411,7 @@ UTEST_BEGIN("meta.func", parse)
             0.0f,
             0.1f,
             NULL,
+            NULL,
             NULL
         };
 
@@ -462,6 +473,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test FREQUENCY port",
+            "Test Frequency",
             meta::U_HZ,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
@@ -470,6 +482,7 @@ UTEST_BEGIN("meta.func", parse)
             0.0f,
             0.1f,
             NULL,
+            NULL,
             NULL
         };
 
@@ -543,6 +556,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test FREQUENCY port",
+            "Test Frequency",
             meta::U_KHZ,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
@@ -551,6 +565,7 @@ UTEST_BEGIN("meta.func", parse)
             0.0f,
             0.1f,
             NULL,
+            NULL,
             NULL
         };
 
@@ -712,6 +727,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test BAR port",
+            "Test Bar",
             meta::U_BAR,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_UPPER | meta::F_STEP | meta::F_INT,
@@ -720,6 +736,7 @@ UTEST_BEGIN("meta.func", parse)
             0.0f,
             1.0f,
             NULL,
+            NULL,
             NULL
         };
 
@@ -790,6 +807,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test BAR port",
+            "Test Bar",
             meta::U_BAR,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
@@ -798,6 +816,7 @@ UTEST_BEGIN("meta.func", parse)
             0.0f,
             1.0f,
             NULL,
+            NULL,
             NULL
         };
 
@@ -868,6 +887,7 @@ UTEST_BEGIN("meta.func", parse)
         static const meta::port_t port = {
             "test",
             "Test SEC port",
+            "Test Seconds",
             meta::U_SEC,
             meta::R_CONTROL,
             meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
@@ -876,6 +896,7 @@ UTEST_BEGIN("meta.func", parse)
             0.0f,
             1.0f,
             NULL,
+            NULL,
             NULL
         };
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/util/gst_make/gst_make.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/gst_make/gst_make.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/util/gst_make/gst_make.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/gst_make/gst_make.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -188,6 +188,9 @@ namespace lsp
                 fprintf(stderr, "Error creating file '%s', code=%d\n", file->as_native(), code);
                 return STATUS_IO_ERROR;
             }
+            lsp_finally {
+                fclose(out);
+            };
 
             // Write to file
             fprintf(out,    "//------------------------------------------------------------------------------\n");
@@ -294,9 +297,6 @@ namespace lsp
             if (pos < length)
                 fputs(ftemplate->get_utf8(pos), out);
 
-            // Close file
-            fclose(out);
-
             return STATUS_OK;
         }
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/util/jack_make/jack_make.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/jack_make/jack_make.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/util/jack_make/jack_make.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/jack_make/jack_make.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -74,6 +74,9 @@ namespace lsp
                 fprintf(stderr, "Error creating file '%s', code=%d\n", file->as_native(), code);
                 return STATUS_IO_ERROR;
             }
+            lsp_finally {
+                fclose(out);
+            };
 
             // Write to file
             fprintf(out,    "//------------------------------------------------------------------------------\n");
@@ -101,9 +104,6 @@ namespace lsp
             fprintf(out,    "    #include <lsp-plug.in/plug-fw/wrap/jack/main.h>\n");
             fprintf(out,    "#undef LSP_PLUG_IN_JACK_MAIN_IMPL\n");
 
-            // Close file
-            fclose(out);
-
             return STATUS_OK;
         }
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/util/lv2ttl_gen/lv2ttl_gen.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/lv2ttl_gen/lv2ttl_gen.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/util/lv2ttl_gen/lv2ttl_gen.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/lv2ttl_gen/lv2ttl_gen.cpp	2025-08-26 18:15:48.109960744 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 1 дек. 2021 г.
@@ -848,6 +848,8 @@ namespace lsp
                 fprintf(out, "\t\tlv2:index %d ;\n", (int)port_id);
                 fprintf(out, "\t\tlv2:symbol \"%s\" ;\n", (p->role == meta::R_BYPASS) ? "enabled" : p->id);
                 fprintf(out, "\t\tlv2:name \"%s\" ;\n", (p->role == meta::R_BYPASS) ? "Enabled" : p->name);
+                if (p->short_name != NULL)
+                    fprintf(out, "\t\tlv2:shortName \"%s\" ;\n", p->short_name);
                 if (p->role == meta::R_BYPASS)
                     fprintf(out, "\t\tlv2:designation lv2:enabled ;\n");
 
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/util/repository/repository.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/repository/repository.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/util/repository/repository.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/repository/repository.cpp	2025-08-26 18:15:48.113960705 +0000
@@ -22,6 +22,8 @@
 #include <lsp-plug.in/common/types.h>
 #include <lsp-plug.in/common/status.h>
 #include <lsp-plug.in/fmt/json/dom.h>
+#include <lsp-plug.in/fmt/obj/Compressor.h>
+#include <lsp-plug.in/fmt/obj/PushParser.h>
 #include <lsp-plug.in/fmt/xml/PullParser.h>
 #include <lsp-plug.in/io/Dir.h>
 #include <lsp-plug.in/io/Path.h>
@@ -54,6 +56,7 @@ namespace lsp
             lltl::pphash<LSPString, LSPString>  other;          // Other files
             lltl::pphash<LSPString, LSPString>  local;          // Local files
             lltl::pphash<LSPString, LSPString>  fonts;          // Fonts
+            lltl::pphash<LSPString, LSPString>  scene3d;        // 3D scenec
             util::checksum_list_t               checksums;      // Checksums
         } context_t;
 
@@ -73,6 +76,48 @@ namespace lsp
          */
         typedef status_t (* file_handler_t)(context_t *ctx, const LSPString *relative, const LSPString *full);
 
+        /**
+         * File processing rule
+         */
+        typedef struct file_rule_t
+        {
+            io::PathPattern     pattern;
+            file_handler_t      handler;
+        } file_rule_t;
+
+        status_t add_rule(lltl::parray<file_rule_t> *rules, const char *pattern, file_handler_t handler)
+        {
+            file_rule_t *rule = new file_rule_t;
+            if (rule == NULL)
+                return STATUS_NO_MEM;
+            lsp_finally {
+                if (rule != NULL)
+                    delete rule;
+            };
+
+            status_t res = rule->pattern.set(pattern, io::PathPattern::FULL_PATH);
+            if (res != STATUS_OK)
+                return res;
+
+            rule->handler   = handler;
+            if (!rules->add(rule))
+                return STATUS_NO_MEM;
+
+            release_ptr(rule);
+            return STATUS_OK;
+        }
+
+        void clear_rules(lltl::parray<file_rule_t> *rules)
+        {
+            for (size_t i=0, n=rules->size(); i<n; ++i)
+            {
+                file_rule_t *rule = rules->uget(i);
+                if (rule != NULL)
+                    delete rule;
+            }
+            rules->flush();
+        }
+
         void drop_paths(lltl::parray<LSPString> *paths)
         {
             for (size_t i=0, n=paths->size(); i<n; ++i)
@@ -130,6 +175,11 @@ namespace lsp
             ctx->fonts.flush();
             drop_paths(&paths);
 
+            // Drop fonts
+            ctx->scene3d.values(&paths);
+            ctx->scene3d.flush();
+            drop_paths(&paths);
+
             // Drop checksums
             util::drop_checksums(&ctx->checksums);
         }
@@ -153,6 +203,14 @@ namespace lsp
             return ext.equals_ascii_nocase("xml");
         }
 
+        bool is_obj_file(const io::Path *path)
+        {
+            LSPString ext;
+            if (path->get_ext(&ext) != STATUS_OK)
+                return false;
+            return ext.equals_ascii_nocase("obj");
+        }
+
         status_t add_unique_file(lltl::pphash<LSPString, LSPString> *dst, const LSPString *relative, const LSPString *full)
         {
             LSPString *path = dst->get(relative);
@@ -528,6 +586,11 @@ namespace lsp
             return add_unique_file(&ctx->local, relative, full);
         }
 
+        status_t scene3d_handler(context_t *ctx, const LSPString *relative, const LSPString *full)
+        {
+            return add_unique_file(&ctx->scene3d, relative, full);
+        }
+
         status_t i18n_handler(context_t *ctx, const LSPString *relative, const LSPString *full)
         {
             status_t res;
@@ -569,10 +632,7 @@ namespace lsp
             return res;
         }
 
-        status_t scan_files(
-            const io::Path *base, const LSPString *child, const io::PathPattern *pattern,
-            context_t *ctx, file_handler_t handler
-        )
+        status_t scan_files(const io::Path *base, const LSPString *child, context_t *ctx, lltl::parray<file_rule_t> * rules)
         {
             status_t res;
             io::Path path, rel, full;
@@ -634,18 +694,30 @@ namespace lsp
 //                        printf("  found  dir: %s\n", rel.as_native());
                     }
                 }
-                else if (pattern->test(&item))
+                else
                 {
                     // Build file paths
                     if ((res = rel.set(child, &item)) != STATUS_OK)
                         return res;
-                    if ((res = full.set(base, &rel)) != STATUS_OK)
-                        return res;
 
-                    // Handle the file
-                    //printf("  found file: %s\n", rel.as_native());
-                    if ((res = handler(ctx, rel.as_string(), full.as_string())) != STATUS_OK)
-                        return res;
+                    for (size_t i=0, n=rules->size(); i<n; ++i)
+                    {
+                        const file_rule_t *rule = rules->uget(i);
+                        if (rule == NULL)
+                            continue;
+                        if (!rule->pattern.test(&rel))
+                            continue;
+
+                        if ((res = full.set(base, &rel)) != STATUS_OK)
+                            return res;
+
+                        // Handle the file
+                        //printf("  found file: %s\n", rel.as_native());
+                        if ((res = rule->handler(ctx, rel.as_string(), full.as_string())) != STATUS_OK)
+                            return res;
+
+                        break;
+                    }
                 }
             }
 
@@ -653,7 +725,7 @@ namespace lsp
             for (size_t i=0, n=subdirs.size(); i<n; ++i)
             {
                 subdir = subdirs.uget(i);
-                if ((res = scan_files(base, subdir, pattern, ctx, handler)) != STATUS_OK)
+                if ((res = scan_files(base, subdir, ctx, rules)) != STATUS_OK)
                 {
                     drop_paths(&subdirs);
                     return res;
@@ -666,25 +738,23 @@ namespace lsp
             return STATUS_OK;
         }
 
-        status_t scan_files(
-            const io::Path *base, const LSPString *child, const char *pattern,
-            context_t *ctx, file_handler_t handler
-        )
-        {
-            status_t res;
-            io::PathPattern pat;
-
-            if ((res = pat.set(pattern)) != STATUS_OK)
-                return res;
-
-            return scan_files(base, child, &pat, ctx, handler);
-        }
-
         status_t scan_resources(const LSPString *path, context_t *ctx)
         {
             status_t res;
             LSPString child;
 
+            // Create rules
+            lltl::parray<file_rule_t> rules;
+            lsp_finally { clear_rules(&rules); };
+            LSP_STATUS_ASSERT(add_rule(&rules, "schema/**/*.xml", schema_handler));
+            LSP_STATUS_ASSERT(add_rule(&rules, "ui/**/*.xml", ui_handler));
+            LSP_STATUS_ASSERT(add_rule(&rules, "presets/**/*.preset", preset_handler));
+            LSP_STATUS_ASSERT(add_rule(&rules, "presets/**/*.patch", preset_handler));
+            LSP_STATUS_ASSERT(add_rule(&rules, "i18n/**/*.json", i18n_handler));
+            LSP_STATUS_ASSERT(add_rule(&rules, "fonts/**/**", font_handler));
+            LSP_STATUS_ASSERT(add_rule(&rules, "models/**/*.obj", scene3d_handler));
+            LSP_STATUS_ASSERT(add_rule(&rules, "**/**", other_handler));
+
             // Compute the base path
             io::Path base, full;
             if ((res = base.set(path, "res/main")) != STATUS_OK)
@@ -700,18 +770,7 @@ namespace lsp
                 if (io::Path::is_dots(&child))
                     continue;
 
-                if (child.equals_ascii("schema"))
-                    res = scan_files(&base, &child, "*.xml", ctx, schema_handler);
-                else if (child.equals_ascii("ui"))
-                    res = scan_files(&base, &child, "*.xml", ctx, ui_handler);
-                else if (child.equals_ascii("preset"))
-                    res = scan_files(&base, &child, "*.preset", ctx, preset_handler);
-                else if (child.equals_ascii("i18n"))
-                    res = scan_files(&base, &child, "*.json", ctx, i18n_handler);
-                else if (child.equals_ascii("fonts"))
-                    res = scan_files(&base, &child, "*", ctx, font_handler);
-                else
-                    res = scan_files(&base, &child, "*", ctx, other_handler);
+                scan_files(&base, &child, ctx, &rules);
 
                 if (res != STATUS_OK)
                     return res;
@@ -735,7 +794,11 @@ namespace lsp
             if ((res = base.set(path)) != STATUS_OK)
                 return res;
 
-            return scan_files(&base, &child, "*", ctx, local_handler);
+            lltl::parray<file_rule_t> rules;
+            lsp_finally { clear_rules(&rules); };
+            LSP_STATUS_ASSERT(add_rule(&rules, "**/**", local_handler));
+
+            return scan_files(&base, &child, ctx, &rules);
         }
 
         status_t lookup_path(const char *path, context_t *ctx)
@@ -886,6 +949,27 @@ namespace lsp
                         return res;
                     }
                 }
+                else if (is_obj_file(&df))
+                {
+                    // Compress obj file
+                    obj::PushParser parser;
+                    obj::Compressor compressor;
+
+                    res = compressor.set_buffer_size(7);
+                    if (res == STATUS_OK)
+                        res = compressor.open(&df, io::File::FM_WRITE_NEW);
+                    if (res == STATUS_OK)
+                        res = parser.parse_file(&compressor, source);
+                    res = update_status(res, compressor.close());
+
+                    if (res != STATUS_OK)
+                    {
+                        fprintf(stderr, "Error compressing OBJ file '%s', error: %d\n", df.as_native(), int(res));
+                        if (!strict)
+                            continue;
+                        return res;
+                    }
+                }
                 else
                 {
                     // Copy file
@@ -1239,6 +1323,8 @@ namespace lsp
             if ((res == STATUS_OK) || (!strict))
                 res = update_status(res, export_files(strict, &ctx, &ctx.fonts));
             if ((res == STATUS_OK) || (!strict))
+                res = update_status(res, export_files(strict, &ctx, &ctx.scene3d));
+            if ((res == STATUS_OK) || (!strict))
                 res = process_manifest_file(&ctx, cmd);
 
             // Export checksums if specified
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/util/validator/common.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/validator/common.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/util/validator/common.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/validator/common.cpp	2025-08-26 18:15:48.113960705 +0000
@@ -157,9 +157,7 @@ namespace lsp
             // Check that port identifier is present
             if (port->id == NULL)
                 validation_error(ctx, "Not specified port identifier for plugin uid='%s'", meta->uid);
-
-            // Check that port identifier is valid
-            if (!validate_identifier(port->id))
+            else if (!validate_identifier(port->id)) // Check that port identifier is valid
                 validation_error(ctx, "Invalid port identifier '%s' for plugin uid='%s', allowed characters are: a-z, A-Z, _, 0-9",
                     port->id, meta->uid);
 
@@ -171,6 +169,17 @@ namespace lsp
             else if (!(ctx->port_ids.create(port->id, const_cast<meta::port_t *>(port))))
                 allocation_error(ctx);
 
+            // Ensure that port short name doesn't clash with any othe port name
+            if (port->short_name != NULL)
+            {
+                clash       = ctx->port_short_names.get(port->short_name);
+                if (clash != NULL)
+                    validation_error(ctx, "Port id='%s' short name '%s' clashes short name of port id='%s' for plugin uid='%s'",
+                        clash->id, port->short_name, port->id, meta->uid);
+                else if (!(ctx->port_short_names.create(port->short_name, const_cast<meta::port_t *>(port))))
+                    allocation_error(ctx);
+            }
+
             // Additional checks for specific port types
             switch (port->role)
             {
@@ -701,6 +710,7 @@ namespace lsp
             ctx->port_ids.flush();
             ctx->clap_port_ids.flush();
             ctx->vst3_port_ids.flush();
+            ctx->port_short_names.flush();
 
             // Validate name
             if (meta->name == NULL)
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/util/validator/lv2.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/validator/lv2.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/util/validator/lv2.cpp	2025-03-01 12:42:57.456644401 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/validator/lv2.cpp	2025-08-26 18:15:48.113960705 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 8 янв. 2023 г.
@@ -45,6 +45,16 @@ namespace lsp
 
             void validate_port(context_t *ctx, const meta::plugin_t *meta, const meta::port_t *port)
             {
+                if (port->short_name != NULL)
+                {
+                    // LV2: This is the same as name, with the additional requirement that the value is shorter than 16 characters.
+                    const size_t len = strlen(port->short_name);
+                    if (len >= 16)
+                        validation_error(
+                            ctx,
+                            "Plugin uid='%s' port id='%s' has short name '%s' of length %d characters but should be shorter than 16 characters",
+                            meta->uid, port->id, port->short_name, int(len));
+                }
             }
         } /* namespace lv2 */
     } /* namespace validator */
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/util/vst3_modinfo/vst3_modinfo.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/vst3_modinfo/vst3_modinfo.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/util/vst3_modinfo/vst3_modinfo.cpp	2025-03-01 12:42:57.460644376 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/util/vst3_modinfo/vst3_modinfo.cpp	2025-08-26 18:15:48.113960705 +0000
@@ -33,13 +33,307 @@ namespace lsp
 {
     namespace vst3_modinfo
     {
-        int main(int argc, const char **argv)
+        typedef struct cmdline_t
+        {
+            const char *modinfo;        // Path to moduleinfo.json
+            const char *info_plist;     // Path to Info.plist
+            const char *pkginfo;        // Path to PkgInfo
+        } cmdline_t;
+
+        static status_t parse_cmdline(cmdline_t *cfg, int argc, const char **argv)
+        {
+            cfg->modinfo        = NULL;
+            cfg->info_plist     = NULL;
+            cfg->pkginfo        = NULL;
+
+            // Parse arguments
+            int i = 1;
+
+            while (i < argc)
+            {
+                const char *arg = argv[i++];
+                if ((!::strcmp(arg, "--help")) || (!::strcmp(arg, "-h")))
+                {
+                    printf("Usage: %s [parameters] [resource-directories]\n\n", argv[0]);
+                    printf("Available parameters:\n");
+                    printf("  -h, --help                    Show help\n");
+                    printf("  -i, --info-plist <file>       Generate Info.plist file contents to the specified file\n");
+                    printf("  -m, --modinfo <file>          Write modinfo.json file contents to the specified file\n");
+                    printf("  -p, --pkginfo <file>          Write PkgInfo file contents to the specified file\n");
+                    printf("\n");
+
+                    return STATUS_CANCELLED;
+                }
+                else if ((!::strcmp(arg, "--info-plist")) || (!::strcmp(arg, "-i")))
+                {
+                    if (i >= argc)
+                    {
+                        fprintf(stderr, "Not specified file name for '%s' parameter\n", arg);
+                        return STATUS_BAD_ARGUMENTS;
+                    }
+                    else if (cfg->info_plist)
+                    {
+                        fprintf(stderr, "Duplicate parameter '%s'\n", arg);
+                        return STATUS_BAD_ARGUMENTS;
+                    }
+                    cfg->info_plist = argv[i++];
+                }
+                else if ((!::strcmp(arg, "--modinfo")) || (!::strcmp(arg, "-m")))
+                {
+                    if (i >= argc)
+                    {
+                        fprintf(stderr, "Not specified file name for '%s' parameter\n", arg);
+                        return STATUS_BAD_ARGUMENTS;
+                    }
+                    else if (cfg->modinfo)
+                    {
+                        fprintf(stderr, "Duplicate parameter '%s'\n", arg);
+                        return STATUS_BAD_ARGUMENTS;
+                    }
+                    cfg->modinfo = argv[i++];
+                }
+                else if ((!::strcmp(arg, "--pkginfo")) || (!::strcmp(arg, "-p")))
+                {
+                    if (i >= argc)
+                    {
+                        fprintf(stderr, "Not specified file name for '%s' parameter\n", arg);
+                        return STATUS_BAD_ARGUMENTS;
+                    }
+                    else if (cfg->pkginfo)
+                    {
+                        fprintf(stderr, "Duplicate parameter '%s'\n", arg);
+                        return STATUS_BAD_ARGUMENTS;
+                    }
+                    cfg->pkginfo = argv[i++];
+                }
+                else
+                {
+                    fprintf(stderr, "Unknown argument '%s'\n", arg);
+                    return STATUS_BAD_ARGUMENTS;
+                }
+            }
+
+            return STATUS_OK;
+        }
+
+        static status_t write_modinfo(const char *file, const meta::package_t *manifest)
+        {
+            // Initialize path
+            status_t res;
+            io::Path path;
+            if ((res = path.set_native(file)) != STATUS_OK)
+            {
+                fprintf(stderr, "Error parsing moduleinfo.json path, error=%d\n", int(res));
+                return res;
+            }
+
+            // Make moduleinfo file
+            if ((res = vst3::make_moduleinfo(&path, manifest)) != STATUS_OK)
+            {
+                fprintf(stderr, "Error creating moduleinfo.json file, error=%d\n", int(res));
+                return res;
+            }
+
+            return STATUS_OK;
+        }
+
+        static status_t write_escaped_string(io::OutSequence *os, const LSPString *string)
+        {
+            LSPString out;
+
+            if (!out.reserve(string->length()))
+                return STATUS_NO_MEM;
+            if (!out.append_ascii("\t<string>"))
+                return STATUS_NO_MEM;
+
+            // Escape characters
+            for (size_t i=0, n=string->length(); i<n; ++i)
+            {
+                const lsp_wchar_t ch = string->char_at(i);
+                if (ch < 0x20u)
+                {
+                    switch (ch)
+                    {
+                        case '\t':
+                            if (!out.append(ch))
+                                return STATUS_NO_MEM;
+                            break;
+
+                        default:
+                            if (!out.fmt_append_ascii("&x%02x;", int(ch)))
+                                return STATUS_NO_MEM;
+                            break;
+                    }
+                }
+                else if (ch < 0x80u)
+                {
+                    switch (ch)
+                    {
+                        case '&':
+                            if (!out.append_ascii("&amp;"))
+                                return STATUS_NO_MEM;
+                            break;
+                        case '<':
+                            if (!out.append_ascii("&lt;"))
+                                return STATUS_NO_MEM;
+                            break;
+                        case '>':
+                            if (!out.append_ascii("&gt;"))
+                                return STATUS_NO_MEM;
+                            break;
+                        case '\"':
+                            if (!out.append_ascii("&quot;"))
+                                return STATUS_NO_MEM;
+                            break;
+                        case '\'':
+                            if (!out.append_ascii("&apos;"))
+                                return STATUS_NO_MEM;
+                            break;
+                        default:
+                            if (!out.append(ch))
+                                return STATUS_NO_MEM;
+                            break;
+                    }
+                }
+                else
+                {
+                    if (!out.fmt_append_ascii("&x%04x;", int(ch)))
+                        return STATUS_NO_MEM;
+                }
+            }
+
+            // Output string
+            if (!out.append_ascii("</string>"))
+                return STATUS_NO_MEM;
+
+            return os->writeln(&out);
+        }
+
+        static status_t write_escaped_string(io::OutSequence *os, const char *string)
+        {
+            LSPString tmp, out;
+            if (!tmp.set_utf8(string))
+                return STATUS_NO_MEM;
+
+            return write_escaped_string(os, &tmp);
+        }
+
+        static inline status_t write_key(io::OutSequence *os, const char *key)
+        {
+            LSP_STATUS_ASSERT(os->write_ascii("\t<key>"));
+            LSP_STATUS_ASSERT(os->write_ascii(key));
+            LSP_STATUS_ASSERT(os->writeln_ascii("<key>"));
+            return STATUS_OK;
+        };
+
+        static status_t write_info_plist(const char *file, const meta::package_t *manifest)
         {
-            if (argc < 2)
+            // Initialize path
+            status_t res;
+            io::Path path;
+            if ((res = path.set_native(file)) != STATUS_OK)
+            {
+                fprintf(stderr, "Error parsing Info.plist path, error=%d\n", int(res));
+                return res;
+            }
+
+            // Create output file
+            io::OutSequence os;
+            if ((res = os.open(&path, io::File::FM_WRITE_NEW, "UTF-8")) != STATUS_OK)
+            {
+                fprintf(stderr, "Error writing Info.plist path, error=%d\n", int(res));
+                return res;
+            }
+            lsp_finally {
+                os.close();
+            };
+
+            // Generate Info.plist contents
+            LSP_STATUS_ASSERT(os.writeln_ascii("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
+            LSP_STATUS_ASSERT(os.writeln_ascii("<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">"));
+            LSP_STATUS_ASSERT(os.writeln_ascii("<plist version=\"1.0\">"));
+            {
+                // Generate version string
+                LSPString version;
+                if (version.fmt_ascii("%d.%d.%d",
+                    manifest->version.major,
+                    manifest->version.minor,
+                    manifest->version.micro) < 0)
+                    return STATUS_NO_MEM;
+
+                LSP_STATUS_ASSERT(write_key(&os, "CFBundleName"));
+                LSP_STATUS_ASSERT(write_escaped_string(&os, manifest->artifact));
+
+                LSP_STATUS_ASSERT(write_key(&os, "CFBundleDisplayName"));
+                LSP_STATUS_ASSERT(write_escaped_string(&os, manifest->artifact_name));
+
+                LSP_STATUS_ASSERT(write_key(&os, "CFBundlePackageType"));
+                LSP_STATUS_ASSERT(write_escaped_string(&os, "BNDL"));
+
+                LSP_STATUS_ASSERT(write_key(&os, "CFBundleExecutable"));
+                LSP_STATUS_ASSERT(write_escaped_string(&os, manifest->artifact));
+
+                LSP_STATUS_ASSERT(write_key(&os, "CFBundleVersion"));
+                LSP_STATUS_ASSERT(write_escaped_string(&os, &version));
+
+                LSP_STATUS_ASSERT(write_key(&os, "CFBundleShortVersionString"));
+                LSP_STATUS_ASSERT(write_escaped_string(&os, &version));
+
+                LSP_STATUS_ASSERT(write_key(&os, "CFBundleSignature"));
+                LSP_STATUS_ASSERT(write_escaped_string(&os, "????"));
+
+                LSP_STATUS_ASSERT(write_key(&os, "CFBundleSupportedPlatforms"));
+                LSP_STATUS_ASSERT(os.writeln_ascii("\t<array>"));
+                    LSP_STATUS_ASSERT(os.writeln_ascii("\t\t<string>MacOSX</string>"));
+                LSP_STATUS_ASSERT(os.writeln_ascii("\t</array>"));
+
+                LSP_STATUS_ASSERT(write_key(&os, "NSHighResolutionCapable"));
+                LSP_STATUS_ASSERT(os.writeln_ascii("\t<true/>"));
+
+                LSP_STATUS_ASSERT(write_key(&os, "NSHumanReadableCopyright"));
+                LSP_STATUS_ASSERT(write_escaped_string(&os, manifest->copyright));
+            }
+            LSP_STATUS_ASSERT(os.writeln_ascii("</plist>"));
+
+            return STATUS_OK;
+        }
+
+
+        static status_t write_pkginfo(const char *file, const meta::package_t *manifest)
+        {
+            // Initialize path
+            status_t res;
+            io::Path path;
+            if ((res = path.set_native(file)) != STATUS_OK)
             {
-                fprintf(stderr, "Required destination moduleinfo.json file\n");
-                return STATUS_BAD_ARGUMENTS;
+                fprintf(stderr, "Error parsing PkgInfo path, error=%d\n", int(res));
+                return res;
+            }
+
+            // Create output file
+            io::OutSequence os;
+            if ((res = os.open(&path, io::File::FM_WRITE_NEW, "UTF-8")) != STATUS_OK)
+            {
+                fprintf(stderr, "Error writing  PkgInfo path, error=%d\n", int(res));
+                return res;
             }
+            lsp_finally {
+                os.close();
+            };
+
+            // Generate PkgInfo contents
+            LSP_STATUS_ASSERT(os.writeln_ascii("BNDL????"));
+
+            return STATUS_OK;
+        }
+
+        int main(int argc, const char **argv)
+        {
+            // Parse command line options
+            cmdline_t cmd;
+            status_t res = parse_cmdline(&cmd, argc, argv);
+            if (res != STATUS_OK)
+                return res;
 
             // Create resource loader
             resource::ILoader *loader   = core::create_resource_loader();
@@ -52,7 +346,6 @@ namespace lsp
                 delete loader;
             };
 
-            status_t res;
             meta::package_t *manifest = NULL;
             {
                 // Obtain the manifest file descriptor
@@ -84,18 +377,24 @@ namespace lsp
             };
 
             // Write the moduleinfo.json file
-            io::Path path;
-            if ((res = path.set_native(argv[1])) != STATUS_OK)
+            if (cmd.modinfo != NULL)
             {
-                fprintf(stderr, "Error parsing manifest path, error=%d\n", int(res));
-                return res;
+                if ((res = write_modinfo(cmd.modinfo, manifest)) != STATUS_OK)
+                    return res;
             }
 
-            // Make moduleinfo file
-            if ((res = vst3::make_moduleinfo(&path, manifest)) != STATUS_OK)
+            // Write the Info.plist file
+            if (cmd.info_plist != NULL)
             {
-                fprintf(stderr, "Error creating moduleinfo.json file, error=%d\n", int(res));
-                return res;
+                if ((res = write_info_plist(cmd.info_plist, manifest)) != STATUS_OK)
+                    return res;
+            }
+
+            // Write the PkgInfo file
+            if (cmd.pkginfo != NULL)
+            {
+                if ((res = write_pkginfo(cmd.pkginfo, manifest)) != STATUS_OK)
+                    return res;
             }
 
             // All seems to be OK
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/wrap/cairo/CairoCanvas.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/wrap/cairo/CairoCanvas.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/wrap/cairo/CairoCanvas.cpp	2025-03-01 12:42:57.460644376 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/wrap/cairo/CairoCanvas.cpp	2025-08-26 18:15:48.113960705 +0000
@@ -28,7 +28,11 @@
 #include <lsp-plug.in/plug-fw/plug.h>
 #include <lsp-plug.in/stdlib/math.h>
 
-#include <cairo/cairo.h>
+#ifdef PLATFORM_MACOSX
+    #include <cairo.h>
+#else
+    #include <cairo/cairo.h>
+#endif /* PLATFORM_MACOSX */
 
 namespace lsp
 {
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/wrap/clap.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/wrap/clap.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/wrap/clap.cpp	2025-03-01 12:42:57.460644376 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/wrap/clap.cpp	2025-08-26 18:15:48.113960705 +0000
@@ -218,20 +218,20 @@ namespace lsp
 
             Wrapper *w = static_cast<Wrapper *>(plugin->plugin_data);
 
-//        #ifdef LSP_TRACE
-//            debug_ostream_t dbg(stream);
-//
-//            status_t res = w->save_state(&dbg);
-//            if (res == STATUS_OK)
-//            {
-//                lsp_dumpb("Output state dump", dbg.data(), dbg.size());
-//                res     = dbg.flush();
-//            }
-//
-//            return res == STATUS_OK;
-//        #else
+        #ifdef LSP_TRACE
+            debug_ostream_t dbg(stream);
+
+            status_t res = w->save_state(&dbg);
+            if (res == STATUS_OK)
+            {
+                lsp_dumpb("Output state dump", dbg.data(), dbg.size());
+                res     = dbg.flush();
+            }
+
+            return res == STATUS_OK;
+        #else
             return w->save_state(stream) == STATUS_OK;
-//        #endif /* LSP_TRACE */
+        #endif /* LSP_TRACE */
         }
 
         bool CLAP_ABI load_state(const clap_plugin_t *plugin, const clap_istream_t *stream)
@@ -240,18 +240,18 @@ namespace lsp
 
             Wrapper *w = static_cast<Wrapper *>(plugin->plugin_data);
 
-//        #ifdef LSP_TRACE
-//            debug_istream_t dbg(stream);
-//            status_t res = dbg.fill();
-//            if (res == STATUS_OK)
-//            {
-//                lsp_dumpb("Input state dump", dbg.data(), dbg.size());
-//                res     = w->load_state(&dbg);
-//            }
-//            return res == STATUS_OK;
-//        #else
+        #ifdef LSP_TRACE
+            debug_istream_t dbg(stream);
+            status_t res = dbg.fill();
+            if (res == STATUS_OK)
+            {
+                lsp_dumpb("Input state dump", dbg.data(), dbg.size());
+                res     = w->load_state(&dbg);
+            }
+            return res == STATUS_OK;
+        #else
             return w->load_state(stream) == STATUS_OK;
-//        #endif /* LSP_TRACE */
+        #endif /* LSP_TRACE */
         }
 
         const clap_plugin_state_t state_extension =
@@ -370,7 +370,10 @@ namespace lsp
 
         bool CLAP_ABI ui_adjust_size(const clap_plugin_t *plugin, uint32_t *width, uint32_t *height)
         {
-            lsp_trace("plugin = %p, width=%p, height=%p", plugin, width, height);
+            lsp_trace("plugin = %p, width=%p (%d), height=%p (%d)",
+                plugin,
+                width, (width != NULL) ? int(*width) : 0,
+                height, (height != NULL) ? int(*height) : 0);
             Wrapper *w = static_cast<Wrapper *>(plugin->plugin_data);
             UIWrapper *uw = w->ui_wrapper();
             return (uw != NULL) ? uw->adjust_size(width, height) : false;
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/wrap/jack.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/wrap/jack.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/wrap/jack.cpp	2025-03-01 12:42:57.460644376 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/wrap/jack.cpp	2025-08-26 18:15:48.113960705 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugin-fw
  * Created on: 11 мая 2016 г.
@@ -126,10 +126,12 @@ namespace lsp
         {
             const char     *cfg_file;
             const char     *plugin_id;
+            const char     *client_name;
             void           *parent_id;
             bool            headless;
             bool            list;
             bool            version;
+            bool            minimized;
             lltl::darray<connection_t> routing;
         } cmdline_t;
 
@@ -291,6 +293,7 @@ namespace lsp
             // Initialize config with default values
             cfg->cfg_file       = NULL;
             cfg->plugin_id      = NULL;
+            cfg->client_name    = NULL;
             cfg->parent_id      = NULL;
             cfg->headless       = false;
             cfg->list           = false;
@@ -315,6 +318,8 @@ namespace lsp
                     )
                     printf("  -h, --help                Output help\n");
                     printf("  -hl, --headless           Launch in console only, without UI\n");
+                    printf("  -mw, --minimized          Launch UI with minimized window\n");
+                    printf("  -n, --name                Specify the client name for JACK\n");
                     if (plugin_id == NULL)
                         printf("  -l, --list                List available plugin identifiers\n");
                     printf("  -v, --version             Output the version of the software\n");
@@ -336,8 +341,19 @@ namespace lsp
                     }
                     cfg->cfg_file = argv[i++];
                 }
+                else if ((!::strcmp(arg, "--name")) || (!::strcmp(arg, "-n")))
+                {
+                    if (i >= argc)
+                    {
+                        fprintf(stderr, "Not specified JACK client for '%s' parameter\n", arg);
+                        return STATUS_BAD_ARGUMENTS;
+                    }
+                    cfg->client_name = argv[i++];
+                }
                 else if ((!::strcmp(arg, "--headless")) || (!::strcmp(arg, "-hl")))
                     cfg->headless       = true;
+                else if ((!::strcmp(arg, "--minimized")) || (!::strcmp(arg, "-mw")))
+                    cfg->minimized      = true;
                 else if ((!::strcmp(arg, "--version")) || (!::strcmp(arg, "-v")))
                     cfg->version        = true;
                 else if ((plugin_id == NULL) && ((!::strcmp(arg, "--list")) || (!::strcmp(arg, "-l"))))
@@ -447,7 +463,7 @@ namespace lsp
 
             // Output sorted plugin list
             char fmt[0x20];
-            sprintf(fmt, "  %%%ds  %%s\n", -int(maxlen));
+            snprintf(fmt, sizeof(fmt), "  %%%ds  %%s\n", -int(maxlen));
 
             for (size_t i=0, n=list.size(); i<n; ++i)
             {
@@ -539,6 +555,14 @@ namespace lsp
 
         PluginLoop::PluginLoop()
         {
+            sCmdLine.cfg_file       = NULL;
+            sCmdLine.plugin_id      = NULL;
+            sCmdLine.parent_id      = NULL;
+            sCmdLine.headless       = false;
+            sCmdLine.list           = false;
+            sCmdLine.version        = false;
+            sCmdLine.minimized      = false;
+
             pFactory                = NULL;
             pLoader                 = NULL;
             pPlugin                 = NULL;
@@ -621,14 +645,14 @@ namespace lsp
 
             // Parse command-line arguments
             if ((res = parse_cmdline(&sCmdLine, plugin_id, argc, argv)) != STATUS_OK)
-                return (res == STATUS_CANCELLED) ? 0 : res;
+                return res;
 
             // Need just to output version?
             if (sCmdLine.version)
             {
                 if ((res = jack::output_version(sCmdLine)) != STATUS_OK)
                     return -res;
-                return 0;
+                return STATUS_CANCELLED;
             }
 
             // Need just to list available plugins?
@@ -636,7 +660,7 @@ namespace lsp
             {
                 if ((res = jack::list_plugins()) != STATUS_OK)
                     return -res;
-                return 0;
+                return STATUS_CANCELLED;
             }
 
             // Plugin identifier has been specified?
@@ -701,9 +725,12 @@ namespace lsp
             }
         #endif /* WITH_UI_FEATURE */
 
+            wrapper_info_t info;
+            info.client_name    = sCmdLine.client_name;
+
             // Initialize plugin wrapper
-            pRouting        = &sCmdLine.routing;
-            pWrapper        = new jack::Wrapper(pFactory, pPlugin, pLoader);
+            pRouting            = &sCmdLine.routing;
+            pWrapper            = new jack::Wrapper(pFactory, pPlugin, pLoader, &info);
             if (pWrapper == NULL)
                 return STATUS_NO_MEM;
 
@@ -722,6 +749,14 @@ namespace lsp
                 // Initialize wrapper
                 if ((res = pUIWrapper->init(NULL)) != STATUS_OK)
                     return res;
+
+                // Minimize window if required
+                if (sCmdLine.minimized)
+                {
+                    tk::Window *wnd = pUIWrapper->window();
+                    if (wnd != NULL)
+                        wnd->state()->set_minimized();
+                }
             }
         #endif /* WITH_UI_FEATURE */
 
@@ -939,13 +974,11 @@ extern "C"
         };
 
         // Initialize loop
-        status_t res = w->init(plugin_id, argc, argv);
-        if (res != STATUS_OK)
-            return res;
+        status_t res                = w->init(plugin_id, argc, argv);
+        if (res == STATUS_OK)
+            *loop       = release_ptr(w); // Return loop
 
-        // Return loop
-        *loop       = release_ptr(w);
-        return STATUS_OK;
+        return res;
     }
 
 #ifdef __cplusplus
diff -pruN 1.2.21-5/modules/lsp-plugin-fw/src/wrap/vst3.cpp 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/wrap/vst3.cpp
--- 1.2.21-5/modules/lsp-plugin-fw/src/wrap/vst3.cpp	2025-03-01 12:42:57.460644376 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugin-fw/src/wrap/vst3.cpp	2025-08-26 18:15:48.113960705 +0000
@@ -32,6 +32,7 @@
 #include <lsp-plug.in/plug-fw/wrap/vst3/executor.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/factory.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/controller.h>
+#include <lsp-plug.in/plug-fw/wrap/vst3/event_handler.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/message.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/helpers.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/timer.h>
@@ -41,6 +42,7 @@
 #include <lsp-plug.in/plug-fw/wrap/vst3/impl/executor.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/impl/factory.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/impl/controller.h>
+#include <lsp-plug.in/plug-fw/wrap/vst3/impl/event_handler.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/impl/timer.h>
 #include <lsp-plug.in/plug-fw/wrap/vst3/impl/wrapper.h>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-ab-tester/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-ab-tester/.github/workflows/build.yml	2025-03-01 12:42:55.020659022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/.github/workflows/build.yml	2025-08-26 18:15:41.298026856 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-ab-tester/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-ab-tester/CHANGELOG	2025-03-01 12:42:55.020659022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/CHANGELOG	2025-08-26 18:15:41.298026856 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.18 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.17 ===
+* Updated build scripts and dependencies.
+
 === 1.0.16 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-ab-tester/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-ab-tester/dependencies.mk	2025-03-01 12:42:55.020659022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/dependencies.mk	2025-08-26 18:15:41.298026856 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-ab-tester/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-ab-tester/make/tools.mk	2025-03-01 12:42:55.024658998 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/make/tools.mk	2025-08-26 18:15:41.298026856 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-ab-tester/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/modules.mk
--- 1.2.21-5/modules/lsp-plugins-ab-tester/modules.mk	2025-03-01 12:42:55.024658998 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/modules.mk	2025-08-26 18:15:41.298026856 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-ab-tester/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/project.mk
--- 1.2.21-5/modules/lsp-plugins-ab-tester/project.mk	2025-03-01 12:42:55.024658998 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/project.mk	2025-08-26 18:15:41.298026856 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Template Plugin
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.16
+ARTIFACT_VERSION            = 1.0.18
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x2_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x2_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x2_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x2_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x4_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x4_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x4_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x4_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x8_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x8_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x8_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/res/doc/screenshots/ab_tester_x8_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-ab-tester/src/doc/manuals/plugins/ab_tester.php 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/src/doc/manuals/plugins/ab_tester.php
--- 1.2.21-5/modules/lsp-plugins-ab-tester/src/doc/manuals/plugins/ab_tester.php	2025-03-01 12:42:55.028658975 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/src/doc/manuals/plugins/ab_tester.php	2025-08-26 18:15:41.302026817 +0000
@@ -30,7 +30,7 @@
 	<li><b>Blind test</b> - toggles the blind test mode.</li>
 	<li><b>Reset rate</b> - allows to simply reset all ratings values to default values.</li>
 	<? if ($m == 'm') {?>
-	<li><b>Mono</b> - converts stereo output to mono output for testing mono compatiblity.</li>
+	<li><b>Mono</b> - converts stereo output to mono output for testing mono compatibility.</li>
 	<? } ?>
 	<li><b>Mute</b> - mutes the output and deselects any channel as being A/B tested.</li>
 </ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-ab-tester/src/main/meta/ab_tester.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/src/main/meta/ab_tester.cpp
--- 1.2.21-5/modules/lsp-plugins-ab-tester/src/main/meta/ab_tester.cpp	2025-03-01 12:42:55.028658975 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-ab-tester/src/main/meta/ab_tester.cpp	2025-08-26 18:15:41.302026817 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-ab-tester
  * Created on: 25 нояб. 2020 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_AB_TESTER_VERSION_MAJOR       1
 #define LSP_PLUGINS_AB_TESTER_VERSION_MINOR       0
-#define LSP_PLUGINS_AB_TESTER_VERSION_MICRO       16
+#define LSP_PLUGINS_AB_TESTER_VERSION_MICRO       18
 
 #define LSP_PLUGINS_AB_TESTER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -41,44 +41,44 @@ namespace lsp
         //-------------------------------------------------------------------------
         // Plugin metadata
 
-        #define BLIND_SWITCH(id, label, enable) \
-            SWITCH("bte" id, "Blind test enable " label, enable), \
+        #define BLIND_SWITCH(id, label, alias, enable) \
+            SWITCH("bte" id, "Blind test enable " label, "Test on" alias, enable), \
 
-        #define NO_BLIND_SWITCH(id, label, enable)
+        #define NO_BLIND_SWITCH(id, label, alias, enable)
 
-        #define ABTEST_MONO_CHANNEL(id, label, blind_switch, bte) \
+        #define ABTEST_MONO_CHANNEL(id, label, alias, blind_switch, bte) \
             AUDIO_INPUT("in" id, "Audio input " label), \
             OPT_RETURN_MONO("ret" id, "rin" id, "Audio return " label), \
-            AMP_GAIN100("g" id, "Input gain " label, 1.0), \
+            AMP_GAIN100("g" id, "Input gain " label, "In gain" alias, 1.0), \
             METER_GAIN("ism" id, "Input signal meter " label, GAIN_AMP_P_48_DB), \
-            blind_switch(id, label, bte) \
-            INT_CONTROL("rate" id, "Channel blind test rate " label, U_NONE, meta::ab_tester::RATE)
+            blind_switch(id, label, alias, bte) \
+            INT_CONTROL("rate" id, "Channel blind test rate " label, "Rate" alias, U_NONE, meta::ab_tester::RATE)
 
-        #define ABTEST_STEREO_CHANNEL(id, label, blind_switch, bte) \
+        #define ABTEST_STEREO_CHANNEL(id, label, alias, blind_switch, bte) \
             AUDIO_INPUT("in" id "l", "Audio input " label " Left"), \
             AUDIO_INPUT("in" id "r", "Audio input " label " Right"), \
             OPT_RETURN_STEREO("ret" id, "rin" id, "Audio return " label), \
-            AMP_GAIN100("g" id, "Input gain " label, 1.0), \
+            AMP_GAIN100("g" id, "Input gain " label, "In gain" alias, 1.0), \
             METER_GAIN("ism" id "l", "Input signal meter " label " Left", GAIN_AMP_P_48_DB), \
             METER_GAIN("ism" id "r", "Input signal meter " label " Right", GAIN_AMP_P_48_DB), \
-            blind_switch(id, label, bte) \
-            INT_CONTROL("rate" id, "Channel blind test rate " label, U_NONE, meta::ab_tester::RATE) \
+            blind_switch(id, label, alias, bte) \
+            INT_CONTROL("rate" id, "Channel blind test rate " label, "Rate" alias, U_NONE, meta::ab_tester::RATE) \
 
         #define ABTEST_GLOBAL(max_sel) \
-            TRIGGER("rst", "Reset channel rating"), \
-            SWITCH("bte", "Blind test enable", 0.0), \
-            TRIGGER("shuf", "Re-shuffle channels"), \
-            INT_CONTROL_RANGE("sel", "Channel selector", U_NONE, 0, max_sel, 0, 1)
+            TRIGGER("rst", "Reset channel rating", "Reset"), \
+            SWITCH("bte", "Blind test enable", "Blind test", 0.0), \
+            TRIGGER("shuf", "Re-shuffle channels", "Shuffle"), \
+            INT_CONTROL_ALL("sel", "Channel selector", "Channel selector", U_NONE, 0, max_sel, 0, 1)
 
         #define ABTEST_MONO_SWITCH \
-            SWITCH("mono", "Mono switch", 0.0f)
+            SWITCH("mono", "Mono switch", "Mono", 0.0f)
 
         static const port_t ab_tester_x2_mono_ports[] =
         {
             AUDIO_OUTPUT_MONO,
             ABTEST_GLOBAL(3),
-            ABTEST_MONO_CHANNEL("_1", "1", NO_BLIND_SWITCH, 1.0),
-            ABTEST_MONO_CHANNEL("_2", "2", NO_BLIND_SWITCH, 1.0),
+            ABTEST_MONO_CHANNEL("_1", "1", " 1", NO_BLIND_SWITCH, 1.0),
+            ABTEST_MONO_CHANNEL("_2", "2", " 2", NO_BLIND_SWITCH, 1.0),
             PORTS_END
         };
 
@@ -86,10 +86,10 @@ namespace lsp
         {
             AUDIO_OUTPUT_MONO,
             ABTEST_GLOBAL(5),
-            ABTEST_MONO_CHANNEL("_1", "1", BLIND_SWITCH, 1.0),
-            ABTEST_MONO_CHANNEL("_2", "2", BLIND_SWITCH, 1.0),
-            ABTEST_MONO_CHANNEL("_3", "3", BLIND_SWITCH, 0.0),
-            ABTEST_MONO_CHANNEL("_4", "4", BLIND_SWITCH, 0.0),
+            ABTEST_MONO_CHANNEL("_1", "1", " 1", BLIND_SWITCH, 1.0),
+            ABTEST_MONO_CHANNEL("_2", "2", " 2", BLIND_SWITCH, 1.0),
+            ABTEST_MONO_CHANNEL("_3", "3", " 3", BLIND_SWITCH, 0.0),
+            ABTEST_MONO_CHANNEL("_4", "4", " 4", BLIND_SWITCH, 0.0),
             PORTS_END
         };
 
@@ -97,14 +97,14 @@ namespace lsp
         {
             AUDIO_OUTPUT_MONO,
             ABTEST_GLOBAL(9),
-            ABTEST_MONO_CHANNEL("_1", "1", BLIND_SWITCH, 1.0),
-            ABTEST_MONO_CHANNEL("_2", "2", BLIND_SWITCH, 1.0),
-            ABTEST_MONO_CHANNEL("_3", "3", BLIND_SWITCH, 0.0),
-            ABTEST_MONO_CHANNEL("_4", "4", BLIND_SWITCH, 0.0),
-            ABTEST_MONO_CHANNEL("_5", "5", BLIND_SWITCH, 0.0),
-            ABTEST_MONO_CHANNEL("_6", "6", BLIND_SWITCH, 0.0),
-            ABTEST_MONO_CHANNEL("_7", "7", BLIND_SWITCH, 0.0),
-            ABTEST_MONO_CHANNEL("_8", "8", BLIND_SWITCH, 0.0),
+            ABTEST_MONO_CHANNEL("_1", "1", " 1", BLIND_SWITCH, 1.0),
+            ABTEST_MONO_CHANNEL("_2", "2", " 2", BLIND_SWITCH, 1.0),
+            ABTEST_MONO_CHANNEL("_3", "3", " 3", BLIND_SWITCH, 0.0),
+            ABTEST_MONO_CHANNEL("_4", "4", " 4", BLIND_SWITCH, 0.0),
+            ABTEST_MONO_CHANNEL("_5", "5", " 5", BLIND_SWITCH, 0.0),
+            ABTEST_MONO_CHANNEL("_6", "6", " 6", BLIND_SWITCH, 0.0),
+            ABTEST_MONO_CHANNEL("_7", "7", " 7", BLIND_SWITCH, 0.0),
+            ABTEST_MONO_CHANNEL("_8", "8", " 8", BLIND_SWITCH, 0.0),
             PORTS_END
         };
 
@@ -113,8 +113,8 @@ namespace lsp
             AUDIO_OUTPUT_STEREO,
             ABTEST_GLOBAL(3),
             ABTEST_MONO_SWITCH,
-            ABTEST_STEREO_CHANNEL("_1", "1", NO_BLIND_SWITCH, 1.0),
-            ABTEST_STEREO_CHANNEL("_2", "2", NO_BLIND_SWITCH, 1.0),
+            ABTEST_STEREO_CHANNEL("_1", "1", " 1", NO_BLIND_SWITCH, 1.0),
+            ABTEST_STEREO_CHANNEL("_2", "2", " 2", NO_BLIND_SWITCH, 1.0),
             PORTS_END
         };
 
@@ -123,10 +123,10 @@ namespace lsp
             AUDIO_OUTPUT_STEREO,
             ABTEST_GLOBAL(5),
             ABTEST_MONO_SWITCH,
-            ABTEST_STEREO_CHANNEL("_1", "1", BLIND_SWITCH, 1.0),
-            ABTEST_STEREO_CHANNEL("_2", "2", BLIND_SWITCH, 1.0),
-            ABTEST_STEREO_CHANNEL("_3", "3", BLIND_SWITCH, 0.0),
-            ABTEST_STEREO_CHANNEL("_4", "4", BLIND_SWITCH, 0.0),
+            ABTEST_STEREO_CHANNEL("_1", "1", " 1", BLIND_SWITCH, 1.0),
+            ABTEST_STEREO_CHANNEL("_2", "2", " 2", BLIND_SWITCH, 1.0),
+            ABTEST_STEREO_CHANNEL("_3", "3", " 3", BLIND_SWITCH, 0.0),
+            ABTEST_STEREO_CHANNEL("_4", "4", " 4", BLIND_SWITCH, 0.0),
             PORTS_END
         };
 
@@ -135,14 +135,14 @@ namespace lsp
             AUDIO_OUTPUT_STEREO,
             ABTEST_GLOBAL(9),
             ABTEST_MONO_SWITCH,
-            ABTEST_STEREO_CHANNEL("_1", "1", BLIND_SWITCH, 1.0),
-            ABTEST_STEREO_CHANNEL("_2", "2", BLIND_SWITCH, 1.0),
-            ABTEST_STEREO_CHANNEL("_3", "3", BLIND_SWITCH, 0.0),
-            ABTEST_STEREO_CHANNEL("_4", "4", BLIND_SWITCH, 0.0),
-            ABTEST_STEREO_CHANNEL("_5", "5", BLIND_SWITCH, 0.0),
-            ABTEST_STEREO_CHANNEL("_6", "6", BLIND_SWITCH, 0.0),
-            ABTEST_STEREO_CHANNEL("_7", "7", BLIND_SWITCH, 0.0),
-            ABTEST_STEREO_CHANNEL("_8", "8", BLIND_SWITCH, 0.0),
+            ABTEST_STEREO_CHANNEL("_1", "1", " 1", BLIND_SWITCH, 1.0),
+            ABTEST_STEREO_CHANNEL("_2", "2", " 2", BLIND_SWITCH, 1.0),
+            ABTEST_STEREO_CHANNEL("_3", "3", " 3", BLIND_SWITCH, 0.0),
+            ABTEST_STEREO_CHANNEL("_4", "4", " 4", BLIND_SWITCH, 0.0),
+            ABTEST_STEREO_CHANNEL("_5", "5", " 5", BLIND_SWITCH, 0.0),
+            ABTEST_STEREO_CHANNEL("_6", "6", " 6", BLIND_SWITCH, 0.0),
+            ABTEST_STEREO_CHANNEL("_7", "7", " 7", BLIND_SWITCH, 0.0),
+            ABTEST_STEREO_CHANNEL("_8", "8", " 8", BLIND_SWITCH, 0.0),
             PORTS_END
         };
 
diff -pruN 1.2.21-5/modules/lsp-plugins-art-delay/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-art-delay/.github/workflows/build.yml	2025-03-01 12:43:01.044622863 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/.github/workflows/build.yml	2025-08-26 18:15:46.525976117 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-art-delay/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-art-delay/CHANGELOG	2025-03-01 12:43:01.048622839 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/CHANGELOG	2025-08-26 18:15:46.525976117 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.27 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
 === 1.0.25 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-art-delay/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-art-delay/dependencies.mk	2025-03-01 12:43:01.048622839 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/dependencies.mk	2025-08-26 18:15:46.525976117 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-art-delay/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-art-delay/make/tools.mk	2025-03-01 12:43:01.048622839 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/make/tools.mk	2025-08-26 18:15:46.525976117 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-art-delay/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/modules.mk
--- 1.2.21-5/modules/lsp-plugins-art-delay/modules.mk	2025-03-01 12:43:01.048622839 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/modules.mk	2025-08-26 18:15:46.525976117 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-art-delay/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/project.mk
--- 1.2.21-5/modules/lsp-plugins-art-delay/project.mk	2025-03-01 12:43:01.048622839 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/project.mk	2025-08-26 18:15:46.525976117 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Artistic Delay Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.25
+ARTIFACT_VERSION            = 1.0.27
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-art-delay/res/doc/screenshots/art_delay_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/res/doc/screenshots/art_delay_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-art-delay/res/doc/screenshots/art_delay_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/res/doc/screenshots/art_delay_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-art-delay/src/doc/manuals/plugins/art_delay.php 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/src/doc/manuals/plugins/art_delay.php
--- 1.2.21-5/modules/lsp-plugins-art-delay/src/doc/manuals/plugins/art_delay.php	2025-03-01 12:43:01.052622816 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/src/doc/manuals/plugins/art_delay.php	2025-08-26 18:15:46.533976039 +0000
@@ -15,8 +15,8 @@
 	<li>Panning of each individual line.</li>
 </ul>
 <p>Almost all parameters can be smootly automated.</p>
-<p>The delay alows to set up to 256 seconds delay for each delay line. This may yield to huge memory
-consumption. To get some memory economy, the memory is consumed in <b>on-demand</b> mode: the delay line
+<p>The delay allows to set up to 256 seconds delay for each delay line. This may yield huge memory
+consumption. To economize memory consumption, the memory is consumed in <b>on-demand</b> mode: the delay line
 allocates memory only if it is turned on in the delay effect.</p>
 <p>The following restrictions are defined for parameters:</p>
 <ul>
@@ -51,7 +51,7 @@ allocates memory only if it is turned on
 
 <b>Global Delay Line Controls</b> section:
 <ul>
-	<li><b>On</b> - enables the corresponding delay. When turned on, the desired memory area is allocated for the delay so it could
+	<li><b>On</b> - enables the corresponding delay. When turned on, the desired memory area is allocated for the delay so it can
 		operate in real-time mode. When turned off, the allocated memory gets freed.</li>
 	<li><b>Solo</b> - turns the corresponding delay line into soloing mode. All other non-soloing delay lines become muted.</li>
 	<li><b>Mute</b> - mutes the corresponding delay line.</li>
@@ -96,7 +96,7 @@ allocates memory only if it is turned on
 	</ul>
 	<li><b>Delay Line Processing</b> - the main delay controls.</li>
 	<ul>
-		<li><b>On</b> - enables the delay. When turned on, the desired memory area is allocated for the delay so it could
+		<li><b>On</b> - enables the delay. When turned on, the desired memory area is allocated for the delay so it can
 		operate in real-time mode. When turned off, the allocated memory gets freed.</li>
 		<li><b>Solo</b> - turns the delay line into soloing mode. All other non-soloing delay lines become muted.</li>
 		<li><b>Mute</b> - mutes the delay line.</li>
diff -pruN 1.2.21-5/modules/lsp-plugins-art-delay/src/main/meta/art_delay.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/src/main/meta/art_delay.cpp
--- 1.2.21-5/modules/lsp-plugins-art-delay/src/main/meta/art_delay.cpp	2025-03-01 12:43:01.052622816 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-art-delay/src/main/meta/art_delay.cpp	2025-08-26 18:15:46.533976039 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-art-delay
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_ART_DELAY_VERSION_MAJOR       1
 #define LSP_PLUGINS_ART_DELAY_VERSION_MINOR       0
-#define LSP_PLUGINS_ART_DELAY_VERSION_MICRO       25
+#define LSP_PLUGINS_ART_DELAY_VERSION_MICRO       27
 
 #define LSP_PLUGINS_ART_DELAY_VERSION  \
     LSP_MODULE_VERSION( \
@@ -135,71 +135,71 @@ namespace lsp
             { NULL, NULL }
         };
 
-        #define ART_PAN_MONO(id, label) \
-            PAN_CTL("p" id, label " panorama", 0.0f)
+        #define ART_PAN_MONO(id, label, alias) \
+            PAN_CTL("p" id, label " panorama", "Pan" alias, 0.0f)
 
-        #define ART_PAN_STEREO(id, label) \
-            PAN_CTL("pl" id, label " left channel panorama", -100.0f), \
-            PAN_CTL("pr" id, label " right channel panorama", 100.0f)
+        #define ART_PAN_STEREO(id, label, alias) \
+            PAN_CTL("pl" id, label " left channel panorama", "Pan L" alias, -100.0f), \
+            PAN_CTL("pr" id, label " right channel panorama", "Pan R" alias, 100.0f)
 
         #define ART_DELAY_COMMON(pan)  \
             BYPASS, \
-            COMBO("lsel", "Delay line selector", 0, art_delay_lines), \
-            COMBO("dmax", "Maximum possible delay selector", 3, art_delay_maxlen), \
-            pan("_in", "Input"), \
+            COMBO("lsel", "Delay line selector", "Delay selector", 0, art_delay_lines), \
+            COMBO("dmax", "Maximum possible delay selector", "Max selector", 3, art_delay_maxlen), \
+            pan("_in", "Input", " In"), \
             DRY_GAIN(GAIN_AMP_0_DB), \
             WET_GAIN(GAIN_AMP_0_DB), \
             DRYWET(100.0f), \
-            SWITCH("dry_on", "Dry enable", 1.0f), \
-            SWITCH("wet_on", "Wet enable", 1.0f), \
-            SWITCH("mono", "Mono output", 0.0f), \
-            SWITCH("fb", "Feedback", 1.0f), \
-            AMP_GAIN1("fbg", "Feedback gain", GAIN_AMP_0_DB), \
+            SWITCH("dry_on", "Dry enable", "Dry on", 1.0f), \
+            SWITCH("wet_on", "Wet enable", "Wet on", 1.0f), \
+            SWITCH("mono", "Mono output", "Mono", 0.0f), \
+            SWITCH("fb", "Feedback", "Feedback", 1.0f), \
+            AMP_GAIN1("fbg", "Feedback gain", "Feed", GAIN_AMP_0_DB), \
             OUT_GAIN, \
             METER("dmaxv", "Actual delay maximum value", U_SEC, art_delay_metadata::DSEL), \
             METER("memuse", "Overall memory usage", U_BYTES, art_delay_metadata::MEMORY)
 
         #define ART_DELAY_TEMPO(id) \
-            CONTROL("tempo" #id, "Tempo " #id, U_BPM, art_delay_metadata::TEMPO), \
-            COMBO("ratio" #id, "Tempo " #id " ratio", 0, art_delay_tempo_ratio), \
-            SWITCH("sync" #id, "Tempo" #id " sync", 0.0f), \
+            CONTROL("tempo" #id, "Tempo " #id, "Tempo " #id, U_BPM, art_delay_metadata::TEMPO), \
+            COMBO("ratio" #id, "Tempo " #id " ratio", "Ratio " #id, 0, art_delay_tempo_ratio), \
+            SWITCH("sync" #id, "Tempo" #id " sync", "Sync " #id, 0.0f), \
             METER("atempo" #id, "Delay " #id " actual tempo", U_BPM, art_delay_metadata::ATEMPO)
 
         #define ART_DELAY_PROCESSOR(id, pan) \
-            SWITCH("on" #id, "Delay " #id " on", 0.0f), \
-            SWITCH("s" #id, "Delay " #id " solo", 0.0f), \
-            SWITCH("m" #id, "Delay " #id " mute", 0.0f), \
-            COMBO("dref" #id, "Delay " #id " reference", 0, art_delay_references), \
-            CONTROL("drefm" #id, "Delay " #id " reference multiplier", U_NONE, art_delay_metadata::DELAY_MULT), \
-            COMBO("tref" #id, "Delay " #id " tempo reference", 0, art_delay_tempo), \
-            CONTROL("treff" #id, "Delay " #id " bar fraction", U_BAR, art_delay_metadata::DFRACTION), \
-            INT_CONTROL("trefd" #id, "Delay " #id " bar denominator", U_BEAT, art_delay_metadata::DENOMINATOR), \
-            CONTROL("trefm" #id, "Delay " #id " bar multiplier", U_NONE, art_delay_metadata::BAR_MULT), \
-            CONTROL("frac" #id, "Delay " #id " fraction", U_BAR, art_delay_metadata::FRACTION), \
-            INT_CONTROL("den" #id, "Delay " #id " denominator", U_BEAT, art_delay_metadata::DENOMINATOR), \
-            CONTROL("dadd" #id, "Delay " #id " time addition", U_SEC, art_delay_metadata::TIME), \
-            SWITCH("eq" #id, "Equalizer " #id " on", 0.0f), \
-            SWITCH("lc" #id, "Delay " #id " low-cut filter", 0.0f), \
-            LOG_CONTROL("flc" #id, "Delay " #id " low-cut frequency", U_HZ, art_delay_metadata::LOW_CUT), \
-            SWITCH("hc" #id, "Delay " #id " high-cut filter", 0.0f), \
-            LOG_CONTROL("fhc" #id, "Delay " #id " high-cut frequency", U_HZ, art_delay_metadata::HIGH_CUT), \
-            LOG_CONTROL("fbs" #id, "Delay " #id " sub-bass", U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
-            LOG_CONTROL("fbb" #id, "Delay " #id " bass", U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
-            LOG_CONTROL("fbm" #id, "Delay " #id " middle", U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
-            LOG_CONTROL("fbp" #id, "Delay " #id " presence", U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
-            LOG_CONTROL("fbt" #id, "Delay " #id " treble", U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
-            pan(#id, "Delay " #id), \
-            AMP_GAIN10("dg" #id, "Delay " #id " gain", GAIN_AMP_0_DB), \
+            SWITCH("on" #id, "Delay " #id " on", "Delay on " #id, 0.0f), \
+            SWITCH("s" #id, "Delay " #id " solo", "Solo " #id, 0.0f), \
+            SWITCH("m" #id, "Delay " #id " mute", "Mute " #id, 0.0f), \
+            COMBO("dref" #id, "Delay " #id " reference", "Reference " #id, 0, art_delay_references), \
+            CONTROL("drefm" #id, "Delay " #id " reference multiplier", "Ref mul " #id, U_NONE, art_delay_metadata::DELAY_MULT), \
+            COMBO("tref" #id, "Delay " #id " tempo reference", "Tempo ref " #id, 0, art_delay_tempo), \
+            CONTROL("treff" #id, "Delay " #id " bar fraction", "Bar frac " #id, U_BAR, art_delay_metadata::DFRACTION), \
+            INT_CONTROL("trefd" #id, "Delay " #id " bar denominator", "Bar denom " #id, U_BEAT, art_delay_metadata::DENOMINATOR), \
+            CONTROL("trefm" #id, "Delay " #id " bar multiplier", "Bar mul " #id, U_NONE, art_delay_metadata::BAR_MULT), \
+            CONTROL("frac" #id, "Delay " #id " fraction", "Frac " #id, U_BAR, art_delay_metadata::FRACTION), \
+            INT_CONTROL("den" #id, "Delay " #id " denominator", "Denom " #id, U_BEAT, art_delay_metadata::DENOMINATOR), \
+            CONTROL("dadd" #id, "Delay " #id " time addition", "Add " #id, U_SEC, art_delay_metadata::TIME), \
+            SWITCH("eq" #id, "Equalizer " #id " on", "Eqon " #id, 0.0f), \
+            SWITCH("lc" #id, "Delay " #id " low-cut filter", "LCF on " #id, 0.0f), \
+            LOG_CONTROL("flc" #id, "Delay " #id " low-cut frequency", "LCF freq " #id, U_HZ, art_delay_metadata::LOW_CUT), \
+            SWITCH("hc" #id, "Delay " #id " high-cut filter", "HCF on " #id, 0.0f), \
+            LOG_CONTROL("fhc" #id, "Delay " #id " high-cut frequency", "HCF freq " #id, U_HZ, art_delay_metadata::HIGH_CUT), \
+            LOG_CONTROL("fbs" #id, "Delay " #id " sub-bass", "Sub lvl " #id, U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
+            LOG_CONTROL("fbb" #id, "Delay " #id " bass", "Bass lvl " #id, U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
+            LOG_CONTROL("fbm" #id, "Delay " #id " middle", "Mid lvl " #id, U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
+            LOG_CONTROL("fbp" #id, "Delay " #id " presence", "Presence lvl " #id, U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
+            LOG_CONTROL("fbt" #id, "Delay " #id " treble", "Treble lvl " #id, U_GAIN_AMP, art_delay_metadata::BAND_GAIN), \
+            pan(#id, "Delay " #id, " " #id), \
+            AMP_GAIN10("dg" #id, "Delay " #id " gain", "Gain " #id, GAIN_AMP_0_DB), \
             HUE_CTL("hue" #id, "Delay " #id " hue", float(id) / art_delay_metadata::MAX_PROCESSORS ), \
-            SWITCH("fbe" #id, "Delay " #id " feedback enable", 0.0f), \
-            AMP_GAIN1("fbg" #id, "Delay " #id " feedback gain", GAIN_AMP_M_INF_DB), \
-            COMBO("fbtr" #id, "Delay " #id " feedback tempo reference", 0, art_delay_tempo), \
-            CONTROL("fbbf" #id, "Delay " #id " feedback bar fraction", U_BAR, art_delay_metadata::DFRACTION), \
-            INT_CONTROL("fbbd" #id, "Delay " #id " feedback bar denominator", U_BEAT, art_delay_metadata::DENOMINATOR), \
-            CONTROL("fbbm" #id, "Delay " #id " feedback bar multiplier", U_NONE, art_delay_metadata::BAR_MULT), \
-            CONTROL("fbf" #id, "Delay " #id " feedback fraction", U_BAR, art_delay_metadata::FRACTION), \
-            INT_CONTROL("fbd" #id, "Delay " #id " feedback denominator", U_BEAT, art_delay_metadata::DENOMINATOR), \
-            CONTROL("fbadd" #id, "Delay " #id " feedback time addition", U_SEC, art_delay_metadata::TIME), \
+            SWITCH("fbe" #id, "Delay " #id " feedback enable", "Feed on " #id, 0.0f), \
+            AMP_GAIN1("fbg" #id, "Delay " #id " feedback gain", "Feed " #id, GAIN_AMP_M_INF_DB), \
+            COMBO("fbtr" #id, "Delay " #id " feedback tempo reference", "Feed ref " #id, 0, art_delay_tempo), \
+            CONTROL("fbbf" #id, "Delay " #id " feedback bar fraction", "Feed bar frac" #id, U_BAR, art_delay_metadata::DFRACTION), \
+            INT_CONTROL("fbbd" #id, "Delay " #id " feedback bar denominator", "Feed bar den " #id, U_BEAT, art_delay_metadata::DENOMINATOR), \
+            CONTROL("fbbm" #id, "Delay " #id " feedback bar multiplier", "Feed bar mul " #id, U_NONE, art_delay_metadata::BAR_MULT), \
+            CONTROL("fbf" #id, "Delay " #id " feedback fraction", "Feed frac " #id, U_BAR, art_delay_metadata::FRACTION), \
+            INT_CONTROL("fbd" #id, "Delay " #id " feedback denominator", "Feed denom " #id, U_BEAT, art_delay_metadata::DENOMINATOR), \
+            CONTROL("fbadd" #id, "Delay " #id " feedback time addition", "Feed add " #id, U_SEC, art_delay_metadata::TIME), \
             METER("adt" #id, "Delay " #id " actual time", U_SEC, art_delay_metadata::DSEL), \
             METER("afbt" #id, "Delay " #id " actual feedback time", U_SEC, art_delay_metadata::DSEL), \
             BLINK("door" #id, "Delay " #id " out of range"), \
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-autogain/.github/workflows/build.yml	2025-03-01 12:43:00.112628459 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/.github/workflows/build.yml	2025-08-26 18:15:46.433977010 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-autogain/CHANGELOG	2025-03-01 12:43:00.112628459 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/CHANGELOG	2025-08-26 18:15:46.433977010 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.12 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.11 ===
+* Updated build scripts and dependencies.
+
 === 1.0.10 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-autogain/dependencies.mk	2025-03-01 12:43:00.116628434 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/dependencies.mk	2025-08-26 18:15:46.433977010 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-autogain/make/tools.mk	2025-03-01 12:43:00.116628434 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/make/tools.mk	2025-08-26 18:15:46.437976971 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/modules.mk
--- 1.2.21-5/modules/lsp-plugins-autogain/modules.mk	2025-03-01 12:43:00.116628434 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/modules.mk	2025-08-26 18:15:46.437976971 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/project.mk
--- 1.2.21-5/modules/lsp-plugins-autogain/project.mk	2025-03-01 12:43:00.116628434 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/project.mk	2025-08-26 18:15:46.437976971 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Automatic Gain Control Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.10
+ARTIFACT_VERSION            = 1.0.12
 
 
 
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/res/doc/config/autogain_mono.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/config/autogain_mono.cfg
--- 1.2.21-5/modules/lsp-plugins-autogain/res/doc/config/autogain_mono.cfg	2025-03-01 12:43:00.116628434 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/config/autogain_mono.cfg	1970-01-01 00:00:00.000000000 +0000
@@ -1,149 +0,0 @@
-# -------------------------------------------------------------------------------
-# This file contains configuration of the audio plugin.
-#   Package:             test (Test Case)
-#   Package version:     0.0.0-devel
-#   Plugin name:         Autogain Mono (Autogain Mono)
-#   Plugin version:      1.0.0
-#   UID:                 autogain_mono
-#   LV2 URI:             http://lsp-plug.in/plugins/lv2/autogain_mono
-#   VST identifier:      ag1m
-#   LADSPA identifier:   5002274
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/autogain_mono
-# 
-# (C) Linux Studio Plugins
-#   https://lsp-plug.in/
-# 
-# -------------------------------------------------------------------------------
-
-# Bypass [boolean]: true/false
-bypass = false
-
-# Sidechain preamp [dB]: -60.00000000..40.00000000
-preamp = 0.00 db
-
-# Sidechain lookahead [ms]: 0.00000000..40.00000000
-lkahead = 0.00000
-
-# Loudness measuring long period [ms]: 100.00000000..2000.00000000
-lperiod = 400.00000
-
-# Loudness measuring short period [ms]: 5.00000000..100.00000000
-speriod = 20.00000
-
-# Weighting function: 0..5
-#   0: None
-#   1: A-Weighted
-#   2: B-Weighted
-#   3: C-Weighted
-#   4: D-Weighted
-#   5: K-Weighted
-weight = 5
-
-# Desired loudness level [LUFS]: -60.00000000..0.00000000
-level = -23.00000
-
-# Level drift [dB]: 0.00000000..24.00000000
-drift = 12.00 db
-
-# The level of silence [LUFS]: -84.00000000..-36.00000000
-silence = -72.00000
-
-# Enable maximum amplification gain limitation [boolean]: true/false
-max_on = false
-
-# The maximum amplification gain [dB]: 0.00000000..108.00000000
-max_amp = 36.00 db
-
-# Enable quick amplifier [boolean]: true/false
-qamp = false
-
-# Long gain grow amount: 0..10
-#   0: 1 dB
-#   1: 3 dB
-#   2: 6 dB
-#   3: 9 dB
-#   4: 10 dB
-#   5: 12 dB
-#   6: 15 dB
-#   7: 18 dB
-#   8: 20 dB
-#   9: 21 dB
-#   10: 24 dB
-vgrow_l = 5
-
-# Long gain grow time [ms]: 10.00000000..10000.00000000
-tgrow_l = 500.00000
-
-# Long gain fall amount: 0..10
-#   0: 1 dB
-#   1: 3 dB
-#   2: 6 dB
-#   3: 9 dB
-#   4: 10 dB
-#   5: 12 dB
-#   6: 15 dB
-#   7: 18 dB
-#   8: 20 dB
-#   9: 21 dB
-#   10: 24 dB
-vfall_l = 5
-
-# Long gain fall time [ms]: 10.00000000..10000.00000000
-tfall_l = 500.00000
-
-# Short gain grow amount: 0..10
-#   0: 1 dB
-#   1: 3 dB
-#   2: 6 dB
-#   3: 9 dB
-#   4: 10 dB
-#   5: 12 dB
-#   6: 15 dB
-#   7: 18 dB
-#   8: 20 dB
-#   9: 21 dB
-#   10: 24 dB
-vgrow_s = 5
-
-# Short gain grow time [ms]: 1.00000000..500.00000000
-tgrow_s = 40.00000
-
-# Short gain fall amount: 0..10
-#   0: 1 dB
-#   1: 3 dB
-#   2: 6 dB
-#   3: 9 dB
-#   4: 10 dB
-#   5: 12 dB
-#   6: 15 dB
-#   7: 18 dB
-#   8: 20 dB
-#   9: 21 dB
-#   10: 24 dB
-vfall_s = 5
-
-# Short gain fall time [ms]: 0.10000000..40.00000000
-tfall_s = 10.00000
-
-# Input metering enable for long period [boolean]: true/false
-e_in_l = true
-
-# Input metering enable for short period [boolean]: true/false
-e_in_s = true
-
-# Output metering enable for long period [boolean]: true/false
-e_out_l = true
-
-# Output metering enable for short period [boolean]: true/false
-e_out_s = true
-
-# Gain correction metering [boolean]: true/false
-e_g = true
-
-
-# -------------------------------------------------------------------------------
-# KVT parameters
-# -------------------------------------------------------------------------------
-
-
-# -------------------------------------------------------------------------------
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/res/doc/config/autogain_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/config/autogain_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-autogain/res/doc/config/autogain_stereo.cfg	2025-03-01 12:43:00.116628434 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/config/autogain_stereo.cfg	1970-01-01 00:00:00.000000000 +0000
@@ -1,149 +0,0 @@
-# -------------------------------------------------------------------------------
-# This file contains configuration of the audio plugin.
-#   Package:             test (Test Case)
-#   Package version:     0.0.0-devel
-#   Plugin name:         Autogain Stereo (Autogain Stereo)
-#   Plugin version:      1.0.0
-#   UID:                 autogain_stereo
-#   LV2 URI:             http://lsp-plug.in/plugins/lv2/autogain_stereo
-#   VST identifier:      ag1s
-#   LADSPA identifier:   5002275
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/autogain_stereo
-# 
-# (C) Linux Studio Plugins
-#   https://lsp-plug.in/
-# 
-# -------------------------------------------------------------------------------
-
-# Bypass [boolean]: true/false
-bypass = false
-
-# Sidechain preamp [dB]: -60.00000000..40.00000000
-preamp = 0.00 db
-
-# Sidechain lookahead [ms]: 0.00000000..40.00000000
-lkahead = 0.00000
-
-# Loudness measuring long period [ms]: 100.00000000..2000.00000000
-lperiod = 400.00000
-
-# Loudness measuring short period [ms]: 5.00000000..100.00000000
-speriod = 20.00000
-
-# Weighting function: 0..5
-#   0: None
-#   1: A-Weighted
-#   2: B-Weighted
-#   3: C-Weighted
-#   4: D-Weighted
-#   5: K-Weighted
-weight = 5
-
-# Desired loudness level [LUFS]: -60.00000000..0.00000000
-level = -23.00000
-
-# Level drift [dB]: 0.00000000..24.00000000
-drift = 12.00 db
-
-# The level of silence [LUFS]: -84.00000000..-36.00000000
-silence = -72.00000
-
-# Enable maximum amplification gain limitation [boolean]: true/false
-max_on = false
-
-# The maximum amplification gain [dB]: 0.00000000..108.00000000
-max_amp = 36.00 db
-
-# Enable quick amplifier [boolean]: true/false
-qamp = false
-
-# Long gain grow amount: 0..10
-#   0: 1 dB
-#   1: 3 dB
-#   2: 6 dB
-#   3: 9 dB
-#   4: 10 dB
-#   5: 12 dB
-#   6: 15 dB
-#   7: 18 dB
-#   8: 20 dB
-#   9: 21 dB
-#   10: 24 dB
-vgrow_l = 5
-
-# Long gain grow time [ms]: 10.00000000..10000.00000000
-tgrow_l = 500.00000
-
-# Long gain fall amount: 0..10
-#   0: 1 dB
-#   1: 3 dB
-#   2: 6 dB
-#   3: 9 dB
-#   4: 10 dB
-#   5: 12 dB
-#   6: 15 dB
-#   7: 18 dB
-#   8: 20 dB
-#   9: 21 dB
-#   10: 24 dB
-vfall_l = 5
-
-# Long gain fall time [ms]: 10.00000000..10000.00000000
-tfall_l = 500.00000
-
-# Short gain grow amount: 0..10
-#   0: 1 dB
-#   1: 3 dB
-#   2: 6 dB
-#   3: 9 dB
-#   4: 10 dB
-#   5: 12 dB
-#   6: 15 dB
-#   7: 18 dB
-#   8: 20 dB
-#   9: 21 dB
-#   10: 24 dB
-vgrow_s = 5
-
-# Short gain grow time [ms]: 1.00000000..500.00000000
-tgrow_s = 40.00000
-
-# Short gain fall amount: 0..10
-#   0: 1 dB
-#   1: 3 dB
-#   2: 6 dB
-#   3: 9 dB
-#   4: 10 dB
-#   5: 12 dB
-#   6: 15 dB
-#   7: 18 dB
-#   8: 20 dB
-#   9: 21 dB
-#   10: 24 dB
-vfall_s = 5
-
-# Short gain fall time [ms]: 0.10000000..40.00000000
-tfall_s = 10.00000
-
-# Input metering enable for long period [boolean]: true/false
-e_in_l = true
-
-# Input metering enable for short period [boolean]: true/false
-e_in_s = true
-
-# Output metering enable for long period [boolean]: true/false
-e_out_l = true
-
-# Output metering enable for short period [boolean]: true/false
-e_out_s = true
-
-# Gain correction metering [boolean]: true/false
-e_g = true
-
-
-# -------------------------------------------------------------------------------
-# KVT parameters
-# -------------------------------------------------------------------------------
-
-
-# -------------------------------------------------------------------------------
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/res/doc/config/sc_autogain_mono.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/config/sc_autogain_mono.cfg
--- 1.2.21-5/modules/lsp-plugins-autogain/res/doc/config/sc_autogain_mono.cfg	2025-03-01 12:43:00.116628434 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/config/sc_autogain_mono.cfg	1970-01-01 00:00:00.000000000 +0000
@@ -1,170 +0,0 @@
-# -------------------------------------------------------------------------------
-# This file contains configuration of the audio plugin.
-#   Package:             test (Test Case)
-#   Package version:     0.0.0-devel
-#   Plugin name:         Sidechain Autogain Mono (Sidechain Autogain Mono)
-#   Plugin version:      1.0.3
-#   UID:                 sc_autogain_mono
-#   LV2 URI:             http://lsp-plug.in/plugins/lv2/sc_autogain_mono
-#   VST 2.x identifier:  ag1M
-#   VST 3.x identifier:  6473702073636167316D20206167314D
-#   LADSPA identifier:   5002276
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/sc_autogain_mono
-# 
-# (C) Test Case
-#   https://lsp-plug.in/
-# 
-# -------------------------------------------------------------------------------
-
-# Bypass [boolean]: true/false
-bypass = false
-
-# Sidechain preamp [dB]: -60.00000000..40.00000000
-preamp = 0.00000
-
-# Sidechain lookahead [ms]: 0.00000000..40.00000000
-lkahead = 0.00000
-
-# Sidechain mode: 0..2
-#   0: Internal
-#   1: Control
-#   2: Match
-scmode = 2
-
-# Sidechain metering enable for long period [boolean]: true/false
-e_sc_l = true
-
-# Sidechain metering enable for short period [boolean]: true/false
-e_sc_s = true
-
-# Loudness measuring long period [ms]: 100.00000000..2000.00000000
-lperiod = 400.00000
-
-# Loudness measuring short period [ms]: 5.00000000..100.00000000
-speriod = 20.00000
-
-# Weighting function: 0..5
-#   0: None
-#   1: A-Weighted
-#   2: B-Weighted
-#   3: C-Weighted
-#   4: D-Weighted
-#   5: K-Weighted
-weight = 5
-
-# Desired loudness level [LUFS]: -60.00000000..0.00000000
-level = -23.00000
-
-# Level drift [dB]: 0.00000000..24.00000000
-drift = 12.00000
-
-# The level of silence [LUFS]: -84.00000000..-36.00000000
-silence = -72.00000
-
-# Enable maximum amplification gain limitation [boolean]: true/false
-max_on = false
-
-# The maximum amplification gain [dB]: 0.00000000..108.00000000
-max_amp = 36.00000
-
-# Enable quick amplifier [boolean]: true/false
-qamp = false
-
-# Long gain grow amount: 0..12
-#   0: 0.1 dB
-#   1: 0.5 dB
-#   2: 1 dB
-#   3: 3 dB
-#   4: 6 dB
-#   5: 9 dB
-#   6: 10 dB
-#   7: 12 dB
-#   8: 15 dB
-#   9: 18 dB
-#   10: 20 dB
-#   11: 21 dB
-#   12: 24 dB
-vgrow_l = 5
-
-# Long gain grow time [ms]: 10.00000000..10000.00000000
-tgrow_l = 500.00000
-
-# Long gain fall amount: 0..12
-#   0: 0.1 dB
-#   1: 0.5 dB
-#   2: 1 dB
-#   3: 3 dB
-#   4: 6 dB
-#   5: 9 dB
-#   6: 10 dB
-#   7: 12 dB
-#   8: 15 dB
-#   9: 18 dB
-#   10: 20 dB
-#   11: 21 dB
-#   12: 24 dB
-vfall_l = 5
-
-# Long gain fall time [ms]: 10.00000000..10000.00000000
-tfall_l = 500.00000
-
-# Short gain grow amount: 0..12
-#   0: 0.1 dB
-#   1: 0.5 dB
-#   2: 1 dB
-#   3: 3 dB
-#   4: 6 dB
-#   5: 9 dB
-#   6: 10 dB
-#   7: 12 dB
-#   8: 15 dB
-#   9: 18 dB
-#   10: 20 dB
-#   11: 21 dB
-#   12: 24 dB
-vgrow_s = 5
-
-# Short gain grow time [ms]: 1.00000000..500.00000000
-tgrow_s = 40.00000
-
-# Short gain fall amount: 0..12
-#   0: 0.1 dB
-#   1: 0.5 dB
-#   2: 1 dB
-#   3: 3 dB
-#   4: 6 dB
-#   5: 9 dB
-#   6: 10 dB
-#   7: 12 dB
-#   8: 15 dB
-#   9: 18 dB
-#   10: 20 dB
-#   11: 21 dB
-#   12: 24 dB
-vfall_s = 5
-
-# Short gain fall time [ms]: 0.10000000..40.00000000
-tfall_s = 10.00000
-
-# Input metering enable for long period [boolean]: true/false
-e_in_l = true
-
-# Input metering enable for short period [boolean]: true/false
-e_in_s = true
-
-# Output metering enable for long period [boolean]: true/false
-e_out_l = true
-
-# Output metering enable for short period [boolean]: true/false
-e_out_s = true
-
-# Gain correction metering [boolean]: true/false
-e_g = true
-
-
-# -------------------------------------------------------------------------------
-# KVT parameters
-# -------------------------------------------------------------------------------
-
-
-# -------------------------------------------------------------------------------
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/res/doc/config/sc_autogain_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/config/sc_autogain_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-autogain/res/doc/config/sc_autogain_stereo.cfg	2025-03-01 12:43:00.116628434 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/config/sc_autogain_stereo.cfg	1970-01-01 00:00:00.000000000 +0000
@@ -1,170 +0,0 @@
-# -------------------------------------------------------------------------------
-# This file contains configuration of the audio plugin.
-#   Package:             test (Test Case)
-#   Package version:     0.0.0-devel
-#   Plugin name:         Sidechain Autogain Stereo (Sidechain Autogain Stereo)
-#   Plugin version:      1.0.3
-#   UID:                 sc_autogain_stereo
-#   LV2 URI:             http://lsp-plug.in/plugins/lv2/sc_autogain_stereo
-#   VST 2.x identifier:  ag1S
-#   VST 3.x identifier:  64737020736361673173202061673153
-#   LADSPA identifier:   5002277
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/sc_autogain_stereo
-# 
-# (C) Test Case
-#   https://lsp-plug.in/
-# 
-# -------------------------------------------------------------------------------
-
-# Bypass [boolean]: true/false
-bypass = false
-
-# Sidechain preamp [dB]: -60.00000000..40.00000000
-preamp = 0.00000
-
-# Sidechain lookahead [ms]: 0.00000000..40.00000000
-lkahead = 0.00000
-
-# Sidechain mode: 0..2
-#   0: Internal
-#   1: Control
-#   2: Match
-scmode = 1
-
-# Sidechain metering enable for long period [boolean]: true/false
-e_sc_l = true
-
-# Sidechain metering enable for short period [boolean]: true/false
-e_sc_s = true
-
-# Loudness measuring long period [ms]: 100.00000000..2000.00000000
-lperiod = 400.00000
-
-# Loudness measuring short period [ms]: 5.00000000..100.00000000
-speriod = 20.00000
-
-# Weighting function: 0..5
-#   0: None
-#   1: A-Weighted
-#   2: B-Weighted
-#   3: C-Weighted
-#   4: D-Weighted
-#   5: K-Weighted
-weight = 5
-
-# Desired loudness level [LUFS]: -60.00000000..0.00000000
-level = -29.51699
-
-# Level drift [dB]: 0.00000000..24.00000000
-drift = 12.00000
-
-# The level of silence [LUFS]: -84.00000000..-36.00000000
-silence = -72.00000
-
-# Enable maximum amplification gain limitation [boolean]: true/false
-max_on = false
-
-# The maximum amplification gain [dB]: 0.00000000..108.00000000
-max_amp = 36.00000
-
-# Enable quick amplifier [boolean]: true/false
-qamp = false
-
-# Long gain grow amount: 0..12
-#   0: 0.1 dB
-#   1: 0.5 dB
-#   2: 1 dB
-#   3: 3 dB
-#   4: 6 dB
-#   5: 9 dB
-#   6: 10 dB
-#   7: 12 dB
-#   8: 15 dB
-#   9: 18 dB
-#   10: 20 dB
-#   11: 21 dB
-#   12: 24 dB
-vgrow_l = 5
-
-# Long gain grow time [ms]: 10.00000000..10000.00000000
-tgrow_l = 500.00000
-
-# Long gain fall amount: 0..12
-#   0: 0.1 dB
-#   1: 0.5 dB
-#   2: 1 dB
-#   3: 3 dB
-#   4: 6 dB
-#   5: 9 dB
-#   6: 10 dB
-#   7: 12 dB
-#   8: 15 dB
-#   9: 18 dB
-#   10: 20 dB
-#   11: 21 dB
-#   12: 24 dB
-vfall_l = 5
-
-# Long gain fall time [ms]: 10.00000000..10000.00000000
-tfall_l = 500.00000
-
-# Short gain grow amount: 0..12
-#   0: 0.1 dB
-#   1: 0.5 dB
-#   2: 1 dB
-#   3: 3 dB
-#   4: 6 dB
-#   5: 9 dB
-#   6: 10 dB
-#   7: 12 dB
-#   8: 15 dB
-#   9: 18 dB
-#   10: 20 dB
-#   11: 21 dB
-#   12: 24 dB
-vgrow_s = 5
-
-# Short gain grow time [ms]: 1.00000000..500.00000000
-tgrow_s = 40.00000
-
-# Short gain fall amount: 0..12
-#   0: 0.1 dB
-#   1: 0.5 dB
-#   2: 1 dB
-#   3: 3 dB
-#   4: 6 dB
-#   5: 9 dB
-#   6: 10 dB
-#   7: 12 dB
-#   8: 15 dB
-#   9: 18 dB
-#   10: 20 dB
-#   11: 21 dB
-#   12: 24 dB
-vfall_s = 5
-
-# Short gain fall time [ms]: 0.10000000..40.00000000
-tfall_s = 10.00000
-
-# Input metering enable for long period [boolean]: true/false
-e_in_l = true
-
-# Input metering enable for short period [boolean]: true/false
-e_in_s = true
-
-# Output metering enable for long period [boolean]: true/false
-e_out_l = true
-
-# Output metering enable for short period [boolean]: true/false
-e_out_s = true
-
-# Gain correction metering [boolean]: true/false
-e_g = true
-
-
-# -------------------------------------------------------------------------------
-# KVT parameters
-# -------------------------------------------------------------------------------
-
-
-# -------------------------------------------------------------------------------
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/res/doc/configs/autogain_mono.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/configs/autogain_mono.cfg
--- 1.2.21-5/modules/lsp-plugins-autogain/res/doc/configs/autogain_mono.cfg	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/configs/autogain_mono.cfg	2025-08-26 18:15:46.437976971 +0000
@@ -0,0 +1,149 @@
+# -------------------------------------------------------------------------------
+# This file contains configuration of the audio plugin.
+#   Package:             test (Test Case)
+#   Package version:     0.0.0-devel
+#   Plugin name:         Autogain Mono (Autogain Mono)
+#   Plugin version:      1.0.0
+#   UID:                 autogain_mono
+#   LV2 URI:             http://lsp-plug.in/plugins/lv2/autogain_mono
+#   VST identifier:      ag1m
+#   LADSPA identifier:   5002274
+#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/autogain_mono
+# 
+# (C) Linux Studio Plugins
+#   https://lsp-plug.in/
+# 
+# -------------------------------------------------------------------------------
+
+# Bypass [boolean]: true/false
+bypass = false
+
+# Sidechain preamp [dB]: -60.00000000..40.00000000
+preamp = 0.00 db
+
+# Sidechain lookahead [ms]: 0.00000000..40.00000000
+lkahead = 0.00000
+
+# Loudness measuring long period [ms]: 100.00000000..2000.00000000
+lperiod = 400.00000
+
+# Loudness measuring short period [ms]: 5.00000000..100.00000000
+speriod = 20.00000
+
+# Weighting function: 0..5
+#   0: None
+#   1: A-Weighted
+#   2: B-Weighted
+#   3: C-Weighted
+#   4: D-Weighted
+#   5: K-Weighted
+weight = 5
+
+# Desired loudness level [LUFS]: -60.00000000..0.00000000
+level = -23.00000
+
+# Level drift [dB]: 0.00000000..24.00000000
+drift = 12.00 db
+
+# The level of silence [LUFS]: -84.00000000..-36.00000000
+silence = -72.00000
+
+# Enable maximum amplification gain limitation [boolean]: true/false
+max_on = false
+
+# The maximum amplification gain [dB]: 0.00000000..108.00000000
+max_amp = 36.00 db
+
+# Enable quick amplifier [boolean]: true/false
+qamp = false
+
+# Long gain grow amount: 0..10
+#   0: 1 dB
+#   1: 3 dB
+#   2: 6 dB
+#   3: 9 dB
+#   4: 10 dB
+#   5: 12 dB
+#   6: 15 dB
+#   7: 18 dB
+#   8: 20 dB
+#   9: 21 dB
+#   10: 24 dB
+vgrow_l = 5
+
+# Long gain grow time [ms]: 10.00000000..10000.00000000
+tgrow_l = 500.00000
+
+# Long gain fall amount: 0..10
+#   0: 1 dB
+#   1: 3 dB
+#   2: 6 dB
+#   3: 9 dB
+#   4: 10 dB
+#   5: 12 dB
+#   6: 15 dB
+#   7: 18 dB
+#   8: 20 dB
+#   9: 21 dB
+#   10: 24 dB
+vfall_l = 5
+
+# Long gain fall time [ms]: 10.00000000..10000.00000000
+tfall_l = 500.00000
+
+# Short gain grow amount: 0..10
+#   0: 1 dB
+#   1: 3 dB
+#   2: 6 dB
+#   3: 9 dB
+#   4: 10 dB
+#   5: 12 dB
+#   6: 15 dB
+#   7: 18 dB
+#   8: 20 dB
+#   9: 21 dB
+#   10: 24 dB
+vgrow_s = 5
+
+# Short gain grow time [ms]: 1.00000000..500.00000000
+tgrow_s = 40.00000
+
+# Short gain fall amount: 0..10
+#   0: 1 dB
+#   1: 3 dB
+#   2: 6 dB
+#   3: 9 dB
+#   4: 10 dB
+#   5: 12 dB
+#   6: 15 dB
+#   7: 18 dB
+#   8: 20 dB
+#   9: 21 dB
+#   10: 24 dB
+vfall_s = 5
+
+# Short gain fall time [ms]: 0.10000000..40.00000000
+tfall_s = 10.00000
+
+# Input metering enable for long period [boolean]: true/false
+e_in_l = true
+
+# Input metering enable for short period [boolean]: true/false
+e_in_s = true
+
+# Output metering enable for long period [boolean]: true/false
+e_out_l = true
+
+# Output metering enable for short period [boolean]: true/false
+e_out_s = true
+
+# Gain correction metering [boolean]: true/false
+e_g = true
+
+
+# -------------------------------------------------------------------------------
+# KVT parameters
+# -------------------------------------------------------------------------------
+
+
+# -------------------------------------------------------------------------------
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/res/doc/configs/autogain_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/configs/autogain_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-autogain/res/doc/configs/autogain_stereo.cfg	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/configs/autogain_stereo.cfg	2025-08-26 18:15:46.437976971 +0000
@@ -0,0 +1,149 @@
+# -------------------------------------------------------------------------------
+# This file contains configuration of the audio plugin.
+#   Package:             test (Test Case)
+#   Package version:     0.0.0-devel
+#   Plugin name:         Autogain Stereo (Autogain Stereo)
+#   Plugin version:      1.0.0
+#   UID:                 autogain_stereo
+#   LV2 URI:             http://lsp-plug.in/plugins/lv2/autogain_stereo
+#   VST identifier:      ag1s
+#   LADSPA identifier:   5002275
+#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/autogain_stereo
+# 
+# (C) Linux Studio Plugins
+#   https://lsp-plug.in/
+# 
+# -------------------------------------------------------------------------------
+
+# Bypass [boolean]: true/false
+bypass = false
+
+# Sidechain preamp [dB]: -60.00000000..40.00000000
+preamp = 0.00 db
+
+# Sidechain lookahead [ms]: 0.00000000..40.00000000
+lkahead = 0.00000
+
+# Loudness measuring long period [ms]: 100.00000000..2000.00000000
+lperiod = 400.00000
+
+# Loudness measuring short period [ms]: 5.00000000..100.00000000
+speriod = 20.00000
+
+# Weighting function: 0..5
+#   0: None
+#   1: A-Weighted
+#   2: B-Weighted
+#   3: C-Weighted
+#   4: D-Weighted
+#   5: K-Weighted
+weight = 5
+
+# Desired loudness level [LUFS]: -60.00000000..0.00000000
+level = -23.00000
+
+# Level drift [dB]: 0.00000000..24.00000000
+drift = 12.00 db
+
+# The level of silence [LUFS]: -84.00000000..-36.00000000
+silence = -72.00000
+
+# Enable maximum amplification gain limitation [boolean]: true/false
+max_on = false
+
+# The maximum amplification gain [dB]: 0.00000000..108.00000000
+max_amp = 36.00 db
+
+# Enable quick amplifier [boolean]: true/false
+qamp = false
+
+# Long gain grow amount: 0..10
+#   0: 1 dB
+#   1: 3 dB
+#   2: 6 dB
+#   3: 9 dB
+#   4: 10 dB
+#   5: 12 dB
+#   6: 15 dB
+#   7: 18 dB
+#   8: 20 dB
+#   9: 21 dB
+#   10: 24 dB
+vgrow_l = 5
+
+# Long gain grow time [ms]: 10.00000000..10000.00000000
+tgrow_l = 500.00000
+
+# Long gain fall amount: 0..10
+#   0: 1 dB
+#   1: 3 dB
+#   2: 6 dB
+#   3: 9 dB
+#   4: 10 dB
+#   5: 12 dB
+#   6: 15 dB
+#   7: 18 dB
+#   8: 20 dB
+#   9: 21 dB
+#   10: 24 dB
+vfall_l = 5
+
+# Long gain fall time [ms]: 10.00000000..10000.00000000
+tfall_l = 500.00000
+
+# Short gain grow amount: 0..10
+#   0: 1 dB
+#   1: 3 dB
+#   2: 6 dB
+#   3: 9 dB
+#   4: 10 dB
+#   5: 12 dB
+#   6: 15 dB
+#   7: 18 dB
+#   8: 20 dB
+#   9: 21 dB
+#   10: 24 dB
+vgrow_s = 5
+
+# Short gain grow time [ms]: 1.00000000..500.00000000
+tgrow_s = 40.00000
+
+# Short gain fall amount: 0..10
+#   0: 1 dB
+#   1: 3 dB
+#   2: 6 dB
+#   3: 9 dB
+#   4: 10 dB
+#   5: 12 dB
+#   6: 15 dB
+#   7: 18 dB
+#   8: 20 dB
+#   9: 21 dB
+#   10: 24 dB
+vfall_s = 5
+
+# Short gain fall time [ms]: 0.10000000..40.00000000
+tfall_s = 10.00000
+
+# Input metering enable for long period [boolean]: true/false
+e_in_l = true
+
+# Input metering enable for short period [boolean]: true/false
+e_in_s = true
+
+# Output metering enable for long period [boolean]: true/false
+e_out_l = true
+
+# Output metering enable for short period [boolean]: true/false
+e_out_s = true
+
+# Gain correction metering [boolean]: true/false
+e_g = true
+
+
+# -------------------------------------------------------------------------------
+# KVT parameters
+# -------------------------------------------------------------------------------
+
+
+# -------------------------------------------------------------------------------
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/res/doc/configs/sc_autogain_mono.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/configs/sc_autogain_mono.cfg
--- 1.2.21-5/modules/lsp-plugins-autogain/res/doc/configs/sc_autogain_mono.cfg	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/configs/sc_autogain_mono.cfg	2025-08-26 18:15:46.437976971 +0000
@@ -0,0 +1,170 @@
+# -------------------------------------------------------------------------------
+# This file contains configuration of the audio plugin.
+#   Package:             test (Test Case)
+#   Package version:     0.0.0-devel
+#   Plugin name:         Sidechain Autogain Mono (Sidechain Autogain Mono)
+#   Plugin version:      1.0.3
+#   UID:                 sc_autogain_mono
+#   LV2 URI:             http://lsp-plug.in/plugins/lv2/sc_autogain_mono
+#   VST 2.x identifier:  ag1M
+#   VST 3.x identifier:  6473702073636167316D20206167314D
+#   LADSPA identifier:   5002276
+#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/sc_autogain_mono
+# 
+# (C) Test Case
+#   https://lsp-plug.in/
+# 
+# -------------------------------------------------------------------------------
+
+# Bypass [boolean]: true/false
+bypass = false
+
+# Sidechain preamp [dB]: -60.00000000..40.00000000
+preamp = 0.00000
+
+# Sidechain lookahead [ms]: 0.00000000..40.00000000
+lkahead = 0.00000
+
+# Sidechain mode: 0..2
+#   0: Internal
+#   1: Control
+#   2: Match
+scmode = 2
+
+# Sidechain metering enable for long period [boolean]: true/false
+e_sc_l = true
+
+# Sidechain metering enable for short period [boolean]: true/false
+e_sc_s = true
+
+# Loudness measuring long period [ms]: 100.00000000..2000.00000000
+lperiod = 400.00000
+
+# Loudness measuring short period [ms]: 5.00000000..100.00000000
+speriod = 20.00000
+
+# Weighting function: 0..5
+#   0: None
+#   1: A-Weighted
+#   2: B-Weighted
+#   3: C-Weighted
+#   4: D-Weighted
+#   5: K-Weighted
+weight = 5
+
+# Desired loudness level [LUFS]: -60.00000000..0.00000000
+level = -23.00000
+
+# Level drift [dB]: 0.00000000..24.00000000
+drift = 12.00000
+
+# The level of silence [LUFS]: -84.00000000..-36.00000000
+silence = -72.00000
+
+# Enable maximum amplification gain limitation [boolean]: true/false
+max_on = false
+
+# The maximum amplification gain [dB]: 0.00000000..108.00000000
+max_amp = 36.00000
+
+# Enable quick amplifier [boolean]: true/false
+qamp = false
+
+# Long gain grow amount: 0..12
+#   0: 0.1 dB
+#   1: 0.5 dB
+#   2: 1 dB
+#   3: 3 dB
+#   4: 6 dB
+#   5: 9 dB
+#   6: 10 dB
+#   7: 12 dB
+#   8: 15 dB
+#   9: 18 dB
+#   10: 20 dB
+#   11: 21 dB
+#   12: 24 dB
+vgrow_l = 5
+
+# Long gain grow time [ms]: 10.00000000..10000.00000000
+tgrow_l = 500.00000
+
+# Long gain fall amount: 0..12
+#   0: 0.1 dB
+#   1: 0.5 dB
+#   2: 1 dB
+#   3: 3 dB
+#   4: 6 dB
+#   5: 9 dB
+#   6: 10 dB
+#   7: 12 dB
+#   8: 15 dB
+#   9: 18 dB
+#   10: 20 dB
+#   11: 21 dB
+#   12: 24 dB
+vfall_l = 5
+
+# Long gain fall time [ms]: 10.00000000..10000.00000000
+tfall_l = 500.00000
+
+# Short gain grow amount: 0..12
+#   0: 0.1 dB
+#   1: 0.5 dB
+#   2: 1 dB
+#   3: 3 dB
+#   4: 6 dB
+#   5: 9 dB
+#   6: 10 dB
+#   7: 12 dB
+#   8: 15 dB
+#   9: 18 dB
+#   10: 20 dB
+#   11: 21 dB
+#   12: 24 dB
+vgrow_s = 5
+
+# Short gain grow time [ms]: 1.00000000..500.00000000
+tgrow_s = 40.00000
+
+# Short gain fall amount: 0..12
+#   0: 0.1 dB
+#   1: 0.5 dB
+#   2: 1 dB
+#   3: 3 dB
+#   4: 6 dB
+#   5: 9 dB
+#   6: 10 dB
+#   7: 12 dB
+#   8: 15 dB
+#   9: 18 dB
+#   10: 20 dB
+#   11: 21 dB
+#   12: 24 dB
+vfall_s = 5
+
+# Short gain fall time [ms]: 0.10000000..40.00000000
+tfall_s = 10.00000
+
+# Input metering enable for long period [boolean]: true/false
+e_in_l = true
+
+# Input metering enable for short period [boolean]: true/false
+e_in_s = true
+
+# Output metering enable for long period [boolean]: true/false
+e_out_l = true
+
+# Output metering enable for short period [boolean]: true/false
+e_out_s = true
+
+# Gain correction metering [boolean]: true/false
+e_g = true
+
+
+# -------------------------------------------------------------------------------
+# KVT parameters
+# -------------------------------------------------------------------------------
+
+
+# -------------------------------------------------------------------------------
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/res/doc/configs/sc_autogain_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/configs/sc_autogain_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-autogain/res/doc/configs/sc_autogain_stereo.cfg	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/configs/sc_autogain_stereo.cfg	2025-08-26 18:15:46.437976971 +0000
@@ -0,0 +1,170 @@
+# -------------------------------------------------------------------------------
+# This file contains configuration of the audio plugin.
+#   Package:             test (Test Case)
+#   Package version:     0.0.0-devel
+#   Plugin name:         Sidechain Autogain Stereo (Sidechain Autogain Stereo)
+#   Plugin version:      1.0.3
+#   UID:                 sc_autogain_stereo
+#   LV2 URI:             http://lsp-plug.in/plugins/lv2/sc_autogain_stereo
+#   VST 2.x identifier:  ag1S
+#   VST 3.x identifier:  64737020736361673173202061673153
+#   LADSPA identifier:   5002277
+#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/sc_autogain_stereo
+# 
+# (C) Test Case
+#   https://lsp-plug.in/
+# 
+# -------------------------------------------------------------------------------
+
+# Bypass [boolean]: true/false
+bypass = false
+
+# Sidechain preamp [dB]: -60.00000000..40.00000000
+preamp = 0.00000
+
+# Sidechain lookahead [ms]: 0.00000000..40.00000000
+lkahead = 0.00000
+
+# Sidechain mode: 0..2
+#   0: Internal
+#   1: Control
+#   2: Match
+scmode = 1
+
+# Sidechain metering enable for long period [boolean]: true/false
+e_sc_l = true
+
+# Sidechain metering enable for short period [boolean]: true/false
+e_sc_s = true
+
+# Loudness measuring long period [ms]: 100.00000000..2000.00000000
+lperiod = 400.00000
+
+# Loudness measuring short period [ms]: 5.00000000..100.00000000
+speriod = 20.00000
+
+# Weighting function: 0..5
+#   0: None
+#   1: A-Weighted
+#   2: B-Weighted
+#   3: C-Weighted
+#   4: D-Weighted
+#   5: K-Weighted
+weight = 5
+
+# Desired loudness level [LUFS]: -60.00000000..0.00000000
+level = -29.51699
+
+# Level drift [dB]: 0.00000000..24.00000000
+drift = 12.00000
+
+# The level of silence [LUFS]: -84.00000000..-36.00000000
+silence = -72.00000
+
+# Enable maximum amplification gain limitation [boolean]: true/false
+max_on = false
+
+# The maximum amplification gain [dB]: 0.00000000..108.00000000
+max_amp = 36.00000
+
+# Enable quick amplifier [boolean]: true/false
+qamp = false
+
+# Long gain grow amount: 0..12
+#   0: 0.1 dB
+#   1: 0.5 dB
+#   2: 1 dB
+#   3: 3 dB
+#   4: 6 dB
+#   5: 9 dB
+#   6: 10 dB
+#   7: 12 dB
+#   8: 15 dB
+#   9: 18 dB
+#   10: 20 dB
+#   11: 21 dB
+#   12: 24 dB
+vgrow_l = 5
+
+# Long gain grow time [ms]: 10.00000000..10000.00000000
+tgrow_l = 500.00000
+
+# Long gain fall amount: 0..12
+#   0: 0.1 dB
+#   1: 0.5 dB
+#   2: 1 dB
+#   3: 3 dB
+#   4: 6 dB
+#   5: 9 dB
+#   6: 10 dB
+#   7: 12 dB
+#   8: 15 dB
+#   9: 18 dB
+#   10: 20 dB
+#   11: 21 dB
+#   12: 24 dB
+vfall_l = 5
+
+# Long gain fall time [ms]: 10.00000000..10000.00000000
+tfall_l = 500.00000
+
+# Short gain grow amount: 0..12
+#   0: 0.1 dB
+#   1: 0.5 dB
+#   2: 1 dB
+#   3: 3 dB
+#   4: 6 dB
+#   5: 9 dB
+#   6: 10 dB
+#   7: 12 dB
+#   8: 15 dB
+#   9: 18 dB
+#   10: 20 dB
+#   11: 21 dB
+#   12: 24 dB
+vgrow_s = 5
+
+# Short gain grow time [ms]: 1.00000000..500.00000000
+tgrow_s = 40.00000
+
+# Short gain fall amount: 0..12
+#   0: 0.1 dB
+#   1: 0.5 dB
+#   2: 1 dB
+#   3: 3 dB
+#   4: 6 dB
+#   5: 9 dB
+#   6: 10 dB
+#   7: 12 dB
+#   8: 15 dB
+#   9: 18 dB
+#   10: 20 dB
+#   11: 21 dB
+#   12: 24 dB
+vfall_s = 5
+
+# Short gain fall time [ms]: 0.10000000..40.00000000
+tfall_s = 10.00000
+
+# Input metering enable for long period [boolean]: true/false
+e_in_l = true
+
+# Input metering enable for short period [boolean]: true/false
+e_in_s = true
+
+# Output metering enable for long period [boolean]: true/false
+e_out_l = true
+
+# Output metering enable for short period [boolean]: true/false
+e_out_s = true
+
+# Gain correction metering [boolean]: true/false
+e_g = true
+
+
+# -------------------------------------------------------------------------------
+# KVT parameters
+# -------------------------------------------------------------------------------
+
+
+# -------------------------------------------------------------------------------
Binary files 1.2.21-5/modules/lsp-plugins-autogain/res/doc/screenshots/autogain_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/screenshots/autogain_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-autogain/res/doc/screenshots/autogain_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/screenshots/autogain_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-autogain/res/doc/screenshots/sc_autogain_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/screenshots/sc_autogain_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-autogain/res/doc/screenshots/sc_autogain_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/res/doc/screenshots/sc_autogain_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/src/doc/manuals/plugins/autogain.php 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/src/doc/manuals/plugins/autogain.php
--- 1.2.21-5/modules/lsp-plugins-autogain/src/doc/manuals/plugins/autogain.php	2025-03-01 12:43:00.120628410 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/src/doc/manuals/plugins/autogain.php	2025-08-26 18:15:46.441976932 +0000
@@ -29,7 +29,7 @@
 <p>
 	If the level of the signal rapidly changes, the plugin can also rapidly reduce the shocking effect of the loud sound
 	and (if enabled) rapidly raise the gain, too. Despite, because it uses RMS measurements, it does not fully protect from
-	sudden loud clicks/pops, and aditional surge protection should be applied. Additional control over the zero level also
+	sudden loud clicks/pops, and additional surge protection should be applied. Additional control over the zero level also
 	makes the plugin act as a trigger: if the signal is below the mimum level, then the gain value does not change.
 	This prevents from significant amplification of a background noise in the case of long silence at the input. 
 </p>
diff -pruN 1.2.21-5/modules/lsp-plugins-autogain/src/main/meta/autogain.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/src/main/meta/autogain.cpp
--- 1.2.21-5/modules/lsp-plugins-autogain/src/main/meta/autogain.cpp	2025-03-01 12:43:00.124628385 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-autogain/src/main/meta/autogain.cpp	2025-08-26 18:15:46.441976932 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-autogain
  * Created on: 21 сен 2023 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_AUTOGAIN_VERSION_MAJOR       1
 #define LSP_PLUGINS_AUTOGAIN_VERSION_MINOR       0
-#define LSP_PLUGINS_AUTOGAIN_VERSION_MICRO       10
+#define LSP_PLUGINS_AUTOGAIN_VERSION_MICRO       12
 
 #define LSP_PLUGINS_AUTOGAIN_VERSION  \
     LSP_MODULE_VERSION( \
@@ -95,11 +95,11 @@ namespace lsp
             OPT_AUDIO_RETURN("scl_r", "Side-chain shared memory link input Right", 1, "link")
 
         #define AUTOGAIN_COMMON_SC(combo, combo_dfl) \
-            CONTROL("preamp", "Sidechain preamp", U_DB, meta::autogain::SC_PREAMP), \
-            CONTROL("lkahead", "Sidechain lookahead", U_MSEC, meta::autogain::SC_LOOKAHEAD), \
-            COMBO("scmode", "Sidechain mode", combo_dfl, combo), \
-            SWITCH("e_sc_l", "Sidechain metering enable for long period", 1.0f), \
-            SWITCH("e_sc_s", "Sidechain metering enable for short period", 1.0f), \
+            CONTROL("preamp", "Sidechain preamp", "SC preamp", U_DB, meta::autogain::SC_PREAMP), \
+            CONTROL("lkahead", "Sidechain lookahead", "SC look", U_MSEC, meta::autogain::SC_LOOKAHEAD), \
+            COMBO("scmode", "Sidechain mode", "SC mode", combo_dfl, combo), \
+            SWITCH("e_sc_l", "Sidechain metering enable for long period", "Long SC on", 1.0f), \
+            SWITCH("e_sc_s", "Sidechain metering enable for short period", "Short SC on", 1.0f), \
             METER_GAIN("g_sc_l", "Sidechain loudness meter for long period", GAIN_AMP_P_48_DB), \
             METER_GAIN("g_sc_s", "Sidechain loudness meter for short period", GAIN_AMP_P_48_DB), \
             MESH("gr_sc_l", "Sidechain loudness graph for long period", 2, meta::autogain::MESH_POINTS), \
@@ -112,30 +112,30 @@ namespace lsp
             AUTOGAIN_COMMON_SC(sc_modes_sc, meta::autogain::SCMODE_DFL_SC)
 
         #define AUTOGAIN_COMMON \
-            LOG_CONTROL("lperiod", "Loudness measuring long period", U_MSEC, meta::autogain::LONG_PERIOD), \
-            LOG_CONTROL("speriod", "Loudness measuring short period", U_MSEC, meta::autogain::SHORT_PERIOD), \
-            COMBO("weight", "Weighting function", meta::autogain::WEIGHT_DFL, weighting_modes), \
-            CONTROL("level", "Desired loudness level", U_LUFS, meta::autogain::LEVEL), \
-            CONTROL("drift", "Level drift", U_DB, meta::autogain::DEVIATION), \
-            CONTROL("silence", "The level of silence", U_LUFS, meta::autogain::SILENCE), \
-            SWITCH("max_on", "Enable maximum amplification gain limitation", 0.0f), \
-            CONTROL("max_amp", "The maximum amplification gain", U_DB, meta::autogain::MAX_GAIN), \
+            LOG_CONTROL("lperiod", "Loudness measuring long period", "Long period", U_MSEC, meta::autogain::LONG_PERIOD), \
+            LOG_CONTROL("speriod", "Loudness measuring short period", "Short period", U_MSEC, meta::autogain::SHORT_PERIOD), \
+            COMBO("weight", "Weighting function", "Weighting", meta::autogain::WEIGHT_DFL, weighting_modes), \
+            CONTROL("level", "Desired loudness level", "Loudness", U_LUFS, meta::autogain::LEVEL), \
+            CONTROL("drift", "Level drift", "Drift", U_DB, meta::autogain::DEVIATION), \
+            CONTROL("silence", "The level of silence", "Silence", U_LUFS, meta::autogain::SILENCE), \
+            SWITCH("max_on", "Enable maximum amplification gain limitation", "Gain limit on", 0.0f), \
+            CONTROL("max_amp", "The maximum amplification gain", "Max gain", U_DB, meta::autogain::MAX_GAIN), \
             \
-            SWITCH("qamp", "Enable quick amplifier", 0.0f), \
-            COMBO("vgrow_l", "Long gain grow amount", meta::autogain::NUM_DFL, speed_numerators), \
-            LOG_CONTROL("tgrow_l", "Long gain grow time", U_MSEC, meta::autogain::LONG_GROW), \
-            COMBO("vfall_l", "Long gain fall amount", meta::autogain::NUM_DFL, speed_numerators), \
-            LOG_CONTROL("tfall_l", "Long gain fall time", U_MSEC, meta::autogain::LONG_FALL), \
-            COMBO("vgrow_s", "Short gain grow amount", meta::autogain::NUM_DFL, speed_numerators), \
-            LOG_CONTROL("tgrow_s", "Short gain grow time", U_MSEC, meta::autogain::SHORT_GROW), \
-            COMBO("vfall_s", "Short gain fall amount", meta::autogain::NUM_DFL, speed_numerators), \
-            LOG_CONTROL("tfall_s", "Short gain fall time", U_MSEC, meta::autogain::SHORT_FALL), \
+            SWITCH("qamp", "Enable quick amplifier", "Quick amp", 0.0f), \
+            COMBO("vgrow_l", "Long gain grow amount", "Long grow", meta::autogain::NUM_DFL, speed_numerators), \
+            LOG_CONTROL("tgrow_l", "Long gain grow time", "Long grow time", U_MSEC, meta::autogain::LONG_GROW), \
+            COMBO("vfall_l", "Long gain fall amount", "Long fall", meta::autogain::NUM_DFL, speed_numerators), \
+            LOG_CONTROL("tfall_l", "Long gain fall time", "Long fall time", U_MSEC, meta::autogain::LONG_FALL), \
+            COMBO("vgrow_s", "Short gain grow amount", "Short grow", meta::autogain::NUM_DFL, speed_numerators), \
+            LOG_CONTROL("tgrow_s", "Short gain grow time", "Short grow time", U_MSEC, meta::autogain::SHORT_GROW), \
+            COMBO("vfall_s", "Short gain fall amount", "Short fall", meta::autogain::NUM_DFL, speed_numerators), \
+            LOG_CONTROL("tfall_s", "Short gain fall time", "Short fall time", U_MSEC, meta::autogain::SHORT_FALL), \
             \
-            SWITCH("e_in_l", "Input metering enable for long period", 1.0f), \
-            SWITCH("e_in_s", "Input metering enable for short period", 1.0f), \
-            SWITCH("e_out_l", "Output metering enable for long period", 1.0f), \
-            SWITCH("e_out_s", "Output metering enable for short period", 1.0f), \
-            SWITCH("e_g", "Gain correction metering", 1.0f), \
+            SWITCH("e_in_l", "Input metering enable for long period", "Show In long", 1.0f), \
+            SWITCH("e_in_s", "Input metering enable for short period", "Show In short", 1.0f), \
+            SWITCH("e_out_l", "Output metering enable for long period", "Show Out long", 1.0f), \
+            SWITCH("e_out_s", "Output metering enable for short period", "Show Out short", 1.0f), \
+            SWITCH("e_g", "Gain correction metering", "Show Gain", 1.0f), \
             \
             METER_GAIN("g_in_l", "Input loudness meter for long period", GAIN_AMP_P_48_DB), \
             METER_GAIN("g_in_s", "Input loudness meter for short period", GAIN_AMP_P_48_DB), \
diff -pruN 1.2.21-5/modules/lsp-plugins-beat-breather/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-beat-breather/.github/workflows/build.yml	2025-03-01 12:43:00.512626057 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/.github/workflows/build.yml	2025-08-26 18:15:46.949972001 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-beat-breather/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-beat-breather/CHANGELOG	2025-03-01 12:43:00.512626057 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/CHANGELOG	2025-08-26 18:15:46.949972001 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.15 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.14 ===
+* Updated build scripts and dependencies.
+
 === 1.0.13 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-beat-breather/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-beat-breather/dependencies.mk	2025-03-01 12:43:00.516626033 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/dependencies.mk	2025-08-26 18:15:46.949972001 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-beat-breather/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-beat-breather/make/tools.mk	2025-03-01 12:43:00.516626033 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/make/tools.mk	2025-08-26 18:15:46.949972001 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-beat-breather/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/modules.mk
--- 1.2.21-5/modules/lsp-plugins-beat-breather/modules.mk	2025-03-01 12:43:00.516626033 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/modules.mk	2025-08-26 18:15:46.949972001 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-beat-breather/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/project.mk
--- 1.2.21-5/modules/lsp-plugins-beat-breather/project.mk	2025-03-01 12:43:00.516626033 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/project.mk	2025-08-26 18:15:46.949972001 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Beat Breather Plugin
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.13
+ARTIFACT_VERSION            = 1.0.15
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-beat-breather/res/doc/screenshots/beat_breather_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/res/doc/screenshots/beat_breather_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-beat-breather/res/doc/screenshots/beat_breather_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/res/doc/screenshots/beat_breather_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-beat-breather/src/doc/manuals/plugins/beat_breather.php 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/src/doc/manuals/plugins/beat_breather.php
--- 1.2.21-5/modules/lsp-plugins-beat-breather/src/doc/manuals/plugins/beat_breather.php	2025-03-01 12:43:00.516626033 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/src/doc/manuals/plugins/beat_breather.php	2025-08-26 18:15:46.953971963 +0000
@@ -13,21 +13,21 @@
 	<ul>
 		<li>Unlike classic crossovers which use IIR (Infinite Impulse Response) filters to split signal into multiple bands and shift the phase
 		of the audio signal at band split points, the <b>Linear Phase</b> allows to use FIR (Finite Impulse Response) filters which are deprived of this.
-		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow simulate their tranfer function
+		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow simulate their transfer function
 		to look like the transfer function of analog filters, without deforming it's magnitude envelope near the nyquist frequency.</li>
 		<li>Unlike design of classic Linkwitz-Riley filters, the design of IIR filters provides shorter transition zone of the filter.</li>
 		<li>Unlike classic IIR filters the slope of the FIR filter is not restricted to be the multiple of 6 dB.</li>
 	</ul>
 	<li><b>Punch detection</b> - detection of peaks above the average level of the audio. For that case two type of RMS values are computed:</li>
 	<ul>
-		<li><b>Long time</b> - the long-time RMS value (by default, the esimation period is 400 ms) to estimate the average level of the audio signal.</li> 
+		<li><b>Long time</b> - the long-time RMS value (by default, the esitmation period is 400 ms) to estimate the average level of the audio signal.</li> 
 		<li><b>Short time</b> - the short-time RMS value (by default, the estimation period is less than 20 ms and depends on the frequency range) to estimate the envelope of the changing in time signal.</li>
 	</ul>
 	<li><b>Punch filtering</b> - additional stage to eliminate some noise from the signal not associated with punches.</li>
-	<li><b>Beat processing</b> - short-time dynamic amplification of the frequency band accoding to the signal passed from the punch filter.</li>
+	<li><b>Beat processing</b> - short-time dynamic amplification of the frequency band according to the signal passed from the punch filter.</li>
 </ul>
 
-<p>The simlified schema of the device is shown on the figure below.</p>
+<p>The simplified schema of the device is shown on the figure below.</p>
 <?php out_image('graph/beat-breather-scheme', 'Simplified scheme of the audio processing') ?>
 
 <p><b>Controls:</b></p>
@@ -38,7 +38,7 @@
 	<?php if ($m == 's') { ?>
 	<li><b>Stereo Split</b> - enables independent compression of left and right channels.</li>
 	<?php } ?>
-	<li><b>Filters<?= $sm ?></b> - enables drawing tranfer function of each sidechain filter on the spectrum graph.</li>
+	<li><b>Filters<?= $sm ?></b> - enables drawing transfer function of each sidechain filter on the spectrum graph.</li>
 	<li><b>Zoom</b> - zoom fader, allows to adjust zoom on the frequency chart.</li>
 </ul>
 <p><b>'Analysis' section:</b></p>
diff -pruN 1.2.21-5/modules/lsp-plugins-beat-breather/src/main/meta/beat_breather.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/src/main/meta/beat_breather.cpp
--- 1.2.21-5/modules/lsp-plugins-beat-breather/src/main/meta/beat_breather.cpp	2025-03-01 12:43:00.516626033 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-beat-breather/src/main/meta/beat_breather.cpp	2025-08-26 18:15:46.953971963 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-beat-breather
  * Created on: 14 авг 2023 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_BEAT_BREATHER_VERSION_MAJOR       1
 #define LSP_PLUGINS_BEAT_BREATHER_VERSION_MINOR       0
-#define LSP_PLUGINS_BEAT_BREATHER_VERSION_MICRO       13
+#define LSP_PLUGINS_BEAT_BREATHER_VERSION_MICRO       15
 
 #define LSP_PLUGINS_BEAT_BREATHER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -52,65 +52,65 @@ namespace lsp
         #define BB_COMMON \
             BYPASS, \
             IN_GAIN, \
-            AMP_GAIN("g_dry", "Dry gain", 0.0f, 10.0f), \
-            AMP_GAIN("g_wet", "Wet gain", 1.0f, 10.0f), \
+            AMP_GAIN("g_dry", "Dry gain", "Dry", 0.0f, 10.0f), \
+            AMP_GAIN("g_wet", "Wet gain", "Wet", 1.0f, 10.0f), \
             DRYWET(100.0f), \
             OUT_GAIN, \
-            COMBO("ts", "Tab selector", 0, bb_tabs), \
-            LOG_CONTROL("react", "FFT reactivity", U_MSEC, beat_breather::FFT_REACT_TIME), \
-            CONTROL("shift", "FFT shift gain", U_DB, beat_breather::FFT_SHIFT), \
-            LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, beat_breather::ZOOM), \
-            SWITCH("flt", "Show filters", 1.0f)
+            COMBO("ts", "Tab selector", "Tab selector", 0, bb_tabs), \
+            LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, beat_breather::FFT_REACT_TIME), \
+            CONTROL("shift", "FFT shift gain", "FFT shift", U_DB, beat_breather::FFT_SHIFT), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, beat_breather::ZOOM), \
+            SWITCH("flt", "Show filters", "Show flt", 1.0f)
 
         #define BB_COMMON_STEREO \
-            SWITCH("ssplit", "Stereo split", 0.0f)
+            SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f)
 
-        #define BB_CHANNEL_METERS(id, label) \
+        #define BB_CHANNEL_METERS(id, label, alias) \
             METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
             METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB), \
-            SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-            SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
+            SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+            SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
             MESH("ifg" id, "Input FFT graph" label, 2, beat_breather::FFT_MESH_POINTS + 2), \
             MESH("ofg" id, "Output FFT graph" label, 2, beat_breather::FFT_MESH_POINTS), \
             MESH("ag" id, "Output filter graph" label, 2, beat_breather::FFT_MESH_POINTS)
 
-        #define BB_SPLIT(id, label, on, freq) \
-            SWITCH("se" id, "Frequency split enable" label, on), \
-            LOG_CONTROL_DFL("sf" id, "Split frequency" label, U_HZ, beat_breather::FREQ, freq)
-
-        #define BB_BAND(id, label, short_rms, pf_attack, pf_release, bp_attack, bp_release) \
-            SWITCH("bs" id, "Solo band" label, 0.0f), \
-            SWITCH("bm" id, "Mute band" label, 0.0f), \
-            COMBO("bls" id, "Band listen stage" label, beat_breather::LISTEN_DFL, bb_tabs), \
-            CONTROL("lps" id, "Lo-pass slope" label, U_DB, beat_breather::SLOPE), \
-            CONTROL("hps" id, "Hi-pass slope" label, U_DB, beat_breather::SLOPE), \
-            CONTROL("flat" id, "Filter cap flatten" label, U_DB, beat_breather::FLATTEN), \
-            LOG_CONTROL("bg" id, "Band output gain" label, U_GAIN_AMP, beat_breather::BAND_GAIN), \
+        #define BB_SPLIT(id, label, alias, on, freq) \
+            SWITCH("se" id, "Frequency split enable" label, "Freq split" alias, on), \
+            LOG_CONTROL_DFL("sf" id, "Split frequency" label, "Split" label, U_HZ, beat_breather::FREQ, freq)
+
+        #define BB_BAND(id, label, alias, short_rms, pf_attack, pf_release, bp_attack, bp_release) \
+            SWITCH("bs" id, "Solo band" label, "Solo" alias, 0.0f), \
+            SWITCH("bm" id, "Mute band" label, "Mute" alias, 0.0f), \
+            COMBO("bls" id, "Band listen stage" label, "Listen" alias, beat_breather::LISTEN_DFL, bb_tabs), \
+            CONTROL("lps" id, "Lo-pass slope" label, "LP slope" alias, U_DB, beat_breather::SLOPE), \
+            CONTROL("hps" id, "Hi-pass slope" label, "HP slope" alias, U_DB, beat_breather::SLOPE), \
+            CONTROL("flat" id, "Filter cap flatten" label, "Flatten" alias, U_DB, beat_breather::FLATTEN), \
+            LOG_CONTROL("bg" id, "Band output gain" label, "Out lvl" alias, U_GAIN_AMP, beat_breather::BAND_GAIN), \
             METER("fre" id, "Frequency range end" label, U_HZ,  beat_breather::OUT_FREQ), \
             MESH("bfg" id, "Band filter graph" label, 2, beat_breather::FFT_MESH_POINTS + 2), \
             \
-            CONTROL("pdlt" id, "Punch detector long-time RMS estimation" label, U_MSEC, beat_breather::PD_LONG_RMS), \
-            CONTROL_DFL("pdst" id, "Punch detector short-time RMS estimation" label, U_MSEC, beat_breather::PD_SHORT_RMS, short_rms), \
-            CONTROL("pdbs" id, "Punch detector short RMS bias" label, U_DB, beat_breather::PD_BIAS), \
-            CONTROL("pdmk" id, "Punch detector makeup" label, U_DB, beat_breather::PD_MAKEUP), \
+            CONTROL("pdlt" id, "Punch detector long-time RMS estimation" label, "Punch RMS" alias, U_MSEC, beat_breather::PD_LONG_RMS), \
+            CONTROL_DFL("pdst" id, "Punch detector short-time RMS estimation" label, "Punch S-RMS" alias, U_MSEC, beat_breather::PD_SHORT_RMS, short_rms), \
+            CONTROL("pdbs" id, "Punch detector short RMS bias" label, "Punch bias" alias, U_DB, beat_breather::PD_BIAS), \
+            CONTROL("pdmk" id, "Punch detector makeup" label, "Punch makeup" alias, U_DB, beat_breather::PD_MAKEUP), \
             \
-            CONTROL("pflk" id, "Punch filter lookahead" label, U_MSEC, beat_breather::PF_LOOKAHEAD), \
-            LOG_CONTROL_DFL("pfat" id, "Punch filter attack time" label, U_MSEC, beat_breather::PF_ATTACK, pf_attack), \
-            LOG_CONTROL_DFL("pfrt" id, "Punch filter release time" label, U_MSEC, beat_breather::PF_RELEASE, pf_release), \
-            LOG_CONTROL("pfth" id, "Punch filter threshold" label, U_GAIN_AMP, beat_breather::PF_THRESHOLD), \
-            LOG_CONTROL("pfrl" id, "Punch filter reduction level" label, U_GAIN_AMP, beat_breather::PF_REDUCTION), \
-            LOG_CONTROL("pfrz" id, "Punch filter reduction zone" label, U_GAIN_AMP, beat_breather::PF_ZONE), \
+            CONTROL("pflk" id, "Punch filter lookahead" label, "Punch look" alias, U_MSEC, beat_breather::PF_LOOKAHEAD), \
+            LOG_CONTROL_DFL("pfat" id, "Punch filter attack time" label, "Punch att" alias, U_MSEC, beat_breather::PF_ATTACK, pf_attack), \
+            LOG_CONTROL_DFL("pfrt" id, "Punch filter release time" label, "Punch rel" alias, U_MSEC, beat_breather::PF_RELEASE, pf_release), \
+            LOG_CONTROL("pfth" id, "Punch filter threshold" label, "Punch thresh" alias, U_GAIN_AMP, beat_breather::PF_THRESHOLD), \
+            LOG_CONTROL("pfrl" id, "Punch filter reduction level" label, "Punch red" alias, U_GAIN_AMP, beat_breather::PF_REDUCTION), \
+            LOG_CONTROL("pfrz" id, "Punch filter reduction zone" label, "Punch zone" alias, U_GAIN_AMP, beat_breather::PF_ZONE), \
             MESH("pfg" id, "Punch filter curve graph" label, 2, beat_breather::CURVE_MESH_POINTS), \
             \
-            LOG_CONTROL_DFL("bpat" id, "Beat processor attack time" label, U_DB, beat_breather::BP_ATTACK, bp_attack), \
-            LOG_CONTROL_DFL("bprt" id, "Beat processor release time" label, U_DB, beat_breather::BP_RELEASE, bp_release), \
-            CONTROL("bpts" id, "Beat processor time shift" label, U_MSEC, beat_breather::BP_TIME_SHIFT), \
-            LOG_CONTROL("bpth" id, "Beat processor threshold" label, U_GAIN_AMP, beat_breather::BP_THRESHOLD), \
-            CONTROL("bper" id, "Beat processor expand ratio" label, U_NONE, beat_breather::BP_RATIO), \
-            LOG_CONTROL("bpmg" id, "Beat processor maximum gain" label, U_GAIN_AMP, beat_breather::BP_MAX_GAIN), \
+            LOG_CONTROL_DFL("bpat" id, "Beat processor attack time" label, "Beat att" alias, U_DB, beat_breather::BP_ATTACK, bp_attack), \
+            LOG_CONTROL_DFL("bprt" id, "Beat processor release time" label, "Beat rel" alias, U_DB, beat_breather::BP_RELEASE, bp_release), \
+            CONTROL("bpts" id, "Beat processor time shift" label, "Beat shift" label, U_MSEC, beat_breather::BP_TIME_SHIFT), \
+            LOG_CONTROL("bpth" id, "Beat processor threshold" label, "Beat thresh" alias, U_GAIN_AMP, beat_breather::BP_THRESHOLD), \
+            CONTROL("bper" id, "Beat processor expand ratio" label, "Beat ratio" alias, U_NONE, beat_breather::BP_RATIO), \
+            LOG_CONTROL("bpmg" id, "Beat processor maximum gain" label, "Beat gain" alias, U_GAIN_AMP, beat_breather::BP_MAX_GAIN), \
             MESH("bpg" id, "Beat processor curve graph" label, 2, beat_breather::CURVE_MESH_POINTS)
 
-        #define BB_BAND_METERS(id, label) \
+        #define BB_BAND_METERS(id, label, alias) \
             METER_OUT_GAIN("ilm" id, "Band input level meter" label, GAIN_AMP_P_36_DB), \
             METER_OUT_GAIN("olm" id, "Band output level meter" label, GAIN_AMP_P_36_DB), \
             MESH("pdgr" id, "Punch detector time graph" label, 2, beat_breather::TIME_MESH_POINTS), \
@@ -162,33 +162,33 @@ namespace lsp
             // Input and output audio ports
             PORTS_MONO_PLUGIN,
             BB_COMMON,
-            BB_CHANNEL_METERS("", ""),
+            BB_CHANNEL_METERS("", "", ""),
 
-            BB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            BB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            BB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            BB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            BB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            BB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            BB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            BB_BAND("_1", " 1", 19.84f, 3.36f, 8.18, 10.01, 61.08),
-            BB_BAND("_2", " 2", 14.79f, 2.32f, 6.72, 6.39, 35.88),
-            BB_BAND("_3", " 3", 11.69f, 1.72f, 5.75, 4.46, 23.46),
-            BB_BAND("_4", " 4", 9.24f, 1.27f, 4.91, 3.11, 15.32),
-            BB_BAND("_5", " 5", 7.31f, 0.95f, 4.21, 2.17, 10.01),
-            BB_BAND("_6", " 6", 5.78f, 0.71f, 3.60, 1.52, 6.55),
-            BB_BAND("_7", " 7", 4.57f, 0.52f, 3.08, 1.06, 4.27),
-            BB_BAND("_8", " 8", 3.63f, 0.32f, 2.64, 0.75, 2.83),
-
-            BB_BAND_METERS("_1", " 1"),
-            BB_BAND_METERS("_2", " 2"),
-            BB_BAND_METERS("_3", " 3"),
-            BB_BAND_METERS("_4", " 4"),
-            BB_BAND_METERS("_5", " 5"),
-            BB_BAND_METERS("_6", " 6"),
-            BB_BAND_METERS("_7", " 7"),
-            BB_BAND_METERS("_8", " 8"),
+            BB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            BB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            BB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            BB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            BB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            BB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            BB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            BB_BAND("_1", " 1", " 1", 19.84f, 3.36f, 8.18, 10.01, 61.08),
+            BB_BAND("_2", " 2", " 2", 14.79f, 2.32f, 6.72, 6.39, 35.88),
+            BB_BAND("_3", " 3", " 3", 11.69f, 1.72f, 5.75, 4.46, 23.46),
+            BB_BAND("_4", " 4", " 4", 9.24f, 1.27f, 4.91, 3.11, 15.32),
+            BB_BAND("_5", " 5", " 5", 7.31f, 0.95f, 4.21, 2.17, 10.01),
+            BB_BAND("_6", " 6", " 6", 5.78f, 0.71f, 3.60, 1.52, 6.55),
+            BB_BAND("_7", " 7", " 7", 4.57f, 0.52f, 3.08, 1.06, 4.27),
+            BB_BAND("_8", " 8", " 8", 3.63f, 0.32f, 2.64, 0.75, 2.83),
+
+            BB_BAND_METERS("_1", " 1", " 1"),
+            BB_BAND_METERS("_2", " 2", " 2"),
+            BB_BAND_METERS("_3", " 3", " 3"),
+            BB_BAND_METERS("_4", " 4", " 4"),
+            BB_BAND_METERS("_5", " 5", " 5"),
+            BB_BAND_METERS("_6", " 6", " 6"),
+            BB_BAND_METERS("_7", " 7", " 7"),
+            BB_BAND_METERS("_8", " 8", " 8"),
 
             PORTS_END
         };
@@ -199,43 +199,43 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             BB_COMMON,
             BB_COMMON_STEREO,
-            BB_CHANNEL_METERS("_l", " Left"),
-            BB_CHANNEL_METERS("_r", " Right"),
+            BB_CHANNEL_METERS("_l", " Left", " L"),
+            BB_CHANNEL_METERS("_r", " Right", " R"),
 
-            BB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            BB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            BB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            BB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            BB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            BB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            BB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            BB_BAND("_1", " 1", 19.84f, 3.36f, 8.18, 10.01, 61.08),
-            BB_BAND("_2", " 2", 14.79f, 2.32f, 6.72, 6.39, 35.88),
-            BB_BAND("_3", " 3", 11.69f, 1.72f, 5.75, 4.46, 23.46),
-            BB_BAND("_4", " 4", 9.24f, 1.27f, 4.91, 3.11, 15.32),
-            BB_BAND("_5", " 5", 7.31f, 0.95f, 4.21, 2.17, 10.01),
-            BB_BAND("_6", " 6", 5.78f, 0.71f, 3.60, 1.52, 6.55),
-            BB_BAND("_7", " 7", 4.57f, 0.52f, 3.08, 1.06, 4.27),
-            BB_BAND("_8", " 8", 3.63f, 0.32f, 2.64, 0.75, 2.83),
-
-            BB_BAND_METERS("_1l", " 1 Left"),
-            BB_BAND_METERS("_2l", " 2 Left"),
-            BB_BAND_METERS("_3l", " 3 Left"),
-            BB_BAND_METERS("_4l", " 4 Left"),
-            BB_BAND_METERS("_5l", " 5 Left"),
-            BB_BAND_METERS("_6l", " 6 Left"),
-            BB_BAND_METERS("_7l", " 7 Left"),
-            BB_BAND_METERS("_8l", " 8 Left"),
-
-            BB_BAND_METERS("_1r", " 1 Right"),
-            BB_BAND_METERS("_2r", " 2 Right"),
-            BB_BAND_METERS("_3r", " 3 Right"),
-            BB_BAND_METERS("_4r", " 4 Right"),
-            BB_BAND_METERS("_5r", " 5 Right"),
-            BB_BAND_METERS("_6r", " 6 Right"),
-            BB_BAND_METERS("_7r", " 7 Right"),
-            BB_BAND_METERS("_8r", " 8 Right"),
+            BB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            BB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            BB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            BB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            BB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            BB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            BB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            BB_BAND("_1", " 1", " 1", 19.84f, 3.36f, 8.18, 10.01, 61.08),
+            BB_BAND("_2", " 2", " 2", 14.79f, 2.32f, 6.72, 6.39, 35.88),
+            BB_BAND("_3", " 3", " 3", 11.69f, 1.72f, 5.75, 4.46, 23.46),
+            BB_BAND("_4", " 4", " 4", 9.24f, 1.27f, 4.91, 3.11, 15.32),
+            BB_BAND("_5", " 5", " 5", 7.31f, 0.95f, 4.21, 2.17, 10.01),
+            BB_BAND("_6", " 6", " 6", 5.78f, 0.71f, 3.60, 1.52, 6.55),
+            BB_BAND("_7", " 7", " 7", 4.57f, 0.52f, 3.08, 1.06, 4.27),
+            BB_BAND("_8", " 8", " 8", 3.63f, 0.32f, 2.64, 0.75, 2.83),
+
+            BB_BAND_METERS("_1l", " 1 Left", " 1 L"),
+            BB_BAND_METERS("_2l", " 2 Left", " 2 L"),
+            BB_BAND_METERS("_3l", " 3 Left", " 3 L"),
+            BB_BAND_METERS("_4l", " 4 Left", " 4 L"),
+            BB_BAND_METERS("_5l", " 5 Left", " 5 L"),
+            BB_BAND_METERS("_6l", " 6 Left", " 6 L"),
+            BB_BAND_METERS("_7l", " 7 Left", " 7 L"),
+            BB_BAND_METERS("_8l", " 8 Left", " 8 L"),
+
+            BB_BAND_METERS("_1r", " 1 Right", " 1 R"),
+            BB_BAND_METERS("_2r", " 2 Right", " 2 R"),
+            BB_BAND_METERS("_3r", " 3 Right", " 3 R"),
+            BB_BAND_METERS("_4r", " 4 Right", " 4 R"),
+            BB_BAND_METERS("_5r", " 5 Right", " 5 R"),
+            BB_BAND_METERS("_6r", " 6 Right", " 6 R"),
+            BB_BAND_METERS("_7r", " 7 Right", " 7 R"),
+            BB_BAND_METERS("_8r", " 8 Right", " 8 R"),
 
             PORTS_END
         };
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-chorus/.github/workflows/build.yml	2025-03-01 12:43:00.092628577 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/.github/workflows/build.yml	2025-08-26 18:15:46.885972623 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-chorus/CHANGELOG	2025-03-01 12:43:00.092628577 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/CHANGELOG	2025-08-26 18:15:46.885972623 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.8 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.7 ===
+* Significantly reduced LFO noise.
+* Added Drive knob to the feedback chain.
+* Updated build scripts and dependencies.
+
 === 1.0.6 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-chorus/dependencies.mk	2025-03-01 12:43:00.092628577 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/dependencies.mk	2025-08-26 18:15:46.885972623 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/include/private/meta/chorus.h 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/include/private/meta/chorus.h
--- 1.2.21-5/modules/lsp-plugins-chorus/include/private/meta/chorus.h	2025-03-01 12:43:00.092628577 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/include/private/meta/chorus.h	2025-08-26 18:15:46.885972623 +0000
@@ -108,6 +108,11 @@ namespace lsp
             static constexpr float  FEEDBACK_GAIN_DFL   = GAIN_AMP_M_6_DB;
             static constexpr float  FEEDBACK_GAIN_STEP  = 0.015f;
 
+            static constexpr float  FEEDBACK_DRIVE_MIN  = 0.0f;
+            static constexpr float  FEEDBACK_DRIVE_MAX  = 1.0f;
+            static constexpr float  FEEDBACK_DRIVE_DFL  = 0.0f;
+            static constexpr float  FEEDBACK_DRIVE_STEP = 0.025f;
+
             static constexpr float  FEEDBACK_DELAY_MIN  = 0.0f;
             static constexpr float  FEEDBACK_DELAY_MAX  = 5.0f;
             static constexpr float  FEEDBACK_DELAY_DFL  = 0.0f;
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/include/private/plugins/chorus.h 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/include/private/plugins/chorus.h
--- 1.2.21-5/modules/lsp-plugins-chorus/include/private/plugins/chorus.h	2025-03-01 12:43:00.092628577 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/include/private/plugins/chorus.h	2025-08-26 18:15:46.885972623 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-chorus
  * Created on: 23 мар 2024 г.
@@ -48,8 +48,6 @@ namespace lsp
                 typedef struct voice_t
                 {
                     uint32_t                nPhase;             // Phase shift relative to global LFO
-                    float                   nOvlDelay;          // Overlapping delay shift in samples
-                    float                   nOvlDepth;          // Overlapping depth
                     float                   fNormShift;         // Normalized shift
                     float                   fNormScale;         // Normalized scale
                     float                   fOutPhase;          // Output phase value
@@ -146,8 +144,10 @@ namespace lsp
                 float                   fWetGain;           // Wet gain
                 float                   fOldFeedGain;       // Old feedback gain
                 float                   fFeedGain;          // Feed-back gain
-                size_t                  nOldFeedDelay;      // Old feedback delay
-                size_t                  nFeedDelay;         // Feed-back delay
+                float                   fOldFeedDrive;      // Old feed-back drive
+                float                   fFeedDrive;         // Feedback drive
+                float                   fOldFeedDelay;      // Old feedback delay
+                float                   fFeedDelay;         // Feed-back delay
                 bool                    bMS;                // Mid/Side mode
                 bool                    bMono;              // Mono mode
                 bool                    bUpdateVoices;      // Need voices update flag
@@ -177,6 +177,7 @@ namespace lsp
 
                 plug::IPort            *pFeedOn;            // Enable feedback
                 plug::IPort            *pFeedGain;          // Feedback gain
+                plug::IPort            *pFeedDrive;         // Feedback drive
                 plug::IPort            *pFeedDelay;         // Feedback delay
                 plug::IPort            *pFeedPhase;         // Feedback phase
 
@@ -194,9 +195,6 @@ namespace lsp
 
             protected:
                 static inline uint32_t  phase_to_int(float phase);
-                static inline float     lerp(float o_value, float n_value, float k);
-                static inline float     qlerp(float o_value, float n_value, float k);
-                static inline int32_t   ilerp(int32_t o_value, int32_t n_value, float k);
 
             protected:
                 void                    do_destroy();
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-chorus/make/tools.mk	2025-03-01 12:43:00.092628577 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/make/tools.mk	2025-08-26 18:15:46.885972623 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/modules.mk
--- 1.2.21-5/modules/lsp-plugins-chorus/modules.mk	2025-03-01 12:43:00.092628577 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/modules.mk	2025-08-26 18:15:46.885972623 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/project.mk
--- 1.2.21-5/modules/lsp-plugins-chorus/project.mk	2025-03-01 12:43:00.092628577 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/project.mk	2025-08-26 18:15:46.885972623 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Chorus Plugin
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.6
+ARTIFACT_VERSION            = 1.0.8
 
 
 
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/res/doc/configs/chorus_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/res/doc/configs/chorus_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-chorus/res/doc/configs/chorus_stereo.cfg	2025-03-01 12:43:00.092628577 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/res/doc/configs/chorus_stereo.cfg	2025-08-26 18:15:46.885972623 +0000
@@ -1,15 +1,17 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             test (Test Case)
-#   Package version:     0.0.0-devel
-#   Plugin name:         Chorus Stereo (Chorus Stereo)
-#   Plugin version:      1.0.0
-#   UID:                 chorus_stereo
-#   LV2 URI:             http://lsp-plug.in/plugins/lv2/chorus_stereo
-#   VST 2.x identifier:  ch1s
-#   VST 3.x identifier:  64737020636831732020202063683173
-#   LADSPA identifier:   5002315
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/chorus_stereo
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Chorus Stereo (Chorus Stereo)
+#   Plugin version:          1.0.7
+#   UID:                     chorus_stereo
+#   CLAP URI:                in.lsp-plug.chorus_stereo
+#   GStreamer identifier:    lsp-plugins-chorus-stereo
+#   LADSPA identifier:       5002315
+#   LADSPA label:            http://lsp-plug.in/plugins/ladspa/chorus_stereo
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/chorus_stereo
+#   VST 2.x identifier:      ch1s
+#   VST 3.x identifier:      64737020636831732020202063683173
 # 
 # (C) Test Case
 #   https://lsp-plug.in/
@@ -199,6 +201,9 @@ fb_on = true
 # Feedback gain [G]: 0.00000000..0.89125091
 fgain = -2.51 db
 
+# Feedback drive [G]: 0.00000000..1.00000000
+fdrive = -48.49 db
+
 # Feedback delay [ms]: 0.00000000..5.00000000
 fdelay = 0.00000
 
Binary files 1.2.21-5/modules/lsp-plugins-chorus/res/doc/screenshots/chorus_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/res/doc/screenshots/chorus_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-chorus/res/doc/screenshots/chorus_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/res/doc/screenshots/chorus_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/res/main/ui/effects/chorus.xml 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/res/main/ui/effects/chorus.xml
--- 1.2.21-5/modules/lsp-plugins-chorus/res/main/ui/effects/chorus.xml	2025-03-01 12:43:00.096628554 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/res/main/ui/effects/chorus.xml	2025-08-26 18:15:46.893972545 +0000
@@ -1,7 +1,6 @@
 <plugin resizable="true">
 	<hbox>
-<grid rows="5" cols="7" hexpand="true">
-
+		<grid rows="5" cols="7" hexpand="true">
 			<!-- Row 1 -->
 			<!-- Rate, Tempo -->
 			<hbox hexpand="false" bg.color="bg_schema">
@@ -22,7 +21,7 @@
 						</align >
 						<value id="frac" width="52" sline="true"/>
 					</hbox>
-					<void fill="true" pad.b="1" height="38" visibility=":time ieq 2" />
+					<void fill="true" pad.b="1" height="38" visibility=":time ieq 2"/>
 				</vbox>
 				<vsep pad.h="2" bg.color="bg" hreduce="true"/>
 				<!-- Tempo -->
@@ -261,7 +260,6 @@
 				<hsep pad.v="2" bg.color="bg" vreduce="true"/>
 			</cell>
 
-
 			<!-- Row 5 -->
 			<!-- LFO 1 Group -->
 			<group text="labels.lfo.1" ipadding="0" width.min="29">
@@ -313,7 +311,7 @@
 							</hbox>
 						</ui:if>
 						<ui:if test="!(ex :lcp_1)">
-							<void height.min="32" pad.v="6" />
+							<void height.min="32" pad.v="6"/>
 						</ui:if>
 					</cell>
 
@@ -415,12 +413,8 @@
 						</ui:for>
 					</ui:if>
 
-					<!-- text -->
-					<!-- <text x="0" y="0" halign="1" valign="-1" text="graph.values.min"/> -->
-					<!-- <text x="0" y="1" halign="-1" valign="-1" text="graph.values.max"/> -->
-					<!-- <text x="0" y="0.5" halign="0" valign="-1" text="graph.axis.depth"/> -->
 					<ui:for id="i" first="1" count="7">
-						<text x="${:i*45}" y="0" halign="1" valign="1" text="graph.values.x:deg" text:value="${:i*45}" />
+						<text x="${:i*45}" y="0" halign="1" valign="1" text="graph.values.x:deg" text:value="${:i*45}"/>
 					</ui:for>
 					<text x="360" y="0" halign="1" valign="1" text="graph.axis.phase"/>
 
@@ -503,10 +497,6 @@
 							</ui:for>
 						</ui:if>
 
-						<!-- text -->
-						<!-- <text x="0" y="0" halign="1" valign="-1" text="graph.values.min"/> -->
-						<!-- <text x="0" y="1" halign="-1" valign="-1" text="graph.values.max"/> -->
-						<!-- <text x="0" y="0.5" halign="0" valign="-1" text="graph.axis.depth"/> -->
 						<ui:for id="i" first="1" count="7">
 							<text x="${:i*45}" y="0" halign="1" valign="1" text="graph.values.x:deg" text:value="${:i*45}"/>
 						</ui:for>
@@ -520,10 +510,11 @@
 			<void pad.h="2" bg.color="bg" hreduce="true"/>
 
 			<!-- LFO 2 Group -->
-			<group text="labels.lfo.2" ipadding="0" width.min="29" bg.bright="!:lfo2 ? :const_bg_darken : 1.0" bright="!:lfo2 ? 0.75 : 1.0">
+			<group text="labels.lfo.2" ipadding="0" width.min="29">
 				<grid rows="7" cols="3" transpose="true">
+
+					<!-- Type -->
 					<ui:with bright="(:lfo2) ? 1 : 0.75" bg.bright="(:lfo2) ? 1 : :const_bg_darken">
-						<!-- Type -->
 						<cell cols="3">
 							<vbox vfill="false" vreduce="true">
 								<label text="labels.lfo.type" pad.v="4"/>
@@ -533,9 +524,12 @@
 								</hbox>
 							</vbox>
 						</cell>
-						<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+					</ui:with>
+
+					<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
 
-						<!-- Overlap -->
+					<!-- Overlap -->
+					<ui:with bright="(:lfo2) ? 1 : 0.75" bg.bright="(:lfo2) ? 1 : :const_bg_darken">
 						<hbox fill="false" pad.v="4" pad.h="6" width.min="108">
 							<knob id="lo_2" pad.r="6" scolor=":lfo2 ? 'kscale' : 'cycle_inactive'"/>
 							<vbox width.min="64">
@@ -543,10 +537,12 @@
 								<value id="lo_2" width="48" same_line="true"/>
 							</vbox>
 						</hbox>
+					</ui:with>
 
-						<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+					<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
 
-						<!-- Phase -->
+					<!-- Phase -->
+					<ui:with bright="(:lfo2) ? 1 : 0.75" bg.bright="(:lfo2) ? 1 : :const_bg_darken">
 						<hbox fill="false" pad.v="4" pad.h="6" width.min="108">
 							<knob id="lip_2" pad.r="6" scolor=":lfo2 ? 'kscale' : 'cycle_inactive'"/>
 							<vbox width.min="64">
@@ -554,10 +550,12 @@
 								<value id="lip_2" width="48" same_line="true"/>
 							</vbox>
 						</hbox>
+					</ui:with>
 
-						<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+					<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
 
-						<!-- Difference -->
+					<!-- Difference -->
+					<ui:with bright="(:lfo2) ? 1 : 0.75" bg.bright="(:lfo2) ? 1 : :const_bg_darken">
 						<cell cols="3">
 							<ui:if test="ex :lcp_2">
 								<hbox fill="false" pad.v="4" pad.h="6">
@@ -569,14 +567,16 @@
 								</hbox>
 							</ui:if>
 							<ui:if test="!(ex :lcp_2)">
-								<void height.min="32" pad.v="6" />
+								<void height.min="32" pad.v="6"/>
 							</ui:if>
 						</cell>
+					</ui:with>
 
-						<cell rows="1"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
-						<cell rows="1"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
+					<cell rows="1"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
+					<cell rows="1"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
 
-						<!-- Delay -->
+					<!-- Delay -->
+					<ui:with bright="(:lfo2) ? 1 : 0.75" bg.bright="(:lfo2) ? 1 : :const_bg_darken">
 						<hbox fill="false" pad.v="4" pad.h="6" width.min="108">
 							<knob id="ld_2" pad.r="6" scolor=":lfo2 ? 'kscale' : 'cycle_inactive'"/>
 							<vbox width.min="64">
@@ -598,7 +598,6 @@
 			</group>
 		</grid>
 
-
 		<vsep vexpand="true" bg.color="bg" pad.h="2"/>
 
 		<!-- Mono meter for mono version -->
@@ -647,75 +646,91 @@
 		<vbox>
 			<!-- Controls -->
 			<group text="labels.controls" vexpand="true" ipadding="0">
-				<grid rows="8" cols="2">
+				<vbox>
 					<!-- mid/side -->
-					<cell cols="2">
-						<hbox hfill="true" pad.v="4" pad.h="6">
-							<button id="ms" width.min="89" text="labels.chan.mid_side" hfill="true" ui:inject="Button_mid" height="19" visibility="ex :in_l"/>
-							<button id="mono" width.min="89" text="labels.signal.mono" hfill="true" pad.h="6" ui:inject="Button_mono" height="19" visibility="ex :in_l"/>
-							<button id="sphase" width.min="89" text="labels.signal.phase" fill="true" height="19" ui:inject="Button_orange"/>
-						</hbox>
-					</cell>
-					<cell cols="2">
-						<hsep pad.v="2" bg.color="bg" vreduce="true"/>
-					</cell>
+
+					<hbox hfill="true" pad.v="4" pad.h="6">
+						<button id="ms" width.min="89" text="labels.chan.mid_side" hfill="true" ui:inject="Button_mid" height="19" visibility="ex :in_l"/>
+						<button id="mono" width.min="89" text="labels.signal.mono" hfill="true" pad.h="6" ui:inject="Button_mono" height="19" visibility="ex :in_l"/>
+						<button id="sphase" width.min="89" text="labels.signal.phase" fill="true" height="19" ui:inject="Button_orange"/>
+					</hbox>
+
+					<hsep pad.v="2" bg.color="bg" vreduce="true"/>
 
 					<!-- feedback -->
 					<ui:with bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken">
-						<cell cols="2"><void vexpand="true"/></cell>
-						<cell cols="2">
-							<hbox pad.v="4" pad.h="6">
-								<button id="fb_on" width.min="134" text="labels.feedback" hfill="true" ui:inject="Button_cyan" height="19"/>
-								<button id="fphase" width.min="134" text="labels.signal.phase" hfill="true" pad.l="6" ui:inject="Button_orange" height="19"/>
-							</hbox>
-						</cell>
-						<hbox fill="false" pad.v="4">
-							<knob id="fgain" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
-							<vbox width.min="64">
-								<label text="labels.gain"/>
-								<value id="fgain" width="48" same_line="true"/>
-							</vbox>
-						</hbox>
-						<hbox fill="false" pad.v="4">
-							<knob id="fdelay" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
-							<vbox width.min="64">
-								<label text="labels.delay"/>
-								<value id="fdelay" width="48" same_line="true"/>
-							</vbox>
+						<void vexpand="true"/>
+
+						<hbox pad.v="4" pad.h="6">
+							<button id="fb_on" width.min="134" text="labels.feedback" hfill="true" ui:inject="Button_cyan" height="19"/>
+							<button id="fphase" width.min="134" text="labels.signal.phase" hfill="true" pad.l="6" ui:inject="Button_orange" height="19"/>
 						</hbox>
-						<cell cols="2"><void vexpand="true"/></cell>
+
 					</ui:with>
 
-					<cell cols="2"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+					<grid rows="2" cols="5" vexpand="true">
+						<cell cols="8"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+						<ui:with bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken">
+							<hbox fill="false" pad.v="4" pad.h="6">
+								<knob id="fgain" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
+								<vbox width.min="4">
+									<label text="labels.gain"/>
+									<value id="fgain" width="48" same_line="true"/>
+								</vbox>
+							</hbox>
+						</ui:with>
+						<vsep pad.h="2" bg.color="bg" hreduce="true"/>
+						<ui:with bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken">
+							<hbox fill="false" pad.v="4" pad.h="6">
+								<knob id="fdrive" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
+								<vbox width.min="4">
+									<label text="labels.signal.drive"/>
+									<value id="fdrive" width="48" same_line="true"/>
+								</vbox>
+							</hbox>
+						</ui:with>
+						<vsep pad.h="2" bg.color="bg" hreduce="true"/>
+						<ui:with bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken">
+							<hbox fill="false" pad.v="4" pad.h="6">
+								<knob id="fdelay" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
+								<vbox width.min="4">
+									<label text="labels.delay"/>
+									<value id="fdelay" width="48" same_line="true"/>
+								</vbox>
+							</hbox>
+						</ui:with>
+					</grid>
+
+					<void vexpand="true" bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken"/>
+
+					<hsep pad.v="2" bg.color="bg" vreduce="true"/>
 
 					<!-- HPF and LPF -->
-					<cell cols="2">
-						<grid rows="6" cols="3" transpose="true" vexpand="true">
-							<ui:with bright="(:hpm) ? 1 : 0.75" bg.bright="(:hpm) ? 1 : :const_bg_darken">
-								<void vexpand="true"/>
-								<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false"/>
-								<combo id="hpm" pad.h="6"/>
-								<knob id="hpf" size="20" scolor="(:hpm) ? 'kscale' : 'kscale_inactive'"/>
-								<value id="hpf" sline="true"/>
-								<void vexpand="true"/>
-							</ui:with>
-
-							<cell rows="6"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
-
-							<ui:with bright="(:lpm) ? 1 : 0.75" bg.bright="(:lpm) ? 1 : :const_bg_darken">
-								<void vexpand="true"/>
-								<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false"/>
-								<combo id="lpm" pad.h="6"/>
-								<knob id="lpf" size="20" scolor="(:lpm) ? 'kscale' : 'kscale_inactive'"/>
-								<value id="lpf" sline="true"/>
-								<void vexpand="true"/>
-							</ui:with>
-						</grid>
+					<grid rows="6" cols="3" transpose="true" vexpand="true">
+						<ui:with bright="(:hpm) ? 1 : 0.75" bg.bright="(:hpm) ? 1 : :const_bg_darken">
+							<void vexpand="true"/>
+							<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false"/>
+							<combo id="hpm" pad.h="6"/>
+							<knob id="hpf" size="20" scolor="(:hpm) ? 'kscale' : 'kscale_inactive'" pad.t="4"/>
+							<value id="hpf" sline="true"/>
+							<void vexpand="true"/>
+						</ui:with>
 
-					</cell>
+						<cell rows="6"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
 
-				</grid>
+						<ui:with bright="(:lpm) ? 1 : 0.75" bg.bright="(:lpm) ? 1 : :const_bg_darken">
+							<void vexpand="true"/>
+							<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false"/>
+							<combo id="lpm" pad.h="6"/>
+							<knob id="lpf" size="20" scolor="(:lpm) ? 'kscale' : 'kscale_inactive'" pad.t="4"/>
+							<value id="lpf" sline="true"/>
+							<void vexpand="true"/>
+						</ui:with>
+					</grid>
+
+				</vbox>
 			</group>
+
 			<!-- Separator -->
 			<hsep pad.v="2" bg.color="bg" vreduce="true"/>
 			<!-- Signal -->
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/src/doc/manuals/plugins/chorus.php 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/src/doc/manuals/plugins/chorus.php
--- 1.2.21-5/modules/lsp-plugins-chorus/src/doc/manuals/plugins/chorus.php	2025-03-01 12:43:00.096628554 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/src/doc/manuals/plugins/chorus.php	2025-08-26 18:15:46.893972545 +0000
@@ -31,7 +31,7 @@ $m      =   ($PAGE == 'chorus_mono') ? '
     	<li><b>Constant power</b> - constant power crossfade</li>
     </ul>
     <li><b>Voices</b> - the overall number of voices<?php if ($m == 's') { ?> for each audio channel in the stereo pair<?php } ?>.
-    <li><b>Depth</b> - the difference betweeen maximum delay and minimum delay for LFOs.
+    <li><b>Depth</b> - the difference between maximum delay and minimum delay for LFOs.
 	<li><b>Oversampling</b> - oversampling mode.</li>
 	<ul>
 		<li><b>None</b> - no oversampling applied.</li>
@@ -57,12 +57,12 @@ $m      =   ($PAGE == 'chorus_mono') ? '
 		The oscillator can work in three modes: full period, the first half of the period (raising) and the second half of the period (falling).
 		When using half period mode, then additional crossfade is performed to make the smooth transform of the sound.
 	</li>
-	<li><b>Overlap</b> - the overlap amount between oscillator voices.
-	<li><b>Delay</b> - the minimum delay introduced by the oscillator. 
-	<li><b>Phase</b> - the initial phase of the oscillator.
-	<li><b>Phase range</b> - the phase range used to evenly assign the phase for each voice.
+	<li><b>Overlap</b> - the overlap amount between oscillator voices.</li>
+	<li><b>Delay</b> - the minimum delay introduced by the oscillator.</li> 
+	<li><b>Phase</b> - the initial phase of the oscillator.</li>
+	<li><b>Phase range</b> - the phase range used to evenly assign the phase for each voice.</li>
 	<?php if ($m == 's') { ?>
-	<li><b>Difference</b> - the phase difference between voices of the left and right channels.
+	<li><b>Difference</b> - the phase difference between voices of the left and right channels.</li>
 	<?php } ?>.
 </ul>
 
@@ -75,8 +75,9 @@ $m      =   ($PAGE == 'chorus_mono') ? '
 	<?php } ?>
 	<li><b>Phase</b> - the button that allows to enable phase inversion of the processed signal which is added to original one.</li>
 	<li><b>Feedback</b> - the button that switches on the feedback chain.</li>
-	<li><b>Feedback</b> - the knob that controls the amount of signal being fed back.</li>
     <li><b>Feedback Phase</b> - the button that allows to invert the polarity of the feedback signal.</li>
+	<li><b>Feedback</b> - the knob that controls the amount of signal being fed back.</li>
+	<li><b>Feedback Drive</b> - the amount of input signal driven into feed-back delay line.</li>
     <li><b>Feedback Delay</b> - the additional delay which can be applied to the feedback signal.</li>
     <li><b>HPF</b> - enables additional High-Pass Filter which filters the process signal.</li>
     <li><b>HPF frequency</b> - the knob that allows to control the cut-off frequency of the High-Pass Filter.</li>
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/src/main/meta/chorus.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/src/main/meta/chorus.cpp
--- 1.2.21-5/modules/lsp-plugins-chorus/src/main/meta/chorus.cpp	2025-03-01 12:43:00.096628554 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/src/main/meta/chorus.cpp	2025-08-26 18:15:46.893972545 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-chorus
  * Created on: 23 мар 2024 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_CHORUS_VERSION_MAJOR       1
 #define LSP_PLUGINS_CHORUS_VERSION_MINOR       0
-#define LSP_PLUGINS_CHORUS_VERSION_MICRO       6
+#define LSP_PLUGINS_CHORUS_VERSION_MICRO       8
 
 #define LSP_PLUGINS_CHORUS_VERSION  \
     LSP_MODULE_VERSION( \
@@ -137,23 +137,23 @@ namespace lsp
         //-------------------------------------------------------------------------
         // Plugin metadata
 
-        #define CHORUS_LFO_MONO(id, label, max_voices, osc_functions, dfl_function, phase, delay) \
-            COMBO("lt" id, "LFO type" label, dfl_function, osc_functions), \
-            COMBO("lp" id, "LFO period" label, 0, osc_periods), \
-            CONTROL("lo" id, "LFO overlap" label, U_PERCENT, chorus::OVERLAP), \
-            CONTROL_DFL("ld" id, "LFO delay" label, U_MSEC, chorus::LFO_DELAY, delay), \
-            CYC_CONTROL_DFL("lip" id, "Initial phase" label, U_DEG, chorus::PHASE, phase), \
-            CYC_CONTROL("lvp" id, "Inter-voice phase range" label, U_DEG, chorus::VOICE_PHASE), \
+        #define CHORUS_LFO_MONO(id, label, alias, max_voices, osc_functions, dfl_function, phase, delay) \
+            COMBO("lt" id, "LFO type" label, "LFO type" alias, dfl_function, osc_functions), \
+            COMBO("lp" id, "LFO period" label, "LFO period" alias, 0, osc_periods), \
+            CONTROL("lo" id, "LFO overlap" label, "LFO overlap" alias, U_PERCENT, chorus::OVERLAP), \
+            CONTROL_DFL("ld" id, "LFO delay" label, "LFO delay" alias, U_MSEC, chorus::LFO_DELAY, delay), \
+            CYC_CONTROL_DFL("lip" id, "Initial phase" label, "LFO phase" alias, U_DEG, chorus::PHASE, phase), \
+            CYC_CONTROL("lvp" id, "Inter-voice phase range" label, "Inter-phase" alias, U_DEG, chorus::VOICE_PHASE), \
             MESH("lgr" id, "LFO graph" label, (max_voices) + 1, chorus::LFO_MESH_SIZE)
 
-        #define CHORUS_LFO_STEREO(id, label, max_voices, osc_functions, dfl_function, phase, delay) \
-            COMBO("lt" id, "LFO type" label, dfl_function, osc_functions), \
-            COMBO("lp" id, "LFO period" label, 0, osc_periods), \
-            CONTROL("lo" id, "LFO overlap" label, U_PERCENT, chorus::OVERLAP), \
-            CONTROL_DFL("ld" id, "LFO delay" label, U_MSEC, chorus::LFO_DELAY, delay), \
-            CYC_CONTROL_DFL("lip" id, "Initial phase" label, U_DEG, chorus::PHASE, phase), \
-            CYC_CONTROL("lvp" id, "Inter-voice phase range" label, U_DEG, chorus::VOICE_PHASE), \
-            CYC_CONTROL("lcp" id, "Inter-channel phase" label, U_DEG, chorus::CHANNEL_PHASE), \
+        #define CHORUS_LFO_STEREO(id, label, alias, max_voices, osc_functions, dfl_function, phase, delay) \
+            COMBO("lt" id, "LFO type" label, "LFO type" alias, dfl_function, osc_functions), \
+            COMBO("lp" id, "LFO period" label, "LFO period" alias, 0, osc_periods), \
+            CONTROL("lo" id, "LFO overlap" label, "LFO overlap" alias, U_PERCENT, chorus::OVERLAP), \
+            CONTROL_DFL("ld" id, "LFO delay" label, "LFO delay" alias, U_MSEC, chorus::LFO_DELAY, delay), \
+            CYC_CONTROL_DFL("lip" id, "Initial phase" label, "LFO phase" alias, U_DEG, chorus::PHASE, phase), \
+            CYC_CONTROL("lvp" id, "Inter-voice phase range" label, "Inter-phase" alias, U_DEG, chorus::VOICE_PHASE), \
+            CYC_CONTROL("lcp" id, "Inter-channel phase" label, "Chan phase" alias, U_DEG, chorus::CHANNEL_PHASE), \
             MESH("lgr" id, "LFO graph" label, (max_voices) + 1, chorus::LFO_MESH_SIZE)
 
         #define VOICE_METER_MONO(id, label) \
@@ -175,36 +175,37 @@ namespace lsp
             BYPASS,
 
             // Operating modes
-            SWITCH("sphase", "Signal phase switch", 0.0f),
-            COMBO("ovs", "Oversampling", 0, oversampling_mode),
-            COMBO("hpm", "High-pass filter mode", 0, filter_slopes),
-            LOG_CONTROL("hpf", "High-pass filter frequency", U_HZ, chorus::HPF),
-            COMBO("lpm", "Low-pass filter mode", 0, filter_slopes),
-            LOG_CONTROL("lpf", "Low-pass filter frequency", U_HZ, chorus::LPF),
+            SWITCH("sphase", "Signal phase switch", "Phase", 0.0f),
+            COMBO("ovs", "Oversampling", "Oversampling", 0, oversampling_mode),
+            COMBO("hpm", "High-pass filter mode", "HPF mode", 0, filter_slopes),
+            LOG_CONTROL("hpf", "High-pass filter frequency", "HPF freq", U_HZ, chorus::HPF),
+            COMBO("lpm", "Low-pass filter mode", "LPF mode", 0, filter_slopes),
+            LOG_CONTROL("lpf", "Low-pass filter frequency", "LPF freq", U_HZ, chorus::LPF),
 
             // Tempo/rate controls
-            LOG_CONTROL("rate", "Rate", U_HZ, chorus::RATE),
-            CONTROL("frac", "Time fraction", U_BAR, chorus::FRACTION),
-            CONTROL("denom", "Time fraction denominator", U_BAR, chorus::DENOMINATOR),
-            CONTROL("tempo", "Tempo", U_BPM, chorus::TEMPO),
-            SWITCH("sync", "Tempo sync", 0.0f),
-            COMBO("time", "Time computing method", 0, rate_type),
-            TRIGGER("reset", "Reset phase to initial value"),
+            LOG_CONTROL("rate", "Rate", "Rate", U_HZ, chorus::RATE),
+            CONTROL("frac", "Time fraction", "Frac", U_BAR, chorus::FRACTION),
+            CONTROL("denom", "Time fraction denominator", "Denom", U_BAR, chorus::DENOMINATOR),
+            CONTROL("tempo", "Tempo", "Tempo", U_BPM, chorus::TEMPO),
+            SWITCH("sync", "Tempo sync", "Sync tempo", 0.0f),
+            COMBO("time", "Time computing method", "Method", 0, rate_type),
+            TRIGGER("reset", "Reset phase to initial value", "Reset"),
 
             // LFO settings
-            COMBO("voices", "Number of voices", 2, voices_list),
-            CONTROL("depth", "Depth", U_MSEC, chorus::DEPTH),
-            CONTROL("xfade", "Crossfade", U_PERCENT, chorus::CROSSFADE),
-            COMBO("xtype", "Crossfade Type", 1, crossfade_type),
-            SWITCH("lfo2", "Enable second LFO", 0.0f),
-            CHORUS_LFO_MONO("_1", " 1", chorus::VOICES_MAX, osc1_functions, 1, 0.0f, 5.0f),
-            CHORUS_LFO_MONO("_2", " 2", chorus::VOICES_MAX/2, osc2_functions, 0, 180.0f, 15.0f),
+            COMBO("voices", "Number of voices", "Voices", 2, voices_list),
+            CONTROL("depth", "Depth", "Depth", U_MSEC, chorus::DEPTH),
+            CONTROL("xfade", "Crossfade", "Xfade", U_PERCENT, chorus::CROSSFADE),
+            COMBO("xtype", "Crossfade Type", "Xfade type", 1, crossfade_type),
+            SWITCH("lfo2", "Enable second LFO", "Second LFO on", 0.0f),
+            CHORUS_LFO_MONO("_1", " 1", " 1", chorus::VOICES_MAX, osc1_functions, 1, 0.0f, 5.0f),
+            CHORUS_LFO_MONO("_2", " 2", " 2", chorus::VOICES_MAX/2, osc2_functions, 0, 180.0f, 15.0f),
 
             // Feedback chain
-            SWITCH("fb_on", "Feedback on", 0),
-            CONTROL("fgain", "Feedback gain", U_GAIN_AMP, chorus::FEEDBACK_GAIN),
-            CONTROL("fdelay", "Feedback delay", U_MSEC, chorus::FEEDBACK_DELAY),
-            SWITCH("fphase", "Feedback phase switch", 0.0f),
+            SWITCH("fb_on", "Feedback on", "Feed on", 0),
+            CONTROL("fgain", "Feedback gain", "Feed gain", U_GAIN_AMP, chorus::FEEDBACK_GAIN),
+            CONTROL("fdrive", "Feedback drive", "Feed drive", U_GAIN_AMP, chorus::FEEDBACK_DRIVE),
+            CONTROL("fdelay", "Feedback delay", "Feed delay", U_MSEC, chorus::FEEDBACK_DELAY),
+            SWITCH("fphase", "Feedback phase switch", "Feed phase", 0.0f),
 
             // Loudness control
             IN_GAIN,
@@ -247,38 +248,39 @@ namespace lsp
             BYPASS,
 
             // Operating modes
-            SWITCH("mono", "Test for mono compatibility", 0),
-            SWITCH("ms", "Mid/Side mode switch", 0.0f),
-            SWITCH("sphase", "Signal phase switch", 0.0f),
-            COMBO("ovs", "Oversampling", 0, oversampling_mode),
-            COMBO("hpm", "High-pass filter mode", 0, filter_slopes),
-            LOG_CONTROL("hpf", "High-pass filter frequency", U_HZ, chorus::HPF),
-            COMBO("lpm", "Low-pass filter mode", 0, filter_slopes),
-            LOG_CONTROL("lpf", "Low-pass filter frequency", U_HZ, chorus::LPF),
+            SWITCH("mono", "Test for mono compatibility", "Mono", 0),
+            SWITCH("ms", "Mid/Side mode switch", "M/S switch", 0.0f),
+            SWITCH("sphase", "Signal phase switch", "Phase", 0.0f),
+            COMBO("ovs", "Oversampling", "Oversampling", 0, oversampling_mode),
+            COMBO("hpm", "High-pass filter mode", "HPF mode", 0, filter_slopes),
+            LOG_CONTROL("hpf", "High-pass filter frequency", "HPF freq", U_HZ, chorus::HPF),
+            COMBO("lpm", "Low-pass filter mode", "LPF mode", 0, filter_slopes),
+            LOG_CONTROL("lpf", "Low-pass filter frequency", "LPF freq", U_HZ, chorus::LPF),
 
             // Tempo/rate controls
-            LOG_CONTROL("rate", "Rate", U_HZ, chorus::RATE),
-            CONTROL("frac", "Time fraction", U_BAR, chorus::FRACTION),
-            CONTROL("denom", "Time fraction denominator", U_BAR, chorus::DENOMINATOR),
-            CONTROL("tempo", "Tempo", U_BPM, chorus::TEMPO),
-            SWITCH("sync", "Tempo sync", 0.0f),
-            COMBO("time", "Time computing method", 0, rate_type),
-            TRIGGER("reset", "Reset phase to initial"),
+            LOG_CONTROL("rate", "Rate", "Rate", U_HZ, chorus::RATE),
+            CONTROL("frac", "Time fraction", "Frac", U_BAR, chorus::FRACTION),
+            CONTROL("denom", "Time fraction denominator", "Denom", U_BAR, chorus::DENOMINATOR),
+            CONTROL("tempo", "Tempo", "Tempo", U_BPM, chorus::TEMPO),
+            SWITCH("sync", "Tempo sync", "Sync tempo", 0.0f),
+            COMBO("time", "Time computing method", "Method", 0, rate_type),
+            TRIGGER("reset", "Reset phase to initial", "Reset"),
 
             // LFO settings
-            COMBO("voices", "Number of voices", 2, voices_list),
-            CONTROL("depth", "Depth", U_MSEC, chorus::DEPTH),
-            CONTROL("xfade", "Crossfade", U_PERCENT, chorus::CROSSFADE),
-            COMBO("xtype", "Crossfade Type", 1, crossfade_type),
-            SWITCH("lfo2", "Enable second LFO", 0.0f),
-            CHORUS_LFO_STEREO("_1", " 1", chorus::VOICES_MAX, osc1_functions, 1, 0.0f, 5.0f),
-            CHORUS_LFO_STEREO("_2", " 2", chorus::VOICES_MAX/2, osc2_functions, 0, 180.0f, 15.0f),
+            COMBO("voices", "Number of voices", "Voices", 2, voices_list),
+            CONTROL("depth", "Depth", "Depth", U_MSEC, chorus::DEPTH),
+            CONTROL("xfade", "Crossfade", "Xfade", U_PERCENT, chorus::CROSSFADE),
+            COMBO("xtype", "Crossfade Type", "Xfade type", 1, crossfade_type),
+            SWITCH("lfo2", "Enable second LFO", "Second LFO on", 0.0f),
+            CHORUS_LFO_STEREO("_1", " 1", " 1", chorus::VOICES_MAX, osc1_functions, 1, 0.0f, 5.0f),
+            CHORUS_LFO_STEREO("_2", " 2", " 2", chorus::VOICES_MAX/2, osc2_functions, 0, 180.0f, 15.0f),
 
             // Feedback chain
-            SWITCH("fb_on", "Feedback on", 0),
-            CONTROL("fgain", "Feedback gain", U_GAIN_AMP, chorus::FEEDBACK_GAIN),
-            CONTROL("fdelay", "Feedback delay", U_MSEC, chorus::FEEDBACK_DELAY),
-            SWITCH("fphase", "Feedback phase switch", 0.0f),
+            SWITCH("fb_on", "Feedback on", "Feed on", 0),
+            CONTROL("fgain", "Feedback gain", "Feed gain", U_GAIN_AMP, chorus::FEEDBACK_GAIN),
+            CONTROL("fdrive", "Feedback drive", "Feed drive", U_GAIN_AMP, chorus::FEEDBACK_DRIVE),
+            CONTROL("fdelay", "Feedback delay", "Feed delay", U_MSEC, chorus::FEEDBACK_DELAY),
+            SWITCH("fphase", "Feedback phase switch", "Feed phase", 0.0f),
 
             // Loudness control
             IN_GAIN,
diff -pruN 1.2.21-5/modules/lsp-plugins-chorus/src/main/plug/chorus.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/src/main/plug/chorus.cpp
--- 1.2.21-5/modules/lsp-plugins-chorus/src/main/plug/chorus.cpp	2025-03-01 12:43:00.100628531 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-chorus/src/main/plug/chorus.cpp	2025-08-26 18:15:46.893972545 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-chorus
  * Created on: 23 мар 2024 г.
@@ -22,6 +22,7 @@
 #include <lsp-plug.in/common/alloc.h>
 #include <lsp-plug.in/common/debug.h>
 #include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/dsp-units/misc/quickmath.h>
 #include <lsp-plug.in/dsp-units/units.h>
 #include <lsp-plug.in/plug-fw/meta/func.h>
 #include <lsp-plug.in/shared/debug.h>
@@ -143,7 +144,7 @@ namespace lsp
             nVoices             = 0;
             nCrossfade          = 0;
             fCrossfade          = PHASE_COEFF;
-            pCrossfadeFunc      = qlerp;
+            pCrossfadeFunc      = dspu::qlerp;
             fDepth              = 0.0f;
             nOldDepth           = 0;
             nDepth              = 0;
@@ -156,8 +157,10 @@ namespace lsp
             fWetGain            = GAIN_AMP_M_6_DB;
             fOldFeedGain        = 0.0f;
             fFeedGain           = 0.0f;
-            nOldFeedDelay       = 0;
-            nFeedDelay          = 0;
+            fOldFeedDrive       = 0.0f;
+            fFeedDrive          = 0.0f;
+            fOldFeedDelay       = 0.0f;
+            fFeedDelay          = 0.0f;
 
             bMS                 = false;
             bMono               = false;
@@ -189,6 +192,7 @@ namespace lsp
 
             pFeedOn             = NULL;
             pFeedGain           = NULL;
+            pFeedDrive          = NULL;
             pFeedDelay          = NULL;
             pFeedPhase          = NULL;
 
@@ -223,7 +227,7 @@ namespace lsp
                 szof_voices +           // vVoices
                 buf_sz +                // vBuffer
                 mesh_buf_sz +           // vLfoPhase
-                2 * mesh_buf_sz +       // lfo_t::vBuffer
+                2 * mesh_buf_sz +       // lfo_t::vLfoMesh
                 nChannels * buf_sz;     // channel_t::vBuffer
 
             // Allocate memory-aligned data
@@ -351,6 +355,7 @@ namespace lsp
             lsp_trace("Binding feedback settings");
             BIND_PORT(pFeedOn);
             BIND_PORT(pFeedGain);
+            BIND_PORT(pFeedDrive);
             BIND_PORT(pFeedDelay);
             BIND_PORT(pFeedPhase);
 
@@ -452,21 +457,6 @@ namespace lsp
             return float(PHASE_MAX) * (phase / 360.0f);
         }
 
-        inline float chorus::lerp(float o_value, float n_value, float k)
-        {
-            return o_value + (n_value - o_value) * k;
-        }
-
-        inline float chorus::qlerp(float o_value, float n_value, float k)
-        {
-            return o_value * sqrtf(1.0f - k) + n_value * sqrtf(k);
-        }
-
-        inline int32_t chorus::ilerp(int32_t o_value, int32_t n_value, float k)
-        {
-            return o_value + (n_value - o_value) * k;
-        }
-
         void chorus::update_settings()
         {
             // Update oversampling settings
@@ -500,10 +490,12 @@ namespace lsp
             const float in_gain     = pInGain->value();
             const float out_gain    = pOutGain->value();
             const bool bypass       = pBypass->value() >= 0.5f;
-            bool fb_on              = pFeedOn->value() >= 0.5f;
-            float feed_gain         = (fb_on) ? pFeedGain->value() : 0.0f;
+            const bool fb_on        = pFeedOn->value() >= 0.5f;
+            const float feed_gain   = (fb_on) ? pFeedGain->value() : 0.0f;
+            const float feed_drive  = pFeedDrive->value();
+            const float feed_phase  = pFeedPhase->value() >= 0.5f;
             const bool mid_side     = (pMS != NULL) ? pMS->value() >= 0.5f : false;
-            float crossfade         = pCrossfade->value() * 0.01f;
+            const float crossfade   = pCrossfade->value() * 0.01f;
 
             // Compute LFO rate and phase
             float rate              = 0.0f;
@@ -553,13 +545,15 @@ namespace lsp
             fInGain                 = in_gain;
             fDryGain                = (dry_gain * drywet + 1.0f - drywet) * out_gain;
             fWetGain                = wet_gain * drywet * out_gain;
-            nOldFeedDelay           = nFeedDelay;
-            nFeedDelay              = dspu::millis_to_samples(srate, pFeedDelay->value());
+            fOldFeedDelay           = fFeedDelay;
+            fFeedDelay              = dspu::millis_to_samples(srate, pFeedDelay->value());
             fOldFeedGain            = fFeedGain;
-            fFeedGain               = (pFeedPhase->value() >= 0.5f) ? -feed_gain : feed_gain;
+            fFeedGain               = (feed_phase) ? -feed_gain : feed_gain;
+            fOldFeedDrive           = fFeedDrive;
+            fFeedDrive              = (feed_phase) ? -feed_drive : feed_drive;
             nCrossfade              = float(PHASE_MAX) * crossfade * 2;
             fCrossfade              = PHASE_COEFF * (1.0f - crossfade);
-            pCrossfadeFunc          = (int(pCrossfadeType->value()) == 0) ? lerp : qlerp;
+            pCrossfadeFunc          = (int(pCrossfadeType->value()) == 0) ? dspu::lerp : dspu::qlerp;
 
             // LFO setup
             const size_t n_lfo      = (pLfo2Enable->value() >= 0.5f) ? 2 : 1;
@@ -639,7 +633,7 @@ namespace lsp
                 {
                     lfo_t *lfo              = &vLfo[i];
                     const float p_step      = lfo->fIVoicePhase / float(lfo->nVoices);
-                    const float ovl_width   = lerp(1.0f / lfo->nVoices, 1.0f, lfo->fOverlap);
+                    const float ovl_width   = dspu::lerp(1.0f / lfo->nVoices, 1.0f, lfo->fOverlap);
                     const float ovl_step    = (lfo->nVoices > 1) ? (1.0f - ovl_width) / (lfo->nVoices - 1) : 0.0f;
 
                     for (size_t j=0; j<lfo->nVoices; ++j)
@@ -831,9 +825,14 @@ namespace lsp
                     // Process each sample
                     for (size_t i=0; i<up_to_do; ++i)
                     {
-                        const float c_sample    = vBuffer[i];
                         const float s           = i * k_up_to_do;
+                        const float fb_delay    = dspu::lerp(fOldFeedDelay, fFeedDelay, s);
+                        const float fb_gain     = dspu::lerp(fOldFeedGain, fFeedGain, s);
+                        const float fb_drive    = dspu::lerp(fOldFeedDrive, fFeedDrive, s);
+
+                        const float c_sample    = vBuffer[i];
                         float p_sample          = 0.0f;
+                        float fb_p_sample       = 0.0f;
 
                         c->sRing.append(c_sample);
 
@@ -842,19 +841,20 @@ namespace lsp
                         {
                             lfo_t *lfo              = &vLfo[j];
 
-                            const float lfo_delay   = ilerp(lfo->nOldDelay, lfo->nDelay, s);
-                            const float lfo_depth   = ilerp(nOldDepth, nDepth, s);
+                            const float lfo_delay   = dspu::ilerp(lfo->nOldDelay, lfo->nDelay, s);
+                            const float lfo_depth   = dspu::ilerp(nOldDepth, nDepth, s);
 
                             // Process each voice that matches the channel for current LFO
                             for (size_t k=0; k<lfo->nVoices; ++k)
                             {
                                 voice_t *v              = &lfo->vVoices[k*nChannels + nc];
-                                uint32_t i_phase        = (phase + ilerp(lfo->nOldInitPhase + v->nPhase, lfo->nInitPhase + v->nPhase, s)) & PHASE_MASK;
+                                uint32_t i_phase        = (phase + dspu::ilerp(lfo->nOldInitPhase + v->nPhase, lfo->nInitPhase + v->nPhase, s)) & PHASE_MASK;
                                 float o_phase           = i_phase * fCrossfade;
                                 float c_phase           = o_phase * lfo->fArg[0] + lfo->fArg[1];
                                 float c_func            = v->fNormScale * lfo->pFunc(c_phase) + v->fNormShift;
-                                size_t c_shift          = lfo_delay + lfo_depth * c_func;
-                                float c_dsample         = c->sRing.get(c_shift);
+                                float c_shift           = lfo_delay + lfo_depth * c_func;
+                                float c_dsample         = c->sRing.lerp_get(c_shift);
+                                float fb_dsample;
 
                                 v->fOutPhase            = o_phase;
                                 v->fOutShift            = c_func;
@@ -863,34 +863,41 @@ namespace lsp
                                 // Perform cross-fade if required
                                 if (i_phase < nCrossfade)
                                 {
-                                    float mix               = float(i_phase) / float(nCrossfade);
+                                    const float mix         = float(i_phase) / float(nCrossfade);
                                     i_phase                 = i_phase + PHASE_MAX;
                                     c_phase                 = i_phase * fCrossfade * lfo->fArg[0] + lfo->fArg[1];
                                     c_func                  = v->fNormScale * lfo->pFunc(c_phase) + v->fNormShift;
                                     c_shift                 = lfo_delay + lfo_depth * c_func;
-                                    c_dsample               = pCrossfadeFunc(c->sRing.get(c_shift), c_dsample, mix);
+
+                                    const float x_dsample   = c->sRing.lerp_get(c_shift);
+                                    fb_dsample              = dspu::lerp(x_dsample, c_dsample, mix);
+                                    c_dsample               = pCrossfadeFunc(x_dsample, c_dsample, mix);
                                 }
+                                else
+                                    fb_dsample              = c_dsample;
 
                                 // Compute the sample
                                 p_sample               += c_dsample;
+                                fb_p_sample            += fb_dsample;
                             }
                         }
 
                         // Process feedback
-                        ssize_t c_feed_delay    = ilerp(vLfo[0].nOldDelay, vLfo[0].nDelay, s);
+                        ssize_t c_feed_delay    = dspu::ilerp(vLfo[0].nOldDelay, vLfo[0].nDelay, s);
                         if (nLfo > 1)
-                            c_feed_delay            = lsp_min(c_feed_delay, ilerp(vLfo[1].nOldDelay, vLfo[1].nDelay, s));
-                        size_t c_fbshift        = c_feed_delay + ilerp(nOldFeedDelay, nFeedDelay, s) - 1;
-                        float fb_sample         = c->sFeedback.get(c_fbshift);
-                        p_sample               += fb_sample * lerp(fOldFeedGain, fFeedGain, s);
+                            c_feed_delay            = lsp_min(c_feed_delay, dspu::ilerp(vLfo[1].nOldDelay, vLfo[1].nDelay, s));
+                        size_t c_fbshift        = c_feed_delay + fb_delay;
+                        float fb_sample         = c->sFeedback.lerp_get(c_fbshift);
+                        p_sample               += fb_sample * fb_gain;
+                        fb_p_sample            += fb_sample * fb_gain;
 
-                        c->sFeedback.append(p_sample);
+                        c->sFeedback.append(c_sample * fb_drive + fb_p_sample);
 
                         // Update buffer sample
                         vBuffer[i]              = p_sample;
 
                         // Update the phase
-                        phase                   = (phase + ilerp(nOldPhaseStep, nPhaseStep, s)) & PHASE_MASK;
+                        phase                   = (phase + dspu::ilerp(nOldPhaseStep, nPhaseStep, s)) & PHASE_MASK;
                     }
 
                     // Perform downsampling back into channel's buffer
@@ -959,7 +966,8 @@ namespace lsp
                 nOldPhaseStep       = nPhaseStep;
                 nOldDepth           = nDepth;
                 fOldFeedGain        = fFeedGain;
-                nOldFeedDelay       = nFeedDelay;
+                fOldFeedDrive       = fFeedDrive;
+                fOldFeedDelay       = fFeedDelay;
                 fOldInGain          = fInGain;
                 fOldDryGain         = fDryGain;
                 fOldWetGain         = fWetGain;
@@ -1252,8 +1260,6 @@ namespace lsp
                     v->begin_object(s, sizeof(voice_t));
                     {
                         v->write("nPhase", s->nPhase);
-                        v->write("nOvlDelay", s->nOvlDelay);
-                        v->write("nOvlDepth", s->nOvlDepth);
                         v->write("fNormShift", s->fNormShift);
                         v->write("fNormScale", s->fNormScale);
                         v->write("fOutPhase", s->fOutPhase);
@@ -1332,8 +1338,10 @@ namespace lsp
             v->write("fWetGain", fWetGain);
             v->write("fOldFeedGain", fOldFeedGain);
             v->write("fFeedGain", fFeedGain);
-            v->write("nOldFeedDelay", nOldFeedDelay);
-            v->write("nFeedDelay", nFeedDelay);
+            v->write("fOldFeedDrive", fOldFeedDrive);
+            v->write("fFeedDrive", fFeedDrive);
+            v->write("fOldFeedDelay", fOldFeedDelay);
+            v->write("fFeedDelay", fFeedDelay);
             v->write("bMS", bMS);
             v->write("bMono", bMono);
             v->write("bUpdateVoices", bUpdateVoices);
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-clipper/.github/workflows/build.yml	2025-03-01 12:43:00.316627233 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/.github/workflows/build.yml	2025-08-26 18:15:46.685974564 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-clipper/CHANGELOG	2025-03-01 12:43:00.316627233 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/CHANGELOG	2025-08-26 18:15:46.685974564 +0000
@@ -2,6 +2,13 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.10 ===
+* Added DC offset control at the clipping stage.
+* Updated build scripts and dependencies.
+
+=== 1.0.9 ===
+* Updated build scripts and dependencies.
+
 === 1.0.8 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-clipper/dependencies.mk	2025-03-01 12:43:00.316627233 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/dependencies.mk	2025-08-26 18:15:46.685974564 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/include/private/meta/clipper.h 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/include/private/meta/clipper.h
--- 1.2.21-5/modules/lsp-plugins-clipper/include/private/meta/clipper.h	2025-03-01 12:43:00.316627233 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/include/private/meta/clipper.h	2025-08-26 18:15:46.685974564 +0000
@@ -42,8 +42,9 @@ namespace lsp
             static constexpr float  CLIP_CURVE_X_MAX        = 2.25f;
             static constexpr size_t CURVE_MESH_POINTS       = 256;
             static constexpr size_t REFRESH_RATE            = 20;
-            static constexpr size_t TIME_MESH_POINTS        = 320;
+            static constexpr size_t TIME_MESH_POINTS        = 400;
             static constexpr float  TIME_HISTORY_MAX        = 5.0f;
+            static constexpr float  WAVEFORM_HISTORY_MAX    = 1.0f;
             static constexpr float  TIME_HISTORY_GAP        = 0.5f;
             static constexpr float  LUFS_MEASUREMENT_PERIOD = 400.0f;
             static constexpr float  LUFS_LIMITER_REACT      = 48.0f;
@@ -53,6 +54,11 @@ namespace lsp
             static constexpr float  THRESHOLD_DFL           = 0.0f;
             static constexpr float  THRESHOLD_STEP          = 0.01f;
 
+            static constexpr float  DCOFF_MIN               = -100.0f;
+            static constexpr float  DCOFF_MAX               = 100.0f;
+            static constexpr float  DCOFF_DFL               = 0.0f;
+            static constexpr float  DCOFF_STEP              = 0.05f;
+
             static constexpr float  HPF_FREQ_MIN            = 10.0f;
             static constexpr float  HPF_FREQ_MAX            = 60.0f;
             static constexpr float  HPF_FREQ_DFL            = 30.0f;
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/include/private/plugins/clipper.h 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/include/private/plugins/clipper.h
--- 1.2.21-5/modules/lsp-plugins-clipper/include/private/plugins/clipper.h	2025-03-01 12:43:00.316627233 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/include/private/plugins/clipper.h	2025-08-26 18:15:46.685974564 +0000
@@ -50,8 +50,9 @@ namespace lsp
                     CF_LUFS_LIMITER     = 1 << 1,           // Enable LUFS limiter
                     CF_CLIP_ENABLED     = 1 << 2,           // Output clipper enabled
                     CF_ODP_ENABLED      = 1 << 3,           // Overdrive protection enabled
-                    CF_SYNC_ODP         = 1 << 4,           // Sync overdrive protection curve
-                    CF_SYNC_CLIP        = 1 << 5,           // Sync sigmoid clipping curve
+                    CF_DC_COMPENSATE    = 1 << 4,           // Compensate DC offset
+                    CF_SYNC_ODP         = 1 << 5,           // Sync overdrive protection curve
+                    CF_SYNC_CLIP        = 1 << 6,           // Sync sigmoid clipping curve
 
                     CF_SYNC_ALL         = CF_SYNC_ODP | CF_SYNC_CLIP
                 };
@@ -87,6 +88,7 @@ namespace lsp
                 {
                     dspu::sigmoid::function_t   pFunc;      // Sigmoid function
                     float               fThreshold;         // Threshold
+                    float               fDCOffset;          // DC offset
                     float               fPumping;           // Pumping
                     float               fScaling;           // Sigmoid scaling
                     float               fKnee;              // Knee
@@ -94,6 +96,8 @@ namespace lsp
                     plug::IPort        *pOn;                // Enable sigmoid function
                     plug::IPort        *pFunction;          // Sigmoid function
                     plug::IPort        *pThreshold;         // Sigmoid threshold
+                    plug::IPort        *pDCOffset;          // DC offset
+                    plug::IPort        *pDCCompensate;      // DC compensate
                     plug::IPort        *pPumping;           // Sigmoid pumping
                     plug::IPort        *pCurveMesh;         // Curve chart mesh
                 } clip_params_t;
@@ -121,6 +125,8 @@ namespace lsp
                     dspu::Dither        sDither;            // Dither
                     dspu::MeterGraph    sInGraph;           // Input meter graph
                     dspu::MeterGraph    sOutGraph;          // Output meter graph
+                    dspu::MeterGraph    sWaveformGraph;     // Waveform meter graph
+                    dspu::MeterGraph    sRedGraph;          // Reduction meter graph
 
                     // Channel flags
                     uint32_t            nFlags;             // Channel flags
@@ -134,13 +140,14 @@ namespace lsp
                     float               fOdpOut;            // Overdrive protection out level
                     float               fOdpRed;            // Overdrive protection reduction level
 
-                    float               fClipIn;            // Clipping input level measured
-                    float               fClipOut;           // Clipping output level measured
+                    float               fClipIn[2];         // Clipping input level measured
+                    float               fClipOut[2];        // Clipping output level measured
                     float               fClipRed;           // Clipping reduction level measured
 
                     // Buffers
                     float              *vIn;                // Input buffer
                     float              *vOut;               // Output buffer
+                    float              *vInMeter;           // Input data metering
                     float              *vData;              // Data buffer
                     float              *vSc;                // Sidechain buffer
 
@@ -161,11 +168,9 @@ namespace lsp
                     plug::IPort        *pOdpOut;            // ODP output level meter
                     plug::IPort        *pOdpRed;            // ODP reduction level meter
 
-                    plug::IPort        *pClipIn;            // Clipping input level meter
-                    plug::IPort        *pClipOut;           // Clipping output level meter
+                    plug::IPort        *pClipIn[2];         // Clipping input level meter
+                    plug::IPort        *pClipOut[2];        // Clipping output level meter
                     plug::IPort        *pClipRed;           // Clipping reduction level meter
-
-                    plug::IPort        *pTimeMesh;          // Input, output and gain reduction graph mesh
                 } channel_t;
 
             protected:
@@ -195,6 +200,7 @@ namespace lsp
                 float              *vLinSigmoid;        // Linear scale for sigmoid
                 float              *vLogSigmoid;        // Logarithmic scale for sigmoid
                 float              *vTime;              // Time graph
+                float              *vWaveformTime;      // Waveform graph
                 core::IDBuffer     *pIDisplay;          // Inline display buffer
 
                 plug::IPort        *pBypass;            // Bypass
@@ -206,6 +212,8 @@ namespace lsp
                 plug::IPort        *pBoosting;          // Boosting mode
                 plug::IPort        *pStereoLink;        // Stereo linking for output clipper
                 plug::IPort        *pDithering;         // Dithering mode
+                plug::IPort        *pTimeMesh;          // Input, output, gain reduction graph mesh
+                plug::IPort        *pWaveformMesh;      // Waveform graph mesh
 
                 uint8_t            *pData;              // Allocated data
 
@@ -228,6 +236,9 @@ namespace lsp
             protected:
                 void                    do_destroy();
                 void                    bind_input_buffers();
+                void                    process_odp_channel(channel_t *c, size_t samples);
+                void                    process_clip_channel(channel_t *c, size_t samples);
+                void                    meter_channel(channel_t *c, size_t samples);
                 void                    process_clipper(size_t samples);
                 void                    output_signal(size_t samples);
                 void                    advance_buffers(size_t samples);
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-clipper/make/tools.mk	2025-03-01 12:43:00.320627209 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/make/tools.mk	2025-08-26 18:15:46.685974564 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/modules.mk
--- 1.2.21-5/modules/lsp-plugins-clipper/modules.mk	2025-03-01 12:43:00.320627209 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/modules.mk	2025-08-26 18:15:46.685974564 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/project.mk
--- 1.2.21-5/modules/lsp-plugins-clipper/project.mk	2025-03-01 12:43:00.320627209 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/project.mk	2025-08-26 18:15:46.685974564 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = Clipper Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.8
+ARTIFACT_VERSION            = 1.0.10
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-clipper/res/doc/screenshots/clipper_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/doc/screenshots/clipper_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-clipper/res/doc/screenshots/clipper_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/doc/screenshots/clipper_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/res/main/i18n/default/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/i18n/default/lists.json
--- 1.2.21-5/modules/lsp-plugins-clipper/res/main/i18n/default/lists.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/i18n/default/lists.json	2025-08-26 18:15:46.685974564 +0000
@@ -0,0 +1,9 @@
+{
+	"clipper": {
+		"view": {		
+			"combined": "Combined",
+			"dynamics": "Dynamics",
+			"waveform": "Waveform"
+		}
+	}
+}
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/res/main/i18n/ru/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/i18n/ru/lists.json
--- 1.2.21-5/modules/lsp-plugins-clipper/res/main/i18n/ru/lists.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/i18n/ru/lists.json	2025-08-26 18:15:46.685974564 +0000
@@ -0,0 +1,9 @@
+{
+	"clipper": {
+		"view": {
+			"combined": "Совмещенный",
+			"dynamics": "Динамика",
+			"waveform": "Форма волны"
+		}
+	}
+}
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/res/main/i18n/us/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/i18n/us/lists.json
--- 1.2.21-5/modules/lsp-plugins-clipper/res/main/i18n/us/lists.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/i18n/us/lists.json	2025-08-26 18:15:46.685974564 +0000
@@ -0,0 +1,9 @@
+{
+	"clipper": {
+		"view": {		
+			"combined": "Combined",
+			"dynamics": "Dynamics",
+			"waveform": "Waveform"
+		}
+	}
+}
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/res/main/ui/dynamics/clipper/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/ui/dynamics/clipper/mono.xml
--- 1.2.21-5/modules/lsp-plugins-clipper/res/main/ui/dynamics/clipper/mono.xml	2025-03-01 12:43:00.324627186 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/ui/dynamics/clipper/mono.xml	2025-08-26 18:15:46.685974564 +0000
@@ -10,6 +10,7 @@
 					<void hexpand="true"/>
 					<button id="op" ui:inject="Button_green" text="labels.odp"/>
 					<button id="ce" text="labels.signal.clipping" pad.l="8"/>
+					<button id="dcomp" text="labels.signal.dc_compensate" ui:inject="Button_cyan"/>
 					<button id="clog" text="labels.log_scale" ui:inject="Button_yellow"/>
 
 					<label text="labels.function" pad.l="8"/>
@@ -120,56 +121,56 @@
 								<text x="-15 db" text="-15"/>
 								<text x="-18 db" text="graph.axis.in" halign="1"/>
 							</ui:with>
-							<text x=":th" y="-18 db" ox="2" text="graph.values.x:db:f" text:value=":th" text.eval="true" color=":op ? 'threshold' : 'graph_prim'" halign="(:th lt -6) ? 1 : -1" valign="1"/>
+							<text x=":th" y="6 db" ox="2" text="graph.values.x:db:f" text:value=":th" text.eval="true" color=":op ? 'threshold' : 'graph_prim'" halign="(:th lt -6) ? 1 : -1" valign="-1"/>
 						</graph>
 					</group>
 				</ui:with>
 				<void pad.h="2" bg.color="bg" hreduce="true"/>
 				<!-- ODP gain reduction meter -->
 				<ui:with bg.bright="!:op ? :const_bg_darken : 1.0" bright="!:op ? 0.75 : 1.0">
-				<vbox vexpand="true">
-					<label text="labels.odp" padding="4"/>
-					<ledmeter vexpand="true" angle="1">
-						<ledchannel
-							id="odr"
-							min="-12 db"
-							max="0 db"
-							log="true"
-							balance="0 db"
-							balance.visibility="true"
-							type="peak"
-							value.color=":op ? 'dark_green' : 'cycle_inactive'"
-							yellow.color=":op ? 'meter_yellow' : 'cycle_inactive'"
-							balance.color=":op ? 'green' : 'cycle_inactive'"/>
-					</ledmeter>
-				</vbox>
-			</ui:with>
+					<vbox vexpand="true">
+						<label text="labels.odp" padding="4"/>
+						<ledmeter vexpand="true" angle="1">
+							<ledchannel
+								id="odr"
+								min="-12 db"
+								max="0 db"
+								log="true"
+								balance="0 db"
+								balance.visibility="true"
+								type="peak"
+								value.color=":op ? 'dark_green' : 'cycle_inactive'"
+								yellow.color=":op ? 'meter_yellow' : 'cycle_inactive'"
+								balance.color=":op ? 'green' : 'cycle_inactive'"/>
+						</ledmeter>
+					</vbox>
+				</ui:with>
 			</hbox>
 			<void pad.v="2" bg.color="bg" vreduce="true"/>
 			<!-- controls -->
 			<ui:with bg.bright="!:op ? :const_bg_darken : 1.0" bright="!:op ? 0.75 : 1.0">
-			<hbox pad.v="4">
-				<!-- thresh -->
-				<hbox fill="false" pad.l="6" pad.r="10">
-					<knob id="th" scolor=":op ? 'threshold' : 'cycle_inactive'"/>
-					<vbox vfill="false" width="50" pad.l="4">
-						<label text="labels.thresh_old" halign="0"/>
-						<value id="th" sline="true" halign="0"/>
-					</vbox>
-				</hbox>
+				<hbox pad.v="4">
+					<!-- thresh -->
+					<hbox fill="false" pad.l="6" pad.r="10">
+						<knob id="th" scolor=":op ? 'threshold' : 'cycle_inactive'"/>
+						<vbox vfill="false" width="50" pad.l="4">
+							<label text="labels.thresh_old" halign="0"/>
+							<value id="th" sline="true" halign="0"/>
+						</vbox>
+					</hbox>
 
-				<!-- knee -->
-				<hbox fill="false">
-					<knob id="kn" scolor=":op ? 'green' : 'cycle_inactive'"/>
-					<vbox vfill="false" width="50" pad.l="4">
-						<label text="labels.knee" halign="-1"/>
-						<value id="kn" sline="true" halign="0"/>
-					</vbox>
-				</hbox>
+					<!-- knee -->
+					<hbox fill="false">
+						<knob id="kn" scolor=":op ? 'green' : 'cycle_inactive'"/>
+						<vbox vfill="false" width="50" pad.l="4">
+							<label text="labels.knee" halign="-1"/>
+							<value id="kn" sline="true" halign="0"/>
+						</vbox>
+					</hbox>
 
-				<void hexpand="true" hfill="true"/>
-			</hbox>
-		</ui:with>
+					<void hexpand="true" hfill="true"/>
+				</hbox>
+			</ui:with>
 		</vbox>
 
 		<cell rows="2">
@@ -179,252 +180,271 @@
 		<vbox>
 			<hbox expand="true">
 				<ui:with bg.bright="!:ce ? :const_bg_darken : 1.0" bright="!:ce ? 0.75 : 1.0">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.clipping">
-					<vbox>
-						<!-- Clipper function graph linear -->
-						<graph width.min="265" height.min="215" expand="true" fill="true" visibility="!:clog">
-							<origin hpos="-0.8" vpos="-2.0/3.0" visible="false"/>
-							<origin hpos="-1" vpos="0" visible="false"/>
-
-							<ui:with ox="0" oy="1">
-								<marker v="0.25" color="graph_alt_1"/>
-								<marker v="0.75" color="graph_alt_1"/>
-								<marker v="1.25" color="graph_alt_1"/>
-								<marker v="1.75" color="graph_alt_1"/>
-							</ui:with>
-							<ui:with ox="1" oy="0">
-								<marker v="0.25" color="graph_alt_1"/>
-								<marker v="0.75" color="graph_alt_1"/>
-							</ui:with>
-
-							<ui:with ox="0" oy="1">
-								<marker v="0.5" color="graph_sec"/>
-								<marker v="1" color="graph_sec"/>
-								<marker v="1.5" color="graph_sec"/>
-								<marker v="2" color="graph_sec"/>
-							</ui:with>
-							<ui:with ox="1" oy="0">
-								<marker v="0.5" color="graph_sec"/>
-								<marker v="1" color="graph_sec"/>
-							</ui:with>
-
-							<!-- Axes and boundaries -->
-							<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width * 0.6" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-							<axis min="-0.25" max="2.25" color="graph_prim" angle="0.0" width="2"/>
-							<axis min="-0.25" max="1.25" color="graph_prim" angle="0.5" width="2"/>
-							<axis o="1" min="-0.25" max="2.25" color="graph_prim" angle="0.0" zero="-0.25" visibility="false"/>
-
-							<!-- Meshes -->
-							<mesh id="cfc" x.index="0" y.index="1" width="3" color=":ce ? 'graph_mesh': 'graph_prim'" smooth="true"/>
-							<dot x.id="cfx" y.id="cfy" color="dot" bcolor="dot" visibility=":ce"/>
-
-							<!-- Markers -->
-							<marker
-								id="ct"
-								o="1"
-								ox="2"
-								width="2"
-								editable="true"
-								pointer="hsize"
-								visibility=":ce and :cf ine 0"
-								fill="0.5"
-								color.a="0.2"
-								hcolor.a="0.1"
-								lcolor.a="0.8"
-								hlcolor.a="0.6"
-								rcolor.a="0.8"
-								hrcolor.a="0.6"
-								color="threshold"
-								hcolor="threshold"
-								lcolor="threshold"
-								hlcolor="threshold"
-								rcolor="threshold"
-								hrcolor="threshold"/>
-							<marker
-								id="ct"
-								o="1"
-								ox="2"
-								width="2"
-								editable="true"
-								pointer="hsize"
-								visibility="!:ce or :cf ieq 0"
-								fill="0.5"
-								color.a="0.2"
-								hcolor.a="0.1"
-								lcolor.a="0.8"
-								hlcolor.a="0.6"
-								rcolor.a="0.8"
-								hrcolor.a="0.6"
-								color="graph_prim"
-								hcolor="graph_prim"
-								lcolor="graph_prim"
-								hlcolor="graph_prim"
-								rcolor="graph_prim"
-								hrcolor="graph_prim"/>
-
-							<!-- Text -->
-							<ui:with x="0" halign="-1" valign="-1">
-								<text y="0.5" text="0.5"/>
-								<text y="1" text="1"/>
-								<text y="1.25" text="graph.axis.out" valign="-1"/>
-							</ui:with>
-							<ui:with y="0" halign="1" valign="-1">
-								<text x="0" text="0"/>
-								<text x="0.5" text="0.5"/>
-								<text x="1.0" text="1"/>
-								<text x="1.5" text="1.5"/>
-								<text x="2.0" text="2"/>
-								<text x="2.25" text="graph.axis.in" halign="-1"/>
-							</ui:with>
-							<text x=":ct" y="1.25" text="graph.values.x::f" text:value=":ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="1" valign="-1"/>
-							<text x=":ct" y="-0.25" text="graph.values.x:db:f" text:value="20 * lg :ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="1" valign="1"/>
-						</graph>
-
-						<!-- Clipper function graph logarithmic -->
-						<graph width.min="265" height.min="215" expand="true" fill="true" visibility=":clog">
-							<origin hpos="-1" vpos="-1" visible="false"/>
-
-							<!-- Gray grid -->
-							<ui:for id="g" first="-30" last="6" step="12">
-								<marker v="${g} db" color="graph_alt_1"/>
-								<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-							</ui:for>
-
-							<!-- Yellow grid -->
-							<ui:for id="g" first="-24" last="-12" step="12">
-								<marker v="${g} db" color="graph_sec"/>
-								<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-							</ui:for>
-
-							<!-- Axes and boundaries -->
-							<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-							<axis min="-36 db" max="12 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-							<axis min="-36 db" max="12 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-							<!-- 0 dB markers -->
-							<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-							<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-							<!-- Meshes -->
-							<mesh id="cfc" x.index="2" y.index="3" width="3" color=":ce ? 'graph_mesh': 'graph_prim'" smooth="true"/>
-							<dot x.id="cfx" y.id="cfy" color="dot" bcolor="dot" visibility=":ce"/>
-
-							<!-- Markers -->
-							<marker
-								id="ct"
-								width="2"
-								editable="true"
-								pointer="hsize"
-								visibility=":ce and :cf ine 0"
-								fill="0.5"
-								color.a="0.2"
-								hcolor.a="0.1"
-								lcolor.a="0.8"
-								hlcolor.a="0.6"
-								rcolor.a="0.8"
-								hrcolor.a="0.6"
-								color="threshold"
-								hcolor="threshold"
-								lcolor="threshold"
-								hlcolor="threshold"
-								rcolor="threshold"
-								hrcolor="threshold"/>
-							<marker
-								id="ct"
-								width="2"
-								editable="true"
-								pointer="hsize"
-								visibility="!:ce or :cf ieq 0"
-								fill="0.5"
-								color.a="0.2"
-								hcolor.a="0.1"
-								lcolor.a="0.8"
-								hlcolor.a="0.6"
-								rcolor.a="0.8"
-								hrcolor.a="0.6"
-								color="graph_prim"
-								hcolor="graph_prim"
-								lcolor="graph_prim"
-								hlcolor="graph_prim"
-								rcolor="graph_prim"
-								hrcolor="graph_prim"/>
-
-							<!-- Text -->
-							<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-							<ui:with x="0 db" halign="1" valign="-1">
-								<text y="12 db" text="graph.units.db"/>
-								<text y="6 db" text="+6"/>
-								<text y="-6 db" text="-6"/>
-								<text y="-12 db" text="-12"/>
-								<text y="-18 db" text="-18"/>
-								<text y="-24 db" text="-24"/>
-								<text y="-30 db" text="-30"/>
-								<text y="-36 db" text="graph.axis.out" valign="1"/>
-							</ui:with>
-							<ui:with y="0 db" halign="-1" valign="1">
-								<text x="12 db" text="graph.units.db"/>
-								<text x="6 db" text="+6"/>
-								<text x="-6 db" text="-6"/>
-								<text x="-12 db" text="-12"/>
-								<text x="-18 db" text="-18"/>
-								<text x="-24 db" text="-24"/>
-								<text x="-30 db" text="-30"/>
-								<text x="-36 db" text="graph.axis.in" halign="1"/>
-							</ui:with>
-
-							<text x=":ct" y="12 db" text="graph.values.x::f" text:value=":ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="(:ct lt -12 db) ? 1 : -1" valign="-1"/>
-							<text x=":ct" y="-36 db" text="graph.values.x:db:f" text:value="20 * lg :ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="(:ct lt -12 db) ? 1 : -1" valign="1"/>
-						</graph>
-					</vbox>
-				</group>
-			</ui:with>
+					<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.clipping">
+						<vbox>
+							<!-- Clipper function graph linear -->
+							<graph width.min="265" height.min="215" expand="true" fill="true" visibility="!:clog">
+								<origin hpos="-1" vpos="-1" visible="false"/>
+								<origin hpos="-1" vpos="0" visible="false"/>
+
+								<ui:with ox="0" oy="1">
+									<marker v="0.25" color="graph_alt_1"/>
+									<marker v="0.75" color="graph_alt_1"/>
+									<marker v="1.25" color="graph_alt_1"/>
+									<marker v="1.75" color="graph_alt_1"/>
+								</ui:with>
+								<ui:with ox="1" oy="0">
+									<marker v="0.25" color="graph_alt_1"/>
+									<marker v="0.75" color="graph_alt_1"/>
+								</ui:with>
+
+								<ui:with ox="0" oy="1">
+									<marker v="0.5" color="graph_sec"/>
+									<marker v="1" color="graph_sec"/>
+									<marker v="1.5" color="graph_sec"/>
+									<marker v="2" color="graph_sec"/>
+								</ui:with>
+								<ui:with ox="1" oy="0">
+									<marker v="0.5" color="graph_sec"/>
+									<marker v="1" color="graph_sec"/>
+								</ui:with>
+
+								<!-- Axes and boundaries -->
+								<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width / 2.25" dy=":_a_height / 1.25" color="graph_alt_1" width="2" smooth="true"/>
+								<axis min="0" max="2.25" color="graph_prim" angle="0.0" width="2"/>
+								<axis min="0" max="1.25" color="graph_prim" angle="0.5" width="2"/>
+								<axis o="1" min="0" max="2.25" color="graph_prim" angle="0.0" zero="0" visibility="false"/>
+
+								<!-- Meshes -->
+								<mesh id="cfc" x.index="0" y.index="1" width="3" color=":ce ? 'graph_mesh': 'graph_prim'" smooth="true"/>
+								<dot x.id="cfx1" y.id="cfy1" color="dot" bcolor="dot" visibility=":ce"/>
+								<dot x.id="cfx2" y.id="cfy2" color="dot" bcolor="dot" visibility=":ce"/>
+
+								<!-- Markers -->
+								<marker
+									id="ct"
+									o="1"
+									ox="2"
+									width="2"
+									editable="true"
+									pointer="hsize"
+									visibility=":ce and :cf ine 0"
+									fill="0.5"
+									color.a="0.2"
+									hcolor.a="0.1"
+									lcolor.a="0.8"
+									hlcolor.a="0.6"
+									rcolor.a="0.8"
+									hrcolor.a="0.6"
+									color="threshold"
+									hcolor="threshold"
+									lcolor="threshold"
+									hlcolor="threshold"
+									rcolor="threshold"
+									hrcolor="threshold"/>
+								<marker
+									id="ct"
+									o="1"
+									ox="2"
+									width="2"
+									editable="true"
+									pointer="hsize"
+									visibility="!:ce or :cf ieq 0"
+									fill="0.5"
+									color.a="0.2"
+									hcolor.a="0.1"
+									lcolor.a="0.8"
+									hlcolor.a="0.6"
+									rcolor.a="0.8"
+									hrcolor.a="0.6"
+									color="graph_prim"
+									hcolor="graph_prim"
+									lcolor="graph_prim"
+									hlcolor="graph_prim"
+									rcolor="graph_prim"
+									hrcolor="graph_prim"/>
+
+								<!-- Text -->
+								<ui:with x="0" halign="1" valign="-1">
+									<text y="0.5" text="0.5"/>
+									<text y="1" text="1"/>
+									<text y="1.25" text="graph.axis.out" valign="-1"/>
+								</ui:with>
+								<ui:with y="0" halign="1" valign="1">
+									<text x="0" text="0"/>
+									<text x="0.5" text="0.5"/>
+									<text x="1.0" text="1"/>
+									<text x="1.5" text="1.5"/>
+									<text x="2.0" text="2"/>
+									<text x="2.25" text="graph.axis.in" halign="-1"/>
+								</ui:with>
+								<text x=":ct" y="1.25" text="graph.values.x:db:f;x::f" text:value=":ct" text:db="20 * lg :ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="1" valign="-1" text.halign="-1"/>
+							</graph>
+
+							<!-- Clipper function graph logarithmic -->
+							<graph width.min="265" height.min="215" expand="true" fill="true" visibility=":clog">
+								<origin hpos="-1" vpos="-1" visible="false"/>
+
+								<!-- Gray grid -->
+								<ui:for id="g" first="-30" last="6" step="12">
+									<marker v="${g} db" color="graph_alt_1"/>
+									<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
+								</ui:for>
+
+								<!-- Yellow grid -->
+								<ui:for id="g" first="-24" last="-12" step="12">
+									<marker v="${g} db" color="graph_sec"/>
+									<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
+								</ui:for>
+
+								<!-- Axes and boundaries -->
+								<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
+								<axis min="-36 db" max="12 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
+								<axis min="-36 db" max="12 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
+
+								<!-- 0 dB markers -->
+								<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
+								<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
+
+								<!-- Meshes -->
+								<mesh id="cfc" x.index="2" y.index="3" width="3" color=":ce ? 'graph_mesh': 'graph_prim'" smooth="true"/>
+								<dot x.id="cfx1" y.id="cfy1" color="dot" bcolor="dot" visibility=":ce"/>
+								<dot x.id="cfx2" y.id="cfy2" color="dot" bcolor="dot" visibility=":ce"/>
+
+								<!-- Markers -->
+								<marker
+									id="ct"
+									width="2"
+									editable="true"
+									pointer="hsize"
+									visibility=":ce and :cf ine 0"
+									fill="0.5"
+									color.a="0.2"
+									hcolor.a="0.1"
+									lcolor.a="0.8"
+									hlcolor.a="0.6"
+									rcolor.a="0.8"
+									hrcolor.a="0.6"
+									color="threshold"
+									hcolor="threshold"
+									lcolor="threshold"
+									hlcolor="threshold"
+									rcolor="threshold"
+									hrcolor="threshold"/>
+								<marker
+									id="ct"
+									width="2"
+									editable="true"
+									pointer="hsize"
+									visibility="!:ce or :cf ieq 0"
+									fill="0.5"
+									color.a="0.2"
+									hcolor.a="0.1"
+									lcolor.a="0.8"
+									hlcolor.a="0.6"
+									rcolor.a="0.8"
+									hrcolor.a="0.6"
+									color="graph_prim"
+									hcolor="graph_prim"
+									lcolor="graph_prim"
+									hlcolor="graph_prim"
+									rcolor="graph_prim"
+									hrcolor="graph_prim"/>
+
+								<!-- Text -->
+								<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
+								<ui:with x="0 db" halign="1" valign="-1">
+									<text y="12 db" text="graph.units.db"/>
+									<text y="6 db" text="+6"/>
+									<text y="-6 db" text="-6"/>
+									<text y="-12 db" text="-12"/>
+									<text y="-18 db" text="-18"/>
+									<text y="-24 db" text="-24"/>
+									<text y="-30 db" text="-30"/>
+									<text y="-36 db" text="graph.axis.out" valign="1"/>
+								</ui:with>
+								<ui:with y="0 db" halign="-1" valign="1">
+									<text x="12 db" text="graph.units.db"/>
+									<text x="6 db" text="+6"/>
+									<text x="-6 db" text="-6"/>
+									<text x="-12 db" text="-12"/>
+									<text x="-18 db" text="-18"/>
+									<text x="-24 db" text="-24"/>
+									<text x="-30 db" text="-30"/>
+									<text x="-36 db" text="graph.axis.in" halign="1"/>
+								</ui:with>
+
+								<text
+									x=":ct"
+									y="12 db"
+									text="graph.values.x:db:f;x::f"
+									text:value=":ct"
+									text:db="20 * lg :ct"
+									text.eval="true"
+									color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'"
+									halign="(:ct lt -12 db) ? 1 : -1"
+									valign="-1"
+									text.halign="(:ct lt -12 db) ? -1 : 1"/>
+							</graph>
+						</vbox>
+					</group>
+				</ui:with>
 				<void pad.h="2" bg.color="bg" hreduce="true"/>
 				<!-- Clipper gain reduction meter -->
 				<ui:with bg.bright="!:ce ? :const_bg_darken : 1.0" bright="!:ce ? 0.75 : 1.0">
-				<vbox vexpand="true">
-					<label text="labels.clp" padding="4"/>
-					<ledmeter vexpand="true" angle="1">
-						<ledchannel
-							id="cfr"
-							min="-12 db"
-							max="12 db"
-							log="true"
-							balance="0 db"
-							balance.visibility="true"
-							type="peak"
-							value.color=":ce ? 'blue' : 'cycle_inactive'"
-							yellow.color=":ce ? 'meter_yellow' : 'cycle_inactive'"
-							balance.color=":ce ? 'balance' : 'cycle_inactive'"/>
-					</ledmeter>
-				</vbox>
-			</ui:with>
+					<vbox vexpand="true">
+						<label text="labels.clp" padding="4"/>
+						<ledmeter vexpand="true" angle="1">
+							<ledchannel
+								id="cfr"
+								min="-12 db"
+								max="12 db"
+								log="true"
+								balance="0 db"
+								balance.visibility="true"
+								type="peak"
+								value.color=":ce ? 'blue' : 'cycle_inactive'"
+								yellow.color=":ce ? 'meter_yellow' : 'cycle_inactive'"
+								balance.color=":ce ? 'balance' : 'cycle_inactive'"/>
+						</ledmeter>
+					</vbox>
+				</ui:with>
 			</hbox>
 
 			<void pad.v="2" bg.color="bg" vreduce="true"/>
 
 			<!-- controls -->
 			<ui:with bg.bright="!:ce ? :const_bg_darken : 1.0" bright="!:ce ? 0.75 : 1.0">
-			<hbox pad.v="4">
-				<void hexpand="true" hfill="true"/>
-				<!-- thres -->
-				<hbox fill="false" pad.l="6" pad.r="10">
-					<knob id="ct" scolor=":ce and :cf ine 0 ? 'threshold' : 'cycle_inactive'"/>
-					<vbox vfill="false" width="50" pad.l="4">
-						<label text="labels.thresh_old" halign="0"/>
-						<value id="ct" sline="true" halign="0"/>
-					</vbox>
-				</hbox>
+				<hbox pad.v="4">
+					<void hexpand="true" hfill="true"/>
+					<!-- thresh -->
+					<hbox fill="false" pad.l="6" pad.r="10">
+						<knob id="ct" scolor=":ce and :cf ine 0 ? 'threshold' : 'cycle_inactive'"/>
+						<vbox vfill="false" width="50" pad.l="4">
+							<label text="labels.thresh_old" halign="0"/>
+							<value id="ct" sline="true" halign="0"/>
+						</vbox>
+					</hbox>
 
-				<!-- pumping -->
-				<hbox fill="false" pad.r="6">
-					<knob id="cp" scolor=":ce ? 'kscale' : 'cycle_inactive'"/>
-					<vbox vfill="false" width="50" pad.l="4">
-						<label text="labels.pumping" halign="-1"/>
-						<value id="cp" sline="true" halign="0"/>
-					</vbox>
+					<!-- DC offset -->
+					<hbox fill="false" pad.r="6">
+						<knob id="dcoff" scolor=":ce ? 'kscale' : 'cycle_inactive'"/>
+						<vbox vfill="false" width="50" pad.l="4">
+							<label text="labels.signal.dc_offset" halign="-1"/>
+							<value id="dcoff" sline="true" halign="0"/>
+						</vbox>
+					</hbox>
+
+					<!-- pumping -->
+					<hbox fill="false" pad.r="6">
+						<knob id="cp" scolor=":ce ? 'kscale' : 'cycle_inactive'"/>
+						<vbox vfill="false" width="50" pad.l="4">
+							<label text="labels.pumping" halign="-1"/>
+							<value id="cp" sline="true" halign="0"/>
+						</vbox>
+					</hbox>
 				</hbox>
-			</hbox>
-		</ui:with>
+			</ui:with>
 		</vbox>
 
 		<cell rows="3">
@@ -502,7 +522,120 @@
 				<hsep pad.v="2" bg.color="bg" vreduce="true"/>
 
 				<!-- row 5 -->
-				<group ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+				<cgroup id="gview" ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+					<vbox spacing="2" bg.color="bg_schema_name">
+						<!-- Ocillogram graph combined-->
+						<graph width.min="312" height.min="95" hexpand="true" hfill="true">
+							<origin hpos="1" vpos="-1" visible="false"/>
+
+							<!-- Gray grid -->
+							<ui:with ox="0" oy="1">
+								<marker v="0.5" color="graph_alt_1"/>
+								<marker v="1.5" color="graph_alt_1"/>
+								<marker v="2.5" color="graph_alt_1"/>
+								<marker v="3.5" color="graph_alt_1"/>
+								<marker v="4.5" color="graph_alt_1"/>
+							</ui:with>
+
+							<!-- Yellow grid -->
+							<ui:with ox="0" oy="1">
+								<marker v="1" color="graph_sec"/>
+								<marker v="2" color="graph_sec"/>
+								<marker v="3" color="graph_sec"/>
+								<marker v="4" color="graph_sec"/>
+							</ui:with>
+							<ui:with ox="1" oy="0" color="graph_sec">
+								<ui:for id="v" first="-18" last="6" step="6">
+									<marker v="${v} db"/>
+								</ui:for>
+							</ui:with>
+
+							<!-- Meshes -->
+							<mesh id="ctg" width="0" x.index="0" y.index="1" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilg"/>
+							<mesh id="ctg" width="2" x.index="0" y.index="2" color="mono" visibility=":olg"/>
+							<mesh id="ctg" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg"/>
+
+							<!-- Axis -->
+							<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+							<axis min="-24 db" max="12 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+
+							<!-- Text -->
+							<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+							<ui:with y="-24 db" halign="1" valign="1" color="graph_prim">
+								<text x="0" text="0" halign="-1"/>
+								<text x="1" text="1"/>
+								<text x="2" text="2"/>
+								<text x="3" text="3"/>
+								<text x="4" text="4"/>
+								<text x="5" text="graph.units.s"/>
+							</ui:with>
+							<ui:with x="5" halign="1" valign="1" color="graph_prim">
+								<text y="12 db" text="graph.units.db" text:value="0" valign="-1"/>
+								<ui:for id="v" first="-18" last="0" step="6">
+									<text y="${v} db" text="${v}"/>
+								</ui:for>
+							</ui:with>
+						</graph>
+
+						<!-- Waveform graph combined-->
+						<graph width.min="312" height.min="95" hexpand="true" hfill="true">
+							<origin hpos="1" vpos="0" visible="false"/>
+
+							<!-- Gray grid -->
+							<ui:with ox="0" oy="1">
+								<marker v="0.1" color="graph_alt_1"/>
+								<marker v="0.3" color="graph_alt_1"/>
+								<marker v="0.5" color="graph_alt_1"/>
+								<marker v="0.7" color="graph_alt_1"/>
+								<marker v="0.9" color="graph_alt_1"/>
+							</ui:with>
+
+							<!-- Yellow grid -->
+							<ui:with ox="0" oy="1">
+								<marker v="0.2" color="graph_sec"/>
+								<marker v="0.4" color="graph_sec"/>
+								<marker v="0.6" color="graph_sec"/>
+								<marker v="0.8" color="graph_sec"/>
+							</ui:with>
+
+							<ui:with ox="1" oy="0" color="graph_sec">
+								<marker v="-0.5"/>
+								<marker v="0.5"/>
+							</ui:with>
+
+							<!-- Meshes -->
+							<mesh id="wfg" width="2" x.index="0" y.index="1" color="mono" fcolor="mono" fcolor.a="0.8" fill="true" visibility=":olg"/>
+
+							<ui:with ox="1" oy="0" width="2" color="graph_prim">
+								<marker v="1"/>
+								<marker v="0"/>
+								<marker v="-1"/>
+							</ui:with>
+
+							<!-- Axis -->
+							<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+							<axis min="-1.5" max="1.5" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+
+							<!-- Text -->
+							<ui:with y="-1.5" halign="1" valign="1" color="graph_prim">
+								<text x="0" text="0" halign="-1"/>
+								<text x="0.2" text="0.2"/>
+								<text x="0.4" text="0.4"/>
+								<text x="0.6" text="0.6"/>
+								<text x="0.8" text="0.8"/>
+								<text x="1" text="graph.units.s"/>
+							</ui:with>
+							<ui:with x="1" halign="1" valign="1" color="graph_prim">
+								<text y="-1" text="-1"/>
+								<text y="-0.5" text="-0.5"/>
+								<text y="0" text="0"/>
+								<text y="0.5" text="0.5"/>
+								<text y="1" text="1"/>
+								<text y="1.5" text="labels.amplitude" valign="-1" x="0" halign="-1"/>
+							</ui:with>
+						</graph>
+					</vbox>
+
 					<!-- Ocillogram graph -->
 					<graph width.min="312" height.min="192" hexpand="true" hfill="true">
 						<origin hpos="1" vpos="-1" visible="false"/>
@@ -534,10 +667,6 @@
 						<mesh id="ctg" width="2" x.index="0" y.index="2" color="mono" visibility=":olg"/>
 						<mesh id="ctg" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg"/>
 
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
 						<!-- Axis -->
 						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
 						<axis min="-24 db" max="12 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
@@ -559,7 +688,70 @@
 							</ui:for>
 						</ui:with>
 					</graph>
-				</group>
+
+					<!-- Waveform graph -->
+					<graph width.min="312" height.min="192" hexpand="true" hfill="true">
+						<origin hpos="1" vpos="0" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:with ox="0" oy="1">
+							<marker v="0.1" color="graph_alt_1"/>
+							<marker v="0.3" color="graph_alt_1"/>
+							<marker v="0.5" color="graph_alt_1"/>
+							<marker v="0.7" color="graph_alt_1"/>
+							<marker v="0.9" color="graph_alt_1"/>
+						</ui:with>
+
+						<!-- Yellow grid -->
+						<ui:with ox="0" oy="1">
+							<marker v="0.2" color="graph_sec"/>
+							<marker v="0.4" color="graph_sec"/>
+							<marker v="0.6" color="graph_sec"/>
+							<marker v="0.8" color="graph_sec"/>
+						</ui:with>
+						<ui:with ox="1" oy="0" color="graph_sec">
+							<marker v="-0.25"/>
+							<marker v="-0.5"/>
+							<marker v="-0.75"/>
+							<marker v="0.25"/>
+							<marker v="0.5"/>
+							<marker v="0.75"/>
+						</ui:with>
+
+						<!-- Meshes -->
+						<mesh id="wfg" width="2" x.index="0" y.index="1" color="mono" fcolor="mono" fcolor.a="0.8" fill="true" visibility=":olg"/>
+
+						<ui:with ox="1" oy="0" width="2" color="graph_prim">
+							<marker v="1"/>
+							<marker v="0"/>
+							<marker v="-1"/>
+						</ui:with>
+						<!-- Axis -->
+						<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+						<axis min="-1.25" max="1.25" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+
+						<!-- Text -->
+						<ui:with y="-1.25" halign="1" valign="1" color="graph_prim">
+							<text x="0" text="0" halign="-1"/>
+							<text x="0.2" text="0.2"/>
+							<text x="0.4" text="0.4"/>
+							<text x="0.6" text="0.6"/>
+							<text x="0.8" text="0.8"/>
+							<text x="1" text="graph.units.s"/>
+						</ui:with>
+						<ui:with x="1" halign="1" valign="1" color="graph_prim">
+							<text y="-1" text="-1"/>
+							<text y="-0.75" text="-0.75"/>
+							<text y="-0.5" text="-0.5"/>
+							<text y="-0.25" text="-0.25"/>
+							<text y="0" text="0"/>
+							<text y="0.25" text="0.25"/>
+							<text y="0.5" text="0.5"/>
+							<text y="0.75" text="0.75"/>
+							<text y="1.25" text="labels.amplitude" valign="-1"/>
+						</ui:with>
+					</graph>
+				</cgroup>
 
 				<ui:with bg.color="bg_schema">
 
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/res/main/ui/dynamics/clipper/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/ui/dynamics/clipper/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-clipper/res/main/ui/dynamics/clipper/stereo.xml	2025-03-01 12:43:00.324627186 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/res/main/ui/dynamics/clipper/stereo.xml	2025-08-26 18:15:46.689974525 +0000
@@ -10,6 +10,7 @@
 					<void hexpand="true"/>
 					<button id="op" ui:inject="Button_green" text="labels.odp"/>
 					<button id="ce" text="labels.signal.clipping" pad.l="8"/>
+					<button id="dcomp" text="labels.signal.dc_compensate" ui:inject="Button_cyan"/>
 					<button id="clog" text="labels.log_scale" ui:inject="Button_yellow"/>
 
 					<label text="labels.function" pad.l="8"/>
@@ -121,7 +122,7 @@
 								<text x="-15 db" text="-15"/>
 								<text x="-18 db" text="graph.axis.in" halign="1"/>
 							</ui:with>
-							<text x=":th" y="-18 db" ox="2" text="graph.values.x:db:f" text:value=":th" text.eval="true" color=":op ? 'threshold' : 'graph_prim'" halign="(:th lt -6) ? 1 : -1" valign="1"/>
+							<text x=":th" y="6 db" ox="2" text="graph.values.x:db:f" text:value=":th" text.eval="true" color=":op ? 'threshold' : 'graph_prim'" halign="(:th lt -6) ? 1 : -1" valign="-1"/>
 						</graph>
 					</group>
 				</ui:with>
@@ -195,7 +196,7 @@
 						<vbox>
 							<!-- Clipper function graph linear -->
 							<graph width.min="265" height.min="215" expand="true" fill="true" visibility="!:clog">
-								<origin hpos="-0.8" vpos="-2.0/3.0" visible="false"/>
+								<origin hpos="-1" vpos="-1" visible="false"/>
 								<origin hpos="-1" vpos="0" visible="false"/>
 
 								<ui:with ox="0" oy="1">
@@ -221,15 +222,17 @@
 								</ui:with>
 
 								<!-- Axes and boundaries -->
-								<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width * 0.6" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-								<axis min="-0.25" max="2.25" color="graph_prim" angle="0.0" width="2"/>
-								<axis min="-0.25" max="1.25" color="graph_prim" angle="0.5" width="2"/>
-								<axis o="1" min="-0.25" max="2.25" color="graph_prim" angle="0.0" zero="-0.25" visibility="false"/>
+								<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width / 2.25" dy=":_a_height / 1.25" color="graph_alt_1" width="2" smooth="true"/>
+								<axis min="0" max="2.25" color="graph_prim" angle="0.0" width="2"/>
+								<axis min="0" max="1.25" color="graph_prim" angle="0.5" width="2"/>
+								<axis o="1" min="0" max="2.25" color="graph_prim" angle="0.0" zero="0" visibility="false"/>
 
 								<!-- Meshes -->
 								<mesh id="cfc" x.index="0" y.index="1" width="3" color=":ce ? 'graph_mesh': 'graph_prim'" smooth="true"/>
-								<dot x.id="cfx_l" y.id="cfy_l" color="left" bcolor="left" visibility=":ce"/>
-								<dot x.id="cfx_r" y.id="cfy_r" color="right" bcolor="right" visibility=":ce"/>
+								<dot x.id="cfx1_l" y.id="cfy1_l" color="left" bcolor="left" visibility=":ce"/>
+								<dot x.id="cfx2_l" y.id="cfy2_l" color="left" bcolor="left" visibility=":ce"/>
+								<dot x.id="cfx1_r" y.id="cfy1_r" color="right" bcolor="right" visibility=":ce"/>
+								<dot x.id="cfx2_r" y.id="cfy2_r" color="right" bcolor="right" visibility=":ce"/>
 
 								<!-- Markers -->
 								<marker
@@ -276,12 +279,12 @@
 									hrcolor="graph_prim"/>
 
 								<!-- Text -->
-								<ui:with x="0" halign="-1" valign="-1">
+								<ui:with x="0" halign="1" valign="-1">
 									<text y="0.5" text="0.5"/>
 									<text y="1" text="1"/>
 									<text y="1.25" text="graph.axis.out" valign="-1"/>
 								</ui:with>
-								<ui:with y="0" halign="1" valign="-1">
+								<ui:with y="0" halign="1" valign="1">
 									<text x="0" text="0"/>
 									<text x="0.5" text="0.5"/>
 									<text x="1.0" text="1"/>
@@ -289,8 +292,7 @@
 									<text x="2.0" text="2"/>
 									<text x="2.25" text="graph.axis.in" halign="-1"/>
 								</ui:with>
-								<text x=":ct" y="1.25" text="graph.values.x::f" text:value=":ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="1" valign="-1"/>
-								<text x=":ct" y="-0.25" text="graph.values.x:db:f" text:value="20 * lg :ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="1" valign="1"/>
+								<text x=":ct" y="1.25" text="graph.values.x:db:f;x::f" text:value=":ct" text:db="20 * lg :ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="1" valign="-1" text.halign="-1"/>
 							</graph>
 
 							<!-- Clipper function graph logarithmic -->
@@ -320,8 +322,10 @@
 
 								<!-- Meshes -->
 								<mesh id="cfc" x.index="2" y.index="3" width="3" color=":ce ? 'graph_mesh': 'graph_prim'" smooth="true"/>
-								<dot x.id="cfx_l" y.id="cfy_l" color="left" bcolor="left" visibility=":ce"/>
-								<dot x.id="cfx_r" y.id="cfy_r" color="right" bcolor="right" visibility=":ce"/>
+								<dot x.id="cfx1_l" y.id="cfy1_l" color="left" bcolor="left" visibility=":ce"/>
+								<dot x.id="cfx2_l" y.id="cfy2_l" color="left" bcolor="left" visibility=":ce"/>
+								<dot x.id="cfx1_r" y.id="cfy1_r" color="right" bcolor="right" visibility=":ce"/>
+								<dot x.id="cfx2_r" y.id="cfy2_r" color="right" bcolor="right" visibility=":ce"/>
 
 								<!-- Markers -->
 								<marker
@@ -386,8 +390,17 @@
 									<text x="-36 db" text="graph.axis.in" halign="1"/>
 								</ui:with>
 
-								<text x=":ct" y="12 db" text="graph.values.x::f" text:value=":ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="(:ct lt -12 db) ? 1 : -1" valign="-1"/>
-								<text x=":ct" y="-36 db" text="graph.values.x:db:f" text:value="20 * lg :ct" text.eval="true" color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="(:ct lt -12 db) ? 1 : -1" valign="1"/>
+								<text
+									x=":ct"
+									y="12 db"
+									text="graph.values.x:db:f;x::f"
+									text:value=":ct"
+									text:db="20 * lg :ct"
+									text.eval="true"
+									color=":ce and :cf ine 0 ? 'threshold' : 'graph_prim'"
+									halign="(:ct lt -12 db) ? 1 : -1"
+									valign="-1"
+									text.halign="(:ct lt -12 db) ? -1 : 1"/>
 							</graph>
 						</vbox>
 					</group>
@@ -431,7 +444,7 @@
 			<ui:with bg.bright="!:ce ? :const_bg_darken : 1.0" bright="!:ce ? 0.75 : 1.0">
 				<hbox pad.v="4">
 					<void hexpand="true" hfill="true"/>
-					<!-- thres -->
+					<!-- thresh -->
 					<hbox fill="false" pad.l="6" pad.r="10">
 						<knob id="ct" scolor=":ce and :cf ine 0 ? 'threshold' : 'cycle_inactive'"/>
 						<vbox vfill="false" width="50" pad.l="4">
@@ -440,6 +453,15 @@
 						</vbox>
 					</hbox>
 
+					<!-- DC offset -->
+					<hbox fill="false" pad.r="6">
+						<knob id="dcoff" scolor=":ce ? 'kscale' : 'cycle_inactive'"/>
+						<vbox vfill="false" width="50" pad.l="4">
+							<label text="labels.signal.dc_offset" halign="-1"/>
+							<value id="dcoff" sline="true" halign="0"/>
+						</vbox>
+					</hbox>
+
 					<!-- pumping -->
 					<hbox fill="false" pad.r="6">
 						<knob id="cp" scolor=":ce ? 'kscale' : 'cycle_inactive'"/>
@@ -542,7 +564,124 @@
 				<hsep pad.v="2" bg.color="bg" vreduce="true"/>
 
 				<!-- row 5 -->
-				<group ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+				<cgroup id="gview" ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+					<vbox spacing="2" bg.color="bg_schema_name">
+						<!-- Ocillogram graph combined-->
+						<graph width.min="312" height.min="95" hexpand="true" hfill="true" >
+							<origin hpos="1" vpos="-1" visible="false"/>
+
+							<!-- Gray grid -->
+							<ui:with ox="0" oy="1">
+								<marker v="0.5" color="graph_alt_1"/>
+								<marker v="1.5" color="graph_alt_1"/>
+								<marker v="2.5" color="graph_alt_1"/>
+								<marker v="3.5" color="graph_alt_1"/>
+								<marker v="4.5" color="graph_alt_1"/>
+							</ui:with>
+
+							<!-- Yellow grid -->
+							<ui:with ox="0" oy="1">
+								<marker v="1" color="graph_sec"/>
+								<marker v="2" color="graph_sec"/>
+								<marker v="3" color="graph_sec"/>
+								<marker v="4" color="graph_sec"/>
+							</ui:with>
+							<ui:with ox="1" oy="0" color="graph_sec">
+								<ui:for id="v" first="-18" last="6" step="6">
+									<marker v="${v} db"/>
+								</ui:for>
+							</ui:with>
+
+							<!-- Meshes -->
+							<mesh id="ctg" width="0" x.index="0" y.index="1" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
+							<mesh id="ctg" width="0" x.index="0" y.index="4" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilg_r"/>
+							<mesh id="ctg" width="2" x.index="0" y.index="2" color="left" visibility=":olg_l"/>
+							<mesh id="ctg" width="2" x.index="0" y.index="5" color="right" visibility=":olg_r"/>
+							<mesh id="ctg" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_l"/>
+							<mesh id="ctg" width="2" x.index="0" y.index="6" color="bright_blue" visibility=":grg_r"/>
+
+							<!-- Axis -->
+							<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+							<axis min="-24 db" max="12 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+
+							<!-- Text -->
+							<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+							<ui:with y="-24 db" halign="1" valign="1" color="graph_prim">
+								<text x="0" text="0" halign="-1"/>
+								<text x="1" text="1"/>
+								<text x="2" text="2"/>
+								<text x="3" text="3"/>
+								<text x="4" text="4"/>
+								<text x="5" text="graph.units.s"/>
+							</ui:with>
+							<ui:with x="5" halign="1" valign="1" color="graph_prim">
+								<text y="12 db" text="graph.units.db" text:value="0" valign="-1"/>
+								<ui:for id="v" first="-18" last="0" step="6">
+									<text y="${v} db" text="${v}"/>
+								</ui:for>
+							</ui:with>
+						</graph>
+
+						<!-- Waveform graph combined-->
+						<graph width.min="312" height.min="95" hexpand="true" hfill="true">
+							<origin hpos="1" vpos="0" visible="false"/>
+
+							<!-- Gray grid -->
+							<ui:with ox="0" oy="1">
+								<marker v="0.1" color="graph_alt_1"/>
+								<marker v="0.3" color="graph_alt_1"/>
+								<marker v="0.5" color="graph_alt_1"/>
+								<marker v="0.7" color="graph_alt_1"/>
+								<marker v="0.9" color="graph_alt_1"/>
+							</ui:with>
+
+							<!-- Yellow grid -->
+							<ui:with ox="0" oy="1">
+								<marker v="0.2" color="graph_sec"/>
+								<marker v="0.4" color="graph_sec"/>
+								<marker v="0.6" color="graph_sec"/>
+								<marker v="0.8" color="graph_sec"/>
+							</ui:with>
+
+							<ui:with ox="1" oy="0" color="graph_sec">
+								<marker v="-0.5" />
+								<marker v="0.5" />
+							</ui:with>
+
+							<!-- Meshes -->
+							<mesh id="wfg" width="2" x.index="0" y.index="1" color="left" fcolor="left" fcolor.a="0.8" fill="true" visibility=":olg_l"/>
+							<mesh id="wfg" width="2" x.index="0" y.index="2" color="right" fcolor="right" fcolor.a="0.8" fill="true" visibility=":olg_r"/>
+
+							<ui:with ox="1" oy="0" width="2" color="graph_prim">
+								<marker v="1" />
+								<marker v="0" />
+								<marker v="-1" />
+							</ui:with>
+
+							<!-- Axis -->
+							<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+							<axis min="-1.5" max="1.5" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+
+							<!-- Text -->
+							<ui:with y="-1.5" halign="1" valign="1" color="graph_prim">
+								<text x="0" text="0" halign="-1"/>
+								<text x="0.2" text="0.2"/>
+								<text x="0.4" text="0.4"/>
+								<text x="0.6" text="0.6"/>
+								<text x="0.8" text="0.8"/>
+								<text x="1" text="graph.units.s"/>
+							</ui:with>
+							<ui:with x="1" halign="1" valign="1" color="graph_prim">
+								<text y="-1" text="-1"/>
+								<text y="-0.5" text="-0.5"/>
+								<text y="0" text="0"/>
+								<text y="0.5" text="0.5"/>
+								<text y="1" text="1"/>
+								<text y="1.5" text="labels.amplitude" valign="-1" x="0" halign="-1"/>
+							</ui:with>
+						</graph>
+					</vbox>
+
 					<!-- Ocillogram graph -->
 					<graph width.min="312" height.min="192" hexpand="true" hfill="true">
 						<origin hpos="1" vpos="-1" visible="false"/>
@@ -570,16 +709,12 @@
 						</ui:with>
 
 						<!-- Meshes -->
-						<mesh id="ctg_l" width="0" x.index="0" y.index="1" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
-						<mesh id="ctg_r" width="0" x.index="0" y.index="1" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilg_r"/>
-						<mesh id="ctg_l" width="2" x.index="0" y.index="2" color="left" visibility=":olg_l"/>
-						<mesh id="ctg_r" width="2" x.index="0" y.index="2" color="right" visibility=":olg_r"/>
-						<mesh id="ctg_l" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_l"/>
-						<mesh id="ctg_r" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_r"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
+						<mesh id="ctg" width="0" x.index="0" y.index="1" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
+						<mesh id="ctg" width="0" x.index="0" y.index="4" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilg_r"/>
+						<mesh id="ctg" width="2" x.index="0" y.index="2" color="left" visibility=":olg_l"/>
+						<mesh id="ctg" width="2" x.index="0" y.index="5" color="right" visibility=":olg_r"/>
+						<mesh id="ctg" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_l"/>
+						<mesh id="ctg" width="2" x.index="0" y.index="6" color="bright_blue" visibility=":grg_r"/>
 
 						<!-- Axis -->
 						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
@@ -602,7 +737,71 @@
 							</ui:for>
 						</ui:with>
 					</graph>
-				</group>
+
+					<!-- Waveform graph -->
+					<graph width.min="312" height.min="192" hexpand="true" hfill="true">
+						<origin hpos="1" vpos="0" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:with ox="0" oy="1">
+							<marker v="0.1" color="graph_alt_1"/>
+							<marker v="0.3" color="graph_alt_1"/>
+							<marker v="0.5" color="graph_alt_1"/>
+							<marker v="0.7" color="graph_alt_1"/>
+							<marker v="0.9" color="graph_alt_1"/>
+						</ui:with>
+
+						<!-- Yellow grid -->
+						<ui:with ox="0" oy="1">
+							<marker v="0.2" color="graph_sec"/>
+							<marker v="0.4" color="graph_sec"/>
+							<marker v="0.6" color="graph_sec"/>
+							<marker v="0.8" color="graph_sec"/>
+						</ui:with>
+						<ui:with ox="1" oy="0" color="graph_sec">
+							<marker v="-0.25" />
+							<marker v="-0.5" />
+							<marker v="-0.75" />
+							<marker v="0.25" />
+							<marker v="0.5" />
+							<marker v="0.75" />
+						</ui:with>
+
+						<!-- Meshes -->
+						<mesh id="wfg" width="2" x.index="0" y.index="1" color="left" fcolor="left" fcolor.a="0.8" fill="true" visibility=":olg_l"/>
+						<mesh id="wfg" width="2" x.index="0" y.index="2" color="right" fcolor="right" fcolor.a="0.8" fill="true" visibility=":olg_r"/>
+
+						<ui:with ox="1" oy="0" width="2" color="graph_prim">
+							<marker v="1" />
+							<marker v="0" />
+							<marker v="-1" />
+						</ui:with>
+						<!-- Axis -->
+						<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+						<axis min="-1.25" max="1.25" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+
+						<!-- Text -->
+						<ui:with y="-1.25" halign="1" valign="1" color="graph_prim">
+							<text x="0" text="0" halign="-1"/>
+							<text x="0.2" text="0.2"/>
+							<text x="0.4" text="0.4"/>
+							<text x="0.6" text="0.6"/>
+							<text x="0.8" text="0.8"/>
+							<text x="1" text="graph.units.s"/>
+						</ui:with>
+						<ui:with x="1" halign="1" valign="1" color="graph_prim">
+							<text y="-1" text="-1"/>
+							<text y="-0.75" text="-0.75"/>
+							<text y="-0.5" text="-0.5"/>
+							<text y="-0.25" text="-0.25"/>
+							<text y="0" text="0"/>
+							<text y="0.25" text="0.25"/>
+							<text y="0.5" text="0.5"/>
+							<text y="0.75" text="0.75"/>
+							<text y="1.25" text="labels.amplitude" valign="-1"/>
+						</ui:with>
+					</graph>
+				</cgroup>
 
 				<ui:with bg.color="bg_schema">
 
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/src/doc/manuals/plugins/clipper.php 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/src/doc/manuals/plugins/clipper.php
--- 1.2.21-5/modules/lsp-plugins-clipper/src/doc/manuals/plugins/clipper.php	2025-03-01 12:43:00.324627186 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/src/doc/manuals/plugins/clipper.php	2025-08-26 18:15:46.689974525 +0000
@@ -12,8 +12,8 @@
 	<b>Loudness limiting</b> option allows to control the input loudness, per-band loudness and input loudness at the
 	output clipper.
 	<b>Overdrive protection</b> allows to add short-time compression to the signal to make clipping effect less noticeable.
-	<b>Multiple sigmoid functions</b> allow to select the best sounding clipping funciton.
-	<b>Input and output loudness measurments</b> allow to control loudness level of the signal in LUFS.
+	<b>Multiple sigmoid functions</b> allow to select the best sounding clipping function.
+	<b>Input and output loudness measurements</b> allow to control loudness level of the signal in LUFS.
 </p>
 
 <p><b>Controls</b>:</p>
@@ -21,13 +21,15 @@
 	<li><b>Dither</b> - allows to enable dithering noise depending on the bitness of the desired output signal.</li>
 	<li><b>ODP</b> - enabled overdrive protection compressor.</li>
 	<li><b>Clipping</b> - enables clipping function applied to the signal.</li>
+	<li><b>DC Compensate</b> - enables compensation of the DC offset applied at the clipping stage.</li>
 	<li><b>Log Scale</b> - switches clipping function graph representation in linear/logarithmic scale.</li>
 	<li><b>Function</b> - clipping function</li>
 	<li><b>ODP Thresh</b> - the threshold of the overdrive protection compressor.</li>
 	<li><b>ODP Knee</b> - the knee of the overdrive protection compressor.</li>
 	<li><b>ODP Meter</b> - the amount of gain reduction applied to the signal while compressing it's peaks.</li>
 	<li><b>Clip Thresh</b> - the threshold of the clipping function. Signals below the threshold have constant amplification.</li>
-	<li><b>Clip Pumping</b> - additional way to pump the loudness of the band by applying exra amplification and keeping peaks not greater than 0 dB.</li>
+	<li><b>Clip DC offset</b> - the additional DC offset applied to the signal before clipping stage.</li>
+	<li><b>Clip Pumping</b> - additional way to pump the loudness of the band by applying extra amplification and keeping peaks not greater than 0 dB.</li>
 	<li><b>Clip Meter</b> - the amount of gain reduction applied at the clipping stage.</li>	
 	<li><b>Reactivity</b> - sets up the reactivity of the ODP compressor.</li>
 	<?php if ($m == 's') { ?>
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/src/main/meta/clipper.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/src/main/meta/clipper.cpp
--- 1.2.21-5/modules/lsp-plugins-clipper/src/main/meta/clipper.cpp	2025-03-01 12:43:00.324627186 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/src/main/meta/clipper.cpp	2025-08-26 18:15:46.689974525 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-clipper
  * Created on: 01 дек 2023 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_CLIPPER_VERSION_MAJOR       1
 #define LSP_PLUGINS_CLIPPER_VERSION_MINOR       0
-#define LSP_PLUGINS_CLIPPER_VERSION_MICRO       8
+#define LSP_PLUGINS_CLIPPER_VERSION_MICRO       10
 
 #define LSP_PLUGINS_CLIPPER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -69,34 +69,50 @@ namespace lsp
             { NULL, NULL }
         };
 
-        #define CLIPPER_COMMON \
+        static port_item_t clipper_views[] =
+        {
+            { "Combined",           "clipper.view.combined"                 },
+            { "Dynamics",           "clipper.view.dynamics"                 },
+            { "Waveform",           "clipper.view.waveform"                 },
+            { NULL, NULL }
+        };
+
+        #define CLIPPER_COMMON(channels) \
             BYPASS, \
             IN_GAIN, \
             OUT_GAIN, \
-            SWITCH("lufs_on", "Enable input LUFS limitation", 1.0f), \
-            CONTROL("lufs_th", "Input LUFS limiter threshold", U_LUFS, clipper::LUFS_THRESH), \
+            SWITCH("lufs_on", "Enable input LUFS limitation", "Limit LUFS", 1.0f), \
+            CONTROL("lufs_th", "Input LUFS limiter threshold", "LUFS thresh", U_LUFS, clipper::LUFS_THRESH), \
             LUFS_METER("lufs_rl", "Reduction LUFS value", 24.0f), \
             METER_OUT_GAIN("lufs_gr", "Input LUFS gain reduction", GAIN_AMP_0_DB), \
             LUFS_METER("lufs_il", "Input LUFS value", 24.0f), \
             LUFS_METER("lufs_ol", "Output LUFS value", 24.0f), \
-            CONTROL("thresh", "Clipping threshold", U_DB, clipper::THRESHOLD), \
-            SWITCH("boost", "Boosting mode", 1.0f), \
-            COMBO("dither", "Dithering mode", 0, clipper_dither_modes), \
-            SWITCH("clog", "Clipper logarithmic display", 1.0f), \
-            SWITCH("op", "Overdrive protection", 1.0f), \
-            CONTROL("th", "Overdrive protection threshold", U_DB, clipper::ODP_THRESHOLD), \
-            CONTROL("kn", "Overdrive protection knee", U_DB, clipper::ODP_KNEE), \
-            LOG_CONTROL("or", "Overdrive protection reactivity", U_MSEC, clipper::ODP_REACT), \
+            CONTROL("thresh", "Clipping threshold", "Clip thresh", U_DB, clipper::THRESHOLD), \
+            SWITCH("boost", "Boosting mode", "Boost", 1.0f), \
+            COMBO("dither", "Dithering mode", "Dithering", 0, clipper_dither_modes), \
+            SWITCH("clog", "Clipper logarithmic display", "Log display", 1.0f), \
+            SWITCH("op", "Overdrive protection", "ODP", 1.0f), \
+            CONTROL("th", "Overdrive protection threshold", "ODP thresh", U_DB, clipper::ODP_THRESHOLD), \
+            CONTROL("kn", "Overdrive protection knee", "ODP knee", U_DB, clipper::ODP_KNEE), \
+            LOG_CONTROL("or", "Overdrive protection reactivity", "ODP react", U_MSEC, clipper::ODP_REACT), \
             MESH("opc", "Overdrive protection chart", 2, clipper::CURVE_MESH_POINTS), \
-            SWITCH("ce", "Clipper enable", 1.0f), \
-            COMBO("cf", "Clipper sigmoid function", 2.0f, sigmoid_functions), \
-            LOG_CONTROL("ct", "Clipper sigmoid threshold", U_GAIN_AMP, clipper::CLIP_THRESHOLD), \
-            CONTROL("cp", "Clipper sigmoid pumping", U_DB, clipper::CLIP_PUMPING), \
-            MESH("cfc", "Clipper sigmoid function chart", 4, clipper::CURVE_MESH_POINTS)
+            SWITCH("ce", "Clipper enable", "Clip on", 1.0f), \
+            COMBO("cf", "Clipper sigmoid function", "Function", 2.0f, sigmoid_functions), \
+            LOG_CONTROL("ct", "Clipper sigmoid threshold", "Thresh", U_GAIN_AMP, clipper::CLIP_THRESHOLD), \
+            CONTROL("dcoff", "Clipper DC offset", "DC offset", U_PERCENT, clipper::DCOFF), \
+            SWITCH("dcomp", "Clipper DC compensate", "DC compensate", 1.0f), \
+            CONTROL("cp", "Clipper sigmoid pumping", "Pumping", U_DB, clipper::CLIP_PUMPING), \
+            MESH("cfc", "Clipper sigmoid function chart", 6, clipper::CURVE_MESH_POINTS), \
+            COMBO("gview", "Clipper graph view", "Graph view", 0, clipper_views), \
+            MESH("ctg", "Clipper time graph", 1 + 3*channels, clipper::TIME_MESH_POINTS + 4), \
+            MESH("wfg", "Clipper waveform graph", 1 + channels, clipper::TIME_MESH_POINTS + 4)
+
+        #define CLIPPER_COMMON_MONO \
+            CLIPPER_COMMON(1)
 
         #define CLIPPER_COMMON_STEREO \
-            CLIPPER_COMMON, \
-            CONTROL_DFL("slink", "Stereo link", U_PERCENT, clipper::STEREO_LINK, 50.0f)
+            CLIPPER_COMMON(2), \
+            CONTROL_DFL("slink", "Stereo link", "Slink", U_PERCENT, clipper::STEREO_LINK, 50.0f)
 
         #define CLIPPER_METERS(id, label) \
             METER_OUT_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_36_DB), \
@@ -105,24 +121,24 @@ namespace lsp
             METER_OUT_GAIN("odx" id, "Overdrive protection input meter" label, GAIN_AMP_P_36_DB), \
             METER_OUT_GAIN("ody" id, "Overdrive protection output meter" label, GAIN_AMP_P_36_DB), \
             METER_GAIN_DFL("odr" id, "Overdrive protection reduction level meter" label, GAIN_AMP_P_72_DB, GAIN_AMP_0_DB), \
-            METER_OUT_GAIN("cfx" id, "Clipping function input meter" label, GAIN_AMP_P_36_DB), \
-            METER_OUT_GAIN("cfy" id, "Clipping function output meter" label, GAIN_AMP_P_36_DB), \
-            METER_GAIN_DFL("cfr" id, "Clipping function reduction level meter" label, GAIN_AMP_P_72_DB, GAIN_AMP_0_DB), \
-            MESH("ctg" id, "Clipper time graph" label, 4, clipper::TIME_MESH_POINTS + 4)
-
-        #define OSCILLOSCOPE_SWITCHES(id, label) \
-            SWITCH("ilg" id, "Input level graph enable" label, 1.0f), \
-            SWITCH("olg" id, "Output level graph enable" label, 1.0f), \
-            SWITCH("grg" id, "Gain reduction graph enable" label, 1.0f)
+            METER_OUT_GAIN("cfx1" id, "Clipping function input meter 1" label, GAIN_AMP_P_36_DB), \
+            METER_OUT_GAIN("cfy1" id, "Clipping function output meter 1" label, GAIN_AMP_P_36_DB), \
+            METER_OUT_GAIN("cfx2" id, "Clipping function input meter 2" label, GAIN_AMP_P_36_DB), \
+            METER_OUT_GAIN("cfy2" id, "Clipping function output meter 2" label, GAIN_AMP_P_36_DB), \
+            METER_GAIN_DFL("cfr" id, "Clipping function reduction level meter" label, GAIN_AMP_P_72_DB, GAIN_AMP_0_DB)
+
+        #define OSCILLOSCOPE_SWITCHES(id, label, alias) \
+            SWITCH("ilg" id, "Input level graph enable" label, "Show In" alias, 1.0f), \
+            SWITCH("olg" id, "Output level graph enable" label, "Show Out" alias, 1.0f), \
+            SWITCH("grg" id, "Gain reduction graph enable" label, "Show Gain" alias, 1.0f)
 
         //-------------------------------------------------------------------------
         // Plugin metadata
-
         static const port_t clipper_mono_ports[] =
         {
             PORTS_MONO_PLUGIN,
-            CLIPPER_COMMON,
-            OSCILLOSCOPE_SWITCHES("", ""),
+            CLIPPER_COMMON_MONO,
+            OSCILLOSCOPE_SWITCHES("", "", ""),
             CLIPPER_METERS("", ""),
 
             PORTS_END
@@ -133,8 +149,8 @@ namespace lsp
             // Input and output audio ports
             PORTS_STEREO_PLUGIN,
             CLIPPER_COMMON_STEREO,
-            OSCILLOSCOPE_SWITCHES("_l", " Left"),
-            OSCILLOSCOPE_SWITCHES("_r", " Right"),
+            OSCILLOSCOPE_SWITCHES("_l", " Left", " L"),
+            OSCILLOSCOPE_SWITCHES("_r", " Right", " R"),
             CLIPPER_METERS("_l", " Left"),
             CLIPPER_METERS("_r", " Right"),
 
diff -pruN 1.2.21-5/modules/lsp-plugins-clipper/src/main/plug/clipper.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/src/main/plug/clipper.cpp
--- 1.2.21-5/modules/lsp-plugins-clipper/src/main/plug/clipper.cpp	2025-03-01 12:43:00.324627186 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-clipper/src/main/plug/clipper.cpp	2025-08-26 18:15:46.689974525 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-clipper
  * Created on: 01 дек 2023 г.
@@ -29,13 +29,13 @@
 
 #include <private/plugins/clipper.h>
 
-/* The size of temporary buffer for audio processing */
-#define BUFFER_SIZE         0x400U
-
 namespace lsp
 {
     namespace plugins
     {
+        /* The size of temporary buffer for audio processing */
+        static constexpr size_t BUFFER_SIZE     = 0x400;
+
         //---------------------------------------------------------------------
         // Plugin factory
         static const meta::plugin_t *plugins[] =
@@ -99,6 +99,7 @@ namespace lsp
 
             sClip.pFunc             = NULL;
             sClip.fThreshold        = 0.0f;
+            sClip.fDCOffset         = 0.0f;
             sClip.fPumping          = 1.0f;
             sClip.fScaling          = 0.0f;
             sClip.fKnee             = 0.0f;
@@ -106,6 +107,8 @@ namespace lsp
             sClip.pOn               = NULL;
             sClip.pFunction         = NULL;
             sClip.pThreshold        = NULL;
+            sClip.pDCOffset         = NULL;
+            sClip.pDCCompensate     = NULL;
             sClip.pPumping          = NULL;
             sClip.pCurveMesh        = NULL;
 
@@ -129,6 +132,7 @@ namespace lsp
             vLinSigmoid             = NULL;
             vLogSigmoid             = NULL;
             vTime                   = NULL;
+            vWaveformTime           = NULL;
             pIDisplay               = NULL;
 
             pBypass                 = NULL;
@@ -140,6 +144,8 @@ namespace lsp
             pBoosting               = NULL;
             pStereoLink             = NULL;
             pDithering              = NULL;
+            pTimeMesh               = NULL;
+            pWaveformMesh           = NULL;
 
             pData                   = NULL;
         }
@@ -171,6 +177,8 @@ namespace lsp
                     c->sDither.destroy();
                     c->sInGraph.destroy();
                     c->sOutGraph.destroy();
+                    c->sWaveformGraph.destroy();
+                    c->sRedGraph.destroy();
                 }
                 vChannels   = NULL;
             }
@@ -206,7 +214,9 @@ namespace lsp
                 szof_curve_buffer +     // vLinSigmoid
                 szof_curve_buffer +     // vLogSigmoid
                 szof_time_buffer +      // vTime
+                szof_time_buffer +      // vWaveformTime
                 nChannels * (
+                    szof_buffer +       // vInMeter
                     szof_buffer +       // vData
                     szof_buffer         // vSc
                 );
@@ -265,6 +275,7 @@ namespace lsp
             vLinSigmoid             = advance_ptr_bytes<float>(ptr, szof_curve_buffer);
             vLogSigmoid             = advance_ptr_bytes<float>(ptr, szof_curve_buffer);
             vTime                   = advance_ptr_bytes<float>(ptr, szof_time_buffer);
+            vWaveformTime           = advance_ptr_bytes<float>(ptr, szof_time_buffer);
 
             for (size_t i=0; i < nChannels; ++i)
             {
@@ -279,6 +290,12 @@ namespace lsp
 
                 c->sInGraph.construct();
                 c->sOutGraph.construct();
+                c->sWaveformGraph.construct();
+                c->sRedGraph.construct();
+                c->sInGraph.set_method(dspu::MM_ABS_MAXIMUM);
+                c->sOutGraph.set_method(dspu::MM_ABS_MAXIMUM);
+                c->sWaveformGraph.set_method(dspu::MM_PEAK);
+                c->sRedGraph.set_method(dspu::MM_ABS_MINIMUM);
 
                 c->sDither.init();
 
@@ -292,12 +309,15 @@ namespace lsp
                 c->fOdpOut              = GAIN_AMP_M_INF_DB;
                 c->fOdpRed              = GAIN_AMP_M_INF_DB;
 
-                c->fClipIn              = GAIN_AMP_M_INF_DB;
-                c->fClipOut             = GAIN_AMP_M_INF_DB;
+                c->fClipIn[0]           = GAIN_AMP_M_INF_DB;
+                c->fClipIn[1]           = GAIN_AMP_M_INF_DB;
+                c->fClipOut[0]          = GAIN_AMP_M_INF_DB;
+                c->fClipOut[1]          = GAIN_AMP_M_INF_DB;
                 c->fClipRed             = GAIN_AMP_M_INF_DB;
 
                 c->vIn                  = NULL;
                 c->vOut                 = NULL;
+                c->vInMeter             = advance_ptr_bytes<float>(ptr, szof_buffer);
                 c->vData                = advance_ptr_bytes<float>(ptr, szof_buffer);
                 c->vSc                  = advance_ptr_bytes<float>(ptr, szof_buffer);
 
@@ -317,11 +337,11 @@ namespace lsp
                 c->pOdpOut              = NULL;
                 c->pOdpRed              = NULL;
 
-                c->pClipIn              = NULL;
-                c->pClipOut             = NULL;
+                c->pClipIn[0]           = NULL;
+                c->pClipIn[1]           = NULL;
+                c->pClipOut[0]          = NULL;
+                c->pClipOut[1]          = NULL;
                 c->pClipRed             = NULL;
-
-                c->pTimeMesh            = NULL;
             }
 
             lsp_assert( ptr <= tail );
@@ -332,50 +352,56 @@ namespace lsp
 
             // Bind input audio ports
             for (size_t i=0; i<nChannels; ++i)
-                vChannels[i].pDataIn    = trace_port(ports[port_id++]);
+                BIND_PORT(vChannels[i].pDataIn);
 
             // Bind output audio ports
             for (size_t i=0; i<nChannels; ++i)
-                vChannels[i].pDataOut   = trace_port(ports[port_id++]);
+                BIND_PORT(vChannels[i].pDataOut);
 
             // Bind common ports
             lsp_trace("Binding common ports");
-            pBypass             = trace_port(ports[port_id++]);
-            pGainIn             = trace_port(ports[port_id++]);
-            pGainOut            = trace_port(ports[port_id++]);
-            sLufs.pOn           = trace_port(ports[port_id++]);
-            sLufs.pThreshold    = trace_port(ports[port_id++]);
-            sLufs.pIn           = trace_port(ports[port_id++]);
-            sLufs.pRed          = trace_port(ports[port_id++]);
-            pLufsIn             = trace_port(ports[port_id++]);
-            pLufsOut            = trace_port(ports[port_id++]);
-            pThresh             = trace_port(ports[port_id++]);
-            pBoosting           = trace_port(ports[port_id++]);
-            pDithering          = trace_port(ports[port_id++]);
-            trace_port(ports[port_id++]); // Skip clipper linear/logarithmic graph view
+            BIND_PORT(pBypass);
+            BIND_PORT(pGainIn);
+            BIND_PORT(pGainOut);
+            BIND_PORT(sLufs.pOn);
+            BIND_PORT(sLufs.pThreshold);
+            BIND_PORT(sLufs.pIn);
+            BIND_PORT(sLufs.pRed);
+            BIND_PORT(pLufsIn);
+            BIND_PORT(pLufsOut);
+            BIND_PORT(pThresh);
+            BIND_PORT(pBoosting);
+            BIND_PORT(pDithering);
+            SKIP_PORT("Linear/Logarithmic view"); // Skip clipper linear/logarithmic graph view
 
             // Bind clipper ports
             lsp_trace("Binding clipper ports");
-            sOdp.pOn                = trace_port(ports[port_id++]);
-            sOdp.pThreshold         = trace_port(ports[port_id++]);
-            sOdp.pKnee              = trace_port(ports[port_id++]);
-            sOdp.pReactivity        = trace_port(ports[port_id++]);
-            sOdp.pCurveMesh         = trace_port(ports[port_id++]);
-            sClip.pOn               = trace_port(ports[port_id++]);
-            sClip.pFunction         = trace_port(ports[port_id++]);
-            sClip.pThreshold        = trace_port(ports[port_id++]);
-            sClip.pPumping          = trace_port(ports[port_id++]);
-            sClip.pCurveMesh        = trace_port(ports[port_id++]);
-            pStereoLink             = (nChannels > 1) ? trace_port(ports[port_id++]) : NULL;
+            BIND_PORT(sOdp.pOn);
+            BIND_PORT(sOdp.pThreshold);
+            BIND_PORT(sOdp.pKnee);
+            BIND_PORT(sOdp.pReactivity);
+            BIND_PORT(sOdp.pCurveMesh);
+            BIND_PORT(sClip.pOn);
+            BIND_PORT(sClip.pFunction);
+            BIND_PORT(sClip.pThreshold);
+            BIND_PORT(sClip.pDCOffset);
+            BIND_PORT(sClip.pDCCompensate);
+            BIND_PORT(sClip.pPumping);
+            BIND_PORT(sClip.pCurveMesh);
+            SKIP_PORT("Clipper graph view");
+            BIND_PORT(pTimeMesh);
+            BIND_PORT(pWaveformMesh);
+            if (nChannels > 1)
+                BIND_PORT(pStereoLink);
 
             lsp_trace("Skipping graph visibility ports");
             for (size_t i=0; i<nChannels; ++i)
             {
                 channel_t *c            = &vChannels[i];
 
-                c->pInVisible           = trace_port(ports[port_id++]);
-                c->pOutVisible          = trace_port(ports[port_id++]);
-                c->pRedVisible          = trace_port(ports[port_id++]);
+                BIND_PORT(c->pInVisible);
+                BIND_PORT(c->pOutVisible);
+                BIND_PORT(c->pRedVisible);
             }
 
             // Bind channel metering
@@ -384,19 +410,19 @@ namespace lsp
             {
                 channel_t *c            = &vChannels[i];
 
-                c->pIn                  = trace_port(ports[port_id++]);
-                c->pOut                 = trace_port(ports[port_id++]);
-                c->pRed                 = trace_port(ports[port_id++]);
-
-                c->pOdpIn               = trace_port(ports[port_id++]);
-                c->pOdpOut              = trace_port(ports[port_id++]);
-                c->pOdpRed              = trace_port(ports[port_id++]);
-
-                c->pClipIn              = trace_port(ports[port_id++]);
-                c->pClipOut             = trace_port(ports[port_id++]);
-                c->pClipRed             = trace_port(ports[port_id++]);
-
-                c->pTimeMesh            = trace_port(ports[port_id++]);
+                BIND_PORT(c->pIn);
+                BIND_PORT(c->pOut);
+                BIND_PORT(c->pRed);
+
+                BIND_PORT(c->pOdpIn);
+                BIND_PORT(c->pOdpOut);
+                BIND_PORT(c->pOdpRed);
+
+                BIND_PORT(c->pClipIn[0]);
+                BIND_PORT(c->pClipOut[0]);
+                BIND_PORT(c->pClipIn[1]);
+                BIND_PORT(c->pClipOut[1]);
+                BIND_PORT(c->pClipRed);
             }
 
             // Initialize horizontal axis values for each curve
@@ -415,6 +441,10 @@ namespace lsp
             delta       = meta::clipper::TIME_HISTORY_MAX / (meta::clipper::TIME_MESH_POINTS - 1);
             for (size_t i=0; i<meta::clipper::TIME_MESH_POINTS; ++i)
                 vTime[i]    = meta::clipper::TIME_HISTORY_MAX - i*delta;
+
+            delta       = meta::clipper::WAVEFORM_HISTORY_MAX / (meta::clipper::TIME_MESH_POINTS - 1);
+            for (size_t i=0; i<meta::clipper::TIME_MESH_POINTS; ++i)
+                vWaveformTime[i]    = meta::clipper::WAVEFORM_HISTORY_MAX - i*delta;
         }
 
         void clipper::update_sample_rate(long sr)
@@ -422,6 +452,8 @@ namespace lsp
             const size_t max_odp_delay      = dspu::millis_to_samples(sr, meta::clipper::ODP_REACT_MAX) * 0.5f;
             const size_t samples_per_dot    = dspu::seconds_to_samples(
                 sr, meta::clipper::TIME_HISTORY_MAX / meta::clipper::TIME_MESH_POINTS);
+            const size_t wf_samples_per_dot    = dspu::seconds_to_samples(
+                sr, meta::clipper::WAVEFORM_HISTORY_MAX / meta::clipper::TIME_MESH_POINTS);
 
             sInMeter.set_sample_rate(sr);
             sOutMeter.set_sample_rate(sr);
@@ -439,6 +471,8 @@ namespace lsp
                 c->sSc.set_sample_rate(sr);
                 c->sInGraph.init(meta::clipper::TIME_MESH_POINTS, samples_per_dot);
                 c->sOutGraph.init(meta::clipper::TIME_MESH_POINTS, samples_per_dot);
+                c->sWaveformGraph.init(meta::clipper::TIME_MESH_POINTS, wf_samples_per_dot);
+                c->sRedGraph.init(meta::clipper::TIME_MESH_POINTS, samples_per_dot);
             }
         }
 
@@ -480,15 +514,18 @@ namespace lsp
         {
             dspu::sigmoid::function_t func = vSigmoidFunctions[size_t(params->pFunction->value())];
             const float threshold   = lsp_min(params->pThreshold->value(), 0.99f);
+            const float dc_off      = params->pDCOffset->value() * 0.01f;
             const float pumping     = dspu::db_to_gain(params->pPumping->value());
 
             if ((func == params->pFunc) &&
                 (threshold == params->fThreshold) &&
+                (dc_off == params->fDCOffset) &&
                 (pumping == params->fPumping))
                 return false;
 
             params->pFunc           = func;
             params->fThreshold      = threshold;
+            params->fDCOffset       = dc_off;
             params->fPumping        = pumping;
             params->fKnee           = 1.0f - threshold;
             params->fScaling        = 1.0f / params->fKnee;
@@ -582,10 +619,9 @@ namespace lsp
         void clipper::clip_curve(float *dst, const float *x, const clip_params_t *p, size_t count)
         {
             for (size_t i=0; i<count; ++i)
-                dst[i]      = clip_curve(p, x[i]);
+                dst[i]          = clip_curve(p, x[i]);
         }
 
-
         void clipper::update_settings()
         {
             const bool bypass       = pBypass->value() >= 0.5f;
@@ -608,6 +644,7 @@ namespace lsp
                 nFlags                 |= CF_SYNC_ODP;
             }
             nFlags                  = lsp_setflag(nFlags, CF_CLIP_ENABLED, sClip.pOn->value() >= 0.5f);
+            nFlags                  = lsp_setflag(nFlags, CF_DC_COMPENSATE, sClip.pDCCompensate->value() >= 0.5f);
             if (update_clip_params(&sClip))
                 nFlags                 |= CF_SYNC_CLIP;
 
@@ -661,8 +698,10 @@ namespace lsp
                 c->fOdpOut          = GAIN_AMP_M_INF_DB;
                 c->fOdpRed          = GAIN_AMP_P_72_DB;
 
-                c->fClipIn          = GAIN_AMP_M_INF_DB;
-                c->fClipOut         = GAIN_AMP_M_INF_DB;
+                c->fClipIn[0]       = GAIN_AMP_M_INF_DB;
+                c->fClipIn[1]       = GAIN_AMP_M_INF_DB;
+                c->fClipOut[0]      = GAIN_AMP_M_INF_DB;
+                c->fClipOut[1]      = GAIN_AMP_M_INF_DB;
                 c->fClipRed         = GAIN_AMP_P_72_DB;
             }
         }
@@ -678,6 +717,127 @@ namespace lsp
             }
         }
 
+        void clipper::process_odp_channel(channel_t *c, size_t samples)
+        {
+            if (!(nFlags & CF_ODP_ENABLED))
+            {
+                dsp::fill_one(c->vSc, samples);
+
+                c->fOdpIn               = GAIN_AMP_M_INF_DB;
+                c->fOdpOut              = GAIN_AMP_M_INF_DB;
+                c->fOdpRed              = GAIN_AMP_0_DB;
+
+                return;
+            }
+
+            // Measure input signal
+            const size_t odp_idx    = dsp::abs_max_index(c->vSc, samples);
+            const float odp_in      = c->vSc[odp_idx];
+
+            // Apply ODP
+            odp_gain(c->vSc, c->vSc, &sComp, samples);
+            dsp::mul2(c->vData, c->vSc, samples);
+
+            // Measure output
+            const float odp_red     = c->vSc[odp_idx];
+            const float odp_out     = odp_in * odp_red;
+
+            c->fOdpIn               = lsp_max(c->fOdpIn, odp_in);
+            c->fOdpOut              = lsp_max(c->fOdpOut, odp_out);
+            c->fOdpRed              = lsp_min(c->fOdpRed, odp_red);
+        }
+
+        void clipper::process_clip_channel(channel_t *c, size_t samples)
+        {
+            // Check that clipping is enabled
+            if (!(nFlags & CF_CLIP_ENABLED))
+            {
+                c->fClipIn[0]           = GAIN_AMP_M_INF_DB;
+                c->fClipIn[1]           = GAIN_AMP_M_INF_DB;
+                c->fClipOut[0]          = GAIN_AMP_M_INF_DB;
+                c->fClipOut[1]          = GAIN_AMP_M_INF_DB;
+                c->fClipRed             = GAIN_AMP_0_DB;
+
+                return;
+            }
+
+            // Do clipping
+            const float dc      = sClip.fDCOffset;
+            size_t clip_idx[2];
+            float clip_in[2], clip_out[2];
+
+            if (dc != 0.0f)
+            {
+                // Apply DC offset
+                dsp::add_k2(c->vData, dc, samples);
+
+                // Perform clipping
+                dsp::minmax_index(c->vData, samples, &clip_idx[0], &clip_idx[1]);
+                clip_in[0]          = fabsf(c->vData[clip_idx[0]]);
+                clip_in[1]          = fabsf(c->vData[clip_idx[1]]);
+
+                clip_curve(c->vData, c->vData, &sClip, samples);
+
+                clip_out[0]         = fabsf(c->vData[clip_idx[0]]);
+                clip_out[1]         = fabsf(c->vData[clip_idx[1]]);
+
+                // Compensate DC offset if needed
+                if (nFlags & CF_DC_COMPENSATE)
+                    dsp::sub_k2(c->vData, dc, samples);
+            }
+            else
+            {
+                clip_idx[0]         = dsp::abs_max_index(c->vData, samples);
+                clip_idx[1]         = clip_idx[0];
+                clip_in[0]          = fabsf(c->vData[clip_idx[0]]);
+                clip_in[1]          = clip_in[0];
+
+                clip_curve(c->vData, c->vData, &sClip, samples);
+
+                clip_out[0]         = fabsf(c->vData[clip_idx[0]]);
+                clip_out[1]         = clip_out[0];
+            }
+
+            // Measure input and output level
+            if (clip_in[0] > c->fClipIn[0])
+            {
+                c->fClipIn[0]           = clip_in[0];
+                c->fClipOut[0]          = clip_out[0];
+            }
+            if (clip_in[1] > c->fClipIn[1])
+            {
+                c->fClipIn[1]           = clip_in[1];
+                c->fClipOut[1]          = clip_out[1];
+            }
+
+            // Compute gain reduction
+            const size_t imax       = (clip_in[0] >= clip_in[1]) ? 0 : 1;
+            const float clip_red    = (clip_in[imax] >= GAIN_AMP_M_120_DB) ? clip_out[imax] / clip_in[imax] : GAIN_AMP_0_DB;
+            c->fClipRed             = lsp_min(c->fClipRed, clip_red);
+        }
+
+        void clipper::meter_channel(channel_t *c, size_t samples)
+        {
+            // Compute reduction buffer
+            for (size_t i=0; i<samples; ++i)
+                vBuffer[i]              = (c->vInMeter[i] >= GAIN_AMP_M_120_DB) ? fabsf(c->vData[i]) / c->vInMeter[i] : GAIN_AMP_0_DB;
+
+            // Update graphs
+            c->sInGraph.process(c->vInMeter, samples);
+            c->sOutGraph.process(c->vData, samples);
+            c->sWaveformGraph.process(c->vData, samples);
+            c->sRedGraph.process(vBuffer, samples);
+
+            // Update momentary values
+            const float in          = dsp::max(c->vInMeter, samples);
+            const float out         = dsp::abs_max(c->vData, samples);
+            const float red         = dsp::min(vBuffer, samples);
+
+            c->fIn                  = lsp_max(c->fIn, in);
+            c->fOut                 = lsp_max(c->fOut, out);
+            c->fRed                 = lsp_min(c->fRed, red);
+        }
+
         void clipper::process_clipper(size_t samples)
         {
             if (nChannels > 1)
@@ -732,110 +892,21 @@ namespace lsp
                 l->sScDelay.process(l->vData, l->vData, samples);
                 r->sScDelay.process(r->vData, r->vData, samples);
 
-                // Measure signal at the input of the band
-                const size_t idx_in_l   = dsp::abs_max_index(l->vData, samples);
-                const size_t idx_in_r   = dsp::abs_max_index(r->vData, samples);
-                const float in_l        = fabsf(l->vData[idx_in_l]);
-                const float in_r        = fabsf(r->vData[idx_in_r]);
-                l->sInGraph.process(l->vData, samples);
-                r->sInGraph.process(r->vData, samples);
-
-                // Overdrive protection
-                if (nFlags & CF_ODP_ENABLED)
-                {
-                    // Measure input signal
-                    const size_t odp_idx_l  = dsp::abs_max_index(l->vSc, samples);
-                    const size_t odp_idx_r  = dsp::abs_max_index(r->vSc, samples);
-                    const float odp_in_l    = l->vSc[odp_idx_l];
-                    const float odp_in_r    = r->vSc[odp_idx_r];
-
-                    // Apply ODP
-                    odp_gain(l->vSc, l->vSc, &sComp, samples);
-                    odp_gain(r->vSc, r->vSc, &sComp, samples);
-                    dsp::mul2(l->vData, l->vSc, samples);
-                    dsp::mul2(r->vData, r->vSc, samples);
-
-                    // Measure output
-                    const float odp_red_l   = l->vSc[odp_idx_l];
-                    const float odp_red_r   = r->vSc[odp_idx_r];
-                    const float odp_out_l   = odp_in_l * odp_red_l;
-                    const float odp_out_r   = odp_in_r * odp_red_r;
-
-                    l->fOdpIn               = lsp_max(l->fOdpIn, odp_in_l);
-                    l->fOdpOut              = lsp_max(l->fOdpOut, odp_out_l);
-                    l->fOdpRed              = lsp_min(l->fOdpRed, odp_red_l);
-
-                    r->fOdpIn               = lsp_max(r->fOdpIn, odp_in_r);
-                    r->fOdpOut              = lsp_max(r->fOdpOut, odp_out_r);
-                    r->fOdpRed              = lsp_min(r->fOdpRed, odp_red_r);
-                }
-                else
-                {
-                    dsp::fill_one(l->vSc, samples);
-                    dsp::fill_one(r->vSc, samples);
-
-                    l->fOdpIn               = GAIN_AMP_M_INF_DB;
-                    l->fOdpOut              = GAIN_AMP_M_INF_DB;
-                    l->fOdpRed              = GAIN_AMP_0_DB;
-
-                    r->fOdpIn               = GAIN_AMP_M_INF_DB;
-                    r->fOdpOut              = GAIN_AMP_M_INF_DB;
-                    r->fOdpRed              = GAIN_AMP_0_DB;
-                }
-
-                // Clipping
-                if (nFlags & CF_CLIP_ENABLED)
-                {
-                    // Mesure input
-                    const size_t clip_idx_l = dsp::abs_max_index(l->vData, samples);
-                    const size_t clip_idx_r = dsp::abs_max_index(r->vData, samples);
-                    const float clip_in_l   = fabsf(l->vData[clip_idx_l]);
-                    const float clip_in_r   = fabsf(r->vData[clip_idx_r]);
-
-                    // Do clipping
-                    clip_curve(l->vData, l->vData, &sClip, samples);
-                    clip_curve(r->vData, r->vData, &sClip, samples);
-
-                    // Measure output
-                    const float clip_out_l  = fabsf(l->vData[clip_idx_l]);
-                    const float clip_out_r  = fabsf(r->vData[clip_idx_r]);
-                    const float clip_red_l  = (clip_in_l >= GAIN_AMP_M_120_DB) ? clip_out_l / clip_in_l : GAIN_AMP_0_DB;
-                    const float clip_red_r  = (clip_in_r >= GAIN_AMP_M_120_DB) ? clip_out_r / clip_in_r : GAIN_AMP_0_DB;
-
-                    l->fClipIn              = lsp_max(l->fClipIn, clip_in_l);
-                    l->fClipOut             = lsp_max(l->fClipOut, clip_out_l);
-                    l->fClipRed             = lsp_min(l->fClipRed, clip_red_l);
-
-                    r->fClipIn              = lsp_max(r->fClipIn, clip_in_r);
-                    r->fClipOut             = lsp_max(r->fClipOut, clip_out_r);
-                    r->fClipRed             = lsp_min(r->fClipRed, clip_red_r);
-                }
-                else
-                {
-                    l->fClipIn              = GAIN_AMP_M_INF_DB;
-                    l->fClipOut             = GAIN_AMP_M_INF_DB;
-                    l->fClipRed             = GAIN_AMP_0_DB;
-
-                    r->fClipIn              = GAIN_AMP_M_INF_DB;
-                    r->fClipOut             = GAIN_AMP_M_INF_DB;
-                    r->fClipRed             = GAIN_AMP_0_DB;
-                }
+                // Remember signal at the input of the band for metering
+                dsp::abs2(l->vInMeter, l->vData, samples);
+                dsp::abs2(r->vInMeter, r->vData, samples);
+
+                // Apply overdrive protection
+                process_odp_channel(l, samples);
+                process_odp_channel(r, samples);
+
+                // Apply clipping
+                process_clip_channel(l, samples);
+                process_clip_channel(r, samples);
 
                 // Perform output metering
-                const float out_l       = fabsf(l->vData[idx_in_l]);
-                const float out_r       = fabsf(r->vData[idx_in_r]);
-                const float red_l       = (in_l >= GAIN_AMP_M_120_DB) ? out_l / in_l : GAIN_AMP_0_DB;
-                const float red_r       = (in_r >= GAIN_AMP_M_120_DB) ? out_r / in_r : GAIN_AMP_0_DB;
-                l->sOutGraph.process(l->vData, samples);
-                r->sOutGraph.process(r->vData, samples);
-
-                l->fIn                  = lsp_max(l->fIn, in_l);
-                l->fOut                 = lsp_max(l->fOut, out_l);
-                l->fRed                 = lsp_min(l->fRed, red_l);
-
-                r->fIn                  = lsp_max(r->fIn, in_r);
-                r->fOut                 = lsp_max(r->fOut, out_r);
-                r->fRed                 = lsp_min(r->fRed, red_r);
+                meter_channel(l, samples);
+                meter_channel(r, samples);
 
                 // Apply gain boosting compensation
                 if (!(nFlags & CF_BOOSTING))
@@ -873,72 +944,17 @@ namespace lsp
                 c->sSc.process(c->vSc, const_cast<const float **>(&c->vData), samples);
                 c->sScDelay.process(c->vData, c->vData, samples);
 
-                // Measure signal at the input of the band
-                const size_t idx_in     = dsp::abs_max_index(c->vData, samples);
-                const float in          = fabsf(c->vData[idx_in]);
-                c->sInGraph.process(c->vData, samples);
+                // Remember signal at the input of the band for metering
+                dsp::abs2(c->vInMeter, c->vData, samples);
 
-                // Overdrive protection
-                if (nFlags & CF_ODP_ENABLED)
-                {
-                    // Measure input signal
-                    const size_t odp_idx    = dsp::abs_max_index(c->vSc, samples);
-                    const float odp_in      = c->vSc[odp_idx];
-
-                    // Apply ODP
-                    odp_gain(c->vSc, c->vSc, &sComp, samples);
-                    dsp::mul2(c->vData, c->vSc, samples);
-
-                    // Measure output
-                    const float odp_red     = c->vSc[odp_idx];
-                    const float odp_out     = odp_in * odp_red;
-
-                    c->fOdpIn               = lsp_max(c->fOdpIn, odp_in);
-                    c->fOdpOut              = lsp_max(c->fOdpOut, odp_out);
-                    c->fOdpRed              = lsp_min(c->fOdpRed, odp_red);
-                }
-                else
-                {
-                    dsp::fill_one(c->vSc, samples);
+                // Apply overdrive protection
+                process_odp_channel(c, samples);
 
-                    c->fOdpIn               = GAIN_AMP_M_INF_DB;
-                    c->fOdpOut              = GAIN_AMP_M_INF_DB;
-                    c->fOdpRed              = GAIN_AMP_0_DB;
-                }
-
-                // Clipping
-                if (nFlags & CF_CLIP_ENABLED)
-                {
-                    // Mesure input
-                    const size_t clip_idx   = dsp::abs_max_index(c->vData, samples);
-                    const float clip_in     = fabsf(c->vData[clip_idx]);
-
-                    // Do clipping
-                    clip_curve(c->vData, c->vData, &sClip, samples);
-
-                    // Measure output
-                    const float clip_out    = fabsf(c->vData[clip_idx]);
-                    const float clip_red    = (clip_in >= GAIN_AMP_M_120_DB) ? clip_out / clip_in : GAIN_AMP_0_DB;
-
-                    c->fClipIn              = lsp_max(c->fClipIn, clip_in);
-                    c->fClipOut             = lsp_max(c->fClipOut, clip_out);
-                    c->fClipRed             = lsp_min(c->fClipRed, clip_red);
-                }
-                else
-                {
-                    c->fClipIn              = GAIN_AMP_M_INF_DB;
-                    c->fClipOut             = GAIN_AMP_M_INF_DB;
-                    c->fClipRed             = GAIN_AMP_0_DB;
-                }
+                // Apply clipping
+                process_clip_channel(c, samples);
 
                 // Perform output metering
-                const float out         = fabsf(c->vData[idx_in]);
-                const float red         = (in >= GAIN_AMP_M_120_DB) ? out / in : GAIN_AMP_0_DB;
-                c->sOutGraph.process(c->vData, samples);
-
-                c->fIn                  = lsp_max(c->fIn, in);
-                c->fOut                 = lsp_max(c->fOut, out);
-                c->fRed                 = lsp_min(c->fRed, red);
+                meter_channel(c, samples);
 
                 // Apply gain boosting compensation
                 if (!(nFlags & CF_BOOSTING))
@@ -995,8 +1011,10 @@ namespace lsp
                 c->pOdpOut->set_value(c->fOdpOut);
                 c->pOdpRed->set_value(c->fOdpRed);
 
-                c->pClipIn->set_value(c->fClipIn);
-                c->pClipOut->set_value(c->fClipOut);
+                c->pClipIn[0]->set_value(c->fClipIn[0]);
+                c->pClipIn[1]->set_value(c->fClipIn[1]);
+                c->pClipOut[0]->set_value(c->fClipOut[0]);
+                c->pClipOut[1]->set_value(c->fClipOut[1]);
                 c->pClipRed->set_value(c->fClipRed);
             }
 
@@ -1040,31 +1058,35 @@ namespace lsp
                 }
             }
 
-            // Output data for each channel
-            for (size_t i=0; i<nChannels; ++i)
-            {
-                channel_t *c        = &vChannels[i];
+            // Output oscilloscope graphs for output clipper
+            mesh            = pTimeMesh->buffer<plug::mesh_t>();
+            if ((mesh != NULL) && (mesh->isEmpty()))
+            {
+                size_t index    = 0;
+                float *t        = mesh->pvData[index++];
+
+                dsp::copy(&t[2], vTime, meta::clipper::TIME_MESH_POINTS);
+                t[0]            = t[2] + meta::clipper::TIME_HISTORY_GAP;
+                t[1]            = t[0];
+                t              += meta::clipper::TIME_MESH_POINTS + 2;
+                t[0]            = t[-1] - meta::clipper::TIME_HISTORY_GAP;
+                t[1]            = t[0];
 
-                // Output oscilloscope graphs for output clipper
-                plug::mesh_t *mesh    = c->pTimeMesh->buffer<plug::mesh_t>();
-                if ((mesh != NULL) && (mesh->isEmpty()))
+                // Output data for each channel
+                for (size_t i=0; i<nChannels; ++i)
                 {
+                    channel_t *c    = &vChannels[i];
+
                     // Fill time values
-                    float *t        = mesh->pvData[0];
-                    float *in       = mesh->pvData[1];
-                    float *out      = mesh->pvData[2];
-                    float *red      = mesh->pvData[3];
+                    float *in       = mesh->pvData[index++];
+                    float *out      = mesh->pvData[index++];
+                    float *red      = mesh->pvData[index++];
 
-                    dsp::copy(&t[2], vTime, meta::clipper::TIME_MESH_POINTS);
                     dsp::copy(&in[2], c->sInGraph.data(), meta::clipper::TIME_MESH_POINTS);
                     dsp::copy(&out[2], c->sOutGraph.data(), meta::clipper::TIME_MESH_POINTS);
-
-                    for (size_t k=2; k<meta::clipper::TIME_MESH_POINTS + 2; ++k)
-                        red[k]      = lsp_max(out[k], GAIN_AMP_M_120_DB) / lsp_max(in[k], GAIN_AMP_M_120_DB);
+                    dsp::copy(&red[2], c->sRedGraph.data(), meta::clipper::TIME_MESH_POINTS);
 
                     // Generate extra points
-                    t[0]            = t[2] + meta::clipper::TIME_HISTORY_GAP;
-                    t[1]            = t[0];
                     in[0]           = 0.0f;
                     in[1]           = in[2];
                     out[0]          = out[2];
@@ -1072,23 +1094,56 @@ namespace lsp
                     red[0]          = red[2];
                     red[1]          = red[2];
 
-                    t              += meta::clipper::TIME_MESH_POINTS + 2;
                     in             += meta::clipper::TIME_MESH_POINTS + 2;
                     out            += meta::clipper::TIME_MESH_POINTS + 2;
                     red            += meta::clipper::TIME_MESH_POINTS + 2;
 
-                    t[0]            = t[-1] - meta::clipper::TIME_HISTORY_GAP;
-                    t[1]            = t[0];
                     in[0]           = in[-1];
                     in[1]           = 0.0f;
                     out[0]          = out[-1];
                     out[1]          = out[-1];
                     red[0]          = red[-1];
                     red[1]          = red[-1];
+                }
 
-                    // Notify mesh contains data
-                    mesh->data(4, meta::clipper::TIME_MESH_POINTS + 4);
+                // Notify mesh contains data
+                mesh->data(index, meta::clipper::TIME_MESH_POINTS + 4);
+            }
+
+            // Output oscilloscope graphs for output clipper
+            mesh            = pWaveformMesh->buffer<plug::mesh_t>();
+            if ((mesh != NULL) && (mesh->isEmpty()))
+            {
+                size_t index    = 0;
+                float *t        = mesh->pvData[index++];
+
+                dsp::copy(&t[2], vWaveformTime, meta::clipper::TIME_MESH_POINTS);
+                t[0]            = t[2] + meta::clipper::TIME_HISTORY_GAP;
+                t[1]            = t[0];
+                t              += meta::clipper::TIME_MESH_POINTS + 2;
+                t[0]            = t[-1] - meta::clipper::TIME_HISTORY_GAP;
+                t[1]            = t[0];
+
+                // Output data for each channel
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    channel_t *c    = &vChannels[i];
+
+                    // Fill time values
+                    float *osc      = mesh->pvData[index++];
+
+                    dsp::copy(&osc[2], c->sWaveformGraph.data(), meta::clipper::TIME_MESH_POINTS);
+
+                    // Generate extra points
+                    osc[0]          = 0.0f;
+                    osc[1]          = osc[2];
+                    osc            += meta::clipper::TIME_MESH_POINTS + 2;
+                    osc[0]          = osc[-1];
+                    osc[1]          = 0.0f;
                 }
+
+                // Notify mesh contains data
+                mesh->data(index, meta::clipper::TIME_MESH_POINTS + 4);
             }
         }
 
@@ -1197,6 +1252,7 @@ namespace lsp
                 // Initialize values
                 const float *in_g   = c->sInGraph.data();
                 const float *out_g  = c->sOutGraph.data();
+                const float *red_g  = c->sRedGraph.data();
                 float *in           = &b->v[3 + i*3 + 0][2];
                 float *out          = &b->v[3 + i*3 + 1][2];
                 float *red          = &b->v[3 + i*3 + 2][2];
@@ -1206,7 +1262,7 @@ namespace lsp
                     size_t off      = size_t(r*k);
                     in[k]           = in_g[off];
                     out[k]          = out_g[off];
-                    red[k]          = lsp_max(out[k], GAIN_AMP_M_120_DB) / lsp_max(in[k], GAIN_AMP_M_120_DB);
+                    red[k]          = red_g[off];
                 }
 
                 // Add terminating points
@@ -1310,6 +1366,8 @@ namespace lsp
                         v->write_object("sDither", &c->sDither);
                         v->write_object("sInGraph", &c->sInGraph);
                         v->write_object("sOutGraph", &c->sOutGraph);
+                        v->write_object("sWaveformGraph", &c->sWaveformGraph);
+                        v->write_object("sRedGraph", &c->sRedGraph);
 
                         v->write("nFlags", c->nFlags);
 
@@ -1321,12 +1379,13 @@ namespace lsp
                         v->write("fOdpOut", c->fOdpOut);
                         v->write("fOdpRed", c->fOdpRed);
 
-                        v->write("fClipIn", c->fClipIn);
-                        v->write("fClipOut", c->fClipOut);
+                        v->writev("fClipIn", c->fClipIn, 2);
+                        v->writev("fClipOut", c->fClipOut, 2);
                         v->write("fClipRed", c->fClipRed);
 
                         v->write("vIn", c->vIn);
                         v->write("vOut", c->vOut);
+                        v->write("vInMeter", c->vInMeter);
                         v->write("vData", c->vData);
                         v->write("vSc", c->vSc);
 
@@ -1345,11 +1404,9 @@ namespace lsp
                         v->write("pOdpOut", c->pOdpOut);
                         v->write("pOdpRed", c->pOdpRed);
 
-                        v->write("pClipIn", c->pClipIn);
-                        v->write("pClipOut", c->pClipOut);
+                        v->writev("pClipIn", c->pClipIn, 2);
+                        v->writev("pClipOut", c->pClipOut, 2);
                         v->write("pClipRed", c->pClipRed);
-
-                        v->write("pTimeMesh", c->pTimeMesh);
                     }
                     v->end_object();
                 }
@@ -1394,6 +1451,7 @@ namespace lsp
 
                 v->write("pFunc", c->pFunc);
                 v->write("fThreshold", c->fThreshold);
+                v->write("fDCOffset", c->fDCOffset);
                 v->write("fPumping", c->fPumping);
                 v->write("fScaling", c->fScaling);
                 v->write("fKnee", c->fKnee);
@@ -1401,6 +1459,8 @@ namespace lsp
                 v->write("pOn", c->pOn);
                 v->write("pFunction", c->pFunction);
                 v->write("pThreshold", c->pThreshold);
+                v->write("pDCOffset", c->pDCOffset);
+                v->write("pDCCompensate", c->pDCCompensate);
                 v->write("pPumping", c->pPumping);
                 v->write("pCurveMesh", c->pCurveMesh);
             }
@@ -1436,6 +1496,7 @@ namespace lsp
             v->write("vLinSigmoid", vLinSigmoid);
             v->write("vLogSigmoid", vLogSigmoid);
             v->write("vTime", vTime);
+            v->write("vWaveformTime", vWaveformTime);
             v->write("pIDisplay", pIDisplay);
 
             v->write("pBypass", pBypass);
@@ -1447,6 +1508,7 @@ namespace lsp
             v->write("pBoosting", pBoosting);
             v->write("pStereoLink", pStereoLink);
             v->write("pDithering", pDithering);
+            v->write("pTimeMesh", pTimeMesh);
 
             v->write("pData", pData);
         }
diff -pruN 1.2.21-5/modules/lsp-plugins-comp-delay/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-comp-delay/.github/workflows/build.yml	2025-03-01 12:43:00.348627041 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/.github/workflows/build.yml	2025-08-26 18:15:46.889972584 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-comp-delay/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-comp-delay/CHANGELOG	2025-03-01 12:43:00.348627041 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/CHANGELOG	2025-08-26 18:15:46.889972584 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.30 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.29 ===
+* Updated build scripts and dependencies.
+
 === 1.0.28 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-comp-delay/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-comp-delay/dependencies.mk	2025-03-01 12:43:00.348627041 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/dependencies.mk	2025-08-26 18:15:46.889972584 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-comp-delay/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-comp-delay/make/tools.mk	2025-03-01 12:43:00.348627041 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/make/tools.mk	2025-08-26 18:15:46.893972545 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-comp-delay/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/modules.mk
--- 1.2.21-5/modules/lsp-plugins-comp-delay/modules.mk	2025-03-01 12:43:00.348627041 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/modules.mk	2025-08-26 18:15:46.893972545 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-comp-delay/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/project.mk
--- 1.2.21-5/modules/lsp-plugins-comp-delay/project.mk	2025-03-01 12:43:00.348627041 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/project.mk	2025-08-26 18:15:46.893972545 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Compensation Delay Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.28
+ARTIFACT_VERSION            = 1.0.30
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-comp-delay/res/doc/screenshots/comp_delay_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/res/doc/screenshots/comp_delay_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-comp-delay/res/doc/screenshots/comp_delay_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/res/doc/screenshots/comp_delay_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-comp-delay/res/doc/screenshots/comp_delay_x2_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/res/doc/screenshots/comp_delay_x2_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-comp-delay/src/main/meta/comp_delay.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/src/main/meta/comp_delay.cpp
--- 1.2.21-5/modules/lsp-plugins-comp-delay/src/main/meta/comp_delay.cpp	2025-03-01 12:43:00.352627017 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-comp-delay/src/main/meta/comp_delay.cpp	2025-08-26 18:15:46.897972506 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-comp-delay
  * Created on: 25 нояб. 2020 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_COMP_DELAY_VERSION_MAJOR         1
 #define LSP_PLUGINS_COMP_DELAY_VERSION_MINOR         0
-#define LSP_PLUGINS_COMP_DELAY_VERSION_MICRO         28
+#define LSP_PLUGINS_COMP_DELAY_VERSION_MICRO         30
 
 #define LSP_PLUGINS_COMP_DELAY_VERSION  \
     LSP_MODULE_VERSION( \
@@ -59,17 +59,17 @@ namespace lsp
             // Input controls
             BYPASS,
 
-            COMBO("mode", "Mode", 0, comp_delay_modes),
-            SWITCH("ramp", "Ramping", 0.0f),
-            INT_CONTROL("samp", "Samples", U_SAMPLES, comp_delay::SAMPLES),
-            INT_CONTROL("m", "Meters", U_M, comp_delay::METERS),
-            CONTROL("cm", "Centimeters", U_CM, comp_delay::CENTIMETERS),
-            CONTROL("t", "Temperature", U_DEG_CEL, comp_delay::TEMPERATURE),
-            CONTROL("time", "Time", U_MSEC, comp_delay::TIME),
+            COMBO("mode", "Mode", "Mode", 0, comp_delay_modes),
+            SWITCH("ramp", "Ramping", "Ramping", 0.0f),
+            INT_CONTROL("samp", "Samples", "Samples", U_SAMPLES, comp_delay::SAMPLES),
+            INT_CONTROL("m", "Meters", "Meters", U_M, comp_delay::METERS),
+            CONTROL("cm", "Centimeters", "Centimeters", U_CM, comp_delay::CENTIMETERS),
+            CONTROL("t", "Temperature", "Temperature", U_DEG_CEL, comp_delay::TEMPERATURE),
+            CONTROL("time", "Time", "Time", U_MSEC, comp_delay::TIME),
             DRY_GAIN(0.0f),
             WET_GAIN(1.0f),
             DRYWET(100.0f),
-            SWITCH("phase", "Phase Invert", 0.0f),
+            SWITCH("phase", "Phase Invert", "Phase", 0.0f),
 
             OUT_GAIN,
 
@@ -94,18 +94,18 @@ namespace lsp
             // Input controls
             BYPASS,
 
-            COMBO("mode", "Mode", 0, comp_delay_modes),
-            SWITCH("ramp", "Ramping", 0.0f),
-            INT_CONTROL("samp", "Samples", U_SAMPLES, comp_delay::SAMPLES),
-            INT_CONTROL("m", "Meters", U_M, comp_delay::METERS),
-            CONTROL("cm", "Centimeters", U_CM, comp_delay::CENTIMETERS),
-            CONTROL("t", "Temperature", U_DEG_CEL, comp_delay::TEMPERATURE),
-            CONTROL("time", "Time", U_MSEC, comp_delay::TIME),
+            COMBO("mode", "Mode", "Mode", 0, comp_delay_modes),
+            SWITCH("ramp", "Ramping", "Ramping", 0.0f),
+            INT_CONTROL("samp", "Samples", "Samples", U_SAMPLES, comp_delay::SAMPLES),
+            INT_CONTROL("m", "Meters", "Meters", U_M, comp_delay::METERS),
+            CONTROL("cm", "Centimeters", "Centimeters", U_CM, comp_delay::CENTIMETERS),
+            CONTROL("t", "Temperature", "Temperature", U_DEG_CEL, comp_delay::TEMPERATURE),
+            CONTROL("time", "Time", "Time", U_MSEC, comp_delay::TIME),
             DRY_GAIN(0.0f),
             WET_GAIN(1.0f),
             DRYWET(100.0f),
-            SWITCH("phase_l", "Phase Invert Left", 0.0f),
-            SWITCH("phase_r", "Phase Invert Right", 0.0f),
+            SWITCH("phase_l", "Phase Invert Left", "Phase L", 0.0f),
+            SWITCH("phase_r", "Phase Invert Right", "Phase R", 0.0f),
 
             OUT_GAIN,
 
@@ -130,29 +130,29 @@ namespace lsp
             // Input controls
             BYPASS,
 
-            COMBO("mode_l", "Mode Left", 0, comp_delay_modes),
-            SWITCH("ramp_l", "Ramping Left", 0.0f),
-            INT_CONTROL("samp_l", "Samples Left", U_SAMPLES, comp_delay::SAMPLES),
-            INT_CONTROL("m_l", "Meters Left", U_M, comp_delay::METERS),
-            CONTROL("cm_l", "Centimeters Left", U_CM, comp_delay::CENTIMETERS),
-            CONTROL("t_l", "Temperature Left", U_DEG_CEL, comp_delay::TEMPERATURE),
-            CONTROL("time_l", "Time Left", U_MSEC, comp_delay::TIME),
+            COMBO("mode_l", "Mode Left", "Mode L", 0, comp_delay_modes),
+            SWITCH("ramp_l", "Ramping Left", "Ramping L", 0.0f),
+            INT_CONTROL("samp_l", "Samples Left", "Samples L", U_SAMPLES, comp_delay::SAMPLES),
+            INT_CONTROL("m_l", "Meters Left", "Meters L", U_M, comp_delay::METERS),
+            CONTROL("cm_l", "Centimeters Left", "Centimeters L", U_CM, comp_delay::CENTIMETERS),
+            CONTROL("t_l", "Temperature Left", "Temperature L", U_DEG_CEL, comp_delay::TEMPERATURE),
+            CONTROL("time_l", "Time Left", "Time L", U_MSEC, comp_delay::TIME),
             DRY_GAIN_L(0.0f),
             WET_GAIN_L(1.0f),
             DRYWET_L(100.0f),
-            SWITCH("phase_l", "Phase Invert Left", 0.0f),
+            SWITCH("phase_l", "Phase Invert Left", "Phase L", 0.0f),
 
-            COMBO("mode_r", "Mode Right", 0, comp_delay_modes),
-            SWITCH("ramp_r", "Ramping Right", 0.0f),
-            INT_CONTROL("samp_r", "Samples Right", U_SAMPLES, comp_delay::SAMPLES),
-            INT_CONTROL("m_r", "Meters Right", U_M, comp_delay::METERS),
-            CONTROL("cm_r", "Centimeters Right", U_CM, comp_delay::CENTIMETERS),
-            CONTROL("t_r", "Temperature Right", U_DEG_CEL, comp_delay::TEMPERATURE),
-            CONTROL("time_r", "Time Right", U_MSEC, comp_delay::TIME),
+            COMBO("mode_r", "Mode Right", "Mode R", 0, comp_delay_modes),
+            SWITCH("ramp_r", "Ramping Right", "Ramping R", 0.0f),
+            INT_CONTROL("samp_r", "Samples Right", "Samples R", U_SAMPLES, comp_delay::SAMPLES),
+            INT_CONTROL("m_r", "Meters Right", "Meters R", U_M, comp_delay::METERS),
+            CONTROL("cm_r", "Centimeters Right", "Centimeters R", U_CM, comp_delay::CENTIMETERS),
+            CONTROL("t_r", "Temperature Right", "Temperature R", U_DEG_CEL, comp_delay::TEMPERATURE),
+            CONTROL("time_r", "Time Right", "Time R", U_MSEC, comp_delay::TIME),
             DRY_GAIN_R(0.0f),
             WET_GAIN_R(1.0f),
             DRYWET_R(100.0f),
-            SWITCH("phase_r", "Phase Invert Right", 0.0f),
+            SWITCH("phase_r", "Phase Invert Right", "Phase R", 0.0f),
 
             OUT_GAIN,
 
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-compressor/.github/workflows/build.yml	2025-03-01 12:43:04.688600990 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/.github/workflows/build.yml	2025-08-26 18:15:53.805905462 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-compressor/CHANGELOG	2025-03-01 12:43:04.688600990 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/CHANGELOG	2025-08-26 18:15:53.805905462 +0000
@@ -2,6 +2,15 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.31 ===
+* Added audio pre-mixing controls.
+* Added left/right and mid/side linking in the UI.
+* Updated build scripts and dependencies.
+
+=== 1.0.30 ===
+* Added overlay support for Sidechain and Mix.
+* Updated build scripts and dependencies.
+
 === 1.0.29 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-compressor/dependencies.mk	2025-03-01 12:43:04.688600990 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/dependencies.mk	2025-08-26 18:15:53.809905423 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/include/private/meta/compressor.h 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/include/private/meta/compressor.h
--- 1.2.21-5/modules/lsp-plugins-compressor/include/private/meta/compressor.h	2025-03-01 12:43:04.688600990 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/include/private/meta/compressor.h	2025-08-26 18:15:53.809905423 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-compressor
  * Created on: 3 авг. 2021 г.
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/include/private/plugins/compressor.h 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/include/private/plugins/compressor.h
--- 1.2.21-5/modules/lsp-plugins-compressor/include/private/plugins/compressor.h	2025-03-01 12:43:04.688600990 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/include/private/plugins/compressor.h	2025-08-26 18:15:53.809905423 +0000
@@ -90,70 +90,96 @@ namespace lsp
                     S_ALL       = S_CURVE
                 };
 
+                typedef struct premix_t
+                {
+                    float               fInToSc;                // Input -> Sidechain mix
+                    float               fInToLink;              // Input -> Link mix
+                    float               fLinkToIn;              // Link -> Input mix
+                    float               fLinkToSc;              // Link -> Sidechain mix
+                    float               fScToIn;                // Sidechain -> Input mix
+                    float               fScToLink;              // Sidechain -> Link mix
+
+                    float              *vIn[2];                 // Input buffer
+                    float              *vOut[2];                // Output buffer
+                    float              *vSc[2];                 // Sidechain buffer
+                    float              *vLink[2];               // Link buffer
+
+                    float              *vTmpIn[2];              // Replacement buffer for input
+                    float              *vTmpLink[2];            // Replacement buffer for link
+                    float              *vTmpSc[2];              // Replacement buffer for sidechain
+
+                    plug::IPort        *pInToSc;                // Input -> Sidechain mix
+                    plug::IPort        *pInToLink;              // Input -> Link mix
+                    plug::IPort        *pLinkToIn;              // Link -> Input mix
+                    plug::IPort        *pLinkToSc;              // Link -> Sidechain mix
+                    plug::IPort        *pScToIn;                // Sidechain -> Input mix
+                    plug::IPort        *pScToLink;              // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct channel_t
                 {
-                    dspu::Bypass          sBypass;            // Bypass
-                    dspu::Sidechain       sSC;                // Sidechain module
-                    dspu::Equalizer       sSCEq;              // Sidechain equalizer
-                    dspu::Compressor      sComp;              // Compression module
-                    dspu::Delay           sLaDelay;           // Lookahead delay
-                    dspu::Delay           sInDelay;           // Input compensation delay
-                    dspu::Delay           sOutDelay;          // Output compensation delay
-                    dspu::Delay           sDryDelay;          // Dry delay
-                    dspu::MeterGraph      sGraph[G_TOTAL];    // Input meter graph
-
-                    float                *vIn;                // Input data
-                    float                *vOut;               // Output data
-                    float                *vSc;                // Sidechain data
-                    float                *vEnv;               // Envelope data
-                    float                *vGain;              // Gain reduction data
-                    bool                  bScListen;          // Listen sidechain
-                    uint32_t              nSync;              // Synchronization flags
-                    uint32_t              nScType;            // Sidechain type
-                    float                 fMakeup;            // Makeup gain
-                    float                 fFeedback;          // Feedback
-                    float                 fDryGain;           // Dry gain
-                    float                 fWetGain;           // Wet gain
-                    float                 fDotIn;             // Dot input gain
-                    float                 fDotOut;            // Dot output gain
-
-                    plug::IPort          *pIn;                // Input port
-                    plug::IPort          *pOut;               // Output port
-                    plug::IPort          *pSC;                // Sidechain port
-                    plug::IPort          *pShmIn;             // Shared memory link input port
-
-                    plug::IPort          *pGraph[G_TOTAL];    // History graphs
-                    plug::IPort          *pMeter[M_TOTAL];    // Meters
-
-                    plug::IPort          *pScType;            // Sidechain location
-                    plug::IPort          *pScMode;            // Sidechain mode
-                    plug::IPort          *pScLookahead;       // Sidechain lookahead
-                    plug::IPort          *pScListen;          // Sidechain listen
-                    plug::IPort          *pScSource;          // Sidechain source
-                    plug::IPort          *pScReactivity;      // Sidechain reactivity
-                    plug::IPort          *pScPreamp;          // Sidechain pre-amplification
-                    plug::IPort          *pScHpfMode;         // Sidechain high-pass filter mode
-                    plug::IPort          *pScHpfFreq;         // Sidechain high-pass filter frequency
-                    plug::IPort          *pScLpfMode;         // Sidechain low-pass filter mode
-                    plug::IPort          *pScLpfFreq;         // Sidechain low-pass filter frequency
-
-                    plug::IPort          *pMode;              // Mode
-                    plug::IPort          *pAttackLvl;         // Attack level
-                    plug::IPort          *pReleaseLvl;        // Release level
-                    plug::IPort          *pAttackTime;        // Attack time
-                    plug::IPort          *pReleaseTime;       // Release time
-                    plug::IPort          *pHoldTime;          // Hold time
-                    plug::IPort          *pRatio;             // Ratio
-                    plug::IPort          *pKnee;              // Knee
-                    plug::IPort          *pBThresh;           // Boost threshold
-                    plug::IPort          *pBoost;             // Boost signal amount
-                    plug::IPort          *pMakeup;            // Makeup
-
-                    plug::IPort          *pDryGain;           // Dry gain
-                    plug::IPort          *pWetGain;           // Wet gain
-                    plug::IPort          *pDryWet;            // Dry/Wet balance
-                    plug::IPort          *pCurve;             // Curve graph
-                    plug::IPort          *pReleaseOut;        // Output release level
+                    dspu::Bypass        sBypass;                // Bypass
+                    dspu::Sidechain     sSC;                    // Sidechain module
+                    dspu::Equalizer     sSCEq;                  // Sidechain equalizer
+                    dspu::Compressor    sComp;                  // Compression module
+                    dspu::Delay         sLaDelay;               // Lookahead delay
+                    dspu::Delay         sInDelay;               // Input compensation delay
+                    dspu::Delay         sOutDelay;              // Output compensation delay
+                    dspu::Delay         sDryDelay;              // Dry delay
+                    dspu::MeterGraph    sGraph[G_TOTAL];        // Input meter graph
+
+                    float              *vIn;                    // Input data
+                    float              *vOut;                   // Output data
+                    float              *vSc;                    // Sidechain data
+                    float              *vEnv;                   // Envelope data
+                    float              *vGain;                  // Gain reduction data
+                    bool                bScListen;              // Listen sidechain
+                    uint32_t            nSync;                  // Synchronization flags
+                    uint32_t            nScType;                // Sidechain type
+                    float               fMakeup;                // Makeup gain
+                    float               fFeedback;              // Feedback
+                    float               fDryGain;               // Dry gain
+                    float               fWetGain;               // Wet gain
+                    float               fDotIn;                 // Dot input gain
+                    float               fDotOut;                // Dot output gain
+
+                    plug::IPort        *pIn;                    // Input port
+                    plug::IPort        *pOut;                   // Output port
+                    plug::IPort        *pSC;                    // Sidechain port
+                    plug::IPort        *pShmIn;                 // Shared memory link input port
+
+                    plug::IPort        *pGraph[G_TOTAL];        // History graphs
+                    plug::IPort        *pMeter[M_TOTAL];        // Meters
+
+                    plug::IPort        *pScType;                // Sidechain location
+                    plug::IPort        *pScMode;                // Sidechain mode
+                    plug::IPort        *pScLookahead;           // Sidechain lookahead
+                    plug::IPort        *pScListen;              // Sidechain listen
+                    plug::IPort        *pScSource;              // Sidechain source
+                    plug::IPort        *pScReactivity;          // Sidechain reactivity
+                    plug::IPort        *pScPreamp;              // Sidechain pre-amplification
+                    plug::IPort        *pScHpfMode;             // Sidechain high-pass filter mode
+                    plug::IPort        *pScHpfFreq;             // Sidechain high-pass filter frequency
+                    plug::IPort        *pScLpfMode;             // Sidechain low-pass filter mode
+                    plug::IPort        *pScLpfFreq;             // Sidechain low-pass filter frequency
+
+                    plug::IPort        *pMode;                  // Mode
+                    plug::IPort        *pAttackLvl;             // Attack level
+                    plug::IPort        *pReleaseLvl;            // Release level
+                    plug::IPort        *pAttackTime;            // Attack time
+                    plug::IPort        *pReleaseTime;           // Release time
+                    plug::IPort        *pHoldTime;              // Hold time
+                    plug::IPort        *pRatio;                 // Ratio
+                    plug::IPort        *pKnee;                  // Knee
+                    plug::IPort        *pBThresh;               // Boost threshold
+                    plug::IPort        *pBoost;                 // Boost signal amount
+                    plug::IPort        *pMakeup;                // Makeup
+
+                    plug::IPort        *pDryGain;               // Dry gain
+                    plug::IPort        *pWetGain;               // Wet gain
+                    plug::IPort        *pDryWet;                // Dry/Wet balance
+                    plug::IPort        *pCurve;                 // Curve graph
+                    plug::IPort        *pReleaseOut;            // Output release level
                 } channel_t;
 
             protected:
@@ -171,6 +197,8 @@ namespace lsp
                 bool            bUISync;
                 core::IDBuffer *pIDisplay;      // Inline display buffer
 
+                premix_t        sPremix;        // Pre-mix settings
+
                 plug::IPort    *pBypass;        // Bypass port
                 plug::IPort    *pInGain;        // Input gain
                 plug::IPort    *pOutGain;       // Output gain
@@ -186,6 +214,8 @@ namespace lsp
                 float           process_feedback(channel_t *c, size_t i, size_t channels);
                 void            process_non_feedback(channel_t *c, float **in, size_t samples);
                 void            do_destroy();
+                void            update_premix();
+                void            premix_channel(uint32_t channel, float * & in, float * & out, float * & sc, float * & link, size_t count);
                 uint32_t        decode_sidechain_type(uint32_t sc) const;
                 inline float   *select_buffer(const channel_t & c, float *in, float *sc, float *shm);
 
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-compressor/make/tools.mk	2025-03-01 12:43:04.692600967 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/make/tools.mk	2025-08-26 18:15:53.809905423 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/modules.mk
--- 1.2.21-5/modules/lsp-plugins-compressor/modules.mk	2025-03-01 12:43:04.692600967 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/modules.mk	2025-08-26 18:15:53.809905423 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/project.mk
--- 1.2.21-5/modules/lsp-plugins-compressor/project.mk	2025-03-01 12:43:04.692600967 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/project.mk	2025-08-26 18:15:53.809905423 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Compressor Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.29
+ARTIFACT_VERSION            = 1.0.31
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-compressor/res/doc/screenshots/compressor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/doc/screenshots/compressor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-compressor/res/doc/screenshots/compressor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/doc/screenshots/compressor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-compressor/res/doc/screenshots/compressor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/doc/screenshots/compressor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-compressor/res/doc/screenshots/compressor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/doc/screenshots/compressor_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-compressor/res/doc/screenshots/sc_compressor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/doc/screenshots/sc_compressor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-compressor/res/doc/screenshots/sc_compressor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/doc/screenshots/sc_compressor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-compressor/res/doc/screenshots/sc_compressor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/doc/screenshots/sc_compressor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-compressor/res/doc/screenshots/sc_compressor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/doc/screenshots/sc_compressor_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/lr.xml
--- 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/lr.xml	2025-03-01 12:43:04.704600894 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/lr.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,493 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv_l"/>
-						<mesh id="icg_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilv_r"/>
-						<mesh id="ocg_l" width="2" color="left" visibility=":olv_l"/>
-						<mesh id="ocg_r" width="2" color="right" visibility=":olv_r"/>
-						<mesh id="scg_l" width="2" color="sidechain_1" visibility=":slv_l"/>
-						<mesh id="scg_r" width="2" color="sidechain_2" visibility=":slv_r"/>
-						<mesh id="evg_l" width="2" color="envelope_1" visibility=":elv_l"/>
-						<mesh id="evg_r" width="2" color="envelope_2" visibility=":elv_r"/>
-						<mesh id="grg_l" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_l"/>
-						<mesh id="grg_r" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_r"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:attributes ox="1" oy="0">
-							<marker id="rl_l" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="rl_r" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="al_l" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="al_r" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-						</ui:attributes>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_l" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_r" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_l" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_r" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_l" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_r" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_l" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_r" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.compression">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="ccg_l" width="3" color="left" smooth="true"/>
-					<mesh id="ccg_r" width="3" color="right" smooth="true"/>
-					<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left"/>
-					<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right"/>
-
-					<!-- Markers -->
-					<marker id="al_l" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="al_r" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="rl_l" color="release_1"/>
-					<marker id="rl_r" color="release_2"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="ilv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="olv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left_in"/>
-					<ledchannel id="ilm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left"/>
-					<ledchannel id="olm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="scr_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="sla_l" scolor="left"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sct_l" pad.t="4"/>
-								<combo id="scm_l"/>
-								<combo id="scs_l"/>
-								<button id="scl_l" height="22" text="labels.listen" ui:inject="Button_left"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_l" pad.h="6" bright="(:shpm_l igt 0) ? 1 : 0.75" bg.bright="(:shpm_l igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_l" pad.h="6" bright="(:slpm_l igt 0) ? 1 : 0.75" bg.bright="(:slpm_l igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf_l" size="20" scolor="(:shpm_l igt 0) ? 'left' : 'left_inactive'" bg.bright="(:shpm_l igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_l" size="20" scolor="(:slpm_l igt 0) ? 'left' : 'left_inactive'" bg.bright="(:slpm_l igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp_l" sline="true" width.min="48"/>
-					<value id="scr_l" sline="true"/>
-					<value id="sla_l" sline="true"/>
-					<value id="shpf_l" sline="true" bright="(:shpm_l igt 0) ? 1 : 0.75" bg.bright="(:shpm_l igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf_l" sline="true" bright="(:slpm_l igt 0) ? 1 : 0.75" bg.bright="(:slpm_l igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="2"><knob id="scp_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="scr_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="sla_r" scolor="right"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sct_r" pad.t="4"/>
-								<combo id="scm_r"/>
-								<combo id="scs_r"/>
-								<button id="scl_r" height="22" text="labels.listen" ui:inject="Button_right"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_r" pad.h="6" bright="(:shpm_r igt 0) ? 1 : 0.75" bg.bright="(:shpm_r igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_r" pad.h="6" bright="(:slpm_r igt 0) ? 1 : 0.75" bg.bright="(:slpm_r igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 8 -->
-					<knob id="shpf_r" size="20" scolor="(:shpm_r igt 0) ? 'right' : 'right_inactive'" bg.bright="(:shpm_r igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_r" size="20" scolor="(:slpm_r igt 0) ? 'right' : 'right_inactive'" bg.bright="(:slpm_r igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 9 -->
-					<ui:with sline="true">
-						<value id="scp_r"/>
-						<value id="scr_r"/>
-						<value id="sla_r"/>
-						<value id="shpf_r" bright="(:shpm_r igt 0) ? 1 : 0.75" bg.bright="(:shpm_r igt 0) ? 1 : :const_bg_darken"/>
-						<value id="slpf_r" bright="(:slpm_r igt 0) ? 1 : 0.75" bg.bright="(:slpm_r igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.compressor" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="9" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.ratio" width.min="41" vreduce="true"/>
-						<label text="labels.knee" vreduce="true"/>
-						<label text="labels.makeup" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3" height.min="111">
-						<vbox>
-							<combo id="cm_l" pad.h="6" pad.v="4"/>
-							<label text="labels.boost" bright="(:cm_l ieq 0) ? 0.75 : 1"/>
-							<knob id="bth_l" scolor="(:cm_l ieq 0) ? 'left_inactive' : 'left'" visibility=":cm_l ine 2"/>
-							<value id="bth_l" detailed="false" bright="(:cm_l ieq 0) ? 0.75 : 1" visibility=":cm_l ine 2"/>
-							<knob id="bsa_l" scolor="(:cm_l ieq 0) ? 'left_inactive' : 'left'" visibility=":cm_l ieq 2"/>
-							<value id="bsa_l" detailed="false" bright="(:cm_l ieq 0) ? 0.75 : 1" visibility=":cm_l ieq 2"/>
-						</vbox>
-					</cell>
-					<cell rows="2"><knob id="cr_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="kn_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="mk_l" scolor="left"/></cell>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<cell rows="2"><knob id="hold_l" pad.h="6" scolor="left"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 4 -->
-					<knob id="al_l" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at_l" scolor="left" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl_l" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt_l" scolor="left" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_l" size="20" pad.h="6" pad.v="4" scolor="dry"/>
-					<knob id="cwt_l" size="20" pad.h="6" pad.v="4" scolor="wet"/>
-					<knob id="cdw_l" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
-
-					<!-- row 5 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="cr_l" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32">
-						<value id="kn_l"/>
-						<value id="mk_l"/>
-						<value id="al_l"/>
-						<value id="at_l"/>
-						<value id="rrl_l"/>
-						<value id="rt_l"/>
-						<value id="hold_l"/>
-						<value id="cdr_l"/>
-						<value id="cwt_l"/>
-						<value id="cdw_l"/>
-					</ui:with>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="3" height.min="111">
-						<vbox>
-							<combo id="cm_r" pad.h="6" pad.v="4"/>
-							<label text="labels.boost" bright="(:cm_r ieq 0) ? 0.75 : 1"/>
-							<knob id="bth_r" scolor="(:cm_r ieq 0) ? 'right_inactive' : 'right'" visibility=":cm_r ine 2"/>
-							<value id="bth_r" detailed="false" bright="(:cm_r ieq 0) ? 0.75 : 1" visibility=":cm_r ine 2"/>
-							<knob id="bsa_r" scolor="(:cm_r ieq 0) ? 'right_inactive' : 'right'" visibility=":cm_r ieq 2"/>
-							<value id="bsa_r" detailed="false" bright="(:cm_r ieq 0) ? 0.75 : 1" visibility=":cm_r ieq 2"/>
-						</vbox>
-					</cell>
-					<cell rows="2"><knob id="cr_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="kn_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="mk_r" scolor="right"/></cell>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<cell rows="2"><knob id="hold_r" pad.h="6" scolor="right"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 8 -->
-					<knob id="al_r" scolor="attack_2" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at_r" scolor="right" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl_r" scolor="release_2" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt_r" scolor="right" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_r" size="20" pad.h="6" pad.v="4" scolor="dry"/>
-					<knob id="cwt_r" size="20" pad.h="6" pad.v="4" scolor="wet"/>
-					<knob id="cdw_r" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
-
-					<!-- row 9 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="cr_r" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32">
-						<value id="kn_r"/>
-						<value id="mk_r"/>
-						<value id="al_r"/>
-						<value id="at_r"/>
-						<value id="rrl_r"/>
-						<value id="rt_r"/>
-						<value id="hold_r"/>
-						<value id="cdr_r"/>
-						<value id="cwt_r"/>
-						<value id="cdw_r"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/mono.xml
--- 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/mono.xml	2025-03-01 12:43:04.704600894 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/mono.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,363 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv"/>
-						<mesh id="ocg" width="2" color="left" visibility=":olv"/>
-						<mesh id="scg" width="2" color="sidechain_1" visibility=":slv"/>
-						<mesh id="evg" width="2" color="envelope_1" visibility=":elv"/>
-						<mesh id="grg" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:attributes ox="1" oy="0">
-							<marker id="rl" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="al" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-						</ui:attributes>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" vexpand="true">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-					<button id="slv" height="10" width="22" ui:inject="Button_orange" led="true"/>
-					<button id="elv" height="10" width="22" ui:inject="Button_violet" led="true"/>
-					<button id="grv" height="10" width="22" ui:inject="Button_blue" led="true"/>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.compression">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="ccg" width="3" color="graph_mesh" smooth="true"/>
-					<dot x.id="elm" y.id="clm" color="graph_mesh" bcolor="graph_mesh"/>
-
-					<!-- Markers -->
-					<marker id="al" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="rl" color="release_1"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv" height="10" width="22" ui:inject="Button_mono" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv" height="10" width="22" ui:inject="Button_mono" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
-					<cell rows="3">
-						<grid rows="3" cols="1">
-							<vbox fill="false">
-								<ui:with pad.h="6" hfill="true">
-									<combo id="sct" pad.b="4"/>
-									<combo id="scm"/>
-								</ui:with>
-							</vbox>
-							<hsep fill="true" pad.v="2" reduce="true" bg.color="bg"/>
-							<button id="scl" height="22" pad.h="6" hfill="true" text="labels.listen" ui:inject="Button_cyan"/>
-						</grid>
-					</cell>
-					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp" sline="true" width.min="48"/>
-					<value id="scr" sline="true"/>
-					<value id="sla" sline="true"/>
-					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.compressor" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="5" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.ratio" width.min="41" vreduce="true"/>
-						<label text="labels.knee" vreduce="true"/>
-						<label text="labels.makeup" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3" height.min="111">
-						<vbox>
-							<combo id="cm" pad.h="6" pad.v="4"/>
-							<label text="labels.boost" bright="(:cm ieq 0) ? 0.75 : 1"/>
-							<knob id="bth" scolor="(:cm ieq 0) ? 'kscale_inactive' : 'kscale'" visibility=":cm ine 2"/>
-							<value id="bth" detailed="false" bright="(:cm ieq 0) ? 0.75 : 1" visibility=":cm ine 2"/>
-							<knob id="bsa" scolor="(:cm ieq 0) ? 'kscale_inactive' : 'kscale'" visibility=":cm ieq 2"/>
-							<value id="bsa" detailed="false" bright="(:cm ieq 0) ? 0.75 : 1" visibility=":cm ieq 2"/>
-						</vbox>
-					</cell>
-					<cell rows="2"><knob id="cr" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="kn" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="mk" scolor="kscale"/></cell>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<cell rows="2"><knob id="hold" size="20" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 4 -->
-					<knob id="al" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr" size="20" pad.h="6" pad.v="4" scolor="dry"/>
-					<knob id="cwt" size="20" pad.h="6" pad.v="4" scolor="wet"/>
-					<knob id="cdw" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
-
-					<!-- row 5 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="cr" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32">
-						<value id="kn"/>
-						<value id="mk"/>
-						<value id="al"/>
-						<value id="at"/>
-						<value id="rrl"/>
-						<value id="rt"/>
-						<value id="hold"/>
-						<value id="cdr"/>
-						<value id="cwt"/>
-						<value id="cdw"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/ms.xml
--- 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/ms.xml	2025-03-01 12:43:04.704600894 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/ms.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,495 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg_m" width="0" color="mid_in" fcolor="mid_in" fcolor.a="0.8" fill="true" visibility=":ilv_m"/>
-						<mesh id="icg_s" width="0" color="side_in" fcolor="side_in" fcolor.a="0.8" fill="true" visibility=":ilv_s"/>
-						<mesh id="ocg_m" width="2" color="mid" visibility=":olv_m"/>
-						<mesh id="ocg_s" width="2" color="side" visibility=":olv_s"/>
-						<mesh id="scg_m" width="2" color="sidechain_1" visibility=":slv_m"/>
-						<mesh id="scg_s" width="2" color="sidechain_2" visibility=":slv_s"/>
-						<mesh id="evg_m" width="2" color="envelope_1" visibility=":elv_m"/>
-						<mesh id="evg_s" width="2" color="envelope_2" visibility=":elv_s"/>
-						<mesh id="grg_m" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_m"/>
-						<mesh id="grg_s" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_s"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:attributes ox="1" oy="0">
-							<marker id="rl_m" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="rl_s" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="al_m" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="al_s" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-						</ui:attributes>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<button id="msl" height="22" width="48" text="labels.ms_listen" pad.v="4" ui:inject="Button_yellow" pad.h="2"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_m" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_s" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_m" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_s" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_m" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_s" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_m" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_s" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_m" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_s" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_m" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_s" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.compression">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="ccg_m" width="3" color="mid" smooth="true"/>
-					<mesh id="ccg_s" width="3" color="side" smooth="true"/>
-					<dot x.id="elm_m" y.id="clm_m" color="mid" bcolor="mid"/>
-					<dot x.id="elm_s" y.id="clm_s" color="side" bcolor="side"/>
-
-					<!-- Markers -->
-					<marker id="al_m" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="al_s" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="rl_m" color="release_1"/>
-					<marker id="rl_s" color="release_2"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_m" size="10" ui:inject="Button_mid" led="true"/>
-						<button id="ilv_s" size="10" ui:inject="Button_side" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_m" size="10" ui:inject="Button_mid" led="true"/>
-						<button id="olv_s" size="10" ui:inject="Button_side" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm_m" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid_in"/>
-					<ledchannel id="ilm_s" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="side_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm_m" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid"/>
-					<ledchannel id="olm_s" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="side"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="scr_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="sla_m" scolor="mid"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sct_m" pad.t="4"/>
-								<combo id="scm_m"/>
-								<combo id="scs_m"/>
-								<button id="scl_m" height="22" text="labels.listen" ui:inject="Button_mid"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_m" pad.h="6" bright="(:shpm_m igt 0) ? 1 : 0.75" bg.bright="(:shpm_m igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_m" pad.h="6" bright="(:slpm_m igt 0) ? 1 : 0.75" bg.bright="(:slpm_m igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf_m" size="20" scolor="(:shpm_m igt 0) ? 'mid' : 'mid_inactive'" bg.bright="(:shpm_m igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_m" size="20" scolor="(:slpm_m igt 0) ? 'mid' : 'mid_inactive'" bg.bright="(:slpm_m igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp_m" sline="true" width.min="48"/>
-					<value id="scr_m" sline="true"/>
-					<value id="sla_m" sline="true"/>
-					<value id="shpf_m" sline="true" bright="(:shpm_m igt 0) ? 1 : 0.75" bg.bright="(:shpm_m igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf_m" sline="true" bright="(:slpm_m igt 0) ? 1 : 0.75" bg.bright="(:slpm_m igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="2"><knob id="scp_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="scr_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="sla_s" scolor="side"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sct_s" pad.t="4"/>
-								<combo id="scm_s"/>
-								<combo id="scs_s"/>
-								<button id="scl_s" height="22" text="labels.listen" ui:inject="Button_side"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_s" pad.h="6" bright="(:shpm_s igt 0) ? 1 : 0.75" bg.bright="(:shpm_s igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_s" pad.h="6" bright="(:slpm_s igt 0) ? 1 : 0.75" bg.bright="(:slpm_s igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 8 -->
-					<knob id="shpf_s" size="20" scolor="(:shpm_s igt 0) ? 'side' : 'side_inactive'" bg.bright="(:shpm_s igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_s" size="20" scolor="(:slpm_s igt 0) ? 'side' : 'side_inactive'" bg.bright="(:slpm_s igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 9 -->
-					<ui:with sline="true">
-						<value id="scp_s"/>
-						<value id="scr_s"/>
-						<value id="sla_s"/>
-						<value id="shpf_s" bright="(:shpm_s igt 0) ? 1 : 0.75" bg.bright="(:shpm_s igt 0) ? 1 : :const_bg_darken"/>
-						<value id="slpf_s" bright="(:slpm_s igt 0) ? 1 : 0.75" bg.bright="(:slpm_s igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.compressor" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="9" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.ratio" width.min="41" vreduce="true"/>
-						<label text="labels.knee" vreduce="true"/>
-						<label text="labels.makeup" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3" height.min="111">
-						<vbox>
-							<combo id="cm_m" pad.h="6" pad.v="4"/>
-							<label text="labels.boost" bright="(:cm_m ieq 0) ? 0.75 : 1"/>
-							<knob id="bth_m" scolor="(:cm_m ieq 0) ? 'cycle_inactive' : 'mid'" visibility=":cm_m ine 2"/>
-							<value id="bth_m" detailed="false" bright="(:cm_m ieq 0) ? 0.75 : 1" visibility=":cm_m ine 2"/>
-							<knob id="bsa_m" scolor="(:cm_m ieq 0) ? 'cycle_inactive' : 'mid'" visibility=":cm_m ieq 2"/>
-							<value id="bsa_m" detailed="false" bright="(:cm_m ieq 0) ? 0.75 : 1" visibility=":cm_m ieq 2"/>
-						</vbox>
-					</cell>
-					<cell rows="2"><knob id="cr_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="kn_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="mk_m" scolor="mid"/></cell>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<cell rows="2"><knob id="hold_m" scolor="mid" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 4 -->
-					<knob id="al_m" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at_m" scolor="mid" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl_m" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt_m" scolor="mid" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_m" size="20" pad.h="6" pad.v="4" scolor="dry"/>
-					<knob id="cwt_m" size="20" pad.h="6" pad.v="4" scolor="wet"/>
-					<knob id="cdw_m" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
-
-					<!-- row 5 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="cr_m" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32">
-						<value id="kn_m"/>
-						<value id="mk_m"/>
-						<value id="al_m"/>
-						<value id="at_m"/>
-						<value id="rrl_m"/>
-						<value id="rt_m"/>
-						<value id="hold_m"/>
-						<value id="cdr_m"/>
-						<value id="cwt_m"/>
-						<value id="cdw_m"/>
-					</ui:with>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="3" height.min="111">
-						<vbox>
-							<combo id="cm_s" pad.h="6" pad.v="4"/>
-							<label text="labels.boost" bright="(:cm_s ieq 0) ? 0.75 : 1"/>
-							<knob id="bth_s" scolor="(:cm_s ieq 0) ? 'cycle_inactive' : 'side'" visibility=":cm_s ine 2"/>
-							<value id="bth_s" detailed="false" bright="(:cm_s ieq 0) ? 0.75 : 1" visibility=":cm_s ine 2"/>
-							<knob id="bsa_s" scolor="(:cm_s ieq 0) ? 'cycle_inactive' : 'side'" visibility=":cm_s ieq 2"/>
-							<value id="bsa_s" detailed="false" bright="(:cm_s ieq 0) ? 0.75 : 1" visibility=":cm_s ieq 2"/>
-						</vbox>
-					</cell>
-					<cell rows="2"><knob id="cr_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="kn_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="mk_s" scolor="side"/></cell>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<cell rows="2"><knob id="hold_s" scolor="side" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 8 -->
-					<knob id="al_s" scolor="attack_2" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at_s" scolor="side" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl_s" scolor="release_2" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt_s" scolor="side" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_s" size="20" pad.h="6" pad.v="4" scolor="dry"/>
-					<knob id="cwt_s" size="20" pad.h="6" pad.v="4" scolor="wet"/>
-					<knob id="cdw_s" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
-
-					<!-- row 9 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="cr_s" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32">
-						<value id="kn_s"/>
-						<value id="mk_s"/>
-						<value id="al_s"/>
-						<value id="at_s"/>
-						<value id="rrl_s"/>
-						<value id="rt_s"/>
-						<value id="hold_s"/>
-						<value id="cdr_s"/>
-						<value id="cwt_s"/>
-						<value id="cdw_s"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/stereo.xml	2025-03-01 12:43:04.704600894 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single/stereo.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,389 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv_l"/>
-						<mesh id="icg_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilv_r"/>
-						<mesh id="ocg_l" width="2" color="left" visibility=":olv_l"/>
-						<mesh id="ocg_r" width="2" color="right" visibility=":olv_r"/>
-						<mesh id="scg_l" width="2" color="sidechain_1" visibility=":slv_l"/>
-						<mesh id="scg_r" width="2" color="sidechain_2" visibility=":slv_r"/>
-						<mesh id="evg_l" width="2" color="envelope_1" visibility=":elv_l"/>
-						<mesh id="evg_r" width="2" color="envelope_2" visibility=":elv_r"/>
-						<mesh id="grg_l" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_l"/>
-						<mesh id="grg_r" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_r"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:attributes ox="1" oy="0">
-							<marker id="rl" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="al" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-						</ui:attributes>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<button id="ssplit" text="labels.stereo_split" size="22" pad.v="4" ui:inject="Button_blue" pad.h="2"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_l" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_r" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_l" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_r" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_l" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_r" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_l" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_r" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.compression">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="ccg" width="3" color="graph_mesh" smooth="true"/>
-					<dot x.id="elm_l" y.id="clm_l" color="graph_mesh" bcolor="graph_mesh" visibility="!:ssplit"/>
-					<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left" visibility=":ssplit"/>
-					<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right" visibility=":ssplit"/>
-
-					<!-- Markers -->
-					<marker id="al" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="rl" color="release_1"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="ilv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="olv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left_in"/>
-					<ledchannel id="ilm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left"/>
-					<ledchannel id="olm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sct" pad.t="4"/>
-								<combo id="scm"/>
-								<combo id="scs" visibility="!:ssplit"/>
-								<combo id="sscs" visibility=":ssplit"/>
-								<button id="scl" height="22" text="labels.listen" ui:inject="Button_cyan"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp" sline="true" width.min="48"/>
-					<value id="scr" sline="true"/>
-					<value id="sla" sline="true"/>
-					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.compressor" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="5" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.ratio" width.min="41" vreduce="true"/>
-						<label text="labels.knee" vreduce="true"/>
-						<label text="labels.makeup" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3" height.min="111">
-						<vbox>
-							<combo id="cm" pad.h="6" pad.v="4"/>
-							<label text="labels.boost" bright="(:cm ieq 0) ? 0.75 : 1"/>
-							<knob id="bth" scolor="(:cm ieq 0) ? 'kscale_inactive' : 'kscale'" visibility=":cm ine 2"/>
-							<value id="bth" detailed="false" bright="(:cm ieq 0) ? 0.75 : 1" visibility=":cm ine 2"/>
-							<knob id="bsa" scolor="(:cm ieq 0) ? 'kscale_inactive' : 'kscale'" visibility=":cm ieq 2"/>
-							<value id="bsa" detailed="false" bright="(:cm ieq 0) ? 0.75 : 1" visibility=":cm ieq 2"/>
-						</vbox>
-					</cell>
-					<cell rows="2"><knob id="cr" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="kn" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="mk" scolor="kscale"/></cell>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<label text="labels.thresh_old"/>
-					<label text="labels.time"/>
-					<cell rows="2"><knob id="hold" size="20" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 4 -->
-					<knob id="al" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr" size="20" pad.h="6" pad.v="4" scolor="dry"/>
-					<knob id="cwt" size="20" pad.h="6" pad.v="4" scolor="wet"/>
-					<knob id="cdw" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
-
-					<!-- row 5 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="cr" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32">
-						<value id="kn"/>
-						<value id="mk"/>
-						<value id="al"/>
-						<value id="at"/>
-						<value id="rrl"/>
-						<value id="rt"/>
-						<value id="hold"/>
-						<value id="cdr"/>
-						<value id="cwt"/>
-						<value id="cdw"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single.xml 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single.xml
--- 1.2.21-5/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single.xml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/res/main/ui/dynamics/compressor/single.xml	2025-08-26 18:15:53.825905268 +0000
@@ -0,0 +1,891 @@
+<plugin resizable="true">
+	<!-- Evaluate what kind of plugin we have -->
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	<ui:eval id="mono" value="(ex :cm) and (ex :icg)"/>
+	<ui:eval id="stereo" value="(ex :cm) and !(ex :icg)"/>
+	<ui:eval id="left_right" value="(ex :cm_l)"/>
+	<ui:eval id="mid_side" value="(ex :cm_m)"/>
+
+	<ui:eval id="xa" value="(:mid_side) ? 'm' : 'l'"/>
+	<ui:eval id="xb" value="(:mid_side) ? 's' : 'r'"/>
+
+	<ui:eval id="clr_a" value="(:mid_side) ? 'mid' : 'left'"/>
+	<ui:eval id="clr_b" value="(:mid_side) ? 'side' : 'right'"/>
+	
+	<!-- Control linking -->
+	<ui:if test=":left_right or :mid_side">
+		<ui:for id="port"
+			list="'sct'; 'scm'; 'sla'; 'scl'; 'scs'; 'scr'; 'scp'; 'shpm'; 'shpf'; 'slpm'; 'slpf';
+				'cm'; 'al'; 'at'; 'rrl'; 'rt'; 'hold'; 'cr'; 'kn'; 'bth'; 'bsa'; 'mk'; 'cdr'; 'cwt'; 'cdw'">
+			<ctl:link
+				id.1="${port}_${xa}" value.1=":${port}_${xb}"
+				id.2="${port}_${xb}" value.2=":${port}_${xa}"
+				activity=":clink" />
+		</ui:for>
+	</ui:if>
+
+	<vbox>
+		<!-- Top part -->
+		<grid rows="1" cols="4" hspacing="4" expand="true">
+			<vbox expand="true">
+				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
+					<graph width.min="496" height.min="222" expand="true" fill="true">
+						<origin hpos="1" vpos="-1" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:for id="t" first="0" last="4" step="1">
+							<ui:attributes ox="0" oy="1">
+								<marker v="${t}.25" color="graph_alt_2"/>
+								<marker v="${t}.5" color="graph_alt_1"/>
+								<marker v="${t}.75" color="graph_alt_2"/>
+							</ui:attributes>
+						</ui:for>
+						<ui:attributes ox="1" oy="0" color="graph_alt_1">
+							<marker v="+12 db"/>
+							<marker v="-12 db"/>
+							<marker v="-36 db"/>
+							<marker v="-60 db"/>
+						</ui:attributes>
+
+						<!-- Yellow grid -->
+						<ui:for id="t" first="1" last="4" step="1">
+							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
+						</ui:for>
+						<ui:attributes ox="1" oy="0" color="graph_sec">
+							<marker v="0 db"/>
+							<marker v="-24 db"/>
+							<marker v="-48 db"/>
+						</ui:attributes>
+
+						<!-- Meshes -->
+						<ui:if test=":mono">
+							<mesh id="icg" width="0" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilv"/>
+							<mesh id="ocg" width="2" color="mono" visibility=":olv"/>
+							<mesh id="scg" width="2" color="sidechain_1" visibility=":slv"/>
+							<mesh id="evg" width="2" color="envelope_1" visibility=":elv"/>
+							<mesh id="grg" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv"/>
+						</ui:if>
+
+						<ui:if test="!(:mono)">
+							<mesh id="icg_${xa}" width="0" color="${clr_a}_in" fcolor="${clr_a}_in" fcolor.a="0.8" fill="true" visibility=":ilv_${xa}"/>
+							<mesh id="icg_${xb}" width="0" color="${clr_b}_in" fcolor="${clr_b}_in" fcolor.a="0.8" fill="true" visibility=":ilv_${xb}"/>
+							<mesh id="ocg_${xa}" width="2" color="${clr_a}" visibility=":olv_${xa}"/>
+							<mesh id="ocg_${xb}" width="2" color="${clr_b}" visibility=":olv_${xb}"/>
+							<mesh id="scg_${xa}" width="2" color="sidechain_1" visibility=":slv_${xa}"/>
+							<mesh id="scg_${xb}" width="2" color="sidechain_2" visibility=":slv_${xb}"/>
+							<mesh id="evg_${xa}" width="2" color="envelope_1" visibility=":elv_${xa}"/>
+							<mesh id="evg_${xb}" width="2" color="envelope_2" visibility=":elv_${xb}"/>
+							<mesh id="grg_${xa}" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_${xa}"/>
+							<mesh id="grg_${xb}" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_${xb}"/>
+						</ui:if>
+
+						<!-- Markers -->
+						<ui:if test=":stereo or :mono">
+
+							<ui:attributes ox="1" oy="0">
+								<marker id="rl" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
+								<marker id="al" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
+							</ui:attributes>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<ui:attributes ox="1" oy="0">
+								<marker id="rl_${xa}" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
+								<marker id="rl_${xb}" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
+								<marker id="al_${xa}" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
+								<marker id="al_${xb}" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
+							</ui:attributes>
+						</ui:if>
+
+						<!-- Boundaries -->
+						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
+						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
+
+						<!-- Axis -->
+						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+
+						<!-- Text -->
+						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+						<ui:for id="t" first="0" last="4" step="1">
+							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
+							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
+						</ui:for>
+						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
+							<text y="12 db" text="+12"/>
+							<text y="0 db" text="0"/>
+							<text y="-12 db" text="-12"/>
+							<text y="-24 db" text="-24"/>
+							<text y="-36 db" text="-36"/>
+							<text y="-48 db" text="-48"/>
+							<text y="-60 db" text="-60"/>
+							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
+						</ui:attributes>
+					</graph>
+				</group>
+				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
+				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
+					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
+					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
+					<ui:if test=":left_right">
+						<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
+					</ui:if>
+					<ui:if test=":mid_side">
+						<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
+					</ui:if>
+					<void hexpand="true"/>
+
+					<ui:if test=":mid_side">
+						<vsep pad.h="2" bg.color="bg" reduce="true"/>
+						<button id="msl" height="22" width="48" text="labels.ms_listen" pad.v="4" ui:inject="Button_yellow" pad.h="2"/>
+					</ui:if>
+
+					<ui:if test=":stereo">
+						<vsep pad.h="2" bg.color="bg" reduce="true"/>
+						<button id="ssplit" text="labels.stereo_split" size="22" pad.v="4" ui:inject="Button_blue" pad.h="2"/>
+					</ui:if>
+
+					<vsep pad.h="2" bg.color="bg" reduce="true"/>
+					<shmlink id="link" pad.l="2"/>
+				</hbox>
+			</vbox>
+
+			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
+				<ui:with bg.color="bg_schema">
+					<ui:with width.min="24">
+						<label text="labels.sc.SC" padding="4"/>
+						<label text="labels.Env_elope" padding="4"/>
+						<label text="labels.gain_" padding="4"/>
+					</ui:with>
+
+					<!-- For Mono version -->
+					<ui:if test=":mono">
+						<button id="slv" height="10" width="22" ui:inject="Button_orange" led="true"/>
+						<button id="elv" height="10" width="22" ui:inject="Button_violet" led="true"/>
+						<button id="grv" height="10" width="22" ui:inject="Button_blue" led="true"/>
+					</ui:if>
+
+					<!-- For Stereo and Left Right Mid Side version -->
+					<ui:if test="!(:mono)">
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="slv_${xa}" size="10" ui:inject="Button_orange" led="true"/>
+							<button id="slv_${xb}" size="10" ui:inject="Button_orange" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="elv_${xa}" size="10" ui:inject="Button_violet" led="true"/>
+							<button id="elv_${xb}" size="10" ui:inject="Button_violet" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="grv_${xa}" size="10" ui:inject="Button_blue" led="true"/>
+							<button id="grv_${xb}" size="10" ui:inject="Button_blue" led="true"/>
+						</grid>
+					</ui:if>
+				</ui:with>
+
+				<!-- For Mono version -->
+				<ui:if test=":mono">
+					<!-- Sidechain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="slm" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+					</ledmeter>
+
+					<!-- Envelope signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="elm" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+					</ledmeter>
+
+					<!-- Gain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="rlm" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+					</ledmeter>
+				</ui:if>
+
+				<!-- For Stereo and Left Right Mid Side version -->
+				<ui:if test="!(:mono)">
+					<!-- Sidechain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="slm_${xa}" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+						<ledchannel id="slm_${xb}" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+					</ledmeter>
+
+					<!-- Envelope signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="elm_${xa}" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+						<ledchannel id="elm_${xb}" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+					</ledmeter>
+
+					<!-- Gain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="rlm_${xa}" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+						<ledchannel id="rlm_${xb}" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+					</ledmeter>
+				</ui:if>
+
+			</grid>
+
+			<vbox expand="true">
+				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.compression">
+					<!-- Curve graph -->
+					<graph width.min="256" height.min="256" expand="true" fill="true">
+						<origin hpos="-1" vpos="-1" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:for id="g" first="-60" last="12" step="24">
+							<marker v="${g} db" color="graph_alt_1"/>
+							<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
+						</ui:for>
+
+						<!-- Yellow grid -->
+						<ui:for id="g" first="-48" last="-24" step="24">
+							<marker v="${g} db" color="graph_sec"/>
+							<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
+						</ui:for>
+
+						<!-- Axes and boundaries -->
+						<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
+						<marker v="24 db" color="graph_alt_1" visibility="false"/>
+						<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
+						<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
+						<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
+
+						<!-- 0 dB markers -->
+						<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
+						<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
+
+						<!-- Meshes -->
+						<ui:if test=":mono">
+							<mesh id="ccg" width="3" color="graph_mesh" smooth="true"/>
+							<dot x.id="elm" y.id="clm" color="graph_mesh" bcolor="graph_mesh"/>
+						</ui:if>
+
+						<ui:if test=":stereo">
+							<mesh id="ccg" width="3" color="graph_mesh" smooth="true"/>
+							<dot x.id="elm_l" y.id="clm_l" color="graph_mesh" bcolor="graph_mesh" visibility="!:ssplit"/>
+							<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left" visibility=":ssplit"/>
+							<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right" visibility=":ssplit"/>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<mesh id="ccg_${xa}" width="3" color="${clr_a}" smooth="true"/>
+							<mesh id="ccg_${xb}" width="3" color="${clr_b}" smooth="true"/>
+							<dot x.id="elm_${xa}" y.id="clm_${xa}" color="${clr_a}" bcolor="${clr_a}"/>
+							<dot x.id="elm_${xb}" y.id="clm_${xb}" color="${clr_b}" bcolor="${clr_b}"/>
+						</ui:if>
+
+						<!-- Markers -->
+						<ui:if test=":mono or :stereo">
+							<marker id="al" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
+							<marker id="rl" color="release_1"/>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<marker id="al_${xa}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
+							<marker id="al_${xb}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
+							<marker id="rl_${xa}" color="release_1"/>
+							<marker id="rl_${xb}" color="release_2"/>
+						</ui:if>
+
+						<!-- Text -->
+						<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
+						<ui:attributes x="0 db" halign="1" valign="-1">
+							<text y="24 db" text="graph.units.db"/>
+							<text y="12 db" text="+12"/>
+							<text y="-12 db" text="-12"/>
+							<text y="-24 db" text="-24"/>
+							<text y="-36 db" text="-36"/>
+							<text y="-48 db" text="-48"/>
+							<text y="-60 db" text="-60"/>
+							<text y="-72 db" text="graph.axis.out" valign="1"/>
+						</ui:attributes>
+						<ui:attributes y="0 db" halign="-1" valign="1">
+							<text x="24 db" text="graph.units.db"/>
+							<text x="12 db" text="+12"/>
+							<text x="-12 db" text="-12"/>
+							<text x="-24 db" text="-24"/>
+							<text x="-36 db" text="-36"/>
+							<text x="-48 db" text="-48"/>
+							<text x="-60 db" text="-60"/>
+							<text x="-72 db" text="graph.axis.in" halign="1"/>
+						</ui:attributes>
+					</graph>
+				</group>
+				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
+				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
+					<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" pad.v="4"/>
+					<button ui:id="sidechain_trigger" id="showsc" text="labels.sidechain" size="22" pad.v="4"/>
+					<void hexpand="true"/>
+					<button ui:id="mix_trigger" id="showmx" text="labels.mix" size="22" pad.v="4"/>
+				</hbox>
+			</vbox>
+
+			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
+				<ui:with bg.color="bg_schema">
+					<label text="labels.chan.in" padding="4" width.min="24"/>
+					<label text="labels.chan.out" padding="4" width.min="24"/>
+
+					<!-- For Mono version -->
+					<ui:if test=":mono">
+						<button id="ilv" height="10" width="22" ui:inject="Button_mono" led="true" fill="false" hspacing="2"/>
+						<button id="olv" height="10" width="22" ui:inject="Button_mono" led="true" fill="false" hspacing="2"/>
+					</ui:if>
+
+					<!-- For Stereo and Left Right Mid Side version -->
+					<ui:if test="!(:mono)">
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="ilv_${xa}" size="10" ui:inject="Button_${clr_a}" led="true"/>
+							<button id="ilv_${xb}" size="10" ui:inject="Button_${clr_b}" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="olv_${xa}" size="10" ui:inject="Button_${clr_a}" led="true"/>
+							<button id="olv_${xb}" size="10" ui:inject="Button_${clr_b}" led="true"/>
+						</grid>
+					</ui:if>
+				</ui:with>
+
+				<!-- For Mono version -->
+				<ui:if test=":mono">
+					<!-- Input signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="ilm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono_in"/>
+					</ledmeter>
+
+					<!-- Output signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="olm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono"/>
+					</ledmeter>
+				</ui:if>
+
+				<!-- For Stereo and Left Right Mid Side version -->
+				<ui:if test="!(:mono)">
+					<!-- Input signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="ilm_${xa}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_a}_in"/>
+						<ledchannel id="ilm_${xb}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_b}_in"/>
+					</ledmeter>
+
+					<!-- Output signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="olm_${xa}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_a}"/>
+						<ledchannel id="olm_${xb}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_b}"/>
+					</ledmeter>
+				</ui:if>
+			</grid>
+		</grid>
+
+		<!-- Separator -->
+		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
+
+		<!-- Bottom part -->
+		<hbox>
+			<group text="groups.plug.compressor" vexpand="false" hexpand="true" ipadding="0">
+
+				<!-- For Stereo and Mono version-->
+				<ui:if test=":mono or :stereo">
+					<grid rows="5" cols="13" spacing="0" bg.color="bg_schema">
+						<!-- row 1 -->
+						<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
+						<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<ui:with pad.h="6" pad.v="4">
+							<label text="labels.ratio" width.min="41" vreduce="true"/>
+							<label text="labels.knee" vreduce="true"/>
+							<label text="labels.makeup" vreduce="true"/>
+						</ui:with>
+						<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
+
+						<!-- row 2 -->
+						<ui:with bg.color="bg" pad.v="2" vreduce="true">
+							<hsep/>
+							<cell cols="3"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<hsep/>
+						</ui:with>
+
+						<!-- row 3 -->
+						<cell rows="3" height.min="111">
+							<vbox>
+								<combo id="cm" pad.h="6" pad.v="4"/>
+								<label text="labels.boost" bright="(:cm ieq 0) ? 0.75 : 1"/>
+								<knob id="bth" scolor="(:cm ieq 0) ? 'cycle_inactive' : 'kscale'" visibility=":cm ine 2"/>
+								<value id="bth" detailed="false" bright="(:cm ieq 0) ? 0.75 : 1" visibility=":cm ine 2"/>
+								<knob id="bsa" scolor="(:cm ieq 0) ? 'cycle_inactive' : 'kscale'" visibility=":cm ieq 2"/>
+								<value id="bsa" detailed="false" bright="(:cm ieq 0) ? 0.75 : 1" visibility=":cm ieq 2"/>
+							</vbox>
+						</cell>
+						<cell rows="2"><knob id="cr" scolor="kscale"/></cell>
+						<cell rows="2"><knob id="kn" scolor="kscale"/></cell>
+						<cell rows="2"><knob id="mk" scolor="kscale"/></cell>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<cell rows="2"><knob id="hold" size="20" pad.h="6"/></cell>
+
+						<!-- row 4 -->
+						<knob id="al" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="at" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rrl" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rt" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
+
+						<!-- row 5 -->
+						<align valign="-1" pad.t="2">
+							<hbox fill="false">
+								<value id="cr" detailed="false"/>
+								<label text=":"/>
+								<label text="1"/>
+							</hbox>
+						</align>
+						<ui:with width.min="32">
+							<value id="kn"/>
+							<value id="mk"/>
+							<value id="al"/>
+							<value id="at"/>
+							<value id="rrl"/>
+							<value id="rt"/>
+							<value id="hold"/>
+						</ui:with>
+					</grid>
+				</ui:if>
+
+				<!-- For Left Right and Mid Side version -->
+				<ui:if test=":left_right or :mid_side">
+					<grid rows="9" cols="13" spacing="0" bg.color="bg_schema">
+						<!-- row 1 -->
+						<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<ui:with pad.h="6" pad.v="4">
+							<label text="labels.ratio" width.min="41" vreduce="true"/>
+							<label text="labels.knee" vreduce="true"/>
+							<label text="labels.makeup" vreduce="true"/>
+						</ui:with>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
+
+						<!-- row 2 -->
+						<ui:with bg.color="bg" pad.v="2" vreduce="true">
+							<hsep/>
+							<cell cols="3"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<hsep/>
+						</ui:with>
+
+						<!-- row 3 -->
+						<cell rows="3" height.min="111">
+							<vbox>
+								<combo id="cm_${xa}" pad.h="6" pad.v="4"/>
+								<label text="labels.boost" bright="(:cm_${xa} ieq 0) ? 0.75 : 1"/>
+								<knob id="bth_${xa}" scolor="(:cm_${xa} ieq 0) ? 'cycle_inactive' : '${clr_a}'" visibility=":cm_${xa} ine 2"/>
+								<value id="bth_${xa}" detailed="false" bright="(:cm_${xa} ieq 0) ? 0.75 : 1" visibility=":cm_${xa} ine 2"/>
+								<knob id="bsa_${xa}" scolor="(:cm_${xa} ieq 0) ? 'cycle_inactive' : '${clr_a}'" visibility=":cm_${xa} ieq 2"/>
+								<value id="bsa_${xa}" detailed="false" bright="(:cm_${xa} ieq 0) ? 0.75 : 1" visibility=":cm_${xa} ieq 2"/>
+							</vbox>
+						</cell>
+						<cell rows="2"><knob id="cr_${xa}" scolor="${clr_a}"/></cell>
+						<cell rows="2"><knob id="kn_${xa}" scolor="${clr_a}"/></cell>
+						<cell rows="2"><knob id="mk_${xa}" scolor="${clr_a}"/></cell>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<cell rows="2"><knob id="hold_${xa}" pad.h="6" scolor="${clr_a}"/></cell>
+
+						<!-- row 4 -->
+						<knob id="al_${xa}" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="at_${xa}" scolor="${clr_a}" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rrl_${xa}" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rt_${xa}" scolor="${clr_a}" size="20" pad.h="6" pad.v="4"/>
+
+						<!-- row 5 -->
+						<align valign="-1" pad.t="2">
+							<hbox fill="false">
+								<value id="cr_${xa}" detailed="false"/>
+								<label text=":"/>
+								<label text="1"/>
+							</hbox>
+						</align>
+						<ui:with width.min="32">
+							<value id="kn_${xa}"/>
+							<value id="mk_${xa}"/>
+							<value id="al_${xa}"/>
+							<value id="at_${xa}"/>
+							<value id="rrl_${xa}"/>
+							<value id="rt_${xa}"/>
+							<value id="hold_${xa}"/>
+						</ui:with>
+
+						<!-- row 6 -->
+						<ui:with bg.color="bg" pad.v="2" vreduce="true">
+							<hsep/>
+							<cell cols="3"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<hsep/>
+						</ui:with>
+
+						<!-- row 7 -->
+						<cell rows="3" height.min="111">
+							<vbox>
+								<combo id="cm_${xb}" pad.h="6" pad.v="4"/>
+								<label text="labels.boost" bright="(:cm_${xb} ieq 0) ? 0.75 : 1"/>
+								<knob id="bth_${xb}" scolor="(:cm_${xb} ieq 0) ? 'cycle_inactive' : '${clr_b}'" visibility=":cm_${xb} ine 2"/>
+								<value id="bth_${xb}" detailed="false" bright="(:cm_r ieq 0) ? 0.75 : 1" visibility=":cm_${xb} ine 2"/>
+								<knob id="bsa_${xb}" scolor="(:cm_${xb} ieq 0) ? 'cycle_inactive' : '${clr_b}'" visibility=":cm_${xb} ieq 2"/>
+								<value id="bsa_${xb}" detailed="false" bright="(:cm_${xb} ieq 0) ? 0.75 : 1" visibility=":cm_${xb} ieq 2"/>
+							</vbox>
+						</cell>
+						<cell rows="2"><knob id="cr_${xb}" scolor="${clr_b}"/></cell>
+						<cell rows="2"><knob id="kn_${xb}" scolor="${clr_b}"/></cell>
+						<cell rows="2"><knob id="mk_${xb}" scolor="${clr_b}"/></cell>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<cell rows="2"><knob id="hold_${xb}" pad.h="6" scolor="${clr_b}"/></cell>
+
+						<!-- row 8 -->
+						<knob id="al_${xb}" scolor="attack_2" size="20" pad.h="6" pad.v="4"/>
+						<knob id="at_${xb}" scolor="${clr_b}" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rrl_${xb}" scolor="release_2" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rt_${xb}" scolor="${clr_b}" size="20" pad.h="6" pad.v="4"/>
+
+						<!-- row 9 -->
+						<align valign="-1" pad.t="2">
+							<hbox fill="false">
+								<value id="cr_${xb}" detailed="false"/>
+								<label text=":"/>
+								<label text="1"/>
+							</hbox>
+						</align>
+						<ui:with width.min="32">
+							<value id="kn_${xb}"/>
+							<value id="mk_${xb}"/>
+							<value id="al_${xb}"/>
+							<value id="at_${xb}"/>
+							<value id="rrl_${xb}"/>
+							<value id="rt_${xb}"/>
+							<value id="hold_${xb}"/>
+						</ui:with>
+					</grid>
+				</ui:if>
+			</group>
+
+			<!-- Separator -->
+			<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+
+			<!-- Signal control -->
+			<group text="groups.signal" vexpand="false" hexpand="true" ipadding="0">
+				<ui:if test=":mono or :stereo">
+					<grid rows="3" cols="2" spacing="0" bg.color="bg_schema" transpose="true">
+						<label text="labels.input" width="40" pad.h="6" pad.v="4"/>
+						<knob id="g_in"/>
+						<value id="g_in" pad.v="4"/>
+
+						<label text="labels.output" width="40" pad.h="6" pad.v="4"/>
+						<knob id="g_out"/>
+						<value id="g_out" pad.v="4"/>
+					</grid>
+				</ui:if>
+
+				<ui:if test=":left_right or :mid_side">
+					<vbox vexpand="true">
+						<ui:with pad="6">
+							<label text="labels.input"/>
+							<knob id="g_in"/>
+							<value id="g_in"/>
+							<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
+							<label text="labels.output"/>
+							<knob id="g_out"/>
+							<value id="g_out"/>
+						</ui:with>
+					</vbox>
+				</ui:if>
+			</group>
+		</hbox>
+
+	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true" height="139">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
+
+	<!-- Sidechain overlay -->
+	<overlay id="showsc" trigger="sidechain_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.sidechain" vexpand="false" ipadding="0">
+			<!-- For Stereo and Mono version-->
+			<ui:if test=":mono or :stereo">
+				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema" height="139">
+					<!-- row 1 -->
+					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true" width.min="56">
+						<label text="labels.sc.preamp" vreduce="true"/>
+						<label text="labels.sc.reactivity" vreduce="true"/>
+						<label text="labels.sc.lookahead" vreduce="true"/>
+					</ui:with>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+
+					<!-- row 2 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 3 -->
+					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
+					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
+					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sct" pad.t="4"/>
+								<combo id="scm"/>
+								<ui:if test=":stereo">
+									<combo id="scs" visibility="!:ssplit"/>
+									<combo id="sscs" visibility=":ssplit"/>
+								</ui:if>
+								<button id="scl" height="22" text="labels.listen" ui:inject="Button_cyan"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 4 -->
+					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 5 -->
+					<value id="scp" sline="true" width.min="48"/>
+					<value id="scr" sline="true"/>
+					<value id="sla" sline="true"/>
+					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+				</grid>
+			</ui:if>
+
+			<!-- For Left Right and Mid Side version -->
+			<ui:if test=":left_right or :mid_side">
+				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
+					<!-- row 1 -->
+					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true" width.min="56">
+						<label text="labels.sc.preamp" vreduce="true"/>
+						<label text="labels.sc.reactivity" vreduce="true"/>
+						<label text="labels.sc.lookahead" vreduce="true"/>
+					</ui:with>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+
+					<!-- row 2 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 3 -->
+					<cell rows="2"><knob id="scp_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="2"><knob id="scr_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="2"><knob id="sla_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sct_${xa}" pad.t="4"/>
+								<combo id="scm_${xa}"/>
+								<combo id="scs_${xa}"/>
+								<button id="scl_${xa}" height="22" text="labels.listen" ui:inject="Button_${clr_a}"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm_${xa}" pad.h="6" bright="(:shpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm_${xa}" pad.h="6" bright="(:slpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 4 -->
+					<knob id="shpf_${xa}" size="20" scolor="(:shpm_${xa} igt 0) ? '${clr_a}' : 'cycle_inactive'" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf_${xa}" size="20" scolor="(:slpm_${xa} igt 0) ? '${clr_a}' : 'cycle_inactive'" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 5 -->
+					<value id="scp_${xa}" sline="true" width.min="48"/>
+					<value id="scr_${xa}" sline="true"/>
+					<value id="sla_${xa}" sline="true"/>
+					<value id="shpf_${xa}" sline="true" bright="(:shpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<value id="slpf_${xa}" sline="true" bright="(:slpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 6 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 7 -->
+					<cell rows="2"><knob id="scp_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="2"><knob id="scr_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="2"><knob id="sla_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sct_${xb}" pad.t="4"/>
+								<combo id="scm_${xb}"/>
+								<combo id="scs_${xb}"/>
+								<button id="scl_${xb}" height="22" text="labels.listen" ui:inject="Button_${clr_b}"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm_${xb}" pad.h="6" bright="(:shpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm_${xb}" pad.h="6" bright="(:slpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 8 -->
+					<knob id="shpf_${xb}" size="20" scolor="(:shpm_${xb} igt 0) ? '${clr_b}' : 'cycle_inactive'" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf_${xb}" size="20" scolor="(:slpm_${xb} igt 0) ? '${clr_b}' : 'cycle_inactive'" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 9 -->
+					<ui:with sline="true">
+						<value id="scp_${xb}"/>
+						<value id="scr_${xb}"/>
+						<value id="sla_${xb}"/>
+						<value id="shpf_${xb}" bright="(:shpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+						<value id="slpf_${xb}" bright="(:slpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					</ui:with>
+				</grid>
+			</ui:if>
+		</group>
+	</overlay>
+
+	<!-- Mix overlay -->
+	<overlay id="showmx" trigger="mix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.mix" vexpand="false" ipadding="0">
+			<!-- For Stereo and Mono version-->
+			<ui:if test=":mono or :stereo">
+				<grid rows="3" cols="4" spacing="0" bg.color="bg_schema" height="139">
+					<!-- Row 1 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry" pad.h="6" width="44" pad.v="4"/>
+						<label text="labels.signal.wet" pad.h="6" width="44" pad.v="4"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6" width="44" pad.v="4"/>
+					</ui:with>
+
+					<!-- Row 2 -->
+					<knob id="cdr" size="20" scolor="dry"/>
+					<knob id="cwt" size="20" scolor="wet"/>
+					<knob id="cdw" size="20" scolor="drywet"/>
+
+					<!-- Row 3 -->
+					<value id="cdr" pad.v="4"/>
+					<value id="cwt" pad.v="4"/>
+					<value id="cdw" pad.v="4"/>
+
+				</grid>
+			</ui:if>
+
+			<!-- For Left Right and Mid Side version -->
+			<ui:if test=":left_right or :mid_side">
+				<grid rows="7" cols="4" spacing="0" bg.color="bg_schema" height.min="254">
+					<!-- row 1 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry"/>
+						<label text="labels.signal.wet"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6"/>
+					</ui:with>
+
+					<!-- row 2 -->
+					<knob id="cdr_${xa}" size="20" pad.h="6" pad.v="4" scolor="dry"/>
+					<knob id="cwt_${xa}" size="20" pad.h="6" pad.v="4" scolor="wet"/>
+					<knob id="cdw_${xa}" size="20" pad.h="6" pad.v="4" scooverlaylor="drywet"/>
+
+					<!-- row 3 -->
+					<ui:with width.min="32">
+						<value id="cdr_${xa}"/>
+						<value id="cwt_${xa}"/>
+						<value id="cdw_${xa}"/>
+					</ui:with>
+
+					<!-- row 4 -->
+					<cell cols="4"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+
+					<!-- row 5 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry"/>
+						<label text="labels.signal.wet"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6"/>
+					</ui:with>
+
+					<!-- row 6 -->
+
+					<knob id="cdr_${xb}" size="20" pad.h="6" pad.v="4" scolor="dry"/>
+					<knob id="cwt_${xb}" size="20" pad.h="6" pad.v="4" scolor="wet"/>
+					<knob id="cdw_${xb}" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
+
+					<!-- row 7 -->
+					<ui:with width.min="32">
+						<value id="cdr_${xb}"/>
+						<value id="cwt_${xb}"/>
+						<value id="cdw_${xb}"/>
+					</ui:with>
+
+				</grid>
+			</ui:if>
+		</group>
+	</overlay>
+</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/src/doc/manuals/plugins/compressor.php 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/src/doc/manuals/plugins/compressor.php
--- 1.2.21-5/modules/lsp-plugins-compressor/src/doc/manuals/plugins/compressor.php	2025-03-01 12:43:04.704600894 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/src/doc/manuals/plugins/compressor.php	2025-08-26 18:15:53.825905268 +0000
@@ -44,8 +44,11 @@ keeping the same settings for the left a
 	<li><b>Clear</b> - clears all graphs.</li>
 	<?php if ($m == 's') { ?>
 		<li><b>Stereo Split</b> - enables independent compression of left and right channels.</li>
+	<?php } else if ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } elseif ($m == 'ms') { ?>
 		<li><b>MS Listen</b> - passes mid-side signal to the output of compressor instead of stereo signal.</li>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } ?>
 	<li><b>Gain<?= $sm ?></b> - enables drawing of gain amplification line and corresponding amplification meter.</li>
 	<li><b>SC<?= $sm ?></b> - enables drawing of sidechain input graph and corresponding level meter.</li>
@@ -53,8 +56,56 @@ keeping the same settings for the left a
 	<li><b>In<?= $sm ?></b> - enables drawing of compressor's input signal graph and corresponding level meter.</li>
 	<li><b>Out<?= $sm ?></b> - enables drawing of compressor's output signal graph and corresponding level meter.</li>
 	<li><b>Link</b> - the name of the shared memory link to pass sidechain signal.</li>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
+	<li><b>Sidechain</b> - shows the sidechain control overlay.</li>
+	<li><b>Mix</b> - shows the Dry/Wet control overlay.</li>
 </ul>
-<p><b>'Sidechain' section:</b></p>
+
+<p><b>'Compressor' section:</b></p>
+<ul>
+	<li><b>Mode</b> - compression mode</li>
+	<ul>
+		<li><b>Downward (Down)</b> - the downward compressor.</li>
+		<li><b>Upward (Up)</b> - the upward compressor.</li>
+		<li><b>Boosting (Boost)</b> - the boosting compressor (upward with precise boost control).</li>
+	</ul>
+	<li><b>Ratio</b> - compression ratio.</li>
+	<li><b>Knee</b> - size of compression knee.</li>
+	<li><b>Makeup</b> - additional amplification gain after compression stage.</li>
+	<li><b>Boost</b> - this knob is related to <b>upward</b> and <b>boosting</b> compression modes only.
+		For <b>upward</b> mode it defines the threshold below which the constant amplification will be applied to the input signal.
+		This prevents compressor from applying infinite amplification to very quiet signals.
+		For <b>boosting</b> mode it defines the overall boost of the signal. The boost threshold is computed automatically. 
+	</li>
+	<li><b>Attack Thresh</b> - threshold of the compressor, placed in the middle of the knee.</li>
+	<li><b>Attack Time</b> - attack time of the compressor.</li>
+	<li><b>Release Thresh</b> - relative to the <b>Attack Thresh</b> threshold that sets up the threshold of <b>Release Time</b>.
+		If the current compressor's envelope value is below the configured <b>Release Threshold</b>, the release time is
+		being considered to be the same to the <b>attack time</b>.</li>
+	<li><b>Release Time</b> - release time of the compressor.</li>
+	<li><b>Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
+</ul>
+<p><b>'Signal' section:</b></p>
+<ul>
+	<li><b>Input</b> - overall input gain.</li>
+	<li><b>Output</b> - overall output gain.</li>
+</ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
+
+<p><b>Sidechain control overlay:</b></p>
 <ul>
 	<?php if (!$tt) { ?>
 	<li><b>Position</b> - the position of the sidechain input. Available variants:</li>
@@ -106,36 +157,10 @@ keeping the same settings for the left a
 	<li><b>LPF</b> - allows to set up slope and cut-off frequency for the low-pass filter applied to sidechain signal.</li>
 	<li><b>HPF</b> - allows to set up slope and cut-off frequency for the high-pass filter applied to sidechain signal.</li>
 </ul>
-<p><b>'Compressor' section:</b></p>
+<p><b>Dry/Wet mix control overlay:</b></p>
 <ul>
-	<li><b>Mode</b> - compression mode</li>
-	<ul>
-		<li><b>Downward (Down)</b> - the downward compressor.</li>
-		<li><b>Upward (Up)</b> - the upward compressor.</li>
-		<li><b>Boosting (Boost)</b> - the boosting compressor (upward with precise boost control).</li>
-	</ul>
-	<li><b>Ratio</b> - compression ratio.</li>
-	<li><b>Knee</b> - size of compression knee.</li>
-	<li><b>Makeup</b> - additional amplification gain after compression stage.</li>
-	<li><b>Boost</b> - this knob is related to <b>upward</b> and <b>boosting</b> compression modes only.
-		For <b>upward</b> mode it defines the threshold below which the constant amplification will be applied to the input signal.
-		This prevents compressor from applying infinite amplification to very quiet signals.
-		For <b>boosting</b> mode it defines the overall boost of the signal. The boost threshold is computed automatically. 
-	</li>
-	<li><b>Attack Thresh</b> - threshold of the compressor, placed in the middle of the knee.</li>
-	<li><b>Attack Time</b> - attack time of the compressor.</li>
-	<li><b>Release Thresh</b> - relative to the <b>Attack Thresh</b> threshold that sets up the threshold of <b>Release Time</b>.
-		If the current compressor's envelope value is below the configured <b>Release Threshold</b>, the release time is
-		being considered to be the same to the <b>attack time</b>.</li>
-	<li><b>Release Time</b> - release time of the compressor.</li>
-	<li><b>Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
 	<li><b>Mix Dry</b> - the amount of dry (unprocessed) signal, useful for parallel compression.</li>
 	<li><b>Mix Wet</b> - the amount of wet (processed) signal, useful for parallel compression.</li>
 	<li><b>Mix Dry/Wet</b> - the knob that controls this balance between mixed dry and wet signal (see <b>Mix Dry</b> and <b>Mix Wet</b>) and the dry (unprocessed) signal.</li>
 </ul>
 
-<p><b>'Signal' section:</b></p>
-<ul>
-	<li><b>Input</b> - overall input gain.</li>
-	<li><b>Output</b> - overall output gain.</li>
-</ul>
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/src/main/meta/compressor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/src/main/meta/compressor.cpp
--- 1.2.21-5/modules/lsp-plugins-compressor/src/main/meta/compressor.cpp	2025-03-01 12:43:04.704600894 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/src/main/meta/compressor.cpp	2025-08-26 18:15:53.825905268 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-compressor
  * Created on: 3 авг. 2024 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_COMPRESSOR_VERSION_MAJOR       1
 #define LSP_PLUGINS_COMPRESSOR_VERSION_MINOR       0
-#define LSP_PLUGINS_COMPRESSOR_VERSION_MICRO       29
+#define LSP_PLUGINS_COMPRESSOR_VERSION_MICRO       31
 
 #define LSP_PLUGINS_COMPRESSOR_VERSION  \
     LSP_MODULE_VERSION( \
@@ -109,20 +109,34 @@ namespace lsp
             { NULL, NULL }
         };
 
+        #define COMP_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define COMP_SC_PREMIX \
+            COMP_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
+
         #define COMP_COMMON     \
             BYPASS,             \
             IN_GAIN,            \
             OUT_GAIN,           \
-            SWITCH("pause", "Pause graph analysis", 0.0f), \
-            TRIGGER("clear", "Clear graph analysis")
+            SWITCH("showmx", "Show mix overlay", "Show mix bar", 0.0f), \
+            SWITCH("showsc", "Show sidechain overlay", "Show SC bar", 0.0f), \
+            SWITCH("pause", "Pause graph analysis", "Pause", 0.0f), \
+            TRIGGER("clear", "Clear graph analysis", "Clear")
 
         #define COMP_MS_COMMON  \
             COMP_COMMON,        \
-            SWITCH("msl", "Mid/Side listen", 0.0f)
+            SWITCH("msl", "Mid/Side listen", "M/S listen", 0.0f)
 
         #define COMP_SPLIT_COMMON \
-            SWITCH("ssplit", "Stereo split", 0.0f), \
-            COMBO("sscs", "Split sidechain source", compressor_metadata::SC_SPLIT_SOURCE_DFL, comp_sc_split_sources)
+            SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f), \
+            COMBO("sscs", "Split sidechain source", "Split SC source", compressor_metadata::SC_SPLIT_SOURCE_DFL, comp_sc_split_sources)
 
         #define COMP_SHM_LINK_MONO \
             OPT_RETURN_MONO("link", "shml", "Side-chain shared memory link")
@@ -130,55 +144,55 @@ namespace lsp
         #define COMP_SHM_LINK_STEREO \
             OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
 
-        #define COMP_SC_MONO_CHANNEL(sct) \
-            COMBO("sct", "Sidechain type", compressor_metadata::SC_TYPE_DFL, sct), \
-            COMBO("scm", "Sidechain mode", compressor_metadata::SC_MODE_DFL, comp_sc_modes), \
-            CONTROL("sla", "Sidechain lookahead", U_MSEC, compressor_metadata::LOOKAHEAD), \
-            SWITCH("scl", "Sidechain listen", 0.0f), \
-            LOG_CONTROL("scr", "Sidechain reactivity", U_MSEC, compressor_metadata::REACTIVITY), \
-            AMP_GAIN100("scp", "Sidechain preamp", GAIN_AMP_0_DB), \
-            COMBO("shpm", "High-pass filter mode", 0, comp_filter_slope),      \
-            LOG_CONTROL("shpf", "High-pass filter frequency", U_HZ, compressor_metadata::HPF),   \
-            COMBO("slpm", "Low-pass filter mode", 0, comp_filter_slope),      \
-            LOG_CONTROL("slpf", "Low-pass filter frequency", U_HZ, compressor_metadata::LPF)
-
-        #define COMP_SC_STEREO_CHANNEL(id, label, sct) \
-            COMBO("sct" id, "Sidechain type" label, compressor_metadata::SC_TYPE_DFL, sct), \
-            COMBO("scm" id, "Sidechain mode" label, compressor_metadata::SC_MODE_DFL, comp_sc_modes), \
-            CONTROL("sla" id, "Sidechain lookahead" label, U_MSEC, compressor_metadata::LOOKAHEAD), \
-            SWITCH("scl" id, "Sidechain listen" label, 0.0f), \
-            COMBO("scs" id, "Sidechain source" label, compressor_metadata::SC_SOURCE_DFL, comp_sc_sources), \
-            LOG_CONTROL("scr" id, "Sidechain reactivity" label, U_MSEC, compressor_metadata::REACTIVITY), \
-            AMP_GAIN100("scp" id, "Sidechain preamp" label, GAIN_AMP_0_DB), \
-            COMBO("shpm" id, "High-pass filter mode" label, 0, comp_filter_slope),      \
-            LOG_CONTROL("shpf" id, "High-pass filter frequency" label, U_HZ, compressor_metadata::HPF),   \
-            COMBO("slpm" id, "Low-pass filter mode" label, 0, comp_filter_slope),      \
-            LOG_CONTROL("slpf" id, "Low-pass filter frequency" label, U_HZ, compressor_metadata::LPF)
-
-        #define COMP_CHANNEL(id, label, modes) \
-            COMBO("cm" id, "Compression mode" label, compressor_metadata::CM_DEFAULT, modes), \
-            LOG_CONTROL("al" id, "Attack threshold" label, U_GAIN_AMP, compressor_metadata::ATTACK_LVL), \
-            LOG_CONTROL("at" id, "Attack time" label, U_MSEC, compressor_metadata::ATTACK_TIME), \
-            LOG_CONTROL("rrl" id, "Release threshold" label, U_GAIN_AMP, compressor_metadata::RELEASE_LVL), \
-            LOG_CONTROL("rt" id, "Release time" label, U_MSEC, compressor_metadata::RELEASE_TIME), \
-            CONTROL("hold" id, "Hold time" label, U_MSEC, compressor_metadata::HOLD_TIME), \
-            LOG_CONTROL("cr" id, "Ratio" label, U_NONE, compressor_metadata::RATIO), \
-            LOG_CONTROL("kn" id, "Knee" label, U_GAIN_AMP, compressor_metadata::KNEE), \
-            EXT_LOG_CONTROL("bth" id, "Boost threshold" label, U_GAIN_AMP, compressor_metadata::BTH), \
-            EXT_LOG_CONTROL("bsa" id, "Boost signal amount" label, U_GAIN_AMP, compressor_metadata::BSA), \
-            LOG_CONTROL("mk" id, "Makeup gain" label, U_GAIN_AMP, compressor_metadata::MAKEUP), \
-            AMP_GAIN10("cdr" id, "Dry gain" label, GAIN_AMP_M_INF_DB),     \
-            AMP_GAIN10("cwt" id, "Wet gain" label, GAIN_AMP_0_DB), \
-            PERCENTS("cdw" id, "Dry/Wet balance" label, 100.0f, 0.1f), \
+        #define COMP_SC_MONO_CHANNEL(sct, sct_dfl) \
+            COMBO("sct", "Sidechain type", "SC type", sct_dfl, sct), \
+            COMBO("scm", "Sidechain mode", "SC mode", compressor_metadata::SC_MODE_DFL, comp_sc_modes), \
+            CONTROL("sla", "Sidechain lookahead", "SC look", U_MSEC, compressor_metadata::LOOKAHEAD), \
+            SWITCH("scl", "Sidechain listen", "SC listen", 0.0f), \
+            LOG_CONTROL("scr", "Sidechain reactivity", "SC react", U_MSEC, compressor_metadata::REACTIVITY), \
+            AMP_GAIN100("scp", "Sidechain preamp", "SC preamp", GAIN_AMP_0_DB), \
+            COMBO("shpm", "High-pass filter mode", "HPF mode", 0, comp_filter_slope),      \
+            LOG_CONTROL("shpf", "High-pass filter frequency", "HPF freq", U_HZ, compressor_metadata::HPF),   \
+            COMBO("slpm", "Low-pass filter mode", "LPF mode", 0, comp_filter_slope),      \
+            LOG_CONTROL("slpf", "Low-pass filter frequency", "LPF freq", U_HZ, compressor_metadata::LPF)
+
+        #define COMP_SC_STEREO_CHANNEL(id, label, alias, sct, sct_dfl) \
+            COMBO("sct" id, "Sidechain type" label, "SC type" alias, sct_dfl, sct), \
+            COMBO("scm" id, "Sidechain mode" label, "SC mode" alias, compressor_metadata::SC_MODE_DFL, comp_sc_modes), \
+            CONTROL("sla" id, "Sidechain lookahead" label, "SC look" alias, U_MSEC, compressor_metadata::LOOKAHEAD), \
+            SWITCH("scl" id, "Sidechain listen" label, "SC listen" alias, 0.0f), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, compressor_metadata::SC_SOURCE_DFL, comp_sc_sources), \
+            LOG_CONTROL("scr" id, "Sidechain reactivity" label, "SC react" alias, U_MSEC, compressor_metadata::REACTIVITY), \
+            AMP_GAIN100("scp" id, "Sidechain preamp" label, "SC preamp" alias, GAIN_AMP_0_DB), \
+            COMBO("shpm" id, "High-pass filter mode" label, "HPF mode" alias, 0, comp_filter_slope),      \
+            LOG_CONTROL("shpf" id, "High-pass filter frequency" label, "HPF freq" alias, U_HZ, compressor_metadata::HPF),   \
+            COMBO("slpm" id, "Low-pass filter mode" label, "LPF mode" alias, 0, comp_filter_slope),      \
+            LOG_CONTROL("slpf" id, "Low-pass filter frequency" label, "LPF freq" alias, U_HZ, compressor_metadata::LPF)
+
+        #define COMP_CHANNEL(id, label, alias, modes) \
+            COMBO("cm" id, "Compression mode" label, "Mode" alias, compressor_metadata::CM_DEFAULT, modes), \
+            LOG_CONTROL("al" id, "Attack threshold" label, "Att lvl" alias, U_GAIN_AMP, compressor_metadata::ATTACK_LVL), \
+            LOG_CONTROL("at" id, "Attack time" label, "Att time" alias, U_MSEC, compressor_metadata::ATTACK_TIME), \
+            LOG_CONTROL("rrl" id, "Release threshold" label, "Rel lvl" alias, U_GAIN_AMP, compressor_metadata::RELEASE_LVL), \
+            LOG_CONTROL("rt" id, "Release time" label, "Rel time" alias, U_MSEC, compressor_metadata::RELEASE_TIME), \
+            CONTROL("hold" id, "Hold time" label, "Hold time" alias, U_MSEC, compressor_metadata::HOLD_TIME), \
+            LOG_CONTROL("cr" id, "Ratio" label, "Ratio" alias, U_NONE, compressor_metadata::RATIO), \
+            LOG_CONTROL("kn" id, "Knee" label, "Knee" alias, U_GAIN_AMP, compressor_metadata::KNEE), \
+            EXT_LOG_CONTROL("bth" id, "Boost threshold" label, "Boost" alias, U_GAIN_AMP, compressor_metadata::BTH), \
+            EXT_LOG_CONTROL("bsa" id, "Boost signal amount" label, "Boost lvl" alias, U_GAIN_AMP, compressor_metadata::BSA), \
+            LOG_CONTROL("mk" id, "Makeup gain" label, "Makeup" alias, U_GAIN_AMP, compressor_metadata::MAKEUP), \
+            AMP_GAIN10("cdr" id, "Dry gain" label, "Dry" alias, GAIN_AMP_M_INF_DB),     \
+            AMP_GAIN10("cwt" id, "Wet gain" label, "Wet" alias, GAIN_AMP_0_DB), \
+            PERCENTS("cdw" id, "Dry/Wet balance" label, "Dry/Wet" alias, 100.0f, 0.1f), \
             METER_OUT_GAIN("rl" id, "Release level" label, 20.0f), \
             MESH("ccg" id, "Compressor curve graph" label, 2, compressor_metadata::CURVE_MESH_SIZE)
 
-        #define COMP_AUDIO_METER(id, label) \
-            SWITCH("slv" id, "Sidechain level visibility" label, 1.0f), \
-            SWITCH("elv" id, "Envelope level visibility" label, 1.0f), \
-            SWITCH("grv" id, "Gain reduction visibility" label, 1.0f), \
-            SWITCH("ilv" id, "Input level visibility" label, 1.0f), \
-            SWITCH("olv" id, "Output level visibility" label, 1.0f), \
+        #define COMP_AUDIO_METER(id, label, alias) \
+            SWITCH("slv" id, "Sidechain level visibility" label, "Show SC" alias, 1.0f), \
+            SWITCH("elv" id, "Envelope level visibility" label, "Show Env" alias, 1.0f), \
+            SWITCH("grv" id, "Gain reduction visibility" label, "Show Gain" alias, 1.0f), \
+            SWITCH("ilv" id, "Input level visibility" label, "Show In" alias, 1.0f), \
+            SWITCH("olv" id, "Output level visibility" label, "Show Out" alias, 1.0f), \
             MESH("scg" id, "Compressor sidechain graph" label, 2, compressor_metadata::TIME_MESH_SIZE), \
             MESH("evg" id, "Compressor envelope graph" label, 2, compressor_metadata::TIME_MESH_SIZE), \
             MESH("grg" id, "Compressor gain reduciton" label, 2, compressor_metadata::TIME_MESH_SIZE + 4), \
@@ -191,14 +205,18 @@ namespace lsp
             METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_36_DB), \
             METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_36_DB)
 
+        #define COMP_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
+
         static const port_t compressor_mono_ports[] =
         {
             PORTS_MONO_PLUGIN,
             COMP_SHM_LINK_MONO,
+            COMP_PREMIX,
             COMP_COMMON,
-            COMP_SC_MONO_CHANNEL(comp_sc_type),
-            COMP_CHANNEL("", "", comp_modes),
-            COMP_AUDIO_METER("", ""),
+            COMP_SC_MONO_CHANNEL(comp_sc_type, 0),
+            COMP_CHANNEL("", "", "", comp_modes),
+            COMP_AUDIO_METER("", "", ""),
 
             PORTS_END
         };
@@ -207,12 +225,13 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             COMP_SHM_LINK_STEREO,
+            COMP_PREMIX,
             COMP_COMMON,
             COMP_SPLIT_COMMON,
-            COMP_SC_STEREO_CHANNEL("", "", comp_sc_type),
-            COMP_CHANNEL("", "", comp_modes),
-            COMP_AUDIO_METER("_l", " Left"),
-            COMP_AUDIO_METER("_r", " Right"),
+            COMP_SC_STEREO_CHANNEL("", "", "", comp_sc_type, 0),
+            COMP_CHANNEL("", "", "", comp_modes),
+            COMP_AUDIO_METER("_l", " Left", " L"),
+            COMP_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -221,13 +240,15 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             COMP_SHM_LINK_STEREO,
+            COMP_PREMIX,
             COMP_COMMON,
-            COMP_SC_STEREO_CHANNEL("_l", " Left", comp_sc_type),
-            COMP_SC_STEREO_CHANNEL("_r", " Right", comp_sc_type),
-            COMP_CHANNEL("_l", " Left", comp_modes),
-            COMP_CHANNEL("_r", " Right", comp_modes),
-            COMP_AUDIO_METER("_l", " Left"),
-            COMP_AUDIO_METER("_r", " Right"),
+            COMP_LINK("clink", "Left/Right controls link", "L/R link"),
+            COMP_SC_STEREO_CHANNEL("_l", " Left", " L", comp_sc_type, 0),
+            COMP_SC_STEREO_CHANNEL("_r", " Right", " R", comp_sc_type, 0),
+            COMP_CHANNEL("_l", " Left", " L", comp_modes),
+            COMP_CHANNEL("_r", " Right", " R", comp_modes),
+            COMP_AUDIO_METER("_l", " Left", " L"),
+            COMP_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -236,13 +257,15 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             COMP_SHM_LINK_STEREO,
+            COMP_PREMIX,
             COMP_MS_COMMON,
-            COMP_SC_STEREO_CHANNEL("_m", " Mid", comp_sc_type),
-            COMP_SC_STEREO_CHANNEL("_s", " Side", comp_sc_type),
-            COMP_CHANNEL("_m", " Mid", comp_modes),
-            COMP_CHANNEL("_s", " Side", comp_modes),
-            COMP_AUDIO_METER("_m", " Mid"),
-            COMP_AUDIO_METER("_s", " Side"),
+            COMP_LINK("clink", "Mid/Side controls link", "M/S link"),
+            COMP_SC_STEREO_CHANNEL("_m", " Mid", " M", comp_sc_type, 0),
+            COMP_SC_STEREO_CHANNEL("_s", " Side", " S", comp_sc_type, 0),
+            COMP_CHANNEL("_m", " Mid", " M", comp_modes),
+            COMP_CHANNEL("_s", " Side", " S", comp_modes),
+            COMP_AUDIO_METER("_m", " Mid", " M"),
+            COMP_AUDIO_METER("_s", " Side", " S"),
 
             PORTS_END
         };
@@ -252,10 +275,11 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             COMP_SHM_LINK_MONO,
+            COMP_SC_PREMIX,
             COMP_COMMON,
-            COMP_SC_MONO_CHANNEL(comp_sc2_type),
-            COMP_CHANNEL("", "", comp_modes),
-            COMP_AUDIO_METER("", ""),
+            COMP_SC_MONO_CHANNEL(comp_sc2_type, 2),
+            COMP_CHANNEL("", "", "", comp_modes),
+            COMP_AUDIO_METER("", "", ""),
 
             PORTS_END
         };
@@ -265,12 +289,13 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             COMP_SHM_LINK_STEREO,
+            COMP_SC_PREMIX,
             COMP_COMMON,
             COMP_SPLIT_COMMON,
-            COMP_SC_STEREO_CHANNEL("", "", comp_sc2_type),
-            COMP_CHANNEL("", "", comp_modes),
-            COMP_AUDIO_METER("_l", " Left"),
-            COMP_AUDIO_METER("_r", " Right"),
+            COMP_SC_STEREO_CHANNEL("", "", "", comp_sc2_type, 2),
+            COMP_CHANNEL("", "", "", comp_modes),
+            COMP_AUDIO_METER("_l", " Left", " L"),
+            COMP_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -280,13 +305,15 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             COMP_SHM_LINK_STEREO,
+            COMP_SC_PREMIX,
             COMP_COMMON,
-            COMP_SC_STEREO_CHANNEL("_l", " Left", comp_sc2_type),
-            COMP_SC_STEREO_CHANNEL("_r", " Right", comp_sc2_type),
-            COMP_CHANNEL("_l", " Left", comp_modes),
-            COMP_CHANNEL("_r", " Right", comp_modes),
-            COMP_AUDIO_METER("_l", " Left"),
-            COMP_AUDIO_METER("_r", " Right"),
+            COMP_LINK("clink", "Left/Right controls link", "L/R link"),
+            COMP_SC_STEREO_CHANNEL("_l", " Left", " L", comp_sc2_type, 2),
+            COMP_SC_STEREO_CHANNEL("_r", " Right", " R", comp_sc2_type, 2),
+            COMP_CHANNEL("_l", " Left", " L", comp_modes),
+            COMP_CHANNEL("_r", " Right", " R", comp_modes),
+            COMP_AUDIO_METER("_l", " Left", " L"),
+            COMP_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -296,13 +323,15 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             COMP_SHM_LINK_STEREO,
+            COMP_SC_PREMIX,
             COMP_MS_COMMON,
-            COMP_SC_STEREO_CHANNEL("_m", " Mid", comp_sc2_type),
-            COMP_SC_STEREO_CHANNEL("_s", " Side", comp_sc2_type),
-            COMP_CHANNEL("_m", " Mid", comp_modes),
-            COMP_CHANNEL("_s", " Side", comp_modes),
-            COMP_AUDIO_METER("_m", " Mid"),
-            COMP_AUDIO_METER("_s", " Side"),
+            COMP_LINK("clink", "Mid/Side controls link", "M/S link"),
+            COMP_SC_STEREO_CHANNEL("_m", " Mid", " M", comp_sc2_type, 2),
+            COMP_SC_STEREO_CHANNEL("_s", " Side", " S", comp_sc2_type, 2),
+            COMP_CHANNEL("_m", " Mid", " M", comp_modes),
+            COMP_CHANNEL("_s", " Side", " S", comp_modes),
+            COMP_AUDIO_METER("_m", " Mid", " M"),
+            COMP_AUDIO_METER("_s", " Side", " S"),
 
             PORTS_END
         };
@@ -341,7 +370,7 @@ namespace lsp
             clap_features_mono,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             compressor_mono_ports,
-            "dynamics/compressor/single/mono.xml",
+            "dynamics/compressor/single.xml",
             "dynamics/compressor/single/mono",
             mono_plugin_port_groups,
             &compressor_bundle
@@ -371,7 +400,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             compressor_stereo_ports,
-            "dynamics/compressor/single/stereo.xml",
+            "dynamics/compressor/single.xml",
             "dynamics/compressor/single/stereo",
             stereo_plugin_port_groups,
             &compressor_bundle
@@ -401,7 +430,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             compressor_lr_ports,
-            "dynamics/compressor/single/lr.xml",
+            "dynamics/compressor/single.xml",
             "dynamics/compressor/single/lr",
             stereo_plugin_port_groups,
             &compressor_bundle
@@ -431,7 +460,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             compressor_ms_ports,
-            "dynamics/compressor/single/ms.xml",
+            "dynamics/compressor/single.xml",
             "dynamics/compressor/single/ms",
             stereo_plugin_port_groups,
             &compressor_bundle
@@ -462,7 +491,7 @@ namespace lsp
             clap_features_mono,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_compressor_mono_ports,
-            "dynamics/compressor/single/mono.xml",
+            "dynamics/compressor/single.xml",
             "dynamics/compressor/single/mono",
             mono_plugin_sidechain_port_groups,
             &compressor_bundle
@@ -492,7 +521,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_compressor_stereo_ports,
-            "dynamics/compressor/single/stereo.xml",
+            "dynamics/compressor/single.xml",
             "dynamics/compressor/single/stereo",
             stereo_plugin_sidechain_port_groups,
             &compressor_bundle
@@ -522,7 +551,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_compressor_lr_ports,
-            "dynamics/compressor/single/lr.xml",
+            "dynamics/compressor/single.xml",
             "dynamics/compressor/single/lr",
             stereo_plugin_sidechain_port_groups,
             &compressor_bundle
@@ -552,7 +581,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_compressor_ms_ports,
-            "dynamics/compressor/single/ms.xml",
+            "dynamics/compressor/single.xml",
             "dynamics/compressor/single/ms",
             stereo_plugin_sidechain_port_groups,
             &compressor_bundle
diff -pruN 1.2.21-5/modules/lsp-plugins-compressor/src/main/plug/compressor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/src/main/plug/compressor.cpp
--- 1.2.21-5/modules/lsp-plugins-compressor/src/main/plug/compressor.cpp	2025-03-01 12:43:04.704600894 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-compressor/src/main/plug/compressor.cpp	2025-08-26 18:15:53.825905268 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-compressor
  * Created on: 3 авг. 2021 г.
@@ -28,7 +28,7 @@
 #include <lsp-plug.in/shared/debug.h>
 #include <lsp-plug.in/shared/id_colors.h>
 
-#define COMP_BUF_SIZE           0x1000
+#define COMP_BUF_SIZE           0x200
 
 namespace lsp
 {
@@ -109,6 +109,31 @@ namespace lsp
 
             pData           = NULL;
             pIDisplay       = NULL;
+
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
         }
 
         compressor::~compressor()
@@ -119,7 +144,7 @@ namespace lsp
         void compressor::init(plug::IWrapper *wrapper, plug::IPort **ports)
         {
             plug::Module::init(wrapper, ports);
-            size_t channels = (nMode == CM_MONO) ? 1 : 2;
+            const size_t channels   = (nMode == CM_MONO) ? 1 : 2;
 
             // Allocate temporary buffers
             size_t channel_size     = align_size(sizeof(channel_t) * channels, DEFAULT_ALIGN);
@@ -129,6 +154,7 @@ namespace lsp
             size_t allocate         = channel_size +
                                       buf_size +
                                       buf_size * channels * 5 +
+                                      buf_size * channels * 3 +
                                       curve_size +
                                       history_size;
 
@@ -141,6 +167,14 @@ namespace lsp
             vTime                   = advance_ptr_bytes<float>(ptr, history_size);
             vEmptyBuffer            = advance_ptr_bytes<float>(ptr, buf_size);
 
+            // Initialize pre-mix
+            for (size_t i=0; i<channels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, buf_size);
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, buf_size);
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, buf_size);
+            }
+
             // Initialize channels
             for (size_t i=0; i<channels; ++i)
             {
@@ -250,11 +284,26 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
             BIND_PORT(pInGain);
             BIND_PORT(pOutGain);
+            SKIP_PORT("Show mix overlay");
+            SKIP_PORT("Show sidechain overlay");
             BIND_PORT(pPause);
             BIND_PORT(pClear);
             if (nMode == CM_MS)
@@ -264,6 +313,8 @@ namespace lsp
                 BIND_PORT(pStereoSplit);
                 BIND_PORT(pScSpSource);
             }
+            if ((nMode == CM_LR) || (nMode == CM_MS))
+                SKIP_PORT("Separate channels link");
 
             // Sidechain ports
             lsp_trace("Binding sidechain ports");
@@ -539,12 +590,25 @@ namespace lsp
             return SCT_FEED_FORWARD;
         }
 
+        void compressor::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void compressor::update_settings()
         {
             dspu::filter_params_t fp;
             size_t channels = (nMode == CM_MONO) ? 1 : 2;
             bool bypass     = pBypass->value() >= 0.5f;
 
+            // Update pre-mix matrix
+            update_premix();
+
             // Global parameters
             bPause          = pPause->value() >= 0.5f;
             bClear          = pClear->value() >= 0.5f;
@@ -715,6 +779,120 @@ namespace lsp
             return in;
         }
 
+        void compressor::premix_channel(uint32_t channel, float * & in, float * & out, float * & sc, float * & link, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            in                      = in_buf;
+            out                     = out_buf;
+            sc                      = sc_buf;
+            link                    = link_buf;
+
+            sPremix.vIn[channel]    = &in_buf[count];
+            sPremix.vOut[channel]   = &out_buf[count];
+            if (sc_buf != NULL)
+                sPremix.vSc[channel]    = &sc_buf[count];
+            if (link_buf != NULL)
+                sPremix.vLink[channel]  = &link_buf[count];
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    in                  = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(in, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(in, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    in                  = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(in, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    sc                  = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(sc, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(sc, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    sc                  = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(sc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    link                = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(link, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(link, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    link                = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(link, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        in              = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(in, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        sc              = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(sc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    link            = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(link, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void compressor::process(size_t samples)
         {
             size_t channels = (nMode == CM_MONO) ? 1 : 2;
@@ -732,14 +910,14 @@ namespace lsp
                 channel_t *c        = &vChannels[i];
 
                 // Initialize pointers
-                in_buf[i]           = c->pIn->buffer<float>();
-                out_buf[i]          = c->pOut->buffer<float>();
-                sc_buf[i]           = (c->pSC != NULL) ? c->pSC->buffer<float>() : in_buf[i];
-                shm_buf[i]          = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pSC != NULL) ? c->pSC->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *buf = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((buf != NULL) && (buf->active()))
-                    shm_buf[i]          = buf->buffer();
+                    sPremix.vLink[i]    = buf->buffer();
 
                 // Analyze channel mode
                 if (c->nScType == SCT_FEED_BACK)
@@ -751,7 +929,11 @@ namespace lsp
             while (left > 0)
             {
                 // Detemine number of samples to process
-                size_t to_process = (left > COMP_BUF_SIZE) ? COMP_BUF_SIZE : left;
+                const size_t to_process     = (left > COMP_BUF_SIZE) ? COMP_BUF_SIZE : left;
+
+                // Pre-mix channel data
+                for (size_t i=0; i<channels; ++i)
+                    premix_channel(i, in_buf[i], out_buf[i], sc_buf[i], shm_buf[i], to_process);
 
                 // Prepare audio channels
                 if (nMode == CM_MONO)
@@ -939,12 +1121,6 @@ namespace lsp
                     channel_t *c        = &vChannels[i];
                     c->sDryDelay.process(c->vIn, in_buf[i], to_process);
                     c->sBypass.process(out_buf[i], c->vIn, vChannels[i].vOut, to_process);
-
-                    in_buf[i]          += to_process;
-                    out_buf[i]         += to_process;
-                    sc_buf[i]          += to_process;
-                    if (shm_buf[i] != NULL)
-                        shm_buf[i]         += to_process;
                 }
 
                 left       -= to_process;
@@ -1293,6 +1469,33 @@ namespace lsp
             v->write("fInGain", fInGain);
             v->write("bUISync", bUISync);
             v->write("pIDisplay", pIDisplay);
+
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
+
             v->write("pBypass", pBypass);
             v->write("pInGain", pInGain);
             v->write("pOutGain", pOutGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-crossover/.github/workflows/build.yml	2025-03-01 12:43:02.168616116 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/.github/workflows/build.yml	2025-08-26 18:15:50.873933918 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-crossover/CHANGELOG	2025-03-01 12:43:02.168616116 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/CHANGELOG	2025-08-26 18:15:50.873933918 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.27 ===
+* Added left/right and mid/side linking in the UI.
+* Fixed bug in frequency editing for Mid/Side and Left/Right versions.
+* Updated build scripts and dependencies.
+
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
 === 1.0.25 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-crossover/dependencies.mk	2025-03-01 12:43:02.168616116 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/dependencies.mk	2025-08-26 18:15:50.873933918 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/include/private/ui/crossover.h 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/include/private/ui/crossover.h
--- 1.2.21-5/modules/lsp-plugins-crossover/include/private/ui/crossover.h	2025-03-01 12:43:02.168616116 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/include/private/ui/crossover.h	2025-08-26 18:15:50.873933918 +0000
@@ -41,6 +41,7 @@ namespace lsp
                     ui::IPort          *pFreq;
                     ui::IPort          *pSlope;         // Split enable port
 
+                    size_t              nChannel;       // Channel (left/right/mid/side)
                     float               fFreq;          // Split frequency
                     bool                bOn;            // Split is enabled
 
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-crossover/make/tools.mk	2025-03-01 12:43:02.172616093 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/make/tools.mk	2025-08-26 18:15:50.873933918 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/modules.mk
--- 1.2.21-5/modules/lsp-plugins-crossover/modules.mk	2025-03-01 12:43:02.172616093 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/modules.mk	2025-08-26 18:15:50.873933918 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/project.mk
--- 1.2.21-5/modules/lsp-plugins-crossover/project.mk	2025-03-01 12:43:02.172616093 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/project.mk	2025-08-26 18:15:50.873933918 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Crossover Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.25
+ARTIFACT_VERSION            = 1.0.27
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-crossover/res/doc/screenshots/crossover_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/res/doc/screenshots/crossover_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-crossover/res/doc/screenshots/crossover_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/res/doc/screenshots/crossover_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-crossover/res/doc/screenshots/crossover_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/res/doc/screenshots/crossover_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-crossover/res/doc/screenshots/crossover_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/res/doc/screenshots/crossover_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/res/main/ui/util/crossover/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/res/main/ui/util/crossover/lr.xml
--- 1.2.21-5/modules/lsp-plugins-crossover/res/main/ui/util/crossover/lr.xml	2025-03-01 12:43:02.176616069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/res/main/ui/util/crossover/lr.xml	2025-08-26 18:15:50.881933840 +0000
@@ -1,4 +1,37 @@
 <plugin resizable="true">
+
+            SWITCH("bs" id, "Solo band" label, "Solo" alias, 0.0f), \
+            SWITCH("bm" id, "Mute band" label, "Mute" alias, 0.0f), \
+            SWITCH("bp" id, "Phase invert" label, "Phase" alias, 0.0f), \
+            LOG_CONTROL("bg" id, "Band gain" label, "Gain" alias, U_GAIN_AMP, crossover_metadata::MAKEUP), \
+            CONTROL("bd" id, "Band delay" label, "Delay" alias, U_MSEC, crossover_metadata::DELAY), \
+            HUE_CTL("hue" id, "Hue " label, float(x) / float(total)), \
+            METER("fre" id, "Frequency range end" label, U_HZ,  crossover_metadata::OUT_FREQ), \
+            MESH("bfc" id, "Band frequency chart" label, 2, crossover_metadata::MESH_POINTS + 4)
+
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'bs'; 'bm'; 'bp'; 'bg'; 'bd'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'frs'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+
 	<vbox vspacing="4" hspacing="4" expand="true">
 
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
@@ -229,6 +262,7 @@
 				<label text="labels.mode:" />
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<void hexpand="true" />
+				<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
 				<button id="smapply" text="labels.chan.sm_apply" size="22" pad.v="4" ui:inject="Button_green"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true" />
 				<label text="labels.filters" pad.l="6"/>
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/res/main/ui/util/crossover/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/res/main/ui/util/crossover/ms.xml
--- 1.2.21-5/modules/lsp-plugins-crossover/res/main/ui/util/crossover/ms.xml	2025-03-01 12:43:02.176616069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/res/main/ui/util/crossover/ms.xml	2025-08-26 18:15:50.881933840 +0000
@@ -1,4 +1,28 @@
 <plugin resizable="true">
+
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'bs'; 'bm'; 'bp'; 'bg'; 'bd'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'frs'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+
 	<vbox vspacing="4" hspacing="4" expand="true">
 
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
@@ -229,6 +253,7 @@
 				<label text="labels.mode:"/>
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<void hexpand="true"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
 				<button id="smapply" text="labels.chan.sm_apply" size="22" pad.v="4" ui:inject="Button_green"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<label text="labels.filters" pad.l="6"/>
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/src/doc/manuals/plugins/crossover.php 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/src/doc/manuals/plugins/crossover.php
--- 1.2.21-5/modules/lsp-plugins-crossover/src/doc/manuals/plugins/crossover.php	2025-03-01 12:43:02.176616069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/src/doc/manuals/plugins/crossover.php	2025-08-26 18:15:50.881933840 +0000
@@ -11,18 +11,18 @@
 <p>
     <?php if ($m == 'm') { ?>
     	This plugin performs split of mono input signal into separate frequency bands passed to individual mono output channels.
-    	Additinally it provides output monitoring channel to control individual channels or result of summing signals passed
+    	Additionally it provides output monitoring channel to control individual channels or result of summing signals passed
     	to individual mono output channels.
     <?php } elseif ($m == 's') { ?>
 		This plugin performs split of stereo input signal into separate frequency bands passed to individual stereo output channels.
-		Additinally it provides output monitoring channel to control individual channels or result of summing signals
+		Additionally it provides output monitoring channel to control individual channels or result of summing signals
 		passed to individual stereo output channels.
 	<?php } elseif ($m == 'lr') { ?>
-		This plugin performs split of individual channels of the stereo input stereo signal into separate frequency bands passed to 
-		individual stereo output channes. Additinally it provides output monitoring channel to control individual channels or
+		This plugin performs split of individual channels of the stereo input stereo signal into separate frequency bands passed to
+		individual stereo output channels. Additionally it provides output monitoring channel to control individual channels or
 		result of summing signals passed to individual stereo output channels.
 	<?php } else { ?>
-		This plugin converts the stereo input singnal into Mid/Side signal and performs split of the Mid/Side signal into separate frequency
+		This plugin converts the stereo input signal into Mid/Side signal and performs split of the Mid/Side signal into separate frequency
 		bands passed to individual Mid/Side output channels. Additionally it provides output monitoring channel to control the result of summing
 		signals passed to individual Mid/Side output channels. The output Mid/Side signal also can be inspected by pressing <b>MS Listen</b> button.
 	<?php } ?>
@@ -33,7 +33,7 @@
     By default plugin enables 4 frequency bands but overall number of used frequency bands may vary from 1 to 8.
     Each range of the frequency band can be adjusted by specifying the slope of the corresponding Low-pass and High-pass filters.
     The frequency graph allows to view characteristics of filters for each frequency band and the result of summing the frequency response
-    for all filters. For better audio engineering the plugin addionally provides FFT analysis of input and output signal.
+    for all filters. For better audio engineering the plugin additionally provides FFT analysis of input and output signal.
 </p>
 <p>
 	Additional <b>Linear Phase</b> mode allows to split audio signal into multiple frequency bands with linear phase shift.
@@ -42,7 +42,7 @@
 <ul>
 	<li>Unlike classic crossovers which use IIR (Infinite Impulse Response) filters to split signal into multiple bands and shift the phase
 	of the audio signal at band split points, the <b>Linear Phase</b> allows to use FIR (Finite Impulse Response) filters which are deprived of this.
-	<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow simulate their tranfer function
+	<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow simulate their transfer function
 	to look like the transfer function of analog filters, without deforming it's magnitude envelope near the nyquist frequency.</li>
 	<li>Unlike design of classic Linkwitz-Riley filters, the design of IIR filters provides shorter transition zone of the filter.</li>
 </ul>
@@ -59,6 +59,11 @@
 	</li>
 	<li><b>FFT In</b> - enables FFT analysis of the input signal for the corresponding input channel.
 	<li><b>FFT Out</b> - enables FFT analysis of the input signal for the corresponding input channel.
+	<?php if ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
+	<?php } elseif ($m == 'ms') { ?>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
+	<?php } ?>
 	<li><b>S/M Apply</b> - applies effect of Solo/Mute buttons to corresponding frequency band's outputs.
 	<li><b>Filters</b> - shows filter characteristics of each band for the corresponding channel.
 	<li><b>Curve</b> - shows the output signal curve of each band for the corresponding channel.
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/src/main/meta/crossover.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/src/main/meta/crossover.cpp
--- 1.2.21-5/modules/lsp-plugins-crossover/src/main/meta/crossover.cpp	2025-03-01 12:43:02.176616069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/src/main/meta/crossover.cpp	2025-08-26 18:15:50.881933840 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-crossover
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_CROSSOVER_VERSION_MAJOR       1
 #define LSP_PLUGINS_CROSSOVER_VERSION_MINOR       0
-#define LSP_PLUGINS_CROSSOVER_VERSION_MICRO       25
+#define LSP_PLUGINS_CROSSOVER_VERSION_MICRO       27
 
 #define LSP_PLUGINS_CROSSOVER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -79,68 +79,71 @@ namespace lsp
         };
 
         #define XOVER_COMMON \
-                BYPASS, \
-                COMBO("mode", "Crossover mode", crossover_metadata::CROSS_CLASSIC, crossover_op_modes), \
-                SWITCH("smapply", "Solo/Mute apply to bands", 1), \
-                AMP_GAIN("g_in", "Input gain", crossover_metadata::IN_GAIN_DFL, 10.0f), \
-                AMP_GAIN("g_out", "Output gain", crossover_metadata::OUT_GAIN_DFL, 10.0f), \
-                LOG_CONTROL("react", "FFT reactivity", U_MSEC, crossover_metadata::REACT_TIME), \
-                AMP_GAIN("shift", "Shift gain", GAIN_AMP_0_DB, GAIN_AMP_P_60_DB), \
-                LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, crossover_metadata::ZOOM)
-
-        #define XOVER_CHANNEL(id, label) \
-                SWITCH("flt" id, "Band filter curves" label, 1.0f), \
-                SWITCH("crv" id, "Overall filter curve" label, 1.0f), \
-                MESH("ag" id, "Amplitude graph" label, 2, crossover_metadata::MESH_POINTS)
-
-        #define XOVER_FFT_METERS(id, label) \
-                SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-                SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
-                MESH("ifg" id, "Input FFT graph" label, 2, crossover_metadata::MESH_POINTS + 2), \
-                MESH("ofg" id, "Output FFT graph" label, 2, crossover_metadata::MESH_POINTS + 2)
+            BYPASS, \
+            COMBO("mode", "Crossover mode", "Mode", crossover_metadata::CROSS_CLASSIC, crossover_op_modes), \
+            SWITCH("smapply", "Solo/Mute apply to bands", "Solo/Mute apply", 1), \
+            AMP_GAIN("g_in", "Input gain", "Input gain", crossover_metadata::IN_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_out", "Output gain", "Output gain", crossover_metadata::OUT_GAIN_DFL, 10.0f), \
+            LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, crossover_metadata::REACT_TIME), \
+            AMP_GAIN("shift", "Shift gain", "Shift", GAIN_AMP_0_DB, GAIN_AMP_P_60_DB), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, crossover_metadata::ZOOM)
+
+        #define XOVER_CHANNEL(id, label, alias) \
+            SWITCH("flt" id, "Band filter curves" label, "Show band" alias, 1.0f), \
+            SWITCH("crv" id, "Overall filter curve" label, "Show flt" alias, 1.0f), \
+            MESH("ag" id, "Amplitude graph" label, 2, crossover_metadata::MESH_POINTS)
+
+        #define XOVER_FFT_METERS(id, label, alias) \
+            SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+            SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
+            MESH("ifg" id, "Input FFT graph" label, 2, crossover_metadata::MESH_POINTS + 2), \
+            MESH("ofg" id, "Output FFT graph" label, 2, crossover_metadata::MESH_POINTS + 2)
 
         #define XOVER_CHANNEL_METERS(id, label) \
-                METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
-                METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB)
+            METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
+            METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB)
 
-        #define XOVER_SPLIT(id, label, slope, freq) \
-                COMBO("frs" id, "Frequency range slope" label, crossover_metadata::SLOPE_DFL * slope, crossover_slopes), \
-                LOG_CONTROL_DFL("sf" id, "Split frequency" label, U_HZ, crossover_metadata::SPLIT_FREQ, freq)
-
-        #define XOVER_BAND(id, label, x, total, fe, fs) \
-                SWITCH("bs" id, "Solo band" label, 0.0f), \
-                SWITCH("bm" id, "Mute band" label, 0.0f), \
-                SWITCH("bp" id, "Phase invert" label, 0.0f), \
-                LOG_CONTROL("bg" id, "Band gain" label, U_GAIN_AMP, crossover_metadata::MAKEUP), \
-                CONTROL("bd" id, "Band delay" label, U_MSEC, crossover_metadata::DELAY), \
-                HUE_CTL("hue" id, "Hue " label, float(x) / float(total)), \
-                METER("fre" id, "Frequency range end" label, U_HZ,  crossover_metadata::OUT_FREQ), \
-                MESH("bfc" id, "Band frequency chart" label, 2, crossover_metadata::MESH_POINTS + 4)
+        #define XOVER_SPLIT(id, label, alias, slope, freq) \
+            COMBO("frs" id, "Frequency range slope" label, "Frq slope" alias, crossover_metadata::SLOPE_DFL * slope, crossover_slopes), \
+            LOG_CONTROL_DFL("sf" id, "Split frequency" label, "Split" alias, U_HZ, crossover_metadata::SPLIT_FREQ, freq)
+
+        #define XOVER_BAND(id, label, alias, x, total, fe, fs) \
+            SWITCH("bs" id, "Solo band" label, "Solo" alias, 0.0f), \
+            SWITCH("bm" id, "Mute band" label, "Mute" alias, 0.0f), \
+            SWITCH("bp" id, "Phase invert" label, "Phase" alias, 0.0f), \
+            LOG_CONTROL("bg" id, "Band gain" label, "Gain" alias, U_GAIN_AMP, crossover_metadata::MAKEUP), \
+            CONTROL("bd" id, "Band delay" label, "Delay" alias, U_MSEC, crossover_metadata::DELAY), \
+            HUE_CTL("hue" id, "Hue " label, float(x) / float(total)), \
+            METER("fre" id, "Frequency range end" label, U_HZ,  crossover_metadata::OUT_FREQ), \
+            MESH("bfc" id, "Band frequency chart" label, 2, crossover_metadata::MESH_POINTS + 4)
 
         #define XOVER_BAND_METER_MONO(id, label) \
-                METER_GAIN("blm" id, "Band level meter" label, GAIN_AMP_P_24_DB)
+            METER_GAIN("blm" id, "Band level meter" label, GAIN_AMP_P_24_DB)
 
         #define XOVER_BAND_METER_STEREO(id, label) \
-                METER_GAIN("blm" id "l", "Band level meter" label " Left", GAIN_AMP_P_24_DB), \
-                METER_GAIN("blm" id "r", "Band level meter" label " Right", GAIN_AMP_P_24_DB)
+            METER_GAIN("blm" id "l", "Band level meter" label " Left", GAIN_AMP_P_24_DB), \
+            METER_GAIN("blm" id "r", "Band level meter" label " Right", GAIN_AMP_P_24_DB)
 
         #define XOVER_BAND_METER_MS(id, label) \
-                METER_GAIN("blm" id "m", "Band level meter" label " Mid", GAIN_AMP_P_24_DB), \
-                METER_GAIN("blm" id "s", "Band level meter" label " Side", GAIN_AMP_P_24_DB)
+            METER_GAIN("blm" id "m", "Band level meter" label " Mid", GAIN_AMP_P_24_DB), \
+            METER_GAIN("blm" id "s", "Band level meter" label " Side", GAIN_AMP_P_24_DB)
 
         #define XOVER_GROUP_PORTS(i) \
-                MONO_PORT_GROUP_PORT(xover_pg_mono_ ## i, "band" #i); \
-                STEREO_PORT_GROUP_PORTS(xover_pg_stereo_ ## i, "band" #i "l", "band" #i "r"); \
-                MS_PORT_GROUP_PORTS(xover_pg_ms_ ## i, "band" #i "m", "band" #i "s");
+            MONO_PORT_GROUP_PORT(xover_pg_mono_ ## i, "band" #i); \
+            STEREO_PORT_GROUP_PORTS(xover_pg_stereo_ ## i, "band" #i "l", "band" #i "r"); \
+            MS_PORT_GROUP_PORTS(xover_pg_ms_ ## i, "band" #i "m", "band" #i "s");
+
+        #define XOVER_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
 
         #define XOVER_MONO_GROUP(i) \
-                { "mono_band" #i, "Mono band " #i " output",        GRP_MONO,       PGF_OUT,    xover_pg_mono_ ## i ##_ports        }
+            { "mono_band" #i, "Mono band " #i " output",        GRP_MONO,       PGF_OUT,    xover_pg_mono_ ## i ##_ports        }
 
         #define XOVER_STEREO_GROUP(i) \
-                { "stereo_band" #i, "Stereo band " #i " output",    GRP_STEREO,     PGF_OUT,    xover_pg_stereo_ ## i ##_ports      }
+            { "stereo_band" #i, "Stereo band " #i " output",    GRP_STEREO,     PGF_OUT,    xover_pg_stereo_ ## i ##_ports      }
 
         #define XOVER_MS_GROUP(i) \
-                { "ms_band" #i, "Mid/side band " #i " output",      GRP_MS,         PGF_OUT,    xover_pg_ms_ ## i ##_ports          }
+            { "ms_band" #i, "Mid/side band " #i " output",      GRP_MS,         PGF_OUT,    xover_pg_ms_ ## i ##_ports          }
 
         XOVER_GROUP_PORTS(0);
         XOVER_GROUP_PORTS(1);
@@ -206,26 +209,26 @@ namespace lsp
             AUDIO_OUTPUT("band7", "Band Output 7"),
 
             XOVER_COMMON,
-            XOVER_CHANNEL("", ""),
-            XOVER_FFT_METERS("", ""),
+            XOVER_CHANNEL("", "", ""),
+            XOVER_FFT_METERS("", "", ""),
             XOVER_CHANNEL_METERS("", ""),
 
-            XOVER_SPLIT("_1", " 1", 0, 40.0f),
-            XOVER_SPLIT("_2", " 2", 1, 100.0f),
-            XOVER_SPLIT("_3", " 3", 0, 252.0f),
-            XOVER_SPLIT("_4", " 4", 1, 632.0f),
-            XOVER_SPLIT("_5", " 5", 0, 1587.0f),
-            XOVER_SPLIT("_6", " 6", 1, 3984.0f),
-            XOVER_SPLIT("_7", " 7", 0, 10000.0f),
-
-            XOVER_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            XOVER_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            XOVER_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            XOVER_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            XOVER_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            XOVER_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            XOVER_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            XOVER_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            XOVER_SPLIT("_1", " 1", " 1", 0, 40.0f),
+            XOVER_SPLIT("_2", " 2", " 2", 1, 100.0f),
+            XOVER_SPLIT("_3", " 3", " 3", 0, 252.0f),
+            XOVER_SPLIT("_4", " 4", " 4", 1, 632.0f),
+            XOVER_SPLIT("_5", " 5", " 5", 0, 1587.0f),
+            XOVER_SPLIT("_6", " 6", " 6", 1, 3984.0f),
+            XOVER_SPLIT("_7", " 7", " 7", 0, 10000.0f),
+
+            XOVER_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            XOVER_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            XOVER_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            XOVER_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            XOVER_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            XOVER_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            XOVER_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            XOVER_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             XOVER_BAND_METER_MONO("_0", " 0"),
             XOVER_BAND_METER_MONO("_1", " 1"),
@@ -260,28 +263,28 @@ namespace lsp
             AUDIO_OUTPUT("band7r", "Band Output 7 Right"),
 
             XOVER_COMMON,
-            XOVER_CHANNEL("", ""),
-            XOVER_FFT_METERS("_l", " Left"),
+            XOVER_CHANNEL("", "", ""),
+            XOVER_FFT_METERS("_l", " Left", " L"),
             XOVER_CHANNEL_METERS("_l", " Left"),
-            XOVER_FFT_METERS("_r", " Right"),
+            XOVER_FFT_METERS("_r", " Right", " R"),
             XOVER_CHANNEL_METERS("_r", " Right"),
 
-            XOVER_SPLIT("_1", " 1", 0, 40.0f),
-            XOVER_SPLIT("_2", " 2", 1, 100.0f),
-            XOVER_SPLIT("_3", " 3", 0, 252.0f),
-            XOVER_SPLIT("_4", " 4", 1, 632.0f),
-            XOVER_SPLIT("_5", " 5", 0, 1587.0f),
-            XOVER_SPLIT("_6", " 6", 1, 3984.0f),
-            XOVER_SPLIT("_7", " 7", 0, 10000.0f),
-
-            XOVER_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            XOVER_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            XOVER_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            XOVER_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            XOVER_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            XOVER_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            XOVER_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            XOVER_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            XOVER_SPLIT("_1", " 1", " 1", 0, 40.0f),
+            XOVER_SPLIT("_2", " 2", " 2", 1, 100.0f),
+            XOVER_SPLIT("_3", " 3", " 3", 0, 252.0f),
+            XOVER_SPLIT("_4", " 4", " 4", 1, 632.0f),
+            XOVER_SPLIT("_5", " 5", " 5", 0, 1587.0f),
+            XOVER_SPLIT("_6", " 6", " 6", 1, 3984.0f),
+            XOVER_SPLIT("_7", " 7", " 7", 0, 10000.0f),
+
+            XOVER_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            XOVER_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            XOVER_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            XOVER_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            XOVER_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            XOVER_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            XOVER_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            XOVER_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             XOVER_BAND_METER_STEREO("_0", " 0"),
             XOVER_BAND_METER_STEREO("_1", " 1"),
@@ -316,47 +319,48 @@ namespace lsp
             AUDIO_OUTPUT("band7r", "Band Output 7 Right"),
 
             XOVER_COMMON,
-            COMBO("sel", "Processor selector", 0.0f, crossover_selector_lr),
-            XOVER_CHANNEL("_l", " Left"),
-            XOVER_CHANNEL("_r", " Right"),
-            XOVER_FFT_METERS("_l", " Left"),
+            XOVER_LINK("clink", "Left/Right controls link", "L/R link"),
+            COMBO("sel", "Processor selector", "Proc selector", 0.0f, crossover_selector_lr),
+            XOVER_CHANNEL("_l", " Left", " L"),
+            XOVER_CHANNEL("_r", " Right", " R"),
+            XOVER_FFT_METERS("_l", " Left", " L"),
             XOVER_CHANNEL_METERS("_l", " Left"),
-            XOVER_FFT_METERS("_r", " Right"),
+            XOVER_FFT_METERS("_r", " Right", " R"),
             XOVER_CHANNEL_METERS("_r", " Right"),
 
-            XOVER_SPLIT("_1l", " 1 Left", 0, 40.0f),
-            XOVER_SPLIT("_2l", " 2 Left", 1, 100.0f),
-            XOVER_SPLIT("_3l", " 3 Left", 0, 252.0f),
-            XOVER_SPLIT("_4l", " 4 Left", 1, 632.0f),
-            XOVER_SPLIT("_5l", " 5 Left", 0, 1587.0f),
-            XOVER_SPLIT("_6l", " 6 Left", 1, 3984.0f),
-            XOVER_SPLIT("_7l", " 7 Left", 0, 10000.0f),
-
-            XOVER_SPLIT("_1r", " 1 Right", 0, 40.0f),
-            XOVER_SPLIT("_2r", " 2 Right", 1, 100.0f),
-            XOVER_SPLIT("_3r", " 3 Right", 0, 252.0f),
-            XOVER_SPLIT("_4r", " 4 Right", 1, 632.0f),
-            XOVER_SPLIT("_5r", " 5 Right", 0, 1587.0f),
-            XOVER_SPLIT("_6r", " 6 Right", 1, 3984.0f),
-            XOVER_SPLIT("_7r", " 7 Right", 0, 10000.0f),
-
-            XOVER_BAND("_0l", " 0 Left", 0, 8, 10.0f, 40.0f),
-            XOVER_BAND("_1l", " 1 Left", 1, 8, 40.0f, 100.0f),
-            XOVER_BAND("_2l", " 2 Left", 2, 8, 100.0f, 252.0f),
-            XOVER_BAND("_3l", " 3 Left", 3, 8, 252.0f, 632.0f),
-            XOVER_BAND("_4l", " 4 Left", 4, 8, 632.0f, 1587.0f),
-            XOVER_BAND("_5l", " 5 Left", 5, 8, 1587.0f, 3984.0f),
-            XOVER_BAND("_6l", " 6 Left", 6, 8, 3984.0f, 10000.0f),
-            XOVER_BAND("_7l", " 7 Left", 7, 8, 10000.0f, 20000.0f),
-
-            XOVER_BAND("_0r", " 0 Right", 0, 8, 10.0f, 40.0f),
-            XOVER_BAND("_1r", " 1 Right", 1, 8, 40.0f, 100.0f),
-            XOVER_BAND("_2r", " 2 Right", 2, 8, 100.0f, 252.0f),
-            XOVER_BAND("_3r", " 3 Right", 3, 8, 252.0f, 632.0f),
-            XOVER_BAND("_4r", " 4 Right", 4, 8, 632.0f, 1587.0f),
-            XOVER_BAND("_5r", " 5 Right", 5, 8, 1587.0f, 3984.0f),
-            XOVER_BAND("_6r", " 6 Right", 6, 8, 3984.0f, 10000.0f),
-            XOVER_BAND("_7r", " 7 Right", 7, 8, 10000.0f, 20000.0f),
+            XOVER_SPLIT("_1l", " 1 Left", " 1 L", 0, 40.0f),
+            XOVER_SPLIT("_2l", " 2 Left", " 2 L", 1, 100.0f),
+            XOVER_SPLIT("_3l", " 3 Left", " 3 L", 0, 252.0f),
+            XOVER_SPLIT("_4l", " 4 Left", " 4 L", 1, 632.0f),
+            XOVER_SPLIT("_5l", " 5 Left", " 5 L", 0, 1587.0f),
+            XOVER_SPLIT("_6l", " 6 Left", " 6 L", 1, 3984.0f),
+            XOVER_SPLIT("_7l", " 7 Left", " 7 L", 0, 10000.0f),
+
+            XOVER_SPLIT("_1r", " 1 Right", " 1 R", 0, 40.0f),
+            XOVER_SPLIT("_2r", " 2 Right", " 2 R", 1, 100.0f),
+            XOVER_SPLIT("_3r", " 3 Right", " 3 R", 0, 252.0f),
+            XOVER_SPLIT("_4r", " 4 Right", " 4 R", 1, 632.0f),
+            XOVER_SPLIT("_5r", " 5 Right", " 5 R", 0, 1587.0f),
+            XOVER_SPLIT("_6r", " 6 Right", " 6 R", 1, 3984.0f),
+            XOVER_SPLIT("_7r", " 7 Right", " 7 R", 0, 10000.0f),
+
+            XOVER_BAND("_0l", " 0 Left", " 0 L", 0, 8, 10.0f, 40.0f),
+            XOVER_BAND("_1l", " 1 Left", " 1 L", 1, 8, 40.0f, 100.0f),
+            XOVER_BAND("_2l", " 2 Left", " 2 L", 2, 8, 100.0f, 252.0f),
+            XOVER_BAND("_3l", " 3 Left", " 3 L", 3, 8, 252.0f, 632.0f),
+            XOVER_BAND("_4l", " 4 Left", " 4 L", 4, 8, 632.0f, 1587.0f),
+            XOVER_BAND("_5l", " 5 Left", " 5 L", 5, 8, 1587.0f, 3984.0f),
+            XOVER_BAND("_6l", " 6 Left", " 6 L", 6, 8, 3984.0f, 10000.0f),
+            XOVER_BAND("_7l", " 7 Left", " 7 L", 7, 8, 10000.0f, 20000.0f),
+
+            XOVER_BAND("_0r", " 0 Right", " 0 R", 0, 8, 10.0f, 40.0f),
+            XOVER_BAND("_1r", " 1 Right", " 1 R", 1, 8, 40.0f, 100.0f),
+            XOVER_BAND("_2r", " 2 Right", " 2 R", 2, 8, 100.0f, 252.0f),
+            XOVER_BAND("_3r", " 3 Right", " 3 R", 3, 8, 252.0f, 632.0f),
+            XOVER_BAND("_4r", " 4 Right", " 4 R", 4, 8, 632.0f, 1587.0f),
+            XOVER_BAND("_5r", " 5 Right", " 5 R", 5, 8, 1587.0f, 3984.0f),
+            XOVER_BAND("_6r", " 6 Right", " 6 R", 6, 8, 3984.0f, 10000.0f),
+            XOVER_BAND("_7r", " 7 Right", " 7 R", 7, 8, 10000.0f, 20000.0f),
 
             XOVER_BAND_METER_STEREO("_0", " 0"),
             XOVER_BAND_METER_STEREO("_1", " 1"),
@@ -391,48 +395,49 @@ namespace lsp
             AUDIO_OUTPUT("band7s", "Band Output 7 Side"),
 
             XOVER_COMMON,
-            COMBO("sel", "Processor selector", 0.0f, crossover_selector_ms),
-            SWITCH("msout", "Mid/Side output", 0.0f),
-            XOVER_CHANNEL("_m", " Mid"),
-            XOVER_CHANNEL("_s", " Side"),
-            XOVER_FFT_METERS("_m", " Mid"),
+            XOVER_LINK("clink", "Mid/Side controls link", "M/S link"),
+            COMBO("sel", "Processor selector", "Proc selector", 0.0f, crossover_selector_ms),
+            SWITCH("msout", "Mid/Side output", "M/S output", 0.0f),
+            XOVER_CHANNEL("_m", " Mid", " M"),
+            XOVER_CHANNEL("_s", " Side", " S"),
+            XOVER_FFT_METERS("_m", " Mid", " M"),
             XOVER_CHANNEL_METERS("_l", " Left"),
-            XOVER_FFT_METERS("_s", " Mid"),
+            XOVER_FFT_METERS("_s", " Side", " S"),
             XOVER_CHANNEL_METERS("_r", " Right"),
 
-            XOVER_SPLIT("_1m", " 1 Mid", 0, 40.0f),
-            XOVER_SPLIT("_2m", " 2 Mid", 1, 100.0f),
-            XOVER_SPLIT("_3m", " 3 Mid", 0, 252.0f),
-            XOVER_SPLIT("_4m", " 4 Mid", 1, 632.0f),
-            XOVER_SPLIT("_5m", " 5 Mid", 0, 1587.0f),
-            XOVER_SPLIT("_6m", " 6 Mid", 1, 3984.0f),
-            XOVER_SPLIT("_7m", " 7 Mid", 0, 10000.0f),
-
-            XOVER_SPLIT("_1s", " 1 Side", 0, 40.0f),
-            XOVER_SPLIT("_2s", " 2 Side", 1, 100.0f),
-            XOVER_SPLIT("_3s", " 3 Side", 0, 252.0f),
-            XOVER_SPLIT("_4s", " 4 Side", 1, 632.0f),
-            XOVER_SPLIT("_5s", " 5 Side", 0, 1587.0f),
-            XOVER_SPLIT("_6s", " 6 Side", 1, 3984.0f),
-            XOVER_SPLIT("_7s", " 7 Side", 0, 10000.0f),
-
-            XOVER_BAND("_0m", " 0 Mid", 0, 8, 10.0f, 40.0f),
-            XOVER_BAND("_1m", " 1 Mid", 1, 8, 40.0f, 100.0f),
-            XOVER_BAND("_2m", " 2 Mid", 2, 8, 100.0f, 252.0f),
-            XOVER_BAND("_3m", " 3 Mid", 3, 8, 252.0f, 632.0f),
-            XOVER_BAND("_4m", " 4 Mid", 4, 8, 632.0f, 1587.0f),
-            XOVER_BAND("_5m", " 5 Mid", 5, 8, 1587.0f, 3984.0f),
-            XOVER_BAND("_6m", " 6 Mid", 6, 8, 3984.0f, 10000.0f),
-            XOVER_BAND("_7m", " 7 Mid", 7, 8, 10000.0f, 20000.0f),
-
-            XOVER_BAND("_0s", " 0 Side", 0, 8, 10.0f, 40.0f),
-            XOVER_BAND("_1s", " 1 Side", 1, 8, 40.0f, 100.0f),
-            XOVER_BAND("_2s", " 2 Side", 2, 8, 100.0f, 252.0f),
-            XOVER_BAND("_3s", " 3 Side", 3, 8, 252.0f, 632.0f),
-            XOVER_BAND("_4s", " 4 Side", 4, 8, 632.0f, 1587.0f),
-            XOVER_BAND("_5s", " 5 Side", 5, 8, 1587.0f, 3984.0f),
-            XOVER_BAND("_6s", " 6 Side", 6, 8, 3984.0f, 10000.0f),
-            XOVER_BAND("_7s", " 7 Side", 7, 8, 10000.0f, 20000.0f),
+            XOVER_SPLIT("_1m", " 1 Mid", " 1 M", 0, 40.0f),
+            XOVER_SPLIT("_2m", " 2 Mid", " 2 M", 1, 100.0f),
+            XOVER_SPLIT("_3m", " 3 Mid", " 3 M", 0, 252.0f),
+            XOVER_SPLIT("_4m", " 4 Mid", " 4 M", 1, 632.0f),
+            XOVER_SPLIT("_5m", " 5 Mid", " 5 M", 0, 1587.0f),
+            XOVER_SPLIT("_6m", " 6 Mid", " 6 M", 1, 3984.0f),
+            XOVER_SPLIT("_7m", " 7 Mid", " 7 M", 0, 10000.0f),
+
+            XOVER_SPLIT("_1s", " 1 Side", " 1 S", 0, 40.0f),
+            XOVER_SPLIT("_2s", " 2 Side", " 2 S", 1, 100.0f),
+            XOVER_SPLIT("_3s", " 3 Side", " 3 S", 0, 252.0f),
+            XOVER_SPLIT("_4s", " 4 Side", " 4 S", 1, 632.0f),
+            XOVER_SPLIT("_5s", " 5 Side", " 5 S", 0, 1587.0f),
+            XOVER_SPLIT("_6s", " 6 Side", " 6 S", 1, 3984.0f),
+            XOVER_SPLIT("_7s", " 7 Side", " 7 S", 0, 10000.0f),
+
+            XOVER_BAND("_0m", " 0 Mid", " 0 M", 0, 8, 10.0f, 40.0f),
+            XOVER_BAND("_1m", " 1 Mid", " 1 M", 1, 8, 40.0f, 100.0f),
+            XOVER_BAND("_2m", " 2 Mid", " 2 M", 2, 8, 100.0f, 252.0f),
+            XOVER_BAND("_3m", " 3 Mid", " 3 M", 3, 8, 252.0f, 632.0f),
+            XOVER_BAND("_4m", " 4 Mid", " 4 M", 4, 8, 632.0f, 1587.0f),
+            XOVER_BAND("_5m", " 5 Mid", " 5 M", 5, 8, 1587.0f, 3984.0f),
+            XOVER_BAND("_6m", " 6 Mid", " 6 M", 6, 8, 3984.0f, 10000.0f),
+            XOVER_BAND("_7m", " 7 Mid", " 7 M", 7, 8, 10000.0f, 20000.0f),
+
+            XOVER_BAND("_0s", " 0 Side", " 0 S", 0, 8, 10.0f, 40.0f),
+            XOVER_BAND("_1s", " 1 Side", " 1 S", 1, 8, 40.0f, 100.0f),
+            XOVER_BAND("_2s", " 2 Side", " 2 S", 2, 8, 100.0f, 252.0f),
+            XOVER_BAND("_3s", " 3 Side", " 3 S", 3, 8, 252.0f, 632.0f),
+            XOVER_BAND("_4s", " 4 Side", " 4 S", 4, 8, 632.0f, 1587.0f),
+            XOVER_BAND("_5s", " 5 Side", " 5 S", 5, 8, 1587.0f, 3984.0f),
+            XOVER_BAND("_6s", " 6 Side", " 6 S", 6, 8, 3984.0f, 10000.0f),
+            XOVER_BAND("_7s", " 7 Side", " 7 S", 7, 8, 10000.0f, 20000.0f),
 
             XOVER_BAND_METER_MS("_0", " 0"),
             XOVER_BAND_METER_MS("_1", " 1"),
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/src/main/plug/crossover.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/src/main/plug/crossover.cpp
--- 1.2.21-5/modules/lsp-plugins-crossover/src/main/plug/crossover.cpp	2025-03-01 12:43:02.176616069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/src/main/plug/crossover.cpp	2025-08-26 18:15:50.881933840 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-crossover
  * Created on: 3 авг. 2021 г.
@@ -287,7 +287,10 @@ namespace lsp
             BIND_PORT(pZoom);
 
             if ((nMode == XOVER_LR) || (nMode == XOVER_MS))
+            {
+                SKIP_PORT("Separate channels link");
                 SKIP_PORT("Processor selector");
+            }
 
             if (nMode == XOVER_MS)
                 BIND_PORT(pMSOut);
diff -pruN 1.2.21-5/modules/lsp-plugins-crossover/src/main/ui/crossover.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/src/main/ui/crossover.cpp
--- 1.2.21-5/modules/lsp-plugins-crossover/src/main/ui/crossover.cpp	2025-03-01 12:43:02.176616069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-crossover/src/main/ui/crossover.cpp	2025-08-26 18:15:50.881933840 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-crossover
  * Created on: 3 авг. 2021 г.
@@ -178,7 +178,8 @@ namespace lsp
 
         void crossover_ui::add_splits()
         {
-            for (const char **fmt = fmtStrings; *fmt != NULL; ++fmt)
+            size_t channel      = 0;
+            for (const char **fmt = fmtStrings; *fmt != NULL; ++fmt, ++channel)
             {
                 for (size_t port_id=1; port_id<meta::crossover_metadata::BANDS_MAX; ++port_id)
                 {
@@ -189,6 +190,7 @@ namespace lsp
                     s.wMarker       = find_split_widget<tk::GraphMarker>(*fmt, "split_marker", port_id);
                     s.wNote         = find_split_widget<tk::GraphText>(*fmt, "split_note", port_id);
 
+                    s.nChannel      = channel;
                     s.pFreq         = find_port(*fmt, "sf", port_id);
                     s.pSlope        = find_port(*fmt, "frs", port_id);
 
@@ -338,7 +340,10 @@ namespace lsp
                     update_split_note_text(s);
 
                     if (flags & ui::PORT_USER_EDIT)
-                        freq_initiator = s;
+                    {
+                        if (s->bOn)
+                            freq_initiator = s;
+                    }
                     else if (s->bOn)
                         need_resort_active_splits = true;
                 }
@@ -361,7 +366,7 @@ namespace lsp
             for (lltl::iterator<split_t> it = vActiveSplits.values(); it; ++it)
             {
                 split_t *s = it.get();
-                if (!s->bOn)
+                if ((!s->bOn) || (s->nChannel != initiator->nChannel))
                     continue;
 
                 // Main logic
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/.github/workflows/build.yml	2025-03-01 12:43:04.920599597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/.github/workflows/build.yml	2025-08-26 18:15:55.297890982 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/CHANGELOG	2025-03-01 12:43:04.920599597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/CHANGELOG	2025-08-26 18:15:55.297890982 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.30 ===
+* Added audio pre-mixing controls.
+* Added left/right and mid/side linking in the UI.
+* Updated build scripts and dependencies.
+
+=== 1.0.29 ===
+* Updated build scripts and dependencies.
+
 === 1.0.28 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/dependencies.mk	2025-03-01 12:43:04.920599597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/dependencies.mk	2025-08-26 18:15:55.297890982 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/include/private/plugins/dyna_processor.h 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/include/private/plugins/dyna_processor.h
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/include/private/plugins/dyna_processor.h	2025-03-01 12:43:04.920599597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/include/private/plugins/dyna_processor.h	2025-08-26 18:15:55.297890982 +0000
@@ -92,6 +92,32 @@ namespace lsp
                     S_ALL       = S_MODEL
                 };
 
+                typedef struct premix_t
+                {
+                    float                   fInToSc;            // Input -> Sidechain mix
+                    float                   fInToLink;          // Input -> Link mix
+                    float                   fLinkToIn;          // Link -> Input mix
+                    float                   fLinkToSc;          // Link -> Sidechain mix
+                    float                   fScToIn;            // Sidechain -> Input mix
+                    float                   fScToLink;          // Sidechain -> Link mix
+
+                    float                  *vIn[2];             // Input buffer
+                    float                  *vOut[2];            // Output buffer
+                    float                  *vSc[2];             // Sidechain buffer
+                    float                  *vLink[2];           // Link buffer
+
+                    float                  *vTmpIn[2];          // Replacement buffer for input
+                    float                  *vTmpLink[2];        // Replacement buffer for link
+                    float                  *vTmpSc[2];          // Replacement buffer for sidechain
+
+                    plug::IPort            *pInToSc;            // Input -> Sidechain mix
+                    plug::IPort            *pInToLink;          // Input -> Link mix
+                    plug::IPort            *pLinkToIn;          // Link -> Input mix
+                    plug::IPort            *pLinkToSc;          // Link -> Sidechain mix
+                    plug::IPort            *pScToIn;            // Sidechain -> Input mix
+                    plug::IPort            *pScToLink;          // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct channel_t
                 {
                     dspu::Bypass            sBypass;            // Bypass
@@ -176,6 +202,8 @@ namespace lsp
                 bool                    bUISync;
                 core::IDBuffer         *pIDisplay;      // Inline display buffer
 
+                premix_t                sPremix;        // Pre-mix settings
+
                 plug::IPort            *pBypass;        // Bypass port
                 plug::IPort            *pInGain;        // Input gain
                 plug::IPort            *pOutGain;       // Output gain
@@ -193,6 +221,8 @@ namespace lsp
 
             protected:
                 inline float       *select_buffer(const channel_t & c, float *in, float *sc, float *shm);
+                void                update_premix();
+                void                premix_channel(uint32_t channel, float * & in, float * & out, float * & sc, float * & link, size_t count);
                 float               process_feedback(channel_t *c, size_t i, size_t channels);
                 void                process_non_feedback(channel_t *c, float **in, size_t samples);
                 void                do_destroy();
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/make/tools.mk	2025-03-01 12:43:04.920599597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/make/tools.mk	2025-08-26 18:15:55.297890982 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/modules.mk
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/modules.mk	2025-03-01 12:43:04.920599597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/modules.mk	2025-08-26 18:15:55.297890982 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/project.mk
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/project.mk	2025-03-01 12:43:04.920599597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/project.mk	2025-08-26 18:15:55.297890982 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Dynamic Processor Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.28
+ARTIFACT_VERSION            = 1.0.30
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-dyna-processor/res/doc/screenshots/dyna_processor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/doc/screenshots/dyna_processor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-dyna-processor/res/doc/screenshots/dyna_processor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/doc/screenshots/dyna_processor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-dyna-processor/res/doc/screenshots/dyna_processor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/doc/screenshots/dyna_processor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-dyna-processor/res/doc/screenshots/dyna_processor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/doc/screenshots/dyna_processor_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-dyna-processor/res/doc/screenshots/sc_dyna_processor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/doc/screenshots/sc_dyna_processor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-dyna-processor/res/doc/screenshots/sc_dyna_processor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/doc/screenshots/sc_dyna_processor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-dyna-processor/res/doc/screenshots/sc_dyna_processor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/doc/screenshots/sc_dyna_processor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-dyna-processor/res/doc/screenshots/sc_dyna_processor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/doc/screenshots/sc_dyna_processor_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/lr.xml
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/lr.xml	2025-03-01 12:43:04.936599502 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/lr.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,455 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="486" height.min="212" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="isg_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv_l"/>
-						<mesh id="isg_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilv_r"/>
-						<mesh id="osg_l" width="2" color="left" visibility=":olv_l"/>
-						<mesh id="osg_r" width="2" color="right" visibility=":olv_r"/>
-						<mesh id="scg_l" width="2" color="sidechain_1" visibility=":slv_l"/>
-						<mesh id="scg_r" width="2" color="sidechain_2" visibility=":slv_r"/>
-						<mesh id="evg_l" width="2" color="envelope_1" visibility=":elv_l"/>
-						<mesh id="evg_r" width="2" color="envelope_2" visibility=":elv_r"/>
-						<mesh id="grg_l" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_l"/>
-						<mesh id="grg_r" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_r"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<button id="cmv_l" height="22" width="48" text="labels.left" pad.v="4" ui:inject="Button_left"/>
-					<button id="cmv_r" height="22" width="48" text="labels.right" pad.v="4" ui:inject="Button_right"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" vexpand="true">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_l" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_r" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_l" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_r" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_l" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_r" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="slm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="elm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="rlm_l" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_r" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.curve">
-				<!-- Curve graph -->
-				<graph width.min="246" height.min="246" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker id="omk_l" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_2" width="2" smooth="true" visibility=":cmv_l"/>
-					<marker id="omk_r" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_2" width="2" smooth="true" visibility=":cmv_r"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="cmg_l" width="2" color="left" smooth="true" visibility=":cmv_l"/>
-					<mesh id="cmg_r" width="2" color="right" smooth="true" visibility=":cmv_r"/>
-					<mesh id="ccg_l" width="3" color="left" smooth="true" visibility=":cmv_l"/>
-					<mesh id="ccg_r" width="3" color="right" smooth="true" visibility=":cmv_r"/>
-
-					<!-- Markers -->
-					<ui:for id="i" first="0" count="4">
-						<marker id="al${i}_l" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold" smooth="true" visibility=":cmv_l and :ae${i}_l"/>
-						<text x=":al${i}_l" y="24 db" text="graph.values.idL_eft" text:id="${i}" color="threshold" halign="-1" valign="-1" visibility=":cmv_l and :ae${i}_l"/>
-						<marker id="al${i}_r" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold" smooth="true" visibility=":cmv_r and :ae${i}_r"/>
-						<text x=":al${i}_r" y="24 db" text="graph.values.idR_ight" text:id="${i}" color="threshold" halign="1" valign="-1" visibility=":cmv_r and :ae${i}_r"/>
-					</ui:for>
-					<ui:for id="i" first="0" count="4">
-						<marker id="rl${i}_l" editable="true" width="2" pointer="hsize" color="release" hcolor="release" smooth="true" visibility=":cmv_l and :re${i}_l"/>
-						<text x=":rl${i}_l" y="-72 db" text="graph.values.idL_eft" text:id="${i}" color="release" halign="-1" valign="1" visibility=":cmv_l and :re${i}_l"/>
-						<marker id="rl${i}_r" editable="true" width="2" pointer="hsize" basis="0" color="release" hcolor="release" parallel="1" smooth="true" visibility=":cmv_r and :re${i}_r"/>
-						<text x=":rl${i}_r" y="-72 db" text="graph.values.idR_ight" text:id="${i}" color="release" halign="1" valign="1" visibility=":cmv_r and :re${i}_r"/>
-					</ui:for>
-
-					<!-- Dots -->
-					<ui:for id="i" first="0" count="4">
-						<dot x.id="tl${i}_l" y.id="gl${i}_l" z.id="kn${i}_l" x.editable="true" y.editable="true" z.editable="true" color="left" hover.color="left" bcolor="left" hover.bcolor="left" pointer="drag" visibility=":cmv_l and :pe${i}_l"/>
-						<dot x.id="tl${i}_r" y.id="gl${i}_r" z.id="kn${i}_r" x.editable="true" y.editable="true" z.editable="true" color="right" hover.color="right" bcolor="right" hover.bcolor="right" pointer="drag" visibility=":cmv_r and :pe${i}_r"/>
-					</ui:for>
-					<ui:for id="i" first="0" count="4">
-						<text x=":tl${i}_l" y=":gl${i}_l" text="graph.values.idL_eft" text:id="${i}" color="left" halign="-1" valign="1" visibility=":cmv_l and :pe${i}_l"/>
-						<text x=":tl${i}_r" y=":gl${i}_r" text="graph.values.idR_ight" text:id="${i}" color="right" halign="1" valign="-1" visibility=":cmv_r and :pe${i}_r"/>
-					</ui:for>
-
-					<dot x.id="elm_l" y.id="clm_l" color="left" hover.color="left" bcolor="left" hover.bcolor="left" visibility=":cmv_l"/>
-					<dot x.id="elm_r" y.id="clm_r" color="right" hover.color="right" bcolor="right" hover.bcolor="right" visibility=":cmv_r"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" vexpand="true" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="ilv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="olv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="ilm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left_in"/>
-					<ledchannel id="ilm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="olm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left"/>
-					<ledchannel id="olm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-
-		<cgroup id="psel" vexpand="false" vreduce="true" ipadding="0">
-			<ui:for id="p" first="0" last="1">
-				<ui:set id="chn" value="${(:p mod 2) ? 'labels.chan.id_R_ight' : 'labels.chan.id_L_eft'}"/>
-				<ui:set id="ch" value="${(:p mod 2) ? '_r' : '_l'}"/>
-				<ui:set id="chc" value="${(:p mod 2) ? 'right' : 'left'}"/>
-				<hbox>
-					<!-- sidechain -->
-					<hbox spacing="0" bg.color="bg_schema">
-
-						<grid rows="11" cols="1" spacing="0">
-							<label text="labels.sc.preamp" pad.h="6" pad.v="4" vreduce="true"/>
-							<knob id="scp${ch}" scolor="${chc}"/>
-							<value id="scp${ch}" sline="true" width.min="48"/>
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<label text="labels.sc.reactivity" pad.h="6" pad.v="4" vreduce="true"/>
-							<knob id="scr${ch}" scolor="${chc}"/>
-							<value id="scr${ch}" sline="true"/>
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<label text="labels.sc.lookahead" pad.h="6" pad.v="4" vreduce="true"/>
-							<knob id="sla${ch}" scolor="${chc}"/>
-							<value id="sla${ch}" sline="true"/>
-						</grid>
-						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-						<vbox>
-							<label text="labels.setup" pad.h="6" pad.t="4" fill="false" vreduce="true"/>
-
-							<vbox fill="false" spacing="1">
-								<ui:with pad.h="6" pad.b="4">
-									<combo id="sct${ch}" fill="true" pad.t="4"/>
-									<combo id="scm${ch}" fill="true"/>
-									<combo id="scs${ch}" fill="true"/>
-									<button id="scl${ch}" height="22" hfill="true" pad.b="6" text="labels.listen" ui:inject="Button_${chc}"/>
-								</ui:with>
-							</vbox>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<label text="labels.flt.HPF" pad.h="6" pad.v="4" vreduce="true" bright="(:shpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:shpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<combo id="shpm${ch}" pad.h="6" fill="true" bright="(:shpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:shpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<knob id="shpf${ch}" pad.v="4" size="16" ssize="3" scolor="(:shpm${ch} igt 0) ? '${chc}' : '${chc}_inactive'" bg.bright="(:shpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<value id="shpf${ch}" pad.b="4" sline="true" bright="(:shpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:shpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<label text="labels.flt.LPF" pad.h="6" pad.v="4" vreduce="true" bright="(:slpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:slpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<combo id="slpm${ch}" pad.h="6" fill="true" bright="(:slpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:slpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<knob id="slpf${ch}" pad.v="4" size="16" ssize="3" scolor="(:slpm${ch} igt 0) ? '${chc}' : '${chc}_inactive'" bg.bright="(:slpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<value id="slpf${ch}" pad.b="4" sline="true" bright="(:slpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:slpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-						</vbox>
-					</hbox>
-
-					<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-
-					<!-- right part -->
-
-					<grid rows="1" cols="3" spacing="0" hexpand="true" bg.color="bg_schema">
-						<!-- Processors controls -->
-						<grid rows="13" cols="13" spacing="0" bg.color="bg_schema">
-							<label text="labels.specials.num" pad.h="6" pad.v="4" reduce="true"/>
-							<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<label text="labels.enable" pad.h="6" pad.v="4" reduce="true"/>
-							<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<label text="labels.thresh_old:db" pad.h="6" pad.v="4"/>
-							<label text="labels.gain:db" pad.h="6" pad.v="4"/>
-							<label text="labels.knee_:db" pad.h="6" pad.v="4"/>
-							<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<cell cols="2"><label text="labels.attack:db_ms" pad.h="6" pad.v="4"/></cell>
-							<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<cell cols="2"><label text="labels.release:db_ms" pad.h="6" pad.v="4"/></cell>
-
-							<ui:for id="c" first="0" last="3">
-								<ui:set id="i" value="${c}${ch}"/>
-
-								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-								<cell cols="3"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-								<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-								<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-
-								<cell rows="2" pad.h="4" wmin="19"><label text="${chn}" text:id="${c}"/></cell>
-								<cell rows="2">
-									<vbox fill="false" pad="6" spacing="4">
-										<button id="pe${i}" width.min="43" fill="true" height="10" text="labels.threshold" ui:inject="Button_violet_6"/>
-										<button id="ae${i}" width.min="43" fill="true" height="10" text="labels.attack" ui:inject="Button_magenta_6"/>
-										<button id="re${i}" width.min="43" fill="true" height="10" text="labels.release" ui:inject="Button_green_6"/>
-									</vbox>
-								</cell>
-								<ui:with pad.h="6" pad.v="4" size="20">
-									<knob id="tl${i}" scolor="(:pe${i} igt 0) ? 'threshold' : 'threshold_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="gl${i}" scolor="(:pe${i} igt 0) ? '${chc}' : '${chc}_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="kn${i}" scolor="(:pe${i} igt 0) ? '${chc}' : '${chc}_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="al${i}" scolor="(:ae${i} igt 0) ? 'attack_1' : 'attack_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="at${i}" scolor="(:ae${i} igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="rl${i}" scolor="(:re${i} igt 0) ? 'release_1' : 'release_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="rt${i}" scolor="(:re${i} igt 0) ? 'release_2' : 'release_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-								</ui:with>
-								<ui:with pad.h="6" pad.v="4">
-									<value id="tl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="gl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="kn${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="al${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="at${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="rl${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="rt${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-								</ui:with>
-							</ui:for>
-						</grid>
-
-						<cell rows="11" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-
-						<!-- ratio attack release makeup dry wet -->
-						<grid rows="11" cols="5" transpose="true" spacing="0" bg.color="bg_schema">
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.ratio_low" width.min="53"/>
-								<knob id="llr${ch}" size="20" scolor="${chc}"/>
-								<value id="llr${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.attack" width.min="53"/>
-								<knob id="atd${ch}" size="20" scolor="attack"/>
-								<value id="atd${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.signal.dry" width.min="53"/>
-								<knob id="cdr${ch}" scolor="dry" size="20"/>
-								<value id="cdr${ch}"/>
-							</ui:with>
-
-							<cell rows="8"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<cell rows="3"><void bg.color="bg_schema" pad.h="2" hreduce="true"/></cell>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.ratio_high" width.min="53"/>
-								<knob id="hlr${ch}" size="20" scolor="${chc}"/>
-								<value id="hlr${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.release" width.min="53"/>
-								<knob id="rtd${ch}" size="20" scolor="release"/>
-								<value id="rtd${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.signal.wet" width.min="53"/>
-								<knob id="cwt${ch}" scolor="wet" size="20"/>
-								<value id="cwt${ch}"/>
-							</ui:with>
-
-							<cell rows="11"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.makeup" width.min="53"/>
-								<knob id="omk${ch}" size="20" scolor="${chc}"/>
-								<value id="omk${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.hold" width.min="53"/>
-								<knob id="hold${ch}" size="20"/>
-								<value id="hold${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.signal.drywet" width.min="53"/>
-								<knob id="cdw${ch}" scolor="drywet" size="20"/>
-								<value id="cdw${ch}"/>
-							</ui:with>
-						</grid>
-
-					</grid>
-
-				</hbox>
-			</ui:for>
-		</cgroup>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/mono.xml
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/mono.xml	2025-03-01 12:43:04.936599502 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/mono.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,409 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="486" height.min="212" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="isg" width="0" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilv"/>
-						<mesh id="osg" width="2" color="mono" visibility=":olv"/>
-						<mesh id="scg" width="2" color="sidechain_1" visibility=":slv"/>
-						<mesh id="evg" width="2" color="envelope_1" visibility=":elv"/>
-						<mesh id="grg" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<button id="cmv" size="16" width="48" text="labels.model" pad.v="4" ui:inject="Button_yellow"/>
-					<void hexpand="true" />
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" vexpand="true">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-					<button id="slv" height="10" width="22" ui:inject="Button_orange" led="true"/>
-					<button id="elv" height="10" width="22" ui:inject="Button_violet" led="true"/>
-					<button id="grv" height="10" width="22" ui:inject="Button_blue" led="true"/>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="slm" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="elm" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="rlm" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.curve">
-				<!-- Curve graph -->
-				<graph width.min="246" height.min="246" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker id="omk" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_2" width="2" smooth="true" visibility=":cmv"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="cmg" width="2" color="graph_mesh" smooth="true" visibility=":cmv"/>
-					<mesh id="ccg" width="3" color="graph_mesh" smooth="true"/>
-
-					<!-- Markers -->
-					<ui:for id="i" first="0" count="4">
-						<marker id="al${i}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold" smooth="true" visibility=":cmv and :ae${i}"/>
-						<text x=":al${i}" y="24 db" text="${i}" color="threshold" halign="-1" valign="-1" visibility=":cmv and :ae${i}"/>
-					</ui:for>
-					<ui:for id="i" first="0" count="4">
-						<marker id="rl${i}" editable="true" width="2" pointer="hsize" color="release" hcolor="release" smooth="true" visibility=":cmv and :re${i}"/>
-						<text x=":rl${i}" y="-72 db" text="${i}" color="release" halign="-1" valign="1" visibility=":cmv and :re${i}"/>
-					</ui:for>
-
-					<!-- Dots -->
-					<ui:for id="i" first="0" count="4">
-						<dot x.id="tl${i}" y.id="gl${i}" z.id="kn${i}" x.editable="true" y.editable="true" z.editable="true" color="graph_mesh" hover.color="graph_mesh" bcolor="graph_mesh" hover.bcolor="graph_mesh" pointer="drag" visibility=":pe${i}"/>
-					</ui:for>
-					<ui:for id="i" first="0" count="4">
-						<text x=":tl${i}" y=":gl${i}" text="${i}" color="graph_mesh" halign="-1" valign="1" visibility=":pe${i}"/>
-					</ui:for>
-
-					<dot x.id="elm" y.id="clm" color="graph_mesh" hover.color="graph_mesh" bcolor="graph_mesh" hover.bcolor="graph_mesh"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" vexpand="true" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-					<button id="ilv" height="10" width="22" ui:inject="Button_left" led="true"/>
-					<button id="olv" height="10" width="22" ui:inject="Button_left" led="true"/>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="ilm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="olm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-
-		<group text="groups.plug.processor" vexpand="false" vreduce="true" ipadding="0">
-			<hbox>
-				<!-- sidechain -->
-				<grid rows="11" cols="3" spacing="0" bg.color="bg_schema">
-						<label text="labels.sc.preamp" pad.h="6" pad.v="4" vreduce="true"/>
-						<cell rows="11"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<label text="labels.setup" pad.h="6" pad.v="4" vreduce="true"/>
-						<knob id="scp" scolor="kscale"/>
-						<cell rows="2">
-							<vbox fill="false" spacing="1">
-							<ui:with pad.h="6" pad.b="4">
-								<combo id="sct" fill="true" pad.t="4"/>
-								<combo id="scm" fill="true"/>
-								<button id="scl" height="22" hfill="true" pad.b="6" text="labels.listen" ui:inject="Button_cyan"/>
-							</ui:with>
-						</vbox>
-					</cell>
-
-						<value id="scp" sline="true" width.min="48"/>
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-						<label text="labels.sc.reactivity" pad.h="6" pad.v="4" vreduce="true"/>
-						<cell rows="3" pad.h="6" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken">
-							<vbox spacing="1">
-								<label text="labels.flt.HPF"  pad.v="4" vreduce="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-								<combo id="shpm"  fill="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="shpf" pad.v="4" size="16" ssize="3" scolor="(:shpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-								<value id="shpf" pad.b="4" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-						</vbox>
-					</cell>
-					<knob id="scr" scolor="kscale"/>
-					<value id="scr" sline="true"/>
-					<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-					<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-						<label text="labels.sc.lookahead" pad.h="6" pad.v="4" vreduce="true"/>
-						<cell rows="3" pad.h="6" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken">
-							<vbox spacing="1">
-								<label text="labels.flt.LPF"  pad.v="4" vreduce="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-								<combo id="slpm" fill="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="slpf" pad.v="4" size="16" ssize="3" scolor="(:slpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-								<value id="slpf" pad.b="4" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-						</vbox>
-					</cell>
-					<knob id="sla" scolor="kscale"/>
-					<value id="sla" sline="true"/>
-					</grid>
-
-				<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-
-				<!-- right part -->
-
-				<grid rows="1" cols="3" spacing="0" hexpand="true" bg.color="bg_schema">
-					<!-- Processors controls -->
-					<grid rows="13" cols="13" spacing="0" bg.color="bg_schema">
-						<label text="labels.specials.num" pad.h="6" pad.v="4" reduce="true"/>
-						<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<label text="labels.enable" pad.h="6" pad.v="4" reduce="true"/>
-						<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<label text="labels.thresh_old:db" pad.h="6" pad.v="4"/>
-						<label text="labels.gain:db" pad.h="6" pad.v="4"/>
-						<label text="labels.knee_:db" pad.h="6" pad.v="4"/>
-						<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<cell cols="2"><label text="labels.attack:db_ms" pad.h="6" pad.v="4"/></cell>
-						<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<cell cols="2"><label text="labels.release:db_ms" pad.h="6" pad.v="4"/></cell>
-
-						<ui:for id="c" first="0" last="3">
-							<ui:set id="i" value="${c}"/>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<cell cols="3"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-							<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-							<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-
-							<cell rows="2" pad.h="4" wmin="19"><label text="${c}"/></cell>
-							<cell rows="2">
-								<vbox fill="false" pad="6" spacing="4">
-									<button id="pe${i}" width.min="43" fill="true" height="10" text="labels.threshold" ui:inject="Button_violet_6"/>
-									<button id="ae${i}" width.min="43" fill="true" height="10" text="labels.attack" ui:inject="Button_magenta_6"/>
-									<button id="re${i}" width.min="43" fill="true" height="10" text="labels.release" ui:inject="Button_green_6"/>
-								</vbox>
-							</cell>
-							<ui:with pad.h="6" pad.v="4" size="20">
-								<knob id="tl${i}" scolor="(:pe${i} igt 0) ? 'threshold' : 'threshold_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="gl${i}" scolor="(:pe${i} igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="kn${i}" scolor="(:pe${i} igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="al${i}" scolor="(:ae${i} igt 0) ? 'attack_1' : 'attack_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="at${i}" scolor="(:ae${i} igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="rl${i}" scolor="(:re${i} igt 0) ? 'release_1' : 'release_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="rt${i}" scolor="(:re${i} igt 0) ? 'release_2' : 'release_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-							</ui:with>
-							<ui:with pad.h="6" pad.v="4">
-								<value id="tl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="gl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="kn${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="al${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="at${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="rl${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="rt${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-							</ui:with>
-						</ui:for>
-					</grid>
-
-					<cell rows="11" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-
-					<!-- ratio attack release makeup dry wet -->
-					<grid rows="11" cols="5" transpose="true" spacing="0" bg.color="bg_schema">
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.ratio_low" width.min="53"/>
-							<knob id="llr" size="20" />
-							<value id="llr"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.attack" width.min="53"/>
-							<knob id="atd" size="20" scolor="attack"/>
-							<value id="atd"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.signal.dry" width.min="53"/>
-							<knob id="cdr" scolor="dry" size="20"/>
-							<value id="cdr"/>
-						</ui:with>
-
-						<cell rows="8"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<cell rows="3"><void bg.color="bg_schema" pad.h="2" hreduce="true"/></cell>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.ratio_high" width.min="53"/>
-							<knob id="hlr" size="20" />
-							<value id="hlr"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.release" width.min="53"/>
-							<knob id="rtd" size="20" scolor="release"/>
-							<value id="rtd"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.signal.wet" width.min="53"/>
-							<knob id="cwt" scolor="wet" size="20"/>
-							<value id="cwt"/>
-						</ui:with>
-
-						<cell rows="11"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.makeup" width.min="53"/>
-							<knob id="omk" size="20"/>
-							<value id="omk"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.hold" width.min="53"/>
-							<knob id="hold" size="20"/>
-							<value id="hold"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.signal.drywet" width.min="53"/>
-							<knob id="cdw" scolor="drywet" size="20"/>
-							<value id="cdw"/>
-						</ui:with>
-					</grid>
-
-				</grid>
-			</hbox>
-		</group>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/ms.xml
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/ms.xml	2025-03-01 12:43:04.936599502 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/ms.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,456 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="486" height.min="212" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="isg_m" width="0" color="mid_in" fcolor="mid_in" fcolor.a="0.8" fill="true" visibility=":ilv_m"/>
-						<mesh id="isg_s" width="0" color="side_in" fcolor="side_in" fcolor.a="0.8" fill="true" visibility=":ilv_s"/>
-						<mesh id="osg_m" width="2" color="mid" visibility=":olv_m"/>
-						<mesh id="osg_s" width="2" color="side" visibility=":olv_s"/>
-						<mesh id="scg_m" width="2" color="sidechain_1" visibility=":slv_m"/>
-						<mesh id="scg_s" width="2" color="sidechain_2" visibility=":slv_s"/>
-						<mesh id="evg_m" width="2" color="envelope_1" visibility=":elv_m"/>
-						<mesh id="evg_s" width="2" color="envelope_2" visibility=":elv_s"/>
-						<mesh id="grg_m" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_m"/>
-						<mesh id="grg_s" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_s"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<button id="cmv_m" height="22" width="48" text="labels.chan.mid" pad.v="4" ui:inject="Button_mid"/>
-					<button id="cmv_s" height="22" width="48" text="labels.chan.side" pad.v="4" ui:inject="Button_side"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<button id="msl" height="22" width="48" text="labels.ms_listen" pad.v="4" ui:inject="Button_yellow" pad.h="2"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" vexpand="true">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_m" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_s" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_m" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_s" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_m" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_s" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="slm_m" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_s" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="elm_m" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_s" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="rlm_m" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_s" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.curve">
-				<!-- Curve graph -->
-				<graph width.min="246" height.min="246" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker id="omk_m" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_2" width="2" smooth="true" visibility=":cmv_m"/>
-					<marker id="omk_s" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_2" width="2" smooth="true" visibility=":cmv_s"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="cmg_m" width="2" color="mid" smooth="true" visibility=":cmv_m"/>
-					<mesh id="cmg_s" width="2" color="side" smooth="true" visibility=":cmv_s"/>
-					<mesh id="ccg_m" width="3" color="mid" smooth="true" visibility=":cmv_m"/>
-					<mesh id="ccg_s" width="3" color="side" smooth="true" visibility=":cmv_s"/>
-
-					<!-- Markers -->
-					<ui:for id="i" first="0" count="4">
-						<marker id="al${i}_m" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold" smooth="true" visibility=":cmv_m and :ae${i}_m"/>
-						<text x=":al${i}_m" y="24 db" text="graph.values.idM_id" text:id="${i}" color="threshold" halign="-1" valign="-1" visibility=":cmv_m and :ae${i}_m"/>
-						<marker id="al${i}_s" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold" smooth="true" visibility=":cmv_s and :ae${i}_s"/>
-						<text x=":al${i}_s" y="24 db" text="graph.values.idS_ide" text:id="${i}" color="threshold" halign="1" valign="-1" visibility=":cmv_s and :ae${i}_s"/>
-					</ui:for>
-					<ui:for id="i" first="0" count="4">
-						<marker id="rl${i}_m" editable="true" width="2" pointer="hsize" color="release" hcolor="release" smooth="true" visibility=":cmv_m and :re${i}_m"/>
-						<text x=":rl${i}_m" y="-72 db" text="graph.values.idM_id" text:id="${i}" color="release" halign="-1" valign="1" visibility=":cmv_m and :re${i}_m"/>
-						<marker id="rl${i}_s" editable="true" width="2" pointer="hsize" basis="0" color="release" hcolor="release" parallel="1" smooth="true" visibility=":cmv_s and :re${i}_s"/>
-						<text x=":rl${i}_s" y="-72 db" text="graph.values.idS_ide" text:id="${i}" color="release" halign="1" valign="1" visibility=":cmv_s and :re${i}_s"/>
-					</ui:for>
-
-					<!-- Dots -->
-					<ui:for id="i" first="0" count="4">
-						<dot x.id="tl${i}_m" y.id="gl${i}_m" z.id="kn${i}_m" x.editable="true" y.editable="true" z.editable="true" color="mid" hover.color="mid" bcolor="mid" hover.bcolor="mid" pointer="drag" visibility=":cmv_m and :pe${i}_m"/>
-						<dot x.id="tl${i}_s" y.id="gl${i}_s" z.id="kn${i}_s" x.editable="true" y.editable="true" z.editable="true" color="side" hover.color="side" bcolor="side" hover.bcolor="side" pointer="drag" visibility=":cmv_s and :pe${i}_s"/>
-					</ui:for>
-					<ui:for id="i" first="0" count="4">
-						<text x=":tl${i}_m" y=":gl${i}_m" text="graph.values.idM_id" text:id="${i}" color="mid" halign="-1" valign="1" visibility=":cmv_m and :pe${i}_m"/>
-						<text x=":tl${i}_s" y=":gl${i}_s" text="graph.values.idS_ide" text:id="${i}" color="side" halign="1" valign="-1" visibility=":cmv_s and :pe${i}_s"/>
-					</ui:for>
-
-					<dot x.id="elm_m" y.id="clm_m" color="mid" hover.color="mid" bcolor="mid" hover.bcolor="mid" visibility=":cmv_m"/>
-					<dot x.id="elm_s" y.id="clm_s" color="side" hover.color="side" bcolor="side" hover.bcolor="side" visibility=":cmv_s"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" vexpand="true" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_m" size="10" ui:inject="Button_mid" led="true"/>
-						<button id="ilv_s" size="10" ui:inject="Button_side" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_m" size="10" ui:inject="Button_mid" led="true"/>
-						<button id="olv_s" size="10" ui:inject="Button_side" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="ilm_m" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid_in"/>
-					<ledchannel id="ilm_s" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="side_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="olm_m" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid"/>
-					<ledchannel id="olm_s" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="side"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-
-		<cgroup id="psel" vexpand="false" vreduce="true" ipadding="0">
-			<ui:for id="p" first="0" last="1">
-				<ui:set id="chn" value="${(:p mod 2) ? 'labels.chan.id_S_ide' : 'labels.chan.id_M_id'}"/>
-				<ui:set id="ch" value="${(:p mod 2) ? '_s' : '_m'}"/>
-				<ui:set id="chc" value="${(:p mod 2) ? 'side' : 'mid'}"/>
-				<hbox>
-					<!-- sidechain -->
-					<hbox spacing="0" bg.color="bg_schema">
-
-						<grid rows="11" cols="1" spacing="0">
-							<label text="labels.sc.preamp" pad.h="6" pad.v="4" vreduce="true"/>
-							<knob id="scp${ch}" scolor="${chc}"/>
-							<value id="scp${ch}" sline="true" width.min="48"/>
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<label text="labels.sc.reactivity" pad.h="6" pad.v="4" vreduce="true"/>
-							<knob id="scr${ch}" scolor="${chc}"/>
-							<value id="scr${ch}" sline="true"/>
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<label text="labels.sc.lookahead" pad.h="6" pad.v="4" vreduce="true"/>
-							<knob id="sla${ch}" scolor="${chc}"/>
-							<value id="sla${ch}" sline="true"/>
-						</grid>
-						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-						<vbox>
-							<label text="labels.setup" pad.h="6" pad.t="4" fill="false" vreduce="true"/>
-
-							<vbox fill="false" spacing="1">
-								<ui:with pad.h="6" pad.b="4">
-									<combo id="sct${ch}" fill="true" pad.t="4"/>
-									<combo id="scm${ch}" fill="true"/>
-									<combo id="scs${ch}" fill="true"/>
-									<button id="scl${ch}" height="22" hfill="true" pad.b="6" text="labels.listen" ui:inject="Button_${chc}"/>
-								</ui:with>
-							</vbox>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<label text="labels.flt.HPF" pad.h="6" pad.v="4" vreduce="true" bright="(:shpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:shpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<combo id="shpm${ch}" pad.h="6" fill="true" bright="(:shpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:shpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<knob id="shpf${ch}" pad.v="4" size="16" ssize="3" scolor="(:shpm${ch} igt 0) ? '${chc}' : '${chc}_inactive'" bg.bright="(:shpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<value id="shpf${ch}" pad.b="4" sline="true" bright="(:shpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:shpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<label text="labels.flt.LPF" pad.h="6" pad.v="4" vreduce="true" bright="(:slpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:slpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<combo id="slpm${ch}" pad.h="6" fill="true" bright="(:slpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:slpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<knob id="slpf${ch}" pad.v="4" size="16" ssize="3" scolor="(:slpm${ch} igt 0) ? '${chc}' : '${chc}_inactive'" bg.bright="(:slpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-							<value id="slpf${ch}" pad.b="4" sline="true" bright="(:slpm${ch} igt 0) ? 1 : 0.75" bg.bright="(:slpm${ch} igt 0) ? 1 : :const_bg_darken"/>
-						</vbox>
-					</hbox>
-
-					<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-
-					<!-- right part -->
-
-					<grid rows="1" cols="3" spacing="0" hexpand="true" bg.color="bg_schema">
-						<!-- Processors controls -->
-						<grid rows="13" cols="13" spacing="0" bg.color="bg_schema">
-							<label text="labels.specials.num" pad.h="6" pad.v="4" reduce="true"/>
-							<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<label text="labels.enable" pad.h="6" pad.v="4" reduce="true"/>
-							<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<label text="labels.thresh_old:db" pad.h="6" pad.v="4"/>
-							<label text="labels.gain:db" pad.h="6" pad.v="4"/>
-							<label text="labels.knee_:db" pad.h="6" pad.v="4"/>
-							<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<cell cols="2"><label text="labels.attack:db_ms" pad.h="6" pad.v="4"/></cell>
-							<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<cell cols="2"><label text="labels.release:db_ms" pad.h="6" pad.v="4"/></cell>
-
-							<ui:for id="c" first="0" last="3">
-								<ui:set id="i" value="${c}${ch}"/>
-
-								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-								<cell cols="3"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-								<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-								<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-
-								<cell rows="2" pad.h="4" wmin="19"><label text="${chn}" text:id="${c}"/></cell>
-								<cell rows="2">
-									<vbox fill="false" pad="6" spacing="4">
-										<button id="pe${i}" width.min="43" fill="true" height="10" text="labels.threshold" ui:inject="Button_violet_6"/>
-										<button id="ae${i}" width.min="43" fill="true" height="10" text="labels.attack" ui:inject="Button_magenta_6"/>
-										<button id="re${i}" width.min="43" fill="true" height="10" text="labels.release" ui:inject="Button_green_6"/>
-									</vbox>
-								</cell>
-								<ui:with pad.h="6" pad.v="4" size="20">
-									<knob id="tl${i}" scolor="(:pe${i} igt 0) ? 'threshold' : 'threshold_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="gl${i}" scolor="(:pe${i} igt 0) ? '${chc}' : '${chc}_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="kn${i}" scolor="(:pe${i} igt 0) ? '${chc}' : '${chc}_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="al${i}" scolor="(:ae${i} igt 0) ? 'attack_1' : 'attack_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="at${i}" scolor="(:ae${i} igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="rl${i}" scolor="(:re${i} igt 0) ? 'release_1' : 'release_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-									<knob id="rt${i}" scolor="(:re${i} igt 0) ? 'release_2' : 'release_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-								</ui:with>
-								<ui:with pad.h="6" pad.v="4">
-									<value id="tl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="gl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="kn${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="al${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="at${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="rl${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-									<value id="rt${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-								</ui:with>
-							</ui:for>
-						</grid>
-
-						<cell rows="11" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-
-						<!-- ratio attack release makeup dry wet -->
-						<grid rows="11" cols="5" transpose="true" spacing="0" bg.color="bg_schema">
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.ratio_low" width.min="53"/>
-								<knob id="llr${ch}" size="20" scolor="${chc}"/>
-								<value id="llr${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.attack" width.min="53"/>
-								<knob id="atd${ch}" size="20" scolor="attack"/>
-								<value id="atd${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.signal.dry" width.min="53"/>
-								<knob id="cdr${ch}" scolor="dry" size="20"/>
-								<value id="cdr${ch}"/>
-							</ui:with>
-
-							<cell rows="8"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-							<cell rows="3"><void bg.color="bg_schema" pad.h="2" hreduce="true"/></cell>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.ratio_high" width.min="53"/>
-								<knob id="hlr${ch}" size="20" scolor="${chc}"/>
-								<value id="hlr${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.release" width.min="53"/>
-								<knob id="rtd${ch}" size="20" scolor="release"/>
-								<value id="rtd${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.signal.wet" width.min="53"/>
-								<knob id="cwt${ch}" scolor="wet" size="20"/>
-								<value id="cwt${ch}"/>
-							</ui:with>
-
-							<cell rows="11"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.makeup" width.min="53"/>
-								<knob id="omk${ch}" size="20" scolor="${chc}"/>
-								<value id="omk${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.hold" width.min="53"/>
-								<knob id="hold${ch}" size="20"/>
-								<value id="hold${ch}"/>
-							</ui:with>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-							<ui:with pad.h="6" pad.v="4">
-								<label text="labels.signal.drywet" width.min="53"/>
-								<knob id="cdw${ch}" scolor="drywet" size="20"/>
-								<value id="cdw${ch}"/>
-							</ui:with>
-						</grid>
-					</grid>
-
-				</hbox>
-			</ui:for>
-		</cgroup>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/stereo.xml	2025-03-01 12:43:04.936599502 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single/stereo.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,440 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="486" height.min="212" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="isg_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv_l"/>
-						<mesh id="isg_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilv_r"/>
-						<mesh id="osg_l" width="2" color="left" visibility=":olv_l"/>
-						<mesh id="osg_r" width="2" color="right" visibility=":olv_r"/>
-						<mesh id="scg_l" width="2" color="sidechain_1" visibility=":slv_l"/>
-						<mesh id="scg_r" width="2" color="sidechain_2" visibility=":slv_r"/>
-						<mesh id="evg_l" width="2" color="envelope_1" visibility=":elv_l"/>
-						<mesh id="evg_r" width="2" color="envelope_2" visibility=":elv_r"/>
-						<mesh id="grg_l" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_l"/>
-						<mesh id="grg_r" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_r"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<button id="cmv" size="16" width="48" text="labels.model" pad.v="4" ui:inject="Button_yellow"/>
-					<void hexpand="true" />
-					<vsep pad.h="2" bg.color="bg" reduce="true" />
-					<button id="ssplit" text="labels.stereo_split" size="22" pad.v="4" ui:inject="Button_blue" pad.h="2"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" vexpand="true">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_l" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_r" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_l" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_r" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_l" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_r" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_l" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_r" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.curve">
-				<!-- Curve graph -->
-				<graph width.min="246" height.min="246" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker id="omk" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_2" width="2" smooth="true" visibility=":cmv"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="cmg" width="2" color="graph_mesh" smooth="true" visibility=":cmv"/>
-					<mesh id="ccg" width="3" color="graph_mesh" smooth="true"/>
-
-					<!-- Markers -->
-					<ui:for id="i" first="0" count="4">
-						<marker id="al${i}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold" smooth="true" visibility=":cmv and :ae${i}"/>
-						<text x=":al${i}" y="24 db" text="${i}" color="threshold" halign="-1" valign="-1" visibility=":cmv and :ae${i}"/>
-					</ui:for>
-					<ui:for id="i" first="0" count="4">
-						<marker id="rl${i}" editable="true" width="2" pointer="hsize" color="release" hcolor="release" smooth="true" visibility=":cmv and :re${i}"/>
-						<text x=":rl${i}" y="-72 db" text="${i}" color="release" halign="-1" valign="1" visibility=":cmv and :re${i}"/>
-					</ui:for>
-
-					<!-- Dots -->
-					<ui:for id="i" first="0" count="4">
-						<dot x.id="tl${i}" y.id="gl${i}" z.id="kn${i}" x.editable="true" y.editable="true" z.editable="true" color="graph_mesh" hover.color="graph_mesh" bcolor="graph_mesh" hover.bcolor="graph_mesh" pointer="drag" visibility=":pe${i}"/>
-					</ui:for>
-					<ui:for id="i" first="0" count="4">
-						<text x=":tl${i}" y=":gl${i}" text="${i}" color="graph_mesh" halign="-1" valign="1" visibility=":pe${i}"/>
-					</ui:for>
-
-					<dot x.id="elm_l" y.id="clm_l" color="graph_mesh" bcolor="graph_mesh" visibility="!:ssplit"/>
-					<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left" visibility=":ssplit"/>
-					<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right" visibility=":ssplit"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" vexpand="true" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="ilv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="olv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="ilm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left_in"/>
-					<ledchannel id="ilm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="246" angle="1">
-					<ledchannel id="olm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left"/>
-					<ledchannel id="olm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-
-		<group text="groups.plug.processor" vexpand="false" vreduce="true" ipadding="0">
-			<hbox>
-				<!-- sidechain -->
-				<hbox spacing="0" bg.color="bg_schema">
-
-					<grid rows="11" cols="1" spacing="0">
-						<label text="labels.sc.preamp" pad.h="6" pad.v="4" vreduce="true"/>
-						<knob id="scp" scolor="kscale"/>
-						<value id="scp" sline="true" width.min="48"/>
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-						<label text="labels.sc.reactivity" pad.h="6" pad.v="4" vreduce="true"/>
-						<knob id="scr" scolor="kscale"/>
-						<value id="scr" sline="true"/>
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-						<label text="labels.sc.lookahead" pad.h="6" pad.v="4" vreduce="true"/>
-						<knob id="sla" scolor="kscale"/>
-						<value id="sla" sline="true"/>
-					</grid>
-					<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-					<vbox>
-						<label text="labels.setup" pad.h="6" pad.t="4" fill="false" vreduce="true"/>
-
-						<vbox fill="false" spacing="1">
-							<ui:with pad.h="6" pad.b="4">
-								<combo id="sct" fill="true" pad.t="4"/>
-								<combo id="scm" fill="true"/>
-								<combo id="scs" visibility="!:ssplit" />
-								<combo id="sscs" visibility=":ssplit" />
-								<button id="scl" height="22" hfill="true" pad.b="6" text="labels.listen" ui:inject="Button_cyan"/>
-							</ui:with>
-						</vbox>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-						<label text="labels.flt.HPF" pad.h="6" pad.v="4" vreduce="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-						<combo id="shpm" pad.h="6" fill="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="shpf" pad.v="4" size="16" ssize="3" scolor="(:shpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-						<value id="shpf" pad.b="4" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<label text="labels.flt.LPF" pad.h="6" pad.v="4" vreduce="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-						<combo id="slpm" pad.h="6" fill="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="slpf" pad.v="4" size="16" ssize="3" scolor="(:slpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-						<value id="slpf" pad.b="4" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-					</vbox>
-				</hbox>
-
-				<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-
-				<!-- right part -->
-
-				<grid rows="1" cols="3" spacing="0" hexpand="true" bg.color="bg_schema">
-					<!-- Processors controls -->
-					<grid rows="13" cols="13" spacing="0" bg.color="bg_schema">
-						<label text="labels.specials.num" pad.h="6" pad.v="4" reduce="true"/>
-						<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<label text="labels.enable" pad.h="6" pad.v="4" reduce="true"/>
-						<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<label text="labels.thresh_old:db" pad.h="6" pad.v="4"/>
-						<label text="labels.gain:db" pad.h="6" pad.v="4"/>
-						<label text="labels.knee_:db" pad.h="6" pad.v="4"/>
-						<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<cell cols="2"><label text="labels.attack:db_ms" pad.h="6" pad.v="4"/></cell>
-						<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<cell cols="2"><label text="labels.release:db_ms" pad.h="6" pad.v="4"/></cell>
-
-						<ui:for id="c" first="0" last="3">
-							<ui:set id="i" value="${c}"/>
-
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-							<cell cols="3"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-							<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-							<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
-
-							<cell rows="2" pad.h="4" wmin="19"><label text="${c}"/></cell>
-							<cell rows="2">
-								<vbox fill="false" pad="6" spacing="4">
-									<button id="pe${i}" width.min="43" fill="true" height="10" text="labels.threshold" ui:inject="Button_violet_6"/>
-									<button id="ae${i}" width.min="43" fill="true" height="10" text="labels.attack" ui:inject="Button_magenta_6"/>
-									<button id="re${i}" width.min="43" fill="true" height="10" text="labels.release" ui:inject="Button_green_6"/>
-								</vbox>
-							</cell>
-							<ui:with pad.h="6" pad.v="4" size="20">
-								<knob id="tl${i}" scolor="(:pe${i} igt 0) ? 'threshold' : 'threshold_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="gl${i}" scolor="(:pe${i} igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="kn${i}" scolor="(:pe${i} igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="al${i}" scolor="(:ae${i} igt 0) ? 'attack_1' : 'attack_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="at${i}" scolor="(:ae${i} igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="rl${i}" scolor="(:re${i} igt 0) ? 'release_1' : 'release_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-								<knob id="rt${i}" scolor="(:re${i} igt 0) ? 'release_2' : 'release_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-							</ui:with>
-							<ui:with pad.h="6" pad.v="4">
-								<value id="tl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="gl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="kn${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="al${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="at${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="rl${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-								<value id="rt${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
-							</ui:with>
-						</ui:for>
-					</grid>
-
-					<cell rows="11" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-
-					<!-- ratio attack release makeup dry wet -->
-					<grid rows="11" cols="5" transpose="true" spacing="0" bg.color="bg_schema">
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.ratio_low" width.min="53"/>
-							<knob id="llr" size="20"/>
-							<value id="llr"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.attack" width.min="53"/>
-							<knob id="atd" size="20" scolor="attack"/>
-							<value id="atd"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.signal.dry" width.min="53"/>
-							<knob id="cdr" scolor="dry" size="20"/>
-							<value id="cdr"/>
-						</ui:with>
-
-						<cell rows="8"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-						<cell rows="3"><void bg.color="bg_schema" pad.h="2" hreduce="true"/></cell>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.ratio_high" width.min="53"/>
-							<knob id="hlr" size="20"/>
-							<value id="hlr"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.release" width.min="53"/>
-							<knob id="rtd" size="20" scolor="release"/>
-							<value id="rtd"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.signal.wet" width.min="53"/>
-							<knob id="cwt" scolor="wet" size="20"/>
-							<value id="cwt"/>
-						</ui:with>
-
-						<cell rows="11"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.makeup" width.min="53"/>
-							<knob id="omk" size="20"/>
-							<value id="omk"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.hold" width.min="53"/>
-							<knob id="hold" size="20"/>
-							<value id="hold"/>
-						</ui:with>
-
-						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
-
-						<ui:with pad.h="6" pad.v="4">
-							<label text="labels.signal.drywet" width.min="53"/>
-							<knob id="cdw" scolor="drywet" size="20"/>
-							<value id="cdw"/>
-						</ui:with>
-					</grid>
-				</grid>
-
-			</hbox>
-		</group>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single.xml 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single.xml
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single.xml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/res/main/ui/dynamics/processor/single.xml	2025-08-26 18:15:55.305890904 +0000
@@ -0,0 +1,994 @@
+<plugin resizable="true">
+	<!-- Evaluate what kind of plugin we have -->
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	<ui:eval id="mono" value="(ex :atd) and (ex :ilm)"/>
+	<ui:eval id="stereo" value="(ex :atd) and !(ex :ilm)"/>
+	<ui:eval id="left_right" value="(ex :atd_l)"/>
+	<ui:eval id="mid_side" value="(ex :atd_m)"/>
+
+	<ui:eval id="xa" value="(:mid_side) ? 'm' : 'l'"/>
+	<ui:eval id="xb" value="(:mid_side) ? 's' : 'r'"/>
+
+	<ui:eval id="clr_a" value="(:mid_side) ? 'mid' : 'left'"/>
+	<ui:eval id="clr_b" value="(:mid_side) ? 'side' : 'right'"/>
+
+	<ui:eval id="name_a" value="(:mid_side) ? 'M_id' : 'L_eft'"/>
+	<ui:eval id="name_b" value="(:mid_side) ? 'S_ide' : 'R_ight'"/>
+
+	<!-- Control linking -->
+	<ui:if test=":left_right or :mid_side">
+		<ui:for id="port"
+			list="'sct'; 'scm'; 'sla'; 'scl'; 'scs'; 'scr'; 'scp'; 'shpm'; 'shpf'; 'slpm'; 'slpf';
+				'pe0'; 'tl0'; 'gl0'; 'kn0'; 'ae0'; 'al0'; 'at0'; 're0'; 'rl0'; 'rt0';
+				'pe1'; 'tl1'; 'gl1'; 'kn1'; 'ae1'; 'al1'; 'at1'; 're1'; 'rl1'; 'rt1';
+				'pe2'; 'tl2'; 'gl2'; 'kn2'; 'ae2'; 'al2'; 'at2'; 're2'; 'rl2'; 'rt2';
+				'pe3'; 'tl3'; 'gl3'; 'kn3'; 'ae3'; 'al3'; 'at3'; 're3'; 'rl3'; 'rt3';
+				'atd'; 'rtd'; 'hold'; 'llr'; 'hlr'; 'omk'; 'cdr'; 'cwt'; 'cdw'; 'cmv'">
+			<ctl:link
+				id.1="${port}_${xa}" value.1=":${port}_${xb}"
+				id.2="${port}_${xb}" value.2=":${port}_${xa}"
+				activity=":clink" />
+		</ui:for>
+	</ui:if>
+
+	<vbox>
+		<!-- Top part -->
+		<grid rows="1" cols="4" hspacing="4" expand="true">
+			<vbox expand="true">
+				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
+					<graph width.min="496" height.min="222" expand="true" fill="true">
+						<origin hpos="1" vpos="-1" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:for id="t" first="0" last="4" step="1">
+							<ui:attributes ox="0" oy="1">
+								<marker v="${t}.25" color="graph_alt_2"/>
+								<marker v="${t}.5" color="graph_alt_1"/>
+								<marker v="${t}.75" color="graph_alt_2"/>
+							</ui:attributes>
+						</ui:for>
+						<ui:attributes ox="1" oy="0" color="graph_alt_1">
+							<marker v="+12 db"/>
+							<marker v="-12 db"/>
+							<marker v="-36 db"/>
+							<marker v="-60 db"/>
+						</ui:attributes>
+
+						<!-- Yellow grid -->
+						<ui:for id="t" first="1" last="4" step="1">
+							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
+						</ui:for>
+						<ui:attributes ox="1" oy="0" color="graph_sec">
+							<marker v="0 db"/>
+							<marker v="-24 db"/>
+							<marker v="-48 db"/>
+						</ui:attributes>
+
+						<!-- Meshes -->
+						<ui:if test=":mono">
+							<mesh id="isg" width="0" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilv"/>
+							<mesh id="osg" width="2" color="mono" visibility=":olv"/>
+							<mesh id="scg" width="2" color="sidechain_1" visibility=":slv"/>
+							<mesh id="evg" width="2" color="envelope_1" visibility=":elv"/>
+							<mesh id="grg" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv"/>
+						</ui:if>
+
+						<ui:if test="!(:mono)">
+							<mesh id="isg_${xa}" width="0" color="${clr_a}_in" fcolor="${clr_a}_in" fcolor.a="0.8" fill="true" visibility=":ilv_${xa}"/>
+							<mesh id="isg_${xb}" width="0" color="${clr_b}_in" fcolor="${clr_b}_in" fcolor.a="0.8" fill="true" visibility=":ilv_${xb}"/>
+							<mesh id="osg_${xa}" width="2" color="${clr_a}" visibility=":olv_${xa}"/>
+							<mesh id="osg_${xb}" width="2" color="${clr_b}" visibility=":olv_${xb}"/>
+							<mesh id="scg_${xa}" width="2" color="sidechain_1" visibility=":slv_${xa}"/>
+							<mesh id="scg_${xb}" width="2" color="sidechain_2" visibility=":slv_${xb}"/>
+							<mesh id="evg_${xa}" width="2" color="envelope_1" visibility=":elv_${xa}"/>
+							<mesh id="evg_${xb}" width="2" color="envelope_2" visibility=":elv_${xb}"/>
+							<mesh id="grg_${xa}" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_${xa}"/>
+							<mesh id="grg_${xb}" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_${xb}"/>
+						</ui:if>
+
+						<!-- Boundaries -->
+						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
+						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
+
+						<!-- Axis -->
+						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+
+						<!-- Text -->
+						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+						<ui:for id="t" first="0" last="4" step="1">
+							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
+							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
+						</ui:for>
+						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
+							<text y="12 db" text="+12"/>
+							<text y="0 db" text="0"/>
+							<text y="-12 db" text="-12"/>
+							<text y="-24 db" text="-24"/>
+							<text y="-36 db" text="-36"/>
+							<text y="-48 db" text="-48"/>
+							<text y="-60 db" text="-60"/>
+							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
+						</ui:attributes>
+					</graph>
+				</group>
+				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
+				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
+					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
+					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
+					<ui:if test=":mono or :stereo">
+						<button id="cmv" size="16" width="48" text="labels.model" pad.v="4" ui:inject="Button_yellow"/>
+					</ui:if>
+
+					<ui:if test=":left_right or :mid_side">
+						<button id="cmv_${xa}" height="22" width="48" text="labels.chan.${clr_a}" pad.v="4" ui:inject="Button_${clr_a}"/>
+						<button id="cmv_${xb}" height="22" width="48" text="labels.chan.${clr_b}" pad.v="4" ui:inject="Button_${clr_b}"/>
+					</ui:if>
+					<ui:if test=":left_right">
+						<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
+					</ui:if>
+					<ui:if test=":mid_side">
+						<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
+					</ui:if>
+
+					<void hexpand="true"/>
+					<ui:if test=":mid_side">
+						<vsep pad.h="2" bg.color="bg" reduce="true"/>
+						<button id="msl" height="22" width="48" text="labels.ms_listen" pad.v="4" ui:inject="Button_yellow" pad.h="2"/></ui:if>
+
+					<ui:if test=":stereo">
+						<vsep pad.h="2" bg.color="bg" reduce="true"/>
+						<button id="ssplit" text="labels.stereo_split" size="22" pad.v="4" ui:inject="Button_blue" pad.h="2"/>
+					</ui:if>
+
+					<vsep pad.h="2" bg.color="bg" reduce="true"/>
+					<shmlink id="link" pad.l="2"/>
+				</hbox>
+			</vbox>
+
+			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
+				<ui:with bg.color="bg_schema">
+					<ui:with width.min="24">
+						<label text="labels.sc.SC" padding="4"/>
+						<label text="labels.Env_elope" padding="4"/>
+						<label text="labels.gain_" padding="4"/>
+					</ui:with>
+
+					<!-- For Mono version -->
+					<ui:if test=":mono">
+						<button id="slv" height="10" width="22" ui:inject="Button_orange" led="true"/>
+						<button id="elv" height="10" width="22" ui:inject="Button_violet" led="true"/>
+						<button id="grv" height="10" width="22" ui:inject="Button_blue" led="true"/>
+					</ui:if>
+
+					<!-- For Stereo and Left Right Mid Side version -->
+					<ui:if test="!(:mono)">
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="slv_${xa}" size="10" ui:inject="Button_orange" led="true"/>
+							<button id="slv_${xb}" size="10" ui:inject="Button_orange" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="elv_${xa}" size="10" ui:inject="Button_violet" led="true"/>
+							<button id="elv_${xb}" size="10" ui:inject="Button_violet" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="grv_${xa}" size="10" ui:inject="Button_blue" led="true"/>
+							<button id="grv_${xb}" size="10" ui:inject="Button_blue" led="true"/>
+						</grid>
+					</ui:if>
+				</ui:with>
+
+				<!-- For Mono version -->
+				<ui:if test=":mono">
+					<!-- Sidechain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="slm" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+					</ledmeter>
+
+					<!-- Envelope signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="elm" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+					</ledmeter>
+
+					<!-- Gain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="rlm" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+					</ledmeter>
+				</ui:if>
+
+				<!-- For Stereo and Left Right Mid Side version -->
+				<ui:if test="!(:mono)">
+					<!-- Sidechain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="slm_${xa}" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+						<ledchannel id="slm_${xb}" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+					</ledmeter>
+
+					<!-- Envelope signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="elm_${xa}" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+						<ledchannel id="elm_${xb}" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+					</ledmeter>
+
+					<!-- Gain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="rlm_${xa}" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+						<ledchannel id="rlm_${xb}" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+					</ledmeter>
+				</ui:if>
+
+			</grid>
+
+			<vbox expand="true">
+				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.curve">
+					<!-- Curve graph -->
+					<graph width.min="256" height.min="256" expand="true" fill="true">
+						<origin hpos="-1" vpos="-1" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:for id="g" first="-60" last="12" step="24">
+							<marker v="${g} db" color="graph_alt_1"/>
+							<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
+						</ui:for>
+
+						<!-- Yellow grid -->
+						<ui:for id="g" first="-48" last="-24" step="24">
+							<marker v="${g} db" color="graph_sec"/>
+							<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
+						</ui:for>
+
+						<!-- Axes and boundaries -->
+						<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
+
+						<ui:if test=":mono or :stereo">
+							<marker id="omk" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_2" width="2" smooth="true" visibility=":cmv"/>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<marker id="omk_${xa}" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_2" width="2" smooth="true" visibility=":cmv_${xa}"/>
+							<marker id="omk_${xb}" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_2" width="2" smooth="true" visibility=":cmv_${xb}"/>
+						</ui:if>
+
+						<marker v="24 db" color="graph_alt_1" visibility="false"/>
+						<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
+						<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
+						<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
+
+						<!-- 0 dB markers -->
+						<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
+						<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
+
+						<!-- Meshes -->
+						<ui:if test=":mono or :stereo">
+							<mesh id="cmg" width="2" color="graph_mesh" smooth="true" visibility=":cmv"/>
+							<mesh id="ccg" width="3" color="graph_mesh" smooth="true"/>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<mesh id="cmg_${xa}" width="2" color="${clr_a}" smooth="true" visibility=":cmv_${xa}"/>
+							<mesh id="cmg_${xb}" width="2" color="${clr_b}" smooth="true" visibility=":cmv_${xb}"/>
+							<mesh id="ccg_${xa}" width="3" color="${clr_a}" smooth="true" visibility=":cmv_${xa}"/>
+							<mesh id="ccg_${xb}" width="3" color="${clr_b}" smooth="true" visibility=":cmv_${xb}"/>
+						</ui:if>
+
+						<!-- Markers -->
+						<ui:if test=":mono or :stereo">
+							<ui:for id="i" first="0" count="4">
+								<marker id="al${i}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold" smooth="true" visibility=":cmv and :ae${i}"/>
+								<text x=":al${i}" y="24 db" text="${i}" color="threshold" halign="-1" valign="-1" visibility=":cmv and :ae${i}"/>
+							</ui:for>
+							<ui:for id="i" first="0" count="4">
+								<marker id="rl${i}" editable="true" width="2" pointer="hsize" color="release" hcolor="release" smooth="true" visibility=":cmv and :re${i}"/>
+								<text x=":rl${i}" y="-72 db" text="${i}" color="release" halign="-1" valign="1" visibility=":cmv and :re${i}"/>
+							</ui:for>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<ui:for id="i" first="0" count="4">
+								<marker id="al${i}_${xa}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold" smooth="true" visibility=":cmv_${xa} and :ae${i}_${xa}"/>
+								<text x=":al${i}_${xa}" y="24 db" text="graph.values.id${name_a}" text:id="${i}" color="threshold" halign="-1" valign="-1" visibility=":cmv_${xa} and :ae${i}_${xa}"/>
+								<marker id="al${i}_${xb}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold" smooth="true" visibility=":cmv_${xb} and :ae${i}_${xb}"/>
+								<text x=":al${i}_${xb}" y="24 db" text="graph.values.id${name_b}" text:id="${i}" color="threshold" halign="1" valign="-1" visibility=":cmv_${xb} and :ae${i}_${xb}"/>
+							</ui:for>
+							<ui:for id="i" first="0" count="4">
+								<marker id="rl${i}_${xa}" editable="true" width="2" pointer="hsize" color="release" hcolor="release" smooth="true" visibility=":cmv_${xa} and :re${i}_${xa}"/>
+								<text x=":rl${i}_${xa}" y="-72 db" text="graph.values.id${name_a}" text:id="${i}" color="release" halign="-1" valign="1" visibility=":cmv_${xa} and :re${i}_${xa}"/>
+								<marker id="rl${i}_${xb}" editable="true" width="2" pointer="hsize" basis="0" color="release" hcolor="release" parallel="1" smooth="true" visibility=":cmv_${xb} and :re${i}_${xb}"/>
+								<text x=":rl${i}_${xb}" y="-72 db" text="graph.values.id${name_b}" text:id="${i}" color="release" halign="1" valign="1" visibility=":cmv_${xb} and :re${i}_${xb}"/>
+							</ui:for>
+						</ui:if>
+
+						<!-- Dots -->
+
+						<ui:if test=":mono or :stereo">
+							<ui:for id="i" first="0" count="4">
+								<dot x.id="tl${i}" y.id="gl${i}" z.id="kn${i}" x.editable="true" y.editable="true" z.editable="true" color="graph_mesh" hover.color="graph_mesh" bcolor="graph_mesh" hover.bcolor="graph_mesh" pointer="drag" visibility=":pe${i}"/>
+							</ui:for>
+							<ui:for id="i" first="0" count="4">
+								<text x=":tl${i}" y=":gl${i}" text="${i}" color="graph_mesh" halign="-1" valign="1" visibility=":pe${i}"/>
+							</ui:for>
+						</ui:if>
+
+						<ui:if test=":mono">
+							<dot x.id="elm" y.id="clm" color="graph_mesh" hover.color="graph_mesh" bcolor="graph_mesh" hover.bcolor="graph_mesh"/>
+						</ui:if>
+
+						<ui:if test=":stereo">
+							<dot x.id="elm_l" y.id="clm_l" color="graph_mesh" bcolor="graph_mesh" visibility="!:ssplit"/>
+							<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left" visibility=":ssplit"/>
+							<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right" visibility=":ssplit"/>
+						</ui:if>
+
+						<ui:if test=":mono">
+							<dot x.id="elm" y.id="clm" color="graph_mesh" hover.color="graph_mesh" bcolor="graph_mesh" hover.bcolor="graph_mesh"/>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<ui:for id="i" first="0" count="4">
+								<dot
+									x.id="tl${i}_${xa}"
+									y.id="gl${i}_${xa}"
+									z.id="kn${i}_${xa}"
+									x.editable="true"
+									y.editable="true"
+									z.editable="true"
+									color="${clr_a}"
+									hover.color="${clr_a}"
+									bcolor="${clr_a}"
+									hover.bcolor="${clr_a}"
+									pointer="drag"
+									visibility=":cmv_${xa} and :pe${i}_${xa}"/>
+								<dot
+									x.id="tl${i}_${xb}"
+									y.id="gl${i}_${xb}"
+									z.id="kn${i}_${xb}"
+									x.editable="true"
+									y.editable="true"
+									z.editable="true"
+									color="${clr_b}"
+									hover.color="${clr_b}"
+									bcolor="${clr_b}"
+									hover.bcolor="${clr_b}"
+									pointer="drag"
+									visibility=":cmv_${xb} and :pe${i}_${xb}"/>
+							</ui:for>
+							<ui:for id="i" first="0" count="4">
+								<text x=":tl${i}_${xa}" y=":gl${i}_${xa}" text="graph.values.id${name_a}" text:id="${i}" color="${clr_a}" halign="-1" valign="1" visibility=":cmv_${xa} and :pe${i}_${xa}"/>
+								<text x=":tl${i}_${xb}" y=":gl${i}_${xb}" text="graph.values.id${name_b}" text:id="${i}" color="${clr_b}" halign="1" valign="-1" visibility=":cmv_${xb} and :pe${i}_${xb}"/>
+							</ui:for>
+
+							<dot x.id="elm_${xa}" y.id="clm_${xa}" color="${clr_a}" hover.color="${clr_a}" bcolor="${clr_a}" hover.bcolor="${clr_a}" visibility=":cmv_${xa}"/>
+							<dot x.id="elm_${xb}" y.id="clm_${xb}" color="${clr_b}" hover.color="${clr_b}" bcolor="${clr_b}" hover.bcolor="${clr_b}" visibility=":cmv_${xb}"/>
+						</ui:if>
+
+						<!-- Text -->
+						<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
+						<ui:attributes x="0 db" halign="1" valign="-1">
+							<text y="24 db" text="graph.units.db"/>
+							<text y="12 db" text="+12"/>
+							<text y="-12 db" text="-12"/>
+							<text y="-24 db" text="-24"/>
+							<text y="-36 db" text="-36"/>
+							<text y="-48 db" text="-48"/>
+							<text y="-60 db" text="-60"/>
+							<text y="-72 db" text="graph.axis.out" valign="1"/>
+						</ui:attributes>
+						<ui:attributes y="0 db" halign="-1" valign="1">
+							<text x="24 db" text="graph.units.db"/>
+							<text x="12 db" text="+12"/>
+							<text x="-12 db" text="-12"/>
+							<text x="-24 db" text="-24"/>
+							<text x="-36 db" text="-36"/>
+							<text x="-48 db" text="-48"/>
+							<text x="-60 db" text="-60"/>
+							<text x="-72 db" text="graph.axis.in" halign="1"/>
+						</ui:attributes>
+					</graph>
+				</group>
+				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
+				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
+					<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" pad.v="4"/>
+					<button ui:id="sidechain_trigger" id="showsc" text="labels.sidechain" size="22" pad.v="4"/>
+					<void hexpand="true"/>
+					<button ui:id="mix_trigger" id="showmx" text="labels.mix" size="22" pad.v="4"/>
+				</hbox>
+			</vbox>
+
+			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
+				<ui:with bg.color="bg_schema">
+					<label text="labels.chan.in" padding="4" width.min="24"/>
+					<label text="labels.chan.out" padding="4" width.min="24"/>
+
+					<!-- For Mono version -->
+					<ui:if test=":mono">
+						<button id="ilv" height="10" width="22" ui:inject="Button_mono" led="true" fill="false" hspacing="2"/>
+						<button id="olv" height="10" width="22" ui:inject="Button_mono" led="true" fill="false" hspacing="2"/>
+					</ui:if>
+
+					<!-- For Stereo and Left Right Mid Side version -->
+					<ui:if test="!(:mono)">
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="ilv_${xa}" size="10" ui:inject="Button_${clr_a}" led="true"/>
+							<button id="ilv_${xb}" size="10" ui:inject="Button_${clr_b}" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="olv_${xa}" size="10" ui:inject="Button_${clr_a}" led="true"/>
+							<button id="olv_${xb}" size="10" ui:inject="Button_${clr_b}" led="true"/>
+						</grid>
+					</ui:if>
+				</ui:with>
+
+				<!-- For Mono version -->
+				<ui:if test=":mono">
+					<!-- Input signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="ilm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono_in"/>
+					</ledmeter>
+
+					<!-- Output signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="olm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono"/>
+					</ledmeter>
+				</ui:if>
+
+				<!-- For Stereo and Left Right Mid Side version -->
+				<ui:if test="!(:mono)">
+					<!-- Input signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="ilm_${xa}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_a}_in"/>
+						<ledchannel id="ilm_${xb}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_b}_in"/>
+					</ledmeter>
+
+					<!-- Output signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="olm_${xa}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_a}"/>
+						<ledchannel id="olm_${xb}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_b}"/>
+					</ledmeter>
+				</ui:if>
+			</grid>
+		</grid>
+
+		<!-- Separator -->
+		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
+
+		<!-- Bottom part -->
+		<hbox>
+
+			<!-- For Stereo and Mono version-->
+			<ui:if test=":mono or :stereo">
+				<group text="groups.plug.processor" vexpand="false" vreduce="true" ipadding="0">
+					<hbox>
+						<grid rows="1" cols="3" spacing="0" hexpand="true" bg.color="bg_schema">
+							<!-- Processors controls -->
+							<grid rows="13" cols="13" spacing="0" bg.color="bg_schema">
+								<label text="labels.specials.num" pad.h="6" pad.v="4" reduce="true"/>
+								<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+								<label text="labels.enable" pad.h="6" pad.v="4" reduce="true"/>
+								<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+								<label text="labels.thresh_old:db" pad.h="6" pad.v="4"/>
+								<label text="labels.gain:db" pad.h="6" pad.v="4"/>
+								<label text="labels.knee_:db" pad.h="6" pad.v="4"/>
+								<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+								<cell cols="2"><label text="labels.attack:db_ms" pad.h="6" pad.v="4"/></cell>
+								<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+								<cell cols="2"><label text="labels.release:db_ms" pad.h="6" pad.v="4"/></cell>
+
+								<ui:for id="c" first="0" last="3">
+									<ui:set id="i" value="${c}"/>
+
+									<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+									<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+									<cell cols="3"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+									<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+									<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+
+									<cell rows="2" pad.h="4" wmin="19"><label text="${c}"/></cell>
+									<cell rows="2">
+										<vbox fill="false" pad="6" spacing="4">
+											<button id="pe${i}" width.min="43" fill="true" height="10" text="labels.threshold" ui:inject="Button_violet_6"/>
+											<button id="ae${i}" width.min="43" fill="true" height="10" text="labels.attack" ui:inject="Button_magenta_6"/>
+											<button id="re${i}" width.min="43" fill="true" height="10" text="labels.release" ui:inject="Button_green_6"/>
+										</vbox>
+									</cell>
+									<ui:with pad.h="6" pad.v="4" size="20">
+										<knob id="tl${i}" scolor="(:pe${i} igt 0) ? 'threshold' : 'cycle_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+										<knob id="gl${i}" scolor="(:pe${i} igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+										<knob id="kn${i}" scolor="(:pe${i} igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+										<knob id="al${i}" scolor="(:ae${i} igt 0) ? 'attack_1' : 'cycle_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
+										<knob id="at${i}" scolor="(:ae${i} igt 0) ? 'attack_2' : 'cycle_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
+										<knob id="rl${i}" scolor="(:re${i} igt 0) ? 'release_1' : 'cycle_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
+										<knob id="rt${i}" scolor="(:re${i} igt 0) ? 'release_2' : 'cycle_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
+									</ui:with>
+									<ui:with pad.h="6" pad.v="4">
+										<value id="tl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+										<value id="gl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+										<value id="kn${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+										<value id="al${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
+										<value id="at${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
+										<value id="rl${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
+										<value id="rt${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
+									</ui:with>
+								</ui:for>
+							</grid>
+
+							<cell rows="11" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+
+							<!-- ratio attack release makeup dry wet -->
+							<grid rows="7" cols="5" transpose="true" spacing="0" bg.color="bg_schema">
+								<ui:with pad.h="6" pad.v="4">
+									<label text="labels.ratio_low" width.min="53"/>
+									<knob id="llr" size="20"/>
+									<value id="llr"/>
+								</ui:with>
+
+								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+
+								<ui:with pad.h="6" pad.v="4">
+									<label text="labels.attack" width.min="53"/>
+									<knob id="atd" size="20" scolor="attack"/>
+									<value id="atd"/>
+								</ui:with>
+
+								<cell rows="7"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+
+								<ui:with pad.h="6" pad.v="4">
+									<label text="labels.ratio_high" width.min="53"/>
+									<knob id="hlr" size="20"/>
+									<value id="hlr"/>
+								</ui:with>
+
+								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+
+								<ui:with pad.h="6" pad.v="4">
+									<label text="labels.release" width.min="53"/>
+									<knob id="rtd" size="20" scolor="release"/>
+									<value id="rtd"/>
+								</ui:with>
+
+								<cell rows="7"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+
+								<ui:with pad.h="6" pad.v="4">
+									<label text="labels.makeup" width.min="53"/>
+									<knob id="omk" size="20"/>
+									<value id="omk"/>
+								</ui:with>
+
+								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+
+								<ui:with pad.h="6" pad.v="4">
+									<label text="labels.hold" width.min="53"/>
+									<knob id="hold" size="20"/>
+									<value id="hold"/>
+								</ui:with>
+							</grid>
+						</grid>
+
+					</hbox>
+				</group>
+			</ui:if>
+
+			<!-- For Left Right and Mid Side version -->
+			<ui:if test=":left_right or :mid_side">
+				<cgroup id="psel" vexpand="false" vreduce="true" ipadding="0">
+					<ui:for id="p" first="0" last="1">
+						<ui:if test=":left_right">
+							<ui:set id="chn" value="${(:p mod 2) ? 'labels.chan.id_R_ight' : 'labels.chan.id_L_eft'}"/>
+							<ui:set id="ch" value="${(:p mod 2) ? '_r' : '_l'}"/>
+							<ui:set id="chc" value="${(:p mod 2) ? 'right' : 'left'}"/>
+						</ui:if>
+
+						<ui:if test=":mid_side">
+							<ui:set id="chn" value="${(:p mod 2) ? 'labels.chan.id_S_ide' : 'labels.chan.id_M_id'}"/>
+							<ui:set id="ch" value="${(:p mod 2) ? '_s' : '_m'}"/>
+							<ui:set id="chc" value="${(:p mod 2) ? 'side' : 'mid'}"/>
+						</ui:if>
+						<hbox>
+							<grid rows="1" cols="3" spacing="0" hexpand="true" bg.color="bg_schema">
+								<!-- Processors controls -->
+								<grid rows="13" cols="13" spacing="0" bg.color="bg_schema">
+									<label text="labels.specials.num" pad.h="6" pad.v="4" reduce="true"/>
+									<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+									<label text="labels.enable" pad.h="6" pad.v="4" reduce="true"/>
+									<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+									<label text="labels.thresh_old:db" pad.h="6" pad.v="4"/>
+									<label text="labels.gain:db" pad.h="6" pad.v="4"/>
+									<label text="labels.knee_:db" pad.h="6" pad.v="4"/>
+									<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+									<cell cols="2"><label text="labels.attack:db_ms" pad.h="6" pad.v="4"/></cell>
+									<cell rows="13"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+									<cell cols="2"><label text="labels.release:db_ms" pad.h="6" pad.v="4"/></cell>
+
+									<ui:for id="c" first="0" last="3">
+										<ui:set id="i" value="${c}${ch}"/>
+
+										<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+										<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+										<cell cols="3"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+										<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+										<cell cols="2"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+
+										<cell rows="2" pad.h="4" wmin="19"><label text="${chn}" text:id="${c}"/></cell>
+										<cell rows="2">
+											<vbox fill="false" pad="6" spacing="4">
+												<button id="pe${i}" width.min="43" fill="true" height="10" text="labels.threshold" ui:inject="Button_violet_6"/>
+												<button id="ae${i}" width.min="43" fill="true" height="10" text="labels.attack" ui:inject="Button_magenta_6"/>
+												<button id="re${i}" width.min="43" fill="true" height="10" text="labels.release" ui:inject="Button_green_6"/>
+											</vbox>
+										</cell>
+										<ui:with pad.h="6" pad.v="4" size="20">
+											<knob id="tl${i}" scolor="(:pe${i} igt 0) ? 'threshold' : 'cycle_inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+											<knob id="gl${i}" scolor="(:pe${i} igt 0) ? '${chc}' : 'cycle__inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+											<knob id="kn${i}" scolor="(:pe${i} igt 0) ? '${chc}' : 'cycle__inactive'" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+											<knob id="al${i}" scolor="(:ae${i} igt 0) ? 'attack_1' : 'cycle_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
+											<knob id="at${i}" scolor="(:ae${i} igt 0) ? 'attack_2' : 'cycle_inactive'" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
+											<knob id="rl${i}" scolor="(:re${i} igt 0) ? 'release_1' : 'cycle_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
+											<knob id="rt${i}" scolor="(:re${i} igt 0) ? 'release_2' : 'cycle_inactive'" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
+										</ui:with>
+										<ui:with pad.h="6" pad.v="4">
+											<value id="tl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+											<value id="gl${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+											<value id="kn${i}" detailed="false" bright="(:pe${i} igt 0) ? 1 : 0.75" bg.bright="(:pe${i} igt 0) ? 1 : :const_bg_darken"/>
+											<value id="al${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
+											<value id="at${i}" detailed="false" bright="(:ae${i} igt 0) ? 1 : 0.75" bg.bright="(:ae${i} igt 0) ? 1 : :const_bg_darken"/>
+											<value id="rl${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
+											<value id="rt${i}" detailed="false" bright="(:re${i} igt 0) ? 1 : 0.75" bg.bright="(:re${i} igt 0) ? 1 : :const_bg_darken"/>
+										</ui:with>
+									</ui:for>
+								</grid>
+
+								<cell rows="11" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+
+								<!-- ratio attack release makeup -->
+								<grid rows="7" cols="5" transpose="true" spacing="0" bg.color="bg_schema">
+									<ui:with pad.h="6" pad.v="4">
+										<label text="labels.ratio_low" width.min="53"/>
+										<knob id="llr${ch}" size="20" scolor="${chc}"/>
+										<value id="llr${ch}"/>
+									</ui:with>
+
+									<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+
+									<ui:with pad.h="6" pad.v="4">
+										<label text="labels.attack" width.min="53"/>
+										<knob id="atd${ch}" size="20" scolor="attack"/>
+										<value id="atd${ch}"/>
+									</ui:with>
+
+									<cell rows="7"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+
+									<ui:with pad.h="6" pad.v="4">
+										<label text="labels.ratio_high" width.min="53"/>
+										<knob id="hlr${ch}" size="20" scolor="${chc}"/>
+										<value id="hlr${ch}"/>
+									</ui:with>
+
+									<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+
+									<ui:with pad.h="6" pad.v="4">
+										<label text="labels.release" width.min="53"/>
+										<knob id="rtd${ch}" size="20" scolor="release"/>
+										<value id="rtd${ch}"/>
+									</ui:with>
+
+									<cell rows="7"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+
+									<ui:with pad.h="6" pad.v="4">
+										<label text="labels.makeup" width.min="53"/>
+										<knob id="omk${ch}" size="20" scolor="${chc}"/>
+										<value id="omk${ch}"/>
+									</ui:with>
+
+									<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+
+									<ui:with pad.h="6" pad.v="4">
+										<label text="labels.hold" width.min="53"/>
+										<knob id="hold${ch}" size="20"/>
+										<value id="hold${ch}"/>
+									</ui:with>
+								</grid>
+
+							</grid>
+
+						</hbox>
+					</ui:for>
+				</cgroup>
+			</ui:if>
+
+			<!-- Separator -->
+			<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+
+			<!-- Signal control -->
+			<group text="groups.signal" vexpand="false" ipadding="0">
+				<grid rows="7" cols="1" transpose="true" spacing="0" bg.color="bg_schema">
+					<ui:with pad.h="6" pad.v="4">
+						<label text="labels.input"/>
+						<knob id="g_in" size="20"/>
+						<value id="g_in"/>
+					</ui:with>
+					<ui:with pad.h="6" pad.v="4">
+						<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+						<label text="labels.output"/>
+						<knob id="g_out" size="20"/>
+						<value id="g_out"/>
+					</ui:with>
+				</grid>
+			</group>
+		</hbox>
+
+	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true" height="139">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
+
+	<!-- Sidechain overlay -->
+	<overlay id="showsc" trigger="sidechain_trigger" hpos="1" vpos="1" halign="-1" valign="1">
+
+		<group text="groups.sidechain" vexpand="false" ipadding="0">
+			<!-- For Stereo and Mono version-->
+			<ui:if test=":mono or :stereo">
+				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema" height="139">
+					<!-- row 1 -->
+					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true" width.min="56">
+						<label text="labels.sc.preamp" vreduce="true"/>
+						<label text="labels.sc.reactivity" vreduce="true"/>
+						<label text="labels.sc.lookahead" vreduce="true"/>
+					</ui:with>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+
+					<!-- row 2 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 3 -->
+					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
+					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
+					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sct" pad.t="4"/>
+								<combo id="scm"/>
+								<combo id="scs" visibility="!:ssplit"/>
+								<combo id="sscs" visibility=":ssplit"/>
+								<button id="scl" height="22" text="labels.listen" ui:inject="Button_cyan"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 4 -->
+					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 5 -->
+					<value id="scp" sline="true" width.min="48"/>
+					<value id="scr" sline="true"/>
+					<value id="sla" sline="true"/>
+					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+				</grid>
+			</ui:if>
+
+			<!-- For Left Right and Mid Side version -->
+			<ui:if test=":left_right or :mid_side">
+				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
+					<!-- row 1 -->
+					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true" width.min="56">
+						<label text="labels.sc.preamp" vreduce="true"/>
+						<label text="labels.sc.reactivity" vreduce="true"/>
+						<label text="labels.sc.lookahead" vreduce="true"/>
+					</ui:with>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+
+					<!-- row 2 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 3 -->
+					<cell rows="2"><knob id="scp_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="2"><knob id="scr_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="2"><knob id="sla_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sct_${xa}" pad.t="4"/>
+								<combo id="scm_${xa}"/>
+								<combo id="scs_${xa}"/>
+								<button id="scl_${xa}" height="22" text="labels.listen" ui:inject="Button_${clr_a}"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm_${xa}" pad.h="6" bright="(:shpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm_${xa}" pad.h="6" bright="(:slpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 4 -->
+					<knob id="shpf_${xa}" size="20" scolor="(:shpm_${xa} igt 0) ? '${clr_a}' : 'cycle_inactive'" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf_${xa}" size="20" scolor="(:slpm_${xa} igt 0) ? '${clr_a}' : 'cycle_inactive'" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 5 -->
+					<value id="scp_${xa}" sline="true" width.min="48"/>
+					<value id="scr_${xa}" sline="true"/>
+					<value id="sla_${xa}" sline="true"/>
+					<value id="shpf_${xa}" sline="true" bright="(:shpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<value id="slpf_${xa}" sline="true" bright="(:slpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 6 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 7 -->
+					<cell rows="2"><knob id="scp_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="2"><knob id="scr_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="2"><knob id="sla_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sct_${xb}" pad.t="4"/>
+								<combo id="scm_${xb}"/>
+								<combo id="scs_${xb}"/>
+								<button id="scl_${xb}" height="22" text="labels.listen" ui:inject="Button_${clr_b}"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm_${xb}" pad.h="6" bright="(:shpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm_${xb}" pad.h="6" bright="(:slpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 8 -->
+					<knob id="shpf_${xb}" size="20" scolor="(:shpm_${xb} igt 0) ? '${clr_b}' : 'cycle_inactive'" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf_${xb}" size="20" scolor="(:slpm_${xb} igt 0) ? '${clr_b}' : 'cycle_inactive'" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 9 -->
+					<ui:with sline="true">
+						<value id="scp_${xb}"/>
+						<value id="scr_${xb}"/>
+						<value id="sla_${xb}"/>
+						<value id="shpf_${xb}" bright="(:shpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+						<value id="slpf_${xb}" bright="(:slpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					</ui:with>
+				</grid>
+			</ui:if>
+		</group>
+	</overlay>
+
+	<!-- Mix overlay -->
+	<overlay id="showmx" trigger="mix_trigger" hpos="1" vpos="1" halign="-1" valign="1">
+		<group text="groups.mix" vexpand="false" ipadding="0">
+			<!-- For Stereo and Mono version-->
+			<ui:if test=":mono or :stereo">
+				<grid rows="3" cols="4" spacing="0" bg.color="bg_schema" height="139">
+
+					<!-- Row 1 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry" pad.h="6" width="44" pad.v="4"/>
+						<label text="labels.signal.wet" pad.h="6" width="44" pad.v="4"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6" width="44" pad.v="4"/>
+					</ui:with>
+
+					<!-- Row 2 -->
+					<knob id="cdr" size="20" scolor="dry"/>
+					<knob id="cwt" size="20" scolor="wet"/>
+					<knob id="cdw" size="20" scolor="drywet"/>
+
+					<!-- Row 3 -->
+					<value id="cdr" pad.v="4"/>
+					<value id="cwt" pad.v="4"/>
+					<value id="cdw" pad.v="4"/>
+
+				</grid>
+			</ui:if>
+
+			<!-- For Left Right and Mid Side version -->
+			<ui:if test=":left_right or :mid_side">
+				<grid rows="7" cols="4" spacing="0" bg.color="bg_schema" height.min="254">
+					<!-- row 1 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry"/>
+						<label text="labels.signal.wet"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6"/>
+					</ui:with>
+
+					<!-- row 2 -->
+					<knob id="cdr_${xa}" size="20" pad.h="6" pad.v="4" scolor="dry"/>
+					<knob id="cwt_${xa}" size="20" pad.h="6" pad.v="4" scolor="wet"/>
+					<knob id="cdw_${xa}" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
+
+					<!-- row 3 -->
+					<ui:with width.min="32">
+						<value id="cdr_${xa}"/>
+						<value id="cwt_${xa}"/>
+						<value id="cdw_${xa}"/>
+					</ui:with>
+
+					<!-- row 4 -->
+					<cell cols="4"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+
+					<!-- row 5 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry"/>
+						<label text="labels.signal.wet"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6"/>
+					</ui:with>
+
+					<!-- row 6 -->
+
+					<knob id="cdr_${xb}" size="20" pad.h="6" pad.v="4" scolor="dry"/>
+					<knob id="cwt_${xb}" size="20" pad.h="6" pad.v="4" scolor="wet"/>
+					<knob id="cdw_${xb}" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
+
+					<!-- row 7 -->
+					<ui:with width.min="32">
+						<value id="cdr_${xb}"/>
+						<value id="cwt_${xb}"/>
+						<value id="cdw_${xb}"/>
+					</ui:with>
+
+				</grid>
+			</ui:if>
+		</group>
+	</overlay>
+</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/src/doc/manuals/plugins/dyna_processor.php 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/src/doc/manuals/plugins/dyna_processor.php
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/src/doc/manuals/plugins/dyna_processor.php	2025-03-01 12:43:04.936599502 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/src/doc/manuals/plugins/dyna_processor.php	2025-08-26 18:15:55.309890865 +0000
@@ -38,9 +38,12 @@ keeping the same settings for the left a
 	<li><b>Pause</b> - pauses any updates of the time graph.</li>
 	<li><b>Clear</b> - clears all graphs.</li>
 	<?php if ($m == 's') { ?>
-		<li><b>Stereo Split</b> - enables independent compression of left and right channels.</li>
+		<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+	<?php } else if ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } elseif ($m == 'ms') { ?>
 		<li><b>MS Listen</b> - passes mid-side signal to the output of the processor instead of stereo signal.</li>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } ?>
 	<li><b>Gain<?= $sm ?></b> - enables drawing of gain amplification line and corresponding amplification meter.</li>
 	<li><b>SC<?= $sm ?></b> - enables drawing of sidechain input graph and corresponding level meter.</li>
@@ -48,12 +51,62 @@ keeping the same settings for the left a
 	<li><b>In<?= $sm ?></b> - enables drawing of input signal graph and corresponding level meter.</li>
 	<li><b>Out<?= $sm ?></b> - enables drawing of output signal graph and corresponding level meter.</li>
 	<li><b>Link</b> - the name of the shared memory link to pass sidechain signal.</li>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
+	<li><b>Sidechain</b> - shows the sidechain control overlay.</li>
+	<li><b>Mix</b> - shows the Dry/Wet control overlay.</li>
 	<?php if (($m == 'ms') || ($m == 'lr')) { ?>
 	<li><b>Processor</b> - selects the corresponding channel for configuration.</li>
 	<?php } ?>
 </ul>
+
 <p><b>'Processor' section:</b></p>
 <ul>
+	<li><b>Ratio low</b> - compression/expansion ratio below the lowest-threshold knee.</li>
+	<li><b>Ratio high</b> - compression/expansion ratio after the highest-threshold knee.</li>
+	<li><b>Attack</b> - default attack time used on the whole dynamics range.</li>
+	<li><b>Release</b> - default release time used on the whole dynamics range.</li>
+	<li><b>Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
+	<li><b>Makeup</b> - additional amplification gain after dynamic processing stage.</li>
+	<li><b>Ranges</b> - allows to configure up to four additional knees, attack and release ranges:</li>
+	<ul>
+		<li><b>Thr</b> - Knob that enables additional knee.</li>
+		<li><b>Att</b> - Knob that enables additional attack range.</li>
+		<li><b>Rel</b> - Knob that enables additional release range.</li>
+		<li><b>Thresh</b> - Threshold of the additional knee, works only if corresponding <b>Thr</b> button is turned on.</li>
+		<li><b>Gain</b> - Gain of the additional knee, works only if corresponding <b>Thr</b> button is turned on.</li>
+		<li><b>Knee</b> - Softness of the knee, works only if corresponding <b>Thr</b> button is turned on.</li>
+		<li><b>Attack</b> - Pair of knobs that allows to adjust the attack threshold and attack time of the additional
+			attack range. The new attack time is applied if the envelope is <b>over</b> the specified threshold. Otherwise
+			the attack time of previous range or default attack time (if there is no previous range) will be applied.
+		</li>
+		<li><b>Release</b> - Pair of knobs that allows to adjust the release threshold and release time of the additional
+			release range. The new release time is applied if the envelope is <b>over</b> the specified threshold. Otherwise
+			the release time of previous range or default release time (if there is no previous range) will be applied.
+		</li>
+	</ul>
+</ul>
+<p><b>'Signal' section:</b></p>
+<ul>
+	<li><b>Input</b> - overall input gain.</li>
+	<li><b>Output</b> - overall output gain.</li>
+</ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
+
+<p><b>Sidechain control overlay:</b></p>
+<ul>
 	<li><b>Listen</b> - allows to listen the signal processed by sidechain<?php if (($m == 'ms') || ($m == 'lr')) { ?> for the selected processor<?php } ?>.</li>
 	<li><b>Type</b> - set of combo boxes that allow to control type, position and source of sidechain. Available types are:</li>
 	<ul>
@@ -87,36 +140,11 @@ keeping the same settings for the left a
 	<li><b>Lookahead</b> - look-ahead time of the sidechain relative to the input signal.</li>
 	<li><b>LPF</b> - allows to set up slope and cut-off frequency for the low-pass filter applied to sidechain signal.</li>
 	<li><b>HPF</b> - allows to set up slope and cut-off frequency for the high-pass filter applied to sidechain signal.</li>
-	<li><b>Mode</b> - compression mode: <b>Upward (Up)</b> or <b>Downward (Down)</b>.</li>
-	<li><b>Ratio low</b> - compression/expansion ratio below the lowest-threshold knee.</li>
-	<li><b>Ratio high</b> - compression/expansion ratio after the highest-threshold knee.</li>
-	<li><b>Attack</b> - default attack time used on the whole dynamics range.</li>
-	<li><b>Release</b> - default release time used on the whole dynamics range.</li>
-	<li><b>Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
-	<li><b>Makeup</b> - additional amplification gain after dynamic processing stage.</li>
-	<li><b>Dry</b> - the amount of dry (unprocessed) signal.</li>
-	<li><b>Wet</b> - the amount of wet (processed) signal.</li>
-	<li><b>Dry/Wet</b> - the knob that controls this balance between mixed dry and wet signal (see <b>Dry</b> and <b>Wet</b>) and the dry (unprocessed) signal.</li>
-	<li><b>Ranges</b> - allows to configure up to four additional knees, attack and release ranges:</li>
-	<ul>
-		<li><b>Thr</b> - Knob that enables additional knee.</li>
-		<li><b>Att</b> - Knob that enables additional attack range.</li>
-		<li><b>Rel</b> - Knob that enables additional release range.</li>
-		<li><b>Thresh</b> - Threshold of the additional knee, works only if corresponding <b>Thr</b> button is turned on.</li>
-		<li><b>Gain</b> - Gain of the additional knee, works only if corresponding <b>Thr</b> button is turned on.</li>
-		<li><b>Knee</b> - Softness of the knee, works only if corresponding <b>Thr</b> button is turned on.</li>
-		<li><b>Attack</b> - Pair of knobs that allows to adjust the attack threshold and attack time of the additional
-			attack range. The new attack time is applied if the envelope is <b>over</b> the specified threshold. Otherwise
-			the attack time of previous range or default attack time (if there is no previous range) will be applied.
-		</li>
-		<li><b>Release</b> - Pair of knobs that allows to adjust the release threshold and release time of the additional
-			release range. The new release time is applied if the envelope is <b>over</b> the specified threshold. Otherwise
-			the release time of previous range or default release time (if there is no previous range) will be applied.
-		</li>
-	</ul>
 </ul>
-<p><b>'Signal' section:</b></p>
+<p><b>Dry/Wet mix control overlay:</b></p>
 <ul>
-	<li><b>Input</b> - overall input gain.</li>
-	<li><b>Output</b> - overall output gain.</li>
+	<li><b>Mix Dry</b> - the amount of dry (unprocessed) signal.</li>
+	<li><b>Mix Wet</b> - the amount of wet (processed) signal.</li>
+	<li><b>Mix Dry/Wet</b> - the knob that controls this balance between mixed dry and wet signal (see <b>Mix Dry</b> and <b>Mix Wet</b>) and the dry (unprocessed) signal.</li>
 </ul>
+
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/src/main/meta/dyna_processor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/src/main/meta/dyna_processor.cpp
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/src/main/meta/dyna_processor.cpp	2025-03-01 12:43:04.936599502 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/src/main/meta/dyna_processor.cpp	2025-08-26 18:15:55.309890865 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-dyna-processor
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_DYNA_PROCESSOR_VERSION_MAJOR       1
 #define LSP_PLUGINS_DYNA_PROCESSOR_VERSION_MINOR       0
-#define LSP_PLUGINS_DYNA_PROCESSOR_VERSION_MICRO       28
+#define LSP_PLUGINS_DYNA_PROCESSOR_VERSION_MICRO       30
 
 #define LSP_PLUGINS_DYNA_PROCESSOR_VERSION  \
     LSP_MODULE_VERSION( \
@@ -119,25 +119,39 @@ namespace lsp
             { NULL, NULL }
         };
 
+        #define DYNA_PROC_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define DYNA_PROC_SC_PREMIX \
+            DYNA_PROC_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
+
         #define DYNA_PROC_COMMON     \
             BYPASS,             \
             IN_GAIN,            \
             OUT_GAIN,           \
-            SWITCH("pause", "Pause graph analysis", 0.0f), \
-            TRIGGER("clear", "Clear graph analysis")
+            SWITCH("showmx", "Show mix overlay", "Show mix bar", 0.0f), \
+            SWITCH("showsc", "Show sidechain overlay", "Show SC bar", 0.0f), \
+            SWITCH("pause", "Pause graph analysis", "Pause", 0.0f), \
+            TRIGGER("clear", "Clear graph analysis", "Clear")
 
         #define DYNA_PROC_LR_COMMON  \
             DYNA_PROC_COMMON,        \
-            COMBO("psel", "Processor selector", 0, dyna_proc_sel_lr)
+            COMBO("psel", "Processor selector", "Proc selector", 0, dyna_proc_sel_lr)
 
         #define DYNA_PROC_MS_COMMON  \
             DYNA_PROC_COMMON,        \
-            COMBO("psel", "Processor selector", 0, dyna_proc_sel_ms), \
-            SWITCH("msl", "Mid/Side listen", 0.0f)
+            COMBO("psel", "Processor selector", "Proc selector", 0, dyna_proc_sel_ms), \
+            SWITCH("msl", "Mid/Side listen", "M/S listen", 0.0f)
 
         #define DYNA_PROC_SPLIT_COMMON \
-            SWITCH("ssplit", "Stereo split", 0.0f), \
-            COMBO("sscs", "Split sidechain source", dyna_processor_metadata::SC_SPLIT_SOURCE_DFL, dyna_proc_sc_split_sources)
+            SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f), \
+            COMBO("sscs", "Split sidechain source", "Split SC source", dyna_processor_metadata::SC_SPLIT_SOURCE_DFL, dyna_proc_sc_split_sources)
 
         #define DYNA_PROC_SHM_LINK_MONO \
             OPT_RETURN_MONO("link", "shml", "Side-chain shared memory link")
@@ -145,67 +159,70 @@ namespace lsp
         #define DYNA_PROC_SHM_LINK_STEREO \
             OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
 
-        #define DYNA_PROC_SC_MONO_CHANNEL(sct) \
-            COMBO("sct", "Sidechain type", dyna_processor_metadata::SC_TYPE_DFL, sct), \
-            COMBO("scm", "Sidechain mode", dyna_processor_metadata::SC_MODE_DFL, dyna_proc_sc_modes), \
-            CONTROL("sla", "Sidechain lookahead", U_MSEC, dyna_processor_metadata::LOOKAHEAD), \
-            SWITCH("scl", "Sidechain listen", 0.0f), \
-            LOG_CONTROL("scr", "Sidechain reactivity", U_MSEC, dyna_processor_metadata::REACTIVITY), \
-            AMP_GAIN100("scp", "Sidechain preamp", GAIN_AMP_0_DB), \
-            COMBO("shpm", "High-pass filter mode", 0, dyna_proc_filter_slope),      \
-            LOG_CONTROL("shpf", "High-pass filter frequency", U_HZ, dyna_processor_metadata::HPF),   \
-            COMBO("slpm", "Low-pass filter mode", 0, dyna_proc_filter_slope),      \
-            LOG_CONTROL("slpf", "Low-pass filter frequency", U_HZ, dyna_processor_metadata::LPF)
-
-        #define DYNA_PROC_SC_STEREO_CHANNEL(id, label, sct) \
-            COMBO("sct" id, "Sidechain type" label, dyna_processor_metadata::SC_TYPE_DFL, sct), \
-            COMBO("scm" id, "Sidechain mode" label, dyna_processor_metadata::SC_MODE_DFL, dyna_proc_sc_modes), \
-            CONTROL("sla" id, "Sidechain lookahead" label, U_MSEC, dyna_processor_metadata::LOOKAHEAD), \
-            SWITCH("scl" id, "Sidechain listen" label, 0.0f), \
-            COMBO("scs" id, "Sidechain source" label, dyna_processor_metadata::SC_SOURCE_DFL, dyna_proc_sc_sources), \
-            LOG_CONTROL("scr" id, "Sidechain reactivity" label, U_MSEC, dyna_processor_metadata::REACTIVITY), \
-            AMP_GAIN100("scp" id, "Sidechain preamp" label, GAIN_AMP_0_DB), \
-            COMBO("shpm" id, "High-pass filter mode" label, 0, dyna_proc_filter_slope),      \
-            LOG_CONTROL("shpf" id, "High-pass filter frequency" label, U_HZ, dyna_processor_metadata::HPF),   \
-            COMBO("slpm" id, "Low-pass filter mode" label, 0, dyna_proc_filter_slope),      \
-            LOG_CONTROL("slpf" id, "Low-pass filter frequency" label, U_HZ, dyna_processor_metadata::LPF)
-
-        #define DYNA_POINT(idx, on, id, label, level) \
-            SWITCH("pe" #idx id, "Point enable " #idx label, on), \
-            LOG_CONTROL_DFL("tl" #idx id, "Threshold " #idx label, U_GAIN_AMP, dyna_processor_metadata::THRESHOLD, level), \
-            LOG_CONTROL_DFL("gl" #idx id, "Gain " #idx label, U_GAIN_AMP, dyna_processor_metadata::THRESHOLD, level), \
-            LOG_CONTROL("kn" #idx id, "Knee " #idx label, U_GAIN_AMP, dyna_processor_metadata::KNEE), \
-            SWITCH("ae" #idx id, "Attack enable " #idx label, 0.0f), \
-            LOG_CONTROL_DFL("al" #idx id, "Attack level " #idx label, U_GAIN_AMP, dyna_processor_metadata::ATTACK_LVL, level), \
-            LOG_CONTROL("at" #idx id, "Attack time " #idx label, U_MSEC, dyna_processor_metadata::ATTACK_TIME), \
-            SWITCH("re" #idx id, "Release enable " #idx label, 0.0f), \
-            LOG_CONTROL_DFL("rl" #idx id, "Relative level " #idx label, U_GAIN_AMP, dyna_processor_metadata::RELEASE_LVL, level), \
-            LOG_CONTROL("rt" #idx id, "Release time " #idx label, U_MSEC, dyna_processor_metadata::RELEASE_TIME)
-
-        #define DYNA_PROC_CHANNEL(id, label) \
-            LOG_CONTROL("atd" id, "Attack time default" label, U_MSEC, dyna_processor_metadata::ATTACK_TIME), \
-            LOG_CONTROL("rtd" id, "Release time default" label, U_MSEC, dyna_processor_metadata::RELEASE_TIME), \
-            DYNA_POINT(0, 1.0f, id, label, GAIN_AMP_M_12_DB), \
-            DYNA_POINT(1, 0.0f, id, label, GAIN_AMP_M_24_DB), \
-            DYNA_POINT(2, 0.0f, id, label, GAIN_AMP_M_36_DB), \
-            DYNA_POINT(3, 0.0f, id, label, GAIN_AMP_M_48_DB), \
-            CONTROL("hold" id, "Hold time" label, U_MSEC, dyna_processor_metadata::HOLD_TIME), \
-            LOG_CONTROL("llr" id, "Low-level ratio" label, U_NONE, dyna_processor_metadata::RATIO), \
-            LOG_CONTROL("hlr" id, "High-level ratio" label, U_NONE, dyna_processor_metadata::RATIO), \
-            LOG_CONTROL("omk" id, "Overall makeup gain" label, U_GAIN_AMP, dyna_processor_metadata::MAKEUP), \
-            AMP_GAIN10("cdr" id, "Dry gain" label, GAIN_AMP_M_INF_DB),     \
-            AMP_GAIN10("cwt" id, "Wet gain" label, GAIN_AMP_0_DB), \
-            PERCENTS("cdw" id, "Dry/Wet balance" label, 100.0f, 0.1f), \
-            SWITCH("cmv" id, "Curve modelling visibility" label, 1.0f), \
+        #define DYNA_PROC_SC_MONO_CHANNEL(sct, sct_dfl) \
+            COMBO("sct", "Sidechain type", "SC type", sct_dfl, sct), \
+            COMBO("scm", "Sidechain mode", "SC mode", dyna_processor_metadata::SC_MODE_DFL, dyna_proc_sc_modes), \
+            CONTROL("sla", "Sidechain lookahead", "SC look", U_MSEC, dyna_processor_metadata::LOOKAHEAD), \
+            SWITCH("scl", "Sidechain listen", "SC listen", 0.0f), \
+            LOG_CONTROL("scr", "Sidechain reactivity", "SC react", U_MSEC, dyna_processor_metadata::REACTIVITY), \
+            AMP_GAIN100("scp", "Sidechain preamp", "SC preamp", GAIN_AMP_0_DB), \
+            COMBO("shpm", "High-pass filter mode", "HPF mode", 0, dyna_proc_filter_slope),      \
+            LOG_CONTROL("shpf", "High-pass filter frequency", "HPF freq", U_HZ, dyna_processor_metadata::HPF),   \
+            COMBO("slpm", "Low-pass filter mode", "LPF mode", 0, dyna_proc_filter_slope),      \
+            LOG_CONTROL("slpf", "Low-pass filter frequency", "LPF freq", U_HZ, dyna_processor_metadata::LPF)
+
+        #define DYNA_PROC_SC_STEREO_CHANNEL(id, label, alias, sct, sct_dfl) \
+            COMBO("sct" id, "Sidechain type" label, "SC type" alias, sct_dfl, sct), \
+            COMBO("scm" id, "Sidechain mode" label, "SC mode" alias, dyna_processor_metadata::SC_MODE_DFL, dyna_proc_sc_modes), \
+            CONTROL("sla" id, "Sidechain lookahead" label, "SC look" alias, U_MSEC, dyna_processor_metadata::LOOKAHEAD), \
+            SWITCH("scl" id, "Sidechain listen" label, "SC listen" alias, 0.0f), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, dyna_processor_metadata::SC_SOURCE_DFL, dyna_proc_sc_sources), \
+            LOG_CONTROL("scr" id, "Sidechain reactivity" label, "SC react" alias, U_MSEC, dyna_processor_metadata::REACTIVITY), \
+            AMP_GAIN100("scp" id, "Sidechain preamp" label, "SC preamp" alias, GAIN_AMP_0_DB), \
+            COMBO("shpm" id, "High-pass filter mode" label, "HPF mode" alias, 0, dyna_proc_filter_slope),      \
+            LOG_CONTROL("shpf" id, "High-pass filter frequency" label, "HPF freq" alias, U_HZ, dyna_processor_metadata::HPF),   \
+            COMBO("slpm" id, "Low-pass filter mode" label, "LPF mode" alias, 0, dyna_proc_filter_slope),      \
+            LOG_CONTROL("slpf" id, "Low-pass filter frequency" label, "LPF freq" alias, U_HZ, dyna_processor_metadata::LPF)
+
+        #define DYNA_POINT(idx, on, id, label, alias, level) \
+            SWITCH("pe" #idx id, "Point enable " #idx label, "Point on" #idx alias, on), \
+            LOG_CONTROL_DFL("tl" #idx id, "Threshold " #idx label, "Thresh " #idx alias, U_GAIN_AMP, dyna_processor_metadata::THRESHOLD, level), \
+            LOG_CONTROL_DFL("gl" #idx id, "Gain " #idx label, "Gain " #idx alias, U_GAIN_AMP, dyna_processor_metadata::THRESHOLD, level), \
+            LOG_CONTROL("kn" #idx id, "Knee " #idx label, "Knee " #idx alias, U_GAIN_AMP, dyna_processor_metadata::KNEE), \
+            SWITCH("ae" #idx id, "Attack enable " #idx label, "Att on" #idx alias, 0.0f), \
+            LOG_CONTROL_DFL("al" #idx id, "Attack level " #idx label, "Att lvl " #idx alias, U_GAIN_AMP, dyna_processor_metadata::ATTACK_LVL, level), \
+            LOG_CONTROL("at" #idx id, "Attack time " #idx label, "Att time " #idx alias, U_MSEC, dyna_processor_metadata::ATTACK_TIME), \
+            SWITCH("re" #idx id, "Release enable " #idx label, "Rel on" #idx alias, 0.0f), \
+            LOG_CONTROL_DFL("rl" #idx id, "Release level " #idx label, "Rel lvl " #idx label, U_GAIN_AMP, dyna_processor_metadata::RELEASE_LVL, level), \
+            LOG_CONTROL("rt" #idx id, "Release time " #idx label, "Rel time " #idx alias, U_MSEC, dyna_processor_metadata::RELEASE_TIME)
+
+        #define DYNA_PROC_CHANNEL(id, label, alias) \
+            LOG_CONTROL("atd" id, "Attack time default" label, "Att time dfl" alias, U_MSEC, dyna_processor_metadata::ATTACK_TIME), \
+            LOG_CONTROL("rtd" id, "Release time default" label, "Rel time dfl" alias, U_MSEC, dyna_processor_metadata::RELEASE_TIME), \
+            DYNA_POINT(0, 1.0f, id, label, alias, GAIN_AMP_M_12_DB), \
+            DYNA_POINT(1, 0.0f, id, label, alias, GAIN_AMP_M_24_DB), \
+            DYNA_POINT(2, 0.0f, id, label, alias, GAIN_AMP_M_36_DB), \
+            DYNA_POINT(3, 0.0f, id, label, alias, GAIN_AMP_M_48_DB), \
+            CONTROL("hold" id, "Hold time" label, "Hold time" alias, U_MSEC, dyna_processor_metadata::HOLD_TIME), \
+            LOG_CONTROL("llr" id, "Low-level ratio" label, "Low ratio" alias, U_NONE, dyna_processor_metadata::RATIO), \
+            LOG_CONTROL("hlr" id, "High-level ratio" label, "High ratio" alias, U_NONE, dyna_processor_metadata::RATIO), \
+            LOG_CONTROL("omk" id, "Overall makeup gain" label, "Makeup" alias, U_GAIN_AMP, dyna_processor_metadata::MAKEUP), \
+            AMP_GAIN10("cdr" id, "Dry gain" label, "Dry" alias, GAIN_AMP_M_INF_DB),     \
+            AMP_GAIN10("cwt" id, "Wet gain" label, "Wet" alias, GAIN_AMP_0_DB), \
+            PERCENTS("cdw" id, "Dry/Wet balance" label, "Dry/Wet" alias, 100.0f, 0.1f), \
+            SWITCH("cmv" id, "Curve modelling visibility" label, "Show curve" alias, 1.0f), \
             MESH("cmg" id, "Curve modelling graph" label, 2, dyna_processor_metadata::CURVE_MESH_SIZE), \
             MESH("ccg" id, "Curve graph" label, 2, dyna_processor_metadata::CURVE_MESH_SIZE)
 
-        #define DYNA_PROC_AUDIO_METER(id, label) \
-            SWITCH("slv" id, "Sidechain level visibility" label, 1.0f), \
-            SWITCH("elv" id, "Envelope level visibility" label, 1.0f), \
-            SWITCH("grv" id, "Gain reduction visibility" label, 1.0f), \
-            SWITCH("ilv" id, "Input level visibility" label, 1.0f), \
-            SWITCH("olv" id, "Output level visibility" label, 1.0f), \
+        #define DYNA_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
+
+        #define DYNA_PROC_AUDIO_METER(id, label, alias) \
+            SWITCH("slv" id, "Sidechain level visibility" label, "Show SC" alias, 1.0f), \
+            SWITCH("elv" id, "Envelope level visibility" label, "Show Env" alias, 1.0f), \
+            SWITCH("grv" id, "Gain reduction visibility" label, "Show Gain" alias, 1.0f), \
+            SWITCH("ilv" id, "Input level visibility" label, "Show In" alias, 1.0f), \
+            SWITCH("olv" id, "Output level visibility" label, "Show Out" alias, 1.0f), \
             MESH("scg" id, "Sidechain graph" label, 2, dyna_processor_metadata::TIME_MESH_SIZE), \
             MESH("evg" id, "Envelope graph" label, 2, dyna_processor_metadata::TIME_MESH_SIZE), \
             MESH("grg" id, "Gain reduciton" label, 2, dyna_processor_metadata::TIME_MESH_SIZE + 4), \
@@ -222,10 +239,11 @@ namespace lsp
         {
             PORTS_MONO_PLUGIN,
             DYNA_PROC_SHM_LINK_MONO,
+            DYNA_PROC_PREMIX,
             DYNA_PROC_COMMON,
-            DYNA_PROC_SC_MONO_CHANNEL(dyna_proc_sc_type),
-            DYNA_PROC_CHANNEL("", ""),
-            DYNA_PROC_AUDIO_METER("", ""),
+            DYNA_PROC_SC_MONO_CHANNEL(dyna_proc_sc_type, 0),
+            DYNA_PROC_CHANNEL("", "", ""),
+            DYNA_PROC_AUDIO_METER("", "", ""),
 
             PORTS_END
         };
@@ -234,12 +252,13 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             DYNA_PROC_SHM_LINK_STEREO,
+            DYNA_PROC_PREMIX,
             DYNA_PROC_COMMON,
             DYNA_PROC_SPLIT_COMMON,
-            DYNA_PROC_SC_STEREO_CHANNEL("", "", dyna_proc_sc_type),
-            DYNA_PROC_CHANNEL("", ""),
-            DYNA_PROC_AUDIO_METER("_l", " Left"),
-            DYNA_PROC_AUDIO_METER("_r", " Right"),
+            DYNA_PROC_SC_STEREO_CHANNEL("", "", "", dyna_proc_sc_type, 0),
+            DYNA_PROC_CHANNEL("", "", ""),
+            DYNA_PROC_AUDIO_METER("_l", " Left", " L"),
+            DYNA_PROC_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -248,13 +267,15 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             DYNA_PROC_SHM_LINK_STEREO,
+            DYNA_PROC_PREMIX,
             DYNA_PROC_LR_COMMON,
-            DYNA_PROC_SC_STEREO_CHANNEL("_l", " Left", dyna_proc_sc_type),
-            DYNA_PROC_SC_STEREO_CHANNEL("_r", " Right", dyna_proc_sc_type),
-            DYNA_PROC_CHANNEL("_l", " Left"),
-            DYNA_PROC_CHANNEL("_r", " Right"),
-            DYNA_PROC_AUDIO_METER("_l", " Left"),
-            DYNA_PROC_AUDIO_METER("_r", " Right"),
+            DYNA_LINK("clink", "Left/Right controls link", "L/R link"),
+            DYNA_PROC_SC_STEREO_CHANNEL("_l", " Left", " L", dyna_proc_sc_type, 0),
+            DYNA_PROC_SC_STEREO_CHANNEL("_r", " Right", " R", dyna_proc_sc_type, 0),
+            DYNA_PROC_CHANNEL("_l", " Left", " L"),
+            DYNA_PROC_CHANNEL("_r", " Right", " R"),
+            DYNA_PROC_AUDIO_METER("_l", " Left", " L"),
+            DYNA_PROC_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -263,13 +284,15 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             DYNA_PROC_SHM_LINK_STEREO,
+            DYNA_PROC_PREMIX,
             DYNA_PROC_MS_COMMON,
-            DYNA_PROC_SC_STEREO_CHANNEL("_m", " Mid", dyna_proc_sc_type),
-            DYNA_PROC_SC_STEREO_CHANNEL("_s", " Side", dyna_proc_sc_type),
-            DYNA_PROC_CHANNEL("_m", " Mid"),
-            DYNA_PROC_CHANNEL("_s", " Side"),
-            DYNA_PROC_AUDIO_METER("_m", " Mid"),
-            DYNA_PROC_AUDIO_METER("_s", " Side"),
+            DYNA_LINK("clink", "Mid/Side controls link", "M/S link"),
+            DYNA_PROC_SC_STEREO_CHANNEL("_m", " Mid", " M", dyna_proc_sc_type, 0),
+            DYNA_PROC_SC_STEREO_CHANNEL("_s", " Side", " S", dyna_proc_sc_type, 0),
+            DYNA_PROC_CHANNEL("_m", " Mid", " M"),
+            DYNA_PROC_CHANNEL("_s", " Side", " S"),
+            DYNA_PROC_AUDIO_METER("_m", " Mid", " M"),
+            DYNA_PROC_AUDIO_METER("_s", " Side", " S"),
 
             PORTS_END
         };
@@ -279,10 +302,11 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             DYNA_PROC_SHM_LINK_MONO,
+            DYNA_PROC_SC_PREMIX,
             DYNA_PROC_COMMON,
-            DYNA_PROC_SC_MONO_CHANNEL(dyna_proc_extsc_type),
-            DYNA_PROC_CHANNEL("", ""),
-            DYNA_PROC_AUDIO_METER("", ""),
+            DYNA_PROC_SC_MONO_CHANNEL(dyna_proc_extsc_type, 2),
+            DYNA_PROC_CHANNEL("", "", ""),
+            DYNA_PROC_AUDIO_METER("", "", ""),
 
             PORTS_END
         };
@@ -292,12 +316,13 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             DYNA_PROC_SHM_LINK_STEREO,
+            DYNA_PROC_SC_PREMIX,
             DYNA_PROC_COMMON,
             DYNA_PROC_SPLIT_COMMON,
-            DYNA_PROC_SC_STEREO_CHANNEL("", "", dyna_proc_extsc_type),
-            DYNA_PROC_CHANNEL("", ""),
-            DYNA_PROC_AUDIO_METER("_l", " Left"),
-            DYNA_PROC_AUDIO_METER("_r", " Right"),
+            DYNA_PROC_SC_STEREO_CHANNEL("", "", "", dyna_proc_extsc_type, 2),
+            DYNA_PROC_CHANNEL("", "", ""),
+            DYNA_PROC_AUDIO_METER("_l", " Left", " L"),
+            DYNA_PROC_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -307,13 +332,15 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             DYNA_PROC_SHM_LINK_STEREO,
+            DYNA_PROC_SC_PREMIX,
             DYNA_PROC_LR_COMMON,
-            DYNA_PROC_SC_STEREO_CHANNEL("_l", " Left", dyna_proc_extsc_type),
-            DYNA_PROC_SC_STEREO_CHANNEL("_r", " Right", dyna_proc_extsc_type),
-            DYNA_PROC_CHANNEL("_l", " Left"),
-            DYNA_PROC_CHANNEL("_r", " Right"),
-            DYNA_PROC_AUDIO_METER("_l", " Left"),
-            DYNA_PROC_AUDIO_METER("_r", " Right"),
+            DYNA_LINK("clink", "Left/Right controls link", "L/R link"),
+            DYNA_PROC_SC_STEREO_CHANNEL("_l", " Left", " L", dyna_proc_extsc_type, 2),
+            DYNA_PROC_SC_STEREO_CHANNEL("_r", " Right", " R", dyna_proc_extsc_type, 2),
+            DYNA_PROC_CHANNEL("_l", " Left", " L"),
+            DYNA_PROC_CHANNEL("_r", " Right", " R"),
+            DYNA_PROC_AUDIO_METER("_l", " Left", " L"),
+            DYNA_PROC_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -323,13 +350,15 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             DYNA_PROC_SHM_LINK_STEREO,
+            DYNA_PROC_SC_PREMIX,
             DYNA_PROC_MS_COMMON,
-            DYNA_PROC_SC_STEREO_CHANNEL("_m", " Mid", dyna_proc_extsc_type),
-            DYNA_PROC_SC_STEREO_CHANNEL("_s", " Side", dyna_proc_extsc_type),
-            DYNA_PROC_CHANNEL("_m", " Mid"),
-            DYNA_PROC_CHANNEL("_s", " Side"),
-            DYNA_PROC_AUDIO_METER("_m", " Mid"),
-            DYNA_PROC_AUDIO_METER("_s", " Side"),
+            DYNA_LINK("clink", "Mid/Side controls link", "M/S link"),
+            DYNA_PROC_SC_STEREO_CHANNEL("_m", " Mid", " M", dyna_proc_extsc_type, 2),
+            DYNA_PROC_SC_STEREO_CHANNEL("_s", " Side", " S", dyna_proc_extsc_type, 2),
+            DYNA_PROC_CHANNEL("_m", " Mid", " M"),
+            DYNA_PROC_CHANNEL("_s", " Side", " S"),
+            DYNA_PROC_AUDIO_METER("_m", " Mid", " M"),
+            DYNA_PROC_AUDIO_METER("_s", " Side", " S"),
 
             PORTS_END
         };
@@ -368,7 +397,7 @@ namespace lsp
             clap_features_mono,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             dyna_processor_mono_ports,
-            "dynamics/processor/single/mono.xml",
+            "dynamics/processor/single.xml",
             NULL,
             mono_plugin_port_groups,
             &dyna_processor_bundle
@@ -398,7 +427,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             dyna_processor_stereo_ports,
-            "dynamics/processor/single/stereo.xml",
+            "dynamics/processor/single.xml",
             NULL,
             stereo_plugin_port_groups,
             &dyna_processor_bundle
@@ -428,7 +457,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             dyna_processor_lr_ports,
-            "dynamics/processor/single/lr.xml",
+            "dynamics/processor/single.xml",
             NULL,
             stereo_plugin_port_groups,
             &dyna_processor_bundle
@@ -458,7 +487,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             dyna_processor_ms_ports,
-            "dynamics/processor/single/ms.xml",
+            "dynamics/processor/single.xml",
             NULL,
             stereo_plugin_port_groups,
             &dyna_processor_bundle
@@ -489,7 +518,7 @@ namespace lsp
             clap_features_mono,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_dyna_processor_mono_ports,
-            "dynamics/processor/single/mono.xml",
+            "dynamics/processor/single.xml",
             NULL,
             mono_plugin_sidechain_port_groups,
             &dyna_processor_bundle
@@ -519,7 +548,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_dyna_processor_stereo_ports,
-            "dynamics/processor/single/stereo.xml",
+            "dynamics/processor/single.xml",
             NULL,
             stereo_plugin_sidechain_port_groups,
             &dyna_processor_bundle
@@ -549,7 +578,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_dyna_processor_lr_ports,
-            "dynamics/processor/single/lr.xml",
+            "dynamics/processor/single.xml",
             NULL,
             stereo_plugin_sidechain_port_groups,
             &dyna_processor_bundle
@@ -579,7 +608,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_dyna_processor_ms_ports,
-            "dynamics/processor/single/ms.xml",
+            "dynamics/processor/single.xml",
             NULL,
             stereo_plugin_sidechain_port_groups,
             &dyna_processor_bundle
diff -pruN 1.2.21-5/modules/lsp-plugins-dyna-processor/src/main/plug/dyna_processor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/src/main/plug/dyna_processor.cpp
--- 1.2.21-5/modules/lsp-plugins-dyna-processor/src/main/plug/dyna_processor.cpp	2025-03-01 12:43:04.936599502 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-dyna-processor/src/main/plug/dyna_processor.cpp	2025-08-26 18:15:55.309890865 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-dyna-processor
  * Created on: 3 авг. 2021 г.
@@ -29,7 +29,7 @@
 #include <lsp-plug.in/shared/debug.h>
 #include <lsp-plug.in/shared/id_colors.h>
 
-#define DYNA_PROC_BUF_SIZE          0x1000
+#define DYNA_PROC_BUF_SIZE          0x200
 
 namespace lsp
 {
@@ -110,6 +110,31 @@ namespace lsp
 
             pData           = NULL;
             pIDisplay       = NULL;
+
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
         }
 
         dyna_processor::~dyna_processor()
@@ -130,6 +155,7 @@ namespace lsp
             size_t allocate         = channel_size +
                                       buf_size +
                                       buf_size * channels * 5 +
+                                      buf_size * channels * 3 +
                                       curve_size +
                                       history_size;
 
@@ -142,6 +168,14 @@ namespace lsp
             vTime                   = advance_ptr_bytes<float>(ptr, history_size);
             vEmptyBuffer            = advance_ptr_bytes<float>(ptr, buf_size);
 
+            // Initialize pre-mix
+            for (size_t i=0; i<channels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, buf_size);
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, buf_size);
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, buf_size);
+            }
+
             // Initialize channels
             for (size_t i=0; i<channels; ++i)
             {
@@ -263,11 +297,26 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
             BIND_PORT(pInGain);
             BIND_PORT(pOutGain);
+            SKIP_PORT("Show mix overlay");
+            SKIP_PORT("Show sidechain overlay");
             BIND_PORT(pPause);
             BIND_PORT(pClear);
             if ((nMode == DYNA_LR) || (nMode == DYNA_MS))
@@ -282,6 +331,8 @@ namespace lsp
                 BIND_PORT(pStereoSplit);
                 BIND_PORT(pScSpSource);
             }
+            if ((nMode == DYNA_LR) || (nMode == DYNA_MS))
+                SKIP_PORT("Separate channels link");
 
             // Sidechain ports
             lsp_trace("Binding sidechain ports");
@@ -595,12 +646,25 @@ namespace lsp
             return in;
         }
 
+        void dyna_processor::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void dyna_processor::update_settings()
         {
             dspu::filter_params_t fp;
             size_t channels = (nMode == DYNA_MONO) ? 1 : 2;
             bool bypass     = pBypass->value() >= 0.5f;
 
+            // Update pre-mix matrix
+            update_premix();
+
             // Global parameters
             bPause          = pPause->value() >= 0.5f;
             bClear          = pClear->value() >= 0.5f;
@@ -755,6 +819,120 @@ namespace lsp
             dsp::mul3(c->vOut, c->vGain, c->vIn, samples); // Adjust gain for input
         }
 
+        void dyna_processor::premix_channel(uint32_t channel, float * & in, float * & out, float * & sc, float * & link, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            in                      = in_buf;
+            out                     = out_buf;
+            sc                      = sc_buf;
+            link                    = link_buf;
+
+            sPremix.vIn[channel]    = &in_buf[count];
+            sPremix.vOut[channel]   = &out_buf[count];
+            if (sc_buf != NULL)
+                sPremix.vSc[channel]    = &sc_buf[count];
+            if (link_buf != NULL)
+                sPremix.vLink[channel]  = &link_buf[count];
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    in                  = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(in, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(in, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    in                  = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(in, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    sc                  = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(sc, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(sc, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    sc                  = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(sc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    link                = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(link, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(link, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    link                = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(link, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        in              = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(in, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        sc              = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(sc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    link            = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(link, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void dyna_processor::process(size_t samples)
         {
             size_t channels = (nMode == DYNA_MONO) ? 1 : 2;
@@ -772,14 +950,14 @@ namespace lsp
                 channel_t *c        = &vChannels[i];
 
                 // Initialize pointers
-                in_buf[i]           = c->pIn->buffer<float>();
-                out_buf[i]          = c->pOut->buffer<float>();
-                sc_buf[i]           = (c->pSC != NULL) ? c->pSC->buffer<float>() : in_buf[i];
-                shm_buf[i]          = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pSC != NULL) ? c->pSC->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *buf = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((buf != NULL) && (buf->active()))
-                    shm_buf[i]          = buf->buffer();
+                    sPremix.vLink[i]    = buf->buffer();
 
                 // Analyze channel mode
                 if (c->nScType == SCT_FEED_BACK)
@@ -791,7 +969,11 @@ namespace lsp
             while (left > 0)
             {
                 // Detemine number of samples to process
-                size_t to_process = (left > DYNA_PROC_BUF_SIZE) ? DYNA_PROC_BUF_SIZE : left;
+                const size_t to_process     = (left > DYNA_PROC_BUF_SIZE) ? DYNA_PROC_BUF_SIZE : left;
+
+                // Pre-mix channel data
+                for (size_t i=0; i<channels; ++i)
+                    premix_channel(i, in_buf[i], out_buf[i], sc_buf[i], shm_buf[i], to_process);
 
                 // Prepare audio channels
                 if (nMode == DYNA_MONO)
@@ -979,13 +1161,6 @@ namespace lsp
                     channel_t *c        = &vChannels[i];
                     c->sDryDelay.process(c->vIn, in_buf[i], to_process);
                     c->sBypass.process(out_buf[i], c->vIn, c->vOut, to_process);
-
-                    in_buf[i]          += to_process;
-                    out_buf[i]         += to_process;
-                    if (sc_buf[i] != NULL)
-                        sc_buf[i]          += to_process;
-                    if (shm_buf[i] != NULL)
-                        shm_buf[i]         += to_process;
                 }
 
                 left       -= to_process;
@@ -1353,6 +1528,32 @@ namespace lsp
             v->write("bUISync", bUISync);
             v->write("pIDisplay", pIDisplay);
 
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
+
             v->write("pBypass", pBypass);
             v->write("pInGain", pInGain);
             v->write("pOutGain", pOutGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-expander/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-expander/.github/workflows/build.yml	2025-03-01 12:43:05.388596790 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/.github/workflows/build.yml	2025-08-26 18:15:55.533888691 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-expander/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-expander/CHANGELOG	2025-03-01 12:43:05.388596790 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/CHANGELOG	2025-08-26 18:15:55.533888691 +0000
@@ -2,6 +2,15 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.30 ===
+* Added audio pre-mixing controls.
+* Added left/right and mid/side linking in the UI.
+* Updated build scripts and dependencies.
+
+=== 1.0.29 ===
+* Added overlay support for Sidechain and Mix.
+* Updated build scripts and dependencies.
+
 === 1.0.28 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-expander/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-expander/dependencies.mk	2025-03-01 12:43:05.388596790 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/dependencies.mk	2025-08-26 18:15:55.533888691 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/include/private/plugins/expander.h 1.2.23-0ubuntu1/modules/lsp-plugins-expander/include/private/plugins/expander.h
--- 1.2.21-5/modules/lsp-plugins-expander/include/private/plugins/expander.h	2025-03-01 12:43:05.388596790 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/include/private/plugins/expander.h	2025-08-26 18:15:55.533888691 +0000
@@ -89,6 +89,32 @@ namespace lsp
                     S_ALL       = S_CURVE
                 };
 
+                typedef struct premix_t
+                {
+                    float                   fInToSc;            // Input -> Sidechain mix
+                    float                   fInToLink;          // Input -> Link mix
+                    float                   fLinkToIn;          // Link -> Input mix
+                    float                   fLinkToSc;          // Link -> Sidechain mix
+                    float                   fScToIn;            // Sidechain -> Input mix
+                    float                   fScToLink;          // Sidechain -> Link mix
+
+                    float                  *vIn[2];             // Input buffer
+                    float                  *vOut[2];            // Output buffer
+                    float                  *vSc[2];             // Sidechain buffer
+                    float                  *vLink[2];           // Link buffer
+
+                    float                  *vTmpIn[2];          // Replacement buffer for input
+                    float                  *vTmpLink[2];        // Replacement buffer for link
+                    float                  *vTmpSc[2];          // Replacement buffer for sidechain
+
+                    plug::IPort            *pInToSc;            // Input -> Sidechain mix
+                    plug::IPort            *pInToLink;          // Input -> Link mix
+                    plug::IPort            *pLinkToIn;          // Link -> Input mix
+                    plug::IPort            *pLinkToSc;          // Link -> Sidechain mix
+                    plug::IPort            *pScToIn;            // Sidechain -> Input mix
+                    plug::IPort            *pScToLink;          // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct channel_t
                 {
                     dspu::Bypass            sBypass;            // Bypass
@@ -167,6 +193,8 @@ namespace lsp
                 bool                    bUISync;        // UI Sync
                 core::IDBuffer         *pIDisplay;      // Inline display buffer
 
+                premix_t                sPremix;        // Pre-mix settings
+
                 plug::IPort            *pBypass;        // Bypass port
                 plug::IPort            *pInGain;        // Input gain
                 plug::IPort            *pOutGain;       // Output gain
@@ -184,6 +212,8 @@ namespace lsp
 
             protected:
                 void                do_destroy();
+                void                update_premix();
+                void                premix_channel(uint32_t channel, float * & in, float * & out, float * & sc, float * & link, size_t count);
                 uint32_t            decode_sidechain_type(uint32_t sc) const;
                 inline float       *select_buffer(const channel_t & c, float *in, float *sc, float *shm);
 
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-expander/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-expander/make/tools.mk	2025-03-01 12:43:05.388596790 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/make/tools.mk	2025-08-26 18:15:55.537888653 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-expander/modules.mk
--- 1.2.21-5/modules/lsp-plugins-expander/modules.mk	2025-03-01 12:43:05.388596790 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/modules.mk	2025-08-26 18:15:55.537888653 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-expander/project.mk
--- 1.2.21-5/modules/lsp-plugins-expander/project.mk	2025-03-01 12:43:05.388596790 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/project.mk	2025-08-26 18:15:55.537888653 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Expander Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.28
+ARTIFACT_VERSION            = 1.0.30
 
 
 
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/res/doc/configs/sc_expander_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/configs/sc_expander_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-expander/res/doc/configs/sc_expander_stereo.cfg	2025-03-01 12:43:05.392596764 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/configs/sc_expander_stereo.cfg	2025-08-26 18:15:55.537888653 +0000
@@ -1,20 +1,26 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             lsp-plugin-fw ((null))
-#   Package version:     0.5.0
-#   Plugin name:         Sidechain-Expander Stereo (Sidechain Expander Stereo)
-#   Plugin version:      1.0.3
-#   UID:                 sc_expander_stereo
-#   LV2 URID:            http://lsp-plug.in/plugins/lv2/sc_expander_stereo
-#   VST identifier:      lwqv
-#   LADSPA identifier:   5002111
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/sc_expander_stereo
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Sidechain-Expander Stereo (Sidechain Expander Stereo)
+#   Plugin version:          1.0.29
+#   UID:                     sc_expander_stereo
+#   CLAP URI:                in.lsp-plug.sc_expander_stereo
+#   GStreamer identifier:    lsp-plugins-sc-expander-stereo
+#   LADSPA identifier:       5002111
+#   LADSPA label:            http://lsp-plug.in/plugins/ladspa/sc_expander_stereo
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/sc_expander_stereo
+#   VST 2.x identifier:      lwqv
+#   VST 3.x identifier:      6473702073636531732020206C777176
 # 
-# (C) LSP Plugin Framework
+# (C) Test Case
 #   https://lsp-plug.in/
 # 
 # -------------------------------------------------------------------------------
 
+# Side-chain shared memory link [string]
+link = ""
+
 # Bypass [boolean]: true/false
 bypass = false
 
@@ -24,22 +30,41 @@ g_in = 0.00 db
 # Output gain [G]: 0.00000000..1000.00000000
 g_out = 0.00 db
 
+# Show mix overlay [boolean]: true/false
+showmx = false
+
+# Show sidechain overlay [boolean]: true/false
+showsc = false
+
 # Pause graph analysis [boolean]: true/false
 pause = false
 
 # Clear graph analysis [boolean]: true/false
 clear = false
 
-# Sidechain input: 0..1
-#   0: Internal
-#   1: External
+# Stereo split [boolean]: true/false
+ssplit = false
+
+# Split sidechain source: 0..5
+#   0: Left/Right
+#   1: Right/Left
+#   2: Mid/Side
+#   3: Side/Mid
+#   4: Min
+#   5: Max
+sscs = 0
+
+# Sidechain input: 0..2
+#   0: External
+#   1: Internal
+#   2: Link
 sci = 1
 
 # Sidechain mode: 0..3
 #   0: Peak
 #   1: RMS
-#   2: Low-Pass
-#   3: Uniform
+#   2: LPF
+#   3: SMA
 scm = 1
 
 # Sidechain lookahead [ms]: 0.00000000..20.00000000
@@ -48,11 +73,13 @@ sla = 4.70000
 # Sidechain listen [boolean]: true/false
 scl = false
 
-# Sidechain source: 0..3
+# Sidechain source: 0..5
 #   0: Middle
 #   1: Side
 #   2: Left
 #   3: Right
+#   4: Min
+#   5: Max
 scs = 3
 
 # Sidechain reactivity [ms]: 0.00000000..250.00000000
@@ -87,7 +114,7 @@ slpf = 20000.00000
 em = 1
 
 # Attack threshold [G]: 0.00100000..1.00000000
-al = -6.49 db
+al = -21.65 db
 
 # Attack time [ms]: 0.00000000..2000.00000000
 at = 28.36917
@@ -98,6 +125,9 @@ rrl = -2.07 db
 # Release time [ms]: 0.00000000..5000.00000000
 rt = 16.15778
 
+# Hold time [ms]: 0.00000000..1000.00000000
+hold = 0.00000
+
 # Ratio: 1.00000000..100.00000000
 er = 4.00000
 
@@ -113,14 +143,17 @@ cdr = -inf db
 # Wet gain [G]: 0.00000000..10.00000000
 cwt = 0.00 db
 
-# Sidechain level visibility [boolean]: true/false
-slv = true
+# Dry/Wet balance [%]: 0.00000000..100.00000000
+cdw = 100.00000
 
-# Envelope level visibility [boolean]: true/false
-elv = true
+# Sidechain level visibility Left [boolean]: true/false
+slv_l = true
 
-# Gain reduction visibility [boolean]: true/false
-grv = true
+# Envelope level visibility Left [boolean]: true/false
+elv_l = true
+
+# Gain reduction visibility Left [boolean]: true/false
+grv_l = true
 
 # Input level visibility Left [boolean]: true/false
 ilv_l = true
@@ -128,6 +161,15 @@ ilv_l = true
 # Output level visibility Left [boolean]: true/false
 olv_l = true
 
+# Sidechain level visibility Right [boolean]: true/false
+slv_r = true
+
+# Envelope level visibility Right [boolean]: true/false
+elv_r = true
+
+# Gain reduction visibility Right [boolean]: true/false
+grv_r = true
+
 # Input level visibility Right [boolean]: true/false
 ilv_r = true
 
Binary files 1.2.21-5/modules/lsp-plugins-expander/res/doc/screenshots/expander_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/screenshots/expander_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-expander/res/doc/screenshots/expander_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/screenshots/expander_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-expander/res/doc/screenshots/expander_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/screenshots/expander_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-expander/res/doc/screenshots/expander_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/screenshots/expander_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-expander/res/doc/screenshots/sc_expander_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/screenshots/sc_expander_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-expander/res/doc/screenshots/sc_expander_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/screenshots/sc_expander_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-expander/res/doc/screenshots/sc_expander_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/screenshots/sc_expander_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-expander/res/doc/screenshots/sc_expander_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/doc/screenshots/sc_expander_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/lr.xml
--- 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/lr.xml	2025-03-01 12:43:05.400596716 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/lr.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,483 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv_l"/>
-						<mesh id="icg_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilv_r"/>
-						<mesh id="ocg_l" width="2" color="left" visibility=":olv_l"/>
-						<mesh id="ocg_r" width="2" color="right" visibility=":olv_r"/>
-						<mesh id="scg_l" width="2" color="sidechain_1" visibility=":slv_l"/>
-						<mesh id="scg_r" width="2" color="sidechain_2" visibility=":slv_r"/>
-						<mesh id="evg_l" width="2" color="envelope_1" visibility=":elv_l"/>
-						<mesh id="evg_r" width="2" color="envelope_2" visibility=":elv_r"/>
-						<mesh id="grg_l" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_l"/>
-						<mesh id="grg_r" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_r"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:attributes ox="1" oy="0">
-							<marker id="rl_l" width="2" pointer="vsize" color="release" lcolor="release" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="rl_r" width="2" pointer="vsize" color="release" lcolor="release" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="al_l" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="al_r" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-						</ui:attributes>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_l" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_r" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_l" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_r" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_l" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_r" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_l" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_r" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.expansion">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="ecg_l" width="3" color="left" smooth="true"/>
-					<mesh id="ecg_r" width="3" color="right" smooth="true"/>
-					<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left"/>
-					<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right"/>
-
-					<!-- Markers -->
-					<marker id="al_l" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="al_r" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="rl_l" color="release_1"/>
-					<marker id="rl_r" color="release_2"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="ilv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="olv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left_in"/>
-					<ledchannel id="ilm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left"/>
-					<ledchannel id="olm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="scr_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="sla_l" scolor="left"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1" pad.t="4">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sci_l"/>
-								<combo id="scm_l"/>
-								<combo id="scs_l"/>
-								<button id="scl_l" height="22" text="labels.listen" ui:inject="Button_left"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_l" pad.h="6" bright="(:shpm_l igt 0) ? 1 : 0.75" bg.bright="(:shpm_l igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_l" pad.h="6" bright="(:slpm_l igt 0) ? 1 : 0.75" bg.bright="(:slpm_l igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf_l" size="20" scolor="(:shpm_l igt 0) ? 'left' : 'left_inactive'" bg.bright="(:shpm_l igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_l" size="20" scolor="(:slpm_l igt 0) ? 'left' : 'left_inactive'" bg.bright="(:slpm_l igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp_l" sline="true" width.min="48"/>
-					<value id="scr_l" sline="true"/>
-					<value id="sla_l" sline="true"/>
-					<value id="shpf_l" sline="true" bright="(:shpm_l igt 0) ? 1 : 0.75" bg.bright="(:shpm_l igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf_l" sline="true" bright="(:slpm_l igt 0) ? 1 : 0.75" bg.bright="(:slpm_l igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="2"><knob id="scp_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="scr_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="sla_r" scolor="right"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1" pad.t="4">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sci_r"/>
-								<combo id="scm_r"/>
-								<combo id="scs_r"/>
-								<button id="scl_r" height="22" text="labels.listen" ui:inject="Button_right"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_r" pad.h="6" bright="(:shpm_r igt 0) ? 1 : 0.75" bg.bright="(:shpm_r igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_r" pad.h="6" bright="(:slpm_r igt 0) ? 1 : 0.75" bg.bright="(:slpm_r igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 8 -->
-					<knob id="shpf_r" size="20" scolor="(:shpm_r igt 0) ? 'right' : 'right_inactive'" bg.bright="(:shpm_r igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_r" size="20" scolor="(:slpm_r igt 0) ? 'right' : 'right_inactive'" bg.bright="(:slpm_r igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 9 -->
-					<ui:with sline="true">
-						<value id="scp_r"/>
-						<value id="scr_r"/>
-						<value id="sla_r"/>
-						<value id="shpf_r" bright="(:shpm_r igt 0) ? 1 : 0.75" bg.bright="(:shpm_r igt 0) ? 1 : :const_bg_darken"/>
-						<value id="slpf_r" bright="(:slpm_r igt 0) ? 1 : 0.75" bg.bright="(:slpm_r igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.expander" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="9" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.ratio" width.min="41" vreduce="true"/>
-						<label text="labels.knee" vreduce="true"/>
-						<label text="labels.makeup" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3">
-						<combo id="em_l" pad.h="6" pad.v="4"/>
-					</cell>
-					<cell rows="2"><knob id="er_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="kn_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="mk_l" scolor="left"/></cell>
-					<ui:with pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold_l" size="20" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 4 -->
-					<knob id="al_l" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at_l" scolor="left" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl_l" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt_l" scolor="left" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_l" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt_l" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw_l" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 5 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="er_l" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32" pad.b="4">
-						<value id="kn_l"/>
-						<value id="mk_l"/>
-						<value id="al_l"/>
-						<value id="at_l"/>
-						<value id="rrl_l"/>
-						<value id="rt_l"/>
-						<value id="hold_l"/>
-						<value id="cdr_l"/>
-						<value id="cwt_l"/>
-						<value id="cdw_l"/>
-					</ui:with>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="3">
-						<combo id="em_r" pad.h="6" pad.v="4"/>
-					</cell>
-					<cell rows="2"><knob id="er_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="kn_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="mk_r" scolor="right"/></cell>
-					<ui:with pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold_r" size="20" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 8 -->
-					<knob id="al_r" scolor="attack_2" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at_r" scolor="right" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl_r" scolor="release_2" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt_r" scolor="right" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_r" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt_r" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw_r" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 9 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="er_r" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with pad.b="4" width.min="32">
-						<value id="kn_r"/>
-						<value id="mk_r"/>
-						<value id="al_r"/>
-						<value id="at_r"/>
-						<value id="rrl_r"/>
-						<value id="rt_r"/>
-						<value id="hold_r"/>
-						<value id="cdr_r"/>
-						<value id="cwt_r"/>
-						<value id="cdw_r"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/mono.xml
--- 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/mono.xml	2025-03-01 12:43:05.400596716 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/mono.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,354 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv"/>
-						<mesh id="ocg" width="2" color="left" visibility=":olv"/>
-						<mesh id="scg" width="2" color="sidechain_1" visibility=":slv"/>
-						<mesh id="evg" width="2" color="envelope_1" visibility=":elv"/>
-						<mesh id="grg" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:attributes ox="1" oy="0">
-							<marker id="rl" width="2" pointer="vsize" color="release" lcolor="release" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="al" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-						</ui:attributes>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" vexpand="true">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-					<button id="slv" height="10" width="22" ui:inject="Button_orange" led="true"/>
-					<button id="elv" height="10" width="22" ui:inject="Button_violet" led="true"/>
-					<button id="grv" height="10" width="22" ui:inject="Button_blue" led="true"/>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.expansion">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="ecg" width="3" color="graph_mesh" smooth="true"/>
-					<dot x.id="elm" y.id="clm" color="graph_mesh" bcolor="graph_mesh"/>
-
-					<!-- Markers -->
-					<marker id="al" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="rl" color="release_1"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv" height="10" width="22" ui:inject="Button_mono" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv" height="10" width="22" ui:inject="Button_mono" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
-					<cell rows="3">
-						<vbox>
-							<combo id="sci" hfill="true" pad.h="6"/>
-							<combo id="scm" hfill="true" pad.h="6"/>
-							<hsep fill="true" pad.v="2" reduce="true" bg.color="bg"/>
-							<button id="scl" height="22" pad.h="6" hfill="true" text="labels.listen" ui:inject="Button_cyan"/>
-						</vbox>
-					</cell>
-					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp" sline="true" width.min="48"/>
-					<value id="scr" sline="true"/>
-					<value id="sla" sline="true"/>
-					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.expander" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="5" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.ratio" width.min="41" vreduce="true"/>
-						<label text="labels.knee" vreduce="true"/>
-						<label text="labels.makeup" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3">
-						<combo id="em" pad.h="6" pad.v="4"/>
-					</cell>
-					<cell rows="2"><knob id="er" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="kn" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="mk" scolor="kscale"/></cell>
-					<ui:with pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold" size="20" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 4 -->
-					<knob id="al" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 5 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="er" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32" pad.b="4">
-						<value id="kn"/>
-						<value id="mk"/>
-						<value id="al"/>
-						<value id="at"/>
-						<value id="rrl"/>
-						<value id="rt"/>
-						<value id="hold"/>
-						<value id="cdr"/>
-						<value id="cwt"/>
-						<value id="cdw"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/ms.xml
--- 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/ms.xml	2025-03-01 12:43:05.400596716 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/ms.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,485 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg_m" width="0" color="mid_in" fcolor="mid_in" fcolor.a="0.8" fill="true" visibility=":ilv_m"/>
-						<mesh id="icg_s" width="0" color="side_in" fcolor="side_in" fcolor.a="0.8" fill="true" visibility=":ilv_s"/>
-						<mesh id="ocg_m" width="2" color="mid" visibility=":olv_m"/>
-						<mesh id="ocg_s" width="2" color="side" visibility=":olv_s"/>
-						<mesh id="scg_m" width="2" color="sidechain_1" visibility=":slv_m"/>
-						<mesh id="scg_s" width="2" color="sidechain_2" visibility=":slv_s"/>
-						<mesh id="evg_m" width="2" color="envelope_1" visibility=":elv_m"/>
-						<mesh id="evg_s" width="2" color="envelope_2" visibility=":elv_s"/>
-						<mesh id="grg_m" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_m"/>
-						<mesh id="grg_s" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_s"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:attributes ox="1" oy="0">
-							<marker id="rl_m" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="rl_s" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="al_m" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="al_s" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-						</ui:attributes>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<button id="msl" height="22" width="48" text="labels.ms_listen" pad.v="4" ui:inject="Button_yellow" pad.h="2"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_m" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_s" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_m" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_s" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_m" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_s" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_m" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_s" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_m" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_s" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_m" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_s" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.expansion">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="ecg_m" width="3" color="mid" smooth="true"/>
-					<mesh id="ecg_s" width="3" color="side" smooth="true"/>
-					<dot x.id="elm_m" y.id="clm_m" color="mid" bcolor="mid"/>
-					<dot x.id="elm_s" y.id="clm_s" color="side" bcolor="side"/>
-
-					<!-- Markers -->
-					<marker id="al_m" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="al_s" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="rl_m" color="release_1"/>
-					<marker id="rl_s" color="release_2"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_m" size="10" ui:inject="Button_mid" led="true"/>
-						<button id="ilv_s" size="10" ui:inject="Button_side" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_m" size="10" ui:inject="Button_mid" led="true"/>
-						<button id="olv_s" size="10" ui:inject="Button_side" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm_m" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid_in"/>
-					<ledchannel id="ilm_s" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="side_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm_m" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid"/>
-					<ledchannel id="olm_s" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="side"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="scr_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="sla_m" scolor="mid"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1" pad.t="4">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sci_m" />
-								<combo id="scm_m"/>
-								<combo id="scs_m"/>
-								<button id="scl_m" height="22" text="labels.listen" ui:inject="Button_mid"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_m" pad.h="6" bright="(:shpm_m igt 0) ? 1 : 0.75" bg.bright="(:shpm_m igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_m" pad.h="6" bright="(:slpm_m igt 0) ? 1 : 0.75" bg.bright="(:slpm_m igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf_m" size="20" scolor="(:shpm_m igt 0) ? 'mid' : 'mid_inactive'" bg.bright="(:shpm_m igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_m" size="20" scolor="(:slpm_m igt 0) ? 'mid' : 'mid_inactive'" bg.bright="(:slpm_m igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp_m" sline="true" width.min="48"/>
-					<value id="scr_m" sline="true"/>
-					<value id="sla_m" sline="true"/>
-					<value id="shpf_m" sline="true" bright="(:shpm_m igt 0) ? 1 : 0.75" bg.bright="(:shpm_m igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf_m" sline="true" bright="(:slpm_m igt 0) ? 1 : 0.75" bg.bright="(:slpm_m igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="2"><knob id="scp_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="scr_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="sla_s" scolor="side"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1" pad.t="4">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sci_s" />
-								<combo id="scm_s"/>
-								<combo id="scs_s"/>
-								<button id="scl_s" height="22" text="labels.listen" ui:inject="Button_side"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_s" pad.h="6" bright="(:shpm_s igt 0) ? 1 : 0.75" bg.bright="(:shpm_s igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_s" pad.h="6" bright="(:slpm_s igt 0) ? 1 : 0.75" bg.bright="(:slpm_s igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 8 -->
-					<knob id="shpf_s" size="20" scolor="(:shpm_s igt 0) ? 'side' : 'side_inactive'" bg.bright="(:shpm_s igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_s" size="20" scolor="(:slpm_s igt 0) ? 'side' : 'side_inactive'" bg.bright="(:slpm_s igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 9 -->
-					<ui:with sline="true">
-						<value id="scp_s"/>
-						<value id="scr_s"/>
-						<value id="sla_s"/>
-						<value id="shpf_s" bright="(:shpm_s igt 0) ? 1 : 0.75" bg.bright="(:shpm_s igt 0) ? 1 : :const_bg_darken"/>
-						<value id="slpf_s" bright="(:slpm_s igt 0) ? 1 : 0.75" bg.bright="(:slpm_s igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.expander" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="9" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.ratio" width.min="41" vreduce="true"/>
-						<label text="labels.knee" vreduce="true"/>
-						<label text="labels.makeup" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3">
-						<combo id="em_m" pad.h="6" pad.v="4"/>
-					</cell>
-					<cell rows="2"><knob id="er_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="kn_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="mk_m" scolor="mid"/></cell>
-					<ui:with pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold_m" size="20" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 4 -->
-					<knob id="al_m" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at_m" scolor="mid" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl_m" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt_m" scolor="mid" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_m" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt_m" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw_m" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 5 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="er_m" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32" pad.b="4">
-						<value id="kn_m"/>
-						<value id="mk_m"/>
-						<value id="al_m"/>
-						<value id="at_m"/>
-						<value id="rrl_m"/>
-						<value id="rt_m"/>
-						<value id="hold_m"/>
-						<value id="cdr_m"/>
-						<value id="cwt_m"/>
-						<value id="cdw_m"/>
-					</ui:with>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="3">
-						<combo id="em_s" pad.h="6" pad.v="4"/>
-					</cell>
-					<cell rows="2"><knob id="er_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="kn_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="mk_s" scolor="side"/></cell>
-					<ui:with pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold_s" size="20" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 8 -->
-					<knob id="al_s" scolor="attack_2" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at_s" scolor="side" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl_s" scolor="release_2" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt_s" scolor="side" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_s" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt_s" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw_s" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 9 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="er_s" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with pad.b="4" width.min="32">
-						<value id="kn_s"/>
-						<value id="mk_s"/>
-						<value id="al_s"/>
-						<value id="at_s"/>
-						<value id="rrl_s"/>
-						<value id="rt_s"/>
-						<value id="hold_s"/>
-						<value id="cdr_s"/>
-						<value id="cwt_s"/>
-						<value id="cdw_s"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/stereo.xml	2025-03-01 12:43:05.400596716 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single/stereo.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,383 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv_l"/>
-						<mesh id="icg_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilv_r"/>
-						<mesh id="ocg_l" width="2" color="left" visibility=":olv_l"/>
-						<mesh id="ocg_r" width="2" color="right" visibility=":olv_r"/>
-						<mesh id="scg_l" width="2" color="sidechain_1" visibility=":slv_l"/>
-						<mesh id="scg_r" width="2" color="sidechain_2" visibility=":slv_r"/>
-						<mesh id="evg_l" width="2" color="envelope_1" visibility=":elv_l"/>
-						<mesh id="evg_r" width="2" color="envelope_2" visibility=":elv_r"/>
-						<mesh id="grg_l" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_l"/>
-						<mesh id="grg_r" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_r"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:attributes ox="1" oy="0">
-							<marker id="rl" width="2" pointer="vsize" color="release" lcolor="release" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="al" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-						</ui:attributes>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<button id="ssplit" text="labels.stereo_split" size="22" pad.v="4" ui:inject="Button_blue" pad.h="2"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_l" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_r" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_l" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_r" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_l" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_r" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_l" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_r" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.expansion">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="ecg" width="3" color="graph_mesh" smooth="true"/>
-					<dot x.id="elm_l" y.id="clm_l" color="graph_mesh" bcolor="graph_mesh" visibility="!:ssplit"/>
-					<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left" visibility=":ssplit"/>
-					<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right" visibility=":ssplit"/>
-
-					<!-- Markers -->
-					<marker id="al" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="rl" color="release_1"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="ilv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="olv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left_in"/>
-					<ledchannel id="ilm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left"/>
-					<ledchannel id="olm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1" pad.t="4" pad.h="6" width="74">
-							<ui:with pad.b="4" hfill="true">
-								<combo id="sci" />
-								<combo id="scm"/>
-								<combo id="scs" visibility="!:ssplit"/>
-								<combo id="sscs" visibility=":ssplit"/>
-								<button id="scl" height="22" hfill="true" text="labels.listen" ui:inject="Button_cyan" />
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp" sline="true" width.min="48"/>
-					<value id="scr" sline="true"/>
-					<value id="sla" sline="true"/>
-					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.expander" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="5" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.ratio" width.min="41" vreduce="true"/>
-						<label text="labels.knee" vreduce="true"/>
-						<label text="labels.makeup" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<hsep/>
-						<cell cols="3"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3">
-						<combo id="em" pad.h="6" pad.v="4"/>
-					</cell>
-					<cell rows="2"><knob id="er" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="kn" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="mk" scolor="kscale"/></cell>
-					<ui:with pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-						<label text="labels.thresh_old"/>
-						<label text="labels.time"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold" size="20" pad.h="6"/></cell>
-					<label text="labels.signal.dry"/>
-					<label text="labels.signal.wet"/>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.h="6"/>
-
-					<!-- row 4 -->
-					<knob id="al" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="at" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rrl" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="rt" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 5 -->
-					<align valign="-1" pad.t="2">
-						<hbox fill="false">
-							<value id="er" detailed="false"/>
-							<label text=":"/>
-							<label text="1"/>
-						</hbox>
-					</align>
-					<ui:with width.min="32" pad.b="4">
-						<value id="kn"/>
-						<value id="mk"/>
-						<value id="al"/>
-						<value id="at"/>
-						<value id="rrl"/>
-						<value id="rt"/>
-						<value id="hold"/>
-						<value id="cdr"/>
-						<value id="cwt"/>
-						<value id="cdw"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single.xml 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single.xml
--- 1.2.21-5/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single.xml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/res/main/ui/dynamics/expander/single.xml	2025-08-26 18:15:55.545888575 +0000
@@ -0,0 +1,889 @@
+<plugin resizable="true">
+	<!-- Evaluate what kind of plugin we have -->
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	<ui:eval id="mono" value="(ex :em) and (ex :icg)"/>
+	<ui:eval id="stereo" value="(ex :em) and !(ex :icg)"/>
+	<ui:eval id="left_right" value="(ex :em_l)"/>
+	<ui:eval id="mid_side" value="(ex :em_m)"/>
+
+	<ui:eval id="xa" value="(:mid_side) ? 'm' : 'l'"/>
+	<ui:eval id="xb" value="(:mid_side) ? 's' : 'r'"/>
+
+	<ui:eval id="clr_a" value="(:mid_side) ? 'mid' : 'left'"/>
+	<ui:eval id="clr_b" value="(:mid_side) ? 'side' : 'right'"/>
+
+	<!-- Control linking -->
+	<ui:if test=":left_right or :mid_side">
+		<ui:for id="port"
+			list="'sci'; 'scm'; 'sla'; 'scl'; 'scs'; 'scr'; 'scp'; 'shpm'; 'shpf'; 'slpm'; 'slpf';
+				'em'; 'al'; 'at'; 'rrl'; 'rt'; 'hold'; 'er'; 'kn'; 'mk'; 'cdr'; 'cwt'; 'cdw'">
+			<ctl:link
+				id.1="${port}_${xa}" value.1=":${port}_${xb}"
+				id.2="${port}_${xb}" value.2=":${port}_${xa}"
+				activity=":clink" />
+		</ui:for>
+	</ui:if>
+
+	<vbox>
+		<!-- Top part -->
+		<grid rows="1" cols="4" hspacing="4" expand="true">
+			<vbox expand="true">
+				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
+					<graph width.min="496" height.min="222" expand="true" fill="true">
+						<origin hpos="1" vpos="-1" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:for id="t" first="0" last="4" step="1">
+							<ui:attributes ox="0" oy="1">
+								<marker v="${t}.25" color="graph_alt_2"/>
+								<marker v="${t}.5" color="graph_alt_1"/>
+								<marker v="${t}.75" color="graph_alt_2"/>
+							</ui:attributes>
+						</ui:for>
+						<ui:attributes ox="1" oy="0" color="graph_alt_1">
+							<marker v="+12 db"/>
+							<marker v="-12 db"/>
+							<marker v="-36 db"/>
+							<marker v="-60 db"/>
+						</ui:attributes>
+
+						<!-- Yellow grid -->
+						<ui:for id="t" first="1" last="4" step="1">
+							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
+						</ui:for>
+						<ui:attributes ox="1" oy="0" color="graph_sec">
+							<marker v="0 db"/>
+							<marker v="-24 db"/>
+							<marker v="-48 db"/>
+						</ui:attributes>
+
+						<!-- Meshes -->
+						<ui:if test=":mono">
+							<mesh id="icg" width="0" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilv"/>
+							<mesh id="ocg" width="2" color="mono" visibility=":olv"/>
+							<mesh id="scg" width="2" color="sidechain_1" visibility=":slv"/>
+							<mesh id="evg" width="2" color="envelope_1" visibility=":elv"/>
+							<mesh id="grg" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv"/>
+						</ui:if>
+
+						<ui:if test="!(:mono)">
+							<mesh id="icg_${xa}" width="0" color="${clr_a}_in" fcolor="${clr_a}_in" fcolor.a="0.8" fill="true" visibility=":ilv_${xa}"/>
+							<mesh id="icg_${xb}" width="0" color="${clr_b}_in" fcolor="${clr_b}_in" fcolor.a="0.8" fill="true" visibility=":ilv_${xb}"/>
+							<mesh id="ocg_${xa}" width="2" color="${clr_a}" visibility=":olv_${xa}"/>
+							<mesh id="ocg_${xb}" width="2" color="${clr_b}" visibility=":olv_${xb}"/>
+							<mesh id="scg_${xa}" width="2" color="sidechain_1" visibility=":slv_${xa}"/>
+							<mesh id="scg_${xb}" width="2" color="sidechain_2" visibility=":slv_${xb}"/>
+							<mesh id="evg_${xa}" width="2" color="envelope_1" visibility=":elv_${xa}"/>
+							<mesh id="evg_${xb}" width="2" color="envelope_2" visibility=":elv_${xb}"/>
+							<mesh id="grg_${xa}" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_${xa}"/>
+							<mesh id="grg_${xb}" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_${xb}"/>
+						</ui:if>
+
+						<!-- Markers -->
+						<ui:if test=":stereo or :mono">
+
+							<ui:attributes ox="1" oy="0">
+								<marker id="rl" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
+								<marker id="al" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
+							</ui:attributes>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<ui:attributes ox="1" oy="0">
+								<marker id="rl_${xa}" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
+								<marker id="rl_${xb}" width="2" pointer="vsize" color="release" lcolor="release" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
+								<marker id="al_${xa}" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
+								<marker id="al_${xb}" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
+							</ui:attributes>
+						</ui:if>
+
+						<!-- Boundaries -->
+						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
+						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
+
+						<!-- Axis -->
+						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+
+						<!-- Text -->
+						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+						<ui:for id="t" first="0" last="4" step="1">
+							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
+							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
+						</ui:for>
+						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
+							<text y="12 db" text="+12"/>
+							<text y="0 db" text="0"/>
+							<text y="-12 db" text="-12"/>
+							<text y="-24 db" text="-24"/>
+							<text y="-36 db" text="-36"/>
+							<text y="-48 db" text="-48"/>
+							<text y="-60 db" text="-60"/>
+							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
+						</ui:attributes>
+					</graph>
+				</group>
+				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
+				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
+					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
+					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
+					<ui:if test=":left_right">
+						<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
+					</ui:if>
+					<ui:if test=":mid_side">
+						<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
+					</ui:if>
+					<void hexpand="true"/>
+
+					<ui:if test=":mid_side">
+						<vsep pad.h="2" bg.color="bg" reduce="true"/>
+						<button id="msl" height="22" width="48" text="labels.ms_listen" pad.v="4" ui:inject="Button_yellow" pad.h="2"/>
+					</ui:if>
+
+					<ui:if test=":stereo">
+						<vsep pad.h="2" bg.color="bg" reduce="true"/>
+						<button id="ssplit" text="labels.stereo_split" size="22" pad.v="4" ui:inject="Button_blue" pad.h="2"/>
+					</ui:if>
+
+					<vsep pad.h="2" bg.color="bg" reduce="true"/>
+					<shmlink id="link" pad.l="2"/>
+				</hbox>
+			</vbox>
+
+			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
+				<ui:with bg.color="bg_schema">
+					<ui:with width.min="24">
+						<label text="labels.sc.SC" padding="4"/>
+						<label text="labels.Env_elope" padding="4"/>
+						<label text="labels.gain_" padding="4"/>
+					</ui:with>
+
+					<!-- For Mono version -->
+					<ui:if test=":mono">
+						<button id="slv" height="10" width="22" ui:inject="Button_orange" led="true"/>
+						<button id="elv" height="10" width="22" ui:inject="Button_violet" led="true"/>
+						<button id="grv" height="10" width="22" ui:inject="Button_blue" led="true"/>
+					</ui:if>
+
+					<!-- For Stereo and Left Right Mid Side version -->
+					<ui:if test="!(:mono)">
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="slv_${xa}" size="10" ui:inject="Button_orange" led="true"/>
+							<button id="slv_${xb}" size="10" ui:inject="Button_orange" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="elv_${xa}" size="10" ui:inject="Button_violet" led="true"/>
+							<button id="elv_${xb}" size="10" ui:inject="Button_violet" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="grv_${xa}" size="10" ui:inject="Button_blue" led="true"/>
+							<button id="grv_${xb}" size="10" ui:inject="Button_blue" led="true"/>
+						</grid>
+					</ui:if>
+				</ui:with>
+
+				<!-- For Mono version -->
+				<ui:if test=":mono">
+					<!-- Sidechain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="slm" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+					</ledmeter>
+
+					<!-- Envelope signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="elm" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+					</ledmeter>
+
+					<!-- Gain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="rlm" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+					</ledmeter>
+				</ui:if>
+
+				<!-- For Stereo and Left Right Mid Side version -->
+				<ui:if test="!(:mono)">
+					<!-- Sidechain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="slm_${xa}" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+						<ledchannel id="slm_${xb}" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+					</ledmeter>
+
+					<!-- Envelope signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="elm_${xa}" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+						<ledchannel id="elm_${xb}" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+					</ledmeter>
+
+					<!-- Gain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="rlm_${xa}" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+						<ledchannel id="rlm_${xb}" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+					</ledmeter>
+				</ui:if>
+
+			</grid>
+
+			<vbox expand="true">
+				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.expansion">
+					<!-- Curve graph -->
+					<graph width.min="256" height.min="256" expand="true" fill="true">
+						<origin hpos="-1" vpos="-1" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:for id="g" first="-60" last="12" step="24">
+							<marker v="${g} db" color="graph_alt_1"/>
+							<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
+						</ui:for>
+
+						<!-- Yellow grid -->
+						<ui:for id="g" first="-48" last="-24" step="24">
+							<marker v="${g} db" color="graph_sec"/>
+							<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
+						</ui:for>
+
+						<!-- Axes and boundaries -->
+						<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
+						<marker v="24 db" color="graph_alt_1" visibility="false"/>
+						<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
+						<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
+						<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
+
+						<!-- 0 dB markers -->
+						<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
+						<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
+
+						<!-- Meshes -->
+						<ui:if test=":mono">
+							<mesh id="ecg" width="3" color="graph_mesh" smooth="true"/>
+							<dot x.id="elm" y.id="clm" color="graph_mesh" bcolor="graph_mesh"/>
+						</ui:if>
+
+						<ui:if test=":stereo">
+							<mesh id="ecg" width="3" color="graph_mesh" smooth="true"/>
+							<dot x.id="elm_l" y.id="clm_l" color="graph_mesh" bcolor="graph_mesh" visibility="!:ssplit"/>
+							<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left" visibility=":ssplit"/>
+							<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right" visibility=":ssplit"/>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<mesh id="ecg_${xa}" width="3" color="${clr_a}" smooth="true"/>
+							<mesh id="ecg_${xb}" width="3" color="${clr_b}" smooth="true"/>
+							<dot x.id="elm_${xa}" y.id="clm_${xa}" color="${clr_a}" bcolor="${clr_a}"/>
+							<dot x.id="elm_${xb}" y.id="clm_${xb}" color="${clr_b}" bcolor="${clr_b}"/>
+						</ui:if>
+
+						<!-- Markers -->
+						<ui:if test=":mono or :stereo">
+							<marker id="al" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
+							<marker id="rl" color="release_1"/>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<marker id="al_${xa}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
+							<marker id="al_${xb}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
+							<marker id="rl_${xa}" color="release_1"/>
+							<marker id="rl_${xb}" color="release_2"/>
+						</ui:if>
+
+						<!-- Text -->
+						<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
+						<ui:attributes x="0 db" halign="1" valign="-1">
+							<text y="24 db" text="graph.units.db"/>
+							<text y="12 db" text="+12"/>
+							<text y="-12 db" text="-12"/>
+							<text y="-24 db" text="-24"/>
+							<text y="-36 db" text="-36"/>
+							<text y="-48 db" text="-48"/>
+							<text y="-60 db" text="-60"/>
+							<text y="-72 db" text="graph.axis.out" valign="1"/>
+						</ui:attributes>
+						<ui:attributes y="0 db" halign="-1" valign="1">
+							<text x="24 db" text="graph.units.db"/>
+							<text x="12 db" text="+12"/>
+							<text x="-12 db" text="-12"/>
+							<text x="-24 db" text="-24"/>
+							<text x="-36 db" text="-36"/>
+							<text x="-48 db" text="-48"/>
+							<text x="-60 db" text="-60"/>
+							<text x="-72 db" text="graph.axis.in" halign="1"/>
+						</ui:attributes>
+					</graph>
+				</group>
+				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
+				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
+					<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" pad.v="4"/>
+					<button ui:id="sidechain_trigger" id="showsc" text="labels.sidechain" size="22" pad.v="4"/>
+					<void hexpand="true"/>
+					<button ui:id="mix_trigger" id="showmx" text="labels.mix" size="22" pad.v="4"/>
+				</hbox>
+			</vbox>
+
+			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
+				<ui:with bg.color="bg_schema">
+					<label text="labels.chan.in" padding="4" width.min="24"/>
+					<label text="labels.chan.out" padding="4" width.min="24"/>
+
+					<!-- For Mono version -->
+					<ui:if test=":mono">
+						<button id="ilv" height="10" width="22" ui:inject="Button_mono" led="true" fill="false" hspacing="2"/>
+						<button id="olv" height="10" width="22" ui:inject="Button_mono" led="true" fill="false" hspacing="2"/>
+					</ui:if>
+
+					<!-- For Stereo and Left Right Mid Side version -->
+					<ui:if test="!(:mono)">
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="ilv_${xa}" size="10" ui:inject="Button_${clr_a}" led="true"/>
+							<button id="ilv_${xb}" size="10" ui:inject="Button_${clr_b}" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="olv_${xa}" size="10" ui:inject="Button_${clr_a}" led="true"/>
+							<button id="olv_${xb}" size="10" ui:inject="Button_${clr_b}" led="true"/>
+						</grid>
+					</ui:if>
+				</ui:with>
+
+				<!-- For Mono version -->
+				<ui:if test=":mono">
+					<!-- Input signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="ilm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono_in"/>
+					</ledmeter>
+
+					<!-- Output signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="olm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono"/>
+					</ledmeter>
+				</ui:if>
+
+				<!-- For Stereo and Left Right Mid Side version -->
+				<ui:if test="!(:mono)">
+					<!-- Input signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="ilm_${xa}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_a}_in"/>
+						<ledchannel id="ilm_${xb}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_b}_in"/>
+					</ledmeter>
+
+					<!-- Output signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="olm_${xa}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_a}"/>
+						<ledchannel id="olm_${xb}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_b}"/>
+					</ledmeter>
+				</ui:if>
+			</grid>
+		</grid>
+
+		<!-- Separator -->
+		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
+
+		<!-- Bottom part -->
+		<hbox>
+
+			<group text="groups.plug.expander" vexpand="false" hexpand="true" ipadding="0">
+				<!-- For Stereo and Mono version-->
+				<ui:if test=":mono or :stereo">
+
+					<grid rows="5" cols="13" spacing="0" bg.color="bg_schema">
+						<!-- row 1 -->
+						<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
+						<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<ui:with pad.h="6" pad.v="4">
+							<label text="labels.ratio" width.min="41" vreduce="true"/>
+							<label text="labels.knee" vreduce="true"/>
+							<label text="labels.makeup" vreduce="true"/>
+						</ui:with>
+						<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
+
+						<!-- row 2 -->
+						<ui:with bg.color="bg" pad.v="2" vreduce="true">
+							<hsep/>
+							<cell cols="3"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<hsep/>
+						</ui:with>
+
+						<!-- row 3 -->
+						<cell rows="3" height.min="111">
+							<vbox>
+								<combo id="em" pad.h="6" pad.v="4"/>
+								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+								<void vexpand="true"/>
+							</vbox>
+						</cell>
+						<cell rows="2"><knob id="er" scolor="kscale"/></cell>
+						<cell rows="2"><knob id="kn" scolor="kscale"/></cell>
+						<cell rows="2"><knob id="mk" scolor="kscale"/></cell>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<cell rows="2"><knob id="hold" size="20" pad.h="6"/></cell>
+
+						<!-- row 4 -->
+						<knob id="al" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="at" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rrl" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rt" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
+
+						<!-- row 5 -->
+						<align valign="-1" pad.t="2">
+							<hbox fill="false">
+								<value id="er" detailed="false"/>
+								<label text=":"/>
+								<label text="1"/>
+							</hbox>
+						</align>
+						<ui:with width.min="32">
+							<value id="kn"/>
+							<value id="mk"/>
+							<value id="al"/>
+							<value id="at"/>
+							<value id="rrl"/>
+							<value id="rt"/>
+							<value id="hold"/>
+						</ui:with>
+					</grid>
+				</ui:if>
+
+				<!-- For Left Right and Mid Side version -->
+				<ui:if test=":left_right or :mid_side">
+					<grid rows="9" cols="13" spacing="0" bg.color="bg_schema">
+						<!-- row 1 -->
+						<label text="labels.mode" pad.h="6" pad.v="4" vreduce="true"/>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<ui:with pad.h="6" pad.v="4">
+							<label text="labels.ratio" width.min="41" vreduce="true"/>
+							<label text="labels.knee" vreduce="true"/>
+							<label text="labels.makeup" vreduce="true"/>
+						</ui:with>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.attack" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.release" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
+
+						<!-- row 2 -->
+						<ui:with bg.color="bg" pad.v="2" vreduce="true">
+							<hsep/>
+							<cell cols="3"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<hsep/>
+						</ui:with>
+
+						<!-- row 3 -->
+						<cell rows="3" height.min="111">
+							<vbox>
+								<combo id="em_${xa}" pad.h="6" pad.v="4"/>
+								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+								<void vexpand="true"/>
+							</vbox>
+						</cell>
+						<cell rows="2"><knob id="er_${xa}" scolor="${clr_a}"/></cell>
+						<cell rows="2"><knob id="kn_${xa}" scolor="${clr_a}"/></cell>
+						<cell rows="2"><knob id="mk_${xa}" scolor="${clr_a}"/></cell>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<cell rows="2"><knob id="hold_${xa}" pad.h="6" scolor="${clr_a}"/></cell>
+
+						<!-- row 4 -->
+						<knob id="al_${xa}" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="at_${xa}" scolor="${clr_a}" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rrl_${xa}" scolor="release_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rt_${xa}" scolor="${clr_a}" size="20" pad.h="6" pad.v="4"/>
+
+						<!-- row 5 -->
+						<align valign="-1" pad.t="2">
+							<hbox fill="false">
+								<value id="er_${xa}" detailed="false"/>
+								<label text=":"/>
+								<label text="1"/>
+							</hbox>
+						</align>
+						<ui:with width.min="32">
+							<value id="kn_${xa}"/>
+							<value id="mk_${xa}"/>
+							<value id="al_${xa}"/>
+							<value id="at_${xa}"/>
+							<value id="rrl_${xa}"/>
+							<value id="rt_${xa}"/>
+							<value id="hold_${xa}"/>
+						</ui:with>
+
+						<!-- row 6 -->
+						<ui:with bg.color="bg" pad.v="2" vreduce="true">
+							<hsep/>
+							<cell cols="3"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<hsep/>
+						</ui:with>
+
+						<!-- row 7 -->
+						<cell rows="3" height.min="111">
+							<vbox>
+								<combo id="em_${xb}" pad.h="6" pad.v="4"/>
+								<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+								<void vexpand="true"/>
+							</vbox>
+						</cell>
+						<cell rows="2"><knob id="er_${xb}" scolor="${clr_b}"/></cell>
+						<cell rows="2"><knob id="kn_${xb}" scolor="${clr_b}"/></cell>
+						<cell rows="2"><knob id="mk_${xb}" scolor="${clr_b}"/></cell>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<label text="labels.thresh_old"/>
+						<label text="labels.time"/>
+						<cell rows="2"><knob id="hold_${xb}" pad.h="6" scolor="${clr_b}"/></cell>
+
+						<!-- row 8 -->
+						<knob id="al_${xb}" scolor="attack_2" size="20" pad.h="6" pad.v="4"/>
+						<knob id="at_${xb}" scolor="${clr_b}" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rrl_${xb}" scolor="release_2" size="20" pad.h="6" pad.v="4"/>
+						<knob id="rt_${xb}" scolor="${clr_b}" size="20" pad.h="6" pad.v="4"/>
+
+						<!-- row 9 -->
+						<align valign="-1" pad.t="2">
+							<hbox fill="false">
+								<value id="er_${xb}" detailed="false"/>
+								<label text=":"/>
+								<label text="1"/>
+							</hbox>
+						</align>
+						<ui:with width.min="32">
+							<value id="kn_${xb}"/>
+							<value id="mk_${xb}"/>
+							<value id="al_${xb}"/>
+							<value id="at_${xb}"/>
+							<value id="rrl_${xb}"/>
+							<value id="rt_${xb}"/>
+							<value id="hold_${xb}"/>
+						</ui:with>
+					</grid>
+				</ui:if>
+			</group>
+			<!-- Separator -->
+			<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+
+			<!-- Signal control -->
+			<group text="groups.signal" vexpand="false" hexpand="true" ipadding="0">
+				<ui:if test=":mono or :stereo">
+					<grid rows="3" cols="2" spacing="0" bg.color="bg_schema" transpose="true">
+						<label text="labels.input" width="40" pad.h="6" pad.v="4"/>
+						<knob id="g_in"/>
+						<value id="g_in" pad.v="4"/>
+
+						<label text="labels.output" width="40" pad.h="6" pad.v="4"/>
+						<knob id="g_out"/>
+						<value id="g_out" pad.v="4"/>
+					</grid>
+				</ui:if>
+
+				<ui:if test=":left_right or :mid_side">
+					<vbox vexpand="true">
+						<ui:with pad="6">
+							<label text="labels.input"/>
+							<knob id="g_in"/>
+							<value id="g_in"/>
+							<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
+							<label text="labels.output"/>
+							<knob id="g_out"/>
+							<value id="g_out"/>
+						</ui:with>
+					</vbox>
+				</ui:if>
+			</group>
+		</hbox>
+
+	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true" height="139">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
+
+	<!-- Sidechain overlay -->
+	<overlay id="showsc" trigger="sidechain_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.sidechain" vexpand="false" ipadding="0">
+			<!-- For Stereo and Mono version-->
+			<ui:if test=":mono or :stereo">
+				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema" height="139">
+					<!-- row 1 -->
+					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true" width.min="56">
+						<label text="labels.sc.preamp" vreduce="true"/>
+						<label text="labels.sc.reactivity" vreduce="true"/>
+						<label text="labels.sc.lookahead" vreduce="true"/>
+					</ui:with>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+
+					<!-- row 2 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 3 -->
+					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
+					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
+					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sci" pad.t="4"/>
+								<combo id="scm"/>
+								<ui:if test=":stereo">
+									<combo id="scs" visibility="!:ssplit"/>
+									<combo id="sscs" visibility=":ssplit"/>
+								</ui:if>
+								<button id="scl" height="22" text="labels.listen" ui:inject="Button_cyan"/>
+								<ui:if test=":mono">
+									<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+									<void vexpand="true"/>
+								</ui:if>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 4 -->
+					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 5 -->
+					<value id="scp" sline="true" width.min="48"/>
+					<value id="scr" sline="true"/>
+					<value id="sla" sline="true"/>
+					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+				</grid>
+			</ui:if>
+
+			<!-- For Left Right and Mid Side version -->
+			<ui:if test=":left_right or :mid_side">
+				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
+					<!-- row 1 -->
+					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true" width.min="56">
+						<label text="labels.sc.preamp" vreduce="true"/>
+						<label text="labels.sc.reactivity" vreduce="true"/>
+						<label text="labels.sc.lookahead" vreduce="true"/>
+					</ui:with>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+
+					<!-- row 2 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 3 -->
+					<cell rows="2"><knob id="scp_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="2"><knob id="scr_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="2"><knob id="sla_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sci_${xa}" pad.t="4"/>
+								<combo id="scm_${xa}"/>
+								<combo id="scs_${xa}"/>
+								<button id="scl_${xa}" height="22" text="labels.listen" ui:inject="Button_${clr_a}"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm_${xa}" pad.h="6" bright="(:shpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm_${xa}" pad.h="6" bright="(:slpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 4 -->
+					<knob id="shpf_${xa}" size="20" scolor="(:shpm_${xa} igt 0) ? '${clr_a}' : 'cycle_inactive'" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf_${xa}" size="20" scolor="(:slpm_${xa} igt 0) ? '${clr_a}' : 'cycle_inactive'" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 5 -->
+					<value id="scp_${xa}" sline="true" width.min="48"/>
+					<value id="scr_${xa}" sline="true"/>
+					<value id="sla_${xa}" sline="true"/>
+					<value id="shpf_${xa}" sline="true" bright="(:shpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<value id="slpf_${xa}" sline="true" bright="(:slpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 6 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 7 -->
+					<cell rows="2"><knob id="scp_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="2"><knob id="scr_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="2"><knob id="sla_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sci_${xb}" pad.t="4"/>
+								<combo id="scm_${xb}"/>
+								<combo id="scs_${xb}"/>
+								<button id="scl_${xb}" height="22" text="labels.listen" ui:inject="Button_${clr_b}"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm_${xb}" pad.h="6" bright="(:shpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm_${xb}" pad.h="6" bright="(:slpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 8 -->
+					<knob id="shpf_${xb}" size="20" scolor="(:shpm_${xb} igt 0) ? '${clr_b}' : 'cycle_inactive'" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf_${xb}" size="20" scolor="(:slpm_${xb} igt 0) ? '${clr_b}' : 'cycle_inactive'" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 9 -->
+					<ui:with sline="true">
+						<value id="scp_${xb}"/>
+						<value id="scr_${xb}"/>
+						<value id="sla_${xb}"/>
+						<value id="shpf_${xb}" bright="(:shpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+						<value id="slpf_${xb}" bright="(:slpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					</ui:with>
+				</grid>
+			</ui:if>
+		</group>
+	</overlay>
+
+	<!-- Mix overlay -->
+	<overlay id="showmx" trigger="mix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<!-- For Stereo and Mono version-->
+		<ui:if test=":mono or :stereo">
+			<group text="groups.mix" vexpand="false" ipadding="0">
+				<grid rows="3" cols="4" spacing="0" bg.color="bg_schema" height="139">
+
+					<!-- Row 1 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry" pad.h="6" width="44" pad.v="4"/>
+						<label text="labels.signal.wet" pad.h="6" width="44" pad.v="4"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6" width="44" pad.v="4"/>
+					</ui:with>
+
+					<!-- Row 2 -->
+					<knob id="cdr" size="20" scolor="dry"/>
+					<knob id="cwt" size="20" scolor="wet"/>
+					<knob id="cdw" size="20" scolor="drywet"/>
+
+					<!-- Row 3 -->
+					<value id="cdr" pad.v="4"/>
+					<value id="cwt" pad.v="4"/>
+					<value id="cdw" pad.v="4"/>
+
+				</grid>
+			</group>
+		</ui:if>
+
+		<!-- For Left Right and Mid Side version -->
+		<ui:if test=":left_right or :mid_side">
+			<group text="groups.mix" vexpand="false" ipadding="0">
+				<grid rows="7" cols="4" spacing="0" bg.color="bg_schema" height.min="254">
+					<!-- row 1 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry"/>
+						<label text="labels.signal.wet"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6"/>
+					</ui:with>
+
+					<!-- row 2 -->
+					<knob id="cdr_${xa}" size="20" pad.h="6" pad.v="4" scolor="dry"/>
+					<knob id="cwt_${xa}" size="20" pad.h="6" pad.v="4" scolor="wet"/>
+					<knob id="cdw_${xa}" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
+
+					<!-- row 3 -->
+					<ui:with width.min="32">
+						<value id="cdr_${xa}"/>
+						<value id="cwt_${xa}"/>
+						<value id="cdw_${xa}"/>
+					</ui:with>
+
+					<!-- row 4 -->
+					<cell cols="4"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+
+					<!-- row 5 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry"/>
+						<label text="labels.signal.wet"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6"/>
+					</ui:with>
+
+					<!-- row 6 -->
+
+					<knob id="cdr_${xb}" size="20" pad.h="6" pad.v="4" scolor="dry"/>
+					<knob id="cwt_${xb}" size="20" pad.h="6" pad.v="4" scolor="wet"/>
+					<knob id="cdw_${xb}" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
+
+					<!-- row 7 -->
+					<ui:with width.min="32">
+						<value id="cdr_${xb}"/>
+						<value id="cwt_${xb}"/>
+						<value id="cdw_${xb}"/>
+					</ui:with>
+
+				</grid>
+			</group>
+		</ui:if>
+	</overlay>
+</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/src/doc/manuals/plugins/expander.php 1.2.23-0ubuntu1/modules/lsp-plugins-expander/src/doc/manuals/plugins/expander.php
--- 1.2.21-5/modules/lsp-plugins-expander/src/doc/manuals/plugins/expander.php	2025-03-01 12:43:05.400596716 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/src/doc/manuals/plugins/expander.php	2025-08-26 18:15:55.545888575 +0000
@@ -35,18 +35,58 @@ keeping the same settings for the left a
 	<li><b>Pause</b> - pauses any updates of the expander graph.</li>
 	<li><b>Clear</b> - clears all graphs.</li>
 	<?php if ($m == 's') { ?>
-		<li><b>Stereo Split</b> - enables independent compression of left and right channels.</li>
+		<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+	<?php } else if ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } elseif ($m == 'ms') { ?>
 		<li><b>MS Listen</b> - passes mid-side signal to the output of expander instead of stereo signal.</li>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } ?>
+	
 	<li><b>Gain<?= $sm ?></b> - enables drawing of gain amplification line and corresponding amplification meter.</li>
 	<li><b>SC<?= $sm ?></b> - enables drawing of sidechain input graph and corresponding level meter.</li>
 	<li><b>Env<?= $sm ?></b> - enables drawing of expander's envelope graph and corresponding level meter.</li>
 	<li><b>In<?= $sm ?></b> - enables drawing of expander's input signal graph and corresponding level meter.</li>
 	<li><b>Out<?= $sm ?></b> - enables drawing of expander's output signal graph and corresponding level meter.</li>
 	<li><b>Link</b> - the name of the shared memory link to pass sidechain signal.</li>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
+	<li><b>Sidechain</b> - shows the sidechain control overlay.</li>
+	<li><b>Mix</b> - shows the Dry/Wet control overlay.</li>
 </ul>
-<p><b>'Sidechain' section:</b></p>
+
+<p><b>'Expander' section:</b></p>
+<ul>
+	<li><b>Mode</b> - expander mode: <b>Up</b> (upward) or <b>Down</b> (downward).</li>
+	<li><b>Ratio</b> - expander ratio.</li>
+	<li><b>Knee</b> - size of the knee.</li>
+	<li><b>Makeup</b> - additional amplification gain after processing stage.</li>
+	<li><b>Attack Level</b> - threshold of the expander, placed in the middle of the knee.</li>
+	<li><b>Attack Time</b> - attack time of the expander.</li>
+	<li><b>Release Level</b> - relative to the <b>Attack Level</b> threshold that sets up the threshold of <b>Release Time</b>.</li>
+	<li><b>Release Time</b> - release time of the expander.</li>
+	<li><b>Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
+</ul>
+<p><b>'Signal' section:</b></p>
+<ul>
+	<li><b>Input</b> - overall input gain.</li>
+	<li><b>Output</b> - overall output gain.</li>
+</ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
+
+<p><b>Sidechain control overlay:</b></p>
 <ul>
 	<li><b>Preamp</b> - pre-amplification of the sidechain signal.</li>
 	<li><b>Reactivity</b> - reactivity of the sidechain signal.</li>
@@ -81,24 +121,9 @@ keeping the same settings for the left a
 	<li><b>LPF</b> - allows to set up slope and cut-off frequency for the low-pass filter applied to sidechain signal.</li>
 	<li><b>HPF</b> - allows to set up slope and cut-off frequency for the high-pass filter applied to sidechain signal.</li>
 </ul>
-<p><b>'Expander' section:</b></p>
+<p><b>Dry/Wet mix control overlay:</b></p>
 <ul>
-	<li><b>Mode</b> - expander mode: <b>Up</b> (upward) or <b>Down</b> (downward).</li>
-	<li><b>Ratio</b> - expander ratio.</li>
-	<li><b>Knee</b> - size of the knee.</li>
-	<li><b>Makeup</b> - additional amplification gain after processing stage.</li>
-	<li><b>Attack Level</b> - threshold of the expander, placed in the middle of the knee.</li>
-	<li><b>Attack Time</b> - attack time of the expander.</li>
-	<li><b>Release Level</b> - relative to the <b>Attack Level</b> threshold that sets up the threshold of <b>Release Time</b>.</li>
-	<li><b>Release Time</b> - release time of the expander.</li>
-	<li><b>Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
 	<li><b>Mix Dry</b> - the amount of dry (unprocessed) signal.</li>
 	<li><b>Mix Wet</b> - the amount of wet (processed) signal.</li>
 	<li><b>Mix Dry/Wet</b> - the knob that controls this balance between mixed dry and wet signal (see <b>Mix Dry</b> and <b>Mix Wet</b>) and the dry (unprocessed) signal.</li>
 </ul>
-
-<p><b>'Signal' section:</b></p>
-<ul>
-	<li><b>Input</b> - overall input gain.</li>
-	<li><b>Output</b> - overall output gain.</li>
-</ul>
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/src/main/meta/expander.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-expander/src/main/meta/expander.cpp
--- 1.2.21-5/modules/lsp-plugins-expander/src/main/meta/expander.cpp	2025-03-01 12:43:05.400596716 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/src/main/meta/expander.cpp	2025-08-26 18:15:55.545888575 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-expander
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_EXPANDER_VERSION_MAJOR       1
 #define LSP_PLUGINS_EXPANDER_VERSION_MINOR       0
-#define LSP_PLUGINS_EXPANDER_VERSION_MICRO       28
+#define LSP_PLUGINS_EXPANDER_VERSION_MICRO       30
 
 #define LSP_PLUGINS_EXPANDER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -106,20 +106,37 @@ namespace lsp
             { NULL, NULL }
         };
 
+        #define EXP_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define EXP_SC_PREMIX \
+            EXP_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
+
         #define EXP_COMMON     \
             BYPASS,             \
             IN_GAIN,            \
             OUT_GAIN,           \
-            SWITCH("pause", "Pause graph analysis", 0.0f), \
-            TRIGGER("clear", "Clear graph analysis")
+            SWITCH("showmx", "Show mix overlay", "Show mix bar", 0.0f), \
+            SWITCH("showsc", "Show sidechain overlay", "Show SC bar", 0.0f), \
+            SWITCH("pause", "Pause graph analysis", "Pause", 0.0f), \
+            TRIGGER("clear", "Clear graph analysis", "Clear")
 
         #define EXP_MS_COMMON  \
             EXP_COMMON,        \
-            SWITCH("msl", "Mid/Side listen", 0.0f)
+            SWITCH("msl", "Mid/Side listen", "M/S listen", 0.0f)
 
         #define EXP_SPLIT_COMMON \
-            SWITCH("ssplit", "Stereo split", 0.0f), \
-            COMBO("sscs", "Split sidechain source", expander_metadata::SC_SPLIT_SOURCE_DFL, exp_sc_split_sources)
+            SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f), \
+            COMBO("sscs", "Split sidechain source", "Split SC source", expander_metadata::SC_SPLIT_SOURCE_DFL, exp_sc_split_sources)
+
+        #define EXP_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
 
         #define EXP_SHM_LINK_MONO \
             OPT_RETURN_MONO("link", "shml", "Side-chain shared memory link")
@@ -127,53 +144,53 @@ namespace lsp
         #define EXP_SHM_LINK_STEREO \
             OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
 
-        #define EXP_MONO_CHANNEL(sc_type) \
-            COMBO("sci", "Sidechain input", expander_metadata::SC_TYPE_DFL, sc_type), \
-            COMBO("scm", "Sidechain mode", expander_metadata::SC_MODE_DFL, exp_sc_modes), \
-            CONTROL("sla", "Sidechain lookahead", U_MSEC, expander_metadata::LOOKAHEAD), \
-            SWITCH("scl", "Sidechain listen", 0.0f), \
-            LOG_CONTROL("scr", "Sidechain reactivity", U_MSEC, expander_metadata::REACTIVITY), \
-            AMP_GAIN100("scp", "Sidechain preamp", GAIN_AMP_0_DB), \
-            COMBO("shpm", "High-pass filter mode", 0, exp_filter_slope),      \
-            LOG_CONTROL("shpf", "High-pass filter frequency", U_HZ, expander_metadata::HPF),   \
-            COMBO("slpm", "Low-pass filter mode", 0, exp_filter_slope),      \
-            LOG_CONTROL("slpf", "Low-pass filter frequency", U_HZ, expander_metadata::LPF)
-
-        #define EXP_STEREO_CHANNEL(id, label, sc_type) \
-            COMBO("sci" id, "Sidechain input" label, expander_metadata::SC_TYPE_DFL, sc_type), \
-            COMBO("scm" id, "Sidechain mode" label, expander_metadata::SC_MODE_DFL, exp_sc_modes), \
-            CONTROL("sla" id, "Sidechain lookahead" label, U_MSEC, expander_metadata::LOOKAHEAD), \
-            SWITCH("scl" id, "Sidechain listen" label, 0.0f), \
-            COMBO("scs" id, "Sidechain source" label, expander_metadata::SC_SOURCE_DFL, exp_sc_sources), \
-            LOG_CONTROL("scr" id, "Sidechain reactivity" label, U_MSEC, expander_metadata::REACTIVITY), \
-            AMP_GAIN100("scp" id, "Sidechain preamp" label, GAIN_AMP_0_DB), \
-            COMBO("shpm" id, "High-pass filter mode" label, 0, exp_filter_slope),      \
-            LOG_CONTROL("shpf" id, "High-pass filter frequency" label, U_HZ, expander_metadata::HPF),   \
-            COMBO("slpm" id, "Low-pass filter mode" label, 0, exp_filter_slope),      \
-            LOG_CONTROL("slpf" id, "Low-pass filter frequency" label, U_HZ, expander_metadata::LPF)
-
-        #define EXP_CHANNEL(id, label) \
-            COMBO("em" id, "Expander mode" label, expander_metadata::EM_DEFAULT, exp_modes), \
-            LOG_CONTROL("al" id, "Attack threshold" label, U_GAIN_AMP, expander_metadata::ATTACK_LVL), \
-            LOG_CONTROL("at" id, "Attack time" label, U_MSEC, expander_metadata::ATTACK_TIME), \
-            LOG_CONTROL("rrl" id, "Release threshold" label, U_GAIN_AMP, expander_metadata::RELEASE_LVL), \
-            LOG_CONTROL("rt" id, "Release time" label, U_MSEC, expander_metadata::RELEASE_TIME), \
-            CONTROL("hold" id, "Hold time" label, U_MSEC, expander_metadata::HOLD_TIME), \
-            LOG_CONTROL("er" id, "Ratio" label, U_NONE, expander_metadata::RATIO), \
-            LOG_CONTROL("kn" id, "Knee" label, U_GAIN_AMP, expander_metadata::KNEE), \
-            LOG_CONTROL("mk" id, "Makeup gain" label, U_GAIN_AMP, expander_metadata::MAKEUP), \
-            AMP_GAIN10("cdr" id, "Dry gain" label, GAIN_AMP_M_INF_DB),     \
-            AMP_GAIN10("cwt" id, "Wet gain" label, GAIN_AMP_0_DB), \
-            PERCENTS("cdw" id, "Dry/Wet balance" label, 100.0f, 0.1f), \
+        #define EXP_MONO_CHANNEL(sc_type, sct_dfl) \
+            COMBO("sci", "Sidechain input", "SC input", sct_dfl, sc_type), \
+            COMBO("scm", "Sidechain mode", "SC mode", expander_metadata::SC_MODE_DFL, exp_sc_modes), \
+            CONTROL("sla", "Sidechain lookahead", "SC look", U_MSEC, expander_metadata::LOOKAHEAD), \
+            SWITCH("scl", "Sidechain listen", "SC listen", 0.0f), \
+            LOG_CONTROL("scr", "Sidechain reactivity", "SC react", U_MSEC, expander_metadata::REACTIVITY), \
+            AMP_GAIN100("scp", "Sidechain preamp", "SC preamp", GAIN_AMP_0_DB), \
+            COMBO("shpm", "High-pass filter mode", "HPF mode", 0, exp_filter_slope),      \
+            LOG_CONTROL("shpf", "High-pass filter frequency", "HPF freq", U_HZ, expander_metadata::HPF),   \
+            COMBO("slpm", "Low-pass filter mode", "LPF mode", 0, exp_filter_slope),      \
+            LOG_CONTROL("slpf", "Low-pass filter frequency", "LPF freq", U_HZ, expander_metadata::LPF)
+
+        #define EXP_STEREO_CHANNEL(id, label, alias, sc_type, sct_dfl) \
+            COMBO("sci" id, "Sidechain input" label, "SC input" alias, sct_dfl, sc_type), \
+            COMBO("scm" id, "Sidechain mode" label, "SC mode" alias, expander_metadata::SC_MODE_DFL, exp_sc_modes), \
+            CONTROL("sla" id, "Sidechain lookahead" label, "SC look" alias, U_MSEC, expander_metadata::LOOKAHEAD), \
+            SWITCH("scl" id, "Sidechain listen" label, "SC listen" alias, 0.0f), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, expander_metadata::SC_SOURCE_DFL, exp_sc_sources), \
+            LOG_CONTROL("scr" id, "Sidechain reactivity" label, "SC react" alias, U_MSEC, expander_metadata::REACTIVITY), \
+            AMP_GAIN100("scp" id, "Sidechain preamp" label, "SC preamp" alias, GAIN_AMP_0_DB), \
+            COMBO("shpm" id, "High-pass filter mode" label, "HPF mode" alias, 0, exp_filter_slope),      \
+            LOG_CONTROL("shpf" id, "High-pass filter frequency" label, "HPF freq" alias, U_HZ, expander_metadata::HPF),   \
+            COMBO("slpm" id, "Low-pass filter mode" label, "LPF mode" alias, 0, exp_filter_slope),      \
+            LOG_CONTROL("slpf" id, "Low-pass filter frequency" label, "LPF freq" alias, U_HZ, expander_metadata::LPF)
+
+        #define EXP_CHANNEL(id, label, alias) \
+            COMBO("em" id, "Expander mode" label, "Mode" alias, expander_metadata::EM_DEFAULT, exp_modes), \
+            LOG_CONTROL("al" id, "Attack threshold" label, "Att lvl" alias, U_GAIN_AMP, expander_metadata::ATTACK_LVL), \
+            LOG_CONTROL("at" id, "Attack time" label, "Att time" alias, U_MSEC, expander_metadata::ATTACK_TIME), \
+            LOG_CONTROL("rrl" id, "Release threshold" label, "Rel lvl" alias, U_GAIN_AMP, expander_metadata::RELEASE_LVL), \
+            LOG_CONTROL("rt" id, "Release time" label, "Rel time" alias, U_MSEC, expander_metadata::RELEASE_TIME), \
+            CONTROL("hold" id, "Hold time" label, "Hold time" alias, U_MSEC, expander_metadata::HOLD_TIME), \
+            LOG_CONTROL("er" id, "Ratio" label, "Ratio" alias, U_NONE, expander_metadata::RATIO), \
+            LOG_CONTROL("kn" id, "Knee" label, "Knee" alias, U_GAIN_AMP, expander_metadata::KNEE), \
+            LOG_CONTROL("mk" id, "Makeup gain" label, "Makeup" alias, U_GAIN_AMP, expander_metadata::MAKEUP), \
+            AMP_GAIN10("cdr" id, "Dry gain" label, "Dry" alias, GAIN_AMP_M_INF_DB),     \
+            AMP_GAIN10("cwt" id, "Wet gain" label, "Wet" alias, GAIN_AMP_0_DB), \
+            PERCENTS("cdw" id, "Dry/Wet balance" label, "Dry/Wet" alias, 100.0f, 0.1f), \
             METER_OUT_GAIN("rl" id, "Release level" label, 20.0f), \
             MESH("ecg" id, "Expander curve graph" label, 2, expander_metadata::CURVE_MESH_SIZE)
 
-        #define EXP_AUDIO_METER(id, label) \
-            SWITCH("slv" id, "Sidechain level visibility" label, 1.0f), \
-            SWITCH("elv" id, "Envelope level visibility" label, 1.0f), \
-            SWITCH("grv" id, "Gain reduction visibility" label, 1.0f), \
-            SWITCH("ilv" id, "Input level visibility" label, 1.0f), \
-            SWITCH("olv" id, "Output level visibility" label, 1.0f), \
+        #define EXP_AUDIO_METER(id, label, alias) \
+            SWITCH("slv" id, "Sidechain level visibility" label, "Show SC" alias, 1.0f), \
+            SWITCH("elv" id, "Envelope level visibility" label, "Show Env" alias, 1.0f), \
+            SWITCH("grv" id, "Gain reduction visibility" label, "Show Gain" alias, 1.0f), \
+            SWITCH("ilv" id, "Input level visibility" label, "Show In" alias, 1.0f), \
+            SWITCH("olv" id, "Output level visibility" label, "Show Out" alias, 1.0f), \
             MESH("scg" id, "Expander sidechain graph" label, 2, expander_metadata::TIME_MESH_SIZE), \
             MESH("evg" id, "Expander envelope graph" label, 2, expander_metadata::TIME_MESH_SIZE), \
             MESH("grg" id, "Expander gain reduciton" label, 2, expander_metadata::TIME_MESH_SIZE + 4), \
@@ -190,10 +207,11 @@ namespace lsp
         {
             PORTS_MONO_PLUGIN,
             EXP_SHM_LINK_MONO,
+            EXP_PREMIX,
             EXP_COMMON,
-            EXP_MONO_CHANNEL(exp_sc_type),
-            EXP_CHANNEL("", ""),
-            EXP_AUDIO_METER("", ""),
+            EXP_MONO_CHANNEL(exp_sc_type, 0),
+            EXP_CHANNEL("", "", ""),
+            EXP_AUDIO_METER("", "", ""),
 
             PORTS_END
         };
@@ -202,12 +220,13 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EXP_SHM_LINK_STEREO,
+            EXP_PREMIX,
             EXP_COMMON,
             EXP_SPLIT_COMMON,
-            EXP_STEREO_CHANNEL("", "", exp_sc_type),
-            EXP_CHANNEL("", ""),
-            EXP_AUDIO_METER("_l", " Left"),
-            EXP_AUDIO_METER("_r", " Right"),
+            EXP_STEREO_CHANNEL("", "", "", exp_sc_type, 0),
+            EXP_CHANNEL("", "", ""),
+            EXP_AUDIO_METER("_l", " Left", " L"),
+            EXP_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -216,13 +235,15 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EXP_SHM_LINK_STEREO,
+            EXP_PREMIX,
             EXP_COMMON,
-            EXP_STEREO_CHANNEL("_l", " Left", exp_sc_type),
-            EXP_STEREO_CHANNEL("_r", " Right", exp_sc_type),
-            EXP_CHANNEL("_l", " Left"),
-            EXP_CHANNEL("_r", " Right"),
-            EXP_AUDIO_METER("_l", " Left"),
-            EXP_AUDIO_METER("_r", " Right"),
+            EXP_LINK("clink", "Left/Right controls link", "L/R link"),
+            EXP_STEREO_CHANNEL("_l", " Left", " L", exp_sc_type, 0),
+            EXP_STEREO_CHANNEL("_r", " Right", " R", exp_sc_type, 0),
+            EXP_CHANNEL("_l", " Left", " L"),
+            EXP_CHANNEL("_r", " Right", " R"),
+            EXP_AUDIO_METER("_l", " Left", " L"),
+            EXP_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -231,13 +252,15 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EXP_SHM_LINK_STEREO,
+            EXP_PREMIX,
             EXP_MS_COMMON,
-            EXP_STEREO_CHANNEL("_m", " Mid", exp_sc_type),
-            EXP_STEREO_CHANNEL("_s", " Side", exp_sc_type),
-            EXP_CHANNEL("_m", " Mid"),
-            EXP_CHANNEL("_s", " Side"),
-            EXP_AUDIO_METER("_m", " Mid"),
-            EXP_AUDIO_METER("_s", " Side"),
+            EXP_LINK("clink", "Mid/Side controls link", "M/S link"),
+            EXP_STEREO_CHANNEL("_m", " Mid", " M", exp_sc_type, 0),
+            EXP_STEREO_CHANNEL("_s", " Side", " S", exp_sc_type, 0),
+            EXP_CHANNEL("_m", " Mid", " M"),
+            EXP_CHANNEL("_s", " Side", " S"),
+            EXP_AUDIO_METER("_m", " Mid", " M"),
+            EXP_AUDIO_METER("_s", " Side", " S"),
 
             PORTS_END
         };
@@ -247,10 +270,11 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             EXP_SHM_LINK_MONO,
+            EXP_SC_PREMIX,
             EXP_COMMON,
-            EXP_MONO_CHANNEL(exp_extsc_type),
-            EXP_CHANNEL("", ""),
-            EXP_AUDIO_METER("", ""),
+            EXP_MONO_CHANNEL(exp_extsc_type, 1),
+            EXP_CHANNEL("", "", ""),
+            EXP_AUDIO_METER("", "", ""),
 
             PORTS_END
         };
@@ -260,12 +284,13 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             EXP_SHM_LINK_STEREO,
+            EXP_SC_PREMIX,
             EXP_COMMON,
             EXP_SPLIT_COMMON,
-            EXP_STEREO_CHANNEL("", "", exp_extsc_type),
-            EXP_CHANNEL("", ""),
-            EXP_AUDIO_METER("_l", " Left"),
-            EXP_AUDIO_METER("_r", " Right"),
+            EXP_STEREO_CHANNEL("", "", "", exp_extsc_type, 1),
+            EXP_CHANNEL("", "", ""),
+            EXP_AUDIO_METER("_l", " Left", " L"),
+            EXP_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -275,13 +300,15 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             EXP_SHM_LINK_STEREO,
+            EXP_SC_PREMIX,
             EXP_COMMON,
-            EXP_STEREO_CHANNEL("_l", " Left", exp_extsc_type),
-            EXP_STEREO_CHANNEL("_r", " Right", exp_extsc_type),
-            EXP_CHANNEL("_l", " Left"),
-            EXP_CHANNEL("_r", " Right"),
-            EXP_AUDIO_METER("_l", " Left"),
-            EXP_AUDIO_METER("_r", " Right"),
+            EXP_LINK("clink", "Left/Right controls link", "L/R link"),
+            EXP_STEREO_CHANNEL("_l", " Left", " L", exp_extsc_type, 1),
+            EXP_STEREO_CHANNEL("_r", " Right", " R", exp_extsc_type, 1),
+            EXP_CHANNEL("_l", " Left", " L"),
+            EXP_CHANNEL("_r", " Right", " R"),
+            EXP_AUDIO_METER("_l", " Left", " L"),
+            EXP_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -291,13 +318,15 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             EXP_SHM_LINK_STEREO,
+            EXP_SC_PREMIX,
             EXP_MS_COMMON,
-            EXP_STEREO_CHANNEL("_m", " Mid", exp_extsc_type),
-            EXP_STEREO_CHANNEL("_s", " Side", exp_extsc_type),
-            EXP_CHANNEL("_m", " Mid"),
-            EXP_CHANNEL("_s", " Side"),
-            EXP_AUDIO_METER("_m", " Mid"),
-            EXP_AUDIO_METER("_s", " Side"),
+            EXP_LINK("clink", "Mid/Side controls link", "M/S link"),
+            EXP_STEREO_CHANNEL("_m", " Mid", " M", exp_extsc_type, 1),
+            EXP_STEREO_CHANNEL("_s", " Side", " S", exp_extsc_type, 1),
+            EXP_CHANNEL("_m", " Mid", " M"),
+            EXP_CHANNEL("_s", " Side", " S"),
+            EXP_AUDIO_METER("_m", " Mid", " M"),
+            EXP_AUDIO_METER("_s", " Side", " S"),
 
             PORTS_END
         };
@@ -336,7 +365,7 @@ namespace lsp
             clap_features_mono,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             expander_mono_ports,
-            "dynamics/expander/single/mono.xml",
+            "dynamics/expander/single.xml",
             NULL,
             mono_plugin_port_groups,
             &expander_bundle
@@ -366,7 +395,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             expander_stereo_ports,
-            "dynamics/expander/single/stereo.xml",
+            "dynamics/expander/single.xml",
             NULL,
             stereo_plugin_port_groups,
             &expander_bundle
@@ -396,7 +425,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             expander_lr_ports,
-            "dynamics/expander/single/lr.xml",
+            "dynamics/expander/single.xml",
             NULL,
             stereo_plugin_port_groups,
             &expander_bundle
@@ -426,7 +455,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             expander_ms_ports,
-            "dynamics/expander/single/ms.xml",
+            "dynamics/expander/single.xml",
             NULL,
             stereo_plugin_port_groups,
             &expander_bundle
@@ -457,7 +486,7 @@ namespace lsp
             clap_features_mono,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_expander_mono_ports,
-            "dynamics/expander/single/mono.xml",
+            "dynamics/expander/single.xml",
             NULL,
             mono_plugin_sidechain_port_groups,
             &expander_bundle
@@ -487,7 +516,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_expander_stereo_ports,
-            "dynamics/expander/single/stereo.xml",
+            "dynamics/expander/single.xml",
             NULL,
             stereo_plugin_sidechain_port_groups,
             &expander_bundle
@@ -517,7 +546,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_expander_lr_ports,
-            "dynamics/expander/single/lr.xml",
+            "dynamics/expander/single.xml",
             NULL,
             stereo_plugin_sidechain_port_groups,
             &expander_bundle
@@ -547,7 +576,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY | E_DUMP_STATE,
             sc_expander_ms_ports,
-            "dynamics/expander/single/ms.xml",
+            "dynamics/expander/single.xml",
             NULL,
             stereo_plugin_sidechain_port_groups,
             &expander_bundle
diff -pruN 1.2.21-5/modules/lsp-plugins-expander/src/main/plug/expander.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-expander/src/main/plug/expander.cpp
--- 1.2.21-5/modules/lsp-plugins-expander/src/main/plug/expander.cpp	2025-03-01 12:43:05.400596716 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-expander/src/main/plug/expander.cpp	2025-08-26 18:15:55.545888575 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-expander
  * Created on: 3 авг. 2024 г.
@@ -29,7 +29,7 @@
 #include <lsp-plug.in/shared/id_colors.h>
 #include <lsp-plug.in/shared/debug.h>
 
-#define EXP_BUF_SIZE            0x1000
+#define EXP_BUF_SIZE            0x200
 
 namespace lsp
 {
@@ -110,6 +110,31 @@ namespace lsp
 
             pData           = NULL;
             pIDisplay       = NULL;
+
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
         }
 
         expander::~expander()
@@ -130,6 +155,7 @@ namespace lsp
             size_t allocate         = channel_size +
                                       buf_size +
                                       buf_size * channels * 5 +
+                                      buf_size * channels * 3 +
                                       curve_size +
                                       history_size;
 
@@ -142,6 +168,14 @@ namespace lsp
             vTime                   = advance_ptr_bytes<float>(ptr, history_size);
             vEmptyBuffer            = advance_ptr_bytes<float>(ptr, buf_size);
 
+            // Initialize pre-mix
+            for (size_t i=0; i<channels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, buf_size);
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, buf_size);
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, buf_size);
+            }
+
             // Initialize channels
             for (size_t i=0; i<channels; ++i)
             {
@@ -248,11 +282,26 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
             BIND_PORT(pInGain);
             BIND_PORT(pOutGain);
+            SKIP_PORT("Show mix overlay");
+            SKIP_PORT("Show sidechain overlay");
             BIND_PORT(pPause);
             BIND_PORT(pClear);
             if (nMode == EM_MS)
@@ -262,6 +311,8 @@ namespace lsp
                 BIND_PORT(pStereoSplit);
                 BIND_PORT(pScSpSource);
             }
+            if ((nMode == EM_LR) || (nMode == EM_MS))
+                SKIP_PORT("Separate channels link");
 
             // Sidechain ports
             lsp_trace("Binding sidechain ports");
@@ -546,12 +597,25 @@ namespace lsp
             return in;
         }
 
+        void expander::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void expander::update_settings()
         {
             dspu::filter_params_t fp;
             size_t channels = (nMode == EM_MONO) ? 1 : 2;
             bool bypass     = pBypass->value() >= 0.5f;
 
+            // Update pre-mix matrix
+            update_premix();
+
             // Global parameters
             bPause          = pPause->value() >= 0.5f;
             bClear          = pClear->value() >= 0.5f;
@@ -664,6 +728,120 @@ namespace lsp
             bUISync             = true;
         }
 
+        void expander::premix_channel(uint32_t channel, float * & in, float * & out, float * & sc, float * & link, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            in                      = in_buf;
+            out                     = out_buf;
+            sc                      = sc_buf;
+            link                    = link_buf;
+
+            sPremix.vIn[channel]    = &in_buf[count];
+            sPremix.vOut[channel]   = &out_buf[count];
+            if (sc_buf != NULL)
+                sPremix.vSc[channel]    = &sc_buf[count];
+            if (link_buf != NULL)
+                sPremix.vLink[channel]  = &link_buf[count];
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    in                  = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(in, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(in, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    in                  = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(in, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    sc                  = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(sc, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(sc, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    sc                  = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(sc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    link                = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(link, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(link, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    link                = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(link, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        in              = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(in, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        sc              = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(sc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    link            = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(link, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void expander::process(size_t samples)
         {
             size_t channels = (nMode == EM_MONO) ? 1 : 2;
@@ -680,14 +858,14 @@ namespace lsp
                 channel_t *c        = &vChannels[i];
 
                 // Initialize pointers
-                in_buf[i]           = c->pIn->buffer<float>();
-                out_buf[i]          = c->pOut->buffer<float>();
-                sc_buf[i]           = (c->pSC != NULL) ? c->pSC->buffer<float>() : in_buf[i];
-                shm_buf[i]          = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pSC != NULL) ? c->pSC->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *buf = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((buf != NULL) && (buf->active()))
-                    shm_buf[i]          = buf->buffer();
+                    sPremix.vLink[i]    = buf->buffer();
             }
 
             // Perform expansion
@@ -695,7 +873,11 @@ namespace lsp
             while (left > 0)
             {
                 // Detemine number of samples to process
-                size_t to_process = (left > EXP_BUF_SIZE) ? EXP_BUF_SIZE : left;
+                const size_t to_process     = (left > EXP_BUF_SIZE) ? EXP_BUF_SIZE : left;
+
+                // Pre-mix channel data
+                for (size_t i=0; i<channels; ++i)
+                    premix_channel(i, in_buf[i], out_buf[i], sc_buf[i], shm_buf[i], to_process);
 
                 // Prepare audio channels
                 if (nMode == EM_MONO)
@@ -794,13 +976,6 @@ namespace lsp
                     channel_t *c        = &vChannels[i];
                     c->sDryDelay.process(c->vIn, in_buf[i], to_process);
                     c->sBypass.process(out_buf[i], c->vIn, c->vOut, to_process);
-
-                    in_buf[i]          += to_process;
-                    out_buf[i]         += to_process;
-                    if (sc_buf[i] != NULL)
-                        sc_buf[i]          += to_process;
-                    if (shm_buf[i] != NULL)
-                        shm_buf[i]         += to_process;
                 }
 
                 left       -= to_process;
@@ -1147,6 +1322,32 @@ namespace lsp
             v->write("bUISync", bUISync);
             v->write("pIDisplay", pIDisplay);
 
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
+
             v->write("pBypass", pBypass);
             v->write("pInGain", pInGain);
             v->write("pOutGain", pOutGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-filter/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-filter/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-filter/.github/workflows/build.yml	2025-03-01 12:43:03.000611123 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-filter/.github/workflows/build.yml	2025-08-26 18:15:50.469937839 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-filter/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-filter/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-filter/CHANGELOG	2025-03-01 12:43:03.000611123 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-filter/CHANGELOG	2025-08-26 18:15:50.469937839 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.15 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.14 ===
+* Updated build scripts and dependencies.
+
 === 1.0.13 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-filter/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-filter/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-filter/dependencies.mk	2025-03-01 12:43:03.000611123 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-filter/dependencies.mk	2025-08-26 18:15:50.469937839 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-filter/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-filter/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-filter/make/tools.mk	2025-03-01 12:43:03.004611098 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-filter/make/tools.mk	2025-08-26 18:15:50.469937839 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-filter/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-filter/modules.mk
--- 1.2.21-5/modules/lsp-plugins-filter/modules.mk	2025-03-01 12:43:03.004611098 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-filter/modules.mk	2025-08-26 18:15:50.469937839 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-filter/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-filter/project.mk
--- 1.2.21-5/modules/lsp-plugins-filter/project.mk	2025-03-01 12:43:03.004611098 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-filter/project.mk	2025-08-26 18:15:50.469937839 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Filter Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.13
+ARTIFACT_VERSION            = 1.0.15
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-filter/res/doc/screenshots/filter_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-filter/res/doc/screenshots/filter_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-filter/res/doc/screenshots/filter_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-filter/res/doc/screenshots/filter_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-filter/src/doc/manuals/plugins/filter.php 1.2.23-0ubuntu1/modules/lsp-plugins-filter/src/doc/manuals/plugins/filter.php
--- 1.2.21-5/modules/lsp-plugins-filter/src/doc/manuals/plugins/filter.php	2025-03-01 12:43:03.008611075 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-filter/src/doc/manuals/plugins/filter.php	2025-08-26 18:15:50.473937800 +0000
@@ -18,7 +18,7 @@
 	</li>
 	<li><b>Matched Z Transform (MT) filters</b> are probably the best choice when cutting out individual short range of frequencies.</li>
 	<li><b>Bilinear Transform (BT) filters</b> are good when cutting-out high frequencies because they have -INF dB amplification at the Nyquist frequency.</li>
-    <li><b>Direct Design (DR) filters</b> add alterantive implementations for the various supperted filter types, and may be chosen whenever their frequency response is best suited.</li>
+    <li><b>Direct Design (DR) filters</b> add alternative implementations for the various supperted filter types, and may be chosen whenever their frequency response is best suited.</li>
 </ul>
 <p>
 	This plugin introduces a single filter.
@@ -169,7 +169,7 @@ of so-called poles and zeros:<p>
 		<li><b>Bell</b> - Bell filter with smooth peak/recess.</li>
 		<li><b>Bandpass</b> - Bandpass filter.</li>
 		<li><b>Notch</b> - Notch filter with full rejection of selected frequency.</li>
-		<li><b>Resonance</b> - Resonance filter wih sharp peak/recess.</li>
+		<li><b>Resonance</b> - Resonance filter with sharp peak/recess.</li>
 		<li><b>Ladder-pass</b> - The filter that makes some ladder-passing in the spectrum domain.</li>
 		<li><b>Ladder-rej</b> - The filter that makes some ladder-rejection in the spectrum domain.</li>
 		<li><b>Allpass</b> - All-pass filter which only affects the phase of the audio signal at the specified frequency.</li>
diff -pruN 1.2.21-5/modules/lsp-plugins-filter/src/main/meta/filter.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-filter/src/main/meta/filter.cpp
--- 1.2.21-5/modules/lsp-plugins-filter/src/main/meta/filter.cpp	2025-03-01 12:43:03.008611075 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-filter/src/main/meta/filter.cpp	2025-08-26 18:15:50.473937800 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-filter
  * Created on: 16 июн. 2023 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_FILTER_VERSION_MAJOR         1
 #define LSP_PLUGINS_FILTER_VERSION_MINOR         0
-#define LSP_PLUGINS_FILTER_VERSION_MICRO         13
+#define LSP_PLUGINS_FILTER_VERSION_MICRO         15
 
 #define LSP_PLUGINS_FILTER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -57,7 +57,7 @@ namespace lsp
             { NULL, NULL }
         };
 
-        static const port_item_t equalizer_eq_modes[] =
+        static const port_item_t filter_eq_modes[] =
         {
             { "IIR",            "filter.type.iir" },
             { "FIR",            "filter.type.fir" },
@@ -95,22 +95,22 @@ namespace lsp
         };
 
         #define EQ_FILTER \
-                COMBO("ft", "Filter type", 0, filter_types), \
-                COMBO("fm", "Filter mode", 0, filter_modes), \
-                COMBO("s", "Filter slope", 0, filter_slopes), \
-                LOG_CONTROL("f", "Frequency", U_HZ, filter_metadata::FREQ), \
-                CONTROL("w", "Filter Width", U_OCTAVES, filter_metadata::WIDTH), \
-                { "g", "Gain", U_GAIN_AMP, R_CONTROL, F_LOG | F_UPPER | F_LOWER | F_STEP, GAIN_AMP_M_36_DB, GAIN_AMP_P_36_DB, GAIN_AMP_0_DB, 0.01, NULL, NULL }, \
-                { "q", "Quality factor", U_NONE, R_CONTROL, F_UPPER | F_LOWER | F_STEP, 0.0f, 100.0f, 0.0f, 0.025f, NULL        }
+                COMBO("ft", "Filter type", "Type", 0, filter_types), \
+                COMBO("fm", "Filter mode", "Mode", 0, filter_modes), \
+                COMBO("s", "Filter slope", "Slope", 0, filter_slopes), \
+                LOG_CONTROL("f", "Frequency", "Frequency", U_HZ, filter_metadata::FREQ), \
+                CONTROL("w", "Filter Width", "Width", U_OCTAVES, filter_metadata::WIDTH), \
+                LOG_CONTROL_ALL("g", "Gain", "Gain", U_GAIN_AMP, GAIN_AMP_M_36_DB, GAIN_AMP_P_36_DB, GAIN_AMP_0_DB, 0.01), \
+                CONTROL_ALL("q", "Quality factor", "Q", U_NONE, 0.0f, 100.0f, 0.0f, 0.025f)
 
         #define EQ_COMMON \
                 BYPASS, \
-                AMP_GAIN("g_in", "Input gain", filter_metadata::IN_GAIN_DFL, 10.0f), \
-                AMP_GAIN("g_out", "Output gain", filter_metadata::OUT_GAIN_DFL, 10.0f), \
-                COMBO("mode", "Equalizer mode", 0, equalizer_eq_modes), \
-                LOG_CONTROL("react", "FFT reactivity", U_MSEC, filter_metadata::REACT_TIME), \
-                AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \
-                LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, filter_metadata::ZOOM)
+                AMP_GAIN("g_in", "Input gain", "Input gain", filter_metadata::IN_GAIN_DFL, 10.0f), \
+                AMP_GAIN("g_out", "Output gain", "Output gain", filter_metadata::OUT_GAIN_DFL, 10.0f), \
+                COMBO("mode", "Equalizer mode", "Filter mode", 0, filter_eq_modes), \
+                LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, filter_metadata::REACT_TIME), \
+                AMP_GAIN("shift", "Shift gain", "Shift", 1.0f, 100.0f), \
+                LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, filter_metadata::ZOOM)
 
         #define EQ_MONO_PORTS \
                 MESH("ag", "Amplitude graph", 2, filter_metadata::MESH_POINTS), \
@@ -118,16 +118,16 @@ namespace lsp
                 METER_GAIN("sm", "Output signal meter", GAIN_AMP_P_12_DB)
 
         #define EQ_STEREO_PORTS \
-                PAN_CTL("bal", "Output balance", 0.0f), \
+                PAN_CTL("bal", "Output balance", "Out balance", 0.0f), \
                 MESH("ag", "Amplitude graph", 2, filter_metadata::MESH_POINTS), \
                 METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \
                 METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \
                 METER_GAIN("imr", "Input signal meter Right", GAIN_AMP_P_12_DB), \
                 METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB)
 
-        #define CHANNEL_ANALYSIS(id, label) \
-                SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-                SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
+        #define CHANNEL_ANALYSIS(id, label, alias) \
+                SWITCH("ife" id, "Input FFT graph enable" label, "Show FFT In" alias, 1.0f), \
+                SWITCH("ofe" id, "Output FFT graph enable" label, "Show FFT Out" alias, 1.0f), \
                 MESH("ifg" id, "Input FFT graph" label, 2, filter_metadata::MESH_POINTS + 2), \
                 MESH("ofg" id, "Output FFT graph" label, 2, filter_metadata::MESH_POINTS)
 
@@ -136,7 +136,7 @@ namespace lsp
         {
             PORTS_MONO_PLUGIN,
             EQ_COMMON,
-            CHANNEL_ANALYSIS("", " "),
+            CHANNEL_ANALYSIS("", " ", ""),
             EQ_MONO_PORTS,
             EQ_FILTER,
 
@@ -147,8 +147,8 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             EQ_STEREO_PORTS,
             EQ_FILTER,
 
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-flanger/.github/workflows/build.yml	2025-03-01 12:43:02.776612468 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/.github/workflows/build.yml	2025-08-26 18:15:49.681945487 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-flanger/CHANGELOG	2025-03-01 12:43:02.776612468 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/CHANGELOG	2025-08-26 18:15:49.681945487 +0000
@@ -2,6 +2,15 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.15 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.14 ===
+* Signigificantly reduced LFO noise.
+* Added Drive knob to the feedback chain.
+* Added presets.
+* Updated build scripts and dependencies.
+
 === 1.0.13 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-flanger/dependencies.mk	2025-03-01 12:43:02.776612468 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/dependencies.mk	2025-08-26 18:15:49.681945487 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/include/private/meta/flanger.h 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/include/private/meta/flanger.h
--- 1.2.21-5/modules/lsp-plugins-flanger/include/private/meta/flanger.h	2025-03-01 12:43:02.780612443 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/include/private/meta/flanger.h	2025-08-26 18:15:49.681945487 +0000
@@ -73,6 +73,11 @@ namespace lsp
             static constexpr float  FEEDBACK_DELAY_DFL  = 0.0f;
             static constexpr float  FEEDBACK_DELAY_STEP = 0.001f;
 
+            static constexpr float  FEEDBACK_DRIVE_MIN  = 0.0f;
+            static constexpr float  FEEDBACK_DRIVE_MAX  = 1.0f;
+            static constexpr float  FEEDBACK_DRIVE_DFL  = 0.0f;
+            static constexpr float  FEEDBACK_DRIVE_STEP = 0.025f;
+
             static constexpr float  TEMPO_MIN           = 20.0f;
             static constexpr float  TEMPO_MAX           = 360.0f;
             static constexpr float  TEMPO_STEP          = 0.1f;
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/include/private/plugins/flanger.h 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/include/private/plugins/flanger.h
--- 1.2.21-5/modules/lsp-plugins-flanger/include/private/plugins/flanger.h	2025-03-01 12:43:02.780612443 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/include/private/plugins/flanger.h	2025-08-26 18:15:49.681945487 +0000
@@ -115,8 +115,10 @@ namespace lsp
                 mix_func_t          pCrossfadeFunc;     // Cross-fade function
                 float               fOldFeedGain;       // Old feedback gain
                 float               fFeedGain;          // Feed-back gain
-                size_t              nOldFeedDelay;      // Old feedback delay
-                size_t              nFeedDelay;         // Feed-back delay
+                float               fOldFeedDrive;      // Old feed-back drive
+                float               fFeedDrive;         // Feedback drive
+                float               fOldFeedDelay;      // Old feedback delay
+                float               fFeedDelay;         // Feed-back delay
                 float               fOldInGain;         // Old input gain
                 float               fInGain;            // Input gain
                 float               fOldDryGain;        // Old dry gain
@@ -147,6 +149,7 @@ namespace lsp
                 plug::IPort        *pOversampling;      // Oversampling
                 plug::IPort        *pFeedOn;            // Feedback enable switch
                 plug::IPort        *pFeedGain;          // Feedback gain
+                plug::IPort        *pFeedDrive;         // Feedback drive
                 plug::IPort        *pFeedDelay;         // Feedback delay
                 plug::IPort        *pFeedPhase;         // Feedback phase
                 plug::IPort        *pInGain;            // Input gain
@@ -161,9 +164,6 @@ namespace lsp
 
             protected:
                 static inline uint32_t  phase_to_int(float phase);
-                static inline float     lerp(float o_value, float n_value, float k);
-                static inline float     qlerp(float o_value, float n_value, float k);
-                static inline int32_t   ilerp(int32_t o_value, int32_t n_value, float k);
 
             protected:
                 void                do_destroy();
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-flanger/make/tools.mk	2025-03-01 12:43:02.780612443 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/make/tools.mk	2025-08-26 18:15:49.681945487 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/modules.mk
--- 1.2.21-5/modules/lsp-plugins-flanger/modules.mk	2025-03-01 12:43:02.780612443 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/modules.mk	2025-08-26 18:15:49.681945487 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/project.mk
--- 1.2.21-5/modules/lsp-plugins-flanger/project.mk	2025-03-01 12:43:02.780612443 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/project.mk	2025-08-26 18:15:49.681945487 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Flanger Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.13
+ARTIFACT_VERSION            = 1.0.15
 
 
 
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/res/doc/configs/flanger_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/doc/configs/flanger_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-flanger/res/doc/configs/flanger_stereo.cfg	2025-03-01 12:43:02.780612443 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/doc/configs/flanger_stereo.cfg	2025-08-26 18:15:49.681945487 +0000
@@ -1,14 +1,17 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             test (Test Case)
-#   Package version:     0.0.0-devel
-#   Plugin name:         Flanger Stereo (Flanger Stereo)
-#   Plugin version:      1.0.0
-#   UID:                 flanger_stereo
-#   LV2 URI:             http://lsp-plug.in/plugins/lv2/flanger_stereo
-#   VST identifier:      lf1s
-#   LADSPA identifier:   5002235
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/flanger_stereo
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Flanger Stereo (Flanger Stereo)
+#   Plugin version:          1.0.14
+#   UID:                     flanger_stereo
+#   CLAP URI:                in.lsp-plug.flanger_stereo
+#   GStreamer identifier:    lsp-plugins-flanger-stereo
+#   LADSPA identifier:       5002235
+#   LADSPA label:            http://lsp-plug.in/plugins/ladspa/flanger_stereo
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/flanger_stereo
+#   VST 2.x identifier:      lf1s
+#   VST 3.x identifier:      6473702066317320202020206C663173
 # 
 # (C) Test Case
 #   https://lsp-plug.in/
@@ -108,7 +111,7 @@ reset = false
 # Mid/Side mode switch [boolean]: true/false
 ms = true
 
-# Min depth [ms]: 0.00000000..10.00000000
+# Min depth [ms]: 0.01000000..10.00000000
 dmin = 2.23000
 
 # Depth [ms]: 0.10000000..20.00000000
@@ -117,21 +120,18 @@ depth = 2.30000
 # Signal phase switch [boolean]: true/false
 sphase = true
 
-# The overall amount of the effect [G]: 0.00000000..10.00000000
-amount = -20.50 db
-
 # Oversampling: 0..10
 #   0: None
-#   1: 2X Medium
-#   2: 2X High
-#   3: 3X Medium
-#   4: 3X High
-#   5: 4X Medium
-#   6: 4X High
-#   7: 6X Medium
-#   8: 6X High
-#   9: 8X Medium
-#   10: 8X High
+#   1: 2x/16bit
+#   2: 2x/24bit
+#   3: 3x/16bit
+#   4: 3x/24bit
+#   5: 4x/16bit
+#   6: 4x/24bit
+#   7: 6x/16bit
+#   8: 6x/24bit
+#   9: 8x/16bit
+#   10: 8x/24bit
 ovs = 5
 
 # Feedback on [boolean]: true/false
@@ -140,6 +140,9 @@ fb_on = true
 # Feedback gain [G]: 0.00000000..0.89125091
 fgain = -6.00 db
 
+# Feedback drive [G]: 0.00000000..1.00000000
+fdrive = -28.55 db
+
 # Feedback delay [ms]: 0.00000000..5.00000000
 fdelay = 0.00000
 
@@ -155,6 +158,9 @@ dry = -inf db
 # Wet amount [G]: 0.00000000..10.00000000
 wet = 0.00 db
 
+# Dry/Wet balance [%]: 0.00000000..100.00000000
+drywet = 100.00000
+
 # Output gain [G]: 0.00000000..1000.00000000
 g_out = -3.50 db
 
Binary files 1.2.21-5/modules/lsp-plugins-flanger/res/doc/screenshots/flanger_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/doc/screenshots/flanger_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-flanger/res/doc/screenshots/flanger_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/doc/screenshots/flanger_stereo.png differ
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Acoustic Slow.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Acoustic Slow.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Acoustic Slow.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Acoustic Slow.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.25000
+frac = 4.00000
+denom = 4.00000
+tempo = 120.00000
+sync = true
+time = 1
+xfade = 0.00000
+xtype = 1
+type = 3
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = false
+dmin = 0.25000
+depth = 4.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -9.00 db
+fdrive = -inf db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Acoustic Solo.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Acoustic Solo.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Acoustic Solo.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Acoustic Solo.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.25000
+frac = 2.00000
+denom = 4.00000
+tempo = 120.00000
+sync = true
+time = 1
+xfade = 0.00000
+xtype = 1
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 90.00000
+reset = false
+ms = false
+dmin = 0.10000
+depth = 3.00000
+sphase = false
+ovs = 0
+fb_on = false
+fgain = -6.00 db
+fdrive = -inf db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Blaster.preset 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Blaster.preset
--- 1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Blaster.preset	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Blaster.preset	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 10.00000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 1
+period = 0
+atype = 0
+aperiod = 1
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = false
+dmin = 1.00000
+depth = 10.00000
+sphase = false
+ovs = 0
+fb_on = false
+fgain = -1.00 db
+fdrive = 0.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Chewing Bass.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Chewing Bass.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Chewing Bass.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Chewing Bass.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.25000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 11.94030
+xtype = 1
+type = 5
+period = 2
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 0.00000
+reset = false
+ms = false
+dmin = 1.00000
+depth = 3.00000
+sphase = false
+ovs = 0
+fb_on = false
+fgain = -6.00 db
+fdrive = -inf db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Clean Guitar Rhythm.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Clean Guitar Rhythm.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Clean Guitar Rhythm.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Clean Guitar Rhythm.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.25000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 1
+period = 0
+atype = 0
+aperiod = 1
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = false
+dmin = 0.50000
+depth = 5.00000
+sphase = false
+ovs = 0
+fb_on = false
+fgain = -1.00 db
+fdrive = 0.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Distortion Rhythm Guitar.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Distortion Rhythm Guitar.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Distortion Rhythm Guitar.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Distortion Rhythm Guitar.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.25000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 3
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = true
+dmin = 0.25000
+depth = 2.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -3.00 db
+fdrive = -inf db
+fdelay = 1.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Fat Bass.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Fat Bass.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Fat Bass.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Fat Bass.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.10000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 30.00000
+reset = false
+ms = false
+dmin = 1.00000
+depth = 3.00000
+sphase = true
+ovs = 0
+fb_on = false
+fgain = -6.00 db
+fdrive = -inf db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Fat Distortion Guitar.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Fat Distortion Guitar.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Fat Distortion Guitar.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Fat Distortion Guitar.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.20000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 3
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = true
+dmin = 1.00000
+depth = 3.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -4.00 db
+fdrive = 0.00 db
+fdelay = 1.00000
+fphase = true
+g_in = 0.00 db
+dry = 0.00 db
+wet = -5.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flanging Organ.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flanging Organ.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flanging Organ.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flanging Organ.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.25000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 6
+period = 0
+atype = 6
+aperiod = 0
+iphase = 0.00000
+dphase = 90.00000
+reset = false
+ms = false
+dmin = 0.25000
+depth = 2.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -6.00 db
+fdrive = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -3.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flanging Pads.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flanging Pads.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flanging Pads.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flanging Pads.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.10000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = false
+dmin = 0.50000
+depth = 3.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -3.00 db
+fdrive = -8.00 db
+fdelay = 0.50000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flying In.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flying In.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flying In.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flying In.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.10000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 11.08742
+xtype = 1
+type = 0
+period = 2
+atype = 0
+aperiod = 1
+iphase = 0.00000
+dphase = 0.00000
+reset = false
+ms = false
+dmin = 0.10000
+depth = 3.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -6.00 db
+fdrive = -22.54 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flying Out.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flying Out.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flying Out.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Flying Out.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.10000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 11.08742
+xtype = 1
+type = 0
+period = 1
+atype = 0
+aperiod = 1
+iphase = 0.00000
+dphase = 0.00000
+reset = false
+ms = false
+dmin = 0.10000
+depth = 3.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -6.00 db
+fdrive = -22.54 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/RKR Flanger.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/RKR Flanger.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/RKR Flanger.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/RKR Flanger.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.11111
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 0
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 30.00000
+reset = false
+ms = false
+dmin = 0.25000
+depth = 3.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -6.00 db
+fdrive = 0.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -10.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Ringing Distortion Guitar.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Ringing Distortion Guitar.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Ringing Distortion Guitar.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Ringing Distortion Guitar.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.20000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 3
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 0.00000
+reset = false
+ms = false
+dmin = 2.00000
+depth = 2.00000
+sphase = true
+ovs = 0
+fb_on = true
+fgain = -6.00 db
+fdrive = 0.00 db
+fdelay = 1.00000
+fphase = true
+g_in = 0.00 db
+dry = 0.00 db
+wet = -5.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Robotic.preset 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Robotic.preset
--- 1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Robotic.preset	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Robotic.preset	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 1.00000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 11
+period = 0
+atype = 0
+aperiod = 1
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = false
+dmin = 0.10000
+depth = 3.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -6.00 db
+fdrive = -3.00 db
+fdelay = 0.90000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Scary Bells.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Scary Bells.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Scary Bells.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Scary Bells.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.10000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 2
+period = 0
+atype = 3
+aperiod = 0
+iphase = 0.00000
+dphase = 90.00000
+reset = false
+ms = false
+dmin = 1.00000
+depth = 20.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -9.00 db
+fdrive = -5.38 db
+fdelay = 0.50000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Short Reverb.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Short Reverb.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Short Reverb.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Short Reverb.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.25000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 9
+period = 0
+atype = 0
+aperiod = 1
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = false
+dmin = 2.00000
+depth = 20.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -6.00 db
+fdrive = -3.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Soft Flying.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Soft Flying.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Soft Flying.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Soft Flying.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.10000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = false
+dmin = 0.25000
+depth = 2.00000
+sphase = false
+ovs = 0
+fb_on = true
+fgain = -6.00 db
+fdrive = -22.54 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Soft Rotating.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Soft Rotating.preset"
--- "1.2.21-5/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Soft Rotating.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/presets/effects/flanger/Soft Rotating.preset"	2025-08-26 18:15:49.685945448 +0000
@@ -0,0 +1,32 @@
+bypass = false
+mono = false
+rate = 0.25000
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+xfade = 0.00000
+xtype = 1
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+iphase = 0.00000
+dphase = 180.00000
+reset = false
+ms = false
+dmin = 0.25000
+depth = 2.00000
+sphase = false
+ovs = 0
+fb_on = false
+fgain = -6.00 db
+fdrive = -inf db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = 0.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/res/main/ui/effects/flanger.xml 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/ui/effects/flanger.xml
--- 1.2.21-5/modules/lsp-plugins-flanger/res/main/ui/effects/flanger.xml	2025-03-01 12:43:02.780612443 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/res/main/ui/effects/flanger.xml	2025-08-26 18:15:49.689945408 +0000
@@ -278,22 +278,44 @@
 								<button id="fphase" width.min="134" text="labels.signal.phase" hfill="true" pad.l="6" ui:inject="Button_orange" height="19"/>
 							</hbox>
 						</cell>
-						<hbox fill="false" pad.v="4">
-							<knob id="fgain" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
-							<vbox width.min="54">
-								<label text="labels.gain"/>
-								<value id="fgain" width="48" same_line="true"/>
-							</vbox>
-						</hbox>
-						<hbox fill="false" pad.v="4">
-							<knob id="fdelay" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
-							<vbox width.min="54">
-								<label text="labels.delay"/>
-								<value id="fdelay" width="48" same_line="true"/>
-							</vbox>
-						</hbox>
-						<cell cols="2"><void vexpand="true"/></cell>
 					</ui:with>
+
+						<cell cols="2">
+							<grid rows="2" cols="5" vexpand="true">
+								<cell cols="8"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+								<ui:with bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken">
+									<hbox fill="false" pad.v="4" pad.h="6">
+										<knob id="fgain" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
+										<vbox width.min="4">
+											<label text="labels.gain"/>
+											<value id="fgain" width="48" same_line="true"/>
+										</vbox>
+									</hbox>
+								</ui:with>
+								<vsep pad.h="2" bg.color="bg" hreduce="true"/>
+								<ui:with bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken">
+									<hbox fill="false" pad.v="4" pad.h="6">
+										<knob id="fdrive" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
+										<vbox width.min="4">
+											<label text="labels.signal.drive"/>
+											<value id="fdrive" width="48" same_line="true"/>
+										</vbox>
+									</hbox>
+								</ui:with>
+								<vsep pad.h="2" bg.color="bg" hreduce="true"/>
+								<ui:with bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken">
+									<hbox fill="false" pad.v="4" pad.h="6">
+										<knob id="fdelay" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
+										<vbox width.min="4">
+											<label text="labels.delay"/>
+											<value id="fdelay" width="48" same_line="true"/>
+										</vbox>
+									</hbox>
+								</ui:with>
+							</grid>
+						</cell>
+						<cell cols="2"><void vexpand="true" bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken"/></cell>
+
 				</grid>
 			</group>
 			<!-- Separator -->
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/src/doc/manuals/plugins/flanger.php 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/src/doc/manuals/plugins/flanger.php
--- 1.2.21-5/modules/lsp-plugins-flanger/src/doc/manuals/plugins/flanger.php	2025-03-01 12:43:02.780612443 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/src/doc/manuals/plugins/flanger.php	2025-08-26 18:15:49.689945408 +0000
@@ -68,8 +68,9 @@
 	</ul>
 	<li><b>Phase</b> - the button that allows to enable phase inversion of the delayed signal which is added to original one.</li>
 	<li><b>Feedback</b> - the button that switches on the feedback chain.</li>
-	<li><b>Feedback</b> - the knob that controls the amount of signal being fed back.</li>
     <li><b>Feedback Phase</b> - the button that allows to invert the polarity of the feedback signal.</li>
+	<li><b>Feedback</b> - the knob that controls the amount of signal being fed back.</li>
+    <li><b>Feedback Drive</b> - the amount of input signal driven into feed-back delay line.</li>
     <li><b>Feedback Delay</b> - the additional delay which can be applied to the feedback signal.</li>
 </ul>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/src/main/meta/flanger.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/src/main/meta/flanger.cpp
--- 1.2.21-5/modules/lsp-plugins-flanger/src/main/meta/flanger.cpp	2025-03-01 12:43:02.780612443 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/src/main/meta/flanger.cpp	2025-08-26 18:15:49.689945408 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-flanger
  * Created on: 25 нояб. 2020 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_FLANGER_VERSION_MAJOR       1
 #define LSP_PLUGINS_FLANGER_VERSION_MINOR       0
-#define LSP_PLUGINS_FLANGER_VERSION_MICRO       13
+#define LSP_PLUGINS_FLANGER_VERSION_MICRO       15
 
 #define LSP_PLUGINS_FLANGER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -113,28 +113,29 @@ namespace lsp
 
             BYPASS,
 
-            LOG_CONTROL("rate", "Rate", U_HZ, flanger::RATE),
-            CONTROL("frac", "Time fraction", U_BAR, flanger::FRACTION),
-            CONTROL("denom", "Time fraction denominator", U_BAR, flanger::DENOMINATOR),
-            CONTROL("tempo", "Tempo", U_BPM, flanger::TEMPO),
-            SWITCH("sync", "Tempo sync", 0.0f),
-            COMBO("time", "Time computing method", 0, rate_type),
-            CONTROL("xfade", "Crossfade", U_PERCENT, flanger::CROSSFADE),
-            COMBO("xtype", "Crossfade Type", 1, crossfade_type),
-            COMBO("type", "LFO type", 0, oscillator_functions),
-            COMBO("period", "LFO period", 0, oscillator_periods),
-            CYC_CONTROL("iphase", "Initial phase", U_DEG, flanger::PHASE),
-            TRIGGER("reset", "Reset phase to initial"),
+            LOG_CONTROL("rate", "Rate", "Rate", U_HZ, flanger::RATE),
+            CONTROL("frac", "Time fraction", "Frac", U_BAR, flanger::FRACTION),
+            CONTROL("denom", "Time fraction denominator", "Denom", U_BAR, flanger::DENOMINATOR),
+            CONTROL("tempo", "Tempo", "Tempo", U_BPM, flanger::TEMPO),
+            SWITCH("sync", "Tempo sync", "Sync tempo", 0.0f),
+            COMBO("time", "Time computing method", "Method", 0, rate_type),
+            CONTROL("xfade", "Crossfade", "Xfade", U_PERCENT, flanger::CROSSFADE),
+            COMBO("xtype", "Crossfade Type", "Xfade type", 1, crossfade_type),
+            COMBO("type", "LFO type", "LFO type", 0, oscillator_functions),
+            COMBO("period", "LFO period", "LFO period", 0, oscillator_periods),
+            CYC_CONTROL("iphase", "Initial phase", "LFO phase", U_DEG, flanger::PHASE),
+            TRIGGER("reset", "Reset phase to initial", "Reset"),
             MESH("lfo", "LFO graph", 2, flanger::LFO_MESH_SIZE),
 
-            CONTROL("dmin", "Min depth", U_MSEC, flanger::DEPTH_MIN),
-            CONTROL("depth", "Depth", U_MSEC, flanger::DEPTH),
-            SWITCH("sphase", "Signal phase switch", 0.0f),
-            COMBO("ovs", "Oversampling", 0, oversampling_mode),
-            SWITCH("fb_on", "Feedback on", 0),
-            CONTROL("fgain", "Feedback gain", U_GAIN_AMP, flanger::FEEDBACK_GAIN),
-            CONTROL("fdelay", "Feedback delay", U_MSEC, flanger::FEEDBACK_DELAY),
-            SWITCH("fphase", "Feedback phase switch", 0.0f),
+            CONTROL("dmin", "Min depth", "Min depth", U_MSEC, flanger::DEPTH_MIN),
+            CONTROL("depth", "Depth", "Depth", U_MSEC, flanger::DEPTH),
+            SWITCH("sphase", "Signal phase switch", "Phase", 0.0f),
+            COMBO("ovs", "Oversampling", "Oversampling", 0, oversampling_mode),
+            SWITCH("fb_on", "Feedback on", "Feed on", 0),
+            CONTROL("fgain", "Feedback gain", "Feed gain", U_GAIN_AMP, flanger::FEEDBACK_GAIN),
+            CONTROL("fdrive", "Feedback drive", "Feed drive", U_GAIN_AMP, flanger::FEEDBACK_DRIVE),
+            CONTROL("fdelay", "Feedback delay", "Feed delay", U_MSEC, flanger::FEEDBACK_DELAY),
+            SWITCH("fphase", "Feedback phase switch", "Feed phase", 0.0f),
 
             IN_GAIN,
             DRY_GAIN(GAIN_AMP_0_DB),
@@ -157,34 +158,35 @@ namespace lsp
 
             BYPASS,
 
-            SWITCH("mono", "Test for mono compatibility", 0),
-            LOG_CONTROL("rate", "Rate", U_HZ, flanger::RATE),
-            CONTROL("frac", "Time fraction", U_BAR, flanger::FRACTION),
-            CONTROL("denom", "Time fraction denominator", U_BAR, flanger::DENOMINATOR),
-            CONTROL("tempo", "Tempo", U_BPM, flanger::TEMPO),
-            SWITCH("sync", "Tempo sync", 0.0f),
-            COMBO("time", "Time computing method", 0, rate_type),
-            CONTROL("xfade", "Crossfade", U_PERCENT, flanger::CROSSFADE),
-            COMBO("xtype", "Crossfade Type", 1, crossfade_type),
-            COMBO("type", "LFO type", 0, oscillator_functions),
-            COMBO("period", "LFO period", 0, oscillator_periods),
-            COMBO("atype", "Additional LFO type", 0, additional_oscillator_functions),
-            COMBO("aperiod", "Additional LFO period", 0, oscillator_periods),
-            CYC_CONTROL("iphase", "Initial phase", U_DEG, flanger::PHASE),
-            CYC_CONTROL("dphase", "Phase difference between left and right", U_DEG, flanger::PHASE),
-            TRIGGER("reset", "Reset phase to initial"),
+            SWITCH("mono", "Test for mono compatibility", "Mono", 0),
+            LOG_CONTROL("rate", "Rate", "Rate", U_HZ, flanger::RATE),
+            CONTROL("frac", "Time fraction", "Frac", U_BAR, flanger::FRACTION),
+            CONTROL("denom", "Time fraction denominator", "Denom", U_BAR, flanger::DENOMINATOR),
+            CONTROL("tempo", "Tempo", "Tempo", U_BPM, flanger::TEMPO),
+            SWITCH("sync", "Tempo sync", "Sync tempo", 0.0f),
+            COMBO("time", "Time computing method", "Method", 0, rate_type),
+            CONTROL("xfade", "Crossfade", "Xfade", U_PERCENT, flanger::CROSSFADE),
+            COMBO("xtype", "Crossfade Type", "Xfade type", 1, crossfade_type),
+            COMBO("type", "LFO type", "LFO type", 0, oscillator_functions),
+            COMBO("period", "LFO period", "LFO period", 0, oscillator_periods),
+            COMBO("atype", "Additional LFO type", "LFO 2 type", 0, additional_oscillator_functions),
+            COMBO("aperiod", "Additional LFO period", "LFO 2 period", 0, oscillator_periods),
+            CYC_CONTROL("iphase", "Initial phase", "LFO phase", U_DEG, flanger::PHASE),
+            CYC_CONTROL("dphase", "Phase difference between left and right", "Inter-phase", U_DEG, flanger::PHASE),
+            TRIGGER("reset", "Reset phase to initial", "Reset"),
             MESH("lfo", "LFO graph", 2, flanger::LFO_MESH_SIZE),
             MESH("alfo", "Additional LFO graph", 2, flanger::LFO_MESH_SIZE),
 
-            SWITCH("ms", "Mid/Side mode switch", 0.0f),
-            CONTROL("dmin", "Min depth", U_MSEC, flanger::DEPTH_MIN),
-            CONTROL("depth", "Depth", U_MSEC, flanger::DEPTH),
-            SWITCH("sphase", "Signal phase switch", 0.0f),
-            COMBO("ovs", "Oversampling", 0, oversampling_mode),
-            SWITCH("fb_on", "Feedback on", 0),
-            CONTROL("fgain", "Feedback gain", U_GAIN_AMP, flanger::FEEDBACK_GAIN),
-            CONTROL("fdelay", "Feedback delay", U_MSEC, flanger::FEEDBACK_DELAY),
-            SWITCH("fphase", "Feedback phase switch", 0.0f),
+            SWITCH("ms", "Mid/Side mode switch", "M/S mode", 0.0f),
+            CONTROL("dmin", "Min depth", "Min depth", U_MSEC, flanger::DEPTH_MIN),
+            CONTROL("depth", "Depth", "Depth", U_MSEC, flanger::DEPTH),
+            SWITCH("sphase", "Signal phase switch", "Phase", 0.0f),
+            COMBO("ovs", "Oversampling", "Oversampling", 0, oversampling_mode),
+            SWITCH("fb_on", "Feedback on", "Feed on", 0),
+            CONTROL("fgain", "Feedback gain", "Feed gain", U_GAIN_AMP, flanger::FEEDBACK_GAIN),
+            CONTROL("fdrive", "Feedback drive", "Feed drive", U_GAIN_AMP, flanger::FEEDBACK_DRIVE),
+            CONTROL("fdelay", "Feedback delay", "Feed delay", U_MSEC, flanger::FEEDBACK_DELAY),
+            SWITCH("fphase", "Feedback phase switch", "Feed phase", 0.0f),
 
             IN_GAIN,
             DRY_GAIN(GAIN_AMP_0_DB),
@@ -243,7 +245,7 @@ namespace lsp
             E_DUMP_STATE | E_INLINE_DISPLAY,
             flanger_mono_ports,
             "effects/flanger.xml",
-            NULL,
+            "effects/flanger",
             mono_plugin_port_groups,
             &flanger_bundle
         };
@@ -273,7 +275,7 @@ namespace lsp
             E_DUMP_STATE | E_INLINE_DISPLAY,
             flanger_stereo_ports,
             "effects/flanger.xml",
-            NULL,
+            "effects/flanger",
             stereo_plugin_port_groups,
             &flanger_bundle
         };
diff -pruN 1.2.21-5/modules/lsp-plugins-flanger/src/main/plug/flanger.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/src/main/plug/flanger.cpp
--- 1.2.21-5/modules/lsp-plugins-flanger/src/main/plug/flanger.cpp	2025-03-01 12:43:02.784612420 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-flanger/src/main/plug/flanger.cpp	2025-08-26 18:15:49.689945408 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-flanger
  * Created on: 25 нояб. 2020 г.
@@ -23,6 +23,7 @@
 #include <lsp-plug.in/common/debug.h>
 #include <lsp-plug.in/dsp/dsp.h>
 #include <lsp-plug.in/dsp-units/units.h>
+#include <lsp-plug.in/dsp-units/misc/quickmath.h>
 #include <lsp-plug.in/plug-fw/meta/func.h>
 #include <lsp-plug.in/shared/id_colors.h>
 #include <lsp-plug.in/shared/debug.h>
@@ -89,21 +90,6 @@ namespace lsp
             dspu::over_mode_t::OM_LANCZOS_8X24BIT
         };
 
-        inline float flanger::lerp(float o_value, float n_value, float k)
-        {
-            return o_value + (n_value - o_value) * k;
-        }
-
-        inline float flanger::qlerp(float o_value, float n_value, float k)
-        {
-            return o_value * sqrtf(1.0f - k) + n_value * sqrtf(k);
-        }
-
-        inline int32_t flanger::ilerp(int32_t o_value, int32_t n_value, float k)
-        {
-            return o_value + (n_value - o_value) * k;
-        }
-
         flanger::flanger(const meta::plugin_t *meta):
             Module(meta)
         {
@@ -128,11 +114,13 @@ namespace lsp
             nPhaseStep      = 0;
             nCrossfade      = 0;
             fCrossfade      = PHASE_COEFF;
-            pCrossfadeFunc  = qlerp;
+            pCrossfadeFunc  = dspu::qlerp;
             fOldFeedGain    = 0.0f;
             fFeedGain       = 0.0f;
-            nOldFeedDelay   = 0;
-            nFeedDelay      = 0;
+            fOldFeedDrive   = 0.0f;
+            fFeedDrive      = 0.0f;
+            fOldFeedDelay   = 0.0f;
+            fFeedDelay      = 0.0f;
             fOldInGain      = 0.0f;
             fInGain         = 0.0f;
             fOldDryGain     = 0.0f;
@@ -163,6 +151,7 @@ namespace lsp
             pOversampling   = NULL;
             pFeedOn         = NULL;
             pFeedGain       = NULL;
+            pFeedDrive      = NULL;
             pFeedDelay      = NULL;
             pFeedPhase      = NULL;
             pInGain         = NULL;
@@ -298,6 +287,7 @@ namespace lsp
             BIND_PORT(pOversampling);
             BIND_PORT(pFeedOn);
             BIND_PORT(pFeedGain);
+            BIND_PORT(pFeedDrive);
             BIND_PORT(pFeedDelay);
             BIND_PORT(pFeedPhase);
             BIND_PORT(pInGain);
@@ -412,14 +402,16 @@ namespace lsp
             sReset.submit(pReset->value());
 
             // Pre-compute several attributes
-            float in_gain           = pInGain->value();
-            float out_gain          = pOutGain->value();
-            bool bypass             = pBypass->value() >= 0.5f;
-            size_t srate            = fSampleRate * oversampling;
-            bool fb_on              = pFeedOn->value() >= 0.5f;
-            float feed_gain         = (fb_on) ? pFeedGain->value() : 0.0f;
-            bool mid_side           = (pMsSwitch != NULL) ? pMsSwitch->value() >= 0.5f : false;
-            float crossfade         = pCrossfade->value() * 0.01f;
+            const float in_gain     = pInGain->value();
+            const float out_gain    = pOutGain->value();
+            const bool bypass       = pBypass->value() >= 0.5f;
+            const size_t srate      = fSampleRate * oversampling;
+            const bool fb_on        = pFeedOn->value() >= 0.5f;
+            const float feed_gain   = (fb_on) ? pFeedGain->value() : 0.0f;
+            const float feed_drive  = pFeedDrive->value();
+            const float feed_phase  = pFeedPhase->value() >= 0.5f;
+            const bool mid_side     = (pMsSwitch != NULL) ? pMsSwitch->value() >= 0.5f : false;
+            const float crossfade   = pCrossfade->value() * 0.01f;
 
             // Compute LFO rate
             float rate              = pRate->value();
@@ -443,13 +435,15 @@ namespace lsp
             nOldPhaseStep           = nPhaseStep;
             nPhaseStep              = float(PHASE_MAX) * rate;
             nInitPhase              = (phase_to_int(pInitPhase->value()) - nPhaseStep * latency) & PHASE_MASK;
-            nOldFeedDelay           = nFeedDelay;
-            nFeedDelay              = dspu::millis_to_samples(srate, pFeedDelay->value());
+            fOldFeedDelay           = fFeedDelay;
+            fFeedDelay              = dspu::millis_to_samples(srate, pFeedDelay->value());
             nCrossfade              = float(PHASE_MAX) * crossfade * 2;
             fCrossfade              = PHASE_COEFF * (1.0f - crossfade);
-            pCrossfadeFunc          = (int(pCrossfadeType->value()) == 0) ? lerp : qlerp;
+            pCrossfadeFunc          = (int(pCrossfadeType->value()) == 0) ? dspu::lerp : dspu::qlerp;
             fOldFeedGain            = fFeedGain;
-            fFeedGain               = (pFeedPhase->value() >= 0.5f) ? -feed_gain : feed_gain;
+            fFeedGain               = (feed_phase) ? -feed_gain : feed_gain;
+            fOldFeedDrive           = fFeedDrive;
+            fFeedDrive              = (feed_phase) ? -feed_drive : feed_drive;
             fOldInGain              = fInGain;
             fInGain                 = in_gain;
 
@@ -614,8 +608,14 @@ namespace lsp
                     {
                         for (size_t i=0; i<up_to_do; ++i)
                         {
-                            float s                 = i * k_up_to_do;
-                            uint32_t i_phase        = (phase + ilerp(c->nOldPhaseShift, c->nPhaseShift, s)) & PHASE_MASK;
+                            const float s           = i * k_up_to_do;
+                            const float depth_min   = dspu::ilerp(nOldDepthMin, nDepthMin, s);
+                            const float depth       = dspu::ilerp(nOldDepth, nDepth, s);
+                            const float fb_delay    = dspu::lerp(fOldFeedDelay, fFeedDelay, s);
+                            const float fb_gain     = dspu::lerp(fOldFeedGain, fFeedGain, s);
+                            const float fb_drive    = dspu::lerp(fOldFeedDrive, fFeedDrive, s);
+
+                            uint32_t i_phase        = (phase + dspu::ilerp(c->nOldPhaseShift, c->nPhaseShift, s)) & PHASE_MASK;
                             float o_phase           = i_phase * fCrossfade;
                             float c_phase           = o_phase * c->fLfoArg[0] + c->fLfoArg[1];
                             float c_func            = c->pLfoFunc(c_phase);
@@ -624,14 +624,11 @@ namespace lsp
                             c->fOutPhase            = o_phase;
                             c->fOutShift            = c_func;
 
-                            size_t c_shift          =
-                                ilerp(nOldDepthMin, nDepthMin, s) +
-                                ilerp(nOldDepth, nDepth, s) * c_func;
-                            size_t c_fbshift        =
-                                c_shift +
-                                ilerp(nOldFeedDelay, nFeedDelay, s);
-                            float c_dsample         = c->sRing.get(c_shift);
-                            float c_fbsample        = c->sFeedback.get(c_fbshift);
+                            float c_shift           = depth_min + depth * c_func;
+                            float c_fbshift         = c_shift + fb_delay;
+                            float c_dsample         = c->sRing.lerp_get(c_shift);
+                            float c_fbsample        = c->sFeedback.lerp_get(c_fbshift);
+                            float c_rsample;
 
                             // Perform cross-fade if required
                             if (i_phase < nCrossfade)
@@ -639,23 +636,33 @@ namespace lsp
                                 float mix               = float(i_phase) / float(nCrossfade);
                                 i_phase                 = i_phase + PHASE_MAX;
                                 c_phase                 = i_phase * fCrossfade * c->fLfoArg[0] + c->fLfoArg[1];
-                                c_shift                 =
-                                    ilerp(nOldDepthMin, nDepthMin, s) +
-                                    ilerp(nOldDepth, nDepth, s) * c->pLfoFunc(c_phase);
-                                c_fbshift               =
-                                    c_shift +
-                                    ilerp(nOldFeedDelay, nFeedDelay, s);
-                                c_dsample               = pCrossfadeFunc(c->sRing.get(c_shift), c_dsample, mix);
-                                c_fbsample              = pCrossfadeFunc(c->sFeedback.get(c_fbshift), c_fbsample, mix);
+                                c_shift                 = depth_min + depth * c->pLfoFunc(c_phase);
+                                c_fbshift               = c_shift + fb_delay;
+
+                                float x_dsample         = c->sRing.lerp_get(c_shift);
+                                float x_fbsample        = c->sFeedback.lerp_get(c_fbshift);
+
+                                // We always compute feedback using linear function to avoid signal blowing up
+                                float fb_dsample        = dspu::lerp(x_dsample, c_dsample, mix);
+                                float fb_fbsample       = dspu::lerp(x_fbsample, c_fbsample, mix);
+                                float fb_rsample        = fb_dsample + fb_fbsample * fb_gain;
+                                c->sFeedback.append(vBuffer[i] * fb_drive + fb_rsample);
+
+                                c_dsample               = pCrossfadeFunc(x_dsample, c_dsample, mix);
+                                c_fbsample              = pCrossfadeFunc(x_fbsample, c_fbsample, mix);
+                                c_rsample               = c_dsample + c_fbsample * fb_gain;
                             }
+                            else
+                            {
+                                // Do the final processing
+                                c_rsample               = c_dsample + c_fbsample * fb_gain;
+                                c->sFeedback.append(vBuffer[i] * fb_drive + c_rsample);
 
-                            // Do the final processing
-                            float c_rsample         = c_dsample + c_fbsample * lerp(fOldFeedGain, fFeedGain, s);
+                            }
                             vBuffer[i]              = c_rsample;
-                            c->sFeedback.append(c_rsample);
 
                             // Update the phase
-                            phase                   = (phase + ilerp(nOldPhaseStep, nPhaseStep, s)) & PHASE_MASK;
+                            phase                   = (phase + dspu::ilerp(nOldPhaseStep, nPhaseStep, s)) & PHASE_MASK;
                         }
                     }
                     else
@@ -664,10 +671,10 @@ namespace lsp
                         for (size_t i=0; i<to_do; ++i)
                         {
                             float s                 = i * k_up_to_do;
-                            uint32_t i_phase        = (phase + ilerp(c->nOldPhaseShift, c->nPhaseShift, s)) & PHASE_MASK;
+                            uint32_t i_phase        = (phase + dspu::ilerp(c->nOldPhaseShift, c->nPhaseShift, s)) & PHASE_MASK;
                             float o_phase           = i_phase * fCrossfade;
                             c->fOutPhase            = o_phase;
-                            phase                   = (phase + ilerp(nOldPhaseStep, nPhaseStep, s)) & PHASE_MASK;
+                            phase                   = (phase + dspu::ilerp(nOldPhaseStep, nPhaseStep, s)) & PHASE_MASK;
                         }
 
                         c->fOutShift            = 0.0f;
@@ -732,7 +739,8 @@ namespace lsp
                 nOldDepth           = nDepth;
                 nOldPhaseStep       = nPhaseStep;
                 fOldFeedGain        = fFeedGain;
-                nOldFeedDelay       = nFeedDelay;
+                fOldFeedDrive       = fFeedDrive;
+                fOldFeedDelay       = fFeedDelay;
                 fOldInGain          = fInGain;
                 fOldDryGain         = fDryGain;
                 fOldWetGain         = fWetGain;
@@ -954,8 +962,10 @@ namespace lsp
             v->write("pCrossfadeFunc", pCrossfadeFunc);
             v->write("fOldFeedGain", fOldFeedGain);
             v->write("fFeedGain", fFeedGain);
-            v->write("nOldFeedDelay", nOldFeedDelay);
-            v->write("nFeedDelay", nFeedDelay);
+            v->write("fOldFeedDrive", fOldFeedDrive);
+            v->write("fFeedDrive", fFeedDrive);
+            v->write("fOldFeedDelay", fOldFeedDelay);
+            v->write("fFeedDelay", fFeedDelay);
             v->write("fOldInGain", fOldInGain);
             v->write("fInGain", fInGain);
             v->write("fOldDryGain", fOldDryGain);
@@ -985,6 +995,7 @@ namespace lsp
             v->write("pOversampling", pOversampling);
             v->write("pFeedOn", pFeedOn);
             v->write("pFeedGain", pFeedGain);
+            v->write("pFeedDrive", pFeedDrive);
             v->write("pFeedDelay", pFeedDelay);
             v->write("pFeedPhase", pFeedPhase);
             v->write("pInGain", pInGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-gate/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-gate/.github/workflows/build.yml	2025-03-01 12:43:05.516596021 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/.github/workflows/build.yml	2025-08-26 18:15:51.869924252 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-gate/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-gate/CHANGELOG	2025-03-01 12:43:05.516596021 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/CHANGELOG	2025-08-26 18:15:51.869924252 +0000
@@ -2,6 +2,15 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.30 ===
+* Added audio pre-mixing controls.
+* Added left/right and mid/side linking in the UI.
+* Updated build scripts and dependencies.
+
+=== 1.0.29 ===
+* Added overlay support for Sidechain and Mix.
+* Updated build scripts and dependencies.
+
 === 1.0.28 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-gate/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-gate/dependencies.mk	2025-03-01 12:43:05.516596021 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/dependencies.mk	2025-08-26 18:15:51.869924252 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/include/private/plugins/gate.h 1.2.23-0ubuntu1/modules/lsp-plugins-gate/include/private/plugins/gate.h
--- 1.2.21-5/modules/lsp-plugins-gate/include/private/plugins/gate.h	2025-03-01 12:43:05.516596021 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/include/private/plugins/gate.h	2025-08-26 18:15:51.869924252 +0000
@@ -91,6 +91,32 @@ namespace lsp
                     S_ALL       = S_CURVE | S_HYST
                 };
 
+                typedef struct premix_t
+                {
+                    float                   fInToSc;            // Input -> Sidechain mix
+                    float                   fInToLink;          // Input -> Link mix
+                    float                   fLinkToIn;          // Link -> Input mix
+                    float                   fLinkToSc;          // Link -> Sidechain mix
+                    float                   fScToIn;            // Sidechain -> Input mix
+                    float                   fScToLink;          // Sidechain -> Link mix
+
+                    float                  *vIn[2];             // Input buffer
+                    float                  *vOut[2];            // Output buffer
+                    float                  *vSc[2];             // Sidechain buffer
+                    float                  *vLink[2];           // Link buffer
+
+                    float                  *vTmpIn[2];          // Replacement buffer for input
+                    float                  *vTmpLink[2];        // Replacement buffer for link
+                    float                  *vTmpSc[2];          // Replacement buffer for sidechain
+
+                    plug::IPort            *pInToSc;            // Input -> Sidechain mix
+                    plug::IPort            *pInToLink;          // Input -> Link mix
+                    plug::IPort            *pLinkToIn;          // Link -> Input mix
+                    plug::IPort            *pLinkToSc;          // Link -> Sidechain mix
+                    plug::IPort            *pScToIn;            // Sidechain -> Input mix
+                    plug::IPort            *pScToLink;          // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct channel_t
                 {
                     dspu::Bypass            sBypass;            // Bypass
@@ -169,6 +195,8 @@ namespace lsp
                 bool                    bUISync;        // UI sync
                 core::IDBuffer         *pIDisplay;      // Inline display buffer
 
+                premix_t                sPremix;        // Pre-mix settings
+
                 plug::IPort            *pBypass;        // Bypass port
                 plug::IPort            *pInGain;        // Input gain
                 plug::IPort            *pOutGain;       // Output gain
@@ -186,6 +214,8 @@ namespace lsp
 
             protected:
                 void                do_destroy();
+                void                update_premix();
+                void                premix_channel(uint32_t channel, float * & in, float * & out, float * & sc, float * & link, size_t count);
                 uint32_t            decode_sidechain_type(uint32_t sc) const;
                 inline float       *select_buffer(const channel_t & c, float *in, float *sc, float *shm);
 
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-gate/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-gate/make/tools.mk	2025-03-01 12:43:05.516596021 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/make/tools.mk	2025-08-26 18:15:51.869924252 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-gate/modules.mk
--- 1.2.21-5/modules/lsp-plugins-gate/modules.mk	2025-03-01 12:43:05.516596021 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/modules.mk	2025-08-26 18:15:51.869924252 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-gate/project.mk
--- 1.2.21-5/modules/lsp-plugins-gate/project.mk	2025-03-01 12:43:05.516596021 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/project.mk	2025-08-26 18:15:51.869924252 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Gate Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.28
+ARTIFACT_VERSION            = 1.0.30
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-gate/res/doc/screenshots/gate_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/doc/screenshots/gate_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gate/res/doc/screenshots/gate_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/doc/screenshots/gate_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gate/res/doc/screenshots/gate_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/doc/screenshots/gate_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gate/res/doc/screenshots/gate_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/doc/screenshots/gate_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gate/res/doc/screenshots/sc_gate_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/doc/screenshots/sc_gate_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gate/res/doc/screenshots/sc_gate_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/doc/screenshots/sc_gate_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gate/res/doc/screenshots/sc_gate_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/doc/screenshots/sc_gate_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gate/res/doc/screenshots/sc_gate_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/doc/screenshots/sc_gate_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/lr.xml
--- 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/lr.xml	2025-03-01 12:43:05.524595973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/lr.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,502 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv_l"/>
-						<mesh id="icg_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilv_r"/>
-						<mesh id="ocg_l" width="2" color="left" visibility=":olv_l"/>
-						<mesh id="ocg_r" width="2" color="right" visibility=":olv_r"/>
-						<mesh id="scg_l" width="2" color="sidechain_1" visibility=":slv_l"/>
-						<mesh id="scg_r" width="2" color="sidechain_2" visibility=":slv_r"/>
-						<mesh id="evg_l" width="2" color="envelope_1" visibility=":elv_l"/>
-						<mesh id="evg_r" width="2" color="envelope_2" visibility=":elv_r"/>
-						<mesh id="grg_l" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_l"/>
-						<mesh id="grg_r" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_r"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:with ox="1" oy="0">
-							<marker id="gzs_l" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="gzs_r" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="hzs_l" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_l"/>
-							<marker id="hzs_r" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_r"/>
-							<marker id="gt_l" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="gt_r" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold"  lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="hts_l" width="2" color="threshold" lcolor="threshold" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_l"/>
-							<marker id="hts_r" width="2" color="threshold" lcolor="threshold" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_r"/>
-						</ui:with>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_l" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_r" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_l" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_r" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_l" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_r" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_l" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_r" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.gating">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="hg_l" width="3" color="left" smooth="true"/>
-					<mesh id="cg_l" width="3" color="left" smooth="true"/>
-					<mesh id="hg_r" width="3" color="right" smooth="true"/>
-					<mesh id="cg_r" width="3" color="right" smooth="true"/>
-					<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left"/>
-					<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right"/>
-
-					<!-- Markers -->
-					<marker id="gzs_l" color="left"/>
-					<marker id="gzs_r" color="right"/>
-					<marker id="hzs_l" color="left" visibility=":gh_l"/>
-					<marker id="hzs_r" color="right" visibility=":gh_r"/>
-					<marker id="gt_l" editable="true" width="2" pointer="hsize" color="attack_1" hcolor="attack_1"/>
-					<marker id="gt_r" editable="true" width="2" pointer="hsize" color="attack_2" hcolor="attack_2"/>
-					<marker id="hts_l" color="attack_1" visibility=":gh_l"/>
-					<marker id="hts_r" color="attack_2" visibility=":gh_r"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="ilv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="olv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left_in"/>
-					<ledchannel id="ilm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left"/>
-					<ledchannel id="olm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="scr_l" scolor="left"/></cell>
-					<cell rows="2"><knob id="sla_l" scolor="left"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1" pad.t="4">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sci_l" />
-								<combo id="scm_l" />
-								<combo id="scs_l" />
-								<button id="scl_l" height="22" text="labels.listen" ui:inject="Button_left"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_l" pad.h="6" bright="(:shpm_l igt 0) ? 1 : 0.75" bg.bright="(:shpm_l igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_l" pad.h="6" bright="(:slpm_l igt 0) ? 1 : 0.75" bg.bright="(:slpm_l igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf_l" size="20" scolor="(:shpm_l igt 0) ? 'left' : 'left_inactive'" bg.bright="(:shpm_l igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_l" size="20" scolor="(:slpm_l igt 0) ? 'left' : 'left_inactive'" bg.bright="(:slpm_l igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp_l" sline="true" width.min="48"/>
-					<value id="scr_l" sline="true"/>
-					<value id="sla_l" sline="true"/>
-					<value id="shpf_l" sline="true" bright="(:shpm_l igt 0) ? 1 : 0.75" bg.bright="(:shpm_l igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf_l" sline="true" bright="(:slpm_l igt 0) ? 1 : 0.75" bg.bright="(:slpm_l igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="2"><knob id="scp_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="scr_r" scolor="right"/></cell>
-					<cell rows="2"><knob id="sla_r" scolor="right"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1" pad.t="4">
-							<ui:with pad.h="6" pad.b="4" hfill="true" >
-								<combo id="sci_r" />
-								<combo id="scm_r" />
-								<combo id="scs_r" />
-								<button id="scl_r" height="22" text="labels.listen" ui:inject="Button_right"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_r" pad.h="6" bright="(:shpm_r igt 0) ? 1 : 0.75" bg.bright="(:shpm_r igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_r" pad.h="6" bright="(:slpm_r igt 0) ? 1 : 0.75" bg.bright="(:slpm_r igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 8 -->
-					<knob id="shpf_r" size="20" scolor="(:shpm_r igt 0) ? 'right' : 'right_inactive'" bg.bright="(:shpm_r igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_r" size="20" scolor="(:slpm_r igt 0) ? 'right' : 'right_inactive'" bg.bright="(:slpm_r igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 9 -->
-					<ui:with sline="true">
-						<value id="scp_r"/>
-						<value id="scr_r"/>
-						<value id="sla_r"/>
-						<value id="shpf_r" bright="(:shpm_r igt 0) ? 1 : 0.75" bg.bright="(:shpm_r igt 0) ? 1 : :const_bg_darken"/>
-						<value id="slpf_r" bright="(:slpm_r igt 0) ? 1 : 0.75" bg.bright="(:slpm_r igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.gate" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="9" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" vreduce="true">
-						<label text="labels.reduction"/>
-						<label text="labels.makeup" width.min="41"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4" vreduce="true">
-						<label text="labels.attack"/>
-						<label text="labels.release"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.curve" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.hysteresis" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep />
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3" cols="2">
-						<grid rows="3" cols="2">
-							<knob id="gr_l" scolor="left"/>
-							<knob id="mk_l" scolor="left"/>
-							<value id="gr_l" sline="true" width="48"/>
-							<value id="mk_l" sline="true" width="48"/>
-							<cell cols="2"><button id="gh_l" height="22" hfill="true" pad.h="6" text="labels.hysteresis" ui:inject="Button_left"/></cell>
-						</grid>
-					</cell>
-
-					<cell rows="2"><knob id="at_l" scolor="attack"/></cell>
-					<cell rows="2"><knob id="rt_l" scolor="release"/></cell>
-
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.zone"/>
-						<label text="labels.thresh_old" bright="(:gh_l igt 0) ? 1 : 0.75" bg.bright="(:gh_l igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.zone" bright="(:gh_l igt 0) ? 1 : 0.75" bg.bright="(:gh_l igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold_l" pad.h="6" /></cell>
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.signal.dry"/>
-						<label text="labels.signal.wet"/>
-					</ui:with>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.t="4" pad.h="6"/>
-
-
-					<!-- row 4 -->
-
-					<knob id="gt_l" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="gz_l" scolor="left" size="20" pad.h="6" pad.v="4"/>
-					<knob id="ht_l" scolor="(:gh_l igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:gh_l igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="hz_l" scolor="(:gh_l igt 0) ? 'left' : 'left_inactive'" bg.bright="(:gh_l igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_l" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt_l" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw_l" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 5 -->
-					<ui:with width.min="32" pad.b="4">
-						<value id="at_l"/>
-						<value id="rt_l"/>
-						<value id="gt_l"/>
-						<value id="gz_l"/>
-						<value id="ht_l" bright="(:gh_l igt 0) ? 1 : 0.75" bg.bright="(:gh_l igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hz_l" bright="(:gh_l igt 0) ? 1 : 0.75" bg.bright="(:gh_l igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hold_l"/>
-						<value id="cdr_l"/>
-						<value id="cwt_l"/>
-						<value id="cdw_l"/>
-					</ui:with>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="3" cols="2">
-						<grid rows="3" cols="2">
-							<knob id="gr_r" scolor="right"/>
-							<knob id="mk_r" scolor="right"/>
-							<value id="gr_r" sline="true" width="48"/>
-							<value id="mk_r" sline="true" width="48"/>
-							<cell cols="2"><button id="gh_r" height="22" hfill="true" pad.h="6" text="labels.hysteresis" ui:inject="Button_right"/></cell>
-						</grid>
-					</cell>
-
-					<cell rows="2"><knob id="at_r" scolor="attack"/></cell>
-					<cell rows="2"><knob id="rt_r" scolor="release"/></cell>
-
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.zone"/>
-						<label text="labels.thresh_old" bright="(:gh_r igt 0) ? 1 : 0.75" bg.bright="(:gh_r igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.zone" bright="(:gh_r igt 0) ? 1 : 0.75" bg.bright="(:gh_r igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold_r" pad.h="6" /></cell>
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.signal.dry"/>
-						<label text="labels.signal.wet"/>
-					</ui:with>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.t="4" pad.h="6"/>
-
-					<!-- row 8 -->
-
-					<knob id="gt_r" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="gz_r" scolor="right" size="20" pad.h="6" pad.v="4"/>
-					<knob id="ht_r" scolor="(:gh_r igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:gh_r igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="hz_r" scolor="(:gh_r igt 0) ? 'right' : 'right_inactive'" bg.bright="(:gh_r igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_r" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt_r" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw_r" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 9 -->
-					<ui:with width.min="32" pad.b="4">
-						<value id="at_r"/>
-						<value id="rt_r"/>
-						<value id="gt_r"/>
-						<value id="gz_r"/>
-						<value id="ht_r" bright="(:gh_r igt 0) ? 1 : 0.75" bg.bright="(:gh_r igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hz_r" bright="(:gh_r igt 0) ? 1 : 0.75" bg.bright="(:gh_r igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hold_r"/>
-						<value id="cdr_r"/>
-						<value id="cwt_r"/>
-						<value id="cdw_r"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/mono.xml
--- 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/mono.xml	2025-03-01 12:43:05.524595973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/mono.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,377 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg" width="0" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilv"/>
-						<mesh id="ocg" width="2" color="left" visibility=":olv"/>
-						<mesh id="scg" width="2" color="sidechain_1" visibility=":slv"/>
-						<mesh id="evg" width="2" color="envelope_1" visibility=":elv"/>
-						<mesh id="grg" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:with ox="1" oy="0">
-							<marker id="gzs" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="hzs" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh"/>
-							<marker id="gt" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="hts_l" width="2" color="threshold" lcolor="threshold" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh"/>
-						</ui:with>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv" height="10" width="22" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv" height="10" width="22" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv" height="10" width="22" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.gating">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="hg" width="3" color="graph_mesh" smooth="true" visibility=":gh"/>
-					<mesh id="cg" width="3" color="graph_mesh" smooth="true"/>
-					<dot x.id="elm" y.id="clm" color="graph_mesh" bcolor="graph_mesh"/>
-
-					<!-- Markers -->
-					<marker id="gzs" color="kscale"/>
-					<marker id="hzs" color="kscale" visibility=":gh"/>
-					<marker id="gt" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="hts" color="threshold" visibility=":gh"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv" height="10" width="22" ui:inject="Button_mono" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv" height="10" width="22" ui:inject="Button_mono" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
-					<cell rows="3">
-						<vbox>
-							<vbox vfill="false">
-								<ui:with pad.h="6" pad.b="4" hfill="true">
-									<combo id="sci" />
-									<combo id="scm" />
-								</ui:with>
-							</vbox>
-							<hsep fill="true" pad.v="2" reduce="true" bg.color="bg"/>
-							<button id="scl" height="22" pad.h="6" hfill="true" text="labels.listen" ui:inject="Button_cyan"/>
-						</vbox>
-					</cell>
-					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp" sline="true" width.min="48"/>
-					<value id="scr" sline="true"/>
-					<value id="sla" sline="true"/>
-					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.gate" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="5" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" vreduce="true">
-						<label text="labels.reduction"/>
-						<label text="labels.makeup" width.min="41"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4" vreduce="true">
-						<label text="labels.attack"/>
-						<label text="labels.release"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.curve" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.hysteresis" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep />
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3" cols="2">
-						<grid rows="3" cols="2">
-							<knob id="gr" scolor="kscale"/>
-							<knob id="mk" scolor="kscale"/>
-							<value id="gr" sline="true" width="48"/>
-							<value id="mk" sline="true" width="48"/>
-							<cell cols="2"><button id="gh" height="22" hfill="true" pad.h="6" text="labels.hysteresis" ui:inject="Button_cyan"/></cell>
-						</grid>
-					</cell>
-
-					<cell rows="2"><knob id="at" scolor="attack"/></cell>
-					<cell rows="2"><knob id="rt" scolor="release"/></cell>
-
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.zone"/>
-						<label text="labels.thresh_old" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.zone" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold" pad.h="6" /></cell>
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.signal.dry"/>
-						<label text="labels.signal.wet"/>
-					</ui:with>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.t="4" pad.h="6"/>
-
-					<!-- row 4 -->
-
-					<knob id="gt" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="gz" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="ht" scolor="(:gh igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="hz" scolor="(:gh igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 5 -->
-					<ui:with width.min="32" pad.b="4">
-						<value id="at"/>
-						<value id="rt"/>
-						<value id="gt"/>
-						<value id="gz"/>
-						<value id="ht" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hz" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hold"/>
-						<value id="cdr"/>
-						<value id="cwt"/>
-						<value id="cdw"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/ms.xml
--- 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/ms.xml	2025-03-01 12:43:05.524595973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/ms.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,503 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg_m" width="0" color="mid_in" fcolor="mid_in" fcolor.a="0.8" fill="true" visibility=":ilv_m"/>
-						<mesh id="icg_s" width="0" color="side_in" fcolor="side_in" fcolor.a="0.8" fill="true" visibility=":ilv_s"/>
-						<mesh id="ocg_m" width="2" color="mid" visibility=":olv_m"/>
-						<mesh id="ocg_s" width="2" color="side" visibility=":olv_s"/>
-						<mesh id="scg_m" width="2" color="sidechain_1" visibility=":slv_m"/>
-						<mesh id="scg_s" width="2" color="sidechain_2" visibility=":slv_s"/>
-						<mesh id="evg_m" width="2" color="envelope_1" visibility=":elv_m"/>
-						<mesh id="evg_s" width="2" color="envelope_2" visibility=":elv_s"/>
-						<mesh id="grg_m" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_m"/>
-						<mesh id="grg_s" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_s"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:with ox="1" oy="0">
-							<marker id="gzs_m" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="gzs_s" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="hzs_m" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_m"/>
-							<marker id="hzs_s" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_s"/>
-							<marker id="gt_m" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="gt_s" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold"  lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="hts_m" width="2" color="threshold" lcolor="threshold" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_m"/>
-							<marker id="hts_s" width="2" color="threshold" lcolor="threshold" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_s"/>
-						</ui:with>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<button id="msl" height="22" width="48" text="labels.ms_listen" pad.v="4" ui:inject="Button_yellow" pad.h="6"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_m" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_s" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_m" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_s" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_m" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_s" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_m" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_s" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_m" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_s" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_m" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_s" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.gating">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="hg_m" width="3" color="mid" smooth="true"/>
-					<mesh id="cg_m" width="3" color="mid" smooth="true"/>
-					<mesh id="hg_s" width="3" color="side" smooth="true"/>
-					<mesh id="cg_s" width="3" color="side" smooth="true"/>
-					<dot x.id="elm_m" y.id="clm_m" color="mid" bcolor="mid"/>
-					<dot x.id="elm_s" y.id="clm_s" color="side" bcolor="side"/>
-
-					<!-- Markers -->
-					<marker id="gzs_m" color="mid"/>
-					<marker id="gzs_s" color="side"/>
-					<marker id="hzs_m" color="mid" visibility=":gh_m"/>
-					<marker id="hzs_s" color="side" visibility=":gh_s"/>
-					<marker id="gt_m" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="gt_s" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="hts_m" color="threshold" visibility=":gh_m"/>
-					<marker id="hts_s" color="threshold" visibility=":gh_s"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_m" size="10" ui:inject="Button_mid" led="true"/>
-						<button id="ilv_s" size="10" ui:inject="Button_side" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_m" size="10" ui:inject="Button_mid" led="true"/>
-						<button id="olv_s" size="10" ui:inject="Button_side" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm_m" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid_in"/>
-					<ledchannel id="ilm_s" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="side_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm_m" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid"/>
-					<ledchannel id="olm_s" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="side"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="scr_m" scolor="mid"/></cell>
-					<cell rows="2"><knob id="sla_m" scolor="mid"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1" pad.t="4">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sci_m" />
-								<combo id="scm_m"/>
-								<combo id="scs_m"/>
-								<button id="scl_m" height="22" text="labels.listen" ui:inject="Button_mid"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_m" pad.h="6" bright="(:shpm_m igt 0) ? 1 : 0.75" bg.bright="(:shpm_m igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_m" pad.h="6" bright="(:slpm_m igt 0) ? 1 : 0.75" bg.bright="(:slpm_m igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf_m" size="20" scolor="(:shpm_m igt 0) ? 'mid' : 'mid_inactive'" bg.bright="(:shpm_m igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_m" size="20" scolor="(:slpm_m igt 0) ? 'mid' : 'mid_inactive'" bg.bright="(:slpm_m igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp_m" sline="true" width.min="48"/>
-					<value id="scr_m" sline="true"/>
-					<value id="sla_m" sline="true"/>
-					<value id="shpf_m" sline="true" bright="(:shpm_m igt 0) ? 1 : 0.75" bg.bright="(:shpm_m igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf_m" sline="true" bright="(:slpm_m igt 0) ? 1 : 0.75" bg.bright="(:slpm_m igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="2"><knob id="scp_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="scr_s" scolor="side"/></cell>
-					<cell rows="2"><knob id="sla_s" scolor="side"/></cell>
-					<cell rows="3">
-						<vbox fill="false" spacing="1" pad.t="4">
-							<ui:with pad.h="6" pad.b="4" hfill="true">
-								<combo id="sci_s" />
-								<combo id="scm_s"/>
-								<combo id="scs_s"/>
-								<button id="scl_s" height="22" text="labels.listen" ui:inject="Button_side"/>
-							</ui:with>
-						</vbox>
-					</cell>
-					<combo id="shpm_s" pad.h="6" bright="(:shpm_s igt 0) ? 1 : 0.75" bg.bright="(:shpm_s igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm_s" pad.h="6" bright="(:slpm_s igt 0) ? 1 : 0.75" bg.bright="(:slpm_s igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 8 -->
-					<knob id="shpf_s" size="20" scolor="(:shpm_s igt 0) ? 'side' : 'side_inactive'" bg.bright="(:shpm_s igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf_s" size="20" scolor="(:slpm_s igt 0) ? 'side' : 'side_inactive'" bg.bright="(:slpm_s igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 9 -->
-					<ui:with sline="true">
-						<value id="scp_s"/>
-						<value id="scr_s"/>
-						<value id="sla_s"/>
-						<value id="shpf_s" bright="(:shpm_s igt 0) ? 1 : 0.75" bg.bright="(:shpm_s igt 0) ? 1 : :const_bg_darken"/>
-						<value id="slpf_s" bright="(:slpm_s igt 0) ? 1 : 0.75" bg.bright="(:slpm_s igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.gate" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="9" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" vreduce="true">
-						<label text="labels.reduction"/>
-						<label text="labels.makeup" width.min="41"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4" vreduce="true">
-						<label text="labels.attack"/>
-						<label text="labels.release"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.curve" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.hysteresis" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3" cols="2">
-						<grid rows="3" cols="2">
-							<knob id="gr_m" scolor="mid"/>
-							<knob id="mk_m" scolor="mid"/>
-							<value id="gr_m" sline="true" width="48"/>
-							<value id="mk_m" sline="true" width="48"/>
-							<cell cols="2"><button id="gh_m" height="22" hfill="true" pad.h="6" text="labels.hysteresis" ui:inject="Button_mid"/></cell>
-						</grid>
-					</cell>
-
-					<cell rows="2"><knob id="at_m" scolor="attack"/></cell>
-					<cell rows="2"><knob id="rt_m" scolor="release"/></cell>
-
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.zone"/>
-						<label text="labels.thresh_old" bright="(:gh_m igt 0) ? 1 : 0.75" bg.bright="(:gh_m igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.zone" bright="(:gh_m igt 0) ? 1 : 0.75" bg.bright="(:gh_m igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold_m" pad.h="6"/></cell>
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.signal.dry"/>
-						<label text="labels.signal.wet"/>
-					</ui:with>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.t="4" pad.h="6"/>
-
-					<!-- row 4 -->
-
-					<knob id="gt_m" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="gz_m" scolor="mid" size="20" pad.h="6" pad.v="4"/>
-					<knob id="ht_m" scolor="(:gh_m igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:gh_m igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="hz_m" scolor="(:gh_m igt 0) ? 'mid' : 'mid_inactive'" bg.bright="(:gh_m igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_m" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt_m" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw_m" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 5 -->
-					<ui:with width.min="32" pad.b="4">
-						<value id="at_m"/>
-						<value id="rt_m"/>
-						<value id="gt_m"/>
-						<value id="gz_m"/>
-						<value id="ht_m" bright="(:gh_m igt 0) ? 1 : 0.75" bg.bright="(:gh_m igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hz_m" bright="(:gh_m igt 0) ? 1 : 0.75" bg.bright="(:gh_m igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hold_m"/>
-						<value id="cdr_m"/>
-						<value id="cwt_m"/>
-						<value id="cdw_m"/>
-					</ui:with>
-
-					<!-- row 6 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep/>
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 7 -->
-					<cell rows="3" cols="2">
-						<grid rows="3" cols="2">
-							<knob id="gr_s" scolor="side"/>
-							<knob id="mk_s" scolor="side"/>
-							<value id="gr_s" sline="true" width="48"/>
-							<value id="mk_s" sline="true" width="48"/>
-							<cell cols="2"><button id="gh_s" height="22" hfill="true" pad.h="6" text="labels.hysteresis" ui:inject="Button_side"/></cell>
-						</grid>
-					</cell>
-
-					<cell rows="2"><knob id="at_s" scolor="attack"/></cell>
-					<cell rows="2"><knob id="rt_s" scolor="release"/></cell>
-
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.zone"/>
-						<label text="labels.thresh_old" bright="(:gh_s igt 0) ? 1 : 0.75" bg.bright="(:gh_s igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.zone" bright="(:gh_s igt 0) ? 1 : 0.75" bg.bright="(:gh_s igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold_s" pad.h="6"/></cell>
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.signal.dry"/>
-						<label text="labels.signal.wet"/>
-					</ui:with>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.t="4" pad.h="6"/>
-
-					<!-- row 8 -->
-
-					<knob id="gt_s" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="gz_s" scolor="side" size="20" pad.h="6" pad.v="4"/>
-					<knob id="ht_s" scolor="(:gh_s igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:gh_s igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="hz_s" scolor="(:gh_s igt 0) ? 'side' : 'side_inactive'" bg.bright="(:gh_s igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr_s" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt_s" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw_s" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 9 -->
-					<ui:with width.min="32" pad.b="4">
-						<value id="at_s"/>
-						<value id="rt_s"/>
-						<value id="gt_s"/>
-						<value id="gz_s"/>
-						<value id="ht_s" bright="(:gh_s igt 0) ? 1 : 0.75" bg.bright="(:gh_s igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hz_s" bright="(:gh_s igt 0) ? 1 : 0.75" bg.bright="(:gh_s igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hold_s"/>
-						<value id="cdr_s"/>
-						<value id="cwt_s"/>
-						<value id="cdw_s"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/stereo.xml	2025-03-01 12:43:05.524595973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single/stereo.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,398 +0,0 @@
-<plugin resizable="true">
-	<vbox>
-		<!-- Top part -->
-		<grid rows="1" cols="5" hspacing="4" expand="true">
-			<vbox expand="true">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<graph width.min="496" height.min="222" expand="true" fill="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<ui:for id="t" first="0" last="4" step="1">
-							<ui:attributes ox="0" oy="1">
-								<marker v="${t}.25" color="graph_alt_2"/>
-								<marker v="${t}.5" color="graph_alt_1"/>
-								<marker v="${t}.75" color="graph_alt_2"/>
-							</ui:attributes>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_alt_1">
-							<marker v="+12 db"/>
-							<marker v="-12 db"/>
-							<marker v="-36 db"/>
-							<marker v="-60 db"/>
-						</ui:attributes>
-
-						<!-- Yellow grid -->
-						<ui:for id="t" first="1" last="4" step="1">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-						<ui:attributes ox="1" oy="0" color="graph_sec">
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-							<marker v="-48 db"/>
-						</ui:attributes>
-
-						<!-- Meshes -->
-						<mesh id="icg_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilv_l"/>
-						<mesh id="icg_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilv_r"/>
-						<mesh id="ocg_l" width="2" color="left" visibility=":olv_l"/>
-						<mesh id="ocg_r" width="2" color="right" visibility=":olv_r"/>
-						<mesh id="scg_l" width="2" color="sidechain_1" visibility=":slv_l"/>
-						<mesh id="scg_r" width="2" color="sidechain_2" visibility=":slv_r"/>
-						<mesh id="evg_l" width="2" color="envelope_1" visibility=":elv_l"/>
-						<mesh id="evg_r" width="2" color="envelope_2" visibility=":elv_r"/>
-						<mesh id="grg_l" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_l"/>
-						<mesh id="grg_r" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_r"/>
-
-						<!-- Boundaries -->
-						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
-						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
-
-						<!-- Axis -->
-						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
-						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
-
-						<!-- Markers -->
-						<ui:with ox="1" oy="0">
-							<marker id="gzs" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
-							<marker id="hzs" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh"/>
-							<marker id="gt" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
-							<marker id="hts_l" width="2" color="threshold" lcolor="threshold" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh"/>
-						</ui:with>
-
-						<!-- Text -->
-						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
-						<ui:for id="t" first="0" last="4" step="1">
-							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
-							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
-						</ui:for>
-						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
-							<text y="12 db" text="+12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="-48"/>
-							<text y="-60 db" text="-60"/>
-							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
-						</ui:attributes>
-					</graph>
-				</group>
-				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
-				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
-					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
-					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
-					<void hexpand="true"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<button id="ssplit" text="labels.stereo_split" size="22" pad.v="4" ui:inject="Button_blue" pad.h="2"/>
-					<vsep pad.h="2" bg.color="bg" reduce="true"/>
-					<shmlink id="link" pad.l="2"/>
-				</hbox>
-			</vbox>
-
-			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.sc.SC" padding="4"/>
-					<label text="labels.Env_elope" padding="4"/>
-					<label text="labels.gain_" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="slv_l" size="10" ui:inject="Button_orange" led="true"/>
-						<button id="slv_r" size="10" ui:inject="Button_orange" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="elv_l" size="10" ui:inject="Button_violet" led="true"/>
-						<button id="elv_r" size="10" ui:inject="Button_violet" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="grv_l" size="10" ui:inject="Button_blue" led="true"/>
-						<button id="grv_r" size="10" ui:inject="Button_blue" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Sidechain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="slm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-					<ledchannel id="slm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
-				</ledmeter>
-
-				<!-- Envelope signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="elm_l" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-					<ledchannel id="elm_r" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
-				</ledmeter>
-
-				<!-- Gain signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="rlm_l" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-					<ledchannel id="rlm_r" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
-				</ledmeter>
-			</grid>
-
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.gating">
-				<!-- Curve graph -->
-				<graph width.min="256" height.min="256" expand="true" fill="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:for id="g" first="-60" last="12" step="24">
-						<marker v="${g} db" color="graph_alt_1"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
-					</ui:for>
-
-					<!-- Yellow grid -->
-					<ui:for id="g" first="-48" last="-24" step="24">
-						<marker v="${g} db" color="graph_sec"/>
-						<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
-					</ui:for>
-
-					<!-- Axes and boundaries -->
-					<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-					<marker v="24 db" color="graph_alt_1" visibility="false"/>
-					<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
-					<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-					<!-- 0 dB markers -->
-					<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
-					<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
-
-					<!-- Meshes -->
-					<mesh id="hg" width="3" color="graph_mesh" smooth="true" visibility=":gh"/>
-					<mesh id="cg" width="3" color="graph_mesh" smooth="true"/>
-					<dot x.id="elm_l" y.id="clm_l" color="graph_mesh" bcolor="graph_mesh" visibility="!:ssplit"/>
-					<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left" visibility=":ssplit"/>
-					<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right" visibility=":ssplit"/>
-
-					<!-- Markers -->
-					<marker id="gzs" color="kscale"/>
-					<marker id="hzs" color="kscale" visibility=":gh"/>
-					<marker id="gt" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
-					<marker id="hts" color="threshold" visibility=":gh"/>
-
-					<!-- Text -->
-					<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
-					<ui:attributes x="0 db" halign="1" valign="-1">
-						<text y="24 db" text="graph.units.db"/>
-						<text y="12 db" text="+12"/>
-						<text y="-12 db" text="-12"/>
-						<text y="-24 db" text="-24"/>
-						<text y="-36 db" text="-36"/>
-						<text y="-48 db" text="-48"/>
-						<text y="-60 db" text="-60"/>
-						<text y="-72 db" text="graph.axis.out" valign="1"/>
-					</ui:attributes>
-					<ui:attributes y="0 db" halign="-1" valign="1">
-						<text x="24 db" text="graph.units.db"/>
-						<text x="12 db" text="+12"/>
-						<text x="-12 db" text="-12"/>
-						<text x="-24 db" text="-24"/>
-						<text x="-36 db" text="-36"/>
-						<text x="-48 db" text="-48"/>
-						<text x="-60 db" text="-60"/>
-						<text x="-72 db" text="graph.axis.in" halign="1"/>
-					</ui:attributes>
-				</graph>
-			</group>
-
-			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
-				<ui:with bg.color="bg_schema">
-					<label text="labels.chan.in" padding="4"/>
-					<label text="labels.chan.out" padding="4"/>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="ilv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="ilv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-
-					<grid rows="2" cols="2" fill="false" hspacing="2">
-						<button id="olv_l" size="10" ui:inject="Button_left" led="true"/>
-						<button id="olv_r" size="10" ui:inject="Button_right" led="true"/>
-					</grid>
-				</ui:with>
-
-				<!-- Input signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="ilm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left_in"/>
-					<ledchannel id="ilm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right_in"/>
-				</ledmeter>
-
-				<!-- Output signal meter -->
-				<ledmeter vexpand="true" height.min="256" angle="1">
-					<ledchannel id="olm_l" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="left"/>
-					<ledchannel id="olm_r" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="right"/>
-				</ledmeter>
-			</grid>
-
-			<!-- Signal control -->
-			<group text="groups.signal" vexpand="true" hexpand="false" ipadding="0">
-				<vbox vexpand="true">
-					<ui:with pad="6">
-						<label text="labels.input"/>
-						<knob id="g_in"/>
-						<value id="g_in"/>
-						<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
-						<label text="labels.output"/>
-						<knob id="g_out"/>
-						<value id="g_out"/>
-					</ui:with>
-					<hsep bg.color="bg" fill="true" pad.v="2"/>
-					<label vexpand="true"/>
-				</vbox>
-			</group>
-		</grid>
-
-		<!-- Separator -->
-		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
-
-		<!-- Bottom part -->
-		<hbox>
-			<group text="groups.sidechain" vexpand="false" ipadding="0">
-
-				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true">
-						<label text="labels.sc.preamp" vreduce="true"/>
-						<label text="labels.sc.reactivity" vreduce="true"/>
-						<label text="labels.sc.lookahead" vreduce="true"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="3"><hsep/></cell>
-						<hsep/>
-						<hsep/>
-						<hsep/>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
-					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
-					<cell rows="3">
-						<vbox>
-							<vbox vfill="false" pad.v="4">
-								<ui:with pad.h="6" hfill="true" width.min="74" >
-									<combo id="sci" pad.b="4" />
-									<combo id="scm" pad.b="4"/>
-									<combo id="scs" visibility="!:ssplit" />
-									<combo id="sscs" visibility=":ssplit" />
-								</ui:with>
-							</vbox>
-							<hsep fill="true" pad.v="2" reduce="true" bg.color="bg"/>
-							<button id="scl" height="22" pad.h="6" hfill="true" hexpand="true" text="labels.listen" ui:inject="Button_cyan"/>
-						</vbox>
-					</cell>
-					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 4 -->
-					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-
-					<!-- row 5 -->
-					<value id="scp" sline="true" width.min="48"/>
-					<value id="scr" sline="true"/>
-					<value id="sla" sline="true"/>
-					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
-					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
-				</grid>
-			</group>
-			<hsep pad.h="2" bg.color="bg"/>
-
-			<group text="groups.plug.gate" vexpand="false" hexpand="true" ipadding="0">
-
-				<grid rows="5" cols="18" spacing="0" bg.color="bg_schema">
-					<!-- row 1 -->
-					<ui:with pad.h="6" pad.v="4" vreduce="true">
-						<label text="labels.reduction"/>
-						<label text="labels.makeup" width.min="41"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<ui:with pad.h="6" pad.v="4" vreduce="true">
-						<label text="labels.attack"/>
-						<label text="labels.release"/>
-					</ui:with>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.curve" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="2"><label text="labels.hysteresis" pad.h="6" pad.v="4" vreduce="true"/></cell>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
-					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<cell cols="4"><label text="labels.mix" pad.h="6" pad.v="4" vreduce="true"/></cell>
-
-					<!-- row 2 -->
-					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<cell cols="2"><hsep/></cell>
-						<hsep />
-						<cell cols="4"><hsep/></cell>
-					</ui:with>
-
-					<!-- row 3 -->
-					<cell rows="3" cols="2">
-						<grid rows="3" cols="2">
-							<knob id="gr" scolor="kscale"/>
-							<knob id="mk" scolor="kscale"/>
-							<value id="gr" sline="true" width="48"/>
-							<value id="mk" sline="true" width="48"/>
-							<cell cols="2"><button id="gh" height="22" hfill="true" pad.h="6" text="labels.hysteresis" ui:inject="Button_cyan"/></cell>
-						</grid>
-					</cell>
-
-					<cell rows="2"><knob id="at" scolor="attack"/></cell>
-					<cell rows="2"><knob id="rt" scolor="release"/></cell>
-
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.thresh_old"/>
-						<label text="labels.zone"/>
-						<label text="labels.thresh_old" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.zone" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-					<cell rows="2"><knob id="hold" pad.h="6" /></cell>
-					<ui:with width.min="32" pad.t="4">
-						<label text="labels.signal.dry"/>
-						<label text="labels.signal.wet"/>
-					</ui:with>
-					<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
-					<label text="labels.signal.drywet" pad.t="4" pad.h="6"/>
-
-					<!-- row 4 -->
-
-					<knob id="gt" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
-					<knob id="gz" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
-					<knob id="ht" scolor="(:gh igt 0) ? 'attack_2' : 'attack_inactive'" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="hz" scolor="(:gh igt 0) ? 'kscale' : 'kscale_inactive'" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdr" scolor="dry" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cwt" scolor="wet" size="20" pad.h="6" pad.v="4"/>
-					<knob id="cdw" scolor="drywet" size="20" pad.h="6" pad.v="4"/>
-
-					<!-- row 5 -->
-					<ui:with width.min="32" pad.b="4">
-						<value id="at"/>
-						<value id="rt"/>
-						<value id="gt"/>
-						<value id="gz"/>
-						<value id="ht" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hz" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
-						<value id="hold"/>
-						<value id="cdr"/>
-						<value id="cwt"/>
-						<value id="cdw"/>
-					</ui:with>
-				</grid>
-			</group>
-		</hbox>
-	</vbox>
-</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single.xml 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single.xml
--- 1.2.21-5/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single.xml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/res/main/ui/dynamics/gate/single.xml	2025-08-26 18:15:51.873924213 +0000
@@ -0,0 +1,897 @@
+<plugin resizable="true">
+	<!-- Evaluate what kind of plugin we have -->
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	<ui:eval id="mono" value="(ex :gh) and (ex :ilm)"/>
+	<ui:eval id="stereo" value="(ex :gh) and !(ex :ilm)"/>
+	<ui:eval id="left_right" value="(ex :gh_l)"/>
+	<ui:eval id="mid_side" value="(ex :gh_m)"/>
+
+	<ui:eval id="xa" value="(:mid_side) ? 'm' : 'l'"/>
+	<ui:eval id="xb" value="(:mid_side) ? 's' : 'r'"/>
+
+	<ui:eval id="clr_a" value="(:mid_side) ? 'mid' : 'left'"/>
+	<ui:eval id="clr_b" value="(:mid_side) ? 'side' : 'right'"/>
+
+	<!-- Control linking -->
+	<ui:if test=":left_right or :mid_side">
+		<ui:for id="port"
+			list="'sci'; 'scm'; 'sla'; 'scl'; 'scs'; 'scr'; 'scp'; 'shpm'; 'shpf'; 'slpm'; 'slpf';
+				'gh'; 'gt'; 'gz'; 'ht'; 'hz'; 'at'; 'rt'; 'hold'; 'gr'; 'mk'; 'cdr'; 'cwt'; 'cdw'">
+			<ctl:link
+				id.1="${port}_${xa}" value.1=":${port}_${xb}"
+				id.2="${port}_${xb}" value.2=":${port}_${xa}"
+				activity=":clink" />
+		</ui:for>
+	</ui:if>
+
+	<vbox>
+		<!-- Top part -->
+		<grid rows="1" cols="4" hspacing="4" expand="true">
+			<vbox expand="true">
+				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
+					<graph width.min="496" height.min="222" expand="true" fill="true">
+						<origin hpos="1" vpos="-1" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:for id="t" first="0" last="4" step="1">
+							<ui:attributes ox="0" oy="1">
+								<marker v="${t}.25" color="graph_alt_2"/>
+								<marker v="${t}.5" color="graph_alt_1"/>
+								<marker v="${t}.75" color="graph_alt_2"/>
+							</ui:attributes>
+						</ui:for>
+						<ui:attributes ox="1" oy="0" color="graph_alt_1">
+							<marker v="+12 db"/>
+							<marker v="-12 db"/>
+							<marker v="-36 db"/>
+							<marker v="-60 db"/>
+						</ui:attributes>
+
+						<!-- Yellow grid -->
+						<ui:for id="t" first="1" last="4" step="1">
+							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
+						</ui:for>
+						<ui:attributes ox="1" oy="0" color="graph_sec">
+							<marker v="0 db"/>
+							<marker v="-24 db"/>
+							<marker v="-48 db"/>
+						</ui:attributes>
+
+						<!-- Meshes -->
+						<ui:if test=":mono">
+							<mesh id="icg" width="0" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilv"/>
+							<mesh id="ocg" width="2" color="mono" visibility=":olv"/>
+							<mesh id="scg" width="2" color="sidechain_1" visibility=":slv"/>
+							<mesh id="evg" width="2" color="envelope_1" visibility=":elv"/>
+							<mesh id="grg" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv"/>
+						</ui:if>
+
+						<ui:if test="!(:mono)">
+							<mesh id="icg_${xa}" width="0" color="${clr_a}_in" fcolor="${clr_a}_in" fcolor.a="0.8" fill="true" visibility=":ilv_${xa}"/>
+							<mesh id="icg_${xb}" width="0" color="${clr_b}_in" fcolor="${clr_b}_in" fcolor.a="0.8" fill="true" visibility=":ilv_${xb}"/>
+							<mesh id="ocg_${xa}" width="2" color="${clr_a}" visibility=":olv_${xa}"/>
+							<mesh id="ocg_${xb}" width="2" color="${clr_b}" visibility=":olv_${xb}"/>
+							<mesh id="scg_${xa}" width="2" color="sidechain_1" visibility=":slv_${xa}"/>
+							<mesh id="scg_${xb}" width="2" color="sidechain_2" visibility=":slv_${xb}"/>
+							<mesh id="evg_${xa}" width="2" color="envelope_1" visibility=":elv_${xa}"/>
+							<mesh id="evg_${xb}" width="2" color="envelope_2" visibility=":elv_${xb}"/>
+							<mesh id="grg_${xa}" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_${xa}"/>
+							<mesh id="grg_${xb}" width="2" color="bright_blue" fcolor="bright_blue" fcolor.a="0.8" fill="true" visibility=":grv_${xb}"/>
+						</ui:if>
+
+						<!-- Markers -->
+						<ui:if test=":stereo or :mono">
+							<ui:attributes ox="1" oy="0">
+								<marker id="gzs" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
+								<marker id="hzs" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh"/>
+								<marker id="gt" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
+								<marker id="hts_l" width="2" color="threshold" lcolor="threshold" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh"/>
+							</ui:attributes>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<ui:attributes ox="1" oy="0">
+								<marker id="gzs_${xa}" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
+								<marker id="gzs_${xb}" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8"/>
+								<marker id="hzs_${xa}" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_${xa}"/>
+								<marker id="hzs_${xb}" width="2" color="cyan" lcolor="cyan" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_${xb}"/>
+								<marker id="gt_${xa}" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
+								<marker id="gt_${xb}" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" lborder="50" hlborder="50" color.a="0.1" hcolor.a="0.0" lcolor.a="0.8" hlcolor.a="0.6"/>
+								<marker id="hts_${xa}" width="2" color="threshold" lcolor="threshold" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_${xa}"/>
+								<marker id="hts_${xb}" width="2" color="threshold" lcolor="threshold" ox="1" oy="0" lborder="25" color.a="0.1" lcolor.a="0.8" visibility=":gh_${xb}"/>
+							</ui:attributes>
+						</ui:if>
+
+						<!-- Boundaries -->
+						<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
+						<marker v="5" ox="0" oy="1" color="graph_prim" visibility="false"/>
+
+						<!-- Axis -->
+						<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+						<axis min="-72 db" max="24 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+
+						<!-- Text -->
+						<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+						<ui:for id="t" first="0" last="4" step="1">
+							<text x="${t}" y="-72 db" text="${t}" halign="-1" valign="1" color="graph_prim"/>
+							<text x="${t}.5" y="-72 db" text="${t}.5" halign="-1" valign="1" color="graph_prim"/>
+						</ui:for>
+						<ui:attributes x="5" halign="1" valign="1" color="graph_prim">
+							<text y="12 db" text="+12"/>
+							<text y="0 db" text="0"/>
+							<text y="-12 db" text="-12"/>
+							<text y="-24 db" text="-24"/>
+							<text y="-36 db" text="-36"/>
+							<text y="-48 db" text="-48"/>
+							<text y="-60 db" text="-60"/>
+							<text x="5" y="24 db" text="graph.units.db" valign="-1"/>
+						</ui:attributes>
+					</graph>
+				</group>
+				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
+				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
+					<button id="pause" height="22" width="48" text="labels.pause" pad.v="4" ui:inject="Button_green"/>
+					<button id="clear" height="22" width="48" text="labels.clear" pad.v="4" ui:inject="Button_red"/>
+					<ui:if test=":left_right">
+						<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
+					</ui:if>
+					<ui:if test=":mid_side">
+						<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
+					</ui:if>
+					<void hexpand="true"/>
+
+					<ui:if test=":mid_side">
+						<vsep pad.h="2" bg.color="bg" reduce="true"/>
+						<button id="msl" height="22" width="48" text="labels.ms_listen" pad.v="4" ui:inject="Button_yellow" pad.h="2"/>
+					</ui:if>
+
+					<ui:if test=":stereo">
+						<vsep pad.h="2" bg.color="bg" reduce="true"/>
+						<button id="ssplit" text="labels.stereo_split" size="22" pad.v="4" ui:inject="Button_blue" pad.h="2"/>
+					</ui:if>
+
+					<vsep pad.h="2" bg.color="bg" reduce="true"/>
+					<shmlink id="link" pad.l="2"/>
+				</hbox>
+			</vbox>
+
+			<grid rows="3" cols="3" hfill="false" hspacing="4" hexpand="false">
+				<ui:with bg.color="bg_schema">
+					<ui:with width.min="24">
+						<label text="labels.sc.SC" padding="4"/>
+						<label text="labels.Env_elope" padding="4"/>
+						<label text="labels.gain_" padding="4"/>
+					</ui:with>
+
+					<!-- For Mono version -->
+					<ui:if test=":mono">
+						<button id="slv" height="10" width="22" ui:inject="Button_orange" led="true"/>
+						<button id="elv" height="10" width="22" ui:inject="Button_violet" led="true"/>
+						<button id="grv" height="10" width="22" ui:inject="Button_blue" led="true"/>
+					</ui:if>
+
+					<!-- For Stereo and Left Right Mid Side version -->
+					<ui:if test="!(:mono)">
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="slv_${xa}" size="10" ui:inject="Button_orange" led="true"/>
+							<button id="slv_${xb}" size="10" ui:inject="Button_orange" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="elv_${xa}" size="10" ui:inject="Button_violet" led="true"/>
+							<button id="elv_${xb}" size="10" ui:inject="Button_violet" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="grv_${xa}" size="10" ui:inject="Button_blue" led="true"/>
+							<button id="grv_${xb}" size="10" ui:inject="Button_blue" led="true"/>
+						</grid>
+					</ui:if>
+				</ui:with>
+
+				<!-- For Mono version -->
+				<ui:if test=":mono">
+					<!-- Sidechain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="slm" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+					</ledmeter>
+
+					<!-- Envelope signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="elm" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+					</ledmeter>
+
+					<!-- Gain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="rlm" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+					</ledmeter>
+				</ui:if>
+
+				<!-- For Stereo and Left Right Mid Side version -->
+				<ui:if test="!(:mono)">
+					<!-- Sidechain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="slm_${xa}" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+						<ledchannel id="slm_${xb}" min="-72 db" max="24 db" log="true" type="peak" value.color="sidechain"/>
+					</ledmeter>
+
+					<!-- Envelope signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="elm_${xa}" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+						<ledchannel id="elm_${xb}" min="-72 db" max="24 db" log="true" type="peak" value.color="envelope"/>
+					</ledmeter>
+
+					<!-- Gain signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="rlm_${xa}" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+						<ledchannel id="rlm_${xb}" min="-48 db" max="48 db" log="true" balance="0 db" balance.visibility="true" type="peak" value.color="blue"/>
+					</ledmeter>
+				</ui:if>
+
+			</grid>
+
+			<vbox expand="true">
+				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.gating">
+					<!-- Curve graph -->
+					<graph width.min="256" height.min="256" expand="true" fill="true">
+						<origin hpos="-1" vpos="-1" visible="false"/>
+
+						<!-- Gray grid -->
+						<ui:for id="g" first="-60" last="12" step="24">
+							<marker v="${g} db" color="graph_alt_1"/>
+							<marker v="${g} db" ox="1" oy="0" color="graph_alt_1"/>
+						</ui:for>
+
+						<!-- Yellow grid -->
+						<ui:for id="g" first="-48" last="-24" step="24">
+							<marker v="${g} db" color="graph_sec"/>
+							<marker v="${g} db" ox="1" oy="0" color="graph_sec"/>
+						</ui:for>
+
+						<!-- Axes and boundaries -->
+						<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
+						<marker v="24 db" color="graph_alt_1" visibility="false"/>
+						<marker v="24 db" ox="1" oy="0" color="graph_alt_1" visibility="false"/>
+						<axis min="-72 db" max="24 db" color="graph_prim" angle="0.0" log="true" visibility="false"/>
+						<axis min="-72 db" max="24 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
+
+						<!-- 0 dB markers -->
+						<marker v="0 db" ox="0" oy="1" width="2" color="graph_prim"/>
+						<marker v="0 db" ox="1" oy="0" width="2" color="graph_prim"/>
+
+						<!-- Meshes -->
+						<ui:if test=":mono">
+							<mesh id="hg" width="3" color="graph_mesh" smooth="true" visibility=":gh"/>
+							<mesh id="cg" width="3" color="graph_mesh" smooth="true"/>
+							<dot x.id="elm" y.id="clm" color="graph_mesh" bcolor="graph_mesh"/>
+						</ui:if>
+
+						<ui:if test=":stereo">
+							<mesh id="hg" width="3" color="graph_mesh" smooth="true" visibility=":gh"/>
+							<mesh id="cg" width="3" color="graph_mesh" smooth="true"/>
+							<dot x.id="elm_l" y.id="clm_l" color="graph_mesh" bcolor="graph_mesh" visibility="!:ssplit"/>
+							<dot x.id="elm_l" y.id="clm_l" color="left" bcolor="left" visibility=":ssplit"/>
+							<dot x.id="elm_r" y.id="clm_r" color="right" bcolor="right" visibility=":ssplit"/>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<mesh id="hg_${xa}" width="3" color="${clr_a}" smooth="true" visibility=":gh_${xa}"/>
+							<mesh id="cg_${xa}" width="3" color="${clr_a}" smooth="true" />
+							<mesh id="hg_${xb}" width="3" color="${clr_b}" smooth="true" visibility=":gh_${xb}"/>
+							<mesh id="cg_${xb}" width="3" color="${clr_b}" smooth="true" />
+							<dot x.id="elm_${xa}" y.id="clm_${xa}" color="${clr_a}" bcolor="${clr_a}"/>
+							<dot x.id="elm_${xb}" y.id="clm_${xb}" color="${clr_b}" bcolor="${clr_b}"/>
+						</ui:if>
+
+						<!-- Markers -->
+						<ui:if test=":mono or :stereo">
+							<marker id="gzs" color="kscale"/>
+							<marker id="hzs" color="kscale" visibility=":gh"/>
+							<marker id="gt" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
+							<marker id="hts" color="threshold" visibility=":gh"/>
+						</ui:if>
+
+						<ui:if test=":left_right or :mid_side">
+							<marker id="gzs_${xa}" color="${clr_a}"/>
+							<marker id="gzs_${xb}" color="${clr_b}"/>
+							<marker id="hzs_${xa}" color="${clr_a}" visibility=":gh_${xa}"/>
+							<marker id="hzs_${xb}" color="${clr_b}" visibility=":gh_${xb}"/>
+							<marker id="gt_${xa}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
+							<marker id="gt_${xb}" editable="true" width="2" pointer="hsize" color="threshold" hcolor="threshold"/>
+							<marker id="hts_${xa}" color="threshold" visibility=":gh_${xa}"/>
+							<marker id="hts_${xb}" color="threshold" visibility=":gh_${xb}"/>
+						</ui:if>
+
+						<!-- Text -->
+						<text x="0 db" y="0 db" text="0" halign="1" valign="1"/>
+						<ui:attributes x="0 db" halign="1" valign="-1">
+							<text y="24 db" text="graph.units.db"/>
+							<text y="12 db" text="+12"/>
+							<text y="-12 db" text="-12"/>
+							<text y="-24 db" text="-24"/>
+							<text y="-36 db" text="-36"/>
+							<text y="-48 db" text="-48"/>
+							<text y="-60 db" text="-60"/>
+							<text y="-72 db" text="graph.axis.out" valign="1"/>
+						</ui:attributes>
+						<ui:attributes y="0 db" halign="-1" valign="1">
+							<text x="24 db" text="graph.units.db"/>
+							<text x="12 db" text="+12"/>
+							<text x="-12 db" text="-12"/>
+							<text x="-24 db" text="-24"/>
+							<text x="-36 db" text="-36"/>
+							<text x="-48 db" text="-48"/>
+							<text x="-60 db" text="-60"/>
+							<text x="-72 db" text="graph.axis.in" halign="1"/>
+						</ui:attributes>
+					</graph>
+				</group>
+				<void bg.color="bg" vexpand="false" fill="false" pad.v="2"/>
+				<hbox spacing="4" vexpand="false" bg.color="bg_schema" pad.h="6">
+					<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" pad.v="4"/>
+					<button ui:id="sidechain_trigger" id="showsc" text="labels.sidechain" size="22" pad.v="4"/>
+					<void hexpand="true"/>
+					<button ui:id="mix_trigger" id="showmx" text="labels.mix" size="22" pad.v="4"/>
+				</hbox>
+			</vbox>
+
+			<grid rows="3" cols="2" hfill="false" hexpand="false" hspacing="4">
+				<ui:with bg.color="bg_schema">
+					<label text="labels.chan.in" padding="4" width.min="24"/>
+					<label text="labels.chan.out" padding="4" width.min="24"/>
+
+					<!-- For Mono version -->
+					<ui:if test=":mono">
+						<button id="ilv" height="10" width="22" ui:inject="Button_mono" led="true" fill="false" hspacing="2"/>
+						<button id="olv" height="10" width="22" ui:inject="Button_mono" led="true" fill="false" hspacing="2"/>
+					</ui:if>
+
+					<!-- For Stereo and Left Right Mid Side version -->
+					<ui:if test="!(:mono)">
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="ilv_${xa}" size="10" ui:inject="Button_${clr_a}" led="true"/>
+							<button id="ilv_${xb}" size="10" ui:inject="Button_${clr_b}" led="true"/>
+						</grid>
+
+						<grid rows="2" cols="2" fill="false" hspacing="2">
+							<button id="olv_${xa}" size="10" ui:inject="Button_${clr_a}" led="true"/>
+							<button id="olv_${xb}" size="10" ui:inject="Button_${clr_b}" led="true"/>
+						</grid>
+					</ui:if>
+				</ui:with>
+
+				<!-- For Mono version -->
+				<ui:if test=":mono">
+					<!-- Input signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="ilm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono_in"/>
+					</ledmeter>
+
+					<!-- Output signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="olm" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="mono"/>
+					</ledmeter>
+				</ui:if>
+
+				<!-- For Stereo and Left Right Mid Side version -->
+				<ui:if test="!(:mono)">
+					<!-- Input signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="ilm_${xa}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_a}_in"/>
+						<ledchannel id="ilm_${xb}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_b}_in"/>
+					</ledmeter>
+
+					<!-- Output signal meter -->
+					<ledmeter vexpand="true" height.min="256" angle="1">
+						<ledchannel id="olm_${xa}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_a}"/>
+						<ledchannel id="olm_${xb}" min="-72 db" max="24 db" log="true" type="rms_peak" peak.visibility="true" value.color="${clr_b}"/>
+					</ledmeter>
+				</ui:if>
+			</grid>
+		</grid>
+
+		<!-- Separator -->
+		<void bg.color="bg" fill="true" pad.v="2" reduce="true"/>
+
+		<!-- Bottom part -->
+		<hbox>
+
+			<group text="groups.plug.gate" vexpand="false" hexpand="true" ipadding="0">
+				<!-- For Stereo and Mono version-->
+				<ui:if test=":mono or :stereo">
+					<grid rows="5" cols="13" spacing="0" bg.color="bg_schema">
+						<!-- row 1 -->
+						<ui:with pad.h="6" pad.v="4" vreduce="true">
+							<label text="labels.reduction"/>
+							<label text="labels.makeup" width.min="41"/>
+						</ui:with>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<ui:with pad.h="6" pad.v="4" vreduce="true">
+							<label text="labels.attack"/>
+							<label text="labels.release"/>
+						</ui:with>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.curve" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.hysteresis" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
+
+						<!-- row 2 -->
+						<ui:with bg.color="bg" pad.v="2" vreduce="true">
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<hsep/>
+						</ui:with>
+
+						<!-- row 3 -->
+						<cell rows="3" cols="2">
+							<grid rows="3" cols="2">
+								<knob id="gr" scolor="kscale"/>
+								<knob id="mk" scolor="kscale"/>
+								<value id="gr" sline="true" width="48"/>
+								<value id="mk" sline="true" width="48"/>
+								<cell cols="2"><button id="gh" height="22" hfill="true" pad.h="6" text="labels.hysteresis" ui:inject="Button_cyan"/></cell>
+							</grid>
+						</cell>
+
+						<cell rows="2"><knob id="at" scolor="attack"/></cell>
+						<cell rows="2"><knob id="rt" scolor="release"/></cell>
+
+						<ui:with width.min="32" pad.t="4">
+							<label text="labels.thresh_old"/>
+							<label text="labels.zone"/>
+							<label text="labels.thresh_old" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
+							<label text="labels.zone" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
+						</ui:with>
+						<cell rows="2"><knob id="hold" pad.h="6"/></cell>
+
+						<!-- row 4 -->
+
+						<knob id="gt" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="gz" scolor="kscale" size="20" pad.h="6" pad.v="4"/>
+						<knob id="ht" scolor="(:gh igt 0) ? 'attack_2' : 'cycle_inactive'" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
+						<knob id="hz" scolor="(:gh igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
+
+						<!-- row 5 -->
+						<ui:with width.min="32" pad.b="4">
+							<value id="at"/>
+							<value id="rt"/>
+							<value id="gt"/>
+							<value id="gz"/>
+							<value id="ht" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
+							<value id="hz" bright="(:gh igt 0) ? 1 : 0.75" bg.bright="(:gh igt 0) ? 1 : :const_bg_darken"/>
+							<value id="hold"/>
+						</ui:with>
+					</grid>
+				</ui:if>
+
+				<!-- For Left Right and Mid Side version -->
+				<ui:if test=":left_right or :mid_side">
+					<grid rows="9" cols="13" spacing="0" bg.color="bg_schema">
+						<!-- row 1 -->
+						<ui:with pad.h="6" pad.v="4" vreduce="true">
+							<label text="labels.reduction"/>
+							<label text="labels.makeup" width.min="41"/>
+						</ui:with>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<ui:with pad.h="6" pad.v="4" vreduce="true">
+							<label text="labels.attack"/>
+							<label text="labels.release"/>
+						</ui:with>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.curve" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<cell cols="2"><label text="labels.hysteresis" pad.h="6" pad.v="4" vreduce="true"/></cell>
+						<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.hold" pad.h="6" pad.v="4" vreduce="true"/>
+
+						<!-- row 2 -->
+						<ui:with bg.color="bg" pad.v="2" vreduce="true">
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<hsep/>
+						</ui:with>
+
+						<!-- row 3 -->
+						<cell rows="3" cols="2">
+							<grid rows="3" cols="2">
+								<knob id="gr_${xa}" scolor="${clr_a}"/>
+								<knob id="mk_${xa}" scolor="${clr_a}"/>
+								<value id="gr_${xa}" sline="true" width="48"/>
+								<value id="mk_${xa}" sline="true" width="48"/>
+								<cell cols="2"><button id="gh_${xa}" height="22" hfill="true" pad.h="6" text="labels.hysteresis" ui:inject="Button_${clr_a}"/></cell>
+							</grid>
+						</cell>
+
+						<cell rows="2"><knob id="at_${xa}" scolor="attack"/></cell>
+						<cell rows="2"><knob id="rt_${xa}" scolor="release"/></cell>
+
+						<ui:with width.min="32" pad.t="4">
+							<label text="labels.thresh_old"/>
+							<label text="labels.zone"/>
+							<label text="labels.thresh_old" bright="(:gh_${xa} igt 0) ? 1 : 0.75" bg.bright="(:gh_${xa} igt 0) ? 1 : :const_bg_darken"/>
+							<label text="labels.zone" bright="(:gh_${xa} igt 0) ? 1 : 0.75" bg.bright="(:gh_${xa} igt 0) ? 1 : :const_bg_darken"/>
+						</ui:with>
+						<cell rows="2"><knob id="hold_${xa}" pad.h="6" scolor="${clr_a}"/></cell>
+
+						<!-- row 4 -->
+
+						<knob id="gt_${xa}" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="gz_${xa}" scolor="${clr_a}" size="20" pad.h="6" pad.v="4"/>
+						<knob id="ht_${xa}" scolor="(:gh_${xa} igt 0) ? 'attack_2' : 'cycle_inactive'" bg.bright="(:gh_${xa} igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
+						<knob id="hz_${xa}" scolor="(:gh_${xa} igt 0) ? '${clr_a}' : 'cycle_inactive'" bg.bright="(:gh_${xa} igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
+
+						<!-- row 5 -->
+						<ui:with width.min="32" pad.b="4">
+							<value id="at_${xa}"/>
+							<value id="rt_${xa}"/>
+							<value id="gt_${xa}"/>
+							<value id="gz_${xa}"/>
+							<value id="ht_${xa}" bright="(:gh_${xa} igt 0) ? 1 : 0.75" bg.bright="(:gh_${xa} igt 0) ? 1 : :const_bg_darken"/>
+							<value id="hz_${xa}" bright="(:gh_${xa} igt 0) ? 1 : 0.75" bg.bright="(:gh_${xa} igt 0) ? 1 : :const_bg_darken"/>
+							<value id="hold_${xa}"/>
+						</ui:with>
+
+						<!-- row 6 -->
+						<ui:with bg.color="bg" pad.v="2" vreduce="true">
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<cell cols="2"><hsep/></cell>
+							<hsep/>
+						</ui:with>
+
+						<!-- row 7 -->
+						<cell rows="3" cols="2">
+							<grid rows="3" cols="2">
+								<knob id="gr_${xb}" scolor="${clr_b}"/>
+								<knob id="mk_${xb}" scolor="${clr_b}"/>
+								<value id="gr_${xb}" sline="true" width="48"/>
+								<value id="mk_${xb}" sline="true" width="48"/>
+								<cell cols="2"><button id="gh_${xb}" height="22" hfill="true" pad.h="6" text="labels.hysteresis" ui:inject="Button_${clr_b}"/></cell>
+							</grid>
+						</cell>
+
+						<cell rows="2"><knob id="at_${xb}" scolor="attack"/></cell>
+						<cell rows="2"><knob id="rt_${xb}" scolor="release"/></cell>
+
+						<ui:with width.min="32" pad.t="4">
+							<label text="labels.thresh_old"/>
+							<label text="labels.zone"/>
+							<label text="labels.thresh_old" bright="(:gh_${xb} igt 0) ? 1 : 0.75" bg.bright="(:gh_${xb} igt 0) ? 1 : :const_bg_darken"/>
+							<label text="labels.zone" bright="(:gh_${xb} igt 0) ? 1 : 0.75" bg.bright="(:gh_${xb} igt 0) ? 1 : :const_bg_darken"/>
+						</ui:with>
+						<cell rows="2"><knob id="hold_${xb}" pad.h="6" scolor="${clr_b}"/></cell>
+
+						<!-- row 8 -->
+
+						<knob id="gt_${xb}" scolor="attack_1" size="20" pad.h="6" pad.v="4"/>
+						<knob id="gz_${xb}" scolor="${clr_b}" size="20" pad.h="6" pad.v="4"/>
+						<knob id="ht_${xb}" scolor="(:gh_${xb} igt 0) ? 'attack_2' : 'cycle_inactive'" bg.bright="(:gh_${xb} igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
+						<knob id="hz_${xb}" scolor="(:gh_${xb} igt 0) ? '${clr_b}' : 'cycle_inactive'" bg.bright="(:gh_${xb} igt 0) ? 1 : :const_bg_darken" size="20" pad.h="6" pad.v="4"/>
+
+						<!-- row 9 -->
+						<ui:with width.min="32" pad.b="4">
+							<value id="at_${xb}"/>
+							<value id="rt_${xb}"/>
+							<value id="gt_${xb}"/>
+							<value id="gz_${xb}"/>
+							<value id="ht_${xb}" bright="(:gh_${xb} igt 0) ? 1 : 0.75" bg.bright="(:gh_${xb} igt 0) ? 1 : :const_bg_darken"/>
+							<value id="hz_${xb}" bright="(:gh_${xb} igt 0) ? 1 : 0.75" bg.bright="(:gh_${xb} igt 0) ? 1 : :const_bg_darken"/>
+							<value id="hold_${xb}"/>
+						</ui:with>
+					</grid>
+				</ui:if>
+			</group>
+
+			<!-- Separator -->
+			<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+
+			<!-- Signal control -->
+			<group text="groups.signal" vexpand="false" hexpand="true" ipadding="0">
+				<ui:if test=":mono or :stereo">
+					<grid rows="3" cols="2" spacing="0" bg.color="bg_schema" transpose="true">
+						<label text="labels.input" width="40" pad.h="6" pad.v="4"/>
+						<knob id="g_in"/>
+						<value id="g_in" pad.v="4"/>
+
+						<label text="labels.output" width="40" pad.h="6" pad.v="4"/>
+						<knob id="g_out"/>
+						<value id="g_out" pad.v="4"/>
+					</grid>
+				</ui:if>
+
+				<ui:if test=":left_right or :mid_side">
+					<vbox vexpand="true">
+						<ui:with pad="6">
+							<label text="labels.input"/>
+							<knob id="g_in"/>
+							<value id="g_in"/>
+							<hsep bg.color="bg" fill="true" pad.h="0" pad.v="2"/>
+							<label text="labels.output"/>
+							<knob id="g_out"/>
+							<value id="g_out"/>
+						</ui:with>
+					</vbox>
+				</ui:if>
+			</group>
+		</hbox>
+
+	</vbox>
+
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="0" vpos="0" halign="-1" valign="1" ipadding.r="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true" height="139">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
+
+	<!-- Sidechain overlay -->
+	<overlay id="showsc" trigger="sidechain_trigger" hpos="0" vpos="0" halign="-1" valign="1" ipadding.r="4">
+		<group text="groups.sidechain" vexpand="false" ipadding="0">
+			<!-- For Stereo and Mono version-->
+			<ui:if test=":mono or :stereo">
+				<grid rows="5" cols="9" spacing="0" bg.color="bg_schema" height="139">
+					<!-- row 1 -->
+					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true" width.min="56">
+						<label text="labels.sc.preamp" vreduce="true"/>
+						<label text="labels.sc.reactivity" vreduce="true"/>
+						<label text="labels.sc.lookahead" vreduce="true"/>
+					</ui:with>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="5" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+
+					<!-- row 2 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 3 -->
+					<cell rows="2"><knob id="scp" scolor="kscale"/></cell>
+					<cell rows="2"><knob id="scr" scolor="kscale"/></cell>
+					<cell rows="2"><knob id="sla" scolor="kscale"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sci" pad.t="4"/>
+								<combo id="scm"/>
+								<combo id="scs" visibility="!:ssplit"/>
+								<combo id="sscs" visibility=":ssplit"/>
+								<button id="scl" height="22" text="labels.listen" ui:inject="Button_cyan"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm" pad.h="6" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm" pad.h="6" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 4 -->
+					<knob id="shpf" size="20" scolor="(:shpm igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf" size="20" scolor="(:slpm igt 0) ? 'kscale' : 'cycle_inactive'" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 5 -->
+					<value id="scp" sline="true" width.min="48"/>
+					<value id="scr" sline="true"/>
+					<value id="sla" sline="true"/>
+					<value id="shpf" sline="true" bright="(:shpm igt 0) ? 1 : 0.75" bg.bright="(:shpm igt 0) ? 1 : :const_bg_darken"/>
+					<value id="slpf" sline="true" bright="(:slpm igt 0) ? 1 : 0.75" bg.bright="(:slpm igt 0) ? 1 : :const_bg_darken"/>
+				</grid>
+			</ui:if>
+
+			<!-- For Left Right and Mid Side version -->
+			<ui:if test=":left_right or :mid_side">
+				<grid rows="9" cols="9" spacing="0" bg.color="bg_schema">
+					<!-- row 1 -->
+					<ui:with pad.h="6" pad.v="4" fill="false" hexpand="true" width.min="56">
+						<label text="labels.sc.preamp" vreduce="true"/>
+						<label text="labels.sc.reactivity" vreduce="true"/>
+						<label text="labels.sc.lookahead" vreduce="true"/>
+					</ui:with>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.setup" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.HPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+					<cell rows="9" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+					<label text="labels.flt.LPF" pad.h="6" pad.v="4" fill="false" vreduce="true"/>
+
+					<!-- row 2 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 3 -->
+					<cell rows="2"><knob id="scp_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="2"><knob id="scr_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="2"><knob id="sla_${xa}" scolor="${clr_a}"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sci_${xa}" pad.t="4"/>
+								<combo id="scm_${xa}"/>
+								<combo id="scs_${xa}"/>
+								<button id="scl_${xa}" height="22" text="labels.listen" ui:inject="Button_${clr_a}"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm_${xa}" pad.h="6" bright="(:shpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm_${xa}" pad.h="6" bright="(:slpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 4 -->
+					<knob id="shpf_${xa}" size="20" scolor="(:shpm_${xa} igt 0) ? '${clr_a}' : 'cycle_inactive'" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf_${xa}" size="20" scolor="(:slpm_${xa} igt 0) ? '${clr_a}' : 'cycle_inactive'" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 5 -->
+					<value id="scp_${xa}" sline="true" width.min="48"/>
+					<value id="scr_${xa}" sline="true"/>
+					<value id="sla_${xa}" sline="true"/>
+					<value id="shpf_${xa}" sline="true" bright="(:shpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+					<value id="slpf_${xa}" sline="true" bright="(:slpm_${xa} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xa} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 6 -->
+					<ui:with bg.color="bg" pad.v="2" vreduce="true">
+						<cell cols="3"><hsep/></cell>
+						<hsep/>
+						<hsep/>
+						<hsep/>
+					</ui:with>
+
+					<!-- row 7 -->
+					<cell rows="2"><knob id="scp_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="2"><knob id="scr_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="2"><knob id="sla_${xb}" scolor="${clr_b}"/></cell>
+					<cell rows="3">
+						<vbox fill="false" spacing="1">
+							<ui:with pad.h="6" pad.b="4" hfill="true">
+								<combo id="sci_${xb}" pad.t="4"/>
+								<combo id="scm_${xb}"/>
+								<combo id="scs_${xb}"/>
+								<button id="scl_${xb}" height="22" text="labels.listen" ui:inject="Button_${clr_b}"/>
+							</ui:with>
+						</vbox>
+					</cell>
+					<combo id="shpm_${xb}" pad.h="6" bright="(:shpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					<combo id="slpm_${xb}" pad.h="6" bright="(:slpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 8 -->
+					<knob id="shpf_${xb}" size="20" scolor="(:shpm_${xb} igt 0) ? '${clr_b}' : 'cycle_inactive'" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="slpf_${xb}" size="20" scolor="(:slpm_${xb} igt 0) ? '${clr_b}' : 'cycle_inactive'" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+
+					<!-- row 9 -->
+					<ui:with sline="true">
+						<value id="scp_${xb}"/>
+						<value id="scr_${xb}"/>
+						<value id="sla_${xb}"/>
+						<value id="shpf_${xb}" bright="(:shpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:shpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+						<value id="slpf_${xb}" bright="(:slpm_${xb} igt 0) ? 1 : 0.75" bg.bright="(:slpm_${xb} igt 0) ? 1 : :const_bg_darken"/>
+					</ui:with>
+				</grid>
+			</ui:if>
+		</group>
+	</overlay>
+
+	<!-- Mix overlay -->
+	<overlay id="showmx" trigger="mix_trigger" hpos="0" vpos="0" halign="-1" valign="1" ipadding.r="4">
+		<group text="groups.mix" vexpand="false" ipadding="0">
+
+			<!-- For Stereo and Mono version-->
+			<ui:if test=":mono or :stereo">
+				<grid rows="3" cols="4" spacing="0" bg.color="bg_schema" height="139">
+					<!-- Row 1 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry" pad.h="6" width="44" pad.v="4"/>
+						<label text="labels.signal.wet" pad.h="6" width="44" pad.v="4"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6" width="44" pad.v="4"/>
+					</ui:with>
+
+					<!-- Row 2 -->
+					<knob id="cdr" size="20" scolor="dry"/>
+					<knob id="cwt" size="20" scolor="wet"/>
+					<knob id="cdw" size="20" scolor="drywet"/>
+
+					<!-- Row 3 -->
+					<value id="cdr" pad.v="4"/>
+					<value id="cwt" pad.v="4"/>
+					<value id="cdw" pad.v="4"/>
+
+				</grid>
+			</ui:if>
+
+			<!-- For Left Right and Mid Side version -->
+			<ui:if test=":left_right or :mid_side">
+				<grid rows="7" cols="4" spacing="0" bg.color="bg_schema" height.min="254">
+					<!-- row 1 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry"/>
+						<label text="labels.signal.wet"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6"/>
+					</ui:with>
+
+					<!-- row 2 -->
+					<knob id="cdr_${xa}" size="20" pad.h="6" pad.v="4" scolor="dry"/>
+					<knob id="cwt_${xa}" size="20" pad.h="6" pad.v="4" scolor="wet"/>
+					<knob id="cdw_${xa}" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
+
+					<!-- row 3 -->
+					<ui:with width.min="32">
+						<value id="cdr_${xa}"/>
+						<value id="cwt_${xa}"/>
+						<value id="cdw_${xa}"/>
+					</ui:with>
+
+					<!-- row 4 -->
+					<cell cols="4"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+
+					<!-- row 5 -->
+					<ui:with width.min="56" pad.t="8">
+						<label text="labels.signal.dry"/>
+						<label text="labels.signal.wet"/>
+						<cell rows="3" bg.color="bg" pad.h="2" hreduce="true"><vsep/></cell>
+						<label text="labels.signal.drywet" pad.h="6"/>
+					</ui:with>
+
+					<!-- row 6 -->
+
+					<knob id="cdr_${xb}" size="20" pad.h="6" pad.v="4" scolor="dry"/>
+					<knob id="cwt_${xb}" size="20" pad.h="6" pad.v="4" scolor="wet"/>
+					<knob id="cdw_${xb}" size="20" pad.h="6" pad.v="4" scolor="drywet"/>
+
+					<!-- row 7 -->
+					<ui:with width.min="32">
+						<value id="cdr_${xb}"/>
+						<value id="cwt_${xb}"/>
+						<value id="cdw_${xb}"/>
+					</ui:with>
+
+				</grid>
+			</ui:if>
+		</group>
+	</overlay>
+</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/src/doc/manuals/plugins/gate.php 1.2.23-0ubuntu1/modules/lsp-plugins-gate/src/doc/manuals/plugins/gate.php
--- 1.2.21-5/modules/lsp-plugins-gate/src/doc/manuals/plugins/gate.php	2025-03-01 12:43:05.524595973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/src/doc/manuals/plugins/gate.php	2025-08-26 18:15:51.877924174 +0000
@@ -35,9 +35,12 @@ keeping the same settings for the left a
 	<li><b>Pause</b> - pauses any updates of the gate graph.</li>
 	<li><b>Clear</b> - clears all graphs.</li>
 	<?php if ($m == 's') { ?>
-		<li><b>Stereo Split</b> - enables independent compression of left and right channels.</li>
+		<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+	<?php } else if ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } elseif ($m == 'ms') { ?>
 		<li><b>MS Listen</b> - passes mid-side signal to the output of gate instead of stereo signal.</li>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } ?>
 	<li><b>Gain<?= $sm ?></b> - enables drawing of gain amplification line and corresponding amplification meter.</li>
 	<li><b>SC<?= $sm ?></b> - enables drawing of sidechain input graph and corresponding level meter.</li>
@@ -45,8 +48,50 @@ keeping the same settings for the left a
 	<li><b>In<?= $sm ?></b> - enables drawing of gate's input signal graph and corresponding level meter.</li>
 	<li><b>Out<?= $sm ?></b> - enables drawing of gate's output signal graph and corresponding level meter.</li>
 	<li><b>Link</b> - the name of the shared memory link to pass sidechain signal.</li>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
+	<li><b>Sidechain</b> - shows the sidechain control overlay.</li>
+	<li><b>Mix</b> - shows the Dry/Wet control overlay.</li>
 </ul>
-<p><b>'Sidechain' section:</b></p>
+
+<p><b>'Gate' section:</b></p>
+<ul>
+	<li><b>Reduction</b> - the amount of gain applied to the input signal when the gate is closed (if negative) or open (if positive).</li>
+	<li><b>Makeup</b> - additional amplification gain after processing stage.</li>
+	<li><b>Attack</b> - attack time of the gate.</li>
+	<li><b>Release</b> - release time of the gate.</li>
+	<li><b>Curve</b> - Basic gate curve characteristics:</li>
+	<ul>
+		<li><b>Thresh</b> - threshold, the level of input signal at which the gate becomes open.</li>
+		<li><b>Zone</b> - the size of the transition zone below the threshold.</li>
+	</ul>
+	<li><b>Hysteresis <?= $sm ?></b> - enables additional hysteresis curve:</li>
+	<ul>
+		<li><b>Thresh</b> - threshold (relative to basic curve), the level of input signal at which the gate starts to close.</li>
+		<li><b>Zone</b> - the size of the transition zone below the hysteresis threshold.</li>
+	</ul>
+	<li><b>Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
+</ul>
+<p><b>'Signal' section:</b></p>
+<ul>
+	<li><b>Input</b> - overall input gain.</li>
+	<li><b>Output</b> - overall output gain.</li>
+</ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
+
+<p><b>Sidechain control overlay:</b></p>
 <ul>
 	<li><b>Preamp</b> - pre-amplification of the sidechain signal.</li>
 	<li><b>Reactivity</b> - reactivity of the sidechain signal.</li>
@@ -81,30 +126,9 @@ keeping the same settings for the left a
 	<li><b>LPF</b> - allows to set up slope and cut-off frequency for the low-pass filter applied to sidechain signal.</li>
 	<li><b>HPF</b> - allows to set up slope and cut-off frequency for the high-pass filter applied to sidechain signal.</li>
 </ul>
-<p><b>'Gate' section:</b></p>
+<p><b>Dry/Wet mix control overlay:</b></p>
 <ul>
-	<li><b>Reduction</b> - the amount of gain applied to the input signal when the gate is closed (if negative) or open (if positive).</li>
-	<li><b>Makeup</b> - additional amplification gain after processing stage.</li>
-	<li><b>Attack</b> - attack time of the gate.</li>
-	<li><b>Release</b> - release time of the gate.</li>
-	<li><b>Curve</b> - Basic gate curve characteristics:</li>
-	<ul>
-		<li><b>Thresh</b> - threshold, the level of input signal at which the gate becomes open.</li>
-		<li><b>Zone</b> - the size of the transition zone below the threshold.</li>
-	</ul>
-	<li><b>Hysteresis <?= $sm ?></b> - enables additional hysteresis curve:</li>
-	<ul>
-		<li><b>Thresh</b> - threshold (relative to basic curve), the level of input signal at which the gate starts to close.</li>
-		<li><b>Zone</b> - the size of the transition zone below the hysteresis threshold.</li>
-	</ul>
-	<li><b>Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
 	<li><b>Mix Dry</b> - the amount of dry (unprocessed) signal.</li>
 	<li><b>Mix Wet</b> - the amount of wet (processed) signal.</li>
 	<li><b>Mix Dry/Wet</b> - the knob that controls this balance between mixed dry and wet signal (see <b>Mix Dry</b> and <b>Mix Wet</b>) and the dry (unprocessed) signal.</li>
 </ul>
-
-<p><b>'Signal' section:</b></p>
-<ul>
-	<li><b>Input</b> - overall input gain.</li>
-	<li><b>Output</b> - overall output gain.</li>
-</ul>
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/src/main/meta/gate.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-gate/src/main/meta/gate.cpp
--- 1.2.21-5/modules/lsp-plugins-gate/src/main/meta/gate.cpp	2025-03-01 12:43:05.524595973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/src/main/meta/gate.cpp	2025-08-26 18:15:51.877924174 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-gate
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_GATE_VERSION_MAJOR       1
 #define LSP_PLUGINS_GATE_VERSION_MINOR       0
-#define LSP_PLUGINS_GATE_VERSION_MICRO       28
+#define LSP_PLUGINS_GATE_VERSION_MICRO       30
 
 #define LSP_PLUGINS_GATE_VERSION  \
     LSP_MODULE_VERSION( \
@@ -97,20 +97,37 @@ namespace lsp
             { NULL, NULL }
         };
 
+        #define GATE_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define GATE_SC_PREMIX \
+            GATE_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
+
         #define GATE_COMMON     \
             BYPASS,             \
             IN_GAIN,            \
             OUT_GAIN,           \
-            SWITCH("pause", "Pause graph analysis", 0.0f), \
-            TRIGGER("clear", "Clear graph analysis")
+            SWITCH("showmx", "Show mix overlay", "Show mix bar", 0.0f), \
+            SWITCH("showsc", "Show sidechain overlay", "Show SC bar", 0.0f), \
+            SWITCH("pause", "Pause graph analysis", "Pause", 0.0f), \
+            TRIGGER("clear", "Clear graph analysis", "Clear")
 
         #define GATE_MS_COMMON  \
             GATE_COMMON,        \
-            SWITCH("msl", "Mid/Side listen", 0.0f)
+            SWITCH("msl", "Mid/Side listen", "M/S listen", 0.0f)
 
         #define GATE_SPLIT_COMMON \
-            SWITCH("ssplit", "Stereo split", 0.0f), \
-            COMBO("sscs", "Split sidechain source", gate_metadata::SC_SPLIT_SOURCE_DFL, gate_sc_split_sources)
+            SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f), \
+            COMBO("sscs", "Split sidechain source", "Split SC source", gate_metadata::SC_SPLIT_SOURCE_DFL, gate_sc_split_sources)
+
+        #define GATE_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
 
         #define GATE_SHM_LINK_MONO \
             OPT_RETURN_MONO("link", "shml", "Side-chain shared memory link")
@@ -118,57 +135,57 @@ namespace lsp
         #define GATE_SHM_LINK_STEREO \
             OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
 
-        #define GATE_MONO_CHANNEL(sc_type) \
-            COMBO("sci", "Sidechain input", gate_metadata::SC_TYPE_DFL, sc_type), \
-            COMBO("scm", "Sidechain mode", gate_metadata::SC_MODE_DFL, gate_sc_modes), \
-            CONTROL("sla", "Sidechain lookahead", U_MSEC, gate_metadata::LOOKAHEAD), \
-            SWITCH("scl", "Sidechain listen", 0.0f), \
-            LOG_CONTROL("scr", "Sidechain reactivity", U_MSEC, gate_metadata::REACTIVITY), \
-            AMP_GAIN100("scp", "Sidechain preamp", GAIN_AMP_0_DB), \
-            COMBO("shpm", "High-pass filter mode", 0, gate_filter_slope),      \
-            LOG_CONTROL("shpf", "High-pass filter frequency", U_HZ, gate_metadata::HPF),   \
-            COMBO("slpm", "Low-pass filter mode", 0, gate_filter_slope),      \
-            LOG_CONTROL("slpf", "Low-pass filter frequency", U_HZ, gate_metadata::LPF)
-
-        #define GATE_STEREO_CHANNEL(id, label, sc_type) \
-            COMBO("sci" id, "Sidechain input" label, gate_metadata::SC_TYPE_DFL, sc_type), \
-            COMBO("scm" id, "Sidechain mode" label, gate_metadata::SC_MODE_DFL, gate_sc_modes), \
-            CONTROL("sla" id, "Sidechain lookahead" label, U_MSEC, gate_metadata::LOOKAHEAD), \
-            SWITCH("scl" id, "Sidechain listen" label, 0.0f), \
-            COMBO("scs" id, "Sidechain source" label, gate_metadata::SC_SOURCE_DFL, gate_sc_sources), \
-            LOG_CONTROL("scr" id, "Sidechain reactivity" label, U_MSEC, gate_metadata::REACTIVITY), \
-            AMP_GAIN100("scp" id, "Sidechain preamp" label, GAIN_AMP_0_DB), \
-            COMBO("shpm" id, "High-pass filter mode" label, 0, gate_filter_slope),      \
-            LOG_CONTROL("shpf" id, "High-pass filter frequency" label, U_HZ, gate_metadata::HPF),   \
-            COMBO("slpm" id, "Low-pass filter mode" label, 0, gate_filter_slope),      \
-            LOG_CONTROL("slpf" id, "Low-pass filter frequency" label, U_HZ, gate_metadata::LPF)
-
-        #define GATE_CHANNEL(id, label) \
-            SWITCH("gh" id, "Hysteresis" label, 0.0f), \
-            LOG_CONTROL("gt" id, "Curve threshold" label, U_GAIN_AMP, gate_metadata::THRESHOLD), \
-            LOG_CONTROL("gz" id, "Curve zone size" label, U_GAIN_AMP, gate_metadata::ZONE), \
-            LOG_CONTROL("ht" id, "Hysteresis threshold" label, U_GAIN_AMP, gate_metadata::H_THRESHOLD), \
-            LOG_CONTROL("hz" id, "Hysteresis zone size" label, U_GAIN_AMP, gate_metadata::ZONE), \
-            LOG_CONTROL("at" id, "Attack" label, U_MSEC, gate_metadata::ATTACK_TIME), \
-            LOG_CONTROL("rt" id, "Release" label, U_MSEC, gate_metadata::RELEASE_TIME), \
-            CONTROL("hold" id, "Hold time" label, U_MSEC, gate_metadata::HOLD_TIME), \
-            LOG_CONTROL("gr" id, "Reduction" label, U_GAIN_AMP, gate_metadata::REDUCTION), \
-            LOG_CONTROL("mk" id, "Makeup gain" label, U_GAIN_AMP, gate_metadata::MAKEUP), \
-            AMP_GAIN10("cdr" id, "Dry gain" label, GAIN_AMP_M_INF_DB),     \
-            AMP_GAIN10("cwt" id, "Wet gain" label, GAIN_AMP_0_DB), \
-            PERCENTS("cdw" id, "Dry/Wet balance" label, 100.0f, 0.1f), \
+        #define GATE_MONO_CHANNEL(sc_type, sct_dfl) \
+            COMBO("sci", "Sidechain input", "SC input", sct_dfl, sc_type), \
+            COMBO("scm", "Sidechain mode", "SC mode", gate_metadata::SC_MODE_DFL, gate_sc_modes), \
+            CONTROL("sla", "Sidechain lookahead", "SC look", U_MSEC, gate_metadata::LOOKAHEAD), \
+            SWITCH("scl", "Sidechain listen", "SC listen", 0.0f), \
+            LOG_CONTROL("scr", "Sidechain reactivity", "SC react", U_MSEC, gate_metadata::REACTIVITY), \
+            AMP_GAIN100("scp", "Sidechain preamp", "SC preamp", GAIN_AMP_0_DB), \
+            COMBO("shpm", "High-pass filter mode", "HPF mode", 0, gate_filter_slope),      \
+            LOG_CONTROL("shpf", "High-pass filter frequency", "HPF freq", U_HZ, gate_metadata::HPF),   \
+            COMBO("slpm", "Low-pass filter mode", "LPF mode", 0, gate_filter_slope),      \
+            LOG_CONTROL("slpf", "Low-pass filter frequency", "LPF freq", U_HZ, gate_metadata::LPF)
+
+        #define GATE_STEREO_CHANNEL(id, label, alias, sc_type, sct_dfl) \
+            COMBO("sci" id, "Sidechain input" label, "SC input" alias, sct_dfl, sc_type), \
+            COMBO("scm" id, "Sidechain mode" label, "SC mode" alias, gate_metadata::SC_MODE_DFL, gate_sc_modes), \
+            CONTROL("sla" id, "Sidechain lookahead" label, "SC look" alias, U_MSEC, gate_metadata::LOOKAHEAD), \
+            SWITCH("scl" id, "Sidechain listen" label, "SC listen" alias, 0.0f), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, gate_metadata::SC_SOURCE_DFL, gate_sc_sources), \
+            LOG_CONTROL("scr" id, "Sidechain reactivity" label, "SC react" alias, U_MSEC, gate_metadata::REACTIVITY), \
+            AMP_GAIN100("scp" id, "Sidechain preamp" label, "SC preamp" alias, GAIN_AMP_0_DB), \
+            COMBO("shpm" id, "High-pass filter mode" label, "HPF mode " alias, 0, gate_filter_slope),      \
+            LOG_CONTROL("shpf" id, "High-pass filter frequency" label, "HPF freq" alias, U_HZ, gate_metadata::HPF),   \
+            COMBO("slpm" id, "Low-pass filter mode" label, "LPF mode" alias, 0, gate_filter_slope),      \
+            LOG_CONTROL("slpf" id, "Low-pass filter frequency" label, "LPF freq" alias, U_HZ, gate_metadata::LPF)
+
+        #define GATE_CHANNEL(id, label, alias) \
+            SWITCH("gh" id, "Hysteresis" label, "Hysteresis" alias, 0.0f), \
+            LOG_CONTROL("gt" id, "Curve threshold" label, "Thresh" alias, U_GAIN_AMP, gate_metadata::THRESHOLD), \
+            LOG_CONTROL("gz" id, "Curve zone size" label, "Zone" alias, U_GAIN_AMP, gate_metadata::ZONE), \
+            LOG_CONTROL("ht" id, "Hysteresis threshold" label, "Hyst thresh" alias, U_GAIN_AMP, gate_metadata::H_THRESHOLD), \
+            LOG_CONTROL("hz" id, "Hysteresis zone size" label, "Hyst zone" alias, U_GAIN_AMP, gate_metadata::ZONE), \
+            LOG_CONTROL("at" id, "Attack" label, "Att time" alias, U_MSEC, gate_metadata::ATTACK_TIME), \
+            LOG_CONTROL("rt" id, "Release" label, "Rel time" alias, U_MSEC, gate_metadata::RELEASE_TIME), \
+            CONTROL("hold" id, "Hold time" label, "Hold time" alias, U_MSEC, gate_metadata::HOLD_TIME), \
+            LOG_CONTROL("gr" id, "Reduction" label, "Reduction" alias, U_GAIN_AMP, gate_metadata::REDUCTION), \
+            LOG_CONTROL("mk" id, "Makeup gain" label, "Makeup" alias, U_GAIN_AMP, gate_metadata::MAKEUP), \
+            AMP_GAIN10("cdr" id, "Dry gain" label, "Dry" alias, GAIN_AMP_M_INF_DB),     \
+            AMP_GAIN10("cwt" id, "Wet gain" label, "Wet" alias, GAIN_AMP_0_DB), \
+            PERCENTS("cdw" id, "Dry/Wet balance" label, "Dry/Wet" alias, 100.0f, 0.1f), \
             METER_OUT_GAIN("gzs" id, "Zone start" label, GAIN_AMP_P_24_DB), \
             METER_OUT_GAIN("hts" id, "Hysteresis threshold start" label, GAIN_AMP_P_24_DB), \
             METER_OUT_GAIN("hzs" id, "Hysteresis zone start" label, GAIN_AMP_P_24_DB), \
             MESH("cg" id, "Curve graph" label, 2, gate_metadata::CURVE_MESH_SIZE), \
             MESH("hg" id, "Hysteresis graph" label, 2, gate_metadata::CURVE_MESH_SIZE)
 
-        #define GATE_AUDIO_METER(id, label) \
-            SWITCH("slv" id, "Sidechain level visibility" label, 1.0f), \
-            SWITCH("elv" id, "Envelope level visibility" label, 1.0f), \
-            SWITCH("grv" id, "Gain reduction visibility" label, 1.0f), \
-            SWITCH("ilv" id, "Input level visibility" label, 1.0f), \
-            SWITCH("olv" id, "Output level visibility" label, 1.0f), \
+        #define GATE_AUDIO_METER(id, label, alias) \
+            SWITCH("slv" id, "Sidechain level visibility" label, "Show SC" alias, 1.0f), \
+            SWITCH("elv" id, "Envelope level visibility" label, "Show Env" alias, 1.0f), \
+            SWITCH("grv" id, "Gain reduction visibility" label, "Show Gain" alias, 1.0f), \
+            SWITCH("ilv" id, "Input level visibility" label, "Show In" alias, 1.0f), \
+            SWITCH("olv" id, "Output level visibility" label, "Show Out" alias, 1.0f), \
             MESH("scg" id, "Sidechain graph" label, 2, gate_metadata::TIME_MESH_SIZE), \
             MESH("evg" id, "Envelope graph" label, 2, gate_metadata::TIME_MESH_SIZE), \
             MESH("grg" id, "Gain reduciton graph" label, 2, gate_metadata::TIME_MESH_SIZE + 4), \
@@ -185,10 +202,11 @@ namespace lsp
         {
             PORTS_MONO_PLUGIN,
             GATE_SHM_LINK_MONO,
+            GATE_PREMIX,
             GATE_COMMON,
-            GATE_MONO_CHANNEL(gate_sc_type),
-            GATE_CHANNEL("", ""),
-            GATE_AUDIO_METER("", ""),
+            GATE_MONO_CHANNEL(gate_sc_type, 0),
+            GATE_CHANNEL("", "", ""),
+            GATE_AUDIO_METER("", "", ""),
 
             PORTS_END
         };
@@ -197,12 +215,13 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             GATE_SHM_LINK_STEREO,
+            GATE_PREMIX,
             GATE_COMMON,
             GATE_SPLIT_COMMON,
-            GATE_STEREO_CHANNEL("", "", gate_sc_type),
-            GATE_CHANNEL("", ""),
-            GATE_AUDIO_METER("_l", " Left"),
-            GATE_AUDIO_METER("_r", " Right"),
+            GATE_STEREO_CHANNEL("", "", "", gate_sc_type, 0),
+            GATE_CHANNEL("", "", ""),
+            GATE_AUDIO_METER("_l", " Left", " L"),
+            GATE_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -211,13 +230,15 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             GATE_SHM_LINK_STEREO,
+            GATE_PREMIX,
             GATE_COMMON,
-            GATE_STEREO_CHANNEL("_l", " Left", gate_sc_type),
-            GATE_STEREO_CHANNEL("_r", " Right", gate_sc_type),
-            GATE_CHANNEL("_l", " Left"),
-            GATE_CHANNEL("_r", " Right"),
-            GATE_AUDIO_METER("_l", " Left"),
-            GATE_AUDIO_METER("_r", " Right"),
+            GATE_LINK("clink", "Left/Right controls link", "L/R link"),
+            GATE_STEREO_CHANNEL("_l", " Left", " L", gate_sc_type, 0),
+            GATE_STEREO_CHANNEL("_r", " Right", " R", gate_sc_type, 0),
+            GATE_CHANNEL("_l", " Left", " L"),
+            GATE_CHANNEL("_r", " Right", " R"),
+            GATE_AUDIO_METER("_l", " Left", " L"),
+            GATE_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -226,13 +247,15 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             GATE_SHM_LINK_STEREO,
+            GATE_PREMIX,
             GATE_MS_COMMON,
-            GATE_STEREO_CHANNEL("_m", " Mid", gate_sc_type),
-            GATE_STEREO_CHANNEL("_s", " Side", gate_sc_type),
-            GATE_CHANNEL("_m", " Mid"),
-            GATE_CHANNEL("_s", " Side"),
-            GATE_AUDIO_METER("_m", " Mid"),
-            GATE_AUDIO_METER("_s", " Side"),
+            GATE_LINK("clink", "Mid/Side controls link", "M/S link"),
+            GATE_STEREO_CHANNEL("_m", " Mid", " M", gate_sc_type, 0),
+            GATE_STEREO_CHANNEL("_s", " Side", " S", gate_sc_type, 0),
+            GATE_CHANNEL("_m", " Mid", " M"),
+            GATE_CHANNEL("_s", " Side", " S"),
+            GATE_AUDIO_METER("_m", " Mid", " M"),
+            GATE_AUDIO_METER("_s", " Side", " S"),
 
             PORTS_END
         };
@@ -242,10 +265,11 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             GATE_SHM_LINK_MONO,
+            GATE_SC_PREMIX,
             GATE_COMMON,
-            GATE_MONO_CHANNEL(gate_extsc_type),
-            GATE_CHANNEL("", ""),
-            GATE_AUDIO_METER("", ""),
+            GATE_MONO_CHANNEL(gate_extsc_type, 1),
+            GATE_CHANNEL("", "", ""),
+            GATE_AUDIO_METER("", "", ""),
 
             PORTS_END
         };
@@ -255,12 +279,13 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             GATE_SHM_LINK_STEREO,
+            GATE_SC_PREMIX,
             GATE_COMMON,
             GATE_SPLIT_COMMON,
-            GATE_STEREO_CHANNEL("", "", gate_extsc_type),
-            GATE_CHANNEL("", ""),
-            GATE_AUDIO_METER("_l", " Left"),
-            GATE_AUDIO_METER("_r", " Right"),
+            GATE_STEREO_CHANNEL("", "", "", gate_extsc_type, 1),
+            GATE_CHANNEL("", "", ""),
+            GATE_AUDIO_METER("_l", " Left", " L"),
+            GATE_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -270,13 +295,15 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             GATE_SHM_LINK_STEREO,
+            GATE_SC_PREMIX,
             GATE_COMMON,
-            GATE_STEREO_CHANNEL("_l", " Left", gate_extsc_type),
-            GATE_STEREO_CHANNEL("_r", " Right", gate_extsc_type),
-            GATE_CHANNEL("_l", " Left"),
-            GATE_CHANNEL("_r", " Right"),
-            GATE_AUDIO_METER("_l", " Left"),
-            GATE_AUDIO_METER("_r", " Right"),
+            GATE_LINK("clink", "Left/Right controls link", "L/R link"),
+            GATE_STEREO_CHANNEL("_l", " Left", " L", gate_extsc_type, 1),
+            GATE_STEREO_CHANNEL("_r", " Right", " R", gate_extsc_type, 1),
+            GATE_CHANNEL("_l", " Left", " L"),
+            GATE_CHANNEL("_r", " Right", " R"),
+            GATE_AUDIO_METER("_l", " Left", " L"),
+            GATE_AUDIO_METER("_r", " Right", " R"),
 
             PORTS_END
         };
@@ -286,13 +313,15 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             GATE_SHM_LINK_STEREO,
+            GATE_SC_PREMIX,
             GATE_MS_COMMON,
-            GATE_STEREO_CHANNEL("_m", " Mid", gate_extsc_type),
-            GATE_STEREO_CHANNEL("_s", " Side", gate_extsc_type),
-            GATE_CHANNEL("_m", " Mid"),
-            GATE_CHANNEL("_s", " Side"),
-            GATE_AUDIO_METER("_m", " Mid"),
-            GATE_AUDIO_METER("_s", " Side"),
+            GATE_LINK("clink", "Mid/Side controls link", "M/S link"),
+            GATE_STEREO_CHANNEL("_m", " Mid", " M", gate_extsc_type, 1),
+            GATE_STEREO_CHANNEL("_s", " Side", " S", gate_extsc_type, 1),
+            GATE_CHANNEL("_m", " Mid", " M"),
+            GATE_CHANNEL("_s", " Side", " S"),
+            GATE_AUDIO_METER("_m", " Mid", " M"),
+            GATE_AUDIO_METER("_s", " Side", " S"),
 
             PORTS_END
         };
@@ -331,7 +360,7 @@ namespace lsp
             clap_features_mono,
             E_INLINE_DISPLAY,
             gate_mono_ports,
-            "dynamics/gate/single/mono.xml",
+            "dynamics/gate/single.xml",
             NULL,
             mono_plugin_port_groups,
             &gate_bundle
@@ -361,7 +390,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY,
             gate_stereo_ports,
-            "dynamics/gate/single/stereo.xml",
+            "dynamics/gate/single.xml",
             NULL,
             stereo_plugin_port_groups,
             &gate_bundle
@@ -391,7 +420,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY,
             gate_lr_ports,
-            "dynamics/gate/single/lr.xml",
+            "dynamics/gate/single.xml",
             NULL,
             stereo_plugin_port_groups,
             &gate_bundle
@@ -421,7 +450,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY,
             gate_ms_ports,
-            "dynamics/gate/single/ms.xml",
+            "dynamics/gate/single.xml",
             NULL,
             stereo_plugin_port_groups,
             &gate_bundle
@@ -452,7 +481,7 @@ namespace lsp
             clap_features_mono,
             E_INLINE_DISPLAY,
             sc_gate_mono_ports,
-            "dynamics/gate/single/mono.xml",
+            "dynamics/gate/single.xml",
             NULL,
             mono_plugin_sidechain_port_groups,
             &gate_bundle
@@ -482,7 +511,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY,
             sc_gate_stereo_ports,
-            "dynamics/gate/single/stereo.xml",
+            "dynamics/gate/single.xml",
             NULL,
             stereo_plugin_sidechain_port_groups,
             &gate_bundle
@@ -512,7 +541,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY,
             sc_gate_lr_ports,
-            "dynamics/gate/single/lr.xml",
+            "dynamics/gate/single.xml",
             NULL,
             stereo_plugin_sidechain_port_groups,
             &gate_bundle
@@ -542,7 +571,7 @@ namespace lsp
             clap_features_stereo,
             E_INLINE_DISPLAY,
             sc_gate_ms_ports,
-            "dynamics/gate/single/ms.xml",
+            "dynamics/gate/single.xml",
             NULL,
             stereo_plugin_sidechain_port_groups,
             &gate_bundle
diff -pruN 1.2.21-5/modules/lsp-plugins-gate/src/main/plug/gate.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-gate/src/main/plug/gate.cpp
--- 1.2.21-5/modules/lsp-plugins-gate/src/main/plug/gate.cpp	2025-03-01 12:43:05.524595973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gate/src/main/plug/gate.cpp	2025-08-26 18:15:51.877924174 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-gate
  * Created on: 3 авг. 2021 г.
@@ -28,7 +28,7 @@
 #include <lsp-plug.in/shared/debug.h>
 #include <lsp-plug.in/shared/id_colors.h>
 
-#define GATE_BUF_SIZE           0x1000
+#define GATE_BUF_SIZE           0x200
 
 namespace lsp
 {
@@ -109,6 +109,31 @@ namespace lsp
 
             pData           = NULL;
             pIDisplay       = NULL;
+
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
         }
 
         gate::~gate()
@@ -129,6 +154,7 @@ namespace lsp
             size_t allocate         = channel_size +
                                       buf_size +
                                       buf_size * channels * 5 +
+                                      buf_size * channels * 3 +
                                       curve_size +
                                       history_size;
 
@@ -141,6 +167,14 @@ namespace lsp
             vTime                   = advance_ptr_bytes<float>(ptr, history_size);
             vEmptyBuffer            = advance_ptr_bytes<float>(ptr, buf_size);
 
+            // Initialize pre-mix
+            for (size_t i=0; i<channels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, buf_size);
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, buf_size);
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, buf_size);
+            }
+
             // Initialize channels
             for (size_t i=0; i<channels; ++i)
             {
@@ -252,11 +286,26 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
             BIND_PORT(pInGain);
             BIND_PORT(pOutGain);
+            SKIP_PORT("Show mix overlay");
+            SKIP_PORT("Show sidechain overlay");
             BIND_PORT(pPause);
             BIND_PORT(pClear);
             if (nMode == GM_MS)
@@ -266,6 +315,8 @@ namespace lsp
                 BIND_PORT(pStereoSplit);
                 BIND_PORT(pScSpSource);
             }
+            if ((nMode == GM_LR) || (nMode == GM_MS))
+                SKIP_PORT("Separate channels link");
 
             // Sidechain ports
             lsp_trace("Binding sidechain ports");
@@ -564,12 +615,25 @@ namespace lsp
             return in;
         }
 
+        void gate::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void gate::update_settings()
         {
             dspu::filter_params_t fp;
             size_t channels = (nMode == GM_MONO) ? 1 : 2;
             bool bypass     = pBypass->value() >= 0.5f;
 
+            // Update pre-mix matrix
+            update_premix();
+
             // Global parameters
             bPause          = pPause->value() >= 0.5f;
             bClear          = pClear->value() >= 0.5f;
@@ -662,7 +726,7 @@ namespace lsp
                 if (c->fMakeup != makeup)
                 {
                     c->fMakeup          = makeup;
-                    c->nSync           |= S_CURVE;
+                    c->nSync           |= (hyst) ? S_CURVE : S_ALL;
                 }
             }
 
@@ -687,6 +751,120 @@ namespace lsp
             bUISync             = true;
         }
 
+        void gate::premix_channel(uint32_t channel, float * & in, float * & out, float * & sc, float * & link, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            in                      = in_buf;
+            out                     = out_buf;
+            sc                      = sc_buf;
+            link                    = link_buf;
+
+            sPremix.vIn[channel]    = &in_buf[count];
+            sPremix.vOut[channel]   = &out_buf[count];
+            if (sc_buf != NULL)
+                sPremix.vSc[channel]    = &sc_buf[count];
+            if (link_buf != NULL)
+                sPremix.vLink[channel]  = &link_buf[count];
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    in                  = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(in, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(in, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    in                  = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(in, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    sc                  = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(sc, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(sc, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    sc                  = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(sc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    link                = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(link, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(link, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    link                = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(link, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        in              = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(in, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        sc              = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(sc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(sc, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    link            = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(link, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(link, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void gate::process(size_t samples)
         {
             size_t channels = (nMode == GM_MONO) ? 1 : 2;
@@ -703,14 +881,14 @@ namespace lsp
                 channel_t *c        = &vChannels[i];
 
                 // Initialize pointers
-                in_buf[i]           = c->pIn->buffer<float>();
-                out_buf[i]          = c->pOut->buffer<float>();
-                sc_buf[i]           = (c->pSC != NULL) ? c->pSC->buffer<float>() : in_buf[i];
-                shm_buf[i]          = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pSC != NULL) ? c->pSC->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *buf = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((buf != NULL) && (buf->active()))
-                    shm_buf[i]          = buf->buffer();
+                    sPremix.vLink[i]    = buf->buffer();
 
                 c->fDotIn           = 0.0f;
                 c->fDotOut          = 0.0f;
@@ -721,7 +899,11 @@ namespace lsp
             while (left > 0)
             {
                 // Detemine number of samples to process
-                size_t to_process = (left > GATE_BUF_SIZE) ? GATE_BUF_SIZE : left;
+                const size_t to_process     = (left > GATE_BUF_SIZE) ? GATE_BUF_SIZE : left;
+
+                // Pre-mix channel data
+                for (size_t i=0; i<channels; ++i)
+                    premix_channel(i, in_buf[i], out_buf[i], sc_buf[i], shm_buf[i], to_process);
 
                 // Prepare audio channels
                 if (nMode == GM_MONO)
@@ -828,13 +1010,6 @@ namespace lsp
                     channel_t *c        = &vChannels[i];
                     c->sDryDelay.process(c->vIn, in_buf[i], to_process);
                     c->sBypass.process(out_buf[i], c->vIn, c->vOut, to_process);
-
-                    in_buf[i]          += to_process;
-                    out_buf[i]         += to_process;
-                    if (sc_buf[i] != NULL)
-                        sc_buf[i]          += to_process;
-                    if (shm_buf[i] != NULL)
-                        shm_buf[i]         += to_process;
                 }
 
                 left       -= to_process;
@@ -1184,6 +1359,32 @@ namespace lsp
             v->write("bUISync", bUISync);
             v->write("pIDisplay", pIDisplay);
 
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
+
             v->write("pBypass", pBypass);
             v->write("pInGain", pInGain);
             v->write("pOutGain", pOutGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/.github/workflows/build.yml	2025-03-01 12:43:05.416596620 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/.github/workflows/build.yml	2025-08-26 18:16:03.017816058 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/CHANGELOG	2025-03-01 12:43:05.416596620 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/CHANGELOG	2025-08-26 18:16:03.017816058 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.15 ===
+* Added left/right and mid/side linking in the UI.
+* Added audio pre-mixing controls.
+* Updated build scripts and dependencies.
+
+=== 1.0.14 ===
+* Updated build scripts and dependencies.
+
 === 1.0.13 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/dependencies.mk	2025-03-01 12:43:05.416596620 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/dependencies.mk	2025-08-26 18:16:03.017816058 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/include/private/plugins/gott_compressor.h 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/include/private/plugins/gott_compressor.h
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/include/private/plugins/gott_compressor.h	2025-03-01 12:43:05.420596597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/include/private/plugins/gott_compressor.h	2025-08-26 18:16:03.017816058 +0000
@@ -80,6 +80,32 @@ namespace lsp
                     SCT_LINK
                 };
 
+                typedef struct premix_t
+                {
+                    float               fInToSc;                // Input -> Sidechain mix
+                    float               fInToLink;              // Input -> Link mix
+                    float               fLinkToIn;              // Link -> Input mix
+                    float               fLinkToSc;              // Link -> Sidechain mix
+                    float               fScToIn;                // Sidechain -> Input mix
+                    float               fScToLink;              // Sidechain -> Link mix
+
+                    float              *vIn[2];                 // Input buffer
+                    float              *vOut[2];                // Output buffer
+                    float              *vSc[2];                 // Sidechain buffer
+                    float              *vLink[2];               // Link buffer
+
+                    float              *vTmpIn[2];              // Replacement buffer for input
+                    float              *vTmpLink[2];            // Replacement buffer for link
+                    float              *vTmpSc[2];              // Replacement buffer for sidechain
+
+                    plug::IPort        *pInToSc;                // Input -> Sidechain mix
+                    plug::IPort        *pInToLink;              // Input -> Link mix
+                    plug::IPort        *pLinkToIn;              // Link -> Input mix
+                    plug::IPort        *pLinkToSc;              // Link -> Sidechain mix
+                    plug::IPort        *pScToIn;                // Sidechain -> Input mix
+                    plug::IPort        *pScToLink;              // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct band_t
                 {
                     dspu::Sidechain         sSC;                // Sidechain module
@@ -180,6 +206,7 @@ namespace lsp
                 dspu::Sidechain         sProtSC;                // Surge protector sidechain module
                 dspu::SurgeProtector    sProt;                  // Surge protector
                 dspu::Counter           sCounter;               // Sync counter
+                premix_t                sPremix;                // Premix
 
                 uint32_t                nMode;                  // Processor mode
                 uint32_t                nBands;                 // Number of bands
@@ -198,7 +225,6 @@ namespace lsp
                 float                   vSplits[meta::gott_compressor::BANDS_MAX - 1];  // Split frequencies
                 channel_t              *vChannels;              // Processor channels
                 float                  *vAnalyze[4];            // Analysis buffer
-                float                  *vEmptyBuf;              // Empty buffer
                 float                  *vBuffer;                // Temporary buffer
                 float                  *vProtBuffer;            // Surge protection buffer
                 const float            *vSCIn[2];               // Sidechain input buffers
@@ -245,6 +271,7 @@ namespace lsp
             protected:
                 uint32_t            decode_sidechain_type(uint32_t sc) const;
                 void                process_sidechain(size_t samples);
+                void                update_premix();
                 void                do_destroy();
 
             public:
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/make/tools.mk	2025-03-01 12:43:05.420596597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/make/tools.mk	2025-08-26 18:16:03.017816058 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/modules.mk
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/modules.mk	2025-03-01 12:43:05.420596597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/modules.mk	2025-08-26 18:16:03.017816058 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/project.mk
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/project.mk	2025-03-01 12:43:05.420596597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/project.mk	2025-08-26 18:16:03.021816019 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP GOTT Compressor Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.13
+ARTIFACT_VERSION            = 1.0.15
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-gott-compressor/res/doc/screenshots/gott_compressor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/doc/screenshots/gott_compressor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gott-compressor/res/doc/screenshots/gott_compressor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/doc/screenshots/gott_compressor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gott-compressor/res/doc/screenshots/gott_compressor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/doc/screenshots/gott_compressor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gott-compressor/res/doc/screenshots/gott_compressor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/doc/screenshots/gott_compressor_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gott-compressor/res/doc/screenshots/sc_gott_compressor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/doc/screenshots/sc_gott_compressor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gott-compressor/res/doc/screenshots/sc_gott_compressor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/doc/screenshots/sc_gott_compressor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gott-compressor/res/doc/screenshots/sc_gott_compressor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/doc/screenshots/sc_gott_compressor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-gott-compressor/res/doc/screenshots/sc_gott_compressor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/doc/screenshots/sc_gott_compressor_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/lr.xml
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/lr.xml	2025-03-01 12:43:05.428596549 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/lr.xml	2025-08-26 18:16:03.033815901 +0000
@@ -1,8 +1,21 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
 	<ui:set id="has_solo" value="
 		(:bs_1l or :bs_2l or :bs_3l or (:ebe and :bs_4l)) or
 		(:bs_1r or :bs_2r or :bs_3r or (:ebe and :bs_4r))"/>
 
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'tm'; 'tu'; 'td'; 'ru'; 'rd'; 'kn'; 'ta'; 'tr'; 'mk'; 'be'; 'bs'; 'bm'">
+		<ui:for id="i" first="1" count="4">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="6" vspacing="4" hspacing="4" expand="true">
 
@@ -339,7 +352,9 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
 				<void hexpand="true"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
@@ -744,4 +759,43 @@
 			</cell>
 		</grid>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/mono.xml
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/mono.xml	2025-03-01 12:43:05.428596549 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/mono.xml	2025-08-26 18:16:03.033815901 +0000
@@ -1,4 +1,5 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
 	<ui:set id="has_solo" value="
 		:bs_1 or :bs_2 or :bs_3 or (:ebe and :bs_4)"/>
 
@@ -311,6 +312,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
 				<void hexpand="true"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
@@ -707,4 +709,43 @@
 			</cell>
 		</grid>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/ms.xml
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/ms.xml	2025-03-01 12:43:05.428596549 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/ms.xml	2025-08-26 18:16:03.033815901 +0000
@@ -1,8 +1,21 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
 	<ui:set id="has_solo" value="
 		(:bs_1m or :bs_2m or :bs_3m or (:ebe and :bs_4m)) or
 		(:bs_1s or :bs_2s or :bs_3s or (:ebe and :bs_4s))"/>
 
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'tm'; 'tu'; 'td'; 'ru'; 'rd'; 'kn'; 'ta'; 'tr'; 'mk'; 'be'; 'bs'; 'bm'">
+		<ui:for id="i" first="1" count="4">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+
 	<vbox spacing="4">
 		<grid rows="2" cols="6" vspacing="4" hspacing="4" expand="true">
 
@@ -339,7 +352,9 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
 				<void hexpand="true"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
@@ -744,4 +759,43 @@
 			</cell>
 		</grid>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/stereo.xml	2025-03-01 12:43:05.428596549 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/res/main/ui/dynamics/gott_compressor/stereo.xml	2025-08-26 18:16:03.033815901 +0000
@@ -1,4 +1,5 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
 	<ui:set id="has_solo" value="
 		:bs_1 or :bs_2 or :bs_3 or (:ebe and :bs_4)"/>
 
@@ -323,6 +324,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
 				<void hexpand="true"/>
 				<button id="ssplit" text="labels.stereo_split" size="22" ui:inject="Button_blue" pad.r="2"/>
@@ -724,4 +726,43 @@
 			</cell>
 		</grid>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/src/doc/manuals/plugins/gott_compressor.php 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/src/doc/manuals/plugins/gott_compressor.php
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/src/doc/manuals/plugins/gott_compressor.php	2025-03-01 12:43:05.428596549 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/src/doc/manuals/plugins/gott_compressor.php	2025-08-26 18:16:03.033815901 +0000
@@ -33,7 +33,7 @@
 	<ul>
 		<li>Unlike classic crossovers which use IIR (Infinite Impulse Response) filters to split signal into multiple bands and shift the phase
 		of the audio signal at band split points, the <b>Linear Phase</b> allows to use FIR (Finite Impulse Response) filters which are deprived of this.
-		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their tranfer function
+		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their transfer function
 		to look like the transfer function of analog filters, without deforming it's magnitude envelope near the nyquist frequency.</li>
 		<li>Unlike design of classic Linkwitz-Riley filters, the design of IIR filters provides shorter transition zone of the filter.</li>
 	</ul>
@@ -85,7 +85,12 @@
 		<?php } ?>
 		<li><b>Link</b> - the shared memory link is used to receive sidechain signal.</li>
 	</ul>
-	<?php if ($sc) { ?>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
+	<?php if ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
+	<?php } elseif ($m == 'ms') { ?>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
+	<?php } elseif ($m == 's') { ?>
 	<li><b>Stereo Split</b> - enables independent compression of left and right channels.</li>
 	<?php } ?>
 </ul>
@@ -95,7 +100,7 @@
 	<li><b>Shift</b> - allows to adjust the overall gain of the analysis.</li>
 	<li><b>FFT<?= $sm ?> In</b> - enables FFT curve graph of input signal on the spectrum graph.</li>
 	<li><b>FFT<?= $sm ?> Out</b> - enables FFT curve graph of output signal on the spectrum graph.</li>
-	<li><b>Filters</b> - enables drawing tranfer function of each sidechain filter on the spectrum graph.</li>
+	<li><b>Filters</b> - enables drawing transfer function of each sidechain filter on the spectrum graph.</li>
 	<li><b>Surge</b> - enables surge protection mechanism.</li>
 </ul>
 <p><b>'Signal' section:</b></p>
@@ -146,9 +151,9 @@
 	<li><b>ON</b> - enables extra band.</li>
 	<li><b>Frequency</b> - the knob that allows to control the split frequency between bands.</li>
 	<li><b>Bottom</b> - the bottom threshold, below which any upward compression is disabled.</li>
-	<li><b>Upward theshold</b> - the threshold, below which the upward compression starts working.</li>
+	<li><b>Upward threshold</b> - the threshold, below which the upward compression starts working.</li>
 	<li><b>Upward ratio</b> - the ratio of the upward compression.</li>
-	<li><b>Downward theshold</b> - the threshold, above which the downward compression starts working.</li>
+	<li><b>Downward threshold</b> - the threshold, above which the downward compression starts working.</li>
 	<li><b>Downward ratio</b> - the ratio of the downward compression.</li>
 	<li><b>Attack</b> - the compressor's attack time.</li>
 	<li><b>Release</b> - the compressor's release time.</li>
@@ -157,5 +162,17 @@
 	<li><b>Compression curve</b> - the compression curve graph and the gain reduction meter.</li>
 </ul>
 
-
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/src/main/meta/gott_compressor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/src/main/meta/gott_compressor.cpp
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/src/main/meta/gott_compressor.cpp	2025-03-01 12:43:05.428596549 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/src/main/meta/gott_compressor.cpp	2025-08-26 18:16:03.033815901 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-gott-compressor
  * Created on: 29 мая 2023 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_GOTT_COMPRESSOR_VERSION_MAJOR       1
 #define LSP_PLUGINS_GOTT_COMPRESSOR_VERSION_MINOR       0
-#define LSP_PLUGINS_GOTT_COMPRESSOR_VERSION_MICRO       13
+#define LSP_PLUGINS_GOTT_COMPRESSOR_VERSION_MICRO       15
 
 #define LSP_PLUGINS_GOTT_COMPRESSOR_VERSION  \
     LSP_MODULE_VERSION( \
@@ -127,43 +127,58 @@ namespace lsp
 
         #define GOTT_BASE \
             BYPASS, \
-            COMBO("mode", "Operating mode", 1, gott_global_dyna_modes), \
-            SWITCH("prot", "Surge protection", 1.0f), \
-            AMP_GAIN("g_in", "Input gain", gott_compressor::IN_GAIN_DFL, 10.0f), \
-            AMP_GAIN("g_out", "Output gain", gott_compressor::OUT_GAIN_DFL, 10.0f), \
-            AMP_GAIN("g_dry", "Dry gain", 0.0f, 10.0f), \
-            AMP_GAIN("g_wet", "Wet gain", 1.0f, 10.0f), \
-            PERCENTS("drywet", "Dry/Wet balance", 100.0f, 0.1f), \
-            COMBO("sc_mode", "Sidechain mode", gott_compressor::SC_MODE_DFL, gott_sc_modes), \
-            COMBO("sc_src", "Sidechain source", 0, gott_sc_sources), \
-            AMP_GAIN("sc_pamp", "Sidechain pre-amplification", 1.0f, 10.0f), \
-            LOG_CONTROL("sc_rea", "Sidechain reactivity", U_MSEC, gott_compressor::SC_REACTIVITY), \
-            CONTROL("lkahead", "Lookahead", U_MSEC, gott_compressor::LOOKAHEAD), \
-            LOG_CONTROL("react", "FFT reactivity", U_MSEC, gott_compressor::REACT_TIME), \
-            AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \
-            LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, gott_compressor::ZOOM), \
-            COMBO("envb", "Envelope boost", gott_compressor::FB_DEFAULT, gott_dyna_sc_boost), \
-            LOG_CONTROL("sf1", "Split frequency 1", U_HZ, gott_compressor::SPLIT1), \
-            LOG_CONTROL("sf2", "Split frequency 2", U_HZ, gott_compressor::SPLIT2), \
-            LOG_CONTROL("sf3", "Split frequency 3", U_HZ, gott_compressor::SPLIT3), \
-            SWITCH("flt", "Band filter curves", 1.0f), \
-            SWITCH("ebe", "Enable extra band", 0)
+            COMBO("mode", "Operating mode", "Mode", 1, gott_global_dyna_modes), \
+            SWITCH("prot", "Surge protection", "Surge protect", 1.0f), \
+            AMP_GAIN("g_in", "Input gain", "Input gain", gott_compressor::IN_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_out", "Output gain", "Output gain", gott_compressor::OUT_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_dry", "Dry gain", "Dry", 0.0f, 10.0f), \
+            AMP_GAIN("g_wet", "Wet gain", "Wet", 1.0f, 10.0f), \
+            PERCENTS("drywet", "Dry/Wet balance", "Dry/Wet", 100.0f, 0.1f), \
+            COMBO("sc_mode", "Sidechain mode", "SC mode", gott_compressor::SC_MODE_DFL, gott_sc_modes), \
+            COMBO("sc_src", "Sidechain source", "SC source", 0, gott_sc_sources), \
+            AMP_GAIN("sc_pamp", "Sidechain pre-amplification", "SC preamp", 1.0f, 10.0f), \
+            LOG_CONTROL("sc_rea", "Sidechain reactivity", "SC react", U_MSEC, gott_compressor::SC_REACTIVITY), \
+            CONTROL("lkahead", "Lookahead", "Lookahead", U_MSEC, gott_compressor::LOOKAHEAD), \
+            LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, gott_compressor::REACT_TIME), \
+            AMP_GAIN("shift", "Shift gain", "Shift", 1.0f, 100.0f), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, gott_compressor::ZOOM), \
+            COMBO("envb", "Envelope boost", "Env boost", gott_compressor::FB_DEFAULT, gott_dyna_sc_boost), \
+            LOG_CONTROL("sf1", "Split frequency 1", "Split 1", U_HZ, gott_compressor::SPLIT1), \
+            LOG_CONTROL("sf2", "Split frequency 2", "Split 2", U_HZ, gott_compressor::SPLIT2), \
+            LOG_CONTROL("sf3", "Split frequency 3", "Split 3", U_HZ, gott_compressor::SPLIT3), \
+            SWITCH("flt", "Band filter curves", "Show filters", 1.0f), \
+            SWITCH("ebe", "Enable extra band", "Extra band on", 0)
+
+        #define GOTT_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define GOTT_SC_PREMIX \
+            GOTT_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
 
         #define GOTT_COMMON \
             GOTT_BASE, \
-            COMBO("sc_ext", "External sidechain source", 0, gott_sc_source)
+            COMBO("sc_ext", "External sidechain source", "Ext SC source", 0, gott_sc_source)
 
         #define GOTT_SC_COMMON \
             GOTT_BASE, \
-            COMBO("sc_ext", "External sidechain source", 0, gott_sc_source_for_sc)
+            COMBO("sc_ext", "External sidechain source", "Ext SC source", 0, gott_sc_source_for_sc)
 
         #define GOTT_SPLIT_COMMON \
-            SWITCH("ssplit", "Stereo split", 0.0f), \
-            COMBO("sp_src", "Split sidechain source", 0, gott_sc_split_source)
+            SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f), \
+            COMBO("sp_src", "Split sidechain source", "Split SC source", 0, gott_sc_split_source)
 
-        #define GOTT_ANALYSIS(id, label) \
-            SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-            SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
+        #define GOTT_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
+
+        #define GOTT_ANALYSIS(id, label, alias) \
+            SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+            SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
             MESH("ifg" id, "Input FFT graph" label, 2, gott_compressor::FFT_MESH_POINTS + 2), \
             MESH("ofg" id, "Output FFT graph" label, 2, gott_compressor::FFT_MESH_POINTS)
 
@@ -174,19 +189,19 @@ namespace lsp
             METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
             METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB)
 
-        #define GOTT_BAND(id, label) \
-            LOG_CONTROL("tm" id, "Minimum threshold" label, U_GAIN_AMP, gott_compressor::THRESH_MIN), \
-            LOG_CONTROL("tu" id, "Upward threshold" label, U_GAIN_AMP, gott_compressor::THRESH_UP), \
-            LOG_CONTROL("td" id, "Downward threshold" label, U_GAIN_AMP, gott_compressor::THRESH_DOWN), \
-            LOG_CONTROL("ru" id, "Upward ratio" label, U_NONE, gott_compressor::RATIO_UP), \
-            LOG_CONTROL("rd" id, "Downward ratio" label, U_NONE, gott_compressor::RATIO_DOWN), \
-            LOG_CONTROL("kn" id, "Knee" label, U_GAIN_AMP, gott_compressor::KNEE), \
-            LOG_CONTROL("ta" id, "Attack time" label, U_MSEC, gott_compressor::ATTACK_TIME), \
-            LOG_CONTROL("tr" id, "Release time" label, U_MSEC, gott_compressor::RELEASE_TIME), \
-            LOG_CONTROL("mk" id, "Makeup gain" label, U_GAIN_AMP, gott_compressor::MAKEUP), \
-            SWITCH("be" id, "Enable compressor on the band" label, 1.0f), \
-            SWITCH("bs" id, "Solo band" label, 0.0f), \
-            SWITCH("bm" id, "Mute band" label, 0.0f), \
+        #define GOTT_BAND(id, label, alias) \
+            LOG_CONTROL("tm" id, "Minimum threshold" label, "Min thresh" alias, U_GAIN_AMP, gott_compressor::THRESH_MIN), \
+            LOG_CONTROL("tu" id, "Upward threshold" label, "Up thresh" alias, U_GAIN_AMP, gott_compressor::THRESH_UP), \
+            LOG_CONTROL("td" id, "Downward threshold" label, "Down thresh" alias, U_GAIN_AMP, gott_compressor::THRESH_DOWN), \
+            LOG_CONTROL("ru" id, "Upward ratio" label, "Up ratio" alias, U_NONE, gott_compressor::RATIO_UP), \
+            LOG_CONTROL("rd" id, "Downward ratio" label, "Down ratio" alias, U_NONE, gott_compressor::RATIO_DOWN), \
+            LOG_CONTROL("kn" id, "Knee" label, "Knee" alias, U_GAIN_AMP, gott_compressor::KNEE), \
+            LOG_CONTROL("ta" id, "Attack time" label, "Att time" alias, U_MSEC, gott_compressor::ATTACK_TIME), \
+            LOG_CONTROL("tr" id, "Release time" label, "Rel time" alias, U_MSEC, gott_compressor::RELEASE_TIME), \
+            LOG_CONTROL("mk" id, "Makeup gain" label, "Makeup" alias, U_GAIN_AMP, gott_compressor::MAKEUP), \
+            SWITCH("be" id, "Enable compressor on the band" label, "On " alias, 1.0f), \
+            SWITCH("bs" id, "Solo band" label, "Solo " alias, 0.0f), \
+            SWITCH("bm" id, "Mute band" label, "Mute " alias, 0.0f), \
             MESH("ccg" id, "Compression curve graph" label, 2, gott_compressor::CURVE_MESH_SIZE), \
             MESH("bfc" id, "Band frequency chart" label, 2, gott_compressor::FILTER_MESH_POINTS)
 
@@ -199,19 +214,20 @@ namespace lsp
         {
             PORTS_MONO_PLUGIN,
             GOTT_SHM_LINK_MONO,
+            GOTT_PREMIX,
             GOTT_COMMON,
 
-            GOTT_BAND("_1", ""),
-            GOTT_BAND("_2", ""),
-            GOTT_BAND("_3", ""),
-            GOTT_BAND("_4", ""),
-
-            GOTT_BAND_METERS("_1", ""),
-            GOTT_BAND_METERS("_2", ""),
-            GOTT_BAND_METERS("_3", ""),
-            GOTT_BAND_METERS("_4", ""),
+            GOTT_BAND("_1", " 1", " 1"),
+            GOTT_BAND("_2", " 2", " 2"),
+            GOTT_BAND("_3", " 3", " 3"),
+            GOTT_BAND("_4", " 4", " 4"),
+
+            GOTT_BAND_METERS("_1", " 1"),
+            GOTT_BAND_METERS("_2", " 2"),
+            GOTT_BAND_METERS("_3", " 3"),
+            GOTT_BAND_METERS("_4", " 4"),
 
-            GOTT_ANALYSIS("", ""),
+            GOTT_ANALYSIS("", "", ""),
             GOTT_METERS("", ""),
             GOTT_AMP_CURVE("", ""),
             PORTS_END
@@ -221,26 +237,27 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             GOTT_SHM_LINK_STEREO,
+            GOTT_PREMIX,
             GOTT_COMMON,
             GOTT_SPLIT_COMMON,
 
-            GOTT_BAND("_1", ""),
-            GOTT_BAND("_2", ""),
-            GOTT_BAND("_3", ""),
-            GOTT_BAND("_4", ""),
-
-            GOTT_BAND_METERS("_1l", " Left"),
-            GOTT_BAND_METERS("_2l", " Left"),
-            GOTT_BAND_METERS("_3l", " Left"),
-            GOTT_BAND_METERS("_4l", " Left"),
-            GOTT_BAND_METERS("_1r", " Right"),
-            GOTT_BAND_METERS("_2r", " Right"),
-            GOTT_BAND_METERS("_3r", " Right"),
-            GOTT_BAND_METERS("_4r", " Right"),
+            GOTT_BAND("_1", " 1", " 1"),
+            GOTT_BAND("_2", " 2", " 2"),
+            GOTT_BAND("_3", " 3", " 3"),
+            GOTT_BAND("_4", " 4", " 4"),
+
+            GOTT_BAND_METERS("_1l", " 1 Left"),
+            GOTT_BAND_METERS("_2l", " 2 Left"),
+            GOTT_BAND_METERS("_3l", " 3 Left"),
+            GOTT_BAND_METERS("_4l", " 4 Left"),
+            GOTT_BAND_METERS("_1r", " 1 Right"),
+            GOTT_BAND_METERS("_2r", " 2 Right"),
+            GOTT_BAND_METERS("_3r", " 3 Right"),
+            GOTT_BAND_METERS("_4r", " 4 Right"),
 
-            GOTT_ANALYSIS("_l", " Left"),
+            GOTT_ANALYSIS("_l", " Left", " L"),
             GOTT_METERS("_l", " Left"),
-            GOTT_ANALYSIS("_r", " Right"),
+            GOTT_ANALYSIS("_r", " Right", " R"),
             GOTT_METERS("_r", " Right"),
             GOTT_AMP_CURVE("_l", " Left"),
             GOTT_AMP_CURVE("_r", " Right"),
@@ -251,30 +268,32 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             GOTT_SHM_LINK_STEREO,
+            GOTT_PREMIX,
             GOTT_COMMON,
-            COMBO("csel", "Channel selector", 0, gott_lr_selectors),
+            COMBO("csel", "Channel selector", "Channel select", 0, gott_lr_selectors),
+            GOTT_LINK("clink", "Left/Right controls link", "L/R link"),
 
-            GOTT_BAND("_1l", " Left"),
-            GOTT_BAND("_2l", " Left"),
-            GOTT_BAND("_3l", " Left"),
-            GOTT_BAND("_4l", " Left"),
-            GOTT_BAND("_1r", " Right"),
-            GOTT_BAND("_2r", " Right"),
-            GOTT_BAND("_3r", " Right"),
-            GOTT_BAND("_4r", " Right"),
-
-            GOTT_BAND_METERS("_1l", " Left"),
-            GOTT_BAND_METERS("_2l", " Left"),
-            GOTT_BAND_METERS("_3l", " Left"),
-            GOTT_BAND_METERS("_4l", " Left"),
-            GOTT_BAND_METERS("_1r", " Right"),
-            GOTT_BAND_METERS("_2r", " Right"),
-            GOTT_BAND_METERS("_3r", " Right"),
-            GOTT_BAND_METERS("_4r", " Right"),
+            GOTT_BAND("_1l", " 1 Left", " 1 L"),
+            GOTT_BAND("_2l", " 2 Left", " 2 L"),
+            GOTT_BAND("_3l", " 3 Left", " 3 L"),
+            GOTT_BAND("_4l", " 4 Left", " 4 L"),
+            GOTT_BAND("_1r", " 1 Right", " 1 R"),
+            GOTT_BAND("_2r", " 2 Right", " 2 R"),
+            GOTT_BAND("_3r", " 3 Right", " 3 R"),
+            GOTT_BAND("_4r", " 4 Right", " 4 R"),
+
+            GOTT_BAND_METERS("_1l", " 1 Left"),
+            GOTT_BAND_METERS("_2l", " 2 Left"),
+            GOTT_BAND_METERS("_3l", " 3 Left"),
+            GOTT_BAND_METERS("_4l", " 4 Left"),
+            GOTT_BAND_METERS("_1r", " 1 Right"),
+            GOTT_BAND_METERS("_2r", " 2 Right"),
+            GOTT_BAND_METERS("_3r", " 3 Right"),
+            GOTT_BAND_METERS("_4r", " 4 Right"),
 
-            GOTT_ANALYSIS("_l", " Left"),
+            GOTT_ANALYSIS("_l", " Left", " L"),
             GOTT_METERS("_l", " Left"),
-            GOTT_ANALYSIS("_r", " Right"),
+            GOTT_ANALYSIS("_r", " Right", " R"),
             GOTT_METERS("_r", " Right"),
             GOTT_AMP_CURVE("_l", " Left"),
             GOTT_AMP_CURVE("_r", " Right"),
@@ -285,30 +304,32 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             GOTT_SHM_LINK_STEREO,
+            GOTT_PREMIX,
             GOTT_COMMON,
-            COMBO("csel", "Channel selector", 0, gott_ms_selectors),
+            COMBO("csel", "Channel selector", "Channel select", 0, gott_ms_selectors),
+            GOTT_LINK("clink", "Mid/Sidde controls link", "M/S link"),
 
-            GOTT_BAND("_1m", " Mid"),
-            GOTT_BAND("_2m", " Mid"),
-            GOTT_BAND("_3m", " Mid"),
-            GOTT_BAND("_4m", " Mid"),
-            GOTT_BAND("_1s", " Side"),
-            GOTT_BAND("_2s", " Side"),
-            GOTT_BAND("_3s", " Side"),
-            GOTT_BAND("_4s", " Side"),
-
-            GOTT_BAND_METERS("_1m", " Mid"),
-            GOTT_BAND_METERS("_2m", " Mid"),
-            GOTT_BAND_METERS("_3m", " Mid"),
-            GOTT_BAND_METERS("_4m", " Mid"),
-            GOTT_BAND_METERS("_1s", " Side"),
-            GOTT_BAND_METERS("_2s", " Side"),
-            GOTT_BAND_METERS("_3s", " Side"),
-            GOTT_BAND_METERS("_4s", " Side"),
+            GOTT_BAND("_1m", " 1 Mid", " 1 M"),
+            GOTT_BAND("_2m", " 2 Mid", " 2 M"),
+            GOTT_BAND("_3m", " 3 Mid", " 3 M"),
+            GOTT_BAND("_4m", " 4 Mid", " 4 M"),
+            GOTT_BAND("_1s", " 1 Side", " 1 S"),
+            GOTT_BAND("_2s", " 2 Side", " 2 S"),
+            GOTT_BAND("_3s", " 3 Side", " 3 S"),
+            GOTT_BAND("_4s", " 4 Side", " 4 S"),
+
+            GOTT_BAND_METERS("_1m", " 1 Mid"),
+            GOTT_BAND_METERS("_2m", " 2 Mid"),
+            GOTT_BAND_METERS("_3m", " 3 Mid"),
+            GOTT_BAND_METERS("_4m", " 4 Mid"),
+            GOTT_BAND_METERS("_1s", " 1 Side"),
+            GOTT_BAND_METERS("_2s", " 2 Side"),
+            GOTT_BAND_METERS("_3s", " 3 Side"),
+            GOTT_BAND_METERS("_4s", " 4 Side"),
 
-            GOTT_ANALYSIS("_m", " Mid"),
+            GOTT_ANALYSIS("_m", " Mid", " M"),
             GOTT_METERS("_l", " Left"),
-            GOTT_ANALYSIS("_s", " Side"),
+            GOTT_ANALYSIS("_s", " Side", " S"),
             GOTT_METERS("_r", " Right"),
             GOTT_AMP_CURVE("_m", " Mid"),
             GOTT_AMP_CURVE("_s", " Side"),
@@ -320,19 +341,20 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             GOTT_SHM_LINK_MONO,
+            GOTT_SC_PREMIX,
             GOTT_SC_COMMON,
 
-            GOTT_BAND("_1", ""),
-            GOTT_BAND("_2", ""),
-            GOTT_BAND("_3", ""),
-            GOTT_BAND("_4", ""),
-
-            GOTT_BAND_METERS("_1", ""),
-            GOTT_BAND_METERS("_2", ""),
-            GOTT_BAND_METERS("_3", ""),
-            GOTT_BAND_METERS("_4", ""),
+            GOTT_BAND("_1", " 1", " 1"),
+            GOTT_BAND("_2", " 2", " 2"),
+            GOTT_BAND("_3", " 3", " 3"),
+            GOTT_BAND("_4", " 4", " 4"),
+
+            GOTT_BAND_METERS("_1", " 1"),
+            GOTT_BAND_METERS("_2", " 2"),
+            GOTT_BAND_METERS("_3", " 3"),
+            GOTT_BAND_METERS("_4", " 4"),
 
-            GOTT_ANALYSIS("", ""),
+            GOTT_ANALYSIS("", "", ""),
             GOTT_METERS("", ""),
             GOTT_AMP_CURVE("", ""),
             PORTS_END
@@ -343,26 +365,27 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             GOTT_SHM_LINK_STEREO,
+            GOTT_SC_PREMIX,
             GOTT_SC_COMMON,
             GOTT_SPLIT_COMMON,
 
-            GOTT_BAND("_1", ""),
-            GOTT_BAND("_2", ""),
-            GOTT_BAND("_3", ""),
-            GOTT_BAND("_4", ""),
-
-            GOTT_BAND_METERS("_1l", " Left"),
-            GOTT_BAND_METERS("_2l", " Left"),
-            GOTT_BAND_METERS("_3l", " Left"),
-            GOTT_BAND_METERS("_4l", " Left"),
-            GOTT_BAND_METERS("_1r", " Right"),
-            GOTT_BAND_METERS("_2r", " Right"),
-            GOTT_BAND_METERS("_3r", " Right"),
-            GOTT_BAND_METERS("_4r", " Right"),
+            GOTT_BAND("_1", " 1", " 1"),
+            GOTT_BAND("_2", " 2", " 2"),
+            GOTT_BAND("_3", " 3", " 3"),
+            GOTT_BAND("_4", " 4", " 4"),
+
+            GOTT_BAND_METERS("_1l", " 1 Left"),
+            GOTT_BAND_METERS("_2l", " 2 Left"),
+            GOTT_BAND_METERS("_3l", " 3 Left"),
+            GOTT_BAND_METERS("_4l", " 4 Left"),
+            GOTT_BAND_METERS("_1r", " 1 Right"),
+            GOTT_BAND_METERS("_2r", " 2 Right"),
+            GOTT_BAND_METERS("_3r", " 3 Right"),
+            GOTT_BAND_METERS("_4r", " 4 Right"),
 
-            GOTT_ANALYSIS("_l", " Left"),
+            GOTT_ANALYSIS("_l", " Left", " L"),
             GOTT_METERS("_l", " Left"),
-            GOTT_ANALYSIS("_r", " Right"),
+            GOTT_ANALYSIS("_r", " Right", " R"),
             GOTT_METERS("_r", " Right"),
             GOTT_AMP_CURVE("_l", " Left"),
             GOTT_AMP_CURVE("_r", " Right"),
@@ -374,30 +397,32 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             GOTT_SHM_LINK_STEREO,
+            GOTT_SC_PREMIX,
             GOTT_SC_COMMON,
-            COMBO("csel", "Channel selector", 0, gott_lr_selectors),
+            COMBO("csel", "Channel selector", "Channel select", 0, gott_lr_selectors),
+            GOTT_LINK("clink", "Left/Right controls link", "L/R link"),
 
-            GOTT_BAND("_1l", " Left"),
-            GOTT_BAND("_2l", " Left"),
-            GOTT_BAND("_3l", " Left"),
-            GOTT_BAND("_4l", " Left"),
-            GOTT_BAND("_1r", " Right"),
-            GOTT_BAND("_2r", " Right"),
-            GOTT_BAND("_3r", " Right"),
-            GOTT_BAND("_4r", " Right"),
-
-            GOTT_BAND_METERS("_1l", " Left"),
-            GOTT_BAND_METERS("_2l", " Left"),
-            GOTT_BAND_METERS("_3l", " Left"),
-            GOTT_BAND_METERS("_4l", " Left"),
-            GOTT_BAND_METERS("_1r", " Right"),
-            GOTT_BAND_METERS("_2r", " Right"),
-            GOTT_BAND_METERS("_3r", " Right"),
-            GOTT_BAND_METERS("_4r", " Right"),
+            GOTT_BAND("_1l", " 1 Left", "1 L"),
+            GOTT_BAND("_2l", " 2 Left", "2 L"),
+            GOTT_BAND("_3l", " 3 Left", "3 L"),
+            GOTT_BAND("_4l", " 4 Left", "4 L"),
+            GOTT_BAND("_1r", " 1 Right", "1 R"),
+            GOTT_BAND("_2r", " 2 Right", "2 R"),
+            GOTT_BAND("_3r", " 3 Right", "3 R"),
+            GOTT_BAND("_4r", " 4 Right", "4 R"),
+
+            GOTT_BAND_METERS("_1l", " 1 Left"),
+            GOTT_BAND_METERS("_2l", " 2 Left"),
+            GOTT_BAND_METERS("_3l", " 3 Left"),
+            GOTT_BAND_METERS("_4l", " 4 Left"),
+            GOTT_BAND_METERS("_1r", " 1 Right"),
+            GOTT_BAND_METERS("_2r", " 2 Right"),
+            GOTT_BAND_METERS("_3r", " 3 Right"),
+            GOTT_BAND_METERS("_4r", " 4 Right"),
 
-            GOTT_ANALYSIS("_l", " Left"),
+            GOTT_ANALYSIS("_l", " Left", " L"),
             GOTT_METERS("_l", " Left"),
-            GOTT_ANALYSIS("_r", " Right"),
+            GOTT_ANALYSIS("_r", " Right", " R"),
             GOTT_METERS("_r", " Right"),
             GOTT_AMP_CURVE("_l", " Left"),
             GOTT_AMP_CURVE("_r", " Right"),
@@ -409,30 +434,32 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             GOTT_SHM_LINK_STEREO,
+            GOTT_SC_PREMIX,
             GOTT_SC_COMMON,
-            COMBO("csel", "Channel selector", 0, gott_ms_selectors),
+            COMBO("csel", "Channel selector", "Channel select", 0, gott_ms_selectors),
+            GOTT_LINK("clink", "Mid/Side controls link", "M/S link"),
 
-            GOTT_BAND("_1m", " Mid"),
-            GOTT_BAND("_2m", " Mid"),
-            GOTT_BAND("_3m", " Mid"),
-            GOTT_BAND("_4m", " Mid"),
-            GOTT_BAND("_1s", " Side"),
-            GOTT_BAND("_2s", " Side"),
-            GOTT_BAND("_3s", " Side"),
-            GOTT_BAND("_4s", " Side"),
-
-            GOTT_BAND_METERS("_1m", " Mid"),
-            GOTT_BAND_METERS("_2m", " Mid"),
-            GOTT_BAND_METERS("_3m", " Mid"),
-            GOTT_BAND_METERS("_4m", " Mid"),
-            GOTT_BAND_METERS("_1s", " Side"),
-            GOTT_BAND_METERS("_2s", " Side"),
-            GOTT_BAND_METERS("_3s", " Side"),
-            GOTT_BAND_METERS("_4s", " Side"),
+            GOTT_BAND("_1m", " 1 Mid", "1 M"),
+            GOTT_BAND("_2m", " 2 Mid", "2 M"),
+            GOTT_BAND("_3m", " 3 Mid", "3 M"),
+            GOTT_BAND("_4m", " 4 Mid", "4 M"),
+            GOTT_BAND("_1s", " 1 Side", "1 S"),
+            GOTT_BAND("_2s", " 2 Side", "2 S"),
+            GOTT_BAND("_3s", " 3 Side", "3 S"),
+            GOTT_BAND("_4s", " 4 Side", "4 S"),
+
+            GOTT_BAND_METERS("_1m", " 1 Mid"),
+            GOTT_BAND_METERS("_2m", " 2 Mid"),
+            GOTT_BAND_METERS("_3m", " 3 Mid"),
+            GOTT_BAND_METERS("_4m", " 4 Mid"),
+            GOTT_BAND_METERS("_1s", " 1 Side"),
+            GOTT_BAND_METERS("_2s", " 2 Side"),
+            GOTT_BAND_METERS("_3s", " 3 Side"),
+            GOTT_BAND_METERS("_4s", " 4 Side"),
 
-            GOTT_ANALYSIS("_m", " Mid"),
+            GOTT_ANALYSIS("_m", " Mid", " M"),
             GOTT_METERS("_l", " Left"),
-            GOTT_ANALYSIS("_s", " Side"),
+            GOTT_ANALYSIS("_s", " Side", " S"),
             GOTT_METERS("_r", " Right"),
             GOTT_AMP_CURVE("_m", " Mid"),
             GOTT_AMP_CURVE("_s", " Side"),
diff -pruN 1.2.21-5/modules/lsp-plugins-gott-compressor/src/main/plug/gott_compressor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/src/main/plug/gott_compressor.cpp
--- 1.2.21-5/modules/lsp-plugins-gott-compressor/src/main/plug/gott_compressor.cpp	2025-03-01 12:43:05.428596549 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-gott-compressor/src/main/plug/gott_compressor.cpp	2025-08-26 18:16:03.033815901 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-gott-compressor
  * Created on: 29 мая 2023 г.
@@ -33,13 +33,13 @@
 
 #include <private/plugins/gott_compressor.h>
 
-/* The size of temporary buffer for audio processing */
-#define GOTT_BUFFER_SIZE        0x400U
-
 namespace lsp
 {
     namespace plugins
     {
+        /* The size of temporary buffer for audio processing */
+        static constexpr size_t GOTT_BUFFER_SIZE       = 0x200;
+
         //---------------------------------------------------------------------
         // Plugin factory
         static const meta::plugin_t *plugins[] =
@@ -109,6 +109,31 @@ namespace lsp
                 bSidechain          = true;
             }
 
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
+
             enXOver             = XOVER_MODERN;
             nBands              = meta::gott_compressor::BANDS_MAX;
             nScType             = SCT_INTERNAL;
@@ -129,7 +154,6 @@ namespace lsp
             vAnalyze[1]         = NULL;
             vAnalyze[2]         = NULL;
             vAnalyze[3]         = NULL;
-            vEmptyBuf           = NULL;
             vBuffer             = NULL;
             vProtBuffer         = NULL;
             vSCIn[0]            = NULL;
@@ -216,7 +240,6 @@ namespace lsp
 
             size_t to_alloc         =
                 szof_channels +
-                szof_buffer +       // vEmptyBuf
                 szof_buffer +       // vBuffer
                 szof_buffer +       // vProtBuffer
                 szof_buffer*2 +     // vSC[2]
@@ -228,6 +251,7 @@ namespace lsp
                 szof_freq +         // vFreqBuffer
                 szof_indexes +      // vFreqIndexes
                 (
+                    szof_buffer * 3 + // sPremix
                     szof_buffer +   // vInBuffer for each channel
                     szof_buffer +   // vBuffer for each channel
                     szof_buffer +   // vScBuffer for each channel
@@ -250,7 +274,6 @@ namespace lsp
 
             vChannels               = advance_ptr_bytes<channel_t>(ptr, szof_channels);
 
-            vEmptyBuf               = advance_ptr_bytes<float>(ptr, szof_buffer);
             vBuffer                 = advance_ptr_bytes<float>(ptr, szof_buffer);
             vProtBuffer             = advance_ptr_bytes<float>(ptr, szof_buffer);
             vSC[0]                  = advance_ptr_bytes<float>(ptr, szof_buffer);
@@ -263,6 +286,14 @@ namespace lsp
             vFreqBuffer             = advance_ptr_bytes<float>(ptr, szof_freq);
             vFreqIndexes            = advance_ptr_bytes<uint32_t>(ptr, szof_indexes);
 
+            // Initialize pre-mix
+            for (size_t i=0; i<channels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, szof_buffer);
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, szof_buffer);
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, szof_buffer);
+            }
+
             // Initialize channels
             for (size_t i=0; i<channels; ++i)
             {
@@ -424,6 +455,20 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
+            // Bind common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
             BIND_PORT(pMode);
@@ -454,7 +499,10 @@ namespace lsp
                 BIND_PORT(pScSpSource);
             }
             if ((nMode == GOTT_LR) || (nMode == GOTT_MS))
-                SKIP_PORT("Channel selector"); // Skip channel selector
+            {
+                SKIP_PORT("Channel selector");
+                SKIP_PORT("Separate channels link");
+            }
 
             lsp_trace("Binding band ports");
             for (size_t i=0; i<channels; ++i)
@@ -545,8 +593,6 @@ namespace lsp
                 BIND_PORT(c->pAmpGraph);
             }
 
-            dsp::fill_zero(vEmptyBuf, GOTT_BUFFER_SIZE);
-
             // Initialize curve (logarithmic) in range of -72 .. +24 db
             float delta = (meta::gott_compressor::CURVE_DB_MAX - meta::gott_compressor::CURVE_DB_MIN) / (meta::gott_compressor::CURVE_MESH_SIZE-1);
             for (size_t i=0; i<meta::gott_compressor::CURVE_MESH_SIZE; ++i)
@@ -779,8 +825,22 @@ namespace lsp
             return SCT_INTERNAL;
         }
 
+        void gott_compressor::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void gott_compressor::update_settings()
         {
+            // Update pre-mix
+            update_premix();
+
+            // Get common constants
             dspu::filter_params_t fp;
             size_t channels     = (nMode == GOTT_MONO) ? 1 : 2;
             bool solo_on        = false;
@@ -1191,85 +1251,177 @@ namespace lsp
 
         void gott_compressor::process_sidechain(size_t samples)
         {
-            switch (nScType)
+            const size_t channels     = (nMode == GOTT_MONO) ? 1 : 2;
+
+            for (size_t i=0; i<channels; ++i)
             {
-                case SCT_EXTERNAL:
+                channel_t * const c = &vChannels[i];
+
+                // Prepare sidechain pointers
+                float * const in_buf    = sPremix.vIn[i];
+                float * const out_buf   = sPremix.vOut[i];
+                float * const sc_buf    = sPremix.vSc[i];
+                float * const link_buf  = sPremix.vLink[i];
+
+                c->vIn                  = in_buf;
+                c->vOut                 = out_buf;
+                c->vScIn                = sc_buf;
+                c->vShmIn               = link_buf;
+
+                sPremix.vIn[i]   += samples;
+                sPremix.vOut[i]  += samples;
+                if (sPremix.vSc[i] != NULL)
+                    sPremix.vSc[i]   += samples;
+                if (sPremix.vLink[i] != NULL)
+                    sPremix.vLink[i] += samples;
+
+                // Perform transformation
+                if (bSidechain)
                 {
-                    const float *lc = (vChannels[0].vScIn != NULL) ? vChannels[0].vScIn : vEmptyBuf;
-                    if (nMode == GOTT_MONO)
+                    // (Sc, Link) -> In
+                    if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
                     {
-                        dsp::mul_k3(vChannels[0].vScBuffer, lc, fInGain, samples);
-                        break;
-                    }
+                        c->vIn              = sPremix.vTmpIn[i];
+                        dsp::fmadd_k4(c->vIn, in_buf, sc_buf, sPremix.fScToIn, samples);
 
-                    const float *rc = (vChannels[1].vScIn != NULL) ? vChannels[1].vScIn : vEmptyBuf;
-                    if (nMode == GOTT_MS)
+                        if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                            dsp::fmadd_k3(c->vIn, link_buf, sPremix.fLinkToIn, samples);
+                    }
+                    else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
                     {
-                        dsp::lr_to_ms(vChannels[0].vScBuffer, vChannels[1].vScBuffer, lc, rc, samples);
-                        dsp::mul_k2(vChannels[0].vScBuffer, fInGain, samples);
-                        dsp::mul_k2(vChannels[1].vScBuffer, fInGain, samples);
+                        c->vIn              = sPremix.vTmpIn[i];
+                        dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, samples);
                     }
-                    else
+
+                    // (In, Link) -> Sc
+                    if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
                     {
-                        dsp::mul_k3(vChannels[0].vScBuffer, lc, fInGain, samples);
-                        dsp::mul_k3(vChannels[1].vScBuffer, rc, fInGain, samples);
+                        c->vScIn            = sPremix.vTmpSc[i];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(c->vScIn, sc_buf, in_buf, sPremix.fInToSc, samples);
+                        else
+                            dsp::mul_k3(c->vScIn, in_buf, sPremix.fInToSc, samples);
+
+                        if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                            dsp::fmadd_k3(c->vScIn, link_buf, sPremix.fLinkToSc, samples);
                     }
-                    break;
-                }
-                case SCT_LINK:
-                {
-                    const float *lc = (vChannels[0].vShmIn != NULL) ? vChannels[0].vShmIn: vEmptyBuf;
-                    if (nMode == GOTT_MONO)
+                    else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
                     {
-                        dsp::mul_k3(vChannels[0].vScBuffer, lc, fInGain, samples);
-                        break;
+                        c->vScIn            = sPremix.vTmpSc[i];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, samples);
+                        else
+                            dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, samples);
                     }
 
-                    const float *rc = (vChannels[1].vShmIn != NULL) ? vChannels[1].vShmIn : vEmptyBuf;
-                    if (nMode == GOTT_MS)
+                    // (In, Sc) -> Link
+                    if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
                     {
-                        dsp::lr_to_ms(vChannels[0].vScBuffer, vChannels[1].vScBuffer, lc, rc, samples);
-                        dsp::mul_k2(vChannels[0].vScBuffer, fInGain, samples);
-                        dsp::mul_k2(vChannels[1].vScBuffer, fInGain, samples);
+                        c->vShmIn           = sPremix.vTmpLink[i];
+                        if (link_buf != NULL)
+                            dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, samples);
+                        else
+                            dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, samples);
+
+                        if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                            dsp::fmadd_k3(c->vShmIn, sc_buf, sPremix.fScToLink, samples);
                     }
-                    else
+                    else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
                     {
-                        dsp::mul_k3(vChannels[0].vScBuffer, lc, fInGain, samples);
-                        dsp::mul_k3(vChannels[1].vScBuffer, rc, fInGain, samples);
+                        c->vShmIn           = sPremix.vTmpLink[i];
+                        if (link_buf != NULL)
+                            dsp::fmadd_k4(c->vShmIn, link_buf, sc_buf, sPremix.fScToLink, samples);
+                        else
+                            dsp::mul_k3(c->vShmIn, sc_buf, sPremix.fScToLink, samples);
                     }
-                    break;
                 }
-                default:
+                else
                 {
-                    if (nMode != GOTT_MONO)
+                    // Link -> (In, Sc)
+                    if (link_buf != NULL)
                     {
-                        dsp::copy(vChannels[0].vScBuffer, vChannels[0].vBuffer, samples);
-                        dsp::copy(vChannels[1].vScBuffer, vChannels[1].vBuffer, samples);
+                        // Link -> In
+                        if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                        {
+                            c->vIn          = sPremix.vTmpIn[i];
+                            dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, samples);
+                        }
+                        // Link -> Sc
+                        if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                        {
+                            c->vScIn        = sPremix.vTmpSc[i];
+                            if (sc_buf != NULL)
+                                dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, samples);
+                            else
+                                dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, samples);
+                        }
                     }
-                    else
-                        dsp::copy(vChannels[0].vScBuffer, vChannels[0].vBuffer, samples);
-                    break;
+
+                    // In -> Link
+                    if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vShmIn       = sPremix.vTmpLink[i];
+                        if (link_buf != NULL)
+                            dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, samples);
+                        else
+                            dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, samples);
+                    }
+                }
+
+                // Perform routing
+                switch (nScType)
+                {
+                    case SCT_EXTERNAL:
+                        if (c->vScIn != NULL)
+                            dsp::mul_k3(c->vScBuffer, c->vScIn, fInGain, samples);
+                        else
+                            dsp::fill_zero(c->vScBuffer, samples);
+                        break;
+
+                    case SCT_LINK:
+                        if (c->vShmIn != NULL)
+                            dsp::mul_k3(c->vScBuffer, c->vShmIn, fInGain, samples);
+                        else
+                            dsp::fill_zero(c->vScBuffer, samples);
+                        break;
+
+                    case SCT_INTERNAL:
+                    default:
+                        if (bSidechain)
+                            dsp::mul_k3(c->vScBuffer, c->vIn, fInGain, samples);
+                        else if (c->vScIn != NULL)
+                            dsp::mul_k3(c->vScBuffer, c->vScIn, fInGain, samples);
+                        else
+                            dsp::fill_zero(c->vScBuffer, samples);
+                        break;
                 }
             }
+
+            // Convert stereo to mid-side if needed
+            if (nMode == GOTT_MS)
+                dsp::lr_to_ms(
+                    vChannels[0].vScBuffer, vChannels[1].vScBuffer,
+                    vChannels[0].vScBuffer, vChannels[1].vScBuffer,
+                    samples);
         }
 
         void gott_compressor::process(size_t samples)
         {
-            size_t channels     = (nMode == GOTT_MONO) ? 1 : 2;
+            const size_t channels     = (nMode == GOTT_MONO) ? 1 : 2;
 
             // Bind input signal
             for (size_t i=0; i<channels; ++i)
             {
                 channel_t *c        = &vChannels[i];
 
-                c->vIn              = c->pIn->buffer<float>();
-                c->vOut             = c->pOut->buffer<float>();
-                c->vScIn            = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : NULL;
-                c->vShmIn           = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *shm_buf  = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((shm_buf != NULL) && (shm_buf->active()))
-                    c->vShmIn           = shm_buf->buffer();
+                    sPremix.vLink[i]    = shm_buf->buffer();
             }
 
             // Do processing
@@ -1278,6 +1430,9 @@ namespace lsp
                 // Determine buffer size for processing
                 size_t to_process   = lsp_min(GOTT_BUFFER_SIZE, samples-offset);
 
+                // Process pre-mix and sidechain
+                process_sidechain(to_process);
+
                 // Measure input signal level
                 for (size_t i=0; i<channels; ++i)
                 {
@@ -1301,9 +1456,6 @@ namespace lsp
                     dsp::mul_k3(vChannels[1].vBuffer, vChannels[1].vIn, fInGain, to_process);
                 }
 
-                // Process sidechain
-                process_sidechain(to_process);
-
                 // Do frequency boost and input channel analysis
                 for (size_t i=0; i<channels; ++i)
                 {
@@ -1514,14 +1666,6 @@ namespace lsp
                     // Apply bypass
                     c->sDryDelay.process(vBuffer, c->vIn, to_process);
                     c->sBypass.process(c->vOut, vBuffer, c->vBuffer, to_process);
-
-                    // Update pointers
-                    c->vIn             += to_process;
-                    c->vOut            += to_process;
-                    if (c->vScIn != NULL)
-                        c->vScIn           += to_process;
-                    if (c->vShmIn != NULL)
-                        c->vShmIn          += to_process;
                 }
                 offset     += to_process;
             }
@@ -1855,6 +1999,31 @@ namespace lsp
             v->write_object("sProtSC", &sProtSC);
             v->write_object("sProt", &sProt);
             v->write_object("sCounter", &sCounter);
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
 
             v->write("nMode", nMode);
             v->write("nBands", nBands);
@@ -1979,7 +2148,6 @@ namespace lsp
                 }
             }
             v->writev("vAnalyze", vAnalyze, 4);
-            v->write("vEmptyBuf", vEmptyBuf);
             v->write("vBuffer", vBuffer);
             v->writev("vSC", vSC, 4);
             v->write("vEnv", vEnv);
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/.github/workflows/build.yml	2025-03-01 12:43:06.840588074 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/.github/workflows/build.yml	2025-08-26 18:15:58.437860508 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/CHANGELOG	2025-03-01 12:43:06.840588074 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/CHANGELOG	2025-08-26 18:15:58.437860508 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.30 ===
+* Fixed band naming, counding bands from 1 instead of 0.
+* Added left/right and mid/side linking in the UI.
+* Updated build scripts and dependencies.
+
+=== 1.0.29 ===
+* Updated build scripts and dependencies.
+
 === 1.0.28 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/dependencies.mk	2025-03-01 12:43:06.840588074 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/dependencies.mk	2025-08-26 18:15:58.437860508 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/make/tools.mk	2025-03-01 12:43:06.840588074 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/make/tools.mk	2025-08-26 18:15:58.441860469 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/modules.mk
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/modules.mk	2025-03-01 12:43:06.844588048 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/modules.mk	2025-08-26 18:15:58.441860469 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/project.mk
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/project.mk	2025-03-01 12:43:06.844588048 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/project.mk	2025-08-26 18:15:58.441860469 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Graphic Equalizer Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.28
+ARTIFACT_VERSION            = 1.0.30
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x16_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x16_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x16_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x16_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x16_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x16_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x16_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x16_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x32_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x32_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x32_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x32_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x32_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x32_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x32_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/doc/screenshots/graph_equalizer_x32_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/de/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/de/lists.json
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/de/lists.json	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/de/lists.json	2025-08-26 18:15:58.449860391 +0000
@@ -1,19 +1,19 @@
 {
 	"graph_eq": {
-		"bands_0:15": "Bänder 0-15",
-		"bands_16:31": "Bänder 16-31",
+		"bands_1:16": "Bänder 1-16",
+		"bands_17:32": "Bänder 17-32",
 		"bands_l": "Bänder Links",
-		"bands_l_0:15": "Bänder Links 0-15",
-		"bands_l_16:31": "Bänder Links 16-31",
+		"bands_l_1:16": "Bänder Links 1-16",
+		"bands_l_17:32": "Bänder Links 17-32",
 		"bands_m": "Bänder Mitte",
-		"bands_m_0:15": "Bänder Mitte 0-15",
-		"bands_m_16:31": "Bänder Mitte 16-31",
+		"bands_m_1:16": "Bänder Mitte 1-16",
+		"bands_m_17:32": "Bänder Mitte 17-32",
 		"bands_r": "Bänder Rechts",
-		"bands_r_0:15": "Bänder Rechts 0-15",
-		"bands_r_16:31": "Bänder Rechts 16-31",
+		"bands_r_1:16": "Bänder Rechts 1-16",
+		"bands_r_17:32": "Bänder Rechts 17-32",
 		"bands_s": "Bänder Seite",
-		"bands_s_0:15": "Bänder Seite 0-15",
-		"bands_s_16:31": "Bänder Seite 16-31",
+		"bands_s_1:16": "Bänder Seite 1-16",
+		"bands_s_17:32": "Bänder Seite 17-32",
 		
 		"slope": {
 			"bt48": "BT48",
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/default/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/default/lists.json
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/default/lists.json	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/default/lists.json	2025-08-26 18:15:58.449860391 +0000
@@ -1,19 +1,19 @@
 {
 	"graph_eq": {
-		"bands_0:15": "Bands 0-15",
-		"bands_16:31": "Bands 16-31",
+		"bands_1:16": "Bands 1-16",
+		"bands_17:32": "Bands 17-32",
 		"bands_l": "Bands Left",
-		"bands_l_0:15": "Bands Left 0-15",
-		"bands_l_16:31": "Bands Left 16-31",
+		"bands_l_1:16": "Bands Left 1-16",
+		"bands_l_17:32": "Bands Left 17-32",
 		"bands_m": "Bands Middle",
-		"bands_m_0:15": "Bands Middle 0-15",
-		"bands_m_16:31": "Bands Middle 16-31",
+		"bands_m_1:16": "Bands Middle 1-16",
+		"bands_m_17:32": "Bands Middle 17-32",
 		"bands_r": "Bands Right",
-		"bands_r_0:15": "Bands Right 0-15",
-		"bands_r_16:31": "Bands Right 16-31",
+		"bands_r_1:16": "Bands Right 1-16",
+		"bands_r_17:32": "Bands Right 17-32",
 		"bands_s": "Bands Side",
-		"bands_s_0:15": "Bands Side 0-15",
-		"bands_s_16:31": "Bands Side 16-31",
+		"bands_s_1:16": "Bands Side 1-16",
+		"bands_s_17:32": "Bands Side 17-32",
 		
 		"filter_info" : "{@filter}\n{@frequency%.2f} Hz\n{@gain%.2f} dB",
 		
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/es/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/es/lists.json
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/es/lists.json	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/es/lists.json	2025-08-26 18:15:58.449860391 +0000
@@ -1,19 +1,19 @@
 {
 	"graph_eq": {
-		"bands_0:15": "Bandas 0-15",
-		"bands_16:31": "Bandas 16-31",
+		"bands_1:16": "Bandas 1-16",
+		"bands_17:32": "Bandas 17-32",
 		"bands_l": "Bandas Izquierda",
-		"bands_l_0:15": "Bandas Izquierda 0-15",
-		"bands_l_16:31": "Bandas Izquierda 16-31",
+		"bands_l_1:16": "Bandas Izquierda 1-16",
+		"bands_l_17:32": "Bandas Izquierda 17-32",
 		"bands_m": "Bandas Medio",
-		"bands_m_0:15": "Bandas Medio 0-15",
-		"bands_m_16:31": "Bandas Medio 16-31",
+		"bands_m_1:16": "Bandas Medio 1-16",
+		"bands_m_17:32": "Bandas Medio 17-32",
 		"bands_r": "Bandas Derecha",
-		"bands_r_0:15": "Bandas Derecha 0-15",
-		"bands_r_16:31": "Bandas Derecha 16-31",
+		"bands_r_1:16": "Bandas Derecha 1-16",
+		"bands_r_17:32": "Bandas Derecha 17-32",
 		"bands_s": "Bandas Lateral",
-		"bands_s_0:15": "Bandas Lateral 0-15",
-		"bands_s_16:31": "Bandas Lateral 16-31",
+		"bands_s_1:16": "Bandas Lateral 1-16",
+		"bands_s_17:32": "Bandas Lateral 17-32",
 		
 		"slope": {
 			"bt48": "BT48",
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/fr/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/fr/lists.json
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/fr/lists.json	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/fr/lists.json	2025-08-26 18:15:58.449860391 +0000
@@ -1,19 +1,19 @@
 {
 	"graph_eq": {
-		"bands_0:15": "Bandes 0-15",
-		"bands_16:31": "Bandes 16-31",
+		"bands_1:16": "Bandes 1-16",
+		"bands_17:32": "Bandes 17-32",
 		"bands_l": "Bandes gauche",
-		"bands_l_0:15": "Bandes gauche 0-15",
-		"bands_l_16:31": "Bandes gauche 16-31",
+		"bands_l_1:16": "Bandes gauche 1-16",
+		"bands_l_17:32": "Bandes gauche 17-32",
 		"bands_m": "Bandes milieu",
-		"bands_m_0:15": "Bandes milieu 0-15",
-		"bands_m_16:31": "Bandes milieu 16-31",
+		"bands_m_1:16": "Bandes milieu 1-16",
+		"bands_m_17:32": "Bandes milieu 17-32",
 		"bands_r": "Bandes droite",
-		"bands_r_0:15": "Bandes droite 0-15",
-		"bands_r_16:31": "Bandes droite 16-31",
+		"bands_r_1:16": "Bandes droite 1-16",
+		"bands_r_17:32": "Bandes droite 17-32",
 		"bands_s": "Bandes côté",
-		"bands_s_0:15": "Bandes côté 0-15",
-		"bands_s_16:31": "Bandes côté 16-31",
+		"bands_s_1:16": "Bandes côté 1-16",
+		"bands_s_17:32": "Bandes côté 17-32",
 		
 		"slope": {
 			"bt48": "BT48",
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/it/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/it/lists.json
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/it/lists.json	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/it/lists.json	2025-08-26 18:15:58.449860391 +0000
@@ -1,19 +1,19 @@
 {
 	"graph_eq": {
-		"bands_0:15": "Bande 0-15",
-		"bands_16:31": "Bande 16-31",
+		"bands_1:16": "Bande 1-16",
+		"bands_17:32": "Bande 17-32",
 		"bands_l": "Bande Sinistra",
-		"bands_l_0:15": "Bande Sinistra 0-15",
-		"bands_l_16:31": "Bande Sinistra 16-31",
+		"bands_l_1:16": "Bande Sinistra 1-16",
+		"bands_l_17:32": "Bande Sinistra 17-32",
 		"bands_m": "Bande Centro",
-		"bands_m_0:15": "Bande Centro 0-15",
-		"bands_m_16:31": "Bande Centro 16-31",
+		"bands_m_1:16": "Bande Centro 1-16",
+		"bands_m_17:32": "Bande Centro 17-32",
 		"bands_r": "Bande Destra",
-		"bands_r_0:15": "Bande Destra 0-15",
-		"bands_r_16:31": "Bande Destra 16-31",
+		"bands_r_1:16": "Bande Destra 1-16",
+		"bands_r_17:32": "Bande Destra 17-32",
 		"bands_s": "Bande Laterali",
-		"bands_s_0:15": "Bande Laterali 0-15",
-		"bands_s_16:31": "Bande Laterali 16-31",
+		"bands_s_1:16": "Bande Laterali 1-16",
+		"bands_s_17:32": "Bande Laterali 17-32",
 		
 		"slope": {
 			"bt48": "BT48",
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/ru/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/ru/lists.json
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/ru/lists.json	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/ru/lists.json	2025-08-26 18:15:58.449860391 +0000
@@ -1,19 +1,19 @@
 {
 	"graph_eq": {
-		"bands_0:15": "Полосы 0-15",
-		"bands_16:31": "Полосы 16-31",
+		"bands_1:16": "Полосы 1-16",
+		"bands_17:32": "Полосы 17-32",
 		"bands_l": "Левый",
-		"bands_l_0:15": "Полосы 0-15 (левый)",
-		"bands_l_16:31": "Полосы 16-31 (левый)",
+		"bands_l_1:16": "Полосы 1-16 (левый)",
+		"bands_l_17:32": "Полосы 17-32 (левый)",
 		"bands_m": "Центр",
-		"bands_m_0:15": "Полосы 0-15 (центр)",
-		"bands_m_16:31": "Полосы 16-31 (центр)",
+		"bands_m_1:16": "Полосы 1-16 (центр)",
+		"bands_m_17:32": "Полосы 17-32 (центр)",
 		"bands_r": "Правый",
-		"bands_r_0:15": "Полосы 0-15 (правый)",
-		"bands_r_16:31": "Полосы 16-31 (правый)",
+		"bands_r_1:16": "Полосы 1-16 (правый)",
+		"bands_r_17:32": "Полосы 17-32 (правый)",
 		"bands_s": "Сторона",
-		"bands_s_0:15": "Полосы 0-15 (сторона)",
-		"bands_s_16:31": "Полосы 16-31 (сторона)",
+		"bands_s_1:16": "Полосы 1-16 (сторона)",
+		"bands_s_17:32": "Полосы 17-32 (сторона)",
 		
 		"filter_info" : "{@filter}\n{@frequency%.2f} Гц\n{@gain%.2f} дБ",		
 		
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/us/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/us/lists.json
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/i18n/us/lists.json	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/i18n/us/lists.json	2025-08-26 18:15:58.449860391 +0000
@@ -1,19 +1,19 @@
 {
 	"graph_eq": {
-		"bands_0:15": "Bands 0-15",
-		"bands_16:31": "Bands 16-31",
+		"bands_1:16": "Bands 1-16",
+		"bands_17:32": "Bands 17-32",
 		"bands_l": "Bands Left",
-		"bands_l_0:15": "Bands Left 0-15",
-		"bands_l_16:31": "Bands Left 16-31",
+		"bands_l_1:16": "Bands Left 1-16",
+		"bands_l_17:32": "Bands Left 17-32",
 		"bands_m": "Bands Middle",
-		"bands_m_0:15": "Bands Middle 0-15",
-		"bands_m_16:31": "Bands Middle 16-31",
+		"bands_m_1:16": "Bands Middle 1-16",
+		"bands_m_17:32": "Bands Middle 17-32",
 		"bands_r": "Bands Right",
-		"bands_r_0:15": "Bands Right 0-15",
-		"bands_r_16:31": "Bands Right 16-31",
+		"bands_r_1:16": "Bands Right 1-16",
+		"bands_r_17:32": "Bands Right 17-32",
 		"bands_s": "Bands Side",
-		"bands_s_0:15": "Bands Side 0-15",
-		"bands_s_16:31": "Bands Side 16-31",
+		"bands_s_1:16": "Bands Side 1-16",
+		"bands_s_17:32": "Bands Side 17-32",
 		
 		"filter_info" : "{@filter}\n{@frequency%.2f} Hz\n{@gain%.2f} dB",		
 
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/ui/equalizer/graphic/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/ui/equalizer/graphic/lr.xml
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/ui/equalizer/graphic/lr.xml	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/ui/equalizer/graphic/lr.xml	2025-08-26 18:15:58.449860391 +0000
@@ -1,257 +1,264 @@
 <plugin resizable="true">
 	<ui:eval id="num_filters" value="(ex :gl_16) ? 32 : 16"/>
 	<ui:eval id="num_blocks" value="(ex :gl_16) ? 8 : 4"/>
-
+	
+	<!-- Control linking -->
+	<ui:for id="port" list="'xs'; 'xm'; 'xe'; 'g'">
+		<ui:for id="i" first="0" count=":num_filters">
+			<ctl:link
+				id.1="${port}l_${i}" value.1=":${port}r_${i}"
+				id.2="${port}r_${i}" value.2=":${port}l_${i}"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<grid rows="3" cols="3" spacing="4">
 
-			<!-- Graph -->
-			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.spectrum">
-				<graph width.min="640" height.min="340" expand="true">
-					<origin hpos="-1" vpos="-1" visible="false"/>
-
-					<!-- Gray grid -->
-					<ui:with ox="1" oy="0" color="graph_alt_2" visibility=":zoom le -39 db">
-						<ui:for id="g" counter="i" list="+8;+7;+5;+4;+2;+1;-1;-2;-4;-5;-7;-8">
-							<marker v="${g} db" />
+		<!-- Graph -->
+		<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.spectrum">
+			<graph width.min="640" height.min="340" expand="true">
+				<origin hpos="-1" vpos="-1" visible="false"/>
+
+				<!-- Gray grid -->
+				<ui:with ox="1" oy="0" color="graph_alt_2" visibility=":zoom le -39 db">
+					<ui:for id="g" counter="i" list="+8;+7;+5;+4;+2;+1;-1;-2;-4;-5;-7;-8">
+						<marker v="${g} db" />
+					</ui:for>
+				</ui:with>
+				<ui:with color="graph_alt_1">
+					<marker value="20000" color="graph_alt_1"/>
+					<ui:with ox="1" oy="0">
+						<ui:for id="g" first="-36" last="36" step="24">
+							<marker v="${g} db"/>
 						</ui:for>
-					</ui:with>
-					<ui:with color="graph_alt_1">
-						<marker value="20000" color="graph_alt_1"/>
-						<ui:with ox="1" oy="0">
-							<ui:for id="g" first="-36" last="36" step="24">
-								<marker v="${g} db"/>
-							</ui:for>
-							<ui:for id="g" first="-18" last="18" step="12">
-								<marker v="${g} db" visibility=":zoom le -18 db"/>
-							</ui:for>
-							<ui:for id="g" first="-9" last="9" step="6">
-								<marker v="${g} db" visibility=":zoom le -33 db"/>
-							</ui:for>
-						</ui:with>
-						<ui:for id="f" first="20" last="90" step="10">
-							<marker v="${:f}"/>
-							<marker v="${:f*10}"/>
-							<marker v="${:f*100}"/>
+						<ui:for id="g" first="-18" last="18" step="12">
+							<marker v="${g} db" visibility=":zoom le -18 db"/>
 						</ui:for>
-					</ui:with>
-
-					<!-- Yellow grid -->
-					<ui:with color="graph_sec">
-						<marker v="100"/>
-						<marker v="1000"/>
-						<marker v="10000"/>
-						<ui:with ox="1" oy="0">
-							<marker v="+24 db"/>
-							<marker v="0 db"/>
-							<marker v="-24 db"/>
-						</ui:with>
-					</ui:with>
-
-					<!-- Meshes -->
-
-					<mesh id="ifg_l" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="0" color="left_in" color.a="0.8" fcolor.a="0.8" fill="true" fcolor="left_in" visibility=":ife_l"/>
-					<mesh id="ifg_r" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="0" color="right_in" color.a="0.8" fcolor.a="0.8" fill="true" fcolor="right_in" visibility=":ife_r"/>
-					<mesh id="rfg_l" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="2" color="left_in" visibility=":rfe_l"/>
-					<mesh id="rfg_r" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="2" color="right_in" visibility=":rfe_r"/>
-					<mesh id="ofg_l" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="2" color="left" visibility=":ofe_l"/>
-					<mesh id="ofg_r" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="2" color="right" visibility=":ofe_r"/>
-
-					<mesh id="ag_l" width="3" color="left" fill="true" fcolor="left" fcolor.a="0.8" smooth="true" visibility=":fltv_l"/>
-					<mesh id="ag_r" width="3" color="right" fill="true" fcolor="right" fcolor.a="0.8" smooth="true" visibility=":fltv_r"/>
-					<ui:if test=":num_filters ile 16">
-						<ui:for id="y" counter="i" list="14.62;23.27;36.74;58.48;92.83;146.20;232.70;367.45;584.80;928.32;1462.01;2326.97;3674.49;5848.04;9283.18;14620.09">
-							<marker ui:id="filter_markerl_${i}" v="${y}" ox="0" oy="1" color="left" visibility="false"/>
-							<dot
-								ui:id="filter_dotl_${i}"
-								x="${y}" y.id="gl_${i}"
-								y.editable="true"
-								pointer="hand"
-								size="1 + 2*:_ui_filter_point_thickness"
-								hover.size="1 + 2*:_ui_filter_point_thickness"
-								bsize="4"
-								color="left"
-								hover.color="left"
-								bcolor="left"
-								hover.bcolor="left"
-								visibility=":fvl_${i}"
-								y.astep="1" />
+						<ui:for id="g" first="-9" last="9" step="6">
+							<marker v="${g} db" visibility=":zoom le -33 db"/>
 						</ui:for>
-						<ui:for id="y" counter="i" list="17.10;27.07;42.86;68.40;107.72;171.00;270.74;428.63;683.99;1077.22;1709.98;2707.39;4286.31;6839.91;10772.17;17099.76">
-							<marker ui:id="filter_markerr_${i}" v="${y}" ox="0" oy="1" color="right" visibility="false"/>
-							<dot
-								ui:id="filter_dotr_${i}"
-								x="${y}" y.id="gr_${i}"
-								y.editable="true"
-								pointer="hand"
-								size="1 + 2*:_ui_filter_point_thickness"
-								hover.size="1 + 2*:_ui_filter_point_thickness"
-								bsize="4"
-								color="right"
-								hover.color="right"
-								bcolor="right"
-								hover.bcolor="right"
-								visibility=":fvr_${i}"
-								y.astep="1" />
-						</ui:for>
-					</ui:if>
-
-					<ui:if test=":num_filters igt 16">
-						<ui:for
-							id="y"
-							counter="i"
-							list="14.91;18.91;23.71;29.82;37.46;47.43;59.64;74.92;94.57;119.27;149.09;189.15;237.14;298.18;374.59;474.29;596.37;749.18;945.74;1192.74;1490.92;1891.48;2371.43;2981.84;3745.92;4742.86;5963.69;7491.83;9457.42;11927.37;14909.23;18914.82">
-							<marker ui:id="filter_markerl_${i}" v="${y}" ox="0" oy="1" color="left" visibility="false"/>
-							<dot
-								ui:id="filter_dotl_${i}"
-								x="${y}" y.id="gl_${i}"
-								y.editable="true"
-								pointer="hand"
-								size="1 + 2*:_ui_filter_point_thickness"
-								hover.size="1 + 2*:_ui_filter_point_thickness"
-								bsize="4"
-								color="left"
-								hover.color="left"
-								bcolor="left"
-								hover.bcolor="left"
-								visibility=":fvl_${i}"
-								y.astep="1" />
-						</ui:for>
-						<ui:for
-							id="y"
-							counter="i"
-							list="16.77;21.15;26.57;33.54;42.05;53.13;67.07;84.09;105.74;134.15;167.68;211.47;265.66;335.36;420.46;531.33;670.73;840.92;1057.37;1341.45;1676.81;2114.74;2656.63;3353.63;4204.58;5313.25;6707.26;8409.16;10573.72;13414.51;16768.14;21147.40">
-							<marker ui:id="filter_markerr_${i}" v="${y}" ox="0" oy="1" color="right" visibility="false"/>
-							<dot
-								ui:id="filter_dotr_${i}"
-								x="${y}" y.id="gr_${i}"
-								y.editable="true"
-								pointer="hand"
-								size="1 + 2*:_ui_filter_point_thickness"
-								hover.size="1 + 2*:_ui_filter_point_thickness"
-								bsize="4"
-								color="right"
-								hover.color="right"
-								bcolor="right"
-								hover.bcolor="right"
-								visibility=":fvr_${i}"
-								y.astep="1" />
-						</ui:for>
-					</ui:if>
-
-					<!-- Boundaries -->
-					<marker ox="2" oy="0" v="1" color="graph_prim" visibility="false"/>
-					<!-- +48 dB -->
-					<marker ox="0" oy="1" v="24000" color="graph_prim" visibility="false"/>
-
-					<!-- Axis -->
-					<axis min="10" max="24000" angle="0.0" log="true" visibility="false"/>
-					<axis min="-48 db / :zoom" max="48 db * :zoom" angle="0.5" log="true" visibility="false"/>
-					<!-- -48..+48 dB -->
-					<axis min="-1" max="1" visible="false" angle="0.5"/>
-					<axis min="-48 db" max="48 db" angle="0.5" log="true" visibility="false"/>
-
-					<!-- Text -->
-					<ui:with ox="0" oy="2" y="0" halign="1" valign="1" pgroup="0" priority="0">
-						<text x="10" text="graph.units.hz"/>
-						<text x="20" text="20"/>
-						<text x="30" text="30"/>
-						<text x="50" text="50"/>
-						<text x="100" text="100"/>
-						<text x="200" text="200"/>
-						<text x="300" text="300"/>
-						<text x="500" text="500"/>
-						<text x="1000" text="graph.values.x_k" text:value="1"/>
-						<text x="2000" text="graph.values.x_k" text:value="2"/>
-						<text x="3000" text="graph.values.x_k" text:value="3"/>
-						<text x="5000" text="graph.values.x_k" text:value="5"/>
-						<text x="10000" text="graph.values.x_k" text:value="10"/>
-						<text x="20000" text="graph.values.x_k" text:value="20"/>
 					</ui:with>
-
-					<ui:with x="10" halign="1" pgroup="0" priority="10">
-						<text y="0 db" text="0" valign="1" priority="0" />
-						<text y="1" ox="0" oy="2" text="graph.units.db" valign="-1" priority="0" />
-
-						<ui:for id="g" counter="i" list="+36;+24;+12;-12;-24;-36">
-							<text y="${g} db" text="${g}" valign="-1" />
-						</ui:for>
-						<ui:for id="g" counter="i" list="+18;+6;-6;-18">
-							<text y="${g} db" text="${g}" valign="-1" visibility=":zoom le -18 db"/>
-						</ui:for>
-						<ui:for id="g" counter="i" list="+9;+3;-3;-9">
-							<text y="${g} db" text="${g}" valign="-1" visibility=":zoom le -33 db"/>
-						</ui:for>
-						<ui:for id="g" counter="i" list="+8;+7;+5;+4;+2;+1;-1;-2;-4;-5;-7;-8">
-							<text y="${g} db" text="${g}" valign="-1" visibility="(:zoom le -39 db) "/>
-						</ui:for>
+					<ui:for id="f" first="20" last="90" step="10">
+						<marker v="${:f}"/>
+						<marker v="${:f*10}"/>
+						<marker v="${:f*100}"/>
+					</ui:for>
+				</ui:with>
+
+				<!-- Yellow grid -->
+				<ui:with color="graph_sec">
+					<marker v="100"/>
+					<marker v="1000"/>
+					<marker v="10000"/>
+					<ui:with ox="1" oy="0">
+						<marker v="+24 db"/>
+						<marker v="0 db"/>
+						<marker v="-24 db"/>
 					</ui:with>
+				</ui:with>
 
-					<ui:if test=":num_filters ile 16">
-						<ui:for id="y" counter="i"
-							list="14.62;23.27;36.74;58.48;92.83;146.20;232.70;367.45;584.80;928.32;1462.01;2326.97;3674.49;5848.04;9283.18;14620.09">
-							<text
-								ui:id="filter_infol_${i}"
-								oy="2"
-								x="${y}" y="1"
-								color="left"
-								visibility="false"
-								halign="${(:y lt 500) ? 1 : -1}"
-								valign="-1"
-								text.halign="${(:y lt 500) ? -1 : 1}"
-								pad.h="4"
-							/>
-						</ui:for>
-						<ui:for id="y" counter="i"
-							list="17.10;27.07;42.86;68.40;107.72;171.00;270.74;428.63;683.99;1077.22;1709.98;2707.39;4286.31;6839.91;10772.17;17099.76">
-							<text
-								ui:id="filter_infor_${i}"
-								oy="2"
-								x="${y}" y="1"
-								color="right"
-								visibility="false"
-								halign="${(:y lt 500) ? 1 : -1}"
-								valign="-1"
-								text.halign="${(:y lt 500) ? -1 : 1}"
-								pad.h="4"
-							/>
-						</ui:for>
-					</ui:if>
-
-					<ui:if test=":num_filters igt 16">
-						<ui:for id="y" counter="i" list="14.91;18.91;23.71;29.82;37.46;47.43;59.64;74.92;94.57;119.27;149.09;189.15;237.14;298.18;374.59;474.29;596.37;749.18;945.74;1192.74;1490.92;1891.48;2371.43;2981.84;3745.92;4742.86;5963.69;7491.83;9457.42;11927.37;14909.23;18914.82">
-							<text
-								ui:id="filter_infol_${i}"
-								oy="2"
-								x="${y}" y="1"
-								color="left"
-								visibility="false"
-								halign="${(:y lt 500) ? 1 : -1}"
-								valign="-1"
-								text.halign="${(:y lt 500) ? -1 : 1}"
-								pad.h="4"
-							/>
-						</ui:for>
-						<ui:for id="y" counter="i"
-							list="16.77;21.15;26.57;33.54;42.05;53.13;67.07;84.09;105.74;134.15;167.68;211.47;265.66;335.36;420.46;531.33;670.73;840.92;1057.37;1341.45;1676.81;2114.74;2656.63;3353.63;4204.58;5313.25;6707.26;8409.16;10573.72;13414.51;16768.14;21147.40">
-							<text
-								ui:id="filter_infor_${i}"
-								oy="2"
-								x="${y}" y="1"
-								color="right"
-								visibility="false"
-								halign="${(:y lt 500) ? 1 : -1}"
-								valign="-1"
-								text.halign="${(:y lt 500) ? -1 : 1}"
-								pad.h="4"
-							/>
-						</ui:for>
-					</ui:if>
-
-				</graph>
-			</group>
-
+				<!-- Meshes -->
 
+				<mesh id="ifg_l" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="0" color="left_in" color.a="0.8" fcolor.a="0.8" fill="true" fcolor="left_in" visibility=":ife_l"/>
+				<mesh id="ifg_r" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="0" color="right_in" color.a="0.8" fcolor.a="0.8" fill="true" fcolor="right_in" visibility=":ife_r"/>
+				<mesh id="rfg_l" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="2" color="left_in" visibility=":rfe_l"/>
+				<mesh id="rfg_r" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="2" color="right_in" visibility=":rfe_r"/>
+				<mesh id="ofg_l" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="2" color="left" visibility=":ofe_l"/>
+				<mesh id="ofg_r" oy=":_ui_zoomable_spectrum_graph ? 1 : 3" width="2" color="right" visibility=":ofe_r"/>
+
+				<mesh id="ag_l" width="3" color="left" fill="true" fcolor="left" fcolor.a="0.8" smooth="true" visibility=":fltv_l"/>
+				<mesh id="ag_r" width="3" color="right" fill="true" fcolor="right" fcolor.a="0.8" smooth="true" visibility=":fltv_r"/>
+				<ui:if test=":num_filters ile 16">
+					<ui:for id="y" counter="i" list="14.62;23.27;36.74;58.48;92.83;146.20;232.70;367.45;584.80;928.32;1462.01;2326.97;3674.49;5848.04;9283.18;14620.09">
+						<marker ui:id="filter_markerl_${i}" v="${y}" ox="0" oy="1" color="left" visibility="false"/>
+						<dot
+							ui:id="filter_dotl_${i}"
+							x="${y}" y.id="gl_${i}"
+							y.editable="true"
+							pointer="hand"
+							size="1 + 2*:_ui_filter_point_thickness"
+							hover.size="1 + 2*:_ui_filter_point_thickness"
+							bsize="4"
+							color="left"
+							hover.color="left"
+							bcolor="left"
+							hover.bcolor="left"
+							visibility=":fvl_${i}"
+							y.astep="1" />
+					</ui:for>
+					<ui:for id="y" counter="i" list="17.10;27.07;42.86;68.40;107.72;171.00;270.74;428.63;683.99;1077.22;1709.98;2707.39;4286.31;6839.91;10772.17;17099.76">
+						<marker ui:id="filter_markerr_${i}" v="${y}" ox="0" oy="1" color="right" visibility="false"/>
+						<dot
+							ui:id="filter_dotr_${i}"
+							x="${y}" y.id="gr_${i}"
+							y.editable="true"
+							pointer="hand"
+							size="1 + 2*:_ui_filter_point_thickness"
+							hover.size="1 + 2*:_ui_filter_point_thickness"
+							bsize="4"
+							color="right"
+							hover.color="right"
+							bcolor="right"
+							hover.bcolor="right"
+							visibility=":fvr_${i}"
+							y.astep="1" />
+					</ui:for>
+				</ui:if>
+
+				<ui:if test=":num_filters igt 16">
+					<ui:for
+						id="y"
+						counter="i"
+						list="14.91;18.91;23.71;29.82;37.46;47.43;59.64;74.92;94.57;119.27;149.09;189.15;237.14;298.18;374.59;474.29;596.37;749.18;945.74;1192.74;1490.92;1891.48;2371.43;2981.84;3745.92;4742.86;5963.69;7491.83;9457.42;11927.37;14909.23;18914.82">
+						<marker ui:id="filter_markerl_${i}" v="${y}" ox="0" oy="1" color="left" visibility="false"/>
+						<dot
+							ui:id="filter_dotl_${i}"
+							x="${y}" y.id="gl_${i}"
+							y.editable="true"
+							pointer="hand"
+							size="1 + 2*:_ui_filter_point_thickness"
+							hover.size="1 + 2*:_ui_filter_point_thickness"
+							bsize="4"
+							color="left"
+							hover.color="left"
+							bcolor="left"
+							hover.bcolor="left"
+							visibility=":fvl_${i}"
+							y.astep="1" />
+					</ui:for>
+					<ui:for
+						id="y"
+						counter="i"
+						list="16.77;21.15;26.57;33.54;42.05;53.13;67.07;84.09;105.74;134.15;167.68;211.47;265.66;335.36;420.46;531.33;670.73;840.92;1057.37;1341.45;1676.81;2114.74;2656.63;3353.63;4204.58;5313.25;6707.26;8409.16;10573.72;13414.51;16768.14;21147.40">
+						<marker ui:id="filter_markerr_${i}" v="${y}" ox="0" oy="1" color="right" visibility="false"/>
+						<dot
+							ui:id="filter_dotr_${i}"
+							x="${y}" y.id="gr_${i}"
+							y.editable="true"
+							pointer="hand"
+							size="1 + 2*:_ui_filter_point_thickness"
+							hover.size="1 + 2*:_ui_filter_point_thickness"
+							bsize="4"
+							color="right"
+							hover.color="right"
+							bcolor="right"
+							hover.bcolor="right"
+							visibility=":fvr_${i}"
+							y.astep="1" />
+					</ui:for>
+				</ui:if>
+
+				<!-- Boundaries -->
+				<marker ox="2" oy="0" v="1" color="graph_prim" visibility="false"/>
+				<!-- +48 dB -->
+				<marker ox="0" oy="1" v="24000" color="graph_prim" visibility="false"/>
+
+				<!-- Axis -->
+				<axis min="10" max="24000" angle="0.0" log="true" visibility="false"/>
+				<axis min="-48 db / :zoom" max="48 db * :zoom" angle="0.5" log="true" visibility="false"/>
+				<!-- -48..+48 dB -->
+				<axis min="-1" max="1" visible="false" angle="0.5"/>
+				<axis min="-48 db" max="48 db" angle="0.5" log="true" visibility="false"/>
+
+				<!-- Text -->
+				<ui:with ox="0" oy="2" y="0" halign="1" valign="1" pgroup="0" priority="0">
+					<text x="10" text="graph.units.hz"/>
+					<text x="20" text="20"/>
+					<text x="30" text="30"/>
+					<text x="50" text="50"/>
+					<text x="100" text="100"/>
+					<text x="200" text="200"/>
+					<text x="300" text="300"/>
+					<text x="500" text="500"/>
+					<text x="1000" text="graph.values.x_k" text:value="1"/>
+					<text x="2000" text="graph.values.x_k" text:value="2"/>
+					<text x="3000" text="graph.values.x_k" text:value="3"/>
+					<text x="5000" text="graph.values.x_k" text:value="5"/>
+					<text x="10000" text="graph.values.x_k" text:value="10"/>
+					<text x="20000" text="graph.values.x_k" text:value="20"/>
+				</ui:with>
+
+				<ui:with x="10" halign="1" pgroup="0" priority="10">
+					<text y="0 db" text="0" valign="1" priority="0" />
+					<text y="1" ox="0" oy="2" text="graph.units.db" valign="-1" priority="0" />
+
+					<ui:for id="g" counter="i" list="+36;+24;+12;-12;-24;-36">
+						<text y="${g} db" text="${g}" valign="-1" />
+					</ui:for>
+					<ui:for id="g" counter="i" list="+18;+6;-6;-18">
+						<text y="${g} db" text="${g}" valign="-1" visibility=":zoom le -18 db"/>
+					</ui:for>
+					<ui:for id="g" counter="i" list="+9;+3;-3;-9">
+						<text y="${g} db" text="${g}" valign="-1" visibility=":zoom le -33 db"/>
+					</ui:for>
+					<ui:for id="g" counter="i" list="+8;+7;+5;+4;+2;+1;-1;-2;-4;-5;-7;-8">
+						<text y="${g} db" text="${g}" valign="-1" visibility="(:zoom le -39 db) "/>
+					</ui:for>
+				</ui:with>
+
+				<ui:if test=":num_filters ile 16">
+					<ui:for id="y" counter="i"
+						list="14.62;23.27;36.74;58.48;92.83;146.20;232.70;367.45;584.80;928.32;1462.01;2326.97;3674.49;5848.04;9283.18;14620.09">
+						<text
+							ui:id="filter_infol_${i}"
+							oy="2"
+							x="${y}" y="1"
+							color="left"
+							visibility="false"
+							halign="${(:y lt 500) ? 1 : -1}"
+							valign="-1"
+							text.halign="${(:y lt 500) ? -1 : 1}"
+							pad.h="4"
+						/>
+					</ui:for>
+					<ui:for id="y" counter="i"
+						list="17.10;27.07;42.86;68.40;107.72;171.00;270.74;428.63;683.99;1077.22;1709.98;2707.39;4286.31;6839.91;10772.17;17099.76">
+						<text
+							ui:id="filter_infor_${i}"
+							oy="2"
+							x="${y}" y="1"
+							color="right"
+							visibility="false"
+							halign="${(:y lt 500) ? 1 : -1}"
+							valign="-1"
+							text.halign="${(:y lt 500) ? -1 : 1}"
+							pad.h="4"
+						/>
+					</ui:for>
+				</ui:if>
+
+				<ui:if test=":num_filters igt 16">
+					<ui:for id="y" counter="i" list="14.91;18.91;23.71;29.82;37.46;47.43;59.64;74.92;94.57;119.27;149.09;189.15;237.14;298.18;374.59;474.29;596.37;749.18;945.74;1192.74;1490.92;1891.48;2371.43;2981.84;3745.92;4742.86;5963.69;7491.83;9457.42;11927.37;14909.23;18914.82">
+						<text
+							ui:id="filter_infol_${i}"
+							oy="2"
+							x="${y}" y="1"
+							color="left"
+							visibility="false"
+							halign="${(:y lt 500) ? 1 : -1}"
+							valign="-1"
+							text.halign="${(:y lt 500) ? -1 : 1}"
+							pad.h="4"
+						/>
+					</ui:for>
+					<ui:for id="y" counter="i"
+						list="16.77;21.15;26.57;33.54;42.05;53.13;67.07;84.09;105.74;134.15;167.68;211.47;265.66;335.36;420.46;531.33;670.73;840.92;1057.37;1341.45;1676.81;2114.74;2656.63;3353.63;4204.58;5313.25;6707.26;8409.16;10573.72;13414.51;16768.14;21147.40">
+						<text
+							ui:id="filter_infor_${i}"
+							oy="2"
+							x="${y}" y="1"
+							color="right"
+							visibility="false"
+							halign="${(:y lt 500) ? 1 : -1}"
+							valign="-1"
+							text.halign="${(:y lt 500) ? -1 : 1}"
+							pad.h="4"
+						/>
+					</ui:for>
+				</ui:if>
 
+			</graph>
+		</group>
 
 		<!-- Zoom Fader -->
 		<hbox spacing="4" bg.color="bg">
@@ -355,11 +362,12 @@
 		<!-- bottom line -->
 		<cell cols="3">
 			<hbox spacing="4" bg.color="bg_schema" pad.h="6">
-					<label text="labels.mode" pad.v="4"/>
-					<combo id="slope" pad.r="6" pad.v="4"/>
-					<combo id="mode" pad.r="12" pad.v="4"/>
-					<button id="fltv_l" height="22" width="48" text="labels.chan.left" ui:inject="Button_left" pad.v="4"/>
-					<button id="fltv_r" height="22" width="48" text="labels.chan.right" ui:inject="Button_right" pad.v="4"/>
+				<label text="labels.mode" pad.v="4"/>
+				<combo id="slope" pad.r="6" pad.v="4"/>
+				<combo id="mode" pad.r="12" pad.v="4"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
+				<button id="fltv_l" height="22" width="48" text="labels.chan.left" ui:inject="Button_left" pad.v="4"/>
+				<button id="fltv_r" height="22" width="48" text="labels.chan.right" ui:inject="Button_right" pad.v="4"/>
 
 				<void hexpand="true"/>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/ui/equalizer/graphic/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/ui/equalizer/graphic/ms.xml
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/res/main/ui/equalizer/graphic/ms.xml	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/res/main/ui/equalizer/graphic/ms.xml	2025-08-26 18:15:58.449860391 +0000
@@ -2,6 +2,16 @@
 	<ui:eval id="num_filters" value="(ex :gm_16) ? 32 : 16"/>
 	<ui:eval id="num_blocks" value="(ex :gm_16) ? 4 : 2"/>
 
+	<!-- Control linking -->
+	<ui:for id="port" list="'xs'; 'xm'; 'xe'; 'g'">
+		<ui:for id="i" first="0" count=":num_filters">
+			<ctl:link
+				id.1="${port}m_${i}" value.1=":${port}s_${i}"
+				id.2="${port}s_${i}" value.2=":${port}m_${i}"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+
 	<grid rows="3" cols="3" spacing="4">
 
 		<!-- Graph -->
@@ -321,6 +331,7 @@
 				<label text="labels.mode"/>
 				<combo id="slope" pad.r="6" pad.v="4"/>
 				<combo id="mode" pad.r="12" pad.v="4"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
 				<button id="fltv_m" height="22" width="48" text="labels.chan.middle" ui:inject="Button_mid" pad.v="4"/>
 				<knob id="gain_m" scale.size="3" size="10" scolor="mid" pad.l="6"/>
 				<value id="gain_m" width.min="48" same_line="true" fill="true" halign="1" pad.r="12"/>
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/src/doc/manuals/plugins/graph_equalizer.php 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/src/doc/manuals/plugins/graph_equalizer.php
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/src/doc/manuals/plugins/graph_equalizer.php	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/src/doc/manuals/plugins/graph_equalizer.php	2025-08-26 18:15:58.449860391 +0000
@@ -49,13 +49,17 @@
 		<li><b>FFT</b> - Fast Fourier Transform approximation of the frequency chart, linear phase. Adds noticeable latency to output signal.</li>
 		<li><b>SPM</b> - Spectral Processor Mode of equalizer, equalizer transforms the magnitude of signal spectrum instead of applying impulse response to the signal.</li>
 	</ul>
-	<?php if ($m == 'ms') { ?>
-	<li><b>Mid</b> - button enables the frequency chart and FFT analysis for the middle channel, knob allows to adjust the level of the middle channel.</li>
-	<li><b>Side</b> - button enables the frequency chart and FFT analysis for the side channel, knob allows to adjust the level of the side channel.</li>
-	<li><b>Listen</b> - allows to listen middle channel and side channel. Passes middle channel to the left output channel, side channel to the right output channel.</li>
+	
+	<?php if ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
+	<?php } elseif ($m == 'ms') { ?>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
+		<li><b>Mid</b> - button enables the frequency chart and FFT analysis for the middle channel, knob allows to adjust the level of the middle channel.</li>
+		<li><b>Side</b> - button enables the frequency chart and FFT analysis for the side channel, knob allows to adjust the level of the side channel.</li>
+		<li><b>Listen</b> - allows to listen middle channel and side channel. Passes middle channel to the left output channel, side channel to the right output channel.</li>
 	<?php } elseif ($m != 'm') { ?>
-	<li><b>Left</b> - enables the <?php if ($m != 's') echo "frequency chart and "; ?>FFT analysis for the left channel.</li>
-	<li><b>Right</b> - enables the <?php if ($m != 's') echo "frequency chart and "; ?>FFT analysis for the right channel.</li>
+		<li><b>Left</b> - enables the <?php if ($m != 's') echo "frequency chart and "; ?>FFT analysis for the left channel.</li>
+		<li><b>Right</b> - enables the <?php if ($m != 's') echo "frequency chart and "; ?>FFT analysis for the right channel.</li>
 	<?php } ?>
 	<li><b>Zoom</b> - zoom fader, allows to adjust zoom on the frequency chart.</li>
 </ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/src/main/meta/graph_equalizer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/src/main/meta/graph_equalizer.cpp
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/src/main/meta/graph_equalizer.cpp	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/src/main/meta/graph_equalizer.cpp	2025-08-26 18:15:58.449860391 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-graph-equalizer
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_GRAPH_EQUALIZER_VERSION_MAJOR       1
 #define LSP_PLUGINS_GRAPH_EQUALIZER_VERSION_MINOR       0
-#define LSP_PLUGINS_GRAPH_EQUALIZER_VERSION_MICRO       28
+#define LSP_PLUGINS_GRAPH_EQUALIZER_VERSION_MICRO       30
 
 #define LSP_PLUGINS_GRAPH_EQUALIZER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -89,40 +89,40 @@ namespace lsp
 
         static const port_item_t band_select_32[] =
         {
-            { "Bands 0-15",             "graph_eq.bands_0:15" },
-            { "Bands 16-31",            "graph_eq.bands_16:31" },
+            { "Bands 1-16",             "graph_eq.bands_1:16" },
+            { "Bands 17-32",            "graph_eq.bands_17:32" },
             { NULL, NULL }
         };
 
         static const port_item_t band_select_32lr[] =
         {
-            { "Bands Left 0-15",        "graph_eq.bands_l_0:15" },
-            { "Bands Right 0-15",       "graph_eq.bands_r_0:15" },
-            { "Bands Left 16-31",       "graph_eq.bands_l_16:31" },
-            { "Bands Right 16-31",      "graph_eq.bands_r_16:31" },
+            { "Bands Left 1-16",        "graph_eq.bands_l_1:16" },
+            { "Bands Right 1-16",       "graph_eq.bands_r_1:16" },
+            { "Bands Left 17-32",       "graph_eq.bands_l_17:32" },
+            { "Bands Right 17-32",      "graph_eq.bands_r_17:32" },
             { NULL, NULL }
         };
 
         static const port_item_t band_select_32ms[] =
         {
-            { "Bands Middle 0-15",      "graph_eq.bands_m_0:15" },
-            { "Bands Side 0-15",        "graph_eq.bands_s_0:15" },
-            { "Bands Middle 16-31",     "graph_eq.bands_m_16:31" },
-            { "Bands Side 16-31",       "graph_eq.bands_s_16:31" },
+            { "Bands Middle 1-16",      "graph_eq.bands_m_1:16" },
+            { "Bands Side 1-16",        "graph_eq.bands_s_1:16" },
+            { "Bands Middle 17-32",     "graph_eq.bands_m_17:32" },
+            { "Bands Side 17-32",       "graph_eq.bands_s_17:32" },
             { NULL, NULL }
         };
 
-        #define EQ_BAND(id, label, x, f) \
-            SWITCH("xs" id "_" #x, "Band solo" label " " f, 0.0f), \
-            SWITCH("xm" id "_" #x, "Band mute" label " " f, 0.0f), \
-            SWITCH("xe" id "_" #x, "Band on" label " " f, 1.0f), \
+        #define EQ_BAND(id, label, alias, x, f) \
+            SWITCH("xs" id "_" #x, "Band solo" label " " f, "Solo " f alias, 0.0f), \
+            SWITCH("xm" id "_" #x, "Band mute" label " " f, "Mute " f alias, 0.0f), \
+            SWITCH("xe" id "_" #x, "Band on" label " " f, "On " f alias, 1.0f), \
             BLINK("fv" id "_" #x, "Filter visibility " label " " f), \
-            LOG_CONTROL("g" id "_" #x, "Band gain" label " " f, U_GAIN_AMP, graph_equalizer_metadata::BAND_GAIN)
+            LOG_CONTROL("g" id "_" #x, "Band gain" label " " f, "Gain " f alias, U_GAIN_AMP, graph_equalizer_metadata::BAND_GAIN)
 
-        #define EQ_BAND_MONO(x, f)      EQ_BAND("", "", x, f)
-        #define EQ_BAND_STEREO(x, f)    EQ_BAND("", "", x, f)
-        #define EQ_BAND_LR(x, f)        EQ_BAND("l", " Left", x, f), EQ_BAND("r", " Right", x, f)
-        #define EQ_BAND_MS(x, f)        EQ_BAND("m", " Mid", x, f), EQ_BAND("s", " Side", x, f)
+        #define EQ_BAND_MONO(x, f)      EQ_BAND("", "", "", x, f)
+        #define EQ_BAND_STEREO(x, f)    EQ_BAND("", "", "", x, f)
+        #define EQ_BAND_LR(x, f)        EQ_BAND("l", " Left", " L", x, f), EQ_BAND("r", " Right", " R", x, f)
+        #define EQ_BAND_MS(x, f)        EQ_BAND("m", " Mid", " M", x, f), EQ_BAND("s", " Side", " S", x, f)
 
         #define EQ_MONO_PORTS \
             MESH("ag", "Amplitude graph", 2, graph_equalizer_metadata::FILTER_MESH_POINTS), \
@@ -130,7 +130,7 @@ namespace lsp
             METER_GAIN("sm", "Output signal meter", GAIN_AMP_P_12_DB)
 
         #define EQ_STEREO_PORTS \
-            PAN_CTL("bal", "Output balance", 0.0f), \
+            PAN_CTL("bal", "Output balance", "Out balance", 0.0f), \
             MESH("ag", "Amplitude graph", 2, graph_equalizer_metadata::FILTER_MESH_POINTS), \
             METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \
             METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \
@@ -138,42 +138,45 @@ namespace lsp
             METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB)
 
         #define EQ_LR_PORTS \
-            PAN_CTL("bal", "Output balance", 0.0f), \
+            PAN_CTL("bal", "Output balance", "Out balance", 0.0f), \
             MESH("ag_l", "Amplitude graph Left", 2, graph_equalizer_metadata::FILTER_MESH_POINTS), \
             METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \
             METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \
-            SWITCH("fltv_l", "Filter visibility Left", 1.0f), \
+            SWITCH("fltv_l", "Filter visibility Left", "Show flt L", 1.0f), \
             MESH("ag_r", "Amplitude graph Right", 2, graph_equalizer_metadata::FILTER_MESH_POINTS), \
             METER_GAIN("imr", "Input signal meter Right", GAIN_AMP_P_12_DB), \
             METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB), \
-            SWITCH("fltv_r", "Filter visibility Right", 1.0f)
+            SWITCH("fltv_r", "Filter visibility Right", "Show flt R", 1.0f)
 
         #define EQ_MS_PORTS \
-            PAN_CTL("bal", "Output balance", 0.0f), \
-            SWITCH("lstn", "Mid/Side listen", 0.0f), \
-            AMP_GAIN100("gain_m", "Mid gain", GAIN_AMP_0_DB), \
-            AMP_GAIN100("gain_s", "Side gain", GAIN_AMP_0_DB), \
+            PAN_CTL("bal", "Output balance", "Out balance", 0.0f), \
+            SWITCH("lstn", "Mid/Side listen", "M/S listen", 0.0f), \
+            AMP_GAIN100("gain_m", "Mid gain", "Gain M", GAIN_AMP_0_DB), \
+            AMP_GAIN100("gain_s", "Side gain", "Gain S", GAIN_AMP_0_DB), \
             MESH("ag_m", "Amplitude graph Mid", 2, graph_equalizer_metadata::FILTER_MESH_POINTS), \
             METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \
             METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \
-            SWITCH("fltv_m", "Filter visibility Mid", 1.0f), \
+            SWITCH("fltv_m", "Filter visibility Mid", "Show flt M", 1.0f), \
             MESH("ag_s", "Amplitude graph Side", 2, graph_equalizer_metadata::FILTER_MESH_POINTS), \
             METER_GAIN("imr", "Input signal meter Right", GAIN_AMP_P_12_DB), \
             METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB), \
-            SWITCH("fltv_s", "Filter visibility Side", 1.0f)
+            SWITCH("fltv_s", "Filter visibility Side", "Show flt S", 1.0f)
 
         #define EQ_COMMON \
             BYPASS, \
-            AMP_GAIN("g_in", "Input gain", graph_equalizer_metadata::IN_GAIN_DFL, 10.0f), \
-            AMP_GAIN("g_out", "Output gain", graph_equalizer_metadata::OUT_GAIN_DFL, 10.0f), \
-            COMBO("mode", "Equalizer mode", 0, band_eq_modes), \
-            COMBO("slope", "Filter slope", 0, band_slopes), \
-            LOG_CONTROL("react", "FFT reactivity", U_MSEC, graph_equalizer_metadata::REACT_TIME), \
-            AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \
-            LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, graph_equalizer_metadata::ZOOM)
+            AMP_GAIN("g_in", "Input gain", "Input gain", graph_equalizer_metadata::IN_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_out", "Output gain", "Output gain", graph_equalizer_metadata::OUT_GAIN_DFL, 10.0f), \
+            COMBO("mode", "Equalizer mode", "Eq mode", 0, band_eq_modes), \
+            COMBO("slope", "Filter slope", "Flt slope", 0, band_slopes), \
+            LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, graph_equalizer_metadata::REACT_TIME), \
+            AMP_GAIN("shift", "Shift gain", "Shift", 1.0f, 100.0f), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, graph_equalizer_metadata::ZOOM)
+
+        #define EQ_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
 
         #define BAND_SELECT(fselect) \
-            COMBO("fsel", "Band select", 0, fselect)
+            COMBO("fsel", "Band select", "Band select", 0, fselect)
 
         #define EQ_COMMUNICATION_MONO \
             OPT_SEND_NAME("send", "Audio send"), \
@@ -189,10 +192,10 @@ namespace lsp
             OPT_AUDIO_RETURN("rtn_l", "Audio return input left", 0, "return"), \
             OPT_AUDIO_RETURN("rtn_r", "Audio return input right", 1, "return")
 
-        #define CHANNEL_ANALYSIS(id, label) \
-            SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-            SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
-            SWITCH("rfe" id, "Return FFT graph enable" label, 1.0f), \
+        #define CHANNEL_ANALYSIS(id, label, alias) \
+            SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+            SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
+            SWITCH("rfe" id, "Return FFT graph enable" label, "FFT Ret" alias, 1.0f), \
             MESH("ifg" id, "Input FFT graph" label, 2, graph_equalizer_metadata::MESH_POINTS + 2), \
             MESH("ofg" id, "Output FFT graph" label, 2, graph_equalizer_metadata::MESH_POINTS), \
             MESH("rfg" id, "Return FFT graph" label, 2, graph_equalizer_metadata::MESH_POINTS)
@@ -254,7 +257,7 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             EQ_COMMON,
             EQ_COMMUNICATION_MONO,
-            CHANNEL_ANALYSIS("", ""),
+            CHANNEL_ANALYSIS("", "", ""),
             EQ_MONO_PORTS,
             EQ_BANDS_16X(EQ_BAND_MONO),
 
@@ -266,8 +269,8 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             EQ_COMMON,
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             EQ_STEREO_PORTS,
             EQ_BANDS_16X(EQ_BAND_STEREO),
 
@@ -278,9 +281,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON,
+            EQ_LINK("clink", "Left/Right controls link", "L/R link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             BAND_SELECT(band_select_16lr),
             EQ_LR_PORTS,
             EQ_BANDS_16X(EQ_BAND_LR),
@@ -292,9 +296,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON,
+            EQ_LINK("clink", "Mid/Side controls link", "M/S link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_m", " Mid"),
-            CHANNEL_ANALYSIS("_s", " Side"),
+            CHANNEL_ANALYSIS("_m", " Mid", " M"),
+            CHANNEL_ANALYSIS("_s", " Side", " S"),
             BAND_SELECT(band_select_16ms),
             EQ_MS_PORTS,
             EQ_BANDS_16X(EQ_BAND_MS),
@@ -307,7 +312,7 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             EQ_COMMON,
             EQ_COMMUNICATION_MONO,
-            CHANNEL_ANALYSIS("", ""),
+            CHANNEL_ANALYSIS("", "", ""),
             BAND_SELECT(band_select_32),
             EQ_MONO_PORTS,
             EQ_BANDS_32X(EQ_BAND_MONO),
@@ -320,8 +325,8 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             EQ_COMMON,
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             BAND_SELECT(band_select_32),
             EQ_STEREO_PORTS,
             EQ_BANDS_32X(EQ_BAND_STEREO),
@@ -333,9 +338,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON,
+            EQ_LINK("clink", "Left/Right controls link", "L/R link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             BAND_SELECT(band_select_32lr),
             EQ_LR_PORTS,
             EQ_BANDS_32X(EQ_BAND_LR),
@@ -347,9 +353,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON,
+            EQ_LINK("clink", "Mid/Side controls link", "M/S link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_m", " Mid"),
-            CHANNEL_ANALYSIS("_s", " Side"),
+            CHANNEL_ANALYSIS("_m", " Mid", " M"),
+            CHANNEL_ANALYSIS("_s", " Side", " S"),
             BAND_SELECT(band_select_32ms),
             EQ_MS_PORTS,
             EQ_BANDS_32X(EQ_BAND_MS),
diff -pruN 1.2.21-5/modules/lsp-plugins-graph-equalizer/src/main/plug/graph_equalizer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/src/main/plug/graph_equalizer.cpp
--- 1.2.21-5/modules/lsp-plugins-graph-equalizer/src/main/plug/graph_equalizer.cpp	2025-03-01 12:43:06.852588002 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-graph-equalizer/src/main/plug/graph_equalizer.cpp	2025-08-26 18:15:58.449860391 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-graph-equalizer
  * Created on: 3 авг. 2021 г.
@@ -244,6 +244,8 @@ namespace lsp
             BIND_PORT(pReactivity);
             BIND_PORT(pShiftGain);
             BIND_PORT(pZoom);
+            if ((nMode == EQ_LEFT_RIGHT) || (nMode == EQ_MID_SIDE))
+                SKIP_PORT("Separate channels link");
 
             // Communication
             SKIP_PORT("Send name");
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/.github/workflows/build.yml	2025-03-01 12:43:06.284591411 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/.github/workflows/build.yml	2025-08-26 18:15:52.769915516 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/CHANGELOG	2025-03-01 12:43:06.284591411 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/CHANGELOG	2025-08-26 18:15:52.769915516 +0000
@@ -2,6 +2,16 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.30 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.30 ===
+* Added overlay for equalization group.
+
+=== 1.0.29 ===
+* Added file pitching knob.
+* Updated build scripts and dependencies.
+
 === 1.0.28 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/dependencies.mk	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/dependencies.mk	2025-08-26 18:15:52.769915516 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/include/private/meta/impulse_responses.h 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/include/private/meta/impulse_responses.h
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/include/private/meta/impulse_responses.h	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/include/private/meta/impulse_responses.h	2025-08-26 18:15:52.769915516 +0000
@@ -32,6 +32,11 @@ namespace lsp
     {
         struct impulse_responses_metadata
         {
+            static constexpr float FILE_PITCH_MIN           = -24.0f;   // Minimum pitch (st)
+            static constexpr float FILE_PITCH_MAX           = 24.0f;    // Maximum pitch (st)
+            static constexpr float FILE_PITCH_DFL           = 0.0f;     // Pitch (st)
+            static constexpr float FILE_PITCH_STEP          = 0.01f;    // Pitch step (st)
+
             static constexpr float CONV_LENGTH_MIN          = 0.0f;     // Minimum convolution length (ms)
             static constexpr float CONV_LENGTH_MAX          = 10000.0f; // Maximum convoluition length (ms)
             static constexpr float CONV_LENGTH_DFL          = 0.0f;     // Convolution length (ms)
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/include/private/plugins/impulse_responses.h 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/include/private/plugins/impulse_responses.h
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/include/private/plugins/impulse_responses.h	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/include/private/plugins/impulse_responses.h	2025-08-26 18:15:52.773915478 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-impulse-responses
  * Created on: 3 авг. 2021 г.
@@ -57,14 +57,18 @@ namespace lsp
                     bool                bSync;          // Synchronize file
                     bool                bReverse;       // Reverse impulse response
 
+                    float               fPitch;         // Pitch amount
                     float               fHeadCut;
                     float               fTailCut;
                     float               fFadeIn;
                     float               fFadeOut;
 
+                    float               fDuration;      // Actual audio file duration
+
                     IRLoader           *pLoader;        // Audio file loader task
 
                     plug::IPort        *pFile;          // Port that contains file name
+                    plug::IPort        *pPitch;         // Pitching amount in semitones
                     plug::IPort        *pHeadCut;
                     plug::IPort        *pTailCut;
                     plug::IPort        *pFadeIn;
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/make/tools.mk	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/make/tools.mk	2025-08-26 18:15:52.773915478 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/modules.mk
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/modules.mk	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/modules.mk	2025-08-26 18:15:52.773915478 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/project.mk
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/project.mk	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/project.mk	2025-08-26 18:15:52.773915478 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Impulse Responses Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.28
+ARTIFACT_VERSION            = 1.0.30
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-impulse-responses/res/doc/screenshots/impulse_responses_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/res/doc/screenshots/impulse_responses_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-impulse-responses/res/doc/screenshots/impulse_responses_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/res/doc/screenshots/impulse_responses_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/res/main/ui/convolution/impulse_responses/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/res/main/ui/convolution/impulse_responses/mono.xml
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/res/main/ui/convolution/impulse_responses/mono.xml	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/res/main/ui/convolution/impulse_responses/mono.xml	2025-08-26 18:15:52.773915478 +0000
@@ -5,8 +5,7 @@
 			<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" fill="false" bg.color="bg_schema">
 				<label text="labels.fft.frame"/>
 				<combo id="fft" pad.r="10"/>
-				<button id="wpp" ui:inject="Button_green" text="labels.ir_equalizer" size="16"/>
-				<button id="eqv" ui:inject="Button_yellow" text="labels.flt.show_" size="16"/>
+				<button id="eqv" ui:id="eq_trigger" ui:inject="Button_yellow" text="labels.ir_equalizer" size="16"/>
 			</hbox>
 		</align>
 
@@ -14,7 +13,7 @@
 			<vbox>
 				<!-- File editor -->
 
-				<hbox width.min="803" height.min="256">
+				<hbox width.min="803" height.min="256" expand="true">
 					<asample
 						expand="true"
 						id="ifn"
@@ -64,10 +63,11 @@
 
 				<void bg.color="bg" height="4" vreduce="true"/>
 
-				<grid rows="4" cols="15" bg.color="bg_schema">
+				<grid rows="4" cols="16" bg.color="bg_schema">
 					<!-- row 1 -->
 					<ui:with pad.h="6" pad.v="4" vreduce="true">
 						<label text="labels.sedit.reverse"/>
+						<label text="labels.sedit.pitch"/>
 						<label text="labels.sedit.head_cut"/>
 						<label text="labels.sedit.tail_cut"/>
 						<label text="labels.sedit.fade_in"/>
@@ -90,7 +90,7 @@
 
 					<!-- row 2 -->
 					<ui:with bg.color="bg" pad.v="2" vreduce="true">
-						<cell cols="6"><hsep/></cell>
+						<cell cols="7"><hsep/></cell>
 						<cell cols="3"><hsep/></cell>
 						<cell cols="4"><hsep/></cell>
 					</ui:with>
@@ -101,6 +101,7 @@
 					</cell>
 
 					<ui:with pad.h="6" pad.v="4">
+						<knob id="psh" size="20"/>
 						<knob id="ihc" size="20"/>
 						<knob id="itc" size="20"/>
 						<knob id="ifi" size="20" scolor="fade_in"/>
@@ -132,6 +133,7 @@
 
 					<!-- row 4 -->
 					<ui:with pad.h="6" pad.b="4">
+						<value id="psh"/>
 						<value id="ihc"/>
 						<value id="itc"/>
 						<value id="ifi"/>
@@ -157,10 +159,22 @@
 				</grid>
 			</vbox>
 		</group>
+	</vbox>
+
+	<overlay id="eqv" trigger="eq_trigger" hpos="0" vpos="1" halign="1" valign="1" ipadding.t="4" padding.l="0" ipadding.l="0" padding.r="0" ipadding.r="0">
+		<group text="groups.wet_signal_eq" ipadding="0">
+			<grid rows="7" cols="12">
+
+				<cell cols="12">
+						<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" bg.color="bg_schema">
+							<void hfill="true" hexpand="true"/>
+							<button id="wpp" ui:inject="Button_green" text="labels.enable" size="16"/>
+						</hbox>
+				</cell>
 
-		<!-- Wet equalization -->
-		<group text="groups.wet_signal_eq" visibility=":eqv" ipadding="0">
-			<grid rows="5" cols="12">
+				<cell cols="12">
+					<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+				</cell>
 
 				<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
 
@@ -183,7 +197,7 @@
 
 				<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
 
-				<combo id="lcm" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+				<combo id="lcm" pad.h="6" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
 
 				<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
 					<ui:for id="f" first="0" last="7">
@@ -193,7 +207,7 @@
 					</ui:for>
 				</ui:with>
 
-				<combo id="hcm" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				<combo id="hcm" pad.h="6" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
 
 				<ui:with pad.h="6" pad.v="4">
 					<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
@@ -208,5 +222,5 @@
 				</ui:with>
 			</grid>
 		</group>
-	</vbox>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/res/main/ui/convolution/impulse_responses/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/res/main/ui/convolution/impulse_responses/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/res/main/ui/convolution/impulse_responses/stereo.xml	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/res/main/ui/convolution/impulse_responses/stereo.xml	2025-08-26 18:15:52.773915478 +0000
@@ -5,10 +5,8 @@
 			<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" fill="false" bg.color="bg_schema">
 				<label text="labels.fft.frame"/>
 				<combo id="fft" pad.r="10"/>
-				<!-- <label text="labels.file" /> -->
-				<combo id="fsel"/>
-				<button id="wpp" pad.l="10" ui:inject="Button_green" text="labels.ir_equalizer" size="16"/>
-				<button id="eqv" ui:inject="Button_yellow" text="labels.flt.show_" size="16"/>
+				<combo id="fsel" pad.r="10"/>
+				<button id="eqv" ui:id="eq_trigger" ui:inject="Button_yellow" text="labels.ir_equalizer" size="16"/>
 			</hbox>
 		</align>
 
@@ -16,7 +14,7 @@
 			<vbox>
 				<!-- File editor -->
 
-				<hbox width.min="803" height.min="256">
+				<hbox width.min="803" height.min="256" expand="true">
 					<ui:for id="i" first="0" last="1">
 						<asample
 							expand="true"
@@ -68,9 +66,10 @@
 				<void bg.color="bg" pad.v="2" vreduce="true"/>
 
 				<ui:for id="i" first="0" last="1">
-					<grid rows="4" cols="6" bg.color="bg_schema" visibility=":fsel ieq ${i}">
+					<grid rows="4" cols="7" bg.color="bg_schema" visibility=":fsel ieq ${i}">
 						<ui:with pad.h="6" pad.v="4" vreduce="true">
 							<label text="labels.sedit.reverse"/>
+							<label text="labels.sedit.pitch"/>
 							<label text="labels.sedit.head_cut"/>
 							<label text="labels.sedit.tail_cut"/>
 							<label text="labels.sedit.fade_in"/>
@@ -78,12 +77,13 @@
 							<label text="labels.listen"/>
 						</ui:with>
 
-						<cell cols="6"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+						<cell cols="7"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
 
 						<ui:with pad.h="6" pad.v="4">
 							<cell rows="2">
 								<button id="irv${i}" bg.color="bg_schema" font.size="14" size="32" ui:inject="Button_cyan" font.name="lsp-icons" text="icons.actions.reverse"/>
 							</cell>
+							<knob id="psh${i}" size="20"/>
 							<knob id="ihc${i}" size="20"/>
 							<knob id="itc${i}" size="20"/>
 							<knob id="ifi${i}" size="20" scolor="fade_in"/>
@@ -99,6 +99,7 @@
 						</ui:with>
 
 						<ui:with pad.h="6" pad.b="4" width.min="48" sline="true">
+							<value id="psh${i}"/>
 							<value id="ihc${i}"/>
 							<value id="itc${i}"/>
 							<value id="ifi${i}"/>
@@ -188,10 +189,22 @@
 				</grid>
 			</vbox>
 		</group>
+	</vbox>
+
+	<overlay id="eqv" trigger="eq_trigger" hpos="0" vpos="1" halign="1" valign="1" ipadding.t="4" padding.l="0" ipadding.l="0" padding.r="0" ipadding.r="0">
+		<group text="groups.wet_signal_eq" ipadding="0">
+			<grid rows="7" cols="12">
+
+				<cell cols="12">
+						<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" bg.color="bg_schema">
+							<void hfill="true" hexpand="true"/>
+							<button id="wpp" ui:inject="Button_green" text="labels.enable" size="16"/>
+						</hbox>
+				</cell>
 
-		<!-- Wet equalization -->
-		<group text="groups.wet_signal_eq" visibility=":eqv" ipadding="0">
-			<grid rows="5" cols="12">
+				<cell cols="12">
+					<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+				</cell>
 
 				<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
 
@@ -214,7 +227,7 @@
 
 				<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
 
-				<combo id="lcm" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+				<combo id="lcm" pad.h="6" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
 
 				<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
 					<ui:for id="f" first="0" last="7">
@@ -224,7 +237,7 @@
 					</ui:for>
 				</ui:with>
 
-				<combo id="hcm" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				<combo id="hcm" pad.h="6" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
 
 				<ui:with pad.h="6" pad.v="4">
 					<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
@@ -239,5 +252,5 @@
 				</ui:with>
 			</grid>
 		</group>
-	</vbox>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/src/doc/manuals/plugins/impulse_responses.php 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/src/doc/manuals/plugins/impulse_responses.php
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/src/doc/manuals/plugins/impulse_responses.php	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/src/doc/manuals/plugins/impulse_responses.php	2025-08-26 18:15:52.773915478 +0000
@@ -18,7 +18,7 @@
 	<?php if ($s) { ?>
 	<li><b>File</b> - file selector, allows to load additional file that can be taken as impulse response for one of audio channels.</li>
 	<?php } ?>
-	<li><b>IR equalizer</b> - enables wet (processed) signal equalization in additional <b>Wet Signal Equalization</b> section</li>
+	<li><b>IR equalizer</b> - shows wet signal equalization overlay.</li>
 	<li><b>Show</b> - Displays the additional <b>Wet Signal Equalization</b> section in the UI</li>
 	<li><b>Reverse</b> - allows to reverse impulse file in time domain.</li>
 	<li><b>Head cut</b> - cut amount of milliseconds from the beginning of the impulse files, can be used to remove early reflections of reverb.</li>
@@ -45,8 +45,10 @@
 	<li><b>Dry/Wet</b> - the balance between unprocessed (Dry) signal and mixed signal (see Dry and Wet controls).</li>
 	<li><b>Output</b> - amount of gain additionally applied to the output signal.</li>
 </ul>
-<p><b>'Wet Signal Equalization' section</b> - visible only when <b>IR equalizer</b> parameter is turned on:</p>
+
+<p><b>Wet Signal Equalization</b> overlay:</p>
 <ul>
+	<li><b>Enabled</b> - enables wet (processed) signal equalization.</li>
 	<li><b>Low-cut</b> - sets the slope of the high-pass butterworth filter, possible slopes are 6, 12 and 18 dB/octave.</li>
 	<li><b>Low-cut freq</b> - the cutoff frequency of the high-pass butterworth filter.</li>
 	<li><b>Faders</b> - faders that allow to change the loudness of eight corresponding frequency bands in range of -12..+12 dB</li>
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/src/main/meta/impulse_responses.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/src/main/meta/impulse_responses.cpp
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/src/main/meta/impulse_responses.cpp	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/src/main/meta/impulse_responses.cpp	2025-08-26 18:15:52.773915478 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-impulse-responses
  * Created on: 3 авг. 2021 г.
@@ -27,7 +27,7 @@
 
 #define LSP_PLUGINS_IMPULSE_RESPONSES_VERSION_MAJOR       1
 #define LSP_PLUGINS_IMPULSE_RESPONSES_VERSION_MINOR       0
-#define LSP_PLUGINS_IMPULSE_RESPONSES_VERSION_MICRO       28
+#define LSP_PLUGINS_IMPULSE_RESPONSES_VERSION_MICRO       30
 
 #define LSP_PLUGINS_IMPULSE_RESPONSES_VERSION  \
     LSP_MODULE_VERSION( \
@@ -91,7 +91,7 @@ namespace lsp
 
         #define IR_COMMON \
             BYPASS, \
-            COMBO("fft", "FFT size", impulse_responses_metadata::FFT_RANK_DEFAULT, ir_fft_rank), \
+            COMBO("fft", "FFT size", "FFT size", impulse_responses_metadata::FFT_RANK_DEFAULT, ir_fft_rank), \
             DRY_GAIN(1.0f), \
             WET_GAIN(1.0f), \
             DRYWET(100.0f), \
@@ -99,31 +99,32 @@ namespace lsp
 
         #define IR_SAMPLE_FILE(id, label)   \
             PATH("ifn" id, "Impulse file" label),    \
-            CONTROL("ihc" id, "Head cut" label, U_MSEC, impulse_responses_metadata::CONV_LENGTH), \
-            CONTROL("itc" id, "Tail cut" label, U_MSEC, impulse_responses_metadata::CONV_LENGTH), \
-            CONTROL("ifi" id, "Fade in" label, U_MSEC, impulse_responses_metadata::CONV_LENGTH), \
-            CONTROL("ifo" id, "Fade out" label, U_MSEC, impulse_responses_metadata::CONV_LENGTH), \
-            TRIGGER("ils" id, "Impulse preview listen" label), \
-            TRIGGER("ilc" id, "Impulse preview stop" label), \
-            SWITCH("irv" id, "Impulse reverse" label, 0.0f), \
+            CONTROL("psh" id, "File pitch" label, NULL, U_SEMITONES, impulse_responses_metadata::FILE_PITCH), \
+            CONTROL("ihc" id, "Head cut" label, NULL, U_MSEC, impulse_responses_metadata::CONV_LENGTH), \
+            CONTROL("itc" id, "Tail cut" label, NULL, U_MSEC, impulse_responses_metadata::CONV_LENGTH), \
+            CONTROL("ifi" id, "Fade in" label, NULL, U_MSEC, impulse_responses_metadata::CONV_LENGTH), \
+            CONTROL("ifo" id, "Fade out" label, NULL, U_MSEC, impulse_responses_metadata::CONV_LENGTH), \
+            TRIGGER("ils" id, "Impulse preview listen" label, "Play" label), \
+            TRIGGER("ilc" id, "Impulse preview stop" label, "Stop" label), \
+            SWITCH("irv" id, "Impulse reverse" label, "Reverse" label, 0.0f), \
             STATUS("ifs" id, "Load status" label), \
             METER("ifl" id, "Impulse length" label, U_MSEC, impulse_responses_metadata::CONV_LENGTH), \
             MESH("ifd" id, "Impulse file contents" label, impulse_responses_metadata::TRACKS_MAX, impulse_responses_metadata::MESH_SIZE)
 
-        #define IR_SOURCE(id, label, select, dfl) \
-            COMBO("cs" id, "Channel source" label, dfl, select), \
-            AMP_GAIN100("mk" id, "Makeup gain" label, 1.0f), \
+        #define IR_SOURCE(id, label, alias, select, dfl) \
+            COMBO("cs" id, "Channel source" label, "Source" alias, dfl, select), \
+            AMP_GAIN100("mk" id, "Makeup gain" label, "Makeup" alias, 1.0f), \
             BLINK("ca" id, "Channel activity" label), \
-            CONTROL("pd" id, "Pre-delay" label, U_MSEC, impulse_responses_metadata::PREDELAY)
+            CONTROL("pd" id, "Pre-delay" label, "Pre-delay" alias, U_MSEC, impulse_responses_metadata::PREDELAY)
 
         #define IR_EQ_BAND(id, freq)    \
-            CONTROL("eq_" #id, "Band " freq "Hz gain", U_GAIN_AMP, impulse_responses_metadata::BA)
+            CONTROL("eq_" #id, "Band " freq "Hz gain", "Eq " freq, U_GAIN_AMP, impulse_responses_metadata::BA)
 
         #define IR_EQUALIZER    \
-            SWITCH("wpp", "Wet post-process", 0),    \
-            SWITCH("eqv", "Equalizer visibility", 0),    \
-            COMBO("lcm", "Low-cut mode", 0, filter_slope),      \
-            LOG_CONTROL("lcf", "Low-cut frequency", U_HZ, impulse_responses_metadata::LCF),   \
+            SWITCH("wpp", "Wet post-process", "Wet postproc", 0),    \
+            SWITCH("eqv", "Equalizer visibility", "Show Eq", 0),    \
+            COMBO("lcm", "Low-cut mode", "LC mode", 0, filter_slope),      \
+            LOG_CONTROL("lcf", "Low-cut frequency", "LC freq", U_HZ, impulse_responses_metadata::LCF),   \
             IR_EQ_BAND(0, "50"), \
             IR_EQ_BAND(1, "107"), \
             IR_EQ_BAND(2, "227"), \
@@ -132,8 +133,8 @@ namespace lsp
             IR_EQ_BAND(5, "2.2 k"), \
             IR_EQ_BAND(6, "4.7 k"), \
             IR_EQ_BAND(7, "10 k"), \
-            COMBO("hcm", "High-cut mode", 0, filter_slope),      \
-            LOG_CONTROL("hcf", "High-cut frequency", U_HZ, impulse_responses_metadata::HCF)
+            COMBO("hcm", "High-cut mode", "HC mode", 0, filter_slope),      \
+            LOG_CONTROL("hcf", "High-cut frequency", "HC freq", U_HZ, impulse_responses_metadata::HCF)
 
         static const port_t impulse_responses_mono_ports[] =
         {
@@ -143,7 +144,7 @@ namespace lsp
 
             // Input controls
             IR_SAMPLE_FILE("", ""),
-            IR_SOURCE("", "", ir_source_mono, 1),
+            IR_SOURCE("", "", "", ir_source_mono, 1),
             IR_EQUALIZER,
 
             PORTS_END
@@ -154,13 +155,13 @@ namespace lsp
             // Input audio ports
             PORTS_STEREO_PLUGIN,
             IR_COMMON,
-            COMBO("fsel", "File selector", 0, ir_file_select), \
+            COMBO("fsel", "File selector", "File selector", 0, ir_file_select), \
 
             // Input controls
             IR_SAMPLE_FILE("0", " 1"),
             IR_SAMPLE_FILE("1", " 2"),
-            IR_SOURCE("_l", " Left", ir_source_stereo, 1),
-            IR_SOURCE("_r", " Right", ir_source_stereo, 2),
+            IR_SOURCE("_l", " Left", " L", ir_source_stereo, 1),
+            IR_SOURCE("_r", " Right", " R", ir_source_stereo, 2),
             IR_EQUALIZER,
 
             PORTS_END
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-responses/src/main/plug/impulse_responses.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/src/main/plug/impulse_responses.cpp
--- 1.2.21-5/modules/lsp-plugins-impulse-responses/src/main/plug/impulse_responses.cpp	2025-03-01 12:43:06.288591386 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-responses/src/main/plug/impulse_responses.cpp	2025-08-26 18:15:52.773915478 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-impulse-responses
  * Created on: 3 авг. 2021 г.
@@ -324,15 +324,19 @@ namespace lsp
                 f->nStatus      = STATUS_UNSPECIFIED;
                 f->bSync        = true;
                 f->bReverse     = false;
+                f->fPitch       = 0.0f;
                 f->fHeadCut     = 0.0f;
                 f->fTailCut     = 0.0f;
                 f->fFadeIn      = 0.0f;
                 f->fFadeOut     = 0.0f;
 
+                f->fDuration    = 0.0f;
+
                 f->pLoader      = new IRLoader(this, f);
                 if (f->pLoader == NULL)
                     return;
                 f->pFile        = NULL;
+                f->pPitch       = NULL;
                 f->pHeadCut     = NULL;
                 f->pTailCut     = NULL;
                 f->pFadeIn      = NULL;
@@ -377,6 +381,7 @@ namespace lsp
                 f->sStop.init();
 
                 BIND_PORT(f->pFile);
+                BIND_PORT(f->pPitch);
                 BIND_PORT(f->pHeadCut);
                 BIND_PORT(f->pTailCut);
                 BIND_PORT(f->pFadeIn);
@@ -490,17 +495,20 @@ namespace lsp
                 c->sBypass.set_bypass(pBypass->value() >= 0.5f);
 
                 // Check that file parameters have changed
+                float pitch         = f->pPitch->value();
                 float head_cut      = f->pHeadCut->value();
                 float tail_cut      = f->pTailCut->value();
                 float fade_in       = f->pFadeIn->value();
                 float fade_out      = f->pFadeOut->value();
                 bool reverse        = f->pReverse->value() >= 0.5f;
-                if ((f->fHeadCut != head_cut) ||
+                if ((f->fPitch != pitch) ||
+                    (f->fHeadCut != head_cut) ||
                     (f->fTailCut != tail_cut) ||
                     (f->fFadeIn  != fade_in ) ||
                     (f->fFadeOut != fade_out) ||
                     (f->bReverse != reverse))
                 {
+                    f->fPitch           = pitch;
                     f->fHeadCut         = head_cut;
                     f->fTailCut         = tail_cut;
                     f->fFadeIn          = fade_in;
@@ -808,6 +816,10 @@ namespace lsp
                 c->pActivity->set_value((c->pCurr != NULL) ? 1.0f : 0.0f);
             }
 
+            // Do not output meshes until configuration finishes
+            if (!sConfigurator.idle())
+                return;
+
             // Update indicators and meshes (if possible)
             for (size_t i=0; i<nChannels; ++i)
             {
@@ -823,7 +835,7 @@ namespace lsp
                 channels                = lsp_min(channels, nChannels);
 
                 // Output activity indicator
-                float duration          = (af->pOriginal != NULL) ? af->pOriginal->duration() : 0.0f;
+                const float duration    = (af->pOriginal != NULL) ? af->fDuration : 0.0f;
                 af->pLength->set_value(duration * 1000.0f);
                 af->pStatus->set_value(af->nStatus);
 
@@ -896,14 +908,6 @@ namespace lsp
                 return status;
             }
 
-            // Try to resample
-            status  = af->resample(fSampleRate);
-            if (status != STATUS_OK)
-            {
-                lsp_trace("resample failed: status=%d (%s)", status, get_status(status));
-                return status;
-            }
-
             // Determine the normalizing factor
             size_t channels         = af->channels();
             float max = 0.0f;
@@ -939,6 +943,25 @@ namespace lsp
                 if (af == NULL)
                     continue;
 
+                // Copy data of original sample to temporary sample and perform resampling if needed
+                dspu::Sample temp;
+                const size_t sample_rate_dst  = fSampleRate * dspu::semitones_to_frequency_shift(-f->fPitch);
+                if (sample_rate_dst != af->sample_rate())
+                {
+                    if (temp.copy(af) != STATUS_OK)
+                    {
+                        lsp_warn("Error copying source sample");
+                        return STATUS_NO_MEM;
+                    }
+                    if (temp.resample(sample_rate_dst) != STATUS_OK)
+                    {
+                        lsp_warn("Error resampling source sample");
+                        return STATUS_NO_MEM;
+                    }
+
+                    af          = &temp;
+                }
+
                 // Allocate new sample
                 dspu::Sample *s     = new dspu::Sample();
                 if (s == NULL)
@@ -947,7 +970,7 @@ namespace lsp
                 lsp_finally { destroy_sample(s); };
 
                 // Obtain new sample parameters
-                ssize_t flen        = af->samples();
+                const ssize_t flen  = af->samples();
                 size_t channels     = lsp_min(af->channels(), meta::impulse_responses_metadata::TRACKS_MAX);
                 size_t head_cut     = dspu::millis_to_samples(fSampleRate, f->fHeadCut);
                 size_t tail_cut     = dspu::millis_to_samples(fSampleRate, f->fTailCut);
@@ -1000,6 +1023,7 @@ namespace lsp
 
                 // Commit sample to the processed list
                 lsp::swap(f->pProcessed, s);
+                f->fDuration        = dspu::samples_to_seconds(fSampleRate, flen);
             }
 
             // Randomize phase of the convolver
@@ -1118,14 +1142,17 @@ namespace lsp
                         v->write("bSync", af->bSync);
                         v->write("bReverse", af->bReverse);
 
+                        v->write("fPitch", af->fPitch);
                         v->write("fHeadCut", af->fHeadCut);
                         v->write("fTailCut", af->fTailCut);
                         v->write("fFadeIn", af->fFadeIn);
                         v->write("fFadeOut", af->fFadeOut);
+                        v->write("fDuration", af->fDuration);
 
                         v->write_object("pLoader", af->pLoader);
 
                         v->write("pFile", af->pFile);
+                        v->write("pPitch", af->pPitch);
                         v->write("pHeadCut", af->pHeadCut);
                         v->write("pTailCut", af->pTailCut);
                         v->write("pFadeIn", af->pFadeIn);
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/.github/workflows/build.yml	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/.github/workflows/build.yml	2025-08-26 18:15:54.521898514 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/CHANGELOG	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/CHANGELOG	2025-08-26 18:15:54.521898514 +0000
@@ -2,6 +2,16 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.27 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.27 ===
+* Added overlay for equalization group.
+
+=== 1.0.26 ===
+* Added file pitching knob.
+* Updated build scripts and dependencies.
+
 === 1.0.25 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/dependencies.mk	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/dependencies.mk	2025-08-26 18:15:54.525898475 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/include/private/meta/impulse_reverb.h 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/include/private/meta/impulse_reverb.h
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/include/private/meta/impulse_reverb.h	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/include/private/meta/impulse_reverb.h	2025-08-26 18:15:54.525898475 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-impulse-reverb
  * Created on: 3 авг. 2021 г.
@@ -50,6 +50,11 @@ namespace lsp
 
             static constexpr size_t FFT_RANK_MIN            = 9;        // Minimum FFT rank
 
+            static constexpr float FILE_PITCH_MIN           = -24.0f;   // Minimum pitch (st)
+            static constexpr float FILE_PITCH_MAX           = 24.0f;    // Maximum pitch (st)
+            static constexpr float FILE_PITCH_DFL           = 0.0f;     // Pitch (st)
+            static constexpr float FILE_PITCH_STEP          = 0.01f;    // Pitch step (st)
+
             static constexpr float LCF_MIN                  = 10.0f;
             static constexpr float LCF_MAX                  = 1000.0f;
             static constexpr float LCF_DFL                  = 50.0f;
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/include/private/plugins/impulse_reverb.h 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/include/private/plugins/impulse_reverb.h
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/include/private/plugins/impulse_reverb.h	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/include/private/plugins/impulse_reverb.h	2025-08-26 18:15:54.525898475 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-impulse-reverb
  * Created on: 3 авг. 2021 г.
@@ -103,19 +103,22 @@ namespace lsp
                     dspu::Sample       *pProcessed;     // Processed audio file for sampler
                     float              *vThumbs[meta::impulse_reverb_metadata::TRACKS_MAX];           // Thumbnails
                     float               fNorm;          // Norming factor
-                    bool                bRender;        // Flag that indicates that file needs rendering
                     status_t            nStatus;
+                    bool                bRender;        // Flag that indicates that file needs rendering
                     bool                bSync;          // Synchronize file
+                    bool                bReverse;
 
+                    float               fPitch;         // Pitch amount
                     float               fHeadCut;
                     float               fTailCut;
                     float               fFadeIn;
                     float               fFadeOut;
-                    bool                bReverse;
+                    float               fDuration;      // Actual audio file duration
 
                     IRLoader            sLoader;        // Audio file loader task
 
                     plug::IPort        *pFile;          // Port that contains file name
+                    plug::IPort        *pPitch;         // Pitch amount
                     plug::IPort        *pHeadCut;
                     plug::IPort        *pTailCut;
                     plug::IPort        *pFadeIn;
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/make/tools.mk	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/make/tools.mk	2025-08-26 18:15:54.525898475 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/modules.mk
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/modules.mk	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/modules.mk	2025-08-26 18:15:54.525898475 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/project.mk
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/project.mk	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/project.mk	2025-08-26 18:15:54.525898475 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Impulse Reverb Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.25
+ARTIFACT_VERSION            = 1.0.27
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-impulse-reverb/res/doc/screenshots/impulse_reverb_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/res/doc/screenshots/impulse_reverb_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-impulse-reverb/res/doc/screenshots/impulse_reverb_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/res/doc/screenshots/impulse_reverb_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/res/main/ui/convolution/impulse_reverb/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/res/main/ui/convolution/impulse_reverb/mono.xml
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/res/main/ui/convolution/impulse_reverb/mono.xml	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/res/main/ui/convolution/impulse_reverb/mono.xml	2025-08-26 18:15:54.529898436 +0000
@@ -1,15 +1,13 @@
 <plugin resizable="true">
-	<grid rows="4" cols="3" vspacing="4" hspacing="0">
+	<grid rows="3" cols="3" vspacing="4" hspacing="0">
 		<!-- IR editor -->
 		<cell>
 			<align halign="-1" hfill="true" vreduce="true">
 				<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" fill="false" bg.color="bg_schema">
 					<label text="labels.fft.frame"/>
 					<combo id="fft" pad.r="10"/>
-					<!-- <label text="labels.file" /> -->
-					<combo id="fsel"/>
-					<button id="wpp" pad.l="10" ui:inject="Button_green" text="labels.ir_equalizer" size="16"/>
-					<button id="eqv" ui:inject="Button_yellow" text="labels.flt.show_" size="16"/>
+					<combo id="fsel" pad.r="10"/>
+					<button id="eqv" ui:id="eq_trigger" ui:inject="Button_yellow" text="labels.ir_equalizer" size="16"/>
 				</hbox>
 			</align>
 		</cell>
@@ -99,9 +97,10 @@
 					<void bg.color="bg" pad.v="2" vreduce="true"/>
 
 					<ui:for id="i" first="0" last="3">
-						<grid rows="4" cols="6" bg.color="bg_schema" visibility=":fsel ieq ${i}">
+						<grid rows="4" cols="7" bg.color="bg_schema" visibility=":fsel ieq ${i}">
 							<ui:with pad.h="6" pad.v="4" vreduce="true">
 								<label text="labels.sedit.reverse"/>
+								<label text="labels.sedit.pitch"/>
 								<label text="labels.sedit.head_cut"/>
 								<label text="labels.sedit.tail_cut"/>
 								<label text="labels.sedit.fade_in"/>
@@ -109,12 +108,13 @@
 								<label text="labels.listen"/>
 							</ui:with>
 
-							<cell cols="6"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+							<cell cols="7"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
 
 							<ui:with pad.h="6" pad.v="4">
 								<cell rows="2">
 									<button id="irv${i}" bg.color="bg_schema" font.size="14" size="32" ui:inject="Button_cyan" font.name="lsp-icons" text="icons.actions.reverse"/>
 								</cell>
+								<knob id="psh${i}" size="20"/>
 								<knob id="ihc${i}" size="20"/>
 								<knob id="itc${i}" size="20"/>
 								<knob id="ifi${i}" size="20" scolor="fade_in"/>
@@ -130,6 +130,7 @@
 							</ui:with>
 
 							<ui:with pad.h="6" pad.b="4" width.min="48" sline="true">
+								<value id="psh${i}"/>
 								<value id="ihc${i}"/>
 								<value id="itc${i}"/>
 								<value id="ifi${i}"/>
@@ -270,58 +271,68 @@
 				</ui:for>
 			</grid>
 		</group>
+	</grid>
 
-		<!-- Wet equalization -->
-		<cell cols="3">
-			<group text="groups.wet_signal_eq" visibility=":eqv" ipadding="0">
-				<grid rows="5" cols="12">
-
-					<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-
-					<cell rows="5"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-
-					<ui:with pad.h="6" pad.v="4" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
-						<label text="50"/>
-						<label text="107"/>
-						<label text="227"/>
-						<label text="484"/>
-						<label text="labels.flt.1k"/>
-						<label text="labels.flt.2_2k"/>
-						<label text="labels.flt.4_7k"/>
-						<label text="labels.flt.10k"/>
-					</ui:with>
+	<overlay id="eqv" trigger="eq_trigger" hpos="0" vpos="1" halign="1" valign="1" ipadding.t="4" padding.l="0" ipadding.l="0" padding.r="0" ipadding.r="0">
+		<group text="groups.wet_signal_eq" ipadding="0">
+			<grid rows="7" cols="12">
+
+				<cell cols="12">
+					<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" bg.color="bg_schema">
+						<void hfill="true" hexpand="true"/>
+						<button id="wpp" ui:inject="Button_green" text="labels.enable" size="16"/>
+					</hbox>
+				</cell>
 
-					<cell rows="5">
-						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-					</cell>
-
-					<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-
-					<combo id="lcm" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-
-					<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
-						<ui:for id="f" first="0" last="7">
-							<cell rows="3">
-								<fader id="eq_${f}" angle="1" scolor="(:wpp) ? 'fader' : 'fader_inactive'"/>
-							</cell>
-						</ui:for>
-					</ui:with>
+				<cell cols="12">
+					<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+				</cell>
 
-					<combo id="hcm" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
 
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.frequency" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="lcf" scolor="(:wpp) and (:lcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="hcf" scolor="(:wpp) and (:hcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-						<value id="lcf" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<ui:for id="f" first="0" last="7">
-							<value width.min="32" id="eq_${f}" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken"/>
-						</ui:for>
-						<value id="hcf" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</group>
-		</cell>
-	</grid>
+				<cell rows="5"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+
+				<ui:with pad.h="6" pad.v="4" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
+					<label text="50"/>
+					<label text="107"/>
+					<label text="227"/>
+					<label text="484"/>
+					<label text="labels.flt.1k"/>
+					<label text="labels.flt.2_2k"/>
+					<label text="labels.flt.4_7k"/>
+					<label text="labels.flt.10k"/>
+				</ui:with>
+
+				<cell rows="5">
+					<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+				</cell>
+
+				<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<combo id="lcm" pad.h="6" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
+					<ui:for id="f" first="0" last="7">
+						<cell rows="3">
+							<fader id="eq_${f}" angle="1" scolor="(:wpp) ? 'fader' : 'fader_inactive'"/>
+						</cell>
+					</ui:for>
+				</ui:with>
+
+				<combo id="hcm" pad.h="6" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<ui:with pad.h="6" pad.v="4">
+					<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<label text="labels.frequency" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="lcf" scolor="(:wpp) and (:lcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="hcf" scolor="(:wpp) and (:hcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+					<value id="lcf" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<ui:for id="f" first="0" last="7">
+						<value width.min="32" id="eq_${f}" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken"/>
+					</ui:for>
+					<value id="hcf" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				</ui:with>
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/res/main/ui/convolution/impulse_reverb/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/res/main/ui/convolution/impulse_reverb/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/res/main/ui/convolution/impulse_reverb/stereo.xml	2025-03-01 12:43:06.428590546 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/res/main/ui/convolution/impulse_reverb/stereo.xml	2025-08-26 18:15:54.529898436 +0000
@@ -1,15 +1,13 @@
 <plugin resizable="true">
-	<grid rows="4" cols="3" vspacing="4" hspacing="0">
+	<grid rows="3" cols="3" vspacing="4" hspacing="0">
 		<!-- IR editor -->
 		<cell>
 			<align halign="-1" hfill="true" vreduce="true">
 				<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" fill="false" bg.color="bg_schema">
 					<label text="labels.fft.frame"/>
 					<combo id="fft" pad.r="10"/>
-					<!-- <label text="labels.file" /> -->
-					<combo id="fsel"/>
-					<button id="wpp" pad.l="10" ui:inject="Button_green" text="labels.ir_equalizer" size="16"/>
-					<button id="eqv" ui:inject="Button_yellow" text="labels.flt.show_" size="16"/>
+					<combo id="fsel" pad.r="10"/>
+					<button id="eqv" ui:id="eq_trigger" ui:inject="Button_yellow" text="labels.ir_equalizer" size="16"/>
 				</hbox>
 			</align>
 		</cell>
@@ -107,9 +105,10 @@
 					<void bg.color="bg" pad.v="2" vreduce="true"/>
 
 					<ui:for id="i" first="0" last="3">
-						<grid rows="4" cols="6" bg.color="bg_schema" visibility=":fsel ieq ${i}">
+						<grid rows="4" cols="7" bg.color="bg_schema" visibility=":fsel ieq ${i}">
 							<ui:with pad.h="6" pad.v="4" vreduce="true">
 								<label text="labels.sedit.reverse"/>
+								<label text="labels.sedit.pitch"/>
 								<label text="labels.sedit.head_cut"/>
 								<label text="labels.sedit.tail_cut"/>
 								<label text="labels.sedit.fade_in"/>
@@ -117,12 +116,13 @@
 								<label text="labels.listen"/>
 							</ui:with>
 
-							<cell cols="6"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
+							<cell cols="7"><hsep bg.color="bg" pad.v="2" vreduce="true"/></cell>
 
 							<ui:with pad.h="6" pad.v="4">
 								<cell rows="2">
 									<button id="irv${i}" bg.color="bg_schema" font.size="14" size="32" ui:inject="Button_cyan" font.name="lsp-icons" text="icons.actions.reverse"/>
 								</cell>
+								<knob id="psh${i}" size="20"/>
 								<knob id="ihc${i}" size="20"/>
 								<knob id="itc${i}" size="20"/>
 								<knob id="ifi${i}" size="20" scolor="fade_in"/>
@@ -138,6 +138,7 @@
 							</ui:with>
 
 							<ui:with pad.h="6" pad.b="4" width.min="48" sline="true">
+								<value id="psh${i}"/>
 								<value id="ihc${i}"/>
 								<value id="itc${i}"/>
 								<value id="ifi${i}"/>
@@ -280,58 +281,68 @@
 			</grid>
 
 		</group>
+	</grid>
 
-		<!-- Wet equalization -->
-		<cell cols="3">
-			<group text="groups.wet_signal_eq" visibility=":eqv" ipadding="0">
-				<grid rows="5" cols="12">
-
-					<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-
-					<cell rows="5"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-
-					<ui:with pad.h="6" pad.v="4" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
-						<label text="50"/>
-						<label text="107"/>
-						<label text="227"/>
-						<label text="484"/>
-						<label text="labels.flt.1k"/>
-						<label text="labels.flt.2_2k"/>
-						<label text="labels.flt.4_7k"/>
-						<label text="labels.flt.10k"/>
-					</ui:with>
-
-					<cell rows="5">
-						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-					</cell>
-
-					<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+	<overlay id="eqv" trigger="eq_trigger" hpos="0" vpos="1" halign="1" valign="1" ipadding.t="4" padding.l="0" ipadding.l="0" padding.r="0" ipadding.r="0">
+		<group text="groups.wet_signal_eq" ipadding="0">
+			<grid rows="7" cols="12">
+
+				<cell cols="12">
+						<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" bg.color="bg_schema">
+							<void hfill="true" hexpand="true"/>
+							<button id="wpp" ui:inject="Button_green" text="labels.enable" size="16"/>
+						</hbox>
+				</cell>
 
-					<combo id="lcm" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+				<cell cols="12">
+					<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+				</cell>
+
+				<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<cell rows="5"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+
+				<ui:with pad.h="6" pad.v="4" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
+					<label text="50"/>
+					<label text="107"/>
+					<label text="227"/>
+					<label text="484"/>
+					<label text="labels.flt.1k"/>
+					<label text="labels.flt.2_2k"/>
+					<label text="labels.flt.4_7k"/>
+					<label text="labels.flt.10k"/>
+				</ui:with>
 
-					<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
-						<ui:for id="f" first="0" last="7">
-							<cell rows="3">
-								<fader id="eq_${f}" angle="1" scolor="(:wpp) ? 'fader' : 'fader_inactive'"/>
-							</cell>
-						</ui:for>
-					</ui:with>
+				<cell rows="5">
+					<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+				</cell>
+
+				<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<combo id="lcm" pad.h="6" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
+					<ui:for id="f" first="0" last="7">
+						<cell rows="3">
+							<fader id="eq_${f}" angle="1" scolor="(:wpp) ? 'fader' : 'fader_inactive'"/>
+						</cell>
+					</ui:for>
+				</ui:with>
 
-					<combo id="hcm" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				<combo id="hcm" pad.h="6" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
 
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.frequency" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="lcf" scolor="(:wpp) and (:lcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="hcf" scolor="(:wpp) and (:hcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-						<value id="lcf" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<ui:for id="f" first="0" last="7">
-							<value width.min="32" id="eq_${f}" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken"/>
-						</ui:for>
-						<value id="hcf" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</group>
-		</cell>
-	</grid>
-</plugin>
+				<ui:with pad.h="6" pad.v="4">
+					<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<label text="labels.frequency" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="lcf" scolor="(:wpp) and (:lcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="hcf" scolor="(:wpp) and (:hcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+					<value id="lcf" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<ui:for id="f" first="0" last="7">
+						<value width.min="32" id="eq_${f}" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken"/>
+					</ui:for>
+					<value id="hcf" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				</ui:with>
+			</grid>
+		</group>
+	</overlay>
+	</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/src/doc/manuals/plugins/impulse_reverb.php 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/src/doc/manuals/plugins/impulse_reverb.php
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/src/doc/manuals/plugins/impulse_reverb.php	2025-03-01 12:43:06.432590522 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/src/doc/manuals/plugins/impulse_reverb.php	2025-08-26 18:15:54.533898397 +0000
@@ -48,7 +48,7 @@
 <ul>
 	<li><b>File</b> - file editor selector</li>
 	<li><b>FFT frame</b> - the maximum size of the FFT (Fast Fourier Transform) frame that can be used for time-continuous convolution</li>
-	<li><b>IR equalizer</b> - enables wet (processed) signal equalization in additional <b>Wet Signal Equalization</b> section</li>
+	<li><b>IR equalizer</b> - shows wet signal equalization overlay.</li>
 	<li><b>Show</b> - Displays the additional <b>Wet Signal Equalization</b> section in the UI</li>
 	<li><b>Reverse</b> - allows to reverse impulse file in time domain.</li>
 	<li><b>Head cut</b> - cut amount of milliseconds from the beginning of the impulse files, can be used to remove early reflections of reverb.</li>
@@ -87,8 +87,9 @@
 	<li><b>Output</b> - amount of gain additionally applied to the output signal.</li>
 </ul>
 
-<p><b>'Wet Signal Equalization' section</b> - visible only when <b>IR equalizer</b> parameter is turned on:</p>
+<p><b>Wet Signal Equalization</b> overlay:</p>
 <ul>
+	<li><b>Enabled</b> - enables wet (processed) signal equalization.</li>
 	<li><b>Low-cut</b> - sets the slope of the high-pass butterworth filter, possible slopes are 6, 12 and 18 dB/octave.</li>
 	<li><b>Low-cut freq</b> - the cutoff frequency of the high-pass butterworth filter.</li>
 	<li><b>Faders</b> - faders that allow to change the loudness of eight corresponding frequency bands in range of -12..+12 dB</li>
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/src/main/meta/impulse_reverb.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/src/main/meta/impulse_reverb.cpp
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/src/main/meta/impulse_reverb.cpp	2025-03-01 12:43:06.432590522 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/src/main/meta/impulse_reverb.cpp	2025-08-26 18:15:54.533898397 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-impulse-reverb
  * Created on: 3 авг. 2021 г.
@@ -27,7 +27,7 @@
 
 #define LSP_PLUGINS_IMPULSE_REVERB_VERSION_MAJOR       1
 #define LSP_PLUGINS_IMPULSE_REVERB_VERSION_MINOR       0
-#define LSP_PLUGINS_IMPULSE_REVERB_VERSION_MICRO       25
+#define LSP_PLUGINS_IMPULSE_REVERB_VERSION_MICRO       27
 
 #define LSP_PLUGINS_IMPULSE_REVERB_VERSION  \
     LSP_MODULE_VERSION( \
@@ -98,17 +98,17 @@ namespace lsp
         };
 
         #define IR_PAN_MONO \
-            PAN_CTL("p", "Panorama", 0.0f)
+            PAN_CTL("p", "Panorama", "Pan", 0.0f)
 
         #define IR_PAN_STEREO \
-            PAN_CTL("pl", "Left channel panorama", -100.0f), \
-            PAN_CTL("pr", "Right channel panorama", 100.0f)
+            PAN_CTL("pl", "Left channel panorama", "Pan L", -100.0f), \
+            PAN_CTL("pr", "Right channel panorama", "Pan R", 100.0f)
 
         #define IR_COMMON(pan) \
             BYPASS, \
-            COMBO("fsel", "File selector", 0, ir_file_select), \
-            COMBO("fft", "FFT size", impulse_reverb_metadata::FFT_RANK_DEFAULT, ir_fft_rank), \
-            CONTROL("pd", "Pre-delay", U_MSEC, impulse_reverb_metadata::PREDELAY), \
+            COMBO("fsel", "File selector", "File selector", 0, ir_file_select), \
+            COMBO("fft", "FFT size", "FFT size", impulse_reverb_metadata::FFT_RANK_DEFAULT, ir_fft_rank), \
+            CONTROL("pd", "Pre-delay", "Pre-delay", U_MSEC, impulse_reverb_metadata::PREDELAY), \
             pan, \
             DRY_GAIN(1.0f), \
             WET_GAIN(1.0f), \
@@ -117,38 +117,39 @@ namespace lsp
 
         #define IR_SAMPLE_FILE(id, label)   \
             PATH("ifn" id, "Impulse file" label),    \
-            CONTROL("ihc" id, "Head cut" label, U_MSEC, impulse_reverb_metadata::CONV_LENGTH), \
-            CONTROL("itc" id, "Tail cut" label, U_MSEC, impulse_reverb_metadata::CONV_LENGTH), \
-            CONTROL("ifi" id, "Fade in" label, U_MSEC, impulse_reverb_metadata::CONV_LENGTH), \
-            CONTROL("ifo" id, "Fade out" label, U_MSEC, impulse_reverb_metadata::CONV_LENGTH), \
-            TRIGGER("ils" id, "Impulse listen preview" label), \
-            TRIGGER("ilc" id, "Impulse stop preview" label), \
-            SWITCH("irv" id, "Impulse reverse" label, 0.0f), \
+            CONTROL("psh" id, "File pitch" label, NULL, U_SEMITONES, impulse_reverb_metadata::FILE_PITCH), \
+            CONTROL("ihc" id, "Head cut" label, NULL, U_MSEC, impulse_reverb_metadata::CONV_LENGTH), \
+            CONTROL("itc" id, "Tail cut" label, NULL, U_MSEC, impulse_reverb_metadata::CONV_LENGTH), \
+            CONTROL("ifi" id, "Fade in" label, NULL, U_MSEC, impulse_reverb_metadata::CONV_LENGTH), \
+            CONTROL("ifo" id, "Fade out" label, NULL, U_MSEC, impulse_reverb_metadata::CONV_LENGTH), \
+            TRIGGER("ils" id, "Impulse listen preview" label, "Listen" label), \
+            TRIGGER("ilc" id, "Impulse stop preview" label, "Stop" label), \
+            SWITCH("irv" id, "Impulse reverse" label, "Reverse" label, 0.0f), \
             STATUS("ifs" id, "Load status" label), \
             METER("ifl" id, "Impulse length" label, U_MSEC, impulse_reverb_metadata::CONV_LENGTH), \
             MESH("ifd" id, "Impulse file contents" label, impulse_reverb_metadata::TRACKS_MAX, impulse_reverb_metadata::MESH_SIZE)
 
         #define IR_CONVOLVER_MONO(id, label, file, track, mix) \
-            COMBO("csf" id, "Channel source file" label, file, ir_files), \
-            COMBO("cst" id, "Channel source track" label, track, ir_tracks), \
-            AMP_GAIN100("mk" id, "Makeup gain" label, 1.0f), \
-            SWITCH("cam" id, "Channel mute" label, 0.0f), \
+            COMBO("csf" id, "Channel source file" label, "Source" label, file, ir_files), \
+            COMBO("cst" id, "Channel source track" label, "Track" label, track, ir_tracks), \
+            AMP_GAIN100("mk" id, "Makeup gain" label, "Makeup" label, 1.0f), \
+            SWITCH("cam" id, "Channel mute" label, "Mute" label, 0.0f), \
             BLINK("ca" id, "Channel activity" label), \
-            CONTROL("pd" id, "Channel pre-delay" label, U_MSEC, impulse_reverb_metadata::PREDELAY), \
-            PAN_CTL("com" id, "Channel Left/Right output mix" label, mix)
+            CONTROL("pd" id, "Channel pre-delay" label, "Pre-delay" label, U_MSEC, impulse_reverb_metadata::PREDELAY), \
+            PAN_CTL("com" id, "Channel Left/Right output mix" label, "Out pan" label, mix)
 
         #define IR_CONVOLVER_STEREO(id, label, file, track, in_mix, out_mix) \
-            PAN_CTL("cim" id, "Left/Right input mix" label, in_mix), \
+            PAN_CTL("cim" id, "Left/Right input mix" label, "In pan" label, in_mix), \
             IR_CONVOLVER_MONO(id, label, file, track, out_mix)
 
         #define IR_EQ_BAND(id, freq)    \
-            CONTROL("eq_" #id, "Band " freq "Hz gain", U_GAIN_AMP, impulse_reverb_metadata::BA)
+            CONTROL("eq_" #id, "Band " freq "Hz gain", "Eq " freq, U_GAIN_AMP, impulse_reverb_metadata::BA)
 
         #define IR_EQUALIZER    \
-            SWITCH("wpp", "Wet post-process", 0),    \
-            SWITCH("eqv", "Equalizer visibility", 0),    \
-            COMBO("lcm", "Low-cut mode", 0, filter_slope),      \
-            LOG_CONTROL("lcf", "Low-cut frequency", U_HZ, impulse_reverb_metadata::LCF),   \
+            SWITCH("wpp", "Wet post-process", "Wet postproc", 0),    \
+            SWITCH("eqv", "Equalizer visibility", "Show Eq", 0),    \
+            COMBO("lcm", "Low-cut mode", "LC mode", 0, filter_slope),      \
+            LOG_CONTROL("lcf", "Low-cut frequency", "LC freq", U_HZ, impulse_reverb_metadata::LCF),   \
             IR_EQ_BAND(0, "50"), \
             IR_EQ_BAND(1, "107"), \
             IR_EQ_BAND(2, "227"), \
@@ -157,8 +158,8 @@ namespace lsp
             IR_EQ_BAND(5, "2.2 k"), \
             IR_EQ_BAND(6, "4.7 k"), \
             IR_EQ_BAND(7, "10 k"), \
-            COMBO("hcm", "High-cut mode", 0, filter_slope),      \
-            LOG_CONTROL("hcf", "High-cut frequency", U_HZ, impulse_reverb_metadata::HCF)
+            COMBO("hcm", "High-cut mode", "HC mode", 0, filter_slope),      \
+            LOG_CONTROL("hcf", "High-cut frequency", "HC freq", U_HZ, impulse_reverb_metadata::HCF)
 
         static const port_t impulse_reverb_mono_ports[] =
         {
diff -pruN 1.2.21-5/modules/lsp-plugins-impulse-reverb/src/main/plug/impulse_reverb.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/src/main/plug/impulse_reverb.cpp
--- 1.2.21-5/modules/lsp-plugins-impulse-reverb/src/main/plug/impulse_reverb.cpp	2025-03-01 12:43:06.432590522 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-impulse-reverb/src/main/plug/impulse_reverb.cpp	2025-08-26 18:15:54.533898397 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-impulse-reverb
  * Created on: 3 авг. 2021 г.
@@ -211,15 +211,16 @@ namespace lsp
                     af->vThumbs[j]      = NULL;
 
                 af->fNorm           = 0.0f;
-                af->bRender         = true;
                 af->nStatus         = STATUS_UNKNOWN_ERR;
+                af->bRender         = true;
                 af->bSync           = true;
+                af->bReverse        = false;
 
+                af->fPitch          = 0.0f;
                 af->fHeadCut        = 0.0f;
                 af->fTailCut        = 0.0f;
                 af->fFadeIn         = 0.0f;
                 af->fFadeOut        = 0.0f;
-                af->bReverse        = false;
 
                 af->pFile           = NULL;
                 af->pHeadCut        = NULL;
@@ -386,19 +387,23 @@ namespace lsp
                 }
 
                 f->fNorm        = 1.0f;
-                f->bRender      = false;
                 f->nStatus      = STATUS_UNSPECIFIED;
+                f->bRender      = false;
                 f->bSync        = true;
+                f->bReverse     = false;
+
+                f->fPitch       = 0.0f;
                 f->fHeadCut     = 0.0f;
                 f->fTailCut     = 0.0f;
                 f->fFadeIn      = 0.0f;
                 f->fFadeOut     = 0.0f;
-                f->bReverse     = false;
+                f->fDuration    = 0.0f;
 
                 // Initialize loader
                 f->sLoader.init(this, f);
 
                 f->pFile        = NULL;
+                f->pPitch       = NULL;
                 f->pHeadCut     = NULL;
                 f->pTailCut     = NULL;
                 f->pFadeIn      = NULL;
@@ -500,6 +505,7 @@ namespace lsp
                 af_descriptor_t *f  = &vFiles[i];
 
                 BIND_PORT(f->pFile);
+                BIND_PORT(f->pPitch);
                 BIND_PORT(f->pHeadCut);
                 BIND_PORT(f->pTailCut);
                 BIND_PORT(f->pFadeIn);
@@ -732,17 +738,20 @@ namespace lsp
                 af_descriptor_t *f  = &vFiles[i];
 
                 // Check that file parameters have changed
+                float pitch         = f->pPitch->value();
                 float head_cut      = f->pHeadCut->value();
                 float tail_cut      = f->pTailCut->value();
                 float fade_in       = f->pFadeIn->value();
                 float fade_out      = f->pFadeOut->value();
                 bool reverse        = f->pReverse->value() >= 0.5f;
-                if ((f->fHeadCut != head_cut) ||
+                if ((f->fPitch != pitch) ||
+                    (f->fHeadCut != head_cut) ||
                     (f->fTailCut != tail_cut) ||
                     (f->fFadeIn  != fade_in ) ||
                     (f->fFadeOut != fade_out) ||
                     (f->bReverse != reverse))
                 {
+                    f->fPitch           = pitch;
                     f->fHeadCut         = head_cut;
                     f->fTailCut         = tail_cut;
                     f->fFadeIn          = fade_in;
@@ -1011,6 +1020,10 @@ namespace lsp
                 c->pActivity->set_value((c->pCurr != NULL) ? 1.0f : 0.0f);
             }
 
+            // Do not output meshes until configuration finishes
+            if (!sConfigurator.idle())
+                return;
+
             for (size_t i=0; i<meta::impulse_reverb_metadata::FILES; ++i)
             {
                 af_descriptor_t *af     = &vFiles[i];
@@ -1022,7 +1035,7 @@ namespace lsp
                 size_t channels         = (active != NULL) ? active->channels() : 0;
                 channels                = lsp_min(channels, 2u);
 
-                float duration          = (af->pOriginal != NULL) ? af->pOriginal->duration() : 0;
+                const float duration    = (af->pOriginal != NULL) ? af->fDuration : 0.0f;
                 af->pLength->set_value(duration * 1000.0f);
                 af->pStatus->set_value(af->nStatus);
 
@@ -1092,14 +1105,6 @@ namespace lsp
                 return status;
             }
 
-            // Try to resample
-            status  = af->resample(fSampleRate);
-            if (status != STATUS_OK)
-            {
-                lsp_trace("resample failed: status=%d (%s)", status, get_status(status));
-                return status;
-            }
-
             // Determine the normalizing factor
             size_t channels         = af->channels();
             float max = 0.0f;
@@ -1133,13 +1138,31 @@ namespace lsp
                 if (af == NULL)
                     continue;
 
+                // Copy data of original sample to temporary sample and perform resampling if needed
+                dspu::Sample temp;
+                const size_t sample_rate_dst  = fSampleRate * dspu::semitones_to_frequency_shift(-f->fPitch);
+                if (sample_rate_dst != af->sample_rate())
+                {
+                    if (temp.copy(af) != STATUS_OK)
+                    {
+                        lsp_warn("Error copying source sample");
+                        return STATUS_NO_MEM;
+                    }
+                    if (temp.resample(sample_rate_dst) != STATUS_OK)
+                    {
+                        lsp_warn("Error resampling source sample");
+                        return STATUS_NO_MEM;
+                    }
+                    af          = &temp;
+                }
+
                 // Allocate new sample
                 dspu::Sample *s     = new dspu::Sample();
                 if (s == NULL)
                     return STATUS_NO_MEM;
                 lsp_finally { destroy_sample(s); };
 
-                ssize_t flen        = af->samples();
+                const ssize_t flen  = af->samples();
                 size_t channels     = lsp_min(af->channels(), meta::impulse_reverb_metadata::TRACKS_MAX);
 
                 // Buffer is present, file is present, check boundaries
@@ -1194,6 +1217,7 @@ namespace lsp
 
                 // Commit sample to the processed list
                 lsp::swap(f->pProcessed, s);
+                f->fDuration        = dspu::samples_to_seconds(fSampleRate, flen);
             }
 
             // Randomize phase of the convolver
@@ -1335,19 +1359,22 @@ namespace lsp
                         v->writev("vThumbs", af->vThumbs, meta::impulse_reverb_metadata::TRACKS_MAX);
 
                         v->write("fNorm", af->fNorm);
-                        v->write("bRender", af->bRender);
                         v->write("nStatus", af->nStatus);
+                        v->write("bRender", af->bRender);
                         v->write("bSync", af->bSync);
+                        v->write("bReverse", af->bReverse);
 
+                        v->write("fPitch", af->fPitch);
                         v->write("fHeadCut", af->fHeadCut);
                         v->write("fTailCut", af->fTailCut);
                         v->write("fFadeIn", af->fFadeIn);
                         v->write("fFadeOut", af->fFadeOut);
-                        v->write("bReverse", af->bReverse);
+                        v->write("fDuration", af->fDuration);
 
                         v->write_object("pLoader", &af->sLoader);
 
                         v->write("pFile", af->pFile);
+                        v->write("pPitch", af->pPitch);
                         v->write("pHeadCut", af->pHeadCut);
                         v->write("pTailCut", af->pTailCut);
                         v->write("pFadeIn", af->pFadeIn);
diff -pruN 1.2.21-5/modules/lsp-plugins-latency-meter/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-latency-meter/.github/workflows/build.yml	2025-03-01 12:43:05.968593307 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/.github/workflows/build.yml	2025-08-26 18:15:52.153921495 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-latency-meter/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-latency-meter/CHANGELOG	2025-03-01 12:43:05.968593307 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/CHANGELOG	2025-08-26 18:15:52.157921456 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts and dependencies.
+
 === 1.0.24 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-latency-meter/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-latency-meter/dependencies.mk	2025-03-01 12:43:05.972593283 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/dependencies.mk	2025-08-26 18:15:52.157921456 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-latency-meter/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-latency-meter/make/tools.mk	2025-03-01 12:43:05.972593283 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/make/tools.mk	2025-08-26 18:15:52.157921456 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-latency-meter/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/modules.mk
--- 1.2.21-5/modules/lsp-plugins-latency-meter/modules.mk	2025-03-01 12:43:05.972593283 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/modules.mk	2025-08-26 18:15:52.157921456 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-latency-meter/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/project.mk
--- 1.2.21-5/modules/lsp-plugins-latency-meter/project.mk	2025-03-01 12:43:05.972593283 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/project.mk	2025-08-26 18:15:52.157921456 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Latency Meter Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-latency-meter/res/doc/screenshots/latency_meter.png and 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/res/doc/screenshots/latency_meter.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-latency-meter/src/main/meta/latency_meter.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/src/main/meta/latency_meter.cpp
--- 1.2.21-5/modules/lsp-plugins-latency-meter/src/main/meta/latency_meter.cpp	2025-03-01 12:43:05.976593260 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-latency-meter/src/main/meta/latency_meter.cpp	2025-08-26 18:15:52.161921418 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-latency-meter
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_LATENCY_METER_VERSION_MAJOR       1
 #define LSP_PLUGINS_LATENCY_METER_VERSION_MINOR       0
-#define LSP_PLUGINS_LATENCY_METER_VERSION_MICRO       24
+#define LSP_PLUGINS_LATENCY_METER_VERSION_MICRO       26
 
 #define LSP_PLUGINS_LATENCY_METER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -54,13 +54,13 @@ namespace lsp
         {
             PORTS_MONO_PLUGIN,
             BYPASS,
-            CONTROL("mlat", "Maximum Expected Latency", U_MSEC, latency_meter_metadata::LATENCY),
-            CONTROL("pthr", "Peak Threshold", U_GAIN_AMP, latency_meter_metadata::PEAK_THRESHOLD),
-            CONTROL("athr", "Absolute Threshold", U_GAIN_AMP, latency_meter_metadata::ABS_THRESHOLD),
-            AMP_GAIN10("gin", "Input Gain", 1.0f),
-            SWITCH("fback", "Feedback", 0.0f),
-            AMP_GAIN10("gout", "Output Gain", 1.0f),
-            TRIGGER("ttrig", "Triger Latency Measurement"),
+            CONTROL("mlat", "Maximum Expected Latency", "Max latency", U_MSEC, latency_meter_metadata::LATENCY),
+            CONTROL("pthr", "Peak Threshold", "Peak thresh", U_GAIN_AMP, latency_meter_metadata::PEAK_THRESHOLD),
+            CONTROL("athr", "Absolute Threshold", "Abs thresh", U_GAIN_AMP, latency_meter_metadata::ABS_THRESHOLD),
+            AMP_GAIN10("gin", "Input Gain", "Input gain", 1.0f),
+            SWITCH("fback", "Feedback", "Feedback", 0.0f),
+            AMP_GAIN10("gout", "Output Gain", "Output gain", 1.0f),
+            TRIGGER("ttrig", "Triger Latency Measurement", "Measure start"),
             METER("l_v", "Latency Value", U_MSEC, latency_meter_metadata::MTR_LATENCY),
             METER_GAIN("ilvl", "Input Level", GAIN_AMP_P_24_DB),
 
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-limiter/.github/workflows/build.yml	2025-03-01 12:43:06.600589513 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/.github/workflows/build.yml	2025-08-26 18:15:53.945904103 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-limiter/CHANGELOG	2025-03-01 12:43:06.600589513 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/CHANGELOG	2025-08-26 18:15:53.945904103 +0000
@@ -2,6 +2,13 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.28 ===
+* Added audio pre-mixing controls.
+* Updated build scripts and dependencies.
+
+=== 1.0.27 ===
+* Updated build scripts and dependencies.
+
 === 1.0.26 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-limiter/dependencies.mk	2025-03-01 12:43:06.600589513 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/dependencies.mk	2025-08-26 18:15:53.945904103 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/include/private/plugins/limiter.h 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/include/private/plugins/limiter.h
--- 1.2.21-5/modules/lsp-plugins-limiter/include/private/plugins/limiter.h	2025-03-01 12:43:06.600589513 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/include/private/plugins/limiter.h	2025-08-26 18:15:53.949904064 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-limiter
  * Created on: 3 авг. 2021 г.
@@ -62,6 +62,32 @@ namespace lsp
                     SCM_LINK,
                 };
 
+                typedef struct premix_t
+                {
+                    float                   fInToSc;            // Input -> Sidechain mix
+                    float                   fInToLink;          // Input -> Link mix
+                    float                   fLinkToIn;          // Link -> Input mix
+                    float                   fLinkToSc;          // Link -> Sidechain mix
+                    float                   fScToIn;            // Sidechain -> Input mix
+                    float                   fScToLink;          // Sidechain -> Link mix
+
+                    float                  *vIn[2];             // Input buffer
+                    float                  *vOut[2];            // Output buffer
+                    float                  *vSc[2];             // Sidechain buffer
+                    float                  *vLink[2];           // Link buffer
+
+                    float                  *vTmpIn[2];          // Replacement buffer for input
+                    float                  *vTmpLink[2];        // Replacement buffer for link
+                    float                  *vTmpSc[2];          // Replacement buffer for sidechain
+
+                    plug::IPort            *pInToSc;            // Input -> Sidechain mix
+                    plug::IPort            *pInToLink;          // Input -> Link mix
+                    plug::IPort            *pLinkToIn;          // Link -> Input mix
+                    plug::IPort            *pLinkToSc;          // Link -> Sidechain mix
+                    plug::IPort            *pScToIn;            // Sidechain -> Input mix
+                    plug::IPort            *pScToLink;          // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct channel_t
                 {
                     dspu::Bypass        sBypass;            // Bypass
@@ -73,9 +99,9 @@ namespace lsp
                     dspu::MeterGraph    sGraph[G_TOTAL];    // Input meter graph
                     dspu::Blink         sBlink;             // Gain blink
 
-                    const float        *vIn;                // Input data
-                    const float        *vSc;                // Sidechain data
-                    const float        *vShmIn;             // Shared memory input
+                    float              *vIn;                // Input data
+                    float              *vSc;                // Sidechain data
+                    float              *vShmIn;             // Shared memory input
                     float              *vOut;               // Output data
 
                     float              *vDataBuf;           // Audio data buffer (oversampled)
@@ -115,6 +141,7 @@ namespace lsp
                 bool                bUISync;        // Synchronize with UI
 
                 dspu::Dither        sDither;        // Dither
+                premix_t            sPremix;        // Premix
 
                 plug::IPort        *pBypass;        // Bypass port
                 plug::IPort        *pInGain;        // Input gain
@@ -148,6 +175,8 @@ namespace lsp
 
             protected:
                 uint32_t                    decode_sidechain_mode(uint32_t mode);
+                void                        update_premix();
+                void                        premix_channel(uint32_t channel, size_t count);
                 void                        sync_latency();
                 void                        do_destroy();
 
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-limiter/make/tools.mk	2025-03-01 12:43:06.600589513 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/make/tools.mk	2025-08-26 18:15:53.949904064 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/modules.mk
--- 1.2.21-5/modules/lsp-plugins-limiter/modules.mk	2025-03-01 12:43:06.600589513 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/modules.mk	2025-08-26 18:15:53.949904064 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/project.mk
--- 1.2.21-5/modules/lsp-plugins-limiter/project.mk	2025-03-01 12:43:06.600589513 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/project.mk	2025-08-26 18:15:53.949904064 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Limiter Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.26
+ARTIFACT_VERSION            = 1.0.28
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-limiter/res/doc/screenshots/limiter_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/res/doc/screenshots/limiter_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-limiter/res/doc/screenshots/limiter_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/res/doc/screenshots/limiter_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-limiter/res/doc/screenshots/sc_limiter_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/res/doc/screenshots/sc_limiter_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-limiter/res/doc/screenshots/sc_limiter_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/res/doc/screenshots/sc_limiter_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/res/main/ui/dynamics/limiter/single/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/res/main/ui/dynamics/limiter/single/mono.xml
--- 1.2.21-5/modules/lsp-plugins-limiter/res/main/ui/dynamics/limiter/single/mono.xml	2025-03-01 12:43:06.600589513 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/res/main/ui/dynamics/limiter/single/mono.xml	2025-08-26 18:15:53.953904026 +0000
@@ -1,61 +1,63 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+
 	<vbox>
 		<!-- Top part -->
 		<grid rows="3" cols="2" hspacing="4">
 
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<!-- Time graph -->
-					<graph width.min="560" height.min="280" expand="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<marker v="-12 db" ox="1" oy="0" color="graph_alt_1"/>
-						<marker v="-36 db" ox="1" oy="0" color="graph_alt_1"/>
-						<marker v="-60 db" ox="1" oy="0" color="graph_alt_1"/>
-						<ui:for id="t" first="0" last="3">
-							<marker v="${t}.5" ox="0" oy="1" color="graph_alt_1"/>
-						</ui:for>
-						<!-- Yellow grid -->
-						<marker v="-24 db" ox="1" oy="0" color="graph_sec"/>
-						<ui:for id="t" first="1" last="3">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-
-						<!-- Axis -->
-						<axis min="0" max="4" color="graph_prim" angle="1.0" log="false" visibility="false"/>
-						<axis min="-48 db" max="12 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-						<!-- Baseline -->
-						<marker v="0 db" ox="1" oy="0" color="graph_prim" width="2"/>
-
-						<!-- Meshes -->
-						<mesh id="ig" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":igv"/>
-						<mesh id="og" width="2" color="left" visibility=":ogv"/>
-						<mesh id="scg" width="2" color="sidechain_1" visibility=":scgv"/>
-						<mesh id="grg" width="2" color="bright_blue" visibility=":grgv" fcolor="bright_blue" fcolor.a="0.8" fill="true"/>
-
-						<!-- Markers -->
-						<marker id="th" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50"
-						hlborder="50" color.a="0.1"
-						hcolor.a="0.0"
-						lcolor.a="0.8"
-						hlcolor.a="0.6"/>
-
-						<!-- Text -->
-						<ui:attributes x="4" halign="1" valign="-1">
-							<text y="12 db" text="graph.values.x:db" text:value="12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="graph.units.s" valign="1"/>
-						</ui:attributes>
-						<ui:for id="t" first="0" last="3">
-							<text x="${t}" y="-48 db" text="${t}" halign="-1" valign="1"/>
-							<text x="${t}.5" y="-48 db" text="${t}.5" halign="-1" valign="1"/>
-						</ui:for>
-					</graph>
-				</group>
+			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
+				<!-- Time graph -->
+				<graph width.min="560" height.min="280" expand="true">
+					<origin hpos="1" vpos="-1" visible="false"/>
+
+					<!-- Gray grid -->
+					<marker v="-12 db" ox="1" oy="0" color="graph_alt_1"/>
+					<marker v="-36 db" ox="1" oy="0" color="graph_alt_1"/>
+					<marker v="-60 db" ox="1" oy="0" color="graph_alt_1"/>
+					<ui:for id="t" first="0" last="3">
+						<marker v="${t}.5" ox="0" oy="1" color="graph_alt_1"/>
+					</ui:for>
+					<!-- Yellow grid -->
+					<marker v="-24 db" ox="1" oy="0" color="graph_sec"/>
+					<ui:for id="t" first="1" last="3">
+						<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
+					</ui:for>
+
+					<!-- Axis -->
+					<axis min="0" max="4" color="graph_prim" angle="1.0" log="false" visibility="false"/>
+					<axis min="-48 db" max="12 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
+
+					<!-- Baseline -->
+					<marker v="0 db" ox="1" oy="0" color="graph_prim" width="2"/>
+
+					<!-- Meshes -->
+					<mesh id="ig" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":igv"/>
+					<mesh id="og" width="2" color="left" visibility=":ogv"/>
+					<mesh id="scg" width="2" color="sidechain_1" visibility=":scgv"/>
+					<mesh id="grg" width="2" color="bright_blue" visibility=":grgv" fcolor="bright_blue" fcolor.a="0.8" fill="true"/>
+
+					<!-- Markers -->
+					<marker id="th" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50"
+					hlborder="50" color.a="0.1"
+					hcolor.a="0.0"
+					lcolor.a="0.8"
+					hlcolor.a="0.6"/>
+
+					<!-- Text -->
+					<ui:attributes x="4" halign="1" valign="-1">
+						<text y="12 db" text="graph.values.x:db" text:value="12"/>
+						<text y="0 db" text="0"/>
+						<text y="-12 db" text="-12"/>
+						<text y="-24 db" text="-24"/>
+						<text y="-36 db" text="-36"/>
+						<text y="-48 db" text="graph.units.s" valign="1"/>
+					</ui:attributes>
+					<ui:for id="t" first="0" last="3">
+						<text x="${t}" y="-48 db" text="${t}" halign="-1" valign="1"/>
+						<text x="${t}.5" y="-48 db" text="${t}.5" halign="-1" valign="1"/>
+					</ui:for>
+				</graph>
+			</group>
 
 			<grid rows="3" cols="4" hfill="false" hexpand="false" hspacing="4">
 				<ui:with bg.color="bg_schema">
@@ -104,6 +106,7 @@
 					<combo id="dith" pad.r="12"/>
 					<void hexpand="true" />
 
+					<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 					<button id="alr" height="22" width="48" text="labels.alr" ui:inject="Button_yellow"/>
 					<button id="pause" height="22" width="48" text="labels.pause" ui:inject="Button_green"/>
 					<button id="clear" height="22" width="48" text="labels.clear" ui:inject="Button_red" pad.r="2"/>
@@ -199,4 +202,43 @@
 			</group>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/res/main/ui/dynamics/limiter/single/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/res/main/ui/dynamics/limiter/single/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-limiter/res/main/ui/dynamics/limiter/single/stereo.xml	2025-03-01 12:43:06.600589513 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/res/main/ui/dynamics/limiter/single/stereo.xml	2025-08-26 18:15:53.953904026 +0000
@@ -1,64 +1,66 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
 	<vbox>
 		<!-- Top part -->
 		<grid rows="3" cols="2" hspacing="4">
-				<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
-					<!-- Time graph -->
-					<graph width.min="560" height.min="280" expand="true">
-						<origin hpos="1" vpos="-1" visible="false"/>
-
-						<!-- Gray grid -->
-						<marker v="-12 db" ox="1" oy="0" color="graph_alt_1"/>
-						<marker v="-36 db" ox="1" oy="0" color="graph_alt_1"/>
-						<marker v="-60 db" ox="1" oy="0" color="graph_alt_1"/>
-						<ui:for id="t" first="0" last="3">
-							<marker v="${t}.5" ox="0" oy="1" color="graph_alt_1"/>
-						</ui:for>
-						<!-- Yellow grid -->
-						<marker v="-24 db" ox="1" oy="0" color="graph_sec"/>
-						<ui:for id="t" first="1" last="3">
-							<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
-						</ui:for>
-
-						<!-- Axis -->
-						<axis min="0" max="4" color="graph_prim" angle="1.0" log="false" visibility="false"/>
-						<axis min="-48 db" max="12 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
-
-						<!-- Baseline -->
-						<marker v="0 db" ox="1" oy="0" color="graph_prim" width="2"/>
-
-						<!-- Meshes -->
-						<mesh id="ig_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":igv_l"/>
-						<mesh id="ig_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":igv_r"/>
-						<mesh id="og_l" width="2" color="left" visibility=":ogv_l"/>
-						<mesh id="og_r" width="2" color="right" visibility=":ogv_r"/>
-						<mesh id="scg_l" width="2" color="sidechain_1" visibility=":scgv_l"/>
-						<mesh id="scg_r" width="2" color="sidechain_2" visibility=":scgv_r"/>
-						<mesh id="grg_l" width="2" color="bright_blue" visibility=":grgv_l" fcolor="bright_blue" fcolor.a="0.8" fill="true"/>
-						<mesh id="grg_r" width="2" color="bright_blue" visibility=":grgv_r" fcolor="bright_blue" fcolor.a="0.8" fill="true"/>
-
-						<!-- Markers -->
-						<marker id="th" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50"
-						hlborder="50" color.a="0.1"
-						hcolor.a="0.0"
-						lcolor.a="0.8"
-						hlcolor.a="0.6"/>
-
-						<!-- Text -->
-						<ui:attributes x="4" halign="1" valign="-1">
-							<text y="12 db" text="graph.values.x:db" text:value="12"/>
-							<text y="0 db" text="0"/>
-							<text y="-12 db" text="-12"/>
-							<text y="-24 db" text="-24"/>
-							<text y="-36 db" text="-36"/>
-							<text y="-48 db" text="graph.units.s" valign="1"/>
-						</ui:attributes>
-						<ui:for id="t" first="0" last="3">
-							<text x="${t}" y="-48 db" text="${t}" halign="-1" valign="1"/>
-							<text x="${t}.5" y="-48 db" text="${t}.5" halign="-1" valign="1"/>
-						</ui:for>
-					</graph>
-				</group>
+			<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.time">
+				<!-- Time graph -->
+				<graph width.min="560" height.min="280" expand="true">
+					<origin hpos="1" vpos="-1" visible="false"/>
+
+					<!-- Gray grid -->
+					<marker v="-12 db" ox="1" oy="0" color="graph_alt_1"/>
+					<marker v="-36 db" ox="1" oy="0" color="graph_alt_1"/>
+					<marker v="-60 db" ox="1" oy="0" color="graph_alt_1"/>
+					<ui:for id="t" first="0" last="3">
+						<marker v="${t}.5" ox="0" oy="1" color="graph_alt_1"/>
+					</ui:for>
+					<!-- Yellow grid -->
+					<marker v="-24 db" ox="1" oy="0" color="graph_sec"/>
+					<ui:for id="t" first="1" last="3">
+						<marker v="${t}" ox="0" oy="1" color="graph_sec"/>
+					</ui:for>
+
+					<!-- Axis -->
+					<axis min="0" max="4" color="graph_prim" angle="1.0" log="false" visibility="false"/>
+					<axis min="-48 db" max="12 db" color="graph_prim" angle="0.5" log="true" visibility="false"/>
+
+					<!-- Baseline -->
+					<marker v="0 db" ox="1" oy="0" color="graph_prim" width="2"/>
+
+					<!-- Meshes -->
+					<mesh id="ig_l" width="0" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":igv_l"/>
+					<mesh id="ig_r" width="0" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":igv_r"/>
+					<mesh id="og_l" width="2" color="left" visibility=":ogv_l"/>
+					<mesh id="og_r" width="2" color="right" visibility=":ogv_r"/>
+					<mesh id="scg_l" width="2" color="sidechain_1" visibility=":scgv_l"/>
+					<mesh id="scg_r" width="2" color="sidechain_2" visibility=":scgv_r"/>
+					<mesh id="grg_l" width="2" color="bright_blue" visibility=":grgv_l" fcolor="bright_blue" fcolor.a="0.8" fill="true"/>
+					<mesh id="grg_r" width="2" color="bright_blue" visibility=":grgv_r" fcolor="bright_blue" fcolor.a="0.8" fill="true"/>
+
+					<!-- Markers -->
+					<marker id="th" editable="true" width="3" pointer="vsize" color="threshold" hcolor="threshold" lcolor="threshold" hlcolor="threshold" ox="1" oy="0" lborder="50"
+					hlborder="50" color.a="0.1"
+					hcolor.a="0.0"
+					lcolor.a="0.8"
+					hlcolor.a="0.6"/>
+
+					<!-- Text -->
+					<ui:attributes x="4" halign="1" valign="-1">
+						<text y="12 db" text="graph.values.x:db" text:value="12"/>
+						<text y="0 db" text="0"/>
+						<text y="-12 db" text="-12"/>
+						<text y="-24 db" text="-24"/>
+						<text y="-36 db" text="-36"/>
+						<text y="-48 db" text="graph.units.s" valign="1"/>
+					</ui:attributes>
+					<ui:for id="t" first="0" last="3">
+						<text x="${t}" y="-48 db" text="${t}" halign="-1" valign="1"/>
+						<text x="${t}.5" y="-48 db" text="${t}.5" halign="-1" valign="1"/>
+					</ui:for>
+				</graph>
+			</group>
 
 			<grid rows="3" cols="4" hfill="false" hexpand="false" hspacing="4">
 				<ui:with bg.color="bg_schema">
@@ -127,6 +129,7 @@
 					<combo id="dith" pad.r="12"/>
 					<void hexpand="true" />
 
+					<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 					<button id="alr" height="22" width="48" text="labels.alr" ui:inject="Button_yellow"/>
 					<button id="pause" height="22" width="48" text="labels.pause" ui:inject="Button_green"/>
 					<button id="clear" height="22" width="48" text="labels.clear" ui:inject="Button_red" pad.r="2"/>
@@ -226,4 +229,43 @@
 			</group>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/src/doc/manuals/plugins/limiter.php 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/src/doc/manuals/plugins/limiter.php
--- 1.2.21-5/modules/lsp-plugins-limiter/src/doc/manuals/plugins/limiter.php	2025-03-01 12:43:06.604589490 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/src/doc/manuals/plugins/limiter.php	2025-08-26 18:15:53.953904026 +0000
@@ -54,7 +54,7 @@ words: the more work should be done, the
 </p>
 <?php out_image('graph/limiter-envelope', 'Envelope forms of the patch') ?>
 <p>
-	On this image, sloping lines mean the transision part of the patch.
+	On this image, sloping lines mean the transition part of the patch.
 	The flat cap in the middle before the peak is a half of attack time, the flat cap in the middle after the peak is a half of release time.
 	Also it's obvious that different envelope forms differently affect dynamics of the signal.
 </p>
@@ -64,6 +64,8 @@ words: the more work should be done, the
 	<li>
 		<b>Bypass</b> - bypass switch, when turned on (led indicator is shining), the plugin bypasses signal.
 	</li>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
+	<li><b>ALR</b> - enables automatic level regulation.</li>
 	<li><b>Pause</b> - pauses any updates of the limiter graph.</li>
 	<li><b>Clear</b> - clears all graphs.</li>
 	<li><b>Mode</b> - the selected mode to use by limiter:</li>
@@ -144,3 +146,18 @@ words: the more work should be done, the
 	<li><b>Input</b> - overall input signal gain adjustment.</li>
 	<li><b>Output</b> - overall output signal gain adjustment.</li>
 </ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
+
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/src/main/meta/limiter.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/src/main/meta/limiter.cpp
--- 1.2.21-5/modules/lsp-plugins-limiter/src/main/meta/limiter.cpp	2025-03-01 12:43:06.604589490 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/src/main/meta/limiter.cpp	2025-08-26 18:15:53.953904026 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-limiter
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_LIMITER_VERSION_MAJOR       1
 #define LSP_PLUGINS_LIMITER_VERSION_MINOR       0
-#define LSP_PLUGINS_LIMITER_VERSION_MICRO       26
+#define LSP_PLUGINS_LIMITER_VERSION_MICRO       28
 
 #define LSP_PLUGINS_LIMITER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -122,25 +122,37 @@ namespace lsp
             { NULL, NULL }
         };
 
+        #define LIMIT_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define LIMIT_SC_PREMIX \
+            LIMIT_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
+
         #define LIMIT_COMMON    \
             BYPASS,             \
             IN_GAIN,            \
             OUT_GAIN,           \
-            AMP_GAIN100("scp", "Sidechain preamp", GAIN_AMP_0_DB), \
-            SWITCH("alr", "Automatic level regulation", 1.0f), \
-            LOG_CONTROL("alr_at", "Automatic level regulation attack time", U_MSEC, limiter_metadata::ALR_ATTACK_TIME), \
-            LOG_CONTROL("alr_rt", "Automatic level regulation release time", U_MSEC, limiter_metadata::ALR_RELEASE_TIME), \
-            COMBO("mode", "Operating mode", limiter_metadata::LOM_DEFAULT, limiter_oper_modes), \
-            LOG_CONTROL("th", "Threshold", U_GAIN_AMP, limiter_metadata::THRESHOLD), \
-            LOG_CONTROL("knee", "Knee", U_GAIN_AMP, limiter_metadata::KNEE), \
-            SWITCH("boost", "Gain boost", 1.0f), \
-            LOG_CONTROL("lk", "Lookahead", U_MSEC, limiter_metadata::LOOKAHEAD), \
-            LOG_CONTROL("at", "Attack time", U_MSEC, limiter_metadata::ATTACK_TIME), \
-            LOG_CONTROL("rt", "Release time", U_MSEC, limiter_metadata::RELEASE_TIME), \
-            COMBO("ovs", "Oversampling", limiter_metadata::OVS_DEFAULT, limiter_ovs_modes),           \
-            COMBO("dith", "Dithering", limiter_metadata::DITHER_DEFAULT, limiter_dither_modes),           \
-            SWITCH("pause", "Pause graph analysis", 0.0f), \
-            TRIGGER("clear", "Clear graph analysis")
+            AMP_GAIN100("scp", "Sidechain preamp", "SC preamp", GAIN_AMP_0_DB), \
+            SWITCH("alr", "Automatic level regulation", "ALR on", 1.0f), \
+            LOG_CONTROL("alr_at", "Automatic level regulation attack time", "ALR att time", U_MSEC, limiter_metadata::ALR_ATTACK_TIME), \
+            LOG_CONTROL("alr_rt", "Automatic level regulation release time", "ALR rel time", U_MSEC, limiter_metadata::ALR_RELEASE_TIME), \
+            COMBO("mode", "Operating mode", "Mode", limiter_metadata::LOM_DEFAULT, limiter_oper_modes), \
+            LOG_CONTROL("th", "Threshold", "Threshold", U_GAIN_AMP, limiter_metadata::THRESHOLD), \
+            LOG_CONTROL("knee", "Knee", "Knee", U_GAIN_AMP, limiter_metadata::KNEE), \
+            SWITCH("boost", "Gain boost", "Gain boost", 1.0f), \
+            LOG_CONTROL("lk", "Lookahead", "Lookahead", U_MSEC, limiter_metadata::LOOKAHEAD), \
+            LOG_CONTROL("at", "Attack time", "Att time", U_MSEC, limiter_metadata::ATTACK_TIME), \
+            LOG_CONTROL("rt", "Release time", "Rel time", U_MSEC, limiter_metadata::RELEASE_TIME), \
+            COMBO("ovs", "Oversampling", "Oversampling", limiter_metadata::OVS_DEFAULT, limiter_ovs_modes),           \
+            COMBO("dith", "Dithering", "Dithering", limiter_metadata::DITHER_DEFAULT, limiter_dither_modes),           \
+            SWITCH("pause", "Pause graph analysis", "Pause", 0.0f), \
+            TRIGGER("clear", "Clear graph analysis", "Clear")
 
         #define LIMIT_SHM_LINK_MONO \
             OPT_RETURN_MONO("link", "shml", "Side-chain shared memory link")
@@ -150,27 +162,27 @@ namespace lsp
 
         #define LIMIT_COMMON_MONO       \
             LIMIT_COMMON, \
-            COMBO("extsc", "Sidechain type", 0.0f, limiter_sc_type)
+            COMBO("extsc", "Sidechain type", "SC type", 0.0f, limiter_sc_type)
 
         #define LIMIT_COMMON_STEREO     \
             LIMIT_COMMON, \
-            COMBO("extsc", "Sidechain type", 0.0f, limiter_sc_type), \
-            LOG_CONTROL("slink", "Stereo linking", U_PERCENT, limiter_metadata::LINKING)
+            COMBO("extsc", "Sidechain type", "SC type", 0.0f, limiter_sc_type), \
+            LOG_CONTROL("slink", "Stereo linking", "Stereo link", U_PERCENT, limiter_metadata::LINKING)
 
         #define LIMIT_COMMON_SC_MONO    \
             LIMIT_COMMON, \
-            COMBO("extsc", "Sidechain type", 0.0f, limiter_sc_type_for_sc)
+            COMBO("extsc", "Sidechain type", "SC type", 0.0f, limiter_sc_type_for_sc)
 
         #define LIMIT_COMMON_SC_STEREO  \
             LIMIT_COMMON, \
-            COMBO("extsc", "Sidechain type", 0.0f, limiter_sc_type_for_sc), \
-            LOG_CONTROL("slink", "Stereo linking", U_PERCENT, limiter_metadata::LINKING)
+            COMBO("extsc", "Sidechain type", "SC type", 0.0f, limiter_sc_type_for_sc), \
+            LOG_CONTROL("slink", "Stereo linking", "Stereo link", U_PERCENT, limiter_metadata::LINKING)
 
-        #define LIMIT_METERS(id, label) \
-            SWITCH("igv" id, "Input graph visibility" label, 1.0f), \
-            SWITCH("ogv" id, "Output graph visibility" label, 1.0f), \
-            SWITCH("scgv" id, "Sidechain graph visibility" label, 1.0f), \
-            SWITCH("grgv" id, "Gain graph visibility" label, 1.0f), \
+        #define LIMIT_METERS(id, label, alias) \
+            SWITCH("igv" id, "Input graph visibility" label, "Show In" alias, 1.0f), \
+            SWITCH("ogv" id, "Output graph visibility" label, "Show Out" alias, 1.0f), \
+            SWITCH("scgv" id, "Sidechain graph visibility" label, "Show SC" alias, 1.0f), \
+            SWITCH("grgv" id, "Gain graph visibility" label, "Show Gain" alias, 1.0f), \
             METER_OUT_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_0_DB), \
             METER_OUT_GAIN("olm" id, "Output level meter" label, GAIN_AMP_0_DB), \
             METER_OUT_GAIN("sclm" id, "Sidechain level meter" label, GAIN_AMP_0_DB), \
@@ -180,13 +192,14 @@ namespace lsp
             MESH("scg" id, "Sidechain graph" label, 2, limiter_metadata::HISTORY_MESH_SIZE), \
             MESH("grg" id, "Gain graph" label, 2, limiter_metadata::HISTORY_MESH_SIZE + 4)
 
-        #define LIMIT_METERS_MONO       LIMIT_METERS("", "")
-        #define LIMIT_METERS_STEREO     LIMIT_METERS("_l", " Left"), LIMIT_METERS("_r", " Right")
+        #define LIMIT_METERS_MONO       LIMIT_METERS("", "", "")
+        #define LIMIT_METERS_STEREO     LIMIT_METERS("_l", " Left", " L"), LIMIT_METERS("_r", " Right", " R")
 
         static const port_t limiter_mono_ports[] =
         {
             PORTS_MONO_PLUGIN,
             LIMIT_SHM_LINK_MONO,
+            LIMIT_PREMIX,
             LIMIT_COMMON_MONO,
             LIMIT_METERS_MONO,
 
@@ -197,6 +210,7 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             LIMIT_SHM_LINK_STEREO,
+            LIMIT_PREMIX,
             LIMIT_COMMON_STEREO,
             LIMIT_METERS_STEREO,
 
@@ -208,6 +222,7 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             LIMIT_SHM_LINK_MONO,
+            LIMIT_SC_PREMIX,
             LIMIT_COMMON_SC_MONO,
             LIMIT_METERS_MONO,
 
@@ -219,6 +234,7 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             LIMIT_SHM_LINK_STEREO,
+            LIMIT_SC_PREMIX,
             LIMIT_COMMON_SC_STEREO,
             LIMIT_METERS_STEREO,
 
diff -pruN 1.2.21-5/modules/lsp-plugins-limiter/src/main/plug/limiter.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/src/main/plug/limiter.cpp
--- 1.2.21-5/modules/lsp-plugins-limiter/src/main/plug/limiter.cpp	2025-03-01 12:43:06.604589490 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-limiter/src/main/plug/limiter.cpp	2025-08-26 18:15:53.953904026 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-limiter
  * Created on: 3 авг. 2021 г.
@@ -94,6 +94,31 @@ namespace lsp
             pIDisplay       = NULL;
             bUISync         = true;
 
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
+
             pBypass         = NULL;
             pInGain         = NULL;
             pOutGain        = NULL;
@@ -137,7 +162,10 @@ namespace lsp
             // Allocate temporary buffers
             size_t c_data   = LIMIT_BUFSIZE * sizeof(float);
             size_t h_data   = meta::limiter_metadata::HISTORY_MESH_SIZE * sizeof(float);
-            size_t allocate = c_data * 4 * nChannels + h_data;
+            size_t allocate =
+                c_data * 4 * nChannels +
+                c_data * nChannels * 3 +
+                h_data;
 
             uint8_t *ptr    = alloc_aligned<uint8_t>(pData, allocate, DEFAULT_ALIGN);
             if (ptr == NULL)
@@ -145,6 +173,14 @@ namespace lsp
 
             vTime           = advance_ptr_bytes<float>(ptr, h_data);
 
+            // Initialize pre-mix
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, c_data);
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, c_data);
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, c_data);
+            }
+
             float lk_latency= int(dspu::samples_to_millis(MAX_SAMPLE_RATE, meta::limiter_metadata::OVERSAMPLING_MAX)) +
                               meta::limiter_metadata::LOOKAHEAD_MAX + 1.0f;
 
@@ -219,6 +255,19 @@ namespace lsp
             for (size_t i=0; i<nChannels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Bind common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
@@ -471,8 +520,20 @@ namespace lsp
             set_latency(latency);
         }
 
+        void limiter::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void limiter::update_settings()
         {
+            update_premix();
+
             bPause                      = pPause->value() >= 0.5f;
             bClear                      = pClear->value() >= 0.5f;
 
@@ -560,20 +621,136 @@ namespace lsp
             sync_latency();
         }
 
+        void limiter::premix_channel(uint32_t channel, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            channel_t * const c     = &vChannels[channel];
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            c->vIn                  = in_buf;
+            c->vOut                 = out_buf;
+            c->vSc                  = sc_buf;
+            c->vShmIn               = link_buf;
+
+            // Update pointers
+            sPremix.vIn[channel]   += count;
+            sPremix.vOut[channel]  += count;
+            if (sPremix.vSc[channel] != NULL)
+                sPremix.vSc[channel]   += count;
+            if (sPremix.vLink[channel] != NULL)
+                sPremix.vLink[channel] += count;
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vIn, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    c->vSc              = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vSc, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(c->vSc, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vSc, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    c->vSc              = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vSc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(c->vSc, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vIn          = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vSc          = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(c->vSc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(c->vSc, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn       = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void limiter::process(size_t samples)
         {
             // Bind audio ports
             for (size_t i=0; i<nChannels; ++i)
             {
-                channel_t *c    = &vChannels[i];
-                c->vIn          = c->pIn->buffer<float>();
-                c->vOut         = c->pOut->buffer<float>();
-                c->vSc          = (c->pSc != NULL) ? c->pSc->buffer<float>() : NULL;
-                c->vShmIn       = NULL;
+                channel_t *c        = &vChannels[i];
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pSc != NULL) ? c->pSc->buffer<float>() : NULL;
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *buf = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((buf != NULL) && (buf->active()))
-                    c->vShmIn       = buf->buffer();
+                    sPremix.vLink[i]    = buf->buffer();
             }
 
             // Get oversampling times
@@ -584,9 +761,14 @@ namespace lsp
             for (size_t nsamples = samples; nsamples > 0; )
             {
                 // Perform oversampling of signal and sidechain
-                size_t to_do    = lsp_min(buf_size, nsamples);
-                size_t to_doxn  = to_do * times;
+                const size_t to_do      = lsp_min(buf_size, nsamples);
+                const size_t to_doxn    = to_do * times;
 
+                // Pre-mix audio channels
+                for (size_t i=0; i<nChannels; ++i)
+                    premix_channel(i, to_do);
+
+                // Do main stuff
                 for (size_t i=0; i<nChannels; ++i)
                 {
                     channel_t *c    = &vChannels[i];
@@ -964,6 +1146,31 @@ namespace lsp
             v->write("bUISync", bUISync);
 
             v->write_object("sDither", &sDither);
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
 
             v->write("pBypass", pBypass);
             v->write("pInGain", pInGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-loud-comp/.github/workflows/build.yml	2025-03-01 12:43:07.504584088 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/.github/workflows/build.yml	2025-08-26 18:15:57.313871416 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-loud-comp/CHANGELOG	2025-03-01 12:43:07.504584088 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/CHANGELOG	2025-08-26 18:15:57.313871416 +0000
@@ -2,6 +2,15 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Bugfix: input buffer overread.
+* Added support of minimum-phase filter mode.
+* Twice reduced the size of stored loudness curves' tables.
+* Updated build scripts and dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts and dependencies.
+
 === 1.0.24 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-loud-comp/dependencies.mk	2025-03-01 12:43:07.504584088 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/dependencies.mk	2025-08-26 18:15:57.313871416 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/defs.h 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/defs.h
--- 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/defs.h	2025-03-01 12:43:07.504584088 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/defs.h	2025-08-26 18:15:57.317871377 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins
  * Created on: 29 июн. 2020 г.
@@ -28,14 +28,14 @@ namespace lsp
 {
     typedef struct freq_curve_t
     {
-        float   fmin;       // The minimum frequency per curve
-        float   fmax;       // The maximum frequency per curve
-        float   amin;       // The minimum amplitude per curve
-        float   amax;       // The maximum amplitude per curve
-        size_t  hdots;      // Number of dots per each curve
-        size_t  curves;     // The overall number of curves
+        float       fmin;       // The minimum frequency per curve
+        float       fmax;       // The maximum frequency per curve
+        float       amin;       // The minimum amplitude per curve
+        float       amax;       // The maximum amplitude per curve
+        uint32_t    hdots;      // Number of dots per each curve
+        uint32_t    curves;     // The overall number of curves
 
-        const float * const *data; // The array of curve data
+        const int16_t * const *data; // The array of curve data in fixed-point format (2 digits after point).
     } freq_curve_t;
 }
 
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/fletcher_munson.h 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/fletcher_munson.h
--- 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/fletcher_munson.h	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/fletcher_munson.h	2025-08-26 18:15:57.317871377 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins
  * Created on: 08 апр. 2016 г.
@@ -26,1437 +26,1437 @@
 
 namespace lsp
 {
-    static const float fletcher_munson_curve_0_phons[1383] =
+    static const int16_t fletcher_munson_curve_0_phons[1383] =
     {
-        -23.83, -23.87, -23.89, -23.96, -24.03,
-        -24.13, -24.17, -24.26, -24.29, -24.40, -24.46, -24.54, -24.60, -24.67, -24.72,
-        -24.83, -24.88, -24.92, -24.97, -25.01, -25.11, -25.15, -25.21, -25.31, -25.37,
-        -25.42, -25.47, -25.52, -25.56, -25.67, -25.79, -25.90, -25.99, -26.09, -26.19,
-        -26.21, -26.30, -26.36, -26.44, -26.51, -26.59, -26.65, -26.73, -26.84, -26.83,
-        -26.88, -27.06, -27.09, -27.15, -27.17, -27.26, -27.35, -27.39, -27.46, -27.51,
-        -27.56, -27.63, -27.68, -27.76, -27.86, -27.88, -27.98, -27.98, -28.04, -28.08,
-        -28.13, -28.19, -28.25, -28.36, -28.38, -28.48, -28.54, -28.59, -28.69, -28.75,
-        -28.82, -28.94, -28.96, -29.06, -29.18, -29.17, -29.26, -29.35, -29.45, -29.55,
-        -29.54, -29.64, -29.73, -29.80, -29.85, -29.89, -29.94, -29.98, -30.04, -30.07,
-        -30.17, -30.18, -30.28, -30.33, -30.38, -30.44, -30.49, -30.56, -30.65, -30.73,
-        -30.76, -30.88, -30.96, -31.00, -31.10, -31.14, -31.21, -31.31, -31.33, -31.42,
-        -31.52, -31.54, -31.60, -31.68, -31.78, -31.77, -31.85, -31.97, -31.99, -32.14,
-        -32.27, -32.32, -32.40, -32.54, -32.67, -32.71, -32.81, -32.86, -32.91, -32.97,
-        -33.03, -33.09, -33.14, -33.19, -33.25, -33.33, -33.36, -33.46, -33.51, -33.55,
-        -33.62, -33.69, -33.76, -33.86, -33.97, -34.10, -34.17, -34.24, -34.35, -34.43,
-        -34.52, -34.61, -34.66, -34.77, -34.79, -34.90, -35.01, -35.11, -35.19, -35.29,
-        -35.33, -35.37, -35.42, -35.52, -35.59, -35.66, -35.74, -35.80, -35.90, -36.01,
-        -36.09, -36.17, -36.21, -36.30, -36.39, -36.46, -36.56, -36.65, -36.63, -36.69,
-        -36.77, -36.86, -36.88, -36.98, -37.10, -37.20, -37.27, -37.34, -37.47, -37.61,
-        -37.65, -37.78, -37.90, -38.03, -38.15, -38.26, -38.38, -38.51, -38.61, -38.71,
-        -38.80, -38.86, -38.90, -38.99, -39.07, -39.09, -39.16, -39.25, -39.31, -39.30,
-        -39.37, -39.46, -39.56, -39.56, -39.69, -39.82, -39.92, -39.95, -40.01, -40.07,
-        -40.13, -40.22, -40.31, -40.43, -40.50, -40.61, -40.67, -40.78, -40.88, -40.96,
-        -41.08, -41.19, -41.25, -41.35, -41.48, -41.58, -41.74, -41.84, -41.95, -42.06,
-        -42.17, -42.28, -42.39, -42.50, -42.61, -42.71, -42.82, -42.92, -43.04, -43.17,
-        -43.26, -43.37, -43.47, -43.48, -43.56, -43.66, -43.67, -43.76, -43.87, -43.98,
-        -44.09, -44.19, -44.31, -44.43, -44.54, -44.65, -44.77, -44.89, -45.00, -45.10,
-        -45.14, -45.20, -45.32, -45.42, -45.42, -45.52, -45.63, -45.75, -45.87, -45.97,
-        -46.06, -46.20, -46.30, -46.39, -46.46, -46.53, -46.60, -46.69, -46.81, -46.91,
-        -47.02, -47.12, -47.17, -47.28, -47.37, -47.47, -47.56, -47.61, -47.67, -47.76,
-        -47.76, -47.80, -47.87, -47.93, -48.04, -48.15, -48.26, -48.36, -48.42, -48.54,
-        -48.63, -48.63, -48.70, -48.75, -48.73, -48.83, -48.91, -48.87, -48.94, -49.04,
-        -49.13, -49.16, -49.28, -49.42, -49.53, -49.67, -49.80, -49.86, -49.93, -50.00,
-        -50.12, -50.18, -50.23, -50.38, -50.44, -50.50, -50.61, -50.68, -50.76, -50.89,
-        -50.95, -50.99, -51.03, -51.12, -51.17, -51.22, -51.30, -51.42, -51.50, -51.58,
-        -51.63, -51.74, -51.83, -51.94, -52.03, -52.13, -52.18, -52.28, -52.38, -52.50,
-        -52.63, -52.73, -52.83, -52.93, -53.04, -53.15, -53.27, -53.37, -53.47, -53.57,
-        -53.67, -53.80, -53.90, -54.00, -54.10, -54.22, -54.32, -54.42, -54.55, -54.67,
-        -54.78, -54.88, -54.98, -55.08, -55.08, -55.18, -55.28, -55.37, -55.37, -55.47,
-        -55.57, -55.68, -55.79, -55.90, -56.02, -56.12, -56.24, -56.33, -56.38, -56.47,
-        -56.46, -56.55, -56.60, -56.60, -56.74, -56.81, -56.87, -56.93, -56.99, -57.03,
-        -57.13, -57.28, -57.40, -57.50, -57.56, -57.66, -57.76, -57.82, -57.82, -57.91,
-        -57.98, -58.06, -58.15, -58.22, -58.32, -58.43, -58.54, -58.65, -58.76, -58.87,
-        -58.97, -59.07, -59.18, -59.29, -59.40, -59.52, -59.62, -59.61, -59.71, -59.79,
-        -59.82, -59.91, -60.01, -60.11, -60.14, -60.22, -60.28, -60.38, -60.49, -60.62,
-        -60.74, -60.88, -61.02, -61.15, -61.25, -61.35, -61.42, -61.52, -61.62, -61.71,
-        -61.80, -61.90, -62.00, -62.10, -62.20, -62.31, -62.43, -62.55, -62.70, -62.79,
-        -62.91, -63.02, -63.12, -63.22, -63.28, -63.35, -63.48, -63.55, -63.61, -63.72,
-        -63.84, -63.91, -64.01, -64.12, -64.21, -64.29, -64.40, -64.48, -64.59, -64.70,
-        -64.81, -64.90, -64.99, -65.09, -65.18, -65.27, -65.36, -65.45, -65.54, -65.63,
-        -65.71, -65.80, -65.88, -65.98, -66.08, -66.16, -66.25, -66.32, -66.39, -66.44,
-        -66.41, -66.48, -66.54, -66.60, -66.68, -66.69, -66.70, -66.77, -66.86, -66.95,
-        -67.02, -67.11, -67.20, -67.28, -67.38, -67.48, -67.57, -67.65, -67.72, -67.80,
-        -67.89, -67.98, -68.08, -68.16, -68.23, -68.30, -68.37, -68.44, -68.50, -68.59,
-        -68.63, -68.67, -68.77, -68.84, -68.93, -69.00, -69.09, -69.20, -69.32, -69.44,
-        -69.55, -69.65, -69.74, -69.84, -69.92, -69.99, -70.07, -70.15, -70.22, -70.29,
-        -70.36, -70.46, -70.54, -70.60, -70.67, -70.75, -70.84, -70.94, -71.05, -71.16,
-        -71.26, -71.37, -71.47, -71.58, -71.69, -71.81, -71.92, -72.01, -72.11, -72.18,
-        -72.27, -72.38, -72.47, -72.54, -72.61, -72.71, -72.79, -72.88, -72.96, -73.04,
-        -73.13, -73.23, -73.32, -73.39, -73.48, -73.58, -73.68, -73.78, -73.89, -74.01,
-        -74.10, -74.19, -74.29, -74.39, -74.44, -74.49, -74.56, -74.65, -74.72, -74.78,
-        -74.85, -74.96, -75.07, -75.18, -75.29, -75.40, -75.49, -75.56, -75.64, -75.71,
-        -75.81, -75.90, -76.00, -76.09, -76.18, -76.24, -76.31, -76.39, -76.47, -76.55,
-        -76.63, -76.69, -76.77, -76.85, -76.94, -77.00, -77.07, -77.13, -77.23, -77.31,
-        -77.37, -77.42, -77.50, -77.57, -77.63, -77.70, -77.79, -77.85, -77.92, -77.98,
-        -78.07, -78.15, -78.20, -78.26, -78.35, -78.43, -78.50, -78.55, -78.63, -78.76,
-        -78.85, -78.92, -78.97, -79.04, -79.15, -79.25, -79.30, -79.34, -79.42, -79.50,
-        -79.60, -79.69, -79.74, -79.82, -79.89, -79.96, -80.01, -80.06, -80.10, -80.15,
-        -80.20, -80.26, -80.33, -80.39, -80.45, -80.52, -80.58, -80.63, -80.71, -80.77,
-        -80.86, -80.93, -81.00, -81.04, -81.12, -81.17, -81.25, -81.33, -81.38, -81.46,
-        -81.47, -81.48, -81.56, -81.57, -81.64, -81.74, -81.83, -81.90, -81.97, -82.04,
-        -82.04, -82.11, -82.13, -82.15, -82.23, -82.25, -82.33, -82.36, -82.43, -82.51,
-        -82.57, -82.66, -82.67, -82.75, -82.76, -82.77, -82.76, -82.76, -82.76, -82.79,
-        -82.78, -82.78, -82.80, -82.83, -82.87, -82.91, -82.94, -83.00, -83.01, -83.01,
-        -83.09, -83.13, -83.18, -83.21, -83.21, -83.25, -83.33, -83.38, -83.38, -83.38,
-        -83.38, -83.38, -83.37, -83.37, -83.37, -83.36, -83.36, -83.36, -83.36, -83.36,
-        -83.36, -83.36, -83.36, -83.36, -83.36, -83.36, -83.36, -83.34, -83.27, -83.25,
-        -83.18, -83.18, -83.12, -83.12, -83.12, -83.11, -83.11, -83.10, -83.10, -83.10,
-        -83.10, -83.11, -83.15, -83.15, -83.15, -83.14, -83.09, -83.04, -83.03, -82.95,
-        -82.91, -82.87, -82.81, -82.79, -82.80, -82.78, -82.76, -82.76, -82.70, -82.68,
-        -82.68, -82.68, -82.68, -82.68, -82.69, -82.69, -82.69, -82.60, -82.58, -82.58,
-        -82.58, -82.48, -82.48, -82.48, -82.48, -82.48, -82.48, -82.47, -82.47, -82.47,
-        -82.47, -82.42, -82.37, -82.36, -82.27, -82.26, -82.27, -82.27, -82.34, -82.36,
-        -82.43, -82.44, -82.44, -82.44, -82.44, -82.44, -82.44, -82.45, -82.45, -82.46,
-        -82.55, -82.50, -82.50, -82.59, -82.55, -82.55, -82.60, -82.60, -82.60, -82.61,
-        -82.66, -82.69, -82.71, -82.71, -82.70, -82.69, -82.68, -82.71, -82.73, -82.70,
-        -82.71, -82.73, -82.76, -82.80, -82.78, -82.75, -82.77, -82.74, -82.72, -82.78,
-        -82.80, -82.88, -82.91, -82.96, -82.98, -83.05, -83.06, -83.14, -83.14, -83.20,
-        -83.22, -83.22, -83.30, -83.26, -83.22, -83.24, -83.28, -83.37, -83.37, -83.41,
-        -83.46, -83.46, -83.53, -83.46, -83.53, -83.55, -83.58, -83.55, -83.62, -83.62,
-        -83.71, -83.71, -83.74, -83.80, -83.80, -83.82, -83.78, -83.82, -83.85, -83.86,
-        -83.91, -83.95, -84.03, -84.05, -84.04, -84.06, -84.12, -84.17, -84.16, -84.19,
-        -84.23, -84.28, -84.34, -84.38, -84.43, -84.41, -84.44, -84.48, -84.59, -84.64,
-        -84.71, -84.75, -84.81, -84.87, -84.90, -84.92, -84.89, -84.97, -84.91, -84.97,
-        -84.95, -84.96, -85.00, -84.97, -85.01, -84.97, -85.02, -85.06, -85.13, -85.16,
-        -85.25, -85.27, -85.35, -85.39, -85.44, -85.44, -85.44, -85.51, -85.47, -85.52,
-        -85.58, -85.66, -85.70, -85.74, -85.81, -85.83, -85.81, -85.77, -85.81, -85.80,
-        -85.88, -85.91, -85.92, -85.97, -85.99, -85.99, -86.01, -86.04, -86.04, -86.11,
-        -86.13, -86.13, -86.16, -86.16, -86.19, -86.25, -86.34, -86.39, -86.40, -86.39,
-        -86.37, -86.35, -86.30, -86.32, -86.28, -86.31, -86.31, -86.33, -86.41, -86.40,
-        -86.44, -86.45, -86.46, -86.41, -86.38, -86.39, -86.31, -86.24, -86.30, -86.27,
-        -86.24, -86.23, -86.19, -86.13, -86.13, -86.15, -86.14, -86.21, -86.17, -86.22,
-        -86.25, -86.22, -86.22, -86.17, -86.11, -86.12, -86.06, -86.04, -86.02, -85.98,
-        -85.96, -85.96, -85.97, -85.95, -85.94, -85.92, -85.89, -85.89, -85.86, -85.82,
-        -85.82, -85.78, -85.72, -85.71, -85.62, -85.57, -85.51, -85.46, -85.46, -85.46,
-        -85.46, -85.46, -85.46, -85.45, -85.35, -85.35, -85.35, -85.20, -85.16, -85.10,
-        -85.04, -85.01, -85.01, -85.01, -85.01, -85.01, -85.01, -85.01, -85.01, -85.00,
-        -84.88, -84.81, -84.78, -84.68, -84.61, -84.55, -84.51, -84.50, -84.43, -84.46,
-        -84.45, -84.45, -84.45, -84.41, -84.40, -84.40, -84.40, -84.40, -84.35, -84.34,
-        -84.32, -84.31, -84.30, -84.27, -84.26, -84.21, -84.18, -84.15, -84.13, -84.12,
-        -84.07, -84.03, -84.00, -84.02, -84.07, -84.06, -84.05, -84.02, -84.08, -84.13,
-        -84.10, -84.10, -84.05, -84.08, -84.08, -84.13, -84.14, -84.15, -84.12, -84.06,
-        -84.06, -84.11, -84.16, -84.19, -84.23, -84.26, -84.26, -84.38, -84.35, -84.35,
-        -84.35, -84.34, -84.42, -84.39, -84.43, -84.51, -84.49, -84.51, -84.57, -84.74,
-        -84.83, -84.82, -84.90, -84.96, -85.02, -85.18, -85.27, -85.24, -85.27, -85.39,
-        -85.39, -85.33, -85.31, -85.37, -85.47, -85.54, -85.55, -85.56, -85.67, -85.78,
-        -85.88, -85.90, -85.91, -85.98, -86.04, -86.02, -85.96, -85.99, -86.00, -86.03,
-        -86.09, -86.03, -86.04, -86.05, -86.32, -86.27, -86.23, -86.22, -86.55, -86.57,
-        -86.59, -86.60, -86.61, -86.65, -86.69, -86.67, -86.59, -86.60, -86.64, -86.64,
-        -86.64, -86.66, -86.61, -86.57, -86.52, -86.52, -86.51, -86.43, -86.42, -86.44,
-        -86.42, -86.35, -86.31, -86.24, -86.21, -86.17, -86.14, -86.10, -86.02, -85.99,
-        -85.91, -85.89, -85.89, -85.91, -85.91, -85.84, -85.82, -85.79, -85.78, -85.74,
-        -85.79, -85.80, -85.75, -85.69, -85.68, -85.64, -85.65, -85.68, -85.62, -85.58,
-        -85.57, -85.55, -85.51, -85.43, -85.47, -85.39, -85.41, -85.42, -85.42, -85.42,
-        -85.41, -85.40, -85.36, -85.31, -85.27, -85.24, -85.24, -85.23, -85.18, -85.14,
-        -85.09, -85.14, -85.15, -85.18, -85.26, -85.26, -85.26, -85.26, -85.25, -85.25,
-        -85.19, -85.19, -85.14, -85.14, -85.15, -85.15, -85.17, -85.17, -85.18, -85.17,
-        -85.19, -85.20, -85.22, -85.25, -85.26, -85.27, -85.27, -85.25, -85.25, -85.24,
-        -85.23, -85.22, -85.22, -85.20, -85.20, -85.18, -85.15, -85.15, -85.13, -85.07,
-        -85.01, -84.98, -84.95, -85.00, -84.98, -84.98, -84.96, -84.91, -84.96, -84.96,
-        -84.92, -84.84, -84.88, -84.80, -84.82, -84.79, -84.79, -84.74, -84.73, -84.72,
-        -84.69, -84.65, -84.59, -84.52, -84.48, -84.46, -84.49, -84.46, -84.44, -84.48,
-        -84.52, -84.46, -84.43, -84.32, -84.22, -84.17, -84.13, -84.09, -83.96, -83.90,
-        -83.86, -83.84, -83.80, -83.72, -83.63, -83.63, -83.60, -83.59, -83.63, -83.55,
-        -83.44, -83.41, -83.28, -83.23, -83.20, -83.16, -83.10, -83.06, -82.94, -82.97,
-        -83.02, -82.94, -82.83, -82.77, -82.68, -82.63, -82.55, -82.49, -82.45, -82.47,
-        -82.38, -82.35, -82.37, -82.36, -82.33, -82.19, -82.11, -82.01, -81.92, -81.84,
-        -81.76, -81.63, -81.60, -81.49, -81.43, -81.34, -81.29, -81.25
+        -2383, -2387, -2389, -2396, -2403,
+        -2413, -2417, -2426, -2429, -2440, -2446, -2454, -2460, -2467, -2472,
+        -2483, -2488, -2492, -2497, -2501, -2511, -2515, -2521, -2531, -2537,
+        -2542, -2547, -2552, -2556, -2567, -2579, -2590, -2599, -2609, -2619,
+        -2621, -2630, -2636, -2644, -2651, -2659, -2665, -2673, -2684, -2683,
+        -2688, -2706, -2709, -2715, -2717, -2726, -2735, -2739, -2746, -2751,
+        -2756, -2763, -2768, -2776, -2786, -2788, -2798, -2798, -2804, -2808,
+        -2813, -2819, -2825, -2836, -2838, -2848, -2854, -2859, -2869, -2875,
+        -2882, -2894, -2896, -2906, -2918, -2917, -2926, -2935, -2945, -2955,
+        -2954, -2964, -2973, -2980, -2985, -2989, -2994, -2998, -3004, -3007,
+        -3017, -3018, -3028, -3033, -3038, -3044, -3049, -3056, -3065, -3073,
+        -3076, -3088, -3096, -3100, -3110, -3114, -3121, -3131, -3133, -3142,
+        -3152, -3154, -3160, -3168, -3178, -3177, -3185, -3197, -3199, -3214,
+        -3227, -3232, -3240, -3254, -3267, -3271, -3281, -3286, -3291, -3297,
+        -3303, -3309, -3314, -3319, -3325, -3333, -3336, -3346, -3351, -3355,
+        -3362, -3369, -3376, -3386, -3397, -3410, -3417, -3424, -3435, -3443,
+        -3452, -3461, -3466, -3477, -3479, -3490, -3501, -3511, -3519, -3529,
+        -3533, -3537, -3542, -3552, -3559, -3566, -3574, -3580, -3590, -3601,
+        -3609, -3617, -3621, -3630, -3639, -3646, -3656, -3665, -3663, -3669,
+        -3677, -3686, -3688, -3698, -3710, -3720, -3727, -3734, -3747, -3761,
+        -3765, -3778, -3790, -3803, -3815, -3826, -3838, -3851, -3861, -3871,
+        -3880, -3886, -3890, -3899, -3907, -3909, -3916, -3925, -3931, -3930,
+        -3937, -3946, -3956, -3956, -3969, -3982, -3992, -3995, -4001, -4007,
+        -4013, -4022, -4031, -4043, -4050, -4061, -4067, -4078, -4088, -4096,
+        -4108, -4119, -4125, -4135, -4148, -4158, -4174, -4184, -4195, -4206,
+        -4217, -4228, -4239, -4250, -4261, -4271, -4282, -4292, -4304, -4317,
+        -4326, -4337, -4347, -4348, -4356, -4366, -4367, -4376, -4387, -4398,
+        -4409, -4419, -4431, -4443, -4454, -4465, -4477, -4489, -4500, -4510,
+        -4514, -4520, -4532, -4542, -4542, -4552, -4563, -4575, -4587, -4597,
+        -4606, -4620, -4630, -4639, -4646, -4653, -4660, -4669, -4681, -4691,
+        -4702, -4712, -4717, -4728, -4737, -4747, -4756, -4761, -4767, -4776,
+        -4776, -4780, -4787, -4793, -4804, -4815, -4826, -4836, -4842, -4854,
+        -4863, -4863, -4870, -4875, -4873, -4883, -4891, -4887, -4894, -4904,
+        -4913, -4916, -4928, -4942, -4953, -4967, -4980, -4986, -4993, -5000,
+        -5012, -5018, -5023, -5038, -5044, -5050, -5061, -5068, -5076, -5089,
+        -5095, -5099, -5103, -5112, -5117, -5122, -5130, -5142, -5150, -5158,
+        -5163, -5174, -5183, -5194, -5203, -5213, -5218, -5228, -5238, -5250,
+        -5263, -5273, -5283, -5293, -5304, -5315, -5327, -5337, -5347, -5357,
+        -5367, -5380, -5390, -5400, -5410, -5422, -5432, -5442, -5455, -5467,
+        -5478, -5488, -5498, -5508, -5508, -5518, -5528, -5537, -5537, -5547,
+        -5557, -5568, -5579, -5590, -5602, -5612, -5624, -5633, -5638, -5647,
+        -5646, -5655, -5660, -5660, -5674, -5681, -5687, -5693, -5699, -5703,
+        -5713, -5728, -5740, -5750, -5756, -5766, -5776, -5782, -5782, -5791,
+        -5798, -5806, -5815, -5822, -5832, -5843, -5854, -5865, -5876, -5887,
+        -5897, -5907, -5918, -5929, -5940, -5952, -5962, -5961, -5971, -5979,
+        -5982, -5991, -6001, -6011, -6014, -6022, -6028, -6038, -6049, -6062,
+        -6074, -6088, -6102, -6115, -6125, -6135, -6142, -6152, -6162, -6171,
+        -6180, -6190, -6200, -6210, -6220, -6231, -6243, -6255, -6270, -6279,
+        -6291, -6302, -6312, -6322, -6328, -6335, -6348, -6355, -6361, -6372,
+        -6384, -6391, -6401, -6412, -6421, -6429, -6440, -6448, -6459, -6470,
+        -6481, -6490, -6499, -6509, -6518, -6527, -6536, -6545, -6554, -6563,
+        -6571, -6580, -6588, -6598, -6608, -6616, -6625, -6632, -6639, -6644,
+        -6641, -6648, -6654, -6660, -6668, -6669, -6670, -6677, -6686, -6695,
+        -6702, -6711, -6720, -6728, -6738, -6748, -6757, -6765, -6772, -6780,
+        -6789, -6798, -6808, -6816, -6823, -6830, -6837, -6844, -6850, -6859,
+        -6863, -6867, -6877, -6884, -6893, -6900, -6909, -6920, -6932, -6944,
+        -6955, -6965, -6974, -6984, -6992, -6999, -7007, -7015, -7022, -7029,
+        -7036, -7046, -7054, -7060, -7067, -7075, -7084, -7094, -7105, -7116,
+        -7126, -7137, -7147, -7158, -7169, -7181, -7192, -7201, -7211, -7218,
+        -7227, -7238, -7247, -7254, -7261, -7271, -7279, -7288, -7296, -7304,
+        -7313, -7323, -7332, -7339, -7348, -7358, -7368, -7378, -7389, -7401,
+        -7410, -7419, -7429, -7439, -7444, -7449, -7456, -7465, -7472, -7478,
+        -7485, -7496, -7507, -7518, -7529, -7540, -7549, -7556, -7564, -7571,
+        -7581, -7590, -7600, -7609, -7618, -7624, -7631, -7639, -7647, -7655,
+        -7663, -7669, -7677, -7685, -7694, -7700, -7707, -7713, -7723, -7731,
+        -7737, -7742, -7750, -7757, -7763, -7770, -7779, -7785, -7792, -7798,
+        -7807, -7815, -7820, -7826, -7835, -7843, -7850, -7855, -7863, -7876,
+        -7885, -7892, -7897, -7904, -7915, -7925, -7930, -7934, -7942, -7950,
+        -7960, -7969, -7974, -7982, -7989, -7996, -8001, -8006, -8010, -8015,
+        -8020, -8026, -8033, -8039, -8045, -8052, -8058, -8063, -8071, -8077,
+        -8086, -8093, -8100, -8104, -8112, -8117, -8125, -8133, -8138, -8146,
+        -8147, -8148, -8156, -8157, -8164, -8174, -8183, -8190, -8197, -8204,
+        -8204, -8211, -8213, -8215, -8223, -8225, -8233, -8236, -8243, -8251,
+        -8257, -8266, -8267, -8275, -8276, -8277, -8276, -8276, -8276, -8279,
+        -8278, -8278, -8280, -8283, -8287, -8291, -8294, -8300, -8301, -8301,
+        -8309, -8313, -8318, -8321, -8321, -8325, -8333, -8338, -8338, -8338,
+        -8338, -8338, -8337, -8337, -8337, -8336, -8336, -8336, -8336, -8336,
+        -8336, -8336, -8336, -8336, -8336, -8336, -8336, -8334, -8327, -8325,
+        -8318, -8318, -8312, -8312, -8312, -8311, -8311, -8310, -8310, -8310,
+        -8310, -8311, -8315, -8315, -8315, -8314, -8309, -8304, -8303, -8295,
+        -8291, -8287, -8281, -8279, -8280, -8278, -8276, -8276, -8270, -8268,
+        -8268, -8268, -8268, -8268, -8269, -8269, -8269, -8260, -8258, -8258,
+        -8258, -8248, -8248, -8248, -8248, -8248, -8248, -8247, -8247, -8247,
+        -8247, -8242, -8237, -8236, -8227, -8226, -8227, -8227, -8234, -8236,
+        -8243, -8244, -8244, -8244, -8244, -8244, -8244, -8245, -8245, -8246,
+        -8255, -8250, -8250, -8259, -8255, -8255, -8260, -8260, -8260, -8261,
+        -8266, -8269, -8271, -8271, -8270, -8269, -8268, -8271, -8273, -8270,
+        -8271, -8273, -8276, -8280, -8278, -8275, -8277, -8274, -8272, -8278,
+        -8280, -8288, -8291, -8296, -8298, -8305, -8306, -8314, -8314, -8320,
+        -8322, -8322, -8330, -8326, -8322, -8324, -8328, -8337, -8337, -8341,
+        -8346, -8346, -8353, -8346, -8353, -8355, -8358, -8355, -8362, -8362,
+        -8371, -8371, -8374, -8380, -8380, -8382, -8378, -8382, -8385, -8386,
+        -8391, -8395, -8403, -8405, -8404, -8406, -8412, -8417, -8416, -8419,
+        -8423, -8428, -8434, -8438, -8443, -8441, -8444, -8448, -8459, -8464,
+        -8471, -8475, -8481, -8487, -8490, -8492, -8489, -8497, -8491, -8497,
+        -8495, -8496, -8500, -8497, -8501, -8497, -8502, -8506, -8513, -8516,
+        -8525, -8527, -8535, -8539, -8544, -8544, -8544, -8551, -8547, -8552,
+        -8558, -8566, -8570, -8574, -8581, -8583, -8581, -8577, -8581, -8580,
+        -8588, -8591, -8592, -8597, -8599, -8599, -8601, -8604, -8604, -8611,
+        -8613, -8613, -8616, -8616, -8619, -8625, -8634, -8639, -8640, -8639,
+        -8637, -8635, -8630, -8632, -8628, -8631, -8631, -8633, -8641, -8640,
+        -8644, -8645, -8646, -8641, -8638, -8639, -8631, -8624, -8630, -8627,
+        -8624, -8623, -8619, -8613, -8613, -8615, -8614, -8621, -8617, -8622,
+        -8625, -8622, -8622, -8617, -8611, -8612, -8606, -8604, -8602, -8598,
+        -8596, -8596, -8597, -8595, -8594, -8592, -8589, -8589, -8586, -8582,
+        -8582, -8578, -8572, -8571, -8562, -8557, -8551, -8546, -8546, -8546,
+        -8546, -8546, -8546, -8545, -8535, -8535, -8535, -8520, -8516, -8510,
+        -8504, -8501, -8501, -8501, -8501, -8501, -8501, -8501, -8501, -8500,
+        -8488, -8481, -8478, -8468, -8461, -8455, -8451, -8450, -8443, -8446,
+        -8445, -8445, -8445, -8441, -8440, -8440, -8440, -8440, -8435, -8434,
+        -8432, -8431, -8430, -8427, -8426, -8421, -8418, -8415, -8413, -8412,
+        -8407, -8403, -8400, -8402, -8407, -8406, -8405, -8402, -8408, -8413,
+        -8410, -8410, -8405, -8408, -8408, -8413, -8414, -8415, -8412, -8406,
+        -8406, -8411, -8416, -8419, -8423, -8426, -8426, -8438, -8435, -8435,
+        -8435, -8434, -8442, -8439, -8443, -8451, -8449, -8451, -8457, -8474,
+        -8483, -8482, -8490, -8496, -8502, -8518, -8527, -8524, -8527, -8539,
+        -8539, -8533, -8531, -8537, -8547, -8554, -8555, -8556, -8567, -8578,
+        -8588, -8590, -8591, -8598, -8604, -8602, -8596, -8599, -8600, -8603,
+        -8609, -8603, -8604, -8605, -8632, -8627, -8623, -8622, -8655, -8657,
+        -8659, -8660, -8661, -8665, -8669, -8667, -8659, -8660, -8664, -8664,
+        -8664, -8666, -8661, -8657, -8652, -8652, -8651, -8643, -8642, -8644,
+        -8642, -8635, -8631, -8624, -8621, -8617, -8614, -8610, -8602, -8599,
+        -8591, -8589, -8589, -8591, -8591, -8584, -8582, -8579, -8578, -8574,
+        -8579, -8580, -8575, -8569, -8568, -8564, -8565, -8568, -8562, -8558,
+        -8557, -8555, -8551, -8543, -8547, -8539, -8541, -8542, -8542, -8542,
+        -8541, -8540, -8536, -8531, -8527, -8524, -8524, -8523, -8518, -8514,
+        -8509, -8514, -8515, -8518, -8526, -8526, -8526, -8526, -8525, -8525,
+        -8519, -8519, -8514, -8514, -8515, -8515, -8517, -8517, -8518, -8517,
+        -8519, -8520, -8522, -8525, -8526, -8527, -8527, -8525, -8525, -8524,
+        -8523, -8522, -8522, -8520, -8520, -8518, -8515, -8515, -8513, -8507,
+        -8501, -8498, -8495, -8500, -8498, -8498, -8496, -8491, -8496, -8496,
+        -8492, -8484, -8488, -8480, -8482, -8479, -8479, -8474, -8473, -8472,
+        -8469, -8465, -8459, -8452, -8448, -8446, -8449, -8446, -8444, -8448,
+        -8452, -8446, -8443, -8432, -8422, -8417, -8413, -8409, -8396, -8390,
+        -8386, -8384, -8380, -8372, -8363, -8363, -8360, -8359, -8363, -8355,
+        -8344, -8341, -8328, -8323, -8320, -8316, -8310, -8306, -8294, -8297,
+        -8302, -8294, -8283, -8277, -8268, -8263, -8255, -8249, -8245, -8247,
+        -8238, -8235, -8237, -8236, -8233, -8219, -8211, -8201, -8192, -8184,
+        -8176, -8163, -8160, -8149, -8143, -8134, -8129, -8125
     };
 
-    static const float fletcher_munson_curve_10_phons[1383] =
+    static const int16_t fletcher_munson_curve_10_phons[1383] =
     {
-        -19.50, -19.53, -19.55, -19.62, -19.69,
-        -19.80, -19.83, -19.92, -19.94, -20.04, -20.08, -20.18, -20.22, -20.27, -20.31,
-        -20.38, -20.42, -20.47, -20.52, -20.55, -20.61, -20.66, -20.71, -20.81, -20.87,
-        -20.93, -20.97, -21.04, -21.09, -21.18, -21.29, -21.37, -21.46, -21.53, -21.63,
-        -21.62, -21.73, -21.81, -21.87, -21.93, -22.00, -22.06, -22.11, -22.18, -22.19,
-        -22.26, -22.40, -22.42, -22.50, -22.53, -22.62, -22.69, -22.75, -22.82, -22.88,
-        -22.93, -22.99, -23.05, -23.12, -23.23, -23.25, -23.35, -23.35, -23.36, -23.40,
-        -23.45, -23.50, -23.52, -23.61, -23.62, -23.72, -23.77, -23.81, -23.90, -23.92,
-        -23.98, -24.09, -24.10, -24.15, -24.27, -24.24, -24.30, -24.40, -24.47, -24.55,
-        -24.54, -24.61, -24.71, -24.79, -24.81, -24.85, -24.89, -24.94, -24.99, -25.03,
-        -25.11, -25.11, -25.18, -25.23, -25.28, -25.34, -25.40, -25.47, -25.56, -25.64,
-        -25.64, -25.74, -25.79, -25.83, -25.92, -25.96, -26.02, -26.09, -26.09, -26.18,
-        -26.28, -26.29, -26.32, -26.37, -26.46, -26.45, -26.51, -26.62, -26.62, -26.73,
-        -26.85, -26.87, -26.93, -27.05, -27.17, -27.19, -27.28, -27.32, -27.36, -27.41,
-        -27.47, -27.52, -27.56, -27.61, -27.67, -27.74, -27.76, -27.87, -27.91, -27.96,
-        -28.04, -28.11, -28.19, -28.29, -28.39, -28.51, -28.57, -28.62, -28.71, -28.75,
-        -28.82, -28.90, -28.95, -29.06, -29.07, -29.14, -29.25, -29.32, -29.42, -29.50,
-        -29.54, -29.59, -29.65, -29.72, -29.76, -29.84, -29.91, -29.95, -30.03, -30.12,
-        -30.19, -30.28, -30.30, -30.37, -30.46, -30.55, -30.65, -30.73, -30.69, -30.77,
-        -30.85, -30.93, -30.93, -31.02, -31.12, -31.21, -31.26, -31.31, -31.41, -31.52,
-        -31.55, -31.65, -31.76, -31.90, -32.01, -32.11, -32.22, -32.33, -32.42, -32.50,
-        -32.60, -32.66, -32.69, -32.79, -32.89, -32.90, -32.97, -33.07, -33.13, -33.12,
-        -33.20, -33.29, -33.39, -33.37, -33.47, -33.57, -33.66, -33.68, -33.73, -33.79,
-        -33.81, -33.89, -33.95, -34.05, -34.10, -34.20, -34.25, -34.36, -34.44, -34.48,
-        -34.58, -34.67, -34.71, -34.80, -34.90, -34.99, -35.13, -35.22, -35.32, -35.42,
-        -35.53, -35.64, -35.73, -35.83, -35.93, -36.03, -36.14, -36.23, -36.34, -36.45,
-        -36.54, -36.65, -36.74, -36.76, -36.83, -36.91, -36.91, -36.99, -37.09, -37.19,
-        -37.30, -37.39, -37.49, -37.58, -37.68, -37.78, -37.89, -37.99, -38.08, -38.15,
-        -38.19, -38.25, -38.36, -38.44, -38.44, -38.53, -38.64, -38.73, -38.83, -38.93,
-        -39.00, -39.13, -39.22, -39.31, -39.38, -39.46, -39.55, -39.63, -39.77, -39.87,
-        -39.99, -40.10, -40.14, -40.24, -40.29, -40.38, -40.46, -40.50, -40.53, -40.62,
-        -40.62, -40.66, -40.71, -40.75, -40.85, -40.96, -41.06, -41.16, -41.24, -41.34,
-        -41.42, -41.42, -41.50, -41.57, -41.56, -41.62, -41.70, -41.68, -41.76, -41.87,
-        -41.93, -41.96, -42.07, -42.19, -42.29, -42.40, -42.49, -42.56, -42.63, -42.70,
-        -42.79, -42.85, -42.88, -43.00, -43.06, -43.11, -43.21, -43.29, -43.39, -43.50,
-        -43.56, -43.61, -43.67, -43.78, -43.82, -43.86, -43.94, -44.02, -44.08, -44.13,
-        -44.18, -44.25, -44.33, -44.42, -44.51, -44.60, -44.64, -44.74, -44.84, -44.95,
-        -45.06, -45.16, -45.25, -45.35, -45.46, -45.55, -45.63, -45.73, -45.79, -45.87,
-        -45.95, -46.06, -46.14, -46.20, -46.28, -46.39, -46.46, -46.54, -46.66, -46.75,
-        -46.85, -46.94, -47.03, -47.12, -47.11, -47.21, -47.31, -47.37, -47.37, -47.47,
-        -47.55, -47.65, -47.75, -47.85, -47.94, -48.04, -48.15, -48.25, -48.32, -48.42,
-        -48.40, -48.47, -48.54, -48.54, -48.67, -48.73, -48.77, -48.85, -48.92, -48.97,
-        -49.06, -49.16, -49.26, -49.35, -49.39, -49.49, -49.59, -49.64, -49.65, -49.74,
-        -49.82, -49.90, -49.96, -50.02, -50.12, -50.22, -50.29, -50.38, -50.48, -50.59,
-        -50.68, -50.78, -50.89, -50.98, -51.09, -51.22, -51.31, -51.31, -51.41, -51.48,
-        -51.52, -51.62, -51.72, -51.77, -51.83, -51.92, -52.00, -52.08, -52.16, -52.27,
-        -52.38, -52.50, -52.57, -52.69, -52.79, -52.89, -52.96, -53.04, -53.12, -53.22,
-        -53.32, -53.41, -53.50, -53.58, -53.67, -53.77, -53.88, -53.99, -54.14, -54.23,
-        -54.35, -54.46, -54.56, -54.65, -54.71, -54.77, -54.88, -54.95, -54.99, -55.10,
-        -55.20, -55.26, -55.34, -55.43, -55.53, -55.61, -55.70, -55.79, -55.91, -56.02,
-        -56.12, -56.17, -56.25, -56.35, -56.44, -56.49, -56.59, -56.68, -56.75, -56.82,
-        -56.91, -57.00, -57.05, -57.14, -57.24, -57.33, -57.38, -57.46, -57.54, -57.61,
-        -57.59, -57.64, -57.71, -57.78, -57.87, -57.89, -57.89, -57.97, -58.06, -58.15,
-        -58.24, -58.34, -58.43, -58.52, -58.61, -58.68, -58.75, -58.82, -58.89, -58.96,
-        -59.05, -59.14, -59.20, -59.30, -59.39, -59.47, -59.55, -59.64, -59.73, -59.83,
-        -59.88, -59.90, -60.00, -60.07, -60.12, -60.21, -60.30, -60.36, -60.46, -60.57,
-        -60.67, -60.76, -60.84, -60.91, -60.99, -61.08, -61.17, -61.25, -61.30, -61.37,
-        -61.46, -61.55, -61.63, -61.68, -61.76, -61.84, -61.94, -62.01, -62.11, -62.21,
-        -62.31, -62.42, -62.52, -62.62, -62.70, -62.80, -62.88, -62.96, -63.02, -63.09,
-        -63.16, -63.25, -63.32, -63.40, -63.48, -63.55, -63.64, -63.73, -63.82, -63.91,
-        -63.98, -64.05, -64.12, -64.20, -64.28, -64.36, -64.45, -64.53, -64.60, -64.72,
-        -64.81, -64.90, -64.97, -65.05, -65.12, -65.18, -65.23, -65.30, -65.37, -65.44,
-        -65.48, -65.58, -65.68, -65.79, -65.87, -65.99, -66.10, -66.18, -66.27, -66.33,
-        -66.38, -66.47, -66.53, -66.60, -66.69, -66.74, -66.82, -66.91, -66.99, -67.06,
-        -67.15, -67.21, -67.27, -67.36, -67.43, -67.48, -67.56, -67.59, -67.68, -67.77,
-        -67.82, -67.87, -67.93, -67.99, -68.07, -68.12, -68.20, -68.27, -68.36, -68.40,
-        -68.48, -68.55, -68.61, -68.67, -68.73, -68.80, -68.86, -68.91, -68.97, -69.07,
-        -69.15, -69.19, -69.25, -69.29, -69.39, -69.47, -69.51, -69.54, -69.60, -69.66,
-        -69.74, -69.81, -69.85, -69.92, -69.98, -70.04, -70.09, -70.13, -70.18, -70.23,
-        -70.27, -70.35, -70.40, -70.46, -70.53, -70.57, -70.65, -70.67, -70.76, -70.80,
-        -70.86, -70.92, -70.97, -71.00, -71.06, -71.09, -71.17, -71.22, -71.29, -71.33,
-        -71.38, -71.41, -71.47, -71.48, -71.54, -71.59, -71.66, -71.70, -71.77, -71.81,
-        -71.83, -71.89, -71.91, -71.95, -72.00, -72.05, -72.10, -72.13, -72.20, -72.26,
-        -72.30, -72.40, -72.40, -72.47, -72.49, -72.51, -72.53, -72.55, -72.56, -72.59,
-        -72.59, -72.59, -72.64, -72.66, -72.68, -72.75, -72.77, -72.85, -72.85, -72.88,
-        -72.95, -73.01, -73.06, -73.11, -73.12, -73.14, -73.17, -73.20, -73.22, -73.25,
-        -73.25, -73.29, -73.28, -73.28, -73.28, -73.28, -73.27, -73.27, -73.27, -73.27,
-        -73.27, -73.27, -73.27, -73.27, -73.27, -73.27, -73.27, -73.26, -73.22, -73.21,
-        -73.18, -73.18, -73.12, -73.12, -73.12, -73.11, -73.11, -73.10, -73.10, -73.10,
-        -73.10, -73.11, -73.15, -73.15, -73.15, -73.12, -73.09, -73.05, -73.03, -72.99,
-        -72.96, -72.92, -72.88, -72.83, -72.81, -72.79, -72.77, -72.77, -72.71, -72.69,
-        -72.68, -72.67, -72.66, -72.66, -72.67, -72.66, -72.66, -72.57, -72.55, -72.57,
-        -72.58, -72.48, -72.46, -72.45, -72.46, -72.46, -72.46, -72.47, -72.47, -72.47,
-        -72.47, -72.42, -72.37, -72.37, -72.27, -72.26, -72.27, -72.27, -72.30, -72.31,
-        -72.35, -72.38, -72.39, -72.42, -72.45, -72.45, -72.45, -72.45, -72.45, -72.45,
-        -72.50, -72.45, -72.47, -72.55, -72.51, -72.53, -72.60, -72.60, -72.60, -72.61,
-        -72.63, -72.64, -72.67, -72.68, -72.67, -72.69, -72.68, -72.71, -72.74, -72.72,
-        -72.74, -72.77, -72.80, -72.83, -72.79, -72.78, -72.81, -72.79, -72.77, -72.82,
-        -72.84, -72.90, -72.94, -72.97, -73.00, -73.07, -73.08, -73.14, -73.14, -73.17,
-        -73.22, -73.22, -73.26, -73.21, -73.23, -73.22, -73.26, -73.32, -73.39, -73.43,
-        -73.46, -73.49, -73.54, -73.45, -73.49, -73.55, -73.53, -73.49, -73.54, -73.57,
-        -73.62, -73.64, -73.68, -73.71, -73.73, -73.73, -73.70, -73.73, -73.76, -73.76,
-        -73.81, -73.85, -73.92, -73.95, -73.92, -73.95, -74.02, -74.07, -74.07, -74.08,
-        -74.10, -74.14, -74.17, -74.21, -74.23, -74.19, -74.20, -74.24, -74.29, -74.34,
-        -74.39, -74.43, -74.47, -74.54, -74.57, -74.59, -74.55, -74.63, -74.58, -74.63,
-        -74.62, -74.63, -74.67, -74.64, -74.67, -74.61, -74.66, -74.69, -74.73, -74.75,
-        -74.81, -74.85, -74.89, -74.92, -74.98, -74.95, -74.97, -75.01, -74.98, -75.02,
-        -75.07, -75.14, -75.18, -75.23, -75.26, -75.28, -75.24, -75.25, -75.26, -75.24,
-        -75.28, -75.33, -75.33, -75.37, -75.39, -75.37, -75.41, -75.43, -75.43, -75.51,
-        -75.53, -75.53, -75.56, -75.54, -75.53, -75.56, -75.63, -75.66, -75.64, -75.62,
-        -75.60, -75.57, -75.52, -75.50, -75.46, -75.48, -75.45, -75.47, -75.51, -75.48,
-        -75.47, -75.45, -75.46, -75.38, -75.40, -75.37, -75.28, -75.19, -75.23, -75.19,
-        -75.12, -75.12, -75.07, -75.01, -75.01, -75.00, -74.99, -75.03, -74.99, -75.01,
-        -75.07, -75.01, -75.02, -74.99, -74.93, -74.93, -74.87, -74.84, -74.83, -74.79,
-        -74.75, -74.77, -74.76, -74.76, -74.73, -74.71, -74.70, -74.69, -74.65, -74.60,
-        -74.60, -74.56, -74.50, -74.49, -74.40, -74.36, -74.30, -74.24, -74.25, -74.26,
-        -74.26, -74.25, -74.25, -74.25, -74.15, -74.15, -74.14, -74.01, -73.99, -73.96,
-        -73.95, -73.93, -73.93, -73.93, -73.93, -73.91, -73.91, -73.91, -73.91, -73.91,
-        -73.83, -73.76, -73.74, -73.68, -73.60, -73.57, -73.55, -73.55, -73.50, -73.47,
-        -73.47, -73.46, -73.42, -73.40, -73.40, -73.39, -73.39, -73.39, -73.37, -73.34,
-        -73.29, -73.27, -73.28, -73.24, -73.23, -73.19, -73.15, -73.14, -73.12, -73.10,
-        -73.08, -73.05, -73.02, -73.04, -73.05, -73.03, -73.03, -73.00, -73.05, -73.06,
-        -73.05, -73.04, -72.99, -73.04, -73.02, -73.03, -73.04, -73.04, -72.99, -72.94,
-        -72.94, -72.96, -73.03, -73.05, -73.08, -73.08, -73.08, -73.21, -73.16, -73.13,
-        -73.11, -73.09, -73.18, -73.16, -73.16, -73.23, -73.25, -73.28, -73.34, -73.50,
-        -73.60, -73.58, -73.67, -73.69, -73.74, -73.88, -73.96, -73.94, -73.98, -74.10,
-        -74.10, -74.07, -74.04, -74.11, -74.19, -74.25, -74.26, -74.31, -74.42, -74.53,
-        -74.62, -74.61, -74.68, -74.75, -74.74, -74.68, -74.59, -74.68, -74.74, -74.77,
-        -74.85, -74.78, -74.80, -74.81, -75.09, -75.03, -74.96, -74.96, -75.28, -75.27,
-        -75.27, -75.30, -75.31, -75.38, -75.41, -75.39, -75.35, -75.37, -75.42, -75.43,
-        -75.42, -75.48, -75.43, -75.40, -75.38, -75.36, -75.33, -75.26, -75.26, -75.28,
-        -75.25, -75.19, -75.17, -75.11, -75.08, -75.05, -75.04, -74.99, -74.92, -74.91,
-        -74.85, -74.83, -74.84, -74.85, -74.86, -74.81, -74.83, -74.82, -74.82, -74.80,
-        -74.85, -74.84, -74.79, -74.73, -74.72, -74.69, -74.69, -74.71, -74.66, -74.63,
-        -74.61, -74.57, -74.52, -74.47, -74.52, -74.46, -74.47, -74.51, -74.49, -74.49,
-        -74.47, -74.45, -74.41, -74.37, -74.33, -74.32, -74.32, -74.28, -74.24, -74.22,
-        -74.16, -74.23, -74.24, -74.27, -74.34, -74.34, -74.32, -74.30, -74.27, -74.25,
-        -74.22, -74.23, -74.22, -74.23, -74.24, -74.22, -74.21, -74.19, -74.17, -74.17,
-        -74.19, -74.21, -74.23, -74.26, -74.27, -74.27, -74.27, -74.26, -74.26, -74.26,
-        -74.25, -74.25, -74.25, -74.24, -74.24, -74.24, -74.23, -74.22, -74.24, -74.21,
-        -74.20, -74.19, -74.16, -74.22, -74.21, -74.23, -74.25, -74.23, -74.28, -74.28,
-        -74.27, -74.22, -74.27, -74.22, -74.25, -74.26, -74.24, -74.21, -74.23, -74.25,
-        -74.24, -74.19, -74.14, -74.08, -74.06, -74.08, -74.11, -74.09, -74.09, -74.13,
-        -74.17, -74.10, -74.08, -74.02, -73.96, -73.94, -73.88, -73.86, -73.75, -73.72,
-        -73.67, -73.65, -73.62, -73.53, -73.44, -73.47, -73.45, -73.47, -73.53, -73.49,
-        -73.37, -73.35, -73.25, -73.21, -73.14, -73.09, -73.02, -73.01, -72.89, -72.90,
-        -72.93, -72.86, -72.78, -72.73, -72.66, -72.57, -72.50, -72.48, -72.46, -72.46,
-        -72.39, -72.32, -72.36, -72.34, -72.29, -72.15, -72.09, -72.01, -71.91, -71.87,
-        -71.76, -71.64, -71.63, -71.51, -71.45, -71.39, -71.37, -71.36
+        -1950, -1953, -1955, -1962, -1969,
+        -1980, -1983, -1992, -1994, -2004, -2008, -2018, -2022, -2027, -2031,
+        -2038, -2042, -2047, -2052, -2055, -2061, -2066, -2071, -2081, -2087,
+        -2093, -2097, -2104, -2109, -2118, -2129, -2137, -2146, -2153, -2163,
+        -2162, -2173, -2181, -2187, -2193, -2200, -2206, -2211, -2218, -2219,
+        -2226, -2240, -2242, -2250, -2253, -2262, -2269, -2275, -2282, -2288,
+        -2293, -2299, -2305, -2312, -2323, -2325, -2335, -2335, -2336, -2340,
+        -2345, -2350, -2352, -2361, -2362, -2372, -2377, -2381, -2390, -2392,
+        -2398, -2409, -2410, -2415, -2427, -2424, -2430, -2440, -2447, -2455,
+        -2454, -2461, -2471, -2479, -2481, -2485, -2489, -2494, -2499, -2503,
+        -2511, -2511, -2518, -2523, -2528, -2534, -2540, -2547, -2556, -2564,
+        -2564, -2574, -2579, -2583, -2592, -2596, -2602, -2609, -2609, -2618,
+        -2628, -2629, -2632, -2637, -2646, -2645, -2651, -2662, -2662, -2673,
+        -2685, -2687, -2693, -2705, -2717, -2719, -2728, -2732, -2736, -2741,
+        -2747, -2752, -2756, -2761, -2767, -2774, -2776, -2787, -2791, -2796,
+        -2804, -2811, -2819, -2829, -2839, -2851, -2857, -2862, -2871, -2875,
+        -2882, -2890, -2895, -2906, -2907, -2914, -2925, -2932, -2942, -2950,
+        -2954, -2959, -2965, -2972, -2976, -2984, -2991, -2995, -3003, -3012,
+        -3019, -3028, -3030, -3037, -3046, -3055, -3065, -3073, -3069, -3077,
+        -3085, -3093, -3093, -3102, -3112, -3121, -3126, -3131, -3141, -3152,
+        -3155, -3165, -3176, -3190, -3201, -3211, -3222, -3233, -3242, -3250,
+        -3260, -3266, -3269, -3279, -3289, -3290, -3297, -3307, -3313, -3312,
+        -3320, -3329, -3339, -3337, -3347, -3357, -3366, -3368, -3373, -3379,
+        -3381, -3389, -3395, -3405, -3410, -3420, -3425, -3436, -3444, -3448,
+        -3458, -3467, -3471, -3480, -3490, -3499, -3513, -3522, -3532, -3542,
+        -3553, -3564, -3573, -3583, -3593, -3603, -3614, -3623, -3634, -3645,
+        -3654, -3665, -3674, -3676, -3683, -3691, -3691, -3699, -3709, -3719,
+        -3730, -3739, -3749, -3758, -3768, -3778, -3789, -3799, -3808, -3815,
+        -3819, -3825, -3836, -3844, -3844, -3853, -3864, -3873, -3883, -3893,
+        -3900, -3913, -3922, -3931, -3938, -3946, -3955, -3963, -3977, -3987,
+        -3999, -4010, -4014, -4024, -4029, -4038, -4046, -4050, -4053, -4062,
+        -4062, -4066, -4071, -4075, -4085, -4096, -4106, -4116, -4124, -4134,
+        -4142, -4142, -4150, -4157, -4156, -4162, -4170, -4168, -4176, -4187,
+        -4193, -4196, -4207, -4219, -4229, -4240, -4249, -4256, -4263, -4270,
+        -4279, -4285, -4288, -4300, -4306, -4311, -4321, -4329, -4339, -4350,
+        -4356, -4361, -4367, -4378, -4382, -4386, -4394, -4402, -4408, -4413,
+        -4418, -4425, -4433, -4442, -4451, -4460, -4464, -4474, -4484, -4495,
+        -4506, -4516, -4525, -4535, -4546, -4555, -4563, -4573, -4579, -4587,
+        -4595, -4606, -4614, -4620, -4628, -4639, -4646, -4654, -4666, -4675,
+        -4685, -4694, -4703, -4712, -4711, -4721, -4731, -4737, -4737, -4747,
+        -4755, -4765, -4775, -4785, -4794, -4804, -4815, -4825, -4832, -4842,
+        -4840, -4847, -4854, -4854, -4867, -4873, -4877, -4885, -4892, -4897,
+        -4906, -4916, -4926, -4935, -4939, -4949, -4959, -4964, -4965, -4974,
+        -4982, -4990, -4996, -5002, -5012, -5022, -5029, -5038, -5048, -5059,
+        -5068, -5078, -5089, -5098, -5109, -5122, -5131, -5131, -5141, -5148,
+        -5152, -5162, -5172, -5177, -5183, -5192, -5200, -5208, -5216, -5227,
+        -5238, -5250, -5257, -5269, -5279, -5289, -5296, -5304, -5312, -5322,
+        -5332, -5341, -5350, -5358, -5367, -5377, -5388, -5399, -5414, -5423,
+        -5435, -5446, -5456, -5465, -5471, -5477, -5488, -5495, -5499, -5510,
+        -5520, -5526, -5534, -5543, -5553, -5561, -5570, -5579, -5591, -5602,
+        -5612, -5617, -5625, -5635, -5644, -5649, -5659, -5668, -5675, -5682,
+        -5691, -5700, -5705, -5714, -5724, -5733, -5738, -5746, -5754, -5761,
+        -5759, -5764, -5771, -5778, -5787, -5789, -5789, -5797, -5806, -5815,
+        -5824, -5834, -5843, -5852, -5861, -5868, -5875, -5882, -5889, -5896,
+        -5905, -5914, -5920, -5930, -5939, -5947, -5955, -5964, -5973, -5983,
+        -5988, -5990, -6000, -6007, -6012, -6021, -6030, -6036, -6046, -6057,
+        -6067, -6076, -6084, -6091, -6099, -6108, -6117, -6125, -6130, -6137,
+        -6146, -6155, -6163, -6168, -6176, -6184, -6194, -6201, -6211, -6221,
+        -6231, -6242, -6252, -6262, -6270, -6280, -6288, -6296, -6302, -6309,
+        -6316, -6325, -6332, -6340, -6348, -6355, -6364, -6373, -6382, -6391,
+        -6398, -6405, -6412, -6420, -6428, -6436, -6445, -6453, -6460, -6472,
+        -6481, -6490, -6497, -6505, -6512, -6518, -6523, -6530, -6537, -6544,
+        -6548, -6558, -6568, -6579, -6587, -6599, -6610, -6618, -6627, -6633,
+        -6638, -6647, -6653, -6660, -6669, -6674, -6682, -6691, -6699, -6706,
+        -6715, -6721, -6727, -6736, -6743, -6748, -6756, -6759, -6768, -6777,
+        -6782, -6787, -6793, -6799, -6807, -6812, -6820, -6827, -6836, -6840,
+        -6848, -6855, -6861, -6867, -6873, -6880, -6886, -6891, -6897, -6907,
+        -6915, -6919, -6925, -6929, -6939, -6947, -6951, -6954, -6960, -6966,
+        -6974, -6981, -6985, -6992, -6998, -7004, -7009, -7013, -7018, -7023,
+        -7027, -7035, -7040, -7046, -7053, -7057, -7065, -7067, -7076, -7080,
+        -7086, -7092, -7097, -7100, -7106, -7109, -7117, -7122, -7129, -7133,
+        -7138, -7141, -7147, -7148, -7154, -7159, -7166, -7170, -7177, -7181,
+        -7183, -7189, -7191, -7195, -7200, -7205, -7210, -7213, -7220, -7226,
+        -7230, -7240, -7240, -7247, -7249, -7251, -7253, -7255, -7256, -7259,
+        -7259, -7259, -7264, -7266, -7268, -7275, -7277, -7285, -7285, -7288,
+        -7295, -7301, -7306, -7311, -7312, -7314, -7317, -7320, -7322, -7325,
+        -7325, -7329, -7328, -7328, -7328, -7328, -7327, -7327, -7327, -7327,
+        -7327, -7327, -7327, -7327, -7327, -7327, -7327, -7326, -7322, -7321,
+        -7318, -7318, -7312, -7312, -7312, -7311, -7311, -7310, -7310, -7310,
+        -7310, -7311, -7315, -7315, -7315, -7312, -7309, -7305, -7303, -7299,
+        -7296, -7292, -7288, -7283, -7281, -7279, -7277, -7277, -7271, -7269,
+        -7268, -7267, -7266, -7266, -7267, -7266, -7266, -7257, -7255, -7257,
+        -7258, -7248, -7246, -7245, -7246, -7246, -7246, -7247, -7247, -7247,
+        -7247, -7242, -7237, -7237, -7227, -7226, -7227, -7227, -7230, -7231,
+        -7235, -7238, -7239, -7242, -7245, -7245, -7245, -7245, -7245, -7245,
+        -7250, -7245, -7247, -7255, -7251, -7253, -7260, -7260, -7260, -7261,
+        -7263, -7264, -7267, -7268, -7267, -7269, -7268, -7271, -7274, -7272,
+        -7274, -7277, -7280, -7283, -7279, -7278, -7281, -7279, -7277, -7282,
+        -7284, -7290, -7294, -7297, -7300, -7307, -7308, -7314, -7314, -7317,
+        -7322, -7322, -7326, -7321, -7323, -7322, -7326, -7332, -7339, -7343,
+        -7346, -7349, -7354, -7345, -7349, -7355, -7353, -7349, -7354, -7357,
+        -7362, -7364, -7368, -7371, -7373, -7373, -7370, -7373, -7376, -7376,
+        -7381, -7385, -7392, -7395, -7392, -7395, -7402, -7407, -7407, -7408,
+        -7410, -7414, -7417, -7421, -7423, -7419, -7420, -7424, -7429, -7434,
+        -7439, -7443, -7447, -7454, -7457, -7459, -7455, -7463, -7458, -7463,
+        -7462, -7463, -7467, -7464, -7467, -7461, -7466, -7469, -7473, -7475,
+        -7481, -7485, -7489, -7492, -7498, -7495, -7497, -7501, -7498, -7502,
+        -7507, -7514, -7518, -7523, -7526, -7528, -7524, -7525, -7526, -7524,
+        -7528, -7533, -7533, -7537, -7539, -7537, -7541, -7543, -7543, -7551,
+        -7553, -7553, -7556, -7554, -7553, -7556, -7563, -7566, -7564, -7562,
+        -7560, -7557, -7552, -7550, -7546, -7548, -7545, -7547, -7551, -7548,
+        -7547, -7545, -7546, -7538, -7540, -7537, -7528, -7519, -7523, -7519,
+        -7512, -7512, -7507, -7501, -7501, -7500, -7499, -7503, -7499, -7501,
+        -7507, -7501, -7502, -7499, -7493, -7493, -7487, -7484, -7483, -7479,
+        -7475, -7477, -7476, -7476, -7473, -7471, -7470, -7469, -7465, -7460,
+        -7460, -7456, -7450, -7449, -7440, -7436, -7430, -7424, -7425, -7426,
+        -7426, -7425, -7425, -7425, -7415, -7415, -7414, -7401, -7399, -7396,
+        -7395, -7393, -7393, -7393, -7393, -7391, -7391, -7391, -7391, -7391,
+        -7383, -7376, -7374, -7368, -7360, -7357, -7355, -7355, -7350, -7347,
+        -7347, -7346, -7342, -7340, -7340, -7339, -7339, -7339, -7337, -7334,
+        -7329, -7327, -7328, -7324, -7323, -7319, -7315, -7314, -7312, -7310,
+        -7308, -7305, -7302, -7304, -7305, -7303, -7303, -7300, -7305, -7306,
+        -7305, -7304, -7299, -7304, -7302, -7303, -7304, -7304, -7299, -7294,
+        -7294, -7296, -7303, -7305, -7308, -7308, -7308, -7321, -7316, -7313,
+        -7311, -7309, -7318, -7316, -7316, -7323, -7325, -7328, -7334, -7350,
+        -7360, -7358, -7367, -7369, -7374, -7388, -7396, -7394, -7398, -7410,
+        -7410, -7407, -7404, -7411, -7419, -7425, -7426, -7431, -7442, -7453,
+        -7462, -7461, -7468, -7475, -7474, -7468, -7459, -7468, -7474, -7477,
+        -7485, -7478, -7480, -7481, -7509, -7503, -7496, -7496, -7528, -7527,
+        -7527, -7530, -7531, -7538, -7541, -7539, -7535, -7537, -7542, -7543,
+        -7542, -7548, -7543, -7540, -7538, -7536, -7533, -7526, -7526, -7528,
+        -7525, -7519, -7517, -7511, -7508, -7505, -7504, -7499, -7492, -7491,
+        -7485, -7483, -7484, -7485, -7486, -7481, -7483, -7482, -7482, -7480,
+        -7485, -7484, -7479, -7473, -7472, -7469, -7469, -7471, -7466, -7463,
+        -7461, -7457, -7452, -7447, -7452, -7446, -7447, -7451, -7449, -7449,
+        -7447, -7445, -7441, -7437, -7433, -7432, -7432, -7428, -7424, -7422,
+        -7416, -7423, -7424, -7427, -7434, -7434, -7432, -7430, -7427, -7425,
+        -7422, -7423, -7422, -7423, -7424, -7422, -7421, -7419, -7417, -7417,
+        -7419, -7421, -7423, -7426, -7427, -7427, -7427, -7426, -7426, -7426,
+        -7425, -7425, -7425, -7424, -7424, -7424, -7423, -7422, -7424, -7421,
+        -7420, -7419, -7416, -7422, -7421, -7423, -7425, -7423, -7428, -7428,
+        -7427, -7422, -7427, -7422, -7425, -7426, -7424, -7421, -7423, -7425,
+        -7424, -7419, -7414, -7408, -7406, -7408, -7411, -7409, -7409, -7413,
+        -7417, -7410, -7408, -7402, -7396, -7394, -7388, -7386, -7375, -7372,
+        -7367, -7365, -7362, -7353, -7344, -7347, -7345, -7347, -7353, -7349,
+        -7337, -7335, -7325, -7321, -7314, -7309, -7302, -7301, -7289, -7290,
+        -7293, -7286, -7278, -7273, -7266, -7257, -7250, -7248, -7246, -7246,
+        -7239, -7232, -7236, -7234, -7229, -7215, -7209, -7201, -7191, -7187,
+        -7176, -7164, -7163, -7151, -7145, -7139, -7137, -7136
     };
 
-    static const float fletcher_munson_curve_20_phons[1383] =
+    static const int16_t fletcher_munson_curve_20_phons[1383] =
     {
-        -15.16, -15.20, -15.20, -15.27, -15.35,
-        -15.46, -15.49, -15.57, -15.59, -15.68, -15.70, -15.81, -15.85, -15.88, -15.90,
-        -15.93, -15.97, -16.01, -16.07, -16.09, -16.11, -16.16, -16.22, -16.31, -16.38,
-        -16.43, -16.47, -16.57, -16.61, -16.69, -16.79, -16.84, -16.93, -16.98, -17.06,
-        -17.03, -17.16, -17.26, -17.31, -17.36, -17.41, -17.46, -17.49, -17.52, -17.54,
-        -17.64, -17.75, -17.75, -17.85, -17.90, -17.98, -18.04, -18.11, -18.18, -18.26,
-        -18.30, -18.36, -18.41, -18.49, -18.60, -18.62, -18.73, -18.72, -18.68, -18.71,
-        -18.76, -18.80, -18.80, -18.86, -18.86, -18.95, -19.00, -19.04, -19.11, -19.10,
-        -19.15, -19.24, -19.24, -19.24, -19.35, -19.30, -19.35, -19.45, -19.49, -19.55,
-        -19.54, -19.59, -19.69, -19.78, -19.78, -19.81, -19.85, -19.90, -19.95, -19.98,
-        -20.04, -20.04, -20.09, -20.14, -20.18, -20.24, -20.31, -20.38, -20.46, -20.54,
-        -20.52, -20.60, -20.63, -20.65, -20.75, -20.78, -20.84, -20.87, -20.86, -20.95,
-        -21.04, -21.04, -21.04, -21.07, -21.14, -21.13, -21.18, -21.27, -21.25, -21.32,
-        -21.42, -21.42, -21.47, -21.57, -21.66, -21.66, -21.75, -21.77, -21.82, -21.85,
-        -21.92, -21.94, -21.99, -22.04, -22.09, -22.16, -22.17, -22.27, -22.32, -22.37,
-        -22.46, -22.52, -22.62, -22.72, -22.82, -22.91, -22.98, -23.01, -23.08, -23.07,
-        -23.12, -23.20, -23.24, -23.34, -23.35, -23.39, -23.48, -23.54, -23.64, -23.71,
-        -23.75, -23.81, -23.89, -23.92, -23.94, -24.01, -24.09, -24.11, -24.17, -24.24,
-        -24.30, -24.38, -24.39, -24.44, -24.54, -24.64, -24.73, -24.80, -24.74, -24.84,
-        -24.93, -24.99, -24.99, -25.05, -25.14, -25.22, -25.25, -25.28, -25.36, -25.44,
-        -25.45, -25.53, -25.62, -25.76, -25.87, -25.96, -26.06, -26.16, -26.23, -26.28,
-        -26.39, -26.46, -26.49, -26.59, -26.70, -26.71, -26.79, -26.89, -26.94, -26.94,
-        -27.03, -27.12, -27.21, -27.18, -27.25, -27.32, -27.39, -27.40, -27.45, -27.50,
-        -27.49, -27.55, -27.59, -27.68, -27.71, -27.80, -27.84, -27.95, -28.01, -28.00,
-        -28.07, -28.14, -28.18, -28.25, -28.33, -28.39, -28.52, -28.60, -28.70, -28.79,
-        -28.89, -28.99, -29.07, -29.16, -29.24, -29.34, -29.45, -29.55, -29.64, -29.74,
-        -29.82, -29.93, -30.02, -30.03, -30.09, -30.16, -30.15, -30.21, -30.31, -30.40,
-        -30.51, -30.59, -30.66, -30.74, -30.81, -30.90, -31.01, -31.10, -31.16, -31.21,
-        -31.24, -31.30, -31.40, -31.46, -31.45, -31.54, -31.64, -31.71, -31.79, -31.88,
-        -31.95, -32.07, -32.15, -32.23, -32.31, -32.40, -32.49, -32.58, -32.73, -32.82,
-        -32.96, -33.09, -33.12, -33.20, -33.20, -33.29, -33.36, -33.40, -33.40, -33.49,
-        -33.48, -33.53, -33.56, -33.58, -33.66, -33.77, -33.86, -33.96, -34.05, -34.14,
-        -34.21, -34.21, -34.30, -34.39, -34.39, -34.42, -34.50, -34.50, -34.59, -34.69,
-        -34.74, -34.75, -34.85, -34.95, -35.04, -35.14, -35.19, -35.25, -35.34, -35.40,
-        -35.46, -35.52, -35.53, -35.63, -35.67, -35.72, -35.81, -35.91, -36.01, -36.11,
-        -36.17, -36.23, -36.30, -36.43, -36.47, -36.50, -36.58, -36.62, -36.67, -36.69,
-        -36.73, -36.76, -36.84, -36.91, -36.99, -37.07, -37.10, -37.19, -37.29, -37.40,
-        -37.50, -37.58, -37.68, -37.78, -37.87, -37.95, -37.99, -38.08, -38.12, -38.17,
-        -38.22, -38.32, -38.37, -38.40, -38.46, -38.56, -38.61, -38.66, -38.77, -38.83,
-        -38.92, -39.01, -39.09, -39.15, -39.13, -39.23, -39.34, -39.36, -39.37, -39.47,
-        -39.52, -39.62, -39.71, -39.79, -39.87, -39.96, -40.07, -40.16, -40.26, -40.36,
-        -40.34, -40.39, -40.48, -40.48, -40.60, -40.65, -40.68, -40.76, -40.86, -40.91,
-        -40.98, -41.04, -41.12, -41.20, -41.23, -41.32, -41.41, -41.47, -41.49, -41.58,
-        -41.67, -41.73, -41.77, -41.82, -41.91, -42.01, -42.04, -42.11, -42.20, -42.31,
-        -42.39, -42.49, -42.59, -42.68, -42.78, -42.91, -43.01, -43.01, -43.11, -43.16,
-        -43.21, -43.32, -43.42, -43.44, -43.52, -43.63, -43.72, -43.78, -43.83, -43.93,
-        -44.02, -44.11, -44.13, -44.23, -44.32, -44.42, -44.50, -44.56, -44.63, -44.73,
-        -44.83, -44.92, -45.00, -45.07, -45.13, -45.23, -45.32, -45.43, -45.58, -45.67,
-        -45.79, -45.91, -45.99, -46.08, -46.14, -46.19, -46.28, -46.34, -46.38, -46.47,
-        -46.56, -46.62, -46.67, -46.75, -46.84, -46.92, -47.00, -47.10, -47.24, -47.34,
-        -47.43, -47.43, -47.52, -47.62, -47.70, -47.72, -47.82, -47.91, -47.96, -48.01,
-        -48.11, -48.21, -48.21, -48.31, -48.40, -48.49, -48.52, -48.59, -48.69, -48.77,
-        -48.77, -48.81, -48.88, -48.97, -49.06, -49.09, -49.08, -49.17, -49.26, -49.35,
-        -49.46, -49.57, -49.66, -49.75, -49.83, -49.88, -49.93, -49.99, -50.07, -50.11,
-        -50.22, -50.30, -50.33, -50.44, -50.55, -50.65, -50.74, -50.84, -50.96, -51.07,
-        -51.13, -51.14, -51.24, -51.31, -51.32, -51.42, -51.51, -51.53, -51.61, -51.70,
-        -51.79, -51.87, -51.93, -51.98, -52.07, -52.16, -52.26, -52.35, -52.38, -52.46,
-        -52.56, -52.65, -52.73, -52.75, -52.85, -52.94, -53.03, -53.08, -53.18, -53.27,
-        -53.37, -53.47, -53.56, -53.65, -53.71, -53.80, -53.83, -53.91, -53.93, -54.00,
-        -54.05, -54.12, -54.17, -54.26, -54.35, -54.40, -54.48, -54.58, -54.68, -54.78,
-        -54.82, -54.88, -54.93, -55.00, -55.07, -55.13, -55.22, -55.28, -55.32, -55.42,
-        -55.52, -55.60, -55.65, -55.71, -55.79, -55.86, -55.90, -55.94, -56.02, -56.09,
-        -56.10, -56.19, -56.30, -56.40, -56.45, -56.57, -56.71, -56.79, -56.89, -56.94,
-        -56.95, -57.04, -57.05, -57.10, -57.19, -57.24, -57.34, -57.43, -57.51, -57.58,
-        -57.67, -57.73, -57.77, -57.86, -57.91, -57.95, -58.04, -58.06, -58.14, -58.23,
-        -58.27, -58.32, -58.37, -58.41, -58.50, -58.54, -58.61, -58.70, -58.80, -58.81,
-        -58.89, -58.95, -59.02, -59.07, -59.12, -59.17, -59.22, -59.26, -59.31, -59.38,
-        -59.45, -59.45, -59.53, -59.54, -59.63, -59.69, -59.71, -59.73, -59.78, -59.82,
-        -59.88, -59.92, -59.97, -60.02, -60.08, -60.12, -60.17, -60.21, -60.25, -60.30,
-        -60.35, -60.44, -60.47, -60.53, -60.61, -60.63, -60.71, -60.72, -60.80, -60.82,
-        -60.87, -60.91, -60.95, -60.95, -61.00, -61.01, -61.10, -61.10, -61.19, -61.19,
-        -61.29, -61.34, -61.38, -61.38, -61.44, -61.44, -61.49, -61.50, -61.58, -61.58,
-        -61.63, -61.67, -61.69, -61.76, -61.78, -61.86, -61.87, -61.89, -61.97, -62.01,
-        -62.03, -62.14, -62.12, -62.19, -62.21, -62.26, -62.30, -62.35, -62.35, -62.39,
-        -62.41, -62.40, -62.48, -62.48, -62.49, -62.59, -62.60, -62.70, -62.69, -62.75,
-        -62.81, -62.90, -62.95, -63.01, -63.03, -63.02, -63.02, -63.02, -63.06, -63.11,
-        -63.11, -63.20, -63.19, -63.19, -63.19, -63.19, -63.19, -63.18, -63.18, -63.18,
-        -63.18, -63.18, -63.18, -63.18, -63.18, -63.18, -63.18, -63.18, -63.18, -63.18,
-        -63.18, -63.18, -63.13, -63.12, -63.12, -63.11, -63.11, -63.11, -63.11, -63.11,
-        -63.10, -63.11, -63.16, -63.15, -63.15, -63.10, -63.10, -63.05, -63.03, -63.03,
-        -63.01, -62.97, -62.95, -62.87, -62.83, -62.80, -62.78, -62.77, -62.72, -62.69,
-        -62.68, -62.66, -62.65, -62.65, -62.64, -62.63, -62.64, -62.54, -62.53, -62.56,
-        -62.58, -62.47, -62.44, -62.43, -62.44, -62.45, -62.44, -62.47, -62.47, -62.47,
-        -62.47, -62.42, -62.37, -62.37, -62.27, -62.27, -62.27, -62.27, -62.26, -62.26,
-        -62.26, -62.31, -62.33, -62.40, -62.45, -62.45, -62.45, -62.45, -62.45, -62.45,
-        -62.46, -62.41, -62.43, -62.51, -62.47, -62.51, -62.61, -62.61, -62.61, -62.61,
-        -62.61, -62.59, -62.64, -62.65, -62.64, -62.69, -62.68, -62.71, -62.76, -62.74,
-        -62.77, -62.82, -62.84, -62.86, -62.81, -62.81, -62.84, -62.83, -62.83, -62.85,
-        -62.89, -62.93, -62.97, -62.99, -63.02, -63.08, -63.10, -63.14, -63.14, -63.14,
-        -63.22, -63.22, -63.22, -63.16, -63.25, -63.20, -63.23, -63.28, -63.41, -63.46,
-        -63.46, -63.52, -63.54, -63.45, -63.45, -63.54, -63.49, -63.43, -63.47, -63.52,
-        -63.53, -63.57, -63.62, -63.62, -63.66, -63.64, -63.61, -63.64, -63.66, -63.66,
-        -63.71, -63.76, -63.81, -63.85, -63.81, -63.84, -63.93, -63.97, -63.97, -63.97,
-        -63.97, -64.00, -64.01, -64.04, -64.04, -63.97, -63.96, -63.99, -64.00, -64.04,
-        -64.07, -64.11, -64.13, -64.21, -64.23, -64.25, -64.20, -64.29, -64.25, -64.29,
-        -64.29, -64.29, -64.34, -64.32, -64.32, -64.24, -64.31, -64.32, -64.32, -64.33,
-        -64.37, -64.43, -64.43, -64.45, -64.52, -64.46, -64.50, -64.52, -64.49, -64.51,
-        -64.56, -64.62, -64.66, -64.71, -64.72, -64.72, -64.68, -64.72, -64.72, -64.68,
-        -64.68, -64.76, -64.74, -64.77, -64.79, -64.76, -64.81, -64.81, -64.82, -64.92,
-        -64.94, -64.93, -64.95, -64.92, -64.88, -64.88, -64.91, -64.93, -64.87, -64.86,
-        -64.83, -64.79, -64.74, -64.68, -64.64, -64.64, -64.59, -64.62, -64.61, -64.55,
-        -64.50, -64.46, -64.45, -64.36, -64.42, -64.35, -64.25, -64.15, -64.16, -64.10,
-        -64.00, -64.00, -63.95, -63.90, -63.90, -63.84, -63.84, -63.84, -63.81, -63.80,
-        -63.89, -63.80, -63.81, -63.80, -63.75, -63.75, -63.68, -63.64, -63.64, -63.59,
-        -63.55, -63.57, -63.56, -63.56, -63.53, -63.50, -63.50, -63.48, -63.44, -63.39,
-        -63.38, -63.34, -63.28, -63.28, -63.18, -63.15, -63.09, -63.03, -63.04, -63.06,
-        -63.06, -63.05, -63.05, -63.05, -62.94, -62.94, -62.94, -62.82, -62.81, -62.82,
-        -62.86, -62.86, -62.86, -62.86, -62.86, -62.82, -62.82, -62.82, -62.82, -62.82,
-        -62.78, -62.71, -62.71, -62.67, -62.60, -62.59, -62.59, -62.59, -62.57, -62.49,
-        -62.49, -62.47, -62.39, -62.39, -62.39, -62.39, -62.39, -62.39, -62.39, -62.35,
-        -62.26, -62.24, -62.25, -62.21, -62.21, -62.17, -62.13, -62.14, -62.11, -62.09,
-        -62.09, -62.07, -62.04, -62.05, -62.02, -62.00, -62.01, -61.99, -62.02, -61.99,
-        -62.00, -61.98, -61.94, -61.99, -61.95, -61.92, -61.94, -61.92, -61.86, -61.81,
-        -61.81, -61.82, -61.89, -61.91, -61.94, -61.90, -61.91, -62.03, -61.97, -61.91,
-        -61.86, -61.83, -61.93, -61.93, -61.89, -61.95, -62.02, -62.05, -62.11, -62.27,
-        -62.36, -62.34, -62.44, -62.43, -62.46, -62.58, -62.65, -62.64, -62.68, -62.81,
-        -62.81, -62.82, -62.78, -62.86, -62.92, -62.97, -62.98, -63.05, -63.17, -63.28,
-        -63.36, -63.31, -63.45, -63.52, -63.44, -63.34, -63.23, -63.37, -63.49, -63.51,
-        -63.61, -63.53, -63.56, -63.57, -63.87, -63.78, -63.69, -63.70, -64.01, -63.96,
-        -63.96, -64.00, -64.00, -64.10, -64.13, -64.11, -64.10, -64.15, -64.20, -64.22,
-        -64.20, -64.29, -64.24, -64.24, -64.24, -64.19, -64.14, -64.10, -64.10, -64.11,
-        -64.09, -64.02, -64.04, -63.99, -63.95, -63.93, -63.93, -63.88, -63.81, -63.83,
-        -63.78, -63.77, -63.79, -63.78, -63.82, -63.79, -63.83, -63.85, -63.86, -63.85,
-        -63.91, -63.88, -63.83, -63.78, -63.77, -63.75, -63.73, -63.74, -63.71, -63.68,
-        -63.64, -63.59, -63.52, -63.50, -63.56, -63.53, -63.54, -63.61, -63.57, -63.56,
-        -63.53, -63.50, -63.47, -63.44, -63.40, -63.40, -63.40, -63.33, -63.30, -63.30,
-        -63.22, -63.31, -63.32, -63.36, -63.43, -63.43, -63.38, -63.34, -63.29, -63.24,
-        -63.25, -63.27, -63.30, -63.32, -63.32, -63.28, -63.25, -63.21, -63.17, -63.17,
-        -63.20, -63.22, -63.24, -63.27, -63.27, -63.28, -63.28, -63.27, -63.27, -63.27,
-        -63.27, -63.27, -63.27, -63.28, -63.29, -63.29, -63.30, -63.30, -63.35, -63.35,
-        -63.39, -63.39, -63.38, -63.44, -63.44, -63.49, -63.54, -63.55, -63.60, -63.60,
-        -63.62, -63.61, -63.67, -63.64, -63.69, -63.72, -63.69, -63.68, -63.73, -63.78,
-        -63.79, -63.74, -63.69, -63.65, -63.64, -63.69, -63.74, -63.73, -63.73, -63.79,
-        -63.81, -63.75, -63.72, -63.72, -63.70, -63.71, -63.64, -63.63, -63.54, -63.53,
-        -63.49, -63.46, -63.43, -63.35, -63.25, -63.32, -63.29, -63.34, -63.43, -63.43,
-        -63.29, -63.30, -63.21, -63.18, -63.08, -63.01, -62.95, -62.96, -62.84, -62.83,
-        -62.84, -62.79, -62.72, -62.69, -62.64, -62.50, -62.45, -62.46, -62.47, -62.45,
-        -62.39, -62.30, -62.34, -62.33, -62.25, -62.11, -62.06, -62.01, -61.90, -61.89,
-        -61.77, -61.65, -61.65, -61.54, -61.47, -61.44, -61.46, -61.48
+        -1516, -1520, -1520, -1527, -1535,
+        -1546, -1549, -1557, -1559, -1568, -1570, -1581, -1585, -1588, -1590,
+        -1593, -1597, -1601, -1607, -1609, -1611, -1616, -1622, -1631, -1638,
+        -1643, -1647, -1657, -1661, -1669, -1679, -1684, -1693, -1698, -1706,
+        -1703, -1716, -1726, -1731, -1736, -1741, -1746, -1749, -1752, -1754,
+        -1764, -1775, -1775, -1785, -1790, -1798, -1804, -1811, -1818, -1826,
+        -1830, -1836, -1841, -1849, -1860, -1862, -1873, -1872, -1868, -1871,
+        -1876, -1880, -1880, -1886, -1886, -1895, -1900, -1904, -1911, -1910,
+        -1915, -1924, -1924, -1924, -1935, -1930, -1935, -1945, -1949, -1955,
+        -1954, -1959, -1969, -1978, -1978, -1981, -1985, -1990, -1995, -1998,
+        -2004, -2004, -2009, -2014, -2018, -2024, -2031, -2038, -2046, -2054,
+        -2052, -2060, -2063, -2065, -2075, -2078, -2084, -2087, -2086, -2095,
+        -2104, -2104, -2104, -2107, -2114, -2113, -2118, -2127, -2125, -2132,
+        -2142, -2142, -2147, -2157, -2166, -2166, -2175, -2177, -2182, -2185,
+        -2192, -2194, -2199, -2204, -2209, -2216, -2217, -2227, -2232, -2237,
+        -2246, -2252, -2262, -2272, -2282, -2291, -2298, -2301, -2308, -2307,
+        -2312, -2320, -2324, -2334, -2335, -2339, -2348, -2354, -2364, -2371,
+        -2375, -2381, -2389, -2392, -2394, -2401, -2409, -2411, -2417, -2424,
+        -2430, -2438, -2439, -2444, -2454, -2464, -2473, -2480, -2474, -2484,
+        -2493, -2499, -2499, -2505, -2514, -2522, -2525, -2528, -2536, -2544,
+        -2545, -2553, -2562, -2576, -2587, -2596, -2606, -2616, -2623, -2628,
+        -2639, -2646, -2649, -2659, -2670, -2671, -2679, -2689, -2694, -2694,
+        -2703, -2712, -2721, -2718, -2725, -2732, -2739, -2740, -2745, -2750,
+        -2749, -2755, -2759, -2768, -2771, -2780, -2784, -2795, -2801, -2800,
+        -2807, -2814, -2818, -2825, -2833, -2839, -2852, -2860, -2870, -2879,
+        -2889, -2899, -2907, -2916, -2924, -2934, -2945, -2955, -2964, -2974,
+        -2982, -2993, -3002, -3003, -3009, -3016, -3015, -3021, -3031, -3040,
+        -3051, -3059, -3066, -3074, -3081, -3090, -3101, -3110, -3116, -3121,
+        -3124, -3130, -3140, -3146, -3145, -3154, -3164, -3171, -3179, -3188,
+        -3195, -3207, -3215, -3223, -3231, -3240, -3249, -3258, -3273, -3282,
+        -3296, -3309, -3312, -3320, -3320, -3329, -3336, -3340, -3340, -3349,
+        -3348, -3353, -3356, -3358, -3366, -3377, -3386, -3396, -3405, -3414,
+        -3421, -3421, -3430, -3439, -3439, -3442, -3450, -3450, -3459, -3469,
+        -3474, -3475, -3485, -3495, -3504, -3514, -3519, -3525, -3534, -3540,
+        -3546, -3552, -3553, -3563, -3567, -3572, -3581, -3591, -3601, -3611,
+        -3617, -3623, -3630, -3643, -3647, -3650, -3658, -3662, -3667, -3669,
+        -3673, -3676, -3684, -3691, -3699, -3707, -3710, -3719, -3729, -3740,
+        -3750, -3758, -3768, -3778, -3787, -3795, -3799, -3808, -3812, -3817,
+        -3822, -3832, -3837, -3840, -3846, -3856, -3861, -3866, -3877, -3883,
+        -3892, -3901, -3909, -3915, -3913, -3923, -3934, -3936, -3937, -3947,
+        -3952, -3962, -3971, -3979, -3987, -3996, -4007, -4016, -4026, -4036,
+        -4034, -4039, -4048, -4048, -4060, -4065, -4068, -4076, -4086, -4091,
+        -4098, -4104, -4112, -4120, -4123, -4132, -4141, -4147, -4149, -4158,
+        -4167, -4173, -4177, -4182, -4191, -4201, -4204, -4211, -4220, -4231,
+        -4239, -4249, -4259, -4268, -4278, -4291, -4301, -4301, -4311, -4316,
+        -4321, -4332, -4342, -4344, -4352, -4363, -4372, -4378, -4383, -4393,
+        -4402, -4411, -4413, -4423, -4432, -4442, -4450, -4456, -4463, -4473,
+        -4483, -4492, -4500, -4507, -4513, -4523, -4532, -4543, -4558, -4567,
+        -4579, -4591, -4599, -4608, -4614, -4619, -4628, -4634, -4638, -4647,
+        -4656, -4662, -4667, -4675, -4684, -4692, -4700, -4710, -4724, -4734,
+        -4743, -4743, -4752, -4762, -4770, -4772, -4782, -4791, -4796, -4801,
+        -4811, -4821, -4821, -4831, -4840, -4849, -4852, -4859, -4869, -4877,
+        -4877, -4881, -4888, -4897, -4906, -4909, -4908, -4917, -4926, -4935,
+        -4946, -4957, -4966, -4975, -4983, -4988, -4993, -4999, -5007, -5011,
+        -5022, -5030, -5033, -5044, -5055, -5065, -5074, -5084, -5096, -5107,
+        -5113, -5114, -5124, -5131, -5132, -5142, -5151, -5153, -5161, -5170,
+        -5179, -5187, -5193, -5198, -5207, -5216, -5226, -5235, -5238, -5246,
+        -5256, -5265, -5273, -5275, -5285, -5294, -5303, -5308, -5318, -5327,
+        -5337, -5347, -5356, -5365, -5371, -5380, -5383, -5391, -5393, -5400,
+        -5405, -5412, -5417, -5426, -5435, -5440, -5448, -5458, -5468, -5478,
+        -5482, -5488, -5493, -5500, -5507, -5513, -5522, -5528, -5532, -5542,
+        -5552, -5560, -5565, -5571, -5579, -5586, -5590, -5594, -5602, -5609,
+        -5610, -5619, -5630, -5640, -5645, -5657, -5671, -5679, -5689, -5694,
+        -5695, -5704, -5705, -5710, -5719, -5724, -5734, -5743, -5751, -5758,
+        -5767, -5773, -5777, -5786, -5791, -5795, -5804, -5806, -5814, -5823,
+        -5827, -5832, -5837, -5841, -5850, -5854, -5861, -5870, -5880, -5881,
+        -5889, -5895, -5902, -5907, -5912, -5917, -5922, -5926, -5931, -5938,
+        -5945, -5945, -5953, -5954, -5963, -5969, -5971, -5973, -5978, -5982,
+        -5988, -5992, -5997, -6002, -6008, -6012, -6017, -6021, -6025, -6030,
+        -6035, -6044, -6047, -6053, -6061, -6063, -6071, -6072, -6080, -6082,
+        -6087, -6091, -6095, -6095, -6100, -6101, -6110, -6110, -6119, -6119,
+        -6129, -6134, -6138, -6138, -6144, -6144, -6149, -6150, -6158, -6158,
+        -6163, -6167, -6169, -6176, -6178, -6186, -6187, -6189, -6197, -6201,
+        -6203, -6214, -6212, -6219, -6221, -6226, -6230, -6235, -6235, -6239,
+        -6241, -6240, -6248, -6248, -6249, -6259, -6260, -6270, -6269, -6275,
+        -6281, -6290, -6295, -6301, -6303, -6302, -6302, -6302, -6306, -6311,
+        -6311, -6320, -6319, -6319, -6319, -6319, -6319, -6318, -6318, -6318,
+        -6318, -6318, -6318, -6318, -6318, -6318, -6318, -6318, -6318, -6318,
+        -6318, -6318, -6313, -6312, -6312, -6311, -6311, -6311, -6311, -6311,
+        -6310, -6311, -6316, -6315, -6315, -6310, -6310, -6305, -6303, -6303,
+        -6301, -6297, -6295, -6287, -6283, -6280, -6278, -6277, -6272, -6269,
+        -6268, -6266, -6265, -6265, -6264, -6263, -6264, -6254, -6253, -6256,
+        -6258, -6247, -6244, -6243, -6244, -6245, -6244, -6247, -6247, -6247,
+        -6247, -6242, -6237, -6237, -6227, -6227, -6227, -6227, -6226, -6226,
+        -6226, -6231, -6233, -6240, -6245, -6245, -6245, -6245, -6245, -6245,
+        -6246, -6241, -6243, -6251, -6247, -6251, -6261, -6261, -6261, -6261,
+        -6261, -6259, -6264, -6265, -6264, -6269, -6268, -6271, -6276, -6274,
+        -6277, -6282, -6284, -6286, -6281, -6281, -6284, -6283, -6283, -6285,
+        -6289, -6293, -6297, -6299, -6302, -6308, -6310, -6314, -6314, -6314,
+        -6322, -6322, -6322, -6316, -6325, -6320, -6323, -6328, -6341, -6346,
+        -6346, -6352, -6354, -6345, -6345, -6354, -6349, -6343, -6347, -6352,
+        -6353, -6357, -6362, -6362, -6366, -6364, -6361, -6364, -6366, -6366,
+        -6371, -6376, -6381, -6385, -6381, -6384, -6393, -6397, -6397, -6397,
+        -6397, -6400, -6401, -6404, -6404, -6397, -6396, -6399, -6400, -6404,
+        -6407, -6411, -6413, -6421, -6423, -6425, -6420, -6429, -6425, -6429,
+        -6429, -6429, -6434, -6432, -6432, -6424, -6431, -6432, -6432, -6433,
+        -6437, -6443, -6443, -6445, -6452, -6446, -6450, -6452, -6449, -6451,
+        -6456, -6462, -6466, -6471, -6472, -6472, -6468, -6472, -6472, -6468,
+        -6468, -6476, -6474, -6477, -6479, -6476, -6481, -6481, -6482, -6492,
+        -6494, -6493, -6495, -6492, -6488, -6488, -6491, -6493, -6487, -6486,
+        -6483, -6479, -6474, -6468, -6464, -6464, -6459, -6462, -6461, -6455,
+        -6450, -6446, -6445, -6436, -6442, -6435, -6425, -6415, -6416, -6410,
+        -6400, -6400, -6395, -6390, -6390, -6384, -6384, -6384, -6381, -6380,
+        -6389, -6380, -6381, -6380, -6375, -6375, -6368, -6364, -6364, -6359,
+        -6355, -6357, -6356, -6356, -6353, -6350, -6350, -6348, -6344, -6339,
+        -6338, -6334, -6328, -6328, -6318, -6315, -6309, -6303, -6304, -6306,
+        -6306, -6305, -6305, -6305, -6294, -6294, -6294, -6282, -6281, -6282,
+        -6286, -6286, -6286, -6286, -6286, -6282, -6282, -6282, -6282, -6282,
+        -6278, -6271, -6271, -6267, -6260, -6259, -6259, -6259, -6257, -6249,
+        -6249, -6247, -6239, -6239, -6239, -6239, -6239, -6239, -6239, -6235,
+        -6226, -6224, -6225, -6221, -6221, -6217, -6213, -6214, -6211, -6209,
+        -6209, -6207, -6204, -6205, -6202, -6200, -6201, -6199, -6202, -6199,
+        -6200, -6198, -6194, -6199, -6195, -6192, -6194, -6192, -6186, -6181,
+        -6181, -6182, -6189, -6191, -6194, -6190, -6191, -6203, -6197, -6191,
+        -6186, -6183, -6193, -6193, -6189, -6195, -6202, -6205, -6211, -6227,
+        -6236, -6234, -6244, -6243, -6246, -6258, -6265, -6264, -6268, -6281,
+        -6281, -6282, -6278, -6286, -6292, -6297, -6298, -6305, -6317, -6328,
+        -6336, -6331, -6345, -6352, -6344, -6334, -6323, -6337, -6349, -6351,
+        -6361, -6353, -6356, -6357, -6387, -6378, -6369, -6370, -6401, -6396,
+        -6396, -6400, -6400, -6410, -6413, -6411, -6410, -6415, -6420, -6422,
+        -6420, -6429, -6424, -6424, -6424, -6419, -6414, -6410, -6410, -6411,
+        -6409, -6402, -6404, -6399, -6395, -6393, -6393, -6388, -6381, -6383,
+        -6378, -6377, -6379, -6378, -6382, -6379, -6383, -6385, -6386, -6385,
+        -6391, -6388, -6383, -6378, -6377, -6375, -6373, -6374, -6371, -6368,
+        -6364, -6359, -6352, -6350, -6356, -6353, -6354, -6361, -6357, -6356,
+        -6353, -6350, -6347, -6344, -6340, -6340, -6340, -6333, -6330, -6330,
+        -6322, -6331, -6332, -6336, -6343, -6343, -6338, -6334, -6329, -6324,
+        -6325, -6327, -6330, -6332, -6332, -6328, -6325, -6321, -6317, -6317,
+        -6320, -6322, -6324, -6327, -6327, -6328, -6328, -6327, -6327, -6327,
+        -6327, -6327, -6327, -6328, -6329, -6329, -6330, -6330, -6335, -6335,
+        -6339, -6339, -6338, -6344, -6344, -6349, -6354, -6355, -6360, -6360,
+        -6362, -6361, -6367, -6364, -6369, -6372, -6369, -6368, -6373, -6378,
+        -6379, -6374, -6369, -6365, -6364, -6369, -6374, -6373, -6373, -6379,
+        -6381, -6375, -6372, -6372, -6370, -6371, -6364, -6363, -6354, -6353,
+        -6349, -6346, -6343, -6335, -6325, -6332, -6329, -6334, -6343, -6343,
+        -6329, -6330, -6321, -6318, -6308, -6301, -6295, -6296, -6284, -6283,
+        -6284, -6279, -6272, -6269, -6264, -6250, -6245, -6246, -6247, -6245,
+        -6239, -6230, -6234, -6233, -6225, -6211, -6206, -6201, -6190, -6189,
+        -6177, -6165, -6165, -6154, -6147, -6144, -6146, -6148
     };
 
-    static const float fletcher_munson_curve_30_phons[1383] =
+    static const int16_t fletcher_munson_curve_30_phons[1383] =
     {
-        -12.16, -12.18, -12.19, -12.23, -12.29,
-        -12.38, -12.41, -12.47, -12.48, -12.57, -12.59, -12.66, -12.68, -12.72, -12.75,
-        -12.75, -12.79, -12.79, -12.85, -12.88, -12.91, -12.94, -12.99, -13.03, -13.07,
-        -13.10, -13.12, -13.19, -13.21, -13.25, -13.31, -13.33, -13.39, -13.44, -13.50,
-        -13.48, -13.58, -13.65, -13.70, -13.75, -13.80, -13.82, -13.84, -13.90, -13.91,
-        -13.99, -14.09, -14.10, -14.17, -14.22, -14.29, -14.34, -14.41, -14.48, -14.54,
-        -14.57, -14.64, -14.69, -14.77, -14.84, -14.84, -14.94, -14.90, -14.89, -14.92,
-        -14.93, -14.97, -14.97, -15.02, -15.02, -15.11, -15.12, -15.16, -15.24, -15.25,
-        -15.26, -15.36, -15.36, -15.37, -15.47, -15.44, -15.51, -15.59, -15.63, -15.71,
-        -15.71, -15.78, -15.84, -15.93, -15.95, -15.99, -16.02, -16.06, -16.11, -16.15,
-        -16.20, -16.20, -16.23, -16.28, -16.30, -16.33, -16.38, -16.41, -16.49, -16.52,
-        -16.52, -16.58, -16.61, -16.61, -16.69, -16.71, -16.78, -16.84, -16.80, -16.88,
-        -16.98, -16.98, -16.99, -17.01, -17.10, -17.09, -17.14, -17.23, -17.20, -17.28,
-        -17.38, -17.40, -17.44, -17.52, -17.60, -17.60, -17.69, -17.72, -17.77, -17.77,
-        -17.82, -17.86, -17.90, -17.94, -17.96, -18.03, -18.05, -18.15, -18.17, -18.22,
-        -18.31, -18.38, -18.46, -18.56, -18.65, -18.71, -18.78, -18.80, -18.84, -18.85,
-        -18.89, -18.93, -18.97, -19.03, -19.03, -19.09, -19.16, -19.23, -19.33, -19.41,
-        -19.46, -19.52, -19.60, -19.66, -19.69, -19.76, -19.83, -19.85, -19.90, -19.97,
-        -20.02, -20.07, -20.10, -20.15, -20.22, -20.32, -20.40, -20.46, -20.42, -20.50,
-        -20.57, -20.65, -20.64, -20.68, -20.78, -20.87, -20.87, -20.90, -20.99, -21.04,
-        -21.05, -21.12, -21.22, -21.30, -21.40, -21.49, -21.55, -21.64, -21.70, -21.75,
-        -21.85, -21.89, -21.91, -22.00, -22.08, -22.08, -22.15, -22.23, -22.28, -22.28,
-        -22.37, -22.42, -22.51, -22.49, -22.57, -22.62, -22.69, -22.70, -22.74, -22.79,
-        -22.77, -22.83, -22.86, -22.95, -22.97, -23.02, -23.05, -23.14, -23.20, -23.19,
-        -23.25, -23.32, -23.33, -23.38, -23.46, -23.51, -23.64, -23.72, -23.79, -23.89,
-        -23.98, -24.08, -24.15, -24.24, -24.33, -24.42, -24.51, -24.60, -24.66, -24.76,
-        -24.84, -24.91, -24.99, -25.00, -25.06, -25.13, -25.13, -25.21, -25.31, -25.41,
-        -25.53, -25.61, -25.71, -25.79, -25.85, -25.92, -26.02, -26.08, -26.16, -26.21,
-        -26.21, -26.27, -26.37, -26.43, -26.42, -26.50, -26.60, -26.68, -26.77, -26.83,
-        -26.90, -27.01, -27.08, -27.17, -27.23, -27.31, -27.40, -27.47, -27.59, -27.69,
-        -27.81, -27.92, -27.93, -28.01, -28.02, -28.10, -28.18, -28.21, -28.22, -28.28,
-        -28.27, -28.28, -28.31, -28.30, -28.39, -28.49, -28.54, -28.64, -28.73, -28.81,
-        -28.88, -28.87, -28.96, -29.02, -29.01, -29.04, -29.11, -29.11, -29.17, -29.27,
-        -29.33, -29.34, -29.44, -29.54, -29.63, -29.70, -29.76, -29.82, -29.89, -29.94,
-        -30.01, -30.05, -30.05, -30.13, -30.16, -30.17, -30.27, -30.36, -30.42, -30.49,
-        -30.53, -30.54, -30.59, -30.70, -30.73, -30.75, -30.82, -30.88, -30.92, -30.95,
-        -31.00, -31.01, -31.09, -31.15, -31.22, -31.27, -31.28, -31.35, -31.42, -31.53,
-        -31.63, -31.69, -31.79, -31.89, -31.99, -32.07, -32.14, -32.23, -32.28, -32.32,
-        -32.39, -32.48, -32.52, -32.59, -32.65, -32.71, -32.79, -32.84, -32.92, -32.98,
-        -33.05, -33.12, -33.18, -33.24, -33.20, -33.28, -33.36, -33.38, -33.38, -33.46,
-        -33.52, -33.59, -33.66, -33.73, -33.82, -33.90, -33.98, -34.06, -34.17, -34.25,
-        -34.23, -34.28, -34.36, -34.34, -34.44, -34.51, -34.53, -34.60, -34.67, -34.73,
-        -34.79, -34.85, -34.93, -35.00, -35.03, -35.11, -35.20, -35.26, -35.26, -35.35,
-        -35.46, -35.53, -35.60, -35.65, -35.71, -35.80, -35.86, -35.92, -35.99, -36.07,
-        -36.14, -36.21, -36.29, -36.38, -36.47, -36.56, -36.64, -36.64, -36.73, -36.79,
-        -36.82, -36.92, -36.99, -37.04, -37.13, -37.20, -37.28, -37.36, -37.41, -37.49,
-        -37.58, -37.65, -37.69, -37.79, -37.86, -37.94, -38.02, -38.07, -38.13, -38.20,
-        -38.28, -38.35, -38.43, -38.48, -38.55, -38.63, -38.70, -38.78, -38.91, -38.98,
-        -39.07, -39.17, -39.23, -39.30, -39.33, -39.36, -39.44, -39.45, -39.48, -39.53,
-        -39.59, -39.63, -39.68, -39.74, -39.81, -39.90, -39.99, -40.08, -40.16, -40.26,
-        -40.33, -40.35, -40.42, -40.50, -40.57, -40.60, -40.69, -40.77, -40.82, -40.86,
-        -40.95, -41.01, -41.04, -41.12, -41.19, -41.26, -41.29, -41.36, -41.43, -41.51,
-        -41.47, -41.53, -41.60, -41.67, -41.74, -41.75, -41.75, -41.84, -41.90, -41.98,
-        -42.05, -42.15, -42.23, -42.30, -42.37, -42.43, -42.48, -42.54, -42.60, -42.65,
-        -42.73, -42.80, -42.84, -42.93, -43.03, -43.10, -43.18, -43.25, -43.34, -43.42,
-        -43.47, -43.51, -43.59, -43.64, -43.67, -43.75, -43.84, -43.89, -43.94, -44.03,
-        -44.12, -44.17, -44.24, -44.29, -44.33, -44.42, -44.48, -44.55, -44.59, -44.65,
-        -44.72, -44.77, -44.86, -44.87, -44.97, -45.04, -45.09, -45.16, -45.21, -45.30,
-        -45.35, -45.45, -45.50, -45.57, -45.63, -45.70, -45.74, -45.82, -45.84, -45.92,
-        -45.96, -46.04, -46.11, -46.16, -46.25, -46.32, -46.39, -46.46, -46.53, -46.58,
-        -46.62, -46.68, -46.74, -46.80, -46.87, -46.94, -47.00, -47.08, -47.14, -47.22,
-        -47.30, -47.38, -47.45, -47.51, -47.57, -47.62, -47.65, -47.70, -47.75, -47.81,
-        -47.83, -47.91, -47.99, -48.06, -48.12, -48.21, -48.31, -48.39, -48.49, -48.54,
-        -48.59, -48.67, -48.72, -48.78, -48.83, -48.89, -48.96, -49.01, -49.09, -49.13,
-        -49.22, -49.25, -49.32, -49.37, -49.43, -49.47, -49.55, -49.58, -49.63, -49.69,
-        -49.77, -49.80, -49.83, -49.89, -49.94, -49.98, -50.05, -50.09, -50.17, -50.20,
-        -50.24, -50.27, -50.35, -50.37, -50.40, -50.43, -50.50, -50.52, -50.58, -50.65,
-        -50.70, -50.73, -50.77, -50.82, -50.88, -50.94, -50.97, -50.97, -50.99, -51.06,
-        -51.09, -51.11, -51.15, -51.20, -51.24, -51.26, -51.33, -51.35, -51.39, -51.44,
-        -51.46, -51.51, -51.53, -51.56, -51.61, -51.62, -51.67, -51.68, -51.74, -51.75,
-        -51.78, -51.82, -51.84, -51.83, -51.87, -51.87, -51.92, -51.92, -51.97, -51.97,
-        -52.06, -52.09, -52.11, -52.12, -52.19, -52.20, -52.22, -52.22, -52.26, -52.26,
-        -52.29, -52.31, -52.32, -52.36, -52.37, -52.41, -52.42, -52.43, -52.48, -52.51,
-        -52.53, -52.60, -52.57, -52.61, -52.63, -52.65, -52.67, -52.69, -52.69, -52.71,
-        -52.70, -52.70, -52.73, -52.73, -52.74, -52.80, -52.81, -52.86, -52.85, -52.89,
-        -52.96, -53.02, -53.08, -53.12, -53.13, -53.13, -53.13, -53.14, -53.16, -53.19,
-        -53.20, -53.24, -53.26, -53.26, -53.26, -53.26, -53.27, -53.27, -53.27, -53.27,
-        -53.27, -53.28, -53.27, -53.25, -53.25, -53.23, -53.23, -53.23, -53.20, -53.20,
-        -53.18, -53.18, -53.13, -53.12, -53.12, -53.11, -53.11, -53.11, -53.11, -53.11,
-        -53.10, -53.11, -53.13, -53.13, -53.13, -53.08, -53.05, -53.02, -53.01, -53.01,
-        -52.98, -52.95, -52.93, -52.89, -52.89, -52.86, -52.84, -52.87, -52.81, -52.78,
-        -52.77, -52.77, -52.76, -52.76, -52.76, -52.75, -52.77, -52.67, -52.65, -52.66,
-        -52.67, -52.57, -52.56, -52.55, -52.56, -52.57, -52.57, -52.59, -52.59, -52.57,
-        -52.57, -52.51, -52.45, -52.46, -52.36, -52.36, -52.36, -52.36, -52.36, -52.36,
-        -52.36, -52.38, -52.37, -52.36, -52.37, -52.36, -52.36, -52.36, -52.36, -52.36,
-        -52.37, -52.32, -52.33, -52.37, -52.33, -52.35, -52.42, -52.42, -52.42, -52.42,
-        -52.42, -52.41, -52.42, -52.42, -52.41, -52.42, -52.41, -52.42, -52.44, -52.42,
-        -52.43, -52.45, -52.46, -52.47, -52.42, -52.39, -52.41, -52.38, -52.35, -52.36,
-        -52.37, -52.38, -52.39, -52.40, -52.42, -52.45, -52.46, -52.48, -52.48, -52.48,
-        -52.52, -52.52, -52.51, -52.47, -52.47, -52.42, -52.44, -52.49, -52.57, -52.62,
-        -52.64, -52.67, -52.68, -52.58, -52.60, -52.67, -52.63, -52.61, -52.63, -52.66,
-        -52.68, -52.70, -52.73, -52.75, -52.79, -52.77, -52.74, -52.77, -52.77, -52.77,
-        -52.81, -52.83, -52.89, -52.92, -52.88, -52.91, -52.99, -53.04, -53.01, -53.03,
-        -53.03, -53.09, -53.10, -53.11, -53.12, -53.05, -53.02, -53.08, -53.09, -53.16,
-        -53.19, -53.23, -53.26, -53.33, -53.35, -53.34, -53.33, -53.38, -53.32, -53.38,
-        -53.35, -53.36, -53.39, -53.35, -53.38, -53.31, -53.35, -53.36, -53.36, -53.37,
-        -53.39, -53.42, -53.43, -53.44, -53.50, -53.45, -53.46, -53.49, -53.47, -53.51,
-        -53.58, -53.63, -53.68, -53.73, -53.76, -53.78, -53.76, -53.78, -53.78, -53.77,
-        -53.77, -53.80, -53.78, -53.79, -53.79, -53.75, -53.79, -53.79, -53.77, -53.85,
-        -53.84, -53.84, -53.87, -53.83, -53.79, -53.79, -53.80, -53.85, -53.82, -53.82,
-        -53.78, -53.75, -53.70, -53.65, -53.61, -53.61, -53.56, -53.57, -53.57, -53.51,
-        -53.47, -53.43, -53.40, -53.31, -53.32, -53.23, -53.13, -53.03, -53.04, -52.98,
-        -52.88, -52.88, -52.83, -52.78, -52.78, -52.72, -52.70, -52.70, -52.65, -52.64,
-        -52.68, -52.59, -52.64, -52.62, -52.57, -52.56, -52.50, -52.50, -52.48, -52.43,
-        -52.38, -52.39, -52.37, -52.35, -52.32, -52.29, -52.27, -52.25, -52.20, -52.16,
-        -52.15, -52.11, -52.05, -52.04, -51.95, -51.91, -51.85, -51.79, -51.80, -51.81,
-        -51.81, -51.80, -51.81, -51.82, -51.72, -51.72, -51.71, -51.60, -51.60, -51.60,
-        -51.62, -51.61, -51.62, -51.62, -51.63, -51.61, -51.60, -51.60, -51.60, -51.59,
-        -51.55, -51.48, -51.48, -51.44, -51.36, -51.34, -51.36, -51.35, -51.35, -51.30,
-        -51.30, -51.29, -51.25, -51.25, -51.25, -51.23, -51.23, -51.23, -51.21, -51.16,
-        -51.12, -51.12, -51.14, -51.11, -51.10, -51.07, -51.05, -51.06, -51.04, -51.02,
-        -50.99, -50.97, -50.96, -50.96, -50.95, -50.93, -50.94, -50.91, -50.93, -50.92,
-        -50.94, -50.95, -50.93, -50.98, -50.96, -50.95, -50.97, -50.96, -50.90, -50.85,
-        -50.84, -50.85, -50.90, -50.89, -50.91, -50.89, -50.88, -51.02, -50.97, -50.93,
-        -50.89, -50.84, -51.02, -51.00, -50.99, -51.06, -51.08, -51.09, -51.11, -51.24,
-        -51.27, -51.22, -51.29, -51.33, -51.40, -51.52, -51.60, -51.61, -51.68, -51.82,
-        -51.85, -51.86, -51.83, -51.90, -51.94, -51.97, -52.00, -52.03, -52.10, -52.18,
-        -52.27, -52.15, -52.26, -52.31, -52.28, -52.20, -52.13, -52.22, -52.32, -52.33,
-        -52.39, -52.35, -52.39, -52.41, -52.68, -52.60, -52.53, -52.53, -52.85, -52.80,
-        -52.79, -52.82, -52.86, -52.92, -52.97, -52.96, -52.94, -52.94, -52.99, -52.97,
-        -52.95, -52.99, -52.92, -52.92, -52.94, -52.94, -52.91, -52.89, -52.89, -52.92,
-        -52.90, -52.85, -52.85, -52.80, -52.76, -52.74, -52.74, -52.70, -52.64, -52.62,
-        -52.60, -52.56, -52.58, -52.55, -52.58, -52.53, -52.58, -52.55, -52.56, -52.55,
-        -52.59, -52.57, -52.55, -52.48, -52.49, -52.47, -52.48, -52.51, -52.47, -52.43,
-        -52.39, -52.34, -52.30, -52.25, -52.30, -52.25, -52.26, -52.31, -52.28, -52.26,
-        -52.23, -52.21, -52.19, -52.17, -52.15, -52.13, -52.12, -52.09, -52.07, -52.06,
-        -52.01, -52.09, -52.09, -52.10, -52.15, -52.13, -52.08, -52.06, -52.03, -52.01,
-        -52.02, -52.04, -52.07, -52.08, -52.07, -52.03, -52.00, -51.96, -51.94, -51.94,
-        -51.96, -51.99, -52.01, -52.04, -52.04, -52.04, -52.04, -52.04, -52.04, -52.04,
-        -52.04, -52.06, -52.09, -52.12, -52.15, -52.15, -52.16, -52.16, -52.18, -52.18,
-        -52.21, -52.21, -52.20, -52.26, -52.26, -52.30, -52.36, -52.36, -52.41, -52.40,
-        -52.42, -52.41, -52.49, -52.48, -52.54, -52.57, -52.57, -52.55, -52.60, -52.65,
-        -52.67, -52.67, -52.66, -52.63, -52.64, -52.68, -52.73, -52.70, -52.71, -52.79,
-        -52.82, -52.78, -52.75, -52.72, -52.72, -52.75, -52.71, -52.69, -52.61, -52.58,
-        -52.53, -52.51, -52.50, -52.45, -52.38, -52.45, -52.45, -52.50, -52.56, -52.53,
-        -52.47, -52.47, -52.38, -52.34, -52.27, -52.23, -52.21, -52.18, -52.09, -52.10,
-        -52.13, -52.06, -52.00, -51.96, -51.90, -51.82, -51.74, -51.75, -51.78, -51.78,
-        -51.76, -51.70, -51.71, -51.66, -51.61, -51.54, -51.49, -51.46, -51.38, -51.36,
-        -51.26, -51.14, -51.09, -50.97, -50.93, -50.87, -50.84, -50.86
+        -1216, -1218, -1219, -1223, -1229,
+        -1238, -1241, -1247, -1248, -1257, -1259, -1266, -1268, -1272, -1275,
+        -1275, -1279, -1279, -1285, -1288, -1291, -1294, -1299, -1303, -1307,
+        -1310, -1312, -1319, -1321, -1325, -1331, -1333, -1339, -1344, -1350,
+        -1348, -1358, -1365, -1370, -1375, -1380, -1382, -1384, -1390, -1391,
+        -1399, -1409, -1410, -1417, -1422, -1429, -1434, -1441, -1448, -1454,
+        -1457, -1464, -1469, -1477, -1484, -1484, -1494, -1490, -1489, -1492,
+        -1493, -1497, -1497, -1502, -1502, -1511, -1512, -1516, -1524, -1525,
+        -1526, -1536, -1536, -1537, -1547, -1544, -1551, -1559, -1563, -1571,
+        -1571, -1578, -1584, -1593, -1595, -1599, -1602, -1606, -1611, -1615,
+        -1620, -1620, -1623, -1628, -1630, -1633, -1638, -1641, -1649, -1652,
+        -1652, -1658, -1661, -1661, -1669, -1671, -1678, -1684, -1680, -1688,
+        -1698, -1698, -1699, -1701, -1710, -1709, -1714, -1723, -1720, -1728,
+        -1738, -1740, -1744, -1752, -1760, -1760, -1769, -1772, -1777, -1777,
+        -1782, -1786, -1790, -1794, -1796, -1803, -1805, -1815, -1817, -1822,
+        -1831, -1838, -1846, -1856, -1865, -1871, -1878, -1880, -1884, -1885,
+        -1889, -1893, -1897, -1903, -1903, -1909, -1916, -1923, -1933, -1941,
+        -1946, -1952, -1960, -1966, -1969, -1976, -1983, -1985, -1990, -1997,
+        -2002, -2007, -2010, -2015, -2022, -2032, -2040, -2046, -2042, -2050,
+        -2057, -2065, -2064, -2068, -2078, -2087, -2087, -2090, -2099, -2104,
+        -2105, -2112, -2122, -2130, -2140, -2149, -2155, -2164, -2170, -2175,
+        -2185, -2189, -2191, -2200, -2208, -2208, -2215, -2223, -2228, -2228,
+        -2237, -2242, -2251, -2249, -2257, -2262, -2269, -2270, -2274, -2279,
+        -2277, -2283, -2286, -2295, -2297, -2302, -2305, -2314, -2320, -2319,
+        -2325, -2332, -2333, -2338, -2346, -2351, -2364, -2372, -2379, -2389,
+        -2398, -2408, -2415, -2424, -2433, -2442, -2451, -2460, -2466, -2476,
+        -2484, -2491, -2499, -2500, -2506, -2513, -2513, -2521, -2531, -2541,
+        -2553, -2561, -2571, -2579, -2585, -2592, -2602, -2608, -2616, -2621,
+        -2621, -2627, -2637, -2643, -2642, -2650, -2660, -2668, -2677, -2683,
+        -2690, -2701, -2708, -2717, -2723, -2731, -2740, -2747, -2759, -2769,
+        -2781, -2792, -2793, -2801, -2802, -2810, -2818, -2821, -2822, -2828,
+        -2827, -2828, -2831, -2830, -2839, -2849, -2854, -2864, -2873, -2881,
+        -2888, -2887, -2896, -2902, -2901, -2904, -2911, -2911, -2917, -2927,
+        -2933, -2934, -2944, -2954, -2963, -2970, -2976, -2982, -2989, -2994,
+        -3001, -3005, -3005, -3013, -3016, -3017, -3027, -3036, -3042, -3049,
+        -3053, -3054, -3059, -3070, -3073, -3075, -3082, -3088, -3092, -3095,
+        -3100, -3101, -3109, -3115, -3122, -3127, -3128, -3135, -3142, -3153,
+        -3163, -3169, -3179, -3189, -3199, -3207, -3214, -3223, -3228, -3232,
+        -3239, -3248, -3252, -3259, -3265, -3271, -3279, -3284, -3292, -3298,
+        -3305, -3312, -3318, -3324, -3320, -3328, -3336, -3338, -3338, -3346,
+        -3352, -3359, -3366, -3373, -3382, -3390, -3398, -3406, -3417, -3425,
+        -3423, -3428, -3436, -3434, -3444, -3451, -3453, -3460, -3467, -3473,
+        -3479, -3485, -3493, -3500, -3503, -3511, -3520, -3526, -3526, -3535,
+        -3546, -3553, -3560, -3565, -3571, -3580, -3586, -3592, -3599, -3607,
+        -3614, -3621, -3629, -3638, -3647, -3656, -3664, -3664, -3673, -3679,
+        -3682, -3692, -3699, -3704, -3713, -3720, -3728, -3736, -3741, -3749,
+        -3758, -3765, -3769, -3779, -3786, -3794, -3802, -3807, -3813, -3820,
+        -3828, -3835, -3843, -3848, -3855, -3863, -3870, -3878, -3891, -3898,
+        -3907, -3917, -3923, -3930, -3933, -3936, -3944, -3945, -3948, -3953,
+        -3959, -3963, -3968, -3974, -3981, -3990, -3999, -4008, -4016, -4026,
+        -4033, -4035, -4042, -4050, -4057, -4060, -4069, -4077, -4082, -4086,
+        -4095, -4101, -4104, -4112, -4119, -4126, -4129, -4136, -4143, -4151,
+        -4147, -4153, -4160, -4167, -4174, -4175, -4175, -4184, -4190, -4198,
+        -4205, -4215, -4223, -4230, -4237, -4243, -4248, -4254, -4260, -4265,
+        -4273, -4280, -4284, -4293, -4303, -4310, -4318, -4325, -4334, -4342,
+        -4347, -4351, -4359, -4364, -4367, -4375, -4384, -4389, -4394, -4403,
+        -4412, -4417, -4424, -4429, -4433, -4442, -4448, -4455, -4459, -4465,
+        -4472, -4477, -4486, -4487, -4497, -4504, -4509, -4516, -4521, -4530,
+        -4535, -4545, -4550, -4557, -4563, -4570, -4574, -4582, -4584, -4592,
+        -4596, -4604, -4611, -4616, -4625, -4632, -4639, -4646, -4653, -4658,
+        -4662, -4668, -4674, -4680, -4687, -4694, -4700, -4708, -4714, -4722,
+        -4730, -4738, -4745, -4751, -4757, -4762, -4765, -4770, -4775, -4781,
+        -4783, -4791, -4799, -4806, -4812, -4821, -4831, -4839, -4849, -4854,
+        -4859, -4867, -4872, -4878, -4883, -4889, -4896, -4901, -4909, -4913,
+        -4922, -4925, -4932, -4937, -4943, -4947, -4955, -4958, -4963, -4969,
+        -4977, -4980, -4983, -4989, -4994, -4998, -5005, -5009, -5017, -5020,
+        -5024, -5027, -5035, -5037, -5040, -5043, -5050, -5052, -5058, -5065,
+        -5070, -5073, -5077, -5082, -5088, -5094, -5097, -5097, -5099, -5106,
+        -5109, -5111, -5115, -5120, -5124, -5126, -5133, -5135, -5139, -5144,
+        -5146, -5151, -5153, -5156, -5161, -5162, -5167, -5168, -5174, -5175,
+        -5178, -5182, -5184, -5183, -5187, -5187, -5192, -5192, -5197, -5197,
+        -5206, -5209, -5211, -5212, -5219, -5220, -5222, -5222, -5226, -5226,
+        -5229, -5231, -5232, -5236, -5237, -5241, -5242, -5243, -5248, -5251,
+        -5253, -5260, -5257, -5261, -5263, -5265, -5267, -5269, -5269, -5271,
+        -5270, -5270, -5273, -5273, -5274, -5280, -5281, -5286, -5285, -5289,
+        -5296, -5302, -5308, -5312, -5313, -5313, -5313, -5314, -5316, -5319,
+        -5320, -5324, -5326, -5326, -5326, -5326, -5327, -5327, -5327, -5327,
+        -5327, -5328, -5327, -5325, -5325, -5323, -5323, -5323, -5320, -5320,
+        -5318, -5318, -5313, -5312, -5312, -5311, -5311, -5311, -5311, -5311,
+        -5310, -5311, -5313, -5313, -5313, -5308, -5305, -5302, -5301, -5301,
+        -5298, -5295, -5293, -5289, -5289, -5286, -5284, -5287, -5281, -5278,
+        -5277, -5277, -5276, -5276, -5276, -5275, -5277, -5267, -5265, -5266,
+        -5267, -5257, -5256, -5255, -5256, -5257, -5257, -5259, -5259, -5257,
+        -5257, -5251, -5245, -5246, -5236, -5236, -5236, -5236, -5236, -5236,
+        -5236, -5238, -5237, -5236, -5237, -5236, -5236, -5236, -5236, -5236,
+        -5237, -5232, -5233, -5237, -5233, -5235, -5242, -5242, -5242, -5242,
+        -5242, -5241, -5242, -5242, -5241, -5242, -5241, -5242, -5244, -5242,
+        -5243, -5245, -5246, -5247, -5242, -5239, -5241, -5238, -5235, -5236,
+        -5237, -5238, -5239, -5240, -5242, -5245, -5246, -5248, -5248, -5248,
+        -5252, -5252, -5251, -5247, -5247, -5242, -5244, -5249, -5257, -5262,
+        -5264, -5267, -5268, -5258, -5260, -5267, -5263, -5261, -5263, -5266,
+        -5268, -5270, -5273, -5275, -5279, -5277, -5274, -5277, -5277, -5277,
+        -5281, -5283, -5289, -5292, -5288, -5291, -5299, -5304, -5301, -5303,
+        -5303, -5309, -5310, -5311, -5312, -5305, -5302, -5308, -5309, -5316,
+        -5319, -5323, -5326, -5333, -5335, -5334, -5333, -5338, -5332, -5338,
+        -5335, -5336, -5339, -5335, -5338, -5331, -5335, -5336, -5336, -5337,
+        -5339, -5342, -5343, -5344, -5350, -5345, -5346, -5349, -5347, -5351,
+        -5358, -5363, -5368, -5373, -5376, -5378, -5376, -5378, -5378, -5377,
+        -5377, -5380, -5378, -5379, -5379, -5375, -5379, -5379, -5377, -5385,
+        -5384, -5384, -5387, -5383, -5379, -5379, -5380, -5385, -5382, -5382,
+        -5378, -5375, -5370, -5365, -5361, -5361, -5356, -5357, -5357, -5351,
+        -5347, -5343, -5340, -5331, -5332, -5323, -5313, -5303, -5304, -5298,
+        -5288, -5288, -5283, -5278, -5278, -5272, -5270, -5270, -5265, -5264,
+        -5268, -5259, -5264, -5262, -5257, -5256, -5250, -5250, -5248, -5243,
+        -5238, -5239, -5237, -5235, -5232, -5229, -5227, -5225, -5220, -5216,
+        -5215, -5211, -5205, -5204, -5195, -5191, -5185, -5179, -5180, -5181,
+        -5181, -5180, -5181, -5182, -5172, -5172, -5171, -5160, -5160, -5160,
+        -5162, -5161, -5162, -5162, -5163, -5161, -5160, -5160, -5160, -5159,
+        -5155, -5148, -5148, -5144, -5136, -5134, -5136, -5135, -5135, -5130,
+        -5130, -5129, -5125, -5125, -5125, -5123, -5123, -5123, -5121, -5116,
+        -5112, -5112, -5114, -5111, -5110, -5107, -5105, -5106, -5104, -5102,
+        -5099, -5097, -5096, -5096, -5095, -5093, -5094, -5091, -5093, -5092,
+        -5094, -5095, -5093, -5098, -5096, -5095, -5097, -5096, -5090, -5085,
+        -5084, -5085, -5090, -5089, -5091, -5089, -5088, -5102, -5097, -5093,
+        -5089, -5084, -5102, -5100, -5099, -5106, -5108, -5109, -5111, -5124,
+        -5127, -5122, -5129, -5133, -5140, -5152, -5160, -5161, -5168, -5182,
+        -5185, -5186, -5183, -5190, -5194, -5197, -5200, -5203, -5210, -5218,
+        -5227, -5215, -5226, -5231, -5228, -5220, -5213, -5222, -5232, -5233,
+        -5239, -5235, -5239, -5241, -5268, -5260, -5253, -5253, -5285, -5280,
+        -5279, -5282, -5286, -5292, -5297, -5296, -5294, -5294, -5299, -5297,
+        -5295, -5299, -5292, -5292, -5294, -5294, -5291, -5289, -5289, -5292,
+        -5290, -5285, -5285, -5280, -5276, -5274, -5274, -5270, -5264, -5262,
+        -5260, -5256, -5258, -5255, -5258, -5253, -5258, -5255, -5256, -5255,
+        -5259, -5257, -5255, -5248, -5249, -5247, -5248, -5251, -5247, -5243,
+        -5239, -5234, -5230, -5225, -5230, -5225, -5226, -5231, -5228, -5226,
+        -5223, -5221, -5219, -5217, -5215, -5213, -5212, -5209, -5207, -5206,
+        -5201, -5209, -5209, -5210, -5215, -5213, -5208, -5206, -5203, -5201,
+        -5202, -5204, -5207, -5208, -5207, -5203, -5200, -5196, -5194, -5194,
+        -5196, -5199, -5201, -5204, -5204, -5204, -5204, -5204, -5204, -5204,
+        -5204, -5206, -5209, -5212, -5215, -5215, -5216, -5216, -5218, -5218,
+        -5221, -5221, -5220, -5226, -5226, -5230, -5236, -5236, -5241, -5240,
+        -5242, -5241, -5249, -5248, -5254, -5257, -5257, -5255, -5260, -5265,
+        -5267, -5267, -5266, -5263, -5264, -5268, -5273, -5270, -5271, -5279,
+        -5282, -5278, -5275, -5272, -5272, -5275, -5271, -5269, -5261, -5258,
+        -5253, -5251, -5250, -5245, -5238, -5245, -5245, -5250, -5256, -5253,
+        -5247, -5247, -5238, -5234, -5227, -5223, -5221, -5218, -5209, -5210,
+        -5213, -5206, -5200, -5196, -5190, -5182, -5174, -5175, -5178, -5178,
+        -5176, -5170, -5171, -5166, -5161, -5154, -5149, -5146, -5138, -5136,
+        -5126, -5114, -5109, -5097, -5093, -5087, -5084, -5086
     };
 
-    static const float fletcher_munson_curve_40_phons[1383] =
+    static const int16_t fletcher_munson_curve_40_phons[1383] =
     {
-        -9.16, -9.17, -9.18, -9.19, -9.22,
-        -9.30, -9.32, -9.37, -9.37, -9.46, -9.48, -9.50, -9.51, -9.56, -9.61,
-        -9.58, -9.62, -9.58, -9.63, -9.67, -9.71, -9.72, -9.77, -9.75, -9.76,
-        -9.76, -9.76, -9.81, -9.80, -9.81, -9.83, -9.81, -9.85, -9.90, -9.94,
-        -9.94, -10.00, -10.05, -10.10, -10.15, -10.19, -10.18, -10.20, -10.28, -10.28,
-        -10.34, -10.44, -10.44, -10.50, -10.55, -10.60, -10.64, -10.71, -10.78, -10.83,
-        -10.84, -10.92, -10.97, -11.04, -11.08, -11.05, -11.15, -11.08, -11.10, -11.12,
-        -11.10, -11.13, -11.14, -11.18, -11.18, -11.28, -11.24, -11.28, -11.38, -11.40,
-        -11.38, -11.48, -11.48, -11.50, -11.58, -11.58, -11.68, -11.73, -11.78, -11.88,
-        -11.88, -11.97, -11.98, -12.08, -12.11, -12.17, -12.19, -12.22, -12.28, -12.33,
-        -12.37, -12.37, -12.38, -12.42, -12.42, -12.42, -12.46, -12.44, -12.52, -12.51,
-        -12.52, -12.57, -12.58, -12.58, -12.63, -12.65, -12.71, -12.80, -12.74, -12.82,
-        -12.91, -12.91, -12.95, -12.96, -13.06, -13.05, -13.10, -13.18, -13.15, -13.24,
-        -13.34, -13.37, -13.42, -13.48, -13.54, -13.54, -13.62, -13.67, -13.72, -13.69,
-        -13.72, -13.77, -13.81, -13.84, -13.83, -13.90, -13.92, -14.02, -14.01, -14.07,
-        -14.16, -14.23, -14.31, -14.41, -14.47, -14.52, -14.57, -14.58, -14.61, -14.63,
-        -14.66, -14.66, -14.69, -14.73, -14.72, -14.80, -14.83, -14.92, -15.01, -15.11,
-        -15.17, -15.23, -15.30, -15.39, -15.44, -15.51, -15.57, -15.59, -15.63, -15.70,
-        -15.74, -15.75, -15.81, -15.87, -15.90, -16.00, -16.06, -16.11, -16.11, -16.16,
-        -16.21, -16.31, -16.29, -16.32, -16.42, -16.51, -16.49, -16.52, -16.61, -16.64,
-        -16.64, -16.72, -16.81, -16.84, -16.92, -17.01, -17.04, -17.12, -17.17, -17.23,
-        -17.31, -17.32, -17.32, -17.41, -17.46, -17.44, -17.52, -17.57, -17.62, -17.62,
-        -17.71, -17.73, -17.81, -17.81, -17.89, -17.91, -17.98, -18.00, -18.04, -18.07,
-        -18.04, -18.12, -18.14, -18.23, -18.23, -18.24, -18.26, -18.32, -18.39, -18.38,
-        -18.43, -18.50, -18.48, -18.52, -18.58, -18.63, -18.77, -18.84, -18.88, -18.98,
-        -19.08, -19.17, -19.23, -19.33, -19.42, -19.50, -19.58, -19.65, -19.68, -19.78,
-        -19.86, -19.89, -19.97, -19.97, -20.02, -20.11, -20.11, -20.21, -20.31, -20.41,
-        -20.55, -20.63, -20.75, -20.84, -20.89, -20.95, -21.04, -21.06, -21.16, -21.21,
-        -21.19, -21.25, -21.35, -21.40, -21.39, -21.45, -21.55, -21.64, -21.74, -21.78,
-        -21.86, -21.96, -22.01, -22.11, -22.15, -22.21, -22.31, -22.37, -22.46, -22.56,
-        -22.65, -22.75, -22.74, -22.83, -22.84, -22.92, -23.00, -23.03, -23.05, -23.08,
-        -23.06, -23.03, -23.06, -23.03, -23.12, -23.21, -23.22, -23.32, -23.41, -23.49,
-        -23.56, -23.54, -23.62, -23.66, -23.62, -23.67, -23.72, -23.72, -23.75, -23.84,
-        -23.92, -23.93, -24.03, -24.13, -24.22, -24.27, -24.33, -24.39, -24.43, -24.49,
-        -24.56, -24.58, -24.57, -24.63, -24.66, -24.62, -24.72, -24.80, -24.83, -24.88,
-        -24.89, -24.84, -24.87, -24.97, -25.00, -24.99, -25.07, -25.13, -25.18, -25.22,
-        -25.27, -25.27, -25.35, -25.39, -25.44, -25.47, -25.46, -25.50, -25.56, -25.66,
-        -25.76, -25.80, -25.90, -25.99, -26.10, -26.19, -26.30, -26.39, -26.44, -26.48,
-        -26.57, -26.65, -26.68, -26.77, -26.84, -26.87, -26.96, -27.01, -27.08, -27.12,
-        -27.18, -27.23, -27.28, -27.33, -27.27, -27.33, -27.38, -27.41, -27.38, -27.45,
-        -27.51, -27.57, -27.62, -27.67, -27.77, -27.83, -27.89, -27.97, -28.07, -28.15,
-        -28.12, -28.16, -28.24, -28.19, -28.28, -28.37, -28.39, -28.43, -28.49, -28.54,
-        -28.60, -28.66, -28.73, -28.80, -28.83, -28.91, -28.98, -29.05, -29.04, -29.13,
-        -29.25, -29.34, -29.42, -29.47, -29.51, -29.59, -29.68, -29.73, -29.78, -29.83,
-        -29.88, -29.93, -29.99, -30.08, -30.15, -30.20, -30.27, -30.27, -30.36, -30.41,
-        -30.43, -30.51, -30.55, -30.65, -30.74, -30.78, -30.84, -30.95, -30.99, -31.05,
-        -31.14, -31.19, -31.25, -31.35, -31.40, -31.46, -31.55, -31.57, -31.63, -31.67,
-        -31.74, -31.77, -31.86, -31.89, -31.98, -32.03, -32.08, -32.14, -32.24, -32.30,
-        -32.34, -32.43, -32.47, -32.52, -32.53, -32.52, -32.59, -32.56, -32.58, -32.59,
-        -32.63, -32.65, -32.69, -32.73, -32.78, -32.88, -32.97, -33.07, -33.08, -33.18,
-        -33.23, -33.27, -33.32, -33.38, -33.43, -33.49, -33.56, -33.62, -33.67, -33.72,
-        -33.78, -33.82, -33.87, -33.92, -33.97, -34.02, -34.07, -34.12, -34.17, -34.25,
-        -34.17, -34.26, -34.32, -34.37, -34.42, -34.42, -34.42, -34.51, -34.54, -34.62,
-        -34.65, -34.73, -34.79, -34.86, -34.91, -34.98, -35.03, -35.09, -35.14, -35.18,
-        -35.24, -35.29, -35.35, -35.42, -35.51, -35.56, -35.63, -35.67, -35.72, -35.78,
-        -35.81, -35.89, -35.93, -35.98, -36.02, -36.08, -36.17, -36.25, -36.27, -36.36,
-        -36.45, -36.47, -36.54, -36.59, -36.59, -36.68, -36.69, -36.74, -36.79, -36.84,
-        -36.89, -36.90, -36.99, -37.00, -37.09, -37.14, -37.15, -37.24, -37.25, -37.33,
-        -37.34, -37.43, -37.44, -37.49, -37.55, -37.60, -37.65, -37.73, -37.76, -37.85,
-        -37.87, -37.96, -38.04, -38.06, -38.16, -38.25, -38.29, -38.33, -38.38, -38.38,
-        -38.42, -38.48, -38.54, -38.61, -38.68, -38.74, -38.78, -38.87, -38.96, -39.02,
-        -39.08, -39.17, -39.24, -39.31, -39.35, -39.38, -39.40, -39.45, -39.49, -39.52,
-        -39.56, -39.62, -39.68, -39.73, -39.79, -39.85, -39.91, -39.99, -40.09, -40.15,
-        -40.23, -40.31, -40.39, -40.46, -40.48, -40.54, -40.58, -40.60, -40.67, -40.68,
-        -40.77, -40.78, -40.87, -40.88, -40.94, -40.98, -41.06, -41.11, -41.11, -41.15,
-        -41.27, -41.29, -41.29, -41.38, -41.38, -41.42, -41.48, -41.48, -41.54, -41.59,
-        -41.59, -41.59, -41.68, -41.68, -41.68, -41.69, -41.78, -41.78, -41.84, -41.91,
-        -41.96, -42.01, -42.01, -42.10, -42.14, -42.19, -42.23, -42.20, -42.20, -42.29,
-        -42.30, -42.30, -42.32, -42.39, -42.40, -42.41, -42.49, -42.49, -42.54, -42.58,
-        -42.58, -42.58, -42.59, -42.60, -42.60, -42.62, -42.63, -42.64, -42.68, -42.69,
-        -42.70, -42.73, -42.74, -42.71, -42.73, -42.74, -42.75, -42.75, -42.75, -42.75,
-        -42.83, -42.84, -42.84, -42.85, -42.95, -42.95, -42.95, -42.95, -42.95, -42.95,
-        -42.95, -42.95, -42.95, -42.95, -42.96, -42.96, -42.97, -42.98, -42.98, -43.01,
-        -43.03, -43.05, -43.03, -43.04, -43.04, -43.04, -43.03, -43.03, -43.03, -43.03,
-        -43.00, -42.99, -42.98, -42.98, -42.99, -43.00, -43.01, -43.02, -43.01, -43.03,
-        -43.12, -43.13, -43.22, -43.22, -43.24, -43.24, -43.25, -43.25, -43.25, -43.27,
-        -43.28, -43.29, -43.32, -43.33, -43.33, -43.34, -43.36, -43.36, -43.36, -43.36,
-        -43.36, -43.37, -43.36, -43.32, -43.32, -43.28, -43.28, -43.28, -43.22, -43.22,
-        -43.18, -43.18, -43.13, -43.12, -43.12, -43.11, -43.11, -43.11, -43.11, -43.11,
-        -43.10, -43.11, -43.11, -43.11, -43.11, -43.05, -43.01, -43.00, -42.99, -42.99,
-        -42.96, -42.93, -42.91, -42.92, -42.96, -42.93, -42.91, -42.96, -42.90, -42.87,
-        -42.87, -42.87, -42.87, -42.87, -42.87, -42.88, -42.90, -42.80, -42.77, -42.77,
-        -42.77, -42.67, -42.68, -42.67, -42.67, -42.69, -42.70, -42.72, -42.71, -42.66,
-        -42.66, -42.60, -42.53, -42.55, -42.45, -42.45, -42.45, -42.45, -42.45, -42.45,
-        -42.45, -42.45, -42.40, -42.32, -42.29, -42.26, -42.26, -42.26, -42.26, -42.27,
-        -42.28, -42.23, -42.22, -42.23, -42.19, -42.19, -42.24, -42.24, -42.24, -42.24,
-        -42.24, -42.23, -42.20, -42.19, -42.18, -42.15, -42.13, -42.13, -42.12, -42.10,
-        -42.09, -42.09, -42.08, -42.08, -42.03, -41.98, -41.98, -41.93, -41.87, -41.87,
-        -41.85, -41.84, -41.82, -41.81, -41.82, -41.82, -41.82, -41.82, -41.82, -41.83,
-        -41.82, -41.81, -41.81, -41.79, -41.70, -41.64, -41.64, -41.69, -41.73, -41.79,
-        -41.82, -41.82, -41.81, -41.71, -41.76, -41.80, -41.77, -41.79, -41.79, -41.80,
-        -41.83, -41.83, -41.83, -41.88, -41.92, -41.90, -41.87, -41.91, -41.88, -41.88,
-        -41.90, -41.90, -41.98, -41.98, -41.96, -41.97, -42.06, -42.10, -42.06, -42.09,
-        -42.09, -42.18, -42.18, -42.18, -42.21, -42.13, -42.08, -42.16, -42.18, -42.28,
-        -42.30, -42.35, -42.39, -42.44, -42.48, -42.43, -42.46, -42.47, -42.39, -42.46,
-        -42.41, -42.42, -42.45, -42.38, -42.45, -42.38, -42.39, -42.40, -42.40, -42.41,
-        -42.42, -42.42, -42.42, -42.42, -42.47, -42.45, -42.42, -42.46, -42.46, -42.50,
-        -42.59, -42.65, -42.70, -42.74, -42.80, -42.85, -42.85, -42.85, -42.85, -42.85,
-        -42.86, -42.85, -42.82, -42.82, -42.78, -42.74, -42.77, -42.76, -42.72, -42.77,
-        -42.73, -42.74, -42.78, -42.73, -42.70, -42.69, -42.70, -42.78, -42.77, -42.78,
-        -42.72, -42.71, -42.65, -42.62, -42.58, -42.58, -42.53, -42.53, -42.54, -42.48,
-        -42.45, -42.40, -42.35, -42.25, -42.22, -42.12, -42.01, -41.92, -41.92, -41.86,
-        -41.77, -41.76, -41.71, -41.66, -41.66, -41.60, -41.56, -41.56, -41.49, -41.47,
-        -41.47, -41.39, -41.47, -41.44, -41.38, -41.37, -41.31, -41.36, -41.31, -41.26,
-        -41.22, -41.20, -41.17, -41.15, -41.11, -41.08, -41.04, -41.02, -40.97, -40.93,
-        -40.92, -40.88, -40.82, -40.81, -40.72, -40.67, -40.61, -40.56, -40.56, -40.56,
-        -40.56, -40.56, -40.57, -40.59, -40.50, -40.49, -40.49, -40.39, -40.39, -40.39,
-        -40.38, -40.36, -40.37, -40.39, -40.39, -40.39, -40.38, -40.38, -40.39, -40.37,
-        -40.32, -40.25, -40.24, -40.20, -40.13, -40.08, -40.12, -40.12, -40.12, -40.11,
-        -40.11, -40.11, -40.11, -40.11, -40.11, -40.06, -40.07, -40.06, -40.04, -39.98,
-        -39.98, -39.99, -40.02, -40.00, -39.98, -39.97, -39.96, -39.98, -39.97, -39.94,
-        -39.88, -39.87, -39.89, -39.87, -39.87, -39.86, -39.87, -39.84, -39.83, -39.86,
-        -39.87, -39.92, -39.92, -39.97, -39.97, -39.97, -40.01, -39.99, -39.95, -39.89,
-        -39.86, -39.87, -39.90, -39.88, -39.89, -39.87, -39.86, -40.00, -39.98, -39.96,
-        -39.92, -39.86, -40.10, -40.08, -40.09, -40.17, -40.14, -40.14, -40.11, -40.22,
-        -40.17, -40.10, -40.15, -40.24, -40.34, -40.46, -40.56, -40.58, -40.69, -40.84,
-        -40.88, -40.90, -40.88, -40.94, -40.96, -40.98, -41.02, -41.00, -41.03, -41.08,
-        -41.17, -40.98, -41.08, -41.10, -41.11, -41.06, -41.03, -41.08, -41.16, -41.14,
-        -41.17, -41.18, -41.21, -41.24, -41.49, -41.41, -41.36, -41.36, -41.68, -41.63,
-        -41.63, -41.63, -41.72, -41.73, -41.82, -41.82, -41.77, -41.73, -41.77, -41.73,
-        -41.70, -41.69, -41.60, -41.61, -41.64, -41.68, -41.68, -41.68, -41.69, -41.73,
-        -41.71, -41.68, -41.67, -41.61, -41.57, -41.55, -41.55, -41.52, -41.47, -41.41,
-        -41.41, -41.35, -41.37, -41.32, -41.35, -41.28, -41.32, -41.25, -41.25, -41.25,
-        -41.27, -41.27, -41.27, -41.17, -41.22, -41.19, -41.22, -41.27, -41.23, -41.18,
-        -41.13, -41.08, -41.08, -41.00, -41.05, -40.97, -40.99, -41.01, -40.99, -40.96,
-        -40.93, -40.93, -40.92, -40.90, -40.90, -40.87, -40.84, -40.84, -40.84, -40.82,
-        -40.80, -40.86, -40.86, -40.85, -40.87, -40.83, -40.78, -40.78, -40.78, -40.78,
-        -40.78, -40.81, -40.83, -40.85, -40.81, -40.77, -40.74, -40.70, -40.71, -40.71,
-        -40.73, -40.76, -40.78, -40.80, -40.81, -40.81, -40.81, -40.81, -40.81, -40.81,
-        -40.81, -40.85, -40.90, -40.95, -41.00, -41.01, -41.02, -41.02, -41.02, -41.02,
-        -41.02, -41.02, -41.02, -41.07, -41.07, -41.12, -41.17, -41.17, -41.22, -41.21,
-        -41.21, -41.22, -41.30, -41.33, -41.39, -41.42, -41.44, -41.42, -41.47, -41.52,
-        -41.55, -41.60, -41.62, -41.61, -41.64, -41.68, -41.73, -41.67, -41.68, -41.78,
-        -41.83, -41.81, -41.78, -41.73, -41.73, -41.79, -41.77, -41.76, -41.67, -41.63,
-        -41.58, -41.57, -41.56, -41.55, -41.52, -41.58, -41.60, -41.67, -41.68, -41.64,
-        -41.65, -41.65, -41.55, -41.49, -41.46, -41.46, -41.46, -41.40, -41.33, -41.36,
-        -41.42, -41.32, -41.27, -41.23, -41.16, -41.13, -41.02, -41.04, -41.10, -41.12,
-        -41.12, -41.10, -41.07, -41.00, -40.97, -40.97, -40.93, -40.91, -40.86, -40.83,
-        -40.76, -40.63, -40.53, -40.40, -40.38, -40.30, -40.23, -40.24
+        -916, -917, -918, -919, -922,
+        -930, -932, -937, -937, -946, -948, -950, -951, -956, -961,
+        -958, -962, -958, -963, -967, -971, -972, -977, -975, -976,
+        -976, -976, -981, -980, -981, -983, -981, -985, -990, -994,
+        -994, -1000, -1005, -1010, -1015, -1019, -1018, -1020, -1028, -1028,
+        -1034, -1044, -1044, -1050, -1055, -1060, -1064, -1071, -1078, -1083,
+        -1084, -1092, -1097, -1104, -1108, -1105, -1115, -1108, -1110, -1112,
+        -1110, -1113, -1114, -1118, -1118, -1128, -1124, -1128, -1138, -1140,
+        -1138, -1148, -1148, -1150, -1158, -1158, -1168, -1173, -1178, -1188,
+        -1188, -1197, -1198, -1208, -1211, -1217, -1219, -1222, -1228, -1233,
+        -1237, -1237, -1238, -1242, -1242, -1242, -1246, -1244, -1252, -1251,
+        -1252, -1257, -1258, -1258, -1263, -1265, -1271, -1280, -1274, -1282,
+        -1291, -1291, -1295, -1296, -1306, -1305, -1310, -1318, -1315, -1324,
+        -1334, -1337, -1342, -1348, -1354, -1354, -1362, -1367, -1372, -1369,
+        -1372, -1377, -1381, -1384, -1383, -1390, -1392, -1402, -1401, -1407,
+        -1416, -1423, -1431, -1441, -1447, -1452, -1457, -1458, -1461, -1463,
+        -1466, -1466, -1469, -1473, -1472, -1480, -1483, -1492, -1501, -1511,
+        -1517, -1523, -1530, -1539, -1544, -1551, -1557, -1559, -1563, -1570,
+        -1574, -1575, -1581, -1587, -1590, -1600, -1606, -1611, -1611, -1616,
+        -1621, -1631, -1629, -1632, -1642, -1651, -1649, -1652, -1661, -1664,
+        -1664, -1672, -1681, -1684, -1692, -1701, -1704, -1712, -1717, -1723,
+        -1731, -1732, -1732, -1741, -1746, -1744, -1752, -1757, -1762, -1762,
+        -1771, -1773, -1781, -1781, -1789, -1791, -1798, -1800, -1804, -1807,
+        -1804, -1812, -1814, -1823, -1823, -1824, -1826, -1832, -1839, -1838,
+        -1843, -1850, -1848, -1852, -1858, -1863, -1877, -1884, -1888, -1898,
+        -1908, -1917, -1923, -1933, -1942, -1950, -1958, -1965, -1968, -1978,
+        -1986, -1989, -1997, -1997, -2002, -2011, -2011, -2021, -2031, -2041,
+        -2055, -2063, -2075, -2084, -2089, -2095, -2104, -2106, -2116, -2121,
+        -2119, -2125, -2135, -2140, -2139, -2145, -2155, -2164, -2174, -2178,
+        -2186, -2196, -2201, -2211, -2215, -2221, -2231, -2237, -2246, -2256,
+        -2265, -2275, -2274, -2283, -2284, -2292, -2300, -2303, -2305, -2308,
+        -2306, -2303, -2306, -2303, -2312, -2321, -2322, -2332, -2341, -2349,
+        -2356, -2354, -2362, -2366, -2362, -2367, -2372, -2372, -2375, -2384,
+        -2392, -2393, -2403, -2413, -2422, -2427, -2433, -2439, -2443, -2449,
+        -2456, -2458, -2457, -2463, -2466, -2462, -2472, -2480, -2483, -2488,
+        -2489, -2484, -2487, -2497, -2500, -2499, -2507, -2513, -2518, -2522,
+        -2527, -2527, -2535, -2539, -2544, -2547, -2546, -2550, -2556, -2566,
+        -2576, -2580, -2590, -2599, -2610, -2619, -2630, -2639, -2644, -2648,
+        -2657, -2665, -2668, -2677, -2684, -2687, -2696, -2701, -2708, -2712,
+        -2718, -2723, -2728, -2733, -2727, -2733, -2738, -2741, -2738, -2745,
+        -2751, -2757, -2762, -2767, -2777, -2783, -2789, -2797, -2807, -2815,
+        -2812, -2816, -2824, -2819, -2828, -2837, -2839, -2843, -2849, -2854,
+        -2860, -2866, -2873, -2880, -2883, -2891, -2898, -2905, -2904, -2913,
+        -2925, -2934, -2942, -2947, -2951, -2959, -2968, -2973, -2978, -2983,
+        -2988, -2993, -2999, -3008, -3015, -3020, -3027, -3027, -3036, -3041,
+        -3043, -3051, -3055, -3065, -3074, -3078, -3084, -3095, -3099, -3105,
+        -3114, -3119, -3125, -3135, -3140, -3146, -3155, -3157, -3163, -3167,
+        -3174, -3177, -3186, -3189, -3198, -3203, -3208, -3214, -3224, -3230,
+        -3234, -3243, -3247, -3252, -3253, -3252, -3259, -3256, -3258, -3259,
+        -3263, -3265, -3269, -3273, -3278, -3288, -3297, -3307, -3308, -3318,
+        -3323, -3327, -3332, -3338, -3343, -3349, -3356, -3362, -3367, -3372,
+        -3378, -3382, -3387, -3392, -3397, -3402, -3407, -3412, -3417, -3425,
+        -3417, -3426, -3432, -3437, -3442, -3442, -3442, -3451, -3454, -3462,
+        -3465, -3473, -3479, -3486, -3491, -3498, -3503, -3509, -3514, -3518,
+        -3524, -3529, -3535, -3542, -3551, -3556, -3563, -3567, -3572, -3578,
+        -3581, -3589, -3593, -3598, -3602, -3608, -3617, -3625, -3627, -3636,
+        -3645, -3647, -3654, -3659, -3659, -3668, -3669, -3674, -3679, -3684,
+        -3689, -3690, -3699, -3700, -3709, -3714, -3715, -3724, -3725, -3733,
+        -3734, -3743, -3744, -3749, -3755, -3760, -3765, -3773, -3776, -3785,
+        -3787, -3796, -3804, -3806, -3816, -3825, -3829, -3833, -3838, -3838,
+        -3842, -3848, -3854, -3861, -3868, -3874, -3878, -3887, -3896, -3902,
+        -3908, -3917, -3924, -3931, -3935, -3938, -3940, -3945, -3949, -3952,
+        -3956, -3962, -3968, -3973, -3979, -3985, -3991, -3999, -4009, -4015,
+        -4023, -4031, -4039, -4046, -4048, -4054, -4058, -4060, -4067, -4068,
+        -4077, -4078, -4087, -4088, -4094, -4098, -4106, -4111, -4111, -4115,
+        -4127, -4129, -4129, -4138, -4138, -4142, -4148, -4148, -4154, -4159,
+        -4159, -4159, -4168, -4168, -4168, -4169, -4178, -4178, -4184, -4191,
+        -4196, -4201, -4201, -4210, -4214, -4219, -4223, -4220, -4220, -4229,
+        -4230, -4230, -4232, -4239, -4240, -4241, -4249, -4249, -4254, -4258,
+        -4258, -4258, -4259, -4260, -4260, -4262, -4263, -4264, -4268, -4269,
+        -4270, -4273, -4274, -4271, -4273, -4274, -4275, -4275, -4275, -4275,
+        -4283, -4284, -4284, -4285, -4295, -4295, -4295, -4295, -4295, -4295,
+        -4295, -4295, -4295, -4295, -4296, -4296, -4297, -4298, -4298, -4301,
+        -4303, -4305, -4303, -4304, -4304, -4304, -4303, -4303, -4303, -4303,
+        -4300, -4299, -4298, -4298, -4299, -4300, -4301, -4302, -4301, -4303,
+        -4312, -4313, -4322, -4322, -4324, -4324, -4325, -4325, -4325, -4327,
+        -4328, -4329, -4332, -4333, -4333, -4334, -4336, -4336, -4336, -4336,
+        -4336, -4337, -4336, -4332, -4332, -4328, -4328, -4328, -4322, -4322,
+        -4318, -4318, -4313, -4312, -4312, -4311, -4311, -4311, -4311, -4311,
+        -4310, -4311, -4311, -4311, -4311, -4305, -4301, -4300, -4299, -4299,
+        -4296, -4293, -4291, -4292, -4296, -4293, -4291, -4296, -4290, -4287,
+        -4287, -4287, -4287, -4287, -4287, -4288, -4290, -4280, -4277, -4277,
+        -4277, -4267, -4268, -4267, -4267, -4269, -4270, -4272, -4271, -4266,
+        -4266, -4260, -4253, -4255, -4245, -4245, -4245, -4245, -4245, -4245,
+        -4245, -4245, -4240, -4232, -4229, -4226, -4226, -4226, -4226, -4227,
+        -4228, -4223, -4222, -4223, -4219, -4219, -4224, -4224, -4224, -4224,
+        -4224, -4223, -4220, -4219, -4218, -4215, -4213, -4213, -4212, -4210,
+        -4209, -4209, -4208, -4208, -4203, -4198, -4198, -4193, -4187, -4187,
+        -4185, -4184, -4182, -4181, -4182, -4182, -4182, -4182, -4182, -4183,
+        -4182, -4181, -4181, -4179, -4170, -4164, -4164, -4169, -4173, -4179,
+        -4182, -4182, -4181, -4171, -4176, -4180, -4177, -4179, -4179, -4180,
+        -4183, -4183, -4183, -4188, -4192, -4190, -4187, -4191, -4188, -4188,
+        -4190, -4190, -4198, -4198, -4196, -4197, -4206, -4210, -4206, -4209,
+        -4209, -4218, -4218, -4218, -4221, -4213, -4208, -4216, -4218, -4228,
+        -4230, -4235, -4239, -4244, -4248, -4243, -4246, -4247, -4239, -4246,
+        -4241, -4242, -4245, -4238, -4245, -4238, -4239, -4240, -4240, -4241,
+        -4242, -4242, -4242, -4242, -4247, -4245, -4242, -4246, -4246, -4250,
+        -4259, -4265, -4270, -4274, -4280, -4285, -4285, -4285, -4285, -4285,
+        -4286, -4285, -4282, -4282, -4278, -4274, -4277, -4276, -4272, -4277,
+        -4273, -4274, -4278, -4273, -4270, -4269, -4270, -4278, -4277, -4278,
+        -4272, -4271, -4265, -4262, -4258, -4258, -4253, -4253, -4254, -4248,
+        -4245, -4240, -4235, -4225, -4222, -4212, -4201, -4192, -4192, -4186,
+        -4177, -4176, -4171, -4166, -4166, -4160, -4156, -4156, -4149, -4147,
+        -4147, -4139, -4147, -4144, -4138, -4137, -4131, -4136, -4131, -4126,
+        -4122, -4120, -4117, -4115, -4111, -4108, -4104, -4102, -4097, -4093,
+        -4092, -4088, -4082, -4081, -4072, -4067, -4061, -4056, -4056, -4056,
+        -4056, -4056, -4057, -4059, -4050, -4049, -4049, -4039, -4039, -4039,
+        -4038, -4036, -4037, -4039, -4039, -4039, -4038, -4038, -4039, -4037,
+        -4032, -4025, -4024, -4020, -4013, -4008, -4012, -4012, -4012, -4011,
+        -4011, -4011, -4011, -4011, -4011, -4006, -4007, -4006, -4004, -3998,
+        -3998, -3999, -4002, -4000, -3998, -3997, -3996, -3998, -3997, -3994,
+        -3988, -3987, -3989, -3987, -3987, -3986, -3987, -3984, -3983, -3986,
+        -3987, -3992, -3992, -3997, -3997, -3997, -4001, -3999, -3995, -3989,
+        -3986, -3987, -3990, -3988, -3989, -3987, -3986, -4000, -3998, -3996,
+        -3992, -3986, -4010, -4008, -4009, -4017, -4014, -4014, -4011, -4022,
+        -4017, -4010, -4015, -4024, -4034, -4046, -4056, -4058, -4069, -4084,
+        -4088, -4090, -4088, -4094, -4096, -4098, -4102, -4100, -4103, -4108,
+        -4117, -4098, -4108, -4110, -4111, -4106, -4103, -4108, -4116, -4114,
+        -4117, -4118, -4121, -4124, -4149, -4141, -4136, -4136, -4168, -4163,
+        -4163, -4163, -4172, -4173, -4182, -4182, -4177, -4173, -4177, -4173,
+        -4170, -4169, -4160, -4161, -4164, -4168, -4168, -4168, -4169, -4173,
+        -4171, -4168, -4167, -4161, -4157, -4155, -4155, -4152, -4147, -4141,
+        -4141, -4135, -4137, -4132, -4135, -4128, -4132, -4125, -4125, -4125,
+        -4127, -4127, -4127, -4117, -4122, -4119, -4122, -4127, -4123, -4118,
+        -4113, -4108, -4108, -4100, -4105, -4097, -4099, -4101, -4099, -4096,
+        -4093, -4093, -4092, -4090, -4090, -4087, -4084, -4084, -4084, -4082,
+        -4080, -4086, -4086, -4085, -4087, -4083, -4078, -4078, -4078, -4078,
+        -4078, -4081, -4083, -4085, -4081, -4077, -4074, -4070, -4071, -4071,
+        -4073, -4076, -4078, -4080, -4081, -4081, -4081, -4081, -4081, -4081,
+        -4081, -4085, -4090, -4095, -4100, -4101, -4102, -4102, -4102, -4102,
+        -4102, -4102, -4102, -4107, -4107, -4112, -4117, -4117, -4122, -4121,
+        -4121, -4122, -4130, -4133, -4139, -4142, -4144, -4142, -4147, -4152,
+        -4155, -4160, -4162, -4161, -4164, -4168, -4173, -4167, -4168, -4178,
+        -4183, -4181, -4178, -4173, -4173, -4179, -4177, -4176, -4167, -4163,
+        -4158, -4157, -4156, -4155, -4152, -4158, -4160, -4167, -4168, -4164,
+        -4165, -4165, -4155, -4149, -4146, -4146, -4146, -4140, -4133, -4136,
+        -4142, -4132, -4127, -4123, -4116, -4113, -4102, -4104, -4110, -4112,
+        -4112, -4110, -4107, -4100, -4097, -4097, -4093, -4091, -4086, -4083,
+        -4076, -4063, -4053, -4040, -4038, -4030, -4023, -4024
     };
 
-    static const float fletcher_munson_curve_50_phons[1383] =
+    static const int16_t fletcher_munson_curve_50_phons[1383] =
     {
-        -7.17, -7.18, -7.19, -7.21, -7.21,
-        -7.29, -7.31, -7.33, -7.34, -7.43, -7.40, -7.45, -7.47, -7.49, -7.53,
-        -7.54, -7.55, -7.54, -7.60, -7.61, -7.64, -7.64, -7.67, -7.65, -7.65,
-        -7.66, -7.64, -7.68, -7.66, -7.67, -7.67, -7.66, -7.68, -7.70, -7.77,
-        -7.75, -7.81, -7.85, -7.89, -7.91, -7.98, -7.97, -7.96, -8.03, -8.03,
-        -8.06, -8.15, -8.14, -8.21, -8.22, -8.28, -8.31, -8.36, -8.41, -8.46,
-        -8.47, -8.53, -8.57, -8.64, -8.69, -8.67, -8.75, -8.67, -8.69, -8.68,
-        -8.67, -8.69, -8.68, -8.74, -8.72, -8.79, -8.77, -8.79, -8.87, -8.90,
-        -8.89, -8.97, -8.95, -8.98, -9.07, -9.05, -9.12, -9.17, -9.23, -9.30,
-        -9.27, -9.35, -9.38, -9.45, -9.47, -9.53, -9.53, -9.55, -9.59, -9.61,
-        -9.67, -9.65, -9.68, -9.70, -9.70, -9.70, -9.72, -9.75, -9.79, -9.81,
-        -9.78, -9.83, -9.84, -9.82, -9.87, -9.87, -9.93, -9.99, -9.95, -10.03,
-        -10.10, -10.08, -10.10, -10.11, -10.19, -10.16, -10.20, -10.26, -10.23, -10.30,
-        -10.37, -10.38, -10.41, -10.47, -10.52, -10.50, -10.56, -10.59, -10.61, -10.59,
-        -10.61, -10.67, -10.69, -10.70, -10.72, -10.80, -10.80, -10.87, -10.87, -10.89,
-        -10.97, -11.00, -11.07, -11.14, -11.20, -11.25, -11.28, -11.29, -11.32, -11.34,
-        -11.35, -11.37, -11.38, -11.43, -11.41, -11.47, -11.49, -11.58, -11.65, -11.73,
-        -11.78, -11.81, -11.88, -11.94, -11.97, -12.04, -12.09, -12.10, -12.14, -12.19,
-        -12.23, -12.26, -12.29, -12.34, -12.39, -12.47, -12.52, -12.59, -12.56, -12.62,
-        -12.68, -12.75, -12.73, -12.76, -12.86, -12.93, -12.93, -12.93, -13.01, -13.05,
-        -13.03, -13.09, -13.17, -13.20, -13.28, -13.34, -13.38, -13.44, -13.48, -13.55,
-        -13.59, -13.61, -13.60, -13.67, -13.76, -13.75, -13.78, -13.85, -13.88, -13.85,
-        -13.92, -13.93, -13.99, -13.97, -14.01, -14.07, -14.10, -14.09, -14.11, -14.12,
-        -14.11, -14.17, -14.17, -14.25, -14.24, -14.27, -14.26, -14.31, -14.35, -14.34,
-        -14.38, -14.42, -14.43, -14.44, -14.51, -14.54, -14.66, -14.73, -14.77, -14.84,
-        -14.92, -15.00, -15.05, -15.13, -15.20, -15.26, -15.34, -15.39, -15.43, -15.51,
-        -15.55, -15.62, -15.66, -15.64, -15.68, -15.75, -15.73, -15.80, -15.88, -15.96,
-        -16.08, -16.13, -16.23, -16.28, -16.33, -16.38, -16.48, -16.49, -16.59, -16.62,
-        -16.62, -16.65, -16.74, -16.78, -16.76, -16.80, -16.89, -16.95, -17.04, -17.08,
-        -17.15, -17.25, -17.31, -17.38, -17.40, -17.48, -17.54, -17.57, -17.66, -17.71,
-        -17.78, -17.85, -17.83, -17.90, -17.91, -17.96, -18.03, -18.03, -18.04, -18.08,
-        -18.04, -18.03, -18.02, -18.02, -18.08, -18.17, -18.18, -18.27, -18.33, -18.41,
-        -18.45, -18.44, -18.50, -18.54, -18.51, -18.56, -18.61, -18.58, -18.62, -18.73,
-        -18.79, -18.79, -18.88, -18.97, -19.02, -19.09, -19.12, -19.19, -19.23, -19.25,
-        -19.34, -19.34, -19.30, -19.38, -19.37, -19.34, -19.42, -19.49, -19.53, -19.58,
-        -19.60, -19.56, -19.57, -19.65, -19.64, -19.65, -19.70, -19.73, -19.75, -19.80,
-        -19.82, -19.81, -19.84, -19.91, -19.94, -19.96, -19.96, -19.98, -20.03, -20.11,
-        -20.20, -20.25, -20.33, -20.40, -20.49, -20.55, -20.65, -20.70, -20.73, -20.75,
-        -20.80, -20.89, -20.90, -20.95, -20.98, -21.03, -21.10, -21.15, -21.23, -21.27,
-        -21.33, -21.36, -21.42, -21.46, -21.38, -21.43, -21.47, -21.49, -21.44, -21.50,
-        -21.55, -21.60, -21.66, -21.69, -21.79, -21.82, -21.90, -21.94, -22.04, -22.11,
-        -22.04, -22.06, -22.10, -22.03, -22.09, -22.16, -22.18, -22.23, -22.30, -22.33,
-        -22.39, -22.44, -22.50, -22.55, -22.53, -22.59, -22.65, -22.68, -22.66, -22.73,
-        -22.79, -22.83, -22.92, -22.93, -22.95, -23.02, -23.08, -23.11, -23.16, -23.21,
-        -23.24, -23.29, -23.34, -23.39, -23.46, -23.50, -23.53, -23.49, -23.54, -23.57,
-        -23.57, -23.63, -23.67, -23.75, -23.80, -23.87, -23.90, -24.01, -24.03, -24.11,
-        -24.16, -24.21, -24.26, -24.35, -24.39, -24.45, -24.52, -24.58, -24.63, -24.67,
-        -24.74, -24.78, -24.85, -24.90, -24.97, -25.02, -25.07, -25.13, -25.23, -25.26,
-        -25.33, -25.38, -25.42, -25.46, -25.46, -25.48, -25.52, -25.52, -25.51, -25.54,
-        -25.57, -25.57, -25.62, -25.65, -25.68, -25.73, -25.80, -25.86, -25.92, -25.99,
-        -26.01, -26.04, -26.06, -26.11, -26.17, -26.20, -26.28, -26.31, -26.36, -26.39,
-        -26.47, -26.49, -26.52, -26.58, -26.62, -26.65, -26.69, -26.72, -26.78, -26.81,
-        -26.74, -26.80, -26.85, -26.87, -26.90, -26.85, -26.82, -26.91, -26.93, -26.97,
-        -26.99, -27.08, -27.11, -27.14, -27.17, -27.21, -27.23, -27.26, -27.28, -27.31,
-        -27.39, -27.42, -27.46, -27.54, -27.59, -27.62, -27.66, -27.68, -27.70, -27.78,
-        -27.80, -27.83, -27.90, -27.92, -27.94, -28.01, -28.06, -28.12, -28.16, -28.21,
-        -28.26, -28.27, -28.30, -28.32, -28.33, -28.37, -28.43, -28.45, -28.50, -28.55,
-        -28.59, -28.61, -28.66, -28.69, -28.76, -28.78, -28.80, -28.86, -28.89, -28.93,
-        -28.95, -29.03, -29.04, -29.07, -29.14, -29.17, -29.25, -29.32, -29.35, -29.42,
-        -29.48, -29.53, -29.58, -29.59, -29.68, -29.73, -29.75, -29.77, -29.80, -29.80,
-        -29.82, -29.88, -29.93, -29.98, -30.02, -30.10, -30.13, -30.18, -30.22, -30.30,
-        -30.33, -30.38, -30.42, -30.50, -30.52, -30.52, -30.52, -30.60, -30.61, -30.62,
-        -30.63, -30.70, -30.75, -30.78, -30.82, -30.90, -30.93, -30.97, -31.07, -31.11,
-        -31.17, -31.21, -31.30, -31.33, -31.35, -31.40, -31.45, -31.46, -31.50, -31.53,
-        -31.59, -31.60, -31.65, -31.66, -31.70, -31.72, -31.77, -31.81, -31.81, -31.82,
-        -31.87, -31.88, -31.88, -31.93, -31.93, -32.00, -32.03, -32.03, -32.11, -32.14,
-        -32.14, -32.14, -32.18, -32.18, -32.18, -32.19, -32.23, -32.23, -32.27, -32.32,
-        -32.35, -32.37, -32.37, -32.42, -32.46, -32.49, -32.50, -32.47, -32.47, -32.52,
-        -32.57, -32.57, -32.58, -32.62, -32.67, -32.68, -32.72, -32.72, -32.74, -32.76,
-        -32.76, -32.76, -32.77, -32.77, -32.79, -32.81, -32.82, -32.82, -32.86, -32.88,
-        -32.90, -32.92, -32.92, -32.89, -32.92, -32.93, -32.95, -32.95, -32.95, -32.95,
-        -33.02, -33.03, -33.03, -33.03, -33.13, -33.13, -33.13, -33.13, -33.13, -33.13,
-        -33.13, -33.13, -33.13, -33.14, -33.19, -33.19, -33.22, -33.25, -33.25, -33.29,
-        -33.30, -33.33, -33.31, -33.33, -33.33, -33.33, -33.33, -33.33, -33.33, -33.33,
-        -33.30, -33.29, -33.26, -33.26, -33.27, -33.28, -33.29, -33.29, -33.29, -33.28,
-        -33.36, -33.38, -33.42, -33.41, -33.40, -33.38, -33.39, -33.39, -33.39, -33.39,
-        -33.38, -33.38, -33.37, -33.37, -33.37, -33.36, -33.36, -33.37, -33.37, -33.36,
-        -33.37, -33.37, -33.36, -33.34, -33.34, -33.32, -33.32, -33.32, -33.27, -33.27,
-        -33.25, -33.25, -33.19, -33.17, -33.16, -33.13, -33.13, -33.11, -33.11, -33.11,
-        -33.10, -33.11, -33.13, -33.11, -33.11, -33.05, -33.03, -33.00, -32.99, -32.98,
-        -32.94, -32.86, -32.84, -32.83, -32.85, -32.82, -32.80, -32.82, -32.76, -32.78,
-        -32.78, -32.81, -32.81, -32.81, -32.81, -32.81, -32.82, -32.72, -32.68, -32.68,
-        -32.69, -32.60, -32.60, -32.60, -32.59, -32.60, -32.61, -32.60, -32.59, -32.57,
-        -32.56, -32.51, -32.45, -32.46, -32.36, -32.36, -32.36, -32.36, -32.36, -32.36,
-        -32.36, -32.36, -32.33, -32.29, -32.28, -32.26, -32.26, -32.26, -32.26, -32.27,
-        -32.32, -32.27, -32.27, -32.32, -32.28, -32.28, -32.33, -32.33, -32.33, -32.33,
-        -32.33, -32.32, -32.29, -32.28, -32.27, -32.24, -32.23, -32.23, -32.21, -32.19,
-        -32.18, -32.18, -32.17, -32.17, -32.13, -32.07, -32.07, -32.02, -31.96, -31.96,
-        -31.96, -31.97, -31.96, -31.92, -31.91, -31.91, -31.91, -31.91, -31.89, -31.88,
-        -31.86, -31.85, -31.85, -31.81, -31.72, -31.65, -31.64, -31.66, -31.68, -31.71,
-        -31.73, -31.73, -31.72, -31.62, -31.64, -31.67, -31.62, -31.61, -31.61, -31.61,
-        -31.63, -31.63, -31.63, -31.65, -31.67, -31.63, -31.58, -31.59, -31.56, -31.53,
-        -31.54, -31.53, -31.57, -31.57, -31.51, -31.52, -31.56, -31.58, -31.53, -31.52,
-        -31.52, -31.57, -31.57, -31.56, -31.57, -31.49, -31.44, -31.48, -31.49, -31.54,
-        -31.55, -31.57, -31.59, -31.62, -31.62, -31.56, -31.56, -31.57, -31.50, -31.55,
-        -31.50, -31.48, -31.50, -31.46, -31.49, -31.41, -31.42, -31.47, -31.47, -31.50,
-        -31.53, -31.53, -31.56, -31.56, -31.58, -31.53, -31.50, -31.54, -31.53, -31.54,
-        -31.59, -31.67, -31.69, -31.72, -31.77, -31.82, -31.81, -31.82, -31.82, -31.84,
-        -31.85, -31.84, -31.84, -31.86, -31.83, -31.79, -31.83, -31.82, -31.79, -31.84,
-        -31.82, -31.81, -31.86, -31.82, -31.80, -31.82, -31.85, -31.89, -31.89, -31.89,
-        -31.83, -31.83, -31.78, -31.73, -31.71, -31.71, -31.68, -31.69, -31.72, -31.66,
-        -31.65, -31.63, -31.59, -31.52, -31.50, -31.44, -31.35, -31.26, -31.28, -31.23,
-        -31.13, -31.12, -31.07, -31.02, -31.02, -30.96, -30.94, -30.97, -30.92, -30.92,
-        -30.95, -30.88, -30.95, -30.93, -30.88, -30.87, -30.81, -30.81, -30.76, -30.71,
-        -30.67, -30.68, -30.67, -30.66, -30.66, -30.62, -30.58, -30.56, -30.52, -30.47,
-        -30.46, -30.42, -30.36, -30.35, -30.26, -30.22, -30.15, -30.10, -30.10, -30.10,
-        -30.10, -30.10, -30.11, -30.11, -30.02, -30.01, -30.01, -29.92, -29.93, -29.93,
-        -29.93, -29.92, -29.93, -29.94, -29.94, -29.94, -29.93, -29.93, -29.94, -29.92,
-        -29.88, -29.81, -29.80, -29.76, -29.66, -29.63, -29.63, -29.62, -29.62, -29.59,
-        -29.58, -29.56, -29.56, -29.56, -29.56, -29.54, -29.54, -29.54, -29.52, -29.50,
-        -29.50, -29.51, -29.54, -29.53, -29.52, -29.52, -29.52, -29.51, -29.49, -29.46,
-        -29.41, -29.41, -29.43, -29.41, -29.42, -29.40, -29.41, -29.40, -29.42, -29.41,
-        -29.42, -29.47, -29.47, -29.51, -29.49, -29.49, -29.51, -29.47, -29.43, -29.38,
-        -29.36, -29.37, -29.39, -29.38, -29.38, -29.37, -29.38, -29.49, -29.47, -29.45,
-        -29.43, -29.40, -29.60, -29.60, -29.60, -29.59, -29.53, -29.53, -29.52, -29.61,
-        -29.60, -29.55, -29.58, -29.64, -29.73, -29.89, -29.92, -29.90, -29.97, -30.10,
-        -30.13, -30.10, -30.02, -30.08, -30.12, -30.13, -30.14, -30.11, -30.17, -30.24,
-        -30.26, -30.21, -30.26, -30.27, -30.29, -30.25, -30.24, -30.28, -30.33, -30.29,
-        -30.30, -30.28, -30.30, -30.31, -30.56, -30.50, -30.45, -30.45, -30.79, -30.74,
-        -30.72, -30.71, -30.79, -30.83, -30.89, -30.87, -30.84, -30.82, -30.85, -30.81,
-        -30.80, -30.82, -30.75, -30.76, -30.77, -30.79, -30.77, -30.77, -30.80, -30.84,
-        -30.84, -30.82, -30.82, -30.78, -30.75, -30.74, -30.76, -30.72, -30.70, -30.68,
-        -30.65, -30.64, -30.66, -30.61, -30.67, -30.62, -30.66, -30.63, -30.66, -30.68,
-        -30.74, -30.77, -30.77, -30.69, -30.69, -30.69, -30.72, -30.77, -30.75, -30.70,
-        -30.67, -30.65, -30.65, -30.61, -30.68, -30.62, -30.64, -30.69, -30.68, -30.67,
-        -30.67, -30.67, -30.66, -30.65, -30.66, -30.65, -30.64, -30.63, -30.63, -30.62,
-        -30.62, -30.70, -30.72, -30.73, -30.78, -30.76, -30.73, -30.73, -30.73, -30.73,
-        -30.74, -30.76, -30.79, -30.80, -30.79, -30.77, -30.76, -30.74, -30.75, -30.75,
-        -30.78, -30.80, -30.82, -30.85, -30.85, -30.86, -30.85, -30.85, -30.85, -30.85,
-        -30.85, -30.88, -30.90, -30.95, -31.00, -31.03, -31.06, -31.06, -31.06, -31.06,
-        -31.06, -31.06, -31.06, -31.11, -31.11, -31.14, -31.19, -31.19, -31.23, -31.20,
-        -31.22, -31.23, -31.28, -31.30, -31.35, -31.37, -31.37, -31.32, -31.37, -31.42,
-        -31.44, -31.46, -31.46, -31.42, -31.43, -31.47, -31.54, -31.49, -31.48, -31.57,
-        -31.60, -31.58, -31.55, -31.53, -31.53, -31.57, -31.52, -31.51, -31.42, -31.38,
-        -31.32, -31.34, -31.32, -31.32, -31.27, -31.31, -31.34, -31.41, -31.40, -31.35,
-        -31.35, -31.35, -31.25, -31.20, -31.12, -31.11, -31.11, -31.07, -30.98, -31.00,
-        -31.05, -30.99, -30.96, -30.93, -30.88, -30.85, -30.76, -30.78, -30.82, -30.82,
-        -30.80, -30.81, -30.77, -30.70, -30.68, -30.66, -30.63, -30.59, -30.52, -30.49,
-        -30.40, -30.28, -30.23, -30.10, -30.06, -30.02, -29.97, -29.99
+        -717, -718, -719, -721, -721,
+        -729, -731, -733, -734, -743, -740, -745, -747, -749, -753,
+        -754, -755, -754, -760, -761, -764, -764, -767, -765, -765,
+        -766, -764, -768, -766, -767, -767, -766, -768, -770, -777,
+        -775, -781, -785, -789, -791, -798, -797, -796, -803, -803,
+        -806, -815, -814, -821, -822, -828, -831, -836, -841, -846,
+        -847, -853, -857, -864, -869, -867, -875, -867, -869, -868,
+        -867, -869, -868, -874, -872, -879, -877, -879, -887, -890,
+        -889, -897, -895, -898, -907, -905, -912, -917, -923, -930,
+        -927, -935, -938, -945, -947, -953, -953, -955, -959, -961,
+        -967, -965, -968, -970, -970, -970, -972, -975, -979, -981,
+        -978, -983, -984, -982, -987, -987, -993, -999, -995, -1003,
+        -1010, -1008, -1010, -1011, -1019, -1016, -1020, -1026, -1023, -1030,
+        -1037, -1038, -1041, -1047, -1052, -1050, -1056, -1059, -1061, -1059,
+        -1061, -1067, -1069, -1070, -1072, -1080, -1080, -1087, -1087, -1089,
+        -1097, -1100, -1107, -1114, -1120, -1125, -1128, -1129, -1132, -1134,
+        -1135, -1137, -1138, -1143, -1141, -1147, -1149, -1158, -1165, -1173,
+        -1178, -1181, -1188, -1194, -1197, -1204, -1209, -1210, -1214, -1219,
+        -1223, -1226, -1229, -1234, -1239, -1247, -1252, -1259, -1256, -1262,
+        -1268, -1275, -1273, -1276, -1286, -1293, -1293, -1293, -1301, -1305,
+        -1303, -1309, -1317, -1320, -1328, -1334, -1338, -1344, -1348, -1355,
+        -1359, -1361, -1360, -1367, -1376, -1375, -1378, -1385, -1388, -1385,
+        -1392, -1393, -1399, -1397, -1401, -1407, -1410, -1409, -1411, -1412,
+        -1411, -1417, -1417, -1425, -1424, -1427, -1426, -1431, -1435, -1434,
+        -1438, -1442, -1443, -1444, -1451, -1454, -1466, -1473, -1477, -1484,
+        -1492, -1500, -1505, -1513, -1520, -1526, -1534, -1539, -1543, -1551,
+        -1555, -1562, -1566, -1564, -1568, -1575, -1573, -1580, -1588, -1596,
+        -1608, -1613, -1623, -1628, -1633, -1638, -1648, -1649, -1659, -1662,
+        -1662, -1665, -1674, -1678, -1676, -1680, -1689, -1695, -1704, -1708,
+        -1715, -1725, -1731, -1738, -1740, -1748, -1754, -1757, -1766, -1771,
+        -1778, -1785, -1783, -1790, -1791, -1796, -1803, -1803, -1804, -1808,
+        -1804, -1803, -1802, -1802, -1808, -1817, -1818, -1827, -1833, -1841,
+        -1845, -1844, -1850, -1854, -1851, -1856, -1861, -1858, -1862, -1873,
+        -1879, -1879, -1888, -1897, -1902, -1909, -1912, -1919, -1923, -1925,
+        -1934, -1934, -1930, -1938, -1937, -1934, -1942, -1949, -1953, -1958,
+        -1960, -1956, -1957, -1965, -1964, -1965, -1970, -1973, -1975, -1980,
+        -1982, -1981, -1984, -1991, -1994, -1996, -1996, -1998, -2003, -2011,
+        -2020, -2025, -2033, -2040, -2049, -2055, -2065, -2070, -2073, -2075,
+        -2080, -2089, -2090, -2095, -2098, -2103, -2110, -2115, -2123, -2127,
+        -2133, -2136, -2142, -2146, -2138, -2143, -2147, -2149, -2144, -2150,
+        -2155, -2160, -2166, -2169, -2179, -2182, -2190, -2194, -2204, -2211,
+        -2204, -2206, -2210, -2203, -2209, -2216, -2218, -2223, -2230, -2233,
+        -2239, -2244, -2250, -2255, -2253, -2259, -2265, -2268, -2266, -2273,
+        -2279, -2283, -2292, -2293, -2295, -2302, -2308, -2311, -2316, -2321,
+        -2324, -2329, -2334, -2339, -2346, -2350, -2353, -2349, -2354, -2357,
+        -2357, -2363, -2367, -2375, -2380, -2387, -2390, -2401, -2403, -2411,
+        -2416, -2421, -2426, -2435, -2439, -2445, -2452, -2458, -2463, -2467,
+        -2474, -2478, -2485, -2490, -2497, -2502, -2507, -2513, -2523, -2526,
+        -2533, -2538, -2542, -2546, -2546, -2548, -2552, -2552, -2551, -2554,
+        -2557, -2557, -2562, -2565, -2568, -2573, -2580, -2586, -2592, -2599,
+        -2601, -2604, -2606, -2611, -2617, -2620, -2628, -2631, -2636, -2639,
+        -2647, -2649, -2652, -2658, -2662, -2665, -2669, -2672, -2678, -2681,
+        -2674, -2680, -2685, -2687, -2690, -2685, -2682, -2691, -2693, -2697,
+        -2699, -2708, -2711, -2714, -2717, -2721, -2723, -2726, -2728, -2731,
+        -2739, -2742, -2746, -2754, -2759, -2762, -2766, -2768, -2770, -2778,
+        -2780, -2783, -2790, -2792, -2794, -2801, -2806, -2812, -2816, -2821,
+        -2826, -2827, -2830, -2832, -2833, -2837, -2843, -2845, -2850, -2855,
+        -2859, -2861, -2866, -2869, -2876, -2878, -2880, -2886, -2889, -2893,
+        -2895, -2903, -2904, -2907, -2914, -2917, -2925, -2932, -2935, -2942,
+        -2948, -2953, -2958, -2959, -2968, -2973, -2975, -2977, -2980, -2980,
+        -2982, -2988, -2993, -2998, -3002, -3010, -3013, -3018, -3022, -3030,
+        -3033, -3038, -3042, -3050, -3052, -3052, -3052, -3060, -3061, -3062,
+        -3063, -3070, -3075, -3078, -3082, -3090, -3093, -3097, -3107, -3111,
+        -3117, -3121, -3130, -3133, -3135, -3140, -3145, -3146, -3150, -3153,
+        -3159, -3160, -3165, -3166, -3170, -3172, -3177, -3181, -3181, -3182,
+        -3187, -3188, -3188, -3193, -3193, -3200, -3203, -3203, -3211, -3214,
+        -3214, -3214, -3218, -3218, -3218, -3219, -3223, -3223, -3227, -3232,
+        -3235, -3237, -3237, -3242, -3246, -3249, -3250, -3247, -3247, -3252,
+        -3257, -3257, -3258, -3262, -3267, -3268, -3272, -3272, -3274, -3276,
+        -3276, -3276, -3277, -3277, -3279, -3281, -3282, -3282, -3286, -3288,
+        -3290, -3292, -3292, -3289, -3292, -3293, -3295, -3295, -3295, -3295,
+        -3302, -3303, -3303, -3303, -3313, -3313, -3313, -3313, -3313, -3313,
+        -3313, -3313, -3313, -3314, -3319, -3319, -3322, -3325, -3325, -3329,
+        -3330, -3333, -3331, -3333, -3333, -3333, -3333, -3333, -3333, -3333,
+        -3330, -3329, -3326, -3326, -3327, -3328, -3329, -3329, -3329, -3328,
+        -3336, -3338, -3342, -3341, -3340, -3338, -3339, -3339, -3339, -3339,
+        -3338, -3338, -3337, -3337, -3337, -3336, -3336, -3337, -3337, -3336,
+        -3337, -3337, -3336, -3334, -3334, -3332, -3332, -3332, -3327, -3327,
+        -3325, -3325, -3319, -3317, -3316, -3313, -3313, -3311, -3311, -3311,
+        -3310, -3311, -3313, -3311, -3311, -3305, -3303, -3300, -3299, -3298,
+        -3294, -3286, -3284, -3283, -3285, -3282, -3280, -3282, -3276, -3278,
+        -3278, -3281, -3281, -3281, -3281, -3281, -3282, -3272, -3268, -3268,
+        -3269, -3260, -3260, -3260, -3259, -3260, -3261, -3260, -3259, -3257,
+        -3256, -3251, -3245, -3246, -3236, -3236, -3236, -3236, -3236, -3236,
+        -3236, -3236, -3233, -3229, -3228, -3226, -3226, -3226, -3226, -3227,
+        -3232, -3227, -3227, -3232, -3228, -3228, -3233, -3233, -3233, -3233,
+        -3233, -3232, -3229, -3228, -3227, -3224, -3223, -3223, -3221, -3219,
+        -3218, -3218, -3217, -3217, -3213, -3207, -3207, -3202, -3196, -3196,
+        -3196, -3197, -3196, -3192, -3191, -3191, -3191, -3191, -3189, -3188,
+        -3186, -3185, -3185, -3181, -3172, -3165, -3164, -3166, -3168, -3171,
+        -3173, -3173, -3172, -3162, -3164, -3167, -3162, -3161, -3161, -3161,
+        -3163, -3163, -3163, -3165, -3167, -3163, -3158, -3159, -3156, -3153,
+        -3154, -3153, -3157, -3157, -3151, -3152, -3156, -3158, -3153, -3152,
+        -3152, -3157, -3157, -3156, -3157, -3149, -3144, -3148, -3149, -3154,
+        -3155, -3157, -3159, -3162, -3162, -3156, -3156, -3157, -3150, -3155,
+        -3150, -3148, -3150, -3146, -3149, -3141, -3142, -3147, -3147, -3150,
+        -3153, -3153, -3156, -3156, -3158, -3153, -3150, -3154, -3153, -3154,
+        -3159, -3167, -3169, -3172, -3177, -3182, -3181, -3182, -3182, -3184,
+        -3185, -3184, -3184, -3186, -3183, -3179, -3183, -3182, -3179, -3184,
+        -3182, -3181, -3186, -3182, -3180, -3182, -3185, -3189, -3189, -3189,
+        -3183, -3183, -3178, -3173, -3171, -3171, -3168, -3169, -3172, -3166,
+        -3165, -3163, -3159, -3152, -3150, -3144, -3135, -3126, -3128, -3123,
+        -3113, -3112, -3107, -3102, -3102, -3096, -3094, -3097, -3092, -3092,
+        -3095, -3088, -3095, -3093, -3088, -3087, -3081, -3081, -3076, -3071,
+        -3067, -3068, -3067, -3066, -3066, -3062, -3058, -3056, -3052, -3047,
+        -3046, -3042, -3036, -3035, -3026, -3022, -3015, -3010, -3010, -3010,
+        -3010, -3010, -3011, -3011, -3002, -3001, -3001, -2992, -2993, -2993,
+        -2993, -2992, -2993, -2994, -2994, -2994, -2993, -2993, -2994, -2992,
+        -2988, -2981, -2980, -2976, -2966, -2963, -2963, -2962, -2962, -2959,
+        -2958, -2956, -2956, -2956, -2956, -2954, -2954, -2954, -2952, -2950,
+        -2950, -2951, -2954, -2953, -2952, -2952, -2952, -2951, -2949, -2946,
+        -2941, -2941, -2943, -2941, -2942, -2940, -2941, -2940, -2942, -2941,
+        -2942, -2947, -2947, -2951, -2949, -2949, -2951, -2947, -2943, -2938,
+        -2936, -2937, -2939, -2938, -2938, -2937, -2938, -2949, -2947, -2945,
+        -2943, -2940, -2960, -2960, -2960, -2959, -2953, -2953, -2952, -2961,
+        -2960, -2955, -2958, -2964, -2973, -2989, -2992, -2990, -2997, -3010,
+        -3013, -3010, -3002, -3008, -3012, -3013, -3014, -3011, -3017, -3024,
+        -3026, -3021, -3026, -3027, -3029, -3025, -3024, -3028, -3033, -3029,
+        -3030, -3028, -3030, -3031, -3056, -3050, -3045, -3045, -3079, -3074,
+        -3072, -3071, -3079, -3083, -3089, -3087, -3084, -3082, -3085, -3081,
+        -3080, -3082, -3075, -3076, -3077, -3079, -3077, -3077, -3080, -3084,
+        -3084, -3082, -3082, -3078, -3075, -3074, -3076, -3072, -3070, -3068,
+        -3065, -3064, -3066, -3061, -3067, -3062, -3066, -3063, -3066, -3068,
+        -3074, -3077, -3077, -3069, -3069, -3069, -3072, -3077, -3075, -3070,
+        -3067, -3065, -3065, -3061, -3068, -3062, -3064, -3069, -3068, -3067,
+        -3067, -3067, -3066, -3065, -3066, -3065, -3064, -3063, -3063, -3062,
+        -3062, -3070, -3072, -3073, -3078, -3076, -3073, -3073, -3073, -3073,
+        -3074, -3076, -3079, -3080, -3079, -3077, -3076, -3074, -3075, -3075,
+        -3078, -3080, -3082, -3085, -3085, -3086, -3085, -3085, -3085, -3085,
+        -3085, -3088, -3090, -3095, -3100, -3103, -3106, -3106, -3106, -3106,
+        -3106, -3106, -3106, -3111, -3111, -3114, -3119, -3119, -3123, -3120,
+        -3122, -3123, -3128, -3130, -3135, -3137, -3137, -3132, -3137, -3142,
+        -3144, -3146, -3146, -3142, -3143, -3147, -3154, -3149, -3148, -3157,
+        -3160, -3158, -3155, -3153, -3153, -3157, -3152, -3151, -3142, -3138,
+        -3132, -3134, -3132, -3132, -3127, -3131, -3134, -3141, -3140, -3135,
+        -3135, -3135, -3125, -3120, -3112, -3111, -3111, -3107, -3098, -3100,
+        -3105, -3099, -3096, -3093, -3088, -3085, -3076, -3078, -3082, -3082,
+        -3080, -3081, -3077, -3070, -3068, -3066, -3063, -3059, -3052, -3049,
+        -3040, -3028, -3023, -3010, -3006, -3002, -2997, -2999
     };
 
-    static const float fletcher_munson_curve_60_phons[1383] =
+    static const int16_t fletcher_munson_curve_60_phons[1383] =
     {
-        -5.17, -5.20, -5.20, -5.24, -5.20,
-        -5.28, -5.29, -5.30, -5.31, -5.40, -5.33, -5.40, -5.44, -5.42, -5.45,
-        -5.51, -5.48, -5.51, -5.57, -5.54, -5.57, -5.56, -5.57, -5.56, -5.54,
-        -5.56, -5.52, -5.56, -5.52, -5.53, -5.51, -5.51, -5.52, -5.51, -5.60,
-        -5.57, -5.62, -5.66, -5.67, -5.68, -5.77, -5.77, -5.72, -5.77, -5.78,
-        -5.78, -5.86, -5.83, -5.92, -5.89, -5.96, -5.99, -6.01, -6.04, -6.09,
-        -6.09, -6.15, -6.17, -6.25, -6.29, -6.29, -6.35, -6.25, -6.29, -6.25,
-        -6.25, -6.25, -6.23, -6.29, -6.25, -6.30, -6.30, -6.31, -6.36, -6.40,
-        -6.40, -6.46, -6.42, -6.46, -6.55, -6.51, -6.56, -6.61, -6.67, -6.72,
-        -6.67, -6.72, -6.77, -6.83, -6.82, -6.88, -6.87, -6.88, -6.89, -6.88,
-        -6.98, -6.93, -6.98, -6.99, -6.99, -6.99, -6.98, -7.05, -7.07, -7.10,
-        -7.04, -7.09, -7.10, -7.06, -7.12, -7.08, -7.14, -7.19, -7.16, -7.24,
-        -7.30, -7.25, -7.25, -7.26, -7.32, -7.27, -7.30, -7.34, -7.30, -7.35,
-        -7.40, -7.39, -7.40, -7.46, -7.50, -7.46, -7.49, -7.51, -7.51, -7.48,
-        -7.51, -7.56, -7.56, -7.57, -7.61, -7.69, -7.67, -7.72, -7.72, -7.72,
-        -7.77, -7.77, -7.82, -7.88, -7.93, -7.98, -7.99, -7.99, -8.03, -8.05,
-        -8.04, -8.08, -8.06, -8.14, -8.10, -8.14, -8.15, -8.24, -8.28, -8.35,
-        -8.40, -8.38, -8.45, -8.50, -8.51, -8.58, -8.61, -8.61, -8.65, -8.69,
-        -8.72, -8.76, -8.78, -8.82, -8.87, -8.93, -8.98, -9.07, -9.01, -9.08,
-        -9.14, -9.19, -9.18, -9.21, -9.29, -9.34, -9.36, -9.35, -9.40, -9.45,
-        -9.43, -9.46, -9.52, -9.56, -9.65, -9.66, -9.71, -9.77, -9.79, -9.87,
-        -9.87, -9.89, -9.88, -9.93, -10.05, -10.05, -10.04, -10.13, -10.14, -10.09,
-        -10.13, -10.14, -10.18, -10.13, -10.14, -10.23, -10.22, -10.19, -10.19, -10.17,
-        -10.18, -10.23, -10.20, -10.28, -10.26, -10.30, -10.27, -10.29, -10.31, -10.30,
-        -10.34, -10.34, -10.37, -10.35, -10.43, -10.45, -10.56, -10.61, -10.66, -10.71,
-        -10.76, -10.82, -10.87, -10.93, -10.98, -11.03, -11.11, -11.13, -11.18, -11.24,
-        -11.24, -11.34, -11.34, -11.32, -11.34, -11.39, -11.35, -11.39, -11.45, -11.50,
-        -11.60, -11.63, -11.71, -11.71, -11.76, -11.82, -11.92, -11.92, -12.02, -12.03,
-        -12.06, -12.04, -12.13, -12.16, -12.13, -12.15, -12.23, -12.26, -12.34, -12.39,
-        -12.45, -12.55, -12.60, -12.66, -12.66, -12.74, -12.76, -12.76, -12.86, -12.87,
-        -12.91, -12.96, -12.92, -12.97, -12.98, -13.00, -13.06, -13.03, -13.04, -13.08,
-        -13.03, -13.02, -12.99, -13.02, -13.04, -13.12, -13.14, -13.22, -13.25, -13.33,
-        -13.35, -13.33, -13.38, -13.42, -13.39, -13.44, -13.49, -13.45, -13.50, -13.62,
-        -13.65, -13.65, -13.73, -13.81, -13.82, -13.91, -13.92, -13.99, -14.02, -14.02,
-        -14.11, -14.09, -14.04, -14.12, -14.07, -14.07, -14.12, -14.18, -14.23, -14.29,
-        -14.32, -14.28, -14.27, -14.33, -14.28, -14.30, -14.34, -14.34, -14.33, -14.39,
-        -14.36, -14.34, -14.34, -14.44, -14.44, -14.45, -14.46, -14.45, -14.50, -14.57,
-        -14.64, -14.70, -14.76, -14.81, -14.88, -14.92, -15.01, -15.02, -15.02, -15.02,
-        -15.02, -15.12, -15.12, -15.12, -15.12, -15.20, -15.23, -15.28, -15.39, -15.42,
-        -15.49, -15.49, -15.56, -15.59, -15.49, -15.53, -15.57, -15.57, -15.49, -15.55,
-        -15.60, -15.64, -15.70, -15.72, -15.80, -15.81, -15.91, -15.91, -16.01, -16.06,
-        -15.97, -15.96, -15.96, -15.87, -15.90, -15.95, -15.98, -16.02, -16.11, -16.13,
-        -16.17, -16.22, -16.26, -16.29, -16.23, -16.28, -16.33, -16.31, -16.28, -16.33,
-        -16.33, -16.33, -16.41, -16.39, -16.38, -16.44, -16.49, -16.49, -16.54, -16.59,
-        -16.59, -16.65, -16.70, -16.70, -16.77, -16.80, -16.80, -16.71, -16.73, -16.72,
-        -16.72, -16.75, -16.80, -16.85, -16.86, -16.96, -16.96, -17.06, -17.07, -17.17,
-        -17.17, -17.23, -17.28, -17.35, -17.38, -17.45, -17.48, -17.58, -17.64, -17.68,
-        -17.75, -17.79, -17.85, -17.91, -17.96, -18.01, -18.06, -18.12, -18.22, -18.23,
-        -18.32, -18.32, -18.36, -18.41, -18.39, -18.43, -18.46, -18.49, -18.43, -18.49,
-        -18.52, -18.49, -18.56, -18.57, -18.58, -18.58, -18.62, -18.65, -18.75, -18.80,
-        -18.80, -18.80, -18.80, -18.85, -18.90, -18.91, -19.00, -19.01, -19.04, -19.06,
-        -19.16, -19.17, -19.18, -19.23, -19.27, -19.27, -19.31, -19.33, -19.38, -19.37,
-        -19.31, -19.34, -19.38, -19.38, -19.37, -19.28, -19.22, -19.32, -19.32, -19.32,
-        -19.33, -19.43, -19.43, -19.43, -19.43, -19.43, -19.43, -19.43, -19.43, -19.44,
-        -19.53, -19.54, -19.58, -19.66, -19.68, -19.69, -19.69, -19.69, -19.69, -19.79,
-        -19.78, -19.77, -19.86, -19.86, -19.86, -19.95, -19.96, -19.99, -20.06, -20.06,
-        -20.06, -20.06, -20.06, -20.06, -20.06, -20.06, -20.16, -20.16, -20.21, -20.27,
-        -20.29, -20.32, -20.33, -20.39, -20.43, -20.43, -20.46, -20.48, -20.52, -20.53,
-        -20.56, -20.62, -20.64, -20.65, -20.74, -20.75, -20.84, -20.90, -20.95, -21.00,
-        -21.09, -21.11, -21.11, -21.12, -21.21, -21.21, -21.21, -21.21, -21.21, -21.21,
-        -21.21, -21.28, -21.32, -21.35, -21.37, -21.47, -21.48, -21.48, -21.48, -21.59,
-        -21.59, -21.59, -21.60, -21.69, -21.68, -21.66, -21.64, -21.74, -21.73, -21.71,
-        -21.70, -21.78, -21.82, -21.83, -21.84, -21.95, -21.95, -21.95, -22.05, -22.06,
-        -22.11, -22.11, -22.21, -22.21, -22.22, -22.26, -22.31, -22.32, -22.33, -22.37,
-        -22.41, -22.42, -22.43, -22.44, -22.45, -22.47, -22.48, -22.51, -22.51, -22.49,
-        -22.48, -22.47, -22.47, -22.47, -22.48, -22.58, -22.58, -22.58, -22.68, -22.68,
-        -22.68, -22.68, -22.68, -22.68, -22.69, -22.69, -22.69, -22.69, -22.69, -22.73,
-        -22.74, -22.74, -22.74, -22.74, -22.78, -22.79, -22.77, -22.75, -22.74, -22.76,
-        -22.85, -22.84, -22.84, -22.85, -22.94, -22.95, -22.95, -22.95, -22.95, -22.95,
-        -22.95, -22.95, -22.95, -22.95, -22.97, -23.00, -23.00, -23.00, -23.05, -23.08,
-        -23.10, -23.11, -23.10, -23.08, -23.10, -23.11, -23.16, -23.16, -23.16, -23.16,
-        -23.21, -23.21, -23.21, -23.21, -23.31, -23.32, -23.32, -23.32, -23.32, -23.32,
-        -23.32, -23.32, -23.32, -23.33, -23.42, -23.42, -23.47, -23.53, -23.53, -23.56,
-        -23.58, -23.60, -23.58, -23.63, -23.63, -23.63, -23.63, -23.63, -23.63, -23.62,
-        -23.59, -23.59, -23.53, -23.53, -23.54, -23.55, -23.56, -23.57, -23.56, -23.53,
-        -23.60, -23.63, -23.63, -23.61, -23.55, -23.53, -23.53, -23.53, -23.53, -23.51,
-        -23.49, -23.47, -23.42, -23.42, -23.42, -23.37, -23.37, -23.37, -23.37, -23.37,
-        -23.37, -23.37, -23.37, -23.37, -23.37, -23.37, -23.37, -23.37, -23.32, -23.32,
-        -23.32, -23.32, -23.26, -23.21, -23.21, -23.16, -23.16, -23.11, -23.11, -23.11,
-        -23.10, -23.11, -23.16, -23.11, -23.11, -23.05, -23.05, -23.00, -22.99, -22.98,
-        -22.91, -22.79, -22.77, -22.73, -22.73, -22.70, -22.68, -22.68, -22.62, -22.69,
-        -22.69, -22.74, -22.74, -22.74, -22.74, -22.74, -22.74, -22.64, -22.60, -22.60,
-        -22.61, -22.52, -22.53, -22.52, -22.51, -22.51, -22.51, -22.49, -22.47, -22.47,
-        -22.47, -22.41, -22.36, -22.37, -22.27, -22.27, -22.28, -22.27, -22.27, -22.26,
-        -22.26, -22.26, -22.26, -22.26, -22.26, -22.26, -22.26, -22.26, -22.26, -22.27,
-        -22.36, -22.32, -22.32, -22.41, -22.37, -22.37, -22.42, -22.42, -22.42, -22.42,
-        -22.42, -22.41, -22.38, -22.37, -22.37, -22.33, -22.32, -22.32, -22.31, -22.28,
-        -22.27, -22.27, -22.27, -22.26, -22.22, -22.16, -22.16, -22.11, -22.05, -22.06,
-        -22.08, -22.11, -22.10, -22.03, -22.00, -22.00, -22.00, -22.00, -21.95, -21.93,
-        -21.90, -21.90, -21.89, -21.84, -21.74, -21.66, -21.64, -21.64, -21.63, -21.63,
-        -21.63, -21.63, -21.63, -21.53, -21.53, -21.53, -21.48, -21.42, -21.42, -21.42,
-        -21.42, -21.42, -21.42, -21.42, -21.42, -21.36, -21.28, -21.27, -21.24, -21.19,
-        -21.17, -21.16, -21.16, -21.16, -21.07, -21.06, -21.06, -21.05, -21.00, -20.95,
-        -20.95, -20.95, -20.95, -20.95, -20.93, -20.85, -20.80, -20.79, -20.79, -20.79,
-        -20.79, -20.79, -20.79, -20.79, -20.77, -20.70, -20.67, -20.68, -20.62, -20.64,
-        -20.58, -20.53, -20.55, -20.53, -20.53, -20.45, -20.44, -20.53, -20.53, -20.58,
-        -20.63, -20.64, -20.69, -20.69, -20.69, -20.62, -20.58, -20.63, -20.59, -20.58,
-        -20.59, -20.69, -20.69, -20.69, -20.75, -20.79, -20.78, -20.79, -20.79, -20.82,
-        -20.85, -20.84, -20.86, -20.90, -20.87, -20.83, -20.89, -20.89, -20.85, -20.92,
-        -20.91, -20.87, -20.95, -20.91, -20.91, -20.95, -21.00, -21.00, -21.01, -21.00,
-        -20.94, -20.96, -20.91, -20.85, -20.83, -20.85, -20.82, -20.84, -20.91, -20.85,
-        -20.85, -20.85, -20.83, -20.79, -20.77, -20.76, -20.69, -20.60, -20.64, -20.61,
-        -20.49, -20.48, -20.43, -20.37, -20.37, -20.32, -20.32, -20.37, -20.34, -20.38,
-        -20.42, -20.38, -20.43, -20.43, -20.37, -20.37, -20.31, -20.26, -20.22, -20.17,
-        -20.12, -20.16, -20.17, -20.18, -20.20, -20.16, -20.12, -20.11, -20.06, -20.01,
-        -20.00, -19.96, -19.90, -19.90, -19.80, -19.76, -19.69, -19.64, -19.64, -19.64,
-        -19.64, -19.64, -19.64, -19.63, -19.54, -19.53, -19.53, -19.44, -19.47, -19.48,
-        -19.48, -19.48, -19.48, -19.48, -19.48, -19.48, -19.48, -19.48, -19.48, -19.48,
-        -19.44, -19.37, -19.36, -19.32, -19.19, -19.17, -19.13, -19.12, -19.12, -19.06,
-        -19.05, -19.01, -19.01, -19.01, -19.01, -19.01, -19.01, -19.01, -19.01, -19.01,
-        -19.01, -19.03, -19.06, -19.06, -19.06, -19.06, -19.07, -19.04, -19.01, -18.99,
-        -18.94, -18.96, -18.98, -18.96, -18.98, -18.95, -18.95, -18.97, -19.01, -18.97,
-        -18.96, -19.01, -19.01, -19.06, -19.01, -19.01, -19.00, -18.95, -18.91, -18.86,
-        -18.86, -18.87, -18.88, -18.88, -18.87, -18.86, -18.90, -18.98, -18.97, -18.94,
-        -18.94, -18.94, -19.10, -19.11, -19.12, -19.02, -18.91, -18.91, -18.93, -18.99,
-        -19.03, -19.00, -19.00, -19.05, -19.13, -19.31, -19.28, -19.22, -19.25, -19.36,
-        -19.38, -19.29, -19.16, -19.21, -19.29, -19.27, -19.26, -19.22, -19.31, -19.40,
-        -19.36, -19.43, -19.43, -19.45, -19.46, -19.45, -19.44, -19.47, -19.50, -19.44,
-        -19.43, -19.39, -19.39, -19.37, -19.63, -19.59, -19.54, -19.54, -19.90, -19.85,
-        -19.80, -19.79, -19.87, -19.93, -19.95, -19.92, -19.90, -19.91, -19.92, -19.90,
-        -19.90, -19.95, -19.90, -19.90, -19.90, -19.90, -19.86, -19.86, -19.91, -19.95,
-        -19.98, -19.96, -19.98, -19.95, -19.92, -19.92, -19.96, -19.93, -19.92, -19.95,
-        -19.90, -19.93, -19.94, -19.90, -19.98, -19.95, -19.99, -20.02, -20.07, -20.11,
-        -20.21, -20.26, -20.27, -20.21, -20.17, -20.19, -20.22, -20.27, -20.27, -20.22,
-        -20.22, -20.22, -20.22, -20.22, -20.31, -20.27, -20.30, -20.38, -20.38, -20.38,
-        -20.40, -20.42, -20.41, -20.41, -20.42, -20.43, -20.43, -20.43, -20.43, -20.42,
-        -20.43, -20.53, -20.58, -20.61, -20.69, -20.69, -20.69, -20.69, -20.68, -20.68,
-        -20.69, -20.71, -20.74, -20.76, -20.76, -20.77, -20.79, -20.79, -20.79, -20.80,
-        -20.82, -20.84, -20.87, -20.89, -20.90, -20.90, -20.90, -20.90, -20.90, -20.90,
-        -20.90, -20.90, -20.90, -20.95, -21.00, -21.05, -21.11, -21.11, -21.11, -21.11,
-        -21.11, -21.11, -21.11, -21.16, -21.16, -21.16, -21.21, -21.21, -21.25, -21.20,
-        -21.23, -21.24, -21.25, -21.27, -21.31, -21.31, -21.29, -21.22, -21.27, -21.32,
-        -21.33, -21.32, -21.31, -21.23, -21.23, -21.27, -21.35, -21.30, -21.27, -21.35,
-        -21.37, -21.35, -21.32, -21.32, -21.32, -21.34, -21.27, -21.25, -21.17, -21.12,
-        -21.07, -21.10, -21.08, -21.09, -21.02, -21.04, -21.08, -21.14, -21.12, -21.05,
-        -21.05, -21.05, -20.96, -20.91, -20.79, -20.77, -20.76, -20.73, -20.62, -20.63,
-        -20.69, -20.65, -20.64, -20.63, -20.59, -20.57, -20.50, -20.51, -20.55, -20.53,
-        -20.48, -20.51, -20.48, -20.40, -20.38, -20.36, -20.33, -20.27, -20.18, -20.16,
-        -20.03, -19.93, -19.93, -19.81, -19.75, -19.75, -19.72, -19.75
+        -517, -520, -520, -524, -520,
+        -528, -529, -530, -531, -540, -533, -540, -544, -542, -545,
+        -551, -548, -551, -557, -554, -557, -556, -557, -556, -554,
+        -556, -552, -556, -552, -553, -551, -551, -552, -551, -560,
+        -557, -562, -566, -567, -568, -577, -577, -572, -577, -578,
+        -578, -586, -583, -592, -589, -596, -599, -601, -604, -609,
+        -609, -615, -617, -625, -629, -629, -635, -625, -629, -625,
+        -625, -625, -623, -629, -625, -630, -630, -631, -636, -640,
+        -640, -646, -642, -646, -655, -651, -656, -661, -667, -672,
+        -667, -672, -677, -683, -682, -688, -687, -688, -689, -688,
+        -698, -693, -698, -699, -699, -699, -698, -705, -707, -710,
+        -704, -709, -710, -706, -712, -708, -714, -719, -716, -724,
+        -730, -725, -725, -726, -732, -727, -730, -734, -730, -735,
+        -740, -739, -740, -746, -750, -746, -749, -751, -751, -748,
+        -751, -756, -756, -757, -761, -769, -767, -772, -772, -772,
+        -777, -777, -782, -788, -793, -798, -799, -799, -803, -805,
+        -804, -808, -806, -814, -810, -814, -815, -824, -828, -835,
+        -840, -838, -845, -850, -851, -858, -861, -861, -865, -869,
+        -872, -876, -878, -882, -887, -893, -898, -907, -901, -908,
+        -914, -919, -918, -921, -929, -934, -936, -935, -940, -945,
+        -943, -946, -952, -956, -965, -966, -971, -977, -979, -987,
+        -987, -989, -988, -993, -1005, -1005, -1004, -1013, -1014, -1009,
+        -1013, -1014, -1018, -1013, -1014, -1023, -1022, -1019, -1019, -1017,
+        -1018, -1023, -1020, -1028, -1026, -1030, -1027, -1029, -1031, -1030,
+        -1034, -1034, -1037, -1035, -1043, -1045, -1056, -1061, -1066, -1071,
+        -1076, -1082, -1087, -1093, -1098, -1103, -1111, -1113, -1118, -1124,
+        -1124, -1134, -1134, -1132, -1134, -1139, -1135, -1139, -1145, -1150,
+        -1160, -1163, -1171, -1171, -1176, -1182, -1192, -1192, -1202, -1203,
+        -1206, -1204, -1213, -1216, -1213, -1215, -1223, -1226, -1234, -1239,
+        -1245, -1255, -1260, -1266, -1266, -1274, -1276, -1276, -1286, -1287,
+        -1291, -1296, -1292, -1297, -1298, -1300, -1306, -1303, -1304, -1308,
+        -1303, -1302, -1299, -1302, -1304, -1312, -1314, -1322, -1325, -1333,
+        -1335, -1333, -1338, -1342, -1339, -1344, -1349, -1345, -1350, -1362,
+        -1365, -1365, -1373, -1381, -1382, -1391, -1392, -1399, -1402, -1402,
+        -1411, -1409, -1404, -1412, -1407, -1407, -1412, -1418, -1423, -1429,
+        -1432, -1428, -1427, -1433, -1428, -1430, -1434, -1434, -1433, -1439,
+        -1436, -1434, -1434, -1444, -1444, -1445, -1446, -1445, -1450, -1457,
+        -1464, -1470, -1476, -1481, -1488, -1492, -1501, -1502, -1502, -1502,
+        -1502, -1512, -1512, -1512, -1512, -1520, -1523, -1528, -1539, -1542,
+        -1549, -1549, -1556, -1559, -1549, -1553, -1557, -1557, -1549, -1555,
+        -1560, -1564, -1570, -1572, -1580, -1581, -1591, -1591, -1601, -1606,
+        -1597, -1596, -1596, -1587, -1590, -1595, -1598, -1602, -1611, -1613,
+        -1617, -1622, -1626, -1629, -1623, -1628, -1633, -1631, -1628, -1633,
+        -1633, -1633, -1641, -1639, -1638, -1644, -1649, -1649, -1654, -1659,
+        -1659, -1665, -1670, -1670, -1677, -1680, -1680, -1671, -1673, -1672,
+        -1672, -1675, -1680, -1685, -1686, -1696, -1696, -1706, -1707, -1717,
+        -1717, -1723, -1728, -1735, -1738, -1745, -1748, -1758, -1764, -1768,
+        -1775, -1779, -1785, -1791, -1796, -1801, -1806, -1812, -1822, -1823,
+        -1832, -1832, -1836, -1841, -1839, -1843, -1846, -1849, -1843, -1849,
+        -1852, -1849, -1856, -1857, -1858, -1858, -1862, -1865, -1875, -1880,
+        -1880, -1880, -1880, -1885, -1890, -1891, -1900, -1901, -1904, -1906,
+        -1916, -1917, -1918, -1923, -1927, -1927, -1931, -1933, -1938, -1937,
+        -1931, -1934, -1938, -1938, -1937, -1928, -1922, -1932, -1932, -1932,
+        -1933, -1943, -1943, -1943, -1943, -1943, -1943, -1943, -1943, -1944,
+        -1953, -1954, -1958, -1966, -1968, -1969, -1969, -1969, -1969, -1979,
+        -1978, -1977, -1986, -1986, -1986, -1995, -1996, -1999, -2006, -2006,
+        -2006, -2006, -2006, -2006, -2006, -2006, -2016, -2016, -2021, -2027,
+        -2029, -2032, -2033, -2039, -2043, -2043, -2046, -2048, -2052, -2053,
+        -2056, -2062, -2064, -2065, -2074, -2075, -2084, -2090, -2095, -2100,
+        -2109, -2111, -2111, -2112, -2121, -2121, -2121, -2121, -2121, -2121,
+        -2121, -2128, -2132, -2135, -2137, -2147, -2148, -2148, -2148, -2159,
+        -2159, -2159, -2160, -2169, -2168, -2166, -2164, -2174, -2173, -2171,
+        -2170, -2178, -2182, -2183, -2184, -2195, -2195, -2195, -2205, -2206,
+        -2211, -2211, -2221, -2221, -2222, -2226, -2231, -2232, -2233, -2237,
+        -2241, -2242, -2243, -2244, -2245, -2247, -2248, -2251, -2251, -2249,
+        -2248, -2247, -2247, -2247, -2248, -2258, -2258, -2258, -2268, -2268,
+        -2268, -2268, -2268, -2268, -2269, -2269, -2269, -2269, -2269, -2273,
+        -2274, -2274, -2274, -2274, -2278, -2279, -2277, -2275, -2274, -2276,
+        -2285, -2284, -2284, -2285, -2294, -2295, -2295, -2295, -2295, -2295,
+        -2295, -2295, -2295, -2295, -2297, -2300, -2300, -2300, -2305, -2308,
+        -2310, -2311, -2310, -2308, -2310, -2311, -2316, -2316, -2316, -2316,
+        -2321, -2321, -2321, -2321, -2331, -2332, -2332, -2332, -2332, -2332,
+        -2332, -2332, -2332, -2333, -2342, -2342, -2347, -2353, -2353, -2356,
+        -2358, -2360, -2358, -2363, -2363, -2363, -2363, -2363, -2363, -2362,
+        -2359, -2359, -2353, -2353, -2354, -2355, -2356, -2357, -2356, -2353,
+        -2360, -2363, -2363, -2361, -2355, -2353, -2353, -2353, -2353, -2351,
+        -2349, -2347, -2342, -2342, -2342, -2337, -2337, -2337, -2337, -2337,
+        -2337, -2337, -2337, -2337, -2337, -2337, -2337, -2337, -2332, -2332,
+        -2332, -2332, -2326, -2321, -2321, -2316, -2316, -2311, -2311, -2311,
+        -2310, -2311, -2316, -2311, -2311, -2305, -2305, -2300, -2299, -2298,
+        -2291, -2279, -2277, -2273, -2273, -2270, -2268, -2268, -2262, -2269,
+        -2269, -2274, -2274, -2274, -2274, -2274, -2274, -2264, -2260, -2260,
+        -2261, -2252, -2253, -2252, -2251, -2251, -2251, -2249, -2247, -2247,
+        -2247, -2241, -2236, -2237, -2227, -2227, -2228, -2227, -2227, -2226,
+        -2226, -2226, -2226, -2226, -2226, -2226, -2226, -2226, -2226, -2227,
+        -2236, -2232, -2232, -2241, -2237, -2237, -2242, -2242, -2242, -2242,
+        -2242, -2241, -2238, -2237, -2237, -2233, -2232, -2232, -2231, -2228,
+        -2227, -2227, -2227, -2226, -2222, -2216, -2216, -2211, -2205, -2206,
+        -2208, -2211, -2210, -2203, -2200, -2200, -2200, -2200, -2195, -2193,
+        -2190, -2190, -2189, -2184, -2174, -2166, -2164, -2164, -2163, -2163,
+        -2163, -2163, -2163, -2153, -2153, -2153, -2148, -2142, -2142, -2142,
+        -2142, -2142, -2142, -2142, -2142, -2136, -2128, -2127, -2124, -2119,
+        -2117, -2116, -2116, -2116, -2107, -2106, -2106, -2105, -2100, -2095,
+        -2095, -2095, -2095, -2095, -2093, -2085, -2080, -2079, -2079, -2079,
+        -2079, -2079, -2079, -2079, -2077, -2070, -2067, -2068, -2062, -2064,
+        -2058, -2053, -2055, -2053, -2053, -2045, -2044, -2053, -2053, -2058,
+        -2063, -2064, -2069, -2069, -2069, -2062, -2058, -2063, -2059, -2058,
+        -2059, -2069, -2069, -2069, -2075, -2079, -2078, -2079, -2079, -2082,
+        -2085, -2084, -2086, -2090, -2087, -2083, -2089, -2089, -2085, -2092,
+        -2091, -2087, -2095, -2091, -2091, -2095, -2100, -2100, -2101, -2100,
+        -2094, -2096, -2091, -2085, -2083, -2085, -2082, -2084, -2091, -2085,
+        -2085, -2085, -2083, -2079, -2077, -2076, -2069, -2060, -2064, -2061,
+        -2049, -2048, -2043, -2037, -2037, -2032, -2032, -2037, -2034, -2038,
+        -2042, -2038, -2043, -2043, -2037, -2037, -2031, -2026, -2022, -2017,
+        -2012, -2016, -2017, -2018, -2020, -2016, -2012, -2011, -2006, -2001,
+        -2000, -1996, -1990, -1990, -1980, -1976, -1969, -1964, -1964, -1964,
+        -1964, -1964, -1964, -1963, -1954, -1953, -1953, -1944, -1947, -1948,
+        -1948, -1948, -1948, -1948, -1948, -1948, -1948, -1948, -1948, -1948,
+        -1944, -1937, -1936, -1932, -1919, -1917, -1913, -1912, -1912, -1906,
+        -1905, -1901, -1901, -1901, -1901, -1901, -1901, -1901, -1901, -1901,
+        -1901, -1903, -1906, -1906, -1906, -1906, -1907, -1904, -1901, -1899,
+        -1894, -1896, -1898, -1896, -1898, -1895, -1895, -1897, -1901, -1897,
+        -1896, -1901, -1901, -1906, -1901, -1901, -1900, -1895, -1891, -1886,
+        -1886, -1887, -1888, -1888, -1887, -1886, -1890, -1898, -1897, -1894,
+        -1894, -1894, -1910, -1911, -1912, -1902, -1891, -1891, -1893, -1899,
+        -1903, -1900, -1900, -1905, -1913, -1931, -1928, -1922, -1925, -1936,
+        -1938, -1929, -1916, -1921, -1929, -1927, -1926, -1922, -1931, -1940,
+        -1936, -1943, -1943, -1945, -1946, -1945, -1944, -1947, -1950, -1944,
+        -1943, -1939, -1939, -1937, -1963, -1959, -1954, -1954, -1990, -1985,
+        -1980, -1979, -1987, -1993, -1995, -1992, -1990, -1991, -1992, -1990,
+        -1990, -1995, -1990, -1990, -1990, -1990, -1986, -1986, -1991, -1995,
+        -1998, -1996, -1998, -1995, -1992, -1992, -1996, -1993, -1992, -1995,
+        -1990, -1993, -1994, -1990, -1998, -1995, -1999, -2002, -2007, -2011,
+        -2021, -2026, -2027, -2021, -2017, -2019, -2022, -2027, -2027, -2022,
+        -2022, -2022, -2022, -2022, -2031, -2027, -2030, -2038, -2038, -2038,
+        -2040, -2042, -2041, -2041, -2042, -2043, -2043, -2043, -2043, -2042,
+        -2043, -2053, -2058, -2061, -2069, -2069, -2069, -2069, -2068, -2068,
+        -2069, -2071, -2074, -2076, -2076, -2077, -2079, -2079, -2079, -2080,
+        -2082, -2084, -2087, -2089, -2090, -2090, -2090, -2090, -2090, -2090,
+        -2090, -2090, -2090, -2095, -2100, -2105, -2111, -2111, -2111, -2111,
+        -2111, -2111, -2111, -2116, -2116, -2116, -2121, -2121, -2125, -2120,
+        -2123, -2124, -2125, -2127, -2131, -2131, -2129, -2122, -2127, -2132,
+        -2133, -2132, -2131, -2123, -2123, -2127, -2135, -2130, -2127, -2135,
+        -2137, -2135, -2132, -2132, -2132, -2134, -2127, -2125, -2117, -2112,
+        -2107, -2110, -2108, -2109, -2102, -2104, -2108, -2114, -2112, -2105,
+        -2105, -2105, -2096, -2091, -2079, -2077, -2076, -2073, -2062, -2063,
+        -2069, -2065, -2064, -2063, -2059, -2057, -2050, -2051, -2055, -2053,
+        -2048, -2051, -2048, -2040, -2038, -2036, -2033, -2027, -2018, -2016,
+        -2003, -1993, -1993, -1981, -1975, -1975, -1972, -1975
     };
 
-    static const float fletcher_munson_curve_70_phons[1383] =
+    static const int16_t fletcher_munson_curve_70_phons[1383] =
     {
-        -2.92, -2.94, -2.94, -2.96, -2.94,
-        -2.98, -2.99, -3.00, -3.00, -3.05, -3.01, -3.05, -3.07, -3.06, -3.08,
-        -3.12, -3.10, -3.12, -3.15, -3.13, -3.15, -3.15, -3.15, -3.14, -3.13,
-        -3.14, -3.12, -3.14, -3.12, -3.13, -3.12, -3.12, -3.12, -3.12, -3.17,
-        -3.15, -3.18, -3.20, -3.21, -3.21, -3.26, -3.26, -3.23, -3.26, -3.26,
-        -3.27, -3.31, -3.30, -3.35, -3.33, -3.37, -3.38, -3.40, -3.41, -3.44,
-        -3.44, -3.48, -3.49, -3.53, -3.56, -3.56, -3.59, -3.54, -3.56, -3.53,
-        -3.53, -3.53, -3.52, -3.56, -3.53, -3.56, -3.56, -3.57, -3.59, -3.62,
-        -3.62, -3.65, -3.63, -3.65, -3.70, -3.68, -3.71, -3.74, -3.77, -3.80,
-        -3.77, -3.80, -3.83, -3.86, -3.86, -3.89, -3.89, -3.89, -3.90, -3.89,
-        -3.94, -3.92, -3.95, -3.95, -3.95, -3.95, -3.94, -3.98, -4.00, -4.02,
-        -3.98, -4.01, -4.01, -3.99, -4.03, -4.00, -4.04, -4.06, -4.04, -4.09,
-        -4.12, -4.10, -4.10, -4.10, -4.14, -4.11, -4.13, -4.15, -4.13, -4.16,
-        -4.18, -4.18, -4.18, -4.21, -4.24, -4.22, -4.23, -4.24, -4.24, -4.23,
-        -4.24, -4.27, -4.27, -4.28, -4.30, -4.35, -4.33, -4.36, -4.36, -4.36,
-        -4.39, -4.39, -4.42, -4.45, -4.48, -4.51, -4.52, -4.52, -4.54, -4.55,
-        -4.55, -4.57, -4.56, -4.60, -4.58, -4.60, -4.61, -4.66, -4.68, -4.72,
-        -4.75, -4.74, -4.78, -4.80, -4.81, -4.85, -4.87, -4.87, -4.89, -4.91,
-        -4.93, -4.95, -4.96, -4.98, -5.01, -5.05, -5.08, -5.13, -5.09, -5.13,
-        -5.17, -5.19, -5.19, -5.21, -5.25, -5.28, -5.29, -5.28, -5.31, -5.34,
-        -5.33, -5.35, -5.38, -5.40, -5.45, -5.46, -5.49, -5.52, -5.53, -5.58,
-        -5.58, -5.59, -5.58, -5.61, -5.68, -5.68, -5.67, -5.73, -5.73, -5.70,
-        -5.73, -5.73, -5.75, -5.73, -5.73, -5.78, -5.78, -5.76, -5.76, -5.75,
-        -5.76, -5.78, -5.76, -5.81, -5.80, -5.82, -5.80, -5.82, -5.83, -5.82,
-        -5.85, -5.84, -5.86, -5.85, -5.90, -5.91, -5.97, -6.00, -6.03, -6.05,
-        -6.08, -6.11, -6.14, -6.18, -6.20, -6.23, -6.28, -6.29, -6.32, -6.35,
-        -6.35, -6.41, -6.41, -6.40, -6.41, -6.44, -6.41, -6.44, -6.47, -6.50,
-        -6.56, -6.57, -6.62, -6.62, -6.65, -6.68, -6.74, -6.74, -6.80, -6.80,
-        -6.81, -6.81, -6.86, -6.87, -6.86, -6.87, -6.91, -6.93, -6.97, -7.00,
-        -7.04, -7.09, -7.12, -7.15, -7.15, -7.20, -7.21, -7.21, -7.27, -7.27,
-        -7.29, -7.33, -7.30, -7.33, -7.33, -7.35, -7.38, -7.37, -7.37, -7.39,
-        -7.36, -7.36, -7.34, -7.36, -7.37, -7.42, -7.43, -7.47, -7.49, -7.54,
-        -7.54, -7.54, -7.56, -7.59, -7.57, -7.60, -7.63, -7.60, -7.63, -7.70,
-        -7.72, -7.72, -7.76, -7.80, -7.81, -7.86, -7.87, -7.91, -7.92, -7.93,
-        -7.98, -7.96, -7.93, -7.98, -7.95, -7.95, -7.98, -8.01, -8.04, -8.08,
-        -8.09, -8.07, -8.06, -8.10, -8.07, -8.08, -8.10, -8.10, -8.10, -8.13,
-        -8.12, -8.11, -8.11, -8.16, -8.16, -8.17, -8.17, -8.17, -8.20, -8.23,
-        -8.28, -8.31, -8.34, -8.37, -8.41, -8.43, -8.48, -8.49, -8.49, -8.49,
-        -8.49, -8.55, -8.55, -8.55, -8.55, -8.59, -8.61, -8.64, -8.70, -8.72,
-        -8.75, -8.76, -8.79, -8.81, -8.76, -8.78, -8.80, -8.80, -8.76, -8.79,
-        -8.82, -8.84, -8.87, -8.88, -8.93, -8.93, -8.99, -8.99, -9.05, -9.08,
-        -9.03, -9.02, -9.02, -8.97, -8.99, -9.01, -9.03, -9.05, -9.11, -9.11,
-        -9.14, -9.17, -9.19, -9.21, -9.17, -9.20, -9.23, -9.22, -9.20, -9.23,
-        -9.23, -9.23, -9.28, -9.26, -9.26, -9.29, -9.32, -9.32, -9.35, -9.38,
-        -9.38, -9.41, -9.44, -9.44, -9.48, -9.50, -9.50, -9.44, -9.46, -9.45,
-        -9.45, -9.47, -9.50, -9.53, -9.53, -9.59, -9.59, -9.64, -9.65, -9.70,
-        -9.71, -9.74, -9.76, -9.81, -9.82, -9.86, -9.88, -9.94, -9.97, -9.99,
-        -10.03, -10.06, -10.09, -10.12, -10.15, -10.18, -10.21, -10.24, -10.30, -10.30,
-        -10.36, -10.36, -10.38, -10.40, -10.40, -10.42, -10.43, -10.45, -10.42, -10.45,
-        -10.47, -10.45, -10.49, -10.50, -10.50, -10.50, -10.53, -10.54, -10.60, -10.63,
-        -10.63, -10.63, -10.63, -10.66, -10.68, -10.69, -10.74, -10.74, -10.76, -10.78,
-        -10.83, -10.83, -10.84, -10.87, -10.89, -10.89, -10.92, -10.92, -10.95, -10.95,
-        -10.92, -10.93, -10.95, -10.95, -10.95, -10.89, -10.87, -10.92, -10.92, -10.92,
-        -10.93, -10.98, -10.98, -10.98, -10.98, -10.98, -10.98, -10.98, -10.98, -10.99,
-        -11.04, -11.04, -11.07, -11.11, -11.12, -11.13, -11.13, -11.13, -11.13, -11.19,
-        -11.18, -11.17, -11.23, -11.22, -11.22, -11.28, -11.28, -11.30, -11.34, -11.34,
-        -11.34, -11.34, -11.34, -11.34, -11.34, -11.34, -11.40, -11.40, -11.42, -11.46,
-        -11.47, -11.49, -11.49, -11.52, -11.55, -11.55, -11.56, -11.58, -11.60, -11.61,
-        -11.62, -11.66, -11.66, -11.67, -11.72, -11.73, -11.78, -11.81, -11.84, -11.87,
-        -11.92, -11.93, -11.93, -11.94, -11.99, -11.99, -11.99, -11.99, -11.99, -11.99,
-        -11.99, -12.03, -12.05, -12.07, -12.08, -12.14, -12.14, -12.14, -12.14, -12.20,
-        -12.20, -12.20, -12.21, -12.26, -12.25, -12.24, -12.23, -12.29, -12.28, -12.27,
-        -12.27, -12.31, -12.33, -12.34, -12.35, -12.40, -12.41, -12.41, -12.46, -12.47,
-        -12.50, -12.50, -12.55, -12.55, -12.56, -12.58, -12.61, -12.61, -12.62, -12.64,
-        -12.67, -12.67, -12.68, -12.68, -12.69, -12.70, -12.71, -12.72, -12.72, -12.71,
-        -12.70, -12.70, -12.70, -12.70, -12.71, -12.76, -12.76, -12.76, -12.82, -12.82,
-        -12.82, -12.82, -12.82, -12.82, -12.82, -12.82, -12.83, -12.82, -12.82, -12.85,
-        -12.85, -12.85, -12.85, -12.85, -12.87, -12.88, -12.87, -12.86, -12.86, -12.86,
-        -12.91, -12.91, -12.91, -12.91, -12.97, -12.97, -12.97, -12.97, -12.97, -12.97,
-        -12.97, -12.97, -12.97, -12.97, -12.98, -13.00, -13.00, -13.00, -13.03, -13.04,
-        -13.06, -13.06, -13.05, -13.04, -13.06, -13.06, -13.09, -13.09, -13.09, -13.09,
-        -13.12, -13.12, -13.12, -13.12, -13.18, -13.18, -13.18, -13.18, -13.18, -13.18,
-        -13.18, -13.18, -13.18, -13.19, -13.24, -13.24, -13.27, -13.30, -13.30, -13.32,
-        -13.33, -13.34, -13.33, -13.36, -13.36, -13.36, -13.36, -13.35, -13.35, -13.35,
-        -13.33, -13.33, -13.30, -13.30, -13.31, -13.31, -13.32, -13.32, -13.32, -13.30,
-        -13.34, -13.36, -13.36, -13.34, -13.31, -13.30, -13.30, -13.30, -13.30, -13.29,
-        -13.28, -13.27, -13.24, -13.24, -13.24, -13.21, -13.21, -13.21, -13.21, -13.21,
-        -13.21, -13.21, -13.21, -13.21, -13.21, -13.21, -13.21, -13.21, -13.18, -13.18,
-        -13.18, -13.18, -13.15, -13.12, -13.12, -13.09, -13.09, -13.06, -13.06, -13.06,
-        -13.06, -13.06, -13.09, -13.06, -13.06, -13.03, -13.03, -13.00, -12.99, -12.99,
-        -12.95, -12.88, -12.87, -12.85, -12.85, -12.83, -12.82, -12.82, -12.79, -12.82,
-        -12.82, -12.85, -12.85, -12.85, -12.85, -12.85, -12.85, -12.80, -12.77, -12.77,
-        -12.78, -12.73, -12.73, -12.73, -12.72, -12.72, -12.72, -12.71, -12.70, -12.70,
-        -12.70, -12.67, -12.64, -12.64, -12.59, -12.59, -12.59, -12.59, -12.58, -12.58,
-        -12.58, -12.58, -12.58, -12.58, -12.58, -12.58, -12.58, -12.58, -12.58, -12.59,
-        -12.64, -12.61, -12.62, -12.67, -12.65, -12.64, -12.67, -12.67, -12.67, -12.67,
-        -12.67, -12.67, -12.65, -12.65, -12.64, -12.62, -12.61, -12.61, -12.61, -12.59,
-        -12.59, -12.59, -12.58, -12.58, -12.56, -12.53, -12.53, -12.50, -12.47, -12.47,
-        -12.48, -12.49, -12.49, -12.45, -12.44, -12.44, -12.44, -12.43, -12.41, -12.40,
-        -12.38, -12.38, -12.37, -12.34, -12.29, -12.24, -12.23, -12.23, -12.23, -12.23,
-        -12.23, -12.23, -12.22, -12.17, -12.17, -12.17, -12.14, -12.11, -12.11, -12.11,
-        -12.11, -12.11, -12.11, -12.11, -12.10, -12.07, -12.03, -12.02, -12.00, -11.98,
-        -11.97, -11.96, -11.96, -11.96, -11.91, -11.90, -11.90, -11.90, -11.87, -11.84,
-        -11.84, -11.84, -11.84, -11.84, -11.83, -11.78, -11.76, -11.75, -11.75, -11.75,
-        -11.75, -11.75, -11.75, -11.75, -11.74, -11.70, -11.68, -11.69, -11.66, -11.66,
-        -11.63, -11.61, -11.62, -11.60, -11.60, -11.56, -11.55, -11.60, -11.61, -11.63,
-        -11.66, -11.67, -11.69, -11.69, -11.69, -11.66, -11.63, -11.66, -11.64, -11.63,
-        -11.64, -11.69, -11.69, -11.69, -11.73, -11.75, -11.74, -11.75, -11.75, -11.77,
-        -11.78, -11.78, -11.79, -11.81, -11.79, -11.77, -11.81, -11.81, -11.79, -11.82,
-        -11.82, -11.80, -11.84, -11.82, -11.82, -11.84, -11.87, -11.87, -11.87, -11.87,
-        -11.84, -11.85, -11.82, -11.78, -11.77, -11.78, -11.77, -11.78, -11.82, -11.79,
-        -11.78, -11.79, -11.77, -11.75, -11.74, -11.73, -11.69, -11.64, -11.66, -11.65,
-        -11.58, -11.58, -11.55, -11.52, -11.52, -11.48, -11.49, -11.51, -11.50, -11.52,
-        -11.54, -11.52, -11.55, -11.55, -11.52, -11.51, -11.48, -11.45, -11.43, -11.40,
-        -11.37, -11.39, -11.40, -11.41, -11.42, -11.40, -11.37, -11.36, -11.34, -11.31,
-        -11.31, -11.28, -11.25, -11.25, -11.19, -11.17, -11.13, -11.10, -11.10, -11.10,
-        -11.10, -11.10, -11.10, -11.10, -11.04, -11.04, -11.04, -10.99, -11.01, -11.01,
-        -11.01, -11.01, -11.01, -11.01, -11.01, -11.01, -11.01, -11.01, -11.01, -11.01,
-        -10.99, -10.95, -10.94, -10.92, -10.85, -10.84, -10.82, -10.80, -10.80, -10.78,
-        -10.77, -10.75, -10.75, -10.75, -10.75, -10.75, -10.75, -10.75, -10.75, -10.75,
-        -10.75, -10.75, -10.77, -10.77, -10.77, -10.77, -10.78, -10.76, -10.75, -10.73,
-        -10.71, -10.71, -10.73, -10.71, -10.73, -10.71, -10.71, -10.72, -10.74, -10.72,
-        -10.72, -10.74, -10.74, -10.77, -10.75, -10.75, -10.74, -10.71, -10.69, -10.66,
-        -10.66, -10.66, -10.67, -10.67, -10.66, -10.66, -10.68, -10.73, -10.72, -10.71,
-        -10.71, -10.71, -10.79, -10.80, -10.80, -10.75, -10.69, -10.69, -10.70, -10.73,
-        -10.76, -10.74, -10.74, -10.77, -10.81, -10.92, -10.90, -10.86, -10.88, -10.94,
-        -10.95, -10.90, -10.83, -10.86, -10.90, -10.89, -10.89, -10.86, -10.92, -10.96,
-        -10.94, -10.98, -10.98, -10.99, -11.00, -10.99, -10.99, -11.01, -11.02, -10.99,
-        -10.98, -10.96, -10.96, -10.95, -11.09, -11.07, -11.04, -11.04, -11.25, -11.22,
-        -11.19, -11.19, -11.23, -11.26, -11.28, -11.26, -11.25, -11.26, -11.26, -11.25,
-        -11.25, -11.28, -11.25, -11.25, -11.25, -11.25, -11.23, -11.23, -11.25, -11.28,
-        -11.29, -11.28, -11.29, -11.28, -11.26, -11.26, -11.28, -11.27, -11.26, -11.28,
-        -11.25, -11.27, -11.27, -11.25, -11.29, -11.28, -11.30, -11.31, -11.34, -11.37,
-        -11.42, -11.45, -11.45, -11.42, -11.40, -11.41, -11.43, -11.45, -11.45, -11.43,
-        -11.43, -11.43, -11.43, -11.43, -11.48, -11.46, -11.47, -11.52, -11.52, -11.52,
-        -11.53, -11.54, -11.54, -11.53, -11.54, -11.55, -11.55, -11.55, -11.55, -11.54,
-        -11.55, -11.60, -11.63, -11.65, -11.69, -11.69, -11.69, -11.69, -11.69, -11.69,
-        -11.69, -11.71, -11.72, -11.73, -11.74, -11.74, -11.75, -11.75, -11.75, -11.75,
-        -11.77, -11.78, -11.79, -11.81, -11.81, -11.81, -11.81, -11.81, -11.81, -11.81,
-        -11.81, -11.81, -11.81, -11.84, -11.87, -11.90, -11.93, -11.93, -11.93, -11.93,
-        -11.93, -11.93, -11.93, -11.96, -11.96, -11.96, -11.99, -11.99, -12.01, -11.98,
-        -12.00, -12.01, -12.01, -12.02, -12.05, -12.05, -12.04, -12.00, -12.02, -12.05,
-        -12.06, -12.05, -12.04, -12.00, -12.00, -12.02, -12.07, -12.04, -12.02, -12.07,
-        -12.08, -12.07, -12.05, -12.05, -12.05, -12.06, -12.02, -12.01, -11.96, -11.94,
-        -11.91, -11.93, -11.91, -11.92, -11.88, -11.89, -11.92, -11.95, -11.94, -11.90,
-        -11.90, -11.90, -11.85, -11.82, -11.75, -11.74, -11.73, -11.72, -11.66, -11.66,
-        -11.69, -11.67, -11.67, -11.66, -11.64, -11.63, -11.59, -11.59, -11.61, -11.60,
-        -11.58, -11.59, -11.57, -11.53, -11.52, -11.51, -11.49, -11.46, -11.41, -11.39,
-        -11.32, -11.26, -11.27, -11.20, -11.16, -11.16, -11.15, -11.16
+        -292, -294, -294, -296, -294,
+        -298, -299, -300, -300, -305, -301, -305, -307, -306, -308,
+        -312, -310, -312, -315, -313, -315, -315, -315, -314, -313,
+        -314, -312, -314, -312, -313, -312, -312, -312, -312, -317,
+        -315, -318, -320, -321, -321, -326, -326, -323, -326, -326,
+        -327, -331, -330, -335, -333, -337, -338, -340, -341, -344,
+        -344, -348, -349, -353, -356, -356, -359, -354, -356, -353,
+        -353, -353, -352, -356, -353, -356, -356, -357, -359, -362,
+        -362, -365, -363, -365, -370, -368, -371, -374, -377, -380,
+        -377, -380, -383, -386, -386, -389, -389, -389, -390, -389,
+        -394, -392, -395, -395, -395, -395, -394, -398, -400, -402,
+        -398, -401, -401, -399, -403, -400, -404, -406, -404, -409,
+        -412, -410, -410, -410, -414, -411, -413, -415, -413, -416,
+        -418, -418, -418, -421, -424, -422, -423, -424, -424, -423,
+        -424, -427, -427, -428, -430, -435, -433, -436, -436, -436,
+        -439, -439, -442, -445, -448, -451, -452, -452, -454, -455,
+        -455, -457, -456, -460, -458, -460, -461, -466, -468, -472,
+        -475, -474, -478, -480, -481, -485, -487, -487, -489, -491,
+        -493, -495, -496, -498, -501, -505, -508, -513, -509, -513,
+        -517, -519, -519, -521, -525, -528, -529, -528, -531, -534,
+        -533, -535, -538, -540, -545, -546, -549, -552, -553, -558,
+        -558, -559, -558, -561, -568, -568, -567, -573, -573, -570,
+        -573, -573, -575, -573, -573, -578, -578, -576, -576, -575,
+        -576, -578, -576, -581, -580, -582, -580, -582, -583, -582,
+        -585, -584, -586, -585, -590, -591, -597, -600, -603, -605,
+        -608, -611, -614, -618, -620, -623, -628, -629, -632, -635,
+        -635, -641, -641, -640, -641, -644, -641, -644, -647, -650,
+        -656, -657, -662, -662, -665, -668, -674, -674, -680, -680,
+        -681, -681, -686, -687, -686, -687, -691, -693, -697, -700,
+        -704, -709, -712, -715, -715, -720, -721, -721, -727, -727,
+        -729, -733, -730, -733, -733, -735, -738, -737, -737, -739,
+        -736, -736, -734, -736, -737, -742, -743, -747, -749, -754,
+        -754, -754, -756, -759, -757, -760, -763, -760, -763, -770,
+        -772, -772, -776, -780, -781, -786, -787, -791, -792, -793,
+        -798, -796, -793, -798, -795, -795, -798, -801, -804, -808,
+        -809, -807, -806, -810, -807, -808, -810, -810, -810, -813,
+        -812, -811, -811, -816, -816, -817, -817, -817, -820, -823,
+        -828, -831, -834, -837, -841, -843, -848, -849, -849, -849,
+        -849, -855, -855, -855, -855, -859, -861, -864, -870, -872,
+        -875, -876, -879, -881, -876, -878, -880, -880, -876, -879,
+        -882, -884, -887, -888, -893, -893, -899, -899, -905, -908,
+        -903, -902, -902, -897, -899, -901, -903, -905, -911, -911,
+        -914, -917, -919, -921, -917, -920, -923, -922, -920, -923,
+        -923, -923, -928, -926, -926, -929, -932, -932, -935, -938,
+        -938, -941, -944, -944, -948, -950, -950, -944, -946, -945,
+        -945, -947, -950, -953, -953, -959, -959, -964, -965, -970,
+        -971, -974, -976, -981, -982, -986, -988, -994, -997, -999,
+        -1003, -1006, -1009, -1012, -1015, -1018, -1021, -1024, -1030, -1030,
+        -1036, -1036, -1038, -1040, -1040, -1042, -1043, -1045, -1042, -1045,
+        -1047, -1045, -1049, -1050, -1050, -1050, -1053, -1054, -1060, -1063,
+        -1063, -1063, -1063, -1066, -1068, -1069, -1074, -1074, -1076, -1078,
+        -1083, -1083, -1084, -1087, -1089, -1089, -1092, -1092, -1095, -1095,
+        -1092, -1093, -1095, -1095, -1095, -1089, -1087, -1092, -1092, -1092,
+        -1093, -1098, -1098, -1098, -1098, -1098, -1098, -1098, -1098, -1099,
+        -1104, -1104, -1107, -1111, -1112, -1113, -1113, -1113, -1113, -1119,
+        -1118, -1117, -1123, -1122, -1122, -1128, -1128, -1130, -1134, -1134,
+        -1134, -1134, -1134, -1134, -1134, -1134, -1140, -1140, -1142, -1146,
+        -1147, -1149, -1149, -1152, -1155, -1155, -1156, -1158, -1160, -1161,
+        -1162, -1166, -1166, -1167, -1172, -1173, -1178, -1181, -1184, -1187,
+        -1192, -1193, -1193, -1194, -1199, -1199, -1199, -1199, -1199, -1199,
+        -1199, -1203, -1205, -1207, -1208, -1214, -1214, -1214, -1214, -1220,
+        -1220, -1220, -1221, -1226, -1225, -1224, -1223, -1229, -1228, -1227,
+        -1227, -1231, -1233, -1234, -1235, -1240, -1241, -1241, -1246, -1247,
+        -1250, -1250, -1255, -1255, -1256, -1258, -1261, -1261, -1262, -1264,
+        -1267, -1267, -1268, -1268, -1269, -1270, -1271, -1272, -1272, -1271,
+        -1270, -1270, -1270, -1270, -1271, -1276, -1276, -1276, -1282, -1282,
+        -1282, -1282, -1282, -1282, -1282, -1282, -1283, -1282, -1282, -1285,
+        -1285, -1285, -1285, -1285, -1287, -1288, -1287, -1286, -1286, -1286,
+        -1291, -1291, -1291, -1291, -1297, -1297, -1297, -1297, -1297, -1297,
+        -1297, -1297, -1297, -1297, -1298, -1300, -1300, -1300, -1303, -1304,
+        -1306, -1306, -1305, -1304, -1306, -1306, -1309, -1309, -1309, -1309,
+        -1312, -1312, -1312, -1312, -1318, -1318, -1318, -1318, -1318, -1318,
+        -1318, -1318, -1318, -1319, -1324, -1324, -1327, -1330, -1330, -1332,
+        -1333, -1334, -1333, -1336, -1336, -1336, -1336, -1335, -1335, -1335,
+        -1333, -1333, -1330, -1330, -1331, -1331, -1332, -1332, -1332, -1330,
+        -1334, -1336, -1336, -1334, -1331, -1330, -1330, -1330, -1330, -1329,
+        -1328, -1327, -1324, -1324, -1324, -1321, -1321, -1321, -1321, -1321,
+        -1321, -1321, -1321, -1321, -1321, -1321, -1321, -1321, -1318, -1318,
+        -1318, -1318, -1315, -1312, -1312, -1309, -1309, -1306, -1306, -1306,
+        -1306, -1306, -1309, -1306, -1306, -1303, -1303, -1300, -1299, -1299,
+        -1295, -1288, -1287, -1285, -1285, -1283, -1282, -1282, -1279, -1282,
+        -1282, -1285, -1285, -1285, -1285, -1285, -1285, -1280, -1277, -1277,
+        -1278, -1273, -1273, -1273, -1272, -1272, -1272, -1271, -1270, -1270,
+        -1270, -1267, -1264, -1264, -1259, -1259, -1259, -1259, -1258, -1258,
+        -1258, -1258, -1258, -1258, -1258, -1258, -1258, -1258, -1258, -1259,
+        -1264, -1261, -1262, -1267, -1265, -1264, -1267, -1267, -1267, -1267,
+        -1267, -1267, -1265, -1265, -1264, -1262, -1261, -1261, -1261, -1259,
+        -1259, -1259, -1258, -1258, -1256, -1253, -1253, -1250, -1247, -1247,
+        -1248, -1249, -1249, -1245, -1244, -1244, -1244, -1243, -1241, -1240,
+        -1238, -1238, -1237, -1234, -1229, -1224, -1223, -1223, -1223, -1223,
+        -1223, -1223, -1222, -1217, -1217, -1217, -1214, -1211, -1211, -1211,
+        -1211, -1211, -1211, -1211, -1210, -1207, -1203, -1202, -1200, -1198,
+        -1197, -1196, -1196, -1196, -1191, -1190, -1190, -1190, -1187, -1184,
+        -1184, -1184, -1184, -1184, -1183, -1178, -1176, -1175, -1175, -1175,
+        -1175, -1175, -1175, -1175, -1174, -1170, -1168, -1169, -1166, -1166,
+        -1163, -1161, -1162, -1160, -1160, -1156, -1155, -1160, -1161, -1163,
+        -1166, -1167, -1169, -1169, -1169, -1166, -1163, -1166, -1164, -1163,
+        -1164, -1169, -1169, -1169, -1173, -1175, -1174, -1175, -1175, -1177,
+        -1178, -1178, -1179, -1181, -1179, -1177, -1181, -1181, -1179, -1182,
+        -1182, -1180, -1184, -1182, -1182, -1184, -1187, -1187, -1187, -1187,
+        -1184, -1185, -1182, -1178, -1177, -1178, -1177, -1178, -1182, -1179,
+        -1178, -1179, -1177, -1175, -1174, -1173, -1169, -1164, -1166, -1165,
+        -1158, -1158, -1155, -1152, -1152, -1148, -1149, -1151, -1150, -1152,
+        -1154, -1152, -1155, -1155, -1152, -1151, -1148, -1145, -1143, -1140,
+        -1137, -1139, -1140, -1141, -1142, -1140, -1137, -1136, -1134, -1131,
+        -1131, -1128, -1125, -1125, -1119, -1117, -1113, -1110, -1110, -1110,
+        -1110, -1110, -1110, -1110, -1104, -1104, -1104, -1099, -1101, -1101,
+        -1101, -1101, -1101, -1101, -1101, -1101, -1101, -1101, -1101, -1101,
+        -1099, -1095, -1094, -1092, -1085, -1084, -1082, -1080, -1080, -1078,
+        -1077, -1075, -1075, -1075, -1075, -1075, -1075, -1075, -1075, -1075,
+        -1075, -1075, -1077, -1077, -1077, -1077, -1078, -1076, -1075, -1073,
+        -1071, -1071, -1073, -1071, -1073, -1071, -1071, -1072, -1074, -1072,
+        -1072, -1074, -1074, -1077, -1075, -1075, -1074, -1071, -1069, -1066,
+        -1066, -1066, -1067, -1067, -1066, -1066, -1068, -1073, -1072, -1071,
+        -1071, -1071, -1079, -1080, -1080, -1075, -1069, -1069, -1070, -1073,
+        -1076, -1074, -1074, -1077, -1081, -1092, -1090, -1086, -1088, -1094,
+        -1095, -1090, -1083, -1086, -1090, -1089, -1089, -1086, -1092, -1096,
+        -1094, -1098, -1098, -1099, -1100, -1099, -1099, -1101, -1102, -1099,
+        -1098, -1096, -1096, -1095, -1109, -1107, -1104, -1104, -1125, -1122,
+        -1119, -1119, -1123, -1126, -1128, -1126, -1125, -1126, -1126, -1125,
+        -1125, -1128, -1125, -1125, -1125, -1125, -1123, -1123, -1125, -1128,
+        -1129, -1128, -1129, -1128, -1126, -1126, -1128, -1127, -1126, -1128,
+        -1125, -1127, -1127, -1125, -1129, -1128, -1130, -1131, -1134, -1137,
+        -1142, -1145, -1145, -1142, -1140, -1141, -1143, -1145, -1145, -1143,
+        -1143, -1143, -1143, -1143, -1148, -1146, -1147, -1152, -1152, -1152,
+        -1153, -1154, -1154, -1153, -1154, -1155, -1155, -1155, -1155, -1154,
+        -1155, -1160, -1163, -1165, -1169, -1169, -1169, -1169, -1169, -1169,
+        -1169, -1171, -1172, -1173, -1174, -1174, -1175, -1175, -1175, -1175,
+        -1177, -1178, -1179, -1181, -1181, -1181, -1181, -1181, -1181, -1181,
+        -1181, -1181, -1181, -1184, -1187, -1190, -1193, -1193, -1193, -1193,
+        -1193, -1193, -1193, -1196, -1196, -1196, -1199, -1199, -1201, -1198,
+        -1200, -1201, -1201, -1202, -1205, -1205, -1204, -1200, -1202, -1205,
+        -1206, -1205, -1204, -1200, -1200, -1202, -1207, -1204, -1202, -1207,
+        -1208, -1207, -1205, -1205, -1205, -1206, -1202, -1201, -1196, -1194,
+        -1191, -1193, -1191, -1192, -1188, -1189, -1192, -1195, -1194, -1190,
+        -1190, -1190, -1185, -1182, -1175, -1174, -1173, -1172, -1166, -1166,
+        -1169, -1167, -1167, -1166, -1164, -1163, -1159, -1159, -1161, -1160,
+        -1158, -1159, -1157, -1153, -1152, -1151, -1149, -1146, -1141, -1139,
+        -1132, -1126, -1127, -1120, -1116, -1116, -1115, -1116
     };
 
-    static const float fletcher_munson_curve_80_phons[1383] =
+    static const int16_t fletcher_munson_curve_80_phons[1383] =
     {
-        -0.67, -0.68, -0.68, -0.68, -0.68,
-        -0.69, -0.69, -0.69, -0.69, -0.70, -0.69, -0.70, -0.71, -0.71, -0.71,
-        -0.72, -0.71, -0.72, -0.73, -0.72, -0.73, -0.73, -0.73, -0.73, -0.72,
-        -0.73, -0.72, -0.72, -0.72, -0.72, -0.72, -0.72, -0.72, -0.72, -0.73,
-        -0.73, -0.73, -0.74, -0.74, -0.74, -0.75, -0.75, -0.75, -0.75, -0.75,
-        -0.75, -0.76, -0.76, -0.77, -0.77, -0.78, -0.78, -0.78, -0.79, -0.79,
-        -0.79, -0.80, -0.80, -0.81, -0.82, -0.82, -0.83, -0.82, -0.82, -0.82,
-        -0.82, -0.82, -0.81, -0.82, -0.82, -0.82, -0.82, -0.82, -0.83, -0.84,
-        -0.84, -0.84, -0.84, -0.84, -0.85, -0.85, -0.86, -0.86, -0.87, -0.88,
-        -0.87, -0.88, -0.88, -0.89, -0.89, -0.90, -0.90, -0.90, -0.90, -0.90,
-        -0.91, -0.90, -0.91, -0.91, -0.91, -0.91, -0.91, -0.92, -0.92, -0.93,
-        -0.92, -0.92, -0.93, -0.92, -0.93, -0.92, -0.93, -0.94, -0.93, -0.94,
-        -0.95, -0.95, -0.95, -0.95, -0.96, -0.95, -0.95, -0.96, -0.95, -0.96,
-        -0.97, -0.96, -0.97, -0.97, -0.98, -0.97, -0.98, -0.98, -0.98, -0.98,
-        -0.98, -0.99, -0.99, -0.99, -0.99, -1.00, -1.00, -1.01, -1.01, -1.01,
-        -1.01, -1.01, -1.02, -1.03, -1.03, -1.04, -1.04, -1.04, -1.05, -1.05,
-        -1.05, -1.05, -1.05, -1.06, -1.06, -1.06, -1.06, -1.08, -1.08, -1.09,
-        -1.10, -1.09, -1.10, -1.11, -1.11, -1.12, -1.12, -1.12, -1.13, -1.13,
-        -1.14, -1.14, -1.14, -1.15, -1.16, -1.16, -1.17, -1.18, -1.18, -1.18,
-        -1.19, -1.20, -1.20, -1.20, -1.21, -1.22, -1.22, -1.22, -1.23, -1.23,
-        -1.23, -1.23, -1.24, -1.25, -1.26, -1.26, -1.27, -1.27, -1.28, -1.29,
-        -1.29, -1.29, -1.29, -1.30, -1.31, -1.31, -1.31, -1.32, -1.32, -1.32,
-        -1.32, -1.32, -1.33, -1.32, -1.32, -1.33, -1.33, -1.33, -1.33, -1.33,
-        -1.33, -1.33, -1.33, -1.34, -1.34, -1.34, -1.34, -1.34, -1.34, -1.34,
-        -1.35, -1.35, -1.35, -1.35, -1.36, -1.36, -1.38, -1.38, -1.39, -1.40,
-        -1.40, -1.41, -1.42, -1.43, -1.43, -1.44, -1.45, -1.45, -1.46, -1.47,
-        -1.47, -1.48, -1.48, -1.48, -1.48, -1.49, -1.48, -1.49, -1.49, -1.50,
-        -1.51, -1.52, -1.53, -1.53, -1.53, -1.54, -1.55, -1.56, -1.57, -1.57,
-        -1.57, -1.57, -1.58, -1.59, -1.58, -1.58, -1.60, -1.60, -1.61, -1.62,
-        -1.62, -1.64, -1.64, -1.65, -1.65, -1.66, -1.66, -1.66, -1.68, -1.68,
-        -1.68, -1.69, -1.69, -1.69, -1.69, -1.70, -1.70, -1.70, -1.70, -1.71,
-        -1.70, -1.70, -1.69, -1.70, -1.70, -1.71, -1.71, -1.72, -1.73, -1.74,
-        -1.74, -1.74, -1.74, -1.75, -1.75, -1.75, -1.76, -1.75, -1.76, -1.78,
-        -1.78, -1.78, -1.79, -1.80, -1.80, -1.81, -1.82, -1.83, -1.83, -1.83,
-        -1.84, -1.84, -1.83, -1.84, -1.84, -1.83, -1.84, -1.85, -1.86, -1.86,
-        -1.87, -1.86, -1.86, -1.87, -1.86, -1.87, -1.87, -1.87, -1.87, -1.88,
-        -1.87, -1.87, -1.87, -1.88, -1.88, -1.89, -1.89, -1.89, -1.89, -1.90,
-        -1.91, -1.92, -1.92, -1.93, -1.94, -1.95, -1.96, -1.96, -1.96, -1.96,
-        -1.96, -1.97, -1.97, -1.97, -1.97, -1.98, -1.99, -1.99, -2.01, -2.01,
-        -2.02, -2.02, -2.03, -2.03, -2.02, -2.03, -2.03, -2.03, -2.02, -2.03,
-        -2.03, -2.04, -2.05, -2.05, -2.06, -2.06, -2.07, -2.08, -2.09, -2.10,
-        -2.08, -2.08, -2.08, -2.07, -2.07, -2.08, -2.08, -2.09, -2.10, -2.10,
-        -2.11, -2.12, -2.12, -2.13, -2.12, -2.12, -2.13, -2.13, -2.12, -2.13,
-        -2.13, -2.13, -2.14, -2.14, -2.14, -2.14, -2.15, -2.15, -2.16, -2.16,
-        -2.16, -2.17, -2.18, -2.18, -2.19, -2.19, -2.19, -2.18, -2.18, -2.18,
-        -2.18, -2.19, -2.19, -2.20, -2.20, -2.21, -2.21, -2.23, -2.23, -2.24,
-        -2.24, -2.25, -2.25, -2.26, -2.27, -2.28, -2.28, -2.29, -2.30, -2.31,
-        -2.31, -2.32, -2.33, -2.34, -2.34, -2.35, -2.36, -2.36, -2.38, -2.38,
-        -2.39, -2.39, -2.40, -2.40, -2.40, -2.40, -2.41, -2.41, -2.40, -2.41,
-        -2.42, -2.41, -2.42, -2.42, -2.42, -2.42, -2.43, -2.43, -2.45, -2.45,
-        -2.45, -2.45, -2.45, -2.46, -2.47, -2.47, -2.48, -2.48, -2.48, -2.49,
-        -2.50, -2.50, -2.50, -2.51, -2.51, -2.51, -2.52, -2.52, -2.53, -2.53,
-        -2.52, -2.52, -2.53, -2.53, -2.53, -2.51, -2.51, -2.52, -2.52, -2.52,
-        -2.52, -2.53, -2.53, -2.53, -2.53, -2.53, -2.53, -2.53, -2.53, -2.54,
-        -2.55, -2.55, -2.55, -2.56, -2.57, -2.57, -2.57, -2.57, -2.57, -2.58,
-        -2.58, -2.58, -2.59, -2.59, -2.59, -2.60, -2.60, -2.61, -2.62, -2.62,
-        -2.62, -2.62, -2.62, -2.62, -2.62, -2.62, -2.63, -2.63, -2.64, -2.64,
-        -2.65, -2.65, -2.65, -2.66, -2.66, -2.66, -2.67, -2.67, -2.68, -2.68,
-        -2.68, -2.69, -2.69, -2.69, -2.71, -2.71, -2.72, -2.73, -2.73, -2.74,
-        -2.75, -2.75, -2.75, -2.75, -2.77, -2.77, -2.77, -2.77, -2.77, -2.77,
-        -2.77, -2.78, -2.78, -2.78, -2.79, -2.80, -2.80, -2.80, -2.80, -2.82,
-        -2.82, -2.82, -2.82, -2.83, -2.83, -2.83, -2.82, -2.84, -2.83, -2.83,
-        -2.83, -2.84, -2.85, -2.85, -2.85, -2.86, -2.86, -2.86, -2.88, -2.88,
-        -2.88, -2.88, -2.90, -2.90, -2.90, -2.90, -2.91, -2.91, -2.91, -2.92,
-        -2.92, -2.92, -2.93, -2.93, -2.93, -2.93, -2.93, -2.94, -2.94, -2.93,
-        -2.93, -2.93, -2.93, -2.93, -2.93, -2.94, -2.95, -2.95, -2.96, -2.96,
-        -2.96, -2.96, -2.96, -2.96, -2.96, -2.96, -2.96, -2.96, -2.96, -2.97,
-        -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97,
-        -2.98, -2.98, -2.98, -2.98, -2.99, -2.99, -2.99, -2.99, -2.99, -2.99,
-        -2.99, -2.99, -2.99, -2.99, -3.00, -3.00, -3.00, -3.00, -3.01, -3.01,
-        -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.02, -3.02, -3.02, -3.02,
-        -3.03, -3.03, -3.03, -3.03, -3.04, -3.04, -3.04, -3.04, -3.04, -3.04,
-        -3.04, -3.04, -3.04, -3.04, -3.05, -3.05, -3.06, -3.07, -3.07, -3.07,
-        -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.07, -3.07, -3.07, -3.07, -3.07, -3.07, -3.07, -3.07,
-        -3.08, -3.08, -3.08, -3.08, -3.07, -3.07, -3.07, -3.07, -3.07, -3.07,
-        -3.06, -3.06, -3.05, -3.05, -3.05, -3.05, -3.05, -3.05, -3.05, -3.05,
-        -3.05, -3.05, -3.05, -3.05, -3.05, -3.05, -3.05, -3.05, -3.04, -3.04,
-        -3.04, -3.04, -3.03, -3.03, -3.03, -3.02, -3.02, -3.01, -3.01, -3.01,
-        -3.01, -3.01, -3.02, -3.01, -3.01, -3.01, -3.01, -3.00, -3.00, -3.00,
-        -2.99, -2.97, -2.97, -2.97, -2.96, -2.96, -2.96, -2.96, -2.95, -2.96,
-        -2.96, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.95, -2.95, -2.95,
-        -2.95, -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.93, -2.93, -2.93,
-        -2.93, -2.92, -2.92, -2.92, -2.91, -2.90, -2.91, -2.90, -2.90, -2.90,
-        -2.90, -2.90, -2.90, -2.90, -2.90, -2.90, -2.90, -2.90, -2.90, -2.90,
-        -2.92, -2.91, -2.91, -2.92, -2.92, -2.92, -2.92, -2.92, -2.92, -2.92,
-        -2.92, -2.92, -2.92, -2.92, -2.92, -2.91, -2.91, -2.91, -2.91, -2.91,
-        -2.90, -2.90, -2.90, -2.90, -2.90, -2.89, -2.89, -2.88, -2.88, -2.88,
-        -2.88, -2.88, -2.88, -2.87, -2.87, -2.87, -2.87, -2.87, -2.86, -2.86,
-        -2.86, -2.86, -2.86, -2.85, -2.84, -2.82, -2.82, -2.82, -2.82, -2.82,
-        -2.82, -2.82, -2.82, -2.81, -2.81, -2.81, -2.80, -2.79, -2.79, -2.79,
-        -2.79, -2.79, -2.79, -2.79, -2.79, -2.79, -2.78, -2.77, -2.77, -2.76,
-        -2.76, -2.76, -2.76, -2.76, -2.75, -2.75, -2.75, -2.75, -2.74, -2.73,
-        -2.73, -2.73, -2.73, -2.73, -2.73, -2.72, -2.71, -2.71, -2.71, -2.71,
-        -2.71, -2.71, -2.71, -2.71, -2.71, -2.70, -2.70, -2.70, -2.69, -2.69,
-        -2.68, -2.68, -2.68, -2.68, -2.68, -2.67, -2.67, -2.68, -2.68, -2.68,
-        -2.69, -2.69, -2.70, -2.70, -2.70, -2.69, -2.68, -2.69, -2.69, -2.68,
-        -2.69, -2.70, -2.70, -2.70, -2.71, -2.71, -2.71, -2.71, -2.71, -2.72,
-        -2.72, -2.72, -2.72, -2.73, -2.72, -2.72, -2.73, -2.72, -2.72, -2.73,
-        -2.73, -2.72, -2.73, -2.73, -2.73, -2.73, -2.74, -2.74, -2.74, -2.74,
-        -2.73, -2.73, -2.73, -2.72, -2.72, -2.72, -2.72, -2.72, -2.73, -2.72,
-        -2.72, -2.72, -2.72, -2.71, -2.71, -2.71, -2.70, -2.69, -2.69, -2.69,
-        -2.67, -2.67, -2.67, -2.66, -2.66, -2.65, -2.65, -2.66, -2.65, -2.66,
-        -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.65, -2.64, -2.64, -2.63,
-        -2.62, -2.63, -2.63, -2.63, -2.63, -2.63, -2.62, -2.62, -2.62, -2.61,
-        -2.61, -2.60, -2.60, -2.60, -2.58, -2.58, -2.57, -2.56, -2.56, -2.56,
-        -2.56, -2.56, -2.56, -2.56, -2.55, -2.55, -2.55, -2.54, -2.54, -2.54,
-        -2.54, -2.54, -2.54, -2.54, -2.54, -2.54, -2.54, -2.54, -2.54, -2.54,
-        -2.54, -2.53, -2.53, -2.52, -2.50, -2.50, -2.50, -2.49, -2.49, -2.49,
-        -2.48, -2.48, -2.48, -2.48, -2.48, -2.48, -2.48, -2.48, -2.48, -2.48,
-        -2.48, -2.48, -2.49, -2.49, -2.49, -2.49, -2.49, -2.48, -2.48, -2.48,
-        -2.47, -2.47, -2.48, -2.47, -2.48, -2.47, -2.47, -2.47, -2.48, -2.47,
-        -2.47, -2.48, -2.48, -2.49, -2.48, -2.48, -2.48, -2.47, -2.47, -2.46,
-        -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.47, -2.48, -2.47, -2.47,
-        -2.47, -2.47, -2.49, -2.49, -2.49, -2.48, -2.47, -2.47, -2.47, -2.48,
-        -2.48, -2.48, -2.48, -2.49, -2.49, -2.52, -2.52, -2.51, -2.51, -2.53,
-        -2.53, -2.52, -2.50, -2.51, -2.52, -2.51, -2.51, -2.51, -2.52, -2.53,
-        -2.52, -2.53, -2.53, -2.54, -2.54, -2.54, -2.54, -2.54, -2.54, -2.54,
-        -2.53, -2.53, -2.53, -2.53, -2.56, -2.56, -2.55, -2.55, -2.60, -2.59,
-        -2.58, -2.58, -2.59, -2.60, -2.60, -2.60, -2.60, -2.60, -2.60, -2.60,
-        -2.60, -2.60, -2.60, -2.60, -2.60, -2.60, -2.59, -2.59, -2.60, -2.60,
-        -2.61, -2.60, -2.61, -2.60, -2.60, -2.60, -2.60, -2.60, -2.60, -2.60,
-        -2.60, -2.60, -2.60, -2.60, -2.61, -2.60, -2.61, -2.61, -2.62, -2.62,
-        -2.64, -2.64, -2.64, -2.64, -2.63, -2.63, -2.64, -2.64, -2.64, -2.64,
-        -2.64, -2.64, -2.64, -2.64, -2.65, -2.64, -2.65, -2.66, -2.66, -2.66,
-        -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66,
-        -2.67, -2.68, -2.68, -2.69, -2.70, -2.70, -2.70, -2.70, -2.70, -2.70,
-        -2.70, -2.70, -2.71, -2.71, -2.71, -2.71, -2.71, -2.71, -2.71, -2.71,
-        -2.72, -2.72, -2.72, -2.73, -2.73, -2.73, -2.73, -2.73, -2.73, -2.73,
-        -2.73, -2.73, -2.73, -2.73, -2.74, -2.75, -2.75, -2.75, -2.75, -2.75,
-        -2.75, -2.75, -2.75, -2.76, -2.76, -2.76, -2.77, -2.77, -2.77, -2.77,
-        -2.77, -2.77, -2.77, -2.77, -2.78, -2.78, -2.78, -2.77, -2.77, -2.78,
-        -2.78, -2.78, -2.78, -2.77, -2.77, -2.77, -2.79, -2.78, -2.77, -2.79,
-        -2.79, -2.78, -2.78, -2.78, -2.78, -2.78, -2.77, -2.77, -2.76, -2.76,
-        -2.75, -2.75, -2.75, -2.75, -2.74, -2.74, -2.75, -2.76, -2.75, -2.75,
-        -2.75, -2.75, -2.73, -2.73, -2.71, -2.71, -2.71, -2.70, -2.69, -2.69,
-        -2.70, -2.69, -2.69, -2.69, -2.69, -2.68, -2.67, -2.67, -2.68, -2.68,
-        -2.67, -2.68, -2.67, -2.66, -2.66, -2.66, -2.65, -2.64, -2.63, -2.63,
-        -2.61, -2.60, -2.60, -2.58, -2.58, -2.58, -2.57, -2.58
+        -67, -68, -68, -68, -68,
+        -69, -69, -69, -69, -70, -69, -70, -71, -71, -71,
+        -72, -71, -72, -73, -72, -73, -73, -73, -73, -72,
+        -73, -72, -72, -72, -72, -72, -72, -72, -72, -73,
+        -73, -73, -74, -74, -74, -75, -75, -75, -75, -75,
+        -75, -76, -76, -77, -77, -78, -78, -78, -79, -79,
+        -79, -80, -80, -81, -82, -82, -83, -82, -82, -82,
+        -82, -82, -81, -82, -82, -82, -82, -82, -83, -84,
+        -84, -84, -84, -84, -85, -85, -86, -86, -87, -88,
+        -87, -88, -88, -89, -89, -90, -90, -90, -90, -90,
+        -91, -90, -91, -91, -91, -91, -91, -92, -92, -93,
+        -92, -92, -93, -92, -93, -92, -93, -94, -93, -94,
+        -95, -95, -95, -95, -96, -95, -95, -96, -95, -96,
+        -97, -96, -97, -97, -98, -97, -98, -98, -98, -98,
+        -98, -99, -99, -99, -99, -100, -100, -101, -101, -101,
+        -101, -101, -102, -103, -103, -104, -104, -104, -105, -105,
+        -105, -105, -105, -106, -106, -106, -106, -108, -108, -109,
+        -110, -109, -110, -111, -111, -112, -112, -112, -113, -113,
+        -114, -114, -114, -115, -116, -116, -117, -118, -118, -118,
+        -119, -120, -120, -120, -121, -122, -122, -122, -123, -123,
+        -123, -123, -124, -125, -126, -126, -127, -127, -128, -129,
+        -129, -129, -129, -130, -131, -131, -131, -132, -132, -132,
+        -132, -132, -133, -132, -132, -133, -133, -133, -133, -133,
+        -133, -133, -133, -134, -134, -134, -134, -134, -134, -134,
+        -135, -135, -135, -135, -136, -136, -138, -138, -139, -140,
+        -140, -141, -142, -143, -143, -144, -145, -145, -146, -147,
+        -147, -148, -148, -148, -148, -149, -148, -149, -149, -150,
+        -151, -152, -153, -153, -153, -154, -155, -156, -157, -157,
+        -157, -157, -158, -159, -158, -158, -160, -160, -161, -162,
+        -162, -164, -164, -165, -165, -166, -166, -166, -168, -168,
+        -168, -169, -169, -169, -169, -170, -170, -170, -170, -171,
+        -170, -170, -169, -170, -170, -171, -171, -172, -173, -174,
+        -174, -174, -174, -175, -175, -175, -176, -175, -176, -178,
+        -178, -178, -179, -180, -180, -181, -182, -183, -183, -183,
+        -184, -184, -183, -184, -184, -183, -184, -185, -186, -186,
+        -187, -186, -186, -187, -186, -187, -187, -187, -187, -188,
+        -187, -187, -187, -188, -188, -189, -189, -189, -189, -190,
+        -191, -192, -192, -193, -194, -195, -196, -196, -196, -196,
+        -196, -197, -197, -197, -197, -198, -199, -199, -201, -201,
+        -202, -202, -203, -203, -202, -203, -203, -203, -202, -203,
+        -203, -204, -205, -205, -206, -206, -207, -208, -209, -210,
+        -208, -208, -208, -207, -207, -208, -208, -209, -210, -210,
+        -211, -212, -212, -213, -212, -212, -213, -213, -212, -213,
+        -213, -213, -214, -214, -214, -214, -215, -215, -216, -216,
+        -216, -217, -218, -218, -219, -219, -219, -218, -218, -218,
+        -218, -219, -219, -220, -220, -221, -221, -223, -223, -224,
+        -224, -225, -225, -226, -227, -228, -228, -229, -230, -231,
+        -231, -232, -233, -234, -234, -235, -236, -236, -238, -238,
+        -239, -239, -240, -240, -240, -240, -241, -241, -240, -241,
+        -242, -241, -242, -242, -242, -242, -243, -243, -245, -245,
+        -245, -245, -245, -246, -247, -247, -248, -248, -248, -249,
+        -250, -250, -250, -251, -251, -251, -252, -252, -253, -253,
+        -252, -252, -253, -253, -253, -251, -251, -252, -252, -252,
+        -252, -253, -253, -253, -253, -253, -253, -253, -253, -254,
+        -255, -255, -255, -256, -257, -257, -257, -257, -257, -258,
+        -258, -258, -259, -259, -259, -260, -260, -261, -262, -262,
+        -262, -262, -262, -262, -262, -262, -263, -263, -264, -264,
+        -265, -265, -265, -266, -266, -266, -267, -267, -268, -268,
+        -268, -269, -269, -269, -271, -271, -272, -273, -273, -274,
+        -275, -275, -275, -275, -277, -277, -277, -277, -277, -277,
+        -277, -278, -278, -278, -279, -280, -280, -280, -280, -282,
+        -282, -282, -282, -283, -283, -283, -282, -284, -283, -283,
+        -283, -284, -285, -285, -285, -286, -286, -286, -288, -288,
+        -288, -288, -290, -290, -290, -290, -291, -291, -291, -292,
+        -292, -292, -293, -293, -293, -293, -293, -294, -294, -293,
+        -293, -293, -293, -293, -293, -294, -295, -295, -296, -296,
+        -296, -296, -296, -296, -296, -296, -296, -296, -296, -297,
+        -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
+        -298, -298, -298, -298, -299, -299, -299, -299, -299, -299,
+        -299, -299, -299, -299, -300, -300, -300, -300, -301, -301,
+        -301, -301, -301, -301, -301, -301, -302, -302, -302, -302,
+        -303, -303, -303, -303, -304, -304, -304, -304, -304, -304,
+        -304, -304, -304, -304, -305, -305, -306, -307, -307, -307,
+        -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
+        -308, -308, -307, -307, -307, -307, -307, -307, -307, -307,
+        -308, -308, -308, -308, -307, -307, -307, -307, -307, -307,
+        -306, -306, -305, -305, -305, -305, -305, -305, -305, -305,
+        -305, -305, -305, -305, -305, -305, -305, -305, -304, -304,
+        -304, -304, -303, -303, -303, -302, -302, -301, -301, -301,
+        -301, -301, -302, -301, -301, -301, -301, -300, -300, -300,
+        -299, -297, -297, -297, -296, -296, -296, -296, -295, -296,
+        -296, -297, -297, -297, -297, -297, -297, -295, -295, -295,
+        -295, -294, -294, -294, -294, -294, -294, -293, -293, -293,
+        -293, -292, -292, -292, -291, -290, -291, -290, -290, -290,
+        -290, -290, -290, -290, -290, -290, -290, -290, -290, -290,
+        -292, -291, -291, -292, -292, -292, -292, -292, -292, -292,
+        -292, -292, -292, -292, -292, -291, -291, -291, -291, -291,
+        -290, -290, -290, -290, -290, -289, -289, -288, -288, -288,
+        -288, -288, -288, -287, -287, -287, -287, -287, -286, -286,
+        -286, -286, -286, -285, -284, -282, -282, -282, -282, -282,
+        -282, -282, -282, -281, -281, -281, -280, -279, -279, -279,
+        -279, -279, -279, -279, -279, -279, -278, -277, -277, -276,
+        -276, -276, -276, -276, -275, -275, -275, -275, -274, -273,
+        -273, -273, -273, -273, -273, -272, -271, -271, -271, -271,
+        -271, -271, -271, -271, -271, -270, -270, -270, -269, -269,
+        -268, -268, -268, -268, -268, -267, -267, -268, -268, -268,
+        -269, -269, -270, -270, -270, -269, -268, -269, -269, -268,
+        -269, -270, -270, -270, -271, -271, -271, -271, -271, -272,
+        -272, -272, -272, -273, -272, -272, -273, -272, -272, -273,
+        -273, -272, -273, -273, -273, -273, -274, -274, -274, -274,
+        -273, -273, -273, -272, -272, -272, -272, -272, -273, -272,
+        -272, -272, -272, -271, -271, -271, -270, -269, -269, -269,
+        -267, -267, -267, -266, -266, -265, -265, -266, -265, -266,
+        -266, -266, -266, -266, -266, -266, -265, -264, -264, -263,
+        -262, -263, -263, -263, -263, -263, -262, -262, -262, -261,
+        -261, -260, -260, -260, -258, -258, -257, -256, -256, -256,
+        -256, -256, -256, -256, -255, -255, -255, -254, -254, -254,
+        -254, -254, -254, -254, -254, -254, -254, -254, -254, -254,
+        -254, -253, -253, -252, -250, -250, -250, -249, -249, -249,
+        -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
+        -248, -248, -249, -249, -249, -249, -249, -248, -248, -248,
+        -247, -247, -248, -247, -248, -247, -247, -247, -248, -247,
+        -247, -248, -248, -249, -248, -248, -248, -247, -247, -246,
+        -246, -246, -246, -246, -246, -246, -247, -248, -247, -247,
+        -247, -247, -249, -249, -249, -248, -247, -247, -247, -248,
+        -248, -248, -248, -249, -249, -252, -252, -251, -251, -253,
+        -253, -252, -250, -251, -252, -251, -251, -251, -252, -253,
+        -252, -253, -253, -254, -254, -254, -254, -254, -254, -254,
+        -253, -253, -253, -253, -256, -256, -255, -255, -260, -259,
+        -258, -258, -259, -260, -260, -260, -260, -260, -260, -260,
+        -260, -260, -260, -260, -260, -260, -259, -259, -260, -260,
+        -261, -260, -261, -260, -260, -260, -260, -260, -260, -260,
+        -260, -260, -260, -260, -261, -260, -261, -261, -262, -262,
+        -264, -264, -264, -264, -263, -263, -264, -264, -264, -264,
+        -264, -264, -264, -264, -265, -264, -265, -266, -266, -266,
+        -266, -266, -266, -266, -266, -266, -266, -266, -266, -266,
+        -267, -268, -268, -269, -270, -270, -270, -270, -270, -270,
+        -270, -270, -271, -271, -271, -271, -271, -271, -271, -271,
+        -272, -272, -272, -273, -273, -273, -273, -273, -273, -273,
+        -273, -273, -273, -273, -274, -275, -275, -275, -275, -275,
+        -275, -275, -275, -276, -276, -276, -277, -277, -277, -277,
+        -277, -277, -277, -277, -278, -278, -278, -277, -277, -278,
+        -278, -278, -278, -277, -277, -277, -279, -278, -277, -279,
+        -279, -278, -278, -278, -278, -278, -277, -277, -276, -276,
+        -275, -275, -275, -275, -274, -274, -275, -276, -275, -275,
+        -275, -275, -273, -273, -271, -271, -271, -270, -269, -269,
+        -270, -269, -269, -269, -269, -268, -267, -267, -268, -268,
+        -267, -268, -267, -266, -266, -266, -265, -264, -263, -263,
+        -261, -260, -260, -258, -258, -258, -257, -258
     };
 
-    static const float fletcher_munson_curve_90_phons[1383] =
+    static const int16_t fletcher_munson_curve_90_phons[1383] =
     {
-        1.57, 1.58, 1.58, 1.59, 1.58,
-        1.61, 1.61, 1.61, 1.62, 1.64, 1.62, 1.64, 1.66, 1.65, 1.66,
-        1.68, 1.67, 1.68, 1.69, 1.69, 1.69, 1.69, 1.69, 1.69, 1.69,
-        1.69, 1.68, 1.69, 1.68, 1.68, 1.68, 1.68, 1.68, 1.68, 1.70,
-        1.69, 1.71, 1.72, 1.73, 1.73, 1.75, 1.75, 1.74, 1.76, 1.76,
-        1.76, 1.78, 1.78, 1.80, 1.79, 1.81, 1.82, 1.83, 1.84, 1.85,
-        1.85, 1.87, 1.88, 1.90, 1.92, 1.91, 1.93, 1.90, 1.91, 1.90,
-        1.90, 1.90, 1.89, 1.91, 1.90, 1.92, 1.92, 1.92, 1.93, 1.95,
-        1.95, 1.96, 1.95, 1.97, 1.99, 1.98, 2.00, 2.01, 2.03, 2.04,
-        2.03, 2.05, 2.06, 2.08, 2.08, 2.09, 2.09, 2.09, 2.10, 2.09,
-        2.12, 2.11, 2.12, 2.13, 2.13, 2.13, 2.12, 2.15, 2.15, 2.16,
-        2.14, 2.16, 2.16, 2.15, 2.17, 2.16, 2.17, 2.19, 2.18, 2.20,
-        2.22, 2.21, 2.21, 2.21, 2.23, 2.21, 2.22, 2.24, 2.22, 2.24,
-        2.25, 2.25, 2.25, 2.27, 2.28, 2.27, 2.28, 2.28, 2.29, 2.28,
-        2.29, 2.30, 2.30, 2.30, 2.32, 2.34, 2.33, 2.35, 2.35, 2.35,
-        2.37, 2.37, 2.38, 2.40, 2.41, 2.43, 2.43, 2.43, 2.44, 2.45,
-        2.45, 2.46, 2.45, 2.48, 2.46, 2.48, 2.48, 2.51, 2.52, 2.54,
-        2.56, 2.55, 2.57, 2.59, 2.59, 2.61, 2.62, 2.62, 2.63, 2.65,
-        2.66, 2.67, 2.67, 2.68, 2.70, 2.72, 2.73, 2.76, 2.74, 2.76,
-        2.78, 2.80, 2.79, 2.80, 2.83, 2.84, 2.85, 2.85, 2.86, 2.88,
-        2.87, 2.88, 2.90, 2.91, 2.94, 2.94, 2.96, 2.97, 2.98, 3.00,
-        3.00, 3.01, 3.01, 3.02, 3.06, 3.06, 3.05, 3.08, 3.09, 3.07,
-        3.08, 3.08, 3.10, 3.08, 3.09, 3.11, 3.11, 3.10, 3.10, 3.10,
-        3.10, 3.11, 3.10, 3.13, 3.12, 3.13, 3.12, 3.13, 3.14, 3.13,
-        3.15, 3.15, 3.16, 3.15, 3.17, 3.18, 3.21, 3.23, 3.24, 3.26,
-        3.28, 3.29, 3.31, 3.33, 3.34, 3.36, 3.38, 3.39, 3.40, 3.42,
-        3.42, 3.45, 3.45, 3.44, 3.45, 3.47, 3.45, 3.47, 3.49, 3.50,
-        3.53, 3.54, 3.56, 3.57, 3.58, 3.60, 3.63, 3.63, 3.66, 3.66,
-        3.67, 3.67, 3.69, 3.70, 3.69, 3.70, 3.72, 3.73, 3.76, 3.77,
-        3.79, 3.82, 3.84, 3.85, 3.85, 3.88, 3.88, 3.88, 3.91, 3.92,
-        3.93, 3.95, 3.93, 3.95, 3.95, 3.96, 3.98, 3.97, 3.97, 3.98,
-        3.96, 3.96, 3.95, 3.96, 3.97, 3.99, 4.00, 4.02, 4.03, 4.06,
-        4.06, 4.06, 4.07, 4.09, 4.08, 4.09, 4.11, 4.09, 4.11, 4.15,
-        4.15, 4.16, 4.18, 4.20, 4.20, 4.23, 4.24, 4.26, 4.27, 4.27,
-        4.29, 4.29, 4.27, 4.30, 4.28, 4.28, 4.30, 4.31, 4.33, 4.35,
-        4.36, 4.35, 4.34, 4.36, 4.35, 4.35, 4.36, 4.36, 4.36, 4.38,
-        4.37, 4.37, 4.37, 4.39, 4.39, 4.40, 4.40, 4.40, 4.41, 4.43,
-        4.46, 4.48, 4.49, 4.51, 4.53, 4.54, 4.57, 4.57, 4.57, 4.57,
-        4.57, 4.60, 4.60, 4.60, 4.60, 4.63, 4.64, 4.65, 4.68, 4.69,
-        4.71, 4.72, 4.74, 4.75, 4.72, 4.73, 4.74, 4.74, 4.72, 4.73,
-        4.75, 4.76, 4.78, 4.78, 4.81, 4.81, 4.84, 4.84, 4.87, 4.89,
-        4.86, 4.86, 4.86, 4.83, 4.84, 4.85, 4.86, 4.87, 4.90, 4.91,
-        4.92, 4.94, 4.95, 4.96, 4.94, 4.95, 4.97, 4.96, 4.95, 4.97,
-        4.97, 4.97, 4.99, 4.99, 4.99, 5.00, 5.02, 5.02, 5.03, 5.05,
-        5.05, 5.07, 5.08, 5.08, 5.11, 5.11, 5.11, 5.08, 5.09, 5.09,
-        5.09, 5.10, 5.11, 5.13, 5.13, 5.16, 5.16, 5.19, 5.20, 5.23,
-        5.23, 5.24, 5.26, 5.28, 5.29, 5.31, 5.32, 5.35, 5.37, 5.38,
-        5.40, 5.41, 5.43, 5.45, 5.47, 5.48, 5.50, 5.52, 5.55, 5.55,
-        5.58, 5.58, 5.59, 5.60, 5.60, 5.61, 5.62, 5.63, 5.61, 5.63,
-        5.64, 5.63, 5.65, 5.65, 5.65, 5.66, 5.67, 5.68, 5.71, 5.72,
-        5.72, 5.72, 5.72, 5.74, 5.75, 5.75, 5.78, 5.79, 5.80, 5.80,
-        5.83, 5.83, 5.84, 5.85, 5.87, 5.87, 5.88, 5.88, 5.90, 5.89,
-        5.88, 5.89, 5.90, 5.90, 5.89, 5.87, 5.85, 5.88, 5.88, 5.88,
-        5.88, 5.91, 5.91, 5.91, 5.91, 5.91, 5.91, 5.91, 5.91, 5.92,
-        5.94, 5.95, 5.96, 5.98, 5.99, 5.99, 5.99, 5.99, 5.99, 6.02,
-        6.02, 6.02, 6.04, 6.04, 6.04, 6.07, 6.07, 6.09, 6.10, 6.10,
-        6.10, 6.11, 6.11, 6.11, 6.11, 6.11, 6.14, 6.14, 6.15, 6.17,
-        6.17, 6.18, 6.19, 6.20, 6.22, 6.22, 6.23, 6.23, 6.25, 6.25,
-        6.26, 6.28, 6.28, 6.29, 6.31, 6.31, 6.34, 6.36, 6.38, 6.39,
-        6.42, 6.42, 6.42, 6.43, 6.46, 6.46, 6.46, 6.46, 6.46, 6.46,
-        6.46, 6.48, 6.49, 6.50, 6.50, 6.53, 6.54, 6.54, 6.54, 6.57,
-        6.57, 6.57, 6.57, 6.60, 6.60, 6.59, 6.59, 6.62, 6.61, 6.61,
-        6.61, 6.63, 6.64, 6.64, 6.65, 6.68, 6.68, 6.68, 6.71, 6.71,
-        6.73, 6.73, 6.76, 6.76, 6.76, 6.78, 6.79, 6.79, 6.80, 6.81,
-        6.82, 6.82, 6.83, 6.83, 6.83, 6.84, 6.84, 6.85, 6.85, 6.85,
-        6.84, 6.84, 6.84, 6.84, 6.84, 6.87, 6.87, 6.87, 6.90, 6.90,
-        6.90, 6.90, 6.90, 6.90, 6.90, 6.91, 6.91, 6.90, 6.91, 6.92,
-        6.92, 6.92, 6.92, 6.92, 6.93, 6.94, 6.93, 6.92, 6.92, 6.93,
-        6.95, 6.95, 6.95, 6.95, 6.98, 6.98, 6.98, 6.98, 6.98, 6.98,
-        6.98, 6.98, 6.98, 6.98, 6.99, 7.00, 7.00, 7.00, 7.01, 7.02,
-        7.03, 7.03, 7.03, 7.02, 7.03, 7.03, 7.05, 7.05, 7.05, 7.05,
-        7.06, 7.06, 7.06, 7.06, 7.10, 7.10, 7.10, 7.10, 7.10, 7.10,
-        7.10, 7.10, 7.10, 7.10, 7.13, 7.13, 7.14, 7.16, 7.16, 7.17,
-        7.18, 7.18, 7.18, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19,
-        7.18, 7.18, 7.16, 7.16, 7.16, 7.17, 7.17, 7.17, 7.17, 7.16,
-        7.18, 7.19, 7.19, 7.18, 7.17, 7.16, 7.16, 7.16, 7.16, 7.16,
-        7.15, 7.14, 7.13, 7.13, 7.13, 7.11, 7.11, 7.11, 7.11, 7.11,
-        7.11, 7.11, 7.11, 7.11, 7.11, 7.11, 7.11, 7.11, 7.10, 7.10,
-        7.10, 7.10, 7.08, 7.06, 7.06, 7.05, 7.05, 7.03, 7.03, 7.03,
-        7.03, 7.03, 7.05, 7.03, 7.03, 7.02, 7.02, 7.00, 7.00, 6.99,
-        6.97, 6.94, 6.93, 6.92, 6.92, 6.91, 6.90, 6.90, 6.89, 6.91,
-        6.90, 6.92, 6.92, 6.92, 6.92, 6.92, 6.92, 6.89, 6.88, 6.88,
-        6.88, 6.86, 6.86, 6.85, 6.85, 6.85, 6.85, 6.84, 6.84, 6.84,
-        6.84, 6.82, 6.81, 6.81, 6.78, 6.78, 6.78, 6.78, 6.78, 6.78,
-        6.78, 6.78, 6.78, 6.78, 6.78, 6.78, 6.78, 6.78, 6.78, 6.78,
-        6.81, 6.79, 6.79, 6.82, 6.81, 6.81, 6.82, 6.82, 6.82, 6.82,
-        6.82, 6.82, 6.81, 6.81, 6.81, 6.80, 6.79, 6.79, 6.79, 6.78,
-        6.78, 6.78, 6.78, 6.78, 6.76, 6.74, 6.74, 6.73, 6.71, 6.71,
-        6.72, 6.73, 6.73, 6.70, 6.70, 6.70, 6.70, 6.69, 6.68, 6.68,
-        6.67, 6.66, 6.66, 6.65, 6.62, 6.59, 6.58, 6.58, 6.58, 6.58,
-        6.58, 6.58, 6.58, 6.55, 6.55, 6.55, 6.54, 6.52, 6.52, 6.52,
-        6.52, 6.52, 6.52, 6.52, 6.52, 6.50, 6.48, 6.47, 6.46, 6.45,
-        6.44, 6.44, 6.44, 6.44, 6.41, 6.41, 6.41, 6.41, 6.39, 6.38,
-        6.38, 6.38, 6.38, 6.38, 6.37, 6.34, 6.33, 6.33, 6.33, 6.33,
-        6.33, 6.33, 6.33, 6.33, 6.32, 6.30, 6.29, 6.29, 6.28, 6.28,
-        6.26, 6.25, 6.26, 6.25, 6.25, 6.22, 6.22, 6.25, 6.25, 6.26,
-        6.28, 6.28, 6.30, 6.30, 6.30, 6.28, 6.26, 6.28, 6.27, 6.26,
-        6.27, 6.30, 6.30, 6.30, 6.31, 6.33, 6.32, 6.33, 6.33, 6.34,
-        6.34, 6.34, 6.35, 6.36, 6.35, 6.34, 6.36, 6.36, 6.35, 6.37,
-        6.36, 6.35, 6.38, 6.36, 6.36, 6.38, 6.39, 6.39, 6.39, 6.39,
-        6.37, 6.38, 6.36, 6.34, 6.34, 6.34, 6.34, 6.34, 6.36, 6.35,
-        6.34, 6.35, 6.34, 6.33, 6.32, 6.32, 6.30, 6.27, 6.28, 6.27,
-        6.24, 6.23, 6.22, 6.20, 6.20, 6.18, 6.18, 6.20, 6.19, 6.20,
-        6.21, 6.20, 6.22, 6.22, 6.20, 6.20, 6.18, 6.17, 6.15, 6.14,
-        6.12, 6.14, 6.14, 6.14, 6.15, 6.14, 6.12, 6.12, 6.10, 6.09,
-        6.09, 6.08, 6.06, 6.06, 6.03, 6.01, 5.99, 5.98, 5.98, 5.98,
-        5.98, 5.98, 5.98, 5.98, 5.95, 5.95, 5.94, 5.92, 5.93, 5.93,
-        5.93, 5.93, 5.93, 5.93, 5.93, 5.93, 5.93, 5.93, 5.93, 5.93,
-        5.92, 5.90, 5.89, 5.88, 5.84, 5.84, 5.82, 5.82, 5.82, 5.80,
-        5.80, 5.79, 5.79, 5.79, 5.79, 5.79, 5.79, 5.79, 5.79, 5.79,
-        5.79, 5.79, 5.80, 5.80, 5.80, 5.80, 5.80, 5.79, 5.79, 5.78,
-        5.76, 5.77, 5.78, 5.77, 5.78, 5.77, 5.77, 5.77, 5.79, 5.77,
-        5.77, 5.79, 5.79, 5.80, 5.79, 5.79, 5.78, 5.77, 5.75, 5.74,
-        5.74, 5.74, 5.75, 5.75, 5.74, 5.74, 5.75, 5.78, 5.77, 5.77,
-        5.77, 5.77, 5.81, 5.82, 5.82, 5.79, 5.76, 5.76, 5.76, 5.78,
-        5.79, 5.78, 5.78, 5.80, 5.82, 5.88, 5.87, 5.85, 5.86, 5.89,
-        5.90, 5.87, 5.83, 5.85, 5.87, 5.87, 5.86, 5.85, 5.88, 5.90,
-        5.89, 5.91, 5.91, 5.92, 5.92, 5.92, 5.92, 5.93, 5.93, 5.92,
-        5.91, 5.90, 5.90, 5.90, 5.97, 5.96, 5.95, 5.95, 6.06, 6.04,
-        6.03, 6.02, 6.05, 6.06, 6.07, 6.06, 6.06, 6.06, 6.06, 6.06,
-        6.06, 6.07, 6.06, 6.06, 6.06, 6.06, 6.04, 6.04, 6.06, 6.07,
-        6.08, 6.07, 6.08, 6.07, 6.06, 6.06, 6.08, 6.07, 6.06, 6.07,
-        6.06, 6.07, 6.07, 6.06, 6.08, 6.07, 6.09, 6.09, 6.11, 6.12,
-        6.15, 6.17, 6.17, 6.15, 6.14, 6.14, 6.15, 6.17, 6.17, 6.15,
-        6.15, 6.15, 6.15, 6.16, 6.18, 6.17, 6.18, 6.20, 6.20, 6.20,
-        6.21, 6.21, 6.21, 6.21, 6.22, 6.22, 6.22, 6.22, 6.22, 6.21,
-        6.22, 6.25, 6.26, 6.27, 6.30, 6.30, 6.30, 6.30, 6.30, 6.30,
-        6.30, 6.30, 6.31, 6.32, 6.32, 6.32, 6.33, 6.33, 6.33, 6.33,
-        6.34, 6.34, 6.35, 6.36, 6.36, 6.36, 6.36, 6.36, 6.36, 6.36,
-        6.36, 6.36, 6.36, 6.38, 6.39, 6.41, 6.42, 6.42, 6.42, 6.42,
-        6.42, 6.42, 6.42, 6.44, 6.44, 6.44, 6.46, 6.46, 6.47, 6.45,
-        6.46, 6.47, 6.47, 6.47, 6.49, 6.49, 6.48, 6.46, 6.47, 6.49,
-        6.49, 6.49, 6.49, 6.46, 6.46, 6.47, 6.50, 6.48, 6.47, 6.50,
-        6.50, 6.50, 6.49, 6.49, 6.49, 6.49, 6.47, 6.47, 6.44, 6.43,
-        6.41, 6.42, 6.41, 6.42, 6.40, 6.40, 6.42, 6.44, 6.43, 6.41,
-        6.41, 6.41, 6.38, 6.36, 6.33, 6.32, 6.32, 6.31, 6.28, 6.28,
-        6.30, 6.29, 6.28, 6.28, 6.27, 6.26, 6.24, 6.24, 6.25, 6.25,
-        6.23, 6.24, 6.23, 6.21, 6.20, 6.20, 6.19, 6.17, 6.14, 6.14,
-        6.10, 6.07, 6.07, 6.03, 6.01, 6.01, 6.00, 6.01
+        157, 158, 158, 159, 158,
+        161, 161, 161, 162, 164, 162, 164, 166, 165, 166,
+        168, 167, 168, 169, 169, 169, 169, 169, 169, 169,
+        169, 168, 169, 168, 168, 168, 168, 168, 168, 170,
+        169, 171, 172, 173, 173, 175, 175, 174, 176, 176,
+        176, 178, 178, 180, 179, 181, 182, 183, 184, 185,
+        185, 187, 188, 190, 192, 191, 193, 190, 191, 190,
+        190, 190, 189, 191, 190, 192, 192, 192, 193, 195,
+        195, 196, 195, 197, 199, 198, 200, 201, 203, 204,
+        203, 205, 206, 208, 208, 209, 209, 209, 210, 209,
+        212, 211, 212, 213, 213, 213, 212, 215, 215, 216,
+        214, 216, 216, 215, 217, 216, 217, 219, 218, 220,
+        222, 221, 221, 221, 223, 221, 222, 224, 222, 224,
+        225, 225, 225, 227, 228, 227, 228, 228, 229, 228,
+        229, 230, 230, 230, 232, 234, 233, 235, 235, 235,
+        237, 237, 238, 240, 241, 243, 243, 243, 244, 245,
+        245, 246, 245, 248, 246, 248, 248, 251, 252, 254,
+        256, 255, 257, 259, 259, 261, 262, 262, 263, 265,
+        266, 267, 267, 268, 270, 272, 273, 276, 274, 276,
+        278, 280, 279, 280, 283, 284, 285, 285, 286, 288,
+        287, 288, 290, 291, 294, 294, 296, 297, 298, 300,
+        300, 301, 301, 302, 306, 306, 305, 308, 309, 307,
+        308, 308, 310, 308, 309, 311, 311, 310, 310, 310,
+        310, 311, 310, 313, 312, 313, 312, 313, 314, 313,
+        315, 315, 316, 315, 317, 318, 321, 323, 324, 326,
+        328, 329, 331, 333, 334, 336, 338, 339, 340, 342,
+        342, 345, 345, 344, 345, 347, 345, 347, 349, 350,
+        353, 354, 356, 357, 358, 360, 363, 363, 366, 366,
+        367, 367, 369, 370, 369, 370, 372, 373, 376, 377,
+        379, 382, 384, 385, 385, 388, 388, 388, 391, 392,
+        393, 395, 393, 395, 395, 396, 398, 397, 397, 398,
+        396, 396, 395, 396, 397, 399, 400, 402, 403, 406,
+        406, 406, 407, 409, 408, 409, 411, 409, 411, 415,
+        415, 416, 418, 420, 420, 423, 424, 426, 427, 427,
+        429, 429, 427, 430, 428, 428, 430, 431, 433, 435,
+        436, 435, 434, 436, 435, 435, 436, 436, 436, 438,
+        437, 437, 437, 439, 439, 440, 440, 440, 441, 443,
+        446, 448, 449, 451, 453, 454, 457, 457, 457, 457,
+        457, 460, 460, 460, 460, 463, 464, 465, 468, 469,
+        471, 472, 474, 475, 472, 473, 474, 474, 472, 473,
+        475, 476, 478, 478, 481, 481, 484, 484, 487, 489,
+        486, 486, 486, 483, 484, 485, 486, 487, 490, 491,
+        492, 494, 495, 496, 494, 495, 497, 496, 495, 497,
+        497, 497, 499, 499, 499, 500, 502, 502, 503, 505,
+        505, 507, 508, 508, 511, 511, 511, 508, 509, 509,
+        509, 510, 511, 513, 513, 516, 516, 519, 520, 523,
+        523, 524, 526, 528, 529, 531, 532, 535, 537, 538,
+        540, 541, 543, 545, 547, 548, 550, 552, 555, 555,
+        558, 558, 559, 560, 560, 561, 562, 563, 561, 563,
+        564, 563, 565, 565, 565, 566, 567, 568, 571, 572,
+        572, 572, 572, 574, 575, 575, 578, 579, 580, 580,
+        583, 583, 584, 585, 587, 587, 588, 588, 590, 589,
+        588, 589, 590, 590, 589, 587, 585, 588, 588, 588,
+        588, 591, 591, 591, 591, 591, 591, 591, 591, 592,
+        594, 595, 596, 598, 599, 599, 599, 599, 599, 602,
+        602, 602, 604, 604, 604, 607, 607, 609, 610, 610,
+        610, 611, 611, 611, 611, 611, 614, 614, 615, 617,
+        617, 618, 619, 620, 622, 622, 623, 623, 625, 625,
+        626, 628, 628, 629, 631, 631, 634, 636, 638, 639,
+        642, 642, 642, 643, 646, 646, 646, 646, 646, 646,
+        646, 648, 649, 650, 650, 653, 654, 654, 654, 657,
+        657, 657, 657, 660, 660, 659, 659, 662, 661, 661,
+        661, 663, 664, 664, 665, 668, 668, 668, 671, 671,
+        673, 673, 676, 676, 676, 678, 679, 679, 680, 681,
+        682, 682, 683, 683, 683, 684, 684, 685, 685, 685,
+        684, 684, 684, 684, 684, 687, 687, 687, 690, 690,
+        690, 690, 690, 690, 690, 691, 691, 690, 691, 692,
+        692, 692, 692, 692, 693, 694, 693, 692, 692, 693,
+        695, 695, 695, 695, 698, 698, 698, 698, 698, 698,
+        698, 698, 698, 698, 699, 700, 700, 700, 701, 702,
+        703, 703, 703, 702, 703, 703, 705, 705, 705, 705,
+        706, 706, 706, 706, 710, 710, 710, 710, 710, 710,
+        710, 710, 710, 710, 713, 713, 714, 716, 716, 717,
+        718, 718, 718, 719, 719, 719, 719, 719, 719, 719,
+        718, 718, 716, 716, 716, 717, 717, 717, 717, 716,
+        718, 719, 719, 718, 717, 716, 716, 716, 716, 716,
+        715, 714, 713, 713, 713, 711, 711, 711, 711, 711,
+        711, 711, 711, 711, 711, 711, 711, 711, 710, 710,
+        710, 710, 708, 706, 706, 705, 705, 703, 703, 703,
+        703, 703, 705, 703, 703, 702, 702, 700, 700, 699,
+        697, 694, 693, 692, 692, 691, 690, 690, 689, 691,
+        690, 692, 692, 692, 692, 692, 692, 689, 688, 688,
+        688, 686, 686, 685, 685, 685, 685, 684, 684, 684,
+        684, 682, 681, 681, 678, 678, 678, 678, 678, 678,
+        678, 678, 678, 678, 678, 678, 678, 678, 678, 678,
+        681, 679, 679, 682, 681, 681, 682, 682, 682, 682,
+        682, 682, 681, 681, 681, 680, 679, 679, 679, 678,
+        678, 678, 678, 678, 676, 674, 674, 673, 671, 671,
+        672, 673, 673, 670, 670, 670, 670, 669, 668, 668,
+        667, 666, 666, 665, 662, 659, 658, 658, 658, 658,
+        658, 658, 658, 655, 655, 655, 654, 652, 652, 652,
+        652, 652, 652, 652, 652, 650, 648, 647, 646, 645,
+        644, 644, 644, 644, 641, 641, 641, 641, 639, 638,
+        638, 638, 638, 638, 637, 634, 633, 633, 633, 633,
+        633, 633, 633, 633, 632, 630, 629, 629, 628, 628,
+        626, 625, 626, 625, 625, 622, 622, 625, 625, 626,
+        628, 628, 630, 630, 630, 628, 626, 628, 627, 626,
+        627, 630, 630, 630, 631, 633, 632, 633, 633, 634,
+        634, 634, 635, 636, 635, 634, 636, 636, 635, 637,
+        636, 635, 638, 636, 636, 638, 639, 639, 639, 639,
+        637, 638, 636, 634, 634, 634, 634, 634, 636, 635,
+        634, 635, 634, 633, 632, 632, 630, 627, 628, 627,
+        624, 623, 622, 620, 620, 618, 618, 620, 619, 620,
+        621, 620, 622, 622, 620, 620, 618, 617, 615, 614,
+        612, 614, 614, 614, 615, 614, 612, 612, 610, 609,
+        609, 608, 606, 606, 603, 601, 599, 598, 598, 598,
+        598, 598, 598, 598, 595, 595, 594, 592, 593, 593,
+        593, 593, 593, 593, 593, 593, 593, 593, 593, 593,
+        592, 590, 589, 588, 584, 584, 582, 582, 582, 580,
+        580, 579, 579, 579, 579, 579, 579, 579, 579, 579,
+        579, 579, 580, 580, 580, 580, 580, 579, 579, 578,
+        576, 577, 578, 577, 578, 577, 577, 577, 579, 577,
+        577, 579, 579, 580, 579, 579, 578, 577, 575, 574,
+        574, 574, 575, 575, 574, 574, 575, 578, 577, 577,
+        577, 577, 581, 582, 582, 579, 576, 576, 576, 578,
+        579, 578, 578, 580, 582, 588, 587, 585, 586, 589,
+        590, 587, 583, 585, 587, 587, 586, 585, 588, 590,
+        589, 591, 591, 592, 592, 592, 592, 593, 593, 592,
+        591, 590, 590, 590, 597, 596, 595, 595, 606, 604,
+        603, 602, 605, 606, 607, 606, 606, 606, 606, 606,
+        606, 607, 606, 606, 606, 606, 604, 604, 606, 607,
+        608, 607, 608, 607, 606, 606, 608, 607, 606, 607,
+        606, 607, 607, 606, 608, 607, 609, 609, 611, 612,
+        615, 617, 617, 615, 614, 614, 615, 617, 617, 615,
+        615, 615, 615, 616, 618, 617, 618, 620, 620, 620,
+        621, 621, 621, 621, 622, 622, 622, 622, 622, 621,
+        622, 625, 626, 627, 630, 630, 630, 630, 630, 630,
+        630, 630, 631, 632, 632, 632, 633, 633, 633, 633,
+        634, 634, 635, 636, 636, 636, 636, 636, 636, 636,
+        636, 636, 636, 638, 639, 641, 642, 642, 642, 642,
+        642, 642, 642, 644, 644, 644, 646, 646, 647, 645,
+        646, 647, 647, 647, 649, 649, 648, 646, 647, 649,
+        649, 649, 649, 646, 646, 647, 650, 648, 647, 650,
+        650, 650, 649, 649, 649, 649, 647, 647, 644, 643,
+        641, 642, 641, 642, 640, 640, 642, 644, 643, 641,
+        641, 641, 638, 636, 633, 632, 632, 631, 628, 628,
+        630, 629, 628, 628, 627, 626, 624, 624, 625, 625,
+        623, 624, 623, 621, 620, 620, 619, 617, 614, 614,
+        610, 607, 607, 603, 601, 601, 600, 601
     };
 
-    static const float * const fletcher_munson_curves[] =
+    static const int16_t * const fletcher_munson_curves[] =
     {
         fletcher_munson_curve_0_phons,
         fletcher_munson_curve_10_phons,
@@ -1480,6 +1480,7 @@ namespace lsp
         10, // curves
         fletcher_munson_curves // curve data
     };
-}
+
+} /* namespace lsp */
 
 #endif /* GENERATED_ISO226_FLETCHER_MUNSON_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/iso226-2003.h 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/iso226-2003.h
--- 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/iso226-2003.h	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/iso226-2003.h	2025-08-26 18:15:57.317871377 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins
  * Created on: 08 апр. 2016 г.
@@ -26,1437 +26,1437 @@
 
 namespace lsp
 {
-    static const float iso226_2003_curve_0_phons[1382] =
+    static const int16_t iso226_2003_curve_0_phons[1382] =
     {
-        -42.12, -42.15, -42.22, -42.28,
-        -42.34, -42.43, -42.58, -42.69, -42.77, -42.88, -42.93, -43.07, -43.17, -43.25,
-        -43.38, -43.53, -43.62, -43.70, -43.82, -43.88, -43.96, -44.09, -44.22, -44.29,
-        -44.41, -44.52, -44.63, -44.71, -44.79, -44.97, -45.10, -45.21, -45.34, -45.49,
-        -45.57, -45.72, -45.88, -45.93, -45.99, -46.13, -46.20, -46.27, -46.33, -46.44,
-        -46.57, -46.67, -46.79, -46.87, -47.00, -47.15, -47.29, -47.38, -47.47, -47.55,
-        -47.62, -47.65, -47.74, -47.87, -47.96, -48.02, -48.13, -48.35, -48.39, -48.48,
-        -48.63, -48.72, -48.78, -48.86, -48.92, -49.07, -49.20, -49.33, -49.47, -49.48,
-        -49.48, -49.60, -49.77, -49.86, -49.87, -50.03, -50.08, -50.18, -50.30, -50.39,
-        -50.43, -50.55, -50.64, -50.73, -50.82, -50.92, -51.05, -51.11, -51.19, -51.29,
-        -51.38, -51.43, -51.49, -51.59, -51.62, -51.69, -51.80, -51.87, -51.91, -52.02,
-        -52.14, -52.25, -52.34, -52.43, -52.53, -52.64, -52.77, -52.86, -52.94, -53.04,
-        -53.16, -53.27, -53.37, -53.49, -53.57, -53.63, -53.74, -53.82, -53.91, -53.97,
-        -54.04, -54.13, -54.21, -54.24, -54.31, -54.41, -54.45, -54.52, -54.65, -54.73,
-        -54.79, -54.89, -54.97, -55.10, -55.16, -55.20, -55.25, -55.35, -55.40, -55.46,
-        -55.55, -55.63, -55.70, -55.74, -55.83, -55.94, -56.01, -56.10, -56.21, -56.29,
-        -56.35, -56.45, -56.54, -56.62, -56.68, -56.75, -56.86, -56.94, -56.99, -57.05,
-        -57.10, -57.16, -57.21, -57.29, -57.34, -57.40, -57.53, -57.59, -57.64, -57.73,
-        -57.84, -57.92, -58.04, -58.08, -58.20, -58.26, -58.33, -58.39, -58.48, -58.56,
-        -58.66, -58.71, -58.75, -58.85, -58.92, -58.94, -58.94, -59.09, -59.14, -59.24,
-        -59.35, -59.41, -59.50, -59.61, -59.68, -59.73, -59.77, -59.82, -59.90, -59.98,
-        -60.06, -60.14, -60.18, -60.25, -60.34, -60.41, -60.45, -60.55, -60.56, -60.59,
-        -60.67, -60.81, -60.84, -60.94, -61.00, -61.04, -61.06, -61.12, -61.15, -61.18,
-        -61.24, -61.26, -61.35, -61.43, -61.50, -61.63, -61.77, -61.80, -61.92, -62.01,
-        -62.06, -62.10, -62.15, -62.19, -62.23, -62.26, -62.30, -62.33, -62.42, -62.48,
-        -62.58, -62.66, -62.71, -62.83, -62.82, -62.82, -62.93, -63.01, -63.06, -63.16,
-        -63.25, -63.29, -63.37, -63.42, -63.43, -63.46, -63.49, -63.54, -63.60, -63.63,
-        -63.72, -63.76, -63.82, -63.94, -64.02, -64.06, -64.13, -64.17, -64.21, -64.27,
-        -64.29, -64.32, -64.42, -64.46, -64.48, -64.52, -64.55, -64.60, -64.67, -64.80,
-        -64.85, -64.94, -65.03, -65.12, -65.23, -65.24, -65.33, -65.39, -65.40, -65.46,
-        -65.47, -65.51, -65.56, -65.62, -65.67, -65.74, -65.84, -65.88, -65.95, -65.98,
-        -66.00, -66.05, -66.08, -66.09, -66.15, -66.19, -66.23, -66.30, -66.34, -66.38,
-        -66.47, -66.52, -66.59, -66.70, -66.75, -66.81, -66.86, -66.91, -66.96, -67.02,
-        -67.08, -67.08, -67.09, -67.20, -67.23, -67.25, -67.33, -67.36, -67.38, -67.39,
-        -67.47, -67.53, -67.51, -67.60, -67.67, -67.66, -67.70, -67.77, -67.77, -67.85,
-        -67.94, -67.93, -68.02, -68.05, -68.12, -68.18, -68.26, -68.36, -68.40, -68.51,
-        -68.54, -68.56, -68.60, -68.64, -68.62, -68.62, -68.64, -68.68, -68.69, -68.80,
-        -68.89, -68.91, -69.01, -69.05, -69.11, -69.18, -69.23, -69.28, -69.29, -69.35,
-        -69.42, -69.40, -69.36, -69.43, -69.43, -69.47, -69.50, -69.55, -69.61, -69.66,
-        -69.73, -69.79, -69.86, -69.91, -69.96, -70.02, -70.08, -70.13, -70.18, -70.18,
-        -70.26, -70.30, -70.32, -70.40, -70.43, -70.46, -70.51, -70.54, -70.53, -70.61,
-        -70.59, -70.59, -70.64, -70.67, -70.70, -70.75, -70.80, -70.82, -70.85, -70.88,
-        -70.91, -70.93, -70.97, -71.02, -71.07, -71.12, -71.19, -71.26, -71.24, -71.30,
-        -71.37, -71.37, -71.45, -71.50, -71.52, -71.55, -71.64, -71.64, -71.70, -71.77,
-        -71.76, -71.84, -71.90, -71.94, -71.98, -72.01, -72.07, -72.09, -72.17, -72.18,
-        -72.20, -72.21, -72.23, -72.24, -72.25, -72.26, -72.29, -72.31, -72.34, -72.37,
-        -72.42, -72.48, -72.54, -72.61, -72.61, -72.68, -72.73, -72.74, -72.82, -72.85,
-        -72.87, -72.91, -72.96, -72.93, -73.01, -73.01, -72.96, -73.03, -73.03, -73.07,
-        -73.12, -73.20, -73.26, -73.27, -73.32, -73.39, -73.43, -73.50, -73.50, -73.54,
-        -73.55, -73.57, -73.62, -73.70, -73.76, -73.82, -73.84, -73.86, -73.93, -73.94,
-        -73.95, -73.97, -73.99, -74.00, -74.03, -74.07, -74.07, -74.15, -74.22, -74.20,
-        -74.29, -74.33, -74.34, -74.36, -74.42, -74.41, -74.40, -74.45, -74.43, -74.49,
-        -74.54, -74.59, -74.61, -74.66, -74.70, -74.73, -74.79, -74.81, -74.91, -74.93,
-        -74.97, -74.99, -75.04, -75.02, -75.00, -75.06, -74.99, -75.05, -75.08, -75.08,
-        -75.13, -75.17, -75.19, -75.21, -75.22, -75.29, -75.35, -75.43, -75.51, -75.58,
-        -75.63, -75.63, -75.62, -75.63, -75.69, -75.65, -75.72, -75.75, -75.76, -75.82,
-        -75.81, -75.85, -75.82, -75.85, -75.91, -76.01, -76.10, -76.17, -76.23, -76.27,
-        -76.28, -76.30, -76.28, -76.32, -76.27, -76.26, -76.27, -76.24, -76.27, -76.34,
-        -76.44, -76.52, -76.60, -76.67, -76.59, -76.65, -76.66, -76.59, -76.66, -76.63,
-        -76.66, -76.65, -76.69, -76.70, -76.71, -76.80, -76.84, -76.84, -76.92, -76.97,
-        -77.04, -77.06, -77.08, -77.05, -77.06, -77.10, -77.05, -77.13, -77.16, -77.23,
-        -77.27, -77.29, -77.29, -77.31, -77.32, -77.39, -77.45, -77.51, -77.59, -77.64,
-        -77.66, -77.67, -77.68, -77.67, -77.73, -77.65, -77.71, -77.73, -77.67, -77.73,
-        -77.78, -77.84, -77.88, -77.94, -77.95, -78.00, -78.04, -78.06, -78.10, -78.11,
-        -78.08, -78.06, -78.15, -78.16, -78.19, -78.26, -78.27, -78.29, -78.27, -78.28,
-        -78.27, -78.30, -78.25, -78.25, -78.27, -78.24, -78.29, -78.35, -78.41, -78.49,
-        -78.53, -78.46, -78.54, -78.50, -78.48, -78.55, -78.57, -78.65, -78.67, -78.75,
-        -78.70, -78.72, -78.75, -78.67, -78.74, -78.76, -78.84, -78.88, -78.95, -78.89,
-        -78.90, -78.95, -78.88, -78.89, -78.94, -78.98, -79.04, -79.10, -79.14, -79.19,
-        -79.23, -79.26, -79.32, -79.34, -79.34, -79.34, -79.36, -79.34, -79.35, -79.36,
-        -79.36, -79.36, -79.37, -79.39, -79.32, -79.35, -79.38, -79.40, -79.42, -79.49,
-        -79.50, -79.58, -79.60, -79.62, -79.64, -79.65, -79.66, -79.66, -79.56, -79.55,
-        -79.54, -79.55, -79.56, -79.64, -79.65, -79.74, -79.74, -79.84, -79.84, -79.88,
-        -79.89, -79.85, -79.79, -79.84, -79.80, -79.80, -79.81, -79.91, -79.92, -79.93,
-        -79.94, -79.89, -79.90, -79.91, -79.96, -80.03, -80.09, -80.09, -80.11, -80.11,
-        -80.06, -80.06, -80.05, -79.97, -80.03, -80.07, -80.13, -80.16, -80.16, -80.16,
-        -80.16, -80.16, -80.17, -80.11, -80.17, -80.12, -80.16, -80.16, -80.16, -80.22,
-        -80.22, -80.22, -80.25, -80.28, -80.30, -80.37, -80.37, -80.37, -80.37, -80.37,
-        -80.37, -80.38, -80.38, -80.39, -80.39, -80.39, -80.32, -80.29, -80.30, -80.28,
-        -80.19, -80.23, -80.28, -80.33, -80.37, -80.37, -80.37, -80.37, -80.37, -80.37,
-        -80.39, -80.44, -80.45, -80.45, -80.46, -80.46, -80.51, -80.57, -80.58, -80.58,
-        -80.59, -80.59, -80.59, -80.61, -80.68, -80.70, -80.82, -80.82, -80.82, -80.82,
-        -80.82, -80.72, -80.72, -80.72, -80.72, -80.71, -80.59, -80.57, -80.57, -80.49,
-        -80.53, -80.53, -80.57, -80.57, -80.67, -80.66, -80.66, -80.72, -80.72, -80.72,
-        -80.69, -80.68, -80.66, -80.63, -80.63, -80.62, -80.61, -80.61, -80.61, -80.62,
-        -80.61, -80.65, -80.62, -80.63, -80.63, -80.61, -80.65, -80.62, -80.66, -80.67,
-        -80.72, -80.76, -80.84, -80.86, -80.88, -80.89, -80.84, -80.87, -80.84, -80.89,
-        -80.93, -80.97, -81.06, -81.09, -81.15, -81.19, -81.20, -81.23, -81.30, -81.29,
-        -81.34, -81.46, -81.49, -81.54, -81.59, -81.65, -81.69, -81.68, -81.73, -81.76,
-        -81.76, -81.82, -81.89, -81.93, -82.01, -82.17, -82.18, -82.31, -82.45, -82.50,
-        -82.55, -82.59, -82.63, -82.67, -82.78, -82.84, -82.85, -83.02, -83.04, -83.10,
-        -83.15, -83.19, -83.25, -83.37, -83.42, -83.53, -83.60, -83.70, -83.79, -83.88,
-        -83.97, -84.06, -84.15, -84.15, -84.24, -84.24, -84.26, -84.33, -84.39, -84.51,
-        -84.61, -84.69, -84.62, -84.69, -84.69, -84.61, -84.68, -84.70, -84.76, -84.80,
-        -84.87, -84.94, -85.03, -85.12, -85.18, -85.24, -85.27, -85.27, -85.27, -85.27,
-        -85.25, -85.27, -85.24, -85.24, -85.27, -85.23, -85.27, -85.31, -85.35, -85.34,
-        -85.35, -85.30, -85.25, -85.25, -85.29, -85.27, -85.33, -85.36, -85.34, -85.35,
-        -85.32, -85.32, -85.28, -85.25, -85.26, -85.24, -85.20, -85.17, -85.16, -85.16,
-        -85.09, -85.07, -85.08, -85.07, -85.03, -85.00, -85.05, -85.05, -85.04, -85.06,
-        -85.08, -85.06, -85.05, -84.96, -84.93, -84.95, -84.91, -84.92, -84.97, -85.01,
-        -84.99, -85.06, -84.97, -84.91, -84.88, -84.88, -84.86, -84.85, -84.89, -84.88,
-        -84.91, -84.94, -84.96, -85.05, -85.08, -84.99, -85.01, -84.92, -84.94, -84.90,
-        -84.93, -84.98, -84.95, -85.03, -85.04, -85.03, -85.05, -85.03, -85.09, -85.00,
-        -85.08, -85.05, -85.03, -85.13, -85.12, -85.18, -85.21, -85.24, -85.28, -85.27,
-        -85.28, -85.27, -85.27, -85.28, -85.23, -85.25, -85.25, -85.27, -85.29, -85.31,
-        -85.39, -85.38, -85.39, -85.40, -85.39, -85.41, -85.36, -85.44, -85.44, -85.48,
-        -85.53, -85.55, -85.59, -85.58, -85.59, -85.60, -85.65, -85.71, -85.75, -85.81,
-        -85.81, -85.81, -85.81, -85.81, -85.82, -85.79, -85.82, -85.80, -85.81, -85.81,
-        -85.81, -85.81, -85.81, -85.82, -85.82, -85.88, -85.92, -85.97, -85.99, -85.99,
-        -85.99, -85.99, -86.00, -86.10, -86.15, -86.27, -86.33, -86.37, -86.37, -86.37,
-        -86.37, -86.36, -86.36, -86.36, -86.36, -86.36, -86.44, -86.46, -86.46, -86.56,
-        -86.56, -86.56, -86.56, -86.56, -86.56, -86.60, -86.66, -86.66, -86.70, -86.72,
-        -86.70, -86.66, -86.62, -86.55, -86.59, -86.63, -86.68, -86.73, -86.76, -86.76,
-        -86.79, -86.80, -86.76, -86.84, -86.81, -86.82, -86.81, -86.83, -86.76, -86.81,
-        -86.76, -86.74, -86.74, -86.79, -86.78, -86.84, -86.88, -86.95, -86.94, -86.95,
-        -86.94, -86.92, -86.89, -86.87, -86.82, -86.78, -86.82, -86.78, -86.79, -86.89,
-        -86.96, -86.90, -86.90, -86.89, -86.84, -86.80, -86.81, -86.75, -86.73, -86.73,
-        -86.71, -86.67, -86.65, -86.61, -86.62, -86.60, -86.58, -86.58, -86.61, -86.60,
-        -86.54, -86.49, -86.47, -86.45, -86.43, -86.33, -86.28, -86.28, -86.22, -86.16,
-        -86.12, -86.09, -86.04, -85.99, -85.90, -85.88, -85.87, -85.87, -85.89, -85.82,
-        -85.83, -85.83, -85.78, -85.74, -85.68, -85.65, -85.56, -85.48, -85.46, -85.45,
-        -85.41, -85.38, -85.39, -85.35, -85.28, -85.24, -85.16, -85.13, -84.99, -84.96,
-        -84.91, -84.86, -84.78, -84.77, -84.72, -84.67, -84.62, -84.58, -84.56, -84.48,
-        -84.40, -84.31, -84.25, -84.19, -84.15, -84.05, -83.99, -83.93, -83.91, -83.83,
-        -83.81, -83.73, -83.68, -83.67, -83.61, -83.55, -83.55, -83.52, -83.52, -83.49,
-        -83.47, -83.40, -83.32, -83.21, -83.15, -83.14, -83.08, -83.00, -82.94, -82.88,
-        -82.80, -82.73, -82.73, -82.68, -82.66, -82.65, -82.61, -82.62, -82.53, -82.55,
-        -82.56, -82.47, -82.48, -82.47, -82.40, -82.35, -82.30, -82.20, -82.11, -82.09,
-        -82.03, -81.89, -81.85, -81.84, -81.78, -81.74, -81.74, -81.74, -81.74, -81.75,
-        -81.73, -81.73, -81.64, -81.57, -81.60, -81.52, -81.48, -81.50, -81.47, -81.41,
-        -81.42, -81.38, -81.31, -81.32, -81.28, -81.26, -81.31, -81.31, -81.31, -81.36,
-        -81.35, -81.43, -81.44, -81.43, -81.50, -81.43, -81.39, -81.34, -81.33, -81.32,
-        -81.32, -81.26, -81.19, -81.12, -81.06, -80.98, -80.92, -80.94, -81.00, -81.05,
-        -81.04, -81.00, -80.99, -80.90, -80.89, -80.84, -80.73, -80.68, -80.57, -80.47,
-        -80.40, -80.39, -80.37, -80.37, -80.41, -80.31, -80.32, -80.26, -80.22, -80.21,
-        -80.13, -80.11, -80.02, -80.01, -79.92, -79.84, -79.77, -79.71, -79.60, -79.48,
-        -79.39, -79.31, -79.28, -79.15, -79.13, -79.00, -78.92, -78.80, -78.73, -78.56,
-        -78.48, -78.38, -78.17, -78.04, -77.83, -77.72, -77.56, -77.40, -77.22, -77.11,
-        -77.02, -76.86, -76.63, -76.40, -76.21, -76.02, -75.86, -75.74
+        -4212, -4215, -4222, -4228,
+        -4234, -4243, -4258, -4269, -4277, -4288, -4293, -4307, -4317, -4325,
+        -4338, -4353, -4362, -4370, -4382, -4388, -4396, -4409, -4422, -4429,
+        -4441, -4452, -4463, -4471, -4479, -4497, -4510, -4521, -4534, -4549,
+        -4557, -4572, -4588, -4593, -4599, -4613, -4620, -4627, -4633, -4644,
+        -4657, -4667, -4679, -4687, -4700, -4715, -4729, -4738, -4747, -4755,
+        -4762, -4765, -4774, -4787, -4796, -4802, -4813, -4835, -4839, -4848,
+        -4863, -4872, -4878, -4886, -4892, -4907, -4920, -4933, -4947, -4948,
+        -4948, -4960, -4977, -4986, -4987, -5003, -5008, -5018, -5030, -5039,
+        -5043, -5055, -5064, -5073, -5082, -5092, -5105, -5111, -5119, -5129,
+        -5138, -5143, -5149, -5159, -5162, -5169, -5180, -5187, -5191, -5202,
+        -5214, -5225, -5234, -5243, -5253, -5264, -5277, -5286, -5294, -5304,
+        -5316, -5327, -5337, -5349, -5357, -5363, -5374, -5382, -5391, -5397,
+        -5404, -5413, -5421, -5424, -5431, -5441, -5445, -5452, -5465, -5473,
+        -5479, -5489, -5497, -5510, -5516, -5520, -5525, -5535, -5540, -5546,
+        -5555, -5563, -5570, -5574, -5583, -5594, -5601, -5610, -5621, -5629,
+        -5635, -5645, -5654, -5662, -5668, -5675, -5686, -5694, -5699, -5705,
+        -5710, -5716, -5721, -5729, -5734, -5740, -5753, -5759, -5764, -5773,
+        -5784, -5792, -5804, -5808, -5820, -5826, -5833, -5839, -5848, -5856,
+        -5866, -5871, -5875, -5885, -5892, -5894, -5894, -5909, -5914, -5924,
+        -5935, -5941, -5950, -5961, -5968, -5973, -5977, -5982, -5990, -5998,
+        -6006, -6014, -6018, -6025, -6034, -6041, -6045, -6055, -6056, -6059,
+        -6067, -6081, -6084, -6094, -6100, -6104, -6106, -6112, -6115, -6118,
+        -6124, -6126, -6135, -6143, -6150, -6163, -6177, -6180, -6192, -6201,
+        -6206, -6210, -6215, -6219, -6223, -6226, -6230, -6233, -6242, -6248,
+        -6258, -6266, -6271, -6283, -6282, -6282, -6293, -6301, -6306, -6316,
+        -6325, -6329, -6337, -6342, -6343, -6346, -6349, -6354, -6360, -6363,
+        -6372, -6376, -6382, -6394, -6402, -6406, -6413, -6417, -6421, -6427,
+        -6429, -6432, -6442, -6446, -6448, -6452, -6455, -6460, -6467, -6480,
+        -6485, -6494, -6503, -6512, -6523, -6524, -6533, -6539, -6540, -6546,
+        -6547, -6551, -6556, -6562, -6567, -6574, -6584, -6588, -6595, -6598,
+        -6600, -6605, -6608, -6609, -6615, -6619, -6623, -6630, -6634, -6638,
+        -6647, -6652, -6659, -6670, -6675, -6681, -6686, -6691, -6696, -6702,
+        -6708, -6708, -6709, -6720, -6723, -6725, -6733, -6736, -6738, -6739,
+        -6747, -6753, -6751, -6760, -6767, -6766, -6770, -6777, -6777, -6785,
+        -6794, -6793, -6802, -6805, -6812, -6818, -6826, -6836, -6840, -6851,
+        -6854, -6856, -6860, -6864, -6862, -6862, -6864, -6868, -6869, -6880,
+        -6889, -6891, -6901, -6905, -6911, -6918, -6923, -6928, -6929, -6935,
+        -6942, -6940, -6936, -6943, -6943, -6947, -6950, -6955, -6961, -6966,
+        -6973, -6979, -6986, -6991, -6996, -7002, -7008, -7013, -7018, -7018,
+        -7026, -7030, -7032, -7040, -7043, -7046, -7051, -7054, -7053, -7061,
+        -7059, -7059, -7064, -7067, -7070, -7075, -7080, -7082, -7085, -7088,
+        -7091, -7093, -7097, -7102, -7107, -7112, -7119, -7126, -7124, -7130,
+        -7137, -7137, -7145, -7150, -7152, -7155, -7164, -7164, -7170, -7177,
+        -7176, -7184, -7190, -7194, -7198, -7201, -7207, -7209, -7217, -7218,
+        -7220, -7221, -7223, -7224, -7225, -7226, -7229, -7231, -7234, -7237,
+        -7242, -7248, -7254, -7261, -7261, -7268, -7273, -7274, -7282, -7285,
+        -7287, -7291, -7296, -7293, -7301, -7301, -7296, -7303, -7303, -7307,
+        -7312, -7320, -7326, -7327, -7332, -7339, -7343, -7350, -7350, -7354,
+        -7355, -7357, -7362, -7370, -7376, -7382, -7384, -7386, -7393, -7394,
+        -7395, -7397, -7399, -7400, -7403, -7407, -7407, -7415, -7422, -7420,
+        -7429, -7433, -7434, -7436, -7442, -7441, -7440, -7445, -7443, -7449,
+        -7454, -7459, -7461, -7466, -7470, -7473, -7479, -7481, -7491, -7493,
+        -7497, -7499, -7504, -7502, -7500, -7506, -7499, -7505, -7508, -7508,
+        -7513, -7517, -7519, -7521, -7522, -7529, -7535, -7543, -7551, -7558,
+        -7563, -7563, -7562, -7563, -7569, -7565, -7572, -7575, -7576, -7582,
+        -7581, -7585, -7582, -7585, -7591, -7601, -7610, -7617, -7623, -7627,
+        -7628, -7630, -7628, -7632, -7627, -7626, -7627, -7624, -7627, -7634,
+        -7644, -7652, -7660, -7667, -7659, -7665, -7666, -7659, -7666, -7663,
+        -7666, -7665, -7669, -7670, -7671, -7680, -7684, -7684, -7692, -7697,
+        -7704, -7706, -7708, -7705, -7706, -7710, -7705, -7713, -7716, -7723,
+        -7727, -7729, -7729, -7731, -7732, -7739, -7745, -7751, -7759, -7764,
+        -7766, -7767, -7768, -7767, -7773, -7765, -7771, -7773, -7767, -7773,
+        -7778, -7784, -7788, -7794, -7795, -7800, -7804, -7806, -7810, -7811,
+        -7808, -7806, -7815, -7816, -7819, -7826, -7827, -7829, -7827, -7828,
+        -7827, -7830, -7825, -7825, -7827, -7824, -7829, -7835, -7841, -7849,
+        -7853, -7846, -7854, -7850, -7848, -7855, -7857, -7865, -7867, -7875,
+        -7870, -7872, -7875, -7867, -7874, -7876, -7884, -7888, -7895, -7889,
+        -7890, -7895, -7888, -7889, -7894, -7898, -7904, -7910, -7914, -7919,
+        -7923, -7926, -7932, -7934, -7934, -7934, -7936, -7934, -7935, -7936,
+        -7936, -7936, -7937, -7939, -7932, -7935, -7938, -7940, -7942, -7949,
+        -7950, -7958, -7960, -7962, -7964, -7965, -7966, -7966, -7956, -7955,
+        -7954, -7955, -7956, -7964, -7965, -7974, -7974, -7984, -7984, -7988,
+        -7989, -7985, -7979, -7984, -7980, -7980, -7981, -7991, -7992, -7993,
+        -7994, -7989, -7990, -7991, -7996, -8003, -8009, -8009, -8011, -8011,
+        -8006, -8006, -8005, -7997, -8003, -8007, -8013, -8016, -8016, -8016,
+        -8016, -8016, -8017, -8011, -8017, -8012, -8016, -8016, -8016, -8022,
+        -8022, -8022, -8025, -8028, -8030, -8037, -8037, -8037, -8037, -8037,
+        -8037, -8038, -8038, -8039, -8039, -8039, -8032, -8029, -8030, -8028,
+        -8019, -8023, -8028, -8033, -8037, -8037, -8037, -8037, -8037, -8037,
+        -8039, -8044, -8045, -8045, -8046, -8046, -8051, -8057, -8058, -8058,
+        -8059, -8059, -8059, -8061, -8068, -8070, -8082, -8082, -8082, -8082,
+        -8082, -8072, -8072, -8072, -8072, -8071, -8059, -8057, -8057, -8049,
+        -8053, -8053, -8057, -8057, -8067, -8066, -8066, -8072, -8072, -8072,
+        -8069, -8068, -8066, -8063, -8063, -8062, -8061, -8061, -8061, -8062,
+        -8061, -8065, -8062, -8063, -8063, -8061, -8065, -8062, -8066, -8067,
+        -8072, -8076, -8084, -8086, -8088, -8089, -8084, -8087, -8084, -8089,
+        -8093, -8097, -8106, -8109, -8115, -8119, -8120, -8123, -8130, -8129,
+        -8134, -8146, -8149, -8154, -8159, -8165, -8169, -8168, -8173, -8176,
+        -8176, -8182, -8189, -8193, -8201, -8217, -8218, -8231, -8245, -8250,
+        -8255, -8259, -8263, -8267, -8278, -8284, -8285, -8302, -8304, -8310,
+        -8315, -8319, -8325, -8337, -8342, -8353, -8360, -8370, -8379, -8388,
+        -8397, -8406, -8415, -8415, -8424, -8424, -8426, -8433, -8439, -8451,
+        -8461, -8469, -8462, -8469, -8469, -8461, -8468, -8470, -8476, -8480,
+        -8487, -8494, -8503, -8512, -8518, -8524, -8527, -8527, -8527, -8527,
+        -8525, -8527, -8524, -8524, -8527, -8523, -8527, -8531, -8535, -8534,
+        -8535, -8530, -8525, -8525, -8529, -8527, -8533, -8536, -8534, -8535,
+        -8532, -8532, -8528, -8525, -8526, -8524, -8520, -8517, -8516, -8516,
+        -8509, -8507, -8508, -8507, -8503, -8500, -8505, -8505, -8504, -8506,
+        -8508, -8506, -8505, -8496, -8493, -8495, -8491, -8492, -8497, -8501,
+        -8499, -8506, -8497, -8491, -8488, -8488, -8486, -8485, -8489, -8488,
+        -8491, -8494, -8496, -8505, -8508, -8499, -8501, -8492, -8494, -8490,
+        -8493, -8498, -8495, -8503, -8504, -8503, -8505, -8503, -8509, -8500,
+        -8508, -8505, -8503, -8513, -8512, -8518, -8521, -8524, -8528, -8527,
+        -8528, -8527, -8527, -8528, -8523, -8525, -8525, -8527, -8529, -8531,
+        -8539, -8538, -8539, -8540, -8539, -8541, -8536, -8544, -8544, -8548,
+        -8553, -8555, -8559, -8558, -8559, -8560, -8565, -8571, -8575, -8581,
+        -8581, -8581, -8581, -8581, -8582, -8579, -8582, -8580, -8581, -8581,
+        -8581, -8581, -8581, -8582, -8582, -8588, -8592, -8597, -8599, -8599,
+        -8599, -8599, -8600, -8610, -8615, -8627, -8633, -8637, -8637, -8637,
+        -8637, -8636, -8636, -8636, -8636, -8636, -8644, -8646, -8646, -8656,
+        -8656, -8656, -8656, -8656, -8656, -8660, -8666, -8666, -8670, -8672,
+        -8670, -8666, -8662, -8655, -8659, -8663, -8668, -8673, -8676, -8676,
+        -8679, -8680, -8676, -8684, -8681, -8682, -8681, -8683, -8676, -8681,
+        -8676, -8674, -8674, -8679, -8678, -8684, -8688, -8695, -8694, -8695,
+        -8694, -8692, -8689, -8687, -8682, -8678, -8682, -8678, -8679, -8689,
+        -8696, -8690, -8690, -8689, -8684, -8680, -8681, -8675, -8673, -8673,
+        -8671, -8667, -8665, -8661, -8662, -8660, -8658, -8658, -8661, -8660,
+        -8654, -8649, -8647, -8645, -8643, -8633, -8628, -8628, -8622, -8616,
+        -8612, -8609, -8604, -8599, -8590, -8588, -8587, -8587, -8589, -8582,
+        -8583, -8583, -8578, -8574, -8568, -8565, -8556, -8548, -8546, -8545,
+        -8541, -8538, -8539, -8535, -8528, -8524, -8516, -8513, -8499, -8496,
+        -8491, -8486, -8478, -8477, -8472, -8467, -8462, -8458, -8456, -8448,
+        -8440, -8431, -8425, -8419, -8415, -8405, -8399, -8393, -8391, -8383,
+        -8381, -8373, -8368, -8367, -8361, -8355, -8355, -8352, -8352, -8349,
+        -8347, -8340, -8332, -8321, -8315, -8314, -8308, -8300, -8294, -8288,
+        -8280, -8273, -8273, -8268, -8266, -8265, -8261, -8262, -8253, -8255,
+        -8256, -8247, -8248, -8247, -8240, -8235, -8230, -8220, -8211, -8209,
+        -8203, -8189, -8185, -8184, -8178, -8174, -8174, -8174, -8174, -8175,
+        -8173, -8173, -8164, -8157, -8160, -8152, -8148, -8150, -8147, -8141,
+        -8142, -8138, -8131, -8132, -8128, -8126, -8131, -8131, -8131, -8136,
+        -8135, -8143, -8144, -8143, -8150, -8143, -8139, -8134, -8133, -8132,
+        -8132, -8126, -8119, -8112, -8106, -8098, -8092, -8094, -8100, -8105,
+        -8104, -8100, -8099, -8090, -8089, -8084, -8073, -8068, -8057, -8047,
+        -8040, -8039, -8037, -8037, -8041, -8031, -8032, -8026, -8022, -8021,
+        -8013, -8011, -8002, -8001, -7992, -7984, -7977, -7971, -7960, -7948,
+        -7939, -7931, -7928, -7915, -7913, -7900, -7892, -7880, -7873, -7856,
+        -7848, -7838, -7817, -7804, -7783, -7772, -7756, -7740, -7722, -7711,
+        -7702, -7686, -7663, -7640, -7621, -7602, -7586, -7574
     };
 
-    static const float iso226_2003_curve_10_phons[1382] =
+    static const int16_t iso226_2003_curve_10_phons[1382] =
     {
-        -36.38, -36.41, -36.47, -36.50,
-        -36.56, -36.63, -36.75, -36.84, -36.89, -36.99, -37.02, -37.13, -37.19, -37.24,
-        -37.34, -37.46, -37.51, -37.58, -37.67, -37.71, -37.74, -37.84, -37.93, -37.97,
-        -38.08, -38.16, -38.24, -38.28, -38.33, -38.46, -38.55, -38.62, -38.73, -38.84,
-        -38.88, -38.99, -39.12, -39.18, -39.21, -39.32, -39.36, -39.39, -39.44, -39.53,
-        -39.62, -39.69, -39.78, -39.84, -39.93, -40.06, -40.17, -40.25, -40.31, -40.35,
-        -40.40, -40.39, -40.42, -40.51, -40.57, -40.61, -40.67, -40.86, -40.90, -40.96,
-        -41.11, -41.19, -41.24, -41.29, -41.38, -41.49, -41.57, -41.64, -41.75, -41.74,
-        -41.76, -41.85, -41.98, -42.04, -42.06, -42.16, -42.19, -42.26, -42.35, -42.42,
-        -42.45, -42.54, -42.61, -42.68, -42.72, -42.79, -42.87, -42.91, -42.97, -43.04,
-        -43.09, -43.15, -43.20, -43.31, -43.34, -43.38, -43.51, -43.55, -43.56, -43.63,
-        -43.71, -43.77, -43.83, -43.90, -43.98, -44.03, -44.15, -44.21, -44.28, -44.36,
-        -44.46, -44.54, -44.63, -44.72, -44.78, -44.81, -44.91, -44.98, -45.05, -45.08,
-        -45.12, -45.20, -45.25, -45.26, -45.32, -45.41, -45.44, -45.50, -45.61, -45.66,
-        -45.71, -45.78, -45.83, -45.93, -45.96, -45.99, -46.05, -46.14, -46.17, -46.23,
-        -46.31, -46.36, -46.44, -46.46, -46.54, -46.61, -46.67, -46.72, -46.82, -46.88,
-        -46.92, -47.02, -47.07, -47.12, -47.17, -47.21, -47.28, -47.30, -47.33, -47.38,
-        -47.41, -47.46, -47.50, -47.58, -47.62, -47.65, -47.77, -47.83, -47.86, -47.96,
-        -48.04, -48.12, -48.23, -48.26, -48.37, -48.42, -48.46, -48.51, -48.56, -48.65,
-        -48.71, -48.76, -48.80, -48.88, -48.93, -48.94, -48.95, -49.09, -49.14, -49.21,
-        -49.30, -49.33, -49.39, -49.48, -49.52, -49.58, -49.61, -49.66, -49.74, -49.79,
-        -49.86, -49.92, -49.92, -49.98, -50.08, -50.11, -50.16, -50.28, -50.28, -50.29,
-        -50.36, -50.48, -50.50, -50.60, -50.65, -50.67, -50.68, -50.73, -50.75, -50.76,
-        -50.85, -50.83, -50.91, -50.98, -51.02, -51.13, -51.25, -51.27, -51.38, -51.47,
-        -51.49, -51.55, -51.61, -51.63, -51.68, -51.71, -51.73, -51.74, -51.82, -51.87,
-        -51.97, -52.05, -52.11, -52.21, -52.21, -52.21, -52.33, -52.42, -52.46, -52.52,
-        -52.61, -52.61, -52.70, -52.74, -52.73, -52.73, -52.75, -52.80, -52.84, -52.87,
-        -52.95, -52.99, -53.05, -53.13, -53.20, -53.24, -53.31, -53.35, -53.38, -53.45,
-        -53.49, -53.52, -53.62, -53.68, -53.70, -53.73, -53.76, -53.79, -53.84, -53.94,
-        -53.97, -54.04, -54.12, -54.20, -54.30, -54.31, -54.40, -54.47, -54.48, -54.53,
-        -54.54, -54.58, -54.64, -54.70, -54.76, -54.81, -54.89, -54.94, -55.00, -55.05,
-        -55.06, -55.13, -55.13, -55.15, -55.23, -55.27, -55.30, -55.37, -55.39, -55.43,
-        -55.51, -55.54, -55.57, -55.64, -55.68, -55.73, -55.78, -55.83, -55.90, -55.97,
-        -56.03, -56.04, -56.02, -56.11, -56.15, -56.17, -56.26, -56.29, -56.33, -56.36,
-        -56.47, -56.49, -56.49, -56.58, -56.66, -56.64, -56.66, -56.74, -56.76, -56.83,
-        -56.89, -56.89, -56.98, -57.02, -57.06, -57.11, -57.17, -57.28, -57.31, -57.41,
-        -57.41, -57.45, -57.51, -57.54, -57.53, -57.55, -57.58, -57.63, -57.64, -57.71,
-        -57.80, -57.83, -57.92, -57.97, -58.05, -58.13, -58.20, -58.27, -58.28, -58.33,
-        -58.38, -58.36, -58.34, -58.40, -58.40, -58.45, -58.48, -58.54, -58.60, -58.65,
-        -58.71, -58.76, -58.82, -58.88, -58.93, -58.99, -59.04, -59.09, -59.15, -59.17,
-        -59.25, -59.27, -59.28, -59.39, -59.43, -59.45, -59.51, -59.53, -59.51, -59.60,
-        -59.59, -59.57, -59.61, -59.67, -59.71, -59.78, -59.86, -59.88, -59.93, -59.97,
-        -60.00, -60.00, -60.06, -60.10, -60.15, -60.20, -60.24, -60.32, -60.31, -60.36,
-        -60.42, -60.43, -60.52, -60.57, -60.60, -60.64, -60.72, -60.73, -60.80, -60.84,
-        -60.83, -60.91, -60.96, -61.01, -61.05, -61.09, -61.15, -61.13, -61.22, -61.25,
-        -61.28, -61.31, -61.35, -61.40, -61.40, -61.43, -61.47, -61.49, -61.49, -61.53,
-        -61.58, -61.64, -61.69, -61.78, -61.78, -61.83, -61.86, -61.89, -61.97, -62.01,
-        -62.03, -62.09, -62.14, -62.13, -62.21, -62.24, -62.19, -62.27, -62.30, -62.32,
-        -62.38, -62.46, -62.53, -62.54, -62.58, -62.64, -62.71, -62.76, -62.76, -62.81,
-        -62.82, -62.85, -62.93, -63.02, -63.10, -63.16, -63.20, -63.22, -63.30, -63.30,
-        -63.33, -63.37, -63.40, -63.42, -63.45, -63.51, -63.53, -63.60, -63.65, -63.63,
-        -63.71, -63.74, -63.73, -63.75, -63.80, -63.79, -63.83, -63.87, -63.87, -63.95,
-        -63.99, -64.05, -64.08, -64.10, -64.17, -64.24, -64.30, -64.32, -64.42, -64.43,
-        -64.45, -64.48, -64.52, -64.52, -64.53, -64.60, -64.58, -64.64, -64.67, -64.67,
-        -64.72, -64.74, -64.77, -64.81, -64.83, -64.93, -65.00, -65.06, -65.15, -65.22,
-        -65.28, -65.30, -65.30, -65.33, -65.38, -65.34, -65.42, -65.41, -65.41, -65.49,
-        -65.49, -65.53, -65.54, -65.58, -65.63, -65.74, -65.83, -65.91, -65.95, -66.00,
-        -66.00, -66.01, -66.03, -66.03, -66.02, -66.04, -66.06, -66.03, -66.06, -66.12,
-        -66.20, -66.27, -66.33, -66.41, -66.38, -66.43, -66.46, -66.42, -66.51, -66.51,
-        -66.55, -66.56, -66.59, -66.59, -66.59, -66.64, -66.66, -66.68, -66.75, -66.82,
-        -66.92, -66.97, -66.99, -66.96, -66.99, -67.01, -66.99, -67.05, -67.10, -67.18,
-        -67.23, -67.26, -67.28, -67.29, -67.32, -67.38, -67.40, -67.48, -67.53, -67.58,
-        -67.61, -67.64, -67.66, -67.66, -67.73, -67.65, -67.70, -67.73, -67.68, -67.72,
-        -67.78, -67.86, -67.91, -67.96, -68.02, -68.07, -68.11, -68.17, -68.20, -68.22,
-        -68.18, -68.17, -68.24, -68.27, -68.31, -68.35, -68.38, -68.41, -68.40, -68.43,
-        -68.45, -68.48, -68.45, -68.48, -68.47, -68.46, -68.50, -68.56, -68.63, -68.70,
-        -68.74, -68.71, -68.76, -68.75, -68.76, -68.82, -68.86, -68.92, -68.97, -69.02,
-        -69.00, -69.01, -69.03, -68.98, -69.04, -69.08, -69.17, -69.24, -69.30, -69.28,
-        -69.29, -69.33, -69.29, -69.28, -69.35, -69.39, -69.45, -69.51, -69.55, -69.58,
-        -69.63, -69.66, -69.69, -69.74, -69.70, -69.73, -69.73, -69.73, -69.75, -69.78,
-        -69.81, -69.81, -69.85, -69.85, -69.79, -69.82, -69.85, -69.86, -69.90, -69.95,
-        -69.98, -70.04, -70.08, -70.11, -70.12, -70.15, -70.18, -70.21, -70.12, -70.14,
-        -70.14, -70.14, -70.15, -70.22, -70.25, -70.29, -70.29, -70.34, -70.34, -70.38,
-        -70.43, -70.42, -70.38, -70.46, -70.44, -70.47, -70.52, -70.59, -70.60, -70.66,
-        -70.66, -70.62, -70.67, -70.68, -70.70, -70.74, -70.77, -70.74, -70.78, -70.80,
-        -70.74, -70.78, -70.78, -70.70, -70.75, -70.78, -70.81, -70.85, -70.87, -70.88,
-        -70.89, -70.92, -70.95, -70.91, -70.95, -70.90, -70.94, -70.94, -70.99, -71.06,
-        -71.06, -71.11, -71.13, -71.17, -71.18, -71.24, -71.24, -71.24, -71.24, -71.26,
-        -71.26, -71.29, -71.32, -71.32, -71.35, -71.35, -71.28, -71.25, -71.25, -71.24,
-        -71.15, -71.19, -71.22, -71.26, -71.29, -71.31, -71.33, -71.33, -71.33, -71.33,
-        -71.35, -71.44, -71.45, -71.49, -71.51, -71.51, -71.56, -71.62, -71.65, -71.68,
-        -71.68, -71.73, -71.75, -71.76, -71.80, -71.81, -71.89, -71.89, -71.89, -71.89,
-        -71.89, -71.79, -71.83, -71.84, -71.86, -71.86, -71.77, -71.74, -71.73, -71.69,
-        -71.69, -71.69, -71.74, -71.71, -71.81, -71.81, -71.81, -71.86, -71.86, -71.86,
-        -71.85, -71.87, -71.86, -71.87, -71.86, -71.83, -71.80, -71.78, -71.78, -71.76,
-        -71.79, -71.85, -71.85, -71.84, -71.86, -71.84, -71.87, -71.85, -71.89, -71.91,
-        -71.95, -72.00, -72.08, -72.08, -72.11, -72.13, -72.07, -72.11, -72.10, -72.12,
-        -72.14, -72.15, -72.21, -72.26, -72.29, -72.36, -72.34, -72.37, -72.43, -72.39,
-        -72.43, -72.55, -72.60, -72.68, -72.75, -72.79, -72.82, -72.79, -72.82, -72.84,
-        -72.81, -72.84, -72.90, -72.91, -72.95, -73.08, -73.05, -73.15, -73.26, -73.28,
-        -73.31, -73.32, -73.35, -73.35, -73.44, -73.53, -73.53, -73.68, -73.73, -73.78,
-        -73.81, -73.82, -73.85, -73.92, -73.97, -74.04, -74.11, -74.18, -74.24, -74.31,
-        -74.38, -74.45, -74.52, -74.52, -74.56, -74.56, -74.57, -74.61, -74.66, -74.74,
-        -74.83, -74.88, -74.85, -74.89, -74.88, -74.83, -74.87, -74.88, -74.91, -74.93,
-        -74.97, -75.03, -75.10, -75.15, -75.21, -75.26, -75.27, -75.27, -75.27, -75.27,
-        -75.25, -75.27, -75.24, -75.25, -75.27, -75.23, -75.25, -75.28, -75.31, -75.30,
-        -75.31, -75.28, -75.25, -75.25, -75.29, -75.29, -75.36, -75.36, -75.35, -75.36,
-        -75.33, -75.32, -75.29, -75.24, -75.26, -75.25, -75.22, -75.23, -75.23, -75.25,
-        -75.25, -75.23, -75.27, -75.26, -75.24, -75.20, -75.24, -75.23, -75.21, -75.19,
-        -75.20, -75.17, -75.16, -75.11, -75.08, -75.12, -75.12, -75.12, -75.18, -75.22,
-        -75.19, -75.27, -75.22, -75.19, -75.14, -75.15, -75.12, -75.09, -75.10, -75.08,
-        -75.12, -75.16, -75.17, -75.24, -75.27, -75.20, -75.21, -75.12, -75.13, -75.08,
-        -75.10, -75.13, -75.09, -75.15, -75.16, -75.17, -75.21, -75.22, -75.27, -75.22,
-        -75.27, -75.23, -75.24, -75.29, -75.28, -75.32, -75.33, -75.35, -75.37, -75.37,
-        -75.39, -75.37, -75.38, -75.39, -75.34, -75.35, -75.35, -75.36, -75.35, -75.38,
-        -75.42, -75.41, -75.42, -75.42, -75.42, -75.42, -75.40, -75.44, -75.47, -75.51,
-        -75.53, -75.57, -75.59, -75.56, -75.57, -75.55, -75.58, -75.63, -75.67, -75.71,
-        -75.72, -75.74, -75.74, -75.74, -75.75, -75.72, -75.73, -75.69, -75.68, -75.68,
-        -75.68, -75.70, -75.70, -75.71, -75.73, -75.76, -75.77, -75.80, -75.81, -75.81,
-        -75.81, -75.83, -75.84, -75.93, -75.97, -76.06, -76.11, -76.13, -76.12, -76.12,
-        -76.12, -76.12, -76.09, -76.09, -76.09, -76.05, -76.13, -76.15, -76.13, -76.20,
-        -76.21, -76.21, -76.21, -76.21, -76.23, -76.26, -76.32, -76.32, -76.34, -76.37,
-        -76.36, -76.31, -76.30, -76.25, -76.27, -76.32, -76.35, -76.38, -76.37, -76.37,
-        -76.40, -76.39, -76.35, -76.41, -76.40, -76.40, -76.42, -76.43, -76.37, -76.43,
-        -76.39, -76.38, -76.40, -76.42, -76.42, -76.48, -76.51, -76.58, -76.59, -76.58,
-        -76.57, -76.56, -76.52, -76.51, -76.46, -76.42, -76.46, -76.40, -76.43, -76.53,
-        -76.58, -76.52, -76.53, -76.53, -76.47, -76.43, -76.45, -76.39, -76.37, -76.37,
-        -76.38, -76.34, -76.33, -76.32, -76.32, -76.32, -76.30, -76.31, -76.32, -76.33,
-        -76.29, -76.27, -76.25, -76.25, -76.25, -76.17, -76.11, -76.09, -76.04, -75.99,
-        -75.97, -75.95, -75.93, -75.90, -75.83, -75.82, -75.79, -75.78, -75.81, -75.76,
-        -75.79, -75.81, -75.79, -75.77, -75.73, -75.69, -75.62, -75.51, -75.48, -75.45,
-        -75.44, -75.44, -75.42, -75.40, -75.32, -75.30, -75.26, -75.27, -75.15, -75.14,
-        -75.11, -75.08, -75.00, -75.00, -74.98, -74.94, -74.92, -74.84, -74.82, -74.76,
-        -74.73, -74.64, -74.57, -74.55, -74.52, -74.43, -74.37, -74.34, -74.30, -74.25,
-        -74.25, -74.16, -74.12, -74.11, -74.05, -73.99, -73.97, -73.94, -73.94, -73.93,
-        -73.92, -73.88, -73.80, -73.71, -73.66, -73.63, -73.56, -73.49, -73.46, -73.41,
-        -73.34, -73.30, -73.30, -73.25, -73.23, -73.21, -73.18, -73.21, -73.12, -73.12,
-        -73.13, -73.04, -73.05, -73.04, -72.97, -72.92, -72.88, -72.78, -72.71, -72.65,
-        -72.59, -72.48, -72.43, -72.43, -72.37, -72.33, -72.33, -72.34, -72.32, -72.30,
-        -72.26, -72.26, -72.16, -72.08, -72.09, -72.00, -71.95, -71.94, -71.89, -71.82,
-        -71.82, -71.75, -71.70, -71.71, -71.65, -71.61, -71.64, -71.63, -71.61, -71.61,
-        -71.56, -71.64, -71.60, -71.54, -71.60, -71.54, -71.49, -71.44, -71.38, -71.33,
-        -71.29, -71.19, -71.11, -71.05, -70.97, -70.88, -70.83, -70.81, -70.82, -70.82,
-        -70.77, -70.70, -70.67, -70.58, -70.55, -70.47, -70.37, -70.31, -70.21, -70.11,
-        -70.03, -69.99, -69.95, -69.96, -69.95, -69.86, -69.81, -69.71, -69.62, -69.57,
-        -69.48, -69.47, -69.38, -69.36, -69.28, -69.19, -69.08, -69.01, -68.87, -68.73,
-        -68.66, -68.57, -68.51, -68.42, -68.36, -68.22, -68.10, -67.97, -67.89, -67.75,
-        -67.69, -67.58, -67.41, -67.29, -67.10, -66.98, -66.84, -66.66, -66.51, -66.43,
-        -66.31, -66.20, -66.01, -65.79, -65.64, -65.50, -65.36, -65.28
+        -3638, -3641, -3647, -3650,
+        -3656, -3663, -3675, -3684, -3689, -3699, -3702, -3713, -3719, -3724,
+        -3734, -3746, -3751, -3758, -3767, -3771, -3774, -3784, -3793, -3797,
+        -3808, -3816, -3824, -3828, -3833, -3846, -3855, -3862, -3873, -3884,
+        -3888, -3899, -3912, -3918, -3921, -3932, -3936, -3939, -3944, -3953,
+        -3962, -3969, -3978, -3984, -3993, -4006, -4017, -4025, -4031, -4035,
+        -4040, -4039, -4042, -4051, -4057, -4061, -4067, -4086, -4090, -4096,
+        -4111, -4119, -4124, -4129, -4138, -4149, -4157, -4164, -4175, -4174,
+        -4176, -4185, -4198, -4204, -4206, -4216, -4219, -4226, -4235, -4242,
+        -4245, -4254, -4261, -4268, -4272, -4279, -4287, -4291, -4297, -4304,
+        -4309, -4315, -4320, -4331, -4334, -4338, -4351, -4355, -4356, -4363,
+        -4371, -4377, -4383, -4390, -4398, -4403, -4415, -4421, -4428, -4436,
+        -4446, -4454, -4463, -4472, -4478, -4481, -4491, -4498, -4505, -4508,
+        -4512, -4520, -4525, -4526, -4532, -4541, -4544, -4550, -4561, -4566,
+        -4571, -4578, -4583, -4593, -4596, -4599, -4605, -4614, -4617, -4623,
+        -4631, -4636, -4644, -4646, -4654, -4661, -4667, -4672, -4682, -4688,
+        -4692, -4702, -4707, -4712, -4717, -4721, -4728, -4730, -4733, -4738,
+        -4741, -4746, -4750, -4758, -4762, -4765, -4777, -4783, -4786, -4796,
+        -4804, -4812, -4823, -4826, -4837, -4842, -4846, -4851, -4856, -4865,
+        -4871, -4876, -4880, -4888, -4893, -4894, -4895, -4909, -4914, -4921,
+        -4930, -4933, -4939, -4948, -4952, -4958, -4961, -4966, -4974, -4979,
+        -4986, -4992, -4992, -4998, -5008, -5011, -5016, -5028, -5028, -5029,
+        -5036, -5048, -5050, -5060, -5065, -5067, -5068, -5073, -5075, -5076,
+        -5085, -5083, -5091, -5098, -5102, -5113, -5125, -5127, -5138, -5147,
+        -5149, -5155, -5161, -5163, -5168, -5171, -5173, -5174, -5182, -5187,
+        -5197, -5205, -5211, -5221, -5221, -5221, -5233, -5242, -5246, -5252,
+        -5261, -5261, -5270, -5274, -5273, -5273, -5275, -5280, -5284, -5287,
+        -5295, -5299, -5305, -5313, -5320, -5324, -5331, -5335, -5338, -5345,
+        -5349, -5352, -5362, -5368, -5370, -5373, -5376, -5379, -5384, -5394,
+        -5397, -5404, -5412, -5420, -5430, -5431, -5440, -5447, -5448, -5453,
+        -5454, -5458, -5464, -5470, -5476, -5481, -5489, -5494, -5500, -5505,
+        -5506, -5513, -5513, -5515, -5523, -5527, -5530, -5537, -5539, -5543,
+        -5551, -5554, -5557, -5564, -5568, -5573, -5578, -5583, -5590, -5597,
+        -5603, -5604, -5602, -5611, -5615, -5617, -5626, -5629, -5633, -5636,
+        -5647, -5649, -5649, -5658, -5666, -5664, -5666, -5674, -5676, -5683,
+        -5689, -5689, -5698, -5702, -5706, -5711, -5717, -5728, -5731, -5741,
+        -5741, -5745, -5751, -5754, -5753, -5755, -5758, -5763, -5764, -5771,
+        -5780, -5783, -5792, -5797, -5805, -5813, -5820, -5827, -5828, -5833,
+        -5838, -5836, -5834, -5840, -5840, -5845, -5848, -5854, -5860, -5865,
+        -5871, -5876, -5882, -5888, -5893, -5899, -5904, -5909, -5915, -5917,
+        -5925, -5927, -5928, -5939, -5943, -5945, -5951, -5953, -5951, -5960,
+        -5959, -5957, -5961, -5967, -5971, -5978, -5986, -5988, -5993, -5997,
+        -6000, -6000, -6006, -6010, -6015, -6020, -6024, -6032, -6031, -6036,
+        -6042, -6043, -6052, -6057, -6060, -6064, -6072, -6073, -6080, -6084,
+        -6083, -6091, -6096, -6101, -6105, -6109, -6115, -6113, -6122, -6125,
+        -6128, -6131, -6135, -6140, -6140, -6143, -6147, -6149, -6149, -6153,
+        -6158, -6164, -6169, -6178, -6178, -6183, -6186, -6189, -6197, -6201,
+        -6203, -6209, -6214, -6213, -6221, -6224, -6219, -6227, -6230, -6232,
+        -6238, -6246, -6253, -6254, -6258, -6264, -6271, -6276, -6276, -6281,
+        -6282, -6285, -6293, -6302, -6310, -6316, -6320, -6322, -6330, -6330,
+        -6333, -6337, -6340, -6342, -6345, -6351, -6353, -6360, -6365, -6363,
+        -6371, -6374, -6373, -6375, -6380, -6379, -6383, -6387, -6387, -6395,
+        -6399, -6405, -6408, -6410, -6417, -6424, -6430, -6432, -6442, -6443,
+        -6445, -6448, -6452, -6452, -6453, -6460, -6458, -6464, -6467, -6467,
+        -6472, -6474, -6477, -6481, -6483, -6493, -6500, -6506, -6515, -6522,
+        -6528, -6530, -6530, -6533, -6538, -6534, -6542, -6541, -6541, -6549,
+        -6549, -6553, -6554, -6558, -6563, -6574, -6583, -6591, -6595, -6600,
+        -6600, -6601, -6603, -6603, -6602, -6604, -6606, -6603, -6606, -6612,
+        -6620, -6627, -6633, -6641, -6638, -6643, -6646, -6642, -6651, -6651,
+        -6655, -6656, -6659, -6659, -6659, -6664, -6666, -6668, -6675, -6682,
+        -6692, -6697, -6699, -6696, -6699, -6701, -6699, -6705, -6710, -6718,
+        -6723, -6726, -6728, -6729, -6732, -6738, -6740, -6748, -6753, -6758,
+        -6761, -6764, -6766, -6766, -6773, -6765, -6770, -6773, -6768, -6772,
+        -6778, -6786, -6791, -6796, -6802, -6807, -6811, -6817, -6820, -6822,
+        -6818, -6817, -6824, -6827, -6831, -6835, -6838, -6841, -6840, -6843,
+        -6845, -6848, -6845, -6848, -6847, -6846, -6850, -6856, -6863, -6870,
+        -6874, -6871, -6876, -6875, -6876, -6882, -6886, -6892, -6897, -6902,
+        -6900, -6901, -6903, -6898, -6904, -6908, -6917, -6924, -6930, -6928,
+        -6929, -6933, -6929, -6928, -6935, -6939, -6945, -6951, -6955, -6958,
+        -6963, -6966, -6969, -6974, -6970, -6973, -6973, -6973, -6975, -6978,
+        -6981, -6981, -6985, -6985, -6979, -6982, -6985, -6986, -6990, -6995,
+        -6998, -7004, -7008, -7011, -7012, -7015, -7018, -7021, -7012, -7014,
+        -7014, -7014, -7015, -7022, -7025, -7029, -7029, -7034, -7034, -7038,
+        -7043, -7042, -7038, -7046, -7044, -7047, -7052, -7059, -7060, -7066,
+        -7066, -7062, -7067, -7068, -7070, -7074, -7077, -7074, -7078, -7080,
+        -7074, -7078, -7078, -7070, -7075, -7078, -7081, -7085, -7087, -7088,
+        -7089, -7092, -7095, -7091, -7095, -7090, -7094, -7094, -7099, -7106,
+        -7106, -7111, -7113, -7117, -7118, -7124, -7124, -7124, -7124, -7126,
+        -7126, -7129, -7132, -7132, -7135, -7135, -7128, -7125, -7125, -7124,
+        -7115, -7119, -7122, -7126, -7129, -7131, -7133, -7133, -7133, -7133,
+        -7135, -7144, -7145, -7149, -7151, -7151, -7156, -7162, -7165, -7168,
+        -7168, -7173, -7175, -7176, -7180, -7181, -7189, -7189, -7189, -7189,
+        -7189, -7179, -7183, -7184, -7186, -7186, -7177, -7174, -7173, -7169,
+        -7169, -7169, -7174, -7171, -7181, -7181, -7181, -7186, -7186, -7186,
+        -7185, -7187, -7186, -7187, -7186, -7183, -7180, -7178, -7178, -7176,
+        -7179, -7185, -7185, -7184, -7186, -7184, -7187, -7185, -7189, -7191,
+        -7195, -7200, -7208, -7208, -7211, -7213, -7207, -7211, -7210, -7212,
+        -7214, -7215, -7221, -7226, -7229, -7236, -7234, -7237, -7243, -7239,
+        -7243, -7255, -7260, -7268, -7275, -7279, -7282, -7279, -7282, -7284,
+        -7281, -7284, -7290, -7291, -7295, -7308, -7305, -7315, -7326, -7328,
+        -7331, -7332, -7335, -7335, -7344, -7353, -7353, -7368, -7373, -7378,
+        -7381, -7382, -7385, -7392, -7397, -7404, -7411, -7418, -7424, -7431,
+        -7438, -7445, -7452, -7452, -7456, -7456, -7457, -7461, -7466, -7474,
+        -7483, -7488, -7485, -7489, -7488, -7483, -7487, -7488, -7491, -7493,
+        -7497, -7503, -7510, -7515, -7521, -7526, -7527, -7527, -7527, -7527,
+        -7525, -7527, -7524, -7525, -7527, -7523, -7525, -7528, -7531, -7530,
+        -7531, -7528, -7525, -7525, -7529, -7529, -7536, -7536, -7535, -7536,
+        -7533, -7532, -7529, -7524, -7526, -7525, -7522, -7523, -7523, -7525,
+        -7525, -7523, -7527, -7526, -7524, -7520, -7524, -7523, -7521, -7519,
+        -7520, -7517, -7516, -7511, -7508, -7512, -7512, -7512, -7518, -7522,
+        -7519, -7527, -7522, -7519, -7514, -7515, -7512, -7509, -7510, -7508,
+        -7512, -7516, -7517, -7524, -7527, -7520, -7521, -7512, -7513, -7508,
+        -7510, -7513, -7509, -7515, -7516, -7517, -7521, -7522, -7527, -7522,
+        -7527, -7523, -7524, -7529, -7528, -7532, -7533, -7535, -7537, -7537,
+        -7539, -7537, -7538, -7539, -7534, -7535, -7535, -7536, -7535, -7538,
+        -7542, -7541, -7542, -7542, -7542, -7542, -7540, -7544, -7547, -7551,
+        -7553, -7557, -7559, -7556, -7557, -7555, -7558, -7563, -7567, -7571,
+        -7572, -7574, -7574, -7574, -7575, -7572, -7573, -7569, -7568, -7568,
+        -7568, -7570, -7570, -7571, -7573, -7576, -7577, -7580, -7581, -7581,
+        -7581, -7583, -7584, -7593, -7597, -7606, -7611, -7613, -7612, -7612,
+        -7612, -7612, -7609, -7609, -7609, -7605, -7613, -7615, -7613, -7620,
+        -7621, -7621, -7621, -7621, -7623, -7626, -7632, -7632, -7634, -7637,
+        -7636, -7631, -7630, -7625, -7627, -7632, -7635, -7638, -7637, -7637,
+        -7640, -7639, -7635, -7641, -7640, -7640, -7642, -7643, -7637, -7643,
+        -7639, -7638, -7640, -7642, -7642, -7648, -7651, -7658, -7659, -7658,
+        -7657, -7656, -7652, -7651, -7646, -7642, -7646, -7640, -7643, -7653,
+        -7658, -7652, -7653, -7653, -7647, -7643, -7645, -7639, -7637, -7637,
+        -7638, -7634, -7633, -7632, -7632, -7632, -7630, -7631, -7632, -7633,
+        -7629, -7627, -7625, -7625, -7625, -7617, -7611, -7609, -7604, -7599,
+        -7597, -7595, -7593, -7590, -7583, -7582, -7579, -7578, -7581, -7576,
+        -7579, -7581, -7579, -7577, -7573, -7569, -7562, -7551, -7548, -7545,
+        -7544, -7544, -7542, -7540, -7532, -7530, -7526, -7527, -7515, -7514,
+        -7511, -7508, -7500, -7500, -7498, -7494, -7492, -7484, -7482, -7476,
+        -7473, -7464, -7457, -7455, -7452, -7443, -7437, -7434, -7430, -7425,
+        -7425, -7416, -7412, -7411, -7405, -7399, -7397, -7394, -7394, -7393,
+        -7392, -7388, -7380, -7371, -7366, -7363, -7356, -7349, -7346, -7341,
+        -7334, -7330, -7330, -7325, -7323, -7321, -7318, -7321, -7312, -7312,
+        -7313, -7304, -7305, -7304, -7297, -7292, -7288, -7278, -7271, -7265,
+        -7259, -7248, -7243, -7243, -7237, -7233, -7233, -7234, -7232, -7230,
+        -7226, -7226, -7216, -7208, -7209, -7200, -7195, -7194, -7189, -7182,
+        -7182, -7175, -7170, -7171, -7165, -7161, -7164, -7163, -7161, -7161,
+        -7156, -7164, -7160, -7154, -7160, -7154, -7149, -7144, -7138, -7133,
+        -7129, -7119, -7111, -7105, -7097, -7088, -7083, -7081, -7082, -7082,
+        -7077, -7070, -7067, -7058, -7055, -7047, -7037, -7031, -7021, -7011,
+        -7003, -6999, -6995, -6996, -6995, -6986, -6981, -6971, -6962, -6957,
+        -6948, -6947, -6938, -6936, -6928, -6919, -6908, -6901, -6887, -6873,
+        -6866, -6857, -6851, -6842, -6836, -6822, -6810, -6797, -6789, -6775,
+        -6769, -6758, -6741, -6729, -6710, -6698, -6684, -6666, -6651, -6643,
+        -6631, -6620, -6601, -6579, -6564, -6550, -6536, -6528
     };
 
-    static const float iso226_2003_curve_20_phons[1382] =
+    static const int16_t iso226_2003_curve_20_phons[1382] =
     {
-        -30.64, -30.66, -30.73, -30.73,
-        -30.77, -30.83, -30.91, -31.00, -31.01, -31.09, -31.12, -31.19, -31.22, -31.24,
-        -31.30, -31.39, -31.41, -31.45, -31.52, -31.53, -31.53, -31.58, -31.63, -31.65,
-        -31.74, -31.79, -31.85, -31.86, -31.86, -31.95, -32.01, -32.03, -32.12, -32.19,
-        -32.19, -32.26, -32.36, -32.42, -32.43, -32.52, -32.52, -32.52, -32.55, -32.61,
-        -32.66, -32.71, -32.76, -32.81, -32.86, -32.98, -33.05, -33.11, -33.14, -33.16,
-        -33.17, -33.12, -33.10, -33.15, -33.18, -33.20, -33.21, -33.37, -33.42, -33.44,
-        -33.59, -33.66, -33.71, -33.72, -33.85, -33.90, -33.95, -33.95, -34.03, -34.00,
-        -34.04, -34.11, -34.18, -34.22, -34.25, -34.29, -34.30, -34.34, -34.40, -34.44,
-        -34.46, -34.53, -34.58, -34.63, -34.63, -34.65, -34.70, -34.71, -34.75, -34.79,
-        -34.80, -34.88, -34.91, -35.03, -35.07, -35.08, -35.22, -35.22, -35.22, -35.23,
-        -35.28, -35.29, -35.33, -35.36, -35.42, -35.43, -35.52, -35.57, -35.62, -35.68,
-        -35.77, -35.81, -35.88, -35.95, -36.00, -36.00, -36.08, -36.14, -36.18, -36.19,
-        -36.20, -36.27, -36.29, -36.29, -36.32, -36.40, -36.43, -36.47, -36.57, -36.60,
-        -36.62, -36.67, -36.68, -36.76, -36.76, -36.79, -36.84, -36.94, -36.95, -37.00,
-        -37.08, -37.10, -37.17, -37.18, -37.24, -37.29, -37.33, -37.35, -37.43, -37.47,
-        -37.50, -37.58, -37.60, -37.62, -37.65, -37.67, -37.70, -37.67, -37.67, -37.72,
-        -37.73, -37.76, -37.80, -37.86, -37.91, -37.90, -38.00, -38.07, -38.09, -38.18,
-        -38.24, -38.31, -38.43, -38.44, -38.54, -38.57, -38.58, -38.62, -38.65, -38.74,
-        -38.75, -38.81, -38.84, -38.90, -38.94, -38.94, -38.96, -39.09, -39.14, -39.19,
-        -39.25, -39.26, -39.29, -39.34, -39.37, -39.43, -39.45, -39.50, -39.57, -39.59,
-        -39.67, -39.70, -39.67, -39.71, -39.82, -39.82, -39.86, -40.01, -40.00, -40.00,
-        -40.06, -40.16, -40.16, -40.25, -40.31, -40.31, -40.30, -40.35, -40.34, -40.34,
-        -40.45, -40.41, -40.47, -40.53, -40.54, -40.64, -40.73, -40.74, -40.83, -40.92,
-        -40.93, -41.01, -41.06, -41.07, -41.13, -41.15, -41.16, -41.16, -41.21, -41.25,
-        -41.36, -41.44, -41.51, -41.60, -41.59, -41.59, -41.74, -41.83, -41.86, -41.88,
-        -41.96, -41.94, -42.02, -42.06, -42.03, -42.00, -42.01, -42.07, -42.08, -42.11,
-        -42.18, -42.22, -42.28, -42.33, -42.39, -42.42, -42.49, -42.53, -42.55, -42.63,
-        -42.69, -42.72, -42.82, -42.89, -42.91, -42.94, -42.97, -42.98, -43.02, -43.08,
-        -43.08, -43.14, -43.22, -43.27, -43.37, -43.37, -43.46, -43.56, -43.56, -43.60,
-        -43.61, -43.64, -43.72, -43.79, -43.84, -43.89, -43.95, -44.00, -44.05, -44.12,
-        -44.13, -44.21, -44.17, -44.21, -44.31, -44.35, -44.38, -44.44, -44.44, -44.49,
-        -44.54, -44.57, -44.55, -44.58, -44.60, -44.66, -44.69, -44.75, -44.84, -44.92,
-        -44.98, -45.01, -44.94, -45.03, -45.07, -45.09, -45.19, -45.22, -45.27, -45.33,
-        -45.46, -45.45, -45.47, -45.57, -45.65, -45.62, -45.62, -45.70, -45.74, -45.82,
-        -45.85, -45.84, -45.94, -45.99, -45.99, -46.04, -46.09, -46.19, -46.22, -46.30,
-        -46.28, -46.33, -46.43, -46.45, -46.43, -46.47, -46.51, -46.57, -46.59, -46.62,
-        -46.70, -46.75, -46.82, -46.89, -46.99, -47.08, -47.18, -47.26, -47.28, -47.31,
-        -47.33, -47.33, -47.33, -47.36, -47.36, -47.42, -47.47, -47.52, -47.58, -47.63,
-        -47.68, -47.72, -47.77, -47.84, -47.90, -47.95, -48.00, -48.06, -48.12, -48.15,
-        -48.25, -48.25, -48.25, -48.38, -48.43, -48.45, -48.50, -48.52, -48.50, -48.59,
-        -48.58, -48.55, -48.59, -48.68, -48.73, -48.82, -48.91, -48.93, -49.01, -49.06,
-        -49.09, -49.07, -49.14, -49.19, -49.23, -49.28, -49.28, -49.37, -49.38, -49.41,
-        -49.48, -49.49, -49.59, -49.63, -49.67, -49.72, -49.80, -49.81, -49.89, -49.91,
-        -49.89, -49.98, -50.03, -50.07, -50.12, -50.17, -50.23, -50.17, -50.27, -50.32,
-        -50.37, -50.42, -50.47, -50.56, -50.55, -50.60, -50.64, -50.67, -50.65, -50.69,
-        -50.74, -50.79, -50.85, -50.94, -50.95, -50.98, -51.00, -51.04, -51.13, -51.17,
-        -51.18, -51.26, -51.31, -51.32, -51.42, -51.46, -51.42, -51.52, -51.56, -51.57,
-        -51.64, -51.72, -51.80, -51.80, -51.85, -51.90, -51.98, -52.01, -52.03, -52.09,
-        -52.09, -52.14, -52.24, -52.34, -52.44, -52.49, -52.55, -52.58, -52.66, -52.66,
-        -52.72, -52.76, -52.81, -52.85, -52.88, -52.95, -52.98, -53.06, -53.08, -53.06,
-        -53.14, -53.14, -53.11, -53.14, -53.17, -53.18, -53.26, -53.29, -53.30, -53.40,
-        -53.44, -53.50, -53.55, -53.55, -53.65, -53.74, -53.81, -53.83, -53.93, -53.92,
-        -53.92, -53.97, -54.00, -54.02, -54.07, -54.14, -54.17, -54.22, -54.26, -54.26,
-        -54.31, -54.31, -54.36, -54.41, -54.45, -54.57, -54.65, -54.70, -54.79, -54.87,
-        -54.93, -54.97, -54.98, -55.03, -55.07, -55.03, -55.12, -55.07, -55.05, -55.16,
-        -55.16, -55.21, -55.26, -55.31, -55.36, -55.46, -55.56, -55.64, -55.67, -55.73,
-        -55.72, -55.73, -55.77, -55.74, -55.77, -55.82, -55.85, -55.81, -55.86, -55.91,
-        -55.96, -56.02, -56.07, -56.16, -56.17, -56.21, -56.26, -56.26, -56.36, -56.39,
-        -56.43, -56.47, -56.48, -56.48, -56.48, -56.48, -56.48, -56.53, -56.58, -56.68,
-        -56.80, -56.87, -56.89, -56.87, -56.92, -56.92, -56.92, -56.97, -57.03, -57.12,
-        -57.18, -57.22, -57.27, -57.28, -57.32, -57.36, -57.36, -57.45, -57.47, -57.52,
-        -57.56, -57.60, -57.63, -57.65, -57.73, -57.65, -57.68, -57.73, -57.69, -57.71,
-        -57.79, -57.88, -57.93, -57.98, -58.09, -58.13, -58.18, -58.28, -58.30, -58.33,
-        -58.28, -58.28, -58.33, -58.37, -58.43, -58.45, -58.49, -58.54, -58.54, -58.58,
-        -58.63, -58.67, -58.64, -58.71, -58.66, -58.69, -58.71, -58.77, -58.85, -58.90,
-        -58.94, -58.95, -58.97, -59.00, -59.04, -59.09, -59.15, -59.20, -59.26, -59.30,
-        -59.30, -59.30, -59.30, -59.29, -59.34, -59.40, -59.50, -59.60, -59.64, -59.67,
-        -59.68, -59.72, -59.70, -59.66, -59.76, -59.80, -59.86, -59.92, -59.96, -59.96,
-        -60.03, -60.05, -60.06, -60.14, -60.07, -60.12, -60.10, -60.13, -60.16, -60.19,
-        -60.26, -60.27, -60.32, -60.32, -60.27, -60.28, -60.32, -60.32, -60.38, -60.41,
-        -60.47, -60.50, -60.56, -60.61, -60.60, -60.66, -60.70, -60.75, -60.69, -60.73,
-        -60.73, -60.73, -60.74, -60.81, -60.84, -60.84, -60.84, -60.84, -60.84, -60.89,
-        -60.98, -61.00, -60.98, -61.08, -61.09, -61.14, -61.23, -61.28, -61.29, -61.38,
-        -61.39, -61.34, -61.44, -61.44, -61.44, -61.44, -61.44, -61.39, -61.44, -61.48,
-        -61.43, -61.51, -61.51, -61.43, -61.48, -61.48, -61.49, -61.53, -61.58, -61.60,
-        -61.63, -61.67, -61.72, -61.71, -61.72, -61.67, -61.72, -61.72, -61.81, -61.91,
-        -61.91, -62.00, -62.01, -62.06, -62.07, -62.11, -62.11, -62.11, -62.11, -62.16,
-        -62.16, -62.21, -62.25, -62.26, -62.31, -62.31, -62.24, -62.21, -62.21, -62.20,
-        -62.11, -62.15, -62.16, -62.19, -62.20, -62.25, -62.29, -62.29, -62.29, -62.29,
-        -62.31, -62.45, -62.46, -62.53, -62.56, -62.56, -62.61, -62.67, -62.72, -62.77,
-        -62.78, -62.87, -62.92, -62.92, -62.92, -62.92, -62.97, -62.97, -62.97, -62.97,
-        -62.97, -62.86, -62.95, -62.96, -63.00, -63.00, -62.95, -62.90, -62.90, -62.89,
-        -62.86, -62.86, -62.90, -62.85, -62.95, -62.95, -62.95, -63.00, -63.00, -63.00,
-        -63.00, -63.05, -63.05, -63.10, -63.09, -63.04, -62.99, -62.95, -62.94, -62.90,
-        -62.96, -63.04, -63.08, -63.05, -63.09, -63.08, -63.08, -63.08, -63.11, -63.15,
-        -63.17, -63.24, -63.31, -63.30, -63.34, -63.38, -63.30, -63.35, -63.35, -63.34,
-        -63.35, -63.33, -63.35, -63.42, -63.43, -63.53, -63.48, -63.51, -63.56, -63.48,
-        -63.52, -63.65, -63.72, -63.82, -63.91, -63.92, -63.96, -63.91, -63.91, -63.92,
-        -63.86, -63.86, -63.90, -63.89, -63.90, -63.99, -63.92, -63.99, -64.06, -64.05,
-        -64.08, -64.05, -64.07, -64.03, -64.11, -64.21, -64.22, -64.35, -64.41, -64.46,
-        -64.46, -64.45, -64.45, -64.47, -64.52, -64.56, -64.61, -64.66, -64.70, -64.75,
-        -64.79, -64.84, -64.88, -64.88, -64.88, -64.88, -64.88, -64.88, -64.92, -64.97,
-        -65.04, -65.06, -65.08, -65.08, -65.06, -65.05, -65.06, -65.06, -65.06, -65.06,
-        -65.07, -65.12, -65.17, -65.18, -65.23, -65.27, -65.27, -65.27, -65.27, -65.27,
-        -65.25, -65.27, -65.24, -65.26, -65.27, -65.23, -65.23, -65.24, -65.27, -65.26,
-        -65.26, -65.25, -65.25, -65.25, -65.30, -65.31, -65.40, -65.36, -65.36, -65.37,
-        -65.33, -65.32, -65.31, -65.23, -65.26, -65.25, -65.25, -65.28, -65.29, -65.35,
-        -65.40, -65.39, -65.45, -65.46, -65.46, -65.41, -65.42, -65.41, -65.37, -65.32,
-        -65.31, -65.27, -65.27, -65.26, -65.24, -65.30, -65.32, -65.33, -65.38, -65.42,
-        -65.39, -65.48, -65.47, -65.46, -65.39, -65.42, -65.37, -65.32, -65.32, -65.27,
-        -65.32, -65.37, -65.38, -65.44, -65.46, -65.41, -65.40, -65.32, -65.32, -65.25,
-        -65.27, -65.27, -65.22, -65.28, -65.28, -65.32, -65.37, -65.41, -65.46, -65.44,
-        -65.46, -65.42, -65.45, -65.46, -65.44, -65.46, -65.44, -65.46, -65.45, -65.46,
-        -65.50, -65.46, -65.50, -65.50, -65.45, -65.46, -65.45, -65.46, -65.42, -65.44,
-        -65.46, -65.44, -65.45, -65.44, -65.45, -65.44, -65.44, -65.44, -65.49, -65.53,
-        -65.53, -65.59, -65.59, -65.54, -65.54, -65.50, -65.50, -65.55, -65.59, -65.62,
-        -65.63, -65.68, -65.68, -65.68, -65.68, -65.64, -65.64, -65.59, -65.55, -65.55,
-        -65.55, -65.59, -65.59, -65.59, -65.63, -65.63, -65.63, -65.63, -65.63, -65.63,
-        -65.63, -65.68, -65.68, -65.77, -65.79, -65.85, -65.89, -65.88, -65.88, -65.88,
-        -65.88, -65.87, -65.82, -65.82, -65.82, -65.75, -65.82, -65.84, -65.80, -65.84,
-        -65.85, -65.85, -65.85, -65.85, -65.89, -65.93, -65.99, -65.98, -65.98, -66.03,
-        -66.02, -65.97, -65.97, -65.96, -65.96, -66.00, -66.01, -66.02, -65.98, -65.99,
-        -66.01, -65.98, -65.94, -65.98, -65.98, -65.98, -66.03, -66.03, -65.98, -66.04,
-        -66.02, -66.01, -66.07, -66.06, -66.05, -66.12, -66.14, -66.22, -66.25, -66.22,
-        -66.21, -66.20, -66.15, -66.15, -66.10, -66.05, -66.10, -66.02, -66.06, -66.16,
-        -66.21, -66.15, -66.16, -66.16, -66.11, -66.06, -66.09, -66.02, -66.00, -66.01,
-        -66.05, -66.01, -66.01, -66.02, -66.03, -66.04, -66.03, -66.03, -66.03, -66.06,
-        -66.04, -66.04, -66.04, -66.05, -66.07, -66.01, -65.94, -65.89, -65.85, -65.82,
-        -65.82, -65.82, -65.82, -65.82, -65.77, -65.76, -65.71, -65.69, -65.73, -65.69,
-        -65.74, -65.79, -65.79, -65.79, -65.78, -65.74, -65.68, -65.55, -65.51, -65.46,
-        -65.46, -65.50, -65.46, -65.45, -65.37, -65.36, -65.36, -65.40, -65.31, -65.32,
-        -65.32, -65.30, -65.22, -65.22, -65.23, -65.20, -65.23, -65.10, -65.09, -65.04,
-        -65.06, -64.98, -64.89, -64.91, -64.89, -64.82, -64.75, -64.75, -64.70, -64.67,
-        -64.69, -64.60, -64.55, -64.55, -64.50, -64.43, -64.40, -64.36, -64.36, -64.36,
-        -64.37, -64.36, -64.27, -64.20, -64.16, -64.13, -64.04, -63.98, -63.97, -63.93,
-        -63.87, -63.86, -63.87, -63.83, -63.80, -63.77, -63.75, -63.79, -63.70, -63.69,
-        -63.70, -63.61, -63.61, -63.61, -63.54, -63.50, -63.45, -63.35, -63.30, -63.22,
-        -63.15, -63.06, -63.02, -63.02, -62.97, -62.92, -62.93, -62.93, -62.90, -62.84,
-        -62.79, -62.78, -62.68, -62.58, -62.58, -62.48, -62.42, -62.38, -62.31, -62.23,
-        -62.22, -62.13, -62.08, -62.10, -62.02, -61.96, -61.97, -61.95, -61.91, -61.86,
-        -61.76, -61.84, -61.76, -61.66, -61.70, -61.66, -61.58, -61.54, -61.44, -61.34,
-        -61.27, -61.12, -61.02, -60.98, -60.88, -60.78, -60.74, -60.69, -60.64, -60.60,
-        -60.49, -60.41, -60.35, -60.26, -60.21, -60.11, -60.00, -59.95, -59.84, -59.74,
-        -59.67, -59.60, -59.54, -59.54, -59.50, -59.40, -59.30, -59.16, -59.02, -58.93,
-        -58.83, -58.83, -58.74, -58.70, -58.64, -58.54, -58.40, -58.30, -58.14, -57.98,
-        -57.92, -57.82, -57.74, -57.68, -57.58, -57.44, -57.28, -57.15, -57.05, -56.95,
-        -56.91, -56.78, -56.66, -56.55, -56.36, -56.23, -56.12, -55.91, -55.81, -55.75,
-        -55.60, -55.53, -55.39, -55.18, -55.07, -54.98, -54.87, -54.82
+        -3064, -3066, -3073, -3073,
+        -3077, -3083, -3091, -3100, -3101, -3109, -3112, -3119, -3122, -3124,
+        -3130, -3139, -3141, -3145, -3152, -3153, -3153, -3158, -3163, -3165,
+        -3174, -3179, -3185, -3186, -3186, -3195, -3201, -3203, -3212, -3219,
+        -3219, -3226, -3236, -3242, -3243, -3252, -3252, -3252, -3255, -3261,
+        -3266, -3271, -3276, -3281, -3286, -3298, -3305, -3311, -3314, -3316,
+        -3317, -3312, -3310, -3315, -3318, -3320, -3321, -3337, -3342, -3344,
+        -3359, -3366, -3371, -3372, -3385, -3390, -3395, -3395, -3403, -3400,
+        -3404, -3411, -3418, -3422, -3425, -3429, -3430, -3434, -3440, -3444,
+        -3446, -3453, -3458, -3463, -3463, -3465, -3470, -3471, -3475, -3479,
+        -3480, -3488, -3491, -3503, -3507, -3508, -3522, -3522, -3522, -3523,
+        -3528, -3529, -3533, -3536, -3542, -3543, -3552, -3557, -3562, -3568,
+        -3577, -3581, -3588, -3595, -3600, -3600, -3608, -3614, -3618, -3619,
+        -3620, -3627, -3629, -3629, -3632, -3640, -3643, -3647, -3657, -3660,
+        -3662, -3667, -3668, -3676, -3676, -3679, -3684, -3694, -3695, -3700,
+        -3708, -3710, -3717, -3718, -3724, -3729, -3733, -3735, -3743, -3747,
+        -3750, -3758, -3760, -3762, -3765, -3767, -3770, -3767, -3767, -3772,
+        -3773, -3776, -3780, -3786, -3791, -3790, -3800, -3807, -3809, -3818,
+        -3824, -3831, -3843, -3844, -3854, -3857, -3858, -3862, -3865, -3874,
+        -3875, -3881, -3884, -3890, -3894, -3894, -3896, -3909, -3914, -3919,
+        -3925, -3926, -3929, -3934, -3937, -3943, -3945, -3950, -3957, -3959,
+        -3967, -3970, -3967, -3971, -3982, -3982, -3986, -4001, -4000, -4000,
+        -4006, -4016, -4016, -4025, -4031, -4031, -4030, -4035, -4034, -4034,
+        -4045, -4041, -4047, -4053, -4054, -4064, -4073, -4074, -4083, -4092,
+        -4093, -4101, -4106, -4107, -4113, -4115, -4116, -4116, -4121, -4125,
+        -4136, -4144, -4151, -4160, -4159, -4159, -4174, -4183, -4186, -4188,
+        -4196, -4194, -4202, -4206, -4203, -4200, -4201, -4207, -4208, -4211,
+        -4218, -4222, -4228, -4233, -4239, -4242, -4249, -4253, -4255, -4263,
+        -4269, -4272, -4282, -4289, -4291, -4294, -4297, -4298, -4302, -4308,
+        -4308, -4314, -4322, -4327, -4337, -4337, -4346, -4356, -4356, -4360,
+        -4361, -4364, -4372, -4379, -4384, -4389, -4395, -4400, -4405, -4412,
+        -4413, -4421, -4417, -4421, -4431, -4435, -4438, -4444, -4444, -4449,
+        -4454, -4457, -4455, -4458, -4460, -4466, -4469, -4475, -4484, -4492,
+        -4498, -4501, -4494, -4503, -4507, -4509, -4519, -4522, -4527, -4533,
+        -4546, -4545, -4547, -4557, -4565, -4562, -4562, -4570, -4574, -4582,
+        -4585, -4584, -4594, -4599, -4599, -4604, -4609, -4619, -4622, -4630,
+        -4628, -4633, -4643, -4645, -4643, -4647, -4651, -4657, -4659, -4662,
+        -4670, -4675, -4682, -4689, -4699, -4708, -4718, -4726, -4728, -4731,
+        -4733, -4733, -4733, -4736, -4736, -4742, -4747, -4752, -4758, -4763,
+        -4768, -4772, -4777, -4784, -4790, -4795, -4800, -4806, -4812, -4815,
+        -4825, -4825, -4825, -4838, -4843, -4845, -4850, -4852, -4850, -4859,
+        -4858, -4855, -4859, -4868, -4873, -4882, -4891, -4893, -4901, -4906,
+        -4909, -4907, -4914, -4919, -4923, -4928, -4928, -4937, -4938, -4941,
+        -4948, -4949, -4959, -4963, -4967, -4972, -4980, -4981, -4989, -4991,
+        -4989, -4998, -5003, -5007, -5012, -5017, -5023, -5017, -5027, -5032,
+        -5037, -5042, -5047, -5056, -5055, -5060, -5064, -5067, -5065, -5069,
+        -5074, -5079, -5085, -5094, -5095, -5098, -5100, -5104, -5113, -5117,
+        -5118, -5126, -5131, -5132, -5142, -5146, -5142, -5152, -5156, -5157,
+        -5164, -5172, -5180, -5180, -5185, -5190, -5198, -5201, -5203, -5209,
+        -5209, -5214, -5224, -5234, -5244, -5249, -5255, -5258, -5266, -5266,
+        -5272, -5276, -5281, -5285, -5288, -5295, -5298, -5306, -5308, -5306,
+        -5314, -5314, -5311, -5314, -5317, -5318, -5326, -5329, -5330, -5340,
+        -5344, -5350, -5355, -5355, -5365, -5374, -5381, -5383, -5393, -5392,
+        -5392, -5397, -5400, -5402, -5407, -5414, -5417, -5422, -5426, -5426,
+        -5431, -5431, -5436, -5441, -5445, -5457, -5465, -5470, -5479, -5487,
+        -5493, -5497, -5498, -5503, -5507, -5503, -5512, -5507, -5505, -5516,
+        -5516, -5521, -5526, -5531, -5536, -5546, -5556, -5564, -5567, -5573,
+        -5572, -5573, -5577, -5574, -5577, -5582, -5585, -5581, -5586, -5591,
+        -5596, -5602, -5607, -5616, -5617, -5621, -5626, -5626, -5636, -5639,
+        -5643, -5647, -5648, -5648, -5648, -5648, -5648, -5653, -5658, -5668,
+        -5680, -5687, -5689, -5687, -5692, -5692, -5692, -5697, -5703, -5712,
+        -5718, -5722, -5727, -5728, -5732, -5736, -5736, -5745, -5747, -5752,
+        -5756, -5760, -5763, -5765, -5773, -5765, -5768, -5773, -5769, -5771,
+        -5779, -5788, -5793, -5798, -5809, -5813, -5818, -5828, -5830, -5833,
+        -5828, -5828, -5833, -5837, -5843, -5845, -5849, -5854, -5854, -5858,
+        -5863, -5867, -5864, -5871, -5866, -5869, -5871, -5877, -5885, -5890,
+        -5894, -5895, -5897, -5900, -5904, -5909, -5915, -5920, -5926, -5930,
+        -5930, -5930, -5930, -5929, -5934, -5940, -5950, -5960, -5964, -5967,
+        -5968, -5972, -5970, -5966, -5976, -5980, -5986, -5992, -5996, -5996,
+        -6003, -6005, -6006, -6014, -6007, -6012, -6010, -6013, -6016, -6019,
+        -6026, -6027, -6032, -6032, -6027, -6028, -6032, -6032, -6038, -6041,
+        -6047, -6050, -6056, -6061, -6060, -6066, -6070, -6075, -6069, -6073,
+        -6073, -6073, -6074, -6081, -6084, -6084, -6084, -6084, -6084, -6089,
+        -6098, -6100, -6098, -6108, -6109, -6114, -6123, -6128, -6129, -6138,
+        -6139, -6134, -6144, -6144, -6144, -6144, -6144, -6139, -6144, -6148,
+        -6143, -6151, -6151, -6143, -6148, -6148, -6149, -6153, -6158, -6160,
+        -6163, -6167, -6172, -6171, -6172, -6167, -6172, -6172, -6181, -6191,
+        -6191, -6200, -6201, -6206, -6207, -6211, -6211, -6211, -6211, -6216,
+        -6216, -6221, -6225, -6226, -6231, -6231, -6224, -6221, -6221, -6220,
+        -6211, -6215, -6216, -6219, -6220, -6225, -6229, -6229, -6229, -6229,
+        -6231, -6245, -6246, -6253, -6256, -6256, -6261, -6267, -6272, -6277,
+        -6278, -6287, -6292, -6292, -6292, -6292, -6297, -6297, -6297, -6297,
+        -6297, -6286, -6295, -6296, -6300, -6300, -6295, -6290, -6290, -6289,
+        -6286, -6286, -6290, -6285, -6295, -6295, -6295, -6300, -6300, -6300,
+        -6300, -6305, -6305, -6310, -6309, -6304, -6299, -6295, -6294, -6290,
+        -6296, -6304, -6308, -6305, -6309, -6308, -6308, -6308, -6311, -6315,
+        -6317, -6324, -6331, -6330, -6334, -6338, -6330, -6335, -6335, -6334,
+        -6335, -6333, -6335, -6342, -6343, -6353, -6348, -6351, -6356, -6348,
+        -6352, -6365, -6372, -6382, -6391, -6392, -6396, -6391, -6391, -6392,
+        -6386, -6386, -6390, -6389, -6390, -6399, -6392, -6399, -6406, -6405,
+        -6408, -6405, -6407, -6403, -6411, -6421, -6422, -6435, -6441, -6446,
+        -6446, -6445, -6445, -6447, -6452, -6456, -6461, -6466, -6470, -6475,
+        -6479, -6484, -6488, -6488, -6488, -6488, -6488, -6488, -6492, -6497,
+        -6504, -6506, -6508, -6508, -6506, -6505, -6506, -6506, -6506, -6506,
+        -6507, -6512, -6517, -6518, -6523, -6527, -6527, -6527, -6527, -6527,
+        -6525, -6527, -6524, -6526, -6527, -6523, -6523, -6524, -6527, -6526,
+        -6526, -6525, -6525, -6525, -6530, -6531, -6540, -6536, -6536, -6537,
+        -6533, -6532, -6531, -6523, -6526, -6525, -6525, -6528, -6529, -6535,
+        -6540, -6539, -6545, -6546, -6546, -6541, -6542, -6541, -6537, -6532,
+        -6531, -6527, -6527, -6526, -6524, -6530, -6532, -6533, -6538, -6542,
+        -6539, -6548, -6547, -6546, -6539, -6542, -6537, -6532, -6532, -6527,
+        -6532, -6537, -6538, -6544, -6546, -6541, -6540, -6532, -6532, -6525,
+        -6527, -6527, -6522, -6528, -6528, -6532, -6537, -6541, -6546, -6544,
+        -6546, -6542, -6545, -6546, -6544, -6546, -6544, -6546, -6545, -6546,
+        -6550, -6546, -6550, -6550, -6545, -6546, -6545, -6546, -6542, -6544,
+        -6546, -6544, -6545, -6544, -6545, -6544, -6544, -6544, -6549, -6553,
+        -6553, -6559, -6559, -6554, -6554, -6550, -6550, -6555, -6559, -6562,
+        -6563, -6568, -6568, -6568, -6568, -6564, -6564, -6559, -6555, -6555,
+        -6555, -6559, -6559, -6559, -6563, -6563, -6563, -6563, -6563, -6563,
+        -6563, -6568, -6568, -6577, -6579, -6585, -6589, -6588, -6588, -6588,
+        -6588, -6587, -6582, -6582, -6582, -6575, -6582, -6584, -6580, -6584,
+        -6585, -6585, -6585, -6585, -6589, -6593, -6599, -6598, -6598, -6603,
+        -6602, -6597, -6597, -6596, -6596, -6600, -6601, -6602, -6598, -6599,
+        -6601, -6598, -6594, -6598, -6598, -6598, -6603, -6603, -6598, -6604,
+        -6602, -6601, -6607, -6606, -6605, -6612, -6614, -6622, -6625, -6622,
+        -6621, -6620, -6615, -6615, -6610, -6605, -6610, -6602, -6606, -6616,
+        -6621, -6615, -6616, -6616, -6611, -6606, -6609, -6602, -6600, -6601,
+        -6605, -6601, -6601, -6602, -6603, -6604, -6603, -6603, -6603, -6606,
+        -6604, -6604, -6604, -6605, -6607, -6601, -6594, -6589, -6585, -6582,
+        -6582, -6582, -6582, -6582, -6577, -6576, -6571, -6569, -6573, -6569,
+        -6574, -6579, -6579, -6579, -6578, -6574, -6568, -6555, -6551, -6546,
+        -6546, -6550, -6546, -6545, -6537, -6536, -6536, -6540, -6531, -6532,
+        -6532, -6530, -6522, -6522, -6523, -6520, -6523, -6510, -6509, -6504,
+        -6506, -6498, -6489, -6491, -6489, -6482, -6475, -6475, -6470, -6467,
+        -6469, -6460, -6455, -6455, -6450, -6443, -6440, -6436, -6436, -6436,
+        -6437, -6436, -6427, -6420, -6416, -6413, -6404, -6398, -6397, -6393,
+        -6387, -6386, -6387, -6383, -6380, -6377, -6375, -6379, -6370, -6369,
+        -6370, -6361, -6361, -6361, -6354, -6350, -6345, -6335, -6330, -6322,
+        -6315, -6306, -6302, -6302, -6297, -6292, -6293, -6293, -6290, -6284,
+        -6279, -6278, -6268, -6258, -6258, -6248, -6242, -6238, -6231, -6223,
+        -6222, -6213, -6208, -6210, -6202, -6196, -6197, -6195, -6191, -6186,
+        -6176, -6184, -6176, -6166, -6170, -6166, -6158, -6154, -6144, -6134,
+        -6127, -6112, -6102, -6098, -6088, -6078, -6074, -6069, -6064, -6060,
+        -6049, -6041, -6035, -6026, -6021, -6011, -6000, -5995, -5984, -5974,
+        -5967, -5960, -5954, -5954, -5950, -5940, -5930, -5916, -5902, -5893,
+        -5883, -5883, -5874, -5870, -5864, -5854, -5840, -5830, -5814, -5798,
+        -5792, -5782, -5774, -5768, -5758, -5744, -5728, -5715, -5705, -5695,
+        -5691, -5678, -5666, -5655, -5636, -5623, -5612, -5591, -5581, -5575,
+        -5560, -5553, -5539, -5518, -5507, -5498, -5487, -5482
     };
 
-    static const float iso226_2003_curve_30_phons[1382] =
+    static const int16_t iso226_2003_curve_30_phons[1382] =
     {
-        -25.55, -25.55, -25.60, -25.63,
-        -25.66, -25.69, -25.75, -25.81, -25.80, -25.86, -25.87, -25.92, -25.95, -25.98,
-        -26.05, -26.12, -26.13, -26.15, -26.19, -26.21, -26.20, -26.24, -26.29, -26.29,
-        -26.37, -26.39, -26.44, -26.44, -26.43, -26.52, -26.57, -26.57, -26.64, -26.71,
-        -26.71, -26.78, -26.87, -26.89, -26.90, -26.98, -26.99, -26.99, -27.01, -27.04,
-        -27.09, -27.12, -27.17, -27.19, -27.26, -27.34, -27.41, -27.46, -27.48, -27.51,
-        -27.51, -27.48, -27.47, -27.50, -27.52, -27.52, -27.52, -27.62, -27.64, -27.67,
-        -27.79, -27.84, -27.88, -27.89, -28.00, -28.05, -28.08, -28.10, -28.16, -28.15,
-        -28.15, -28.19, -28.24, -28.29, -28.30, -28.37, -28.37, -28.41, -28.47, -28.52,
-        -28.53, -28.59, -28.64, -28.69, -28.68, -28.69, -28.73, -28.71, -28.72, -28.73,
-        -28.76, -28.80, -28.83, -28.93, -28.94, -28.95, -29.08, -29.10, -29.10, -29.11,
-        -29.16, -29.18, -29.22, -29.23, -29.28, -29.29, -29.35, -29.38, -29.43, -29.47,
-        -29.56, -29.62, -29.66, -29.71, -29.75, -29.73, -29.78, -29.82, -29.86, -29.89,
-        -29.90, -29.97, -29.99, -29.99, -30.02, -30.10, -30.11, -30.13, -30.21, -30.25,
-        -30.27, -30.30, -30.31, -30.36, -30.37, -30.38, -30.41, -30.48, -30.51, -30.56,
-        -30.60, -30.63, -30.69, -30.67, -30.73, -30.78, -30.78, -30.79, -30.87, -30.89,
-        -30.91, -30.97, -31.00, -31.04, -31.06, -31.07, -31.10, -31.09, -31.10, -31.13,
-        -31.13, -31.16, -31.20, -31.24, -31.29, -31.28, -31.35, -31.39, -31.42, -31.50,
-        -31.57, -31.63, -31.73, -31.75, -31.81, -31.84, -31.84, -31.86, -31.88, -31.96,
-        -31.95, -32.00, -32.03, -32.09, -32.11, -32.12, -32.12, -32.23, -32.27, -32.32,
-        -32.40, -32.41, -32.46, -32.54, -32.54, -32.57, -32.60, -32.60, -32.70, -32.71,
-        -32.77, -32.80, -32.79, -32.81, -32.86, -32.85, -32.88, -32.96, -32.95, -32.97,
-        -33.05, -33.15, -33.17, -33.25, -33.30, -33.32, -33.31, -33.32, -33.31, -33.32,
-        -33.39, -33.35, -33.40, -33.46, -33.46, -33.56, -33.65, -33.66, -33.73, -33.82,
-        -33.84, -33.88, -33.89, -33.90, -33.94, -33.92, -33.92, -33.92, -33.98, -34.03,
-        -34.12, -34.18, -34.22, -34.32, -34.31, -34.31, -34.41, -34.49, -34.53, -34.58,
-        -34.63, -34.61, -34.67, -34.71, -34.69, -34.65, -34.65, -34.70, -34.71, -34.72,
-        -34.79, -34.81, -34.86, -34.94, -34.99, -35.01, -35.09, -35.13, -35.14, -35.19,
-        -35.22, -35.25, -35.34, -35.38, -35.40, -35.43, -35.46, -35.47, -35.51, -35.58,
-        -35.59, -35.67, -35.74, -35.79, -35.88, -35.88, -35.97, -36.04, -36.02, -36.07,
-        -36.07, -36.09, -36.15, -36.19, -36.24, -36.28, -36.34, -36.35, -36.39, -36.43,
-        -36.43, -36.47, -36.46, -36.49, -36.59, -36.62, -36.62, -36.68, -36.68, -36.70,
-        -36.76, -36.76, -36.76, -36.83, -36.86, -36.89, -36.93, -36.99, -37.05, -37.12,
-        -37.18, -37.16, -37.13, -37.22, -37.24, -37.23, -37.31, -37.34, -37.39, -37.41,
-        -37.52, -37.55, -37.55, -37.63, -37.71, -37.67, -37.67, -37.73, -37.75, -37.83,
-        -37.91, -37.92, -38.02, -38.04, -38.07, -38.09, -38.12, -38.19, -38.18, -38.27,
-        -38.28, -38.30, -38.38, -38.41, -38.39, -38.41, -38.44, -38.48, -38.47, -38.53,
-        -38.62, -38.64, -38.73, -38.79, -38.89, -38.96, -39.03, -39.10, -39.09, -39.12,
-        -39.15, -39.13, -39.11, -39.17, -39.17, -39.23, -39.26, -39.32, -39.38, -39.42,
-        -39.45, -39.48, -39.53, -39.58, -39.62, -39.67, -39.72, -39.77, -39.84, -39.87,
-        -39.94, -39.96, -39.98, -40.09, -40.12, -40.14, -40.19, -40.20, -40.19, -40.26,
-        -40.22, -40.18, -40.21, -40.25, -40.30, -40.37, -40.44, -40.46, -40.52, -40.56,
-        -40.60, -40.60, -40.65, -40.70, -40.74, -40.79, -40.81, -40.89, -40.89, -40.95,
-        -40.99, -41.02, -41.12, -41.16, -41.19, -41.22, -41.31, -41.30, -41.34, -41.38,
-        -41.35, -41.42, -41.47, -41.51, -41.54, -41.58, -41.65, -41.63, -41.69, -41.74,
-        -41.81, -41.85, -41.90, -41.97, -41.97, -42.00, -42.04, -42.03, -42.02, -42.06,
-        -42.09, -42.14, -42.19, -42.27, -42.25, -42.29, -42.30, -42.29, -42.38, -42.42,
-        -42.43, -42.50, -42.55, -42.55, -42.65, -42.72, -42.66, -42.75, -42.81, -42.84,
-        -42.90, -42.94, -43.01, -42.99, -43.02, -43.06, -43.10, -43.14, -43.17, -43.21,
-        -43.21, -43.26, -43.33, -43.42, -43.51, -43.54, -43.61, -43.63, -43.71, -43.72,
-        -43.77, -43.81, -43.86, -43.90, -43.92, -44.00, -44.03, -44.09, -44.12, -44.11,
-        -44.17, -44.17, -44.15, -44.17, -44.20, -44.18, -44.24, -44.25, -44.25, -44.35,
-        -44.40, -44.46, -44.49, -44.51, -44.61, -44.70, -44.74, -44.79, -44.89, -44.88,
-        -44.88, -44.91, -44.92, -44.95, -44.98, -45.03, -45.06, -45.11, -45.12, -45.13,
-        -45.17, -45.15, -45.20, -45.23, -45.25, -45.36, -45.41, -45.47, -45.56, -45.61,
-        -45.70, -45.74, -45.75, -45.79, -45.85, -45.80, -45.87, -45.85, -45.82, -45.90,
-        -45.89, -45.92, -45.94, -45.97, -46.04, -46.14, -46.22, -46.29, -46.36, -46.41,
-        -46.40, -46.41, -46.44, -46.42, -46.46, -46.50, -46.50, -46.50, -46.53, -46.59,
-        -46.64, -46.70, -46.73, -46.82, -46.79, -46.81, -46.87, -46.85, -46.92, -46.96,
-        -47.01, -47.04, -47.07, -47.06, -47.07, -47.08, -47.06, -47.10, -47.15, -47.23,
-        -47.31, -47.38, -47.37, -47.37, -47.40, -47.40, -47.42, -47.48, -47.55, -47.64,
-        -47.70, -47.75, -47.77, -47.78, -47.79, -47.84, -47.86, -47.92, -47.96, -48.00,
-        -48.03, -48.04, -48.07, -48.05, -48.13, -48.06, -48.07, -48.14, -48.10, -48.13,
-        -48.22, -48.32, -48.38, -48.45, -48.52, -48.54, -48.60, -48.67, -48.69, -48.72,
-        -48.67, -48.67, -48.72, -48.77, -48.82, -48.86, -48.89, -48.93, -48.92, -48.95,
-        -48.95, -49.01, -48.95, -49.00, -48.98, -48.97, -49.02, -49.11, -49.19, -49.25,
-        -49.31, -49.29, -49.32, -49.34, -49.34, -49.39, -49.45, -49.50, -49.55, -49.60,
-        -49.59, -49.57, -49.62, -49.57, -49.62, -49.67, -49.75, -49.85, -49.89, -49.88,
-        -49.90, -49.93, -49.89, -49.89, -49.94, -49.99, -50.05, -50.10, -50.15, -50.18,
-        -50.23, -50.24, -50.28, -50.33, -50.28, -50.31, -50.30, -50.32, -50.35, -50.41,
-        -50.45, -50.47, -50.53, -50.52, -50.47, -50.49, -50.53, -50.52, -50.60, -50.64,
-        -50.67, -50.71, -50.74, -50.76, -50.74, -50.79, -50.82, -50.86, -50.80, -50.84,
-        -50.85, -50.82, -50.87, -50.91, -50.94, -50.98, -50.99, -51.02, -51.03, -51.09,
-        -51.14, -51.15, -51.14, -51.19, -51.20, -51.25, -51.32, -51.37, -51.42, -51.47,
-        -51.48, -51.48, -51.53, -51.54, -51.56, -51.56, -51.56, -51.53, -51.55, -51.57,
-        -51.56, -51.60, -51.60, -51.54, -51.57, -51.57, -51.59, -51.63, -51.65, -51.70,
-        -51.72, -51.76, -51.82, -51.78, -51.82, -51.77, -51.81, -51.81, -51.85, -51.93,
-        -51.93, -51.98, -52.01, -52.03, -52.06, -52.11, -52.11, -52.11, -52.11, -52.13,
-        -52.13, -52.18, -52.23, -52.26, -52.31, -52.31, -52.24, -52.21, -52.21, -52.22,
-        -52.13, -52.15, -52.18, -52.23, -52.25, -52.27, -52.29, -52.29, -52.29, -52.29,
-        -52.31, -52.43, -52.46, -52.52, -52.54, -52.56, -52.61, -52.67, -52.73, -52.77,
-        -52.78, -52.87, -52.89, -52.89, -52.89, -52.89, -52.95, -52.95, -52.95, -52.95,
-        -52.95, -52.84, -52.93, -52.96, -52.98, -53.00, -52.95, -52.93, -52.90, -52.87,
-        -52.86, -52.86, -52.90, -52.87, -52.95, -52.95, -52.95, -53.00, -52.95, -52.93,
-        -52.91, -52.96, -52.96, -53.01, -53.00, -52.97, -52.94, -52.92, -52.92, -52.90,
-        -52.94, -53.02, -53.05, -53.03, -53.09, -53.05, -53.04, -53.02, -53.03, -53.06,
-        -53.09, -53.15, -53.22, -53.25, -53.30, -53.34, -53.30, -53.35, -53.34, -53.31,
-        -53.28, -53.27, -53.28, -53.33, -53.36, -53.42, -53.39, -53.42, -53.45, -53.39,
-        -53.43, -53.52, -53.57, -53.65, -53.71, -53.74, -53.78, -53.73, -53.73, -53.75,
-        -53.70, -53.70, -53.74, -53.72, -53.73, -53.79, -53.71, -53.78, -53.83, -53.80,
-        -53.81, -53.79, -53.80, -53.80, -53.84, -53.92, -53.92, -54.02, -54.05, -54.10,
-        -54.10, -54.07, -54.09, -54.10, -54.15, -54.19, -54.24, -54.29, -54.33, -54.36,
-        -54.38, -54.40, -54.42, -54.43, -54.43, -54.43, -54.43, -54.43, -54.44, -54.47,
-        -54.51, -54.51, -54.50, -54.53, -54.51, -54.49, -54.52, -54.53, -54.56, -54.58,
-        -54.61, -54.64, -54.67, -54.67, -54.71, -54.73, -54.73, -54.72, -54.72, -54.73,
-        -54.72, -54.73, -54.70, -54.72, -54.72, -54.68, -54.68, -54.68, -54.72, -54.70,
-        -54.71, -54.71, -54.68, -54.70, -54.73, -54.70, -54.79, -54.75, -54.74, -54.77,
-        -54.75, -54.75, -54.72, -54.69, -54.72, -54.71, -54.70, -54.72, -54.74, -54.80,
-        -54.85, -54.83, -54.90, -54.91, -54.91, -54.84, -54.87, -54.89, -54.87, -54.84,
-        -54.83, -54.82, -54.79, -54.75, -54.74, -54.76, -54.77, -54.78, -54.84, -54.87,
-        -54.84, -54.93, -54.92, -54.90, -54.84, -54.88, -54.82, -54.78, -54.80, -54.73,
-        -54.77, -54.80, -54.80, -54.88, -54.88, -54.84, -54.84, -54.77, -54.79, -54.74,
-        -54.77, -54.79, -54.74, -54.80, -54.80, -54.81, -54.84, -54.86, -54.88, -54.88,
-        -54.89, -54.87, -54.91, -54.91, -54.89, -54.91, -54.89, -54.93, -54.91, -54.91,
-        -54.98, -54.92, -54.95, -54.95, -54.90, -54.91, -54.90, -54.89, -54.87, -54.90,
-        -54.91, -54.90, -54.88, -54.85, -54.86, -54.83, -54.83, -54.85, -54.87, -54.92,
-        -54.92, -54.99, -54.98, -54.95, -54.93, -54.89, -54.89, -54.91, -54.93, -54.95,
-        -54.95, -54.98, -54.98, -54.98, -55.01, -54.98, -54.98, -54.95, -54.91, -54.91,
-        -54.91, -54.93, -54.93, -54.93, -54.95, -54.95, -54.95, -54.95, -54.95, -54.95,
-        -54.95, -54.98, -54.98, -55.07, -55.09, -55.15, -55.19, -55.18, -55.17, -55.17,
-        -55.17, -55.16, -55.14, -55.12, -55.10, -55.04, -55.09, -55.11, -55.09, -55.16,
-        -55.17, -55.17, -55.17, -55.17, -55.19, -55.22, -55.28, -55.28, -55.30, -55.35,
-        -55.34, -55.31, -55.28, -55.25, -55.24, -55.27, -55.25, -55.26, -55.24, -55.23,
-        -55.26, -55.25, -55.23, -55.30, -55.30, -55.29, -55.35, -55.32, -55.30, -55.33,
-        -55.29, -55.28, -55.33, -55.33, -55.33, -55.39, -55.42, -55.46, -55.46, -55.42,
-        -55.41, -55.38, -55.35, -55.34, -55.32, -55.29, -55.35, -55.28, -55.33, -55.43,
-        -55.46, -55.42, -55.43, -55.43, -55.38, -55.33, -55.34, -55.28, -55.27, -55.27,
-        -55.29, -55.25, -55.27, -55.28, -55.28, -55.29, -55.30, -55.30, -55.30, -55.32,
-        -55.31, -55.31, -55.31, -55.32, -55.34, -55.31, -55.24, -55.22, -55.19, -55.18,
-        -55.18, -55.18, -55.18, -55.18, -55.12, -55.09, -55.06, -55.05, -55.09, -55.05,
-        -55.11, -55.15, -55.15, -55.15, -55.14, -55.11, -55.06, -54.97, -54.96, -54.91,
-        -54.90, -54.93, -54.93, -54.93, -54.85, -54.84, -54.83, -54.85, -54.76, -54.77,
-        -54.79, -54.77, -54.74, -54.75, -54.77, -54.77, -54.77, -54.66, -54.66, -54.59,
-        -54.59, -54.53, -54.44, -54.47, -54.45, -54.40, -54.36, -54.34, -54.32, -54.29,
-        -54.30, -54.25, -54.19, -54.21, -54.16, -54.12, -54.10, -54.06, -54.06, -54.07,
-        -54.07, -54.06, -53.99, -53.91, -53.87, -53.83, -53.77, -53.73, -53.70, -53.65,
-        -53.62, -53.59, -53.60, -53.59, -53.58, -53.56, -53.56, -53.61, -53.52, -53.53,
-        -53.54, -53.43, -53.43, -53.40, -53.34, -53.30, -53.25, -53.14, -53.07, -53.03,
-        -52.99, -52.90, -52.89, -52.90, -52.85, -52.78, -52.79, -52.77, -52.75, -52.70,
-        -52.65, -52.67, -52.57, -52.47, -52.46, -52.39, -52.33, -52.28, -52.24, -52.14,
-        -52.13, -52.04, -52.01, -52.02, -51.94, -51.89, -51.91, -51.87, -51.83, -51.80,
-        -51.72, -51.75, -51.66, -51.61, -51.63, -51.58, -51.52, -51.46, -51.38, -51.31,
-        -51.24, -51.11, -51.02, -50.98, -50.88, -50.80, -50.74, -50.71, -50.66, -50.61,
-        -50.50, -50.43, -50.40, -50.30, -50.28, -50.20, -50.09, -50.04, -49.93, -49.83,
-        -49.76, -49.69, -49.63, -49.64, -49.59, -49.49, -49.42, -49.30, -49.18, -49.11,
-        -49.06, -49.01, -48.93, -48.93, -48.82, -48.74, -48.63, -48.56, -48.42, -48.30,
-        -48.20, -48.13, -48.06, -47.98, -47.93, -47.82, -47.70, -47.62, -47.54, -47.42,
-        -47.38, -47.28, -47.16, -47.03, -46.87, -46.76, -46.65, -46.48, -46.39, -46.38,
-        -46.26, -46.20, -46.08, -45.91, -45.83, -45.73, -45.62, -45.58
+        -2555, -2555, -2560, -2563,
+        -2566, -2569, -2575, -2581, -2580, -2586, -2587, -2592, -2595, -2598,
+        -2605, -2612, -2613, -2615, -2619, -2621, -2620, -2624, -2629, -2629,
+        -2637, -2639, -2644, -2644, -2643, -2652, -2657, -2657, -2664, -2671,
+        -2671, -2678, -2687, -2689, -2690, -2698, -2699, -2699, -2701, -2704,
+        -2709, -2712, -2717, -2719, -2726, -2734, -2741, -2746, -2748, -2751,
+        -2751, -2748, -2747, -2750, -2752, -2752, -2752, -2762, -2764, -2767,
+        -2779, -2784, -2788, -2789, -2800, -2805, -2808, -2810, -2816, -2815,
+        -2815, -2819, -2824, -2829, -2830, -2837, -2837, -2841, -2847, -2852,
+        -2853, -2859, -2864, -2869, -2868, -2869, -2873, -2871, -2872, -2873,
+        -2876, -2880, -2883, -2893, -2894, -2895, -2908, -2910, -2910, -2911,
+        -2916, -2918, -2922, -2923, -2928, -2929, -2935, -2938, -2943, -2947,
+        -2956, -2962, -2966, -2971, -2975, -2973, -2978, -2982, -2986, -2989,
+        -2990, -2997, -2999, -2999, -3002, -3010, -3011, -3013, -3021, -3025,
+        -3027, -3030, -3031, -3036, -3037, -3038, -3041, -3048, -3051, -3056,
+        -3060, -3063, -3069, -3067, -3073, -3078, -3078, -3079, -3087, -3089,
+        -3091, -3097, -3100, -3104, -3106, -3107, -3110, -3109, -3110, -3113,
+        -3113, -3116, -3120, -3124, -3129, -3128, -3135, -3139, -3142, -3150,
+        -3157, -3163, -3173, -3175, -3181, -3184, -3184, -3186, -3188, -3196,
+        -3195, -3200, -3203, -3209, -3211, -3212, -3212, -3223, -3227, -3232,
+        -3240, -3241, -3246, -3254, -3254, -3257, -3260, -3260, -3270, -3271,
+        -3277, -3280, -3279, -3281, -3286, -3285, -3288, -3296, -3295, -3297,
+        -3305, -3315, -3317, -3325, -3330, -3332, -3331, -3332, -3331, -3332,
+        -3339, -3335, -3340, -3346, -3346, -3356, -3365, -3366, -3373, -3382,
+        -3384, -3388, -3389, -3390, -3394, -3392, -3392, -3392, -3398, -3403,
+        -3412, -3418, -3422, -3432, -3431, -3431, -3441, -3449, -3453, -3458,
+        -3463, -3461, -3467, -3471, -3469, -3465, -3465, -3470, -3471, -3472,
+        -3479, -3481, -3486, -3494, -3499, -3501, -3509, -3513, -3514, -3519,
+        -3522, -3525, -3534, -3538, -3540, -3543, -3546, -3547, -3551, -3558,
+        -3559, -3567, -3574, -3579, -3588, -3588, -3597, -3604, -3602, -3607,
+        -3607, -3609, -3615, -3619, -3624, -3628, -3634, -3635, -3639, -3643,
+        -3643, -3647, -3646, -3649, -3659, -3662, -3662, -3668, -3668, -3670,
+        -3676, -3676, -3676, -3683, -3686, -3689, -3693, -3699, -3705, -3712,
+        -3718, -3716, -3713, -3722, -3724, -3723, -3731, -3734, -3739, -3741,
+        -3752, -3755, -3755, -3763, -3771, -3767, -3767, -3773, -3775, -3783,
+        -3791, -3792, -3802, -3804, -3807, -3809, -3812, -3819, -3818, -3827,
+        -3828, -3830, -3838, -3841, -3839, -3841, -3844, -3848, -3847, -3853,
+        -3862, -3864, -3873, -3879, -3889, -3896, -3903, -3910, -3909, -3912,
+        -3915, -3913, -3911, -3917, -3917, -3923, -3926, -3932, -3938, -3942,
+        -3945, -3948, -3953, -3958, -3962, -3967, -3972, -3977, -3984, -3987,
+        -3994, -3996, -3998, -4009, -4012, -4014, -4019, -4020, -4019, -4026,
+        -4022, -4018, -4021, -4025, -4030, -4037, -4044, -4046, -4052, -4056,
+        -4060, -4060, -4065, -4070, -4074, -4079, -4081, -4089, -4089, -4095,
+        -4099, -4102, -4112, -4116, -4119, -4122, -4131, -4130, -4134, -4138,
+        -4135, -4142, -4147, -4151, -4154, -4158, -4165, -4163, -4169, -4174,
+        -4181, -4185, -4190, -4197, -4197, -4200, -4204, -4203, -4202, -4206,
+        -4209, -4214, -4219, -4227, -4225, -4229, -4230, -4229, -4238, -4242,
+        -4243, -4250, -4255, -4255, -4265, -4272, -4266, -4275, -4281, -4284,
+        -4290, -4294, -4301, -4299, -4302, -4306, -4310, -4314, -4317, -4321,
+        -4321, -4326, -4333, -4342, -4351, -4354, -4361, -4363, -4371, -4372,
+        -4377, -4381, -4386, -4390, -4392, -4400, -4403, -4409, -4412, -4411,
+        -4417, -4417, -4415, -4417, -4420, -4418, -4424, -4425, -4425, -4435,
+        -4440, -4446, -4449, -4451, -4461, -4470, -4474, -4479, -4489, -4488,
+        -4488, -4491, -4492, -4495, -4498, -4503, -4506, -4511, -4512, -4513,
+        -4517, -4515, -4520, -4523, -4525, -4536, -4541, -4547, -4556, -4561,
+        -4570, -4574, -4575, -4579, -4585, -4580, -4587, -4585, -4582, -4590,
+        -4589, -4592, -4594, -4597, -4604, -4614, -4622, -4629, -4636, -4641,
+        -4640, -4641, -4644, -4642, -4646, -4650, -4650, -4650, -4653, -4659,
+        -4664, -4670, -4673, -4682, -4679, -4681, -4687, -4685, -4692, -4696,
+        -4701, -4704, -4707, -4706, -4707, -4708, -4706, -4710, -4715, -4723,
+        -4731, -4738, -4737, -4737, -4740, -4740, -4742, -4748, -4755, -4764,
+        -4770, -4775, -4777, -4778, -4779, -4784, -4786, -4792, -4796, -4800,
+        -4803, -4804, -4807, -4805, -4813, -4806, -4807, -4814, -4810, -4813,
+        -4822, -4832, -4838, -4845, -4852, -4854, -4860, -4867, -4869, -4872,
+        -4867, -4867, -4872, -4877, -4882, -4886, -4889, -4893, -4892, -4895,
+        -4895, -4901, -4895, -4900, -4898, -4897, -4902, -4911, -4919, -4925,
+        -4931, -4929, -4932, -4934, -4934, -4939, -4945, -4950, -4955, -4960,
+        -4959, -4957, -4962, -4957, -4962, -4967, -4975, -4985, -4989, -4988,
+        -4990, -4993, -4989, -4989, -4994, -4999, -5005, -5010, -5015, -5018,
+        -5023, -5024, -5028, -5033, -5028, -5031, -5030, -5032, -5035, -5041,
+        -5045, -5047, -5053, -5052, -5047, -5049, -5053, -5052, -5060, -5064,
+        -5067, -5071, -5074, -5076, -5074, -5079, -5082, -5086, -5080, -5084,
+        -5085, -5082, -5087, -5091, -5094, -5098, -5099, -5102, -5103, -5109,
+        -5114, -5115, -5114, -5119, -5120, -5125, -5132, -5137, -5142, -5147,
+        -5148, -5148, -5153, -5154, -5156, -5156, -5156, -5153, -5155, -5157,
+        -5156, -5160, -5160, -5154, -5157, -5157, -5159, -5163, -5165, -5170,
+        -5172, -5176, -5182, -5178, -5182, -5177, -5181, -5181, -5185, -5193,
+        -5193, -5198, -5201, -5203, -5206, -5211, -5211, -5211, -5211, -5213,
+        -5213, -5218, -5223, -5226, -5231, -5231, -5224, -5221, -5221, -5222,
+        -5213, -5215, -5218, -5223, -5225, -5227, -5229, -5229, -5229, -5229,
+        -5231, -5243, -5246, -5252, -5254, -5256, -5261, -5267, -5273, -5277,
+        -5278, -5287, -5289, -5289, -5289, -5289, -5295, -5295, -5295, -5295,
+        -5295, -5284, -5293, -5296, -5298, -5300, -5295, -5293, -5290, -5287,
+        -5286, -5286, -5290, -5287, -5295, -5295, -5295, -5300, -5295, -5293,
+        -5291, -5296, -5296, -5301, -5300, -5297, -5294, -5292, -5292, -5290,
+        -5294, -5302, -5305, -5303, -5309, -5305, -5304, -5302, -5303, -5306,
+        -5309, -5315, -5322, -5325, -5330, -5334, -5330, -5335, -5334, -5331,
+        -5328, -5327, -5328, -5333, -5336, -5342, -5339, -5342, -5345, -5339,
+        -5343, -5352, -5357, -5365, -5371, -5374, -5378, -5373, -5373, -5375,
+        -5370, -5370, -5374, -5372, -5373, -5379, -5371, -5378, -5383, -5380,
+        -5381, -5379, -5380, -5380, -5384, -5392, -5392, -5402, -5405, -5410,
+        -5410, -5407, -5409, -5410, -5415, -5419, -5424, -5429, -5433, -5436,
+        -5438, -5440, -5442, -5443, -5443, -5443, -5443, -5443, -5444, -5447,
+        -5451, -5451, -5450, -5453, -5451, -5449, -5452, -5453, -5456, -5458,
+        -5461, -5464, -5467, -5467, -5471, -5473, -5473, -5472, -5472, -5473,
+        -5472, -5473, -5470, -5472, -5472, -5468, -5468, -5468, -5472, -5470,
+        -5471, -5471, -5468, -5470, -5473, -5470, -5479, -5475, -5474, -5477,
+        -5475, -5475, -5472, -5469, -5472, -5471, -5470, -5472, -5474, -5480,
+        -5485, -5483, -5490, -5491, -5491, -5484, -5487, -5489, -5487, -5484,
+        -5483, -5482, -5479, -5475, -5474, -5476, -5477, -5478, -5484, -5487,
+        -5484, -5493, -5492, -5490, -5484, -5488, -5482, -5478, -5480, -5473,
+        -5477, -5480, -5480, -5488, -5488, -5484, -5484, -5477, -5479, -5474,
+        -5477, -5479, -5474, -5480, -5480, -5481, -5484, -5486, -5488, -5488,
+        -5489, -5487, -5491, -5491, -5489, -5491, -5489, -5493, -5491, -5491,
+        -5498, -5492, -5495, -5495, -5490, -5491, -5490, -5489, -5487, -5490,
+        -5491, -5490, -5488, -5485, -5486, -5483, -5483, -5485, -5487, -5492,
+        -5492, -5499, -5498, -5495, -5493, -5489, -5489, -5491, -5493, -5495,
+        -5495, -5498, -5498, -5498, -5501, -5498, -5498, -5495, -5491, -5491,
+        -5491, -5493, -5493, -5493, -5495, -5495, -5495, -5495, -5495, -5495,
+        -5495, -5498, -5498, -5507, -5509, -5515, -5519, -5518, -5517, -5517,
+        -5517, -5516, -5514, -5512, -5510, -5504, -5509, -5511, -5509, -5516,
+        -5517, -5517, -5517, -5517, -5519, -5522, -5528, -5528, -5530, -5535,
+        -5534, -5531, -5528, -5525, -5524, -5527, -5525, -5526, -5524, -5523,
+        -5526, -5525, -5523, -5530, -5530, -5529, -5535, -5532, -5530, -5533,
+        -5529, -5528, -5533, -5533, -5533, -5539, -5542, -5546, -5546, -5542,
+        -5541, -5538, -5535, -5534, -5532, -5529, -5535, -5528, -5533, -5543,
+        -5546, -5542, -5543, -5543, -5538, -5533, -5534, -5528, -5527, -5527,
+        -5529, -5525, -5527, -5528, -5528, -5529, -5530, -5530, -5530, -5532,
+        -5531, -5531, -5531, -5532, -5534, -5531, -5524, -5522, -5519, -5518,
+        -5518, -5518, -5518, -5518, -5512, -5509, -5506, -5505, -5509, -5505,
+        -5511, -5515, -5515, -5515, -5514, -5511, -5506, -5497, -5496, -5491,
+        -5490, -5493, -5493, -5493, -5485, -5484, -5483, -5485, -5476, -5477,
+        -5479, -5477, -5474, -5475, -5477, -5477, -5477, -5466, -5466, -5459,
+        -5459, -5453, -5444, -5447, -5445, -5440, -5436, -5434, -5432, -5429,
+        -5430, -5425, -5419, -5421, -5416, -5412, -5410, -5406, -5406, -5407,
+        -5407, -5406, -5399, -5391, -5387, -5383, -5377, -5373, -5370, -5365,
+        -5362, -5359, -5360, -5359, -5358, -5356, -5356, -5361, -5352, -5353,
+        -5354, -5343, -5343, -5340, -5334, -5330, -5325, -5314, -5307, -5303,
+        -5299, -5290, -5289, -5290, -5285, -5278, -5279, -5277, -5275, -5270,
+        -5265, -5267, -5257, -5247, -5246, -5239, -5233, -5228, -5224, -5214,
+        -5213, -5204, -5201, -5202, -5194, -5189, -5191, -5187, -5183, -5180,
+        -5172, -5175, -5166, -5161, -5163, -5158, -5152, -5146, -5138, -5131,
+        -5124, -5111, -5102, -5098, -5088, -5080, -5074, -5071, -5066, -5061,
+        -5050, -5043, -5040, -5030, -5028, -5020, -5009, -5004, -4993, -4983,
+        -4976, -4969, -4963, -4964, -4959, -4949, -4942, -4930, -4918, -4911,
+        -4906, -4901, -4893, -4893, -4882, -4874, -4863, -4856, -4842, -4830,
+        -4820, -4813, -4806, -4798, -4793, -4782, -4770, -4762, -4754, -4742,
+        -4738, -4728, -4716, -4703, -4687, -4676, -4665, -4648, -4639, -4638,
+        -4626, -4620, -4608, -4591, -4583, -4573, -4562, -4558
     };
 
-    static const float iso226_2003_curve_40_phons[1382] =
+    static const int16_t iso226_2003_curve_40_phons[1382] =
     {
-        -20.46, -20.44, -20.48, -20.53,
-        -20.54, -20.55, -20.59, -20.63, -20.59, -20.63, -20.62, -20.65, -20.69, -20.72,
-        -20.79, -20.84, -20.84, -20.84, -20.85, -20.89, -20.86, -20.90, -20.94, -20.94,
-        -20.99, -21.00, -21.03, -21.03, -21.00, -21.09, -21.13, -21.12, -21.16, -21.24,
-        -21.24, -21.29, -21.38, -21.36, -21.37, -21.44, -21.45, -21.46, -21.47, -21.48,
-        -21.52, -21.53, -21.58, -21.58, -21.65, -21.70, -21.76, -21.81, -21.82, -21.86,
-        -21.85, -21.83, -21.84, -21.86, -21.86, -21.84, -21.84, -21.87, -21.85, -21.90,
-        -21.99, -22.02, -22.04, -22.07, -22.16, -22.19, -22.21, -22.26, -22.29, -22.30,
-        -22.26, -22.26, -22.31, -22.35, -22.35, -22.44, -22.45, -22.49, -22.55, -22.59,
-        -22.59, -22.66, -22.70, -22.74, -22.74, -22.74, -22.76, -22.70, -22.68, -22.68,
-        -22.72, -22.72, -22.75, -22.82, -22.82, -22.83, -22.94, -22.98, -22.98, -22.99,
-        -23.05, -23.07, -23.10, -23.10, -23.14, -23.14, -23.19, -23.20, -23.25, -23.26,
-        -23.35, -23.42, -23.44, -23.48, -23.50, -23.47, -23.49, -23.50, -23.54, -23.58,
-        -23.60, -23.67, -23.69, -23.69, -23.72, -23.79, -23.79, -23.78, -23.85, -23.89,
-        -23.92, -23.93, -23.93, -23.97, -23.97, -23.97, -23.98, -24.03, -24.08, -24.12,
-        -24.13, -24.17, -24.20, -24.16, -24.22, -24.27, -24.23, -24.24, -24.32, -24.32,
-        -24.32, -24.36, -24.41, -24.45, -24.48, -24.48, -24.49, -24.52, -24.52, -24.55,
-        -24.52, -24.56, -24.60, -24.62, -24.67, -24.65, -24.71, -24.72, -24.76, -24.81,
-        -24.90, -24.96, -25.03, -25.06, -25.08, -25.10, -25.10, -25.10, -25.11, -25.18,
-        -25.14, -25.19, -25.22, -25.27, -25.29, -25.29, -25.28, -25.37, -25.40, -25.45,
-        -25.55, -25.57, -25.63, -25.73, -25.71, -25.71, -25.75, -25.71, -25.84, -25.84,
-        -25.88, -25.90, -25.90, -25.91, -25.89, -25.89, -25.89, -25.92, -25.91, -25.94,
-        -26.04, -26.14, -26.19, -26.26, -26.29, -26.33, -26.32, -26.28, -26.28, -26.29,
-        -26.33, -26.29, -26.34, -26.38, -26.39, -26.49, -26.58, -26.58, -26.63, -26.71,
-        -26.75, -26.75, -26.73, -26.72, -26.75, -26.69, -26.68, -26.68, -26.75, -26.80,
-        -26.87, -26.93, -26.94, -27.03, -27.02, -27.02, -27.09, -27.14, -27.19, -27.27,
-        -27.29, -27.27, -27.32, -27.36, -27.34, -27.30, -27.30, -27.32, -27.33, -27.33,
-        -27.39, -27.40, -27.44, -27.54, -27.59, -27.60, -27.69, -27.72, -27.72, -27.75,
-        -27.76, -27.79, -27.85, -27.87, -27.89, -27.92, -27.94, -27.95, -28.00, -28.08,
-        -28.10, -28.20, -28.26, -28.31, -28.39, -28.39, -28.48, -28.52, -28.49, -28.54,
-        -28.53, -28.54, -28.58, -28.59, -28.64, -28.68, -28.72, -28.70, -28.74, -28.74,
-        -28.73, -28.74, -28.74, -28.78, -28.87, -28.88, -28.87, -28.92, -28.91, -28.91,
-        -28.97, -28.95, -28.98, -29.08, -29.12, -29.13, -29.18, -29.22, -29.27, -29.31,
-        -29.37, -29.32, -29.32, -29.41, -29.40, -29.36, -29.43, -29.46, -29.51, -29.49,
-        -29.58, -29.65, -29.63, -29.68, -29.76, -29.72, -29.72, -29.76, -29.76, -29.84,
-        -29.98, -30.00, -30.09, -30.10, -30.14, -30.14, -30.15, -30.19, -30.15, -30.25,
-        -30.28, -30.26, -30.34, -30.38, -30.35, -30.35, -30.38, -30.40, -30.36, -30.45,
-        -30.54, -30.53, -30.64, -30.69, -30.79, -30.84, -30.88, -30.95, -30.91, -30.93,
-        -30.98, -30.93, -30.89, -30.98, -30.98, -31.03, -31.06, -31.11, -31.17, -31.22,
-        -31.22, -31.24, -31.28, -31.33, -31.33, -31.38, -31.43, -31.48, -31.55, -31.58,
-        -31.63, -31.67, -31.72, -31.80, -31.81, -31.83, -31.88, -31.87, -31.88, -31.92,
-        -31.86, -31.82, -31.83, -31.83, -31.87, -31.92, -31.96, -31.98, -32.02, -32.07,
-        -32.11, -32.12, -32.16, -32.20, -32.25, -32.30, -32.34, -32.40, -32.40, -32.49,
-        -32.51, -32.54, -32.64, -32.68, -32.71, -32.72, -32.81, -32.78, -32.79, -32.86,
-        -32.81, -32.86, -32.90, -32.95, -32.96, -33.00, -33.06, -33.09, -33.11, -33.16,
-        -33.25, -33.29, -33.34, -33.39, -33.38, -33.39, -33.43, -33.38, -33.38, -33.43,
-        -33.43, -33.49, -33.53, -33.59, -33.55, -33.60, -33.60, -33.55, -33.63, -33.67,
-        -33.69, -33.74, -33.78, -33.79, -33.88, -33.97, -33.89, -33.99, -34.05, -34.12,
-        -34.17, -34.17, -34.22, -34.19, -34.19, -34.23, -34.22, -34.28, -34.31, -34.33,
-        -34.33, -34.38, -34.43, -34.49, -34.58, -34.59, -34.66, -34.68, -34.77, -34.79,
-        -34.82, -34.86, -34.91, -34.95, -34.96, -35.05, -35.08, -35.13, -35.16, -35.16,
-        -35.21, -35.20, -35.19, -35.20, -35.22, -35.19, -35.22, -35.22, -35.21, -35.31,
-        -35.36, -35.41, -35.42, -35.47, -35.56, -35.65, -35.66, -35.75, -35.84, -35.84,
-        -35.84, -35.85, -35.84, -35.89, -35.90, -35.92, -35.95, -36.00, -35.99, -36.00,
-        -36.03, -36.00, -36.05, -36.05, -36.05, -36.14, -36.17, -36.25, -36.34, -36.36,
-        -36.46, -36.52, -36.53, -36.56, -36.62, -36.58, -36.63, -36.62, -36.58, -36.63,
-        -36.62, -36.63, -36.63, -36.63, -36.73, -36.82, -36.87, -36.94, -37.04, -37.09,
-        -37.09, -37.10, -37.10, -37.10, -37.14, -37.19, -37.15, -37.18, -37.21, -37.28,
-        -37.31, -37.38, -37.39, -37.47, -37.41, -37.40, -37.48, -37.44, -37.48, -37.52,
-        -37.58, -37.61, -37.65, -37.64, -37.66, -37.67, -37.65, -37.66, -37.72, -37.77,
-        -37.82, -37.88, -37.85, -37.87, -37.88, -37.87, -37.92, -37.98, -38.08, -38.16,
-        -38.23, -38.27, -38.27, -38.28, -38.27, -38.32, -38.37, -38.40, -38.46, -38.48,
-        -38.50, -38.48, -38.50, -38.46, -38.53, -38.48, -38.46, -38.55, -38.51, -38.56,
-        -38.66, -38.75, -38.82, -38.91, -38.95, -38.95, -39.02, -39.06, -39.08, -39.10,
-        -39.06, -39.06, -39.11, -39.16, -39.21, -39.27, -39.29, -39.31, -39.29, -39.31,
-        -39.27, -39.35, -39.26, -39.30, -39.29, -39.25, -39.34, -39.44, -39.53, -39.59,
-        -39.67, -39.64, -39.67, -39.69, -39.63, -39.69, -39.74, -39.79, -39.84, -39.89,
-        -39.88, -39.85, -39.93, -39.85, -39.89, -39.94, -40.00, -40.10, -40.14, -40.08,
-        -40.13, -40.13, -40.07, -40.12, -40.13, -40.18, -40.24, -40.29, -40.33, -40.39,
-        -40.42, -40.42, -40.51, -40.51, -40.48, -40.51, -40.51, -40.52, -40.53, -40.63,
-        -40.63, -40.68, -40.73, -40.73, -40.67, -40.69, -40.74, -40.73, -40.82, -40.86,
-        -40.87, -40.91, -40.92, -40.92, -40.87, -40.92, -40.93, -40.98, -40.92, -40.96,
-        -40.96, -40.92, -41.00, -41.01, -41.05, -41.11, -41.14, -41.20, -41.21, -41.29,
-        -41.30, -41.30, -41.30, -41.30, -41.31, -41.36, -41.41, -41.46, -41.55, -41.57,
-        -41.58, -41.61, -41.63, -41.63, -41.67, -41.67, -41.67, -41.66, -41.66, -41.67,
-        -41.70, -41.70, -41.70, -41.65, -41.66, -41.67, -41.70, -41.72, -41.72, -41.79,
-        -41.81, -41.86, -41.91, -41.85, -41.92, -41.87, -41.90, -41.90, -41.90, -41.95,
-        -41.95, -41.96, -42.01, -42.01, -42.06, -42.11, -42.11, -42.11, -42.11, -42.11,
-        -42.11, -42.16, -42.21, -42.26, -42.31, -42.31, -42.24, -42.21, -42.21, -42.24,
-        -42.16, -42.16, -42.20, -42.27, -42.29, -42.29, -42.29, -42.29, -42.29, -42.29,
-        -42.31, -42.40, -42.46, -42.51, -42.52, -42.56, -42.61, -42.67, -42.75, -42.77,
-        -42.78, -42.87, -42.87, -42.87, -42.87, -42.87, -42.92, -42.92, -42.92, -42.92,
-        -42.92, -42.82, -42.91, -42.95, -42.95, -43.00, -42.95, -42.95, -42.90, -42.85,
-        -42.86, -42.86, -42.90, -42.90, -42.95, -42.95, -42.95, -43.00, -42.91, -42.86,
-        -42.82, -42.87, -42.87, -42.91, -42.91, -42.90, -42.89, -42.89, -42.89, -42.90,
-        -42.92, -42.99, -43.03, -43.01, -43.09, -43.03, -42.99, -42.95, -42.95, -42.97,
-        -43.01, -43.06, -43.13, -43.20, -43.25, -43.30, -43.30, -43.35, -43.34, -43.28,
-        -43.22, -43.21, -43.21, -43.24, -43.29, -43.31, -43.30, -43.33, -43.35, -43.29,
-        -43.34, -43.39, -43.41, -43.47, -43.52, -43.56, -43.60, -43.56, -43.55, -43.58,
-        -43.54, -43.54, -43.58, -43.56, -43.57, -43.58, -43.51, -43.57, -43.60, -43.55,
-        -43.55, -43.54, -43.54, -43.57, -43.57, -43.62, -43.62, -43.70, -43.70, -43.74,
-        -43.73, -43.69, -43.73, -43.74, -43.79, -43.82, -43.88, -43.93, -43.97, -43.97,
-        -43.97, -43.97, -43.97, -43.97, -43.97, -43.97, -43.97, -43.97, -43.96, -43.96,
-        -43.99, -43.96, -43.93, -43.98, -43.96, -43.92, -43.97, -44.00, -44.06, -44.11,
-        -44.15, -44.16, -44.16, -44.17, -44.18, -44.18, -44.18, -44.18, -44.18, -44.18,
-        -44.19, -44.18, -44.17, -44.18, -44.17, -44.13, -44.13, -44.13, -44.17, -44.14,
-        -44.16, -44.16, -44.11, -44.15, -44.15, -44.09, -44.17, -44.13, -44.11, -44.18,
-        -44.18, -44.18, -44.14, -44.14, -44.17, -44.16, -44.15, -44.16, -44.19, -44.25,
-        -44.31, -44.26, -44.35, -44.36, -44.36, -44.28, -44.33, -44.36, -44.37, -44.37,
-        -44.36, -44.36, -44.32, -44.24, -44.24, -44.22, -44.21, -44.23, -44.29, -44.32,
-        -44.29, -44.38, -44.37, -44.33, -44.29, -44.33, -44.27, -44.23, -44.27, -44.18,
-        -44.22, -44.22, -44.22, -44.31, -44.31, -44.27, -44.28, -44.23, -44.27, -44.22,
-        -44.26, -44.31, -44.26, -44.31, -44.31, -44.31, -44.32, -44.32, -44.31, -44.32,
-        -44.32, -44.32, -44.36, -44.36, -44.34, -44.35, -44.34, -44.40, -44.36, -44.36,
-        -44.45, -44.37, -44.41, -44.41, -44.36, -44.36, -44.35, -44.31, -44.32, -44.35,
-        -44.36, -44.35, -44.31, -44.26, -44.26, -44.22, -44.21, -44.26, -44.26, -44.30,
-        -44.30, -44.40, -44.37, -44.36, -44.32, -44.27, -44.27, -44.27, -44.27, -44.27,
-        -44.27, -44.27, -44.27, -44.27, -44.33, -44.32, -44.32, -44.32, -44.27, -44.27,
-        -44.27, -44.27, -44.27, -44.27, -44.27, -44.27, -44.27, -44.27, -44.27, -44.27,
-        -44.27, -44.27, -44.28, -44.36, -44.38, -44.44, -44.48, -44.48, -44.47, -44.47,
-        -44.47, -44.46, -44.46, -44.42, -44.37, -44.34, -44.36, -44.38, -44.38, -44.48,
-        -44.48, -44.48, -44.48, -44.48, -44.48, -44.52, -44.57, -44.57, -44.62, -44.67,
-        -44.66, -44.65, -44.60, -44.54, -44.53, -44.54, -44.48, -44.51, -44.50, -44.48,
-        -44.51, -44.53, -44.53, -44.61, -44.61, -44.61, -44.66, -44.61, -44.61, -44.62,
-        -44.56, -44.55, -44.58, -44.60, -44.60, -44.66, -44.70, -44.71, -44.68, -44.63,
-        -44.61, -44.57, -44.55, -44.54, -44.55, -44.53, -44.60, -44.54, -44.60, -44.70,
-        -44.72, -44.69, -44.70, -44.70, -44.64, -44.59, -44.58, -44.53, -44.54, -44.54,
-        -44.54, -44.50, -44.52, -44.54, -44.54, -44.53, -44.57, -44.57, -44.57, -44.57,
-        -44.58, -44.58, -44.57, -44.59, -44.61, -44.60, -44.55, -44.55, -44.53, -44.54,
-        -44.54, -44.54, -44.54, -44.54, -44.46, -44.42, -44.41, -44.41, -44.45, -44.42,
-        -44.47, -44.51, -44.51, -44.51, -44.49, -44.47, -44.44, -44.39, -44.41, -44.36,
-        -44.33, -44.36, -44.41, -44.40, -44.32, -44.31, -44.30, -44.30, -44.21, -44.22,
-        -44.27, -44.25, -44.25, -44.27, -44.31, -44.33, -44.32, -44.22, -44.22, -44.14,
-        -44.12, -44.07, -43.99, -44.03, -44.02, -43.97, -43.96, -43.93, -43.95, -43.91,
-        -43.92, -43.89, -43.83, -43.86, -43.82, -43.81, -43.79, -43.75, -43.75, -43.77,
-        -43.77, -43.75, -43.72, -43.62, -43.57, -43.54, -43.49, -43.47, -43.43, -43.38,
-        -43.36, -43.31, -43.32, -43.36, -43.37, -43.36, -43.37, -43.42, -43.33, -43.38,
-        -43.38, -43.24, -43.25, -43.20, -43.13, -43.09, -43.04, -42.93, -42.84, -42.84,
-        -42.83, -42.74, -42.76, -42.79, -42.74, -42.65, -42.65, -42.61, -42.61, -42.56,
-        -42.51, -42.55, -42.46, -42.36, -42.35, -42.30, -42.24, -42.18, -42.16, -42.05,
-        -42.03, -41.95, -41.95, -41.95, -41.86, -41.81, -41.85, -41.80, -41.75, -41.73,
-        -41.67, -41.66, -41.57, -41.55, -41.56, -41.51, -41.47, -41.38, -41.33, -41.28,
-        -41.21, -41.11, -41.02, -40.98, -40.88, -40.83, -40.75, -40.73, -40.69, -40.63,
-        -40.52, -40.45, -40.44, -40.35, -40.34, -40.29, -40.18, -40.13, -40.02, -39.92,
-        -39.85, -39.78, -39.73, -39.73, -39.68, -39.58, -39.54, -39.44, -39.34, -39.29,
-        -39.28, -39.20, -39.11, -39.15, -39.01, -38.95, -38.86, -38.81, -38.69, -38.61,
-        -38.48, -38.43, -38.37, -38.27, -38.27, -38.19, -38.12, -38.09, -38.03, -37.88,
-        -37.86, -37.78, -37.66, -37.51, -37.37, -37.28, -37.19, -37.05, -36.97, -37.00,
-        -36.93, -36.86, -36.76, -36.64, -36.58, -36.49, -36.37, -36.33
+        -2046, -2044, -2048, -2053,
+        -2054, -2055, -2059, -2063, -2059, -2063, -2062, -2065, -2069, -2072,
+        -2079, -2084, -2084, -2084, -2085, -2089, -2086, -2090, -2094, -2094,
+        -2099, -2100, -2103, -2103, -2100, -2109, -2113, -2112, -2116, -2124,
+        -2124, -2129, -2138, -2136, -2137, -2144, -2145, -2146, -2147, -2148,
+        -2152, -2153, -2158, -2158, -2165, -2170, -2176, -2181, -2182, -2186,
+        -2185, -2183, -2184, -2186, -2186, -2184, -2184, -2187, -2185, -2190,
+        -2199, -2202, -2204, -2207, -2216, -2219, -2221, -2226, -2229, -2230,
+        -2226, -2226, -2231, -2235, -2235, -2244, -2245, -2249, -2255, -2259,
+        -2259, -2266, -2270, -2274, -2274, -2274, -2276, -2270, -2268, -2268,
+        -2272, -2272, -2275, -2282, -2282, -2283, -2294, -2298, -2298, -2299,
+        -2305, -2307, -2310, -2310, -2314, -2314, -2319, -2320, -2325, -2326,
+        -2335, -2342, -2344, -2348, -2350, -2347, -2349, -2350, -2354, -2358,
+        -2360, -2367, -2369, -2369, -2372, -2379, -2379, -2378, -2385, -2389,
+        -2392, -2393, -2393, -2397, -2397, -2397, -2398, -2403, -2408, -2412,
+        -2413, -2417, -2420, -2416, -2422, -2427, -2423, -2424, -2432, -2432,
+        -2432, -2436, -2441, -2445, -2448, -2448, -2449, -2452, -2452, -2455,
+        -2452, -2456, -2460, -2462, -2467, -2465, -2471, -2472, -2476, -2481,
+        -2490, -2496, -2503, -2506, -2508, -2510, -2510, -2510, -2511, -2518,
+        -2514, -2519, -2522, -2527, -2529, -2529, -2528, -2537, -2540, -2545,
+        -2555, -2557, -2563, -2573, -2571, -2571, -2575, -2571, -2584, -2584,
+        -2588, -2590, -2590, -2591, -2589, -2589, -2589, -2592, -2591, -2594,
+        -2604, -2614, -2619, -2626, -2629, -2633, -2632, -2628, -2628, -2629,
+        -2633, -2629, -2634, -2638, -2639, -2649, -2658, -2658, -2663, -2671,
+        -2675, -2675, -2673, -2672, -2675, -2669, -2668, -2668, -2675, -2680,
+        -2687, -2693, -2694, -2703, -2702, -2702, -2709, -2714, -2719, -2727,
+        -2729, -2727, -2732, -2736, -2734, -2730, -2730, -2732, -2733, -2733,
+        -2739, -2740, -2744, -2754, -2759, -2760, -2769, -2772, -2772, -2775,
+        -2776, -2779, -2785, -2787, -2789, -2792, -2794, -2795, -2800, -2808,
+        -2810, -2820, -2826, -2831, -2839, -2839, -2848, -2852, -2849, -2854,
+        -2853, -2854, -2858, -2859, -2864, -2868, -2872, -2870, -2874, -2874,
+        -2873, -2874, -2874, -2878, -2887, -2888, -2887, -2892, -2891, -2891,
+        -2897, -2895, -2898, -2908, -2912, -2913, -2918, -2922, -2927, -2931,
+        -2937, -2932, -2932, -2941, -2940, -2936, -2943, -2946, -2951, -2949,
+        -2958, -2965, -2963, -2968, -2976, -2972, -2972, -2976, -2976, -2984,
+        -2998, -3000, -3009, -3010, -3014, -3014, -3015, -3019, -3015, -3025,
+        -3028, -3026, -3034, -3038, -3035, -3035, -3038, -3040, -3036, -3045,
+        -3054, -3053, -3064, -3069, -3079, -3084, -3088, -3095, -3091, -3093,
+        -3098, -3093, -3089, -3098, -3098, -3103, -3106, -3111, -3117, -3122,
+        -3122, -3124, -3128, -3133, -3133, -3138, -3143, -3148, -3155, -3158,
+        -3163, -3167, -3172, -3180, -3181, -3183, -3188, -3187, -3188, -3192,
+        -3186, -3182, -3183, -3183, -3187, -3192, -3196, -3198, -3202, -3207,
+        -3211, -3212, -3216, -3220, -3225, -3230, -3234, -3240, -3240, -3249,
+        -3251, -3254, -3264, -3268, -3271, -3272, -3281, -3278, -3279, -3286,
+        -3281, -3286, -3290, -3295, -3296, -3300, -3306, -3309, -3311, -3316,
+        -3325, -3329, -3334, -3339, -3338, -3339, -3343, -3338, -3338, -3343,
+        -3343, -3349, -3353, -3359, -3355, -3360, -3360, -3355, -3363, -3367,
+        -3369, -3374, -3378, -3379, -3388, -3397, -3389, -3399, -3405, -3412,
+        -3417, -3417, -3422, -3419, -3419, -3423, -3422, -3428, -3431, -3433,
+        -3433, -3438, -3443, -3449, -3458, -3459, -3466, -3468, -3477, -3479,
+        -3482, -3486, -3491, -3495, -3496, -3505, -3508, -3513, -3516, -3516,
+        -3521, -3520, -3519, -3520, -3522, -3519, -3522, -3522, -3521, -3531,
+        -3536, -3541, -3542, -3547, -3556, -3565, -3566, -3575, -3584, -3584,
+        -3584, -3585, -3584, -3589, -3590, -3592, -3595, -3600, -3599, -3600,
+        -3603, -3600, -3605, -3605, -3605, -3614, -3617, -3625, -3634, -3636,
+        -3646, -3652, -3653, -3656, -3662, -3658, -3663, -3662, -3658, -3663,
+        -3662, -3663, -3663, -3663, -3673, -3682, -3687, -3694, -3704, -3709,
+        -3709, -3710, -3710, -3710, -3714, -3719, -3715, -3718, -3721, -3728,
+        -3731, -3738, -3739, -3747, -3741, -3740, -3748, -3744, -3748, -3752,
+        -3758, -3761, -3765, -3764, -3766, -3767, -3765, -3766, -3772, -3777,
+        -3782, -3788, -3785, -3787, -3788, -3787, -3792, -3798, -3808, -3816,
+        -3823, -3827, -3827, -3828, -3827, -3832, -3837, -3840, -3846, -3848,
+        -3850, -3848, -3850, -3846, -3853, -3848, -3846, -3855, -3851, -3856,
+        -3866, -3875, -3882, -3891, -3895, -3895, -3902, -3906, -3908, -3910,
+        -3906, -3906, -3911, -3916, -3921, -3927, -3929, -3931, -3929, -3931,
+        -3927, -3935, -3926, -3930, -3929, -3925, -3934, -3944, -3953, -3959,
+        -3967, -3964, -3967, -3969, -3963, -3969, -3974, -3979, -3984, -3989,
+        -3988, -3985, -3993, -3985, -3989, -3994, -4000, -4010, -4014, -4008,
+        -4013, -4013, -4007, -4012, -4013, -4018, -4024, -4029, -4033, -4039,
+        -4042, -4042, -4051, -4051, -4048, -4051, -4051, -4052, -4053, -4063,
+        -4063, -4068, -4073, -4073, -4067, -4069, -4074, -4073, -4082, -4086,
+        -4087, -4091, -4092, -4092, -4087, -4092, -4093, -4098, -4092, -4096,
+        -4096, -4092, -4100, -4101, -4105, -4111, -4114, -4120, -4121, -4129,
+        -4130, -4130, -4130, -4130, -4131, -4136, -4141, -4146, -4155, -4157,
+        -4158, -4161, -4163, -4163, -4167, -4167, -4167, -4166, -4166, -4167,
+        -4170, -4170, -4170, -4165, -4166, -4167, -4170, -4172, -4172, -4179,
+        -4181, -4186, -4191, -4185, -4192, -4187, -4190, -4190, -4190, -4195,
+        -4195, -4196, -4201, -4201, -4206, -4211, -4211, -4211, -4211, -4211,
+        -4211, -4216, -4221, -4226, -4231, -4231, -4224, -4221, -4221, -4224,
+        -4216, -4216, -4220, -4227, -4229, -4229, -4229, -4229, -4229, -4229,
+        -4231, -4240, -4246, -4251, -4252, -4256, -4261, -4267, -4275, -4277,
+        -4278, -4287, -4287, -4287, -4287, -4287, -4292, -4292, -4292, -4292,
+        -4292, -4282, -4291, -4295, -4295, -4300, -4295, -4295, -4290, -4285,
+        -4286, -4286, -4290, -4290, -4295, -4295, -4295, -4300, -4291, -4286,
+        -4282, -4287, -4287, -4291, -4291, -4290, -4289, -4289, -4289, -4290,
+        -4292, -4299, -4303, -4301, -4309, -4303, -4299, -4295, -4295, -4297,
+        -4301, -4306, -4313, -4320, -4325, -4330, -4330, -4335, -4334, -4328,
+        -4322, -4321, -4321, -4324, -4329, -4331, -4330, -4333, -4335, -4329,
+        -4334, -4339, -4341, -4347, -4352, -4356, -4360, -4356, -4355, -4358,
+        -4354, -4354, -4358, -4356, -4357, -4358, -4351, -4357, -4360, -4355,
+        -4355, -4354, -4354, -4357, -4357, -4362, -4362, -4370, -4370, -4374,
+        -4373, -4369, -4373, -4374, -4379, -4382, -4388, -4393, -4397, -4397,
+        -4397, -4397, -4397, -4397, -4397, -4397, -4397, -4397, -4396, -4396,
+        -4399, -4396, -4393, -4398, -4396, -4392, -4397, -4400, -4406, -4411,
+        -4415, -4416, -4416, -4417, -4418, -4418, -4418, -4418, -4418, -4418,
+        -4419, -4418, -4417, -4418, -4417, -4413, -4413, -4413, -4417, -4414,
+        -4416, -4416, -4411, -4415, -4415, -4409, -4417, -4413, -4411, -4418,
+        -4418, -4418, -4414, -4414, -4417, -4416, -4415, -4416, -4419, -4425,
+        -4431, -4426, -4435, -4436, -4436, -4428, -4433, -4436, -4437, -4437,
+        -4436, -4436, -4432, -4424, -4424, -4422, -4421, -4423, -4429, -4432,
+        -4429, -4438, -4437, -4433, -4429, -4433, -4427, -4423, -4427, -4418,
+        -4422, -4422, -4422, -4431, -4431, -4427, -4428, -4423, -4427, -4422,
+        -4426, -4431, -4426, -4431, -4431, -4431, -4432, -4432, -4431, -4432,
+        -4432, -4432, -4436, -4436, -4434, -4435, -4434, -4440, -4436, -4436,
+        -4445, -4437, -4441, -4441, -4436, -4436, -4435, -4431, -4432, -4435,
+        -4436, -4435, -4431, -4426, -4426, -4422, -4421, -4426, -4426, -4430,
+        -4430, -4440, -4437, -4436, -4432, -4427, -4427, -4427, -4427, -4427,
+        -4427, -4427, -4427, -4427, -4433, -4432, -4432, -4432, -4427, -4427,
+        -4427, -4427, -4427, -4427, -4427, -4427, -4427, -4427, -4427, -4427,
+        -4427, -4427, -4428, -4436, -4438, -4444, -4448, -4448, -4447, -4447,
+        -4447, -4446, -4446, -4442, -4437, -4434, -4436, -4438, -4438, -4448,
+        -4448, -4448, -4448, -4448, -4448, -4452, -4457, -4457, -4462, -4467,
+        -4466, -4465, -4460, -4454, -4453, -4454, -4448, -4451, -4450, -4448,
+        -4451, -4453, -4453, -4461, -4461, -4461, -4466, -4461, -4461, -4462,
+        -4456, -4455, -4458, -4460, -4460, -4466, -4470, -4471, -4468, -4463,
+        -4461, -4457, -4455, -4454, -4455, -4453, -4460, -4454, -4460, -4470,
+        -4472, -4469, -4470, -4470, -4464, -4459, -4458, -4453, -4454, -4454,
+        -4454, -4450, -4452, -4454, -4454, -4453, -4457, -4457, -4457, -4457,
+        -4458, -4458, -4457, -4459, -4461, -4460, -4455, -4455, -4453, -4454,
+        -4454, -4454, -4454, -4454, -4446, -4442, -4441, -4441, -4445, -4442,
+        -4447, -4451, -4451, -4451, -4449, -4447, -4444, -4439, -4441, -4436,
+        -4433, -4436, -4441, -4440, -4432, -4431, -4430, -4430, -4421, -4422,
+        -4427, -4425, -4425, -4427, -4431, -4433, -4432, -4422, -4422, -4414,
+        -4412, -4407, -4399, -4403, -4402, -4397, -4396, -4393, -4395, -4391,
+        -4392, -4389, -4383, -4386, -4382, -4381, -4379, -4375, -4375, -4377,
+        -4377, -4375, -4372, -4362, -4357, -4354, -4349, -4347, -4343, -4338,
+        -4336, -4331, -4332, -4336, -4337, -4336, -4337, -4342, -4333, -4338,
+        -4338, -4324, -4325, -4320, -4313, -4309, -4304, -4293, -4284, -4284,
+        -4283, -4274, -4276, -4279, -4274, -4265, -4265, -4261, -4261, -4256,
+        -4251, -4255, -4246, -4236, -4235, -4230, -4224, -4218, -4216, -4205,
+        -4203, -4195, -4195, -4195, -4186, -4181, -4185, -4180, -4175, -4173,
+        -4167, -4166, -4157, -4155, -4156, -4151, -4147, -4138, -4133, -4128,
+        -4121, -4111, -4102, -4098, -4088, -4083, -4075, -4073, -4069, -4063,
+        -4052, -4045, -4044, -4035, -4034, -4029, -4018, -4013, -4002, -3992,
+        -3985, -3978, -3973, -3973, -3968, -3958, -3954, -3944, -3934, -3929,
+        -3928, -3920, -3911, -3915, -3901, -3895, -3886, -3881, -3869, -3861,
+        -3848, -3843, -3837, -3827, -3827, -3819, -3812, -3809, -3803, -3788,
+        -3786, -3778, -3766, -3751, -3737, -3728, -3719, -3705, -3697, -3700,
+        -3693, -3686, -3676, -3664, -3658, -3649, -3637, -3633
     };
 
-    static const float iso226_2003_curve_50_phons[1382] =
+    static const int16_t iso226_2003_curve_50_phons[1382] =
     {
-        -15.66, -15.65, -15.67, -15.67,
-        -15.68, -15.69, -15.71, -15.73, -15.71, -15.75, -15.72, -15.76, -15.79, -15.80,
-        -15.86, -15.94, -15.94, -15.94, -15.96, -15.96, -15.95, -15.99, -16.01, -15.98,
-        -16.04, -16.04, -16.05, -16.03, -16.02, -16.11, -16.13, -16.14, -16.18, -16.25,
-        -16.22, -16.27, -16.35, -16.30, -16.31, -16.37, -16.35, -16.35, -16.35, -16.39,
-        -16.43, -16.43, -16.49, -16.47, -16.53, -16.58, -16.63, -16.66, -16.68, -16.70,
-        -16.69, -16.65, -16.64, -16.65, -16.67, -16.65, -16.66, -16.71, -16.68, -16.70,
-        -16.79, -16.82, -16.85, -16.87, -16.93, -16.96, -16.98, -17.00, -17.02, -17.01,
-        -16.97, -16.98, -17.02, -17.05, -17.03, -17.10, -17.08, -17.10, -17.16, -17.20,
-        -17.20, -17.27, -17.31, -17.33, -17.32, -17.30, -17.35, -17.32, -17.29, -17.31,
-        -17.32, -17.29, -17.32, -17.38, -17.37, -17.38, -17.48, -17.50, -17.51, -17.53,
-        -17.59, -17.63, -17.64, -17.64, -17.66, -17.67, -17.71, -17.72, -17.76, -17.80,
-        -17.86, -17.91, -17.91, -17.93, -17.94, -17.90, -17.93, -17.97, -17.99, -18.01,
-        -18.03, -18.10, -18.12, -18.09, -18.12, -18.20, -18.19, -18.16, -18.23, -18.25,
-        -18.26, -18.26, -18.24, -18.29, -18.29, -18.28, -18.27, -18.34, -18.37, -18.41,
-        -18.44, -18.46, -18.50, -18.45, -18.50, -18.54, -18.52, -18.49, -18.57, -18.57,
-        -18.56, -18.58, -18.61, -18.63, -18.64, -18.65, -18.69, -18.73, -18.74, -18.76,
-        -18.74, -18.77, -18.78, -18.81, -18.84, -18.80, -18.86, -18.87, -18.89, -18.92,
-        -18.99, -19.04, -19.12, -19.14, -19.18, -19.17, -19.17, -19.17, -19.17, -19.20,
-        -19.19, -19.21, -19.21, -19.25, -19.26, -19.26, -19.24, -19.35, -19.38, -19.45,
-        -19.54, -19.56, -19.63, -19.70, -19.68, -19.68, -19.70, -19.66, -19.74, -19.75,
-        -19.76, -19.78, -19.77, -19.79, -19.78, -19.77, -19.77, -19.83, -19.79, -19.80,
-        -19.88, -19.98, -20.00, -20.07, -20.10, -20.12, -20.07, -20.07, -20.07, -20.08,
-        -20.10, -20.06, -20.12, -20.15, -20.15, -20.25, -20.30, -20.31, -20.35, -20.40,
-        -20.41, -20.41, -20.41, -20.42, -20.41, -20.38, -20.38, -20.38, -20.42, -20.47,
-        -20.53, -20.59, -20.61, -20.70, -20.65, -20.65, -20.72, -20.76, -20.77, -20.83,
-        -20.87, -20.86, -20.88, -20.90, -20.84, -20.79, -20.79, -20.79, -20.80, -20.81,
-        -20.88, -20.89, -20.90, -20.99, -21.04, -21.05, -21.09, -21.11, -21.11, -21.17,
-        -21.18, -21.17, -21.25, -21.29, -21.29, -21.31, -21.33, -21.34, -21.38, -21.46,
-        -21.48, -21.56, -21.59, -21.61, -21.68, -21.66, -21.72, -21.77, -21.73, -21.78,
-        -21.75, -21.76, -21.80, -21.83, -21.86, -21.89, -21.93, -21.93, -21.96, -21.96,
-        -21.95, -21.96, -21.96, -21.95, -22.02, -22.03, -22.00, -22.03, -22.02, -22.03,
-        -22.10, -22.09, -22.13, -22.20, -22.23, -22.26, -22.28, -22.31, -22.33, -22.35,
-        -22.40, -22.37, -22.34, -22.42, -22.42, -22.40, -22.45, -22.48, -22.53, -22.54,
-        -22.61, -22.66, -22.67, -22.71, -22.76, -22.72, -22.70, -22.71, -22.71, -22.77,
-        -22.85, -22.85, -22.95, -22.95, -22.98, -22.98, -22.98, -23.04, -22.98, -23.08,
-        -23.12, -23.13, -23.18, -23.21, -23.18, -23.19, -23.21, -23.23, -23.17, -23.26,
-        -23.30, -23.28, -23.38, -23.40, -23.48, -23.53, -23.55, -23.61, -23.57, -23.58,
-        -23.63, -23.60, -23.54, -23.63, -23.63, -23.67, -23.70, -23.75, -23.82, -23.85,
-        -23.88, -23.86, -23.87, -23.91, -23.91, -23.94, -23.98, -24.04, -24.08, -24.12,
-        -24.16, -24.16, -24.19, -24.27, -24.27, -24.30, -24.35, -24.34, -24.34, -24.39,
-        -24.33, -24.29, -24.29, -24.32, -24.33, -24.39, -24.43, -24.44, -24.47, -24.49,
-        -24.51, -24.49, -24.52, -24.54, -24.56, -24.60, -24.62, -24.68, -24.68, -24.75,
-        -24.78, -24.81, -24.92, -24.95, -24.99, -25.00, -25.09, -25.06, -25.06, -25.12,
-        -25.07, -25.12, -25.14, -25.16, -25.17, -25.19, -25.26, -25.25, -25.30, -25.35,
-        -25.39, -25.41, -25.46, -25.49, -25.46, -25.49, -25.48, -25.44, -25.46, -25.48,
-        -25.50, -25.55, -25.60, -25.69, -25.65, -25.68, -25.70, -25.65, -25.71, -25.73,
-        -25.72, -25.75, -25.79, -25.79, -25.87, -25.93, -25.90, -25.97, -26.01, -26.05,
-        -26.07, -26.09, -26.11, -26.08, -26.08, -26.10, -26.12, -26.20, -26.18, -26.22,
-        -26.25, -26.27, -26.33, -26.40, -26.48, -26.49, -26.55, -26.53, -26.58, -26.61,
-        -26.60, -26.62, -26.65, -26.67, -26.70, -26.75, -26.77, -26.83, -26.89, -26.85,
-        -26.92, -26.94, -26.90, -26.92, -26.96, -26.90, -26.96, -26.95, -26.93, -27.03,
-        -27.05, -27.11, -27.11, -27.14, -27.21, -27.25, -27.26, -27.30, -27.37, -27.36,
-        -27.35, -27.38, -27.38, -27.40, -27.43, -27.45, -27.45, -27.53, -27.52, -27.50,
-        -27.53, -27.50, -27.55, -27.57, -27.55, -27.63, -27.68, -27.74, -27.78, -27.83,
-        -27.89, -27.91, -27.90, -27.92, -27.97, -27.92, -27.98, -27.95, -27.92, -27.98,
-        -27.96, -27.97, -27.98, -27.98, -28.05, -28.15, -28.20, -28.26, -28.37, -28.42,
-        -28.39, -28.42, -28.43, -28.44, -28.44, -28.47, -28.45, -28.44, -28.46, -28.51,
-        -28.55, -28.61, -28.65, -28.71, -28.64, -28.67, -28.71, -28.67, -28.72, -28.73,
-        -28.76, -28.76, -28.80, -28.78, -28.78, -28.81, -28.78, -28.79, -28.85, -28.90,
-        -28.95, -29.02, -28.99, -28.99, -29.02, -29.00, -29.02, -29.10, -29.17, -29.24,
-        -29.30, -29.33, -29.35, -29.35, -29.32, -29.35, -29.37, -29.39, -29.41, -29.43,
-        -29.44, -29.43, -29.44, -29.42, -29.47, -29.43, -29.42, -29.48, -29.44, -29.49,
-        -29.57, -29.64, -29.70, -29.75, -29.82, -29.82, -29.86, -29.93, -29.93, -29.95,
-        -29.93, -29.93, -29.96, -30.03, -30.06, -30.13, -30.15, -30.16, -30.15, -30.16,
-        -30.14, -30.17, -30.08, -30.10, -30.07, -30.02, -30.10, -30.17, -30.24, -30.30,
-        -30.36, -30.32, -30.34, -30.37, -30.32, -30.37, -30.42, -30.48, -30.53, -30.56,
-        -30.57, -30.53, -30.60, -30.54, -30.55, -30.61, -30.68, -30.75, -30.78, -30.72,
-        -30.73, -30.73, -30.66, -30.67, -30.70, -30.75, -30.81, -30.86, -30.88, -30.91,
-        -30.92, -30.92, -30.97, -30.99, -30.96, -30.99, -31.01, -31.02, -31.03, -31.12,
-        -31.13, -31.16, -31.23, -31.21, -31.16, -31.19, -31.24, -31.21, -31.25, -31.27,
-        -31.28, -31.30, -31.35, -31.36, -31.31, -31.38, -31.39, -31.41, -31.33, -31.34,
-        -31.32, -31.32, -31.37, -31.38, -31.44, -31.48, -31.49, -31.52, -31.53, -31.57,
-        -31.59, -31.60, -31.57, -31.60, -31.60, -31.65, -31.71, -31.76, -31.83, -31.86,
-        -31.89, -31.90, -31.94, -31.95, -31.97, -31.97, -31.97, -31.94, -31.94, -31.94,
-        -31.93, -31.93, -31.93, -31.89, -31.91, -31.94, -31.98, -31.99, -31.99, -32.03,
-        -32.04, -32.06, -32.11, -32.06, -32.12, -32.07, -32.08, -32.08, -32.08, -32.13,
-        -32.13, -32.16, -32.22, -32.22, -32.27, -32.29, -32.29, -32.29, -32.29, -32.29,
-        -32.29, -32.33, -32.37, -32.42, -32.47, -32.47, -32.40, -32.37, -32.40, -32.40,
-        -32.32, -32.32, -32.34, -32.37, -32.38, -32.38, -32.38, -32.38, -32.38, -32.38,
-        -32.44, -32.52, -32.57, -32.62, -32.65, -32.68, -32.73, -32.81, -32.87, -32.89,
-        -32.92, -32.96, -32.96, -32.96, -32.96, -32.96, -33.01, -33.01, -33.01, -33.01,
-        -33.01, -32.91, -32.95, -32.98, -32.98, -33.00, -32.95, -32.95, -32.90, -32.87,
-        -32.90, -32.90, -32.92, -32.90, -32.98, -32.95, -32.95, -33.00, -32.95, -32.93,
-        -32.91, -32.96, -32.96, -32.98, -32.95, -32.92, -32.89, -32.89, -32.89, -32.90,
-        -32.91, -32.97, -32.98, -32.96, -33.04, -32.96, -32.97, -32.95, -32.95, -32.99,
-        -33.00, -33.08, -33.13, -33.20, -33.25, -33.26, -33.26, -33.28, -33.28, -33.25,
-        -33.19, -33.16, -33.19, -33.20, -33.22, -33.26, -33.23, -33.23, -33.28, -33.23,
-        -33.25, -33.32, -33.34, -33.40, -33.44, -33.49, -33.48, -33.44, -33.43, -33.42,
-        -33.38, -33.38, -33.39, -33.38, -33.39, -33.42, -33.37, -33.42, -33.48, -33.45,
-        -33.43, -33.40, -33.38, -33.36, -33.37, -33.42, -33.42, -33.50, -33.51, -33.55,
-        -33.55, -33.53, -33.55, -33.55, -33.60, -33.60, -33.65, -33.69, -33.69, -33.71,
-        -33.69, -33.72, -33.70, -33.70, -33.70, -33.70, -33.70, -33.70, -33.71, -33.74,
-        -33.78, -33.78, -33.73, -33.76, -33.74, -33.68, -33.70, -33.71, -33.74, -33.76,
-        -33.79, -33.84, -33.84, -33.87, -33.90, -33.90, -33.91, -33.90, -33.90, -33.91,
-        -33.91, -33.90, -33.88, -33.90, -33.90, -33.86, -33.85, -33.86, -33.88, -33.83,
-        -33.85, -33.82, -33.78, -33.79, -33.81, -33.79, -33.87, -33.86, -33.85, -33.90,
-        -33.90, -33.90, -33.86, -33.85, -33.87, -33.81, -33.78, -33.81, -33.83, -33.88,
-        -33.94, -33.90, -33.99, -34.00, -33.99, -33.95, -33.98, -34.00, -34.00, -34.00,
-        -33.99, -33.99, -33.97, -33.93, -33.90, -33.92, -33.92, -33.95, -34.01, -34.03,
-        -34.02, -34.08, -34.05, -34.01, -33.97, -34.01, -33.95, -33.93, -33.96, -33.90,
-        -33.93, -33.93, -33.93, -33.97, -33.99, -33.94, -33.97, -33.92, -33.95, -33.90,
-        -33.93, -33.97, -33.90, -33.97, -33.95, -33.95, -33.97, -33.97, -33.99, -33.97,
-        -33.97, -33.99, -34.00, -34.01, -34.00, -34.01, -34.00, -34.02, -34.01, -34.00,
-        -34.06, -34.00, -34.02, -34.02, -33.98, -33.98, -33.96, -33.97, -33.96, -33.95,
-        -33.99, -33.97, -33.94, -33.92, -33.92, -33.90, -33.87, -33.89, -33.89, -33.91,
-        -33.91, -33.99, -33.99, -33.97, -33.97, -33.95, -33.95, -33.95, -33.95, -33.95,
-        -33.95, -33.95, -33.95, -33.95, -33.98, -33.97, -33.98, -33.98, -33.95, -33.95,
-        -33.95, -33.95, -33.95, -33.95, -33.95, -33.95, -33.95, -33.95, -33.95, -33.95,
-        -33.95, -33.95, -33.95, -34.04, -34.06, -34.12, -34.16, -34.13, -34.10, -34.10,
-        -34.10, -34.07, -34.07, -34.05, -34.03, -33.98, -34.04, -34.06, -34.06, -34.16,
-        -34.16, -34.16, -34.16, -34.16, -34.16, -34.19, -34.21, -34.21, -34.21, -34.25,
-        -34.22, -34.19, -34.14, -34.07, -34.06, -34.08, -34.08, -34.12, -34.14, -34.16,
-        -34.16, -34.18, -34.16, -34.23, -34.25, -34.24, -34.25, -34.23, -34.20, -34.19,
-        -34.17, -34.12, -34.12, -34.14, -34.14, -34.22, -34.25, -34.30, -34.26, -34.23,
-        -34.20, -34.18, -34.14, -34.13, -34.11, -34.08, -34.14, -34.07, -34.14, -34.24,
-        -34.25, -34.23, -34.24, -34.24, -34.19, -34.13, -34.11, -34.06, -34.08, -34.09,
-        -34.08, -34.07, -34.10, -34.14, -34.16, -34.15, -34.19, -34.21, -34.21, -34.20,
-        -34.22, -34.21, -34.21, -34.22, -34.22, -34.17, -34.12, -34.12, -34.09, -34.09,
-        -34.09, -34.08, -34.09, -34.08, -34.00, -34.03, -34.02, -34.02, -34.09, -34.05,
-        -34.10, -34.12, -34.12, -34.12, -34.11, -34.10, -34.04, -33.99, -34.02, -34.00,
-        -33.99, -34.00, -34.02, -34.02, -33.98, -33.96, -33.94, -33.96, -33.87, -33.92,
-        -33.95, -33.93, -33.92, -33.95, -33.97, -33.98, -33.97, -33.93, -33.93, -33.86,
-        -33.83, -33.78, -33.71, -33.75, -33.75, -33.70, -33.69, -33.68, -33.68, -33.66,
-        -33.65, -33.61, -33.57, -33.59, -33.54, -33.54, -33.53, -33.50, -33.51, -33.53,
-        -33.55, -33.53, -33.51, -33.42, -33.37, -33.35, -33.31, -33.29, -33.24, -33.22,
-        -33.17, -33.13, -33.17, -33.18, -33.18, -33.17, -33.19, -33.26, -33.20, -33.24,
-        -33.26, -33.17, -33.18, -33.15, -33.09, -33.05, -33.00, -32.91, -32.84, -32.84,
-        -32.83, -32.74, -32.77, -32.79, -32.74, -32.67, -32.70, -32.70, -32.70, -32.67,
-        -32.65, -32.67, -32.57, -32.46, -32.46, -32.39, -32.33, -32.29, -32.25, -32.18,
-        -32.17, -32.11, -32.11, -32.12, -32.07, -32.04, -32.08, -32.06, -32.03, -32.02,
-        -31.94, -31.94, -31.89, -31.83, -31.86, -31.84, -31.81, -31.77, -31.72, -31.66,
-        -31.60, -31.50, -31.43, -31.41, -31.34, -31.28, -31.25, -31.24, -31.21, -31.18,
-        -31.10, -31.04, -31.04, -30.94, -30.94, -30.88, -30.78, -30.72, -30.62, -30.52,
-        -30.44, -30.41, -30.37, -30.37, -30.37, -30.27, -30.24, -30.17, -30.09, -30.09,
-        -30.04, -30.00, -29.96, -29.99, -29.87, -29.82, -29.75, -29.72, -29.63, -29.57,
-        -29.50, -29.43, -29.40, -29.32, -29.31, -29.23, -29.16, -29.13, -29.07, -28.95,
-        -28.94, -28.88, -28.78, -28.67, -28.56, -28.49, -28.42, -28.30, -28.26, -28.26,
-        -28.19, -28.16, -28.09, -27.98, -27.93, -27.86, -27.76, -27.75
+        -1566, -1565, -1567, -1567,
+        -1568, -1569, -1571, -1573, -1571, -1575, -1572, -1576, -1579, -1580,
+        -1586, -1594, -1594, -1594, -1596, -1596, -1595, -1599, -1601, -1598,
+        -1604, -1604, -1605, -1603, -1602, -1611, -1613, -1614, -1618, -1625,
+        -1622, -1627, -1635, -1630, -1631, -1637, -1635, -1635, -1635, -1639,
+        -1643, -1643, -1649, -1647, -1653, -1658, -1663, -1666, -1668, -1670,
+        -1669, -1665, -1664, -1665, -1667, -1665, -1666, -1671, -1668, -1670,
+        -1679, -1682, -1685, -1687, -1693, -1696, -1698, -1700, -1702, -1701,
+        -1697, -1698, -1702, -1705, -1703, -1710, -1708, -1710, -1716, -1720,
+        -1720, -1727, -1731, -1733, -1732, -1730, -1735, -1732, -1729, -1731,
+        -1732, -1729, -1732, -1738, -1737, -1738, -1748, -1750, -1751, -1753,
+        -1759, -1763, -1764, -1764, -1766, -1767, -1771, -1772, -1776, -1780,
+        -1786, -1791, -1791, -1793, -1794, -1790, -1793, -1797, -1799, -1801,
+        -1803, -1810, -1812, -1809, -1812, -1820, -1819, -1816, -1823, -1825,
+        -1826, -1826, -1824, -1829, -1829, -1828, -1827, -1834, -1837, -1841,
+        -1844, -1846, -1850, -1845, -1850, -1854, -1852, -1849, -1857, -1857,
+        -1856, -1858, -1861, -1863, -1864, -1865, -1869, -1873, -1874, -1876,
+        -1874, -1877, -1878, -1881, -1884, -1880, -1886, -1887, -1889, -1892,
+        -1899, -1904, -1912, -1914, -1918, -1917, -1917, -1917, -1917, -1920,
+        -1919, -1921, -1921, -1925, -1926, -1926, -1924, -1935, -1938, -1945,
+        -1954, -1956, -1963, -1970, -1968, -1968, -1970, -1966, -1974, -1975,
+        -1976, -1978, -1977, -1979, -1978, -1977, -1977, -1983, -1979, -1980,
+        -1988, -1998, -2000, -2007, -2010, -2012, -2007, -2007, -2007, -2008,
+        -2010, -2006, -2012, -2015, -2015, -2025, -2030, -2031, -2035, -2040,
+        -2041, -2041, -2041, -2042, -2041, -2038, -2038, -2038, -2042, -2047,
+        -2053, -2059, -2061, -2070, -2065, -2065, -2072, -2076, -2077, -2083,
+        -2087, -2086, -2088, -2090, -2084, -2079, -2079, -2079, -2080, -2081,
+        -2088, -2089, -2090, -2099, -2104, -2105, -2109, -2111, -2111, -2117,
+        -2118, -2117, -2125, -2129, -2129, -2131, -2133, -2134, -2138, -2146,
+        -2148, -2156, -2159, -2161, -2168, -2166, -2172, -2177, -2173, -2178,
+        -2175, -2176, -2180, -2183, -2186, -2189, -2193, -2193, -2196, -2196,
+        -2195, -2196, -2196, -2195, -2202, -2203, -2200, -2203, -2202, -2203,
+        -2210, -2209, -2213, -2220, -2223, -2226, -2228, -2231, -2233, -2235,
+        -2240, -2237, -2234, -2242, -2242, -2240, -2245, -2248, -2253, -2254,
+        -2261, -2266, -2267, -2271, -2276, -2272, -2270, -2271, -2271, -2277,
+        -2285, -2285, -2295, -2295, -2298, -2298, -2298, -2304, -2298, -2308,
+        -2312, -2313, -2318, -2321, -2318, -2319, -2321, -2323, -2317, -2326,
+        -2330, -2328, -2338, -2340, -2348, -2353, -2355, -2361, -2357, -2358,
+        -2363, -2360, -2354, -2363, -2363, -2367, -2370, -2375, -2382, -2385,
+        -2388, -2386, -2387, -2391, -2391, -2394, -2398, -2404, -2408, -2412,
+        -2416, -2416, -2419, -2427, -2427, -2430, -2435, -2434, -2434, -2439,
+        -2433, -2429, -2429, -2432, -2433, -2439, -2443, -2444, -2447, -2449,
+        -2451, -2449, -2452, -2454, -2456, -2460, -2462, -2468, -2468, -2475,
+        -2478, -2481, -2492, -2495, -2499, -2500, -2509, -2506, -2506, -2512,
+        -2507, -2512, -2514, -2516, -2517, -2519, -2526, -2525, -2530, -2535,
+        -2539, -2541, -2546, -2549, -2546, -2549, -2548, -2544, -2546, -2548,
+        -2550, -2555, -2560, -2569, -2565, -2568, -2570, -2565, -2571, -2573,
+        -2572, -2575, -2579, -2579, -2587, -2593, -2590, -2597, -2601, -2605,
+        -2607, -2609, -2611, -2608, -2608, -2610, -2612, -2620, -2618, -2622,
+        -2625, -2627, -2633, -2640, -2648, -2649, -2655, -2653, -2658, -2661,
+        -2660, -2662, -2665, -2667, -2670, -2675, -2677, -2683, -2689, -2685,
+        -2692, -2694, -2690, -2692, -2696, -2690, -2696, -2695, -2693, -2703,
+        -2705, -2711, -2711, -2714, -2721, -2725, -2726, -2730, -2737, -2736,
+        -2735, -2738, -2738, -2740, -2743, -2745, -2745, -2753, -2752, -2750,
+        -2753, -2750, -2755, -2757, -2755, -2763, -2768, -2774, -2778, -2783,
+        -2789, -2791, -2790, -2792, -2797, -2792, -2798, -2795, -2792, -2798,
+        -2796, -2797, -2798, -2798, -2805, -2815, -2820, -2826, -2837, -2842,
+        -2839, -2842, -2843, -2844, -2844, -2847, -2845, -2844, -2846, -2851,
+        -2855, -2861, -2865, -2871, -2864, -2867, -2871, -2867, -2872, -2873,
+        -2876, -2876, -2880, -2878, -2878, -2881, -2878, -2879, -2885, -2890,
+        -2895, -2902, -2899, -2899, -2902, -2900, -2902, -2910, -2917, -2924,
+        -2930, -2933, -2935, -2935, -2932, -2935, -2937, -2939, -2941, -2943,
+        -2944, -2943, -2944, -2942, -2947, -2943, -2942, -2948, -2944, -2949,
+        -2957, -2964, -2970, -2975, -2982, -2982, -2986, -2993, -2993, -2995,
+        -2993, -2993, -2996, -3003, -3006, -3013, -3015, -3016, -3015, -3016,
+        -3014, -3017, -3008, -3010, -3007, -3002, -3010, -3017, -3024, -3030,
+        -3036, -3032, -3034, -3037, -3032, -3037, -3042, -3048, -3053, -3056,
+        -3057, -3053, -3060, -3054, -3055, -3061, -3068, -3075, -3078, -3072,
+        -3073, -3073, -3066, -3067, -3070, -3075, -3081, -3086, -3088, -3091,
+        -3092, -3092, -3097, -3099, -3096, -3099, -3101, -3102, -3103, -3112,
+        -3113, -3116, -3123, -3121, -3116, -3119, -3124, -3121, -3125, -3127,
+        -3128, -3130, -3135, -3136, -3131, -3138, -3139, -3141, -3133, -3134,
+        -3132, -3132, -3137, -3138, -3144, -3148, -3149, -3152, -3153, -3157,
+        -3159, -3160, -3157, -3160, -3160, -3165, -3171, -3176, -3183, -3186,
+        -3189, -3190, -3194, -3195, -3197, -3197, -3197, -3194, -3194, -3194,
+        -3193, -3193, -3193, -3189, -3191, -3194, -3198, -3199, -3199, -3203,
+        -3204, -3206, -3211, -3206, -3212, -3207, -3208, -3208, -3208, -3213,
+        -3213, -3216, -3222, -3222, -3227, -3229, -3229, -3229, -3229, -3229,
+        -3229, -3233, -3237, -3242, -3247, -3247, -3240, -3237, -3240, -3240,
+        -3232, -3232, -3234, -3237, -3238, -3238, -3238, -3238, -3238, -3238,
+        -3244, -3252, -3257, -3262, -3265, -3268, -3273, -3281, -3287, -3289,
+        -3292, -3296, -3296, -3296, -3296, -3296, -3301, -3301, -3301, -3301,
+        -3301, -3291, -3295, -3298, -3298, -3300, -3295, -3295, -3290, -3287,
+        -3290, -3290, -3292, -3290, -3298, -3295, -3295, -3300, -3295, -3293,
+        -3291, -3296, -3296, -3298, -3295, -3292, -3289, -3289, -3289, -3290,
+        -3291, -3297, -3298, -3296, -3304, -3296, -3297, -3295, -3295, -3299,
+        -3300, -3308, -3313, -3320, -3325, -3326, -3326, -3328, -3328, -3325,
+        -3319, -3316, -3319, -3320, -3322, -3326, -3323, -3323, -3328, -3323,
+        -3325, -3332, -3334, -3340, -3344, -3349, -3348, -3344, -3343, -3342,
+        -3338, -3338, -3339, -3338, -3339, -3342, -3337, -3342, -3348, -3345,
+        -3343, -3340, -3338, -3336, -3337, -3342, -3342, -3350, -3351, -3355,
+        -3355, -3353, -3355, -3355, -3360, -3360, -3365, -3369, -3369, -3371,
+        -3369, -3372, -3370, -3370, -3370, -3370, -3370, -3370, -3371, -3374,
+        -3378, -3378, -3373, -3376, -3374, -3368, -3370, -3371, -3374, -3376,
+        -3379, -3384, -3384, -3387, -3390, -3390, -3391, -3390, -3390, -3391,
+        -3391, -3390, -3388, -3390, -3390, -3386, -3385, -3386, -3388, -3383,
+        -3385, -3382, -3378, -3379, -3381, -3379, -3387, -3386, -3385, -3390,
+        -3390, -3390, -3386, -3385, -3387, -3381, -3378, -3381, -3383, -3388,
+        -3394, -3390, -3399, -3400, -3399, -3395, -3398, -3400, -3400, -3400,
+        -3399, -3399, -3397, -3393, -3390, -3392, -3392, -3395, -3401, -3403,
+        -3402, -3408, -3405, -3401, -3397, -3401, -3395, -3393, -3396, -3390,
+        -3393, -3393, -3393, -3397, -3399, -3394, -3397, -3392, -3395, -3390,
+        -3393, -3397, -3390, -3397, -3395, -3395, -3397, -3397, -3399, -3397,
+        -3397, -3399, -3400, -3401, -3400, -3401, -3400, -3402, -3401, -3400,
+        -3406, -3400, -3402, -3402, -3398, -3398, -3396, -3397, -3396, -3395,
+        -3399, -3397, -3394, -3392, -3392, -3390, -3387, -3389, -3389, -3391,
+        -3391, -3399, -3399, -3397, -3397, -3395, -3395, -3395, -3395, -3395,
+        -3395, -3395, -3395, -3395, -3398, -3397, -3398, -3398, -3395, -3395,
+        -3395, -3395, -3395, -3395, -3395, -3395, -3395, -3395, -3395, -3395,
+        -3395, -3395, -3395, -3404, -3406, -3412, -3416, -3413, -3410, -3410,
+        -3410, -3407, -3407, -3405, -3403, -3398, -3404, -3406, -3406, -3416,
+        -3416, -3416, -3416, -3416, -3416, -3419, -3421, -3421, -3421, -3425,
+        -3422, -3419, -3414, -3407, -3406, -3408, -3408, -3412, -3414, -3416,
+        -3416, -3418, -3416, -3423, -3425, -3424, -3425, -3423, -3420, -3419,
+        -3417, -3412, -3412, -3414, -3414, -3422, -3425, -3430, -3426, -3423,
+        -3420, -3418, -3414, -3413, -3411, -3408, -3414, -3407, -3414, -3424,
+        -3425, -3423, -3424, -3424, -3419, -3413, -3411, -3406, -3408, -3409,
+        -3408, -3407, -3410, -3414, -3416, -3415, -3419, -3421, -3421, -3420,
+        -3422, -3421, -3421, -3422, -3422, -3417, -3412, -3412, -3409, -3409,
+        -3409, -3408, -3409, -3408, -3400, -3403, -3402, -3402, -3409, -3405,
+        -3410, -3412, -3412, -3412, -3411, -3410, -3404, -3399, -3402, -3400,
+        -3399, -3400, -3402, -3402, -3398, -3396, -3394, -3396, -3387, -3392,
+        -3395, -3393, -3392, -3395, -3397, -3398, -3397, -3393, -3393, -3386,
+        -3383, -3378, -3371, -3375, -3375, -3370, -3369, -3368, -3368, -3366,
+        -3365, -3361, -3357, -3359, -3354, -3354, -3353, -3350, -3351, -3353,
+        -3355, -3353, -3351, -3342, -3337, -3335, -3331, -3329, -3324, -3322,
+        -3317, -3313, -3317, -3318, -3318, -3317, -3319, -3326, -3320, -3324,
+        -3326, -3317, -3318, -3315, -3309, -3305, -3300, -3291, -3284, -3284,
+        -3283, -3274, -3277, -3279, -3274, -3267, -3270, -3270, -3270, -3267,
+        -3265, -3267, -3257, -3246, -3246, -3239, -3233, -3229, -3225, -3218,
+        -3217, -3211, -3211, -3212, -3207, -3204, -3208, -3206, -3203, -3202,
+        -3194, -3194, -3189, -3183, -3186, -3184, -3181, -3177, -3172, -3166,
+        -3160, -3150, -3143, -3141, -3134, -3128, -3125, -3124, -3121, -3118,
+        -3110, -3104, -3104, -3094, -3094, -3088, -3078, -3072, -3062, -3052,
+        -3044, -3041, -3037, -3037, -3037, -3027, -3024, -3017, -3009, -3009,
+        -3004, -3000, -2996, -2999, -2987, -2982, -2975, -2972, -2963, -2957,
+        -2950, -2943, -2940, -2932, -2931, -2923, -2916, -2913, -2907, -2895,
+        -2894, -2888, -2878, -2867, -2856, -2849, -2842, -2830, -2826, -2826,
+        -2819, -2816, -2809, -2798, -2793, -2786, -2776, -2775
     };
 
-    static const float iso226_2003_curve_60_phons[1382] =
+    static const int16_t iso226_2003_curve_60_phons[1382] =
     {
-        -10.87, -10.85, -10.85, -10.82,
-        -10.82, -10.82, -10.83, -10.83, -10.82, -10.86, -10.82, -10.87, -10.90, -10.87,
-        -10.94, -11.03, -11.03, -11.03, -11.06, -11.03, -11.03, -11.08, -11.08, -11.03,
-        -11.08, -11.08, -11.07, -11.04, -11.04, -11.13, -11.13, -11.16, -11.20, -11.26,
-        -11.21, -11.25, -11.31, -11.24, -11.24, -11.29, -11.24, -11.24, -11.24, -11.30,
-        -11.34, -11.34, -11.39, -11.36, -11.40, -11.46, -11.50, -11.51, -11.53, -11.54,
-        -11.53, -11.48, -11.45, -11.45, -11.48, -11.47, -11.48, -11.55, -11.50, -11.50,
-        -11.59, -11.62, -11.65, -11.66, -11.71, -11.72, -11.75, -11.75, -11.75, -11.71,
-        -11.67, -11.69, -11.72, -11.75, -11.71, -11.76, -11.72, -11.71, -11.77, -11.82,
-        -11.82, -11.89, -11.92, -11.92, -11.90, -11.87, -11.94, -11.93, -11.90, -11.95,
-        -11.92, -11.87, -11.90, -11.94, -11.92, -11.93, -12.02, -12.03, -12.03, -12.07,
-        -12.14, -12.18, -12.18, -12.18, -12.18, -12.19, -12.23, -12.24, -12.28, -12.34,
-        -12.37, -12.39, -12.39, -12.39, -12.37, -12.33, -12.37, -12.44, -12.44, -12.45,
-        -12.46, -12.53, -12.54, -12.50, -12.53, -12.60, -12.59, -12.54, -12.60, -12.60,
-        -12.60, -12.60, -12.56, -12.60, -12.60, -12.59, -12.56, -12.64, -12.66, -12.71,
-        -12.75, -12.76, -12.79, -12.74, -12.77, -12.81, -12.81, -12.74, -12.81, -12.81,
-        -12.81, -12.79, -12.81, -12.81, -12.81, -12.81, -12.89, -12.94, -12.97, -12.97,
-        -12.96, -12.97, -12.96, -13.00, -13.02, -12.96, -13.01, -13.02, -13.02, -13.04,
-        -13.08, -13.13, -13.20, -13.23, -13.29, -13.23, -13.23, -13.23, -13.23, -13.22,
-        -13.23, -13.23, -13.20, -13.22, -13.23, -13.23, -13.20, -13.34, -13.37, -13.44,
-        -13.53, -13.55, -13.62, -13.67, -13.65, -13.65, -13.65, -13.61, -13.64, -13.65,
-        -13.64, -13.67, -13.64, -13.67, -13.67, -13.65, -13.65, -13.75, -13.67, -13.66,
-        -13.72, -13.81, -13.81, -13.88, -13.91, -13.91, -13.82, -13.86, -13.86, -13.87,
-        -13.87, -13.83, -13.91, -13.92, -13.92, -14.01, -14.03, -14.03, -14.07, -14.08,
-        -14.08, -14.08, -14.10, -14.12, -14.08, -14.07, -14.07, -14.07, -14.08, -14.13,
-        -14.19, -14.25, -14.29, -14.38, -14.28, -14.28, -14.34, -14.38, -14.35, -14.40,
-        -14.46, -14.44, -14.44, -14.44, -14.34, -14.28, -14.29, -14.26, -14.28, -14.28,
-        -14.37, -14.39, -14.36, -14.44, -14.49, -14.49, -14.50, -14.50, -14.50, -14.59,
-        -14.60, -14.55, -14.65, -14.70, -14.69, -14.70, -14.71, -14.74, -14.75, -14.84,
-        -14.86, -14.91, -14.91, -14.91, -14.96, -14.92, -14.97, -15.02, -14.98, -15.02,
-        -14.97, -14.98, -15.02, -15.07, -15.09, -15.09, -15.14, -15.15, -15.19, -15.19,
-        -15.17, -15.18, -15.17, -15.12, -15.17, -15.17, -15.12, -15.15, -15.13, -15.14,
-        -15.22, -15.23, -15.28, -15.33, -15.33, -15.39, -15.39, -15.39, -15.39, -15.39,
-        -15.44, -15.43, -15.35, -15.44, -15.44, -15.43, -15.46, -15.49, -15.56, -15.60,
-        -15.65, -15.68, -15.70, -15.75, -15.75, -15.71, -15.69, -15.65, -15.65, -15.70,
-        -15.72, -15.71, -15.81, -15.81, -15.81, -15.81, -15.81, -15.90, -15.82, -15.91,
-        -15.96, -16.00, -16.02, -16.05, -16.02, -16.02, -16.04, -16.06, -15.98, -16.07,
-        -16.06, -16.02, -16.12, -16.12, -16.17, -16.22, -16.22, -16.27, -16.23, -16.23,
-        -16.28, -16.27, -16.19, -16.28, -16.28, -16.31, -16.33, -16.40, -16.47, -16.49,
-        -16.54, -16.49, -16.47, -16.49, -16.49, -16.51, -16.54, -16.60, -16.62, -16.65,
-        -16.70, -16.65, -16.67, -16.75, -16.74, -16.76, -16.81, -16.80, -16.81, -16.85,
-        -16.80, -16.75, -16.76, -16.80, -16.80, -16.85, -16.90, -16.91, -16.91, -16.91,
-        -16.91, -16.86, -16.89, -16.88, -16.88, -16.91, -16.91, -16.95, -16.96, -17.01,
-        -17.06, -17.07, -17.21, -17.21, -17.27, -17.28, -17.37, -17.35, -17.33, -17.39,
-        -17.33, -17.37, -17.38, -17.38, -17.38, -17.38, -17.45, -17.40, -17.49, -17.54,
-        -17.54, -17.54, -17.58, -17.59, -17.54, -17.59, -17.54, -17.50, -17.54, -17.54,
-        -17.56, -17.62, -17.68, -17.79, -17.75, -17.75, -17.80, -17.75, -17.80, -17.79,
-        -17.76, -17.76, -17.80, -17.80, -17.85, -17.90, -17.91, -17.96, -17.96, -17.97,
-        -17.98, -18.01, -18.01, -17.96, -17.97, -17.97, -18.01, -18.11, -18.06, -18.12,
-        -18.17, -18.17, -18.22, -18.32, -18.37, -18.38, -18.44, -18.38, -18.39, -18.43,
-        -18.38, -18.38, -18.38, -18.38, -18.43, -18.44, -18.46, -18.54, -18.62, -18.54,
-        -18.63, -18.67, -18.61, -18.65, -18.69, -18.62, -18.69, -18.69, -18.65, -18.74,
-        -18.74, -18.80, -18.80, -18.81, -18.85, -18.85, -18.85, -18.86, -18.90, -18.87,
-        -18.87, -18.90, -18.91, -18.90, -18.96, -18.98, -18.96, -19.06, -19.05, -19.01,
-        -19.02, -19.01, -19.06, -19.09, -19.06, -19.11, -19.19, -19.22, -19.22, -19.29,
-        -19.32, -19.30, -19.27, -19.28, -19.32, -19.26, -19.32, -19.27, -19.27, -19.32,
-        -19.31, -19.32, -19.32, -19.32, -19.38, -19.48, -19.53, -19.59, -19.69, -19.74,
-        -19.70, -19.74, -19.76, -19.79, -19.74, -19.74, -19.74, -19.69, -19.71, -19.75,
-        -19.80, -19.85, -19.90, -19.95, -19.87, -19.95, -19.95, -19.90, -19.95, -19.94,
-        -19.95, -19.90, -19.95, -19.92, -19.90, -19.95, -19.90, -19.91, -19.98, -20.03,
-        -20.08, -20.16, -20.13, -20.11, -20.16, -20.12, -20.12, -20.22, -20.26, -20.32,
-        -20.38, -20.38, -20.42, -20.42, -20.37, -20.37, -20.37, -20.37, -20.37, -20.38,
-        -20.37, -20.38, -20.37, -20.38, -20.41, -20.39, -20.37, -20.42, -20.38, -20.43,
-        -20.48, -20.53, -20.58, -20.59, -20.69, -20.69, -20.70, -20.79, -20.78, -20.80,
-        -20.79, -20.79, -20.82, -20.90, -20.90, -20.99, -21.01, -21.01, -21.01, -21.00,
-        -21.01, -20.99, -20.90, -20.90, -20.85, -20.80, -20.85, -20.90, -20.95, -21.00,
-        -21.04, -21.01, -21.01, -21.05, -21.00, -21.06, -21.11, -21.16, -21.21, -21.23,
-        -21.25, -21.21, -21.26, -21.22, -21.22, -21.28, -21.36, -21.40, -21.42, -21.36,
-        -21.32, -21.32, -21.25, -21.21, -21.27, -21.32, -21.37, -21.42, -21.42, -21.42,
-        -21.42, -21.42, -21.42, -21.47, -21.44, -21.47, -21.51, -21.52, -21.53, -21.61,
-        -21.63, -21.64, -21.73, -21.69, -21.65, -21.70, -21.73, -21.69, -21.69, -21.69,
-        -21.69, -21.69, -21.77, -21.79, -21.74, -21.84, -21.84, -21.84, -21.74, -21.73,
-        -21.69, -21.72, -21.74, -21.74, -21.84, -21.84, -21.84, -21.84, -21.84, -21.84,
-        -21.88, -21.90, -21.84, -21.90, -21.90, -21.95, -22.00, -22.05, -22.11, -22.16,
-        -22.21, -22.18, -22.26, -22.26, -22.26, -22.26, -22.26, -22.21, -22.21, -22.21,
-        -22.16, -22.16, -22.15, -22.13, -22.16, -22.22, -22.26, -22.26, -22.26, -22.26,
-        -22.26, -22.26, -22.32, -22.27, -22.32, -22.26, -22.26, -22.26, -22.26, -22.32,
-        -22.32, -22.37, -22.42, -22.42, -22.47, -22.47, -22.47, -22.47, -22.47, -22.47,
-        -22.47, -22.51, -22.53, -22.57, -22.63, -22.63, -22.56, -22.53, -22.58, -22.56,
-        -22.48, -22.47, -22.47, -22.47, -22.47, -22.47, -22.47, -22.47, -22.47, -22.47,
-        -22.58, -22.63, -22.68, -22.74, -22.79, -22.79, -22.84, -22.95, -23.00, -23.00,
-        -23.05, -23.05, -23.05, -23.05, -23.05, -23.05, -23.11, -23.11, -23.11, -23.11,
-        -23.11, -23.00, -23.00, -23.00, -23.00, -23.00, -22.95, -22.95, -22.90, -22.89,
-        -22.95, -22.95, -22.95, -22.90, -23.00, -22.95, -22.95, -23.00, -23.00, -23.00,
-        -23.00, -23.05, -23.05, -23.05, -23.00, -22.95, -22.89, -22.89, -22.89, -22.90,
-        -22.91, -22.95, -22.92, -22.92, -23.00, -22.89, -22.95, -22.95, -22.95, -23.02,
-        -23.00, -23.11, -23.13, -23.20, -23.25, -23.21, -23.21, -23.21, -23.21, -23.21,
-        -23.16, -23.12, -23.16, -23.16, -23.16, -23.21, -23.17, -23.14, -23.21, -23.16,
-        -23.16, -23.24, -23.27, -23.32, -23.36, -23.42, -23.37, -23.31, -23.32, -23.26,
-        -23.21, -23.22, -23.21, -23.20, -23.21, -23.26, -23.23, -23.26, -23.36, -23.36,
-        -23.31, -23.27, -23.22, -23.16, -23.16, -23.21, -23.21, -23.29, -23.32, -23.37,
-        -23.37, -23.37, -23.37, -23.37, -23.42, -23.37, -23.42, -23.45, -23.42, -23.45,
-        -23.42, -23.47, -23.43, -23.42, -23.42, -23.42, -23.42, -23.42, -23.46, -23.51,
-        -23.58, -23.60, -23.53, -23.53, -23.51, -23.43, -23.42, -23.42, -23.42, -23.42,
-        -23.43, -23.52, -23.53, -23.58, -23.63, -23.63, -23.64, -23.63, -23.63, -23.63,
-        -23.63, -23.63, -23.60, -23.63, -23.62, -23.58, -23.58, -23.58, -23.58, -23.53,
-        -23.53, -23.47, -23.46, -23.42, -23.47, -23.48, -23.57, -23.59, -23.58, -23.63,
-        -23.63, -23.63, -23.58, -23.57, -23.57, -23.47, -23.42, -23.46, -23.46, -23.51,
-        -23.57, -23.53, -23.62, -23.63, -23.63, -23.62, -23.64, -23.64, -23.64, -23.64,
-        -23.62, -23.63, -23.63, -23.63, -23.56, -23.62, -23.63, -23.67, -23.73, -23.73,
-        -23.74, -23.79, -23.74, -23.68, -23.65, -23.69, -23.63, -23.63, -23.66, -23.63,
-        -23.63, -23.65, -23.63, -23.63, -23.67, -23.61, -23.66, -23.61, -23.63, -23.58,
-        -23.59, -23.63, -23.53, -23.62, -23.59, -23.58, -23.63, -23.63, -23.67, -23.63,
-        -23.63, -23.66, -23.63, -23.67, -23.66, -23.67, -23.66, -23.63, -23.67, -23.63,
-        -23.66, -23.64, -23.63, -23.63, -23.60, -23.60, -23.58, -23.63, -23.59, -23.56,
-        -23.63, -23.58, -23.58, -23.58, -23.58, -23.58, -23.53, -23.53, -23.53, -23.53,
-        -23.53, -23.58, -23.62, -23.58, -23.63, -23.63, -23.63, -23.63, -23.63, -23.63,
-        -23.63, -23.63, -23.63, -23.63, -23.63, -23.63, -23.64, -23.63, -23.63, -23.63,
-        -23.63, -23.63, -23.63, -23.63, -23.63, -23.63, -23.63, -23.63, -23.63, -23.63,
-        -23.63, -23.63, -23.63, -23.72, -23.74, -23.80, -23.84, -23.79, -23.74, -23.74,
-        -23.73, -23.68, -23.68, -23.68, -23.68, -23.63, -23.72, -23.74, -23.74, -23.83,
-        -23.84, -23.84, -23.84, -23.84, -23.84, -23.86, -23.84, -23.84, -23.81, -23.84,
-        -23.79, -23.73, -23.68, -23.60, -23.58, -23.63, -23.68, -23.73, -23.79, -23.84,
-        -23.82, -23.84, -23.79, -23.85, -23.88, -23.88, -23.84, -23.84, -23.79, -23.76,
-        -23.77, -23.68, -23.65, -23.68, -23.69, -23.79, -23.80, -23.89, -23.83, -23.84,
-        -23.79, -23.79, -23.73, -23.73, -23.68, -23.63, -23.68, -23.59, -23.68, -23.78,
-        -23.79, -23.77, -23.79, -23.79, -23.73, -23.67, -23.64, -23.59, -23.62, -23.63,
-        -23.63, -23.63, -23.68, -23.73, -23.79, -23.78, -23.81, -23.84, -23.84, -23.84,
-        -23.85, -23.84, -23.84, -23.85, -23.82, -23.74, -23.68, -23.68, -23.66, -23.63,
-        -23.63, -23.63, -23.63, -23.62, -23.54, -23.63, -23.63, -23.63, -23.72, -23.68,
-        -23.74, -23.73, -23.74, -23.74, -23.74, -23.74, -23.64, -23.59, -23.63, -23.63,
-        -23.64, -23.63, -23.63, -23.63, -23.63, -23.61, -23.59, -23.62, -23.53, -23.62,
-        -23.63, -23.61, -23.60, -23.63, -23.63, -23.63, -23.63, -23.63, -23.63, -23.58,
-        -23.55, -23.49, -23.44, -23.47, -23.47, -23.42, -23.42, -23.42, -23.42, -23.41,
-        -23.38, -23.33, -23.32, -23.32, -23.27, -23.26, -23.26, -23.25, -23.27, -23.29,
-        -23.32, -23.31, -23.30, -23.23, -23.16, -23.16, -23.13, -23.11, -23.06, -23.06,
-        -22.99, -22.95, -23.02, -23.00, -23.00, -22.99, -23.01, -23.11, -23.06, -23.10,
-        -23.15, -23.09, -23.11, -23.11, -23.04, -23.00, -22.96, -22.89, -22.85, -22.84,
-        -22.83, -22.74, -22.78, -22.79, -22.74, -22.70, -22.75, -22.80, -22.79, -22.79,
-        -22.79, -22.78, -22.69, -22.56, -22.58, -22.48, -22.42, -22.41, -22.34, -22.32,
-        -22.31, -22.26, -22.27, -22.30, -22.27, -22.26, -22.32, -22.31, -22.31, -22.32,
-        -22.22, -22.22, -22.21, -22.12, -22.16, -22.16, -22.16, -22.16, -22.10, -22.05,
-        -22.00, -21.90, -21.84, -21.84, -21.79, -21.74, -21.74, -21.74, -21.74, -21.74,
-        -21.68, -21.63, -21.63, -21.54, -21.53, -21.48, -21.37, -21.32, -21.21, -21.11,
-        -21.04, -21.05, -21.00, -21.02, -21.05, -20.95, -20.95, -20.90, -20.85, -20.89,
-        -20.80, -20.79, -20.80, -20.84, -20.74, -20.68, -20.64, -20.63, -20.56, -20.53,
-        -20.52, -20.43, -20.43, -20.37, -20.36, -20.27, -20.20, -20.16, -20.11, -20.02,
-        -20.01, -19.98, -19.90, -19.84, -19.74, -19.70, -19.65, -19.56, -19.55, -19.52,
-        -19.46, -19.46, -19.41, -19.31, -19.28, -19.22, -19.16, -19.16
+        -1087, -1085, -1085, -1082,
+        -1082, -1082, -1083, -1083, -1082, -1086, -1082, -1087, -1090, -1087,
+        -1094, -1103, -1103, -1103, -1106, -1103, -1103, -1108, -1108, -1103,
+        -1108, -1108, -1107, -1104, -1104, -1113, -1113, -1116, -1120, -1126,
+        -1121, -1125, -1131, -1124, -1124, -1129, -1124, -1124, -1124, -1130,
+        -1134, -1134, -1139, -1136, -1140, -1146, -1150, -1151, -1153, -1154,
+        -1153, -1148, -1145, -1145, -1148, -1147, -1148, -1155, -1150, -1150,
+        -1159, -1162, -1165, -1166, -1171, -1172, -1175, -1175, -1175, -1171,
+        -1167, -1169, -1172, -1175, -1171, -1176, -1172, -1171, -1177, -1182,
+        -1182, -1189, -1192, -1192, -1190, -1187, -1194, -1193, -1190, -1195,
+        -1192, -1187, -1190, -1194, -1192, -1193, -1202, -1203, -1203, -1207,
+        -1214, -1218, -1218, -1218, -1218, -1219, -1223, -1224, -1228, -1234,
+        -1237, -1239, -1239, -1239, -1237, -1233, -1237, -1244, -1244, -1245,
+        -1246, -1253, -1254, -1250, -1253, -1260, -1259, -1254, -1260, -1260,
+        -1260, -1260, -1256, -1260, -1260, -1259, -1256, -1264, -1266, -1271,
+        -1275, -1276, -1279, -1274, -1277, -1281, -1281, -1274, -1281, -1281,
+        -1281, -1279, -1281, -1281, -1281, -1281, -1289, -1294, -1297, -1297,
+        -1296, -1297, -1296, -1300, -1302, -1296, -1301, -1302, -1302, -1304,
+        -1308, -1313, -1320, -1323, -1329, -1323, -1323, -1323, -1323, -1322,
+        -1323, -1323, -1320, -1322, -1323, -1323, -1320, -1334, -1337, -1344,
+        -1353, -1355, -1362, -1367, -1365, -1365, -1365, -1361, -1364, -1365,
+        -1364, -1367, -1364, -1367, -1367, -1365, -1365, -1375, -1367, -1366,
+        -1372, -1381, -1381, -1388, -1391, -1391, -1382, -1386, -1386, -1387,
+        -1387, -1383, -1391, -1392, -1392, -1401, -1403, -1403, -1407, -1408,
+        -1408, -1408, -1410, -1412, -1408, -1407, -1407, -1407, -1408, -1413,
+        -1419, -1425, -1429, -1438, -1428, -1428, -1434, -1438, -1435, -1440,
+        -1446, -1444, -1444, -1444, -1434, -1428, -1429, -1426, -1428, -1428,
+        -1437, -1439, -1436, -1444, -1449, -1449, -1450, -1450, -1450, -1459,
+        -1460, -1455, -1465, -1470, -1469, -1470, -1471, -1474, -1475, -1484,
+        -1486, -1491, -1491, -1491, -1496, -1492, -1497, -1502, -1498, -1502,
+        -1497, -1498, -1502, -1507, -1509, -1509, -1514, -1515, -1519, -1519,
+        -1517, -1518, -1517, -1512, -1517, -1517, -1512, -1515, -1513, -1514,
+        -1522, -1523, -1528, -1533, -1533, -1539, -1539, -1539, -1539, -1539,
+        -1544, -1543, -1535, -1544, -1544, -1543, -1546, -1549, -1556, -1560,
+        -1565, -1568, -1570, -1575, -1575, -1571, -1569, -1565, -1565, -1570,
+        -1572, -1571, -1581, -1581, -1581, -1581, -1581, -1590, -1582, -1591,
+        -1596, -1600, -1602, -1605, -1602, -1602, -1604, -1606, -1598, -1607,
+        -1606, -1602, -1612, -1612, -1617, -1622, -1622, -1627, -1623, -1623,
+        -1628, -1627, -1619, -1628, -1628, -1631, -1633, -1640, -1647, -1649,
+        -1654, -1649, -1647, -1649, -1649, -1651, -1654, -1660, -1662, -1665,
+        -1670, -1665, -1667, -1675, -1674, -1676, -1681, -1680, -1681, -1685,
+        -1680, -1675, -1676, -1680, -1680, -1685, -1690, -1691, -1691, -1691,
+        -1691, -1686, -1689, -1688, -1688, -1691, -1691, -1695, -1696, -1701,
+        -1706, -1707, -1721, -1721, -1727, -1728, -1737, -1735, -1733, -1739,
+        -1733, -1737, -1738, -1738, -1738, -1738, -1745, -1740, -1749, -1754,
+        -1754, -1754, -1758, -1759, -1754, -1759, -1754, -1750, -1754, -1754,
+        -1756, -1762, -1768, -1779, -1775, -1775, -1780, -1775, -1780, -1779,
+        -1776, -1776, -1780, -1780, -1785, -1790, -1791, -1796, -1796, -1797,
+        -1798, -1801, -1801, -1796, -1797, -1797, -1801, -1811, -1806, -1812,
+        -1817, -1817, -1822, -1832, -1837, -1838, -1844, -1838, -1839, -1843,
+        -1838, -1838, -1838, -1838, -1843, -1844, -1846, -1854, -1862, -1854,
+        -1863, -1867, -1861, -1865, -1869, -1862, -1869, -1869, -1865, -1874,
+        -1874, -1880, -1880, -1881, -1885, -1885, -1885, -1886, -1890, -1887,
+        -1887, -1890, -1891, -1890, -1896, -1898, -1896, -1906, -1905, -1901,
+        -1902, -1901, -1906, -1909, -1906, -1911, -1919, -1922, -1922, -1929,
+        -1932, -1930, -1927, -1928, -1932, -1926, -1932, -1927, -1927, -1932,
+        -1931, -1932, -1932, -1932, -1938, -1948, -1953, -1959, -1969, -1974,
+        -1970, -1974, -1976, -1979, -1974, -1974, -1974, -1969, -1971, -1975,
+        -1980, -1985, -1990, -1995, -1987, -1995, -1995, -1990, -1995, -1994,
+        -1995, -1990, -1995, -1992, -1990, -1995, -1990, -1991, -1998, -2003,
+        -2008, -2016, -2013, -2011, -2016, -2012, -2012, -2022, -2026, -2032,
+        -2038, -2038, -2042, -2042, -2037, -2037, -2037, -2037, -2037, -2038,
+        -2037, -2038, -2037, -2038, -2041, -2039, -2037, -2042, -2038, -2043,
+        -2048, -2053, -2058, -2059, -2069, -2069, -2070, -2079, -2078, -2080,
+        -2079, -2079, -2082, -2090, -2090, -2099, -2101, -2101, -2101, -2100,
+        -2101, -2099, -2090, -2090, -2085, -2080, -2085, -2090, -2095, -2100,
+        -2104, -2101, -2101, -2105, -2100, -2106, -2111, -2116, -2121, -2123,
+        -2125, -2121, -2126, -2122, -2122, -2128, -2136, -2140, -2142, -2136,
+        -2132, -2132, -2125, -2121, -2127, -2132, -2137, -2142, -2142, -2142,
+        -2142, -2142, -2142, -2147, -2144, -2147, -2151, -2152, -2153, -2161,
+        -2163, -2164, -2173, -2169, -2165, -2170, -2173, -2169, -2169, -2169,
+        -2169, -2169, -2177, -2179, -2174, -2184, -2184, -2184, -2174, -2173,
+        -2169, -2172, -2174, -2174, -2184, -2184, -2184, -2184, -2184, -2184,
+        -2188, -2190, -2184, -2190, -2190, -2195, -2200, -2205, -2211, -2216,
+        -2221, -2218, -2226, -2226, -2226, -2226, -2226, -2221, -2221, -2221,
+        -2216, -2216, -2215, -2213, -2216, -2222, -2226, -2226, -2226, -2226,
+        -2226, -2226, -2232, -2227, -2232, -2226, -2226, -2226, -2226, -2232,
+        -2232, -2237, -2242, -2242, -2247, -2247, -2247, -2247, -2247, -2247,
+        -2247, -2251, -2253, -2257, -2263, -2263, -2256, -2253, -2258, -2256,
+        -2248, -2247, -2247, -2247, -2247, -2247, -2247, -2247, -2247, -2247,
+        -2258, -2263, -2268, -2274, -2279, -2279, -2284, -2295, -2300, -2300,
+        -2305, -2305, -2305, -2305, -2305, -2305, -2311, -2311, -2311, -2311,
+        -2311, -2300, -2300, -2300, -2300, -2300, -2295, -2295, -2290, -2289,
+        -2295, -2295, -2295, -2290, -2300, -2295, -2295, -2300, -2300, -2300,
+        -2300, -2305, -2305, -2305, -2300, -2295, -2289, -2289, -2289, -2290,
+        -2291, -2295, -2292, -2292, -2300, -2289, -2295, -2295, -2295, -2302,
+        -2300, -2311, -2313, -2320, -2325, -2321, -2321, -2321, -2321, -2321,
+        -2316, -2312, -2316, -2316, -2316, -2321, -2317, -2314, -2321, -2316,
+        -2316, -2324, -2327, -2332, -2336, -2342, -2337, -2331, -2332, -2326,
+        -2321, -2322, -2321, -2320, -2321, -2326, -2323, -2326, -2336, -2336,
+        -2331, -2327, -2322, -2316, -2316, -2321, -2321, -2329, -2332, -2337,
+        -2337, -2337, -2337, -2337, -2342, -2337, -2342, -2345, -2342, -2345,
+        -2342, -2347, -2343, -2342, -2342, -2342, -2342, -2342, -2346, -2351,
+        -2358, -2360, -2353, -2353, -2351, -2343, -2342, -2342, -2342, -2342,
+        -2343, -2352, -2353, -2358, -2363, -2363, -2364, -2363, -2363, -2363,
+        -2363, -2363, -2360, -2363, -2362, -2358, -2358, -2358, -2358, -2353,
+        -2353, -2347, -2346, -2342, -2347, -2348, -2357, -2359, -2358, -2363,
+        -2363, -2363, -2358, -2357, -2357, -2347, -2342, -2346, -2346, -2351,
+        -2357, -2353, -2362, -2363, -2363, -2362, -2364, -2364, -2364, -2364,
+        -2362, -2363, -2363, -2363, -2356, -2362, -2363, -2367, -2373, -2373,
+        -2374, -2379, -2374, -2368, -2365, -2369, -2363, -2363, -2366, -2363,
+        -2363, -2365, -2363, -2363, -2367, -2361, -2366, -2361, -2363, -2358,
+        -2359, -2363, -2353, -2362, -2359, -2358, -2363, -2363, -2367, -2363,
+        -2363, -2366, -2363, -2367, -2366, -2367, -2366, -2363, -2367, -2363,
+        -2366, -2364, -2363, -2363, -2360, -2360, -2358, -2363, -2359, -2356,
+        -2363, -2358, -2358, -2358, -2358, -2358, -2353, -2353, -2353, -2353,
+        -2353, -2358, -2362, -2358, -2363, -2363, -2363, -2363, -2363, -2363,
+        -2363, -2363, -2363, -2363, -2363, -2363, -2364, -2363, -2363, -2363,
+        -2363, -2363, -2363, -2363, -2363, -2363, -2363, -2363, -2363, -2363,
+        -2363, -2363, -2363, -2372, -2374, -2380, -2384, -2379, -2374, -2374,
+        -2373, -2368, -2368, -2368, -2368, -2363, -2372, -2374, -2374, -2383,
+        -2384, -2384, -2384, -2384, -2384, -2386, -2384, -2384, -2381, -2384,
+        -2379, -2373, -2368, -2360, -2358, -2363, -2368, -2373, -2379, -2384,
+        -2382, -2384, -2379, -2385, -2388, -2388, -2384, -2384, -2379, -2376,
+        -2377, -2368, -2365, -2368, -2369, -2379, -2380, -2389, -2383, -2384,
+        -2379, -2379, -2373, -2373, -2368, -2363, -2368, -2359, -2368, -2378,
+        -2379, -2377, -2379, -2379, -2373, -2367, -2364, -2359, -2362, -2363,
+        -2363, -2363, -2368, -2373, -2379, -2378, -2381, -2384, -2384, -2384,
+        -2385, -2384, -2384, -2385, -2382, -2374, -2368, -2368, -2366, -2363,
+        -2363, -2363, -2363, -2362, -2354, -2363, -2363, -2363, -2372, -2368,
+        -2374, -2373, -2374, -2374, -2374, -2374, -2364, -2359, -2363, -2363,
+        -2364, -2363, -2363, -2363, -2363, -2361, -2359, -2362, -2353, -2362,
+        -2363, -2361, -2360, -2363, -2363, -2363, -2363, -2363, -2363, -2358,
+        -2355, -2349, -2344, -2347, -2347, -2342, -2342, -2342, -2342, -2341,
+        -2338, -2333, -2332, -2332, -2327, -2326, -2326, -2325, -2327, -2329,
+        -2332, -2331, -2330, -2323, -2316, -2316, -2313, -2311, -2306, -2306,
+        -2299, -2295, -2302, -2300, -2300, -2299, -2301, -2311, -2306, -2310,
+        -2315, -2309, -2311, -2311, -2304, -2300, -2296, -2289, -2285, -2284,
+        -2283, -2274, -2278, -2279, -2274, -2270, -2275, -2280, -2279, -2279,
+        -2279, -2278, -2269, -2256, -2258, -2248, -2242, -2241, -2234, -2232,
+        -2231, -2226, -2227, -2230, -2227, -2226, -2232, -2231, -2231, -2232,
+        -2222, -2222, -2221, -2212, -2216, -2216, -2216, -2216, -2210, -2205,
+        -2200, -2190, -2184, -2184, -2179, -2174, -2174, -2174, -2174, -2174,
+        -2168, -2163, -2163, -2154, -2153, -2148, -2137, -2132, -2121, -2111,
+        -2104, -2105, -2100, -2102, -2105, -2095, -2095, -2090, -2085, -2089,
+        -2080, -2079, -2080, -2084, -2074, -2068, -2064, -2063, -2056, -2053,
+        -2052, -2043, -2043, -2037, -2036, -2027, -2020, -2016, -2011, -2002,
+        -2001, -1998, -1990, -1984, -1974, -1970, -1965, -1956, -1955, -1952,
+        -1946, -1946, -1941, -1931, -1928, -1922, -1916, -1916
     };
 
-    static const float iso226_2003_curve_70_phons[1382] =
+    static const int16_t iso226_2003_curve_70_phons[1382] =
     {
-        -6.14, -6.13, -6.14, -6.11,
-        -6.11, -6.12, -6.12, -6.12, -6.11, -6.14, -6.11, -6.14, -6.16, -6.15,
-        -6.18, -6.24, -6.23, -6.23, -6.25, -6.23, -6.23, -6.26, -6.26, -6.23,
-        -6.26, -6.26, -6.26, -6.24, -6.24, -6.29, -6.29, -6.31, -6.33, -6.36,
-        -6.34, -6.36, -6.40, -6.35, -6.35, -6.38, -6.35, -6.35, -6.35, -6.38,
-        -6.41, -6.41, -6.44, -6.42, -6.44, -6.47, -6.50, -6.51, -6.52, -6.52,
-        -6.52, -6.49, -6.47, -6.47, -6.49, -6.48, -6.49, -6.53, -6.50, -6.50,
-        -6.55, -6.57, -6.58, -6.59, -6.62, -6.63, -6.64, -6.64, -6.64, -6.62,
-        -6.60, -6.61, -6.63, -6.64, -6.62, -6.65, -6.62, -6.62, -6.65, -6.68,
-        -6.68, -6.72, -6.74, -6.74, -6.72, -6.71, -6.75, -6.74, -6.73, -6.75,
-        -6.74, -6.71, -6.72, -6.75, -6.74, -6.74, -6.79, -6.80, -6.80, -6.82,
-        -6.86, -6.88, -6.89, -6.89, -6.89, -6.89, -6.91, -6.92, -6.94, -6.97,
-        -6.99, -7.00, -7.00, -7.00, -6.99, -6.97, -6.99, -7.03, -7.03, -7.03,
-        -7.04, -7.08, -7.09, -7.06, -7.08, -7.12, -7.12, -7.09, -7.12, -7.12,
-        -7.12, -7.12, -7.10, -7.12, -7.12, -7.12, -7.10, -7.15, -7.15, -7.18,
-        -7.21, -7.21, -7.23, -7.20, -7.22, -7.24, -7.24, -7.20, -7.24, -7.24,
-        -7.24, -7.23, -7.24, -7.24, -7.24, -7.24, -7.29, -7.32, -7.33, -7.33,
-        -7.33, -7.33, -7.32, -7.35, -7.36, -7.32, -7.36, -7.36, -7.36, -7.37,
-        -7.39, -7.42, -7.46, -7.48, -7.51, -7.48, -7.48, -7.48, -7.48, -7.47,
-        -7.48, -7.48, -7.46, -7.47, -7.48, -7.48, -7.46, -7.54, -7.56, -7.60,
-        -7.65, -7.66, -7.70, -7.72, -7.72, -7.72, -7.72, -7.69, -7.71, -7.71,
-        -7.71, -7.73, -7.71, -7.73, -7.73, -7.72, -7.72, -7.77, -7.73, -7.72,
-        -7.75, -7.81, -7.81, -7.85, -7.86, -7.86, -7.81, -7.84, -7.83, -7.84,
-        -7.84, -7.82, -7.86, -7.87, -7.87, -7.92, -7.93, -7.93, -7.95, -7.96,
-        -7.96, -7.96, -7.97, -7.98, -7.96, -7.95, -7.95, -7.95, -7.96, -7.99,
-        -8.02, -8.06, -8.08, -8.13, -8.07, -8.07, -8.11, -8.13, -8.11, -8.14,
-        -8.17, -8.16, -8.16, -8.16, -8.10, -8.07, -8.08, -8.06, -8.07, -8.07,
-        -8.12, -8.13, -8.12, -8.16, -8.19, -8.19, -8.19, -8.19, -8.20, -8.25,
-        -8.25, -8.22, -8.28, -8.31, -8.30, -8.31, -8.31, -8.33, -8.34, -8.39,
-        -8.40, -8.43, -8.43, -8.43, -8.46, -8.43, -8.46, -8.49, -8.46, -8.49,
-        -8.46, -8.47, -8.49, -8.52, -8.53, -8.53, -8.55, -8.57, -8.58, -8.58,
-        -8.58, -8.58, -8.58, -8.55, -8.57, -8.58, -8.55, -8.56, -8.55, -8.56,
-        -8.60, -8.61, -8.63, -8.67, -8.67, -8.70, -8.70, -8.70, -8.70, -8.70,
-        -8.73, -8.72, -8.68, -8.73, -8.73, -8.72, -8.74, -8.76, -8.80, -8.82,
-        -8.84, -8.86, -8.87, -8.90, -8.90, -8.88, -8.87, -8.85, -8.85, -8.87,
-        -8.89, -8.88, -8.93, -8.93, -8.93, -8.94, -8.94, -8.99, -8.94, -8.99,
-        -9.02, -9.04, -9.05, -9.07, -9.06, -9.05, -9.07, -9.08, -9.03, -9.08,
-        -9.08, -9.05, -9.11, -9.11, -9.14, -9.17, -9.17, -9.19, -9.17, -9.17,
-        -9.20, -9.19, -9.15, -9.20, -9.20, -9.22, -9.23, -9.27, -9.31, -9.32,
-        -9.35, -9.32, -9.31, -9.32, -9.32, -9.33, -9.35, -9.38, -9.39, -9.41,
-        -9.44, -9.41, -9.42, -9.47, -9.46, -9.47, -9.50, -9.50, -9.50, -9.53,
-        -9.50, -9.47, -9.47, -9.50, -9.50, -9.53, -9.55, -9.56, -9.56, -9.56,
-        -9.56, -9.53, -9.54, -9.54, -9.54, -9.56, -9.56, -9.58, -9.59, -9.62,
-        -9.64, -9.65, -9.72, -9.73, -9.76, -9.77, -9.82, -9.81, -9.79, -9.83,
-        -9.80, -9.82, -9.82, -9.82, -9.82, -9.82, -9.86, -9.84, -9.88, -9.91,
-        -9.91, -9.91, -9.94, -9.94, -9.91, -9.94, -9.91, -9.89, -9.91, -9.91,
-        -9.93, -9.96, -9.99, -10.05, -10.03, -10.03, -10.06, -10.03, -10.06, -10.06,
-        -10.04, -10.04, -10.06, -10.06, -10.09, -10.12, -10.12, -10.15, -10.15, -10.16,
-        -10.16, -10.18, -10.18, -10.15, -10.16, -10.16, -10.18, -10.24, -10.21, -10.24,
-        -10.27, -10.27, -10.30, -10.35, -10.38, -10.39, -10.42, -10.39, -10.39, -10.42,
-        -10.39, -10.39, -10.39, -10.39, -10.42, -10.42, -10.43, -10.48, -10.52, -10.48,
-        -10.53, -10.55, -10.52, -10.54, -10.57, -10.52, -10.56, -10.56, -10.54, -10.59,
-        -10.59, -10.62, -10.63, -10.63, -10.66, -10.66, -10.66, -10.66, -10.68, -10.67,
-        -10.67, -10.68, -10.69, -10.68, -10.71, -10.73, -10.72, -10.77, -10.77, -10.75,
-        -10.75, -10.74, -10.77, -10.79, -10.77, -10.80, -10.85, -10.86, -10.86, -10.90,
-        -10.92, -10.91, -10.89, -10.90, -10.92, -10.89, -10.92, -10.89, -10.89, -10.92,
-        -10.91, -10.92, -10.92, -10.92, -10.95, -11.01, -11.04, -11.07, -11.13, -11.16,
-        -11.14, -11.16, -11.17, -11.18, -11.16, -11.16, -11.16, -11.13, -11.14, -11.16,
-        -11.19, -11.22, -11.25, -11.28, -11.23, -11.28, -11.28, -11.25, -11.28, -11.27,
-        -11.27, -11.25, -11.28, -11.26, -11.25, -11.28, -11.25, -11.26, -11.29, -11.32,
-        -11.35, -11.40, -11.38, -11.37, -11.40, -11.37, -11.37, -11.43, -11.45, -11.49,
-        -11.52, -11.52, -11.54, -11.54, -11.52, -11.52, -11.52, -11.52, -11.52, -11.52,
-        -11.52, -11.52, -11.52, -11.52, -11.54, -11.53, -11.52, -11.54, -11.52, -11.55,
-        -11.58, -11.61, -11.63, -11.64, -11.69, -11.69, -11.70, -11.75, -11.74, -11.76,
-        -11.75, -11.75, -11.77, -11.81, -11.81, -11.86, -11.87, -11.87, -11.87, -11.87,
-        -11.87, -11.87, -11.82, -11.81, -11.78, -11.76, -11.79, -11.81, -11.84, -11.87,
-        -11.89, -11.87, -11.87, -11.90, -11.87, -11.90, -11.93, -11.96, -11.99, -12.00,
-        -12.01, -11.99, -12.02, -11.99, -11.99, -12.03, -12.07, -12.10, -12.11, -12.07,
-        -12.05, -12.05, -12.01, -11.99, -12.02, -12.05, -12.08, -12.11, -12.11, -12.11,
-        -12.11, -12.11, -12.11, -12.14, -12.12, -12.14, -12.16, -12.16, -12.17, -12.22,
-        -12.23, -12.23, -12.28, -12.26, -12.23, -12.26, -12.28, -12.26, -12.26, -12.26,
-        -12.26, -12.26, -12.31, -12.32, -12.29, -12.34, -12.35, -12.35, -12.29, -12.28,
-        -12.26, -12.28, -12.29, -12.29, -12.34, -12.35, -12.35, -12.35, -12.35, -12.35,
-        -12.37, -12.38, -12.35, -12.38, -12.38, -12.41, -12.44, -12.47, -12.50, -12.53,
-        -12.55, -12.54, -12.58, -12.58, -12.58, -12.58, -12.58, -12.55, -12.55, -12.55,
-        -12.53, -12.53, -12.52, -12.51, -12.53, -12.56, -12.58, -12.58, -12.58, -12.58,
-        -12.58, -12.58, -12.61, -12.58, -12.61, -12.58, -12.58, -12.58, -12.58, -12.61,
-        -12.61, -12.64, -12.67, -12.67, -12.70, -12.70, -12.70, -12.70, -12.70, -12.70,
-        -12.70, -12.72, -12.73, -12.76, -12.79, -12.79, -12.75, -12.73, -12.76, -12.75,
-        -12.70, -12.70, -12.70, -12.70, -12.70, -12.70, -12.70, -12.70, -12.70, -12.70,
-        -12.76, -12.79, -12.82, -12.85, -12.88, -12.88, -12.91, -12.97, -13.00, -13.00,
-        -13.03, -13.03, -13.03, -13.03, -13.03, -13.03, -13.06, -13.06, -13.06, -13.06,
-        -13.06, -13.00, -13.00, -13.00, -13.00, -13.00, -12.97, -12.97, -12.94, -12.94,
-        -12.97, -12.97, -12.97, -12.94, -13.00, -12.97, -12.97, -13.00, -13.00, -13.00,
-        -13.00, -13.03, -13.03, -13.03, -13.00, -12.97, -12.94, -12.94, -12.94, -12.94,
-        -12.95, -12.97, -12.96, -12.95, -13.00, -12.94, -12.97, -12.97, -12.97, -13.01,
-        -13.00, -13.06, -13.07, -13.12, -13.14, -13.12, -13.12, -13.12, -13.12, -13.12,
-        -13.09, -13.07, -13.09, -13.09, -13.09, -13.12, -13.09, -13.08, -13.12, -13.09,
-        -13.09, -13.13, -13.15, -13.18, -13.20, -13.24, -13.21, -13.18, -13.18, -13.15,
-        -13.12, -13.13, -13.12, -13.11, -13.12, -13.15, -13.13, -13.15, -13.21, -13.20,
-        -13.18, -13.15, -13.13, -13.09, -13.09, -13.12, -13.12, -13.17, -13.18, -13.21,
-        -13.21, -13.21, -13.21, -13.21, -13.24, -13.21, -13.24, -13.25, -13.24, -13.26,
-        -13.24, -13.26, -13.24, -13.24, -13.24, -13.24, -13.24, -13.24, -13.26, -13.29,
-        -13.33, -13.34, -13.30, -13.30, -13.29, -13.24, -13.24, -13.24, -13.24, -13.24,
-        -13.24, -13.30, -13.30, -13.33, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36,
-        -13.36, -13.36, -13.34, -13.35, -13.35, -13.33, -13.33, -13.33, -13.33, -13.30,
-        -13.30, -13.27, -13.26, -13.24, -13.27, -13.27, -13.32, -13.33, -13.33, -13.36,
-        -13.36, -13.36, -13.33, -13.32, -13.32, -13.27, -13.24, -13.26, -13.26, -13.29,
-        -13.32, -13.30, -13.35, -13.36, -13.36, -13.35, -13.36, -13.36, -13.36, -13.36,
-        -13.35, -13.36, -13.36, -13.36, -13.32, -13.35, -13.36, -13.38, -13.41, -13.41,
-        -13.42, -13.44, -13.42, -13.39, -13.37, -13.39, -13.36, -13.36, -13.37, -13.36,
-        -13.36, -13.37, -13.36, -13.36, -13.38, -13.34, -13.37, -13.35, -13.36, -13.33,
-        -13.33, -13.35, -13.30, -13.35, -13.33, -13.33, -13.36, -13.36, -13.38, -13.36,
-        -13.36, -13.37, -13.36, -13.38, -13.37, -13.38, -13.37, -13.36, -13.38, -13.36,
-        -13.37, -13.36, -13.36, -13.36, -13.34, -13.34, -13.33, -13.35, -13.33, -13.32,
-        -13.36, -13.33, -13.33, -13.33, -13.33, -13.33, -13.30, -13.30, -13.30, -13.30,
-        -13.30, -13.33, -13.35, -13.33, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36,
-        -13.36, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36,
-        -13.36, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36, -13.36,
-        -13.36, -13.36, -13.36, -13.41, -13.42, -13.45, -13.47, -13.45, -13.42, -13.42,
-        -13.41, -13.39, -13.39, -13.39, -13.39, -13.36, -13.40, -13.42, -13.42, -13.47,
-        -13.47, -13.47, -13.47, -13.47, -13.47, -13.48, -13.48, -13.47, -13.46, -13.47,
-        -13.45, -13.41, -13.39, -13.34, -13.33, -13.36, -13.39, -13.42, -13.45, -13.47,
-        -13.46, -13.47, -13.45, -13.48, -13.50, -13.50, -13.47, -13.48, -13.45, -13.43,
-        -13.44, -13.39, -13.37, -13.39, -13.39, -13.45, -13.45, -13.50, -13.47, -13.47,
-        -13.45, -13.45, -13.41, -13.41, -13.38, -13.36, -13.39, -13.33, -13.39, -13.44,
-        -13.45, -13.44, -13.44, -13.44, -13.41, -13.38, -13.36, -13.34, -13.35, -13.36,
-        -13.35, -13.36, -13.39, -13.41, -13.45, -13.44, -13.46, -13.48, -13.47, -13.47,
-        -13.48, -13.48, -13.48, -13.48, -13.47, -13.42, -13.39, -13.39, -13.37, -13.36,
-        -13.36, -13.35, -13.36, -13.35, -13.31, -13.36, -13.36, -13.36, -13.41, -13.39,
-        -13.42, -13.41, -13.42, -13.42, -13.42, -13.42, -13.36, -13.33, -13.36, -13.36,
-        -13.36, -13.36, -13.36, -13.36, -13.36, -13.35, -13.33, -13.35, -13.30, -13.35,
-        -13.36, -13.34, -13.34, -13.35, -13.35, -13.36, -13.36, -13.36, -13.36, -13.33,
-        -13.31, -13.27, -13.25, -13.26, -13.27, -13.24, -13.24, -13.24, -13.24, -13.23,
-        -13.21, -13.19, -13.18, -13.18, -13.15, -13.15, -13.15, -13.14, -13.15, -13.17,
-        -13.18, -13.18, -13.17, -13.13, -13.09, -13.09, -13.07, -13.06, -13.03, -13.03,
-        -12.99, -12.97, -13.01, -13.00, -13.00, -13.00, -13.00, -13.06, -13.03, -13.06,
-        -13.08, -13.05, -13.06, -13.06, -13.02, -13.00, -12.97, -12.94, -12.91, -12.91,
-        -12.90, -12.85, -12.88, -12.88, -12.85, -12.83, -12.86, -12.88, -12.88, -12.88,
-        -12.88, -12.88, -12.82, -12.75, -12.76, -12.71, -12.67, -12.67, -12.63, -12.62,
-        -12.61, -12.58, -12.59, -12.60, -12.59, -12.58, -12.61, -12.61, -12.61, -12.61,
-        -12.56, -12.56, -12.55, -12.50, -12.52, -12.52, -12.52, -12.52, -12.49, -12.46,
-        -12.43, -12.38, -12.35, -12.35, -12.32, -12.29, -12.29, -12.29, -12.29, -12.29,
-        -12.25, -12.23, -12.22, -12.17, -12.17, -12.14, -12.08, -12.05, -11.99, -11.93,
-        -11.89, -11.90, -11.87, -11.88, -11.90, -11.84, -11.84, -11.81, -11.78, -11.81,
-        -11.76, -11.75, -11.76, -11.78, -11.72, -11.69, -11.66, -11.66, -11.62, -11.60,
-        -11.60, -11.55, -11.55, -11.52, -11.51, -11.46, -11.42, -11.40, -11.37, -11.31,
-        -11.31, -11.29, -11.25, -11.21, -11.16, -11.14, -11.11, -11.05, -11.05, -11.03,
-        -11.00, -11.00, -10.97, -10.91, -10.90, -10.87, -10.83, -10.83
+        -614, -613, -614, -611,
+        -611, -612, -612, -612, -611, -614, -611, -614, -616, -615,
+        -618, -624, -623, -623, -625, -623, -623, -626, -626, -623,
+        -626, -626, -626, -624, -624, -629, -629, -631, -633, -636,
+        -634, -636, -640, -635, -635, -638, -635, -635, -635, -638,
+        -641, -641, -644, -642, -644, -647, -650, -651, -652, -652,
+        -652, -649, -647, -647, -649, -648, -649, -653, -650, -650,
+        -655, -657, -658, -659, -662, -663, -664, -664, -664, -662,
+        -660, -661, -663, -664, -662, -665, -662, -662, -665, -668,
+        -668, -672, -674, -674, -672, -671, -675, -674, -673, -675,
+        -674, -671, -672, -675, -674, -674, -679, -680, -680, -682,
+        -686, -688, -689, -689, -689, -689, -691, -692, -694, -697,
+        -699, -700, -700, -700, -699, -697, -699, -703, -703, -703,
+        -704, -708, -709, -706, -708, -712, -712, -709, -712, -712,
+        -712, -712, -710, -712, -712, -712, -710, -715, -715, -718,
+        -721, -721, -723, -720, -722, -724, -724, -720, -724, -724,
+        -724, -723, -724, -724, -724, -724, -729, -732, -733, -733,
+        -733, -733, -732, -735, -736, -732, -736, -736, -736, -737,
+        -739, -742, -746, -748, -751, -748, -748, -748, -748, -747,
+        -748, -748, -746, -747, -748, -748, -746, -754, -756, -760,
+        -765, -766, -770, -772, -772, -772, -772, -769, -771, -771,
+        -771, -773, -771, -773, -773, -772, -772, -777, -773, -772,
+        -775, -781, -781, -785, -786, -786, -781, -784, -783, -784,
+        -784, -782, -786, -787, -787, -792, -793, -793, -795, -796,
+        -796, -796, -797, -798, -796, -795, -795, -795, -796, -799,
+        -802, -806, -808, -813, -807, -807, -811, -813, -811, -814,
+        -817, -816, -816, -816, -810, -807, -808, -806, -807, -807,
+        -812, -813, -812, -816, -819, -819, -819, -819, -820, -825,
+        -825, -822, -828, -831, -830, -831, -831, -833, -834, -839,
+        -840, -843, -843, -843, -846, -843, -846, -849, -846, -849,
+        -846, -847, -849, -852, -853, -853, -855, -857, -858, -858,
+        -858, -858, -858, -855, -857, -858, -855, -856, -855, -856,
+        -860, -861, -863, -867, -867, -870, -870, -870, -870, -870,
+        -873, -872, -868, -873, -873, -872, -874, -876, -880, -882,
+        -884, -886, -887, -890, -890, -888, -887, -885, -885, -887,
+        -889, -888, -893, -893, -893, -894, -894, -899, -894, -899,
+        -902, -904, -905, -907, -906, -905, -907, -908, -903, -908,
+        -908, -905, -911, -911, -914, -917, -917, -919, -917, -917,
+        -920, -919, -915, -920, -920, -922, -923, -927, -931, -932,
+        -935, -932, -931, -932, -932, -933, -935, -938, -939, -941,
+        -944, -941, -942, -947, -946, -947, -950, -950, -950, -953,
+        -950, -947, -947, -950, -950, -953, -955, -956, -956, -956,
+        -956, -953, -954, -954, -954, -956, -956, -958, -959, -962,
+        -964, -965, -972, -973, -976, -977, -982, -981, -979, -983,
+        -980, -982, -982, -982, -982, -982, -986, -984, -988, -991,
+        -991, -991, -994, -994, -991, -994, -991, -989, -991, -991,
+        -993, -996, -999, -1005, -1003, -1003, -1006, -1003, -1006, -1006,
+        -1004, -1004, -1006, -1006, -1009, -1012, -1012, -1015, -1015, -1016,
+        -1016, -1018, -1018, -1015, -1016, -1016, -1018, -1024, -1021, -1024,
+        -1027, -1027, -1030, -1035, -1038, -1039, -1042, -1039, -1039, -1042,
+        -1039, -1039, -1039, -1039, -1042, -1042, -1043, -1048, -1052, -1048,
+        -1053, -1055, -1052, -1054, -1057, -1052, -1056, -1056, -1054, -1059,
+        -1059, -1062, -1063, -1063, -1066, -1066, -1066, -1066, -1068, -1067,
+        -1067, -1068, -1069, -1068, -1071, -1073, -1072, -1077, -1077, -1075,
+        -1075, -1074, -1077, -1079, -1077, -1080, -1085, -1086, -1086, -1090,
+        -1092, -1091, -1089, -1090, -1092, -1089, -1092, -1089, -1089, -1092,
+        -1091, -1092, -1092, -1092, -1095, -1101, -1104, -1107, -1113, -1116,
+        -1114, -1116, -1117, -1118, -1116, -1116, -1116, -1113, -1114, -1116,
+        -1119, -1122, -1125, -1128, -1123, -1128, -1128, -1125, -1128, -1127,
+        -1127, -1125, -1128, -1126, -1125, -1128, -1125, -1126, -1129, -1132,
+        -1135, -1140, -1138, -1137, -1140, -1137, -1137, -1143, -1145, -1149,
+        -1152, -1152, -1154, -1154, -1152, -1152, -1152, -1152, -1152, -1152,
+        -1152, -1152, -1152, -1152, -1154, -1153, -1152, -1154, -1152, -1155,
+        -1158, -1161, -1163, -1164, -1169, -1169, -1170, -1175, -1174, -1176,
+        -1175, -1175, -1177, -1181, -1181, -1186, -1187, -1187, -1187, -1187,
+        -1187, -1187, -1182, -1181, -1178, -1176, -1179, -1181, -1184, -1187,
+        -1189, -1187, -1187, -1190, -1187, -1190, -1193, -1196, -1199, -1200,
+        -1201, -1199, -1202, -1199, -1199, -1203, -1207, -1210, -1211, -1207,
+        -1205, -1205, -1201, -1199, -1202, -1205, -1208, -1211, -1211, -1211,
+        -1211, -1211, -1211, -1214, -1212, -1214, -1216, -1216, -1217, -1222,
+        -1223, -1223, -1228, -1226, -1223, -1226, -1228, -1226, -1226, -1226,
+        -1226, -1226, -1231, -1232, -1229, -1234, -1235, -1235, -1229, -1228,
+        -1226, -1228, -1229, -1229, -1234, -1235, -1235, -1235, -1235, -1235,
+        -1237, -1238, -1235, -1238, -1238, -1241, -1244, -1247, -1250, -1253,
+        -1255, -1254, -1258, -1258, -1258, -1258, -1258, -1255, -1255, -1255,
+        -1253, -1253, -1252, -1251, -1253, -1256, -1258, -1258, -1258, -1258,
+        -1258, -1258, -1261, -1258, -1261, -1258, -1258, -1258, -1258, -1261,
+        -1261, -1264, -1267, -1267, -1270, -1270, -1270, -1270, -1270, -1270,
+        -1270, -1272, -1273, -1276, -1279, -1279, -1275, -1273, -1276, -1275,
+        -1270, -1270, -1270, -1270, -1270, -1270, -1270, -1270, -1270, -1270,
+        -1276, -1279, -1282, -1285, -1288, -1288, -1291, -1297, -1300, -1300,
+        -1303, -1303, -1303, -1303, -1303, -1303, -1306, -1306, -1306, -1306,
+        -1306, -1300, -1300, -1300, -1300, -1300, -1297, -1297, -1294, -1294,
+        -1297, -1297, -1297, -1294, -1300, -1297, -1297, -1300, -1300, -1300,
+        -1300, -1303, -1303, -1303, -1300, -1297, -1294, -1294, -1294, -1294,
+        -1295, -1297, -1296, -1295, -1300, -1294, -1297, -1297, -1297, -1301,
+        -1300, -1306, -1307, -1312, -1314, -1312, -1312, -1312, -1312, -1312,
+        -1309, -1307, -1309, -1309, -1309, -1312, -1309, -1308, -1312, -1309,
+        -1309, -1313, -1315, -1318, -1320, -1324, -1321, -1318, -1318, -1315,
+        -1312, -1313, -1312, -1311, -1312, -1315, -1313, -1315, -1321, -1320,
+        -1318, -1315, -1313, -1309, -1309, -1312, -1312, -1317, -1318, -1321,
+        -1321, -1321, -1321, -1321, -1324, -1321, -1324, -1325, -1324, -1326,
+        -1324, -1326, -1324, -1324, -1324, -1324, -1324, -1324, -1326, -1329,
+        -1333, -1334, -1330, -1330, -1329, -1324, -1324, -1324, -1324, -1324,
+        -1324, -1330, -1330, -1333, -1336, -1336, -1336, -1336, -1336, -1336,
+        -1336, -1336, -1334, -1335, -1335, -1333, -1333, -1333, -1333, -1330,
+        -1330, -1327, -1326, -1324, -1327, -1327, -1332, -1333, -1333, -1336,
+        -1336, -1336, -1333, -1332, -1332, -1327, -1324, -1326, -1326, -1329,
+        -1332, -1330, -1335, -1336, -1336, -1335, -1336, -1336, -1336, -1336,
+        -1335, -1336, -1336, -1336, -1332, -1335, -1336, -1338, -1341, -1341,
+        -1342, -1344, -1342, -1339, -1337, -1339, -1336, -1336, -1337, -1336,
+        -1336, -1337, -1336, -1336, -1338, -1334, -1337, -1335, -1336, -1333,
+        -1333, -1335, -1330, -1335, -1333, -1333, -1336, -1336, -1338, -1336,
+        -1336, -1337, -1336, -1338, -1337, -1338, -1337, -1336, -1338, -1336,
+        -1337, -1336, -1336, -1336, -1334, -1334, -1333, -1335, -1333, -1332,
+        -1336, -1333, -1333, -1333, -1333, -1333, -1330, -1330, -1330, -1330,
+        -1330, -1333, -1335, -1333, -1336, -1336, -1336, -1336, -1336, -1336,
+        -1336, -1336, -1336, -1336, -1336, -1336, -1336, -1336, -1336, -1336,
+        -1336, -1336, -1336, -1336, -1336, -1336, -1336, -1336, -1336, -1336,
+        -1336, -1336, -1336, -1341, -1342, -1345, -1347, -1345, -1342, -1342,
+        -1341, -1339, -1339, -1339, -1339, -1336, -1340, -1342, -1342, -1347,
+        -1347, -1347, -1347, -1347, -1347, -1348, -1348, -1347, -1346, -1347,
+        -1345, -1341, -1339, -1334, -1333, -1336, -1339, -1342, -1345, -1347,
+        -1346, -1347, -1345, -1348, -1350, -1350, -1347, -1348, -1345, -1343,
+        -1344, -1339, -1337, -1339, -1339, -1345, -1345, -1350, -1347, -1347,
+        -1345, -1345, -1341, -1341, -1338, -1336, -1339, -1333, -1339, -1344,
+        -1345, -1344, -1344, -1344, -1341, -1338, -1336, -1334, -1335, -1336,
+        -1335, -1336, -1339, -1341, -1345, -1344, -1346, -1348, -1347, -1347,
+        -1348, -1348, -1348, -1348, -1347, -1342, -1339, -1339, -1337, -1336,
+        -1336, -1335, -1336, -1335, -1331, -1336, -1336, -1336, -1341, -1339,
+        -1342, -1341, -1342, -1342, -1342, -1342, -1336, -1333, -1336, -1336,
+        -1336, -1336, -1336, -1336, -1336, -1335, -1333, -1335, -1330, -1335,
+        -1336, -1334, -1334, -1335, -1335, -1336, -1336, -1336, -1336, -1333,
+        -1331, -1327, -1325, -1326, -1327, -1324, -1324, -1324, -1324, -1323,
+        -1321, -1319, -1318, -1318, -1315, -1315, -1315, -1314, -1315, -1317,
+        -1318, -1318, -1317, -1313, -1309, -1309, -1307, -1306, -1303, -1303,
+        -1299, -1297, -1301, -1300, -1300, -1300, -1300, -1306, -1303, -1306,
+        -1308, -1305, -1306, -1306, -1302, -1300, -1297, -1294, -1291, -1291,
+        -1290, -1285, -1288, -1288, -1285, -1283, -1286, -1288, -1288, -1288,
+        -1288, -1288, -1282, -1275, -1276, -1271, -1267, -1267, -1263, -1262,
+        -1261, -1258, -1259, -1260, -1259, -1258, -1261, -1261, -1261, -1261,
+        -1256, -1256, -1255, -1250, -1252, -1252, -1252, -1252, -1249, -1246,
+        -1243, -1238, -1235, -1235, -1232, -1229, -1229, -1229, -1229, -1229,
+        -1225, -1223, -1222, -1217, -1217, -1214, -1208, -1205, -1199, -1193,
+        -1189, -1190, -1187, -1188, -1190, -1184, -1184, -1181, -1178, -1181,
+        -1176, -1175, -1176, -1178, -1172, -1169, -1166, -1166, -1162, -1160,
+        -1160, -1155, -1155, -1152, -1151, -1146, -1142, -1140, -1137, -1131,
+        -1131, -1129, -1125, -1121, -1116, -1114, -1111, -1105, -1105, -1103,
+        -1100, -1100, -1097, -1091, -1090, -1087, -1083, -1083
     };
 
-    static const float iso226_2003_curve_80_phons[1382] =
+    static const int16_t iso226_2003_curve_80_phons[1382] =
     {
-        -1.42, -1.42, -1.42, -1.41,
-        -1.41, -1.41, -1.41, -1.41, -1.41, -1.42, -1.41, -1.42, -1.42, -1.42,
-        -1.43, -1.44, -1.44, -1.44, -1.44, -1.44, -1.44, -1.45, -1.44, -1.44,
-        -1.45, -1.45, -1.44, -1.44, -1.44, -1.45, -1.45, -1.46, -1.46, -1.47,
-        -1.46, -1.47, -1.48, -1.47, -1.47, -1.47, -1.47, -1.47, -1.47, -1.47,
-        -1.48, -1.48, -1.49, -1.48, -1.49, -1.49, -1.50, -1.50, -1.50, -1.51,
-        -1.50, -1.50, -1.49, -1.49, -1.50, -1.50, -1.50, -1.51, -1.50, -1.50,
-        -1.51, -1.52, -1.52, -1.52, -1.53, -1.53, -1.53, -1.53, -1.53, -1.53,
-        -1.52, -1.53, -1.53, -1.53, -1.53, -1.53, -1.53, -1.53, -1.54, -1.54,
-        -1.54, -1.55, -1.55, -1.55, -1.55, -1.55, -1.56, -1.56, -1.55, -1.56,
-        -1.55, -1.55, -1.55, -1.56, -1.55, -1.56, -1.57, -1.57, -1.57, -1.57,
-        -1.58, -1.59, -1.59, -1.59, -1.59, -1.59, -1.60, -1.60, -1.60, -1.61,
-        -1.61, -1.62, -1.62, -1.62, -1.61, -1.61, -1.61, -1.62, -1.62, -1.62,
-        -1.63, -1.63, -1.64, -1.63, -1.63, -1.64, -1.64, -1.64, -1.64, -1.64,
-        -1.64, -1.64, -1.64, -1.64, -1.64, -1.64, -1.64, -1.65, -1.65, -1.66,
-        -1.66, -1.66, -1.67, -1.66, -1.67, -1.67, -1.67, -1.66, -1.67, -1.67,
-        -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, -1.68, -1.69, -1.69, -1.69,
-        -1.69, -1.69, -1.69, -1.70, -1.70, -1.69, -1.70, -1.70, -1.70, -1.70,
-        -1.71, -1.71, -1.72, -1.73, -1.73, -1.73, -1.73, -1.73, -1.73, -1.72,
-        -1.73, -1.73, -1.72, -1.72, -1.73, -1.73, -1.72, -1.74, -1.74, -1.75,
-        -1.76, -1.77, -1.78, -1.78, -1.78, -1.78, -1.78, -1.78, -1.78, -1.78,
-        -1.78, -1.78, -1.78, -1.78, -1.78, -1.78, -1.78, -1.79, -1.78, -1.78,
-        -1.79, -1.80, -1.80, -1.81, -1.81, -1.81, -1.80, -1.81, -1.81, -1.81,
-        -1.81, -1.80, -1.81, -1.82, -1.82, -1.83, -1.83, -1.83, -1.84, -1.84,
-        -1.84, -1.84, -1.84, -1.84, -1.84, -1.84, -1.84, -1.84, -1.84, -1.84,
-        -1.85, -1.86, -1.86, -1.88, -1.86, -1.86, -1.87, -1.88, -1.87, -1.88,
-        -1.89, -1.88, -1.88, -1.88, -1.87, -1.86, -1.86, -1.86, -1.86, -1.86,
-        -1.87, -1.88, -1.87, -1.88, -1.89, -1.89, -1.89, -1.89, -1.89, -1.90,
-        -1.90, -1.90, -1.91, -1.92, -1.92, -1.92, -1.92, -1.92, -1.92, -1.94,
-        -1.94, -1.95, -1.95, -1.95, -1.95, -1.95, -1.95, -1.96, -1.95, -1.96,
-        -1.95, -1.95, -1.96, -1.97, -1.97, -1.97, -1.97, -1.98, -1.98, -1.98,
-        -1.98, -1.98, -1.98, -1.97, -1.98, -1.98, -1.97, -1.98, -1.97, -1.97,
-        -1.99, -1.99, -1.99, -2.00, -2.00, -2.01, -2.01, -2.01, -2.01, -2.01,
-        -2.01, -2.01, -2.00, -2.01, -2.01, -2.01, -2.02, -2.02, -2.03, -2.03,
-        -2.04, -2.05, -2.05, -2.05, -2.05, -2.05, -2.05, -2.04, -2.04, -2.05,
-        -2.05, -2.05, -2.06, -2.06, -2.06, -2.06, -2.06, -2.07, -2.06, -2.08,
-        -2.08, -2.09, -2.09, -2.09, -2.09, -2.09, -2.09, -2.10, -2.08, -2.10,
-        -2.09, -2.09, -2.10, -2.10, -2.11, -2.12, -2.12, -2.12, -2.12, -2.12,
-        -2.12, -2.12, -2.11, -2.12, -2.12, -2.13, -2.13, -2.14, -2.15, -2.15,
-        -2.16, -2.15, -2.15, -2.15, -2.15, -2.15, -2.16, -2.16, -2.17, -2.17,
-        -2.18, -2.17, -2.17, -2.18, -2.18, -2.19, -2.19, -2.19, -2.19, -2.20,
-        -2.19, -2.18, -2.19, -2.19, -2.19, -2.20, -2.20, -2.21, -2.21, -2.21,
-        -2.21, -2.20, -2.20, -2.20, -2.20, -2.21, -2.21, -2.21, -2.21, -2.22,
-        -2.23, -2.23, -2.24, -2.24, -2.25, -2.25, -2.27, -2.26, -2.26, -2.27,
-        -2.26, -2.27, -2.27, -2.27, -2.27, -2.27, -2.28, -2.27, -2.28, -2.29,
-        -2.29, -2.29, -2.29, -2.29, -2.29, -2.29, -2.29, -2.28, -2.29, -2.29,
-        -2.29, -2.30, -2.31, -2.32, -2.32, -2.32, -2.32, -2.32, -2.32, -2.32,
-        -2.32, -2.32, -2.32, -2.32, -2.33, -2.33, -2.34, -2.34, -2.34, -2.34,
-        -2.35, -2.35, -2.35, -2.34, -2.34, -2.34, -2.35, -2.36, -2.36, -2.36,
-        -2.37, -2.37, -2.38, -2.39, -2.40, -2.40, -2.41, -2.40, -2.40, -2.40,
-        -2.40, -2.40, -2.40, -2.40, -2.40, -2.40, -2.41, -2.42, -2.43, -2.42,
-        -2.43, -2.44, -2.43, -2.43, -2.44, -2.43, -2.44, -2.44, -2.43, -2.44,
-        -2.44, -2.45, -2.45, -2.45, -2.46, -2.46, -2.46, -2.46, -2.47, -2.46,
-        -2.46, -2.47, -2.47, -2.47, -2.47, -2.48, -2.47, -2.49, -2.48, -2.48,
-        -2.48, -2.48, -2.49, -2.49, -2.49, -2.49, -2.50, -2.51, -2.51, -2.52,
-        -2.52, -2.52, -2.51, -2.51, -2.52, -2.51, -2.52, -2.51, -2.51, -2.52,
-        -2.52, -2.52, -2.52, -2.52, -2.53, -2.54, -2.55, -2.55, -2.57, -2.58,
-        -2.57, -2.58, -2.58, -2.58, -2.58, -2.58, -2.58, -2.57, -2.57, -2.58,
-        -2.58, -2.59, -2.60, -2.60, -2.59, -2.60, -2.60, -2.60, -2.60, -2.60,
-        -2.60, -2.60, -2.60, -2.60, -2.60, -2.60, -2.60, -2.60, -2.61, -2.61,
-        -2.62, -2.63, -2.63, -2.62, -2.63, -2.62, -2.62, -2.64, -2.64, -2.65,
-        -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66,
-        -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66, -2.66,
-        -2.67, -2.68, -2.68, -2.69, -2.70, -2.70, -2.70, -2.71, -2.71, -2.71,
-        -2.71, -2.71, -2.72, -2.73, -2.73, -2.74, -2.74, -2.74, -2.74, -2.74,
-        -2.74, -2.74, -2.73, -2.73, -2.72, -2.71, -2.72, -2.73, -2.73, -2.74,
-        -2.74, -2.74, -2.74, -2.75, -2.74, -2.75, -2.75, -2.76, -2.77, -2.77,
-        -2.77, -2.77, -2.77, -2.77, -2.77, -2.78, -2.79, -2.79, -2.79, -2.79,
-        -2.78, -2.78, -2.77, -2.77, -2.77, -2.78, -2.79, -2.79, -2.79, -2.79,
-        -2.79, -2.79, -2.79, -2.80, -2.80, -2.80, -2.81, -2.81, -2.81, -2.82,
-        -2.82, -2.82, -2.83, -2.83, -2.82, -2.83, -2.83, -2.83, -2.83, -2.83,
-        -2.83, -2.83, -2.84, -2.84, -2.84, -2.85, -2.85, -2.85, -2.84, -2.83,
-        -2.83, -2.83, -2.84, -2.84, -2.85, -2.85, -2.85, -2.85, -2.85, -2.85,
-        -2.85, -2.86, -2.85, -2.86, -2.86, -2.86, -2.87, -2.88, -2.88, -2.89,
-        -2.90, -2.89, -2.90, -2.90, -2.90, -2.90, -2.90, -2.90, -2.90, -2.90,
-        -2.89, -2.89, -2.89, -2.89, -2.89, -2.90, -2.90, -2.90, -2.90, -2.90,
-        -2.90, -2.90, -2.91, -2.90, -2.91, -2.90, -2.90, -2.90, -2.90, -2.91,
-        -2.91, -2.92, -2.92, -2.92, -2.93, -2.93, -2.93, -2.93, -2.93, -2.93,
-        -2.93, -2.94, -2.94, -2.94, -2.95, -2.95, -2.94, -2.94, -2.95, -2.94,
-        -2.93, -2.93, -2.93, -2.93, -2.93, -2.93, -2.93, -2.93, -2.93, -2.93,
-        -2.95, -2.95, -2.96, -2.97, -2.97, -2.97, -2.98, -2.99, -3.00, -3.00,
-        -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.01,
-        -3.01, -3.00, -3.00, -3.00, -3.00, -3.00, -2.99, -2.99, -2.99, -2.99,
-        -2.99, -2.99, -2.99, -2.99, -3.00, -2.99, -2.99, -3.00, -3.00, -3.00,
-        -3.00, -3.01, -3.01, -3.01, -3.00, -2.99, -2.99, -2.99, -2.99, -2.99,
-        -2.99, -2.99, -2.99, -2.99, -3.00, -2.99, -2.99, -2.99, -2.99, -3.00,
-        -3.00, -3.01, -3.02, -3.03, -3.03, -3.03, -3.03, -3.03, -3.03, -3.03,
-        -3.02, -3.02, -3.02, -3.02, -3.02, -3.03, -3.02, -3.02, -3.03, -3.02,
-        -3.02, -3.03, -3.03, -3.04, -3.05, -3.05, -3.05, -3.04, -3.04, -3.03,
-        -3.03, -3.03, -3.03, -3.03, -3.03, -3.03, -3.03, -3.03, -3.05, -3.05,
-        -3.04, -3.03, -3.03, -3.02, -3.02, -3.03, -3.03, -3.04, -3.04, -3.05,
-        -3.05, -3.05, -3.05, -3.05, -3.05, -3.05, -3.05, -3.06, -3.05, -3.06,
-        -3.06, -3.06, -3.06, -3.06, -3.06, -3.06, -3.06, -3.06, -3.06, -3.07,
-        -3.08, -3.08, -3.07, -3.07, -3.07, -3.06, -3.06, -3.06, -3.06, -3.06,
-        -3.06, -3.07, -3.07, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.07,
-        -3.07, -3.06, -3.06, -3.06, -3.06, -3.06, -3.07, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.08, -3.07, -3.07, -3.06, -3.05, -3.06, -3.06, -3.07,
-        -3.07, -3.07, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.08, -3.08, -3.07, -3.08, -3.08, -3.09, -3.10, -3.10,
-        -3.10, -3.10, -3.10, -3.09, -3.08, -3.09, -3.08, -3.08, -3.09, -3.08,
-        -3.08, -3.08, -3.08, -3.08, -3.09, -3.08, -3.09, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.07, -3.08, -3.08, -3.08, -3.08, -3.08, -3.09, -3.08,
-        -3.08, -3.09, -3.08, -3.09, -3.09, -3.09, -3.09, -3.08, -3.09, -3.08,
-        -3.09, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.07,
-        -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.07, -3.07, -3.07, -3.07,
-        -3.07, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.08, -3.09, -3.10, -3.10, -3.11, -3.10, -3.10, -3.10,
-        -3.10, -3.09, -3.09, -3.09, -3.09, -3.08, -3.09, -3.10, -3.10, -3.11,
-        -3.11, -3.11, -3.11, -3.11, -3.11, -3.11, -3.11, -3.11, -3.11, -3.11,
-        -3.10, -3.10, -3.09, -3.08, -3.08, -3.08, -3.09, -3.10, -3.10, -3.11,
-        -3.11, -3.11, -3.10, -3.11, -3.11, -3.11, -3.11, -3.11, -3.10, -3.10,
-        -3.10, -3.09, -3.09, -3.09, -3.09, -3.10, -3.10, -3.12, -3.11, -3.11,
-        -3.10, -3.10, -3.10, -3.10, -3.09, -3.08, -3.09, -3.08, -3.09, -3.10,
-        -3.10, -3.10, -3.10, -3.10, -3.10, -3.09, -3.08, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.09, -3.10, -3.10, -3.10, -3.11, -3.11, -3.11, -3.11,
-        -3.11, -3.11, -3.11, -3.11, -3.11, -3.10, -3.09, -3.09, -3.09, -3.08,
-        -3.08, -3.08, -3.08, -3.08, -3.07, -3.08, -3.08, -3.08, -3.09, -3.09,
-        -3.10, -3.10, -3.10, -3.10, -3.10, -3.10, -3.08, -3.08, -3.08, -3.08,
-        -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.07, -3.08,
-        -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08, -3.08,
-        -3.07, -3.06, -3.06, -3.06, -3.06, -3.05, -3.05, -3.06, -3.05, -3.05,
-        -3.05, -3.04, -3.04, -3.04, -3.04, -3.03, -3.03, -3.03, -3.03, -3.04,
-        -3.04, -3.04, -3.04, -3.03, -3.02, -3.02, -3.02, -3.01, -3.01, -3.01,
-        -3.00, -2.99, -3.00, -3.00, -3.00, -3.00, -3.00, -3.01, -3.01, -3.01,
-        -3.02, -3.01, -3.01, -3.01, -3.01, -3.00, -2.99, -2.99, -2.98, -2.98,
-        -2.98, -2.97, -2.97, -2.97, -2.97, -2.96, -2.97, -2.97, -2.97, -2.97,
-        -2.97, -2.97, -2.96, -2.94, -2.94, -2.93, -2.92, -2.92, -2.91, -2.91,
-        -2.91, -2.90, -2.91, -2.91, -2.91, -2.90, -2.91, -2.91, -2.91, -2.91,
-        -2.90, -2.90, -2.90, -2.88, -2.89, -2.89, -2.89, -2.89, -2.88, -2.88,
-        -2.87, -2.86, -2.85, -2.85, -2.84, -2.84, -2.84, -2.84, -2.84, -2.84,
-        -2.83, -2.82, -2.82, -2.81, -2.81, -2.80, -2.79, -2.78, -2.77, -2.75,
-        -2.74, -2.75, -2.74, -2.74, -2.75, -2.73, -2.73, -2.73, -2.72, -2.73,
-        -2.71, -2.71, -2.71, -2.72, -2.71, -2.70, -2.69, -2.69, -2.68, -2.68,
-        -2.68, -2.66, -2.66, -2.66, -2.66, -2.64, -2.63, -2.63, -2.62, -2.61,
-        -2.61, -2.61, -2.60, -2.59, -2.58, -2.57, -2.56, -2.55, -2.55, -2.55,
-        -2.54, -2.54, -2.53, -2.52, -2.51, -2.51, -2.50, -2.50
+        -142, -142, -142, -141,
+        -141, -141, -141, -141, -141, -142, -141, -142, -142, -142,
+        -143, -144, -144, -144, -144, -144, -144, -145, -144, -144,
+        -145, -145, -144, -144, -144, -145, -145, -146, -146, -147,
+        -146, -147, -148, -147, -147, -147, -147, -147, -147, -147,
+        -148, -148, -149, -148, -149, -149, -150, -150, -150, -151,
+        -150, -150, -149, -149, -150, -150, -150, -151, -150, -150,
+        -151, -152, -152, -152, -153, -153, -153, -153, -153, -153,
+        -152, -153, -153, -153, -153, -153, -153, -153, -154, -154,
+        -154, -155, -155, -155, -155, -155, -156, -156, -155, -156,
+        -155, -155, -155, -156, -155, -156, -157, -157, -157, -157,
+        -158, -159, -159, -159, -159, -159, -160, -160, -160, -161,
+        -161, -162, -162, -162, -161, -161, -161, -162, -162, -162,
+        -163, -163, -164, -163, -163, -164, -164, -164, -164, -164,
+        -164, -164, -164, -164, -164, -164, -164, -165, -165, -166,
+        -166, -166, -167, -166, -167, -167, -167, -166, -167, -167,
+        -167, -167, -167, -167, -167, -167, -168, -169, -169, -169,
+        -169, -169, -169, -170, -170, -169, -170, -170, -170, -170,
+        -171, -171, -172, -173, -173, -173, -173, -173, -173, -172,
+        -173, -173, -172, -172, -173, -173, -172, -174, -174, -175,
+        -176, -177, -178, -178, -178, -178, -178, -178, -178, -178,
+        -178, -178, -178, -178, -178, -178, -178, -179, -178, -178,
+        -179, -180, -180, -181, -181, -181, -180, -181, -181, -181,
+        -181, -180, -181, -182, -182, -183, -183, -183, -184, -184,
+        -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+        -185, -186, -186, -188, -186, -186, -187, -188, -187, -188,
+        -189, -188, -188, -188, -187, -186, -186, -186, -186, -186,
+        -187, -188, -187, -188, -189, -189, -189, -189, -189, -190,
+        -190, -190, -191, -192, -192, -192, -192, -192, -192, -194,
+        -194, -195, -195, -195, -195, -195, -195, -196, -195, -196,
+        -195, -195, -196, -197, -197, -197, -197, -198, -198, -198,
+        -198, -198, -198, -197, -198, -198, -197, -198, -197, -197,
+        -199, -199, -199, -200, -200, -201, -201, -201, -201, -201,
+        -201, -201, -200, -201, -201, -201, -202, -202, -203, -203,
+        -204, -205, -205, -205, -205, -205, -205, -204, -204, -205,
+        -205, -205, -206, -206, -206, -206, -206, -207, -206, -208,
+        -208, -209, -209, -209, -209, -209, -209, -210, -208, -210,
+        -209, -209, -210, -210, -211, -212, -212, -212, -212, -212,
+        -212, -212, -211, -212, -212, -213, -213, -214, -215, -215,
+        -216, -215, -215, -215, -215, -215, -216, -216, -217, -217,
+        -218, -217, -217, -218, -218, -219, -219, -219, -219, -220,
+        -219, -218, -219, -219, -219, -220, -220, -221, -221, -221,
+        -221, -220, -220, -220, -220, -221, -221, -221, -221, -222,
+        -223, -223, -224, -224, -225, -225, -227, -226, -226, -227,
+        -226, -227, -227, -227, -227, -227, -228, -227, -228, -229,
+        -229, -229, -229, -229, -229, -229, -229, -228, -229, -229,
+        -229, -230, -231, -232, -232, -232, -232, -232, -232, -232,
+        -232, -232, -232, -232, -233, -233, -234, -234, -234, -234,
+        -235, -235, -235, -234, -234, -234, -235, -236, -236, -236,
+        -237, -237, -238, -239, -240, -240, -241, -240, -240, -240,
+        -240, -240, -240, -240, -240, -240, -241, -242, -243, -242,
+        -243, -244, -243, -243, -244, -243, -244, -244, -243, -244,
+        -244, -245, -245, -245, -246, -246, -246, -246, -247, -246,
+        -246, -247, -247, -247, -247, -248, -247, -249, -248, -248,
+        -248, -248, -249, -249, -249, -249, -250, -251, -251, -252,
+        -252, -252, -251, -251, -252, -251, -252, -251, -251, -252,
+        -252, -252, -252, -252, -253, -254, -255, -255, -257, -258,
+        -257, -258, -258, -258, -258, -258, -258, -257, -257, -258,
+        -258, -259, -260, -260, -259, -260, -260, -260, -260, -260,
+        -260, -260, -260, -260, -260, -260, -260, -260, -261, -261,
+        -262, -263, -263, -262, -263, -262, -262, -264, -264, -265,
+        -266, -266, -266, -266, -266, -266, -266, -266, -266, -266,
+        -266, -266, -266, -266, -266, -266, -266, -266, -266, -266,
+        -267, -268, -268, -269, -270, -270, -270, -271, -271, -271,
+        -271, -271, -272, -273, -273, -274, -274, -274, -274, -274,
+        -274, -274, -273, -273, -272, -271, -272, -273, -273, -274,
+        -274, -274, -274, -275, -274, -275, -275, -276, -277, -277,
+        -277, -277, -277, -277, -277, -278, -279, -279, -279, -279,
+        -278, -278, -277, -277, -277, -278, -279, -279, -279, -279,
+        -279, -279, -279, -280, -280, -280, -281, -281, -281, -282,
+        -282, -282, -283, -283, -282, -283, -283, -283, -283, -283,
+        -283, -283, -284, -284, -284, -285, -285, -285, -284, -283,
+        -283, -283, -284, -284, -285, -285, -285, -285, -285, -285,
+        -285, -286, -285, -286, -286, -286, -287, -288, -288, -289,
+        -290, -289, -290, -290, -290, -290, -290, -290, -290, -290,
+        -289, -289, -289, -289, -289, -290, -290, -290, -290, -290,
+        -290, -290, -291, -290, -291, -290, -290, -290, -290, -291,
+        -291, -292, -292, -292, -293, -293, -293, -293, -293, -293,
+        -293, -294, -294, -294, -295, -295, -294, -294, -295, -294,
+        -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+        -295, -295, -296, -297, -297, -297, -298, -299, -300, -300,
+        -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
+        -301, -300, -300, -300, -300, -300, -299, -299, -299, -299,
+        -299, -299, -299, -299, -300, -299, -299, -300, -300, -300,
+        -300, -301, -301, -301, -300, -299, -299, -299, -299, -299,
+        -299, -299, -299, -299, -300, -299, -299, -299, -299, -300,
+        -300, -301, -302, -303, -303, -303, -303, -303, -303, -303,
+        -302, -302, -302, -302, -302, -303, -302, -302, -303, -302,
+        -302, -303, -303, -304, -305, -305, -305, -304, -304, -303,
+        -303, -303, -303, -303, -303, -303, -303, -303, -305, -305,
+        -304, -303, -303, -302, -302, -303, -303, -304, -304, -305,
+        -305, -305, -305, -305, -305, -305, -305, -306, -305, -306,
+        -306, -306, -306, -306, -306, -306, -306, -306, -306, -307,
+        -308, -308, -307, -307, -307, -306, -306, -306, -306, -306,
+        -306, -307, -307, -308, -308, -308, -308, -308, -308, -308,
+        -308, -308, -308, -308, -308, -308, -308, -308, -308, -307,
+        -307, -306, -306, -306, -306, -306, -307, -308, -308, -308,
+        -308, -308, -308, -307, -307, -306, -305, -306, -306, -307,
+        -307, -307, -308, -308, -308, -308, -308, -308, -308, -308,
+        -308, -308, -308, -308, -307, -308, -308, -309, -310, -310,
+        -310, -310, -310, -309, -308, -309, -308, -308, -309, -308,
+        -308, -308, -308, -308, -309, -308, -309, -308, -308, -308,
+        -308, -308, -307, -308, -308, -308, -308, -308, -309, -308,
+        -308, -309, -308, -309, -309, -309, -309, -308, -309, -308,
+        -309, -308, -308, -308, -308, -308, -308, -308, -308, -307,
+        -308, -308, -308, -308, -308, -308, -307, -307, -307, -307,
+        -307, -308, -308, -308, -308, -308, -308, -308, -308, -308,
+        -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
+        -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
+        -308, -308, -308, -309, -310, -310, -311, -310, -310, -310,
+        -310, -309, -309, -309, -309, -308, -309, -310, -310, -311,
+        -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+        -310, -310, -309, -308, -308, -308, -309, -310, -310, -311,
+        -311, -311, -310, -311, -311, -311, -311, -311, -310, -310,
+        -310, -309, -309, -309, -309, -310, -310, -312, -311, -311,
+        -310, -310, -310, -310, -309, -308, -309, -308, -309, -310,
+        -310, -310, -310, -310, -310, -309, -308, -308, -308, -308,
+        -308, -308, -309, -310, -310, -310, -311, -311, -311, -311,
+        -311, -311, -311, -311, -311, -310, -309, -309, -309, -308,
+        -308, -308, -308, -308, -307, -308, -308, -308, -309, -309,
+        -310, -310, -310, -310, -310, -310, -308, -308, -308, -308,
+        -308, -308, -308, -308, -308, -308, -308, -308, -307, -308,
+        -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
+        -307, -306, -306, -306, -306, -305, -305, -306, -305, -305,
+        -305, -304, -304, -304, -304, -303, -303, -303, -303, -304,
+        -304, -304, -304, -303, -302, -302, -302, -301, -301, -301,
+        -300, -299, -300, -300, -300, -300, -300, -301, -301, -301,
+        -302, -301, -301, -301, -301, -300, -299, -299, -298, -298,
+        -298, -297, -297, -297, -297, -296, -297, -297, -297, -297,
+        -297, -297, -296, -294, -294, -293, -292, -292, -291, -291,
+        -291, -290, -291, -291, -291, -290, -291, -291, -291, -291,
+        -290, -290, -290, -288, -289, -289, -289, -289, -288, -288,
+        -287, -286, -285, -285, -284, -284, -284, -284, -284, -284,
+        -283, -282, -282, -281, -281, -280, -279, -278, -277, -275,
+        -274, -275, -274, -274, -275, -273, -273, -273, -272, -273,
+        -271, -271, -271, -272, -271, -270, -269, -269, -268, -268,
+        -268, -266, -266, -266, -266, -264, -263, -263, -262, -261,
+        -261, -261, -260, -259, -258, -257, -256, -255, -255, -255,
+        -254, -254, -253, -252, -251, -251, -250, -250
     };
 
-    static const float iso226_2003_curve_90_phons[1382] =
+    static const int16_t iso226_2003_curve_90_phons[1382] =
     {
-        3.31, 3.30, 3.30, 3.29,
-        3.29, 3.29, 3.30, 3.29, 3.29, 3.31, 3.29, 3.31, 3.32, 3.31,
-        3.33, 3.36, 3.36, 3.36, 3.37, 3.36, 3.36, 3.37, 3.37, 3.36,
-        3.37, 3.37, 3.37, 3.36, 3.36, 3.39, 3.39, 3.40, 3.41, 3.43,
-        3.41, 3.42, 3.44, 3.42, 3.42, 3.44, 3.42, 3.42, 3.42, 3.44,
-        3.45, 3.45, 3.47, 3.46, 3.47, 3.49, 3.50, 3.50, 3.51, 3.51,
-        3.51, 3.49, 3.49, 3.49, 3.49, 3.49, 3.49, 3.51, 3.50, 3.50,
-        3.53, 3.54, 3.55, 3.55, 3.56, 3.57, 3.58, 3.58, 3.58, 3.57,
-        3.55, 3.56, 3.57, 3.58, 3.56, 3.58, 3.57, 3.56, 3.58, 3.60,
-        3.60, 3.62, 3.63, 3.63, 3.62, 3.61, 3.63, 3.63, 3.62, 3.64,
-        3.63, 3.61, 3.62, 3.63, 3.63, 3.63, 3.66, 3.66, 3.66, 3.67,
-        3.70, 3.71, 3.71, 3.71, 3.71, 3.71, 3.72, 3.73, 3.74, 3.75,
-        3.76, 3.77, 3.77, 3.77, 3.76, 3.75, 3.77, 3.79, 3.79, 3.79,
-        3.79, 3.81, 3.82, 3.80, 3.81, 3.84, 3.83, 3.82, 3.84, 3.84,
-        3.84, 3.84, 3.82, 3.83, 3.84, 3.83, 3.82, 3.85, 3.85, 3.87,
-        3.88, 3.88, 3.89, 3.88, 3.89, 3.90, 3.90, 3.88, 3.90, 3.90,
-        3.90, 3.89, 3.90, 3.90, 3.90, 3.90, 3.92, 3.94, 3.95, 3.95,
-        3.95, 3.95, 3.94, 3.96, 3.96, 3.94, 3.96, 3.96, 3.96, 3.97,
-        3.98, 4.00, 4.02, 4.03, 4.04, 4.03, 4.03, 4.03, 4.03, 4.02,
-        4.03, 4.03, 4.02, 4.02, 4.03, 4.03, 4.02, 4.06, 4.07, 4.09,
-        4.12, 4.12, 4.15, 4.16, 4.15, 4.16, 4.15, 4.14, 4.15, 4.15,
-        4.15, 4.16, 4.15, 4.16, 4.16, 4.16, 4.16, 4.18, 4.16, 4.16,
-        4.17, 4.20, 4.20, 4.22, 4.23, 4.23, 4.21, 4.22, 4.22, 4.22,
-        4.22, 4.21, 4.23, 4.24, 4.24, 4.26, 4.27, 4.27, 4.28, 4.29,
-        4.28, 4.28, 4.29, 4.30, 4.29, 4.28, 4.28, 4.28, 4.29, 4.30,
-        4.32, 4.34, 4.35, 4.38, 4.35, 4.35, 4.37, 4.38, 4.37, 4.38,
-        4.40, 4.39, 4.39, 4.39, 4.36, 4.35, 4.35, 4.34, 4.34, 4.35,
-        4.37, 4.38, 4.37, 4.39, 4.41, 4.41, 4.41, 4.41, 4.41, 4.44,
-        4.44, 4.43, 4.46, 4.48, 4.47, 4.47, 4.48, 4.48, 4.49, 4.52,
-        4.52, 4.54, 4.54, 4.54, 4.55, 4.54, 4.55, 4.57, 4.56, 4.57,
-        4.56, 4.56, 4.57, 4.59, 4.59, 4.59, 4.61, 4.61, 4.62, 4.62,
-        4.62, 4.62, 4.62, 4.60, 4.62, 4.62, 4.60, 4.61, 4.60, 4.61,
-        4.63, 4.64, 4.65, 4.67, 4.67, 4.68, 4.68, 4.69, 4.68, 4.68,
-        4.70, 4.70, 4.67, 4.70, 4.70, 4.70, 4.71, 4.72, 4.74, 4.75,
-        4.76, 4.77, 4.78, 4.79, 4.79, 4.78, 4.77, 4.76, 4.76, 4.78,
-        4.79, 4.78, 4.81, 4.81, 4.81, 4.81, 4.81, 4.84, 4.81, 4.84,
-        4.86, 4.87, 4.87, 4.88, 4.88, 4.88, 4.88, 4.89, 4.86, 4.89,
-        4.89, 4.88, 4.91, 4.91, 4.92, 4.94, 4.94, 4.95, 4.94, 4.94,
-        4.95, 4.95, 4.93, 4.95, 4.95, 4.97, 4.97, 4.99, 5.01, 5.02,
-        5.03, 5.02, 5.01, 5.02, 5.02, 5.02, 5.03, 5.05, 5.06, 5.07,
-        5.08, 5.07, 5.07, 5.10, 5.09, 5.10, 5.12, 5.11, 5.11, 5.13,
-        5.11, 5.10, 5.10, 5.11, 5.11, 5.13, 5.14, 5.15, 5.15, 5.15,
-        5.15, 5.13, 5.14, 5.14, 5.14, 5.15, 5.15, 5.16, 5.16, 5.18,
-        5.19, 5.20, 5.24, 5.24, 5.26, 5.26, 5.29, 5.28, 5.27, 5.29,
-        5.28, 5.29, 5.29, 5.29, 5.29, 5.29, 5.31, 5.30, 5.32, 5.34,
-        5.34, 5.34, 5.35, 5.35, 5.34, 5.35, 5.34, 5.33, 5.34, 5.34,
-        5.35, 5.36, 5.38, 5.41, 5.40, 5.40, 5.42, 5.40, 5.42, 5.41,
-        5.40, 5.41, 5.42, 5.42, 5.43, 5.45, 5.45, 5.46, 5.47, 5.47,
-        5.47, 5.48, 5.48, 5.47, 5.47, 5.47, 5.48, 5.51, 5.50, 5.51,
-        5.53, 5.53, 5.55, 5.58, 5.59, 5.59, 5.61, 5.59, 5.60, 5.61,
-        5.59, 5.59, 5.59, 5.59, 5.61, 5.61, 5.62, 5.64, 5.67, 5.64,
-        5.67, 5.68, 5.66, 5.67, 5.69, 5.67, 5.69, 5.69, 5.68, 5.70,
-        5.70, 5.72, 5.72, 5.72, 5.74, 5.74, 5.74, 5.74, 5.75, 5.74,
-        5.74, 5.75, 5.75, 5.75, 5.77, 5.78, 5.77, 5.80, 5.80, 5.79,
-        5.79, 5.79, 5.80, 5.81, 5.80, 5.82, 5.84, 5.85, 5.85, 5.87,
-        5.88, 5.87, 5.87, 5.87, 5.88, 5.86, 5.88, 5.87, 5.87, 5.88,
-        5.88, 5.88, 5.88, 5.88, 5.90, 5.93, 5.94, 5.96, 5.99, 6.01,
-        6.00, 6.01, 6.01, 6.02, 6.01, 6.01, 6.01, 5.99, 6.00, 6.01,
-        6.03, 6.04, 6.06, 6.07, 6.05, 6.07, 6.07, 6.06, 6.07, 6.07,
-        6.07, 6.06, 6.07, 6.06, 6.06, 6.07, 6.06, 6.06, 6.08, 6.10,
-        6.11, 6.14, 6.13, 6.12, 6.14, 6.12, 6.12, 6.15, 6.17, 6.18,
-        6.20, 6.20, 6.21, 6.22, 6.20, 6.20, 6.20, 6.20, 6.20, 6.20,
-        6.20, 6.20, 6.20, 6.20, 6.21, 6.21, 6.20, 6.21, 6.20, 6.22,
-        6.23, 6.25, 6.26, 6.27, 6.30, 6.30, 6.30, 6.33, 6.32, 6.33,
-        6.33, 6.33, 6.34, 6.36, 6.36, 6.39, 6.39, 6.39, 6.39, 6.39,
-        6.39, 6.39, 6.36, 6.36, 6.35, 6.33, 6.35, 6.36, 6.38, 6.39,
-        6.40, 6.39, 6.39, 6.41, 6.39, 6.41, 6.42, 6.44, 6.46, 6.46,
-        6.47, 6.46, 6.47, 6.46, 6.46, 6.48, 6.50, 6.51, 6.52, 6.50,
-        6.49, 6.49, 6.47, 6.46, 6.47, 6.49, 6.50, 6.52, 6.52, 6.52,
-        6.52, 6.52, 6.52, 6.53, 6.53, 6.53, 6.55, 6.55, 6.55, 6.58,
-        6.58, 6.59, 6.61, 6.60, 6.59, 6.60, 6.61, 6.60, 6.60, 6.60,
-        6.60, 6.60, 6.63, 6.63, 6.62, 6.65, 6.65, 6.65, 6.62, 6.61,
-        6.60, 6.61, 6.62, 6.62, 6.65, 6.65, 6.65, 6.65, 6.65, 6.65,
-        6.66, 6.67, 6.65, 6.66, 6.67, 6.68, 6.70, 6.71, 6.73, 6.74,
-        6.76, 6.75, 6.78, 6.78, 6.78, 6.78, 6.78, 6.76, 6.76, 6.76,
-        6.74, 6.74, 6.74, 6.74, 6.75, 6.76, 6.78, 6.78, 6.78, 6.78,
-        6.78, 6.78, 6.79, 6.78, 6.79, 6.78, 6.78, 6.78, 6.78, 6.79,
-        6.79, 6.81, 6.82, 6.82, 6.84, 6.84, 6.84, 6.84, 6.84, 6.84,
-        6.84, 6.85, 6.86, 6.87, 6.89, 6.89, 6.87, 6.86, 6.87, 6.87,
-        6.84, 6.84, 6.84, 6.84, 6.84, 6.84, 6.84, 6.84, 6.84, 6.84,
-        6.87, 6.89, 6.90, 6.92, 6.94, 6.94, 6.95, 6.98, 7.00, 7.00,
-        7.02, 7.02, 7.02, 7.02, 7.02, 7.02, 7.03, 7.03, 7.03, 7.03,
-        7.03, 7.00, 7.00, 7.00, 7.00, 7.00, 6.98, 6.98, 6.97, 6.97,
-        6.98, 6.98, 6.98, 6.97, 7.00, 6.98, 6.98, 7.00, 7.00, 7.00,
-        7.00, 7.02, 7.02, 7.02, 7.00, 6.98, 6.97, 6.97, 6.97, 6.97,
-        6.97, 6.98, 6.98, 6.97, 7.00, 6.97, 6.98, 6.98, 6.98, 7.01,
-        7.00, 7.03, 7.04, 7.06, 7.08, 7.06, 7.06, 7.06, 7.06, 7.06,
-        7.05, 7.04, 7.05, 7.05, 7.05, 7.06, 7.05, 7.04, 7.06, 7.05,
-        7.05, 7.07, 7.08, 7.10, 7.11, 7.13, 7.11, 7.10, 7.10, 7.08,
-        7.07, 7.07, 7.06, 7.06, 7.06, 7.08, 7.07, 7.08, 7.11, 7.11,
-        7.10, 7.08, 7.07, 7.05, 7.05, 7.06, 7.06, 7.09, 7.10, 7.11,
-        7.11, 7.11, 7.11, 7.11, 7.13, 7.11, 7.13, 7.14, 7.13, 7.14,
-        7.13, 7.14, 7.13, 7.13, 7.13, 7.13, 7.13, 7.13, 7.14, 7.16,
-        7.18, 7.18, 7.16, 7.16, 7.16, 7.13, 7.13, 7.13, 7.13, 7.13,
-        7.13, 7.16, 7.16, 7.18, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19,
-        7.19, 7.19, 7.18, 7.19, 7.19, 7.18, 7.18, 7.18, 7.18, 7.16,
-        7.16, 7.14, 7.14, 7.13, 7.14, 7.15, 7.17, 7.18, 7.18, 7.19,
-        7.19, 7.19, 7.18, 7.17, 7.17, 7.14, 7.13, 7.14, 7.14, 7.15,
-        7.17, 7.16, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19,
-        7.19, 7.19, 7.19, 7.19, 7.17, 7.19, 7.19, 7.20, 7.22, 7.22,
-        7.23, 7.24, 7.22, 7.21, 7.20, 7.21, 7.19, 7.19, 7.20, 7.19,
-        7.19, 7.20, 7.19, 7.19, 7.21, 7.19, 7.20, 7.19, 7.19, 7.18,
-        7.18, 7.19, 7.16, 7.19, 7.18, 7.18, 7.19, 7.19, 7.21, 7.19,
-        7.19, 7.20, 7.19, 7.20, 7.20, 7.20, 7.20, 7.19, 7.20, 7.19,
-        7.20, 7.19, 7.19, 7.19, 7.18, 7.18, 7.18, 7.19, 7.18, 7.17,
-        7.19, 7.18, 7.18, 7.18, 7.18, 7.18, 7.16, 7.16, 7.16, 7.16,
-        7.16, 7.18, 7.19, 7.18, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19,
-        7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19,
-        7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19,
-        7.19, 7.19, 7.19, 7.22, 7.23, 7.24, 7.26, 7.24, 7.22, 7.22,
-        7.22, 7.21, 7.21, 7.21, 7.21, 7.19, 7.22, 7.22, 7.23, 7.25,
-        7.26, 7.26, 7.26, 7.26, 7.26, 7.26, 7.26, 7.25, 7.25, 7.26,
-        7.24, 7.22, 7.21, 7.18, 7.18, 7.19, 7.21, 7.22, 7.24, 7.26,
-        7.25, 7.25, 7.24, 7.26, 7.27, 7.27, 7.26, 7.26, 7.24, 7.23,
-        7.24, 7.21, 7.20, 7.21, 7.21, 7.24, 7.24, 7.27, 7.25, 7.26,
-        7.24, 7.24, 7.22, 7.22, 7.21, 7.19, 7.21, 7.18, 7.21, 7.24,
-        7.24, 7.23, 7.24, 7.24, 7.22, 7.20, 7.19, 7.18, 7.19, 7.19,
-        7.19, 7.19, 7.21, 7.22, 7.24, 7.24, 7.25, 7.26, 7.26, 7.25,
-        7.26, 7.26, 7.26, 7.26, 7.25, 7.23, 7.21, 7.21, 7.20, 7.19,
-        7.19, 7.19, 7.19, 7.19, 7.17, 7.19, 7.19, 7.19, 7.22, 7.21,
-        7.22, 7.22, 7.22, 7.22, 7.22, 7.22, 7.19, 7.18, 7.19, 7.19,
-        7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.18, 7.19, 7.16, 7.19,
-        7.19, 7.18, 7.18, 7.19, 7.19, 7.19, 7.19, 7.19, 7.19, 7.18,
-        7.17, 7.15, 7.13, 7.14, 7.14, 7.13, 7.13, 7.13, 7.13, 7.12,
-        7.12, 7.10, 7.10, 7.10, 7.08, 7.08, 7.08, 7.08, 7.08, 7.09,
-        7.10, 7.10, 7.09, 7.07, 7.05, 7.05, 7.04, 7.03, 7.02, 7.02,
-        7.00, 6.98, 7.01, 7.00, 7.00, 7.00, 7.00, 7.03, 7.02, 7.03,
-        7.05, 7.03, 7.03, 7.03, 7.01, 7.00, 6.99, 6.97, 6.95, 6.95,
-        6.95, 6.92, 6.93, 6.94, 6.92, 6.91, 6.92, 6.94, 6.94, 6.94,
-        6.94, 6.93, 6.90, 6.86, 6.87, 6.84, 6.82, 6.82, 6.80, 6.79,
-        6.79, 6.78, 6.78, 6.79, 6.78, 6.78, 6.79, 6.79, 6.79, 6.79,
-        6.76, 6.76, 6.76, 6.73, 6.74, 6.74, 6.74, 6.74, 6.73, 6.71,
-        6.70, 6.66, 6.65, 6.65, 6.63, 6.62, 6.62, 6.62, 6.62, 6.62,
-        6.60, 6.58, 6.58, 6.55, 6.55, 6.54, 6.50, 6.49, 6.46, 6.42,
-        6.40, 6.41, 6.39, 6.40, 6.41, 6.38, 6.38, 6.36, 6.34, 6.36,
-        6.33, 6.33, 6.33, 6.34, 6.31, 6.29, 6.28, 6.28, 6.26, 6.25,
-        6.25, 6.22, 6.22, 6.20, 6.20, 6.17, 6.15, 6.14, 6.12, 6.09,
-        6.09, 6.08, 6.06, 6.04, 6.01, 6.00, 5.98, 5.95, 5.95, 5.94,
-        5.92, 5.92, 5.91, 5.88, 5.87, 5.85, 5.83, 5.83
+        331, 330, 330, 329,
+        329, 329, 330, 329, 329, 331, 329, 331, 332, 331,
+        333, 336, 336, 336, 337, 336, 336, 337, 337, 336,
+        337, 337, 337, 336, 336, 339, 339, 340, 341, 343,
+        341, 342, 344, 342, 342, 344, 342, 342, 342, 344,
+        345, 345, 347, 346, 347, 349, 350, 350, 351, 351,
+        351, 349, 349, 349, 349, 349, 349, 351, 350, 350,
+        353, 354, 355, 355, 356, 357, 358, 358, 358, 357,
+        355, 356, 357, 358, 356, 358, 357, 356, 358, 360,
+        360, 362, 363, 363, 362, 361, 363, 363, 362, 364,
+        363, 361, 362, 363, 363, 363, 366, 366, 366, 367,
+        370, 371, 371, 371, 371, 371, 372, 373, 374, 375,
+        376, 377, 377, 377, 376, 375, 377, 379, 379, 379,
+        379, 381, 382, 380, 381, 384, 383, 382, 384, 384,
+        384, 384, 382, 383, 384, 383, 382, 385, 385, 387,
+        388, 388, 389, 388, 389, 390, 390, 388, 390, 390,
+        390, 389, 390, 390, 390, 390, 392, 394, 395, 395,
+        395, 395, 394, 396, 396, 394, 396, 396, 396, 397,
+        398, 400, 402, 403, 404, 403, 403, 403, 403, 402,
+        403, 403, 402, 402, 403, 403, 402, 406, 407, 409,
+        412, 412, 415, 416, 415, 416, 415, 414, 415, 415,
+        415, 416, 415, 416, 416, 416, 416, 418, 416, 416,
+        417, 420, 420, 422, 423, 423, 421, 422, 422, 422,
+        422, 421, 423, 424, 424, 426, 427, 427, 428, 429,
+        428, 428, 429, 430, 429, 428, 428, 428, 429, 430,
+        432, 434, 435, 438, 435, 435, 437, 438, 437, 438,
+        440, 439, 439, 439, 436, 435, 435, 434, 434, 435,
+        437, 438, 437, 439, 441, 441, 441, 441, 441, 444,
+        444, 443, 446, 448, 447, 447, 448, 448, 449, 452,
+        452, 454, 454, 454, 455, 454, 455, 457, 456, 457,
+        456, 456, 457, 459, 459, 459, 461, 461, 462, 462,
+        462, 462, 462, 460, 462, 462, 460, 461, 460, 461,
+        463, 464, 465, 467, 467, 468, 468, 469, 468, 468,
+        470, 470, 467, 470, 470, 470, 471, 472, 474, 475,
+        476, 477, 478, 479, 479, 478, 477, 476, 476, 478,
+        479, 478, 481, 481, 481, 481, 481, 484, 481, 484,
+        486, 487, 487, 488, 488, 488, 488, 489, 486, 489,
+        489, 488, 491, 491, 492, 494, 494, 495, 494, 494,
+        495, 495, 493, 495, 495, 497, 497, 499, 501, 502,
+        503, 502, 501, 502, 502, 502, 503, 505, 506, 507,
+        508, 507, 507, 510, 509, 510, 512, 511, 511, 513,
+        511, 510, 510, 511, 511, 513, 514, 515, 515, 515,
+        515, 513, 514, 514, 514, 515, 515, 516, 516, 518,
+        519, 520, 524, 524, 526, 526, 529, 528, 527, 529,
+        528, 529, 529, 529, 529, 529, 531, 530, 532, 534,
+        534, 534, 535, 535, 534, 535, 534, 533, 534, 534,
+        535, 536, 538, 541, 540, 540, 542, 540, 542, 541,
+        540, 541, 542, 542, 543, 545, 545, 546, 547, 547,
+        547, 548, 548, 547, 547, 547, 548, 551, 550, 551,
+        553, 553, 555, 558, 559, 559, 561, 559, 560, 561,
+        559, 559, 559, 559, 561, 561, 562, 564, 567, 564,
+        567, 568, 566, 567, 569, 567, 569, 569, 568, 570,
+        570, 572, 572, 572, 574, 574, 574, 574, 575, 574,
+        574, 575, 575, 575, 577, 578, 577, 580, 580, 579,
+        579, 579, 580, 581, 580, 582, 584, 585, 585, 587,
+        588, 587, 587, 587, 588, 586, 588, 587, 587, 588,
+        588, 588, 588, 588, 590, 593, 594, 596, 599, 601,
+        600, 601, 601, 602, 601, 601, 601, 599, 600, 601,
+        603, 604, 606, 607, 605, 607, 607, 606, 607, 607,
+        607, 606, 607, 606, 606, 607, 606, 606, 608, 610,
+        611, 614, 613, 612, 614, 612, 612, 615, 617, 618,
+        620, 620, 621, 622, 620, 620, 620, 620, 620, 620,
+        620, 620, 620, 620, 621, 621, 620, 621, 620, 622,
+        623, 625, 626, 627, 630, 630, 630, 633, 632, 633,
+        633, 633, 634, 636, 636, 639, 639, 639, 639, 639,
+        639, 639, 636, 636, 635, 633, 635, 636, 638, 639,
+        640, 639, 639, 641, 639, 641, 642, 644, 646, 646,
+        647, 646, 647, 646, 646, 648, 650, 651, 652, 650,
+        649, 649, 647, 646, 647, 649, 650, 652, 652, 652,
+        652, 652, 652, 653, 653, 653, 655, 655, 655, 658,
+        658, 659, 661, 660, 659, 660, 661, 660, 660, 660,
+        660, 660, 663, 663, 662, 665, 665, 665, 662, 661,
+        660, 661, 662, 662, 665, 665, 665, 665, 665, 665,
+        666, 667, 665, 666, 667, 668, 670, 671, 673, 674,
+        676, 675, 678, 678, 678, 678, 678, 676, 676, 676,
+        674, 674, 674, 674, 675, 676, 678, 678, 678, 678,
+        678, 678, 679, 678, 679, 678, 678, 678, 678, 679,
+        679, 681, 682, 682, 684, 684, 684, 684, 684, 684,
+        684, 685, 686, 687, 689, 689, 687, 686, 687, 687,
+        684, 684, 684, 684, 684, 684, 684, 684, 684, 684,
+        687, 689, 690, 692, 694, 694, 695, 698, 700, 700,
+        702, 702, 702, 702, 702, 702, 703, 703, 703, 703,
+        703, 700, 700, 700, 700, 700, 698, 698, 697, 697,
+        698, 698, 698, 697, 700, 698, 698, 700, 700, 700,
+        700, 702, 702, 702, 700, 698, 697, 697, 697, 697,
+        697, 698, 698, 697, 700, 697, 698, 698, 698, 701,
+        700, 703, 704, 706, 708, 706, 706, 706, 706, 706,
+        705, 704, 705, 705, 705, 706, 705, 704, 706, 705,
+        705, 707, 708, 710, 711, 713, 711, 710, 710, 708,
+        707, 707, 706, 706, 706, 708, 707, 708, 711, 711,
+        710, 708, 707, 705, 705, 706, 706, 709, 710, 711,
+        711, 711, 711, 711, 713, 711, 713, 714, 713, 714,
+        713, 714, 713, 713, 713, 713, 713, 713, 714, 716,
+        718, 718, 716, 716, 716, 713, 713, 713, 713, 713,
+        713, 716, 716, 718, 719, 719, 719, 719, 719, 719,
+        719, 719, 718, 719, 719, 718, 718, 718, 718, 716,
+        716, 714, 714, 713, 714, 715, 717, 718, 718, 719,
+        719, 719, 718, 717, 717, 714, 713, 714, 714, 715,
+        717, 716, 719, 719, 719, 719, 719, 719, 719, 719,
+        719, 719, 719, 719, 717, 719, 719, 720, 722, 722,
+        723, 724, 722, 721, 720, 721, 719, 719, 720, 719,
+        719, 720, 719, 719, 721, 719, 720, 719, 719, 718,
+        718, 719, 716, 719, 718, 718, 719, 719, 721, 719,
+        719, 720, 719, 720, 720, 720, 720, 719, 720, 719,
+        720, 719, 719, 719, 718, 718, 718, 719, 718, 717,
+        719, 718, 718, 718, 718, 718, 716, 716, 716, 716,
+        716, 718, 719, 718, 719, 719, 719, 719, 719, 719,
+        719, 719, 719, 719, 719, 719, 719, 719, 719, 719,
+        719, 719, 719, 719, 719, 719, 719, 719, 719, 719,
+        719, 719, 719, 722, 723, 724, 726, 724, 722, 722,
+        722, 721, 721, 721, 721, 719, 722, 722, 723, 725,
+        726, 726, 726, 726, 726, 726, 726, 725, 725, 726,
+        724, 722, 721, 718, 718, 719, 721, 722, 724, 726,
+        725, 725, 724, 726, 727, 727, 726, 726, 724, 723,
+        724, 721, 720, 721, 721, 724, 724, 727, 725, 726,
+        724, 724, 722, 722, 721, 719, 721, 718, 721, 724,
+        724, 723, 724, 724, 722, 720, 719, 718, 719, 719,
+        719, 719, 721, 722, 724, 724, 725, 726, 726, 725,
+        726, 726, 726, 726, 725, 723, 721, 721, 720, 719,
+        719, 719, 719, 719, 717, 719, 719, 719, 722, 721,
+        722, 722, 722, 722, 722, 722, 719, 718, 719, 719,
+        719, 719, 719, 719, 719, 719, 718, 719, 716, 719,
+        719, 718, 718, 719, 719, 719, 719, 719, 719, 718,
+        717, 715, 713, 714, 714, 713, 713, 713, 713, 712,
+        712, 710, 710, 710, 708, 708, 708, 708, 708, 709,
+        710, 710, 709, 707, 705, 705, 704, 703, 702, 702,
+        700, 698, 701, 700, 700, 700, 700, 703, 702, 703,
+        705, 703, 703, 703, 701, 700, 699, 697, 695, 695,
+        695, 692, 693, 694, 692, 691, 692, 694, 694, 694,
+        694, 693, 690, 686, 687, 684, 682, 682, 680, 679,
+        679, 678, 678, 679, 678, 678, 679, 679, 679, 679,
+        676, 676, 676, 673, 674, 674, 674, 674, 673, 671,
+        670, 666, 665, 665, 663, 662, 662, 662, 662, 662,
+        660, 658, 658, 655, 655, 654, 650, 649, 646, 642,
+        640, 641, 639, 640, 641, 638, 638, 636, 634, 636,
+        633, 633, 633, 634, 631, 629, 628, 628, 626, 625,
+        625, 622, 622, 620, 620, 617, 615, 614, 612, 609,
+        609, 608, 606, 604, 601, 600, 598, 595, 595, 594,
+        592, 592, 591, 588, 587, 585, 583, 583
     };
 
-    static const float * const iso226_2003_curves[] =
+    static const int16_t * const iso226_2003_curves[] =
     {
         iso226_2003_curve_0_phons,
         iso226_2003_curve_10_phons,
@@ -1480,6 +1480,6 @@ namespace lsp
         10, // curves
         iso226_2003_curves // curve data
     };
-}
+} /* namespace lsp */
 
 #endif /* GENERATED_ISO226_ISO226_2003_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/iso226-2023.h 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/iso226-2023.h
--- 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/iso226-2023.h	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/iso226-2023.h	2025-08-26 18:15:57.317871377 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins
  * Created on: 14 июл. 2024 г.
@@ -26,1047 +26,1047 @@
 
 namespace lsp
 {
-    static const float iso226_2023_curve_0_phons[985] =
+    static const int16_t iso226_2023_curve_0_phons[985] =
     {
-        -42.88, -43.00,
-        -42.75, -42.85, -43.10, -43.07, -43.29, -43.39, -43.58, -43.78, -43.75, -44.29,
-        -44.26, -44.33, -44.74, -44.87, -44.81, -45.22, -45.22, -45.48, -45.48, -45.58,
-        -45.71, -45.97, -46.06, -46.06, -46.06, -46.35, -46.48, -46.35, -46.79, -46.89,
-        -47.12, -47.06, -47.38, -47.60, -47.82, -47.92, -48.18, -48.30, -48.40, -48.57,
-        -48.69, -48.86, -48.95, -49.08, -49.14, -49.34, -49.43, -49.66, -49.60, -49.85,
-        -50.04, -50.04, -50.27, -50.43, -50.43, -50.33, -50.84, -50.82, -50.91, -51.11,
-        -51.33, -51.39, -51.49, -51.71, -52.00, -51.97, -51.97, -52.32, -52.42, -52.46,
-        -52.70, -52.71, -52.71, -52.99, -52.90, -53.00, -53.10, -53.29, -53.51, -53.51,
-        -53.80, -53.77, -53.99, -54.09, -54.16, -54.38, -54.45, -54.54, -54.67, -54.61,
-        -54.74, -54.93, -55.05, -55.00, -55.22, -55.34, -55.41, -55.54, -55.73, -55.83,
-        -56.02, -56.21, -56.44, -56.41, -56.63, -56.63, -56.75, -56.85, -56.82, -57.07,
-        -57.14, -57.14, -57.14, -57.36, -57.46, -57.46, -57.68, -57.72, -57.82, -57.94,
-        -58.10, -58.20, -58.17, -58.40, -58.64, -58.74, -58.84, -58.84, -59.06, -59.23,
-        -59.35, -59.35, -59.57, -59.64, -59.64, -59.64, -59.84, -59.93, -59.93, -60.15,
-        -60.12, -60.44, -60.32, -60.51, -60.64, -60.67, -60.73, -60.86, -60.98, -61.05,
-        -61.02, -61.12, -61.25, -61.19, -61.28, -61.53, -61.51, -61.82, -61.80, -61.92,
-        -62.11, -62.21, -62.21, -62.31, -62.31, -62.40, -62.28, -62.53, -62.60, -62.72,
-        -62.94, -62.92, -63.17, -63.01, -63.23, -63.23, -63.30, -63.37, -63.62, -63.47,
-        -63.69, -63.66, -63.88, -63.95, -64.01, -64.17, -64.05, -64.26, -64.24, -64.46,
-        -64.46, -64.61, -64.68, -64.78, -64.88, -65.00, -65.19, -65.32, -65.42, -65.61,
-        -65.51, -65.61, -65.71, -65.74, -65.83, -65.83, -65.83, -65.80, -65.80, -65.93,
-        -66.00, -65.97, -66.19, -66.16, -66.38, -66.48, -66.73, -66.58, -66.83, -67.05,
-        -66.83, -67.08, -67.15, -67.15, -67.02, -67.24, -67.36, -67.31, -67.53, -67.50,
-        -67.60, -67.70, -67.70, -67.82, -67.79, -68.01, -68.07, -68.04, -68.24, -68.25,
-        -68.24, -68.46, -68.24, -68.43, -68.56, -68.62, -68.78, -68.72, -68.85, -69.07,
-        -69.04, -69.16, -69.29, -69.29, -69.29, -69.26, -69.36, -69.33, -69.45, -69.45,
-        -69.52, -69.65, -69.74, -69.74, -69.97, -69.97, -70.09, -70.22, -70.19, -70.34,
-        -70.28, -70.48, -70.41, -70.48, -70.58, -70.57, -70.57, -70.45, -70.67, -70.76,
-        -70.67, -70.86, -70.83, -70.86, -71.06, -71.28, -71.18, -71.28, -71.40, -71.25,
-        -71.44, -71.60, -71.44, -71.60, -71.57, -71.69, -71.72, -71.79, -71.92, -72.01,
-        -71.89, -72.08, -71.98, -72.08, -72.30, -72.18, -72.27, -72.52, -72.50, -72.43,
-        -72.62, -72.56, -72.52, -72.75, -72.87, -72.84, -72.97, -73.07, -73.04, -73.13,
-        -73.26, -73.23, -73.23, -73.36, -73.33, -73.33, -73.45, -73.55, -73.39, -73.55,
-        -73.64, -73.49, -73.64, -73.84, -73.71, -73.84, -73.84, -73.95, -73.84, -73.93,
-        -74.03, -73.93, -74.03, -74.13, -74.27, -74.13, -74.25, -74.38, -74.22, -74.35,
-        -74.48, -74.60, -74.57, -74.63, -74.80, -74.79, -74.79, -74.89, -74.92, -74.88,
-        -74.89, -74.89, -75.01, -74.99, -75.08, -75.08, -75.18, -75.15, -75.25, -75.34,
-        -75.47, -75.37, -75.47, -75.50, -75.69, -75.74, -75.60, -75.69, -75.57, -75.91,
-        -75.69, -75.89, -75.89, -76.13, -76.13, -75.89, -76.14, -76.14, -76.13, -76.26,
-        -76.23, -76.23, -76.42, -76.55, -76.43, -76.52, -76.72, -76.77, -76.65, -76.87,
-        -76.90, -76.90, -77.02, -77.00, -77.00, -77.00, -77.02, -77.12, -77.09, -77.22,
-        -77.19, -77.31, -77.41, -77.31, -77.38, -77.41, -77.51, -77.51, -77.51, -77.60,
-        -77.60, -77.76, -77.85, -77.70, -77.70, -77.80, -77.83, -78.02, -78.04, -78.14,
-        -78.02, -78.02, -78.12, -78.24, -78.23, -78.12, -78.34, -78.34, -78.34, -78.31,
-        -78.43, -78.43, -78.43, -78.53, -78.43, -78.53, -78.53, -78.41, -78.60, -78.47,
-        -78.47, -78.82, -78.70, -78.72, -78.95, -78.95, -78.95, -79.03, -79.05, -79.05,
-        -79.17, -79.27, -79.02, -79.02, -79.14, -79.14, -79.24, -79.14, -79.01, -79.21,
-        -79.24, -79.14, -79.24, -79.33, -79.36, -79.39, -79.58, -79.46, -79.52, -79.71,
-        -79.70, -79.59, -79.71, -79.83, -79.83, -79.83, -79.96, -79.93, -79.90, -80.00,
-        -80.12, -79.90, -79.90, -80.00, -80.00, -80.00, -80.12, -80.00, -80.12, -80.10,
-        -80.10, -80.10, -80.10, -80.25, -80.34, -80.34, -80.32, -80.43, -80.32, -80.32,
-        -80.42, -80.32, -80.32, -80.44, -80.54, -80.53, -80.51, -80.54, -80.64, -80.64,
-        -80.51, -80.51, -80.61, -80.51, -80.64, -80.64, -80.65, -80.57, -80.57, -80.60,
-        -80.67, -80.67, -80.76, -80.67, -80.67, -80.67, -80.66, -80.54, -80.54, -80.64,
-        -80.64, -80.73, -80.76, -80.76, -80.64, -80.73, -80.73, -80.68, -80.70, -80.83,
-        -80.83, -80.98, -80.98, -80.86, -80.96, -80.98, -80.98, -80.98, -80.98, -80.98,
-        -81.01, -80.98, -80.89, -80.89, -80.89, -80.79, -80.89, -80.89, -80.89, -81.11,
-        -81.11, -81.11, -81.11, -81.14, -81.14, -81.14, -81.16, -81.17, -81.07, -81.07,
-        -81.07, -81.07, -81.04, -81.05, -81.05, -81.14, -81.26, -81.26, -81.26, -81.17,
-        -81.29, -81.29, -81.29, -81.26, -81.20, -81.29, -81.29, -81.14, -81.17, -81.29,
-        -81.29, -81.39, -81.29, -81.29, -81.49, -81.39, -81.26, -81.49, -81.36, -81.33,
-        -81.58, -81.52, -81.65, -81.68, -81.62, -81.55, -81.68, -81.62, -81.65, -81.62,
-        -81.75, -81.97, -81.81, -82.04, -82.13, -82.23, -82.36, -82.42, -82.55, -82.55,
-        -82.80, -82.77, -82.74, -82.87, -83.03, -83.03, -83.03, -83.32, -83.32, -83.29,
-        -83.51, -83.51, -83.58, -83.81, -84.00, -84.12, -84.25, -84.29, -84.29, -84.51,
-        -84.58, -84.58, -84.67, -84.87, -84.99, -84.99, -85.18, -85.31, -85.31, -85.41,
-        -85.50, -85.50, -85.47, -85.57, -85.57, -85.54, -85.64, -85.51, -85.64, -85.74,
-        -85.76, -85.86, -85.86, -85.99, -85.99, -85.93, -85.96, -85.83, -85.93, -85.80,
-        -85.96, -85.83, -85.96, -85.83, -85.99, -85.86, -85.99, -85.83, -85.99, -86.08,
-        -85.99, -85.99, -86.11, -86.08, -85.99, -86.08, -85.89, -85.83, -85.86, -85.76,
-        -85.74, -85.76, -85.74, -85.76, -85.76, -85.89, -85.76, -85.89, -85.79, -85.89,
-        -85.79, -85.76, -85.79, -85.79, -85.79, -85.99, -85.89, -85.79, -85.99, -85.76,
-        -85.89, -85.86, -85.89, -85.86, -85.76, -85.79, -85.74, -85.74, -85.64, -85.76,
-        -85.76, -85.76, -85.79, -85.79, -85.86, -85.86, -85.86, -85.96, -85.99, -86.05,
-        -86.05, -86.18, -86.15, -86.28, -86.25, -86.22, -86.34, -86.37, -86.44, -86.31,
-        -86.44, -86.57, -86.44, -86.54, -86.66, -86.66, -86.66, -86.76, -86.86, -86.86,
-        -86.73, -86.73, -86.60, -86.63, -86.73, -86.73, -86.76, -86.76, -86.76, -86.86,
-        -86.86, -87.08, -87.08, -87.08, -87.08, -87.08, -87.08, -87.05, -87.05, -87.05,
-        -87.05, -87.17, -87.27, -87.24, -87.24, -87.37, -87.49, -87.37, -87.24, -87.24,
-        -87.21, -87.34, -87.34, -87.31, -87.50, -87.53, -87.53, -87.63, -87.66, -87.63,
-        -87.63, -87.66, -87.75, -87.75, -87.53, -87.66, -87.78, -87.63, -87.53, -87.74,
-        -87.53, -87.53, -87.72, -87.53, -87.72, -87.63, -87.50, -87.63, -87.53, -87.50,
-        -87.53, -87.38, -87.53, -87.44, -87.44, -87.56, -87.46, -87.59, -87.59, -87.37,
-        -87.46, -87.49, -87.27, -87.27, -87.15, -87.15, -87.02, -87.15, -87.15, -87.17,
-        -86.95, -87.05, -87.08, -86.98, -86.98, -86.91, -86.79, -86.66, -86.76, -86.76,
-        -86.57, -86.47, -86.47, -86.31, -86.22, -86.18, -86.08, -85.83, -85.86, -85.89,
-        -85.76, -85.64, -85.67, -85.70, -85.60, -85.70, -85.50, -85.25, -85.28, -85.31,
-        -85.31, -85.21, -84.87, -84.77, -84.70, -84.80, -84.59, -84.48, -84.48, -84.23,
-        -84.26, -84.19, -84.19, -84.06, -83.84, -83.87, -83.84, -83.78, -83.65, -83.68,
-        -83.71, -83.64, -83.61, -83.51, -83.54, -83.38, -83.35, -83.22, -83.25, -83.13,
-        -83.03, -83.00, -82.88, -82.75, -82.78, -82.68, -82.65, -82.46, -82.49, -82.24,
-        -82.39, -82.24, -82.37, -82.27, -82.27, -82.14, -82.14, -82.14, -82.11, -82.02,
-        -82.14, -81.92, -81.89, -82.05, -81.95, -81.82, -81.95, -81.95, -81.86, -81.81,
-        -81.92, -81.92, -81.89, -81.80, -81.77, -81.77, -81.67, -81.64, -81.64, -81.67,
-        -81.67, -81.54, -81.57, -81.57, -81.32, -81.45, -81.45, -81.32, -81.42, -81.45,
-        -81.45, -81.29, -81.32, -81.07, -81.10, -80.97, -80.75, -80.78, -80.66, -80.46,
-        -80.49, -80.37, -80.40, -80.05, -80.17, -80.17, -79.83, -79.83, -79.60, -79.60,
-        -79.41, -79.09, -79.09, -78.93, -78.71, -78.54, -78.32, -78.13, -77.90, -77.49,
-        -77.20, -77.01, -76.72
+        -4288, -4300,
+        -4275, -4285, -4310, -4307, -4329, -4339, -4358, -4378, -4375, -4429,
+        -4426, -4433, -4474, -4487, -4481, -4522, -4522, -4548, -4548, -4558,
+        -4571, -4597, -4606, -4606, -4606, -4635, -4648, -4635, -4679, -4689,
+        -4712, -4706, -4738, -4760, -4782, -4792, -4818, -4830, -4840, -4857,
+        -4869, -4886, -4895, -4908, -4914, -4934, -4943, -4966, -4960, -4985,
+        -5004, -5004, -5027, -5043, -5043, -5033, -5084, -5082, -5091, -5111,
+        -5133, -5139, -5149, -5171, -5200, -5197, -5197, -5232, -5242, -5246,
+        -5270, -5271, -5271, -5299, -5290, -5300, -5310, -5329, -5351, -5351,
+        -5380, -5377, -5399, -5409, -5416, -5438, -5445, -5454, -5467, -5461,
+        -5474, -5493, -5505, -5500, -5522, -5534, -5541, -5554, -5573, -5583,
+        -5602, -5621, -5644, -5641, -5663, -5663, -5675, -5685, -5682, -5707,
+        -5714, -5714, -5714, -5736, -5746, -5746, -5768, -5772, -5782, -5794,
+        -5810, -5820, -5817, -5840, -5864, -5874, -5884, -5884, -5906, -5923,
+        -5935, -5935, -5957, -5964, -5964, -5964, -5984, -5993, -5993, -6015,
+        -6012, -6044, -6032, -6051, -6064, -6067, -6073, -6086, -6098, -6105,
+        -6102, -6112, -6125, -6119, -6128, -6153, -6151, -6182, -6180, -6192,
+        -6211, -6221, -6221, -6231, -6231, -6240, -6228, -6253, -6260, -6272,
+        -6294, -6292, -6317, -6301, -6323, -6323, -6330, -6337, -6362, -6347,
+        -6369, -6366, -6388, -6395, -6401, -6417, -6405, -6426, -6424, -6446,
+        -6446, -6461, -6468, -6478, -6488, -6500, -6519, -6532, -6542, -6561,
+        -6551, -6561, -6571, -6574, -6583, -6583, -6583, -6580, -6580, -6593,
+        -6600, -6597, -6619, -6616, -6638, -6648, -6673, -6658, -6683, -6705,
+        -6683, -6708, -6715, -6715, -6702, -6724, -6736, -6731, -6753, -6750,
+        -6760, -6770, -6770, -6782, -6779, -6801, -6807, -6804, -6824, -6825,
+        -6824, -6846, -6824, -6843, -6856, -6862, -6878, -6872, -6885, -6907,
+        -6904, -6916, -6929, -6929, -6929, -6926, -6936, -6933, -6945, -6945,
+        -6952, -6965, -6974, -6974, -6997, -6997, -7009, -7022, -7019, -7034,
+        -7028, -7048, -7041, -7048, -7058, -7057, -7057, -7045, -7067, -7076,
+        -7067, -7086, -7083, -7086, -7106, -7128, -7118, -7128, -7140, -7125,
+        -7144, -7160, -7144, -7160, -7157, -7169, -7172, -7179, -7192, -7201,
+        -7189, -7208, -7198, -7208, -7230, -7218, -7227, -7252, -7250, -7243,
+        -7262, -7256, -7252, -7275, -7287, -7284, -7297, -7307, -7304, -7313,
+        -7326, -7323, -7323, -7336, -7333, -7333, -7345, -7355, -7339, -7355,
+        -7364, -7349, -7364, -7384, -7371, -7384, -7384, -7395, -7384, -7393,
+        -7403, -7393, -7403, -7413, -7427, -7413, -7425, -7438, -7422, -7435,
+        -7448, -7460, -7457, -7463, -7480, -7479, -7479, -7489, -7492, -7488,
+        -7489, -7489, -7501, -7499, -7508, -7508, -7518, -7515, -7525, -7534,
+        -7547, -7537, -7547, -7550, -7569, -7574, -7560, -7569, -7557, -7591,
+        -7569, -7589, -7589, -7613, -7613, -7589, -7614, -7614, -7613, -7626,
+        -7623, -7623, -7642, -7655, -7643, -7652, -7672, -7677, -7665, -7687,
+        -7690, -7690, -7702, -7700, -7700, -7700, -7702, -7712, -7709, -7722,
+        -7719, -7731, -7741, -7731, -7738, -7741, -7751, -7751, -7751, -7760,
+        -7760, -7776, -7785, -7770, -7770, -7780, -7783, -7802, -7804, -7814,
+        -7802, -7802, -7812, -7824, -7823, -7812, -7834, -7834, -7834, -7831,
+        -7843, -7843, -7843, -7853, -7843, -7853, -7853, -7841, -7860, -7847,
+        -7847, -7882, -7870, -7872, -7895, -7895, -7895, -7903, -7905, -7905,
+        -7917, -7927, -7902, -7902, -7914, -7914, -7924, -7914, -7901, -7921,
+        -7924, -7914, -7924, -7933, -7936, -7939, -7958, -7946, -7952, -7971,
+        -7970, -7959, -7971, -7983, -7983, -7983, -7996, -7993, -7990, -8000,
+        -8012, -7990, -7990, -8000, -8000, -8000, -8012, -8000, -8012, -8010,
+        -8010, -8010, -8010, -8025, -8034, -8034, -8032, -8043, -8032, -8032,
+        -8042, -8032, -8032, -8044, -8054, -8053, -8051, -8054, -8064, -8064,
+        -8051, -8051, -8061, -8051, -8064, -8064, -8065, -8057, -8057, -8060,
+        -8067, -8067, -8076, -8067, -8067, -8067, -8066, -8054, -8054, -8064,
+        -8064, -8073, -8076, -8076, -8064, -8073, -8073, -8068, -8070, -8083,
+        -8083, -8098, -8098, -8086, -8096, -8098, -8098, -8098, -8098, -8098,
+        -8101, -8098, -8089, -8089, -8089, -8079, -8089, -8089, -8089, -8111,
+        -8111, -8111, -8111, -8114, -8114, -8114, -8116, -8117, -8107, -8107,
+        -8107, -8107, -8104, -8105, -8105, -8114, -8126, -8126, -8126, -8117,
+        -8129, -8129, -8129, -8126, -8120, -8129, -8129, -8114, -8117, -8129,
+        -8129, -8139, -8129, -8129, -8149, -8139, -8126, -8149, -8136, -8133,
+        -8158, -8152, -8165, -8168, -8162, -8155, -8168, -8162, -8165, -8162,
+        -8175, -8197, -8181, -8204, -8213, -8223, -8236, -8242, -8255, -8255,
+        -8280, -8277, -8274, -8287, -8303, -8303, -8303, -8332, -8332, -8329,
+        -8351, -8351, -8358, -8381, -8400, -8412, -8425, -8429, -8429, -8451,
+        -8458, -8458, -8467, -8487, -8499, -8499, -8518, -8531, -8531, -8541,
+        -8550, -8550, -8547, -8557, -8557, -8554, -8564, -8551, -8564, -8574,
+        -8576, -8586, -8586, -8599, -8599, -8593, -8596, -8583, -8593, -8580,
+        -8596, -8583, -8596, -8583, -8599, -8586, -8599, -8583, -8599, -8608,
+        -8599, -8599, -8611, -8608, -8599, -8608, -8589, -8583, -8586, -8576,
+        -8574, -8576, -8574, -8576, -8576, -8589, -8576, -8589, -8579, -8589,
+        -8579, -8576, -8579, -8579, -8579, -8599, -8589, -8579, -8599, -8576,
+        -8589, -8586, -8589, -8586, -8576, -8579, -8574, -8574, -8564, -8576,
+        -8576, -8576, -8579, -8579, -8586, -8586, -8586, -8596, -8599, -8605,
+        -8605, -8618, -8615, -8628, -8625, -8622, -8634, -8637, -8644, -8631,
+        -8644, -8657, -8644, -8654, -8666, -8666, -8666, -8676, -8686, -8686,
+        -8673, -8673, -8660, -8663, -8673, -8673, -8676, -8676, -8676, -8686,
+        -8686, -8708, -8708, -8708, -8708, -8708, -8708, -8705, -8705, -8705,
+        -8705, -8717, -8727, -8724, -8724, -8737, -8749, -8737, -8724, -8724,
+        -8721, -8734, -8734, -8731, -8750, -8753, -8753, -8763, -8766, -8763,
+        -8763, -8766, -8775, -8775, -8753, -8766, -8778, -8763, -8753, -8774,
+        -8753, -8753, -8772, -8753, -8772, -8763, -8750, -8763, -8753, -8750,
+        -8753, -8738, -8753, -8744, -8744, -8756, -8746, -8759, -8759, -8737,
+        -8746, -8749, -8727, -8727, -8715, -8715, -8702, -8715, -8715, -8717,
+        -8695, -8705, -8708, -8698, -8698, -8691, -8679, -8666, -8676, -8676,
+        -8657, -8647, -8647, -8631, -8622, -8618, -8608, -8583, -8586, -8589,
+        -8576, -8564, -8567, -8570, -8560, -8570, -8550, -8525, -8528, -8531,
+        -8531, -8521, -8487, -8477, -8470, -8480, -8459, -8448, -8448, -8423,
+        -8426, -8419, -8419, -8406, -8384, -8387, -8384, -8378, -8365, -8368,
+        -8371, -8364, -8361, -8351, -8354, -8338, -8335, -8322, -8325, -8313,
+        -8303, -8300, -8288, -8275, -8278, -8268, -8265, -8246, -8249, -8224,
+        -8239, -8224, -8237, -8227, -8227, -8214, -8214, -8214, -8211, -8202,
+        -8214, -8192, -8189, -8205, -8195, -8182, -8195, -8195, -8186, -8181,
+        -8192, -8192, -8189, -8180, -8177, -8177, -8167, -8164, -8164, -8167,
+        -8167, -8154, -8157, -8157, -8132, -8145, -8145, -8132, -8142, -8145,
+        -8145, -8129, -8132, -8107, -8110, -8097, -8075, -8078, -8066, -8046,
+        -8049, -8037, -8040, -8005, -8017, -8017, -7983, -7983, -7960, -7960,
+        -7941, -7909, -7909, -7893, -7871, -7854, -7832, -7813, -7790, -7749,
+        -7720, -7701, -7672
     };
 
-    static const float iso226_2023_curve_10_phons[985] =
+    static const int16_t iso226_2023_curve_10_phons[985] =
     {
-        -36.79, -36.92,
-        -36.76, -36.86, -37.11, -37.08, -37.40, -37.40, -37.50, -37.69, -37.66, -38.01,
-        -37.98, -37.95, -38.08, -38.30, -38.24, -38.37, -38.37, -38.53, -38.63, -38.53,
-        -38.75, -38.82, -39.01, -39.01, -38.92, -39.11, -39.24, -39.21, -39.45, -39.46,
-        -39.58, -39.62, -39.75, -39.87, -40.00, -40.00, -40.07, -40.29, -40.39, -40.36,
-        -40.48, -40.55, -40.65, -40.87, -40.74, -40.84, -40.94, -41.06, -41.10, -41.16,
-        -41.35, -41.35, -41.57, -41.54, -41.54, -41.64, -41.77, -41.74, -41.83, -42.03,
-        -42.06, -42.22, -42.22, -42.35, -42.54, -42.51, -42.51, -42.76, -42.76, -42.61,
-        -42.95, -42.95, -42.95, -43.14, -43.24, -43.34, -43.44, -43.63, -43.76, -43.76,
-        -43.85, -43.92, -44.05, -44.14, -44.02, -44.24, -44.31, -44.31, -44.43, -44.37,
-        -44.50, -44.60, -44.72, -44.66, -44.79, -44.92, -44.89, -45.11, -45.20, -45.30,
-        -45.20, -45.49, -45.62, -45.59, -45.81, -45.81, -45.94, -46.04, -46.01, -46.16,
-        -46.13, -46.32, -46.32, -46.45, -46.55, -46.55, -46.67, -46.62, -46.61, -46.64,
-        -46.71, -46.81, -46.78, -47.00, -47.24, -47.25, -47.45, -47.35, -47.47, -47.54,
-        -47.76, -47.76, -47.89, -47.96, -47.96, -48.15, -48.05, -48.25, -48.25, -48.47,
-        -48.34, -48.66, -48.54, -48.73, -48.76, -48.88, -48.95, -49.08, -49.11, -49.17,
-        -49.14, -49.24, -49.37, -49.31, -49.31, -49.56, -49.63, -49.75, -49.63, -49.85,
-        -49.95, -49.95, -50.14, -50.24, -50.24, -50.33, -50.21, -50.46, -50.53, -50.65,
-        -50.58, -50.75, -50.90, -50.85, -51.07, -51.07, -51.04, -51.01, -51.26, -51.20,
-        -51.42, -51.39, -51.52, -51.49, -51.65, -51.71, -51.68, -51.80, -51.88, -51.90,
-        -52.00, -52.25, -52.13, -52.32, -52.32, -52.54, -52.74, -52.77, -52.86, -53.06,
-        -53.06, -53.15, -53.25, -53.28, -53.37, -53.47, -53.47, -53.54, -53.54, -53.57,
-        -53.64, -53.61, -53.73, -53.61, -53.83, -54.02, -54.17, -54.21, -54.37, -54.59,
-        -54.47, -54.72, -54.69, -54.69, -54.66, -54.88, -54.91, -54.85, -55.07, -54.95,
-        -55.05, -55.14, -55.24, -55.36, -55.33, -55.46, -55.70, -55.68, -55.88, -55.89,
-        -55.88, -56.10, -56.07, -56.07, -56.19, -56.26, -56.51, -56.36, -56.48, -56.71,
-        -56.68, -56.90, -57.02, -57.02, -57.12, -57.19, -57.09, -57.16, -57.29, -57.29,
-        -57.35, -57.48, -57.67, -57.58, -57.80, -57.80, -57.92, -58.05, -58.02, -58.17,
-        -58.12, -58.31, -58.34, -58.31, -58.50, -58.50, -58.60, -58.47, -58.60, -58.79,
-        -58.70, -58.89, -58.86, -58.89, -59.08, -59.21, -59.21, -59.30, -59.43, -59.37,
-        -59.47, -59.62, -59.47, -59.72, -59.79, -59.91, -60.04, -60.01, -60.23, -60.23,
-        -60.11, -60.30, -60.30, -60.40, -60.62, -60.50, -60.59, -60.74, -60.81, -60.84,
-        -60.94, -61.07, -61.13, -61.16, -61.38, -61.45, -61.48, -61.57, -61.64, -61.54,
-        -61.67, -61.74, -61.74, -61.86, -61.83, -61.93, -61.96, -62.15, -62.00, -62.25,
-        -62.25, -62.19, -62.25, -62.44, -62.41, -62.44, -62.54, -62.75, -62.54, -62.73,
-        -62.82, -62.73, -62.93, -63.12, -63.26, -63.12, -63.34, -63.47, -63.31, -63.44,
-        -63.56, -63.69, -63.56, -63.72, -63.79, -63.78, -63.78, -63.98, -64.01, -64.07,
-        -64.07, -64.07, -64.20, -64.17, -64.37, -64.36, -64.46, -64.43, -64.53, -64.63,
-        -64.75, -64.75, -64.85, -64.88, -65.07, -65.11, -64.97, -65.17, -65.04, -65.29,
-        -65.26, -65.26, -65.36, -65.61, -65.61, -65.55, -65.71, -65.71, -65.90, -65.83,
-        -65.90, -66.00, -66.00, -66.12, -66.09, -66.09, -66.29, -66.44, -66.32, -66.54,
-        -66.66, -66.76, -66.79, -66.86, -66.86, -66.86, -66.98, -66.98, -67.05, -67.08,
-        -67.15, -67.17, -67.27, -67.37, -67.34, -67.46, -67.56, -67.46, -67.56, -67.56,
-        -67.66, -67.81, -67.90, -67.85, -67.95, -67.95, -68.07, -68.17, -68.19, -68.20,
-        -68.17, -68.17, -68.27, -68.39, -68.38, -68.36, -68.49, -68.58, -68.68, -68.65,
-        -68.78, -68.78, -68.87, -68.97, -68.97, -68.97, -69.07, -68.94, -68.94, -69.01,
-        -69.01, -69.16, -69.23, -69.26, -69.39, -69.48, -69.48, -69.56, -69.59, -69.68,
-        -69.80, -69.80, -69.65, -69.75, -69.87, -69.97, -69.97, -69.97, -69.94, -69.94,
-        -70.06, -70.06, -70.06, -70.26, -70.28, -70.41, -70.51, -70.38, -70.54, -70.63,
-        -70.62, -70.51, -70.63, -70.76, -70.76, -70.85, -70.98, -70.85, -71.02, -71.02,
-        -71.04, -71.02, -71.02, -71.02, -71.21, -71.21, -71.33, -71.21, -71.34, -71.21,
-        -71.21, -71.41, -71.31, -71.46, -71.65, -71.65, -71.53, -71.64, -71.53, -71.63,
-        -71.63, -71.63, -71.63, -71.66, -71.85, -71.84, -71.72, -71.95, -71.95, -71.95,
-        -71.92, -71.92, -72.01, -71.92, -72.04, -72.14, -72.25, -72.17, -72.17, -72.29,
-        -72.26, -72.26, -72.36, -72.26, -72.26, -72.36, -72.45, -72.33, -72.33, -72.43,
-        -72.52, -72.52, -72.56, -72.65, -72.52, -72.52, -72.52, -72.47, -72.50, -72.62,
-        -72.71, -72.87, -72.86, -72.75, -72.85, -72.87, -72.87, -72.87, -72.87, -72.97,
-        -73.00, -72.97, -72.97, -72.97, -72.97, -72.87, -72.87, -72.97, -72.97, -73.19,
-        -73.19, -73.19, -73.19, -73.22, -73.22, -73.22, -73.24, -73.25, -73.34, -73.34,
-        -73.34, -73.35, -73.32, -73.42, -73.42, -73.41, -73.54, -73.54, -73.44, -73.45,
-        -73.57, -73.47, -73.47, -73.44, -73.37, -73.47, -73.47, -73.41, -73.44, -73.57,
-        -73.47, -73.66, -73.57, -73.57, -73.76, -73.66, -73.54, -73.76, -73.73, -73.61,
-        -73.86, -73.80, -73.93, -73.95, -73.90, -73.92, -74.05, -73.90, -74.02, -74.09,
-        -74.12, -74.34, -74.19, -74.41, -74.50, -74.50, -74.63, -74.60, -74.73, -74.73,
-        -74.88, -74.76, -74.73, -74.85, -74.82, -74.82, -74.82, -75.01, -75.02, -74.99,
-        -75.21, -75.21, -75.18, -75.40, -75.40, -75.62, -75.75, -75.69, -75.79, -75.91,
-        -76.08, -76.08, -76.17, -76.27, -76.40, -76.40, -76.49, -76.62, -76.62, -76.72,
-        -76.72, -76.72, -76.69, -76.69, -76.69, -76.66, -76.75, -76.63, -76.66, -76.85,
-        -76.78, -76.88, -76.88, -76.91, -76.91, -76.85, -76.98, -76.85, -76.95, -76.82,
-        -76.98, -76.95, -77.07, -76.85, -77.10, -76.88, -77.01, -76.95, -77.01, -77.10,
-        -77.10, -77.01, -77.23, -77.01, -77.01, -77.10, -76.91, -76.75, -76.98, -76.88,
-        -76.75, -76.88, -76.85, -76.88, -76.88, -77.10, -76.88, -77.10, -76.91, -77.10,
-        -76.91, -76.88, -76.91, -76.81, -76.91, -76.91, -76.91, -76.91, -76.91, -76.88,
-        -76.91, -76.98, -76.91, -76.78, -76.88, -76.91, -76.75, -76.85, -76.66, -76.88,
-        -76.88, -76.69, -76.91, -76.91, -76.78, -76.98, -76.88, -76.98, -77.10, -76.98,
-        -77.17, -77.20, -77.07, -77.30, -77.17, -77.04, -77.27, -77.30, -77.17, -77.24,
-        -77.27, -77.30, -77.36, -77.36, -77.49, -77.58, -77.58, -77.58, -77.68, -77.68,
-        -77.56, -77.56, -77.53, -77.56, -77.56, -77.65, -77.68, -77.68, -77.68, -77.68,
-        -77.68, -77.81, -77.81, -77.81, -77.81, -77.81, -77.81, -77.78, -77.78, -77.78,
-        -77.78, -77.90, -78.00, -77.97, -77.97, -78.10, -78.22, -78.10, -78.07, -77.97,
-        -77.94, -78.07, -77.97, -77.94, -78.04, -78.16, -78.07, -78.16, -78.10, -78.07,
-        -78.07, -78.00, -78.10, -78.10, -77.97, -78.00, -78.13, -77.97, -77.87, -78.09,
-        -78.07, -77.97, -78.07, -78.07, -78.16, -78.07, -78.04, -78.16, -78.16, -78.04,
-        -78.07, -77.82, -78.07, -77.97, -77.88, -77.90, -78.00, -78.03, -78.03, -77.90,
-        -78.00, -78.03, -77.90, -78.00, -77.87, -77.87, -77.75, -77.78, -77.78, -77.90,
-        -77.68, -77.68, -77.71, -77.61, -77.61, -77.64, -77.61, -77.49, -77.49, -77.39,
-        -77.39, -77.49, -77.49, -77.24, -77.24, -77.30, -77.30, -77.14, -77.17, -77.20,
-        -77.07, -76.95, -77.07, -77.10, -77.01, -76.81, -76.81, -76.56, -76.69, -76.72,
-        -76.72, -76.62, -76.37, -76.37, -76.20, -76.30, -76.09, -76.08, -76.08, -75.63,
-        -75.76, -75.79, -75.60, -75.47, -75.34, -75.28, -75.25, -75.28, -75.15, -75.28,
-        -75.31, -75.33, -75.11, -75.11, -75.05, -75.17, -75.05, -74.92, -74.95, -74.82,
-        -74.82, -74.70, -74.57, -74.45, -74.48, -74.38, -74.25, -74.16, -74.19, -73.93,
-        -74.09, -73.84, -73.87, -73.77, -73.67, -73.64, -73.64, -73.64, -73.42, -73.52,
-        -73.55, -73.33, -73.20, -73.36, -73.16, -73.13, -73.16, -73.07, -72.98, -72.82,
-        -72.84, -72.75, -72.72, -72.52, -72.50, -72.40, -72.30, -72.27, -72.27, -72.11,
-        -72.11, -71.79, -71.82, -71.82, -71.47, -71.50, -71.40, -71.28, -71.18, -71.21,
-        -71.21, -70.96, -70.89, -70.64, -70.67, -70.45, -70.23, -70.35, -70.13, -69.94,
-        -70.06, -69.84, -69.77, -69.52, -69.65, -69.55, -69.20, -69.11, -68.98, -68.79,
-        -68.59, -68.37, -68.28, -68.11, -67.89, -67.82, -67.60, -67.50, -67.38, -67.25,
-        -66.96, -66.96, -66.87
+        -3679, -3692,
+        -3676, -3686, -3711, -3708, -3740, -3740, -3750, -3769, -3766, -3801,
+        -3798, -3795, -3808, -3830, -3824, -3837, -3837, -3853, -3863, -3853,
+        -3875, -3882, -3901, -3901, -3892, -3911, -3924, -3921, -3945, -3946,
+        -3958, -3962, -3975, -3987, -4000, -4000, -4007, -4029, -4039, -4036,
+        -4048, -4055, -4065, -4087, -4074, -4084, -4094, -4106, -4110, -4116,
+        -4135, -4135, -4157, -4154, -4154, -4164, -4177, -4174, -4183, -4203,
+        -4206, -4222, -4222, -4235, -4254, -4251, -4251, -4276, -4276, -4261,
+        -4295, -4295, -4295, -4314, -4324, -4334, -4344, -4363, -4376, -4376,
+        -4385, -4392, -4405, -4414, -4402, -4424, -4431, -4431, -4443, -4437,
+        -4450, -4460, -4472, -4466, -4479, -4492, -4489, -4511, -4520, -4530,
+        -4520, -4549, -4562, -4559, -4581, -4581, -4594, -4604, -4601, -4616,
+        -4613, -4632, -4632, -4645, -4655, -4655, -4667, -4662, -4661, -4664,
+        -4671, -4681, -4678, -4700, -4724, -4725, -4745, -4735, -4747, -4754,
+        -4776, -4776, -4789, -4796, -4796, -4815, -4805, -4825, -4825, -4847,
+        -4834, -4866, -4854, -4873, -4876, -4888, -4895, -4908, -4911, -4917,
+        -4914, -4924, -4937, -4931, -4931, -4956, -4963, -4975, -4963, -4985,
+        -4995, -4995, -5014, -5024, -5024, -5033, -5021, -5046, -5053, -5065,
+        -5058, -5075, -5090, -5085, -5107, -5107, -5104, -5101, -5126, -5120,
+        -5142, -5139, -5152, -5149, -5165, -5171, -5168, -5180, -5188, -5190,
+        -5200, -5225, -5213, -5232, -5232, -5254, -5274, -5277, -5286, -5306,
+        -5306, -5315, -5325, -5328, -5337, -5347, -5347, -5354, -5354, -5357,
+        -5364, -5361, -5373, -5361, -5383, -5402, -5417, -5421, -5437, -5459,
+        -5447, -5472, -5469, -5469, -5466, -5488, -5491, -5485, -5507, -5495,
+        -5505, -5514, -5524, -5536, -5533, -5546, -5570, -5568, -5588, -5589,
+        -5588, -5610, -5607, -5607, -5619, -5626, -5651, -5636, -5648, -5671,
+        -5668, -5690, -5702, -5702, -5712, -5719, -5709, -5716, -5729, -5729,
+        -5735, -5748, -5767, -5758, -5780, -5780, -5792, -5805, -5802, -5817,
+        -5812, -5831, -5834, -5831, -5850, -5850, -5860, -5847, -5860, -5879,
+        -5870, -5889, -5886, -5889, -5908, -5921, -5921, -5930, -5943, -5937,
+        -5947, -5962, -5947, -5972, -5979, -5991, -6004, -6001, -6023, -6023,
+        -6011, -6030, -6030, -6040, -6062, -6050, -6059, -6074, -6081, -6084,
+        -6094, -6107, -6113, -6116, -6138, -6145, -6148, -6157, -6164, -6154,
+        -6167, -6174, -6174, -6186, -6183, -6193, -6196, -6215, -6200, -6225,
+        -6225, -6219, -6225, -6244, -6241, -6244, -6254, -6275, -6254, -6273,
+        -6282, -6273, -6293, -6312, -6326, -6312, -6334, -6347, -6331, -6344,
+        -6356, -6369, -6356, -6372, -6379, -6378, -6378, -6398, -6401, -6407,
+        -6407, -6407, -6420, -6417, -6437, -6436, -6446, -6443, -6453, -6463,
+        -6475, -6475, -6485, -6488, -6507, -6511, -6497, -6517, -6504, -6529,
+        -6526, -6526, -6536, -6561, -6561, -6555, -6571, -6571, -6590, -6583,
+        -6590, -6600, -6600, -6612, -6609, -6609, -6629, -6644, -6632, -6654,
+        -6666, -6676, -6679, -6686, -6686, -6686, -6698, -6698, -6705, -6708,
+        -6715, -6717, -6727, -6737, -6734, -6746, -6756, -6746, -6756, -6756,
+        -6766, -6781, -6790, -6785, -6795, -6795, -6807, -6817, -6819, -6820,
+        -6817, -6817, -6827, -6839, -6838, -6836, -6849, -6858, -6868, -6865,
+        -6878, -6878, -6887, -6897, -6897, -6897, -6907, -6894, -6894, -6901,
+        -6901, -6916, -6923, -6926, -6939, -6948, -6948, -6956, -6959, -6968,
+        -6980, -6980, -6965, -6975, -6987, -6997, -6997, -6997, -6994, -6994,
+        -7006, -7006, -7006, -7026, -7028, -7041, -7051, -7038, -7054, -7063,
+        -7062, -7051, -7063, -7076, -7076, -7085, -7098, -7085, -7102, -7102,
+        -7104, -7102, -7102, -7102, -7121, -7121, -7133, -7121, -7134, -7121,
+        -7121, -7141, -7131, -7146, -7165, -7165, -7153, -7164, -7153, -7163,
+        -7163, -7163, -7163, -7166, -7185, -7184, -7172, -7195, -7195, -7195,
+        -7192, -7192, -7201, -7192, -7204, -7214, -7225, -7217, -7217, -7229,
+        -7226, -7226, -7236, -7226, -7226, -7236, -7245, -7233, -7233, -7243,
+        -7252, -7252, -7256, -7265, -7252, -7252, -7252, -7247, -7250, -7262,
+        -7271, -7287, -7286, -7275, -7285, -7287, -7287, -7287, -7287, -7297,
+        -7300, -7297, -7297, -7297, -7297, -7287, -7287, -7297, -7297, -7319,
+        -7319, -7319, -7319, -7322, -7322, -7322, -7324, -7325, -7334, -7334,
+        -7334, -7335, -7332, -7342, -7342, -7341, -7354, -7354, -7344, -7345,
+        -7357, -7347, -7347, -7344, -7337, -7347, -7347, -7341, -7344, -7357,
+        -7347, -7366, -7357, -7357, -7376, -7366, -7354, -7376, -7373, -7361,
+        -7386, -7380, -7393, -7395, -7390, -7392, -7405, -7390, -7402, -7409,
+        -7412, -7434, -7419, -7441, -7450, -7450, -7463, -7460, -7473, -7473,
+        -7488, -7476, -7473, -7485, -7482, -7482, -7482, -7501, -7502, -7499,
+        -7521, -7521, -7518, -7540, -7540, -7562, -7575, -7569, -7579, -7591,
+        -7608, -7608, -7617, -7627, -7640, -7640, -7649, -7662, -7662, -7672,
+        -7672, -7672, -7669, -7669, -7669, -7666, -7675, -7663, -7666, -7685,
+        -7678, -7688, -7688, -7691, -7691, -7685, -7698, -7685, -7695, -7682,
+        -7698, -7695, -7707, -7685, -7710, -7688, -7701, -7695, -7701, -7710,
+        -7710, -7701, -7723, -7701, -7701, -7710, -7691, -7675, -7698, -7688,
+        -7675, -7688, -7685, -7688, -7688, -7710, -7688, -7710, -7691, -7710,
+        -7691, -7688, -7691, -7681, -7691, -7691, -7691, -7691, -7691, -7688,
+        -7691, -7698, -7691, -7678, -7688, -7691, -7675, -7685, -7666, -7688,
+        -7688, -7669, -7691, -7691, -7678, -7698, -7688, -7698, -7710, -7698,
+        -7717, -7720, -7707, -7730, -7717, -7704, -7727, -7730, -7717, -7724,
+        -7727, -7730, -7736, -7736, -7749, -7758, -7758, -7758, -7768, -7768,
+        -7756, -7756, -7753, -7756, -7756, -7765, -7768, -7768, -7768, -7768,
+        -7768, -7781, -7781, -7781, -7781, -7781, -7781, -7778, -7778, -7778,
+        -7778, -7790, -7800, -7797, -7797, -7810, -7822, -7810, -7807, -7797,
+        -7794, -7807, -7797, -7794, -7804, -7816, -7807, -7816, -7810, -7807,
+        -7807, -7800, -7810, -7810, -7797, -7800, -7813, -7797, -7787, -7809,
+        -7807, -7797, -7807, -7807, -7816, -7807, -7804, -7816, -7816, -7804,
+        -7807, -7782, -7807, -7797, -7788, -7790, -7800, -7803, -7803, -7790,
+        -7800, -7803, -7790, -7800, -7787, -7787, -7775, -7778, -7778, -7790,
+        -7768, -7768, -7771, -7761, -7761, -7764, -7761, -7749, -7749, -7739,
+        -7739, -7749, -7749, -7724, -7724, -7730, -7730, -7714, -7717, -7720,
+        -7707, -7695, -7707, -7710, -7701, -7681, -7681, -7656, -7669, -7672,
+        -7672, -7662, -7637, -7637, -7620, -7630, -7609, -7608, -7608, -7563,
+        -7576, -7579, -7560, -7547, -7534, -7528, -7525, -7528, -7515, -7528,
+        -7531, -7533, -7511, -7511, -7505, -7517, -7505, -7492, -7495, -7482,
+        -7482, -7470, -7457, -7445, -7448, -7438, -7425, -7416, -7419, -7393,
+        -7409, -7384, -7387, -7377, -7367, -7364, -7364, -7364, -7342, -7352,
+        -7355, -7333, -7320, -7336, -7316, -7313, -7316, -7307, -7298, -7282,
+        -7284, -7275, -7272, -7252, -7250, -7240, -7230, -7227, -7227, -7211,
+        -7211, -7179, -7182, -7182, -7147, -7150, -7140, -7128, -7118, -7121,
+        -7121, -7096, -7089, -7064, -7067, -7045, -7023, -7035, -7013, -6994,
+        -7006, -6984, -6977, -6952, -6965, -6955, -6920, -6911, -6898, -6879,
+        -6859, -6837, -6828, -6811, -6789, -6782, -6760, -6750, -6738, -6725,
+        -6696, -6696, -6687
     };
 
-    static const float iso226_2023_curve_20_phons[985] =
+    static const int16_t iso226_2023_curve_20_phons[985] =
     {
-        -31.00, -31.12,
-        -30.97, -30.97, -31.22, -31.39, -31.41, -31.42, -31.61, -31.51, -31.39, -31.73,
-        -31.61, -31.58, -31.70, -31.83, -31.77, -31.90, -31.90, -32.06, -31.96, -32.06,
-        -32.09, -32.16, -32.25, -32.25, -32.25, -32.35, -32.57, -32.45, -32.78, -32.80,
-        -32.92, -32.86, -32.80, -33.02, -33.14, -33.14, -33.21, -33.34, -33.34, -33.50,
-        -33.53, -33.60, -33.69, -33.82, -33.79, -33.89, -33.79, -33.92, -33.86, -34.11,
-        -34.01, -34.11, -34.33, -34.30, -34.30, -34.30, -34.52, -34.50, -34.59, -34.69,
-        -34.91, -34.78, -34.88, -34.91, -35.01, -34.98, -34.88, -35.04, -35.13, -35.07,
-        -35.22, -35.23, -35.23, -35.41, -35.33, -35.33, -35.42, -35.52, -35.74, -35.84,
-        -35.93, -35.90, -36.03, -36.13, -36.00, -36.22, -36.19, -36.39, -36.42, -36.36,
-        -36.48, -36.58, -36.71, -36.55, -36.58, -36.80, -36.87, -36.90, -37.09, -37.09,
-        -37.09, -37.29, -37.41, -37.38, -37.70, -37.60, -37.73, -37.83, -37.80, -37.96,
-        -37.83, -37.92, -37.92, -38.05, -38.05, -38.05, -38.17, -38.12, -38.21, -38.24,
-        -38.40, -38.50, -38.47, -38.50, -38.74, -38.75, -38.95, -38.85, -38.98, -38.95,
-        -39.07, -39.17, -39.20, -39.17, -39.17, -39.27, -39.36, -39.36, -39.46, -39.68,
-        -39.65, -39.78, -39.85, -39.94, -39.97, -40.10, -40.16, -40.19, -40.22, -40.29,
-        -40.16, -40.17, -40.29, -40.23, -40.23, -40.48, -40.45, -40.68, -40.55, -40.77,
-        -40.87, -40.87, -40.97, -40.97, -41.06, -41.16, -40.94, -41.28, -41.35, -41.38,
-        -41.50, -41.57, -41.73, -41.57, -41.80, -41.80, -41.77, -41.83, -42.09, -41.93,
-        -42.15, -42.03, -42.15, -42.12, -42.38, -42.25, -42.22, -42.43, -42.22, -42.53,
-        -42.54, -42.79, -42.76, -42.66, -42.86, -42.98, -43.08, -43.21, -43.21, -43.40,
-        -43.40, -43.50, -43.50, -43.62, -43.72, -43.72, -43.81, -43.69, -43.79, -43.91,
-        -43.88, -43.76, -43.98, -43.85, -43.98, -44.17, -44.32, -44.17, -44.42, -44.64,
-        -44.62, -44.77, -44.74, -44.84, -44.81, -45.03, -45.06, -45.00, -45.13, -45.10,
-        -45.20, -45.29, -45.39, -45.51, -45.39, -45.61, -45.85, -45.74, -45.83, -45.95,
-        -45.93, -46.05, -46.03, -46.22, -46.25, -46.22, -46.47, -46.41, -46.54, -46.66,
-        -46.54, -46.76, -46.89, -46.98, -46.89, -46.95, -47.05, -47.12, -47.15, -47.24,
-        -47.31, -47.24, -47.44, -47.44, -47.56, -47.66, -47.78, -47.91, -47.88, -48.13,
-        -48.07, -48.08, -48.20, -48.17, -48.27, -48.17, -48.27, -48.14, -48.27, -48.36,
-        -48.36, -48.46, -48.43, -48.56, -48.65, -48.87, -48.78, -48.87, -49.10, -48.94,
-        -49.14, -49.29, -49.23, -49.39, -49.45, -49.58, -49.80, -49.68, -49.90, -49.90,
-        -49.87, -49.97, -49.87, -49.97, -50.19, -50.07, -50.26, -50.51, -50.38, -50.51,
-        -50.70, -50.64, -50.70, -50.83, -50.95, -50.92, -50.95, -51.05, -51.02, -51.11,
-        -51.24, -51.21, -51.31, -51.43, -51.31, -51.40, -51.43, -51.63, -51.38, -51.63,
-        -51.72, -51.57, -51.72, -51.92, -51.98, -51.92, -52.11, -52.23, -52.11, -52.21,
-        -52.30, -52.21, -52.30, -52.50, -52.64, -52.50, -52.72, -52.75, -52.59, -52.82,
-        -52.84, -52.97, -52.94, -53.09, -53.16, -53.16, -53.26, -53.36, -53.58, -53.44,
-        -53.55, -53.55, -53.67, -53.64, -53.74, -53.74, -53.84, -53.81, -53.91, -54.00,
-        -54.03, -54.13, -54.13, -54.25, -54.45, -54.49, -54.35, -54.45, -54.32, -54.67,
-        -54.45, -54.64, -54.74, -54.79, -54.99, -54.93, -55.08, -55.08, -55.27, -55.21,
-        -55.18, -55.28, -55.37, -55.40, -55.37, -55.47, -55.57, -55.82, -55.79, -55.92,
-        -56.04, -56.14, -56.17, -56.14, -56.14, -56.14, -56.26, -56.36, -56.33, -56.46,
-        -56.52, -56.55, -56.65, -56.65, -56.72, -56.74, -56.74, -56.84, -56.84, -56.94,
-        -57.04, -57.19, -57.28, -57.23, -57.13, -57.23, -57.26, -57.35, -57.57, -57.48,
-        -57.55, -57.55, -57.74, -57.77, -57.76, -57.84, -57.87, -57.87, -58.06, -57.93,
-        -58.15, -58.15, -58.06, -58.25, -58.15, -58.25, -58.25, -58.13, -58.32, -58.19,
-        -58.29, -58.63, -58.61, -58.64, -58.86, -58.86, -59.05, -58.94, -58.96, -59.06,
-        -59.18, -59.18, -59.13, -59.12, -59.15, -59.34, -59.34, -59.25, -59.31, -59.31,
-        -59.44, -59.44, -59.44, -59.63, -59.76, -59.88, -59.88, -59.95, -60.01, -60.01,
-        -60.10, -60.08, -60.11, -60.23, -60.33, -60.33, -60.55, -60.42, -60.40, -60.50,
-        -60.61, -60.40, -60.50, -60.59, -60.59, -60.59, -60.81, -60.69, -60.71, -60.78,
-        -60.78, -60.78, -60.78, -61.03, -61.03, -61.03, -61.10, -61.21, -61.10, -61.10,
-        -61.20, -61.10, -61.20, -61.23, -61.23, -61.41, -61.29, -61.32, -61.52, -61.52,
-        -61.39, -61.49, -61.58, -61.49, -61.81, -61.80, -61.82, -61.74, -61.93, -61.96,
-        -61.93, -62.03, -62.13, -62.03, -62.03, -62.12, -62.11, -62.00, -62.09, -62.09,
-        -62.09, -62.09, -62.31, -62.32, -62.19, -62.38, -62.38, -62.23, -62.26, -62.58,
-        -62.57, -62.63, -62.63, -62.61, -62.61, -62.73, -62.73, -62.73, -62.73, -62.74,
-        -62.95, -62.93, -62.83, -62.83, -62.83, -62.83, -62.83, -62.93, -62.93, -63.05,
-        -63.05, -63.14, -63.14, -63.27, -63.27, -63.27, -63.30, -63.30, -63.30, -63.30,
-        -63.30, -63.30, -63.27, -63.28, -63.28, -63.37, -63.59, -63.59, -63.59, -63.60,
-        -63.72, -63.62, -63.62, -63.59, -63.52, -63.62, -63.52, -63.47, -63.59, -63.72,
-        -63.72, -63.91, -63.91, -63.72, -63.91, -63.91, -63.78, -63.91, -63.88, -63.76,
-        -63.91, -63.85, -63.98, -64.01, -63.85, -63.98, -64.01, -63.85, -63.98, -64.05,
-        -64.07, -64.20, -64.14, -64.36, -64.36, -64.36, -64.49, -64.56, -64.59, -64.49,
-        -64.74, -64.71, -64.59, -64.62, -64.68, -64.68, -64.59, -64.77, -64.68, -64.65,
-        -64.78, -64.78, -64.75, -64.97, -64.97, -65.10, -65.13, -65.07, -65.07, -65.10,
-        -65.17, -65.17, -65.17, -65.26, -65.39, -65.39, -65.39, -65.51, -65.51, -65.61,
-        -65.61, -65.61, -65.48, -65.48, -65.68, -65.55, -65.65, -65.62, -65.65, -65.75,
-        -65.68, -65.68, -65.68, -65.71, -65.80, -65.65, -65.68, -65.65, -65.65, -65.62,
-        -65.77, -65.84, -65.77, -65.75, -66.00, -65.77, -65.90, -65.84, -65.90, -66.09,
-        -65.90, -65.90, -66.12, -65.90, -66.00, -66.00, -65.90, -65.75, -65.87, -65.77,
-        -65.75, -65.87, -65.75, -65.87, -65.97, -66.00, -65.97, -66.09, -66.00, -66.09,
-        -66.00, -65.97, -65.90, -66.00, -65.90, -66.09, -66.00, -66.09, -66.09, -65.87,
-        -66.09, -65.97, -66.00, -65.97, -65.97, -66.00, -65.84, -65.94, -65.84, -65.87,
-        -65.87, -65.87, -65.90, -65.90, -65.97, -65.97, -65.97, -66.06, -66.09, -66.06,
-        -66.16, -66.19, -66.26, -66.29, -66.16, -66.13, -66.26, -66.29, -66.16, -66.23,
-        -66.26, -66.29, -66.26, -66.35, -66.38, -66.48, -66.48, -66.48, -66.48, -66.48,
-        -66.35, -66.35, -66.23, -66.26, -66.26, -66.26, -66.38, -66.38, -66.38, -66.48,
-        -66.48, -66.60, -66.60, -66.60, -66.60, -66.60, -66.60, -66.57, -66.58, -66.48,
-        -66.48, -66.60, -66.60, -66.58, -66.58, -66.70, -66.83, -66.70, -66.67, -66.67,
-        -66.64, -66.68, -66.67, -66.64, -66.74, -66.67, -66.67, -66.77, -66.70, -66.67,
-        -66.67, -66.70, -66.70, -66.70, -66.67, -66.60, -66.73, -66.67, -66.48, -66.69,
-        -66.48, -66.38, -66.48, -66.48, -66.48, -66.48, -66.35, -66.48, -66.48, -66.45,
-        -66.48, -66.42, -66.67, -66.48, -66.58, -66.70, -66.70, -66.73, -66.73, -66.60,
-        -66.51, -66.63, -66.60, -66.60, -66.38, -66.48, -66.35, -66.38, -66.38, -66.51,
-        -66.29, -66.38, -66.51, -66.41, -66.41, -66.44, -66.41, -66.29, -66.29, -66.19,
-        -66.19, -66.19, -66.29, -66.04, -66.04, -66.09, -66.09, -66.04, -66.06, -66.09,
-        -65.97, -65.75, -65.97, -66.00, -65.80, -65.80, -65.90, -65.65, -65.68, -65.71,
-        -65.80, -65.80, -65.46, -65.55, -65.68, -65.68, -65.47, -65.36, -65.36, -65.01,
-        -65.04, -64.97, -64.97, -64.85, -64.72, -64.75, -64.82, -64.75, -64.63, -64.75,
-        -64.78, -64.81, -64.68, -64.59, -64.71, -64.74, -64.62, -64.49, -64.52, -64.39,
-        -64.30, -64.17, -64.05, -64.02, -64.05, -64.05, -63.82, -63.63, -63.66, -63.41,
-        -63.56, -63.31, -63.34, -63.24, -63.34, -63.12, -63.02, -63.02, -62.80, -62.80,
-        -62.83, -62.70, -62.48, -62.64, -62.54, -62.32, -62.44, -62.35, -62.26, -62.01,
-        -62.12, -61.93, -61.81, -61.71, -61.58, -61.49, -61.39, -61.26, -61.26, -61.10,
-        -61.10, -60.97, -60.81, -60.81, -60.56, -60.58, -60.49, -60.27, -60.17, -60.20,
-        -60.11, -59.85, -59.79, -59.63, -59.66, -59.44, -59.31, -59.34, -59.12, -58.93,
-        -59.05, -58.83, -58.76, -58.61, -58.64, -58.54, -58.20, -58.19, -57.97, -57.78,
-        -57.68, -57.36, -57.17, -57.10, -56.78, -56.62, -56.49, -56.40, -56.08, -55.95,
-        -55.86, -55.66, -55.57
+        -3100, -3112,
+        -3097, -3097, -3122, -3139, -3141, -3142, -3161, -3151, -3139, -3173,
+        -3161, -3158, -3170, -3183, -3177, -3190, -3190, -3206, -3196, -3206,
+        -3209, -3216, -3225, -3225, -3225, -3235, -3257, -3245, -3278, -3280,
+        -3292, -3286, -3280, -3302, -3314, -3314, -3321, -3334, -3334, -3350,
+        -3353, -3360, -3369, -3382, -3379, -3389, -3379, -3392, -3386, -3411,
+        -3401, -3411, -3433, -3430, -3430, -3430, -3452, -3450, -3459, -3469,
+        -3491, -3478, -3488, -3491, -3501, -3498, -3488, -3504, -3513, -3507,
+        -3522, -3523, -3523, -3541, -3533, -3533, -3542, -3552, -3574, -3584,
+        -3593, -3590, -3603, -3613, -3600, -3622, -3619, -3639, -3642, -3636,
+        -3648, -3658, -3671, -3655, -3658, -3680, -3687, -3690, -3709, -3709,
+        -3709, -3729, -3741, -3738, -3770, -3760, -3773, -3783, -3780, -3796,
+        -3783, -3792, -3792, -3805, -3805, -3805, -3817, -3812, -3821, -3824,
+        -3840, -3850, -3847, -3850, -3874, -3875, -3895, -3885, -3898, -3895,
+        -3907, -3917, -3920, -3917, -3917, -3927, -3936, -3936, -3946, -3968,
+        -3965, -3978, -3985, -3994, -3997, -4010, -4016, -4019, -4022, -4029,
+        -4016, -4017, -4029, -4023, -4023, -4048, -4045, -4068, -4055, -4077,
+        -4087, -4087, -4097, -4097, -4106, -4116, -4094, -4128, -4135, -4138,
+        -4150, -4157, -4173, -4157, -4180, -4180, -4177, -4183, -4209, -4193,
+        -4215, -4203, -4215, -4212, -4238, -4225, -4222, -4243, -4222, -4253,
+        -4254, -4279, -4276, -4266, -4286, -4298, -4308, -4321, -4321, -4340,
+        -4340, -4350, -4350, -4362, -4372, -4372, -4381, -4369, -4379, -4391,
+        -4388, -4376, -4398, -4385, -4398, -4417, -4432, -4417, -4442, -4464,
+        -4462, -4477, -4474, -4484, -4481, -4503, -4506, -4500, -4513, -4510,
+        -4520, -4529, -4539, -4551, -4539, -4561, -4585, -4574, -4583, -4595,
+        -4593, -4605, -4603, -4622, -4625, -4622, -4647, -4641, -4654, -4666,
+        -4654, -4676, -4689, -4698, -4689, -4695, -4705, -4712, -4715, -4724,
+        -4731, -4724, -4744, -4744, -4756, -4766, -4778, -4791, -4788, -4813,
+        -4807, -4808, -4820, -4817, -4827, -4817, -4827, -4814, -4827, -4836,
+        -4836, -4846, -4843, -4856, -4865, -4887, -4878, -4887, -4910, -4894,
+        -4914, -4929, -4923, -4939, -4945, -4958, -4980, -4968, -4990, -4990,
+        -4987, -4997, -4987, -4997, -5019, -5007, -5026, -5051, -5038, -5051,
+        -5070, -5064, -5070, -5083, -5095, -5092, -5095, -5105, -5102, -5111,
+        -5124, -5121, -5131, -5143, -5131, -5140, -5143, -5163, -5138, -5163,
+        -5172, -5157, -5172, -5192, -5198, -5192, -5211, -5223, -5211, -5221,
+        -5230, -5221, -5230, -5250, -5264, -5250, -5272, -5275, -5259, -5282,
+        -5284, -5297, -5294, -5309, -5316, -5316, -5326, -5336, -5358, -5344,
+        -5355, -5355, -5367, -5364, -5374, -5374, -5384, -5381, -5391, -5400,
+        -5403, -5413, -5413, -5425, -5445, -5449, -5435, -5445, -5432, -5467,
+        -5445, -5464, -5474, -5479, -5499, -5493, -5508, -5508, -5527, -5521,
+        -5518, -5528, -5537, -5540, -5537, -5547, -5557, -5582, -5579, -5592,
+        -5604, -5614, -5617, -5614, -5614, -5614, -5626, -5636, -5633, -5646,
+        -5652, -5655, -5665, -5665, -5672, -5674, -5674, -5684, -5684, -5694,
+        -5704, -5719, -5728, -5723, -5713, -5723, -5726, -5735, -5757, -5748,
+        -5755, -5755, -5774, -5777, -5776, -5784, -5787, -5787, -5806, -5793,
+        -5815, -5815, -5806, -5825, -5815, -5825, -5825, -5813, -5832, -5819,
+        -5829, -5863, -5861, -5864, -5886, -5886, -5905, -5894, -5896, -5906,
+        -5918, -5918, -5913, -5912, -5915, -5934, -5934, -5925, -5931, -5931,
+        -5944, -5944, -5944, -5963, -5976, -5988, -5988, -5995, -6001, -6001,
+        -6010, -6008, -6011, -6023, -6033, -6033, -6055, -6042, -6040, -6050,
+        -6061, -6040, -6050, -6059, -6059, -6059, -6081, -6069, -6071, -6078,
+        -6078, -6078, -6078, -6103, -6103, -6103, -6110, -6121, -6110, -6110,
+        -6120, -6110, -6120, -6123, -6123, -6141, -6129, -6132, -6152, -6152,
+        -6139, -6149, -6158, -6149, -6181, -6180, -6182, -6174, -6193, -6196,
+        -6193, -6203, -6213, -6203, -6203, -6212, -6211, -6200, -6209, -6209,
+        -6209, -6209, -6231, -6232, -6219, -6238, -6238, -6223, -6226, -6258,
+        -6257, -6263, -6263, -6261, -6261, -6273, -6273, -6273, -6273, -6274,
+        -6295, -6293, -6283, -6283, -6283, -6283, -6283, -6293, -6293, -6305,
+        -6305, -6314, -6314, -6327, -6327, -6327, -6330, -6330, -6330, -6330,
+        -6330, -6330, -6327, -6328, -6328, -6337, -6359, -6359, -6359, -6360,
+        -6372, -6362, -6362, -6359, -6352, -6362, -6352, -6347, -6359, -6372,
+        -6372, -6391, -6391, -6372, -6391, -6391, -6378, -6391, -6388, -6376,
+        -6391, -6385, -6398, -6401, -6385, -6398, -6401, -6385, -6398, -6405,
+        -6407, -6420, -6414, -6436, -6436, -6436, -6449, -6456, -6459, -6449,
+        -6474, -6471, -6459, -6462, -6468, -6468, -6459, -6477, -6468, -6465,
+        -6478, -6478, -6475, -6497, -6497, -6510, -6513, -6507, -6507, -6510,
+        -6517, -6517, -6517, -6526, -6539, -6539, -6539, -6551, -6551, -6561,
+        -6561, -6561, -6548, -6548, -6568, -6555, -6565, -6562, -6565, -6575,
+        -6568, -6568, -6568, -6571, -6580, -6565, -6568, -6565, -6565, -6562,
+        -6577, -6584, -6577, -6575, -6600, -6577, -6590, -6584, -6590, -6609,
+        -6590, -6590, -6612, -6590, -6600, -6600, -6590, -6575, -6587, -6577,
+        -6575, -6587, -6575, -6587, -6597, -6600, -6597, -6609, -6600, -6609,
+        -6600, -6597, -6590, -6600, -6590, -6609, -6600, -6609, -6609, -6587,
+        -6609, -6597, -6600, -6597, -6597, -6600, -6584, -6594, -6584, -6587,
+        -6587, -6587, -6590, -6590, -6597, -6597, -6597, -6606, -6609, -6606,
+        -6616, -6619, -6626, -6629, -6616, -6613, -6626, -6629, -6616, -6623,
+        -6626, -6629, -6626, -6635, -6638, -6648, -6648, -6648, -6648, -6648,
+        -6635, -6635, -6623, -6626, -6626, -6626, -6638, -6638, -6638, -6648,
+        -6648, -6660, -6660, -6660, -6660, -6660, -6660, -6657, -6658, -6648,
+        -6648, -6660, -6660, -6658, -6658, -6670, -6683, -6670, -6667, -6667,
+        -6664, -6668, -6667, -6664, -6674, -6667, -6667, -6677, -6670, -6667,
+        -6667, -6670, -6670, -6670, -6667, -6660, -6673, -6667, -6648, -6669,
+        -6648, -6638, -6648, -6648, -6648, -6648, -6635, -6648, -6648, -6645,
+        -6648, -6642, -6667, -6648, -6658, -6670, -6670, -6673, -6673, -6660,
+        -6651, -6663, -6660, -6660, -6638, -6648, -6635, -6638, -6638, -6651,
+        -6629, -6638, -6651, -6641, -6641, -6644, -6641, -6629, -6629, -6619,
+        -6619, -6619, -6629, -6604, -6604, -6609, -6609, -6604, -6606, -6609,
+        -6597, -6575, -6597, -6600, -6580, -6580, -6590, -6565, -6568, -6571,
+        -6580, -6580, -6546, -6555, -6568, -6568, -6547, -6536, -6536, -6501,
+        -6504, -6497, -6497, -6485, -6472, -6475, -6482, -6475, -6463, -6475,
+        -6478, -6481, -6468, -6459, -6471, -6474, -6462, -6449, -6452, -6439,
+        -6430, -6417, -6405, -6402, -6405, -6405, -6382, -6363, -6366, -6341,
+        -6356, -6331, -6334, -6324, -6334, -6312, -6302, -6302, -6280, -6280,
+        -6283, -6270, -6248, -6264, -6254, -6232, -6244, -6235, -6226, -6201,
+        -6212, -6193, -6181, -6171, -6158, -6149, -6139, -6126, -6126, -6110,
+        -6110, -6097, -6081, -6081, -6056, -6058, -6049, -6027, -6017, -6020,
+        -6011, -5985, -5979, -5963, -5966, -5944, -5931, -5934, -5912, -5893,
+        -5905, -5883, -5876, -5861, -5864, -5854, -5820, -5819, -5797, -5778,
+        -5768, -5736, -5717, -5710, -5678, -5662, -5649, -5640, -5608, -5595,
+        -5586, -5566, -5557
     };
 
-    static const float iso226_2023_curve_30_phons[985] =
+    static const int16_t iso226_2023_curve_30_phons[985] =
     {
-        -25.69, -25.81,
-        -25.76, -25.66, -25.91, -25.98, -26.10, -25.91, -26.01, -26.01, -25.98, -26.13,
-        -26.10, -26.07, -26.20, -26.33, -26.27, -26.39, -26.39, -26.36, -26.36, -26.36,
-        -26.49, -26.56, -26.56, -26.65, -26.65, -26.75, -26.97, -26.85, -27.09, -27.10,
-        -27.22, -26.97, -27.19, -27.32, -27.35, -27.25, -27.32, -27.54, -27.54, -27.61,
-        -27.64, -27.61, -27.71, -27.83, -27.71, -27.80, -27.80, -27.93, -27.87, -27.93,
-        -28.02, -28.02, -28.15, -28.12, -28.02, -28.02, -28.34, -28.31, -28.22, -28.41,
-        -28.54, -28.51, -28.51, -28.63, -28.73, -28.70, -28.70, -28.95, -28.86, -28.80,
-        -29.04, -28.95, -28.95, -29.14, -29.15, -29.24, -29.34, -29.34, -29.46, -29.46,
-        -29.56, -29.53, -29.75, -29.85, -29.63, -29.85, -29.82, -29.92, -30.04, -29.89,
-        -29.92, -30.01, -30.14, -29.89, -30.01, -30.14, -30.21, -30.14, -30.24, -30.33,
-        -30.33, -30.53, -30.55, -30.53, -30.75, -30.65, -30.78, -30.87, -30.75, -30.90,
-        -30.87, -30.97, -30.97, -31.00, -31.10, -31.10, -31.32, -31.26, -31.26, -31.39,
-        -31.45, -31.45, -31.33, -31.55, -31.69, -31.61, -31.80, -31.80, -31.83, -31.90,
-        -31.93, -32.02, -32.15, -32.22, -32.02, -32.12, -32.22, -32.41, -32.41, -32.53,
-        -32.60, -32.73, -32.60, -32.70, -32.82, -32.95, -33.02, -32.95, -33.08, -33.14,
-        -33.11, -33.02, -33.14, -33.09, -32.99, -33.24, -33.21, -33.34, -33.21, -33.43,
-        -33.34, -33.43, -33.53, -33.63, -33.63, -33.63, -33.60, -33.85, -33.92, -34.04,
-        -33.97, -34.04, -34.29, -34.14, -34.26, -34.17, -34.23, -34.21, -34.46, -34.21,
-        -34.43, -34.40, -34.62, -34.50, -34.65, -34.72, -34.69, -34.90, -34.69, -34.90,
-        -35.01, -35.06, -35.13, -35.13, -35.23, -35.35, -35.35, -35.48, -35.67, -35.77,
-        -35.67, -35.77, -35.77, -35.90, -35.80, -35.90, -35.90, -35.96, -35.87, -35.99,
-        -36.06, -36.03, -36.16, -36.03, -36.16, -36.35, -36.50, -36.45, -36.70, -36.73,
-        -36.60, -36.95, -36.82, -36.92, -36.89, -37.02, -37.14, -36.99, -37.11, -37.08,
-        -37.08, -37.08, -37.08, -37.31, -37.28, -37.31, -37.55, -37.53, -37.72, -37.74,
-        -37.72, -37.94, -37.91, -37.91, -38.04, -38.01, -38.16, -38.11, -38.14, -38.36,
-        -38.23, -38.36, -38.58, -38.68, -38.58, -38.65, -38.65, -38.62, -38.74, -38.84,
-        -38.81, -38.94, -39.03, -39.03, -39.26, -39.26, -39.38, -39.41, -39.38, -39.63,
-        -39.48, -39.57, -39.60, -39.57, -39.77, -39.67, -39.77, -39.74, -39.86, -39.95,
-        -39.96, -40.06, -40.03, -40.15, -40.25, -40.38, -40.38, -40.38, -40.50, -40.35,
-        -40.54, -40.60, -40.54, -40.69, -40.76, -40.79, -41.01, -40.98, -41.11, -41.11,
-        -41.08, -41.27, -41.08, -41.27, -41.40, -41.28, -41.37, -41.53, -41.50, -41.53,
-        -41.62, -41.76, -41.72, -41.84, -41.97, -42.04, -42.07, -42.16, -42.13, -42.13,
-        -42.26, -42.23, -42.23, -42.36, -42.33, -42.33, -42.55, -42.55, -42.39, -42.65,
-        -42.74, -42.59, -42.74, -42.94, -42.81, -42.94, -42.94, -43.05, -42.94, -43.03,
-        -43.12, -43.03, -43.13, -43.32, -43.46, -43.32, -43.54, -43.57, -43.52, -43.64,
-        -43.86, -43.99, -43.86, -44.02, -44.09, -44.08, -44.08, -44.18, -44.31, -44.27,
-        -44.28, -44.37, -44.40, -44.37, -44.57, -44.57, -44.57, -44.54, -44.54, -44.73,
-        -44.85, -44.86, -44.86, -44.98, -45.08, -45.22, -45.08, -45.18, -45.15, -45.40,
-        -45.27, -45.37, -45.37, -45.62, -45.62, -45.47, -45.62, -45.62, -45.81, -45.84,
-        -45.81, -45.91, -46.01, -46.04, -46.01, -46.10, -46.20, -46.36, -46.32, -46.35,
-        -46.58, -46.58, -46.60, -46.67, -46.67, -46.67, -46.70, -46.89, -46.77, -46.99,
-        -46.87, -47.09, -47.09, -47.09, -47.06, -47.09, -47.28, -47.18, -47.18, -47.28,
-        -47.28, -47.53, -47.52, -47.47, -47.47, -47.57, -47.60, -47.70, -47.91, -47.82,
-        -47.89, -47.89, -47.99, -48.11, -48.10, -48.18, -48.21, -48.30, -48.40, -48.28,
-        -48.40, -48.50, -48.40, -48.59, -48.50, -48.50, -48.50, -48.47, -48.47, -48.34,
-        -48.54, -48.69, -48.57, -48.79, -48.91, -48.91, -49.11, -49.09, -49.11, -49.30,
-        -49.33, -49.33, -49.28, -49.27, -49.30, -49.40, -49.49, -49.40, -49.27, -49.46,
-        -49.49, -49.59, -49.59, -49.59, -49.81, -49.84, -49.84, -49.81, -49.97, -49.97,
-        -50.15, -50.03, -50.16, -50.28, -50.28, -50.38, -50.51, -50.38, -50.35, -50.45,
-        -50.47, -50.35, -50.35, -50.45, -50.55, -50.55, -50.57, -50.64, -50.67, -50.55,
-        -50.74, -50.74, -50.83, -50.99, -51.08, -51.18, -51.06, -51.36, -51.25, -51.25,
-        -51.35, -51.25, -51.25, -51.28, -51.28, -51.27, -51.25, -51.28, -51.28, -51.47,
-        -51.35, -51.35, -51.54, -51.44, -51.57, -51.76, -51.78, -51.69, -51.79, -51.92,
-        -51.89, -51.98, -52.08, -51.98, -52.08, -52.18, -52.17, -52.05, -52.05, -52.15,
-        -52.06, -52.24, -52.27, -52.27, -52.24, -52.34, -52.34, -52.19, -52.31, -52.44,
-        -52.53, -52.59, -52.58, -52.47, -52.47, -52.50, -52.59, -52.59, -52.69, -52.69,
-        -52.72, -52.79, -52.69, -52.69, -52.79, -52.69, -52.69, -52.79, -52.79, -53.00,
-        -53.00, -53.00, -53.01, -53.04, -53.13, -53.13, -53.16, -53.16, -53.16, -53.16,
-        -53.16, -53.16, -53.13, -53.14, -53.14, -53.23, -53.36, -53.36, -53.36, -53.36,
-        -53.48, -53.48, -53.48, -53.45, -53.48, -53.48, -53.48, -53.42, -53.45, -53.58,
-        -53.48, -53.67, -53.67, -53.58, -53.77, -53.77, -53.64, -53.87, -53.84, -53.62,
-        -53.87, -53.81, -53.84, -53.87, -53.81, -53.74, -53.87, -53.71, -53.74, -53.81,
-        -53.84, -53.96, -53.91, -53.93, -54.03, -54.13, -54.06, -54.13, -54.25, -54.16,
-        -54.31, -54.28, -54.25, -54.19, -54.25, -54.25, -54.06, -54.25, -54.25, -54.13,
-        -54.35, -54.25, -54.22, -54.45, -54.35, -54.48, -54.50, -54.45, -54.45, -54.57,
-        -54.64, -54.64, -54.63, -54.64, -54.77, -54.77, -54.77, -54.89, -54.89, -54.89,
-        -54.98, -54.99, -54.86, -54.86, -54.96, -54.93, -54.93, -54.80, -55.03, -55.03,
-        -54.96, -55.05, -55.05, -55.08, -55.08, -55.03, -55.05, -54.93, -55.03, -54.90,
-        -55.15, -55.12, -55.15, -55.03, -55.28, -55.05, -55.18, -55.03, -55.18, -55.28,
-        -55.28, -55.28, -55.40, -55.28, -55.28, -55.37, -55.18, -55.03, -55.25, -55.05,
-        -55.03, -55.15, -55.12, -55.15, -55.15, -55.37, -55.25, -55.37, -55.28, -55.28,
-        -55.28, -55.15, -55.28, -55.18, -55.18, -55.28, -55.18, -55.28, -55.28, -55.15,
-        -55.28, -55.15, -55.08, -55.15, -55.15, -55.28, -55.12, -55.22, -55.03, -55.25,
-        -55.25, -55.05, -55.18, -55.28, -55.15, -55.25, -55.25, -55.25, -55.47, -55.34,
-        -55.44, -55.57, -55.44, -55.57, -55.54, -55.41, -55.63, -55.66, -55.63, -55.61,
-        -55.63, -55.66, -55.54, -55.64, -55.76, -55.76, -55.76, -55.76, -55.76, -55.76,
-        -55.63, -55.63, -55.51, -55.63, -55.63, -55.63, -55.66, -55.66, -55.66, -55.66,
-        -55.66, -55.79, -55.79, -55.79, -55.79, -55.79, -55.79, -55.76, -55.76, -55.66,
-        -55.66, -55.79, -55.79, -55.76, -55.76, -55.79, -55.91, -55.79, -55.66, -55.66,
-        -55.54, -55.66, -55.57, -55.54, -55.63, -55.66, -55.66, -55.76, -55.69, -55.66,
-        -55.66, -55.69, -55.79, -55.69, -55.66, -55.79, -55.72, -55.66, -55.66, -55.68,
-        -55.66, -55.66, -55.76, -55.66, -55.76, -55.76, -55.54, -55.66, -55.66, -55.54,
-        -55.66, -55.51, -55.66, -55.57, -55.57, -55.69, -55.60, -55.62, -55.82, -55.60,
-        -55.69, -55.82, -55.69, -55.79, -55.57, -55.57, -55.54, -55.57, -55.57, -55.69,
-        -55.47, -55.57, -55.69, -55.60, -55.69, -55.72, -55.60, -55.57, -55.47, -55.37,
-        -55.37, -55.47, -55.47, -55.22, -55.22, -55.47, -55.47, -55.22, -55.25, -55.28,
-        -55.15, -55.12, -55.15, -55.28, -55.28, -55.28, -55.28, -54.93, -54.96, -55.08,
-        -54.99, -55.08, -54.74, -54.74, -54.77, -54.86, -54.75, -54.64, -54.64, -54.39,
-        -54.51, -54.45, -54.45, -54.32, -54.29, -54.42, -54.39, -54.32, -54.29, -54.22,
-        -54.35, -54.38, -54.25, -54.16, -54.19, -54.21, -54.09, -53.96, -54.09, -53.96,
-        -53.87, -53.74, -53.71, -53.68, -53.71, -53.71, -53.59, -53.39, -53.42, -53.17,
-        -53.33, -53.08, -53.10, -52.91, -53.10, -52.88, -52.79, -52.79, -52.66, -52.66,
-        -52.69, -52.47, -52.24, -52.30, -52.30, -52.08, -52.21, -52.11, -51.92, -51.68,
-        -51.69, -51.69, -51.47, -51.47, -51.25, -51.25, -51.25, -51.03, -51.03, -51.06,
-        -50.96, -50.74, -50.77, -50.67, -50.42, -50.35, -50.35, -50.23, -50.03, -50.06,
-        -50.06, -49.81, -49.74, -49.49, -49.52, -49.30, -49.08, -49.20, -48.98, -48.79,
-        -49.01, -48.79, -48.72, -48.47, -48.50, -48.50, -48.15, -48.15, -47.93, -47.73,
-        -47.73, -47.51, -47.32, -47.35, -47.13, -47.06, -46.84, -46.74, -46.61, -46.39,
-        -46.20, -46.20, -46.10
+        -2569, -2581,
+        -2576, -2566, -2591, -2598, -2610, -2591, -2601, -2601, -2598, -2613,
+        -2610, -2607, -2620, -2633, -2627, -2639, -2639, -2636, -2636, -2636,
+        -2649, -2656, -2656, -2665, -2665, -2675, -2697, -2685, -2709, -2710,
+        -2722, -2697, -2719, -2732, -2735, -2725, -2732, -2754, -2754, -2761,
+        -2764, -2761, -2771, -2783, -2771, -2780, -2780, -2793, -2787, -2793,
+        -2802, -2802, -2815, -2812, -2802, -2802, -2834, -2831, -2822, -2841,
+        -2854, -2851, -2851, -2863, -2873, -2870, -2870, -2895, -2886, -2880,
+        -2904, -2895, -2895, -2914, -2915, -2924, -2934, -2934, -2946, -2946,
+        -2956, -2953, -2975, -2985, -2963, -2985, -2982, -2992, -3004, -2989,
+        -2992, -3001, -3014, -2989, -3001, -3014, -3021, -3014, -3024, -3033,
+        -3033, -3053, -3055, -3053, -3075, -3065, -3078, -3087, -3075, -3090,
+        -3087, -3097, -3097, -3100, -3110, -3110, -3132, -3126, -3126, -3139,
+        -3145, -3145, -3133, -3155, -3169, -3161, -3180, -3180, -3183, -3190,
+        -3193, -3202, -3215, -3222, -3202, -3212, -3222, -3241, -3241, -3253,
+        -3260, -3273, -3260, -3270, -3282, -3295, -3302, -3295, -3308, -3314,
+        -3311, -3302, -3314, -3309, -3299, -3324, -3321, -3334, -3321, -3343,
+        -3334, -3343, -3353, -3363, -3363, -3363, -3360, -3385, -3392, -3404,
+        -3397, -3404, -3429, -3414, -3426, -3417, -3423, -3421, -3446, -3421,
+        -3443, -3440, -3462, -3450, -3465, -3472, -3469, -3490, -3469, -3490,
+        -3501, -3506, -3513, -3513, -3523, -3535, -3535, -3548, -3567, -3577,
+        -3567, -3577, -3577, -3590, -3580, -3590, -3590, -3596, -3587, -3599,
+        -3606, -3603, -3616, -3603, -3616, -3635, -3650, -3645, -3670, -3673,
+        -3660, -3695, -3682, -3692, -3689, -3702, -3714, -3699, -3711, -3708,
+        -3708, -3708, -3708, -3731, -3728, -3731, -3755, -3753, -3772, -3774,
+        -3772, -3794, -3791, -3791, -3804, -3801, -3816, -3811, -3814, -3836,
+        -3823, -3836, -3858, -3868, -3858, -3865, -3865, -3862, -3874, -3884,
+        -3881, -3894, -3903, -3903, -3926, -3926, -3938, -3941, -3938, -3963,
+        -3948, -3957, -3960, -3957, -3977, -3967, -3977, -3974, -3986, -3995,
+        -3996, -4006, -4003, -4015, -4025, -4038, -4038, -4038, -4050, -4035,
+        -4054, -4060, -4054, -4069, -4076, -4079, -4101, -4098, -4111, -4111,
+        -4108, -4127, -4108, -4127, -4140, -4128, -4137, -4153, -4150, -4153,
+        -4162, -4176, -4172, -4184, -4197, -4204, -4207, -4216, -4213, -4213,
+        -4226, -4223, -4223, -4236, -4233, -4233, -4255, -4255, -4239, -4265,
+        -4274, -4259, -4274, -4294, -4281, -4294, -4294, -4305, -4294, -4303,
+        -4312, -4303, -4313, -4332, -4346, -4332, -4354, -4357, -4352, -4364,
+        -4386, -4399, -4386, -4402, -4409, -4408, -4408, -4418, -4431, -4427,
+        -4428, -4437, -4440, -4437, -4457, -4457, -4457, -4454, -4454, -4473,
+        -4485, -4486, -4486, -4498, -4508, -4522, -4508, -4518, -4515, -4540,
+        -4527, -4537, -4537, -4562, -4562, -4547, -4562, -4562, -4581, -4584,
+        -4581, -4591, -4601, -4604, -4601, -4610, -4620, -4636, -4632, -4635,
+        -4658, -4658, -4660, -4667, -4667, -4667, -4670, -4689, -4677, -4699,
+        -4687, -4709, -4709, -4709, -4706, -4709, -4728, -4718, -4718, -4728,
+        -4728, -4753, -4752, -4747, -4747, -4757, -4760, -4770, -4791, -4782,
+        -4789, -4789, -4799, -4811, -4810, -4818, -4821, -4830, -4840, -4828,
+        -4840, -4850, -4840, -4859, -4850, -4850, -4850, -4847, -4847, -4834,
+        -4854, -4869, -4857, -4879, -4891, -4891, -4911, -4909, -4911, -4930,
+        -4933, -4933, -4928, -4927, -4930, -4940, -4949, -4940, -4927, -4946,
+        -4949, -4959, -4959, -4959, -4981, -4984, -4984, -4981, -4997, -4997,
+        -5015, -5003, -5016, -5028, -5028, -5038, -5051, -5038, -5035, -5045,
+        -5047, -5035, -5035, -5045, -5055, -5055, -5057, -5064, -5067, -5055,
+        -5074, -5074, -5083, -5099, -5108, -5118, -5106, -5136, -5125, -5125,
+        -5135, -5125, -5125, -5128, -5128, -5127, -5125, -5128, -5128, -5147,
+        -5135, -5135, -5154, -5144, -5157, -5176, -5178, -5169, -5179, -5192,
+        -5189, -5198, -5208, -5198, -5208, -5218, -5217, -5205, -5205, -5215,
+        -5206, -5224, -5227, -5227, -5224, -5234, -5234, -5219, -5231, -5244,
+        -5253, -5259, -5258, -5247, -5247, -5250, -5259, -5259, -5269, -5269,
+        -5272, -5279, -5269, -5269, -5279, -5269, -5269, -5279, -5279, -5300,
+        -5300, -5300, -5301, -5304, -5313, -5313, -5316, -5316, -5316, -5316,
+        -5316, -5316, -5313, -5314, -5314, -5323, -5336, -5336, -5336, -5336,
+        -5348, -5348, -5348, -5345, -5348, -5348, -5348, -5342, -5345, -5358,
+        -5348, -5367, -5367, -5358, -5377, -5377, -5364, -5387, -5384, -5362,
+        -5387, -5381, -5384, -5387, -5381, -5374, -5387, -5371, -5374, -5381,
+        -5384, -5396, -5391, -5393, -5403, -5413, -5406, -5413, -5425, -5416,
+        -5431, -5428, -5425, -5419, -5425, -5425, -5406, -5425, -5425, -5413,
+        -5435, -5425, -5422, -5445, -5435, -5448, -5450, -5445, -5445, -5457,
+        -5464, -5464, -5463, -5464, -5477, -5477, -5477, -5489, -5489, -5489,
+        -5498, -5499, -5486, -5486, -5496, -5493, -5493, -5480, -5503, -5503,
+        -5496, -5505, -5505, -5508, -5508, -5503, -5505, -5493, -5503, -5490,
+        -5515, -5512, -5515, -5503, -5528, -5505, -5518, -5503, -5518, -5528,
+        -5528, -5528, -5540, -5528, -5528, -5537, -5518, -5503, -5525, -5505,
+        -5503, -5515, -5512, -5515, -5515, -5537, -5525, -5537, -5528, -5528,
+        -5528, -5515, -5528, -5518, -5518, -5528, -5518, -5528, -5528, -5515,
+        -5528, -5515, -5508, -5515, -5515, -5528, -5512, -5522, -5503, -5525,
+        -5525, -5505, -5518, -5528, -5515, -5525, -5525, -5525, -5547, -5534,
+        -5544, -5557, -5544, -5557, -5554, -5541, -5563, -5566, -5563, -5561,
+        -5563, -5566, -5554, -5564, -5576, -5576, -5576, -5576, -5576, -5576,
+        -5563, -5563, -5551, -5563, -5563, -5563, -5566, -5566, -5566, -5566,
+        -5566, -5579, -5579, -5579, -5579, -5579, -5579, -5576, -5576, -5566,
+        -5566, -5579, -5579, -5576, -5576, -5579, -5591, -5579, -5566, -5566,
+        -5554, -5566, -5557, -5554, -5563, -5566, -5566, -5576, -5569, -5566,
+        -5566, -5569, -5579, -5569, -5566, -5579, -5572, -5566, -5566, -5568,
+        -5566, -5566, -5576, -5566, -5576, -5576, -5554, -5566, -5566, -5554,
+        -5566, -5551, -5566, -5557, -5557, -5569, -5560, -5562, -5582, -5560,
+        -5569, -5582, -5569, -5579, -5557, -5557, -5554, -5557, -5557, -5569,
+        -5547, -5557, -5569, -5560, -5569, -5572, -5560, -5557, -5547, -5537,
+        -5537, -5547, -5547, -5522, -5522, -5547, -5547, -5522, -5525, -5528,
+        -5515, -5512, -5515, -5528, -5528, -5528, -5528, -5493, -5496, -5508,
+        -5499, -5508, -5474, -5474, -5477, -5486, -5475, -5464, -5464, -5439,
+        -5451, -5445, -5445, -5432, -5429, -5442, -5439, -5432, -5429, -5422,
+        -5435, -5438, -5425, -5416, -5419, -5421, -5409, -5396, -5409, -5396,
+        -5387, -5374, -5371, -5368, -5371, -5371, -5359, -5339, -5342, -5317,
+        -5333, -5308, -5310, -5291, -5310, -5288, -5279, -5279, -5266, -5266,
+        -5269, -5247, -5224, -5230, -5230, -5208, -5221, -5211, -5192, -5168,
+        -5169, -5169, -5147, -5147, -5125, -5125, -5125, -5103, -5103, -5106,
+        -5096, -5074, -5077, -5067, -5042, -5035, -5035, -5023, -5003, -5006,
+        -5006, -4981, -4974, -4949, -4952, -4930, -4908, -4920, -4898, -4879,
+        -4901, -4879, -4872, -4847, -4850, -4850, -4815, -4815, -4793, -4773,
+        -4773, -4751, -4732, -4735, -4713, -4706, -4684, -4674, -4661, -4639,
+        -4620, -4620, -4610
     };
 
-    static const float iso226_2023_curve_40_phons[985] =
+    static const int16_t iso226_2023_curve_40_phons[985] =
     {
-        -20.67, -20.79,
-        -20.64, -20.64, -20.89, -20.76, -20.89, -20.89, -20.89, -20.89, -20.86, -21.01,
-        -20.98, -20.96, -20.98, -21.11, -20.96, -21.18, -21.18, -21.25, -21.15, -21.15,
-        -21.37, -21.34, -21.34, -21.34, -21.34, -21.44, -21.56, -21.44, -21.58, -21.79,
-        -21.82, -21.66, -21.98, -22.01, -22.04, -22.04, -22.11, -22.23, -22.23, -22.30,
-        -22.42, -22.20, -22.30, -22.42, -22.30, -22.30, -22.30, -22.42, -22.37, -22.52,
-        -22.42, -22.42, -22.65, -22.62, -22.62, -22.42, -22.65, -22.62, -22.71, -22.71,
-        -22.84, -22.91, -22.91, -23.03, -23.03, -23.00, -23.00, -23.25, -23.06, -23.00,
-        -23.25, -23.16, -23.16, -23.34, -23.35, -23.45, -23.45, -23.54, -23.67, -23.77,
-        -23.67, -23.64, -23.77, -23.86, -23.83, -23.86, -23.83, -23.93, -23.96, -23.80,
-        -23.93, -23.93, -23.96, -23.90, -24.03, -24.15, -24.22, -24.25, -24.35, -24.35,
-        -24.34, -24.54, -24.66, -24.44, -24.66, -24.66, -24.69, -24.69, -24.66, -24.72,
-        -24.79, -24.79, -24.79, -24.92, -24.82, -24.92, -25.04, -24.98, -24.89, -25.01,
-        -25.08, -25.18, -25.15, -25.37, -25.51, -25.43, -25.62, -25.62, -25.75, -25.81,
-        -25.75, -25.84, -25.87, -25.84, -25.84, -25.75, -25.84, -26.04, -26.04, -26.16,
-        -26.04, -26.26, -26.13, -26.13, -26.26, -26.38, -26.26, -26.38, -26.51, -26.38,
-        -26.35, -26.45, -26.48, -26.33, -26.42, -26.67, -26.55, -26.67, -26.64, -26.87,
-        -26.87, -26.87, -26.96, -26.96, -26.96, -27.06, -26.84, -27.09, -27.16, -27.18,
-        -27.21, -27.28, -27.44, -27.28, -27.50, -27.41, -27.38, -27.45, -27.60, -27.45,
-        -27.67, -27.64, -27.67, -27.64, -27.79, -27.86, -27.74, -27.95, -27.74, -27.95,
-        -28.05, -28.30, -28.18, -28.18, -28.28, -28.40, -28.40, -28.43, -28.43, -28.62,
-        -28.53, -28.53, -28.62, -28.75, -28.75, -28.75, -28.75, -28.62, -28.72, -28.85,
-        -28.72, -28.69, -28.91, -28.88, -28.91, -29.11, -29.35, -29.20, -29.36, -29.58,
-        -29.55, -29.61, -29.68, -29.68, -29.45, -29.68, -29.80, -29.55, -29.77, -29.74,
-        -29.84, -29.84, -29.84, -29.97, -29.84, -29.97, -30.21, -30.09, -30.19, -30.21,
-        -30.19, -30.41, -30.28, -30.48, -30.51, -30.48, -30.73, -30.57, -30.70, -30.83,
-        -30.70, -30.83, -30.95, -30.95, -31.05, -31.02, -31.02, -31.09, -31.02, -31.21,
-        -31.18, -31.21, -31.31, -31.40, -31.53, -31.53, -31.66, -31.78, -31.66, -31.81,
-        -31.75, -31.75, -31.88, -31.75, -31.85, -31.85, -31.85, -31.82, -31.95, -32.04,
-        -32.04, -32.04, -32.01, -32.14, -32.14, -32.26, -32.26, -32.36, -32.49, -32.33,
-        -32.43, -32.68, -32.52, -32.68, -32.65, -32.87, -33.00, -32.97, -33.19, -33.19,
-        -33.16, -33.26, -33.16, -33.16, -33.29, -33.17, -33.16, -33.41, -33.38, -33.41,
-        -33.51, -33.55, -33.51, -33.64, -33.76, -33.73, -33.76, -33.86, -33.93, -33.93,
-        -34.05, -34.02, -34.02, -34.05, -34.12, -34.12, -34.24, -34.34, -34.28, -34.34,
-        -34.44, -34.19, -34.44, -34.44, -34.50, -34.44, -34.63, -34.75, -34.53, -34.73,
-        -34.91, -34.82, -34.82, -34.82, -35.06, -34.82, -34.95, -35.07, -35.02, -35.05,
-        -35.17, -35.29, -35.07, -35.33, -35.30, -35.39, -35.30, -35.49, -35.61, -35.58,
-        -35.49, -35.59, -35.61, -35.59, -35.68, -35.78, -35.78, -35.65, -35.85, -35.85,
-        -36.07, -35.97, -35.97, -36.10, -36.19, -36.34, -36.19, -36.29, -36.26, -36.51,
-        -36.29, -36.48, -36.48, -36.64, -36.73, -36.58, -36.74, -36.74, -36.92, -36.86,
-        -36.83, -36.93, -37.02, -37.05, -36.93, -37.12, -37.12, -37.18, -37.25, -37.28,
-        -37.40, -37.50, -37.43, -37.60, -37.50, -37.50, -37.62, -37.62, -37.69, -37.72,
-        -37.79, -37.82, -38.01, -37.91, -37.79, -38.01, -38.01, -38.11, -38.01, -38.01,
-        -38.11, -38.26, -38.25, -38.30, -38.20, -38.20, -38.23, -38.43, -38.54, -38.55,
-        -38.43, -38.52, -38.62, -38.65, -38.83, -38.72, -38.84, -38.94, -38.94, -39.00,
-        -39.03, -39.13, -39.13, -39.13, -39.23, -39.23, -39.13, -39.10, -39.20, -39.07,
-        -39.27, -39.41, -39.29, -39.52, -39.55, -39.55, -39.74, -39.62, -39.65, -39.84,
-        -39.86, -39.96, -39.81, -39.81, -39.84, -40.03, -40.03, -39.93, -40.00, -40.00,
-        -40.03, -40.03, -40.13, -40.13, -40.15, -40.38, -40.38, -40.25, -40.41, -40.50,
-        -40.49, -40.38, -40.50, -40.63, -40.63, -40.72, -40.85, -40.72, -40.70, -40.89,
-        -40.91, -40.69, -40.80, -40.89, -40.89, -40.89, -41.11, -40.98, -41.02, -40.98,
-        -40.98, -41.08, -40.98, -41.14, -41.33, -41.33, -41.21, -41.42, -41.40, -41.40,
-        -41.40, -41.40, -41.50, -41.53, -41.62, -41.71, -41.59, -41.62, -41.62, -41.82,
-        -41.69, -41.69, -41.69, -41.60, -41.82, -41.81, -41.83, -41.84, -41.84, -41.87,
-        -41.94, -42.04, -42.04, -42.04, -42.04, -42.04, -42.12, -42.01, -42.01, -42.10,
-        -42.20, -42.20, -42.23, -42.33, -42.20, -42.20, -42.20, -42.05, -42.08, -42.29,
-        -42.29, -42.35, -42.35, -42.33, -42.33, -42.36, -42.45, -42.45, -42.55, -42.55,
-        -42.58, -42.65, -42.55, -42.65, -42.65, -42.65, -42.65, -42.65, -42.74, -42.86,
-        -42.86, -42.86, -42.86, -42.89, -42.89, -42.99, -43.02, -43.02, -43.12, -43.12,
-        -43.12, -43.12, -43.09, -43.10, -43.10, -43.19, -43.31, -43.31, -43.31, -43.32,
-        -43.44, -43.44, -43.44, -43.41, -43.34, -43.44, -43.44, -43.28, -43.31, -43.44,
-        -43.44, -43.53, -43.53, -43.44, -43.63, -43.63, -43.41, -43.63, -43.60, -43.38,
-        -43.63, -43.48, -43.51, -43.63, -43.57, -43.51, -43.63, -43.57, -43.51, -43.57,
-        -43.60, -43.73, -43.67, -43.89, -43.89, -43.89, -44.02, -43.89, -44.02, -44.02,
-        -44.07, -44.05, -44.02, -43.95, -44.02, -44.01, -43.82, -44.01, -43.92, -43.79,
-        -44.02, -44.02, -43.89, -44.02, -44.02, -44.14, -44.17, -44.11, -44.11, -44.24,
-        -44.21, -44.21, -44.21, -44.21, -44.34, -44.34, -44.34, -44.46, -44.46, -44.46,
-        -44.46, -44.56, -44.43, -44.43, -44.43, -44.31, -44.31, -44.28, -44.40, -44.40,
-        -44.43, -44.53, -44.43, -44.56, -44.65, -44.41, -44.53, -44.40, -44.50, -44.47,
-        -44.63, -44.60, -44.72, -44.50, -44.65, -44.63, -44.65, -44.60, -44.65, -44.75,
-        -44.75, -44.65, -44.88, -44.75, -44.75, -44.75, -44.65, -44.60, -44.72, -44.63,
-        -44.69, -44.63, -44.69, -44.72, -44.72, -44.85, -44.72, -44.85, -44.65, -44.85,
-        -44.65, -44.63, -44.65, -44.65, -44.65, -44.75, -44.75, -44.75, -44.85, -44.72,
-        -44.85, -44.72, -44.75, -44.72, -44.63, -44.85, -44.60, -44.69, -44.60, -44.63,
-        -44.72, -44.63, -44.65, -44.75, -44.72, -44.72, -44.63, -44.72, -44.85, -44.72,
-        -44.72, -44.94, -44.82, -44.85, -44.82, -44.79, -44.82, -44.94, -44.92, -44.79,
-        -44.92, -45.04, -44.92, -44.92, -45.14, -45.14, -45.14, -45.14, -45.14, -45.23,
-        -45.01, -45.01, -44.89, -44.92, -45.01, -45.01, -45.04, -45.04, -45.04, -45.04,
-        -45.04, -45.17, -45.17, -45.17, -45.17, -45.17, -45.17, -45.04, -45.04, -44.94,
-        -44.94, -45.07, -45.17, -45.14, -45.14, -45.26, -45.29, -45.17, -45.14, -45.14,
-        -45.11, -45.23, -45.04, -45.01, -45.11, -45.23, -45.04, -45.14, -45.26, -45.14,
-        -45.04, -45.17, -45.26, -45.07, -45.04, -45.17, -45.20, -45.04, -45.04, -45.15,
-        -45.04, -44.94, -45.04, -45.04, -45.04, -45.04, -44.82, -45.04, -45.04, -44.92,
-        -45.04, -44.89, -44.94, -44.94, -44.85, -44.97, -44.97, -45.00, -45.10, -44.97,
-        -44.97, -45.00, -44.88, -44.97, -44.85, -44.85, -44.82, -44.94, -44.94, -45.07,
-        -44.85, -45.04, -45.07, -44.97, -44.97, -45.10, -44.98, -44.94, -45.04, -44.94,
-        -44.85, -44.85, -44.94, -44.69, -44.69, -44.75, -44.85, -44.60, -44.63, -44.75,
-        -44.72, -44.60, -44.82, -44.85, -44.75, -44.75, -44.85, -44.60, -44.63, -44.75,
-        -44.75, -44.75, -44.40, -44.41, -44.43, -44.43, -44.42, -44.31, -44.31, -44.15,
-        -44.18, -44.21, -44.21, -44.08, -44.06, -44.18, -44.06, -44.08, -43.96, -43.99,
-        -44.02, -44.05, -43.92, -43.82, -44.05, -43.98, -43.85, -43.73, -43.85, -43.73,
-        -43.63, -43.51, -43.48, -43.35, -43.48, -43.38, -43.25, -43.16, -43.28, -43.03,
-        -43.09, -42.94, -42.96, -42.87, -42.96, -42.74, -42.74, -42.65, -42.42, -42.42,
-        -42.45, -42.33, -42.10, -42.26, -42.26, -42.04, -42.16, -42.07, -41.98, -41.82,
-        -41.84, -41.75, -41.62, -41.62, -41.50, -41.40, -41.40, -41.37, -41.18, -41.21,
-        -41.21, -40.98, -41.01, -40.92, -40.67, -40.69, -40.69, -40.47, -40.38, -40.41,
-        -40.50, -40.25, -40.18, -40.03, -40.06, -39.84, -39.71, -39.74, -39.52, -39.42,
-        -39.55, -39.32, -39.26, -39.10, -39.13, -39.03, -38.88, -38.69, -38.56, -38.46,
-        -38.37, -38.15, -38.05, -38.08, -37.76, -37.79, -37.66, -37.47, -37.34, -37.22,
-        -37.12, -37.03, -36.93
+        -2067, -2079,
+        -2064, -2064, -2089, -2076, -2089, -2089, -2089, -2089, -2086, -2101,
+        -2098, -2096, -2098, -2111, -2096, -2118, -2118, -2125, -2115, -2115,
+        -2137, -2134, -2134, -2134, -2134, -2144, -2156, -2144, -2158, -2179,
+        -2182, -2166, -2198, -2201, -2204, -2204, -2211, -2223, -2223, -2230,
+        -2242, -2220, -2230, -2242, -2230, -2230, -2230, -2242, -2237, -2252,
+        -2242, -2242, -2265, -2262, -2262, -2242, -2265, -2262, -2271, -2271,
+        -2284, -2291, -2291, -2303, -2303, -2300, -2300, -2325, -2306, -2300,
+        -2325, -2316, -2316, -2334, -2335, -2345, -2345, -2354, -2367, -2377,
+        -2367, -2364, -2377, -2386, -2383, -2386, -2383, -2393, -2396, -2380,
+        -2393, -2393, -2396, -2390, -2403, -2415, -2422, -2425, -2435, -2435,
+        -2434, -2454, -2466, -2444, -2466, -2466, -2469, -2469, -2466, -2472,
+        -2479, -2479, -2479, -2492, -2482, -2492, -2504, -2498, -2489, -2501,
+        -2508, -2518, -2515, -2537, -2551, -2543, -2562, -2562, -2575, -2581,
+        -2575, -2584, -2587, -2584, -2584, -2575, -2584, -2604, -2604, -2616,
+        -2604, -2626, -2613, -2613, -2626, -2638, -2626, -2638, -2651, -2638,
+        -2635, -2645, -2648, -2633, -2642, -2667, -2655, -2667, -2664, -2687,
+        -2687, -2687, -2696, -2696, -2696, -2706, -2684, -2709, -2716, -2718,
+        -2721, -2728, -2744, -2728, -2750, -2741, -2738, -2745, -2760, -2745,
+        -2767, -2764, -2767, -2764, -2779, -2786, -2774, -2795, -2774, -2795,
+        -2805, -2830, -2818, -2818, -2828, -2840, -2840, -2843, -2843, -2862,
+        -2853, -2853, -2862, -2875, -2875, -2875, -2875, -2862, -2872, -2885,
+        -2872, -2869, -2891, -2888, -2891, -2911, -2935, -2920, -2936, -2958,
+        -2955, -2961, -2968, -2968, -2945, -2968, -2980, -2955, -2977, -2974,
+        -2984, -2984, -2984, -2997, -2984, -2997, -3021, -3009, -3019, -3021,
+        -3019, -3041, -3028, -3048, -3051, -3048, -3073, -3057, -3070, -3083,
+        -3070, -3083, -3095, -3095, -3105, -3102, -3102, -3109, -3102, -3121,
+        -3118, -3121, -3131, -3140, -3153, -3153, -3166, -3178, -3166, -3181,
+        -3175, -3175, -3188, -3175, -3185, -3185, -3185, -3182, -3195, -3204,
+        -3204, -3204, -3201, -3214, -3214, -3226, -3226, -3236, -3249, -3233,
+        -3243, -3268, -3252, -3268, -3265, -3287, -3300, -3297, -3319, -3319,
+        -3316, -3326, -3316, -3316, -3329, -3317, -3316, -3341, -3338, -3341,
+        -3351, -3355, -3351, -3364, -3376, -3373, -3376, -3386, -3393, -3393,
+        -3405, -3402, -3402, -3405, -3412, -3412, -3424, -3434, -3428, -3434,
+        -3444, -3419, -3444, -3444, -3450, -3444, -3463, -3475, -3453, -3473,
+        -3491, -3482, -3482, -3482, -3506, -3482, -3495, -3507, -3502, -3505,
+        -3517, -3529, -3507, -3533, -3530, -3539, -3530, -3549, -3561, -3558,
+        -3549, -3559, -3561, -3559, -3568, -3578, -3578, -3565, -3585, -3585,
+        -3607, -3597, -3597, -3610, -3619, -3634, -3619, -3629, -3626, -3651,
+        -3629, -3648, -3648, -3664, -3673, -3658, -3674, -3674, -3692, -3686,
+        -3683, -3693, -3702, -3705, -3693, -3712, -3712, -3718, -3725, -3728,
+        -3740, -3750, -3743, -3760, -3750, -3750, -3762, -3762, -3769, -3772,
+        -3779, -3782, -3801, -3791, -3779, -3801, -3801, -3811, -3801, -3801,
+        -3811, -3826, -3825, -3830, -3820, -3820, -3823, -3843, -3854, -3855,
+        -3843, -3852, -3862, -3865, -3883, -3872, -3884, -3894, -3894, -3900,
+        -3903, -3913, -3913, -3913, -3923, -3923, -3913, -3910, -3920, -3907,
+        -3927, -3941, -3929, -3952, -3955, -3955, -3974, -3962, -3965, -3984,
+        -3986, -3996, -3981, -3981, -3984, -4003, -4003, -3993, -4000, -4000,
+        -4003, -4003, -4013, -4013, -4015, -4038, -4038, -4025, -4041, -4050,
+        -4049, -4038, -4050, -4063, -4063, -4072, -4085, -4072, -4070, -4089,
+        -4091, -4069, -4080, -4089, -4089, -4089, -4111, -4098, -4102, -4098,
+        -4098, -4108, -4098, -4114, -4133, -4133, -4121, -4142, -4140, -4140,
+        -4140, -4140, -4150, -4153, -4162, -4171, -4159, -4162, -4162, -4182,
+        -4169, -4169, -4169, -4160, -4182, -4181, -4183, -4184, -4184, -4187,
+        -4194, -4204, -4204, -4204, -4204, -4204, -4212, -4201, -4201, -4210,
+        -4220, -4220, -4223, -4233, -4220, -4220, -4220, -4205, -4208, -4229,
+        -4229, -4235, -4235, -4233, -4233, -4236, -4245, -4245, -4255, -4255,
+        -4258, -4265, -4255, -4265, -4265, -4265, -4265, -4265, -4274, -4286,
+        -4286, -4286, -4286, -4289, -4289, -4299, -4302, -4302, -4312, -4312,
+        -4312, -4312, -4309, -4310, -4310, -4319, -4331, -4331, -4331, -4332,
+        -4344, -4344, -4344, -4341, -4334, -4344, -4344, -4328, -4331, -4344,
+        -4344, -4353, -4353, -4344, -4363, -4363, -4341, -4363, -4360, -4338,
+        -4363, -4348, -4351, -4363, -4357, -4351, -4363, -4357, -4351, -4357,
+        -4360, -4373, -4367, -4389, -4389, -4389, -4402, -4389, -4402, -4402,
+        -4407, -4405, -4402, -4395, -4402, -4401, -4382, -4401, -4392, -4379,
+        -4402, -4402, -4389, -4402, -4402, -4414, -4417, -4411, -4411, -4424,
+        -4421, -4421, -4421, -4421, -4434, -4434, -4434, -4446, -4446, -4446,
+        -4446, -4456, -4443, -4443, -4443, -4431, -4431, -4428, -4440, -4440,
+        -4443, -4453, -4443, -4456, -4465, -4441, -4453, -4440, -4450, -4447,
+        -4463, -4460, -4472, -4450, -4465, -4463, -4465, -4460, -4465, -4475,
+        -4475, -4465, -4488, -4475, -4475, -4475, -4465, -4460, -4472, -4463,
+        -4469, -4463, -4469, -4472, -4472, -4485, -4472, -4485, -4465, -4485,
+        -4465, -4463, -4465, -4465, -4465, -4475, -4475, -4475, -4485, -4472,
+        -4485, -4472, -4475, -4472, -4463, -4485, -4460, -4469, -4460, -4463,
+        -4472, -4463, -4465, -4475, -4472, -4472, -4463, -4472, -4485, -4472,
+        -4472, -4494, -4482, -4485, -4482, -4479, -4482, -4494, -4492, -4479,
+        -4492, -4504, -4492, -4492, -4514, -4514, -4514, -4514, -4514, -4523,
+        -4501, -4501, -4489, -4492, -4501, -4501, -4504, -4504, -4504, -4504,
+        -4504, -4517, -4517, -4517, -4517, -4517, -4517, -4504, -4504, -4494,
+        -4494, -4507, -4517, -4514, -4514, -4526, -4529, -4517, -4514, -4514,
+        -4511, -4523, -4504, -4501, -4511, -4523, -4504, -4514, -4526, -4514,
+        -4504, -4517, -4526, -4507, -4504, -4517, -4520, -4504, -4504, -4515,
+        -4504, -4494, -4504, -4504, -4504, -4504, -4482, -4504, -4504, -4492,
+        -4504, -4489, -4494, -4494, -4485, -4497, -4497, -4500, -4510, -4497,
+        -4497, -4500, -4488, -4497, -4485, -4485, -4482, -4494, -4494, -4507,
+        -4485, -4504, -4507, -4497, -4497, -4510, -4498, -4494, -4504, -4494,
+        -4485, -4485, -4494, -4469, -4469, -4475, -4485, -4460, -4463, -4475,
+        -4472, -4460, -4482, -4485, -4475, -4475, -4485, -4460, -4463, -4475,
+        -4475, -4475, -4440, -4441, -4443, -4443, -4442, -4431, -4431, -4415,
+        -4418, -4421, -4421, -4408, -4406, -4418, -4406, -4408, -4396, -4399,
+        -4402, -4405, -4392, -4382, -4405, -4398, -4385, -4373, -4385, -4373,
+        -4363, -4351, -4348, -4335, -4348, -4338, -4325, -4316, -4328, -4303,
+        -4309, -4294, -4296, -4287, -4296, -4274, -4274, -4265, -4242, -4242,
+        -4245, -4233, -4210, -4226, -4226, -4204, -4216, -4207, -4198, -4182,
+        -4184, -4175, -4162, -4162, -4150, -4140, -4140, -4137, -4118, -4121,
+        -4121, -4098, -4101, -4092, -4067, -4069, -4069, -4047, -4038, -4041,
+        -4050, -4025, -4018, -4003, -4006, -3984, -3971, -3974, -3952, -3942,
+        -3955, -3932, -3926, -3910, -3913, -3903, -3888, -3869, -3856, -3846,
+        -3837, -3815, -3805, -3808, -3776, -3779, -3766, -3747, -3734, -3722,
+        -3712, -3703, -3693
     };
 
-    static const float iso226_2023_curve_50_phons[985] =
+    static const int16_t iso226_2023_curve_50_phons[985] =
     {
-        -15.74, -15.87,
-        -15.71, -15.62, -15.87, -15.74, -15.87, -15.87, -15.97, -15.77, -15.74, -15.99,
-        -15.96, -15.93, -16.06, -16.28, -16.13, -16.25, -16.25, -16.22, -16.32, -16.13,
-        -16.25, -16.22, -16.22, -16.13, -16.13, -16.22, -16.35, -16.42, -16.56, -16.57,
-        -16.70, -16.64, -16.57, -16.70, -16.82, -16.82, -16.79, -16.92, -16.82, -16.89,
-        -17.02, -16.79, -16.89, -17.02, -16.99, -16.99, -16.99, -17.02, -16.96, -17.11,
-        -17.21, -17.21, -17.24, -17.21, -17.21, -17.11, -17.24, -17.21, -17.21, -17.21,
-        -17.33, -17.40, -17.40, -17.53, -17.53, -17.40, -17.40, -17.65, -17.56, -17.40,
-        -17.65, -17.65, -17.56, -17.74, -17.75, -17.94, -17.95, -17.94, -18.07, -18.16,
-        -18.07, -18.14, -18.16, -18.26, -18.23, -18.26, -18.23, -18.33, -18.36, -18.20,
-        -18.33, -18.33, -18.45, -18.20, -18.33, -18.36, -18.33, -18.36, -18.45, -18.45,
-        -18.36, -18.55, -18.68, -18.65, -18.77, -18.68, -18.80, -18.90, -18.68, -18.93,
-        -18.90, -19.00, -18.90, -18.93, -19.02, -19.12, -19.25, -19.00, -19.09, -19.22,
-        -19.09, -19.19, -19.06, -19.19, -19.43, -19.34, -19.44, -19.44, -19.47, -19.54,
-        -19.57, -19.57, -19.59, -19.66, -19.57, -19.66, -19.66, -19.85, -19.76, -19.98,
-        -19.85, -19.98, -19.95, -19.95, -20.08, -20.01, -20.08, -20.20, -20.23, -20.20,
-        -20.17, -20.18, -20.20, -20.14, -20.05, -20.30, -20.27, -20.30, -20.27, -20.40,
-        -20.40, -20.40, -20.40, -20.49, -20.49, -20.59, -20.46, -20.62, -20.59, -20.71,
-        -20.74, -20.71, -20.97, -20.81, -20.94, -20.84, -20.91, -20.88, -21.03, -20.88,
-        -21.10, -21.07, -21.10, -21.07, -21.23, -21.20, -21.17, -21.28, -21.17, -21.29,
-        -21.29, -21.45, -21.32, -21.42, -21.42, -21.54, -21.64, -21.67, -21.77, -21.86,
-        -21.77, -21.86, -21.86, -21.99, -21.99, -22.09, -21.89, -21.96, -21.86, -21.99,
-        -21.86, -21.74, -21.96, -21.93, -21.96, -22.15, -22.30, -22.15, -22.31, -22.43,
-        -22.31, -22.56, -22.43, -22.53, -22.40, -22.53, -22.65, -22.50, -22.63, -22.50,
-        -22.60, -22.69, -22.60, -22.82, -22.69, -22.82, -23.06, -22.95, -23.04, -23.16,
-        -23.14, -23.17, -23.14, -23.14, -23.26, -23.23, -23.39, -23.23, -23.36, -23.58,
-        -23.46, -23.49, -23.71, -23.71, -23.71, -23.68, -23.68, -23.65, -23.58, -23.78,
-        -23.65, -23.78, -23.78, -23.78, -23.90, -23.90, -24.03, -24.15, -24.03, -24.28,
-        -24.12, -24.22, -24.25, -24.22, -24.32, -24.32, -24.41, -24.29, -24.41, -24.50,
-        -24.41, -24.51, -24.48, -24.51, -24.61, -24.73, -24.73, -24.83, -24.86, -24.61,
-        -24.80, -24.86, -24.70, -24.86, -24.73, -24.95, -25.08, -25.05, -25.08, -25.18,
-        -25.15, -25.34, -25.15, -25.24, -25.47, -25.25, -25.34, -25.49, -25.37, -25.49,
-        -25.49, -25.53, -25.49, -25.62, -25.75, -25.72, -25.75, -25.84, -25.91, -25.91,
-        -25.94, -26.01, -25.91, -26.04, -26.01, -25.91, -26.13, -26.13, -26.07, -26.13,
-        -26.33, -26.07, -26.23, -26.33, -26.20, -26.33, -26.33, -26.54, -26.33, -26.52,
-        -26.51, -26.52, -26.52, -26.61, -26.76, -26.52, -26.74, -26.77, -26.71, -26.74,
-        -26.77, -26.99, -26.77, -26.92, -26.99, -27.08, -26.99, -26.99, -27.21, -27.08,
-        -27.18, -27.09, -27.11, -27.18, -27.19, -27.09, -27.28, -27.16, -27.35, -27.35,
-        -27.47, -27.47, -27.47, -27.60, -27.70, -27.94, -27.70, -27.79, -27.77, -28.01,
-        -27.79, -27.89, -27.99, -28.14, -28.05, -27.99, -28.04, -28.04, -28.23, -28.17,
-        -28.04, -28.24, -28.24, -28.27, -28.24, -28.24, -28.34, -28.49, -28.36, -28.49,
-        -28.61, -28.61, -28.74, -28.71, -28.71, -28.71, -28.74, -28.74, -28.81, -28.84,
-        -28.71, -28.93, -28.93, -28.93, -28.90, -28.93, -29.03, -29.03, -29.03, -29.13,
-        -29.13, -29.18, -29.37, -29.22, -29.22, -29.32, -29.25, -29.45, -29.56, -29.47,
-        -29.35, -29.54, -29.54, -29.57, -29.75, -29.64, -29.67, -29.86, -29.86, -29.93,
-        -29.96, -29.96, -29.96, -30.05, -29.96, -29.96, -30.05, -29.93, -29.93, -29.90,
-        -29.99, -30.14, -30.03, -30.15, -30.18, -30.27, -30.27, -30.16, -30.38, -30.37,
-        -30.40, -30.59, -30.35, -30.44, -30.56, -30.56, -30.66, -30.66, -30.54, -30.54,
-        -30.76, -30.66, -30.66, -30.66, -30.88, -30.91, -30.91, -30.98, -31.04, -31.04,
-        -31.03, -31.11, -31.13, -31.16, -31.17, -31.36, -31.39, -31.26, -31.23, -31.24,
-        -31.45, -31.23, -31.23, -31.23, -31.42, -31.42, -31.55, -31.33, -31.45, -31.42,
-        -31.42, -31.43, -31.42, -31.58, -31.67, -31.67, -31.55, -31.86, -31.74, -31.74,
-        -31.84, -31.74, -31.84, -31.87, -31.87, -31.95, -31.84, -31.87, -31.87, -31.87,
-        -31.84, -31.84, -31.84, -31.84, -31.96, -31.96, -31.98, -31.90, -31.99, -32.02,
-        -31.99, -32.19, -32.19, -32.09, -32.19, -32.19, -32.27, -32.16, -32.16, -32.25,
-        -32.25, -32.25, -32.38, -32.38, -32.25, -32.35, -32.35, -32.29, -32.32, -32.54,
-        -32.54, -32.60, -32.59, -32.48, -32.58, -32.60, -32.60, -32.70, -32.80, -32.80,
-        -32.82, -32.80, -32.80, -32.80, -32.80, -32.80, -32.80, -32.80, -32.80, -33.01,
-        -33.01, -33.01, -33.01, -33.04, -33.04, -33.04, -33.07, -33.07, -33.07, -33.07,
-        -33.07, -33.08, -33.05, -33.15, -33.15, -33.24, -33.37, -33.37, -33.27, -33.27,
-        -33.39, -33.39, -33.30, -33.27, -33.30, -33.30, -33.30, -33.24, -33.37, -33.40,
-        -33.39, -33.59, -33.59, -33.59, -33.59, -33.59, -33.46, -33.49, -33.37, -33.34,
-        -33.49, -33.34, -33.46, -33.59, -33.43, -33.46, -33.59, -33.53, -33.56, -33.53,
-        -33.65, -33.78, -33.63, -33.75, -33.75, -33.85, -33.78, -33.85, -33.97, -33.88,
-        -34.03, -34.00, -33.78, -33.91, -33.88, -33.78, -33.68, -33.77, -33.78, -33.65,
-        -33.78, -33.78, -33.75, -33.78, -33.78, -33.91, -33.84, -33.78, -33.78, -33.81,
-        -33.88, -33.88, -33.88, -33.88, -34.00, -34.00, -34.00, -34.13, -34.13, -34.13,
-        -34.22, -34.22, -34.10, -34.10, -34.20, -34.07, -34.07, -34.04, -34.07, -34.17,
-        -34.10, -34.10, -34.20, -34.22, -34.22, -34.17, -34.20, -34.07, -34.17, -34.04,
-        -34.20, -34.17, -34.20, -34.07, -34.22, -34.10, -34.22, -34.17, -34.32, -34.42,
-        -34.32, -34.32, -34.45, -34.32, -34.32, -34.32, -34.22, -34.17, -34.29, -34.29,
-        -34.26, -34.29, -34.26, -34.29, -34.20, -34.42, -34.29, -34.42, -34.32, -34.42,
-        -34.22, -34.29, -34.22, -34.22, -34.22, -34.32, -34.32, -34.42, -34.42, -34.20,
-        -34.42, -34.39, -34.42, -34.29, -34.29, -34.42, -34.17, -34.17, -34.07, -34.20,
-        -34.20, -34.20, -34.22, -34.32, -34.29, -34.29, -34.39, -34.39, -34.42, -34.30,
-        -34.49, -34.51, -34.39, -34.51, -34.49, -34.36, -34.39, -34.61, -34.49, -34.36,
-        -34.49, -34.51, -34.39, -34.49, -34.51, -34.51, -34.52, -34.61, -34.61, -34.61,
-        -34.58, -34.58, -34.46, -34.58, -34.58, -34.58, -34.52, -34.51, -34.51, -34.51,
-        -34.42, -34.54, -34.54, -34.54, -34.54, -34.54, -34.54, -34.51, -34.52, -34.51,
-        -34.51, -34.64, -34.64, -34.61, -34.61, -34.64, -34.76, -34.54, -34.51, -34.51,
-        -34.39, -34.51, -34.51, -34.39, -34.49, -34.61, -34.51, -34.61, -34.74, -34.61,
-        -34.61, -34.74, -34.64, -34.64, -34.61, -34.54, -34.67, -34.61, -34.42, -34.63,
-        -34.51, -34.42, -34.61, -34.42, -34.51, -34.42, -34.39, -34.42, -34.42, -34.49,
-        -34.42, -34.36, -34.42, -34.42, -34.42, -34.54, -34.54, -34.57, -34.67, -34.54,
-        -34.54, -34.67, -34.54, -34.54, -34.42, -34.51, -34.39, -34.51, -34.42, -34.64,
-        -34.42, -34.42, -34.45, -34.35, -34.45, -34.48, -34.35, -34.32, -34.42, -34.32,
-        -34.22, -34.32, -34.42, -34.17, -34.17, -34.42, -34.42, -34.17, -34.20, -34.22,
-        -34.29, -34.17, -34.29, -34.42, -34.42, -34.42, -34.42, -34.17, -34.29, -34.32,
-        -34.42, -34.42, -34.17, -34.07, -34.20, -34.20, -34.09, -34.07, -34.07, -33.92,
-        -33.94, -33.97, -33.98, -33.95, -33.82, -33.85, -33.82, -33.75, -33.63, -33.75,
-        -33.78, -33.81, -33.78, -33.78, -33.71, -33.74, -33.71, -33.59, -33.62, -33.49,
-        -33.49, -33.37, -33.24, -33.21, -33.24, -33.14, -33.02, -33.02, -33.05, -32.80,
-        -33.05, -32.80, -32.92, -32.82, -32.92, -32.80, -32.80, -32.80, -32.57, -32.57,
-        -32.60, -32.38, -32.35, -32.41, -32.31, -32.28, -32.41, -32.31, -32.32, -32.17,
-        -32.19, -32.09, -31.87, -31.87, -31.74, -31.55, -31.55, -31.52, -31.52, -31.45,
-        -31.45, -31.33, -31.36, -31.36, -31.11, -31.13, -31.13, -31.01, -30.91, -30.94,
-        -30.94, -30.69, -30.72, -30.47, -30.50, -30.46, -30.25, -30.27, -30.05, -30.05,
-        -30.08, -30.05, -29.99, -29.83, -29.86, -29.86, -29.71, -29.51, -29.48, -29.39,
-        -29.39, -29.16, -29.16, -29.10, -28.87, -28.90, -28.78, -28.68, -28.56, -28.43,
-        -28.33, -28.33, -28.24
+        -1574, -1587,
+        -1571, -1562, -1587, -1574, -1587, -1587, -1597, -1577, -1574, -1599,
+        -1596, -1593, -1606, -1628, -1613, -1625, -1625, -1622, -1632, -1613,
+        -1625, -1622, -1622, -1613, -1613, -1622, -1635, -1642, -1656, -1657,
+        -1670, -1664, -1657, -1670, -1682, -1682, -1679, -1692, -1682, -1689,
+        -1702, -1679, -1689, -1702, -1699, -1699, -1699, -1702, -1696, -1711,
+        -1721, -1721, -1724, -1721, -1721, -1711, -1724, -1721, -1721, -1721,
+        -1733, -1740, -1740, -1753, -1753, -1740, -1740, -1765, -1756, -1740,
+        -1765, -1765, -1756, -1774, -1775, -1794, -1795, -1794, -1807, -1816,
+        -1807, -1814, -1816, -1826, -1823, -1826, -1823, -1833, -1836, -1820,
+        -1833, -1833, -1845, -1820, -1833, -1836, -1833, -1836, -1845, -1845,
+        -1836, -1855, -1868, -1865, -1877, -1868, -1880, -1890, -1868, -1893,
+        -1890, -1900, -1890, -1893, -1902, -1912, -1925, -1900, -1909, -1922,
+        -1909, -1919, -1906, -1919, -1943, -1934, -1944, -1944, -1947, -1954,
+        -1957, -1957, -1959, -1966, -1957, -1966, -1966, -1985, -1976, -1998,
+        -1985, -1998, -1995, -1995, -2008, -2001, -2008, -2020, -2023, -2020,
+        -2017, -2018, -2020, -2014, -2005, -2030, -2027, -2030, -2027, -2040,
+        -2040, -2040, -2040, -2049, -2049, -2059, -2046, -2062, -2059, -2071,
+        -2074, -2071, -2097, -2081, -2094, -2084, -2091, -2088, -2103, -2088,
+        -2110, -2107, -2110, -2107, -2123, -2120, -2117, -2128, -2117, -2129,
+        -2129, -2145, -2132, -2142, -2142, -2154, -2164, -2167, -2177, -2186,
+        -2177, -2186, -2186, -2199, -2199, -2209, -2189, -2196, -2186, -2199,
+        -2186, -2174, -2196, -2193, -2196, -2215, -2230, -2215, -2231, -2243,
+        -2231, -2256, -2243, -2253, -2240, -2253, -2265, -2250, -2263, -2250,
+        -2260, -2269, -2260, -2282, -2269, -2282, -2306, -2295, -2304, -2316,
+        -2314, -2317, -2314, -2314, -2326, -2323, -2339, -2323, -2336, -2358,
+        -2346, -2349, -2371, -2371, -2371, -2368, -2368, -2365, -2358, -2378,
+        -2365, -2378, -2378, -2378, -2390, -2390, -2403, -2415, -2403, -2428,
+        -2412, -2422, -2425, -2422, -2432, -2432, -2441, -2429, -2441, -2450,
+        -2441, -2451, -2448, -2451, -2461, -2473, -2473, -2483, -2486, -2461,
+        -2480, -2486, -2470, -2486, -2473, -2495, -2508, -2505, -2508, -2518,
+        -2515, -2534, -2515, -2524, -2547, -2525, -2534, -2549, -2537, -2549,
+        -2549, -2553, -2549, -2562, -2575, -2572, -2575, -2584, -2591, -2591,
+        -2594, -2601, -2591, -2604, -2601, -2591, -2613, -2613, -2607, -2613,
+        -2633, -2607, -2623, -2633, -2620, -2633, -2633, -2654, -2633, -2652,
+        -2651, -2652, -2652, -2661, -2676, -2652, -2674, -2677, -2671, -2674,
+        -2677, -2699, -2677, -2692, -2699, -2708, -2699, -2699, -2721, -2708,
+        -2718, -2709, -2711, -2718, -2719, -2709, -2728, -2716, -2735, -2735,
+        -2747, -2747, -2747, -2760, -2770, -2794, -2770, -2779, -2777, -2801,
+        -2779, -2789, -2799, -2814, -2805, -2799, -2804, -2804, -2823, -2817,
+        -2804, -2824, -2824, -2827, -2824, -2824, -2834, -2849, -2836, -2849,
+        -2861, -2861, -2874, -2871, -2871, -2871, -2874, -2874, -2881, -2884,
+        -2871, -2893, -2893, -2893, -2890, -2893, -2903, -2903, -2903, -2913,
+        -2913, -2918, -2937, -2922, -2922, -2932, -2925, -2945, -2956, -2947,
+        -2935, -2954, -2954, -2957, -2975, -2964, -2967, -2986, -2986, -2993,
+        -2996, -2996, -2996, -3005, -2996, -2996, -3005, -2993, -2993, -2990,
+        -2999, -3014, -3003, -3015, -3018, -3027, -3027, -3016, -3038, -3037,
+        -3040, -3059, -3035, -3044, -3056, -3056, -3066, -3066, -3054, -3054,
+        -3076, -3066, -3066, -3066, -3088, -3091, -3091, -3098, -3104, -3104,
+        -3103, -3111, -3113, -3116, -3117, -3136, -3139, -3126, -3123, -3124,
+        -3145, -3123, -3123, -3123, -3142, -3142, -3155, -3133, -3145, -3142,
+        -3142, -3143, -3142, -3158, -3167, -3167, -3155, -3186, -3174, -3174,
+        -3184, -3174, -3184, -3187, -3187, -3195, -3184, -3187, -3187, -3187,
+        -3184, -3184, -3184, -3184, -3196, -3196, -3198, -3190, -3199, -3202,
+        -3199, -3219, -3219, -3209, -3219, -3219, -3227, -3216, -3216, -3225,
+        -3225, -3225, -3238, -3238, -3225, -3235, -3235, -3229, -3232, -3254,
+        -3254, -3260, -3259, -3248, -3258, -3260, -3260, -3270, -3280, -3280,
+        -3282, -3280, -3280, -3280, -3280, -3280, -3280, -3280, -3280, -3301,
+        -3301, -3301, -3301, -3304, -3304, -3304, -3307, -3307, -3307, -3307,
+        -3307, -3308, -3305, -3315, -3315, -3324, -3337, -3337, -3327, -3327,
+        -3339, -3339, -3330, -3327, -3330, -3330, -3330, -3324, -3337, -3340,
+        -3339, -3359, -3359, -3359, -3359, -3359, -3346, -3349, -3337, -3334,
+        -3349, -3334, -3346, -3359, -3343, -3346, -3359, -3353, -3356, -3353,
+        -3365, -3378, -3363, -3375, -3375, -3385, -3378, -3385, -3397, -3388,
+        -3403, -3400, -3378, -3391, -3388, -3378, -3368, -3377, -3378, -3365,
+        -3378, -3378, -3375, -3378, -3378, -3391, -3384, -3378, -3378, -3381,
+        -3388, -3388, -3388, -3388, -3400, -3400, -3400, -3413, -3413, -3413,
+        -3422, -3422, -3410, -3410, -3420, -3407, -3407, -3404, -3407, -3417,
+        -3410, -3410, -3420, -3422, -3422, -3417, -3420, -3407, -3417, -3404,
+        -3420, -3417, -3420, -3407, -3422, -3410, -3422, -3417, -3432, -3442,
+        -3432, -3432, -3445, -3432, -3432, -3432, -3422, -3417, -3429, -3429,
+        -3426, -3429, -3426, -3429, -3420, -3442, -3429, -3442, -3432, -3442,
+        -3422, -3429, -3422, -3422, -3422, -3432, -3432, -3442, -3442, -3420,
+        -3442, -3439, -3442, -3429, -3429, -3442, -3417, -3417, -3407, -3420,
+        -3420, -3420, -3422, -3432, -3429, -3429, -3439, -3439, -3442, -3430,
+        -3449, -3451, -3439, -3451, -3449, -3436, -3439, -3461, -3449, -3436,
+        -3449, -3451, -3439, -3449, -3451, -3451, -3452, -3461, -3461, -3461,
+        -3458, -3458, -3446, -3458, -3458, -3458, -3452, -3451, -3451, -3451,
+        -3442, -3454, -3454, -3454, -3454, -3454, -3454, -3451, -3452, -3451,
+        -3451, -3464, -3464, -3461, -3461, -3464, -3476, -3454, -3451, -3451,
+        -3439, -3451, -3451, -3439, -3449, -3461, -3451, -3461, -3474, -3461,
+        -3461, -3474, -3464, -3464, -3461, -3454, -3467, -3461, -3442, -3463,
+        -3451, -3442, -3461, -3442, -3451, -3442, -3439, -3442, -3442, -3449,
+        -3442, -3436, -3442, -3442, -3442, -3454, -3454, -3457, -3467, -3454,
+        -3454, -3467, -3454, -3454, -3442, -3451, -3439, -3451, -3442, -3464,
+        -3442, -3442, -3445, -3435, -3445, -3448, -3435, -3432, -3442, -3432,
+        -3422, -3432, -3442, -3417, -3417, -3442, -3442, -3417, -3420, -3422,
+        -3429, -3417, -3429, -3442, -3442, -3442, -3442, -3417, -3429, -3432,
+        -3442, -3442, -3417, -3407, -3420, -3420, -3409, -3407, -3407, -3392,
+        -3394, -3397, -3398, -3395, -3382, -3385, -3382, -3375, -3363, -3375,
+        -3378, -3381, -3378, -3378, -3371, -3374, -3371, -3359, -3362, -3349,
+        -3349, -3337, -3324, -3321, -3324, -3314, -3302, -3302, -3305, -3280,
+        -3305, -3280, -3292, -3282, -3292, -3280, -3280, -3280, -3257, -3257,
+        -3260, -3238, -3235, -3241, -3231, -3228, -3241, -3231, -3232, -3217,
+        -3219, -3209, -3187, -3187, -3174, -3155, -3155, -3152, -3152, -3145,
+        -3145, -3133, -3136, -3136, -3111, -3113, -3113, -3101, -3091, -3094,
+        -3094, -3069, -3072, -3047, -3050, -3046, -3025, -3027, -3005, -3005,
+        -3008, -3005, -2999, -2983, -2986, -2986, -2971, -2951, -2948, -2939,
+        -2939, -2916, -2916, -2910, -2887, -2890, -2878, -2868, -2856, -2843,
+        -2833, -2833, -2824
     };
 
-    static const float iso226_2023_curve_60_phons[985] =
+    static const int16_t iso226_2023_curve_60_phons[985] =
     {
-        -11.11, -11.23,
-        -11.08, -10.98, -11.23, -11.11, -11.23, -11.23, -11.14, -11.14, -11.11, -11.26,
-        -11.13, -11.11, -11.23, -11.26, -11.11, -11.33, -11.33, -11.30, -11.30, -11.30,
-        -11.42, -11.30, -11.30, -11.30, -11.30, -11.30, -11.33, -11.30, -11.54, -11.45,
-        -11.48, -11.42, -11.55, -11.58, -11.61, -11.61, -11.68, -11.61, -11.61, -11.68,
-        -11.80, -11.77, -11.77, -11.80, -11.77, -11.87, -11.87, -11.90, -11.84, -11.90,
-        -11.90, -11.80, -12.02, -11.90, -11.90, -11.80, -12.02, -11.99, -12.09, -12.09,
-        -12.22, -12.19, -12.19, -12.31, -12.22, -12.19, -12.19, -12.34, -12.25, -12.19,
-        -12.34, -12.25, -12.25, -12.33, -12.34, -12.34, -12.44, -12.44, -12.47, -12.56,
-        -12.56, -12.53, -12.56, -12.56, -12.63, -12.66, -12.63, -12.63, -12.66, -12.51,
-        -12.53, -12.63, -12.76, -12.60, -12.73, -12.76, -12.73, -12.85, -12.85, -12.95,
-        -12.95, -12.95, -13.08, -12.95, -13.17, -12.98, -13.01, -13.10, -12.98, -13.13,
-        -13.10, -13.10, -13.01, -13.13, -13.13, -13.33, -13.26, -13.20, -13.20, -13.33,
-        -13.29, -13.30, -13.17, -13.30, -13.44, -13.45, -13.55, -13.45, -13.58, -13.55,
-        -13.67, -13.67, -13.70, -13.67, -13.58, -13.58, -13.67, -13.77, -13.67, -13.90,
-        -13.67, -13.90, -13.87, -13.87, -13.99, -13.93, -13.90, -13.93, -13.86, -13.93,
-        -13.80, -13.90, -13.83, -13.77, -13.87, -14.02, -13.90, -14.12, -13.99, -14.12,
-        -14.22, -14.22, -14.22, -14.31, -14.31, -14.31, -14.19, -14.44, -14.41, -14.44,
-        -14.36, -14.44, -14.59, -14.53, -14.66, -14.56, -14.53, -14.50, -14.66, -14.60,
-        -14.73, -14.60, -14.82, -14.60, -14.66, -14.73, -14.50, -14.71, -14.60, -14.72,
-        -14.73, -14.98, -14.85, -14.85, -14.85, -14.88, -14.98, -15.01, -15.10, -15.20,
-        -15.20, -15.30, -15.20, -15.33, -15.23, -15.23, -15.13, -15.20, -15.20, -15.23,
-        -15.20, -15.08, -15.20, -15.07, -15.20, -15.30, -15.45, -15.30, -15.45, -15.67,
-        -15.45, -15.70, -15.67, -15.58, -15.55, -15.67, -15.70, -15.64, -15.87, -15.64,
-        -15.84, -15.84, -15.84, -15.96, -15.84, -15.96, -16.01, -15.99, -15.99, -15.91,
-        -15.99, -16.12, -15.99, -16.09, -16.12, -16.09, -16.34, -16.09, -16.21, -16.44,
-        -16.21, -16.44, -16.47, -16.47, -16.47, -16.34, -16.44, -16.31, -16.34, -16.44,
-        -16.31, -16.44, -16.53, -16.53, -16.66, -16.66, -16.78, -16.81, -16.69, -16.94,
-        -16.69, -16.78, -16.81, -16.78, -16.98, -16.78, -16.98, -16.85, -16.98, -17.07,
-        -16.98, -17.07, -16.95, -17.07, -17.07, -17.10, -17.20, -17.10, -17.13, -17.07,
-        -17.07, -17.13, -17.07, -17.13, -17.10, -17.23, -17.45, -17.32, -17.55, -17.45,
-        -17.42, -17.52, -17.52, -17.52, -17.74, -17.52, -17.61, -17.77, -17.74, -17.77,
-        -17.77, -17.81, -17.77, -17.80, -18.02, -17.89, -17.92, -18.02, -17.89, -17.99,
-        -18.02, -17.89, -17.99, -18.02, -18.09, -17.99, -18.12, -18.21, -18.16, -18.21,
-        -18.22, -18.16, -18.21, -18.31, -18.28, -18.21, -18.31, -18.43, -18.21, -18.41,
-        -18.40, -18.31, -18.41, -18.60, -18.65, -18.41, -18.63, -18.66, -18.50, -18.63,
-        -18.75, -18.88, -18.66, -18.72, -18.88, -18.78, -18.78, -18.88, -18.91, -18.97,
-        -18.88, -18.78, -19.00, -18.88, -18.88, -18.88, -18.98, -18.85, -18.95, -19.04,
-        -19.07, -19.07, -19.07, -19.10, -19.20, -19.24, -19.10, -19.10, -19.07, -19.32,
-        -19.10, -19.10, -19.29, -19.35, -19.45, -19.29, -19.45, -19.55, -19.54, -19.57,
-        -19.55, -19.55, -19.54, -19.67, -19.55, -19.55, -19.64, -19.80, -19.67, -19.89,
-        -19.92, -19.92, -20.05, -20.02, -19.93, -20.02, -20.05, -20.05, -20.12, -20.14,
-        -20.02, -20.24, -20.24, -20.14, -20.12, -20.24, -20.24, -20.15, -20.05, -20.24,
-        -20.24, -20.30, -20.48, -20.34, -20.24, -20.34, -20.37, -20.46, -20.49, -20.49,
-        -20.46, -20.46, -20.46, -20.68, -20.67, -20.56, -20.69, -20.78, -20.78, -20.66,
-        -20.78, -20.88, -20.78, -20.78, -20.88, -20.88, -20.88, -20.75, -20.85, -20.72,
-        -20.72, -21.07, -20.95, -20.98, -21.00, -21.01, -21.10, -21.08, -21.11, -21.10,
-        -21.32, -21.32, -21.08, -21.27, -21.29, -21.29, -21.39, -21.39, -21.26, -21.26,
-        -21.39, -21.39, -21.39, -21.49, -21.52, -21.54, -21.64, -21.52, -21.57, -21.67,
-        -21.66, -21.55, -21.67, -21.70, -21.70, -21.89, -21.92, -21.80, -21.86, -21.77,
-        -21.79, -21.67, -21.67, -21.67, -21.77, -21.77, -21.79, -21.86, -21.89, -21.77,
-        -21.86, -21.86, -21.77, -22.02, -22.01, -22.01, -21.99, -22.10, -21.99, -21.99,
-        -22.09, -21.99, -21.99, -22.11, -22.21, -22.20, -22.09, -22.12, -22.21, -22.21,
-        -22.18, -22.18, -22.18, -22.18, -22.40, -22.40, -22.42, -22.43, -22.34, -22.37,
-        -22.43, -22.53, -22.53, -22.43, -22.44, -22.53, -22.52, -22.40, -22.40, -22.50,
-        -22.50, -22.50, -22.62, -22.72, -22.60, -22.60, -22.60, -22.44, -22.47, -22.60,
-        -22.69, -22.75, -22.84, -22.72, -22.73, -22.85, -22.85, -22.85, -22.76, -22.85,
-        -22.88, -22.85, -22.75, -22.75, -22.75, -22.66, -22.66, -22.66, -22.75, -22.87,
-        -22.87, -22.97, -22.97, -23.00, -23.00, -23.00, -23.03, -23.03, -23.03, -23.03,
-        -23.03, -23.03, -23.00, -23.01, -23.01, -23.10, -23.23, -23.23, -23.23, -23.23,
-        -23.35, -23.25, -23.25, -23.23, -23.16, -23.25, -23.25, -23.20, -23.23, -23.35,
-        -23.35, -23.35, -23.35, -23.35, -23.35, -23.35, -23.23, -23.35, -23.32, -23.20,
-        -23.35, -23.20, -23.23, -23.35, -23.20, -23.32, -23.35, -23.20, -23.32, -23.29,
-        -23.32, -23.45, -23.39, -23.51, -23.51, -23.61, -23.54, -23.61, -23.74, -23.54,
-        -23.79, -23.77, -23.54, -23.67, -23.54, -23.54, -23.35, -23.54, -23.54, -23.32,
-        -23.54, -23.54, -23.32, -23.55, -23.54, -23.48, -23.60, -23.54, -23.54, -23.57,
-        -23.64, -23.64, -23.64, -23.64, -23.77, -23.67, -23.67, -23.80, -23.80, -23.80,
-        -23.80, -23.80, -23.67, -23.77, -23.77, -23.64, -23.74, -23.61, -23.64, -23.74,
-        -23.67, -23.77, -23.77, -23.89, -23.99, -23.74, -23.77, -23.74, -23.74, -23.61,
-        -23.77, -23.64, -23.77, -23.64, -23.89, -23.67, -23.89, -23.74, -23.89, -23.99,
-        -23.89, -23.89, -24.02, -23.89, -23.80, -23.89, -23.80, -23.54, -23.77, -23.67,
-        -23.64, -23.67, -23.74, -23.67, -23.67, -23.89, -23.77, -23.89, -23.80, -23.99,
-        -23.89, -23.86, -23.89, -23.89, -23.79, -23.99, -23.89, -23.89, -23.99, -23.77,
-        -23.89, -23.86, -23.89, -23.86, -23.86, -23.99, -23.74, -23.93, -23.74, -23.77,
-        -23.96, -23.77, -23.89, -23.99, -23.86, -23.87, -23.86, -23.96, -23.99, -23.87,
-        -23.96, -24.08, -23.96, -24.08, -24.06, -23.93, -23.96, -24.08, -23.96, -23.83,
-        -23.96, -23.99, -23.86, -23.96, -23.99, -23.99, -23.99, -23.99, -24.08, -24.08,
-        -23.96, -24.06, -23.93, -23.96, -23.96, -23.96, -23.99, -23.99, -23.99, -23.99,
-        -23.99, -24.11, -24.11, -24.11, -24.11, -24.11, -24.11, -23.99, -23.99, -23.99,
-        -23.89, -24.02, -24.11, -23.99, -23.99, -24.11, -24.14, -24.02, -23.99, -23.89,
-        -23.86, -23.99, -23.89, -23.86, -23.96, -23.99, -23.99, -24.08, -24.11, -23.99,
-        -23.99, -24.11, -24.11, -24.02, -23.99, -24.11, -24.14, -23.99, -23.99, -24.20,
-        -23.99, -23.99, -23.99, -23.89, -23.99, -23.99, -23.86, -23.99, -23.99, -24.06,
-        -23.99, -23.93, -24.08, -23.89, -23.89, -24.02, -24.02, -24.05, -24.14, -24.02,
-        -24.02, -24.05, -24.02, -24.11, -23.99, -23.89, -23.86, -23.99, -23.89, -24.02,
-        -23.89, -23.99, -24.02, -24.02, -24.02, -24.05, -24.11, -23.99, -24.08, -23.99,
-        -23.99, -23.99, -23.99, -23.93, -23.93, -23.99, -23.99, -23.83, -23.96, -23.99,
-        -23.86, -23.83, -23.96, -23.99, -23.89, -23.89, -23.89, -23.74, -23.77, -23.80,
-        -23.80, -23.80, -23.64, -23.74, -23.77, -23.77, -23.75, -23.74, -23.74, -23.49,
-        -23.61, -23.64, -23.64, -23.51, -23.39, -23.42, -23.39, -23.42, -23.29, -23.32,
-        -23.45, -23.48, -23.45, -23.45, -23.57, -23.60, -23.57, -23.45, -23.57, -23.45,
-        -23.35, -23.23, -23.20, -23.17, -23.20, -23.20, -23.17, -23.07, -23.10, -22.95,
-        -23.00, -22.95, -22.97, -22.88, -22.97, -22.85, -22.85, -22.85, -22.63, -22.72,
-        -22.85, -22.63, -22.60, -22.75, -22.66, -22.53, -22.66, -22.56, -22.47, -22.41,
-        -22.34, -22.34, -22.31, -22.11, -22.09, -22.09, -21.99, -21.86, -21.86, -21.89,
-        -21.80, -21.67, -21.70, -21.70, -21.54, -21.48, -21.57, -21.45, -21.45, -21.48,
-        -21.48, -21.32, -21.26, -21.10, -21.23, -21.10, -20.98, -21.10, -20.98, -20.78,
-        -20.91, -20.78, -20.71, -20.56, -20.69, -20.78, -20.53, -20.43, -20.40, -20.41,
-        -20.31, -20.18, -20.09, -20.12, -19.99, -19.92, -19.80, -19.80, -19.67, -19.64,
-        -19.55, -19.55, -19.55
+        -1111, -1123,
+        -1108, -1098, -1123, -1111, -1123, -1123, -1114, -1114, -1111, -1126,
+        -1113, -1111, -1123, -1126, -1111, -1133, -1133, -1130, -1130, -1130,
+        -1142, -1130, -1130, -1130, -1130, -1130, -1133, -1130, -1154, -1145,
+        -1148, -1142, -1155, -1158, -1161, -1161, -1168, -1161, -1161, -1168,
+        -1180, -1177, -1177, -1180, -1177, -1187, -1187, -1190, -1184, -1190,
+        -1190, -1180, -1202, -1190, -1190, -1180, -1202, -1199, -1209, -1209,
+        -1222, -1219, -1219, -1231, -1222, -1219, -1219, -1234, -1225, -1219,
+        -1234, -1225, -1225, -1233, -1234, -1234, -1244, -1244, -1247, -1256,
+        -1256, -1253, -1256, -1256, -1263, -1266, -1263, -1263, -1266, -1251,
+        -1253, -1263, -1276, -1260, -1273, -1276, -1273, -1285, -1285, -1295,
+        -1295, -1295, -1308, -1295, -1317, -1298, -1301, -1310, -1298, -1313,
+        -1310, -1310, -1301, -1313, -1313, -1333, -1326, -1320, -1320, -1333,
+        -1329, -1330, -1317, -1330, -1344, -1345, -1355, -1345, -1358, -1355,
+        -1367, -1367, -1370, -1367, -1358, -1358, -1367, -1377, -1367, -1390,
+        -1367, -1390, -1387, -1387, -1399, -1393, -1390, -1393, -1386, -1393,
+        -1380, -1390, -1383, -1377, -1387, -1402, -1390, -1412, -1399, -1412,
+        -1422, -1422, -1422, -1431, -1431, -1431, -1419, -1444, -1441, -1444,
+        -1436, -1444, -1459, -1453, -1466, -1456, -1453, -1450, -1466, -1460,
+        -1473, -1460, -1482, -1460, -1466, -1473, -1450, -1471, -1460, -1472,
+        -1473, -1498, -1485, -1485, -1485, -1488, -1498, -1501, -1510, -1520,
+        -1520, -1530, -1520, -1533, -1523, -1523, -1513, -1520, -1520, -1523,
+        -1520, -1508, -1520, -1507, -1520, -1530, -1545, -1530, -1545, -1567,
+        -1545, -1570, -1567, -1558, -1555, -1567, -1570, -1564, -1587, -1564,
+        -1584, -1584, -1584, -1596, -1584, -1596, -1601, -1599, -1599, -1591,
+        -1599, -1612, -1599, -1609, -1612, -1609, -1634, -1609, -1621, -1644,
+        -1621, -1644, -1647, -1647, -1647, -1634, -1644, -1631, -1634, -1644,
+        -1631, -1644, -1653, -1653, -1666, -1666, -1678, -1681, -1669, -1694,
+        -1669, -1678, -1681, -1678, -1698, -1678, -1698, -1685, -1698, -1707,
+        -1698, -1707, -1695, -1707, -1707, -1710, -1720, -1710, -1713, -1707,
+        -1707, -1713, -1707, -1713, -1710, -1723, -1745, -1732, -1755, -1745,
+        -1742, -1752, -1752, -1752, -1774, -1752, -1761, -1777, -1774, -1777,
+        -1777, -1781, -1777, -1780, -1802, -1789, -1792, -1802, -1789, -1799,
+        -1802, -1789, -1799, -1802, -1809, -1799, -1812, -1821, -1816, -1821,
+        -1822, -1816, -1821, -1831, -1828, -1821, -1831, -1843, -1821, -1841,
+        -1840, -1831, -1841, -1860, -1865, -1841, -1863, -1866, -1850, -1863,
+        -1875, -1888, -1866, -1872, -1888, -1878, -1878, -1888, -1891, -1897,
+        -1888, -1878, -1900, -1888, -1888, -1888, -1898, -1885, -1895, -1904,
+        -1907, -1907, -1907, -1910, -1920, -1924, -1910, -1910, -1907, -1932,
+        -1910, -1910, -1929, -1935, -1945, -1929, -1945, -1955, -1954, -1957,
+        -1955, -1955, -1954, -1967, -1955, -1955, -1964, -1980, -1967, -1989,
+        -1992, -1992, -2005, -2002, -1993, -2002, -2005, -2005, -2012, -2014,
+        -2002, -2024, -2024, -2014, -2012, -2024, -2024, -2015, -2005, -2024,
+        -2024, -2030, -2048, -2034, -2024, -2034, -2037, -2046, -2049, -2049,
+        -2046, -2046, -2046, -2068, -2067, -2056, -2069, -2078, -2078, -2066,
+        -2078, -2088, -2078, -2078, -2088, -2088, -2088, -2075, -2085, -2072,
+        -2072, -2107, -2095, -2098, -2100, -2101, -2110, -2108, -2111, -2110,
+        -2132, -2132, -2108, -2127, -2129, -2129, -2139, -2139, -2126, -2126,
+        -2139, -2139, -2139, -2149, -2152, -2154, -2164, -2152, -2157, -2167,
+        -2166, -2155, -2167, -2170, -2170, -2189, -2192, -2180, -2186, -2177,
+        -2179, -2167, -2167, -2167, -2177, -2177, -2179, -2186, -2189, -2177,
+        -2186, -2186, -2177, -2202, -2201, -2201, -2199, -2210, -2199, -2199,
+        -2209, -2199, -2199, -2211, -2221, -2220, -2209, -2212, -2221, -2221,
+        -2218, -2218, -2218, -2218, -2240, -2240, -2242, -2243, -2234, -2237,
+        -2243, -2253, -2253, -2243, -2244, -2253, -2252, -2240, -2240, -2250,
+        -2250, -2250, -2262, -2272, -2260, -2260, -2260, -2244, -2247, -2260,
+        -2269, -2275, -2284, -2272, -2273, -2285, -2285, -2285, -2276, -2285,
+        -2288, -2285, -2275, -2275, -2275, -2266, -2266, -2266, -2275, -2287,
+        -2287, -2297, -2297, -2300, -2300, -2300, -2303, -2303, -2303, -2303,
+        -2303, -2303, -2300, -2301, -2301, -2310, -2323, -2323, -2323, -2323,
+        -2335, -2325, -2325, -2323, -2316, -2325, -2325, -2320, -2323, -2335,
+        -2335, -2335, -2335, -2335, -2335, -2335, -2323, -2335, -2332, -2320,
+        -2335, -2320, -2323, -2335, -2320, -2332, -2335, -2320, -2332, -2329,
+        -2332, -2345, -2339, -2351, -2351, -2361, -2354, -2361, -2374, -2354,
+        -2379, -2377, -2354, -2367, -2354, -2354, -2335, -2354, -2354, -2332,
+        -2354, -2354, -2332, -2355, -2354, -2348, -2360, -2354, -2354, -2357,
+        -2364, -2364, -2364, -2364, -2377, -2367, -2367, -2380, -2380, -2380,
+        -2380, -2380, -2367, -2377, -2377, -2364, -2374, -2361, -2364, -2374,
+        -2367, -2377, -2377, -2389, -2399, -2374, -2377, -2374, -2374, -2361,
+        -2377, -2364, -2377, -2364, -2389, -2367, -2389, -2374, -2389, -2399,
+        -2389, -2389, -2402, -2389, -2380, -2389, -2380, -2354, -2377, -2367,
+        -2364, -2367, -2374, -2367, -2367, -2389, -2377, -2389, -2380, -2399,
+        -2389, -2386, -2389, -2389, -2379, -2399, -2389, -2389, -2399, -2377,
+        -2389, -2386, -2389, -2386, -2386, -2399, -2374, -2393, -2374, -2377,
+        -2396, -2377, -2389, -2399, -2386, -2387, -2386, -2396, -2399, -2387,
+        -2396, -2408, -2396, -2408, -2406, -2393, -2396, -2408, -2396, -2383,
+        -2396, -2399, -2386, -2396, -2399, -2399, -2399, -2399, -2408, -2408,
+        -2396, -2406, -2393, -2396, -2396, -2396, -2399, -2399, -2399, -2399,
+        -2399, -2411, -2411, -2411, -2411, -2411, -2411, -2399, -2399, -2399,
+        -2389, -2402, -2411, -2399, -2399, -2411, -2414, -2402, -2399, -2389,
+        -2386, -2399, -2389, -2386, -2396, -2399, -2399, -2408, -2411, -2399,
+        -2399, -2411, -2411, -2402, -2399, -2411, -2414, -2399, -2399, -2420,
+        -2399, -2399, -2399, -2389, -2399, -2399, -2386, -2399, -2399, -2406,
+        -2399, -2393, -2408, -2389, -2389, -2402, -2402, -2405, -2414, -2402,
+        -2402, -2405, -2402, -2411, -2399, -2389, -2386, -2399, -2389, -2402,
+        -2389, -2399, -2402, -2402, -2402, -2405, -2411, -2399, -2408, -2399,
+        -2399, -2399, -2399, -2393, -2393, -2399, -2399, -2383, -2396, -2399,
+        -2386, -2383, -2396, -2399, -2389, -2389, -2389, -2374, -2377, -2380,
+        -2380, -2380, -2364, -2374, -2377, -2377, -2375, -2374, -2374, -2349,
+        -2361, -2364, -2364, -2351, -2339, -2342, -2339, -2342, -2329, -2332,
+        -2345, -2348, -2345, -2345, -2357, -2360, -2357, -2345, -2357, -2345,
+        -2335, -2323, -2320, -2317, -2320, -2320, -2317, -2307, -2310, -2295,
+        -2300, -2295, -2297, -2288, -2297, -2285, -2285, -2285, -2263, -2272,
+        -2285, -2263, -2260, -2275, -2266, -2253, -2266, -2256, -2247, -2241,
+        -2234, -2234, -2231, -2211, -2209, -2209, -2199, -2186, -2186, -2189,
+        -2180, -2167, -2170, -2170, -2154, -2148, -2157, -2145, -2145, -2148,
+        -2148, -2132, -2126, -2110, -2123, -2110, -2098, -2110, -2098, -2078,
+        -2091, -2078, -2071, -2056, -2069, -2078, -2053, -2043, -2040, -2041,
+        -2031, -2018, -2009, -2012, -1999, -1992, -1980, -1980, -1967, -1964,
+        -1955, -1955, -1955
     };
 
-    static const float iso226_2023_curve_70_phons[985] =
+    static const int16_t iso226_2023_curve_70_phons[985] =
     {
-        -6.28, -6.40,
-        -6.15, -6.15, -6.40, -6.28, -6.40, -6.40, -6.41, -6.40, -6.28, -6.53,
-        -6.40, -6.28, -6.40, -6.53, -6.28, -6.40, -6.40, -6.28, -6.28, -6.28,
-        -6.40, -6.28, -6.28, -6.28, -6.28, -6.28, -6.40, -6.28, -6.52, -6.53,
-        -6.65, -6.40, -6.53, -6.65, -6.78, -6.78, -6.65, -6.78, -6.78, -6.65,
-        -6.78, -6.65, -6.65, -6.78, -6.65, -6.65, -6.65, -6.78, -6.53, -6.78,
-        -6.78, -6.78, -6.90, -6.78, -6.78, -6.78, -6.90, -6.78, -6.78, -6.78,
-        -6.90, -6.78, -6.78, -6.90, -6.90, -6.78, -6.78, -7.03, -7.03, -6.78,
-        -7.02, -7.03, -7.03, -7.02, -7.03, -7.03, -7.04, -7.03, -7.16, -7.16,
-        -7.16, -7.03, -7.16, -7.16, -7.03, -7.16, -7.03, -7.03, -7.16, -6.90,
-        -7.03, -7.03, -7.16, -6.90, -7.03, -7.16, -7.03, -7.16, -7.16, -7.16,
-        -7.15, -7.16, -7.28, -7.16, -7.28, -7.28, -7.41, -7.41, -7.28, -7.53,
-        -7.41, -7.41, -7.41, -7.53, -7.53, -7.53, -7.66, -7.41, -7.41, -7.53,
-        -7.40, -7.41, -7.28, -7.41, -7.65, -7.66, -7.66, -7.66, -7.78, -7.66,
-        -7.78, -7.78, -7.91, -7.78, -7.78, -7.78, -7.78, -7.78, -7.78, -7.91,
-        -7.78, -7.91, -7.78, -7.78, -7.91, -8.03, -7.91, -8.03, -8.16, -8.04,
-        -7.91, -7.92, -8.03, -7.78, -7.78, -8.03, -7.91, -8.03, -7.91, -8.03,
-        -8.03, -8.03, -8.03, -8.03, -8.03, -8.03, -7.91, -8.16, -8.03, -8.16,
-        -8.28, -8.16, -8.41, -8.16, -8.29, -8.29, -8.16, -8.03, -8.29, -8.03,
-        -8.16, -8.03, -8.16, -8.03, -8.29, -8.16, -8.03, -8.15, -8.03, -8.15,
-        -8.16, -8.41, -8.29, -8.29, -8.29, -8.41, -8.41, -8.54, -8.54, -8.54,
-        -8.54, -8.54, -8.54, -8.66, -8.66, -8.66, -8.66, -8.54, -8.54, -8.66,
-        -8.54, -8.42, -8.54, -8.41, -8.54, -8.54, -8.78, -8.54, -8.79, -8.91,
-        -8.79, -9.04, -8.91, -8.91, -8.79, -8.92, -9.03, -8.79, -8.91, -8.79,
-        -8.79, -8.79, -8.79, -8.91, -8.79, -8.91, -9.16, -9.04, -9.04, -9.15,
-        -9.04, -9.16, -9.04, -9.04, -9.16, -9.04, -9.29, -9.04, -9.16, -9.29,
-        -9.16, -9.29, -9.42, -9.42, -9.42, -9.30, -9.29, -9.16, -9.29, -9.29,
-        -9.16, -9.29, -9.29, -9.29, -9.42, -9.42, -9.54, -9.67, -9.54, -9.79,
-        -9.54, -9.54, -9.67, -9.54, -9.55, -9.54, -9.54, -9.42, -9.54, -9.53,
-        -9.54, -9.54, -9.42, -9.54, -9.54, -9.67, -9.67, -9.67, -9.79, -9.54,
-        -9.54, -9.79, -9.54, -9.79, -9.67, -9.79, -9.92, -9.79, -9.92, -9.92,
-        -9.79, -9.79, -9.79, -9.79, -9.92, -9.80, -9.79, -10.04, -9.92, -10.04,
-        -10.04, -10.18, -10.04, -10.17, -10.29, -10.17, -10.29, -10.29, -10.17, -10.17,
-        -10.29, -10.17, -10.17, -10.29, -10.17, -10.17, -10.29, -10.29, -10.04, -10.29,
-        -10.29, -10.04, -10.29, -10.29, -10.17, -10.29, -10.29, -10.41, -10.29, -10.29,
-        -10.29, -10.29, -10.29, -10.29, -10.53, -10.29, -10.42, -10.55, -10.30, -10.43,
-        -10.55, -10.67, -10.55, -10.80, -10.68, -10.66, -10.67, -10.67, -10.80, -10.66,
-        -10.67, -10.67, -10.79, -10.67, -10.68, -10.67, -10.67, -10.55, -10.55, -10.55,
-        -10.67, -10.67, -10.67, -10.80, -10.80, -11.04, -10.80, -10.80, -10.68, -10.92,
-        -10.80, -10.80, -10.80, -11.05, -11.05, -10.80, -11.05, -11.05, -11.04, -11.17,
-        -11.05, -11.05, -11.05, -11.17, -11.05, -11.05, -11.05, -11.30, -11.17, -11.30,
-        -11.42, -11.42, -11.55, -11.43, -11.42, -11.42, -11.55, -11.55, -11.42, -11.55,
-        -11.43, -11.55, -11.55, -11.55, -11.43, -11.55, -11.55, -11.55, -11.55, -11.55,
-        -11.55, -11.80, -11.79, -11.55, -11.55, -11.55, -11.68, -11.68, -11.79, -11.80,
-        -11.68, -11.68, -11.68, -11.80, -11.79, -11.68, -11.80, -11.80, -11.80, -11.68,
-        -11.80, -11.80, -11.80, -11.80, -11.80, -11.80, -11.80, -11.68, -11.68, -11.55,
-        -11.55, -11.80, -11.68, -11.80, -11.93, -11.93, -11.93, -11.82, -11.93, -11.93,
-        -12.05, -12.05, -11.81, -11.80, -11.93, -11.93, -11.93, -11.93, -11.80, -11.80,
-        -11.93, -11.93, -11.93, -11.93, -12.05, -12.18, -12.18, -12.05, -12.30, -12.30,
-        -12.29, -12.18, -12.30, -12.43, -12.43, -12.43, -12.55, -12.43, -12.30, -12.31,
-        -12.43, -12.30, -12.30, -12.30, -12.30, -12.31, -12.43, -12.30, -12.43, -12.30,
-        -12.30, -12.31, -12.30, -12.55, -12.55, -12.55, -12.43, -12.54, -12.43, -12.43,
-        -12.44, -12.43, -12.43, -12.55, -12.55, -12.54, -12.43, -12.55, -12.55, -12.55,
-        -12.43, -12.43, -12.43, -12.43, -12.55, -12.55, -12.67, -12.68, -12.68, -12.81,
-        -12.68, -12.68, -12.69, -12.68, -12.68, -12.68, -12.67, -12.55, -12.55, -12.55,
-        -12.55, -12.55, -12.67, -12.67, -12.55, -12.55, -12.55, -12.30, -12.43, -12.55,
-        -12.55, -12.80, -12.80, -12.68, -12.69, -12.81, -12.81, -12.81, -12.81, -12.81,
-        -12.92, -12.81, -12.81, -12.81, -12.81, -12.81, -12.81, -12.81, -12.81, -12.93,
-        -12.93, -12.93, -12.93, -13.05, -13.05, -13.05, -13.18, -13.18, -13.18, -13.18,
-        -13.18, -13.18, -13.06, -13.07, -13.07, -13.06, -13.18, -13.18, -13.18, -13.19,
-        -13.31, -13.31, -13.31, -13.18, -13.31, -13.31, -13.31, -13.06, -13.18, -13.31,
-        -13.31, -13.31, -13.31, -13.31, -13.31, -13.31, -13.18, -13.31, -13.18, -13.06,
-        -13.31, -13.06, -13.18, -13.31, -13.06, -13.18, -13.31, -13.06, -13.18, -13.06,
-        -13.18, -13.31, -13.06, -13.18, -13.18, -13.18, -13.31, -13.18, -13.31, -13.31,
-        -13.55, -13.43, -13.31, -13.43, -13.31, -13.31, -13.31, -13.30, -13.31, -13.18,
-        -13.31, -13.31, -13.18, -13.32, -13.31, -13.43, -13.56, -13.31, -13.31, -13.43,
-        -13.31, -13.31, -13.31, -13.31, -13.43, -13.43, -13.43, -13.56, -13.56, -13.56,
-        -13.56, -13.56, -13.43, -13.43, -13.43, -13.31, -13.31, -13.18, -13.31, -13.31,
-        -13.43, -13.43, -13.43, -13.56, -13.56, -13.32, -13.43, -13.31, -13.31, -13.18,
-        -13.43, -13.31, -13.43, -13.31, -13.56, -13.43, -13.56, -13.31, -13.56, -13.56,
-        -13.56, -13.56, -13.68, -13.56, -13.56, -13.56, -13.56, -13.31, -13.43, -13.43,
-        -13.31, -13.43, -13.31, -13.43, -13.43, -13.56, -13.43, -13.56, -13.56, -13.56,
-        -13.56, -13.43, -13.56, -13.56, -13.56, -13.56, -13.56, -13.56, -13.56, -13.43,
-        -13.56, -13.43, -13.56, -13.43, -13.43, -13.56, -13.31, -13.31, -13.31, -13.43,
-        -13.43, -13.43, -13.56, -13.56, -13.43, -13.44, -13.43, -13.43, -13.56, -13.43,
-        -13.43, -13.56, -13.43, -13.56, -13.43, -13.31, -13.43, -13.56, -13.43, -13.31,
-        -13.43, -13.56, -13.43, -13.43, -13.56, -13.56, -13.56, -13.56, -13.56, -13.56,
-        -13.43, -13.43, -13.31, -13.43, -13.43, -13.43, -13.56, -13.56, -13.56, -13.56,
-        -13.56, -13.68, -13.68, -13.68, -13.68, -13.68, -13.68, -13.56, -13.56, -13.56,
-        -13.56, -13.68, -13.68, -13.57, -13.56, -13.68, -13.81, -13.68, -13.56, -13.56,
-        -13.43, -13.56, -13.56, -13.43, -13.43, -13.56, -13.56, -13.56, -13.68, -13.56,
-        -13.56, -13.68, -13.68, -13.68, -13.56, -13.68, -13.81, -13.56, -13.56, -13.67,
-        -13.56, -13.56, -13.56, -13.56, -13.56, -13.56, -13.43, -13.56, -13.56, -13.43,
-        -13.56, -13.31, -13.56, -13.56, -13.56, -13.68, -13.69, -13.81, -13.81, -13.68,
-        -13.68, -13.81, -13.68, -13.68, -13.56, -13.56, -13.43, -13.56, -13.56, -13.68,
-        -13.56, -13.56, -13.68, -13.68, -13.68, -13.81, -13.68, -13.56, -13.56, -13.56,
-        -13.56, -13.56, -13.56, -13.31, -13.31, -13.56, -13.56, -13.31, -13.43, -13.56,
-        -13.43, -13.31, -13.43, -13.56, -13.56, -13.56, -13.56, -13.31, -13.43, -13.56,
-        -13.56, -13.56, -13.31, -13.32, -13.43, -13.43, -13.42, -13.31, -13.31, -13.06,
-        -13.18, -13.31, -13.31, -13.18, -13.06, -13.18, -13.06, -13.18, -13.06, -13.18,
-        -13.31, -13.43, -13.31, -13.31, -13.43, -13.56, -13.43, -13.31, -13.43, -13.31,
-        -13.31, -13.18, -13.06, -12.93, -13.06, -13.06, -12.93, -12.93, -13.06, -12.81,
-        -13.06, -12.81, -12.93, -12.93, -12.93, -12.81, -12.81, -12.81, -12.68, -12.68,
-        -12.81, -12.68, -12.55, -12.81, -12.81, -12.68, -12.81, -12.81, -12.81, -12.56,
-        -12.68, -12.68, -12.55, -12.55, -12.43, -12.43, -12.43, -12.30, -12.30, -12.43,
-        -12.43, -12.30, -12.43, -12.43, -12.18, -12.30, -12.30, -12.18, -12.18, -12.30,
-        -12.30, -12.05, -12.18, -11.93, -12.05, -11.93, -11.80, -11.93, -11.80, -11.80,
-        -11.93, -11.80, -11.93, -11.68, -11.80, -11.80, -11.55, -11.55, -11.42, -11.42,
-        -11.42, -11.30, -11.30, -11.42, -11.30, -11.42, -11.30, -11.30, -11.17, -11.05,
-        -11.05, -11.05, -11.05
+        -628, -640,
+        -615, -615, -640, -628, -640, -640, -641, -640, -628, -653,
+        -640, -628, -640, -653, -628, -640, -640, -628, -628, -628,
+        -640, -628, -628, -628, -628, -628, -640, -628, -652, -653,
+        -665, -640, -653, -665, -678, -678, -665, -678, -678, -665,
+        -678, -665, -665, -678, -665, -665, -665, -678, -653, -678,
+        -678, -678, -690, -678, -678, -678, -690, -678, -678, -678,
+        -690, -678, -678, -690, -690, -678, -678, -703, -703, -678,
+        -702, -703, -703, -702, -703, -703, -704, -703, -716, -716,
+        -716, -703, -716, -716, -703, -716, -703, -703, -716, -690,
+        -703, -703, -716, -690, -703, -716, -703, -716, -716, -716,
+        -715, -716, -728, -716, -728, -728, -741, -741, -728, -753,
+        -741, -741, -741, -753, -753, -753, -766, -741, -741, -753,
+        -740, -741, -728, -741, -765, -766, -766, -766, -778, -766,
+        -778, -778, -791, -778, -778, -778, -778, -778, -778, -791,
+        -778, -791, -778, -778, -791, -803, -791, -803, -816, -804,
+        -791, -792, -803, -778, -778, -803, -791, -803, -791, -803,
+        -803, -803, -803, -803, -803, -803, -791, -816, -803, -816,
+        -828, -816, -841, -816, -829, -829, -816, -803, -829, -803,
+        -816, -803, -816, -803, -829, -816, -803, -815, -803, -815,
+        -816, -841, -829, -829, -829, -841, -841, -854, -854, -854,
+        -854, -854, -854, -866, -866, -866, -866, -854, -854, -866,
+        -854, -842, -854, -841, -854, -854, -878, -854, -879, -891,
+        -879, -904, -891, -891, -879, -892, -903, -879, -891, -879,
+        -879, -879, -879, -891, -879, -891, -916, -904, -904, -915,
+        -904, -916, -904, -904, -916, -904, -929, -904, -916, -929,
+        -916, -929, -942, -942, -942, -930, -929, -916, -929, -929,
+        -916, -929, -929, -929, -942, -942, -954, -967, -954, -979,
+        -954, -954, -967, -954, -955, -954, -954, -942, -954, -953,
+        -954, -954, -942, -954, -954, -967, -967, -967, -979, -954,
+        -954, -979, -954, -979, -967, -979, -992, -979, -992, -992,
+        -979, -979, -979, -979, -992, -980, -979, -1004, -992, -1004,
+        -1004, -1018, -1004, -1017, -1029, -1017, -1029, -1029, -1017, -1017,
+        -1029, -1017, -1017, -1029, -1017, -1017, -1029, -1029, -1004, -1029,
+        -1029, -1004, -1029, -1029, -1017, -1029, -1029, -1041, -1029, -1029,
+        -1029, -1029, -1029, -1029, -1053, -1029, -1042, -1055, -1030, -1043,
+        -1055, -1067, -1055, -1080, -1068, -1066, -1067, -1067, -1080, -1066,
+        -1067, -1067, -1079, -1067, -1068, -1067, -1067, -1055, -1055, -1055,
+        -1067, -1067, -1067, -1080, -1080, -1104, -1080, -1080, -1068, -1092,
+        -1080, -1080, -1080, -1105, -1105, -1080, -1105, -1105, -1104, -1117,
+        -1105, -1105, -1105, -1117, -1105, -1105, -1105, -1130, -1117, -1130,
+        -1142, -1142, -1155, -1143, -1142, -1142, -1155, -1155, -1142, -1155,
+        -1143, -1155, -1155, -1155, -1143, -1155, -1155, -1155, -1155, -1155,
+        -1155, -1180, -1179, -1155, -1155, -1155, -1168, -1168, -1179, -1180,
+        -1168, -1168, -1168, -1180, -1179, -1168, -1180, -1180, -1180, -1168,
+        -1180, -1180, -1180, -1180, -1180, -1180, -1180, -1168, -1168, -1155,
+        -1155, -1180, -1168, -1180, -1193, -1193, -1193, -1182, -1193, -1193,
+        -1205, -1205, -1181, -1180, -1193, -1193, -1193, -1193, -1180, -1180,
+        -1193, -1193, -1193, -1193, -1205, -1218, -1218, -1205, -1230, -1230,
+        -1229, -1218, -1230, -1243, -1243, -1243, -1255, -1243, -1230, -1231,
+        -1243, -1230, -1230, -1230, -1230, -1231, -1243, -1230, -1243, -1230,
+        -1230, -1231, -1230, -1255, -1255, -1255, -1243, -1254, -1243, -1243,
+        -1244, -1243, -1243, -1255, -1255, -1254, -1243, -1255, -1255, -1255,
+        -1243, -1243, -1243, -1243, -1255, -1255, -1267, -1268, -1268, -1281,
+        -1268, -1268, -1269, -1268, -1268, -1268, -1267, -1255, -1255, -1255,
+        -1255, -1255, -1267, -1267, -1255, -1255, -1255, -1230, -1243, -1255,
+        -1255, -1280, -1280, -1268, -1269, -1281, -1281, -1281, -1281, -1281,
+        -1292, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1293,
+        -1293, -1293, -1293, -1305, -1305, -1305, -1318, -1318, -1318, -1318,
+        -1318, -1318, -1306, -1307, -1307, -1306, -1318, -1318, -1318, -1319,
+        -1331, -1331, -1331, -1318, -1331, -1331, -1331, -1306, -1318, -1331,
+        -1331, -1331, -1331, -1331, -1331, -1331, -1318, -1331, -1318, -1306,
+        -1331, -1306, -1318, -1331, -1306, -1318, -1331, -1306, -1318, -1306,
+        -1318, -1331, -1306, -1318, -1318, -1318, -1331, -1318, -1331, -1331,
+        -1355, -1343, -1331, -1343, -1331, -1331, -1331, -1330, -1331, -1318,
+        -1331, -1331, -1318, -1332, -1331, -1343, -1356, -1331, -1331, -1343,
+        -1331, -1331, -1331, -1331, -1343, -1343, -1343, -1356, -1356, -1356,
+        -1356, -1356, -1343, -1343, -1343, -1331, -1331, -1318, -1331, -1331,
+        -1343, -1343, -1343, -1356, -1356, -1332, -1343, -1331, -1331, -1318,
+        -1343, -1331, -1343, -1331, -1356, -1343, -1356, -1331, -1356, -1356,
+        -1356, -1356, -1368, -1356, -1356, -1356, -1356, -1331, -1343, -1343,
+        -1331, -1343, -1331, -1343, -1343, -1356, -1343, -1356, -1356, -1356,
+        -1356, -1343, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1343,
+        -1356, -1343, -1356, -1343, -1343, -1356, -1331, -1331, -1331, -1343,
+        -1343, -1343, -1356, -1356, -1343, -1344, -1343, -1343, -1356, -1343,
+        -1343, -1356, -1343, -1356, -1343, -1331, -1343, -1356, -1343, -1331,
+        -1343, -1356, -1343, -1343, -1356, -1356, -1356, -1356, -1356, -1356,
+        -1343, -1343, -1331, -1343, -1343, -1343, -1356, -1356, -1356, -1356,
+        -1356, -1368, -1368, -1368, -1368, -1368, -1368, -1356, -1356, -1356,
+        -1356, -1368, -1368, -1357, -1356, -1368, -1381, -1368, -1356, -1356,
+        -1343, -1356, -1356, -1343, -1343, -1356, -1356, -1356, -1368, -1356,
+        -1356, -1368, -1368, -1368, -1356, -1368, -1381, -1356, -1356, -1367,
+        -1356, -1356, -1356, -1356, -1356, -1356, -1343, -1356, -1356, -1343,
+        -1356, -1331, -1356, -1356, -1356, -1368, -1369, -1381, -1381, -1368,
+        -1368, -1381, -1368, -1368, -1356, -1356, -1343, -1356, -1356, -1368,
+        -1356, -1356, -1368, -1368, -1368, -1381, -1368, -1356, -1356, -1356,
+        -1356, -1356, -1356, -1331, -1331, -1356, -1356, -1331, -1343, -1356,
+        -1343, -1331, -1343, -1356, -1356, -1356, -1356, -1331, -1343, -1356,
+        -1356, -1356, -1331, -1332, -1343, -1343, -1342, -1331, -1331, -1306,
+        -1318, -1331, -1331, -1318, -1306, -1318, -1306, -1318, -1306, -1318,
+        -1331, -1343, -1331, -1331, -1343, -1356, -1343, -1331, -1343, -1331,
+        -1331, -1318, -1306, -1293, -1306, -1306, -1293, -1293, -1306, -1281,
+        -1306, -1281, -1293, -1293, -1293, -1281, -1281, -1281, -1268, -1268,
+        -1281, -1268, -1255, -1281, -1281, -1268, -1281, -1281, -1281, -1256,
+        -1268, -1268, -1255, -1255, -1243, -1243, -1243, -1230, -1230, -1243,
+        -1243, -1230, -1243, -1243, -1218, -1230, -1230, -1218, -1218, -1230,
+        -1230, -1205, -1218, -1193, -1205, -1193, -1180, -1193, -1180, -1180,
+        -1193, -1180, -1193, -1168, -1180, -1180, -1155, -1155, -1142, -1142,
+        -1142, -1130, -1130, -1142, -1130, -1142, -1130, -1130, -1117, -1105,
+        -1105, -1105, -1105
     };
 
-    static const float iso226_2023_curve_80_phons[985] =
+    static const int16_t iso226_2023_curve_80_phons[985] =
     {
-        -1.45, -1.48,
-        -1.42, -1.42, -1.48, -1.45, -1.48, -1.48, -1.48, -1.48, -1.45, -1.51,
-        -1.48, -1.45, -1.48, -1.51, -1.45, -1.48, -1.48, -1.45, -1.45, -1.45,
-        -1.48, -1.45, -1.45, -1.45, -1.45, -1.45, -1.48, -1.45, -1.50, -1.51,
-        -1.54, -1.48, -1.51, -1.54, -1.56, -1.56, -1.54, -1.56, -1.56, -1.54,
-        -1.56, -1.54, -1.54, -1.56, -1.54, -1.54, -1.54, -1.56, -1.51, -1.56,
-        -1.56, -1.56, -1.59, -1.56, -1.56, -1.56, -1.59, -1.56, -1.56, -1.56,
-        -1.59, -1.56, -1.56, -1.59, -1.59, -1.56, -1.56, -1.62, -1.62, -1.56,
-        -1.62, -1.62, -1.62, -1.62, -1.62, -1.62, -1.63, -1.62, -1.65, -1.65,
-        -1.65, -1.62, -1.65, -1.65, -1.62, -1.65, -1.62, -1.62, -1.65, -1.59,
-        -1.62, -1.62, -1.65, -1.59, -1.62, -1.65, -1.62, -1.65, -1.65, -1.65,
-        -1.65, -1.65, -1.68, -1.65, -1.68, -1.68, -1.71, -1.71, -1.68, -1.74,
-        -1.71, -1.71, -1.71, -1.74, -1.74, -1.74, -1.77, -1.71, -1.71, -1.74,
-        -1.71, -1.71, -1.68, -1.71, -1.76, -1.77, -1.77, -1.77, -1.80, -1.77,
-        -1.80, -1.80, -1.83, -1.80, -1.80, -1.80, -1.80, -1.80, -1.80, -1.83,
-        -1.80, -1.83, -1.80, -1.80, -1.83, -1.85, -1.83, -1.85, -1.88, -1.85,
-        -1.83, -1.83, -1.85, -1.80, -1.80, -1.85, -1.83, -1.85, -1.83, -1.85,
-        -1.85, -1.85, -1.85, -1.85, -1.85, -1.85, -1.83, -1.88, -1.85, -1.88,
-        -1.91, -1.88, -1.94, -1.88, -1.91, -1.91, -1.88, -1.85, -1.91, -1.85,
-        -1.88, -1.85, -1.88, -1.85, -1.91, -1.88, -1.85, -1.88, -1.85, -1.88,
-        -1.88, -1.94, -1.91, -1.91, -1.91, -1.94, -1.94, -1.97, -1.97, -1.97,
-        -1.97, -1.97, -1.97, -2.00, -2.00, -2.00, -2.00, -1.97, -1.97, -2.00,
-        -1.97, -1.94, -1.97, -1.94, -1.97, -1.97, -2.03, -1.97, -2.03, -2.06,
-        -2.03, -2.09, -2.06, -2.06, -2.03, -2.06, -2.08, -2.03, -2.06, -2.03,
-        -2.03, -2.03, -2.03, -2.06, -2.03, -2.06, -2.11, -2.09, -2.09, -2.11,
-        -2.09, -2.11, -2.09, -2.09, -2.11, -2.09, -2.14, -2.09, -2.11, -2.14,
-        -2.11, -2.14, -2.17, -2.17, -2.17, -2.15, -2.14, -2.11, -2.14, -2.14,
-        -2.11, -2.14, -2.14, -2.14, -2.17, -2.17, -2.20, -2.23, -2.20, -2.26,
-        -2.20, -2.20, -2.23, -2.20, -2.20, -2.20, -2.20, -2.17, -2.20, -2.20,
-        -2.20, -2.20, -2.17, -2.20, -2.20, -2.23, -2.23, -2.23, -2.26, -2.20,
-        -2.20, -2.26, -2.20, -2.26, -2.23, -2.26, -2.29, -2.26, -2.29, -2.29,
-        -2.26, -2.26, -2.26, -2.26, -2.29, -2.26, -2.26, -2.32, -2.29, -2.32,
-        -2.32, -2.35, -2.32, -2.35, -2.38, -2.35, -2.38, -2.38, -2.35, -2.35,
-        -2.38, -2.35, -2.35, -2.38, -2.35, -2.35, -2.38, -2.38, -2.32, -2.38,
-        -2.38, -2.32, -2.38, -2.38, -2.35, -2.38, -2.38, -2.40, -2.38, -2.38,
-        -2.37, -2.38, -2.38, -2.38, -2.43, -2.38, -2.40, -2.43, -2.38, -2.41,
-        -2.43, -2.46, -2.43, -2.49, -2.46, -2.46, -2.46, -2.46, -2.49, -2.46,
-        -2.46, -2.46, -2.49, -2.46, -2.46, -2.46, -2.46, -2.43, -2.43, -2.43,
-        -2.46, -2.46, -2.46, -2.49, -2.49, -2.55, -2.49, -2.49, -2.46, -2.52,
-        -2.49, -2.49, -2.49, -2.55, -2.55, -2.49, -2.55, -2.55, -2.55, -2.58,
-        -2.55, -2.55, -2.55, -2.58, -2.55, -2.55, -2.55, -2.61, -2.58, -2.61,
-        -2.64, -2.64, -2.67, -2.64, -2.64, -2.64, -2.67, -2.67, -2.64, -2.67,
-        -2.64, -2.67, -2.67, -2.67, -2.64, -2.67, -2.67, -2.67, -2.67, -2.67,
-        -2.67, -2.72, -2.72, -2.67, -2.67, -2.67, -2.69, -2.70, -2.72, -2.72,
-        -2.69, -2.69, -2.69, -2.72, -2.72, -2.69, -2.72, -2.72, -2.72, -2.69,
-        -2.72, -2.72, -2.72, -2.72, -2.72, -2.72, -2.72, -2.69, -2.69, -2.67,
-        -2.67, -2.72, -2.69, -2.72, -2.75, -2.75, -2.75, -2.73, -2.75, -2.75,
-        -2.78, -2.78, -2.72, -2.72, -2.75, -2.75, -2.75, -2.75, -2.72, -2.72,
-        -2.75, -2.75, -2.75, -2.75, -2.78, -2.81, -2.81, -2.78, -2.84, -2.84,
-        -2.84, -2.81, -2.84, -2.87, -2.87, -2.87, -2.90, -2.87, -2.84, -2.84,
-        -2.87, -2.84, -2.84, -2.84, -2.84, -2.84, -2.87, -2.84, -2.87, -2.84,
-        -2.84, -2.84, -2.84, -2.90, -2.90, -2.90, -2.87, -2.89, -2.87, -2.87,
-        -2.87, -2.87, -2.87, -2.90, -2.90, -2.89, -2.87, -2.90, -2.90, -2.90,
-        -2.87, -2.87, -2.87, -2.87, -2.90, -2.90, -2.92, -2.93, -2.93, -2.96,
-        -2.93, -2.93, -2.93, -2.93, -2.93, -2.93, -2.92, -2.90, -2.90, -2.90,
-        -2.90, -2.90, -2.92, -2.92, -2.90, -2.90, -2.90, -2.84, -2.87, -2.90,
-        -2.90, -2.95, -2.95, -2.93, -2.93, -2.96, -2.96, -2.96, -2.96, -2.96,
-        -2.98, -2.96, -2.96, -2.96, -2.96, -2.96, -2.96, -2.96, -2.96, -2.98,
-        -2.98, -2.98, -2.98, -3.01, -3.01, -3.01, -3.04, -3.04, -3.04, -3.04,
-        -3.04, -3.04, -3.01, -3.02, -3.02, -3.01, -3.04, -3.04, -3.04, -3.04,
-        -3.07, -3.07, -3.07, -3.04, -3.07, -3.07, -3.07, -3.01, -3.04, -3.07,
-        -3.07, -3.07, -3.07, -3.07, -3.07, -3.07, -3.04, -3.07, -3.04, -3.01,
-        -3.07, -3.01, -3.04, -3.07, -3.01, -3.04, -3.07, -3.01, -3.04, -3.01,
-        -3.04, -3.07, -3.01, -3.04, -3.04, -3.04, -3.07, -3.04, -3.07, -3.07,
-        -3.13, -3.10, -3.07, -3.10, -3.07, -3.07, -3.07, -3.07, -3.07, -3.04,
-        -3.07, -3.07, -3.04, -3.07, -3.07, -3.10, -3.13, -3.07, -3.07, -3.10,
-        -3.07, -3.07, -3.07, -3.07, -3.10, -3.10, -3.10, -3.13, -3.13, -3.13,
-        -3.13, -3.13, -3.10, -3.10, -3.10, -3.07, -3.07, -3.04, -3.07, -3.07,
-        -3.10, -3.10, -3.10, -3.13, -3.13, -3.07, -3.10, -3.07, -3.07, -3.04,
-        -3.10, -3.07, -3.10, -3.07, -3.13, -3.10, -3.13, -3.07, -3.13, -3.13,
-        -3.13, -3.13, -3.16, -3.13, -3.13, -3.13, -3.13, -3.07, -3.10, -3.10,
-        -3.07, -3.10, -3.07, -3.10, -3.10, -3.13, -3.10, -3.13, -3.13, -3.13,
-        -3.13, -3.10, -3.13, -3.13, -3.13, -3.13, -3.13, -3.13, -3.13, -3.10,
-        -3.13, -3.10, -3.13, -3.10, -3.10, -3.13, -3.07, -3.07, -3.07, -3.10,
-        -3.10, -3.10, -3.13, -3.13, -3.10, -3.10, -3.10, -3.10, -3.13, -3.10,
-        -3.10, -3.13, -3.10, -3.13, -3.10, -3.07, -3.10, -3.13, -3.10, -3.07,
-        -3.10, -3.13, -3.10, -3.10, -3.13, -3.13, -3.13, -3.13, -3.13, -3.13,
-        -3.10, -3.10, -3.07, -3.10, -3.10, -3.10, -3.13, -3.13, -3.13, -3.13,
-        -3.13, -3.16, -3.16, -3.16, -3.16, -3.16, -3.16, -3.13, -3.13, -3.13,
-        -3.13, -3.16, -3.16, -3.13, -3.13, -3.16, -3.19, -3.16, -3.13, -3.13,
-        -3.10, -3.13, -3.13, -3.10, -3.10, -3.13, -3.13, -3.13, -3.16, -3.13,
-        -3.13, -3.16, -3.16, -3.16, -3.13, -3.16, -3.19, -3.13, -3.13, -3.16,
-        -3.13, -3.13, -3.13, -3.13, -3.13, -3.13, -3.10, -3.13, -3.13, -3.10,
-        -3.13, -3.07, -3.13, -3.13, -3.13, -3.16, -3.16, -3.19, -3.19, -3.16,
-        -3.16, -3.19, -3.16, -3.16, -3.13, -3.13, -3.10, -3.13, -3.13, -3.16,
-        -3.13, -3.13, -3.16, -3.16, -3.16, -3.19, -3.16, -3.13, -3.13, -3.13,
-        -3.13, -3.13, -3.13, -3.07, -3.07, -3.13, -3.13, -3.07, -3.10, -3.13,
-        -3.10, -3.07, -3.10, -3.13, -3.13, -3.13, -3.13, -3.07, -3.10, -3.13,
-        -3.13, -3.13, -3.07, -3.07, -3.10, -3.10, -3.10, -3.07, -3.07, -3.01,
-        -3.04, -3.07, -3.07, -3.04, -3.01, -3.04, -3.01, -3.04, -3.01, -3.04,
-        -3.07, -3.10, -3.07, -3.07, -3.10, -3.13, -3.10, -3.07, -3.10, -3.07,
-        -3.07, -3.04, -3.01, -2.98, -3.01, -3.01, -2.98, -2.98, -3.01, -2.96,
-        -3.01, -2.96, -2.98, -2.98, -2.98, -2.96, -2.96, -2.96, -2.93, -2.93,
-        -2.96, -2.93, -2.90, -2.96, -2.96, -2.93, -2.96, -2.96, -2.96, -2.90,
-        -2.93, -2.93, -2.90, -2.90, -2.87, -2.87, -2.87, -2.84, -2.84, -2.87,
-        -2.87, -2.84, -2.87, -2.87, -2.81, -2.84, -2.84, -2.81, -2.81, -2.84,
-        -2.84, -2.78, -2.81, -2.75, -2.78, -2.75, -2.72, -2.75, -2.72, -2.72,
-        -2.75, -2.72, -2.75, -2.69, -2.72, -2.72, -2.67, -2.67, -2.64, -2.64,
-        -2.64, -2.61, -2.61, -2.64, -2.61, -2.64, -2.61, -2.61, -2.58, -2.55,
-        -2.55, -2.55, -2.55
+        -145, -148,
+        -142, -142, -148, -145, -148, -148, -148, -148, -145, -151,
+        -148, -145, -148, -151, -145, -148, -148, -145, -145, -145,
+        -148, -145, -145, -145, -145, -145, -148, -145, -150, -151,
+        -154, -148, -151, -154, -156, -156, -154, -156, -156, -154,
+        -156, -154, -154, -156, -154, -154, -154, -156, -151, -156,
+        -156, -156, -159, -156, -156, -156, -159, -156, -156, -156,
+        -159, -156, -156, -159, -159, -156, -156, -162, -162, -156,
+        -162, -162, -162, -162, -162, -162, -163, -162, -165, -165,
+        -165, -162, -165, -165, -162, -165, -162, -162, -165, -159,
+        -162, -162, -165, -159, -162, -165, -162, -165, -165, -165,
+        -165, -165, -168, -165, -168, -168, -171, -171, -168, -174,
+        -171, -171, -171, -174, -174, -174, -177, -171, -171, -174,
+        -171, -171, -168, -171, -176, -177, -177, -177, -180, -177,
+        -180, -180, -183, -180, -180, -180, -180, -180, -180, -183,
+        -180, -183, -180, -180, -183, -185, -183, -185, -188, -185,
+        -183, -183, -185, -180, -180, -185, -183, -185, -183, -185,
+        -185, -185, -185, -185, -185, -185, -183, -188, -185, -188,
+        -191, -188, -194, -188, -191, -191, -188, -185, -191, -185,
+        -188, -185, -188, -185, -191, -188, -185, -188, -185, -188,
+        -188, -194, -191, -191, -191, -194, -194, -197, -197, -197,
+        -197, -197, -197, -200, -200, -200, -200, -197, -197, -200,
+        -197, -194, -197, -194, -197, -197, -203, -197, -203, -206,
+        -203, -209, -206, -206, -203, -206, -208, -203, -206, -203,
+        -203, -203, -203, -206, -203, -206, -211, -209, -209, -211,
+        -209, -211, -209, -209, -211, -209, -214, -209, -211, -214,
+        -211, -214, -217, -217, -217, -215, -214, -211, -214, -214,
+        -211, -214, -214, -214, -217, -217, -220, -223, -220, -226,
+        -220, -220, -223, -220, -220, -220, -220, -217, -220, -220,
+        -220, -220, -217, -220, -220, -223, -223, -223, -226, -220,
+        -220, -226, -220, -226, -223, -226, -229, -226, -229, -229,
+        -226, -226, -226, -226, -229, -226, -226, -232, -229, -232,
+        -232, -235, -232, -235, -238, -235, -238, -238, -235, -235,
+        -238, -235, -235, -238, -235, -235, -238, -238, -232, -238,
+        -238, -232, -238, -238, -235, -238, -238, -240, -238, -238,
+        -237, -238, -238, -238, -243, -238, -240, -243, -238, -241,
+        -243, -246, -243, -249, -246, -246, -246, -246, -249, -246,
+        -246, -246, -249, -246, -246, -246, -246, -243, -243, -243,
+        -246, -246, -246, -249, -249, -255, -249, -249, -246, -252,
+        -249, -249, -249, -255, -255, -249, -255, -255, -255, -258,
+        -255, -255, -255, -258, -255, -255, -255, -261, -258, -261,
+        -264, -264, -267, -264, -264, -264, -267, -267, -264, -267,
+        -264, -267, -267, -267, -264, -267, -267, -267, -267, -267,
+        -267, -272, -272, -267, -267, -267, -269, -270, -272, -272,
+        -269, -269, -269, -272, -272, -269, -272, -272, -272, -269,
+        -272, -272, -272, -272, -272, -272, -272, -269, -269, -267,
+        -267, -272, -269, -272, -275, -275, -275, -273, -275, -275,
+        -278, -278, -272, -272, -275, -275, -275, -275, -272, -272,
+        -275, -275, -275, -275, -278, -281, -281, -278, -284, -284,
+        -284, -281, -284, -287, -287, -287, -290, -287, -284, -284,
+        -287, -284, -284, -284, -284, -284, -287, -284, -287, -284,
+        -284, -284, -284, -290, -290, -290, -287, -289, -287, -287,
+        -287, -287, -287, -290, -290, -289, -287, -290, -290, -290,
+        -287, -287, -287, -287, -290, -290, -292, -293, -293, -296,
+        -293, -293, -293, -293, -293, -293, -292, -290, -290, -290,
+        -290, -290, -292, -292, -290, -290, -290, -284, -287, -290,
+        -290, -295, -295, -293, -293, -296, -296, -296, -296, -296,
+        -298, -296, -296, -296, -296, -296, -296, -296, -296, -298,
+        -298, -298, -298, -301, -301, -301, -304, -304, -304, -304,
+        -304, -304, -301, -302, -302, -301, -304, -304, -304, -304,
+        -307, -307, -307, -304, -307, -307, -307, -301, -304, -307,
+        -307, -307, -307, -307, -307, -307, -304, -307, -304, -301,
+        -307, -301, -304, -307, -301, -304, -307, -301, -304, -301,
+        -304, -307, -301, -304, -304, -304, -307, -304, -307, -307,
+        -313, -310, -307, -310, -307, -307, -307, -307, -307, -304,
+        -307, -307, -304, -307, -307, -310, -313, -307, -307, -310,
+        -307, -307, -307, -307, -310, -310, -310, -313, -313, -313,
+        -313, -313, -310, -310, -310, -307, -307, -304, -307, -307,
+        -310, -310, -310, -313, -313, -307, -310, -307, -307, -304,
+        -310, -307, -310, -307, -313, -310, -313, -307, -313, -313,
+        -313, -313, -316, -313, -313, -313, -313, -307, -310, -310,
+        -307, -310, -307, -310, -310, -313, -310, -313, -313, -313,
+        -313, -310, -313, -313, -313, -313, -313, -313, -313, -310,
+        -313, -310, -313, -310, -310, -313, -307, -307, -307, -310,
+        -310, -310, -313, -313, -310, -310, -310, -310, -313, -310,
+        -310, -313, -310, -313, -310, -307, -310, -313, -310, -307,
+        -310, -313, -310, -310, -313, -313, -313, -313, -313, -313,
+        -310, -310, -307, -310, -310, -310, -313, -313, -313, -313,
+        -313, -316, -316, -316, -316, -316, -316, -313, -313, -313,
+        -313, -316, -316, -313, -313, -316, -319, -316, -313, -313,
+        -310, -313, -313, -310, -310, -313, -313, -313, -316, -313,
+        -313, -316, -316, -316, -313, -316, -319, -313, -313, -316,
+        -313, -313, -313, -313, -313, -313, -310, -313, -313, -310,
+        -313, -307, -313, -313, -313, -316, -316, -319, -319, -316,
+        -316, -319, -316, -316, -313, -313, -310, -313, -313, -316,
+        -313, -313, -316, -316, -316, -319, -316, -313, -313, -313,
+        -313, -313, -313, -307, -307, -313, -313, -307, -310, -313,
+        -310, -307, -310, -313, -313, -313, -313, -307, -310, -313,
+        -313, -313, -307, -307, -310, -310, -310, -307, -307, -301,
+        -304, -307, -307, -304, -301, -304, -301, -304, -301, -304,
+        -307, -310, -307, -307, -310, -313, -310, -307, -310, -307,
+        -307, -304, -301, -298, -301, -301, -298, -298, -301, -296,
+        -301, -296, -298, -298, -298, -296, -296, -296, -293, -293,
+        -296, -293, -290, -296, -296, -293, -296, -296, -296, -290,
+        -293, -293, -290, -290, -287, -287, -287, -284, -284, -287,
+        -287, -284, -287, -287, -281, -284, -284, -281, -281, -284,
+        -284, -278, -281, -275, -278, -275, -272, -275, -272, -272,
+        -275, -272, -275, -269, -272, -272, -267, -267, -264, -264,
+        -264, -261, -261, -264, -261, -264, -261, -261, -258, -255,
+        -255, -255, -255
     };
 
-    static const float iso226_2023_curve_90_phons[985] =
+    static const int16_t iso226_2023_curve_90_phons[985] =
     {
-        3.38, 3.45,
-        3.31, 3.31, 3.45, 3.38, 3.45, 3.45, 3.45, 3.45, 3.38, 3.52,
-        3.45, 3.38, 3.45, 3.52, 3.38, 3.45, 3.45, 3.38, 3.38, 3.38,
-        3.45, 3.38, 3.38, 3.38, 3.38, 3.38, 3.45, 3.38, 3.51, 3.52,
-        3.58, 3.45, 3.52, 3.58, 3.65, 3.65, 3.58, 3.65, 3.65, 3.58,
-        3.65, 3.58, 3.58, 3.65, 3.58, 3.58, 3.58, 3.65, 3.52, 3.65,
-        3.65, 3.65, 3.72, 3.65, 3.65, 3.65, 3.72, 3.65, 3.65, 3.65,
-        3.72, 3.65, 3.65, 3.72, 3.72, 3.65, 3.65, 3.79, 3.79, 3.65,
-        3.78, 3.79, 3.79, 3.78, 3.79, 3.79, 3.79, 3.79, 3.85, 3.85,
-        3.85, 3.79, 3.85, 3.85, 3.79, 3.85, 3.79, 3.79, 3.85, 3.72,
-        3.79, 3.79, 3.85, 3.72, 3.79, 3.85, 3.79, 3.85, 3.85, 3.85,
-        3.85, 3.85, 3.92, 3.85, 3.92, 3.92, 3.99, 3.99, 3.92, 4.06,
-        3.99, 3.99, 3.99, 4.06, 4.06, 4.06, 4.12, 3.99, 3.99, 4.06,
-        3.99, 3.99, 3.92, 3.99, 4.12, 4.12, 4.12, 4.12, 4.19, 4.12,
-        4.19, 4.19, 4.26, 4.19, 4.19, 4.19, 4.19, 4.19, 4.19, 4.26,
-        4.19, 4.26, 4.19, 4.19, 4.26, 4.33, 4.26, 4.33, 4.39, 4.33,
-        4.26, 4.26, 4.33, 4.19, 4.19, 4.33, 4.26, 4.33, 4.26, 4.33,
-        4.33, 4.33, 4.33, 4.33, 4.33, 4.33, 4.26, 4.39, 4.33, 4.39,
-        4.46, 4.39, 4.53, 4.40, 4.46, 4.46, 4.39, 4.33, 4.46, 4.33,
-        4.39, 4.33, 4.39, 4.33, 4.46, 4.39, 4.33, 4.39, 4.33, 4.39,
-        4.39, 4.53, 4.46, 4.46, 4.46, 4.53, 4.53, 4.60, 4.60, 4.60,
-        4.60, 4.60, 4.60, 4.66, 4.66, 4.66, 4.66, 4.60, 4.60, 4.66,
-        4.60, 4.53, 4.60, 4.53, 4.60, 4.60, 4.73, 4.60, 4.73, 4.80,
-        4.73, 4.87, 4.80, 4.80, 4.73, 4.80, 4.86, 4.73, 4.80, 4.73,
-        4.73, 4.73, 4.73, 4.80, 4.73, 4.80, 4.93, 4.87, 4.87, 4.93,
-        4.87, 4.93, 4.87, 4.87, 4.93, 4.87, 5.00, 4.87, 4.93, 5.00,
-        4.93, 5.00, 5.07, 5.07, 5.07, 5.01, 5.00, 4.93, 5.00, 5.00,
-        4.93, 5.00, 5.00, 5.00, 5.07, 5.07, 5.14, 5.21, 5.14, 5.27,
-        5.14, 5.14, 5.21, 5.14, 5.14, 5.14, 5.14, 5.07, 5.14, 5.13,
-        5.14, 5.14, 5.07, 5.14, 5.14, 5.21, 5.21, 5.21, 5.27, 5.14,
-        5.14, 5.27, 5.14, 5.27, 5.21, 5.27, 5.34, 5.27, 5.34, 5.34,
-        5.27, 5.27, 5.27, 5.27, 5.34, 5.28, 5.27, 5.41, 5.34, 5.41,
-        5.41, 5.48, 5.41, 5.48, 5.54, 5.48, 5.54, 5.54, 5.48, 5.48,
-        5.54, 5.48, 5.48, 5.54, 5.48, 5.48, 5.54, 5.54, 5.41, 5.54,
-        5.54, 5.41, 5.54, 5.54, 5.48, 5.54, 5.54, 5.61, 5.54, 5.54,
-        5.54, 5.54, 5.54, 5.54, 5.67, 5.54, 5.61, 5.68, 5.54, 5.61,
-        5.68, 5.75, 5.68, 5.81, 5.75, 5.74, 5.75, 5.75, 5.81, 5.74,
-        5.75, 5.75, 5.81, 5.75, 5.75, 5.75, 5.75, 5.68, 5.68, 5.68,
-        5.74, 5.75, 5.75, 5.81, 5.81, 5.94, 5.81, 5.81, 5.75, 5.88,
-        5.81, 5.81, 5.81, 5.95, 5.95, 5.81, 5.95, 5.95, 5.95, 6.02,
-        5.95, 5.95, 5.95, 6.02, 5.95, 5.95, 5.95, 6.08, 6.02, 6.09,
-        6.15, 6.15, 6.22, 6.15, 6.15, 6.15, 6.22, 6.22, 6.15, 6.22,
-        6.15, 6.22, 6.22, 6.22, 6.15, 6.22, 6.22, 6.22, 6.22, 6.22,
-        6.22, 6.35, 6.35, 6.22, 6.22, 6.22, 6.29, 6.29, 6.35, 6.35,
-        6.29, 6.29, 6.29, 6.35, 6.35, 6.29, 6.35, 6.35, 6.35, 6.29,
-        6.35, 6.35, 6.35, 6.35, 6.35, 6.35, 6.35, 6.29, 6.29, 6.22,
-        6.22, 6.35, 6.29, 6.35, 6.42, 6.42, 6.42, 6.36, 6.43, 6.42,
-        6.49, 6.49, 6.36, 6.36, 6.42, 6.42, 6.42, 6.42, 6.35, 6.35,
-        6.42, 6.42, 6.42, 6.42, 6.49, 6.56, 6.56, 6.49, 6.62, 6.62,
-        6.62, 6.56, 6.62, 6.69, 6.69, 6.69, 6.76, 6.69, 6.62, 6.63,
-        6.69, 6.62, 6.62, 6.62, 6.62, 6.63, 6.69, 6.62, 6.69, 6.62,
-        6.62, 6.63, 6.62, 6.76, 6.76, 6.76, 6.69, 6.75, 6.69, 6.70,
-        6.70, 6.69, 6.69, 6.76, 6.76, 6.75, 6.70, 6.76, 6.76, 6.76,
-        6.69, 6.69, 6.69, 6.69, 6.76, 6.76, 6.82, 6.83, 6.83, 6.90,
-        6.83, 6.83, 6.83, 6.83, 6.83, 6.83, 6.82, 6.76, 6.76, 6.76,
-        6.76, 6.76, 6.82, 6.82, 6.76, 6.76, 6.76, 6.62, 6.69, 6.76,
-        6.76, 6.89, 6.89, 6.83, 6.83, 6.90, 6.90, 6.90, 6.90, 6.90,
-        6.96, 6.90, 6.90, 6.90, 6.90, 6.90, 6.90, 6.90, 6.90, 6.96,
-        6.96, 6.96, 6.96, 7.03, 7.03, 7.03, 7.10, 7.10, 7.10, 7.10,
-        7.10, 7.10, 7.03, 7.04, 7.04, 7.03, 7.10, 7.10, 7.10, 7.10,
-        7.17, 7.17, 7.17, 7.10, 7.17, 7.17, 7.17, 7.03, 7.10, 7.17,
-        7.17, 7.17, 7.17, 7.17, 7.17, 7.17, 7.10, 7.17, 7.10, 7.03,
-        7.17, 7.03, 7.10, 7.17, 7.03, 7.10, 7.17, 7.03, 7.10, 7.03,
-        7.10, 7.17, 7.03, 7.10, 7.10, 7.10, 7.17, 7.10, 7.17, 7.17,
-        7.30, 7.23, 7.17, 7.23, 7.17, 7.17, 7.17, 7.16, 7.17, 7.10,
-        7.17, 7.17, 7.10, 7.17, 7.17, 7.23, 7.30, 7.17, 7.17, 7.23,
-        7.17, 7.17, 7.17, 7.17, 7.23, 7.23, 7.23, 7.30, 7.30, 7.30,
-        7.30, 7.30, 7.23, 7.23, 7.23, 7.17, 7.17, 7.10, 7.17, 7.17,
-        7.23, 7.23, 7.23, 7.30, 7.30, 7.17, 7.23, 7.17, 7.17, 7.10,
-        7.23, 7.17, 7.23, 7.17, 7.30, 7.23, 7.30, 7.17, 7.30, 7.30,
-        7.30, 7.30, 7.37, 7.30, 7.30, 7.30, 7.30, 7.17, 7.23, 7.23,
-        7.17, 7.23, 7.17, 7.23, 7.23, 7.30, 7.23, 7.30, 7.30, 7.30,
-        7.30, 7.23, 7.30, 7.30, 7.30, 7.30, 7.30, 7.30, 7.30, 7.23,
-        7.30, 7.23, 7.30, 7.23, 7.23, 7.30, 7.17, 7.17, 7.17, 7.23,
-        7.23, 7.23, 7.30, 7.30, 7.23, 7.24, 7.23, 7.23, 7.30, 7.23,
-        7.23, 7.30, 7.23, 7.30, 7.23, 7.17, 7.23, 7.30, 7.23, 7.17,
-        7.23, 7.30, 7.23, 7.23, 7.30, 7.30, 7.30, 7.30, 7.30, 7.30,
-        7.23, 7.23, 7.17, 7.23, 7.23, 7.23, 7.30, 7.30, 7.30, 7.30,
-        7.30, 7.37, 7.37, 7.37, 7.37, 7.37, 7.37, 7.30, 7.30, 7.30,
-        7.30, 7.37, 7.37, 7.30, 7.30, 7.37, 7.44, 7.37, 7.30, 7.30,
-        7.23, 7.30, 7.30, 7.23, 7.23, 7.30, 7.30, 7.30, 7.37, 7.30,
-        7.30, 7.37, 7.37, 7.37, 7.30, 7.37, 7.44, 7.30, 7.30, 7.36,
-        7.30, 7.30, 7.30, 7.30, 7.30, 7.30, 7.23, 7.30, 7.30, 7.23,
-        7.30, 7.17, 7.30, 7.30, 7.30, 7.37, 7.37, 7.44, 7.44, 7.37,
-        7.37, 7.44, 7.37, 7.37, 7.30, 7.30, 7.23, 7.30, 7.30, 7.37,
-        7.30, 7.30, 7.37, 7.37, 7.37, 7.44, 7.37, 7.30, 7.30, 7.30,
-        7.30, 7.30, 7.30, 7.17, 7.17, 7.30, 7.30, 7.17, 7.23, 7.30,
-        7.23, 7.17, 7.23, 7.30, 7.30, 7.30, 7.30, 7.17, 7.23, 7.30,
-        7.30, 7.30, 7.17, 7.17, 7.23, 7.23, 7.23, 7.17, 7.17, 7.03,
-        7.10, 7.17, 7.17, 7.10, 7.03, 7.10, 7.03, 7.10, 7.03, 7.10,
-        7.17, 7.23, 7.17, 7.17, 7.23, 7.30, 7.23, 7.17, 7.23, 7.17,
-        7.17, 7.10, 7.03, 6.96, 7.03, 7.03, 6.96, 6.96, 7.03, 6.90,
-        7.03, 6.90, 6.96, 6.96, 6.96, 6.90, 6.90, 6.90, 6.83, 6.83,
-        6.90, 6.83, 6.76, 6.90, 6.90, 6.83, 6.90, 6.90, 6.90, 6.77,
-        6.83, 6.83, 6.76, 6.76, 6.69, 6.69, 6.69, 6.62, 6.62, 6.69,
-        6.69, 6.62, 6.69, 6.69, 6.56, 6.62, 6.62, 6.56, 6.56, 6.62,
-        6.62, 6.49, 6.56, 6.42, 6.49, 6.42, 6.35, 6.42, 6.35, 6.35,
-        6.42, 6.35, 6.42, 6.29, 6.35, 6.35, 6.22, 6.22, 6.15, 6.15,
-        6.15, 6.08, 6.08, 6.15, 6.08, 6.15, 6.08, 6.08, 6.02, 5.95,
-        5.95, 5.95, 5.95
+        338, 345,
+        331, 331, 345, 338, 345, 345, 345, 345, 338, 352,
+        345, 338, 345, 352, 338, 345, 345, 338, 338, 338,
+        345, 338, 338, 338, 338, 338, 345, 338, 351, 352,
+        358, 345, 352, 358, 365, 365, 358, 365, 365, 358,
+        365, 358, 358, 365, 358, 358, 358, 365, 352, 365,
+        365, 365, 372, 365, 365, 365, 372, 365, 365, 365,
+        372, 365, 365, 372, 372, 365, 365, 379, 379, 365,
+        378, 379, 379, 378, 379, 379, 379, 379, 385, 385,
+        385, 379, 385, 385, 379, 385, 379, 379, 385, 372,
+        379, 379, 385, 372, 379, 385, 379, 385, 385, 385,
+        385, 385, 392, 385, 392, 392, 399, 399, 392, 406,
+        399, 399, 399, 406, 406, 406, 412, 399, 399, 406,
+        399, 399, 392, 399, 412, 412, 412, 412, 419, 412,
+        419, 419, 426, 419, 419, 419, 419, 419, 419, 426,
+        419, 426, 419, 419, 426, 433, 426, 433, 439, 433,
+        426, 426, 433, 419, 419, 433, 426, 433, 426, 433,
+        433, 433, 433, 433, 433, 433, 426, 439, 433, 439,
+        446, 439, 453, 440, 446, 446, 439, 433, 446, 433,
+        439, 433, 439, 433, 446, 439, 433, 439, 433, 439,
+        439, 453, 446, 446, 446, 453, 453, 460, 460, 460,
+        460, 460, 460, 466, 466, 466, 466, 460, 460, 466,
+        460, 453, 460, 453, 460, 460, 473, 460, 473, 480,
+        473, 487, 480, 480, 473, 480, 486, 473, 480, 473,
+        473, 473, 473, 480, 473, 480, 493, 487, 487, 493,
+        487, 493, 487, 487, 493, 487, 500, 487, 493, 500,
+        493, 500, 507, 507, 507, 501, 500, 493, 500, 500,
+        493, 500, 500, 500, 507, 507, 514, 521, 514, 527,
+        514, 514, 521, 514, 514, 514, 514, 507, 514, 513,
+        514, 514, 507, 514, 514, 521, 521, 521, 527, 514,
+        514, 527, 514, 527, 521, 527, 534, 527, 534, 534,
+        527, 527, 527, 527, 534, 528, 527, 541, 534, 541,
+        541, 548, 541, 548, 554, 548, 554, 554, 548, 548,
+        554, 548, 548, 554, 548, 548, 554, 554, 541, 554,
+        554, 541, 554, 554, 548, 554, 554, 561, 554, 554,
+        554, 554, 554, 554, 567, 554, 561, 568, 554, 561,
+        568, 575, 568, 581, 575, 574, 575, 575, 581, 574,
+        575, 575, 581, 575, 575, 575, 575, 568, 568, 568,
+        574, 575, 575, 581, 581, 594, 581, 581, 575, 588,
+        581, 581, 581, 595, 595, 581, 595, 595, 595, 602,
+        595, 595, 595, 602, 595, 595, 595, 608, 602, 609,
+        615, 615, 622, 615, 615, 615, 622, 622, 615, 622,
+        615, 622, 622, 622, 615, 622, 622, 622, 622, 622,
+        622, 635, 635, 622, 622, 622, 629, 629, 635, 635,
+        629, 629, 629, 635, 635, 629, 635, 635, 635, 629,
+        635, 635, 635, 635, 635, 635, 635, 629, 629, 622,
+        622, 635, 629, 635, 642, 642, 642, 636, 643, 642,
+        649, 649, 636, 636, 642, 642, 642, 642, 635, 635,
+        642, 642, 642, 642, 649, 656, 656, 649, 662, 662,
+        662, 656, 662, 669, 669, 669, 676, 669, 662, 663,
+        669, 662, 662, 662, 662, 663, 669, 662, 669, 662,
+        662, 663, 662, 676, 676, 676, 669, 675, 669, 670,
+        670, 669, 669, 676, 676, 675, 670, 676, 676, 676,
+        669, 669, 669, 669, 676, 676, 682, 683, 683, 690,
+        683, 683, 683, 683, 683, 683, 682, 676, 676, 676,
+        676, 676, 682, 682, 676, 676, 676, 662, 669, 676,
+        676, 689, 689, 683, 683, 690, 690, 690, 690, 690,
+        696, 690, 690, 690, 690, 690, 690, 690, 690, 696,
+        696, 696, 696, 703, 703, 703, 710, 710, 710, 710,
+        710, 710, 703, 704, 704, 703, 710, 710, 710, 710,
+        717, 717, 717, 710, 717, 717, 717, 703, 710, 717,
+        717, 717, 717, 717, 717, 717, 710, 717, 710, 703,
+        717, 703, 710, 717, 703, 710, 717, 703, 710, 703,
+        710, 717, 703, 710, 710, 710, 717, 710, 717, 717,
+        730, 723, 717, 723, 717, 717, 717, 716, 717, 710,
+        717, 717, 710, 717, 717, 723, 730, 717, 717, 723,
+        717, 717, 717, 717, 723, 723, 723, 730, 730, 730,
+        730, 730, 723, 723, 723, 717, 717, 710, 717, 717,
+        723, 723, 723, 730, 730, 717, 723, 717, 717, 710,
+        723, 717, 723, 717, 730, 723, 730, 717, 730, 730,
+        730, 730, 737, 730, 730, 730, 730, 717, 723, 723,
+        717, 723, 717, 723, 723, 730, 723, 730, 730, 730,
+        730, 723, 730, 730, 730, 730, 730, 730, 730, 723,
+        730, 723, 730, 723, 723, 730, 717, 717, 717, 723,
+        723, 723, 730, 730, 723, 724, 723, 723, 730, 723,
+        723, 730, 723, 730, 723, 717, 723, 730, 723, 717,
+        723, 730, 723, 723, 730, 730, 730, 730, 730, 730,
+        723, 723, 717, 723, 723, 723, 730, 730, 730, 730,
+        730, 737, 737, 737, 737, 737, 737, 730, 730, 730,
+        730, 737, 737, 730, 730, 737, 744, 737, 730, 730,
+        723, 730, 730, 723, 723, 730, 730, 730, 737, 730,
+        730, 737, 737, 737, 730, 737, 744, 730, 730, 736,
+        730, 730, 730, 730, 730, 730, 723, 730, 730, 723,
+        730, 717, 730, 730, 730, 737, 737, 744, 744, 737,
+        737, 744, 737, 737, 730, 730, 723, 730, 730, 737,
+        730, 730, 737, 737, 737, 744, 737, 730, 730, 730,
+        730, 730, 730, 717, 717, 730, 730, 717, 723, 730,
+        723, 717, 723, 730, 730, 730, 730, 717, 723, 730,
+        730, 730, 717, 717, 723, 723, 723, 717, 717, 703,
+        710, 717, 717, 710, 703, 710, 703, 710, 703, 710,
+        717, 723, 717, 717, 723, 730, 723, 717, 723, 717,
+        717, 710, 703, 696, 703, 703, 696, 696, 703, 690,
+        703, 690, 696, 696, 696, 690, 690, 690, 683, 683,
+        690, 683, 676, 690, 690, 683, 690, 690, 690, 677,
+        683, 683, 676, 676, 669, 669, 669, 662, 662, 669,
+        669, 662, 669, 669, 656, 662, 662, 656, 656, 662,
+        662, 649, 656, 642, 649, 642, 635, 642, 635, 635,
+        642, 635, 642, 629, 635, 635, 622, 622, 615, 615,
+        615, 608, 608, 615, 608, 615, 608, 608, 602, 595,
+        595, 595, 595
     };
 
-    static const float * const iso226_2023_curves[] =
+    static const int16_t * const iso226_2023_curves[] =
     {
         iso226_2023_curve_0_phons,
         iso226_2023_curve_10_phons,
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/robinson_dadson.h 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/robinson_dadson.h
--- 1.2.21-5/modules/lsp-plugins-loud-comp/include/generated/iso226/robinson_dadson.h	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/generated/iso226/robinson_dadson.h	2025-08-26 18:15:57.317871377 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins
  * Created on: 08 апр. 2016 г.
@@ -26,1517 +26,1517 @@
 
 namespace lsp
 {
-    static const float robinson_dadson_curve_0_phons[1468] =
+    static const int16_t robinson_dadson_curve_0_phons[1468] =
     {
-        -41.22, -41.16, -41.17, -41.17, -41.16, -41.18, -41.28, -41.36, -41.44, -41.50,
-        -41.62, -41.69, -41.75, -41.86, -41.85, -41.93, -42.02, -42.06, -42.12, -42.13,
-        -42.23, -42.26, -42.42, -42.51, -42.55, -42.56, -42.56, -42.53, -42.53, -42.63,
-        -42.68, -42.74, -42.90, -43.08, -43.24, -43.34, -43.39, -43.53, -43.59, -43.69,
-        -43.73, -43.78, -43.82, -43.79, -43.87, -43.91, -43.91, -43.94, -43.95, -43.99,
-        -44.05, -44.09, -44.18, -44.20, -44.20, -44.20, -44.24, -44.30, -44.31, -44.41,
-        -44.54, -44.56, -44.63, -44.71, -44.77, -44.95, -45.06, -45.11, -45.06, -45.17,
-        -45.22, -45.28, -45.28, -45.38, -45.42, -45.40, -45.43, -45.45, -45.48, -45.54,
-        -45.52, -45.55, -45.69, -45.81, -45.78, -45.76, -45.87, -46.00, -46.02, -46.02,
-        -46.16, -46.29, -46.38, -46.47, -46.48, -46.50, -46.56, -46.58, -46.60, -46.69,
-        -46.74, -46.76, -46.80, -46.88, -46.98, -47.00, -47.02, -47.05, -47.07, -47.08,
-        -47.14, -47.24, -47.33, -47.38, -47.42, -47.51, -47.59, -47.63, -47.70, -47.69,
-        -47.74, -47.81, -47.91, -47.92, -48.01, -48.16, -48.31, -48.37, -48.40, -48.47,
-        -48.54, -48.58, -48.65, -48.68, -48.71, -48.76, -48.85, -48.90, -49.01, -49.12,
-        -49.13, -49.26, -49.32, -49.43, -49.50, -49.61, -49.65, -49.67, -49.70, -49.83,
-        -49.83, -49.86, -49.89, -49.99, -50.00, -50.10, -50.12, -50.14, -50.24, -50.36,
-        -50.41, -50.50, -50.65, -50.79, -50.93, -51.01, -51.09, -51.19, -51.23, -51.26,
-        -51.37, -51.47, -51.50, -51.53, -51.60, -51.63, -51.66, -51.68, -51.74, -51.81,
-        -51.86, -51.92, -52.01, -52.09, -52.16, -52.23, -52.32, -52.48, -52.62, -52.66,
-        -52.61, -52.74, -52.93, -52.98, -53.05, -53.11, -53.29, -53.46, -53.55, -53.64,
-        -53.71, -53.76, -53.78, -53.83, -53.80, -53.86, -53.92, -53.96, -54.04, -54.09,
-        -54.14, -54.14, -54.22, -54.26, -54.31, -54.37, -54.44, -54.49, -54.56, -54.63,
-        -54.66, -54.80, -54.91, -55.00, -55.06, -55.14, -55.37, -55.44, -55.52, -55.58,
-        -55.62, -55.66, -55.75, -55.83, -55.81, -55.94, -55.96, -56.08, -56.11, -56.21,
-        -56.28, -56.34, -56.34, -56.41, -56.50, -56.49, -56.54, -56.60, -56.57, -56.65,
-        -56.73, -56.82, -56.86, -56.88, -56.98, -57.04, -57.09, -57.23, -57.28, -57.32,
-        -57.32, -57.45, -57.45, -57.61, -57.62, -57.72, -57.74, -57.86, -57.88, -58.00,
-        -58.10, -58.22, -58.24, -58.22, -58.30, -58.41, -58.47, -58.49, -58.54, -58.61,
-        -58.65, -58.68, -58.71, -58.81, -58.85, -58.94, -58.97, -59.08, -59.10, -59.12,
-        -59.20, -59.25, -59.31, -59.34, -59.36, -59.35, -59.38, -59.37, -59.45, -59.54,
-        -59.51, -59.55, -59.61, -59.63, -59.77, -59.87, -59.87, -59.99, -60.04, -60.07,
-        -60.12, -60.20, -60.25, -60.24, -60.29, -60.31, -60.31, -60.22, -60.23, -60.35,
-        -60.46, -60.57, -60.59, -60.70, -60.71, -60.79, -60.89, -60.90, -60.96, -60.96,
-        -60.97, -61.03, -61.06, -61.08, -61.10, -61.10, -61.27, -61.29, -61.38, -61.39,
-        -61.48, -61.48, -61.58, -61.52, -61.60, -61.61, -61.60, -61.62, -61.65, -61.67,
-        -61.69, -61.76, -61.78, -61.77, -61.80, -61.87, -61.91, -61.96, -62.05, -62.07,
-        -62.25, -62.25, -62.22, -62.19, -62.21, -62.29, -62.32, -62.36, -62.42, -62.51,
-        -62.59, -62.62, -62.69, -62.78, -62.79, -62.79, -62.84, -62.92, -63.00, -63.02,
-        -63.04, -63.09, -63.07, -63.16, -63.18, -63.24, -63.29, -63.31, -63.36, -63.33,
-        -63.39, -63.40, -63.47, -63.50, -63.55, -63.64, -63.66, -63.73, -63.77, -63.83,
-        -63.83, -63.87, -63.92, -63.99, -63.96, -63.96, -63.95, -63.99, -64.01, -64.08,
-        -64.22, -64.20, -64.27, -64.26, -64.30, -64.25, -64.29, -64.26, -64.32, -64.31,
-        -64.37, -64.35, -64.40, -64.38, -64.43, -64.50, -64.58, -64.65, -64.67, -64.70,
-        -64.71, -64.76, -64.74, -64.83, -64.88, -64.85, -64.87, -64.87, -64.95, -64.97,
-        -65.01, -65.07, -65.16, -65.14, -65.17, -65.23, -65.31, -65.39, -65.35, -65.36,
-        -65.33, -65.40, -65.40, -65.48, -65.51, -65.55, -65.60, -65.58, -65.63, -65.62,
-        -65.68, -65.68, -65.77, -65.77, -65.82, -65.80, -65.78, -65.73, -65.81, -65.78,
-        -65.76, -65.79, -65.84, -65.97, -66.00, -66.02, -66.08, -66.14, -66.22, -66.28,
-        -66.30, -66.29, -66.28, -66.25, -66.26, -66.24, -66.23, -66.21, -66.28, -66.31,
-        -66.40, -66.45, -66.48, -66.44, -66.46, -66.51, -66.49, -66.44, -66.47, -66.56,
-        -66.52, -66.56, -66.56, -66.62, -66.71, -66.77, -66.85, -66.94, -66.97, -67.00,
-        -67.06, -67.07, -67.15, -67.12, -67.20, -67.17, -67.25, -67.19, -67.26, -67.22,
-        -67.26, -67.27, -67.30, -67.27, -67.35, -67.34, -67.29, -67.35, -67.33, -67.39,
-        -67.36, -67.42, -67.49, -67.56, -67.56, -67.55, -67.60, -67.65, -67.73, -67.69,
-        -67.75, -67.76, -67.75, -67.80, -67.81, -67.84, -67.91, -67.94, -67.84, -67.85,
-        -67.85, -67.95, -67.95, -68.04, -68.08, -68.11, -68.03, -68.07, -68.11, -68.16,
-        -68.17, -68.26, -68.25, -68.20, -68.21, -68.20, -68.29, -68.35, -68.39, -68.43,
-        -68.40, -68.41, -68.47, -68.51, -68.58, -68.60, -68.64, -68.64, -68.73, -68.74,
-        -68.83, -68.86, -68.91, -68.93, -68.93, -68.99, -69.04, -69.01, -68.99, -69.04,
-        -69.05, -69.08, -69.12, -69.15, -69.19, -69.23, -69.25, -69.31, -69.28, -69.31,
-        -69.34, -69.42, -69.41, -69.38, -69.46, -69.54, -69.62, -69.66, -69.69, -69.76,
-        -69.78, -69.78, -69.71, -69.70, -69.75, -69.79, -69.85, -69.86, -69.93, -69.95,
-        -70.02, -70.08, -70.12, -70.13, -70.21, -70.26, -70.33, -70.36, -70.38, -70.44,
-        -70.42, -70.43, -70.45, -70.43, -70.49, -70.49, -70.56, -70.54, -70.60, -70.62,
-        -70.63, -70.67, -70.74, -70.77, -70.80, -70.84, -70.92, -70.93, -70.94, -70.98,
-        -71.01, -71.02, -71.06, -71.10, -71.11, -71.13, -71.15, -71.18, -71.19, -71.22,
-        -71.28, -71.32, -71.36, -71.36, -71.37, -71.43, -71.46, -71.53, -71.55, -71.55,
-        -71.55, -71.55, -71.55, -71.55, -71.59, -71.64, -71.77, -71.79, -71.88, -71.89,
-        -71.89, -71.94, -71.98, -72.04, -72.11, -72.16, -72.21, -72.29, -72.35, -72.39,
-        -72.43, -72.43, -72.43, -72.43, -72.43, -72.43, -72.48, -72.52, -72.56, -72.68,
-        -72.71, -72.71, -72.76, -72.80, -72.85, -72.90, -72.93, -72.98, -73.01, -73.05,
-        -73.10, -73.13, -73.15, -73.19, -73.22, -73.22, -73.24, -73.26, -73.28, -73.28,
-        -73.33, -73.39, -73.39, -73.38, -73.44, -73.48, -73.48, -73.47, -73.47, -73.51,
-        -73.56, -73.62, -73.64, -73.64, -73.64, -73.69, -73.79, -73.90, -73.97, -74.03,
-        -74.12, -74.13, -74.23, -74.23, -74.22, -74.22, -74.26, -74.31, -74.36, -74.38,
-        -74.38, -74.44, -74.54, -74.66, -74.76, -74.77, -74.76, -74.76, -74.75, -74.75,
-        -74.80, -74.85, -74.81, -74.86, -74.90, -74.92, -74.99, -75.03, -75.07, -75.12,
-        -75.18, -75.21, -75.29, -75.31, -75.38, -75.45, -75.50, -75.55, -75.57, -75.64,
-        -75.72, -75.74, -75.81, -75.87, -75.89, -75.90, -75.89, -75.89, -75.89, -75.88,
-        -75.95, -76.02, -76.07, -76.07, -76.13, -76.20, -76.25, -76.30, -76.39, -76.39,
-        -76.44, -76.49, -76.53, -76.53, -76.57, -76.62, -76.71, -76.73, -76.77, -76.85,
-        -76.89, -76.97, -76.98, -77.02, -77.02, -77.06, -77.06, -77.21, -77.20, -77.29,
-        -77.33, -77.34, -77.34, -77.33, -77.37, -77.37, -77.45, -77.47, -77.52, -77.57,
-        -77.59, -77.62, -77.66, -77.67, -77.71, -77.73, -77.74, -77.82, -77.84, -77.89,
-        -77.93, -77.95, -77.94, -78.00, -78.08, -78.10, -78.17, -78.16, -78.22, -78.27,
-        -78.31, -78.31, -78.30, -78.36, -78.40, -78.39, -78.49, -78.54, -78.63, -78.62,
-        -78.67, -78.80, -78.85, -78.85, -78.85, -78.84, -78.88, -78.94, -78.93, -78.88,
-        -78.90, -78.88, -78.89, -78.98, -79.04, -79.16, -79.17, -79.17, -79.22, -79.23,
-        -79.22, -79.22, -79.22, -79.21, -79.21, -79.22, -79.25, -79.28, -79.34, -79.37,
-        -79.36, -79.34, -79.33, -79.34, -79.34, -79.34, -79.34, -79.32, -79.30, -79.29,
-        -79.29, -79.29, -79.30, -79.33, -79.37, -79.37, -79.38, -79.42, -79.44, -79.45,
-        -79.45, -79.47, -79.39, -79.40, -79.29, -79.29, -79.29, -79.29, -79.34, -79.36,
-        -79.40, -79.48, -79.48, -79.48, -79.43, -79.39, -79.35, -79.39, -79.44, -79.44,
-        -79.44, -79.44, -79.49, -79.49, -79.49, -79.44, -79.44, -79.42, -79.37, -79.39,
-        -79.41, -79.41, -79.46, -79.47, -79.48, -79.43, -79.39, -79.33, -79.32, -79.33,
-        -79.43, -79.49, -79.45, -79.40, -79.36, -79.34, -79.36, -79.38, -79.40, -79.35,
-        -79.33, -79.29, -79.25, -79.25, -79.19, -79.21, -79.26, -79.24, -79.26, -79.25,
-        -79.22, -79.25, -79.23, -79.26, -79.19, -79.23, -79.16, -79.20, -79.23, -79.23,
-        -79.17, -79.19, -79.09, -79.05, -78.96, -78.98, -79.00, -78.95, -78.94, -78.85,
-        -78.80, -78.79, -78.82, -78.84, -78.82, -78.79, -78.78, -78.78, -78.72, -78.71,
-        -78.68, -78.72, -78.62, -78.62, -78.56, -78.59, -78.53, -78.56, -78.63, -78.62,
-        -78.59, -78.62, -78.60, -78.60, -78.60, -78.60, -78.59, -78.59, -78.59, -78.58,
-        -78.56, -78.55, -78.56, -78.52, -78.58, -78.52, -78.50, -78.50, -78.51, -78.54,
-        -78.47, -78.50, -78.45, -78.43, -78.42, -78.37, -78.41, -78.41, -78.37, -78.33,
-        -78.21, -78.15, -78.13, -78.09, -78.02, -78.00, -78.01, -77.95, -78.02, -77.89,
-        -77.83, -77.82, -77.82, -77.91, -77.87, -77.96, -77.92, -77.92, -77.90, -77.89,
-        -77.85, -77.81, -77.74, -77.77, -77.74, -77.72, -77.75, -77.73, -77.68, -77.67,
-        -77.72, -77.66, -77.65, -77.58, -77.53, -77.57, -77.55, -77.58, -77.57, -77.51,
-        -77.52, -77.53, -77.47, -77.51, -77.49, -77.48, -77.47, -77.40, -77.34, -77.27,
-        -77.22, -77.16, -77.13, -77.13, -77.11, -77.10, -77.10, -77.15, -77.18, -77.19,
-        -77.21, -77.21, -77.19, -77.21, -77.19, -77.21, -77.26, -77.26, -77.20, -77.20,
-        -77.24, -77.24, -77.20, -77.18, -77.22, -77.17, -77.19, -77.15, -77.16, -77.15,
-        -77.16, -77.14, -77.16, -77.08, -77.08, -77.03, -77.06, -77.04, -77.06, -77.05,
-        -77.08, -77.12, -77.14, -77.13, -77.17, -77.15, -77.18, -77.17, -77.13, -77.11,
-        -77.10, -77.08, -76.99, -76.96, -76.90, -76.86, -76.88, -76.90, -76.93, -76.95,
-        -76.97, -76.97, -76.98, -76.99, -76.99, -77.01, -77.02, -77.05, -77.07, -77.09,
-        -77.08, -77.06, -77.06, -77.06, -77.06, -77.06, -77.05, -77.05, -77.05, -77.05,
-        -77.10, -77.11, -77.21, -77.26, -77.26, -77.24, -77.20, -77.16, -77.10, -77.08,
-        -77.13, -77.22, -77.26, -77.29, -77.26, -77.29, -77.24, -77.28, -77.27, -77.26,
-        -77.25, -77.26, -77.28, -77.28, -77.29, -77.29, -77.25, -77.32, -77.32, -77.39,
-        -77.33, -77.34, -77.33, -77.42, -77.37, -77.37, -77.40, -77.44, -77.48, -77.46,
-        -77.43, -77.41, -77.40, -77.32, -77.32, -77.36, -77.37, -77.36, -77.39, -77.36,
-        -77.29, -77.39, -77.44, -77.45, -77.48, -77.49, -77.56, -77.63, -77.58, -77.54,
-        -77.73, -77.78, -77.70, -77.65, -77.70, -77.72, -77.67, -77.71, -77.64, -77.68,
-        -77.67, -77.62, -77.63, -77.60, -77.55, -77.55, -77.44, -77.41, -77.38, -77.47,
-        -77.61, -77.58, -77.54, -77.47, -77.52, -77.68, -77.46, -77.41, -77.36, -77.47,
-        -77.42, -77.43, -77.40, -77.28, -77.09, -77.05, -76.91, -76.83, -76.89, -76.81,
-        -76.81, -76.78, -76.75, -76.61, -76.55, -76.52, -76.48, -76.47, -76.36, -76.29,
-        -76.26, -76.27, -76.32, -76.34, -76.29, -76.24, -76.33, -76.35, -76.31, -76.26,
-        -76.29, -76.18, -75.93, -75.93, -75.97, -75.95, -75.66, -75.60, -75.56, -75.57,
-        -75.53, -75.48, -75.43, -75.40, -75.35, -75.25, -75.18, -75.21, -75.13, -75.09,
-        -75.03, -75.03, -75.02, -75.04, -74.97, -74.90, -74.82, -74.75, -74.67, -74.63,
-        -74.59, -74.46, -74.35, -74.24, -74.21, -74.14, -74.03, -73.96, -73.89, -73.83,
-        -73.73, -73.60, -73.46, -73.41, -73.39, -73.39, -73.43, -73.43, -73.36, -73.31,
-        -73.25, -73.16, -73.11, -73.06, -73.01, -72.96, -72.87, -72.79, -72.75, -72.65,
-        -72.52, -72.52, -72.47, -72.40, -72.29, -72.30, -72.29, -72.21, -72.22, -72.22,
-        -72.22, -72.18, -72.12, -72.07, -72.01, -71.96, -71.89, -71.81, -71.74, -71.71,
-        -71.64, -71.65, -71.64, -71.56, -71.55, -71.56, -71.51, -71.48, -71.43, -71.35,
-        -71.35, -71.33, -71.34, -71.26, -71.17, -71.19, -71.15, -71.11, -71.07, -71.11,
-        -71.07, -71.05, -71.02, -71.04, -71.05, -70.96, -70.96, -70.98, -71.02, -70.90,
-        -70.84, -70.83, -70.81, -70.79, -70.78, -70.75, -70.70, -70.63, -70.66, -70.72,
-        -70.63, -70.57, -70.52, -70.52, -70.48, -70.45, -70.40, -70.36, -70.31, -70.28,
-        -70.25, -70.15, -70.02, -69.94, -69.86, -69.81, -69.57, -69.48, -69.40, -69.35,
-        -69.17, -69.13, -68.94, -68.87, -68.73, -68.68, -68.52, -68.33, -68.17, -68.03,
-        -67.92, -67.76, -67.60, -67.52, -67.31, -67.04, -66.84, -66.58, -66.36, -66.18,
-        -65.78, -65.53, -65.32, -64.91, -64.78, -64.25, -64.14, -63.42, -63.13, -62.80,
-        -62.54, -62.06, -61.62, -61.22, -60.96, -60.73, -60.36, -60.00
+        -4122, -4116, -4117, -4117, -4116, -4118, -4128, -4136, -4144, -4150,
+        -4162, -4169, -4175, -4186, -4185, -4193, -4202, -4206, -4212, -4213,
+        -4223, -4226, -4242, -4251, -4255, -4256, -4256, -4253, -4253, -4263,
+        -4268, -4274, -4290, -4308, -4324, -4334, -4339, -4353, -4359, -4369,
+        -4373, -4378, -4382, -4379, -4387, -4391, -4391, -4394, -4395, -4399,
+        -4405, -4409, -4418, -4420, -4420, -4420, -4424, -4430, -4431, -4441,
+        -4454, -4456, -4463, -4471, -4477, -4495, -4506, -4511, -4506, -4517,
+        -4522, -4528, -4528, -4538, -4542, -4540, -4543, -4545, -4548, -4554,
+        -4552, -4555, -4569, -4581, -4578, -4576, -4587, -4600, -4602, -4602,
+        -4616, -4629, -4638, -4647, -4648, -4650, -4656, -4658, -4660, -4669,
+        -4674, -4676, -4680, -4688, -4698, -4700, -4702, -4705, -4707, -4708,
+        -4714, -4724, -4733, -4738, -4742, -4751, -4759, -4763, -4770, -4769,
+        -4774, -4781, -4791, -4792, -4801, -4816, -4831, -4837, -4840, -4847,
+        -4854, -4858, -4865, -4868, -4871, -4876, -4885, -4890, -4901, -4912,
+        -4913, -4926, -4932, -4943, -4950, -4961, -4965, -4967, -4970, -4983,
+        -4983, -4986, -4989, -4999, -5000, -5010, -5012, -5014, -5024, -5036,
+        -5041, -5050, -5065, -5079, -5093, -5101, -5109, -5119, -5123, -5126,
+        -5137, -5147, -5150, -5153, -5160, -5163, -5166, -5168, -5174, -5181,
+        -5186, -5192, -5201, -5209, -5216, -5223, -5232, -5248, -5262, -5266,
+        -5261, -5274, -5293, -5298, -5305, -5311, -5329, -5346, -5355, -5364,
+        -5371, -5376, -5378, -5383, -5380, -5386, -5392, -5396, -5404, -5409,
+        -5414, -5414, -5422, -5426, -5431, -5437, -5444, -5449, -5456, -5463,
+        -5466, -5480, -5491, -5500, -5506, -5514, -5537, -5544, -5552, -5558,
+        -5562, -5566, -5575, -5583, -5581, -5594, -5596, -5608, -5611, -5621,
+        -5628, -5634, -5634, -5641, -5650, -5649, -5654, -5660, -5657, -5665,
+        -5673, -5682, -5686, -5688, -5698, -5704, -5709, -5723, -5728, -5732,
+        -5732, -5745, -5745, -5761, -5762, -5772, -5774, -5786, -5788, -5800,
+        -5810, -5822, -5824, -5822, -5830, -5841, -5847, -5849, -5854, -5861,
+        -5865, -5868, -5871, -5881, -5885, -5894, -5897, -5908, -5910, -5912,
+        -5920, -5925, -5931, -5934, -5936, -5935, -5938, -5937, -5945, -5954,
+        -5951, -5955, -5961, -5963, -5977, -5987, -5987, -5999, -6004, -6007,
+        -6012, -6020, -6025, -6024, -6029, -6031, -6031, -6022, -6023, -6035,
+        -6046, -6057, -6059, -6070, -6071, -6079, -6089, -6090, -6096, -6096,
+        -6097, -6103, -6106, -6108, -6110, -6110, -6127, -6129, -6138, -6139,
+        -6148, -6148, -6158, -6152, -6160, -6161, -6160, -6162, -6165, -6167,
+        -6169, -6176, -6178, -6177, -6180, -6187, -6191, -6196, -6205, -6207,
+        -6225, -6225, -6222, -6219, -6221, -6229, -6232, -6236, -6242, -6251,
+        -6259, -6262, -6269, -6278, -6279, -6279, -6284, -6292, -6300, -6302,
+        -6304, -6309, -6307, -6316, -6318, -6324, -6329, -6331, -6336, -6333,
+        -6339, -6340, -6347, -6350, -6355, -6364, -6366, -6373, -6377, -6383,
+        -6383, -6387, -6392, -6399, -6396, -6396, -6395, -6399, -6401, -6408,
+        -6422, -6420, -6427, -6426, -6430, -6425, -6429, -6426, -6432, -6431,
+        -6437, -6435, -6440, -6438, -6443, -6450, -6458, -6465, -6467, -6470,
+        -6471, -6476, -6474, -6483, -6488, -6485, -6487, -6487, -6495, -6497,
+        -6501, -6507, -6516, -6514, -6517, -6523, -6531, -6539, -6535, -6536,
+        -6533, -6540, -6540, -6548, -6551, -6555, -6560, -6558, -6563, -6562,
+        -6568, -6568, -6577, -6577, -6582, -6580, -6578, -6573, -6581, -6578,
+        -6576, -6579, -6584, -6597, -6600, -6602, -6608, -6614, -6622, -6628,
+        -6630, -6629, -6628, -6625, -6626, -6624, -6623, -6621, -6628, -6631,
+        -6640, -6645, -6648, -6644, -6646, -6651, -6649, -6644, -6647, -6656,
+        -6652, -6656, -6656, -6662, -6671, -6677, -6685, -6694, -6697, -6700,
+        -6706, -6707, -6715, -6712, -6720, -6717, -6725, -6719, -6726, -6722,
+        -6726, -6727, -6730, -6727, -6735, -6734, -6729, -6735, -6733, -6739,
+        -6736, -6742, -6749, -6756, -6756, -6755, -6760, -6765, -6773, -6769,
+        -6775, -6776, -6775, -6780, -6781, -6784, -6791, -6794, -6784, -6785,
+        -6785, -6795, -6795, -6804, -6808, -6811, -6803, -6807, -6811, -6816,
+        -6817, -6826, -6825, -6820, -6821, -6820, -6829, -6835, -6839, -6843,
+        -6840, -6841, -6847, -6851, -6858, -6860, -6864, -6864, -6873, -6874,
+        -6883, -6886, -6891, -6893, -6893, -6899, -6904, -6901, -6899, -6904,
+        -6905, -6908, -6912, -6915, -6919, -6923, -6925, -6931, -6928, -6931,
+        -6934, -6942, -6941, -6938, -6946, -6954, -6962, -6966, -6969, -6976,
+        -6978, -6978, -6971, -6970, -6975, -6979, -6985, -6986, -6993, -6995,
+        -7002, -7008, -7012, -7013, -7021, -7026, -7033, -7036, -7038, -7044,
+        -7042, -7043, -7045, -7043, -7049, -7049, -7056, -7054, -7060, -7062,
+        -7063, -7067, -7074, -7077, -7080, -7084, -7092, -7093, -7094, -7098,
+        -7101, -7102, -7106, -7110, -7111, -7113, -7115, -7118, -7119, -7122,
+        -7128, -7132, -7136, -7136, -7137, -7143, -7146, -7153, -7155, -7155,
+        -7155, -7155, -7155, -7155, -7159, -7164, -7177, -7179, -7188, -7189,
+        -7189, -7194, -7198, -7204, -7211, -7216, -7221, -7229, -7235, -7239,
+        -7243, -7243, -7243, -7243, -7243, -7243, -7248, -7252, -7256, -7268,
+        -7271, -7271, -7276, -7280, -7285, -7290, -7293, -7298, -7301, -7305,
+        -7310, -7313, -7315, -7319, -7322, -7322, -7324, -7326, -7328, -7328,
+        -7333, -7339, -7339, -7338, -7344, -7348, -7348, -7347, -7347, -7351,
+        -7356, -7362, -7364, -7364, -7364, -7369, -7379, -7390, -7397, -7403,
+        -7412, -7413, -7423, -7423, -7422, -7422, -7426, -7431, -7436, -7438,
+        -7438, -7444, -7454, -7466, -7476, -7477, -7476, -7476, -7475, -7475,
+        -7480, -7485, -7481, -7486, -7490, -7492, -7499, -7503, -7507, -7512,
+        -7518, -7521, -7529, -7531, -7538, -7545, -7550, -7555, -7557, -7564,
+        -7572, -7574, -7581, -7587, -7589, -7590, -7589, -7589, -7589, -7588,
+        -7595, -7602, -7607, -7607, -7613, -7620, -7625, -7630, -7639, -7639,
+        -7644, -7649, -7653, -7653, -7657, -7662, -7671, -7673, -7677, -7685,
+        -7689, -7697, -7698, -7702, -7702, -7706, -7706, -7721, -7720, -7729,
+        -7733, -7734, -7734, -7733, -7737, -7737, -7745, -7747, -7752, -7757,
+        -7759, -7762, -7766, -7767, -7771, -7773, -7774, -7782, -7784, -7789,
+        -7793, -7795, -7794, -7800, -7808, -7810, -7817, -7816, -7822, -7827,
+        -7831, -7831, -7830, -7836, -7840, -7839, -7849, -7854, -7863, -7862,
+        -7867, -7880, -7885, -7885, -7885, -7884, -7888, -7894, -7893, -7888,
+        -7890, -7888, -7889, -7898, -7904, -7916, -7917, -7917, -7922, -7923,
+        -7922, -7922, -7922, -7921, -7921, -7922, -7925, -7928, -7934, -7937,
+        -7936, -7934, -7933, -7934, -7934, -7934, -7934, -7932, -7930, -7929,
+        -7929, -7929, -7930, -7933, -7937, -7937, -7938, -7942, -7944, -7945,
+        -7945, -7947, -7939, -7940, -7929, -7929, -7929, -7929, -7934, -7936,
+        -7940, -7948, -7948, -7948, -7943, -7939, -7935, -7939, -7944, -7944,
+        -7944, -7944, -7949, -7949, -7949, -7944, -7944, -7942, -7937, -7939,
+        -7941, -7941, -7946, -7947, -7948, -7943, -7939, -7933, -7932, -7933,
+        -7943, -7949, -7945, -7940, -7936, -7934, -7936, -7938, -7940, -7935,
+        -7933, -7929, -7925, -7925, -7919, -7921, -7926, -7924, -7926, -7925,
+        -7922, -7925, -7923, -7926, -7919, -7923, -7916, -7920, -7923, -7923,
+        -7917, -7919, -7909, -7905, -7896, -7898, -7900, -7895, -7894, -7885,
+        -7880, -7879, -7882, -7884, -7882, -7879, -7878, -7878, -7872, -7871,
+        -7868, -7872, -7862, -7862, -7856, -7859, -7853, -7856, -7863, -7862,
+        -7859, -7862, -7860, -7860, -7860, -7860, -7859, -7859, -7859, -7858,
+        -7856, -7855, -7856, -7852, -7858, -7852, -7850, -7850, -7851, -7854,
+        -7847, -7850, -7845, -7843, -7842, -7837, -7841, -7841, -7837, -7833,
+        -7821, -7815, -7813, -7809, -7802, -7800, -7801, -7795, -7802, -7789,
+        -7783, -7782, -7782, -7791, -7787, -7796, -7792, -7792, -7790, -7789,
+        -7785, -7781, -7774, -7777, -7774, -7772, -7775, -7773, -7768, -7767,
+        -7772, -7766, -7765, -7758, -7753, -7757, -7755, -7758, -7757, -7751,
+        -7752, -7753, -7747, -7751, -7749, -7748, -7747, -7740, -7734, -7727,
+        -7722, -7716, -7713, -7713, -7711, -7710, -7710, -7715, -7718, -7719,
+        -7721, -7721, -7719, -7721, -7719, -7721, -7726, -7726, -7720, -7720,
+        -7724, -7724, -7720, -7718, -7722, -7717, -7719, -7715, -7716, -7715,
+        -7716, -7714, -7716, -7708, -7708, -7703, -7706, -7704, -7706, -7705,
+        -7708, -7712, -7714, -7713, -7717, -7715, -7718, -7717, -7713, -7711,
+        -7710, -7708, -7699, -7696, -7690, -7686, -7688, -7690, -7693, -7695,
+        -7697, -7697, -7698, -7699, -7699, -7701, -7702, -7705, -7707, -7709,
+        -7708, -7706, -7706, -7706, -7706, -7706, -7705, -7705, -7705, -7705,
+        -7710, -7711, -7721, -7726, -7726, -7724, -7720, -7716, -7710, -7708,
+        -7713, -7722, -7726, -7729, -7726, -7729, -7724, -7728, -7727, -7726,
+        -7725, -7726, -7728, -7728, -7729, -7729, -7725, -7732, -7732, -7739,
+        -7733, -7734, -7733, -7742, -7737, -7737, -7740, -7744, -7748, -7746,
+        -7743, -7741, -7740, -7732, -7732, -7736, -7737, -7736, -7739, -7736,
+        -7729, -7739, -7744, -7745, -7748, -7749, -7756, -7763, -7758, -7754,
+        -7773, -7778, -7770, -7765, -7770, -7772, -7767, -7771, -7764, -7768,
+        -7767, -7762, -7763, -7760, -7755, -7755, -7744, -7741, -7738, -7747,
+        -7761, -7758, -7754, -7747, -7752, -7768, -7746, -7741, -7736, -7747,
+        -7742, -7743, -7740, -7728, -7709, -7705, -7691, -7683, -7689, -7681,
+        -7681, -7678, -7675, -7661, -7655, -7652, -7648, -7647, -7636, -7629,
+        -7626, -7627, -7632, -7634, -7629, -7624, -7633, -7635, -7631, -7626,
+        -7629, -7618, -7593, -7593, -7597, -7595, -7566, -7560, -7556, -7557,
+        -7553, -7548, -7543, -7540, -7535, -7525, -7518, -7521, -7513, -7509,
+        -7503, -7503, -7502, -7504, -7497, -7490, -7482, -7475, -7467, -7463,
+        -7459, -7446, -7435, -7424, -7421, -7414, -7403, -7396, -7389, -7383,
+        -7373, -7360, -7346, -7341, -7339, -7339, -7343, -7343, -7336, -7331,
+        -7325, -7316, -7311, -7306, -7301, -7296, -7287, -7279, -7275, -7265,
+        -7252, -7252, -7247, -7240, -7229, -7230, -7229, -7221, -7222, -7222,
+        -7222, -7218, -7212, -7207, -7201, -7196, -7189, -7181, -7174, -7171,
+        -7164, -7165, -7164, -7156, -7155, -7156, -7151, -7148, -7143, -7135,
+        -7135, -7133, -7134, -7126, -7117, -7119, -7115, -7111, -7107, -7111,
+        -7107, -7105, -7102, -7104, -7105, -7096, -7096, -7098, -7102, -7090,
+        -7084, -7083, -7081, -7079, -7078, -7075, -7070, -7063, -7066, -7072,
+        -7063, -7057, -7052, -7052, -7048, -7045, -7040, -7036, -7031, -7028,
+        -7025, -7015, -7002, -6994, -6986, -6981, -6957, -6948, -6940, -6935,
+        -6917, -6913, -6894, -6887, -6873, -6868, -6852, -6833, -6817, -6803,
+        -6792, -6776, -6760, -6752, -6731, -6704, -6684, -6658, -6636, -6618,
+        -6578, -6553, -6532, -6491, -6478, -6425, -6414, -6342, -6313, -6280,
+        -6254, -6206, -6162, -6122, -6096, -6073, -6036, -6000
     };
 
-    static const float robinson_dadson_curve_10_phons[1468] =
+    static const int16_t robinson_dadson_curve_10_phons[1468] =
     {
-        -37.61, -37.58, -37.58, -37.61, -37.63, -37.66, -37.76, -37.83, -37.90, -37.95,
-        -38.05, -38.10, -38.15, -38.23, -38.23, -38.31, -38.41, -38.46, -38.50, -38.52,
-        -38.62, -38.65, -38.75, -38.84, -38.88, -38.89, -38.90, -38.89, -38.86, -38.96,
-        -39.00, -39.08, -39.22, -39.40, -39.53, -39.59, -39.64, -39.77, -39.86, -39.91,
-        -39.93, -39.97, -40.04, -40.01, -40.05, -40.05, -40.08, -40.17, -40.17, -40.18,
-        -40.24, -40.27, -40.36, -40.38, -40.40, -40.39, -40.44, -40.51, -40.53, -40.59,
-        -40.66, -40.68, -40.75, -40.80, -40.83, -40.97, -41.04, -41.12, -41.09, -41.25,
-        -41.27, -41.32, -41.34, -41.45, -41.49, -41.45, -41.46, -41.47, -41.49, -41.57,
-        -41.52, -41.59, -41.71, -41.86, -41.82, -41.77, -41.89, -41.95, -41.95, -42.01,
-        -42.08, -42.19, -42.27, -42.37, -42.38, -42.41, -42.48, -42.50, -42.52, -42.58,
-        -42.62, -42.65, -42.67, -42.75, -42.83, -42.87, -42.90, -42.92, -42.94, -42.95,
-        -43.01, -43.11, -43.19, -43.21, -43.25, -43.33, -43.40, -43.43, -43.48, -43.47,
-        -43.52, -43.59, -43.68, -43.69, -43.76, -43.89, -44.04, -44.11, -44.13, -44.17,
-        -44.24, -44.30, -44.36, -44.39, -44.42, -44.48, -44.56, -44.62, -44.70, -44.78,
-        -44.81, -44.93, -44.98, -45.04, -45.11, -45.22, -45.24, -45.25, -45.27, -45.40,
-        -45.39, -45.42, -45.47, -45.57, -45.60, -45.72, -45.75, -45.77, -45.84, -45.94,
-        -45.99, -46.08, -46.20, -46.33, -46.41, -46.48, -46.58, -46.66, -46.70, -46.74,
-        -46.80, -46.88, -46.93, -46.96, -47.01, -47.04, -47.08, -47.09, -47.17, -47.23,
-        -47.29, -47.35, -47.42, -47.50, -47.55, -47.60, -47.67, -47.80, -47.92, -47.96,
-        -47.91, -48.04, -48.16, -48.17, -48.21, -48.28, -48.44, -48.58, -48.67, -48.76,
-        -48.82, -48.87, -48.88, -48.93, -48.93, -49.01, -49.08, -49.11, -49.20, -49.23,
-        -49.25, -49.24, -49.32, -49.37, -49.42, -49.48, -49.57, -49.64, -49.69, -49.75,
-        -49.80, -49.92, -50.03, -50.10, -50.15, -50.19, -50.35, -50.39, -50.50, -50.54,
-        -50.58, -50.61, -50.69, -50.77, -50.77, -50.86, -50.87, -50.99, -51.03, -51.11,
-        -51.15, -51.22, -51.24, -51.36, -51.44, -51.43, -51.47, -51.55, -51.50, -51.59,
-        -51.64, -51.70, -51.77, -51.79, -51.86, -51.90, -51.95, -52.06, -52.08, -52.10,
-        -52.09, -52.17, -52.17, -52.33, -52.35, -52.45, -52.48, -52.62, -52.64, -52.75,
-        -52.81, -52.92, -52.94, -52.94, -53.02, -53.09, -53.15, -53.17, -53.25, -53.30,
-        -53.32, -53.34, -53.37, -53.48, -53.49, -53.57, -53.59, -53.72, -53.75, -53.77,
-        -53.85, -53.91, -53.94, -53.98, -54.01, -53.99, -54.01, -54.01, -54.06, -54.12,
-        -54.13, -54.19, -54.24, -54.27, -54.38, -54.49, -54.49, -54.60, -54.61, -54.60,
-        -54.65, -54.76, -54.83, -54.81, -54.84, -54.90, -54.92, -54.85, -54.84, -54.90,
-        -54.98, -55.05, -55.07, -55.18, -55.18, -55.24, -55.34, -55.35, -55.40, -55.40,
-        -55.40, -55.45, -55.49, -55.52, -55.54, -55.54, -55.68, -55.70, -55.80, -55.81,
-        -55.89, -55.90, -56.00, -55.96, -56.05, -56.08, -56.09, -56.13, -56.16, -56.17,
-        -56.19, -56.23, -56.23, -56.23, -56.27, -56.34, -56.37, -56.40, -56.49, -56.48,
-        -56.59, -56.57, -56.57, -56.55, -56.58, -56.64, -56.68, -56.72, -56.76, -56.85,
-        -56.91, -56.93, -56.98, -57.07, -57.09, -57.09, -57.09, -57.18, -57.26, -57.30,
-        -57.32, -57.36, -57.36, -57.43, -57.46, -57.51, -57.56, -57.57, -57.62, -57.59,
-        -57.65, -57.67, -57.71, -57.75, -57.81, -57.89, -57.90, -57.97, -57.98, -58.03,
-        -58.00, -58.04, -58.08, -58.15, -58.12, -58.11, -58.10, -58.16, -58.15, -58.22,
-        -58.35, -58.33, -58.40, -58.47, -58.48, -58.45, -58.47, -58.44, -58.51, -58.49,
-        -58.54, -58.50, -58.57, -58.52, -58.59, -58.68, -58.75, -58.81, -58.82, -58.88,
-        -58.90, -58.93, -58.91, -58.99, -59.01, -58.96, -58.98, -58.98, -59.01, -59.01,
-        -59.05, -59.13, -59.20, -59.19, -59.25, -59.30, -59.38, -59.44, -59.41, -59.45,
-        -59.42, -59.47, -59.46, -59.50, -59.53, -59.54, -59.60, -59.58, -59.64, -59.62,
-        -59.68, -59.66, -59.75, -59.77, -59.84, -59.83, -59.85, -59.81, -59.89, -59.84,
-        -59.84, -59.87, -59.93, -60.01, -60.03, -60.04, -60.09, -60.16, -60.22, -60.29,
-        -60.31, -60.28, -60.29, -60.25, -60.27, -60.26, -60.26, -60.23, -60.27, -60.28,
-        -60.35, -60.40, -60.44, -60.41, -60.46, -60.50, -60.48, -60.48, -60.50, -60.55,
-        -60.53, -60.59, -60.60, -60.66, -60.74, -60.79, -60.88, -60.94, -60.98, -60.99,
-        -61.04, -61.05, -61.10, -61.08, -61.13, -61.12, -61.18, -61.14, -61.21, -61.20,
-        -61.24, -61.23, -61.28, -61.24, -61.32, -61.29, -61.27, -61.32, -61.31, -61.36,
-        -61.29, -61.33, -61.38, -61.44, -61.44, -61.46, -61.51, -61.54, -61.63, -61.56,
-        -61.60, -61.61, -61.59, -61.66, -61.67, -61.70, -61.77, -61.78, -61.72, -61.74,
-        -61.73, -61.81, -61.85, -61.90, -61.95, -61.97, -61.92, -61.95, -62.02, -62.07,
-        -62.09, -62.14, -62.16, -62.11, -62.09, -62.07, -62.13, -62.19, -62.21, -62.22,
-        -62.20, -62.23, -62.25, -62.28, -62.33, -62.34, -62.39, -62.39, -62.48, -62.49,
-        -62.55, -62.60, -62.65, -62.68, -62.70, -62.77, -62.80, -62.79, -62.77, -62.84,
-        -62.84, -62.90, -62.93, -62.94, -62.99, -63.03, -63.04, -63.07, -63.04, -63.06,
-        -63.11, -63.17, -63.14, -63.10, -63.16, -63.22, -63.30, -63.35, -63.38, -63.45,
-        -63.47, -63.48, -63.39, -63.36, -63.41, -63.48, -63.51, -63.54, -63.60, -63.63,
-        -63.67, -63.72, -63.77, -63.79, -63.83, -63.87, -63.93, -63.96, -63.97, -64.02,
-        -64.01, -64.01, -64.00, -63.98, -64.02, -64.03, -64.06, -64.08, -64.11, -64.16,
-        -64.19, -64.21, -64.25, -64.27, -64.28, -64.33, -64.41, -64.44, -64.47, -64.52,
-        -64.53, -64.57, -64.59, -64.61, -64.61, -64.64, -64.67, -64.69, -64.72, -64.76,
-        -64.79, -64.81, -64.83, -64.83, -64.83, -64.86, -64.88, -64.92, -64.92, -64.93,
-        -64.94, -64.94, -64.98, -64.98, -65.04, -65.08, -65.20, -65.23, -65.34, -65.35,
-        -65.35, -65.37, -65.39, -65.42, -65.46, -65.48, -65.51, -65.59, -65.65, -65.70,
-        -65.74, -65.75, -65.75, -65.75, -65.77, -65.77, -65.80, -65.84, -65.88, -65.96,
-        -65.98, -65.99, -66.01, -66.04, -66.06, -66.09, -66.10, -66.15, -66.17, -66.21,
-        -66.28, -66.32, -66.35, -66.37, -66.38, -66.39, -66.43, -66.45, -66.48, -66.50,
-        -66.55, -66.60, -66.60, -66.60, -66.65, -66.69, -66.69, -66.68, -66.69, -66.70,
-        -66.73, -66.76, -66.76, -66.76, -66.76, -66.81, -66.91, -66.99, -67.03, -67.06,
-        -67.18, -67.22, -67.33, -67.35, -67.34, -67.34, -67.36, -67.38, -67.40, -67.41,
-        -67.41, -67.46, -67.54, -67.64, -67.71, -67.71, -67.71, -67.70, -67.69, -67.69,
-        -67.74, -67.79, -67.75, -67.80, -67.84, -67.86, -67.91, -67.93, -67.96, -68.00,
-        -68.04, -68.06, -68.13, -68.14, -68.19, -68.25, -68.28, -68.33, -68.34, -68.40,
-        -68.46, -68.47, -68.53, -68.58, -68.59, -68.59, -68.59, -68.59, -68.58, -68.58,
-        -68.64, -68.72, -68.76, -68.77, -68.83, -68.90, -68.94, -68.99, -69.08, -69.08,
-        -69.13, -69.18, -69.23, -69.22, -69.27, -69.29, -69.36, -69.37, -69.38, -69.43,
-        -69.45, -69.51, -69.49, -69.53, -69.51, -69.55, -69.53, -69.68, -69.65, -69.74,
-        -69.78, -69.77, -69.76, -69.76, -69.80, -69.80, -69.87, -69.90, -69.94, -69.99,
-        -70.02, -70.05, -70.08, -70.10, -70.14, -70.16, -70.18, -70.25, -70.26, -70.30,
-        -70.30, -70.30, -70.26, -70.28, -70.35, -70.36, -70.41, -70.41, -70.46, -70.50,
-        -70.54, -70.53, -70.51, -70.56, -70.60, -70.57, -70.67, -70.69, -70.74, -70.73,
-        -70.78, -70.87, -70.91, -70.91, -70.91, -70.90, -70.95, -71.02, -71.02, -70.98,
-        -71.01, -71.00, -70.98, -71.05, -71.08, -71.19, -71.18, -71.18, -71.25, -71.26,
-        -71.26, -71.26, -71.26, -71.25, -71.25, -71.26, -71.27, -71.29, -71.32, -71.36,
-        -71.36, -71.33, -71.32, -71.33, -71.33, -71.34, -71.34, -71.31, -71.30, -71.30,
-        -71.30, -71.30, -71.30, -71.32, -71.34, -71.35, -71.35, -71.37, -71.38, -71.39,
-        -71.38, -71.39, -71.30, -71.30, -71.20, -71.20, -71.20, -71.20, -71.23, -71.23,
-        -71.26, -71.30, -71.32, -71.32, -71.29, -71.28, -71.23, -71.26, -71.28, -71.28,
-        -71.28, -71.28, -71.30, -71.30, -71.30, -71.25, -71.25, -71.19, -71.14, -71.15,
-        -71.16, -71.16, -71.19, -71.21, -71.23, -71.19, -71.14, -71.09, -71.10, -71.11,
-        -71.19, -71.24, -71.21, -71.18, -71.13, -71.13, -71.14, -71.15, -71.15, -71.10,
-        -71.08, -71.05, -71.00, -71.02, -70.98, -70.98, -71.01, -71.00, -71.03, -71.01,
-        -70.94, -70.95, -70.92, -70.94, -70.86, -70.88, -70.80, -70.81, -70.83, -70.84,
-        -70.80, -70.81, -70.74, -70.69, -70.62, -70.63, -70.63, -70.59, -70.59, -70.49,
-        -70.45, -70.44, -70.47, -70.48, -70.46, -70.41, -70.40, -70.44, -70.41, -70.38,
-        -70.35, -70.39, -70.29, -70.29, -70.22, -70.24, -70.18, -70.21, -70.25, -70.27,
-        -70.25, -70.25, -70.24, -70.22, -70.22, -70.21, -70.20, -70.18, -70.20, -70.17,
-        -70.16, -70.13, -70.15, -70.12, -70.15, -70.10, -70.10, -70.09, -70.09, -70.15,
-        -70.07, -70.12, -70.04, -70.01, -70.02, -69.96, -70.00, -69.98, -69.96, -69.93,
-        -69.84, -69.79, -69.77, -69.71, -69.67, -69.61, -69.59, -69.56, -69.63, -69.52,
-        -69.50, -69.49, -69.50, -69.55, -69.51, -69.60, -69.58, -69.54, -69.52, -69.50,
-        -69.45, -69.43, -69.40, -69.41, -69.40, -69.35, -69.38, -69.32, -69.30, -69.26,
-        -69.33, -69.25, -69.26, -69.21, -69.14, -69.19, -69.14, -69.17, -69.15, -69.12,
-        -69.12, -69.13, -69.10, -69.14, -69.10, -69.13, -69.12, -69.06, -68.99, -68.92,
-        -68.90, -68.82, -68.81, -68.81, -68.79, -68.78, -68.79, -68.86, -68.89, -68.91,
-        -68.94, -68.91, -68.92, -68.91, -68.88, -68.86, -68.90, -68.89, -68.84, -68.82,
-        -68.84, -68.83, -68.83, -68.85, -68.92, -68.87, -68.90, -68.85, -68.87, -68.86,
-        -68.85, -68.81, -68.83, -68.78, -68.79, -68.74, -68.77, -68.75, -68.77, -68.75,
-        -68.76, -68.80, -68.80, -68.82, -68.84, -68.82, -68.84, -68.84, -68.83, -68.82,
-        -68.81, -68.82, -68.74, -68.73, -68.69, -68.68, -68.71, -68.72, -68.73, -68.74,
-        -68.75, -68.75, -68.76, -68.76, -68.77, -68.77, -68.78, -68.79, -68.80, -68.81,
-        -68.81, -68.80, -68.80, -68.80, -68.80, -68.80, -68.80, -68.80, -68.80, -68.80,
-        -68.85, -68.85, -68.95, -69.00, -69.00, -68.99, -68.97, -68.95, -68.92, -68.91,
-        -68.96, -69.05, -69.07, -69.10, -69.05, -69.11, -69.06, -69.11, -69.09, -69.11,
-        -69.11, -69.09, -69.10, -69.10, -69.11, -69.12, -69.08, -69.14, -69.11, -69.19,
-        -69.12, -69.17, -69.15, -69.25, -69.22, -69.24, -69.25, -69.27, -69.32, -69.30,
-        -69.27, -69.28, -69.30, -69.24, -69.26, -69.29, -69.29, -69.28, -69.32, -69.30,
-        -69.25, -69.36, -69.41, -69.44, -69.41, -69.44, -69.52, -69.60, -69.56, -69.51,
-        -69.68, -69.69, -69.63, -69.60, -69.63, -69.65, -69.56, -69.59, -69.52, -69.57,
-        -69.59, -69.59, -69.63, -69.60, -69.56, -69.58, -69.48, -69.47, -69.40, -69.49,
-        -69.62, -69.58, -69.53, -69.47, -69.48, -69.66, -69.51, -69.47, -69.45, -69.50,
-        -69.48, -69.51, -69.48, -69.36, -69.20, -69.19, -69.09, -69.05, -69.12, -69.06,
-        -69.08, -69.09, -69.12, -69.02, -68.99, -68.97, -68.90, -68.89, -68.81, -68.76,
-        -68.74, -68.74, -68.78, -68.77, -68.70, -68.67, -68.72, -68.74, -68.70, -68.65,
-        -68.69, -68.57, -68.45, -68.43, -68.46, -68.45, -68.24, -68.23, -68.21, -68.18,
-        -68.11, -68.08, -68.05, -68.02, -67.96, -67.89, -67.83, -67.84, -67.83, -67.84,
-        -67.83, -67.84, -67.83, -67.84, -67.81, -67.74, -67.68, -67.60, -67.53, -67.48,
-        -67.46, -67.35, -67.25, -67.15, -67.13, -67.07, -66.97, -66.90, -66.88, -66.82,
-        -66.72, -66.61, -66.50, -66.45, -66.44, -66.44, -66.46, -66.49, -66.43, -66.39,
-        -66.32, -66.28, -66.23, -66.16, -66.11, -66.09, -66.02, -65.95, -65.93, -65.84,
-        -65.73, -65.73, -65.68, -65.64, -65.58, -65.59, -65.59, -65.50, -65.50, -65.50,
-        -65.51, -65.48, -65.44, -65.39, -65.34, -65.27, -65.23, -65.14, -65.11, -65.07,
-        -65.03, -65.04, -65.05, -65.00, -65.00, -65.02, -65.00, -64.97, -64.93, -64.88,
-        -64.88, -64.89, -64.94, -64.89, -64.81, -64.81, -64.78, -64.79, -64.77, -64.79,
-        -64.74, -64.75, -64.74, -64.73, -64.75, -64.69, -64.69, -64.68, -64.71, -64.65,
-        -64.59, -64.58, -64.56, -64.57, -64.57, -64.55, -64.47, -64.43, -64.46, -64.49,
-        -64.45, -64.39, -64.37, -64.39, -64.37, -64.37, -64.33, -64.34, -64.34, -64.32,
-        -64.31, -64.23, -64.13, -64.09, -64.01, -63.96, -63.74, -63.70, -63.62, -63.60,
-        -63.44, -63.40, -63.26, -63.20, -63.06, -63.01, -62.85, -62.69, -62.55, -62.46,
-        -62.38, -62.22, -62.11, -62.01, -61.81, -61.61, -61.41, -61.23, -61.08, -60.92,
-        -60.57, -60.35, -60.18, -59.85, -59.70, -59.21, -59.04, -58.48, -58.09, -57.81,
-        -57.53, -57.25, -56.89, -56.46, -56.20, -55.94, -55.65, -55.40
+        -3761, -3758, -3758, -3761, -3763, -3766, -3776, -3783, -3790, -3795,
+        -3805, -3810, -3815, -3823, -3823, -3831, -3841, -3846, -3850, -3852,
+        -3862, -3865, -3875, -3884, -3888, -3889, -3890, -3889, -3886, -3896,
+        -3900, -3908, -3922, -3940, -3953, -3959, -3964, -3977, -3986, -3991,
+        -3993, -3997, -4004, -4001, -4005, -4005, -4008, -4017, -4017, -4018,
+        -4024, -4027, -4036, -4038, -4040, -4039, -4044, -4051, -4053, -4059,
+        -4066, -4068, -4075, -4080, -4083, -4097, -4104, -4112, -4109, -4125,
+        -4127, -4132, -4134, -4145, -4149, -4145, -4146, -4147, -4149, -4157,
+        -4152, -4159, -4171, -4186, -4182, -4177, -4189, -4195, -4195, -4201,
+        -4208, -4219, -4227, -4237, -4238, -4241, -4248, -4250, -4252, -4258,
+        -4262, -4265, -4267, -4275, -4283, -4287, -4290, -4292, -4294, -4295,
+        -4301, -4311, -4319, -4321, -4325, -4333, -4340, -4343, -4348, -4347,
+        -4352, -4359, -4368, -4369, -4376, -4389, -4404, -4411, -4413, -4417,
+        -4424, -4430, -4436, -4439, -4442, -4448, -4456, -4462, -4470, -4478,
+        -4481, -4493, -4498, -4504, -4511, -4522, -4524, -4525, -4527, -4540,
+        -4539, -4542, -4547, -4557, -4560, -4572, -4575, -4577, -4584, -4594,
+        -4599, -4608, -4620, -4633, -4641, -4648, -4658, -4666, -4670, -4674,
+        -4680, -4688, -4693, -4696, -4701, -4704, -4708, -4709, -4717, -4723,
+        -4729, -4735, -4742, -4750, -4755, -4760, -4767, -4780, -4792, -4796,
+        -4791, -4804, -4816, -4817, -4821, -4828, -4844, -4858, -4867, -4876,
+        -4882, -4887, -4888, -4893, -4893, -4901, -4908, -4911, -4920, -4923,
+        -4925, -4924, -4932, -4937, -4942, -4948, -4957, -4964, -4969, -4975,
+        -4980, -4992, -5003, -5010, -5015, -5019, -5035, -5039, -5050, -5054,
+        -5058, -5061, -5069, -5077, -5077, -5086, -5087, -5099, -5103, -5111,
+        -5115, -5122, -5124, -5136, -5144, -5143, -5147, -5155, -5150, -5159,
+        -5164, -5170, -5177, -5179, -5186, -5190, -5195, -5206, -5208, -5210,
+        -5209, -5217, -5217, -5233, -5235, -5245, -5248, -5262, -5264, -5275,
+        -5281, -5292, -5294, -5294, -5302, -5309, -5315, -5317, -5325, -5330,
+        -5332, -5334, -5337, -5348, -5349, -5357, -5359, -5372, -5375, -5377,
+        -5385, -5391, -5394, -5398, -5401, -5399, -5401, -5401, -5406, -5412,
+        -5413, -5419, -5424, -5427, -5438, -5449, -5449, -5460, -5461, -5460,
+        -5465, -5476, -5483, -5481, -5484, -5490, -5492, -5485, -5484, -5490,
+        -5498, -5505, -5507, -5518, -5518, -5524, -5534, -5535, -5540, -5540,
+        -5540, -5545, -5549, -5552, -5554, -5554, -5568, -5570, -5580, -5581,
+        -5589, -5590, -5600, -5596, -5605, -5608, -5609, -5613, -5616, -5617,
+        -5619, -5623, -5623, -5623, -5627, -5634, -5637, -5640, -5649, -5648,
+        -5659, -5657, -5657, -5655, -5658, -5664, -5668, -5672, -5676, -5685,
+        -5691, -5693, -5698, -5707, -5709, -5709, -5709, -5718, -5726, -5730,
+        -5732, -5736, -5736, -5743, -5746, -5751, -5756, -5757, -5762, -5759,
+        -5765, -5767, -5771, -5775, -5781, -5789, -5790, -5797, -5798, -5803,
+        -5800, -5804, -5808, -5815, -5812, -5811, -5810, -5816, -5815, -5822,
+        -5835, -5833, -5840, -5847, -5848, -5845, -5847, -5844, -5851, -5849,
+        -5854, -5850, -5857, -5852, -5859, -5868, -5875, -5881, -5882, -5888,
+        -5890, -5893, -5891, -5899, -5901, -5896, -5898, -5898, -5901, -5901,
+        -5905, -5913, -5920, -5919, -5925, -5930, -5938, -5944, -5941, -5945,
+        -5942, -5947, -5946, -5950, -5953, -5954, -5960, -5958, -5964, -5962,
+        -5968, -5966, -5975, -5977, -5984, -5983, -5985, -5981, -5989, -5984,
+        -5984, -5987, -5993, -6001, -6003, -6004, -6009, -6016, -6022, -6029,
+        -6031, -6028, -6029, -6025, -6027, -6026, -6026, -6023, -6027, -6028,
+        -6035, -6040, -6044, -6041, -6046, -6050, -6048, -6048, -6050, -6055,
+        -6053, -6059, -6060, -6066, -6074, -6079, -6088, -6094, -6098, -6099,
+        -6104, -6105, -6110, -6108, -6113, -6112, -6118, -6114, -6121, -6120,
+        -6124, -6123, -6128, -6124, -6132, -6129, -6127, -6132, -6131, -6136,
+        -6129, -6133, -6138, -6144, -6144, -6146, -6151, -6154, -6163, -6156,
+        -6160, -6161, -6159, -6166, -6167, -6170, -6177, -6178, -6172, -6174,
+        -6173, -6181, -6185, -6190, -6195, -6197, -6192, -6195, -6202, -6207,
+        -6209, -6214, -6216, -6211, -6209, -6207, -6213, -6219, -6221, -6222,
+        -6220, -6223, -6225, -6228, -6233, -6234, -6239, -6239, -6248, -6249,
+        -6255, -6260, -6265, -6268, -6270, -6277, -6280, -6279, -6277, -6284,
+        -6284, -6290, -6293, -6294, -6299, -6303, -6304, -6307, -6304, -6306,
+        -6311, -6317, -6314, -6310, -6316, -6322, -6330, -6335, -6338, -6345,
+        -6347, -6348, -6339, -6336, -6341, -6348, -6351, -6354, -6360, -6363,
+        -6367, -6372, -6377, -6379, -6383, -6387, -6393, -6396, -6397, -6402,
+        -6401, -6401, -6400, -6398, -6402, -6403, -6406, -6408, -6411, -6416,
+        -6419, -6421, -6425, -6427, -6428, -6433, -6441, -6444, -6447, -6452,
+        -6453, -6457, -6459, -6461, -6461, -6464, -6467, -6469, -6472, -6476,
+        -6479, -6481, -6483, -6483, -6483, -6486, -6488, -6492, -6492, -6493,
+        -6494, -6494, -6498, -6498, -6504, -6508, -6520, -6523, -6534, -6535,
+        -6535, -6537, -6539, -6542, -6546, -6548, -6551, -6559, -6565, -6570,
+        -6574, -6575, -6575, -6575, -6577, -6577, -6580, -6584, -6588, -6596,
+        -6598, -6599, -6601, -6604, -6606, -6609, -6610, -6615, -6617, -6621,
+        -6628, -6632, -6635, -6637, -6638, -6639, -6643, -6645, -6648, -6650,
+        -6655, -6660, -6660, -6660, -6665, -6669, -6669, -6668, -6669, -6670,
+        -6673, -6676, -6676, -6676, -6676, -6681, -6691, -6699, -6703, -6706,
+        -6718, -6722, -6733, -6735, -6734, -6734, -6736, -6738, -6740, -6741,
+        -6741, -6746, -6754, -6764, -6771, -6771, -6771, -6770, -6769, -6769,
+        -6774, -6779, -6775, -6780, -6784, -6786, -6791, -6793, -6796, -6800,
+        -6804, -6806, -6813, -6814, -6819, -6825, -6828, -6833, -6834, -6840,
+        -6846, -6847, -6853, -6858, -6859, -6859, -6859, -6859, -6858, -6858,
+        -6864, -6872, -6876, -6877, -6883, -6890, -6894, -6899, -6908, -6908,
+        -6913, -6918, -6923, -6922, -6927, -6929, -6936, -6937, -6938, -6943,
+        -6945, -6951, -6949, -6953, -6951, -6955, -6953, -6968, -6965, -6974,
+        -6978, -6977, -6976, -6976, -6980, -6980, -6987, -6990, -6994, -6999,
+        -7002, -7005, -7008, -7010, -7014, -7016, -7018, -7025, -7026, -7030,
+        -7030, -7030, -7026, -7028, -7035, -7036, -7041, -7041, -7046, -7050,
+        -7054, -7053, -7051, -7056, -7060, -7057, -7067, -7069, -7074, -7073,
+        -7078, -7087, -7091, -7091, -7091, -7090, -7095, -7102, -7102, -7098,
+        -7101, -7100, -7098, -7105, -7108, -7119, -7118, -7118, -7125, -7126,
+        -7126, -7126, -7126, -7125, -7125, -7126, -7127, -7129, -7132, -7136,
+        -7136, -7133, -7132, -7133, -7133, -7134, -7134, -7131, -7130, -7130,
+        -7130, -7130, -7130, -7132, -7134, -7135, -7135, -7137, -7138, -7139,
+        -7138, -7139, -7130, -7130, -7120, -7120, -7120, -7120, -7123, -7123,
+        -7126, -7130, -7132, -7132, -7129, -7128, -7123, -7126, -7128, -7128,
+        -7128, -7128, -7130, -7130, -7130, -7125, -7125, -7119, -7114, -7115,
+        -7116, -7116, -7119, -7121, -7123, -7119, -7114, -7109, -7110, -7111,
+        -7119, -7124, -7121, -7118, -7113, -7113, -7114, -7115, -7115, -7110,
+        -7108, -7105, -7100, -7102, -7098, -7098, -7101, -7100, -7103, -7101,
+        -7094, -7095, -7092, -7094, -7086, -7088, -7080, -7081, -7083, -7084,
+        -7080, -7081, -7074, -7069, -7062, -7063, -7063, -7059, -7059, -7049,
+        -7045, -7044, -7047, -7048, -7046, -7041, -7040, -7044, -7041, -7038,
+        -7035, -7039, -7029, -7029, -7022, -7024, -7018, -7021, -7025, -7027,
+        -7025, -7025, -7024, -7022, -7022, -7021, -7020, -7018, -7020, -7017,
+        -7016, -7013, -7015, -7012, -7015, -7010, -7010, -7009, -7009, -7015,
+        -7007, -7012, -7004, -7001, -7002, -6996, -7000, -6998, -6996, -6993,
+        -6984, -6979, -6977, -6971, -6967, -6961, -6959, -6956, -6963, -6952,
+        -6950, -6949, -6950, -6955, -6951, -6960, -6958, -6954, -6952, -6950,
+        -6945, -6943, -6940, -6941, -6940, -6935, -6938, -6932, -6930, -6926,
+        -6933, -6925, -6926, -6921, -6914, -6919, -6914, -6917, -6915, -6912,
+        -6912, -6913, -6910, -6914, -6910, -6913, -6912, -6906, -6899, -6892,
+        -6890, -6882, -6881, -6881, -6879, -6878, -6879, -6886, -6889, -6891,
+        -6894, -6891, -6892, -6891, -6888, -6886, -6890, -6889, -6884, -6882,
+        -6884, -6883, -6883, -6885, -6892, -6887, -6890, -6885, -6887, -6886,
+        -6885, -6881, -6883, -6878, -6879, -6874, -6877, -6875, -6877, -6875,
+        -6876, -6880, -6880, -6882, -6884, -6882, -6884, -6884, -6883, -6882,
+        -6881, -6882, -6874, -6873, -6869, -6868, -6871, -6872, -6873, -6874,
+        -6875, -6875, -6876, -6876, -6877, -6877, -6878, -6879, -6880, -6881,
+        -6881, -6880, -6880, -6880, -6880, -6880, -6880, -6880, -6880, -6880,
+        -6885, -6885, -6895, -6900, -6900, -6899, -6897, -6895, -6892, -6891,
+        -6896, -6905, -6907, -6910, -6905, -6911, -6906, -6911, -6909, -6911,
+        -6911, -6909, -6910, -6910, -6911, -6912, -6908, -6914, -6911, -6919,
+        -6912, -6917, -6915, -6925, -6922, -6924, -6925, -6927, -6932, -6930,
+        -6927, -6928, -6930, -6924, -6926, -6929, -6929, -6928, -6932, -6930,
+        -6925, -6936, -6941, -6944, -6941, -6944, -6952, -6960, -6956, -6951,
+        -6968, -6969, -6963, -6960, -6963, -6965, -6956, -6959, -6952, -6957,
+        -6959, -6959, -6963, -6960, -6956, -6958, -6948, -6947, -6940, -6949,
+        -6962, -6958, -6953, -6947, -6948, -6966, -6951, -6947, -6945, -6950,
+        -6948, -6951, -6948, -6936, -6920, -6919, -6909, -6905, -6912, -6906,
+        -6908, -6909, -6912, -6902, -6899, -6897, -6890, -6889, -6881, -6876,
+        -6874, -6874, -6878, -6877, -6870, -6867, -6872, -6874, -6870, -6865,
+        -6869, -6857, -6845, -6843, -6846, -6845, -6824, -6823, -6821, -6818,
+        -6811, -6808, -6805, -6802, -6796, -6789, -6783, -6784, -6783, -6784,
+        -6783, -6784, -6783, -6784, -6781, -6774, -6768, -6760, -6753, -6748,
+        -6746, -6735, -6725, -6715, -6713, -6707, -6697, -6690, -6688, -6682,
+        -6672, -6661, -6650, -6645, -6644, -6644, -6646, -6649, -6643, -6639,
+        -6632, -6628, -6623, -6616, -6611, -6609, -6602, -6595, -6593, -6584,
+        -6573, -6573, -6568, -6564, -6558, -6559, -6559, -6550, -6550, -6550,
+        -6551, -6548, -6544, -6539, -6534, -6527, -6523, -6514, -6511, -6507,
+        -6503, -6504, -6505, -6500, -6500, -6502, -6500, -6497, -6493, -6488,
+        -6488, -6489, -6494, -6489, -6481, -6481, -6478, -6479, -6477, -6479,
+        -6474, -6475, -6474, -6473, -6475, -6469, -6469, -6468, -6471, -6465,
+        -6459, -6458, -6456, -6457, -6457, -6455, -6447, -6443, -6446, -6449,
+        -6445, -6439, -6437, -6439, -6437, -6437, -6433, -6434, -6434, -6432,
+        -6431, -6423, -6413, -6409, -6401, -6396, -6374, -6370, -6362, -6360,
+        -6344, -6340, -6326, -6320, -6306, -6301, -6285, -6269, -6255, -6246,
+        -6238, -6222, -6211, -6201, -6181, -6161, -6141, -6123, -6108, -6092,
+        -6057, -6035, -6018, -5985, -5970, -5921, -5904, -5848, -5809, -5781,
+        -5753, -5725, -5689, -5646, -5620, -5594, -5565, -5540
     };
 
-    static const float robinson_dadson_curve_20_phons[1468] =
+    static const int16_t robinson_dadson_curve_20_phons[1468] =
     {
-        -34.00, -33.99, -34.00, -34.05, -34.10, -34.15, -34.24, -34.30, -34.36, -34.40,
-        -34.48, -34.51, -34.55, -34.60, -34.61, -34.69, -34.80, -34.85, -34.89, -34.91,
-        -35.01, -35.04, -35.09, -35.16, -35.21, -35.22, -35.25, -35.25, -35.19, -35.28,
-        -35.33, -35.42, -35.54, -35.72, -35.83, -35.85, -35.88, -36.01, -36.12, -36.14,
-        -36.13, -36.16, -36.26, -36.24, -36.22, -36.19, -36.26, -36.40, -36.39, -36.37,
-        -36.43, -36.45, -36.53, -36.56, -36.59, -36.58, -36.64, -36.72, -36.76, -36.77,
-        -36.78, -36.80, -36.86, -36.89, -36.89, -36.98, -37.02, -37.12, -37.12, -37.33,
-        -37.32, -37.35, -37.40, -37.52, -37.55, -37.49, -37.49, -37.50, -37.49, -37.59,
-        -37.53, -37.64, -37.73, -37.90, -37.86, -37.79, -37.90, -37.90, -37.89, -37.99,
-        -38.01, -38.09, -38.16, -38.27, -38.28, -38.32, -38.41, -38.41, -38.44, -38.46,
-        -38.51, -38.53, -38.55, -38.62, -38.68, -38.74, -38.78, -38.78, -38.80, -38.82,
-        -38.89, -38.98, -39.04, -39.04, -39.07, -39.15, -39.22, -39.23, -39.27, -39.25,
-        -39.29, -39.36, -39.46, -39.46, -39.51, -39.61, -39.76, -39.84, -39.85, -39.88,
-        -39.94, -40.01, -40.07, -40.10, -40.13, -40.20, -40.28, -40.33, -40.39, -40.44,
-        -40.50, -40.60, -40.64, -40.66, -40.73, -40.83, -40.84, -40.83, -40.83, -40.97,
-        -40.96, -40.99, -41.05, -41.15, -41.21, -41.34, -41.38, -41.39, -41.45, -41.53,
-        -41.58, -41.66, -41.75, -41.87, -41.90, -41.96, -42.06, -42.13, -42.18, -42.23,
-        -42.24, -42.29, -42.37, -42.38, -42.42, -42.45, -42.49, -42.50, -42.59, -42.65,
-        -42.72, -42.77, -42.83, -42.90, -42.94, -42.97, -43.02, -43.13, -43.22, -43.27,
-        -43.21, -43.34, -43.39, -43.35, -43.38, -43.45, -43.59, -43.69, -43.79, -43.88,
-        -43.94, -43.97, -43.98, -44.03, -44.06, -44.17, -44.23, -44.25, -44.36, -44.37,
-        -44.36, -44.33, -44.42, -44.48, -44.52, -44.59, -44.70, -44.78, -44.82, -44.87,
-        -44.93, -45.05, -45.15, -45.19, -45.25, -45.25, -45.34, -45.35, -45.48, -45.51,
-        -45.54, -45.55, -45.63, -45.72, -45.73, -45.78, -45.78, -45.90, -45.94, -46.02,
-        -46.03, -46.11, -46.15, -46.31, -46.38, -46.36, -46.41, -46.50, -46.43, -46.53,
-        -46.54, -46.58, -46.67, -46.69, -46.74, -46.76, -46.82, -46.89, -46.88, -46.89,
-        -46.86, -46.89, -46.89, -47.05, -47.08, -47.18, -47.21, -47.37, -47.41, -47.50,
-        -47.51, -47.62, -47.64, -47.65, -47.74, -47.77, -47.83, -47.85, -47.95, -48.00,
-        -47.98, -48.00, -48.04, -48.16, -48.13, -48.19, -48.22, -48.36, -48.39, -48.42,
-        -48.49, -48.56, -48.57, -48.62, -48.65, -48.62, -48.65, -48.65, -48.67, -48.71,
-        -48.76, -48.82, -48.87, -48.91, -49.00, -49.11, -49.11, -49.20, -49.19, -49.13,
-        -49.18, -49.32, -49.41, -49.38, -49.40, -49.50, -49.54, -49.48, -49.44, -49.45,
-        -49.50, -49.53, -49.55, -49.65, -49.65, -49.69, -49.79, -49.79, -49.83, -49.83,
-        -49.83, -49.88, -49.92, -49.95, -49.98, -49.98, -50.09, -50.12, -50.22, -50.22,
-        -50.31, -50.31, -50.43, -50.40, -50.50, -50.55, -50.58, -50.65, -50.67, -50.67,
-        -50.69, -50.69, -50.68, -50.68, -50.74, -50.80, -50.83, -50.84, -50.92, -50.89,
-        -50.92, -50.88, -50.92, -50.91, -50.95, -51.00, -51.04, -51.08, -51.10, -51.18,
-        -51.23, -51.24, -51.26, -51.36, -51.38, -51.38, -51.34, -51.44, -51.53, -51.58,
-        -51.60, -51.63, -51.64, -51.69, -51.75, -51.79, -51.83, -51.84, -51.88, -51.86,
-        -51.91, -51.94, -51.95, -52.00, -52.07, -52.15, -52.13, -52.20, -52.20, -52.22,
-        -52.17, -52.21, -52.24, -52.31, -52.28, -52.25, -52.25, -52.33, -52.29, -52.37,
-        -52.48, -52.47, -52.54, -52.67, -52.66, -52.66, -52.64, -52.62, -52.71, -52.66,
-        -52.71, -52.66, -52.75, -52.67, -52.75, -52.86, -52.91, -52.97, -52.97, -53.06,
-        -53.09, -53.10, -53.08, -53.14, -53.14, -53.07, -53.09, -53.08, -53.08, -53.05,
-        -53.10, -53.18, -53.24, -53.24, -53.33, -53.38, -53.44, -53.49, -53.47, -53.53,
-        -53.52, -53.53, -53.52, -53.52, -53.54, -53.53, -53.60, -53.58, -53.64, -53.62,
-        -53.68, -53.64, -53.72, -53.77, -53.86, -53.87, -53.91, -53.90, -53.96, -53.90,
-        -53.91, -53.95, -54.01, -54.05, -54.06, -54.06, -54.11, -54.17, -54.22, -54.30,
-        -54.31, -54.27, -54.30, -54.25, -54.29, -54.28, -54.29, -54.25, -54.26, -54.25,
-        -54.31, -54.36, -54.39, -54.39, -54.46, -54.49, -54.47, -54.51, -54.52, -54.53,
-        -54.54, -54.61, -54.64, -54.70, -54.76, -54.81, -54.91, -54.93, -54.98, -54.99,
-        -55.02, -55.04, -55.06, -55.04, -55.07, -55.07, -55.11, -55.09, -55.16, -55.17,
-        -55.22, -55.20, -55.25, -55.21, -55.29, -55.25, -55.24, -55.28, -55.28, -55.32,
-        -55.23, -55.23, -55.28, -55.32, -55.33, -55.36, -55.43, -55.44, -55.52, -55.43,
-        -55.44, -55.45, -55.44, -55.51, -55.53, -55.56, -55.63, -55.62, -55.61, -55.62,
-        -55.61, -55.67, -55.76, -55.76, -55.82, -55.82, -55.81, -55.84, -55.93, -55.98,
-        -56.02, -56.03, -56.07, -56.02, -55.98, -55.95, -55.97, -56.02, -56.03, -56.02,
-        -56.00, -56.05, -56.03, -56.05, -56.09, -56.08, -56.14, -56.14, -56.23, -56.23,
-        -56.28, -56.35, -56.40, -56.44, -56.47, -56.54, -56.55, -56.58, -56.55, -56.64,
-        -56.64, -56.72, -56.73, -56.73, -56.79, -56.83, -56.83, -56.83, -56.80, -56.81,
-        -56.87, -56.92, -56.87, -56.83, -56.86, -56.91, -56.99, -57.03, -57.08, -57.14,
-        -57.15, -57.17, -57.08, -57.02, -57.07, -57.16, -57.18, -57.23, -57.27, -57.32,
-        -57.32, -57.36, -57.42, -57.45, -57.45, -57.48, -57.53, -57.55, -57.55, -57.60,
-        -57.60, -57.60, -57.55, -57.53, -57.54, -57.57, -57.56, -57.61, -57.63, -57.71,
-        -57.76, -57.76, -57.76, -57.76, -57.76, -57.81, -57.90, -57.95, -58.01, -58.06,
-        -58.06, -58.12, -58.12, -58.12, -58.12, -58.15, -58.19, -58.20, -58.25, -58.30,
-        -58.30, -58.30, -58.30, -58.29, -58.30, -58.30, -58.30, -58.30, -58.30, -58.32,
-        -58.33, -58.33, -58.42, -58.42, -58.49, -58.51, -58.62, -58.66, -58.80, -58.81,
-        -58.81, -58.81, -58.81, -58.81, -58.81, -58.81, -58.81, -58.89, -58.94, -59.00,
-        -59.05, -59.07, -59.08, -59.08, -59.10, -59.11, -59.13, -59.15, -59.19, -59.24,
-        -59.26, -59.27, -59.27, -59.27, -59.27, -59.28, -59.28, -59.32, -59.33, -59.38,
-        -59.46, -59.50, -59.56, -59.55, -59.55, -59.55, -59.62, -59.64, -59.68, -59.73,
-        -59.77, -59.82, -59.81, -59.81, -59.86, -59.90, -59.90, -59.90, -59.90, -59.89,
-        -59.89, -59.89, -59.89, -59.88, -59.88, -59.94, -60.03, -60.09, -60.09, -60.09,
-        -60.23, -60.31, -60.43, -60.47, -60.46, -60.46, -60.46, -60.44, -60.43, -60.43,
-        -60.43, -60.48, -60.54, -60.61, -60.66, -60.66, -60.65, -60.64, -60.64, -60.64,
-        -60.69, -60.73, -60.69, -60.74, -60.78, -60.80, -60.83, -60.82, -60.86, -60.87,
-        -60.90, -60.91, -60.96, -60.96, -61.00, -61.05, -61.06, -61.10, -61.10, -61.15,
-        -61.20, -61.20, -61.25, -61.29, -61.29, -61.29, -61.28, -61.28, -61.27, -61.27,
-        -61.34, -61.41, -61.46, -61.46, -61.52, -61.59, -61.64, -61.69, -61.78, -61.78,
-        -61.83, -61.88, -61.92, -61.92, -61.96, -61.96, -62.01, -62.00, -61.99, -62.01,
-        -62.01, -62.04, -62.00, -62.03, -62.00, -62.04, -62.00, -62.14, -62.10, -62.18,
-        -62.23, -62.20, -62.19, -62.18, -62.23, -62.22, -62.30, -62.32, -62.37, -62.42,
-        -62.44, -62.47, -62.51, -62.52, -62.56, -62.60, -62.61, -62.68, -62.68, -62.70,
-        -62.67, -62.65, -62.57, -62.57, -62.62, -62.61, -62.66, -62.66, -62.70, -62.74,
-        -62.76, -62.75, -62.71, -62.76, -62.80, -62.75, -62.85, -62.84, -62.85, -62.84,
-        -62.89, -62.93, -62.98, -62.98, -62.98, -62.97, -63.02, -63.11, -63.11, -63.07,
-        -63.12, -63.11, -63.07, -63.11, -63.13, -63.21, -63.19, -63.20, -63.28, -63.30,
-        -63.30, -63.30, -63.30, -63.30, -63.29, -63.29, -63.29, -63.29, -63.30, -63.36,
-        -63.36, -63.33, -63.32, -63.32, -63.32, -63.34, -63.34, -63.29, -63.31, -63.30,
-        -63.30, -63.30, -63.30, -63.31, -63.32, -63.32, -63.32, -63.32, -63.32, -63.32,
-        -63.31, -63.31, -63.21, -63.21, -63.11, -63.11, -63.11, -63.11, -63.11, -63.11,
-        -63.11, -63.12, -63.16, -63.16, -63.15, -63.16, -63.12, -63.12, -63.12, -63.12,
-        -63.12, -63.12, -63.12, -63.12, -63.12, -63.07, -63.07, -62.97, -62.91, -62.91,
-        -62.91, -62.92, -62.92, -62.96, -62.98, -62.95, -62.89, -62.85, -62.87, -62.90,
-        -62.96, -62.99, -62.96, -62.95, -62.91, -62.91, -62.91, -62.93, -62.90, -62.86,
-        -62.83, -62.80, -62.76, -62.79, -62.76, -62.75, -62.76, -62.76, -62.81, -62.76,
-        -62.67, -62.66, -62.62, -62.62, -62.53, -62.52, -62.43, -62.43, -62.43, -62.46,
-        -62.43, -62.43, -62.39, -62.34, -62.28, -62.28, -62.27, -62.24, -62.24, -62.14,
-        -62.10, -62.08, -62.11, -62.12, -62.10, -62.03, -62.02, -62.10, -62.09, -62.05,
-        -62.01, -62.06, -61.97, -61.96, -61.88, -61.90, -61.83, -61.86, -61.88, -61.91,
-        -61.91, -61.87, -61.89, -61.84, -61.85, -61.83, -61.82, -61.77, -61.81, -61.75,
-        -61.76, -61.71, -61.73, -61.72, -61.72, -61.68, -61.70, -61.68, -61.66, -61.76,
-        -61.68, -61.73, -61.64, -61.59, -61.62, -61.55, -61.59, -61.56, -61.54, -61.53,
-        -61.47, -61.43, -61.40, -61.32, -61.32, -61.23, -61.18, -61.18, -61.24, -61.14,
-        -61.17, -61.15, -61.18, -61.20, -61.15, -61.24, -61.24, -61.15, -61.13, -61.10,
-        -61.06, -61.04, -61.06, -61.05, -61.05, -60.97, -61.00, -60.92, -60.92, -60.86,
-        -60.93, -60.84, -60.87, -60.83, -60.74, -60.81, -60.73, -60.76, -60.73, -60.73,
-        -60.73, -60.73, -60.73, -60.77, -60.71, -60.77, -60.77, -60.72, -60.63, -60.58,
-        -60.57, -60.48, -60.48, -60.48, -60.47, -60.46, -60.47, -60.57, -60.59, -60.62,
-        -60.66, -60.62, -60.65, -60.62, -60.57, -60.52, -60.54, -60.52, -60.48, -60.44,
-        -60.44, -60.43, -60.46, -60.53, -60.63, -60.58, -60.61, -60.56, -60.57, -60.57,
-        -60.53, -60.48, -60.50, -60.49, -60.50, -60.45, -60.49, -60.46, -60.48, -60.45,
-        -60.44, -60.48, -60.47, -60.50, -60.50, -60.50, -60.50, -60.52, -60.52, -60.53,
-        -60.53, -60.56, -60.49, -60.51, -60.49, -60.49, -60.53, -60.54, -60.54, -60.54,
-        -60.54, -60.54, -60.54, -60.54, -60.54, -60.54, -60.54, -60.54, -60.54, -60.54,
-        -60.54, -60.54, -60.54, -60.54, -60.54, -60.54, -60.54, -60.54, -60.54, -60.54,
-        -60.59, -60.59, -60.69, -60.74, -60.74, -60.74, -60.74, -60.74, -60.74, -60.74,
-        -60.79, -60.88, -60.88, -60.90, -60.85, -60.94, -60.89, -60.94, -60.91, -60.96,
-        -60.96, -60.92, -60.93, -60.93, -60.93, -60.95, -60.91, -60.97, -60.91, -60.99,
-        -60.92, -60.99, -60.97, -61.08, -61.06, -61.10, -61.11, -61.11, -61.15, -61.13,
-        -61.12, -61.14, -61.19, -61.16, -61.19, -61.23, -61.20, -61.20, -61.24, -61.24,
-        -61.20, -61.34, -61.39, -61.43, -61.35, -61.39, -61.47, -61.58, -61.53, -61.48,
-        -61.64, -61.60, -61.56, -61.56, -61.56, -61.59, -61.46, -61.46, -61.41, -61.45,
-        -61.51, -61.56, -61.63, -61.59, -61.57, -61.61, -61.53, -61.54, -61.43, -61.52,
-        -61.63, -61.59, -61.52, -61.47, -61.44, -61.64, -61.55, -61.54, -61.54, -61.54,
-        -61.55, -61.59, -61.56, -61.45, -61.31, -61.32, -61.26, -61.27, -61.36, -61.31,
-        -61.35, -61.41, -61.50, -61.42, -61.43, -61.42, -61.33, -61.30, -61.26, -61.23,
-        -61.22, -61.20, -61.24, -61.20, -61.10, -61.09, -61.11, -61.12, -61.09, -61.04,
-        -61.09, -60.96, -60.96, -60.94, -60.96, -60.95, -60.81, -60.86, -60.87, -60.78,
-        -60.70, -60.68, -60.67, -60.64, -60.56, -60.54, -60.47, -60.47, -60.53, -60.59,
-        -60.63, -60.64, -60.63, -60.63, -60.64, -60.58, -60.53, -60.46, -60.39, -60.33,
-        -60.32, -60.23, -60.15, -60.05, -60.05, -60.00, -59.90, -59.85, -59.87, -59.80,
-        -59.71, -59.62, -59.53, -59.49, -59.49, -59.49, -59.50, -59.54, -59.51, -59.47,
-        -59.40, -59.40, -59.35, -59.26, -59.21, -59.21, -59.16, -59.11, -59.11, -59.03,
-        -58.94, -58.94, -58.89, -58.89, -58.88, -58.89, -58.88, -58.79, -58.78, -58.78,
-        -58.79, -58.78, -58.76, -58.71, -58.66, -58.58, -58.56, -58.47, -58.47, -58.42,
-        -58.42, -58.43, -58.47, -58.43, -58.45, -58.48, -58.50, -58.46, -58.44, -58.41,
-        -58.41, -58.44, -58.53, -58.52, -58.44, -58.43, -58.40, -58.47, -58.47, -58.48,
-        -58.42, -58.45, -58.46, -58.41, -58.45, -58.41, -58.42, -58.39, -58.41, -58.40,
-        -58.33, -58.33, -58.31, -58.35, -58.36, -58.36, -58.25, -58.22, -58.25, -58.27,
-        -58.27, -58.21, -58.22, -58.27, -58.27, -58.30, -58.26, -58.32, -58.38, -58.36,
-        -58.36, -58.31, -58.24, -58.25, -58.17, -58.12, -57.92, -57.92, -57.84, -57.84,
-        -57.71, -57.67, -57.58, -57.53, -57.40, -57.35, -57.17, -57.06, -56.93, -56.89,
-        -56.85, -56.67, -56.62, -56.50, -56.31, -56.17, -55.99, -55.87, -55.80, -55.65,
-        -55.36, -55.17, -55.03, -54.79, -54.62, -54.17, -53.94, -53.53, -53.04, -52.83,
-        -52.53, -52.44, -52.17, -51.69, -51.43, -51.16, -50.93, -50.81
+        -3400, -3399, -3400, -3405, -3410, -3415, -3424, -3430, -3436, -3440,
+        -3448, -3451, -3455, -3460, -3461, -3469, -3480, -3485, -3489, -3491,
+        -3501, -3504, -3509, -3516, -3521, -3522, -3525, -3525, -3519, -3528,
+        -3533, -3542, -3554, -3572, -3583, -3585, -3588, -3601, -3612, -3614,
+        -3613, -3616, -3626, -3624, -3622, -3619, -3626, -3640, -3639, -3637,
+        -3643, -3645, -3653, -3656, -3659, -3658, -3664, -3672, -3676, -3677,
+        -3678, -3680, -3686, -3689, -3689, -3698, -3702, -3712, -3712, -3733,
+        -3732, -3735, -3740, -3752, -3755, -3749, -3749, -3750, -3749, -3759,
+        -3753, -3764, -3773, -3790, -3786, -3779, -3790, -3790, -3789, -3799,
+        -3801, -3809, -3816, -3827, -3828, -3832, -3841, -3841, -3844, -3846,
+        -3851, -3853, -3855, -3862, -3868, -3874, -3878, -3878, -3880, -3882,
+        -3889, -3898, -3904, -3904, -3907, -3915, -3922, -3923, -3927, -3925,
+        -3929, -3936, -3946, -3946, -3951, -3961, -3976, -3984, -3985, -3988,
+        -3994, -4001, -4007, -4010, -4013, -4020, -4028, -4033, -4039, -4044,
+        -4050, -4060, -4064, -4066, -4073, -4083, -4084, -4083, -4083, -4097,
+        -4096, -4099, -4105, -4115, -4121, -4134, -4138, -4139, -4145, -4153,
+        -4158, -4166, -4175, -4187, -4190, -4196, -4206, -4213, -4218, -4223,
+        -4224, -4229, -4237, -4238, -4242, -4245, -4249, -4250, -4259, -4265,
+        -4272, -4277, -4283, -4290, -4294, -4297, -4302, -4313, -4322, -4327,
+        -4321, -4334, -4339, -4335, -4338, -4345, -4359, -4369, -4379, -4388,
+        -4394, -4397, -4398, -4403, -4406, -4417, -4423, -4425, -4436, -4437,
+        -4436, -4433, -4442, -4448, -4452, -4459, -4470, -4478, -4482, -4487,
+        -4493, -4505, -4515, -4519, -4525, -4525, -4534, -4535, -4548, -4551,
+        -4554, -4555, -4563, -4572, -4573, -4578, -4578, -4590, -4594, -4602,
+        -4603, -4611, -4615, -4631, -4638, -4636, -4641, -4650, -4643, -4653,
+        -4654, -4658, -4667, -4669, -4674, -4676, -4682, -4689, -4688, -4689,
+        -4686, -4689, -4689, -4705, -4708, -4718, -4721, -4737, -4741, -4750,
+        -4751, -4762, -4764, -4765, -4774, -4777, -4783, -4785, -4795, -4800,
+        -4798, -4800, -4804, -4816, -4813, -4819, -4822, -4836, -4839, -4842,
+        -4849, -4856, -4857, -4862, -4865, -4862, -4865, -4865, -4867, -4871,
+        -4876, -4882, -4887, -4891, -4900, -4911, -4911, -4920, -4919, -4913,
+        -4918, -4932, -4941, -4938, -4940, -4950, -4954, -4948, -4944, -4945,
+        -4950, -4953, -4955, -4965, -4965, -4969, -4979, -4979, -4983, -4983,
+        -4983, -4988, -4992, -4995, -4998, -4998, -5009, -5012, -5022, -5022,
+        -5031, -5031, -5043, -5040, -5050, -5055, -5058, -5065, -5067, -5067,
+        -5069, -5069, -5068, -5068, -5074, -5080, -5083, -5084, -5092, -5089,
+        -5092, -5088, -5092, -5091, -5095, -5100, -5104, -5108, -5110, -5118,
+        -5123, -5124, -5126, -5136, -5138, -5138, -5134, -5144, -5153, -5158,
+        -5160, -5163, -5164, -5169, -5175, -5179, -5183, -5184, -5188, -5186,
+        -5191, -5194, -5195, -5200, -5207, -5215, -5213, -5220, -5220, -5222,
+        -5217, -5221, -5224, -5231, -5228, -5225, -5225, -5233, -5229, -5237,
+        -5248, -5247, -5254, -5267, -5266, -5266, -5264, -5262, -5271, -5266,
+        -5271, -5266, -5275, -5267, -5275, -5286, -5291, -5297, -5297, -5306,
+        -5309, -5310, -5308, -5314, -5314, -5307, -5309, -5308, -5308, -5305,
+        -5310, -5318, -5324, -5324, -5333, -5338, -5344, -5349, -5347, -5353,
+        -5352, -5353, -5352, -5352, -5354, -5353, -5360, -5358, -5364, -5362,
+        -5368, -5364, -5372, -5377, -5386, -5387, -5391, -5390, -5396, -5390,
+        -5391, -5395, -5401, -5405, -5406, -5406, -5411, -5417, -5422, -5430,
+        -5431, -5427, -5430, -5425, -5429, -5428, -5429, -5425, -5426, -5425,
+        -5431, -5436, -5439, -5439, -5446, -5449, -5447, -5451, -5452, -5453,
+        -5454, -5461, -5464, -5470, -5476, -5481, -5491, -5493, -5498, -5499,
+        -5502, -5504, -5506, -5504, -5507, -5507, -5511, -5509, -5516, -5517,
+        -5522, -5520, -5525, -5521, -5529, -5525, -5524, -5528, -5528, -5532,
+        -5523, -5523, -5528, -5532, -5533, -5536, -5543, -5544, -5552, -5543,
+        -5544, -5545, -5544, -5551, -5553, -5556, -5563, -5562, -5561, -5562,
+        -5561, -5567, -5576, -5576, -5582, -5582, -5581, -5584, -5593, -5598,
+        -5602, -5603, -5607, -5602, -5598, -5595, -5597, -5602, -5603, -5602,
+        -5600, -5605, -5603, -5605, -5609, -5608, -5614, -5614, -5623, -5623,
+        -5628, -5635, -5640, -5644, -5647, -5654, -5655, -5658, -5655, -5664,
+        -5664, -5672, -5673, -5673, -5679, -5683, -5683, -5683, -5680, -5681,
+        -5687, -5692, -5687, -5683, -5686, -5691, -5699, -5703, -5708, -5714,
+        -5715, -5717, -5708, -5702, -5707, -5716, -5718, -5723, -5727, -5732,
+        -5732, -5736, -5742, -5745, -5745, -5748, -5753, -5755, -5755, -5760,
+        -5760, -5760, -5755, -5753, -5754, -5757, -5756, -5761, -5763, -5771,
+        -5776, -5776, -5776, -5776, -5776, -5781, -5790, -5795, -5801, -5806,
+        -5806, -5812, -5812, -5812, -5812, -5815, -5819, -5820, -5825, -5830,
+        -5830, -5830, -5830, -5829, -5830, -5830, -5830, -5830, -5830, -5832,
+        -5833, -5833, -5842, -5842, -5849, -5851, -5862, -5866, -5880, -5881,
+        -5881, -5881, -5881, -5881, -5881, -5881, -5881, -5889, -5894, -5900,
+        -5905, -5907, -5908, -5908, -5910, -5911, -5913, -5915, -5919, -5924,
+        -5926, -5927, -5927, -5927, -5927, -5928, -5928, -5932, -5933, -5938,
+        -5946, -5950, -5956, -5955, -5955, -5955, -5962, -5964, -5968, -5973,
+        -5977, -5982, -5981, -5981, -5986, -5990, -5990, -5990, -5990, -5989,
+        -5989, -5989, -5989, -5988, -5988, -5994, -6003, -6009, -6009, -6009,
+        -6023, -6031, -6043, -6047, -6046, -6046, -6046, -6044, -6043, -6043,
+        -6043, -6048, -6054, -6061, -6066, -6066, -6065, -6064, -6064, -6064,
+        -6069, -6073, -6069, -6074, -6078, -6080, -6083, -6082, -6086, -6087,
+        -6090, -6091, -6096, -6096, -6100, -6105, -6106, -6110, -6110, -6115,
+        -6120, -6120, -6125, -6129, -6129, -6129, -6128, -6128, -6127, -6127,
+        -6134, -6141, -6146, -6146, -6152, -6159, -6164, -6169, -6178, -6178,
+        -6183, -6188, -6192, -6192, -6196, -6196, -6201, -6200, -6199, -6201,
+        -6201, -6204, -6200, -6203, -6200, -6204, -6200, -6214, -6210, -6218,
+        -6223, -6220, -6219, -6218, -6223, -6222, -6230, -6232, -6237, -6242,
+        -6244, -6247, -6251, -6252, -6256, -6260, -6261, -6268, -6268, -6270,
+        -6267, -6265, -6257, -6257, -6262, -6261, -6266, -6266, -6270, -6274,
+        -6276, -6275, -6271, -6276, -6280, -6275, -6285, -6284, -6285, -6284,
+        -6289, -6293, -6298, -6298, -6298, -6297, -6302, -6311, -6311, -6307,
+        -6312, -6311, -6307, -6311, -6313, -6321, -6319, -6320, -6328, -6330,
+        -6330, -6330, -6330, -6330, -6329, -6329, -6329, -6329, -6330, -6336,
+        -6336, -6333, -6332, -6332, -6332, -6334, -6334, -6329, -6331, -6330,
+        -6330, -6330, -6330, -6331, -6332, -6332, -6332, -6332, -6332, -6332,
+        -6331, -6331, -6321, -6321, -6311, -6311, -6311, -6311, -6311, -6311,
+        -6311, -6312, -6316, -6316, -6315, -6316, -6312, -6312, -6312, -6312,
+        -6312, -6312, -6312, -6312, -6312, -6307, -6307, -6297, -6291, -6291,
+        -6291, -6292, -6292, -6296, -6298, -6295, -6289, -6285, -6287, -6290,
+        -6296, -6299, -6296, -6295, -6291, -6291, -6291, -6293, -6290, -6286,
+        -6283, -6280, -6276, -6279, -6276, -6275, -6276, -6276, -6281, -6276,
+        -6267, -6266, -6262, -6262, -6253, -6252, -6243, -6243, -6243, -6246,
+        -6243, -6243, -6239, -6234, -6228, -6228, -6227, -6224, -6224, -6214,
+        -6210, -6208, -6211, -6212, -6210, -6203, -6202, -6210, -6209, -6205,
+        -6201, -6206, -6197, -6196, -6188, -6190, -6183, -6186, -6188, -6191,
+        -6191, -6187, -6189, -6184, -6185, -6183, -6182, -6177, -6181, -6175,
+        -6176, -6171, -6173, -6172, -6172, -6168, -6170, -6168, -6166, -6176,
+        -6168, -6173, -6164, -6159, -6162, -6155, -6159, -6156, -6154, -6153,
+        -6147, -6143, -6140, -6132, -6132, -6123, -6118, -6118, -6124, -6114,
+        -6117, -6115, -6118, -6120, -6115, -6124, -6124, -6115, -6113, -6110,
+        -6106, -6104, -6106, -6105, -6105, -6097, -6100, -6092, -6092, -6086,
+        -6093, -6084, -6087, -6083, -6074, -6081, -6073, -6076, -6073, -6073,
+        -6073, -6073, -6073, -6077, -6071, -6077, -6077, -6072, -6063, -6058,
+        -6057, -6048, -6048, -6048, -6047, -6046, -6047, -6057, -6059, -6062,
+        -6066, -6062, -6065, -6062, -6057, -6052, -6054, -6052, -6048, -6044,
+        -6044, -6043, -6046, -6053, -6063, -6058, -6061, -6056, -6057, -6057,
+        -6053, -6048, -6050, -6049, -6050, -6045, -6049, -6046, -6048, -6045,
+        -6044, -6048, -6047, -6050, -6050, -6050, -6050, -6052, -6052, -6053,
+        -6053, -6056, -6049, -6051, -6049, -6049, -6053, -6054, -6054, -6054,
+        -6054, -6054, -6054, -6054, -6054, -6054, -6054, -6054, -6054, -6054,
+        -6054, -6054, -6054, -6054, -6054, -6054, -6054, -6054, -6054, -6054,
+        -6059, -6059, -6069, -6074, -6074, -6074, -6074, -6074, -6074, -6074,
+        -6079, -6088, -6088, -6090, -6085, -6094, -6089, -6094, -6091, -6096,
+        -6096, -6092, -6093, -6093, -6093, -6095, -6091, -6097, -6091, -6099,
+        -6092, -6099, -6097, -6108, -6106, -6110, -6111, -6111, -6115, -6113,
+        -6112, -6114, -6119, -6116, -6119, -6123, -6120, -6120, -6124, -6124,
+        -6120, -6134, -6139, -6143, -6135, -6139, -6147, -6158, -6153, -6148,
+        -6164, -6160, -6156, -6156, -6156, -6159, -6146, -6146, -6141, -6145,
+        -6151, -6156, -6163, -6159, -6157, -6161, -6153, -6154, -6143, -6152,
+        -6163, -6159, -6152, -6147, -6144, -6164, -6155, -6154, -6154, -6154,
+        -6155, -6159, -6156, -6145, -6131, -6132, -6126, -6127, -6136, -6131,
+        -6135, -6141, -6150, -6142, -6143, -6142, -6133, -6130, -6126, -6123,
+        -6122, -6120, -6124, -6120, -6110, -6109, -6111, -6112, -6109, -6104,
+        -6109, -6096, -6096, -6094, -6096, -6095, -6081, -6086, -6087, -6078,
+        -6070, -6068, -6067, -6064, -6056, -6054, -6047, -6047, -6053, -6059,
+        -6063, -6064, -6063, -6063, -6064, -6058, -6053, -6046, -6039, -6033,
+        -6032, -6023, -6015, -6005, -6005, -6000, -5990, -5985, -5987, -5980,
+        -5971, -5962, -5953, -5949, -5949, -5949, -5950, -5954, -5951, -5947,
+        -5940, -5940, -5935, -5926, -5921, -5921, -5916, -5911, -5911, -5903,
+        -5894, -5894, -5889, -5889, -5888, -5889, -5888, -5879, -5878, -5878,
+        -5879, -5878, -5876, -5871, -5866, -5858, -5856, -5847, -5847, -5842,
+        -5842, -5843, -5847, -5843, -5845, -5848, -5850, -5846, -5844, -5841,
+        -5841, -5844, -5853, -5852, -5844, -5843, -5840, -5847, -5847, -5848,
+        -5842, -5845, -5846, -5841, -5845, -5841, -5842, -5839, -5841, -5840,
+        -5833, -5833, -5831, -5835, -5836, -5836, -5825, -5822, -5825, -5827,
+        -5827, -5821, -5822, -5827, -5827, -5830, -5826, -5832, -5838, -5836,
+        -5836, -5831, -5824, -5825, -5817, -5812, -5792, -5792, -5784, -5784,
+        -5771, -5767, -5758, -5753, -5740, -5735, -5717, -5706, -5693, -5689,
+        -5685, -5667, -5662, -5650, -5631, -5617, -5599, -5587, -5580, -5565,
+        -5536, -5517, -5503, -5479, -5462, -5417, -5394, -5353, -5304, -5283,
+        -5253, -5244, -5217, -5169, -5143, -5116, -5093, -5081
     };
 
-    static const float robinson_dadson_curve_30_phons[1468] =
+    static const int16_t robinson_dadson_curve_30_phons[1468] =
     {
-        -29.25, -29.22, -29.21, -29.23, -29.23, -29.26, -29.35, -29.41, -29.45, -29.48,
-        -29.56, -29.59, -29.61, -29.70, -29.71, -29.77, -29.85, -29.90, -29.96, -29.96,
-        -30.06, -30.06, -30.11, -30.21, -30.24, -30.25, -30.27, -30.31, -30.26, -30.31,
-        -30.39, -30.47, -30.58, -30.74, -30.83, -30.82, -30.83, -30.91, -31.02, -31.04,
-        -31.00, -30.99, -31.09, -31.07, -31.04, -31.03, -31.10, -31.18, -31.11, -31.13,
-        -31.20, -31.28, -31.37, -31.41, -31.41, -31.40, -31.46, -31.54, -31.57, -31.58,
-        -31.58, -31.60, -31.67, -31.71, -31.69, -31.78, -31.80, -31.84, -31.84, -32.00,
-        -32.05, -32.06, -32.04, -32.10, -32.13, -32.08, -32.09, -32.10, -32.14, -32.21,
-        -32.19, -32.30, -32.38, -32.48, -32.47, -32.39, -32.46, -32.46, -32.44, -32.59,
-        -32.59, -32.66, -32.68, -32.79, -32.80, -32.86, -32.92, -32.93, -32.94, -32.99,
-        -33.01, -33.06, -33.10, -33.17, -33.19, -33.24, -33.25, -33.23, -33.23, -33.24,
-        -33.32, -33.37, -33.42, -33.47, -33.50, -33.57, -33.60, -33.58, -33.67, -33.64,
-        -33.66, -33.71, -33.82, -33.81, -33.82, -33.88, -34.02, -34.08, -34.13, -34.16,
-        -34.20, -34.25, -34.30, -34.31, -34.35, -34.39, -34.46, -34.50, -34.59, -34.62,
-        -34.65, -34.76, -34.80, -34.83, -34.89, -35.00, -34.99, -34.98, -34.98, -35.10,
-        -35.09, -35.08, -35.12, -35.21, -35.25, -35.36, -35.40, -35.39, -35.42, -35.48,
-        -35.52, -35.61, -35.68, -35.76, -35.80, -35.84, -35.90, -35.97, -36.01, -36.08,
-        -36.10, -36.14, -36.19, -36.21, -36.24, -36.27, -36.33, -36.38, -36.46, -36.50,
-        -36.50, -36.53, -36.56, -36.62, -36.64, -36.69, -36.74, -36.82, -36.89, -36.93,
-        -36.90, -37.01, -37.05, -36.99, -37.01, -37.09, -37.19, -37.31, -37.40, -37.48,
-        -37.51, -37.56, -37.57, -37.62, -37.64, -37.72, -37.80, -37.83, -37.91, -37.93,
-        -37.92, -37.88, -37.95, -38.03, -38.05, -38.11, -38.21, -38.26, -38.30, -38.35,
-        -38.39, -38.47, -38.52, -38.56, -38.61, -38.62, -38.73, -38.74, -38.85, -38.88,
-        -38.91, -38.91, -38.96, -39.04, -39.05, -39.13, -39.13, -39.24, -39.26, -39.32,
-        -39.30, -39.35, -39.38, -39.48, -39.55, -39.55, -39.60, -39.66, -39.62, -39.69,
-        -39.71, -39.75, -39.81, -39.81, -39.88, -39.89, -39.91, -39.96, -39.98, -39.99,
-        -39.95, -40.04, -40.03, -40.16, -40.18, -40.27, -40.29, -40.38, -40.41, -40.49,
-        -40.52, -40.60, -40.63, -40.60, -40.66, -40.71, -40.76, -40.76, -40.84, -40.87,
-        -40.90, -40.92, -40.94, -41.02, -41.01, -41.07, -41.11, -41.21, -41.23, -41.23,
-        -41.29, -41.34, -41.37, -41.42, -41.45, -41.43, -41.47, -41.47, -41.49, -41.53,
-        -41.55, -41.61, -41.65, -41.71, -41.80, -41.91, -41.91, -42.00, -41.97, -41.89,
-        -41.94, -42.06, -42.11, -42.09, -42.12, -42.19, -42.21, -42.13, -42.11, -42.13,
-        -42.22, -42.25, -42.27, -42.37, -42.37, -42.38, -42.47, -42.46, -42.48, -42.48,
-        -42.48, -42.53, -42.55, -42.55, -42.59, -42.61, -42.70, -42.72, -42.82, -42.81,
-        -42.89, -42.89, -43.02, -42.99, -43.07, -43.11, -43.12, -43.14, -43.16, -43.16,
-        -43.19, -43.22, -43.19, -43.15, -43.19, -43.24, -43.26, -43.26, -43.37, -43.35,
-        -43.41, -43.39, -43.43, -43.44, -43.46, -43.49, -43.53, -43.56, -43.54, -43.58,
-        -43.61, -43.60, -43.63, -43.70, -43.72, -43.72, -43.72, -43.84, -43.93, -43.96,
-        -43.99, -44.01, -44.02, -44.05, -44.08, -44.13, -44.17, -44.17, -44.22, -44.21,
-        -44.25, -44.26, -44.30, -44.32, -44.40, -44.46, -44.45, -44.49, -44.49, -44.54,
-        -44.53, -44.54, -44.58, -44.64, -44.62, -44.59, -44.59, -44.64, -44.62, -44.69,
-        -44.76, -44.76, -44.85, -44.91, -44.89, -44.88, -44.87, -44.84, -44.91, -44.86,
-        -44.92, -44.88, -44.97, -44.91, -44.98, -45.05, -45.09, -45.13, -45.15, -45.22,
-        -45.22, -45.24, -45.22, -45.27, -45.31, -45.26, -45.28, -45.27, -45.28, -45.24,
-        -45.28, -45.35, -45.41, -45.42, -45.47, -45.49, -45.52, -45.57, -45.52, -45.58,
-        -45.57, -45.60, -45.57, -45.63, -45.68, -45.68, -45.71, -45.71, -45.79, -45.74,
-        -45.81, -45.75, -45.82, -45.85, -45.92, -45.89, -45.93, -45.88, -45.93, -45.90,
-        -45.88, -45.95, -46.01, -46.07, -46.08, -46.10, -46.15, -46.23, -46.28, -46.35,
-        -46.37, -46.33, -46.34, -46.27, -46.27, -46.24, -46.25, -46.21, -46.25, -46.28,
-        -46.34, -46.40, -46.42, -46.43, -46.49, -46.53, -46.49, -46.49, -46.52, -46.51,
-        -46.52, -46.58, -46.58, -46.63, -46.69, -46.74, -46.80, -46.85, -46.87, -46.88,
-        -46.91, -46.94, -46.94, -46.98, -47.00, -46.98, -47.00, -47.02, -47.05, -47.05,
-        -47.08, -47.06, -47.07, -47.05, -47.11, -47.08, -47.06, -47.09, -47.08, -47.12,
-        -47.05, -47.07, -47.12, -47.17, -47.17, -47.21, -47.24, -47.30, -47.34, -47.29,
-        -47.30, -47.32, -47.32, -47.36, -47.37, -47.43, -47.47, -47.45, -47.43, -47.44,
-        -47.44, -47.49, -47.55, -47.58, -47.61, -47.62, -47.58, -47.61, -47.66, -47.70,
-        -47.75, -47.76, -47.79, -47.77, -47.71, -47.69, -47.75, -47.80, -47.82, -47.82,
-        -47.79, -47.82, -47.80, -47.80, -47.84, -47.84, -47.89, -47.92, -47.99, -48.01,
-        -48.03, -48.06, -48.08, -48.10, -48.13, -48.23, -48.24, -48.23, -48.19, -48.25,
-        -48.28, -48.34, -48.39, -48.42, -48.47, -48.51, -48.51, -48.51, -48.48, -48.46,
-        -48.49, -48.54, -48.53, -48.51, -48.53, -48.56, -48.60, -48.63, -48.67, -48.71,
-        -48.72, -48.74, -48.65, -48.61, -48.65, -48.71, -48.74, -48.77, -48.81, -48.84,
-        -48.85, -48.88, -48.94, -48.95, -48.95, -48.97, -49.04, -49.05, -49.06, -49.09,
-        -49.06, -49.05, -49.01, -49.01, -49.02, -49.05, -49.07, -49.08, -49.09, -49.15,
-        -49.20, -49.22, -49.24, -49.24, -49.24, -49.27, -49.33, -49.36, -49.38, -49.41,
-        -49.41, -49.46, -49.48, -49.50, -49.50, -49.54, -49.56, -49.56, -49.59, -49.62,
-        -49.62, -49.62, -49.61, -49.61, -49.63, -49.64, -49.64, -49.68, -49.68, -49.70,
-        -49.70, -49.70, -49.74, -49.72, -49.76, -49.77, -49.87, -49.90, -50.02, -50.03,
-        -50.04, -50.04, -50.04, -50.04, -50.05, -50.05, -50.05, -50.11, -50.16, -50.21,
-        -50.26, -50.26, -50.26, -50.27, -50.28, -50.28, -50.29, -50.30, -50.33, -50.38,
-        -50.40, -50.41, -50.41, -50.42, -50.42, -50.42, -50.43, -50.46, -50.47, -50.50,
-        -50.55, -50.58, -50.61, -50.61, -50.61, -50.61, -50.64, -50.65, -50.67, -50.69,
-        -50.74, -50.78, -50.78, -50.77, -50.83, -50.87, -50.87, -50.86, -50.86, -50.86,
-        -50.86, -50.85, -50.85, -50.85, -50.85, -50.90, -51.00, -51.05, -51.05, -51.06,
-        -51.17, -51.22, -51.33, -51.34, -51.32, -51.32, -51.31, -51.30, -51.28, -51.27,
-        -51.26, -51.31, -51.35, -51.42, -51.46, -51.46, -51.45, -51.45, -51.44, -51.44,
-        -51.49, -51.54, -51.50, -51.53, -51.57, -51.56, -51.56, -51.56, -51.57, -51.59,
-        -51.62, -51.63, -51.68, -51.68, -51.71, -51.74, -51.76, -51.75, -51.75, -51.78,
-        -51.83, -51.82, -51.88, -51.92, -51.92, -51.91, -51.87, -51.86, -51.84, -51.81,
-        -51.87, -51.95, -51.99, -51.98, -52.02, -52.08, -52.11, -52.13, -52.23, -52.23,
-        -52.28, -52.32, -52.34, -52.34, -52.38, -52.37, -52.40, -52.39, -52.38, -52.41,
-        -52.43, -52.47, -52.45, -52.47, -52.44, -52.47, -52.43, -52.57, -52.53, -52.58,
-        -52.63, -52.58, -52.57, -52.55, -52.56, -52.53, -52.56, -52.58, -52.59, -52.62,
-        -52.64, -52.67, -52.71, -52.72, -52.76, -52.80, -52.81, -52.88, -52.88, -52.89,
-        -52.87, -52.82, -52.75, -52.77, -52.81, -52.81, -52.85, -52.81, -52.83, -52.85,
-        -52.87, -52.84, -52.82, -52.82, -52.86, -52.84, -52.89, -52.88, -52.91, -52.88,
-        -52.93, -52.97, -53.02, -52.99, -52.99, -52.94, -52.99, -53.04, -53.05, -53.01,
-        -53.02, -53.02, -52.99, -53.02, -53.04, -53.12, -53.09, -53.09, -53.16, -53.17,
-        -53.17, -53.17, -53.17, -53.16, -53.15, -53.18, -53.17, -53.18, -53.18, -53.23,
-        -53.22, -53.20, -53.19, -53.17, -53.15, -53.14, -53.11, -53.08, -53.08, -53.07,
-        -53.08, -53.08, -53.08, -53.08, -53.12, -53.14, -53.14, -53.16, -53.18, -53.18,
-        -53.18, -53.17, -53.07, -53.07, -52.97, -52.97, -52.97, -52.97, -52.97, -52.97,
-        -52.98, -52.98, -53.00, -52.97, -52.95, -52.94, -52.89, -52.89, -52.87, -52.87,
-        -52.88, -52.90, -52.90, -52.90, -52.91, -52.86, -52.86, -52.78, -52.74, -52.74,
-        -52.75, -52.75, -52.76, -52.79, -52.82, -52.78, -52.71, -52.66, -52.66, -52.68,
-        -52.74, -52.79, -52.75, -52.77, -52.72, -52.71, -52.70, -52.70, -52.67, -52.63,
-        -52.60, -52.57, -52.55, -52.56, -52.51, -52.54, -52.55, -52.53, -52.58, -52.53,
-        -52.44, -52.43, -52.39, -52.39, -52.30, -52.30, -52.21, -52.22, -52.25, -52.28,
-        -52.22, -52.22, -52.19, -52.15, -52.11, -52.09, -52.10, -52.07, -52.05, -51.98,
-        -51.94, -51.90, -51.92, -51.91, -51.87, -51.82, -51.81, -51.85, -51.84, -51.80,
-        -51.78, -51.81, -51.73, -51.75, -51.68, -51.70, -51.64, -51.67, -51.69, -51.70,
-        -51.71, -51.68, -51.70, -51.63, -51.63, -51.60, -51.61, -51.55, -51.60, -51.56,
-        -51.56, -51.51, -51.52, -51.49, -51.49, -51.47, -51.45, -51.44, -51.45, -51.51,
-        -51.43, -51.48, -51.43, -51.41, -51.44, -51.40, -51.44, -51.44, -51.42, -51.39,
-        -51.31, -51.24, -51.24, -51.18, -51.16, -51.07, -51.04, -51.01, -51.08, -51.01,
-        -51.01, -51.01, -51.02, -51.06, -51.01, -51.07, -51.08, -51.02, -50.99, -50.98,
-        -50.92, -50.93, -50.90, -50.91, -50.89, -50.85, -50.87, -50.82, -50.82, -50.79,
-        -50.84, -50.77, -50.82, -50.78, -50.69, -50.73, -50.70, -50.70, -50.66, -50.64,
-        -50.63, -50.61, -50.61, -50.68, -50.64, -50.68, -50.70, -50.65, -50.56, -50.50,
-        -50.50, -50.45, -50.44, -50.44, -50.40, -50.39, -50.38, -50.48, -50.52, -50.52,
-        -50.57, -50.53, -50.54, -50.51, -50.47, -50.44, -50.47, -50.45, -50.41, -50.39,
-        -50.42, -50.41, -50.40, -50.46, -50.52, -50.49, -50.50, -50.47, -50.46, -50.47,
-        -50.46, -50.44, -50.46, -50.43, -50.45, -50.42, -50.44, -50.39, -50.39, -50.38,
-        -50.38, -50.42, -50.44, -50.48, -50.49, -50.46, -50.48, -50.51, -50.51, -50.51,
-        -50.51, -50.52, -50.45, -50.43, -50.39, -50.37, -50.40, -50.44, -50.45, -50.49,
-        -50.49, -50.49, -50.49, -50.49, -50.49, -50.53, -50.53, -50.53, -50.58, -50.58,
-        -50.58, -50.58, -50.58, -50.58, -50.59, -50.58, -50.58, -50.58, -50.58, -50.58,
-        -50.61, -50.58, -50.66, -50.67, -50.67, -50.65, -50.65, -50.64, -50.64, -50.65,
-        -50.69, -50.76, -50.77, -50.80, -50.78, -50.87, -50.85, -50.91, -50.91, -50.96,
-        -50.98, -50.94, -50.93, -50.94, -50.93, -50.97, -50.95, -51.01, -50.99, -51.05,
-        -50.98, -51.01, -50.99, -51.06, -51.08, -51.15, -51.15, -51.15, -51.21, -51.21,
-        -51.20, -51.23, -51.25, -51.20, -51.24, -51.28, -51.29, -51.28, -51.30, -51.28,
-        -51.26, -51.36, -51.38, -51.39, -51.34, -51.36, -51.47, -51.57, -51.54, -51.48,
-        -51.65, -51.69, -51.63, -51.60, -51.61, -51.63, -51.52, -51.52, -51.49, -51.52,
-        -51.56, -51.61, -51.67, -51.64, -51.62, -51.69, -51.63, -51.61, -51.52, -51.60,
-        -51.75, -51.72, -51.68, -51.63, -51.64, -51.84, -51.75, -51.73, -51.71, -51.77,
-        -51.74, -51.79, -51.78, -51.70, -51.56, -51.57, -51.52, -51.51, -51.59, -51.53,
-        -51.54, -51.57, -51.65, -51.60, -51.61, -51.60, -51.51, -51.48, -51.47, -51.47,
-        -51.44, -51.45, -51.50, -51.49, -51.43, -51.43, -51.49, -51.52, -51.47, -51.46,
-        -51.49, -51.36, -51.35, -51.35, -51.40, -51.35, -51.23, -51.29, -51.32, -51.25,
-        -51.17, -51.17, -51.17, -51.16, -51.12, -51.10, -51.06, -51.07, -51.11, -51.16,
-        -51.18, -51.18, -51.17, -51.20, -51.22, -51.19, -51.17, -51.12, -51.08, -51.00,
-        -51.03, -50.95, -50.93, -50.83, -50.83, -50.77, -50.71, -50.67, -50.69, -50.63,
-        -50.56, -50.47, -50.40, -50.36, -50.38, -50.38, -50.41, -50.46, -50.42, -50.38,
-        -50.37, -50.34, -50.31, -50.27, -50.24, -50.24, -50.21, -50.19, -50.19, -50.13,
-        -50.06, -50.06, -50.01, -49.99, -49.96, -49.97, -49.99, -49.94, -49.97, -49.99,
-        -50.00, -50.01, -50.00, -49.99, -49.94, -49.89, -49.87, -49.83, -49.84, -49.82,
-        -49.81, -49.84, -49.87, -49.83, -49.86, -49.89, -49.89, -49.87, -49.85, -49.82,
-        -49.86, -49.88, -49.94, -49.93, -49.85, -49.89, -49.86, -49.91, -49.94, -49.96,
-        -49.92, -49.97, -50.00, -50.00, -50.05, -50.03, -49.99, -49.96, -50.04, -50.00,
-        -49.93, -49.93, -49.93, -49.96, -49.94, -49.93, -49.90, -49.90, -49.94, -49.95,
-        -49.97, -49.95, -50.00, -50.03, -50.07, -50.10, -50.08, -50.12, -50.13, -50.17,
-        -50.24, -50.17, -50.06, -50.09, -50.08, -50.05, -49.87, -49.88, -49.86, -49.89,
-        -49.75, -49.75, -49.70, -49.68, -49.57, -49.53, -49.38, -49.31, -49.22, -49.20,
-        -49.17, -49.07, -49.06, -48.97, -48.83, -48.73, -48.58, -48.47, -48.37, -48.23,
-        -48.10, -47.89, -47.78, -47.54, -47.41, -46.99, -46.85, -46.43, -46.09, -45.93,
-        -45.74, -45.59, -45.36, -45.03, -44.78, -44.56, -44.37, -44.29
+        -2925, -2922, -2921, -2923, -2923, -2926, -2935, -2941, -2945, -2948,
+        -2956, -2959, -2961, -2970, -2971, -2977, -2985, -2990, -2996, -2996,
+        -3006, -3006, -3011, -3021, -3024, -3025, -3027, -3031, -3026, -3031,
+        -3039, -3047, -3058, -3074, -3083, -3082, -3083, -3091, -3102, -3104,
+        -3100, -3099, -3109, -3107, -3104, -3103, -3110, -3118, -3111, -3113,
+        -3120, -3128, -3137, -3141, -3141, -3140, -3146, -3154, -3157, -3158,
+        -3158, -3160, -3167, -3171, -3169, -3178, -3180, -3184, -3184, -3200,
+        -3205, -3206, -3204, -3210, -3213, -3208, -3209, -3210, -3214, -3221,
+        -3219, -3230, -3238, -3248, -3247, -3239, -3246, -3246, -3244, -3259,
+        -3259, -3266, -3268, -3279, -3280, -3286, -3292, -3293, -3294, -3299,
+        -3301, -3306, -3310, -3317, -3319, -3324, -3325, -3323, -3323, -3324,
+        -3332, -3337, -3342, -3347, -3350, -3357, -3360, -3358, -3367, -3364,
+        -3366, -3371, -3382, -3381, -3382, -3388, -3402, -3408, -3413, -3416,
+        -3420, -3425, -3430, -3431, -3435, -3439, -3446, -3450, -3459, -3462,
+        -3465, -3476, -3480, -3483, -3489, -3500, -3499, -3498, -3498, -3510,
+        -3509, -3508, -3512, -3521, -3525, -3536, -3540, -3539, -3542, -3548,
+        -3552, -3561, -3568, -3576, -3580, -3584, -3590, -3597, -3601, -3608,
+        -3610, -3614, -3619, -3621, -3624, -3627, -3633, -3638, -3646, -3650,
+        -3650, -3653, -3656, -3662, -3664, -3669, -3674, -3682, -3689, -3693,
+        -3690, -3701, -3705, -3699, -3701, -3709, -3719, -3731, -3740, -3748,
+        -3751, -3756, -3757, -3762, -3764, -3772, -3780, -3783, -3791, -3793,
+        -3792, -3788, -3795, -3803, -3805, -3811, -3821, -3826, -3830, -3835,
+        -3839, -3847, -3852, -3856, -3861, -3862, -3873, -3874, -3885, -3888,
+        -3891, -3891, -3896, -3904, -3905, -3913, -3913, -3924, -3926, -3932,
+        -3930, -3935, -3938, -3948, -3955, -3955, -3960, -3966, -3962, -3969,
+        -3971, -3975, -3981, -3981, -3988, -3989, -3991, -3996, -3998, -3999,
+        -3995, -4004, -4003, -4016, -4018, -4027, -4029, -4038, -4041, -4049,
+        -4052, -4060, -4063, -4060, -4066, -4071, -4076, -4076, -4084, -4087,
+        -4090, -4092, -4094, -4102, -4101, -4107, -4111, -4121, -4123, -4123,
+        -4129, -4134, -4137, -4142, -4145, -4143, -4147, -4147, -4149, -4153,
+        -4155, -4161, -4165, -4171, -4180, -4191, -4191, -4200, -4197, -4189,
+        -4194, -4206, -4211, -4209, -4212, -4219, -4221, -4213, -4211, -4213,
+        -4222, -4225, -4227, -4237, -4237, -4238, -4247, -4246, -4248, -4248,
+        -4248, -4253, -4255, -4255, -4259, -4261, -4270, -4272, -4282, -4281,
+        -4289, -4289, -4302, -4299, -4307, -4311, -4312, -4314, -4316, -4316,
+        -4319, -4322, -4319, -4315, -4319, -4324, -4326, -4326, -4337, -4335,
+        -4341, -4339, -4343, -4344, -4346, -4349, -4353, -4356, -4354, -4358,
+        -4361, -4360, -4363, -4370, -4372, -4372, -4372, -4384, -4393, -4396,
+        -4399, -4401, -4402, -4405, -4408, -4413, -4417, -4417, -4422, -4421,
+        -4425, -4426, -4430, -4432, -4440, -4446, -4445, -4449, -4449, -4454,
+        -4453, -4454, -4458, -4464, -4462, -4459, -4459, -4464, -4462, -4469,
+        -4476, -4476, -4485, -4491, -4489, -4488, -4487, -4484, -4491, -4486,
+        -4492, -4488, -4497, -4491, -4498, -4505, -4509, -4513, -4515, -4522,
+        -4522, -4524, -4522, -4527, -4531, -4526, -4528, -4527, -4528, -4524,
+        -4528, -4535, -4541, -4542, -4547, -4549, -4552, -4557, -4552, -4558,
+        -4557, -4560, -4557, -4563, -4568, -4568, -4571, -4571, -4579, -4574,
+        -4581, -4575, -4582, -4585, -4592, -4589, -4593, -4588, -4593, -4590,
+        -4588, -4595, -4601, -4607, -4608, -4610, -4615, -4623, -4628, -4635,
+        -4637, -4633, -4634, -4627, -4627, -4624, -4625, -4621, -4625, -4628,
+        -4634, -4640, -4642, -4643, -4649, -4653, -4649, -4649, -4652, -4651,
+        -4652, -4658, -4658, -4663, -4669, -4674, -4680, -4685, -4687, -4688,
+        -4691, -4694, -4694, -4698, -4700, -4698, -4700, -4702, -4705, -4705,
+        -4708, -4706, -4707, -4705, -4711, -4708, -4706, -4709, -4708, -4712,
+        -4705, -4707, -4712, -4717, -4717, -4721, -4724, -4730, -4734, -4729,
+        -4730, -4732, -4732, -4736, -4737, -4743, -4747, -4745, -4743, -4744,
+        -4744, -4749, -4755, -4758, -4761, -4762, -4758, -4761, -4766, -4770,
+        -4775, -4776, -4779, -4777, -4771, -4769, -4775, -4780, -4782, -4782,
+        -4779, -4782, -4780, -4780, -4784, -4784, -4789, -4792, -4799, -4801,
+        -4803, -4806, -4808, -4810, -4813, -4823, -4824, -4823, -4819, -4825,
+        -4828, -4834, -4839, -4842, -4847, -4851, -4851, -4851, -4848, -4846,
+        -4849, -4854, -4853, -4851, -4853, -4856, -4860, -4863, -4867, -4871,
+        -4872, -4874, -4865, -4861, -4865, -4871, -4874, -4877, -4881, -4884,
+        -4885, -4888, -4894, -4895, -4895, -4897, -4904, -4905, -4906, -4909,
+        -4906, -4905, -4901, -4901, -4902, -4905, -4907, -4908, -4909, -4915,
+        -4920, -4922, -4924, -4924, -4924, -4927, -4933, -4936, -4938, -4941,
+        -4941, -4946, -4948, -4950, -4950, -4954, -4956, -4956, -4959, -4962,
+        -4962, -4962, -4961, -4961, -4963, -4964, -4964, -4968, -4968, -4970,
+        -4970, -4970, -4974, -4972, -4976, -4977, -4987, -4990, -5002, -5003,
+        -5004, -5004, -5004, -5004, -5005, -5005, -5005, -5011, -5016, -5021,
+        -5026, -5026, -5026, -5027, -5028, -5028, -5029, -5030, -5033, -5038,
+        -5040, -5041, -5041, -5042, -5042, -5042, -5043, -5046, -5047, -5050,
+        -5055, -5058, -5061, -5061, -5061, -5061, -5064, -5065, -5067, -5069,
+        -5074, -5078, -5078, -5077, -5083, -5087, -5087, -5086, -5086, -5086,
+        -5086, -5085, -5085, -5085, -5085, -5090, -5100, -5105, -5105, -5106,
+        -5117, -5122, -5133, -5134, -5132, -5132, -5131, -5130, -5128, -5127,
+        -5126, -5131, -5135, -5142, -5146, -5146, -5145, -5145, -5144, -5144,
+        -5149, -5154, -5150, -5153, -5157, -5156, -5156, -5156, -5157, -5159,
+        -5162, -5163, -5168, -5168, -5171, -5174, -5176, -5175, -5175, -5178,
+        -5183, -5182, -5188, -5192, -5192, -5191, -5187, -5186, -5184, -5181,
+        -5187, -5195, -5199, -5198, -5202, -5208, -5211, -5213, -5223, -5223,
+        -5228, -5232, -5234, -5234, -5238, -5237, -5240, -5239, -5238, -5241,
+        -5243, -5247, -5245, -5247, -5244, -5247, -5243, -5257, -5253, -5258,
+        -5263, -5258, -5257, -5255, -5256, -5253, -5256, -5258, -5259, -5262,
+        -5264, -5267, -5271, -5272, -5276, -5280, -5281, -5288, -5288, -5289,
+        -5287, -5282, -5275, -5277, -5281, -5281, -5285, -5281, -5283, -5285,
+        -5287, -5284, -5282, -5282, -5286, -5284, -5289, -5288, -5291, -5288,
+        -5293, -5297, -5302, -5299, -5299, -5294, -5299, -5304, -5305, -5301,
+        -5302, -5302, -5299, -5302, -5304, -5312, -5309, -5309, -5316, -5317,
+        -5317, -5317, -5317, -5316, -5315, -5318, -5317, -5318, -5318, -5323,
+        -5322, -5320, -5319, -5317, -5315, -5314, -5311, -5308, -5308, -5307,
+        -5308, -5308, -5308, -5308, -5312, -5314, -5314, -5316, -5318, -5318,
+        -5318, -5317, -5307, -5307, -5297, -5297, -5297, -5297, -5297, -5297,
+        -5298, -5298, -5300, -5297, -5295, -5294, -5289, -5289, -5287, -5287,
+        -5288, -5290, -5290, -5290, -5291, -5286, -5286, -5278, -5274, -5274,
+        -5275, -5275, -5276, -5279, -5282, -5278, -5271, -5266, -5266, -5268,
+        -5274, -5279, -5275, -5277, -5272, -5271, -5270, -5270, -5267, -5263,
+        -5260, -5257, -5255, -5256, -5251, -5254, -5255, -5253, -5258, -5253,
+        -5244, -5243, -5239, -5239, -5230, -5230, -5221, -5222, -5225, -5228,
+        -5222, -5222, -5219, -5215, -5211, -5209, -5210, -5207, -5205, -5198,
+        -5194, -5190, -5192, -5191, -5187, -5182, -5181, -5185, -5184, -5180,
+        -5178, -5181, -5173, -5175, -5168, -5170, -5164, -5167, -5169, -5170,
+        -5171, -5168, -5170, -5163, -5163, -5160, -5161, -5155, -5160, -5156,
+        -5156, -5151, -5152, -5149, -5149, -5147, -5145, -5144, -5145, -5151,
+        -5143, -5148, -5143, -5141, -5144, -5140, -5144, -5144, -5142, -5139,
+        -5131, -5124, -5124, -5118, -5116, -5107, -5104, -5101, -5108, -5101,
+        -5101, -5101, -5102, -5106, -5101, -5107, -5108, -5102, -5099, -5098,
+        -5092, -5093, -5090, -5091, -5089, -5085, -5087, -5082, -5082, -5079,
+        -5084, -5077, -5082, -5078, -5069, -5073, -5070, -5070, -5066, -5064,
+        -5063, -5061, -5061, -5068, -5064, -5068, -5070, -5065, -5056, -5050,
+        -5050, -5045, -5044, -5044, -5040, -5039, -5038, -5048, -5052, -5052,
+        -5057, -5053, -5054, -5051, -5047, -5044, -5047, -5045, -5041, -5039,
+        -5042, -5041, -5040, -5046, -5052, -5049, -5050, -5047, -5046, -5047,
+        -5046, -5044, -5046, -5043, -5045, -5042, -5044, -5039, -5039, -5038,
+        -5038, -5042, -5044, -5048, -5049, -5046, -5048, -5051, -5051, -5051,
+        -5051, -5052, -5045, -5043, -5039, -5037, -5040, -5044, -5045, -5049,
+        -5049, -5049, -5049, -5049, -5049, -5053, -5053, -5053, -5058, -5058,
+        -5058, -5058, -5058, -5058, -5059, -5058, -5058, -5058, -5058, -5058,
+        -5061, -5058, -5066, -5067, -5067, -5065, -5065, -5064, -5064, -5065,
+        -5069, -5076, -5077, -5080, -5078, -5087, -5085, -5091, -5091, -5096,
+        -5098, -5094, -5093, -5094, -5093, -5097, -5095, -5101, -5099, -5105,
+        -5098, -5101, -5099, -5106, -5108, -5115, -5115, -5115, -5121, -5121,
+        -5120, -5123, -5125, -5120, -5124, -5128, -5129, -5128, -5130, -5128,
+        -5126, -5136, -5138, -5139, -5134, -5136, -5147, -5157, -5154, -5148,
+        -5165, -5169, -5163, -5160, -5161, -5163, -5152, -5152, -5149, -5152,
+        -5156, -5161, -5167, -5164, -5162, -5169, -5163, -5161, -5152, -5160,
+        -5175, -5172, -5168, -5163, -5164, -5184, -5175, -5173, -5171, -5177,
+        -5174, -5179, -5178, -5170, -5156, -5157, -5152, -5151, -5159, -5153,
+        -5154, -5157, -5165, -5160, -5161, -5160, -5151, -5148, -5147, -5147,
+        -5144, -5145, -5150, -5149, -5143, -5143, -5149, -5152, -5147, -5146,
+        -5149, -5136, -5135, -5135, -5140, -5135, -5123, -5129, -5132, -5125,
+        -5117, -5117, -5117, -5116, -5112, -5110, -5106, -5107, -5111, -5116,
+        -5118, -5118, -5117, -5120, -5122, -5119, -5117, -5112, -5108, -5100,
+        -5103, -5095, -5093, -5083, -5083, -5077, -5071, -5067, -5069, -5063,
+        -5056, -5047, -5040, -5036, -5038, -5038, -5041, -5046, -5042, -5038,
+        -5037, -5034, -5031, -5027, -5024, -5024, -5021, -5019, -5019, -5013,
+        -5006, -5006, -5001, -4999, -4996, -4997, -4999, -4994, -4997, -4999,
+        -5000, -5001, -5000, -4999, -4994, -4989, -4987, -4983, -4984, -4982,
+        -4981, -4984, -4987, -4983, -4986, -4989, -4989, -4987, -4985, -4982,
+        -4986, -4988, -4994, -4993, -4985, -4989, -4986, -4991, -4994, -4996,
+        -4992, -4997, -5000, -5000, -5005, -5003, -4999, -4996, -5004, -5000,
+        -4993, -4993, -4993, -4996, -4994, -4993, -4990, -4990, -4994, -4995,
+        -4997, -4995, -5000, -5003, -5007, -5010, -5008, -5012, -5013, -5017,
+        -5024, -5017, -5006, -5009, -5008, -5005, -4987, -4988, -4986, -4989,
+        -4975, -4975, -4970, -4968, -4957, -4953, -4938, -4931, -4922, -4920,
+        -4917, -4907, -4906, -4897, -4883, -4873, -4858, -4847, -4837, -4823,
+        -4810, -4789, -4778, -4754, -4741, -4699, -4685, -4643, -4609, -4593,
+        -4574, -4559, -4536, -4503, -4478, -4456, -4437, -4429
     };
 
-    static const float robinson_dadson_curve_40_phons[1468] =
+    static const int16_t robinson_dadson_curve_40_phons[1468] =
     {
-        -24.50, -24.45, -24.41, -24.41, -24.37, -24.38, -24.47, -24.53, -24.55, -24.55,
-        -24.65, -24.67, -24.67, -24.80, -24.81, -24.84, -24.89, -24.96, -25.04, -25.02,
-        -25.10, -25.08, -25.13, -25.26, -25.27, -25.29, -25.29, -25.37, -25.33, -25.34,
-        -25.46, -25.53, -25.62, -25.77, -25.82, -25.78, -25.78, -25.81, -25.91, -25.94,
-        -25.88, -25.83, -25.92, -25.90, -25.87, -25.86, -25.94, -25.97, -25.83, -25.89,
-        -25.97, -26.11, -26.21, -26.25, -26.22, -26.22, -26.28, -26.35, -26.38, -26.38,
-        -26.39, -26.41, -26.48, -26.53, -26.50, -26.58, -26.59, -26.56, -26.56, -26.67,
-        -26.79, -26.77, -26.69, -26.69, -26.71, -26.66, -26.69, -26.71, -26.78, -26.84,
-        -26.86, -26.97, -27.03, -27.06, -27.07, -27.00, -27.02, -27.02, -26.99, -27.20,
-        -27.17, -27.24, -27.20, -27.31, -27.31, -27.40, -27.43, -27.44, -27.43, -27.51,
-        -27.52, -27.60, -27.65, -27.71, -27.71, -27.74, -27.72, -27.69, -27.66, -27.66,
-        -27.75, -27.75, -27.80, -27.89, -27.92, -27.99, -27.98, -27.94, -28.08, -28.02,
-        -28.02, -28.06, -28.18, -28.17, -28.14, -28.15, -28.29, -28.33, -28.41, -28.45,
-        -28.46, -28.48, -28.54, -28.52, -28.57, -28.58, -28.64, -28.67, -28.78, -28.79,
-        -28.80, -28.93, -28.95, -28.99, -29.04, -29.17, -29.15, -29.12, -29.13, -29.23,
-        -29.23, -29.18, -29.18, -29.28, -29.29, -29.38, -29.41, -29.38, -29.40, -29.43,
-        -29.47, -29.56, -29.61, -29.65, -29.71, -29.72, -29.74, -29.81, -29.85, -29.94,
-        -29.96, -29.99, -30.00, -30.04, -30.07, -30.09, -30.17, -30.27, -30.32, -30.34,
-        -30.28, -30.28, -30.28, -30.33, -30.34, -30.41, -30.45, -30.51, -30.56, -30.60,
-        -30.59, -30.67, -30.70, -30.63, -30.65, -30.73, -30.78, -30.92, -31.02, -31.07,
-        -31.08, -31.16, -31.16, -31.21, -31.21, -31.27, -31.38, -31.41, -31.46, -31.49,
-        -31.49, -31.44, -31.49, -31.58, -31.58, -31.64, -31.72, -31.74, -31.79, -31.83,
-        -31.85, -31.89, -31.89, -31.92, -31.97, -31.99, -32.12, -32.13, -32.22, -32.25,
-        -32.27, -32.26, -32.29, -32.37, -32.36, -32.48, -32.47, -32.57, -32.58, -32.62,
-        -32.58, -32.58, -32.61, -32.64, -32.73, -32.74, -32.80, -32.83, -32.81, -32.86,
-        -32.88, -32.91, -32.95, -32.92, -33.01, -33.03, -32.99, -33.04, -33.09, -33.09,
-        -33.04, -33.18, -33.18, -33.27, -33.28, -33.37, -33.37, -33.39, -33.41, -33.47,
-        -33.53, -33.59, -33.61, -33.54, -33.58, -33.65, -33.68, -33.68, -33.73, -33.74,
-        -33.81, -33.83, -33.84, -33.89, -33.88, -33.94, -34.00, -34.06, -34.06, -34.04,
-        -34.09, -34.12, -34.18, -34.21, -34.25, -34.25, -34.30, -34.30, -34.31, -34.35,
-        -34.35, -34.40, -34.43, -34.50, -34.60, -34.70, -34.71, -34.79, -34.76, -34.65,
-        -34.70, -34.79, -34.82, -34.80, -34.83, -34.88, -34.89, -34.79, -34.79, -34.82,
-        -34.94, -34.96, -34.98, -35.09, -35.08, -35.08, -35.14, -35.12, -35.13, -35.13,
-        -35.13, -35.17, -35.17, -35.16, -35.20, -35.23, -35.32, -35.33, -35.42, -35.39,
-        -35.47, -35.47, -35.61, -35.57, -35.64, -35.66, -35.65, -35.64, -35.66, -35.66,
-        -35.70, -35.74, -35.70, -35.62, -35.63, -35.67, -35.68, -35.69, -35.81, -35.81,
-        -35.89, -35.89, -35.93, -35.97, -35.97, -35.98, -36.02, -36.04, -35.99, -35.98,
-        -35.99, -35.96, -36.00, -36.05, -36.05, -36.05, -36.10, -36.25, -36.33, -36.34,
-        -36.39, -36.39, -36.39, -36.41, -36.42, -36.46, -36.50, -36.51, -36.55, -36.55,
-        -36.59, -36.57, -36.64, -36.65, -36.73, -36.77, -36.76, -36.79, -36.78, -36.85,
-        -36.88, -36.88, -36.93, -36.98, -36.97, -36.92, -36.92, -36.96, -36.96, -37.01,
-        -37.05, -37.06, -37.16, -37.16, -37.11, -37.11, -37.10, -37.06, -37.11, -37.06,
-        -37.12, -37.11, -37.19, -37.15, -37.21, -37.25, -37.27, -37.28, -37.33, -37.37,
-        -37.35, -37.38, -37.36, -37.41, -37.47, -37.45, -37.48, -37.45, -37.47, -37.43,
-        -37.47, -37.52, -37.59, -37.59, -37.61, -37.59, -37.59, -37.64, -37.57, -37.64,
-        -37.62, -37.66, -37.62, -37.74, -37.81, -37.83, -37.82, -37.85, -37.94, -37.86,
-        -37.94, -37.86, -37.91, -37.93, -37.99, -37.91, -37.95, -37.86, -37.91, -37.90,
-        -37.86, -37.95, -38.01, -38.10, -38.10, -38.14, -38.19, -38.29, -38.34, -38.39,
-        -38.44, -38.39, -38.38, -38.29, -38.25, -38.20, -38.20, -38.18, -38.25, -38.30,
-        -38.38, -38.44, -38.45, -38.47, -38.53, -38.56, -38.51, -38.47, -38.51, -38.50,
-        -38.51, -38.55, -38.51, -38.56, -38.62, -38.67, -38.68, -38.78, -38.75, -38.77,
-        -38.79, -38.84, -38.83, -38.93, -38.93, -38.89, -38.89, -38.95, -38.93, -38.92,
-        -38.94, -38.93, -38.89, -38.89, -38.93, -38.92, -38.88, -38.91, -38.87, -38.91,
-        -38.86, -38.91, -38.96, -39.03, -39.01, -39.05, -39.06, -39.15, -39.16, -39.14,
-        -39.17, -39.18, -39.20, -39.21, -39.21, -39.30, -39.31, -39.29, -39.24, -39.26,
-        -39.27, -39.31, -39.34, -39.39, -39.40, -39.43, -39.35, -39.38, -39.38, -39.41,
-        -39.48, -39.49, -39.52, -39.51, -39.44, -39.43, -39.52, -39.58, -39.61, -39.61,
-        -39.58, -39.59, -39.57, -39.55, -39.59, -39.61, -39.64, -39.69, -39.74, -39.78,
-        -39.78, -39.77, -39.76, -39.76, -39.79, -39.91, -39.92, -39.87, -39.82, -39.87,
-        -39.93, -39.96, -40.05, -40.10, -40.15, -40.19, -40.19, -40.20, -40.15, -40.10,
-        -40.11, -40.15, -40.19, -40.20, -40.20, -40.21, -40.22, -40.23, -40.27, -40.27,
-        -40.29, -40.31, -40.23, -40.20, -40.23, -40.26, -40.31, -40.32, -40.35, -40.36,
-        -40.39, -40.41, -40.45, -40.46, -40.46, -40.46, -40.54, -40.56, -40.56, -40.57,
-        -40.52, -40.51, -40.47, -40.49, -40.51, -40.53, -40.57, -40.55, -40.55, -40.59,
-        -40.64, -40.68, -40.72, -40.72, -40.72, -40.73, -40.76, -40.77, -40.75, -40.75,
-        -40.76, -40.80, -40.84, -40.89, -40.89, -40.93, -40.93, -40.93, -40.93, -40.93,
-        -40.93, -40.93, -40.93, -40.93, -40.97, -40.98, -40.98, -41.07, -41.07, -41.07,
-        -41.07, -41.07, -41.06, -41.03, -41.02, -41.02, -41.12, -41.13, -41.24, -41.26,
-        -41.27, -41.27, -41.27, -41.27, -41.30, -41.30, -41.28, -41.33, -41.37, -41.42,
-        -41.46, -41.45, -41.45, -41.45, -41.45, -41.45, -41.45, -41.45, -41.48, -41.53,
-        -41.55, -41.55, -41.56, -41.56, -41.56, -41.56, -41.57, -41.61, -41.61, -41.62,
-        -41.65, -41.66, -41.66, -41.66, -41.66, -41.66, -41.66, -41.66, -41.65, -41.65,
-        -41.70, -41.74, -41.74, -41.74, -41.79, -41.83, -41.83, -41.82, -41.82, -41.82,
-        -41.82, -41.82, -41.81, -41.81, -41.81, -41.86, -41.96, -42.02, -42.02, -42.02,
-        -42.11, -42.12, -42.22, -42.20, -42.17, -42.17, -42.17, -42.16, -42.12, -42.10,
-        -42.09, -42.13, -42.17, -42.22, -42.27, -42.27, -42.26, -42.26, -42.25, -42.25,
-        -42.30, -42.34, -42.31, -42.32, -42.35, -42.32, -42.30, -42.29, -42.29, -42.31,
-        -42.33, -42.34, -42.39, -42.39, -42.43, -42.43, -42.45, -42.40, -42.39, -42.40,
-        -42.45, -42.45, -42.50, -42.55, -42.54, -42.54, -42.46, -42.44, -42.40, -42.35,
-        -42.41, -42.49, -42.53, -42.49, -42.51, -42.57, -42.58, -42.58, -42.67, -42.68,
-        -42.73, -42.75, -42.77, -42.76, -42.79, -42.78, -42.79, -42.78, -42.77, -42.82,
-        -42.85, -42.90, -42.89, -42.90, -42.87, -42.89, -42.85, -42.99, -42.96, -42.99,
-        -43.03, -42.96, -42.94, -42.92, -42.89, -42.84, -42.83, -42.85, -42.81, -42.82,
-        -42.84, -42.87, -42.91, -42.92, -42.96, -42.99, -43.01, -43.08, -43.08, -43.08,
-        -43.06, -42.98, -42.92, -42.97, -43.01, -43.01, -43.04, -42.96, -42.96, -42.97,
-        -42.98, -42.92, -42.92, -42.89, -42.92, -42.92, -42.93, -42.92, -42.97, -42.93,
-        -42.97, -43.01, -43.06, -43.01, -43.01, -42.92, -42.97, -42.97, -42.98, -42.96,
-        -42.93, -42.93, -42.91, -42.92, -42.94, -43.02, -42.99, -42.98, -43.03, -43.03,
-        -43.03, -43.03, -43.03, -43.02, -43.01, -43.06, -43.05, -43.06, -43.07, -43.10,
-        -43.09, -43.07, -43.06, -43.02, -42.98, -42.94, -42.89, -42.87, -42.85, -42.85,
-        -42.85, -42.85, -42.85, -42.85, -42.91, -42.96, -42.96, -43.00, -43.05, -43.04,
-        -43.04, -43.03, -42.94, -42.93, -42.83, -42.83, -42.83, -42.83, -42.84, -42.83,
-        -42.84, -42.84, -42.84, -42.79, -42.75, -42.71, -42.66, -42.66, -42.62, -42.62,
-        -42.64, -42.67, -42.68, -42.68, -42.71, -42.66, -42.66, -42.59, -42.56, -42.57,
-        -42.59, -42.59, -42.60, -42.62, -42.67, -42.62, -42.53, -42.47, -42.46, -42.46,
-        -42.52, -42.58, -42.54, -42.58, -42.54, -42.50, -42.50, -42.47, -42.44, -42.40,
-        -42.37, -42.34, -42.34, -42.33, -42.26, -42.34, -42.35, -42.31, -42.35, -42.30,
-        -42.22, -42.21, -42.16, -42.17, -42.07, -42.07, -41.98, -42.02, -42.06, -42.09,
-        -42.02, -42.01, -42.00, -41.96, -41.94, -41.91, -41.92, -41.90, -41.86, -41.82,
-        -41.77, -41.72, -41.73, -41.71, -41.65, -41.62, -41.61, -41.61, -41.60, -41.56,
-        -41.55, -41.55, -41.50, -41.54, -41.47, -41.49, -41.45, -41.47, -41.51, -41.49,
-        -41.50, -41.50, -41.50, -41.42, -41.42, -41.38, -41.41, -41.33, -41.38, -41.37,
-        -41.35, -41.32, -41.32, -41.27, -41.27, -41.25, -41.20, -41.21, -41.24, -41.27,
-        -41.18, -41.23, -41.23, -41.23, -41.26, -41.25, -41.29, -41.32, -41.31, -41.25,
-        -41.15, -41.06, -41.08, -41.05, -41.00, -40.91, -40.90, -40.85, -40.92, -40.88,
-        -40.85, -40.87, -40.86, -40.92, -40.87, -40.90, -40.92, -40.88, -40.86, -40.86,
-        -40.78, -40.81, -40.74, -40.77, -40.73, -40.72, -40.73, -40.73, -40.72, -40.72,
-        -40.75, -40.70, -40.76, -40.73, -40.65, -40.66, -40.68, -40.63, -40.60, -40.55,
-        -40.53, -40.50, -40.50, -40.59, -40.56, -40.58, -40.63, -40.58, -40.49, -40.43,
-        -40.43, -40.43, -40.40, -40.39, -40.33, -40.32, -40.29, -40.38, -40.45, -40.43,
-        -40.47, -40.43, -40.43, -40.40, -40.36, -40.36, -40.39, -40.38, -40.34, -40.34,
-        -40.40, -40.38, -40.35, -40.39, -40.41, -40.39, -40.39, -40.38, -40.34, -40.38,
-        -40.39, -40.39, -40.43, -40.37, -40.41, -40.38, -40.39, -40.32, -40.31, -40.30,
-        -40.31, -40.35, -40.41, -40.46, -40.48, -40.42, -40.45, -40.51, -40.50, -40.50,
-        -40.48, -40.47, -40.40, -40.36, -40.30, -40.26, -40.26, -40.35, -40.35, -40.44,
-        -40.44, -40.44, -40.44, -40.44, -40.44, -40.53, -40.53, -40.53, -40.62, -40.62,
-        -40.62, -40.63, -40.63, -40.63, -40.63, -40.63, -40.62, -40.62, -40.62, -40.62,
-        -40.62, -40.56, -40.64, -40.61, -40.60, -40.56, -40.56, -40.54, -40.53, -40.55,
-        -40.59, -40.65, -40.66, -40.70, -40.71, -40.79, -40.80, -40.88, -40.90, -40.95,
-        -41.00, -40.96, -40.92, -40.95, -40.92, -40.99, -40.99, -41.06, -41.07, -41.11,
-        -41.04, -41.03, -41.01, -41.05, -41.10, -41.19, -41.19, -41.20, -41.28, -41.28,
-        -41.29, -41.31, -41.31, -41.24, -41.28, -41.33, -41.38, -41.37, -41.37, -41.32,
-        -41.32, -41.37, -41.38, -41.34, -41.34, -41.34, -41.46, -41.57, -41.55, -41.48,
-        -41.67, -41.77, -41.70, -41.64, -41.65, -41.68, -41.59, -41.59, -41.58, -41.58,
-        -41.61, -41.65, -41.72, -41.68, -41.68, -41.77, -41.73, -41.69, -41.61, -41.69,
-        -41.87, -41.85, -41.83, -41.78, -41.84, -42.04, -41.95, -41.92, -41.89, -42.00,
-        -41.93, -41.99, -41.99, -41.95, -41.80, -41.82, -41.78, -41.76, -41.83, -41.75,
-        -41.73, -41.74, -41.80, -41.77, -41.80, -41.78, -41.69, -41.66, -41.68, -41.71,
-        -41.67, -41.69, -41.76, -41.79, -41.77, -41.78, -41.87, -41.92, -41.86, -41.89,
-        -41.89, -41.76, -41.75, -41.76, -41.85, -41.75, -41.66, -41.71, -41.77, -41.71,
-        -41.63, -41.66, -41.67, -41.69, -41.67, -41.67, -41.66, -41.68, -41.69, -41.74,
-        -41.74, -41.72, -41.70, -41.76, -41.80, -41.81, -41.80, -41.78, -41.76, -41.67,
-        -41.74, -41.67, -41.71, -41.61, -41.61, -41.55, -41.52, -41.49, -41.51, -41.46,
-        -41.41, -41.32, -41.27, -41.23, -41.28, -41.28, -41.33, -41.38, -41.34, -41.30,
-        -41.33, -41.28, -41.28, -41.27, -41.27, -41.27, -41.27, -41.27, -41.27, -41.22,
-        -41.17, -41.18, -41.13, -41.08, -41.04, -41.05, -41.09, -41.10, -41.15, -41.20,
-        -41.22, -41.24, -41.24, -41.26, -41.23, -41.20, -41.18, -41.19, -41.20, -41.23,
-        -41.20, -41.26, -41.26, -41.24, -41.27, -41.31, -41.29, -41.28, -41.26, -41.23,
-        -41.32, -41.32, -41.36, -41.34, -41.26, -41.35, -41.33, -41.35, -41.40, -41.45,
-        -41.42, -41.50, -41.55, -41.59, -41.64, -41.64, -41.56, -41.53, -41.68, -41.60,
-        -41.52, -41.52, -41.55, -41.56, -41.51, -41.51, -41.55, -41.58, -41.63, -41.64,
-        -41.67, -41.68, -41.78, -41.79, -41.87, -41.89, -41.90, -41.93, -41.88, -41.99,
-        -42.13, -42.03, -41.88, -41.92, -41.99, -41.98, -41.83, -41.83, -41.88, -41.93,
-        -41.80, -41.84, -41.81, -41.84, -41.75, -41.70, -41.59, -41.55, -41.51, -41.51,
-        -41.48, -41.47, -41.49, -41.44, -41.35, -41.28, -41.16, -41.06, -40.94, -40.80,
-        -40.84, -40.61, -40.53, -40.30, -40.19, -39.82, -39.77, -39.33, -39.15, -39.03,
-        -38.96, -38.73, -38.55, -38.36, -38.13, -37.96, -37.80, -37.78
+        -2450, -2445, -2441, -2441, -2437, -2438, -2447, -2453, -2455, -2455,
+        -2465, -2467, -2467, -2480, -2481, -2484, -2489, -2496, -2504, -2502,
+        -2510, -2508, -2513, -2526, -2527, -2529, -2529, -2537, -2533, -2534,
+        -2546, -2553, -2562, -2577, -2582, -2578, -2578, -2581, -2591, -2594,
+        -2588, -2583, -2592, -2590, -2587, -2586, -2594, -2597, -2583, -2589,
+        -2597, -2611, -2621, -2625, -2622, -2622, -2628, -2635, -2638, -2638,
+        -2639, -2641, -2648, -2653, -2650, -2658, -2659, -2656, -2656, -2667,
+        -2679, -2677, -2669, -2669, -2671, -2666, -2669, -2671, -2678, -2684,
+        -2686, -2697, -2703, -2706, -2707, -2700, -2702, -2702, -2699, -2720,
+        -2717, -2724, -2720, -2731, -2731, -2740, -2743, -2744, -2743, -2751,
+        -2752, -2760, -2765, -2771, -2771, -2774, -2772, -2769, -2766, -2766,
+        -2775, -2775, -2780, -2789, -2792, -2799, -2798, -2794, -2808, -2802,
+        -2802, -2806, -2818, -2817, -2814, -2815, -2829, -2833, -2841, -2845,
+        -2846, -2848, -2854, -2852, -2857, -2858, -2864, -2867, -2878, -2879,
+        -2880, -2893, -2895, -2899, -2904, -2917, -2915, -2912, -2913, -2923,
+        -2923, -2918, -2918, -2928, -2929, -2938, -2941, -2938, -2940, -2943,
+        -2947, -2956, -2961, -2965, -2971, -2972, -2974, -2981, -2985, -2994,
+        -2996, -2999, -3000, -3004, -3007, -3009, -3017, -3027, -3032, -3034,
+        -3028, -3028, -3028, -3033, -3034, -3041, -3045, -3051, -3056, -3060,
+        -3059, -3067, -3070, -3063, -3065, -3073, -3078, -3092, -3102, -3107,
+        -3108, -3116, -3116, -3121, -3121, -3127, -3138, -3141, -3146, -3149,
+        -3149, -3144, -3149, -3158, -3158, -3164, -3172, -3174, -3179, -3183,
+        -3185, -3189, -3189, -3192, -3197, -3199, -3212, -3213, -3222, -3225,
+        -3227, -3226, -3229, -3237, -3236, -3248, -3247, -3257, -3258, -3262,
+        -3258, -3258, -3261, -3264, -3273, -3274, -3280, -3283, -3281, -3286,
+        -3288, -3291, -3295, -3292, -3301, -3303, -3299, -3304, -3309, -3309,
+        -3304, -3318, -3318, -3327, -3328, -3337, -3337, -3339, -3341, -3347,
+        -3353, -3359, -3361, -3354, -3358, -3365, -3368, -3368, -3373, -3374,
+        -3381, -3383, -3384, -3389, -3388, -3394, -3400, -3406, -3406, -3404,
+        -3409, -3412, -3418, -3421, -3425, -3425, -3430, -3430, -3431, -3435,
+        -3435, -3440, -3443, -3450, -3460, -3470, -3471, -3479, -3476, -3465,
+        -3470, -3479, -3482, -3480, -3483, -3488, -3489, -3479, -3479, -3482,
+        -3494, -3496, -3498, -3509, -3508, -3508, -3514, -3512, -3513, -3513,
+        -3513, -3517, -3517, -3516, -3520, -3523, -3532, -3533, -3542, -3539,
+        -3547, -3547, -3561, -3557, -3564, -3566, -3565, -3564, -3566, -3566,
+        -3570, -3574, -3570, -3562, -3563, -3567, -3568, -3569, -3581, -3581,
+        -3589, -3589, -3593, -3597, -3597, -3598, -3602, -3604, -3599, -3598,
+        -3599, -3596, -3600, -3605, -3605, -3605, -3610, -3625, -3633, -3634,
+        -3639, -3639, -3639, -3641, -3642, -3646, -3650, -3651, -3655, -3655,
+        -3659, -3657, -3664, -3665, -3673, -3677, -3676, -3679, -3678, -3685,
+        -3688, -3688, -3693, -3698, -3697, -3692, -3692, -3696, -3696, -3701,
+        -3705, -3706, -3716, -3716, -3711, -3711, -3710, -3706, -3711, -3706,
+        -3712, -3711, -3719, -3715, -3721, -3725, -3727, -3728, -3733, -3737,
+        -3735, -3738, -3736, -3741, -3747, -3745, -3748, -3745, -3747, -3743,
+        -3747, -3752, -3759, -3759, -3761, -3759, -3759, -3764, -3757, -3764,
+        -3762, -3766, -3762, -3774, -3781, -3783, -3782, -3785, -3794, -3786,
+        -3794, -3786, -3791, -3793, -3799, -3791, -3795, -3786, -3791, -3790,
+        -3786, -3795, -3801, -3810, -3810, -3814, -3819, -3829, -3834, -3839,
+        -3844, -3839, -3838, -3829, -3825, -3820, -3820, -3818, -3825, -3830,
+        -3838, -3844, -3845, -3847, -3853, -3856, -3851, -3847, -3851, -3850,
+        -3851, -3855, -3851, -3856, -3862, -3867, -3868, -3878, -3875, -3877,
+        -3879, -3884, -3883, -3893, -3893, -3889, -3889, -3895, -3893, -3892,
+        -3894, -3893, -3889, -3889, -3893, -3892, -3888, -3891, -3887, -3891,
+        -3886, -3891, -3896, -3903, -3901, -3905, -3906, -3915, -3916, -3914,
+        -3917, -3918, -3920, -3921, -3921, -3930, -3931, -3929, -3924, -3926,
+        -3927, -3931, -3934, -3939, -3940, -3943, -3935, -3938, -3938, -3941,
+        -3948, -3949, -3952, -3951, -3944, -3943, -3952, -3958, -3961, -3961,
+        -3958, -3959, -3957, -3955, -3959, -3961, -3964, -3969, -3974, -3978,
+        -3978, -3977, -3976, -3976, -3979, -3991, -3992, -3987, -3982, -3987,
+        -3993, -3996, -4005, -4010, -4015, -4019, -4019, -4020, -4015, -4010,
+        -4011, -4015, -4019, -4020, -4020, -4021, -4022, -4023, -4027, -4027,
+        -4029, -4031, -4023, -4020, -4023, -4026, -4031, -4032, -4035, -4036,
+        -4039, -4041, -4045, -4046, -4046, -4046, -4054, -4056, -4056, -4057,
+        -4052, -4051, -4047, -4049, -4051, -4053, -4057, -4055, -4055, -4059,
+        -4064, -4068, -4072, -4072, -4072, -4073, -4076, -4077, -4075, -4075,
+        -4076, -4080, -4084, -4089, -4089, -4093, -4093, -4093, -4093, -4093,
+        -4093, -4093, -4093, -4093, -4097, -4098, -4098, -4107, -4107, -4107,
+        -4107, -4107, -4106, -4103, -4102, -4102, -4112, -4113, -4124, -4126,
+        -4127, -4127, -4127, -4127, -4130, -4130, -4128, -4133, -4137, -4142,
+        -4146, -4145, -4145, -4145, -4145, -4145, -4145, -4145, -4148, -4153,
+        -4155, -4155, -4156, -4156, -4156, -4156, -4157, -4161, -4161, -4162,
+        -4165, -4166, -4166, -4166, -4166, -4166, -4166, -4166, -4165, -4165,
+        -4170, -4174, -4174, -4174, -4179, -4183, -4183, -4182, -4182, -4182,
+        -4182, -4182, -4181, -4181, -4181, -4186, -4196, -4202, -4202, -4202,
+        -4211, -4212, -4222, -4220, -4217, -4217, -4217, -4216, -4212, -4210,
+        -4209, -4213, -4217, -4222, -4227, -4227, -4226, -4226, -4225, -4225,
+        -4230, -4234, -4231, -4232, -4235, -4232, -4230, -4229, -4229, -4231,
+        -4233, -4234, -4239, -4239, -4243, -4243, -4245, -4240, -4239, -4240,
+        -4245, -4245, -4250, -4255, -4254, -4254, -4246, -4244, -4240, -4235,
+        -4241, -4249, -4253, -4249, -4251, -4257, -4258, -4258, -4267, -4268,
+        -4273, -4275, -4277, -4276, -4279, -4278, -4279, -4278, -4277, -4282,
+        -4285, -4290, -4289, -4290, -4287, -4289, -4285, -4299, -4296, -4299,
+        -4303, -4296, -4294, -4292, -4289, -4284, -4283, -4285, -4281, -4282,
+        -4284, -4287, -4291, -4292, -4296, -4299, -4301, -4308, -4308, -4308,
+        -4306, -4298, -4292, -4297, -4301, -4301, -4304, -4296, -4296, -4297,
+        -4298, -4292, -4292, -4289, -4292, -4292, -4293, -4292, -4297, -4293,
+        -4297, -4301, -4306, -4301, -4301, -4292, -4297, -4297, -4298, -4296,
+        -4293, -4293, -4291, -4292, -4294, -4302, -4299, -4298, -4303, -4303,
+        -4303, -4303, -4303, -4302, -4301, -4306, -4305, -4306, -4307, -4310,
+        -4309, -4307, -4306, -4302, -4298, -4294, -4289, -4287, -4285, -4285,
+        -4285, -4285, -4285, -4285, -4291, -4296, -4296, -4300, -4305, -4304,
+        -4304, -4303, -4294, -4293, -4283, -4283, -4283, -4283, -4284, -4283,
+        -4284, -4284, -4284, -4279, -4275, -4271, -4266, -4266, -4262, -4262,
+        -4264, -4267, -4268, -4268, -4271, -4266, -4266, -4259, -4256, -4257,
+        -4259, -4259, -4260, -4262, -4267, -4262, -4253, -4247, -4246, -4246,
+        -4252, -4258, -4254, -4258, -4254, -4250, -4250, -4247, -4244, -4240,
+        -4237, -4234, -4234, -4233, -4226, -4234, -4235, -4231, -4235, -4230,
+        -4222, -4221, -4216, -4217, -4207, -4207, -4198, -4202, -4206, -4209,
+        -4202, -4201, -4200, -4196, -4194, -4191, -4192, -4190, -4186, -4182,
+        -4177, -4172, -4173, -4171, -4165, -4162, -4161, -4161, -4160, -4156,
+        -4155, -4155, -4150, -4154, -4147, -4149, -4145, -4147, -4151, -4149,
+        -4150, -4150, -4150, -4142, -4142, -4138, -4141, -4133, -4138, -4137,
+        -4135, -4132, -4132, -4127, -4127, -4125, -4120, -4121, -4124, -4127,
+        -4118, -4123, -4123, -4123, -4126, -4125, -4129, -4132, -4131, -4125,
+        -4115, -4106, -4108, -4105, -4100, -4091, -4090, -4085, -4092, -4088,
+        -4085, -4087, -4086, -4092, -4087, -4090, -4092, -4088, -4086, -4086,
+        -4078, -4081, -4074, -4077, -4073, -4072, -4073, -4073, -4072, -4072,
+        -4075, -4070, -4076, -4073, -4065, -4066, -4068, -4063, -4060, -4055,
+        -4053, -4050, -4050, -4059, -4056, -4058, -4063, -4058, -4049, -4043,
+        -4043, -4043, -4040, -4039, -4033, -4032, -4029, -4038, -4045, -4043,
+        -4047, -4043, -4043, -4040, -4036, -4036, -4039, -4038, -4034, -4034,
+        -4040, -4038, -4035, -4039, -4041, -4039, -4039, -4038, -4034, -4038,
+        -4039, -4039, -4043, -4037, -4041, -4038, -4039, -4032, -4031, -4030,
+        -4031, -4035, -4041, -4046, -4048, -4042, -4045, -4051, -4050, -4050,
+        -4048, -4047, -4040, -4036, -4030, -4026, -4026, -4035, -4035, -4044,
+        -4044, -4044, -4044, -4044, -4044, -4053, -4053, -4053, -4062, -4062,
+        -4062, -4063, -4063, -4063, -4063, -4063, -4062, -4062, -4062, -4062,
+        -4062, -4056, -4064, -4061, -4060, -4056, -4056, -4054, -4053, -4055,
+        -4059, -4065, -4066, -4070, -4071, -4079, -4080, -4088, -4090, -4095,
+        -4100, -4096, -4092, -4095, -4092, -4099, -4099, -4106, -4107, -4111,
+        -4104, -4103, -4101, -4105, -4110, -4119, -4119, -4120, -4128, -4128,
+        -4129, -4131, -4131, -4124, -4128, -4133, -4138, -4137, -4137, -4132,
+        -4132, -4137, -4138, -4134, -4134, -4134, -4146, -4157, -4155, -4148,
+        -4167, -4177, -4170, -4164, -4165, -4168, -4159, -4159, -4158, -4158,
+        -4161, -4165, -4172, -4168, -4168, -4177, -4173, -4169, -4161, -4169,
+        -4187, -4185, -4183, -4178, -4184, -4204, -4195, -4192, -4189, -4200,
+        -4193, -4199, -4199, -4195, -4180, -4182, -4178, -4176, -4183, -4175,
+        -4173, -4174, -4180, -4177, -4180, -4178, -4169, -4166, -4168, -4171,
+        -4167, -4169, -4176, -4179, -4177, -4178, -4187, -4192, -4186, -4189,
+        -4189, -4176, -4175, -4176, -4185, -4175, -4166, -4171, -4177, -4171,
+        -4163, -4166, -4167, -4169, -4167, -4167, -4166, -4168, -4169, -4174,
+        -4174, -4172, -4170, -4176, -4180, -4181, -4180, -4178, -4176, -4167,
+        -4174, -4167, -4171, -4161, -4161, -4155, -4152, -4149, -4151, -4146,
+        -4141, -4132, -4127, -4123, -4128, -4128, -4133, -4138, -4134, -4130,
+        -4133, -4128, -4128, -4127, -4127, -4127, -4127, -4127, -4127, -4122,
+        -4117, -4118, -4113, -4108, -4104, -4105, -4109, -4110, -4115, -4120,
+        -4122, -4124, -4124, -4126, -4123, -4120, -4118, -4119, -4120, -4123,
+        -4120, -4126, -4126, -4124, -4127, -4131, -4129, -4128, -4126, -4123,
+        -4132, -4132, -4136, -4134, -4126, -4135, -4133, -4135, -4140, -4145,
+        -4142, -4150, -4155, -4159, -4164, -4164, -4156, -4153, -4168, -4160,
+        -4152, -4152, -4155, -4156, -4151, -4151, -4155, -4158, -4163, -4164,
+        -4167, -4168, -4178, -4179, -4187, -4189, -4190, -4193, -4188, -4199,
+        -4213, -4203, -4188, -4192, -4199, -4198, -4183, -4183, -4188, -4193,
+        -4180, -4184, -4181, -4184, -4175, -4170, -4159, -4155, -4151, -4151,
+        -4148, -4147, -4149, -4144, -4135, -4128, -4116, -4106, -4094, -4080,
+        -4084, -4061, -4053, -4030, -4019, -3982, -3977, -3933, -3915, -3903,
+        -3896, -3873, -3855, -3836, -3813, -3796, -3780, -3778
     };
 
-    static const float robinson_dadson_curve_50_phons[1468] =
+    static const int16_t robinson_dadson_curve_50_phons[1468] =
     {
-        -19.12, -19.07, -19.08, -19.10, -19.08, -19.09, -19.16, -19.21, -19.21, -19.21,
-        -19.28, -19.32, -19.31, -19.39, -19.38, -19.42, -19.45, -19.48, -19.52, -19.49,
-        -19.56, -19.55, -19.62, -19.71, -19.72, -19.75, -19.75, -19.83, -19.81, -19.86,
-        -19.92, -19.99, -20.07, -20.17, -20.23, -20.21, -20.18, -20.24, -20.27, -20.27,
-        -20.23, -20.20, -20.28, -20.25, -20.22, -20.19, -20.26, -20.30, -20.21, -20.24,
-        -20.35, -20.42, -20.50, -20.54, -20.51, -20.53, -20.64, -20.72, -20.71, -20.74,
-        -20.73, -20.72, -20.76, -20.75, -20.69, -20.76, -20.77, -20.73, -20.65, -20.74,
-        -20.79, -20.73, -20.68, -20.68, -20.71, -20.66, -20.67, -20.69, -20.76, -20.84,
-        -20.83, -20.90, -20.96, -20.97, -20.96, -20.91, -20.93, -20.94, -20.91, -21.02,
-        -21.06, -21.17, -21.21, -21.31, -21.31, -21.33, -21.39, -21.40, -21.37, -21.48,
-        -21.51, -21.56, -21.59, -21.63, -21.65, -21.66, -21.63, -21.62, -21.59, -21.60,
-        -21.67, -21.66, -21.70, -21.76, -21.78, -21.83, -21.84, -21.81, -21.90, -21.85,
-        -21.87, -21.89, -21.99, -21.98, -21.98, -22.00, -22.08, -22.08, -22.12, -22.13,
-        -22.14, -22.21, -22.23, -22.22, -22.23, -22.24, -22.33, -22.35, -22.43, -22.44,
-        -22.44, -22.56, -22.57, -22.59, -22.62, -22.71, -22.72, -22.69, -22.68, -22.76,
-        -22.74, -22.71, -22.71, -22.80, -22.81, -22.88, -22.88, -22.85, -22.88, -22.94,
-        -22.95, -22.99, -23.03, -23.06, -23.14, -23.16, -23.18, -23.20, -23.24, -23.28,
-        -23.26, -23.30, -23.30, -23.32, -23.34, -23.37, -23.43, -23.48, -23.51, -23.52,
-        -23.49, -23.49, -23.49, -23.52, -23.54, -23.59, -23.66, -23.72, -23.79, -23.80,
-        -23.77, -23.83, -23.83, -23.80, -23.82, -23.89, -23.95, -24.06, -24.12, -24.17,
-        -24.20, -24.24, -24.22, -24.27, -24.27, -24.32, -24.40, -24.43, -24.48, -24.49,
-        -24.46, -24.41, -24.46, -24.50, -24.50, -24.56, -24.64, -24.66, -24.71, -24.73,
-        -24.74, -24.81, -24.79, -24.80, -24.85, -24.84, -24.95, -24.96, -25.02, -25.05,
-        -25.08, -25.04, -25.09, -25.15, -25.13, -25.23, -25.23, -25.33, -25.34, -25.37,
-        -25.34, -25.35, -25.35, -25.37, -25.44, -25.42, -25.47, -25.50, -25.48, -25.53,
-        -25.54, -25.56, -25.57, -25.57, -25.62, -25.62, -25.61, -25.64, -25.67, -25.66,
-        -25.63, -25.69, -25.69, -25.79, -25.79, -25.89, -25.87, -25.93, -25.91, -25.97,
-        -26.05, -26.13, -26.13, -26.08, -26.10, -26.16, -26.19, -26.19, -26.23, -26.27,
-        -26.33, -26.35, -26.31, -26.37, -26.33, -26.39, -26.39, -26.46, -26.44, -26.46,
-        -26.51, -26.55, -26.58, -26.61, -26.62, -26.61, -26.64, -26.64, -26.65, -26.69,
-        -26.69, -26.74, -26.75, -26.82, -26.88, -26.98, -26.99, -27.05, -27.02, -26.93,
-        -26.97, -27.04, -27.05, -27.01, -27.03, -27.08, -27.08, -26.98, -26.98, -27.03,
-        -27.11, -27.14, -27.16, -27.26, -27.24, -27.23, -27.31, -27.30, -27.31, -27.28,
-        -27.29, -27.33, -27.33, -27.31, -27.36, -27.38, -27.44, -27.44, -27.53, -27.51,
-        -27.56, -27.56, -27.68, -27.61, -27.67, -27.71, -27.71, -27.70, -27.71, -27.70,
-        -27.72, -27.75, -27.73, -27.69, -27.72, -27.75, -27.77, -27.79, -27.86, -27.84,
-        -27.89, -27.86, -27.88, -27.89, -27.87, -27.86, -27.87, -27.89, -27.85, -27.87,
-        -27.89, -27.89, -27.96, -28.01, -28.01, -28.01, -28.03, -28.15, -28.20, -28.23,
-        -28.25, -28.28, -28.28, -28.32, -28.35, -28.39, -28.41, -28.41, -28.46, -28.46,
-        -28.47, -28.46, -28.53, -28.51, -28.55, -28.60, -28.60, -28.61, -28.62, -28.66,
-        -28.65, -28.65, -28.68, -28.73, -28.70, -28.66, -28.63, -28.67, -28.67, -28.72,
-        -28.75, -28.74, -28.84, -28.83, -28.79, -28.79, -28.76, -28.74, -28.78, -28.74,
-        -28.78, -28.77, -28.83, -28.82, -28.89, -28.91, -28.96, -29.01, -29.06, -29.08,
-        -29.06, -29.08, -29.02, -29.05, -29.12, -29.07, -29.06, -29.04, -29.07, -29.03,
-        -29.07, -29.10, -29.18, -29.16, -29.18, -29.17, -29.20, -29.25, -29.21, -29.29,
-        -29.26, -29.30, -29.23, -29.29, -29.32, -29.36, -29.37, -29.40, -29.49, -29.43,
-        -29.49, -29.43, -29.50, -29.48, -29.51, -29.48, -29.52, -29.44, -29.51, -29.48,
-        -29.45, -29.51, -29.58, -29.64, -29.65, -29.67, -29.71, -29.78, -29.82, -29.87,
-        -29.91, -29.87, -29.86, -29.77, -29.76, -29.73, -29.75, -29.71, -29.78, -29.82,
-        -29.87, -29.92, -29.90, -29.89, -29.90, -29.94, -29.88, -29.84, -29.88, -29.87,
-        -29.86, -29.90, -29.88, -29.91, -29.99, -30.04, -30.10, -30.17, -30.19, -30.18,
-        -30.21, -30.25, -30.24, -30.28, -30.31, -30.27, -30.30, -30.32, -30.32, -30.30,
-        -30.30, -30.29, -30.28, -30.28, -30.30, -30.27, -30.22, -30.24, -30.22, -30.24,
-        -30.17, -30.24, -30.26, -30.32, -30.31, -30.32, -30.36, -30.43, -30.46, -30.41,
-        -30.46, -30.46, -30.47, -30.49, -30.50, -30.56, -30.56, -30.53, -30.46, -30.51,
-        -30.49, -30.56, -30.58, -30.61, -30.63, -30.63, -30.56, -30.55, -30.55, -30.59,
-        -30.65, -30.66, -30.67, -30.66, -30.60, -30.57, -30.62, -30.70, -30.71, -30.73,
-        -30.71, -30.76, -30.73, -30.76, -30.78, -30.79, -30.80, -30.85, -30.90, -30.90,
-        -30.93, -30.93, -30.92, -30.92, -30.93, -31.00, -30.97, -30.95, -30.90, -30.92,
-        -30.95, -30.97, -31.01, -31.06, -31.11, -31.14, -31.14, -31.14, -31.11, -31.09,
-        -31.09, -31.12, -31.14, -31.14, -31.14, -31.18, -31.22, -31.23, -31.27, -31.30,
-        -31.30, -31.30, -31.21, -31.17, -31.21, -31.22, -31.30, -31.33, -31.34, -31.35,
-        -31.36, -31.37, -31.40, -31.40, -31.40, -31.40, -31.44, -31.49, -31.50, -31.55,
-        -31.50, -31.50, -31.45, -31.46, -31.45, -31.45, -31.47, -31.45, -31.44, -31.47,
-        -31.49, -31.50, -31.53, -31.53, -31.53, -31.53, -31.57, -31.60, -31.62, -31.65,
-        -31.65, -31.67, -31.69, -31.72, -31.72, -31.74, -31.74, -31.74, -31.74, -31.74,
-        -31.74, -31.74, -31.73, -31.72, -31.74, -31.75, -31.76, -31.80, -31.80, -31.80,
-        -31.81, -31.81, -31.80, -31.79, -31.78, -31.78, -31.88, -31.89, -31.99, -32.01,
-        -32.01, -32.01, -32.01, -32.01, -32.02, -32.03, -32.02, -32.07, -32.09, -32.11,
-        -32.13, -32.10, -32.10, -32.10, -32.10, -32.10, -32.10, -32.10, -32.12, -32.18,
-        -32.20, -32.20, -32.21, -32.21, -32.21, -32.21, -32.22, -32.25, -32.26, -32.27,
-        -32.30, -32.30, -32.31, -32.31, -32.31, -32.31, -32.31, -32.31, -32.28, -32.28,
-        -32.32, -32.33, -32.31, -32.30, -32.34, -32.37, -32.37, -32.34, -32.34, -32.33,
-        -32.32, -32.31, -32.29, -32.28, -32.26, -32.33, -32.43, -32.48, -32.49, -32.49,
-        -32.58, -32.59, -32.69, -32.66, -32.62, -32.61, -32.61, -32.59, -32.54, -32.53,
-        -32.52, -32.57, -32.61, -32.67, -32.72, -32.71, -32.68, -32.66, -32.62, -32.62,
-        -32.68, -32.72, -32.68, -32.71, -32.73, -32.70, -32.70, -32.67, -32.66, -32.68,
-        -32.69, -32.68, -32.73, -32.70, -32.71, -32.74, -32.76, -32.75, -32.74, -32.77,
-        -32.83, -32.81, -32.86, -32.88, -32.87, -32.85, -32.79, -32.78, -32.73, -32.68,
-        -32.73, -32.79, -32.82, -32.78, -32.80, -32.82, -32.84, -32.85, -32.92, -32.90,
-        -32.95, -32.98, -32.97, -32.96, -32.99, -32.97, -32.98, -32.94, -32.92, -32.97,
-        -32.98, -33.03, -33.03, -33.03, -32.99, -33.03, -32.98, -33.10, -33.04, -33.07,
-        -33.10, -33.06, -33.05, -33.01, -33.00, -32.95, -32.96, -32.98, -32.99, -33.01,
-        -33.01, -33.04, -33.06, -33.05, -33.07, -33.10, -33.07, -33.14, -33.12, -33.11,
-        -33.09, -33.05, -32.96, -32.98, -33.01, -32.99, -33.01, -32.97, -32.98, -32.99,
-        -33.02, -32.97, -32.96, -32.95, -32.97, -32.96, -32.99, -32.97, -33.01, -32.95,
-        -32.99, -33.01, -33.03, -33.01, -33.01, -32.94, -32.99, -33.03, -33.02, -33.01,
-        -33.02, -32.98, -32.96, -32.97, -32.98, -33.06, -33.05, -33.05, -33.10, -33.10,
-        -33.07, -33.07, -33.07, -33.04, -33.01, -33.03, -33.01, -33.01, -33.02, -33.05,
-        -33.04, -33.02, -33.01, -32.99, -32.98, -32.96, -32.93, -32.89, -32.82, -32.80,
-        -32.80, -32.80, -32.80, -32.83, -32.91, -32.94, -32.93, -32.95, -32.97, -32.96,
-        -32.94, -32.94, -32.84, -32.83, -32.73, -32.73, -32.74, -32.74, -32.76, -32.75,
-        -32.77, -32.77, -32.78, -32.76, -32.72, -32.72, -32.68, -32.70, -32.69, -32.69,
-        -32.70, -32.71, -32.71, -32.72, -32.73, -32.68, -32.68, -32.59, -32.55, -32.55,
-        -32.57, -32.57, -32.57, -32.61, -32.68, -32.66, -32.57, -32.51, -32.50, -32.50,
-        -32.54, -32.58, -32.54, -32.54, -32.49, -32.46, -32.49, -32.47, -32.45, -32.42,
-        -32.39, -32.36, -32.34, -32.33, -32.28, -32.31, -32.37, -32.32, -32.37, -32.35,
-        -32.28, -32.27, -32.25, -32.28, -32.19, -32.20, -32.12, -32.15, -32.18, -32.20,
-        -32.13, -32.15, -32.09, -32.07, -32.03, -32.00, -32.02, -31.97, -31.97, -31.92,
-        -31.86, -31.85, -31.90, -31.87, -31.80, -31.77, -31.74, -31.74, -31.71, -31.68,
-        -31.66, -31.68, -31.61, -31.62, -31.57, -31.60, -31.56, -31.59, -31.66, -31.65,
-        -31.64, -31.65, -31.66, -31.62, -31.64, -31.58, -31.58, -31.52, -31.57, -31.55,
-        -31.55, -31.52, -31.52, -31.47, -31.49, -31.46, -31.42, -31.44, -31.46, -31.49,
-        -31.45, -31.50, -31.45, -31.47, -31.48, -31.46, -31.49, -31.51, -31.46, -31.41,
-        -31.31, -31.24, -31.23, -31.22, -31.18, -31.12, -31.11, -31.05, -31.13, -31.07,
-        -31.05, -31.08, -31.08, -31.16, -31.12, -31.18, -31.21, -31.17, -31.13, -31.13,
-        -31.06, -31.06, -31.03, -31.05, -31.04, -31.01, -31.06, -31.07, -31.06, -31.08,
-        -31.12, -31.08, -31.11, -31.06, -31.00, -31.02, -30.99, -30.98, -30.97, -30.93,
-        -30.89, -30.87, -30.88, -30.94, -30.92, -30.93, -30.97, -30.91, -30.84, -30.79,
-        -30.76, -30.76, -30.74, -30.74, -30.70, -30.71, -30.68, -30.75, -30.79, -30.78,
-        -30.81, -30.78, -30.79, -30.77, -30.71, -30.73, -30.80, -30.76, -30.72, -30.74,
-        -30.77, -30.75, -30.74, -30.77, -30.83, -30.80, -30.79, -30.74, -30.72, -30.74,
-        -30.75, -30.77, -30.84, -30.81, -30.85, -30.82, -30.84, -30.79, -30.78, -30.75,
-        -30.76, -30.78, -30.83, -30.87, -30.89, -30.83, -30.88, -30.91, -30.91, -30.91,
-        -30.93, -30.94, -30.87, -30.83, -30.77, -30.73, -30.73, -30.77, -30.78, -30.82,
-        -30.81, -30.81, -30.82, -30.82, -30.82, -30.86, -30.86, -30.87, -30.91, -30.92,
-        -30.93, -30.94, -30.94, -30.94, -30.95, -30.94, -30.91, -30.91, -30.91, -30.91,
-        -30.94, -30.91, -30.99, -31.00, -31.00, -30.98, -30.98, -30.97, -30.97, -30.98,
-        -31.00, -31.05, -31.07, -31.10, -31.08, -31.17, -31.18, -31.25, -31.28, -31.33,
-        -31.38, -31.34, -31.29, -31.33, -31.29, -31.33, -31.30, -31.35, -31.32, -31.38,
-        -31.35, -31.34, -31.35, -31.41, -31.42, -31.48, -31.48, -31.51, -31.54, -31.55,
-        -31.53, -31.56, -31.58, -31.50, -31.52, -31.58, -31.60, -31.57, -31.57, -31.55,
-        -31.55, -31.62, -31.64, -31.62, -31.62, -31.62, -31.71, -31.79, -31.76, -31.70,
-        -31.91, -31.97, -31.91, -31.88, -31.91, -31.94, -31.81, -31.81, -31.78, -31.79,
-        -31.82, -31.85, -31.91, -31.88, -31.90, -32.00, -31.93, -31.92, -31.84, -31.93,
-        -32.11, -32.07, -32.03, -31.98, -32.06, -32.24, -32.15, -32.13, -32.12, -32.25,
-        -32.20, -32.24, -32.23, -32.19, -32.06, -32.10, -32.03, -32.02, -32.08, -32.03,
-        -32.01, -32.02, -32.07, -32.04, -32.07, -32.06, -31.99, -31.98, -32.01, -32.05,
-        -32.01, -31.99, -32.08, -32.13, -32.09, -32.07, -32.16, -32.19, -32.13, -32.13,
-        -32.14, -32.04, -32.04, -32.05, -32.10, -32.03, -31.95, -32.00, -32.04, -32.00,
-        -31.94, -31.95, -31.98, -32.03, -32.05, -32.05, -32.03, -32.05, -32.07, -32.12,
-        -32.14, -32.14, -32.15, -32.20, -32.25, -32.26, -32.24, -32.24, -32.22, -32.18,
-        -32.24, -32.16, -32.18, -32.10, -32.10, -32.07, -32.03, -32.03, -32.04, -31.98,
-        -31.92, -31.88, -31.83, -31.81, -31.86, -31.89, -31.93, -31.96, -31.90, -31.88,
-        -31.91, -31.88, -31.87, -31.85, -31.85, -31.84, -31.83, -31.84, -31.85, -31.81,
-        -31.77, -31.78, -31.74, -31.73, -31.71, -31.74, -31.79, -31.77, -31.85, -31.90,
-        -31.93, -31.94, -31.94, -31.98, -31.96, -31.94, -31.89, -31.89, -31.92, -31.93,
-        -31.90, -31.95, -31.97, -31.94, -32.01, -32.08, -32.08, -32.09, -32.08, -32.11,
-        -32.17, -32.18, -32.21, -32.17, -32.13, -32.17, -32.15, -32.18, -32.20, -32.24,
-        -32.22, -32.30, -32.35, -32.36, -32.39, -32.40, -32.38, -32.36, -32.42, -32.43,
-        -32.39, -32.39, -32.41, -32.41, -32.47, -32.47, -32.47, -32.50, -32.56, -32.59,
-        -32.60, -32.61, -32.63, -32.65, -32.74, -32.81, -32.84, -32.89, -32.92, -33.02,
-        -33.14, -33.07, -32.94, -32.96, -33.01, -33.01, -32.87, -32.89, -32.93, -32.98,
-        -32.87, -32.91, -32.88, -32.93, -32.88, -32.85, -32.74, -32.70, -32.67, -32.72,
-        -32.73, -32.72, -32.72, -32.71, -32.65, -32.62, -32.53, -32.42, -32.39, -32.30,
-        -32.29, -32.11, -32.08, -31.86, -31.81, -31.57, -31.55, -31.12, -31.02, -30.98,
-        -30.95, -30.76, -30.63, -30.44, -30.32, -30.22, -30.08, -30.05
+        -1912, -1907, -1908, -1910, -1908, -1909, -1916, -1921, -1921, -1921,
+        -1928, -1932, -1931, -1939, -1938, -1942, -1945, -1948, -1952, -1949,
+        -1956, -1955, -1962, -1971, -1972, -1975, -1975, -1983, -1981, -1986,
+        -1992, -1999, -2007, -2017, -2023, -2021, -2018, -2024, -2027, -2027,
+        -2023, -2020, -2028, -2025, -2022, -2019, -2026, -2030, -2021, -2024,
+        -2035, -2042, -2050, -2054, -2051, -2053, -2064, -2072, -2071, -2074,
+        -2073, -2072, -2076, -2075, -2069, -2076, -2077, -2073, -2065, -2074,
+        -2079, -2073, -2068, -2068, -2071, -2066, -2067, -2069, -2076, -2084,
+        -2083, -2090, -2096, -2097, -2096, -2091, -2093, -2094, -2091, -2102,
+        -2106, -2117, -2121, -2131, -2131, -2133, -2139, -2140, -2137, -2148,
+        -2151, -2156, -2159, -2163, -2165, -2166, -2163, -2162, -2159, -2160,
+        -2167, -2166, -2170, -2176, -2178, -2183, -2184, -2181, -2190, -2185,
+        -2187, -2189, -2199, -2198, -2198, -2200, -2208, -2208, -2212, -2213,
+        -2214, -2221, -2223, -2222, -2223, -2224, -2233, -2235, -2243, -2244,
+        -2244, -2256, -2257, -2259, -2262, -2271, -2272, -2269, -2268, -2276,
+        -2274, -2271, -2271, -2280, -2281, -2288, -2288, -2285, -2288, -2294,
+        -2295, -2299, -2303, -2306, -2314, -2316, -2318, -2320, -2324, -2328,
+        -2326, -2330, -2330, -2332, -2334, -2337, -2343, -2348, -2351, -2352,
+        -2349, -2349, -2349, -2352, -2354, -2359, -2366, -2372, -2379, -2380,
+        -2377, -2383, -2383, -2380, -2382, -2389, -2395, -2406, -2412, -2417,
+        -2420, -2424, -2422, -2427, -2427, -2432, -2440, -2443, -2448, -2449,
+        -2446, -2441, -2446, -2450, -2450, -2456, -2464, -2466, -2471, -2473,
+        -2474, -2481, -2479, -2480, -2485, -2484, -2495, -2496, -2502, -2505,
+        -2508, -2504, -2509, -2515, -2513, -2523, -2523, -2533, -2534, -2537,
+        -2534, -2535, -2535, -2537, -2544, -2542, -2547, -2550, -2548, -2553,
+        -2554, -2556, -2557, -2557, -2562, -2562, -2561, -2564, -2567, -2566,
+        -2563, -2569, -2569, -2579, -2579, -2589, -2587, -2593, -2591, -2597,
+        -2605, -2613, -2613, -2608, -2610, -2616, -2619, -2619, -2623, -2627,
+        -2633, -2635, -2631, -2637, -2633, -2639, -2639, -2646, -2644, -2646,
+        -2651, -2655, -2658, -2661, -2662, -2661, -2664, -2664, -2665, -2669,
+        -2669, -2674, -2675, -2682, -2688, -2698, -2699, -2705, -2702, -2693,
+        -2697, -2704, -2705, -2701, -2703, -2708, -2708, -2698, -2698, -2703,
+        -2711, -2714, -2716, -2726, -2724, -2723, -2731, -2730, -2731, -2728,
+        -2729, -2733, -2733, -2731, -2736, -2738, -2744, -2744, -2753, -2751,
+        -2756, -2756, -2768, -2761, -2767, -2771, -2771, -2770, -2771, -2770,
+        -2772, -2775, -2773, -2769, -2772, -2775, -2777, -2779, -2786, -2784,
+        -2789, -2786, -2788, -2789, -2787, -2786, -2787, -2789, -2785, -2787,
+        -2789, -2789, -2796, -2801, -2801, -2801, -2803, -2815, -2820, -2823,
+        -2825, -2828, -2828, -2832, -2835, -2839, -2841, -2841, -2846, -2846,
+        -2847, -2846, -2853, -2851, -2855, -2860, -2860, -2861, -2862, -2866,
+        -2865, -2865, -2868, -2873, -2870, -2866, -2863, -2867, -2867, -2872,
+        -2875, -2874, -2884, -2883, -2879, -2879, -2876, -2874, -2878, -2874,
+        -2878, -2877, -2883, -2882, -2889, -2891, -2896, -2901, -2906, -2908,
+        -2906, -2908, -2902, -2905, -2912, -2907, -2906, -2904, -2907, -2903,
+        -2907, -2910, -2918, -2916, -2918, -2917, -2920, -2925, -2921, -2929,
+        -2926, -2930, -2923, -2929, -2932, -2936, -2937, -2940, -2949, -2943,
+        -2949, -2943, -2950, -2948, -2951, -2948, -2952, -2944, -2951, -2948,
+        -2945, -2951, -2958, -2964, -2965, -2967, -2971, -2978, -2982, -2987,
+        -2991, -2987, -2986, -2977, -2976, -2973, -2975, -2971, -2978, -2982,
+        -2987, -2992, -2990, -2989, -2990, -2994, -2988, -2984, -2988, -2987,
+        -2986, -2990, -2988, -2991, -2999, -3004, -3010, -3017, -3019, -3018,
+        -3021, -3025, -3024, -3028, -3031, -3027, -3030, -3032, -3032, -3030,
+        -3030, -3029, -3028, -3028, -3030, -3027, -3022, -3024, -3022, -3024,
+        -3017, -3024, -3026, -3032, -3031, -3032, -3036, -3043, -3046, -3041,
+        -3046, -3046, -3047, -3049, -3050, -3056, -3056, -3053, -3046, -3051,
+        -3049, -3056, -3058, -3061, -3063, -3063, -3056, -3055, -3055, -3059,
+        -3065, -3066, -3067, -3066, -3060, -3057, -3062, -3070, -3071, -3073,
+        -3071, -3076, -3073, -3076, -3078, -3079, -3080, -3085, -3090, -3090,
+        -3093, -3093, -3092, -3092, -3093, -3100, -3097, -3095, -3090, -3092,
+        -3095, -3097, -3101, -3106, -3111, -3114, -3114, -3114, -3111, -3109,
+        -3109, -3112, -3114, -3114, -3114, -3118, -3122, -3123, -3127, -3130,
+        -3130, -3130, -3121, -3117, -3121, -3122, -3130, -3133, -3134, -3135,
+        -3136, -3137, -3140, -3140, -3140, -3140, -3144, -3149, -3150, -3155,
+        -3150, -3150, -3145, -3146, -3145, -3145, -3147, -3145, -3144, -3147,
+        -3149, -3150, -3153, -3153, -3153, -3153, -3157, -3160, -3162, -3165,
+        -3165, -3167, -3169, -3172, -3172, -3174, -3174, -3174, -3174, -3174,
+        -3174, -3174, -3173, -3172, -3174, -3175, -3176, -3180, -3180, -3180,
+        -3181, -3181, -3180, -3179, -3178, -3178, -3188, -3189, -3199, -3201,
+        -3201, -3201, -3201, -3201, -3202, -3203, -3202, -3207, -3209, -3211,
+        -3213, -3210, -3210, -3210, -3210, -3210, -3210, -3210, -3212, -3218,
+        -3220, -3220, -3221, -3221, -3221, -3221, -3222, -3225, -3226, -3227,
+        -3230, -3230, -3231, -3231, -3231, -3231, -3231, -3231, -3228, -3228,
+        -3232, -3233, -3231, -3230, -3234, -3237, -3237, -3234, -3234, -3233,
+        -3232, -3231, -3229, -3228, -3226, -3233, -3243, -3248, -3249, -3249,
+        -3258, -3259, -3269, -3266, -3262, -3261, -3261, -3259, -3254, -3253,
+        -3252, -3257, -3261, -3267, -3272, -3271, -3268, -3266, -3262, -3262,
+        -3268, -3272, -3268, -3271, -3273, -3270, -3270, -3267, -3266, -3268,
+        -3269, -3268, -3273, -3270, -3271, -3274, -3276, -3275, -3274, -3277,
+        -3283, -3281, -3286, -3288, -3287, -3285, -3279, -3278, -3273, -3268,
+        -3273, -3279, -3282, -3278, -3280, -3282, -3284, -3285, -3292, -3290,
+        -3295, -3298, -3297, -3296, -3299, -3297, -3298, -3294, -3292, -3297,
+        -3298, -3303, -3303, -3303, -3299, -3303, -3298, -3310, -3304, -3307,
+        -3310, -3306, -3305, -3301, -3300, -3295, -3296, -3298, -3299, -3301,
+        -3301, -3304, -3306, -3305, -3307, -3310, -3307, -3314, -3312, -3311,
+        -3309, -3305, -3296, -3298, -3301, -3299, -3301, -3297, -3298, -3299,
+        -3302, -3297, -3296, -3295, -3297, -3296, -3299, -3297, -3301, -3295,
+        -3299, -3301, -3303, -3301, -3301, -3294, -3299, -3303, -3302, -3301,
+        -3302, -3298, -3296, -3297, -3298, -3306, -3305, -3305, -3310, -3310,
+        -3307, -3307, -3307, -3304, -3301, -3303, -3301, -3301, -3302, -3305,
+        -3304, -3302, -3301, -3299, -3298, -3296, -3293, -3289, -3282, -3280,
+        -3280, -3280, -3280, -3283, -3291, -3294, -3293, -3295, -3297, -3296,
+        -3294, -3294, -3284, -3283, -3273, -3273, -3274, -3274, -3276, -3275,
+        -3277, -3277, -3278, -3276, -3272, -3272, -3268, -3270, -3269, -3269,
+        -3270, -3271, -3271, -3272, -3273, -3268, -3268, -3259, -3255, -3255,
+        -3257, -3257, -3257, -3261, -3268, -3266, -3257, -3251, -3250, -3250,
+        -3254, -3258, -3254, -3254, -3249, -3246, -3249, -3247, -3245, -3242,
+        -3239, -3236, -3234, -3233, -3228, -3231, -3237, -3232, -3237, -3235,
+        -3228, -3227, -3225, -3228, -3219, -3220, -3212, -3215, -3218, -3220,
+        -3213, -3215, -3209, -3207, -3203, -3200, -3202, -3197, -3197, -3192,
+        -3186, -3185, -3190, -3187, -3180, -3177, -3174, -3174, -3171, -3168,
+        -3166, -3168, -3161, -3162, -3157, -3160, -3156, -3159, -3166, -3165,
+        -3164, -3165, -3166, -3162, -3164, -3158, -3158, -3152, -3157, -3155,
+        -3155, -3152, -3152, -3147, -3149, -3146, -3142, -3144, -3146, -3149,
+        -3145, -3150, -3145, -3147, -3148, -3146, -3149, -3151, -3146, -3141,
+        -3131, -3124, -3123, -3122, -3118, -3112, -3111, -3105, -3113, -3107,
+        -3105, -3108, -3108, -3116, -3112, -3118, -3121, -3117, -3113, -3113,
+        -3106, -3106, -3103, -3105, -3104, -3101, -3106, -3107, -3106, -3108,
+        -3112, -3108, -3111, -3106, -3100, -3102, -3099, -3098, -3097, -3093,
+        -3089, -3087, -3088, -3094, -3092, -3093, -3097, -3091, -3084, -3079,
+        -3076, -3076, -3074, -3074, -3070, -3071, -3068, -3075, -3079, -3078,
+        -3081, -3078, -3079, -3077, -3071, -3073, -3080, -3076, -3072, -3074,
+        -3077, -3075, -3074, -3077, -3083, -3080, -3079, -3074, -3072, -3074,
+        -3075, -3077, -3084, -3081, -3085, -3082, -3084, -3079, -3078, -3075,
+        -3076, -3078, -3083, -3087, -3089, -3083, -3088, -3091, -3091, -3091,
+        -3093, -3094, -3087, -3083, -3077, -3073, -3073, -3077, -3078, -3082,
+        -3081, -3081, -3082, -3082, -3082, -3086, -3086, -3087, -3091, -3092,
+        -3093, -3094, -3094, -3094, -3095, -3094, -3091, -3091, -3091, -3091,
+        -3094, -3091, -3099, -3100, -3100, -3098, -3098, -3097, -3097, -3098,
+        -3100, -3105, -3107, -3110, -3108, -3117, -3118, -3125, -3128, -3133,
+        -3138, -3134, -3129, -3133, -3129, -3133, -3130, -3135, -3132, -3138,
+        -3135, -3134, -3135, -3141, -3142, -3148, -3148, -3151, -3154, -3155,
+        -3153, -3156, -3158, -3150, -3152, -3158, -3160, -3157, -3157, -3155,
+        -3155, -3162, -3164, -3162, -3162, -3162, -3171, -3179, -3176, -3170,
+        -3191, -3197, -3191, -3188, -3191, -3194, -3181, -3181, -3178, -3179,
+        -3182, -3185, -3191, -3188, -3190, -3200, -3193, -3192, -3184, -3193,
+        -3211, -3207, -3203, -3198, -3206, -3224, -3215, -3213, -3212, -3225,
+        -3220, -3224, -3223, -3219, -3206, -3210, -3203, -3202, -3208, -3203,
+        -3201, -3202, -3207, -3204, -3207, -3206, -3199, -3198, -3201, -3205,
+        -3201, -3199, -3208, -3213, -3209, -3207, -3216, -3219, -3213, -3213,
+        -3214, -3204, -3204, -3205, -3210, -3203, -3195, -3200, -3204, -3200,
+        -3194, -3195, -3198, -3203, -3205, -3205, -3203, -3205, -3207, -3212,
+        -3214, -3214, -3215, -3220, -3225, -3226, -3224, -3224, -3222, -3218,
+        -3224, -3216, -3218, -3210, -3210, -3207, -3203, -3203, -3204, -3198,
+        -3192, -3188, -3183, -3181, -3186, -3189, -3193, -3196, -3190, -3188,
+        -3191, -3188, -3187, -3185, -3185, -3184, -3183, -3184, -3185, -3181,
+        -3177, -3178, -3174, -3173, -3171, -3174, -3179, -3177, -3185, -3190,
+        -3193, -3194, -3194, -3198, -3196, -3194, -3189, -3189, -3192, -3193,
+        -3190, -3195, -3197, -3194, -3201, -3208, -3208, -3209, -3208, -3211,
+        -3217, -3218, -3221, -3217, -3213, -3217, -3215, -3218, -3220, -3224,
+        -3222, -3230, -3235, -3236, -3239, -3240, -3238, -3236, -3242, -3243,
+        -3239, -3239, -3241, -3241, -3247, -3247, -3247, -3250, -3256, -3259,
+        -3260, -3261, -3263, -3265, -3274, -3281, -3284, -3289, -3292, -3302,
+        -3314, -3307, -3294, -3296, -3301, -3301, -3287, -3289, -3293, -3298,
+        -3287, -3291, -3288, -3293, -3288, -3285, -3274, -3270, -3267, -3272,
+        -3273, -3272, -3272, -3271, -3265, -3262, -3253, -3242, -3239, -3230,
+        -3229, -3211, -3208, -3186, -3181, -3157, -3155, -3112, -3102, -3098,
+        -3095, -3076, -3063, -3044, -3032, -3022, -3008, -3005
     };
 
-    static const float robinson_dadson_curve_60_phons[1468] =
+    static const int16_t robinson_dadson_curve_60_phons[1468] =
     {
-        -13.75, -13.70, -13.75, -13.79, -13.80, -13.81, -13.86, -13.89, -13.86, -13.86,
-        -13.91, -13.98, -13.96, -13.98, -13.95, -14.00, -14.02, -14.00, -14.01, -13.97,
-        -14.02, -14.02, -14.11, -14.16, -14.17, -14.21, -14.22, -14.30, -14.29, -14.37,
-        -14.38, -14.45, -14.52, -14.58, -14.63, -14.64, -14.59, -14.66, -14.63, -14.61,
-        -14.59, -14.58, -14.63, -14.61, -14.58, -14.52, -14.59, -14.64, -14.58, -14.59,
-        -14.74, -14.73, -14.78, -14.82, -14.79, -14.85, -15.00, -15.10, -15.05, -15.10,
-        -15.06, -15.03, -15.05, -14.98, -14.89, -14.94, -14.94, -14.91, -14.75, -14.80,
-        -14.78, -14.69, -14.67, -14.68, -14.71, -14.65, -14.65, -14.66, -14.74, -14.84,
-        -14.81, -14.83, -14.89, -14.88, -14.84, -14.83, -14.84, -14.85, -14.84, -14.84,
-        -14.95, -15.10, -15.21, -15.30, -15.30, -15.26, -15.35, -15.36, -15.31, -15.45,
-        -15.51, -15.52, -15.53, -15.55, -15.60, -15.58, -15.55, -15.56, -15.51, -15.54,
-        -15.58, -15.57, -15.61, -15.64, -15.64, -15.68, -15.71, -15.67, -15.72, -15.69,
-        -15.72, -15.72, -15.80, -15.80, -15.83, -15.86, -15.88, -15.83, -15.83, -15.82,
-        -15.83, -15.93, -15.93, -15.93, -15.90, -15.90, -16.01, -16.03, -16.07, -16.08,
-        -16.08, -16.18, -16.19, -16.18, -16.19, -16.25, -16.29, -16.25, -16.23, -16.29,
-        -16.25, -16.23, -16.24, -16.33, -16.34, -16.38, -16.35, -16.31, -16.37, -16.44,
-        -16.43, -16.42, -16.44, -16.48, -16.57, -16.60, -16.61, -16.59, -16.63, -16.62,
-        -16.57, -16.60, -16.59, -16.60, -16.62, -16.65, -16.68, -16.69, -16.70, -16.70,
-        -16.70, -16.70, -16.70, -16.71, -16.73, -16.76, -16.86, -16.92, -17.01, -17.01,
-        -16.96, -17.00, -16.96, -16.96, -16.99, -17.05, -17.11, -17.20, -17.22, -17.27,
-        -17.32, -17.32, -17.28, -17.33, -17.32, -17.38, -17.43, -17.46, -17.49, -17.49,
-        -17.43, -17.38, -17.43, -17.43, -17.42, -17.47, -17.56, -17.58, -17.62, -17.63,
-        -17.64, -17.73, -17.68, -17.69, -17.73, -17.69, -17.78, -17.79, -17.83, -17.86,
-        -17.89, -17.83, -17.90, -17.93, -17.91, -17.99, -17.99, -18.10, -18.10, -18.12,
-        -18.10, -18.12, -18.10, -18.10, -18.15, -18.10, -18.15, -18.18, -18.16, -18.21,
-        -18.21, -18.21, -18.20, -18.22, -18.24, -18.21, -18.23, -18.25, -18.25, -18.23,
-        -18.21, -18.21, -18.20, -18.30, -18.31, -18.41, -18.37, -18.46, -18.41, -18.46,
-        -18.56, -18.66, -18.64, -18.61, -18.61, -18.67, -18.69, -18.71, -18.73, -18.79,
-        -18.85, -18.87, -18.78, -18.85, -18.78, -18.84, -18.78, -18.87, -18.83, -18.88,
-        -18.94, -18.97, -18.99, -19.01, -18.98, -18.97, -18.98, -18.98, -18.99, -19.03,
-        -19.03, -19.08, -19.07, -19.13, -19.16, -19.25, -19.28, -19.32, -19.29, -19.21,
-        -19.24, -19.29, -19.29, -19.23, -19.23, -19.28, -19.28, -19.17, -19.18, -19.24,
-        -19.29, -19.32, -19.34, -19.44, -19.39, -19.39, -19.49, -19.49, -19.49, -19.44,
-        -19.44, -19.49, -19.49, -19.46, -19.51, -19.53, -19.57, -19.55, -19.64, -19.62,
-        -19.66, -19.65, -19.74, -19.65, -19.70, -19.75, -19.78, -19.76, -19.75, -19.74,
-        -19.74, -19.75, -19.75, -19.75, -19.81, -19.83, -19.85, -19.90, -19.91, -19.88,
-        -19.89, -19.83, -19.83, -19.80, -19.77, -19.75, -19.71, -19.75, -19.72, -19.76,
-        -19.80, -19.83, -19.91, -19.96, -19.96, -19.96, -19.96, -20.06, -20.07, -20.11,
-        -20.12, -20.17, -20.17, -20.22, -20.27, -20.32, -20.32, -20.32, -20.36, -20.37,
-        -20.35, -20.34, -20.42, -20.37, -20.37, -20.42, -20.44, -20.43, -20.46, -20.46,
-        -20.43, -20.42, -20.43, -20.47, -20.43, -20.40, -20.35, -20.39, -20.37, -20.42,
-        -20.45, -20.42, -20.52, -20.51, -20.47, -20.47, -20.43, -20.42, -20.46, -20.43,
-        -20.44, -20.43, -20.47, -20.48, -20.57, -20.58, -20.65, -20.74, -20.78, -20.78,
-        -20.76, -20.78, -20.68, -20.69, -20.77, -20.68, -20.65, -20.63, -20.66, -20.63,
-        -20.68, -20.69, -20.78, -20.72, -20.75, -20.74, -20.80, -20.86, -20.85, -20.94,
-        -20.90, -20.94, -20.85, -20.83, -20.83, -20.88, -20.92, -20.95, -21.04, -21.00,
-        -21.04, -21.00, -21.09, -21.04, -21.04, -21.05, -21.10, -21.03, -21.11, -21.05,
-        -21.04, -21.07, -21.15, -21.19, -21.19, -21.19, -21.22, -21.27, -21.31, -21.35,
-        -21.38, -21.35, -21.34, -21.25, -21.27, -21.25, -21.30, -21.25, -21.30, -21.34,
-        -21.36, -21.40, -21.35, -21.30, -21.28, -21.32, -21.24, -21.22, -21.25, -21.25,
-        -21.21, -21.25, -21.25, -21.27, -21.37, -21.41, -21.51, -21.56, -21.62, -21.60,
-        -21.63, -21.67, -21.65, -21.63, -21.69, -21.66, -21.71, -21.69, -21.71, -21.68,
-        -21.66, -21.66, -21.67, -21.67, -21.66, -21.61, -21.57, -21.56, -21.56, -21.56,
-        -21.48, -21.56, -21.56, -21.62, -21.61, -21.59, -21.66, -21.70, -21.76, -21.67,
-        -21.76, -21.73, -21.74, -21.77, -21.78, -21.82, -21.82, -21.77, -21.67, -21.77,
-        -21.72, -21.82, -21.82, -21.82, -21.86, -21.84, -21.77, -21.72, -21.71, -21.77,
-        -21.82, -21.82, -21.81, -21.80, -21.77, -21.71, -21.73, -21.82, -21.82, -21.85,
-        -21.83, -21.92, -21.90, -21.97, -21.96, -21.98, -21.97, -22.01, -22.06, -22.03,
-        -22.07, -22.09, -22.09, -22.08, -22.07, -22.09, -22.03, -22.02, -21.97, -21.98,
-        -21.98, -21.98, -21.98, -22.02, -22.08, -22.08, -22.08, -22.09, -22.07, -22.07,
-        -22.08, -22.08, -22.09, -22.08, -22.08, -22.15, -22.23, -22.23, -22.27, -22.32,
-        -22.31, -22.28, -22.19, -22.13, -22.18, -22.19, -22.29, -22.34, -22.34, -22.34,
-        -22.34, -22.34, -22.34, -22.34, -22.34, -22.34, -22.34, -22.42, -22.44, -22.53,
-        -22.49, -22.48, -22.44, -22.42, -22.39, -22.37, -22.36, -22.34, -22.34, -22.34,
-        -22.34, -22.33, -22.33, -22.34, -22.34, -22.34, -22.37, -22.42, -22.49, -22.54,
-        -22.54, -22.54, -22.54, -22.54, -22.54, -22.54, -22.54, -22.54, -22.54, -22.54,
-        -22.54, -22.54, -22.53, -22.51, -22.52, -22.53, -22.54, -22.54, -22.54, -22.54,
-        -22.54, -22.54, -22.54, -22.54, -22.54, -22.54, -22.64, -22.65, -22.74, -22.75,
-        -22.75, -22.75, -22.75, -22.75, -22.75, -22.75, -22.75, -22.81, -22.81, -22.81,
-        -22.80, -22.75, -22.75, -22.75, -22.75, -22.75, -22.75, -22.75, -22.77, -22.82,
-        -22.85, -22.85, -22.85, -22.86, -22.86, -22.86, -22.87, -22.90, -22.91, -22.92,
-        -22.95, -22.95, -22.96, -22.96, -22.96, -22.96, -22.96, -22.95, -22.91, -22.91,
-        -22.93, -22.92, -22.89, -22.86, -22.88, -22.90, -22.90, -22.85, -22.85, -22.83,
-        -22.81, -22.79, -22.76, -22.74, -22.72, -22.80, -22.90, -22.95, -22.96, -22.96,
-        -23.05, -23.06, -23.16, -23.11, -23.06, -23.06, -23.06, -23.01, -22.96, -22.96,
-        -22.96, -23.01, -23.06, -23.12, -23.16, -23.16, -23.09, -23.06, -23.00, -23.00,
-        -23.05, -23.10, -23.06, -23.10, -23.11, -23.08, -23.11, -23.06, -23.04, -23.06,
-        -23.05, -23.01, -23.06, -23.01, -23.00, -23.05, -23.07, -23.10, -23.09, -23.13,
-        -23.20, -23.16, -23.21, -23.22, -23.20, -23.15, -23.11, -23.11, -23.05, -23.01,
-        -23.06, -23.09, -23.11, -23.06, -23.08, -23.07, -23.11, -23.12, -23.16, -23.12,
-        -23.16, -23.21, -23.17, -23.16, -23.19, -23.16, -23.16, -23.11, -23.06, -23.12,
-        -23.12, -23.15, -23.16, -23.16, -23.12, -23.16, -23.11, -23.20, -23.12, -23.16,
-        -23.16, -23.16, -23.16, -23.10, -23.11, -23.05, -23.09, -23.12, -23.16, -23.21,
-        -23.19, -23.21, -23.21, -23.18, -23.18, -23.21, -23.14, -23.20, -23.16, -23.14,
-        -23.11, -23.11, -23.00, -23.00, -23.01, -22.97, -22.99, -22.98, -22.99, -23.01,
-        -23.06, -23.01, -22.99, -23.02, -23.01, -23.00, -23.06, -23.01, -23.04, -22.97,
-        -23.01, -23.01, -23.01, -23.01, -23.01, -22.96, -23.01, -23.10, -23.06, -23.06,
-        -23.10, -23.04, -23.01, -23.01, -23.03, -23.11, -23.11, -23.11, -23.16, -23.16,
-        -23.11, -23.11, -23.11, -23.06, -23.01, -23.01, -22.96, -22.96, -22.97, -23.00,
-        -22.99, -22.97, -22.96, -22.97, -22.97, -22.97, -22.97, -22.91, -22.80, -22.75,
-        -22.75, -22.75, -22.75, -22.80, -22.90, -22.92, -22.91, -22.90, -22.90, -22.88,
-        -22.85, -22.84, -22.74, -22.73, -22.63, -22.63, -22.64, -22.65, -22.68, -22.67,
-        -22.70, -22.70, -22.73, -22.73, -22.70, -22.73, -22.70, -22.75, -22.75, -22.75,
-        -22.75, -22.75, -22.75, -22.75, -22.75, -22.70, -22.69, -22.59, -22.54, -22.54,
-        -22.54, -22.54, -22.54, -22.59, -22.70, -22.69, -22.61, -22.55, -22.54, -22.54,
-        -22.56, -22.58, -22.53, -22.49, -22.44, -22.41, -22.49, -22.47, -22.45, -22.44,
-        -22.41, -22.38, -22.34, -22.33, -22.30, -22.29, -22.38, -22.34, -22.39, -22.39,
-        -22.34, -22.34, -22.34, -22.38, -22.31, -22.33, -22.27, -22.28, -22.29, -22.31,
-        -22.25, -22.28, -22.19, -22.18, -22.12, -22.09, -22.12, -22.03, -22.07, -22.03,
-        -21.95, -21.98, -22.08, -22.03, -21.95, -21.93, -21.87, -21.87, -21.82, -21.80,
-        -21.77, -21.81, -21.72, -21.71, -21.66, -21.70, -21.67, -21.72, -21.82, -21.80,
-        -21.77, -21.81, -21.81, -21.82, -21.86, -21.78, -21.76, -21.72, -21.76, -21.72,
-        -21.75, -21.72, -21.72, -21.67, -21.71, -21.67, -21.63, -21.67, -21.69, -21.71,
-        -21.71, -21.77, -21.67, -21.72, -21.71, -21.67, -21.69, -21.71, -21.62, -21.57,
-        -21.46, -21.43, -21.39, -21.40, -21.35, -21.33, -21.32, -21.25, -21.35, -21.27,
-        -21.25, -21.30, -21.31, -21.40, -21.36, -21.46, -21.50, -21.46, -21.40, -21.40,
-        -21.35, -21.30, -21.32, -21.33, -21.36, -21.30, -21.40, -21.40, -21.41, -21.43,
-        -21.50, -21.46, -21.47, -21.39, -21.35, -21.37, -21.31, -21.34, -21.35, -21.30,
-        -21.26, -21.25, -21.26, -21.30, -21.28, -21.27, -21.30, -21.25, -21.20, -21.14,
-        -21.10, -21.10, -21.09, -21.10, -21.07, -21.09, -21.06, -21.11, -21.12, -21.13,
-        -21.14, -21.12, -21.14, -21.14, -21.06, -21.10, -21.20, -21.14, -21.10, -21.13,
-        -21.15, -21.13, -21.13, -21.15, -21.25, -21.20, -21.20, -21.10, -21.10, -21.10,
-        -21.11, -21.15, -21.25, -21.25, -21.30, -21.25, -21.28, -21.26, -21.25, -21.20,
-        -21.20, -21.20, -21.26, -21.27, -21.30, -21.23, -21.30, -21.32, -21.32, -21.31,
-        -21.38, -21.41, -21.33, -21.30, -21.24, -21.20, -21.20, -21.20, -21.20, -21.19,
-        -21.19, -21.19, -21.19, -21.20, -21.20, -21.20, -21.20, -21.20, -21.21, -21.22,
-        -21.24, -21.25, -21.25, -21.25, -21.26, -21.25, -21.20, -21.20, -21.20, -21.20,
-        -21.25, -21.26, -21.35, -21.40, -21.40, -21.40, -21.40, -21.40, -21.40, -21.40,
-        -21.40, -21.45, -21.48, -21.50, -21.46, -21.55, -21.56, -21.63, -21.66, -21.71,
-        -21.76, -21.72, -21.66, -21.71, -21.66, -21.67, -21.61, -21.63, -21.56, -21.65,
-        -21.66, -21.66, -21.70, -21.78, -21.74, -21.77, -21.77, -21.82, -21.81, -21.81,
-        -21.78, -21.80, -21.84, -21.75, -21.77, -21.82, -21.82, -21.77, -21.77, -21.78,
-        -21.77, -21.86, -21.90, -21.90, -21.90, -21.90, -21.96, -22.02, -21.97, -21.92,
-        -22.14, -22.16, -22.11, -22.11, -22.16, -22.21, -22.03, -22.03, -21.98, -22.01,
-        -22.04, -22.05, -22.10, -22.08, -22.12, -22.22, -22.13, -22.15, -22.08, -22.18,
-        -22.34, -22.29, -22.23, -22.18, -22.28, -22.44, -22.36, -22.34, -22.35, -22.50,
-        -22.47, -22.48, -22.48, -22.43, -22.31, -22.38, -22.28, -22.28, -22.32, -22.31,
-        -22.29, -22.30, -22.34, -22.31, -22.34, -22.33, -22.29, -22.30, -22.34, -22.38,
-        -22.35, -22.28, -22.41, -22.48, -22.42, -22.36, -22.45, -22.46, -22.39, -22.36,
-        -22.38, -22.32, -22.34, -22.33, -22.35, -22.31, -22.24, -22.28, -22.31, -22.28,
-        -22.24, -22.24, -22.28, -22.38, -22.43, -22.43, -22.41, -22.43, -22.45, -22.50,
-        -22.53, -22.57, -22.59, -22.65, -22.70, -22.70, -22.68, -22.70, -22.68, -22.70,
-        -22.74, -22.65, -22.65, -22.59, -22.59, -22.58, -22.55, -22.56, -22.56, -22.50,
-        -22.44, -22.44, -22.39, -22.39, -22.44, -22.49, -22.53, -22.54, -22.47, -22.46,
-        -22.49, -22.49, -22.46, -22.43, -22.43, -22.41, -22.39, -22.42, -22.43, -22.40,
-        -22.37, -22.39, -22.36, -22.37, -22.38, -22.43, -22.49, -22.44, -22.54, -22.59,
-        -22.65, -22.65, -22.63, -22.70, -22.69, -22.68, -22.60, -22.59, -22.64, -22.63,
-        -22.59, -22.64, -22.68, -22.65, -22.76, -22.84, -22.87, -22.91, -22.90, -22.98,
-        -23.02, -23.04, -23.06, -23.01, -23.00, -23.00, -22.98, -23.01, -23.01, -23.03,
-        -23.02, -23.11, -23.15, -23.12, -23.14, -23.17, -23.20, -23.19, -23.17, -23.27,
-        -23.27, -23.26, -23.27, -23.26, -23.42, -23.44, -23.40, -23.42, -23.49, -23.53,
-        -23.54, -23.53, -23.48, -23.52, -23.60, -23.73, -23.78, -23.85, -23.95, -24.05,
-        -24.14, -24.10, -24.00, -23.99, -24.03, -24.04, -23.91, -23.94, -23.97, -24.04,
-        -23.95, -23.99, -23.94, -24.03, -24.00, -23.99, -23.88, -23.84, -23.84, -23.92,
-        -23.99, -23.96, -23.94, -23.99, -23.95, -23.96, -23.89, -23.79, -23.84, -23.80,
-        -23.74, -23.61, -23.63, -23.43, -23.42, -23.33, -23.33, -22.90, -22.90, -22.93,
-        -22.95, -22.78, -22.70, -22.51, -22.51, -22.48, -22.35, -22.32
+        -1375, -1370, -1375, -1379, -1380, -1381, -1386, -1389, -1386, -1386,
+        -1391, -1398, -1396, -1398, -1395, -1400, -1402, -1400, -1401, -1397,
+        -1402, -1402, -1411, -1416, -1417, -1421, -1422, -1430, -1429, -1437,
+        -1438, -1445, -1452, -1458, -1463, -1464, -1459, -1466, -1463, -1461,
+        -1459, -1458, -1463, -1461, -1458, -1452, -1459, -1464, -1458, -1459,
+        -1474, -1473, -1478, -1482, -1479, -1485, -1500, -1510, -1505, -1510,
+        -1506, -1503, -1505, -1498, -1489, -1494, -1494, -1491, -1475, -1480,
+        -1478, -1469, -1467, -1468, -1471, -1465, -1465, -1466, -1474, -1484,
+        -1481, -1483, -1489, -1488, -1484, -1483, -1484, -1485, -1484, -1484,
+        -1495, -1510, -1521, -1530, -1530, -1526, -1535, -1536, -1531, -1545,
+        -1551, -1552, -1553, -1555, -1560, -1558, -1555, -1556, -1551, -1554,
+        -1558, -1557, -1561, -1564, -1564, -1568, -1571, -1567, -1572, -1569,
+        -1572, -1572, -1580, -1580, -1583, -1586, -1588, -1583, -1583, -1582,
+        -1583, -1593, -1593, -1593, -1590, -1590, -1601, -1603, -1607, -1608,
+        -1608, -1618, -1619, -1618, -1619, -1625, -1629, -1625, -1623, -1629,
+        -1625, -1623, -1624, -1633, -1634, -1638, -1635, -1631, -1637, -1644,
+        -1643, -1642, -1644, -1648, -1657, -1660, -1661, -1659, -1663, -1662,
+        -1657, -1660, -1659, -1660, -1662, -1665, -1668, -1669, -1670, -1670,
+        -1670, -1670, -1670, -1671, -1673, -1676, -1686, -1692, -1701, -1701,
+        -1696, -1700, -1696, -1696, -1699, -1705, -1711, -1720, -1722, -1727,
+        -1732, -1732, -1728, -1733, -1732, -1738, -1743, -1746, -1749, -1749,
+        -1743, -1738, -1743, -1743, -1742, -1747, -1756, -1758, -1762, -1763,
+        -1764, -1773, -1768, -1769, -1773, -1769, -1778, -1779, -1783, -1786,
+        -1789, -1783, -1790, -1793, -1791, -1799, -1799, -1810, -1810, -1812,
+        -1810, -1812, -1810, -1810, -1815, -1810, -1815, -1818, -1816, -1821,
+        -1821, -1821, -1820, -1822, -1824, -1821, -1823, -1825, -1825, -1823,
+        -1821, -1821, -1820, -1830, -1831, -1841, -1837, -1846, -1841, -1846,
+        -1856, -1866, -1864, -1861, -1861, -1867, -1869, -1871, -1873, -1879,
+        -1885, -1887, -1878, -1885, -1878, -1884, -1878, -1887, -1883, -1888,
+        -1894, -1897, -1899, -1901, -1898, -1897, -1898, -1898, -1899, -1903,
+        -1903, -1908, -1907, -1913, -1916, -1925, -1928, -1932, -1929, -1921,
+        -1924, -1929, -1929, -1923, -1923, -1928, -1928, -1917, -1918, -1924,
+        -1929, -1932, -1934, -1944, -1939, -1939, -1949, -1949, -1949, -1944,
+        -1944, -1949, -1949, -1946, -1951, -1953, -1957, -1955, -1964, -1962,
+        -1966, -1965, -1974, -1965, -1970, -1975, -1978, -1976, -1975, -1974,
+        -1974, -1975, -1975, -1975, -1981, -1983, -1985, -1990, -1991, -1988,
+        -1989, -1983, -1983, -1980, -1977, -1975, -1971, -1975, -1972, -1976,
+        -1980, -1983, -1991, -1996, -1996, -1996, -1996, -2006, -2007, -2011,
+        -2012, -2017, -2017, -2022, -2027, -2032, -2032, -2032, -2036, -2037,
+        -2035, -2034, -2042, -2037, -2037, -2042, -2044, -2043, -2046, -2046,
+        -2043, -2042, -2043, -2047, -2043, -2040, -2035, -2039, -2037, -2042,
+        -2045, -2042, -2052, -2051, -2047, -2047, -2043, -2042, -2046, -2043,
+        -2044, -2043, -2047, -2048, -2057, -2058, -2065, -2074, -2078, -2078,
+        -2076, -2078, -2068, -2069, -2077, -2068, -2065, -2063, -2066, -2063,
+        -2068, -2069, -2078, -2072, -2075, -2074, -2080, -2086, -2085, -2094,
+        -2090, -2094, -2085, -2083, -2083, -2088, -2092, -2095, -2104, -2100,
+        -2104, -2100, -2109, -2104, -2104, -2105, -2110, -2103, -2111, -2105,
+        -2104, -2107, -2115, -2119, -2119, -2119, -2122, -2127, -2131, -2135,
+        -2138, -2135, -2134, -2125, -2127, -2125, -2130, -2125, -2130, -2134,
+        -2136, -2140, -2135, -2130, -2128, -2132, -2124, -2122, -2125, -2125,
+        -2121, -2125, -2125, -2127, -2137, -2141, -2151, -2156, -2162, -2160,
+        -2163, -2167, -2165, -2163, -2169, -2166, -2171, -2169, -2171, -2168,
+        -2166, -2166, -2167, -2167, -2166, -2161, -2157, -2156, -2156, -2156,
+        -2148, -2156, -2156, -2162, -2161, -2159, -2166, -2170, -2176, -2167,
+        -2176, -2173, -2174, -2177, -2178, -2182, -2182, -2177, -2167, -2177,
+        -2172, -2182, -2182, -2182, -2186, -2184, -2177, -2172, -2171, -2177,
+        -2182, -2182, -2181, -2180, -2177, -2171, -2173, -2182, -2182, -2185,
+        -2183, -2192, -2190, -2197, -2196, -2198, -2197, -2201, -2206, -2203,
+        -2207, -2209, -2209, -2208, -2207, -2209, -2203, -2202, -2197, -2198,
+        -2198, -2198, -2198, -2202, -2208, -2208, -2208, -2209, -2207, -2207,
+        -2208, -2208, -2209, -2208, -2208, -2215, -2223, -2223, -2227, -2232,
+        -2231, -2228, -2219, -2213, -2218, -2219, -2229, -2234, -2234, -2234,
+        -2234, -2234, -2234, -2234, -2234, -2234, -2234, -2242, -2244, -2253,
+        -2249, -2248, -2244, -2242, -2239, -2237, -2236, -2234, -2234, -2234,
+        -2234, -2233, -2233, -2234, -2234, -2234, -2237, -2242, -2249, -2254,
+        -2254, -2254, -2254, -2254, -2254, -2254, -2254, -2254, -2254, -2254,
+        -2254, -2254, -2253, -2251, -2252, -2253, -2254, -2254, -2254, -2254,
+        -2254, -2254, -2254, -2254, -2254, -2254, -2264, -2265, -2274, -2275,
+        -2275, -2275, -2275, -2275, -2275, -2275, -2275, -2281, -2281, -2281,
+        -2280, -2275, -2275, -2275, -2275, -2275, -2275, -2275, -2277, -2282,
+        -2285, -2285, -2285, -2286, -2286, -2286, -2287, -2290, -2291, -2292,
+        -2295, -2295, -2296, -2296, -2296, -2296, -2296, -2295, -2291, -2291,
+        -2293, -2292, -2289, -2286, -2288, -2290, -2290, -2285, -2285, -2283,
+        -2281, -2279, -2276, -2274, -2272, -2280, -2290, -2295, -2296, -2296,
+        -2305, -2306, -2316, -2311, -2306, -2306, -2306, -2301, -2296, -2296,
+        -2296, -2301, -2306, -2312, -2316, -2316, -2309, -2306, -2300, -2300,
+        -2305, -2310, -2306, -2310, -2311, -2308, -2311, -2306, -2304, -2306,
+        -2305, -2301, -2306, -2301, -2300, -2305, -2307, -2310, -2309, -2313,
+        -2320, -2316, -2321, -2322, -2320, -2315, -2311, -2311, -2305, -2301,
+        -2306, -2309, -2311, -2306, -2308, -2307, -2311, -2312, -2316, -2312,
+        -2316, -2321, -2317, -2316, -2319, -2316, -2316, -2311, -2306, -2312,
+        -2312, -2315, -2316, -2316, -2312, -2316, -2311, -2320, -2312, -2316,
+        -2316, -2316, -2316, -2310, -2311, -2305, -2309, -2312, -2316, -2321,
+        -2319, -2321, -2321, -2318, -2318, -2321, -2314, -2320, -2316, -2314,
+        -2311, -2311, -2300, -2300, -2301, -2297, -2299, -2298, -2299, -2301,
+        -2306, -2301, -2299, -2302, -2301, -2300, -2306, -2301, -2304, -2297,
+        -2301, -2301, -2301, -2301, -2301, -2296, -2301, -2310, -2306, -2306,
+        -2310, -2304, -2301, -2301, -2303, -2311, -2311, -2311, -2316, -2316,
+        -2311, -2311, -2311, -2306, -2301, -2301, -2296, -2296, -2297, -2300,
+        -2299, -2297, -2296, -2297, -2297, -2297, -2297, -2291, -2280, -2275,
+        -2275, -2275, -2275, -2280, -2290, -2292, -2291, -2290, -2290, -2288,
+        -2285, -2284, -2274, -2273, -2263, -2263, -2264, -2265, -2268, -2267,
+        -2270, -2270, -2273, -2273, -2270, -2273, -2270, -2275, -2275, -2275,
+        -2275, -2275, -2275, -2275, -2275, -2270, -2269, -2259, -2254, -2254,
+        -2254, -2254, -2254, -2259, -2270, -2269, -2261, -2255, -2254, -2254,
+        -2256, -2258, -2253, -2249, -2244, -2241, -2249, -2247, -2245, -2244,
+        -2241, -2238, -2234, -2233, -2230, -2229, -2238, -2234, -2239, -2239,
+        -2234, -2234, -2234, -2238, -2231, -2233, -2227, -2228, -2229, -2231,
+        -2225, -2228, -2219, -2218, -2212, -2209, -2212, -2203, -2207, -2203,
+        -2195, -2198, -2208, -2203, -2195, -2193, -2187, -2187, -2182, -2180,
+        -2177, -2181, -2172, -2171, -2166, -2170, -2167, -2172, -2182, -2180,
+        -2177, -2181, -2181, -2182, -2186, -2178, -2176, -2172, -2176, -2172,
+        -2175, -2172, -2172, -2167, -2171, -2167, -2163, -2167, -2169, -2171,
+        -2171, -2177, -2167, -2172, -2171, -2167, -2169, -2171, -2162, -2157,
+        -2146, -2143, -2139, -2140, -2135, -2133, -2132, -2125, -2135, -2127,
+        -2125, -2130, -2131, -2140, -2136, -2146, -2150, -2146, -2140, -2140,
+        -2135, -2130, -2132, -2133, -2136, -2130, -2140, -2140, -2141, -2143,
+        -2150, -2146, -2147, -2139, -2135, -2137, -2131, -2134, -2135, -2130,
+        -2126, -2125, -2126, -2130, -2128, -2127, -2130, -2125, -2120, -2114,
+        -2110, -2110, -2109, -2110, -2107, -2109, -2106, -2111, -2112, -2113,
+        -2114, -2112, -2114, -2114, -2106, -2110, -2120, -2114, -2110, -2113,
+        -2115, -2113, -2113, -2115, -2125, -2120, -2120, -2110, -2110, -2110,
+        -2111, -2115, -2125, -2125, -2130, -2125, -2128, -2126, -2125, -2120,
+        -2120, -2120, -2126, -2127, -2130, -2123, -2130, -2132, -2132, -2131,
+        -2138, -2141, -2133, -2130, -2124, -2120, -2120, -2120, -2120, -2119,
+        -2119, -2119, -2119, -2120, -2120, -2120, -2120, -2120, -2121, -2122,
+        -2124, -2125, -2125, -2125, -2126, -2125, -2120, -2120, -2120, -2120,
+        -2125, -2126, -2135, -2140, -2140, -2140, -2140, -2140, -2140, -2140,
+        -2140, -2145, -2148, -2150, -2146, -2155, -2156, -2163, -2166, -2171,
+        -2176, -2172, -2166, -2171, -2166, -2167, -2161, -2163, -2156, -2165,
+        -2166, -2166, -2170, -2178, -2174, -2177, -2177, -2182, -2181, -2181,
+        -2178, -2180, -2184, -2175, -2177, -2182, -2182, -2177, -2177, -2178,
+        -2177, -2186, -2190, -2190, -2190, -2190, -2196, -2202, -2197, -2192,
+        -2214, -2216, -2211, -2211, -2216, -2221, -2203, -2203, -2198, -2201,
+        -2204, -2205, -2210, -2208, -2212, -2222, -2213, -2215, -2208, -2218,
+        -2234, -2229, -2223, -2218, -2228, -2244, -2236, -2234, -2235, -2250,
+        -2247, -2248, -2248, -2243, -2231, -2238, -2228, -2228, -2232, -2231,
+        -2229, -2230, -2234, -2231, -2234, -2233, -2229, -2230, -2234, -2238,
+        -2235, -2228, -2241, -2248, -2242, -2236, -2245, -2246, -2239, -2236,
+        -2238, -2232, -2234, -2233, -2235, -2231, -2224, -2228, -2231, -2228,
+        -2224, -2224, -2228, -2238, -2243, -2243, -2241, -2243, -2245, -2250,
+        -2253, -2257, -2259, -2265, -2270, -2270, -2268, -2270, -2268, -2270,
+        -2274, -2265, -2265, -2259, -2259, -2258, -2255, -2256, -2256, -2250,
+        -2244, -2244, -2239, -2239, -2244, -2249, -2253, -2254, -2247, -2246,
+        -2249, -2249, -2246, -2243, -2243, -2241, -2239, -2242, -2243, -2240,
+        -2237, -2239, -2236, -2237, -2238, -2243, -2249, -2244, -2254, -2259,
+        -2265, -2265, -2263, -2270, -2269, -2268, -2260, -2259, -2264, -2263,
+        -2259, -2264, -2268, -2265, -2276, -2284, -2287, -2291, -2290, -2298,
+        -2302, -2304, -2306, -2301, -2300, -2300, -2298, -2301, -2301, -2303,
+        -2302, -2311, -2315, -2312, -2314, -2317, -2320, -2319, -2317, -2327,
+        -2327, -2326, -2327, -2326, -2342, -2344, -2340, -2342, -2349, -2353,
+        -2354, -2353, -2348, -2352, -2360, -2373, -2378, -2385, -2395, -2405,
+        -2414, -2410, -2400, -2399, -2403, -2404, -2391, -2394, -2397, -2404,
+        -2395, -2399, -2394, -2403, -2400, -2399, -2388, -2384, -2384, -2392,
+        -2399, -2396, -2394, -2399, -2395, -2396, -2389, -2379, -2384, -2380,
+        -2374, -2361, -2363, -2343, -2342, -2333, -2333, -2290, -2290, -2293,
+        -2295, -2278, -2270, -2251, -2251, -2248, -2235, -2232
     };
 
-    static const float robinson_dadson_curve_70_phons[1468] =
+    static const int16_t robinson_dadson_curve_70_phons[1468] =
     {
-        -7.77, -7.74, -7.77, -7.79, -7.80, -7.80, -7.83, -7.85, -7.84, -7.83,
-        -7.86, -7.90, -7.89, -7.90, -7.88, -7.91, -7.92, -7.91, -7.92, -7.89,
-        -7.92, -7.92, -7.98, -8.00, -8.01, -8.03, -8.04, -8.08, -8.07, -8.12,
-        -8.13, -8.17, -8.21, -8.24, -8.27, -8.28, -8.25, -8.29, -8.27, -8.26,
-        -8.25, -8.24, -8.27, -8.26, -8.24, -8.21, -8.24, -8.27, -8.24, -8.25,
-        -8.33, -8.33, -8.35, -8.38, -8.36, -8.39, -8.48, -8.53, -8.51, -8.53,
-        -8.51, -8.49, -8.51, -8.47, -8.42, -8.44, -8.45, -8.42, -8.33, -8.37,
-        -8.36, -8.31, -8.29, -8.30, -8.31, -8.28, -8.28, -8.29, -8.33, -8.39,
-        -8.37, -8.38, -8.42, -8.41, -8.39, -8.38, -8.39, -8.40, -8.39, -8.39,
-        -8.45, -8.54, -8.59, -8.65, -8.65, -8.63, -8.67, -8.68, -8.65, -8.73,
-        -8.77, -8.77, -8.78, -8.79, -8.82, -8.81, -8.79, -8.79, -8.77, -8.78,
-        -8.81, -8.80, -8.82, -8.84, -8.84, -8.86, -8.88, -8.86, -8.89, -8.87,
-        -8.88, -8.88, -8.93, -8.93, -8.94, -8.96, -8.97, -8.95, -8.94, -8.94,
-        -8.95, -9.01, -9.00, -9.00, -8.99, -8.99, -9.05, -9.06, -9.09, -9.09,
-        -9.09, -9.15, -9.15, -9.15, -9.15, -9.19, -9.21, -9.19, -9.17, -9.21,
-        -9.18, -9.18, -9.18, -9.23, -9.24, -9.26, -9.24, -9.22, -9.25, -9.29,
-        -9.29, -9.28, -9.29, -9.31, -9.36, -9.38, -9.39, -9.38, -9.40, -9.39,
-        -9.36, -9.38, -9.38, -9.38, -9.40, -9.41, -9.43, -9.43, -9.44, -9.44,
-        -9.44, -9.44, -9.44, -9.45, -9.46, -9.48, -9.53, -9.56, -9.61, -9.62,
-        -9.59, -9.61, -9.59, -9.59, -9.60, -9.64, -9.67, -9.72, -9.73, -9.76,
-        -9.79, -9.79, -9.76, -9.80, -9.79, -9.82, -9.85, -9.87, -9.89, -9.88,
-        -9.85, -9.83, -9.85, -9.85, -9.85, -9.88, -9.93, -9.94, -9.96, -9.96,
-        -9.97, -10.02, -10.00, -10.00, -10.02, -10.00, -10.05, -10.06, -10.08, -10.09,
-        -10.11, -10.08, -10.11, -10.14, -10.12, -10.17, -10.17, -10.23, -10.23, -10.24,
-        -10.23, -10.24, -10.23, -10.23, -10.26, -10.23, -10.26, -10.27, -10.26, -10.29,
-        -10.29, -10.29, -10.29, -10.30, -10.31, -10.29, -10.31, -10.31, -10.31, -10.30,
-        -10.29, -10.29, -10.29, -10.34, -10.35, -10.40, -10.38, -10.43, -10.41, -10.43,
-        -10.49, -10.55, -10.54, -10.52, -10.52, -10.55, -10.57, -10.58, -10.59, -10.62,
-        -10.65, -10.66, -10.61, -10.65, -10.61, -10.65, -10.62, -10.66, -10.64, -10.67,
-        -10.70, -10.72, -10.73, -10.75, -10.73, -10.72, -10.73, -10.73, -10.73, -10.76,
-        -10.76, -10.78, -10.78, -10.81, -10.83, -10.88, -10.90, -10.92, -10.90, -10.86,
-        -10.87, -10.91, -10.90, -10.87, -10.87, -10.90, -10.90, -10.83, -10.84, -10.87,
-        -10.90, -10.92, -10.93, -10.99, -10.96, -10.96, -11.02, -11.02, -11.01, -10.99,
-        -10.99, -11.02, -11.01, -11.00, -11.03, -11.04, -11.06, -11.05, -11.10, -11.09,
-        -11.11, -11.11, -11.16, -11.11, -11.13, -11.16, -11.18, -11.17, -11.16, -11.16,
-        -11.16, -11.16, -11.16, -11.16, -11.20, -11.21, -11.22, -11.25, -11.25, -11.23,
-        -11.24, -11.21, -11.21, -11.19, -11.18, -11.16, -11.14, -11.16, -11.15, -11.17,
-        -11.19, -11.21, -11.26, -11.28, -11.28, -11.28, -11.28, -11.34, -11.34, -11.37,
-        -11.37, -11.40, -11.40, -11.43, -11.46, -11.49, -11.49, -11.49, -11.51, -11.51,
-        -11.50, -11.50, -11.54, -11.52, -11.51, -11.54, -11.55, -11.54, -11.56, -11.57,
-        -11.55, -11.54, -11.55, -11.57, -11.54, -11.53, -11.50, -11.53, -11.52, -11.54,
-        -11.56, -11.54, -11.60, -11.59, -11.57, -11.57, -11.55, -11.54, -11.56, -11.54,
-        -11.55, -11.55, -11.57, -11.57, -11.63, -11.63, -11.67, -11.72, -11.75, -11.75,
-        -11.74, -11.74, -11.69, -11.69, -11.74, -11.69, -11.67, -11.66, -11.68, -11.66,
-        -11.69, -11.69, -11.74, -11.71, -11.73, -11.72, -11.76, -11.79, -11.78, -11.84,
-        -11.81, -11.83, -11.78, -11.78, -11.77, -11.80, -11.83, -11.84, -11.89, -11.87,
-        -11.89, -11.87, -11.92, -11.89, -11.89, -11.90, -11.92, -11.89, -11.93, -11.90,
-        -11.89, -11.91, -11.95, -11.98, -11.98, -11.98, -12.00, -12.02, -12.04, -12.07,
-        -12.09, -12.07, -12.06, -12.01, -12.02, -12.01, -12.04, -12.01, -12.04, -12.06,
-        -12.07, -12.10, -12.07, -12.04, -12.03, -12.05, -12.01, -11.99, -12.01, -12.01,
-        -11.99, -12.01, -12.01, -12.02, -12.08, -12.10, -12.16, -12.19, -12.22, -12.21,
-        -12.22, -12.25, -12.24, -12.23, -12.26, -12.24, -12.27, -12.26, -12.27, -12.25,
-        -12.24, -12.24, -12.25, -12.25, -12.24, -12.22, -12.19, -12.19, -12.19, -12.19,
-        -12.14, -12.18, -12.19, -12.22, -12.21, -12.20, -12.24, -12.27, -12.30, -12.25,
-        -12.30, -12.28, -12.29, -12.30, -12.31, -12.33, -12.33, -12.30, -12.25, -12.30,
-        -12.28, -12.33, -12.33, -12.33, -12.36, -12.34, -12.30, -12.27, -12.27, -12.30,
-        -12.33, -12.33, -12.33, -12.32, -12.30, -12.27, -12.28, -12.33, -12.33, -12.35,
-        -12.34, -12.39, -12.38, -12.42, -12.41, -12.42, -12.42, -12.44, -12.47, -12.45,
-        -12.47, -12.49, -12.48, -12.48, -12.48, -12.49, -12.45, -12.44, -12.42, -12.42,
-        -12.42, -12.42, -12.42, -12.45, -12.48, -12.48, -12.48, -12.48, -12.48, -12.48,
-        -12.48, -12.48, -12.49, -12.48, -12.48, -12.52, -12.57, -12.57, -12.59, -12.61,
-        -12.61, -12.59, -12.54, -12.51, -12.54, -12.54, -12.60, -12.63, -12.63, -12.63,
-        -12.63, -12.63, -12.63, -12.63, -12.63, -12.63, -12.63, -12.67, -12.68, -12.73,
-        -12.71, -12.71, -12.68, -12.67, -12.65, -12.64, -12.64, -12.63, -12.63, -12.63,
-        -12.63, -12.62, -12.62, -12.62, -12.62, -12.63, -12.65, -12.67, -12.71, -12.74,
-        -12.74, -12.74, -12.74, -12.74, -12.74, -12.74, -12.74, -12.74, -12.74, -12.74,
-        -12.74, -12.74, -12.73, -12.72, -12.73, -12.74, -12.74, -12.74, -12.74, -12.74,
-        -12.74, -12.74, -12.74, -12.74, -12.74, -12.74, -12.80, -12.80, -12.86, -12.86,
-        -12.86, -12.86, -12.86, -12.86, -12.86, -12.86, -12.86, -12.89, -12.89, -12.89,
-        -12.89, -12.86, -12.86, -12.86, -12.86, -12.86, -12.86, -12.86, -12.87, -12.90,
-        -12.91, -12.92, -12.92, -12.92, -12.92, -12.92, -12.92, -12.95, -12.95, -12.95,
-        -12.97, -12.97, -12.98, -12.98, -12.98, -12.98, -12.98, -12.97, -12.95, -12.95,
-        -12.96, -12.96, -12.94, -12.92, -12.93, -12.95, -12.95, -12.92, -12.91, -12.90,
-        -12.89, -12.88, -12.86, -12.85, -12.84, -12.88, -12.94, -12.97, -12.97, -12.98,
-        -13.03, -13.04, -13.09, -13.06, -13.03, -13.03, -13.03, -13.01, -12.97, -12.97,
-        -12.97, -13.00, -13.03, -13.07, -13.09, -13.09, -13.05, -13.03, -13.00, -13.00,
-        -13.03, -13.05, -13.03, -13.06, -13.06, -13.05, -13.06, -13.03, -13.02, -13.03,
-        -13.03, -13.01, -13.03, -13.01, -13.00, -13.03, -13.04, -13.06, -13.05, -13.07,
-        -13.11, -13.09, -13.12, -13.12, -13.11, -13.09, -13.06, -13.06, -13.03, -13.01,
-        -13.03, -13.05, -13.06, -13.04, -13.05, -13.04, -13.06, -13.07, -13.09, -13.07,
-        -13.09, -13.12, -13.10, -13.09, -13.11, -13.09, -13.09, -13.06, -13.03, -13.07,
-        -13.07, -13.09, -13.09, -13.09, -13.07, -13.09, -13.06, -13.11, -13.07, -13.09,
-        -13.09, -13.09, -13.09, -13.06, -13.06, -13.03, -13.05, -13.07, -13.09, -13.12,
-        -13.11, -13.12, -13.12, -13.10, -13.10, -13.12, -13.08, -13.12, -13.09, -13.08,
-        -13.06, -13.06, -13.00, -13.00, -13.00, -12.98, -12.99, -12.99, -13.00, -13.01,
-        -13.03, -13.00, -12.99, -13.01, -13.01, -13.00, -13.03, -13.00, -13.02, -12.98,
-        -13.00, -13.01, -13.00, -13.00, -13.00, -12.98, -13.00, -13.05, -13.03, -13.03,
-        -13.06, -13.02, -13.01, -13.00, -13.01, -13.06, -13.06, -13.06, -13.09, -13.09,
-        -13.06, -13.06, -13.06, -13.03, -13.00, -13.00, -12.98, -12.98, -12.98, -13.00,
-        -12.99, -12.98, -12.98, -12.98, -12.99, -12.99, -12.98, -12.95, -12.89, -12.86,
-        -12.86, -12.86, -12.86, -12.89, -12.95, -12.96, -12.95, -12.95, -12.95, -12.93,
-        -12.91, -12.91, -12.85, -12.85, -12.79, -12.79, -12.80, -12.80, -12.82, -12.81,
-        -12.83, -12.83, -12.84, -12.85, -12.83, -12.85, -12.83, -12.86, -12.86, -12.86,
-        -12.86, -12.86, -12.86, -12.86, -12.86, -12.83, -12.83, -12.77, -12.74, -12.74,
-        -12.74, -12.74, -12.74, -12.77, -12.83, -12.83, -12.78, -12.75, -12.74, -12.74,
-        -12.75, -12.76, -12.74, -12.71, -12.68, -12.67, -12.71, -12.70, -12.69, -12.68,
-        -12.67, -12.65, -12.63, -12.62, -12.60, -12.60, -12.65, -12.63, -12.65, -12.66,
-        -12.63, -12.62, -12.63, -12.65, -12.61, -12.62, -12.59, -12.59, -12.60, -12.61,
-        -12.57, -12.59, -12.54, -12.54, -12.51, -12.49, -12.50, -12.45, -12.48, -12.45,
-        -12.41, -12.42, -12.48, -12.45, -12.41, -12.39, -12.36, -12.36, -12.33, -12.32,
-        -12.30, -12.33, -12.27, -12.27, -12.24, -12.26, -12.25, -12.27, -12.33, -12.32,
-        -12.31, -12.33, -12.33, -12.33, -12.36, -12.31, -12.30, -12.28, -12.30, -12.28,
-        -12.30, -12.28, -12.28, -12.25, -12.27, -12.25, -12.23, -12.25, -12.26, -12.27,
-        -12.27, -12.30, -12.25, -12.27, -12.27, -12.25, -12.26, -12.27, -12.22, -12.19,
-        -12.13, -12.11, -12.09, -12.09, -12.07, -12.05, -12.05, -12.01, -12.07, -12.02,
-        -12.01, -12.04, -12.04, -12.09, -12.07, -12.13, -12.15, -12.13, -12.09, -12.09,
-        -12.07, -12.04, -12.05, -12.06, -12.07, -12.04, -12.10, -12.10, -12.10, -12.11,
-        -12.15, -12.13, -12.13, -12.09, -12.07, -12.08, -12.05, -12.06, -12.07, -12.04,
-        -12.02, -12.01, -12.01, -12.04, -12.03, -12.02, -12.04, -12.01, -11.98, -11.95,
-        -11.93, -11.93, -11.92, -11.93, -11.91, -11.92, -11.91, -11.93, -11.94, -11.94,
-        -11.95, -11.94, -11.95, -11.95, -11.91, -11.92, -11.98, -11.95, -11.92, -11.94,
-        -11.95, -11.94, -11.94, -11.95, -12.01, -11.98, -11.98, -11.93, -11.93, -11.93,
-        -11.93, -11.95, -12.01, -12.01, -12.04, -12.01, -12.03, -12.02, -12.01, -11.98,
-        -11.98, -11.99, -12.02, -12.02, -12.04, -12.00, -12.04, -12.05, -12.05, -12.05,
-        -12.08, -12.10, -12.06, -12.04, -12.00, -11.98, -11.98, -11.98, -11.98, -11.98,
-        -11.98, -11.98, -11.98, -11.98, -11.98, -11.98, -11.98, -11.98, -11.99, -11.99,
-        -12.00, -12.01, -12.01, -12.01, -12.02, -12.01, -11.98, -11.98, -11.98, -11.98,
-        -12.01, -12.01, -12.07, -12.10, -12.10, -12.10, -12.10, -12.10, -12.10, -12.10,
-        -12.10, -12.12, -12.14, -12.15, -12.13, -12.18, -12.19, -12.23, -12.24, -12.27,
-        -12.30, -12.27, -12.24, -12.27, -12.24, -12.25, -12.22, -12.23, -12.19, -12.24,
-        -12.24, -12.24, -12.26, -12.31, -12.29, -12.30, -12.30, -12.33, -12.33, -12.33,
-        -12.31, -12.32, -12.35, -12.30, -12.30, -12.33, -12.33, -12.30, -12.30, -12.31,
-        -12.30, -12.36, -12.38, -12.38, -12.38, -12.38, -12.41, -12.44, -12.42, -12.39,
-        -12.51, -12.53, -12.50, -12.50, -12.53, -12.55, -12.45, -12.45, -12.42, -12.44,
-        -12.46, -12.46, -12.49, -12.48, -12.50, -12.56, -12.51, -12.52, -12.48, -12.54,
-        -12.63, -12.60, -12.57, -12.54, -12.59, -12.68, -12.64, -12.63, -12.63, -12.72,
-        -12.70, -12.71, -12.71, -12.68, -12.61, -12.65, -12.59, -12.60, -12.62, -12.61,
-        -12.60, -12.60, -12.63, -12.61, -12.63, -12.62, -12.60, -12.60, -12.63, -12.65,
-        -12.63, -12.59, -12.66, -12.70, -12.67, -12.64, -12.69, -12.69, -12.66, -12.64,
-        -12.65, -12.62, -12.63, -12.62, -12.63, -12.61, -12.57, -12.59, -12.61, -12.59,
-        -12.57, -12.57, -12.59, -12.65, -12.68, -12.68, -12.67, -12.68, -12.69, -12.72,
-        -12.73, -12.76, -12.77, -12.80, -12.83, -12.83, -12.82, -12.83, -12.82, -12.83,
-        -12.85, -12.80, -12.80, -12.77, -12.77, -12.76, -12.74, -12.75, -12.75, -12.72,
-        -12.68, -12.68, -12.65, -12.65, -12.68, -12.71, -12.74, -12.74, -12.70, -12.70,
-        -12.71, -12.71, -12.70, -12.68, -12.68, -12.66, -12.66, -12.67, -12.68, -12.66,
-        -12.65, -12.66, -12.64, -12.64, -12.65, -12.68, -12.71, -12.68, -12.74, -12.77,
-        -12.80, -12.80, -12.79, -12.83, -12.83, -12.82, -12.78, -12.77, -12.80, -12.79,
-        -12.77, -12.80, -12.82, -12.80, -12.86, -12.91, -12.93, -12.95, -12.94, -12.99,
-        -13.01, -13.02, -13.03, -13.01, -13.00, -13.00, -12.99, -13.00, -13.00, -13.02,
-        -13.01, -13.06, -13.09, -13.07, -13.08, -13.09, -13.11, -13.11, -13.09, -13.15,
-        -13.15, -13.15, -13.15, -13.15, -13.24, -13.25, -13.23, -13.24, -13.28, -13.30,
-        -13.31, -13.30, -13.27, -13.29, -13.34, -13.41, -13.44, -13.48, -13.54, -13.59,
-        -13.65, -13.62, -13.57, -13.56, -13.58, -13.59, -13.51, -13.53, -13.55, -13.59,
-        -13.54, -13.56, -13.53, -13.58, -13.56, -13.56, -13.50, -13.47, -13.47, -13.52,
-        -13.56, -13.54, -13.53, -13.56, -13.53, -13.54, -13.50, -13.45, -13.47, -13.45,
-        -13.42, -13.35, -13.36, -13.24, -13.24, -13.19, -13.19, -12.95, -12.94, -12.96,
-        -12.97, -12.88, -12.83, -12.72, -12.72, -12.71, -12.63, -12.61
+        -777, -774, -777, -779, -780, -780, -783, -785, -784, -783,
+        -786, -790, -789, -790, -788, -791, -792, -791, -792, -789,
+        -792, -792, -798, -800, -801, -803, -804, -808, -807, -812,
+        -813, -817, -821, -824, -827, -828, -825, -829, -827, -826,
+        -825, -824, -827, -826, -824, -821, -824, -827, -824, -825,
+        -833, -833, -835, -838, -836, -839, -848, -853, -851, -853,
+        -851, -849, -851, -847, -842, -844, -845, -842, -833, -837,
+        -836, -831, -829, -830, -831, -828, -828, -829, -833, -839,
+        -837, -838, -842, -841, -839, -838, -839, -840, -839, -839,
+        -845, -854, -859, -865, -865, -863, -867, -868, -865, -873,
+        -877, -877, -878, -879, -882, -881, -879, -879, -877, -878,
+        -881, -880, -882, -884, -884, -886, -888, -886, -889, -887,
+        -888, -888, -893, -893, -894, -896, -897, -895, -894, -894,
+        -895, -901, -900, -900, -899, -899, -905, -906, -909, -909,
+        -909, -915, -915, -915, -915, -919, -921, -919, -917, -921,
+        -918, -918, -918, -923, -924, -926, -924, -922, -925, -929,
+        -929, -928, -929, -931, -936, -938, -939, -938, -940, -939,
+        -936, -938, -938, -938, -940, -941, -943, -943, -944, -944,
+        -944, -944, -944, -945, -946, -948, -953, -956, -961, -962,
+        -959, -961, -959, -959, -960, -964, -967, -972, -973, -976,
+        -979, -979, -976, -980, -979, -982, -985, -987, -989, -988,
+        -985, -983, -985, -985, -985, -988, -993, -994, -996, -996,
+        -997, -1002, -1000, -1000, -1002, -1000, -1005, -1006, -1008, -1009,
+        -1011, -1008, -1011, -1014, -1012, -1017, -1017, -1023, -1023, -1024,
+        -1023, -1024, -1023, -1023, -1026, -1023, -1026, -1027, -1026, -1029,
+        -1029, -1029, -1029, -1030, -1031, -1029, -1031, -1031, -1031, -1030,
+        -1029, -1029, -1029, -1034, -1035, -1040, -1038, -1043, -1041, -1043,
+        -1049, -1055, -1054, -1052, -1052, -1055, -1057, -1058, -1059, -1062,
+        -1065, -1066, -1061, -1065, -1061, -1065, -1062, -1066, -1064, -1067,
+        -1070, -1072, -1073, -1075, -1073, -1072, -1073, -1073, -1073, -1076,
+        -1076, -1078, -1078, -1081, -1083, -1088, -1090, -1092, -1090, -1086,
+        -1087, -1091, -1090, -1087, -1087, -1090, -1090, -1083, -1084, -1087,
+        -1090, -1092, -1093, -1099, -1096, -1096, -1102, -1102, -1101, -1099,
+        -1099, -1102, -1101, -1100, -1103, -1104, -1106, -1105, -1110, -1109,
+        -1111, -1111, -1116, -1111, -1113, -1116, -1118, -1117, -1116, -1116,
+        -1116, -1116, -1116, -1116, -1120, -1121, -1122, -1125, -1125, -1123,
+        -1124, -1121, -1121, -1119, -1118, -1116, -1114, -1116, -1115, -1117,
+        -1119, -1121, -1126, -1128, -1128, -1128, -1128, -1134, -1134, -1137,
+        -1137, -1140, -1140, -1143, -1146, -1149, -1149, -1149, -1151, -1151,
+        -1150, -1150, -1154, -1152, -1151, -1154, -1155, -1154, -1156, -1157,
+        -1155, -1154, -1155, -1157, -1154, -1153, -1150, -1153, -1152, -1154,
+        -1156, -1154, -1160, -1159, -1157, -1157, -1155, -1154, -1156, -1154,
+        -1155, -1155, -1157, -1157, -1163, -1163, -1167, -1172, -1175, -1175,
+        -1174, -1174, -1169, -1169, -1174, -1169, -1167, -1166, -1168, -1166,
+        -1169, -1169, -1174, -1171, -1173, -1172, -1176, -1179, -1178, -1184,
+        -1181, -1183, -1178, -1178, -1177, -1180, -1183, -1184, -1189, -1187,
+        -1189, -1187, -1192, -1189, -1189, -1190, -1192, -1189, -1193, -1190,
+        -1189, -1191, -1195, -1198, -1198, -1198, -1200, -1202, -1204, -1207,
+        -1209, -1207, -1206, -1201, -1202, -1201, -1204, -1201, -1204, -1206,
+        -1207, -1210, -1207, -1204, -1203, -1205, -1201, -1199, -1201, -1201,
+        -1199, -1201, -1201, -1202, -1208, -1210, -1216, -1219, -1222, -1221,
+        -1222, -1225, -1224, -1223, -1226, -1224, -1227, -1226, -1227, -1225,
+        -1224, -1224, -1225, -1225, -1224, -1222, -1219, -1219, -1219, -1219,
+        -1214, -1218, -1219, -1222, -1221, -1220, -1224, -1227, -1230, -1225,
+        -1230, -1228, -1229, -1230, -1231, -1233, -1233, -1230, -1225, -1230,
+        -1228, -1233, -1233, -1233, -1236, -1234, -1230, -1227, -1227, -1230,
+        -1233, -1233, -1233, -1232, -1230, -1227, -1228, -1233, -1233, -1235,
+        -1234, -1239, -1238, -1242, -1241, -1242, -1242, -1244, -1247, -1245,
+        -1247, -1249, -1248, -1248, -1248, -1249, -1245, -1244, -1242, -1242,
+        -1242, -1242, -1242, -1245, -1248, -1248, -1248, -1248, -1248, -1248,
+        -1248, -1248, -1249, -1248, -1248, -1252, -1257, -1257, -1259, -1261,
+        -1261, -1259, -1254, -1251, -1254, -1254, -1260, -1263, -1263, -1263,
+        -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1267, -1268, -1273,
+        -1271, -1271, -1268, -1267, -1265, -1264, -1264, -1263, -1263, -1263,
+        -1263, -1262, -1262, -1262, -1262, -1263, -1265, -1267, -1271, -1274,
+        -1274, -1274, -1274, -1274, -1274, -1274, -1274, -1274, -1274, -1274,
+        -1274, -1274, -1273, -1272, -1273, -1274, -1274, -1274, -1274, -1274,
+        -1274, -1274, -1274, -1274, -1274, -1274, -1280, -1280, -1286, -1286,
+        -1286, -1286, -1286, -1286, -1286, -1286, -1286, -1289, -1289, -1289,
+        -1289, -1286, -1286, -1286, -1286, -1286, -1286, -1286, -1287, -1290,
+        -1291, -1292, -1292, -1292, -1292, -1292, -1292, -1295, -1295, -1295,
+        -1297, -1297, -1298, -1298, -1298, -1298, -1298, -1297, -1295, -1295,
+        -1296, -1296, -1294, -1292, -1293, -1295, -1295, -1292, -1291, -1290,
+        -1289, -1288, -1286, -1285, -1284, -1288, -1294, -1297, -1297, -1298,
+        -1303, -1304, -1309, -1306, -1303, -1303, -1303, -1301, -1297, -1297,
+        -1297, -1300, -1303, -1307, -1309, -1309, -1305, -1303, -1300, -1300,
+        -1303, -1305, -1303, -1306, -1306, -1305, -1306, -1303, -1302, -1303,
+        -1303, -1301, -1303, -1301, -1300, -1303, -1304, -1306, -1305, -1307,
+        -1311, -1309, -1312, -1312, -1311, -1309, -1306, -1306, -1303, -1301,
+        -1303, -1305, -1306, -1304, -1305, -1304, -1306, -1307, -1309, -1307,
+        -1309, -1312, -1310, -1309, -1311, -1309, -1309, -1306, -1303, -1307,
+        -1307, -1309, -1309, -1309, -1307, -1309, -1306, -1311, -1307, -1309,
+        -1309, -1309, -1309, -1306, -1306, -1303, -1305, -1307, -1309, -1312,
+        -1311, -1312, -1312, -1310, -1310, -1312, -1308, -1312, -1309, -1308,
+        -1306, -1306, -1300, -1300, -1300, -1298, -1299, -1299, -1300, -1301,
+        -1303, -1300, -1299, -1301, -1301, -1300, -1303, -1300, -1302, -1298,
+        -1300, -1301, -1300, -1300, -1300, -1298, -1300, -1305, -1303, -1303,
+        -1306, -1302, -1301, -1300, -1301, -1306, -1306, -1306, -1309, -1309,
+        -1306, -1306, -1306, -1303, -1300, -1300, -1298, -1298, -1298, -1300,
+        -1299, -1298, -1298, -1298, -1299, -1299, -1298, -1295, -1289, -1286,
+        -1286, -1286, -1286, -1289, -1295, -1296, -1295, -1295, -1295, -1293,
+        -1291, -1291, -1285, -1285, -1279, -1279, -1280, -1280, -1282, -1281,
+        -1283, -1283, -1284, -1285, -1283, -1285, -1283, -1286, -1286, -1286,
+        -1286, -1286, -1286, -1286, -1286, -1283, -1283, -1277, -1274, -1274,
+        -1274, -1274, -1274, -1277, -1283, -1283, -1278, -1275, -1274, -1274,
+        -1275, -1276, -1274, -1271, -1268, -1267, -1271, -1270, -1269, -1268,
+        -1267, -1265, -1263, -1262, -1260, -1260, -1265, -1263, -1265, -1266,
+        -1263, -1262, -1263, -1265, -1261, -1262, -1259, -1259, -1260, -1261,
+        -1257, -1259, -1254, -1254, -1251, -1249, -1250, -1245, -1248, -1245,
+        -1241, -1242, -1248, -1245, -1241, -1239, -1236, -1236, -1233, -1232,
+        -1230, -1233, -1227, -1227, -1224, -1226, -1225, -1227, -1233, -1232,
+        -1231, -1233, -1233, -1233, -1236, -1231, -1230, -1228, -1230, -1228,
+        -1230, -1228, -1228, -1225, -1227, -1225, -1223, -1225, -1226, -1227,
+        -1227, -1230, -1225, -1227, -1227, -1225, -1226, -1227, -1222, -1219,
+        -1213, -1211, -1209, -1209, -1207, -1205, -1205, -1201, -1207, -1202,
+        -1201, -1204, -1204, -1209, -1207, -1213, -1215, -1213, -1209, -1209,
+        -1207, -1204, -1205, -1206, -1207, -1204, -1210, -1210, -1210, -1211,
+        -1215, -1213, -1213, -1209, -1207, -1208, -1205, -1206, -1207, -1204,
+        -1202, -1201, -1201, -1204, -1203, -1202, -1204, -1201, -1198, -1195,
+        -1193, -1193, -1192, -1193, -1191, -1192, -1191, -1193, -1194, -1194,
+        -1195, -1194, -1195, -1195, -1191, -1192, -1198, -1195, -1192, -1194,
+        -1195, -1194, -1194, -1195, -1201, -1198, -1198, -1193, -1193, -1193,
+        -1193, -1195, -1201, -1201, -1204, -1201, -1203, -1202, -1201, -1198,
+        -1198, -1199, -1202, -1202, -1204, -1200, -1204, -1205, -1205, -1205,
+        -1208, -1210, -1206, -1204, -1200, -1198, -1198, -1198, -1198, -1198,
+        -1198, -1198, -1198, -1198, -1198, -1198, -1198, -1198, -1199, -1199,
+        -1200, -1201, -1201, -1201, -1202, -1201, -1198, -1198, -1198, -1198,
+        -1201, -1201, -1207, -1210, -1210, -1210, -1210, -1210, -1210, -1210,
+        -1210, -1212, -1214, -1215, -1213, -1218, -1219, -1223, -1224, -1227,
+        -1230, -1227, -1224, -1227, -1224, -1225, -1222, -1223, -1219, -1224,
+        -1224, -1224, -1226, -1231, -1229, -1230, -1230, -1233, -1233, -1233,
+        -1231, -1232, -1235, -1230, -1230, -1233, -1233, -1230, -1230, -1231,
+        -1230, -1236, -1238, -1238, -1238, -1238, -1241, -1244, -1242, -1239,
+        -1251, -1253, -1250, -1250, -1253, -1255, -1245, -1245, -1242, -1244,
+        -1246, -1246, -1249, -1248, -1250, -1256, -1251, -1252, -1248, -1254,
+        -1263, -1260, -1257, -1254, -1259, -1268, -1264, -1263, -1263, -1272,
+        -1270, -1271, -1271, -1268, -1261, -1265, -1259, -1260, -1262, -1261,
+        -1260, -1260, -1263, -1261, -1263, -1262, -1260, -1260, -1263, -1265,
+        -1263, -1259, -1266, -1270, -1267, -1264, -1269, -1269, -1266, -1264,
+        -1265, -1262, -1263, -1262, -1263, -1261, -1257, -1259, -1261, -1259,
+        -1257, -1257, -1259, -1265, -1268, -1268, -1267, -1268, -1269, -1272,
+        -1273, -1276, -1277, -1280, -1283, -1283, -1282, -1283, -1282, -1283,
+        -1285, -1280, -1280, -1277, -1277, -1276, -1274, -1275, -1275, -1272,
+        -1268, -1268, -1265, -1265, -1268, -1271, -1274, -1274, -1270, -1270,
+        -1271, -1271, -1270, -1268, -1268, -1266, -1266, -1267, -1268, -1266,
+        -1265, -1266, -1264, -1264, -1265, -1268, -1271, -1268, -1274, -1277,
+        -1280, -1280, -1279, -1283, -1283, -1282, -1278, -1277, -1280, -1279,
+        -1277, -1280, -1282, -1280, -1286, -1291, -1293, -1295, -1294, -1299,
+        -1301, -1302, -1303, -1301, -1300, -1300, -1299, -1300, -1300, -1302,
+        -1301, -1306, -1309, -1307, -1308, -1309, -1311, -1311, -1309, -1315,
+        -1315, -1315, -1315, -1315, -1324, -1325, -1323, -1324, -1328, -1330,
+        -1331, -1330, -1327, -1329, -1334, -1341, -1344, -1348, -1354, -1359,
+        -1365, -1362, -1357, -1356, -1358, -1359, -1351, -1353, -1355, -1359,
+        -1354, -1356, -1353, -1358, -1356, -1356, -1350, -1347, -1347, -1352,
+        -1356, -1354, -1353, -1356, -1353, -1354, -1350, -1345, -1347, -1345,
+        -1342, -1335, -1336, -1324, -1324, -1319, -1319, -1295, -1294, -1296,
+        -1297, -1288, -1283, -1272, -1272, -1271, -1263, -1261
     };
 
-    static const float robinson_dadson_curve_80_phons[1468] =
+    static const int16_t robinson_dadson_curve_80_phons[1468] =
     {
-        -1.79, -1.79, -1.79, -1.80, -1.80, -1.80, -1.81, -1.81, -1.81, -1.81,
-        -1.81, -1.82, -1.82, -1.82, -1.82, -1.83, -1.83, -1.83, -1.83, -1.82,
-        -1.83, -1.83, -1.84, -1.85, -1.85, -1.85, -1.85, -1.86, -1.86, -1.87,
-        -1.88, -1.88, -1.89, -1.90, -1.91, -1.91, -1.90, -1.91, -1.91, -1.91,
-        -1.90, -1.90, -1.91, -1.91, -1.90, -1.89, -1.90, -1.91, -1.90, -1.90,
-        -1.92, -1.92, -1.93, -1.93, -1.93, -1.94, -1.96, -1.97, -1.96, -1.97,
-        -1.96, -1.96, -1.96, -1.95, -1.94, -1.95, -1.95, -1.94, -1.92, -1.93,
-        -1.93, -1.92, -1.91, -1.91, -1.92, -1.91, -1.91, -1.91, -1.92, -1.94,
-        -1.93, -1.93, -1.94, -1.94, -1.94, -1.93, -1.94, -1.94, -1.94, -1.94,
-        -1.95, -1.97, -1.98, -2.00, -2.00, -1.99, -2.00, -2.00, -2.00, -2.02,
-        -2.02, -2.02, -2.03, -2.03, -2.03, -2.03, -2.03, -2.03, -2.02, -2.03,
-        -2.03, -2.03, -2.04, -2.04, -2.04, -2.04, -2.05, -2.04, -2.05, -2.05,
-        -2.05, -2.05, -2.06, -2.06, -2.06, -2.07, -2.07, -2.06, -2.06, -2.06,
-        -2.06, -2.08, -2.08, -2.08, -2.07, -2.07, -2.09, -2.09, -2.10, -2.10,
-        -2.10, -2.11, -2.11, -2.11, -2.11, -2.12, -2.12, -2.12, -2.12, -2.12,
-        -2.12, -2.12, -2.12, -2.13, -2.13, -2.14, -2.13, -2.13, -2.13, -2.14,
-        -2.14, -2.14, -2.14, -2.15, -2.16, -2.16, -2.17, -2.16, -2.17, -2.17,
-        -2.16, -2.17, -2.16, -2.16, -2.17, -2.17, -2.18, -2.18, -2.18, -2.18,
-        -2.18, -2.18, -2.18, -2.18, -2.18, -2.19, -2.20, -2.21, -2.22, -2.22,
-        -2.21, -2.22, -2.21, -2.21, -2.22, -2.22, -2.23, -2.24, -2.25, -2.25,
-        -2.26, -2.26, -2.25, -2.26, -2.26, -2.27, -2.27, -2.28, -2.28, -2.28,
-        -2.27, -2.27, -2.27, -2.27, -2.27, -2.28, -2.29, -2.29, -2.30, -2.30,
-        -2.30, -2.31, -2.31, -2.31, -2.31, -2.31, -2.32, -2.32, -2.33, -2.33,
-        -2.33, -2.33, -2.33, -2.34, -2.34, -2.35, -2.35, -2.36, -2.36, -2.36,
-        -2.36, -2.36, -2.36, -2.36, -2.37, -2.36, -2.37, -2.37, -2.37, -2.37,
-        -2.37, -2.38, -2.37, -2.38, -2.38, -2.38, -2.38, -2.38, -2.38, -2.38,
-        -2.38, -2.38, -2.37, -2.39, -2.39, -2.40, -2.40, -2.41, -2.40, -2.41,
-        -2.42, -2.43, -2.43, -2.43, -2.43, -2.44, -2.44, -2.44, -2.44, -2.45,
-        -2.46, -2.46, -2.45, -2.46, -2.45, -2.46, -2.45, -2.46, -2.46, -2.46,
-        -2.47, -2.47, -2.48, -2.48, -2.48, -2.47, -2.48, -2.48, -2.48, -2.48,
-        -2.48, -2.49, -2.49, -2.50, -2.50, -2.51, -2.51, -2.52, -2.52, -2.51,
-        -2.51, -2.52, -2.52, -2.51, -2.51, -2.51, -2.51, -2.50, -2.50, -2.51,
-        -2.52, -2.52, -2.52, -2.54, -2.53, -2.53, -2.54, -2.54, -2.54, -2.54,
-        -2.54, -2.54, -2.54, -2.54, -2.54, -2.55, -2.55, -2.55, -2.56, -2.56,
-        -2.56, -2.56, -2.58, -2.56, -2.57, -2.58, -2.58, -2.58, -2.58, -2.58,
-        -2.58, -2.58, -2.58, -2.58, -2.58, -2.59, -2.59, -2.60, -2.60, -2.59,
-        -2.59, -2.59, -2.59, -2.58, -2.58, -2.58, -2.57, -2.58, -2.57, -2.58,
-        -2.58, -2.59, -2.60, -2.60, -2.60, -2.60, -2.60, -2.62, -2.62, -2.62,
-        -2.62, -2.63, -2.63, -2.64, -2.64, -2.65, -2.65, -2.65, -2.66, -2.66,
-        -2.65, -2.65, -2.66, -2.66, -2.66, -2.66, -2.67, -2.66, -2.67, -2.67,
-        -2.66, -2.66, -2.66, -2.67, -2.66, -2.66, -2.65, -2.66, -2.66, -2.66,
-        -2.67, -2.66, -2.68, -2.68, -2.67, -2.67, -2.66, -2.66, -2.67, -2.66,
-        -2.67, -2.66, -2.67, -2.67, -2.68, -2.68, -2.69, -2.70, -2.71, -2.71,
-        -2.71, -2.71, -2.70, -2.70, -2.71, -2.70, -2.69, -2.69, -2.70, -2.69,
-        -2.70, -2.70, -2.71, -2.70, -2.71, -2.70, -2.71, -2.72, -2.72, -2.73,
-        -2.73, -2.73, -2.72, -2.72, -2.72, -2.72, -2.73, -2.73, -2.74, -2.74,
-        -2.74, -2.74, -2.75, -2.74, -2.74, -2.75, -2.75, -2.74, -2.75, -2.75,
-        -2.74, -2.75, -2.76, -2.76, -2.76, -2.76, -2.77, -2.77, -2.78, -2.79,
-        -2.79, -2.78, -2.78, -2.77, -2.77, -2.77, -2.78, -2.77, -2.78, -2.78,
-        -2.79, -2.79, -2.78, -2.78, -2.78, -2.78, -2.77, -2.77, -2.77, -2.77,
-        -2.77, -2.77, -2.77, -2.77, -2.79, -2.79, -2.81, -2.81, -2.82, -2.82,
-        -2.82, -2.83, -2.82, -2.82, -2.83, -2.83, -2.83, -2.83, -2.83, -2.83,
-        -2.83, -2.83, -2.83, -2.83, -2.83, -2.82, -2.81, -2.81, -2.81, -2.81,
-        -2.80, -2.81, -2.81, -2.82, -2.82, -2.82, -2.83, -2.83, -2.84, -2.83,
-        -2.84, -2.83, -2.84, -2.84, -2.84, -2.85, -2.85, -2.84, -2.83, -2.84,
-        -2.83, -2.85, -2.85, -2.85, -2.85, -2.85, -2.84, -2.83, -2.83, -2.84,
-        -2.85, -2.85, -2.84, -2.84, -2.84, -2.83, -2.83, -2.85, -2.85, -2.85,
-        -2.85, -2.86, -2.86, -2.87, -2.86, -2.87, -2.87, -2.87, -2.88, -2.87,
-        -2.88, -2.88, -2.88, -2.88, -2.88, -2.88, -2.87, -2.87, -2.87, -2.87,
-        -2.87, -2.87, -2.87, -2.87, -2.88, -2.88, -2.88, -2.88, -2.88, -2.88,
-        -2.88, -2.88, -2.88, -2.88, -2.88, -2.89, -2.90, -2.90, -2.90, -2.91,
-        -2.91, -2.91, -2.89, -2.89, -2.89, -2.89, -2.91, -2.91, -2.91, -2.91,
-        -2.91, -2.91, -2.91, -2.91, -2.91, -2.91, -2.91, -2.92, -2.93, -2.94,
-        -2.93, -2.93, -2.93, -2.92, -2.92, -2.92, -2.92, -2.91, -2.91, -2.91,
-        -2.91, -2.91, -2.91, -2.91, -2.91, -2.91, -2.92, -2.92, -2.93, -2.94,
-        -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.94,
-        -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.94,
-        -2.94, -2.94, -2.94, -2.94, -2.94, -2.94, -2.95, -2.95, -2.97, -2.97,
-        -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.98, -2.98,
-        -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.97, -2.98,
-        -2.98, -2.98, -2.98, -2.98, -2.98, -2.98, -2.98, -2.99, -2.99, -2.99,
-        -2.99, -2.99, -2.99, -2.99, -2.99, -2.99, -2.99, -2.99, -2.99, -2.99,
-        -2.99, -2.99, -2.99, -2.98, -2.98, -2.99, -2.99, -2.98, -2.98, -2.98,
-        -2.98, -2.97, -2.97, -2.97, -2.96, -2.97, -2.99, -2.99, -2.99, -2.99,
-        -3.01, -3.01, -3.02, -3.01, -3.01, -3.01, -3.01, -3.00, -2.99, -2.99,
-        -2.99, -3.00, -3.01, -3.02, -3.02, -3.02, -3.01, -3.01, -3.00, -3.00,
-        -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.01,
-        -3.01, -3.00, -3.01, -3.00, -3.00, -3.01, -3.01, -3.01, -3.01, -3.02,
-        -3.03, -3.02, -3.03, -3.03, -3.03, -3.02, -3.01, -3.01, -3.01, -3.00,
-        -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.01, -3.02, -3.02, -3.02,
-        -3.02, -3.03, -3.02, -3.02, -3.02, -3.02, -3.02, -3.01, -3.01, -3.02,
-        -3.02, -3.02, -3.02, -3.02, -3.02, -3.02, -3.01, -3.03, -3.02, -3.02,
-        -3.02, -3.02, -3.02, -3.01, -3.01, -3.01, -3.01, -3.02, -3.02, -3.03,
-        -3.02, -3.03, -3.03, -3.02, -3.02, -3.03, -3.02, -3.03, -3.02, -3.02,
-        -3.01, -3.01, -3.00, -3.00, -3.00, -3.00, -3.00, -3.00, -3.00, -3.00,
-        -3.01, -3.00, -3.00, -3.00, -3.00, -3.00, -3.01, -3.00, -3.01, -3.00,
-        -3.00, -3.00, -3.00, -3.00, -3.00, -2.99, -3.00, -3.01, -3.01, -3.01,
-        -3.01, -3.00, -3.00, -3.00, -3.00, -3.01, -3.01, -3.01, -3.02, -3.02,
-        -3.01, -3.01, -3.01, -3.01, -3.00, -3.00, -2.99, -2.99, -3.00, -3.00,
-        -3.00, -3.00, -3.00, -3.00, -3.00, -3.00, -3.00, -2.99, -2.97, -2.97,
-        -2.97, -2.97, -2.97, -2.97, -2.99, -2.99, -2.99, -2.99, -2.99, -2.98,
-        -2.98, -2.98, -2.97, -2.96, -2.95, -2.95, -2.95, -2.95, -2.96, -2.96,
-        -2.96, -2.96, -2.96, -2.96, -2.96, -2.97, -2.96, -2.97, -2.97, -2.97,
-        -2.97, -2.97, -2.97, -2.97, -2.97, -2.96, -2.96, -2.95, -2.94, -2.94,
-        -2.94, -2.94, -2.94, -2.95, -2.96, -2.96, -2.95, -2.94, -2.94, -2.94,
-        -2.94, -2.94, -2.94, -2.93, -2.93, -2.92, -2.93, -2.93, -2.93, -2.93,
-        -2.92, -2.92, -2.91, -2.91, -2.91, -2.91, -2.92, -2.91, -2.92, -2.92,
-        -2.91, -2.91, -2.91, -2.92, -2.91, -2.91, -2.90, -2.91, -2.91, -2.91,
-        -2.90, -2.91, -2.89, -2.89, -2.89, -2.88, -2.89, -2.87, -2.88, -2.87,
-        -2.86, -2.87, -2.88, -2.87, -2.86, -2.86, -2.85, -2.85, -2.85, -2.84,
-        -2.84, -2.85, -2.83, -2.83, -2.83, -2.83, -2.83, -2.83, -2.85, -2.84,
-        -2.84, -2.84, -2.85, -2.85, -2.85, -2.84, -2.84, -2.83, -2.84, -2.83,
-        -2.84, -2.83, -2.83, -2.83, -2.83, -2.83, -2.82, -2.83, -2.83, -2.83,
-        -2.83, -2.84, -2.83, -2.83, -2.83, -2.83, -2.83, -2.83, -2.82, -2.81,
-        -2.80, -2.79, -2.79, -2.79, -2.78, -2.78, -2.78, -2.77, -2.78, -2.77,
-        -2.77, -2.78, -2.78, -2.79, -2.79, -2.80, -2.80, -2.80, -2.79, -2.79,
-        -2.79, -2.78, -2.78, -2.78, -2.79, -2.78, -2.79, -2.79, -2.79, -2.80,
-        -2.80, -2.80, -2.80, -2.79, -2.79, -2.79, -2.78, -2.78, -2.79, -2.78,
-        -2.77, -2.77, -2.77, -2.78, -2.78, -2.77, -2.78, -2.77, -2.77, -2.76,
-        -2.75, -2.75, -2.75, -2.75, -2.75, -2.75, -2.75, -2.75, -2.76, -2.76,
-        -2.76, -2.76, -2.76, -2.76, -2.75, -2.75, -2.76, -2.76, -2.75, -2.76,
-        -2.76, -2.76, -2.76, -2.76, -2.77, -2.77, -2.76, -2.75, -2.75, -2.75,
-        -2.75, -2.76, -2.77, -2.77, -2.78, -2.77, -2.78, -2.77, -2.77, -2.77,
-        -2.77, -2.77, -2.77, -2.77, -2.78, -2.77, -2.78, -2.78, -2.78, -2.78,
-        -2.79, -2.79, -2.78, -2.78, -2.77, -2.76, -2.76, -2.76, -2.76, -2.76,
-        -2.76, -2.76, -2.76, -2.76, -2.76, -2.76, -2.77, -2.77, -2.77, -2.77,
-        -2.77, -2.77, -2.77, -2.77, -2.77, -2.77, -2.76, -2.76, -2.76, -2.76,
-        -2.77, -2.77, -2.79, -2.79, -2.79, -2.79, -2.79, -2.79, -2.79, -2.79,
-        -2.79, -2.80, -2.80, -2.80, -2.80, -2.81, -2.81, -2.82, -2.83, -2.83,
-        -2.84, -2.83, -2.83, -2.83, -2.83, -2.83, -2.82, -2.82, -2.81, -2.82,
-        -2.83, -2.82, -2.83, -2.84, -2.84, -2.84, -2.84, -2.85, -2.84, -2.85,
-        -2.84, -2.84, -2.85, -2.84, -2.84, -2.85, -2.85, -2.84, -2.84, -2.84,
-        -2.84, -2.85, -2.86, -2.86, -2.86, -2.86, -2.86, -2.87, -2.87, -2.86,
-        -2.89, -2.89, -2.88, -2.88, -2.89, -2.90, -2.87, -2.87, -2.87, -2.87,
-        -2.87, -2.88, -2.88, -2.88, -2.89, -2.90, -2.89, -2.89, -2.88, -2.89,
-        -2.91, -2.91, -2.90, -2.89, -2.91, -2.93, -2.92, -2.91, -2.92, -2.93,
-        -2.93, -2.93, -2.93, -2.93, -2.91, -2.92, -2.91, -2.91, -2.91, -2.91,
-        -2.91, -2.91, -2.91, -2.91, -2.91, -2.91, -2.91, -2.91, -2.91, -2.92,
-        -2.92, -2.91, -2.92, -2.93, -2.92, -2.92, -2.93, -2.93, -2.92, -2.92,
-        -2.92, -2.91, -2.91, -2.91, -2.91, -2.91, -2.90, -2.91, -2.91, -2.91,
-        -2.90, -2.90, -2.91, -2.92, -2.93, -2.93, -2.92, -2.93, -2.93, -2.93,
-        -2.94, -2.94, -2.95, -2.95, -2.96, -2.96, -2.96, -2.96, -2.96, -2.96,
-        -2.97, -2.95, -2.95, -2.95, -2.95, -2.95, -2.94, -2.94, -2.94, -2.94,
-        -2.93, -2.93, -2.92, -2.92, -2.93, -2.93, -2.94, -2.94, -2.93, -2.93,
-        -2.93, -2.93, -2.93, -2.93, -2.93, -2.92, -2.92, -2.92, -2.93, -2.92,
-        -2.92, -2.92, -2.92, -2.92, -2.92, -2.93, -2.93, -2.93, -2.94, -2.95,
-        -2.95, -2.95, -2.95, -2.96, -2.96, -2.96, -2.95, -2.95, -2.95, -2.95,
-        -2.95, -2.95, -2.96, -2.95, -2.97, -2.98, -2.98, -2.99, -2.99, -3.00,
-        -3.00, -3.00, -3.01, -3.00, -3.00, -3.00, -3.00, -3.00, -3.00, -3.00,
-        -3.00, -3.01, -3.02, -3.02, -3.02, -3.02, -3.03, -3.02, -3.02, -3.03,
-        -3.03, -3.03, -3.04, -3.03, -3.05, -3.06, -3.05, -3.05, -3.06, -3.07,
-        -3.07, -3.07, -3.06, -3.07, -3.08, -3.10, -3.10, -3.11, -3.12, -3.14,
-        -3.15, -3.14, -3.13, -3.13, -3.13, -3.14, -3.12, -3.12, -3.13, -3.14,
-        -3.12, -3.13, -3.12, -3.13, -3.13, -3.13, -3.11, -3.11, -3.11, -3.12,
-        -3.13, -3.13, -3.12, -3.13, -3.12, -3.12, -3.12, -3.10, -3.11, -3.10,
-        -3.10, -3.08, -3.08, -3.06, -3.06, -3.04, -3.04, -2.99, -2.99, -2.99,
-        -2.99, -2.97, -2.96, -2.94, -2.94, -2.93, -2.92, -2.91
+        -179, -179, -179, -180, -180, -180, -181, -181, -181, -181,
+        -181, -182, -182, -182, -182, -183, -183, -183, -183, -182,
+        -183, -183, -184, -185, -185, -185, -185, -186, -186, -187,
+        -188, -188, -189, -190, -191, -191, -190, -191, -191, -191,
+        -190, -190, -191, -191, -190, -189, -190, -191, -190, -190,
+        -192, -192, -193, -193, -193, -194, -196, -197, -196, -197,
+        -196, -196, -196, -195, -194, -195, -195, -194, -192, -193,
+        -193, -192, -191, -191, -192, -191, -191, -191, -192, -194,
+        -193, -193, -194, -194, -194, -193, -194, -194, -194, -194,
+        -195, -197, -198, -200, -200, -199, -200, -200, -200, -202,
+        -202, -202, -203, -203, -203, -203, -203, -203, -202, -203,
+        -203, -203, -204, -204, -204, -204, -205, -204, -205, -205,
+        -205, -205, -206, -206, -206, -207, -207, -206, -206, -206,
+        -206, -208, -208, -208, -207, -207, -209, -209, -210, -210,
+        -210, -211, -211, -211, -211, -212, -212, -212, -212, -212,
+        -212, -212, -212, -213, -213, -214, -213, -213, -213, -214,
+        -214, -214, -214, -215, -216, -216, -217, -216, -217, -217,
+        -216, -217, -216, -216, -217, -217, -218, -218, -218, -218,
+        -218, -218, -218, -218, -218, -219, -220, -221, -222, -222,
+        -221, -222, -221, -221, -222, -222, -223, -224, -225, -225,
+        -226, -226, -225, -226, -226, -227, -227, -228, -228, -228,
+        -227, -227, -227, -227, -227, -228, -229, -229, -230, -230,
+        -230, -231, -231, -231, -231, -231, -232, -232, -233, -233,
+        -233, -233, -233, -234, -234, -235, -235, -236, -236, -236,
+        -236, -236, -236, -236, -237, -236, -237, -237, -237, -237,
+        -237, -238, -237, -238, -238, -238, -238, -238, -238, -238,
+        -238, -238, -237, -239, -239, -240, -240, -241, -240, -241,
+        -242, -243, -243, -243, -243, -244, -244, -244, -244, -245,
+        -246, -246, -245, -246, -245, -246, -245, -246, -246, -246,
+        -247, -247, -248, -248, -248, -247, -248, -248, -248, -248,
+        -248, -249, -249, -250, -250, -251, -251, -252, -252, -251,
+        -251, -252, -252, -251, -251, -251, -251, -250, -250, -251,
+        -252, -252, -252, -254, -253, -253, -254, -254, -254, -254,
+        -254, -254, -254, -254, -254, -255, -255, -255, -256, -256,
+        -256, -256, -258, -256, -257, -258, -258, -258, -258, -258,
+        -258, -258, -258, -258, -258, -259, -259, -260, -260, -259,
+        -259, -259, -259, -258, -258, -258, -257, -258, -257, -258,
+        -258, -259, -260, -260, -260, -260, -260, -262, -262, -262,
+        -262, -263, -263, -264, -264, -265, -265, -265, -266, -266,
+        -265, -265, -266, -266, -266, -266, -267, -266, -267, -267,
+        -266, -266, -266, -267, -266, -266, -265, -266, -266, -266,
+        -267, -266, -268, -268, -267, -267, -266, -266, -267, -266,
+        -267, -266, -267, -267, -268, -268, -269, -270, -271, -271,
+        -271, -271, -270, -270, -271, -270, -269, -269, -270, -269,
+        -270, -270, -271, -270, -271, -270, -271, -272, -272, -273,
+        -273, -273, -272, -272, -272, -272, -273, -273, -274, -274,
+        -274, -274, -275, -274, -274, -275, -275, -274, -275, -275,
+        -274, -275, -276, -276, -276, -276, -277, -277, -278, -279,
+        -279, -278, -278, -277, -277, -277, -278, -277, -278, -278,
+        -279, -279, -278, -278, -278, -278, -277, -277, -277, -277,
+        -277, -277, -277, -277, -279, -279, -281, -281, -282, -282,
+        -282, -283, -282, -282, -283, -283, -283, -283, -283, -283,
+        -283, -283, -283, -283, -283, -282, -281, -281, -281, -281,
+        -280, -281, -281, -282, -282, -282, -283, -283, -284, -283,
+        -284, -283, -284, -284, -284, -285, -285, -284, -283, -284,
+        -283, -285, -285, -285, -285, -285, -284, -283, -283, -284,
+        -285, -285, -284, -284, -284, -283, -283, -285, -285, -285,
+        -285, -286, -286, -287, -286, -287, -287, -287, -288, -287,
+        -288, -288, -288, -288, -288, -288, -287, -287, -287, -287,
+        -287, -287, -287, -287, -288, -288, -288, -288, -288, -288,
+        -288, -288, -288, -288, -288, -289, -290, -290, -290, -291,
+        -291, -291, -289, -289, -289, -289, -291, -291, -291, -291,
+        -291, -291, -291, -291, -291, -291, -291, -292, -293, -294,
+        -293, -293, -293, -292, -292, -292, -292, -291, -291, -291,
+        -291, -291, -291, -291, -291, -291, -292, -292, -293, -294,
+        -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
+        -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
+        -294, -294, -294, -294, -294, -294, -295, -295, -297, -297,
+        -297, -297, -297, -297, -297, -297, -297, -297, -298, -298,
+        -297, -297, -297, -297, -297, -297, -297, -297, -297, -298,
+        -298, -298, -298, -298, -298, -298, -298, -299, -299, -299,
+        -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
+        -299, -299, -299, -298, -298, -299, -299, -298, -298, -298,
+        -298, -297, -297, -297, -296, -297, -299, -299, -299, -299,
+        -301, -301, -302, -301, -301, -301, -301, -300, -299, -299,
+        -299, -300, -301, -302, -302, -302, -301, -301, -300, -300,
+        -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
+        -301, -300, -301, -300, -300, -301, -301, -301, -301, -302,
+        -303, -302, -303, -303, -303, -302, -301, -301, -301, -300,
+        -301, -301, -301, -301, -301, -301, -301, -302, -302, -302,
+        -302, -303, -302, -302, -302, -302, -302, -301, -301, -302,
+        -302, -302, -302, -302, -302, -302, -301, -303, -302, -302,
+        -302, -302, -302, -301, -301, -301, -301, -302, -302, -303,
+        -302, -303, -303, -302, -302, -303, -302, -303, -302, -302,
+        -301, -301, -300, -300, -300, -300, -300, -300, -300, -300,
+        -301, -300, -300, -300, -300, -300, -301, -300, -301, -300,
+        -300, -300, -300, -300, -300, -299, -300, -301, -301, -301,
+        -301, -300, -300, -300, -300, -301, -301, -301, -302, -302,
+        -301, -301, -301, -301, -300, -300, -299, -299, -300, -300,
+        -300, -300, -300, -300, -300, -300, -300, -299, -297, -297,
+        -297, -297, -297, -297, -299, -299, -299, -299, -299, -298,
+        -298, -298, -297, -296, -295, -295, -295, -295, -296, -296,
+        -296, -296, -296, -296, -296, -297, -296, -297, -297, -297,
+        -297, -297, -297, -297, -297, -296, -296, -295, -294, -294,
+        -294, -294, -294, -295, -296, -296, -295, -294, -294, -294,
+        -294, -294, -294, -293, -293, -292, -293, -293, -293, -293,
+        -292, -292, -291, -291, -291, -291, -292, -291, -292, -292,
+        -291, -291, -291, -292, -291, -291, -290, -291, -291, -291,
+        -290, -291, -289, -289, -289, -288, -289, -287, -288, -287,
+        -286, -287, -288, -287, -286, -286, -285, -285, -285, -284,
+        -284, -285, -283, -283, -283, -283, -283, -283, -285, -284,
+        -284, -284, -285, -285, -285, -284, -284, -283, -284, -283,
+        -284, -283, -283, -283, -283, -283, -282, -283, -283, -283,
+        -283, -284, -283, -283, -283, -283, -283, -283, -282, -281,
+        -280, -279, -279, -279, -278, -278, -278, -277, -278, -277,
+        -277, -278, -278, -279, -279, -280, -280, -280, -279, -279,
+        -279, -278, -278, -278, -279, -278, -279, -279, -279, -280,
+        -280, -280, -280, -279, -279, -279, -278, -278, -279, -278,
+        -277, -277, -277, -278, -278, -277, -278, -277, -277, -276,
+        -275, -275, -275, -275, -275, -275, -275, -275, -276, -276,
+        -276, -276, -276, -276, -275, -275, -276, -276, -275, -276,
+        -276, -276, -276, -276, -277, -277, -276, -275, -275, -275,
+        -275, -276, -277, -277, -278, -277, -278, -277, -277, -277,
+        -277, -277, -277, -277, -278, -277, -278, -278, -278, -278,
+        -279, -279, -278, -278, -277, -276, -276, -276, -276, -276,
+        -276, -276, -276, -276, -276, -276, -277, -277, -277, -277,
+        -277, -277, -277, -277, -277, -277, -276, -276, -276, -276,
+        -277, -277, -279, -279, -279, -279, -279, -279, -279, -279,
+        -279, -280, -280, -280, -280, -281, -281, -282, -283, -283,
+        -284, -283, -283, -283, -283, -283, -282, -282, -281, -282,
+        -283, -282, -283, -284, -284, -284, -284, -285, -284, -285,
+        -284, -284, -285, -284, -284, -285, -285, -284, -284, -284,
+        -284, -285, -286, -286, -286, -286, -286, -287, -287, -286,
+        -289, -289, -288, -288, -289, -290, -287, -287, -287, -287,
+        -287, -288, -288, -288, -289, -290, -289, -289, -288, -289,
+        -291, -291, -290, -289, -291, -293, -292, -291, -292, -293,
+        -293, -293, -293, -293, -291, -292, -291, -291, -291, -291,
+        -291, -291, -291, -291, -291, -291, -291, -291, -291, -292,
+        -292, -291, -292, -293, -292, -292, -293, -293, -292, -292,
+        -292, -291, -291, -291, -291, -291, -290, -291, -291, -291,
+        -290, -290, -291, -292, -293, -293, -292, -293, -293, -293,
+        -294, -294, -295, -295, -296, -296, -296, -296, -296, -296,
+        -297, -295, -295, -295, -295, -295, -294, -294, -294, -294,
+        -293, -293, -292, -292, -293, -293, -294, -294, -293, -293,
+        -293, -293, -293, -293, -293, -292, -292, -292, -293, -292,
+        -292, -292, -292, -292, -292, -293, -293, -293, -294, -295,
+        -295, -295, -295, -296, -296, -296, -295, -295, -295, -295,
+        -295, -295, -296, -295, -297, -298, -298, -299, -299, -300,
+        -300, -300, -301, -300, -300, -300, -300, -300, -300, -300,
+        -300, -301, -302, -302, -302, -302, -303, -302, -302, -303,
+        -303, -303, -304, -303, -305, -306, -305, -305, -306, -307,
+        -307, -307, -306, -307, -308, -310, -310, -311, -312, -314,
+        -315, -314, -313, -313, -313, -314, -312, -312, -313, -314,
+        -312, -313, -312, -313, -313, -313, -311, -311, -311, -312,
+        -313, -313, -312, -313, -312, -312, -312, -310, -311, -310,
+        -310, -308, -308, -306, -306, -304, -304, -299, -299, -299,
+        -299, -297, -296, -294, -294, -293, -292, -291
     };
 
-    static const float robinson_dadson_curve_90_phons[1468] =
+    static const int16_t robinson_dadson_curve_90_phons[1468] =
     {
-        4.18, 4.17, 4.19, 4.20, 4.20, 4.20, 4.22, 4.23, 4.22, 4.22,
-        4.23, 4.25, 4.25, 4.26, 4.24, 4.26, 4.27, 4.26, 4.27, 4.25,
-        4.27, 4.27, 4.30, 4.31, 4.31, 4.32, 4.33, 4.35, 4.35, 4.37,
-        4.38, 4.40, 4.42, 4.44, 4.45, 4.46, 4.44, 4.46, 4.45, 4.45,
-        4.44, 4.44, 4.45, 4.45, 4.44, 4.42, 4.44, 4.46, 4.44, 4.44,
-        4.48, 4.48, 4.50, 4.51, 4.50, 4.52, 4.57, 4.59, 4.58, 4.59,
-        4.58, 4.57, 4.58, 4.56, 4.53, 4.55, 4.55, 4.54, 4.49, 4.51,
-        4.50, 4.47, 4.47, 4.47, 4.48, 4.46, 4.46, 4.46, 4.49, 4.52,
-        4.51, 4.51, 4.53, 4.53, 4.52, 4.51, 4.52, 4.52, 4.52, 4.52,
-        4.55, 4.60, 4.63, 4.66, 4.66, 4.64, 4.67, 4.67, 4.66, 4.70,
-        4.72, 4.72, 4.73, 4.73, 4.75, 4.74, 4.73, 4.73, 4.72, 4.73,
-        4.74, 4.74, 4.75, 4.76, 4.76, 4.77, 4.78, 4.77, 4.78, 4.78,
-        4.78, 4.78, 4.81, 4.81, 4.82, 4.83, 4.83, 4.82, 4.82, 4.82,
-        4.82, 4.85, 4.85, 4.85, 4.84, 4.84, 4.87, 4.88, 4.89, 4.89,
-        4.89, 4.92, 4.93, 4.93, 4.93, 4.95, 4.96, 4.95, 4.94, 4.96,
-        4.95, 4.94, 4.94, 4.97, 4.97, 4.99, 4.98, 4.96, 4.98, 5.00,
-        5.00, 5.00, 5.00, 5.01, 5.04, 5.05, 5.06, 5.05, 5.06, 5.06,
-        5.04, 5.05, 5.05, 5.05, 5.06, 5.07, 5.08, 5.08, 5.08, 5.08,
-        5.08, 5.08, 5.08, 5.09, 5.09, 5.10, 5.13, 5.15, 5.18, 5.18,
-        5.16, 5.17, 5.16, 5.16, 5.17, 5.19, 5.21, 5.23, 5.24, 5.26,
-        5.27, 5.27, 5.26, 5.28, 5.27, 5.29, 5.30, 5.31, 5.32, 5.32,
-        5.31, 5.29, 5.30, 5.30, 5.30, 5.32, 5.34, 5.35, 5.36, 5.36,
-        5.37, 5.40, 5.38, 5.38, 5.40, 5.38, 5.41, 5.41, 5.43, 5.44,
-        5.45, 5.43, 5.45, 5.46, 5.45, 5.48, 5.48, 5.51, 5.51, 5.51,
-        5.51, 5.51, 5.51, 5.51, 5.52, 5.51, 5.52, 5.53, 5.53, 5.54,
-        5.54, 5.54, 5.54, 5.55, 5.55, 5.54, 5.55, 5.55, 5.55, 5.55,
-        5.54, 5.54, 5.54, 5.57, 5.57, 5.60, 5.59, 5.62, 5.60, 5.62,
-        5.65, 5.68, 5.67, 5.66, 5.66, 5.68, 5.69, 5.70, 5.70, 5.72,
-        5.74, 5.74, 5.72, 5.74, 5.72, 5.73, 5.72, 5.74, 5.73, 5.75,
-        5.76, 5.77, 5.78, 5.79, 5.78, 5.77, 5.78, 5.78, 5.78, 5.79,
-        5.79, 5.81, 5.80, 5.82, 5.83, 5.86, 5.87, 5.88, 5.87, 5.85,
-        5.85, 5.87, 5.87, 5.85, 5.85, 5.87, 5.87, 5.83, 5.84, 5.85,
-        5.87, 5.88, 5.89, 5.92, 5.90, 5.90, 5.93, 5.93, 5.93, 5.92,
-        5.92, 5.93, 5.93, 5.92, 5.94, 5.94, 5.96, 5.95, 5.98, 5.97,
-        5.98, 5.98, 6.01, 5.98, 6.00, 6.01, 6.02, 6.01, 6.01, 6.01,
-        6.01, 6.01, 6.01, 6.01, 6.03, 6.04, 6.04, 6.06, 6.06, 6.05,
-        6.05, 6.03, 6.04, 6.03, 6.02, 6.01, 6.00, 6.01, 6.00, 6.01,
-        6.03, 6.03, 6.06, 6.08, 6.07, 6.07, 6.08, 6.11, 6.11, 6.12,
-        6.12, 6.14, 6.14, 6.15, 6.17, 6.18, 6.18, 6.18, 6.20, 6.20,
-        6.19, 6.19, 6.22, 6.20, 6.20, 6.21, 6.22, 6.22, 6.23, 6.23,
-        6.22, 6.22, 6.22, 6.23, 6.22, 6.21, 6.19, 6.21, 6.20, 6.22,
-        6.23, 6.22, 6.25, 6.24, 6.23, 6.23, 6.22, 6.21, 6.23, 6.22,
-        6.22, 6.22, 6.23, 6.23, 6.26, 6.26, 6.28, 6.31, 6.33, 6.33,
-        6.32, 6.32, 6.29, 6.30, 6.32, 6.29, 6.28, 6.28, 6.29, 6.28,
-        6.29, 6.30, 6.32, 6.31, 6.31, 6.31, 6.33, 6.35, 6.34, 6.37,
-        6.36, 6.37, 6.35, 6.34, 6.34, 6.36, 6.37, 6.37, 6.40, 6.39,
-        6.40, 6.39, 6.42, 6.40, 6.40, 6.41, 6.42, 6.40, 6.43, 6.41,
-        6.40, 6.41, 6.44, 6.45, 6.45, 6.45, 6.46, 6.47, 6.49, 6.50,
-        6.51, 6.50, 6.49, 6.47, 6.47, 6.47, 6.48, 6.47, 6.48, 6.49,
-        6.50, 6.51, 6.50, 6.48, 6.48, 6.49, 6.47, 6.46, 6.47, 6.47,
-        6.46, 6.47, 6.47, 6.47, 6.50, 6.52, 6.55, 6.56, 6.58, 6.57,
-        6.58, 6.59, 6.59, 6.58, 6.60, 6.59, 6.61, 6.60, 6.61, 6.60,
-        6.59, 6.59, 6.59, 6.59, 6.59, 6.58, 6.56, 6.56, 6.56, 6.56,
-        6.54, 6.56, 6.56, 6.58, 6.58, 6.57, 6.59, 6.61, 6.62, 6.60,
-        6.62, 6.61, 6.62, 6.62, 6.63, 6.64, 6.64, 6.62, 6.60, 6.62,
-        6.61, 6.64, 6.64, 6.64, 6.65, 6.65, 6.62, 6.61, 6.61, 6.62,
-        6.64, 6.64, 6.64, 6.64, 6.62, 6.61, 6.61, 6.64, 6.64, 6.65,
-        6.64, 6.67, 6.67, 6.69, 6.68, 6.69, 6.69, 6.70, 6.71, 6.70,
-        6.72, 6.72, 6.72, 6.72, 6.72, 6.72, 6.71, 6.70, 6.69, 6.69,
-        6.69, 6.69, 6.69, 6.70, 6.72, 6.72, 6.72, 6.72, 6.72, 6.72,
-        6.72, 6.72, 6.72, 6.72, 6.72, 6.74, 6.77, 6.77, 6.78, 6.79,
-        6.79, 6.78, 6.75, 6.74, 6.75, 6.75, 6.78, 6.80, 6.80, 6.80,
-        6.80, 6.80, 6.80, 6.80, 6.80, 6.80, 6.80, 6.82, 6.83, 6.86,
-        6.84, 6.84, 6.83, 6.82, 6.81, 6.81, 6.81, 6.80, 6.80, 6.80,
-        6.80, 6.80, 6.80, 6.80, 6.80, 6.80, 6.81, 6.82, 6.85, 6.86,
-        6.86, 6.86, 6.86, 6.86, 6.86, 6.86, 6.86, 6.86, 6.86, 6.86,
-        6.86, 6.86, 6.86, 6.85, 6.85, 6.86, 6.86, 6.86, 6.86, 6.86,
-        6.86, 6.86, 6.86, 6.86, 6.86, 6.86, 6.89, 6.89, 6.92, 6.92,
-        6.92, 6.92, 6.92, 6.92, 6.92, 6.92, 6.92, 6.94, 6.94, 6.94,
-        6.94, 6.92, 6.92, 6.92, 6.92, 6.92, 6.92, 6.92, 6.93, 6.95,
-        6.95, 6.95, 6.96, 6.96, 6.96, 6.96, 6.96, 6.97, 6.97, 6.98,
-        6.98, 6.99, 6.99, 6.99, 6.99, 6.99, 6.99, 6.99, 6.97, 6.97,
-        6.98, 6.98, 6.97, 6.96, 6.96, 6.97, 6.97, 6.96, 6.95, 6.95,
-        6.94, 6.94, 6.93, 6.92, 6.91, 6.94, 6.97, 6.99, 6.99, 6.99,
-        7.02, 7.02, 7.05, 7.03, 7.02, 7.02, 7.02, 7.00, 6.99, 6.99,
-        6.99, 7.00, 7.02, 7.04, 7.05, 7.05, 7.03, 7.02, 7.00, 7.00,
-        7.02, 7.03, 7.02, 7.03, 7.03, 7.02, 7.03, 7.02, 7.01, 7.02,
-        7.01, 7.00, 7.02, 7.00, 7.00, 7.02, 7.02, 7.03, 7.03, 7.04,
-        7.06, 7.05, 7.06, 7.07, 7.06, 7.05, 7.03, 7.03, 7.02, 7.00,
-        7.02, 7.03, 7.03, 7.02, 7.02, 7.02, 7.03, 7.04, 7.05, 7.04,
-        7.05, 7.06, 7.05, 7.05, 7.06, 7.05, 7.05, 7.03, 7.02, 7.04,
-        7.04, 7.05, 7.05, 7.05, 7.04, 7.05, 7.03, 7.06, 7.04, 7.05,
-        7.05, 7.05, 7.05, 7.03, 7.03, 7.02, 7.03, 7.04, 7.05, 7.07,
-        7.06, 7.06, 7.07, 7.06, 7.06, 7.06, 7.04, 7.06, 7.05, 7.04,
-        7.03, 7.03, 7.00, 7.00, 7.00, 6.99, 7.00, 6.99, 7.00, 7.00,
-        7.02, 7.00, 7.00, 7.00, 7.00, 7.00, 7.02, 7.00, 7.01, 6.99,
-        7.00, 7.00, 7.00, 7.00, 7.00, 6.99, 7.00, 7.03, 7.02, 7.02,
-        7.03, 7.01, 7.00, 7.00, 7.01, 7.03, 7.03, 7.03, 7.05, 7.05,
-        7.03, 7.03, 7.03, 7.02, 7.00, 7.00, 6.99, 6.99, 6.99, 7.00,
-        7.00, 6.99, 6.99, 6.99, 6.99, 6.99, 6.99, 6.97, 6.94, 6.92,
-        6.92, 6.92, 6.92, 6.94, 6.97, 6.98, 6.97, 6.97, 6.97, 6.96,
-        6.95, 6.95, 6.92, 6.92, 6.89, 6.89, 6.89, 6.89, 6.90, 6.90,
-        6.91, 6.91, 6.92, 6.92, 6.91, 6.92, 6.91, 6.92, 6.92, 6.92,
-        6.92, 6.92, 6.92, 6.92, 6.92, 6.91, 6.91, 6.88, 6.86, 6.86,
-        6.86, 6.86, 6.86, 6.88, 6.91, 6.91, 6.88, 6.86, 6.86, 6.86,
-        6.86, 6.87, 6.86, 6.84, 6.83, 6.82, 6.84, 6.84, 6.83, 6.83,
-        6.82, 6.81, 6.80, 6.80, 6.79, 6.78, 6.81, 6.80, 6.81, 6.81,
-        6.80, 6.80, 6.80, 6.81, 6.79, 6.80, 6.78, 6.78, 6.78, 6.79,
-        6.77, 6.78, 6.75, 6.75, 6.73, 6.72, 6.73, 6.71, 6.72, 6.70,
-        6.68, 6.69, 6.72, 6.70, 6.68, 6.67, 6.66, 6.65, 6.64, 6.63,
-        6.62, 6.64, 6.61, 6.61, 6.59, 6.60, 6.59, 6.61, 6.64, 6.63,
-        6.63, 6.64, 6.64, 6.64, 6.65, 6.63, 6.62, 6.61, 6.62, 6.61,
-        6.62, 6.61, 6.61, 6.60, 6.61, 6.59, 6.58, 6.59, 6.60, 6.61,
-        6.61, 6.62, 6.60, 6.61, 6.61, 6.59, 6.60, 6.61, 6.58, 6.57,
-        6.53, 6.52, 6.51, 6.51, 6.50, 6.49, 6.49, 6.47, 6.50, 6.47,
-        6.47, 6.48, 6.48, 6.51, 6.50, 6.53, 6.54, 6.53, 6.51, 6.51,
-        6.50, 6.48, 6.49, 6.49, 6.50, 6.48, 6.51, 6.51, 6.52, 6.52,
-        6.54, 6.53, 6.53, 6.51, 6.50, 6.50, 6.49, 6.49, 6.50, 6.48,
-        6.47, 6.47, 6.47, 6.48, 6.48, 6.47, 6.48, 6.47, 6.45, 6.44,
-        6.42, 6.42, 6.42, 6.42, 6.41, 6.42, 6.41, 6.43, 6.43, 6.43,
-        6.44, 6.43, 6.44, 6.43, 6.41, 6.42, 6.45, 6.43, 6.42, 6.43,
-        6.44, 6.43, 6.43, 6.44, 6.47, 6.45, 6.45, 6.42, 6.42, 6.42,
-        6.42, 6.44, 6.47, 6.47, 6.48, 6.47, 6.48, 6.47, 6.47, 6.45,
-        6.45, 6.45, 6.47, 6.47, 6.48, 6.46, 6.48, 6.49, 6.49, 6.49,
-        6.51, 6.52, 6.49, 6.48, 6.46, 6.45, 6.45, 6.45, 6.45, 6.45,
-        6.45, 6.45, 6.45, 6.45, 6.45, 6.45, 6.45, 6.45, 6.45, 6.46,
-        6.46, 6.47, 6.47, 6.47, 6.47, 6.47, 6.45, 6.45, 6.45, 6.45,
-        6.47, 6.47, 6.50, 6.51, 6.51, 6.51, 6.51, 6.51, 6.51, 6.51,
-        6.51, 6.53, 6.54, 6.54, 6.53, 6.56, 6.56, 6.58, 6.59, 6.61,
-        6.62, 6.61, 6.59, 6.61, 6.59, 6.60, 6.58, 6.58, 6.56, 6.59,
-        6.59, 6.59, 6.60, 6.63, 6.62, 6.62, 6.62, 6.64, 6.64, 6.64,
-        6.63, 6.64, 6.65, 6.62, 6.62, 6.64, 6.64, 6.62, 6.63, 6.63,
-        6.63, 6.65, 6.66, 6.66, 6.67, 6.66, 6.68, 6.70, 6.69, 6.67,
-        6.74, 6.75, 6.73, 6.73, 6.74, 6.76, 6.70, 6.70, 6.69, 6.70,
-        6.71, 6.71, 6.73, 6.72, 6.73, 6.76, 6.74, 6.74, 6.72, 6.75,
-        6.80, 6.78, 6.77, 6.75, 6.78, 6.83, 6.81, 6.80, 6.80, 6.85,
-        6.84, 6.84, 6.84, 6.83, 6.79, 6.81, 6.78, 6.78, 6.79, 6.79,
-        6.78, 6.79, 6.80, 6.79, 6.80, 6.80, 6.79, 6.79, 6.80, 6.81,
-        6.80, 6.78, 6.82, 6.84, 6.82, 6.81, 6.83, 6.84, 6.82, 6.81,
-        6.81, 6.79, 6.80, 6.80, 6.80, 6.79, 6.77, 6.78, 6.79, 6.78,
-        6.77, 6.77, 6.78, 6.81, 6.83, 6.83, 6.82, 6.83, 6.83, 6.85,
-        6.86, 6.87, 6.88, 6.89, 6.91, 6.91, 6.90, 6.91, 6.90, 6.91,
-        6.92, 6.89, 6.89, 6.88, 6.88, 6.87, 6.86, 6.87, 6.87, 6.85,
-        6.83, 6.83, 6.81, 6.81, 6.83, 6.84, 6.86, 6.86, 6.84, 6.84,
-        6.84, 6.84, 6.84, 6.83, 6.83, 6.82, 6.81, 6.82, 6.83, 6.82,
-        6.81, 6.81, 6.81, 6.81, 6.81, 6.83, 6.84, 6.83, 6.86, 6.88,
-        6.89, 6.89, 6.89, 6.91, 6.91, 6.90, 6.88, 6.88, 6.89, 6.89,
-        6.87, 6.89, 6.90, 6.89, 6.93, 6.95, 6.96, 6.97, 6.97, 6.99,
-        7.01, 7.01, 7.02, 7.00, 7.00, 7.00, 6.99, 7.00, 7.00, 7.01,
-        7.01, 7.03, 7.05, 7.04, 7.04, 7.05, 7.06, 7.06, 7.05, 7.08,
-        7.08, 7.08, 7.08, 7.08, 7.13, 7.13, 7.12, 7.13, 7.15, 7.16,
-        7.17, 7.16, 7.15, 7.16, 7.18, 7.22, 7.24, 7.26, 7.29, 7.32,
-        7.35, 7.34, 7.31, 7.30, 7.31, 7.32, 7.28, 7.29, 7.30, 7.32,
-        7.29, 7.30, 7.29, 7.31, 7.30, 7.30, 7.27, 7.26, 7.25, 7.28,
-        7.30, 7.29, 7.29, 7.30, 7.29, 7.29, 7.27, 7.24, 7.26, 7.24,
-        7.22, 7.19, 7.19, 7.13, 7.13, 7.10, 7.10, 6.97, 6.97, 6.98,
-        6.98, 6.93, 6.91, 6.85, 6.85, 6.84, 6.80, 6.79
+        418, 417, 419, 420, 420, 420, 422, 423, 422, 422,
+        423, 425, 425, 426, 424, 426, 427, 426, 427, 425,
+        427, 427, 430, 431, 431, 432, 433, 435, 435, 437,
+        438, 440, 442, 444, 445, 446, 444, 446, 445, 445,
+        444, 444, 445, 445, 444, 442, 444, 446, 444, 444,
+        448, 448, 450, 451, 450, 452, 457, 459, 458, 459,
+        458, 457, 458, 456, 453, 455, 455, 454, 449, 451,
+        450, 447, 447, 447, 448, 446, 446, 446, 449, 452,
+        451, 451, 453, 453, 452, 451, 452, 452, 452, 452,
+        455, 460, 463, 466, 466, 464, 467, 467, 466, 470,
+        472, 472, 473, 473, 475, 474, 473, 473, 472, 473,
+        474, 474, 475, 476, 476, 477, 478, 477, 478, 478,
+        478, 478, 481, 481, 482, 483, 483, 482, 482, 482,
+        482, 485, 485, 485, 484, 484, 487, 488, 489, 489,
+        489, 492, 493, 493, 493, 495, 496, 495, 494, 496,
+        495, 494, 494, 497, 497, 499, 498, 496, 498, 500,
+        500, 500, 500, 501, 504, 505, 506, 505, 506, 506,
+        504, 505, 505, 505, 506, 507, 508, 508, 508, 508,
+        508, 508, 508, 509, 509, 510, 513, 515, 518, 518,
+        516, 517, 516, 516, 517, 519, 521, 523, 524, 526,
+        527, 527, 526, 528, 527, 529, 530, 531, 532, 532,
+        531, 529, 530, 530, 530, 532, 534, 535, 536, 536,
+        537, 540, 538, 538, 540, 538, 541, 541, 543, 544,
+        545, 543, 545, 546, 545, 548, 548, 551, 551, 551,
+        551, 551, 551, 551, 552, 551, 552, 553, 553, 554,
+        554, 554, 554, 555, 555, 554, 555, 555, 555, 555,
+        554, 554, 554, 557, 557, 560, 559, 562, 560, 562,
+        565, 568, 567, 566, 566, 568, 569, 570, 570, 572,
+        574, 574, 572, 574, 572, 573, 572, 574, 573, 575,
+        576, 577, 578, 579, 578, 577, 578, 578, 578, 579,
+        579, 581, 580, 582, 583, 586, 587, 588, 587, 585,
+        585, 587, 587, 585, 585, 587, 587, 583, 584, 585,
+        587, 588, 589, 592, 590, 590, 593, 593, 593, 592,
+        592, 593, 593, 592, 594, 594, 596, 595, 598, 597,
+        598, 598, 601, 598, 600, 601, 602, 601, 601, 601,
+        601, 601, 601, 601, 603, 604, 604, 606, 606, 605,
+        605, 603, 604, 603, 602, 601, 600, 601, 600, 601,
+        603, 603, 606, 608, 607, 607, 608, 611, 611, 612,
+        612, 614, 614, 615, 617, 618, 618, 618, 620, 620,
+        619, 619, 622, 620, 620, 621, 622, 622, 623, 623,
+        622, 622, 622, 623, 622, 621, 619, 621, 620, 622,
+        623, 622, 625, 624, 623, 623, 622, 621, 623, 622,
+        622, 622, 623, 623, 626, 626, 628, 631, 633, 633,
+        632, 632, 629, 630, 632, 629, 628, 628, 629, 628,
+        629, 630, 632, 631, 631, 631, 633, 635, 634, 637,
+        636, 637, 635, 634, 634, 636, 637, 637, 640, 639,
+        640, 639, 642, 640, 640, 641, 642, 640, 643, 641,
+        640, 641, 644, 645, 645, 645, 646, 647, 649, 650,
+        651, 650, 649, 647, 647, 647, 648, 647, 648, 649,
+        650, 651, 650, 648, 648, 649, 647, 646, 647, 647,
+        646, 647, 647, 647, 650, 652, 655, 656, 658, 657,
+        658, 659, 659, 658, 660, 659, 661, 660, 661, 660,
+        659, 659, 659, 659, 659, 658, 656, 656, 656, 656,
+        654, 656, 656, 658, 658, 657, 659, 661, 662, 660,
+        662, 661, 662, 662, 663, 664, 664, 662, 660, 662,
+        661, 664, 664, 664, 665, 665, 662, 661, 661, 662,
+        664, 664, 664, 664, 662, 661, 661, 664, 664, 665,
+        664, 667, 667, 669, 668, 669, 669, 670, 671, 670,
+        672, 672, 672, 672, 672, 672, 671, 670, 669, 669,
+        669, 669, 669, 670, 672, 672, 672, 672, 672, 672,
+        672, 672, 672, 672, 672, 674, 677, 677, 678, 679,
+        679, 678, 675, 674, 675, 675, 678, 680, 680, 680,
+        680, 680, 680, 680, 680, 680, 680, 682, 683, 686,
+        684, 684, 683, 682, 681, 681, 681, 680, 680, 680,
+        680, 680, 680, 680, 680, 680, 681, 682, 685, 686,
+        686, 686, 686, 686, 686, 686, 686, 686, 686, 686,
+        686, 686, 686, 685, 685, 686, 686, 686, 686, 686,
+        686, 686, 686, 686, 686, 686, 689, 689, 692, 692,
+        692, 692, 692, 692, 692, 692, 692, 694, 694, 694,
+        694, 692, 692, 692, 692, 692, 692, 692, 693, 695,
+        695, 695, 696, 696, 696, 696, 696, 697, 697, 698,
+        698, 699, 699, 699, 699, 699, 699, 699, 697, 697,
+        698, 698, 697, 696, 696, 697, 697, 696, 695, 695,
+        694, 694, 693, 692, 691, 694, 697, 699, 699, 699,
+        702, 702, 705, 703, 702, 702, 702, 700, 699, 699,
+        699, 700, 702, 704, 705, 705, 703, 702, 700, 700,
+        702, 703, 702, 703, 703, 702, 703, 702, 701, 702,
+        701, 700, 702, 700, 700, 702, 702, 703, 703, 704,
+        706, 705, 706, 707, 706, 705, 703, 703, 702, 700,
+        702, 703, 703, 702, 702, 702, 703, 704, 705, 704,
+        705, 706, 705, 705, 706, 705, 705, 703, 702, 704,
+        704, 705, 705, 705, 704, 705, 703, 706, 704, 705,
+        705, 705, 705, 703, 703, 702, 703, 704, 705, 707,
+        706, 706, 707, 706, 706, 706, 704, 706, 705, 704,
+        703, 703, 700, 700, 700, 699, 700, 699, 700, 700,
+        702, 700, 700, 700, 700, 700, 702, 700, 701, 699,
+        700, 700, 700, 700, 700, 699, 700, 703, 702, 702,
+        703, 701, 700, 700, 701, 703, 703, 703, 705, 705,
+        703, 703, 703, 702, 700, 700, 699, 699, 699, 700,
+        700, 699, 699, 699, 699, 699, 699, 697, 694, 692,
+        692, 692, 692, 694, 697, 698, 697, 697, 697, 696,
+        695, 695, 692, 692, 689, 689, 689, 689, 690, 690,
+        691, 691, 692, 692, 691, 692, 691, 692, 692, 692,
+        692, 692, 692, 692, 692, 691, 691, 688, 686, 686,
+        686, 686, 686, 688, 691, 691, 688, 686, 686, 686,
+        686, 687, 686, 684, 683, 682, 684, 684, 683, 683,
+        682, 681, 680, 680, 679, 678, 681, 680, 681, 681,
+        680, 680, 680, 681, 679, 680, 678, 678, 678, 679,
+        677, 678, 675, 675, 673, 672, 673, 671, 672, 670,
+        668, 669, 672, 670, 668, 667, 666, 665, 664, 663,
+        662, 664, 661, 661, 659, 660, 659, 661, 664, 663,
+        663, 664, 664, 664, 665, 663, 662, 661, 662, 661,
+        662, 661, 661, 660, 661, 659, 658, 659, 660, 661,
+        661, 662, 660, 661, 661, 659, 660, 661, 658, 657,
+        653, 652, 651, 651, 650, 649, 649, 647, 650, 647,
+        647, 648, 648, 651, 650, 653, 654, 653, 651, 651,
+        650, 648, 649, 649, 650, 648, 651, 651, 652, 652,
+        654, 653, 653, 651, 650, 650, 649, 649, 650, 648,
+        647, 647, 647, 648, 648, 647, 648, 647, 645, 644,
+        642, 642, 642, 642, 641, 642, 641, 643, 643, 643,
+        644, 643, 644, 643, 641, 642, 645, 643, 642, 643,
+        644, 643, 643, 644, 647, 645, 645, 642, 642, 642,
+        642, 644, 647, 647, 648, 647, 648, 647, 647, 645,
+        645, 645, 647, 647, 648, 646, 648, 649, 649, 649,
+        651, 652, 649, 648, 646, 645, 645, 645, 645, 645,
+        645, 645, 645, 645, 645, 645, 645, 645, 645, 646,
+        646, 647, 647, 647, 647, 647, 645, 645, 645, 645,
+        647, 647, 650, 651, 651, 651, 651, 651, 651, 651,
+        651, 653, 654, 654, 653, 656, 656, 658, 659, 661,
+        662, 661, 659, 661, 659, 660, 658, 658, 656, 659,
+        659, 659, 660, 663, 662, 662, 662, 664, 664, 664,
+        663, 664, 665, 662, 662, 664, 664, 662, 663, 663,
+        663, 665, 666, 666, 667, 666, 668, 670, 669, 667,
+        674, 675, 673, 673, 674, 676, 670, 670, 669, 670,
+        671, 671, 673, 672, 673, 676, 674, 674, 672, 675,
+        680, 678, 677, 675, 678, 683, 681, 680, 680, 685,
+        684, 684, 684, 683, 679, 681, 678, 678, 679, 679,
+        678, 679, 680, 679, 680, 680, 679, 679, 680, 681,
+        680, 678, 682, 684, 682, 681, 683, 684, 682, 681,
+        681, 679, 680, 680, 680, 679, 677, 678, 679, 678,
+        677, 677, 678, 681, 683, 683, 682, 683, 683, 685,
+        686, 687, 688, 689, 691, 691, 690, 691, 690, 691,
+        692, 689, 689, 688, 688, 687, 686, 687, 687, 685,
+        683, 683, 681, 681, 683, 684, 686, 686, 684, 684,
+        684, 684, 684, 683, 683, 682, 681, 682, 683, 682,
+        681, 681, 681, 681, 681, 683, 684, 683, 686, 688,
+        689, 689, 689, 691, 691, 690, 688, 688, 689, 689,
+        687, 689, 690, 689, 693, 695, 696, 697, 697, 699,
+        701, 701, 702, 700, 700, 700, 699, 700, 700, 701,
+        701, 703, 705, 704, 704, 705, 706, 706, 705, 708,
+        708, 708, 708, 708, 713, 713, 712, 713, 715, 716,
+        717, 716, 715, 716, 718, 722, 724, 726, 729, 732,
+        735, 734, 731, 730, 731, 732, 728, 729, 730, 732,
+        729, 730, 729, 731, 730, 730, 727, 726, 725, 728,
+        730, 729, 729, 730, 729, 729, 727, 724, 726, 724,
+        722, 719, 719, 713, 713, 710, 710, 697, 697, 698,
+        698, 693, 691, 685, 685, 684, 680, 679
     };
 
-    static const float * const robinson_dadson_curves[] =
+    static const int16_t * const robinson_dadson_curves[] =
     {
         robinson_dadson_curve_0_phons,
         robinson_dadson_curve_10_phons,
@@ -1560,7 +1560,8 @@ namespace lsp
         10, // curves
         robinson_dadson_curves // curve data
     };
-}
+
+} /* namespace lsp */
 
 #endif /* GENERATED_ISO226_ROBINSON_DADSON_H_ */
 
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/include/private/meta/loud_comp.h 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/private/meta/loud_comp.h
--- 1.2.21-5/modules/lsp-plugins-loud-comp/include/private/meta/loud_comp.h	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/private/meta/loud_comp.h	2025-08-26 18:15:57.317871377 +0000
@@ -51,6 +51,14 @@ namespace lsp
             static constexpr size_t STD_DFL             = 4;
 
             static constexpr size_t CURVE_MESH_SIZE     = 512;
+
+            static constexpr size_t FILTER_BANDS        = 64;
+
+            enum mode_t
+            {
+                MODE_FFT,
+                MODE_IIR
+            };
         };
 
         extern const meta::plugin_t loud_comp_mono;
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/include/private/plugins/loud_comp.h 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/private/plugins/loud_comp.h
--- 1.2.21-5/modules/lsp-plugins-loud-comp/include/private/plugins/loud_comp.h	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/include/private/plugins/loud_comp.h	2025-08-26 18:15:57.317871377 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-loud-comp
  * Created on: 3 авг. 2021 г.
@@ -26,6 +26,7 @@
 #include <lsp-plug.in/plug-fw/core/IDBuffer.h>
 #include <lsp-plug.in/dsp-units/ctl/Blink.h>
 #include <lsp-plug.in/dsp-units/ctl/Bypass.h>
+#include <lsp-plug.in/dsp-units/filters/Equalizer.h>
 #include <lsp-plug.in/dsp-units/meters/LoudnessMeter.h>
 #include <lsp-plug.in/dsp-units/noise/Generator.h>
 #include <lsp-plug.in/dsp-units/util/Delay.h>
@@ -57,6 +58,7 @@ namespace lsp
                     dspu::Bypass            sBypass;    // Bypass
                     dspu::Delay             sDelay;     // Delay (for bypass)
                     dspu::SpectralProcessor sProc;      // Spectral processor
+                    dspu::Equalizer         sEqualizer; // Equalizer
                     dspu::Blink             sClipInd;   // Clip blink
 
                     plug::IPort            *pIn;        // Input port
@@ -78,9 +80,11 @@ namespace lsp
                 };
 
             protected:
-                size_t                  nChannels;      // Number of channels
-                size_t                  nMode;          // Current curve mode
-                size_t                  nRank;          // Current FFT rank
+                uint32_t                nChannels;      // Number of channels
+                uint32_t                nMode;          // Operating mode
+                uint32_t                nCurve;         // Currently selected curve
+                uint32_t                nRank;          // Current FFT rank
+                uint32_t                nFilters;       // Number of filters
                 float                   fGain;          // Input gain
                 float                   fVolume;        // Volume
                 float                   fInLufs;        // Input LUFS
@@ -97,8 +101,11 @@ namespace lsp
                 float                  *vFreqMesh;      // List of frequencies for the mesh
                 float                  *vAmpMesh;       // List of amplitudes for the mesh
                 bool                    bSyncMesh;      // Synchronize mesh response with UI
+                bool                    bSmooth;        // Smooth mode of equalizer
                 core::IDBuffer         *pIDisplay;      // Inline display buffer
 
+                float                   vOldGains[meta::loud_comp_metadata::FILTER_BANDS];
+                float                   vGains[meta::loud_comp_metadata::FILTER_BANDS];
                 dspu::Oscillator        sOsc;           // Oscillator for reference sound
                 dspu::NoiseGenerator    sNoise;         // Pink noise generator
                 dspu::LoudnessMeter     sInMeter;       // Input loudness meter
@@ -108,8 +115,10 @@ namespace lsp
 
                 plug::IPort            *pBypass;        // Bypass
                 plug::IPort            *pGain;          // Input gain
-                plug::IPort            *pMode;          // Curve mode selector
+                plug::IPort            *pMode;          // Operating mode
+                plug::IPort            *pCurve;         // Curve selector
                 plug::IPort            *pRank;          // FFT rank selector
+                plug::IPort            *pApproximation; // IIR approximation
                 plug::IPort            *pVolume;        // Output volume
                 plug::IPort            *pMesh;          // Output mesh response
                 plug::IPort            *pRelative;      // Relative mesh display
@@ -122,9 +131,14 @@ namespace lsp
                 plug::IPort            *pHClipReset;    // Hard clipping reset
 
             protected:
-                void                update_response_curve();
+                void                update_fft_curve();
+                void                update_iir_curve(uint32_t slope);
                 void                process_spectrum(channel_t *c, float *buf);
+                void                generate_signal(size_t samples);
+                void                process_audio(size_t samples);
+                void                generate_frequencies();
                 void                do_destroy();
+                void                process_iir_equalizer(channel_t *c, size_t samples);
 
             protected:
                 static void         process_callback(void *object, void *subject, float *buf, size_t rank);
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-loud-comp/make/tools.mk	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/make/tools.mk	2025-08-26 18:15:57.317871377 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/modules.mk
--- 1.2.21-5/modules/lsp-plugins-loud-comp/modules.mk	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/modules.mk	2025-08-26 18:15:57.317871377 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/project.mk
--- 1.2.21-5/modules/lsp-plugins-loud-comp/project.mk	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/project.mk	2025-08-26 18:15:57.317871377 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Loudness Compensator Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-loud-comp/res/doc/screenshots/loud_comp_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/doc/screenshots/loud_comp_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-loud-comp/res/doc/screenshots/loud_comp_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/doc/screenshots/loud_comp_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/res/main/i18n/default/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/main/i18n/default/lists.json
--- 1.2.21-5/modules/lsp-plugins-loud-comp/res/main/i18n/default/lists.json	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/main/i18n/default/lists.json	2025-08-26 18:15:57.321871338 +0000
@@ -15,6 +15,17 @@
 			"pink_20": "Pink Noise @ -20 LUFS",
 			"pink_23": "Pink Noise @ -23 LUFS",
             "sine_1khz": "Sine @ 1kHz 0 dBFS"
+		},
+		"mode": {
+			"iir": "IIR",
+			"fft": "FFT"
+		},
+		"quality": {
+			"best": "Best",
+			"fastest": "Fastest",
+			"high": "High",
+			"low": "Low",
+			"normal": "Normal"
 		}
 	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/res/main/i18n/ru/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/main/i18n/ru/lists.json
--- 1.2.21-5/modules/lsp-plugins-loud-comp/res/main/i18n/ru/lists.json	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/main/i18n/ru/lists.json	2025-08-26 18:15:57.321871338 +0000
@@ -15,6 +15,17 @@
 			"pink_20": "Розовый шум @ -20 LUFS",
 			"pink_23": "Розовый шум @ -23 LUFS",
             "sine_1khz": "Синусоида @ 1кГц 0 дБПШ"
+		},
+		"mode": {
+			"iir": "БИХ",
+			"fft": "БПФ"
+		},
+		"quality": {
+			"best": "Наилучшее",
+			"fastest": "Быстрейшее",
+			"high": "Высокое",
+			"low": "Низкое",
+			"normal": "Нормальное"
 		}
 	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/res/main/i18n/us/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/main/i18n/us/lists.json
--- 1.2.21-5/modules/lsp-plugins-loud-comp/res/main/i18n/us/lists.json	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/main/i18n/us/lists.json	2025-08-26 18:15:57.321871338 +0000
@@ -15,6 +15,17 @@
 			"pink_20": "Pink Noise @ -20 LUFS",
 			"pink_23": "Pink Noise @ -23 LUFS",
             "sine_1khz": "Sine @ 1kHz 0 dBFS"
+		},
+		"mode": {
+			"iir": "IIR",
+			"fft": "FFT"
+		},
+		"quality": {
+			"best": "Best",
+			"fastest": "Fastest",
+			"high": "High",
+			"low": "Low",
+			"normal": "Normal"
 		}
 	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/res/main/ui/util/loud_comp.xml 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/main/ui/util/loud_comp.xml
--- 1.2.21-5/modules/lsp-plugins-loud-comp/res/main/ui/util/loud_comp.xml	2025-03-01 12:43:07.508584063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/res/main/ui/util/loud_comp.xml	2025-08-26 18:15:57.321871338 +0000
@@ -22,10 +22,13 @@
 					<void expand="true"/>
 					<vsep pad.h="2" bg.color="bg" hreduce="true"/>
 					<button id="relspec" text="labels.signal.relative" size="16" ui:inject="Button_green"/>
+					<label text="labels.mode:" pad.l="4" />
+					<combo id="mode"/>
 					<label text="labels.contour:" pad.l="4" />
 					<combo id="std"/>
-					<label text="labels.fft.fft:" pad.l="4"/>
-					<combo id="fft"/>
+					<label text="labels.quality" pad.l="4"/>
+					<combo id="fft" visibility=":mode ieq 0" />
+					<combo id="approx" visibility=":mode ieq 1" />
 				</hbox>
 			</cell>
 
@@ -67,7 +70,7 @@
 				<vbox expand="true">
 					<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.frequency">
 						<vbox expand="true">
-							<graph width.min="340" height.min="176" expand="true" visibility=":relspec ieq 0">
+							<graph width.min="380" height.min="196" expand="true" visibility=":relspec ieq 0">
 								<origin hpos="-1" vpos="-1" visible="false"/>
 
 								<!-- Gray grid -->
@@ -131,7 +134,7 @@
 								</ui:with>
 							</graph>
 
-							<graph width.min="340" height.min="176" expand="true" visibility=":relspec ieq 1">
+							<graph width.min="380" height.min="196" expand="true" visibility=":relspec ieq 1">
 								<origin hpos="-1" vpos="-1" visible="false"/>
 
 								<!-- Gray grid -->
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/src/doc/manuals/plugins/loud_comp.php 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/src/doc/manuals/plugins/loud_comp.php
--- 1.2.21-5/modules/lsp-plugins-loud-comp/src/doc/manuals/plugins/loud_comp.php	2025-03-01 12:43:07.516584016 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/src/doc/manuals/plugins/loud_comp.php	2025-08-26 18:15:57.329871261 +0000
@@ -56,7 +56,7 @@
 	volume settings may	cause unexpected (sometimes horrible) sounding of the mix at the maximum loudness.
 </p>
 <p>
-	To avoid this, the calibration of the audio system is peformed, so the digital signal with the maximized
+	To avoid this, the calibration of the audio system is performed, so the digital signal with the maximized
 	loudness gives a 83 dB SPL level at the output. The 83 Phon equal loudness curve (can be linerarly
 	approximated from other curves on the figure) is considered having flat frequency response, frequency
 	responses for other	SPL levels are computed by subtracting the corresponding equal loudness curve from the
@@ -71,7 +71,7 @@
 <p><b>Preparing the sound system for work.</b></p>
 <p>
 	The plugin assumes the 83 phon equal loudness curve being a flat frequency response. For that case the
-	audio system needs to be callibrated for the 83 dB output loudness. The plugin can generate a 0 dBFS sine wave 
+	audio system needs to be calibrated for the 83 dB output loudness. The plugin can generate a 0 dBFS sine wave 
 	digital reference signal at 1000 Hz which can be reproduced by the audio system and measured by the SPL meter.
 </p>
 <p>
@@ -93,7 +93,7 @@
 <ul>
 	<li><b>Bypass</b> - bypass switch, when turned on (led indicator is shining), the plugin bypasses signal.</li>
 	<li><b>Input</b> - the input gain settings, allows to adjust the level of the input signal to the desired level.</li>
-	<li><b>Reference</b> - turns on the reference signal for callibration purposes.</li>
+	<li><b>Reference</b> - turns on the reference signal for calibration purposes.</li>
 	<li><b>Reference type combo</b> - allows to select the type of the reference signal:</li>
 	<ul>
 		<li><b>Sine @ 1kHz 0 dBFS</b> - the pure sine wave at 1000 Hz frequency and 0 dBFS amplitude, fully reflects the same value in phons;</li>
@@ -104,18 +104,27 @@
 		<li><b>Pink Noise @ -14 LUFS</b> - pink noise at -14 LUFS, the actual 0 dB value for the K14 metering system;</li>
 		<li><b>Pink Noise @ -12 LUFS</b> - pink noise at -12 LUFS, the actual 0 dB value for the K12 metering system.</li>
 	</ul>
+	<li><b>Mode</b> - allows to switch between linear phase filter and minimum phase filter:</li>
+	<ul>
+		<li><b>FFT</b></li> - the linear phase filter mode processing using FFT transfrorm.
+		<li><b>IIR</b></li> - the minimum phase filter mode processing using digital biquad filters.
+	</ul>
 	<li><b>Contour</b> - allows to select different equal loudness contour:</li>
 	<ul>
-		<li><b>Flat</b> - applies flat frequency response to the whole spectum. Is similar to just a gain knob but useful to perform a comparison to other mode</li>
+		<li><b>Flat</b> - applies flat frequency response to the whole spectrum. Is similar to just a gain knob but useful to perform a comparison to other mode</li>
 		<li><b>ISO 226:2003</b> - applies recent ISO 226-2003 contours to the signal</li>
 		<li><b>ISO 226:2023</b> - applies recent ISO 226-2023 contours to the signal</li>
 		<li><b>Fletcher and Munson</b> - applies Fletcher and Munson (1933) contours to the signal</li>
 		<li><b>Robinson and Dadson</b> - applies Robinson and Dadson (1956) contours to the signal</li>
 	</ul>
-	<li><b>FFT</b> - allows to select size of the FFT frame used for the processing. The larger FFT frame is, the more precize the curve is approximated and the more latency the plugin introduces</li>
+	<li><b>Quality</b> - the quality of the filter curve approximation.</li>
+	<ul>
+		<li>For <b>FFT</b> mode it allows to select size of the FFT frame used for the processing. The larger FFT frame is, the more precise the curve is approximated and the more latency the plugin introduces.</li></li>
+		<li>For <b>IIR</b> mode it allows to select the number of filters and their slopes for the processing. The greater quality is set, the more filters are added and the more CPU processing is required.</li></li>
+	</ul> 
 	<li><b>Volume</b> - the output volume of the signal with applied equal loudness contour, controls the loudness of the 1 kHz pure sine wave</li>
 	<li><b>Clipping</b> - allows to enable and set the gap level for the hard clipping of the output signal</li>
-	<li><b>Reset</b> - reset leds that indicate that hard clip occured in the clipping mode</li>
+	<li><b>Reset</b> - reset leds that indicate that hard clip occurred in the clipping mode</li>
 	<li><b>Relative</b> - draws the frequency response in relative to the loudness mode when enabled</li>
 </ul>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/src/main/meta/loud_comp.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/src/main/meta/loud_comp.cpp
--- 1.2.21-5/modules/lsp-plugins-loud-comp/src/main/meta/loud_comp.cpp	2025-03-01 12:43:07.516584016 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/src/main/meta/loud_comp.cpp	2025-08-26 18:15:57.329871261 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-loud-comp
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_LOUD_COMP_VERSION_MAJOR       1
 #define LSP_PLUGINS_LOUD_COMP_VERSION_MINOR       0
-#define LSP_PLUGINS_LOUD_COMP_VERSION_MICRO       24
+#define LSP_PLUGINS_LOUD_COMP_VERSION_MICRO       26
 
 #define LSP_PLUGINS_LOUD_COMP_VERSION  \
     LSP_MODULE_VERSION( \
@@ -42,6 +42,23 @@ namespace lsp
         static const int clap_features_mono[]       = { CF_AUDIO_EFFECT, CF_UTILITY, CF_MONO, -1 };
         static const int clap_features_stereo[]     = { CF_AUDIO_EFFECT, CF_UTILITY, CF_STEREO, -1 };
 
+        static const port_item_t loud_comp_mode[] =
+        {
+            { "FFT",                "lcomp.mode.fft" },
+            { "IIR",                "lcomp.mode.iir" },
+            { NULL, NULL }
+        };
+
+        static const port_item_t loud_comp_approximation[] =
+        {
+            { "Fastest",            "lcomp.quality.fastest" },
+            { "Low",                "lcomp.quality.low" },
+            { "Normal",             "lcomp.quality.normal" },
+            { "High",               "lcomp.quality.high" },
+            { "Best",               "lcomp.quality.best" },
+            { NULL, NULL }
+        };
+
         static const port_item_t loud_comp_fft_rank[] =
         {
             { "256",    NULL },
@@ -77,17 +94,19 @@ namespace lsp
         };
 
         #define LOUD_COMP_COMMON \
-            AMP_GAIN("input", "Input gain", GAIN_AMP_0_DB, GAIN_AMP_P_72_DB), \
-            COMBO("std", "Loudness contour standard", loud_comp_metadata::STD_DFL, loud_comp_std), \
-            COMBO("fft", "FFT size", loud_comp_metadata::FFT_RANK_IDX_DFL, loud_comp_fft_rank), \
-            CONTROL("volume", "Output volume", U_DB, loud_comp_metadata::PHONS), \
-            SWITCH("refer", "Enable reference generator", 0.0f), \
-            COMBO("reftype", "Type of reference generator", 2.0f, loud_comp_generator), \
-            SWITCH("hclip", "Hard-clipping enable", 0.0f), \
-            CONTROL("hcrange", "Hard-clipping range", U_DB, loud_comp_metadata::HCRANGE), \
-            TRIGGER("hcclean", "Clean hard-clipping indicators"), \
+            AMP_GAIN("input", "Input gain", "Input gain", GAIN_AMP_0_DB, GAIN_AMP_P_72_DB), \
+            COMBO("mode", "Processing mode", "Mode", 0, loud_comp_mode), \
+            COMBO("std", "Loudness contour standard", "Standard", loud_comp_metadata::STD_DFL, loud_comp_std), \
+            COMBO("fft", "FFT size", "FFT size", loud_comp_metadata::FFT_RANK_IDX_DFL, loud_comp_fft_rank), \
+            COMBO("approx", "IIR approximation", "Approximation", 2, loud_comp_approximation), \
+            CONTROL("volume", "Output volume", "Out volume", U_DB, loud_comp_metadata::PHONS), \
+            SWITCH("refer", "Enable reference generator", "Reference", 0.0f), \
+            COMBO("reftype", "Type of reference generator", "Ref type", 2.0f, loud_comp_generator), \
+            SWITCH("hclip", "Hard-clipping enable", "Hard clip on", 0.0f), \
+            CONTROL("hcrange", "Hard-clipping range", "Hard clip", U_DB, loud_comp_metadata::HCRANGE), \
+            TRIGGER("hcclean", "Clean hard-clipping indicators", "Clear hard clip"), \
             MESH("spec", "Level compensation frequency graph", 2, loud_comp_metadata::CURVE_MESH_SIZE), \
-            SWITCH("relspec", "Equalization curve is shown relative to the volume", 0.0f), \
+            SWITCH("relspec", "Equalization curve is shown relative to the volume", "Rel curve", 0.0f), \
             LUFS_METER("lufs_il", "Input signal LUFS", 24.0f), \
             LUFS_METER("lufs_ol", "Input signal LUFS", 24.0f)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-loud-comp/src/main/plug/loud_comp.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/src/main/plug/loud_comp.cpp
--- 1.2.21-5/modules/lsp-plugins-loud-comp/src/main/plug/loud_comp.cpp	2025-03-01 12:43:07.516584016 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-loud-comp/src/main/plug/loud_comp.cpp	2025-08-26 18:15:57.329871261 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-loud-comp
  * Created on: 3 авг. 2021 г.
@@ -45,8 +45,25 @@ namespace lsp
             &iso226_2023_curve,
         };
 
-        static constexpr size_t BUF_SIZE        = 0x1000;
-        static constexpr size_t NUM_CURVES      = (sizeof(freq_curves)/sizeof(freq_curve_t *));
+        static constexpr size_t EQ_SMOOTH_STEP      = 32;
+        static constexpr size_t BUF_SIZE            = 0x200;
+        static constexpr size_t NUM_CURVES          = (sizeof(freq_curves)/sizeof(freq_curve_t *));
+        static constexpr float CURVE_APPROX         = 0.0005f * M_LN10;
+
+        typedef struct approx_preset_t
+        {
+            uint8_t     nFilters;
+            uint8_t     nSlope;
+        } approx_preset_t;
+
+        static const approx_preset_t approx_presets[] =
+        {
+            { 16, 1, },
+            { 24, 2, },
+            { 32, 3, },
+            { 48, 4, },
+            { 64, 5, }
+        };
 
         //-------------------------------------------------------------------------
         // Plugin factory
@@ -68,8 +85,10 @@ namespace lsp
         loud_comp::loud_comp(const meta::plugin_t *metadata, size_t channels): plug::Module(metadata)
         {
             nChannels       = channels;
-            nMode           = 0;
+            nMode           = meta::loud_comp_metadata::MODE_FFT;
+            nCurve          = 0;
             nRank           = meta::loud_comp_metadata::FFT_RANK_MIN;
+            nFilters        = 24;
             fGain           = 0.0f;
             fVolume         = -1.0f;
             fInLufs         = GAIN_AMP_M_INF_DB;
@@ -87,13 +106,19 @@ namespace lsp
             vFreqMesh       = NULL;
             vAmpMesh        = NULL;
             bSyncMesh       = false;
+            bSmooth         = false;
             pData           = NULL;
             pIDisplay       = NULL;
 
+            dsp::fill(vOldGains, GAIN_AMP_0_DB, meta::loud_comp_metadata::FILTER_BANDS);
+            dsp::fill(vGains, GAIN_AMP_0_DB, meta::loud_comp_metadata::FILTER_BANDS);
+
             pBypass         = NULL;
             pGain           = NULL;
             pMode           = NULL;
+            pCurve          = NULL;
             pRank           = NULL;
+            pApproximation  = NULL;
             pVolume         = NULL;
             pMesh           = NULL;
             pRelative       = NULL;
@@ -171,12 +196,15 @@ namespace lsp
                 c->sDelay.construct();
                 c->sBypass.construct();
                 c->sProc.construct();
+                c->sEqualizer.construct();
                 c->sClipInd.construct();
 
                 c->sDelay.init(1 << (meta::loud_comp_metadata::FFT_RANK_MAX - 1));
                 c->sProc.init(meta::loud_comp_metadata::FFT_RANK_MAX);
                 c->sProc.bind(process_callback, this, c);
                 c->sProc.set_phase(0.5f * i);
+                c->sEqualizer.init(meta::loud_comp_metadata::FILTER_BANDS, 0);
+                c->sEqualizer.set_mode(dspu::EQM_IIR);
 
                 c->vIn              = NULL;
                 c->vOut             = NULL;
@@ -226,7 +254,9 @@ namespace lsp
             BIND_PORT(pBypass);
             BIND_PORT(pGain);
             BIND_PORT(pMode);
+            BIND_PORT(pCurve);
             BIND_PORT(pRank);
+            BIND_PORT(pApproximation);
             BIND_PORT(pVolume);
             BIND_PORT(pReference);
             BIND_PORT(pGenerator);
@@ -278,6 +308,7 @@ namespace lsp
 
                 c->sDelay.destroy();
                 c->sProc.destroy();
+                c->sEqualizer.destroy();
                 vChannels[i]    = NULL;
             }
 
@@ -311,6 +342,7 @@ namespace lsp
                 // Update processor settings
                 c->sBypass.init(sr);
                 c->sClipInd.init(sr, 0.2f);
+                c->sEqualizer.set_sample_rate(sr);
             }
         }
 
@@ -349,24 +381,58 @@ namespace lsp
 
         void loud_comp::update_settings()
         {
-            bool rst_clip       = pHClipReset->value() >= 0.5f;
-            bool bypass         = pBypass->value() >= 0.5f;
-            size_t mode         = pMode->value();
-            size_t rank         = meta::loud_comp_metadata::FFT_RANK_MIN + ssize_t(pRank->value());
-            rank                = lsp_limit(rank, meta::loud_comp_metadata::FFT_RANK_MIN, meta::loud_comp_metadata::FFT_RANK_MAX);
-            float volume        = pVolume->value();
-            bool relative       = pRelative->value() >= 0.5f;
-            bool reference       = pReference->value() >= 0.5f;
+            const bool rst_clip     = pHClipReset->value() >= 0.5f;
+            const bool bypass       = pBypass->value() >= 0.5f;
+            const uint32_t mode     = pMode->value();
+            const uint32_t curve    = pCurve->value();
+            uint32_t rank           = meta::loud_comp_metadata::FFT_RANK_MIN + ssize_t(pRank->value());
+            rank                    = lsp_limit(rank, meta::loud_comp_metadata::FFT_RANK_MIN, meta::loud_comp_metadata::FFT_RANK_MAX);
+            const float volume      = pVolume->value();
+            const bool relative     = pRelative->value() >= 0.5f;
+            const bool reference    = pReference->value() >= 0.5f;
+            const uint32_t iapprox  = pApproximation->value();
+            const uint32_t filters  = approx_presets[iapprox].nFilters;
+            const uint32_t slope    = approx_presets[iapprox].nSlope;
 
             // Need to update curve?
-            if ((mode != nMode) || (rank != nRank) || (volume != fVolume))
+            if (mode != nMode)
             {
-                nMode               = mode;
-                nRank               = rank;
-                fVolume             = volume;
-                bSyncMesh           = true;
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    channel_t *c = vChannels[i];
+                    c->sDelay.clear();
+                    c->sProc.reset();
+                    c->sEqualizer.reset();
+                }
+            }
+
+            if (mode == meta::loud_comp_metadata::MODE_FFT)
+            {
+                if ((mode != nMode) || (curve != nCurve) || (rank != nRank) || (volume != fVolume))
+                {
+                    nMode               = mode;
+                    nCurve              = curve;
+                    nRank               = rank;
+                    fVolume             = volume;
+                    bSyncMesh           = true;
+                    bSmooth             = false;
+
+                    update_fft_curve();
+                }
+            }
+            else // mode == meta::loud_comp_metadata::MODE_IIR
+            {
+                if ((mode != nMode) || (curve != nCurve) || (filters != nFilters) || (volume != fVolume))
+                {
+                    bSmooth             = (nMode == mode) && (nCurve == curve) && (nFilters == filters);
+                    nMode               = mode;
+                    nCurve              = curve;
+                    nFilters            = filters;
+                    fVolume             = volume;
+                    bSyncMesh           = true;
 
-                update_response_curve();
+                    update_iir_curve(slope);
+                }
             }
 
             if (reference != bReference)
@@ -389,53 +455,78 @@ namespace lsp
 
             if (bHClipOn)
             {
+                const float range   = dspu::db_to_gain(pHClipRange->value());
                 float min, max;
-                dsp::abs_minmax(vFreqApply, 2 << nRank, &min, &max);
-                fHClipLvl           = dspu::db_to_gain(pHClipRange->value()) * sqrtf(min * max);
+                if (nMode == meta::loud_comp_metadata::MODE_FFT)
+                {
+                    dsp::abs_minmax(vFreqApply, 2 << nRank, &min, &max);
+                    fHClipLvl           = range * sqrtf(min * max);
+                }
+                else
+                    fHClipLvl           = range * dsp::max(vGains, nFilters);
             }
             else
                 fHClipLvl           = 1.0f;
 
             for (size_t i=0; i<nChannels; ++i)
             {
-                channel_t *c        = vChannels[i];
+                channel_t *c            = vChannels[i];
+                const size_t latency    = (nMode == meta::loud_comp_metadata::MODE_FFT) ? c->sProc.latency() : c->sEqualizer.get_latency();
+
                 c->sBypass.set_bypass(bypass);
                 c->sProc.set_rank(rank);
-                c->sDelay.set_delay(c->sProc.latency());
+
+                c->sDelay.set_delay(latency);
                 if (rst_clip)
                     c->bHClip       = false;
             }
         }
 
-        void loud_comp::update_response_curve()
+        void loud_comp::generate_frequencies()
+        {
+            // Initialize list of frequencies
+            const float norm        = logf(meta::loud_comp_metadata::FREQ_MAX/meta::loud_comp_metadata::FREQ_MIN) /
+                                      (meta::loud_comp_metadata::CURVE_MESH_SIZE - 1);
+            for (size_t i=0; i<meta::loud_comp_metadata::CURVE_MESH_SIZE; ++i)
+                vFreqMesh[i]    = i * norm;
+            dsp::exp1(vFreqMesh, meta::loud_comp_metadata::CURVE_MESH_SIZE);
+            dsp::mul_k2(vFreqMesh, meta::loud_comp_metadata::FREQ_MIN, meta::loud_comp_metadata::CURVE_MESH_SIZE);
+        }
+
+        void loud_comp::update_fft_curve()
         {
-            const freq_curve_t *c   = ((nMode > 0) && (nMode <= NUM_CURVES)) ? freq_curves[nMode-1] : NULL;
+            const freq_curve_t *c   = ((nCurve > 0) && (nCurve <= NUM_CURVES)) ? freq_curves[nCurve-1] : NULL;
             size_t fft_size         = 1 << nRank;
             size_t fft_csize        = (fft_size >> 1) + 1;
 
             if (c != NULL)
             {
                 // Get the volume
-                float vol   = lsp_limit(fVolume - meta::loud_comp_metadata::PHONS_MIN, c->amin, c->amax) - c->amin;
+                const float vol     = lsp_limit(fVolume - meta::loud_comp_metadata::PHONS_MIN, c->amin, c->amax) - c->amin;
 
-                // Compute interpolatoin coefficients
-                float range = c->amax - c->amin;
-                float step  = range / (c->curves-1);
-                ssize_t nc  = vol / step;
-                if (nc >= ssize_t(c->curves-1))
+                // Compute interpolation coefficients
+                float range         = c->amax - c->amin;
+                const float step    = range / (c->curves - 1);
+                ssize_t nc          = vol / step;
+                if (nc >= ssize_t(c->curves - 1))
                     --nc;
-                float k2    = 0.05f * M_LN10 * (vol/step - nc);
-                float k1    = 0.05f * M_LN10 - k2;
+                const float k2      = CURVE_APPROX * (vol/step - nc);
+                const float k1      = CURVE_APPROX - k2;
 
                 // Interpolate curves to the temporary buffer, translate decibels to gain
-                dsp::mix_copy2(vTmpBuf, c->data[nc], c->data[nc+1], k1, k2, c->hdots);
+                const int16_t *a    = c->data[nc];
+                const int16_t *b    = c->data[nc+1];
+                for (size_t i=0; i<c->hdots; ++i)
+                    vTmpBuf[i]      = a[i] * k1 + b[i] * k2;
+
                 dsp::exp1(vTmpBuf, c->hdots);
 
                 // Compute frequency response
                 ssize_t idx;
-                float *v    = vFreqApply;
-                range       = 1.0f / logf(c->fmax / c->fmin);
-                float kf    = float(fSampleRate) / float(fft_size);
+                float *v            = vFreqApply;
+                const float rfmin   = 1.0f / c->fmin;
+                const float kf      = float(fSampleRate) / float(fft_size);
+                const float kdf     = (c->hdots - 1) / logf(c->fmax * rfmin);
                 for (size_t i=0; i < fft_csize; ++i, v += 2)
                 {
                     float f     = kf * i; // Target frequency
@@ -444,10 +535,7 @@ namespace lsp
                     else if (f >= c->fmax)
                         idx         = c->hdots - 1;
                     else
-                    {
-                        f               = logf(f / c->fmin);
-                        idx             = (f * c->hdots) * range;
-                    }
+                        idx             = logf(f * rfmin) * kdf;
 
                     f           = vTmpBuf[idx];
                     v[0]        = f;
@@ -465,20 +553,15 @@ namespace lsp
             }
             else
             {
-                float vol   = dspu::db_to_gain(fVolume);
+                const float vol     = dspu::db_to_gain(fVolume);
                 dsp::fill(vFreqApply, vol, fft_size * 2);
             }
 
             // Initialize list of frequencies
-            float norm          = logf(meta::loud_comp_metadata::FREQ_MAX/meta::loud_comp_metadata::FREQ_MIN) /
-                                      (meta::loud_comp_metadata::CURVE_MESH_SIZE - 1);
-            for (size_t i=0; i<meta::loud_comp_metadata::CURVE_MESH_SIZE; ++i)
-                vFreqMesh[i]    = i * norm;
-            dsp::exp1(vFreqMesh, meta::loud_comp_metadata::CURVE_MESH_SIZE);
-            dsp::mul_k2(vFreqMesh, meta::loud_comp_metadata::FREQ_MIN, meta::loud_comp_metadata::CURVE_MESH_SIZE);
+            generate_frequencies();
 
             // Build amp mesh
-            float xf                = float(fft_size) / float(fSampleRate);
+            const float xf          = float(fft_size) / float(fSampleRate);
             for (size_t i=0; i<meta::loud_comp_metadata::CURVE_MESH_SIZE; ++i)
             {
                 size_t ix       = xf * vFreqMesh[i];
@@ -488,6 +571,111 @@ namespace lsp
             }
         }
 
+        void loud_comp::update_iir_curve(uint32_t slope)
+        {
+            const freq_curve_t *c   = ((nCurve > 0) && (nCurve <= NUM_CURVES)) ? freq_curves[nCurve-1] : NULL;
+            float *freqs            = vTmpBuf;
+
+            if (c != NULL)
+            {
+                // Generate the list of frequencies
+                const float rfmin   = 1.0f / c->fmin;
+                const float df      = logf(c->fmax * rfmin);
+                const float kf      = df / (nFilters - 1);
+                for (size_t i=0; i < nFilters; ++i)
+                    freqs[i]            = c->fmin * expf((i + 0.5f) * kf);
+
+                // Get the volume
+                const float vol     = lsp_limit(fVolume - meta::loud_comp_metadata::PHONS_MIN, c->amin, c->amax) - c->amin;
+
+                // Compute interpolation coefficients
+                float range         = c->amax - c->amin;
+                const float step    = range / (c->curves - 1);
+                ssize_t nc          = vol / step;
+                if (nc >= ssize_t(c->curves - 1))
+                    --nc;
+                const float k2      = CURVE_APPROX * (vol/step - nc);
+                const float k1      = CURVE_APPROX - k2;
+
+                // Compute frequency response
+                ssize_t idx;
+                const int16_t *a    = c->data[nc];
+                const int16_t *b    = c->data[nc+1];
+                const float kdf     = (c->hdots - 1) / df;
+
+                for (size_t i=0; i < nFilters; ++i)
+                {
+                    const float f       = c->fmin * expf(i * kf);
+                    if (f <= c->fmin)
+                        idx                 = 0;
+                    else if (f >= c->fmax)
+                        idx                 = c->hdots - 1;
+                    else
+                        idx                 = logf(f * rfmin) * kdf;
+
+                    vGains[i]           = expf(a[idx] * k1 + b[idx] * k2);
+                }
+            }
+            else
+            {
+                const float df      = logf(SPEC_FREQ_MAX / SPEC_FREQ_MIN);
+                const float kf      = df / (nFilters - 1);
+                for (size_t i=0; i < nFilters; ++i)
+                    freqs[i]            = SPEC_FREQ_MIN * expf((i + 0.5f) * kf);
+
+                const float vol     = dspu::db_to_gain(fVolume);
+                dsp::fill(vGains, vol, nFilters);
+            }
+
+            if (!bSmooth)
+                dsp::copy(vOldGains, vGains, nFilters);
+
+            // Configure equalizer
+            dspu::filter_params_t fp;
+            fp.nType            = dspu::FLT_NONE;
+            fp.nSlope           = slope;
+            fp.fFreq            = 0.0f;
+            fp.fFreq2           = 0.0f;
+            fp.fGain            = GAIN_AMP_0_DB;
+            fp.fQuality         = 0.0f;
+
+            for (size_t i=0; i < meta::loud_comp_metadata::FILTER_BANDS; ++i)
+            {
+                if (i >= nFilters) // Disabled filter
+                    fp.nType        = dspu::FLT_NONE;
+                else if (i == 0) // Low-shelf
+                {
+                    fp.nType        = dspu::FLT_BT_LRX_LOSHELF;
+                    fp.fFreq        = freqs[0];
+                    fp.fFreq2       = fp.fFreq;
+                }
+                else if (i < nFilters - 1) // Ladder-pass
+                {
+                    fp.nType        = dspu::FLT_BT_LRX_LADDERPASS;
+                    fp.fFreq        = freqs[i-1];
+                    fp.fFreq2       = freqs[i];
+                }
+                else // High-shelf
+                {
+                    fp.nType        = dspu::FLT_BT_LRX_HISHELF;
+                    fp.fFreq        = freqs[i-1];
+                    fp.fFreq2       = fp.fFreq;
+                }
+
+                fp.fGain        = vGains[i];
+
+                for (size_t j=0; j<nChannels; ++j)
+                    vChannels[j]->sEqualizer.set_params(i, &fp);
+            }
+
+            // Initialize list of frequencies
+            generate_frequencies();
+
+            // Compute the frequency response
+            vChannels[0]->sEqualizer.freq_chart(vFreqApply, vFreqMesh, meta::loud_comp_metadata::CURVE_MESH_SIZE);
+            dsp::pcomplex_mod(vAmpMesh, vFreqApply, meta::loud_comp_metadata::CURVE_MESH_SIZE);
+        }
+
         void loud_comp::process_callback(void *object, void *subject, float *buf, size_t rank)
         {
             loud_comp *_this   = static_cast<loud_comp *>(object);
@@ -502,157 +690,209 @@ namespace lsp
             dsp::mul2(buf, vFreqApply, count);
         }
 
-        void loud_comp::process(size_t samples)
+        void loud_comp::generate_signal(size_t samples)
         {
-            //---------------------------------------------------------------------
-            // Bind ports
-            for (size_t i=0; i<nChannels; ++i)
-            {
-                channel_t *c    = vChannels[i];
-                c->vIn          = c->pIn->buffer<float>();
-                c->vOut         = c->pOut->buffer<float>();
-                c->fInLevel     = 0.0f;
-                c->fOutLevel    = 0.0f;
-            }
-            fInLufs         = GAIN_AMP_M_INF_DB;
-            fOutLufs        = GAIN_AMP_M_INF_DB;
-
-            //---------------------------------------------------------------------
-            // Perform main processing
             float lvl;
 
-            if (bReference) // Reference signal generation
+            if (enGenerator == GEN_SINE)
+                sOsc.process_overwrite(vChannels[0]->vOut, samples);
+            else
+                sNoise.process_overwrite(vChannels[0]->vOut, samples);
+
+            vChannels[0]->fInLevel  = dsp::abs_max(vChannels[0]->vIn, samples) * fGain;
+            vChannels[0]->fOutLevel = dsp::abs_max(vChannels[0]->vOut, samples);
+
+            for (size_t i=1; i<nChannels; ++i)
             {
-                if (enGenerator == GEN_SINE)
-                    sOsc.process_overwrite(vChannels[0]->vOut, samples);
-                else
-                    sNoise.process_overwrite(vChannels[0]->vOut, samples);
+                dsp::copy(vChannels[i]->vOut, vChannels[0]->vOut, samples);
+                vChannels[i]->fInLevel  = dsp::abs_max(vChannels[i]->vIn, samples) * fGain;
+                vChannels[i]->fOutLevel = vChannels[0]->fOutLevel;
+            }
 
-                vChannels[0]->fInLevel  = dsp::abs_max(vChannels[0]->vIn, samples) * fGain;
-                vChannels[0]->fOutLevel = dsp::abs_max(vChannels[0]->vOut, samples);
+            // Measure input and output loudness
+            for (size_t offset = 0; offset < samples; )
+            {
+                size_t to_process   = lsp_min(samples - offset, BUF_SIZE);
 
-                for (size_t i=1; i<nChannels; ++i)
+                for (size_t i=0; i<nChannels; ++i)
                 {
-                    dsp::copy(vChannels[i]->vOut, vChannels[0]->vOut, samples);
-                    vChannels[i]->fInLevel  = dsp::abs_max(vChannels[i]->vIn, samples) * fGain;
-                    vChannels[i]->fOutLevel = vChannels[0]->fOutLevel;
+                    sInMeter.bind(i, NULL, vChannels[i]->vIn, 0);
+                    sOutMeter.bind(i, NULL, vChannels[i]->vOut, 0);
                 }
 
-                // Measure input and output loudness
-                for (size_t offset = 0; offset < samples; )
+                sInMeter.process(vTmpBuf, to_process);
+                lvl             = dsp::max(vTmpBuf, to_process);
+                fInLufs         = lsp_max(fInLufs, lvl * fGain);
+
+                sOutMeter.process(vTmpBuf, to_process);
+                lvl             = dsp::max(vTmpBuf, to_process);
+                fOutLufs        = lsp_max(fOutLufs, lvl);
+
+                // Update sample counter
+                offset             += to_process;
+            }
+
+            //---------------------------------------------------------------------
+            // Perform clipping detection
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                channel_t *c    = vChannels[i];
+                c->sClipInd.process(samples);
+                if (bHClipOn)
+                    c->pHClipInd->set_value((c->bHClip) ? 1.0f : 0.0f);
+                else
+                    c->pHClipInd->set_value((c->sClipInd.value()) ? 1.0f : 0.0f);
+            }
+        }
+
+        void loud_comp::process_iir_equalizer(channel_t *c, size_t samples)
+        {
+            // Process the signal by the equalizer
+            if (bSmooth)
+            {
+                dspu::filter_params_t fp;
+                const float den   = 1.0f / samples;
+
+                // In smooth mode, we need to update filter parameters for each sample
+                for (size_t offset=0; offset<samples; )
                 {
-                    size_t to_process   = lsp_min(samples - offset, BUF_SIZE);
+                    const size_t count          = lsp_min(samples - offset, EQ_SMOOTH_STEP);
+                    const float k               = float(offset) * den;
 
-                    for (size_t i=0; i<nChannels; ++i)
+                    // Tune filters
+                    for (size_t j=0; j < nFilters; ++j)
                     {
-                        sInMeter.bind(i, NULL, vChannels[i]->vIn, 0);
-                        sOutMeter.bind(i, NULL, vChannels[i]->vOut, 0);
+                        c->sEqualizer.get_params(j, &fp);
+                        fp.fGain                    = vOldGains[j] * expf(logf(vGains[j] / vOldGains[j])*k);
+                        c->sEqualizer.set_params(j, &fp);
                     }
 
-                    sInMeter.process(vTmpBuf, to_process);
-                    lvl             = dsp::max(vTmpBuf, to_process);
-                    fInLufs         = lsp_max(fInLufs, lvl * fGain);
+                    // Apply processing
+                    c->sEqualizer.process(&c->vBuffer[offset], &c->vBuffer[offset], count);
+                    offset                     += count;
+                }
+            }
+            else
+                c->sEqualizer.process(c->vBuffer, c->vBuffer, samples);
+        }
 
-                    sOutMeter.process(vTmpBuf, to_process);
-                    lvl             = dsp::max(vTmpBuf, to_process);
-                    fOutLufs        = lsp_max(fOutLufs, lvl);
+        void loud_comp::process_audio(size_t samples)
+        {
+            float lvl;
 
-                    // Update sample counter
-                    offset             += to_process;
-                }
+            for (size_t offset = 0; offset < samples; )
+            {
+                size_t to_process   = lsp_min(samples - offset, BUF_SIZE);
 
-                // Perform clipping detection
+                // Pre-process input signal
                 for (size_t i=0; i<nChannels; ++i)
                 {
                     channel_t *c    = vChannels[i];
-                    c->sClipInd.process(samples);
-                    if (bHClipOn)
-                        c->pHClipInd->set_value((c->bHClip) ? 1.0f : 0.0f);
-                    else
-                        c->pHClipInd->set_value((c->sClipInd.value()) ? 1.0f : 0.0f);
-                }
-            }
-            else // Audio processing
-            {
-                for (size_t offset = 0; offset < samples; )
-                {
-                    size_t to_process   = lsp_min(samples - offset, BUF_SIZE);
 
-                    // Pre-process input signal
-                    for (size_t i=0; i<nChannels; ++i)
-                    {
-                        channel_t *c    = vChannels[i];
+                    // Process the signal
+                    c->sDelay.process(c->vDry, c->vIn, to_process);
 
-                        // Process the signal
-                        c->sDelay.process(c->vDry, c->vIn, to_process);
-
-                        // Apply input gain
-                        dsp::mul_k3(c->vBuffer, c->vIn, fGain, to_process);
-                        lvl             = dsp::abs_max(c->vBuffer, samples);
-                        c->fInLevel     = lsp_max(c->fInLevel, lvl);
-                    }
+                    // Apply input gain
+                    dsp::mul_k3(c->vBuffer, c->vIn, fGain, to_process);
+                    lvl             = dsp::abs_max(c->vBuffer, to_process);
+                    c->fInLevel     = lsp_max(c->fInLevel, lvl);
+                }
 
-                    // Measure input loudness
-                    for (size_t i=0; i<nChannels; ++i)
-                        sInMeter.bind(i, NULL, vChannels[i]->vBuffer, 0);
-                    sInMeter.process(vTmpBuf, to_process);
-                    lvl             = dsp::max(vTmpBuf, to_process);
-                    fInLufs         = lsp_max(fInLufs, lvl);
+                // Measure input loudness
+                for (size_t i=0; i<nChannels; ++i)
+                    sInMeter.bind(i, NULL, vChannels[i]->vBuffer, 0);
+                sInMeter.process(vTmpBuf, to_process);
+                lvl             = dsp::max(vTmpBuf, to_process);
+                fInLufs         = lsp_max(fInLufs, lvl);
 
-                    // Do the loudness compensation
-                    for (size_t i=0; i<nChannels; ++i)
-                    {
-                        channel_t *c    = vChannels[i];
+                // Do the loudness compensation
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    channel_t *c    = vChannels[i];
 
-                        // Apply volume attenuation
+                    // Apply volume attenuation
+                    if (nMode == meta::loud_comp_metadata::MODE_FFT)
                         c->sProc.process(c->vBuffer, c->vBuffer, to_process);
+                    else
+                        process_iir_equalizer(c, to_process);
 
-                        // Perform clipping
-                        lvl             = dsp::abs_max(c->vBuffer, to_process);
-                        c->sClipInd.process(to_process);
-                        bool clip       = lvl > fHClipLvl;
-                        if (bHClipOn)
+                    // Perform clipping
+                    lvl             = dsp::abs_max(c->vBuffer, to_process);
+                    c->sClipInd.process(to_process);
+                    bool clip       = lvl > fHClipLvl;
+                    if (bHClipOn)
+                    {
+                        // Update buffer if clipping occurred
+                        if (clip)
                         {
-                            if (clip)
-                            {
-                                lvl             = fHClipLvl;
-                                c->bHClip       = true;
-                            }
+                            lvl             = fHClipLvl;
+                            c->bHClip       = true;
 
                             dsp::limit1(c->vBuffer, -fHClipLvl, +fHClipLvl, to_process);
-                            c->pHClipInd->set_value((c->bHClip) ? 1.0f : 0.0f);
                         }
-                        else
-                        {
-                            if (clip)
-                                c->sClipInd.blink();
-                            c->pHClipInd->set_value((c->sClipInd.value()) ? 1.0f : 0.0f);
-                        }
-                        c->fOutLevel    = (c->fOutLevel < lvl) ? lvl : c->fOutLevel;
 
-                        // Apply bypass
-                        c->sBypass.process(c->vOut, c->vDry, c->vBuffer, to_process);
+                        c->pHClipInd->set_value((c->bHClip) ? 1.0f : 0.0f);
                     }
+                    else
+                    {
+                        if (clip)
+                            c->sClipInd.blink();
+                        c->pHClipInd->set_value((c->sClipInd.value()) ? 1.0f : 0.0f);
+                    }
+                    c->fOutLevel    = (c->fOutLevel < lvl) ? lvl : c->fOutLevel;
 
-                    // Measure output loudness
-                    for (size_t i=0; i<nChannels; ++i)
-                        sOutMeter.bind(i, NULL, vChannels[i]->vBuffer, 0);
-                    sOutMeter.process(vTmpBuf, to_process);
-                    lvl                 = dsp::max(vTmpBuf, to_process);
-                    fOutLufs            = lsp_max(fOutLufs, lvl);
+                    // Apply bypass
+                    c->sBypass.process(c->vOut, c->vDry, c->vBuffer, to_process);
+                }
 
-                    // Update sample counter and pointers
-                    for (size_t i=0; i<nChannels; ++i)
-                    {
-                        channel_t *c    = vChannels[i];
+                // Reset smooth flag for equalizer
+                if (bSmooth)
+                {
+                    dsp::copy(vOldGains, vGains, nFilters);
+                    bSmooth             = false;
+                }
 
-                        // Update pointers
-                        c->vIn         += to_process;
-                        c->vOut        += to_process;
-                    }
-                    offset         += to_process;
+                // Measure output loudness
+                for (size_t i=0; i<nChannels; ++i)
+                    sOutMeter.bind(i, NULL, vChannels[i]->vBuffer, 0);
+                sOutMeter.process(vTmpBuf, to_process);
+                lvl                 = dsp::max(vTmpBuf, to_process);
+                fOutLufs            = lsp_max(fOutLufs, lvl);
+
+                // Update sample counter and pointers
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    channel_t *c    = vChannels[i];
+
+                    // Update pointers
+                    c->vIn         += to_process;
+                    c->vOut        += to_process;
                 }
+                offset         += to_process;
             }
+        }
+
+        void loud_comp::process(size_t samples)
+        {
+            //---------------------------------------------------------------------
+            // Bind ports
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                channel_t *c    = vChannels[i];
+                c->vIn          = c->pIn->buffer<float>();
+                c->vOut         = c->pOut->buffer<float>();
+                c->fInLevel     = 0.0f;
+                c->fOutLevel    = 0.0f;
+            }
+            fInLufs         = GAIN_AMP_M_INF_DB;
+            fOutLufs        = GAIN_AMP_M_INF_DB;
+
+            //---------------------------------------------------------------------
+            // Perform main processing
+            if (bReference) // Reference signal generation
+                generate_signal(samples);
+            else // Audio processing
+                process_audio(samples);
 
             //---------------------------------------------------------------------
             // Update meters
@@ -833,7 +1073,9 @@ namespace lsp
 
             v->write("nChannels", nChannels);
             v->write("nMode", nMode);
+            v->write("nCurve", nCurve);
             v->write("nRank", nRank);
+            v->write("nApproximation", nFilters);
             v->write("fGain", fGain);
             v->write("fInLufs", fInLufs);
             v->write("fOutLufs", fOutLufs);
@@ -859,6 +1101,7 @@ namespace lsp
                     v->write_object("sBypass", &c->sBypass);
                     v->write_object("sDelay", &c->sDelay);
                     v->write_object("sProc", &c->sProc);
+                    v->write_object("sEqualizer", &c->sEqualizer);
                     v->write_object("sClipInd", &c->sClipInd);
 
                     v->write("pIn", c->pIn);
@@ -875,8 +1118,12 @@ namespace lsp
             v->write("vFreqMesh", vFreqMesh);
             v->write("vAmpMesh", vAmpMesh);
             v->write("bSyncMesh", bSyncMesh);
+            v->write("bSmooth", bSmooth);
             v->write("pIDisplay", pIDisplay);
 
+            v->writev("vOldGains", vOldGains, meta::loud_comp_metadata::FILTER_BANDS);
+            v->writev("vGains", vGains, meta::loud_comp_metadata::FILTER_BANDS);
+
             v->write_object("sOsc", &sOsc);
             v->write_object("sInMeter", &sInMeter);
             v->write_object("sOutMeter", &sOutMeter);
@@ -885,8 +1132,9 @@ namespace lsp
 
             v->write("pBypass", pBypass);
             v->write("pGain", pGain);
-            v->write("pMode", pMode);
+            v->write("pCurve", pCurve);
             v->write("pRank", pRank);
+            v->write("pApproximation", pApproximation);
             v->write("pVolume", pVolume);
             v->write("pMesh", pMesh);
             v->write("pRelative", pRelative);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/.github/workflows/build.yml	2025-03-01 12:43:07.024586969 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/.github/workflows/build.yml	2025-08-26 18:15:55.837885741 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/CHANGELOG	2025-03-01 12:43:07.024586969 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/CHANGELOG	2025-08-26 18:15:55.841885702 +0000
@@ -2,6 +2,13 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.10 ===
+* Added DC offset control at the clipping stage.
+* Updated build scripts and dependencies.
+
+=== 1.0.9 ===
+* Updated build scripts and dependencies.
+
 === 1.0.8 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/dependencies.mk	2025-03-01 12:43:07.024586969 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/dependencies.mk	2025-08-26 18:15:55.841885702 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/include/private/meta/mb_clipper.h 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/include/private/meta/mb_clipper.h
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/include/private/meta/mb_clipper.h	2025-03-01 12:43:07.024586969 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/include/private/meta/mb_clipper.h	2025-08-26 18:15:55.841885702 +0000
@@ -50,9 +50,10 @@ namespace lsp
             static constexpr float  CLIP_CURVE_X_MAX        = 2.25f;
             static constexpr size_t CURVE_MESH_POINTS       = 256;
             static constexpr size_t REFRESH_RATE            = 20;
-            static constexpr size_t TIME_MESH_POINTS        = 320;
+            static constexpr size_t TIME_MESH_POINTS        = 400;
             static constexpr float  TIME_HISTORY_MAX        = 5.0f;
             static constexpr float  TIME_HISTORY_GAP        = 0.5f;
+            static constexpr float  WAVEFORM_HISTORY_MAX    = 1.0f;
             static constexpr float  LUFS_MEASUREMENT_PERIOD = 400.0f;
             static constexpr float  LUFS_LIMITER_REACT      = 48.0f;
 
@@ -61,6 +62,11 @@ namespace lsp
             static constexpr float  THRESHOLD_DFL           = 0.0f;
             static constexpr float  THRESHOLD_STEP          = 0.01f;
 
+            static constexpr float  DCOFF_MIN               = -100.0f;
+            static constexpr float  DCOFF_MAX               = 100.0f;
+            static constexpr float  DCOFF_DFL               = 0.0f;
+            static constexpr float  DCOFF_STEP              = 0.05f;
+
             static constexpr float  REACT_TIME_MIN          = 0.000f;
             static constexpr float  REACT_TIME_MAX          = 1.000f;
             static constexpr float  REACT_TIME_DFL          = 0.200f;
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/include/private/plugins/mb_clipper.h 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/include/private/plugins/mb_clipper.h
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/include/private/plugins/mb_clipper.h	2025-03-01 12:43:07.024586969 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/include/private/plugins/mb_clipper.h	2025-08-26 18:15:55.841885702 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-clipper
  * Created on: 11 ноя 2023 г.
@@ -62,10 +62,11 @@ namespace lsp
                     PF_ODP_ENABLED      = 1 << 1,           // Overdrive protection enabled
                     PF_LUFS_ENABLED     = 1 << 2,           // Enable input LUFS limiter
                     PF_CLIP_ENABLED     = 1 << 3,           // Clipping enabled
-                    PF_DIRTY_BAND       = 1 << 4,           // Update band filter curve
-                    PF_SYNC_BAND        = 1 << 5,           // Sync band filter curve
-                    PF_SYNC_ODP         = 1 << 6,           // Sync overdrive protection curve
-                    PF_SYNC_CLIP        = 1 << 7,           // Sync sigmoid clipping curve
+                    PF_DC_COMPENSATE    = 1 << 4,           // DC compensate
+                    PF_DIRTY_BAND       = 1 << 5,           // Update band filter curve
+                    PF_SYNC_BAND        = 1 << 6,           // Sync band filter curve
+                    PF_SYNC_ODP         = 1 << 7,           // Sync overdrive protection curve
+                    PF_SYNC_CLIP        = 1 << 8,           // Sync sigmoid clipping curve
 
                     PF_SYNC_ALL         = PF_SYNC_BAND | PF_SYNC_ODP | PF_SYNC_CLIP
                 };
@@ -84,8 +85,9 @@ namespace lsp
                     GF_OUT_CLIP         = 1 << 3,           // Output clipper enabled
                     GF_ODP_ENABLED      = 1 << 4,           // Overdrive protection enabled
                     GF_CLIP_ENABLED     = 1 << 5,           // Clipping enabled
-                    GF_SYNC_ODP         = 1 << 6,           // Sync overdrive protection curve
-                    GF_SYNC_CLIP        = 1 << 7,           // Sync sigmoid clipping curve
+                    GF_DC_COMPENSATE    = 1 << 6,           // DC compensate
+                    GF_SYNC_ODP         = 1 << 7,           // Sync overdrive protection curve
+                    GF_SYNC_CLIP        = 1 << 8,           // Sync sigmoid clipping curve
 
                     GF_SYNC_ALL         = GF_SYNC_ODP | GF_SYNC_CLIP
                 };
@@ -114,6 +116,7 @@ namespace lsp
                 {
                     dspu::sigmoid::function_t   pFunc;      // Sigmoid function
                     float               fThreshold;         // Threshold
+                    float               fDCOffset;          // DC offset
                     float               fPumping;           // Pumping
                     float               fScaling;           // Sigmoid scaling
                     float               fKnee;              // Knee
@@ -121,6 +124,8 @@ namespace lsp
                     plug::IPort        *pOn;                // Enable sigmoid function
                     plug::IPort        *pFunction;          // Sigmoid function
                     plug::IPort        *pThreshold;         // Sigmoid threshold
+                    plug::IPort        *pDCOffset;          // DC offset
+                    plug::IPort        *pDCCompensate;      // DC compensate
                     plug::IPort        *pPumping;           // Sigmoid pumping
                     plug::IPort        *pCurveMesh;         // Curve chart mesh
                 } clip_params_t;
@@ -134,6 +139,8 @@ namespace lsp
                     dspu::Delay         sPostDelay;         // Signal post-delay
                     dspu::MeterGraph    sInGraph;           // Input meter graph
                     dspu::MeterGraph    sOutGraph;          // Output meter graph
+                    dspu::MeterGraph    sWaveformGraph;     // Waveform graph
+                    dspu::MeterGraph    sRedGraph;          // Gain reduction graph
 
                     float              *vInData;            // Input data buffer
                     float              *vData;              // Data buffer
@@ -146,8 +153,8 @@ namespace lsp
                     float               fOdpOut;            // Overdrive protection out level
                     float               fOdpRed;            // Overdrive protection reduction level
 
-                    float               fClipIn;            // Clipping input level measured
-                    float               fClipOut;           // Clipping output level measured
+                    float               fClipIn[2];         // Clipping input level measured
+                    float               fClipOut[2];        // Clipping output level measured
                     float               fClipRed;           // Clipping reduction level measured
 
                     plug::IPort        *pIn;                // Input level meter
@@ -158,11 +165,9 @@ namespace lsp
                     plug::IPort        *pOdpOut;            // ODP output level meter
                     plug::IPort        *pOdpRed;            // ODP reduction level meter
 
-                    plug::IPort        *pClipIn;            // Clipping input level meter
-                    plug::IPort        *pClipOut;           // Clipping output level meter
+                    plug::IPort        *pClipIn[2];         // Clipping input level meter
+                    plug::IPort        *pClipOut[2];        // Clipping output level meter
                     plug::IPort        *pClipRed;           // Clipping reduction level meter
-
-                    plug::IPort        *pTimeMesh;          // Input, output and gain reduction graph mesh
                 } band_t;
 
                 typedef struct lufs_limiter_t
@@ -221,6 +226,8 @@ namespace lsp
                     dspu::Dither        sDither;            // Dither
                     dspu::MeterGraph    sInGraph;           // Input meter graph
                     dspu::MeterGraph    sOutGraph;          // Output meter graph
+                    dspu::MeterGraph    sRedGraph;          // Gain reduction graph
+                    dspu::MeterGraph    sWaveformGraph;     // Waveform graph
                     band_t              vBands[meta::mb_clipper::BANDS_MAX];   // Bands for processing
 
                     uint32_t            nAnInChannel;       // Analyzer input channel
@@ -239,13 +246,14 @@ namespace lsp
                     float               fOdpOut;            // Overdrive protection out level
                     float               fOdpRed;            // Overdrive protection reduction level
 
-                    float               fClipIn;            // Clipping input level measured
-                    float               fClipOut;           // Clipping output level measured
+                    float               fClipIn[2];         // Clipping input level measured
+                    float               fClipOut[2];        // Clipping output level measured
                     float               fClipRed;           // Clipping reduction level measured
 
                     // Buffers
                     float              *vIn;                // Input buffer
                     float              *vOut;               // Output buffer
+                    float              *vInData;            // Input data buffer for metering
                     float              *vData;              // Data buffer
                     float              *vSc;                // Sidechain buffer
                     float              *vTr;                // Transfer function
@@ -272,24 +280,30 @@ namespace lsp
                     plug::IPort        *pOdpOut;            // ODP output level meter
                     plug::IPort        *pOdpRed;            // ODP reduction level meter
 
-                    plug::IPort        *pClipIn;            // Clipping input level meter
-                    plug::IPort        *pClipOut;           // Clipping output level meter
+                    plug::IPort        *pClipIn[2];         // Clipping input level meter
+                    plug::IPort        *pClipOut[2];        // Clipping output level meter
                     plug::IPort        *pClipRed;           // Clipping reduction level meter
+                } channel_t;
 
+                typedef struct graph_t
+                {
                     plug::IPort        *pTimeMesh;          // Input, output and gain reduction graph mesh
-                } channel_t;
+                    plug::IPort        *pWaveformMesh;      // Oscillogram mesh
+                } graph_t;
 
                 static dspu::sigmoid::function_t    vSigmoidFunctions[];
 
             protected:
                 size_t              nChannels;          // Number of channels
-                channel_t          *vChannels;          // Delay channels
+                channel_t          *vChannels;          // Processing channels
 
                 dspu::Analyzer      sAnalyzer;          // FFT analyzer
                 dspu::Counter       sCounter;           // Counter
                 dspu::LoudnessMeter sOutMeter;          // Output LUFS meter
                 split_t             vSplits[meta::mb_clipper::BANDS_MAX-1];
-                processor_t         vProc[meta::mb_clipper::BANDS_MAX];      // Processor
+                processor_t         vProc[meta::mb_clipper::BANDS_MAX];         // Processor
+                graph_t             vBGraph[meta::mb_clipper::BANDS_MAX];       // Band Graphs
+                graph_t             sGraph;             // Output graphs
                 compressor_t        sComp;              // Simple compressor
                 odp_params_t        sOdp;               // Overdrive protection params
                 clip_params_t       sClip;              // Clipping parameters
@@ -313,6 +327,7 @@ namespace lsp
                 float              *vLinSigmoid;        // Linear scale for sigmoid
                 float              *vLogSigmoid;        // Logarithmic scale for sigmoid
                 float              *vTime;              // Time graph
+                float              *vWaveformTime;      // Waveform time graph
                 core::IDBuffer     *pIDisplay;          // Inline display buffer
 
                 plug::IPort        *pBypass;            // Bypass
@@ -369,20 +384,26 @@ namespace lsp
                 static void             dump(dspu::IStateDumper *v, const char *name, const odp_params_t *p);
                 static void             dump(dspu::IStateDumper *v, const char *name, const clip_params_t *p);
                 static void             dump(dspu::IStateDumper *v, const char *name, const lufs_limiter_t *l);
+                static void             dump(dspu::IStateDumper *v, const char *name, const graph_t *g);
 
             protected:
                 void                    do_destroy();
                 void                    bind_input_buffers();
                 void                    limit_input_loudness(size_t samples);
                 void                    split_bands(size_t samples);
+                void                    process_clip_channel(channel_t *c, size_t samples);
+                void                    process_clip_band(band_t *b, processor_t *p, size_t samples);
                 void                    process_bands(size_t samples);
                 void                    process_output_clipper(size_t samples);
+                void                    meter_band(band_t *b, size_t samples);
+                void                    meter_channel(channel_t *c, size_t samples);
                 void                    perform_analysis(size_t samples);
                 void                    output_signal(size_t samples);
                 void                    advance_buffers(size_t samples);
                 void                    merge_bands(size_t samples);
                 void                    output_meters();
                 void                    output_mesh_curves(size_t samples);
+                void                    output_mesh_graphs(size_t samples);
 
             public:
                 explicit mb_clipper(const meta::plugin_t *meta);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/make/tools.mk	2025-03-01 12:43:07.028586944 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/make/tools.mk	2025-08-26 18:15:55.841885702 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/modules.mk
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/modules.mk	2025-03-01 12:43:07.028586944 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/modules.mk	2025-08-26 18:15:55.841885702 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/project.mk
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/project.mk	2025-03-01 12:43:07.028586944 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/project.mk	2025-08-26 18:15:55.841885702 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Clipper Plugin
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.8
+ARTIFACT_VERSION            = 1.0.10
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-mb-clipper/res/doc/screenshots/mb_clipper_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/doc/screenshots/mb_clipper_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-clipper/res/doc/screenshots/mb_clipper_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/doc/screenshots/mb_clipper_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/i18n/default/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/i18n/default/lists.json
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/i18n/default/lists.json	2025-03-01 12:43:07.032586921 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/i18n/default/lists.json	2025-08-26 18:15:55.845885663 +0000
@@ -10,6 +10,11 @@
 			"full": "{@frequency} Hz\n{@note}{@octave}{@cents}",			
 			"unknown": "{@frequency} Hz"
 		},
-		"output_clipper": "Output Clipper"
+		"output_clipper": "Output Clipper",
+		"view": {		
+			"combined": "Combined",
+			"dynamics": "Dynamics",
+			"waveform": "Waveform"
+		}
 	}
 }
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/i18n/ru/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/i18n/ru/lists.json
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/i18n/ru/lists.json	2025-03-01 12:43:07.032586921 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/i18n/ru/lists.json	2025-08-26 18:15:55.845885663 +0000
@@ -10,6 +10,11 @@
 			"full": "{@frequency} Гц\n{@note}{@octave}{@cents}",			
 			"unknown": "{@frequency} Гц"
 		},
-		"output_clipper": "Выходной Клиппер"
+		"output_clipper": "Выходной Клиппер",
+		"view": {
+			"combined": "Совмещенный",
+			"dynamics": "Динамика",
+			"waveform": "Форма волны"
+		}
 	}
 }
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/i18n/us/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/i18n/us/lists.json
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/i18n/us/lists.json	2025-03-01 12:43:07.032586921 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/i18n/us/lists.json	2025-08-26 18:15:55.845885663 +0000
@@ -10,6 +10,11 @@
 			"full": "{@frequency} Hz\n{@note}{@octave}{@cents}",			
 			"unknown": "{@frequency} Hz"
 		},
-		"output_clipper": "Output Clipper"
+		"output_clipper": "Output Clipper",
+		"view": {		
+			"combined": "Combined",
+			"dynamics": "Dynamics",
+			"waveform": "Waveform"
+		}
 	}
 }
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/ui/dynamics/clipper/multiband/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/ui/dynamics/clipper/multiband/mono.xml
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/ui/dynamics/clipper/multiband/mono.xml	2025-03-01 12:43:07.032586921 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/ui/dynamics/clipper/multiband/mono.xml	2025-08-26 18:15:55.845885663 +0000
@@ -450,10 +450,12 @@
 									<void hexpand="true"/>
 									<button id="op_${i}" ui:inject="Button_green" text="labels.odp" visibility="${act_band}"/>
 									<button id="ce_${i}" text="labels.signal.clipping" pad.l="8" visibility="${act_band}"/>
+									<button id="dcc_${i}" text="labels.signal.dc_compensate" ui:inject="Button_cyan" visibility="${act_band}"/>
 									<button id="clog" text="labels.log_scale" ui:inject="Button_yellow" visibility="${act_band}"/>
 
 									<button id="op_${i}" ui:inject="Button_inactive" text="labels.odp" visibility="!${act_band}"/>
 									<button id="ce_${i}" text="labels.signal.clipping" ui:inject="Button_inactive" pad.l="8" visibility="!${act_band}"/>
+									<button id="dcc_${i}" text="labels.signal.dc_compensate" ui:inject="Button_inactive" visibility="!${act_band}"/>
 									<button id="clog" text="labels.log_scale" ui:inject="Button_inactive" visibility="!${act_band}"/>
 
 									<label text="labels.function" pad.l="8"/>
@@ -640,9 +642,9 @@
 									<vbox>
 										<!-- Clipper function graph linear -->
 										<graph width.min="265" height.min="215" expand="true" fill="true" visibility="!:clog">
-											<origin hpos="-0.8" vpos="-2.0/3.0" visible="false"/>
+											<origin hpos="-1" vpos="-1" visible="false"/>
 											<origin hpos="-1" vpos="0" visible="false"/>
-
+			
 											<ui:with ox="0" oy="1">
 												<marker v="0.25" color="graph_alt_1"/>
 												<marker v="0.75" color="graph_alt_1"/>
@@ -653,7 +655,7 @@
 												<marker v="0.25" color="graph_alt_1"/>
 												<marker v="0.75" color="graph_alt_1"/>
 											</ui:with>
-
+			
 											<ui:with ox="0" oy="1">
 												<marker v="0.5" color="graph_sec"/>
 												<marker v="1" color="graph_sec"/>
@@ -664,16 +666,17 @@
 												<marker v="0.5" color="graph_sec"/>
 												<marker v="1" color="graph_sec"/>
 											</ui:with>
-
+			
 											<!-- Axes and boundaries -->
-											<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width * 0.6" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-											<axis min="-0.25" max="2.25" color="graph_prim" angle="0.0" width="2"/>
-											<axis min="-0.25" max="1.25" color="graph_prim" angle="0.5" width="2"/>
-											<axis o="1" min="-0.25" max="2.25" color="graph_prim" angle="0.0" zero="-0.25" visibility="false"/>
-
+											<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width / 2.25" dy=":_a_height / 1.25" color="graph_alt_1" width="2" smooth="true"/>
+											<axis min="0" max="2.25" color="graph_prim" angle="0.0" width="2"/>
+											<axis min="0" max="1.25" color="graph_prim" angle="0.5" width="2"/>
+											<axis o="1" min="0" max="2.25" color="graph_prim" angle="0.0" zero="0" visibility="false"/>
+			
 											<!-- Meshes -->
 											<mesh id="cfc_${i}" x.index="0" y.index="1" width="3" color=":ce_${i} and ${act_band}? 'graph_mesh': 'graph_prim'" smooth="true"/>
-											<dot x.id="cfx_${i}" y.id="cfy_${i}" color="dot" bcolor="dot" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx1_${i}" y.id="cfy1_${i}" color="dot" bcolor="dot" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx2_${i}" y.id="cfy2_${i}" color="dot" bcolor="dot" visibility=":ce_${i} and ${act_band}"/>
 
 											<!-- Markers -->
 											<marker
@@ -718,14 +721,14 @@
 												hlcolor="graph_prim"
 												rcolor="graph_prim"
 												hrcolor="graph_prim"/>
-
+			
 											<!-- Text -->
-											<ui:with x="0" halign="-1" valign="-1">
+											<ui:with x="0" halign="1" valign="-1">
 												<text y="0.5" text="0.5"/>
 												<text y="1" text="1"/>
 												<text y="1.25" text="graph.axis.out" valign="-1"/>
 											</ui:with>
-											<ui:with y="0" halign="1" valign="-1">
+											<ui:with y="0" halign="1" valign="1">
 												<text x="0" text="0"/>
 												<text x="0.5" text="0.5"/>
 												<text x="1.0" text="1"/>
@@ -733,8 +736,7 @@
 												<text x="2.0" text="2"/>
 												<text x="2.25" text="graph.axis.in" halign="-1"/>
 											</ui:with>
-											<text x=":ct_${i}" y="1.25" text="graph.values.x::f" text:value=":ct_${i}" text.eval="true" color=":ce_${i} and ${act_band} and (:cf_${i} ine 0)? 'threshold' : 'graph_prim'" halign="1" valign="-1"/>
-											<text x=":ct_${i}" y="-0.25" text="graph.values.x:db:f" text:value="20 * lg :ct_${i}" text.eval="true" color=":ce_${i} and ${act_band} and (:cf_${i} ine 0)? 'threshold' : 'graph_prim'" halign="1" valign="1"/>
+											<text x=":ct" y="1.25" text="graph.values.x:db:f;x::f" text:value=":ct" text:db="20 * lg :ct" text.eval="true" color=":ce_${i} and ${act_band} and (:cf_${i} ine 0) ? 'threshold' : 'graph_prim'" halign="1" valign="-1" text.halign="-1"/>
 										</graph>
 
 										<!-- Clipper function graph logarithmic -->
@@ -764,7 +766,8 @@
 
 											<!-- Meshes -->
 											<mesh id="cfc_${i}" x.index="2" y.index="3" width="3" color=":ce_${i} and ${act_band}? 'graph_mesh': 'graph_prim'" smooth="true"/>
-											<dot x.id="cfx_${i}" y.id="cfy_${i}" color="dot" bcolor="dot" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx1_${i}" y.id="cfy1_${i}" color="dot" bcolor="dot" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx2_${i}" y.id="cfy2_${i}" color="dot" bcolor="dot" visibility=":ce_${i} and ${act_band}"/>
 
 											<!-- Markers -->
 											<marker
@@ -864,7 +867,7 @@
 						<ui:with bg.bright="(!${act_band}) or !:ce_${i} ? :const_bg_darken : 1.0" bright="(!${act_band}) or !:ce_${i} ? 0.75 : 1.0">
 							<hbox pad.v="4">
 								<void hexpand="true" hfill="true"/>
-								<!-- thres -->
+								<!-- thresh -->
 								<hbox fill="false" pad.l="6" pad.r="10">
 									<knob id="ct_${i}" scolor=":ce_${i} and ${act_band} and (:cf_${i} ine 0) ? 'threshold' : 'cycle_inactive'"/>
 									<vbox vfill="false" width="50" pad.l="4">
@@ -872,6 +875,15 @@
 										<value id="ct_${i}" sline="true" halign="0"/>
 									</vbox>
 								</hbox>
+								
+								<!-- DC offset -->
+								<hbox fill="false" pad.r="6">
+									<knob id="dco_${i}" scolor=":ce_${i} and ${act_band} ? 'kscale' : 'cycle_inactive'"/>
+									<vbox vfill="false" width="50" pad.l="4">
+										<label text="labels.signal.dc_offset" halign="-1"/>
+										<value id="dco_${i}" sline="true" halign="0"/>
+									</vbox>
+								</hbox>
 
 								<!-- pumping -->
 								<hbox fill="false" pad.r="6">
@@ -916,9 +928,121 @@
 							<!-- time graph and meters -->
 							<cell rows="3">
 								<ui:with bg.bright="(!${act_band}) ? :const_bg_darken : 1.0" bright="(!${act_band}) ? 0.75 : 1.0">
-									<group ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+									<cgroup id="gview"  ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+										<vbox spacing="2" bg.color="bg_schema_name">
+											<!-- Oscillogram graph combined-->
+											<graph width.min="312" height.min="95" hexpand="true" hfill="true" >
+												<origin hpos="1" vpos="-1" visible="false"/>
+					
+												<!-- Gray grid -->
+												<ui:with ox="0" oy="1">
+													<marker v="0.5" color="graph_alt_1"/>
+													<marker v="1.5" color="graph_alt_1"/>
+													<marker v="2.5" color="graph_alt_1"/>
+													<marker v="3.5" color="graph_alt_1"/>
+													<marker v="4.5" color="graph_alt_1"/>
+												</ui:with>
+					
+												<!-- Yellow grid -->
+												<ui:with ox="0" oy="1">
+													<marker v="1" color="graph_sec"/>
+													<marker v="2" color="graph_sec"/>
+													<marker v="3" color="graph_sec"/>
+													<marker v="4" color="graph_sec"/>
+												</ui:with>
+												<ui:with ox="1" oy="0" color="graph_sec">
+													<ui:for id="v" first="-18" last="6" step="6">
+														<marker v="${v} db"/>
+													</ui:for>
+												</ui:with>
+					
+												<!-- Meshes -->
+												<mesh id="ctg_${i}" width="0" x.index="0" y.index="1" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
+												<mesh id="ctg_${i}" width="2" x.index="0" y.index="2" color="mono" visibility=":olg"/>
+												<mesh id="ctg_${i}" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg"/>
+					
+												<!-- Axis -->
+												<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+												<axis min="-24 db" max="12 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+					
+												<!-- Text -->
+												<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+												<ui:with y="-24 db" halign="1" valign="1" color="graph_prim">
+													<text x="0" text="0" halign="-1"/>
+													<text x="1" text="1"/>
+													<text x="2" text="2"/>
+													<text x="3" text="3"/>
+													<text x="4" text="4"/>
+													<text x="5" text="graph.units.s"/>
+												</ui:with>
+												<ui:with x="5" halign="1" valign="1" color="graph_prim">
+													<text y="12 db" text="graph.units.db" text:value="0" valign="-1"/>
+													<ui:for id="v" first="-18" last="0" step="6">
+														<text y="${v} db" text="${v}"/>
+													</ui:for>
+												</ui:with>
+											</graph>
+					
+											<!-- Waveform graph combined-->
+											<graph width.min="312" height.min="95" hexpand="true" hfill="true">
+												<origin hpos="1" vpos="0" visible="false"/>
+					
+												<!-- Gray grid -->
+												<ui:with ox="0" oy="1">
+													<marker v="0.1" color="graph_alt_1"/>
+													<marker v="0.3" color="graph_alt_1"/>
+													<marker v="0.5" color="graph_alt_1"/>
+													<marker v="0.7" color="graph_alt_1"/>
+													<marker v="0.9" color="graph_alt_1"/>
+												</ui:with>
+					
+												<!-- Yellow grid -->
+												<ui:with ox="0" oy="1">
+													<marker v="0.2" color="graph_sec"/>
+													<marker v="0.4" color="graph_sec"/>
+													<marker v="0.6" color="graph_sec"/>
+													<marker v="0.8" color="graph_sec"/>
+												</ui:with>
+					
+												<ui:with ox="1" oy="0" color="graph_sec">
+													<marker v="-0.5" />
+													<marker v="0.5" />
+												</ui:with>
+					
+												<!-- Meshes -->
+												<mesh id="wfg_${i}" width="2" x.index="0" y.index="1" color="mono" fcolor="mono" fcolor.a="0.8" fill="true" visibility=":olg"/>
+					
+												<ui:with ox="1" oy="0" width="2" color="graph_prim">
+													<marker v="1" />
+													<marker v="0" />
+													<marker v="-1" />
+												</ui:with>
+					
+												<!-- Axis -->
+												<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+												<axis min="-1.5" max="1.5" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+					
+												<!-- Text -->
+												<ui:with y="-1.5" halign="1" valign="1" color="graph_prim">
+													<text x="0" text="0" halign="-1"/>
+													<text x="0.2" text="0.2"/>
+													<text x="0.4" text="0.4"/>
+													<text x="0.6" text="0.6"/>
+													<text x="0.8" text="0.8"/>
+													<text x="1" text="graph.units.s"/>
+												</ui:with>
+												<ui:with x="1" halign="1" valign="1" color="graph_prim">
+													<text y="-1" text="-1"/>
+													<text y="-0.5" text="-0.5"/>
+													<text y="0" text="0"/>
+													<text y="0.5" text="0.5"/>
+													<text y="1" text="1"/>
+													<text y="1.5" text="labels.amplitude" valign="-1" x="0" halign="-1"/>
+												</ui:with>
+											</graph>
+										</vbox>
 
-										<!-- Ocillogram graph -->
+										<!-- Oscillogram graph -->
 										<graph width.min="312" height.min="192" hexpand="true" hfill="true">
 											<origin hpos="1" vpos="-1" visible="false"/>
 
@@ -946,9 +1070,7 @@
 
 											<!-- Meshes -->
 											<mesh id="ctg_${i}" width="0" x.index="0" y.index="1" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilg"/>
-
 											<mesh id="ctg_${i}" width="2" x.index="0" y.index="2" color="mono" visibility=":olg"/>
-
 											<mesh id="ctg_${i}" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg"/>
 
 											<!-- Boundaries -->
@@ -976,7 +1098,70 @@
 												</ui:for>
 											</ui:with>
 										</graph>
-									</group>
+										
+										<!-- Waveform graph -->
+										<graph width.min="312" height.min="192" hexpand="true" hfill="true">
+											<origin hpos="1" vpos="0" visible="false"/>
+					
+											<!-- Gray grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.1" color="graph_alt_1"/>
+												<marker v="0.3" color="graph_alt_1"/>
+												<marker v="0.5" color="graph_alt_1"/>
+												<marker v="0.7" color="graph_alt_1"/>
+												<marker v="0.9" color="graph_alt_1"/>
+											</ui:with>
+					
+											<!-- Yellow grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.2" color="graph_sec"/>
+												<marker v="0.4" color="graph_sec"/>
+												<marker v="0.6" color="graph_sec"/>
+												<marker v="0.8" color="graph_sec"/>
+											</ui:with>
+											<ui:with ox="1" oy="0" color="graph_sec">
+												<marker v="-0.25" />
+												<marker v="-0.5" />
+												<marker v="-0.75" />
+												<marker v="0.25" />
+												<marker v="0.5" />
+												<marker v="0.75" />
+											</ui:with>
+					
+											<!-- Meshes -->
+											<mesh id="wfg_${i}" width="2" x.index="0" y.index="1" color="mono" fcolor="mono" fcolor.a="0.8" fill="true" visibility=":olg"/>
+					
+											<ui:with ox="1" oy="0" width="2" color="graph_prim">
+												<marker v="1" />
+												<marker v="0" />
+												<marker v="-1" />
+											</ui:with>
+											<!-- Axis -->
+											<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+											<axis min="-1.25" max="1.25" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+					
+											<!-- Text -->
+											<ui:with y="-1.25" halign="1" valign="1" color="graph_prim">
+												<text x="0" text="0" halign="-1"/>
+												<text x="0.2" text="0.2"/>
+												<text x="0.4" text="0.4"/>
+												<text x="0.6" text="0.6"/>
+												<text x="0.8" text="0.8"/>
+												<text x="1" text="graph.units.s"/>
+											</ui:with>
+											<ui:with x="1" halign="1" valign="1" color="graph_prim">
+												<text y="-1" text="-1"/>
+												<text y="-0.75" text="-0.75"/>
+												<text y="-0.5" text="-0.5"/>
+												<text y="-0.25" text="-0.25"/>
+												<text y="0" text="0"/>
+												<text y="0.25" text="0.25"/>
+												<text y="0.5" text="0.5"/>
+												<text y="0.75" text="0.75"/>
+												<text y="1.25" text="labels.amplitude" valign="-1"/>
+											</ui:with>
+										</graph>
+									</cgroup>
 								</ui:with>
 							</cell>
 
@@ -1104,10 +1289,12 @@
 								<void hexpand="true"/>
 								<button id="op" ui:inject="Button_green" text="labels.odp" visibility=":oclip"/>
 								<button id="ce" text="labels.signal.clipping" pad.l="8" visibility=":oclip"/>
+								<button id="dcomp" text="labels.signal.dc_compensate" ui:inject="Button_cyan" visibility=":oclip"/>
 								<button id="clog" text="labels.log_scale" ui:inject="Button_yellow" visibility=":oclip"/>
 
 								<button id="op" ui:inject="Button_inactive" text="labels.odp" visibility="!(:oclip)"/>
 								<button id="ce" text="labels.signal.clipping" ui:inject="Button_inactive" pad.l="8" visibility="!(:oclip)"/>
+								<button id="dcomp" text="labels.signal.dc_compensate" ui:inject="Button_inactive" visibility="!(:oclip)"/>
 								<button id="clog" text="labels.log_scale" ui:inject="Button_inactive" visibility="!(:oclip)"/>
 
 								<label text="labels.function" pad.l="8"/>
@@ -1283,9 +1470,9 @@
 								<vbox>
 									<!-- Clipper function graph linear -->
 									<graph width.min="265" height.min="215" expand="true" fill="true" visibility="!:clog">
-										<origin hpos="-0.8" vpos="-2.0/3.0" visible="false"/>
+										<origin hpos="-1" vpos="-1" visible="false"/>
 										<origin hpos="-1" vpos="0" visible="false"/>
-
+		
 										<ui:with ox="0" oy="1">
 											<marker v="0.25" color="graph_alt_1"/>
 											<marker v="0.75" color="graph_alt_1"/>
@@ -1296,7 +1483,7 @@
 											<marker v="0.25" color="graph_alt_1"/>
 											<marker v="0.75" color="graph_alt_1"/>
 										</ui:with>
-
+		
 										<ui:with ox="0" oy="1">
 											<marker v="0.5" color="graph_sec"/>
 											<marker v="1" color="graph_sec"/>
@@ -1307,16 +1494,17 @@
 											<marker v="0.5" color="graph_sec"/>
 											<marker v="1" color="graph_sec"/>
 										</ui:with>
-
+		
 										<!-- Axes and boundaries -->
-										<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width * 0.6" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-										<axis min="-0.25" max="2.25" color="graph_prim" angle="0.0" width="2"/>
-										<axis min="-0.25" max="1.25" color="graph_prim" angle="0.5" width="2"/>
-										<axis o="1" min="-0.25" max="2.25" color="graph_prim" angle="0.0" zero="-0.25" visibility="false"/>
-
+										<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width / 2.25" dy=":_a_height / 1.25" color="graph_alt_1" width="2" smooth="true"/>
+										<axis min="0" max="2.25" color="graph_prim" angle="0.0" width="2"/>
+										<axis min="0" max="1.25" color="graph_prim" angle="0.5" width="2"/>
+										<axis o="1" min="0" max="2.25" color="graph_prim" angle="0.0" zero="0" visibility="false"/>
+		
 										<!-- Meshes -->
 										<mesh id="cfc" x.index="0" y.index="1" width="3" color=":ce and :oclip? 'graph_mesh': 'graph_prim'" smooth="true"/>
-										<dot x.id="cfx" y.id="cfy" color="dot" bcolor="dot" visibility=":ce and :oclip"/>
+										<dot x.id="cfx1" y.id="cfy1" color="dot" bcolor="dot" visibility=":ce and :oclip"/>
+										<dot x.id="cfx2" y.id="cfy2" color="dot" bcolor="dot" visibility=":ce and :oclip"/>
 
 										<!-- Markers -->
 										<marker
@@ -1361,14 +1549,14 @@
 											hlcolor="graph_prim"
 											rcolor="graph_prim"
 											hrcolor="graph_prim"/>
-
+		
 										<!-- Text -->
-										<ui:with x="0" halign="-1" valign="-1">
+										<ui:with x="0" halign="1" valign="-1">
 											<text y="0.5" text="0.5"/>
 											<text y="1" text="1"/>
 											<text y="1.25" text="graph.axis.out" valign="-1"/>
 										</ui:with>
-										<ui:with y="0" halign="1" valign="-1">
+										<ui:with y="0" halign="1" valign="1">
 											<text x="0" text="0"/>
 											<text x="0.5" text="0.5"/>
 											<text x="1.0" text="1"/>
@@ -1376,8 +1564,7 @@
 											<text x="2.0" text="2"/>
 											<text x="2.25" text="graph.axis.in" halign="-1"/>
 										</ui:with>
-										<text x=":ct" y="1.25" text="graph.values.x::f" text:value=":ct" text.eval="true" color=":ce and :oclip and :cf ine 0? 'threshold' : 'graph_prim'" halign="1" valign="-1"/>
-										<text x=":ct" y="-0.25" text="graph.values.x:db:f" text:value="20 * lg :ct" text.eval="true" color=":ce and :oclip and :cf ine 0? 'threshold' : 'graph_prim'" halign="1" valign="1"/>
+										<text x=":ct" y="1.25" text="graph.values.x:db:f;x::f" text:value=":ct" text:db="20 * lg :ct" text.eval="true" color=":ce and :oclip and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="1" valign="-1" text.halign="-1"/>
 									</graph>
 
 									<!-- Clipper function graph logarithmic -->
@@ -1407,7 +1594,9 @@
 
 										<!-- Meshes -->
 										<mesh id="cfc" x.index="2" y.index="3" width="3" color=":ce and :oclip? 'graph_mesh': 'graph_prim'" smooth="true"/>
-										<dot x.id="cfx" y.id="cfy" color="dot" bcolor="dot" visibility=":ce and :oclip"/>
+										<dot x.id="cfx1" y.id="cfy1" color="dot" bcolor="dot" visibility=":ce and :oclip"/>
+										<dot x.id="cfx2" y.id="cfy2" color="dot" bcolor="dot" visibility=":ce and :oclip"/>
+										
 										<!-- Markers -->
 										<marker
 											id="ct"
@@ -1514,6 +1703,15 @@
 									<value id="ct" sline="true" halign="0"/>
 								</vbox>
 							</hbox>
+							
+							<!-- DC offset -->
+							<hbox fill="false" pad.r="6">
+								<knob id="dcoff" scolor=":ce and :oclip ? 'kscale' : 'cycle_inactive'"/>
+								<vbox vfill="false" width="50" pad.l="4">
+									<label text="labels.signal.dc_offset" halign="-1"/>
+									<value id="dcoff" sline="true" halign="0"/>
+								</vbox>
+							</hbox>
 
 							<!-- pumping -->
 							<hbox fill="false" pad.r="6">
@@ -1551,7 +1749,119 @@
 						<!-- time graph and meters -->
 						<cell rows="3">
 							<ui:with bg.bright="!(:oclip) ? :const_bg_darken : 1.0" bright="!(:oclip) ? 0.75 : 1.0">
-								<group ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+								<cgroup id="gview" ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+									<vbox spacing="2" bg.color="bg_schema_name">
+										<!-- Oscillogram graph combined-->
+										<graph width.min="312" height.min="95" hexpand="true" hfill="true" >
+											<origin hpos="1" vpos="-1" visible="false"/>
+				
+											<!-- Gray grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.5" color="graph_alt_1"/>
+												<marker v="1.5" color="graph_alt_1"/>
+												<marker v="2.5" color="graph_alt_1"/>
+												<marker v="3.5" color="graph_alt_1"/>
+												<marker v="4.5" color="graph_alt_1"/>
+											</ui:with>
+				
+											<!-- Yellow grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="1" color="graph_sec"/>
+												<marker v="2" color="graph_sec"/>
+												<marker v="3" color="graph_sec"/>
+												<marker v="4" color="graph_sec"/>
+											</ui:with>
+											<ui:with ox="1" oy="0" color="graph_sec">
+												<ui:for id="v" first="-18" last="6" step="6">
+													<marker v="${v} db"/>
+												</ui:for>
+											</ui:with>
+				
+											<!-- Meshes -->
+											<mesh id="ctg" width="0" x.index="0" y.index="1" color="mono_in" fcolor="mono_in" fcolor.a="0.8" fill="true" visibility=":ilg"/>
+											<mesh id="ctg" width="2" x.index="0" y.index="2" color="mono" visibility=":olg"/>
+											<mesh id="ctg" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg"/>
+				
+											<!-- Axis -->
+											<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+											<axis min="-24 db" max="12 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+				
+											<!-- Text -->
+											<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+											<ui:with y="-24 db" halign="1" valign="1" color="graph_prim">
+												<text x="0" text="0" halign="-1"/>
+												<text x="1" text="1"/>
+												<text x="2" text="2"/>
+												<text x="3" text="3"/>
+												<text x="4" text="4"/>
+												<text x="5" text="graph.units.s"/>
+											</ui:with>
+											<ui:with x="5" halign="1" valign="1" color="graph_prim">
+												<text y="12 db" text="graph.units.db" text:value="0" valign="-1"/>
+												<ui:for id="v" first="-18" last="0" step="6">
+													<text y="${v} db" text="${v}"/>
+												</ui:for>
+											</ui:with>
+										</graph>
+				
+										<!-- Waveform graph combined-->
+										<graph width.min="312" height.min="95" hexpand="true" hfill="true">
+											<origin hpos="1" vpos="0" visible="false"/>
+				
+											<!-- Gray grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.1" color="graph_alt_1"/>
+												<marker v="0.3" color="graph_alt_1"/>
+												<marker v="0.5" color="graph_alt_1"/>
+												<marker v="0.7" color="graph_alt_1"/>
+												<marker v="0.9" color="graph_alt_1"/>
+											</ui:with>
+				
+											<!-- Yellow grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.2" color="graph_sec"/>
+												<marker v="0.4" color="graph_sec"/>
+												<marker v="0.6" color="graph_sec"/>
+												<marker v="0.8" color="graph_sec"/>
+											</ui:with>
+				
+											<ui:with ox="1" oy="0" color="graph_sec">
+												<marker v="-0.5" />
+												<marker v="0.5" />
+											</ui:with>
+				
+											<!-- Meshes -->
+											<mesh id="wfg" width="2" x.index="0" y.index="1" color="mono" fcolor="mono" fcolor.a="0.8" fill="true" visibility=":olg"/>
+				
+											<ui:with ox="1" oy="0" width="2" color="graph_prim">
+												<marker v="1" />
+												<marker v="0" />
+												<marker v="-1" />
+											</ui:with>
+				
+											<!-- Axis -->
+											<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+											<axis min="-1.5" max="1.5" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+				
+											<!-- Text -->
+											<ui:with y="-1.5" halign="1" valign="1" color="graph_prim">
+												<text x="0" text="0" halign="-1"/>
+												<text x="0.2" text="0.2"/>
+												<text x="0.4" text="0.4"/>
+												<text x="0.6" text="0.6"/>
+												<text x="0.8" text="0.8"/>
+												<text x="1" text="graph.units.s"/>
+											</ui:with>
+											<ui:with x="1" halign="1" valign="1" color="graph_prim">
+												<text y="-1" text="-1"/>
+												<text y="-0.5" text="-0.5"/>
+												<text y="0" text="0"/>
+												<text y="0.5" text="0.5"/>
+												<text y="1" text="1"/>
+												<text y="1.5" text="labels.amplitude" valign="-1" x="0" halign="-1"/>
+											</ui:with>
+										</graph>
+									</vbox>
 
 									<!-- Ocillogram graph -->
 									<graph width.min="312" height.min="192" hexpand="true" hfill="true">
@@ -1609,7 +1919,70 @@
 											</ui:for>
 										</ui:with>
 									</graph>
-								</group>
+									
+									<!-- Waveform graph -->
+									<graph width.min="312" height.min="192" hexpand="true" hfill="true">
+										<origin hpos="1" vpos="0" visible="false"/>
+				
+										<!-- Gray grid -->
+										<ui:with ox="0" oy="1">
+											<marker v="0.1" color="graph_alt_1"/>
+											<marker v="0.3" color="graph_alt_1"/>
+											<marker v="0.5" color="graph_alt_1"/>
+											<marker v="0.7" color="graph_alt_1"/>
+											<marker v="0.9" color="graph_alt_1"/>
+										</ui:with>
+				
+										<!-- Yellow grid -->
+										<ui:with ox="0" oy="1">
+											<marker v="0.2" color="graph_sec"/>
+											<marker v="0.4" color="graph_sec"/>
+											<marker v="0.6" color="graph_sec"/>
+											<marker v="0.8" color="graph_sec"/>
+										</ui:with>
+										<ui:with ox="1" oy="0" color="graph_sec">
+											<marker v="-0.25" />
+											<marker v="-0.5" />
+											<marker v="-0.75" />
+											<marker v="0.25" />
+											<marker v="0.5" />
+											<marker v="0.75" />
+										</ui:with>
+				
+										<!-- Meshes -->
+										<mesh id="wfg" width="2" x.index="0" y.index="1" color="mono" fcolor="mono" fcolor.a="0.8" fill="true" visibility=":olg"/>
+				
+										<ui:with ox="1" oy="0" width="2" color="graph_prim">
+											<marker v="1" />
+											<marker v="0" />
+											<marker v="-1" />
+										</ui:with>
+										<!-- Axis -->
+										<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+										<axis min="-1.25" max="1.25" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+				
+										<!-- Text -->
+										<ui:with y="-1.25" halign="1" valign="1" color="graph_prim">
+											<text x="0" text="0" halign="-1"/>
+											<text x="0.2" text="0.2"/>
+											<text x="0.4" text="0.4"/>
+											<text x="0.6" text="0.6"/>
+											<text x="0.8" text="0.8"/>
+											<text x="1" text="graph.units.s"/>
+										</ui:with>
+										<ui:with x="1" halign="1" valign="1" color="graph_prim">
+											<text y="-1" text="-1"/>
+											<text y="-0.75" text="-0.75"/>
+											<text y="-0.5" text="-0.5"/>
+											<text y="-0.25" text="-0.25"/>
+											<text y="0" text="0"/>
+											<text y="0.25" text="0.25"/>
+											<text y="0.5" text="0.5"/>
+											<text y="0.75" text="0.75"/>
+											<text y="1.25" text="labels.amplitude" valign="-1"/>
+										</ui:with>
+									</graph>
+								</cgroup>
 							</ui:with>
 						</cell>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/ui/dynamics/clipper/multiband/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/ui/dynamics/clipper/multiband/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/res/main/ui/dynamics/clipper/multiband/stereo.xml	2025-03-01 12:43:07.032586921 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/res/main/ui/dynamics/clipper/multiband/stereo.xml	2025-08-26 18:15:55.845885663 +0000
@@ -446,7 +446,7 @@
 					<cell rows="3">
 						<vsep pad.h="2" bg.color="bg" hreduce="true"/>
 					</cell>
-					<!-- buutons line -->
+					<!-- buttons line -->
 					<cell cols="3">
 						<ui:with bg.bright="(!${act_band}) ? :const_bg_darken : 1.0" bright="(!${act_band}) ? 0.75 : 1.0">
 							<hbox pad.v="4" pad.h="6">
@@ -461,10 +461,12 @@
 									<void hexpand="true"/>
 									<button id="op_${i}" ui:inject="Button_green" text="labels.odp" visibility="${act_band}"/>
 									<button id="ce_${i}" text="labels.signal.clipping" pad.l="8" visibility="${act_band}"/>
+									<button id="dcc_${i}" text="labels.signal.dc_compensate" ui:inject="Button_cyan" visibility="${act_band}"/>
 									<button id="clog" text="labels.log_scale" ui:inject="Button_yellow" visibility="${act_band}"/>
 
 									<button id="op_${i}" ui:inject="Button_inactive" text="labels.odp" visibility="!${act_band}"/>
 									<button id="ce_${i}" text="labels.signal.clipping" ui:inject="Button_inactive" pad.l="8" visibility="!${act_band}"/>
+									<button id="dcc_${i}" text="labels.signal.dc_compensate" ui:inject="Button_inactive" visibility="!${act_band}"/>
 									<button id="clog" text="labels.log_scale" ui:inject="Button_inactive" visibility="!${act_band}"/>
 
 									<label text="labels.function" pad.l="8"/>
@@ -663,9 +665,9 @@
 									<vbox>
 										<!-- Clipper function graph linear -->
 										<graph width.min="265" height.min="215" expand="true" fill="true" visibility="!:clog">
-											<origin hpos="-0.8" vpos="-2.0/3.0" visible="false"/>
+											<origin hpos="-1" vpos="-1" visible="false"/>
 											<origin hpos="-1" vpos="0" visible="false"/>
-
+			
 											<ui:with ox="0" oy="1">
 												<marker v="0.25" color="graph_alt_1"/>
 												<marker v="0.75" color="graph_alt_1"/>
@@ -676,7 +678,7 @@
 												<marker v="0.25" color="graph_alt_1"/>
 												<marker v="0.75" color="graph_alt_1"/>
 											</ui:with>
-
+			
 											<ui:with ox="0" oy="1">
 												<marker v="0.5" color="graph_sec"/>
 												<marker v="1" color="graph_sec"/>
@@ -687,18 +689,20 @@
 												<marker v="0.5" color="graph_sec"/>
 												<marker v="1" color="graph_sec"/>
 											</ui:with>
-
+			
 											<!-- Axes and boundaries -->
-											<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width * 0.6" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-											<axis min="-0.25" max="2.25" color="graph_prim" angle="0.0" width="2"/>
-											<axis min="-0.25" max="1.25" color="graph_prim" angle="0.5" width="2"/>
-											<axis o="1" min="-0.25" max="2.25" color="graph_prim" angle="0.0" zero="-0.25" visibility="false"/>
-
+											<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width / 2.25" dy=":_a_height / 1.25" color="graph_alt_1" width="2" smooth="true"/>
+											<axis min="0" max="2.25" color="graph_prim" angle="0.0" width="2"/>
+											<axis min="0" max="1.25" color="graph_prim" angle="0.5" width="2"/>
+											<axis o="1" min="0" max="2.25" color="graph_prim" angle="0.0" zero="0" visibility="false"/>
+			
 											<!-- Meshes -->
 											<mesh id="cfc_${i}" x.index="0" y.index="1" width="3" color=":ce_${i} and ${act_band}? 'graph_mesh': 'graph_prim'" smooth="true"/>
-											<dot x.id="cfx_${i}l" y.id="cfy_${i}l" color="left" bcolor="left" visibility=":ce_${i} and ${act_band}"/>
-											<dot x.id="cfx_${i}r" y.id="cfy_${i}r" color="right" bcolor="right" visibility=":ce_${i} and ${act_band}"/>
-
+											<dot x.id="cfx1_${i}l" y.id="cfy1_${i}l" color="left" bcolor="left" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx1_${i}r" y.id="cfy1_${i}r" color="right" bcolor="right" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx2_${i}l" y.id="cfy2_${i}l" color="left" bcolor="left" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx2_${i}r" y.id="cfy2_${i}r" color="right" bcolor="right" visibility=":ce_${i} and ${act_band}"/>
+			
 											<!-- Markers -->
 											<marker
 												id="ct_${i}"
@@ -742,14 +746,14 @@
 												hlcolor="graph_prim"
 												rcolor="graph_prim"
 												hrcolor="graph_prim"/>
-
+			
 											<!-- Text -->
-											<ui:with x="0" halign="-1" valign="-1">
+											<ui:with x="0" halign="1" valign="-1">
 												<text y="0.5" text="0.5"/>
 												<text y="1" text="1"/>
 												<text y="1.25" text="graph.axis.out" valign="-1"/>
 											</ui:with>
-											<ui:with y="0" halign="1" valign="-1">
+											<ui:with y="0" halign="1" valign="1">
 												<text x="0" text="0"/>
 												<text x="0.5" text="0.5"/>
 												<text x="1.0" text="1"/>
@@ -757,10 +761,9 @@
 												<text x="2.0" text="2"/>
 												<text x="2.25" text="graph.axis.in" halign="-1"/>
 											</ui:with>
-											<text x=":ct_${i}" y="1.25" text="graph.values.x::f" text:value=":ct_${i}" text.eval="true" color=":ce_${i} and ${act_band} and (:cf_${i} ine 0)? 'threshold' : 'graph_prim'" halign="1" valign="-1"/>
-											<text x=":ct_${i}" y="-0.25" text="graph.values.x:db:f" text:value="20 * lg :ct_${i}" text.eval="true" color=":ce_${i} and ${act_band} and (:cf_${i} ine 0)? 'threshold' : 'graph_prim'" halign="1" valign="1"/>
+											<text x=":ct" y="1.25" text="graph.values.x:db:f;x::f" text:value=":ct" text:db="20 * lg :ct" text.eval="true" color=":ce_${i} and ${act_band} and (:cf_${i} ine 0) ? 'threshold' : 'graph_prim'" halign="1" valign="-1" text.halign="-1"/>
 										</graph>
-
+							
 										<!-- Clipper function graph logarithmic -->
 										<graph width.min="265" height.min="215" expand="true" fill="true" visibility=":clog">
 											<origin hpos="-1" vpos="-1" visible="false"/>
@@ -788,8 +791,10 @@
 
 											<!-- Meshes -->
 											<mesh id="cfc_${i}" x.index="2" y.index="3" width="3" color=":ce_${i} and ${act_band}? 'graph_mesh': 'graph_prim'" smooth="true"/>
-											<dot x.id="cfx_${i}l" y.id="cfy_${i}l" color="left" bcolor="left" visibility=":ce_${i} and ${act_band}"/>
-											<dot x.id="cfx_${i}r" y.id="cfy_${i}r" color="right" bcolor="right" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx1_${i}l" y.id="cfy1_${i}l" color="left" bcolor="left" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx1_${i}r" y.id="cfy1_${i}r" color="right" bcolor="right" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx2_${i}l" y.id="cfy2_${i}l" color="left" bcolor="left" visibility=":ce_${i} and ${act_band}"/>
+											<dot x.id="cfx2_${i}r" y.id="cfy2_${i}r" color="right" bcolor="right" visibility=":ce_${i} and ${act_band}"/>
 
 											<!-- Markers -->
 											<marker
@@ -900,7 +905,7 @@
 						<ui:with bg.bright="(!${act_band}) or !:ce_${i} ? :const_bg_darken : 1.0" bright="(!${act_band}) or !:ce_${i} ? 0.75 : 1.0">
 							<hbox pad.v="4">
 								<void hexpand="true" hfill="true"/>
-								<!-- thres -->
+								<!-- thresh -->
 								<hbox fill="false" pad.l="6" pad.r="10">
 									<knob id="ct_${i}" scolor=":ce_${i} and ${act_band} and (:cf_${i} ine 0) ? 'threshold' : 'cycle_inactive'"/>
 									<vbox vfill="false" width="50" pad.l="4">
@@ -908,6 +913,15 @@
 										<value id="ct_${i}" sline="true" halign="0"/>
 									</vbox>
 								</hbox>
+								
+								<!-- DC offset -->
+								<hbox fill="false" pad.r="6">
+									<knob id="dco_${i}" scolor=":ce_${i} and ${act_band} ? 'kscale' : 'cycle_inactive'"/>
+									<vbox vfill="false" width="50" pad.l="4">
+										<label text="labels.signal.dc_offset" halign="-1"/>
+										<value id="dco_${i}" sline="true" halign="0"/>
+									</vbox>
+								</hbox>
 
 								<!-- pumping -->
 								<hbox fill="false" pad.r="6">
@@ -958,9 +972,125 @@
 							<!-- time graph and meters -->
 							<cell rows="3">
 								<ui:with bg.bright="(!${act_band}) ? :const_bg_darken : 1.0" bright="(!${act_band}) ? 0.75 : 1.0">
-									<group ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
-
-										<!-- Ocillogram graph -->
+									<cgroup id="gview" ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+										<vbox spacing="2" bg.color="bg_schema_name">
+											<!-- Oscillogram graph combined-->
+											<graph width.min="312" height.min="95" hexpand="true" hfill="true" >
+												<origin hpos="1" vpos="-1" visible="false"/>
+					
+												<!-- Gray grid -->
+												<ui:with ox="0" oy="1">
+													<marker v="0.5" color="graph_alt_1"/>
+													<marker v="1.5" color="graph_alt_1"/>
+													<marker v="2.5" color="graph_alt_1"/>
+													<marker v="3.5" color="graph_alt_1"/>
+													<marker v="4.5" color="graph_alt_1"/>
+												</ui:with>
+					
+												<!-- Yellow grid -->
+												<ui:with ox="0" oy="1">
+													<marker v="1" color="graph_sec"/>
+													<marker v="2" color="graph_sec"/>
+													<marker v="3" color="graph_sec"/>
+													<marker v="4" color="graph_sec"/>
+												</ui:with>
+												<ui:with ox="1" oy="0" color="graph_sec">
+													<ui:for id="v" first="-18" last="6" step="6">
+														<marker v="${v} db"/>
+													</ui:for>
+												</ui:with>
+					
+												<!-- Meshes -->
+												<mesh id="ctg_${i}" width="0" x.index="0" y.index="1" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
+												<mesh id="ctg_${i}" width="0" x.index="0" y.index="4" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilg_r"/>
+												<mesh id="ctg_${i}" width="2" x.index="0" y.index="2" color="left" visibility=":olg_l"/>
+												<mesh id="ctg_${i}" width="2" x.index="0" y.index="5" color="right" visibility=":olg_r"/>
+												<mesh id="ctg_${i}" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_l"/>
+												<mesh id="ctg_${i}" width="2" x.index="0" y.index="6" color="bright_blue" visibility=":grg_r"/>
+					
+												<!-- Axis -->
+												<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+												<axis min="-24 db" max="12 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+					
+												<!-- Text -->
+												<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+												<ui:with y="-24 db" halign="1" valign="1" color="graph_prim">
+													<text x="0" text="0" halign="-1"/>
+													<text x="1" text="1"/>
+													<text x="2" text="2"/>
+													<text x="3" text="3"/>
+													<text x="4" text="4"/>
+													<text x="5" text="graph.units.s"/>
+												</ui:with>
+												<ui:with x="5" halign="1" valign="1" color="graph_prim">
+													<text y="12 db" text="graph.units.db" text:value="0" valign="-1"/>
+													<ui:for id="v" first="-18" last="0" step="6">
+														<text y="${v} db" text="${v}"/>
+													</ui:for>
+												</ui:with>
+											</graph>
+					
+											<!-- Waveform graph combined-->
+											<graph width.min="312" height.min="95" hexpand="true" hfill="true">
+												<origin hpos="1" vpos="0" visible="false"/>
+					
+												<!-- Gray grid -->
+												<ui:with ox="0" oy="1">
+													<marker v="0.1" color="graph_alt_1"/>
+													<marker v="0.3" color="graph_alt_1"/>
+													<marker v="0.5" color="graph_alt_1"/>
+													<marker v="0.7" color="graph_alt_1"/>
+													<marker v="0.9" color="graph_alt_1"/>
+												</ui:with>
+					
+												<!-- Yellow grid -->
+												<ui:with ox="0" oy="1">
+													<marker v="0.2" color="graph_sec"/>
+													<marker v="0.4" color="graph_sec"/>
+													<marker v="0.6" color="graph_sec"/>
+													<marker v="0.8" color="graph_sec"/>
+												</ui:with>
+					
+												<ui:with ox="1" oy="0" color="graph_sec">
+													<marker v="-0.5" />
+													<marker v="0.5" />
+												</ui:with>
+					
+												<!-- Meshes -->
+												<mesh id="wfg_${i}" width="2" x.index="0" y.index="1" color="left" fcolor="left" fcolor.a="0.8" fill="true" visibility=":olg_l"/>
+												<mesh id="wfg_${i}" width="2" x.index="0" y.index="2" color="right" fcolor="right" fcolor.a="0.8" fill="true" visibility=":olg_r"/>
+					
+												<ui:with ox="1" oy="0" width="2" color="graph_prim">
+													<marker v="1" />
+													<marker v="0" />
+													<marker v="-1" />
+												</ui:with>
+					
+												<!-- Axis -->
+												<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+												<axis min="-1.5" max="1.5" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+					
+												<!-- Text -->
+												<ui:with y="-1.5" halign="1" valign="1" color="graph_prim">
+													<text x="0" text="0" halign="-1"/>
+													<text x="0.2" text="0.2"/>
+													<text x="0.4" text="0.4"/>
+													<text x="0.6" text="0.6"/>
+													<text x="0.8" text="0.8"/>
+													<text x="1" text="graph.units.s"/>
+												</ui:with>
+												<ui:with x="1" halign="1" valign="1" color="graph_prim">
+													<text y="-1" text="-1"/>
+													<text y="-0.5" text="-0.5"/>
+													<text y="0" text="0"/>
+													<text y="0.5" text="0.5"/>
+													<text y="1" text="1"/>
+													<text y="1.5" text="labels.amplitude" valign="-1" x="0" halign="-1"/>
+												</ui:with>
+											</graph>
+										</vbox>
+									
+										<!-- Oscillogram graph -->
 										<graph width.min="312" height.min="192" hexpand="true" hfill="true">
 											<origin hpos="1" vpos="-1" visible="false"/>
 
@@ -987,12 +1117,12 @@
 											</ui:with>
 
 											<!-- Meshes -->
-											<mesh id="ctg_${i}l" width="0" x.index="0" y.index="1" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
-											<mesh id="ctg_${i}r" width="0" x.index="0" y.index="1" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilg_r"/>
-											<mesh id="ctg_${i}l" width="2" x.index="0" y.index="2" color="left" visibility=":olg_l"/>
-											<mesh id="ctg_${i}r" width="2" x.index="0" y.index="2" color="right" visibility=":olg_r"/>
-											<mesh id="ctg_${i}l" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_l"/>
-											<mesh id="ctg_${i}r" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_r"/>
+											<mesh id="ctg_${i}" width="0" x.index="0" y.index="1" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
+											<mesh id="ctg_${i}" width="0" x.index="0" y.index="4" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilg_r"/>
+											<mesh id="ctg_${i}" width="2" x.index="0" y.index="2" color="left" visibility=":olg_l"/>
+											<mesh id="ctg_${i}" width="2" x.index="0" y.index="5" color="right" visibility=":olg_r"/>
+											<mesh id="ctg_${i}" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_l"/>
+											<mesh id="ctg_${i}" width="2" x.index="0" y.index="6" color="bright_blue" visibility=":grg_r"/>
 
 											<!-- Boundaries -->
 											<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
@@ -1019,7 +1149,71 @@
 												</ui:for>
 											</ui:with>
 										</graph>
-									</group>
+										
+										<!-- Waveform graph -->
+										<graph width.min="312" height.min="192" hexpand="true" hfill="true">
+											<origin hpos="1" vpos="0" visible="false"/>
+					
+											<!-- Gray grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.1" color="graph_alt_1"/>
+												<marker v="0.3" color="graph_alt_1"/>
+												<marker v="0.5" color="graph_alt_1"/>
+												<marker v="0.7" color="graph_alt_1"/>
+												<marker v="0.9" color="graph_alt_1"/>
+											</ui:with>
+					
+											<!-- Yellow grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.2" color="graph_sec"/>
+												<marker v="0.4" color="graph_sec"/>
+												<marker v="0.6" color="graph_sec"/>
+												<marker v="0.8" color="graph_sec"/>
+											</ui:with>
+											<ui:with ox="1" oy="0" color="graph_sec">
+												<marker v="-0.25" />
+												<marker v="-0.5" />
+												<marker v="-0.75" />
+												<marker v="0.25" />
+												<marker v="0.5" />
+												<marker v="0.75" />
+											</ui:with>
+					
+											<!-- Meshes -->
+											<mesh id="wfg_${i}" width="2" x.index="0" y.index="1" color="left" fcolor="left" fcolor.a="0.8" fill="true" visibility=":olg_l"/>
+											<mesh id="wfg_${i}" width="2" x.index="0" y.index="2" color="right" fcolor="right" fcolor.a="0.8" fill="true" visibility=":olg_r"/>
+					
+											<ui:with ox="1" oy="0" width="2" color="graph_prim">
+												<marker v="1" />
+												<marker v="0" />
+												<marker v="-1" />
+											</ui:with>
+											<!-- Axis -->
+											<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+											<axis min="-1.25" max="1.25" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+					
+											<!-- Text -->
+											<ui:with y="-1.25" halign="1" valign="1" color="graph_prim">
+												<text x="0" text="0" halign="-1"/>
+												<text x="0.2" text="0.2"/>
+												<text x="0.4" text="0.4"/>
+												<text x="0.6" text="0.6"/>
+												<text x="0.8" text="0.8"/>
+												<text x="1" text="graph.units.s"/>
+											</ui:with>
+											<ui:with x="1" halign="1" valign="1" color="graph_prim">
+												<text y="-1" text="-1"/>
+												<text y="-0.75" text="-0.75"/>
+												<text y="-0.5" text="-0.5"/>
+												<text y="-0.25" text="-0.25"/>
+												<text y="0" text="0"/>
+												<text y="0.25" text="0.25"/>
+												<text y="0.5" text="0.5"/>
+												<text y="0.75" text="0.75"/>
+												<text y="1.25" text="labels.amplitude" valign="-1"/>
+											</ui:with>
+										</graph>
+									</cgroup>
 								</ui:with>
 							</cell>
 
@@ -1189,10 +1383,12 @@
 								<void hexpand="true"/>
 								<button id="op" ui:inject="Button_green" text="labels.odp" visibility=":oclip"/>
 								<button id="ce" text="labels.signal.clipping" pad.l="8" visibility=":oclip"/>
+								<button id="dcomp" text="labels.signal.dc_compensate" ui:inject="Button_cyan" visibility=":oclip"/>
 								<button id="clog" text="labels.log_scale" ui:inject="Button_yellow" visibility=":oclip"/>
 
 								<button id="op" ui:inject="Button_inactive" text="labels.odp" visibility="!(:oclip)"/>
 								<button id="ce" text="labels.signal.clipping" ui:inject="Button_inactive" pad.l="8" visibility="!(:oclip)"/>
+								<button id="dcomp" text="labels.signal.dc_compensate" ui:inject="Button_inactive" visibility="!(:oclip)"/>
 								<button id="clog" text="labels.log_scale" ui:inject="Button_inactive" visibility="!(:oclip)"/>
 
 								<label text="labels.function" pad.l="8"/>
@@ -1380,9 +1576,9 @@
 								<vbox>
 									<!-- Clipper function graph linear -->
 									<graph width.min="265" height.min="215" expand="true" fill="true" visibility="!:clog">
-										<origin hpos="-0.8" vpos="-2.0/3.0" visible="false"/>
+										<origin hpos="-1" vpos="-1" visible="false"/>
 										<origin hpos="-1" vpos="0" visible="false"/>
-
+		
 										<ui:with ox="0" oy="1">
 											<marker v="0.25" color="graph_alt_1"/>
 											<marker v="0.75" color="graph_alt_1"/>
@@ -1393,7 +1589,7 @@
 											<marker v="0.25" color="graph_alt_1"/>
 											<marker v="0.75" color="graph_alt_1"/>
 										</ui:with>
-
+		
 										<ui:with ox="0" oy="1">
 											<marker v="0.5" color="graph_sec"/>
 											<marker v="1" color="graph_sec"/>
@@ -1404,17 +1600,19 @@
 											<marker v="0.5" color="graph_sec"/>
 											<marker v="1" color="graph_sec"/>
 										</ui:with>
-
+		
 										<!-- Axes and boundaries -->
-										<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width * 0.6" dy=":_a_height" color="graph_alt_1" width="2" smooth="true"/>
-										<axis min="-0.25" max="2.25" color="graph_prim" angle="0.0" width="2"/>
-										<axis min="-0.25" max="1.25" color="graph_prim" angle="0.5" width="2"/>
-										<axis o="1" min="-0.25" max="2.25" color="graph_prim" angle="0.0" zero="-0.25" visibility="false"/>
-
+										<marker v="1" ox="1" oy="0" dv="1" dx=":_a_width / 2.25" dy=":_a_height / 1.25" color="graph_alt_1" width="2" smooth="true"/>
+										<axis min="0" max="2.25" color="graph_prim" angle="0.0" width="2"/>
+										<axis min="0" max="1.25" color="graph_prim" angle="0.5" width="2"/>
+										<axis o="1" min="0" max="2.25" color="graph_prim" angle="0.0" zero="0" visibility="false"/>
+		
 										<!-- Meshes -->
 										<mesh id="cfc" x.index="0" y.index="1" width="3" color=":ce and :oclip? 'graph_mesh': 'graph_prim'" smooth="true"/>
-										<dot x.id="cfx_l" y.id="cfy_l" color="left" bcolor="left" visibility=":ce and :oclip"/>
-										<dot x.id="cfx_r" y.id="cfy_r" color="right" bcolor="right" visibility=":ce and :oclip"/>
+										<dot x.id="cfx1_l" y.id="cfy1_l" color="left" bcolor="left" visibility=":ce and :oclip"/>
+										<dot x.id="cfx1_r" y.id="cfy1_r" color="right" bcolor="right" visibility=":ce and :oclip"/>
+										<dot x.id="cfx2_l" y.id="cfy2_l" color="left" bcolor="left" visibility=":ce and :oclip"/>
+										<dot x.id="cfx2_r" y.id="cfy2_r" color="right" bcolor="right" visibility=":ce and :oclip"/>
 
 										<!-- Markers -->
 										<marker
@@ -1459,14 +1657,14 @@
 											hlcolor="graph_prim"
 											rcolor="graph_prim"
 											hrcolor="graph_prim"/>
-
+		
 										<!-- Text -->
-										<ui:with x="0" halign="-1" valign="-1">
+										<ui:with x="0" halign="1" valign="-1">
 											<text y="0.5" text="0.5"/>
 											<text y="1" text="1"/>
 											<text y="1.25" text="graph.axis.out" valign="-1"/>
 										</ui:with>
-										<ui:with y="0" halign="1" valign="-1">
+										<ui:with y="0" halign="1" valign="1">
 											<text x="0" text="0"/>
 											<text x="0.5" text="0.5"/>
 											<text x="1.0" text="1"/>
@@ -1474,10 +1672,9 @@
 											<text x="2.0" text="2"/>
 											<text x="2.25" text="graph.axis.in" halign="-1"/>
 										</ui:with>
-										<text x=":ct" y="1.25" text="graph.values.x::f" text:value=":ct" text.eval="true" color=":ce and :oclip and :cf ine 0? 'threshold' : 'graph_prim'" halign="1" valign="-1"/>
-										<text x=":ct" y="-0.25" text="graph.values.x:db:f" text:value="20 * lg :ct" text.eval="true" color=":ce and :oclip and :cf ine 0? 'threshold' : 'graph_prim'" halign="1" valign="1"/>
+										<text x=":ct" y="1.25" text="graph.values.x:db:f;x::f" text:value=":ct" text:db="20 * lg :ct" text.eval="true" color=":ce and :oclip and :cf ine 0 ? 'threshold' : 'graph_prim'" halign="1" valign="-1" text.halign="-1"/>
 									</graph>
-
+										
 									<!-- Clipper function graph logarithmic -->
 									<graph width.min="265" height.min="215" expand="true" fill="true" visibility=":clog">
 										<origin hpos="-1" vpos="-1" visible="false"/>
@@ -1505,8 +1702,10 @@
 
 										<!-- Meshes -->
 										<mesh id="cfc" x.index="2" y.index="3" width="3" color=":ce and :oclip? 'graph_mesh': 'graph_prim'" smooth="true"/>
-										<dot x.id="cfx_l" y.id="cfy_l" color="left" bcolor="left" visibility=":ce and :oclip"/>
-										<dot x.id="cfx_r" y.id="cfy_r" color="right" bcolor="right" visibility=":ce and :oclip"/>
+										<dot x.id="cfx1_l" y.id="cfy1_l" color="left" bcolor="left" visibility=":ce and :oclip"/>
+										<dot x.id="cfx1_r" y.id="cfy1_r" color="right" bcolor="right" visibility=":ce and :oclip"/>
+										<dot x.id="cfx2_l" y.id="cfy2_l" color="left" bcolor="left" visibility=":ce and :oclip"/>
+										<dot x.id="cfx2_r" y.id="cfy2_r" color="right" bcolor="right" visibility=":ce and :oclip"/>
 
 										<!-- Markers -->
 										<marker
@@ -1617,7 +1816,7 @@
 					<ui:with bg.bright="!(:oclip) or !:ce ? :const_bg_darken : 1.0" bright="!(:oclip) or !:ce ? 0.75 : 1.0">
 						<hbox pad.v="4">
 							<void hexpand="true" hfill="true"/>
-							<!-- thres -->
+							<!-- thresh -->
 							<hbox fill="false" pad.l="6" pad.r="10">
 								<knob id="ct" scolor=":ce and :oclip and :cf ine 0 ? 'threshold' : 'cycle_inactive'"/>
 								<vbox vfill="false" width="50" pad.l="4">
@@ -1625,6 +1824,15 @@
 									<value id="ct" sline="true" halign="0"/>
 								</vbox>
 							</hbox>
+							
+							<!-- DC offset -->
+							<hbox fill="false" pad.r="6">
+								<knob id="dcoff" scolor=":ce and :oclip ? 'kscale' : 'cycle_inactive'"/>
+								<vbox vfill="false" width="50" pad.l="4">
+									<label text="labels.signal.dc_offset" halign="-1"/>
+									<value id="dcoff" sline="true" halign="0"/>
+								</vbox>
+							</hbox>
 
 							<!-- pumping -->
 							<hbox fill="false" pad.r="6">
@@ -1669,9 +1877,125 @@
 						<!-- time graph and meters -->
 						<cell rows="3">
 							<ui:with bg.bright="!(:oclip) ? :const_bg_darken : 1.0" bright="!(:oclip) ? 0.75 : 1.0">
-								<group ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+								<cgroup id="gview" ui:inject="GraphGroup" ipadding="0" hexpand="true" hfill="true" text="labels.graphs.time">
+									<vbox spacing="2" bg.color="bg_schema_name">
+										<!-- Oscillogram graph combined-->
+										<graph width.min="312" height.min="95" hexpand="true" hfill="true" >
+											<origin hpos="1" vpos="-1" visible="false"/>
+				
+											<!-- Gray grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.5" color="graph_alt_1"/>
+												<marker v="1.5" color="graph_alt_1"/>
+												<marker v="2.5" color="graph_alt_1"/>
+												<marker v="3.5" color="graph_alt_1"/>
+												<marker v="4.5" color="graph_alt_1"/>
+											</ui:with>
+				
+											<!-- Yellow grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="1" color="graph_sec"/>
+												<marker v="2" color="graph_sec"/>
+												<marker v="3" color="graph_sec"/>
+												<marker v="4" color="graph_sec"/>
+											</ui:with>
+											<ui:with ox="1" oy="0" color="graph_sec">
+												<ui:for id="v" first="-18" last="6" step="6">
+													<marker v="${v} db"/>
+												</ui:for>
+											</ui:with>
+				
+											<!-- Meshes -->
+											<mesh id="ctg" width="0" x.index="0" y.index="1" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
+											<mesh id="ctg" width="0" x.index="0" y.index="4" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilg_r"/>
+											<mesh id="ctg" width="2" x.index="0" y.index="2" color="left" visibility=":olg_l"/>
+											<mesh id="ctg" width="2" x.index="0" y.index="5" color="right" visibility=":olg_r"/>
+											<mesh id="ctg" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_l"/>
+											<mesh id="ctg" width="2" x.index="0" y.index="6" color="bright_blue" visibility=":grg_r"/>
+				
+											<!-- Axis -->
+											<axis min="0" max="5" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+											<axis min="-24 db" max="12 db" angle="0.5" log="true" color="graph_prim" visibility="false"/>
+				
+											<!-- Text -->
+											<text x="5" y="-72 db" text="graph.units.s" halign="1" valign="1" color="graph_prim"/>
+											<ui:with y="-24 db" halign="1" valign="1" color="graph_prim">
+												<text x="0" text="0" halign="-1"/>
+												<text x="1" text="1"/>
+												<text x="2" text="2"/>
+												<text x="3" text="3"/>
+												<text x="4" text="4"/>
+												<text x="5" text="graph.units.s"/>
+											</ui:with>
+											<ui:with x="5" halign="1" valign="1" color="graph_prim">
+												<text y="12 db" text="graph.units.db" text:value="0" valign="-1"/>
+												<ui:for id="v" first="-18" last="0" step="6">
+													<text y="${v} db" text="${v}"/>
+												</ui:for>
+											</ui:with>
+										</graph>
+				
+										<!-- Waveform graph combined-->
+										<graph width.min="312" height.min="95" hexpand="true" hfill="true">
+											<origin hpos="1" vpos="0" visible="false"/>
+				
+											<!-- Gray grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.1" color="graph_alt_1"/>
+												<marker v="0.3" color="graph_alt_1"/>
+												<marker v="0.5" color="graph_alt_1"/>
+												<marker v="0.7" color="graph_alt_1"/>
+												<marker v="0.9" color="graph_alt_1"/>
+											</ui:with>
+				
+											<!-- Yellow grid -->
+											<ui:with ox="0" oy="1">
+												<marker v="0.2" color="graph_sec"/>
+												<marker v="0.4" color="graph_sec"/>
+												<marker v="0.6" color="graph_sec"/>
+												<marker v="0.8" color="graph_sec"/>
+											</ui:with>
+				
+											<ui:with ox="1" oy="0" color="graph_sec">
+												<marker v="-0.5" />
+												<marker v="0.5" />
+											</ui:with>
+				
+											<!-- Meshes -->
+											<mesh id="wfg" width="2" x.index="0" y.index="1" color="left" fcolor="left" fcolor.a="0.8" fill="true" visibility=":olg_l"/>
+											<mesh id="wfg" width="2" x.index="0" y.index="2" color="right" fcolor="right" fcolor.a="0.8" fill="true" visibility=":olg_r"/>
+				
+											<ui:with ox="1" oy="0" width="2" color="graph_prim">
+												<marker v="1" />
+												<marker v="0" />
+												<marker v="-1" />
+											</ui:with>
+				
+											<!-- Axis -->
+											<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+											<axis min="-1.5" max="1.5" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+				
+											<!-- Text -->
+											<ui:with y="-1.5" halign="1" valign="1" color="graph_prim">
+												<text x="0" text="0" halign="-1"/>
+												<text x="0.2" text="0.2"/>
+												<text x="0.4" text="0.4"/>
+												<text x="0.6" text="0.6"/>
+												<text x="0.8" text="0.8"/>
+												<text x="1" text="graph.units.s"/>
+											</ui:with>
+											<ui:with x="1" halign="1" valign="1" color="graph_prim">
+												<text y="-1" text="-1"/>
+												<text y="-0.5" text="-0.5"/>
+												<text y="0" text="0"/>
+												<text y="0.5" text="0.5"/>
+												<text y="1" text="1"/>
+												<text y="1.5" text="labels.amplitude" valign="-1" x="0" halign="-1"/>
+											</ui:with>
+										</graph>
+									</vbox>
 
-									<!-- Ocillogram graph -->
+									<!-- Oscillogram graph -->
 									<graph width.min="312" height.min="192" hexpand="true" hfill="true">
 										<origin hpos="1" vpos="-1" visible="false"/>
 
@@ -1698,12 +2022,12 @@
 										</ui:with>
 
 										<!-- Meshes -->
-										<mesh id="ctg_l" width="0" x.index="0" y.index="1" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
-										<mesh id="ctg_r" width="0" x.index="0" y.index="1" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilg_r"/>
-										<mesh id="ctg_l" width="2" x.index="0" y.index="2" color="left" visibility=":olg_l"/>
-										<mesh id="ctg_r" width="2" x.index="0" y.index="2" color="right" visibility=":olg_r"/>
-										<mesh id="ctg_l" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_l"/>
-										<mesh id="ctg_r" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_r"/>
+										<mesh id="ctg" width="0" x.index="0" y.index="1" color="left_in" fcolor="left_in" fcolor.a="0.8" fill="true" visibility=":ilg_l"/>
+										<mesh id="ctg" width="0" x.index="0" y.index="4" color="right_in" fcolor="right_in" fcolor.a="0.8" fill="true" visibility=":ilg_r"/>
+										<mesh id="ctg" width="2" x.index="0" y.index="2" color="left" visibility=":olg_l"/>
+										<mesh id="ctg" width="2" x.index="0" y.index="5" color="right" visibility=":olg_r"/>
+										<mesh id="ctg" width="2" x.index="0" y.index="3" color="bright_blue" visibility=":grg_l"/>
+										<mesh id="ctg" width="2" x.index="0" y.index="6" color="bright_blue" visibility=":grg_r"/>
 
 										<!-- Boundaries -->
 										<marker v="24 db" ox="1" oy="0" color="graph_prim" visibility="false"/>
@@ -1730,7 +2054,71 @@
 											</ui:for>
 										</ui:with>
 									</graph>
-								</group>
+									
+									<!-- Waveform graph -->
+									<graph width.min="312" height.min="192" hexpand="true" hfill="true">
+										<origin hpos="1" vpos="0" visible="false"/>
+				
+										<!-- Gray grid -->
+										<ui:with ox="0" oy="1">
+											<marker v="0.1" color="graph_alt_1"/>
+											<marker v="0.3" color="graph_alt_1"/>
+											<marker v="0.5" color="graph_alt_1"/>
+											<marker v="0.7" color="graph_alt_1"/>
+											<marker v="0.9" color="graph_alt_1"/>
+										</ui:with>
+				
+										<!-- Yellow grid -->
+										<ui:with ox="0" oy="1">
+											<marker v="0.2" color="graph_sec"/>
+											<marker v="0.4" color="graph_sec"/>
+											<marker v="0.6" color="graph_sec"/>
+											<marker v="0.8" color="graph_sec"/>
+										</ui:with>
+										<ui:with ox="1" oy="0" color="graph_sec">
+											<marker v="-0.25" />
+											<marker v="-0.5" />
+											<marker v="-0.75" />
+											<marker v="0.25" />
+											<marker v="0.5" />
+											<marker v="0.75" />
+										</ui:with>
+				
+										<!-- Meshes -->
+										<mesh id="wfg" width="2" x.index="0" y.index="1" color="left" fcolor="left" fcolor.a="0.8" fill="true" visibility=":olg_l"/>
+										<mesh id="wfg" width="2" x.index="0" y.index="2" color="right" fcolor="right" fcolor.a="0.8" fill="true" visibility=":olg_r"/>
+				
+										<ui:with ox="1" oy="0" width="2" color="graph_prim">
+											<marker v="1" />
+											<marker v="0" />
+											<marker v="-1" />
+										</ui:with>
+										<!-- Axis -->
+										<axis min="0" max="1" angle="1.0" log="false" color="graph_prim" visibility="false"/>
+										<axis min="-1.25" max="1.25" angle="0.5" log="false" color="graph_prim" visibility="false"/>
+				
+										<!-- Text -->
+										<ui:with y="-1.25" halign="1" valign="1" color="graph_prim">
+											<text x="0" text="0" halign="-1"/>
+											<text x="0.2" text="0.2"/>
+											<text x="0.4" text="0.4"/>
+											<text x="0.6" text="0.6"/>
+											<text x="0.8" text="0.8"/>
+											<text x="1" text="graph.units.s"/>
+										</ui:with>
+										<ui:with x="1" halign="1" valign="1" color="graph_prim">
+											<text y="-1" text="-1"/>
+											<text y="-0.75" text="-0.75"/>
+											<text y="-0.5" text="-0.5"/>
+											<text y="-0.25" text="-0.25"/>
+											<text y="0" text="0"/>
+											<text y="0.25" text="0.25"/>
+											<text y="0.5" text="0.5"/>
+											<text y="0.75" text="0.75"/>
+											<text y="1.25" text="labels.amplitude" valign="-1"/>
+										</ui:with>
+									</graph>
+								</cgroup>
 							</ui:with>
 						</cell>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/src/doc/manuals/plugins/mb_clipper.php 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/src/doc/manuals/plugins/mb_clipper.php
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/src/doc/manuals/plugins/mb_clipper.php	2025-03-01 12:43:07.036586896 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/src/doc/manuals/plugins/mb_clipper.php	2025-08-26 18:15:55.845885663 +0000
@@ -14,11 +14,11 @@
 	<b>Loudness limiting</b> option allows to control the input loudness, per-band loudness and input loudness at the
 	output clipper.
 	<b>Overdrive protection</b> allows to add short-time compression to the signal to make clipping effect less noticeable.
-	<b>Multiple sigmoid functions</b> allow to select the best sounding clipping funciton.
+	<b>Multiple sigmoid functions</b> allow to select the best sounding clipping function.
 	<b>Input and output loudness measurments</b> allow to control loudness level of the signal in LUFS.
 </p>
 
-<p>The simlified schema of the device is shown on the figure below.</p>
+<p>The simplified schema of the device is shown on the figure below.</p>
 <?php out_image('graph/clipper-scheme', 'Simplified scheme of the audio processing') ?>
 
 <p><b>Controls:</b></p>
@@ -41,7 +41,7 @@
 	</ul>
 	<li><b>Dither</b> - allows to enable dithering noise depending on the bitness of the desired output signal.</li>
 	<li><b>Filters</b> - the button that enables drawing of crossover filter characteristics.</li>
-	<li><b>Output clipper</b> - enables ouput clipper.</li>
+	<li><b>Output clipper</b> - enables output clipper.</li>
 	<li><b>LUFS Limit</b> button enables limiting of LUFS value at the input of the plugin</li>
 	<li><b>LUFS Limit</b> knob allows to set maximum LUFS value of the input signal.</li>
 </ul>
@@ -64,7 +64,7 @@
 	<li><b>Shift</b> - allows to adjust the overall gain of the analysis.</li>
 	<li><b>FFT In</b> - enables FFT curve graph of input signal on the spectrum graph.</li>
 	<li><b>FFT Out</b> - enables FFT curve graph of output signal on the spectrum graph.</li>
-	<li><b>Filters</b> - enables drawing tranfer function of each sidechain filter on the spectrum graph.</li>
+	<li><b>Filters</b> - enables drawing transfer function of each sidechain filter on the spectrum graph.</li>
 	<li><b>Surge</b> - enables surge protection mechanism.</li>
 </ul>
 
@@ -99,6 +99,7 @@
 	<li><b>Mute</b> - mutes the selected band.</li>
 	<li><b>ODP</b> - enabled overdrive protection compressor.</li>
 	<li><b>Clipping</b> - enables clipping function applied to the signal.</li>
+	<li><b>DC Compensate</b> - enables compensation of the DC offset applied at the clipping stage.</li>
 	<li><b>Log Scale</b> - switches clipping function graph representation in linear/logarithmic scale.</li>
 	<li><b>Function</b> - clipping function</li>
 	<li><b>ODP Thresh</b> - the threshold of the overdrive protection compressor.</li>
@@ -106,7 +107,8 @@
 	<li><b>ODP Meter</b> - the amount of gain reduction applied to the signal while compressing it's peaks.</li>
 	<li><b>ODP Link</b> - knob that controls the side-chaining of the current band by the previous one.</li>
 	<li><b>Clip Thresh</b> - the threshold of the clipping function. Signals below the threshold have constant amplification.</li>
-	<li><b>Clip Pumping</b> - additional way to pump the loudness of the band by applying exra amplification and keeping peaks not greater than 0 dB.</li>
+	<li><b>Clip DC offset</b> - the additional DC offset applied to the signal before clipping stage.</li>
+	<li><b>Clip Pumping</b> - additional way to pump the loudness of the band by applying extra amplification and keeping peaks not greater than 0 dB.</li>
 	<li><b>Clip Meter</b> - the amount of gain reduction applied at the clipping stage.</li>
 	<li><b>Resonance</b> - sets up ODP compression time by selecting the dominating frequency in the signal.</li>
 	<?php if ($m == 's') { ?>
@@ -126,13 +128,15 @@
 	<li><b>Active</b> - enables output clipper.</li>
 	<li><b>ODP</b> - enabled overdrive protection compressor.</li>
 	<li><b>Clipping</b> - enables clipping function applied to the signal.</li>
+	<li><b>DC Compensate</b> - enables compensation of the DC offset applied at the clipping stage.</li>
 	<li><b>Log Scale</b> - switches clipping function graph representation in linear/logarithmic scale.</li>
 	<li><b>Function</b> - clipping function</li>
 	<li><b>ODP Thresh</b> - the threshold of the overdrive protection compressor.</li>
 	<li><b>ODP Knee</b> - the knee of the overdrive protection compressor.</li>
 	<li><b>ODP Meter</b> - the amount of gain reduction applied to the signal while compressing it's peaks.</li>
 	<li><b>Clip Thresh</b> - the threshold of the clipping function. Signals below the threshold have constant amplification.</li>
-	<li><b>Clip Pumping</b> - additional way to pump the loudness of the band by applying exra amplification and keeping peaks not greater than 0 dB.</li>
+	<li><b>Clip DC offset</b> - the additional DC offset applied to the signal before clipping stage.</li>
+	<li><b>Clip Pumping</b> - additional way to pump the loudness of the band by applying extra amplification and keeping peaks not greater than 0 dB.</li>
 	<li><b>Clip Meter</b> - the amount of gain reduction applied at the clipping stage.</li>
 	<li><b>Reactivity</b> - sets up the reactivity of the ODP compressor.</li>
 	<?php if ($m == 's') { ?>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/src/main/meta/mb_clipper.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/src/main/meta/mb_clipper.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/src/main/meta/mb_clipper.cpp	2025-03-01 12:43:07.036586896 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/src/main/meta/mb_clipper.cpp	2025-08-26 18:15:55.845885663 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-clipper
  * Created on: 11 ноя 2023 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_MB_CLIPPER_VERSION_MAJOR       1
 #define LSP_PLUGINS_MB_CLIPPER_VERSION_MINOR       0
-#define LSP_PLUGINS_MB_CLIPPER_VERSION_MICRO       8
+#define LSP_PLUGINS_MB_CLIPPER_VERSION_MICRO       10
 
 #define LSP_PLUGINS_MB_CLIPPER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -105,74 +105,87 @@ namespace lsp
             { NULL, NULL }
         };
 
+        static port_item_t clipper_views[] =
+        {
+            { "Combined",           "mb_clipper.view.combined"              },
+            { "Dynamics",           "mb_clipper.view.dynamics"              },
+            { "Waveform",           "mb_clipper.view.waveform"              },
+            { NULL, NULL }
+        };
+
     #define CLIPPER_COMMON \
         BYPASS, \
         IN_GAIN, \
         OUT_GAIN, \
-        SWITCH("lufs_on", "Enable input LUFS limitation", 1.0f), \
-        CONTROL("lufs_th", "Input LUFS limiter threshold", U_LUFS, mb_clipper::LUFS_THRESH), \
+        SWITCH("lufs_on", "Enable input LUFS limitation", "LUFS limit", 1.0f), \
+        CONTROL("lufs_th", "Input LUFS limiter threshold", "LUFS thresh", U_LUFS, mb_clipper::LUFS_THRESH), \
         LUFS_METER("lufs_il", "Input LUFS value", 24.0f), \
         METER_OUT_GAIN("lufs_gr", "Input LUFS gain reduction", GAIN_AMP_0_DB), \
         LUFS_METER("lufs_ol", "Output LUFS value", 24.0f), \
-        CONTROL("thresh", "Clipping threshold", U_DB, mb_clipper::THRESHOLD), \
-        SWITCH("boost", "Boosting mode", 1.0f), \
-        COMBO("mode", "Crossover operating mode", 1, clipper_xover_modes), \
-        COMBO("slope", "Crossover filter slope", 1, clipper_xover_slopes), \
-        LOG_CONTROL("react", "FFT reactivity", U_MSEC, mb_clipper::REACT_TIME), \
-        AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \
-        LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, mb_clipper::ZOOM), \
-        COMBO("hpf_m", "High-pass pre-filter mode", 0, clipper_prefilter_slopes), \
-        LOG_CONTROL("hpf_f", "High-pass pre-filter frequency", U_HZ, mb_clipper::HPF_FREQ), \
-        LOG_CONTROL("xf_1", "Split frequency 1", U_HZ, mb_clipper::SPLIT1), \
-        LOG_CONTROL("ol_1", "Overdrive protection link 1", U_GAIN_AMP, mb_clipper::ODP_LINK), \
-        LOG_CONTROL("xf_2", "Split frequency 2", U_HZ, mb_clipper::SPLIT2), \
-        LOG_CONTROL("ol_2", "Overdrive protection link 2", U_GAIN_AMP, mb_clipper::ODP_LINK), \
-        LOG_CONTROL("xf_3", "Split frequency 3", U_HZ, mb_clipper::SPLIT3), \
-        LOG_CONTROL("ol_3", "Overdrive protection link 3", U_GAIN_AMP, mb_clipper::ODP_LINK), \
-        COMBO("lpf_m", "Low-pass pre-filter mode", 0, clipper_prefilter_slopes), \
-        LOG_CONTROL("lpf_f", "Low-pass pre-filter frequency", U_HZ, mb_clipper::LPF_FREQ), \
-        SWITCH("ebe", "Enable extra band", 0), \
-        SWITCH("oclip", "Enable output clipper", 1), \
-        COMBO("tsel", "Tab selector", 4, clipper_tab_selectors), \
-        SWITCH("flt", "Band filter curves", 1.0f), \
-        COMBO("dither", "Dithering mode", 0, clipper_dither_modes), \
-        SWITCH("clog", "Clipper logarithmic display", 1.0f)
-
-    #define CLIPPER_BAND(id, label, resonance) \
-        SWITCH("bs" id, "Solo band" label, 0.0f), \
-        SWITCH("bm" id, "Mute band" label, 0.0f), \
-        CONTROL("pa" id, "Band preamp gain" label, U_DB, mb_clipper::PREAMP), \
-        SWITCH("lo" id, "Enable input LUFS limitation" label, 1.0f), \
-        CONTROL("lt" id, "Input LUFS limiter threshold" label, U_LUFS, mb_clipper::LUFS_THRESH), \
+        CONTROL("thresh", "Clipping threshold", "Clip thresh", U_DB, mb_clipper::THRESHOLD), \
+        SWITCH("boost", "Boosting mode", "Boost", 1.0f), \
+        COMBO("mode", "Crossover operating mode", "Mode", 1, clipper_xover_modes), \
+        COMBO("slope", "Crossover filter slope", "Slope", 1, clipper_xover_slopes), \
+        LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, mb_clipper::REACT_TIME), \
+        AMP_GAIN("shift", "Shift gain", "Shift", 1.0f, 100.0f), \
+        LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, mb_clipper::ZOOM), \
+        COMBO("hpf_m", "High-pass pre-filter mode", "HPF mode", 0, clipper_prefilter_slopes), \
+        LOG_CONTROL("hpf_f", "High-pass pre-filter frequency", "HPF freq", U_HZ, mb_clipper::HPF_FREQ), \
+        LOG_CONTROL("xf_1", "Split frequency 1", "Split freq 1",U_HZ, mb_clipper::SPLIT1), \
+        LOG_CONTROL("ol_1", "Overdrive protection link 1", "ODP link 1", U_GAIN_AMP, mb_clipper::ODP_LINK), \
+        LOG_CONTROL("xf_2", "Split frequency 2", "Split freq 2", U_HZ, mb_clipper::SPLIT2), \
+        LOG_CONTROL("ol_2", "Overdrive protection link 2", "ODP link 2", U_GAIN_AMP, mb_clipper::ODP_LINK), \
+        LOG_CONTROL("xf_3", "Split frequency 3", "Split freq 3", U_HZ, mb_clipper::SPLIT3), \
+        LOG_CONTROL("ol_3", "Overdrive protection link 3", "ODP link 3", U_GAIN_AMP, mb_clipper::ODP_LINK), \
+        COMBO("lpf_m", "Low-pass pre-filter mode", "LPF mode", 0, clipper_prefilter_slopes), \
+        LOG_CONTROL("lpf_f", "Low-pass pre-filter frequency", "LPF freq",U_HZ, mb_clipper::LPF_FREQ), \
+        SWITCH("ebe", "Enable extra band", "Extra band", 0), \
+        SWITCH("oclip", "Enable output clipper", "Out clipper", 1), \
+        COMBO("tsel", "Tab selector", "Tab selector", 4, clipper_tab_selectors), \
+        SWITCH("flt", "Band filter curves", "Show filters", 1.0f), \
+        COMBO("dither", "Dithering mode", "Dithering", 0, clipper_dither_modes), \
+        SWITCH("clog", "Clipper logarithmic display", "Log display", 1.0f), \
+        COMBO("gview", "Clipper graph view", "Graph view", 0, clipper_views)
+
+    #define CLIPPER_BAND(id, label, alias, resonance) \
+        SWITCH("bs" id, "Solo band" label, "Solo" alias, 0.0f), \
+        SWITCH("bm" id, "Mute band" label, "Mute" alias, 0.0f), \
+        CONTROL("pa" id, "Band preamp gain" label, "Preamp" alias, U_DB, mb_clipper::PREAMP), \
+        SWITCH("lo" id, "Enable input LUFS limitation" label, "LUFS limit" alias, 1.0f), \
+        CONTROL("lt" id, "Input LUFS limiter threshold" label, "LUFS thresh" alias, U_LUFS, mb_clipper::LUFS_THRESH), \
         LUFS_METER("li" id, "Input LUFS value" label, 24.0f), \
         METER_OUT_GAIN("lg" id, "Input LUFS gain reduction" label, GAIN_AMP_0_DB), \
-        SWITCH("op" id, "Overdrive protection" label, 1.0f), \
-        CONTROL("th" id, "Overdrive protection threshold" label, U_DB, mb_clipper::ODP_THRESHOLD), \
-        CONTROL("kn" id, "Overdrive protection knee" label, U_DB, mb_clipper::ODP_KNEE), \
-        LOG_CONTROL("rs" id, "Overdrive protection resonance" label, U_HZ, mb_clipper::resonance), \
+        SWITCH("op" id, "Overdrive protection" label, "ODP on" alias, 1.0f), \
+        CONTROL("th" id, "Overdrive protection threshold" label, "ODP thresh" alias, U_DB, mb_clipper::ODP_THRESHOLD), \
+        CONTROL("kn" id, "Overdrive protection knee" label, "ODP knee" alias, U_DB, mb_clipper::ODP_KNEE), \
+        LOG_CONTROL("rs" id, "Overdrive protection resonance" label, "ODP res" alias, U_HZ, mb_clipper::resonance), \
         MESH("opc" id, "Overdrive protection chart" label, 2, mb_clipper::CURVE_MESH_POINTS), \
-        SWITCH("ce" id, "Clipper enable" label, 1.0f), \
-        COMBO("cf" id, "Clipper sigmoid function" label, 2.0f, sigmoid_functions), \
-        LOG_CONTROL("ct" id, "Clipper sigmoid threshold" label, U_GAIN_AMP, mb_clipper::CLIP_THRESHOLD), \
-        CONTROL("cp" id, "Clipper sigmoid pumping" label, U_DB, mb_clipper::CLIP_PUMPING), \
+        SWITCH("ce" id, "Clipper enable" label, "On" alias, 1.0f), \
+        COMBO("cf" id, "Clipper sigmoid function" label, "Function" alias, 2.0f, sigmoid_functions), \
+        LOG_CONTROL("ct" id, "Clipper sigmoid threshold" label, "Clip thresh" alias, U_GAIN_AMP, mb_clipper::CLIP_THRESHOLD), \
+        CONTROL("dco" id, "Clipper DC offset" label, "DC off" alias, U_PERCENT, mb_clipper::DCOFF), \
+        SWITCH("dcc" id, "Clipper DC compensate" label, "DC comp" alias, 1.0f), \
+        CONTROL("cp" id, "Clipper sigmoid pumping" label, "Pumping" alias, U_DB, mb_clipper::CLIP_PUMPING), \
         MESH("cfc" id, "Clipper sigmoid function chart" label, 4, mb_clipper::CURVE_MESH_POINTS), \
         MESH("bfc" id, "Band frequency chart" label, 2, mb_clipper::FFT_MESH_POINTS + 2), \
-        CONTROL("mk" id, "Band makeup gain" label, U_DB, mb_clipper::MAKEUP)
+        CONTROL("mk" id, "Band makeup gain" label, "Makeup" alias, U_DB, mb_clipper::MAKEUP)
 
     #define OUTPUT_CLIPPER \
-        SWITCH("lo", "Enable output clipper LUFS limitation", 1.0f), \
-        CONTROL("lt", "Output clipper LUFS limiter threshold", U_LUFS, mb_clipper::LUFS_THRESH), \
+        SWITCH("lo", "Enable output clipper LUFS limitation", "Out LUFS limit", 1.0f), \
+        CONTROL("lt", "Output clipper LUFS limiter threshold", "Out LUFS thresh", U_LUFS, mb_clipper::LUFS_THRESH), \
         LUFS_METER("li", "Output clipper LUFS value", 24.0f), \
         METER_OUT_GAIN("lg", "Output clipper LUFS gain reduction", GAIN_AMP_0_DB), \
-        SWITCH("op", "Output overdrive protection", 1.0f), \
-        CONTROL("th", "Output overdrive protection threshold", U_DB, mb_clipper::ODP_THRESHOLD), \
-        CONTROL("kn", "Output overdrive protection knee", U_DB, mb_clipper::ODP_KNEE), \
-        LOG_CONTROL("or", "Output overdrive protection reactivity", U_MSEC, mb_clipper::ODP_REACT), \
+        SWITCH("op", "Output overdrive protection", "Out ODP on", 1.0f), \
+        CONTROL("th", "Output overdrive protection threshold", "Out ODP thresh", U_DB, mb_clipper::ODP_THRESHOLD), \
+        CONTROL("kn", "Output overdrive protection knee", "Out ODP knee", U_DB, mb_clipper::ODP_KNEE), \
+        LOG_CONTROL("or", "Output overdrive protection reactivity", "ODP react out", U_MSEC, mb_clipper::ODP_REACT), \
         MESH("opc", "Output overdrive protection chart", 2, mb_clipper::CURVE_MESH_POINTS), \
-        SWITCH("ce", "Output clipper enable", 1.0f), \
-        COMBO("cf", "Output clipper sigmoid function", 2.0f, sigmoid_functions), \
-        LOG_CONTROL("ct", "Output clipper sigmoid threshold", U_GAIN_AMP, mb_clipper::CLIP_THRESHOLD), \
-        CONTROL("cp", "Output clipper sigmoid pumping", U_DB, mb_clipper::CLIP_PUMPING), \
+        SWITCH("ce", "Output clipper enable", "Out on", 1.0f), \
+        COMBO("cf", "Output clipper sigmoid function", "Out function", 2.0f, sigmoid_functions), \
+        LOG_CONTROL("ct", "Output clipper sigmoid threshold", "Clip thresh out", U_GAIN_AMP, mb_clipper::CLIP_THRESHOLD), \
+        CONTROL("dcoff", "Output clipper DC offset", "Out DC off", U_PERCENT, mb_clipper::DCOFF), \
+        SWITCH("dcomp", "Output clipper DC compensate", "Out DC comp", 1.0f), \
+        CONTROL("cp", "Output clipper sigmoid pumping", "Out pumping", U_DB, mb_clipper::CLIP_PUMPING), \
         MESH("cfc", "Output clipper sigmoid function chart", 4, mb_clipper::CURVE_MESH_POINTS)
 
     #define CLIPPER_METERS(id, label) \
@@ -182,29 +195,44 @@ namespace lsp
         METER_OUT_GAIN("odx" id, "Overdrive protection input meter" label, GAIN_AMP_P_36_DB), \
         METER_OUT_GAIN("ody" id, "Overdrive protection output meter" label, GAIN_AMP_P_36_DB), \
         METER_GAIN_DFL("odr" id, "Overdrive protection reduction level meter" label, GAIN_AMP_P_72_DB, GAIN_AMP_0_DB), \
-        METER_OUT_GAIN("cfx" id, "Clipping function input meter" label, GAIN_AMP_P_36_DB), \
-        METER_OUT_GAIN("cfy" id, "Clipping function output meter" label, GAIN_AMP_P_36_DB), \
-        METER_GAIN_DFL("cfr" id, "Clipping function reduction level meter" label, GAIN_AMP_P_72_DB, GAIN_AMP_0_DB), \
-        MESH("ctg" id, "Clipper time graph" label, 4, mb_clipper::TIME_MESH_POINTS + 4)
-
-    #define CLIPPER_STEREO_BAND(id, label, resonance, link) \
-        CONTROL_DFL("bl" id, "Band stereo link" label, U_PERCENT, mb_clipper::STEREO_LINK, link), \
-        CLIPPER_BAND(id, label, resonance)
+        METER_OUT_GAIN("cfx1" id, "Clipping function input meter 1" label, GAIN_AMP_P_36_DB), \
+        METER_OUT_GAIN("cfy1" id, "Clipping function output meter 1" label, GAIN_AMP_P_36_DB), \
+        METER_OUT_GAIN("cfx2" id, "Clipping function input meter 2" label, GAIN_AMP_P_36_DB), \
+        METER_OUT_GAIN("cfy2" id, "Clipping function output meter 2" label, GAIN_AMP_P_36_DB), \
+        METER_GAIN_DFL("cfr" id, "Clipping function reduction level meter" label, GAIN_AMP_P_72_DB, GAIN_AMP_0_DB)
+
+    #define CLIPPER_METERS_MONO(id, label) \
+        CLIPPER_METERS(id, label)
+
+    #define CLIPPER_METERS_STEREO(id, label) \
+        CLIPPER_METERS(id "l", label " Left"), \
+        CLIPPER_METERS(id "r", label " Right")
+
+    #define CLIPPER_GRAPHS(id, channels, label) \
+        MESH("ctg" id, "Clipper time graph" label, 1 + 3*channels, mb_clipper::TIME_MESH_POINTS + 4), \
+        MESH("wfg" id, "Clipper waveform graph", 1 + channels, mb_clipper::TIME_MESH_POINTS + 4)
+
+    #define CLIPPER_GRAPHS_MONO(id, label)      CLIPPER_GRAPHS(id, 1, label)
+    #define CLIPPER_GRAPHS_STEREO(id, label)    CLIPPER_GRAPHS(id, 2, label)
+
+    #define CLIPPER_STEREO_BAND(id, label, alias, resonance, link) \
+        CONTROL_DFL("bl" id, "Band stereo link" label, "Slink" alias, U_PERCENT, mb_clipper::STEREO_LINK, link), \
+        CLIPPER_BAND(id, label, alias, resonance)
 
     #define OUTPUT_STEREO_CLIPPER \
-        CONTROL_DFL("slink", "Stereo link", U_PERCENT, mb_clipper::STEREO_LINK, 50.0f), \
+        CONTROL_DFL("slink", "Stereo link", "Out slink", U_PERCENT, mb_clipper::STEREO_LINK, 50.0f), \
         OUTPUT_CLIPPER
 
-    #define OSCILLOSCOPE_SWITCHES(id, label) \
-        SWITCH("ilg" id, "Input level graph enable" label, 1.0f), \
-        SWITCH("olg" id, "Output level graph enable" label, 1.0f), \
-        SWITCH("grg" id, "Gain reduction graph enable" label, 1.0f)
+    #define OSCILLOSCOPE_SWITCHES(id, label, alias) \
+        SWITCH("ilg" id, "Input level graph enable" label, "Show In" alias, 1.0f), \
+        SWITCH("olg" id, "Output level graph enable" label, "Show Out" alias, 1.0f), \
+        SWITCH("grg" id, "Gain reduction graph enable" label, "Show Gain" alias, 1.0f)
 
-    #define CLIPPER_ANALYSIS(id, label) \
+    #define CLIPPER_ANALYSIS(id, label, alias) \
         METER_OUT_GAIN("ism" id, "Input signal meter" label, GAIN_AMP_P_36_DB), \
         METER_OUT_GAIN("osm" id, "Output signal meter" label, GAIN_AMP_P_36_DB), \
-        SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-        SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
+        SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+        SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
         MESH("ifg" id, "Input FFT graph" label, 2, mb_clipper::FFT_MESH_POINTS + 2), \
         MESH("ofg" id, "Output FFT graph" label, 2, mb_clipper::FFT_MESH_POINTS), \
         MESH("grc" id, "Crossover gain reduction chart" label, 2, mb_clipper::FFT_MESH_POINTS)
@@ -217,21 +245,27 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             CLIPPER_COMMON,
 
-            CLIPPER_BAND("_1", " Band 1", ODP_REACT1),
-            CLIPPER_BAND("_2", " Band 2", ODP_REACT2),
-            CLIPPER_BAND("_3", " Band 3", ODP_REACT3),
-            CLIPPER_BAND("_4", " Band 4", ODP_REACT4),
+            CLIPPER_BAND("_1", " Band 1", " 1", ODP_REACT1),
+            CLIPPER_BAND("_2", " Band 2", " 2", ODP_REACT2),
+            CLIPPER_BAND("_3", " Band 3", " 3", ODP_REACT3),
+            CLIPPER_BAND("_4", " Band 4", " 4", ODP_REACT4),
             OUTPUT_CLIPPER,
 
-            OSCILLOSCOPE_SWITCHES("", ""),
+            OSCILLOSCOPE_SWITCHES("", "", ""),
 
-            CLIPPER_ANALYSIS("", ""),
+            CLIPPER_ANALYSIS("", "", ""),
 
-            CLIPPER_METERS("_1", " Band 1"),
-            CLIPPER_METERS("_2", " Band 2"),
-            CLIPPER_METERS("_3", " Band 3"),
-            CLIPPER_METERS("_4", " Band 4"),
-            CLIPPER_METERS("", " Output"),
+            CLIPPER_METERS_MONO("_1", " Band 1"),
+            CLIPPER_METERS_MONO("_2", " Band 2"),
+            CLIPPER_METERS_MONO("_3", " Band 3"),
+            CLIPPER_METERS_MONO("_4", " Band 4"),
+            CLIPPER_METERS_MONO("", " Output"),
+
+            CLIPPER_GRAPHS_MONO("_1", "Band 1"),
+            CLIPPER_GRAPHS_MONO("_2", "Band 2"),
+            CLIPPER_GRAPHS_MONO("_3", "Band 3"),
+            CLIPPER_GRAPHS_MONO("_4", "Band 4"),
+            CLIPPER_GRAPHS_MONO("", "Output"),
 
             PORTS_END
         };
@@ -241,28 +275,29 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             CLIPPER_COMMON,
 
-            CLIPPER_STEREO_BAND("_1", " Band 1", ODP_REACT1, 100.0f),
-            CLIPPER_STEREO_BAND("_2", " Band 2", ODP_REACT2, 50.0f),
-            CLIPPER_STEREO_BAND("_3", " Band 3", ODP_REACT3, 25.0f),
-            CLIPPER_STEREO_BAND("_4", " Band 4", ODP_REACT4, 0.0f),
+            CLIPPER_STEREO_BAND("_1", " Band 1", " 1", ODP_REACT1, 100.0f),
+            CLIPPER_STEREO_BAND("_2", " Band 2", " 2", ODP_REACT2, 50.0f),
+            CLIPPER_STEREO_BAND("_3", " Band 3", " 3", ODP_REACT3, 25.0f),
+            CLIPPER_STEREO_BAND("_4", " Band 4", " 4", ODP_REACT4, 0.0f),
             OUTPUT_STEREO_CLIPPER,
 
-            OSCILLOSCOPE_SWITCHES("_l", " Left"),
-            OSCILLOSCOPE_SWITCHES("_r", " Right"),
+            OSCILLOSCOPE_SWITCHES("_l", " Left", " L"),
+            OSCILLOSCOPE_SWITCHES("_r", " Right", " R"),
 
-            CLIPPER_ANALYSIS("_l", " Left"),
-            CLIPPER_ANALYSIS("_r", " Right"),
+            CLIPPER_ANALYSIS("_l", " Left", " L"),
+            CLIPPER_ANALYSIS("_r", " Right", " R"),
 
-            CLIPPER_METERS("_1l", " Band 1 Left"),
-            CLIPPER_METERS("_2l", " Band 2 Left"),
-            CLIPPER_METERS("_3l", " Band 3 Left"),
-            CLIPPER_METERS("_4l", " Band 4 Left"),
-            CLIPPER_METERS("_1r", " Right"),
-            CLIPPER_METERS("_2r", " Right"),
-            CLIPPER_METERS("_3r", " Right"),
-            CLIPPER_METERS("_4r", " Right"),
-            CLIPPER_METERS("_l", " Output Left"),
-            CLIPPER_METERS("_r", " Output Right"),
+            CLIPPER_METERS_STEREO("_1", " Band 1"),
+            CLIPPER_METERS_STEREO("_2", " Band 2"),
+            CLIPPER_METERS_STEREO("_3", " Band 3"),
+            CLIPPER_METERS_STEREO("_4", " Band 4"),
+            CLIPPER_METERS_STEREO("_", " Output"),
+
+            CLIPPER_GRAPHS_STEREO("_1", "Band 1"),
+            CLIPPER_GRAPHS_STEREO("_2", "Band 2"),
+            CLIPPER_GRAPHS_STEREO("_3", "Band 3"),
+            CLIPPER_GRAPHS_STEREO("_4", "Band 4"),
+            CLIPPER_GRAPHS_STEREO("", "Output"),
 
             PORTS_END
         };
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-clipper/src/main/plug/mb_clipper.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/src/main/plug/mb_clipper.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-clipper/src/main/plug/mb_clipper.cpp	2025-03-01 12:43:07.036586896 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-clipper/src/main/plug/mb_clipper.cpp	2025-08-26 18:15:55.845885663 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-clipper
  * Created on: 11 ноя 2023 г.
@@ -31,13 +31,13 @@
 
 #include <private/plugins/mb_clipper.h>
 
-/* The size of temporary buffer for audio processing */
-#define BUFFER_SIZE         0x400U
-
 namespace lsp
 {
     namespace plugins
     {
+        /* The size of temporary buffer for audio processing */
+        static constexpr size_t BUFFER_SIZE     = 0x400;
+
         //---------------------------------------------------------------------
         // Plugin factory
         static const meta::plugin_t *plugins[] =
@@ -116,6 +116,7 @@ namespace lsp
 
                 p->sClip.pFunc          = NULL;
                 p->sClip.fThreshold     = 0.0f;
+                p->sClip.fDCOffset      = 0.0f;
                 p->sClip.fPumping       = 1.0f;
                 p->sClip.fScaling       = 0.0f;
                 p->sClip.fKnee          = 0.0f;
@@ -123,6 +124,8 @@ namespace lsp
                 p->sClip.pOn            = NULL;
                 p->sClip.pFunction      = NULL;
                 p->sClip.pThreshold     = NULL;
+                p->sClip.pDCOffset      = NULL;
+                p->sClip.pDCCompensate  = NULL;
                 p->sClip.pPumping       = NULL;
                 p->sClip.pCurveMesh     = NULL;
 
@@ -148,6 +151,17 @@ namespace lsp
                 p->pFreqChart           = NULL;
             }
 
+            for (size_t i=0; i<meta::mb_clipper::BANDS_MAX; ++i)
+            {
+                graph_t *g              = &vBGraph[i];
+
+                g->pTimeMesh            = NULL;
+                g->pWaveformMesh        = NULL;
+            }
+
+            sGraph.pTimeMesh        = NULL;
+            sGraph.pWaveformMesh    = NULL;
+
             sComp.x0                = 0.0f;
             sComp.x1                = 0.0f;
             sComp.x2                = 0.0f;
@@ -166,6 +180,7 @@ namespace lsp
 
             sClip.pFunc             = NULL;
             sClip.fThreshold        = 0.0f;
+            sClip.fDCOffset         = 0.0f;
             sClip.fPumping          = 1.0f;
             sClip.fScaling          = 0.0f;
             sClip.fKnee             = 0.0f;
@@ -173,6 +188,8 @@ namespace lsp
             sClip.pOn               = NULL;
             sClip.pFunction         = NULL;
             sClip.pThreshold        = NULL;
+            sClip.pDCOffset         = NULL;
+            sClip.pDCCompensate     = NULL;
             sClip.pPumping          = NULL;
             sClip.pCurveMesh        = NULL;
 
@@ -208,6 +225,7 @@ namespace lsp
             vLinSigmoid             = NULL;
             vLogSigmoid             = NULL;
             vTime                   = NULL;
+            vWaveformTime           = NULL;
             pIDisplay               = NULL;
 
             pBypass                 = NULL;
@@ -261,11 +279,13 @@ namespace lsp
                 szof_curve_buffer +     // vLinSigmoid
                 szof_curve_buffer +     // vLogSigmoid
                 szof_time_buffer +      // vTime
+                szof_time_buffer +      // vWaveformTime
                 meta::mb_clipper::BANDS_MAX * (
                     szof_fft_buffer     // vTr
                 ) +
                 nChannels * (
                     szof_buffer +       // vData
+                    szof_buffer +       // vInData
                     szof_buffer +       // vSc
                     szof_fft_buffer +   // vTr
                     szof_buffer +       // vInAnalyze
@@ -339,6 +359,7 @@ namespace lsp
             vLinSigmoid             = advance_ptr_bytes<float>(ptr, szof_curve_buffer);
             vLogSigmoid             = advance_ptr_bytes<float>(ptr, szof_curve_buffer);
             vTime                   = advance_ptr_bytes<float>(ptr, szof_time_buffer);
+            vWaveformTime           = advance_ptr_bytes<float>(ptr, szof_time_buffer);
 
             for (size_t i=0; i < nChannels; ++i)
             {
@@ -364,6 +385,13 @@ namespace lsp
 
                 c->sInGraph.construct();
                 c->sOutGraph.construct();
+                c->sWaveformGraph.construct();
+                c->sRedGraph.construct();
+
+                c->sInGraph.set_method(dspu::MM_ABS_MAXIMUM);
+                c->sOutGraph.set_method(dspu::MM_ABS_MAXIMUM);
+                c->sWaveformGraph.set_method(dspu::MM_PEAK);
+                c->sRedGraph.set_method(dspu::MM_ABS_MINIMUM);
 
                 c->sDither.init();
 
@@ -379,6 +407,13 @@ namespace lsp
                     b->sPostDelay.construct();
                     b->sInGraph.construct();
                     b->sOutGraph.construct();
+                    b->sWaveformGraph.construct();
+                    b->sRedGraph.construct();
+
+                    b->sInGraph.set_method(dspu::MM_ABS_MAXIMUM);
+                    b->sOutGraph.set_method(dspu::MM_ABS_MAXIMUM);
+                    b->sWaveformGraph.set_method(dspu::MM_PEAK);
+                    b->sRedGraph.set_method(dspu::MM_ABS_MINIMUM);
 
                     // Bind handler to crossover
                     c->sIIRXOver.set_handler(j, process_band, this, c);
@@ -391,8 +426,10 @@ namespace lsp
                     b->fOdpOut              = GAIN_AMP_M_INF_DB;
                     b->fOdpRed              = GAIN_AMP_M_INF_DB;
 
-                    b->fClipIn              = GAIN_AMP_M_INF_DB;
-                    b->fClipOut             = GAIN_AMP_M_INF_DB;
+                    b->fClipIn[0]           = GAIN_AMP_M_INF_DB;
+                    b->fClipOut[0]          = GAIN_AMP_M_INF_DB;
+                    b->fClipIn[1]           = GAIN_AMP_M_INF_DB;
+                    b->fClipOut[1]          = GAIN_AMP_M_INF_DB;
                     b->fClipRed             = GAIN_AMP_M_INF_DB;
 
                     b->vInData              = advance_ptr_bytes<float>(ptr, szof_buffer);
@@ -406,11 +443,11 @@ namespace lsp
                     b->pOdpOut              = NULL;
                     b->pOdpRed              = NULL;
 
-                    b->pClipIn              = NULL;
-                    b->pClipOut             = NULL;
+                    b->pClipIn[0]           = NULL;
+                    b->pClipOut[0]          = NULL;
+                    b->pClipIn[1]           = NULL;
+                    b->pClipOut[1]          = NULL;
                     b->pClipRed             = NULL;
-
-                    b->pTimeMesh            = NULL;
                 }
 
                 // Initialize fields
@@ -429,12 +466,15 @@ namespace lsp
                 c->fOdpOut              = GAIN_AMP_M_INF_DB;
                 c->fOdpRed              = GAIN_AMP_M_INF_DB;
 
-                c->fClipIn              = GAIN_AMP_M_INF_DB;
-                c->fClipOut             = GAIN_AMP_M_INF_DB;
+                c->fClipIn[0]           = GAIN_AMP_M_INF_DB;
+                c->fClipOut[0]          = GAIN_AMP_M_INF_DB;
+                c->fClipIn[1]           = GAIN_AMP_M_INF_DB;
+                c->fClipOut[1]          = GAIN_AMP_M_INF_DB;
                 c->fClipRed             = GAIN_AMP_M_INF_DB;
 
                 c->vIn                  = NULL;
                 c->vOut                 = NULL;
+                c->vInData              = advance_ptr_bytes<float>(ptr, szof_buffer);
                 c->vData                = advance_ptr_bytes<float>(ptr, szof_buffer);
                 c->vSc                  = advance_ptr_bytes<float>(ptr, szof_buffer);
                 c->vTr                  = advance_ptr_bytes<float>(ptr, szof_fft_buffer);
@@ -460,11 +500,11 @@ namespace lsp
                 c->pOdpOut              = NULL;
                 c->pOdpRed              = NULL;
 
-                c->pClipIn              = NULL;
-                c->pClipOut             = NULL;
+                c->pClipIn[0]           = NULL;
+                c->pClipOut[0]          = NULL;
+                c->pClipIn[1]           = NULL;
+                c->pClipOut[1]          = NULL;
                 c->pClipRed             = NULL;
-
-                c->pTimeMesh            = NULL;
             }
 
             for (size_t j=0; j<meta::mb_clipper::BANDS_MAX; ++j)
@@ -495,45 +535,46 @@ namespace lsp
 
             // Bind input audio ports
             for (size_t i=0; i<nChannels; ++i)
-                vChannels[i].pDataIn    = trace_port(ports[port_id++]);
+                BIND_PORT(vChannels[i].pDataIn);
 
             // Bind output audio ports
             for (size_t i=0; i<nChannels; ++i)
-                vChannels[i].pDataOut   = trace_port(ports[port_id++]);
+                BIND_PORT(vChannels[i].pDataOut);
 
             // Bind bypass
             lsp_trace("Binding common ports");
-            pBypass             = trace_port(ports[port_id++]);
-            pGainIn             = trace_port(ports[port_id++]);
-            pGainOut            = trace_port(ports[port_id++]);
-            sInLufs.pOn         = trace_port(ports[port_id++]);
-            sInLufs.pThreshold  = trace_port(ports[port_id++]);
-            sInLufs.pIn         = trace_port(ports[port_id++]);
-            sInLufs.pRed        = trace_port(ports[port_id++]);
-            pLufsOut            = trace_port(ports[port_id++]);
-            pThresh             = trace_port(ports[port_id++]);
-            pBoosting           = trace_port(ports[port_id++]);
-            pXOverMode          = trace_port(ports[port_id++]);
-            pXOverSlope         = trace_port(ports[port_id++]);
-            pFftReactivity      = trace_port(ports[port_id++]);
-            pFftShift           = trace_port(ports[port_id++]);
-            pZoom               = trace_port(ports[port_id++]);
-            pHpfSlope           = trace_port(ports[port_id++]);
-            pHpfFreq            = trace_port(ports[port_id++]);
+            BIND_PORT(pBypass);
+            BIND_PORT(pGainIn);
+            BIND_PORT(pGainOut);
+            BIND_PORT(sInLufs.pOn);
+            BIND_PORT(sInLufs.pThreshold);
+            BIND_PORT(sInLufs.pIn);
+            BIND_PORT(sInLufs.pRed);
+            BIND_PORT(pLufsOut);
+            BIND_PORT(pThresh);
+            BIND_PORT(pBoosting);
+            BIND_PORT(pXOverMode);
+            BIND_PORT(pXOverSlope);
+            BIND_PORT(pFftReactivity);
+            BIND_PORT(pFftShift);
+            BIND_PORT(pZoom);
+            BIND_PORT(pHpfSlope);
+            BIND_PORT(pHpfFreq);
             for (size_t i=0; i<meta::mb_clipper::BANDS_MAX-1; ++i)
             {
                 split_t *sp         = &vSplits[i];
-                sp->pFreq           = trace_port(ports[port_id++]);
-                sp->pOdpLink        = trace_port(ports[port_id++]);
+                BIND_PORT(sp->pFreq);
+                BIND_PORT(sp->pOdpLink);
             }
-            pLpfSlope           = trace_port(ports[port_id++]);
-            pLpfFreq            = trace_port(ports[port_id++]);
-            pExtraBandOn        = trace_port(ports[port_id++]);
-            pOutClipperOn       = trace_port(ports[port_id++]);
-            trace_port(ports[port_id++]); // Skip band selector
-            pFilterCurves       = trace_port(ports[port_id++]);
-            pDithering          = trace_port(ports[port_id++]);
-            trace_port(ports[port_id++]); // Skip clipper linear/logarithmic graph view
+            BIND_PORT(pLpfSlope);
+            BIND_PORT(pLpfFreq);
+            BIND_PORT(pExtraBandOn);
+            BIND_PORT(pOutClipperOn);
+            SKIP_PORT("Band selector"); // Skip band selector
+            BIND_PORT(pFilterCurves);
+            BIND_PORT(pDithering);
+            SKIP_PORT("Linear/logarithmic graph view"); // Skip clipper linear/logarithmic graph view
+            SKIP_PORT("Graph view mode");
 
             // Bind processor ports
             lsp_trace("Binding processor ports");
@@ -541,52 +582,58 @@ namespace lsp
             {
                 processor_t *p          = &vProc[j];
 
-                p->pStereoLink          = (nChannels > 1) ? trace_port(ports[port_id++]) : NULL;
-                p->pSolo                = trace_port(ports[port_id++]);
-                p->pMute                = trace_port(ports[port_id++]);
-                p->pPreamp              = trace_port(ports[port_id++]);
-                p->sLufs.pOn            = trace_port(ports[port_id++]);
-                p->sLufs.pThreshold     = trace_port(ports[port_id++]);
-                p->sLufs.pIn            = trace_port(ports[port_id++]);
-                p->sLufs.pRed           = trace_port(ports[port_id++]);
-                p->sOdp.pOn             = trace_port(ports[port_id++]);
-                p->sOdp.pThreshold      = trace_port(ports[port_id++]);
-                p->sOdp.pKnee           = trace_port(ports[port_id++]);
-                p->sOdp.pResonance      = trace_port(ports[port_id++]);
-                p->sOdp.pCurveMesh      = trace_port(ports[port_id++]);
-                p->sClip.pOn            = trace_port(ports[port_id++]);
-                p->sClip.pFunction      = trace_port(ports[port_id++]);
-                p->sClip.pThreshold     = trace_port(ports[port_id++]);
-                p->sClip.pPumping       = trace_port(ports[port_id++]);
-                p->sClip.pCurveMesh     = trace_port(ports[port_id++]);
-                p->pFreqChart           = trace_port(ports[port_id++]);
-                p->pMakeup              = trace_port(ports[port_id++]);
+                if (nChannels > 1)
+                    BIND_PORT(p->pStereoLink);
+                BIND_PORT(p->pSolo);
+                BIND_PORT(p->pMute);
+                BIND_PORT(p->pPreamp);
+                BIND_PORT(p->sLufs.pOn);
+                BIND_PORT(p->sLufs.pThreshold);
+                BIND_PORT(p->sLufs.pIn);
+                BIND_PORT(p->sLufs.pRed);
+                BIND_PORT(p->sOdp.pOn);
+                BIND_PORT(p->sOdp.pThreshold);
+                BIND_PORT(p->sOdp.pKnee);
+                BIND_PORT(p->sOdp.pResonance);
+                BIND_PORT(p->sOdp.pCurveMesh);
+                BIND_PORT(p->sClip.pOn);
+                BIND_PORT(p->sClip.pFunction);
+                BIND_PORT(p->sClip.pThreshold);
+                BIND_PORT(p->sClip.pDCOffset);
+                BIND_PORT(p->sClip.pDCCompensate);
+                BIND_PORT(p->sClip.pPumping);
+                BIND_PORT(p->sClip.pCurveMesh);
+                BIND_PORT(p->pFreqChart);
+                BIND_PORT(p->pMakeup);
             }
 
             // Bind output clipper ports
             lsp_trace("Binding output clipper ports");
-            pStereoLink             = (nChannels > 1) ? trace_port(ports[port_id++]) : NULL;
-            sOutLufs.pOn            = trace_port(ports[port_id++]);
-            sOutLufs.pThreshold     = trace_port(ports[port_id++]);
-            sOutLufs.pIn            = trace_port(ports[port_id++]);
-            sOutLufs.pRed           = trace_port(ports[port_id++]);
-            sOdp.pOn                = trace_port(ports[port_id++]);
-            sOdp.pThreshold         = trace_port(ports[port_id++]);
-            sOdp.pKnee              = trace_port(ports[port_id++]);
-            sOdp.pResonance         = trace_port(ports[port_id++]);
-            sOdp.pCurveMesh         = trace_port(ports[port_id++]);
-            sClip.pOn               = trace_port(ports[port_id++]);
-            sClip.pFunction         = trace_port(ports[port_id++]);
-            sClip.pThreshold        = trace_port(ports[port_id++]);
-            sClip.pPumping          = trace_port(ports[port_id++]);
-            sClip.pCurveMesh        = trace_port(ports[port_id++]);
+            if (nChannels > 1)
+                BIND_PORT(pStereoLink);
+            BIND_PORT(sOutLufs.pOn);
+            BIND_PORT(sOutLufs.pThreshold);
+            BIND_PORT(sOutLufs.pIn);
+            BIND_PORT(sOutLufs.pRed);
+            BIND_PORT(sOdp.pOn);
+            BIND_PORT(sOdp.pThreshold);
+            BIND_PORT(sOdp.pKnee);
+            BIND_PORT(sOdp.pResonance);
+            BIND_PORT(sOdp.pCurveMesh);
+            BIND_PORT(sClip.pOn);
+            BIND_PORT(sClip.pFunction);
+            BIND_PORT(sClip.pThreshold);
+            BIND_PORT(sClip.pDCOffset);
+            BIND_PORT(sClip.pDCCompensate);
+            BIND_PORT(sClip.pPumping);
+            BIND_PORT(sClip.pCurveMesh);
 
             lsp_trace("Skipping graph visibility ports");
             for (size_t i=0; i<nChannels; ++i)
             {
-                trace_port(ports[port_id++]); // Skip input level graph visibility
-                trace_port(ports[port_id++]); // Skip output level graph visibility
-                trace_port(ports[port_id++]); // Skip gain reduction graph visibility
+                SKIP_PORT("Input level graph visibility");          // Skip input level graph visibility
+                SKIP_PORT("Output level graph visibility");         // Skip output level graph visibility
+                SKIP_PORT("Gain reduction level graph visibility"); // Skip gain reduction graph visibility
             }
 
             lsp_trace("Binding analysis ports");
@@ -594,37 +641,36 @@ namespace lsp
             {
                 channel_t *c            = &vChannels[i];
 
-                c->pGainIn              = trace_port(ports[port_id++]);
-                c->pGainOut             = trace_port(ports[port_id++]);
-                c->pFftInSwitch         = trace_port(ports[port_id++]);
-                c->pFftOutSwitch        = trace_port(ports[port_id++]);
-                c->pFftInMesh           = trace_port(ports[port_id++]);
-                c->pFftOutMesh          = trace_port(ports[port_id++]);
-                c->pFreqMesh            = trace_port(ports[port_id++]);
+                BIND_PORT(c->pGainIn);
+                BIND_PORT(c->pGainOut);
+                BIND_PORT(c->pFftInSwitch);
+                BIND_PORT(c->pFftOutSwitch);
+                BIND_PORT(c->pFftInMesh);
+                BIND_PORT(c->pFftOutMesh);
+                BIND_PORT(c->pFreqMesh);
             }
 
             lsp_trace("Binding band metering ports");
-            for (size_t i=0; i<nChannels; ++i)
+            for (size_t i=0; i<meta::mb_clipper::BANDS_MAX; ++i)
             {
-                channel_t *c            = &vChannels[i];
-
-                for (size_t j=0; j<meta::mb_clipper::BANDS_MAX; ++j)
+                for (size_t j=0; j<nChannels; ++j)
                 {
-                    band_t *b               = &c->vBands[j];
-
-                    b->pIn                  = trace_port(ports[port_id++]);
-                    b->pOut                 = trace_port(ports[port_id++]);
-                    b->pRed                 = trace_port(ports[port_id++]);
-
-                    b->pOdpIn               = trace_port(ports[port_id++]);
-                    b->pOdpOut              = trace_port(ports[port_id++]);
-                    b->pOdpRed              = trace_port(ports[port_id++]);
-
-                    b->pClipIn              = trace_port(ports[port_id++]);
-                    b->pClipOut             = trace_port(ports[port_id++]);
-                    b->pClipRed             = trace_port(ports[port_id++]);
+                    channel_t *c            = &vChannels[j];
+                    band_t *b               = &c->vBands[i];
 
-                    b->pTimeMesh            = trace_port(ports[port_id++]);
+                    BIND_PORT(b->pIn);
+                    BIND_PORT(b->pOut);
+                    BIND_PORT(b->pRed);
+
+                    BIND_PORT(b->pOdpIn);
+                    BIND_PORT(b->pOdpOut);
+                    BIND_PORT(b->pOdpRed);
+
+                    BIND_PORT(b->pClipIn[0]);
+                    BIND_PORT(b->pClipOut[0]);
+                    BIND_PORT(b->pClipIn[1]);
+                    BIND_PORT(b->pClipOut[1]);
+                    BIND_PORT(b->pClipRed);
                 }
             }
 
@@ -634,21 +680,32 @@ namespace lsp
             {
                 channel_t *c            = &vChannels[i];
 
-                c->pIn                  = trace_port(ports[port_id++]);
-                c->pOut                 = trace_port(ports[port_id++]);
-                c->pRed                 = trace_port(ports[port_id++]);
-
-                c->pOdpIn               = trace_port(ports[port_id++]);
-                c->pOdpOut              = trace_port(ports[port_id++]);
-                c->pOdpRed              = trace_port(ports[port_id++]);
-
-                c->pClipIn              = trace_port(ports[port_id++]);
-                c->pClipOut             = trace_port(ports[port_id++]);
-                c->pClipRed             = trace_port(ports[port_id++]);
+                BIND_PORT(c->pIn);
+                BIND_PORT(c->pOut);
+                BIND_PORT(c->pRed);
+
+                BIND_PORT(c->pOdpIn);
+                BIND_PORT(c->pOdpOut);
+                BIND_PORT(c->pOdpRed);
+
+                BIND_PORT(c->pClipIn[0]);
+                BIND_PORT(c->pClipOut[0]);
+                BIND_PORT(c->pClipIn[1]);
+                BIND_PORT(c->pClipOut[1]);
+                BIND_PORT(c->pClipRed);
+            }
 
-                c->pTimeMesh            = trace_port(ports[port_id++]);
+            lsp_trace("Binding clipper graphs");
+            for (size_t i=0; i<meta::mb_clipper::BANDS_MAX; ++i)
+            {
+                graph_t *g              = &vBGraph[i];
+                BIND_PORT(g->pTimeMesh);
+                BIND_PORT(g->pWaveformMesh);
             }
 
+            BIND_PORT(sGraph.pTimeMesh);
+            BIND_PORT(sGraph.pWaveformMesh);
+
             // Initialize curve (logarithmic) in range of -72 .. +24 db
             float delta = (meta::mb_clipper::ODP_CURVE_DB_MAX - meta::mb_clipper::ODP_CURVE_DB_MIN) / (meta::mb_clipper::CURVE_MESH_POINTS-1);
             for (size_t i=0; i<meta::mb_clipper::CURVE_MESH_POINTS; ++i)
@@ -665,6 +722,10 @@ namespace lsp
             delta       = meta::mb_clipper::TIME_HISTORY_MAX / (meta::mb_clipper::TIME_MESH_POINTS - 1);
             for (size_t i=0; i<meta::mb_clipper::TIME_MESH_POINTS; ++i)
                 vTime[i]    = meta::mb_clipper::TIME_HISTORY_MAX - i*delta;
+
+            delta       = meta::mb_clipper::WAVEFORM_HISTORY_MAX / (meta::mb_clipper::TIME_MESH_POINTS - 1);
+            for (size_t i=0; i<meta::mb_clipper::TIME_MESH_POINTS; ++i)
+                vWaveformTime[i]    = meta::mb_clipper::WAVEFORM_HISTORY_MAX - i*delta;
         }
 
         void mb_clipper::destroy()
@@ -692,6 +753,8 @@ namespace lsp
                     c->sDither.destroy();
                     c->sInGraph.destroy();
                     c->sOutGraph.destroy();
+                    c->sWaveformGraph.destroy();
+                    c->sRedGraph.destroy();
 
                     for (size_t j=0; j<meta::mb_clipper::BANDS_MAX; ++j)
                     {
@@ -704,6 +767,8 @@ namespace lsp
                         b->sPostDelay.destroy();
                         b->sInGraph.destroy();
                         b->sOutGraph.destroy();
+                        b->sWaveformGraph.destroy();
+                        b->sRedGraph.destroy();
                     }
                 }
                 vChannels   = NULL;
@@ -743,6 +808,8 @@ namespace lsp
             const size_t max_global_delay   = dspu::millis_to_samples(sr, meta::mb_clipper::ODP_REACT1_MAX) * 0.5f;
             const size_t samples_per_dot    = dspu::seconds_to_samples(
                 sr, meta::mb_clipper::TIME_HISTORY_MAX / meta::mb_clipper::TIME_MESH_POINTS);
+            const size_t wf_samples_per_dot = dspu::seconds_to_samples(
+                sr, meta::mb_clipper::WAVEFORM_HISTORY_MAX / meta::mb_clipper::TIME_MESH_POINTS);
 
             sCounter.set_sample_rate(sr, true);
             sInLufs.sMeter.set_sample_rate(sr);
@@ -781,6 +848,8 @@ namespace lsp
                 c->sFFTXOver.set_sample_rate(sr);
                 c->sInGraph.init(meta::mb_clipper::TIME_MESH_POINTS, samples_per_dot);
                 c->sOutGraph.init(meta::mb_clipper::TIME_MESH_POINTS, samples_per_dot);
+                c->sWaveformGraph.init(meta::mb_clipper::TIME_MESH_POINTS, wf_samples_per_dot);
+                c->sRedGraph.init(meta::mb_clipper::TIME_MESH_POINTS, samples_per_dot);
 
                 for (size_t j=0; j<meta::mb_clipper::BANDS_MAX; ++j)
                 {
@@ -794,6 +863,8 @@ namespace lsp
                     b->sPostDelay.init(max_odp_delay);
                     b->sInGraph.init(meta::mb_clipper::TIME_MESH_POINTS, samples_per_dot);
                     b->sOutGraph.init(meta::mb_clipper::TIME_MESH_POINTS, samples_per_dot);
+                    b->sWaveformGraph.init(meta::mb_clipper::TIME_MESH_POINTS, wf_samples_per_dot);
+                    b->sRedGraph.init(meta::mb_clipper::TIME_MESH_POINTS, samples_per_dot);
                 }
             }
 
@@ -859,15 +930,18 @@ namespace lsp
         {
             dspu::sigmoid::function_t func = vSigmoidFunctions[size_t(params->pFunction->value())];
             const float threshold   = lsp_min(params->pThreshold->value(), 0.99f);
+            const float dc_off      = params->pDCOffset->value() * 0.01f;
             const float pumping     = dspu::db_to_gain(params->pPumping->value());
 
             if ((func == params->pFunc) &&
                 (threshold == params->fThreshold) &&
+                (dc_off == params->fDCOffset) &&
                 (pumping == params->fPumping))
                 return false;
 
             params->pFunc           = func;
             params->fThreshold      = threshold;
+            params->fDCOffset       = dc_off;
             params->fPumping        = pumping;
             params->fKnee           = 1.0f - threshold;
             params->fScaling        = 1.0f / params->fKnee;
@@ -1171,6 +1245,7 @@ namespace lsp
                     p->nFlags              |= PF_SYNC_ODP;
                 }
                 p->nFlags               = lsp_setflag(p->nFlags, PF_CLIP_ENABLED, p->sClip.pOn->value() >= 0.5f);
+                p->nFlags               = lsp_setflag(p->nFlags, PF_DC_COMPENSATE, p->sClip.pDCCompensate->value() >= 0.5f);
                 if (update_clip_params(&p->sClip))
                     p->nFlags              |= PF_SYNC_CLIP;
             }
@@ -1184,6 +1259,7 @@ namespace lsp
                 nFlags                 |= GF_SYNC_ODP;
             }
             nFlags                  = lsp_setflag(nFlags, GF_CLIP_ENABLED, sClip.pOn->value() >= 0.5f);
+            nFlags                  = lsp_setflag(nFlags, GF_DC_COMPENSATE, sClip.pDCCompensate->value() >= 0.5f);
             if (update_clip_params(&sClip))
                 nFlags                 |= GF_SYNC_CLIP;
 
@@ -1342,8 +1418,10 @@ namespace lsp
                 c->fOdpOut          = GAIN_AMP_M_INF_DB;
                 c->fOdpRed          = GAIN_AMP_P_72_DB;
 
-                c->fClipIn          = GAIN_AMP_M_INF_DB;
-                c->fClipOut         = GAIN_AMP_M_INF_DB;
+                c->fClipIn[0]       = GAIN_AMP_M_INF_DB;
+                c->fClipOut[0]      = GAIN_AMP_M_INF_DB;
+                c->fClipIn[1]       = GAIN_AMP_M_INF_DB;
+                c->fClipOut[1]      = GAIN_AMP_M_INF_DB;
                 c->fClipRed         = GAIN_AMP_P_72_DB;
 
                 for (size_t j=0; j<meta::mb_clipper::BANDS_MAX; ++j)
@@ -1366,8 +1444,10 @@ namespace lsp
                     b->fOdpOut          = GAIN_AMP_M_INF_DB;
                     b->fOdpRed          = GAIN_AMP_P_72_DB;
 
-                    b->fClipIn          = GAIN_AMP_M_INF_DB;
-                    b->fClipOut         = GAIN_AMP_M_INF_DB;
+                    b->fClipIn[0]       = GAIN_AMP_M_INF_DB;
+                    b->fClipOut[0]      = GAIN_AMP_M_INF_DB;
+                    b->fClipIn[1]       = GAIN_AMP_M_INF_DB;
+                    b->fClipOut[1]      = GAIN_AMP_M_INF_DB;
                     b->fClipRed         = GAIN_AMP_P_72_DB;
                 }
             }
@@ -1489,6 +1569,189 @@ namespace lsp
             }
         }
 
+        void mb_clipper::process_clip_band(band_t *b, processor_t *p, size_t samples)
+        {
+            // Clipping
+            if (!(p->nFlags & PF_CLIP_ENABLED))
+            {
+                b->fClipIn[0]           = GAIN_AMP_M_INF_DB;
+                b->fClipOut[0]          = GAIN_AMP_M_INF_DB;
+                b->fClipIn[1]           = GAIN_AMP_M_INF_DB;
+                b->fClipOut[1]          = GAIN_AMP_M_INF_DB;
+                b->fClipRed             = GAIN_AMP_0_DB;
+                return;
+            }
+
+            // Do clipping
+            const float dc      = p->sClip.fDCOffset;
+            size_t clip_idx[2];
+            float clip_in[2], clip_out[2];
+
+            if (dc != 0.0f)
+            {
+                // Apply DC offset
+                dsp::add_k2(b->vData, dc, samples);
+
+                // Perform clipping
+                dsp::minmax_index(b->vData, samples, &clip_idx[0], &clip_idx[1]);
+                clip_in[0]          = fabsf(b->vData[clip_idx[0]]);
+                clip_in[1]          = fabsf(b->vData[clip_idx[1]]);
+
+                clip_curve(b->vData, b->vData, &p->sClip, samples);
+
+                clip_out[0]         = fabsf(b->vData[clip_idx[0]]);
+                clip_out[1]         = fabsf(b->vData[clip_idx[1]]);
+
+                // Compensate DC offset if needed
+                if (p->nFlags & PF_DC_COMPENSATE)
+                    dsp::sub_k2(b->vData, dc, samples);
+            }
+            else
+            {
+                clip_idx[0]         = dsp::abs_max_index(b->vData, samples);
+                clip_idx[1]         = clip_idx[0];
+                clip_in[0]          = fabsf(b->vData[clip_idx[0]]);
+                clip_in[1]          = clip_in[0];
+
+                clip_curve(b->vData, b->vData, &p->sClip, samples);
+
+                clip_out[0]         = fabsf(b->vData[clip_idx[0]]);
+                clip_out[1]         = clip_out[0];
+            }
+
+            // Measure input and output level
+            if (clip_in[0] > b->fClipIn[0])
+            {
+                b->fClipIn[0]           = clip_in[0];
+                b->fClipOut[0]          = clip_out[0];
+            }
+            if (clip_in[1] > b->fClipIn[1])
+            {
+                b->fClipIn[1]           = clip_in[1];
+                b->fClipOut[1]          = clip_out[1];
+            }
+
+            // Compute gain reduction
+            const size_t imax       = (clip_in[0] >= clip_in[1]) ? 0 : 1;
+            const float clip_red    = (clip_in[imax] >= GAIN_AMP_M_120_DB) ? clip_out[imax] / clip_in[imax] : GAIN_AMP_0_DB;
+            b->fClipRed             = lsp_min(b->fClipRed, clip_red);
+        }
+
+        void mb_clipper::process_clip_channel(channel_t *c, size_t samples)
+        {
+            // Clipping
+            if ((nFlags & (GF_CLIP_ENABLED | GF_OUT_CLIP)) != (GF_CLIP_ENABLED | GF_OUT_CLIP))
+            {
+                c->fClipIn[0]           = GAIN_AMP_M_INF_DB;
+                c->fClipOut[0]          = GAIN_AMP_M_INF_DB;
+                c->fClipIn[1]           = GAIN_AMP_M_INF_DB;
+                c->fClipOut[1]          = GAIN_AMP_M_INF_DB;
+                c->fClipRed             = GAIN_AMP_0_DB;
+                return;
+            }
+
+            // Do clipping
+            const float dc      = sClip.fDCOffset;
+            size_t clip_idx[2];
+            float clip_in[2], clip_out[2];
+
+            if (dc != 0.0f)
+            {
+                // Apply DC offset
+                dsp::add_k2(c->vData, dc, samples);
+
+                // Perform clipping
+                dsp::minmax_index(c->vData, samples, &clip_idx[0], &clip_idx[1]);
+                clip_in[0]          = fabsf(c->vData[clip_idx[0]]);
+                clip_in[1]          = fabsf(c->vData[clip_idx[1]]);
+
+                clip_curve(c->vData, c->vData, &sClip, samples);
+
+                clip_out[0]         = fabsf(c->vData[clip_idx[0]]);
+                clip_out[1]         = fabsf(c->vData[clip_idx[1]]);
+
+                // Compensate DC offset if needed
+                if (nFlags & GF_DC_COMPENSATE)
+                    dsp::sub_k2(c->vData, dc, samples);
+            }
+            else
+            {
+                clip_idx[0]         = dsp::abs_max_index(c->vData, samples);
+                clip_idx[1]         = clip_idx[0];
+                clip_in[0]          = fabsf(c->vData[clip_idx[0]]);
+                clip_in[1]          = clip_in[0];
+
+                clip_curve(c->vData, c->vData, &sClip, samples);
+
+                clip_out[0]         = fabsf(c->vData[clip_idx[0]]);
+                clip_out[1]         = clip_out[0];
+            }
+
+            // Measure input and output level
+            if (clip_in[0] > c->fClipIn[0])
+            {
+                c->fClipIn[0]           = clip_in[0];
+                c->fClipOut[0]          = clip_out[0];
+            }
+            if (clip_in[1] > c->fClipIn[1])
+            {
+                c->fClipIn[1]           = clip_in[1];
+                c->fClipOut[1]          = clip_out[1];
+            }
+
+            // Compute gain reduction
+            const size_t imax       = (clip_in[0] >= clip_in[1]) ? 0 : 1;
+            const float clip_red    = (clip_in[imax] >= GAIN_AMP_M_120_DB) ? clip_out[imax] / clip_in[imax] : GAIN_AMP_0_DB;
+            c->fClipRed             = lsp_min(c->fClipRed, clip_red);
+        }
+
+        void mb_clipper::meter_band(band_t *b, size_t samples)
+        {
+            // Compute reduction buffer
+            for (size_t i=0; i<samples; ++i)
+            {
+                const float ain         = fabsf(b->vInData[i]);
+                vBuffer[i]              = (ain >= GAIN_AMP_M_120_DB) ? fabsf(b->vData[i]) / ain : GAIN_AMP_0_DB;
+            }
+
+            // Update graphs
+            b->sInGraph.process(b->vInData, samples);
+            b->sOutGraph.process(b->vData, samples);
+            b->sWaveformGraph.process(b->vData, samples);
+            b->sRedGraph.process(vBuffer, samples);
+
+            // Update momentary values
+            const float in          = dsp::max(b->vInData, samples);
+            const float out         = dsp::abs_max(b->vData, samples);
+            const float red         = dsp::min(vBuffer, samples);
+
+            b->fIn                  = lsp_max(b->fIn, in);
+            b->fOut                 = lsp_max(b->fOut, out);
+            b->fRed                 = lsp_min(b->fRed, red);
+        }
+
+        void mb_clipper::meter_channel(channel_t *c, size_t samples)
+        {
+            // Compute reduction buffer
+            for (size_t i=0; i<samples; ++i)
+                vBuffer[i]              = (c->vInData[i] >= GAIN_AMP_M_120_DB) ? fabsf(c->vData[i]) / c->vInData[i] : GAIN_AMP_0_DB;
+
+            // Update graphs
+            c->sInGraph.process(c->vInData, samples);
+            c->sOutGraph.process(c->vData, samples);
+            c->sWaveformGraph.process(c->vData, samples);
+            c->sRedGraph.process(vBuffer, samples);
+
+            // Update momentary values
+            const float in          = dsp::max(c->vInData, samples);
+            const float out         = dsp::abs_max(c->vData, samples);
+            const float red         = dsp::min(vBuffer, samples);
+
+            c->fIn                  = lsp_max(c->fIn, in);
+            c->fOut                 = lsp_max(c->fOut, out);
+            c->fRed                 = lsp_min(c->fRed, red);
+        }
+
         void mb_clipper::process_bands(size_t samples)
         {
             if (nChannels > 1)
@@ -1511,14 +1774,6 @@ namespace lsp
                     lb->sInDelay.process(lb->vInData, lb->vData, samples);
                     rb->sInDelay.process(rb->vInData, rb->vData, samples);
 
-                    // Measure signal at the input of the band
-                    const size_t idx_in_l   = dsp::abs_max_index(lb->vInData, samples);
-                    const size_t idx_in_r   = dsp::abs_max_index(rb->vInData, samples);
-                    const float in_l        = fabsf(lb->vInData[idx_in_l]);
-                    const float in_r        = fabsf(rb->vInData[idx_in_r]);
-                    lb->sInGraph.process(lb->vInData, samples);
-                    rb->sInGraph.process(rb->vInData, samples);
-
                     // Measure input LUFS loudness
                     p->sLufs.sMeter.bind(0, NULL, lb->vData);
                     p->sLufs.sMeter.bind(1, NULL, rb->vData);
@@ -1617,59 +1872,13 @@ namespace lsp
                         rb->fOdpRed             = GAIN_AMP_0_DB;
                     }
 
-                    // Clipping
-                    if (p->nFlags & PF_CLIP_ENABLED)
-                    {
-                        // Mesure input
-                        const size_t clip_idx_l = dsp::abs_max_index(lb->vData, samples);
-                        const size_t clip_idx_r = dsp::abs_max_index(rb->vData, samples);
-                        const float clip_in_l   = fabsf(lb->vData[clip_idx_l]);
-                        const float clip_in_r   = fabsf(rb->vData[clip_idx_r]);
-
-                        // Do clipping
-                        clip_curve(lb->vData, lb->vData, &p->sClip, samples);
-                        clip_curve(rb->vData, rb->vData, &p->sClip, samples);
-
-                        // Measure output
-                        const float clip_out_l  = fabsf(lb->vData[clip_idx_l]);
-                        const float clip_out_r  = fabsf(rb->vData[clip_idx_r]);
-                        const float clip_red_l  = (clip_in_l >= GAIN_AMP_M_120_DB) ? clip_out_l / clip_in_l : GAIN_AMP_0_DB;
-                        const float clip_red_r  = (clip_in_r >= GAIN_AMP_M_120_DB) ? clip_out_r / clip_in_r : GAIN_AMP_0_DB;
-
-                        lb->fClipIn             = lsp_max(lb->fClipIn, clip_in_l);
-                        lb->fClipOut            = lsp_max(lb->fClipOut, clip_out_l);
-                        lb->fClipRed            = lsp_min(lb->fClipRed, clip_red_l);
-
-                        rb->fClipIn             = lsp_max(rb->fClipIn, clip_in_r);
-                        rb->fClipOut            = lsp_max(rb->fClipOut, clip_out_r);
-                        rb->fClipRed            = lsp_min(rb->fClipRed, clip_red_r);
-                    }
-                    else
-                    {
-                        lb->fClipIn             = GAIN_AMP_M_INF_DB;
-                        lb->fClipOut            = GAIN_AMP_M_INF_DB;
-                        lb->fClipRed            = GAIN_AMP_0_DB;
-
-                        rb->fClipIn             = GAIN_AMP_M_INF_DB;
-                        rb->fClipOut            = GAIN_AMP_M_INF_DB;
-                        rb->fClipRed            = GAIN_AMP_0_DB;
-                    }
+                    // Apply clipping
+                    process_clip_band(lb, p, samples);
+                    process_clip_band(rb, p, samples);
 
                     // Perform output metering
-                    const float out_l       = fabsf(lb->vData[idx_in_l]) * p->fMakeup;
-                    const float out_r       = fabsf(rb->vData[idx_in_r]) * p->fMakeup;
-                    const float red_l       = (in_l >= GAIN_AMP_M_120_DB) ? out_l / in_l : GAIN_AMP_0_DB;
-                    const float red_r       = (in_r >= GAIN_AMP_M_120_DB) ? out_r / in_r : GAIN_AMP_0_DB;
-                    lb->sOutGraph.process(lb->vData, p->fMakeup, samples);
-                    rb->sOutGraph.process(rb->vData, p->fMakeup, samples);
-
-                    lb->fIn                 = lsp_max(lb->fIn, in_l);
-                    lb->fOut                = lsp_max(lb->fOut, out_l);
-                    lb->fRed                = lsp_min(lb->fRed, red_l);
-
-                    rb->fIn                 = lsp_max(rb->fIn, in_r);
-                    rb->fOut                = lsp_max(rb->fOut, out_r);
-                    rb->fRed                = lsp_min(rb->fRed, red_r);
+                    meter_band(lb, samples);
+                    meter_band(rb, samples);
                 }
             }
             else
@@ -1688,11 +1897,6 @@ namespace lsp
                     // Remember input data for analysis
                     b->sInDelay.process(b->vInData, b->vData, samples);
 
-                    // Measure signal at the input of the band
-                    const size_t idx_in     = dsp::abs_max_index(b->vInData, samples);
-                    const float in          = fabsf(b->vInData[idx_in]);
-                    b->sInGraph.process(b->vInData, samples);
-
                     // Measure input LUFS loudness
                     p->sLufs.sMeter.bind(0, NULL, b->vData);
                     p->sLufs.sMeter.process(vBuffer, samples);
@@ -1752,39 +1956,11 @@ namespace lsp
                         b->fOdpRed              = GAIN_AMP_0_DB;
                     }
 
-                    // Clipping
-                    if (p->nFlags & PF_CLIP_ENABLED)
-                    {
-                        // Mesure input
-                        const size_t clip_idx   = dsp::abs_max_index(b->vData, samples);
-                        const float clip_in     = fabsf(b->vData[clip_idx]);
-
-                        // Do clipping
-                        clip_curve(b->vData, b->vData, &p->sClip, samples);
-
-                        // Measure output
-                        const float clip_out    = fabsf(b->vData[clip_idx]);
-                        const float clip_red    = (clip_in >= GAIN_AMP_M_120_DB) ? clip_out / clip_in : GAIN_AMP_0_DB;
-
-                        b->fClipIn              = lsp_max(b->fClipIn, clip_in);
-                        b->fClipOut             = lsp_max(b->fClipOut, clip_out);
-                        b->fClipRed             = lsp_min(b->fClipRed, clip_red);
-                    }
-                    else
-                    {
-                        b->fClipIn              = GAIN_AMP_M_INF_DB;
-                        b->fClipOut             = GAIN_AMP_M_INF_DB;
-                        b->fClipRed             = GAIN_AMP_0_DB;
-                    }
+                    // Apply clipping
+                    process_clip_band(b, p, samples);
 
                     // Perform output metering
-                    const float out         = fabsf(b->vData[idx_in]) * p->fMakeup;
-                    const float red         = (in >= GAIN_AMP_M_120_DB) ? out / in : GAIN_AMP_0_DB;
-                    b->sOutGraph.process(b->vData, p->fMakeup, samples);
-
-                    b->fIn                  = lsp_max(b->fIn, in);
-                    b->fOut                 = lsp_max(b->fOut, out);
-                    b->fRed                 = lsp_min(b->fRed, red);
+                    meter_band(b, samples);
                 }
             }
         }
@@ -1823,13 +1999,9 @@ namespace lsp
                 l->sScDelay.process(l->vData, l->vData, samples);
                 r->sScDelay.process(r->vData, r->vData, samples);
 
-                // Measure signal at the input of the band
-                const size_t idx_in_l   = dsp::abs_max_index(l->vData, samples);
-                const size_t idx_in_r   = dsp::abs_max_index(r->vData, samples);
-                const float in_l        = fabsf(l->vData[idx_in_l]);
-                const float in_r        = fabsf(r->vData[idx_in_r]);
-                l->sInGraph.process(l->vData, samples);
-                r->sInGraph.process(r->vData, samples);
+                // Remember input data for metering
+                dsp::abs2(l->vInData, l->vData, samples);
+                dsp::abs2(r->vInData, r->vData, samples);
 
                 // Measure input loudness
                 sOutLufs.sMeter.bind(0, NULL, l->vData);
@@ -1894,59 +2066,13 @@ namespace lsp
                     r->fOdpRed              = GAIN_AMP_0_DB;
                 }
 
-                // Clipping
-                if ((nFlags & (GF_CLIP_ENABLED | GF_OUT_CLIP)) == (GF_CLIP_ENABLED | GF_OUT_CLIP))
-                {
-                    // Mesure input
-                    const size_t clip_idx_l = dsp::abs_max_index(l->vData, samples);
-                    const size_t clip_idx_r = dsp::abs_max_index(r->vData, samples);
-                    const float clip_in_l   = fabsf(l->vData[clip_idx_l]);
-                    const float clip_in_r   = fabsf(r->vData[clip_idx_r]);
-
-                    // Do clipping
-                    clip_curve(l->vData, l->vData, &sClip, samples);
-                    clip_curve(r->vData, r->vData, &sClip, samples);
-
-                    // Measure output
-                    const float clip_out_l  = fabsf(l->vData[clip_idx_l]);
-                    const float clip_out_r  = fabsf(r->vData[clip_idx_r]);
-                    const float clip_red_l  = (clip_in_l >= GAIN_AMP_M_120_DB) ? clip_out_l / clip_in_l : GAIN_AMP_0_DB;
-                    const float clip_red_r  = (clip_in_r >= GAIN_AMP_M_120_DB) ? clip_out_r / clip_in_r : GAIN_AMP_0_DB;
-
-                    l->fClipIn              = lsp_max(l->fClipIn, clip_in_l);
-                    l->fClipOut             = lsp_max(l->fClipOut, clip_out_l);
-                    l->fClipRed             = lsp_min(l->fClipRed, clip_red_l);
-
-                    r->fClipIn              = lsp_max(r->fClipIn, clip_in_r);
-                    r->fClipOut             = lsp_max(r->fClipOut, clip_out_r);
-                    r->fClipRed             = lsp_min(r->fClipRed, clip_red_r);
-                }
-                else
-                {
-                    l->fClipIn              = GAIN_AMP_M_INF_DB;
-                    l->fClipOut             = GAIN_AMP_M_INF_DB;
-                    l->fClipRed             = GAIN_AMP_0_DB;
-
-                    r->fClipIn              = GAIN_AMP_M_INF_DB;
-                    r->fClipOut             = GAIN_AMP_M_INF_DB;
-                    r->fClipRed             = GAIN_AMP_0_DB;
-                }
+                // Apply clipping
+                process_clip_channel(l, samples);
+                process_clip_channel(r, samples);
 
                 // Perform output metering
-                const float out_l       = fabsf(l->vData[idx_in_l]);
-                const float out_r       = fabsf(r->vData[idx_in_r]);
-                const float red_l       = (in_l >= GAIN_AMP_M_120_DB) ? out_l / in_l : GAIN_AMP_0_DB;
-                const float red_r       = (in_r >= GAIN_AMP_M_120_DB) ? out_r / in_r : GAIN_AMP_0_DB;
-                l->sOutGraph.process(l->vData, samples);
-                r->sOutGraph.process(r->vData, samples);
-
-                l->fIn                  = lsp_max(l->fIn, in_l);
-                l->fOut                 = lsp_max(l->fOut, out_l);
-                l->fRed                 = lsp_min(l->fRed, red_l);
-
-                r->fIn                  = lsp_max(r->fIn, in_r);
-                r->fOut                 = lsp_max(r->fOut, out_r);
-                r->fRed                 = lsp_min(r->fRed, red_r);
+                meter_channel(l, samples);
+                meter_channel(r, samples);
 
                 // Apply gain boosting compensation
                 if (!(nFlags & GF_BOOSTING))
@@ -1967,10 +2093,8 @@ namespace lsp
                 }
                 c->sScDelay.process(c->vData, c->vData, samples);
 
-                // Measure signal at the input of the band
-                const size_t idx_in     = dsp::abs_max_index(c->vData, samples);
-                const float in          = fabsf(c->vData[idx_in]);
-                c->sInGraph.process(c->vData, samples);
+                // Remember input data for metering
+                dsp::abs2(c->vInData, c->vData, samples);
 
                 // Measure input loudness
                 sOutLufs.sMeter.bind(0, NULL, c->vData);
@@ -2018,39 +2142,11 @@ namespace lsp
                     c->fOdpRed              = GAIN_AMP_0_DB;
                 }
 
-                // Clipping
-                if ((nFlags & (GF_CLIP_ENABLED | GF_OUT_CLIP)) == (GF_CLIP_ENABLED | GF_OUT_CLIP))
-                {
-                    // Mesure input
-                    const size_t clip_idx   = dsp::abs_max_index(c->vData, samples);
-                    const float clip_in     = fabsf(c->vData[clip_idx]);
-
-                    // Do clipping
-                    clip_curve(c->vData, c->vData, &sClip, samples);
-
-                    // Measure output
-                    const float clip_out    = fabsf(c->vData[clip_idx]);
-                    const float clip_red    = (clip_in >= GAIN_AMP_M_120_DB) ? clip_out / clip_in : GAIN_AMP_0_DB;
-
-                    c->fClipIn              = lsp_max(c->fClipIn, clip_in);
-                    c->fClipOut             = lsp_max(c->fClipOut, clip_out);
-                    c->fClipRed             = lsp_min(c->fClipRed, clip_red);
-                }
-                else
-                {
-                    c->fClipIn              = GAIN_AMP_M_INF_DB;
-                    c->fClipOut             = GAIN_AMP_M_INF_DB;
-                    c->fClipRed             = GAIN_AMP_0_DB;
-                }
+                // Apply clipping
+                process_clip_channel(c, samples);
 
                 // Perform output metering
-                const float out         = fabsf(c->vData[idx_in]);
-                const float red         = (in >= GAIN_AMP_M_120_DB) ? out / in : GAIN_AMP_0_DB;
-                c->sOutGraph.process(c->vData, samples);
-
-                c->fIn                  = lsp_max(c->fIn, in);
-                c->fOut                 = lsp_max(c->fOut, out);
-                c->fRed                 = lsp_min(c->fRed, red);
+                meter_channel(c, samples);
 
                 // Apply gain boosting compensation
                 if (!(nFlags & GF_BOOSTING))
@@ -2132,8 +2228,10 @@ namespace lsp
                 c->pOdpOut->set_value(c->fOdpOut);
                 c->pOdpRed->set_value(c->fOdpRed);
 
-                c->pClipIn->set_value(c->fClipIn);
-                c->pClipOut->set_value(c->fClipOut);
+                c->pClipIn[0]->set_value(c->fClipIn[0]);
+                c->pClipOut[0]->set_value(c->fClipOut[0]);
+                c->pClipIn[1]->set_value(c->fClipIn[1]);
+                c->pClipOut[1]->set_value(c->fClipOut[1]);
                 c->pClipRed->set_value(c->fClipRed);
 
                 for (size_t j=0; j<meta::mb_clipper::BANDS_MAX; ++j)
@@ -2156,8 +2254,10 @@ namespace lsp
                     b->pOdpOut->set_value(b->fOdpOut);
                     b->pOdpRed->set_value(b->fOdpRed);
 
-                    b->pClipIn->set_value(b->fClipIn);
-                    b->pClipOut->set_value(b->fClipOut);
+                    b->pClipIn[0]->set_value(b->fClipIn[0]);
+                    b->pClipOut[0]->set_value(b->fClipOut[0]);
+                    b->pClipIn[1]->set_value(b->fClipIn[1]);
+                    b->pClipOut[1]->set_value(b->fClipOut[1]);
                     b->pClipRed->set_value(b->fClipRed);
                 }
             }
@@ -2374,29 +2474,43 @@ namespace lsp
                     else
                         mesh->data(2, 0);
                 }
+            }
+        }
 
-                // Output oscilloscope graphs for output clipper
-                plug::mesh_t *mesh    = c->pTimeMesh->buffer<plug::mesh_t>();
-                if ((mesh != NULL) && (mesh->isEmpty()))
+        void mb_clipper::output_mesh_graphs(size_t samples)
+        {
+            plug::mesh_t *mesh  = NULL;
+
+            // Output oscilloscope graphs for output clipper
+            mesh    = (sGraph.pTimeMesh != NULL) ? sGraph.pTimeMesh->buffer<plug::mesh_t>() : NULL;
+            if ((mesh != NULL) && (mesh->isEmpty()))
+            {
+                if (nFlags & GF_OUT_CLIP)
                 {
-                    if (nFlags & GF_OUT_CLIP)
-                    {
-                        // Fill time values
-                        float *t        = mesh->pvData[0];
-                        float *in       = mesh->pvData[1];
-                        float *out      = mesh->pvData[2];
-                        float *red      = mesh->pvData[3];
+                    size_t index    = 0;
+
+                    // Fill time values
+                    float *t        = mesh->pvData[index++];
+                    dsp::copy(&t[2], vTime, meta::mb_clipper::TIME_MESH_POINTS);
+                    t[0]            = t[2] + meta::mb_clipper::TIME_HISTORY_GAP;
+                    t[1]            = t[0];
+                    t              += meta::mb_clipper::TIME_MESH_POINTS + 2;
+                    t[0]            = t[-1] - meta::mb_clipper::TIME_HISTORY_GAP;
+                    t[1]            = t[0];
+
+                    for (size_t i=0; i<nChannels; ++i)
+                    {
+                        channel_t *c    = &vChannels[i];
+
+                        float *in       = mesh->pvData[index++];
+                        float *out      = mesh->pvData[index++];
+                        float *red      = mesh->pvData[index++];
 
-                        dsp::copy(&t[2], vTime, meta::mb_clipper::TIME_MESH_POINTS);
                         dsp::copy(&in[2], c->sInGraph.data(), meta::mb_clipper::TIME_MESH_POINTS);
                         dsp::copy(&out[2], c->sOutGraph.data(), meta::mb_clipper::TIME_MESH_POINTS);
-
-                        for (size_t k=2; k<meta::mb_clipper::TIME_MESH_POINTS + 2; ++k)
-                            red[k]      = lsp_max(out[k], GAIN_AMP_M_120_DB) / lsp_max(in[k], GAIN_AMP_M_120_DB);
+                        dsp::copy(&red[2], c->sRedGraph.data(), meta::mb_clipper::TIME_MESH_POINTS);
 
                         // Generate extra points
-                        t[0]            = t[2] + meta::mb_clipper::TIME_HISTORY_GAP;
-                        t[1]            = t[0];
                         in[0]           = 0.0f;
                         in[1]           = in[2];
                         out[0]          = out[2];
@@ -2404,55 +2518,104 @@ namespace lsp
                         red[0]          = red[2];
                         red[1]          = red[2];
 
-                        t              += meta::mb_clipper::TIME_MESH_POINTS + 2;
                         in             += meta::mb_clipper::TIME_MESH_POINTS + 2;
                         out            += meta::mb_clipper::TIME_MESH_POINTS + 2;
                         red            += meta::mb_clipper::TIME_MESH_POINTS + 2;
 
-                        t[0]            = t[-1] - meta::mb_clipper::TIME_HISTORY_GAP;
-                        t[1]            = t[0];
                         in[0]           = in[-1];
                         in[1]           = 0.0f;
                         out[0]          = out[-1];
                         out[1]          = out[-1];
                         red[0]          = red[-1];
                         red[1]          = red[-1];
-
-                        // Notify mesh contains data
-                        mesh->data(4, meta::mb_clipper::TIME_MESH_POINTS + 4);
                     }
-                    else
-                        mesh->data(4, 0);
+
+                    // Notify mesh contains data
+                    mesh->data(index, meta::mb_clipper::TIME_MESH_POINTS + 4);
                 }
+                else
+                    mesh->data(1 + 3 * nChannels, 0);
+            }
 
-                // Output oscilloscope graphs for band
-                for (size_t j=0; j<meta::mb_clipper::BANDS_MAX; ++j)
+            // Output waveform graphs for output clipper
+            mesh    = (sGraph.pWaveformMesh != NULL) ? sGraph.pWaveformMesh->buffer<plug::mesh_t>() : NULL;
+            if ((mesh != NULL) && (mesh->isEmpty()))
+            {
+                if (nFlags & GF_OUT_CLIP)
                 {
-                    band_t *b           = &c->vBands[j];
-                    processor_t *p      = &vProc[j];
+                    size_t index    = 0;
 
-                    // Output metering mesh data
-                    plug::mesh_t *mesh    = b->pTimeMesh->buffer<plug::mesh_t>();
-                    if ((mesh != NULL) && (mesh->isEmpty()))
+                    // Fill time values
+                    float *t        = mesh->pvData[index++];
+                    dsp::copy(&t[2], vWaveformTime, meta::mb_clipper::TIME_MESH_POINTS);
+                    t[0]            = t[2] + meta::mb_clipper::TIME_HISTORY_GAP;
+                    t[1]            = t[0];
+                    t              += meta::mb_clipper::TIME_MESH_POINTS + 2;
+                    t[0]            = t[-1] - meta::mb_clipper::TIME_HISTORY_GAP;
+                    t[1]            = t[0];
+
+                    for (size_t i=0; i<nChannels; ++i)
                     {
-                        if (p->nFlags & PF_ENABLED)
+                        channel_t *c    = &vChannels[i];
+
+                        float *osc      = mesh->pvData[index++];
+
+                        dsp::copy(&osc[2], c->sWaveformGraph.data(), meta::mb_clipper::TIME_MESH_POINTS);
+
+                        // Generate extra points
+                        osc[0]          = 0.0f;
+                        osc[1]          = osc[2];
+
+                        osc            += meta::mb_clipper::TIME_MESH_POINTS + 2;
+
+                        osc[0]          = osc[-1];
+                        osc[1]          = 0.0f;
+                    }
+
+                    // Notify mesh contains data
+                    mesh->data(index, meta::mb_clipper::TIME_MESH_POINTS + 4);
+                }
+                else
+                    mesh->data(1 + nChannels, 0);
+            }
+
+            // Output oscilloscope graphs for band
+            for (size_t j=0; j<meta::mb_clipper::BANDS_MAX; ++j)
+            {
+                processor_t *p      = &vProc[j];
+                graph_t *g          = &vBGraph[j];
+
+                // Output metering mesh data
+                plug::mesh_t *mesh    = (g->pTimeMesh != NULL) ? g->pTimeMesh->buffer<plug::mesh_t>() : NULL;
+                if ((mesh != NULL) && (mesh->isEmpty()))
+                {
+                    if (p->nFlags & PF_ENABLED)
+                    {
+                        size_t index    = 0;
+
+                        // Fill time values
+                        float *t        = mesh->pvData[index++];
+                        dsp::copy(&t[2], vTime, meta::mb_clipper::TIME_MESH_POINTS);
+                        t[0]            = t[2] + meta::mb_clipper::TIME_HISTORY_GAP;
+                        t[1]            = t[0];
+                        t              += meta::mb_clipper::TIME_MESH_POINTS + 2;
+                        t[0]            = t[-1] - meta::mb_clipper::TIME_HISTORY_GAP;
+                        t[1]            = t[0];
+
+                        for (size_t i=0; i<nChannels; ++i)
                         {
+                            band_t *b       = &vChannels[i].vBands[j];
+
                             // Fill time values
-                            float *t        = mesh->pvData[0];
-                            float *in       = mesh->pvData[1];
-                            float *out      = mesh->pvData[2];
-                            float *red      = mesh->pvData[3];
+                            float *in       = mesh->pvData[index++];
+                            float *out      = mesh->pvData[index++];
+                            float *red      = mesh->pvData[index++];
 
-                            dsp::copy(&t[2], vTime, meta::mb_clipper::TIME_MESH_POINTS);
                             dsp::copy(&in[2], b->sInGraph.data(), meta::mb_clipper::TIME_MESH_POINTS);
                             dsp::copy(&out[2], b->sOutGraph.data(), meta::mb_clipper::TIME_MESH_POINTS);
-
-                            for (size_t k=2; k<meta::mb_clipper::TIME_MESH_POINTS + 2; ++k)
-                                red[k]      = lsp_max(out[k], GAIN_AMP_M_120_DB) / lsp_max(in[k], GAIN_AMP_M_120_DB);
+                            dsp::copy(&red[2], b->sRedGraph.data(), meta::mb_clipper::TIME_MESH_POINTS);
 
                             // Generate extra points
-                            t[0]            = t[2] + meta::mb_clipper::TIME_HISTORY_GAP;
-                            t[1]            = t[0];
                             in[0]           = 0.0f;
                             in[1]           = in[2];
                             out[0]          = out[2];
@@ -2460,26 +2623,65 @@ namespace lsp
                             red[0]          = red[2];
                             red[1]          = red[2];
 
-                            t              += meta::mb_clipper::TIME_MESH_POINTS + 2;
                             in             += meta::mb_clipper::TIME_MESH_POINTS + 2;
                             out            += meta::mb_clipper::TIME_MESH_POINTS + 2;
                             red            += meta::mb_clipper::TIME_MESH_POINTS + 2;
 
-                            t[0]            = t[-1] - meta::mb_clipper::TIME_HISTORY_GAP;
-                            t[1]            = t[0];
                             in[0]           = in[-1];
                             in[1]           = 0.0f;
                             out[0]          = out[-1];
                             out[1]          = out[-1];
                             red[0]          = red[-1];
                             red[1]          = red[-1];
+                        }
+
+                        // Notify mesh contains data
+                        mesh->data(index, meta::mb_clipper::TIME_MESH_POINTS + 4);
+                    }
+                    else
+                        mesh->data(1 + 3*nChannels, 0);
+                }
+
+                // Output waveform mesh data
+                mesh    = (g->pWaveformMesh != NULL) ? g->pWaveformMesh->buffer<plug::mesh_t>() : NULL;
+                if ((mesh != NULL) && (mesh->isEmpty()))
+                {
+                    if (nFlags & PF_ENABLED)
+                    {
+                        size_t index    = 0;
+
+                        // Fill time values
+                        float *t        = mesh->pvData[index++];
+                        dsp::copy(&t[2], vWaveformTime, meta::mb_clipper::TIME_MESH_POINTS);
+                        t[0]            = t[2] + meta::mb_clipper::TIME_HISTORY_GAP;
+                        t[1]            = t[0];
+                        t              += meta::mb_clipper::TIME_MESH_POINTS + 2;
+                        t[0]            = t[-1] - meta::mb_clipper::TIME_HISTORY_GAP;
+                        t[1]            = t[0];
+
+                        for (size_t i=0; i<nChannels; ++i)
+                        {
+                            band_t *b       = &vChannels[i].vBands[j];
+
+                            float *osc      = mesh->pvData[index++];
 
-                            // Notify mesh contains data
-                            mesh->data(4, meta::mb_clipper::TIME_MESH_POINTS + 4);
+                            dsp::copy(&osc[2], b->sWaveformGraph.data(), meta::mb_clipper::TIME_MESH_POINTS);
+
+                            // Generate extra points
+                            osc[0]          = 0.0f;
+                            osc[1]          = osc[2];
+
+                            osc            += meta::mb_clipper::TIME_MESH_POINTS + 2;
+
+                            osc[0]          = osc[-1];
+                            osc[1]          = 0.0f;
                         }
-                        else
-                            mesh->data(4, 0);
+
+                        // Notify mesh contains data
+                        mesh->data(index, meta::mb_clipper::TIME_MESH_POINTS + 4);
                     }
+                    else
+                        mesh->data(1 + nChannels, 0);
                 }
             }
         }
@@ -2529,6 +2731,7 @@ namespace lsp
 
             output_meters();
             output_mesh_curves(samples);
+            output_mesh_graphs(samples);
 
             // Request for redraw
             if ((pWrapper != NULL) && (sCounter.fired()))
@@ -2668,6 +2871,8 @@ namespace lsp
                 v->write_object("sDither", &c->sDither);
                 v->write_object("sInGraph", &c->sInGraph);
                 v->write_object("sOutGraph", &c->sOutGraph);
+                v->write_object("sWaveformGraph", &c->sWaveformGraph);
+                v->write_object("sRedGraph", &c->sRedGraph);
 
                 v->begin_array("vBands", c->vBands, meta::mb_clipper::BANDS_MAX);
                 for (size_t i=0; i<meta::mb_clipper::BANDS_MAX; ++i)
@@ -2686,12 +2891,13 @@ namespace lsp
                 v->write("fOdpIn", c->fOdpIn);
                 v->write("fOdpOut", c->fOdpOut);
                 v->write("fOdpRed", c->fOdpRed);
-                v->write("fClipIn", c->fClipIn);
-                v->write("fClipOut", c->fClipOut);
+                v->writev("fClipIn", c->fClipIn, 2);
+                v->writev("fClipOut", c->fClipOut, 2);
                 v->write("fClipRed", c->fClipRed);
 
                 v->write("vIn", c->vIn);
                 v->write("vOut", c->vOut);
+                v->write("vInData", c->vInData);
                 v->write("vData", c->vData);
                 v->write("vSc", c->vSc);
                 v->write("vTr", c->vTr);
@@ -2713,10 +2919,9 @@ namespace lsp
                 v->write("pOdpIn", c->pOdpIn);
                 v->write("pOdpOut", c->pOdpOut);
                 v->write("pOdpRed", c->pOdpRed);
-                v->write("pClipIn", c->pClipIn);
-                v->write("pClipOut", c->pClipOut);
+                v->writev("pClipIn", c->pClipIn, 2);
+                v->writev("pClipOut", c->pClipOut, 2);
                 v->write("pClipRed", c->pClipRed);
-                v->write("pTimeMesh", c->pTimeMesh);
             }
             v->end_object();
         }
@@ -2758,7 +2963,8 @@ namespace lsp
                 v->write_object("sPostDelay", &b->sPostDelay);
                 v->write_object("sInGraph", &b->sInGraph);
                 v->write_object("sOutGraph", &b->sOutGraph);
-
+                v->write_object("sRedGraph", &b->sRedGraph);
+                v->write_object("sWaveformGraph", &b->sWaveformGraph);
 
                 v->write("vInData", b->vInData);
                 v->write("vData", b->vData);
@@ -2769,8 +2975,8 @@ namespace lsp
                 v->write("fOdpIn", b->fOdpIn);
                 v->write("fOdpOut", b->fOdpOut);
                 v->write("fOdpRed", b->fOdpRed);
-                v->write("fClipIn", b->fClipIn);
-                v->write("fClipOut", b->fClipOut);
+                v->writev("fClipIn", b->fClipIn, 2);
+                v->writev("fClipOut", b->fClipOut, 2);
                 v->write("fClipRed", b->fClipRed);
 
                 v->write("pIn", b->pIn);
@@ -2779,10 +2985,9 @@ namespace lsp
                 v->write("pOdpIn", b->pOdpIn);
                 v->write("pOdpOut", b->pOdpOut);
                 v->write("pOdpRed", b->pOdpRed);
-                v->write("pClipIn", b->pClipIn);
-                v->write("pClipOut", b->pClipOut);
+                v->writev("pClipIn", b->pClipIn, 2);
+                v->writev("pClipOut", b->pClipOut, 2);
                 v->write("pClipRed", b->pClipRed);
-                v->write("pTimeMesh", b->pTimeMesh);
             }
             v->end_object();
         }
@@ -2824,6 +3029,7 @@ namespace lsp
             {
                 v->write("pFunc", p->pFunc);
                 v->write("fThreshold", p->fThreshold);
+                v->write("fDCOffset", p->fDCOffset);
                 v->write("fPumping", p->fPumping);
                 v->write("fScaling", p->fScaling);
                 v->write("fKnee", p->fKnee);
@@ -2831,6 +3037,8 @@ namespace lsp
                 v->write("pOn", p->pOn);
                 v->write("pFunction", p->pFunction);
                 v->write("pThreshold", p->pThreshold);
+                v->write("pDCOffset", p->pDCOffset);
+                v->write("pDCCompensate", p->pDCCompensate);
                 v->write("pPumping", p->pPumping);
                 v->write("pCurveMesh", p->pCurveMesh);
             }
@@ -2855,6 +3063,19 @@ namespace lsp
             v->end_object();
         }
 
+        void mb_clipper::dump(dspu::IStateDumper *v, const char *name, const graph_t *g)
+        {
+            if (name)
+                v->begin_object(name, g, sizeof(graph_t));
+            else
+                v->begin_object(g, sizeof(graph_t));
+            {
+                v->write("pTimeMesh", g->pTimeMesh);
+                v->write("pWaveformMesh", g->pWaveformMesh);
+            }
+            v->end_object();
+        }
+
         void mb_clipper::dump(dspu::IStateDumper *v) const
         {
             plug::Module::dump(v);
@@ -2879,6 +3100,12 @@ namespace lsp
                 dump(v, &vProc[i]);
             v->end_array();
 
+            v->begin_array("vBGraph", vSplits, meta::mb_clipper::BANDS_MAX);
+            for (size_t i=0; i<meta::mb_clipper::BANDS_MAX; ++i)
+                dump(v, NULL, &vBGraph[i]);
+            v->end_array();
+
+            dump(v, "sGraph", &sGraph);
             dump(v, "sComp", &sComp);
             dump(v, "sOdp", &sOdp);
             dump(v, "sClip", &sClip);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/.github/workflows/build.yml	2025-03-01 12:43:10.312567232 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/.github/workflows/build.yml	2025-08-26 18:16:11.349735193 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/CHANGELOG	2025-03-01 12:43:10.312567232 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/CHANGELOG	2025-08-26 18:16:11.349735193 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.28 ===
+* Added left/right and mid/side linking in the UI.
+* Added audio pre-mixing controls.
+* Updated build scripts and dependencies.
+
+=== 1.0.27 ===
+* Updated build scripts and dependencies.
+
 === 1.0.26 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/dependencies.mk	2025-03-01 12:43:10.312567232 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/dependencies.mk	2025-08-26 18:16:11.349735193 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/include/private/plugins/mb_compressor.h 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/include/private/plugins/mb_compressor.h
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/include/private/plugins/mb_compressor.h	2025-03-01 12:43:10.312567232 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/include/private/plugins/mb_compressor.h	2025-08-26 18:16:11.349735193 +0000
@@ -80,6 +80,32 @@ namespace lsp
                     S_ALL           = S_COMP_CURVE | S_EQ_CURVE | S_BAND_CURVE
                 };
 
+                typedef struct premix_t
+                {
+                    float                   fInToSc;            // Input -> Sidechain mix
+                    float                   fInToLink;          // Input -> Link mix
+                    float                   fLinkToIn;          // Link -> Input mix
+                    float                   fLinkToSc;          // Link -> Sidechain mix
+                    float                   fScToIn;            // Sidechain -> Input mix
+                    float                   fScToLink;          // Sidechain -> Link mix
+
+                    float                  *vIn[2];             // Input buffer
+                    float                  *vOut[2];            // Output buffer
+                    float                  *vSc[2];             // Sidechain buffer
+                    float                  *vLink[2];           // Link buffer
+
+                    float                  *vTmpIn[2];          // Replacement buffer for input
+                    float                  *vTmpLink[2];        // Replacement buffer for link
+                    float                  *vTmpSc[2];          // Replacement buffer for sidechain
+
+                    plug::IPort            *pInToSc;            // Input -> Sidechain mix
+                    plug::IPort            *pInToLink;          // Input -> Link mix
+                    plug::IPort            *pLinkToIn;          // Link -> Input mix
+                    plug::IPort            *pLinkToSc;          // Link -> Sidechain mix
+                    plug::IPort            *pScToIn;            // Sidechain -> Input mix
+                    plug::IPort            *pScToLink;          // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct comp_band_t
                 {
                     dspu::Sidechain         sSC;                // Sidechain module
@@ -212,7 +238,6 @@ namespace lsp
                 uint32_t                nMode;                  // Compressor mode
                 bool                    bSidechain;             // External side chain
                 bool                    bEnvUpdate;             // Envelope filter update
-                bool                    bUseExtSc;              // External sidechain is in use
                 bool                    bUseShmLink;            // Shared memory link is in use
                 xover_mode_t            enXOver;                // Crossover mode
                 bool                    bStereoSplit;           // Stereo split mode
@@ -235,6 +260,8 @@ namespace lsp
                 uint32_t               *vIndexes;               // Analyzer FFT indexes
                 core::IDBuffer         *pIDisplay;              // Inline display buffer
 
+                premix_t                sPremix;                // Premix
+
                 plug::IPort            *pBypass;                // Bypass port
                 plug::IPort            *pMode;                  // Global mode
                 plug::IPort            *pInGain;                // Input gain port
@@ -258,6 +285,8 @@ namespace lsp
             protected:
                 void                do_destroy();
                 void                preprocess_channel_input(size_t count);
+                void                update_premix();
+                void                premix_channel(uint32_t channel, size_t count);
                 uint32_t            decode_sidechain_type(uint32_t sc) const;
                 void                process_input_mono(float *out, const float *in, size_t count);
                 void                process_input_stereo(float *l_out, float *r_out, const float *l_in, const float *r_in, size_t count);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/make/tools.mk	2025-03-01 12:43:10.312567232 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/make/tools.mk	2025-08-26 18:16:11.349735193 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/modules.mk
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/modules.mk	2025-03-01 12:43:10.312567232 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/modules.mk	2025-08-26 18:16:11.349735193 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/project.mk
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/project.mk	2025-03-01 12:43:10.312567232 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/project.mk	2025-08-26 18:16:11.353735154 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Multiband Compressor Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.26
+ARTIFACT_VERSION            = 1.0.28
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-mb-compressor/res/doc/screenshots/mb_compressor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/doc/screenshots/mb_compressor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-compressor/res/doc/screenshots/mb_compressor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/doc/screenshots/mb_compressor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-compressor/res/doc/screenshots/mb_compressor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/doc/screenshots/mb_compressor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-compressor/res/doc/screenshots/mb_compressor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/doc/screenshots/mb_compressor_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-compressor/res/doc/screenshots/sc_mb_compressor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/doc/screenshots/sc_mb_compressor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-compressor/res/doc/screenshots/sc_mb_compressor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/doc/screenshots/sc_mb_compressor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-compressor/res/doc/screenshots/sc_mb_compressor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/doc/screenshots/sc_mb_compressor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-compressor/res/doc/screenshots/sc_mb_compressor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/doc/screenshots/sc_mb_compressor_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/lr.xml
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/lr.xml	2025-03-01 12:43:10.320567185 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/lr.xml	2025-08-26 18:16:11.361735077 +0000
@@ -1,4 +1,30 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'scm'; 'sla'; 'scr'; 'scp'; 'sclc'; 'schc'; 'sclf'; 'schf'; 'sce'; 'scs';
+			'cm'; 'ce'; 'bs'; 'bm'; 'al'; 'at'; 'rrl'; 'rt'; 'ht'; 'cr'; 'kn'; 'bth'; 'bsa'; 'mk'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'cbe'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -244,11 +270,13 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<label text="labels.filters" pad.l="6"/>
 				<hbox spacing="4" pad.h="6">
 					<button id="flt_l" text="labels.chan.L_eft" size="22" ui:inject="Button_left"/>
 					<button id="flt_r" text="labels.chan.R_ight" size="22" ui:inject="Button_right"/>
 				</hbox>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
 				<void hexpand="true"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
@@ -767,5 +795,44 @@
 		</hbox>
 
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/mono.xml
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/mono.xml	2025-03-01 12:43:10.320567185 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/mono.xml	2025-08-26 18:16:11.361735077 +0000
@@ -1,4 +1,6 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -226,6 +228,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
 
 				<void hexpand="true"/>
@@ -670,4 +673,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/ms.xml
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/ms.xml	2025-03-01 12:43:10.320567185 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/ms.xml	2025-08-26 18:16:11.361735077 +0000
@@ -1,4 +1,30 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'scm'; 'sla'; 'scr'; 'scp'; 'sclc'; 'schc'; 'sclf'; 'schf'; 'sce'; 'scs';
+			'cm'; 'ce'; 'bs'; 'bm'; 'al'; 'at'; 'rrl'; 'rt'; 'ht'; 'cr'; 'kn'; 'bth'; 'bsa'; 'mk'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'cbe'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -244,11 +270,13 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<label text="labels.filters" pad.l="6"/>
 				<hbox spacing="4" pad.h="6">
 					<button id="flt_m" text="labels.chan.M_id" size="22" ui:inject="Button_mid"/>
 					<button id="flt_s" text="labels.chan.S_ide" size="22" ui:inject="Button_side"/>
 				</hbox>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
 				<void hexpand="true"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
@@ -766,4 +794,43 @@
 		</hbox>
 
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/stereo.xml	2025-03-01 12:43:10.320567185 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/res/main/ui/dynamics/compressor/multiband/stereo.xml	2025-08-26 18:16:11.361735077 +0000
@@ -1,4 +1,6 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -238,6 +240,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan" pad.l="6"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<button id="ssplit" text="labels.stereo_split" size="22" ui:inject="Button_blue" pad.h="2"/>
@@ -690,4 +693,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/src/doc/manuals/plugins/mb_compressor.php 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/src/doc/manuals/plugins/mb_compressor.php
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/src/doc/manuals/plugins/mb_compressor.php	2025-03-01 12:43:10.320567185 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/src/doc/manuals/plugins/mb_compressor.php	2025-08-26 18:16:11.361735077 +0000
@@ -37,7 +37,7 @@
 	<ul>
 		<li>Unlike classic crossovers which use IIR (Infinite Impulse Response) filters to split signal into multiple bands and shift the phase
 		of the audio signal at band split points, the <b>Linear Phase</b> allows to use FIR (Finite Impulse Response) filters which are deprived of this.
-		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their tranfer function
+		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their transfer function
 		to look like the transfer function of analog filters, without deforming it's magnitude envelope near the nyquist frequency.</li>
 		<li>Unlike design of classic Linkwitz-Riley filters, the design of IIR filters provides shorter transition zone of the filter.</li>
 	</ul>
@@ -89,9 +89,14 @@
 	<li><b>FFT<?= $sm ?> In</b> - enables FFT curve graph of input signal on the spectrum graph.</li>
 	<li><b>FFT<?= $sm ?> Out</b> - enables FFT curve graph of output signal on the spectrum graph.</li>
 	<?php if ($m == 's') { ?>
-	<li><b>Stereo Split</b> - enables independent compression of left and right channels.</li>
+		<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+	<?php } elseif ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
+	<?php } elseif ($m == 'ms') { ?>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } ?>
-	<li><b>Filters<?= $sm ?></b> - enables drawing tranfer function of each sidechain filter on the spectrum graph.</li>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
+	<li><b>Filters<?= $sm ?></b> - enables drawing transfer function of each sidechain filter on the spectrum graph.</li>
 	<li><b>Zoom</b> - zoom fader, allows to adjust zoom on the frequency chart.</li>
 </ul>
 <p><b>'Signal' section:</b></p>
@@ -207,3 +212,17 @@
 	<li><b>Compressor Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
 	<li><b>Compressor Gain</b> - the amount of gain applied to frequency band by the compression curve.</li>
 </ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/src/main/meta/mb_compressor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/src/main/meta/mb_compressor.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/src/main/meta/mb_compressor.cpp	2025-03-01 12:43:10.324567160 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/src/main/meta/mb_compressor.cpp	2025-08-26 18:16:11.361735077 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-compressor
  * Created on: 3 авг. 2021 г.
@@ -26,7 +26,7 @@
 
 #define LSP_PLUGINS_MB_COMPRESSOR_VERSION_MAJOR       1
 #define LSP_PLUGINS_MB_COMPRESSOR_VERSION_MINOR       0
-#define LSP_PLUGINS_MB_COMPRESSOR_VERSION_MICRO       26
+#define LSP_PLUGINS_MB_COMPRESSOR_VERSION_MICRO       28
 
 #define LSP_PLUGINS_MB_COMPRESSOR_VERSION  \
     LSP_MODULE_VERSION( \
@@ -167,49 +167,61 @@ namespace lsp
         #define MB_COMP_SHM_LINK_STEREO \
                 OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
 
+        #define MB_COMP_PREMIX \
+                SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+                AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+                AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+                AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define MB_COMP_SC_PREMIX \
+                MB_COMP_PREMIX, \
+                AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+                AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+                AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
+
         #define MB_COMMON(bands) \
                 BYPASS, \
-                COMBO("mode", "Compressor mode", 1, mb_global_comp_modes), \
-                AMP_GAIN("g_in", "Input gain", mb_compressor_metadata::IN_GAIN_DFL, 10.0f), \
-                AMP_GAIN("g_out", "Output gain", mb_compressor_metadata::OUT_GAIN_DFL, 10.0f), \
-                AMP_GAIN("g_dry", "Dry gain", 0.0f, 10.0f), \
-                AMP_GAIN("g_wet", "Wet gain", 1.0f, 10.0f), \
-                PERCENTS("drywet", "Dry/Wet balance", 100.0f, 0.1f), \
-                LOG_CONTROL("react", "FFT reactivity", U_MSEC, mb_compressor_metadata::REACT_TIME), \
-                AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \
-                LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, mb_compressor_metadata::ZOOM), \
-                COMBO("envb", "Envelope boost", mb_compressor_metadata::FB_DEFAULT, mb_comp_sc_boost), \
-                COMBO("bsel", "Band selection", mb_compressor_metadata::SC_BAND_DFL, bands)
-
-        #define MB_SPLIT(id, label, enable, freq) \
-                SWITCH("cbe" id, "Compression band enable" label, enable), \
-                LOG_CONTROL_DFL("sf" id, "Split frequency" label, U_HZ, mb_compressor_metadata::FREQ, freq)
-
-        #define MB_BAND_COMMON(id, label, x, total, fe, fs) \
-                COMBO("scm" id, "Sidechain mode" label, mb_compressor_metadata::SC_MODE_DFL, mb_comp_sc_modes), \
-                CONTROL("sla" id, "Sidechain lookahead" label, U_MSEC, mb_compressor_metadata::LOOKAHEAD), \
-                LOG_CONTROL("scr" id, "Sidechain reactivity" label, U_MSEC, mb_compressor_metadata::REACTIVITY), \
-                AMP_GAIN100("scp" id, "Sidechain preamp" label, GAIN_AMP_0_DB), \
-                SWITCH("sclc" id, "Sidechain custom lo-cut" label, 0), \
-                SWITCH("schc" id, "Sidechain custom hi-cut" label, 0), \
-                LOG_CONTROL_DFL("sclf" id, "Sidechain lo-cut frequency" label, U_HZ, mb_compressor_metadata::FREQ, fe), \
-                LOG_CONTROL_DFL("schf" id, "Sidechain hi-cut frequency" label, U_HZ, mb_compressor_metadata::FREQ, fs), \
+                COMBO("mode", "Compressor mode", "Mode", 1, mb_global_comp_modes), \
+                AMP_GAIN("g_in", "Input gain", "Input gain", mb_compressor_metadata::IN_GAIN_DFL, 10.0f), \
+                AMP_GAIN("g_out", "Output gain", "Output gain", mb_compressor_metadata::OUT_GAIN_DFL, 10.0f), \
+                AMP_GAIN("g_dry", "Dry gain", "Dry", 0.0f, 10.0f), \
+                AMP_GAIN("g_wet", "Wet gain", "Wet", 1.0f, 10.0f), \
+                PERCENTS("drywet", "Dry/Wet balance", "Dry/Wet", 100.0f, 0.1f), \
+                LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, mb_compressor_metadata::REACT_TIME), \
+                AMP_GAIN("shift", "Shift gain", "Shift", 1.0f, 100.0f), \
+                LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, mb_compressor_metadata::ZOOM), \
+                COMBO("envb", "Envelope boost", "Env boost", mb_compressor_metadata::FB_DEFAULT, mb_comp_sc_boost), \
+                COMBO("bsel", "Band selection", "Band selector", mb_compressor_metadata::SC_BAND_DFL, bands)
+
+        #define MB_SPLIT(id, label, alias, enable, freq) \
+                SWITCH("cbe" id, "Compression band enable" label, "Split on" alias, enable), \
+                LOG_CONTROL_DFL("sf" id, "Split frequency" label, "Split" alias, U_HZ, mb_compressor_metadata::FREQ, freq)
+
+        #define MB_BAND_COMMON(id, label, alias, x, total, fe, fs) \
+                COMBO("scm" id, "Sidechain mode" label, "SC mode" alias, mb_compressor_metadata::SC_MODE_DFL, mb_comp_sc_modes), \
+                CONTROL("sla" id, "Sidechain lookahead" label, "Sc look" alias, U_MSEC, mb_compressor_metadata::LOOKAHEAD), \
+                LOG_CONTROL("scr" id, "Sidechain reactivity" label, "SC react" alias, U_MSEC, mb_compressor_metadata::REACTIVITY), \
+                AMP_GAIN100("scp" id, "Sidechain preamp" label, "SC preamp" alias, GAIN_AMP_0_DB), \
+                SWITCH("sclc" id, "Sidechain custom lo-cut" label, "SC LCF on" alias, 0), \
+                SWITCH("schc" id, "Sidechain custom hi-cut" label, "SC HCF on" alias, 0), \
+                LOG_CONTROL_DFL("sclf" id, "Sidechain lo-cut frequency" label, "SC LCF" alias, U_HZ, mb_compressor_metadata::FREQ, fe), \
+                LOG_CONTROL_DFL("schf" id, "Sidechain hi-cut frequency" label, "SC HCF" alias, U_HZ, mb_compressor_metadata::FREQ, fs), \
                 MESH("bfc" id, "Side-chain band frequency chart" label, 2, mb_compressor_metadata::MESH_POINTS + 4), \
                 \
-                COMBO("cm" id, "Compression mode" label, mb_compressor_metadata::CM_DEFAULT, mb_comp_modes), \
-                SWITCH("ce" id, "Compressor enable" label, 1.0f), \
-                SWITCH("bs" id, "Solo band" label, 0.0f), \
-                SWITCH("bm" id, "Mute band" label, 0.0f), \
-                LOG_CONTROL("al" id, "Attack threshold" label, U_GAIN_AMP, mb_compressor_metadata::ATTACK_LVL), \
-                LOG_CONTROL("at" id, "Attack time" label, U_MSEC, mb_compressor_metadata::ATTACK_TIME), \
-                LOG_CONTROL("rrl" id, "Release threshold" label, U_GAIN_AMP, mb_compressor_metadata::RELEASE_LVL), \
-                LOG_CONTROL("rt" id, "Release time" label, U_MSEC, mb_compressor_metadata::RELEASE_TIME), \
-                CONTROL("ht" id, "Hold time" label, U_MSEC, mb_compressor_metadata::HOLD_TIME), \
-                LOG_CONTROL("cr" id, "Ratio" label, U_NONE, mb_compressor_metadata::RATIO), \
-                LOG_CONTROL("kn" id, "Knee" label, U_GAIN_AMP, mb_compressor_metadata::KNEE), \
-                EXT_LOG_CONTROL("bth" id, "Boost threshold" label, U_GAIN_AMP, mb_compressor_metadata::BTH), \
-                EXT_LOG_CONTROL("bsa" id, "Boost signal amount" label, U_GAIN_AMP, mb_compressor_metadata::BSA), \
-                LOG_CONTROL("mk" id, "Makeup gain" label, U_GAIN_AMP, mb_compressor_metadata::MAKEUP), \
+                COMBO("cm" id, "Compression mode" label, "Mode" alias, mb_compressor_metadata::CM_DEFAULT, mb_comp_modes), \
+                SWITCH("ce" id, "Compressor enable" label, "On" alias, 1.0f), \
+                SWITCH("bs" id, "Solo band" label, "Solo" alias, 0.0f), \
+                SWITCH("bm" id, "Mute band" label, "Mute" alias, 0.0f), \
+                LOG_CONTROL("al" id, "Attack threshold" label, "Att thresh" alias, U_GAIN_AMP, mb_compressor_metadata::ATTACK_LVL), \
+                LOG_CONTROL("at" id, "Attack time" label, "Att time" alias, U_MSEC, mb_compressor_metadata::ATTACK_TIME), \
+                LOG_CONTROL("rrl" id, "Release threshold" label, "Rel thresh" alias, U_GAIN_AMP, mb_compressor_metadata::RELEASE_LVL), \
+                LOG_CONTROL("rt" id, "Release time" label, "Rel time" alias, U_MSEC, mb_compressor_metadata::RELEASE_TIME), \
+                CONTROL("ht" id, "Hold time" label, "Hold time" alias, U_MSEC, mb_compressor_metadata::HOLD_TIME), \
+                LOG_CONTROL("cr" id, "Ratio" label, "Ratio" alias, U_NONE, mb_compressor_metadata::RATIO), \
+                LOG_CONTROL("kn" id, "Knee" label, "Knee" alias, U_GAIN_AMP, mb_compressor_metadata::KNEE), \
+                EXT_LOG_CONTROL("bth" id, "Boost threshold" label, "Boost" alias, U_GAIN_AMP, mb_compressor_metadata::BTH), \
+                EXT_LOG_CONTROL("bsa" id, "Boost signal amount" label, "Boost lvl" alias, U_GAIN_AMP, mb_compressor_metadata::BSA), \
+                LOG_CONTROL("mk" id, "Makeup gain" label, "Makeup" alias, U_GAIN_AMP, mb_compressor_metadata::MAKEUP), \
                 HUE_CTL("hue" id, "Hue " label, float(x) / float(total)), \
                 METER("fre" id, "Frequency range end" label, U_HZ,  mb_compressor_metadata::OUT_FREQ), \
                 MESH("ccg" id, "Compression curve graph" label, 2, mb_compressor_metadata::CURVE_MESH_SIZE), \
@@ -220,49 +232,49 @@ namespace lsp
                 METER_OUT_GAIN("clm" id, "Curve level meter" label, GAIN_AMP_P_36_DB), \
                 METER_OUT_GAIN("rlm" id, "Reduction level meter" label, GAIN_AMP_P_72_DB)
 
-        #define MB_MONO_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_comp_sc_type), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_STEREO_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_comp_sc_type), \
-                COMBO("scs" id, "Sidechain source" label, 0, mb_comp_sc_source), \
-                COMBO("sscs" id, "Split sidechain source" label, 0, mb_comp_sc_split_source), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SPLIT_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_comp_sc_type), \
-                COMBO("scs" id, "Sidechain source" label, dspu::SCS_MIDDLE, mb_comp_sc_source), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_MONO_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_comp_sc_type_sc), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_STEREO_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_comp_sc_type_sc), \
-                COMBO("scs" id, "Sidechain source" label, 0, mb_comp_sc_source), \
-                COMBO("sscs" id, "Split sidechain source" label, 0, mb_comp_sc_split_source), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_SPLIT_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_comp_sc_type_sc), \
-                COMBO("scs" id, "Sidechain source" label, dspu::SCS_MIDDLE, mb_comp_sc_source), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
+        #define MB_MONO_BAND(id, label, alias, x, total, fe, fs) \
+                COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_comp_sc_type), \
+                MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_STEREO_BAND(id, label, alias, x, total, fe, fs) \
+                COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_comp_sc_type), \
+                COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_comp_sc_source), \
+                COMBO("sscs" id, "Split sidechain source" label, "SC split" alias, 0, mb_comp_sc_split_source), \
+                MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SPLIT_BAND(id, label, alias, x, total, fe, fs) \
+                COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_comp_sc_type), \
+                COMBO("scs" id, "Sidechain source" label, "SC source" alias, dspu::SCS_MIDDLE, mb_comp_sc_source), \
+                MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_MONO_BAND(id, label, alias, x, total, fe, fs) \
+                COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_comp_sc_type_sc), \
+                MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_STEREO_BAND(id, label, alias, x, total, fe, fs) \
+                COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_comp_sc_type_sc), \
+                COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_comp_sc_source), \
+                COMBO("sscs" id, "Split sidechain source" label, "SC split" alias, 0, mb_comp_sc_split_source), \
+                MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_SPLIT_BAND(id, label, alias, x, total, fe, fs) \
+                COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_comp_sc_type_sc), \
+                COMBO("scs" id, "Sidechain source" label, "SC source" alias, dspu::SCS_MIDDLE, mb_comp_sc_source), \
+                MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
 
         #define MB_STEREO_CHANNEL \
-                SWITCH("flt", "Band filter curves", 1.0f), \
+                SWITCH("flt", "Band filter curves", "Show filters", 1.0f), \
                 MESH("ag_l", "Compressor amplitude graph Left", 2, mb_compressor_metadata::FFT_MESH_POINTS), \
                 MESH("ag_r", "Compressor amplitude graph Right", 2, mb_compressor_metadata::FFT_MESH_POINTS), \
-                SWITCH("ssplit", "Stereo split", 0.0f)
+                SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f)
 
-        #define MB_CHANNEL(id, label) \
-                SWITCH("flt" id, "Band filter curves" label, 1.0f), \
+        #define MB_CHANNEL(id, label, alias) \
+                SWITCH("flt" id, "Band filter curves" label, "Show flt" alias, 1.0f), \
                 MESH("ag" id, "Compressor amplitude graph " label, 2, mb_compressor_metadata::FFT_MESH_POINTS)
 
-        #define MB_FFT_METERS(id, label) \
-                SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-                SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
+        #define MB_FFT_METERS(id, label, alias) \
+                SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+                SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
                 MESH("ifg" id, "Input FFT graph" label, 2, mb_compressor_metadata::FFT_MESH_POINTS + 2), \
                 MESH("ofg" id, "Output FFT graph" label, 2, mb_compressor_metadata::FFT_MESH_POINTS)
 
@@ -270,6 +282,9 @@ namespace lsp
                 METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
                 METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB)
 
+        #define MB_LINK(id, label, alias) \
+                SWITCH(id, label, alias, 0.0f)
+
 
     /*
      List of frequencies:
@@ -286,27 +301,28 @@ namespace lsp
         {
             PORTS_MONO_PLUGIN,
             MB_COMP_SHM_LINK_MONO,
+            MB_COMP_PREMIX,
             MB_COMMON(mb_comp_sc_bands),
-            MB_CHANNEL("", ""),
-            MB_FFT_METERS("", ""),
+            MB_CHANNEL("", "", ""),
+            MB_FFT_METERS("", "", ""),
             MB_CHANNEL_METERS("", ""),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_MONO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_MONO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_MONO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_MONO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_MONO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_MONO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_MONO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_MONO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_MONO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_MONO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_MONO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_MONO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_MONO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_MONO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_MONO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_MONO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0", " 0"),
             MB_BAND_METERS("_1", " 1"),
@@ -324,29 +340,30 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_COMP_SHM_LINK_STEREO,
+            MB_COMP_PREMIX,
             MB_COMMON(mb_comp_sc_bands),
             MB_STEREO_CHANNEL,
-            MB_FFT_METERS("_l", " Left"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_STEREO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_STEREO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_STEREO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_STEREO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_STEREO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_STEREO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_STEREO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_STEREO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_STEREO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_STEREO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_STEREO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_STEREO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_STEREO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_STEREO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_STEREO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_STEREO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -373,47 +390,49 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_COMP_SHM_LINK_STEREO,
+            MB_COMP_PREMIX,
             MB_COMMON(mb_comp_sc_lr_bands),
-            MB_CHANNEL("_l", " Left"),
-            MB_CHANNEL("_r", " Right"),
-            MB_FFT_METERS("_l", " Left"),
+            MB_LINK("clink", "Left/Right controls link", "L/R link"),
+            MB_CHANNEL("_l", " Left", " L"),
+            MB_CHANNEL("_r", " Right", " R"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1l", " 1 Left", 0.0f, 40.0f),
-            MB_SPLIT("_2l", " 2 Left", 1.0f, 100.0f),
-            MB_SPLIT("_3l", " 3 Left", 0.0f, 252.0f),
-            MB_SPLIT("_4l", " 4 Left", 1.0f, 632.0f),
-            MB_SPLIT("_5l", " 5 Left", 0.0f, 1587.0f),
-            MB_SPLIT("_6l", " 6 Left", 1.0f, 3984.0f),
-            MB_SPLIT("_7l", " 7 Left", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1r", " 1 Right", 0.0f, 40.0f),
-            MB_SPLIT("_2r", " 2 Right", 1.0f, 100.0f),
-            MB_SPLIT("_3r", " 3 Right", 0.0f, 252.0f),
-            MB_SPLIT("_4r", " 4 Right", 1.0f, 632.0f),
-            MB_SPLIT("_5r", " 5 Right", 0.0f, 1587.0f),
-            MB_SPLIT("_6r", " 6 Right", 1.0f, 3984.0f),
-            MB_SPLIT("_7r", " 7 Right", 0.0f, 10000.0f),
-
-            MB_SPLIT_BAND("_0l", " 0 Left", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1l", " 1 Left", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2l", " 2 Left", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3l", " 3 Left", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4l", " 4 Left", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5l", " 5 Left", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6l", " 6 Left", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7l", " 7 Left", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SPLIT_BAND("_0r", " 0 Right", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1r", " 1 Right", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2r", " 2 Right", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3r", " 3 Right", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4r", " 4 Right", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5r", " 5 Right", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6r", " 6 Right", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7r", " 7 Right", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1l", " 1 Left", " 1 L", 0.0f, 40.0f),
+            MB_SPLIT("_2l", " 2 Left", " 2 L", 1.0f, 100.0f),
+            MB_SPLIT("_3l", " 3 Left", " 3 L", 0.0f, 252.0f),
+            MB_SPLIT("_4l", " 4 Left", " 4 L", 1.0f, 632.0f),
+            MB_SPLIT("_5l", " 5 Left", " 5 L", 0.0f, 1587.0f),
+            MB_SPLIT("_6l", " 6 Left", " 6 L", 1.0f, 3984.0f),
+            MB_SPLIT("_7l", " 7 Left", " 7 L", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1r", " 1 Right", " 1 R", 0.0f, 40.0f),
+            MB_SPLIT("_2r", " 2 Right", " 2 R", 1.0f, 100.0f),
+            MB_SPLIT("_3r", " 3 Right", " 3 R", 0.0f, 252.0f),
+            MB_SPLIT("_4r", " 4 Right", " 4 R", 1.0f, 632.0f),
+            MB_SPLIT("_5r", " 5 Right", " 5 R", 0.0f, 1587.0f),
+            MB_SPLIT("_6r", " 6 Right", " 6 R", 1.0f, 3984.0f),
+            MB_SPLIT("_7r", " 7 Right", " 7 R", 0.0f, 10000.0f),
+
+            MB_SPLIT_BAND("_0l", " 0 Left", " 0 L", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1l", " 1 Left", " 1 L", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2l", " 2 Left", " 2 L", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3l", " 3 Left", " 3 L", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4l", " 4 Left", " 4 L", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5l", " 5 Left", " 5 L", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6l", " 6 Left", " 6 L", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7l", " 7 Left", " 7 L", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SPLIT_BAND("_0r", " 0 Right", " 0 R", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1r", " 1 Right", " 1 R", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2r", " 2 Right", " 2 R", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3r", " 3 Right", " 3 R", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4r", " 4 Right", " 4 R", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5r", " 5 Right", " 5 R", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6r", " 6 Right", " 6 R", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7r", " 7 Right", " 7 R", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -440,47 +459,49 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_COMP_SHM_LINK_STEREO,
+            MB_COMP_PREMIX,
             MB_COMMON(mb_comp_sc_ms_bands),
-            MB_CHANNEL("_m", " Mid"),
-            MB_CHANNEL("_s", " Side"),
-            MB_FFT_METERS("_m", " Mid"),
+            MB_LINK("clink", "Mid/Side controls link", "M/S link"),
+            MB_CHANNEL("_m", " Mid", " M"),
+            MB_CHANNEL("_s", " Side", " S"),
+            MB_FFT_METERS("_m", " Mid", " M"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_s", " Side"),
+            MB_FFT_METERS("_s", " Side", " S"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1m", " 1 Mid", 0.0f, 40.0f),
-            MB_SPLIT("_2m", " 2 Mid", 1.0f, 100.0f),
-            MB_SPLIT("_3m", " 3 Mid", 0.0f, 252.0f),
-            MB_SPLIT("_4m", " 4 Mid", 1.0f, 632.0f),
-            MB_SPLIT("_5m", " 5 Mid", 0.0f, 1587.0f),
-            MB_SPLIT("_6m", " 6 Mid", 1.0f, 3984.0f),
-            MB_SPLIT("_7m", " 7 Mid", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1s", " 1 Side", 0.0f, 40.0f),
-            MB_SPLIT("_2s", " 2 Side", 1.0f, 100.0f),
-            MB_SPLIT("_3s", " 3 Side", 0.0f, 252.0f),
-            MB_SPLIT("_4s", " 4 Side", 1.0f, 632.0f),
-            MB_SPLIT("_5s", " 5 Side", 0.0f, 1587.0f),
-            MB_SPLIT("_6s", " 6 Side", 1.0f, 3984.0f),
-            MB_SPLIT("_7s", " 7 Side", 0.0f, 10000.0f),
-
-            MB_SPLIT_BAND("_0m", " 0 Mid", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1m", " 1 Mid", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2m", " 2 Mid", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3m", " 3 Mid", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4m", " 4 Mid", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5m", " 5 Mid", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6m", " 6 Mid", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7m", " 7 Mid", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SPLIT_BAND("_0s", " 0 Side", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1s", " 1 Side", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2s", " 2 Side", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3s", " 3 Side", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4s", " 4 Side", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5s", " 5 Side", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6s", " 6 Side", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7s", " 7 Side", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1m", " 1 Mid", " 1 M", 0.0f, 40.0f),
+            MB_SPLIT("_2m", " 2 Mid", " 2 M", 1.0f, 100.0f),
+            MB_SPLIT("_3m", " 3 Mid", " 3 M", 0.0f, 252.0f),
+            MB_SPLIT("_4m", " 4 Mid", " 4 M", 1.0f, 632.0f),
+            MB_SPLIT("_5m", " 5 Mid", " 5 M", 0.0f, 1587.0f),
+            MB_SPLIT("_6m", " 6 Mid", " 6 M", 1.0f, 3984.0f),
+            MB_SPLIT("_7m", " 7 Mid", " 7 M", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1s", " 1 Side", " 1 S", 0.0f, 40.0f),
+            MB_SPLIT("_2s", " 2 Side", " 2 S", 1.0f, 100.0f),
+            MB_SPLIT("_3s", " 3 Side", " 3 S", 0.0f, 252.0f),
+            MB_SPLIT("_4s", " 4 Side", " 4 S", 1.0f, 632.0f),
+            MB_SPLIT("_5s", " 5 Side", " 5 S", 0.0f, 1587.0f),
+            MB_SPLIT("_6s", " 6 Side", " 6 S", 1.0f, 3984.0f),
+            MB_SPLIT("_7s", " 7 Side", " 7 S", 0.0f, 10000.0f),
+
+            MB_SPLIT_BAND("_0m", " 0 Mid", " 0 M", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1m", " 1 Mid", " 1 M", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2m", " 2 Mid", " 2 M", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3m", " 3 Mid", " 3 M", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4m", " 4 Mid", " 4 M", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5m", " 5 Mid", " 5 M", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6m", " 6 Mid", " 6 M", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7m", " 7 Mid", " 7 M", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SPLIT_BAND("_0s", " 0 Side", " 0 S", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1s", " 1 Side", " 1 S", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2s", " 2 Side", " 2 S", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3s", " 3 Side", " 3 S", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4s", " 4 Side", " 4 S", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5s", " 5 Side", " 5 S", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6s", " 6 Side", " 6 S", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7s", " 7 Side", " 7 S", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0m", " 0 Mid"),
             MB_BAND_METERS("_1m", " 1 Mid"),
@@ -508,27 +529,28 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             MB_COMP_SHM_LINK_MONO,
+            MB_COMP_SC_PREMIX,
             MB_COMMON(mb_comp_sc_bands),
-            MB_CHANNEL("", ""),
-            MB_FFT_METERS("", ""),
+            MB_CHANNEL("", "", ""),
+            MB_FFT_METERS("", "", ""),
             MB_CHANNEL_METERS("", ""),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_SC_MONO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_SC_MONO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_SC_MONO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_SC_MONO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_SC_MONO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_SC_MONO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_MONO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_MONO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_SC_MONO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_SC_MONO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_SC_MONO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_SC_MONO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_SC_MONO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_SC_MONO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_MONO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_MONO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0", " 0"),
             MB_BAND_METERS("_1", " 1"),
@@ -547,29 +569,30 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_COMP_SHM_LINK_STEREO,
+            MB_COMP_SC_PREMIX,
             MB_COMMON(mb_comp_sc_bands),
             MB_STEREO_CHANNEL,
-            MB_FFT_METERS("_l", " Left"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_SC_STEREO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_SC_STEREO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_SC_STEREO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_SC_STEREO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_SC_STEREO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_SC_STEREO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_STEREO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_STEREO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_SC_STEREO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_SC_STEREO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_SC_STEREO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_SC_STEREO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_SC_STEREO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_SC_STEREO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_STEREO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_STEREO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -597,47 +620,49 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_COMP_SHM_LINK_STEREO,
+            MB_COMP_SC_PREMIX,
             MB_COMMON(mb_comp_sc_lr_bands),
-            MB_CHANNEL("_l", " Left"),
-            MB_CHANNEL("_r", " Right"),
-            MB_FFT_METERS("_l", " Left"),
+            MB_LINK("clink", "Left/Right controls link", "L/R link"),
+            MB_CHANNEL("_l", " Left", " L"),
+            MB_CHANNEL("_r", " Right", " R"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1l", " 1 Left", 0.0f, 40.0f),
-            MB_SPLIT("_2l", " 2 Left", 1.0f, 100.0f),
-            MB_SPLIT("_3l", " 3 Left", 0.0f, 252.0f),
-            MB_SPLIT("_4l", " 4 Left", 1.0f, 632.0f),
-            MB_SPLIT("_5l", " 5 Left", 0.0f, 1587.0f),
-            MB_SPLIT("_6l", " 6 Left", 1.0f, 3984.0f),
-            MB_SPLIT("_7l", " 7 Left", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1r", " 1 Right", 0.0f, 40.0f),
-            MB_SPLIT("_2r", " 2 Right", 1.0f, 100.0f),
-            MB_SPLIT("_3r", " 3 Right", 0.0f, 252.0f),
-            MB_SPLIT("_4r", " 4 Right", 1.0f, 632.0f),
-            MB_SPLIT("_5r", " 5 Right", 0.0f, 1587.0f),
-            MB_SPLIT("_6r", " 6 Right", 1.0f, 3984.0f),
-            MB_SPLIT("_7r", " 7 Right", 0.0f, 10000.0f),
-
-            MB_SC_SPLIT_BAND("_0l", " 0 Left", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1l", " 1 Left", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2l", " 2 Left", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3l", " 3 Left", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4l", " 4 Left", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5l", " 5 Left", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6l", " 6 Left", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7l", " 7 Left", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SC_SPLIT_BAND("_0r", " 0 Right", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1r", " 1 Right", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2r", " 2 Right", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3r", " 3 Right", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4r", " 4 Right", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5r", " 5 Right", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6r", " 6 Right", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7r", " 7 Right", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1l", " 1 Left", " 1 L", 0.0f, 40.0f),
+            MB_SPLIT("_2l", " 2 Left", " 2 L", 1.0f, 100.0f),
+            MB_SPLIT("_3l", " 3 Left", " 3 L", 0.0f, 252.0f),
+            MB_SPLIT("_4l", " 4 Left", " 4 L", 1.0f, 632.0f),
+            MB_SPLIT("_5l", " 5 Left", " 5 L", 0.0f, 1587.0f),
+            MB_SPLIT("_6l", " 6 Left", " 6 L", 1.0f, 3984.0f),
+            MB_SPLIT("_7l", " 7 Left", " 7 L", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1r", " 1 Right", " 1 R", 0.0f, 40.0f),
+            MB_SPLIT("_2r", " 2 Right", " 2 R", 1.0f, 100.0f),
+            MB_SPLIT("_3r", " 3 Right", " 3 R", 0.0f, 252.0f),
+            MB_SPLIT("_4r", " 4 Right", " 4 R", 1.0f, 632.0f),
+            MB_SPLIT("_5r", " 5 Right", " 5 R", 0.0f, 1587.0f),
+            MB_SPLIT("_6r", " 6 Right", " 6 R", 1.0f, 3984.0f),
+            MB_SPLIT("_7r", " 7 Right", " 7 R", 0.0f, 10000.0f),
+
+            MB_SC_SPLIT_BAND("_0l", " 0 Left", " 0 L", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1l", " 1 Left", " 1 L", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2l", " 2 Left", " 2 L", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3l", " 3 Left", " 3 L", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4l", " 4 Left", " 4 L", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5l", " 5 Left", " 5 L", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6l", " 6 Left", " 6 L", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7l", " 7 Left", " 7 L", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SC_SPLIT_BAND("_0r", " 0 Right", " 0 R", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1r", " 1 Right", " 1 R", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2r", " 2 Right", " 2 R", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3r", " 3 Right", " 3 R", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4r", " 4 Right", " 4 R", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5r", " 5 Right", " 5 R", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6r", " 6 Right", " 6 R", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7r", " 7 Right", " 7 R", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -665,47 +690,49 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_COMP_SHM_LINK_STEREO,
+            MB_COMP_SC_PREMIX,
             MB_COMMON(mb_comp_sc_ms_bands),
-            MB_CHANNEL("_m", " Mid"),
-            MB_CHANNEL("_s", " Side"),
-            MB_FFT_METERS("_m", " Mid"),
+            MB_LINK("clink", "Mid/Side controls link", "M/S link"),
+            MB_CHANNEL("_m", " Mid", " M"),
+            MB_CHANNEL("_s", " Side", " S"),
+            MB_FFT_METERS("_m", " Mid", " M"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_s", " Side"),
+            MB_FFT_METERS("_s", " Side", " S"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1m", " 1 Mid", 0.0f, 40.0f),
-            MB_SPLIT("_2m", " 2 Mid", 1.0f, 100.0f),
-            MB_SPLIT("_3m", " 3 Mid", 0.0f, 252.0f),
-            MB_SPLIT("_4m", " 4 Mid", 1.0f, 632.0f),
-            MB_SPLIT("_5m", " 5 Mid", 0.0f, 1587.0f),
-            MB_SPLIT("_6m", " 6 Mid", 1.0f, 3984.0f),
-            MB_SPLIT("_7m", " 7 Mid", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1s", " 1 Side", 0.0f, 40.0f),
-            MB_SPLIT("_2s", " 2 Side", 1.0f, 100.0f),
-            MB_SPLIT("_3s", " 3 Side", 0.0f, 252.0f),
-            MB_SPLIT("_4s", " 4 Side", 1.0f, 632.0f),
-            MB_SPLIT("_5s", " 5 Side", 0.0f, 1587.0f),
-            MB_SPLIT("_6s", " 6 Side", 1.0f, 3984.0f),
-            MB_SPLIT("_7s", " 7 Side", 0.0f, 10000.0f),
-
-            MB_SC_SPLIT_BAND("_0m", " 0 Mid", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1m", " 1 Mid", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2m", " 2 Mid", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3m", " 3 Mid", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4m", " 4 Mid", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5m", " 5 Mid", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6m", " 6 Mid", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7m", " 7 Mid", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SC_SPLIT_BAND("_0s", " 0 Side", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1s", " 1 Side", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2s", " 2 Side", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3s", " 3 Side", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4s", " 4 Side", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5s", " 5 Side", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6s", " 6 Side", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7s", " 7 Side", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1m", " 1 Mid", " 1 M", 0.0f, 40.0f),
+            MB_SPLIT("_2m", " 2 Mid", " 2 M", 1.0f, 100.0f),
+            MB_SPLIT("_3m", " 3 Mid", " 3 M", 0.0f, 252.0f),
+            MB_SPLIT("_4m", " 4 Mid", " 4 M", 1.0f, 632.0f),
+            MB_SPLIT("_5m", " 5 Mid", " 5 M", 0.0f, 1587.0f),
+            MB_SPLIT("_6m", " 6 Mid", " 6 M", 1.0f, 3984.0f),
+            MB_SPLIT("_7m", " 7 Mid", " 7 M", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1s", " 1 Side", " 1 S", 0.0f, 40.0f),
+            MB_SPLIT("_2s", " 2 Side", " 2 S", 1.0f, 100.0f),
+            MB_SPLIT("_3s", " 3 Side", " 3 S", 0.0f, 252.0f),
+            MB_SPLIT("_4s", " 4 Side", " 4 S", 1.0f, 632.0f),
+            MB_SPLIT("_5s", " 5 Side", " 5 S", 0.0f, 1587.0f),
+            MB_SPLIT("_6s", " 6 Side", " 6 S", 1.0f, 3984.0f),
+            MB_SPLIT("_7s", " 7 Side", " 7 S", 0.0f, 10000.0f),
+
+            MB_SC_SPLIT_BAND("_0m", " 0 Mid", " 0 M", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1m", " 1 Mid", " 1 M", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2m", " 2 Mid", " 2 M", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3m", " 3 Mid", " 3 M", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4m", " 4 Mid", " 4 M", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5m", " 5 Mid", " 5 M", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6m", " 6 Mid", " 6 M", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7m", " 7 Mid", " 7 M", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SC_SPLIT_BAND("_0s", " 0 Side", " 0 S", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1s", " 1 Side", " 1 S", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2s", " 2 Side", " 2 S", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3s", " 3 Side", " 3 S", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4s", " 4 Side", " 4 S", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5s", " 5 Side", " 5 S", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6s", " 6 Side", " 6 S", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7s", " 7 Side", " 7 S", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0m", " 0 Mid"),
             MB_BAND_METERS("_1m", " 1 Mid"),
@@ -734,7 +761,11 @@ namespace lsp
             "Multiband Compressor",
             B_MB_DYNAMICS,
             "RCdk94Hta3o",
-            "This plugin performs multiband compression of input signsl. Flexible sidechain\ncontrol configuration provided. As opposite to most available multiband\ncompressors, this compressor provides numerous special functions: 'modern'\noperating mode, 'Sidechain boost', 'Lookahead' option and up to 8 frequency\nbands for processing."
+            "This plugin performs multiband compression of input signal. Flexible sidechain\n"
+            "control configuration provided. As opposite to most available multiband\n"
+            "compressors, this compressor provides numerous special functions: 'modern'\n"
+            "operating mode, 'Sidechain boost', 'Lookahead' option and up to 8 frequency\n"
+            "bands for processing."
         };
 
         // Multiband Compressor
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/src/main/plug/mb_compressor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/src/main/plug/mb_compressor.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/src/main/plug/mb_compressor.cpp	2025-03-01 12:43:10.324567160 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/src/main/plug/mb_compressor.cpp	2025-08-26 18:16:11.365735037 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-compressor
  * Created on: 3 авг. 2021 г.
@@ -30,7 +30,7 @@
 #include <lsp-plug.in/shared/debug.h>
 #include <lsp-plug.in/shared/id_colors.h>
 
-#define MBC_BUFFER_SIZE         0x400U
+#define MBC_BUFFER_SIZE         0x200U
 
 namespace lsp
 {
@@ -91,7 +91,6 @@ namespace lsp
             nMode           = mode;
             bSidechain      = sc;
             bEnvUpdate      = true;
-            bUseExtSc       = false;
             bUseShmLink     = false;
             enXOver         = XOVER_MODERN;
             bStereoSplit    = false;
@@ -118,6 +117,31 @@ namespace lsp
             vBuffer         = NULL;
             vEnv            = NULL;
 
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
+
             pBypass         = NULL;
             pMode           = NULL;
             pInGain         = NULL;
@@ -300,14 +324,15 @@ namespace lsp
                     MBC_BUFFER_SIZE * sizeof(float) + // Global vEnv for band signal processing
                     // Channel buffers
                     (
+                        MBC_BUFFER_SIZE * sizeof(float) * 3 + // Premix
                         MBC_BUFFER_SIZE * sizeof(float) + // Global vSc[] for each channel
                         2 * filter_mesh_size + // vTr of each channel
                         filter_mesh_size + // vTrMem of each channel
                         MBC_BUFFER_SIZE * sizeof(float) + // vInAnalyze for each channel
                         MBC_BUFFER_SIZE * sizeof(float) + // vInBuffer for each channel
                         MBC_BUFFER_SIZE * sizeof(float) + // vBuffer for each channel
-                        MBC_BUFFER_SIZE * sizeof(float) + // vScBuffer for each channel
-                        ((bSidechain) ? MBC_BUFFER_SIZE * sizeof(float) : 0) + // vExtScBuffer for each channel
+                        ((bSidechain) ? MBC_BUFFER_SIZE * sizeof(float) : 0) + // vScBuffer for each channel
+                        MBC_BUFFER_SIZE * sizeof(float) + // vExtScBuffer for each channel
                         MBC_BUFFER_SIZE * sizeof(float) + // vShmLinkBuffer
                         // Band buffers
                         (
@@ -335,6 +360,14 @@ namespace lsp
             vBuffer         = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
             vEnv            = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
 
+            // Initialize pre-mix
+            for (size_t i=0; i<channels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
+            }
+
             // Initialize filters according to number of bands
             if (sFilters.init(meta::mb_compressor_metadata::BANDS_MAX * channels) != STATUS_OK)
                 return;
@@ -374,8 +407,8 @@ namespace lsp
                 c->vInAnalyze   = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
                 c->vInBuffer    = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
                 c->vBuffer      = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
-                c->vScBuffer    = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
-                c->vExtScBuffer = (bSidechain) ? advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float)) : NULL;
+                c->vScBuffer    = (bSidechain) ? advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float)) : NULL;
+                c->vExtScBuffer = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
                 c->vShmBuffer   = advance_ptr_bytes<float>(ptr, MBC_BUFFER_SIZE * sizeof(float));
                 c->vTr          = advance_ptr_bytes<float>(ptr, 2 * filter_mesh_size);
                 c->vTrMem       = advance_ptr_bytes<float>(ptr, filter_mesh_size);
@@ -523,6 +556,19 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
@@ -537,6 +583,8 @@ namespace lsp
             BIND_PORT(pZoom);
             BIND_PORT(pEnvBoost);
             SKIP_PORT("Band selector"); // Skip band selector
+            if ((nMode == MBCM_LR) || (nMode == MBCM_MS))
+                SKIP_PORT("Separate channels link");
 
             lsp_trace("Binding channel ports");
             for (size_t i=0; i<channels; ++i)
@@ -717,10 +765,22 @@ namespace lsp
             return SCT_INTERNAL;
         }
 
+        void mb_compressor::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void mb_compressor::update_settings()
         {
             dspu::filter_params_t fp;
 
+            update_premix();
+
             // Determine number of channels
             size_t channels     = (nMode == MBCM_MONO) ? 1 : 2;
             int active_channels = 0;
@@ -749,7 +809,6 @@ namespace lsp
             fDryGain            = (dry_gain * drywet + 1.0f - drywet) * out_gain;
             fWetGain            = wet_gain * drywet * out_gain;
             fZoom               = pZoom->value();
-            bUseExtSc           = false;
             bUseShmLink         = false;
 
             // Configure channels
@@ -871,8 +930,6 @@ namespace lsp
                     b->pRelLevelOut->set_value(release);
 
                     b->nScType      = decode_sidechain_type(b->pScType->value());
-                    if (b->nScType == SCT_EXTERNAL)
-                        bUseExtSc       = true;
                     if (b->nScType == SCT_LINK)
                         bUseShmLink     = true;
 
@@ -1395,7 +1452,7 @@ namespace lsp
         {
             switch (band->nScType)
             {
-                case SCT_INTERNAL: return channel->vScBuffer;
+                case SCT_INTERNAL: return (bSidechain) ? channel->vScBuffer : channel->vExtScBuffer;
                 case SCT_EXTERNAL: return channel->vExtScBuffer;
                 case SCT_LINK: return channel->vShmBuffer;
                 default: break;
@@ -1414,8 +1471,7 @@ namespace lsp
                 channel_t *r = &vChannels[1];
 
                 process_input_stereo(l->vInAnalyze, r->vInAnalyze, l->vIn, r->vIn, count);
-                if (bUseExtSc)
-                    process_input_stereo(l->vExtScBuffer, r->vExtScBuffer, l->vScIn, r->vScIn, count);
+                process_input_stereo(l->vExtScBuffer, r->vExtScBuffer, l->vScIn, r->vScIn, count);
                 if (bUseShmLink)
                     process_input_stereo(l->vShmBuffer, r->vShmBuffer, l->vShmIn, r->vShmIn, count);
             }
@@ -1423,8 +1479,7 @@ namespace lsp
             {
                 channel_t *c = &vChannels[0];
                 process_input_mono(c->vInAnalyze, c->vIn, count);
-                if (bUseExtSc)
-                    process_input_mono(c->vExtScBuffer, c->vScIn, count);
+                process_input_mono(c->vExtScBuffer, c->vScIn, count);
                 if (bUseShmLink)
                     process_input_mono(c->vShmBuffer, c->vShmIn, count);
             }
@@ -1433,14 +1488,130 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
             {
                 channel_t *c        = &vChannels[i];
-                c->sEnvBoost[0].process(c->vScBuffer, c->vInAnalyze, count);
-                if (bUseExtSc)
-                    c->sEnvBoost[1].process(c->vExtScBuffer, c->vExtScBuffer, count);
+                if (c->vScBuffer != NULL)
+                    c->sEnvBoost[0].process(c->vScBuffer, c->vInAnalyze, count);
+                c->sEnvBoost[1].process(c->vExtScBuffer, c->vExtScBuffer, count);
                 if (bUseShmLink)
                     c->sEnvBoost[2].process(c->vShmBuffer, c->vShmBuffer, count);
             }
         }
 
+        void mb_compressor::premix_channel(uint32_t channel, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            channel_t * const c     = &vChannels[channel];
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            c->vIn                  = in_buf;
+            c->vOut                 = out_buf;
+            c->vScIn                = sc_buf;
+            c->vShmIn               = link_buf;
+
+            // Update pointers
+            sPremix.vIn[channel]   += count;
+            sPremix.vOut[channel]  += count;
+            if (sPremix.vSc[channel] != NULL)
+                sPremix.vSc[channel]   += count;
+            if (sPremix.vLink[channel] != NULL)
+                sPremix.vLink[channel] += count;
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vIn, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    c->vScIn            = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vScIn, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(c->vScIn, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    c->vScIn            = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vIn          = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vScIn        = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn       = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void mb_compressor::process(size_t samples)
         {
             size_t channels     = (nMode == MBCM_MONO) ? 1 : 2;
@@ -1450,27 +1621,29 @@ namespace lsp
             {
                 channel_t *c        = &vChannels[i];
 
-                c->vIn              = c->pIn->buffer<float>();
-                c->vOut             = c->pOut->buffer<float>();
-                c->vScIn            = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : NULL;
-                c->vShmIn           = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *shm_buf  = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((shm_buf != NULL) && (shm_buf->active()))
-                    c->vShmIn           = shm_buf->buffer();
+                    sPremix.vLink[i]    = shm_buf->buffer();
             }
 
             // Do processing
             for (size_t offset = 0; offset < samples; )
             {
                 // Determine buffer size for processing
-                size_t to_process   = lsp_min(MBC_BUFFER_SIZE, samples - offset);
+                const size_t to_process = lsp_min(MBC_BUFFER_SIZE, samples - offset);
 
-                // Measure input signal level
+                // Premix and measure input signal level
                 for (size_t i=0; i<channels; ++i)
                 {
                     channel_t *c        = &vChannels[i];
-                    float level         = dsp::abs_max(c->vIn, to_process) * fInGain;
+
+                    premix_channel(i, to_process);
+                    const float level   = dsp::abs_max(c->vIn, to_process) * fInGain;
                     c->pInLvl->set_value(level);
                 }
 
@@ -1660,14 +1833,6 @@ namespace lsp
                     // Apply bypass
                     c->sDryDelay.process(vBuffer, c->vIn, to_process);
                     c->sBypass.process(c->vOut, vBuffer, c->vBuffer, to_process);
-
-                    // Update pointers
-                    c->vIn             += to_process;
-                    c->vOut            += to_process;
-                    if (c->vScIn != NULL)
-                        c->vScIn           += to_process;
-                    if (c->vShmIn != NULL)
-                        c->vShmIn          += to_process;
                 }
                 offset     += to_process;
             }
@@ -1980,7 +2145,6 @@ namespace lsp
             v->write("nMode", nMode);
             v->write("bSidechain", bSidechain);
             v->write("bEnvUpdate", bEnvUpdate);
-            v->write("bUseExtSc", bUseExtSc);
             v->write("bUseShmLink", bUseShmLink);
             v->write("enXOver", enXOver);
             v->write("bStereoSplit", bStereoSplit);
@@ -2143,6 +2307,32 @@ namespace lsp
             v->write("vIndexes", vIndexes);
             v->write("pIDisplay", pIDisplay);
 
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
+
             v->write("pBypass", pBypass);
             v->write("pMode", pMode);
             v->write("pInGain", pInGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-compressor/src/main/ui/mb_compressor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/src/main/ui/mb_compressor.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-compressor/src/main/ui/mb_compressor.cpp	2025-03-01 12:43:10.324567160 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-compressor/src/main/ui/mb_compressor.cpp	2025-08-26 18:16:11.365735037 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-compressor
  * Created on: 3 авг. 2021 г.
@@ -351,7 +351,10 @@ namespace lsp
                     update_split_note_text(s);
 
                     if (flags & ui::PORT_USER_EDIT)
-                        freq_initiator = s;
+                    {
+                        if (s->bOn)
+                            freq_initiator = s;
+                    }
                     else if (s->bOn)
                         need_resort_active_splits = true;
                 }
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/.github/workflows/build.yml	2025-03-01 12:43:18.396518708 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/.github/workflows/build.yml	2025-08-26 18:16:17.485675642 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/CHANGELOG	2025-03-01 12:43:18.396518708 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/CHANGELOG	2025-08-26 18:16:17.485675642 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.23 ===
+* Added audio pre-mixing controls.
+* Added left/right and mid/side linking in the UI.
+* Updated build scripts and dependencies.
+
+=== 1.0.22 ===
+* Updated build scripts and dependencies.
+
 === 1.0.21 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/dependencies.mk	2025-03-01 12:43:18.396518708 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/dependencies.mk	2025-08-26 18:16:17.485675642 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/include/private/plugins/mb_dyna_processor.h 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/include/private/plugins/mb_dyna_processor.h
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/include/private/plugins/mb_dyna_processor.h	2025-03-01 12:43:18.400518685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/include/private/plugins/mb_dyna_processor.h	2025-08-26 18:16:17.489675603 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-dyna-processor
  * Created on: 25 нояб. 2020 г.
@@ -79,6 +79,33 @@ namespace lsp
                     SCT_LINK,
                 };
 
+                typedef struct premix_t
+                {
+                    float                   fInToSc;            // Input -> Sidechain mix
+                    float                   fInToLink;          // Input -> Link mix
+                    float                   fLinkToIn;          // Link -> Input mix
+                    float                   fLinkToSc;          // Link -> Sidechain mix
+                    float                   fScToIn;            // Sidechain -> Input mix
+                    float                   fScToLink;          // Sidechain -> Link mix
+
+                    float                  *vIn[2];             // Input buffer
+                    float                  *vOut[2];            // Output buffer
+                    float                  *vSc[2];             // Sidechain buffer
+                    float                  *vLink[2];           // Link buffer
+
+                    float                  *vTmpIn[2];          // Replacement buffer for input
+                    float                  *vTmpLink[2];        // Replacement buffer for link
+                    float                  *vTmpSc[2];          // Replacement buffer for sidechain
+
+                    plug::IPort            *pInToSc;            // Input -> Sidechain mix
+                    plug::IPort            *pInToLink;          // Input -> Link mix
+                    plug::IPort            *pLinkToIn;          // Link -> Input mix
+                    plug::IPort            *pLinkToSc;          // Link -> Sidechain mix
+                    plug::IPort            *pScToIn;            // Sidechain -> Input mix
+                    plug::IPort            *pScToLink;          // Sidechain -> Link mix
+                } premix_t;
+
+
                 typedef struct dyna_band_t
                 {
                     dspu::Sidechain         sSC;                // Sidechain module
@@ -216,7 +243,6 @@ namespace lsp
                 uint32_t                nMode;                  // Processor mode
                 bool                    bSidechain;             // External side chain
                 bool                    bEnvUpdate;             // Envelope filter update
-                bool                    bUseExtSc;              // External sidechain is in use
                 bool                    bUseShmLink;            // Shared memory link is in use
                 xover_mode_t            enXOver;                // Crossover mode
                 bool                    bStereoSplit;           // Stereo split mode
@@ -239,6 +265,8 @@ namespace lsp
                 uint32_t               *vIndexes;               // Analyzer FFT indexes
                 core::IDBuffer         *pIDisplay;              // Inline display buffer
 
+                premix_t                sPremix;                // Premix
+
                 plug::IPort            *pBypass;                // Bypass port
                 plug::IPort            *pMode;                  // Global mode
                 plug::IPort            *pInGain;                // Input gain port
@@ -262,6 +290,8 @@ namespace lsp
             protected:
                 void                do_destroy();
                 void                preprocess_channel_input(size_t count);
+                void                update_premix();
+                void                premix_channel(uint32_t channel, size_t count);
                 uint32_t            decode_sidechain_type(uint32_t sc) const;
                 void                process_input_mono(float *out, const float *in, size_t count);
                 void                process_input_stereo(float *l_out, float *r_out, const float *l_in, const float *r_in, size_t count);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/make/tools.mk	2025-03-01 12:43:18.400518685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/make/tools.mk	2025-08-26 18:16:17.489675603 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/modules.mk
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/modules.mk	2025-03-01 12:43:18.400518685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/modules.mk	2025-08-26 18:16:17.489675603 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/project.mk
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/project.mk	2025-03-01 12:43:18.400518685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/project.mk	2025-08-26 18:16:17.489675603 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Multiband Dynamic Processor Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.21
+ARTIFACT_VERSION            = 1.0.23
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/mb_dyna_processor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/mb_dyna_processor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/mb_dyna_processor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/mb_dyna_processor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/mb_dyna_processor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/mb_dyna_processor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/mb_dyna_processor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/mb_dyna_processor_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/sc_mb_dyna_processor_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/sc_mb_dyna_processor_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/sc_mb_dyna_processor_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/sc_mb_dyna_processor_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/sc_mb_dyna_processor_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/sc_mb_dyna_processor_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/sc_mb_dyna_processor_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/doc/screenshots/sc_mb_dyna_processor_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/lr.xml
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/lr.xml	2025-03-01 12:43:18.408518637 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/lr.xml	2025-08-26 18:16:17.501675486 +0000
@@ -1,4 +1,34 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'scm'; 'sla'; 'scr'; 'scp'; 'sclc'; 'schc'; 'sclf'; 'schf'; 'bfc'; 'sce'; 'scs'; 'sscs';
+			'pe0'; 'tl0'; 'gl0'; 'kn0'; 'ae0'; 'al0'; 'at0'; 're0'; 'rl0'; 'rt0';
+			'pe1'; 'tl1'; 'gl1'; 'kn1'; 'ae1'; 'al1'; 'at1'; 're1'; 'rl1'; 'rt1';
+			'pe2'; 'tl2'; 'gl2'; 'kn2'; 'ae2'; 'al2'; 'at2'; 're2'; 'rl2'; 'rt2';
+			'pe3'; 'tl3'; 'gl3'; 'kn3'; 'ae3'; 'al3'; 'at3'; 're3'; 'rl3'; 'rt3';
+			'pe'; 'bs'; 'bm'; 'atd'; 'rtd'; 'ht'; 'llr'; 'hlr'; 'mk'; 'cmv'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'cbe'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -248,12 +278,14 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<label text="labels.filters" pad.l="6"/>
 				<hbox spacing="4" pad.h="6">
 					<button id="flt_l" text="labels.chan.L_eft" size="22" ui:inject="Button_left"/>
 					<button id="flt_r" text="labels.chan.R_ight" size="22" ui:inject="Button_right"/>
 				</hbox>
 				<void hexpand="true"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
 			</hbox>
@@ -929,4 +961,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/mono.xml
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/mono.xml	2025-03-01 12:43:18.408518637 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/mono.xml	2025-08-26 18:16:17.501675486 +0000
@@ -1,4 +1,6 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -226,6 +228,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
 
 				<void hexpand="true"/>
@@ -891,4 +894,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/ms.xml
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/ms.xml	2025-03-01 12:43:18.408518637 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/ms.xml	2025-08-26 18:16:17.501675486 +0000
@@ -1,4 +1,34 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'scm'; 'sla'; 'scr'; 'scp'; 'sclc'; 'schc'; 'sclf'; 'schf'; 'bfc'; 'sce'; 'scs'; 'sscs';
+			'pe0'; 'tl0'; 'gl0'; 'kn0'; 'ae0'; 'al0'; 'at0'; 're0'; 'rl0'; 'rt0';
+			'pe1'; 'tl1'; 'gl1'; 'kn1'; 'ae1'; 'al1'; 'at1'; 're1'; 'rl1'; 'rt1';
+			'pe2'; 'tl2'; 'gl2'; 'kn2'; 'ae2'; 'al2'; 'at2'; 're2'; 'rl2'; 'rt2';
+			'pe3'; 'tl3'; 'gl3'; 'kn3'; 'ae3'; 'al3'; 'at3'; 're3'; 'rl3'; 'rt3';
+			'pe'; 'bs'; 'bm'; 'atd'; 'rtd'; 'ht'; 'llr'; 'hlr'; 'mk'; 'cmv'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'cbe'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -249,12 +279,14 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<label text="labels.filters" pad.l="6"/>
 				<hbox spacing="4" pad.h="6">
 					<button id="flt_m" text="labels.chan.M_id" size="22" ui:inject="Button_mid"/>
 					<button id="flt_s" text="labels.chan.S_ide" size="22" ui:inject="Button_side"/>
 				</hbox>
 				<void hexpand="true"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
 			</hbox>
@@ -929,4 +961,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/stereo.xml	2025-03-01 12:43:18.408518637 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/res/main/ui/dynamics/processor/multiband/stereo.xml	2025-08-26 18:16:17.501675486 +0000
@@ -1,4 +1,6 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -242,6 +244,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan" pad.l="6"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<button id="ssplit" text="labels.stereo_split" size="22" ui:inject="Button_blue" pad.h="2"/>
@@ -911,4 +914,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/src/doc/manuals/plugins/mb_dyna_processor.php 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/src/doc/manuals/plugins/mb_dyna_processor.php
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/src/doc/manuals/plugins/mb_dyna_processor.php	2025-03-01 12:43:18.408518637 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/src/doc/manuals/plugins/mb_dyna_processor.php	2025-08-26 18:16:17.501675486 +0000
@@ -37,7 +37,7 @@
 	<ul>
 		<li>Unlike classic crossovers which use IIR (Infinite Impulse Response) filters to split signal into multiple bands and shift the phase
 		of the audio signal at band split points, the <b>Linear Phase</b> allows to use FIR (Finite Impulse Response) filters which are deprived of this.
-		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their tranfer function
+		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their transfer function
 		to look like the transfer function of analog filters, without deforming it's magnitude envelope near the nyquist frequency.</li>
 		<li>Unlike design of classic Linkwitz-Riley filters, the design of IIR filters provides shorter transition zone of the filter.</li>
 	</ul>
@@ -82,10 +82,15 @@
 	<li><b>Link</b> - the name of shared memory link used to receive sidechain signal</li>
 	<li><b>FFT<?= $sm ?> In</b> - enables FFT curve graph of input signal on the spectrum graph.</li>
 	<li><b>FFT<?= $sm ?> Out</b> - enables FFT curve graph of output signal on the spectrum graph.</li>
-	<li><b>Filters<?= $sm ?></b> - enables drawing tranfer function of each sidechain filter on the spectrum graph.</li>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
 	<?php if ($m == 's') { ?>
-	<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+		<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+	<?php } elseif ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
+	<?php } elseif ($m == 'ms') { ?>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } ?>
+	<li><b>Filters<?= $sm ?></b> - enables drawing transfer function of each sidechain filter on the spectrum graph.</li>
 	<li><b>Zoom</b> - zoom fader, allows to adjust zoom on the frequency chart.</li>
 </ul>
 <p><b>'Signal' section:</b></p>
@@ -222,3 +227,18 @@
 		</li>
 	</ul>
 </ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
+
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/src/main/meta/mb_dyna_processor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/src/main/meta/mb_dyna_processor.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/src/main/meta/mb_dyna_processor.cpp	2025-03-01 12:43:18.408518637 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/src/main/meta/mb_dyna_processor.cpp	2025-08-26 18:16:17.501675486 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-dyna-processor
  * Created on: 25 нояб. 2020 г.
@@ -26,7 +26,7 @@
 
 #define LSP_PLUGINS_MB_DYNA_PROCESSOR_VERSION_MAJOR       1
 #define LSP_PLUGINS_MB_DYNA_PROCESSOR_VERSION_MINOR       0
-#define LSP_PLUGINS_MB_DYNA_PROCESSOR_VERSION_MICRO       21
+#define LSP_PLUGINS_MB_DYNA_PROCESSOR_VERSION_MICRO       23
 
 #define LSP_PLUGINS_MB_DYNA_PROCESSOR_VERSION  \
     LSP_MODULE_VERSION( \
@@ -170,127 +170,141 @@ namespace lsp
         };
 
         #define MB_DYNA_SHM_LINK_MONO \
-                OPT_RETURN_MONO("link", "shml", "Side-chain shared memory link")
+            OPT_RETURN_MONO("link", "shml", "Side-chain shared memory link")
 
         #define MB_DYNA_SHM_LINK_STEREO \
-                OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
+            OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
+
+        #define MB_DYNA_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define MB_DYNA_SC_PREMIX \
+            MB_DYNA_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
 
         #define MB_COMMON(bands) \
-                BYPASS, \
-                COMBO("mode", "Dynamics Processor mode", 1, mb_global_dyna_modes), \
-                AMP_GAIN("g_in", "Input gain", mb_dyna_processor::IN_GAIN_DFL, 10.0f), \
-                AMP_GAIN("g_out", "Output gain", mb_dyna_processor::OUT_GAIN_DFL, 10.0f), \
-                AMP_GAIN("g_dry", "Dry gain", 0.0f, 10.0f), \
-                AMP_GAIN("g_wet", "Wet gain", 1.0f, 10.0f), \
-                PERCENTS("drywet", "Dry/Wet balance", 100.0f, 0.1f), \
-                LOG_CONTROL("react", "FFT reactivity", U_MSEC, mb_dyna_processor::REACT_TIME), \
-                AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \
-                LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, mb_dyna_processor::ZOOM), \
-                COMBO("envb", "Envelope boost", mb_dyna_processor::FB_DEFAULT, mb_dyna_sc_boost), \
-                COMBO("bsel", "Band selection", mb_dyna_processor::SC_BAND_DFL, bands)
-
-        #define MB_SPLIT(id, label, enable, freq) \
-                SWITCH("cbe" id, "Dynamics Processor band enable" label, enable), \
-                LOG_CONTROL_DFL("sf" id, "Split frequency" label, U_HZ, mb_dyna_processor::FREQ, freq)
-
-        #define MB_DYNA_POINT(idx, on, id, label, level) \
-                SWITCH("pe" #idx id, "Point enable " #idx label, on), \
-                LOG_CONTROL_DFL("tl" #idx id, "Threshold " #idx label, U_GAIN_AMP, mb_dyna_processor::THRESHOLD, level), \
-                LOG_CONTROL_DFL("gl" #idx id, "Gain " #idx label, U_GAIN_AMP, mb_dyna_processor::THRESHOLD, level), \
-                LOG_CONTROL("kn" #idx id, "Knee " #idx label, U_GAIN_AMP, mb_dyna_processor::KNEE), \
-                SWITCH("ae" #idx id, "Attack enable " #idx label, 0.0f), \
-                LOG_CONTROL_DFL("al" #idx id, "Attack level " #idx label, U_GAIN_AMP, mb_dyna_processor::ATTACK_LVL, level), \
-                LOG_CONTROL("at" #idx id, "Attack time " #idx label, U_MSEC, mb_dyna_processor::ATTACK_TIME), \
-                SWITCH("re" #idx id, "Release enable " #idx label, 0.0f), \
-                LOG_CONTROL_DFL("rl" #idx id, "Relative level " #idx label, U_GAIN_AMP, mb_dyna_processor::RELEASE_LVL, level), \
-                LOG_CONTROL("rt" #idx id, "Release time " #idx label, U_MSEC, mb_dyna_processor::RELEASE_TIME)
-
-        #define MB_BAND_COMMON(id, label, x, total, fe, fs) \
-                COMBO("scm" id, "Sidechain mode" label, mb_dyna_processor::SC_MODE_DFL, mb_dyna_sc_modes), \
-                CONTROL("sla" id, "Sidechain lookahead" label, U_MSEC, mb_dyna_processor::LOOKAHEAD), \
-                LOG_CONTROL("scr" id, "Sidechain reactivity" label, U_MSEC, mb_dyna_processor::REACTIVITY), \
-                AMP_GAIN100("scp" id, "Sidechain preamp" label, GAIN_AMP_0_DB), \
-                SWITCH("sclc" id, "Sidechain custom lo-cut" label, 0), \
-                SWITCH("schc" id, "Sidechain custom hi-cut" label, 0), \
-                LOG_CONTROL_DFL("sclf" id, "Sidechain lo-cut frequency" label, U_HZ, mb_dyna_processor::FREQ, fe), \
-                LOG_CONTROL_DFL("schf" id, "Sidechain hi-cut frequency" label, U_HZ, mb_dyna_processor::FREQ, fs), \
-                MESH("bfc" id, "Side-chain band frequency chart" label, 2, mb_dyna_processor::MESH_POINTS + 4), \
-                \
-                SWITCH("pe" id, "Processor enable" label, 1.0f), \
-                SWITCH("bs" id, "Solo band" label, 0.0f), \
-                SWITCH("bm" id, "Mute band" label, 0.0f), \
-                LOG_CONTROL("atd" id, "Attack time default" label, U_MSEC, mb_dyna_processor::ATTACK_TIME), \
-                LOG_CONTROL("rtd" id, "Release time default" label, U_MSEC, mb_dyna_processor::RELEASE_TIME), \
-                MB_DYNA_POINT(0, 1.0f, id, label, GAIN_AMP_M_12_DB), \
-                MB_DYNA_POINT(1, 0.0f, id, label, GAIN_AMP_M_24_DB), \
-                MB_DYNA_POINT(2, 0.0f, id, label, GAIN_AMP_M_36_DB), \
-                MB_DYNA_POINT(3, 0.0f, id, label, GAIN_AMP_M_48_DB), \
-                CONTROL("ht" id, "Hold time" label, U_MSEC, mb_dyna_processor::HOLD_TIME), \
-                LOG_CONTROL("llr" id, "Low-level ratio" label, U_NONE, mb_dyna_processor::RATIO), \
-                LOG_CONTROL("hlr" id, "High-level ratio" label, U_NONE, mb_dyna_processor::RATIO), \
-                LOG_CONTROL("mk" id, "Makeup gain" label, U_GAIN_AMP, mb_dyna_processor::MAKEUP), \
-                SWITCH("cmv" id, "Curve modelling visibility" label, 1.0f), \
-                HUE_CTL("hue" id, "Hue " label, float(x) / float(total)), \
-                \
-                METER("fre" id, "Frequency range end" label, U_HZ,  mb_dyna_processor::OUT_FREQ), \
-                MESH("cmg" id, "Curve modelling graph" label, 2, mb_dyna_processor::CURVE_MESH_SIZE), \
-                MESH("ccg" id, "Compression curve graph" label, 2, mb_dyna_processor::CURVE_MESH_SIZE)
+            BYPASS, \
+            COMBO("mode", "Dynamics Processor mode", "Mode", 1, mb_global_dyna_modes), \
+            AMP_GAIN("g_in", "Input gain", "Input gain", mb_dyna_processor::IN_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_out", "Output gain", "Output gain", mb_dyna_processor::OUT_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_dry", "Dry gain", "Dry", 0.0f, 10.0f), \
+            AMP_GAIN("g_wet", "Wet gain", "Wet", 1.0f, 10.0f), \
+            PERCENTS("drywet", "Dry/Wet balance", "Dry/Wet", 100.0f, 0.1f), \
+            LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, mb_dyna_processor::REACT_TIME), \
+            AMP_GAIN("shift", "Shift gain", "Shift", 1.0f, 100.0f), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, mb_dyna_processor::ZOOM), \
+            COMBO("envb", "Envelope boost", "Env boost", mb_dyna_processor::FB_DEFAULT, mb_dyna_sc_boost), \
+            COMBO("bsel", "Band selection", "Band selector", mb_dyna_processor::SC_BAND_DFL, bands)
+
+        #define MB_SPLIT(id, label, alias, enable, freq) \
+            SWITCH("cbe" id, "Dynamics Processor band enable" label, "Split on" alias, enable), \
+            LOG_CONTROL_DFL("sf" id, "Split frequency" label, "Split" alias, U_HZ, mb_dyna_processor::FREQ, freq)
+
+        #define MB_DYNA_POINT(idx, on, id, label, alias, level) \
+            SWITCH("pe" #idx id, "Point enable " #idx label, "Point on" #idx alias, on), \
+            LOG_CONTROL_DFL("tl" #idx id, "Threshold " #idx label, "Thresh " #idx alias, U_GAIN_AMP, mb_dyna_processor::THRESHOLD, level), \
+            LOG_CONTROL_DFL("gl" #idx id, "Gain " #idx label, "Gain " #idx alias, U_GAIN_AMP, mb_dyna_processor::THRESHOLD, level), \
+            LOG_CONTROL("kn" #idx id, "Knee " #idx label, "Knee " #idx alias, U_GAIN_AMP, mb_dyna_processor::KNEE), \
+            SWITCH("ae" #idx id, "Attack enable " #idx label, "Att on" #idx alias, 0.0f), \
+            LOG_CONTROL_DFL("al" #idx id, "Attack level " #idx label, "Att lvl " #idx alias, U_GAIN_AMP, mb_dyna_processor::ATTACK_LVL, level), \
+            LOG_CONTROL("at" #idx id, "Attack time " #idx label, "Att time " #idx alias, U_MSEC, mb_dyna_processor::ATTACK_TIME), \
+            SWITCH("re" #idx id, "Release enable " #idx label, "Rel on" #idx alias, 0.0f), \
+            LOG_CONTROL_DFL("rl" #idx id, "Release level " #idx label, "Rel lvl " #idx alias, U_GAIN_AMP, mb_dyna_processor::RELEASE_LVL, level), \
+            LOG_CONTROL("rt" #idx id, "Release time " #idx label, "Rel time " #idx alias, U_MSEC, mb_dyna_processor::RELEASE_TIME)
+
+        #define MB_BAND_COMMON(id, label, alias, x, total, fe, fs) \
+            COMBO("scm" id, "Sidechain mode" label, "SC mode" alias, mb_dyna_processor::SC_MODE_DFL, mb_dyna_sc_modes), \
+            CONTROL("sla" id, "Sidechain lookahead" label, "SC look" alias, U_MSEC, mb_dyna_processor::LOOKAHEAD), \
+            LOG_CONTROL("scr" id, "Sidechain reactivity" label, "SC react" alias, U_MSEC, mb_dyna_processor::REACTIVITY), \
+            AMP_GAIN100("scp" id, "Sidechain preamp" label, "SC preamp" alias, GAIN_AMP_0_DB), \
+            SWITCH("sclc" id, "Sidechain custom lo-cut" label, "SC LCF on" alias, 0), \
+            SWITCH("schc" id, "Sidechain custom hi-cut" label, "SC HCF on" alias, 0), \
+            LOG_CONTROL_DFL("sclf" id, "Sidechain lo-cut frequency" label, "SC LCF" alias, U_HZ, mb_dyna_processor::FREQ, fe), \
+            LOG_CONTROL_DFL("schf" id, "Sidechain hi-cut frequency" label, "SC HCF" alias, U_HZ, mb_dyna_processor::FREQ, fs), \
+            MESH("bfc" id, "Side-chain band frequency chart" label, 2, mb_dyna_processor::MESH_POINTS + 4), \
+            \
+            SWITCH("pe" id, "Processor enable" label, "On " alias, 1.0f), \
+            SWITCH("bs" id, "Solo band" label, "Solo " alias, 0.0f), \
+            SWITCH("bm" id, "Mute band" label, "Mute " alias, 0.0f), \
+            LOG_CONTROL("atd" id, "Attack time default" label, "Att time" alias, U_MSEC, mb_dyna_processor::ATTACK_TIME), \
+            LOG_CONTROL("rtd" id, "Release time default" label, "Rel time" alias, U_MSEC, mb_dyna_processor::RELEASE_TIME), \
+            MB_DYNA_POINT(0, 1.0f, id, label, alias, GAIN_AMP_M_12_DB), \
+            MB_DYNA_POINT(1, 0.0f, id, label, alias, GAIN_AMP_M_24_DB), \
+            MB_DYNA_POINT(2, 0.0f, id, label, alias, GAIN_AMP_M_36_DB), \
+            MB_DYNA_POINT(3, 0.0f, id, label, alias, GAIN_AMP_M_48_DB), \
+            CONTROL("ht" id, "Hold time" label, "Hold time" alias, U_MSEC, mb_dyna_processor::HOLD_TIME), \
+            LOG_CONTROL("llr" id, "Low-level ratio" label, "Low ratio" alias, U_NONE, mb_dyna_processor::RATIO), \
+            LOG_CONTROL("hlr" id, "High-level ratio" label, "High ratio" alias, U_NONE, mb_dyna_processor::RATIO), \
+            LOG_CONTROL("mk" id, "Makeup gain" label, "Makeup" alias, U_GAIN_AMP, mb_dyna_processor::MAKEUP), \
+            SWITCH("cmv" id, "Curve modelling visibility" label, "Show curve " alias, 1.0f), \
+            HUE_CTL("hue" id, "Hue " label, float(x) / float(total)), \
+            \
+            METER("fre" id, "Frequency range end" label, U_HZ,  mb_dyna_processor::OUT_FREQ), \
+            MESH("cmg" id, "Curve modelling graph" label, 2, mb_dyna_processor::CURVE_MESH_SIZE), \
+            MESH("ccg" id, "Compression curve graph" label, 2, mb_dyna_processor::CURVE_MESH_SIZE)
 
         #define MB_BAND_METERS(id, label) \
-                METER_OUT_GAIN("elm" id, "Envelope level meter" label, GAIN_AMP_P_36_DB), \
-                METER_OUT_GAIN("clm" id, "Curve level meter" label, GAIN_AMP_P_36_DB), \
-                METER_OUT_GAIN("rlm" id, "Reduction level meter" label, GAIN_AMP_P_72_DB)
-
-        #define MB_MONO_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_dyna_sc_type), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_STEREO_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_dyna_sc_type), \
-                COMBO("scs" id, "Sidechain source" label, 0, mb_dyna_sc_source), \
-                COMBO("sscs" id, "Split sidechain source" label, 0, mb_dyna_sc_split_source), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SPLIT_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_dyna_sc_type), \
-                COMBO("scs" id, "Sidechain source" label, dspu::SCS_MIDDLE, mb_dyna_sc_source), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_MONO_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_dyna_sc_type_sc), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_STEREO_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_dyna_sc_type_sc), \
-                COMBO("scs" id, "Sidechain source" label, 0, mb_dyna_sc_source), \
-                COMBO("sscs" id, "Split sidechain source" label, 0, mb_dyna_sc_split_source), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_SPLIT_BAND(id, label, x, total, fe, fs) \
-                COMBO("sce" id, "External sidechain source" label, 0.0f, mb_dyna_sc_type_sc), \
-                COMBO("scs" id, "Sidechain source" label, dspu::SCS_MIDDLE, mb_dyna_sc_source), \
-                MB_BAND_COMMON(id, label, x, total, fe, fs)
+            METER_OUT_GAIN("elm" id, "Envelope level meter" label, GAIN_AMP_P_36_DB), \
+            METER_OUT_GAIN("clm" id, "Curve level meter" label, GAIN_AMP_P_36_DB), \
+            METER_OUT_GAIN("rlm" id, "Reduction level meter" label, GAIN_AMP_P_72_DB)
+
+        #define MB_MONO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_dyna_sc_type), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_STEREO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_dyna_sc_type), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_dyna_sc_source), \
+            COMBO("sscs" id, "Split sidechain source" label, "SC split" alias, 0, mb_dyna_sc_split_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SPLIT_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_dyna_sc_type), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, dspu::SCS_MIDDLE, mb_dyna_sc_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_MONO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_dyna_sc_type_sc), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_STEREO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_dyna_sc_type_sc), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_dyna_sc_source), \
+            COMBO("sscs" id, "Split sidechain source" label, "SC split" alias, 0, mb_dyna_sc_split_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_SPLIT_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_dyna_sc_type_sc), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, dspu::SCS_MIDDLE, mb_dyna_sc_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
 
         #define MB_STEREO_CHANNEL \
-                SWITCH("flt", "Band filter curves", 1.0f), \
-                MESH("ag_l", "Pprocessor amplitude graph Left", 2, mb_dyna_processor::FFT_MESH_POINTS), \
-                MESH("ag_r", "Processor amplitude graph Right", 2, mb_dyna_processor::FFT_MESH_POINTS), \
-                SWITCH("ssplit", "Stereo split", 0.0f)
-
-        #define MB_CHANNEL(id, label) \
-                SWITCH("flt" id, "Band filter curves" label, 1.0f), \
-                MESH("ag" id, "Processor amplitude graph " label, 2, mb_dyna_processor::FFT_MESH_POINTS)
-
-        #define MB_FFT_METERS(id, label) \
-                SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-                SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
-                MESH("ifg" id, "Input FFT graph" label, 2, mb_dyna_processor::FFT_MESH_POINTS + 2), \
-                MESH("ofg" id, "Output FFT graph" label, 2, mb_dyna_processor::FFT_MESH_POINTS)
+            SWITCH("flt", "Band filter curves", "Show filters", 1.0f), \
+            MESH("ag_l", "Pprocessor amplitude graph Left", 2, mb_dyna_processor::FFT_MESH_POINTS), \
+            MESH("ag_r", "Processor amplitude graph Right", 2, mb_dyna_processor::FFT_MESH_POINTS), \
+            SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f)
+
+        #define MB_CHANNEL(id, label, alias) \
+            SWITCH("flt" id, "Band filter curves" label, "Show flt" alias, 1.0f), \
+            MESH("ag" id, "Processor amplitude graph " label, 2, mb_dyna_processor::FFT_MESH_POINTS)
+
+        #define MB_FFT_METERS(id, label, alias) \
+            SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+            SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
+            MESH("ifg" id, "Input FFT graph" label, 2, mb_dyna_processor::FFT_MESH_POINTS + 2), \
+            MESH("ofg" id, "Output FFT graph" label, 2, mb_dyna_processor::FFT_MESH_POINTS)
 
         #define MB_CHANNEL_METERS(id, label) \
-                METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
-                METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB)
+            METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
+            METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB)
 
+        #define MB_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
 
     /*
      List of frequencies:
@@ -307,27 +321,28 @@ namespace lsp
         {
             PORTS_MONO_PLUGIN,
             MB_DYNA_SHM_LINK_MONO,
+            MB_DYNA_PREMIX,
             MB_COMMON(mb_dyna_sc_bands),
-            MB_CHANNEL("", ""),
-            MB_FFT_METERS("", ""),
+            MB_CHANNEL("", "", ""),
+            MB_FFT_METERS("", "", ""),
             MB_CHANNEL_METERS("", ""),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_MONO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_MONO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_MONO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_MONO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_MONO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_MONO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_MONO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_MONO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_MONO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_MONO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_MONO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_MONO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_MONO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_MONO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_MONO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_MONO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0", " 0"),
             MB_BAND_METERS("_1", " 1"),
@@ -345,29 +360,30 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_DYNA_SHM_LINK_STEREO,
+            MB_DYNA_PREMIX,
             MB_COMMON(mb_dyna_sc_bands),
             MB_STEREO_CHANNEL,
-            MB_FFT_METERS("_l", " Left"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_STEREO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_STEREO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_STEREO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_STEREO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_STEREO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_STEREO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_STEREO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_STEREO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_STEREO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_STEREO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_STEREO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_STEREO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_STEREO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_STEREO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_STEREO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_STEREO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -394,47 +410,49 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_DYNA_SHM_LINK_STEREO,
+            MB_DYNA_PREMIX,
             MB_COMMON(mb_dyna_sc_lr_bands),
-            MB_CHANNEL("_l", " Left"),
-            MB_CHANNEL("_r", " Right"),
-            MB_FFT_METERS("_l", " Left"),
+            MB_LINK("clink", "Left/Right controls link", "L/R link"),
+            MB_CHANNEL("_l", " Left", " L"),
+            MB_CHANNEL("_r", " Right", " R"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1l", " 1 Left", 0.0f, 40.0f),
-            MB_SPLIT("_2l", " 2 Left", 1.0f, 100.0f),
-            MB_SPLIT("_3l", " 3 Left", 0.0f, 252.0f),
-            MB_SPLIT("_4l", " 4 Left", 1.0f, 632.0f),
-            MB_SPLIT("_5l", " 5 Left", 0.0f, 1587.0f),
-            MB_SPLIT("_6l", " 6 Left", 1.0f, 3984.0f),
-            MB_SPLIT("_7l", " 7 Left", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1r", " 1 Right", 0.0f, 40.0f),
-            MB_SPLIT("_2r", " 2 Right", 1.0f, 100.0f),
-            MB_SPLIT("_3r", " 3 Right", 0.0f, 252.0f),
-            MB_SPLIT("_4r", " 4 Right", 1.0f, 632.0f),
-            MB_SPLIT("_5r", " 5 Right", 0.0f, 1587.0f),
-            MB_SPLIT("_6r", " 6 Right", 1.0f, 3984.0f),
-            MB_SPLIT("_7r", " 7 Right", 0.0f, 10000.0f),
-
-            MB_SPLIT_BAND("_0l", " 0 Left", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1l", " 1 Left", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2l", " 2 Left", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3l", " 3 Left", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4l", " 4 Left", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5l", " 5 Left", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6l", " 6 Left", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7l", " 7 Left", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SPLIT_BAND("_0r", " 0 Right", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1r", " 1 Right", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2r", " 2 Right", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3r", " 3 Right", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4r", " 4 Right", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5r", " 5 Right", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6r", " 6 Right", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7r", " 7 Right", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1l", " 1 Left", " 1 L", 0.0f, 40.0f),
+            MB_SPLIT("_2l", " 2 Left", " 2 L", 1.0f, 100.0f),
+            MB_SPLIT("_3l", " 3 Left", " 3 L", 0.0f, 252.0f),
+            MB_SPLIT("_4l", " 4 Left", " 4 L", 1.0f, 632.0f),
+            MB_SPLIT("_5l", " 5 Left", " 5 L", 0.0f, 1587.0f),
+            MB_SPLIT("_6l", " 6 Left", " 6 L", 1.0f, 3984.0f),
+            MB_SPLIT("_7l", " 7 Left", " 7 L", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1r", " 1 Right", " 1 R", 0.0f, 40.0f),
+            MB_SPLIT("_2r", " 2 Right", " 2 R", 1.0f, 100.0f),
+            MB_SPLIT("_3r", " 3 Right", " 3 R", 0.0f, 252.0f),
+            MB_SPLIT("_4r", " 4 Right", " 4 R", 1.0f, 632.0f),
+            MB_SPLIT("_5r", " 5 Right", " 5 R", 0.0f, 1587.0f),
+            MB_SPLIT("_6r", " 6 Right", " 6 R", 1.0f, 3984.0f),
+            MB_SPLIT("_7r", " 7 Right", " 7 R", 0.0f, 10000.0f),
+
+            MB_SPLIT_BAND("_0l", " 0 Left", " 0 L", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1l", " 1 Left", " 1 L", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2l", " 2 Left", " 2 L", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3l", " 3 Left", " 3 L", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4l", " 4 Left", " 4 L", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5l", " 5 Left", " 5 L", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6l", " 6 Left", " 6 L", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7l", " 7 Left", " 7 L", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SPLIT_BAND("_0r", " 0 Right", " 0 R", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1r", " 1 Right", " 1 R", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2r", " 2 Right", " 2 R", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3r", " 3 Right", " 3 R", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4r", " 4 Right", " 4 R", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5r", " 5 Right", " 5 R", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6r", " 6 Right", " 6 R", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7r", " 7 Right", " 7 R", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -461,47 +479,49 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_DYNA_SHM_LINK_STEREO,
+            MB_DYNA_PREMIX,
             MB_COMMON(mb_dyna_sc_ms_bands),
-            MB_CHANNEL("_m", " Mid"),
-            MB_CHANNEL("_s", " Side"),
-            MB_FFT_METERS("_m", " Mid"),
+            MB_LINK("clink", "Mid/Side controls link", "M/S link"),
+            MB_CHANNEL("_m", " Mid", " M"),
+            MB_CHANNEL("_s", " Side", " S"),
+            MB_FFT_METERS("_m", " Mid", " M"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_s", " Side"),
+            MB_FFT_METERS("_s", " Side", " S"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1m", " 1 Mid", 0.0f, 40.0f),
-            MB_SPLIT("_2m", " 2 Mid", 1.0f, 100.0f),
-            MB_SPLIT("_3m", " 3 Mid", 0.0f, 252.0f),
-            MB_SPLIT("_4m", " 4 Mid", 1.0f, 632.0f),
-            MB_SPLIT("_5m", " 5 Mid", 0.0f, 1587.0f),
-            MB_SPLIT("_6m", " 6 Mid", 1.0f, 3984.0f),
-            MB_SPLIT("_7m", " 7 Mid", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1s", " 1 Side", 0.0f, 40.0f),
-            MB_SPLIT("_2s", " 2 Side", 1.0f, 100.0f),
-            MB_SPLIT("_3s", " 3 Side", 0.0f, 252.0f),
-            MB_SPLIT("_4s", " 4 Side", 1.0f, 632.0f),
-            MB_SPLIT("_5s", " 5 Side", 0.0f, 1587.0f),
-            MB_SPLIT("_6s", " 6 Side", 1.0f, 3984.0f),
-            MB_SPLIT("_7s", " 7 Side", 0.0f, 10000.0f),
-
-            MB_SPLIT_BAND("_0m", " 0 Mid", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1m", " 1 Mid", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2m", " 2 Mid", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3m", " 3 Mid", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4m", " 4 Mid", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5m", " 5 Mid", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6m", " 6 Mid", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7m", " 7 Mid", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SPLIT_BAND("_0s", " 0 Side", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1s", " 1 Side", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2s", " 2 Side", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3s", " 3 Side", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4s", " 4 Side", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5s", " 5 Side", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6s", " 6 Side", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7s", " 7 Side", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1m", " 1 Mid", " 1 M", 0.0f, 40.0f),
+            MB_SPLIT("_2m", " 2 Mid", " 2 M", 1.0f, 100.0f),
+            MB_SPLIT("_3m", " 3 Mid", " 3 M", 0.0f, 252.0f),
+            MB_SPLIT("_4m", " 4 Mid", " 4 M", 1.0f, 632.0f),
+            MB_SPLIT("_5m", " 5 Mid", " 5 M", 0.0f, 1587.0f),
+            MB_SPLIT("_6m", " 6 Mid", " 6 M", 1.0f, 3984.0f),
+            MB_SPLIT("_7m", " 7 Mid", " 7 M", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1s", " 1 Side", " 1 S", 0.0f, 40.0f),
+            MB_SPLIT("_2s", " 2 Side", " 2 S", 1.0f, 100.0f),
+            MB_SPLIT("_3s", " 3 Side", " 3 S", 0.0f, 252.0f),
+            MB_SPLIT("_4s", " 4 Side", " 4 S", 1.0f, 632.0f),
+            MB_SPLIT("_5s", " 5 Side", " 5 S", 0.0f, 1587.0f),
+            MB_SPLIT("_6s", " 6 Side", " 6 S", 1.0f, 3984.0f),
+            MB_SPLIT("_7s", " 7 Side", " 7 S", 0.0f, 10000.0f),
+
+            MB_SPLIT_BAND("_0m", " 0 Mid", " 0 M", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1m", " 1 Mid", " 1 M", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2m", " 2 Mid", " 2 M", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3m", " 3 Mid", " 3 M", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4m", " 4 Mid", " 4 M", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5m", " 5 Mid", " 5 M", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6m", " 6 Mid", " 6 M", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7m", " 7 Mid", " 7 M", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SPLIT_BAND("_0s", " 0 Side", " 0 S", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1s", " 1 Side", " 1 S", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2s", " 2 Side", " 2 S", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3s", " 3 Side", " 3 S", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4s", " 4 Side", " 4 S", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5s", " 5 Side", " 5 S", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6s", " 6 Side", " 6 S", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7s", " 7 Side", " 7 S", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0m", " 0 Mid"),
             MB_BAND_METERS("_1m", " 1 Mid"),
@@ -529,27 +549,28 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             MB_DYNA_SHM_LINK_MONO,
+            MB_DYNA_SC_PREMIX,
             MB_COMMON(mb_dyna_sc_bands),
-            MB_CHANNEL("", ""),
-            MB_FFT_METERS("", ""),
+            MB_CHANNEL("", "", ""),
+            MB_FFT_METERS("", "", ""),
             MB_CHANNEL_METERS("", ""),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_SC_MONO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_SC_MONO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_SC_MONO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_SC_MONO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_SC_MONO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_SC_MONO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_MONO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_MONO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_SC_MONO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_SC_MONO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_SC_MONO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_SC_MONO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_SC_MONO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_SC_MONO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_MONO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_MONO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0", " 0"),
             MB_BAND_METERS("_1", " 1"),
@@ -568,29 +589,30 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_DYNA_SHM_LINK_STEREO,
+            MB_DYNA_SC_PREMIX,
             MB_COMMON(mb_dyna_sc_bands),
             MB_STEREO_CHANNEL,
-            MB_FFT_METERS("_l", " Left"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_SC_STEREO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_SC_STEREO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_SC_STEREO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_SC_STEREO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_SC_STEREO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_SC_STEREO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_STEREO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_STEREO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_SC_STEREO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_SC_STEREO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_SC_STEREO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_SC_STEREO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_SC_STEREO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_SC_STEREO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_STEREO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_STEREO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -618,47 +640,49 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_DYNA_SHM_LINK_STEREO,
+            MB_DYNA_SC_PREMIX,
             MB_COMMON(mb_dyna_sc_lr_bands),
-            MB_CHANNEL("_l", " Left"),
-            MB_CHANNEL("_r", " Right"),
-            MB_FFT_METERS("_l", " Left"),
+            MB_LINK("clink", "Left/Right controls link", "L/R link"),
+            MB_CHANNEL("_l", " Left", " L"),
+            MB_CHANNEL("_r", " Right", " R"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1l", " 1 Left", 0.0f, 40.0f),
-            MB_SPLIT("_2l", " 2 Left", 1.0f, 100.0f),
-            MB_SPLIT("_3l", " 3 Left", 0.0f, 252.0f),
-            MB_SPLIT("_4l", " 4 Left", 1.0f, 632.0f),
-            MB_SPLIT("_5l", " 5 Left", 0.0f, 1587.0f),
-            MB_SPLIT("_6l", " 6 Left", 1.0f, 3984.0f),
-            MB_SPLIT("_7l", " 7 Left", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1r", " 1 Right", 0.0f, 40.0f),
-            MB_SPLIT("_2r", " 2 Right", 1.0f, 100.0f),
-            MB_SPLIT("_3r", " 3 Right", 0.0f, 252.0f),
-            MB_SPLIT("_4r", " 4 Right", 1.0f, 632.0f),
-            MB_SPLIT("_5r", " 5 Right", 0.0f, 1587.0f),
-            MB_SPLIT("_6r", " 6 Right", 1.0f, 3984.0f),
-            MB_SPLIT("_7r", " 7 Right", 0.0f, 10000.0f),
-
-            MB_SC_SPLIT_BAND("_0l", " 0 Left", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1l", " 1 Left", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2l", " 2 Left", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3l", " 3 Left", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4l", " 4 Left", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5l", " 5 Left", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6l", " 6 Left", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7l", " 7 Left", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SC_SPLIT_BAND("_0r", " 0 Right", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1r", " 1 Right", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2r", " 2 Right", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3r", " 3 Right", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4r", " 4 Right", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5r", " 5 Right", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6r", " 6 Right", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7r", " 7 Right", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1l", " 1 Left", " 1 L", 0.0f, 40.0f),
+            MB_SPLIT("_2l", " 2 Left", " 2 L", 1.0f, 100.0f),
+            MB_SPLIT("_3l", " 3 Left", " 3 L", 0.0f, 252.0f),
+            MB_SPLIT("_4l", " 4 Left", " 4 L", 1.0f, 632.0f),
+            MB_SPLIT("_5l", " 5 Left", " 5 L", 0.0f, 1587.0f),
+            MB_SPLIT("_6l", " 6 Left", " 6 L", 1.0f, 3984.0f),
+            MB_SPLIT("_7l", " 7 Left", " 7 L", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1r", " 1 Right", " 1 R", 0.0f, 40.0f),
+            MB_SPLIT("_2r", " 2 Right", " 2 R", 1.0f, 100.0f),
+            MB_SPLIT("_3r", " 3 Right", " 3 R", 0.0f, 252.0f),
+            MB_SPLIT("_4r", " 4 Right", " 4 R", 1.0f, 632.0f),
+            MB_SPLIT("_5r", " 5 Right", " 5 R", 0.0f, 1587.0f),
+            MB_SPLIT("_6r", " 6 Right", " 6 R", 1.0f, 3984.0f),
+            MB_SPLIT("_7r", " 7 Right", " 7 R", 0.0f, 10000.0f),
+
+            MB_SC_SPLIT_BAND("_0l", " 0 Left", " 0 L", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1l", " 1 Left", " 1 L", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2l", " 2 Left", " 2 L", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3l", " 3 Left", " 3 L", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4l", " 4 Left", " 4 L", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5l", " 5 Left", " 5 L", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6l", " 6 Left", " 6 L", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7l", " 7 Left", " 7 L", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SC_SPLIT_BAND("_0r", " 0 Right", " 0 R", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1r", " 1 Right", " 1 R", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2r", " 2 Right", " 2 R", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3r", " 3 Right", " 3 R", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4r", " 4 Right", " 4 R", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5r", " 5 Right", " 5 R", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6r", " 6 Right", " 6 R", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7r", " 7 Right", " 7 R", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -686,47 +710,49 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_DYNA_SHM_LINK_STEREO,
+            MB_DYNA_SC_PREMIX,
             MB_COMMON(mb_dyna_sc_ms_bands),
-            MB_CHANNEL("_m", " Mid"),
-            MB_CHANNEL("_s", " Side"),
-            MB_FFT_METERS("_m", " Mid"),
+            MB_LINK("clink", "Mid/Side controls link", "M/S link"),
+            MB_CHANNEL("_m", " Mid", " M"),
+            MB_CHANNEL("_s", " Side", " S"),
+            MB_FFT_METERS("_m", " Mid", " M"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_s", " Side"),
+            MB_FFT_METERS("_s", " Side", " S"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1m", " 1 Mid", 0.0f, 40.0f),
-            MB_SPLIT("_2m", " 2 Mid", 1.0f, 100.0f),
-            MB_SPLIT("_3m", " 3 Mid", 0.0f, 252.0f),
-            MB_SPLIT("_4m", " 4 Mid", 1.0f, 632.0f),
-            MB_SPLIT("_5m", " 5 Mid", 0.0f, 1587.0f),
-            MB_SPLIT("_6m", " 6 Mid", 1.0f, 3984.0f),
-            MB_SPLIT("_7m", " 7 Mid", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1s", " 1 Side", 0.0f, 40.0f),
-            MB_SPLIT("_2s", " 2 Side", 1.0f, 100.0f),
-            MB_SPLIT("_3s", " 3 Side", 0.0f, 252.0f),
-            MB_SPLIT("_4s", " 4 Side", 1.0f, 632.0f),
-            MB_SPLIT("_5s", " 5 Side", 0.0f, 1587.0f),
-            MB_SPLIT("_6s", " 6 Side", 1.0f, 3984.0f),
-            MB_SPLIT("_7s", " 7 Side", 0.0f, 10000.0f),
-
-            MB_SC_SPLIT_BAND("_0m", " 0 Mid", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1m", " 1 Mid", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2m", " 2 Mid", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3m", " 3 Mid", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4m", " 4 Mid", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5m", " 5 Mid", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6m", " 6 Mid", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7m", " 7 Mid", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SC_SPLIT_BAND("_0s", " 0 Side", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1s", " 1 Side", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2s", " 2 Side", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3s", " 3 Side", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4s", " 4 Side", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5s", " 5 Side", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6s", " 6 Side", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7s", " 7 Side", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1m", " 1 Mid", " 1 M", 0.0f, 40.0f),
+            MB_SPLIT("_2m", " 2 Mid", " 2 M", 1.0f, 100.0f),
+            MB_SPLIT("_3m", " 3 Mid", " 3 M", 0.0f, 252.0f),
+            MB_SPLIT("_4m", " 4 Mid", " 4 M", 1.0f, 632.0f),
+            MB_SPLIT("_5m", " 5 Mid", " 5 M", 0.0f, 1587.0f),
+            MB_SPLIT("_6m", " 6 Mid", " 6 M", 1.0f, 3984.0f),
+            MB_SPLIT("_7m", " 7 Mid", " 7 M", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1s", " 1 Side", " 1 S", 0.0f, 40.0f),
+            MB_SPLIT("_2s", " 2 Side", " 2 S", 1.0f, 100.0f),
+            MB_SPLIT("_3s", " 3 Side", " 3 S", 0.0f, 252.0f),
+            MB_SPLIT("_4s", " 4 Side", " 4 S", 1.0f, 632.0f),
+            MB_SPLIT("_5s", " 5 Side", " 5 S", 0.0f, 1587.0f),
+            MB_SPLIT("_6s", " 6 Side", " 6 S", 1.0f, 3984.0f),
+            MB_SPLIT("_7s", " 7 Side", " 7 S", 0.0f, 10000.0f),
+
+            MB_SC_SPLIT_BAND("_0m", " 0 Mid", " 0 M", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1m", " 1 Mid", " 1 M", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2m", " 2 Mid", " 2 M", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3m", " 3 Mid", " 3 M", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4m", " 4 Mid", " 4 M", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5m", " 5 Mid", " 5 M", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6m", " 6 Mid", " 6 M", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7m", " 7 Mid", " 7 M", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SC_SPLIT_BAND("_0s", " 0 Side", " 0 S", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1s", " 1 Side", " 1 S", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2s", " 2 Side", " 2 S", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3s", " 3 Side", " 3 S", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4s", " 4 Side", " 4 S", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5s", " 5 Side", " 5 S", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6s", " 6 Side", " 6 S", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7s", " 7 Side", " 7 S", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0m", " 0 Mid"),
             MB_BAND_METERS("_1m", " 1 Mid"),
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/src/main/plug/mb_dyna_processor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/src/main/plug/mb_dyna_processor.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/src/main/plug/mb_dyna_processor.cpp	2025-03-01 12:43:18.408518637 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/src/main/plug/mb_dyna_processor.cpp	2025-08-26 18:16:17.501675486 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-dyna-processor
  * Created on: 25 нояб. 2020 г.
@@ -33,7 +33,7 @@
 #include <private/plugins/mb_dyna_processor.h>
 
 /* The size of temporary buffer for audio processing */
-#define MBDP_BUFFER_SIZE        0x400U
+#define MBDP_BUFFER_SIZE        0x200U
 
 namespace lsp
 {
@@ -95,7 +95,6 @@ namespace lsp
             nMode           = mode;
             bSidechain      = sc;
             bEnvUpdate      = true;
-            bUseExtSc       = false;
             bUseShmLink     = false;
             enXOver         = XOVER_MODERN;
             bStereoSplit    = false;
@@ -122,6 +121,31 @@ namespace lsp
             vBuffer         = NULL;
             vEnv            = NULL;
 
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
+
             pBypass         = NULL;
             pMode           = NULL;
             pInGain         = NULL;
@@ -239,14 +263,15 @@ namespace lsp
                 MBDP_BUFFER_SIZE * sizeof(float) + // Global vEnv for band signal processing
                 // Channel buffers
                 (
+                    MBDP_BUFFER_SIZE * sizeof(float) * 3 + // sPremix
                     MBDP_BUFFER_SIZE * sizeof(float) + // Global vSc[] for each channel
                     2 * filter_mesh_size + // vTr of each channel
                     filter_mesh_size + // vTrMem of each channel
                     MBDP_BUFFER_SIZE * sizeof(float) + // vInAnalyze for each channel
                     MBDP_BUFFER_SIZE * sizeof(float) + // vInBuffer for each channel
                     MBDP_BUFFER_SIZE * sizeof(float) + // vBuffer for each channel
-                    MBDP_BUFFER_SIZE * sizeof(float) + // vScBuffer for each channel
-                    ((bSidechain) ? MBDP_BUFFER_SIZE * sizeof(float) : 0) + // vExtScBuffer for each channel
+                    ((bSidechain) ? MBDP_BUFFER_SIZE * sizeof(float) : 0) + // vScBuffer for each channel
+                    MBDP_BUFFER_SIZE * sizeof(float) + // vExtScBuffer for each channel
                     MBDP_BUFFER_SIZE * sizeof(float) + // vShmLinkBuffer
                     // Band buffers
                     (
@@ -274,6 +299,14 @@ namespace lsp
             vBuffer         = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
             vEnv            = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
 
+            // Initialize pre-mix
+            for (size_t i=0; i<channels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
+            }
+
             // Initialize filters according to number of bands
             if (sFilters.init(meta::mb_dyna_processor::BANDS_MAX * channels) != STATUS_OK)
                 return;
@@ -313,8 +346,8 @@ namespace lsp
                 c->vInAnalyze   = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
                 c->vInBuffer    = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
                 c->vBuffer      = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
-                c->vScBuffer    = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
-                c->vExtScBuffer = (bSidechain) ? advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float)) : NULL;
+                c->vScBuffer    = (bSidechain) ? advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float)) : NULL;
+                c->vExtScBuffer = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
                 c->vShmBuffer   = advance_ptr_bytes<float>(ptr, MBDP_BUFFER_SIZE * sizeof(float));
                 c->vTr          = advance_ptr_bytes<float>(ptr, 2 * filter_mesh_size);
                 c->vTrMem       = advance_ptr_bytes<float>(ptr, filter_mesh_size);
@@ -474,6 +507,19 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
@@ -487,9 +533,9 @@ namespace lsp
             BIND_PORT(pShiftGain);
             BIND_PORT(pZoom);
             BIND_PORT(pEnvBoost);
-
-            // Skip band selector
             SKIP_PORT("Band selector");
+            if ((nMode == MBDP_LR) || (nMode == MBDP_MS))
+                SKIP_PORT("Separate channels link");
 
             lsp_trace("Binding channel ports");
             for (size_t i=0; i<channels; ++i)
@@ -762,10 +808,22 @@ namespace lsp
             return SCT_INTERNAL;
         }
 
+        void mb_dyna_processor::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void mb_dyna_processor::update_settings()
         {
             dspu::filter_params_t fp;
 
+            update_premix();
+
             // Determine number of channels
             size_t channels     = (nMode == MBDP_MONO) ? 1 : 2;
             int active_channels = 0;
@@ -794,7 +852,6 @@ namespace lsp
             fDryGain            = (dry_gain * drywet + 1.0f - drywet) * out_gain;
             fWetGain            = wet_gain * drywet * out_gain;
             fZoom               = pZoom->value();
-            bUseExtSc           = false;
             bUseShmLink         = false;
 
             // Configure channels
@@ -910,8 +967,6 @@ namespace lsp
                     size_t sc_src   = (sc != NULL) ? sc->value() : dspu::SCS_MIDDLE;
 
                     b->nScType      = decode_sidechain_type(b->pScType->value());
-                    if (b->nScType == SCT_EXTERNAL)
-                        bUseExtSc       = true;
                     if (b->nScType == SCT_LINK)
                         bUseShmLink     = true;
 
@@ -1376,7 +1431,7 @@ namespace lsp
         {
             switch (band->nScType)
             {
-                case SCT_INTERNAL: return channel->vScBuffer;
+                case SCT_INTERNAL: return (bSidechain) ? channel->vScBuffer : channel->vExtScBuffer;
                 case SCT_EXTERNAL: return channel->vExtScBuffer;
                 case SCT_LINK: return channel->vShmBuffer;
                 default: break;
@@ -1395,8 +1450,7 @@ namespace lsp
                 channel_t *r = &vChannels[1];
 
                 process_input_stereo(l->vInAnalyze, r->vInAnalyze, l->vIn, r->vIn, count);
-                if (bUseExtSc)
-                    process_input_stereo(l->vExtScBuffer, r->vExtScBuffer, l->vScIn, r->vScIn, count);
+                process_input_stereo(l->vExtScBuffer, r->vExtScBuffer, l->vScIn, r->vScIn, count);
                 if (bUseShmLink)
                     process_input_stereo(l->vShmBuffer, r->vShmBuffer, l->vShmIn, r->vShmIn, count);
             }
@@ -1404,8 +1458,7 @@ namespace lsp
             {
                 channel_t *c = &vChannels[0];
                 process_input_mono(c->vInAnalyze, c->vIn, count);
-                if (bUseExtSc)
-                    process_input_mono(c->vExtScBuffer, c->vScIn, count);
+                process_input_mono(c->vExtScBuffer, c->vScIn, count);
                 if (bUseShmLink)
                     process_input_mono(c->vShmBuffer, c->vShmIn, count);
             }
@@ -1414,14 +1467,130 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
             {
                 channel_t *c        = &vChannels[i];
-                c->sEnvBoost[0].process(c->vScBuffer, c->vInAnalyze, count);
-                if (bUseExtSc)
-                    c->sEnvBoost[1].process(c->vExtScBuffer, c->vExtScBuffer, count);
+                if (c->vScBuffer != NULL)
+                    c->sEnvBoost[0].process(c->vScBuffer, c->vInAnalyze, count);
+                c->sEnvBoost[1].process(c->vExtScBuffer, c->vExtScBuffer, count);
                 if (bUseShmLink)
                     c->sEnvBoost[2].process(c->vShmBuffer, c->vShmBuffer, count);
             }
         }
 
+        void mb_dyna_processor::premix_channel(uint32_t channel, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            channel_t * const c     = &vChannels[channel];
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            c->vIn                  = in_buf;
+            c->vOut                 = out_buf;
+            c->vScIn                = sc_buf;
+            c->vShmIn               = link_buf;
+
+            // Update pointers
+            sPremix.vIn[channel]   += count;
+            sPremix.vOut[channel]  += count;
+            if (sPremix.vSc[channel] != NULL)
+                sPremix.vSc[channel]   += count;
+            if (sPremix.vLink[channel] != NULL)
+                sPremix.vLink[channel] += count;
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vIn, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    c->vScIn            = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vScIn, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(c->vScIn, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    c->vScIn            = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vIn          = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vScIn        = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn       = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void mb_dyna_processor::process(size_t samples)
         {
             size_t channels     = (nMode == MBDP_MONO) ? 1 : 2;
@@ -1431,27 +1600,29 @@ namespace lsp
             {
                 channel_t *c        = &vChannels[i];
 
-                c->vIn              = c->pIn->buffer<float>();
-                c->vOut             = c->pOut->buffer<float>();
-                c->vScIn            = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : NULL;
-                c->vShmIn           = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *shm_buf  = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((shm_buf != NULL) && (shm_buf->active()))
-                    c->vShmIn           = shm_buf->buffer();
+                    sPremix.vLink[i]    = shm_buf->buffer();
             }
 
             // Do processing
             for (size_t offset = 0; offset < samples; )
             {
                 // Determine buffer size for processing
-                size_t to_process   = lsp_min(MBDP_BUFFER_SIZE, samples - offset);
+                const size_t to_process = lsp_min(MBDP_BUFFER_SIZE, samples - offset);
 
-                // Measure input signal level
+                // Premix and measure input signal level
                 for (size_t i=0; i<channels; ++i)
                 {
                     channel_t *c        = &vChannels[i];
-                    float level         = dsp::abs_max(c->vIn, to_process) * fInGain;
+
+                    premix_channel(i, to_process);
+                    const float level   = dsp::abs_max(c->vIn, to_process) * fInGain;
                     c->pInLvl->set_value(level);
                 }
 
@@ -1645,14 +1816,6 @@ namespace lsp
                     // Apply bypass
                     c->sDryDelay.process(vBuffer, c->vIn, to_process);
                     c->sBypass.process(c->vOut, vBuffer, c->vBuffer, to_process);
-
-                    // Update pointers
-                    c->vIn             += to_process;
-                    c->vOut            += to_process;
-                    if (c->vScIn != NULL)
-                        c->vScIn           += to_process;
-                    if (c->vShmIn != NULL)
-                        c->vShmIn          += to_process;
                 }
                 offset     += to_process;
             }
@@ -1986,7 +2149,6 @@ namespace lsp
             v->write("nMode", nMode);
             v->write("bSidechain", bSidechain);
             v->write("bEnvUpdate", bEnvUpdate);
-            v->write("bUseExtSc", bUseExtSc);
             v->write("bUseShmLink", bUseShmLink);
             v->write("enXOver", enXOver);
             v->write("bStereoSplit", bStereoSplit);
@@ -2153,6 +2315,32 @@ namespace lsp
             v->write("vIndexes", vIndexes);
             v->write("pIDisplay", pIDisplay);
 
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
+
             v->write("pBypass", pBypass);
             v->write("pMode", pMode);
             v->write("pInGain", pInGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/src/main/ui/mb_dyna_processor.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/src/main/ui/mb_dyna_processor.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-dyna-processor/src/main/ui/mb_dyna_processor.cpp	2025-03-01 12:43:18.408518637 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-dyna-processor/src/main/ui/mb_dyna_processor.cpp	2025-08-26 18:16:17.501675486 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-dyna-processor
  * Created on: 25 нояб. 2020 г.
@@ -348,7 +348,10 @@ namespace lsp
                     update_split_note_text(s);
 
                     if (flags & ui::PORT_USER_EDIT)
-                        freq_initiator = s;
+                    {
+                        if (s->bOn)
+                            freq_initiator = s;
+                    }
                     else if (s->bOn)
                         need_resort_active_splits = true;
                 }
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-mb-expander/.github/workflows/build.yml	2025-03-01 12:43:11.104562478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/.github/workflows/build.yml	2025-08-26 18:16:04.757799171 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-mb-expander/CHANGELOG	2025-03-01 12:43:11.104562478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/CHANGELOG	2025-08-26 18:16:04.757799171 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Added audio pre-mixing controls.
+* Added left/right and mid/side linking in the UI.
+* Updated build scripts and dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts and dependencies.
+
 === 1.0.24 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-mb-expander/dependencies.mk	2025-03-01 12:43:11.104562478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/dependencies.mk	2025-08-26 18:16:04.757799171 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/include/private/plugins/mb_expander.h 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/include/private/plugins/mb_expander.h
--- 1.2.21-5/modules/lsp-plugins-mb-expander/include/private/plugins/mb_expander.h	2025-03-01 12:43:11.104562478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/include/private/plugins/mb_expander.h	2025-08-26 18:16:04.757799171 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-expander
  * Created on: 3 авг. 2021 г.
@@ -80,6 +80,32 @@ namespace lsp
                     SCT_LINK,
                 };
 
+                typedef struct premix_t
+                {
+                    float                   fInToSc;            // Input -> Sidechain mix
+                    float                   fInToLink;          // Input -> Link mix
+                    float                   fLinkToIn;          // Link -> Input mix
+                    float                   fLinkToSc;          // Link -> Sidechain mix
+                    float                   fScToIn;            // Sidechain -> Input mix
+                    float                   fScToLink;          // Sidechain -> Link mix
+
+                    float                  *vIn[2];             // Input buffer
+                    float                  *vOut[2];            // Output buffer
+                    float                  *vSc[2];             // Sidechain buffer
+                    float                  *vLink[2];           // Link buffer
+
+                    float                  *vTmpIn[2];          // Replacement buffer for input
+                    float                  *vTmpLink[2];        // Replacement buffer for link
+                    float                  *vTmpSc[2];          // Replacement buffer for sidechain
+
+                    plug::IPort            *pInToSc;            // Input -> Sidechain mix
+                    plug::IPort            *pInToLink;          // Input -> Link mix
+                    plug::IPort            *pLinkToIn;          // Link -> Input mix
+                    plug::IPort            *pLinkToSc;          // Link -> Sidechain mix
+                    plug::IPort            *pScToIn;            // Sidechain -> Input mix
+                    plug::IPort            *pScToLink;          // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct exp_band_t
                 {
                     dspu::Sidechain     sSC;                // Sidechain module
@@ -210,7 +236,6 @@ namespace lsp
                 uint32_t                nMode;                  // Expander channel mode
                 bool                    bSidechain;             // External side chain
                 bool                    bEnvUpdate;             // Envelope filter update
-                bool                    bUseExtSc;              // External sidechain is in use
                 bool                    bUseShmLink;            // Shared memory link is in use
                 xover_mode_t            enXOver;                // Crossover mode
                 bool                    bStereoSplit;           // Stereo split mode
@@ -233,6 +258,8 @@ namespace lsp
                 uint32_t               *vIndexes;               // Analyzer FFT indexes
                 core::IDBuffer         *pIDisplay;              // Inline display buffer
 
+                premix_t                sPremix;                // Premix
+
                 plug::IPort            *pBypass;                // Bypass port
                 plug::IPort            *pMode;                  // Global operating mode
                 plug::IPort            *pInGain;                // Input gain port
@@ -256,6 +283,8 @@ namespace lsp
             protected:
                 void                do_destroy();
                 void                preprocess_channel_input(size_t count);
+                void                update_premix();
+                void                premix_channel(uint32_t channel, size_t count);
                 uint32_t            decode_sidechain_type(uint32_t sc) const;
                 void                process_input_mono(float *out, const float *in, size_t count);
                 void                process_input_stereo(float *l_out, float *r_out, const float *l_in, const float *r_in, size_t count);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-mb-expander/make/tools.mk	2025-03-01 12:43:11.104562478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/make/tools.mk	2025-08-26 18:16:04.757799171 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/modules.mk
--- 1.2.21-5/modules/lsp-plugins-mb-expander/modules.mk	2025-03-01 12:43:11.104562478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/modules.mk	2025-08-26 18:16:04.757799171 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/project.mk
--- 1.2.21-5/modules/lsp-plugins-mb-expander/project.mk	2025-03-01 12:43:11.104562478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/project.mk	2025-08-26 18:16:04.757799171 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Multiband Expander Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-mb-expander/res/doc/screenshots/mb_expander_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/doc/screenshots/mb_expander_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-expander/res/doc/screenshots/mb_expander_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/doc/screenshots/mb_expander_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-expander/res/doc/screenshots/mb_expander_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/doc/screenshots/mb_expander_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-expander/res/doc/screenshots/mb_expander_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/doc/screenshots/mb_expander_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-expander/res/doc/screenshots/sc_mb_expander_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/doc/screenshots/sc_mb_expander_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-expander/res/doc/screenshots/sc_mb_expander_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/doc/screenshots/sc_mb_expander_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-expander/res/doc/screenshots/sc_mb_expander_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/doc/screenshots/sc_mb_expander_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-expander/res/doc/screenshots/sc_mb_expander_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/doc/screenshots/sc_mb_expander_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/lr.xml
--- 1.2.21-5/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/lr.xml	2025-03-01 12:43:11.112562431 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/lr.xml	2025-08-26 18:16:04.769799054 +0000
@@ -1,4 +1,30 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'scm'; 'sla'; 'scr'; 'scp'; 'sclc'; 'schc'; 'sclf'; 'schf'; 'bfc'; 'sce'; 'scs'; 'sscs';
+			'em'; 'ee'; 'bs'; 'bm'; 'al'; 'at'; 'rrl'; 'rt'; 'ht'; 'er'; 'kn'; 'mk'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'cbe'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -244,12 +270,14 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<label text="labels.filters" pad.l="6"/>
 				<hbox spacing="4" pad.h="6">
 					<button id="flt_l" text="labels.chan.L_eft" size="22" ui:inject="Button_left"/>
 					<button id="flt_r" text="labels.chan.R_ight" size="22" ui:inject="Button_right"/>
 				</hbox>
 				<void hexpand="true"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
 			</hbox>
@@ -708,4 +736,44 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
+	
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/mono.xml
--- 1.2.21-5/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/mono.xml	2025-03-01 12:43:11.112562431 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/mono.xml	2025-08-26 18:16:04.769799054 +0000
@@ -1,4 +1,6 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -227,6 +229,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
 
 				<void hexpand="true"/>
@@ -653,4 +656,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/ms.xml
--- 1.2.21-5/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/ms.xml	2025-03-01 12:43:11.112562431 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/ms.xml	2025-08-26 18:16:04.769799054 +0000
@@ -1,4 +1,30 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'scm'; 'sla'; 'scr'; 'scp'; 'sclc'; 'schc'; 'sclf'; 'schf'; 'bfc'; 'sce'; 'scs'; 'sscs';
+			'em'; 'ee'; 'bs'; 'bm'; 'al'; 'at'; 'rrl'; 'rt'; 'ht'; 'er'; 'kn'; 'mk'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'cbe'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -244,12 +270,14 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<label text="labels.filters" pad.l="6"/>
 				<hbox spacing="4" pad.h="6">
 					<button id="flt_m" text="labels.chan.M_id" size="22" ui:inject="Button_mid"/>
 					<button id="flt_s" text="labels.chan.S_ide" size="22" ui:inject="Button_side"/>
 				</hbox>
 				<void hexpand="true"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
 			</hbox>
@@ -708,4 +736,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/stereo.xml	2025-03-01 12:43:11.112562431 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/res/main/ui/dynamics/expander/multiband/stereo.xml	2025-08-26 18:16:04.769799054 +0000
@@ -1,4 +1,6 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -238,6 +240,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan" pad.l="6"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<button id="ssplit" text="labels.stereo_split" size="22" ui:inject="Button_blue" pad.h="2"/>
@@ -671,4 +674,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/src/doc/manuals/plugins/mb_expander.php 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/src/doc/manuals/plugins/mb_expander.php
--- 1.2.21-5/modules/lsp-plugins-mb-expander/src/doc/manuals/plugins/mb_expander.php	2025-03-01 12:43:11.112562431 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/src/doc/manuals/plugins/mb_expander.php	2025-08-26 18:16:04.769799054 +0000
@@ -37,7 +37,7 @@
 	<ul>
 		<li>Unlike classic crossovers which use IIR (Infinite Impulse Response) filters to split signal into multiple bands and shift the phase
 		of the audio signal at band split points, the <b>Linear Phase</b> allows to use FIR (Finite Impulse Response) filters which are deprived of this.
-		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their tranfer function
+		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their transfer function
 		to look like the transfer function of analog filters, without deforming it's magnitude envelope near the nyquist frequency.</li>
 		<li>Unlike design of classic Linkwitz-Riley filters, the design of IIR filters provides shorter transition zone of the filter.</li>
 	</ul>
@@ -82,10 +82,15 @@
 	<li><b>Link</b> - the name of shared memory link used to receive sidechain signal</li>
 	<li><b>FFT<?= $sm ?> In</b> - enables FFT curve graph of input signal on the spectrum graph.</li>
 	<li><b>FFT<?= $sm ?> Out</b> - enables FFT curve graph of output signal on the spectrum graph.</li>
-	<li><b>Filters<?= $sm ?></b> - enables drawing tranfer function of each sidechain filter on the spectrum graph.</li>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
 	<?php if ($m == 's') { ?>
-	<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+		<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+	<?php } elseif ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
+	<?php } elseif ($m == 'ms') { ?>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } ?>
+	<li><b>Filters<?= $sm ?></b> - enables drawing transfer function of each sidechain filter on the spectrum graph.</li>
 	<li><b>Zoom</b> - zoom fader, allows to adjust zoom on the frequency chart.</li>
 </ul>
 <p><b>'Signal' section:</b></p>
@@ -191,3 +196,18 @@
 	<li><b>Expander Hold</b> - the time period the envelope holds it's maximum value before starting the release.</li>
 	<li><b>Gain</b> - the amount of gain applied to frequency band by the expander curve.</li>
 </ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
+
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/src/main/meta/mb_expander.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/src/main/meta/mb_expander.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-expander/src/main/meta/mb_expander.cpp	2025-03-01 12:43:11.112562431 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/src/main/meta/mb_expander.cpp	2025-08-26 18:16:04.769799054 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-expander
  * Created on: 3 авг. 2021 г.
@@ -26,7 +26,7 @@
 
 #define LSP_PLUGINS_MB_EXPANDER_VERSION_MAJOR       1
 #define LSP_PLUGINS_MB_EXPANDER_VERSION_MINOR       0
-#define LSP_PLUGINS_MB_EXPANDER_VERSION_MICRO       24
+#define LSP_PLUGINS_MB_EXPANDER_VERSION_MICRO       26
 
 #define LSP_PLUGINS_MB_EXPANDER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -166,51 +166,63 @@ namespace lsp
         #define MB_EXP_SHM_LINK_STEREO \
             OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
 
+        #define MB_EXP_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define MB_EXP_SC_PREMIX \
+            MB_EXP_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
+
         #define MB_COMMON(bands) \
             BYPASS, \
-            COMBO("mode", "Expander mode", 1, mb_global_mb_exp_modes), \
-            AMP_GAIN("g_in", "Input gain", mb_expander_metadata::IN_GAIN_DFL, 10.0f), \
-            AMP_GAIN("g_out", "Output gain", mb_expander_metadata::OUT_GAIN_DFL, 10.0f), \
-            AMP_GAIN("g_dry", "Dry gain", 0.0f, 10.0f), \
-            AMP_GAIN("g_wet", "Wet gain", 1.0f, 10.0f), \
-            PERCENTS("drywet", "Dry/Wet balance", 100.0f, 0.1f), \
-            LOG_CONTROL("react", "FFT reactivity", U_MSEC, mb_expander_metadata::FFT_REACT_TIME), \
-            AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \
-            LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, mb_expander_metadata::ZOOM), \
-            COMBO("envb", "Envelope boost", mb_expander_metadata::FB_DEFAULT, mb_exp_sc_boost), \
-            COMBO("bsel", "Band selection", mb_expander_metadata::SC_BAND_DFL, bands)
+            COMBO("mode", "Expander mode", "Mode", 1, mb_global_mb_exp_modes), \
+            AMP_GAIN("g_in", "Input gain", "Input gain", mb_expander_metadata::IN_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_out", "Output gain", "Output gain", mb_expander_metadata::OUT_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_dry", "Dry gain", "Dry", 0.0f, 10.0f), \
+            AMP_GAIN("g_wet", "Wet gain", "Wet", 1.0f, 10.0f), \
+            PERCENTS("drywet", "Dry/Wet balance", "Dry/Wet", 100.0f, 0.1f), \
+            LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, mb_expander_metadata::FFT_REACT_TIME), \
+            AMP_GAIN("shift", "Shift gain", "Shift", 1.0f, 100.0f), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, mb_expander_metadata::ZOOM), \
+            COMBO("envb", "Envelope boost", "Env boost", mb_expander_metadata::FB_DEFAULT, mb_exp_sc_boost), \
+            COMBO("bsel", "Band selection", "Band selector", mb_expander_metadata::SC_BAND_DFL, bands)
 
-        #define MB_CHANNEL(id, label) \
-            SWITCH("flt" id, "Band filter curves" label, 1.0f), \
+        #define MB_CHANNEL(id, label, alias) \
+            SWITCH("flt" id, "Band filter curves" label, "Show flt" alias, 1.0f), \
             MESH("ag" id, "Expander amplitude graph " label, 2, mb_expander_metadata::FFT_MESH_POINTS)
 
-        #define MB_SPLIT(id, label, enable, freq) \
-            SWITCH("cbe" id, "Expander band enable" label, enable), \
-            LOG_CONTROL_DFL("sf" id, "Split frequency" label, U_HZ, mb_expander_metadata::FREQ, freq)
-
-        #define MB_BAND_COMMON(id, label, x, total, fe, fs) \
-            COMBO("scm" id, "Sidechain mode" label, mb_expander_metadata::SC_MODE_DFL, mb_exp_sc_modes), \
-            CONTROL("sla" id, "Sidechain lookahead" label, U_MSEC, mb_expander_metadata::LOOKAHEAD), \
-            LOG_CONTROL("scr" id, "Sidechain reactivity" label, U_MSEC, mb_expander_metadata::REACTIVITY), \
-            AMP_GAIN100("scp" id, "Sidechain preamp" label, GAIN_AMP_0_DB), \
-            SWITCH("sclc" id, "Sidechain custom lo-cut" label, 0), \
-            SWITCH("schc" id, "Sidechain custom hi-cut" label, 0), \
-            LOG_CONTROL_DFL("sclf" id, "Sidechain lo-cut frequency" label, U_HZ, mb_expander_metadata::FREQ, fe), \
-            LOG_CONTROL_DFL("schf" id, "Sidechain hi-cut frequency" label, U_HZ, mb_expander_metadata::FREQ, fs), \
+        #define MB_SPLIT(id, label, alias, enable, freq) \
+            SWITCH("cbe" id, "Expander band enable" label, "Split on " alias, enable), \
+            LOG_CONTROL_DFL("sf" id, "Split frequency" label, "Split" alias, U_HZ, mb_expander_metadata::FREQ, freq)
+
+        #define MB_BAND_COMMON(id, label, alias, x, total, fe, fs) \
+            COMBO("scm" id, "Sidechain mode" label, "SC mode" alias, mb_expander_metadata::SC_MODE_DFL, mb_exp_sc_modes), \
+            CONTROL("sla" id, "Sidechain lookahead" label, "SC look" alias, U_MSEC, mb_expander_metadata::LOOKAHEAD), \
+            LOG_CONTROL("scr" id, "Sidechain reactivity" label, "SC react" alias, U_MSEC, mb_expander_metadata::REACTIVITY), \
+            AMP_GAIN100("scp" id, "Sidechain preamp" label, "SC preamp" alias, GAIN_AMP_0_DB), \
+            SWITCH("sclc" id, "Sidechain custom lo-cut" label, "SC LCF on" alias, 0), \
+            SWITCH("schc" id, "Sidechain custom hi-cut" label, "SC HCF on" alias, 0), \
+            LOG_CONTROL_DFL("sclf" id, "Sidechain lo-cut frequency" label, "SC LCF" alias, U_HZ, mb_expander_metadata::FREQ, fe), \
+            LOG_CONTROL_DFL("schf" id, "Sidechain hi-cut frequency" label, "SC HCF" alias, U_HZ, mb_expander_metadata::FREQ, fs), \
             MESH("bfc" id, "Side-chain band frequency chart" label, 2, mb_expander_metadata::MESH_POINTS + 4), \
             \
-            COMBO("em" id, "Expander mode" label, mb_expander_metadata::EM_DEFAULT, mb_exp_modes), \
-            SWITCH("ee" id, "Expander enable" label, 1.0f), \
-            SWITCH("bs" id, "Solo band" label, 0.0f), \
-            SWITCH("bm" id, "Mute band" label, 0.0f), \
-            LOG_CONTROL("al" id, "Attack threshold" label, U_GAIN_AMP, mb_expander_metadata::ATTACK_LVL), \
-            LOG_CONTROL("at" id, "Attack time" label, U_MSEC, mb_expander_metadata::ATTACK_TIME), \
-            LOG_CONTROL("rrl" id, "Release threshold" label, U_GAIN_AMP, mb_expander_metadata::RELEASE_LVL), \
-            LOG_CONTROL("rt" id, "Release time" label, U_MSEC, mb_expander_metadata::RELEASE_TIME), \
-            CONTROL("ht" id, "Hold time" label, U_MSEC, mb_expander_metadata::HOLD_TIME), \
-            LOG_CONTROL("er" id, "Ratio" label, U_NONE, mb_expander_metadata::RATIO), \
-            LOG_CONTROL("kn" id, "Knee" label, U_GAIN_AMP, mb_expander_metadata::KNEE), \
-            LOG_CONTROL("mk" id, "Makeup gain" label, U_GAIN_AMP, mb_expander_metadata::MAKEUP), \
+            COMBO("em" id, "Expander mode" label, "Mode " alias, mb_expander_metadata::EM_DEFAULT, mb_exp_modes), \
+            SWITCH("ee" id, "Expander enable" label, "On" alias, 1.0f), \
+            SWITCH("bs" id, "Solo band" label, "Solo" alias, 0.0f), \
+            SWITCH("bm" id, "Mute band" label, "Mute" alias, 0.0f), \
+            LOG_CONTROL("al" id, "Attack threshold" label, "Att thresh" alias, U_GAIN_AMP, mb_expander_metadata::ATTACK_LVL), \
+            LOG_CONTROL("at" id, "Attack time" label, "Att time" alias, U_MSEC, mb_expander_metadata::ATTACK_TIME), \
+            LOG_CONTROL("rrl" id, "Release threshold" label, "Rel thresh" alias, U_GAIN_AMP, mb_expander_metadata::RELEASE_LVL), \
+            LOG_CONTROL("rt" id, "Release time" label, "Rel time" alias, U_MSEC, mb_expander_metadata::RELEASE_TIME), \
+            CONTROL("ht" id, "Hold time" label, "Hold time" alias, U_MSEC, mb_expander_metadata::HOLD_TIME), \
+            LOG_CONTROL("er" id, "Ratio" label, "Ratio" alias, U_NONE, mb_expander_metadata::RATIO), \
+            LOG_CONTROL("kn" id, "Knee" label, "Knee" alias, U_GAIN_AMP, mb_expander_metadata::KNEE), \
+            LOG_CONTROL("mk" id, "Makeup gain" label, "Makeup" alias, U_GAIN_AMP, mb_expander_metadata::MAKEUP), \
             HUE_CTL("hue" id, "Hue " label, (float(x) / float(total))), \
             METER("fre" id, "Frequency range end" label, U_HZ,  mb_expander_metadata::OUT_FREQ), \
             MESH("ccg" id, "Expander curve graph" label, 2, mb_expander_metadata::CURVE_MESH_SIZE), \
@@ -221,45 +233,45 @@ namespace lsp
             METER_OUT_GAIN("clm" id, "Curve level meter" label, GAIN_AMP_P_36_DB), \
             METER_OUT_GAIN("rlm" id, "Reduction level meter" label, GAIN_AMP_P_24_DB)
 
-        #define MB_MONO_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_exp_sc_type), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_STEREO_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_exp_sc_type), \
-            COMBO("scs" id, "Sidechain source" label, 0, mb_exp_sc_source), \
-            COMBO("sscs" id, "Split sidechain source" label, 0, mb_exp_sc_split_source), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SPLIT_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_exp_sc_type), \
-            COMBO("scs" id, "Sidechain source" label, 0, mb_exp_sc_source), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_MONO_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_exp_sc_type_sc), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_STEREO_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_exp_sc_type_sc), \
-            COMBO("scs" id, "Sidechain source" label, 0, mb_exp_sc_source), \
-            COMBO("sscs" id, "Split sidechain source" label, 0, mb_exp_sc_split_source), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_SPLIT_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_exp_sc_type_sc), \
-            COMBO("scs" id, "Sidechain source" label, 0, mb_exp_sc_source), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
+        #define MB_MONO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_exp_sc_type), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_STEREO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_exp_sc_type), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_exp_sc_source), \
+            COMBO("sscs" id, "Split sidechain source" label, "SC split" alias, 0, mb_exp_sc_split_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SPLIT_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_exp_sc_type), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_exp_sc_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_MONO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_exp_sc_type_sc), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_STEREO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_exp_sc_type_sc), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_exp_sc_source), \
+            COMBO("sscs" id, "Split sidechain source" label, "SC split" alias, 0, mb_exp_sc_split_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_SPLIT_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_exp_sc_type_sc), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_exp_sc_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
 
         #define MB_STEREO_CHANNEL \
-            SWITCH("flt", "Band filter curves", 1.0f), \
+            SWITCH("flt", "Band filter curves", "Show filters", 1.0f), \
             MESH("ag_l", "Expander amplitude graph Left", 2, mb_expander_metadata::FFT_MESH_POINTS), \
             MESH("ag_r", "Expander amplitude graph Right", 2, mb_expander_metadata::FFT_MESH_POINTS), \
-            SWITCH("ssplit", "Stereo split", 0.0f)
+            SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f)
 
-        #define MB_FFT_METERS(id, label) \
-            SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-            SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
+        #define MB_FFT_METERS(id, label, alias) \
+            SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+            SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
             MESH("ifg" id, "Input FFT graph" label, 2, mb_expander_metadata::FFT_MESH_POINTS + 2), \
             MESH("ofg" id, "Output FFT graph" label, 2, mb_expander_metadata::FFT_MESH_POINTS)
 
@@ -267,32 +279,35 @@ namespace lsp
             METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
             METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB)
 
+        #define MB_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
 
         static const port_t mb_expander_mono_ports[] =
         {
             PORTS_MONO_PLUGIN,
             MB_EXP_SHM_LINK_MONO,
+            MB_EXP_PREMIX,
             MB_COMMON(exp_sc_bands),
-            MB_CHANNEL("", ""),
-            MB_FFT_METERS("", ""),
+            MB_CHANNEL("", "", ""),
+            MB_FFT_METERS("", "", ""),
             MB_CHANNEL_METERS("", ""),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_MONO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_MONO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_MONO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_MONO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_MONO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_MONO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_MONO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_MONO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_MONO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_MONO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_MONO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_MONO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_MONO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_MONO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_MONO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_MONO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0", " 0"),
             MB_BAND_METERS("_1", " 1"),
@@ -310,29 +325,30 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_EXP_SHM_LINK_STEREO,
+            MB_EXP_PREMIX,
             MB_COMMON(exp_sc_bands),
             MB_STEREO_CHANNEL,
-            MB_FFT_METERS("_l", " Left"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_STEREO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_STEREO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_STEREO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_STEREO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_STEREO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_STEREO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_STEREO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_STEREO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_STEREO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_STEREO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_STEREO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_STEREO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_STEREO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_STEREO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_STEREO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_STEREO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -359,47 +375,49 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_EXP_SHM_LINK_STEREO,
+            MB_EXP_PREMIX,
             MB_COMMON(exp_sc_lr_bands),
-            MB_CHANNEL("_l", " Left"),
-            MB_CHANNEL("_r", " Right"),
-            MB_FFT_METERS("_l", " Left"),
+            MB_LINK("clink", "Left/Right controls link", "L/R link"),
+            MB_CHANNEL("_l", " Left", " L"),
+            MB_CHANNEL("_r", " Right", " R"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1l", " 1 Left", 0.0f, 40.0f),
-            MB_SPLIT("_2l", " 2 Left", 1.0f, 100.0f),
-            MB_SPLIT("_3l", " 3 Left", 0.0f, 252.0f),
-            MB_SPLIT("_4l", " 4 Left", 1.0f, 632.0f),
-            MB_SPLIT("_5l", " 5 Left", 0.0f, 1587.0f),
-            MB_SPLIT("_6l", " 6 Left", 1.0f, 3984.0f),
-            MB_SPLIT("_7l", " 7 Left", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1r", " 1 Right", 0.0f, 40.0f),
-            MB_SPLIT("_2r", " 2 Right", 1.0f, 100.0f),
-            MB_SPLIT("_3r", " 3 Right", 0.0f, 252.0f),
-            MB_SPLIT("_4r", " 4 Right", 1.0f, 632.0f),
-            MB_SPLIT("_5r", " 5 Right", 0.0f, 1587.0f),
-            MB_SPLIT("_6r", " 6 Right", 1.0f, 3984.0f),
-            MB_SPLIT("_7r", " 7 Right", 0.0f, 10000.0f),
-
-            MB_SPLIT_BAND("_0l", " 0 Left", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1l", " 1 Left", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2l", " 2 Left", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3l", " 3 Left", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4l", " 4 Left", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5l", " 5 Left", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6l", " 6 Left", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7l", " 7 Left", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SPLIT_BAND("_0r", " 0 Right", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1r", " 1 Right", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2r", " 2 Right", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3r", " 3 Right", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4r", " 4 Right", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5r", " 5 Right", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6r", " 6 Right", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7r", " 7 Right", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1l", " 1 Left", " 1 L", 0.0f, 40.0f),
+            MB_SPLIT("_2l", " 2 Left", " 2 L", 1.0f, 100.0f),
+            MB_SPLIT("_3l", " 3 Left", " 3 L", 0.0f, 252.0f),
+            MB_SPLIT("_4l", " 4 Left", " 4 L", 1.0f, 632.0f),
+            MB_SPLIT("_5l", " 5 Left", " 5 L", 0.0f, 1587.0f),
+            MB_SPLIT("_6l", " 6 Left", " 6 L", 1.0f, 3984.0f),
+            MB_SPLIT("_7l", " 7 Left", " 7 L", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1r", " 1 Right", " 1 R", 0.0f, 40.0f),
+            MB_SPLIT("_2r", " 2 Right", " 2 R", 1.0f, 100.0f),
+            MB_SPLIT("_3r", " 3 Right", " 3 R", 0.0f, 252.0f),
+            MB_SPLIT("_4r", " 4 Right", " 4 R", 1.0f, 632.0f),
+            MB_SPLIT("_5r", " 5 Right", " 5 R", 0.0f, 1587.0f),
+            MB_SPLIT("_6r", " 6 Right", " 6 R", 1.0f, 3984.0f),
+            MB_SPLIT("_7r", " 7 Right", " 7 R", 0.0f, 10000.0f),
+
+            MB_SPLIT_BAND("_0l", " 0 Left", " 0 L", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1l", " 1 Left", " 1 L", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2l", " 2 Left", " 2 L", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3l", " 3 Left", " 3 L", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4l", " 4 Left", " 4 L", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5l", " 5 Left", " 5 L", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6l", " 6 Left", " 6 L", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7l", " 7 Left", " 7 L", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SPLIT_BAND("_0r", " 0 Right", " 0 R", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1r", " 1 Right", " 1 R", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2r", " 2 Right", " 2 R", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3r", " 3 Right", " 3 R", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4r", " 4 Right", " 4 R", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5r", " 5 Right", " 5 R", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6r", " 6 Right", " 6 R", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7r", " 7 Right", " 7 R", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -426,47 +444,49 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_EXP_SHM_LINK_STEREO,
+            MB_EXP_PREMIX,
             MB_COMMON(exp_sc_ms_bands),
-            MB_CHANNEL("_m", " Mid"),
-            MB_CHANNEL("_s", " Side"),
-            MB_FFT_METERS("_m", " Mid"),
+            MB_LINK("clink", "Mid/Side controls link", "M/S link"),
+            MB_CHANNEL("_m", " Mid", " M"),
+            MB_CHANNEL("_s", " Side", " S"),
+            MB_FFT_METERS("_m", " Mid", " M"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_s", " Side"),
+            MB_FFT_METERS("_s", " Side", " S"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1m", " 1 Mid", 0.0f, 40.0f),
-            MB_SPLIT("_2m", " 2 Mid", 1.0f, 100.0f),
-            MB_SPLIT("_3m", " 3 Mid", 0.0f, 252.0f),
-            MB_SPLIT("_4m", " 4 Mid", 1.0f, 632.0f),
-            MB_SPLIT("_5m", " 5 Mid", 0.0f, 1587.0f),
-            MB_SPLIT("_6m", " 6 Mid", 1.0f, 3984.0f),
-            MB_SPLIT("_7m", " 7 Mid", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1s", " 1 Side", 0.0f, 40.0f),
-            MB_SPLIT("_2s", " 2 Side", 1.0f, 100.0f),
-            MB_SPLIT("_3s", " 3 Side", 0.0f, 252.0f),
-            MB_SPLIT("_4s", " 4 Side", 1.0f, 632.0f),
-            MB_SPLIT("_5s", " 5 Side", 0.0f, 1587.0f),
-            MB_SPLIT("_6s", " 6 Side", 1.0f, 3984.0f),
-            MB_SPLIT("_7s", " 7 Side", 0.0f, 10000.0f),
-
-            MB_SPLIT_BAND("_0m", " 0 Mid", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1m", " 1 Mid", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2m", " 2 Mid", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3m", " 3 Mid", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4m", " 4 Mid", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5m", " 5 Mid", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6m", " 6 Mid", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7m", " 7 Mid", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SPLIT_BAND("_0s", " 0 Side", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1s", " 1 Side", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2s", " 2 Side", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3s", " 3 Side", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4s", " 4 Side", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5s", " 5 Side", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6s", " 6 Side", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7s", " 7 Side", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1m", " 1 Mid", " 1 M", 0.0f, 40.0f),
+            MB_SPLIT("_2m", " 2 Mid", " 2 M", 1.0f, 100.0f),
+            MB_SPLIT("_3m", " 3 Mid", " 3 M", 0.0f, 252.0f),
+            MB_SPLIT("_4m", " 4 Mid", " 4 M", 1.0f, 632.0f),
+            MB_SPLIT("_5m", " 5 Mid", " 5 M", 0.0f, 1587.0f),
+            MB_SPLIT("_6m", " 6 Mid", " 6 M", 1.0f, 3984.0f),
+            MB_SPLIT("_7m", " 7 Mid", " 7 M", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1s", " 1 Side", " 1 S", 0.0f, 40.0f),
+            MB_SPLIT("_2s", " 2 Side", " 2 S", 1.0f, 100.0f),
+            MB_SPLIT("_3s", " 3 Side", " 3 S", 0.0f, 252.0f),
+            MB_SPLIT("_4s", " 4 Side", " 4 S", 1.0f, 632.0f),
+            MB_SPLIT("_5s", " 5 Side", " 5 S", 0.0f, 1587.0f),
+            MB_SPLIT("_6s", " 6 Side", " 6 S", 1.0f, 3984.0f),
+            MB_SPLIT("_7s", " 7 Side", " 7 S", 0.0f, 10000.0f),
+
+            MB_SPLIT_BAND("_0m", " 0 Mid", " 0 M", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1m", " 1 Mid", " 1 M", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2m", " 2 Mid", " 2 M", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3m", " 3 Mid", " 3 M", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4m", " 4 Mid", " 4 M", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5m", " 5 Mid", " 5 M", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6m", " 6 Mid", " 6 M", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7m", " 7 Mid", " 7 M", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SPLIT_BAND("_0s", " 0 Side", " 0 S", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1s", " 1 Side", " 1 S", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2s", " 2 Side", " 2 S", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3s", " 3 Side", " 3 S", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4s", " 4 Side", " 4 S", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5s", " 5 Side", " 5 S", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6s", " 6 Side", " 6 S", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7s", " 7 Side", " 7 S", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0m", " 0 Mid"),
             MB_BAND_METERS("_1m", " 1 Mid"),
@@ -494,27 +514,28 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             MB_EXP_SHM_LINK_MONO,
+            MB_EXP_SC_PREMIX,
             MB_COMMON(exp_sc_bands),
-            MB_CHANNEL("", ""),
-            MB_FFT_METERS("", ""),
+            MB_CHANNEL("", "", ""),
+            MB_FFT_METERS("", "", ""),
             MB_CHANNEL_METERS("", ""),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_SC_MONO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_SC_MONO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_SC_MONO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_SC_MONO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_SC_MONO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_SC_MONO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_MONO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_MONO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_SC_MONO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_SC_MONO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_SC_MONO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_SC_MONO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_SC_MONO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_SC_MONO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_MONO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_MONO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0", " 0"),
             MB_BAND_METERS("_1", " 1"),
@@ -533,29 +554,30 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_EXP_SHM_LINK_STEREO,
+            MB_EXP_SC_PREMIX,
             MB_COMMON(exp_sc_bands),
             MB_STEREO_CHANNEL,
-            MB_FFT_METERS("_l", " Left"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_SC_STEREO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_SC_STEREO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_SC_STEREO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_SC_STEREO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_SC_STEREO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_SC_STEREO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_STEREO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_STEREO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_SC_STEREO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_SC_STEREO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_SC_STEREO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_SC_STEREO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_SC_STEREO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_SC_STEREO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_STEREO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_STEREO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -583,47 +605,49 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_EXP_SHM_LINK_STEREO,
+            MB_EXP_SC_PREMIX,
             MB_COMMON(exp_sc_lr_bands),
-            MB_CHANNEL("_l", " Left"),
-            MB_CHANNEL("_r", " Right"),
-            MB_FFT_METERS("_l", " Left"),
+            MB_LINK("clink", "Left/Right controls link", "L/R link"),
+            MB_CHANNEL("_l", " Left", " L"),
+            MB_CHANNEL("_r", " Right", " R"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1l", " 1 Left", 0.0f, 40.0f),
-            MB_SPLIT("_2l", " 2 Left", 1.0f, 100.0f),
-            MB_SPLIT("_3l", " 3 Left", 0.0f, 252.0f),
-            MB_SPLIT("_4l", " 4 Left", 1.0f, 632.0f),
-            MB_SPLIT("_5l", " 5 Left", 0.0f, 1587.0f),
-            MB_SPLIT("_6l", " 6 Left", 1.0f, 3984.0f),
-            MB_SPLIT("_7l", " 7 Left", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1r", " 1 Right", 0.0f, 40.0f),
-            MB_SPLIT("_2r", " 2 Right", 1.0f, 100.0f),
-            MB_SPLIT("_3r", " 3 Right", 0.0f, 252.0f),
-            MB_SPLIT("_4r", " 4 Right", 1.0f, 632.0f),
-            MB_SPLIT("_5r", " 5 Right", 0.0f, 1587.0f),
-            MB_SPLIT("_6r", " 6 Right", 1.0f, 3984.0f),
-            MB_SPLIT("_7r", " 7 Right", 0.0f, 10000.0f),
-
-            MB_SC_SPLIT_BAND("_0l", " 0 Left", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1l", " 1 Left", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2l", " 2 Left", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3l", " 3 Left", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4l", " 4 Left", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5l", " 5 Left", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6l", " 6 Left", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7l", " 7 Left", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SC_SPLIT_BAND("_0r", " 0 Right", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1r", " 1 Right", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2r", " 2 Right", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3r", " 3 Right", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4r", " 4 Right", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5r", " 5 Right", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6r", " 6 Right", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7r", " 7 Right", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1l", " 1 Left", " 1 L", 0.0f, 40.0f),
+            MB_SPLIT("_2l", " 2 Left", " 2 L", 1.0f, 100.0f),
+            MB_SPLIT("_3l", " 3 Left", " 3 L", 0.0f, 252.0f),
+            MB_SPLIT("_4l", " 4 Left", " 4 L", 1.0f, 632.0f),
+            MB_SPLIT("_5l", " 5 Left", " 5 L", 0.0f, 1587.0f),
+            MB_SPLIT("_6l", " 6 Left", " 6 L", 1.0f, 3984.0f),
+            MB_SPLIT("_7l", " 7 Left", " 7 L", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1r", " 1 Right", " 1 R", 0.0f, 40.0f),
+            MB_SPLIT("_2r", " 2 Right", " 2 R", 1.0f, 100.0f),
+            MB_SPLIT("_3r", " 3 Right", " 3 R", 0.0f, 252.0f),
+            MB_SPLIT("_4r", " 4 Right", " 4 R", 1.0f, 632.0f),
+            MB_SPLIT("_5r", " 5 Right", " 5 R", 0.0f, 1587.0f),
+            MB_SPLIT("_6r", " 6 Right", " 6 R", 1.0f, 3984.0f),
+            MB_SPLIT("_7r", " 7 Right", " 7 R", 0.0f, 10000.0f),
+
+            MB_SC_SPLIT_BAND("_0l", " 0 Left", " 0 L", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1l", " 1 Left", " 1 L", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2l", " 2 Left", " 2 L", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3l", " 3 Left", " 3 L", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4l", " 4 Left", " 4 L", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5l", " 5 Left", " 5 L", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6l", " 6 Left", " 6 L", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7l", " 7 Left", " 7 L", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SC_SPLIT_BAND("_0r", " 0 Right", " 0 R", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1r", " 1 Right", " 1 R", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2r", " 2 Right", " 2 R", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3r", " 3 Right", " 3 R", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4r", " 4 Right", " 4 R", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5r", " 5 Right", " 5 R", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6r", " 6 Right", " 6 R", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7r", " 7 Right", " 7 R", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -651,47 +675,49 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_EXP_SHM_LINK_STEREO,
+            MB_EXP_SC_PREMIX,
             MB_COMMON(exp_sc_ms_bands),
-            MB_CHANNEL("_m", " Mid"),
-            MB_CHANNEL("_s", " Side"),
-            MB_FFT_METERS("_m", " Mid"),
+            MB_LINK("clink", "Mid/Side controls link", "M/S link"),
+            MB_CHANNEL("_m", " Mid", " M"),
+            MB_CHANNEL("_s", " Side", " S"),
+            MB_FFT_METERS("_m", " Mid", " M"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_s", " Side"),
+            MB_FFT_METERS("_s", " Side", " S"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1m", " 1 Mid", 0.0f, 40.0f),
-            MB_SPLIT("_2m", " 2 Mid", 1.0f, 100.0f),
-            MB_SPLIT("_3m", " 3 Mid", 0.0f, 252.0f),
-            MB_SPLIT("_4m", " 4 Mid", 1.0f, 632.0f),
-            MB_SPLIT("_5m", " 5 Mid", 0.0f, 1587.0f),
-            MB_SPLIT("_6m", " 6 Mid", 1.0f, 3984.0f),
-            MB_SPLIT("_7m", " 7 Mid", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1s", " 1 Side", 0.0f, 40.0f),
-            MB_SPLIT("_2s", " 2 Side", 1.0f, 100.0f),
-            MB_SPLIT("_3s", " 3 Side", 0.0f, 252.0f),
-            MB_SPLIT("_4s", " 4 Side", 1.0f, 632.0f),
-            MB_SPLIT("_5s", " 5 Side", 0.0f, 1587.0f),
-            MB_SPLIT("_6s", " 6 Side", 1.0f, 3984.0f),
-            MB_SPLIT("_7s", " 7 Side", 0.0f, 10000.0f),
-
-            MB_SC_SPLIT_BAND("_0m", " 0 Mid", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1m", " 1 Mid", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2m", " 2 Mid", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3m", " 3 Mid", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4m", " 4 Mid", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5m", " 5 Mid", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6m", " 6 Mid", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7m", " 7 Mid", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SC_SPLIT_BAND("_0s", " 0 Side", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1s", " 1 Side", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2s", " 2 Side", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3s", " 3 Side", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4s", " 4 Side", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5s", " 5 Side", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6s", " 6 Side", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7s", " 7 Side", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1m", " 1 Mid", " 1 M", 0.0f, 40.0f),
+            MB_SPLIT("_2m", " 2 Mid", " 2 M", 1.0f, 100.0f),
+            MB_SPLIT("_3m", " 3 Mid", " 3 M", 0.0f, 252.0f),
+            MB_SPLIT("_4m", " 4 Mid", " 4 M", 1.0f, 632.0f),
+            MB_SPLIT("_5m", " 5 Mid", " 5 M", 0.0f, 1587.0f),
+            MB_SPLIT("_6m", " 6 Mid", " 6 M", 1.0f, 3984.0f),
+            MB_SPLIT("_7m", " 7 Mid", " 7 M", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1s", " 1 Side", " 1 S", 0.0f, 40.0f),
+            MB_SPLIT("_2s", " 2 Side", " 2 S", 1.0f, 100.0f),
+            MB_SPLIT("_3s", " 3 Side", " 3 S", 0.0f, 252.0f),
+            MB_SPLIT("_4s", " 4 Side", " 4 S", 1.0f, 632.0f),
+            MB_SPLIT("_5s", " 5 Side", " 5 S", 0.0f, 1587.0f),
+            MB_SPLIT("_6s", " 6 Side", " 6 S", 1.0f, 3984.0f),
+            MB_SPLIT("_7s", " 7 Side", " 7 S", 0.0f, 10000.0f),
+
+            MB_SC_SPLIT_BAND("_0m", " 0 Mid", " 0 M", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1m", " 1 Mid", " 1 M", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2m", " 2 Mid", " 2 M", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3m", " 3 Mid", " 3 M", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4m", " 4 Mid", " 4 M", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5m", " 5 Mid", " 5 M", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6m", " 6 Mid", " 6 M", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7m", " 7 Mid", " 7 M", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SC_SPLIT_BAND("_0s", " 0 Side", " 0 S", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1s", " 1 Side", " 1 S", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2s", " 2 Side", " 2 S", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3s", " 3 Side", " 3 S", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4s", " 4 Side", " 4 S", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5s", " 5 Side", " 5 S", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6s", " 6 Side", " 6 S", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7s", " 7 Side", " 7 S", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0m", " 0 Mid"),
             MB_BAND_METERS("_1m", " 1 Mid"),
@@ -720,7 +746,11 @@ namespace lsp
             "Multiband Expander",
             B_MB_DYNAMICS,
             "TR_Ox7U_a84",
-            "This plugin performs multiband expansion of input signsl. Flexible sidechain\ncontrol configuration provided. As opposite to most available multiband\nexpanders, this expander provides numerous special functions: 'modern'\noperating mode, 'Sidechain boost', 'Lookahead' option and up to 8 frequency\nbands for processing."
+            "This plugin performs multiband expansion of input signal. Flexible sidechain\n"
+            "control configuration provided. As opposite to most available multiband\n"
+            "expanders, this expander provides numerous special functions: 'modern'\n"
+            "operating mode, 'Sidechain boost', 'Lookahead' option and up to 8 frequency\n"
+            "bands for processing."
         };
 
         // Multiband Expander
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/src/main/plug/mb_expander.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/src/main/plug/mb_expander.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-expander/src/main/plug/mb_expander.cpp	2025-03-01 12:43:11.116562406 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/src/main/plug/mb_expander.cpp	2025-08-26 18:16:04.769799054 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-expander
  * Created on: 3 авг. 2021 г.
@@ -30,7 +30,7 @@
 #include <lsp-plug.in/shared/debug.h>
 #include <lsp-plug.in/shared/id_colors.h>
 
-#define MBE_BUFFER_SIZE         0x400U
+#define MBE_BUFFER_SIZE         0x200U
 
 namespace lsp
 {
@@ -91,7 +91,6 @@ namespace lsp
             nMode           = mode;
             bSidechain      = sc;
             bEnvUpdate      = true;
-            bUseExtSc       = false;
             bUseShmLink     = false;
             enXOver         = XOVER_MODERN;
             bStereoSplit    = false;
@@ -118,6 +117,31 @@ namespace lsp
             vBuffer         = NULL;
             vEnv            = NULL;
 
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
+
             pBypass         = NULL;
             pMode           = NULL;
             pInGain         = NULL;
@@ -261,7 +285,7 @@ namespace lsp
             plug::Module::init(wrapper, ports);
 
             // Determine number of channels
-            size_t channels     = (nMode == MBEM_MONO) ? 1 : 2;
+            const size_t channels       = (nMode == MBEM_MONO) ? 1 : 2;
 
             // Allocate channels
             vChannels       = new channel_t[channels];
@@ -288,14 +312,15 @@ namespace lsp
                     MBE_BUFFER_SIZE * sizeof(float) + // Global vEnv for band signal processing
                     // Channel buffers
                     (
+                        MBE_BUFFER_SIZE * sizeof(float) * 3 + // sPremix
                         MBE_BUFFER_SIZE * sizeof(float) + // Global vSc[] for each channel
                         2 * filter_mesh_size + // vTr of each channel
                         filter_mesh_size + // vTrMem of each channel
                         MBE_BUFFER_SIZE * sizeof(float) + // vInAnalyze for each channel
                         MBE_BUFFER_SIZE * sizeof(float) + // vInBuffer for each channel
                         MBE_BUFFER_SIZE * sizeof(float) + // vBuffer for each channel
-                        MBE_BUFFER_SIZE * sizeof(float) + // vScBuffer for each channel
-                        ((bSidechain) ? MBE_BUFFER_SIZE * sizeof(float) : 0) + // vExtScBuffer for each channel
+                        ((bSidechain) ? MBE_BUFFER_SIZE * sizeof(float) : 0) + // vScBuffer for each channel
+                        MBE_BUFFER_SIZE * sizeof(float) + // vExtScBuffer for each channel
                         MBE_BUFFER_SIZE * sizeof(float) + // vShmLinkBuffer
                         // Band buffers
                         (
@@ -323,6 +348,14 @@ namespace lsp
             vBuffer         = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
             vEnv            = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
 
+            // Initialize pre-mix
+            for (size_t i=0; i<channels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
+            }
+
             // Initialize filters according to number of bands
             if (sFilters.init(meta::mb_expander_metadata::BANDS_MAX * channels) != STATUS_OK)
                 return;
@@ -362,8 +395,8 @@ namespace lsp
                 c->vInAnalyze   = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
                 c->vInBuffer    = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
                 c->vBuffer      = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
-                c->vScBuffer    = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
-                c->vExtScBuffer = (bSidechain) ? advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float)) : NULL;
+                c->vScBuffer    = (bSidechain) ? advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float)) : NULL;
+                c->vExtScBuffer = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
                 c->vShmBuffer   = advance_ptr_bytes<float>(ptr, MBE_BUFFER_SIZE * sizeof(float));
                 c->vTr          = advance_ptr_bytes<float>(ptr, 2 * filter_mesh_size);
                 c->vTrMem       = advance_ptr_bytes<float>(ptr, filter_mesh_size);
@@ -510,6 +543,19 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
@@ -524,6 +570,8 @@ namespace lsp
             BIND_PORT(pZoom);
             BIND_PORT(pEnvBoost);
             SKIP_PORT("Band selector"); // Skip band selector
+            if ((nMode == MBEM_LR) || (nMode == MBEM_MS))
+                SKIP_PORT("Separate channels link");
 
             lsp_trace("Binding channel ports");
             for (size_t i=0; i<channels; ++i)
@@ -700,10 +748,22 @@ namespace lsp
             return SCT_INTERNAL;
         }
 
+        void mb_expander::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void mb_expander::update_settings()
         {
             dspu::filter_params_t fp;
 
+            update_premix();
+
             // Determine number of channels
             size_t channels     = (nMode == MBEM_MONO) ? 1 : 2;
             int active_channels = 0;
@@ -732,7 +792,6 @@ namespace lsp
             fDryGain            = (dry_gain * drywet + 1.0f - drywet) * out_gain;
             fWetGain            = wet_gain * drywet * out_gain;
             fZoom               = pZoom->value();
-            bUseExtSc           = false;
             bUseShmLink         = false;
 
             // Configure channels
@@ -854,8 +913,6 @@ namespace lsp
                     b->pRelLevelOut->set_value(release);
 
                     b->nScType      = decode_sidechain_type(b->pScType->value());
-                    if (b->nScType == SCT_EXTERNAL)
-                        bUseExtSc       = true;
                     if (b->nScType == SCT_LINK)
                         bUseShmLink     = true;
 
@@ -1322,7 +1379,7 @@ namespace lsp
         {
             switch (band->nScType)
             {
-                case SCT_INTERNAL: return channel->vScBuffer;
+                case SCT_INTERNAL: return (bSidechain) ? channel->vScBuffer : channel->vExtScBuffer;
                 case SCT_EXTERNAL: return channel->vExtScBuffer;
                 case SCT_LINK: return channel->vShmBuffer;
                 default: break;
@@ -1341,8 +1398,7 @@ namespace lsp
                 channel_t *r = &vChannels[1];
 
                 process_input_stereo(l->vInAnalyze, r->vInAnalyze, l->vIn, r->vIn, count);
-                if (bUseExtSc)
-                    process_input_stereo(l->vExtScBuffer, r->vExtScBuffer, l->vScIn, r->vScIn, count);
+                process_input_stereo(l->vExtScBuffer, r->vExtScBuffer, l->vScIn, r->vScIn, count);
                 if (bUseShmLink)
                     process_input_stereo(l->vShmBuffer, r->vShmBuffer, l->vShmIn, r->vShmIn, count);
             }
@@ -1350,8 +1406,7 @@ namespace lsp
             {
                 channel_t *c = &vChannels[0];
                 process_input_mono(c->vInAnalyze, c->vIn, count);
-                if (bUseExtSc)
-                    process_input_mono(c->vExtScBuffer, c->vScIn, count);
+                process_input_mono(c->vExtScBuffer, c->vScIn, count);
                 if (bUseShmLink)
                     process_input_mono(c->vShmBuffer, c->vShmIn, count);
             }
@@ -1360,14 +1415,130 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
             {
                 channel_t *c        = &vChannels[i];
-                c->sEnvBoost[0].process(c->vScBuffer, c->vInAnalyze, count);
-                if (bUseExtSc)
-                    c->sEnvBoost[1].process(c->vExtScBuffer, c->vExtScBuffer, count);
+                if (c->vScBuffer != NULL)
+                    c->sEnvBoost[0].process(c->vScBuffer, c->vInAnalyze, count);
+                c->sEnvBoost[1].process(c->vExtScBuffer, c->vExtScBuffer, count);
                 if (bUseShmLink)
                     c->sEnvBoost[2].process(c->vShmBuffer, c->vShmBuffer, count);
             }
         }
 
+        void mb_expander::premix_channel(uint32_t channel, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            channel_t * const c     = &vChannels[channel];
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            c->vIn                  = in_buf;
+            c->vOut                 = out_buf;
+            c->vScIn                = sc_buf;
+            c->vShmIn               = link_buf;
+
+            // Update pointers
+            sPremix.vIn[channel]   += count;
+            sPremix.vOut[channel]  += count;
+            if (sPremix.vSc[channel] != NULL)
+                sPremix.vSc[channel]   += count;
+            if (sPremix.vLink[channel] != NULL)
+                sPremix.vLink[channel] += count;
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vIn, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    c->vScIn            = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vScIn, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(c->vScIn, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    c->vScIn            = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vIn          = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vScIn        = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn       = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void mb_expander::process(size_t samples)
         {
             size_t channels     = (nMode == MBEM_MONO) ? 1 : 2;
@@ -1377,27 +1548,29 @@ namespace lsp
             {
                 channel_t *c        = &vChannels[i];
 
-                c->vIn              = c->pIn->buffer<float>();
-                c->vOut             = c->pOut->buffer<float>();
-                c->vScIn            = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : NULL;
-                c->vShmIn           = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *shm_buf  = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((shm_buf != NULL) && (shm_buf->active()))
-                    c->vShmIn           = shm_buf->buffer();
+                    sPremix.vLink[i]    = shm_buf->buffer();
             }
 
             // Do processing
             for (size_t offset = 0; offset < samples; )
             {
                 // Determine buffer size for processing
-                size_t to_process   = lsp_min(MBE_BUFFER_SIZE, samples - offset);
+                const size_t to_process = lsp_min(MBE_BUFFER_SIZE, samples - offset);
 
-                // Measure input signal level
+                // Premix and measure input signal level
                 for (size_t i=0; i<channels; ++i)
                 {
                     channel_t *c        = &vChannels[i];
-                    float level         = dsp::abs_max(c->vIn, to_process) * fInGain;
+
+                    premix_channel(i, to_process);
+                    const float level   = dsp::abs_max(c->vIn, to_process) * fInGain;
                     c->pInLvl->set_value(level);
                 }
 
@@ -1591,14 +1764,6 @@ namespace lsp
                     // Apply bypass
                     c->sDryDelay.process(vBuffer, c->vIn, to_process);
                     c->sBypass.process(c->vOut, vBuffer, c->vBuffer, to_process);
-
-                    // Update pointers
-                    c->vIn             += to_process;
-                    c->vOut            += to_process;
-                    if (c->vScIn != NULL)
-                        c->vScIn           += to_process;
-                    if (c->vShmIn != NULL)
-                        c->vShmIn          += to_process;
                 }
                 offset     += to_process;
             }
@@ -1912,7 +2077,6 @@ namespace lsp
             v->write("nMode", nMode);
             v->write("bSidechain", bSidechain);
             v->write("bEnvUpdate", bEnvUpdate);
-            v->write("bUseExtSc", bUseExtSc);
             v->write("bUseShmLink", bUseShmLink);
             v->write("enXOver", enXOver);
             v->write("bStereoSplit", bStereoSplit);
@@ -2073,6 +2237,32 @@ namespace lsp
             v->write("vIndexes", vIndexes);
             v->write("pIDisplay", pIDisplay);
 
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
+
             v->write("pBypass", pBypass);
             v->write("pMode", pMode);
             v->write("pInGain", pInGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-expander/src/main/ui/mb_expander.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/src/main/ui/mb_expander.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-expander/src/main/ui/mb_expander.cpp	2025-03-01 12:43:11.116562406 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-expander/src/main/ui/mb_expander.cpp	2025-08-26 18:16:04.769799054 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-expander
  * Created on: 25 нояб. 2020 г.
@@ -347,7 +347,10 @@ namespace lsp
                     update_split_note_text(s);
 
                     if (flags & ui::PORT_USER_EDIT)
-                        freq_initiator = s;
+                    {
+                        if (s->bOn)
+                            freq_initiator = s;
+                    }
                     else if (s->bOn)
                         need_resort_active_splits = true;
                 }
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-mb-gate/.github/workflows/build.yml	2025-03-01 12:43:14.996539117 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/.github/workflows/build.yml	2025-08-26 18:16:06.245784729 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-mb-gate/CHANGELOG	2025-03-01 12:43:14.996539117 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/CHANGELOG	2025-08-26 18:16:06.245784729 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Added audio pre-mixing controls.
+* Added left/right and mid/side linking in the UI.
+* Updated build scripts and dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts and dependencies.
+
 === 1.0.24 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-mb-gate/dependencies.mk	2025-03-01 12:43:14.996539117 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/dependencies.mk	2025-08-26 18:16:06.245784729 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/include/private/plugins/mb_gate.h 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/include/private/plugins/mb_gate.h
--- 1.2.21-5/modules/lsp-plugins-mb-gate/include/private/plugins/mb_gate.h	2025-03-01 12:43:14.996539117 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/include/private/plugins/mb_gate.h	2025-08-26 18:16:06.245784729 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-gate
  * Created on: 3 авг. 2021 г.
@@ -82,6 +82,32 @@ namespace lsp
                     SCT_LINK,
                 };
 
+                typedef struct premix_t
+                {
+                    float                   fInToSc;            // Input -> Sidechain mix
+                    float                   fInToLink;          // Input -> Link mix
+                    float                   fLinkToIn;          // Link -> Input mix
+                    float                   fLinkToSc;          // Link -> Sidechain mix
+                    float                   fScToIn;            // Sidechain -> Input mix
+                    float                   fScToLink;          // Sidechain -> Link mix
+
+                    float                  *vIn[2];             // Input buffer
+                    float                  *vOut[2];            // Output buffer
+                    float                  *vSc[2];             // Sidechain buffer
+                    float                  *vLink[2];           // Link buffer
+
+                    float                  *vTmpIn[2];          // Replacement buffer for input
+                    float                  *vTmpLink[2];        // Replacement buffer for link
+                    float                  *vTmpSc[2];          // Replacement buffer for sidechain
+
+                    plug::IPort            *pInToSc;            // Input -> Sidechain mix
+                    plug::IPort            *pInToLink;          // Input -> Link mix
+                    plug::IPort            *pLinkToIn;          // Link -> Input mix
+                    plug::IPort            *pLinkToSc;          // Link -> Sidechain mix
+                    plug::IPort            *pScToIn;            // Sidechain -> Input mix
+                    plug::IPort            *pScToLink;          // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct gate_band_t
                 {
                     dspu::Sidechain     sSC;                // Sidechain module
@@ -212,7 +238,6 @@ namespace lsp
                 uint32_t                nMode;                  // Gate channel mode
                 bool                    bSidechain;             // External side chain
                 bool                    bEnvUpdate;             // Envelope filter update
-                bool                    bUseExtSc;              // External sidechain is in use
                 bool                    bUseShmLink;            // Shared memory link is in use
                 xover_mode_t            enXOver;                // Crossover mode
                 bool                    bStereoSplit;           // Stereo split mode
@@ -235,6 +260,8 @@ namespace lsp
                 uint32_t               *vIndexes;               // Analyzer FFT indexes
                 core::IDBuffer         *pIDisplay;              // Inline display buffer
 
+                premix_t                sPremix;                // Premix
+
                 plug::IPort            *pBypass;                // Bypass port
                 plug::IPort            *pMode;                  // Global operating mode
                 plug::IPort            *pInGain;                // Input gain port
@@ -257,6 +284,8 @@ namespace lsp
             protected:
                 void                do_destroy();
                 void                preprocess_channel_input(size_t count);
+                void                update_premix();
+                void                premix_channel(uint32_t channel, size_t count);
                 uint32_t            decode_sidechain_type(uint32_t sc) const;
                 void                process_input_mono(float *out, const float *in, size_t count);
                 void                process_input_stereo(float *l_out, float *r_out, const float *l_in, const float *r_in, size_t count);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-mb-gate/make/tools.mk	2025-03-01 12:43:14.996539117 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/make/tools.mk	2025-08-26 18:16:06.245784729 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/modules.mk
--- 1.2.21-5/modules/lsp-plugins-mb-gate/modules.mk	2025-03-01 12:43:14.996539117 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/modules.mk	2025-08-26 18:16:06.245784729 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/project.mk
--- 1.2.21-5/modules/lsp-plugins-mb-gate/project.mk	2025-03-01 12:43:14.996539117 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/project.mk	2025-08-26 18:16:06.245784729 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Multiband Gate Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-mb-gate/res/doc/screenshots/mb_gate_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/doc/screenshots/mb_gate_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-gate/res/doc/screenshots/mb_gate_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/doc/screenshots/mb_gate_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-gate/res/doc/screenshots/mb_gate_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/doc/screenshots/mb_gate_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-gate/res/doc/screenshots/mb_gate_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/doc/screenshots/mb_gate_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-gate/res/doc/screenshots/sc_mb_gate_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/doc/screenshots/sc_mb_gate_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-gate/res/doc/screenshots/sc_mb_gate_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/doc/screenshots/sc_mb_gate_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-gate/res/doc/screenshots/sc_mb_gate_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/doc/screenshots/sc_mb_gate_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-gate/res/doc/screenshots/sc_mb_gate_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/doc/screenshots/sc_mb_gate_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/lr.xml
--- 1.2.21-5/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/lr.xml	2025-03-01 12:43:15.004539069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/lr.xml	2025-08-26 18:16:06.253784651 +0000
@@ -1,4 +1,30 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'scm'; 'sla'; 'scr'; 'scp'; 'sclc'; 'schc'; 'sclf'; 'schf'; 'bfc'; 'sce'; 'scs'; 'sscs';
+			'ge'; 'bs'; 'bm'; 'gh'; 'gt'; 'gz'; 'ht'; 'hz'; 'at'; 'rt'; 'th'; 'gr'; 'mk'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'cbe'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}l" value.1=":${port}_${i}r"
+				id.2="${port}_${i}r" value.2=":${port}_${i}l"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -244,12 +270,14 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<label text="labels.filters" pad.l="6"/>
 				<hbox spacing="4" pad.h="6">
 					<button id="flt_l" text="labels.chan.L_eft" size="22" ui:inject="Button_left"/>
 					<button id="flt_r" text="labels.chan.R_ight" size="22" ui:inject="Button_right"/>
 				</hbox>
 				<void hexpand="true"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
 			</hbox>
@@ -700,4 +728,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/mono.xml
--- 1.2.21-5/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/mono.xml	2025-03-01 12:43:15.004539069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/mono.xml	2025-08-26 18:16:06.253784651 +0000
@@ -1,4 +1,6 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -226,6 +228,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
 
 				<void hexpand="true"/>
@@ -655,4 +658,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/ms.xml
--- 1.2.21-5/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/ms.xml	2025-03-01 12:43:15.004539069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/ms.xml	2025-08-26 18:16:06.253784651 +0000
@@ -1,4 +1,30 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
+	<!-- Control linking -->
+	<ui:for
+		id="port"
+		list="'scm'; 'sla'; 'scr'; 'scp'; 'sclc'; 'schc'; 'sclf'; 'schf'; 'bfc'; 'sce'; 'scs'; 'sscs';
+			'ge'; 'bs'; 'bm'; 'gh'; 'gt'; 'gz'; 'ht'; 'hz'; 'at'; 'rt'; 'th'; 'gr'; 'mk'">
+		<ui:for id="i" first="0" count="8">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
+	<ui:for
+		id="port"
+		list="'cbe'; 'sf'">
+		<ui:for id="i" first="1" count="7">
+			<ctl:link
+				id.1="${port}_${i}m" value.1=":${port}_${i}s"
+				id.2="${port}_${i}s" value.2=":${port}_${i}m"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -244,12 +270,14 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<label text="labels.filters" pad.l="6"/>
 				<hbox spacing="4" pad.h="6">
 					<button id="flt_m" text="labels.chan.M_id" size="22" ui:inject="Button_mid"/>
 					<button id="flt_s" text="labels.chan.S_ide" size="22" ui:inject="Button_side"/>
 				</hbox>
 				<void hexpand="true"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<shmlink id="link" pad.l="2"/>
 			</hbox>
@@ -701,4 +729,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/stereo.xml	2025-03-01 12:43:15.004539069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/res/main/ui/dynamics/gate/multiband/stereo.xml	2025-08-26 18:16:06.253784651 +0000
@@ -1,4 +1,6 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
+	
 	<vbox spacing="4">
 		<grid rows="2" cols="5" vspacing="4" hspacing="4" expand="true">
 
@@ -238,6 +240,7 @@
 				<combo id="mode" pad.r="8" pad.v="4"/>
 				<label text="labels.sc_boost:"/>
 				<combo id="envb" pad.r="8"/>
+				<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 				<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan" pad.l="6"/>
 				<vsep pad.h="2" bg.color="bg" reduce="true"/>
 				<button id="ssplit" text="labels.stereo_split" size="22" ui:inject="Button_blue" pad.h="2"/>
@@ -674,4 +677,43 @@
 			</cgroup>
 		</hbox>
 	</vbox>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/src/doc/manuals/plugins/mb_gate.php 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/src/doc/manuals/plugins/mb_gate.php
--- 1.2.21-5/modules/lsp-plugins-mb-gate/src/doc/manuals/plugins/mb_gate.php	2025-03-01 12:43:15.004539069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/src/doc/manuals/plugins/mb_gate.php	2025-08-26 18:16:06.257784612 +0000
@@ -37,7 +37,7 @@
 	<ul>
 		<li>Unlike classic crossovers which use IIR (Infinite Impulse Response) filters to split signal into multiple bands and shift the phase
 		of the audio signal at band split points, the <b>Linear Phase</b> allows to use FIR (Finite Impulse Response) filters which are deprived of this.
-		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their tranfer function
+		<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their transfer function
 		to look like the transfer function of analog filters, without deforming it's magnitude envelope near the nyquist frequency.</li>
 		<li>Unlike design of classic Linkwitz-Riley filters, the design of IIR filters provides shorter transition zone of the filter.</li>
 	</ul>
@@ -82,10 +82,15 @@
 	<li><b>Link</b> - the name of shared memory link used to receive sidechain signal</li>
 	<li><b>FFT<?= $sm ?> In</b> - enables FFT curve graph of input signal on the spectrum graph.</li>
 	<li><b>FFT<?= $sm ?> Out</b> - enables FFT curve graph of output signal on the spectrum graph.</li>
-	<li><b>Filters<?= $sm ?></b> - enables drawing tranfer function of each sidechain filter on the spectrum graph.</li>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
 	<?php if ($m == 's') { ?>
-	<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+		<li><b>Stereo Split</b> - enables independent processing of left and right channels.</li>
+	<?php } elseif ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
+	<?php } elseif ($m == 'ms') { ?>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
 	<?php } ?>
+	<li><b>Filters<?= $sm ?></b> - enables drawing transfer function of each sidechain filter on the spectrum graph.</li>
 	<li><b>Zoom</b> - zoom fader, allows to adjust zoom on the frequency chart.</li>
 </ul>
 <p><b>'Signal' section:</b></p>
@@ -189,3 +194,18 @@
 	<li><b>Gate Hysteresis Thresh</b> - the threshold of additional hysteresis curve</li>
 	<li><b>Gate Hysteresis Zone</b> - the size of the transition zone below the hysteresis threshold</li>
 </ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
+
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/src/main/meta/mb_gate.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/src/main/meta/mb_gate.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-gate/src/main/meta/mb_gate.cpp	2025-03-01 12:43:15.004539069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/src/main/meta/mb_gate.cpp	2025-08-26 18:16:06.257784612 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-gate
  * Created on: 3 авг. 2021 г.
@@ -26,7 +26,7 @@
 
 #define LSP_PLUGINS_MB_GATE_VERSION_MAJOR       1
 #define LSP_PLUGINS_MB_GATE_VERSION_MINOR       0
-#define LSP_PLUGINS_MB_GATE_VERSION_MICRO       24
+#define LSP_PLUGINS_MB_GATE_VERSION_MICRO       26
 
 #define LSP_PLUGINS_MB_GATE_VERSION  \
     LSP_MODULE_VERSION( \
@@ -159,53 +159,65 @@ namespace lsp
         #define MB_GATE_SHM_LINK_STEREO \
             OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
 
+        #define MB_GATE_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define MB_GATE_SC_PREMIX \
+            MB_GATE_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
+
         #define MB_COMMON(bands) \
             BYPASS, \
-            COMBO("mode", "Gate mode", 1, mb_global_gate_modes), \
-            AMP_GAIN("g_in", "Input gain", mb_gate_metadata::IN_GAIN_DFL, 10.0f), \
-            AMP_GAIN("g_out", "Output gain", mb_gate_metadata::OUT_GAIN_DFL, 10.0f), \
-            AMP_GAIN("g_dry", "Dry gain", 0.0f, 10.0f), \
-            AMP_GAIN("g_wet", "Wet gain", 1.0f, 10.0f), \
-            PERCENTS("drywet", "Dry/Wet balance", 100.0f, 0.1f), \
-            LOG_CONTROL("react", "FFT reactivity", U_MSEC, mb_gate_metadata::FFT_REACT_TIME), \
-            AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \
-            LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, mb_gate_metadata::ZOOM), \
-            COMBO("envb", "Envelope boost", mb_gate_metadata::FB_DEFAULT, mb_gate_sc_boost), \
-            COMBO("bsel", "Band selection", mb_gate_metadata::SC_BAND_DFL, bands)
+            COMBO("mode", "Gate mode", "Mode", 1, mb_global_gate_modes), \
+            AMP_GAIN("g_in", "Input gain", "Input gain", mb_gate_metadata::IN_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_out", "Output gain", "Output gain", mb_gate_metadata::OUT_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_dry", "Dry gain", "Dry", 0.0f, 10.0f), \
+            AMP_GAIN("g_wet", "Wet gain", "Wet", 1.0f, 10.0f), \
+            PERCENTS("drywet", "Dry/Wet balance", "Dry/Wet", 100.0f, 0.1f), \
+            LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, mb_gate_metadata::FFT_REACT_TIME), \
+            AMP_GAIN("shift", "Shift gain", "Shift", 1.0f, 100.0f), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, mb_gate_metadata::ZOOM), \
+            COMBO("envb", "Envelope boost", "Env boost", mb_gate_metadata::FB_DEFAULT, mb_gate_sc_boost), \
+            COMBO("bsel", "Band selection", "Band selector", mb_gate_metadata::SC_BAND_DFL, bands)
 
-        #define MB_CHANNEL(id, label) \
-            SWITCH("flt" id, "Band filter curves" label, 1.0f), \
+        #define MB_CHANNEL(id, label, alias) \
+            SWITCH("flt" id, "Band filter curves" label, "Show flt" alias, 1.0f), \
             MESH("ag" id, "Gate amplitude graph " label, 2, mb_gate_metadata::FFT_MESH_POINTS)
 
-        #define MB_SPLIT(id, label, enable, freq) \
-            SWITCH("cbe" id, "gate band enable" label, enable), \
-            LOG_CONTROL_DFL("sf" id, "Split frequency" label, U_HZ, mb_gate_metadata::FREQ, freq)
-
-        #define MB_BAND_COMMON(id, label, x, total, fe, fs) \
-            COMBO("scm" id, "Sidechain mode" label, mb_gate_metadata::SC_MODE_DFL, mb_gate_sc_modes), \
-            CONTROL("sla" id, "Sidechain lookahead" label, U_MSEC, mb_gate_metadata::LOOKAHEAD), \
-            LOG_CONTROL("scr" id, "Sidechain reactivity" label, U_MSEC, mb_gate_metadata::REACTIVITY), \
-            AMP_GAIN100("scp" id, "Sidechain preamp" label, GAIN_AMP_0_DB), \
-            SWITCH("sclc" id, "Sidechain custom lo-cut" label, 0), \
-            SWITCH("schc" id, "Sidechain custom hi-cut" label, 0), \
-            LOG_CONTROL_DFL("sclf" id, "Sidechain lo-cut frequency" label, U_HZ, mb_gate_metadata::FREQ, fe), \
-            LOG_CONTROL_DFL("schf" id, "Sidechain hi-cut frequency" label, U_HZ, mb_gate_metadata::FREQ, fs), \
+        #define MB_SPLIT(id, label, alias, enable, freq) \
+            SWITCH("cbe" id, "Gate band enable" label, "Split on" alias, enable), \
+            LOG_CONTROL_DFL("sf" id, "Split frequency" label, "Split " alias, U_HZ, mb_gate_metadata::FREQ, freq)
+
+        #define MB_BAND_COMMON(id, label, alias, x, total, fe, fs) \
+            COMBO("scm" id, "Sidechain mode" label, "SC mode" alias, mb_gate_metadata::SC_MODE_DFL, mb_gate_sc_modes), \
+            CONTROL("sla" id, "Sidechain lookahead" label, "SC look" alias, U_MSEC, mb_gate_metadata::LOOKAHEAD), \
+            LOG_CONTROL("scr" id, "Sidechain reactivity" label, "SC react" alias, U_MSEC, mb_gate_metadata::REACTIVITY), \
+            AMP_GAIN100("scp" id, "Sidechain preamp" label, "SC preamp" alias, GAIN_AMP_0_DB), \
+            SWITCH("sclc" id, "Sidechain custom lo-cut" label, "SC LCF on" alias, 0), \
+            SWITCH("schc" id, "Sidechain custom hi-cut" label, "SC HCF on" alias, 0), \
+            LOG_CONTROL_DFL("sclf" id, "Sidechain lo-cut frequency" label, "SC LCF" alias, U_HZ, mb_gate_metadata::FREQ, fe), \
+            LOG_CONTROL_DFL("schf" id, "Sidechain hi-cut frequency" label, "SC HCF" alias, U_HZ, mb_gate_metadata::FREQ, fs), \
             MESH("bfc" id, "Side-chain band frequency chart" label, 2, mb_gate_metadata::MESH_POINTS + 4), \
             \
-            SWITCH("ge" id, "Gate enable" label, 1.0f), \
-            SWITCH("bs" id, "Solo band" label, 0.0f), \
-            SWITCH("bm" id, "Mute band" label, 0.0f), \
+            SWITCH("ge" id, "Gate enable" label, "On" alias, 1.0f), \
+            SWITCH("bs" id, "Solo band" label, "Solo" alias, 0.0f), \
+            SWITCH("bm" id, "Mute band" label, "Mute" alias, 0.0f), \
             \
-            SWITCH("gh" id, "Hysteresis" label, 0.0f), \
-            LOG_CONTROL("gt" id, "Curve threshold" label, U_GAIN_AMP, mb_gate_metadata::THRESHOLD), \
-            LOG_CONTROL("gz" id, "Curve zone size" label, U_GAIN_AMP, mb_gate_metadata::ZONE), \
-            LOG_CONTROL("ht" id, "Hysteresis threshold" label, U_GAIN_AMP, mb_gate_metadata::H_THRESHOLD), \
-            LOG_CONTROL("hz" id, "Hysteresis zone size" label, U_GAIN_AMP, mb_gate_metadata::ZONE), \
-            LOG_CONTROL("at" id, "Attack time" label, U_MSEC, mb_gate_metadata::ATTACK_TIME), \
-            LOG_CONTROL("rt" id, "Release time" label, U_MSEC, mb_gate_metadata::RELEASE_TIME), \
-            CONTROL("th" id, "Hold time" label, U_MSEC, mb_gate_metadata::HOLD_TIME), \
-            LOG_CONTROL("gr" id, "Reduction" label, U_GAIN_AMP, mb_gate_metadata::REDUCTION), \
-            LOG_CONTROL("mk" id, "Makeup gain" label, U_GAIN_AMP, mb_gate_metadata::MAKEUP), \
+            SWITCH("gh" id, "Hysteresis" label, "Hysteresis" alias, 0.0f), \
+            LOG_CONTROL("gt" id, "Curve threshold" label, "Thresh" alias, U_GAIN_AMP, mb_gate_metadata::THRESHOLD), \
+            LOG_CONTROL("gz" id, "Curve zone size" label, "Size" alias, U_GAIN_AMP, mb_gate_metadata::ZONE), \
+            LOG_CONTROL("ht" id, "Hysteresis threshold" label, "Hyst thresh" alias, U_GAIN_AMP, mb_gate_metadata::H_THRESHOLD), \
+            LOG_CONTROL("hz" id, "Hysteresis zone size" label, "Hyst size" alias, U_GAIN_AMP, mb_gate_metadata::ZONE), \
+            LOG_CONTROL("at" id, "Attack time" label, "Att time" alias, U_MSEC, mb_gate_metadata::ATTACK_TIME), \
+            LOG_CONTROL("rt" id, "Release time" label, "Rel time" alias, U_MSEC, mb_gate_metadata::RELEASE_TIME), \
+            CONTROL("th" id, "Hold time" label, "Hold time" alias, U_MSEC, mb_gate_metadata::HOLD_TIME), \
+            LOG_CONTROL("gr" id, "Reduction" label, "Reduction " alias, U_GAIN_AMP, mb_gate_metadata::REDUCTION), \
+            LOG_CONTROL("mk" id, "Makeup gain" label, "Makeup " alias, U_GAIN_AMP, mb_gate_metadata::MAKEUP), \
             HUE_CTL("hue" id, "Hue " label, (float(x) / float(total))), \
             METER("fre" id, "Frequency range end" label, U_HZ,  mb_gate_metadata::OUT_FREQ), \
             MESH("cg" id, "Gate curve graph" label, 2, mb_gate_metadata::CURVE_MESH_SIZE), \
@@ -216,45 +228,45 @@ namespace lsp
             METER_OUT_GAIN("clm" id, "Curve level meter" label, GAIN_AMP_P_36_DB), \
             METER_OUT_GAIN("rlm" id, "Reduction level meter" label, GAIN_AMP_P_72_DB)
 
-        #define MB_MONO_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_gate_sc_type), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_STEREO_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_gate_sc_type), \
-            COMBO("scs" id, "Sidechain source" label, 0, mb_gate_sc_source), \
-            COMBO("sscs" id, "Split sidechain source" label, 0, mb_gate_sc_split_source), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SPLIT_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_gate_sc_type), \
-            COMBO("scs" id, "Sidechain source" label, 0, mb_gate_sc_source), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_MONO_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_gate_sc_type_sc), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_STEREO_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_gate_sc_type_sc), \
-            COMBO("scs" id, "Sidechain source" label, 0, mb_gate_sc_source), \
-            COMBO("sscs" id, "Split sidechain source" label, 0, mb_gate_sc_split_source), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
-
-        #define MB_SC_SPLIT_BAND(id, label, x, total, fe, fs) \
-            COMBO("sce" id, "External sidechain source" label, 0.0f, mb_gate_sc_type_sc), \
-            COMBO("scs" id, "Sidechain source" label, 0, mb_gate_sc_source), \
-            MB_BAND_COMMON(id, label, x, total, fe, fs)
+        #define MB_MONO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_gate_sc_type), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_STEREO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_gate_sc_type), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_gate_sc_source), \
+            COMBO("sscs" id, "Split sidechain source" label, "SC split" alias, 0, mb_gate_sc_split_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SPLIT_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_gate_sc_type), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_gate_sc_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_MONO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_gate_sc_type_sc), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_STEREO_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_gate_sc_type_sc), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_gate_sc_source), \
+            COMBO("sscs" id, "Split sidechain source" label, "SC split" alias, 0, mb_gate_sc_split_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
+
+        #define MB_SC_SPLIT_BAND(id, label, alias, x, total, fe, fs) \
+            COMBO("sce" id, "External sidechain source" label, "Ext SC src" alias, 0.0f, mb_gate_sc_type_sc), \
+            COMBO("scs" id, "Sidechain source" label, "SC source" alias, 0, mb_gate_sc_source), \
+            MB_BAND_COMMON(id, label, alias, x, total, fe, fs)
 
         #define MB_STEREO_CHANNEL \
-            SWITCH("flt", "Band filter curves", 1.0f), \
+            SWITCH("flt", "Band filter curves", "Show filters", 1.0f), \
             MESH("ag_l", "Gate amplitude graph Left", 2, mb_gate_metadata::FFT_MESH_POINTS), \
             MESH("ag_r", "Gate amplitude graph Right", 2, mb_gate_metadata::FFT_MESH_POINTS), \
-            SWITCH("ssplit", "Stereo split", 0.0f)
+            SWITCH("ssplit", "Stereo split", "Stereo split", 0.0f)
 
-        #define MB_FFT_METERS(id, label) \
-            SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-            SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
+        #define MB_FFT_METERS(id, label, alias) \
+            SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+            SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
             MESH("ifg" id, "Input FFT graph" label, 2, mb_gate_metadata::FFT_MESH_POINTS + 2), \
             MESH("ofg" id, "Output FFT graph" label, 2, mb_gate_metadata::FFT_MESH_POINTS)
 
@@ -262,31 +274,35 @@ namespace lsp
             METER_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
             METER_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB)
 
+        #define MB_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
+
         static const port_t mb_gate_mono_ports[] =
         {
             PORTS_MONO_PLUGIN,
             MB_GATE_SHM_LINK_MONO,
+            MB_GATE_PREMIX,
             MB_COMMON(gate_sc_bands),
-            MB_CHANNEL("", ""),
-            MB_FFT_METERS("", ""),
+            MB_CHANNEL("", "", ""),
+            MB_FFT_METERS("", "", ""),
             MB_CHANNEL_METERS("", ""),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_MONO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_MONO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_MONO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_MONO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_MONO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_MONO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_MONO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_MONO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_MONO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_MONO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_MONO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_MONO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_MONO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_MONO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_MONO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_MONO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0", " 0"),
             MB_BAND_METERS("_1", " 1"),
@@ -304,29 +320,30 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_GATE_SHM_LINK_STEREO,
+            MB_GATE_PREMIX,
             MB_COMMON(gate_sc_bands),
             MB_STEREO_CHANNEL,
-            MB_FFT_METERS("_l", " Left"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_STEREO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_STEREO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_STEREO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_STEREO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_STEREO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_STEREO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_STEREO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_STEREO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_STEREO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_STEREO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_STEREO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_STEREO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_STEREO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_STEREO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_STEREO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_STEREO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -353,47 +370,49 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_GATE_SHM_LINK_STEREO,
+            MB_GATE_PREMIX,
             MB_COMMON(gate_sc_lr_bands),
-            MB_CHANNEL("_l", " Left"),
-            MB_CHANNEL("_r", " Right"),
-            MB_FFT_METERS("_l", " Left"),
+            MB_LINK("clink", "Left/Right controls link", "L/R link"),
+            MB_CHANNEL("_l", " Left", " L"),
+            MB_CHANNEL("_r", " Right", " R"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1l", " 1 Left", 0.0f, 40.0f),
-            MB_SPLIT("_2l", " 2 Left", 1.0f, 100.0f),
-            MB_SPLIT("_3l", " 3 Left", 0.0f, 252.0f),
-            MB_SPLIT("_4l", " 4 Left", 1.0f, 632.0f),
-            MB_SPLIT("_5l", " 5 Left", 0.0f, 1587.0f),
-            MB_SPLIT("_6l", " 6 Left", 1.0f, 3984.0f),
-            MB_SPLIT("_7l", " 7 Left", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1r", " 1 Right", 0.0f, 40.0f),
-            MB_SPLIT("_2r", " 2 Right", 1.0f, 100.0f),
-            MB_SPLIT("_3r", " 3 Right", 0.0f, 252.0f),
-            MB_SPLIT("_4r", " 4 Right", 1.0f, 632.0f),
-            MB_SPLIT("_5r", " 5 Right", 0.0f, 1587.0f),
-            MB_SPLIT("_6r", " 6 Right", 1.0f, 3984.0f),
-            MB_SPLIT("_7r", " 7 Right", 0.0f, 10000.0f),
-
-            MB_SPLIT_BAND("_0l", " 0 Left", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1l", " 1 Left", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2l", " 2 Left", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3l", " 3 Left", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4l", " 4 Left", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5l", " 5 Left", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6l", " 6 Left", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7l", " 7 Left", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SPLIT_BAND("_0r", " 0 Right", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1r", " 1 Right", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2r", " 2 Right", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3r", " 3 Right", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4r", " 4 Right", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5r", " 5 Right", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6r", " 6 Right", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7r", " 7 Right", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1l", " 1 Left", " 1 L", 0.0f, 40.0f),
+            MB_SPLIT("_2l", " 2 Left", " 2 L", 1.0f, 100.0f),
+            MB_SPLIT("_3l", " 3 Left", " 3 L", 0.0f, 252.0f),
+            MB_SPLIT("_4l", " 4 Left", " 4 L", 1.0f, 632.0f),
+            MB_SPLIT("_5l", " 5 Left", " 5 L", 0.0f, 1587.0f),
+            MB_SPLIT("_6l", " 6 Left", " 6 L", 1.0f, 3984.0f),
+            MB_SPLIT("_7l", " 7 Left", " 7 L", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1r", " 1 Right", " 1 R", 0.0f, 40.0f),
+            MB_SPLIT("_2r", " 2 Right", " 2 R", 1.0f, 100.0f),
+            MB_SPLIT("_3r", " 3 Right", " 3 R", 0.0f, 252.0f),
+            MB_SPLIT("_4r", " 4 Right", " 4 R", 1.0f, 632.0f),
+            MB_SPLIT("_5r", " 5 Right", " 5 R", 0.0f, 1587.0f),
+            MB_SPLIT("_6r", " 6 Right", " 6 R", 1.0f, 3984.0f),
+            MB_SPLIT("_7r", " 7 Right", " 7 R", 0.0f, 10000.0f),
+
+            MB_SPLIT_BAND("_0l", " 0 Left", " 0 L", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1l", " 1 Left", " 1 L", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2l", " 2 Left", " 2 L", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3l", " 3 Left", " 3 L", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4l", " 4 Left", " 4 L", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5l", " 5 Left", " 5 L", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6l", " 6 Left", " 6 L", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7l", " 7 Left", " 7 L", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SPLIT_BAND("_0r", " 0 Right", " 0 R", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1r", " 1 Right", " 1 R", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2r", " 2 Right", " 2 R", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3r", " 3 Right", " 3 R", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4r", " 4 Right", " 4 R", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5r", " 5 Right", " 5 R", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6r", " 6 Right", " 6 R", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7r", " 7 Right", " 7 R", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -420,47 +439,49 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             MB_GATE_SHM_LINK_STEREO,
+            MB_GATE_PREMIX,
             MB_COMMON(gate_sc_ms_bands),
-            MB_CHANNEL("_m", " Mid"),
-            MB_CHANNEL("_s", " Side"),
-            MB_FFT_METERS("_m", " Mid"),
+            MB_LINK("clink", "Mid/Side controls link", "M/S link"),
+            MB_CHANNEL("_m", " Mid", " M"),
+            MB_CHANNEL("_s", " Side", " S"),
+            MB_FFT_METERS("_m", " Mid", " M"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_s", " Side"),
+            MB_FFT_METERS("_s", " Side", " S"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1m", " 1 Mid", 0.0f, 40.0f),
-            MB_SPLIT("_2m", " 2 Mid", 1.0f, 100.0f),
-            MB_SPLIT("_3m", " 3 Mid", 0.0f, 252.0f),
-            MB_SPLIT("_4m", " 4 Mid", 1.0f, 632.0f),
-            MB_SPLIT("_5m", " 5 Mid", 0.0f, 1587.0f),
-            MB_SPLIT("_6m", " 6 Mid", 1.0f, 3984.0f),
-            MB_SPLIT("_7m", " 7 Mid", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1s", " 1 Side", 0.0f, 40.0f),
-            MB_SPLIT("_2s", " 2 Side", 1.0f, 100.0f),
-            MB_SPLIT("_3s", " 3 Side", 0.0f, 252.0f),
-            MB_SPLIT("_4s", " 4 Side", 1.0f, 632.0f),
-            MB_SPLIT("_5s", " 5 Side", 0.0f, 1587.0f),
-            MB_SPLIT("_6s", " 6 Side", 1.0f, 3984.0f),
-            MB_SPLIT("_7s", " 7 Side", 0.0f, 10000.0f),
-
-            MB_SPLIT_BAND("_0m", " 0 Mid", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1m", " 1 Mid", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2m", " 2 Mid", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3m", " 3 Mid", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4m", " 4 Mid", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5m", " 5 Mid", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6m", " 6 Mid", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7m", " 7 Mid", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SPLIT_BAND("_0s", " 0 Side", 0, 8, 10.0f, 40.0f),
-            MB_SPLIT_BAND("_1s", " 1 Side", 1, 8, 40.0f, 100.0f),
-            MB_SPLIT_BAND("_2s", " 2 Side", 2, 8, 100.0f, 252.0f),
-            MB_SPLIT_BAND("_3s", " 3 Side", 3, 8, 252.0f, 632.0f),
-            MB_SPLIT_BAND("_4s", " 4 Side", 4, 8, 632.0f, 1587.0f),
-            MB_SPLIT_BAND("_5s", " 5 Side", 5, 8, 1587.0f, 3984.0f),
-            MB_SPLIT_BAND("_6s", " 6 Side", 6, 8, 3984.0f, 10000.0f),
-            MB_SPLIT_BAND("_7s", " 7 Side", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1m", " 1 Mid", " 1 M", 0.0f, 40.0f),
+            MB_SPLIT("_2m", " 2 Mid", " 2 M", 1.0f, 100.0f),
+            MB_SPLIT("_3m", " 3 Mid", " 3 M", 0.0f, 252.0f),
+            MB_SPLIT("_4m", " 4 Mid", " 4 M", 1.0f, 632.0f),
+            MB_SPLIT("_5m", " 5 Mid", " 5 M", 0.0f, 1587.0f),
+            MB_SPLIT("_6m", " 6 Mid", " 6 M", 1.0f, 3984.0f),
+            MB_SPLIT("_7m", " 7 Mid", " 7 M", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1s", " 1 Side", " 1 S", 0.0f, 40.0f),
+            MB_SPLIT("_2s", " 2 Side", " 2 S", 1.0f, 100.0f),
+            MB_SPLIT("_3s", " 3 Side", " 3 S", 0.0f, 252.0f),
+            MB_SPLIT("_4s", " 4 Side", " 4 S", 1.0f, 632.0f),
+            MB_SPLIT("_5s", " 5 Side", " 5 S", 0.0f, 1587.0f),
+            MB_SPLIT("_6s", " 6 Side", " 6 S", 1.0f, 3984.0f),
+            MB_SPLIT("_7s", " 7 Side", " 7 S", 0.0f, 10000.0f),
+
+            MB_SPLIT_BAND("_0m", " 0 Mid", " 0 M", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1m", " 1 Mid", " 1 M", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2m", " 2 Mid", " 2 M", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3m", " 3 Mid", " 3 M", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4m", " 4 Mid", " 4 M", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5m", " 5 Mid", " 5 M", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6m", " 6 Mid", " 6 M", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7m", " 7 Mid", " 7 M", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SPLIT_BAND("_0s", " 0 Side", " 0 S", 0, 8, 10.0f, 40.0f),
+            MB_SPLIT_BAND("_1s", " 1 Side", " 1 S", 1, 8, 40.0f, 100.0f),
+            MB_SPLIT_BAND("_2s", " 2 Side", " 2 S", 2, 8, 100.0f, 252.0f),
+            MB_SPLIT_BAND("_3s", " 3 Side", " 3 S", 3, 8, 252.0f, 632.0f),
+            MB_SPLIT_BAND("_4s", " 4 Side", " 4 S", 4, 8, 632.0f, 1587.0f),
+            MB_SPLIT_BAND("_5s", " 5 Side", " 5 S", 5, 8, 1587.0f, 3984.0f),
+            MB_SPLIT_BAND("_6s", " 6 Side", " 6 S", 6, 8, 3984.0f, 10000.0f),
+            MB_SPLIT_BAND("_7s", " 7 Side", " 7 S", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0m", " 0 Mid"),
             MB_BAND_METERS("_1m", " 1 Mid"),
@@ -488,27 +509,28 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             MB_GATE_SHM_LINK_MONO,
+            MB_GATE_SC_PREMIX,
             MB_COMMON(gate_sc_bands),
-            MB_CHANNEL("", ""),
-            MB_FFT_METERS("", ""),
+            MB_CHANNEL("", "", ""),
+            MB_FFT_METERS("", "", ""),
             MB_CHANNEL_METERS("", ""),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_SC_MONO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_SC_MONO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_SC_MONO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_SC_MONO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_SC_MONO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_SC_MONO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_MONO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_MONO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_SC_MONO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_SC_MONO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_SC_MONO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_SC_MONO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_SC_MONO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_SC_MONO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_MONO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_MONO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0", " 0"),
             MB_BAND_METERS("_1", " 1"),
@@ -527,29 +549,30 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_GATE_SHM_LINK_STEREO,
+            MB_GATE_SC_PREMIX,
             MB_COMMON(gate_sc_bands),
             MB_STEREO_CHANNEL,
-            MB_FFT_METERS("_l", " Left"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1", " 1", 0.0f, 40.0f),
-            MB_SPLIT("_2", " 2", 1.0f, 100.0f),
-            MB_SPLIT("_3", " 3", 0.0f, 252.0f),
-            MB_SPLIT("_4", " 4", 1.0f, 632.0f),
-            MB_SPLIT("_5", " 5", 0.0f, 1587.0f),
-            MB_SPLIT("_6", " 6", 1.0f, 3984.0f),
-            MB_SPLIT("_7", " 7", 0.0f, 10000.0f),
-
-            MB_SC_STEREO_BAND("_0", " 0", 0, 8, 10.0f, 40.0f),
-            MB_SC_STEREO_BAND("_1", " 1", 1, 8, 40.0f, 100.0f),
-            MB_SC_STEREO_BAND("_2", " 2", 2, 8, 100.0f, 252.0f),
-            MB_SC_STEREO_BAND("_3", " 3", 3, 8, 252.0f, 632.0f),
-            MB_SC_STEREO_BAND("_4", " 4", 4, 8, 632.0f, 1587.0f),
-            MB_SC_STEREO_BAND("_5", " 5", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_STEREO_BAND("_6", " 6", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_STEREO_BAND("_7", " 7", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1", " 1", " 1", 0.0f, 40.0f),
+            MB_SPLIT("_2", " 2", " 2", 1.0f, 100.0f),
+            MB_SPLIT("_3", " 3", " 3", 0.0f, 252.0f),
+            MB_SPLIT("_4", " 4", " 4", 1.0f, 632.0f),
+            MB_SPLIT("_5", " 5", " 5", 0.0f, 1587.0f),
+            MB_SPLIT("_6", " 6", " 6", 1.0f, 3984.0f),
+            MB_SPLIT("_7", " 7", " 7", 0.0f, 10000.0f),
+
+            MB_SC_STEREO_BAND("_0", " 0", " 0", 0, 8, 10.0f, 40.0f),
+            MB_SC_STEREO_BAND("_1", " 1", " 1", 1, 8, 40.0f, 100.0f),
+            MB_SC_STEREO_BAND("_2", " 2", " 2", 2, 8, 100.0f, 252.0f),
+            MB_SC_STEREO_BAND("_3", " 3", " 3", 3, 8, 252.0f, 632.0f),
+            MB_SC_STEREO_BAND("_4", " 4", " 4", 4, 8, 632.0f, 1587.0f),
+            MB_SC_STEREO_BAND("_5", " 5", " 5", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_STEREO_BAND("_6", " 6", " 6", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_STEREO_BAND("_7", " 7", " 7", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -577,47 +600,49 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_GATE_SHM_LINK_STEREO,
+            MB_GATE_SC_PREMIX,
             MB_COMMON(gate_sc_lr_bands),
-            MB_CHANNEL("_l", " Left"),
-            MB_CHANNEL("_r", " Right"),
-            MB_FFT_METERS("_l", " Left"),
+            MB_LINK("clink", "Left/Right controls link", "L/R link"),
+            MB_CHANNEL("_l", " Left", " L"),
+            MB_CHANNEL("_r", " Right", " R"),
+            MB_FFT_METERS("_l", " Left", " L"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_r", " Right"),
+            MB_FFT_METERS("_r", " Right", " R"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1l", " 1 Left", 0.0f, 40.0f),
-            MB_SPLIT("_2l", " 2 Left", 1.0f, 100.0f),
-            MB_SPLIT("_3l", " 3 Left", 0.0f, 252.0f),
-            MB_SPLIT("_4l", " 4 Left", 1.0f, 632.0f),
-            MB_SPLIT("_5l", " 5 Left", 0.0f, 1587.0f),
-            MB_SPLIT("_6l", " 6 Left", 1.0f, 3984.0f),
-            MB_SPLIT("_7l", " 7 Left", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1r", " 1 Right", 0.0f, 40.0f),
-            MB_SPLIT("_2r", " 2 Right", 1.0f, 100.0f),
-            MB_SPLIT("_3r", " 3 Right", 0.0f, 252.0f),
-            MB_SPLIT("_4r", " 4 Right", 1.0f, 632.0f),
-            MB_SPLIT("_5r", " 5 Right", 0.0f, 1587.0f),
-            MB_SPLIT("_6r", " 6 Right", 1.0f, 3984.0f),
-            MB_SPLIT("_7r", " 7 Right", 0.0f, 10000.0f),
-
-            MB_SC_SPLIT_BAND("_0l", " 0 Left", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1l", " 1 Left", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2l", " 2 Left", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3l", " 3 Left", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4l", " 4 Left", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5l", " 5 Left", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6l", " 6 Left", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7l", " 7 Left", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SC_SPLIT_BAND("_0r", " 0 Right", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1r", " 1 Right", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2r", " 2 Right", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3r", " 3 Right", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4r", " 4 Right", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5r", " 5 Right", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6r", " 6 Right", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7r", " 7 Right", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1l", " 1 Left", " 1 L", 0.0f, 40.0f),
+            MB_SPLIT("_2l", " 2 Left", " 2 L", 1.0f, 100.0f),
+            MB_SPLIT("_3l", " 3 Left", " 3 L", 0.0f, 252.0f),
+            MB_SPLIT("_4l", " 4 Left", " 4 L", 1.0f, 632.0f),
+            MB_SPLIT("_5l", " 5 Left", " 5 L", 0.0f, 1587.0f),
+            MB_SPLIT("_6l", " 6 Left", " 6 L", 1.0f, 3984.0f),
+            MB_SPLIT("_7l", " 7 Left", " 7 L", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1r", " 1 Right", " 1 R", 0.0f, 40.0f),
+            MB_SPLIT("_2r", " 2 Right", " 2 R", 1.0f, 100.0f),
+            MB_SPLIT("_3r", " 3 Right", " 3 R", 0.0f, 252.0f),
+            MB_SPLIT("_4r", " 4 Right", " 4 R", 1.0f, 632.0f),
+            MB_SPLIT("_5r", " 5 Right", " 5 R", 0.0f, 1587.0f),
+            MB_SPLIT("_6r", " 6 Right", " 6 R", 1.0f, 3984.0f),
+            MB_SPLIT("_7r", " 7 Right", " 7 R", 0.0f, 10000.0f),
+
+            MB_SC_SPLIT_BAND("_0l", " 0 Left", " 0 L", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1l", " 1 Left", " 1 L", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2l", " 2 Left", " 2 L", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3l", " 3 Left", " 3 L", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4l", " 4 Left", " 4 L", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5l", " 5 Left", " 5 L", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6l", " 6 Left", " 6 L", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7l", " 7 Left", " 7 L", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SC_SPLIT_BAND("_0r", " 0 Right", " 0 R", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1r", " 1 Right", " 1 R", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2r", " 2 Right", " 2 R", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3r", " 3 Right", " 3 R", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4r", " 4 Right", " 4 R", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5r", " 5 Right", " 5 R", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6r", " 6 Right", " 6 R", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7r", " 7 Right", " 7 R", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0l", " 0 Left"),
             MB_BAND_METERS("_1l", " 1 Left"),
@@ -645,47 +670,49 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MB_GATE_SHM_LINK_STEREO,
+            MB_GATE_SC_PREMIX,
             MB_COMMON(gate_sc_ms_bands),
-            MB_CHANNEL("_m", " Mid"),
-            MB_CHANNEL("_s", " Side"),
-            MB_FFT_METERS("_m", " Mid"),
+            MB_LINK("clink", "Mid/Side controls link", "M/S link"),
+            MB_CHANNEL("_m", " Mid", " M"),
+            MB_CHANNEL("_s", " Side", " S"),
+            MB_FFT_METERS("_m", " Mid", " M"),
             MB_CHANNEL_METERS("_l", " Left"),
-            MB_FFT_METERS("_s", " Side"),
+            MB_FFT_METERS("_s", " Side", " S"),
             MB_CHANNEL_METERS("_r", " Right"),
 
-            MB_SPLIT("_1m", " 1 Mid", 0.0f, 40.0f),
-            MB_SPLIT("_2m", " 2 Mid", 1.0f, 100.0f),
-            MB_SPLIT("_3m", " 3 Mid", 0.0f, 252.0f),
-            MB_SPLIT("_4m", " 4 Mid", 1.0f, 632.0f),
-            MB_SPLIT("_5m", " 5 Mid", 0.0f, 1587.0f),
-            MB_SPLIT("_6m", " 6 Mid", 1.0f, 3984.0f),
-            MB_SPLIT("_7m", " 7 Mid", 0.0f, 10000.0f),
-
-            MB_SPLIT("_1s", " 1 Side", 0.0f, 40.0f),
-            MB_SPLIT("_2s", " 2 Side", 1.0f, 100.0f),
-            MB_SPLIT("_3s", " 3 Side", 0.0f, 252.0f),
-            MB_SPLIT("_4s", " 4 Side", 1.0f, 632.0f),
-            MB_SPLIT("_5s", " 5 Side", 0.0f, 1587.0f),
-            MB_SPLIT("_6s", " 6 Side", 1.0f, 3984.0f),
-            MB_SPLIT("_7s", " 7 Side", 0.0f, 10000.0f),
-
-            MB_SC_SPLIT_BAND("_0m", " 0 Mid", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1m", " 1 Mid", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2m", " 2 Mid", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3m", " 3 Mid", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4m", " 4 Mid", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5m", " 5 Mid", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6m", " 6 Mid", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7m", " 7 Mid", 7, 8, 10000.0f, 20000.0f),
-
-            MB_SC_SPLIT_BAND("_0s", " 0 Side", 0, 8, 10.0f, 40.0f),
-            MB_SC_SPLIT_BAND("_1s", " 1 Side", 1, 8, 40.0f, 100.0f),
-            MB_SC_SPLIT_BAND("_2s", " 2 Side", 2, 8, 100.0f, 252.0f),
-            MB_SC_SPLIT_BAND("_3s", " 3 Side", 3, 8, 252.0f, 632.0f),
-            MB_SC_SPLIT_BAND("_4s", " 4 Side", 4, 8, 632.0f, 1587.0f),
-            MB_SC_SPLIT_BAND("_5s", " 5 Side", 5, 8, 1587.0f, 3984.0f),
-            MB_SC_SPLIT_BAND("_6s", " 6 Side", 6, 8, 3984.0f, 10000.0f),
-            MB_SC_SPLIT_BAND("_7s", " 7 Side", 7, 8, 10000.0f, 20000.0f),
+            MB_SPLIT("_1m", " 1 Mid", " 1 M", 0.0f, 40.0f),
+            MB_SPLIT("_2m", " 2 Mid", " 2 M", 1.0f, 100.0f),
+            MB_SPLIT("_3m", " 3 Mid", " 3 M", 0.0f, 252.0f),
+            MB_SPLIT("_4m", " 4 Mid", " 4 M", 1.0f, 632.0f),
+            MB_SPLIT("_5m", " 5 Mid", " 5 M", 0.0f, 1587.0f),
+            MB_SPLIT("_6m", " 6 Mid", " 6 M", 1.0f, 3984.0f),
+            MB_SPLIT("_7m", " 7 Mid", " 7 M", 0.0f, 10000.0f),
+
+            MB_SPLIT("_1s", " 1 Side", " 1 S", 0.0f, 40.0f),
+            MB_SPLIT("_2s", " 2 Side", " 2 S", 1.0f, 100.0f),
+            MB_SPLIT("_3s", " 3 Side", " 3 S", 0.0f, 252.0f),
+            MB_SPLIT("_4s", " 4 Side", " 4 S", 1.0f, 632.0f),
+            MB_SPLIT("_5s", " 5 Side", " 5 S", 0.0f, 1587.0f),
+            MB_SPLIT("_6s", " 6 Side", " 6 S", 1.0f, 3984.0f),
+            MB_SPLIT("_7s", " 7 Side", " 7 S", 0.0f, 10000.0f),
+
+            MB_SC_SPLIT_BAND("_0m", " 0 Mid", " 0 M", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1m", " 1 Mid", " 1 M", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2m", " 2 Mid", " 2 M", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3m", " 3 Mid", " 3 M", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4m", " 4 Mid", " 4 M", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5m", " 5 Mid", " 5 M", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6m", " 6 Mid", " 6 M", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7m", " 7 Mid", " 7 M", 7, 8, 10000.0f, 20000.0f),
+
+            MB_SC_SPLIT_BAND("_0s", " 0 Side", " 0 S", 0, 8, 10.0f, 40.0f),
+            MB_SC_SPLIT_BAND("_1s", " 1 Side", " 1 S", 1, 8, 40.0f, 100.0f),
+            MB_SC_SPLIT_BAND("_2s", " 2 Side", " 2 S", 2, 8, 100.0f, 252.0f),
+            MB_SC_SPLIT_BAND("_3s", " 3 Side", " 3 S", 3, 8, 252.0f, 632.0f),
+            MB_SC_SPLIT_BAND("_4s", " 4 Side", " 4 S", 4, 8, 632.0f, 1587.0f),
+            MB_SC_SPLIT_BAND("_5s", " 5 Side", " 5 S", 5, 8, 1587.0f, 3984.0f),
+            MB_SC_SPLIT_BAND("_6s", " 6 Side", " 6 S", 6, 8, 3984.0f, 10000.0f),
+            MB_SC_SPLIT_BAND("_7s", " 7 Side", " 7 S", 7, 8, 10000.0f, 20000.0f),
 
             MB_BAND_METERS("_0m", " 0 Mid"),
             MB_BAND_METERS("_1m", " 1 Mid"),
@@ -714,7 +741,10 @@ namespace lsp
             "Multiband Gate",
             B_MB_DYNAMICS,
             "7GOAM1O_RdY",
-            "This plugin performs multiband gating of input signsl. Flexible sidechain\ncontrol configuration provided. As opposite to most available multiband\ngates, this gate provides numerous special functions: 'modern' operating\nmode, 'Sidechain boost', 'Lookahead' option and up to 8 frequency bands."
+            "This plugin performs multiband gating of input signal. Flexible sidechain\n"
+            "control configuration provided. As opposite to most available multiband\n"
+            "gates, this gate provides numerous special functions: 'modern' operating\n"
+            "mode, 'Sidechain boost', 'Lookahead' option and up to 8 frequency bands."
         };
 
         // Multiband Gate
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/src/main/plug/mb_gate.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/src/main/plug/mb_gate.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-gate/src/main/plug/mb_gate.cpp	2025-03-01 12:43:15.004539069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/src/main/plug/mb_gate.cpp	2025-08-26 18:16:06.257784612 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-gate
  * Created on: 3 авг. 2021 г.
@@ -30,7 +30,7 @@
 #include <lsp-plug.in/shared/debug.h>
 #include <lsp-plug.in/shared/id_colors.h>
 
-#define MBG_BUFFER_SIZE         0x400U
+#define MBG_BUFFER_SIZE         0x200U
 
 namespace lsp
 {
@@ -91,7 +91,6 @@ namespace lsp
             nMode           = mode;
             bSidechain      = sc;
             bEnvUpdate      = true;
-            bUseExtSc       = false;
             bUseShmLink     = false;
             enXOver         = XOVER_MODERN;
             bStereoSplit    = false;
@@ -118,6 +117,31 @@ namespace lsp
             vBuffer         = NULL;
             vEnv            = NULL;
 
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
+
             pBypass         = NULL;
             pMode           = NULL;
             pInGain         = NULL;
@@ -288,13 +312,14 @@ namespace lsp
                     MBG_BUFFER_SIZE * sizeof(float) + // Global vEnv for band signal processing
                     // Channel buffers
                     (
+                        MBG_BUFFER_SIZE * sizeof(float) * 3 + // sPremix
                         MBG_BUFFER_SIZE * sizeof(float) + // Global vSc[] for each channel
                         2 * filter_mesh_size + // vTr of each channel
                         filter_mesh_size + // vTrMem of each channel
                         MBG_BUFFER_SIZE * sizeof(float) + // vInBuffer for each channel
                         MBG_BUFFER_SIZE * sizeof(float) + // vBuffer for each channel
-                        MBG_BUFFER_SIZE * sizeof(float) + // vScBuffer for each channel
-                        ((bSidechain) ? MBG_BUFFER_SIZE * sizeof(float) : 0) + // vExtScBuffer for each channel
+                        ((bSidechain) ? MBG_BUFFER_SIZE * sizeof(float) : 0) + // vScBuffer for each channel
+                        MBG_BUFFER_SIZE * sizeof(float) + // vExtScBuffer for each channel
                         MBG_BUFFER_SIZE * sizeof(float) + // vInAnalyze for each channel
                         MBG_BUFFER_SIZE * sizeof(float) + // vShmLinkBuffer
                         // Band buffers
@@ -323,6 +348,14 @@ namespace lsp
             vBuffer         = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
             vEnv            = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
 
+            // Initialize pre-mix
+            for (size_t i=0; i<channels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
+            }
+
             // Initialize filters according to number of bands
             if (sFilters.init(meta::mb_gate_metadata::BANDS_MAX * channels) != STATUS_OK)
                 return;
@@ -361,8 +394,8 @@ namespace lsp
 
                 c->vInBuffer    = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
                 c->vBuffer      = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
-                c->vScBuffer    = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
-                c->vExtScBuffer = (bSidechain) ? advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float)) : NULL;
+                c->vScBuffer    = (bSidechain) ? advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float)) : NULL;
+                c->vExtScBuffer = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
                 c->vShmBuffer   = advance_ptr_bytes<float>(ptr, MBG_BUFFER_SIZE * sizeof(float));
                 c->vTr          = advance_ptr_bytes<float>(ptr, 2 * filter_mesh_size);
                 c->vTrMem       = advance_ptr_bytes<float>(ptr, filter_mesh_size);
@@ -511,6 +544,19 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
@@ -525,6 +571,8 @@ namespace lsp
             BIND_PORT(pZoom);
             BIND_PORT(pEnvBoost);
             SKIP_PORT("Band selector"); // Skip band selector
+            if ((nMode == MBGM_LR) || (nMode == MBGM_MS))
+                SKIP_PORT("Separate channels link");
 
             lsp_trace("Binding channel ports");
             for (size_t i=0; i<channels; ++i)
@@ -704,10 +752,22 @@ namespace lsp
             return SCT_INTERNAL;
         }
 
+        void mb_gate::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void mb_gate::update_settings()
         {
             dspu::filter_params_t fp;
 
+            update_premix();
+
             // Determine number of channels
             size_t channels     = (nMode == MBGM_MONO) ? 1 : 2;
             int active_channels = 0;
@@ -736,7 +796,6 @@ namespace lsp
             fDryGain            = (dry_gain * drywet + 1.0f - drywet) * out_gain;
             fWetGain            = wet_gain * drywet * out_gain;
             fZoom               = pZoom->value();
-            bUseExtSc           = false;
             bUseShmLink         = false;
 
             // Configure channels
@@ -852,8 +911,6 @@ namespace lsp
                     size_t sc_src   = (sc != NULL) ? sc->value() : dspu::SCS_MIDDLE;
 
                     b->nScType      = decode_sidechain_type(b->pScType->value());
-                    if (b->nScType == SCT_EXTERNAL)
-                        bUseExtSc       = true;
                     if (b->nScType == SCT_LINK)
                         bUseShmLink     = true;
 
@@ -1328,7 +1385,7 @@ namespace lsp
         {
             switch (band->nScType)
             {
-                case SCT_INTERNAL: return channel->vScBuffer;
+                case SCT_INTERNAL: return (bSidechain) ? channel->vScBuffer : channel->vExtScBuffer;
                 case SCT_EXTERNAL: return channel->vExtScBuffer;
                 case SCT_LINK: return channel->vShmBuffer;
                 default: break;
@@ -1347,8 +1404,7 @@ namespace lsp
                 channel_t *r = &vChannels[1];
 
                 process_input_stereo(l->vInAnalyze, r->vInAnalyze, l->vIn, r->vIn, count);
-                if (bUseExtSc)
-                    process_input_stereo(l->vExtScBuffer, r->vExtScBuffer, l->vScIn, r->vScIn, count);
+                process_input_stereo(l->vExtScBuffer, r->vExtScBuffer, l->vScIn, r->vScIn, count);
                 if (bUseShmLink)
                     process_input_stereo(l->vShmBuffer, r->vShmBuffer, l->vShmIn, r->vShmIn, count);
             }
@@ -1356,8 +1412,7 @@ namespace lsp
             {
                 channel_t *c = &vChannels[0];
                 process_input_mono(c->vInAnalyze, c->vIn, count);
-                if (bUseExtSc)
-                    process_input_mono(c->vExtScBuffer, c->vScIn, count);
+                process_input_mono(c->vExtScBuffer, c->vScIn, count);
                 if (bUseShmLink)
                     process_input_mono(c->vShmBuffer, c->vShmIn, count);
             }
@@ -1366,14 +1421,130 @@ namespace lsp
             for (size_t i=0; i<channels; ++i)
             {
                 channel_t *c        = &vChannels[i];
-                c->sEnvBoost[0].process(c->vScBuffer, c->vInAnalyze, count);
-                if (bUseExtSc)
-                    c->sEnvBoost[1].process(c->vExtScBuffer, c->vExtScBuffer, count);
+                if (c->vScBuffer != NULL)
+                    c->sEnvBoost[0].process(c->vScBuffer, c->vInAnalyze, count);
+                c->sEnvBoost[1].process(c->vExtScBuffer, c->vExtScBuffer, count);
                 if (bUseShmLink)
                     c->sEnvBoost[2].process(c->vShmBuffer, c->vShmBuffer, count);
             }
         }
 
+        void mb_gate::premix_channel(uint32_t channel, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            channel_t * const c     = &vChannels[channel];
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            c->vIn                  = in_buf;
+            c->vOut                 = out_buf;
+            c->vScIn                = sc_buf;
+            c->vShmIn               = link_buf;
+
+            // Update pointers
+            sPremix.vIn[channel]   += count;
+            sPremix.vOut[channel]  += count;
+            if (sPremix.vSc[channel] != NULL)
+                sPremix.vSc[channel]   += count;
+            if (sPremix.vLink[channel] != NULL)
+                sPremix.vLink[channel] += count;
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vIn, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    c->vScIn            = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vScIn, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(c->vScIn, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    c->vScIn            = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vIn          = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vScIn        = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(c->vScIn, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(c->vScIn, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn       = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void mb_gate::process(size_t samples)
         {
             size_t channels     = (nMode == MBGM_MONO) ? 1 : 2;
@@ -1383,27 +1554,29 @@ namespace lsp
             {
                 channel_t *c        = &vChannels[i];
 
-                c->vIn              = c->pIn->buffer<float>();
-                c->vOut             = c->pOut->buffer<float>();
-                c->vScIn            = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : NULL;
-                c->vShmIn           = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pScIn != NULL) ? c->pScIn->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
 
                 core::AudioBuffer *shm_buf  = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
                 if ((shm_buf != NULL) && (shm_buf->active()))
-                    c->vShmIn           = shm_buf->buffer();
+                    sPremix.vLink[i]    = shm_buf->buffer();
             }
 
             // Do processing
             for (size_t offset = 0; offset < samples; )
             {
                 // Determine buffer size for processing
-                size_t to_process   = lsp_min(MBG_BUFFER_SIZE, samples - offset);
+                const size_t to_process = lsp_min(MBG_BUFFER_SIZE, samples - offset);
 
-                // Measure input signal level
+                // Premix and measure input signal level
                 for (size_t i=0; i<channels; ++i)
                 {
                     channel_t *c        = &vChannels[i];
-                    float level         = dsp::abs_max(c->vIn, to_process) * fInGain;
+
+                    premix_channel(i, to_process);
+                    const float level   = dsp::abs_max(c->vIn, to_process) * fInGain;
                     c->pInLvl->set_value(level);
                 }
 
@@ -1599,14 +1772,6 @@ namespace lsp
                     // Apply bypass
                     c->sDryDelay.process(vBuffer, c->vIn, to_process);
                     c->sBypass.process(c->vOut, vBuffer, c->vBuffer, to_process);
-
-                    // Update pointers
-                    c->vIn             += to_process;
-                    c->vOut            += to_process;
-                    if (c->vScIn != NULL)
-                        c->vScIn           += to_process;
-                    if (c->vShmIn != NULL)
-                        c->vShmIn          += to_process;
                 }
                 offset     += to_process;
             }
@@ -1924,7 +2089,6 @@ namespace lsp
             v->write("nMode", nMode);
             v->write("bSidechain", bSidechain);
             v->write("bEnvUpdate", bEnvUpdate);
-            v->write("bUseExtSc", bUseExtSc);
             v->write("bUseShmLink", bUseShmLink);
             v->write("enXOver", enXOver);
             v->write("bStereoSplit", bStereoSplit);
@@ -2084,6 +2248,32 @@ namespace lsp
             v->write("vIndexes", vIndexes);
             v->write("pIDisplay", pIDisplay);
 
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
+
             v->write("pBypass", pBypass);
             v->write("pMode", pMode);
             v->write("pInGain", pInGain);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-gate/src/main/ui/mb_gate.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/src/main/ui/mb_gate.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-gate/src/main/ui/mb_gate.cpp	2025-03-01 12:43:15.004539069 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-gate/src/main/ui/mb_gate.cpp	2025-08-26 18:16:06.257784612 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-gate
  * Created on: 25 нояб. 2020 г.
@@ -347,7 +347,10 @@ namespace lsp
                     update_split_note_text(s);
 
                     if (flags & ui::PORT_USER_EDIT)
-                        freq_initiator = s;
+                    {
+                        if (s->bOn)
+                            freq_initiator = s;
+                    }
                     else if (s->bOn)
                         need_resort_active_splits = true;
                 }
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/.github/workflows/build.yml	2025-03-01 12:43:14.388542766 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/.github/workflows/build.yml	2025-08-26 18:16:01.045835196 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/CHANGELOG	2025-03-01 12:43:14.388542766 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/CHANGELOG	2025-08-26 18:16:01.045835196 +0000
@@ -2,6 +2,13 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.15 ===
+* Added audio pre-mixing controls.
+* Updated build scripts and dependencies.
+
+=== 1.0.14 ===
+* Updated build scripts and dependencies.
+
 === 1.0.13 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/dependencies.mk	2025-03-01 12:43:14.392542742 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/dependencies.mk	2025-08-26 18:16:01.045835196 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/include/private/plugins/mb_limiter.h 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/include/private/plugins/mb_limiter.h
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/include/private/plugins/mb_limiter.h	2025-03-01 12:43:14.392542742 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/include/private/plugins/mb_limiter.h	2025-08-26 18:16:01.049835157 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-limiter
  * Created on: 22 июн 2023 г.
@@ -60,6 +60,32 @@ namespace lsp
                     XOVER_LINEAR_PHASE
                 };
 
+                typedef struct premix_t
+                {
+                    float                   fInToSc;            // Input -> Sidechain mix
+                    float                   fInToLink;          // Input -> Link mix
+                    float                   fLinkToIn;          // Link -> Input mix
+                    float                   fLinkToSc;          // Link -> Sidechain mix
+                    float                   fScToIn;            // Sidechain -> Input mix
+                    float                   fScToLink;          // Sidechain -> Link mix
+
+                    float                  *vIn[2];             // Input buffer
+                    float                  *vOut[2];            // Output buffer
+                    float                  *vSc[2];             // Sidechain buffer
+                    float                  *vLink[2];           // Link buffer
+
+                    float                  *vTmpIn[2];          // Replacement buffer for input
+                    float                  *vTmpLink[2];        // Replacement buffer for link
+                    float                  *vTmpSc[2];          // Replacement buffer for sidechain
+
+                    plug::IPort            *pInToSc;            // Input -> Sidechain mix
+                    plug::IPort            *pInToLink;          // Input -> Link mix
+                    plug::IPort            *pLinkToIn;          // Link -> Input mix
+                    plug::IPort            *pLinkToSc;          // Link -> Sidechain mix
+                    plug::IPort            *pScToIn;            // Sidechain -> Input mix
+                    plug::IPort            *pScToLink;          // Sidechain -> Link mix
+                } premix_t;
+
                 typedef struct limiter_t
                 {
                     dspu::Limiter           sLimit;             // Limiter
@@ -141,9 +167,9 @@ namespace lsp
                     band_t                 *vPlan[meta::mb_limiter::BANDS_MAX];     // Actual plan
                     limiter_t               sLimiter;           // Output limiter
 
-                    const float            *vIn;                // Input data
-                    const float            *vSc;                // Sidechain data
-                    const float            *vShmIn;             // Shared memory input
+                    float                  *vIn;                // Input data
+                    float                  *vSc;                // Sidechain data
+                    float                  *vShmIn;             // Shared memory input
                     float                  *vOut;               // Output data
                     float                  *vData;              // Intermediate buffer with processed data
                     float                  *vInBuf;             // Oversampled input data buffer
@@ -171,6 +197,7 @@ namespace lsp
             protected:
                 dspu::Analyzer          sAnalyzer;          // Analyzer
                 dspu::Counter           sCounter;           // Sync counter
+                premix_t                sPremix;            // Premix
                 uint32_t                nChannels;          // Number of channels
                 xover_mode_t            nMode;              // Operating mode
                 bool                    bSidechain;         // Sidechain switch is present
@@ -184,7 +211,6 @@ namespace lsp
                 uint32_t                nLookahead;         // Lookahead buffer size
 
                 channel_t              *vChannels;          // Channels
-                float                  *vEmptyBuf;          // Empty buffer filled with zeros
                 float                  *vTmpBuf;            // Temporary buffer
                 float                  *vEnvBuf;            // Temporary envelope buffer
                 uint32_t               *vIndexes;           // Analyzer FFT indexes
@@ -214,6 +240,8 @@ namespace lsp
                 uint8_t                *pData;
 
             protected:
+                void                    update_premix();
+                void                    premix_channel(uint32_t channel, size_t count);
                 void                    output_meters();
                 void                    output_fft_curves();
                 void                    perform_analysis(size_t samples);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/make/tools.mk	2025-03-01 12:43:14.392542742 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/make/tools.mk	2025-08-26 18:16:01.049835157 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/modules.mk
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/modules.mk	2025-03-01 12:43:14.392542742 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/modules.mk	2025-08-26 18:16:01.049835157 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/project.mk
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/project.mk	2025-03-01 12:43:14.392542742 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/project.mk	2025-08-26 18:16:01.049835157 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Multiband Limiter Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.13
+ARTIFACT_VERSION            = 1.0.15
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-mb-limiter/res/doc/screenshots/mb_limiter_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/res/doc/screenshots/mb_limiter_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-limiter/res/doc/screenshots/mb_limiter_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/res/doc/screenshots/mb_limiter_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-limiter/res/doc/screenshots/sc_mb_limiter_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/res/doc/screenshots/sc_mb_limiter_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mb-limiter/res/doc/screenshots/sc_mb_limiter_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/res/doc/screenshots/sc_mb_limiter_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/res/main/ui/dynamics/limiter/multiband/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/res/main/ui/dynamics/limiter/multiband/mono.xml
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/res/main/ui/dynamics/limiter/multiband/mono.xml	2025-03-01 12:43:14.396542719 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/res/main/ui/dynamics/limiter/multiband/mono.xml	2025-08-26 18:16:01.057835080 +0000
@@ -1,6 +1,8 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
 	<ui:set id="has_solo" value="
 		:bs_1 or (:bs_2 and :se_1) or (:bs_3 and :se_2) or (:bs_4 and :se_3) or (:bs_5 and :se_4) or (:bs_6 and :se_5) or (:bs_7 and :se_6) or (:bs_8 and :se_7)"/>
+	
 	<grid rows="3" cols="5" vspacing="4" hspacing="4">
 		<!-- Row 1: Graph -->
 		<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.spectrum">
@@ -215,6 +217,7 @@
 			<combo id="ovs" pad.r="4" pad.v="4"/>
 			<label text="labels.dither:"/>
 			<combo id="dither" pad.r="4" pad.v="4"/>
+			<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 			<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
 
 			<void hexpand="true" hfill="true"/>
@@ -479,4 +482,43 @@
 			</group>
 		</cell>
 	</grid>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/res/main/ui/dynamics/limiter/multiband/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/res/main/ui/dynamics/limiter/multiband/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/res/main/ui/dynamics/limiter/multiband/stereo.xml	2025-03-01 12:43:14.396542719 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/res/main/ui/dynamics/limiter/multiband/stereo.xml	2025-08-26 18:16:01.057835080 +0000
@@ -1,6 +1,8 @@
 <plugin resizable="true">
+	<ui:eval id="is_sidechain" value="(ex :sc) or (ex :sc_l) or (ex :sc_r)"/>
 	<ui:set id="has_solo" value="
 		:bs_1 or (:bs_2 and :se_1) or (:bs_3 and :se_2) or (:bs_4 and :se_3) or (:bs_5 and :se_4) or (:bs_6 and :se_5) or (:bs_7 and :se_6) or (:bs_8 and :se_7)"/>
+	
 	<grid rows="3" cols="5" vspacing="4" hspacing="4">
 		<!-- Row 1: Graph -->
 		<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.spectrum">
@@ -228,6 +230,7 @@
 			<combo id="ovs" pad.r="4" pad.v="4"/>
 			<label text="labels.dither:"/>
 			<combo id="dither" pad.r="4" pad.v="4"/>
+			<button ui:id="premix_trigger" id="showpmx" text="labels.premix" size="22" />
 			<button id="flt" text="labels.filters" size="22" ui:inject="Button_cyan"/>
 
 			<void hexpand="true" hfill="true"/>
@@ -504,4 +507,43 @@
 			</group>
 		</cell>
 	</grid>
+	
+	<!-- Premix overlay -->
+	<overlay id="showpmx" trigger="premix_trigger" hpos="1" vpos="1" halign="-1" valign="1" ipadding.t="4">
+		<group text="groups.premix" vexpand="false" ipadding="0">
+			<grid rows="3" cols="${(:is_sidechain) ? 8 : 5}" spacing="0" bg.color="bg_schema" transpose="true">
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.in_to_sc" pad.h="6" pad.v="4" />
+					<knob id="in2sc" />
+					<value id="in2sc" pad.h="6" pad.v="4" />
+				</ui:if>
+				
+				<label text="labels.premix.in_to_link" pad.h="6" pad.v="4" />
+				<knob id="in2lk" />
+				<value id="in2lk" />
+				
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				
+				<ui:if test=":is_sidechain">
+					<label text="labels.premix.sc_to_in" pad.h="6" pad.v="4" />
+					<knob id="sc2in" />
+					<value id="sc2in" pad.h="6" pad.v="4" />
+					
+					<label text="labels.premix.sc_to_link" pad.h="6" pad.v="4" />
+					<knob id="sc2lk" />
+					<value id="sc2lk" pad.h="6" pad.v="4" />
+					
+					<cell rows="3"><vsep pad.h="2" bg.color="bg" reduce="true" /></cell>
+				</ui:if>
+				
+				<label text="labels.premix.link_to_in" pad.h="6" pad.v="4" />
+				<knob id="lk2in" />
+				<value id="lk2in" pad.h="6" pad.v="4" />
+				
+				<label text="labels.premix.link_to_sc" pad.h="6" pad.v="4" />
+				<knob id="lk2sc" />
+				<value id="lk2sc" pad.h="6" pad.v="4" />
+			</grid>
+		</group>
+	</overlay>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/src/doc/manuals/plugins/mb_limiter.php 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/src/doc/manuals/plugins/mb_limiter.php
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/src/doc/manuals/plugins/mb_limiter.php	2025-03-01 12:43:14.396542719 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/src/doc/manuals/plugins/mb_limiter.php	2025-08-26 18:16:01.057835080 +0000
@@ -45,7 +45,7 @@ This introduces additional latency but g
 <ul>
 	<li>Unlike classic crossovers which use IIR (Infinite Impulse Response) filters to split signal into multiple bands and shift the phase
 	of the audio signal at band split points, the <b>Linear Phase</b> allows to use FIR (Finite Impulse Response) filters which are deprived of this.
-	<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their tranfer function
+	<li>Unlike most IIR filters which are designed using bilinear transform, linear phase filters allow to simulate their transfer function
 	to look like the transfer function of analog filters, without deforming it's magnitude envelope near the nyquist frequency.</li>
 	<li>Unlike design of classic Linkwitz-Riley filters, the design of IIR filters provides shorter transition zone of the filter.</li>
 </ul>
@@ -70,7 +70,7 @@ This introduces additional latency but g
 </p>
 <?php out_image('graph/limiter-envelope', 'Envelope forms of the patch') ?>
 <p>
-	On this image, sloping lines mean the transision part of the patch.
+	On this image, sloping lines mean the transition part of the patch.
 	The flat cap in the middle before the peak is a half of attack time, the flat cap in the middle after the peak is a half of release time.
 	Also it's obvious that different envelope forms differently affect dynamics of the signal.
 </p>
@@ -127,6 +127,8 @@ This introduces additional latency but g
 		<?php } ?>
 		<li><b>Link</b> - the shared memory link is used to receive sidechain signal.</li>
 	</ul>
+	<li><b>Pre-mix</b> - shows pre-mix control overlay.</li>
+	<li><b>Filters</b> - enables drawing tranfer function of each sidechain filter on the spectrum graph.</li>
 	<li><b>Link</b> - the name of shared memory link used to receive sidechain signal</li>
 	<li><b>Zoom</b> - zoom fader, allows to adjust zoom on the frequency chart.</li>
 	<li><b>In</b> - the input signal meter.</li>
@@ -205,4 +207,18 @@ This introduces additional latency but g
 	<?php if (!$m) {?> 
 	<li><b>Stereo link</b> - stereo link, the degree of mutual influence between gain reduction of stereo channels</li>
 	<?php } ?>
-</ul>
\ No newline at end of file
+</ul>
+
+<p><b>Pre-mix control overlay:</b></p>
+<ul>
+	<?php if ($sc) { ?>
+	<li><b>In -> SC</b> - the amount of signal from input channel added to the Sidechain.</li>
+	<?php } ?>
+	<li><b>In -> Link</b> - the amount of signal from input channel added to the shared memory link.</li>
+	<?php if ($sc) { ?>
+	<li><b>SC -> In</b> - the amount of signal from sidechain input channel added to the input channel.</li>
+	<li><b>SC -> Link</b> - the amount of signal from sidechain input channel added to the shared memory link.</li>
+	<?php } ?>
+	<li><b>Link -> In</b> - the amount of signal from shared memory link added to the input channel.</li>
+	<li><b>Link -> SC</b> - the amount of signal from shared memory link added to the sidechain channel.</li>
+</ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/src/main/meta/mb_limiter.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/src/main/meta/mb_limiter.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/src/main/meta/mb_limiter.cpp	2025-03-01 12:43:14.400542694 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/src/main/meta/mb_limiter.cpp	2025-08-26 18:16:01.057835080 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-limiter
  * Created on: 22 июн 2023 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_MB_LIMITER_VERSION_MAJOR       1
 #define LSP_PLUGINS_MB_LIMITER_VERSION_MINOR       0
-#define LSP_PLUGINS_MB_LIMITER_VERSION_MICRO       13
+#define LSP_PLUGINS_MB_LIMITER_VERSION_MICRO       15
 
 #define LSP_PLUGINS_MB_LIMITER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -139,23 +139,35 @@ namespace lsp
             BYPASS, \
             IN_GAIN, \
             OUT_GAIN, \
-            COMBO("mode", "Operating mode", 0.0f, limiter_modes), \
-            LOG_CONTROL("lk", "Lookahead", U_MSEC, mb_limiter::LOOKAHEAD), \
-            COMBO("ovs", "Oversampling", mb_limiter::OVS_DEFAULT, limiter_ovs_modes), \
-            COMBO("dither", "Dithering", mb_limiter::DITHER_DEFAULT, limiter_dither_modes), \
-            COMBO("envb", "Envelope boost", mb_limiter::FB_DEFAULT, limiter_sc_boost), \
-            LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, mb_limiter::ZOOM), \
-            SWITCH("flt", "Band filter curves", 1.0f), \
-            LOG_CONTROL("react", "FFT reactivity", U_MSEC, mb_limiter::REACT_TIME), \
-            AMP_GAIN100("shift", "Shift gain", 1.0f)
+            COMBO("mode", "Operating mode", "Mode", 0.0f, limiter_modes), \
+            LOG_CONTROL("lk", "Lookahead", "Lookahead", U_MSEC, mb_limiter::LOOKAHEAD), \
+            COMBO("ovs", "Oversampling", "Oversampling", mb_limiter::OVS_DEFAULT, limiter_ovs_modes), \
+            COMBO("dither", "Dithering", "Dithering", mb_limiter::DITHER_DEFAULT, limiter_dither_modes), \
+            COMBO("envb", "Envelope boost", "Env boost", mb_limiter::FB_DEFAULT, limiter_sc_boost), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, mb_limiter::ZOOM), \
+            SWITCH("flt", "Band filter curves", "Show filters", 1.0f), \
+            LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, mb_limiter::REACT_TIME), \
+            AMP_GAIN100("shift", "Shift gain", "Shift", 1.0f)
 
         #define MBL_COMMON \
             MBL_BASE, \
-            COMBO("extsc", "Sidechain source", 0.0f, limiter_sc_types)
+            COMBO("extsc", "Sidechain source", "SC source", 0.0f, limiter_sc_types)
 
         #define MBL_SC_COMMON \
             MBL_BASE, \
-            COMBO("extsc", "Sidechain source", 0.0f, limiter_sc_types_for_sc)
+            COMBO("extsc", "Sidechain source", "SC source", 0.0f, limiter_sc_types_for_sc)
+
+        #define MBL_PREMIX \
+            SWITCH("showpmx", "Show pre-mix overlay", "Show premix bar", 0.0f), \
+            AMP_GAIN10("in2lk", "Input to Link mix", "In to Link mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2in", "Link to Input mix", "Link to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("lk2sc", "Link to Sidechain mix", "Link to SC mix", GAIN_AMP_M_INF_DB)
+
+        #define MBL_SC_PREMIX \
+            MBL_PREMIX, \
+            AMP_GAIN10("in2sc", "Input to Sidechain mix", "In to SC mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2in", "Sidechain to Input mix", "SC to In mix", GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("sc2lk", "Sidechain to Link mix", "SC to Link mix", GAIN_AMP_M_INF_DB)
 
         #define MBL_SHM_LINK_MONO \
             OPT_RETURN_MONO("link", "shml", "Side-chain shared memory link")
@@ -164,57 +176,57 @@ namespace lsp
             OPT_RETURN_STEREO("link", "shml_", "Side-chain shared memory link")
 
         #define MBL_SPLIT(id, label, enable, freq) \
-            SWITCH("se" id, "Limiter band enable" label, enable), \
-            LOG_CONTROL_DFL("sf" id, "Band split frequency" label, U_HZ, mb_limiter::FREQ, freq)
+            SWITCH("se" id, "Limiter band enable" label, "Split on" label, enable), \
+            LOG_CONTROL_DFL("sf" id, "Band split frequency" label, "Split" label, U_HZ, mb_limiter::FREQ, freq)
 
-        #define MBL_LIMITER(id, label, alr) \
-            SWITCH("on" id, "Limiter enabled" label, 1.0f), \
-            SWITCH("alr" id, "Automatic level regulation" label, alr), \
-            LOG_CONTROL("aat" id, "Automatic level regulation attack time" label, U_MSEC, mb_limiter::ALR_ATTACK_TIME), \
-            LOG_CONTROL("art" id, "Automatic level regulation release time" label, U_MSEC, mb_limiter::ALR_RELEASE_TIME), \
-            LOG_CONTROL("akn" id, "Automatic level regulation knee" label, U_GAIN_AMP, mb_limiter::KNEE), \
-            COMBO("lm" id, "Operating mode" label, mb_limiter::LOM_DEFAULT, limiter_oper_modes), \
-            LOG_CONTROL("th" id, "Threshold" label, U_GAIN_AMP, mb_limiter::THRESHOLD), \
-            SWITCH("gb" id, "Gain boost" label, 1.0f), \
-            LOG_CONTROL("at" id, "Attack time" label, U_MSEC, mb_limiter::ATTACK_TIME), \
-            LOG_CONTROL("rt" id, "Release time" label, U_MSEC, mb_limiter::RELEASE_TIME), \
+        #define MBL_LIMITER(id, label, alias, alr) \
+            SWITCH("on" id, "Limiter enabled" label, "Limiter on" label, 1.0f), \
+            SWITCH("alr" id, "Automatic level regulation" label, "ALR" label, alr), \
+            LOG_CONTROL("aat" id, "Automatic level regulation attack time" label, "ALR att time" alias, U_MSEC, mb_limiter::ALR_ATTACK_TIME), \
+            LOG_CONTROL("art" id, "Automatic level regulation release time" label, "ALR rel time" alias, U_MSEC, mb_limiter::ALR_RELEASE_TIME), \
+            LOG_CONTROL("akn" id, "Automatic level regulation knee" label, "ALR knee" alias, U_GAIN_AMP, mb_limiter::KNEE), \
+            COMBO("lm" id, "Operating mode" label, "Mode" label, mb_limiter::LOM_DEFAULT, limiter_oper_modes), \
+            LOG_CONTROL("th" id, "Threshold" label, "Threshold" alias, U_GAIN_AMP, mb_limiter::THRESHOLD), \
+            SWITCH("gb" id, "Gain boost" label, "Gain boost" label, 1.0f), \
+            LOG_CONTROL("at" id, "Attack time" label, "Att time" alias, U_MSEC, mb_limiter::ATTACK_TIME), \
+            LOG_CONTROL("rt" id, "Release time" label, "Rel time" alias, U_MSEC, mb_limiter::RELEASE_TIME), \
             METER_OUT_GAIN("ig" id, "Input gain meter" label, mb_limiter::THRESHOLD_MAX)
 
         #define MBL_LIMITER_METERS(id, label) \
             METER_OUT_GAIN("rlm" id, "Reduction level meter" label, GAIN_AMP_0_DB)
 
         #define MBL_MAIN_LIMITER_MONO \
-            MBL_LIMITER("", " Main", 0.0f), \
+            MBL_LIMITER("", " Main", "", 0.0f), \
             MBL_LIMITER_METERS("", " Main")
 
         #define MBL_MAIN_LIMITER_STEREO \
-            MBL_LIMITER("", " Main", 0.0f), \
-            LOG_CONTROL("slink", "Stereo linking Main", U_PERCENT, mb_limiter::LINKING), \
+            MBL_LIMITER("", " Main", "", 0.0f), \
+            LOG_CONTROL("slink", "Stereo linking Main", "Stereo link", U_PERCENT, mb_limiter::LINKING), \
             MBL_LIMITER_METERS("_l", " Main Left"), \
             MBL_LIMITER_METERS("_r", " Main Right")
 
-        #define MBL_BAND_COMMON(id, label) \
+        #define MBL_BAND_COMMON(id, label, alias) \
             METER("bfe" id, "Frequency range end" label, U_HZ, mb_limiter::OUT_FREQ), \
-            SWITCH("bs" id, "Solo band" label, 0.0f), \
-            SWITCH("bm" id, "Mute band" label, 0.0f), \
-            AMP_GAIN100("bpa" id, "Band preamp" label, GAIN_AMP_0_DB), \
-            LOG_CONTROL("bmk" id, "Band makeup" label, U_GAIN_AMP, mb_limiter::MAKEUP), \
+            SWITCH("bs" id, "Solo band" label, "Solo" label, 0.0f), \
+            SWITCH("bm" id, "Mute band" label, "Mute" label, 0.0f), \
+            AMP_GAIN100("bpa" id, "Band preamp" label, "Preamp" label, GAIN_AMP_0_DB), \
+            LOG_CONTROL("bmk" id, "Band makeup" label, "Makeup" label, U_GAIN_AMP, mb_limiter::MAKEUP), \
             MESH("bfc" id, "Band filter chart" label, 2, mb_limiter::FFT_MESH_POINTS + 2), \
-            MBL_LIMITER(id, label, 1.0f)
+            MBL_LIMITER(id, label, alias, 1.0f)
 
-        #define MBL_BAND_MONO(id, label) \
-            MBL_BAND_COMMON(id, label), \
+        #define MBL_BAND_MONO(id, label, alias) \
+            MBL_BAND_COMMON(id, label, alias), \
             MBL_LIMITER_METERS(id, label)
 
-        #define MBL_BAND_STEREO(id, label) \
-            MBL_BAND_COMMON(id, label), \
-            LOG_CONTROL("bsl" id, "Band stereo linking" label, U_PERCENT, mb_limiter::LINKING), \
+        #define MBL_BAND_STEREO(id, label, alias) \
+            MBL_BAND_COMMON(id, label, alias), \
+            LOG_CONTROL("bsl" id, "Band stereo linking" label, "Stereo link" label, U_PERCENT, mb_limiter::LINKING), \
             MBL_LIMITER_METERS(id "l", label " Left"), \
             MBL_LIMITER_METERS(id "r", label " Right")
 
-        #define MBL_METERS(id, label) \
-            SWITCH("ife" id, "Input FFT enable" label, 1.0f), \
-            SWITCH("ofe" id, "Output FFT enable" label, 1.0f), \
+        #define MBL_METERS(id, label, alias) \
+            SWITCH("ife" id, "Input FFT enable" label, "FFT In" alias, 1.0f), \
+            SWITCH("ofe" id, "Output FFT enable" label, "FFT Out" alias, 1.0f), \
             METER_OUT_GAIN("ilm" id, "Input level meter" label, GAIN_AMP_P_24_DB), \
             METER_OUT_GAIN("olm" id, "Output level meter" label, GAIN_AMP_P_24_DB), \
             MESH("ifg" id, "Input FFT graph" label, 2, mb_limiter::FFT_MESH_POINTS + 2), \
@@ -222,17 +234,18 @@ namespace lsp
             MESH("ag" id, "Amplification graph" label, 2, mb_limiter::FFT_MESH_POINTS + 2)
 
         #define MBL_METERS_MONO \
-            MBL_METERS("", "")
+            MBL_METERS("", "", "")
 
         #define MBL_METERS_STEREO \
-            MBL_METERS("_l", " Left"), \
-            MBL_METERS("_r", " Right")
+            MBL_METERS("_l", " Left", " L"), \
+            MBL_METERS("_r", " Right", " R")
 
         static const port_t mb_limiter_mono_ports[] =
         {
             // Input and output audio ports
             PORTS_MONO_PLUGIN,
             MBL_SHM_LINK_MONO,
+            MBL_PREMIX,
             MBL_COMMON,
             MBL_METERS_MONO,
             MBL_MAIN_LIMITER_MONO,
@@ -245,14 +258,14 @@ namespace lsp
             MBL_SPLIT("_6", " 6", 1.0f, 3984.0f),
             MBL_SPLIT("_7", " 7", 0.0f, 10000.0f),
 
-            MBL_BAND_MONO("_1", " 1"),
-            MBL_BAND_MONO("_2", " 2"),
-            MBL_BAND_MONO("_3", " 3"),
-            MBL_BAND_MONO("_4", " 4"),
-            MBL_BAND_MONO("_5", " 5"),
-            MBL_BAND_MONO("_6", " 6"),
-            MBL_BAND_MONO("_7", " 7"),
-            MBL_BAND_MONO("_8", " 8"),
+            MBL_BAND_MONO("_1", " 1", " 1"),
+            MBL_BAND_MONO("_2", " 2", " 2"),
+            MBL_BAND_MONO("_3", " 3", " 3"),
+            MBL_BAND_MONO("_4", " 4", " 4"),
+            MBL_BAND_MONO("_5", " 5", " 5"),
+            MBL_BAND_MONO("_6", " 6", " 6"),
+            MBL_BAND_MONO("_7", " 7", " 7"),
+            MBL_BAND_MONO("_8", " 8", " 8"),
 
             PORTS_END
         };
@@ -262,6 +275,7 @@ namespace lsp
             // Input and output audio ports
             PORTS_STEREO_PLUGIN,
             MBL_SHM_LINK_STEREO,
+            MBL_PREMIX,
             MBL_COMMON,
             MBL_METERS_STEREO,
             MBL_MAIN_LIMITER_STEREO,
@@ -274,14 +288,14 @@ namespace lsp
             MBL_SPLIT("_6", " 6", 1.0f, 3984.0f),
             MBL_SPLIT("_7", " 7", 0.0f, 10000.0f),
 
-            MBL_BAND_STEREO("_1", " 1"),
-            MBL_BAND_STEREO("_2", " 2"),
-            MBL_BAND_STEREO("_3", " 3"),
-            MBL_BAND_STEREO("_4", " 4"),
-            MBL_BAND_STEREO("_5", " 5"),
-            MBL_BAND_STEREO("_6", " 6"),
-            MBL_BAND_STEREO("_7", " 7"),
-            MBL_BAND_STEREO("_8", " 8"),
+            MBL_BAND_STEREO("_1", " 1", " 1"),
+            MBL_BAND_STEREO("_2", " 2", " 2"),
+            MBL_BAND_STEREO("_3", " 3", " 3"),
+            MBL_BAND_STEREO("_4", " 4", " 4"),
+            MBL_BAND_STEREO("_5", " 5", " 5"),
+            MBL_BAND_STEREO("_6", " 6", " 6"),
+            MBL_BAND_STEREO("_7", " 7", " 7"),
+            MBL_BAND_STEREO("_8", " 8", " 8"),
 
             PORTS_END
         };
@@ -292,6 +306,7 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             PORTS_MONO_SIDECHAIN,
             MBL_SHM_LINK_MONO,
+            MBL_SC_PREMIX,
             MBL_SC_COMMON,
             MBL_METERS_MONO,
             MBL_MAIN_LIMITER_MONO,
@@ -304,14 +319,14 @@ namespace lsp
             MBL_SPLIT("_6", " 6", 1.0f, 3984.0f),
             MBL_SPLIT("_7", " 7", 0.0f, 10000.0f),
 
-            MBL_BAND_MONO("_1", " 1"),
-            MBL_BAND_MONO("_2", " 2"),
-            MBL_BAND_MONO("_3", " 3"),
-            MBL_BAND_MONO("_4", " 4"),
-            MBL_BAND_MONO("_5", " 5"),
-            MBL_BAND_MONO("_6", " 6"),
-            MBL_BAND_MONO("_7", " 7"),
-            MBL_BAND_MONO("_8", " 8"),
+            MBL_BAND_MONO("_1", " 1", " 1"),
+            MBL_BAND_MONO("_2", " 2", " 2"),
+            MBL_BAND_MONO("_3", " 3", " 3"),
+            MBL_BAND_MONO("_4", " 4", " 4"),
+            MBL_BAND_MONO("_5", " 5", " 5"),
+            MBL_BAND_MONO("_6", " 6", " 6"),
+            MBL_BAND_MONO("_7", " 7", " 7"),
+            MBL_BAND_MONO("_8", " 8", " 8"),
 
             PORTS_END
         };
@@ -322,6 +337,7 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             PORTS_STEREO_SIDECHAIN,
             MBL_SHM_LINK_STEREO,
+            MBL_SC_PREMIX,
             MBL_SC_COMMON,
             MBL_METERS_STEREO,
             MBL_MAIN_LIMITER_STEREO,
@@ -334,14 +350,14 @@ namespace lsp
             MBL_SPLIT("_6", " 6", 1.0f, 3984.0f),
             MBL_SPLIT("_7", " 7", 0.0f, 10000.0f),
 
-            MBL_BAND_STEREO("_1", " 1"),
-            MBL_BAND_STEREO("_2", " 2"),
-            MBL_BAND_STEREO("_3", " 3"),
-            MBL_BAND_STEREO("_4", " 4"),
-            MBL_BAND_STEREO("_5", " 5"),
-            MBL_BAND_STEREO("_6", " 6"),
-            MBL_BAND_STEREO("_7", " 7"),
-            MBL_BAND_STEREO("_8", " 8"),
+            MBL_BAND_STEREO("_1", " 1", " 1"),
+            MBL_BAND_STEREO("_2", " 2", " 2"),
+            MBL_BAND_STEREO("_3", " 3", " 3"),
+            MBL_BAND_STEREO("_4", " 4", " 4"),
+            MBL_BAND_STEREO("_5", " 5", " 5"),
+            MBL_BAND_STEREO("_6", " 6", " 6"),
+            MBL_BAND_STEREO("_7", " 7", " 7"),
+            MBL_BAND_STEREO("_8", " 8", " 8"),
 
             PORTS_END
         };
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/src/main/plug/mb_limiter.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/src/main/plug/mb_limiter.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/src/main/plug/mb_limiter.cpp	2025-03-01 12:43:14.400542694 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/src/main/plug/mb_limiter.cpp	2025-08-26 18:16:01.061835040 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-limiter
  * Created on: 22 июн 2023 г.
@@ -33,13 +33,13 @@
 
 #include <private/plugins/mb_limiter.h>
 
-/* The size of temporary buffer for audio processing */
-#define BUFFER_SIZE         0x400U
-
 namespace lsp
 {
     namespace plugins
     {
+        /* The size of temporary buffer for audio processing */
+        static constexpr size_t BUFFER_SIZE     = 0x200;
+
         //---------------------------------------------------------------------
         // Plugin factory
         static const meta::plugin_t *plugins[] =
@@ -62,6 +62,31 @@ namespace lsp
         mb_limiter::mb_limiter(const meta::plugin_t *meta):
             Module(meta)
         {
+            sPremix.fInToSc     = GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = GAIN_AMP_M_INF_DB;
+
+            for (size_t i=0; i<2; ++i)
+            {
+                sPremix.vIn[i]      = NULL;
+                sPremix.vOut[i]     = NULL;
+                sPremix.vSc[i]      = NULL;
+                sPremix.vLink[i]    = NULL;
+                sPremix.vTmpIn[i]   = NULL;
+                sPremix.vTmpSc[i]   = NULL;
+                sPremix.vTmpLink[i] = NULL;
+            }
+
+            sPremix.pInToSc     = NULL;
+            sPremix.pInToLink   = NULL;
+            sPremix.pLinkToIn   = NULL;
+            sPremix.pLinkToSc   = NULL;
+            sPremix.pScToIn     = NULL;
+            sPremix.pScToLink   = NULL;
+
             nChannels           = 1;
             nMode               = XOVER_CLASSIC;
             bSidechain          = false;
@@ -84,7 +109,6 @@ namespace lsp
             nLookahead          = 0;
 
             vChannels           = NULL;
-            vEmptyBuf           = NULL;
             vTmpBuf             = NULL;
             vEnvBuf             = NULL;
             vFreqs              = NULL;
@@ -152,6 +176,7 @@ namespace lsp
                 szof_fft_graph * 2 +            // vTrTmp
                 szof_fft_graph * 2 +            // vFc
                 nChannels * (
+                    szof_buf*3 +                // sPremix
                     szof_buf +                  // vData
                     szof_ovs_buf +              // vInBuf
                     szof_ovs_buf +              // vScBuf
@@ -185,7 +210,6 @@ namespace lsp
 
             // Allocate objects
             vChannels               = advance_ptr_bytes<channel_t>(ptr, szof_channel * nChannels);
-            vEmptyBuf               = advance_ptr_bytes<float>(ptr, szof_buf);
             vTmpBuf                 = advance_ptr_bytes<float>(ptr, szof_ovs_buf);
             vEnvBuf                 = advance_ptr_bytes<float>(ptr, szof_ovs_buf);
             vFreqs                  = advance_ptr_bytes<float>(ptr, szof_fft_graph);
@@ -194,6 +218,14 @@ namespace lsp
             vTrTmp                  = advance_ptr_bytes<float>(ptr, szof_fft_graph * 2);
             vFc                     = advance_ptr_bytes<float>(ptr, szof_fft_graph * 2);
 
+            // Initialize pre-mix
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                sPremix.vTmpIn[i]       = advance_ptr_bytes<float>(ptr, szof_buf);
+                sPremix.vTmpLink[i]     = advance_ptr_bytes<float>(ptr, szof_buf);
+                sPremix.vTmpSc[i]       = advance_ptr_bytes<float>(ptr, szof_buf);
+            }
+
             // Initialize objects
             float lk_latency        =
                 floorf(dspu::samples_to_millis(MAX_SAMPLE_RATE, meta::mb_limiter::OVERSAMPLING_MAX)) +
@@ -381,6 +413,19 @@ namespace lsp
             for (size_t i=0; i<nChannels; ++i)
                 BIND_PORT(vChannels[i].pShmIn);
 
+            // Pre-mixing ports
+            lsp_trace("Binding pre-mix ports");
+            SKIP_PORT("Show premix overlay");
+            BIND_PORT(sPremix.pInToLink);
+            BIND_PORT(sPremix.pLinkToIn);
+            BIND_PORT(sPremix.pLinkToSc);
+            if (bSidechain)
+            {
+                BIND_PORT(sPremix.pInToSc);
+                BIND_PORT(sPremix.pScToIn);
+                BIND_PORT(sPremix.pScToLink);
+            }
+
             // Bind common ports
             lsp_trace("Binding common ports");
             BIND_PORT(pBypass);
@@ -536,8 +581,6 @@ namespace lsp
                     BIND_PORT(b->sLimiter.pReductionMeter);
                 }
             }
-
-            dsp::fill_zero(vEmptyBuf, BUFFER_SIZE);
         }
 
         void mb_limiter::destroy()
@@ -818,8 +861,21 @@ namespace lsp
             return SCM_INTERNAL;
         }
 
+        void mb_limiter::update_premix()
+        {
+            sPremix.fInToSc     = (sPremix.pInToSc != NULL)     ? sPremix.pInToSc->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fInToLink   = (sPremix.pInToLink != NULL)   ? sPremix.pInToLink->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToIn   = (sPremix.pLinkToIn != NULL)   ? sPremix.pLinkToIn->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fLinkToSc   = (sPremix.pLinkToSc != NULL)   ? sPremix.pLinkToSc->value()    : GAIN_AMP_M_INF_DB;
+            sPremix.fScToIn     = (sPremix.pScToIn != NULL)     ? sPremix.pScToIn->value()      : GAIN_AMP_M_INF_DB;
+            sPremix.fScToLink   = (sPremix.pScToLink != NULL)   ? sPremix.pScToLink->value()    : GAIN_AMP_M_INF_DB;
+        }
+
         void mb_limiter::update_settings()
         {
+
+            update_premix();
+
             dspu::filter_params_t fp;
 
             // Determine number of channels
@@ -1456,6 +1512,122 @@ namespace lsp
             }
         }
 
+        void mb_limiter::premix_channel(uint32_t channel, size_t count)
+        {
+            // Get pointers to buffers and advance position
+            channel_t * const c     = &vChannels[channel];
+            float * const in_buf    = sPremix.vIn[channel];
+            float * const out_buf   = sPremix.vOut[channel];
+            float * const sc_buf    = sPremix.vSc[channel];
+            float * const link_buf  = sPremix.vLink[channel];
+
+            c->vIn                  = in_buf;
+            c->vOut                 = out_buf;
+            c->vSc                  = sc_buf;
+            c->vShmIn               = link_buf;
+
+            // Update pointers
+            sPremix.vIn[channel]   += count;
+            sPremix.vOut[channel]  += count;
+            if (sPremix.vSc[channel] != NULL)
+                sPremix.vSc[channel]   += count;
+            if (sPremix.vLink[channel] != NULL)
+                sPremix.vLink[channel] += count;
+
+            // Perform transformation
+            if (bSidechain)
+            {
+                // (Sc, Link) -> In
+                if ((sc_buf != NULL) && (sPremix.fScToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, sc_buf, sPremix.fScToIn, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vIn, link_buf, sPremix.fLinkToIn, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB))
+                {
+                    c->vIn              = sPremix.vTmpIn[channel];
+                    dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                }
+
+                // (In, Link) -> Sc
+                if (sPremix.fInToSc > GAIN_AMP_M_INF_DB)
+                {
+                    c->vSc              = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vSc, sc_buf, in_buf, sPremix.fInToSc, count);
+                    else
+                        dsp::mul_k3(c->vSc, in_buf, sPremix.fInToSc, count);
+
+                    if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vSc, link_buf, sPremix.fLinkToSc, count);
+                }
+                else if ((link_buf != NULL) && (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB))
+                {
+                    c->vSc              = sPremix.vTmpSc[channel];
+                    if (sc_buf != NULL)
+                        dsp::fmadd_k4(c->vSc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                    else
+                        dsp::mul_k3(c->vSc, link_buf, sPremix.fLinkToSc, count);
+                }
+
+                // (In, Sc) -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+
+                    if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                        dsp::fmadd_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+                else if ((sc_buf != NULL) && (sPremix.fScToLink > GAIN_AMP_M_INF_DB))
+                {
+                    c->vShmIn           = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, sc_buf, sPremix.fScToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, sc_buf, sPremix.fScToLink, count);
+                }
+            }
+            else
+            {
+                // Link -> (In, Sc)
+                if (link_buf != NULL)
+                {
+                    // Link -> In
+                    if (sPremix.fLinkToIn > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vIn          = sPremix.vTmpIn[channel];
+                        dsp::fmadd_k4(c->vIn, in_buf, link_buf, sPremix.fLinkToIn, count);
+                    }
+                    // Link -> Sc
+                    if (sPremix.fLinkToSc > GAIN_AMP_M_INF_DB)
+                    {
+                        c->vSc          = sPremix.vTmpSc[channel];
+                        if (sc_buf != NULL)
+                            dsp::fmadd_k4(c->vSc, sc_buf, link_buf, sPremix.fLinkToSc, count);
+                        else
+                            dsp::mul_k3(c->vSc, link_buf, sPremix.fLinkToSc, count);
+                    }
+                }
+
+                // In -> Link
+                if (sPremix.fInToLink > GAIN_AMP_M_INF_DB)
+                {
+                    c->vShmIn       = sPremix.vTmpLink[channel];
+                    if (link_buf != NULL)
+                        dsp::fmadd_k4(c->vShmIn, link_buf, in_buf, sPremix.fInToLink, count);
+                    else
+                        dsp::mul_k3(c->vShmIn, in_buf, sPremix.fInToLink, count);
+                }
+            }
+        }
+
         void mb_limiter::process(size_t samples)
         {
             // Bind input signal
@@ -1463,32 +1635,36 @@ namespace lsp
             {
                 channel_t *c        = &vChannels[i];
 
-                c->vIn              = c->pIn->buffer<float>();
-                c->vOut             = c->pOut->buffer<float>();
-                c->vSc              = (c->pSc != NULL) ? c->pSc->buffer<float>() : NULL;
-                c->vShmIn           = NULL;
+                sPremix.vIn[i]      = c->pIn->buffer<float>();
+                sPremix.vOut[i]     = c->pOut->buffer<float>();
+                sPremix.vSc[i]      = (c->pSc != NULL) ? c->pSc->buffer<float>() : sPremix.vIn[i];
+                sPremix.vLink[i]    = NULL;
+
+                core::AudioBuffer *shm_buf  = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
+                if ((shm_buf != NULL) && (shm_buf->active()))
+                    sPremix.vLink[i]    = shm_buf->buffer();
 
                 c->sLimiter.fInLevel        = GAIN_AMP_M_INF_DB;
                 c->sLimiter.fReductionLevel = GAIN_AMP_P_96_DB;
 
                 for (size_t i=0; i<meta::mb_limiter::BANDS_MAX; ++i)
                 {
-                    band_t *b           = &c->vBands[i];
+                    band_t *b                   = &c->vBands[i];
                     b->sLimiter.fInLevel        = GAIN_AMP_M_INF_DB;
                     b->sLimiter.fReductionLevel = GAIN_AMP_P_96_DB;
                 }
-
-                core::AudioBuffer *shm_buf  = (c->pShmIn != NULL) ? c->pShmIn->buffer<core::AudioBuffer>() : NULL;
-                if ((shm_buf != NULL) && (shm_buf->active()))
-                    c->vShmIn           = shm_buf->buffer();
             }
 
             // Do main processing
             for (size_t offset=0; offset < samples;)
             {
                 // Compute number of samples to process
-                size_t count        = lsp_min(samples - offset, BUFFER_SIZE);
-                size_t ovs_count    = count * vChannels[0].sScOver.get_oversampling();
+                const size_t count          = lsp_min(samples - offset, BUFFER_SIZE);
+                const size_t ovs_count      = count * vChannels[0].sScOver.get_oversampling();
+
+                // Pre-mix channels
+                for (size_t i=0; i<nChannels; ++i)
+                    premix_channel(i, count);
 
                 // Perform multiband processing
                 oversample_data(count, ovs_count);
@@ -1510,16 +1686,6 @@ namespace lsp
                 perform_analysis(count);
 
                 // Update pointers
-                for (size_t i=0; i<nChannels; ++i)
-                {
-                    channel_t *c        = &vChannels[i];
-                    c->vIn             += count;
-                    c->vOut            += count;
-                    if (c->vSc != NULL)
-                        c->vSc             += count;
-                    if (c->vShmIn != NULL)
-                        c->vShmIn          += count;
-                }
                 offset += count;
             }
 
@@ -1555,20 +1721,35 @@ namespace lsp
                 {
                     case SCM_EXTERNAL:
                     {
-                        const float *buf = (c->vSc != NULL) ? c->vSc : vEmptyBuf;
-                        c->sScOver.upsample(c->vScBuf, buf, samples);
-                        c->sScBoost.process(c->vScBuf, c->vScBuf, ovs_samples);
+                        if (c->vSc != NULL)
+                        {
+                            c->sScOver.upsample(c->vScBuf, c->vSc, samples);
+                            c->sScBoost.process(c->vScBuf, c->vScBuf, ovs_samples);
+                        }
+                        else
+                            dsp::fill_zero(c->vScBuf, ovs_samples);
                         break;
                     }
                     case SCM_LINK:
                     {
-                        const float *buf = (c->vShmIn != NULL) ? c->vShmIn : vEmptyBuf;
-                        c->sScOver.upsample(c->vScBuf, buf, samples);
-                        c->sScBoost.process(c->vScBuf, c->vScBuf, ovs_samples);
+                        if (c->vShmIn != NULL)
+                        {
+                            c->sScOver.upsample(c->vScBuf, c->vShmIn, samples);
+                            c->sScBoost.process(c->vScBuf, c->vScBuf, ovs_samples);
+                        }
+                        else
+                            dsp::fill_zero(c->vScBuf, ovs_samples);
                         break;
                     }
+                    case SCM_INTERNAL:
                     default:
-                        c->sScBoost.process(c->vScBuf, c->vInBuf, ovs_samples);
+                        if (c->pSc == NULL)
+                        {
+                            c->sScOver.upsample(c->vScBuf, c->vSc, samples);
+                            c->sScBoost.process(c->vScBuf, c->vScBuf, ovs_samples);
+                        }
+                        else
+                            c->sScBoost.process(c->vScBuf, c->vInBuf, ovs_samples);
                         break;
                 }
             }
@@ -1904,6 +2085,32 @@ namespace lsp
         {
             v->write_object("sAnalyzer", &sAnalyzer);
             v->write_object("sCounter", &sCounter);
+            v->begin_object("sPremix", &sPremix, sizeof(premix_t));
+            {
+                v->write("fInToSc", sPremix.fInToSc);
+                v->write("fInToLink", sPremix.fInToLink);
+                v->write("fLinkToIn", sPremix.fLinkToIn);
+                v->write("fLinkToSc", sPremix.fLinkToSc);
+                v->write("fScToIn", sPremix.fScToIn);
+                v->write("fScToLink", sPremix.fScToLink);
+
+                v->writev("vIn", sPremix.vIn, 2);
+                v->writev("vOut", sPremix.vOut, 2);
+                v->writev("vSc", sPremix.vSc, 2);
+                v->writev("vLink", sPremix.vLink, 2);
+                v->writev("vTmpIn", sPremix.vTmpIn, 2);
+                v->writev("vTmpLink", sPremix.vTmpLink, 2);
+                v->writev("vTmpSc", sPremix.vTmpSc, 2);
+
+                v->write("pInToSc", sPremix.pInToSc);
+                v->write("pInToLink", sPremix.pInToLink);
+                v->write("pLinkToIn", sPremix.pLinkToIn);
+                v->write("pLinkToSc", sPremix.pLinkToSc);
+                v->write("pScToIn", sPremix.pScToIn);
+                v->write("pScToLink", sPremix.pScToLink);
+            }
+            v->end_object();
+
             v->write("nChannels", nChannels);
             v->write("nMode", nMode);
             v->write("bSidechain", bSidechain);
@@ -2004,7 +2211,6 @@ namespace lsp
             }
             v->end_array();
 
-            v->write("vEmptyBuf", vEmptyBuf);
             v->write("vTmpBuf", vTmpBuf);
             v->write("vEnvBuf", vEnvBuf);
             v->write("vIndexes", vIndexes);
diff -pruN 1.2.21-5/modules/lsp-plugins-mb-limiter/src/main/ui/mb_limiter.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/src/main/ui/mb_limiter.cpp
--- 1.2.21-5/modules/lsp-plugins-mb-limiter/src/main/ui/mb_limiter.cpp	2025-03-01 12:43:14.400542694 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mb-limiter/src/main/ui/mb_limiter.cpp	2025-08-26 18:16:01.061835040 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mb-limiter
  * Created on: 25 нояб. 2020 г.
@@ -301,7 +301,10 @@ namespace lsp
                     update_split_note_text(s);
 
                     if (flags & ui::PORT_USER_EDIT)
-                        freq_initiator = s;
+                    {
+                        if (s->bOn)
+                            freq_initiator = s;
+                    }
                     else if (s->bOn)
                         need_resort_active_splits = true;
                 }
diff -pruN 1.2.21-5/modules/lsp-plugins-mixer/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-mixer/.github/workflows/build.yml	2025-03-01 12:43:10.588565576 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/.github/workflows/build.yml	2025-08-26 18:15:58.721857751 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-mixer/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-mixer/CHANGELOG	2025-03-01 12:43:10.588565576 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/CHANGELOG	2025-08-26 18:15:58.721857751 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.18 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.17 ===
+* Updated build scripts and dependencies.
+
 === 1.0.16 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mixer/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-mixer/dependencies.mk	2025-03-01 12:43:10.588565576 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/dependencies.mk	2025-08-26 18:15:58.721857751 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mixer/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-mixer/make/tools.mk	2025-03-01 12:43:10.588565576 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/make/tools.mk	2025-08-26 18:15:58.721857751 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-mixer/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/modules.mk
--- 1.2.21-5/modules/lsp-plugins-mixer/modules.mk	2025-03-01 12:43:10.588565576 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/modules.mk	2025-08-26 18:15:58.721857751 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-mixer/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/project.mk
--- 1.2.21-5/modules/lsp-plugins-mixer/project.mk	2025-03-01 12:43:10.592565551 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/project.mk	2025-08-26 18:15:58.725857712 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Mixer Plugin Bundle
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.16
+ARTIFACT_VERSION            = 1.0.18
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x16_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x16_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x16_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x16_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x4_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x4_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x4_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x4_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x8_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x8_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x8_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/res/doc/screenshots/mixer_x8_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-mixer/src/main/meta/mixer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/src/main/meta/mixer.cpp
--- 1.2.21-5/modules/lsp-plugins-mixer/src/main/meta/mixer.cpp	2025-03-01 12:43:10.596565528 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-mixer/src/main/meta/mixer.cpp	2025-08-26 18:15:58.729857673 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-mixer
  * Created on: 25 нояб. 2020 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_MIXER_VERSION_MAJOR       1
 #define LSP_PLUGINS_MIXER_VERSION_MINOR       0
-#define LSP_PLUGINS_MIXER_VERSION_MICRO       16
+#define LSP_PLUGINS_MIXER_VERSION_MICRO       18
 
 #define LSP_PLUGINS_MIXER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -53,39 +53,39 @@ namespace lsp
         #define MIX_MONO_CHANNEL(id, label) \
             AUDIO_INPUT("in" id, "Audio input " label), \
             OPT_RETURN_MONO("ret" id, "rin" id, "Audio channel " label " return"), \
-            SWITCH("cs" id, "Channel solo " label, 0.0f), \
-            SWITCH("cm" id, "Channel mute " label, 0.0f), \
-            SWITCH("ci" id, "Channel phase invert " label, 0.0f), \
-            LOG_CONTROL("cg" id, "Channel gain " label, U_GAIN_AMP, meta::mixer::CHANNEL_GAIN), \
+            SWITCH("cs" id, "Channel solo " label, "Solo " label, 0.0f), \
+            SWITCH("cm" id, "Channel mute " label, "Mute " label, 0.0f), \
+            SWITCH("ci" id, "Channel phase invert " label, "Phase " label, 0.0f), \
+            LOG_CONTROL("cg" id, "Channel gain " label, "Gain " label, U_GAIN_AMP, meta::mixer::CHANNEL_GAIN), \
             METER_GAIN("cl" id, "Channel signal level " label, GAIN_AMP_P_48_DB)
 
         #define MIX_STEREO_CHANNEL(id, label) \
             AUDIO_INPUT("in" id "l", "Audio input left " label), \
             AUDIO_INPUT("in" id "r", "Audio input right " label), \
             OPT_RETURN_STEREO("ret" id, "rin" id, "Audio channel " label " return"), \
-            SWITCH("cs" id, "Channel solo " label, 0.0f), \
-            SWITCH("cm" id, "Channel mute " label, 0.0f), \
-            SWITCH("ci" id, "Channel phase invert " label, 0.0f), \
-            PAN_CTL("cp" id "l", "Channel pan left " label, -100.0f), \
-            PAN_CTL("cp" id "r", "Channel pan right " label, 100.0f), \
-            PAN_CTL("cb" id, "Channel output balance " label, 0.0f), \
-            LOG_CONTROL("cg" id, "Channel gain " label, U_GAIN_AMP, meta::mixer::CHANNEL_GAIN), \
+            SWITCH("cs" id, "Channel solo " label, "Solo " label, 0.0f), \
+            SWITCH("cm" id, "Channel mute " label, "Mute " label, 0.0f), \
+            SWITCH("ci" id, "Channel phase invert " label, "Phase " label, 0.0f), \
+            PAN_CTL("cp" id "l", "Channel pan left " label, "Pan L " label, -100.0f), \
+            PAN_CTL("cp" id "r", "Channel pan right " label, "Pan R " label, 100.0f), \
+            PAN_CTL("cb" id, "Channel output balance " label, "Balance " label, 0.0f), \
+            LOG_CONTROL("cg" id, "Channel gain " label, "Gain " label, U_GAIN_AMP, meta::mixer::CHANNEL_GAIN), \
             METER_GAIN("cl" id "l", "Channel signal level left " label, GAIN_AMP_P_48_DB), \
             METER_GAIN("cl" id "r", "Channel signal level right " label, GAIN_AMP_P_48_DB)
 
         #define MIX_MONO_GLOBAL \
             DRY_GAIN(1.0f), \
             WET_GAIN(1.0f), \
-            LOG_CONTROL("g_out", "Output gain", U_GAIN_AMP, meta::mixer::CHANNEL_GAIN), \
+            LOG_CONTROL("g_out", "Output gain", "Out gain", U_GAIN_AMP, meta::mixer::CHANNEL_GAIN), \
             METER_GAIN("ilm", "Input level meter", GAIN_AMP_P_48_DB), \
             METER_GAIN("olm", "Output level meter", GAIN_AMP_P_48_DB)
 
         #define MIX_STEREO_GLOBAL \
-            SWITCH("mono", "Mono output", 0.0f), \
-            PAN_CTL("bal", "Output balance", 0.0f), \
+            SWITCH("mono", "Mono output", "Mono", 0.0f), \
+            PAN_CTL("bal", "Output balance", "Balance", 0.0f), \
             DRY_GAIN(1.0f), \
             WET_GAIN(1.0f), \
-            LOG_CONTROL("g_out", "Output gain", U_GAIN_AMP, meta::mixer::CHANNEL_GAIN), \
+            LOG_CONTROL("g_out", "Output gain", "Out gain", U_GAIN_AMP, meta::mixer::CHANNEL_GAIN), \
             METER_GAIN("ilm_l", "Input level meter left", GAIN_AMP_P_48_DB), \
             METER_GAIN("ilm_r", "Input level meter right", GAIN_AMP_P_48_DB), \
             METER_GAIN("olm_l", "Output level meter left", GAIN_AMP_P_48_DB), \
diff -pruN 1.2.21-5/modules/lsp-plugins-noise-generator/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-noise-generator/.github/workflows/build.yml	2025-03-01 12:43:10.836564087 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/.github/workflows/build.yml	2025-08-26 18:16:00.573839777 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-noise-generator/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-noise-generator/CHANGELOG	2025-03-01 12:43:10.836564087 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/CHANGELOG	2025-08-26 18:16:00.573839777 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.21 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.20 ===
+* Updated build scripts and dependencies.
+
 === 1.0.19 ===
 * Updated build scripts and dependencies.
 
@@ -60,6 +66,5 @@
 * Updated build scripts and dependencies.
 
 === 1.0.0 ===
-* TODO: write chanes here as a dot list.
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-noise-generator/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-noise-generator/dependencies.mk	2025-03-01 12:43:10.836564087 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/dependencies.mk	2025-08-26 18:16:00.573839777 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-noise-generator/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-noise-generator/make/tools.mk	2025-03-01 12:43:10.836564087 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/make/tools.mk	2025-08-26 18:16:00.573839777 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-noise-generator/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/modules.mk
--- 1.2.21-5/modules/lsp-plugins-noise-generator/modules.mk	2025-03-01 12:43:10.836564087 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/modules.mk	2025-08-26 18:16:00.573839777 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-noise-generator/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/project.mk
--- 1.2.21-5/modules/lsp-plugins-noise-generator/project.mk	2025-03-01 12:43:10.840564063 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/project.mk	2025-08-26 18:16:00.573839777 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Noise Generator Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.19
+ARTIFACT_VERSION            = 1.0.21
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-noise-generator/res/doc/screenshots/noise_generator_x1.png and 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/res/doc/screenshots/noise_generator_x1.png differ
Binary files 1.2.21-5/modules/lsp-plugins-noise-generator/res/doc/screenshots/noise_generator_x2.png and 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/res/doc/screenshots/noise_generator_x2.png differ
Binary files 1.2.21-5/modules/lsp-plugins-noise-generator/res/doc/screenshots/noise_generator_x4.png and 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/res/doc/screenshots/noise_generator_x4.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-noise-generator/src/doc/manuals/plugins/noise_generator.php 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/src/doc/manuals/plugins/noise_generator.php
--- 1.2.21-5/modules/lsp-plugins-noise-generator/src/doc/manuals/plugins/noise_generator.php	2025-03-01 12:43:10.844564040 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/src/doc/manuals/plugins/noise_generator.php	2025-08-26 18:16:00.581839699 +0000
@@ -104,14 +104,14 @@ $x4     =   strpos($PAGE, '_x4') > 0;
 			rates lower than this the noise cannot be made inaudible.
 		</li>
 	</ul>
-	<li><b>Type</b> - This control selects the type of noise generator. The following types are avaiable.</li>
+	<li><b>Type</b> - This control selects the type of noise generator. The following types are available.</li>
 	<ul>
 		<li>
 			<b>Off</b> - Shuts off the noise generator. 
 		</li>
 		<li>
 			<b>MLS</b> - Maximum Length Sequence. This is a high quality generator with ideal decorrelation.
-			It is the "most random" noise avalible. However, it has only two states (samples are emitted only
+			It is the "most random" noise available. However, it has only two states (samples are emitted only
 			at minimal or maximum range).
 		</li>
 		<li>
@@ -122,7 +122,7 @@ $x4     =   strpos($PAGE, '_x4') > 0;
 			<b>Velvet</b> - Velvet Noise Generator. This is a sparse noise generator (random pulses
 			separated by random amounts of silence). It has specific types (see <b>Velvet Type</b>)
 			and it can be crushed. Crushing means that the spike values are rounded to 0 or full scale
-			depending on the outcome of a ramdom variable. This process can be tuned by a probability
+			depending on the outcome of a random variable. This process can be tuned by a probability
 			to which the random variable is compared.
 		</li>
 	</ul>
@@ -153,7 +153,7 @@ $x4     =   strpos($PAGE, '_x4') > 0;
 	</li>
 	<ul>
 		<li><b>Uniform</b> - A uniform probability distribution.</li>
-		<li><b>Exponential</b> - A two sided exponetial probability distribution.</li>
+		<li><b>Exponential</b> - A two sided exponential probability distribution.</li>
 		<li><b>Triangular</b> - A triangular probability distribution.</li>
 		<li><b>Gaussian</b> - A gaussian probability distribution.</li>
 	</ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-noise-generator/src/main/meta/noise_generator.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/src/main/meta/noise_generator.cpp
--- 1.2.21-5/modules/lsp-plugins-noise-generator/src/main/meta/noise_generator.cpp	2025-03-01 12:43:10.844564040 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-noise-generator/src/main/meta/noise_generator.cpp	2025-08-26 18:16:00.581839699 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Stefano Tronci <stefano.tronci@protonmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Stefano Tronci <stefano.tronci@protonmail.com>
  *
  * This file is part of lsp-plugins
  * Created on: 27 Feb 2022
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_NOISE_GENERATOR_VERSION_MAJOR       1
 #define LSP_PLUGINS_NOISE_GENERATOR_VERSION_MINOR       0
-#define LSP_PLUGINS_NOISE_GENERATOR_VERSION_MICRO       19
+#define LSP_PLUGINS_NOISE_GENERATOR_VERSION_MICRO       21
 
 #define LSP_PLUGINS_NOISE_GENERATOR_VERSION  \
     LSP_MODULE_VERSION( \
@@ -96,69 +96,69 @@ namespace lsp
             AUDIO_OUTPUT("out" id, "Output" label)
 
         #define LCG_CONTROLS(id, label) \
-            COMBO("ld" id, "LCG Distribution" label, noise_generator::NOISE_LCG_DFL, noise_lcg_dist)
+            COMBO("ld" id, "LCG Distribution" label, "LGC dist" label, noise_generator::NOISE_LCG_DFL, noise_lcg_dist)
 
         #define VELVET_CONTROLS(id, label) \
-            COMBO("vt" id, "Velvet Type" label, noise_generator::NOISE_VELVET_DFL, noise_velvet_type), \
-            LOG_CONTROL("vw" id, "Velvet Window" label, U_SEC, noise_generator::VELVET_WINDOW_DURATION), \
-            LOG_CONTROL("vd" id, "Velvet ARN Delta" label, U_NONE, noise_generator::VELVET_ARN_DELTA), \
-            SWITCH("vc" id, "Velvet Crushing", 0.0f), \
-            CONTROL("vp" id, "Velvet Crushing Probability" label, U_PERCENT, noise_generator::VELVET_CRUSH_PROB)
+            COMBO("vt" id, "Velvet Type" label, "Velvet type" label, noise_generator::NOISE_VELVET_DFL, noise_velvet_type), \
+            LOG_CONTROL("vw" id, "Velvet Window" label, "Velvet wnd" label, U_SEC, noise_generator::VELVET_WINDOW_DURATION), \
+            LOG_CONTROL("vd" id, "Velvet ARN Delta" label, "Velvet ARN" label, U_NONE, noise_generator::VELVET_ARN_DELTA), \
+            SWITCH("vc" id, "Velvet Crushing", "Velvet crush" label, 0.0f), \
+            CONTROL("vp" id, "Velvet Crushing Probability" label, "Velvet prob" label, U_PERCENT, noise_generator::VELVET_CRUSH_PROB)
 
         #define COLOR_CONTROLS(id, label) \
-            COMBO("cs" id, "Color Selector" label, noise_generator::NOISE_COLOR_DFL, noise_color), \
-            CONTROL("csn" id, "Color Slope NPN" label, U_NEPER, noise_generator::NOISE_COLOR_SLOPE_NPN), \
-            CONTROL("cso" id, "Color Slope dBO" label, U_DB, noise_generator::NOISE_COLOR_SLOPE_DBO), \
-            CONTROL("csd" id, "Color Slope dBD" label, U_DB, noise_generator::NOISE_COLOR_SLOPE_DBD)
+            COMBO("cs" id, "Color Selector" label, "Color" label, noise_generator::NOISE_COLOR_DFL, noise_color), \
+            CONTROL("csn" id, "Color Slope NPN" label, "Color NPN" label, U_NEPER, noise_generator::NOISE_COLOR_SLOPE_NPN), \
+            CONTROL("cso" id, "Color Slope dBO" label, "Color dBO" label, U_DB, noise_generator::NOISE_COLOR_SLOPE_DBO), \
+            CONTROL("csd" id, "Color Slope dBD" label, "Color dBD" label, U_DB, noise_generator::NOISE_COLOR_SLOPE_DBD)
 
         #define NOISE_CONTROLS(id, label, noise_t) \
-            COMBO("nt" id, "Noise Type" label, noise_t, noise_type), \
-            AMP_GAIN100("na" id, "Noise Amplitude", noise_generator::NOISE_AMPLITUDE_DFL), \
-            CONTROL("no" id, "Noise Offset" label, U_NONE, noise_generator::NOISE_OFFSET), \
-            SWITCH("ns" id, "Noise Solo" label, 0.0f), \
-            SWITCH("nm" id, "Noise Mute" label, 0.0f), \
-            SWITCH("ni" id, "Noise Inaudible", 0.0f)
+            COMBO("nt" id, "Noise Type" label, "Noise" label, noise_t, noise_type), \
+            AMP_GAIN100("na" id, "Noise Amplitude", "Noise gain" label, noise_generator::NOISE_AMPLITUDE_DFL), \
+            CONTROL("no" id, "Noise Offset" label, "Offset" label, U_NONE, noise_generator::NOISE_OFFSET), \
+            SWITCH("ns" id, "Noise Solo" label, "Solo" label, 0.0f), \
+            SWITCH("nm" id, "Noise Mute" label, "Mute" label, 0.0f), \
+            SWITCH("ni" id, "Noise Inaudible", "Inaudible" label, 0.0f)
 
         #define GENERATOR_CONTROLS(id, label, noise_t) \
             NOISE_CONTROLS(id, label, noise_t), \
             LCG_CONTROLS(id, label), \
             VELVET_CONTROLS(id, label), \
             COLOR_CONTROLS(id, label), \
-            SWITCH("fftg" id, "Generator Output FFT Analysis" label, 1), \
+            SWITCH("fftg" id, "Generator Output FFT Analysis" label, "FFT On " label, 1), \
             METER_GAIN("nlm" id, "Noise Level Meter" label, GAIN_AMP_P_24_DB), \
             MESH("nsc" id, "Noise Spectrum Chart" label, 2, noise_generator::MESH_POINTS + 4), \
             MESH("nsg" id, "Noise Spectrum Graph" label, 2, noise_generator::MESH_POINTS)
 
         #define CHANNEL_CONTROLS(id, label, g1, g2, g3, g4) \
-            COMBO("cm" id, "Channel Mode" label, noise_generator::CHANNEL_MODE_DFL, channel_mode), \
-            AMP_GAIN100("gg1" id, "Generator 1 Gain" label, g1), \
-            AMP_GAIN100("gg2" id, "Generator 2 Gain" label, g2), \
-            AMP_GAIN100("gg3" id, "Generator 3 Gain" label, g3), \
-            AMP_GAIN100("gg4" id, "Generator 4 Gain" label, g4), \
-            AMP_GAIN100("gin" id, "Input gain" label, GAIN_AMP_0_DB), \
-            AMP_GAIN100("gout" id, "Output gain" label, GAIN_AMP_0_DB), \
+            COMBO("cm" id, "Channel Mode" label, "Chan mode" label, noise_generator::CHANNEL_MODE_DFL, channel_mode), \
+            AMP_GAIN100("gg1" id, "Generator 1 Gain" label, "Gen1 gain" label, g1), \
+            AMP_GAIN100("gg2" id, "Generator 2 Gain" label, "Gen2 gain" label, g2), \
+            AMP_GAIN100("gg3" id, "Generator 3 Gain" label, "Gen3 gain" label, g3), \
+            AMP_GAIN100("gg4" id, "Generator 4 Gain" label, "Gen4 gain" label, g4), \
+            AMP_GAIN100("gin" id, "Input gain" label, "In gain" label, GAIN_AMP_0_DB), \
+            AMP_GAIN100("gout" id, "Output gain" label, "Out gain" label, GAIN_AMP_0_DB), \
             METER_GAIN("ilm" id, "Input Level Meter" label, GAIN_AMP_P_24_DB), \
             METER_GAIN("olm" id, "Output Level Meter" label, GAIN_AMP_P_24_DB), \
             MESH("isg" id, "Input Spectrum Graph" label, 2, noise_generator::MESH_POINTS), \
             MESH("osg" id, "Output Spectrum Graph" label, 2, noise_generator::MESH_POINTS)
 
         #define MCHANNEL_CONTROLS(id, label, g1, g2, g3, g4) \
-            SWITCH("chs" id, "Channel Solo" label, 0.0f), \
-            SWITCH("chm" id, "Channel Mute" label, 0.0f), \
-            SWITCH("ffti" id, "Input Signal FFT Analysis" label, 1.0f), \
-            SWITCH("ffto" id, "Output Signal FFT Analysis" label, 1.0f), \
+            SWITCH("chs" id, "Channel Solo" label, "Solo chan" label, 0.0f), \
+            SWITCH("chm" id, "Channel Mute" label, "Mute chan" label, 0.0f), \
+            SWITCH("ffti" id, "Input Signal FFT Analysis" label, "FFT In chan" label, 1.0f), \
+            SWITCH("ffto" id, "Output Signal FFT Analysis" label, "FFT Out chan" label, 1.0f), \
             CHANNEL_CONTROLS(id, label, g1, g2, g3, g4)
 
         #define NG_COMMON \
             BYPASS, \
-            AMP_GAIN("g_in", "Input Gain", noise_generator::IN_GAIN_DFL, 10.0f), \
-            AMP_GAIN("g_out", "Output Gain", noise_generator::OUT_GAIN_DFL, 10.0f), \
-            LOG_CONTROL("zoom", "Graph Zoom", U_GAIN_AMP, noise_generator::ZOOM), \
-            SWITCH("ffti", "Input Signal FFT Analysis", 0.0f), \
-            SWITCH("ffto", "Output Signal FFT Analysis", 0.0f), \
-            SWITCH("fftg", "Generator Output Signal FFT Analysis", 1.0f), \
-            LOG_CONTROL("react", "FFT Reactivity", U_MSEC, noise_generator::FFT_REACT_TIME), \
-            AMP_GAIN("shift", "FFT Shift Gain", 1.0f, 100.0f) \
+            AMP_GAIN("g_in", "Input Gain", "Input gain", noise_generator::IN_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_out", "Output Gain", "Output gain", noise_generator::OUT_GAIN_DFL, 10.0f), \
+            LOG_CONTROL("zoom", "Graph Zoom", "Zoom", U_GAIN_AMP, noise_generator::ZOOM), \
+            SWITCH("ffti", "Input Signal FFT Analysis", "FFT In", 0.0f), \
+            SWITCH("ffto", "Output Signal FFT Analysis", "FFT Out", 0.0f), \
+            SWITCH("fftg", "Generator Output Signal FFT Analysis", "FFT Gen", 1.0f), \
+            LOG_CONTROL("react", "FFT Reactivity", "Reactivity", U_MSEC, noise_generator::FFT_REACT_TIME), \
+            AMP_GAIN("shift", "FFT Shift Gain", "FFT shift", 1.0f, 100.0f) \
 
         static const port_t noise_generator_x1_ports[] =
         {
diff -pruN 1.2.21-5/modules/lsp-plugins-oscillator/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-oscillator/.github/workflows/build.yml	2025-03-01 12:43:11.584559597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/.github/workflows/build.yml	2025-08-26 18:16:00.145843931 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-oscillator/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-oscillator/CHANGELOG	2025-03-01 12:43:11.584559597 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/CHANGELOG	2025-08-26 18:16:00.145843931 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts and dependencies.
+
 === 1.0.24 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-oscillator/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-oscillator/dependencies.mk	2025-03-01 12:43:11.588559573 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/dependencies.mk	2025-08-26 18:16:00.145843931 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-oscillator/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-oscillator/make/tools.mk	2025-03-01 12:43:11.588559573 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/make/tools.mk	2025-08-26 18:16:00.149843892 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-oscillator/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/modules.mk
--- 1.2.21-5/modules/lsp-plugins-oscillator/modules.mk	2025-03-01 12:43:11.588559573 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/modules.mk	2025-08-26 18:16:00.149843892 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-oscillator/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/project.mk
--- 1.2.21-5/modules/lsp-plugins-oscillator/project.mk	2025-03-01 12:43:11.588559573 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/project.mk	2025-08-26 18:16:00.149843892 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Oscillator Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-oscillator/res/doc/screenshots/oscillator_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/res/doc/screenshots/oscillator_mono.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-oscillator/src/main/meta/oscillator.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/src/main/meta/oscillator.cpp
--- 1.2.21-5/modules/lsp-plugins-oscillator/src/main/meta/oscillator.cpp	2025-03-01 12:43:11.588559573 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscillator/src/main/meta/oscillator.cpp	2025-08-26 18:16:00.149843892 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-oscillator
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_OSCILLATOR_VERSION_MAJOR       1
 #define LSP_PLUGINS_OSCILLATOR_VERSION_MINOR       0
-#define LSP_PLUGINS_OSCILLATOR_VERSION_MICRO       24
+#define LSP_PLUGINS_OSCILLATOR_VERSION_MICRO       26
 
 #define LSP_PLUGINS_OSCILLATOR_VERSION  \
     LSP_MODULE_VERSION( \
@@ -90,23 +90,23 @@ namespace lsp
         {
             PORTS_MONO_PLUGIN,
             BYPASS,
-            LOG_CONTROL("freq", "Frequency", U_HZ, oscillator_metadata::FREQUENCY),
-            AMP_GAIN10("gain", "Output gain", 1.0f),
-            CONTROL("dcoff", "DC Offset", U_NONE, oscillator_metadata::DCOFFSET),
-            COMBO("scr", "DC Reference", oscillator_metadata::SC_DC_DFL, sc_dc_ref),
-            CYC_CONTROL("iniph", "Initial Phase", U_DEG, oscillator_metadata::INITPHASE),
-            COMBO("scm", "Operation Mode", oscillator_metadata::SC_MODE_DFL, sc_mode),
-            COMBO("scom", "Oversampler Mode", oscillator_metadata::SC_OVS_DFL, sc_oversampler_mode),
-            COMBO("scf", "Function", oscillator_metadata::SC_FUNC_DFL, sc_func),
-            SWITCH("invss", "Invert Squared Sinusoids", 0.0f),
-            SWITCH("invps", "Invert Parabolic Signal", 0.0f),
-            PERCENTS("rdtrt", "Duty Ratio", 50.0f, 0.025f),
-            PERCENTS("swdth", "Width", 50.0f, 0.025f),
-            PERCENTS("trsrt", "Raise Ratio", 25.0f, 0.025f),
-            PERCENTS("tflrt", "Fall Ratio", 25.0f, 0.025f),
-            PERCENTS("tpwrt", "Positive Width", 25.0f, 0.025f),
-            PERCENTS("tnwrt", "Negative Width", 25.0f, 0.025f),
-            PERCENTS("pwdth", "Width", 100.0f, 0.025f),
+            LOG_CONTROL("freq", "Frequency", "Frequency", U_HZ, oscillator_metadata::FREQUENCY),
+            AMP_GAIN10("gain", "Output gain", "Output gain", 1.0f),
+            CONTROL("dcoff", "DC Offset", "DC offset", U_NONE, oscillator_metadata::DCOFFSET),
+            COMBO("scr", "DC Reference", "DC reference", oscillator_metadata::SC_DC_DFL, sc_dc_ref),
+            CYC_CONTROL("iniph", "Initial Phase", "Phase", U_DEG, oscillator_metadata::INITPHASE),
+            COMBO("scm", "Operation Mode", "Mode", oscillator_metadata::SC_MODE_DFL, sc_mode),
+            COMBO("scom", "Oversampler Mode", "Oversample", oscillator_metadata::SC_OVS_DFL, sc_oversampler_mode),
+            COMBO("scf", "Function", "Function", oscillator_metadata::SC_FUNC_DFL, sc_func),
+            SWITCH("invss", "Invert Squared Sinusoids", "Inv sqr sine", 0.0f),
+            SWITCH("invps", "Invert Parabolic Signal", "Inv paraboas", 0.0f),
+            PERCENTS("rdtrt", "Duty Ratio", "Duty ratio", 50.0f, 0.025f),
+            PERCENTS("swdth", "Width", "Width", 50.0f, 0.025f),
+            PERCENTS("trsrt", "Raise Ratio", "Raise ratio", 25.0f, 0.025f),
+            PERCENTS("tflrt", "Fall Ratio", "Fall ratio", 25.0f, 0.025f),
+            PERCENTS("tpwrt", "Positive Width", "Positive Width", 25.0f, 0.025f),
+            PERCENTS("tnwrt", "Negative Width", "Negative Width", 25.0f, 0.025f),
+            PERCENTS("pwdth", "Parabolic Width", "Par Width", 100.0f, 0.025f),
             MESH("ow", "Output wave", 2, oscillator_metadata::HISTORY_MESH_SIZE),
 
             PORTS_END
diff -pruN 1.2.21-5/modules/lsp-plugins-oscilloscope/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-oscilloscope/.github/workflows/build.yml	2025-03-01 12:43:11.472560269 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/.github/workflows/build.yml	2025-08-26 18:16:00.537840126 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-oscilloscope/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-oscilloscope/CHANGELOG	2025-03-01 12:43:11.472560269 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/CHANGELOG	2025-08-26 18:16:00.537840126 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts and dependencies.
+
 === 1.0.24 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-oscilloscope/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-oscilloscope/dependencies.mk	2025-03-01 12:43:11.472560269 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/dependencies.mk	2025-08-26 18:16:00.537840126 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-oscilloscope/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-oscilloscope/make/tools.mk	2025-03-01 12:43:11.472560269 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/make/tools.mk	2025-08-26 18:16:00.537840126 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-oscilloscope/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/modules.mk
--- 1.2.21-5/modules/lsp-plugins-oscilloscope/modules.mk	2025-03-01 12:43:11.472560269 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/modules.mk	2025-08-26 18:16:00.537840126 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-oscilloscope/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/project.mk
--- 1.2.21-5/modules/lsp-plugins-oscilloscope/project.mk	2025-03-01 12:43:11.472560269 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/project.mk	2025-08-26 18:16:00.537840126 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Oscilloscope Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-oscilloscope/res/doc/screenshots/oscilloscope_x1.png and 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/res/doc/screenshots/oscilloscope_x1.png differ
Binary files 1.2.21-5/modules/lsp-plugins-oscilloscope/res/doc/screenshots/oscilloscope_x2.png and 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/res/doc/screenshots/oscilloscope_x2.png differ
Binary files 1.2.21-5/modules/lsp-plugins-oscilloscope/res/doc/screenshots/oscilloscope_x4.png and 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/res/doc/screenshots/oscilloscope_x4.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-oscilloscope/src/main/meta/oscilloscope.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/src/main/meta/oscilloscope.cpp
--- 1.2.21-5/modules/lsp-plugins-oscilloscope/src/main/meta/oscilloscope.cpp	2025-03-01 12:43:11.480560221 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-oscilloscope/src/main/meta/oscilloscope.cpp	2025-08-26 18:16:00.545840049 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-oscilloscope
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_OSCILLOSCOPE_VERSION_MAJOR       1
 #define LSP_PLUGINS_OSCILLOSCOPE_VERSION_MINOR       0
-#define LSP_PLUGINS_OSCILLOSCOPE_VERSION_MICRO       24
+#define LSP_PLUGINS_OSCILLOSCOPE_VERSION_MICRO       26
 
 #define LSP_PLUGINS_OSCILLOSCOPE_VERSION  \
     LSP_MODULE_VERSION( \
@@ -124,54 +124,54 @@ namespace lsp
             AUDIO_OUTPUT("out_y" id, "Output y" label)
 
         #define COMMON_CONTROLS \
-            CONTROL("sh_sz", "Strobe History Size", U_NONE, oscilloscope_metadata::STROBE_HISTORY), \
-            LOG_CONTROL("xyrt", "XY Record Time", U_MSEC, oscilloscope_metadata::XY_RECORD_TIME), \
-            LOG_CONTROL("maxdots", "Maximum Dots for Plotting", U_NONE, oscilloscope_metadata::MAXDOTS), \
-            SWITCH("freeze", "Global Freeze Switch", 0.0f)
+            CONTROL("sh_sz", "Strobe History Size", "Strobe size", U_NONE, oscilloscope_metadata::STROBE_HISTORY), \
+            LOG_CONTROL("xyrt", "XY Record Time", "XY time", U_MSEC, oscilloscope_metadata::XY_RECORD_TIME), \
+            LOG_CONTROL("maxdots", "Maximum Dots for Plotting", "Max dots", U_NONE, oscilloscope_metadata::MAXDOTS), \
+            SWITCH("freeze", "Global Freeze Switch", "Freeze all", 0.0f)
 
         #define CHANNEL_SELECTOR(osc_channels) \
-            COMBO("osc_cs", "Oscilloscope Channel Selector", 0, osc_channels)
+            COMBO("osc_cs", "Oscilloscope Channel Selector", "Chan selector", 0, osc_channels)
 
         #define CHANNEL_SWITCHES(id, label) \
-            SWITCH("glsw" id, "Global Switch" label, 0.0f), \
-            SWITCH("frz" id, "Freeze Switch" label, 0.0f), \
-            SWITCH("chsl" id, "Solo Switch" label, 0.0f), \
-            SWITCH("chmt" id, "Mute Switch" label, 0.0f)
-
-        #define OP_CONTROLS(id, label) \
-            COMBO("ovmo" id, "Oversampler Mode" label, oscilloscope_metadata::OSC_OVS_DFL, ovs_mode), \
-            COMBO("scmo" id, "Mode" label, oscilloscope_metadata::MODE_DFL, osc_mode)
-
-        #define CP_CONTROLS(id, label) \
-            COMBO("sccx" id, "Coupling X" label, oscilloscope_metadata::COUPLING_DFL, osc_coupling), \
-            COMBO("sccy" id, "Coupling Y" label, oscilloscope_metadata::COUPLING_DFL, osc_coupling), \
-            COMBO("scce" id, "Coupling EXT" label, oscilloscope_metadata::COUPLING_DFL, osc_coupling)
-
-        #define HOR_CONTROLS(id, label) \
-            COMBO("swtp" id, "Sweep Type" label, oscilloscope_metadata::SWEEP_TYPE_DFL, sweep_type), \
-            LOG_CONTROL("tmdv" id, "Time Division" label, U_MSEC, oscilloscope_metadata::TIME_DIVISION), \
-            LOG_CONTROL("hzdv" id, "Horizontal Division" label, U_NONE, oscilloscope_metadata::HORIZONTAL_DIVISION), \
-            CONTROL("hzps" id, "Horizontal Position" label, U_PERCENT, oscilloscope_metadata::TIME_POSITION)
-
-        #define VER_CONTROLS(id, label) \
-            LOG_CONTROL("vedv" id, "Vertical Division" label, U_NONE, oscilloscope_metadata::VERTICAL_DIVISION), \
-            CONTROL("veps" id, "Vertical Position" label, U_PERCENT, oscilloscope_metadata::VERTICAL_POSITION)
-
-        #define TRG_CONTROLS(id, label) \
-            CONTROL("trhy" id, "Trigger Hysteresis" label, U_PERCENT, oscilloscope_metadata::TRIGGER_HYSTERESIS), \
-            CONTROL("trlv" id, "Trigger Level" label, U_PERCENT, oscilloscope_metadata::TRIGGER_LEVEL), \
-            LOG_CONTROL("trho" id, "Trigger Hold Time" label, U_SEC, oscilloscope_metadata::TRIGGER_HOLD_TIME), \
-            COMBO("trmo" id, "Trigger Mode" label, oscilloscope_metadata::TRIGGER_MODE_DFL, osc_trg_mode), \
-            COMBO("trtp" id, "Trigger Type" label, oscilloscope_metadata::TRIGGER_TYPE_DFL, osc_trg_type), \
-            COMBO("trin" id, "Trigger Input" label, oscilloscope_metadata::TRIGGER_INPUT_DFL, osc_trg_input), \
-            TRIGGER("trre" id, "Trigger Reset")
-
-        #define CHANNEL_CONTROLS(id, label) \
-            OP_CONTROLS(id, label), \
-            CP_CONTROLS(id, label), \
-            HOR_CONTROLS(id, label), \
-            VER_CONTROLS(id, label), \
-            TRG_CONTROLS(id, label)
+            SWITCH("glsw" id, "Global Switch" label, "Global " label, 0.0f), \
+            SWITCH("frz" id, "Freeze Switch" label, "Freeze " label, 0.0f), \
+            SWITCH("chsl" id, "Solo Switch" label, "Solo " label, 0.0f), \
+            SWITCH("chmt" id, "Mute Switch" label, "Mute " label, 0.0f)
+
+        #define OP_CONTROLS(id, label, alias) \
+            COMBO("ovmo" id, "Oversampler Mode" label, "Oversampling " alias, oscilloscope_metadata::OSC_OVS_DFL, ovs_mode), \
+            COMBO("scmo" id, "Mode" label, "Mode " alias, oscilloscope_metadata::MODE_DFL, osc_mode)
+
+        #define CP_CONTROLS(id, label, alias) \
+            COMBO("sccx" id, "Coupling X" label, "Couple X " alias, oscilloscope_metadata::COUPLING_DFL, osc_coupling), \
+            COMBO("sccy" id, "Coupling Y" label, "Couple Y " alias, oscilloscope_metadata::COUPLING_DFL, osc_coupling), \
+            COMBO("scce" id, "Coupling EXT" label, "Couple Ext " alias, oscilloscope_metadata::COUPLING_DFL, osc_coupling)
+
+        #define HOR_CONTROLS(id, label, alias) \
+            COMBO("swtp" id, "Sweep Type" label, "Sweep " alias, oscilloscope_metadata::SWEEP_TYPE_DFL, sweep_type), \
+            LOG_CONTROL("tmdv" id, "Time Division" label, "Time div" alias, U_MSEC, oscilloscope_metadata::TIME_DIVISION), \
+            LOG_CONTROL("hzdv" id, "Horizontal Division" label, "Hor div" alias, U_NONE, oscilloscope_metadata::HORIZONTAL_DIVISION), \
+            CONTROL("hzps" id, "Horizontal Position" label, "Hor pos" alias, U_PERCENT, oscilloscope_metadata::TIME_POSITION)
+
+        #define VER_CONTROLS(id, label, alias) \
+            LOG_CONTROL("vedv" id, "Vertical Division" label, "Vert div" alias, U_NONE, oscilloscope_metadata::VERTICAL_DIVISION), \
+            CONTROL("veps" id, "Vertical Position" label, "Vert pos" alias, U_PERCENT, oscilloscope_metadata::VERTICAL_POSITION)
+
+        #define TRG_CONTROLS(id, label, alias) \
+            CONTROL("trhy" id, "Trigger Hysteresis" label, "Trg hyst" alias, U_PERCENT, oscilloscope_metadata::TRIGGER_HYSTERESIS), \
+            CONTROL("trlv" id, "Trigger Level" label, "Trg lvl" alias, U_PERCENT, oscilloscope_metadata::TRIGGER_LEVEL), \
+            LOG_CONTROL("trho" id, "Trigger Hold Time" label, "Hold time" alias, U_SEC, oscilloscope_metadata::TRIGGER_HOLD_TIME), \
+            COMBO("trmo" id, "Trigger Mode" label, "Trg mode" alias, oscilloscope_metadata::TRIGGER_MODE_DFL, osc_trg_mode), \
+            COMBO("trtp" id, "Trigger Type" label, "Trg type" alias, oscilloscope_metadata::TRIGGER_TYPE_DFL, osc_trg_type), \
+            COMBO("trin" id, "Trigger Input" label, "Trg in" alias, oscilloscope_metadata::TRIGGER_INPUT_DFL, osc_trg_input), \
+            TRIGGER("trre" id, "Trigger Reset", "Trg reset" alias)
+
+        #define CHANNEL_CONTROLS(id, label, alias) \
+            OP_CONTROLS(id, label, alias), \
+            CP_CONTROLS(id, label, alias), \
+            HOR_CONTROLS(id, label, alias), \
+            VER_CONTROLS(id, label, alias), \
+            TRG_CONTROLS(id, label, alias)
 
         #define OSC_VISUALOUTS(id, label) \
             STREAM("oscv" id, "Stream buffer" label, 3, 128, 0x8000)
@@ -180,7 +180,7 @@ namespace lsp
         {
             CHANNEL_AUDIO_PORTS("_1", " 1"),
             COMMON_CONTROLS,
-            CHANNEL_CONTROLS("_1", " 1"),
+            CHANNEL_CONTROLS("_1", " 1", " 1"),
             OSC_VISUALOUTS("_1", " 1"),
             PORTS_END
         };
@@ -193,9 +193,9 @@ namespace lsp
             COMMON_CONTROLS,
             CHANNEL_SELECTOR(osc_channels_x2),
 
-            CHANNEL_CONTROLS("", " Global"),
-            CHANNEL_CONTROLS("_1", " 1"),
-            CHANNEL_CONTROLS("_2", " 2"),
+            CHANNEL_CONTROLS("", " Global", " G"),
+            CHANNEL_CONTROLS("_1", " 1", " 1"),
+            CHANNEL_CONTROLS("_2", " 2", " 2"),
 
             CHANNEL_SWITCHES("_1", " 1"),
             CHANNEL_SWITCHES("_2", " 2"),
@@ -216,11 +216,11 @@ namespace lsp
             COMMON_CONTROLS,
             CHANNEL_SELECTOR(osc_channels_x4),
 
-            CHANNEL_CONTROLS("", " Global"),
-            CHANNEL_CONTROLS("_1", " 1"),
-            CHANNEL_CONTROLS("_2", " 2"),
-            CHANNEL_CONTROLS("_3", " 3"),
-            CHANNEL_CONTROLS("_4", " 4"),
+            CHANNEL_CONTROLS("", " Global", " G"),
+            CHANNEL_CONTROLS("_1", " 1", " 1"),
+            CHANNEL_CONTROLS("_2", " 2", " 2"),
+            CHANNEL_CONTROLS("_3", " 3", " 3"),
+            CHANNEL_CONTROLS("_4", " 4", " 4"),
 
             CHANNEL_SWITCHES("_1", " 1"),
             CHANNEL_SWITCHES("_2", " 2"),
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/.github/workflows/build.yml	2025-03-01 12:43:15.436536476 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/.github/workflows/build.yml	2025-08-26 18:16:22.253629367 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/CHANGELOG	2025-03-01 12:43:15.436536476 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/CHANGELOG	2025-08-26 18:16:22.253629367 +0000
@@ -2,6 +2,13 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.31 ===
+* Added left/right and mid/side linking in the UI.
+* Updated build scripts and dependencies.
+
+=== 1.0.30 ===
+* Updated build scripts and dependencies.
+
 === 1.0.29 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/dependencies.mk	2025-03-01 12:43:15.436536476 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/dependencies.mk	2025-08-26 18:16:22.253629367 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/make/tools.mk	2025-03-01 12:43:15.440536451 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/make/tools.mk	2025-08-26 18:16:22.257629328 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/modules.mk
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/modules.mk	2025-03-01 12:43:15.440536451 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/modules.mk	2025-08-26 18:16:22.257629328 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/project.mk
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/project.mk	2025-03-01 12:43:15.440536451 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/project.mk	2025-08-26 18:16:22.257629328 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Parametric Equalizer Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.29
+ARTIFACT_VERSION            = 1.0.31
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x16_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x16_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x16_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x16_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x16_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x16_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x16_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x16_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x32_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x32_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x32_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x32_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x32_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x32_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x32_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x32_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x8_lr.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x8_lr.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x8_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x8_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x8_ms.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x8_ms.png differ
Binary files 1.2.21-5/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x8_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/doc/screenshots/para_equalizer_x8_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/i18n/default/bundles.json 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/i18n/default/bundles.json
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/i18n/default/bundles.json	2025-03-01 12:43:15.448536403 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/i18n/default/bundles.json	2025-08-26 18:16:22.269629212 +0000
@@ -1,7 +1,7 @@
 {
 	"para_equalizer": {
 		"name": "Parametric Equalizer",
-		"description": "This plugin allows to perform parametric equalization of inpu tsignal.\nUp to 16 or 32 different filters are simultaneously available for processing."
+		"description": "This plugin allows to perform parametric equalization of input signal.\nUp to 16 or 32 different filters are simultaneously available for processing."
 	}
 }
 
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/i18n/ru/bundles.json 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/i18n/ru/bundles.json
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/i18n/ru/bundles.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/i18n/ru/bundles.json	2025-08-26 18:16:22.269629212 +0000
@@ -0,0 +1,7 @@
+{
+	"para_equalizer": {
+		"name": "Параметрический эквалайзер",
+		"description": "Этот плагин позволяет выполнять параметрическую эквализацию входного сигнала.\nДоступны для одновременной обработки до 8, 16 или 32 различных фильтров."
+	}
+}
+
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/i18n/us/bundles.json 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/i18n/us/bundles.json
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/i18n/us/bundles.json	2025-03-01 12:43:15.448536403 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/i18n/us/bundles.json	2025-08-26 18:16:22.269629212 +0000
@@ -1,7 +1,7 @@
 {
 	"para_equalizer": {
 		"name": "Parametric Equalizer",
-		"description": "This plugin allows to perform parametric equalization of inpu tsignal.\nUp to 16 or 32 different filters are simultaneously available for processing."
+		"description": "This plugin allows to perform parametric equalization of input signal.\nUp to 16 or 32 different filters are simultaneously available for processing."
 	}
 }
 
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/ui/equalizer/parametric/lr.xml 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/ui/equalizer/parametric/lr.xml
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/ui/equalizer/parametric/lr.xml	2025-03-01 12:43:15.452536379 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/ui/equalizer/parametric/lr.xml	2025-08-26 18:16:22.273629173 +0000
@@ -1,7 +1,17 @@
 <plugin resizable="true">
 	<ui:eval id="num_filters" value="(ex :ftl_16) ? 32 : ((ex :ftl_8) ? 16 : 8)"/>
 	<ui:eval id="num_blocks" value="(ex :ftl_16) ? 8 : ((ex :ftl_8) ? 4 : 2)"/>
-
+	
+	<!-- Control linking -->
+	<ui:for id="port" list="'ft'; 'fm'; 's'; 'xs'; 'xm'; 'f'; 'w'; 'g'; 'q'">
+		<ui:for id="i" first="0" count=":num_filters">
+			<ctl:link
+				id.1="${port}l_${i}" value.1=":${port}r_${i}"
+				id.2="${port}r_${i}" value.2=":${port}l_${i}"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<grid rows="3" cols="3" spacing="4">
 
 		<!-- Graph -->
@@ -269,9 +279,9 @@
 			<hbox spacing="4" vreduce="true" bg.color="bg_schema" pad.h="6">
 				<button ui:id="filter_inspect_reset" text="labels.chan.inspect" ui:inject="Button_orange" pad.v="4"/>
 				<button id="insp_on" text="labels.auto" ui:inject="Button_orange" pad.v="4"/>
-
 				<knob id="insp_r" scale.size="3" scolor="orange" size="10" pad.l="6"/>
 				<value id="insp_r" width.min="48" same_line="true" fill="true" halign="1" pad.r="12"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.lr_link" />
 
 				<void hexpand="true"/>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/ui/equalizer/parametric/ms.xml 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/ui/equalizer/parametric/ms.xml
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/res/main/ui/equalizer/parametric/ms.xml	2025-03-01 12:43:15.452536379 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/res/main/ui/equalizer/parametric/ms.xml	2025-08-26 18:16:22.273629173 +0000
@@ -1,6 +1,17 @@
 <plugin resizable="true">
 	<ui:eval id="num_filters" value="(ex :ftm_16) ? 32 : ((ex :ftm_8) ? 16 : 8)"/>
 	<ui:eval id="num_blocks" value="(ex :ftm_16) ? 8 : ((ex :ftm_8) ? 4 : 2)"/>
+	
+	<!-- Control linking -->
+	<ui:for id="port" list="'ft'; 'fm'; 's'; 'xs'; 'xm'; 'f'; 'w'; 'g'; 'q'">
+		<ui:for id="i" first="0" count=":num_filters">
+			<ctl:link
+				id.1="${port}m_${i}" value.1=":${port}s_${i}"
+				id.2="${port}s_${i}" value.2=":${port}m_${i}"
+				activity=":clink" />
+		</ui:for>
+	</ui:for>
+	
 	<grid rows="3" cols="3" spacing="4">
 
 		<!-- Graph -->
@@ -274,9 +285,9 @@
 			<hbox spacing="4" vreduce="true" bg.color="bg_schema" pad.h="6">
 				<button ui:id="filter_inspect_reset" text="labels.chan.inspect" ui:inject="Button_orange" pad.v="4"/>
 				<button id="insp_on" text="labels.auto" ui:inject="Button_orange" pad.v="4"/>
-
 				<knob id="insp_r" scale.size="3" scolor="orange" size="10" pad.l="6"/>
 				<value id="insp_r" width.min="48" same_line="true" fill="true" halign="1" pad.r="12"/>
+				<button id="clink" ui:inject="Button_green" text="labels.chan.ms_link" />
 
 				<void hexpand="true"/>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/src/doc/manuals/plugins/para_equalizer.php 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/src/doc/manuals/plugins/para_equalizer.php
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/src/doc/manuals/plugins/para_equalizer.php	2025-03-01 12:43:15.452536379 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/src/doc/manuals/plugins/para_equalizer.php	2025-08-26 18:16:22.273629173 +0000
@@ -24,7 +24,7 @@
 	</li>
 	<li><b>Matched Z Transform (MT) filters</b> are probably the best choice when cutting out individual short range of frequencies.</li>
 	<li><b>Bilinear Transform (BT) filters</b> are good when cutting-out high frequencies because they have -INF dB amplification at the Nyquist frequency.</li>
-    <li><b>Direct Design (DR) filters</b> add alterantive implementations for the various supperted filter types, and may be chosen whenever their frequency response is best suited.</li>
+    <li><b>Direct Design (DR) filters</b> add alternative implementations for the various supperted filter types, and may be chosen whenever their frequency response is best suited.</li>
 </ul>
 <p>
 	This plugin performs parametric equalization of <?= $cc ?> channel<?php
@@ -153,7 +153,12 @@ of so-called poles and zeros:<p>
 </p>
 <p><b>Meters:</b></p>
 <ul>
-	<?php if ($m == 'ms') { ?>
+	<?php if ($m == 'lr') { ?>
+		<li><b>L/R Link</b> - enables linking between Left and Right channel controls so change of one forces the sibling to become the same value.</li>
+		<li><b>Input</b> - the level meter for left and right channels of the input signal.</li>
+		<li><b>Output</b> - the level meter for left and right channels of the output signal.</li>
+	<?php } elseif ($m == 'ms') { ?>
+		<li><b>M/S Link</b> - enables linking between Mid and Side channel controls so change of one forces the sibling to become the same value.</li>
 		<li><b>Input</b> - the level meter for left and right channels of the input signal.
 		If <b>Listen</b> button is pressed, it shows the level of middle and side channels of the input signal respectively.</li>
 		<li><b>Output</b> - the level meter for left and right channels of the output signal.
@@ -225,7 +230,7 @@ of so-called poles and zeros:<p>
 		<li><b>Lo-pass</b> - Low-pass filter with rejection of high frequencies.</li>
 		<li><b>Lo-shelf</b> - Shelving filter with adjustment of low frequencies.</li>
 		<li><b>Notch</b> - Notch filter with full rejection of selected frequency.</li>
-		<li><b>Resonance</b> - Resonance filter wih sharp peak/recess.</li>
+		<li><b>Resonance</b> - Resonance filter with sharp peak/recess.</li>
 		<li><b>Allpass</b> - All-pass filter which only affects the phase of the audio signal at the specified frequency.</li>
 	</ul>
 	<li><b>Mode</b> - sets up the class of the filter:</li>
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/src/main/meta/para_equalizer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/src/main/meta/para_equalizer.cpp
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/src/main/meta/para_equalizer.cpp	2025-03-01 12:43:15.452536379 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/src/main/meta/para_equalizer.cpp	2025-08-26 18:16:22.273629173 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-para-equalizer
  * Created on: 2 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_PARA_EQUALIZER_VERSION_MAJOR         1
 #define LSP_PLUGINS_PARA_EQUALIZER_VERSION_MINOR         0
-#define LSP_PLUGINS_PARA_EQUALIZER_VERSION_MICRO         29
+#define LSP_PLUGINS_PARA_EQUALIZER_VERSION_MICRO         31
 
 #define LSP_PLUGINS_PARA_EQUALIZER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -178,81 +178,84 @@ namespace lsp
             { NULL, NULL }
         };
 
-        #define EQ_FILTER(id, label, x, total, f) \
-            COMBO("ft" id "_" #x, "Filter type " label #x, 0, filter_types), \
-            COMBO("fm" id "_" #x, "Filter mode " label #x, 0, filter_modes), \
-            COMBO("s" id "_" #x, "Filter slope " label #x, 0, filter_slopes), \
-            SWITCH("xs" id "_" #x, "Filter solo " label #x, 0.0f), \
-            SWITCH("xm" id "_" #x, "Filter mute " label #x, 0.0f), \
-            LOG_CONTROL_DFL("f" id "_" #x, "Frequency " label #x, U_HZ, para_equalizer_metadata::FREQ, f), \
-            CONTROL("w" id "_" #x, "Filter Width " label #x, U_OCTAVES, para_equalizer_metadata::WIDTH), \
-            { "g" id "_" #x, "Gain " label # x, U_GAIN_AMP, R_CONTROL, F_LOG | F_UPPER | F_LOWER | F_STEP, GAIN_AMP_M_36_DB, GAIN_AMP_P_36_DB, GAIN_AMP_0_DB, 0.01, NULL, NULL }, \
-            { "q" id "_" #x, "Quality factor " label #x, U_NONE, R_CONTROL, F_UPPER | F_LOWER | F_STEP, 0.0f, 100.0f, 0.0f, 0.025f, NULL        }, \
-            { "hue" id "_" #x, "Hue " label #x, U_NONE, R_CONTROL, F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, (float(x) / float(total)), 0.25f/360.0f, NULL     }, \
+        #define EQ_FILTER(id, label, alias, x, total, f) \
+            COMBO("ft" id "_" #x, "Filter type " label #x, "Type " #x alias, 0, filter_types), \
+            COMBO("fm" id "_" #x, "Filter mode " label #x, "Mode " #x alias, 0, filter_modes), \
+            COMBO("s" id "_" #x, "Filter slope " label #x, "Slope " #x alias, 0, filter_slopes), \
+            SWITCH("xs" id "_" #x, "Filter solo " label #x, "Solo " #x alias, 0.0f), \
+            SWITCH("xm" id "_" #x, "Filter mute " label #x, "Mute " #x alias, 0.0f), \
+            LOG_CONTROL_DFL("f" id "_" #x, "Frequency " label #x, "Freq " #x alias, U_HZ, para_equalizer_metadata::FREQ, f), \
+            CONTROL("w" id "_" #x, "Filter Width " label #x, "Width " #x alias, U_OCTAVES, para_equalizer_metadata::WIDTH), \
+            LOG_CONTROL_ALL("g" id "_" #x, "Gain " label # x, "Gain " #x alias, U_GAIN_AMP, GAIN_AMP_M_36_DB, GAIN_AMP_P_36_DB, GAIN_AMP_0_DB, 0.01), \
+            CONTROL_ALL("q" id "_" #x, "Quality factor " label #x, "Q " #x alias, U_NONE, 0.0f, 100.0f, 0.0f, 0.025f), \
+            CYC_CONTROL_ALL("hue" id "_" #x, "Hue " label #x, "Hue " #x alias, U_NONE, 0.0f, 1.0f, (float(x) / float(total)), 0.25f/360.0f), \
             BLINK("fv" id "_" #x, "Filter visibility " label #x), \
             MESH("agf" id "_" #x, "Amplitude graph " label #x, 2, para_equalizer_metadata::FILTER_MESH_POINTS)
 
-        #define EQ_FILTER_MONO(x, total, f)     EQ_FILTER("", "", x, total, f)
-        #define EQ_FILTER_STEREO(x, total, f)   EQ_FILTER("", "", x, total, f)
-        #define EQ_FILTER_LR(x, total, f)       EQ_FILTER("l", "Left ", x, total, f), EQ_FILTER("r", "Right ", x, total, f)
-        #define EQ_FILTER_MS(x, total, f)       EQ_FILTER("m", "Mid ", x, total, f), EQ_FILTER("s", "Side ", x, total, f)
+        #define EQ_FILTER_MONO(x, total, f)     EQ_FILTER("", "", "", x, total, f)
+        #define EQ_FILTER_STEREO(x, total, f)   EQ_FILTER("", "", "", x, total, f)
+        #define EQ_FILTER_LR(x, total, f)       EQ_FILTER("l", "Left ", " L", x, total, f), EQ_FILTER("r", "Right ", " R", x, total, f)
+        #define EQ_FILTER_MS(x, total, f)       EQ_FILTER("m", "Mid ", " M", x, total, f), EQ_FILTER("s", "Side ", " S", x, total, f)
 
         #define EQ_COMMON(fselect, filters) \
             BYPASS, \
-            AMP_GAIN("g_in", "Input gain", para_equalizer_metadata::IN_GAIN_DFL, 10.0f), \
-            AMP_GAIN("g_out", "Output gain", para_equalizer_metadata::OUT_GAIN_DFL, 10.0f), \
-            COMBO("mode", "Equalizer mode", 0, equalizer_eq_modes), \
-            LOG_CONTROL("react", "FFT reactivity", U_MSEC, para_equalizer_metadata::REACT_TIME), \
-            AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \
-            LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, para_equalizer_metadata::ZOOM), \
-            COMBO("fsel", "Filter select", 0, fselect), \
-            INT_CONTROL_RANGE("insp_id", "Inspected filter identifier", U_NONE, -1, (filters-1), -1, 1), \
-            CONTROL("insp_r", "Inspect frequency range", U_OCTAVES, para_equalizer_metadata::INSPECT), \
-            SWITCH("insp_on", "Automatically inspect filter when editing", 0)
+            AMP_GAIN("g_in", "Input gain", "Input gain", para_equalizer_metadata::IN_GAIN_DFL, 10.0f), \
+            AMP_GAIN("g_out", "Output gain", "Output gain", para_equalizer_metadata::OUT_GAIN_DFL, 10.0f), \
+            COMBO("mode", "Equalizer mode", "Mode", 0, equalizer_eq_modes), \
+            LOG_CONTROL("react", "FFT reactivity", "Reactivity", U_MSEC, para_equalizer_metadata::REACT_TIME), \
+            AMP_GAIN("shift", "Shift gain", "Shift gain", 1.0f, 100.0f), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, para_equalizer_metadata::ZOOM), \
+            COMBO("fsel", "Filter select", "Filter", 0, fselect), \
+            INT_CONTROL_ALL("insp_id", "Inspected filter identifier", "Inspect index", U_NONE, -1, (filters-1), -1, 1), \
+            CONTROL("insp_r", "Inspect frequency range", "Inspect range", U_OCTAVES, para_equalizer_metadata::INSPECT), \
+            SWITCH("insp_on", "Automatically inspect filter when editing", "Auto inspect", 0)
+
+        #define EQ_LINK(id, label, alias) \
+            SWITCH(id, label, alias, 0.0f)
 
         #define EQ_MONO_PORTS \
             MESH("ag", "Amplitude graph", 2, para_equalizer_metadata::MESH_POINTS), \
-            CONTROL("frqs", "Frequency shift", U_SEMITONES, para_equalizer_metadata::PITCH), \
+            CONTROL("frqs", "Frequency shift", "Freq shift", U_SEMITONES, para_equalizer_metadata::PITCH), \
             METER_GAIN("im", "Input signal meter", GAIN_AMP_P_12_DB), \
             METER_GAIN("sm", "Output signal meter", GAIN_AMP_P_12_DB)
 
         #define EQ_STEREO_PORTS \
-            PAN_CTL("bal", "Output balance", 0.0f), \
+            PAN_CTL("bal", "Output balance", "Out balance", 0.0f), \
             MESH("ag", "Amplitude graph", 2, para_equalizer_metadata::MESH_POINTS), \
-            CONTROL("frqs", "Frequency shift", U_SEMITONES, para_equalizer_metadata::PITCH), \
+            CONTROL("frqs", "Frequency shift", "Freq shift", U_SEMITONES, para_equalizer_metadata::PITCH), \
             METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \
             METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \
             METER_GAIN("imr", "Input signal meter Right", GAIN_AMP_P_12_DB), \
             METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB)
 
         #define EQ_LR_PORTS \
-            PAN_CTL("bal", "Output balance", 0.0f), \
+            PAN_CTL("bal", "Output balance", "Out balance", 0.0f), \
             MESH("ag_l", "Amplitude graph Left", 2, para_equalizer_metadata::MESH_POINTS), \
-            CONTROL("frqs_l", "Frequency shift Left", U_SEMITONES, para_equalizer_metadata::PITCH), \
+            CONTROL("frqs_l", "Frequency shift Left", "Freq shift L", U_SEMITONES, para_equalizer_metadata::PITCH), \
             METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \
             METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \
-            SWITCH("fltv_l", "Filter visibility Left", 1.0f), \
+            SWITCH("fltv_l", "Filter visibility Left", "Show filter L", 1.0f), \
             MESH("ag_r", "Amplitude graph Right", 2, para_equalizer_metadata::MESH_POINTS), \
-            CONTROL("frqs_r", "Frequency shift Right", U_SEMITONES, para_equalizer_metadata::PITCH), \
+            CONTROL("frqs_r", "Frequency shift Right", "Freq shift R", U_SEMITONES, para_equalizer_metadata::PITCH), \
             METER_GAIN("imr", "Input signal meter Right", GAIN_AMP_P_12_DB), \
             METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB), \
-            SWITCH("fltv_r", "Filter visibility Right", 1.0f)
+            SWITCH("fltv_r", "Filter visibility Right", "Show filter R", 1.0f)
 
         #define EQ_MS_PORTS \
-            PAN_CTL("bal", "Output balance", 0.0f), \
-            SWITCH("lstn", "Mid/Side listen", 0.0f), \
-            AMP_GAIN100("gain_m", "Mid gain", GAIN_AMP_0_DB), \
-            AMP_GAIN100("gain_s", "Side gain", GAIN_AMP_0_DB), \
+            PAN_CTL("bal", "Output balance", "Out balance", 0.0f), \
+            SWITCH("lstn", "Mid/Side listen", "M/S listen", 0.0f), \
+            AMP_GAIN100("gain_m", "Mid gain", "Gain M", GAIN_AMP_0_DB), \
+            AMP_GAIN100("gain_s", "Side gain", "Gain S", GAIN_AMP_0_DB), \
             MESH("ag_m", "Amplitude graph Mid", 2, para_equalizer_metadata::MESH_POINTS), \
-            CONTROL("frqs_m", "Frequency shift Mid", U_SEMITONES, para_equalizer_metadata::PITCH), \
+            CONTROL("frqs_m", "Frequency shift Mid", "Freq shift M", U_SEMITONES, para_equalizer_metadata::PITCH), \
             METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \
             METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \
-            SWITCH("fltv_m", "Filter visibility Mid", 1.0f), \
+            SWITCH("fltv_m", "Filter visibility Mid", "Show filter M", 1.0f), \
             MESH("ag_s", "Amplitude graph Side", 2, para_equalizer_metadata::MESH_POINTS), \
-            CONTROL("frqs_s", "Frequency shift Side", U_SEMITONES, para_equalizer_metadata::PITCH), \
+            CONTROL("frqs_s", "Frequency shift Side", "Freq shift S", U_SEMITONES, para_equalizer_metadata::PITCH), \
             METER_GAIN("imr", "Input signal meter Right", GAIN_AMP_P_12_DB), \
             METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB), \
-            SWITCH("fltv_s", "Filter visibility Side", 1.0f)
+            SWITCH("fltv_s", "Filter visibility Side", "Show filter S", 1.0f)
 
         #define EQ_COMMUNICATION_MONO \
             OPT_SEND_NAME("send", "Audio send"), \
@@ -268,10 +271,10 @@ namespace lsp
             OPT_AUDIO_RETURN("rtn_l", "Audio return input left", 0, "return"), \
             OPT_AUDIO_RETURN("rtn_r", "Audio return input right", 1, "return")
 
-        #define CHANNEL_ANALYSIS(id, label) \
-            SWITCH("ife" id, "Input FFT graph enable" label, 1.0f), \
-            SWITCH("ofe" id, "Output FFT graph enable" label, 1.0f), \
-            SWITCH("rfe" id, "Return FFT graph enable" label, 1.0f), \
+        #define CHANNEL_ANALYSIS(id, label, alias) \
+            SWITCH("ife" id, "Input FFT graph enable" label, "FFT In" alias, 1.0f), \
+            SWITCH("ofe" id, "Output FFT graph enable" label, "FFT Out" alias, 1.0f), \
+            SWITCH("rfe" id, "Return FFT graph enable" label, "FFT Ret" alias, 1.0f), \
             MESH("ifg" id, "Input FFT graph" label, 2, para_equalizer_metadata::MESH_POINTS + 2), \
             MESH("ofg" id, "Output FFT graph" label, 2, para_equalizer_metadata::MESH_POINTS), \
             MESH("rfg" id, "Return FFT graph" label, 2, para_equalizer_metadata::MESH_POINTS)
@@ -281,7 +284,7 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             EQ_COMMON(filter_select_8, 8),
             EQ_COMMUNICATION_MONO,
-            CHANNEL_ANALYSIS("", ""),
+            CHANNEL_ANALYSIS("", "", ""),
             EQ_MONO_PORTS,
             EQ_FILTER_MONO(0, 8, 16.0f),
             EQ_FILTER_MONO(1, 8, 40.0f),
@@ -300,7 +303,7 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             EQ_COMMON(filter_select_16, 16),
             EQ_COMMUNICATION_MONO,
-            CHANNEL_ANALYSIS("", ""),
+            CHANNEL_ANALYSIS("", "", ""),
             EQ_MONO_PORTS,
             EQ_FILTER_MONO(0, 16, 16.0f),
             EQ_FILTER_MONO(1, 16, 25.0f),
@@ -327,7 +330,7 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             EQ_COMMON(filter_select_32, 32),
             EQ_COMMUNICATION_MONO,
-            CHANNEL_ANALYSIS("", ""),
+            CHANNEL_ANALYSIS("", "", ""),
             EQ_MONO_PORTS,
             EQ_FILTER_MONO(0, 32, 16.0f),
             EQ_FILTER_MONO(1, 32, 20.0f),
@@ -370,8 +373,8 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             EQ_COMMON(filter_select_8, 8),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             EQ_STEREO_PORTS,
             EQ_FILTER_MONO(0, 8, 16.0f),
             EQ_FILTER_MONO(1, 8, 40.0f),
@@ -390,8 +393,8 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             EQ_COMMON(filter_select_16, 16),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             EQ_STEREO_PORTS,
             EQ_FILTER_STEREO(0, 16, 16.0f),
             EQ_FILTER_STEREO(1, 16, 25.0f),
@@ -418,8 +421,8 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             EQ_COMMON(filter_select_32, 32),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             EQ_STEREO_PORTS,
             EQ_FILTER_STEREO(0, 32, 16.0f),
             EQ_FILTER_STEREO(1, 32, 20.0f),
@@ -461,9 +464,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON(filter_select_8lr, 16),
+            EQ_LINK("clink", "Left/Right controls link", "L/R link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             EQ_LR_PORTS,
             EQ_FILTER_LR(0, 8, 16.0f),
             EQ_FILTER_LR(1, 8, 40.0f),
@@ -481,9 +485,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON(filter_select_16lr, 32),
+            EQ_LINK("clink", "Left/Right controls link", "L/R link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             EQ_LR_PORTS,
             EQ_FILTER_LR(0, 16, 16.0f),
             EQ_FILTER_LR(1, 16, 25.0f),
@@ -509,9 +514,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON(filter_select_32lr, 64),
+            EQ_LINK("clink", "Left/Right controls link", "L/R link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_l", " Left"),
-            CHANNEL_ANALYSIS("_r", " Right"),
+            CHANNEL_ANALYSIS("_l", " Left", " L"),
+            CHANNEL_ANALYSIS("_r", " Right", " R"),
             EQ_LR_PORTS,
             EQ_FILTER_LR(0, 32, 16.0f),
             EQ_FILTER_LR(1, 32, 20.0f),
@@ -553,9 +559,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON(filter_select_8ms, 16),
+            EQ_LINK("clink", "Mid/Side controls link", "M/S link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_m", " Mid"),
-            CHANNEL_ANALYSIS("_s", " Side"),
+            CHANNEL_ANALYSIS("_m", " Mid", " M"),
+            CHANNEL_ANALYSIS("_s", " Side", " S"),
             EQ_MS_PORTS,
             EQ_FILTER_MS(0, 8, 16.0f),
             EQ_FILTER_MS(1, 8, 40.0f),
@@ -573,9 +580,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON(filter_select_16ms, 32),
+            EQ_LINK("clink", "Mid/Side controls link", "M/S link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_m", " Mid"),
-            CHANNEL_ANALYSIS("_s", " Side"),
+            CHANNEL_ANALYSIS("_m", " Mid", " M"),
+            CHANNEL_ANALYSIS("_s", " Side", " S"),
             EQ_MS_PORTS,
             EQ_FILTER_MS(0, 16, 16.0f),
             EQ_FILTER_MS(1, 16, 25.0f),
@@ -601,9 +609,10 @@ namespace lsp
         {
             PORTS_STEREO_PLUGIN,
             EQ_COMMON(filter_select_32ms, 64),
+            EQ_LINK("clink", "Mid/Side controls link", "M/S link"),
             EQ_COMMUNICATION_STEREO,
-            CHANNEL_ANALYSIS("_m", " Mid"),
-            CHANNEL_ANALYSIS("_s", " Side"),
+            CHANNEL_ANALYSIS("_m", " Mid", " M"),
+            CHANNEL_ANALYSIS("_s", " Side", " S"),
             EQ_MS_PORTS,
             EQ_FILTER_MS(0, 32, 16.0f),
             EQ_FILTER_MS(1, 32, 20.0f),
diff -pruN 1.2.21-5/modules/lsp-plugins-para-equalizer/src/main/plug/para_equalizer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/src/main/plug/para_equalizer.cpp
--- 1.2.21-5/modules/lsp-plugins-para-equalizer/src/main/plug/para_equalizer.cpp	2025-03-01 12:43:15.452536379 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-para-equalizer/src/main/plug/para_equalizer.cpp	2025-08-26 18:16:22.273629173 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-para-equalizer
  * Created on: 2 авг. 2021 г.
@@ -607,6 +607,8 @@ namespace lsp
             BIND_PORT(pInspect);
             BIND_PORT(pInspectRange);
             SKIP_PORT("Auto inspect switch");
+            if ((nMode == EQ_LEFT_RIGHT) || (nMode == EQ_MID_SIDE))
+                SKIP_PORT("Separate channels link");
 
             // Communication
             SKIP_PORT("Send name");
diff -pruN 1.2.21-5/modules/lsp-plugins-phase-detector/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-phase-detector/.github/workflows/build.yml	2025-03-01 12:43:11.772558469 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/.github/workflows/build.yml	2025-08-26 18:16:02.165824326 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-phase-detector/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-phase-detector/CHANGELOG	2025-03-01 12:43:11.772558469 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/CHANGELOG	2025-08-26 18:16:02.165824326 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts and dependencies.
+
 === 1.0.24 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-phase-detector/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-phase-detector/dependencies.mk	2025-03-01 12:43:11.776558445 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/dependencies.mk	2025-08-26 18:16:02.165824326 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-phase-detector/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-phase-detector/make/tools.mk	2025-03-01 12:43:11.776558445 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/make/tools.mk	2025-08-26 18:16:02.169824287 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-phase-detector/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/modules.mk
--- 1.2.21-5/modules/lsp-plugins-phase-detector/modules.mk	2025-03-01 12:43:11.776558445 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/modules.mk	2025-08-26 18:16:02.169824287 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-phase-detector/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/project.mk
--- 1.2.21-5/modules/lsp-plugins-phase-detector/project.mk	2025-03-01 12:43:11.776558445 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/project.mk	2025-08-26 18:16:02.169824287 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Phase Detector Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-phase-detector/res/doc/screenshots/phase_detector.png and 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/res/doc/screenshots/phase_detector.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-phase-detector/src/main/meta/phase_detector.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/src/main/meta/phase_detector.cpp
--- 1.2.21-5/modules/lsp-plugins-phase-detector/src/main/meta/phase_detector.cpp	2025-03-01 12:43:11.780558420 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phase-detector/src/main/meta/phase_detector.cpp	2025-08-26 18:16:02.173824249 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-phase-detector
  * Created on: 12 мая 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_PHASE_DETECTOR_VERSION_MAJOR         1
 #define LSP_PLUGINS_PHASE_DETECTOR_VERSION_MINOR         0
-#define LSP_PLUGINS_PHASE_DETECTOR_VERSION_MICRO         24
+#define LSP_PLUGINS_PHASE_DETECTOR_VERSION_MICRO         26
 
 #define LSP_PLUGINS_PHASE_DETECTOR_VERSION  \
     LSP_MODULE_VERSION( \
@@ -52,10 +52,10 @@ namespace lsp
 
             // Input controls
             BYPASS,
-            TRIGGER("reset", "Reset"),
-            LOG_CONTROL("time", "Time", U_MSEC, phase_detector_metadata::DETECT_TIME),
-            LOG_CONTROL("react", "Reactivity", U_SEC, phase_detector_metadata::REACT_TIME),
-            CONTROL("sel", "Selector", U_PERCENT, phase_detector_metadata::SELECTOR),
+            TRIGGER("reset", "Reset", "Reset"),
+            LOG_CONTROL("time", "Time", "Time", U_MSEC, phase_detector_metadata::DETECT_TIME),
+            LOG_CONTROL("react", "Reactivity", "Reactivity", U_SEC, phase_detector_metadata::REACT_TIME),
+            CONTROL("sel", "Selector", "Selector", U_PERCENT, phase_detector_metadata::SELECTOR),
 
             // Output controls
             METERZ("b_t", "Best time", U_MSEC, phase_detector_metadata::TIME),
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/.cproject 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.cproject
--- 1.2.21-5/modules/lsp-plugins-phaser/.cproject	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.cproject	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,445 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+	<storageModule moduleId="org.eclipse.cdt.core.settings">
+		<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.619973679">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.619973679" moduleId="org.eclipse.cdt.core.settings" name="DebugLinux">
+				<externalSettings/>
+				<extensions>
+					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.config.gnu.exe.debug.619973679" name="DebugLinux" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.enablement=null,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.image=null,org.eclipse.cdt.docker.launcher.containerbuild.property.connection=null" parent="cdt.managedbuild.config.gnu.exe.debug">
+					<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679." name="/" resourcePath="">
+						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1916506190" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+							<targetPlatform binaryParser="org.eclipse.cdt.core.GNU_ELF" id="cdt.managedbuild.target.gnu.platform.exe.debug.106918865" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
+							<builder buildPath="${workspace_loc:/lsp-plugins-phaser}/Debug" id="cdt.managedbuild.target.gnu.builder.exe.debug.710933127" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
+							<tool id="cdt.managedbuild.tool.gnu.archiver.base.2056501474" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+							<tool commandLinePattern="${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+								<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.754647446" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+								<option defaultValue="gnu.cpp.compiler.debugging.level.max" id="gnu.cpp.compiler.exe.debug.option.debugging.level.1309642979" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1555086739" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-plugins-shared/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-plugin-fw/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-common-lib}/include&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-3rd-party/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-dsp-units/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-lltl-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-base-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-glx-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-iface/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-runtime-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-test-fw/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-tk-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-ws-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-dsp-lib/include}&quot;"/>
+								</option>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.1754490118" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="LSP_TESTING"/>
+									<listOptionValue builtIn="false" value="LSP_TRACE"/>
+									<listOptionValue builtIn="false" value="LSP_IDE_DEBUG"/>
+									<listOptionValue builtIn="false" value="USE_LADSPA"/>
+									<listOptionValue builtIn="false" value="USE_LIBCAIRO"/>
+									<listOptionValue builtIn="false" value="USE_LIBFONTCONFIG"/>
+									<listOptionValue builtIn="false" value="USE_LIBFREETYPE"/>
+									<listOptionValue builtIn="false" value="USE_LIBGL"/>
+									<listOptionValue builtIn="false" value="USE_LIBJACK"/>
+									<listOptionValue builtIn="false" value="USE_LIBSNDFILE"/>
+									<listOptionValue builtIn="false" value="USE_LIBX11"/>
+									<listOptionValue builtIn="false" value="USE_LIBXRANDR"/>
+								</option>
+								<option id="gnu.cpp.compiler.option.dialect.std.197954724" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.c++11" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.option.other.other.254051967" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 $(shell pkg-config --cflags jack x11 cairo sndfile gl freetype2 fontconfig xrandr gstreamer-audio-1.0)" valueType="string"/>
+								<option id="gnu.cpp.compiler.option.warnings.toerrors.525712114" name="Warnings as errors (-Werror)" superClass="gnu.cpp.compiler.option.warnings.toerrors" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+								<option id="gnu.cpp.compiler.option.debugging.sanitaddress.1693651654" name="Sanitize address (-fsanitize=address)" superClass="gnu.cpp.compiler.option.debugging.sanitaddress" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.449118389" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.2022121099" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
+								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.834488426" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
+								<option defaultValue="gnu.c.debugging.level.max" id="gnu.c.compiler.exe.debug.option.debugging.level.1949011073" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.197520422" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="LSP_TESTING"/>
+									<listOptionValue builtIn="false" value="LSP_TRACE"/>
+									<listOptionValue builtIn="false" value="LSP_IDE_DEBUG"/>
+									<listOptionValue builtIn="false" value="USE_LADSPA"/>
+									<listOptionValue builtIn="false" value="USE_LIBCAIRO"/>
+									<listOptionValue builtIn="false" value="USE_LIBFONTCONFIG"/>
+									<listOptionValue builtIn="false" value="USE_LIBFREETYPE"/>
+									<listOptionValue builtIn="false" value="USE_LIBGL"/>
+									<listOptionValue builtIn="false" value="USE_LIBJACK"/>
+									<listOptionValue builtIn="false" value="USE_LIBSNDFILE"/>
+									<listOptionValue builtIn="false" value="USE_LIBX11"/>
+									<listOptionValue builtIn="false" value="USE_LIBXRANDR"/>
+								</option>
+								<option id="gnu.c.compiler.option.misc.other.1620238063" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 $(shell pkg-config --cflags jack x11 cairo sndfile gl freetype2 fontconfig xrandr gstreamer-audio-1.0)" valueType="string"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.398423821" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-plugins-shared/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-plugin-fw/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-common-lib}/include&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-3rd-party/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-dsp-units/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-lltl-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-base-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-glx-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-iface/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-runtime-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-test-fw/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-tk-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-ws-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-dsp-lib/include}&quot;"/>
+								</option>
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1045371789" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.2125987081" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+							<tool commandLinePattern="${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1192217523" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+								<option id="gnu.cpp.link.option.flags.372033104" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-fsanitize=address $(shell pkg-config --libs jack x11 cairo sndfile gl freetype2 fontconfig xrandr gstreamer-audio-1.0)" valueType="string"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.1822061934" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs">
+									<listOptionValue builtIn="false" value="pthread"/>
+									<listOptionValue builtIn="false" value="rt"/>
+									<listOptionValue builtIn="false" value="dl"/>
+								</option>
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.860802800" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.208832359" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.604586832" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							</tool>
+						</toolChain>
+					</folderInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.368303559" name="sse3.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse3.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1819718571">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1819718571" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419">
+							<option id="gnu.cpp.compiler.option.other.other.2048493368" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0  -msse  -msse2  -msse3  -mssse3" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1652500783" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.1614512364" name="avx.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/avx.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1669478786">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1669478786" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419">
+							<option id="gnu.cpp.compiler.option.other.other.659894033" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0  -mavx" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.2081000028" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.1088520346" name="avx512.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/avx512.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1096491537">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1096491537" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419">
+							<option id="gnu.cpp.compiler.option.other.other.1222783802" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -mavx512f -mavx512vl" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1645353784" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.311978698" name="sse4.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse4.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1983268269">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1983268269" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419">
+							<option id="gnu.cpp.compiler.option.other.other.1268540624" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -msse4 -msse4a" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.654026918" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2071974576" name="sse.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1994369907">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1994369907" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419">
+							<option id="gnu.cpp.compiler.option.other.other.1944001650" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0  -msse" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.873101331" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.600445765" name="sse2.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse2.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1249284333">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1249284333" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419">
+							<option id="gnu.cpp.compiler.option.other.other.1067905684" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0  -msse  -msse2" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1053854821" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2086890930" name="avx2.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/avx2.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1299179647">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419.1299179647" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419">
+							<option id="gnu.cpp.compiler.option.other.other.2120990625" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -mavx -mavx2" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1691873158" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<sourceEntries>
+						<entry excluding="modules/lsp-tk-lib/src/test/main.cpp|modules/lsp-r3d-glx-lib/src/test/main.cpp|modules/lsp-plugins-shared/src/test/main.cpp|modules/lsp-lltl-lib/src/test/main.cpp|modules/lsp-dsp-lib/src/test/main.cpp|modules/lsp-test-fw/src/test/main.cpp|modules/lsp-3rd-party/src/test/main.cpp|modules/lsp-r3d-base-lib/src/test/main.cpp|modules/lsp-r3d-iface/src/test/main.cpp|modules/lsp-dsp-units/src/test/main.cpp|modules/lsp-runtime-lib/src/test/main.cpp|modules/lsp-ws-lib/src/test/main.cpp|modules/lsp-common-lib/src/test/main.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+			<storageModule buildDir="_build/${ConfigName}" dirtyTs="0" moduleId="de.marw.cmake4eclipse.mbs.settings">
+				<options/>
+			</storageModule>
+		</cconfiguration>
+		<cconfiguration id="cdt.managedbuild.config.gnu.exe.release.1298618321">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.1298618321" moduleId="org.eclipse.cdt.core.settings" name="Release">
+				<externalSettings/>
+				<extensions>
+					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.1298618321" name="Release" optionalBuildProperties="" parent="cdt.managedbuild.config.gnu.exe.release">
+					<folderInfo id="cdt.managedbuild.config.gnu.exe.release.1298618321." name="/" resourcePath="">
+						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.1848773507" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+							<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.1940559043" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
+							<builder buildPath="${workspace_loc:/lsp-plugins-phaser}/Release" id="cdt.managedbuild.target.gnu.builder.exe.release.997987409" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
+							<tool id="cdt.managedbuild.tool.gnu.archiver.base.478155064" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+								<option id="gnu.cpp.compiler.exe.release.option.optimization.level.186261139" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+								<option defaultValue="gnu.cpp.compiler.debugging.level.none" id="gnu.cpp.compiler.exe.release.option.debugging.level.1146552933" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.option.dialect.std.44369995" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.c++11" valueType="enumerated"/>
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.296720645" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1801782191" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
+								<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.2021911512" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
+								<option defaultValue="gnu.c.debugging.level.none" id="gnu.c.compiler.exe.release.option.debugging.level.282044946" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.441829721" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.980521502" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.2044390353" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.407109210" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.627182181" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1767311093" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							</tool>
+						</toolChain>
+					</folderInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.release.1298618321.420173404" name="sse3.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse3.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.1202947797">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.1202947797" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585">
+							<option id="gnu.cpp.compiler.option.other.other.561191365" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0  -msse  -msse2  -msse3  -mssse3" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1509438493" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.release.1298618321.1706139314" name="avx.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/avx.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.1064215592">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.1064215592" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585">
+							<option id="gnu.cpp.compiler.option.other.other.1008773714" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0  -mavx" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.360571948" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.release.1298618321.105933045" name="avx512.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/avx512.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.995431695">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.995431695" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585">
+							<option id="gnu.cpp.compiler.option.other.other.979097834" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -mavx512f -mavx512vl" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1095124970" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.release.1298618321.1713696308" name="sse4.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse4.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.1455995287">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.1455995287" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585">
+							<option id="gnu.cpp.compiler.option.other.other.1137930481" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -msse4 -msse4a" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.641051527" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.release.1298618321.239844062" name="sse.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.123628885">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.123628885" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585">
+							<option id="gnu.cpp.compiler.option.other.other.465635726" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0  -msse" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1584068548" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.release.1298618321.417758273" name="sse2.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse2.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.327363334">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.327363334" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585">
+							<option id="gnu.cpp.compiler.option.other.other.833928794" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0  -msse  -msse2" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1956029240" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.release.1298618321.1490165340" name="avx2.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/avx2.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.640807254">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585.640807254" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585">
+							<option id="gnu.cpp.compiler.option.other.other.145786194" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -mavx -mavx2" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.191419688" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<sourceEntries>
+						<entry excluding="modules/lsp-tk-lib/src/test/main.cpp|modules/lsp-r3d-glx-lib/src/test/main.cpp|modules/lsp-plugins-shared/src/test/main.cpp|modules/lsp-lltl-lib/src/test/main.cpp|modules/lsp-dsp-lib/src/test/main.cpp|modules/lsp-test-fw/src/test/main.cpp|modules/lsp-3rd-party/src/test/main.cpp|modules/lsp-r3d-base-lib/src/test/main.cpp|modules/lsp-r3d-iface/src/test/main.cpp|modules/lsp-dsp-units/src/test/main.cpp|modules/lsp-runtime-lib/src/test/main.cpp|modules/lsp-ws-lib/src/test/main.cpp|modules/lsp-common-lib/src/test/main.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+		<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379" moduleId="org.eclipse.cdt.core.settings" name="DebugWin">
+				<externalSettings/>
+				<extensions>
+					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379" name="DebugWin" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.enablement=null,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.image=null,org.eclipse.cdt.docker.launcher.containerbuild.property.connection=null" parent="cdt.managedbuild.config.gnu.exe.debug">
+					<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379." name="/" resourcePath="">
+						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.805321852" name="Linux GCC" nonInternalBuilderId="cdt.managedbuild.target.gnu.builder.exe.debug" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+							<targetPlatform binaryParser="org.eclipse.cdt.core.GNU_ELF" id="cdt.managedbuild.target.gnu.platform.exe.debug.2105733708" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
+							<builder autoBuildTarget="all" buildPath="${workspace_loc:/lsp-plugins-phaser}/DebugWin" cleanBuildTarget="clean" id="org.eclipse.cdt.build.core.internal.builder.1709220428" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.internal.builder"/>
+							<tool id="cdt.managedbuild.tool.gnu.archiver.base.2018543798" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+							<tool commandLinePattern="${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+								<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.2095063021" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+								<option defaultValue="gnu.cpp.compiler.debugging.level.max" id="gnu.cpp.compiler.exe.debug.option.debugging.level.1030019664" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1740204886" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-plugins-shared/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-plugin-fw/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-common-lib}/include&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-3rd-party/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-dsp-units/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-lltl-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-base-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-wgl-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-iface/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-runtime-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-test-fw/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-tk-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-ws-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-dsp-lib/include}&quot;"/>
+								</option>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.138798729" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="LSP_TESTING"/>
+									<listOptionValue builtIn="false" value="LSP_TRACE"/>
+									<listOptionValue builtIn="false" value="LSP_IDE_DEBUG"/>
+								</option>
+								<option id="gnu.cpp.compiler.option.dialect.std.337785089" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.c++11" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.option.other.other.2040899930" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0" valueType="string"/>
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1841747603" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1517545003" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
+								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.596917978" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
+								<option defaultValue="gnu.c.debugging.level.max" id="gnu.c.compiler.exe.debug.option.debugging.level.2105930861" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.1289380344" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="LSP_TRACE"/>
+									<listOptionValue builtIn="false" value="LSP_TESTING"/>
+									<listOptionValue builtIn="false" value="LSP_IDE_DEBUG"/>
+								</option>
+								<option id="gnu.c.compiler.option.misc.other.892226553" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 " valueType="string"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.296159555" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-plugins-shared/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-plugin-fw/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-common-lib}/include&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-3rd-party/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-dsp-units/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-lltl-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-base-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-glx-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-r3d-iface/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-runtime-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-test-fw/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-tk-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-ws-lib/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/modules/lsp-dsp-lib/include}&quot;"/>
+								</option>
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.520188812" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.641082680" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+							<tool commandLinePattern="${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1531513383" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+								<option id="gnu.cpp.link.option.flags.1010243878" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="" valueType="string"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.498111776" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs">
+									<listOptionValue builtIn="false" value="shlwapi"/>
+									<listOptionValue builtIn="false" value="advapi32"/>
+									<listOptionValue builtIn="false" value="mpr"/>
+									<listOptionValue builtIn="false" value="opengl32"/>
+									<listOptionValue builtIn="false" value="uuid"/>
+									<listOptionValue builtIn="false" value="gdi32"/>
+									<listOptionValue builtIn="false" value="dwrite"/>
+									<listOptionValue builtIn="false" value="ole32"/>
+									<listOptionValue builtIn="false" value="windowscodecs"/>
+									<listOptionValue builtIn="false" value="d2d1"/>
+									<listOptionValue builtIn="false" value="msacm32"/>
+									<listOptionValue builtIn="false" value="winmm"/>
+									<listOptionValue builtIn="false" value="pthread"/>
+								</option>
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.816858982" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1646012322" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1488071963" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							</tool>
+						</toolChain>
+					</folderInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379.491888161" name="sse3.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse3.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.508718290">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.508718290" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888">
+							<option id="gnu.cpp.compiler.option.other.other.814618798" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0  -msse  -msse2  -msse3  -mssse3" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.2028888618" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379.2034372389" name="avx.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/avx.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.350793357">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.350793357" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888">
+							<option id="gnu.cpp.compiler.option.other.other.2099867631" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0  -mavx" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.2019173992" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379.347467300" name="avx512.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/avx512.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.1739376531">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.1739376531" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888">
+							<option id="gnu.cpp.compiler.option.other.other.281150225" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -mavx512f -mavx512vl" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.878812221" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379.22241195" name="sse4.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse4.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.404337146">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.404337146" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888">
+							<option id="gnu.cpp.compiler.option.other.other.278013789" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -msse4 -msse4a" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.722971830" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379.356232645" name="sse.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.1242276547">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.1242276547" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888">
+							<option id="gnu.cpp.compiler.option.other.other.245529589" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0  -msse" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.224396834" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379.121112954" name="sse2.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/sse2.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.1972645131">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.1972645131" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888">
+							<option id="gnu.cpp.compiler.option.other.other.785030485" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0  -msse  -msse2" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1639233284" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.619973679.2053448379.1228169350" name="avx2.cpp" rcbsApplicability="disable" resourcePath="modules/lsp-dsp-lib/src/main/x86/avx2.cpp" toolsToInvoke="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.399811727">
+						<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888.399811727" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1345866888">
+							<option id="gnu.cpp.compiler.option.other.other.1777553983" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -mavx -mavx2" valueType="string"/>
+							<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.297232891" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+						</tool>
+					</fileInfo>
+					<sourceEntries>
+						<entry excluding="modules/lsp-tk-lib/src/test/main.cpp|modules/lsp-r3d-glx-lib/src/test/main.cpp|modules/lsp-plugins-shared/src/test/main.cpp|modules/lsp-lltl-lib/src/test/main.cpp|modules/lsp-dsp-lib/src/test/main.cpp|modules/lsp-test-fw/src/test/main.cpp|modules/lsp-3rd-party/src/test/main.cpp|modules/lsp-r3d-base-lib/src/test/main.cpp|modules/lsp-r3d-iface/src/test/main.cpp|modules/lsp-dsp-units/src/test/main.cpp|modules/lsp-runtime-lib/src/test/main.cpp|modules/lsp-ws-lib/src/test/main.cpp|modules/lsp-common-lib/src/test/main.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+	</storageModule>
+	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+		<project id="lsp-plugins-phaser.cdt.managedbuild.target.gnu.exe.265290791" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
+	</storageModule>
+	<storageModule moduleId="scannerConfiguration">
+		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.1298618321;cdt.managedbuild.config.gnu.exe.release.1298618321.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.442760585;cdt.managedbuild.tool.gnu.cpp.compiler.input.296720645">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.619973679;cdt.managedbuild.config.gnu.exe.debug.619973679.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.2022121099;cdt.managedbuild.tool.gnu.c.compiler.input.1045371789">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.619973679;cdt.managedbuild.config.gnu.exe.debug.619973679.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.162163419;cdt.managedbuild.tool.gnu.cpp.compiler.input.449118389">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.1298618321;cdt.managedbuild.config.gnu.exe.release.1298618321.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1801782191;cdt.managedbuild.tool.gnu.c.compiler.input.441829721">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		</scannerConfigBuildInfo>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+	<storageModule moduleId="refreshScope" versionNumber="2">
+		<configuration configurationName="DebugLinux"/>
+		<configuration configurationName="DebugWin"/>
+		<configuration configurationName="Release">
+			<resource resourceType="PROJECT" workspacePath="/lsp-plugins-phaser"/>
+		</configuration>
+		<configuration configurationName="Debug">
+			<resource resourceType="PROJECT" workspacePath="/lsp-plugins-phaser"/>
+		</configuration>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+</cproject>
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/.gdbinit 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.gdbinit
--- 1.2.21-5/modules/lsp-plugins-phaser/.gdbinit	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.gdbinit	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,6 @@
+handle SIG32 nostop
+
+set print array off
+set print repeats unlimited
+set print elements unlimited
+source plot1d.gdb
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/.github/FUNDING.yml 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.github/FUNDING.yml
--- 1.2.21-5/modules/lsp-plugins-phaser/.github/FUNDING.yml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.github/FUNDING.yml	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,7 @@
+liberapay: sadko4u
+patreon: sadko4u
+custom:
+- https://www.blockchain.com/btc/address/15X3AfDRF3EshSLBoK8UfHAsFr2TQsH8pk
+- https://etherscan.io/address/0x079b24da78d78302cd3cfbb80c728cd554606cc6
+- https://www.bountysource.com/teams/lsp-plugins
+- https://paypal.me/sadko4u
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-phaser/.github/workflows/build.yml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.github/workflows/build.yml	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,237 @@
+---
+
+name: Build on various Operating Systems
+
+on:
+  push:
+    branches: [devel, master]
+  pull_request:
+    branches: [devel, master]
+
+env:
+  CARLA_BRIDGE_DUMMY: 1
+  CARLA_BRIDGE_TESTING: native
+  # FIXME some system library is causing memory leaks, switch to --leak-check=full when fixed
+  PLUGIN_METADATA: .build/target/lsp-plugin-fw/plugins.json
+  VALGRIND_ARGS: --error-exitcode=255 --leak-check=no --track-origins=yes --suppressions=.github/workflows/valgrind.supp
+  VALGRIND_DEBUG_ARGS: --error-exitcode=255 --leak-check=full --track-origins=yes --keep-debuginfo=yes --suppressions=.github/workflows/valgrind.supp
+
+jobs:
+  arch_linux:
+    runs-on: ubuntu-latest
+    container:
+      image: archlinux:latest
+    steps:
+      - name: Add debug repositories
+        run: |
+          printf "[core-debug]\nInclude = /etc/pacman.d/mirrorlist\n[extra-debug]\nInclude = /etc/pacman.d/mirrorlist\n[multilib-debug]\nInclude = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf
+          printf 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch\n%s\n' "$(cat /etc/pacman.d/mirrorlist)" > /etc/pacman.d/mirrorlist
+      - name: Install dependencies
+        run: pacman --noconfirm -Syu alsa-lib base-devel cairo carla git glibc-debug hicolor-icon-theme jack2 jq libglvnd libsndfile libx11 libxrandr lv2lint php valgrind gstreamer gst-plugins-base
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
+      - name: Fetch project dependencies
+        run: make fetch
+      - name: Build project
+        run: make VERBOSE=1
+      - name: Install binaries
+        run: make install
+      - name: System information
+        run: lscpu
+      - name: Lint LV2 plugins
+        run: |
+          for _plugin in $(jq -r '.plugins[].lv2_uri | select( . != null )' ${{ env.PLUGIN_METADATA }} ); do \
+            lv2lint -Mpack "${_plugin}"; \
+          done
+      - name: Validate LV2 syntax
+        run: lv2_validate /usr/lib/lv2/lsp-*.lv2/*.ttl
+      - name: LADSPA runtime checks
+        run: |
+          for _plugin in $(jq -r '.plugins[].ladspa_label | select( . != null )' ${{ env.PLUGIN_METADATA }}); do \
+            valgrind ${{ env.VALGRIND_ARGS }} /usr/lib/carla/carla-bridge-native ladspa /usr/lib/ladspa/lsp-*.so "${_plugin}" 1>/dev/null; \
+          done
+      - name: LV2 runtime checks
+        run: |
+          for _plugin in $(jq -r '.plugins[].lv2_uri | select( . != null )' ${{ env.PLUGIN_METADATA }}); do \
+            valgrind ${{ env.VALGRIND_ARGS }} /usr/lib/carla/carla-bridge-native lv2 "" "${_plugin}" 1>/dev/null; \
+          done
+      - name: VST2 runtime checks
+        run: |
+          for _binary in $(ls /usr/lib/vst/lsp-plugins/*.so | grep -v /liblsp-plugins-); do \
+            valgrind ${{ env.VALGRIND_ARGS }} /usr/lib/carla/carla-bridge-native vst2 "${_binary}" "" 1>/dev/null; \
+          done
+
+  arch_linux_asan:
+    runs-on: ubuntu-latest
+    container:
+      image: archlinux:latest
+    steps:
+      - name: Add debug repositories
+        run: |
+          printf "[core-debug]\nInclude = /etc/pacman.d/mirrorlist\n[extra-debug]\nInclude = /etc/pacman.d/mirrorlist\n[multilib-debug]\nInclude = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf
+          printf 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch\n%s\n' "$(cat /etc/pacman.d/mirrorlist)" > /etc/pacman.d/mirrorlist
+      - name: Install dependencies
+        run: pacman --noconfirm -Syu alsa-lib base-devel cairo carla git glibc-debug hicolor-icon-theme jack2 jq libglvnd libsndfile libx11 libxrandr php valgrind gstreamer gst-plugins-base
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: make config STRICT=1 DEBUG=1 VERBOSE=1 ASAN=1 FEATURES='clap jack gst ladspa ui lv2 vst2 vst3' PREFIX=/usr
+      - name: Fetch project dependencies
+        run: make fetch
+      - name: Build project
+        run: make VERBOSE=1
+      - name: Install binaries
+        run: make install
+      - name: System information
+        run: lscpu
+      - name: LADSPA runtime checks
+        run: |
+          for _plugin in $(jq -r '.plugins[].ladspa_label | select( . != null )' ${{ env.PLUGIN_METADATA }}); do \
+            export ASAN_OPTIONS=verify_asan_link_order=0; \
+            /usr/lib/carla/carla-bridge-native ladspa /usr/lib/ladspa/lsp-*.so "${_plugin}" 1>/dev/null; \
+          done
+      - name: LV2 runtime checks
+        run: |
+          for _plugin in $(jq -r '.plugins[].lv2_uri | select( . != null )' ${{ env.PLUGIN_METADATA }}); do \
+            export ASAN_OPTIONS=verify_asan_link_order=0; \
+            /usr/lib/carla/carla-bridge-native lv2 "" "${_plugin}" 1>/dev/null; \
+          done
+      - name: VST2 runtime checks
+        run: |
+          for _binary in $(ls /usr/lib/vst/lsp-plugins/*.so | grep -v /liblsp-plugins-); do \
+            export ASAN_OPTIONS=verify_asan_link_order=0; \
+            /usr/lib/carla/carla-bridge-native vst2 "${_binary}" "" 1>/dev/null; \
+          done
+
+  arch_linux_valgrind:
+    runs-on: ubuntu-latest
+    container:
+      image: archlinux:latest
+    steps:
+      - name: Add debug repositories
+        run: |
+          printf "[core-debug]\nInclude = /etc/pacman.d/mirrorlist\n[extra-debug]\nInclude = /etc/pacman.d/mirrorlist\n[multilib-debug]\nInclude = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf
+          printf 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch\n%s\n' "$(cat /etc/pacman.d/mirrorlist)" > /etc/pacman.d/mirrorlist
+      - name: Install dependencies
+        run: pacman --noconfirm -Syu alsa-lib base-devel cairo carla git glibc-debug hicolor-icon-theme jack2 jq libglvnd libsndfile libx11 libxrandr php valgrind gstreamer gst-plugins-base
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: make config STRICT=1 DEBUG=1 VERBOSE=1 FEATURES='clap jack gst ladspa lv2 ui vst2 vst3' PREFIX=/usr
+      - name: Fetch project dependencies
+        run: make fetch
+      - name: Build project
+        run: make VERBOSE=1
+      - name: Install binaries
+        run: make install
+      - name: System information
+        run: lscpu
+      - name: LADSPA runtime checks
+        run: |
+          for _plugin in $(jq -r '.plugins[].ladspa_label | select( . != null )' ${{ env.PLUGIN_METADATA }}); do \
+            valgrind ${{ env.VALGRIND_DEBUG_ARGS }} /usr/lib/carla/carla-bridge-native ladspa /usr/lib/ladspa/lsp-*.so "${_plugin}" 1>/dev/null; \
+          done
+      - name: LV2 runtime checks
+        run: |
+          for _plugin in $(jq -r '.plugins[].lv2_uri | select( . != null )' ${{ env.PLUGIN_METADATA }}); do \
+            valgrind ${{ env.VALGRIND_DEBUG_ARGS }} /usr/lib/carla/carla-bridge-native lv2 "" "${_plugin}" 1>/dev/null; \
+          done
+      - name: VST2 runtime checks
+        run: |
+          for _binary in $(ls /usr/lib/vst/lsp-plugins/*.so | grep -v /liblsp-plugins-); do \
+            valgrind ${{ env.VALGRIND_DEBUG_ARGS }} /usr/lib/carla/carla-bridge-native vst2 "${_binary}" "" 1>/dev/null; \
+          done
+
+  opensuse_leap:
+    runs-on: ubuntu-latest
+    container:
+      image: opensuse/leap:latest
+    steps:
+      - name: Install dependencies
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
+      - name: Fetch project dependencies
+        run: make fetch
+      - name: Build project
+        run: make VERBOSE=1
+      - name: Install binaries
+        run: make install
+
+  opensuse_tumbleweed_clang:
+    runs-on: ubuntu-latest
+    container:
+      image: opensuse/tumbleweed:latest
+    steps:
+      - name: Install dependencies
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
+      - name: Fetch project dependencies
+        run: make fetch
+      - name: Build project
+        run: make VERBOSE=1
+      - name: Install binaries
+        run: make install
+
+  debian_stable:
+    runs-on: ubuntu-latest
+    container:
+      image: debian:stable
+    steps:
+      - name: Update repositories
+        run: apt-get update
+      - name: Install dependencies
+        run: apt-get -y install gcc g++ git make php-cli pkg-config valgrind libx11-dev libxrandr-dev libjack-dev libcairo2-dev libgl-dev libfreetype6-dev libsndfile1-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
+      - name: Fetch project dependencies
+        run: make fetch
+      - name: Build project
+        run: make VERBOSE=1
+      - name: Install binaries
+        run: make install
+
+  windows_mingw64:
+    runs-on: windows-2022
+    defaults:
+      run:
+        shell: msys2 {0}
+    steps:
+      - name: Setup MSYS2 and install dependencies
+        uses: msys2/setup-msys2@v2
+        with:
+          msystem: MINGW64
+          release: false
+          update: false
+          install: >-
+            base-devel
+            git
+            mingw-w64-x86_64-gcc
+      - uses: actions/checkout@v3
+      - name: Configure project
+        shell: msys2 {0}
+        run: make config STRICT=1 VERBOSE=1 FEATURES='clap ladspa lv2 ui vst2 vst3'
+      - name: Fetch project dependencies
+        shell: msys2 {0}
+        run: make fetch
+      - name: Build project
+        shell: msys2 {0}
+        run: make VERBOSE=1
+
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/.github/workflows/valgrind.supp 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.github/workflows/valgrind.supp
--- 1.2.21-5/modules/lsp-plugins-phaser/.github/workflows/valgrind.supp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.github/workflows/valgrind.supp	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,40 @@
+{
+   libdl is full of leaks
+   Memcheck:Leak
+   ...
+   fun:_dl_open
+   ...
+}
+{
+   libdl is full of leaks
+   Memcheck:Leak
+   ...
+   fun:_dl_close
+   ...
+}
+{
+   libdl is full of leaks
+   Memcheck:Leak
+   ...
+   fun:_dl_init
+}
+{
+   libdl is full of leaks
+   Memcheck:Leak
+   ...
+   fun:_dl_allocate_tls
+   ...
+}
+{
+   libdl is full of leaks
+   Memcheck:Leak
+   ...
+   fun:call_init.part.0
+}
+{
+   ignore XInitThreads
+   Memcheck:Leak
+   ...
+   fun:XInitThreads
+   ...
+}
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/.project 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.project
--- 1.2.21-5/modules/lsp-plugins-phaser/.project	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/.project	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>lsp-plugins-phaser</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<triggers>full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.core.ccnature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1642025177231</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-name-matches-false-false-.build</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-phaser/CHANGELOG	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/CHANGELOG	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,13 @@
+*******************************************************************************
+* RECENT CHANGES
+*******************************************************************************
+
+=== 1.0.1 ===
+* Added frequency linking button that allows to link minimum and maximum frequencies
+  and to keep logarithmic frequency range being constant.
+* Added exciter-like effect presets contributed by Attila Schler.
+* Updated build scripts and dependencies.
+
+=== 1.0.0 ===
+* Initial release.
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/COPYING 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/COPYING
--- 1.2.21-5/modules/lsp-plugins-phaser/COPYING	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/COPYING	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/COPYING.LESSER 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/COPYING.LESSER
--- 1.2.21-5/modules/lsp-plugins-phaser/COPYING.LESSER	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/COPYING.LESSER	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/Makefile 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/Makefile
--- 1.2.21-5/modules/lsp-plugins-phaser/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/Makefile	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,153 @@
+#!/usr/bin/make -f
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+# Command-line flag to silence nested $(MAKE).
+ifneq ($(VERBOSE),1)
+.SILENT:
+endif
+
+# Location
+BASEDIR                    := $(CURDIR)
+MODULES                    := $(BASEDIR)/modules
+BUILDDIR                   := $(BASEDIR)/.build
+CONFIG                     := $(BASEDIR)/.config.mk
+PLUGINS                    := $(BASEDIR)/plugins.mk
+PROJECT                    := $(BASEDIR)/project.mk
+
+# Basic initialization
+# Checks
+ifeq ("$(wildcard $(CONFIG))", "")
+  CONFIGURED          = 0
+else
+  CONFIGURED          = 1
+endif
+
+include $(BASEDIR)/project.mk
+
+# Setup paths
+CHK_CONFIG                  = test -f "$(CONFIG)" || (echo "System not properly configured. Please launch 'make config' first" && exit 1)
+DISTSRC_PATH                = $(BUILDDIR)/distsrc
+DISTSRC                     = $(DISTSRC_PATH)/$(ARTIFACT_NAME)
+DISTSRC_DIRS                = \
+  $(if $(wildcard $(BASEDIR)/include/*), $(BASEDIR)/include) \
+  $(if $(wildcard $(BASEDIR)/src/*), $(BASEDIR)/src) \
+  $(if $(wildcard $(BASEDIR)/make/*), $(BASEDIR)/make) \
+  $(if $(wildcard $(BASEDIR)/res/*), $(BASEDIR)/res)
+DISTSRC_FILES               = \
+  $(wildcard $(BASEDIR)/CHANGELOG) \
+  $(wildcard $(BASEDIR)/COPYING*) \
+  $(wildcard $(BASEDIR)/*LICENSE*) \
+  $(wildcard $(BASEDIR)/Makefile) \
+  $(wildcard $(BASEDIR)/*.mk) \
+  $(wildcard $(BASEDIR)/*.md) \
+  $(wildcard $(BASEDIR)/*.txt)
+
+.DEFAULT_GOAL              := all
+.PHONY: all compile install uninstall clean package
+
+compile all install uninstall package:
+	$(CHK_CONFIG)
+	$(MAKE) -C "$(BASEDIR)/src" $(@) VERBOSE="$(VERBOSE)" CONFIG="$(CONFIG)" DESTDIR="$(DESTDIR)"
+
+clean:
+	echo "Cleaning build directory $(BUILDDIR)"
+	-rm -rf $(BUILDDIR)
+	echo "Clean OK"
+	
+# Module-related tasks
+.PHONY: fetch tree prune
+fetch:
+	$(CHK_CONFIG)
+	echo "Fetching desired source code dependencies"
+	$(MAKE) -f "make/modules.mk" $(@) VERBOSE="$(VERBOSE)" BASEDIR="$(BASEDIR)" CONFIG="$(CONFIG)"
+	echo "Fetch OK"
+	
+tree:
+	echo "Fetching all possible source code dependencies"
+	$(MAKE) -f "make/modules.mk" $(@) VERBOSE="$(VERBOSE)" BASEDIR="$(BASEDIR)" TREE="1"
+	echo "Fetch OK"
+
+prune: clean
+	echo "Pruning the whole project tree"
+	$(MAKE) -f "make/modules.mk" prune VERBOSE="$(VERBOSE)" BASEDIR="$(BASEDIR)" CONFIG="$(CONFIG)"
+	$(MAKE) -f "make/modules.mk" prune VERBOSE="$(VERBOSE)" BASEDIR="$(BASEDIR)" TREE="1"
+	-rm -rf "$(CONFIG)"
+	echo "Prune OK"
+
+# Configuration-related targets
+.PHONY: config testconfig devel help chkconfig
+
+config: CONFIG_FLAGS=
+testconfig: CONFIG_FLAGS=TEST=1
+devel: CONFIG_FLAGS=TEST=1 DEVEL=1
+
+config testconfig devel:
+	$(MAKE) -f "make/configure.mk" config VERBOSE="$(VERBOSE)" CONFIG="$(CONFIG)" -$(MAKEFLAGS)
+
+# Release-related targets
+.PHONY: distsrc
+distsrc:
+	echo "Building source code archive"
+	mkdir -p "$(DISTSRC)/modules"
+	$(MAKE) -f "make/modules.mk" tree VERBOSE="$(VERBOSE)" BASEDIR="$(BASEDIR)" MODULES="$(DISTSRC)/modules" TREE="1"
+	$(if $(DISTSRC_DIRS), cp -R $(DISTSRC_DIRS) "$(DISTSRC)/")
+	$(if $(DISTSRC_FILES), cp $(DISTSRC_FILES) "$(DISTSRC)/")
+	find "$(DISTSRC)" -iname '.git' | xargs rm -rf {}
+	find "$(DISTSRC)" -iname '.gitignore' | xargs rm -rf {}
+	tar -C $(DISTSRC_PATH) -czf "$(BUILDDIR)/$(ARTIFACT_NAME)-src-$(ARTIFACT_VERSION).tar.gz" "$(ARTIFACT_NAME)"
+	echo "Created archive: $(BUILDDIR)/$(ARTIFACT_NAME)-src-$(ARTIFACT_VERSION).tar.gz"
+	rm -rf $(DISTSRC_PATH)
+	echo "Build OK"
+
+# Help
+help:
+	echo "Available targets:"
+	echo "  all                       Build all binaries"
+	echo "  clean                     Clean all build files and configuration file"
+	echo "  config                    Configure build"
+	echo "  devel                     Configure build as development build"
+	echo "  distsrc                   Make tarball with source code for packagers"
+	echo "  fetch                     Fetch all desired source code dependencies from git"
+	echo "  help                      Print this help message"
+	echo "  info                      Output build configuration"
+	echo "  install                   Install all binaries into the system"
+	echo "  package                   Create archive files with binaries"
+	echo "  prune                     Cleanup build and all fetched dependencies from git"
+	echo "  testconfig                Configure test build"
+	echo "  tree                      Fetch all possible source code dependencies from git"
+	echo "                            to make source code portable between machines"
+	echo "  uninstall                 Uninstall binaries"
+	echo ""
+	$(MAKE) -f "$(BASEDIR)/make/configure.mk" $(@) VERBOSE="$(VERBOSE)"
+	echo ""
+	echo "Available FEATURES:"
+	echo "  clap                      CLAP plugin format binaries"
+	echo "  doc                       Generate standalone HTML documentation"
+	echo "  gst                       GStreamer plugins"
+	echo "  jack                      Standalone JACK plugins"
+	echo "  ladspa                    LADSPA plugins"
+	echo "  lv2                       LV2 plugins"
+	echo "  ui                        Build plugins with UI"
+	echo "  vst2                      VST 2.x plugin binaries"
+	echo "  vst3                      VST 3.x plugin binaries"
+	echo "  xdg                       Desktop integration icons"
+
+	
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/README.md 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/README.md
--- 1.2.21-5/modules/lsp-plugins-phaser/README.md	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/README.md	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,141 @@
+# lsp-plugins-plugin-template
+
+Summary
+======
+
+Template plugin repository.
+
+This repository has all necessary information to start development of the plugin as a part of
+[LSP Plugin Framework](https://github.com/lsp-plugins/lsp-plugin-fw).
+
+The project can be renamed by applying the script from the root:
+
+```
+./rename.sh <package-name> <plugin-name> <PLUGIN_ARTIFACT_ID> <Plugin Description>
+```
+
+For example:
+
+```
+./rename.sh lsp-plugins comp-delay LSP_PLUGINS_COMP_DELAY "LSP Compensation Delay Plugin Series"
+```
+
+Creating a new project
+======
+
+Here are the following steps of creating new project using this template repository.
+We will assume that the new project is called `lsp-plugins-example` and is created at the
+same directory the `lsp-plugins-plugin-template` is placed.
+
+
+* Create github repository.
+
+  This can be done it two ways. The first one, just using `git init`:
+
+      mkdir lsp-plugins-example
+      cd lsp-plugins-example
+      git init
+      git checkout -b master
+      git checkout -b devel
+
+  The second way, you can create the repository on GitHub and clone it:
+
+      git clone <project-base-url>/lsp-plugins-example.git
+      cd lsp-plugins-example
+      git checkout -b devel
+
+* Copy contents of this template repository to the project folder.
+
+      cd ../lsp-plugins-plugin-template/
+      cp -r `ls -a | egrep -v '^\.$|^\.\.$|^\.git$'` ../lsp-plugins-example/
+
+* Rename the project.
+
+      cd ../lsp-plugins-example/
+      ./rename.sh 'lsp-plugins' 'example' LSP_PLUGINS_EXAMPLE "LSP Example Plugin"
+      rm rename.sh
+
+* For Eclipse users, use `File -> Open Projects from File System...` menu to import the project.
+
+Source code tree
+======
+
+The typical source code tree is the following:
+
+* include - include files for the plugin
+  * private - all headers related to the plugin should be placed here
+    * meta - headers for plugin metadata
+    * plugins - headers for plugin modules (DSP part)
+    * ui - headers for UI modules (UI part)
+* make - makefiles for configuration
+* modules - folder for fetching the plugin dependencies
+* res - different plugin resources
+  * doc - different resources for documentation
+    * configs - different configurations that can be applied for taking screenshots
+    * screenshots - plugin UI screenshots, 1 per plugin
+  * main - main resources that will be built-in into the plugin binary
+    * i18n - different localization files
+    * presets - plugin presets that can be used and loaded by the plugin
+    * ui - XML files for instantiating the basic UI
+  * xdg - different resources for XDG integration
+    * apps - folder with directory files for launching standalone plugin binaries
+* src - plugin source code
+  * doc - documentation to the plugin in PHP format
+  * main - the main plugin code
+    * meta - plugin metadata
+    * plug - the DSP code part of plugin
+    * shared - the shared code between DSP part and UI part
+    * ui - the UI code part of plugin
+  * test - the code for testing
+    * mtest - the code for manual testing
+    * utest - the code for unit testing
+    * ptest - the code for performance testing
+
+Building
+======
+
+To build the library, perform the following commands:
+
+```bash
+make config # Configure the build
+make fetch # Fetch dependencies from Git repository
+make
+sudo make install
+```
+
+To get more build options, run:
+
+```bash
+make help
+```
+
+To uninstall library, simply issue:
+
+```bash
+make uninstall
+```
+
+To clean all binary files, run:
+
+```bash
+make clean
+```
+
+To clean the whole project tree including configuration files, run:
+
+```bash
+make prune
+```
+
+To fetch all possible dependencies and make the source code tree portable between
+different architectures and platforms, run:
+
+```bash
+make tree
+```
+
+To build source code archive with all possible dependencies, run:
+
+```bash
+make distsrc
+```
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/dependencies.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/dependencies.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,148 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+#------------------------------------------------------------------------------
+# List of all dependencies
+DEPENDENCIES = \
+  LSP_COMMON_LIB \
+  LSP_DSP_LIB \
+  LSP_DSP_UNITS \
+  LSP_LLTL_LIB \
+  LSP_RUNTIME_LIB \
+  LSP_PLUGINS_SHARED \
+  LSP_3RD_PARTY \
+  LSP_PLUGIN_FW \
+  LSP_R3D_IFACE \
+  LSP_WS_LIB \
+  LSP_TK_LIB \
+  LSP_R3D_BASE_LIB
+
+TEST_DEPENDENCIES = \
+  LSP_TEST_FW
+
+DEFAULT_FEATURES = clap doc ladspa lv2 ui vst2 vst3
+
+#------------------------------------------------------------------------------
+# Linux dependencies
+LINUX_DEPENDENCIES = \
+  LIBCAIRO \
+  LIBDL \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBGL \
+  LIBGSTREAMER_AUDIO \
+  LIBJACK \
+  LIBPTHREAD \
+  LIBRT \
+  LIBSNDFILE \
+  LIBX11 \
+  LIBXRANDR \
+  LSP_R3D_GLX_LIB
+
+LINUX_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),Linux)
+  DEPENDENCIES             += $(LINUX_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(LINUX_TEST_DEPENDENCIES)
+  DEFAULT_FEATURES         += jack gst xdg
+endif
+
+#------------------------------------------------------------------------------
+# BSD dependencies
+BSD_DEPENDENCIES = \
+  LIBCAIRO \
+  LIBDL \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBGL \
+  LIBGSTREAMER_AUDIO \
+  LIBICONV \
+  LIBJACK \
+  LIBPTHREAD \
+  LIBRT \
+  LIBSNDFILE \
+  LIBX11 \
+  LIBXRANDR \
+  LSP_R3D_GLX_LIB
+
+BSD_TEST_DEPENDENCIES = 
+
+ifeq ($(PLATFORM),BSD)
+  DEPENDENCIES             += $(BSD_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(BSD_TEST_DEPENDENCIES)
+  DEFAULT_FEATURES         += jack gst xdg
+endif
+
+#------------------------------------------------------------------------------
+# Windows dependencies
+WINDOWS_DEPENDENCIES = \
+  LIBSHLWAPI \
+  LIBWINMM \
+  LIBMSACM \
+  LIBMPR \
+  LIBGDI32 \
+  LIBD2D1 \
+  LIBOLE \
+  LIBWINCODEC \
+  LIBDWRITE \
+  LIBUUID \
+  LIBOPENGL32 \
+  LSP_R3D_WGL_LIB
+
+WINDOWS_TEST_DEPENDENCIES = 
+
+ifeq ($(PLATFORM),Windows)
+  DEPENDENCIES             += $(WINDOWS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(WINDOWS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
+# All possible dependencies
+ALL_DEPENDENCIES = \
+  $(DEPENDENCIES) \
+  $(LINUX_DEPENDENCIES) \
+  $(BSD_DEPENDENCIES) \
+  $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
+  $(TEST_DEPENDENCIES) \
+  $(LINUX_TEST_DEPENDENCIES) \
+  $(BSD_TEST_DEPENDENCIES) \
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/include/private/meta/phaser.h 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/include/private/meta/phaser.h
--- 1.2.21-5/modules/lsp-plugins-phaser/include/private/meta/phaser.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/include/private/meta/phaser.h	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugins-phaser
+ * Created on: 10 мар 2025 г.
+ *
+ * lsp-plugins-phaser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugins-phaser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugins-phaser. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_META_PHASER_H_
+#define PRIVATE_META_PHASER_H_
+
+#include <lsp-plug.in/plug-fw/meta/types.h>
+#include <lsp-plug.in/plug-fw/const.h>
+
+namespace lsp
+{
+    //-------------------------------------------------------------------------
+    // Plugin metadata
+    namespace meta
+    {
+        typedef struct phaser
+        {
+            static constexpr float  RATE_MIN                = 0.01f;
+            static constexpr float  RATE_MAX                = 20.0f;
+            static constexpr float  RATE_DFL                = 0.25f;
+            static constexpr float  RATE_STEP               = 0.005f;
+
+            static constexpr float  FRACTION_MIN            = 1.0f / 64.0f;
+            static constexpr float  FRACTION_MAX            = 8.0f;
+            static constexpr float  FRACTION_STEP           = 1.0f / 64.0f;
+            static constexpr float  FRACTION_DFL            = 1.0f;
+
+            static constexpr float  DENOMINATOR_MIN         = 1.0f;
+            static constexpr float  DENOMINATOR_MAX         = 64.0f;
+            static constexpr float  DENOMINATOR_STEP        = 1.0f;
+            static constexpr float  DENOMINATOR_DFL         = 4.0f;
+
+            static constexpr float  TEMPO_MIN               = 20.0f;
+            static constexpr float  TEMPO_MAX               = 360.0f;
+            static constexpr float  TEMPO_STEP              = 0.1f;
+            static constexpr float  TEMPO_DFL               = 120.0f;
+
+            static constexpr size_t FILTERS_MIN             = 1;
+            static constexpr size_t FILTERS_MAX             = 8;
+            static constexpr size_t FILTERS_DFL             = 4;
+            static constexpr size_t FILTERS_STEP            = 1;
+
+            static constexpr float  LFO_FREQ_MIN            = 50.0f;
+            static constexpr float  LFO_FREQ_MAX            = 20000.0f;
+            static constexpr float  LFO_FREQ_START          = 200.0f;
+            static constexpr float  LFO_FREQ_END            = 5000.0f;
+            static constexpr float  LFO_FREQ_DFL            = LFO_FREQ_MIN;
+            static constexpr float  LFO_FREQ_STEP           = 0.0025f;
+
+            static constexpr float  CROSSFADE_MIN           = 0.0f;
+            static constexpr float  CROSSFADE_MAX           = 50.0f;
+            static constexpr float  CROSSFADE_DFL           = 0.0f;
+            static constexpr float  CROSSFADE_STEP          = 0.015f;
+
+            static constexpr float  OVERLAP_MIN             = 0.0f;
+            static constexpr float  OVERLAP_MAX             = 100.0f;
+            static constexpr float  OVERLAP_DFL             = 100.0f;
+            static constexpr float  OVERLAP_STEP            = 0.1f;
+
+            static constexpr float  PHASE_MIN               = 0.0f;
+            static constexpr float  PHASE_MAX               = 360.0f;
+            static constexpr float  PHASE_DFL               = 0.0f;
+            static constexpr float  PHASE_STEP              = 0.04f;
+
+            static constexpr float  FILTER_PHASE_MIN        = 0.0f;
+            static constexpr float  FILTER_PHASE_MAX        = 360.0f;
+            static constexpr float  FILTER_PHASE_DFL        = 180.0f;
+            static constexpr float  FILTER_PHASE_STEP       = 0.04f;
+
+            static constexpr float  CHANNEL_PHASE_MIN       = 0.0f;
+            static constexpr float  CHANNEL_PHASE_MAX       = 360.0f;
+            static constexpr float  CHANNEL_PHASE_DFL       = 180.0f;
+            static constexpr float  CHANNEL_PHASE_STEP      = 0.04f;
+
+            static constexpr float  FEEDBACK_GAIN_MIN       = 0.0f;
+            static constexpr float  FEEDBACK_GAIN_MAX       = GAIN_AMP_M_1_DB;
+            static constexpr float  FEEDBACK_GAIN_DFL       = GAIN_AMP_M_6_DB;
+            static constexpr float  FEEDBACK_GAIN_STEP      = 0.015f;
+
+            static constexpr float  FEEDBACK_DELAY_MIN      = 0.0f;
+            static constexpr float  FEEDBACK_DELAY_MAX      = 5.0f;
+            static constexpr float  FEEDBACK_DELAY_DFL      = 0.0f;
+            static constexpr float  FEEDBACK_DELAY_STEP     = 0.001f;
+
+            static constexpr float  SHIFT_MIN               = 0.0f;
+            static constexpr float  SHIFT_MAX               = 1.0f;
+            static constexpr float  SHIFT_DFL               = 0.0f;
+            static constexpr float  SHIFT_STEP              = 0.04f;
+
+            static constexpr float  HPF_MIN                 = 10.0f;
+            static constexpr float  HPF_MAX                 = 20000.0f;
+            static constexpr float  HPF_DFL                 = 10.0f;
+            static constexpr float  HPF_STEP                = 0.0025f;
+
+            static constexpr float  LPF_MIN                 = 10.0f;
+            static constexpr float  LPF_MAX                 = 20000.0f;
+            static constexpr float  LPF_DFL                 = 20000.0f;
+            static constexpr float  LPF_STEP                = 0.0025f;
+
+            static constexpr float  FILTER_QUALITY_MIN      = 0.1f;
+            static constexpr float  FILTER_QUALITY_MAX      = 10.0f;
+            static constexpr float  FILTER_QUALITY_DFL      = 1.0f;
+            static constexpr float  FILTER_QUALITY_STEP     = 0.0025f;
+
+            static constexpr size_t LFO_MESH_SIZE           = 361;
+
+            enum osc_period_t
+            {
+                OSC_FULL,
+                OSC_FIRST,
+                OSC_LAST
+            };
+
+            enum osc_mode_t
+            {
+                MODE_RATE,
+                MODE_TEMPO,
+                MODE_STATIC
+            };
+        } phaser;
+
+        // Plugin type metadata
+        extern const plugin_t phaser_mono;
+        extern const plugin_t phaser_stereo;
+
+    } /* namespace meta */
+} /* namespace lsp */
+
+#endif /* PRIVATE_META_PHASER_H_ */
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/include/private/plugins/phaser.h 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/include/private/plugins/phaser.h
--- 1.2.21-5/modules/lsp-plugins-phaser/include/private/plugins/phaser.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/include/private/plugins/phaser.h	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugins-phaser
+ * Created on: 10 мар 2025 г.
+ *
+ * lsp-plugins-phaser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugins-phaser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugins-phaser. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_PLUGINS_PHASER_H_
+#define PRIVATE_PLUGINS_PHASER_H_
+
+#include <lsp-plug.in/dsp-units/ctl/Bypass.h>
+#include <lsp-plug.in/dsp-units/ctl/Toggle.h>
+#include <lsp-plug.in/dsp-units/filters/Equalizer.h>
+#include <lsp-plug.in/dsp-units/misc/lfo.h>
+#include <lsp-plug.in/dsp-units/util/Delay.h>
+#include <lsp-plug.in/dsp-units/util/RingBuffer.h>
+#include <lsp-plug.in/plug-fw/core/IDBuffer.h>
+#include <lsp-plug.in/plug-fw/plug.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <private/meta/phaser.h>
+
+namespace lsp
+{
+    namespace plugins
+    {
+        /**
+         * Base class for the latency compensation delay
+         */
+        class phaser: public plug::Module
+        {
+            protected:
+                typedef float (*mix_func_t)(float o_value, float n_value, float k);
+
+                typedef struct filter_t
+                {
+                    float                   sAllpass[4];        // Allpass filter data
+                    uint32_t                nPhase;             // Phase shift relative to global LFO
+                    uint32_t                nActPhase;          // Actual phase of LFO
+                    float                   fNormShift;         // Normalized shift
+                    float                   fNormScale;         // Normalized scale
+                    float                   fOutPhase;          // Output phase value
+                    float                   fOutShift;          // Output shift value
+                    float                   fOutFreq;           // Output frequency
+
+                    plug::IPort            *pPhase;             // Output phase
+                    plug::IPort            *pShift;             // Output delay shift
+                    plug::IPort            *pOutFreq;           // Actual frequency
+                } filter_t;
+
+                typedef struct lfo_t
+                {
+                    float                   fOverlap;           // LFO overlapping
+                    float                   fOldMinFreq;        // Old minimum frequency
+                    float                   fMinFreq;           // Minimum frequency
+                    float                   fOldMaxFreq;        // Old maximum frequency
+                    float                   fMaxFreq;           // Maximum frequency
+                    uint32_t                nOldInitPhase;      // Old init phase
+                    uint32_t                nInitPhase;         // Initial phase
+                    uint32_t                nPhase;             // Current base LFO phase
+                    uint32_t                nOldPhaseStep;      // Old phase increment
+                    uint32_t                nPhaseStep;         // Phase increment
+                    float                   fIFilterPhase;      // Inter-filter phase
+                    float                   fIChanPhase;        // Inter-channel phase
+                    bool                    bSyncMesh;          // Need to synchronize mesh with UI
+
+                    plug::IPort            *pOverlap;           // Overlap
+                    plug::IPort            *pMinFreq;           // Minimum frequency
+                    plug::IPort            *pMaxFreq;           // Maximum frequency
+                    plug::IPort            *pInitPhase;         // Initial phase
+                    plug::IPort            *pIFilterPhase;      // Inter-filter phase
+                    plug::IPort            *pIChannelPhase;     // Inter-channel phase
+                    plug::IPort            *pMesh;              // Mesh data
+                } lfo_t;
+
+                typedef struct channel_t
+                {
+                    // DSP processing modules
+                    dspu::Bypass            sBypass;            // Bypass
+                    dspu::RingBuffer        sFeedback;          // Feedback delay buffer
+                    dspu::Equalizer         sEq;                // Equalizer for processed signal
+                    filter_t                vFilters[meta::phaser::FILTERS_MAX];    // Filters
+
+                    size_t                  nLfoType;           // Type of LFO
+                    size_t                  nLfoPeriod;         // LFO period
+                    float                   vLfoArg[2];         // LFO function coefficients (multiplier, adder)
+                    dspu::lfo::function_t   pLfoFunc;           // LFO function
+                    float                  *vLfoMesh;           // LFO mesh amplitude data
+
+                    // Parameters
+                    float                   *vIn;               // Input buffer
+                    float                   *vOut;              // Output buffer
+                    float                   *vBuffer;           // Processed signal
+
+                    // Data ports ports
+                    plug::IPort            *pIn;                // Input port
+                    plug::IPort            *pOut;               // Output port
+                    plug::IPort            *pInLevel;           // Input level meter
+                    plug::IPort            *pOutLevel;          // Output level meter
+                    plug::IPort            *pLfoType;           // LFO type
+                    plug::IPort            *pLfoPeriod;         // LFO period
+                } channel_t;
+
+            protected:
+                static dspu::lfo::function_t    all_lfo_functions[];
+
+            protected:
+                uint32_t                nChannels;          // Number of channels
+                uint32_t                nFilters;           // Number of active filters
+
+                dspu::Toggle            sReset;             // Reset toggle
+                channel_t              *vChannels;          // Number of channels
+                lfo_t                   sLfo;               // Low-frequency oscillator
+                float                  *vBuffer;            // Temporary buffer for processing
+                float                  *vLfoPhase;          // Buffer that stores LFO phase
+
+                float                   fRevSampleRate;     // Reverse sample rate
+                float                   fRevQuality;        // Filter reverse quality
+                float                   fRate;              // Rate
+                float                   fOldDepth;          // Old Depth
+                float                   fDepth;             // Depth
+                uint32_t                nCrossfade;         // Cross-fade threshold
+                float                   fCrossfade;         // Cross-fade coefficient
+                float                   fRevCrossfade;      // Reverse cross-fade coefficient
+                float                   fOldInGain;         // Old input gain
+                float                   fInGain;            // Input gain
+                float                   fOldDryGain;        // Old dry gain
+                float                   fDryGain;           // Dry gain
+                float                   fOldWetGain;        // Old wet gain
+                float                   fWetGain;           // Wet gain
+                float                   fOldFeedGain;       // Old feedback gain
+                float                   fFeedGain;          // Feed-back gain
+                float                   fOldFeedDelay;      // Old feedback delay
+                float                   fFeedDelay;         // Feed-back delay
+                bool                    bMS;                // Mid/Side mode
+                bool                    bMono;              // Mono mode
+                bool                    bCustomLfo;         // Custom LFO shape for second channel
+                bool                    bUpdateFilters;     // Update filters
+
+                plug::IPort            *pBypass;            // Bypass switch
+                plug::IPort            *pMono;              // Mono compatibility test
+                plug::IPort            *pMS;                // Mid/Side switch
+                plug::IPort            *pInvPhase;          // Phase inverse
+                plug::IPort            *pHpfMode;           // High-pass filter mode
+                plug::IPort            *pHpfFreq;           // High-pass filter frequency
+                plug::IPort            *pLpfMode;           // Low-pass filter mode
+                plug::IPort            *pLpfFreq;           // Low-pass filter frequency
+
+                plug::IPort            *pRate;              // Rate
+                plug::IPort            *pDepth;             // Depth
+                plug::IPort            *pFraction;          // Time fraction
+                plug::IPort            *pTempo;             // Tempo
+                plug::IPort            *pTempoSync;         // Tempo sync
+                plug::IPort            *pTimeMode;          // Time computing method
+                plug::IPort            *pReset;             // Reset phase to initial value
+
+                plug::IPort            *pFilters;           // Number of filters used
+                plug::IPort            *pFilterQuality;     // Filter quality
+                plug::IPort            *pCrossfade;         // Crossfade length
+
+                plug::IPort            *pFeedOn;            // Enable feedback
+                plug::IPort            *pFeedGain;          // Feedback gain
+                plug::IPort            *pFeedDelay;         // Feedback delay
+                plug::IPort            *pFeedPhase;         // Feedback phase
+
+                plug::IPort            *pInGain;            // Input gain
+                plug::IPort            *pDryGain;           // Dry gain
+                plug::IPort            *pWetGain;           // Wet gain
+                plug::IPort            *pDryWet;            // Dry/wet balance
+                plug::IPort            *pOutGain;           // Output gain
+
+                core::IDBuffer         *pIDisplay;          // Inline display buffer
+
+                uint8_t                *pData;              // Allocated data
+
+            protected:
+                static inline uint32_t  phase_to_int(float phase);
+                static inline void      lerp_frequencies(float *dst, float min, float max, size_t count);
+
+            protected:
+                inline float            process_allpass(float *d, float freq, float s);
+
+                void                    do_destroy();
+
+            public:
+                explicit phaser(const meta::plugin_t *meta);
+                phaser(const phaser &) = delete;
+                phaser(phaser &&) = delete;
+                virtual ~phaser() override;
+
+                phaser & operator = (const phaser &) = delete;
+                phaser & operator = (phaser &&) = delete;
+
+                virtual void            init(plug::IWrapper *wrapper, plug::IPort **ports) override;
+                virtual void            destroy() override;
+
+            public:
+                virtual void            update_sample_rate(long sr) override;
+                virtual void            update_settings() override;
+                virtual void            process(size_t samples) override;
+                virtual void            ui_activated() override;
+                virtual bool            inline_display(plug::ICanvas *cv, size_t width, size_t height) override;
+                virtual void            dump(dspu::IStateDumper *v) const override;
+        };
+
+    } /* namespace plugins */
+} /* namespace lsp */
+
+
+#endif /* PRIVATE_PLUGINS_PHASER_H_ */
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/make/configure.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/configure.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/make/configure.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/configure.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,357 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+ifneq ($(VERBOSE),1)
+.SILENT:
+endif
+
+BASEDIR                    := $(CURDIR)
+ROOTDIR                    := $(CURDIR)
+PLUGINS                    := $(BASEDIR)/plugins.mk
+TEST                       := 0
+DEBUG                      := 0
+PROFILE                    := 0
+TRACE                      := 0
+
+# Configure system settings
+include $(BASEDIR)/project.mk
+include $(BASEDIR)/make/functions.mk
+include $(BASEDIR)/make/system.mk
+include $(BASEDIR)/make/paths.mk
+include $(BASEDIR)/make/tools.mk
+include $(BASEDIR)/modules.mk
+include $(BASEDIR)/dependencies.mk
+include $(PLUGINS)
+
+ifeq ($(DEVEL),1)
+  X_URL_SUFFIX                = _RW
+else
+  X_URL_SUFFIX                = _RO
+endif
+
+# Compute the full list of dependencies
+MERGED_DEPENDENCIES        := \
+  $(DEPENDENCIES) \
+  $(TEST_DEPENDENCIES) \
+  $(PLUGIN_DEPENDENCIES) \
+  $(PLUGIN_SHARED)
+UNIQ_MERGED_DEPENDENCIES   := $(call uniq, $(MERGED_DEPENDENCIES))
+DEPENDENCIES                = $(UNIQ_MERGED_DEPENDENCIES)
+BUILD_FEATURES             := $(sort $(call subtraction,$(SUB_FEATURES),$(if $(FEATURES),$(FEATURES),$(DEFAULT_FEATURES)) $(ADD_FEATURES)))
+
+# Determine versions
+ifeq ($(findstring -devel,$(ARTIFACT_VERSION)),-devel)
+  $(foreach dep, $(DEPENDENCIES), \
+    $(eval $(dep)_BRANCH=devel) \
+  )
+  # Strip '-devel' from version
+  tmp_version :=$(shell echo "$(ARTIFACT_VERSION)" | sed s/-devel//g)
+  ARTIFACT_VERSION=$(tmp_version)
+else
+  $(foreach dep,$(DEPENDENCIES),\
+    $(eval $(dep)_BRANCH="$($(dep)_VERSION)") \
+  )
+endif
+
+define pkgconfig =
+  $(eval name=$(1))
+  
+  $(if $($(name)_NAME), \
+    $(if $($(name)_CFLAGS),,       $(eval $(name)_CFLAGS       := $(shell $(PKG_CONFIG)      --cflags "$($(name)_NAME)"))) \
+    $(if $($(name)_LDLAGS),,       $(eval $(name)_LDFLAGS      := $(shell $(PKG_CONFIG)      --libs "$($(name)_NAME)"))) \
+    \
+    $(if $(HOST_$(name)_CFLAGS),,  $(eval HOST_$(name)_CFLAGS  := $(shell $(HOST_PKG_CONFIG) --cflags "$($(name)_NAME)"))) \
+    $(if $(HOST_$(name)_LDLAGS),,  $(eval HOST_$(name)_LDFLAGS := $(shell $(HOST_PKG_CONFIG) --libs "$($(name)_NAME)"))) \
+  )
+  
+  $(if $($(name)_OBJ),,          $(eval $(name)_OBJ      :=))
+  $(if $(HOST_$(name)_OBJ),,     $(eval HOST_$(name)_OBJ :=))
+endef
+
+define libconfig =
+  $(eval name=$(1))
+  
+  $(if $($(name)_NAME), \
+    $(if $($(name)_LDLAGS),,       $(eval $(name)_LDFLAGS      := -l$($(name)_NAME))) \
+    \
+    $(if $(HOST_$(name)_LDLAGS),,  $(eval HOST_$(name)_LDFLAGS := -l$($(name)_NAME))) \
+  )
+  
+  $(if $($(name)_OBJ),,          $(eval $(name)_OBJ      :=))
+  $(if $(HOST_$(name)_OBJ),,     $(eval HOST_$(name)_OBJ :=))
+endef
+
+define optconfig =
+  $(eval name=$(1))
+  
+  $(if $($(name)_NAME), \
+    $(if $(HOST_$(name)_LDLAGS),,  $(eval HOST_$(name)_LDFLAGS := $($(name)_LDFLAGS))) \
+  )
+  
+  $(if $($(name)_OBJ),,          $(eval $(name)_OBJ      :=))
+  $(if $(HOST_$(name)_OBJ),,     $(eval HOST_$(name)_OBJ :=))
+endef
+
+define _modconfig =
+  $(eval name=$(1))
+  $(eval publisher=$(2))
+  
+  $(if $($(name)_DESC),,         $(eval $(name)_DESC         := $($(name)_DESC)))
+  $(if $($(name)_URL),,          $(eval $(name)_URL          := $($(name)_URL$(X_URL_SUFFIX))))
+  
+  $(if $($(name)_PATH),,         $(eval $(name)_PATH         := $(MODULES)/$($(name)_NAME)))
+  $(if $($(name)_INC),,          $(eval $(name)_INC          := $($(name)_PATH)/include))
+  $(if $($(name)_SRC),,          $(eval $(name)_SRC          := $($(name)_PATH)/src))
+  $(if $($(name)_TEST),,         $(eval $(name)_TEST         := $($(name)_PATH)/test))
+  $(if $($(name)_TESTING),,      $(eval $(name)_TESTING      := 0))
+  $(if $($(name)_BIN),,          $(eval $(name)_BIN          := $(TARGET_BUILDDIR)/$($(name)_NAME)))
+  $(if $($(name)_CFLAGS),,       $(eval $(name)_CFLAGS       := "$(if $($(name)_INC_OPT),$($(name)_INC_OPT) ,-I )\"$($(name)_INC)\"" -D$(name)_BUILTIN$(if $(publisher), -D$(name)_PUBLISHER)))
+  $(if $($(name)_LDLAGS),,       $(eval $(name)_LDFLAGS      :=))
+  $(if $($(name)_OBJ),,          $(eval $(name)_OBJ          := "$($(name)_BIN)/$($(name)_NAME).o"))
+  $(if $($(name)_OBJ_TEST),,     $(eval $(name)_OBJ_TEST     := "$($(name)_BIN)/$($(name)_NAME)-test.o"))
+  $(if $($(name)_MFLAGS),,       $(eval $(name)_MFLAGS       := $(if $(publisher),,"-D$(name)_BUILTIN -fvisibility=hidden")))
+  
+  $(if $(HOST_$(name)_NAME),,    $(eval HOST_$(name)_NAME    := $($(name)_NAME)))
+  $(if $(HOST_$(name)_DESC),,    $(eval HOST_$(name)_DESC    := $($(name)_DESC)))
+  $(if $(HOST_$(name)_URL),,     $(eval HOST_$(name)_URL     := $($(name)_URL$(X_URL_SUFFIX))))
+  
+  $(if $(HOST_$(name)_PATH),,    $(eval HOST_$(name)_PATH    := $(MODULES)/$($(name)_NAME)))
+  $(if $(HOST_$(name)_INC),,     $(eval HOST_$(name)_INC     := $(HOST_$(name)_PATH)/include))
+  $(if $(HOST_$(name)_SRC),,     $(eval HOST_$(name)_SRC     := $(HOST_$(name)_PATH)/src))
+  $(if $(HOST_$(name)_TEST),,    $(eval HOST_$(name)_TEST    := $(HOST_$(name)_PATH)/test))
+  $(if $(HOST_$(name)_TESTING),, $(eval HOST_$(name)_TESTING := 0))
+  $(if $(HOST_$(name)_BIN),,     $(eval HOST_$(name)_BIN     := $(HOST_BUILDDIR)/$($(name)_NAME)))
+  $(if $(HOST_$(name)_CFLAGS),,  $(eval HOST_$(name)_CFLAGS  := "$(if $($(name)_INC_OPT),$($(name)_INC_OPT) ,-I )\"$($(name)_INC)\"" -D$(name)_BUILTIN$(if $(publisher), -D$(name)_PUBLISHER)))
+  $(if $(HOST_$(name)_LDLAGS),,  $(eval HOST_$(name)_LDFLAGS :=))
+  $(if $(HOST_$(name)_OBJ),,     $(eval HOST_$(name)_OBJ     := "$(HOST_$(name)_BIN)/$($(name)_NAME).o"))
+  $(if $(HOST_$(name)_OBJ_TEST),,$(eval HOST_$(name)_OBJ_TEST:= "$(HOST_$(name)_BIN)/$($(name)_NAME)-test.o"))
+  $(if $(HOST_$(name)_MFLAGS),,  $(eval HOST_$(name)_MFLAGS  := $(if $(publisher),,"-D$(name)_BUILTIN -fvisibility=hidden")))
+endef
+
+define srcconfig =
+  $(eval name=$(1))
+  $(eval publisher=$(findstring $(ARTIFACT_NAME),$($(name)_NAME)))
+  $(eval $(call _modconfig,$(name),$(publisher)))
+endef 
+
+define binconfig =
+  $(eval name=$(1))
+  $(eval publisher=1)
+  $(eval $(call _modconfig,$(name),$(publisher)))
+endef
+
+define hdrconfig =
+  $(eval name=$(1))
+  $(eval publisher=$(findstring $(ARTIFACT_NAME),$($(name)_NAME)))
+  
+  $(if $($(name)_DESC),,         $(eval $(name)_DESC         := $($(name)_DESC)))
+  $(if $($(name)_URL),,          $(eval $(name)_URL          := $($(name)_URL$(X_URL_SUFFIX))))
+  
+  $(if $($(name)_PATH),,         $(eval $(name)_PATH         := $(MODULES)/$($(name)_NAME)))
+  $(if $($(name)_INC),,          $(eval $(name)_INC          := $($(name)_PATH)/include))
+  $(if $($(name)_TESTING),,      $(eval $(name)_TESTING      := 0))
+  $(if $($(name)_CFLAGS),,       $(eval $(name)_CFLAGS       := "$(if $($(name)_INC_OPT),$($(name)_INC_OPT) ,-I )\"$($(name)_INC)\""$(if $(publisher), "-D$(name)_PUBLISHER")))
+  $(if $($(name)_MFLAGS),,       $(eval $(name)_MFLAGS       := "-D$(name)_BUILTIN -fvisibility=hidden"))
+
+  $(if $(HOST_$(name)_NAME),,    $(eval HOST_$(name)_NAME    := $($(name)_NAME)))
+  $(if $(HOST_$(name)_DESC),,    $(eval HOST_$(name)_DESC    := $($(name)_DESC)))
+  $(if $(HOST_$(name)_URL),,     $(eval HOST_$(name)_URL     := $($(name)_URL$(X_URL_SUFFIX))))
+  
+  $(if $(HOST_$(name)_PATH),,    $(eval HOST_$(name)_PATH    := $(MODULES)/$($(name)_NAME)))
+  $(if $(HOST_$(name)_INC),,     $(eval HOST_$(name)_INC     := $(HOST_$(name)_PATH)/include))
+  $(if $(HOST_$(name)_TESTING),, $(eval HOST_$(name)_TESTING := 0))
+  $(if $(HOST_$(name)_CFLAGS),,  $(eval HOST_$(name)_CFLAGS  := "$(if $($(name)_INC_OPT),$($(name)_INC_OPT) ,-I )\"$(HOST_$(name)_INC)\""$(if $(publisher), "-D$(name)_PUBLISHER")))
+  $(if $(HOST_$(name)_MFLAGS),,  $(eval HOST_$(name)_MFLAGS  := "-D$(name)_BUILTIN -fvisibility=hidden"))
+endef
+
+define plugconfig =
+  $(eval name=$(1))
+  $(eval publisher=$(findstring $(ARTIFACT_NAME),$($(name)_NAME)))
+  
+  $(if $($(name)_DESC),,            $(eval $(name)_DESC             := $($(name)_DESC)))
+  $(if $($(name)_URL),,             $(eval $(name)_URL              := $($(name)_URL$(X_URL_SUFFIX))))
+  $(if $($(name)_TESTING),,         $(eval $(name)_TESTING          := 0))
+
+  $(if $($(name)_PATH),,            $(eval $(name)_PATH             := $(MODULES)/$($(name)_NAME)))    
+  $(if $($(name)_INC),,             $(eval $(name)_INC              := $($(name)_PATH)/include))
+  $(if $($(name)_SRC),,             $(eval $(name)_SRC              := $($(name)_PATH)/src))
+  $(if $($(name)_TEST),,            $(eval $(name)_TEST             := $($(name)_PATH)/test))
+  $(if $($(name)_BIN),,             $(eval $(name)_BIN              := $(TARGET_BUILDDIR)/$($(name)_NAME)))
+  $(if $($(name)_CFLAGS),,          $(eval $(name)_CFLAGS           := "-I\"$($(name)_INC)\"" -D$(name)_BUILTIN$(if $(publisher), -D$(name)_PUBLISHER)))
+  $(if $($(name)_LDLAGS),,          $(eval $(name)_LDFLAGS          :=))
+  $(if $($(name)_OBJ_META),,        $(eval $(name)_OBJ_META         := "$($(name)_BIN)/$($(name)_NAME)-meta.o"))
+  $(if $($(name)_OBJ_DSP),,         $(eval $(name)_OBJ_DSP          := "$($(name)_BIN)/$($(name)_NAME)-dsp.o"))
+  $(if $($(name)_OBJ_UI),,          $(eval $(name)_OBJ_UI           := "$($(name)_BIN)/$($(name)_NAME)-ui.o"))
+  $(if $($(name)_OBJ_TEST),,        $(eval $(name)_OBJ_TEST         := "$($(name)_BIN)/$($(name)_NAME)-test.o"))
+  $(if $($(name)_MFLAGS),,          $(eval $(name)_MFLAGS           := $(if $(publisher),,"-D$(name)_BUILTIN -fvisibility=hidden")))
+
+  $(if $(HOST_$(name)_NAME),,       $(eval HOST_$(name)_NAME        := $($(name)_NAME)))
+  $(if $(HOST_$(name)_DESC),,       $(eval HOST_$(name)_DESC        := $($(name)_DESC)))
+  
+  $(if $(HOST_$(name)_PATH),,       $(eval HOST_$(name)_PATH        := $(MODULES)/$($(name)_NAME)))
+  $(if $(HOST_$(name)_INC),,        $(eval HOST_$(name)_INC         := $(HOST_$(name)_PATH)/include))
+  $(if $(HOST_$(name)_SRC),,        $(eval HOST_$(name)_SRC         := $(HOST_$(name)_PATH)/src))
+  $(if $(HOST_$(name)_TEST),,       $(eval HOST_$(name)_TEST        := $(HOST_$(name)_PATH)/test))
+  $(if $(HOST_$(name)_BIN),,        $(eval HOST_$(name)_BIN         := $(HOST_BUILDDIR)/$($(name)_NAME)))
+  $(if $(HOST_$(name)_CFLAGS),,     $(eval HOST_$(name)_CFLAGS      := "-I\"$(HOST_$(name)_INC)\"" -D$(name)_BUILTIN$(if $(publisher), -D$(name)_PUBLISHER)))
+  $(if $(HOST_$(name)_LDLAGS),,     $(eval HOST_$(name)_LDFLAGS     :=))
+  $(if $(HOST_$(name)_OBJ_META),,   $(eval HOST_$(name)_OBJ_META    := "$(HOST_$(name)_BIN)/$($(name)_NAME)-meta.o"))
+  $(if $(HOST_$(name)_OBJ_DSP),,    $(eval HOST_$(name)_OBJ_DSP     := "$(HOST_$(name)_BIN)/$($(name)_NAME)-dsp.o"))
+  $(if $(HOST_$(name)_OBJ_UI),,     $(eval HOST_$(name)_OBJ_UI      := "$(HOST_$(name)_BIN)/$($(name)_NAME)-ui.o"))
+  $(if $(HOST_$(name)_OBJ_SHARED),, $(eval HOST_$(name)_OBJ_SHARED  := "$(HOST_$(name)_BIN)/$($(name)_NAME)-shared.o"))
+  $(if $(HOST_$(name)_OBJ_TEST),,   $(eval HOST_$(name)_OBJ_TEST    := "$(HOST_$(name)_BIN)/$($(name)_NAME)-test.o"))
+  $(if $(HOST_$(name)_MFLAGS),,     $(eval HOST_$(name)_MFLAGS      := $(if $(publisher),,"-D$(name)_BUILTIN -fvisibility=hidden")))
+endef
+
+define vardef =
+  $(eval name = $(1))
+  # Override variables if they are not defined
+  $(if $(findstring pkg, $($(name)_TYPE)), $(eval $(call pkgconfig,  $(name))))
+  $(if $(findstring src, $($(name)_TYPE)), $(eval $(call srcconfig,  $(name))))
+  $(if $(findstring hdr, $($(name)_TYPE)), $(eval $(call hdrconfig,  $(name))))
+  $(if $(findstring lib, $($(name)_TYPE)), $(eval $(call libconfig,  $(name))))
+  $(if $(findstring bin, $($(name)_TYPE)), $(eval $(call binconfig,  $(name))))
+  $(if $(findstring opt, $($(name)_TYPE)), $(eval $(call optconfig,  $(name))))
+  $(if $(findstring plug,$($(name)_TYPE)), $(eval $(call plugconfig, $(name))))
+endef
+
+# Define predefined variables
+ifndef ARTIFACT_TYPE
+  ARTIFACT_TYPE              := src
+endif
+
+ifndef $(ARTIFACT_ID)_NAME
+  $(ARTIFACT_ID)_NAME        := $(ARTIFACT_NAME)
+endif
+ifndef $(ARTIFACT_ID)_TYPE
+  $(ARTIFACT_ID)_TYPE        := $(ARTIFACT_TYPE)
+endif
+ifndef $(ARTIFACT_ID)_DESC
+  $(ARTIFACT_ID)_DESC        := $(ARTIFACT_DESC)
+endif
+ifndef $(ARTIFACT_ID)_VERSION 
+  $(ARTIFACT_ID)_VERSION     := $(ARTIFACT_VERSION)
+endif
+ifndef $(ARTIFACT_ID)_PATH
+  $(ARTIFACT_ID)_PATH        := $(BASEDIR)
+endif
+ifndef HOST_$(ARTIFACT_ID)_PATH
+  HOST_$(ARTIFACT_ID)_PATH   := $(BASEDIR)
+endif
+
+ROOT_ARTIFACT_ID           := $(ARTIFACT_ID)
+$(ARTIFACT_ID)_TESTING      = $(TEST)
+
+OVERALL_DEPS := $(call uniq,$(DEPENDENCIES) $(ARTIFACT_ID))
+__tmp := $(foreach dep,$(OVERALL_DEPS),$(call vardef, $(dep)))
+
+CONFIG_VARS = \
+  $(PATH_VARS) \
+  $(COMMON_VARS) \
+  $(TOOL_VARS) \
+  $(foreach name, $(OVERALL_DEPS), \
+    $(name)_NAME \
+    $(name)_DESC \
+    $(name)_VERSION \
+    $(name)_TYPE \
+    $(name)_URL \
+    $(name)_BRANCH \
+    \
+    $(name)_PATH \
+    $(name)_INC \
+    $(name)_SRC \
+    $(name)_TEST \
+    $(name)_TESTING \
+    $(name)_BIN \
+    $(name)_CFLAGS \
+    $(name)_MFLAGS \
+    $(name)_LDFLAGS \
+    $(name)_OBJ \
+    $(name)_OBJ_META \
+    $(name)_OBJ_DSP \
+    $(name)_OBJ_UI \
+    $(name)_OBJ_TEST \
+    \
+    HOST_$(name)_NAME \
+    HOST_$(name)_DESC \
+    HOST_$(name)_PATH \
+    HOST_$(name)_INC \
+    HOST_$(name)_SRC \
+    HOST_$(name)_TEST \
+    HOST_$(name)_TESTING \
+    HOST_$(name)_BIN \
+    HOST_$(name)_CFLAGS \
+    HOST_$(name)_MFLAGS \
+    HOST_$(name)_LDFLAGS \
+    HOST_$(name)_OBJ \
+    HOST_$(name)_OBJ_META \
+    HOST_$(name)_OBJ_DSP \
+    HOST_$(name)_OBJ_UI \
+    HOST_$(name)_OBJ_TEST \
+  )
+
+.DEFAULT_GOAL      := config
+.PHONY: config prepare help
+.PHONY: $(CONFIG_VARS)
+
+prepare:
+	echo "Configuring build..."
+	echo "# Project settings" > "$(CONFIG)"
+
+$(CONFIG_VARS): prepare
+	echo "$(@)=$($(@))" >> "$(CONFIG)"
+
+config: $(CONFIG_VARS)
+	echo "Host architecture: $(HOST_ARCHITECTURE_FAMILY)/$(HOST_ARCHITECTURE) ($(HOST_ARCHITECTURE_CFLAGS))"
+	echo "Architecture:      $(ARCHITECTURE_FAMILY)/$(ARCHITECTURE) ($(ARCHITECTURE_CFLAGS))"
+	echo "Features:          $(BUILD_FEATURES)"
+	echo "Configured OK"
+
+help: | pathvars toolvars sysvars
+	echo ""
+	echo "List of variables for each dependency:"
+	echo "  <ARTIFACT>_BIN            location to put all binaries when building artifact"
+	echo "  <ARTIFACT>_BRANCH         git branch used to checkout source code"
+	echo "  <ARTIFACT>_CFLAGS         C/C++ flags to access headers of the artifact"
+	echo "  <ARTIFACT>_DESC           Full description of the artifact"
+	echo "  <ARTIFACT>_INC            path to include files of the artifact"
+	echo "  <ARTIFACT>_LDFLAGS        linker flags to link with artifact"
+	echo "  <ARTIFACT>_MFLAGS         artifact-specific compilation flags"
+	echo "  <ARTIFACT>_NAME           the artifact name used in pathnames"
+	echo "  <ARTIFACT>_OBJ            path to output object file for artifact"
+	echo "  <ARTIFACT>_PATH           location of the source code of the artifact"
+	echo "  <ARTIFACT>_SRC            path to source code files of the artifact"
+	echo "  <ARTIFACT>_TEST           location of test files of the artifact"
+	echo "  <ARTIFACT>_TYPE           artifact usage type"
+	echo "                            - bin  - binaries build from source code"
+	echo "                            - hdr  - use headers only from git"
+	echo "                            - lib  - use system headers and -l<libname> flags"
+	echo "                            - opt  - use optional configuration"
+	echo "                            - pkg  - use pkgconfig for configuration"
+	echo "                            - plug - use source as plugin for LSP plugin framework"
+	echo "                            - src  - use sources and headers from git"
+	echo "  <ARTIFACT>_URL            location of the artifact git repoisitory"
+	echo "  <ARTIFACT>_VERSION        version of the artifact used for building"
+	echo ""
+	echo "Artifacts used for build:"
+	echo "  $(DEPENDENCIES)"
+	echo ""
+	echo "Plugins used for build:"
+	echo "  $(PLUGINS_DEPENDENCIES)"
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/make/functions.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/functions.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/make/functions.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/functions.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,70 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+# Deduplicates all strings in the list
+# $(call uniq, <list>)
+# $(call uniq, $(DEPENDENCIES))
+uniq                    = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
+
+# Recursively lookup directory for specific file pattern
+# $(call rwildcard, <path>, <file-name-pattern>)
+# $(call rwildcard, main, *.cpp)
+rwildcard               = $(foreach d,$(wildcard $1/*),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d))
+
+# Fetch different flags from symbolic dependencies
+# $(call query, <field>, <list>)
+# $(call query, CFLAGS, $(DEPENDENCIES))
+query                   = $(foreach d,$(call uniq, $2),$($(d)_$(strip $1)))
+
+# Fetch conditionally if dependency field is present
+# $(call dquery, <field>, <list>)
+# $(call dquery, OBJ, $(DEPENDENCIES))
+dquery                  = $(foreach d,$(call uniq, $2),$(if $($(d)_$(strip $1)),$(d)))
+
+# Fetch different flags from symbolic dependencies
+# $(call cquery, <test-field>, <return-field>, <list>)
+# $(call cquery, OBJ_META, BIN, $(DEPENDENCIES))
+cquery                  = $(foreach d,$(call uniq, $3),$(if $($(d)_$(strip $1)),$($(d)_$(strip $2))))
+
+# Find intersection between two sets
+# $(call intersection, list1, list2)
+intersection            = $(sort $(foreach v,$1,$(if $(findstring $(v),$2),$(v))))
+
+# Subtract the first set from second set
+# $(call subtraction, list1, list2)
+subtraction             = $(sort $(foreach v,$2,$(if $(findstring $(v),$1),,$(v))))
+
+# Check feature presence in list
+# $(call fcheck, features-to-check, all-feature-list, action-if-enabled, action-if-disabled)
+fcheck                  = $(if $(call intersection,$1,$2),$3,$4)
+
+# Fetch different versions from version string
+# $(call vmajor, <version-string>)
+vmajor                  = $(shell echo "$(strip $1)" | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+)(-(.*))?/\1/')
+vminor                  = $(shell echo "$(strip $1)" | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+)(-(.*))?/\2/')
+vmicro                  = $(shell echo "$(strip $1)" | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+)(-(.*))?/\3/')
+vbranch                 = $(shell echo "$(strip $1)" | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+)(-(.*))?/\5/')
+
+ifeq ("$(MSYSTEM)","")
+  pathconv                = $1
+else
+  pathconv                = $(shell cygpath -w "$1")
+endif
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/make/ld-windows.script 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/ld-windows.script
--- 1.2.21-5/modules/lsp-plugins-phaser/make/ld-windows.script	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/ld-windows.script	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,246 @@
+/* Script for ld -r: link without relocation */
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT(default)
+SECTIONS
+{
+  .text  :
+  {
+    *(.text)
+    /* ??? Why is .gcc_exc here?  */
+  }
+  /* The Cygwin32 library uses a section to avoid copying certain data
+     on fork.  This used to be named ".data".  The linker used
+     to include this between __data_start__ and __data_end__, but that
+     breaks building the cygwin32 dll.  Instead, we name the section
+     ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
+  .data  :
+  {
+    *(.data)
+    KEEP(*(.jcr))
+  }
+  .rdata  :
+  {
+    *(.rdata)
+  }
+  .eh_frame  :
+  {
+    KEEP(*(.eh_frame))
+  }
+  .pdata  :
+  {
+    KEEP(*(.pdata))
+  }
+  .bss  :
+  {
+    *(.bss)
+    *(COMMON)
+  }
+  .edata  :
+  {
+    *(.edata)
+  }
+  .drectve  :
+  {
+    *(.drectve)
+  }
+  /DISCARD/ :
+  {
+    *(.debug$S)
+    *(.debug$T)
+    *(.debug$F)
+  }
+  .idata  :
+  {
+    /* This cannot currently be handled with grouped sections.
+	See pe.em:sort_sections.  */
+  }
+  .CRT  :
+  {
+    /* ___crt_xl_end__ is defined in the TLS Directory support code */
+  }
+  /* Windows TLS expects .tls$AAA to be at the start and .tls$ZZZ to be
+     at the end of section.  This is important because _tls_start MUST
+     be at the beginning of the section to enable SECREL32 relocations with TLS
+     data.  */
+  .tls  :
+  {
+    *(.tls)
+  }
+  .endjunk  :
+  {
+    /* end is deprecated, don't use it */
+  }
+  .rsrc  : SUBALIGN(4)
+  {
+    *(.rsrc)
+  }
+  .reloc  :
+  {
+    *(.reloc)
+  }
+  .stab   :
+  {
+    *(.stab)
+  }
+  .stabstr   :
+  {
+    *(.stabstr)
+  }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section.  Unlike other targets that fake this by putting the
+     section VMA at 0, the PE format will not allow it.  */
+  /* DWARF 1.1 and DWARF 2.  */
+  .debug_aranges   :
+  {
+    *(.debug_aranges)
+  }
+  .zdebug_aranges   :
+  {
+    *(.zdebug_aranges)
+  }
+  .debug_pubnames   :
+  {
+    *(.debug_pubnames)
+  }
+  .zdebug_pubnames   :
+  {
+    *(.zdebug_pubnames)
+  }
+  .debug_pubtypes   :
+  {
+    *(.debug_pubtypes)
+  }
+  .zdebug_pubtypes   :
+  {
+    *(.zdebug_pubtypes)
+  }
+  /* DWARF 2.  */
+  .debug_info   :
+  {
+    *(.debug_info)
+  }
+  .zdebug_info   :
+  {
+    *(.zdebug_info)
+  }
+  .debug_abbrev   :
+  {
+    *(.debug_abbrev)
+  }
+  .zdebug_abbrev   :
+  {
+    *(.zdebug_abbrev)
+  }
+  .debug_line   :
+  {
+    *(.debug_line)
+  }
+  .zdebug_line   :
+  {
+    *(.zdebug_line)
+  }
+  .debug_frame   :
+  {
+    *(.debug_frame*)
+  }
+  .zdebug_frame   :
+  {
+    *(.zdebug_frame*)
+  }
+  .debug_str   :
+  {
+    *(.debug_str)
+  }
+  .zdebug_str   :
+  {
+    *(.zdebug_str)
+  }
+  .debug_loc   :
+  {
+    *(.debug_loc)
+  }
+  .zdebug_loc   :
+  {
+    *(.zdebug_loc)
+  }
+  .debug_macinfo   :
+  {
+    *(.debug_macinfo)
+  }
+  .zdebug_macinfo   :
+  {
+    *(.zdebug_macinfo)
+  }
+  /* SGI/MIPS DWARF 2 extensions.  */
+  .debug_weaknames   :
+  {
+    *(.debug_weaknames)
+  }
+  .zdebug_weaknames   :
+  {
+    *(.zdebug_weaknames)
+  }
+  .debug_funcnames   :
+  {
+    *(.debug_funcnames)
+  }
+  .zdebug_funcnames   :
+  {
+    *(.zdebug_funcnames)
+  }
+  .debug_typenames   :
+  {
+    *(.debug_typenames)
+  }
+  .zdebug_typenames   :
+  {
+    *(.zdebug_typenames)
+  }
+  .debug_varnames   :
+  {
+    *(.debug_varnames)
+  }
+  .zdebug_varnames   :
+  {
+    *(.zdebug_varnames)
+  }
+  .debug_macro   :
+  {
+    *(.debug_macro)
+  }
+  .zdebug_macro   :
+  {
+    *(.zdebug_macro)
+  }
+  /* DWARF 3.  */
+  .debug_ranges   :
+  {
+    *(.debug_ranges)
+  }
+  .zdebug_ranges   :
+  {
+    *(.zdebug_ranges)
+  }
+  /* DWARF 4.  */
+  .debug_types   :
+  {
+    *(.debug_types)
+  }
+  .zdebug_types   :
+  {
+    *(.zdebug_types)
+  }
+  /* For Go and Rust.  */
+  .debug_gdb_scripts   :
+  {
+    *(.debug_gdb_scripts)
+  }
+  .zdebug_gdb_scripts   :
+  {
+    *(.zdebug_gdb_scripts)
+  }
+}
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/make/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/modules.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/make/modules.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/modules.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,119 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+ifneq ($(VERBOSE),1)
+.SILENT:
+endif
+
+BASEDIR                := $(CURDIR)
+CONFIG                 := $(BASEDIR)/.config.mk
+
+include $(BASEDIR)/project.mk
+include $(BASEDIR)/make/functions.mk
+ifeq ($(TREE),1)
+  include $(BASEDIR)/make/system.mk
+  include $(BASEDIR)/make/tools.mk
+  include $(BASEDIR)/modules.mk
+else
+  -include $(CONFIG)
+endif
+include $(BASEDIR)/dependencies.mk
+include $(BASEDIR)/plugins.mk
+
+MERGED_DEPENDENCIES        := \
+  $(DEPENDENCIES) \
+  $(TEST_DEPENDENCIES) \
+  $(PLUGIN_DEPENDENCIES) \
+  $(PLUGIN_SHARED)
+UNIQ_MERGED_DEPENDENCIES   := $(filter-out $(ARTIFACT_ID),$(call uniq, $(MERGED_DEPENDENCIES)))
+UNIQ_ALL_DEPENDENCIES      := $(filter-out $(ARTIFACT_ID),$(call uniq, $(ALL_DEPENDENCIES) $(PLUGIN_DEPENDENCIES) $(PLUGIN_SHARED)))
+
+# Find the proper branch of the GIT repository
+MODULES                    ?= $(BASEDIR)/modules
+GIT                        ?= git
+
+ifeq ($(DEVEL),1)
+  X_URL_SUFFIX                = _RW
+else
+  X_URL_SUFFIX                = _RO
+endif
+
+ifeq ($(TREE),1)
+  $(foreach dep,$(UNIQ_ALL_DEPENDENCIES), \
+    $(eval $(dep)_URL=$($(dep)_URL$(X_URL_SUFFIX))) \
+  )
+  
+  ifeq ($(findstring -devel,$(ARTIFACT_VERSION)),-devel)
+    $(foreach dep, $(UNIQ_ALL_DEPENDENCIES), \
+      $(eval $(dep)_BRANCH=devel) \
+      $(eval $(dep)_PATH=$(MODULES)/$($(dep)_NAME)) \
+    )
+  else
+    $(foreach dep, $(UNIQ_ALL_DEPENDENCIES), \
+      $(eval $(dep)_BRANCH="$($(dep)_VERSION)") \
+      $(eval $(dep)_PATH=$(MODULES)/$($(dep)_NAME)) \
+    )
+  endif
+endif
+
+# Form list of modules, exclude all modules that have 'system' version
+SRC_MODULES         = $(foreach dep, $(UNIQ_MERGED_DEPENDENCIES), $(if $(findstring src,$($(dep)_TYPE)),$(dep)))
+HDR_MODULES         = $(foreach dep, $(UNIQ_MERGED_DEPENDENCIES), $(if $(findstring hdr,$($(dep)_TYPE)),$(dep)))
+BIN_MODULES         = $(foreach dep, $(UNIQ_MERGED_DEPENDENCIES), $(if $(findstring bin,$($(dep)_TYPE)),$(dep)))
+PLUG_MODULES        = $(foreach dep, $(UNIQ_MERGED_DEPENDENCIES), $(if $(findstring plug,$($(dep)_TYPE)),$(dep)))
+ALL_SRC_MODULES     = $(foreach dep, $(UNIQ_ALL_DEPENDENCIES), $(if $(findstring src,$($(dep)_TYPE)),$(dep)))
+ALL_HDR_MODULES     = $(foreach dep, $(UNIQ_ALL_DEPENDENCIES), $(if $(findstring hdr,$($(dep)_TYPE)),$(dep)))
+ALL_BIN_MODULES     = $(foreach dep, $(UNIQ_ALL_DEPENDENCIES), $(if $(findstring bin,$($(dep)_TYPE)),$(dep)))
+ALL_PLUG_MODULES    = $(foreach dep, $(UNIQ_ALL_DEPENDENCIES), $(if $(findstring plug,$($(dep)_TYPE)),$(dep)))
+ALL_PATHS           = $(foreach dep, $(ALL_SRC_MODULES) $(ALL_HDR_MODULES) $(ALL_BIN_MODULES) $(ALL_PLUG_MODULES), $($(dep)_PATH))
+
+# Branches
+.PHONY: $(ALL_SRC_MODULES) $(ALL_HDR_MODULES) $(ALL_BIN_MODULES) $(ALL_PATHS)
+.PHONY: fetch prune clean
+
+$(ALL_SRC_MODULES) $(ALL_HDR_MODULES) $(ALL_BIN_MODULES) $(ALL_PLUG_MODULES):
+	echo "Cloning $($(@)_URL) -> $($(@)_PATH) [$($(@)_BRANCH)]"
+	test -f "$($(@)_PATH)/.git/config" || $(GIT) clone "$($(@)_URL)" "$($(@)_PATH)"
+	mkdir -p $(dir $($(@)_PATH))
+	$(GIT) -C "$($(@)_PATH)" reset --hard
+	$(GIT) -C "$($(@)_PATH)" fetch origin --force --prune --prune-tags
+	$(GIT) -C "$($(@)_PATH)" fetch origin 'refs/tags/*:refs/tags/*' --force
+	if $(GIT) -C "$($(@)_PATH)" rev-parse -q --verify "origin/$($(@)_BRANCH)" >/dev/null; then \
+	  $(GIT) -c advice.detachedHead=false -C "$($(@)_PATH)" checkout -B "$($(@)_BRANCH)" "origin/$($(@)_BRANCH)" >/dev/null; \
+	elif $(GIT) -C "$($(@)_PATH)" rev-parse -q --verify "refs/tags/$($(@)_BRANCH)" >/dev/null; then \
+	  $(GIT) -c advice.detachedHead=false -C "$($(@)_PATH)" checkout "refs/tags/$($(@)_BRANCH)"; \
+	elif $(GIT) -C "$($(@)_PATH)" rev-parse -q --verify "origin/$($(@)_NAME)-$($(@)_BRANCH)" >/dev/null; then \
+	  $(GIT) -c advice.detachedHead=false -C "$($(@)_PATH)" checkout -B "$($(@)_NAME)-$($(@)_BRANCH)" "origin/$($(@)_NAME)-$($(@)_BRANCH)"; \
+	else \
+	  $(GIT) -c advice.detachedHead=false -C "$($(@)_PATH)" checkout "refs/tags/$($(@)_NAME)-$($(@)_BRANCH)"; \
+	fi
+
+fetch: $(SRC_MODULES) $(HDR_MODULES) $(BIN_MODULES) $(PLUG_MODULES)
+
+tree: $(ALL_SRC_MODULES) $(ALL_HDR_MODULES) $(ALL_BIN_MODULES) $(ALL_PLUG_MODULES)
+
+clean:
+	echo rm -rf "$($(ARTIFACT_VARS)_BIN)/$(ARTIFACT_NAME)"
+	-rm -rf "$($(ARTIFACT_VARS)_BIN)/$(ARTIFACT_NAME)"
+
+prune:
+	echo "Removing $(notdir $(MODULES))"
+	-rm -rf $(MODULES)
+	
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/make/paths.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/paths.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/make/paths.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/paths.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,112 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+# Installation prefix
+ifndef PREFIX
+  ifeq ($(PLATFORM),Windows)
+    PREFIX                     := $(BASEDIR)/INSTALL
+  else ifeq ($(CROSS_COMPILE),1)
+    PREFIX                     := $(BASEDIR)/INSTALL
+  else
+    PREFIX                     := /usr/local
+  endif
+endif
+
+# Path to configuration
+ifndef ETCDIR
+  ifeq ($(PLATFORM),Windows)
+    ETCDIR                     := $(PREFIX)/etc
+  else
+    ETCDIR                     := /etc
+  endif
+endif
+
+LIBDIR                     := $(PREFIX)/lib
+BINDIR                     := $(PREFIX)/bin
+INCDIR                     := $(PREFIX)/include
+BUILDDIR                   := $(BASEDIR)/.build
+TARGET_BUILDDIR            := $(BUILDDIR)/target
+ifeq ($(CROSS_COMPILE),1)
+  HOST_BUILDDIR              := $(BUILDDIR)/host
+else
+  HOST_BUILDDIR              := $(TARGET_BUILDDIR)
+endif
+MODULES                    := $(BASEDIR)/modules
+CONFIG                     := $(BASEDIR)/.config.mk
+
+# Library prefix
+ifndef LIBDIR
+  LIBDIR                   := $(PREFIX)/lib
+endif
+
+# Binaries prefix
+ifndef BINDIR
+  BINDIR                   := $(PREFIX)/bin
+endif
+
+# Binaries prefix
+ifndef INCDIR
+  INCDIR                   := $(PREFIX)/include
+endif
+
+# Shared resources
+ifndef SHAREDDIR
+  ifeq ($(PLATFORM),Haiku)
+    SHAREDDIR                     := $(PREFIX)/data
+  else
+    SHAREDDIR                     := $(PREFIX)/share
+  endif
+endif
+
+# Temporary directory
+ifndef TEMPDIR
+  ifeq ($(PLATFORM),Windows)
+    TEMPDIR                  := $(TEMP)
+  else
+    TEMPDIR                  := /tmp
+  endif
+endif
+
+# Set-up list of common variables
+PATH_VARS = \
+	BINDIR \
+	BUILDDIR \
+	ETCDIR \
+	INCDIR \
+	LIBDIR \
+	PREFIX \
+	ROOTDIR \
+	SHAREDDIR \
+	TEMPDIR
+
+.PHONY: pathvars
+
+pathvars:
+	echo "List of available path variables:"
+	echo "  BINDIR                    location of the binaries"
+	echo "  BUILDDIR                  location of the build directory"
+	echo "  ETCDIR                    location of system configuration files"
+	echo "  INCDIR                    location of the header files"
+	echo "  LIBDIR                    location of the library"
+	echo "  PREFIX                    installation prefix for binary files"
+	echo "  SHAREDDIR                 location of the shared files"
+	echo "  TEMPDIR                   location of temporary directory"
+
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/make/system.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/system.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/make/system.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/system.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,258 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+# Detect operating system
+ifndef PLATFORM
+  ifeq ($(findstring Windows,$(OS)),Windows)
+    BUILD_SYSTEM   := Windows
+  else
+    BUILD_SYSTEM   := $(shell uname -s 2>/dev/null || echo "Unknown")
+  endif
+  
+  PLATFORM       := Unknown
+
+  ifeq ($(BUILD_SYSTEM),Windows)
+    PLATFORM       := Windows
+  else ifeq ($(findstring OpenBSD,$(BUILD_SYSTEM)),OpenBSD)
+    PLATFORM       := OpenBSD
+  else ifeq ($(findstring BSD,$(BUILD_SYSTEM)),BSD)
+    PLATFORM       := BSD
+  else ifeq ($(findstring Linux,$(BUILD_SYSTEM)),Linux)
+    PLATFORM       := Linux
+  else ifeq ($(findstring SunOS,$(BUILD_SYSTEM)),SunOS)
+    PLATFORM       := Solaris
+  else ifeq ($(findstring Darwin,$(BUILD_SYSTEM)),Darwin)
+    PLATFORM       := MacOS
+  else ifeq ($(findstring Haiku,$(BUILD_SYSTEM)),Haiku)
+    PLATFORM       := Haiku
+  endif
+endif
+
+# Detect system processor architecture
+ifeq ($(PLATFORM),Windows)
+  HOST_BUILD_ARCH        := $(PROCESSOR_ARCHITECTURE)
+else
+  HOST_BUILD_ARCH        := $(shell uname -m)
+endif
+BUILD_ARCH          := $(if $(ARCHITECTURE),$(ARCHITECTURE),$(HOST_BUILD_ARCH))
+
+ifeq ($(PLATFORM),Linux)
+  OBJ_LDFLAGS_X86       =  -m elf_i386
+  OBJ_LDFLAGS_X86_64    =  -m elf_x86_64
+else ifeq ($(PLATFORM),BSD)
+  OBJ_LDFLAGS_X86       =  -m elf_i386
+  OBJ_LDFLAGS_X86_64    =  -m elf_x86_64
+else ifeq ($(PLATFORM),Windows)
+  OBJ_LDFLAGS_X86       =  -m i386pe
+  OBJ_LDFLAGS_X86_64    =  -m i386pep
+endif
+
+# Set actual architecture for HOST and TARGET builds
+# The current architecture can be obtained by: gcc -Q --help=target
+define detect_architecture =
+  ifeq ($(1),armel)
+    $(2)_NAME        = $(1)
+    $(2)_FAMILY      = generic
+    $(2)_CFLAGS     :=
+  else ifeq ($(1),armhf)
+    $(2)_NAME        = arm32
+    $(2)_FAMILY      = arm32
+    $(2)_CFLAGS     := -march=armv7-a+fp -marm
+  else ifeq ($(patsubst armv6%,armv6,$(1)),armv6)
+    $(2)_NAME        = arm32
+    $(2)_FAMILY      = arm32
+    $(2)_CFLAGS     := -march=armv6 -marm
+  else ifeq ($(patsubst armv7ve%,armv7ve,$(1)),armv7ve)
+    $(2)_NAME        = arm32
+    $(2)_FAMILY      = arm32
+    $(2)_CFLAGS     := -march=armv7ve -marm
+  else ifeq ($(patsubst armv7%,armv7,$(1)),armv7)
+    $(2)_NAME        = arm32
+    $(2)_FAMILY      = arm32
+    $(2)_CFLAGS     := -march=armv7-a -marm
+  else ifeq ($(patsubst armv8%,armv8,$(1)),armv8)
+    $(2)_NAME        = arm32
+    $(2)_FAMILY      = arm32
+    $(2)_CFLAGS     := -march=armv7-a -marm
+  else ifeq ($(patsubst aarch64%,aarch64,$(1)),aarch64)
+    $(2)_NAME        = aarch64
+    $(2)_FAMILY      = aarch64
+    $(2)_CFLAGS     := -march=armv8-a
+  else ifeq ($(1),arm64)
+    $(2)_NAME        = aarch64
+    $(2)_FAMILY      = aarch64
+    $(2)_CFLAGS     := -march=armv8-a
+  else ifeq ($(1),arm32)
+    $(2)_NAME        = arm32
+    $(2)_FAMILY      = arm32
+    $(2)_CFLAGS     := -march=armv6 -marm
+  else ifeq ($(1),arm)
+    $(2)_NAME        = arm32
+    $(2)_FAMILY      = arm32
+    $(2)_CFLAGS     := -march=armv6 -marm
+  else ifeq ($(patsubst %x86_64%,x86_64,$(1)),x86_64)
+    $(2)_NAME        = x86_64
+    $(2)_FAMILY      = x86_64
+    $(2)_CFLAGS     := -march=x86-64 -m64
+    $(2)_LDFLAGS    := $(OBJ_LDFLAGS_X86_64)
+  else ifeq ($(patsubst %amd64%,amd64,$(1)),amd64)
+    $(2)_NAME        = x86_64
+    $(2)_FAMILY      = x86_64
+    $(2)_CFLAGS     := -march=x86-64 -m64
+    $(2)_LDFLAGS    := $(OBJ_LDFLAGS_X86_64)
+  else ifeq ($(patsubst %AMD64%,AMD64,$(1)),AMD64)
+    $(2)_NAME        = x86_64
+    $(2)_FAMILY      = x86_64
+    $(2)_CFLAGS     := -march=x86-64 -m64
+    $(2)_LDFLAGS    := $(OBJ_LDFLAGS_X86_64)
+  else ifeq ($(1),i86pc)
+    $(2)_NAME        = x86_64
+    $(2)_FAMILY      = x86_64
+    $(2)_CFLAGS     := -march=x86-64 -m64
+    $(2)_LDFLAGS    := $(OBJ_LDFLAGS_X86_64)
+  else ifeq ($(patsubst %i686%,i686,$(1)),i686)
+    $(2)_NAME        = i686
+    $(2)_FAMILY      = ia32
+    $(2)_CFLAGS     := -march=i686 -m32
+    $(2)_LDFLAGS    := $(OBJ_LDFLAGS_X86)
+  else ifeq ($(patsubst i%86,i586,$(1)),i586)
+    $(2)_NAME        = i586
+    $(2)_FAMILY      = ia32
+    $(2)_CFLAGS     := -march=i586 -m32
+    $(2)_LDFLAGS    := $(OBJ_LDFLAGS_X86)
+  else ifeq ($(1),x86)
+    $(2)_NAME        = i686
+    $(2)_FAMILY      = ia32
+    $(2)_CFLAGS     := -march=i686 -m32
+    $(2)_LDFLAGS    := $(OBJ_LDFLAGS_X86)
+  else ifeq ($(1),riscv32)
+    $(2)_NAME        = riscv32
+    $(2)_FAMILY      = riscv32
+    $(2)_CFLAGS     := -march=rv32imafdc -mabi=lp32d
+  else ifeq ($(1),riscv64)
+    $(2)_NAME        = riscv64
+    $(2)_FAMILY      = riscv64
+    $(2)_CFLAGS     := -march=rv64imafdc -mabi=lp64d
+  else
+    $(2)_NAME        = $(1)
+    $(2)_FAMILY      = generic
+    $(2)_CFLAGS     :=
+  endif
+endef
+
+$(eval $(call detect_architecture,$(BUILD_ARCH),ARCHITECTURE))
+$(eval $(call detect_architecture,$(HOST_BUILD_ARCH),HOST_ARCHITECTURE))
+
+override ARCHITECTURE          = $(ARCHITECTURE_NAME)
+override HOST_ARCHITECTURE     = $(HOST_ARCHITECTURE_NAME)
+
+# Extension of libraries
+ifndef LIBRARY_EXT
+  ifeq ($(PLATFORM),Windows)
+    LIBRARY_EXT              := .dll
+  else ifeq ($(PLATFORM),MacOS) 
+    LIBRARY_EXT              := .dylib
+  else
+    LIBRARY_EXT              := .so
+  endif
+endif
+
+# Extension of libraries
+ifndef LIBRARY_PREFIX
+  ifeq ($(PLATFORM),Windows)
+    LIBRARY_PREFIX           :=
+  else
+    LIBRARY_PREFIX           := lib
+  endif
+endif
+
+# Extension of executables
+ifndef EXECUTABLE_EXT
+  ifeq ($(PLATFORM),Windows)
+    EXECUTABLE_EXT           := .exe
+  else
+    EXECUTABLE_EXT           :=
+  endif
+endif
+
+# Extension of executables
+ifndef STATICLIB_EXT
+  STATICLIB_EXT            := .a
+endif
+
+# Extension of pkgconfig files
+ifndef PKGCONFIG_EXT
+  PKGCONFIG_EXT            := .pc
+endif
+
+TEST                       := 0
+
+# Set-up list of common variables
+COMMON_VARS = \
+	ARCHITECTURE \
+	ARCHITECTURE_FAMILY \
+	ARCHITECTURE_CFLAGS \
+	BUILD_FEATURES \
+	CROSS_COMPILE \
+	DEBUG \
+	EXECUTABLE_EXT \
+	EXPORT_SYMBOLS \
+	HOST_ARCHITECTURE \
+	HOST_ARCHITECTURE_FAMILY \
+	HOST_ARCHITECTURE_CFLAGS \
+	INSTALL_HEADERS \
+	LIBRARY_EXT \
+	LIBRARY_PREFIX \
+	PKGCONFIG_EXT \
+	PLATFORM \
+	ROOT_ARTIFACT_ID \
+	PROFILE \
+	STATICLIB_EXT \
+	STRICT \
+	TEST \
+	TRACE
+
+.PHONY: sysvars
+
+sysvars:
+	echo "List of available system variables:"
+	echo "  ADD_FEATURES              list of features enabled in the build as an addition to default"
+	echo "  ARCHITECTURE              target architecture to perform build"
+	echo "  ARCHITECTURE_CFLAGS       compiler flags to specify architecture"
+	echo "  ARCHITECTURE_FAMILY       compiler flags to specify architecture family"
+	echo "  ARCHITECTURE_LDFLAGS      linker flags to specify architecture"
+	echo "  CROSS_COMPILE             enable/disable cross-compilation"
+	echo "  DEBUG                     build with debug options"
+	echo "  DEVEL                     build with modules checked out for read/write URL"
+	echo "  EXECUTABLE_EXT            file extension for executable files"
+	echo "  EXPORT_SYMBOLS            make export symbols visible" 
+	echo "  FEATURES                  list of features enabled in the build"
+	echo "  INSTALL_HEADERS           install headers (enabled by default)"
+	echo "  LIBRARY_EXT               file extension for library files"
+	echo "  LIBRARY_PREFIX            prefix used for library file"
+	echo "  PKGCONFIG_EXT             file extension for pkgconfig files"
+	echo "  PLATFORM                  target software platform to perform build"
+	echo "  PROFILE                   build with profile options"
+	echo "  STATICLIB_EXT             file extension for static library files"
+	echo "  STRICT                    strict compilation: treat compilation warnings as errors"
+	echo "  SUB_FEATURES              list of features disabled in the build as a subtraction of default"
+	echo "  TEST                      use test build"
+	echo "  TRACE                     compile with additional trace information output"
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/make/tools.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/make/tools.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,257 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+# Determine tools
+X_PHP_TOOL         := php
+ifeq ($(PLATFORM),OpenBSD)
+  X_CC_TOOL          := egcc
+  X_CXX_TOOL         := eg++
+  X_AS_TOOL          := gas
+  X_AR_TOOL          := ar
+  X_LD_TOOL          := ld
+  X_PKG_CONFIG       := pkg-config
+else ifeq ($(PLATFORM),BSD)
+  X_CC_TOOL          := clang
+  X_CXX_TOOL         := clang++
+  X_AS_TOOL          := as
+  X_AR_TOOL          := ar
+  X_LD_TOOL          := ld
+  X_PKG_CONFIG       := pkg-config
+else ifeq ($(PLATFORM),MacOS)
+  X_CC_TOOL          := clang
+  X_CXX_TOOL         := clang++
+  X_AS_TOOL          := as
+  X_AR_TOOL          := ar
+  X_LD_TOOL          := ld
+  X_PKG_CONFIG       := pkg-config
+else
+  X_CC_TOOL          := gcc
+  X_CXX_TOOL         := g++
+  X_AS_TOOL          := as
+  X_AR_TOOL          := ar
+  X_LD_TOOL          := ld
+  X_PKG_CONFIG       := pkg-config
+endif
+
+X_GIT_TOOL         := git
+X_INSTALL_TOOL     := install
+
+# Define tool variables for (cross) build
+CC                 ?= $(X_CC_TOOL)
+CXX                ?= $(X_CXX_TOOL)
+AS                 ?= $(X_AS_TOOL)
+AR                 ?= $(X_AR_TOOL)
+LD                 ?= $(X_LD_TOOL)
+PHP                ?= $(X_PHP_TOOL)
+PKG_CONFIG         ?= $(X_PKG_CONFIG)
+
+# Define tool variables for host build
+ifeq ($(CROSS_COMPILE),1)
+  HOST_CC            ?= $(X_CC_TOOL)
+  HOST_CXX           ?= $(X_CXX_TOOL)
+  HOST_AS            ?= $(X_AS_TOOL)
+  HOST_AR            ?= $(X_AR_TOOL)
+  HOST_LD            ?= $(X_LD_TOOL)
+  HOST_PHP           ?= $(X_PHP_TOOL)
+  HOST_PKG_CONFIG    ?= $(X_PKG_CONFIG)
+else
+  HOST_CC            ?= $(CC)
+  HOST_CXX           ?= $(CXX)
+  HOST_AS            ?= $(AS)
+  HOST_AR            ?= $(AR)
+  HOST_LD            ?= $(LD)
+  HOST_PHP           ?= $(PHP)
+  HOST_PKG_CONFIG    ?= $(PKG_CONFIG)
+endif
+
+# Miscellaneous tools
+GIT                ?= $(X_GIT_TOOL)
+INSTALL            ?= $(X_INSTALL_TOOL)
+
+# Patch flags and tools for (cross) build
+FLAG_RELRO         := -Wl,-z,relro,-z,now
+FLAG_STDLIB        := 
+FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
+NOARCH_CFLAGS      := 
+NOARCH_CXXFLAGS    := 
+NOARCH_EXE_FLAGS   := 
+NOARCH_SO_FLAGS    := 
+NOARCH_LDFLAGS     := 
+
+ifeq ($(PLATFORM),Solaris)
+  FLAG_RELRO          =
+  LD                  = gld
+else ifeq ($(PLATFORM),Windows)
+  FLAG_RELRO          =
+  FLAG_STDLIB         =
+  NOARCH_CFLAGS      += -DWINVER=0x600 -D_WIN32_WINNT=0x600
+  NOARCH_CXXFLAGS    += -DWINVER=0x600 -D_WIN32_WINNT=0x600
+  NOARCH_EXE_FLAGS   += -static-libgcc -static-libstdc++
+  NOARCH_SO_FLAGS    += -static-libgcc -static-libstdc++
+  NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
+else ifeq ($(PLATFORM),MacOS)
+  FLAG_RELRO          =
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
+  NOARCH_CXXFLAGS    += -std=c++0x
+  NOARCH_LDFLAGS     += -keep_private_externs
+else ifeq ($(PLATFORM),BSD)
+  NOARCH_EXE_FLAGS   += -L/usr/local/lib
+  NOARCH_SO_FLAGS    += -L/usr/local/lib
+endif
+
+ifeq ($(DEBUG),1)
+  NOARCH_CFLAGS      += -Og -g3 -DLSP_DEBUG -falign-functions=16
+  NOARCH_CXXFLAGS    += -Og -g3 -DLSP_DEBUG -falign-functions=16
+else
+  NOARCH_CFLAGS      += -O2
+  NOARCH_CXXFLAGS    += -O2
+endif
+
+ifeq ($(ASAN),1)
+  NOARCH_CFLAGS      += -fsanitize=address
+  NOARCH_CXXFLAGS    += -fsanitize=address
+  NOARCH_EXE_FLAGS   += -fsanitize=address
+  NOARCH_SO_FLAGS    += -fsanitize=address
+endif
+
+ifeq ($(PROFILE),1)
+  NOARCH_CFLAGS      += -pg -DLSP_PROFILE
+  NOARCH_CXXFLAGS    += -pg -DLSP_PROFILE
+endif
+
+ifeq ($(TRACE),1)
+  NOARCH_CFLAGS      += -DLSP_TRACE
+  NOARCH_CXXFLAGS    += -DLSP_TRACE
+endif
+
+ifeq ($(STRICT),1)
+  NOARCH_CFLAGS      += -Werror
+  NOARCH_CXXFLAGS    += -Werror
+endif
+
+ifeq ($(TEST),1)
+  NOARCH_CFLAGS      += -DLSP_TESTING
+  NOARCH_CXXFLAGS    += -DLSP_TESTING
+  EXPORT_SYMBOLS     ?= 1
+else
+  ifeq ($(ARTIFACT_EXPORT_SYMBOLS),1)
+    EXPORT_SYMBOLS     ?= 1
+  else
+    EXPORT_SYMBOLS     ?= 0
+  endif
+endif
+
+ifneq ($(EXPORT_SYMBOLS),1)
+  NOARCH_CFLAGS      += -fvisibility=hidden
+  NOARCH_CXXFLAGS    += -fvisibility=hidden
+endif
+
+ifneq ($(ARTIFACT_EXPORT_HEADERS),0)
+  INSTALL_HEADERS    ?= 1
+else
+  INSTALL_HEADERS    ?= 0
+endif
+
+# Define flags for (cross) build
+NOARCH_CFLAGS      += \
+  -fdata-sections \
+  -ffunction-sections \
+  -fno-asynchronous-unwind-tables \
+  -pipe \
+  -Wall
+CFLAGS             += $(ARCHITECTURE_CFLAGS) $(NOARCH_CFLAGS)
+HOST_CFLAGS        += $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_CFLAGS)
+
+CDEFS              += -DLSP_INSTALL_PREFIX=\\\"$(PREFIX)\\\"
+  
+NOARCH_CXXFLAGS    += \
+  -fno-exceptions \
+  -fno-rtti \
+  -fdata-sections \
+  -ffunction-sections \
+  -fno-asynchronous-unwind-tables \
+  -pipe \
+  -Wall
+CXXFLAGS           += $(ARCHITECTURE_CFLAGS) $(NOARCH_CXXFLAGS)
+HOST_CXXFLAGS      += $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_CXXFLAGS)
+
+CXXDEFS            += -DLSP_INSTALL_PREFIX=\\\"$(PREFIX)\\\"
+
+INCLUDE            :=
+
+NOARCH_LDFLAGS     += -r
+LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
+HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
+
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
+EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
+HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
+
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
+SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
+HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
+
+# The overall list of exported variables
+TOOL_VARS := \
+  GIT INSTALL \
+  PKG_CONFIG AS AR CC CXX LD PHP \
+  CFLAGS CDEFS CXXFLAGS CXXDEFS LDFLAGS EXE_FLAGS SO_FLAGS \
+  INCLUDE \
+  HOST_PKG_CONFIG HOST_AS HOST_AR HOST_CC HOST_CXX HOST_LD HOST_PHP \
+  HOST_CFLAGS HOST_CDEFS HOST_CXXFLAGS HOST_CXXDEFS HOST_LDFLAGS HOST_EXE_FLAGS HOST_SO_FLAGS \
+  
+
+.PHONY: toolvars
+toolvars:
+	echo "List of tool variables:"
+	echo "  AR                        Archiver tool for target build"
+	echo "  AS                        Assembler tool for target build"
+	echo "  CC                        C compiler execution command line for target build"
+	echo "  CDEFS                     C compiler build macro definitions for target build"
+	echo "  CFLAGS                    C compiler build flags for target build"
+	echo "  CXX                       C++ compiler execution command line for target build"
+	echo "  CXXDEFS                   C++ compiler build defiintions for target build"
+	echo "  CXXFLAGS                  C++ compiler build flags for target build"
+	echo "  EXE_FLAGS                 Flags to link executable files for target build"
+	echo "  GIT                       The name of the Git version control tool"
+	echo "  HOST_AR                   Archiver tool for host build"
+	echo "  HOST_AS                   Assembler tool for host build"
+	echo "  HOST_CC                   C compiler execution command line for host build"
+	echo "  HOST_CDEFS                C compiler macro definitions for host build"
+	echo "  HOST_CFLAGS               C compiler build flags for host build"
+	echo "  HOST_CXX                  C++ compiler execution command line for target build"
+	echo "  HOST_CXXDEFS              C++ compiler macro definitions for host build"
+	echo "  HOST_CXXFLAGS             C++ compiler build flags for host build"
+	echo "  HOST_EXE_FLAGS            Flags to link executable files for target build"
+	echo "  HOST_CXX                  C++ compiler execution command line for host build"
+	echo "  HOST_LD                   Linker execution command line for host build "
+	echo "  HOST_LDFLAGS              Linker flags for merging object files for host build"
+	echo "  HOST_PKG_CONFIG           Installed package management tool for host build"
+	echo "  HOST_SO_FLAGS             Flags to link shared object/library files for host build"
+	echo "  INCLUDE                   Additional paths for include files"
+	echo "  LD                        Linker execution command line for target build"
+	echo "  LDFLAGS                   Linker flags for merging object files for target build"
+	echo "  PHP                       Installed PHP interpreter tool for building documentation"
+	echo "  PKG_CONFIG                Installed package management tool for target build"
+	echo "  SO_FLAGS                  Flags to link shared object/library files for target build"
+	echo ""
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/modules.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/modules.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/modules.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,244 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+# Variables that describe dependencies
+LSP_3RD_PARTY_VERSION      := 1.0.23
+LSP_3RD_PARTY_NAME         := lsp-3rd-party
+LSP_3RD_PARTY_TYPE         := hdr
+LSP_3RD_PARTY_INC_OPT      := -idirafter
+LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
+LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
+
+LSP_COMMON_LIB_VERSION     := 1.0.43
+LSP_COMMON_LIB_NAME        := lsp-common-lib
+LSP_COMMON_LIB_TYPE        := src
+LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
+LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
+
+LSP_DSP_LIB_VERSION        := 1.0.31
+LSP_DSP_LIB_NAME           := lsp-dsp-lib
+LSP_DSP_LIB_TYPE           := src
+LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
+LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
+
+LSP_DSP_UNITS_VERSION      := 1.0.30
+LSP_DSP_UNITS_NAME         := lsp-dsp-units
+LSP_DSP_UNITS_TYPE         := src
+LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
+LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
+
+LSP_LLTL_LIB_VERSION       := 1.0.26
+LSP_LLTL_LIB_NAME          := lsp-lltl-lib
+LSP_LLTL_LIB_TYPE          := src
+LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
+LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
+
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
+LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
+LSP_R3D_BASE_LIB_TYPE      := src
+LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
+LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
+
+LSP_R3D_IFACE_VERSION      := 1.0.25
+LSP_R3D_IFACE_NAME         := lsp-r3d-iface
+LSP_R3D_IFACE_TYPE         := src
+LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
+LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
+
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
+LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
+LSP_R3D_GLX_LIB_TYPE       := bin
+LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
+LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
+
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
+LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
+LSP_R3D_WGL_LIB_TYPE       := bin
+LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
+LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
+
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
+LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
+LSP_RUNTIME_LIB_TYPE       := src
+LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
+LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
+
+LSP_TEST_FW_VERSION        := 1.0.32
+LSP_TEST_FW_NAME           := lsp-test-fw
+LSP_TEST_FW_TYPE           := src
+LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
+LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
+
+LSP_TK_LIB_VERSION         := 1.0.29
+LSP_TK_LIB_NAME            := lsp-tk-lib
+LSP_TK_LIB_TYPE            := src
+LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
+LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
+
+LSP_WS_LIB_VERSION         := 1.0.29
+LSP_WS_LIB_NAME            := lsp-ws-lib
+LSP_WS_LIB_TYPE            := src
+LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
+LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
+
+# Plugin-related module dependencies
+LSP_PLUGIN_FW_VERSION      := 1.0.31
+LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
+LSP_PLUGIN_FW_TYPE         := src
+LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
+LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
+
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
+LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
+LSP_PLUGINS_SHARED_TYPE    := src
+LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
+LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
+
+# System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
+LIBADVAPI_VERSION          := system
+LIBADVAPI_NAME             := libadvapi32
+LIBADVAPI_TYPE             := opt
+LIBADVAPI_LDFLAGS          := -ladvapi32
+
+LIBCAIRO_VERSION           := system
+LIBCAIRO_NAME              := cairo
+LIBCAIRO_TYPE              := pkg
+
+LIBD2D1_VERSION            := system
+LIBD2D1_NAME               := libd2d1
+LIBD2D1_TYPE               := opt
+LIBD2D1_LDFLAGS            := -ld2d1
+
+LIBDL_VERSION              := system
+LIBDL_NAME                 := libdl
+LIBDL_TYPE                 := opt
+LIBDL_LDFLAGS              := -ldl
+
+LIBDWRITE_VERSION          := system
+LIBDWRITE_NAME             := libdwrite
+LIBDWRITE_TYPE             := opt
+LIBDWRITE_LDFLAGS          := -ldwrite
+
+LIBFONTCONFIG_VERSION      := system
+LIBFONTCONFIG_NAME         := fontconfig
+LIBFONTCONFIG_TYPE         := pkg
+
+LIBFREETYPE_VERSION        := system
+LIBFREETYPE_NAME           := freetype2
+LIBFREETYPE_TYPE           := pkg
+
+LIBGDI32_VERSION           := system
+LIBGDI32_NAME              := libgid32
+LIBGDI32_TYPE              := opt
+LIBGDI32_LDFLAGS           := -lgdi32
+
+LIBGL_VERSION              := system
+LIBGL_NAME                 := gl
+LIBGL_TYPE                 := pkg
+
+LIBGSTREAMER_AUDIO_VERSION := system
+LIBGSTREAMER_AUDIO_NAME    := gstreamer-audio-1.0
+LIBGSTREAMER_AUDIO_TYPE    := pkg
+
+LIBICONV_VERSION           := system
+LIBICONV_NAME              := libiconv
+LIBICONV_TYPE              := opt
+LIBICONV_LDFLAGS           := -liconv
+
+LIBJACK_VERSION            := system
+LIBJACK_NAME               := jack
+LIBJACK_TYPE               := pkg
+
+LIBMPR_VERSION             := system
+LIBMPR_NAME                := libmpr
+LIBMPR_TYPE                := opt
+LIBMPR_LDFLAGS             := -lmpr
+
+LIBMSACM_VERSION           := system
+LIBMSACM_NAME              := libmsacm
+LIBMSACM_TYPE              := opt
+LIBMSACM_LDFLAGS           := -lmsacm32
+
+LIBOLE_VERSION             := system
+LIBOLE_NAME                := libole
+LIBOLE_TYPE                := opt
+LIBOLE_LDFLAGS             := -lole32
+
+LIBOPENGL32_VERSION        := system
+LIBOPENGL32_NAME           := libopengl32
+LIBOPENGL32_TYPE           := opt
+LIBOPENGL32_LDFLAGS        := -lopengl32
+
+LIBPTHREAD_VERSION         := system
+LIBPTHREAD_NAME            := libpthread
+LIBPTHREAD_TYPE            := opt
+LIBPTHREAD_LDFLAGS         := -lpthread
+
+LIBRT_VERSION              := system
+LIBRT_NAME                 := librt
+LIBRT_TYPE                 := opt
+LIBRT_LDFLAGS              := -lrt
+
+LIBSNDFILE_VERSION         := system
+LIBSNDFILE_NAME            := sndfile
+LIBSNDFILE_TYPE            := pkg
+
+LIBSHLWAPI_VERSION         := system
+LIBSHLWAPI_NAME            := libshlwapi
+LIBSHLWAPI_TYPE            := opt
+LIBSHLWAPI_LDFLAGS         := -lshlwapi
+
+LIBUUID_VERSION            := system
+LIBUUID_NAME               := libuuid
+LIBUUID_TYPE               := opt
+LIBUUID_LDFLAGS            := -luuid
+
+LIBWINCODEC_VERSION        := system
+LIBWINCODEC_NAME           := libwincodec
+LIBWINCODEC_TYPE           := opt
+LIBWINCODEC_LDFLAGS        := -lwindowscodecs
+
+LIBWINMM_VERSION           := system
+LIBWINMM_NAME              := libwinmm
+LIBWINMM_TYPE              := opt
+LIBWINMM_LDFLAGS           := -lwinmm
+
+LIBX11_VERSION             := system
+LIBX11_NAME                := x11
+LIBX11_TYPE                := pkg
+
+LIBXRANDR_VERSION          := system
+LIBXRANDR_NAME             := xrandr
+LIBXRANDR_TYPE             := pkg
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/plugins.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/plugins.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/plugins.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/plugins.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,28 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+# Variables that describe dependencies
+PLUGIN_PACKAGE_NAME     = lsp-plugins
+
+PLUGIN_SHARED = \
+  LSP_PLUGINS_SHARED
+
+PLUGIN_DEPENDENCIES = LSP_PLUGINS_PHASER
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/project.mk
--- 1.2.21-5/modules/lsp-plugins-phaser/project.mk	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/project.mk	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,31 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+# Package version
+ARTIFACT_ID                 = LSP_PLUGINS_PHASER
+ARTIFACT_NAME               = lsp-plugins-phaser
+ARTIFACT_TYPE               = plug
+ARTIFACT_DESC               = LSP Phaser Plugin Serier
+ARTIFACT_HEADERS            = lsp-plug.in
+ARTIFACT_EXPORT_HEADERS     = 0
+ARTIFACT_VERSION            = 1.0.1
+
+
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/doc/configs/phaser_mono.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/doc/configs/phaser_mono.cfg
--- 1.2.21-5/modules/lsp-plugins-phaser/res/doc/configs/phaser_mono.cfg	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/doc/configs/phaser_mono.cfg	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,161 @@
+# -------------------------------------------------------------------------------
+# This file contains configuration of the audio plugin.
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Phaser Mono (Phaser Mono)
+#   Plugin version:          1.0.0
+#   UID:                     phaser_mono
+#   CLAP URI:                in.lsp-plug.phaser_mono
+#   GStreamer identifier:    lsp-plugins-phaser-mono
+#   LADSPA identifier:       5002324
+#   LADSPA label:            http://lsp-plug.in/plugins/ladspa/phaser_mono
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/phaser_mono
+#   VST 2.x identifier:      ph1m
+#   VST 3.x identifier:      647370207068316D202020207068316D
+# 
+# (C) Test Case
+#   https://lsp-plug.in/
+# 
+# -------------------------------------------------------------------------------
+
+# Bypass [boolean]: true/false
+bypass = false
+
+# Signal phase switch [boolean]: true/false
+sphase = false
+
+# High-pass filter mode: 0..3
+#   0: off
+#   1: 12 dB/oct
+#   2: 24 dB/oct
+#   3: 36 dB/oct
+hpm = 0
+
+# High-pass filter frequency [Hz]: 10.00000000..20000.00000000
+hpf = 10.00000
+
+# Low-pass filter mode: 0..3
+#   0: off
+#   1: 12 dB/oct
+#   2: 24 dB/oct
+#   3: 36 dB/oct
+lpm = 0
+
+# Low-pass filter frequency [Hz]: 10.00000000..20000.00000000
+lpf = 20000.00000
+
+# Rate [Hz]: 0.01000000..20.00000000
+rate = 1.06193
+
+# Depth [G]: 0.00000000..10.00000000
+depth = 0.00 db
+
+# Time fraction [bar]: 0.01562500..8.00000000
+frac = 1.00000
+
+# Time fraction denominator [bar]: 1.00000000..64.00000000
+denom = 4.00000
+
+# Tempo [bpm]: 20.00000000..360.00000000
+tempo = 120.00000
+
+# Tempo sync [boolean]: true/false
+sync = false
+
+# Time computing method: 0..2
+#   0: Rate
+#   1: Tempo
+#   2: Static
+time = 0
+
+# Reset phase to initial value [boolean]: true/false
+reset = false
+
+# Number of filters: 0..7
+#   0: 1
+#   1: 2
+#   2: 3
+#   3: 4
+#   4: 5
+#   5: 6
+#   6: 7
+#   7: 8
+filters = 2
+
+# Filter quality (Q factor): 0.10000000..10.00000000
+qfactor = 5.74228
+
+# Crossfade [%]: 0.00000000..50.00000000
+xfade = 7.05000
+
+# LFO type: 0..12
+#   0: Triangular
+#   1: Sine
+#   2: Stepped Sine
+#   3: Cubic
+#   4: Stepped Cubic
+#   5: Parabolic
+#   6: Reverse Parabolic
+#   7: Logarithmic
+#   8: Reverse Logarithmic
+#   9: Square Root
+#   10: Reverse Square Root
+#   11: Circular
+#   12: Reverse Circular
+type = 5
+
+# LFO period: 0..2
+#   0: Full
+#   1: First
+#   2: Last
+period = 2
+
+# LFO overlap [%]: 0.00000000..100.00000000
+lo = 78.00000
+
+# LFO frequency start [Hz]: 50.00000000..20000.00000000
+lfs = 1474.20081
+
+# LFO frequency end [Hz]: 50.00000000..20000.00000000
+lfe = 4198.18359
+
+# LFO initial phase [°]: 0.00000000..360.00000000
+lip = 36.39999
+
+# Inter-filter phase range [°]: 0.00000000..360.00000000
+lfp = 346.39984
+
+# Feedback on [boolean]: true/false
+fb_on = true
+
+# Feedback gain [G]: 0.00000000..0.89125001
+fgain = -7.55 db
+
+# Feedback delay [ms]: 0.00000000..5.00000000
+fdelay = 0.56000
+
+# Feedback phase switch [boolean]: true/false
+fphase = false
+
+# Input gain [G]: 0.00000000..1000.00000000
+g_in = 0.00 db
+
+# Dry amount [G]: 0.00000000..10.00000000
+dry = -inf db
+
+# Wet amount [G]: 0.00000000..10.00000000
+wet = 0.00 db
+
+# Dry/Wet balance [%]: 0.00000000..100.00000000
+drywet = 100.00000
+
+# Output gain [G]: 0.00000000..1000.00000000
+g_out = -6.50 db
+
+
+# -------------------------------------------------------------------------------
+# KVT parameters
+# -------------------------------------------------------------------------------
+
+
+# -------------------------------------------------------------------------------
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/doc/configs/phaser_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/doc/configs/phaser_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-phaser/res/doc/configs/phaser_stereo.cfg	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/doc/configs/phaser_stereo.cfg	2025-08-26 18:16:01.773828131 +0000
@@ -0,0 +1,193 @@
+# -------------------------------------------------------------------------------
+# This file contains configuration of the audio plugin.
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Phaser Stereo (Phaser Stereo)
+#   Plugin version:          1.0.0
+#   UID:                     phaser_stereo
+#   CLAP URI:                in.lsp-plug.phaser_stereo
+#   GStreamer identifier:    lsp-plugins-phaser-stereo
+#   LADSPA identifier:       5002325
+#   LADSPA label:            http://lsp-plug.in/plugins/ladspa/phaser_stereo
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/phaser_stereo
+#   VST 2.x identifier:      ph1s
+#   VST 3.x identifier:      64737020706831732020202070683173
+# 
+# (C) Test Case
+#   https://lsp-plug.in/
+# 
+# -------------------------------------------------------------------------------
+
+# Bypass [boolean]: true/false
+bypass = false
+
+# Test for mono compatibility [boolean]: true/false
+mono = false
+
+# Mid/Side mode switch [boolean]: true/false
+ms = false
+
+# Signal phase switch [boolean]: true/false
+sphase = true
+
+# High-pass filter mode: 0..3
+#   0: off
+#   1: 12 dB/oct
+#   2: 24 dB/oct
+#   3: 36 dB/oct
+hpm = 0
+
+# High-pass filter frequency [Hz]: 10.00000000..20000.00000000
+hpf = 10.00000
+
+# Low-pass filter mode: 0..3
+#   0: off
+#   1: 12 dB/oct
+#   2: 24 dB/oct
+#   3: 36 dB/oct
+lpm = 0
+
+# Low-pass filter frequency [Hz]: 10.00000000..20000.00000000
+lpf = 20000.00000
+
+# Rate [Hz]: 0.01000000..20.00000000
+rate = 0.25000
+
+# Depth [G]: 0.00000000..10.00000000
+depth = -6.50 db
+
+# Time fraction [bar]: 0.01562500..8.00000000
+frac = 2.00000
+
+# Time fraction denominator [bar]: 1.00000000..64.00000000
+denom = 4.00000
+
+# Tempo [bpm]: 20.00000000..360.00000000
+tempo = 174.00000
+
+# Tempo sync [boolean]: true/false
+sync = false
+
+# Time computing method: 0..2
+#   0: Rate
+#   1: Tempo
+#   2: Static
+time = 1
+
+# Reset phase to initial value [boolean]: true/false
+reset = false
+
+# Number of filters: 0..7
+#   0: 1
+#   1: 2
+#   2: 3
+#   3: 4
+#   4: 5
+#   5: 6
+#   6: 7
+#   7: 8
+filters = 5
+
+# Filter quality (Q factor): 0.10000000..10.00000000
+qfactor = 2.16853
+
+# Crossfade [%]: 0.00000000..50.00000000
+xfade = 5.25000
+
+# LFO type: 0..12
+#   0: Triangular
+#   1: Sine
+#   2: Stepped Sine
+#   3: Cubic
+#   4: Stepped Cubic
+#   5: Parabolic
+#   6: Reverse Parabolic
+#   7: Logarithmic
+#   8: Reverse Logarithmic
+#   9: Square Root
+#   10: Reverse Square Root
+#   11: Circular
+#   12: Reverse Circular
+type = 11
+
+# LFO period: 0..2
+#   0: Full
+#   1: First
+#   2: Last
+period = 1
+
+# Additional LFO type: 0..13
+#   0: Same
+#   1: Triangular
+#   2: Sine
+#   3: Stepped Sine
+#   4: Cubic
+#   5: Stepped Cubic
+#   6: Parabolic
+#   7: Reverse Parabolic
+#   8: Logarithmic
+#   9: Reverse Logarithmic
+#   10: Square Root
+#   11: Reverse Square Root
+#   12: Circular
+#   13: Reverse Circular
+atype = 1
+
+# Additional LFO period: 0..2
+#   0: Full
+#   1: First
+#   2: Last
+aperiod = 2
+
+# LFO overlap [%]: 0.00000000..100.00000000
+lo = 82.00000
+
+# LFO frequency start [Hz]: 50.00000000..20000.00000000
+lfs = 107.13410
+
+# LFO frequency end [Hz]: 50.00000000..20000.00000000
+lfe = 7007.76074
+
+# LFO initial phase [°]: 0.00000000..360.00000000
+lip = 16.00000
+
+# Inter-filter phase range [°]: 0.00000000..360.00000000
+lfp = 117.60023
+
+# Inter-channel phase [°]: 0.00000000..360.00000000
+lcp = 156.00014
+
+# Feedback on [boolean]: true/false
+fb_on = true
+
+# Feedback gain [G]: 0.00000000..0.89125001
+fgain = -3.93 db
+
+# Feedback delay [ms]: 0.00000000..5.00000000
+fdelay = 0.16000
+
+# Feedback phase switch [boolean]: true/false
+fphase = true
+
+# Input gain [G]: 0.00000000..1000.00000000
+g_in = 0.00 db
+
+# Dry amount [G]: 0.00000000..10.00000000
+dry = -inf db
+
+# Wet amount [G]: 0.00000000..10.00000000
+wet = 0.00 db
+
+# Dry/Wet balance [%]: 0.00000000..100.00000000
+drywet = 100.00000
+
+# Output gain [G]: 0.00000000..1000.00000000
+g_out = -3.00 db
+
+
+# -------------------------------------------------------------------------------
+# KVT parameters
+# -------------------------------------------------------------------------------
+
+
+# -------------------------------------------------------------------------------
Binary files 1.2.21-5/modules/lsp-plugins-phaser/res/doc/screenshots/phaser_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/doc/screenshots/phaser_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-phaser/res/doc/screenshots/phaser_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/doc/screenshots/phaser_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/default/bundles.json 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/default/bundles.json
--- 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/default/bundles.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/default/bundles.json	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,7 @@
+{
+	"phaser": {
+		"name": "Phaser",
+		"description": "This plugin allows to simpulate multi-stage phaser effect"
+	}
+}
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/default/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/default/lists.json
--- 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/default/lists.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/default/lists.json	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,30 @@
+{
+	"phaser": {
+		"osc": {
+			"circular": "Circular",
+			"cubic": "Cubic",
+			"logarithmic": "Logarithmic",
+			"parabolic": "Parabolic",
+			"reverse_circular": "Reverse Circular",
+			"reverse_logarithmic": "Reverse Logarithmic",
+			"reverse_parabolic": "Reverse Parabolic",
+			"reverse_square_root": "Reverse Square Root",
+			"same": "Same",
+			"sine": "Sine",
+			"square_root": "Square Root",
+			"stepped_cubic": "Stepped Cubic",
+			"stepped_sine": "Stepped Sine",
+			"triangular": "Triangular"
+		},
+		"period": {
+			"first": "First",
+			"full": "Full",
+			"last": "Last"
+		},
+		"rate": {
+			"rate": "Rate",
+			"static": "Static",
+			"tempo": "Tempo"
+		}
+	}
+}
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/ru/bundles.json 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/ru/bundles.json
--- 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/ru/bundles.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/ru/bundles.json	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,7 @@
+{
+	"phaser": {
+		"name": "Фейзер",
+		"description": "Данный плагин позволяет реализовать многоступенчатый эффект фейзера"
+	}
+}
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/ru/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/ru/lists.json
--- 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/ru/lists.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/ru/lists.json	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,30 @@
+{
+	"phaser": {
+		"osc": {
+			"circular": "Окружность",
+			"cubic": "Кубическая",
+			"logarithmic": "Логарифмическая",
+			"parabolic": "Параболическая",
+			"reverse_circular": "Инверсная окружность",
+			"reverse_logarithmic": "Инверсаня логарифмическая",
+			"reverse_parabolic": "Инверсная параболическая",
+			"reverse_square_root": "Инверсный квадратный корень",
+			"same": "Аналогичная",
+			"sine": "Синусоидальная",
+			"square_root": "Квадратный корень",
+			"stepped_cubic": "Ступенчатая кубическая",
+			"stepped_sine": "Ступенчатая синусоидальная",
+			"triangular": "Треугольная"
+		},
+		"period": {
+			"first": "Первый",
+			"full": "Полный",
+			"last": "Последний"
+		},
+		"rate": {
+			"rate": "Частота",
+			"static": "Статичный",
+			"tempo": "Темп"
+		}
+	}
+}
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/us/bundles.json 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/us/bundles.json
--- 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/us/bundles.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/us/bundles.json	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,7 @@
+{
+	"phaser": {
+		"name": "Phaser",
+		"description": "This plugin allows to simpulate multi-stage phaser effect"
+	}
+}
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/us/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/us/lists.json
--- 1.2.21-5/modules/lsp-plugins-phaser/res/main/i18n/us/lists.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/i18n/us/lists.json	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,30 @@
+{
+	"phaser": {
+		"osc": {
+			"circular": "Circular",
+			"cubic": "Cubic",
+			"logarithmic": "Logarithmic",
+			"parabolic": "Parabolic",
+			"reverse_circular": "Reverse Circular",
+			"reverse_logarithmic": "Reverse Logarithmic",
+			"reverse_parabolic": "Reverse Parabolic",
+			"reverse_square_root": "Reverse Square Root",
+			"same": "Same",
+			"sine": "Sine",
+			"square_root": "Square Root",
+			"stepped_cubic": "Stepped Cubic",
+			"stepped_sine": "Stepped Sine",
+			"triangular": "Triangular"
+		},
+		"period": {
+			"first": "First",
+			"full": "Full",
+			"last": "Last"
+		},
+		"rate": {
+			"rate": "Rate",
+			"static": "Static",
+			"tempo": "Tempo"
+		}
+	}
+}
\ No newline at end of file
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Deep.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Deep.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Deep.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Deep.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = true
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 4.00000
+denom = 1.00000
+tempo = 120.00000
+sync = true
+time = 1
+reset = false
+filters = 5
+qfactor = 5.00000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 50.00000
+lfs = 100.00000
+lfe = 4000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Rhythm.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Rhythm.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Rhythm.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Rhythm.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 4.00000
+denom = 1.00000
+tempo = 120.00000
+sync = true
+time = 1
+reset = false
+filters = 3
+qfactor = 0.75000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 200.00000
+lfe = 4000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Solo.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Solo.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Solo.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Acoustic Solo.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 4.00000
+denom = 1.00000
+tempo = 120.00000
+sync = true
+time = 1
+reset = false
+filters = 3
+qfactor = 0.50000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 400.00000
+lfe = 8000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = true
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Aggressive.preset 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Aggressive.preset
--- 1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Aggressive.preset	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Aggressive.preset	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.50000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 7
+qfactor = 1.00000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 200.00000
+lfe = 1000.00000
+lip = 0.00000
+lfp = 90.00000
+lcp = 180.00000
+fb_on = true
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -6.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Alien Pads.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Alien Pads.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Alien Pads.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Alien Pads.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = true
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.10000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 0.50000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 100.00000
+lfe = 8000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = true
+fgain = -1.00 db
+fdelay = 0.00000
+fphase = true
+g_in = 0.00 db
+dry = -inf db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Bright Bass.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Bright Bass.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Bright Bass.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Bright Bass.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.05000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 7
+qfactor = 2.00000
+xfade = 0.00000
+type = 3
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 50.00000
+lfe = 5000.00000
+lip = 0.00000
+lfp = 360.00000
+lcp = 22.50000
+fb_on = true
+fgain = -2.00 db
+fdelay = 0.00000
+fphase = true
+g_in = 0.00 db
+dry = -inf db
+wet = -2.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Fluent.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Fluent.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Fluent.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Fluent.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 2.00000
+denom = 2.00000
+tempo = 120.00000
+sync = true
+time = 1
+reset = false
+filters = 3
+qfactor = 1.00000
+xfade = 11.87384
+type = 0
+period = 1
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 200.00000
+lfe = 5000.00000
+lip = 0.00000
+lfp = 360.00000
+lcp = 45.00000
+fb_on = true
+fgain = -1.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Pshychodelic.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Pshychodelic.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Pshychodelic.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Pshychodelic.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 2.00000
+denom = 2.00000
+tempo = 120.00000
+sync = true
+time = 1
+reset = false
+filters = 1
+qfactor = 1.00000
+xfade = 11.87384
+type = 0
+period = 1
+atype = 0
+aperiod = 0
+lo = 75.00000
+lfs = 200.00000
+lfe = 5000.00000
+lip = 0.00000
+lfp = 360.00000
+lcp = 90.00000
+fb_on = true
+fgain = -1.00 db
+fdelay = 0.18000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Rhythm.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Rhythm.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Rhythm.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Clean Guitar Rhythm.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = true
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 4.00000
+denom = 1.00000
+tempo = 120.00000
+sync = true
+time = 1
+reset = false
+filters = 3
+qfactor = 0.25000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 50.00000
+lfs = 100.00000
+lfe = 5000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = true
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Depressing Bells.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Depressing Bells.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Depressing Bells.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Depressing Bells.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = true
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 1
+qfactor = 0.50000
+xfade = 13.35807
+type = 3
+period = 1
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 500.00000
+lfe = 10000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = true
+fgain = -6.00 db
+fdelay = 1.03000
+fphase = true
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Floating.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Floating.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Floating.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Floating.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 0.50000
+xfade = 0.00000
+type = 11
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 400.00000
+lfe = 5000.00000
+lip = 0.00000
+lfp = 45.00000
+lcp = 45.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Pshychodelic.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Pshychodelic.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Pshychodelic.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Pshychodelic.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 1.00000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 400.00000
+lfe = 5000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = true
+fgain = -1.00 db
+fdelay = 0.50000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Rhythm.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Rhythm.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Rhythm.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Distorted Guitar Rhythm.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = -2.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 2.00000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 0.00000
+lfs = 500.00000
+lfe = 5000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Aggressive.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Aggressive.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Aggressive.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Aggressive.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,39 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 2
+reset = false
+filters = 1
+qfactor = 2.66126
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 85.70000
+lfe = 284.00000
+lflink = true
+lip = 299.52283
+lfp = 85.59908
+lcp = 251.36206
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = -4.40 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Bass Cut.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Bass Cut.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Bass Cut.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Bass Cut.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,39 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 2
+reset = false
+filters = 0
+qfactor = 1.67190
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 96.66191
+lfe = 169.10802
+lflink = true
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = -4.80 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Distorted Guitar.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Distorted Guitar.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Distorted Guitar.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Exciter Distorted Guitar.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,39 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 2
+reset = false
+filters = 0
+qfactor = 1.40000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 80.00000
+lfe = 80.00000
+lflink = true
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 64.79987
+g_out = -3.60 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Gugling Bass.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Gugling Bass.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Gugling Bass.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Gugling Bass.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = true
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.20000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 1.00000
+xfade = 0.00000
+type = 0
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 50.00000
+lfe = 3000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Guitar Phasing.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Guitar Phasing.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Guitar Phasing.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Guitar Phasing.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 3.50000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 500.00000
+lfe = 7000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 0.00000
+fb_on = true
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = -3.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Lead Guitar Solo.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Lead Guitar Solo.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Lead Guitar Solo.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Lead Guitar Solo.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 3.50000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 500.00000
+lfe = 7000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = true
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = -3.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Metal Mix.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Metal Mix.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Metal Mix.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Metal Mix.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 1.00000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 500.00000
+lfe = 7000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -6.00 db
+wet = -6.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Ping Pong.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Ping Pong.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Ping Pong.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Ping Pong.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 2.00000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 1
+qfactor = 0.20000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 300.00000
+lfe = 8000.00000
+lip = 0.00000
+lfp = 90.00000
+lcp = 90.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Scary Bells.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Scary Bells.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Scary Bells.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Scary Bells.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.10000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 0.25000
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 1000.00000
+lfe = 10000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 180.00000
+fb_on = true
+fgain = -1.00 db
+fdelay = 0.00000
+fphase = true
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Tremolo.preset 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Tremolo.preset
--- 1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Tremolo.preset	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Tremolo.preset	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 10.00000
+depth = 0.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 0.50000
+xfade = 0.00000
+type = 11
+period = 0
+atype = 0
+aperiod = 0
+lo = 50.00000
+lfs = 300.00000
+lfe = 8000.00000
+lip = 0.00000
+lfp = 90.00000
+lcp = 90.00000
+fb_on = false
+fgain = -6.00 db
+fdelay = 0.00000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = 0.00 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Tube Flight.preset" "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Tube Flight.preset"
--- "1.2.21-5/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Tube Flight.preset"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/presets/effects/phaser/Tube Flight.preset"	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,38 @@
+bypass = false
+mono = false
+ms = false
+sphase = false
+hpm = 0
+hpf = 10.00000
+lpm = 0
+lpf = 20000.00000
+rate = 0.25000
+depth = 2.00 db
+frac = 1.00000
+denom = 4.00000
+tempo = 120.00000
+sync = false
+time = 0
+reset = false
+filters = 3
+qfactor = 0.38886
+xfade = 0.00000
+type = 1
+period = 0
+atype = 0
+aperiod = 0
+lo = 100.00000
+lfs = 400.00000
+lfe = 8000.00000
+lip = 0.00000
+lfp = 180.00000
+lcp = 0.00000
+fb_on = true
+fgain = -3.00 db
+fdelay = 2.95000
+fphase = false
+g_in = 0.00 db
+dry = -inf db
+wet = -7.50 db
+drywet = 100.00000
+g_out = 0.00 db
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/main/ui/effects/phaser.xml 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/ui/effects/phaser.xml
--- 1.2.21-5/modules/lsp-plugins-phaser/res/main/ui/effects/phaser.xml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/main/ui/effects/phaser.xml	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,530 @@
+<plugin resizable="true">
+	<!-- Control linking -->
+	<ctl:link id.lfstart="lfs" value.lfstart=":lfe * :_old_lfstart / :_old_lfend" id.lfend="lfe" value.lfend=":lfs * :_old_lfend / :_old_lfstart" activity=":lflink"/>
+
+	<hbox spacing="4">
+		<!-- LFO -->
+		<group text="labels.lfo" ipadding="0" width.min="292">
+			<grid rows="16" cols="3" transpose="true">
+				<cell cols="3">
+					<button id="reset" text="actions.restart" hfill="true" ui:inject="Button_yellow" height="19" pad.v="4" pad.h="6"/>
+				</cell>
+				<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+
+				<!-- Type-->
+				<label text="labels.lfo.type" pad.v="4"/>
+				<void/>
+
+				<cell cols="3">
+					<grid rows="2" cols="1">
+						<hbox pad.h="6" pad.v="4">
+							<combo id="type" hfill="true"/>
+							<combo id="period" hfill="true" pad.l="6"/>
+						</hbox>
+						<hbox pad.h="6" pad.b="4" visibility="ex :in_l">
+							<combo id="atype" hfill="true"/>
+							<combo id="aperiod" hfill="true" pad.l="6"/>
+						</hbox>
+					</grid>
+				</cell>
+				<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+
+				<!-- Rate -->
+				<void vexpand="true"/>
+				<combo id="time" fill="false" pad.h="6" pad.v="4" width="93"/>
+				<vbox>
+					<hbox fill="false" pad.b="1" width="93" height="38" visibility=":time ieq 0">
+						<align halign="-1">
+							<knob id="rate"/>
+						</align>
+						<value id="rate" width="52" sline="true"/>
+					</hbox>
+					<hbox fill="false" pad.b="1" width="93" height="38" visibility=":time ieq 1">
+						<align halign="-1">
+							<hbox width="44">
+								<frac id="frac" pad.r="6" pad.b="2" pad.t="3" den.id="denom" max="8" color="green"/>
+							</hbox>
+						</align >
+						<value id="frac" width="45" sline="true"/>
+					</hbox>
+				</vbox>
+				<void vexpand="true"/>
+				<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+
+				<!-- Crossfade -->
+				<void vexpand="true"/>
+				<hbox fill="false" pad.t="4" width="108">
+					<align halign="-1">
+						<knob id="xfade"/>
+					</align>
+					<vbox>
+						<label text="labels.lfo.crossfade"/>
+						<value id="xfade" same_line="true"/>
+					</vbox>
+				</hbox>
+				<void vexpand="true"/>
+				<cell cols="3"><hsep pad.v="2" bg.color="bg" vreduce="true"/></cell>
+
+				<!-- Phase, Phase Range, Phase difference -->
+				<!-- for stereo version -->
+				<ui:if test="ex :lcp">
+					<cell cols="3">
+						<grid rows="5" cols="5" transpose="true" vexpand="true">
+
+							<!-- Phase -->
+							<void vexpand="true" pad.t="4"/>
+							<label text="labels.lfo.phase" width.min="64"/>
+							<knob id="lip" pad.h="6" pad.v="4"/>
+							<value id="lip" sline="true"/>
+							<void vexpand="true" pad.b="4"/>
+
+							<!-- Phase difference -->
+							<cell rows="5"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
+							<void vexpand="true"/>
+							<label text="labels.lfo.difference" width.min="64"/>
+							<knob id="lcp" pad.h="6" pad.v="4"/>
+							<value id="lcp" sline="true"/>
+							<void vexpand="true"/>
+
+							<cell rows="5"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
+
+							<!-- Phase range -->
+							<void vexpand="true"/>
+							<label text="labels.lfo.phase_range" width.min="64"/>
+							<knob id="lfp" pad.h="6" pad.v="4"/>
+							<value id="lfp" sline="true"/>
+							<void vexpand="true"/>
+
+						</grid>
+					</cell>
+				</ui:if>
+
+				<!-- for mono version -->
+				<!-- Phase -->
+				<ui:if test="!(ex :lcp)">
+					<vbox vexpand="true" pad.v="4">
+						<void vexpand="true"/>
+						<label text="labels.lfo.phase" width.min="64"/>
+						<knob id="lip" pad.h="6" pad.v="4"/>
+						<value id="lip" sline="true"/>
+						<void vexpand="true"/>
+					</vbox>
+				</ui:if>
+
+				<cell rows="2"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
+				<cell rows="4"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
+				<cell rows="3"><vsep pad.h="2" bg.color="bg" hreduce="true"/></cell>
+				<!-- this sep is for mono version Phase, Phase Range-->
+				<ui:if test="!(ex :lcp)"><vsep pad.h="2" bg.color="bg" hreduce="true"/></ui:if>
+
+				<!-- Filters -->
+				<hbox pad.h="6" pad.v="4">
+					<label text="labels.filters"/>
+					<combo id="filters" hfill="true"/>/>
+				</hbox>
+				<hsep pad.v="2" bg.color="bg" vreduce="true"/>
+				<!-- Tempo -->
+				<void vexpand="true"/>
+				<cell rows="2">
+					<vbox fill="false" pad.v="4" pad.h="6">
+
+						<hbox height="43" fill="false" visibility="!:sync">
+							<knob id="tempo" pad.r="6"/>
+							<vbox fill="false">
+								<label text="labels.tempo"/>
+								<value id="tempo" width.min="48" same_line="true"/>
+							</vbox>
+						</hbox>
+
+						<vbox fill="false" visibility=":sync">
+							<indicator id="_time_bpm" format="f4.1!" pad="0" text_color="green"/>
+							<hbox pad.t="3" fill="false">
+								<label text="labels.tempo"/>
+								<label pad.l="6" text="labels.host_bpm"/>
+							</hbox>
+						</vbox>
+
+						<hbox pad.t="4" width="93">
+							<button id="sync" text="labels.sync" fill="true" ui:inject="Button_green"/>
+							<ttap id="tempo" text="actions.tap" pad.l="6" fill="true" tcolor="label_text" visibility="!:sync"/>
+						</hbox>
+
+					</vbox>
+				</cell>
+				<void vexpand="true"/>
+
+				<!-- Overlap -->
+				<void vexpand="true"/>
+				<hbox fill="false" pad.v="4" pad.h="6">
+					<knob id="lo" pad.r="6"/>
+					<vbox>
+						<label text="labels.overlap"/>
+						<value id="lo" width="48" sline="true"/>
+					</vbox>
+				</hbox>
+				<void vexpand="true"/>
+
+				<!-- for mono version -->
+				<!-- Phase range -->
+				<ui:if test="!(ex :lcp)">
+					<vbox vexpand="true" pad.v="4">
+						<void vexpand="true"/>
+						<label text="labels.lfo.phase_range" width.min="64"/>
+						<knob id="lfp" pad.h="6" pad.v="4"/>
+						<value id="lfp" sline="true"/>
+						<void vexpand="true"/>
+					</vbox>
+				</ui:if>
+			</grid>
+		</group>
+
+		<!-- Mono meter for mono version -->
+		<ui:if test="ex :in">
+			<vbox vexpand="true" bg.color="bg_schema">
+				<label text="labels.chan.in" pad.v="3"/>
+				<ledmeter angle="1" bg.inherit="true" expand="true">
+					<ledchannel id="min" min="-36 db" max="+6 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid_in"/>
+				</ledmeter>
+			</vbox>
+		</ui:if>
+		<!-- Stereo meter for stereo version -->
+		<ui:if test="ex :in_l">
+			<vbox vexpand="true" bg.color="bg_schema">
+				<label text="labels.chan.in" pad.v="3"/>
+				<ledmeter angle="1" bg.inherit="true" expand="true">
+					<ledchannel id="min_l" min="-36 db" max="+6 db" log="true" type="rms_peak" peak.visibility="true" value.color="left_in"/>
+					<ledchannel id="min_r" min="-36 db" max="+6 db" log="true" type="rms_peak" peak.visibility="true" value.color="right_in"/>
+				</ledmeter>
+			</vbox>
+		</ui:if>
+
+		<!-- graph -->
+		<group ui:inject="GraphGroup" ipadding="0" expand="true" fill="true" text="labels.graphs.LFO">
+			<vbox>
+				<graph width.min="235" expand="true" height.min="235">
+					<origin hpos="-1" vpos="1" visibility="false"/>
+					<origin hpos="-1" vpos="-1" visibility="false"/>
+
+					<!-- Grid -->
+					<ui:with color="graph_alt_2">
+						<marker v="45"/>
+						<marker v="135"/>
+						<marker v="225"/>
+						<marker v="315"/>
+						<marker v="0.125" ox="1" oy="0"/>
+						<marker v="0.375" ox="1" oy="0"/>
+						<marker v="0.625" ox="1" oy="0"/>
+						<marker v="0.875" ox="1" oy="0"/>
+					</ui:with>
+
+					<ui:with color="graph_alt_1">
+						<marker v="90"/>
+						<marker v="270"/>
+						<marker v="0.25" ox="1" oy="0"/>
+						<marker v="0.75" ox="1" oy="0"/>
+					</ui:with>
+
+					<ui:with color="graph_sec">
+						<marker v="180"/>
+						<marker v="0.5" ox="1" oy="0"/>
+					</ui:with>
+
+					<!-- Axes -->
+					<axis min="0" max="360" angle="1.5" visibility="false"/>
+					<axis min="0" max="1" angle="0" visibility="false"/>
+					<axis o="1" min="0" max="100" angle="0.5" visibility="false"/>
+
+					<!-- Mesh -->
+					<ui:for id="i" first="1" count="8">
+						<mesh id="lgr" x.index="0" y.index="${i}" width="3" color="graph_mesh" smooth="true" visibility="(${:i-1} ile :filters) and ((!ex :atype) or (:atype ieq 0))"/>
+					</ui:for>
+					<ui:for id="i" first="1" count="8">
+						<mesh id="lgr" x.index="0" y.index="${i}" width="3" color="(ex :ms and :ms) ? 'mid' : 'left'" smooth="true" visibility="(${:i-1} ile :filters) and ((ex :atype) and (:atype ine 0))"/>
+					</ui:for>
+					<ui:for id="i" first="1" count="8">
+						<mesh id="lgr" x.index="0" y.index="${:i+1} + :filters" width="3" color="(ex :ms and :ms) ? 'side' : 'right'" smooth="true" visibility="(${:i-1} ile :filters) and ((ex :atype) and (:atype ine 0))"/>
+					</ui:for>
+
+					<!-- Markers -->
+					<marker o="1" ox="2" oy="1" zero="0" id="xfade" editable="true" pointer="vsize" color="graph_marker_cycle" hcolor="graph_marker_cycle" color.a="0.5" hcolor.a="0.5"/>
+
+					<ui:if test="!(ex :in_r)">
+						<ui:for id="i" first="1" count="8">
+							<marker v=":fms_${i}" ox="1" oy="0" color="graph_mesh" color.a="0.65" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+					</ui:if>
+					<ui:if test="ex :in_r">
+						<ui:for id="i" first="1" count="8">
+							<marker v=":fms_${i}l" ox="1" oy="0" color="(:ms) ? 'mid' : 'left'" color.a="0.65" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+						<ui:for id="i" first="1" count="8">
+							<marker v=":fms_${i}r" ox="1" oy="0" color="(:ms) ? 'side' : 'right'" color.a="0.65" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+					</ui:if>
+
+					<!-- Dots -->
+					<ui:if test="!(ex :in_r)">
+						<ui:for id="i" first="1" count="8">
+							<dot x.id="fmp_${i}" y.id="fms_${i}" color="graph_mesh" bcolor="graph_mesh" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+					</ui:if>
+					<ui:if test="ex :in_r">
+						<ui:for id="i" first="1" count="8">
+							<dot x.id="fmp_${i}l" y.id="fms_${i}l" color="(:ms) ? 'mid' : 'left'" bcolor="(:ms) ? 'mid' : 'left'" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+						<ui:for id="i" first="1" count="8">
+							<dot x.id="fmp_${i}r" y.id="fms_${i}r" color="(:ms) ? 'side' : 'right'" bcolor="(:ms) ? 'side' : 'right'" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+					</ui:if>
+
+					<!-- text -->
+					<text x="0" y="0" halign="1" valign="-1" text="graph.values.min"/>
+					<text x="0" y="1" halign="-1" valign="-1" text="graph.values.max"/>
+					<text x="0" y="0.5" halign="0" valign="-1" text="graph.axis.depth"/>
+					<ui:for id="i" first="1" count="7">
+						<text x="${:i*45}" y="0" halign="1" valign="1" text="graph.values.x:deg" text:value="${:i*45}"/>
+					</ui:for>
+					<text x="360" y="0" halign="1" valign="1" text="graph.axis.phase"/>
+
+					<text x="360.0 - 3.6*:xfade" y="1" halign="-1" valign="1" text="labels.lfo.crossfade" color="graph_marker_cycle" color.a="0.5"/>
+				</graph>
+
+				<graph hfill="true" height.min="64">
+					<ui:set id="axis_max" value="max(:lfs, :lfe) * 2.0"/>
+					<ui:set id="axis_min" value="min(:lfs, :lfe) * 0.5"/>
+
+					<origin hpos="-1" vpos="-1" visibility="false"/>
+					<axis angle="0" min="${axis_min}" max="${axis_max}" log="true" visibility="false"/>
+					<axis angle="0.5" min="0" max="3" visibility="false"/>
+
+					<ui:with color="graph_alt_1">
+						<ui:for id="i" first="2" last="9">
+							<marker v="${i} * 10"/>
+							<marker v="${i} * 100"/>
+							<marker v="${i} * 1000"/>
+						</ui:for>
+						<marker v="20000"/>
+					</ui:with>
+
+					<ui:with color="graph_sec">
+						<marker v="10"/>
+						<marker v="100"/>
+						<marker v="1000"/>
+						<marker v="10000"/>
+					</ui:with>
+
+					<marker v="1" ox="1" oy="0" color="graph_prim"/>
+
+					<!-- Markers -->
+					<ui:if test="!(ex :in_r)">
+						<ui:for id="i" first="1" count="8">
+							<marker v=":fmf_${i}" color="graph_mesh" color.a="0.65" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+					</ui:if>
+					<ui:if test="ex :in_r">
+						<ui:for id="i" first="1" count="8">
+							<marker v=":fmf_${i}l" color="(:ms) ? 'mid' : 'left'" color.a="0.65" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+						<ui:for id="i" first="1" count="8">
+							<marker v=":fmf_${i}r" color="(:ms) ? 'side' : 'right'" color.a="0.65" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+					</ui:if>
+
+					<!-- Dots -->
+					<ui:if test="!(ex :in_r)">
+						<ui:for id="i" first="1" count="8">
+							<dot x.id="fmf_${i}" y="2" color="graph_mesh" bcolor="graph_mesh" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+					</ui:if>
+					<ui:if test="ex :in_r">
+						<ui:for id="i" first="1" count="8">
+							<dot x.id="fmf_${i}l" y="${7.0 / 3.0}" color="(:ms) ? 'mid' : 'left'" bcolor="(:ms) ? 'mid' : 'left'" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+						<ui:for id="i" first="1" count="8">
+							<dot x.id="fmf_${i}r" y="${5.0 / 3.0}" color="(:ms) ? 'side' : 'right'" bcolor="(:ms) ? 'side' : 'right'" visibility="${:i-1} ile :filters"/>
+						</ui:for>
+					</ui:if>
+
+					<!-- Text -->
+					<text x="${axis_min}" y="0" pgroup="0" halign="1" priority="0" text="graph.units.hz"/>
+
+					<ui:with y="0" pgroup="0" halign="1" priority="10">
+						<text x="10" text="20"/>
+						<text x="100" text="100"/>
+						<text x="1000" text="graph.values.x_k" text:value="1"/>
+						<text x="10000" text="graph.values.x_k" text:value="10"/>
+					</ui:with>
+					<ui:with y="0" pgroup="0" halign="1" priority="20">
+						<text x="40" text="40"/>
+						<text x="400" text="400"/>
+						<text x="4000" text="graph.values.x_k" text:value="4"/>
+					</ui:with>
+					<ui:with y="0" pgroup="0" halign="1" priority="30">
+						<text x="20" text="20"/>
+						<text x="80" text="80"/>
+						<text x="200" text="200"/>
+						<text x="800" text="800"/>
+						<text x="2000" text="graph.values.x_k" text:value="2"/>
+						<text x="8000" text="graph.values.x_k" text:value="8"/>
+						<text x="20000" text="graph.values.x_k" text:value="20"/>
+					</ui:with>
+					<ui:with y="0" pgroup="0" halign="1" priority="40">
+						<text x="30" text="30"/>
+						<text x="60" text="60"/>
+						<text x="300" text="300"/>
+						<text x="600" text="600"/>
+						<text x="3000" text="graph.values.x_k" text:value="3"/>
+						<text x="6000" text="graph.values.x_k" text:value="6"/>
+					</ui:with>
+					<ui:with y="0" pgroup="0" halign="1" priority="50">
+						<text x="50" text="50"/>
+						<text x="90" text="90"/>
+						<text x="500" text="500"/>
+						<text x="900" text="900"/>
+						<text x="5000" text="graph.values.x_k" text:value="5"/>
+						<text x="9000" text="graph.values.x_k" text:value="9"/>
+					</ui:with>
+					<ui:with y="0" pgroup="0" halign="1" priority="60">
+						<text x="70" text="70"/>
+						<text x="700" text="700"/>
+						<text x="7000" text="graph.values.x_k" text:value="7"/>
+					</ui:with>
+				</graph>
+			</vbox>
+		</group>
+
+		<!-- Mono meter for mono version -->
+		<ui:if test="ex :in">
+			<vbox vexpand="true" bg.color="bg_schema">
+				<label text="labels.chan.out" pad.v="3"/>
+				<ledmeter angle="1" expand="true" bg.inherit="true">
+					<ledchannel id="mout" min="-36 db" max="+6 db" log="true" type="rms_peak" peak.visibility="true" value.color="mid"/>
+				</ledmeter>
+			</vbox>
+		</ui:if>
+		<!-- Stereo meter for stereo version -->
+		<ui:if test="ex :in_l">
+			<vbox vexpand="true" bg.color="bg_schema">
+				<label text="labels.chan.out" pad.v="3"/>
+				<ledmeter angle="1" expand="true" bg.inherit="true">
+					<ledchannel id="mout_l" min="-36 db" max="+6 db" log="true" type="rms_peak" peak.visibility="true" value.color="left"/>
+					<ledchannel id="mout_r" min="-36 db" max="+6 db" log="true" type="rms_peak" peak.visibility="true" value.color="right"/>
+				</ledmeter>
+			</vbox>
+		</ui:if>
+
+		<!-- Controls and Signal -->
+		<vbox>
+			<!-- Controls -->
+			<group text="labels.controls" vexpand="true" ipadding="0">
+				<grid rows="8" cols="1">
+					<!-- mid/side -->
+					<hbox hfill="true" pad.v="4" pad.h="6">
+						<button id="ms" width.min="89" text="labels.chan.mid_side" hfill="true" ui:inject="Button_mid" height="19" visibility="ex :in_l"/>
+						<button id="mono" width.min="89" text="labels.signal.mono" hfill="true" pad.h="6" ui:inject="Button_mono" height="19" visibility="ex :in_l"/>
+						<button id="sphase" width.min="89" text="labels.signal.phase" fill="true" height="19" ui:inject="Button_orange"/>
+					</hbox>
+
+					<hsep pad.v="2" bg.color="bg" vreduce="true"/>
+
+					<!-- Frequency, Quality and Depth-->
+					<grid rows="6" cols="7" vexpand="true">
+						<cell cols="3"><void vexpand="true" pad.t="4"/></cell>
+						<cell rows="6">
+							<vsep pad.h="2" bg.color="bg" hreduce="true"/>
+						</cell>
+						<void vexpand="true" pad.t="4"/>
+						<cell rows="6">
+							<vsep pad.h="2" bg.color="bg" hreduce="true"/>
+						</cell>
+						<void vexpand="true" pad.t="4"/>
+
+						<label text="labels.frequency" pad.b="4"/>
+						<void pad.h="2" hreduce="true"/>
+						<button id="lflink" text="labels.link" ui:inject="Button_green"/>
+
+						<cell rows="2">
+							<label text="labels.quality"/>
+						</cell>
+
+						<cell rows="2">
+							<label text="labels.depth"/>
+						</cell>
+
+						<label text="labels.frequency.min"/>
+						<cell rows="3">
+							<void pad.h="2" hreduce="true"/>
+						</cell>
+						<label text="labels.frequency.max"/>
+
+						<ui:with pad.h="6" pad.v="4" scolor=":lflink ? 'green' : 'kscale'">
+							<knob id="lfs"/>
+							<knob id="lfe"/>
+						</ui:with>
+						<knob id="qfactor" pad.h="6" pad.v="4"/>
+						<knob id="depth" pad.h="6" pad.v="4"/>
+
+						<value id="lfs" width.min="56" sline="true"/>
+						<value id="lfe" width.min="56" sline="true"/>
+						<value id="qfactor" width.min="56" sline="true"/>
+						<value id="depth" width.min="56" sline="true"/>
+						<void vexpand="true" pad.b="4"/>
+						<void vexpand="true" pad.b="4"/>
+						<void vexpand="true" pad.b="4"/>
+						<void vexpand="true" pad.b="4"/>
+
+					</grid>
+					<hsep pad.v="2" bg.color="bg" vreduce="true"/>
+					<ui:with bright=":fb_on ? 1 : 0.75" bg.bright=":fb_on ? 1.0 : :const_bg_darken">
+						<void vexpand="true"/>
+						<hbox pad.v="4" pad.h="6">
+							<button id="fb_on" width.min="134" text="labels.feedback" hfill="true" ui:inject="Button_cyan" height="19"/>
+							<button id="fphase" width.min="134" text="labels.signal.phase" hfill="true" pad.l="6" ui:inject="Button_orange" height="19"/>
+						</hbox>
+						<hbox>
+							<hbox fill="false" pad.v="4">
+								<knob id="fgain" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
+								<vbox width.min="54">
+									<label text="labels.gain"/>
+									<value id="fgain" width="48" same_line="true"/>
+								</vbox>
+							</hbox>
+							<hbox fill="false" pad.v="4">
+								<knob id="fdelay" pad.r="6" scolor=":fb_on ? 'kscale' : 'cycle_inactive'"/>
+								<vbox width.min="54">
+									<label text="labels.delay"/>
+									<value id="fdelay" width="48" same_line="true"/>
+								</vbox>
+							</hbox>
+						</hbox>
+						<void vexpand="true"/>
+					</ui:with>
+				</grid>
+			</group>
+			<!-- Separator -->
+			<hsep pad.v="2" bg.color="bg" vreduce="true"/>
+			<!-- Signal -->
+			<group hexpand="true" text="groups.signal">
+				<grid rows="3" cols="5">
+					<label text="labels.chan.input"/>
+					<label text="labels.signal.dry"/>
+					<label text="labels.signal.wet"/>
+					<label text="labels.signal.drywet"/>
+					<label text="labels.chan.output"/>
+
+					<knob id="g_in" pad.h="6" pad.v="4"/>
+					<knob id="dry" scolor="dry" pad.h="6" pad.v="4"/>
+					<knob id="wet" scolor="wet" pad.h="6" pad.v="4"/>
+					<knob id="drywet" scolor="drywet" pad.h="6" pad.v="4"/>
+					<knob id="g_out" pad.h="6" pad.v="4"/>
+
+					<value id="g_in" width.min="56" sline="true"/>
+					<value id="dry" width.min="56" sline="true"/>
+					<value id="wet" width.min="56" sline="true"/>
+					<value id="drywet" width.min="56" sline="true"/>
+					<value id="g_out" width.min="56" sline="true"/>
+				</grid>
+			</group>
+		</vbox>
+	</hbox>
+</plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/manifest.json 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/manifest.json
--- 1.2.21-5/modules/lsp-plugins-phaser/res/manifest.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/manifest.json	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,14 @@
+{
+	"artifact": "${ARTIFACT_ID}",
+	"artifact_name": "${ARTIFACT_DESC}",
+	"full_name": "Linux Studio Plugins",
+	"short_name": "LSP",
+	"copyright": "Linux Studio Plugins Project",
+	"brand": "LSP",
+	"brand_id": "lsp",
+	"site": "https://lsp-plug.in/",
+	"email": "lsp.plugin@gmail.com",
+	"license": "LGPLv3",
+	"lv2_license": "http://usefulinc.com/doap/licenses/lgpl",
+	"version": "${ARTIFACT_VERSION}"
+}
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/xdg/apps/in.lsp_plug.lsp_plugins_phaser_mono.desktop 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/xdg/apps/in.lsp_plug.lsp_plugins_phaser_mono.desktop
--- 1.2.21-5/modules/lsp-plugins-phaser/res/xdg/apps/in.lsp_plug.lsp_plugins_phaser_mono.desktop	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/xdg/apps/in.lsp_plug.lsp_plugins_phaser_mono.desktop	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,15 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=Phaser Mono
+GenericName=Phaser
+GenericName[ru]=Фейзер
+Comment=This plugin allows to simpulate multi-stage mono phaser effect
+Comment[ru]=Данный плагин позволяет реализовать многоступенчатый моноэффект фейзера
+Exec=lsp-plugins-phaser-mono
+Icon=lsp-plugins
+Terminal=false
+StartupNotify=false
+Keywords=audio;sound;jackd;lsp-plugins;
+Categories=X-LSP-Plugins;
+NotShowIn=GNOME;
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/res/xdg/apps/in.lsp_plug.lsp_plugins_phaser_stereo.desktop 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/xdg/apps/in.lsp_plug.lsp_plugins_phaser_stereo.desktop
--- 1.2.21-5/modules/lsp-plugins-phaser/res/xdg/apps/in.lsp_plug.lsp_plugins_phaser_stereo.desktop	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/res/xdg/apps/in.lsp_plug.lsp_plugins_phaser_stereo.desktop	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,15 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=Phaser Stereo
+GenericName=Phaser
+GenericName[ru]=Фейзер
+Comment=This plugin allows to simpulate multi-stage stereo phaser effect
+Comment[ru]=Данный плагин позволяет реализовать многоступенчатый стереоэффект фейзера
+Exec=lsp-plugins-phaser-stereo
+Icon=lsp-plugins
+Terminal=false
+StartupNotify=false
+Keywords=audio;sound;jackd;lsp-plugins;
+Categories=X-LSP-Plugins;
+NotShowIn=GNOME;
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/src/Makefile 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/Makefile
--- 1.2.21-5/modules/lsp-plugins-phaser/src/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/Makefile	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,153 @@
+#
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+#
+# This file is part of lsp-plugins-phaser
+#
+# lsp-plugins-phaser is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# lsp-plugins-phaser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with lsp-plugins-phaser.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+# Command-line flag to silence nested $(MAKE).
+ifneq ($(VERBOSE),1)
+.SILENT:
+endif
+
+MODDIR                  = $(CURDIR)/..
+ROOTDIR                := $(MODDIR)
+CONFIG                 := $(MODDIR)/.config.mk
+
+# Project configuration
+include $(CONFIG)
+include $(MODDIR)/project.mk
+include $(MODDIR)/make/functions.mk
+
+# Injected plugin dependencies
+include $(ROOTDIR)/dependencies.mk
+include $(ROOTDIR)/plugins.mk
+
+ifeq ($(TEST),1)
+  UNIQ_DEPENDENCIES      := $(call uniq, $(DEPENDENCIES) $(ARTIFACT_ID) $(TEST_DEPENDENCIES))
+else
+  UNIQ_DEPENDENCIES      := $(call uniq, $(DEPENDENCIES) $(ARTIFACT_ID))
+endif
+
+# Artifact settings
+ifeq ($(BUILD_HOST),1)
+  override HOST                    = HOST_
+else
+  override HOST                    =
+endif
+
+DEPENDENCIES            = $(UNIQ_DEPENDENCIES)
+
+ARTIFACT_BIN            = $($(HOST)$(ARTIFACT_ID)_BIN)
+ARTIFACT_NAME           = $($(ARTIFACT_ID)_NAME)
+ARTIFACT_OBJ_META       = $(ARTIFACT_BIN)/$($(ARTIFACT_ID)_NAME)-meta.o
+ARTIFACT_OBJ_DSP        = $(ARTIFACT_BIN)/$($(ARTIFACT_ID)_NAME)-dsp.o
+ARTIFACT_OBJ_SHARED     = $(ARTIFACT_BIN)/$($(ARTIFACT_ID)_NAME)-shared.o
+ARTIFACT_OBJ_UI         = $(ARTIFACT_BIN)/$($(ARTIFACT_ID)_NAME)-ui.o
+ARTIFACT_OBJ_TEST       = $(ARTIFACT_BIN)/$($(ARTIFACT_ID)_NAME)-test.o
+ARTIFACT_CFLAGS         = $(foreach dep, $(DEPENDENCIES), $(if $($(dep)_CFLAGS), $($(dep)_CFLAGS)))
+ARTIFACT_OBJ            = \
+  $(ARTIFACT_OBJ_META) \
+  $(ARTIFACT_OBJ_DSP) \
+  $(ARTIFACT_OBJ_SHARED) \
+  $(call fcheck,ui,$(BUILD_FEATURES),$(ARTIFACT_OBJ_UI))
+
+CXX_SRC_STUB            = $(ARTIFACT_BIN)/stub.cpp
+CXX_SRC_MAIN_META       = $(call rwildcard, main/meta, *.cpp)
+CXX_SRC_MAIN_DSP        = $(call rwildcard, main/plug, *.cpp)
+CXX_SRC_MAIN_SHARED     = $(call rwildcard, main/shared, *.cpp)
+CXX_SRC_MAIN_UI         = $(call rwildcard, main/ui, *.cpp)
+CXX_SRC_TEST            = $(call rwildcard, test, *.cpp)
+CXX_SRC                 = $(CXX_SRC_MAIN_META) $(CXX_SRC_MAIN_DSP) $(CXX_SRC_MAIN_UI)
+
+OBJ_STUB                = $(patsubst %.cpp, %.o, $(CXX_SRC_STUB))
+OBJ_MAIN_META           = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_MAIN_META))
+OBJ_MAIN_DSP            = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_MAIN_DSP))
+OBJ_MAIN_SHARED         = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_MAIN_SHARED))
+OBJ_MAIN_UI             = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_MAIN_UI))
+OBJ_TEST                = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_TEST))
+OBJ                     = $(OBJ_MAIN_META) $(OBJ_MAIN_DSP) $(OBJ_MAIN_UI)
+
+XOBJ_MAIN_META          = $(if $(OBJ_MAIN_META),$(OBJ_MAIN_META),$(OBJ_STUB))
+XOBJ_MAIN_DSP           = $(if $(OBJ_MAIN_DSP),$(OBJ_MAIN_DSP),$(OBJ_STUB))
+XOBJ_MAIN_SHARED        = $(if $(OBJ_MAIN_SHARED),$(OBJ_MAIN_SHARED),$(OBJ_STUB))
+XOBJ_MAIN_UI            = $(if $(OBJ_MAIN_UI),$(OBJ_MAIN_UI),$(OBJ_STUB))
+XOBJ_TEST               = $(if $(OBJ_TEST),$(OBJ_TEST),$(OBJ_STUB))
+
+CXX_FILE                = $(patsubst $(ARTIFACT_BIN)/%.o,%.cpp, $(@))
+DEP_FILE                = $(patsubst %.o,%.d, $(@))
+
+CFLAGS_DEPS             = $(foreach dep, $(call uniq, $(DEPENDENCIES)), $(if $($(HOST)$(dep)_CFLAGS), $($(HOST)$(dep)_CFLAGS)))
+BUILD_ALL               = $(ARTIFACT_LIB) $(ARTIFACT_SLIB) $(ARTIFACT_PC)
+
+ifeq ($(TEST), 1)
+  CXX_SRC                += $(CXX_SRC_TEST)
+  ARTIFACT_OBJ           += $(ARTIFACT_OBJ_TEST)
+  DEPENDENCIES           += $(TEST_DEPENDENCIES)
+endif
+
+CXX_DEPS                = $(foreach src,$(CXX_SRC),$(patsubst %.cpp,$(ARTIFACT_BIN)/%.d,$(src)))
+CXX_DEPFILE             = $(patsubst $(ARTIFACT_BIN)/%.d,%.cpp,$(@))
+CXX_DEPTARGET           = $(patsubst $(ARTIFACT_BIN)/%.d,%.o,$(@))
+
+.DEFAULT_GOAL = all
+.PHONY: compile all install uninstall package
+
+# Compilation targets
+compile: $(ARTIFACT_OBJ)
+
+$(CXX_SRC_STUB):
+	echo "  gen  [$(ARTIFACT_NAME)] $(notdir $(CXX_FILE))"
+	echo "#include <stdio.h>" > $(CXX_SRC_STUB)
+
+$(OBJ_STUB): $(CXX_SRC_STUB)
+	echo "  $($(HOST)CXX)  [$(ARTIFACT_NAME)] $(CXX_FILE)"
+	mkdir -p $(dir $@)
+	$($(HOST)CXX) -o $(@) -c $(CXX_SRC_STUB) -fPIC $($(HOST)CXXFLAGS) $(ARTIFACT_MFLAGS) $(EXT_FLAGS) $(INCLUDE) $(CFLAGS_DEPS) -MMD -MP -MF $(DEP_FILE) -MT $(@)
+
+$(OBJ):
+	echo "  $($(HOST)CXX)  [$(ARTIFACT_NAME)] $(CXX_FILE)"
+	mkdir -p $(dir $@)
+	$($(HOST)CXX) -o $(@) -c $(CXX_FILE) -fPIC $($(HOST)CXXFLAGS) $(ARTIFACT_MFLAGS) $(EXT_FLAGS) $(INCLUDE) $(CFLAGS_DEPS) -MMD -MP -MF $(DEP_FILE) -MT $(@)
+
+# Linking targets
+$(ARTIFACT_OBJ_META): $(XOBJ_MAIN_META)
+	echo "  $($(HOST)LD)   [$(ARTIFACT_NAME)] $(notdir $(ARTIFACT_OBJ_META))"
+	$($(HOST)LD) -o $(ARTIFACT_OBJ_META) $($(HOST)LDFLAGS) $(XOBJ_MAIN_META)
+	
+$(ARTIFACT_OBJ_DSP): $(XOBJ_MAIN_DSP)
+	echo "  $($(HOST)LD)   [$(ARTIFACT_NAME)] $(notdir $(ARTIFACT_OBJ_DSP))"
+	$($(HOST)LD) -o $(ARTIFACT_OBJ_DSP) $($(HOST)LDFLAGS) $(XOBJ_MAIN_DSP)
+	
+$(ARTIFACT_OBJ_SHARED): $(XOBJ_MAIN_SHARED)
+	echo "  $($(HOST)LD)   [$(ARTIFACT_NAME)] $(notdir $(ARTIFACT_OBJ_SHARED))"
+	$($(HOST)LD) -o $(ARTIFACT_OBJ_SHARED) $($(HOST)LDFLAGS) $(XOBJ_MAIN_SHARED)
+	
+$(ARTIFACT_OBJ_UI): $(XOBJ_MAIN_UI)
+	echo "  $($(HOST)LD)   [$(ARTIFACT_NAME)] $(notdir $(ARTIFACT_OBJ_UI))"
+	$($(HOST)LD) -o $(ARTIFACT_OBJ_UI) $($(HOST)LDFLAGS) $(XOBJ_MAIN_UI)
+	
+$(ARTIFACT_OBJ_TEST): $(XOBJ_TEST)
+	echo "  $($(HOST)LD)   [$(ARTIFACT_NAME)] $(notdir $(ARTIFACT_OBJ_TEST))"
+	$($(HOST)LD) -o $(ARTIFACT_OBJ_TEST) $($(HOST)LDFLAGS) $(XOBJ_TEST)
+
+# Deletaged targets
+all install uninstall package:
+	$(MAKE) -C "$(LSP_PLUGIN_FW_PATH)" $(@) VERBOSE="$(VERBOSE)" CONFIG="$(CONFIG)"
+
+# Dependencies
+-include $(foreach objfile,$(OBJ) $(OBJ_STUB),$(patsubst %.o,%.d,$(objfile)))
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/src/doc/manuals/plugins/phaser.php 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/doc/manuals/plugins/phaser.php
--- 1.2.21-5/modules/lsp-plugins-phaser/src/doc/manuals/plugins/phaser.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/doc/manuals/plugins/phaser.php	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,64 @@
+<?php
+	plugin_header();
+	$m      =   ($PAGE == 'phaser_mono') ? 'm' : 's';
+?>
+
+<p>
+	This plugin allows to simulate the chorus phaser effect.
+</p>
+<p>
+	The effect can be reached by applying multiple all-pass filters with varying frequency in time which is
+	controlled by the low-frequency-oscillator (LFO). The processed signal mixed with the unprocessed signal
+	gives series of notches in the frequency domain which apply the corresponding character to the sound.
+	Additionally, more deep effect can be reached by passing the processed output to the input of the plugin
+	by using the feedback delay line. 
+</p>
+
+<p><b>'LFO' section:</b></p>
+<ul>
+	<li><b>Restart</b> - resets the current phase of the LFO to the initial value.</li>
+	<li><b>Filters</b> - the number of all-pass filters used.</li>
+	<li>
+		<b>Type</b> - allows to configure the type of the oscillation form <?= ($m == 'm') ? '' : 'for left and right channels respectively' ?>.
+		The oscillator can work in three modes: full period, the first half of the period (raising) and the second half of the period (falling).
+		When using half period mode, then additional crossfade is performed to make the smooth transform of the sound.
+	</li>
+	<li><b>Rate/Tempo</b> - the combo box that allows to select how to set the oscillation rate: using rate knob or tempo settings.</li>
+	<li><b>Rate knob</b> - the knob that allows to control the oscillation rate.</li>
+    <li><b>Tempo</b> - the knob that allows to control the tempo which can be used for computing oscillation rate.</li>
+    <li><b>Sync</b> - enables tempo synchronization with host or DAW.</li>
+    <li><b>Tap</b> - the button that allows to estimate a tempo by performing series of clicks on it.</li>
+    <li><b>Crossfade</b> - the part of the LFO period to perform the crossfade. Allows to avoid popping sound when LFO is used in half-period mode.</li>
+	<li><b>Overlap</b> - the overlap amount between paths of all-pass filters.</li>
+    <li><b>Phase</b> - the initial phase of the LFO, used by the <b>Restart</b> button.</li>
+    <?php if ($m == 's') { ?>
+    <li><b>Difference</b> the phase difference between left and right (or mid and side) channels.</li>
+    <?php } ?>
+	<li><b>Phase range</b> - the phase range used to evenly assign the phase for each all-pass filter.</li>
+</ul>
+
+<p><b>'Controls' section:</b></p>
+<ul>
+	<?php if ($m == 's') { ?>
+	<li><b>Mid/Side</b> - switches the effect to work on Mid/Side components of the signal instead of Left and Right.</li>
+	<li><b>Mono</b> - allows to test the output of the plugin for mono compatibility.</li>
+	<?php } ?>
+	<li><b>Phase</b> - the button that allows to enable phase inversion of the processed signal which is added to original one.</li>
+	<li><b>Frequency</b> - set of two knobs that allow to set the frequency range for all-pass filters.</li>
+	<li><b>Frequency Link</b> - button that allows to link frequency buttons together to keep constant logarithmic frequency range.</li>
+	<li><b>Quality</b> - the quality factor of all-pass filters.</li>
+	<li><b>Depth</b> - the amount of processed signal added to the unprocessed signal.</li>
+	<li><b>Feedback</b> - the button that switches on the feedback chain.</li>
+    <li><b>Feedback Phase</b> - the button that allows to invert the polarity of the feedback signal.</li>
+	<li><b>Feedback</b> - the knob that controls the amount of signal being fed back.</li>
+    <li><b>Feedback Delay</b> - the additional delay which can be applied to the feedback signal.</li>
+</ul>
+
+<p><b>'Signal' section:</b></p>
+<ul>
+	<li><b>Input</b> - the amount of input signal.</li>
+	<li><b>Dry</b> - the amount of dry (unprocessed) signal.</li>
+	<li><b>Wet</b> - the amount of wet (processed) signal.</li>
+	<li><b>Dry/Wet</b> - the balance between dry (unprocessed) signal and mixed signal formed by Dry/Wet knobs.</li>
+	<li><b>Output</b> - the output volume of the plugin.</li>
+</ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/src/main/meta/phaser.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/main/meta/phaser.cpp
--- 1.2.21-5/modules/lsp-plugins-phaser/src/main/meta/phaser.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/main/meta/phaser.cpp	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,335 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugins-phaser
+ * Created on: 10 мар 2025 г.
+ *
+ * lsp-plugins-phaser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugins-phaser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugins-phaser. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/meta/ports.h>
+#include <lsp-plug.in/shared/meta/developers.h>
+#include <private/meta/phaser.h>
+
+#define LSP_PLUGINS_PHASER_VERSION_MAJOR       1
+#define LSP_PLUGINS_PHASER_VERSION_MINOR       0
+#define LSP_PLUGINS_PHASER_VERSION_MICRO       1
+
+#define LSP_PLUGINS_PHASER_VERSION  \
+    LSP_MODULE_VERSION( \
+        LSP_PLUGINS_PHASER_VERSION_MAJOR, \
+        LSP_PLUGINS_PHASER_VERSION_MINOR, \
+        LSP_PLUGINS_PHASER_VERSION_MICRO  \
+    )
+
+namespace lsp
+{
+    namespace meta
+    {
+        #define LFO_LIST \
+            { "Triangular",             "phaser.osc.triangular"             }, \
+            { "Sine",                   "phaser.osc.sine"                   }, \
+            { "Stepped Sine",           "phaser.osc.stepped_sine"           }, \
+            { "Cubic",                  "phaser.osc.cubic"                  }, \
+            { "Stepped Cubic",          "phaser.osc.stepped_cubic"          }, \
+            { "Parabolic",              "phaser.osc.parabolic"              }, \
+            { "Reverse Parabolic",      "phaser.osc.reverse_parabolic"      }, \
+            { "Logarithmic",            "phaser.osc.logarithmic"            }, \
+            { "Reverse Logarithmic",    "phaser.osc.reverse_logarithmic"    }, \
+            { "Square Root",            "phaser.osc.square_root"            }, \
+            { "Reverse Square Root",    "phaser.osc.reverse_square_root"    }, \
+            { "Circular",               "phaser.osc.circular"               }, \
+            { "Reverse Circular",       "phaser.osc.reverse_circular"       }, \
+            { NULL, NULL }
+
+        static const port_item_t osc_functions[] =
+        {
+            LFO_LIST
+        };
+
+        static const port_item_t additional_osc_functions[] =
+        {
+            { "Same",               "phaser.osc.same"                   },
+            LFO_LIST
+        };
+
+        static const port_item_t osc_periods[] =
+        {
+            { "Full",                   "phaser.period.full"                },
+            { "First",                  "phaser.period.first"               },
+            { "Last",                   "phaser.period.last"                },
+            { NULL, NULL }
+        };
+
+        static const port_item_t rate_type[] =
+        {
+            { "Rate",                   "phaser.rate.rate"                  },
+            { "Tempo",                  "phaser.rate.tempo"                 },
+            { "Static",                 "phaser.rate.static"                },
+            { NULL, NULL }
+        };
+
+        static const port_item_t filters_list[] =
+        {
+            { "1",                      NULL                                },
+            { "2",                      NULL                                },
+            { "3",                      NULL                                },
+            { "4",                      NULL                                },
+            { "5",                      NULL                                },
+            { "6",                      NULL                                },
+            { "7",                      NULL                                },
+            { "8",                      NULL                                },
+            { NULL,                     NULL                                }
+        };
+
+        static const port_item_t filter_slopes[] =
+        {
+            { "off",        "eq.slope.off"      },
+            { "12 dB/oct",  "eq.slope.12dbo"    },
+            { "24 dB/oct",  "eq.slope.24dbo"    },
+            { "36 dB/oct",  "eq.slope.36dbo"    },
+            { NULL, NULL }
+        };
+
+        //-------------------------------------------------------------------------
+        // Plugin metadata
+
+        #define FILTER_METER_MONO(id, label) \
+            METER("fmp" id, "Filter meter" label " phase", U_DEG, phaser::PHASE), \
+            METER("fms" id, "Filter meter" label " shift", U_NONE, phaser::SHIFT), \
+            METER("fmf" id, "Filter meter" label " frequency", U_MSEC, phaser::LFO_FREQ)
+
+        #define FILTER_METER_STEREO(id, label) \
+            FILTER_METER_MONO(id "l", label " left"), \
+            FILTER_METER_MONO(id "r", label " right")
+
+        #define TEMPO_SETTINGS \
+            LOG_CONTROL("rate", "Rate", "Rate", U_HZ, phaser::RATE), \
+            AMP_GAIN10("depth", "Depth", "Depth", GAIN_AMP_0_DB), \
+            CONTROL("frac", "Time fraction", "Frac", U_BAR, phaser::FRACTION), \
+            CONTROL("denom", "Time fraction denominator", "Denom", U_BAR, phaser::DENOMINATOR), \
+            CONTROL("tempo", "Tempo", "Tempo", U_BPM, phaser::TEMPO), \
+            SWITCH("sync", "Tempo sync", "Sync tempo", 0.0f), \
+            COMBO("time", "Time computing method", "Method", 0, rate_type), \
+            TRIGGER("reset", "Reset phase to initial value", "Reset")
+
+        #define FEEDBACK_SETTINGS \
+            SWITCH("fb_on", "Feedback on", "Feed On", 0), \
+            CONTROL("fgain", "Feedback gain", "Feed gain", U_GAIN_AMP, phaser::FEEDBACK_GAIN), \
+            CONTROL("fdelay", "Feedback delay", "Feed delay", U_MSEC, phaser::FEEDBACK_DELAY), \
+            SWITCH("fphase", "Feedback phase switch", "Feed phase", 0.0f)
+
+        static const port_t phaser_mono_ports[] =
+        {
+            // Input and output audio ports
+            PORTS_MONO_PLUGIN,
+
+            // Bypass
+            BYPASS,
+
+            // Operating modes
+            SWITCH("sphase", "Signal phase switch", "Phase", 0.0f),
+            COMBO("hpm", "High-pass filter mode", "HPF mode", 0, filter_slopes),
+            LOG_CONTROL("hpf", "High-pass filter frequency", "HPF freq", U_HZ, phaser::HPF),
+            COMBO("lpm", "Low-pass filter mode", "LPF mode", 0, filter_slopes),
+            LOG_CONTROL("lpf", "Low-pass filter frequency", "LPF freq", U_HZ, phaser::LPF),
+
+            // Tempo/rate controls
+            TEMPO_SETTINGS,
+
+            // LFO settings
+            COMBO("filters", "Number of filters", "Num filters", phaser::FILTERS_DFL - phaser::FILTERS_MIN, filters_list),
+            LOG_CONTROL("qfactor", "Filter quality (Q factor)", "Q Factor", U_NONE, phaser::FILTER_QUALITY),
+            CONTROL("xfade", "Crossfade", "Xfade", U_PERCENT, phaser::CROSSFADE),
+            COMBO("type", "LFO type", "LFO type", 1, osc_functions),
+            COMBO("period", "LFO period", "LFO period", 0, osc_periods),
+            CONTROL("lo", "LFO overlap", "LFO overlap", U_PERCENT, phaser::OVERLAP),
+            LOG_CONTROL_DFL("lfs", "LFO frequency start", "LFO start", U_HZ, phaser::LFO_FREQ, phaser::LFO_FREQ_START),
+            LOG_CONTROL_DFL("lfe", "LFO frequency end", "LFO end", U_HZ, phaser::LFO_FREQ, phaser::LFO_FREQ_END),
+            SWITCH("lflink", "Link LFO start and end frequency", "LFO link", 0),
+            CYC_CONTROL("lip", "LFO initial phase", "LFO phase", U_DEG, phaser::PHASE),
+            CYC_CONTROL("lfp", "Inter-filter phase range", "Inter-phase", U_DEG, phaser::FILTER_PHASE),
+            MESH("lgr", "LFO graph", phaser::FILTERS_MAX + 1, phaser::LFO_MESH_SIZE),
+
+            // Feedback chain
+            FEEDBACK_SETTINGS,
+
+            // Loudness control
+            IN_GAIN,
+            DRY_GAIN(GAIN_AMP_M_INF_DB),
+            WET_GAIN(GAIN_AMP_0_DB),
+            DRYWET(100.0f),
+            OUT_GAIN,
+
+            // Filter meters
+            FILTER_METER_MONO("_1", " 1"),
+            FILTER_METER_MONO("_2", " 2"),
+            FILTER_METER_MONO("_3", " 3"),
+            FILTER_METER_MONO("_4", " 4"),
+            FILTER_METER_MONO("_5", " 5"),
+            FILTER_METER_MONO("_6", " 6"),
+            FILTER_METER_MONO("_7", " 7"),
+            FILTER_METER_MONO("_8", " 8"),
+
+            // Gain meters
+            METER_GAIN("min", "Input gain", GAIN_AMP_P_48_DB),
+            METER_GAIN("mout", "Output gain", GAIN_AMP_P_48_DB),
+
+            PORTS_END
+        };
+
+        static const port_t phaser_stereo_ports[] =
+        {
+            // Input and output audio ports
+            PORTS_STEREO_PLUGIN,
+
+            // Bypass
+            BYPASS,
+
+            // Operating modes
+            SWITCH("mono", "Test for mono compatibility", "Mono", 0),
+            SWITCH("ms", "Mid/Side mode switch", "M/S mode", 0.0f),
+            SWITCH("sphase", "Signal phase switch", "Phase", 0.0f),
+            COMBO("hpm", "High-pass filter mode", "HPF mode", 0, filter_slopes),
+            LOG_CONTROL("hpf", "High-pass filter frequency", "HPF freq", U_HZ, phaser::HPF),
+            COMBO("lpm", "Low-pass filter mode", "LPF mode", 0, filter_slopes),
+            LOG_CONTROL("lpf", "Low-pass filter frequency", "LPF freq", U_HZ, phaser::LPF),
+
+            // Tempo/rate controls
+            TEMPO_SETTINGS,
+
+            // LFO settings
+            COMBO("filters", "Number of filters", "Num filters", phaser::FILTERS_DFL - phaser::FILTERS_MIN, filters_list),
+            LOG_CONTROL("qfactor", "Filter quality (Q factor)", "Q Factor", U_NONE, phaser::FILTER_QUALITY),
+            CONTROL("xfade", "Crossfade", "Xfade", U_PERCENT, phaser::CROSSFADE),
+            COMBO("type", "LFO type", "LFO type", 1, osc_functions),
+            COMBO("period", "LFO period", "LFO period", 0, osc_periods),
+            COMBO("atype", "Additional LFO type", "LFO2 type", 0, additional_osc_functions),
+            COMBO("aperiod", "Additional LFO period", "LFO2 period", 0, osc_periods),
+            CONTROL("lo", "LFO overlap", "LFO overlap", U_PERCENT, phaser::OVERLAP),
+            LOG_CONTROL_DFL("lfs", "LFO frequency start", "LFO start", U_HZ, phaser::LFO_FREQ, phaser::LFO_FREQ_START),
+            LOG_CONTROL_DFL("lfe", "LFO frequency end", "LFO end", U_HZ, phaser::LFO_FREQ, phaser::LFO_FREQ_END),
+            SWITCH("lflink", "Link LFO start and end frequency", "LFO link", 0),
+            CYC_CONTROL("lip", "LFO initial phase", "LFO phase", U_DEG, phaser::PHASE),
+            CYC_CONTROL("lfp", "Inter-filter phase range", "Inter-phase", U_DEG, phaser::FILTER_PHASE),
+            CYC_CONTROL("lcp", "Inter-channel phase", "Chan phase", U_DEG, phaser::CHANNEL_PHASE),
+            MESH("lgr", "LFO graph", phaser::FILTERS_MAX * 2 + 1, phaser::LFO_MESH_SIZE),
+
+            // Feedback chain
+            FEEDBACK_SETTINGS,
+
+            // Loudness control
+            IN_GAIN,
+            DRY_GAIN(GAIN_AMP_M_INF_DB),
+            WET_GAIN(GAIN_AMP_0_DB),
+            DRYWET(100.0f),
+            OUT_GAIN,
+
+            // Filter meters
+            FILTER_METER_STEREO("_1", " 1"),
+            FILTER_METER_STEREO("_2", " 2"),
+            FILTER_METER_STEREO("_3", " 3"),
+            FILTER_METER_STEREO("_4", " 4"),
+            FILTER_METER_STEREO("_5", " 5"),
+            FILTER_METER_STEREO("_6", " 6"),
+            FILTER_METER_STEREO("_7", " 7"),
+            FILTER_METER_STEREO("_8", " 8"),
+
+            // Gain meters
+            METER_GAIN("min_l", "Input gain left",  GAIN_AMP_P_48_DB),
+            METER_GAIN("mout_l", "Output gain left",  GAIN_AMP_P_48_DB),
+            METER_GAIN("min_r", "Input gain right",  GAIN_AMP_P_48_DB),
+            METER_GAIN("mout_r", "Output gain right", GAIN_AMP_P_48_DB),
+
+            PORTS_END
+        };
+
+        static const int plugin_classes[]       = { C_PHASER, -1 };
+        static const int clap_features_mono[]   = { CF_AUDIO_EFFECT, CF_PHASER, CF_MONO, -1 };
+        static const int clap_features_stereo[] = { CF_AUDIO_EFFECT, CF_PHASER, CF_STEREO, -1 };
+
+        const meta::bundle_t phaser_bundle =
+        {
+            "phaser",
+            "Phaser",
+            B_EFFECTS,
+            "iqiXtMQckak",
+            "This plugin allows to simpulate multi-stage phaser effect"
+        };
+
+        const plugin_t phaser_mono =
+        {
+            "Phaser Mono",
+            "Phaser Mono",
+            "Phaser Mono",
+            "PH1M",
+            &developers::v_sadovnikov,
+            "phaser_mono",
+            {
+                LSP_LV2_URI("phaser_mono"),
+                LSP_LV2UI_URI("phaser_mono"),
+                "ph1m",
+                LSP_VST3_UID("ph1m    ph1m"),
+                LSP_VST3UI_UID("ph1m    ph1m"),
+                LSP_LADSPA_PHASER_BASE + 0,
+                LSP_LADSPA_URI("phaser_mono"),
+                LSP_CLAP_URI("phaser_mono"),
+                LSP_GST_UID("phaser_mono"),
+            },
+            LSP_PLUGINS_PHASER_VERSION,
+            plugin_classes,
+            clap_features_mono,
+            E_DUMP_STATE | E_INLINE_DISPLAY,
+            phaser_mono_ports,
+            "effects/phaser.xml",
+            "effects/phaser",
+            mono_plugin_port_groups,
+            &phaser_bundle
+        };
+
+        const plugin_t phaser_stereo =
+        {
+            "Phaser Stereo",
+            "Phaser Stereo",
+            "Phaser Stereo",
+            "PH1S",
+            &developers::v_sadovnikov,
+            "phaser_stereo",
+            {
+                LSP_LV2_URI("phaser_stereo"),
+                LSP_LV2UI_URI("phaser_stereo"),
+                "ph1s",
+                LSP_VST3_UID("ph1s    ph1s"),
+                LSP_VST3UI_UID("ph1s    ph1s"),
+                LSP_LADSPA_PHASER_BASE + 1,
+                LSP_LADSPA_URI("phaser_stereo"),
+                LSP_CLAP_URI("phaser_stereo"),
+                LSP_GST_UID("phaser_stereo"),
+            },
+            LSP_PLUGINS_PHASER_VERSION,
+            plugin_classes,
+            clap_features_stereo,
+            E_DUMP_STATE | E_INLINE_DISPLAY,
+            phaser_stereo_ports,
+            "effects/phaser.xml",
+            "effects/phaser",
+            stereo_plugin_port_groups,
+            &phaser_bundle
+        };
+    } /* namespace meta */
+} /* namespace lsp */
+
+
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/src/main/plug/phaser.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/main/plug/phaser.cpp
--- 1.2.21-5/modules/lsp-plugins-phaser/src/main/plug/phaser.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/main/plug/phaser.cpp	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,1253 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugins-phaser
+ * Created on: 10 мар 2025 г.
+ *
+ * lsp-plugins-phaser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugins-phaser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugins-phaser. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <lsp-plug.in/dsp-units/misc/quickmath.h>
+#include <lsp-plug.in/dsp-units/units.h>
+#include <lsp-plug.in/plug-fw/meta/func.h>
+#include <lsp-plug.in/shared/debug.h>
+#include <lsp-plug.in/shared/id_colors.h>
+
+#include <private/plugins/phaser.h>
+
+namespace lsp
+{
+    namespace plugins
+    {
+        static constexpr uint32_t   BUFFER_SIZE             = 0x400;
+        static constexpr uint32_t   PHASE_MAX               = 0x80000000;
+        static constexpr uint32_t   PHASE_MASK              = PHASE_MAX - 1;
+        static constexpr float      PHASE_COEFF             = 1.0f / float(PHASE_MAX);
+
+        //---------------------------------------------------------------------
+        // Plugin factory
+        static const meta::plugin_t *plugins[] =
+        {
+            &meta::phaser_mono,
+            &meta::phaser_stereo
+        };
+
+        static plug::Module *plugin_factory(const meta::plugin_t *meta)
+        {
+            return new phaser(meta);
+        }
+
+        static plug::Factory factory(plugin_factory, plugins, 2);
+
+        //---------------------------------------------------------------------
+        // Implementation
+        dspu::lfo::function_t phaser::all_lfo_functions[] =
+        {
+            dspu::lfo::triangular,
+            dspu::lfo::sine,
+            dspu::lfo::step_sine,
+            dspu::lfo::cubic,
+            dspu::lfo::step_cubic,
+            dspu::lfo::parabolic,
+            dspu::lfo::rev_parabolic,
+            dspu::lfo::logarithmic,
+            dspu::lfo::rev_logarithmic,
+            dspu::lfo::sqrt,
+            dspu::lfo::rev_sqrt,
+            dspu::lfo::circular,
+            dspu::lfo::rev_circular
+        };
+
+
+        phaser::phaser(const meta::plugin_t *meta):
+            Module(meta)
+        {
+            // Compute the number of audio channels by the number of inputs
+            nChannels           = 0;
+            nFilters            = 0;
+            for (const meta::port_t *p = meta->ports; p->id != NULL; ++p)
+                if (meta::is_audio_in_port(p))
+                    ++nChannels;
+
+            // Cleanup data
+            vChannels           = NULL;
+
+
+            sLfo.fOverlap       = 0.0f;
+            sLfo.fOldMinFreq    = meta::phaser::LFO_FREQ_START;
+            sLfo.fMinFreq       = meta::phaser::LFO_FREQ_START;
+            sLfo.fOldMaxFreq    = meta::phaser::LFO_FREQ_END;
+            sLfo.fMaxFreq       = meta::phaser::LFO_FREQ_END;
+            sLfo.nOldInitPhase  = 0.0f;
+            sLfo.nInitPhase     = 0;
+            sLfo.nPhase         = 0;
+            sLfo.nOldPhaseStep  = 0;
+            sLfo.nPhaseStep     = 0;
+            sLfo.fIFilterPhase  = 0.0f;
+            sLfo.fIChanPhase    = 0;
+
+            sLfo.bSyncMesh      = true;
+
+            sLfo.pOverlap       = NULL;
+            sLfo.pMinFreq       = NULL;
+            sLfo.pMaxFreq       = NULL;
+            sLfo.pInitPhase     = NULL;
+            sLfo.pIFilterPhase  = NULL;
+            sLfo.pIChannelPhase = NULL;
+            sLfo.pMesh          = NULL;
+
+            vBuffer             = NULL;
+            vLfoPhase           = NULL;
+
+            fRevSampleRate      = 0.0f;
+            fRevQuality         = 0.5f;
+            fRate               = 0.0f;
+            fOldDepth           = GAIN_AMP_0_DB;
+            fDepth              = GAIN_AMP_0_DB;
+            nCrossfade          = 0;
+            fCrossfade          = 0.0f;
+            fRevCrossfade       = 0.0f;
+            fOldInGain          = GAIN_AMP_0_DB;
+            fInGain             = fOldInGain;
+            fOldDryGain         = GAIN_AMP_M_INF_DB;
+            fDryGain            = fOldDryGain;
+            fOldWetGain         = GAIN_AMP_0_DB;
+            fWetGain            = fOldWetGain;
+            fOldFeedGain        = GAIN_AMP_M_INF_DB;
+            fFeedGain           = GAIN_AMP_M_INF_DB;
+            fOldFeedDelay       = 0.0f;
+            fFeedDelay          = 0.0f;
+
+            bMS                 = false;
+            bMono               = false;
+            bCustomLfo          = false;
+            bUpdateFilters      = true;
+
+            // Ports
+            pBypass             = NULL;
+            pMono               = NULL;
+            pMS                 = NULL;
+            pInvPhase           = NULL;
+            pHpfMode            = NULL;
+            pHpfFreq            = NULL;
+            pLpfMode            = NULL;
+            pLpfFreq            = NULL;
+
+            pRate               = NULL;
+            pDepth              = NULL;
+            pFraction           = NULL;
+            pTempo              = NULL;
+            pTempoSync          = NULL;
+            pTimeMode           = NULL;
+            pReset              = NULL;
+
+            pFilters            = NULL;
+            pFilterQuality      = NULL;
+            pCrossfade          = NULL;
+
+            pFeedOn             = NULL;
+            pFeedGain           = NULL;
+            pFeedDelay          = NULL;
+            pFeedPhase          = NULL;
+
+            pInGain             = NULL;
+            pDryGain            = NULL;
+            pWetGain            = NULL;
+            pDryWet             = NULL;
+            pOutGain            = NULL;
+
+            pIDisplay           = NULL;
+
+            pData               = NULL;
+        }
+
+        phaser::~phaser()
+        {
+            do_destroy();
+        }
+
+        void phaser::init(plug::IWrapper *wrapper, plug::IPort **ports)
+        {
+            // Call parent class for initialization
+            Module::init(wrapper, ports);
+
+            // Estimate the number of bytes to allocate
+            const size_t szof_channels  = align_size(sizeof(channel_t) * nChannels, OPTIMAL_ALIGN);
+            const size_t buf_sz         = BUFFER_SIZE * sizeof(float);
+            const size_t mesh_buf_sz    = align_size(meta::phaser::LFO_MESH_SIZE * sizeof(float), OPTIMAL_ALIGN);
+            const size_t to_alloc       =
+                szof_channels +         // vChannels
+                buf_sz * 4 +            // vBuffer
+                mesh_buf_sz +           // vLfoPhase
+                mesh_buf_sz * 2 +       // channel_t::vLfoMesh
+                nChannels * buf_sz;     // channel_t::vBuffer
+
+            // Allocate memory-aligned data
+            uint8_t *ptr            = alloc_aligned<uint8_t>(pData, to_alloc, OPTIMAL_ALIGN);
+            if (ptr == NULL)
+                return;
+            lsp_guard_assert(uint8_t *save   = ptr);
+
+            // Initialize pointers to channels and temporary buffer
+            vChannels               = advance_ptr_bytes<channel_t>(ptr, szof_channels);
+            vBuffer                 = advance_ptr_bytes<float>(ptr, buf_sz * 4);
+            vLfoPhase               = advance_ptr_bytes<float>(ptr, mesh_buf_sz);
+
+            // Initialize channels
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                channel_t *c            = &vChannels[i];
+
+                c->sBypass.construct();
+                c->sFeedback.construct();
+                c->sEq.construct();
+
+                c->sEq.init(2, 0);
+                c->sEq.set_mode(dspu::EQM_IIR);
+
+                for (size_t j=0; j<meta::phaser::FILTERS_MAX; ++j)
+                {
+                    filter_t *f             = &c->vFilters[j];
+
+                    f->sAllpass[0]          = 0.0f;
+                    f->sAllpass[1]          = 0.0f;
+                    f->sAllpass[2]          = 0.0f;
+                    f->sAllpass[3]          = 0.0f;
+
+                    f->nPhase               = 0;
+                    f->nActPhase            = 0;
+                    f->fNormShift           = 0.0f;
+                    f->fNormScale           = 0.0f;
+                    f->fOutPhase            = 0.0f;
+                    f->fOutShift            = 0.0f;
+                    f->fOutFreq             = 0.0f;
+
+                    f->pPhase               = NULL;
+                    f->pShift               = NULL;
+                    f->pOutFreq             = NULL;
+                }
+
+                c->nLfoType             = -1;
+                c->nLfoPeriod           = -1;
+                c->vLfoArg[0]           = 0;
+                c->vLfoArg[1]           = 0;
+                c->pLfoFunc             = NULL;
+                c->vLfoMesh             = advance_ptr_bytes<float>(ptr, mesh_buf_sz);
+
+                c->vIn                  = NULL;
+                c->vOut                 = NULL;
+                c->vBuffer              = advance_ptr_bytes<float>(ptr, buf_sz);
+
+                c->pIn                  = NULL;
+                c->pOut                 = NULL;
+                c->pInLevel             = NULL;
+                c->pOutLevel            = NULL;
+                c->pLfoType             = NULL;
+                c->pLfoPeriod           = NULL;
+            }
+
+            lsp_assert(ptr <= &save[to_alloc]);
+
+            // Bind ports
+            size_t port_id      = 0;
+
+            // Bind I/O ports
+            lsp_trace("Binding I/O ports");
+            for (size_t i=0; i<nChannels; ++i)
+                BIND_PORT(vChannels[i].pIn);
+            for (size_t i=0; i<nChannels; ++i)
+                BIND_PORT(vChannels[i].pOut);
+
+            // Bind bypass
+            lsp_trace("Binding bypass ports");
+            BIND_PORT(pBypass);
+
+            // Operating modes
+            lsp_trace("Binding operating modes");
+            if (nChannels > 1)
+            {
+                BIND_PORT(pMono);              // Mono compatibility test
+                BIND_PORT(pMS);                // Mid/Side switch
+            }
+            BIND_PORT(pInvPhase);
+            BIND_PORT(pHpfMode);
+            BIND_PORT(pHpfFreq);
+            BIND_PORT(pLpfMode);
+            BIND_PORT(pLpfFreq);
+
+            // Tempo/rate controls
+            lsp_trace("Binding tempo/rate controls");
+            BIND_PORT(pRate);
+            BIND_PORT(pDepth);
+            BIND_PORT(pFraction);
+            SKIP_PORT("Denominator");   // Skip denominator
+            BIND_PORT(pTempo);
+            BIND_PORT(pTempoSync);
+            BIND_PORT(pTimeMode);
+            BIND_PORT(pReset);
+
+            // LFO settings
+            lsp_trace("Binding LFO settings");
+            BIND_PORT(pFilters);
+            BIND_PORT(pFilterQuality);
+            BIND_PORT(pCrossfade);
+
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                channel_t *c = &vChannels[i];
+                BIND_PORT(c->pLfoType);
+                BIND_PORT(c->pLfoPeriod);
+            }
+
+            BIND_PORT(sLfo.pOverlap);
+            BIND_PORT(sLfo.pMinFreq);
+            BIND_PORT(sLfo.pMaxFreq);
+            SKIP_PORT("Frequency link");
+            BIND_PORT(sLfo.pInitPhase);
+            BIND_PORT(sLfo.pIFilterPhase);
+            if (nChannels > 1)
+                BIND_PORT(sLfo.pIChannelPhase);
+            BIND_PORT(sLfo.pMesh);
+
+            // Feedback settings
+            lsp_trace("Binding feedback settings");
+            BIND_PORT(pFeedOn);
+            BIND_PORT(pFeedGain);
+            BIND_PORT(pFeedDelay);
+            BIND_PORT(pFeedPhase);
+
+            // Loudness control settings
+            lsp_trace("Binding loudness control settings");
+            BIND_PORT(pInGain);
+            BIND_PORT(pDryGain);
+            BIND_PORT(pWetGain);
+            BIND_PORT(pDryWet);
+            BIND_PORT(pOutGain);
+
+            // Filter meters
+            for (size_t i=0; i<meta::phaser::FILTERS_MAX; ++i)
+            {
+                for (size_t j=0; j<nChannels; ++j)
+                {
+                    filter_t *f             = &vChannels[j].vFilters[i];
+
+                    BIND_PORT(f->pPhase);
+                    BIND_PORT(f->pShift);
+                    BIND_PORT(f->pOutFreq);
+                }
+            }
+
+            // Bind signal meters
+            lsp_trace("Binding signal meters");
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                channel_t *c        = &vChannels[i];
+
+                BIND_PORT(c->pInLevel);
+                BIND_PORT(c->pOutLevel);
+            }
+
+            // Fill LFO phase data
+            float phase_k           = 360.0f / (meta::phaser::LFO_MESH_SIZE - 1);
+            for (size_t i=0; i<meta::phaser::LFO_MESH_SIZE; ++i)
+                vLfoPhase[i]            = i * phase_k;
+        }
+
+        void phaser::destroy()
+        {
+            Module::destroy();
+            do_destroy();
+        }
+
+        void phaser::do_destroy()
+        {
+            // Destroy channels
+            if (vChannels != NULL)
+            {
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    channel_t *c    = &vChannels[i];
+
+                    c->sBypass.destroy();
+                    c->sFeedback.destroy();
+                    c->sEq.destroy();
+                }
+                vChannels   = NULL;
+            }
+
+            // Destroy inline display buffer
+            if (pIDisplay != NULL)
+            {
+                pIDisplay->destroy();
+                pIDisplay   = NULL;
+            }
+
+            // Free previously allocated data chunk
+            if (pData != NULL)
+            {
+                free_aligned(pData);
+                pData       = NULL;
+            }
+        }
+
+        inline uint32_t phaser::phase_to_int(float phase)
+        {
+            if (phase >= 360.0f)
+                phase      -= 360.0f;
+            return float(PHASE_MAX) * (phase / 360.0f);
+        }
+
+        inline float phaser::process_allpass(float *d, float freq, float s)
+        {
+            // Update biquad filter
+            const float cc      = dspu::quick_cosf(fRevSampleRate * freq);
+            const float alpha   = sqrtf(1.0f - cc*cc) * fRevQuality;
+
+            const float k_b0    = 1.0f / (1.0f + alpha);
+            const float b0      = (1.0f - alpha) * k_b0;
+            const float b1      = 2.0f * cc * k_b0;
+
+            // Apply processing
+            const float s2      = b0 * s + d[0];
+
+            // Shift buffer
+            d[0]                = d[1] + b1 * (s2 - s);
+            d[1]                = s - b0 * s2;
+
+            return s2;
+        }
+
+        void phaser::update_sample_rate(long sr)
+        {
+            plug::Module::update_sample_rate(sr);
+
+            // Update sample rate for the bypass processors
+            fRevSampleRate      = 2.0f * M_PI / float(fSampleRate);
+            size_t max_feedback = dspu::millis_to_samples(sr, meta::phaser::FEEDBACK_DELAY_MAX);
+
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                channel_t *c    = &vChannels[i];
+                c->sBypass.init(sr);
+                c->sFeedback.init(max_feedback + BUFFER_SIZE*2);
+                c->sEq.set_sample_rate(sr);
+
+                // Reset all-pass filters memory
+                for (size_t j=0; j<meta::phaser::FILTERS_MAX; ++j)
+                {
+                    filter_t *f             = &c->vFilters[j];
+
+                    f->sAllpass[0]          = 0.0f;
+                    f->sAllpass[1]          = 0.0f;
+                    f->sAllpass[2]          = 0.0f;
+                    f->sAllpass[3]          = 0.0f;
+                }
+            }
+        }
+
+        void phaser::update_settings()
+        {
+            // Pre-compute several attributes
+            const float in_gain     = pInGain->value();
+            const float out_gain    = pOutGain->value();
+            const bool bypass       = pBypass->value() >= 0.5f;
+            bool fb_on              = pFeedOn->value() >= 0.5f;
+            float feed_gain         = (fb_on) ? pFeedGain->value() : 0.0f;
+            const bool mid_side     = (pMS != NULL) ? pMS->value() >= 0.5f : false;
+            float crossfade         = pCrossfade->value() * 0.01f;
+
+            // Compute LFO rate and phase
+            float rate              = 0.0f;
+            uint32_t mode           = pTimeMode->value();
+            sLfo.nOldPhaseStep      = sLfo.nPhaseStep;
+            fOldDepth               = fDepth;
+            fDepth                  = pDepth->value();
+
+            switch (mode)
+            {
+                case meta::phaser::MODE_TEMPO:
+                {
+                    float tempo             = (pTempoSync->value() >= 0.5f) ? pWrapper->position()->beatsPerMinute : pTempo->value();
+                    rate                    = lsp_limit(
+                        dspu::time_signature_to_frequency(pFraction->value(), tempo),
+                        meta::phaser::RATE_MIN,
+                        meta::phaser::RATE_MAX) / float(fSampleRate);
+
+                    sLfo.nPhaseStep         = float(PHASE_MAX) * rate;
+                    break;
+                }
+
+                case meta::phaser::MODE_STATIC:
+                {
+                    rate                    = fRate;
+                    sLfo.nPhaseStep         = 0;
+                    sLfo.nPhase             = 0;
+                    break;
+                }
+
+                case meta::phaser::MODE_RATE:
+                default:
+                    rate                    = pRate->value() / float(fSampleRate);
+                    sLfo.nPhaseStep         = float(PHASE_MAX) * rate;
+                    break;
+            }
+
+            if (fRate != rate)
+                bUpdateFilters              = true;
+
+            // Update state of the 'reset' trigger
+            sReset.submit(pReset->value());
+
+            // Update common parameters
+            const float dry_gain    = pDryGain->value();
+            const float wet_gain    = (pInvPhase->value() < 0.5f) ? pWetGain->value() : -pWetGain->value();
+            const float drywet      = pDryWet->value() * 0.01f;
+
+            fOldInGain              = fInGain;
+            fOldDryGain             = fDryGain;
+            fOldWetGain             = fWetGain;
+            fInGain                 = in_gain;
+            fDryGain                = (dry_gain * drywet + 1.0f - drywet) * out_gain;
+            fWetGain                = wet_gain * drywet * out_gain;
+            fOldFeedDelay           = fFeedDelay;
+            fFeedDelay              = dspu::millis_to_samples(fSampleRate, pFeedDelay->value());
+            fOldFeedGain            = fFeedGain;
+            fFeedGain               = (pFeedPhase->value() >= 0.5f) ? -feed_gain : feed_gain;
+            nCrossfade              = float(PHASE_MAX) * crossfade * 2.0f;
+            fCrossfade              = PHASE_COEFF * (1.0f - crossfade);
+            fRevCrossfade           = (fCrossfade > 0.0f) ? 1.0f / float(nCrossfade) : 0.0f;
+
+            // LFO setup
+            const size_t filters    = lsp_min(pFilters->value() + 1, meta::phaser::FILTERS_MAX);
+            const float if_phase    = sLfo.pIFilterPhase->value();
+            const float ichan_phase = (sLfo.pIChannelPhase != NULL) ? sLfo.pIChannelPhase->value() : 0.0f;
+            const float overlap     = sLfo.pOverlap->value() * 0.01f;
+
+            fRevQuality             = 0.5f / pFilterQuality->value();
+
+            if (filters != nFilters)
+            {
+                nFilters                = filters;
+                sLfo.bSyncMesh          = true;
+                bUpdateFilters          = true;
+            }
+
+            if (sLfo.fOverlap != overlap)
+            {
+                sLfo.fOverlap           = overlap;
+                sLfo.bSyncMesh          = true;
+                bUpdateFilters          = true;
+            }
+
+            if ((sLfo.fIFilterPhase != if_phase) ||
+                (sLfo.fIChanPhase != ichan_phase))
+            {
+                sLfo.fIFilterPhase      = if_phase;
+                sLfo.fIChanPhase        = ichan_phase;
+                bUpdateFilters          = true;
+            }
+
+            // Update filters if required
+            if (bUpdateFilters)
+            {
+                bUpdateFilters          = false;
+
+                const float p_step      = sLfo.fIFilterPhase / float(nFilters);
+                const float ovl_width   = dspu::lerp(1.0f / nFilters, 1.0f, sLfo.fOverlap);
+                const float ovl_step    = (nFilters > 1) ? (1.0f - ovl_width) / (nFilters - 1) : 0.0f;
+
+                for (size_t i=0; i < nChannels; ++i)
+                {
+                    channel_t *c            = &vChannels[i];
+                    const float base_phase  = sLfo.fIChanPhase * i;
+
+                    for (size_t j=0; j < nFilters; ++j)
+                    {
+                        const float v_shift     = j * ovl_step;
+
+                        filter_t *f             = &c->vFilters[j];
+                        f->nPhase               = phase_to_int(base_phase + p_step * j);
+                        f->fNormShift           = v_shift;
+                        f->fNormScale           = ovl_width;
+                    }
+                }
+            }
+
+            // Update LFO preferences
+            bool custom_lfo         = false;
+
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                channel_t *c            = &vChannels[i];
+
+                // Update LFO preferences
+                size_t lfo_type         = size_t(c->pLfoType->value());
+                size_t lfo_period       = size_t(c->pLfoPeriod->value());
+                if (i > 0)
+                {
+                    custom_lfo              = lfo_type > 0;
+                    if (!custom_lfo)
+                        lfo_period              = vChannels[0].nLfoPeriod;
+                    lfo_type                = (custom_lfo) ? lfo_type - 1 : vChannels[0].nLfoType;
+                }
+
+                // The form of the LFO has changed?
+                if ((lfo_type != c->nLfoType) || (lfo_period != c->nLfoPeriod))
+                {
+                    c->nLfoType             = lfo_type;
+                    c->nLfoPeriod           = lfo_period;
+                    c->pLfoFunc             = all_lfo_functions[lfo_type];
+                    sLfo.bSyncMesh          = true;
+
+                    // Select the function coefficients
+                    switch (lfo_period)
+                    {
+                        case meta::phaser::OSC_FIRST:
+                            c->vLfoArg[0]       = 0.5f;
+                            c->vLfoArg[1]       = 0.0f;
+                            break;
+                        case meta::phaser::OSC_LAST:
+                            c->vLfoArg[0]       = 0.5f;
+                            c->vLfoArg[1]       = 0.5f;
+                            break;
+                        case meta::phaser::OSC_FULL:
+                        default:
+                            c->vLfoArg[0]       = 1.0f;
+                            c->vLfoArg[1]       = 0.0f;
+                            break;
+                    }
+
+                    // Update LFO image
+                    float k                 = c->vLfoArg[0] / (meta::phaser::LFO_MESH_SIZE - 1);
+                    for (size_t j=0; j<meta::phaser::LFO_MESH_SIZE; ++j)
+                        c->vLfoMesh[j]          = c->pLfoFunc(j * k + c->vLfoArg[1]);
+                }
+            }
+
+            const float freq_limit  = fSampleRate * 0.49f;
+            sLfo.nInitPhase         = phase_to_int(sLfo.pInitPhase->value());
+            sLfo.fOldMinFreq        = lsp_min(sLfo.fOldMinFreq, freq_limit);
+            sLfo.fMinFreq           = lsp_min(sLfo.pMinFreq->value(), freq_limit);
+            sLfo.fOldMaxFreq        = lsp_min(sLfo.fOldMaxFreq, freq_limit);
+            sLfo.fMaxFreq           = lsp_min(sLfo.pMaxFreq->value(), freq_limit);
+
+            // Update channels
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                channel_t *c    = &vChannels[i];
+
+                // For Mid/Side switch change, clear the buffers
+                if (mid_side != bMS)
+                    c->sFeedback.clear();
+
+                // Update bypass
+                c->sBypass.set_bypass(bypass);
+
+                // Setup hi-pass filter for processed signal
+                dspu::filter_params_t fp;
+                size_t hp_slope = pHpfMode->value() * 2;
+                fp.nType        = (hp_slope > 0) ? dspu::FLT_BT_BWC_HIPASS : dspu::FLT_NONE;
+                fp.fFreq        = pHpfFreq->value();
+                fp.fFreq2       = fp.fFreq;
+                fp.fGain        = 1.0f;
+                fp.nSlope       = hp_slope;
+                fp.fQuality     = 0.0f;
+                c->sEq.set_params(0, &fp);
+
+                // Setup low-pass filter for processed signal
+                size_t lp_slope = pLpfMode->value() * 2;
+                fp.nType        = (lp_slope > 0) ? dspu::FLT_BT_BWC_LOPASS : dspu::FLT_NONE;
+                fp.fFreq        = pLpfFreq->value();
+                fp.fFreq2       = fp.fFreq;
+                fp.fGain        = 1.0f;
+                fp.nSlope       = lp_slope;
+                fp.fQuality     = 0.0f;
+                c->sEq.set_params(1, &fp);
+            }
+
+            bMS                     = mid_side;
+            bCustomLfo              = custom_lfo;
+            bMono                   = (pMono != NULL) ? pMono->value() >= 0.5f : false;
+        }
+
+        inline void phaser::lerp_frequencies(float *dst, float min, float max, size_t count)
+        {
+            if (min != max)
+            {
+                const float k = 1.0f / float(count);
+                for (size_t i=0; i<count; ++i)
+                    dst[i]                  = dspu::quick_elerp(min, max, i*k);
+            }
+            else
+                dsp::fill(dst, min, count);
+        }
+
+        void phaser::process(size_t samples)
+        {
+            // Reset phase if phase request is pending
+            if (sReset.pending())
+            {
+                sLfo.nPhase             = 0;
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    channel_t *c            = &vChannels[i];
+                    c->sFeedback.clear();
+                }
+                sReset.commit();
+            }
+
+            // Perform the routing
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                channel_t *c            = &vChannels[i];
+                c->vIn                  = c->pIn->buffer<float>();
+                c->vOut                 = c->pOut->buffer<float>();
+
+                // Measure the input level
+                c->pInLevel->set_value(dsp::abs_max(c->vIn, samples) * fInGain);
+            }
+
+            for (size_t offset=0; offset<samples; )
+            {
+                const uint32_t to_do    = lsp_min(samples - offset, BUFFER_SIZE);
+                const float k_to_do     = 1.0f / float(to_do);
+
+                // Convert to Mid/Side if needed
+                if ((bMS) && (nChannels > 1))
+                {
+                    dsp::lr_to_ms(
+                        vChannels[0].vBuffer,
+                        vChannels[1].vBuffer,
+                        vChannels[0].vIn,
+                        vChannels[1].vIn,
+                        to_do);
+
+                    if (fOldInGain != fInGain)
+                    {
+                        dsp::lramp1(vChannels[0].vBuffer, fOldInGain, fInGain, to_do);
+                        dsp::lramp1(vChannels[1].vBuffer, fOldInGain, fInGain, to_do);
+                    }
+                }
+                else
+                {
+                    dsp::lramp2(vChannels[0].vBuffer, vChannels[0].vIn, fOldInGain, fInGain, to_do);
+                    if (nChannels > 1)
+                        dsp::lramp2(vChannels[1].vBuffer, vChannels[1].vIn, fOldInGain, fInGain, to_do);
+                }
+
+                // Do audio processing
+                uint32_t phase          = sLfo.nPhase;
+
+                // Compute additional parameters
+                float *fmin             = &vBuffer[0];
+                float *fmax             = &fmin[to_do];
+                float *depth            = &fmax[to_do];
+
+                lerp_frequencies(fmin, sLfo.fOldMinFreq, sLfo.fMinFreq, to_do);
+                lerp_frequencies(fmax, sLfo.fOldMaxFreq, sLfo.fMaxFreq, to_do);
+                dsp::lramp_set1(depth, fOldDepth, fDepth, to_do);
+
+                for (size_t nc = 0; nc < nChannels; ++nc)
+                {
+                    channel_t *c            = &vChannels[nc];
+                    phase                   = sLfo.nPhase;
+
+                    // Process each sample in the buffer
+                    for (size_t i=0; i<to_do; ++i)
+                    {
+                        const float s           = i * k_to_do;
+                        float sample            = c->vBuffer[i];
+                        const uint32_t lfo_phase= dspu::ilerp(sLfo.nOldInitPhase, sLfo.nInitPhase, s);
+
+                        // Apply feedback
+                        const float fb_delay    = dspu::lerp(fOldFeedDelay, fFeedDelay, s);
+                        const float fb_sample   = c->sFeedback.get(fb_delay);
+                        sample                 += fb_sample * dspu::lerp(fOldFeedGain, fFeedGain, s);
+
+                        // Apply each all-pass filter to the signal
+                        for (size_t j=0; j<nFilters; ++j)
+                        {
+                            filter_t *f             = &c->vFilters[j];
+                            uint32_t i_phase        = (phase + lfo_phase + f->nPhase) & PHASE_MASK;
+                            const float o_phase     = i_phase * fCrossfade;
+                            float c_phase           = o_phase * c->vLfoArg[0] + c->vLfoArg[1];
+                            float c_func            = f->fNormScale * c->pLfoFunc(c_phase) + f->fNormShift;
+                            float c_freq            = dspu::quick_elerp(fmin[i], fmax[i], c_func);
+
+                            // Check if LFO went to the next round
+                            if ((nCrossfade > 0) && (f->nActPhase > i_phase))
+                            {
+                                f->sAllpass[2]          = f->sAllpass[0];
+                                f->sAllpass[3]          = f->sAllpass[1];
+                                f->sAllpass[0]          = 0.0f;
+                                f->sAllpass[1]          = 0.0f;
+                            }
+                            f->nActPhase            = i_phase;
+
+                            // Perform cross-fade
+                            if (i_phase < nCrossfade)
+                            {
+                                const float new_sample  = process_allpass(&f->sAllpass[0], c_freq, sample);
+                                const float mix         = float(i_phase) * fRevCrossfade;
+                                i_phase                 = i_phase + PHASE_MAX;
+                                c_phase                 = i_phase * fCrossfade * c->vLfoArg[0] + c->vLfoArg[1];
+                                c_func                  = f->fNormScale * c->pLfoFunc(c_phase) + f->fNormShift;
+                                c_freq                  = dspu::quick_elerp(fmin[i], fmax[i], c_func);
+
+                                const float old_sample  = process_allpass(&f->sAllpass[2], c_freq, sample);
+
+                                sample                  = dspu::lerp(old_sample, new_sample, mix);
+                            }
+                            else
+                                sample                  = process_allpass(&f->sAllpass[0], c_freq, sample);
+                        }
+
+                        // Append sample to feedback
+                        c->sFeedback.append(sample);
+
+                        // Add processed sample to the original one
+                        c->vBuffer[i]           = c->vBuffer[i] + sample * depth[i];
+
+                        // Update current phase
+                        phase                   = (phase + dspu::ilerp(sLfo.nOldPhaseStep, sLfo.nPhaseStep, s)) & PHASE_MASK;
+                    }
+
+                    // Sync state of filters
+                    {
+                        for (size_t j=0; j<nFilters; ++j)
+                        {
+                            filter_t *f             = &c->vFilters[j];
+                            uint32_t i_phase        = (phase + sLfo.nInitPhase + f->nPhase) & PHASE_MASK;
+                            const float o_phase     = i_phase * fCrossfade;
+                            const float c_phase     = o_phase * c->vLfoArg[0] + c->vLfoArg[1];
+                            const float c_func      = f->fNormScale * c->pLfoFunc(c_phase) + f->fNormShift;
+                            const float c_freq      = dspu::quick_elerp(sLfo.fMinFreq, sLfo.fMaxFreq, c_func);
+
+                            f->fOutPhase            = o_phase;
+                            f->fOutShift            = c_func;
+                            f->fOutFreq             = c_freq;
+                        }
+                    }
+
+                    // Apply output equalizer
+                    c->sEq.process(c->vBuffer, c->vBuffer, to_do);
+                }
+
+                // Update LFO parameters
+                sLfo.nPhase             = phase;
+                sLfo.nOldInitPhase      = sLfo.nInitPhase;
+                sLfo.nOldPhaseStep      = sLfo.nPhaseStep;
+
+                // Convert back to left-right if needed
+                if ((bMS) && (nChannels > 1))
+                {
+                    dsp::ms_to_lr(
+                        vChannels[0].vBuffer,
+                        vChannels[1].vBuffer,
+                        vChannels[0].vBuffer,
+                        vChannels[1].vBuffer,
+                        to_do);
+                }
+
+                // Apply Dry/Wet and measure output level
+                for (size_t nc=0; nc<nChannels; ++nc)
+                {
+                    channel_t *c            = &vChannels[nc];
+
+                    // Mix dry/wet
+                    dsp::lramp2(vBuffer, c->vBuffer, fOldWetGain, fWetGain, to_do);
+                    dsp::lramp_add3(c->vBuffer, vBuffer, c->vIn, fOldDryGain*fOldInGain, fDryGain*fInGain, to_do);
+                    c->pOutLevel->set_value(dsp::abs_max(c->vBuffer, to_do));
+                }
+
+                // Apply mono compatibility switch
+                if ((nChannels > 1) && (bMono))
+                {
+                    dsp::lr_to_mid(vChannels[0].vBuffer, vChannels[0].vBuffer, vChannels[1].vBuffer, to_do);
+                    dsp::copy(vChannels[1].vBuffer, vChannels[0].vBuffer, to_do);
+                }
+
+                // Apply bypass and update buffer pointers
+                for (size_t nc=0; nc<nChannels; ++nc)
+                {
+                    channel_t *c            = &vChannels[nc];
+
+                    // Apply bypass
+                    c->sBypass.process(c->vOut, c->vIn, c->vBuffer, to_do);
+
+                    // Move pointers
+                    c->vIn                 += to_do;
+                    c->vOut                += to_do;
+                }
+
+                // Commit values
+                fOldFeedDelay       = fFeedDelay;
+                fOldFeedGain        = fFeedGain;
+                fOldDepth           = fDepth;
+                sLfo.fOldMinFreq    = sLfo.fMinFreq;
+                sLfo.fOldMaxFreq    = sLfo.fMaxFreq;
+                fOldInGain          = fInGain;
+                fOldDryGain         = fDryGain;
+                fOldWetGain         = fWetGain;
+
+                offset             += to_do;
+            }
+
+            // Synchronize LFO state
+            for (size_t i=0; i < nChannels; ++i)
+            {
+                channel_t *c        = &vChannels[i];
+
+                // Output filter meters
+                for (size_t j=0; j < nFilters; ++j)
+                {
+                    filter_t *f         = &c->vFilters[j];
+
+                    f->pPhase->set_value(f->fOutPhase * 360.0f);
+                    f->pShift->set_value(f->fOutShift);
+                    f->pOutFreq->set_value(f->fOutFreq);
+                }
+
+                // Clear other filter meters
+                for (size_t j=nFilters; j < meta::phaser::FILTERS_MAX; ++j)
+                {
+                    filter_t *f         = &c->vFilters[j];
+
+                    f->pPhase->set_value(0.0f);
+                    f->pShift->set_value(0.0f);
+                    f->pOutFreq->set_value(meta::phaser::LFO_FREQ_MIN);
+                }
+
+//            #ifdef LSP_TRACE
+//                for (size_t j=0; j < meta::phaser::FILTERS_MAX; ++j)
+//                {
+//                    filter_t *f         = &c->vFilters[j];
+//
+//                    lsp_trace("channel %d filter %d = {%s=%f, %s=%f, %s=%f}",
+//                        int(i), int(j),
+//                        f->pPhase->id(),
+//                        f->pPhase->value(),
+//                        f->pShift->id(),
+//                        f->pShift->value(),
+//                        f->pOutFreq->id(),
+//                        f->pOutFreq->value());
+//                }
+//            #endif /* LSP_TRACE */
+            }
+
+            // Need to synchronize LFO mesh?
+            if (sLfo.bSyncMesh)
+            {
+                plug::mesh_t *mesh      = (sLfo.pMesh != NULL) ? sLfo.pMesh->buffer<plug::mesh_t>() : NULL;
+                if ((mesh != NULL) && (mesh->isEmpty()))
+                {
+                    size_t index        = 0;
+                    dsp::copy(mesh->pvData[index++], vLfoPhase, meta::phaser::LFO_MESH_SIZE);
+
+                    const size_t lines      = (bCustomLfo) ? 2 : 1;
+                    for (size_t i=0; i<lines; ++i)
+                    {
+                        const channel_t *c      = &vChannels[i];
+
+                        for (size_t j=0; j<nFilters; ++j)
+                        {
+                            const filter_t *f       = &vChannels[0].vFilters[j];
+                            float *data             = mesh->pvData[index++];
+
+                            dsp::mul_k3(data, c->vLfoMesh, f->fNormScale, meta::phaser::LFO_MESH_SIZE);
+                            dsp::add_k2(data, f->fNormShift, meta::phaser::LFO_MESH_SIZE);
+                        }
+                    }
+
+                    mesh->data(index, meta::phaser::LFO_MESH_SIZE);
+
+                    sLfo.bSyncMesh      = false;
+                }
+            }
+
+            // Request the inline display for redraw
+            if (pWrapper != NULL)
+                pWrapper->query_display_draw();
+        }
+
+        void phaser::ui_activated()
+        {
+            sLfo.bSyncMesh          = true;
+        }
+
+        bool phaser::inline_display(plug::ICanvas *cv, size_t width, size_t height)
+        {
+            // Check proportions
+            if (height > width)
+                height  = width;
+
+            // Init canvas
+            if (!cv->init(width, height))
+                return false;
+            width   = cv->width();
+            height  = cv->height();
+
+            // Clear background
+            bool bypassing = vChannels[0].sBypass.bypassing();
+            cv->set_color_rgb((bypassing) ? CV_DISABLED : CV_BACKGROUND);
+            cv->paint();
+
+            // Draw horizontal and vertical lines
+            cv->set_line_width(1.0);
+            cv->set_color_rgb((bypassing) ? CV_SILVER: CV_YELLOW, 0.5f);
+            for (size_t i=1; i < 8; ++i)
+            {
+                float y = (float(i) * (45.0f / 360.0f)) * height;
+                float x = float(i) * 0.125f * width;
+                cv->line(0, y, width, y);
+                cv->line(x, 0, x, height);
+            }
+
+            // Reuse display
+            size_t count        = lsp_max(width, height);
+            pIDisplay           = core::IDBuffer::reuse(pIDisplay, 2, count);
+            core::IDBuffer *b   = pIDisplay;
+            if (b == NULL)
+                return false;
+
+            static const uint32_t c_colors[] = {
+                CV_MIDDLE_CHANNEL,
+                CV_LEFT_CHANNEL, CV_RIGHT_CHANNEL,
+                CV_MIDDLE_CHANNEL, CV_SIDE_CHANNEL
+            };
+
+            const uint32_t *colors  = &c_colors[0];
+            size_t lines            = 1;
+            if ((nChannels > 1) && (bCustomLfo))
+            {
+                colors  = (bMS) ? &c_colors[3] : &c_colors[1];
+                lines   = 2;
+            }
+
+            bool aa = cv->set_anti_aliasing(true);
+            lsp_finally { cv->set_anti_aliasing(aa); };
+
+            cv->set_line_width(2);
+
+            dsp::lramp_set1(b->v[1], 0.0f, height-1, count);
+
+            for (size_t i=0; i<lines; ++i)
+            {
+                const channel_t *c  = &vChannels[i];
+
+                for (size_t j=0; j<nFilters; ++j)
+                {
+                    const filter_t *f   = &c->vFilters[j];
+
+                    for (size_t k=0; k<count; ++k)
+                    {
+                        const size_t ind    = (k * meta::phaser::LFO_MESH_SIZE) / count;
+                        b->v[0][k]          = (c->vLfoMesh[ind] * f->fNormScale + f->fNormShift) * width;
+                    }
+
+                    // Draw mesh
+                    const uint32_t color    = (bypassing || !(active())) ? CV_SILVER : colors[i];
+                    cv->set_color_rgb(color);
+                    cv->draw_lines(b->v[0], b->v[1], count);
+                }
+            }
+
+            // Draw dots with lines
+            if (active())
+            {
+                colors  = (nChannels <= 1) ? &c_colors[0] :
+                          (bMS) ? &c_colors[3] : &c_colors[1];
+                cv->set_line_width(1);
+
+                // Draw lines first
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    const channel_t *c  = &vChannels[i];
+
+                    for (size_t j=0; j<lines; ++j)
+                    {
+                        const filter_t *f   = &c->vFilters[j];
+                        const float x       = f->fOutShift * width;
+
+                        cv->set_color_rgb(colors[i]);
+                        cv->line(x, 0, x, height);
+                    }
+                }
+
+                // Draw dots next
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    const channel_t *c  = &vChannels[i];
+
+                    const uint32_t color = (bypassing) ? CV_SILVER : colors[i];
+                    Color c1(color), c2(color);
+                    c2.alpha(0.9f);
+
+                    for (size_t j=0; j<nFilters; ++j)
+                    {
+                        const filter_t *f   = &c->vFilters[j];
+                        const float x       = f->fOutShift * width;
+                        const float y       = f->fOutPhase * height;
+
+                        cv->radial_gradient(x, y, c1, c2, 12);
+                        cv->set_color_rgb(0);
+                        cv->circle(x, y, 4);
+                        cv->set_color_rgb(color);
+                        cv->circle(x, y, 3);
+                    }
+                }
+            }
+
+            return true;
+        }
+
+        void phaser::dump(dspu::IStateDumper *v) const
+        {
+            plug::Module::dump(v);
+
+            v->write("nChannels", nChannels);
+            v->write("nFilters", nFilters);
+
+            v->write_object("sReset", &sReset);
+
+            v->begin_array("vChannels", vChannels, nChannels);
+            {
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    const channel_t *c = &vChannels[i];
+
+                    v->begin_object(c, sizeof(channel_t));
+                    {
+                        v->write_object("sBypass", &c->sBypass);
+                        v->write_object("sFeedback", &c->sFeedback);
+                        v->write_object("sEq", &c->sEq);
+
+
+                        v->begin_array("vFilters", meta::phaser::FILTERS_MAX);
+                        {
+                            for (size_t j=0; j<meta::phaser::FILTERS_MAX; ++j)
+                            {
+                                const filter_t *f = &c->vFilters[j];
+
+                                v->writev("sAllpass", f->sAllpass, 4);
+                                v->write("nPhase", f->nPhase);
+                                v->write("nActPhase", f->nActPhase);
+                                v->write("fNormShift", f->fNormShift);
+                                v->write("fNormScale", f->fNormScale);
+                                v->write("fOutPhase", f->fOutPhase);
+                                v->write("fOutShift", f->fOutShift);
+                                v->write("fOutFreq", f->fOutFreq);
+
+                                v->write("pPhase", f->pPhase);
+                                v->write("pShift", f->pShift);
+                                v->write("pOutFreq", f->pOutFreq);
+                            }
+                        }
+                        v->end_array();
+
+                        v->write("nLfoType", c->nLfoType);
+                        v->write("nLfoPeriod", c->nLfoPeriod);
+                        v->writev("vLfoArg", c->vLfoArg, 2);
+                        v->write("pLfoFunc", c->pLfoFunc);
+                        v->write("vLfoMesh", c->vLfoMesh);
+
+                        v->write("vIn", c->vIn);
+                        v->write("vOut", c->vOut);
+                        v->write("vBuffer", c->vBuffer);
+
+                        v->write("pIn", c->pIn);
+                        v->write("pOut", c->pOut);
+                        v->write("pInLevel", c->pInLevel);
+                        v->write("pOutLevel", c->pOutLevel);
+                        v->write("pLfoType", c->pLfoType);
+                        v->write("pLfoPeriod", c->pLfoPeriod);
+                    }
+                    v->end_object();
+                }
+            }
+            v->end_array();
+
+            v->begin_object("sLfo", &sLfo, sizeof(lfo_t));
+            v->end_object();
+
+            v->write("vBuffer", vBuffer);
+            v->write("vLfoPhase", vLfoPhase);
+
+            v->write("fRevSampleRate", fRevSampleRate);
+            v->write("fRevQuality", fRevQuality);
+            v->write("fRate", fRate);
+            v->write("fOldDepth", fOldDepth);
+            v->write("fDepth", fDepth);
+            v->write("nCrossfade", nCrossfade);
+            v->write("fRevCrossfade", fRevCrossfade);
+            v->write("fOldInGain", fOldInGain);
+            v->write("fInGain", fInGain);
+            v->write("fOldDryGain", fOldDryGain);
+            v->write("fDryGain", fDryGain);
+            v->write("fOldWetGain", fOldWetGain);
+            v->write("fWetGain", fWetGain);
+            v->write("fOldFeedGain", fOldFeedGain);
+            v->write("fFeedGain", fFeedGain);
+            v->write("fOldFeedDelay", fOldFeedDelay);
+            v->write("fFeedDelay", fFeedDelay);
+            v->write("bMS", bMS);
+            v->write("bMono", bMono);
+            v->write("bCustomLfo", bCustomLfo);
+            v->write("bUpdateFilters", bUpdateFilters);
+
+            v->write("pBypass", pBypass);
+            v->write("pMono", pMono);
+            v->write("pMS", pMS);
+            v->write("pInvPhase", pInvPhase);
+            v->write("pHpfMode", pHpfMode);
+            v->write("pHpfFreq", pHpfFreq);
+            v->write("pLpfMode", pLpfMode);
+            v->write("pLpfFreq", pLpfFreq);
+
+            v->write("pRate", pRate);
+            v->write("pDepth", pDepth);
+            v->write("pFraction", pFraction);
+            v->write("pTempo", pTempo);
+            v->write("pTempoSync", pTempoSync);
+            v->write("pTimeMode", pTimeMode);
+            v->write("pReset", pReset);
+
+            v->write("pFilters", pFilters);
+            v->write("pFilterQuality", pFilterQuality);
+            v->write("pCrossfade", pCrossfade);
+
+            v->write("pFeedOn", pFeedOn);
+            v->write("pFeedGain", pFeedGain);
+            v->write("pFeedDelay", pFeedDelay);
+            v->write("pFeedPhase", pFeedPhase);
+
+            v->write("pInGain", pInGain);
+            v->write("pDryGain", pDryGain);
+            v->write("pWetGain", pWetGain);
+            v->write("pDryWet", pDryWet);
+            v->write("pOutGain", pOutGain);
+
+            v->write("pIDisplay", pIDisplay);
+
+            v->write("pData", pData);
+        }
+
+    } /* namespace plugins */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugins-phaser/src/main/ui/phaser.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/main/ui/phaser.cpp
--- 1.2.21-5/modules/lsp-plugins-phaser/src/main/ui/phaser.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-phaser/src/main/ui/phaser.cpp	2025-08-26 18:16:01.777828092 +0000
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-plugins-phaser
+ * Created on: 10 мар 2025 г.
+ *
+ * lsp-plugins-phaser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-plugins-phaser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-plugins-phaser. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/plug-fw/ui.h>
+#include <private/plugins/phaser.h>
+
+namespace lsp
+{
+    namespace plugui
+    {
+        //---------------------------------------------------------------------
+        // Plugin UI factory
+        static const meta::plugin_t *plugin_uis[] =
+        {
+            &meta::phaser_mono,
+            &meta::phaser_stereo
+        };
+
+        static ui::Factory factory(plugin_uis, 2);
+
+    } /* namespace plugui */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-plugins-profiler/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-profiler/.github/workflows/build.yml	2025-03-01 12:43:11.884557796 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/.github/workflows/build.yml	2025-08-26 18:16:03.125815010 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-profiler/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-profiler/CHANGELOG	2025-03-01 12:43:11.884557796 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/CHANGELOG	2025-08-26 18:16:03.125815010 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts and dependencies.
+
 === 1.0.24 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-profiler/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-profiler/dependencies.mk	2025-03-01 12:43:11.888557772 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/dependencies.mk	2025-08-26 18:16:03.125815010 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-profiler/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-profiler/make/tools.mk	2025-03-01 12:43:11.888557772 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/make/tools.mk	2025-08-26 18:16:03.129814971 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-profiler/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/modules.mk
--- 1.2.21-5/modules/lsp-plugins-profiler/modules.mk	2025-03-01 12:43:11.888557772 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/modules.mk	2025-08-26 18:16:03.129814971 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-profiler/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/project.mk
--- 1.2.21-5/modules/lsp-plugins-profiler/project.mk	2025-03-01 12:43:11.888557772 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/project.mk	2025-08-26 18:16:03.129814971 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Profiler Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-profiler/res/doc/screenshots/profiler_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/res/doc/screenshots/profiler_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-profiler/res/doc/screenshots/profiler_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/res/doc/screenshots/profiler_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-profiler/src/doc/manuals/plugins/profiler.php 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/src/doc/manuals/plugins/profiler.php
--- 1.2.21-5/modules/lsp-plugins-profiler/src/doc/manuals/plugins/profiler.php	2025-03-01 12:43:11.892557749 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/src/doc/manuals/plugins/profiler.php	2025-08-26 18:16:03.129814971 +0000
@@ -78,7 +78,7 @@
 </p>
 <p>
     One time latency measurements are also useful when the signal level for optimal latency detection is higher than that for system profiling.
-    If this is the case, set the test signal amplitude for optimal latency measurement by operating the <b>Amplitude</b> control in the <b>'Calibrator'</b> section, 
+    If this is the case, set the test signal amplitude for optimal latency measurement by operating the <b>Amplitude</b> control in the <b>'Calibrator'</b> section,
     measure latency, disable the Latency Detector by disabling the <b>Enable</b> button in the <b>'Latency Detector'</b> section,
     and reset the amplitude control to the optimal value for audio system response profile (as discussed in Section 2).
 </p>
@@ -131,12 +131,12 @@
     <li>Coarse Linear Impulse Response Duration</li>
 </ul>
 <p>
-    All the quantities above are mostly relevant for linear time invariant (LTI) systems. The result will be displayed and postprocessed from the 
+    All the quantities above are mostly relevant for linear time invariant (LTI) systems. The result will be displayed and postprocessed from the
     time originle of the Linear Impulse Response estimate of the system.
 </p>
 <p>
     To change this, operate the <b>Offset</b> control in the <b>'Results'</b> section, which allows to introduce a time offset.
-    For numerical reasons, few details of the measured Linear Impulse Response are mapped into negative time samples to the left ot the origin of time.
+    For numerical reasons, few details of the measured Linear Impulse Response are mapped into negative time samples to the left of the origin of time.
     In case the spread of the Linear Impulse Response to the left of the origin of time is important, introducing a negative offset will increase accuracy of the calculations listed above, as well as providing a more accurate measurement.
     The Reverberation Time can be calculated with any of the algorithms in the <b>RT Algorithm</b> selector in the <b>'Results'</b> section. All the algorithms are based in calculating,
     from the Linear Impulse Response, the Energy Decay curve through backward integration, fitting a straight line in the Energy Decay curve in a
@@ -171,7 +171,7 @@
     Auto should be able to save all the meaningful parts of the Linear Impulse Response.
 </p>
 <p>
-	Whenever the plugin is saving to file, its state will be SAVING and the corresponding LED in the <b>'Results'</b> 
+	Whenever the plugin is saving to file, its state will be SAVING and the corresponding LED in the <b>'Results'</b>
 	section will shine.
 </p>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-profiler/src/main/meta/profiler.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/src/main/meta/profiler.cpp
--- 1.2.21-5/modules/lsp-plugins-profiler/src/main/meta/profiler.cpp	2025-03-01 12:43:11.892557749 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-profiler/src/main/meta/profiler.cpp	2025-08-26 18:16:03.133814932 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-profiler
  * Created on: 3 авг. 2021 г.
@@ -26,7 +26,7 @@
 
 #define LSP_PLUGINS_PROFILER_VERSION_MAJOR       1
 #define LSP_PLUGINS_PROFILER_VERSION_MINOR       0
-#define LSP_PLUGINS_PROFILER_VERSION_MICRO       24
+#define LSP_PLUGINS_PROFILER_VERSION_MICRO       26
 
 #define LSP_PLUGINS_PROFILER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -78,38 +78,38 @@ namespace lsp
         };
 
         #define CALIBRATOR \
-            LOG_CONTROL("calf", "Frequency", U_HZ, profiler_metadata::FREQUENCY), \
-            AMP_GAIN10("cala", "Amplitude", profiler_metadata::AMPLITUDE_DFL), \
-            SWITCH("cals", "Calibration", 0.0f), \
-            SWITCH("fbck", "Feedback", 0.0f)
+            LOG_CONTROL("calf", "Frequency", "Cal freq", U_HZ, profiler_metadata::FREQUENCY), \
+            AMP_GAIN10("cala", "Amplitude", "Amplitude", profiler_metadata::AMPLITUDE_DFL), \
+            SWITCH("cals", "Calibration", "Callibration", 0.0f), \
+            SWITCH("fbck", "Feedback", "Feedback", 0.0f)
 
         #define LATENCY_DETECTOR \
-            CONTROL("ltdm", "Max expected latency", U_MSEC, profiler_metadata::LATENCY), \
-            CONTROL("ltdp", "Peak threshold", U_GAIN_AMP, profiler_metadata::PEAK_THRESHOLD), \
-            CONTROL("ltda", "Absolute threshold", U_GAIN_AMP, profiler_metadata::ABS_THRESHOLD), \
-            SWITCH("ltena", "Enable Latency Detection", 1.0f), \
-            TRIGGER("latt", "Trig a Latency measurement")
+            CONTROL("ltdm", "Max expected latency", "Max latency", U_MSEC, profiler_metadata::LATENCY), \
+            CONTROL("ltdp", "Peak threshold", "Peak thresh", U_GAIN_AMP, profiler_metadata::PEAK_THRESHOLD), \
+            CONTROL("ltda", "Absolute threshold", "Abs thresh", U_GAIN_AMP, profiler_metadata::ABS_THRESHOLD), \
+            SWITCH("ltena", "Enable Latency Detection", "Detector on", 1.0f), \
+            TRIGGER("latt", "Trig a Latency measurement", "Detector start")
 
         #define TEST_SIGNAL \
-            CONTROL("tsgl", "Duration", U_SEC, profiler_metadata::DURATION), \
+            CONTROL("tsgl", "Duration", "Duration", U_SEC, profiler_metadata::DURATION), \
             METER("tind", "Actual Signal Duration", U_SEC, profiler_metadata::MTR_T), \
-            TRIGGER("lint", "Trig a Linear measurement")
+            TRIGGER("lint", "Trig a Linear measurement", "Measure start")
 
         #define POSTPROCESSOR \
-            CONTROL("offc", "IR Time Offset", U_MSEC, profiler_metadata::IR_OFFSET), \
-            COMBO("scra", "RT Algorithm", profiler_metadata::SC_RTALGO_DFL, sc_rtalgo), \
-            TRIGGER("post", "Trig Post Processing")
+            CONTROL("offc", "IR Time Offset", "IR offset", U_MSEC, profiler_metadata::IR_OFFSET), \
+            COMBO("scra", "RT Algorithm", "RT algorithm", profiler_metadata::SC_RTALGO_DFL, sc_rtalgo), \
+            TRIGGER("post", "Trig Post Processing", "Postproc start")
 
         #define SAVER \
-            COMBO("scsv", "Save Mode", profiler_metadata::SC_SVMODE_DFL, sc_savemode), \
+            COMBO("scsv", "Save Mode", "Save mode", profiler_metadata::SC_SVMODE_DFL, sc_savemode), \
             PATH("irfn", "Save file name"), \
-            TRIGGER("irfc", "Save file command"), \
+            TRIGGER("irfc", "Save file command", "Save file"), \
             STATUS("irfs", "File saving status"), \
             METER_PERCENT("irfp", "File saving progress")
 
         #define PROFILER_COMMON \
             BYPASS, \
-            { "stld", "State LED", U_ENUM, R_METER, F_INT, 0, 0, 0, 0, profiler_states }, \
+            ENUM_METER("stld", "State LED", 0, profiler_states), \
             CALIBRATOR, \
             LATENCY_DETECTOR, \
             TEST_SIGNAL, \
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-referencer/.github/workflows/build.yml	2025-03-01 12:43:12.260555539 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/.github/workflows/build.yml	2025-08-26 18:16:04.437802275 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-referencer/CHANGELOG	2025-03-01 12:43:12.260555539 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/CHANGELOG	2025-08-26 18:16:04.437802275 +0000
@@ -2,6 +2,13 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.3 ===
+* Updated waveform graph rendering.
+* Updated build scripts and dependencies.
+
+=== 1.0.2 ===
+* Updated build scripts and dependencies.
+
 === 1.0.1 ===
 * Fixed typos.
 * Updated build scripts and dependencies.
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-referencer/dependencies.mk	2025-03-01 12:43:12.264555515 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/dependencies.mk	2025-08-26 18:16:04.441802237 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-referencer/make/tools.mk	2025-03-01 12:43:12.264555515 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/make/tools.mk	2025-08-26 18:16:04.441802237 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/modules.mk
--- 1.2.21-5/modules/lsp-plugins-referencer/modules.mk	2025-03-01 12:43:12.264555515 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/modules.mk	2025-08-26 18:16:04.441802237 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/project.mk
--- 1.2.21-5/modules/lsp-plugins-referencer/project.mk	2025-03-01 12:43:12.264555515 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/project.mk	2025-08-26 18:16:04.441802237 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Referencer Plugin Bundle
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.1
+ARTIFACT_VERSION            = 1.0.3
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-referencer/res/doc/screenshots/referencer_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/res/doc/screenshots/referencer_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-referencer/res/doc/screenshots/referencer_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/res/doc/screenshots/referencer_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/src/doc/manuals/plugins/referencer.php 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/src/doc/manuals/plugins/referencer.php
--- 1.2.21-5/modules/lsp-plugins-referencer/src/doc/manuals/plugins/referencer.php	2025-03-01 12:43:12.268555492 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/src/doc/manuals/plugins/referencer.php	2025-08-26 18:16:04.445802198 +0000
@@ -38,7 +38,7 @@ switch between files and loops using the
 	<li><b>Both</b> - the button that allows to mix both the input mix and the reference loop. When used, the mix and reference loop are attenuated by -3 dB.</li>
 	<li><b>Play</b> - the play button that resumes the playback of currently selected loop.</li>
 	<li><b>Stop</b> - the stop button that stops the playback of currently selected loop.</li>
-	<li><b>Gain Matching</b> - the combo box that allows to set-up gain matcing:</li>
+	<li><b>Gain Matching</b> - the combo box that allows to set-up gain matching:</li>
 	<ul>
 		<li><b>None</b> - the gain matching is not applied.</li>
 		<li><b>Reference</b> - the gain of the reference signal is adjusted to match the loudness of the mix signal.</li>
@@ -80,13 +80,13 @@ a file, and each button in a row is asso
 		<li><b>Mix</b> - the button that allows drawing of charts for the mix signal.</li>
 		<li><b>Ref</b> - the button that allows drawing of charts for the reference signal.</li>
 	</ul>
-	<li><b>Controls</b> - additional contol over the graphs and charts:</li>
+	<li><b>Controls</b> - additional control over the graphs and charts:</li>
 	<ul>
 		<li><b>Curr</b> - the button that turns on drawing of current values on spectrum-related graphs.</li>
 		<li><b>Min</b> - the button that turns on drawing of minimums on spectrum-related graphs.</li>
 		<li><b>Min</b> - the button that turns on drawing of maximums on spectrum-related graphs.</li>
 		<li><b>Freeze</b> - the button that stops any update of graphs.</li>
-		<li><b>Reset</b> - the button that resets minum and maximum values on spectrum-related graphs.</li>
+		<li><b>Reset</b> - the button that resets minimum and maximum values on spectrum-related graphs.</li>
 	</ul>
 	<li><b>Window</b> - the weighting window applied to the audio data before performing spectral analysis.</li>
 	<li><b>Tolerance</b> - the number of points for the spectral analysis using FFT (Fast Fourier Transform).</li>
@@ -199,7 +199,7 @@ section allows to quickly switch to the
 	<li><b>Shift Mix</b> - additional time shift for the mix signal.</li>
 	<li><b>Shift Reference</b> - additional time shift for the reference signal.</li>
 </ul>
-<p>The <b>zoom</b> also can be adjusted by clicking the grap with the right mouse button and moving mouse pointer up and down.</p>
+<p>The <b>zoom</b> also can be adjusted by clicking the graph with the right mouse button and moving mouse pointer up and down.</p>
 <p>Alternative way to adjust mix and reference shifts can be achieved by clicking the graph with the left mouse button and
 moving mouse pointer left and right. By default both Mix and Reference are moved. Holding the 'Shift' key allows to adjust the
 shift of the mix only. Holding the 'Ctrl' key allows to adjust the shift of the reference only.</p>
@@ -218,7 +218,7 @@ holding the 'Shift' key will decelerate
 	<li><b>Measure combo</b> - selects the source for which the vertical line on the graph will display frequency, note and current level.</li>
 </ul>
 <p>Moving the mouse over the graph shows the frequency, the note and the level on the graph the mouse pointer is pointing at current moment.</p>
-<p>Clicking the graph will set the vertical measurement line to the corresponding position of the click.</p> 
+<p>Clicking the graph will set the vertical measurement line to the corresponding position of the click.</p>
 
 <p>The <b>Dynamics</b> tab allows to analyze the micro-dynamics of the signal.</p>
 <p>The advantage of the PSR value is that it does not depend on the loudness of the analyzed signal and allows to analyze the overall
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/src/main/meta/referencer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/src/main/meta/referencer.cpp
--- 1.2.21-5/modules/lsp-plugins-referencer/src/main/meta/referencer.cpp	2025-03-01 12:43:12.268555492 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/src/main/meta/referencer.cpp	2025-08-26 18:16:04.445802198 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-referencer
  * Created on: 16 окт 2024 г.
@@ -26,7 +26,7 @@
 
 #define LSP_PLUGINS_REFERENCER_VERSION_MAJOR       1
 #define LSP_PLUGINS_REFERENCER_VERSION_MINOR       0
-#define LSP_PLUGINS_REFERENCER_VERSION_MICRO       1
+#define LSP_PLUGINS_REFERENCER_VERSION_MICRO       3
 
 #define LSP_PLUGINS_REFERENCER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -210,94 +210,94 @@ namespace lsp
 
 
 
-        #define REF_LOOP(id, name) \
-            CONTROL("lb" id, name " start", U_SEC, referencer::LOOP_BEGIN), \
-            CONTROL("le" id, name " end", U_SEC, referencer::LOOP_END),  \
+        #define REF_LOOP(id, name, alias) \
+            CONTROL("lb" id, name " start", "Loop start" alias, U_SEC, referencer::LOOP_BEGIN), \
+            CONTROL("le" id, name " end", "Loop end" alias, U_SEC, referencer::LOOP_END),  \
             METER("pp" id, name " play position", U_SEC, referencer::SAMPLE_PLAYBACK)
 
-        #define REF_SAMPLE(id, name) \
+        #define REF_SAMPLE(id, name, alias) \
             PATH("sf" id, name " file"), \
             STATUS("fs" id, name " load status"), \
             METER("fl" id, name " length", U_SEC, referencer::SAMPLE_LENGTH), \
             MESH("fm" id, name " mesh data", referencer::CHANNELS_MAX, referencer::FILE_MESH_SIZE), \
-            AMP_GAIN("sg" id, name " gain", GAIN_AMP_0_DB, GAIN_AMP_P_24_DB), \
-            COMBO("ls" id, name " loop selector", 0, loop_selectors), \
-            REF_LOOP(id "_1", name " loop 1"), \
-            REF_LOOP(id "_2", name " loop 2"), \
-            REF_LOOP(id "_3", name " loop 3"), \
-            REF_LOOP(id "_4", name " loop 4")
+            AMP_GAIN("sg" id, name " gain", "Gain" alias, GAIN_AMP_0_DB, GAIN_AMP_P_24_DB), \
+            COMBO("ls" id, name " loop selector", "Loop" alias, 0, loop_selectors), \
+            REF_LOOP(id "_1", name " loop 1", alias " 1"), \
+            REF_LOOP(id "_2", name " loop 2", alias " 2"), \
+            REF_LOOP(id "_3", name " loop 3", alias " 3"), \
+            REF_LOOP(id "_4", name " loop 4", alias " 4")
 
         #define REF_SAMPLES \
-            COMBO("ssel", "Sample Selector", 0, sample_selectors), \
-            REF_SAMPLE("_1", "Sample 1"), \
-            REF_SAMPLE("_2", "Sample 2"), \
-            REF_SAMPLE("_3", "Sample 3"), \
-            REF_SAMPLE("_4", "Sample 4")
+            COMBO("ssel", "Sample Selector", "Sample selector", 0, sample_selectors), \
+            REF_SAMPLE("_1", "Sample 1", " 1"), \
+            REF_SAMPLE("_2", "Sample 2", " 2"), \
+            REF_SAMPLE("_3", "Sample 3", " 3"), \
+            REF_SAMPLE("_4", "Sample 4", " 4")
 
         #define REF_COMMON(tab_selectors, dfl_chan_selector, chan_selectors) \
-            SWITCH("play", "Playback", 0), \
-            INT_CONTROL("pssel", "Playback sample selector", U_NONE, referencer::SAMPLE_SELECTOR), \
-            INT_CONTROL("plsel", "Playback loop selector", U_NONE, referencer::LOOP_SELECTOR), \
-            COMBO("source", "Audio source", 0, source_selectors), \
-            COMBO("section", "Tab section selector", 0, tab_selectors), \
-            SWITCH("mixvis", "Mix graphs visibility", 1), \
-            SWITCH("refvis", "Reference graphs visibility", 1), \
-            SWITCH("currvis", "Current value graphs visibility", 1), \
-            SWITCH("minvis", "Minimum graphs visibility", 0), \
-            SWITCH("maxvis", "Maximum graphs visibility", 0), \
-            SWITCH("freeze", "Freeze graphs", 0), \
+            SWITCH("play", "Playback", "Playback", 0), \
+            INT_CONTROL("pssel", "Playback sample selector", "Sample selector", U_NONE, referencer::SAMPLE_SELECTOR), \
+            INT_CONTROL("plsel", "Playback loop selector", "Loop selector", U_NONE, referencer::LOOP_SELECTOR), \
+            COMBO("source", "Audio source", "Source", 0, source_selectors), \
+            COMBO("section", "Tab section selector", "Current tab", 0, tab_selectors), \
+            SWITCH("mixvis", "Mix graphs visibility", "Show Mix", 1), \
+            SWITCH("refvis", "Reference graphs visibility", "Show Ref" , 1), \
+            SWITCH("currvis", "Current value graphs visibility", "Show value", 1), \
+            SWITCH("minvis", "Minimum graphs visibility", "Show min", 0), \
+            SWITCH("maxvis", "Maximum graphs visibility", "Show max", 0), \
+            SWITCH("freeze", "Freeze graphs", "Freeze", 0), \
             /* playback loop display */ \
             MESH("loop_m", "Active loop contents mesh data", referencer::CHANNELS_MAX, referencer::FILE_MESH_SIZE), \
             METER("loop_l", "Active loop length", U_SEC, referencer::SAMPLE_LENGTH), \
             METER("loop_p", "Active loop play position", U_SEC, referencer::SAMPLE_PLAYBACK), \
             /* gain matching */ \
-            COMBO("gmmode", "Gain matching mode", 0, gain_matching), \
-            LOG_CONTROL("gmreact", "Gain matching reactivity", U_SEC, referencer::GAIN_MATCH_REACT), \
+            COMBO("gmmode", "Gain matching mode", "Gain match", 0, gain_matching), \
+            LOG_CONTROL("gmreact", "Gain matching reactivity", "Match react", U_SEC, referencer::GAIN_MATCH_REACT), \
             /* post-filter */ \
-            COMBO("fpos", "Filter position in the chain", 0, filter_positions), \
-            COMBO("fmode", "Filter mode", 0, filter_modes), \
-            COMBO("fslope", "Filter slope", 3, filter_slopes), \
-            COMBO("fsel", "Filter selector", 0, filter_selector), \
-            LOG_CONTROL("fsub", "Post-filter sub-bass high frequency", U_HZ, referencer::POST_SUB_BASS), \
-            LOG_CONTROL("fbass", "Post-filter bass high frequency", U_HZ, referencer::POST_BASS), \
-            LOG_CONTROL("flomid", "Post-filter low-mid frequency", U_HZ, referencer::POST_LOW_MID), \
-            LOG_CONTROL("fmid", "Post-filter mid frequency", U_HZ, referencer::POST_MID), \
-            LOG_CONTROL("fhimid", "Post-filter high-mid frequency", U_HZ, referencer::POST_HIGH_MID), \
+            COMBO("fpos", "Filter position in the chain", "Flt position", 0, filter_positions), \
+            COMBO("fmode", "Filter mode", "Flt mode", 0, filter_modes), \
+            COMBO("fslope", "Filter slope", "Flt slope", 3, filter_slopes), \
+            COMBO("fsel", "Filter selector", "Flt selector", 0, filter_selector), \
+            LOG_CONTROL("fsub", "Post-filter sub-bass frequency", "Sub freq", U_HZ, referencer::POST_SUB_BASS), \
+            LOG_CONTROL("fbass", "Post-filter bass frequency", "Bass freq", U_HZ, referencer::POST_BASS), \
+            LOG_CONTROL("flomid", "Post-filter low-mid frequency", "Low-mid freq", U_HZ, referencer::POST_LOW_MID), \
+            LOG_CONTROL("fmid", "Post-filter mid frequency", "Mid freq", U_HZ, referencer::POST_MID), \
+            LOG_CONTROL("fhimid", "Post-filter high-mid frequency", "High-mid freq", U_HZ, referencer::POST_HIGH_MID), \
             /* graph display maximum time */ \
-            CONTROL("maxtime", "Graph display maximum time", U_SEC, referencer::DYNA_TIME), \
+            CONTROL("maxtime", "Graph display maximum time", "Max time", U_SEC, referencer::DYNA_TIME), \
             /* Loudness metering */ \
-            CONTROL("ilufsit", "Integrated LUFS integration period", U_SEC, referencer::ILUFS_TIME), \
-            SWITCH("lmpk", "Peak graph visible", 0), \
-            SWITCH("lmtp", "True peak graph visible", 1), \
-            SWITCH("lmrms", "RMS graph visible", 0), \
-            SWITCH("lmmlufs", "Momentary LUFS graph visible", 0), \
-            SWITCH("lmslufs", "Short-term LUFS graph visible", 1), \
-            SWITCH("lmilufs", "Integrated LUFS graph visible", 0), \
+            CONTROL("ilufsit", "Integrated LUFS integration period", "ILUFS period", U_SEC, referencer::ILUFS_TIME), \
+            SWITCH("lmpk", "Peak graph visible", "Show peak", 0), \
+            SWITCH("lmtp", "True peak graph visible", "Show TP", 1), \
+            SWITCH("lmrms", "RMS graph visible", "Show RMS", 0), \
+            SWITCH("lmmlufs", "Momentary LUFS graph visible", "Show M-LUFS", 0), \
+            SWITCH("lmslufs", "Short-term LUFS graph visible", "Show S-LUFS", 1), \
+            SWITCH("lmilufs", "Integrated LUFS graph visible", "Show I-LUFS", 0), \
             /* PSR (dynamics) metering */ \
-            CONTROL("psrtime", "PSR measurement time period", U_SEC, referencer::PSR_PERIOD), \
-            LOG_CONTROL("psrthr", "PSR measurement threshold", U_GAIN_AMP, referencer::PSR_THRESH), \
-            COMBO("psrmode", "PSR hystogram mode", 0, psr_hyst_mode), \
+            CONTROL("psrtime", "PSR measurement time period", "PSR period", U_SEC, referencer::PSR_PERIOD), \
+            LOG_CONTROL("psrthr", "PSR measurement threshold", "PSR thresh", U_GAIN_AMP, referencer::PSR_THRESH), \
+            COMBO("psrmode", "PSR hystogram mode", "PSR mode", 0, psr_hyst_mode), \
             MESH("psrmesh", "PSR output hystogram", 3, referencer::PSR_MESH_SIZE + 4), \
             /* Waveform metering */ \
-            CONTROL("mixwfof", "Mix waveform frame offset", U_SEC, referencer::WAVE_OFFSET), \
-            CONTROL("refwfof", "Reference waveform frame offset", U_SEC, referencer::WAVE_OFFSET), \
-            CONTROL("wflen", "Waveform frame length", U_SEC, referencer::WAVE_SIZE), \
-            SWITCH("wflog", "Logarithmic scale", 0), \
-            CONTROL("wfscmin", "Minimum graph scale", U_DB, referencer::WAVE_SMIN_SCALE), \
-            CONTROL("wfscmax", "Maximum graph scale", U_DB, referencer::WAVE_SMAX_SCALE), \
+            CONTROL("mixwfof", "Mix waveform frame offset", "Mix wave off", U_SEC, referencer::WAVE_OFFSET), \
+            CONTROL("refwfof", "Reference waveform frame offset", "Ref wave off", U_SEC, referencer::WAVE_OFFSET), \
+            CONTROL("wflen", "Waveform frame length", "Wave length", U_SEC, referencer::WAVE_SIZE), \
+            SWITCH("wflog", "Logarithmic scale", "Log scale", 0), \
+            CONTROL("wfscmin", "Minimum graph scale", "Min scale", U_DB, referencer::WAVE_SMIN_SCALE), \
+            CONTROL("wfscmax", "Maximum graph scale", "Max scale", U_DB, referencer::WAVE_SMAX_SCALE), \
             /* FFT analysis */ \
-            LOG_CONTROL("famhor", "FFT horizontal marker", U_GAIN_AMP, referencer::FFT_HMARK), \
-            SWITCH("famhorv", "FFT horizontal marker visibility", 0), \
-            COMBO("famvers", "FFT vertical marker source", dfl_chan_selector, chan_selectors), \
-            LOG_CONTROL("famver", "FFT vertical marker", U_HZ, referencer::FFT_VMARK), \
+            LOG_CONTROL("famhor", "FFT horizontal marker", "FFT HLine lvl", U_GAIN_AMP, referencer::FFT_HMARK), \
+            SWITCH("famhorv", "FFT horizontal marker visibility", "Show HMarker", 0), \
+            COMBO("famvers", "FFT vertical marker source", "VMarker source", dfl_chan_selector, chan_selectors), \
+            LOG_CONTROL("famver", "FFT vertical marker", "FFT VLine freq", U_HZ, referencer::FFT_VMARK), \
             METER("famverv", "Vertical marker frequency level", U_GAIN_AMP, referencer::MTR_VMARK), \
-            COMBO("ffttol", "FFT Tolerance", referencer::FFT_RANK_DFL - referencer::FFT_RANK_MIN, fft_tolerance), \
-            COMBO("fftwnd", "FFT Window", referencer::FFT_WND_DFL, fft_windows), \
-            COMBO("fftenv", "FFT Envelope", referencer::FFT_ENV_DFL, fft_envelopes), \
-            LOG_CONTROL("fftrea", "FFT Reactivity", U_SEC, referencer::FFT_REACT_TIME), \
-            SWITCH("fftdamp", "FFT Damping", 1), \
-            TRIGGER("fftrst", "FFT Reset"), \
-            LOG_CONTROL("fftbal", "FFT Ballistics", U_SEC, referencer::FFT_BALLISTICS)
+            COMBO("ffttol", "FFT Tolerance", "FFT tol", referencer::FFT_RANK_DFL - referencer::FFT_RANK_MIN, fft_tolerance), \
+            COMBO("fftwnd", "FFT Window", "FFT wnd", referencer::FFT_WND_DFL, fft_windows), \
+            COMBO("fftenv", "FFT Envelope", "FFT env", referencer::FFT_ENV_DFL, fft_envelopes), \
+            LOG_CONTROL("fftrea", "FFT Reactivity", "Reactivity", U_SEC, referencer::FFT_REACT_TIME), \
+            SWITCH("fftdamp", "FFT Damping", "FFT damp", 1), \
+            TRIGGER("fftrst", "FFT Reset", "FFT reset"), \
+            LOG_CONTROL("fftbal", "FFT Ballistics", "Ballistics", U_SEC, referencer::FFT_BALLISTICS)
 
         #define REF_COMMON_METERS(id, name) \
             METER("pk_" id, name " Peak meter", U_GAIN_AMP, referencer::LOUD_METER), \
@@ -330,21 +330,21 @@ namespace lsp
             REF_COMMON_METERS_MONO("r", "Reference")
 
         #define REF_COMMON_STEREO \
-            COMBO("mode", "Output mode", 0, mode_selectors), \
-            COMBO("corrdis", "Correlation view mode", 0, graph_selectors), \
-            COMBO("stertyp", "Stereo analysis type", 0, stereo_selectors), \
-            COMBO("sterdis", "Stereo view mode", 0, graph_selectors), \
-            SWITCH("left_v", "Visibilty of FFT/waveform analysis for left channel", 0), \
-            SWITCH("right_v", "Visibilty of FFT/waveform analysis for right channel", 0), \
-            SWITCH("mid_v", "Visibilty of FFT/waveform analysis for middle channel", 1), \
-            SWITCH("side_v", "Visibilty of FFT/waveform analysis for side channel", 0), \
+            COMBO("mode", "Output mode", "Mode", 0, mode_selectors), \
+            COMBO("corrdis", "Correlation view mode", "Show corr", 0, graph_selectors), \
+            COMBO("stertyp", "Stereo analysis type", "Show stereo", 0, stereo_selectors), \
+            COMBO("sterdis", "Stereo view mode", "Stereo mode", 0, graph_selectors), \
+            SWITCH("left_v", "Visibilty of FFT/waveform analysis for left channel", "Show FFT L", 0), \
+            SWITCH("right_v", "Visibilty of FFT/waveform analysis for right channel", "Show FFT R", 0), \
+            SWITCH("mid_v", "Visibilty of FFT/waveform analysis for middle channel", "Show FFT M", 1), \
+            SWITCH("side_v", "Visibilty of FFT/waveform analysis for side channel", "Show FFT S", 0), \
             MESH("dmmesh", "Dynamics display mesh", 21, referencer::DYNA_MESH_SIZE + 4), \
             MESH("wfmesh", "Waveform mesh", 9, referencer::WAVE_MESH_SIZE + 4), \
             MESH("fftgr", "FFT Analysis mesh", 15, referencer::SPC_MESH_SIZE + 4), \
             MESH("fftming", "FFT minimum extremum mesh", 15, referencer::SPC_MESH_SIZE + 4), \
             MESH("fftmaxg", "FFT maximum extremum mesh", 15, referencer::SPC_MESH_SIZE + 4), \
-            CONTROL("goniohs", "Goniometer strobe history size", U_NONE, referencer::GONIO_HISTORY), \
-            LOG_CONTROL("goniond", "Maximum dots for plotting goniometer", U_NONE, referencer::GONIO_DOTS), \
+            CONTROL("goniohs", "Goniometer strobe history size", "Gonio history", U_NONE, referencer::GONIO_HISTORY), \
+            LOG_CONTROL("goniond", "Maximum dots for plotting goniometer", "Max dots", U_NONE, referencer::GONIO_DOTS), \
             REF_COMMON_METERS_STEREO("m", "Mix"), \
             REF_COMMON_METERS_STEREO("r", "Reference")
 
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/src/main/plug/referencer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/src/main/plug/referencer.cpp
--- 1.2.21-5/modules/lsp-plugins-referencer/src/main/plug/referencer.cpp	2025-03-01 12:43:12.268555492 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/src/main/plug/referencer.cpp	2025-08-26 18:16:04.445802198 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-referencer
  * Created on: 16 окт 2024 г.
@@ -1241,45 +1241,10 @@ namespace lsp
             // Compute the initial offset to start from
             offset              = (rb->position() + limit - length - offset) % limit;
 
-            if (length > dst_len)
-            {
-                for (size_t i=0; i<dst_len; ++i)
-                {
-                    size_t first    = (i * length) / dst_len;
-                    size_t last     = ((i + 1) * length) / dst_len;
-                    if (first < last)
-                    {
-                        first           = (first + offset) % limit;
-                        last            = (last + offset) % limit;
-
-                        if (first > last)
-                        {
-    //                        lsp_trace("sign_max2(%d, %d), limit=%d", int(first), int(limit - first), int(limit));
-    //                        lsp_trace("sign_max2(%d, %d), limit=%d", int(0), int(last), int(limit));
-
-                            const float a   = dsp::sign_max(&src[first], limit - first);
-                            const float b   = dsp::sign_max(&src[0], last);
-                            dst[i]          = (fabsf(a) >= fabsf(b)) ? a : b;
-                        }
-                        else
-                        {
-    //                        lsp_trace("sign_max1(%d, %d), limit=%d", int(first), int(last - first), int(limit));
-                            dst[i]          = dsp::sign_max(&src[first], last - first);
-                        }
-                    }
-                    else if (first < length)
-                        dst[i]          = src[(first + offset) % limit];
-                    else
-                        dst[i]          = 0.0f;
-                }
-            }
-            else
+            for (size_t i=0; i<dst_len; ++i)
             {
-                for (size_t i=0; i<dst_len; ++i)
-                {
-                    size_t first    = (i * length) / dst_len;
-                    dst[i]          = src[(first + offset) % limit];
-                }
+                size_t first    = (i * length) / dst_len;
+                dst[i]          = src[(first + offset) % limit];
             }
         }
 
@@ -1508,7 +1473,7 @@ namespace lsp
                 if ((!al->bFirst) && (al->nPos < ssize_t(nCrossfadeTime)))
                 {
                     // We need to render cross-fade first
-                    to_process          = lsp_min(nCrossfadeTime - al->nPos, to_process);
+                    to_process          = lsp_min(ssize_t(nCrossfadeTime) - al->nPos, to_process);
                     crossfade           = true;
                 }
                 else
diff -pruN 1.2.21-5/modules/lsp-plugins-referencer/src/main/ui/referencer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/src/main/ui/referencer.cpp
--- 1.2.21-5/modules/lsp-plugins-referencer/src/main/ui/referencer.cpp	2025-03-01 12:43:12.268555492 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-referencer/src/main/ui/referencer.cpp	2025-08-26 18:16:04.445802198 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-referencer
  * Created on: 16 окт 2024 г.
@@ -805,7 +805,7 @@ namespace lsp
 
             // Reset button state if needed
             waveform_t *wf      = &self->sWaveform;
-            wf->nBtnState      &= ~(1 << ev->nCode);
+            wf->nBtnState      &= ~(size_t(1) << ev->nCode);
 
             return STATUS_OK;
         }
diff -pruN 1.2.21-5/modules/lsp-plugins-return/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-return/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-return/.github/workflows/build.yml	2025-03-01 12:43:12.068556692 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-return/.github/workflows/build.yml	2025-08-26 18:16:04.317803440 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-return/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-return/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-return/CHANGELOG	2025-03-01 12:43:12.068556692 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-return/CHANGELOG	2025-08-26 18:16:04.317803440 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.5 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.4 ===
+* Updated build scripts and dependencies.
+
 === 1.0.3 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-return/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-return/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-return/dependencies.mk	2025-03-01 12:43:12.068556692 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-return/dependencies.mk	2025-08-26 18:16:04.317803440 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-return/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-return/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-return/make/tools.mk	2025-03-01 12:43:12.068556692 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-return/make/tools.mk	2025-08-26 18:16:04.321803401 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-return/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-return/modules.mk
--- 1.2.21-5/modules/lsp-plugins-return/modules.mk	2025-03-01 12:43:12.068556692 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-return/modules.mk	2025-08-26 18:16:04.321803401 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-return/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-return/project.mk
--- 1.2.21-5/modules/lsp-plugins-return/project.mk	2025-03-01 12:43:12.068556692 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-return/project.mk	2025-08-26 18:16:04.321803401 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Audio Return Plugin
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.3
+ARTIFACT_VERSION            = 1.0.5
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-return/res/doc/screenshots/return_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-return/res/doc/screenshots/return_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-return/res/doc/screenshots/return_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-return/res/doc/screenshots/return_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-return/src/main/meta/return.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-return/src/main/meta/return.cpp
--- 1.2.21-5/modules/lsp-plugins-return/src/main/meta/return.cpp	2025-03-01 12:43:12.072556668 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-return/src/main/meta/return.cpp	2025-08-26 18:16:04.321803401 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-return
  * Created on: 26 авг 2024 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_RETURN_VERSION_MAJOR       1
 #define LSP_PLUGINS_RETURN_VERSION_MINOR       0
-#define LSP_PLUGINS_RETURN_VERSION_MICRO       3
+#define LSP_PLUGINS_RETURN_VERSION_MICRO       5
 
 #define LSP_PLUGINS_RETURN_VERSION  \
     LSP_MODULE_VERSION( \
@@ -57,8 +57,8 @@ namespace lsp
             BYPASS,
             IN_GAIN,
             OUT_GAIN,
-            COMBO("mode", "Return mode", 0, return_mix_mode),
-            LOG_CONTROL("g_retn", "Return gain", U_GAIN_AMP, Return::RETURN_GAIN),
+            COMBO("mode", "Return mode", "Mode", 0, return_mix_mode),
+            LOG_CONTROL("g_retn", "Return gain", "Return gain", U_GAIN_AMP, Return::RETURN_GAIN),
             RETURN_NAME("return", "Audio return connection point name"),
             AUDIO_RETURN("rin", "Audio return input", 0, "return"),
 
@@ -77,8 +77,8 @@ namespace lsp
             BYPASS,
             IN_GAIN,
             OUT_GAIN,
-            COMBO("mode", "Return mode", 0, return_mix_mode),
-            LOG_CONTROL("g_retn", "Return gain", U_GAIN_AMP, Return::RETURN_GAIN),
+            COMBO("mode", "Return mode", "Mode", 0, return_mix_mode),
+            LOG_CONTROL("g_retn", "Return gain", "Return gain", U_GAIN_AMP, Return::RETURN_GAIN),
             RETURN_NAME("return", "Audio return  connection point name"),
             AUDIO_RETURN("rin_l", "Audio return input left", 0, "return"),
             AUDIO_RETURN("rin_r", "Audio return input right", 1, "return"),
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-room-builder/.github/workflows/build.yml	2025-03-01 12:43:13.460548336 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/.github/workflows/build.yml	2025-08-26 18:16:07.533772228 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-room-builder/CHANGELOG	2025-03-01 12:43:13.460548336 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/CHANGELOG	2025-08-26 18:16:07.533772228 +0000
@@ -2,6 +2,16 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.27 ===
+* Added new models for 3D rendering.
+* Updated build scripts and dependencies.
+
+=== 1.0.27 ===
+* Added overlay for equalization group.
+
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
 === 1.0.25 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-room-builder/dependencies.mk	2025-03-01 12:43:13.460548336 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/dependencies.mk	2025-08-26 18:16:07.533772228 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/include/private/meta/room_builder.h 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/include/private/meta/room_builder.h
--- 1.2.21-5/modules/lsp-plugins-room-builder/include/private/meta/room_builder.h	2025-03-01 12:43:13.460548336 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/include/private/meta/room_builder.h	2025-08-26 18:16:07.533772228 +0000
@@ -119,12 +119,12 @@ namespace lsp
             static constexpr float LCF_MIN                  = 10.0f;
             static constexpr float LCF_MAX                  = 1000.0f;
             static constexpr float LCF_DFL                  = 50.0f;
-            static constexpr float LCF_STEP                 = 0.1f;
+            static constexpr float LCF_STEP                 = 0.001f;
 
             static constexpr float HCF_MIN                  = 2000.0f;
             static constexpr float HCF_MAX                  = 22000.0f;
             static constexpr float HCF_DFL                  = 10000.0f;
-            static constexpr float HCF_STEP                 = 0.8f;
+            static constexpr float HCF_STEP                 = 0.001f;
 
             static constexpr float BA_MIN                   = GAIN_AMP_M_12_DB;
             static constexpr float BA_MAX                   = GAIN_AMP_P_12_DB;
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-room-builder/make/tools.mk	2025-03-01 12:43:13.460548336 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/make/tools.mk	2025-08-26 18:16:07.533772228 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/modules.mk
--- 1.2.21-5/modules/lsp-plugins-room-builder/modules.mk	2025-03-01 12:43:13.464548313 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/modules.mk	2025-08-26 18:16:07.533772228 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/project.mk
--- 1.2.21-5/modules/lsp-plugins-room-builder/project.mk	2025-03-01 12:43:13.464548313 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/project.mk	2025-08-26 18:16:07.533772228 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Room Builder Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.25
+ARTIFACT_VERSION            = 1.0.27
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-room-builder/res/doc/screenshots/room_builder_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/doc/screenshots/room_builder_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-room-builder/res/doc/screenshots/room_builder_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/doc/screenshots/room_builder_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/cinema.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/cinema.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/cinema.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/cinema.obj	2025-08-26 18:16:07.537772189 +0000
@@ -0,0 +1,11559 @@
+# Cinema
+# (C) Linux Studio Plugins Project
+o Hall
+v -23.587952 0.000000 11.996048
+v -22.784212 -6.105011 11.996048
+v -11.793976 0.000000 12.541479
+v -22.784212 6.105011 11.996048
+v -20.427765 -11.793976 11.996048
+v -10.213882 -5.896988 12.541479
+v -16.679201 -16.679201 11.996048
+v 0.000000 0.000000 13.086910
+v -11.793976 -20.427765 11.996048
+v -5.896988 -10.213882 12.541479
+v -6.105011 -22.784212 11.996048
+v 0.000000 -23.587952 11.996048
+v 0.000000 -11.793976 12.541479
+v 6.105011 -22.784212 11.996048
+v 11.793976 -20.427765 11.996048
+v 5.896988 -10.213882 12.541479
+v 16.679201 -16.679201 11.996048
+v 20.427765 -11.793976 11.996048
+v 10.213882 -5.896988 12.541479
+v 22.784212 -6.105011 11.996048
+v 23.587952 0.000000 11.996048
+v 11.793976 0.000000 12.541479
+v 22.784212 6.105011 11.996048
+v 20.427765 11.793976 11.996048
+v 10.213882 5.896988 12.541479
+v 16.679201 16.679201 11.996048
+v 11.793976 20.427765 11.996048
+v 5.896988 10.213882 12.541479
+v 6.105011 22.784212 11.996048
+v 0.000000 23.587952 11.996048
+v 0.000000 11.793976 12.541479
+v -6.105011 22.784212 11.996048
+v -11.793976 20.427765 11.996048
+v -5.896988 10.213882 12.541479
+v -16.679201 16.679201 11.996048
+v -10.213882 5.896988 12.541479
+v -20.427765 11.793976 11.996048
+v -22.784212 -6.105011 0.000000
+v -23.587952 0.000000 0.000000
+v -20.427765 -11.793976 0.000000
+v -16.679201 -16.679201 0.000000
+v -11.793976 -20.427765 0.000000
+v -6.105011 -22.784212 0.000000
+v 0.000000 -23.587952 0.000000
+v 6.105011 -22.784212 0.000000
+v 11.793976 -20.427765 0.000000
+v 16.679201 -16.679201 0.000000
+v 20.427765 -11.793976 0.000000
+v 22.784212 -6.105011 0.000000
+v 23.587952 0.000000 0.000000
+v 22.784212 6.105011 0.000000
+v 20.427765 11.793976 0.000000
+v 16.679201 16.679201 0.000000
+v 11.793976 20.427765 0.000000
+v 6.105011 22.784212 0.000000
+v 0.000000 23.587952 0.000000
+v -6.105011 22.784212 0.000000
+v -11.793976 20.427765 0.000000
+v -16.679201 16.679201 0.000000
+v -20.427765 11.793976 0.000000
+v -22.784212 6.105011 0.000000
+v -16.770000 13.329773 4.842749
+v -17.612822 13.928736 4.842749
+v -16.770000 13.329773 7.722313
+v -17.612822 13.928736 7.722313
+v -14.524420 -17.124907 4.850000
+v -14.009279 -17.548826 4.850000
+v -15.001724 -16.708364 4.842749
+v -17.680681 -13.842497 7.722313
+v -14.524420 -17.124907 6.850000
+v -17.680681 -13.842497 4.842749
+v -12.942367 -18.349833 4.850000
+v -12.942367 -18.349833 6.850000
+v -11.864881 -19.064255 4.842749
+v -13.518527 -17.929602 7.722313
+v -14.009279 -17.548826 6.850000
+v -13.481773 -17.957254 6.850000
+v -8.444059 -20.806707 7.722313
+v -8.365892 -20.838259 4.842749
+v -2.799735 -22.279648 7.722313
+v -3.137962 -22.234531 4.122519
+v 3.033532 -22.249020 7.722313
+v 2.018501 -22.363962 3.336580
+v 6.866783 -21.379160 2.502137
+v 8.662079 -20.716890 7.722313
+v 9.370709 -20.406151 2.020663
+v 13.609107 -17.860945 1.530000
+v 16.973394 -14.701192 3.500000
+v 15.372650 -16.367737 1.530000
+v 16.973394 -14.701192 1.530000
+v 13.706055 -17.786659 7.722313
+v 11.701443 -19.165005 1.530000
+v 18.214106 -13.132689 3.500000
+v 20.895943 -8.220751 1.530000
+v 18.214106 -13.132689 1.530000
+v 17.825062 -13.656075 7.722313
+v 17.402433 -14.190719 3.500000
+v 17.816126 -13.667730 3.500000
+v 20.741123 -8.603893 7.722313
+v 22.257446 -2.971069 7.722313
+v 22.279842 -2.798186 1.530000
+v 22.271700 2.862262 7.722313
+v 22.279842 2.798186 1.530000
+v 20.895943 8.220751 1.530000
+v 18.214106 13.132689 3.500000
+v 18.214106 13.132689 1.530000
+v 16.973394 14.701192 1.530000
+v 16.973394 14.701192 3.500000
+v 15.372650 16.367737 1.530000
+v 20.782923 8.502430 7.722313
+v 13.609107 17.860945 1.530000
+v 17.891584 13.568801 7.722313
+v 17.816126 13.667730 3.500000
+v 17.402433 14.190719 3.500000
+v 13.792813 17.719467 7.722313
+v 11.701443 19.165005 1.530000
+v 8.763217 20.674313 7.722313
+v 6.310326 21.549965 2.603852
+v 3.142226 22.233929 7.722313
+v 0.849657 22.438789 3.522614
+v -2.690823 22.293062 7.722313
+v -3.742253 22.140839 4.209277
+v -8.365892 20.838259 4.842749
+v -8.342278 20.847723 7.722313
+v -11.833809 19.083557 4.842749
+v -14.524420 17.124907 4.850000
+v -14.947209 16.757151 4.842749
+v -14.009279 17.548826 4.850000
+v -12.942367 18.349833 6.850000
+v -12.942367 18.349833 4.850000
+v -14.524420 17.124907 6.850000
+v -13.430745 17.995451 7.722313
+v -13.481773 17.957254 6.850000
+v -14.009279 17.548826 6.850000
+v -13.481773 -17.957254 4.850000
+v -13.481773 17.957254 4.850000
+v 11.309464 11.309464 7.722313
+v 13.851207 7.996998 7.722313
+v 7.996998 13.851207 7.722313
+v 15.449014 4.139551 7.722313
+v 4.139551 15.449014 7.722313
+v 15.993996 0.000000 7.722313
+v 0.000000 15.993996 7.722313
+v 15.449014 -4.139551 7.722313
+v -4.139551 15.449014 7.722313
+v -7.996998 13.851207 7.722313
+v 13.851207 -7.996998 7.722313
+v -11.309464 11.309464 7.722313
+v 11.309464 -11.309464 7.722313
+v -13.851207 7.996998 7.722313
+v 7.996998 -13.851207 7.722313
+v -15.449014 4.139551 7.722313
+v -16.086861 4.452006 7.722313
+v 4.139551 -15.449014 7.722313
+v -15.993996 0.000000 7.722313
+v 0.000000 -15.993996 7.722313
+v -15.449014 -4.139551 7.722313
+v -16.086861 -4.452006 7.722313
+v -13.851207 -7.996998 7.722313
+v -4.139551 -15.449014 7.722313
+v -7.996998 -13.851207 7.722313
+v -11.309464 -11.309464 7.722313
+v -16.770000 -13.329773 7.722313
+v -16.257015 -7.695943 6.745093
+v -16.236544 -7.381712 6.745093
+v -16.216927 -7.067428 6.745093
+v -16.198164 -6.753091 6.745093
+v -16.002211 -0.440467 6.762501
+v -16.001444 -0.126812 6.762501
+v -16.001524 0.186844 6.762501
+v -16.002455 0.500498 6.762501
+v -16.257015 -7.695943 6.314907
+v -16.198164 6.753091 6.745093
+v -16.216927 7.067428 6.745093
+v -16.236544 7.381712 6.745093
+v -16.257015 7.695943 6.745093
+v -16.198164 -6.753091 6.314907
+v -16.002211 -0.440467 6.297499
+v -16.002455 0.500498 6.297499
+v -16.198164 6.753091 6.314907
+v -16.257015 7.695943 6.314907
+v -16.086861 -4.452006 4.842749
+v -16.001444 -0.126812 6.297499
+v -16.216927 -7.067428 6.314907
+v -16.236544 -7.381712 6.314907
+v -16.770000 -13.329773 4.842749
+v -16.001524 0.186844 6.297499
+v -16.086861 4.452006 4.842749
+v -16.236544 7.381712 6.314907
+v -16.216927 7.067428 6.314907
+v -9.613025 18.604757 4.842749
+v -10.716566 16.296930 4.842749
+v -11.672109 13.923998 4.842749
+v -11.742851 13.747464 4.842749
+v -11.812698 13.570574 4.842749
+v -11.881649 13.393333 4.842749
+v -12.123717 12.623377 4.842749
+v -11.864572 13.387035 4.842749
+v -12.367596 11.854707 4.842749
+v -12.596111 11.081329 4.842749
+v -14.084631 3.743596 4.842749
+v -14.084631 -3.743596 4.842749
+v -12.596111 -11.081329 4.842749
+v -12.123717 -12.623377 4.842749
+v -11.881649 -13.393333 4.842749
+v -11.864572 -13.387035 4.842749
+v -12.367596 -11.854707 4.842749
+v -10.716566 -16.296930 4.842749
+v -9.613025 -18.604757 4.842749
+v -11.742851 -13.747464 4.842749
+v -11.672109 -13.923998 4.842749
+v -11.812698 -13.570574 4.842749
+v 10.789445 18.433210 1.530000
+v 9.914001 17.658060 1.530000
+v 5.527920 18.861553 2.333751
+v 9.077168 16.841375 1.530000
+v 1.446285 19.974312 3.108929
+v -2.550436 20.044228 3.766077
+v -6.262912 19.221144 4.309434
+v -8.217864 18.401505 4.573534
+v -10.110693 17.300055 4.815637
+v -11.543538 14.238400 4.840495
+v 16.728933 14.507458 1.530000
+v 17.994137 12.958759 1.530000
+v 9.887614 16.196524 1.530000
+v 9.621960 16.417082 1.530000
+v 9.351772 16.632065 1.530000
+v 7.339301 13.718203 1.530000
+v 5.246900 10.844559 1.530000
+v 3.670709 7.658402 1.530000
+v 3.304418 7.149453 1.530000
+v 3.490968 7.724681 1.530000
+v 3.132354 6.569726 1.530000
+v 3.082431 5.947672 1.530000
+v 2.974883 5.985867 1.530000
+v 17.994137 -12.958759 1.530000
+v 2.316417 2.007145 1.530000
+v 2.316417 -2.007145 1.530000
+v 16.728933 -14.507458 1.530000
+v 3.082431 -5.947672 1.530000
+v 3.132354 -6.569726 1.530000
+v 2.974883 -5.985867 1.530000
+v 3.670708 -7.658401 1.530000
+v 3.304418 -7.149452 1.530000
+v 3.490968 -7.724681 1.530000
+v 5.246900 -10.844559 1.530000
+v 9.887614 -16.196524 1.530000
+v 7.339301 -13.718203 1.530000
+v 10.789445 -18.433210 1.530000
+v 9.914001 -17.658060 1.530000
+v 9.621960 -16.417082 1.530000
+v 9.351772 -16.632065 1.530000
+v 9.077168 -16.841375 1.530000
+v 16.728933 14.507458 1.500000
+v 17.304062 14.963244 3.500000
+v 17.304062 14.963244 1.500000
+v 18.574434 13.417601 3.500000
+v 18.574434 13.417601 1.500000
+v 17.994137 12.958759 1.500000
+v 18.574434 -13.417601 1.500000
+v 18.574434 -13.417601 3.500000
+v 17.994137 -12.958759 1.500000
+v 17.304062 -14.963244 3.500000
+v 16.728933 -14.507458 1.500000
+v 17.304062 -14.963244 1.500000
+v 6.424571 -18.457159 2.144615
+v 3.445129 -19.569550 2.744989
+v -10.110693 -17.300055 4.815637
+v -6.723078 -19.054310 4.372903
+v 0.198861 -20.100077 3.323248
+v -3.230216 -19.959534 3.869957
+v -11.543538 -14.238400 4.840495
+v -13.199250 -18.679588 4.850000
+v -13.199250 -18.679588 6.850000
+v -14.801267 -17.478655 4.850000
+v -14.801267 -17.478655 6.850000
+v -14.801267 17.478655 4.850000
+v -13.199250 18.679588 4.850000
+v -13.199250 18.679588 6.850000
+v -14.801267 17.478655 6.850000
+v -15.449014 -4.139551 8.498143
+v -15.993996 0.000000 8.498143
+v -13.851207 -7.996998 8.498143
+v -11.309464 -11.309464 8.498143
+v -7.996998 -13.851207 8.498143
+v -4.139551 -15.449014 8.498143
+v 0.000000 -15.993996 8.498143
+v 4.139551 -15.449014 8.498143
+v 7.996998 -13.851207 8.498143
+v 11.309464 -11.309464 8.498143
+v 13.851207 -7.996998 8.498143
+v 15.449014 -4.139551 8.498143
+v 15.993996 0.000000 8.498143
+v 15.449014 4.139551 8.498143
+v 13.851207 7.996998 8.498143
+v 11.309464 11.309464 8.498143
+v 7.996998 13.851207 8.498143
+v 4.139551 15.449014 8.498143
+v 0.000000 15.993996 8.498143
+v -4.139551 15.449014 8.498143
+v -7.996998 13.851207 8.498143
+v -11.309464 11.309464 8.498143
+v -13.851207 7.996998 8.498143
+v -15.449014 4.139551 8.498143
+v -16.349874 0.186844 6.762501
+v -16.350807 0.500498 6.762501
+v -16.349792 -0.126812 6.762501
+v -16.350563 -0.440467 6.762501
+v -16.350807 0.500498 6.297499
+v -16.350563 -0.440467 6.297499
+v -16.349792 -0.126812 6.297499
+v -16.349874 0.186844 6.297499
+v -16.585579 -7.381713 6.314907
+v -16.606110 -7.695943 6.314907
+v -16.565905 -7.067428 6.314907
+v -16.547087 -6.753091 6.314907
+v -16.547087 -6.753091 6.745093
+v -16.606110 -7.695943 6.745093
+v -16.565905 -7.067428 6.745093
+v -16.585579 -7.381713 6.745093
+v -16.606110 7.695943 6.314907
+v -16.585579 7.381713 6.314907
+v -16.565905 7.067428 6.314907
+v -16.547087 6.753091 6.314907
+v -16.606110 7.695943 6.745093
+v -16.547087 6.753091 6.745093
+v -16.565905 7.067428 6.745093
+v -16.585579 7.381713 6.745093
+v -11.881649 -13.393333 4.840495
+v -11.771222 -13.675929 4.840495
+v -11.658516 -13.957625 4.840495
+v -11.854124 -13.383183 4.840495
+v -11.859347 -13.385109 4.841622
+v -11.861959 -13.386072 4.842185
+v -0.172299 -7.103558 2.203737
+v -3.754074 -8.375589 2.971138
+v -3.194011 -10.189767 2.972100
+v -7.244219 -11.683281 3.845901
+v -12.472836 -11.471972 4.840818
+v -12.471705 -11.471570 4.840576
+v -12.471329 -11.471437 4.840495
+v -12.472082 -11.471704 4.840657
+v -12.472836 11.471972 4.840818
+v -14.070742 3.879432 4.840495
+v -12.472836 11.471972 4.840495
+v -14.070742 -3.879432 4.840495
+v -12.472836 -11.471972 4.840495
+v -3.194011 10.189767 2.972100
+v -3.754074 8.375589 2.971138
+v -7.244219 11.683281 3.845901
+v -7.830837 9.823412 3.845146
+v -11.861959 13.386072 4.842185
+v -11.859347 13.385109 4.841622
+v -11.854124 13.383183 4.840495
+v -12.471329 11.471437 4.840495
+v -12.472082 11.471704 4.840657
+v -12.472459 11.471838 4.840738
+v -11.881649 13.393333 4.840495
+v -11.658516 13.957625 4.840495
+v -11.771222 13.675929 4.840495
+v -11.096623 15.273133 4.840495
+v -10.618865 16.293991 4.840495
+v -10.110693 17.300055 4.840495
+v 9.887614 16.196524 1.713710
+v 9.662394 16.384111 1.713710
+v 9.433892 16.567692 1.713710
+v 9.202184 16.747204 1.887421
+v 9.202184 16.747204 1.713710
+v 8.964928 16.924362 1.887421
+v 8.724547 17.097256 1.887421
+v 8.481119 17.265831 2.061131
+v 8.481119 17.265831 1.887421
+v 8.231734 17.431988 2.061131
+v 7.979387 17.593611 2.061131
+v 7.724162 17.750648 2.061131
+v 7.724162 17.750648 2.234841
+v 7.462534 17.905136 2.234841
+v 7.198120 18.054804 2.234841
+v 6.931009 18.199606 2.234841
+v 6.931009 18.199606 2.408551
+v 6.657008 18.341661 2.408551
+v 6.380411 18.478594 2.408551
+v 6.101314 18.610355 2.582262
+v 6.101314 18.610355 2.408551
+v 5.814787 18.739103 2.582262
+v 5.234678 18.980209 2.755972
+v 5.234678 18.980209 2.582262
+v 4.935452 19.094656 2.755972
+v 4.634073 19.203300 2.755972
+v 5.525875 18.862404 2.582262
+v 4.330650 19.306105 2.755972
+v 4.330650 19.306105 2.929682
+v 4.018524 19.405106 2.929682
+v 3.704503 19.497927 2.929682
+v 3.388712 19.584532 3.103392
+v 3.388712 19.584532 2.929682
+v 3.063449 19.666780 3.103392
+v 2.736590 19.742435 3.103392
+v 2.408267 19.811462 3.277103
+v 2.408267 19.811462 3.103392
+v 2.069595 19.875444 3.277103
+v 1.388628 19.982233 3.450813
+v 1.388628 19.982233 3.277103
+v 1.036221 20.026180 3.450813
+v 0.682954 20.062574 3.450813
+v 1.729666 19.932377 3.277103
+v 0.328989 20.091396 3.624523
+v 0.328989 20.091396 3.450813
+v -0.037542 20.113218 3.624523
+v -0.404465 20.126925 3.624523
+v -0.771603 20.132504 3.798234
+v -0.771603 20.132504 3.624523
+v -1.152730 20.129698 3.798234
+v -1.533693 20.118135 3.798234
+v -1.914289 20.097824 3.798234
+v -1.914289 20.097824 3.971944
+v -2.310601 20.067331 3.971944
+v -2.706069 20.027351 3.971944
+v -3.100466 19.977905 3.971944
+v -3.100466 19.977905 4.145654
+v -3.512711 19.915909 4.145654
+v -3.923268 19.843573 4.145654
+v -4.331878 19.760941 4.145654
+v -4.331878 19.760941 4.319364
+v -4.761037 19.662548 4.319364
+v -5.187433 19.552799 4.319364
+v -5.610765 19.431770 4.319364
+v -6.058172 19.290482 4.493074
+v -5.610765 19.431770 4.493074
+v -6.501404 19.136597 4.493074
+v -6.940106 18.970236 4.493074
+v -7.407670 18.777029 4.666785
+v -6.940106 18.970236 4.666785
+v -7.869126 18.569653 4.666785
+v -8.324041 18.348299 4.666785
+v -8.933979 18.023800 4.840495
+v -8.324041 18.348299 4.840495
+v -9.529874 17.674183 4.840495
+v -9.529874 -17.674183 4.840495
+v -10.110693 -17.300055 4.840495
+v -8.933979 -18.023800 4.840495
+v -8.324041 -18.348299 4.666785
+v -8.324041 -18.348299 4.840495
+v -7.407670 -18.777029 4.666785
+v -6.940106 -18.970236 4.493074
+v -6.940106 -18.970236 4.666785
+v -7.869126 -18.569653 4.666785
+v -6.501404 -19.136597 4.493074
+v -6.058172 -19.290482 4.493074
+v -5.610765 -19.431770 4.319364
+v -5.610765 -19.431770 4.493074
+v -4.761037 -19.662548 4.319364
+v -4.331878 -19.760941 4.145654
+v -4.331878 -19.760941 4.319364
+v -5.187433 -19.552799 4.319364
+v -3.512711 -19.915909 4.145654
+v -3.100466 -19.977905 3.971944
+v -3.100466 -19.977905 4.145654
+v -3.923268 -19.843573 4.145654
+v -2.706069 -20.027351 3.971944
+v -2.310601 -20.067331 3.971944
+v -1.914289 -20.097824 3.798234
+v -1.914289 -20.097824 3.971944
+v -1.152730 -20.129698 3.798234
+v -0.771603 -20.132504 3.624523
+v -0.771603 -20.132504 3.798234
+v -1.533693 -20.118135 3.798234
+v -0.037542 -20.113218 3.624523
+v 0.328989 -20.091396 3.450813
+v 0.328989 -20.091396 3.624523
+v -0.404465 -20.126925 3.624523
+v 0.682954 -20.062574 3.450813
+v 1.036221 -20.026180 3.450813
+v 1.388628 -19.982233 3.277103
+v 1.388628 -19.982233 3.450813
+v 2.069595 -19.875444 3.277103
+v 2.408267 -19.811462 3.103392
+v 2.408267 -19.811462 3.277103
+v 1.729666 -19.932377 3.277103
+v 3.063449 -19.666780 3.103392
+v 3.388712 -19.584532 2.929682
+v 3.388712 -19.584532 3.103392
+v 2.736590 -19.742435 3.103392
+v 3.704503 -19.497927 2.929682
+v 4.018524 -19.405106 2.929682
+v 4.330650 -19.306105 2.755972
+v 4.330650 -19.306105 2.929682
+v 4.935452 -19.094656 2.755972
+v 5.234678 -18.980209 2.582262
+v 5.234678 -18.980209 2.755972
+v 4.634073 -19.203300 2.755972
+v 5.814787 -18.739103 2.582262
+v 6.101314 -18.610355 2.408551
+v 6.101314 -18.610355 2.582262
+v 5.525875 -18.862404 2.582262
+v 6.380411 -18.478594 2.408551
+v 6.657008 -18.341661 2.408551
+v 6.931009 -18.199606 2.234841
+v 6.931009 -18.199606 2.408551
+v 7.724162 -17.750648 2.061131
+v 7.462534 -17.905136 2.234841
+v 7.724162 -17.750648 2.234841
+v 7.198120 -18.054804 2.234841
+v 8.231734 -17.431988 2.061131
+v 8.481119 -17.265831 1.887421
+v 8.481119 -17.265831 2.061131
+v 7.979387 -17.593611 2.061131
+v 8.964928 -16.924362 1.887421
+v 9.202184 -16.747204 1.713710
+v 9.202184 -16.747204 1.887421
+v 8.724547 -17.097256 1.887421
+v 9.433892 -16.567692 1.713710
+v 9.662394 -16.384111 1.713710
+v 9.887614 -16.196524 1.713710
+v 3.670708 -7.658401 1.713710
+v 5.246900 -10.844559 1.713710
+v 7.339301 -13.718203 1.713710
+v -10.874329 -13.021883 4.666785
+v -10.874329 -13.021883 4.840495
+v -10.066314 -12.723928 4.493074
+v -10.066314 -12.723928 4.666785
+v -9.258295 -12.425971 4.319364
+v -9.258295 -12.425971 4.493074
+v -8.450274 -12.128014 4.145654
+v -8.450274 -12.128014 4.319364
+v -7.642250 -11.830054 3.971944
+v -7.642250 -11.830054 4.145654
+v -6.834221 -11.532094 3.798234
+v -6.834221 -11.532094 3.971944
+v -6.026188 -11.234132 3.624523
+v -6.026188 -11.234132 3.798234
+v -5.218151 -10.936169 3.450813
+v -5.218151 -10.936169 3.624523
+v -4.410110 -10.638203 3.277103
+v -4.410110 -10.638203 3.450813
+v -3.602062 -10.340236 3.103392
+v -3.602062 -10.340236 3.277103
+v -2.794009 -10.042266 2.929682
+v -2.794009 -10.042266 3.103392
+v -1.985950 -9.744294 2.755972
+v -1.985950 -9.744294 2.929682
+v -1.177884 -9.446320 2.582262
+v -1.177884 -9.446320 2.755972
+v -0.369810 -9.148342 2.408551
+v -0.369810 -9.148342 2.582262
+v 0.438273 -8.850362 2.234841
+v 0.438273 -8.850362 2.408551
+v 1.246365 -8.552379 2.061131
+v 1.246365 -8.552379 2.234841
+v 2.054467 -8.254391 1.887421
+v 2.054467 -8.254391 2.061131
+v 2.862581 -7.956398 1.713710
+v 2.862581 -7.956398 1.887421
+v 3.082431 -5.947672 1.713710
+v 1.457342 -6.524807 1.887421
+v 2.269844 -6.236255 1.713710
+v 2.269844 -6.236255 1.887421
+v 0.644914 -6.813333 2.061131
+v 1.457342 -6.524807 2.061131
+v -0.167446 -7.101834 2.234841
+v 0.644914 -6.813333 2.234841
+v -0.979746 -7.390315 2.408551
+v -0.167446 -7.101834 2.408551
+v -1.791993 -7.678776 2.582262
+v -0.979746 -7.390315 2.582262
+v -2.604190 -7.967220 2.755972
+v -1.791993 -7.678776 2.755972
+v -3.416342 -8.255648 2.929682
+v -2.604190 -7.967220 2.929682
+v -3.416342 -8.255648 3.103392
+v -5.040530 -8.832462 3.277103
+v -4.228455 -8.544062 3.103392
+v -4.228455 -8.544062 3.277103
+v -5.852572 -9.120851 3.450813
+v -5.040530 -8.832462 3.450813
+v -6.664583 -9.409228 3.624523
+v -5.852572 -9.120851 3.624523
+v -7.476565 -9.697596 3.798234
+v -6.664583 -9.409228 3.798234
+v -8.288521 -9.985954 3.971944
+v -7.476565 -9.697596 3.971944
+v -9.100453 -10.274303 4.145654
+v -8.288521 -9.985954 4.145654
+v -9.912363 -10.562645 4.319364
+v -9.100453 -10.274303 4.319364
+v -10.724252 -10.850980 4.493074
+v -9.912363 -10.562645 4.493074
+v -11.536120 -11.139307 4.666785
+v -10.724252 -10.850980 4.666785
+v -11.536120 -11.139307 4.840495
+v 3.082431 5.947672 1.713710
+v 2.316417 2.007145 1.713710
+v 2.316417 -2.007145 1.713710
+v -11.536120 11.139307 4.666785
+v -11.536120 11.139307 4.840495
+v -10.724252 10.850980 4.493074
+v -10.724252 10.850980 4.666785
+v -9.912363 10.562645 4.319364
+v -9.912363 10.562645 4.493074
+v -9.100453 10.274303 4.145654
+v -9.100453 10.274303 4.319364
+v -8.288521 9.985954 3.971944
+v -8.288521 9.985954 4.145654
+v -7.476565 9.697596 3.798234
+v -7.476565 9.697596 3.971944
+v -6.664583 9.409228 3.624523
+v -6.664583 9.409228 3.798234
+v -5.852572 9.120851 3.450813
+v -5.852572 9.120851 3.624523
+v -5.040530 8.832462 3.277103
+v -5.040530 8.832462 3.450813
+v -4.228455 8.544062 3.103392
+v -4.228455 8.544062 3.277103
+v -3.416342 8.255648 2.929682
+v -3.416342 8.255648 3.103392
+v -2.604190 7.967220 2.755972
+v -2.604190 7.967220 2.929682
+v -1.791993 7.678776 2.582262
+v -1.791993 7.678776 2.755972
+v -0.979746 7.390315 2.408551
+v -0.979746 7.390315 2.582262
+v -0.167446 7.101834 2.234841
+v -0.167446 7.101834 2.408551
+v 0.644914 6.813333 2.061131
+v 0.644914 6.813333 2.234841
+v 1.457342 6.524807 1.887421
+v 1.457342 6.524807 2.061131
+v 2.269844 6.236255 1.713710
+v 2.269844 6.236255 1.887421
+v -10.874329 13.021884 4.666785
+v -10.874329 13.021884 4.840495
+v -10.066313 12.723928 4.493074
+v -10.066313 12.723928 4.666785
+v -9.258295 12.425971 4.319364
+v -9.258295 12.425971 4.493074
+v -8.450274 12.128014 4.145654
+v -8.450274 12.128014 4.319364
+v -7.642250 11.830054 3.971944
+v -7.642250 11.830054 4.145654
+v -6.834221 11.532094 3.798234
+v -6.834221 11.532094 3.971944
+v -6.026188 11.234132 3.624523
+v -6.026188 11.234132 3.798234
+v -5.218151 10.936169 3.450813
+v -5.218151 10.936169 3.624523
+v -4.410109 10.638204 3.277103
+v -4.410109 10.638204 3.450813
+v -3.602062 10.340236 3.103392
+v -3.602062 10.340236 3.277103
+v -2.794009 10.042266 2.929682
+v -2.794009 10.042266 3.103392
+v -1.985950 9.744294 2.755972
+v -1.985950 9.744294 2.929682
+v -1.177883 9.446321 2.582262
+v -1.177883 9.446321 2.755972
+v -0.369809 9.148343 2.408551
+v -0.369809 9.148343 2.582262
+v 0.438273 8.850363 2.234841
+v 0.438273 8.850363 2.408551
+v 1.246365 8.552379 2.061131
+v 1.246365 8.552379 2.234841
+v 2.054467 8.254391 1.887421
+v 2.054467 8.254391 2.061131
+v 2.862581 7.956399 1.713710
+v 2.862581 7.956399 1.887421
+v 3.670709 7.658402 1.713710
+v 7.339301 13.718203 1.713710
+v 5.246900 10.844559 1.713710
+v -10.618865 -16.293991 4.840495
+v -11.096623 -15.273133 4.840495
+v -9.172170 0.000000 9.682111
+v -2.350344 0.000000 10.866078
+v -2.270258 -0.608314 10.866078
+v -2.270258 0.608314 10.866078
+v -7.943332 -4.586085 9.682111
+v -2.035458 -1.175172 10.866078
+v -1.661944 -1.661944 10.866078
+v -4.586085 -7.943332 9.682111
+v -1.175172 -2.035458 10.866078
+v -0.608314 -2.270258 10.866078
+v 0.000000 -9.172170 9.682111
+v 0.000000 -2.350344 10.866078
+v 0.608314 -2.270258 10.866078
+v 4.586085 -7.943332 9.682111
+v 1.175172 -2.035458 10.866078
+v 1.661944 -1.661944 10.866078
+v 7.943332 -4.586085 9.682111
+v 2.035458 -1.175172 10.866078
+v 2.270258 -0.608314 10.866078
+v 9.172170 0.000000 9.682111
+v 2.350344 0.000000 10.866078
+v 2.270258 0.608314 10.866078
+v 7.943332 4.586085 9.682111
+v 2.035458 1.175172 10.866078
+v 1.661944 1.661944 10.866078
+v 4.586085 7.943332 9.682111
+v 1.175172 2.035458 10.866078
+v 0.608314 2.270258 10.866078
+v 0.000000 9.172170 9.682111
+v 0.000000 2.350344 10.866078
+v -0.608314 2.270258 10.866078
+v -4.586085 7.943332 9.682111
+v -1.175172 2.035458 10.866078
+v -1.661944 1.661944 10.866078
+v -7.943332 4.586085 9.682111
+v -2.035458 1.175172 10.866078
+v -17.100000 -13.151043 7.722313
+v -16.433168 -4.392130 7.722313
+v -16.433168 4.392130 7.722313
+v -17.100000 13.151043 7.722313
+v -16.433168 -4.392130 4.842749
+v -17.100000 -13.151043 4.842749
+v -16.433168 4.392130 4.842749
+v -17.100000 13.151043 4.842749
+v -10.120709 -14.842484 4.840495
+v -9.269785 -16.619688 4.840495
+v -13.085226 3.766766 4.840495
+v -13.085226 -3.766766 4.840495
+v -9.269785 16.619688 4.840495
+v -10.120709 14.842484 4.840495
+v -9.269785 16.619688 4.666785
+v -10.120709 14.842484 4.666785
+v -8.117999 16.957979 4.666785
+v -9.161562 14.872890 4.666785
+v -8.117999 16.957979 4.493074
+v -9.161562 14.872890 4.493074
+v -7.003085 17.191246 4.493074
+v -8.221272 14.851478 4.493074
+v -7.003085 17.191246 4.319364
+v -8.221272 14.851478 4.319364
+v -5.921119 17.337437 4.319364
+v -7.297278 14.786898 4.319364
+v -5.921119 17.337437 4.145654
+v -7.297278 14.786898 4.145654
+v -4.869317 17.409370 4.145654
+v -6.387766 14.685308 4.145654
+v -4.869317 17.409370 3.971944
+v -6.387766 14.685308 3.971944
+v -3.845614 17.416639 3.971944
+v -5.491392 14.551296 3.971944
+v -3.845614 17.416639 3.798234
+v -5.491392 14.551296 3.798234
+v -2.848429 17.366661 3.798234
+v -4.607129 14.388393 3.798234
+v -2.848429 17.366661 3.624523
+v -4.607129 14.388393 3.624523
+v -1.876520 17.265339 3.624523
+v -3.734170 14.199397 3.624523
+v -1.876520 17.265339 3.450813
+v -3.734170 14.199397 3.450813
+v -0.928887 17.117472 3.450813
+v -2.871869 13.986568 3.450813
+v -0.928887 17.117472 3.277103
+v -2.871869 13.986568 3.277103
+v -0.004716 16.927031 3.277103
+v -2.019699 13.751770 3.277103
+v -0.004716 16.927031 3.103392
+v -2.019699 13.751770 3.103392
+v 0.896664 16.697351 3.103392
+v -1.177227 13.496557 3.103392
+v 0.896664 16.697351 2.929682
+v -1.177227 13.496557 2.929682
+v 1.775815 16.431271 2.929682
+v -0.344091 13.222246 2.929682
+v 1.775815 16.431271 2.755972
+v -0.344091 13.222246 2.755972
+v 2.633210 16.131224 2.755972
+v 0.480015 12.929957 2.755972
+v 2.633210 16.131224 2.582262
+v 0.480015 12.929957 2.582262
+v 3.469248 15.799315 2.582262
+v 1.295346 12.620658 2.582262
+v 3.469248 15.799315 2.408551
+v 1.295346 12.620658 2.408551
+v 4.284268 15.437375 2.408551
+v 2.102120 12.295180 2.408551
+v 4.284268 15.437375 2.234841
+v 2.102120 12.295180 2.234841
+v 5.078559 15.046996 2.234841
+v 2.900520 11.954248 2.234841
+v 5.078559 15.046996 2.061131
+v 2.900520 11.954248 2.061131
+v 5.852365 14.629568 2.061131
+v 3.690701 11.598487 2.061131
+v 5.852365 14.629568 1.887421
+v 3.690701 11.598487 1.887421
+v 6.605889 14.186293 1.887421
+v 4.472793 11.228436 1.887421
+v 6.605889 14.186293 1.713710
+v 4.472793 11.228436 1.713710
+v 4.472793 -11.228436 1.713710
+v 6.605889 -14.186293 1.713710
+v 4.472793 -11.228436 1.887421
+v 6.605889 -14.186293 1.887421
+v 3.690701 -11.598487 1.887421
+v 5.852365 -14.629567 1.887421
+v 3.690701 -11.598487 2.061131
+v 5.852365 -14.629567 2.061131
+v 2.900520 -11.954248 2.061131
+v 5.078559 -15.046996 2.061131
+v 2.900520 -11.954248 2.234841
+v 5.078559 -15.046996 2.234841
+v 2.102119 -12.295180 2.234841
+v 4.284268 -15.437375 2.234841
+v 2.102119 -12.295180 2.408551
+v 4.284268 -15.437375 2.408551
+v 1.295346 -12.620658 2.408551
+v 3.469248 -15.799315 2.408551
+v 1.295346 -12.620658 2.582262
+v 3.469248 -15.799315 2.582262
+v 0.480015 -12.929957 2.582262
+v 2.633209 -16.131224 2.582262
+v 0.480015 -12.929957 2.755972
+v 2.633209 -16.131224 2.755972
+v -0.344091 -13.222245 2.755972
+v 1.775815 -16.431271 2.755972
+v -0.344091 -13.222245 2.929682
+v 1.775815 -16.431271 2.929682
+v -1.177227 -13.496557 2.929682
+v 0.896664 -16.697351 2.929682
+v -1.177227 -13.496557 3.103392
+v 0.896664 -16.697351 3.103392
+v -2.019700 -13.751770 3.103392
+v -0.004716 -16.927031 3.103392
+v -2.019700 -13.751770 3.277103
+v -0.004716 -16.927031 3.277103
+v -2.871869 -13.986568 3.277103
+v -0.928887 -17.117472 3.277103
+v -2.871869 -13.986568 3.450813
+v -0.928887 -17.117472 3.450813
+v -3.734170 -14.199397 3.450813
+v -1.876520 -17.265339 3.450813
+v -3.734170 -14.199397 3.624523
+v -1.876520 -17.265339 3.624523
+v -4.607129 -14.388393 3.624523
+v -2.848429 -17.366661 3.624523
+v -4.607129 -14.388393 3.798234
+v -2.848429 -17.366661 3.798234
+v -5.491392 -14.551296 3.798234
+v -3.845614 -17.416639 3.798234
+v -5.491392 -14.551296 3.971944
+v -3.845614 -17.416639 3.971944
+v -6.387766 -14.685308 3.971944
+v -4.869317 -17.409370 3.971944
+v -6.387766 -14.685308 4.145654
+v -4.869317 -17.409370 4.145654
+v -7.297278 -14.786898 4.145654
+v -5.921119 -17.337437 4.145654
+v -7.297278 -14.786898 4.319364
+v -5.921119 -17.337437 4.319364
+v -8.221272 -14.851478 4.319364
+v -7.003085 -17.191246 4.319364
+v -8.221272 -14.851478 4.493074
+v -7.003085 -17.191246 4.493074
+v -9.161562 -14.872890 4.493074
+v -8.117999 -16.957979 4.493074
+v -9.161562 -14.872890 4.666785
+v -8.117999 -16.957979 4.666785
+v -10.120709 -14.842484 4.666785
+v -9.269785 -16.619688 4.666785
+v -13.085226 3.766766 4.666785
+v -13.085226 -3.766766 4.666785
+v -12.229611 3.669016 4.666785
+v -12.229611 -3.669016 4.666785
+v -12.229611 3.669016 4.493074
+v -12.229611 -3.669016 4.493074
+v -11.373994 3.571266 4.493074
+v -11.373994 -3.571266 4.493074
+v -11.373994 3.571266 4.319364
+v -11.373994 -3.571266 4.319364
+v -10.518373 3.473515 4.319364
+v -10.518373 -3.473515 4.319364
+v -10.518373 3.473515 4.145654
+v -10.518373 -3.473515 4.145654
+v -9.662751 3.375764 4.145654
+v -9.662751 -3.375764 4.145654
+v -9.662751 3.375764 3.971944
+v -9.662751 -3.375764 3.971944
+v -8.807126 3.278012 3.971944
+v -8.807126 -3.278012 3.971944
+v -8.807126 3.278012 3.798234
+v -8.807126 -3.278012 3.798234
+v -7.951497 3.180259 3.798234
+v -7.951497 -3.180259 3.798234
+v -7.951497 3.180259 3.624523
+v -7.951497 -3.180259 3.624523
+v -7.095866 3.082506 3.624523
+v -7.095866 -3.082506 3.624523
+v -7.095866 3.082506 3.450813
+v -7.095866 -3.082506 3.450813
+v -6.240230 2.984752 3.450813
+v -6.240230 -2.984752 3.450813
+v -6.240230 2.984752 3.277103
+v -6.240230 -2.984752 3.277103
+v -5.384591 2.886998 3.277103
+v -5.384591 -2.886998 3.277103
+v -5.384591 2.886998 3.103392
+v -5.384591 -2.886998 3.103392
+v -4.528948 2.789242 3.103392
+v -4.528948 -2.789242 3.103392
+v -4.528948 2.789242 2.929682
+v -4.528948 -2.789242 2.929682
+v -3.673300 2.691485 2.929682
+v -3.673300 -2.691485 2.929682
+v -3.673300 2.691485 2.755972
+v -3.673300 -2.691485 2.755972
+v -2.817646 2.593727 2.755972
+v -2.817646 -2.593727 2.755972
+v -2.817646 2.593727 2.582262
+v -2.817646 -2.593727 2.582262
+v -1.961987 2.495968 2.582262
+v -1.961987 -2.495968 2.582262
+v -1.961987 2.495968 2.408551
+v -1.961987 -2.495968 2.408551
+v -1.106322 2.398207 2.408551
+v -1.106322 -2.398207 2.408551
+v -1.106322 2.398207 2.234841
+v -1.106322 -2.398207 2.234841
+v -0.250650 2.300445 2.234841
+v -0.250650 -2.300445 2.234841
+v -0.250650 2.300445 2.061131
+v -0.250650 -2.300445 2.061131
+v 0.605030 2.202681 2.061131
+v 0.605030 -2.202681 2.061131
+v 0.605030 2.202681 1.887421
+v 0.605030 -2.202681 1.887421
+v 1.460718 2.104914 1.887421
+v 1.460718 -2.104914 1.887421
+v 1.460718 2.104914 1.713710
+v 1.460718 -2.104914 1.713710
+v -1.398389 0.000000 11.248201
+v -0.446433 0.000000 11.630324
+v -0.431221 -0.115545 11.630324
+v -0.431221 0.115545 11.630324
+v -1.211040 -0.699194 11.248201
+v -0.386622 -0.223217 11.630324
+v -0.315676 -0.315676 11.630324
+v -0.699194 -1.211040 11.248201
+v -0.223217 -0.386622 11.630324
+v -0.115545 -0.431221 11.630324
+v 0.000000 -1.398389 11.248201
+v 0.000000 -0.446433 11.630324
+v 0.115545 -0.431221 11.630324
+v 0.699194 -1.211040 11.248201
+v 0.223217 -0.386622 11.630324
+v 0.315676 -0.315676 11.630324
+v 1.211040 -0.699194 11.248201
+v 0.386622 -0.223217 11.630324
+v 0.431221 -0.115545 11.630324
+v 1.398389 0.000000 11.248201
+v 0.446433 0.000000 11.630324
+v 0.431221 0.115545 11.630324
+v 1.211040 0.699194 11.248201
+v 0.386622 0.223217 11.630324
+v 0.315676 0.315676 11.630324
+v 0.699194 1.211040 11.248201
+v 0.223217 0.386622 11.630324
+v 0.115545 0.431221 11.630324
+v 0.000000 1.398389 11.248201
+v 0.000000 0.446433 11.630324
+v -0.115545 0.431221 11.630324
+v -0.699194 1.211040 11.248201
+v -0.223217 0.386622 11.630324
+v -0.315676 0.315676 11.630324
+v -1.211040 0.699194 11.248201
+v -0.386622 0.223217 11.630324
+v -17.553814 13.473552 4.842749
+v -17.553814 13.473552 7.722313
+v -20.438868 8.480902 7.722313
+v -21.936068 2.912376 7.722313
+v -21.943750 -2.853909 7.722313
+v -20.461395 -8.426405 7.722313
+v -17.589657 -13.426725 7.722313
+v -17.589657 -13.426725 4.842749
+v -20.438868 8.480902 4.842749
+v -21.936068 2.912376 4.842749
+v -21.943750 -2.853909 4.842749
+v -20.461395 -8.426405 4.842749
+f 1 2 3
+f 4 1 3
+f 5 6 2
+f 7 6 5
+f 3 6 8
+f 2 6 3
+f 9 10 7
+f 11 10 9
+f 7 10 6
+f 6 10 8
+f 12 13 11
+f 14 13 12
+f 10 13 8
+f 11 13 10
+f 15 16 14
+f 17 16 15
+f 13 16 8
+f 14 16 13
+f 18 19 17
+f 20 19 18
+f 17 19 16
+f 16 19 8
+f 21 22 20
+f 23 22 21
+f 20 22 19
+f 19 22 8
+f 24 25 23
+f 26 25 24
+f 23 25 22
+f 22 25 8
+f 27 28 26
+f 29 28 27
+f 25 28 8
+f 26 28 25
+f 30 31 29
+f 32 31 30
+f 28 31 8
+f 29 31 28
+f 33 34 32
+f 35 34 33
+f 31 34 8
+f 32 34 31
+f 8 36 3
+f 37 36 35
+f 4 36 37
+f 34 36 8
+f 35 36 34
+f 3 36 4
+f 1 38 2
+f 2 38 5
+f 39 38 1
+f 38 40 5
+f 5 41 7
+f 7 41 9
+f 40 41 5
+f 41 42 9
+f 9 43 11
+f 42 43 9
+f 11 44 12
+f 43 44 11
+f 12 45 14
+f 44 45 12
+f 14 46 15
+f 45 46 14
+f 15 47 17
+f 46 47 15
+f 17 48 18
+f 47 48 17
+f 18 49 20
+f 48 49 18
+f 49 50 20
+f 20 50 21
+f 50 51 21
+f 21 51 23
+f 51 52 23
+f 23 52 24
+f 24 53 26
+f 52 53 24
+f 26 53 27
+f 53 54 27
+f 27 55 29
+f 54 55 27
+f 29 56 30
+f 55 56 29
+f 30 57 32
+f 56 57 30
+f 32 58 33
+f 57 58 32
+f 33 59 35
+f 58 59 33
+f 35 60 37
+f 59 60 35
+f 37 61 4
+f 4 61 1
+f 60 61 37
+f 61 39 1
+f 52 51 53
+f 50 49 51
+f 53 49 54
+f 54 49 55
+f 55 49 56
+f 51 49 53
+f 57 59 58
+f 57 60 59
+f 44 43 45
+f 45 43 46
+f 46 43 47
+f 47 43 48
+f 48 43 49
+f 56 43 57
+f 49 43 56
+f 39 40 38
+f 42 41 43
+f 60 41 61
+f 61 41 39
+f 57 41 60
+f 43 41 57
+f 39 41 40
+f 62 63 64
+f 64 63 65
+f 66 67 68
+f 69 70 71
+f 71 70 68
+f 68 70 66
+f 72 73 74
+f 70 75 76
+f 76 75 77
+f 77 75 73
+f 69 75 70
+f 75 78 73
+f 74 78 79
+f 73 78 74
+f 78 80 79
+f 79 80 81
+f 80 82 81
+f 81 82 83
+f 83 82 84
+f 82 85 84
+f 84 85 86
+f 87 88 89
+f 89 88 90
+f 86 91 92
+f 92 91 87
+f 85 91 86
+f 87 91 88
+f 93 94 95
+f 88 96 97
+f 91 96 88
+f 97 96 98
+f 98 96 93
+f 96 99 93
+f 93 99 94
+f 94 100 101
+f 99 100 94
+f 101 102 103
+f 103 102 104
+f 100 102 101
+f 104 105 106
+f 107 108 109
+f 102 110 104
+f 104 110 105
+f 108 111 109
+f 105 112 113
+f 113 112 114
+f 114 112 108
+f 110 112 105
+f 111 115 116
+f 108 115 111
+f 112 115 108
+f 116 117 118
+f 115 117 116
+f 118 119 120
+f 117 119 118
+f 120 121 122
+f 119 121 120
+f 121 123 122
+f 123 124 125
+f 121 124 123
+f 126 127 128
+f 124 129 125
+f 125 129 130
+f 126 131 127
+f 129 132 133
+f 133 132 134
+f 124 132 129
+f 134 132 131
+f 131 63 127
+f 131 65 63
+f 132 65 131
+f 74 68 72
+f 72 68 135
+f 135 68 67
+f 127 125 128
+f 128 125 136
+f 136 125 130
+f 112 137 115
+f 110 138 112
+f 112 138 137
+f 115 139 117
+f 137 139 115
+f 102 140 110
+f 110 140 138
+f 117 141 119
+f 139 141 117
+f 100 142 102
+f 102 142 140
+f 119 143 121
+f 141 143 119
+f 99 144 100
+f 100 144 142
+f 121 145 124
+f 143 145 121
+f 145 146 124
+f 99 147 144
+f 146 132 124
+f 99 96 147
+f 146 148 132
+f 96 149 147
+f 148 64 132
+f 64 65 132
+f 96 91 149
+f 148 150 64
+f 91 151 149
+f 152 153 150
+f 150 153 64
+f 91 85 151
+f 151 85 154
+f 152 155 153
+f 85 82 154
+f 154 82 156
+f 157 158 155
+f 157 159 158
+f 82 80 156
+f 156 80 160
+f 160 78 161
+f 80 78 160
+f 162 163 159
+f 159 163 158
+f 161 75 162
+f 78 75 161
+f 162 75 163
+f 75 69 163
+f 158 153 155
+f 163 164 158
+f 164 165 158
+f 165 166 158
+f 166 167 158
+f 167 168 158
+f 158 169 153
+f 168 169 158
+f 169 170 153
+f 170 171 153
+f 163 172 164
+f 171 173 153
+f 173 174 153
+f 174 175 153
+f 153 176 64
+f 175 176 153
+f 177 178 167
+f 167 178 168
+f 171 179 173
+f 179 180 173
+f 176 181 64
+f 178 182 183
+f 184 182 177
+f 185 182 184
+f 172 182 185
+f 177 182 178
+f 186 182 172
+f 187 188 179
+f 183 188 187
+f 189 188 181
+f 190 188 189
+f 180 188 190
+f 179 188 180
+f 182 188 183
+f 188 62 181
+f 62 64 181
+f 163 186 172
+f 123 125 191
+f 125 192 191
+f 192 127 193
+f 193 127 194
+f 125 127 192
+f 127 195 194
+f 127 196 195
+f 196 197 198
+f 197 62 199
+f 199 62 200
+f 196 62 197
+f 127 62 196
+f 127 63 62
+f 200 188 201
+f 62 188 200
+f 201 182 202
+f 188 182 201
+f 182 203 202
+f 204 205 206
+f 203 186 207
+f 207 186 204
+f 204 186 205
+f 182 186 203
+f 208 74 209
+f 209 74 79
+f 210 68 211
+f 212 68 210
+f 205 68 212
+f 211 68 208
+f 71 68 186
+f 208 68 74
+f 186 68 205
+f 71 186 69
+f 69 186 163
+f 116 118 213
+f 213 118 214
+f 214 215 216
+f 118 215 214
+f 118 217 215
+f 118 120 217
+f 120 218 217
+f 120 122 218
+f 122 219 218
+f 122 123 219
+f 123 220 219
+f 123 191 220
+f 191 221 220
+f 191 192 221
+f 222 221 192
+f 192 193 222
+f 223 107 109
+f 213 111 116
+f 104 106 224
+f 225 109 111
+f 225 213 214
+f 225 111 213
+f 225 223 109
+f 226 225 214
+f 227 226 214
+f 216 227 214
+f 228 224 223
+f 228 223 225
+f 229 104 224
+f 229 224 228
+f 230 104 229
+f 231 230 232
+f 233 230 231
+f 234 103 104
+f 234 104 230
+f 234 230 233
+f 235 234 233
+f 236 95 94
+f 237 103 234
+f 238 101 103
+f 238 103 237
+f 89 90 239
+f 240 101 238
+f 240 94 101
+f 241 240 242
+f 243 240 241
+f 243 94 240
+f 243 241 244
+f 245 243 244
+f 246 236 94
+f 246 94 243
+f 247 87 89
+f 247 89 239
+f 248 239 236
+f 248 236 246
+f 248 247 239
+f 249 92 87
+f 249 87 247
+f 250 247 251
+f 250 251 252
+f 250 249 247
+f 253 250 252
+f 254 107 223
+f 108 107 255
+f 107 256 255
+f 254 256 107
+f 113 257 105
+f 114 257 113
+f 108 255 114
+f 114 255 257
+f 258 106 257
+f 257 106 105
+f 106 259 224
+f 258 259 106
+f 95 260 261
+f 95 261 93
+f 262 95 236
+f 262 260 95
+f 88 97 263
+f 98 261 97
+f 93 261 98
+f 97 261 263
+f 90 264 239
+f 90 88 263
+f 265 90 263
+f 265 264 90
+f 253 266 250
+f 250 86 249
+f 249 86 92
+f 266 86 250
+f 267 84 266
+f 266 84 86
+f 268 209 269
+f 208 209 268
+f 270 83 267
+f 267 83 84
+f 269 81 271
+f 271 81 270
+f 270 81 83
+f 269 79 81
+f 209 79 269
+f 268 272 208
+f 211 208 272
+f 72 273 274
+f 72 274 73
+f 67 66 275
+f 135 275 273
+f 135 67 275
+f 72 135 273
+f 70 76 276
+f 276 77 274
+f 76 77 276
+f 77 73 274
+f 275 66 70
+f 275 70 276
+f 128 277 126
+f 136 277 128
+f 278 136 130
+f 278 277 136
+f 278 130 279
+f 279 130 129
+f 126 277 131
+f 131 277 280
+f 280 134 131
+f 280 133 134
+f 133 279 129
+f 280 279 133
+f 155 281 157
+f 282 281 155
+f 157 283 159
+f 281 283 157
+f 159 284 162
+f 283 284 159
+f 162 285 161
+f 284 285 162
+f 161 286 160
+f 285 286 161
+f 160 287 156
+f 156 287 154
+f 286 287 160
+f 287 288 154
+f 154 289 151
+f 288 289 154
+f 151 290 149
+f 289 290 151
+f 149 291 147
+f 147 291 144
+f 290 291 149
+f 291 292 144
+f 292 293 144
+f 144 293 142
+f 293 294 142
+f 142 294 140
+f 294 295 140
+f 140 295 138
+f 138 295 137
+f 295 296 137
+f 296 297 137
+f 137 297 139
+f 139 298 141
+f 297 298 139
+f 141 299 143
+f 298 299 141
+f 143 300 145
+f 299 300 143
+f 145 301 146
+f 300 301 145
+f 146 302 148
+f 148 302 150
+f 301 302 146
+f 302 303 150
+f 150 304 152
+f 152 304 155
+f 303 304 150
+f 304 282 155
+f 305 306 171
+f 305 171 170
+f 307 170 169
+f 307 169 168
+f 307 305 170
+f 308 307 168
+f 306 309 179
+f 306 179 171
+f 310 308 168
+f 310 168 178
+f 311 310 178
+f 311 183 187
+f 311 178 183
+f 312 187 179
+f 312 311 187
+f 309 312 179
+f 313 314 172
+f 313 172 185
+f 315 185 184
+f 315 313 185
+f 316 184 177
+f 316 315 184
+f 167 316 177
+f 317 316 167
+f 314 318 164
+f 314 164 172
+f 317 167 166
+f 319 166 165
+f 319 317 166
+f 320 165 164
+f 320 319 165
+f 318 320 164
+f 321 322 181
+f 181 322 189
+f 189 323 190
+f 322 323 189
+f 190 324 180
+f 323 324 190
+f 325 181 176
+f 325 321 181
+f 324 326 180
+f 180 326 173
+f 173 326 174
+f 174 327 175
+f 326 327 174
+f 175 328 176
+f 327 328 175
+f 328 325 176
+f 329 205 212
+f 330 212 210
+f 330 329 212
+f 331 210 211
+f 331 330 210
+f 272 331 211
+f 329 206 205
+f 329 332 333
+f 329 333 334
+f 329 334 206
+f 242 335 241
+f 241 335 244
+f 244 335 245
+f 336 337 335
+f 335 337 245
+f 336 338 337
+f 203 207 339
+f 340 207 341
+f 342 207 340
+f 339 207 342
+f 341 207 338
+f 207 204 338
+f 204 332 338
+f 204 333 332
+f 204 334 333
+f 204 206 334
+f 336 341 338
+f 343 200 201
+f 344 345 343
+f 344 343 201
+f 346 201 202
+f 346 344 201
+f 339 202 203
+f 339 346 202
+f 347 346 339
+f 232 348 231
+f 231 349 233
+f 233 349 235
+f 348 349 231
+f 350 351 348
+f 348 351 349
+f 198 197 352
+f 352 197 353
+f 353 197 354
+f 354 197 350
+f 350 197 351
+f 197 199 351
+f 199 355 351
+f 199 356 355
+f 199 357 356
+f 199 343 357
+f 199 200 343
+f 198 358 196
+f 354 358 353
+f 353 358 352
+f 352 358 198
+f 359 222 193
+f 359 193 194
+f 360 194 195
+f 360 359 194
+f 358 195 196
+f 358 360 195
+f 361 221 222
+f 362 221 361
+f 363 221 362
+f 364 225 365
+f 365 226 366
+f 225 226 365
+f 367 368 369
+f 368 370 369
+f 366 227 368
+f 226 227 366
+f 371 372 373
+f 372 374 373
+f 370 216 372
+f 368 216 370
+f 227 216 368
+f 372 375 374
+f 216 375 372
+f 376 375 377
+f 375 378 377
+f 375 379 378
+f 380 379 381
+f 379 382 381
+f 383 384 385
+f 379 384 382
+f 386 387 388
+f 387 389 388
+f 216 215 375
+f 384 215 385
+f 390 215 387
+f 385 215 390
+f 375 215 379
+f 379 215 384
+f 215 391 387
+f 392 391 393
+f 387 391 389
+f 391 394 393
+f 395 396 397
+f 215 396 391
+f 391 396 394
+f 396 398 397
+f 399 400 401
+f 396 400 398
+f 402 403 404
+f 403 405 404
+f 406 217 403
+f 401 217 406
+f 215 217 396
+f 400 217 401
+f 396 217 400
+f 403 217 405
+f 407 408 409
+f 217 408 405
+f 408 410 409
+f 411 412 413
+f 217 412 408
+f 408 412 410
+f 412 414 413
+f 412 415 414
+f 416 415 417
+f 415 218 417
+f 412 218 415
+f 417 218 418
+f 217 218 412
+f 218 419 418
+f 420 419 421
+f 419 422 421
+f 218 423 419
+f 419 423 422
+f 424 423 425
+f 423 426 425
+f 423 427 426
+f 427 428 429
+f 423 219 427
+f 218 219 423
+f 427 219 428
+f 428 219 430
+f 219 431 430
+f 431 432 433
+f 431 434 432
+f 219 220 431
+f 431 220 434
+f 434 220 435
+f 220 436 435
+f 435 436 437
+f 220 438 436
+f 220 221 438
+f 438 221 363
+f 268 439 440
+f 441 442 443
+f 439 442 441
+f 268 442 439
+f 444 445 446
+f 447 445 444
+f 268 269 442
+f 447 269 445
+f 442 269 447
+f 445 269 448
+f 269 449 448
+f 269 450 449
+f 449 450 451
+f 452 453 454
+f 455 453 452
+f 450 453 455
+f 456 457 458
+f 269 271 450
+f 450 271 453
+f 456 271 457
+f 459 271 456
+f 453 271 459
+f 271 460 457
+f 461 462 463
+f 460 462 461
+f 271 462 460
+f 464 465 466
+f 467 465 464
+f 462 465 467
+f 468 469 470
+f 271 270 462
+f 471 270 468
+f 465 270 471
+f 462 270 465
+f 468 270 469
+f 270 472 469
+f 473 474 475
+f 472 474 473
+f 270 474 472
+f 476 477 478
+f 479 477 476
+f 474 477 479
+f 270 477 474
+f 480 481 482
+f 483 481 480
+f 477 267 483
+f 481 267 484
+f 270 267 477
+f 483 267 481
+f 267 485 484
+f 485 486 487
+f 267 486 485
+f 488 489 490
+f 491 489 488
+f 486 489 491
+f 267 489 486
+f 492 493 494
+f 495 493 492
+f 489 493 495
+f 267 266 489
+f 489 266 493
+f 496 266 497
+f 493 266 496
+f 266 498 497
+f 497 498 499
+f 266 500 498
+f 501 500 502
+f 503 500 501
+f 498 500 503
+f 504 505 506
+f 507 505 504
+f 500 505 507
+f 508 509 510
+f 511 509 508
+f 500 253 505
+f 266 253 500
+f 511 253 509
+f 505 253 511
+f 253 252 509
+f 509 252 512
+f 252 251 512
+f 512 251 513
+f 251 247 513
+f 513 247 514
+f 515 516 243
+f 243 516 246
+f 246 517 248
+f 516 517 246
+f 248 514 247
+f 517 514 248
+f 518 332 519
+f 520 518 521
+f 522 520 523
+f 524 522 525
+f 526 524 527
+f 338 524 526
+f 528 338 529
+f 530 528 531
+f 530 338 528
+f 532 530 533
+f 534 532 535
+f 536 534 537
+f 337 534 536
+f 538 337 539
+f 540 538 541
+f 540 337 538
+f 542 540 543
+f 544 542 545
+f 546 544 547
+f 548 546 549
+f 550 548 551
+f 552 550 553
+f 243 245 515
+f 338 332 518
+f 338 518 520
+f 338 520 522
+f 338 522 524
+f 337 338 530
+f 337 530 532
+f 337 532 534
+f 245 337 540
+f 245 540 542
+f 245 542 544
+f 245 544 546
+f 245 546 548
+f 245 548 550
+f 245 550 552
+f 526 529 338
+f 536 539 337
+f 552 515 245
+f 242 240 554
+f 555 556 557
+f 558 555 559
+f 560 558 561
+f 335 558 560
+f 562 560 563
+f 562 335 560
+f 564 562 565
+f 566 564 567
+f 568 566 569
+f 336 568 570
+f 336 566 568
+f 571 572 573
+f 574 571 575
+f 576 574 577
+f 578 576 579
+f 580 578 581
+f 582 580 583
+f 584 582 585
+f 586 584 587
+f 588 586 589
+f 341 588 590
+f 554 556 242
+f 570 572 336
+f 335 242 558
+f 558 242 555
+f 555 242 556
+f 336 335 566
+f 566 335 564
+f 564 335 562
+f 341 336 588
+f 588 336 586
+f 586 336 584
+f 584 336 582
+f 582 336 580
+f 580 336 578
+f 578 336 576
+f 576 336 574
+f 574 336 571
+f 571 336 572
+f 591 592 234
+f 234 592 237
+f 237 593 238
+f 592 593 237
+f 238 554 240
+f 593 554 238
+f 594 355 595
+f 596 594 597
+f 598 596 599
+f 600 598 601
+f 602 600 603
+f 604 351 605
+f 606 604 607
+f 606 351 604
+f 608 606 609
+f 610 608 611
+f 612 610 613
+f 614 349 615
+f 616 614 617
+f 616 349 614
+f 618 616 619
+f 620 618 621
+f 622 620 623
+f 624 622 625
+f 626 624 627
+f 628 626 629
+f 234 235 591
+f 351 355 594
+f 351 594 596
+f 351 596 598
+f 351 598 600
+f 351 600 602
+f 349 351 606
+f 349 606 608
+f 349 608 610
+f 349 610 612
+f 235 349 616
+f 235 616 618
+f 235 618 620
+f 235 620 622
+f 235 622 624
+f 235 624 626
+f 235 626 628
+f 602 605 351
+f 612 615 349
+f 628 591 235
+f 354 630 631
+f 630 632 633
+f 632 634 635
+f 634 636 637
+f 636 638 639
+f 636 350 638
+f 350 640 641
+f 640 642 643
+f 350 642 640
+f 642 644 645
+f 644 646 647
+f 646 648 649
+f 646 348 648
+f 348 650 651
+f 650 652 653
+f 348 652 650
+f 652 654 655
+f 654 656 657
+f 656 658 659
+f 658 660 661
+f 660 662 663
+f 662 664 665
+f 232 230 666
+f 354 350 630
+f 630 350 632
+f 632 350 634
+f 634 350 636
+f 350 348 642
+f 642 348 644
+f 644 348 646
+f 348 232 652
+f 652 232 654
+f 654 232 656
+f 656 232 658
+f 658 232 660
+f 660 232 662
+f 662 232 664
+f 641 638 350
+f 651 648 348
+f 666 664 232
+f 225 667 228
+f 364 667 225
+f 228 668 229
+f 667 668 228
+f 229 666 230
+f 668 666 229
+f 259 254 224
+f 224 254 223
+f 264 262 236
+f 264 236 239
+f 256 254 259
+f 256 259 258
+f 256 258 255
+f 255 258 257
+f 262 264 265
+f 260 262 265
+f 260 265 263
+f 260 263 261
+f 669 268 440
+f 670 268 669
+f 272 268 670
+f 273 275 276
+f 273 276 274
+f 277 278 280
+f 280 278 279
+f 282 671 281
+f 672 673 671
+f 304 671 282
+f 674 672 671
+f 281 675 283
+f 283 675 284
+f 676 675 673
+f 677 675 676
+f 671 675 281
+f 673 675 671
+f 284 678 285
+f 285 678 286
+f 679 678 677
+f 680 678 679
+f 675 678 284
+f 677 678 675
+f 286 681 287
+f 287 681 288
+f 678 681 286
+f 680 681 678
+f 682 681 680
+f 683 681 682
+f 288 684 289
+f 289 684 290
+f 685 684 683
+f 686 684 685
+f 681 684 288
+f 683 684 681
+f 290 687 291
+f 291 687 292
+f 684 687 290
+f 688 687 686
+f 689 687 688
+f 686 687 684
+f 292 690 293
+f 293 690 294
+f 691 690 689
+f 692 690 691
+f 687 690 292
+f 689 690 687
+f 294 693 295
+f 295 693 296
+f 694 693 692
+f 695 693 694
+f 692 693 690
+f 690 693 294
+f 296 696 297
+f 297 696 298
+f 695 696 693
+f 697 696 695
+f 698 696 697
+f 693 696 296
+f 298 699 299
+f 299 699 300
+f 700 699 698
+f 701 699 700
+f 696 699 298
+f 698 699 696
+f 701 702 699
+f 300 702 301
+f 301 702 302
+f 699 702 300
+f 703 702 701
+f 704 702 703
+f 302 705 303
+f 702 705 302
+f 303 705 304
+f 304 705 671
+f 706 705 704
+f 674 705 706
+f 671 705 674
+f 704 705 702
+f 318 707 708
+f 320 318 708
+f 319 320 708
+f 317 319 708
+f 308 317 708
+f 307 708 709
+f 307 308 708
+f 305 307 709
+f 306 305 709
+f 314 707 318
+f 326 306 709
+f 327 326 709
+f 328 327 709
+f 325 709 710
+f 325 328 709
+f 310 316 317
+f 310 317 308
+f 324 309 306
+f 324 306 326
+f 321 325 710
+f 711 315 316
+f 711 313 315
+f 711 314 313
+f 711 310 311
+f 711 712 314
+f 711 316 310
+f 713 312 309
+f 713 311 312
+f 713 322 321
+f 713 323 322
+f 713 324 323
+f 713 309 324
+f 713 711 311
+f 714 713 321
+f 710 714 321
+f 712 707 314
+f 329 330 332
+f 332 330 519
+f 330 331 519
+f 519 272 715
+f 331 272 519
+f 272 670 715
+f 715 669 716
+f 670 669 715
+f 716 441 443
+f 716 439 441
+f 669 440 716
+f 716 440 439
+f 342 347 339
+f 341 347 340
+f 340 347 342
+f 345 357 343
+f 345 356 357
+f 345 355 356
+f 345 344 355
+f 355 344 595
+f 595 344 717
+f 344 718 717
+f 344 346 718
+f 346 590 718
+f 346 341 590
+f 346 347 341
+f 438 719 436
+f 436 719 437
+f 438 363 719
+f 363 362 719
+f 362 720 719
+f 362 361 720
+f 361 222 720
+f 359 631 222
+f 222 631 720
+f 359 360 631
+f 360 354 631
+f 360 358 354
+f 437 719 435
+f 435 719 721
+f 721 720 722
+f 719 720 721
+f 722 631 630
+f 720 631 722
+f 435 723 434
+f 434 723 432
+f 432 723 433
+f 435 721 723
+f 721 724 723
+f 721 722 724
+f 722 633 724
+f 722 630 633
+f 433 723 431
+f 431 723 725
+f 725 724 726
+f 723 724 725
+f 726 633 632
+f 724 633 726
+f 431 727 430
+f 430 727 428
+f 428 727 429
+f 431 725 727
+f 725 728 727
+f 725 726 728
+f 726 635 728
+f 726 632 635
+f 429 727 427
+f 427 727 729
+f 729 728 730
+f 727 728 729
+f 730 635 634
+f 728 635 730
+f 427 731 426
+f 426 731 425
+f 425 731 424
+f 427 729 731
+f 729 732 731
+f 729 730 732
+f 730 637 732
+f 730 634 637
+f 424 731 423
+f 423 731 733
+f 733 732 734
+f 731 732 733
+f 734 637 636
+f 732 637 734
+f 423 735 422
+f 422 735 421
+f 421 735 420
+f 423 733 735
+f 733 736 735
+f 733 734 736
+f 734 639 736
+f 734 636 639
+f 420 735 419
+f 419 735 737
+f 737 736 738
+f 735 736 737
+f 738 639 638
+f 736 639 738
+f 419 739 418
+f 418 739 417
+f 417 739 416
+f 419 737 739
+f 737 740 739
+f 737 738 740
+f 738 641 740
+f 738 638 641
+f 416 739 415
+f 415 739 741
+f 741 740 742
+f 739 740 741
+f 742 641 640
+f 740 641 742
+f 415 743 414
+f 414 743 413
+f 413 743 411
+f 415 741 743
+f 741 744 743
+f 741 742 744
+f 742 643 744
+f 742 640 643
+f 411 743 412
+f 412 743 745
+f 745 744 746
+f 743 744 745
+f 746 643 642
+f 744 643 746
+f 412 747 410
+f 410 747 409
+f 409 747 407
+f 412 745 747
+f 745 748 747
+f 745 746 748
+f 746 645 748
+f 746 642 645
+f 407 747 408
+f 408 747 749
+f 749 748 750
+f 747 748 749
+f 750 645 644
+f 748 645 750
+f 408 751 405
+f 405 751 404
+f 404 751 402
+f 408 749 751
+f 749 752 751
+f 749 750 752
+f 750 647 752
+f 750 644 647
+f 402 751 403
+f 403 751 753
+f 753 752 754
+f 751 752 753
+f 754 647 646
+f 752 647 754
+f 403 755 406
+f 406 755 401
+f 401 755 399
+f 403 753 755
+f 753 756 755
+f 753 754 756
+f 754 649 756
+f 754 646 649
+f 399 755 400
+f 400 755 757
+f 757 756 758
+f 755 756 757
+f 758 649 648
+f 756 649 758
+f 400 759 398
+f 398 759 397
+f 397 759 395
+f 400 757 759
+f 757 760 759
+f 757 758 760
+f 758 651 760
+f 758 648 651
+f 395 759 396
+f 396 759 761
+f 761 760 762
+f 759 760 761
+f 762 651 650
+f 760 651 762
+f 396 763 394
+f 394 763 393
+f 393 763 392
+f 396 761 763
+f 761 764 763
+f 761 762 764
+f 762 653 764
+f 762 650 653
+f 392 763 391
+f 391 763 765
+f 765 764 766
+f 763 764 765
+f 766 653 652
+f 764 653 766
+f 391 767 389
+f 389 767 388
+f 388 767 386
+f 391 765 767
+f 765 768 767
+f 765 766 768
+f 766 655 768
+f 766 652 655
+f 386 767 387
+f 387 767 769
+f 769 768 770
+f 767 768 769
+f 770 655 654
+f 768 655 770
+f 387 771 390
+f 390 771 385
+f 385 771 383
+f 387 769 771
+f 769 772 771
+f 769 770 772
+f 770 657 772
+f 770 654 657
+f 383 771 384
+f 384 771 773
+f 773 772 774
+f 771 772 773
+f 774 657 656
+f 772 657 774
+f 384 775 382
+f 382 775 381
+f 381 775 380
+f 384 773 775
+f 773 776 775
+f 773 774 776
+f 774 659 776
+f 774 656 659
+f 380 775 379
+f 379 775 777
+f 777 776 778
+f 775 776 777
+f 778 659 658
+f 776 659 778
+f 379 779 378
+f 378 779 377
+f 377 779 376
+f 379 777 779
+f 777 780 779
+f 777 778 780
+f 778 661 780
+f 778 658 661
+f 376 779 375
+f 375 779 781
+f 781 780 782
+f 779 780 781
+f 782 661 660
+f 780 661 782
+f 375 783 374
+f 374 783 373
+f 373 783 371
+f 375 781 783
+f 781 784 783
+f 781 782 784
+f 782 663 784
+f 782 660 663
+f 371 783 372
+f 372 783 785
+f 785 784 786
+f 783 784 785
+f 786 663 662
+f 784 663 786
+f 372 787 370
+f 370 787 369
+f 369 787 367
+f 372 785 787
+f 785 788 787
+f 785 786 788
+f 786 665 788
+f 786 662 665
+f 367 787 368
+f 368 787 789
+f 789 788 790
+f 787 788 789
+f 790 665 664
+f 788 665 790
+f 368 667 366
+f 366 667 365
+f 365 667 364
+f 368 789 667
+f 789 668 667
+f 789 790 668
+f 790 666 668
+f 790 664 666
+f 517 513 514
+f 552 791 515
+f 515 791 516
+f 517 512 513
+f 517 509 512
+f 516 792 517
+f 791 792 516
+f 517 792 509
+f 553 793 552
+f 552 793 791
+f 791 794 792
+f 793 794 791
+f 792 510 509
+f 794 510 792
+f 550 795 553
+f 553 795 793
+f 794 508 510
+f 794 511 508
+f 793 796 794
+f 795 796 793
+f 796 505 794
+f 794 505 511
+f 551 797 550
+f 550 797 795
+f 795 798 796
+f 797 798 795
+f 796 506 505
+f 798 506 796
+f 548 799 551
+f 551 799 797
+f 798 504 506
+f 798 507 504
+f 797 800 798
+f 799 800 797
+f 800 500 798
+f 798 500 507
+f 549 801 548
+f 548 801 799
+f 799 802 800
+f 801 802 799
+f 800 502 500
+f 802 502 800
+f 546 803 549
+f 549 803 801
+f 802 501 502
+f 802 503 501
+f 801 804 802
+f 803 804 801
+f 804 498 802
+f 802 498 503
+f 547 805 546
+f 546 805 803
+f 803 806 804
+f 805 806 803
+f 804 499 498
+f 806 499 804
+f 544 807 547
+f 547 807 805
+f 806 497 499
+f 806 496 497
+f 805 808 806
+f 807 808 805
+f 808 493 806
+f 806 493 496
+f 545 809 544
+f 544 809 807
+f 807 810 808
+f 809 810 807
+f 808 494 493
+f 810 494 808
+f 542 811 545
+f 545 811 809
+f 810 492 494
+f 810 495 492
+f 809 812 810
+f 811 812 809
+f 812 489 810
+f 810 489 495
+f 543 813 542
+f 542 813 811
+f 811 814 812
+f 813 814 811
+f 812 490 489
+f 814 490 812
+f 540 815 543
+f 543 815 813
+f 814 488 490
+f 814 491 488
+f 813 816 814
+f 815 816 813
+f 816 486 814
+f 814 486 491
+f 541 817 540
+f 540 817 815
+f 815 818 816
+f 817 818 815
+f 816 487 486
+f 818 487 816
+f 538 819 541
+f 541 819 817
+f 818 485 487
+f 818 484 485
+f 817 820 818
+f 819 820 817
+f 820 481 818
+f 818 481 484
+f 539 821 538
+f 538 821 819
+f 819 822 820
+f 821 822 819
+f 820 482 481
+f 822 482 820
+f 536 823 539
+f 539 823 821
+f 822 480 482
+f 821 824 822
+f 823 824 821
+f 822 483 480
+f 824 477 822
+f 822 477 483
+f 537 825 536
+f 536 825 823
+f 823 826 824
+f 825 826 823
+f 824 478 477
+f 826 478 824
+f 534 827 537
+f 537 827 825
+f 826 476 478
+f 825 828 826
+f 827 828 825
+f 826 479 476
+f 828 474 826
+f 826 474 479
+f 535 829 534
+f 534 829 827
+f 827 830 828
+f 829 830 827
+f 828 475 474
+f 830 475 828
+f 532 831 535
+f 535 831 829
+f 830 473 475
+f 829 832 830
+f 831 832 829
+f 830 472 473
+f 832 469 830
+f 830 469 472
+f 533 833 532
+f 532 833 831
+f 831 834 832
+f 833 834 831
+f 832 470 469
+f 834 470 832
+f 530 835 533
+f 533 835 833
+f 834 468 470
+f 833 836 834
+f 835 836 833
+f 834 471 468
+f 836 465 834
+f 834 465 471
+f 531 837 530
+f 530 837 835
+f 835 838 836
+f 837 838 835
+f 836 466 465
+f 838 466 836
+f 528 839 531
+f 531 839 837
+f 837 840 838
+f 839 840 837
+f 838 464 466
+f 838 467 464
+f 840 462 838
+f 838 462 467
+f 529 841 528
+f 528 841 839
+f 839 842 840
+f 841 842 839
+f 840 463 462
+f 842 463 840
+f 526 843 529
+f 529 843 841
+f 841 844 842
+f 843 844 841
+f 842 461 463
+f 842 460 461
+f 844 457 842
+f 842 457 460
+f 527 845 526
+f 526 845 843
+f 843 846 844
+f 845 846 843
+f 844 458 457
+f 846 458 844
+f 524 847 527
+f 527 847 845
+f 845 848 846
+f 847 848 845
+f 846 456 458
+f 846 459 456
+f 848 453 846
+f 846 453 459
+f 525 849 524
+f 524 849 847
+f 847 850 848
+f 849 850 847
+f 848 454 453
+f 850 454 848
+f 522 851 525
+f 525 851 849
+f 849 852 850
+f 851 852 849
+f 850 452 454
+f 850 455 452
+f 852 450 850
+f 850 450 455
+f 523 853 522
+f 522 853 851
+f 851 854 852
+f 853 854 851
+f 852 451 450
+f 854 451 852
+f 520 855 523
+f 523 855 853
+f 853 856 854
+f 855 856 853
+f 854 449 451
+f 854 448 449
+f 856 445 854
+f 854 445 448
+f 521 857 520
+f 520 857 855
+f 855 858 856
+f 857 858 855
+f 856 446 445
+f 858 446 856
+f 518 859 521
+f 521 859 857
+f 857 860 858
+f 859 860 857
+f 858 444 446
+f 858 447 444
+f 860 442 858
+f 858 442 447
+f 519 715 518
+f 518 715 859
+f 859 716 860
+f 715 716 859
+f 860 443 442
+f 716 443 860
+f 595 717 594
+f 594 717 861
+f 861 718 862
+f 717 718 861
+f 862 590 588
+f 718 590 862
+f 594 861 597
+f 597 861 863
+f 861 864 863
+f 861 862 864
+f 862 589 864
+f 862 588 589
+f 597 863 596
+f 596 863 865
+f 865 864 866
+f 863 864 865
+f 866 589 586
+f 864 589 866
+f 596 865 599
+f 599 865 867
+f 865 868 867
+f 865 866 868
+f 866 587 868
+f 866 586 587
+f 599 867 598
+f 598 867 869
+f 869 868 870
+f 867 868 869
+f 870 587 584
+f 868 587 870
+f 598 869 601
+f 601 869 871
+f 871 870 872
+f 869 870 871
+f 870 585 872
+f 870 584 585
+f 601 871 600
+f 600 871 873
+f 873 872 874
+f 871 872 873
+f 874 585 582
+f 872 585 874
+f 600 873 603
+f 603 873 875
+f 873 876 875
+f 873 874 876
+f 874 583 876
+f 874 582 583
+f 603 875 602
+f 602 875 877
+f 877 876 878
+f 875 876 877
+f 878 583 580
+f 876 583 878
+f 602 877 605
+f 605 877 879
+f 877 880 879
+f 877 878 880
+f 878 581 880
+f 878 580 581
+f 605 879 604
+f 604 879 881
+f 881 880 882
+f 879 880 881
+f 882 581 578
+f 880 581 882
+f 604 881 607
+f 607 881 883
+f 883 882 884
+f 881 882 883
+f 882 579 884
+f 882 578 579
+f 607 883 606
+f 606 883 885
+f 885 884 886
+f 883 884 885
+f 886 579 576
+f 884 579 886
+f 606 885 609
+f 609 885 887
+f 885 888 887
+f 885 886 888
+f 886 577 888
+f 886 576 577
+f 609 887 608
+f 608 887 889
+f 889 888 890
+f 887 888 889
+f 890 577 574
+f 888 577 890
+f 608 889 611
+f 611 889 891
+f 889 892 891
+f 889 890 892
+f 890 575 892
+f 890 574 575
+f 611 891 610
+f 610 891 893
+f 893 892 894
+f 891 892 893
+f 894 575 571
+f 892 575 894
+f 610 893 613
+f 613 893 895
+f 895 894 896
+f 893 894 895
+f 894 573 896
+f 894 571 573
+f 613 895 612
+f 612 895 897
+f 897 896 898
+f 895 896 897
+f 898 573 572
+f 896 573 898
+f 612 897 615
+f 615 897 899
+f 899 898 900
+f 897 898 899
+f 898 570 900
+f 898 572 570
+f 615 899 614
+f 614 899 901
+f 901 900 902
+f 899 900 901
+f 902 570 568
+f 900 570 902
+f 614 901 617
+f 617 901 903
+f 901 904 903
+f 901 902 904
+f 902 569 904
+f 902 568 569
+f 617 903 616
+f 616 903 905
+f 905 904 906
+f 903 904 905
+f 906 569 566
+f 904 569 906
+f 616 905 619
+f 619 905 907
+f 907 906 908
+f 905 906 907
+f 906 567 908
+f 906 566 567
+f 619 907 618
+f 618 907 909
+f 909 908 910
+f 907 908 909
+f 910 567 564
+f 908 567 910
+f 618 909 621
+f 621 909 911
+f 909 912 911
+f 909 910 912
+f 910 565 912
+f 910 564 565
+f 621 911 620
+f 620 911 913
+f 913 912 914
+f 911 912 913
+f 914 565 562
+f 912 565 914
+f 620 913 623
+f 623 913 915
+f 915 914 916
+f 913 914 915
+f 914 563 916
+f 914 562 563
+f 623 915 622
+f 622 915 917
+f 917 916 918
+f 915 916 917
+f 918 563 560
+f 916 563 918
+f 622 917 625
+f 625 917 919
+f 917 920 919
+f 917 918 920
+f 918 561 920
+f 918 560 561
+f 625 919 624
+f 624 919 921
+f 921 920 922
+f 919 920 921
+f 922 561 558
+f 920 561 922
+f 624 921 627
+f 627 921 923
+f 921 924 923
+f 921 922 924
+f 922 559 924
+f 922 558 559
+f 627 923 626
+f 626 923 925
+f 925 924 926
+f 923 924 925
+f 926 559 555
+f 924 559 926
+f 626 925 629
+f 629 925 927
+f 925 928 927
+f 925 926 928
+f 926 557 928
+f 926 555 557
+f 629 927 628
+f 628 927 929
+f 929 928 930
+f 927 928 929
+f 930 557 556
+f 928 557 930
+f 628 929 591
+f 591 929 592
+f 592 930 593
+f 929 930 592
+f 930 554 593
+f 930 556 554
+f 672 931 673
+f 932 933 931
+f 674 931 672
+f 934 932 931
+f 673 935 676
+f 676 935 677
+f 936 935 933
+f 937 935 936
+f 931 935 673
+f 933 935 931
+f 677 938 679
+f 679 938 680
+f 939 938 937
+f 940 938 939
+f 935 938 677
+f 937 938 935
+f 680 941 682
+f 682 941 683
+f 938 941 680
+f 940 941 938
+f 942 941 940
+f 943 941 942
+f 683 944 685
+f 685 944 686
+f 945 944 943
+f 946 944 945
+f 941 944 683
+f 943 944 941
+f 686 947 688
+f 688 947 689
+f 944 947 686
+f 948 947 946
+f 949 947 948
+f 946 947 944
+f 689 950 691
+f 691 950 692
+f 951 950 949
+f 952 950 951
+f 947 950 689
+f 949 950 947
+f 692 953 694
+f 694 953 695
+f 954 953 952
+f 955 953 954
+f 952 953 950
+f 950 953 692
+f 695 956 697
+f 697 956 698
+f 955 956 953
+f 957 956 955
+f 958 956 957
+f 953 956 695
+f 958 959 956
+f 698 959 700
+f 700 959 701
+f 960 959 958
+f 961 959 960
+f 956 959 698
+f 961 962 959
+f 701 962 703
+f 703 962 704
+f 959 962 701
+f 963 962 961
+f 964 962 963
+f 674 965 931
+f 704 965 706
+f 706 965 674
+f 962 965 704
+f 966 965 964
+f 934 965 966
+f 931 965 934
+f 964 965 962
+f 967 714 710
+f 967 710 968
+f 710 969 968
+f 710 709 969
+f 709 970 969
+f 708 971 709
+f 709 971 970
+f 708 972 971
+f 708 707 972
+f 707 973 972
+f 712 974 973
+f 712 973 707
+f 967 975 714
+f 975 713 714
+f 975 976 713
+f 713 977 711
+f 976 977 713
+f 977 978 711
+f 978 712 711
+f 978 974 712
+f 932 937 933
+f 933 937 936
+f 939 937 940
+f 940 937 942
+f 942 937 943
+f 943 937 945
+f 945 937 946
+f 946 937 948
+f 948 937 949
+f 949 937 951
+f 951 937 952
+f 952 937 954
+f 954 937 955
+f 955 937 957
+f 957 937 958
+f 958 937 960
+f 960 937 961
+f 961 937 963
+f 963 937 964
+f 964 937 966
+f 966 937 934
+f 934 937 932
+f 967 968 969
+f 975 969 970
+f 975 967 969
+f 976 970 971
+f 976 975 970
+f 977 971 972
+f 977 976 971
+f 978 977 972
+f 974 972 973
+f 974 978 972
+o Seats
+v 10.713250 3.237662 1.978956
+v 10.610739 3.274068 2.428213
+v 10.713250 3.237662 2.428213
+v 10.610739 3.274068 1.530000
+v 11.130400 3.089516 1.530000
+v 11.130400 3.089516 1.978956
+v 10.783582 1.039549 1.978956
+v 10.783582 1.039549 1.530000
+v 10.783582 -1.039549 1.978956
+v 10.783582 -1.039549 1.530000
+v 11.130400 -3.089516 1.978956
+v 11.130400 -3.089516 1.530000
+v 10.345294 1.089650 1.978956
+v 10.345294 -1.089650 1.978956
+v 10.713250 -3.237662 1.978956
+v 10.345294 1.089650 2.428213
+v 10.345294 -1.089650 2.428213
+v 10.713250 -3.237662 2.428213
+v 10.237572 1.101963 2.428213
+v 10.237572 -1.101963 2.428213
+v 10.610739 -3.274068 2.428213
+v 10.237572 1.101963 1.530000
+v 10.237572 -1.101963 1.530000
+v 10.610739 -3.274068 1.530000
+v 9.835376 3.549431 1.978956
+v 9.732914 3.585819 2.428213
+v 9.835376 3.549431 2.428213
+v 9.732914 3.585819 1.530000
+v 10.252309 3.401361 1.530000
+v 10.252309 3.401361 1.978956
+v 9.860877 1.145021 1.978956
+v 9.860877 1.145021 1.530000
+v 9.860877 -1.145021 1.978956
+v 9.860877 -1.145021 1.530000
+v 10.252309 -3.401361 1.978956
+v 10.252309 -3.401361 1.530000
+v 9.422614 1.195113 1.978956
+v 9.422614 -1.195113 1.978956
+v 9.835376 -3.549431 1.978956
+v 9.422614 1.195113 2.428213
+v 9.422614 -1.195113 2.428213
+v 9.835376 -3.549431 2.428213
+v 9.314898 1.207425 2.428213
+v 9.314898 -1.207425 2.428213
+v 9.732914 -3.585819 2.428213
+v 9.314898 1.207425 1.530000
+v 9.314898 -1.207425 1.530000
+v 9.732914 -3.585819 1.530000
+v 8.957891 3.861061 1.978956
+v 8.855471 3.897434 2.428213
+v 8.957891 3.861061 2.428213
+v 8.855471 3.897434 1.530000
+v 9.374649 3.713053 1.530000
+v 9.374649 3.713053 1.978956
+v 8.938221 1.250476 1.978956
+v 8.938221 1.250476 1.530000
+v 8.938221 -1.250476 1.978956
+v 8.938221 -1.250476 1.530000
+v 9.374649 -3.713053 1.978956
+v 9.374649 -3.713053 1.530000
+v 8.499978 1.300561 1.978956
+v 8.499978 -1.300561 1.978956
+v 8.957891 -3.861061 1.978956
+v 8.499978 1.300561 2.428213
+v 8.499978 -1.300561 2.428213
+v 8.957891 -3.861061 2.428213
+v 8.392267 1.312871 2.428213
+v 8.392267 -1.312871 2.428213
+v 8.855471 -3.897434 2.428213
+v 8.392267 1.312871 1.530000
+v 8.392267 -1.312871 1.530000
+v 8.855471 -3.897434 1.530000
+v 8.080727 4.172577 1.978956
+v 7.978340 4.208939 2.428213
+v 8.080727 4.172577 2.428213
+v 7.978340 4.208939 1.530000
+v 8.497340 4.024621 1.530000
+v 8.497340 4.024621 1.978956
+v 8.015606 1.355917 1.978956
+v 8.015606 1.355917 1.530000
+v 8.015606 -1.355917 1.978956
+v 8.015606 -1.355917 1.530000
+v 8.497340 -4.024621 1.978956
+v 8.497340 -4.024621 1.530000
+v 7.577380 1.405998 1.978956
+v 7.577380 -1.405998 1.978956
+v 8.080727 -4.172577 1.978956
+v 7.577380 1.405998 2.428213
+v 7.577380 -1.405998 2.428213
+v 8.080727 -4.172577 2.428213
+v 7.469673 1.418306 2.428213
+v 7.469673 -1.418306 2.428213
+v 7.978340 -4.208939 2.428213
+v 7.469673 1.418306 1.530000
+v 7.469673 -1.418306 1.530000
+v 7.978340 -4.208939 1.530000
+v 7.203829 4.483998 1.978956
+v 7.101470 4.520350 2.428213
+v 7.203829 4.483998 2.428213
+v 7.101470 4.520350 1.530000
+v 7.620322 4.336085 1.530000
+v 7.620322 4.336085 1.978956
+v 7.093025 1.461348 1.978956
+v 7.093025 1.461348 1.530000
+v 7.093025 -1.461348 1.978956
+v 7.093025 -1.461348 1.530000
+v 7.620322 -4.336085 1.978956
+v 7.620322 -4.336085 1.530000
+v 6.654812 1.511425 1.978956
+v 6.654812 -1.511425 1.978956
+v 7.203829 -4.483998 1.978956
+v 6.654812 1.511425 2.428213
+v 6.654812 -1.511425 2.428213
+v 7.203829 -4.483998 2.428213
+v 6.547108 1.523732 2.428213
+v 6.547108 -1.523732 2.428213
+v 7.101470 -4.520350 2.428213
+v 6.547108 1.523732 1.530000
+v 6.547108 -1.523732 1.530000
+v 7.101470 -4.520350 1.530000
+v 6.327155 4.795341 1.978956
+v 6.224820 4.831684 2.428213
+v 6.327155 4.795341 2.428213
+v 6.224820 4.831684 1.530000
+v 6.743546 4.647463 1.530000
+v 6.743546 4.647463 1.978956
+v 6.170471 1.566771 1.530000
+v 5.624568 1.629150 1.530000
+v 6.170471 -1.566771 1.530000
+v 5.624568 -1.629150 1.530000
+v 6.743546 -4.647463 1.530000
+v 6.224820 -4.831684 1.530000
+v 6.170471 1.566771 1.978956
+v 6.170471 -1.566771 1.978956
+v 6.743546 -4.647463 1.978956
+v 5.732270 1.616844 1.978956
+v 5.732270 -1.616844 1.978956
+v 6.327155 -4.795341 1.978956
+v 5.732270 1.616844 2.428213
+v 5.732270 -1.616844 2.428213
+v 6.327155 -4.795341 2.428213
+v 5.624568 1.629150 2.428213
+v 5.624568 -1.629150 2.428213
+v 6.224820 -4.831684 2.428213
+v 5.450671 5.106616 1.978956
+v 5.348356 5.142951 2.428213
+v 5.450671 5.106616 2.428213
+v 5.348356 5.142951 1.530000
+v 5.866975 4.958769 1.530000
+v 5.866975 4.958769 1.978956
+v 5.247941 1.672186 1.530000
+v 4.702051 1.734562 1.530000
+v 5.247941 -1.672186 1.530000
+v 4.702051 -1.734562 1.530000
+v 5.866975 -4.958769 1.530000
+v 5.348356 -5.142951 1.530000
+v 5.247941 1.672186 1.978956
+v 5.247941 -1.672186 1.978956
+v 5.866975 -4.958769 1.978956
+v 4.809750 1.722256 1.978956
+v 4.809750 -1.722256 1.978956
+v 5.450671 -5.106616 1.978956
+v 4.809750 1.722256 2.428213
+v 4.809750 -1.722256 2.428213
+v 5.450671 -5.106616 2.428213
+v 4.702051 1.734562 2.428213
+v 4.702051 -1.734562 2.428213
+v 5.348356 -5.142951 2.428213
+v 4.573611 5.418095 1.978956
+v 4.469783 5.454968 2.428956
+v 4.573611 5.418095 2.428956
+v 4.469783 5.454968 1.530000
+v 4.988945 5.270593 1.530000
+v 4.988945 5.270593 1.978956
+v 3.777162 1.840242 1.530000
+v 4.323709 1.777793 1.530000
+v 4.323709 -1.777793 1.530000
+v 3.777162 -1.840242 1.530000
+v 4.988945 -5.270593 1.530000
+v 4.469783 -5.454968 1.530000
+v 4.323709 1.777793 1.978956
+v 4.323709 -1.777793 1.978956
+v 4.988945 -5.270593 1.978956
+v 3.886471 1.827752 1.978956
+v 3.886471 -1.827752 1.978956
+v 4.573611 -5.418095 1.978956
+v 3.886471 1.827752 2.428956
+v 3.886471 -1.827752 2.428956
+v 4.573611 -5.418095 2.428956
+v 3.777162 1.840242 2.428956
+v 3.777162 -1.840242 2.428956
+v 4.469783 -5.454968 2.428956
+v 14.602272 9.600486 1.978956
+v 13.247172 8.193893 1.978956
+v 14.654714 9.464993 1.978956
+v 14.705967 9.329045 1.978956
+v 14.756027 9.192654 1.978956
+v 13.483304 7.864862 1.978956
+v 12.120698 6.598321 1.978956
+v 12.418208 6.365387 1.978956
+v 11.248828 4.850568 1.978956
+v 11.583591 4.726403 1.978956
+v 14.602272 9.600486 2.428213
+v 13.247172 8.193893 2.428213
+v 12.120698 6.598321 2.428213
+v 11.248828 4.850568 2.428213
+v 11.147164 4.888276 2.428213
+v 11.147164 4.888276 1.530000
+v 11.583591 4.726403 1.530000
+v 13.483304 7.864862 1.530000
+v 14.756027 9.192654 1.530000
+v 12.418208 6.365387 1.530000
+v 14.574036 9.672011 2.428213
+v 14.559793 9.707725 2.428213
+v 14.588195 9.636265 2.428213
+v 14.692519 9.365066 1.530000
+v 14.627106 9.536762 1.530000
+v 14.559793 9.707725 1.530000
+v 13.179771 8.282421 2.428213
+v 12.033285 6.663309 2.428213
+v 13.179771 8.282421 1.530000
+v 12.033285 6.663309 1.530000
+v 10.276383 5.211253 2.428213
+v 10.378041 5.173548 1.978956
+v 10.378041 5.173548 2.428213
+v 10.276383 5.211253 1.530000
+v 10.791654 5.020137 1.530000
+v 10.791654 5.020137 1.978956
+v 14.406628 10.077511 1.978956
+v 12.941386 8.588230 1.978956
+v 14.406628 10.077511 1.530000
+v 12.941386 8.588230 1.530000
+v 11.726475 6.888559 1.978956
+v 11.726475 6.888559 1.530000
+v 14.219474 10.498146 1.978956
+v 12.658860 8.937010 1.978956
+v 14.283155 10.358514 1.978956
+v 14.345542 10.218298 1.978956
+v 11.367351 7.146852 1.978956
+v 14.219474 10.498146 2.428213
+v 12.658860 8.937010 2.428213
+v 11.367351 7.146852 2.428213
+v 14.172014 10.600039 2.428213
+v 12.588579 9.021629 2.428213
+v 14.187911 10.566111 2.428213
+v 14.203731 10.532146 2.428213
+v 11.278736 7.209736 2.428213
+v 14.172014 10.600039 1.530000
+v 12.588579 9.021629 1.530000
+v 11.278736 7.209736 1.530000
+v 14.252222 10.426767 1.530000
+v 14.330430 10.252584 1.530000
+v 9.405653 5.534212 2.428213
+v 9.507305 5.496509 1.978956
+v 9.507305 5.496509 2.428213
+v 9.405653 5.534212 1.530000
+v 9.920896 5.343106 1.530000
+v 9.920896 5.343106 1.978956
+v 14.001550 10.951962 1.978956
+v 12.340226 9.314246 1.978956
+v 14.001550 10.951962 1.530000
+v 12.340226 9.314246 1.530000
+v 10.967793 7.427838 1.978956
+v 10.967793 7.427838 1.530000
+v 13.794470 11.353173 1.978956
+v 12.046268 9.648454 1.978956
+v 13.864709 11.220064 1.978956
+v 13.933738 11.086324 1.978956
+v 10.603980 7.678154 1.978956
+v 13.794470 11.353173 2.428213
+v 12.046268 9.648454 2.428213
+v 10.603980 7.678154 2.428213
+v 13.742141 11.450480 2.428213
+v 11.973201 9.729598 2.428213
+v 13.759656 11.418083 2.428213
+v 13.777099 11.385648 2.428213
+v 10.514230 7.739125 2.428213
+v 13.742141 11.450480 1.530000
+v 11.973201 9.729598 1.530000
+v 10.514230 7.739125 1.530000
+v 13.830485 11.285287 1.530000
+v 13.916959 11.119107 1.530000
+v 8.534964 5.857155 2.428213
+v 8.636611 5.819454 1.978956
+v 8.636611 5.819454 2.428213
+v 8.534964 5.857155 1.530000
+v 9.050182 5.666058 1.530000
+v 9.050182 5.666058 1.978956
+v 13.554718 11.786846 1.978956
+v 11.715160 10.010335 1.978956
+v 13.554718 11.786846 1.530000
+v 11.715160 10.010335 1.530000
+v 10.199355 7.950651 1.978956
+v 10.199355 7.950651 1.530000
+v 13.328026 12.170750 1.978956
+v 11.410027 10.331166 1.978956
+v 13.404736 12.043461 1.978956
+v 13.480302 11.915489 1.978956
+v 9.831036 8.193509 1.978956
+v 13.328026 12.170750 2.428213
+v 11.410027 10.331166 2.428213
+v 9.831036 8.193509 2.428213
+v 13.270891 12.263910 2.428213
+v 11.334225 10.409082 2.428213
+v 13.290005 12.232899 2.428213
+v 13.309050 12.201845 2.428213
+v 9.740187 8.252672 2.428213
+v 13.270891 12.263910 1.530000
+v 11.334225 10.409082 1.530000
+v 9.740187 8.252672 1.530000
+v 13.367272 12.105947 1.530000
+v 13.461885 11.946919 1.530000
+v 7.664308 6.180086 2.428213
+v 7.765952 6.142386 1.978956
+v 7.765952 6.142386 2.428213
+v 7.664308 6.180086 1.530000
+v 8.179507 5.988996 1.530000
+v 8.179507 5.988996 1.978956
+v 13.066709 12.586052 1.978956
+v 11.066658 10.678685 1.978956
+v 13.066709 12.586052 1.530000
+v 11.066658 10.678685 1.530000
+v 9.421498 8.457944 1.978956
+v 9.421498 8.457944 1.530000
+v 12.820579 12.953841 1.978956
+v 10.750496 10.986803 1.978956
+v 12.903711 12.831976 1.978956
+v 12.985757 12.709376 1.978956
+v 9.048781 8.693627 1.978956
+v 12.820579 12.953841 2.428213
+v 10.750496 10.986803 2.428213
+v 9.048781 8.693627 2.428213
+v 12.758676 13.043097 2.428213
+v 10.671990 11.061625 2.428213
+v 12.779375 13.013391 2.428213
+v 12.800010 12.983639 2.428213
+v 8.956858 8.751040 2.428213
+v 12.758676 13.043097 1.530000
+v 10.671990 11.061625 1.530000
+v 8.956858 8.751040 1.530000
+v 12.863039 12.891890 1.530000
+v 12.965720 12.739534 1.530000
+v 6.793681 6.503006 2.428213
+v 6.895322 6.465307 1.978956
+v 6.895322 6.465307 2.428213
+v 6.793681 6.503006 1.530000
+v 7.308864 6.311922 1.530000
+v 7.308864 6.311922 1.978956
+v 12.537836 13.351723 1.530000
+v 10.394988 11.320483 1.530000
+v 12.428738 13.498851 1.530000
+v 12.318022 13.644764 1.530000
+v 9.986682 11.687992 1.530000
+v 12.205701 13.789446 1.530000
+v 8.634422 8.950222 1.530000
+v 8.164382 9.234550 1.530000
+v 12.537836 13.351723 1.978956
+v 10.394988 11.320483 1.978956
+v 8.634422 8.950222 1.978956
+v 12.450385 13.469927 1.978956
+v 12.272357 13.703984 1.978956
+v 10.067875 11.616205 1.978956
+v 12.361890 13.587350 1.978956
+v 8.257369 9.178864 1.978956
+v 12.272357 13.703984 2.428213
+v 10.067875 11.616205 2.428213
+v 8.257369 9.178864 2.428213
+v 12.250200 13.732520 2.428213
+v 12.205701 13.789446 2.428213
+v 9.986682 11.687992 2.428213
+v 12.227982 13.761007 2.428213
+v 8.164382 9.234550 2.428213
+v 5.923079 6.825917 2.428213
+v 6.024717 6.788219 1.978956
+v 6.024717 6.788219 2.428213
+v 5.923079 6.825917 1.530000
+v 6.438248 6.634838 1.530000
+v 6.438248 6.634838 1.978956
+v 11.851053 14.225676 1.530000
+v 9.700287 11.936255 1.530000
+v 11.732311 14.365207 1.530000
+v 11.968247 14.084841 1.530000
+v 9.278378 12.288417 1.530000
+v 11.612036 14.503417 1.530000
+v 7.838235 9.427704 1.530000
+v 7.362827 9.703296 1.530000
+v 11.968247 14.084841 1.978956
+v 9.700287 11.936255 1.978956
+v 7.838235 9.427704 1.978956
+v 11.779371 14.310281 1.978956
+v 11.874309 14.197980 1.978956
+v 11.683441 14.421736 1.978956
+v 9.362254 12.219659 1.978956
+v 7.456873 9.649334 1.978956
+v 11.683441 14.421736 2.428213
+v 9.362254 12.219659 2.428213
+v 7.456873 9.649334 2.428213
+v 11.612036 14.503417 2.428213
+v 11.635897 14.476242 2.428213
+v 11.659698 14.449015 2.428213
+v 9.278378 12.288417 2.428213
+v 7.362827 9.703296 2.428213
+v 5.050243 7.149657 2.428956
+v 5.153399 7.111395 1.978956
+v 5.153399 7.111395 2.428956
+v 5.050243 7.149657 1.530000
+v 5.566030 6.958348 1.530000
+v 5.566030 6.958348 1.978956
+v 11.104370 15.054690 1.530000
+v 8.981240 12.527138 1.530000
+v 10.975948 15.186501 1.530000
+v 11.231321 14.921464 1.530000
+v 11.356788 14.786838 1.530000
+v 8.545163 12.864192 1.530000
+v 7.031471 9.891256 1.530000
+v 6.550101 10.158354 1.530000
+v 11.356788 14.786838 1.978956
+v 8.981240 12.527138 1.978956
+v 7.031471 9.891256 1.978956
+v 11.053262 15.107498 1.978956
+v 11.155384 15.001511 1.978956
+v 11.256562 14.894621 1.978956
+v 8.633025 12.797523 1.978956
+v 6.646630 10.105355 1.978956
+v 11.053262 15.107498 2.428956
+v 8.633025 12.797523 2.428956
+v 6.646630 10.105355 2.428956
+v 10.975948 15.186501 2.428956
+v 11.001778 15.160223 2.428956
+v 11.027550 15.133889 2.428956
+v 8.545163 12.864192 2.428956
+v 6.550101 10.158354 2.428956
+v 9.262849 -16.700836 2.613711
+v 9.292641 -16.677902 2.163711
+v 9.292641 -16.677902 2.613711
+v 9.233006 -16.723701 2.613711
+v 9.203111 -16.746500 2.613711
+v 9.351702 -16.632120 1.713710
+v 9.410920 -16.585783 2.163711
+v 9.203111 -16.746500 1.713711
+v 9.498990 -16.516068 1.713710
+v 9.528361 -16.492599 2.163711
+v 9.644957 -16.398357 1.713710
+v 9.644957 -16.398357 2.163711
+v 3.379789 -7.765678 2.163711
+v 4.969143 -10.984318 2.163711
+v 3.379789 -7.765678 1.713710
+v 4.969143 -10.984318 1.713710
+v 7.077588 -13.889511 2.163711
+v 7.077588 -13.889511 1.713710
+v 2.966874 -7.917940 2.163711
+v 4.573143 -11.179663 2.163711
+v 6.701668 -14.127257 2.163711
+v 2.966874 -7.917940 2.613711
+v 4.573143 -11.179663 2.613711
+v 6.701668 -14.127257 2.613711
+v 2.863646 -7.956006 2.613711
+v 4.473818 -11.227940 2.613711
+v 6.606869 -14.185692 2.613711
+v 2.863646 -7.956006 1.713711
+v 4.473818 -11.227940 1.713711
+v 6.606869 -14.185692 1.713711
+v 9.202493 -16.746969 1.713710
+v 9.202184 -16.747204 1.713710
+v 9.202184 -16.747204 1.714342
+v 9.202802 -16.746735 1.713710
+v 2.862581 -7.956398 1.714342
+v 4.472793 -11.228436 1.714342
+v 2.862847 -7.956300 1.714185
+v 2.863114 -7.956202 1.714027
+v 6.605889 -14.186293 1.714342
+v 2.862581 -7.956398 1.713710
+v 4.472793 -11.228436 1.713710
+v 6.605889 -14.186293 1.713710
+v 8.543903 -17.222967 2.787421
+v 8.575221 -17.201427 2.337421
+v 8.575221 -17.201427 2.787421
+v 8.512536 -17.244436 2.787421
+v 8.481119 -17.265831 2.787421
+v 8.823064 -17.027185 2.337421
+v 8.481119 -17.265831 2.061131
+v 8.945782 -16.938374 2.337421
+v 8.699540 -17.114872 2.337421
+v 8.481119 -17.265831 1.887421
+v 8.637251 -17.158451 1.887421
+v 8.792145 -17.049294 1.887421
+v 8.945782 -16.938374 1.887421
+v 2.570602 -8.064066 2.337421
+v 4.191144 -11.363756 2.337421
+v 2.570602 -8.064066 1.887421
+v 4.191144 -11.363756 1.887421
+v 6.335963 -14.349365 2.337421
+v 6.335963 -14.349365 1.887421
+v 2.157694 -8.216326 2.337421
+v 3.791053 -11.552003 2.337421
+v 5.949745 -14.574361 2.337421
+v 2.157694 -8.216326 2.787421
+v 3.791053 -11.552003 2.787421
+v 5.949745 -14.574361 2.787421
+v 2.054467 -8.254391 2.787421
+v 3.690701 -11.598487 2.787421
+v 5.852365 -14.629567 2.787421
+v 3.690701 -11.598487 1.887421
+v 2.054467 -8.254391 1.887421
+v 5.852365 -14.629567 1.887421
+v 2.054467 -8.254391 2.061131
+v 3.690701 -11.598487 2.061131
+v 5.852365 -14.629567 2.061131
+v 7.790010 -17.710739 2.961130
+v 7.822865 -17.690670 2.511130
+v 7.822865 -17.690670 2.961130
+v 7.757109 -17.730732 2.961130
+v 7.724162 -17.750648 2.961130
+v 8.082901 -17.528090 2.511130
+v 7.724162 -17.750648 2.234841
+v 8.211782 -17.445002 2.511130
+v 7.953259 -17.609980 2.511130
+v 7.724162 -17.750648 2.061130
+v 7.887877 -17.650648 2.061131
+v 8.050424 -17.548761 2.061131
+v 8.211782 -17.445002 2.061130
+v 1.762492 -8.362057 2.511130
+v 3.406142 -11.728702 2.511130
+v 1.762492 -8.362057 2.061130
+v 3.406142 -11.728702 2.061130
+v 5.575133 -14.783429 2.511130
+v 5.575133 -14.783429 2.061130
+v 1.349590 -8.514314 2.511130
+v 3.001911 -11.909617 2.511130
+v 5.178541 -14.995154 2.511130
+v 1.349590 -8.514314 2.961130
+v 3.001911 -11.909617 2.961130
+v 5.178541 -14.995154 2.961130
+v 1.246365 -8.552379 2.961130
+v 2.900520 -11.954248 2.961130
+v 5.078559 -15.046996 2.961130
+v 2.900520 -11.954248 2.061130
+v 1.246365 -8.552379 2.061131
+v 5.078559 -15.046996 2.061130
+v 1.246365 -8.552379 2.234841
+v 2.900520 -11.954248 2.234841
+v 5.078559 -15.046996 2.234841
+v 6.999949 -18.162838 3.134840
+v 7.034354 -18.144333 2.684840
+v 7.034354 -18.144333 3.134840
+v 6.965501 -18.181263 3.134840
+v 6.931009 -18.199606 3.134840
+v 7.306685 -17.994125 2.684840
+v 6.931009 -18.199606 2.408551
+v 7.441783 -17.917114 2.684840
+v 7.170872 -18.069868 2.684840
+v 6.931009 -18.199606 2.234841
+v 7.102368 -18.107441 2.234841
+v 7.272634 -18.013273 2.234841
+v 7.441783 -17.917114 2.234840
+v 0.954394 -8.660043 2.684840
+v 2.613007 -12.079171 2.684840
+v 0.954394 -8.660043 2.234840
+v 2.613007 -12.079171 2.234840
+v 4.793951 -15.191233 2.684840
+v 4.793951 -15.191233 2.234840
+v 0.541497 -8.812298 2.684840
+v 2.204569 -12.252478 2.684840
+v 4.386879 -15.389062 2.684840
+v 0.541497 -8.812298 3.134840
+v 2.204569 -12.252478 3.134840
+v 4.386879 -15.389062 3.134840
+v 0.438273 -8.850362 3.134840
+v 2.102119 -12.295180 3.134840
+v 4.284268 -15.437375 3.134840
+v 2.102119 -12.295180 2.234840
+v 0.438273 -8.850362 2.234841
+v 4.284268 -15.437375 2.234840
+v 0.438273 -8.850362 2.408551
+v 2.102119 -12.295180 2.408551
+v 4.284268 -15.437375 2.408551
+v 6.173376 -18.576942 3.308549
+v 6.209347 -18.560106 2.858549
+v 6.209347 -18.560106 3.308549
+v 6.137365 -18.593691 3.308549
+v 6.101314 -18.610355 3.308549
+v 6.494090 -18.423090 2.858549
+v 6.101314 -18.610355 2.582262
+v 6.635470 -18.352554 2.858549
+v 6.352045 -18.492275 2.858549
+v 6.101314 -18.610355 2.408550
+v 6.280386 -18.526546 2.408551
+v 6.458446 -18.440609 2.408551
+v 6.635470 -18.352554 2.408549
+v 0.146305 -8.958025 2.858549
+v 1.811601 -12.414597 2.858549
+v 0.146305 -8.958025 2.408549
+v 1.811601 -12.414597 2.408549
+v 3.992201 -15.571507 2.858549
+v 3.992201 -15.571507 2.408549
+v -0.266587 -9.110279 2.858549
+v 1.398874 -12.579967 2.858549
+v 3.574522 -15.754720 2.858549
+v -0.266587 -9.110279 3.308549
+v 1.398874 -12.579967 3.308549
+v 3.574522 -15.754720 3.308549
+v -0.369810 -9.148342 3.308549
+v 1.295346 -12.620658 3.308549
+v 3.469248 -15.799315 3.308549
+v 1.295346 -12.620658 2.408549
+v -0.369810 -9.148342 2.408551
+v 3.469248 -15.799315 2.408549
+v -0.369810 -9.148342 2.582262
+v 1.295346 -12.620658 2.582262
+v 3.469248 -15.799315 2.582262
+v 5.309899 -18.950392 3.482259
+v 5.347454 -18.935347 3.032259
+v 5.347454 -18.935347 3.482259
+v 5.272306 -18.965347 3.482259
+v 5.234678 -18.980209 3.482259
+v 5.644741 -18.812458 3.032259
+v 5.234678 -18.980209 2.755972
+v 5.792476 -18.748857 3.032259
+v 5.496395 -18.874622 3.032259
+v 5.234678 -18.980209 2.582260
+v 5.421542 -18.905352 2.582262
+v 5.607484 -18.828230 2.582262
+v 5.792476 -18.748857 2.582259
+v -0.661774 -9.256004 3.032259
+v 1.001758 -12.734318 3.032259
+v -0.661774 -9.256004 2.582259
+v 1.001758 -12.734318 2.582259
+v 3.169622 -15.922792 3.032259
+v 3.169622 -15.922792 2.582259
+v -1.074662 -9.408257 3.032259
+v 0.584648 -12.891377 3.032259
+v 2.741186 -16.090561 3.032259
+v -1.074662 -9.408257 3.482259
+v 0.584648 -12.891377 3.482259
+v 2.741186 -16.090561 3.482259
+v -1.177884 -9.446320 3.482259
+v 0.480015 -12.929957 3.482259
+v 2.633209 -16.131224 3.482259
+v 0.480015 -12.929957 2.582259
+v -1.177884 -9.446320 2.582262
+v 2.633209 -16.131224 2.582259
+v -1.177884 -9.446320 2.755972
+v 0.480015 -12.929957 2.755972
+v 2.633209 -16.131224 2.755972
+v 4.409069 -19.280159 3.655968
+v 4.448230 -19.267040 3.205968
+v 4.448230 -19.267040 3.655968
+v 4.369876 -19.293180 3.655968
+v 4.330650 -19.306105 3.655968
+v 4.758210 -19.159346 3.205968
+v 4.330650 -19.306105 2.929682
+v 4.912386 -19.103205 3.205968
+v 4.603486 -19.213961 3.205968
+v 4.330650 -19.306105 2.755970
+v 4.525394 -19.240873 2.755972
+v 4.719316 -19.173237 2.755972
+v 4.912386 -19.103205 2.755968
+v -1.469845 -9.553981 3.205968
+v 0.183284 -13.037574 3.205968
+v -1.469845 -9.553981 2.755968
+v 0.183284 -13.037574 2.755968
+v 2.325910 -16.243414 3.205968
+v 2.325910 -16.243414 2.755968
+v -1.882729 -9.706231 3.205968
+v -0.238323 -13.185889 3.205968
+v 1.886540 -16.394789 3.205968
+v -1.882729 -9.706231 3.655968
+v -0.238323 -13.185889 3.655968
+v 1.886540 -16.394789 3.655968
+v -1.985950 -9.744294 3.655968
+v -0.344091 -13.222245 3.655968
+v 1.775815 -16.431271 3.655968
+v -0.344091 -13.222245 2.755968
+v -1.985950 -9.744294 2.755972
+v 1.775815 -16.431271 2.755968
+v -1.985950 -9.744294 2.929682
+v -0.344091 -13.222245 2.929682
+v 1.775815 -16.431271 2.929682
+v 3.470375 -19.562777 3.829678
+v 3.511165 -19.551744 3.379678
+v 3.511165 -19.551744 3.829678
+v 3.429558 -19.573706 3.829678
+v 3.388712 -19.584532 3.829678
+v 3.834010 -19.460463 3.379678
+v 3.388712 -19.584532 3.103392
+v 3.994724 -19.412378 3.379678
+v 3.672819 -19.506920 3.379678
+v 3.388712 -19.584532 2.929680
+v 3.591437 -19.529705 2.929682
+v 3.793452 -19.472319 2.929682
+v 3.994724 -19.412378 2.929678
+v -2.277909 -9.851954 3.379678
+v -0.644053 -13.323485 3.379678
+v -2.277909 -9.851954 2.929678
+v -0.644053 -13.323485 2.929678
+v 1.460704 -16.531446 3.379678
+v 1.460704 -16.531446 2.929678
+v -2.690789 -10.004204 3.379678
+v -1.070291 -13.462556 3.379678
+v 1.010193 -16.665337 3.379678
+v -2.690789 -10.004204 3.829678
+v -1.070291 -13.462556 3.829678
+v 1.010193 -16.665337 3.829678
+v -2.794009 -10.042266 3.829678
+v -1.177227 -13.496557 3.829678
+v 0.896664 -16.697351 3.829678
+v -1.177227 -13.496557 2.929678
+v -2.794009 -10.042266 2.929682
+v 0.896664 -16.697351 2.929678
+v -2.794009 -10.042266 3.103392
+v -1.177227 -13.496557 3.103392
+v 0.896664 -16.697351 3.103392
+v 2.493229 -19.794264 4.003387
+v 2.535676 -19.785498 3.553387
+v 2.535676 -19.785498 4.003387
+v 2.450759 -19.802919 4.003387
+v 2.408267 -19.811462 4.003387
+v 2.871582 -19.712034 3.553387
+v 2.408267 -19.811462 3.277103
+v 3.038946 -19.672693 3.553387
+v 2.703819 -19.749636 3.553387
+v 2.408267 -19.811462 3.103390
+v 2.619088 -19.767937 3.103392
+v 2.829326 -19.721678 3.103392
+v 3.038946 -19.672693 3.103387
+v -3.085966 -10.149925 3.553387
+v -1.480525 -13.591036 3.553387
+v -3.085966 -10.149925 3.103387
+v -1.480525 -13.591036 3.103387
+v 0.573580 -16.784676 3.553387
+v 0.573580 -16.784676 3.103387
+v -3.498843 -10.302174 3.553387
+v -1.911551 -13.720277 3.553387
+v 0.111681 -16.899813 3.553387
+v -3.498843 -10.302174 4.003387
+v -1.911551 -13.720277 4.003387
+v 0.111681 -16.899813 4.003387
+v -3.602062 -10.340236 4.003387
+v -2.019700 -13.751770 4.003387
+v -0.004716 -16.927031 4.003387
+v -2.019700 -13.751770 3.103387
+v -3.602062 -10.340236 3.103392
+v -0.004716 -16.927031 3.103387
+v -3.602062 -10.340236 3.277103
+v -2.019700 -13.751770 3.277103
+v -0.004716 -16.927031 3.277103
+v 1.476950 -19.970016 4.177097
+v 1.521085 -19.963728 3.727097
+v 1.521085 -19.963728 4.177097
+v 1.432797 -19.976183 4.177097
+v 1.388628 -19.982233 4.177097
+v 1.870280 -19.909706 3.727097
+v 1.388628 -19.982233 3.450813
+v 2.044425 -19.879910 3.727097
+v 1.695826 -19.937647 3.727097
+v 1.388628 -19.982233 3.277100
+v 1.607676 -19.951042 3.277103
+v 1.826288 -19.916933 3.277103
+v 2.044425 -19.879910 3.277097
+v -2.871869 -13.986568 3.277097
+v -4.410110 -10.638203 3.277103
+v -3.894017 -10.447894 3.277097
+v -2.326455 -13.839035 3.277097
+v -0.928887 -17.117472 3.277097
+v -0.335964 -17.000528 3.277097
+v -3.894017 -10.447894 3.727097
+v -2.326455 -13.839035 3.727097
+v -0.335964 -17.000528 3.727097
+v -4.306891 -10.600142 3.727097
+v -2.762460 -13.957765 3.727097
+v -0.809543 -17.095442 3.727097
+v -4.306891 -10.600142 4.177097
+v -2.762460 -13.957765 4.177097
+v -0.809543 -17.095442 4.177097
+v -4.410110 -10.638203 4.177097
+v -2.871869 -13.986568 4.177097
+v -0.928887 -17.117472 4.177097
+v -4.410110 -10.638203 3.450813
+v -2.871869 -13.986568 3.450813
+v -0.928887 -17.117472 3.450813
+v 0.420743 -20.084656 4.350806
+v 0.466605 -20.081097 3.900806
+v 0.466605 -20.081097 4.350806
+v 0.374870 -20.088089 4.350806
+v 0.328989 -20.091396 4.350806
+v 0.829351 -20.048420 3.900806
+v 0.328989 -20.091396 3.624523
+v 1.010433 -20.029097 3.900806
+v 0.648068 -20.065754 3.900806
+v 0.328989 -20.091396 3.450809
+v 0.556415 -20.073753 3.450813
+v 0.783578 -20.052986 3.450813
+v 1.010433 -20.029097 3.450806
+v -3.734170 -14.199397 3.450806
+v -5.218151 -10.936169 3.450813
+v -4.702062 -10.745860 3.450806
+v -3.182231 -14.066090 3.450806
+v -1.876520 -17.265339 3.450806
+v -1.268528 -17.176003 3.450806
+v -4.702062 -10.745860 3.900806
+v -3.182231 -14.066090 3.900806
+v -1.268528 -17.176003 3.900806
+v -5.114933 -10.898107 3.900806
+v -3.623439 -14.173496 3.900806
+v -1.754137 -17.248953 3.900806
+v -5.114933 -10.898107 4.350806
+v -3.623439 -14.173496 4.350806
+v -1.754137 -17.248953 4.350806
+v -5.218151 -10.936169 4.350806
+v -3.734170 -14.199397 4.350806
+v -1.876520 -17.265339 4.350806
+v -5.218151 -10.936169 3.624523
+v -3.734170 -14.199397 3.624523
+v -1.876520 -17.265339 3.624523
+v -0.676330 -20.131836 4.524516
+v -0.628696 -20.131298 4.074516
+v -0.628696 -20.131298 4.524516
+v -0.723966 -20.132238 4.524516
+v -0.771603 -20.132504 4.524516
+v -0.252086 -20.122219 4.074516
+v -0.771603 -20.132504 3.798234
+v -0.063883 -20.114473 4.074516
+v -0.440365 -20.127829 4.074516
+v -0.771603 -20.132504 3.624520
+v -0.535619 -20.129850 3.624523
+v -0.299696 -20.123840 3.624523
+v -0.063883 -20.114473 3.624516
+v -4.607129 -14.388393 3.624516
+v -6.026188 -11.234132 3.624523
+v -5.510102 -11.043825 3.624516
+v -4.048316 -14.270541 3.624516
+v -2.848429 -17.366661 3.624516
+v -2.224830 -17.307549 3.624516
+v -5.510102 -11.043825 4.074516
+v -4.048316 -14.270541 4.074516
+v -2.224830 -17.307549 4.074516
+v -5.922971 -11.196071 4.074516
+v -4.495003 -14.365653 4.074516
+v -2.722894 -17.356468 4.074516
+v -5.922971 -11.196071 4.524516
+v -4.495003 -14.365653 4.524516
+v -2.722894 -17.356468 4.524516
+v -6.026188 -11.234132 4.524516
+v -4.607129 -14.388393 4.524516
+v -2.848429 -17.366661 4.524516
+v -6.026188 -11.234132 3.798234
+v -4.607129 -14.388393 3.798234
+v -2.848429 -17.366661 3.798234
+v -1.815394 -20.103945 4.698225
+v -1.765933 -20.106785 4.248225
+v -1.765933 -20.106785 4.698225
+v -1.864846 -20.100958 4.698225
+v -1.914289 -20.097824 4.698225
+v -1.375088 -20.124014 4.248225
+v -1.914289 -20.097824 3.971944
+v -1.179540 -20.129171 4.248225
+v -1.570561 -20.116552 4.248225
+v -1.914289 -20.097824 3.798229
+v -1.669536 -20.111893 3.798234
+v -1.424602 -20.122343 3.798234
+v -1.179540 -20.129171 3.798225
+v -5.491392 -14.551296 3.798225
+v -6.834221 -11.532094 3.798234
+v -6.318138 -11.341788 3.798225
+v -4.925278 -14.450396 3.798225
+v -3.845614 -17.416639 3.798225
+v -3.205745 -17.390924 3.798225
+v -6.318138 -11.341788 4.248225
+v -4.925278 -14.450396 4.248225
+v -3.205745 -17.390924 4.248225
+v -6.731004 -11.494033 4.248225
+v -5.377781 -14.532032 4.248225
+v -3.716787 -17.413307 4.248225
+v -6.731004 -11.494033 4.698225
+v -5.377781 -14.532032 4.698225
+v -3.716787 -17.413307 4.698225
+v -6.834221 -11.532094 4.698225
+v -5.491392 -14.551296 4.698225
+v -3.845614 -17.416639 4.698225
+v -6.834221 -11.532094 3.971944
+v -5.491392 -14.551296 3.971944
+v -3.845614 -17.416639 3.971944
+v -2.997820 -19.991699 4.871935
+v -2.946466 -19.998356 4.421935
+v -2.946466 -19.998356 4.871935
+v -3.049154 -19.984882 4.871935
+v -3.100466 -19.977905 4.871935
+v -2.540932 -20.045210 4.421935
+v -3.100466 -19.977905 4.145654
+v -2.337763 -20.064892 4.421935
+v -2.743843 -20.023029 4.421935
+v -3.100466 -19.977905 3.971939
+v -2.846689 -20.010822 3.971944
+v -2.592435 -20.039820 3.971944
+v -2.337763 -20.064892 3.971935
+v -6.387766 -14.685308 3.971935
+v -7.642250 -11.830054 3.971944
+v -7.126169 -11.639750 3.971935
+v -5.813813 -14.603216 3.971935
+v -4.869317 -17.409370 3.971935
+v -4.212352 -17.420969 3.971935
+v -7.126169 -11.639750 4.421935
+v -5.813813 -14.603216 4.421935
+v -4.212352 -17.420969 4.421935
+v -7.539033 -11.791993 4.421935
+v -6.272557 -14.669913 4.421935
+v -4.737022 -17.413729 4.421935
+v -7.539033 -11.791993 4.871935
+v -6.272557 -14.669913 4.871935
+v -4.737022 -17.413729 4.871935
+v -7.642250 -11.830054 4.871935
+v -6.387766 -14.685308 4.871935
+v -4.869317 -17.409370 4.871935
+v -7.642250 -11.830054 4.145654
+v -6.387766 -14.685308 4.145654
+v -4.869317 -17.409370 4.145654
+v -4.225321 -19.783522 5.045644
+v -4.171988 -19.794548 4.595644
+v -4.171988 -19.794548 5.045644
+v -4.278618 -19.772318 5.045644
+v -4.331878 -19.760941 5.045644
+v -3.751200 -19.875185 4.595644
+v -4.331878 -19.760941 4.319364
+v -3.540061 -19.911421 4.595644
+v -3.961854 -19.836226 4.595644
+v -4.331878 -19.760941 4.145649
+v -4.068763 -19.815374 4.145654
+v -3.804801 -19.865540 4.145654
+v -3.540061 -19.911421 4.145644
+v -7.297278 -14.786898 4.145644
+v -8.450274 -12.128014 4.145654
+v -7.934196 -11.937710 4.145644
+v -6.714802 -14.725967 4.145644
+v -5.921119 -17.337437 4.145644
+v -5.246003 -17.391289 4.145644
+v -7.934196 -11.937710 4.595644
+v -6.714802 -14.725967 4.595644
+v -5.246003 -17.391289 4.595644
+v -8.347058 -12.089952 4.595644
+v -7.180324 -14.775873 4.595644
+v -5.785131 -17.350534 4.595644
+v -8.347058 -12.089952 5.045644
+v -7.180324 -14.775873 5.045644
+v -5.785131 -17.350534 5.045644
+v -8.450274 -12.128014 5.045644
+v -7.297278 -14.786898 5.045644
+v -5.921119 -17.337437 5.045644
+v -8.450274 -12.128014 4.319364
+v -7.297278 -14.786898 4.319364
+v -5.921119 -17.337437 4.319364
+v -5.500087 -19.464588 5.219355
+v -5.444663 -19.480709 4.769355
+v -5.444663 -19.480709 5.219355
+v -5.555455 -19.448277 5.219355
+v -5.610765 -19.431770 5.219355
+v -5.007902 -19.600479 4.769355
+v -5.610765 -19.431770 4.493074
+v -4.788336 -19.655882 4.769355
+v -5.226691 -19.542084 4.769355
+v -5.610765 -19.431770 4.319360
+v -5.337915 -19.511168 4.319364
+v -5.063745 -19.585878 4.319364
+v -4.788336 -19.655882 4.319355
+v -8.221272 -14.851478 4.319355
+v -9.258295 -12.425971 4.319364
+v -8.742219 -12.235668 4.319355
+v -7.629371 -14.814783 4.319355
+v -7.003085 -17.191246 4.319355
+v -6.308434 -17.293772 4.319355
+v -8.742219 -12.235668 4.769355
+v -7.629371 -14.814783 4.769355
+v -6.308434 -17.293772 4.769355
+v -9.155080 -12.387911 4.769355
+v -8.102379 -14.845485 4.769355
+v -6.863108 -17.214464 4.769355
+v -9.155080 -12.387911 5.219355
+v -8.102379 -14.845485 5.219355
+v -6.863108 -17.214464 5.219355
+v -9.258295 -12.425971 5.219355
+v -8.221272 -14.851478 5.219355
+v -7.003085 -17.191246 5.219355
+v -9.258295 -12.425971 4.493074
+v -8.221272 -14.851478 4.493074
+v -7.003085 -17.191246 4.493074
+v -6.825024 -19.015253 5.393063
+v -6.767358 -19.037441 4.943063
+v -6.767358 -19.037441 5.393063
+v -6.882607 -18.992853 5.393063
+v -6.940105 -18.970236 5.393063
+v -6.313669 -19.203493 4.943063
+v -6.940106 -18.970236 4.666785
+v -6.085059 -19.281546 4.943063
+v -6.541118 -19.122118 4.943063
+v -6.940105 -18.970236 4.493069
+v -6.657004 -19.079214 4.493074
+v -6.371957 -19.182995 4.493074
+v -6.085059 -19.281546 4.493063
+v -9.161562 -14.872890 4.493063
+v -10.066314 -12.723928 4.493074
+v -9.550239 -12.533626 4.493063
+v -8.559011 -14.864582 4.493063
+v -8.117999 -16.957979 4.493063
+v -7.401935 -17.117817 4.493063
+v -9.550239 -12.533626 4.943063
+v -8.559011 -14.864582 4.943063
+v -7.401935 -17.117817 4.943063
+v -9.963099 -12.685867 4.943063
+v -9.040463 -14.872829 4.943063
+v -7.973624 -16.993185 4.943063
+v -9.963099 -12.685867 5.393063
+v -9.040463 -14.872829 5.393063
+v -7.973624 -16.993185 5.393063
+v -10.066313 -12.723927 5.393063
+v -9.161562 -14.872890 5.393063
+v -8.117999 -16.957979 5.393063
+v -10.066314 -12.723928 4.666785
+v -9.161562 -14.872890 4.666785
+v -8.117999 -16.957979 4.666785
+v -8.204156 -18.408304 5.566773
+v -8.144032 -18.437943 5.116773
+v -8.144032 -18.437943 5.566773
+v -8.264159 -18.378422 5.566773
+v -8.324041 -18.348299 5.566773
+v -7.672098 -18.660267 5.116773
+v -8.324041 -18.348299 4.840495
+v -7.433567 -18.765837 5.116773
+v -7.908939 -18.550961 5.116773
+v -8.324041 -18.348299 4.666779
+v -8.029987 -18.493338 4.666785
+v -7.733124 -18.632534 4.666785
+v -7.433567 -18.765837 4.666773
+v -10.120709 -14.842484 4.666773
+v -10.874329 -13.021883 4.666785
+v -10.358255 -12.831582 4.666773
+v -9.505768 -14.868443 4.666773
+v -9.269785 -16.619688 4.666773
+v -8.529640 -16.849026 4.666773
+v -10.358255 -12.831582 5.116773
+v -9.505768 -14.868443 5.116773
+v -8.529640 -16.849026 5.116773
+v -10.771113 -12.983823 5.116773
+v -9.997023 -14.849647 5.116773
+v -9.120425 -16.669561 5.116773
+v -10.771113 -12.983823 5.566773
+v -9.997023 -14.849647 5.566773
+v -9.120425 -16.669561 5.566773
+v -10.874328 -13.021883 5.566773
+v -10.120709 -14.842484 5.566773
+v -9.269785 -16.619688 5.566773
+v -10.874329 -13.021883 4.840495
+v -10.120709 -14.842484 4.840495
+v -9.269785 -16.619688 4.840495
+v -9.643402 -17.603725 5.740482
+v -9.580489 -17.642927 5.290482
+v -9.580489 -17.642927 5.740482
+v -9.706141 -17.564243 5.740482
+v -9.768701 -17.524481 5.740482
+v -9.462691 -17.715284 4.840495
+v -9.335700 -17.791788 5.290482
+v -9.768701 -17.524481 4.840495
+v -9.152607 -17.899393 4.840495
+v -9.088376 -17.936398 5.290482
+v -8.838593 -18.076715 4.840482
+v -8.838593 -18.076715 5.290482
+v -11.102554 -14.747344 4.840495
+v -11.682341 -13.319838 4.840495
+v -11.166269 -13.129537 4.840482
+v -10.472580 -14.816446 4.840482
+v -10.464312 -16.149689 4.840495
+v -9.696051 -16.466860 4.840482
+v -11.166269 -13.129537 5.290482
+v -10.472580 -14.816446 5.290482
+v -9.696051 -16.466860 5.290482
+v -11.579126 -13.281777 5.290482
+v -10.975687 -14.763720 5.290482
+v -10.309063 -16.218332 5.290482
+v -11.579126 -13.281777 5.740482
+v -10.975687 -14.763720 5.740482
+v -10.309063 -16.218332 5.740482
+v -11.682341 -13.319838 5.740482
+v -11.102554 -14.747344 5.740482
+v -10.464312 -16.149689 5.740482
+v -12.244268 -11.390799 5.290482
+v -12.244268 -11.390799 5.740482
+v -12.347972 -11.427628 5.740482
+v -11.829451 -11.243480 4.840482
+v -11.829451 -11.243480 5.290482
+v -12.347972 -11.427628 4.840495
+v -12.347972 11.427628 5.740482
+v -13.940839 3.864515 4.840495
+v -13.940839 3.864515 5.740482
+v -13.940839 -3.864515 5.740482
+v -12.347972 11.427628 4.840495
+v -13.940839 -3.864515 4.840495
+v -12.244268 11.390799 5.740482
+v -13.831545 3.852029 5.740482
+v -13.831545 -3.852029 5.740482
+v -12.244268 11.390799 5.290482
+v -13.831545 3.852029 5.290482
+v -13.831545 -3.852029 5.290482
+v -11.829451 11.243480 5.290482
+v -13.394366 3.802083 5.290482
+v -13.394366 -3.802083 5.290482
+v -11.829451 11.243480 4.840482
+v -13.394366 3.802083 4.840482
+v -13.394366 -3.802083 4.840482
+v -11.432415 -11.102477 5.116773
+v -11.432415 -11.102477 5.566773
+v -11.536120 -11.139307 5.566773
+v -11.017589 -10.955155 4.666773
+v -11.017589 -10.955155 5.116773
+v -11.536120 -11.139307 4.840495
+v -11.536120 -11.139307 4.666785
+v -11.536120 11.139307 5.566773
+v -13.085226 3.766766 5.566773
+v -11.432415 11.102477 5.566773
+v -12.975931 3.754279 5.566773
+v -13.085226 -3.766766 5.566773
+v -12.975931 -3.754279 5.566773
+v -11.432415 11.102477 5.116773
+v -12.975931 3.754279 5.116773
+v -12.975931 -3.754279 5.116773
+v -11.017589 10.955155 5.116773
+v -12.538752 3.704334 5.116773
+v -12.538752 -3.704334 5.116773
+v -11.017589 10.955155 4.666773
+v -12.538752 3.704334 4.666773
+v -12.538752 -3.704334 4.666773
+v -13.085226 3.766766 4.666773
+v -11.536120 11.139307 4.666785
+v -13.085226 -3.766766 4.666773
+v -11.536120 11.139307 4.840495
+v -13.085226 3.766766 4.840495
+v -13.085226 -3.766766 4.840495
+v -10.620543 -10.814148 4.943063
+v -10.620543 -10.814148 5.393063
+v -10.724251 -10.850980 5.393063
+v -10.205707 -10.666823 4.493063
+v -10.205707 -10.666823 4.943063
+v -10.724252 -10.850980 4.666785
+v -10.724252 -10.850980 4.493074
+v -10.724251 10.850980 5.393063
+v -12.229610 3.669016 5.393063
+v -10.620543 10.814148 5.393063
+v -12.120316 3.656529 5.393063
+v -12.229610 -3.669016 5.393063
+v -12.120316 -3.656529 5.393063
+v -10.620543 10.814148 4.943063
+v -12.120316 3.656529 4.943063
+v -12.120316 -3.656529 4.943063
+v -10.205707 10.666823 4.943063
+v -11.683135 3.606584 4.943063
+v -11.683135 -3.606584 4.943063
+v -10.205707 10.666823 4.493063
+v -11.683135 3.606584 4.493063
+v -11.683135 -3.606584 4.493063
+v -12.229610 3.669016 4.493063
+v -10.724252 10.850980 4.493074
+v -12.229610 -3.669016 4.493063
+v -10.724252 10.850980 4.666785
+v -12.229611 3.669016 4.666785
+v -12.229611 -3.669016 4.666785
+v -9.808652 -10.525813 4.769355
+v -9.808652 -10.525813 5.219355
+v -9.912362 -10.562645 5.219355
+v -9.393805 -10.378485 4.319355
+v -9.393805 -10.378485 4.769355
+v -9.912363 -10.562645 4.493074
+v -9.912363 -10.562645 4.319364
+v -9.912362 10.562645 5.219355
+v -11.373993 3.571266 5.219355
+v -9.808652 10.525813 5.219355
+v -11.264698 3.558779 5.219355
+v -11.373993 -3.571266 5.219355
+v -11.264698 -3.558779 5.219355
+v -9.808652 10.525813 4.769355
+v -11.264698 3.558779 4.769355
+v -11.264698 -3.558779 4.769355
+v -9.393805 10.378485 4.769355
+v -10.827516 3.508833 4.769355
+v -10.827516 -3.508833 4.769355
+v -9.393805 10.378485 4.319355
+v -10.827516 3.508833 4.319355
+v -10.827516 -3.508833 4.319355
+v -11.373993 3.571266 4.319355
+v -9.912363 10.562645 4.319364
+v -11.373993 -3.571266 4.319355
+v -9.912363 10.562645 4.493074
+v -11.373994 3.571266 4.493074
+v -11.373994 -3.571266 4.493074
+v -8.996739 -10.237471 4.595644
+v -8.996739 -10.237471 5.045644
+v -9.100453 -10.274303 5.045644
+v -8.581882 -10.090137 4.145644
+v -8.581882 -10.090137 4.595644
+v -9.100453 -10.274303 4.319364
+v -9.100453 -10.274303 4.145654
+v -9.100453 10.274303 5.045644
+v -10.518373 3.473515 5.045644
+v -8.996739 10.237471 5.045644
+v -10.409078 3.461028 5.045644
+v -10.409078 -3.461028 5.045644
+v -10.518373 -3.473515 5.045644
+v -8.996739 10.237471 4.595644
+v -10.409078 3.461028 4.595644
+v -10.409078 -3.461028 4.595644
+v -8.581882 10.090137 4.595644
+v -9.971894 3.411082 4.595644
+v -9.971894 -3.411082 4.595644
+v -8.581882 10.090137 4.145644
+v -9.971894 3.411082 4.145644
+v -9.971894 -3.411082 4.145644
+v -10.518373 3.473515 4.145644
+v -9.100453 10.274303 4.145654
+v -10.518373 -3.473515 4.145644
+v -9.100453 10.274303 4.319364
+v -10.518373 3.473515 4.319364
+v -10.518373 -3.473515 4.319364
+v -8.184805 -9.949120 4.421935
+v -8.184805 -9.949120 4.871935
+v -8.288521 -9.985954 4.871935
+v -7.769934 -9.801783 3.971935
+v -7.769934 -9.801783 4.421935
+v -8.288521 -9.985954 4.145654
+v -8.288521 -9.985954 3.971944
+v -8.288521 9.985954 4.871935
+v -9.662751 3.375764 4.871935
+v -8.184805 9.949120 4.871935
+v -9.553454 3.363277 4.871935
+v -9.662751 -3.375764 4.871935
+v -9.553454 -3.363277 4.871935
+v -8.184805 9.949120 4.421935
+v -9.553454 3.363277 4.421935
+v -9.553454 -3.363277 4.421935
+v -7.769934 9.801783 4.421935
+v -9.116270 3.313330 4.421935
+v -9.116270 -3.313330 4.421935
+v -7.769934 9.801783 3.971935
+v -9.116270 3.313330 3.971935
+v -9.116270 -3.313330 3.971935
+v -9.662751 3.375764 3.971935
+v -8.288521 9.985954 3.971944
+v -9.662751 -3.375764 3.971935
+v -8.288521 9.985954 4.145654
+v -9.662751 3.375764 4.145654
+v -9.662751 -3.375764 4.145654
+v -7.372845 -9.660761 4.248225
+v -7.372845 -9.660761 4.698225
+v -7.476565 -9.697596 4.698225
+v -6.957962 -9.513419 3.798225
+v -6.957962 -9.513419 4.248225
+v -7.476565 -9.697596 3.971944
+v -7.476565 -9.697596 3.798234
+v -7.476565 9.697596 4.698225
+v -8.807125 3.278012 4.698225
+v -7.372845 9.660761 4.698225
+v -8.697829 3.265525 4.698225
+v -8.807125 -3.278012 4.698225
+v -8.697829 -3.265525 4.698225
+v -7.372845 9.660761 4.248225
+v -8.697829 3.265525 4.248225
+v -8.697829 -3.265525 4.248225
+v -6.957962 9.513419 4.248225
+v -8.260643 3.215578 4.248225
+v -8.260643 -3.215578 4.248225
+v -6.957962 9.513419 3.798225
+v -8.260643 3.215578 3.798225
+v -8.260643 -3.215578 3.798225
+v -8.807125 3.278012 3.798225
+v -7.476565 9.697596 3.798234
+v -8.807125 -3.278012 3.798225
+v -7.476565 9.697596 3.971944
+v -8.807126 3.278012 3.971944
+v -8.807126 -3.278012 3.971944
+v -6.560859 -9.372392 4.074516
+v -6.560859 -9.372392 4.524516
+v -6.664583 -9.409228 4.524516
+v -6.145961 -9.225045 3.624516
+v -6.145961 -9.225045 4.074516
+v -6.664583 -9.409228 3.798234
+v -6.664583 -9.409228 3.624523
+v -6.664583 9.409228 4.524516
+v -7.951497 3.180259 4.524516
+v -6.560859 9.372392 4.524516
+v -7.842200 3.167773 4.524516
+v -7.842200 -3.167773 4.524516
+v -7.951497 -3.180259 4.524516
+v -6.560859 9.372392 4.074516
+v -7.842200 3.167773 4.074516
+v -7.842200 -3.167773 4.074516
+v -6.145961 9.225045 4.074516
+v -7.405013 3.117825 4.074516
+v -7.405013 -3.117825 4.074516
+v -6.145961 9.225045 3.624516
+v -7.405013 3.117825 3.624516
+v -7.405013 -3.117825 3.624516
+v -7.951497 3.180259 3.624516
+v -6.664583 9.409228 3.624523
+v -7.951497 -3.180259 3.624516
+v -6.664583 9.409228 3.798234
+v -7.951497 3.180259 3.798234
+v -7.951497 -3.180259 3.798234
+v -5.748845 -9.084013 3.900806
+v -5.748845 -9.084013 4.350806
+v -5.852572 -9.120851 4.350806
+v -5.333931 -8.936661 3.450806
+v -5.333931 -8.936661 3.900806
+v -5.852572 -9.120851 3.624523
+v -5.852572 -9.120851 3.450813
+v -5.852572 9.120851 4.350806
+v -7.095866 3.082506 4.350806
+v -5.748845 9.084013 4.350806
+v -6.986568 3.070019 4.350806
+v -6.986568 -3.070019 4.350806
+v -7.095866 -3.082506 4.350806
+v -5.748845 9.084013 3.900806
+v -6.986568 3.070019 3.900806
+v -6.986568 -3.070019 3.900806
+v -5.333931 8.936661 3.900806
+v -6.549378 3.020072 3.900806
+v -6.549378 -3.020072 3.900806
+v -5.333931 8.936661 3.450806
+v -6.549378 3.020072 3.450806
+v -6.549378 -3.020072 3.450806
+v -7.095866 3.082506 3.450806
+v -5.852572 9.120851 3.450813
+v -7.095866 -3.082506 3.450806
+v -5.852572 9.120851 3.624523
+v -7.095866 3.082506 3.624523
+v -7.095866 -3.082506 3.624523
+v -4.936799 -8.795623 3.727097
+v -4.936799 -8.795623 4.177097
+v -5.040530 -8.832462 4.177097
+v -4.521868 -8.648264 3.277097
+v -4.521868 -8.648264 3.727097
+v -5.040530 -8.832462 3.450813
+v -5.040530 -8.832462 3.277103
+v -5.040530 8.832462 4.177097
+v -6.240230 2.984752 4.177097
+v -4.936799 8.795623 4.177097
+v -6.130932 2.972265 4.177097
+v -6.240230 -2.984752 4.177097
+v -6.130932 -2.972265 4.177097
+v -4.936799 8.795623 3.727097
+v -6.130932 2.972265 3.727097
+v -6.130932 -2.972265 3.727097
+v -4.521868 8.648264 3.727097
+v -5.693741 2.922317 3.727097
+v -5.693741 -2.922317 3.727097
+v -4.521868 8.648264 3.277097
+v -5.693741 2.922317 3.277097
+v -5.693741 -2.922317 3.277097
+v -6.240230 2.984752 3.277097
+v -5.040530 8.832462 3.277103
+v -6.240230 -2.984752 3.277097
+v -5.040530 8.832462 3.450813
+v -6.240230 2.984752 3.450813
+v -6.240230 -2.984752 3.450813
+v -4.124719 -8.507220 3.553387
+v -4.124719 -8.507220 4.003387
+v -4.228455 -8.544062 4.003387
+v -3.709769 -8.359856 3.103387
+v -3.709769 -8.359856 3.553387
+v -4.228455 -8.544062 3.277103
+v -4.228455 -8.544062 3.103392
+v -5.384591 2.886998 3.103387
+v -4.228455 8.544062 3.103392
+v -3.709769 8.359856 3.103387
+v -4.838099 2.824562 3.103387
+v -4.838099 -2.824562 3.103387
+v -5.384591 -2.886998 3.103387
+v -4.228455 8.544062 4.003387
+v -5.384591 2.886998 4.003387
+v -4.124719 8.507220 4.003387
+v -5.275293 2.874511 4.003387
+v -5.275293 -2.874511 4.003387
+v -5.384591 -2.886998 4.003387
+v -4.124719 8.507220 3.553387
+v -5.275293 2.874511 3.553387
+v -5.275293 -2.874511 3.553387
+v -3.709769 8.359856 3.553387
+v -4.838099 2.824562 3.553387
+v -4.838099 -2.824562 3.553387
+v -4.228455 8.544062 3.277103
+v -5.384591 2.886998 3.277103
+v -5.384591 -2.886998 3.277103
+v -3.312602 -8.218805 3.379678
+v -3.312602 -8.218805 3.829678
+v -3.416342 -8.255648 3.829678
+v -2.897632 -8.071433 2.929678
+v -2.897632 -8.071433 3.379678
+v -3.416342 -8.255648 3.103392
+v -3.416342 -8.255648 2.929682
+v -4.528948 2.789242 2.929678
+v -3.416342 8.255648 2.929682
+v -2.897632 8.071433 2.929678
+v -3.982453 2.726806 2.929678
+v -4.528948 -2.789242 2.929678
+v -3.982453 -2.726806 2.929678
+v -3.416342 8.255648 3.829678
+v -4.528948 2.789242 3.829678
+v -3.312602 8.218805 3.829678
+v -4.419649 2.776755 3.829678
+v -4.419649 -2.776755 3.829678
+v -4.528948 -2.789242 3.829678
+v -3.312602 8.218805 3.379678
+v -4.419649 2.776755 3.379678
+v -4.419649 -2.776755 3.379678
+v -2.897632 8.071433 3.379678
+v -3.982453 2.726806 3.379678
+v -3.982453 -2.726806 3.379678
+v -3.416342 8.255648 3.103392
+v -4.528948 2.789242 3.103392
+v -4.528948 -2.789242 3.103392
+v -2.500443 -7.930375 3.205968
+v -2.500443 -7.930375 3.655968
+v -2.604190 -7.967220 3.655968
+v -2.085451 -7.782995 2.755968
+v -2.085451 -7.782995 3.205968
+v -2.604190 -7.967220 2.929682
+v -2.604190 -7.967220 2.755972
+v -3.673300 2.691485 2.755968
+v -2.604190 7.967220 2.755972
+v -2.085451 7.782995 2.755968
+v -3.126801 2.629048 2.755968
+v -3.126801 -2.629048 2.755968
+v -3.673300 -2.691485 2.755968
+v -2.604190 7.967220 3.655968
+v -3.673300 2.691485 3.655968
+v -2.500443 7.930375 3.655968
+v -3.564000 2.678998 3.655968
+v -3.673300 -2.691485 3.655968
+v -3.564000 -2.678998 3.655968
+v -2.500443 7.930375 3.205968
+v -3.564000 2.678998 3.205968
+v -3.564000 -2.678998 3.205968
+v -2.085451 7.782995 3.205968
+v -3.126801 2.629048 3.205968
+v -3.126801 -2.629048 3.205968
+v -2.604190 7.967220 2.929682
+v -3.673300 2.691485 2.929682
+v -3.673300 -2.691485 2.929682
+v -1.688240 -7.641929 3.032259
+v -1.688240 -7.641929 3.482259
+v -1.791993 -7.678776 3.482259
+v -1.273223 -7.494540 2.582259
+v -1.273223 -7.494540 3.032259
+v -1.791993 -7.678776 2.755972
+v -1.791993 -7.678776 2.582262
+v -2.817646 2.593727 2.582259
+v -1.791993 7.678776 2.582262
+v -1.273223 7.494540 2.582259
+v -2.271145 2.531289 2.582259
+v -2.271145 -2.531289 2.582259
+v -2.817646 -2.593727 2.582259
+v -1.791993 7.678776 3.482259
+v -2.817646 2.593727 3.482259
+v -1.688240 7.641929 3.482259
+v -2.708346 2.581240 3.482259
+v -2.708346 -2.581240 3.482259
+v -2.817646 -2.593727 3.482259
+v -1.688240 7.641929 3.032259
+v -2.708346 2.581240 3.032259
+v -2.708346 -2.581240 3.032259
+v -1.273223 7.494540 3.032259
+v -2.271145 2.531289 3.032259
+v -2.271145 -2.531289 3.032259
+v -1.791993 7.678776 2.755972
+v -2.817646 2.593727 2.755972
+v -2.817646 -2.593727 2.755972
+v -0.875988 -7.353466 2.858549
+v -0.875988 -7.353466 3.308549
+v -0.979746 -7.390315 3.308549
+v -0.460943 -7.206067 2.408549
+v -0.460943 -7.206067 2.858549
+v -0.979746 -7.390315 2.582262
+v -0.979746 -7.390315 2.408551
+v -1.961987 2.495968 2.408549
+v -0.979746 7.390315 2.408551
+v -0.460943 7.206067 2.408549
+v -1.415482 2.433529 2.408549
+v -1.961987 -2.495968 2.408549
+v -1.415482 -2.433529 2.408549
+v -0.979746 7.390315 3.308549
+v -1.961987 2.495968 3.308549
+v -0.875988 7.353466 3.308549
+v -1.852686 2.483480 3.308549
+v -1.852686 -2.483480 3.308549
+v -1.961987 -2.495968 3.308549
+v -0.875988 7.353466 2.858549
+v -1.852686 2.483480 2.858549
+v -1.852686 -2.483480 2.858549
+v -0.460943 7.206067 2.858549
+v -1.415482 2.433529 2.858549
+v -1.415482 -2.433529 2.858549
+v -0.979746 7.390315 2.582262
+v -1.961987 2.495968 2.582262
+v -1.961987 -2.495968 2.582262
+v -0.063680 -7.064983 2.684840
+v -0.063680 -7.064983 3.134840
+v -0.167446 -7.101834 3.134840
+v 0.351395 -6.917573 2.234840
+v 0.351395 -6.917573 2.684840
+v -0.167446 -7.101834 2.408551
+v -0.167446 -7.101834 2.234841
+v -1.106322 2.398207 2.234840
+v -0.167446 7.101834 2.234841
+v 0.351395 6.917573 2.234840
+v -0.559812 2.335768 2.234840
+v -0.559812 -2.335768 2.234840
+v -1.106322 -2.398207 2.234840
+v -0.167446 7.101834 3.134840
+v -1.106322 2.398207 3.134840
+v -0.063680 7.064983 3.134840
+v -0.997020 2.385720 3.134840
+v -0.997020 -2.385720 3.134840
+v -1.106322 -2.398207 3.134840
+v -0.063680 7.064983 2.684840
+v -0.997020 2.385720 2.684840
+v -0.997020 -2.385720 2.684840
+v 0.351395 6.917573 2.684840
+v -0.559812 2.335768 2.684840
+v -0.559812 -2.335768 2.684840
+v -0.167446 7.101834 2.408551
+v -1.106322 2.398207 2.408551
+v -1.106322 -2.398207 2.408551
+v 0.748689 -6.776478 2.511130
+v 0.748689 -6.776478 2.961130
+v 0.644914 -6.813333 2.961130
+v 1.163797 -6.629056 2.061130
+v 1.163797 -6.629056 2.511130
+v 0.644914 -6.813333 2.234841
+v 0.644914 -6.813333 2.061131
+v -0.250650 2.300445 2.061130
+v 0.644914 6.813333 2.061131
+v 1.163797 6.629056 2.061130
+v 0.295865 2.238004 2.061130
+v -0.250650 -2.300445 2.061130
+v 0.295865 -2.238004 2.061130
+v 0.644914 6.813333 2.961130
+v -0.250650 2.300445 2.961130
+v 0.748689 6.776478 2.961130
+v -0.141347 2.287957 2.961130
+v -0.250650 -2.300445 2.961130
+v -0.141347 -2.287957 2.961130
+v 0.748689 6.776478 2.511130
+v -0.141347 2.287957 2.511130
+v -0.141347 -2.287957 2.511130
+v 1.163797 6.629056 2.511130
+v 0.295865 2.238004 2.511130
+v 0.295865 -2.238004 2.511130
+v 0.644914 6.813333 2.234841
+v -0.250650 2.300445 2.234841
+v -0.250650 -2.300445 2.234841
+v 1.561125 -6.487949 2.337421
+v 1.561125 -6.487949 2.787421
+v 1.457342 -6.524807 2.787421
+v 1.976271 -6.340514 1.887421
+v 1.976271 -6.340514 2.337421
+v 1.457342 -6.524807 2.061131
+v 1.457342 -6.524807 1.887421
+v 0.605030 2.202681 1.887421
+v 1.457342 6.524807 1.887421
+v 1.976271 6.340514 1.887421
+v 1.151550 2.140238 1.887421
+v 0.605030 -2.202681 1.887421
+v 1.151550 -2.140238 1.887421
+v 1.457342 6.524807 2.787421
+v 0.605030 2.202681 2.787421
+v 1.561125 6.487949 2.787421
+v 0.714334 2.190192 2.787421
+v 0.605030 -2.202681 2.787421
+v 0.714334 -2.190192 2.787421
+v 1.561125 6.487949 2.337421
+v 0.714334 2.190192 2.337421
+v 0.714334 -2.190192 2.337421
+v 1.976271 6.340514 2.337421
+v 1.151550 2.140238 2.337421
+v 1.151550 -2.140238 2.337421
+v 1.457342 6.524807 2.061131
+v 0.605030 2.202681 2.061131
+v 0.605030 -2.202681 2.061131
+v 2.269844 -6.236255 1.713710
+v 2.270647 -6.235970 1.713869
+v 2.270380 -6.236064 1.714027
+v 2.269844 -6.236255 1.714342
+v 2.270915 -6.235874 1.713711
+v 1.460718 2.104914 1.713710
+v 2.269844 6.236255 1.713710
+v 2.270915 6.235874 1.713711
+v 1.461846 2.104785 1.713711
+v 1.460718 -2.104914 1.713710
+v 1.461846 -2.104785 1.713711
+v 1.460718 2.104914 1.714342
+v 2.269844 6.236255 1.714342
+v 1.460718 -2.104914 1.714342
+v 2.270112 6.236159 1.714185
+v 2.270380 6.236064 1.714027
+v 2.374709 -6.199013 2.163711
+v 2.374709 -6.199013 2.613711
+v 2.270915 -6.235874 2.613711
+v 2.789897 -6.051563 1.713710
+v 2.789897 -6.051563 2.163711
+v 2.789897 6.051563 1.713710
+v 2.008373 2.042341 1.713710
+v 2.008373 -2.042341 1.713710
+v 2.270915 6.235874 2.613711
+v 1.461846 2.104785 2.613711
+v 1.461846 -2.104785 2.613711
+v 2.374709 6.199013 2.613711
+v 1.571151 2.092297 2.613711
+v 1.571151 -2.092297 2.613711
+v 2.374709 6.199013 2.163711
+v 1.571151 2.092297 2.163711
+v 1.571151 -2.092297 2.163711
+v 2.789897 6.051563 2.163711
+v 2.008373 2.042341 2.163711
+v 2.008373 -2.042341 2.163711
+v -9.706141 17.564243 5.740482
+v -9.580489 17.642927 5.290482
+v -9.768701 17.524481 5.740482
+v -9.643402 17.603725 5.740482
+v -9.580489 17.642927 5.740482
+v -8.838593 18.076715 5.290482
+v -8.838593 18.076715 4.840482
+v -9.088376 17.936398 5.290482
+v -9.152607 17.899393 4.840495
+v -9.335700 17.791788 5.290482
+v -9.462691 17.715284 4.840495
+v -9.768701 17.524481 4.840495
+v -10.464312 16.149689 4.840495
+v -10.464312 16.149689 5.740482
+v -11.102554 14.747344 4.840495
+v -11.102554 14.747344 5.740482
+v -11.682341 13.319838 4.840495
+v -11.682341 13.319838 5.740482
+v -10.309063 16.218332 5.740482
+v -10.975687 14.763720 5.740482
+v -11.579126 13.281777 5.740482
+v -10.309063 16.218332 5.290482
+v -10.975687 14.763720 5.290482
+v -11.579126 13.281777 5.290482
+v -9.696051 16.466860 5.290482
+v -10.472580 14.816446 5.290482
+v -11.166269 13.129537 5.290482
+v -9.696051 16.466860 4.840482
+v -10.472580 14.816446 4.840482
+v -11.166269 13.129537 4.840482
+v -8.264159 18.378422 5.566773
+v -8.144032 18.437943 5.116773
+v -8.324041 18.348299 5.566773
+v -8.204156 18.408304 5.566773
+v -8.144032 18.437943 5.566773
+v -7.908939 18.550961 5.116773
+v -8.324041 18.348299 4.840495
+v -7.672098 18.660267 5.116773
+v -7.433567 18.765837 5.116773
+v -7.433567 18.765837 4.666773
+v -7.733124 18.632534 4.666785
+v -8.029987 18.493338 4.666785
+v -8.324041 18.348299 4.666779
+v -9.120425 16.669561 5.566773
+v -9.269785 16.619688 5.566773
+v -9.997023 14.849647 5.566773
+v -10.120709 14.842484 5.566773
+v -10.771113 12.983823 5.566773
+v -10.874328 13.021883 5.566773
+v -9.120425 16.669561 5.116773
+v -9.997023 14.849647 5.116773
+v -10.771113 12.983823 5.116773
+v -8.529640 16.849026 5.116773
+v -9.505768 14.868443 5.116773
+v -10.358255 12.831582 5.116773
+v -8.529640 16.849026 4.666773
+v -9.505768 14.868443 4.666773
+v -10.358255 12.831582 4.666773
+v -9.269785 16.619688 4.666773
+v -10.120709 14.842484 4.666773
+v -10.874329 13.021884 4.666785
+v -10.874329 13.021884 4.840495
+v -9.269785 16.619688 4.840495
+v -10.120709 14.842484 4.840495
+v -6.882607 18.992853 5.393063
+v -6.767358 19.037441 4.943063
+v -6.940105 18.970236 5.393063
+v -6.825024 19.015253 5.393063
+v -6.767358 19.037441 5.393063
+v -6.541118 19.122118 4.943063
+v -6.940106 18.970236 4.666785
+v -6.313669 19.203493 4.943063
+v -6.085059 19.281546 4.943063
+v -6.085059 19.281546 4.493063
+v -6.371957 19.182995 4.493074
+v -6.657004 19.079214 4.493074
+v -6.940105 18.970236 4.493069
+v -7.973624 16.993185 5.393063
+v -8.117999 16.957979 5.393063
+v -9.040463 14.872829 5.393063
+v -9.161562 14.872890 5.393063
+v -9.963099 12.685867 5.393063
+v -10.066313 12.723928 5.393063
+v -7.973624 16.993185 4.943063
+v -9.040463 14.872829 4.943063
+v -9.963099 12.685867 4.943063
+v -7.401935 17.117817 4.943063
+v -8.559011 14.864582 4.943063
+v -9.550239 12.533626 4.943063
+v -7.401935 17.117817 4.493063
+v -8.559011 14.864582 4.493063
+v -9.550239 12.533626 4.493063
+v -8.117999 16.957979 4.493063
+v -9.161562 14.872890 4.493063
+v -10.066313 12.723928 4.493074
+v -10.066313 12.723928 4.666785
+v -8.117999 16.957979 4.666785
+v -9.161562 14.872890 4.666785
+v -5.555455 19.448277 5.219355
+v -5.444663 19.480709 4.769355
+v -5.610765 19.431770 5.219355
+v -5.500087 19.464588 5.219355
+v -5.444663 19.480709 5.219355
+v -5.226691 19.542084 4.769355
+v -5.610765 19.431770 4.493074
+v -5.007902 19.600479 4.769355
+v -4.788336 19.655882 4.769355
+v -4.788336 19.655882 4.319355
+v -5.063745 19.585878 4.319364
+v -5.337915 19.511168 4.319364
+v -5.610765 19.431770 4.319360
+v -6.863108 17.214464 5.219355
+v -7.003085 17.191246 5.219355
+v -8.102379 14.845485 5.219355
+v -8.221272 14.851478 5.219355
+v -9.155080 12.387911 5.219355
+v -9.258295 12.425971 5.219355
+v -6.863108 17.214464 4.769355
+v -8.102379 14.845485 4.769355
+v -9.155080 12.387911 4.769355
+v -6.308434 17.293772 4.769355
+v -7.629371 14.814783 4.769355
+v -8.742219 12.235668 4.769355
+v -6.308434 17.293772 4.319355
+v -7.629371 14.814783 4.319355
+v -8.742219 12.235668 4.319355
+v -7.003085 17.191246 4.319355
+v -8.221272 14.851478 4.319355
+v -9.258295 12.425971 4.319364
+v -9.258295 12.425971 4.493074
+v -7.003085 17.191246 4.493074
+v -8.221272 14.851478 4.493074
+v -4.278618 19.772318 5.045644
+v -4.171988 19.794548 4.595644
+v -4.331878 19.760941 5.045644
+v -4.225321 19.783522 5.045644
+v -4.171988 19.794548 5.045644
+v -3.961854 19.836226 4.595644
+v -4.331878 19.760941 4.319364
+v -3.751200 19.875185 4.595644
+v -3.540061 19.911421 4.595644
+v -3.540061 19.911421 4.145644
+v -3.804801 19.865540 4.145654
+v -4.068763 19.815374 4.145654
+v -4.331878 19.760941 4.145649
+v -5.785131 17.350534 5.045644
+v -5.921119 17.337437 5.045644
+v -7.180324 14.775874 5.045644
+v -7.297278 14.786898 5.045644
+v -8.347058 12.089953 5.045644
+v -8.450274 12.128014 5.045644
+v -5.785131 17.350534 4.595644
+v -7.180324 14.775874 4.595644
+v -8.347058 12.089953 4.595644
+v -5.246003 17.391289 4.595644
+v -6.714802 14.725968 4.595644
+v -7.934196 11.937710 4.595644
+v -5.246003 17.391289 4.145644
+v -6.714802 14.725968 4.145644
+v -7.934196 11.937710 4.145644
+v -5.921119 17.337437 4.145644
+v -7.297278 14.786898 4.145644
+v -8.450274 12.128014 4.145654
+v -8.450274 12.128014 4.319364
+v -5.921119 17.337437 4.319364
+v -7.297278 14.786898 4.319364
+v -3.049154 19.984882 4.871935
+v -2.946466 19.998356 4.421935
+v -3.100466 19.977905 4.871935
+v -2.997820 19.991699 4.871935
+v -2.946466 19.998356 4.871935
+v -2.743843 20.023029 4.421935
+v -3.100466 19.977905 4.145654
+v -2.540932 20.045210 4.421935
+v -2.337763 20.064892 4.421935
+v -2.337763 20.064892 3.971935
+v -2.592435 20.039820 3.971944
+v -2.846689 20.010822 3.971944
+v -3.100466 19.977905 3.971939
+v -4.737022 17.413729 4.871935
+v -4.869316 17.409370 4.871935
+v -6.272557 14.669913 4.871935
+v -6.387766 14.685308 4.871935
+v -7.539033 11.791994 4.871935
+v -7.642249 11.830054 4.871935
+v -4.737022 17.413729 4.421935
+v -6.272557 14.669913 4.421935
+v -7.539033 11.791994 4.421935
+v -4.212352 17.420969 4.421935
+v -5.813813 14.603216 4.421935
+v -7.126168 11.639750 4.421935
+v -4.212352 17.420969 3.971935
+v -5.813813 14.603216 3.971935
+v -7.126168 11.639750 3.971935
+v -4.869316 17.409370 3.971935
+v -6.387766 14.685308 3.971935
+v -7.642250 11.830054 3.971944
+v -7.642250 11.830054 4.145654
+v -4.869317 17.409370 4.145654
+v -6.387766 14.685308 4.145654
+v -1.864846 20.100958 4.698225
+v -1.765933 20.106785 4.248225
+v -1.914289 20.097824 4.698225
+v -1.815394 20.103945 4.698225
+v -1.765933 20.106785 4.698225
+v -1.570561 20.116552 4.248225
+v -1.914289 20.097824 3.971944
+v -1.375088 20.124014 4.248225
+v -1.179540 20.129171 4.248225
+v -1.179540 20.129171 3.798225
+v -1.424602 20.122343 3.798234
+v -1.669536 20.111893 3.798234
+v -1.914289 20.097824 3.798229
+v -3.716787 17.413307 4.698225
+v -3.845614 17.416639 4.698225
+v -5.377781 14.532032 4.698225
+v -5.491392 14.551296 4.698225
+v -6.731004 11.494033 4.698225
+v -6.834221 11.532094 4.698225
+v -3.716787 17.413307 4.248225
+v -5.377781 14.532032 4.248225
+v -6.731004 11.494033 4.248225
+v -3.205745 17.390924 4.248225
+v -4.925277 14.450396 4.248225
+v -6.318137 11.341788 4.248225
+v -3.205745 17.390924 3.798225
+v -4.925277 14.450396 3.798225
+v -6.318137 11.341788 3.798225
+v -3.845614 17.416639 3.798225
+v -5.491392 14.551296 3.798225
+v -6.834221 11.532094 3.798234
+v -6.834221 11.532094 3.971944
+v -3.845614 17.416639 3.971944
+v -5.491392 14.551296 3.971944
+v -0.723966 20.132238 4.524516
+v -0.628696 20.131298 4.074516
+v -0.771603 20.132504 4.524516
+v -0.676330 20.131836 4.524516
+v -0.628696 20.131298 4.524516
+v -0.440365 20.127829 4.074516
+v -0.771603 20.132504 3.798234
+v -0.252086 20.122219 4.074516
+v -0.063883 20.114473 4.074516
+v -0.063883 20.114473 3.624516
+v -0.299696 20.123840 3.624523
+v -0.535619 20.129850 3.624523
+v -0.771603 20.132504 3.624520
+v -2.722894 17.356468 4.524516
+v -2.848429 17.366661 4.524516
+v -4.495003 14.365653 4.524516
+v -4.607129 14.388393 4.524516
+v -5.922971 11.196071 4.524516
+v -6.026188 11.234132 4.524516
+v -2.722894 17.356468 4.074516
+v -4.495003 14.365653 4.074516
+v -5.922971 11.196071 4.074516
+v -2.224830 17.307549 4.074516
+v -4.048316 14.270542 4.074516
+v -5.510102 11.043825 4.074516
+v -2.224830 17.307549 3.624516
+v -4.048316 14.270542 3.624516
+v -5.510102 11.043825 3.624516
+v -2.848429 17.366661 3.624516
+v -4.607129 14.388393 3.624516
+v -6.026188 11.234132 3.624523
+v -6.026188 11.234132 3.798234
+v -2.848429 17.366661 3.798234
+v -4.607129 14.388393 3.798234
+v 0.374870 20.088089 4.350806
+v 0.466605 20.081097 3.900806
+v 0.328989 20.091396 4.350806
+v 0.420743 20.084656 4.350806
+v 0.466605 20.081097 4.350806
+v 0.648068 20.065754 3.900806
+v 0.328989 20.091396 3.624523
+v 0.829351 20.048420 3.900806
+v 1.010433 20.029097 3.900806
+v 1.010433 20.029097 3.450806
+v 0.783578 20.052986 3.450813
+v 0.556415 20.073753 3.450813
+v 0.328989 20.091396 3.450809
+v -1.754137 17.248953 4.350806
+v -1.876520 17.265339 4.350806
+v -3.623439 14.173496 4.350806
+v -3.734170 14.199397 4.350806
+v -5.114933 10.898108 4.350806
+v -5.218151 10.936169 4.350806
+v -1.754137 17.248953 3.900806
+v -3.623439 14.173496 3.900806
+v -5.114933 10.898108 3.900806
+v -1.268528 17.176003 3.900806
+v -3.182231 14.066091 3.900806
+v -4.702062 10.745861 3.900806
+v -1.268528 17.176003 3.450806
+v -3.182231 14.066091 3.450806
+v -4.702062 10.745861 3.450806
+v -1.876520 17.265339 3.450806
+v -3.734170 14.199397 3.450806
+v -5.218151 10.936169 3.450813
+v -5.218151 10.936169 3.624523
+v -1.876520 17.265339 3.624523
+v -3.734170 14.199397 3.624523
+v 1.432797 19.976183 4.177097
+v 1.521085 19.963728 3.727097
+v 1.388628 19.982233 4.177097
+v 1.476950 19.970016 4.177097
+v 1.521085 19.963728 4.177097
+v 1.695826 19.937647 3.727097
+v 1.388628 19.982233 3.450813
+v 1.870280 19.909706 3.727097
+v 2.044425 19.879910 3.727097
+v 2.044425 19.879910 3.277097
+v 1.826288 19.916933 3.277103
+v 1.607676 19.951042 3.277103
+v 1.388628 19.982233 3.277100
+v -0.809543 17.095442 4.177097
+v -0.928887 17.117472 4.177097
+v -2.762460 13.957765 4.177097
+v -2.871869 13.986568 4.177097
+v -4.306891 10.600142 4.177097
+v -4.410109 10.638204 4.177097
+v -0.809543 17.095442 3.727097
+v -2.762460 13.957765 3.727097
+v -4.306891 10.600142 3.727097
+v -0.335964 17.000528 3.727097
+v -2.326455 13.839036 3.727097
+v -3.894017 10.447894 3.727097
+v -0.335964 17.000528 3.277097
+v -2.326455 13.839036 3.277097
+v -3.894017 10.447894 3.277097
+v -0.928887 17.117472 3.277097
+v -2.871869 13.986568 3.277097
+v -4.410109 10.638204 3.277103
+v -4.410109 10.638204 3.450813
+v -0.928887 17.117472 3.450813
+v -2.871869 13.986568 3.450813
+v 2.450759 19.802919 4.003387
+v 2.535676 19.785498 3.553387
+v 2.408267 19.811462 4.003387
+v 2.493229 19.794264 4.003387
+v 2.535676 19.785498 4.003387
+v 2.703819 19.749636 3.553387
+v 2.408267 19.811462 3.277103
+v 2.871582 19.712034 3.553387
+v 3.038946 19.672693 3.553387
+v 3.038946 19.672693 3.103387
+v 2.829326 19.721678 3.103392
+v 2.619088 19.767937 3.103392
+v 2.408267 19.811462 3.103390
+v 0.573580 16.784676 3.103387
+v -0.004716 16.927031 3.103387
+v -1.480525 13.591036 3.103387
+v -2.019699 13.751770 3.103387
+v -3.085966 10.149925 3.103387
+v -3.602062 10.340236 3.103392
+v 0.111681 16.899815 4.003387
+v -0.004716 16.927031 4.003387
+v -1.911551 13.720277 4.003387
+v -2.019699 13.751770 4.003387
+v -3.498843 10.302174 4.003387
+v -3.602062 10.340236 4.003387
+v 0.111681 16.899815 3.553387
+v -1.911551 13.720277 3.553387
+v -3.498843 10.302174 3.553387
+v 0.573580 16.784676 3.553387
+v -1.480525 13.591036 3.553387
+v -3.085966 10.149925 3.553387
+v -3.602062 10.340236 3.277103
+v -0.004716 16.927031 3.277103
+v -2.019699 13.751770 3.277103
+v 3.429558 19.573706 3.829678
+v 3.511165 19.551744 3.379678
+v 3.388712 19.584532 3.829678
+v 3.470375 19.562777 3.829678
+v 3.511165 19.551744 3.829678
+v 3.672819 19.506920 3.379678
+v 3.388712 19.584532 3.103392
+v 3.834010 19.460463 3.379678
+v 3.994724 19.412378 3.379678
+v 3.994724 19.412378 2.929678
+v 3.793452 19.472319 2.929682
+v 3.591437 19.529705 2.929682
+v 3.388712 19.584532 2.929680
+v 1.460704 16.531446 2.929678
+v 0.896664 16.697351 2.929678
+v -0.644053 13.323486 2.929678
+v -1.177227 13.496557 2.929678
+v -2.277909 9.851954 2.929678
+v -2.794009 10.042266 2.929682
+v 1.010193 16.665337 3.829678
+v 0.896664 16.697351 3.829678
+v -1.070291 13.462556 3.829678
+v -1.177227 13.496557 3.829678
+v -2.690789 10.004204 3.829678
+v -2.794009 10.042266 3.829678
+v 1.010193 16.665337 3.379678
+v -1.070291 13.462556 3.379678
+v -2.690789 10.004204 3.379678
+v 1.460704 16.531446 3.379678
+v -0.644053 13.323486 3.379678
+v -2.277909 9.851954 3.379678
+v -2.794009 10.042266 3.103392
+v 0.896664 16.697351 3.103392
+v -1.177227 13.496557 3.103392
+v 4.369876 19.293180 3.655968
+v 4.448230 19.267040 3.205968
+v 4.330650 19.306105 3.655968
+v 4.409069 19.280159 3.655968
+v 4.448230 19.267040 3.655968
+v 4.603486 19.213961 3.205968
+v 4.330650 19.306105 2.929682
+v 4.758210 19.159346 3.205968
+v 4.912386 19.103205 3.205968
+v 4.912386 19.103205 2.755968
+v 4.719316 19.173237 2.755972
+v 4.525394 19.240873 2.755972
+v 4.330650 19.306105 2.755970
+v 2.325910 16.243414 2.755968
+v 1.775815 16.431271 2.755968
+v 0.183284 13.037574 2.755968
+v -0.344091 13.222246 2.755968
+v -1.469845 9.553981 2.755968
+v -1.985950 9.744294 2.755972
+v 1.886540 16.394789 3.655968
+v 1.775815 16.431271 3.655968
+v -0.238323 13.185889 3.655968
+v -0.344091 13.222246 3.655968
+v -1.882729 9.706232 3.655968
+v -1.985950 9.744294 3.655968
+v 1.886540 16.394789 3.205968
+v -0.238323 13.185889 3.205968
+v -1.882729 9.706232 3.205968
+v 2.325910 16.243414 3.205968
+v 0.183284 13.037574 3.205968
+v -1.469845 9.553981 3.205968
+v -1.985950 9.744294 2.929682
+v 1.775815 16.431271 2.929682
+v -0.344091 13.222246 2.929682
+v 5.272306 18.965347 3.482259
+v 5.347454 18.935347 3.032259
+v 5.234678 18.980209 3.482259
+v 5.309899 18.950392 3.482259
+v 5.347454 18.935347 3.482259
+v 5.496395 18.874622 3.032259
+v 5.234678 18.980209 2.755972
+v 5.644741 18.812458 3.032259
+v 5.792476 18.748857 3.032259
+v 5.792476 18.748857 2.582259
+v 5.607484 18.828230 2.582262
+v 5.421542 18.905352 2.582262
+v 5.234678 18.980209 2.582260
+v 3.169622 15.922792 2.582259
+v 2.633210 16.131224 2.582259
+v 1.001758 12.734318 2.582259
+v 0.480015 12.929957 2.582259
+v -0.661774 9.256004 2.582259
+v -1.177883 9.446321 2.582262
+v 2.741186 16.090561 3.482259
+v 2.633210 16.131224 3.482259
+v 0.584648 12.891377 3.482259
+v 0.480015 12.929957 3.482259
+v -1.074662 9.408257 3.482259
+v -1.177883 9.446321 3.482259
+v 2.741186 16.090561 3.032259
+v 0.584648 12.891377 3.032259
+v -1.074662 9.408257 3.032259
+v 3.169622 15.922792 3.032259
+v 1.001758 12.734318 3.032259
+v -0.661774 9.256004 3.032259
+v -1.177883 9.446321 2.755972
+v 2.633210 16.131224 2.755972
+v 0.480015 12.929957 2.755972
+v 6.137365 18.593691 3.308549
+v 6.209347 18.560106 2.858549
+v 6.101314 18.610355 3.308549
+v 6.173376 18.576942 3.308549
+v 6.209347 18.560106 3.308549
+v 6.352045 18.492275 2.858549
+v 6.101314 18.610355 2.582262
+v 6.494090 18.423090 2.858549
+v 6.635470 18.352554 2.858549
+v 6.635470 18.352554 2.408549
+v 6.458446 18.440609 2.408551
+v 6.280386 18.526546 2.408551
+v 6.101314 18.610355 2.408550
+v 3.992201 15.571507 2.408549
+v 3.469248 15.799315 2.408549
+v 1.811601 12.414598 2.408549
+v 1.295346 12.620658 2.408549
+v 0.146305 8.958026 2.408549
+v -0.369809 9.148343 2.408551
+v 3.574522 15.754720 3.308549
+v 3.469248 15.799315 3.308549
+v 1.398875 12.579967 3.308549
+v 1.295346 12.620658 3.308549
+v -0.266587 9.110279 3.308549
+v -0.369809 9.148343 3.308549
+v 3.574522 15.754720 2.858549
+v 1.398875 12.579967 2.858549
+v -0.266587 9.110279 2.858549
+v 3.992201 15.571507 2.858549
+v 1.811601 12.414598 2.858549
+v 0.146305 8.958026 2.858549
+v -0.369809 9.148343 2.582262
+v 3.469248 15.799315 2.582262
+v 1.295346 12.620658 2.582262
+v 6.965501 18.181263 3.134840
+v 7.034354 18.144333 2.684840
+v 6.931009 18.199606 3.134840
+v 6.999949 18.162838 3.134840
+v 7.034354 18.144333 3.134840
+v 7.170872 18.069868 2.684840
+v 6.931009 18.199606 2.408551
+v 7.306685 17.994125 2.684840
+v 7.441783 17.917114 2.684840
+v 7.441783 17.917114 2.234840
+v 7.272634 18.013273 2.234841
+v 7.102368 18.107441 2.234841
+v 6.931009 18.199606 2.234841
+v 4.793952 15.191233 2.234840
+v 4.284268 15.437375 2.234840
+v 2.613007 12.079172 2.234840
+v 2.102120 12.295180 2.234840
+v 0.954394 8.660043 2.234840
+v 0.438273 8.850363 2.234841
+v 4.386879 15.389062 3.134840
+v 4.284268 15.437375 3.134840
+v 2.204569 12.252478 3.134840
+v 2.102120 12.295180 3.134840
+v 0.541497 8.812299 3.134840
+v 0.438273 8.850363 3.134840
+v 4.386879 15.389062 2.684840
+v 2.204569 12.252478 2.684840
+v 0.541497 8.812299 2.684840
+v 4.793952 15.191233 2.684840
+v 2.613007 12.079172 2.684840
+v 0.954394 8.660043 2.684840
+v 0.438273 8.850363 2.408551
+v 4.284268 15.437375 2.408551
+v 2.102120 12.295180 2.408551
+v 7.757109 17.730732 2.961130
+v 7.822865 17.690670 2.511130
+v 7.724162 17.750648 2.961130
+v 7.790010 17.710739 2.961130
+v 7.822865 17.690670 2.961130
+v 7.953259 17.609980 2.511130
+v 7.724162 17.750648 2.234841
+v 8.082901 17.528090 2.511130
+v 8.211782 17.445002 2.511130
+v 8.211782 17.445002 2.061130
+v 8.050424 17.548761 2.061131
+v 7.887877 17.650648 2.061131
+v 7.724162 17.750648 2.061130
+v 5.575133 14.783429 2.061130
+v 5.078559 15.046996 2.061130
+v 3.406142 11.728702 2.061130
+v 2.900520 11.954248 2.061130
+v 1.762492 8.362057 2.061130
+v 1.246365 8.552379 2.061131
+v 5.178541 14.995154 2.961130
+v 5.078559 15.046996 2.961130
+v 3.001911 11.909618 2.961130
+v 2.900520 11.954248 2.961130
+v 1.349590 8.514315 2.961130
+v 1.246365 8.552379 2.961130
+v 5.178541 14.995154 2.511130
+v 3.001911 11.909618 2.511130
+v 1.349590 8.514315 2.511130
+v 5.575133 14.783429 2.511130
+v 3.406142 11.728702 2.511130
+v 1.762492 8.362057 2.511130
+v 1.246365 8.552379 2.234841
+v 5.078559 15.046996 2.234841
+v 2.900520 11.954248 2.234841
+v 8.512536 17.244436 2.787421
+v 8.575221 17.201427 2.337421
+v 8.481119 17.265831 2.787421
+v 8.543903 17.222967 2.787421
+v 8.575221 17.201427 2.787421
+v 8.699540 17.114872 2.337421
+v 8.481119 17.265831 2.061131
+v 8.823064 17.027185 2.337421
+v 8.945782 16.938374 2.337421
+v 8.945782 16.938374 1.887421
+v 8.792145 17.049294 1.887421
+v 8.637251 17.158451 1.887421
+v 8.481119 17.265831 1.887421
+v 6.335964 14.349365 1.887421
+v 5.852365 14.629568 1.887421
+v 4.191144 11.363757 1.887421
+v 3.690701 11.598487 1.887421
+v 2.570602 8.064067 1.887421
+v 2.054467 8.254391 1.887421
+v 5.949745 14.574361 2.787421
+v 5.852365 14.629568 2.787421
+v 3.791053 11.552003 2.787421
+v 3.690701 11.598487 2.787421
+v 2.157694 8.216326 2.787421
+v 2.054467 8.254391 2.787421
+v 5.949745 14.574361 2.337421
+v 3.791053 11.552003 2.337421
+v 2.157694 8.216326 2.337421
+v 6.335964 14.349365 2.337421
+v 4.191144 11.363757 2.337421
+v 2.570602 8.064067 2.337421
+v 2.054467 8.254391 2.061131
+v 5.852365 14.629568 2.061131
+v 3.690701 11.598487 2.061131
+v 9.203111 16.746500 1.713711
+v 9.202802 16.746735 1.713710
+v 9.202184 16.747204 1.714342
+v 9.202493 16.746969 1.713710
+v 9.202184 16.747204 1.713710
+v 6.606869 14.185692 1.713711
+v 6.605889 14.186293 1.713710
+v 4.473819 11.227940 1.713711
+v 4.472793 11.228436 1.713710
+v 2.863647 7.956006 1.713711
+v 2.862581 7.956399 1.713710
+v 6.605889 14.186293 1.714342
+v 4.472793 11.228436 1.714342
+v 2.862581 7.956399 1.714342
+v 2.863114 7.956203 1.714027
+v 2.862848 7.956301 1.714185
+v 9.233006 16.723701 2.613711
+v 9.292641 16.677902 2.163711
+v 9.203111 16.746500 2.613711
+v 9.262849 16.700836 2.613711
+v 9.292641 16.677902 2.613711
+v 9.644957 16.398357 2.163711
+v 9.644957 16.398357 1.713710
+v 9.528361 16.492599 2.163711
+v 9.498990 16.516068 1.713710
+v 9.410920 16.585783 2.163711
+v 9.351702 16.632120 1.713710
+v 7.077588 13.889511 1.713710
+v 4.969143 10.984318 1.713710
+v 3.379789 7.765678 1.713710
+v 6.606869 14.185692 2.613711
+v 4.473819 11.227940 2.613711
+v 2.863647 7.956006 2.613711
+v 6.701668 14.127257 2.613711
+v 4.573143 11.179663 2.613711
+v 2.966875 7.917941 2.613711
+v 6.701668 14.127257 2.163711
+v 4.573143 11.179663 2.163711
+v 2.966875 7.917941 2.163711
+v 7.077588 13.889511 2.163711
+v 4.969143 10.984318 2.163711
+v 3.379789 7.765678 2.163711
+v 11.248826 -4.850565 1.978956
+v 11.147162 -4.888271 2.428213
+v 11.248826 -4.850565 2.428213
+v 11.147162 -4.888271 1.530000
+v 11.583591 -4.726403 1.530000
+v 11.583591 -4.726403 1.978956
+v 12.418208 -6.365387 1.530000
+v 12.418208 -6.365387 1.978956
+v 13.483304 -7.864862 1.530000
+v 13.483304 -7.864862 1.978956
+v 14.756027 -9.192654 1.530000
+v 14.756027 -9.192654 1.978956
+v 12.120696 -6.598319 1.978956
+v 13.247171 -8.193892 1.978956
+v 14.705967 -9.329045 1.978956
+v 14.654714 -9.464993 1.978956
+v 14.602272 -9.600486 1.978956
+v 12.120696 -6.598319 2.428213
+v 13.247171 -8.193892 2.428213
+v 14.602272 -9.600486 2.428213
+v 12.033283 -6.663306 2.428213
+v 13.179770 -8.282420 2.428213
+v 14.588195 -9.636265 2.428213
+v 14.574036 -9.672011 2.428213
+v 14.559793 -9.707725 2.428213
+v 12.033283 -6.663306 1.530000
+v 13.179770 -8.282420 1.530000
+v 14.559793 -9.707725 1.530000
+v 14.692519 -9.365066 1.530000
+v 14.627106 -9.536762 1.530000
+v 10.378036 -5.173535 1.978956
+v 10.276378 -5.211239 2.428213
+v 10.378036 -5.173535 2.428213
+v 10.276378 -5.211239 1.530000
+v 10.791651 -5.020128 1.530000
+v 10.791651 -5.020128 1.978956
+v 11.726471 -6.888554 1.978956
+v 11.726471 -6.888554 1.530000
+v 12.941384 -8.588227 1.978956
+v 12.941384 -8.588227 1.530000
+v 14.406628 -10.077511 1.978956
+v 14.406628 -10.077511 1.530000
+v 11.367346 -7.146844 1.978956
+v 12.658857 -8.937006 1.978956
+v 14.345542 -10.218298 1.978956
+v 14.283155 -10.358514 1.978956
+v 14.219474 -10.498146 1.978956
+v 11.367346 -7.146844 2.428213
+v 12.658857 -8.937006 2.428213
+v 14.219474 -10.498146 2.428213
+v 11.278730 -7.209728 2.428213
+v 12.588576 -9.021626 2.428213
+v 14.203731 -10.532146 2.428213
+v 14.187911 -10.566111 2.428213
+v 14.172014 -10.600039 2.428213
+v 11.278730 -7.209728 1.530000
+v 12.588576 -9.021626 1.530000
+v 14.172014 -10.600039 1.530000
+v 14.330430 -10.252584 1.530000
+v 14.252222 -10.426767 1.530000
+v 9.507296 -5.496486 1.978956
+v 9.405643 -5.534188 2.428213
+v 9.507296 -5.496486 2.428213
+v 9.405643 -5.534188 1.530000
+v 9.920888 -5.343088 1.530000
+v 9.920888 -5.343088 1.978956
+v 10.967787 -7.427827 1.978956
+v 10.967787 -7.427827 1.530000
+v 12.340222 -9.314241 1.978956
+v 12.340222 -9.314241 1.530000
+v 14.001550 -10.951962 1.978956
+v 14.001550 -10.951962 1.530000
+v 10.603971 -7.678141 1.978956
+v 12.046264 -9.648448 1.978956
+v 13.933738 -11.086324 1.978956
+v 13.864709 -11.220064 1.978956
+v 13.794470 -11.353173 1.978956
+v 10.603971 -7.678141 2.428213
+v 12.046264 -9.648448 2.428213
+v 13.794470 -11.353173 2.428213
+v 10.514220 -7.739110 2.428213
+v 11.973195 -9.729591 2.428213
+v 13.777099 -11.385648 2.428213
+v 13.759656 -11.418083 2.428213
+v 13.742141 -11.450480 2.428213
+v 10.514220 -7.739110 1.530000
+v 11.973195 -9.729591 1.530000
+v 13.742141 -11.450480 1.530000
+v 13.916959 -11.119107 1.530000
+v 13.830485 -11.285287 1.530000
+v 8.636598 -5.819421 1.978956
+v 8.534950 -5.857122 2.428213
+v 8.636598 -5.819421 2.428213
+v 8.534950 -5.857122 1.530000
+v 9.050171 -5.666030 1.530000
+v 9.050171 -5.666030 1.978956
+v 10.199345 -7.950634 1.978956
+v 10.199345 -7.950634 1.530000
+v 11.715154 -10.010327 1.978956
+v 11.715154 -10.010327 1.530000
+v 13.554718 -11.786846 1.978956
+v 13.554718 -11.786846 1.530000
+v 9.831024 -8.193489 1.978956
+v 11.410019 -10.331158 1.978956
+v 13.480302 -11.915489 1.978956
+v 13.404736 -12.043461 1.978956
+v 13.328026 -12.170750 1.978956
+v 9.831024 -8.193489 2.428213
+v 11.410019 -10.331158 2.428213
+v 13.328026 -12.170750 2.428213
+v 9.740174 -8.252651 2.428213
+v 11.334217 -10.409074 2.428213
+v 13.309050 -12.201845 2.428213
+v 13.290005 -12.232899 2.428213
+v 13.270891 -12.263910 2.428213
+v 9.740174 -8.252651 1.530000
+v 11.334217 -10.409074 1.530000
+v 13.270891 -12.263910 1.530000
+v 13.461885 -11.946919 1.530000
+v 13.367272 -12.105947 1.530000
+v 7.765935 -6.142344 1.978956
+v 7.664290 -6.180043 2.428213
+v 7.765935 -6.142344 2.428213
+v 7.664290 -6.180043 1.530000
+v 8.179492 -5.988959 1.530000
+v 8.179492 -5.988959 1.978956
+v 9.421484 -8.457921 1.978956
+v 9.421484 -8.457921 1.530000
+v 11.066649 -10.678676 1.978956
+v 11.066649 -10.678676 1.530000
+v 13.066709 -12.586052 1.978956
+v 13.066709 -12.586052 1.530000
+v 9.048766 -8.693602 1.978956
+v 10.750485 -10.986792 1.978956
+v 12.985757 -12.709376 1.978956
+v 12.903711 -12.831976 1.978956
+v 12.820579 -12.953841 1.978956
+v 9.048766 -8.693602 2.428213
+v 10.750485 -10.986792 2.428213
+v 12.820579 -12.953841 2.428213
+v 8.956841 -8.751014 2.428213
+v 10.671980 -11.061614 2.428213
+v 12.800010 -12.983639 2.428213
+v 12.779375 -13.013391 2.428213
+v 12.758676 -13.043097 2.428213
+v 8.956841 -8.751014 1.530000
+v 10.671980 -11.061614 1.530000
+v 12.758676 -13.043097 1.530000
+v 12.965720 -12.739534 1.530000
+v 12.863039 -12.891890 1.530000
+v 6.895301 -6.465256 1.978956
+v 6.793660 -6.502954 2.428213
+v 6.895301 -6.465256 2.428213
+v 6.793660 -6.502954 1.530000
+v 7.308845 -6.311875 1.530000
+v 7.308845 -6.311875 1.978956
+v 12.537836 -13.351723 1.530000
+v 12.428738 -13.498851 1.530000
+v 10.394977 -11.320471 1.530000
+v 8.634405 -8.950193 1.530000
+v 8.164362 -9.234518 1.530000
+v 9.986669 -11.687979 1.530000
+v 12.318022 -13.644764 1.530000
+v 12.205701 -13.789446 1.530000
+v 8.634405 -8.950193 1.978956
+v 10.394977 -11.320471 1.978956
+v 12.537836 -13.351723 1.978956
+v 8.257350 -9.178833 1.978956
+v 12.450385 -13.469927 1.978956
+v 10.067863 -11.616191 1.978956
+v 12.361890 -13.587350 1.978956
+v 12.272357 -13.703984 1.978956
+v 8.257350 -9.178833 2.428213
+v 10.067863 -11.616191 2.428213
+v 12.272357 -13.703984 2.428213
+v 8.164362 -9.234518 2.428213
+v 12.250200 -13.732520 2.428213
+v 9.986669 -11.687979 2.428213
+v 12.227982 -13.761007 2.428213
+v 12.205701 -13.789446 2.428213
+v 6.024693 -6.788158 1.978956
+v 5.923054 -6.825855 2.428213
+v 6.024693 -6.788158 2.428213
+v 5.923054 -6.825855 1.530000
+v 6.438225 -6.634782 1.530000
+v 6.438225 -6.634782 1.978956
+v 7.838214 -9.427670 1.530000
+v 7.362804 -9.703258 1.530000
+v 11.968247 -14.084841 1.530000
+v 11.851053 -14.225676 1.530000
+v 9.700274 -11.936240 1.530000
+v 11.732311 -14.365207 1.530000
+v 9.278363 -12.288400 1.530000
+v 11.612036 -14.503417 1.530000
+v 7.838214 -9.427670 1.978956
+v 9.700274 -11.936240 1.978956
+v 11.968247 -14.084841 1.978956
+v 7.456850 -9.649297 1.978956
+v 11.874309 -14.197980 1.978956
+v 11.779371 -14.310281 1.978956
+v 9.362240 -12.219643 1.978956
+v 11.683441 -14.421736 1.978956
+v 7.456850 -9.649297 2.428213
+v 9.362240 -12.219643 2.428213
+v 11.683441 -14.421736 2.428213
+v 7.362804 -9.703258 2.428213
+v 11.659698 -14.449015 2.428213
+v 11.635897 -14.476242 2.428213
+v 11.612036 -14.503417 2.428213
+v 9.278363 -12.288400 2.428213
+v 5.153372 -7.111325 1.978956
+v 5.050214 -7.149585 2.428956
+v 5.153372 -7.111325 2.428956
+v 5.050214 -7.149585 1.530000
+v 5.566004 -6.958282 1.530000
+v 5.566004 -6.958282 1.978956
+v 6.550074 -10.158310 1.530000
+v 7.031446 -9.891216 1.530000
+v 11.356788 -14.786838 1.530000
+v 11.231321 -14.921464 1.530000
+v 8.981225 -12.527120 1.530000
+v 11.104370 -15.054690 1.530000
+v 10.975948 -15.186501 1.530000
+v 8.545146 -12.864173 1.530000
+v 7.031446 -9.891216 1.978956
+v 8.981225 -12.527120 1.978956
+v 11.356788 -14.786838 1.978956
+v 6.646604 -10.105312 1.978956
+v 11.256562 -14.894621 1.978956
+v 11.155384 -15.001511 1.978956
+v 11.053262 -15.107498 1.978956
+v 8.633008 -12.797504 1.978956
+v 6.646604 -10.105312 2.428956
+v 8.633008 -12.797504 2.428956
+v 11.053262 -15.107498 2.428956
+v 6.550074 -10.158310 2.428956
+v 11.027550 -15.133889 2.428956
+v 11.001778 -15.160223 2.428956
+v 10.975948 -15.186501 2.428956
+v 8.545146 -12.864173 2.428956
+f 979 980 981
+f 982 980 979
+f 983 979 984
+f 983 982 979
+f 983 985 986
+f 984 985 983
+f 986 987 988
+f 985 987 986
+f 988 989 990
+f 987 989 988
+f 979 991 984
+f 984 991 985
+f 991 987 985
+f 991 992 987
+f 992 989 987
+f 992 993 989
+f 981 994 979
+f 979 994 991
+f 991 995 992
+f 994 995 991
+f 992 996 993
+f 995 996 992
+f 980 997 981
+f 981 997 994
+f 997 995 994
+f 997 998 995
+f 998 996 995
+f 998 999 996
+f 982 1000 980
+f 980 1000 997
+f 997 1001 998
+f 1000 1001 997
+f 998 1002 999
+f 1001 1002 998
+f 983 1000 982
+f 986 1000 983
+f 986 988 1000
+f 988 1001 1000
+f 988 990 1001
+f 990 1002 1001
+f 993 996 999
+f 990 989 993
+f 1002 990 993
+f 1002 993 999
+f 1003 1004 1005
+f 1006 1004 1003
+f 1007 1003 1008
+f 1007 1006 1003
+f 1008 1009 1007
+f 1007 1009 1010
+f 1010 1011 1012
+f 1009 1011 1010
+f 1012 1013 1014
+f 1011 1013 1012
+f 1003 1015 1008
+f 1008 1015 1009
+f 1015 1011 1009
+f 1015 1016 1011
+f 1016 1013 1011
+f 1016 1017 1013
+f 1005 1018 1003
+f 1003 1018 1015
+f 1015 1019 1016
+f 1018 1019 1015
+f 1016 1020 1017
+f 1019 1020 1016
+f 1004 1021 1005
+f 1005 1021 1018
+f 1021 1019 1018
+f 1021 1022 1019
+f 1022 1020 1019
+f 1022 1023 1020
+f 1006 1024 1004
+f 1004 1024 1021
+f 1021 1025 1022
+f 1024 1025 1021
+f 1022 1026 1023
+f 1025 1026 1022
+f 1010 1024 1007
+f 1007 1024 1006
+f 1010 1012 1024
+f 1012 1025 1024
+f 1012 1014 1025
+f 1014 1026 1025
+f 1017 1020 1023
+f 1014 1013 1017
+f 1026 1014 1017
+f 1026 1017 1023
+f 1027 1028 1029
+f 1030 1028 1027
+f 1031 1027 1032
+f 1031 1030 1027
+f 1032 1033 1031
+f 1031 1033 1034
+f 1034 1035 1036
+f 1033 1035 1034
+f 1036 1037 1038
+f 1035 1037 1036
+f 1027 1039 1032
+f 1032 1039 1033
+f 1039 1035 1033
+f 1039 1040 1035
+f 1040 1037 1035
+f 1040 1041 1037
+f 1029 1042 1027
+f 1027 1042 1039
+f 1039 1043 1040
+f 1042 1043 1039
+f 1040 1044 1041
+f 1043 1044 1040
+f 1028 1045 1029
+f 1029 1045 1042
+f 1045 1043 1042
+f 1045 1046 1043
+f 1046 1044 1043
+f 1046 1047 1044
+f 1030 1048 1028
+f 1028 1048 1045
+f 1045 1049 1046
+f 1048 1049 1045
+f 1046 1050 1047
+f 1049 1050 1046
+f 1034 1048 1031
+f 1031 1048 1030
+f 1034 1036 1048
+f 1036 1049 1048
+f 1036 1038 1049
+f 1038 1050 1049
+f 1041 1044 1047
+f 1038 1037 1041
+f 1050 1038 1041
+f 1050 1041 1047
+f 1051 1052 1053
+f 1054 1052 1051
+f 1055 1051 1056
+f 1055 1054 1051
+f 1056 1057 1055
+f 1055 1057 1058
+f 1058 1059 1060
+f 1057 1059 1058
+f 1060 1061 1062
+f 1059 1061 1060
+f 1051 1063 1056
+f 1056 1063 1057
+f 1063 1059 1057
+f 1063 1064 1059
+f 1064 1061 1059
+f 1064 1065 1061
+f 1053 1066 1051
+f 1051 1066 1063
+f 1063 1067 1064
+f 1066 1067 1063
+f 1064 1068 1065
+f 1067 1068 1064
+f 1052 1069 1053
+f 1053 1069 1066
+f 1069 1067 1066
+f 1069 1070 1067
+f 1070 1068 1067
+f 1070 1071 1068
+f 1054 1072 1052
+f 1052 1072 1069
+f 1069 1073 1070
+f 1072 1073 1069
+f 1070 1074 1071
+f 1073 1074 1070
+f 1058 1072 1055
+f 1055 1072 1054
+f 1058 1060 1072
+f 1060 1073 1072
+f 1060 1062 1073
+f 1062 1074 1073
+f 1065 1068 1071
+f 1062 1061 1065
+f 1074 1062 1065
+f 1074 1065 1071
+f 1075 1076 1077
+f 1078 1076 1075
+f 1079 1075 1080
+f 1079 1078 1075
+f 1080 1081 1079
+f 1079 1081 1082
+f 1082 1083 1084
+f 1081 1083 1082
+f 1084 1085 1086
+f 1083 1085 1084
+f 1075 1087 1080
+f 1080 1087 1081
+f 1087 1083 1081
+f 1087 1088 1083
+f 1088 1085 1083
+f 1088 1089 1085
+f 1077 1090 1075
+f 1075 1090 1087
+f 1087 1091 1088
+f 1090 1091 1087
+f 1088 1092 1089
+f 1091 1092 1088
+f 1076 1093 1077
+f 1077 1093 1090
+f 1093 1091 1090
+f 1093 1094 1091
+f 1094 1092 1091
+f 1094 1095 1092
+f 1078 1096 1076
+f 1076 1096 1093
+f 1093 1097 1094
+f 1096 1097 1093
+f 1094 1098 1095
+f 1097 1098 1094
+f 1082 1096 1079
+f 1079 1096 1078
+f 1082 1084 1096
+f 1084 1097 1096
+f 1084 1086 1097
+f 1086 1098 1097
+f 1089 1092 1095
+f 1086 1085 1089
+f 1098 1086 1089
+f 1098 1089 1095
+f 1099 1100 1101
+f 1102 1100 1099
+f 1103 1099 1104
+f 1103 1102 1099
+f 1105 1106 1103
+f 1103 1106 1102
+f 1105 1107 1106
+f 1107 1108 1106
+f 1107 1109 1108
+f 1109 1110 1108
+f 1104 1111 1103
+f 1103 1111 1105
+f 1105 1112 1107
+f 1111 1112 1105
+f 1107 1113 1109
+f 1112 1113 1107
+f 1099 1114 1104
+f 1104 1114 1111
+f 1114 1112 1111
+f 1114 1115 1112
+f 1115 1113 1112
+f 1115 1116 1113
+f 1101 1117 1099
+f 1099 1117 1114
+f 1114 1118 1115
+f 1117 1118 1114
+f 1115 1119 1116
+f 1118 1119 1115
+f 1100 1120 1101
+f 1101 1120 1117
+f 1120 1118 1117
+f 1120 1121 1118
+f 1121 1119 1118
+f 1121 1122 1119
+f 1102 1106 1100
+f 1100 1106 1120
+f 1120 1108 1121
+f 1106 1108 1120
+f 1121 1110 1122
+f 1108 1110 1121
+f 1116 1119 1122
+f 1109 1113 1116
+f 1110 1109 1116
+f 1110 1116 1122
+f 1123 1124 1125
+f 1126 1124 1123
+f 1127 1123 1128
+f 1127 1126 1123
+f 1129 1130 1127
+f 1127 1130 1126
+f 1129 1131 1130
+f 1131 1132 1130
+f 1131 1133 1132
+f 1133 1134 1132
+f 1128 1135 1127
+f 1127 1135 1129
+f 1129 1136 1131
+f 1135 1136 1129
+f 1131 1137 1133
+f 1136 1137 1131
+f 1123 1138 1128
+f 1128 1138 1135
+f 1138 1136 1135
+f 1138 1139 1136
+f 1139 1137 1136
+f 1139 1140 1137
+f 1125 1141 1123
+f 1123 1141 1138
+f 1138 1142 1139
+f 1141 1142 1138
+f 1139 1143 1140
+f 1142 1143 1139
+f 1124 1144 1125
+f 1125 1144 1141
+f 1144 1142 1141
+f 1144 1145 1142
+f 1145 1143 1142
+f 1145 1146 1143
+f 1126 1130 1124
+f 1124 1130 1144
+f 1144 1132 1145
+f 1130 1132 1144
+f 1145 1134 1146
+f 1132 1134 1145
+f 1140 1143 1146
+f 1133 1137 1140
+f 1134 1133 1140
+f 1134 1140 1146
+f 1147 1148 1149
+f 1150 1148 1147
+f 1151 1147 1152
+f 1151 1150 1147
+f 1151 1153 1150
+f 1154 1153 1151
+f 1154 1155 1153
+f 1155 1156 1153
+f 1155 1157 1156
+f 1157 1158 1156
+f 1152 1159 1151
+f 1151 1159 1154
+f 1154 1160 1155
+f 1159 1160 1154
+f 1155 1161 1157
+f 1160 1161 1155
+f 1147 1162 1152
+f 1152 1162 1159
+f 1162 1160 1159
+f 1162 1163 1160
+f 1163 1161 1160
+f 1163 1164 1161
+f 1149 1165 1147
+f 1147 1165 1162
+f 1162 1166 1163
+f 1165 1166 1162
+f 1163 1167 1164
+f 1166 1167 1163
+f 1148 1168 1149
+f 1149 1168 1165
+f 1168 1166 1165
+f 1168 1169 1166
+f 1169 1167 1166
+f 1169 1170 1167
+f 1150 1153 1148
+f 1148 1153 1168
+f 1168 1156 1169
+f 1153 1156 1168
+f 1169 1158 1170
+f 1156 1158 1169
+f 1164 1167 1170
+f 1157 1161 1164
+f 1158 1157 1164
+f 1158 1164 1170
+f 1171 1172 1173
+f 1173 1172 1174
+f 1174 1172 1175
+f 1172 1176 1175
+f 1176 1177 1178
+f 1172 1177 1176
+f 1178 1179 1180
+f 1177 1179 1178
+f 1181 1182 1171
+f 1171 1182 1172
+f 1172 1183 1177
+f 1182 1183 1172
+f 1177 1184 1179
+f 1183 1184 1177
+f 1185 1179 1184
+f 1185 1186 1179
+f 1179 1187 1180
+f 1186 1187 1179
+f 1188 1189 1175
+f 1188 1175 1176
+f 1190 1176 1178
+f 1190 1188 1176
+f 1187 1178 1180
+f 1187 1190 1178
+f 1191 1171 1192
+f 1193 1171 1191
+f 1181 1171 1193
+f 1175 1189 1174
+f 1174 1194 1173
+f 1189 1194 1174
+f 1173 1195 1171
+f 1194 1195 1173
+f 1195 1196 1171
+f 1196 1192 1171
+f 1192 1197 1191
+f 1191 1197 1193
+f 1193 1197 1181
+f 1197 1182 1181
+f 1182 1198 1183
+f 1197 1198 1182
+f 1183 1185 1184
+f 1198 1185 1183
+f 1196 1199 1192
+f 1192 1199 1197
+f 1197 1200 1198
+f 1199 1200 1197
+f 1198 1186 1185
+f 1200 1186 1198
+f 1195 1199 1196
+f 1194 1199 1195
+f 1189 1199 1194
+f 1189 1188 1199
+f 1190 1200 1188
+f 1188 1200 1199
+f 1187 1186 1190
+f 1190 1186 1200
+f 1201 1202 1203
+f 1201 1204 1202
+f 1202 1205 1206
+f 1204 1205 1202
+f 1207 1208 1209
+f 1209 1208 1210
+f 1210 1211 1212
+f 1208 1211 1210
+f 1212 1206 1205
+f 1211 1206 1212
+f 1213 1214 1215
+f 1215 1214 1216
+f 1216 1214 1207
+f 1214 1208 1207
+f 1208 1217 1211
+f 1214 1217 1208
+f 1211 1202 1206
+f 1217 1202 1211
+f 1218 1219 1213
+f 1213 1219 1214
+f 1214 1220 1217
+f 1219 1220 1214
+f 1217 1203 1202
+f 1220 1203 1217
+f 1221 1222 1223
+f 1223 1222 1224
+f 1224 1222 1218
+f 1222 1219 1218
+f 1219 1225 1220
+f 1222 1225 1219
+f 1220 1201 1203
+f 1225 1201 1220
+f 1226 1227 1221
+f 1221 1227 1222
+f 1222 1228 1225
+f 1227 1228 1222
+f 1225 1204 1201
+f 1228 1204 1225
+f 1229 1227 1226
+f 1230 1227 1229
+f 1209 1227 1230
+f 1209 1210 1227
+f 1212 1228 1210
+f 1210 1228 1227
+f 1205 1204 1212
+f 1212 1204 1228
+f 1223 1213 1221
+f 1224 1213 1223
+f 1218 1213 1224
+f 1207 1209 1216
+f 1216 1230 1215
+f 1209 1230 1216
+f 1215 1229 1213
+f 1230 1229 1215
+f 1229 1226 1213
+f 1226 1221 1213
+f 1231 1232 1233
+f 1231 1234 1232
+f 1232 1235 1236
+f 1234 1235 1232
+f 1237 1238 1239
+f 1239 1238 1240
+f 1240 1241 1242
+f 1238 1241 1240
+f 1242 1236 1235
+f 1241 1236 1242
+f 1243 1244 1245
+f 1245 1244 1246
+f 1246 1244 1237
+f 1244 1238 1237
+f 1238 1247 1241
+f 1244 1247 1238
+f 1241 1232 1236
+f 1247 1232 1241
+f 1248 1249 1243
+f 1243 1249 1244
+f 1244 1250 1247
+f 1249 1250 1244
+f 1247 1233 1232
+f 1250 1233 1247
+f 1251 1252 1253
+f 1253 1252 1254
+f 1254 1252 1248
+f 1252 1249 1248
+f 1249 1255 1250
+f 1252 1255 1249
+f 1250 1231 1233
+f 1255 1231 1250
+f 1256 1257 1251
+f 1251 1257 1252
+f 1252 1258 1255
+f 1257 1258 1252
+f 1255 1234 1231
+f 1258 1234 1255
+f 1259 1257 1256
+f 1260 1257 1259
+f 1239 1257 1260
+f 1239 1240 1257
+f 1242 1258 1240
+f 1240 1258 1257
+f 1235 1234 1242
+f 1242 1234 1258
+f 1253 1243 1251
+f 1254 1243 1253
+f 1248 1243 1254
+f 1237 1239 1246
+f 1246 1260 1245
+f 1239 1260 1246
+f 1245 1259 1243
+f 1260 1259 1245
+f 1259 1256 1243
+f 1256 1251 1243
+f 1261 1262 1263
+f 1261 1264 1262
+f 1262 1265 1266
+f 1264 1265 1262
+f 1267 1268 1269
+f 1269 1268 1270
+f 1270 1271 1272
+f 1268 1271 1270
+f 1272 1266 1265
+f 1271 1266 1272
+f 1273 1274 1275
+f 1275 1274 1276
+f 1276 1274 1267
+f 1274 1268 1267
+f 1268 1277 1271
+f 1274 1277 1268
+f 1271 1262 1266
+f 1277 1262 1271
+f 1278 1279 1273
+f 1273 1279 1274
+f 1274 1280 1277
+f 1279 1280 1274
+f 1277 1263 1262
+f 1280 1263 1277
+f 1281 1282 1283
+f 1283 1282 1284
+f 1284 1282 1278
+f 1282 1279 1278
+f 1279 1285 1280
+f 1282 1285 1279
+f 1280 1261 1263
+f 1285 1261 1280
+f 1286 1287 1281
+f 1281 1287 1282
+f 1282 1288 1285
+f 1287 1288 1282
+f 1285 1264 1261
+f 1288 1264 1285
+f 1289 1287 1286
+f 1290 1287 1289
+f 1269 1287 1290
+f 1269 1270 1287
+f 1272 1288 1270
+f 1270 1288 1287
+f 1265 1264 1272
+f 1272 1264 1288
+f 1283 1273 1281
+f 1284 1273 1283
+f 1278 1273 1284
+f 1267 1269 1276
+f 1276 1290 1275
+f 1269 1290 1276
+f 1275 1289 1273
+f 1290 1289 1275
+f 1289 1286 1273
+f 1286 1281 1273
+f 1291 1292 1293
+f 1291 1294 1292
+f 1292 1295 1296
+f 1294 1295 1292
+f 1297 1298 1299
+f 1299 1298 1300
+f 1300 1301 1302
+f 1298 1301 1300
+f 1302 1296 1295
+f 1301 1296 1302
+f 1303 1304 1305
+f 1305 1304 1306
+f 1306 1304 1297
+f 1297 1304 1298
+f 1298 1307 1301
+f 1304 1307 1298
+f 1307 1296 1301
+f 1307 1292 1296
+f 1308 1309 1303
+f 1303 1309 1304
+f 1304 1310 1307
+f 1309 1310 1304
+f 1307 1293 1292
+f 1310 1293 1307
+f 1311 1312 1313
+f 1313 1312 1314
+f 1314 1312 1308
+f 1308 1312 1309
+f 1309 1315 1310
+f 1312 1315 1309
+f 1315 1293 1310
+f 1315 1291 1293
+f 1316 1317 1311
+f 1311 1317 1312
+f 1312 1318 1315
+f 1317 1318 1312
+f 1315 1294 1291
+f 1318 1294 1315
+f 1300 1317 1299
+f 1319 1317 1316
+f 1320 1317 1319
+f 1299 1317 1320
+f 1302 1318 1300
+f 1300 1318 1317
+f 1302 1295 1318
+f 1295 1294 1318
+f 1313 1303 1311
+f 1314 1303 1313
+f 1308 1303 1314
+f 1297 1299 1306
+f 1306 1320 1305
+f 1299 1320 1306
+f 1305 1319 1303
+f 1320 1319 1305
+f 1319 1316 1303
+f 1316 1311 1303
+f 1321 1322 1323
+f 1321 1324 1322
+f 1322 1325 1326
+f 1324 1325 1322
+f 1327 1328 1329
+f 1330 1331 1332
+f 1329 1331 1330
+f 1328 1331 1329
+f 1328 1333 1331
+f 1333 1334 1331
+f 1333 1325 1334
+f 1325 1324 1334
+f 1335 1336 1327
+f 1327 1336 1328
+f 1328 1337 1333
+f 1336 1337 1328
+f 1333 1326 1325
+f 1337 1326 1333
+f 1338 1336 1335
+f 1339 1340 1341
+f 1341 1340 1338
+f 1338 1340 1336
+f 1336 1342 1337
+f 1340 1342 1336
+f 1342 1326 1337
+f 1342 1322 1326
+f 1343 1344 1339
+f 1339 1344 1340
+f 1340 1345 1342
+f 1344 1345 1340
+f 1342 1323 1322
+f 1345 1323 1342
+f 1346 1344 1343
+f 1347 1348 1349
+f 1349 1348 1346
+f 1346 1348 1344
+f 1348 1345 1344
+f 1348 1350 1345
+f 1350 1323 1345
+f 1350 1321 1323
+f 1332 1331 1347
+f 1347 1331 1348
+f 1348 1334 1350
+f 1331 1334 1348
+f 1350 1324 1321
+f 1334 1324 1350
+f 1349 1339 1347
+f 1346 1339 1349
+f 1343 1339 1346
+f 1335 1327 1338
+f 1338 1329 1341
+f 1327 1329 1338
+f 1341 1330 1339
+f 1329 1330 1341
+f 1330 1332 1339
+f 1332 1347 1339
+f 1351 1352 1353
+f 1351 1354 1352
+f 1352 1355 1356
+f 1354 1355 1352
+f 1357 1358 1359
+f 1360 1358 1357
+f 1359 1361 1362
+f 1358 1361 1359
+f 1358 1363 1361
+f 1363 1364 1361
+f 1363 1355 1364
+f 1355 1354 1364
+f 1365 1366 1360
+f 1360 1366 1358
+f 1358 1367 1363
+f 1366 1367 1358
+f 1363 1356 1355
+f 1367 1356 1363
+f 1368 1366 1369
+f 1369 1366 1365
+f 1370 1371 1368
+f 1368 1371 1366
+f 1371 1367 1366
+f 1371 1372 1367
+f 1372 1356 1367
+f 1372 1352 1356
+f 1373 1374 1370
+f 1370 1374 1371
+f 1371 1375 1372
+f 1374 1375 1371
+f 1372 1353 1352
+f 1375 1353 1372
+f 1376 1374 1377
+f 1377 1374 1378
+f 1378 1374 1373
+f 1376 1379 1374
+f 1379 1375 1374
+f 1379 1380 1375
+f 1380 1353 1375
+f 1380 1351 1353
+f 1376 1362 1379
+f 1379 1361 1380
+f 1362 1361 1379
+f 1380 1364 1351
+f 1361 1364 1380
+f 1364 1354 1351
+f 1377 1370 1376
+f 1378 1370 1377
+f 1373 1370 1378
+f 1365 1360 1369
+f 1369 1357 1368
+f 1360 1357 1369
+f 1368 1359 1370
+f 1357 1359 1368
+f 1359 1362 1370
+f 1362 1376 1370
+f 1381 1382 1383
+f 1381 1384 1382
+f 1382 1385 1386
+f 1384 1385 1382
+f 1387 1388 1389
+f 1390 1388 1387
+f 1391 1388 1390
+f 1388 1392 1389
+f 1388 1393 1392
+f 1393 1394 1392
+f 1393 1385 1394
+f 1385 1384 1394
+f 1395 1396 1391
+f 1391 1396 1388
+f 1388 1397 1393
+f 1396 1397 1388
+f 1393 1386 1385
+f 1397 1386 1393
+f 1398 1396 1399
+f 1399 1396 1400
+f 1400 1396 1395
+f 1398 1401 1396
+f 1401 1397 1396
+f 1401 1402 1397
+f 1402 1386 1397
+f 1402 1382 1386
+f 1403 1404 1398
+f 1398 1404 1401
+f 1401 1405 1402
+f 1404 1405 1401
+f 1402 1383 1382
+f 1405 1383 1402
+f 1406 1404 1407
+f 1407 1404 1408
+f 1408 1404 1403
+f 1406 1409 1404
+f 1409 1405 1404
+f 1409 1410 1405
+f 1410 1383 1405
+f 1410 1381 1383
+f 1406 1389 1409
+f 1409 1392 1410
+f 1389 1392 1409
+f 1392 1394 1410
+f 1410 1384 1381
+f 1394 1384 1410
+f 1407 1398 1406
+f 1408 1398 1407
+f 1403 1398 1408
+f 1395 1391 1400
+f 1400 1390 1399
+f 1391 1390 1400
+f 1399 1387 1398
+f 1390 1387 1399
+f 1387 1389 1398
+f 1389 1406 1398
+f 1411 1412 1413
+f 1414 1412 1411
+f 1415 1412 1414
+f 1412 1416 1417
+f 1418 1416 1412
+f 1417 1419 1420
+f 1416 1419 1417
+f 1420 1421 1422
+f 1419 1421 1420
+f 1415 1418 1412
+f 1423 1424 1425
+f 1425 1424 1426
+f 1426 1427 1428
+f 1424 1427 1426
+f 1428 1422 1421
+f 1427 1422 1428
+f 1429 1430 1423
+f 1423 1430 1424
+f 1427 1420 1422
+f 1427 1417 1420
+f 1427 1412 1417
+f 1424 1431 1427
+f 1430 1431 1424
+f 1427 1431 1412
+f 1432 1433 1429
+f 1429 1433 1430
+f 1430 1434 1431
+f 1433 1434 1430
+f 1431 1413 1412
+f 1434 1413 1431
+f 1435 1436 1432
+f 1432 1436 1433
+f 1434 1411 1413
+f 1434 1414 1411
+f 1434 1415 1414
+f 1433 1437 1434
+f 1436 1437 1433
+f 1434 1437 1415
+f 1438 1439 1435
+f 1435 1439 1436
+f 1436 1440 1437
+f 1439 1440 1436
+f 1437 1418 1415
+f 1440 1418 1437
+f 1439 1438 1425
+f 1439 1425 1426
+f 1419 1428 1421
+f 1416 1428 1419
+f 1418 1428 1416
+f 1440 1426 1428
+f 1440 1439 1426
+f 1440 1428 1418
+f 1429 1435 1432
+f 1438 1435 1429
+f 1425 1429 1423
+f 1425 1438 1429
+f 1441 1418 1442
+f 1442 1418 1443
+f 1441 1444 1418
+f 1445 1446 1447
+f 1447 1446 1448
+f 1448 1446 1438
+f 1438 1446 1439
+f 1439 1449 1440
+f 1446 1449 1439
+f 1440 1443 1418
+f 1449 1443 1440
+f 1446 1445 1450
+f 1446 1450 1451
+f 1449 1451 1452
+f 1449 1446 1451
+f 1443 1452 1442
+f 1443 1449 1452
+f 1451 1450 1438
+f 1451 1438 1439
+f 1440 1418 1444
+f 1440 1444 1441
+f 1440 1441 1442
+f 1452 1439 1440
+f 1452 1451 1439
+f 1452 1440 1442
+f 1450 1445 1447
+f 1448 1450 1447
+f 1438 1450 1448
+f 1453 1454 1455
+f 1456 1454 1453
+f 1457 1454 1456
+f 1458 1459 1460
+f 1461 1459 1458
+f 1454 1459 1461
+f 1462 1463 1459
+f 1463 1464 1459
+f 1459 1465 1460
+f 1464 1465 1459
+f 1457 1459 1454
+f 1466 1467 1468
+f 1468 1467 1469
+f 1469 1470 1471
+f 1467 1470 1469
+f 1471 1460 1465
+f 1470 1460 1471
+f 1472 1473 1466
+f 1466 1473 1467
+f 1470 1458 1460
+f 1470 1461 1458
+f 1467 1474 1470
+f 1473 1474 1467
+f 1474 1454 1470
+f 1470 1454 1461
+f 1475 1476 1472
+f 1472 1476 1473
+f 1473 1477 1474
+f 1476 1477 1473
+f 1474 1455 1454
+f 1477 1455 1474
+f 1478 1479 1475
+f 1475 1479 1476
+f 1477 1453 1455
+f 1477 1456 1453
+f 1476 1480 1477
+f 1479 1480 1476
+f 1480 1457 1477
+f 1477 1457 1456
+f 1481 1482 1468
+f 1481 1468 1469
+f 1464 1471 1465
+f 1463 1471 1464
+f 1483 1469 1471
+f 1483 1481 1469
+f 1462 1483 1471
+f 1462 1471 1463
+f 1472 1478 1475
+f 1484 1478 1472
+f 1468 1482 1484
+f 1468 1472 1466
+f 1468 1484 1472
+f 1484 1482 1485
+f 1485 1481 1486
+f 1482 1481 1485
+f 1486 1483 1459
+f 1481 1483 1486
+f 1483 1462 1459
+f 1478 1484 1479
+f 1484 1485 1479
+f 1479 1486 1480
+f 1485 1486 1479
+f 1480 1459 1457
+f 1486 1459 1480
+f 1487 1488 1489
+f 1490 1488 1487
+f 1491 1488 1490
+f 1492 1493 1494
+f 1495 1493 1492
+f 1488 1493 1495
+f 1496 1497 1493
+f 1497 1498 1493
+f 1493 1499 1494
+f 1498 1499 1493
+f 1491 1493 1488
+f 1500 1501 1502
+f 1502 1501 1503
+f 1503 1504 1505
+f 1501 1504 1503
+f 1505 1494 1499
+f 1504 1494 1505
+f 1506 1507 1500
+f 1500 1507 1501
+f 1504 1492 1494
+f 1504 1495 1492
+f 1501 1508 1504
+f 1507 1508 1501
+f 1508 1488 1504
+f 1504 1488 1495
+f 1509 1510 1506
+f 1506 1510 1507
+f 1507 1511 1508
+f 1510 1511 1507
+f 1508 1489 1488
+f 1511 1489 1508
+f 1512 1513 1509
+f 1509 1513 1510
+f 1511 1487 1489
+f 1510 1514 1511
+f 1513 1514 1510
+f 1511 1490 1487
+f 1514 1491 1511
+f 1511 1491 1490
+f 1515 1516 1502
+f 1515 1502 1503
+f 1498 1505 1499
+f 1497 1505 1498
+f 1517 1503 1505
+f 1517 1515 1503
+f 1496 1517 1505
+f 1496 1505 1497
+f 1506 1512 1509
+f 1518 1512 1506
+f 1502 1516 1518
+f 1502 1506 1500
+f 1502 1518 1506
+f 1518 1516 1519
+f 1519 1515 1520
+f 1516 1515 1519
+f 1515 1517 1520
+f 1520 1496 1493
+f 1517 1496 1520
+f 1512 1519 1513
+f 1518 1519 1512
+f 1513 1520 1514
+f 1519 1520 1513
+f 1514 1493 1491
+f 1520 1493 1514
+f 1521 1522 1523
+f 1524 1522 1521
+f 1525 1522 1524
+f 1526 1527 1528
+f 1529 1527 1526
+f 1522 1527 1529
+f 1530 1531 1527
+f 1531 1532 1527
+f 1527 1533 1528
+f 1532 1533 1527
+f 1525 1527 1522
+f 1534 1535 1536
+f 1536 1535 1537
+f 1537 1538 1539
+f 1535 1538 1537
+f 1539 1528 1533
+f 1538 1528 1539
+f 1540 1541 1534
+f 1534 1541 1535
+f 1538 1526 1528
+f 1538 1529 1526
+f 1535 1542 1538
+f 1541 1542 1535
+f 1542 1522 1538
+f 1538 1522 1529
+f 1543 1544 1540
+f 1540 1544 1541
+f 1541 1545 1542
+f 1544 1545 1541
+f 1542 1523 1522
+f 1545 1523 1542
+f 1546 1547 1543
+f 1543 1547 1544
+f 1544 1548 1545
+f 1547 1548 1544
+f 1545 1521 1523
+f 1545 1524 1521
+f 1548 1525 1545
+f 1545 1525 1524
+f 1549 1550 1536
+f 1549 1536 1537
+f 1532 1539 1533
+f 1531 1539 1532
+f 1551 1537 1539
+f 1551 1549 1537
+f 1530 1551 1539
+f 1530 1539 1531
+f 1540 1546 1543
+f 1552 1546 1540
+f 1536 1550 1552
+f 1536 1540 1534
+f 1536 1552 1540
+f 1552 1550 1553
+f 1553 1549 1554
+f 1550 1549 1553
+f 1549 1551 1554
+f 1554 1530 1527
+f 1551 1530 1554
+f 1546 1553 1547
+f 1552 1553 1546
+f 1547 1554 1548
+f 1553 1554 1547
+f 1548 1527 1525
+f 1554 1527 1548
+f 1555 1556 1557
+f 1558 1556 1555
+f 1559 1556 1558
+f 1560 1561 1562
+f 1563 1561 1560
+f 1556 1561 1563
+f 1564 1565 1561
+f 1565 1566 1561
+f 1561 1567 1562
+f 1566 1567 1561
+f 1559 1561 1556
+f 1568 1569 1570
+f 1570 1569 1571
+f 1571 1572 1573
+f 1569 1572 1571
+f 1573 1562 1567
+f 1572 1562 1573
+f 1574 1575 1568
+f 1568 1575 1569
+f 1572 1560 1562
+f 1572 1563 1560
+f 1569 1576 1572
+f 1575 1576 1569
+f 1576 1556 1572
+f 1572 1556 1563
+f 1577 1578 1574
+f 1574 1578 1575
+f 1575 1579 1576
+f 1578 1579 1575
+f 1576 1557 1556
+f 1579 1557 1576
+f 1580 1581 1577
+f 1577 1581 1578
+f 1578 1582 1579
+f 1581 1582 1578
+f 1579 1555 1557
+f 1579 1558 1555
+f 1582 1559 1579
+f 1579 1559 1558
+f 1583 1584 1570
+f 1583 1570 1571
+f 1566 1573 1567
+f 1565 1573 1566
+f 1585 1571 1573
+f 1585 1583 1571
+f 1564 1585 1573
+f 1564 1573 1565
+f 1574 1580 1577
+f 1586 1580 1574
+f 1570 1584 1586
+f 1570 1574 1568
+f 1570 1586 1574
+f 1586 1584 1587
+f 1587 1583 1588
+f 1584 1583 1587
+f 1583 1585 1588
+f 1588 1564 1561
+f 1585 1564 1588
+f 1580 1587 1581
+f 1586 1587 1580
+f 1581 1588 1582
+f 1587 1588 1581
+f 1582 1561 1559
+f 1588 1561 1582
+f 1589 1590 1591
+f 1592 1590 1589
+f 1593 1590 1592
+f 1594 1595 1596
+f 1597 1595 1594
+f 1590 1595 1597
+f 1598 1599 1595
+f 1599 1600 1595
+f 1595 1601 1596
+f 1600 1601 1595
+f 1593 1595 1590
+f 1602 1603 1604
+f 1604 1603 1605
+f 1605 1606 1607
+f 1603 1606 1605
+f 1607 1596 1601
+f 1606 1596 1607
+f 1608 1609 1602
+f 1602 1609 1603
+f 1606 1594 1596
+f 1603 1610 1606
+f 1609 1610 1603
+f 1606 1597 1594
+f 1610 1590 1606
+f 1606 1590 1597
+f 1611 1612 1608
+f 1608 1612 1609
+f 1609 1613 1610
+f 1612 1613 1609
+f 1610 1591 1590
+f 1613 1591 1610
+f 1614 1615 1611
+f 1611 1615 1612
+f 1612 1616 1613
+f 1615 1616 1612
+f 1613 1589 1591
+f 1613 1592 1589
+f 1616 1593 1613
+f 1613 1593 1592
+f 1617 1618 1604
+f 1617 1604 1605
+f 1600 1607 1601
+f 1599 1607 1600
+f 1619 1605 1607
+f 1619 1617 1605
+f 1598 1619 1607
+f 1598 1607 1599
+f 1608 1614 1611
+f 1620 1614 1608
+f 1604 1618 1620
+f 1604 1608 1602
+f 1604 1620 1608
+f 1620 1618 1621
+f 1621 1617 1622
+f 1618 1617 1621
+f 1617 1619 1622
+f 1622 1598 1595
+f 1619 1598 1622
+f 1614 1621 1615
+f 1620 1621 1614
+f 1615 1622 1616
+f 1621 1622 1615
+f 1616 1595 1593
+f 1622 1595 1616
+f 1623 1624 1625
+f 1626 1624 1623
+f 1627 1624 1626
+f 1628 1629 1630
+f 1631 1629 1628
+f 1624 1629 1631
+f 1632 1633 1629
+f 1633 1634 1629
+f 1629 1635 1630
+f 1634 1635 1629
+f 1627 1629 1624
+f 1636 1637 1638
+f 1638 1637 1639
+f 1639 1640 1641
+f 1637 1640 1639
+f 1641 1630 1635
+f 1640 1630 1641
+f 1642 1643 1636
+f 1636 1643 1637
+f 1640 1628 1630
+f 1637 1644 1640
+f 1643 1644 1637
+f 1640 1631 1628
+f 1644 1624 1640
+f 1640 1624 1631
+f 1645 1646 1642
+f 1642 1646 1643
+f 1643 1647 1644
+f 1646 1647 1643
+f 1644 1625 1624
+f 1647 1625 1644
+f 1648 1649 1645
+f 1645 1649 1646
+f 1646 1650 1647
+f 1649 1650 1646
+f 1647 1623 1625
+f 1647 1626 1623
+f 1650 1627 1647
+f 1647 1627 1626
+f 1651 1652 1638
+f 1651 1638 1639
+f 1634 1641 1635
+f 1653 1639 1641
+f 1653 1651 1639
+f 1633 1641 1634
+f 1632 1653 1641
+f 1632 1641 1633
+f 1642 1648 1645
+f 1654 1648 1642
+f 1638 1652 1654
+f 1638 1642 1636
+f 1638 1654 1642
+f 1654 1652 1655
+f 1655 1651 1656
+f 1652 1651 1655
+f 1651 1653 1656
+f 1656 1632 1629
+f 1653 1632 1656
+f 1648 1655 1649
+f 1654 1655 1648
+f 1649 1656 1650
+f 1655 1656 1649
+f 1650 1629 1627
+f 1656 1629 1650
+f 1657 1658 1659
+f 1660 1658 1657
+f 1661 1658 1660
+f 1662 1663 1664
+f 1665 1663 1662
+f 1658 1663 1665
+f 1666 1667 1663
+f 1667 1668 1663
+f 1663 1669 1664
+f 1668 1669 1663
+f 1661 1663 1658
+f 1670 1671 1672
+f 1672 1671 1673
+f 1673 1674 1675
+f 1671 1674 1673
+f 1675 1664 1669
+f 1674 1664 1675
+f 1676 1677 1670
+f 1670 1677 1671
+f 1674 1662 1664
+f 1671 1678 1674
+f 1677 1678 1671
+f 1674 1665 1662
+f 1678 1658 1674
+f 1674 1658 1665
+f 1679 1680 1676
+f 1676 1680 1677
+f 1677 1681 1678
+f 1680 1681 1677
+f 1678 1659 1658
+f 1681 1659 1678
+f 1682 1683 1679
+f 1679 1683 1680
+f 1680 1684 1681
+f 1683 1684 1680
+f 1681 1657 1659
+f 1681 1660 1657
+f 1684 1661 1681
+f 1681 1661 1660
+f 1685 1686 1672
+f 1685 1672 1673
+f 1668 1675 1669
+f 1687 1673 1675
+f 1687 1685 1673
+f 1667 1675 1668
+f 1666 1687 1675
+f 1666 1675 1667
+f 1676 1682 1679
+f 1688 1682 1676
+f 1672 1686 1688
+f 1672 1676 1670
+f 1672 1688 1676
+f 1688 1686 1689
+f 1689 1685 1690
+f 1686 1685 1689
+f 1685 1687 1690
+f 1690 1666 1663
+f 1687 1666 1690
+f 1682 1689 1683
+f 1688 1689 1682
+f 1683 1690 1684
+f 1689 1690 1683
+f 1684 1663 1661
+f 1690 1663 1684
+f 1691 1692 1693
+f 1694 1692 1691
+f 1695 1692 1694
+f 1696 1697 1698
+f 1699 1697 1696
+f 1692 1697 1699
+f 1700 1701 1697
+f 1701 1702 1697
+f 1697 1703 1698
+f 1702 1703 1697
+f 1695 1697 1692
+f 1704 1705 1706
+f 1706 1705 1707
+f 1707 1708 1709
+f 1705 1708 1707
+f 1709 1698 1703
+f 1708 1698 1709
+f 1710 1711 1704
+f 1704 1711 1705
+f 1705 1712 1708
+f 1711 1712 1705
+f 1708 1696 1698
+f 1708 1699 1696
+f 1712 1692 1708
+f 1708 1692 1699
+f 1713 1714 1710
+f 1710 1714 1711
+f 1711 1715 1712
+f 1714 1715 1711
+f 1712 1693 1692
+f 1715 1693 1712
+f 1716 1717 1713
+f 1713 1717 1714
+f 1714 1718 1715
+f 1717 1718 1714
+f 1715 1691 1693
+f 1715 1694 1691
+f 1718 1695 1715
+f 1715 1695 1694
+f 1719 1720 1706
+f 1719 1706 1707
+f 1702 1709 1703
+f 1721 1707 1709
+f 1721 1719 1707
+f 1701 1709 1702
+f 1700 1721 1709
+f 1700 1709 1701
+f 1710 1716 1713
+f 1722 1716 1710
+f 1706 1720 1722
+f 1706 1710 1704
+f 1706 1722 1710
+f 1722 1720 1723
+f 1723 1719 1724
+f 1720 1719 1723
+f 1719 1721 1724
+f 1724 1700 1697
+f 1721 1700 1724
+f 1716 1723 1717
+f 1722 1723 1716
+f 1717 1724 1718
+f 1723 1724 1717
+f 1718 1697 1695
+f 1724 1697 1718
+f 1725 1726 1727
+f 1728 1726 1725
+f 1729 1726 1728
+f 1730 1731 1732
+f 1733 1731 1730
+f 1726 1731 1733
+f 1734 1735 1731
+f 1735 1736 1731
+f 1731 1737 1732
+f 1736 1737 1731
+f 1729 1731 1726
+f 1738 1739 1740
+f 1738 1740 1741
+f 1742 1741 1743
+f 1742 1738 1741
+f 1736 1743 1737
+f 1735 1743 1736
+f 1734 1742 1743
+f 1734 1743 1735
+f 1744 1745 1740
+f 1740 1745 1741
+f 1741 1746 1743
+f 1745 1746 1741
+f 1743 1732 1737
+f 1746 1732 1743
+f 1747 1748 1744
+f 1744 1748 1745
+f 1745 1749 1746
+f 1748 1749 1745
+f 1746 1730 1732
+f 1746 1733 1730
+f 1749 1726 1746
+f 1746 1726 1733
+f 1750 1751 1747
+f 1747 1751 1748
+f 1748 1752 1749
+f 1751 1752 1748
+f 1749 1727 1726
+f 1752 1727 1749
+f 1753 1754 1750
+f 1750 1754 1751
+f 1751 1755 1752
+f 1754 1755 1751
+f 1752 1725 1727
+f 1752 1728 1725
+f 1755 1729 1752
+f 1752 1729 1728
+f 1747 1753 1750
+f 1756 1753 1747
+f 1740 1739 1756
+f 1740 1747 1744
+f 1740 1756 1747
+f 1756 1739 1757
+f 1757 1738 1758
+f 1739 1738 1757
+f 1738 1742 1758
+f 1758 1734 1731
+f 1742 1734 1758
+f 1753 1757 1754
+f 1756 1757 1753
+f 1754 1758 1755
+f 1757 1758 1754
+f 1755 1731 1729
+f 1758 1731 1755
+f 1759 1760 1761
+f 1762 1760 1759
+f 1763 1760 1762
+f 1764 1765 1766
+f 1767 1765 1764
+f 1760 1765 1767
+f 1768 1769 1765
+f 1769 1770 1765
+f 1765 1771 1766
+f 1770 1771 1765
+f 1763 1765 1760
+f 1772 1773 1774
+f 1772 1774 1775
+f 1776 1775 1777
+f 1776 1772 1775
+f 1770 1777 1771
+f 1769 1777 1770
+f 1768 1776 1777
+f 1768 1777 1769
+f 1778 1779 1774
+f 1774 1779 1775
+f 1775 1780 1777
+f 1779 1780 1775
+f 1777 1766 1771
+f 1780 1766 1777
+f 1781 1782 1778
+f 1778 1782 1779
+f 1779 1783 1780
+f 1782 1783 1779
+f 1780 1764 1766
+f 1780 1767 1764
+f 1783 1760 1780
+f 1780 1760 1767
+f 1784 1785 1781
+f 1781 1785 1782
+f 1782 1786 1783
+f 1785 1786 1782
+f 1783 1761 1760
+f 1786 1761 1783
+f 1787 1788 1784
+f 1784 1788 1785
+f 1785 1789 1786
+f 1788 1789 1785
+f 1786 1759 1761
+f 1786 1762 1759
+f 1789 1763 1786
+f 1786 1763 1762
+f 1781 1787 1784
+f 1790 1787 1781
+f 1774 1773 1790
+f 1774 1781 1778
+f 1774 1790 1781
+f 1790 1773 1791
+f 1791 1772 1792
+f 1773 1772 1791
+f 1772 1776 1792
+f 1792 1768 1765
+f 1776 1768 1792
+f 1787 1791 1788
+f 1790 1791 1787
+f 1788 1792 1789
+f 1791 1792 1788
+f 1789 1765 1763
+f 1792 1765 1789
+f 1793 1794 1795
+f 1796 1794 1793
+f 1797 1794 1796
+f 1798 1799 1800
+f 1801 1799 1798
+f 1794 1799 1801
+f 1802 1803 1799
+f 1803 1804 1799
+f 1799 1805 1800
+f 1804 1805 1799
+f 1797 1799 1794
+f 1806 1807 1808
+f 1806 1808 1809
+f 1810 1809 1811
+f 1810 1806 1809
+f 1804 1811 1805
+f 1803 1811 1804
+f 1802 1810 1811
+f 1802 1811 1803
+f 1812 1813 1808
+f 1808 1813 1809
+f 1809 1814 1811
+f 1813 1814 1809
+f 1811 1800 1805
+f 1814 1800 1811
+f 1815 1816 1812
+f 1812 1816 1813
+f 1813 1817 1814
+f 1816 1817 1813
+f 1814 1798 1800
+f 1814 1801 1798
+f 1817 1794 1814
+f 1814 1794 1801
+f 1818 1819 1815
+f 1815 1819 1816
+f 1816 1820 1817
+f 1819 1820 1816
+f 1817 1795 1794
+f 1820 1795 1817
+f 1821 1822 1818
+f 1818 1822 1819
+f 1819 1823 1820
+f 1822 1823 1819
+f 1820 1793 1795
+f 1820 1796 1793
+f 1823 1797 1820
+f 1820 1797 1796
+f 1815 1821 1818
+f 1824 1821 1815
+f 1808 1807 1824
+f 1808 1815 1812
+f 1808 1824 1815
+f 1824 1807 1825
+f 1825 1806 1826
+f 1807 1806 1825
+f 1806 1810 1826
+f 1826 1802 1799
+f 1810 1802 1826
+f 1821 1825 1822
+f 1824 1825 1821
+f 1822 1826 1823
+f 1825 1826 1822
+f 1823 1799 1797
+f 1826 1799 1823
+f 1827 1828 1829
+f 1830 1828 1827
+f 1831 1828 1830
+f 1832 1833 1834
+f 1835 1833 1832
+f 1828 1833 1835
+f 1836 1837 1833
+f 1837 1838 1833
+f 1833 1839 1834
+f 1838 1839 1833
+f 1831 1833 1828
+f 1840 1841 1842
+f 1840 1842 1843
+f 1844 1843 1845
+f 1844 1840 1843
+f 1838 1845 1839
+f 1837 1845 1838
+f 1836 1844 1845
+f 1836 1845 1837
+f 1846 1847 1842
+f 1842 1847 1843
+f 1843 1848 1845
+f 1847 1848 1843
+f 1845 1834 1839
+f 1848 1834 1845
+f 1849 1850 1846
+f 1846 1850 1847
+f 1847 1851 1848
+f 1850 1851 1847
+f 1848 1832 1834
+f 1848 1835 1832
+f 1851 1828 1848
+f 1848 1828 1835
+f 1852 1853 1849
+f 1849 1853 1850
+f 1850 1854 1851
+f 1853 1854 1850
+f 1851 1829 1828
+f 1854 1829 1851
+f 1855 1856 1852
+f 1852 1856 1853
+f 1853 1857 1854
+f 1856 1857 1853
+f 1854 1827 1829
+f 1854 1830 1827
+f 1857 1831 1854
+f 1854 1831 1830
+f 1849 1855 1852
+f 1858 1855 1849
+f 1842 1841 1858
+f 1842 1849 1846
+f 1842 1858 1849
+f 1858 1841 1859
+f 1859 1840 1860
+f 1841 1840 1859
+f 1840 1844 1860
+f 1860 1836 1833
+f 1844 1836 1860
+f 1855 1859 1856
+f 1858 1859 1855
+f 1856 1860 1857
+f 1859 1860 1856
+f 1857 1833 1831
+f 1860 1833 1857
+f 1861 1862 1863
+f 1864 1862 1861
+f 1865 1862 1864
+f 1866 1867 1868
+f 1869 1867 1866
+f 1862 1867 1869
+f 1870 1871 1867
+f 1871 1872 1867
+f 1867 1873 1868
+f 1872 1873 1867
+f 1865 1867 1862
+f 1874 1875 1876
+f 1874 1876 1877
+f 1878 1877 1879
+f 1878 1874 1877
+f 1872 1879 1873
+f 1871 1879 1872
+f 1870 1878 1879
+f 1870 1879 1871
+f 1880 1881 1876
+f 1876 1881 1877
+f 1877 1882 1879
+f 1881 1882 1877
+f 1879 1868 1873
+f 1882 1868 1879
+f 1883 1884 1880
+f 1880 1884 1881
+f 1881 1885 1882
+f 1884 1885 1881
+f 1882 1866 1868
+f 1882 1869 1866
+f 1885 1862 1882
+f 1882 1862 1869
+f 1886 1887 1883
+f 1883 1887 1884
+f 1884 1888 1885
+f 1887 1888 1884
+f 1885 1863 1862
+f 1888 1863 1885
+f 1889 1890 1886
+f 1886 1890 1887
+f 1887 1891 1888
+f 1890 1891 1887
+f 1888 1861 1863
+f 1888 1864 1861
+f 1891 1865 1888
+f 1888 1865 1864
+f 1883 1889 1886
+f 1892 1889 1883
+f 1876 1875 1892
+f 1876 1883 1880
+f 1876 1892 1883
+f 1892 1875 1893
+f 1893 1874 1894
+f 1875 1874 1893
+f 1874 1878 1894
+f 1894 1870 1867
+f 1878 1870 1894
+f 1889 1893 1890
+f 1892 1893 1889
+f 1890 1894 1891
+f 1893 1894 1890
+f 1891 1867 1865
+f 1894 1867 1891
+f 1895 1896 1897
+f 1898 1896 1895
+f 1899 1896 1898
+f 1900 1901 1902
+f 1903 1901 1900
+f 1896 1901 1903
+f 1904 1905 1901
+f 1905 1906 1901
+f 1901 1907 1902
+f 1906 1907 1901
+f 1899 1901 1896
+f 1908 1909 1910
+f 1908 1910 1911
+f 1912 1911 1913
+f 1912 1908 1911
+f 1906 1913 1907
+f 1905 1913 1906
+f 1904 1912 1913
+f 1904 1913 1905
+f 1914 1915 1910
+f 1910 1915 1911
+f 1911 1916 1913
+f 1915 1916 1911
+f 1913 1902 1907
+f 1916 1902 1913
+f 1917 1918 1914
+f 1914 1918 1915
+f 1915 1919 1916
+f 1918 1919 1915
+f 1916 1900 1902
+f 1916 1903 1900
+f 1919 1896 1916
+f 1916 1896 1903
+f 1920 1921 1917
+f 1917 1921 1918
+f 1918 1922 1919
+f 1921 1922 1918
+f 1919 1897 1896
+f 1922 1897 1919
+f 1923 1924 1920
+f 1920 1924 1921
+f 1921 1925 1922
+f 1924 1925 1921
+f 1922 1895 1897
+f 1922 1898 1895
+f 1925 1899 1922
+f 1922 1899 1898
+f 1917 1923 1920
+f 1926 1923 1917
+f 1910 1909 1926
+f 1910 1917 1914
+f 1910 1926 1917
+f 1926 1909 1927
+f 1927 1908 1928
+f 1909 1908 1927
+f 1908 1912 1928
+f 1928 1904 1901
+f 1912 1904 1928
+f 1923 1927 1924
+f 1926 1927 1923
+f 1924 1928 1925
+f 1927 1928 1924
+f 1925 1901 1899
+f 1928 1901 1925
+f 1929 1930 1931
+f 1932 1930 1929
+f 1933 1930 1932
+f 1934 1935 1936
+f 1937 1935 1934
+f 1930 1935 1937
+f 1938 1939 1935
+f 1939 1940 1935
+f 1935 1941 1936
+f 1940 1941 1935
+f 1933 1935 1930
+f 1942 1943 1944
+f 1942 1944 1945
+f 1946 1945 1947
+f 1946 1942 1945
+f 1940 1947 1941
+f 1939 1947 1940
+f 1938 1946 1947
+f 1938 1947 1939
+f 1948 1949 1944
+f 1944 1949 1945
+f 1945 1950 1947
+f 1949 1950 1945
+f 1947 1936 1941
+f 1950 1936 1947
+f 1951 1952 1948
+f 1948 1952 1949
+f 1949 1953 1950
+f 1952 1953 1949
+f 1950 1934 1936
+f 1950 1937 1934
+f 1953 1930 1950
+f 1950 1930 1937
+f 1954 1955 1951
+f 1951 1955 1952
+f 1952 1956 1953
+f 1955 1956 1952
+f 1953 1931 1930
+f 1956 1931 1953
+f 1957 1958 1954
+f 1954 1958 1955
+f 1955 1959 1956
+f 1958 1959 1955
+f 1956 1929 1931
+f 1956 1932 1929
+f 1959 1933 1956
+f 1956 1933 1932
+f 1951 1957 1954
+f 1960 1957 1951
+f 1944 1943 1960
+f 1944 1951 1948
+f 1944 1960 1951
+f 1960 1943 1961
+f 1961 1942 1962
+f 1943 1942 1961
+f 1942 1946 1962
+f 1962 1938 1935
+f 1946 1938 1962
+f 1957 1961 1958
+f 1960 1961 1957
+f 1958 1962 1959
+f 1961 1962 1958
+f 1959 1935 1933
+f 1962 1935 1959
+f 1963 1964 1965
+f 1966 1964 1963
+f 1967 1964 1966
+f 1968 1969 1970
+f 1971 1969 1968
+f 1964 1969 1971
+f 1972 1973 1969
+f 1973 1974 1969
+f 1969 1975 1970
+f 1974 1975 1969
+f 1967 1969 1964
+f 1976 1977 1978
+f 1976 1978 1979
+f 1980 1979 1981
+f 1980 1976 1979
+f 1974 1981 1975
+f 1973 1981 1974
+f 1972 1980 1981
+f 1972 1981 1973
+f 1982 1983 1978
+f 1978 1983 1979
+f 1979 1984 1981
+f 1983 1984 1979
+f 1981 1970 1975
+f 1984 1970 1981
+f 1985 1986 1982
+f 1982 1986 1983
+f 1983 1987 1984
+f 1986 1987 1983
+f 1984 1968 1970
+f 1984 1971 1968
+f 1987 1964 1984
+f 1984 1964 1971
+f 1988 1989 1985
+f 1985 1989 1986
+f 1986 1990 1987
+f 1989 1990 1986
+f 1987 1965 1964
+f 1990 1965 1987
+f 1991 1992 1988
+f 1988 1992 1989
+f 1989 1993 1990
+f 1992 1993 1989
+f 1990 1963 1965
+f 1990 1966 1963
+f 1993 1967 1990
+f 1990 1967 1966
+f 1985 1991 1988
+f 1994 1991 1985
+f 1978 1977 1994
+f 1978 1985 1982
+f 1978 1994 1985
+f 1994 1977 1995
+f 1995 1976 1996
+f 1977 1976 1995
+f 1976 1980 1996
+f 1996 1972 1969
+f 1980 1972 1996
+f 1991 1995 1992
+f 1994 1995 1991
+f 1992 1996 1993
+f 1995 1996 1992
+f 1993 1969 1967
+f 1996 1969 1993
+f 1997 1998 1999
+f 2000 1998 1997
+f 2001 1998 2000
+f 2002 2003 2004
+f 2005 2003 2002
+f 1998 2003 2005
+f 2006 2007 2003
+f 2007 2008 2003
+f 2003 2009 2004
+f 2008 2009 2003
+f 2001 2003 1998
+f 2010 2011 2012
+f 2010 2012 2013
+f 2014 2013 2015
+f 2014 2010 2013
+f 2008 2015 2009
+f 2007 2015 2008
+f 2006 2014 2015
+f 2006 2015 2007
+f 2016 2017 2012
+f 2012 2017 2013
+f 2013 2018 2015
+f 2017 2018 2013
+f 2015 2004 2009
+f 2018 2004 2015
+f 2019 2020 2016
+f 2016 2020 2017
+f 2017 2021 2018
+f 2020 2021 2017
+f 2018 2002 2004
+f 2018 2005 2002
+f 2021 1998 2018
+f 2018 1998 2005
+f 2022 2023 2019
+f 2019 2023 2020
+f 2020 2024 2021
+f 2023 2024 2020
+f 2021 1999 1998
+f 2024 1999 2021
+f 2025 2026 2022
+f 2022 2026 2023
+f 2023 2027 2024
+f 2026 2027 2023
+f 2024 1997 1999
+f 2024 2000 1997
+f 2027 2001 2024
+f 2024 2001 2000
+f 2019 2025 2022
+f 2028 2025 2019
+f 2012 2011 2028
+f 2012 2019 2016
+f 2012 2028 2019
+f 2028 2011 2029
+f 2029 2010 2030
+f 2011 2010 2029
+f 2010 2014 2030
+f 2030 2006 2003
+f 2014 2006 2030
+f 2025 2029 2026
+f 2028 2029 2025
+f 2026 2030 2027
+f 2029 2030 2026
+f 2027 2003 2001
+f 2030 2003 2027
+f 2031 2032 2033
+f 2034 2032 2031
+f 2035 2032 2034
+f 2032 2036 2037
+f 2038 2036 2032
+f 2037 2039 2040
+f 2036 2039 2037
+f 2040 2041 2042
+f 2039 2041 2040
+f 2035 2038 2032
+f 2043 2044 2045
+f 2043 2045 2046
+f 2047 2046 2048
+f 2047 2043 2046
+f 2039 2048 2041
+f 2036 2048 2039
+f 2038 2047 2048
+f 2038 2048 2036
+f 2049 2050 2045
+f 2045 2050 2046
+f 2046 2051 2048
+f 2050 2051 2046
+f 2048 2042 2041
+f 2051 2042 2048
+f 2052 2053 2049
+f 2049 2053 2050
+f 2050 2054 2051
+f 2053 2054 2050
+f 2051 2040 2042
+f 2051 2037 2040
+f 2054 2032 2051
+f 2051 2032 2037
+f 2055 2056 2052
+f 2052 2056 2053
+f 2053 2057 2054
+f 2056 2057 2053
+f 2054 2033 2032
+f 2057 2033 2054
+f 2058 2059 2055
+f 2055 2059 2056
+f 2056 2060 2057
+f 2059 2060 2056
+f 2057 2031 2033
+f 2057 2034 2031
+f 2060 2035 2057
+f 2057 2035 2034
+f 2058 2043 2059
+f 2044 2043 2058
+f 2059 2047 2060
+f 2043 2047 2059
+f 2060 2038 2035
+f 2047 2038 2060
+f 2052 2058 2055
+f 2044 2058 2052
+f 2045 2052 2049
+f 2045 2044 2052
+f 2061 2062 2063
+f 2064 2065 2061
+f 2066 2064 2061
+f 2066 2061 2063
+f 2067 2068 2069
+f 2069 2068 2070
+f 2071 2068 2067
+f 2068 2072 2070
+f 2070 2066 2063
+f 2072 2066 2070
+f 2067 2069 2073
+f 2073 2069 2074
+f 2074 2070 2075
+f 2069 2070 2074
+f 2070 2062 2075
+f 2070 2063 2062
+f 2073 2074 2076
+f 2076 2074 2077
+f 2077 2075 2078
+f 2074 2075 2077
+f 2078 2062 2061
+f 2075 2062 2078
+f 2076 2077 2079
+f 2079 2077 2080
+f 2077 2081 2080
+f 2077 2078 2081
+f 2078 2065 2081
+f 2078 2061 2065
+f 2079 2080 2082
+f 2082 2080 2083
+f 2083 2081 2084
+f 2080 2081 2083
+f 2084 2065 2064
+f 2081 2065 2084
+f 2068 2071 2082
+f 2068 2082 2083
+f 2084 2068 2083
+f 2072 2068 2084
+f 2064 2072 2084
+f 2066 2072 2064
+f 2076 2067 2073
+f 2071 2067 2076
+f 2082 2076 2079
+f 2082 2071 2076
+f 2085 2086 2087
+f 2088 2089 2085
+f 2090 2088 2085
+f 2090 2085 2087
+f 2091 2088 2090
+f 2092 2093 2094
+f 2094 2093 2095
+f 2095 2096 2097
+f 2093 2096 2095
+f 2096 2086 2097
+f 2096 2087 2086
+f 2094 2095 2098
+f 2098 2095 2099
+f 2099 2097 2100
+f 2095 2097 2099
+f 2100 2086 2085
+f 2097 2086 2100
+f 2098 2099 2101
+f 2101 2099 2102
+f 2099 2103 2102
+f 2099 2100 2103
+f 2100 2089 2103
+f 2100 2085 2089
+f 2101 2102 2104
+f 2104 2102 2105
+f 2105 2103 2106
+f 2102 2103 2105
+f 2106 2089 2088
+f 2103 2089 2106
+f 2107 2108 2104
+f 2107 2104 2105
+f 2109 2105 2106
+f 2109 2107 2105
+f 2088 2109 2106
+f 2091 2109 2088
+f 2098 2092 2094
+f 2110 2092 2098
+f 2104 2108 2110
+f 2104 2098 2101
+f 2104 2110 2098
+f 2092 2111 2093
+f 2093 2111 2096
+f 2110 2111 2092
+f 2096 2112 2087
+f 2111 2112 2096
+f 2112 2090 2087
+f 2110 2108 2111
+f 2108 2107 2111
+f 2111 2109 2112
+f 2107 2109 2111
+f 2112 2091 2090
+f 2109 2091 2112
+f 2113 2114 2115
+f 2116 2117 2113
+f 2118 2116 2113
+f 2118 2113 2115
+f 2119 2116 2118
+f 2120 2121 2122
+f 2122 2121 2123
+f 2123 2124 2125
+f 2121 2124 2123
+f 2124 2114 2125
+f 2124 2115 2114
+f 2122 2123 2126
+f 2126 2123 2127
+f 2127 2125 2128
+f 2123 2125 2127
+f 2128 2114 2113
+f 2125 2114 2128
+f 2126 2127 2129
+f 2129 2127 2130
+f 2127 2131 2130
+f 2127 2128 2131
+f 2128 2117 2131
+f 2128 2113 2117
+f 2129 2130 2132
+f 2132 2130 2133
+f 2133 2131 2134
+f 2130 2131 2133
+f 2134 2117 2116
+f 2131 2117 2134
+f 2135 2136 2132
+f 2135 2132 2133
+f 2137 2133 2134
+f 2137 2135 2133
+f 2116 2137 2134
+f 2119 2137 2116
+f 2126 2120 2122
+f 2138 2120 2126
+f 2132 2136 2138
+f 2132 2126 2129
+f 2132 2138 2126
+f 2120 2139 2121
+f 2138 2139 2120
+f 2121 2140 2124
+f 2124 2140 2115
+f 2139 2140 2121
+f 2140 2118 2115
+f 2138 2136 2139
+f 2136 2135 2139
+f 2139 2137 2140
+f 2135 2137 2139
+f 2140 2119 2118
+f 2137 2119 2140
+f 2141 2142 2143
+f 2144 2145 2141
+f 2146 2144 2141
+f 2146 2141 2143
+f 2147 2144 2146
+f 2148 2149 2150
+f 2150 2149 2151
+f 2151 2152 2153
+f 2149 2152 2151
+f 2152 2142 2153
+f 2152 2143 2142
+f 2150 2151 2154
+f 2154 2151 2155
+f 2155 2153 2156
+f 2151 2153 2155
+f 2156 2142 2141
+f 2153 2142 2156
+f 2154 2155 2157
+f 2157 2155 2158
+f 2158 2156 2159
+f 2155 2156 2158
+f 2156 2145 2159
+f 2156 2141 2145
+f 2157 2158 2160
+f 2160 2158 2161
+f 2161 2159 2162
+f 2158 2159 2161
+f 2162 2145 2144
+f 2159 2145 2162
+f 2163 2164 2160
+f 2163 2160 2161
+f 2165 2161 2162
+f 2165 2163 2161
+f 2144 2165 2162
+f 2147 2165 2144
+f 2154 2148 2150
+f 2166 2148 2154
+f 2160 2164 2166
+f 2160 2154 2157
+f 2160 2166 2154
+f 2148 2167 2149
+f 2149 2167 2152
+f 2166 2167 2148
+f 2152 2168 2143
+f 2167 2168 2152
+f 2168 2146 2143
+f 2166 2164 2167
+f 2164 2163 2167
+f 2167 2165 2168
+f 2163 2165 2167
+f 2168 2147 2146
+f 2165 2147 2168
+f 2169 2170 2171
+f 2172 2173 2169
+f 2174 2172 2169
+f 2174 2169 2171
+f 2175 2172 2174
+f 2176 2177 2178
+f 2178 2177 2179
+f 2177 2180 2179
+f 2177 2181 2180
+f 2181 2170 2180
+f 2181 2171 2170
+f 2178 2179 2182
+f 2182 2179 2183
+f 2183 2180 2184
+f 2179 2180 2183
+f 2184 2170 2169
+f 2180 2170 2184
+f 2182 2183 2185
+f 2185 2183 2186
+f 2183 2187 2186
+f 2183 2184 2187
+f 2184 2173 2187
+f 2184 2169 2173
+f 2185 2186 2188
+f 2188 2186 2189
+f 2189 2187 2190
+f 2186 2187 2189
+f 2190 2173 2172
+f 2187 2173 2190
+f 2191 2192 2188
+f 2191 2188 2189
+f 2190 2191 2189
+f 2193 2191 2190
+f 2172 2193 2190
+f 2175 2193 2172
+f 2182 2176 2178
+f 2194 2176 2182
+f 2188 2192 2194
+f 2188 2182 2185
+f 2188 2194 2182
+f 2176 2195 2177
+f 2194 2195 2176
+f 2177 2196 2181
+f 2181 2196 2171
+f 2195 2196 2177
+f 2196 2174 2171
+f 2194 2192 2195
+f 2192 2191 2195
+f 2195 2193 2196
+f 2191 2193 2195
+f 2196 2175 2174
+f 2193 2175 2196
+f 2197 2198 2199
+f 2200 2201 2197
+f 2202 2200 2197
+f 2202 2197 2199
+f 2203 2200 2202
+f 2204 2205 2206
+f 2206 2205 2207
+f 2207 2208 2209
+f 2205 2208 2207
+f 2208 2198 2209
+f 2208 2199 2198
+f 2206 2207 2210
+f 2210 2207 2211
+f 2211 2209 2212
+f 2207 2209 2211
+f 2212 2198 2197
+f 2209 2198 2212
+f 2210 2211 2213
+f 2213 2211 2214
+f 2211 2215 2214
+f 2211 2212 2215
+f 2212 2201 2215
+f 2212 2197 2201
+f 2213 2214 2216
+f 2216 2214 2217
+f 2217 2215 2218
+f 2214 2215 2217
+f 2218 2201 2200
+f 2215 2201 2218
+f 2219 2220 2216
+f 2219 2216 2217
+f 2221 2217 2218
+f 2221 2219 2217
+f 2200 2221 2218
+f 2203 2221 2200
+f 2210 2204 2206
+f 2222 2204 2210
+f 2216 2220 2222
+f 2216 2210 2213
+f 2216 2222 2210
+f 2204 2223 2205
+f 2222 2223 2204
+f 2205 2224 2208
+f 2208 2224 2199
+f 2223 2224 2205
+f 2224 2202 2199
+f 2222 2220 2223
+f 2220 2219 2223
+f 2223 2221 2224
+f 2219 2221 2223
+f 2224 2203 2202
+f 2221 2203 2224
+f 2225 2226 2227
+f 2228 2229 2225
+f 2230 2228 2225
+f 2230 2225 2227
+f 2231 2228 2230
+f 2232 2233 2234
+f 2234 2233 2235
+f 2235 2236 2237
+f 2233 2236 2235
+f 2236 2226 2237
+f 2236 2227 2226
+f 2234 2235 2238
+f 2238 2235 2239
+f 2239 2237 2240
+f 2235 2237 2239
+f 2240 2226 2225
+f 2237 2226 2240
+f 2238 2239 2241
+f 2241 2239 2242
+f 2239 2243 2242
+f 2239 2240 2243
+f 2240 2229 2243
+f 2240 2225 2229
+f 2241 2242 2244
+f 2244 2242 2245
+f 2245 2243 2246
+f 2242 2243 2245
+f 2246 2229 2228
+f 2243 2229 2246
+f 2247 2248 2244
+f 2247 2244 2245
+f 2246 2247 2245
+f 2249 2247 2246
+f 2228 2249 2246
+f 2231 2249 2228
+f 2238 2232 2234
+f 2250 2232 2238
+f 2244 2248 2250
+f 2244 2238 2241
+f 2244 2250 2238
+f 2232 2251 2233
+f 2250 2251 2232
+f 2233 2252 2236
+f 2236 2252 2227
+f 2251 2252 2233
+f 2252 2230 2227
+f 2250 2248 2251
+f 2248 2247 2251
+f 2251 2249 2252
+f 2247 2249 2251
+f 2252 2231 2230
+f 2249 2231 2252
+f 2253 2254 2255
+f 2256 2257 2253
+f 2258 2256 2253
+f 2258 2253 2255
+f 2259 2256 2258
+f 2260 2261 2262
+f 2262 2261 2263
+f 2261 2264 2263
+f 2261 2265 2264
+f 2265 2254 2264
+f 2265 2255 2254
+f 2262 2263 2266
+f 2266 2263 2267
+f 2267 2264 2268
+f 2263 2264 2267
+f 2268 2254 2253
+f 2264 2254 2268
+f 2266 2267 2269
+f 2269 2267 2270
+f 2270 2268 2271
+f 2267 2268 2270
+f 2268 2257 2271
+f 2268 2253 2257
+f 2269 2270 2272
+f 2272 2270 2273
+f 2273 2271 2274
+f 2270 2271 2273
+f 2274 2257 2256
+f 2271 2257 2274
+f 2275 2276 2272
+f 2275 2272 2273
+f 2274 2275 2273
+f 2277 2275 2274
+f 2256 2277 2274
+f 2259 2277 2256
+f 2266 2260 2262
+f 2278 2260 2266
+f 2272 2276 2278
+f 2272 2266 2269
+f 2272 2278 2266
+f 2260 2279 2261
+f 2278 2279 2260
+f 2261 2280 2265
+f 2265 2280 2255
+f 2279 2280 2261
+f 2280 2258 2255
+f 2278 2276 2279
+f 2276 2275 2279
+f 2279 2277 2280
+f 2275 2277 2279
+f 2280 2259 2258
+f 2277 2259 2280
+f 2281 2282 2283
+f 2284 2285 2281
+f 2286 2284 2281
+f 2286 2281 2283
+f 2287 2284 2286
+f 2288 2289 2290
+f 2290 2289 2291
+f 2289 2292 2291
+f 2289 2293 2292
+f 2293 2282 2292
+f 2293 2283 2282
+f 2290 2291 2294
+f 2294 2291 2295
+f 2295 2292 2296
+f 2291 2292 2295
+f 2296 2282 2281
+f 2292 2282 2296
+f 2294 2295 2297
+f 2297 2295 2298
+f 2298 2296 2299
+f 2295 2296 2298
+f 2296 2285 2299
+f 2296 2281 2285
+f 2297 2298 2300
+f 2300 2298 2301
+f 2301 2299 2302
+f 2298 2299 2301
+f 2302 2285 2284
+f 2299 2285 2302
+f 2303 2304 2300
+f 2303 2300 2301
+f 2302 2303 2301
+f 2305 2303 2302
+f 2284 2305 2302
+f 2287 2305 2284
+f 2294 2288 2290
+f 2306 2288 2294
+f 2300 2304 2306
+f 2300 2294 2297
+f 2300 2306 2294
+f 2288 2307 2289
+f 2306 2307 2288
+f 2289 2308 2293
+f 2293 2308 2283
+f 2307 2308 2289
+f 2308 2286 2283
+f 2306 2304 2307
+f 2304 2303 2307
+f 2307 2305 2308
+f 2303 2305 2307
+f 2308 2287 2286
+f 2305 2287 2308
+f 2309 2310 2311
+f 2312 2313 2309
+f 2314 2312 2309
+f 2314 2309 2311
+f 2315 2312 2314
+f 2316 2317 2318
+f 2318 2317 2319
+f 2319 2320 2321
+f 2317 2320 2319
+f 2320 2310 2321
+f 2320 2311 2310
+f 2318 2319 2322
+f 2322 2319 2323
+f 2323 2321 2324
+f 2319 2321 2323
+f 2324 2310 2309
+f 2321 2310 2324
+f 2322 2323 2325
+f 2325 2323 2326
+f 2326 2324 2327
+f 2323 2324 2326
+f 2324 2313 2327
+f 2324 2309 2313
+f 2325 2326 2328
+f 2328 2326 2329
+f 2329 2327 2330
+f 2326 2327 2329
+f 2330 2313 2312
+f 2327 2313 2330
+f 2331 2332 2328
+f 2331 2328 2329
+f 2333 2329 2330
+f 2333 2331 2329
+f 2312 2333 2330
+f 2315 2333 2312
+f 2322 2316 2318
+f 2334 2316 2322
+f 2328 2332 2334
+f 2328 2322 2325
+f 2328 2334 2322
+f 2316 2335 2317
+f 2334 2335 2316
+f 2317 2336 2320
+f 2320 2336 2311
+f 2335 2336 2317
+f 2336 2314 2311
+f 2334 2332 2335
+f 2332 2331 2335
+f 2335 2333 2336
+f 2331 2333 2335
+f 2336 2315 2314
+f 2333 2315 2336
+f 2337 2338 2339
+f 2340 2341 2337
+f 2342 2340 2337
+f 2342 2337 2339
+f 2343 2340 2342
+f 2344 2345 2346
+f 2344 2346 2347
+f 2348 2344 2347
+f 2349 2344 2348
+f 2340 2349 2348
+f 2343 2349 2340
+f 2350 2351 2352
+f 2352 2351 2353
+f 2351 2354 2353
+f 2351 2355 2354
+f 2355 2338 2354
+f 2355 2339 2338
+f 2352 2353 2356
+f 2356 2353 2357
+f 2357 2354 2358
+f 2353 2354 2357
+f 2358 2338 2337
+f 2354 2338 2358
+f 2356 2357 2359
+f 2359 2357 2360
+f 2360 2358 2361
+f 2357 2358 2360
+f 2358 2341 2361
+f 2358 2337 2341
+f 2359 2360 2346
+f 2346 2360 2347
+f 2347 2361 2348
+f 2360 2361 2347
+f 2348 2341 2340
+f 2361 2341 2348
+f 2356 2350 2352
+f 2362 2350 2356
+f 2346 2345 2362
+f 2346 2356 2359
+f 2346 2362 2356
+f 2350 2363 2351
+f 2362 2363 2350
+f 2351 2364 2355
+f 2355 2364 2339
+f 2363 2364 2351
+f 2364 2342 2339
+f 2362 2345 2363
+f 2345 2344 2363
+f 2363 2349 2364
+f 2344 2349 2363
+f 2364 2343 2342
+f 2349 2343 2364
+f 2365 2366 2367
+f 2368 2369 2365
+f 2370 2368 2365
+f 2370 2365 2367
+f 2371 2368 2370
+f 2372 2373 2374
+f 2372 2374 2375
+f 2376 2375 2377
+f 2376 2372 2375
+f 2368 2376 2377
+f 2371 2376 2368
+f 2378 2379 2380
+f 2380 2379 2381
+f 2379 2382 2381
+f 2379 2383 2382
+f 2383 2366 2382
+f 2383 2367 2366
+f 2380 2381 2384
+f 2384 2381 2385
+f 2385 2382 2386
+f 2381 2382 2385
+f 2386 2366 2365
+f 2382 2366 2386
+f 2384 2385 2387
+f 2387 2385 2388
+f 2388 2386 2389
+f 2385 2386 2388
+f 2386 2369 2389
+f 2386 2365 2369
+f 2387 2388 2374
+f 2374 2388 2375
+f 2375 2389 2377
+f 2388 2389 2375
+f 2377 2369 2368
+f 2389 2369 2377
+f 2384 2378 2380
+f 2390 2378 2384
+f 2374 2373 2390
+f 2374 2384 2387
+f 2374 2390 2384
+f 2378 2391 2379
+f 2390 2391 2378
+f 2379 2392 2383
+f 2383 2392 2367
+f 2391 2392 2379
+f 2392 2370 2367
+f 2390 2373 2391
+f 2373 2372 2391
+f 2391 2376 2392
+f 2372 2376 2391
+f 2392 2371 2370
+f 2376 2371 2392
+f 2393 2394 2395
+f 2396 2397 2393
+f 2398 2396 2393
+f 2398 2393 2395
+f 2399 2396 2398
+f 2400 2401 2402
+f 2400 2402 2403
+f 2404 2400 2403
+f 2405 2400 2404
+f 2396 2405 2404
+f 2399 2405 2396
+f 2406 2407 2408
+f 2408 2407 2409
+f 2409 2410 2411
+f 2407 2410 2409
+f 2410 2394 2411
+f 2410 2395 2394
+f 2408 2409 2412
+f 2412 2409 2413
+f 2413 2411 2414
+f 2409 2411 2413
+f 2414 2394 2393
+f 2411 2394 2414
+f 2412 2413 2415
+f 2415 2413 2416
+f 2413 2417 2416
+f 2413 2414 2417
+f 2414 2397 2417
+f 2414 2393 2397
+f 2415 2416 2402
+f 2402 2416 2403
+f 2403 2417 2404
+f 2416 2417 2403
+f 2404 2397 2396
+f 2417 2397 2404
+f 2412 2406 2408
+f 2418 2406 2412
+f 2402 2401 2418
+f 2402 2412 2415
+f 2402 2418 2412
+f 2406 2419 2407
+f 2418 2419 2406
+f 2407 2420 2410
+f 2410 2420 2395
+f 2419 2420 2407
+f 2420 2398 2395
+f 2418 2401 2419
+f 2401 2400 2419
+f 2419 2405 2420
+f 2400 2405 2419
+f 2420 2399 2398
+f 2405 2399 2420
+f 2421 2422 2423
+f 2424 2425 2421
+f 2426 2424 2421
+f 2426 2421 2423
+f 2427 2424 2426
+f 2428 2429 2430
+f 2428 2430 2431
+f 2432 2428 2431
+f 2433 2428 2432
+f 2424 2433 2432
+f 2427 2433 2424
+f 2434 2435 2436
+f 2436 2435 2437
+f 2435 2438 2437
+f 2435 2439 2438
+f 2439 2422 2438
+f 2439 2423 2422
+f 2436 2437 2440
+f 2440 2437 2441
+f 2441 2438 2442
+f 2437 2438 2441
+f 2442 2422 2421
+f 2438 2422 2442
+f 2440 2441 2443
+f 2443 2441 2444
+f 2444 2442 2445
+f 2441 2442 2444
+f 2442 2425 2445
+f 2442 2421 2425
+f 2443 2444 2430
+f 2430 2444 2431
+f 2431 2445 2432
+f 2444 2445 2431
+f 2432 2425 2424
+f 2445 2425 2432
+f 2440 2434 2436
+f 2446 2434 2440
+f 2430 2429 2446
+f 2430 2440 2443
+f 2430 2446 2440
+f 2434 2447 2435
+f 2446 2447 2434
+f 2435 2448 2439
+f 2439 2448 2423
+f 2447 2448 2435
+f 2448 2426 2423
+f 2446 2429 2447
+f 2429 2428 2447
+f 2447 2433 2448
+f 2428 2433 2447
+f 2448 2427 2426
+f 2433 2427 2448
+f 2449 2450 2451
+f 2452 2453 2449
+f 2454 2452 2449
+f 2454 2449 2451
+f 2455 2452 2454
+f 2456 2457 2458
+f 2456 2458 2459
+f 2460 2459 2461
+f 2460 2456 2459
+f 2452 2460 2461
+f 2455 2460 2452
+f 2462 2463 2464
+f 2464 2463 2465
+f 2463 2466 2465
+f 2463 2467 2466
+f 2467 2450 2466
+f 2467 2451 2450
+f 2464 2465 2468
+f 2468 2465 2469
+f 2469 2466 2470
+f 2465 2466 2469
+f 2470 2450 2449
+f 2466 2450 2470
+f 2468 2469 2471
+f 2471 2469 2472
+f 2472 2470 2473
+f 2469 2470 2472
+f 2470 2453 2473
+f 2470 2449 2453
+f 2471 2472 2458
+f 2458 2472 2459
+f 2459 2473 2461
+f 2472 2473 2459
+f 2461 2453 2452
+f 2473 2453 2461
+f 2468 2462 2464
+f 2474 2462 2468
+f 2458 2457 2474
+f 2458 2468 2471
+f 2458 2474 2468
+f 2462 2475 2463
+f 2474 2475 2462
+f 2463 2476 2467
+f 2467 2476 2451
+f 2475 2476 2463
+f 2476 2454 2451
+f 2474 2457 2475
+f 2457 2456 2475
+f 2475 2460 2476
+f 2456 2460 2475
+f 2476 2455 2454
+f 2460 2455 2476
+f 2477 2478 2479
+f 2480 2481 2477
+f 2482 2480 2477
+f 2482 2477 2479
+f 2483 2480 2482
+f 2484 2485 2486
+f 2484 2486 2487
+f 2488 2484 2487
+f 2489 2484 2488
+f 2480 2489 2488
+f 2483 2489 2480
+f 2490 2491 2492
+f 2492 2491 2493
+f 2491 2494 2493
+f 2491 2495 2494
+f 2495 2478 2494
+f 2495 2479 2478
+f 2492 2493 2496
+f 2496 2493 2497
+f 2497 2494 2498
+f 2493 2494 2497
+f 2498 2478 2477
+f 2494 2478 2498
+f 2496 2497 2499
+f 2499 2497 2500
+f 2500 2498 2501
+f 2497 2498 2500
+f 2498 2481 2501
+f 2498 2477 2481
+f 2499 2500 2486
+f 2486 2500 2487
+f 2487 2501 2488
+f 2500 2501 2487
+f 2488 2481 2480
+f 2501 2481 2488
+f 2496 2490 2492
+f 2502 2490 2496
+f 2486 2485 2502
+f 2486 2496 2499
+f 2486 2502 2496
+f 2490 2503 2491
+f 2502 2503 2490
+f 2491 2504 2495
+f 2495 2504 2479
+f 2503 2504 2491
+f 2504 2482 2479
+f 2502 2485 2503
+f 2485 2484 2503
+f 2503 2489 2504
+f 2484 2489 2503
+f 2504 2483 2482
+f 2489 2483 2504
+f 2505 2506 2507
+f 2508 2509 2505
+f 2510 2508 2505
+f 2510 2505 2507
+f 2511 2508 2510
+f 2512 2513 2514
+f 2512 2514 2515
+f 2516 2515 2517
+f 2516 2512 2515
+f 2508 2516 2517
+f 2511 2516 2508
+f 2518 2519 2520
+f 2520 2519 2521
+f 2521 2522 2523
+f 2519 2522 2521
+f 2522 2506 2523
+f 2522 2507 2506
+f 2520 2521 2524
+f 2524 2521 2525
+f 2525 2523 2526
+f 2521 2523 2525
+f 2526 2506 2505
+f 2523 2506 2526
+f 2524 2525 2527
+f 2527 2525 2528
+f 2528 2526 2529
+f 2525 2526 2528
+f 2526 2509 2529
+f 2526 2505 2509
+f 2527 2528 2514
+f 2514 2528 2515
+f 2515 2529 2517
+f 2528 2529 2515
+f 2517 2509 2508
+f 2529 2509 2517
+f 2524 2518 2520
+f 2530 2518 2524
+f 2514 2513 2530
+f 2514 2524 2527
+f 2514 2530 2524
+f 2518 2531 2519
+f 2530 2531 2518
+f 2519 2532 2522
+f 2522 2532 2507
+f 2531 2532 2519
+f 2532 2510 2507
+f 2530 2513 2531
+f 2513 2512 2531
+f 2531 2516 2532
+f 2512 2516 2531
+f 2532 2511 2510
+f 2516 2511 2532
+f 2533 2534 2535
+f 2536 2537 2533
+f 2538 2536 2533
+f 2538 2533 2535
+f 2539 2536 2538
+f 2540 2541 2542
+f 2540 2542 2543
+f 2544 2543 2545
+f 2544 2540 2543
+f 2536 2544 2545
+f 2539 2544 2536
+f 2546 2547 2548
+f 2548 2547 2549
+f 2549 2550 2551
+f 2547 2550 2549
+f 2550 2534 2551
+f 2550 2535 2534
+f 2548 2549 2552
+f 2552 2549 2553
+f 2553 2551 2554
+f 2549 2551 2553
+f 2554 2534 2533
+f 2551 2534 2554
+f 2552 2553 2555
+f 2555 2553 2556
+f 2553 2557 2556
+f 2553 2554 2557
+f 2554 2537 2557
+f 2554 2533 2537
+f 2555 2556 2542
+f 2542 2556 2543
+f 2543 2557 2545
+f 2556 2557 2543
+f 2545 2537 2536
+f 2557 2537 2545
+f 2552 2546 2548
+f 2558 2546 2552
+f 2542 2541 2558
+f 2542 2552 2555
+f 2542 2558 2552
+f 2546 2558 2547
+f 2558 2559 2547
+f 2547 2560 2550
+f 2550 2560 2535
+f 2559 2560 2547
+f 2560 2538 2535
+f 2558 2541 2559
+f 2541 2540 2559
+f 2559 2544 2560
+f 2560 2544 2538
+f 2540 2544 2559
+f 2544 2539 2538
+f 2561 2562 2563
+f 2561 2563 2564
+f 2561 2565 2562
+f 2566 2567 2568
+f 2566 2568 2569
+f 2570 2569 2571
+f 2570 2566 2569
+f 2565 2570 2571
+f 2561 2570 2565
+f 2572 2573 2567
+f 2572 2567 2566
+f 2574 2566 2570
+f 2574 2572 2566
+f 2564 2570 2561
+f 2564 2574 2570
+f 2573 2572 2575
+f 2575 2572 2576
+f 2576 2572 2568
+f 2568 2572 2569
+f 2572 2571 2569
+f 2572 2574 2571
+f 2574 2565 2571
+f 2574 2562 2565
+f 2574 2563 2562
+f 2574 2564 2563
+f 2567 2573 2575
+f 2576 2567 2575
+f 2568 2567 2576
+f 2577 2578 2579
+f 2580 2581 2577
+f 2565 2580 2577
+f 2565 2577 2579
+f 2569 2568 2582
+f 2569 2582 2583
+f 2584 2569 2583
+f 2571 2569 2584
+f 2580 2571 2584
+f 2565 2571 2580
+f 2568 2569 2585
+f 2585 2569 2586
+f 2586 2571 2587
+f 2569 2571 2586
+f 2587 2565 2579
+f 2571 2565 2587
+f 2585 2586 2588
+f 2588 2586 2589
+f 2589 2587 2590
+f 2586 2587 2589
+f 2587 2578 2590
+f 2587 2579 2578
+f 2588 2589 2591
+f 2591 2589 2592
+f 2592 2590 2593
+f 2589 2590 2592
+f 2593 2578 2577
+f 2590 2578 2593
+f 2591 2592 2594
+f 2594 2592 2595
+f 2592 2596 2595
+f 2592 2593 2596
+f 2593 2581 2596
+f 2593 2577 2581
+f 2594 2595 2582
+f 2582 2595 2583
+f 2583 2596 2584
+f 2595 2596 2583
+f 2584 2581 2580
+f 2596 2581 2584
+f 2591 2585 2588
+f 2568 2585 2591
+f 2582 2591 2594
+f 2582 2568 2591
+f 2597 2598 2599
+f 2600 2598 2597
+f 2601 2598 2600
+f 2602 2603 2604
+f 2604 2605 2606
+f 2603 2605 2604
+f 2606 2607 2598
+f 2605 2607 2606
+f 2607 2608 2598
+f 2608 2599 2598
+f 2599 2609 2610
+f 2608 2609 2599
+f 2610 2611 2612
+f 2609 2611 2610
+f 2612 2613 2614
+f 2611 2613 2612
+f 2599 2615 2597
+f 2597 2615 2600
+f 2600 2615 2601
+f 2599 2610 2615
+f 2610 2616 2615
+f 2610 2612 2616
+f 2612 2617 2616
+f 2612 2614 2617
+f 2601 2615 2598
+f 2598 2615 2618
+f 2618 2616 2619
+f 2615 2616 2618
+f 2619 2617 2620
+f 2616 2617 2619
+f 2598 2621 2606
+f 2606 2621 2604
+f 2604 2621 2602
+f 2598 2618 2621
+f 2618 2622 2621
+f 2618 2619 2622
+f 2619 2623 2622
+f 2619 2620 2623
+f 2602 2621 2603
+f 2603 2621 2624
+f 2624 2622 2625
+f 2621 2622 2624
+f 2625 2623 2626
+f 2622 2623 2625
+f 2624 2608 2607
+f 2624 2607 2605
+f 2624 2605 2603
+f 2609 2608 2624
+f 2625 2609 2624
+f 2611 2609 2625
+f 2626 2611 2625
+f 2613 2611 2626
+f 2614 2620 2617
+f 2614 2613 2620
+f 2620 2626 2623
+f 2613 2626 2620
+f 2627 2628 2629
+f 2630 2628 2627
+f 2631 2628 2630
+f 2632 2633 2628
+f 2634 2633 2632
+f 2635 2633 2634
+f 2635 2636 2633
+f 2636 2637 2633
+f 2637 2638 2633
+f 2638 2639 2633
+f 2633 2629 2628
+f 2629 2640 2627
+f 2627 2640 2630
+f 2630 2640 2631
+f 2629 2641 2640
+f 2641 2642 2640
+f 2641 2643 2642
+f 2643 2644 2642
+f 2643 2645 2644
+f 2631 2640 2628
+f 2628 2640 2646
+f 2646 2642 2647
+f 2640 2642 2646
+f 2647 2644 2648
+f 2642 2644 2647
+f 2628 2649 2632
+f 2632 2649 2634
+f 2634 2649 2635
+f 2628 2646 2649
+f 2646 2650 2649
+f 2646 2647 2650
+f 2647 2651 2650
+f 2647 2648 2651
+f 2635 2649 2636
+f 2636 2649 2652
+f 2652 2650 2653
+f 2649 2650 2652
+f 2653 2651 2654
+f 2650 2651 2653
+f 2652 2639 2638
+f 2652 2638 2637
+f 2652 2637 2636
+f 2655 2639 2652
+f 2653 2655 2652
+f 2656 2655 2653
+f 2654 2656 2653
+f 2657 2656 2654
+f 2645 2648 2644
+f 2645 2658 2648
+f 2657 2654 2658
+f 2648 2654 2651
+f 2658 2654 2648
+f 2629 2659 2641
+f 2641 2659 2643
+f 2633 2659 2629
+f 2643 2660 2645
+f 2659 2660 2643
+f 2660 2658 2645
+f 2639 2655 2633
+f 2633 2655 2659
+f 2659 2656 2660
+f 2655 2656 2659
+f 2660 2657 2658
+f 2656 2657 2660
+f 2661 2662 2663
+f 2664 2662 2661
+f 2665 2662 2664
+f 2666 2667 2662
+f 2668 2667 2666
+f 2669 2667 2668
+f 2669 2670 2667
+f 2670 2671 2667
+f 2671 2672 2667
+f 2672 2673 2667
+f 2667 2663 2662
+f 2663 2674 2661
+f 2661 2674 2664
+f 2664 2674 2665
+f 2663 2675 2674
+f 2675 2676 2674
+f 2675 2677 2676
+f 2677 2678 2676
+f 2677 2679 2678
+f 2665 2674 2662
+f 2662 2674 2680
+f 2680 2676 2681
+f 2674 2676 2680
+f 2681 2678 2682
+f 2676 2678 2681
+f 2662 2683 2666
+f 2666 2683 2668
+f 2668 2683 2669
+f 2662 2680 2683
+f 2680 2684 2683
+f 2680 2681 2684
+f 2681 2685 2684
+f 2681 2682 2685
+f 2669 2683 2670
+f 2670 2683 2686
+f 2686 2684 2687
+f 2683 2684 2686
+f 2687 2685 2688
+f 2684 2685 2687
+f 2686 2673 2672
+f 2686 2672 2671
+f 2686 2671 2670
+f 2689 2673 2686
+f 2687 2689 2686
+f 2690 2689 2687
+f 2688 2690 2687
+f 2691 2690 2688
+f 2679 2682 2678
+f 2679 2692 2682
+f 2691 2688 2692
+f 2682 2688 2685
+f 2692 2688 2682
+f 2663 2693 2675
+f 2675 2693 2677
+f 2667 2693 2663
+f 2677 2694 2679
+f 2693 2694 2677
+f 2694 2692 2679
+f 2673 2689 2667
+f 2667 2689 2693
+f 2693 2690 2694
+f 2689 2690 2693
+f 2694 2691 2692
+f 2690 2691 2694
+f 2695 2696 2697
+f 2698 2696 2695
+f 2699 2696 2698
+f 2700 2701 2696
+f 2702 2701 2700
+f 2703 2701 2702
+f 2703 2704 2701
+f 2704 2705 2701
+f 2705 2706 2701
+f 2706 2707 2701
+f 2701 2697 2696
+f 2697 2708 2695
+f 2695 2708 2698
+f 2698 2708 2699
+f 2697 2709 2708
+f 2709 2710 2708
+f 2709 2711 2710
+f 2711 2712 2710
+f 2711 2713 2712
+f 2699 2708 2696
+f 2696 2708 2714
+f 2714 2710 2715
+f 2708 2710 2714
+f 2715 2712 2716
+f 2710 2712 2715
+f 2696 2717 2700
+f 2700 2717 2702
+f 2702 2717 2703
+f 2696 2714 2717
+f 2714 2718 2717
+f 2714 2715 2718
+f 2715 2719 2718
+f 2715 2716 2719
+f 2703 2717 2704
+f 2704 2717 2720
+f 2720 2718 2721
+f 2717 2718 2720
+f 2721 2719 2722
+f 2718 2719 2721
+f 2720 2707 2706
+f 2720 2706 2705
+f 2720 2705 2704
+f 2723 2707 2720
+f 2721 2723 2720
+f 2724 2723 2721
+f 2722 2724 2721
+f 2725 2724 2722
+f 2713 2716 2712
+f 2713 2726 2716
+f 2725 2722 2726
+f 2716 2722 2719
+f 2726 2722 2716
+f 2697 2727 2709
+f 2709 2727 2711
+f 2701 2727 2697
+f 2711 2728 2713
+f 2727 2728 2711
+f 2728 2726 2713
+f 2707 2723 2701
+f 2701 2723 2727
+f 2727 2724 2728
+f 2723 2724 2727
+f 2728 2725 2726
+f 2724 2725 2728
+f 2729 2730 2731
+f 2732 2730 2729
+f 2733 2730 2732
+f 2734 2735 2730
+f 2736 2735 2734
+f 2737 2735 2736
+f 2737 2738 2735
+f 2738 2739 2735
+f 2739 2740 2735
+f 2740 2741 2735
+f 2735 2731 2730
+f 2731 2742 2729
+f 2729 2742 2732
+f 2732 2742 2733
+f 2731 2743 2742
+f 2743 2744 2742
+f 2743 2745 2744
+f 2745 2746 2744
+f 2745 2747 2746
+f 2733 2742 2730
+f 2730 2742 2748
+f 2748 2744 2749
+f 2742 2744 2748
+f 2749 2746 2750
+f 2744 2746 2749
+f 2730 2751 2734
+f 2734 2751 2736
+f 2736 2751 2737
+f 2730 2748 2751
+f 2748 2752 2751
+f 2748 2749 2752
+f 2749 2753 2752
+f 2749 2750 2753
+f 2737 2751 2738
+f 2738 2751 2754
+f 2754 2752 2755
+f 2751 2752 2754
+f 2755 2753 2756
+f 2752 2753 2755
+f 2754 2741 2740
+f 2754 2740 2739
+f 2754 2739 2738
+f 2757 2741 2754
+f 2755 2757 2754
+f 2758 2757 2755
+f 2756 2758 2755
+f 2759 2758 2756
+f 2747 2750 2746
+f 2747 2760 2750
+f 2759 2756 2760
+f 2750 2756 2753
+f 2760 2756 2750
+f 2731 2761 2743
+f 2743 2761 2745
+f 2735 2761 2731
+f 2745 2762 2747
+f 2761 2762 2745
+f 2762 2760 2747
+f 2741 2757 2735
+f 2735 2757 2761
+f 2761 2758 2762
+f 2757 2758 2761
+f 2762 2759 2760
+f 2758 2759 2762
+f 2763 2764 2765
+f 2766 2764 2763
+f 2767 2764 2766
+f 2768 2769 2764
+f 2770 2769 2768
+f 2771 2769 2770
+f 2771 2772 2769
+f 2772 2773 2769
+f 2773 2774 2769
+f 2774 2775 2769
+f 2769 2765 2764
+f 2765 2776 2763
+f 2763 2776 2766
+f 2766 2776 2767
+f 2765 2777 2776
+f 2777 2778 2776
+f 2777 2779 2778
+f 2779 2780 2778
+f 2779 2781 2780
+f 2767 2776 2764
+f 2764 2776 2782
+f 2782 2778 2783
+f 2776 2778 2782
+f 2783 2780 2784
+f 2778 2780 2783
+f 2764 2785 2768
+f 2768 2785 2770
+f 2770 2785 2771
+f 2764 2782 2785
+f 2782 2786 2785
+f 2782 2783 2786
+f 2783 2787 2786
+f 2783 2784 2787
+f 2771 2785 2772
+f 2772 2785 2788
+f 2788 2786 2789
+f 2785 2786 2788
+f 2789 2787 2790
+f 2786 2787 2789
+f 2788 2775 2774
+f 2788 2774 2773
+f 2788 2773 2772
+f 2791 2775 2788
+f 2789 2791 2788
+f 2792 2791 2789
+f 2790 2792 2789
+f 2793 2792 2790
+f 2781 2784 2780
+f 2781 2794 2784
+f 2793 2790 2794
+f 2784 2790 2787
+f 2794 2790 2784
+f 2765 2795 2777
+f 2777 2795 2779
+f 2769 2795 2765
+f 2779 2796 2781
+f 2795 2796 2779
+f 2796 2794 2781
+f 2775 2791 2769
+f 2769 2791 2795
+f 2795 2792 2796
+f 2791 2792 2795
+f 2796 2793 2794
+f 2792 2793 2796
+f 2797 2798 2799
+f 2800 2798 2797
+f 2801 2798 2800
+f 2802 2803 2798
+f 2804 2803 2802
+f 2805 2803 2804
+f 2805 2806 2803
+f 2806 2807 2803
+f 2807 2808 2803
+f 2808 2809 2803
+f 2803 2799 2798
+f 2799 2810 2797
+f 2797 2810 2800
+f 2800 2810 2801
+f 2799 2811 2810
+f 2811 2812 2810
+f 2811 2813 2812
+f 2813 2814 2812
+f 2813 2815 2814
+f 2801 2810 2798
+f 2798 2810 2816
+f 2816 2812 2817
+f 2810 2812 2816
+f 2817 2814 2818
+f 2812 2814 2817
+f 2798 2819 2802
+f 2802 2819 2804
+f 2804 2819 2805
+f 2798 2816 2819
+f 2816 2820 2819
+f 2816 2817 2820
+f 2817 2821 2820
+f 2817 2818 2821
+f 2805 2819 2806
+f 2806 2819 2822
+f 2822 2820 2823
+f 2819 2820 2822
+f 2823 2821 2824
+f 2820 2821 2823
+f 2822 2809 2808
+f 2822 2808 2807
+f 2822 2807 2806
+f 2825 2809 2822
+f 2823 2825 2822
+f 2826 2825 2823
+f 2824 2826 2823
+f 2827 2826 2824
+f 2815 2818 2814
+f 2815 2828 2818
+f 2827 2824 2828
+f 2818 2824 2821
+f 2828 2824 2818
+f 2799 2829 2811
+f 2811 2829 2813
+f 2803 2829 2799
+f 2813 2830 2815
+f 2829 2830 2813
+f 2830 2828 2815
+f 2809 2825 2803
+f 2803 2825 2829
+f 2829 2826 2830
+f 2825 2826 2829
+f 2830 2827 2828
+f 2826 2827 2830
+f 2831 2832 2833
+f 2834 2832 2831
+f 2835 2832 2834
+f 2836 2837 2832
+f 2838 2837 2836
+f 2839 2837 2838
+f 2839 2840 2837
+f 2840 2841 2837
+f 2841 2842 2837
+f 2842 2843 2837
+f 2837 2833 2832
+f 2833 2844 2831
+f 2831 2844 2834
+f 2834 2844 2835
+f 2833 2845 2844
+f 2845 2846 2844
+f 2845 2847 2846
+f 2847 2848 2846
+f 2847 2849 2848
+f 2835 2844 2832
+f 2832 2844 2850
+f 2850 2846 2851
+f 2844 2846 2850
+f 2851 2848 2852
+f 2846 2848 2851
+f 2832 2853 2836
+f 2836 2853 2838
+f 2838 2853 2839
+f 2832 2850 2853
+f 2850 2854 2853
+f 2850 2851 2854
+f 2851 2855 2854
+f 2851 2852 2855
+f 2839 2853 2840
+f 2840 2853 2856
+f 2856 2854 2857
+f 2853 2854 2856
+f 2857 2855 2858
+f 2854 2855 2857
+f 2856 2843 2842
+f 2856 2842 2841
+f 2856 2841 2840
+f 2859 2843 2856
+f 2857 2859 2856
+f 2860 2859 2857
+f 2858 2860 2857
+f 2861 2860 2858
+f 2849 2852 2848
+f 2849 2862 2852
+f 2861 2858 2862
+f 2852 2858 2855
+f 2862 2858 2852
+f 2833 2863 2845
+f 2845 2863 2847
+f 2837 2863 2833
+f 2847 2864 2849
+f 2863 2864 2847
+f 2864 2862 2849
+f 2843 2859 2837
+f 2837 2859 2863
+f 2863 2860 2864
+f 2859 2860 2863
+f 2864 2861 2862
+f 2860 2861 2864
+f 2865 2866 2867
+f 2868 2866 2865
+f 2869 2866 2868
+f 2870 2871 2866
+f 2872 2871 2870
+f 2873 2871 2872
+f 2873 2874 2871
+f 2874 2875 2871
+f 2875 2876 2871
+f 2876 2877 2871
+f 2871 2867 2866
+f 2867 2878 2865
+f 2865 2878 2868
+f 2868 2878 2869
+f 2867 2879 2878
+f 2879 2880 2878
+f 2879 2881 2880
+f 2881 2882 2880
+f 2881 2883 2882
+f 2869 2878 2866
+f 2866 2878 2884
+f 2884 2880 2885
+f 2878 2880 2884
+f 2885 2882 2886
+f 2880 2882 2885
+f 2866 2887 2870
+f 2870 2887 2872
+f 2872 2887 2873
+f 2866 2884 2887
+f 2884 2888 2887
+f 2884 2885 2888
+f 2885 2889 2888
+f 2885 2886 2889
+f 2873 2887 2874
+f 2874 2887 2890
+f 2890 2888 2891
+f 2887 2888 2890
+f 2891 2889 2892
+f 2888 2889 2891
+f 2890 2877 2876
+f 2890 2876 2875
+f 2890 2875 2874
+f 2893 2877 2890
+f 2891 2893 2890
+f 2894 2893 2891
+f 2892 2894 2891
+f 2895 2894 2892
+f 2883 2886 2882
+f 2883 2896 2886
+f 2895 2892 2896
+f 2886 2892 2889
+f 2896 2892 2886
+f 2867 2897 2879
+f 2879 2897 2881
+f 2871 2897 2867
+f 2881 2898 2883
+f 2897 2898 2881
+f 2898 2896 2883
+f 2877 2893 2871
+f 2871 2893 2897
+f 2897 2894 2898
+f 2893 2894 2897
+f 2898 2895 2896
+f 2894 2895 2898
+f 2899 2900 2901
+f 2902 2900 2899
+f 2903 2900 2902
+f 2904 2905 2900
+f 2906 2905 2904
+f 2907 2905 2906
+f 2907 2908 2905
+f 2908 2909 2905
+f 2909 2910 2905
+f 2910 2911 2905
+f 2905 2901 2900
+f 2901 2912 2899
+f 2899 2912 2902
+f 2902 2912 2903
+f 2901 2913 2912
+f 2913 2914 2912
+f 2913 2915 2914
+f 2915 2916 2914
+f 2915 2917 2916
+f 2903 2912 2900
+f 2900 2912 2918
+f 2918 2914 2919
+f 2912 2914 2918
+f 2919 2916 2920
+f 2914 2916 2919
+f 2900 2921 2904
+f 2904 2921 2906
+f 2906 2921 2907
+f 2900 2918 2921
+f 2918 2922 2921
+f 2918 2919 2922
+f 2919 2923 2922
+f 2919 2920 2923
+f 2907 2921 2908
+f 2908 2921 2924
+f 2924 2922 2925
+f 2921 2922 2924
+f 2925 2923 2926
+f 2922 2923 2925
+f 2924 2911 2910
+f 2924 2910 2909
+f 2924 2909 2908
+f 2927 2911 2924
+f 2925 2927 2924
+f 2928 2927 2925
+f 2926 2928 2925
+f 2929 2928 2926
+f 2917 2920 2916
+f 2917 2930 2920
+f 2929 2926 2930
+f 2920 2926 2923
+f 2930 2926 2920
+f 2901 2931 2913
+f 2913 2931 2915
+f 2905 2931 2901
+f 2915 2932 2917
+f 2931 2932 2915
+f 2932 2930 2917
+f 2911 2927 2905
+f 2905 2927 2931
+f 2931 2928 2932
+f 2927 2928 2931
+f 2932 2929 2930
+f 2928 2929 2932
+f 2933 2934 2935
+f 2936 2934 2933
+f 2937 2934 2936
+f 2938 2939 2934
+f 2940 2939 2938
+f 2941 2939 2940
+f 2941 2942 2939
+f 2942 2943 2939
+f 2943 2944 2939
+f 2944 2945 2939
+f 2939 2935 2934
+f 2946 2945 2944
+f 2946 2944 2943
+f 2946 2943 2942
+f 2947 2945 2946
+f 2948 2947 2946
+f 2949 2947 2948
+f 2950 2949 2948
+f 2951 2949 2950
+f 2935 2952 2933
+f 2933 2952 2936
+f 2936 2952 2937
+f 2935 2953 2952
+f 2953 2954 2952
+f 2953 2955 2954
+f 2955 2956 2954
+f 2955 2957 2956
+f 2937 2952 2934
+f 2934 2952 2958
+f 2958 2954 2959
+f 2952 2954 2958
+f 2959 2956 2960
+f 2954 2956 2959
+f 2934 2961 2938
+f 2938 2961 2940
+f 2940 2961 2941
+f 2934 2958 2961
+f 2958 2962 2961
+f 2958 2959 2962
+f 2959 2963 2962
+f 2959 2960 2963
+f 2941 2961 2942
+f 2942 2961 2946
+f 2946 2962 2948
+f 2961 2962 2946
+f 2948 2963 2950
+f 2962 2963 2948
+f 2957 2960 2956
+f 2957 2964 2960
+f 2951 2950 2964
+f 2960 2950 2963
+f 2964 2950 2960
+f 2935 2965 2953
+f 2953 2965 2955
+f 2939 2965 2935
+f 2955 2966 2957
+f 2965 2966 2955
+f 2966 2964 2957
+f 2945 2947 2939
+f 2939 2947 2965
+f 2965 2949 2966
+f 2947 2949 2965
+f 2966 2951 2964
+f 2949 2951 2966
+f 2967 2968 2969
+f 2970 2968 2967
+f 2971 2968 2970
+f 2972 2973 2968
+f 2974 2973 2972
+f 2975 2973 2974
+f 2975 2976 2973
+f 2976 2977 2973
+f 2977 2978 2973
+f 2978 2979 2973
+f 2973 2969 2968
+f 2980 2979 2978
+f 2980 2978 2977
+f 2980 2977 2976
+f 2981 2979 2980
+f 2982 2981 2980
+f 2983 2981 2982
+f 2984 2983 2982
+f 2985 2983 2984
+f 2969 2986 2967
+f 2967 2986 2970
+f 2970 2986 2971
+f 2969 2987 2986
+f 2987 2988 2986
+f 2987 2989 2988
+f 2989 2990 2988
+f 2989 2991 2990
+f 2971 2986 2968
+f 2968 2986 2992
+f 2992 2988 2993
+f 2986 2988 2992
+f 2993 2990 2994
+f 2988 2990 2993
+f 2968 2995 2972
+f 2972 2995 2974
+f 2974 2995 2975
+f 2968 2992 2995
+f 2992 2996 2995
+f 2992 2993 2996
+f 2993 2997 2996
+f 2993 2994 2997
+f 2975 2995 2976
+f 2976 2995 2980
+f 2980 2996 2982
+f 2995 2996 2980
+f 2982 2997 2984
+f 2996 2997 2982
+f 2991 2994 2990
+f 2991 2998 2994
+f 2985 2984 2998
+f 2994 2984 2997
+f 2998 2984 2994
+f 2969 2999 2987
+f 2987 2999 2989
+f 2973 2999 2969
+f 2989 3000 2991
+f 2999 3000 2989
+f 3000 2998 2991
+f 2979 2981 2973
+f 2973 2981 2999
+f 2999 2983 3000
+f 2981 2983 2999
+f 3000 2985 2998
+f 2983 2985 3000
+f 3001 3002 3003
+f 3004 3002 3001
+f 3005 3002 3004
+f 3006 3007 3002
+f 3008 3007 3006
+f 3009 3007 3008
+f 3009 3010 3007
+f 3010 3011 3007
+f 3011 3012 3007
+f 3012 3013 3007
+f 3007 3003 3002
+f 3014 3013 3012
+f 3014 3012 3011
+f 3014 3011 3010
+f 3015 3013 3014
+f 3016 3015 3014
+f 3017 3015 3016
+f 3018 3017 3016
+f 3019 3017 3018
+f 3003 3020 3001
+f 3001 3020 3004
+f 3004 3020 3005
+f 3003 3021 3020
+f 3021 3022 3020
+f 3021 3023 3022
+f 3023 3024 3022
+f 3023 3025 3024
+f 3005 3020 3002
+f 3002 3020 3026
+f 3026 3022 3027
+f 3020 3022 3026
+f 3027 3024 3028
+f 3022 3024 3027
+f 3002 3029 3006
+f 3006 3029 3008
+f 3008 3029 3009
+f 3002 3026 3029
+f 3026 3030 3029
+f 3026 3027 3030
+f 3027 3031 3030
+f 3027 3028 3031
+f 3009 3029 3010
+f 3010 3029 3014
+f 3014 3030 3016
+f 3029 3030 3014
+f 3016 3031 3018
+f 3030 3031 3016
+f 3025 3028 3024
+f 3025 3032 3028
+f 3019 3018 3032
+f 3028 3018 3031
+f 3032 3018 3028
+f 3003 3033 3021
+f 3021 3033 3023
+f 3007 3033 3003
+f 3023 3034 3025
+f 3033 3034 3023
+f 3034 3032 3025
+f 3013 3015 3007
+f 3007 3015 3033
+f 3033 3017 3034
+f 3015 3017 3033
+f 3034 3019 3032
+f 3017 3019 3034
+f 3035 3036 3037
+f 3038 3036 3035
+f 3039 3036 3038
+f 3040 3041 3036
+f 3042 3041 3040
+f 3043 3041 3042
+f 3043 3044 3041
+f 3044 3045 3041
+f 3045 3046 3041
+f 3046 3047 3041
+f 3041 3037 3036
+f 3048 3047 3046
+f 3048 3046 3045
+f 3048 3045 3044
+f 3049 3047 3048
+f 3050 3049 3048
+f 3051 3049 3050
+f 3052 3051 3050
+f 3053 3051 3052
+f 3037 3054 3035
+f 3035 3054 3038
+f 3038 3054 3039
+f 3037 3055 3054
+f 3055 3056 3054
+f 3055 3057 3056
+f 3057 3058 3056
+f 3057 3059 3058
+f 3039 3054 3036
+f 3036 3054 3060
+f 3060 3056 3061
+f 3054 3056 3060
+f 3061 3058 3062
+f 3056 3058 3061
+f 3036 3063 3040
+f 3040 3063 3042
+f 3042 3063 3043
+f 3036 3060 3063
+f 3060 3064 3063
+f 3060 3061 3064
+f 3061 3065 3064
+f 3061 3062 3065
+f 3043 3063 3044
+f 3044 3063 3048
+f 3048 3064 3050
+f 3063 3064 3048
+f 3050 3065 3052
+f 3064 3065 3050
+f 3059 3062 3058
+f 3059 3066 3062
+f 3053 3052 3066
+f 3062 3052 3065
+f 3066 3052 3062
+f 3037 3067 3055
+f 3055 3067 3057
+f 3041 3067 3037
+f 3057 3068 3059
+f 3067 3068 3057
+f 3068 3066 3059
+f 3047 3049 3041
+f 3041 3049 3067
+f 3067 3051 3068
+f 3049 3051 3067
+f 3068 3053 3066
+f 3051 3053 3068
+f 3069 3070 3071
+f 3072 3070 3069
+f 3073 3070 3072
+f 3074 3075 3070
+f 3076 3075 3074
+f 3077 3075 3076
+f 3077 3078 3075
+f 3078 3079 3075
+f 3079 3080 3075
+f 3080 3081 3075
+f 3075 3071 3070
+f 3082 3081 3080
+f 3082 3080 3079
+f 3082 3079 3078
+f 3083 3081 3082
+f 3084 3083 3082
+f 3085 3083 3084
+f 3086 3085 3084
+f 3087 3085 3086
+f 3071 3088 3069
+f 3069 3088 3072
+f 3072 3088 3073
+f 3071 3089 3088
+f 3089 3090 3088
+f 3089 3091 3090
+f 3091 3092 3090
+f 3091 3093 3092
+f 3073 3088 3070
+f 3070 3088 3094
+f 3094 3090 3095
+f 3088 3090 3094
+f 3095 3092 3096
+f 3090 3092 3095
+f 3070 3097 3074
+f 3074 3097 3076
+f 3076 3097 3077
+f 3070 3094 3097
+f 3094 3098 3097
+f 3094 3095 3098
+f 3095 3099 3098
+f 3095 3096 3099
+f 3077 3097 3078
+f 3078 3097 3082
+f 3082 3098 3084
+f 3097 3098 3082
+f 3084 3099 3086
+f 3098 3099 3084
+f 3093 3096 3092
+f 3093 3100 3096
+f 3087 3086 3100
+f 3096 3086 3099
+f 3100 3086 3096
+f 3071 3101 3089
+f 3089 3101 3091
+f 3075 3101 3071
+f 3091 3102 3093
+f 3101 3102 3091
+f 3102 3100 3093
+f 3081 3083 3075
+f 3075 3083 3101
+f 3101 3085 3102
+f 3083 3085 3101
+f 3102 3087 3100
+f 3085 3087 3102
+f 3103 3104 3105
+f 3106 3104 3103
+f 3107 3104 3106
+f 3108 3109 3104
+f 3110 3109 3108
+f 3111 3109 3110
+f 3111 3112 3109
+f 3112 3113 3109
+f 3113 3114 3109
+f 3114 3115 3109
+f 3109 3105 3104
+f 3116 3115 3114
+f 3116 3114 3113
+f 3116 3113 3112
+f 3117 3115 3116
+f 3118 3117 3116
+f 3119 3117 3118
+f 3120 3119 3118
+f 3121 3119 3120
+f 3105 3122 3103
+f 3103 3122 3106
+f 3106 3122 3107
+f 3105 3123 3122
+f 3123 3124 3122
+f 3123 3125 3124
+f 3125 3126 3124
+f 3125 3127 3126
+f 3107 3122 3104
+f 3104 3122 3128
+f 3128 3124 3129
+f 3122 3124 3128
+f 3129 3126 3130
+f 3124 3126 3129
+f 3104 3131 3108
+f 3108 3131 3110
+f 3110 3131 3111
+f 3104 3128 3131
+f 3128 3132 3131
+f 3128 3129 3132
+f 3129 3133 3132
+f 3129 3130 3133
+f 3111 3131 3112
+f 3112 3131 3116
+f 3116 3132 3118
+f 3131 3132 3116
+f 3118 3133 3120
+f 3132 3133 3118
+f 3127 3130 3126
+f 3127 3134 3130
+f 3121 3120 3134
+f 3130 3120 3133
+f 3134 3120 3130
+f 3105 3135 3123
+f 3123 3135 3125
+f 3109 3135 3105
+f 3125 3136 3127
+f 3135 3136 3125
+f 3136 3134 3127
+f 3115 3117 3109
+f 3109 3117 3135
+f 3135 3119 3136
+f 3117 3119 3135
+f 3136 3121 3134
+f 3119 3121 3136
+f 3137 3138 3139
+f 3140 3138 3137
+f 3141 3138 3140
+f 3142 3143 3138
+f 3144 3143 3142
+f 3145 3143 3144
+f 3145 3146 3143
+f 3146 3147 3143
+f 3147 3148 3143
+f 3148 3149 3143
+f 3143 3139 3138
+f 3150 3149 3148
+f 3150 3148 3147
+f 3150 3147 3146
+f 3151 3149 3150
+f 3152 3151 3150
+f 3153 3151 3152
+f 3154 3153 3152
+f 3155 3153 3154
+f 3139 3156 3137
+f 3137 3156 3140
+f 3140 3156 3141
+f 3139 3157 3156
+f 3157 3158 3156
+f 3157 3159 3158
+f 3159 3160 3158
+f 3159 3161 3160
+f 3141 3156 3138
+f 3138 3156 3162
+f 3162 3158 3163
+f 3156 3158 3162
+f 3163 3160 3164
+f 3158 3160 3163
+f 3138 3165 3142
+f 3142 3165 3144
+f 3144 3165 3145
+f 3138 3162 3165
+f 3162 3166 3165
+f 3162 3163 3166
+f 3163 3167 3166
+f 3163 3164 3167
+f 3145 3165 3146
+f 3146 3165 3150
+f 3150 3166 3152
+f 3165 3166 3150
+f 3152 3167 3154
+f 3166 3167 3152
+f 3161 3164 3160
+f 3161 3168 3164
+f 3155 3154 3168
+f 3164 3154 3167
+f 3168 3154 3164
+f 3139 3169 3157
+f 3157 3169 3159
+f 3143 3169 3139
+f 3159 3170 3161
+f 3169 3170 3159
+f 3170 3168 3161
+f 3149 3151 3143
+f 3143 3151 3169
+f 3169 3153 3170
+f 3151 3153 3169
+f 3170 3155 3168
+f 3153 3155 3170
+f 3171 3172 3173
+f 3174 3172 3171
+f 3175 3172 3174
+f 3176 3177 3172
+f 3178 3177 3176
+f 3179 3177 3178
+f 3179 3180 3177
+f 3180 3181 3177
+f 3181 3182 3177
+f 3182 3183 3177
+f 3177 3173 3172
+f 3184 3183 3182
+f 3184 3182 3181
+f 3184 3181 3180
+f 3185 3183 3184
+f 3186 3185 3184
+f 3187 3185 3186
+f 3188 3187 3186
+f 3189 3187 3188
+f 3173 3190 3171
+f 3171 3190 3174
+f 3174 3190 3175
+f 3173 3191 3190
+f 3191 3192 3190
+f 3191 3193 3192
+f 3193 3194 3192
+f 3193 3195 3194
+f 3175 3190 3172
+f 3172 3190 3196
+f 3196 3192 3197
+f 3190 3192 3196
+f 3197 3194 3198
+f 3192 3194 3197
+f 3172 3199 3176
+f 3176 3199 3178
+f 3178 3199 3179
+f 3172 3196 3199
+f 3196 3200 3199
+f 3196 3197 3200
+f 3197 3201 3200
+f 3197 3198 3201
+f 3179 3199 3180
+f 3180 3199 3184
+f 3184 3200 3186
+f 3199 3200 3184
+f 3186 3201 3188
+f 3200 3201 3186
+f 3195 3198 3194
+f 3195 3202 3198
+f 3189 3188 3202
+f 3198 3188 3201
+f 3202 3188 3198
+f 3173 3177 3191
+f 3191 3203 3193
+f 3177 3203 3191
+f 3193 3204 3195
+f 3203 3204 3193
+f 3204 3202 3195
+f 3183 3185 3177
+f 3177 3185 3203
+f 3203 3187 3204
+f 3204 3187 3202
+f 3185 3187 3203
+f 3187 3189 3202
+f 3205 3206 3207
+f 3206 3208 3207
+f 3208 3209 3207
+f 3210 3209 3208
+f 3210 3208 3206
+f 3210 3206 3205
+f 3211 3209 3210
+f 3212 3211 3210
+f 3213 3211 3212
+f 3214 3213 3212
+f 3215 3213 3214
+f 3216 3207 3209
+f 3216 3209 3211
+f 3217 3211 3213
+f 3217 3216 3211
+f 3218 3213 3215
+f 3218 3217 3213
+f 3207 3210 3205
+f 3207 3216 3210
+f 3216 3212 3210
+f 3216 3217 3212
+f 3217 3214 3212
+f 3217 3219 3214
+f 3217 3220 3219
+f 3217 3218 3220
+f 3218 3215 3220
+f 3215 3219 3220
+f 3215 3214 3219
+f 3221 3222 3223
+f 3224 3222 3221
+f 3225 3222 3224
+f 3226 3227 3228
+f 3228 3229 3230
+f 3227 3229 3228
+f 3230 3231 3222
+f 3229 3231 3230
+f 3231 3205 3222
+f 3205 3223 3222
+f 3232 3205 3231
+f 3232 3231 3229
+f 3232 3229 3227
+f 3210 3205 3232
+f 3233 3210 3232
+f 3212 3210 3233
+f 3234 3212 3233
+f 3214 3212 3234
+f 3205 3210 3223
+f 3223 3210 3235
+f 3235 3212 3236
+f 3210 3212 3235
+f 3236 3214 3237
+f 3212 3214 3236
+f 3223 3238 3221
+f 3221 3238 3224
+f 3224 3238 3225
+f 3223 3235 3238
+f 3235 3239 3238
+f 3235 3236 3239
+f 3236 3240 3239
+f 3236 3237 3240
+f 3225 3238 3222
+f 3222 3238 3241
+f 3241 3239 3242
+f 3238 3239 3241
+f 3242 3240 3243
+f 3239 3240 3242
+f 3222 3244 3230
+f 3230 3244 3228
+f 3228 3244 3226
+f 3222 3241 3244
+f 3241 3245 3244
+f 3241 3242 3245
+f 3242 3246 3245
+f 3242 3243 3246
+f 3227 3244 3232
+f 3226 3244 3227
+f 3232 3245 3233
+f 3244 3245 3232
+f 3233 3246 3234
+f 3245 3246 3233
+f 3237 3243 3240
+f 3237 3214 3243
+f 3243 3234 3246
+f 3214 3234 3243
+f 3247 3248 3249
+f 3250 3248 3247
+f 3251 3247 3252
+f 3251 3250 3247
+f 3253 3251 3252
+f 3253 3252 3254
+f 3255 3254 3256
+f 3255 3253 3254
+f 3257 3256 3258
+f 3257 3255 3256
+f 3247 3254 3252
+f 3254 3259 3256
+f 3247 3259 3254
+f 3256 3260 3258
+f 3258 3260 3261
+f 3261 3260 3262
+f 3259 3260 3256
+f 3260 3263 3262
+f 3249 3264 3247
+f 3247 3264 3259
+f 3259 3265 3260
+f 3264 3265 3259
+f 3260 3266 3263
+f 3265 3266 3260
+f 3248 3264 3249
+f 3248 3267 3264
+f 3267 3265 3264
+f 3265 3268 3266
+f 3266 3268 3269
+f 3269 3268 3270
+f 3267 3268 3265
+f 3268 3271 3270
+f 3250 3272 3248
+f 3248 3272 3267
+f 3267 3273 3268
+f 3272 3273 3267
+f 3268 3274 3271
+f 3273 3274 3268
+f 3251 3253 3250
+f 3255 3272 3253
+f 3253 3272 3250
+f 3275 3273 3257
+f 3276 3273 3275
+f 3257 3273 3255
+f 3255 3273 3272
+f 3276 3274 3273
+f 3269 3263 3266
+f 3270 3263 3269
+f 3271 3263 3270
+f 3263 3276 3262
+f 3274 3276 3263
+f 3262 3275 3261
+f 3276 3275 3262
+f 3261 3257 3258
+f 3275 3257 3261
+f 3271 3274 3263
+f 3277 3278 3279
+f 3280 3278 3277
+f 3281 3277 3282
+f 3281 3280 3277
+f 3282 3283 3281
+f 3281 3283 3284
+f 3284 3285 3286
+f 3283 3285 3284
+f 3286 3287 3288
+f 3285 3287 3286
+f 3277 3283 3282
+f 3283 3289 3285
+f 3277 3289 3283
+f 3285 3290 3287
+f 3287 3290 3291
+f 3291 3290 3292
+f 3289 3290 3285
+f 3290 3293 3292
+f 3279 3294 3277
+f 3277 3294 3289
+f 3289 3295 3290
+f 3294 3295 3289
+f 3290 3296 3293
+f 3295 3296 3290
+f 3278 3294 3279
+f 3278 3297 3294
+f 3297 3295 3294
+f 3295 3298 3296
+f 3296 3298 3299
+f 3299 3298 3300
+f 3300 3298 3301
+f 3297 3298 3295
+f 3280 3302 3278
+f 3278 3302 3297
+f 3297 3303 3298
+f 3302 3303 3297
+f 3298 3304 3301
+f 3303 3304 3298
+f 3281 3284 3280
+f 3286 3302 3284
+f 3284 3302 3280
+f 3288 3303 3286
+f 3305 3303 3288
+f 3306 3303 3305
+f 3304 3303 3306
+f 3286 3303 3302
+f 3299 3293 3296
+f 3300 3293 3299
+f 3301 3293 3300
+f 3293 3306 3292
+f 3304 3306 3293
+f 3292 3305 3291
+f 3306 3305 3292
+f 3291 3288 3287
+f 3305 3288 3291
+f 3301 3304 3293
+f 3307 3308 3309
+f 3310 3308 3307
+f 3311 3307 3312
+f 3311 3310 3307
+f 3312 3313 3311
+f 3311 3313 3314
+f 3314 3315 3316
+f 3313 3315 3314
+f 3316 3317 3318
+f 3315 3317 3316
+f 3307 3313 3312
+f 3313 3319 3315
+f 3307 3319 3313
+f 3315 3320 3317
+f 3317 3320 3321
+f 3321 3320 3322
+f 3322 3320 3323
+f 3319 3320 3315
+f 3309 3324 3307
+f 3307 3324 3319
+f 3319 3325 3320
+f 3324 3325 3319
+f 3320 3326 3323
+f 3325 3326 3320
+f 3308 3324 3309
+f 3308 3327 3324
+f 3327 3325 3324
+f 3325 3328 3326
+f 3326 3328 3329
+f 3329 3328 3330
+f 3330 3328 3331
+f 3327 3328 3325
+f 3310 3332 3308
+f 3308 3332 3327
+f 3327 3333 3328
+f 3332 3333 3327
+f 3328 3334 3331
+f 3333 3334 3328
+f 3311 3314 3310
+f 3316 3332 3314
+f 3314 3332 3310
+f 3318 3333 3316
+f 3335 3333 3318
+f 3336 3333 3335
+f 3334 3333 3336
+f 3316 3333 3332
+f 3329 3323 3326
+f 3330 3323 3329
+f 3331 3323 3330
+f 3323 3336 3322
+f 3334 3336 3323
+f 3322 3335 3321
+f 3336 3335 3322
+f 3321 3318 3317
+f 3335 3318 3321
+f 3331 3334 3323
+f 3337 3338 3339
+f 3340 3338 3337
+f 3341 3337 3342
+f 3341 3340 3337
+f 3342 3343 3341
+f 3341 3343 3344
+f 3344 3345 3346
+f 3343 3345 3344
+f 3346 3347 3348
+f 3345 3347 3346
+f 3337 3343 3342
+f 3343 3349 3345
+f 3337 3349 3343
+f 3345 3350 3347
+f 3347 3350 3351
+f 3351 3350 3352
+f 3352 3350 3353
+f 3349 3350 3345
+f 3339 3354 3337
+f 3337 3354 3349
+f 3349 3355 3350
+f 3354 3355 3349
+f 3350 3356 3353
+f 3355 3356 3350
+f 3338 3354 3339
+f 3338 3357 3354
+f 3357 3355 3354
+f 3355 3358 3356
+f 3356 3358 3359
+f 3359 3358 3360
+f 3360 3358 3361
+f 3357 3358 3355
+f 3340 3362 3338
+f 3338 3362 3357
+f 3357 3363 3358
+f 3362 3363 3357
+f 3358 3364 3361
+f 3363 3364 3358
+f 3341 3344 3340
+f 3346 3362 3344
+f 3344 3362 3340
+f 3348 3363 3346
+f 3365 3363 3348
+f 3366 3363 3365
+f 3364 3363 3366
+f 3346 3363 3362
+f 3359 3353 3356
+f 3360 3353 3359
+f 3361 3353 3360
+f 3353 3366 3352
+f 3364 3366 3353
+f 3352 3365 3351
+f 3366 3365 3352
+f 3351 3348 3347
+f 3365 3348 3351
+f 3361 3364 3353
+f 3367 3368 3369
+f 3370 3368 3367
+f 3371 3367 3372
+f 3371 3370 3367
+f 3372 3373 3371
+f 3371 3373 3374
+f 3374 3375 3376
+f 3373 3375 3374
+f 3376 3377 3378
+f 3375 3377 3376
+f 3367 3379 3372
+f 3372 3379 3373
+f 3373 3379 3375
+f 3375 3380 3377
+f 3377 3380 3381
+f 3381 3380 3382
+f 3382 3380 3383
+f 3379 3380 3375
+f 3369 3384 3367
+f 3367 3384 3379
+f 3379 3385 3380
+f 3384 3385 3379
+f 3380 3386 3383
+f 3385 3386 3380
+f 3368 3387 3369
+f 3369 3387 3384
+f 3387 3385 3384
+f 3385 3388 3386
+f 3386 3388 3389
+f 3389 3388 3390
+f 3390 3388 3391
+f 3387 3388 3385
+f 3370 3392 3368
+f 3368 3392 3387
+f 3387 3393 3388
+f 3392 3393 3387
+f 3388 3394 3391
+f 3393 3394 3388
+f 3374 3392 3371
+f 3376 3392 3374
+f 3371 3392 3370
+f 3378 3393 3376
+f 3395 3393 3378
+f 3396 3393 3395
+f 3394 3393 3396
+f 3376 3393 3392
+f 3389 3383 3386
+f 3390 3383 3389
+f 3391 3383 3390
+f 3383 3396 3382
+f 3394 3396 3383
+f 3382 3395 3381
+f 3396 3395 3382
+f 3381 3378 3377
+f 3395 3378 3381
+f 3391 3394 3383
+f 3397 3398 3399
+f 3400 3398 3397
+f 3401 3397 3402
+f 3401 3400 3397
+f 3403 3404 3405
+f 3406 3407 3401
+f 3401 3407 3400
+f 3405 3408 3406
+f 3409 3408 3404
+f 3410 3408 3409
+f 3406 3408 3407
+f 3404 3408 3405
+f 3402 3411 3401
+f 3401 3411 3406
+f 3406 3412 3405
+f 3411 3412 3406
+f 3405 3413 3403
+f 3412 3413 3405
+f 3397 3414 3402
+f 3402 3414 3411
+f 3414 3412 3411
+f 3412 3415 3413
+f 3415 3416 3417
+f 3417 3416 3418
+f 3412 3416 3415
+f 3414 3416 3412
+f 3399 3419 3397
+f 3397 3419 3414
+f 3414 3420 3416
+f 3419 3420 3414
+f 3416 3421 3418
+f 3420 3421 3416
+f 3398 3422 3399
+f 3399 3422 3419
+f 3421 3420 3423
+f 3419 3424 3420
+f 3423 3424 3425
+f 3425 3424 3426
+f 3422 3424 3419
+f 3420 3424 3423
+f 3400 3407 3398
+f 3398 3407 3422
+f 3422 3408 3424
+f 3407 3408 3422
+f 3424 3410 3426
+f 3408 3410 3424
+f 3423 3418 3421
+f 3425 3418 3423
+f 3426 3418 3425
+f 3418 3409 3417
+f 3410 3409 3418
+f 3417 3404 3415
+f 3409 3404 3417
+f 3415 3403 3413
+f 3404 3403 3415
+f 3426 3410 3418
+f 3427 3428 3429
+f 3430 3428 3427
+f 3431 3427 3432
+f 3431 3430 3427
+f 3433 3434 3431
+f 3431 3434 3430
+f 3435 3436 3437
+f 3436 3438 3437
+f 3437 3439 3433
+f 3440 3439 3438
+f 3433 3439 3434
+f 3438 3439 3437
+f 3432 3441 3431
+f 3431 3441 3433
+f 3433 3442 3437
+f 3441 3442 3433
+f 3437 3443 3435
+f 3442 3443 3437
+f 3427 3444 3432
+f 3432 3444 3441
+f 3442 3445 3443
+f 3442 3446 3445
+f 3441 3447 3442
+f 3446 3447 3448
+f 3444 3447 3441
+f 3442 3447 3446
+f 3429 3449 3427
+f 3427 3449 3444
+f 3444 3450 3447
+f 3449 3450 3444
+f 3447 3451 3448
+f 3450 3451 3447
+f 3428 3452 3429
+f 3429 3452 3449
+f 3451 3450 3453
+f 3453 3450 3454
+f 3450 3455 3454
+f 3449 3456 3450
+f 3452 3456 3449
+f 3450 3456 3455
+f 3430 3434 3428
+f 3428 3434 3452
+f 3452 3439 3456
+f 3434 3439 3452
+f 3456 3440 3455
+f 3439 3440 3456
+f 3453 3448 3451
+f 3454 3448 3453
+f 3455 3448 3454
+f 3448 3438 3446
+f 3440 3438 3448
+f 3446 3436 3445
+f 3438 3436 3446
+f 3445 3435 3443
+f 3436 3435 3445
+f 3455 3440 3448
+f 3457 3458 3459
+f 3460 3458 3457
+f 3461 3457 3462
+f 3461 3460 3457
+f 3461 3463 3460
+f 3464 3463 3461
+f 3465 3466 3467
+f 3466 3468 3467
+f 3468 3469 3467
+f 3467 3470 3464
+f 3464 3470 3463
+f 3469 3470 3467
+f 3462 3471 3461
+f 3461 3471 3464
+f 3464 3472 3467
+f 3471 3472 3464
+f 3467 3473 3465
+f 3472 3473 3467
+f 3457 3474 3462
+f 3462 3474 3471
+f 3472 3475 3473
+f 3472 3476 3475
+f 3472 3477 3476
+f 3471 3478 3472
+f 3474 3478 3471
+f 3472 3478 3477
+f 3459 3479 3457
+f 3457 3479 3474
+f 3474 3480 3478
+f 3479 3480 3474
+f 3478 3481 3477
+f 3480 3481 3478
+f 3458 3482 3459
+f 3459 3482 3479
+f 3481 3480 3483
+f 3483 3480 3484
+f 3480 3485 3484
+f 3479 3486 3480
+f 3482 3486 3479
+f 3480 3486 3485
+f 3460 3463 3458
+f 3458 3463 3482
+f 3482 3470 3486
+f 3463 3470 3482
+f 3486 3469 3485
+f 3470 3469 3486
+f 3483 3477 3481
+f 3484 3477 3483
+f 3485 3477 3484
+f 3477 3468 3476
+f 3469 3468 3477
+f 3476 3466 3475
+f 3468 3466 3476
+f 3475 3465 3473
+f 3466 3465 3475
+f 3485 3469 3477
+o Soundproof
+v -14.405374 -16.972790 4.850000
+v -13.890433 -17.396732 4.850000
+v -14.921269 -16.521082 4.842749
+v -17.510530 -13.746699 7.589114
+v -14.405374 -16.972790 6.850000
+v -17.510530 -13.746699 4.842749
+v -12.823617 -18.197397 4.850000
+v -12.823617 -18.197397 6.850000
+v -11.898408 -18.815374 4.842749
+v -13.764195 -17.496780 7.589114
+v -13.890433 -17.396732 6.850000
+v -13.363023 -17.805056 6.850000
+v -9.237481 -20.254860 7.589114
+v -8.529789 -20.562906 4.842749
+v -4.187037 -21.864563 7.589114
+v -3.311337 -22.014210 4.123887
+v 1.100797 -22.234627 7.589114
+v 1.845085 -22.185266 3.338116
+v 6.326220 -21.344070 7.589114
+v 6.697441 -21.230513 2.503141
+v 13.450560 -17.739021 1.530000
+v 16.821981 -14.581199 3.500000
+v 15.218398 -16.247793 1.530000
+v 16.821981 -14.581199 1.530000
+v 11.192969 -19.243385 7.589114
+v 9.204159 -20.270023 2.021196
+v 11.537547 -19.038788 1.530000
+v 18.062555 -13.012858 1.530000
+v 18.062555 -13.012858 3.500000
+v 18.309410 -12.663172 1.530000
+v 18.549496 -12.308804 1.530000
+v 18.782722 -11.949885 1.530000
+v 15.425119 -16.051670 7.589114
+v 17.251104 -14.070884 3.500000
+v 18.782722 -11.949885 7.589114
+v 17.664753 -13.547948 3.500000
+v -13.363023 -17.805056 4.850000
+v -16.770000 -13.329773 7.722313
+v -17.680681 -13.842497 7.722313
+v -16.770000 -13.329773 7.589114
+v -17.680681 -13.842497 4.842749
+v 18.787754 11.941972 7.589114
+v 16.694641 10.476357 7.589114
+v 15.439074 16.038248 7.589114
+v 11.221911 11.221911 7.589114
+v 18.606382 6.501357 7.589114
+v 13.743979 7.935090 7.589114
+v 7.935090 13.743979 7.589114
+v 11.218325 19.228615 7.589114
+v 6.363914 21.332863 7.589114
+v 19.586266 2.200751 7.589114
+v 15.329415 4.107504 7.589114
+v 4.107504 15.329415 7.589114
+v 1.150042 22.232134 7.589114
+v 19.585215 -2.210074 7.589114
+v 15.870179 0.000000 7.589114
+v 0.000000 15.870179 7.589114
+v -4.128790 21.875637 7.589114
+v 18.603285 -6.510212 7.589114
+v 15.329415 -4.107504 7.589114
+v -4.107504 15.329415 7.589114
+v -9.174410 20.283506 7.589114
+v -7.935090 13.743979 7.589114
+v 16.689651 -10.484303 7.589114
+v 13.743979 -7.935090 7.589114
+v -13.701818 17.545671 7.589114
+v -11.221911 11.221911 7.589114
+v 11.221911 -11.221911 7.589114
+v -16.770000 13.329773 7.589114
+v -17.455286 13.816780 7.589114
+v -13.743979 7.935090 7.589114
+v 7.935090 -13.743979 7.589114
+v -15.329415 4.107504 7.589114
+v -16.086861 4.452006 7.589114
+v 4.107504 -15.329415 7.589114
+v -15.870179 0.000000 7.589114
+v -15.329415 -4.107504 7.589114
+v -16.086861 -4.452006 7.589114
+v 0.000000 -15.870179 7.589114
+v -13.743979 -7.935090 7.589114
+v -4.107504 -15.329415 7.589114
+v -7.935090 -13.743979 7.589114
+v -11.221911 -11.221911 7.589114
+v 16.689651 -10.484303 7.722313
+v 18.940981 -12.060699 7.722313
+v 18.940981 -12.060699 1.530000
+v 18.705576 -12.422667 1.530000
+v 18.463255 -12.780041 1.530000
+v 18.214106 -13.132689 1.530000
+v 18.214106 -13.132689 3.500000
+v 16.973394 -14.701192 3.500000
+v 17.402433 -14.190719 3.500000
+v 17.816126 -13.667730 3.500000
+v 16.973394 -14.701192 1.530000
+v 15.372650 -16.367737 1.530000
+v 13.609107 -17.860945 1.530000
+v 11.701443 -19.165005 1.530000
+v 11.646690 -19.123089 1.530000
+v 11.592058 -19.081017 1.530000
+v 9.370709 -20.406151 2.020663
+v 6.866783 -21.379160 2.502137
+v 2.018501 -22.363962 3.336580
+v -3.137962 -22.234531 4.122519
+v -8.475399 -20.654835 4.842749
+v -8.420767 -20.746618 4.842749
+v -8.365892 -20.838259 4.842749
+v -11.864881 -19.064255 4.842749
+v -15.001724 -16.708364 4.842749
+v -12.942367 -18.349833 4.850000
+v -12.942367 -18.349833 6.850000
+v -14.524420 -17.124907 4.850000
+v -14.009279 -17.548826 4.850000
+v -13.481773 -17.957254 4.850000
+v -14.524420 -17.124907 6.850000
+v -14.009279 -17.548826 6.850000
+v -13.481773 -17.957254 6.850000
+v -16.086861 -4.452006 7.722313
+v -16.086861 4.452006 7.722313
+v -16.770000 13.329773 7.722313
+v 16.694641 10.476357 7.722313
+v 18.946016 12.052787 7.722313
+v 15.566591 16.183399 7.722313
+v 11.309464 11.309464 7.722313
+v 13.851207 7.996998 7.722313
+v 18.606382 6.501357 7.722313
+v 7.996998 13.851207 7.722313
+v 11.307840 19.399843 7.722313
+v 6.410332 21.520428 7.722313
+v 15.449014 4.139551 7.722313
+v 19.586266 2.200751 7.722313
+v 4.139551 15.449014 7.722313
+v 1.150716 22.425365 7.722313
+v 15.993996 0.000000 7.722313
+v 19.585215 -2.210074 7.722313
+v 0.000000 15.993996 7.722313
+v -4.173902 22.063538 7.722313
+v -4.139551 15.449014 7.722313
+v 15.449014 -4.139551 7.722313
+v 18.603285 -6.510212 7.722313
+v -9.262744 20.455385 7.722313
+v -7.996998 13.851207 7.722313
+v 13.851207 -7.996998 7.722313
+v -13.828351 17.691746 7.722313
+v -11.309464 11.309464 7.722313
+v 11.309464 -11.309464 7.722313
+v 15.550783 -16.198589 7.722313
+v -17.612822 13.928736 7.722313
+v -13.851207 7.996998 7.722313
+v 7.996998 -13.851207 7.722313
+v 11.278049 -19.417179 7.722313
+v -15.449014 4.139551 7.722313
+v 6.365262 -21.533802 7.722313
+v 4.139551 -15.449014 7.722313
+v -15.993996 0.000000 7.722313
+v -15.449014 -4.139551 7.722313
+v 1.091233 -22.428339 7.722313
+v 0.000000 -15.993996 7.722313
+v -13.851207 -7.996998 7.722313
+v -4.244725 -22.050022 7.722313
+v -4.139551 -15.449014 7.722313
+v -9.339787 -20.420322 7.722313
+v -7.996998 -13.851207 7.722313
+v -11.309464 -11.309464 7.722313
+v -13.904797 -17.631727 7.722313
+v -17.612822 13.928736 4.842749
+v -17.455286 13.816780 4.842749
+v 18.787754 11.941972 1.530000
+v 18.062555 13.012858 3.500000
+v 18.552952 12.303594 1.530000
+v 18.311188 12.660601 1.530000
+v 18.062555 13.012858 1.530000
+v 16.821981 14.581199 1.530000
+v 16.821981 14.581199 3.500000
+v 15.218398 16.247793 1.530000
+v 13.450560 17.739021 1.530000
+v 17.664753 13.547948 3.500000
+v 17.251104 14.070884 3.500000
+v 11.537547 19.038788 1.530000
+v 6.140390 21.398272 2.604946
+v 0.675704 22.251602 3.524193
+v -3.915166 21.914879 4.210564
+v -8.529789 20.562906 4.842749
+v -11.873257 18.831255 4.842749
+v -14.405374 16.972790 4.850000
+v -14.877066 16.560898 4.842749
+v -13.890433 17.396732 4.850000
+v -12.823617 18.197397 6.850000
+v -12.823617 18.197397 4.850000
+v -14.405374 16.972790 6.850000
+v -13.363023 17.805056 6.850000
+v -13.890433 17.396732 6.850000
+v -13.363023 17.805056 4.850000
+v 18.946016 12.052787 1.530000
+v -15.329415 -4.107504 8.392254
+v -15.870179 0.000000 8.392254
+v -13.743979 -7.935090 8.392254
+v -11.221911 -11.221911 8.392254
+v -7.935090 -13.743979 8.392254
+v -4.107504 -15.329415 8.392254
+v 0.000000 -15.870179 8.392254
+v 4.107504 -15.329415 8.392254
+v 7.935090 -13.743979 8.392254
+v 11.221911 -11.221911 8.392254
+v 13.743979 -7.935090 8.392254
+v 15.329415 -4.107504 8.392254
+v 15.870179 0.000000 8.392254
+v 15.329415 4.107504 8.392254
+v 13.743979 7.935090 8.392254
+v 11.221911 11.221911 8.392254
+v 7.935090 13.743979 8.392254
+v 4.107504 15.329415 8.392254
+v 0.000000 15.870179 8.392254
+v -4.107504 15.329415 8.392254
+v -7.935090 13.743979 8.392254
+v -11.221911 11.221911 8.392254
+v -13.743979 7.935090 8.392254
+v -15.329415 4.107504 8.392254
+v 18.214106 13.132689 3.500000
+v 18.709034 12.417458 1.530000
+v 18.465033 12.777470 1.530000
+v 18.214106 13.132689 1.530000
+v 16.973394 14.701192 3.500000
+v 16.973394 14.701192 1.530000
+v 15.372650 16.367737 1.530000
+v 13.609107 17.860945 1.530000
+v 17.816126 13.667730 3.500000
+v 17.402433 14.190719 3.500000
+v 11.701443 19.165005 1.530000
+v 6.310326 21.549965 2.603852
+v 0.849657 22.438789 3.522614
+v -3.742253 22.140839 4.209277
+v -8.365892 20.838259 4.842749
+v -11.833809 19.083557 4.842749
+v -14.947209 16.757151 4.842749
+v -14.524420 17.124907 4.850000
+v -14.009279 17.548826 4.850000
+v -12.942367 18.349833 6.850000
+v -12.942367 18.349833 4.850000
+v -14.524420 17.124907 6.850000
+v -13.481773 17.957254 6.850000
+v -14.009279 17.548826 6.850000
+v -13.481773 17.957254 4.850000
+v -15.449014 -4.139551 8.498143
+v -15.993996 0.000000 8.498143
+v -13.851207 -7.996998 8.498143
+v -11.309464 -11.309464 8.498143
+v -7.996998 -13.851207 8.498143
+v -4.139551 -15.449014 8.498143
+v 0.000000 -15.993996 8.498143
+v 4.139551 -15.449014 8.498143
+v 7.996998 -13.851207 8.498143
+v 11.309464 -11.309464 8.498143
+v 13.851207 -7.996998 8.498143
+v 15.449014 -4.139551 8.498143
+v 15.993996 0.000000 8.498143
+v 15.449014 4.139551 8.498143
+v 13.851207 7.996998 8.498143
+v 11.309464 11.309464 8.498143
+v 7.996998 13.851207 8.498143
+v 4.139551 15.449014 8.498143
+v 0.000000 15.993996 8.498143
+v -4.139551 15.449014 8.498143
+v -7.996998 13.851207 8.498143
+v -11.309464 11.309464 8.498143
+v -13.851207 7.996998 8.498143
+v -15.449014 4.139551 8.498143
+v -8.420767 20.746618 4.842749
+v -8.475399 20.654835 4.842749
+v 11.646690 19.123089 1.530000
+v 11.592058 19.081017 1.530000
+v -9.046678 0.000000 9.569704
+v -2.223176 0.000000 10.747155
+v -2.147423 -0.575400 10.747155
+v -2.147423 0.575400 10.747155
+v -7.834652 -4.523339 9.569704
+v -1.925327 -1.111588 10.747155
+v -1.572023 -1.572023 10.747155
+v -4.523339 -7.834652 9.569704
+v -1.111588 -1.925327 10.747155
+v -0.575400 -2.147423 10.747155
+v 0.000000 -9.046678 9.569704
+v 0.000000 -2.223176 10.747155
+v 0.575400 -2.147423 10.747155
+v 4.523339 -7.834652 9.569704
+v 1.111588 -1.925327 10.747155
+v 1.572023 -1.572023 10.747155
+v 7.834652 -4.523339 9.569704
+v 1.925327 -1.111588 10.747155
+v 2.147423 -0.575400 10.747155
+v 9.046678 0.000000 9.569704
+v 2.223176 0.000000 10.747155
+v 2.147423 0.575400 10.747155
+v 7.834652 4.523339 9.569704
+v 1.925327 1.111588 10.747155
+v 1.572023 1.572023 10.747155
+v 4.523339 7.834652 9.569704
+v 1.111588 1.925327 10.747155
+v 0.575400 2.147423 10.747155
+v 0.000000 9.046678 9.569704
+v 0.000000 2.223176 10.747155
+v -0.575400 2.147423 10.747155
+v -4.523339 7.834652 9.569704
+v -1.111588 1.925327 10.747155
+v -1.572023 1.572023 10.747155
+v -7.834652 4.523339 9.569704
+v -1.925327 1.111588 10.747155
+v -9.172170 0.000000 9.682111
+v -2.270258 -0.608314 10.866078
+v -2.350344 0.000000 10.866078
+v -2.270258 0.608314 10.866078
+v -7.943332 -4.586085 9.682111
+v -2.035458 -1.175172 10.866078
+v -1.661944 -1.661944 10.866078
+v -4.586085 -7.943332 9.682111
+v -1.175172 -2.035458 10.866078
+v -0.608314 -2.270258 10.866078
+v 0.000000 -9.172170 9.682111
+v 0.000000 -2.350344 10.866078
+v 0.608314 -2.270258 10.866078
+v 4.586085 -7.943332 9.682111
+v 1.175172 -2.035458 10.866078
+v 1.661944 -1.661944 10.866078
+v 7.943332 -4.586085 9.682111
+v 2.035458 -1.175172 10.866078
+v 2.270258 -0.608314 10.866078
+v 9.172170 0.000000 9.682111
+v 2.350344 0.000000 10.866078
+v 2.270258 0.608314 10.866078
+v 7.943332 4.586085 9.682111
+v 2.035458 1.175172 10.866078
+v 1.661944 1.661944 10.866078
+v 4.586085 7.943332 9.682111
+v 1.175172 2.035458 10.866078
+v 0.608314 2.270258 10.866078
+v 0.000000 9.172170 9.682111
+v 0.000000 2.350344 10.866078
+v -0.608314 2.270258 10.866078
+v -4.586085 7.943332 9.682111
+v -1.175172 2.035458 10.866078
+v -1.661944 1.661944 10.866078
+v -7.943332 4.586085 9.682111
+v -2.035458 1.175172 10.866078
+v -1.320806 0.000000 11.135052
+v -0.418436 0.000000 11.522949
+v -0.404178 -0.108299 11.522949
+v -0.404178 0.108299 11.522949
+v -1.143852 -0.660403 11.135052
+v -0.362376 -0.209218 11.522949
+v -0.295879 -0.295879 11.522949
+v -0.660403 -1.143852 11.135052
+v -0.209218 -0.362376 11.522949
+v -0.108299 -0.404178 11.522949
+v 0.000000 -1.320806 11.135052
+v 0.000000 -0.418436 11.522949
+v 0.108299 -0.404178 11.522949
+v 0.660403 -1.143852 11.135052
+v 0.209218 -0.362376 11.522949
+v 0.295879 -0.295879 11.522949
+v 1.143852 -0.660403 11.135052
+v 0.362376 -0.209218 11.522949
+v 0.404178 -0.108299 11.522949
+v 1.320806 0.000000 11.135052
+v 0.418436 0.000000 11.522949
+v 0.404178 0.108299 11.522949
+v 1.143852 0.660403 11.135052
+v 0.362376 0.209218 11.522949
+v 0.295879 0.295879 11.522949
+v 0.660403 1.143852 11.135052
+v 0.209218 0.362376 11.522949
+v 0.108299 0.404178 11.522949
+v 0.000000 1.320806 11.135052
+v 0.000000 0.418436 11.522949
+v -0.108299 0.404178 11.522949
+v -0.660403 1.143852 11.135052
+v -0.209218 0.362376 11.522949
+v -0.295879 0.295879 11.522949
+v -1.143852 0.660403 11.135052
+v -0.362376 0.209218 11.522949
+v -1.398389 0.000000 11.248201
+v -0.431221 -0.115545 11.630324
+v -0.446433 0.000000 11.630324
+v -0.431221 0.115545 11.630324
+v -1.211040 -0.699194 11.248201
+v -0.386622 -0.223217 11.630324
+v -0.315676 -0.315676 11.630324
+v -0.699194 -1.211040 11.248201
+v -0.223217 -0.386622 11.630324
+v -0.115545 -0.431221 11.630324
+v 0.000000 -1.398389 11.248201
+v 0.000000 -0.446433 11.630324
+v 0.115545 -0.431221 11.630324
+v 0.699194 -1.211040 11.248201
+v 0.223217 -0.386622 11.630324
+v 0.315676 -0.315676 11.630324
+v 1.211040 -0.699194 11.248201
+v 0.386622 -0.223217 11.630324
+v 0.431221 -0.115545 11.630324
+v 1.398389 0.000000 11.248201
+v 0.446433 0.000000 11.630324
+v 0.431221 0.115545 11.630324
+v 1.211040 0.699194 11.248201
+v 0.386622 0.223217 11.630324
+v 0.315676 0.315676 11.630324
+v 0.699194 1.211040 11.248201
+v 0.223217 0.386622 11.630324
+v 0.115545 0.431221 11.630324
+v 0.000000 1.398389 11.248201
+v 0.000000 0.446433 11.630324
+v -0.115545 0.431221 11.630324
+v -0.699194 1.211040 11.248201
+v -0.223217 0.386622 11.630324
+v -0.315676 0.315676 11.630324
+v -1.211040 0.699194 11.248201
+v -0.386622 0.223217 11.630324
+f 3487 3488 3489
+f 3490 3491 3492
+f 3492 3491 3489
+f 3489 3491 3487
+f 3493 3494 3495
+f 3491 3496 3497
+f 3497 3496 3498
+f 3498 3496 3494
+f 3490 3496 3491
+f 3495 3499 3500
+f 3494 3499 3495
+f 3496 3499 3494
+f 3500 3501 3502
+f 3499 3501 3500
+f 3502 3503 3504
+f 3501 3503 3502
+f 3504 3505 3506
+f 3503 3505 3504
+f 3507 3508 3509
+f 3509 3508 3510
+f 3506 3511 3512
+f 3512 3511 3513
+f 3513 3511 3507
+f 3505 3511 3506
+f 3507 3511 3508
+f 3514 3515 3516
+f 3516 3515 3517
+f 3517 3515 3518
+f 3511 3519 3508
+f 3508 3519 3520
+f 3515 3521 3518
+f 3519 3521 3520
+f 3520 3521 3522
+f 3522 3521 3515
+f 3495 3489 3493
+f 3493 3489 3523
+f 3523 3489 3488
+f 3524 3490 3525
+f 3526 3490 3524
+f 3527 3525 3490
+f 3492 3527 3490
+f 3528 3529 3530
+f 3529 3531 3530
+f 3532 3533 3529
+f 3529 3533 3531
+f 3530 3534 3535
+f 3535 3534 3536
+f 3531 3534 3530
+f 3537 3538 3532
+f 3532 3538 3533
+f 3536 3539 3540
+f 3534 3539 3536
+f 3541 3542 3537
+f 3537 3542 3538
+f 3540 3543 3544
+f 3539 3543 3540
+f 3545 3546 3541
+f 3541 3546 3542
+f 3543 3547 3544
+f 3547 3548 3544
+f 3547 3549 3548
+f 3550 3551 3545
+f 3545 3551 3546
+f 3549 3552 3548
+f 3549 3553 3552
+f 3550 3554 3551
+f 3550 3519 3554
+f 3521 3519 3550
+f 3553 3555 3552
+f 3555 3556 3552
+f 3553 3557 3555
+f 3519 3558 3554
+f 3519 3511 3558
+f 3559 3560 3557
+f 3557 3560 3555
+f 3558 3505 3561
+f 3511 3505 3558
+f 3559 3562 3560
+f 3563 3564 3562
+f 3562 3564 3560
+f 3561 3503 3565
+f 3505 3503 3561
+f 3563 3566 3564
+f 3565 3501 3567
+f 3503 3501 3565
+f 3567 3499 3568
+f 3501 3499 3567
+f 3569 3526 3566
+f 3566 3526 3564
+f 3568 3496 3569
+f 3526 3496 3490
+f 3499 3496 3568
+f 3569 3496 3526
+f 3521 3550 3570
+f 3571 3521 3570
+f 3572 3518 3521
+f 3572 3521 3571
+f 3573 3517 3572
+f 3572 3517 3518
+f 3574 3516 3573
+f 3573 3516 3517
+f 3575 3514 3574
+f 3574 3514 3516
+f 3514 3575 3576
+f 3514 3576 3515
+f 3508 3520 3577
+f 3520 3578 3577
+f 3522 3579 3520
+f 3520 3579 3578
+f 3515 3576 3522
+f 3522 3576 3579
+f 3580 3510 3508
+f 3580 3508 3577
+f 3580 3581 3510
+f 3581 3509 3510
+f 3581 3582 3509
+f 3582 3507 3509
+f 3582 3583 3507
+f 3583 3584 3507
+f 3584 3585 3507
+f 3585 3513 3507
+f 3586 3512 3513
+f 3586 3513 3585
+f 3586 3585 3584
+f 3586 3584 3583
+f 3587 3506 3512
+f 3587 3512 3586
+f 3588 3504 3506
+f 3588 3506 3587
+f 3589 3502 3504
+f 3589 3504 3588
+f 3590 3500 3502
+f 3591 3590 3502
+f 3592 3502 3589
+f 3592 3591 3502
+f 3593 3495 3500
+f 3593 3500 3590
+f 3593 3590 3591
+f 3593 3591 3592
+f 3527 3492 3489
+f 3594 3489 3495
+f 3594 3495 3593
+f 3594 3527 3489
+f 3493 3595 3596
+f 3493 3596 3494
+f 3488 3487 3597
+f 3488 3597 3598
+f 3488 3598 3599
+f 3523 3599 3595
+f 3523 3488 3599
+f 3493 3523 3595
+f 3491 3497 3600
+f 3600 3497 3601
+f 3601 3497 3602
+f 3602 3498 3596
+f 3497 3498 3602
+f 3498 3494 3596
+f 3597 3487 3491
+f 3597 3491 3600
+f 3564 3526 3524
+f 3564 3524 3603
+f 3560 3603 3604
+f 3560 3564 3603
+f 3555 3604 3605
+f 3555 3560 3604
+f 3606 3607 3608
+f 3609 3606 3608
+f 3610 3611 3606
+f 3610 3606 3609
+f 3612 3608 3613
+f 3612 3613 3614
+f 3612 3609 3608
+f 3615 3616 3611
+f 3615 3611 3610
+f 3617 3614 3618
+f 3617 3612 3614
+f 3619 3620 3616
+f 3619 3616 3615
+f 3621 3618 3622
+f 3621 3617 3618
+f 3623 3621 3622
+f 3624 3625 3620
+f 3624 3620 3619
+f 3626 3623 3622
+f 3627 3623 3626
+f 3628 3570 3625
+f 3628 3625 3624
+f 3629 3627 3626
+f 3630 3627 3629
+f 3631 3570 3628
+f 3632 3571 3570
+f 3632 3570 3631
+f 3605 3630 3629
+f 3633 3605 3629
+f 3634 3630 3605
+f 3635 3632 3631
+f 3636 3632 3635
+f 3604 3634 3605
+f 3604 3637 3634
+f 3638 3635 3639
+f 3638 3636 3635
+f 3640 3637 3604
+f 3603 3641 3640
+f 3642 3639 3643
+f 3642 3638 3639
+f 3644 3641 3603
+f 3645 3643 3646
+f 3645 3642 3643
+f 3647 3646 3648
+f 3647 3645 3646
+f 3524 3649 3644
+f 3524 3644 3603
+f 3650 3648 3649
+f 3650 3524 3525
+f 3650 3647 3648
+f 3650 3649 3524
+f 3604 3603 3640
+f 3598 3597 3594
+f 3600 3525 3527
+f 3600 3527 3594
+f 3600 3594 3597
+f 3596 3595 3593
+f 3650 3600 3601
+f 3650 3601 3602
+f 3650 3602 3596
+f 3650 3525 3600
+f 3647 3593 3592
+f 3647 3596 3593
+f 3647 3650 3596
+f 3645 3592 3589
+f 3645 3647 3592
+f 3642 3589 3588
+f 3642 3645 3589
+f 3638 3588 3587
+f 3638 3642 3588
+f 3577 3582 3581
+f 3577 3581 3580
+f 3636 3587 3586
+f 3636 3586 3583
+f 3636 3583 3582
+f 3636 3638 3587
+f 3636 3582 3577
+f 3576 3575 3574
+f 3576 3574 3573
+f 3576 3573 3572
+f 3632 3636 3577
+f 3632 3577 3578
+f 3571 3576 3572
+f 3571 3632 3578
+f 3571 3578 3579
+f 3571 3579 3576
+f 3594 3593 3595
+f 3594 3595 3599
+f 3594 3599 3598
+f 3556 3555 3605
+f 3633 3556 3605
+f 3651 3652 3556
+f 3651 3556 3633
+f 3653 3654 3655
+f 3655 3654 3656
+f 3656 3654 3657
+f 3658 3659 3660
+f 3659 3661 3660
+f 3654 3528 3662
+f 3662 3528 3663
+f 3653 3528 3654
+f 3663 3530 3659
+f 3528 3530 3663
+f 3661 3535 3664
+f 3664 3535 3665
+f 3530 3535 3659
+f 3659 3535 3661
+f 3665 3536 3666
+f 3535 3536 3665
+f 3666 3540 3667
+f 3536 3540 3666
+f 3667 3544 3668
+f 3540 3544 3667
+f 3668 3548 3669
+f 3544 3548 3668
+f 3670 3671 3672
+f 3669 3673 3674
+f 3548 3673 3669
+f 3670 3675 3671
+f 3548 3552 3673
+f 3673 3552 3676
+f 3676 3552 3677
+f 3677 3552 3675
+f 3675 3652 3671
+f 3552 3556 3675
+f 3675 3556 3652
+f 3671 3669 3672
+f 3672 3669 3678
+f 3678 3669 3674
+f 3529 3528 3606
+f 3528 3607 3606
+f 3653 3679 3528
+f 3528 3679 3607
+f 3550 3545 3570
+f 3570 3545 3625
+f 3625 3541 3620
+f 3545 3541 3625
+f 3620 3537 3616
+f 3541 3537 3620
+f 3616 3532 3611
+f 3537 3532 3616
+f 3611 3529 3606
+f 3532 3529 3611
+f 3562 3680 3563
+f 3681 3680 3562
+f 3563 3682 3566
+f 3680 3682 3563
+f 3566 3683 3569
+f 3682 3683 3566
+f 3569 3684 3568
+f 3683 3684 3569
+f 3568 3685 3567
+f 3567 3685 3565
+f 3684 3685 3568
+f 3685 3686 3565
+f 3565 3687 3561
+f 3686 3687 3565
+f 3561 3688 3558
+f 3687 3688 3561
+f 3558 3689 3554
+f 3688 3689 3558
+f 3554 3690 3551
+f 3551 3690 3546
+f 3689 3690 3554
+f 3690 3691 3546
+f 3691 3692 3546
+f 3546 3692 3542
+f 3542 3692 3538
+f 3692 3693 3538
+f 3693 3694 3538
+f 3538 3694 3533
+f 3533 3695 3531
+f 3694 3695 3533
+f 3531 3695 3534
+f 3695 3696 3534
+f 3534 3697 3539
+f 3696 3697 3534
+f 3539 3698 3543
+f 3543 3698 3547
+f 3697 3698 3539
+f 3698 3699 3547
+f 3547 3700 3549
+f 3699 3700 3547
+f 3549 3701 3553
+f 3700 3701 3549
+f 3553 3702 3557
+f 3701 3702 3553
+f 3557 3703 3559
+f 3702 3703 3557
+f 3559 3681 3562
+f 3703 3681 3559
+f 3704 3679 3705
+f 3704 3705 3706
+f 3704 3706 3707
+f 3708 3709 3710
+f 3711 3708 3710
+f 3607 3704 3712
+f 3607 3712 3713
+f 3607 3679 3704
+f 3608 3713 3708
+f 3608 3607 3713
+f 3613 3711 3714
+f 3613 3714 3715
+f 3613 3608 3708
+f 3613 3708 3711
+f 3614 3715 3716
+f 3614 3613 3715
+f 3618 3716 3717
+f 3618 3614 3716
+f 3622 3717 3718
+f 3622 3618 3717
+f 3626 3718 3719
+f 3626 3622 3718
+f 3720 3721 3722
+f 3723 3719 3724
+f 3723 3626 3719
+f 3725 3721 3720
+f 3651 3725 3720
+f 3629 3626 3723
+f 3629 3723 3726
+f 3629 3726 3727
+f 3629 3727 3725
+f 3633 3629 3725
+f 3633 3725 3651
+f 3719 3720 3722
+f 3719 3722 3728
+f 3719 3728 3724
+f 3729 3730 3640
+f 3729 3640 3641
+f 3731 3641 3644
+f 3731 3729 3641
+f 3732 3644 3649
+f 3732 3731 3644
+f 3733 3649 3648
+f 3733 3732 3649
+f 3734 3648 3646
+f 3734 3733 3648
+f 3735 3646 3643
+f 3735 3734 3646
+f 3736 3643 3639
+f 3736 3639 3635
+f 3736 3735 3643
+f 3737 3736 3635
+f 3738 3635 3631
+f 3738 3737 3635
+f 3739 3631 3628
+f 3739 3738 3631
+f 3740 3628 3624
+f 3740 3624 3619
+f 3740 3739 3628
+f 3741 3740 3619
+f 3742 3741 3619
+f 3742 3619 3615
+f 3743 3742 3615
+f 3743 3615 3610
+f 3743 3610 3609
+f 3744 3743 3609
+f 3745 3744 3609
+f 3745 3609 3612
+f 3746 3612 3617
+f 3746 3617 3621
+f 3746 3745 3612
+f 3747 3746 3621
+f 3748 3621 3623
+f 3748 3747 3621
+f 3749 3623 3627
+f 3749 3748 3623
+f 3750 3627 3630
+f 3750 3749 3627
+f 3751 3630 3634
+f 3751 3634 3637
+f 3751 3750 3630
+f 3752 3751 3637
+f 3730 3637 3640
+f 3730 3752 3637
+f 3719 3718 3753
+f 3719 3753 3754
+f 3719 3754 3668
+f 3669 3719 3668
+f 3720 3719 3669
+f 3671 3720 3669
+f 3651 3671 3652
+f 3651 3720 3671
+f 3715 3714 3755
+f 3715 3755 3756
+f 3715 3756 3664
+f 3665 3715 3664
+f 3716 3715 3665
+f 3666 3716 3665
+f 3717 3716 3666
+f 3667 3717 3666
+f 3718 3717 3667
+f 3753 3718 3667
+f 3754 3753 3667
+f 3668 3754 3667
+f 3710 3660 3711
+f 3709 3658 3710
+f 3710 3658 3660
+f 3660 3661 3711
+f 3661 3714 3711
+f 3661 3755 3714
+f 3661 3756 3755
+f 3661 3664 3756
+f 3658 3709 3659
+f 3659 3709 3708
+f 3662 3704 3654
+f 3663 3712 3662
+f 3662 3712 3704
+f 3663 3713 3712
+f 3659 3708 3663
+f 3663 3708 3713
+f 3707 3657 3704
+f 3704 3657 3654
+f 3706 3657 3707
+f 3705 3656 3706
+f 3706 3656 3657
+f 3679 3655 3705
+f 3705 3655 3656
+f 3679 3653 3655
+f 3672 3721 3670
+f 3722 3721 3672
+f 3728 3672 3678
+f 3728 3722 3672
+f 3724 3678 3674
+f 3724 3728 3678
+f 3724 3674 3723
+f 3723 3674 3673
+f 3670 3721 3675
+f 3675 3721 3725
+f 3725 3677 3675
+f 3725 3727 3677
+f 3677 3726 3676
+f 3727 3726 3677
+f 3676 3723 3673
+f 3726 3723 3676
+f 3681 3757 3680
+f 3758 3759 3757
+f 3703 3757 3681
+f 3760 3758 3757
+f 3680 3761 3682
+f 3682 3761 3683
+f 3762 3761 3759
+f 3763 3761 3762
+f 3757 3761 3680
+f 3759 3761 3757
+f 3683 3764 3684
+f 3684 3764 3685
+f 3765 3764 3763
+f 3766 3764 3765
+f 3761 3764 3683
+f 3763 3764 3761
+f 3685 3767 3686
+f 3686 3767 3687
+f 3764 3767 3685
+f 3766 3767 3764
+f 3768 3767 3766
+f 3769 3767 3768
+f 3687 3770 3688
+f 3688 3770 3689
+f 3771 3770 3769
+f 3772 3770 3771
+f 3767 3770 3687
+f 3769 3770 3767
+f 3689 3773 3690
+f 3690 3773 3691
+f 3770 3773 3689
+f 3774 3773 3772
+f 3775 3773 3774
+f 3772 3773 3770
+f 3691 3776 3692
+f 3692 3776 3693
+f 3777 3776 3775
+f 3778 3776 3777
+f 3773 3776 3691
+f 3775 3776 3773
+f 3693 3779 3694
+f 3694 3779 3695
+f 3780 3779 3778
+f 3781 3779 3780
+f 3778 3779 3776
+f 3776 3779 3693
+f 3695 3782 3696
+f 3696 3782 3697
+f 3781 3782 3779
+f 3783 3782 3781
+f 3784 3782 3783
+f 3779 3782 3695
+f 3784 3785 3782
+f 3697 3785 3698
+f 3698 3785 3699
+f 3786 3785 3784
+f 3787 3785 3786
+f 3782 3785 3697
+f 3785 3788 3699
+f 3699 3788 3700
+f 3787 3788 3785
+f 3700 3788 3701
+f 3789 3788 3787
+f 3790 3788 3789
+f 3703 3791 3757
+f 3701 3791 3702
+f 3702 3791 3703
+f 3788 3791 3701
+f 3792 3791 3790
+f 3760 3791 3792
+f 3757 3791 3760
+f 3790 3791 3788
+f 3793 3730 3729
+f 3794 3795 3793
+f 3793 3752 3730
+f 3795 3796 3793
+f 3797 3729 3731
+f 3797 3731 3732
+f 3797 3798 3794
+f 3797 3799 3798
+f 3797 3793 3729
+f 3797 3794 3793
+f 3800 3732 3733
+f 3800 3733 3734
+f 3800 3801 3799
+f 3800 3802 3801
+f 3800 3797 3732
+f 3800 3799 3797
+f 3803 3734 3735
+f 3803 3735 3736
+f 3803 3802 3800
+f 3803 3804 3802
+f 3803 3805 3804
+f 3803 3800 3734
+f 3806 3736 3737
+f 3806 3737 3738
+f 3806 3807 3805
+f 3806 3808 3807
+f 3806 3803 3736
+f 3806 3805 3803
+f 3809 3806 3738
+f 3809 3738 3739
+f 3809 3739 3740
+f 3809 3808 3806
+f 3809 3810 3808
+f 3809 3811 3810
+f 3812 3740 3741
+f 3812 3741 3742
+f 3812 3813 3811
+f 3812 3814 3813
+f 3812 3809 3740
+f 3812 3811 3809
+f 3815 3742 3743
+f 3815 3743 3744
+f 3815 3816 3814
+f 3815 3817 3816
+f 3815 3814 3812
+f 3815 3812 3742
+f 3818 3744 3745
+f 3818 3745 3746
+f 3818 3817 3815
+f 3818 3819 3817
+f 3818 3820 3819
+f 3818 3815 3744
+f 3821 3820 3818
+f 3821 3746 3747
+f 3821 3747 3748
+f 3821 3822 3820
+f 3821 3823 3822
+f 3821 3818 3746
+f 3824 3821 3748
+f 3824 3823 3821
+f 3824 3748 3749
+f 3824 3749 3750
+f 3824 3825 3823
+f 3824 3826 3825
+f 3827 3750 3751
+f 3827 3751 3752
+f 3827 3824 3750
+f 3827 3752 3793
+f 3827 3828 3826
+f 3827 3796 3828
+f 3827 3793 3796
+f 3827 3826 3824
+f 3758 3829 3759
+f 3830 3831 3829
+f 3760 3829 3758
+f 3832 3830 3829
+f 3759 3833 3762
+f 3762 3833 3763
+f 3834 3833 3831
+f 3835 3833 3834
+f 3829 3833 3759
+f 3831 3833 3829
+f 3763 3836 3765
+f 3765 3836 3766
+f 3837 3836 3835
+f 3838 3836 3837
+f 3833 3836 3763
+f 3835 3836 3833
+f 3766 3839 3768
+f 3768 3839 3769
+f 3836 3839 3766
+f 3838 3839 3836
+f 3840 3839 3838
+f 3841 3839 3840
+f 3769 3842 3771
+f 3771 3842 3772
+f 3843 3842 3841
+f 3844 3842 3843
+f 3839 3842 3769
+f 3841 3842 3839
+f 3772 3845 3774
+f 3774 3845 3775
+f 3842 3845 3772
+f 3846 3845 3844
+f 3847 3845 3846
+f 3844 3845 3842
+f 3775 3848 3777
+f 3777 3848 3778
+f 3849 3848 3847
+f 3850 3848 3849
+f 3845 3848 3775
+f 3847 3848 3845
+f 3778 3851 3780
+f 3780 3851 3781
+f 3852 3851 3850
+f 3853 3851 3852
+f 3850 3851 3848
+f 3848 3851 3778
+f 3781 3854 3783
+f 3783 3854 3784
+f 3853 3854 3851
+f 3855 3854 3853
+f 3856 3854 3855
+f 3851 3854 3781
+f 3856 3857 3854
+f 3784 3857 3786
+f 3786 3857 3787
+f 3858 3857 3856
+f 3859 3857 3858
+f 3854 3857 3784
+f 3859 3860 3857
+f 3787 3860 3789
+f 3789 3860 3790
+f 3857 3860 3787
+f 3861 3860 3859
+f 3862 3860 3861
+f 3860 3863 3790
+f 3790 3863 3792
+f 3792 3863 3760
+f 3760 3863 3829
+f 3864 3863 3862
+f 3832 3863 3864
+f 3829 3863 3832
+f 3862 3863 3860
+f 3865 3795 3794
+f 3866 3867 3865
+f 3865 3796 3795
+f 3867 3868 3865
+f 3869 3794 3798
+f 3869 3798 3799
+f 3869 3870 3866
+f 3869 3871 3870
+f 3869 3865 3794
+f 3869 3866 3865
+f 3872 3799 3801
+f 3872 3801 3802
+f 3872 3873 3871
+f 3872 3874 3873
+f 3872 3869 3799
+f 3872 3871 3869
+f 3875 3802 3804
+f 3875 3804 3805
+f 3875 3874 3872
+f 3875 3876 3874
+f 3875 3877 3876
+f 3875 3872 3802
+f 3878 3805 3807
+f 3878 3807 3808
+f 3878 3879 3877
+f 3878 3880 3879
+f 3878 3875 3805
+f 3878 3877 3875
+f 3881 3878 3808
+f 3881 3808 3810
+f 3881 3810 3811
+f 3881 3880 3878
+f 3881 3882 3880
+f 3881 3883 3882
+f 3884 3811 3813
+f 3884 3813 3814
+f 3884 3885 3883
+f 3884 3886 3885
+f 3884 3881 3811
+f 3884 3883 3881
+f 3887 3814 3816
+f 3887 3816 3817
+f 3887 3888 3886
+f 3887 3889 3888
+f 3887 3886 3884
+f 3887 3884 3814
+f 3890 3817 3819
+f 3890 3819 3820
+f 3890 3889 3887
+f 3890 3891 3889
+f 3890 3892 3891
+f 3890 3887 3817
+f 3893 3892 3890
+f 3893 3820 3822
+f 3893 3822 3823
+f 3893 3894 3892
+f 3893 3895 3894
+f 3893 3890 3820
+f 3896 3823 3825
+f 3896 3825 3826
+f 3896 3897 3895
+f 3896 3898 3897
+f 3896 3895 3893
+f 3896 3893 3823
+f 3899 3826 3828
+f 3899 3828 3796
+f 3899 3796 3865
+f 3899 3900 3898
+f 3899 3868 3900
+f 3899 3865 3868
+f 3899 3896 3826
+f 3899 3898 3896
+f 3846 3844 3847
+f 3861 3832 3862
+f 3862 3832 3864
+f 3843 3841 3844
+f 3840 3838 3841
+f 3830 3835 3831
+f 3831 3835 3834
+f 3837 3835 3838
+f 3847 3835 3849
+f 3849 3835 3850
+f 3850 3835 3852
+f 3852 3835 3853
+f 3853 3835 3855
+f 3855 3835 3856
+f 3856 3835 3858
+f 3858 3835 3859
+f 3859 3835 3861
+f 3832 3835 3830
+f 3844 3835 3847
+f 3841 3835 3844
+f 3861 3835 3832
+f 3838 3835 3841
+f 3871 3867 3866
+f 3871 3866 3870
+f 3871 3873 3874
+f 3871 3874 3876
+f 3871 3876 3877
+f 3871 3877 3879
+f 3871 3879 3880
+f 3871 3880 3882
+f 3871 3882 3883
+f 3871 3883 3885
+f 3871 3885 3886
+f 3871 3886 3888
+f 3871 3888 3889
+f 3871 3889 3891
+f 3871 3891 3892
+f 3871 3892 3894
+f 3871 3894 3895
+f 3871 3895 3897
+f 3871 3897 3898
+f 3871 3898 3900
+f 3871 3900 3868
+f 3871 3868 3867
+o Scene
+v 16.095442 7.683469 1.530000
+v 14.457622 4.827481 1.530000
+v 16.095442 7.683469 2.000000
+v 14.457622 4.827481 2.000000
+v 13.610153 1.646141 1.530000
+v 13.610153 1.646141 2.000000
+v 13.610153 -1.646141 1.530000
+v 13.610153 -1.646141 2.000000
+v 14.457622 -4.827481 1.530000
+v 14.457622 -4.827481 2.000000
+v 16.095442 -7.683469 1.530000
+v 16.095442 -7.683469 2.000000
+v 17.785412 8.493776 1.530000
+v 19.222473 4.354493 1.530000
+v 19.709518 0.000000 1.530000
+v 19.222473 -4.354493 1.530000
+v 17.785412 -8.493776 1.530000
+v 17.785412 -8.493776 2.000000
+v 19.222473 -4.354493 2.000000
+v 19.709518 0.000000 2.000000
+v 19.222473 4.354493 2.000000
+v 17.785412 8.493776 2.000000
+f 3901 3902 3903
+f 3903 3902 3904
+f 3904 3905 3906
+f 3902 3905 3904
+f 3906 3907 3908
+f 3905 3907 3906
+f 3908 3909 3910
+f 3907 3909 3908
+f 3910 3911 3912
+f 3909 3911 3910
+f 3913 3914 3901
+f 3914 3902 3901
+f 3915 3905 3914
+f 3914 3905 3902
+f 3916 3907 3915
+f 3915 3907 3905
+f 3916 3909 3907
+f 3917 3911 3916
+f 3916 3911 3909
+f 3911 3917 3912
+f 3912 3917 3918
+f 3919 3908 3910
+f 3919 3910 3912
+f 3919 3912 3918
+f 3920 3906 3908
+f 3920 3908 3919
+f 3921 3904 3906
+f 3921 3906 3920
+f 3903 3904 3921
+f 3922 3903 3921
+f 3922 3901 3903
+f 3913 3901 3922
+f 3917 3916 3918
+f 3918 3916 3919
+f 3920 3915 3921
+f 3919 3915 3920
+f 3916 3915 3919
+f 3921 3914 3922
+f 3915 3914 3921
+f 3914 3913 3922
+o Screen
+v 17.785412 -8.493776 2.000000
+v 17.080334 -9.835005 1.530000
+v 16.689651 -10.484303 1.530000
+v 16.689651 -10.484303 7.722313
+v 18.603285 -6.510212 7.722313
+v 17.445766 -9.171168 1.530000
+v 17.785412 -8.493776 1.530000
+v 19.222473 -4.354493 2.000000
+v 19.585215 -2.210074 7.722313
+v 19.709518 0.000000 2.000000
+v 19.586266 2.200751 7.722313
+v 19.222473 4.354493 2.000000
+v 18.606382 6.501357 7.722313
+v 17.785412 8.493776 2.000000
+v 16.694641 10.476357 7.722313
+v 17.447222 9.168401 1.530000
+v 17.785412 8.493776 1.530000
+v 17.083452 9.829584 1.530000
+v 16.694641 10.476357 1.530000
+v 19.222473 -4.354493 1.530000
+v 19.709518 0.000000 1.530000
+v 19.222473 4.354493 1.530000
+v 18.946016 12.052787 1.530000
+v 21.170414 7.485637 1.530000
+v 22.311277 2.535361 1.530000
+v 22.310217 -2.544679 1.530000
+v 21.167286 -7.494479 1.530000
+v 18.940981 -12.060699 1.530000
+v 18.946016 12.052787 7.722313
+v 21.170414 7.485637 7.722313
+v 22.311277 2.535361 7.722313
+v 22.310217 -2.544679 7.722313
+v 21.167286 -7.494479 7.722313
+v 18.940981 -12.060699 7.722313
+f 3923 3924 3925
+f 3923 3925 3926
+f 3923 3926 3927
+f 3928 3924 3923
+f 3929 3928 3923
+f 3930 3927 3931
+f 3930 3923 3927
+f 3932 3931 3933
+f 3932 3930 3931
+f 3934 3933 3935
+f 3934 3932 3933
+f 3936 3935 3937
+f 3936 3934 3935
+f 3938 3939 3936
+f 3940 3938 3936
+f 3941 3936 3937
+f 3941 3940 3936
+f 3942 3929 3923
+f 3942 3923 3930
+f 3943 3932 3934
+f 3943 3930 3932
+f 3943 3942 3930
+f 3944 3934 3936
+f 3944 3943 3934
+f 3939 3944 3936
+f 3945 3940 3941
+f 3945 3938 3940
+f 3946 3939 3945
+f 3945 3939 3938
+f 3947 3944 3946
+f 3946 3944 3939
+f 3948 3943 3947
+f 3947 3943 3944
+f 3948 3942 3943
+f 3948 3949 3942
+f 3949 3929 3942
+f 3929 3950 3928
+f 3928 3950 3924
+f 3949 3950 3929
+f 3950 3925 3924
+f 3945 3941 3937
+f 3945 3937 3951
+f 3937 3952 3951
+f 3935 3952 3937
+f 3953 3952 3935
+f 3933 3953 3935
+f 3954 3953 3933
+f 3931 3954 3933
+f 3927 3955 3954
+f 3927 3954 3931
+f 3926 3956 3955
+f 3926 3955 3927
+f 3925 3950 3926
+f 3926 3950 3956
+f 3955 3956 3950
+f 3955 3950 3949
+f 3954 3949 3948
+f 3954 3955 3949
+f 3953 3948 3947
+f 3953 3954 3948
+f 3952 3947 3946
+f 3952 3953 3947
+f 3951 3946 3945
+f 3951 3952 3946
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/coliseum.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/coliseum.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/coliseum.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/coliseum.obj	2025-08-26 18:16:07.537772189 +0000
@@ -0,0 +1,17578 @@
+# Coliseum
+# (C) Linux Studio Plugins Project
+o Coliseum
+v 82.374229 -1.000001 29.739475
+v 82.383362 -0.000001 25.724554
+v 82.374229 -1.000001 25.724554
+v 82.383362 -0.000001 29.739475
+v 82.374229 0.999999 25.724554
+v 82.374229 0.999999 29.739475
+v 79.964790 -0.401509 29.739475
+v 79.957542 -1.000001 29.739475
+v 79.965813 -0.000001 29.739475
+v 64.004601 -1.000001 15.686283
+v 64.004601 -1.000001 17.595785
+v 64.445457 -1.000001 17.595785
+v 78.985733 -1.000001 25.736622
+v 79.957542 -1.000001 25.736622
+v 79.948410 -1.000001 25.724554
+v 79.957970 -0.000001 25.724554
+v 79.948410 0.999999 25.724554
+v 79.954964 0.999999 25.736622
+v 79.954964 0.999999 29.739475
+v 78.983101 0.999999 25.736622
+v 64.000900 0.999999 15.683977
+v 64.441788 0.999999 17.595785
+v 64.000885 0.999999 17.595785
+v 79.964790 -0.401509 32.582039
+v 78.742325 11.192636 25.736622
+v 78.487259 12.298221 32.582039
+v 75.727638 20.637951 25.736622
+v 74.286400 23.762178 32.582039
+v 71.350693 28.932697 29.723917
+v 71.350693 28.932697 25.736624
+v 64.483055 37.716869 25.736624
+v 70.244370 30.598848 25.736624
+v 70.244370 30.598848 29.723028
+v 68.229103 33.348446 32.582039
+v 61.106724 41.042332 32.582039
+v 58.178036 43.568798 25.736624
+v 51.546734 48.349045 29.718903
+v 51.546734 48.349045 25.736624
+v 50.762253 48.842773 32.582043
+v 49.845821 49.402679 29.719164
+v 38.511002 55.047115 32.582043
+v 49.845821 49.402679 25.736624
+v 30.591658 57.848106 25.736624
+v 30.591658 57.848106 29.726017
+v 21.555859 60.130001 32.582043
+v 28.671888 58.409340 25.736624
+v 28.671888 58.409340 29.726980
+v 15.082416 61.239292 25.736624
+v 1.000000 62.283123 29.739477
+v 1.000000 62.283123 25.736624
+v 1.982464 62.268902 32.582043
+v -1.000000 62.285275 29.739477
+v -15.091408 61.270271 25.736624
+v -1.000000 62.285275 25.736624
+v -14.422338 61.360184 32.582043
+v -28.688749 58.464714 29.739477
+v -28.688749 58.464714 25.736624
+v -28.953821 58.390255 32.582043
+v -30.609467 57.906597 29.739477
+v -43.102142 53.108765 32.582043
+v -30.609467 57.906597 25.736624
+v -49.892338 49.473202 25.736624
+v -49.892338 49.473202 29.739477
+v -56.659760 44.877636 32.582043
+v -60.376137 41.814751 25.736624
+v -51.593704 48.420258 25.736624
+v -51.593704 48.420258 29.739477
+v -67.842796 33.962769 32.582039
+v -65.546158 36.680145 25.736624
+v -70.303787 30.638414 29.739477
+v -70.303787 30.638414 25.736624
+v -71.407608 28.970598 29.739477
+v -75.779388 20.646854 25.736622
+v -71.407608 28.970598 25.736624
+v -75.201881 21.969065 32.582039
+v -78.773483 11.183832 25.736622
+v -79.227577 8.830652 32.582039
+v -79.957542 0.999999 29.739475
+v -79.957542 0.999999 25.736622
+v -78.742325 -11.192638 25.736622
+v -79.954964 -1.000001 25.736622
+v -79.954964 -1.000001 29.739475
+v -79.809990 -3.968591 32.582039
+v -77.714043 -15.145662 32.582039
+v -75.727638 -20.637955 25.736622
+v -73.571671 -25.143974 32.582039
+v -71.350693 -28.932701 29.723913
+v -71.350693 -28.932701 25.736620
+v -64.483055 -37.716869 25.736620
+v -70.244370 -30.598852 25.736620
+v -70.244370 -30.598852 29.723024
+v -68.033501 -33.598423 32.582039
+v -61.658138 -40.531960 32.582039
+v -58.178036 -43.568798 25.736620
+v -51.546734 -48.349045 29.718899
+v -51.546734 -48.349045 25.736620
+v -52.446781 -47.765553 32.582035
+v -49.845821 -49.402679 29.719160
+v -41.547756 -53.743702 32.582035
+v -49.845821 -49.402679 25.736620
+v -30.591658 -57.848106 25.736620
+v -30.591658 -57.848106 29.726013
+v -26.469210 -59.001091 32.582035
+v -28.671888 -58.409340 25.736620
+v -28.671888 -58.409340 29.726976
+v -15.213863 -61.220856 25.736620
+v -9.019151 -61.912159 32.582035
+v -1.000000 -62.283123 25.736620
+v -1.000000 -62.283123 29.739473
+v 7.405601 -62.049629 32.582035
+v 1.000000 -62.285275 25.736620
+v 1.000000 -62.285275 29.739473
+v 15.248192 -61.248581 25.736620
+v 28.688749 -58.464714 29.739473
+v 28.688749 -58.464714 25.736620
+v 27.576012 -58.768497 32.582035
+v 30.609467 -57.906597 29.739473
+v 43.341114 -52.994713 32.582035
+v 30.609467 -57.906597 25.736620
+v 49.892338 -49.473202 25.736620
+v 49.892338 -49.473202 29.739473
+v 51.593704 -48.420258 29.739473
+v 58.358475 -43.532707 32.582039
+v 60.376137 -41.814751 25.736620
+v 51.593704 -48.420258 25.736620
+v 65.546158 -36.680145 25.736620
+v 70.303787 -30.638418 29.739473
+v 70.303787 -30.638418 25.736620
+v 68.874962 -32.627438 32.582039
+v 71.407608 -28.970602 29.739473
+v 75.779388 -20.646858 25.736622
+v 71.407608 -28.970602 25.736620
+v 75.848709 -20.481495 32.582039
+v 78.773483 -11.183834 25.736622
+v 78.854210 -10.804428 32.582039
+v 74.887146 -20.262028 25.736622
+v 70.598671 -28.431976 25.736620
+v 77.822960 -10.982240 25.736622
+v 64.840141 -16.791273 19.799999
+v 61.536156 -14.509326 17.595785
+v 58.495178 -20.372959 17.595785
+v 65.603142 -14.942526 19.799999
+v 63.601284 -7.970113 17.595785
+v 70.115913 -18.988890 23.000000
+v 70.879631 -17.140442 23.000000
+v 58.128204 -20.128613 17.595785
+v 61.131332 -14.335052 17.595785
+v 63.170067 -7.879021 17.595785
+v -1.000000 -46.332970 15.684329
+v -24.025030 -43.147472 15.683993
+v -24.025030 -43.147472 17.595783
+v -1.000000 -46.332970 17.595783
+v 22.762934 -43.542110 15.683993
+v 1.000000 -46.335480 15.685910
+v 1.000000 -46.335480 17.595783
+v 24.041683 -43.202168 17.595783
+v 24.041683 -43.202168 15.703124
+v 35.788834 -38.923447 15.683993
+v 25.963871 -42.648880 15.704364
+v 25.963871 -42.648880 17.595783
+v 41.100574 -36.144379 17.595783
+v 41.100574 -36.144379 15.711573
+v 47.668396 -31.664364 15.683994
+v 42.810513 -35.104427 15.711974
+v 42.810513 -35.104427 17.595783
+v 49.617649 -30.037235 17.595783
+v 53.513515 -26.207851 17.595783
+v 55.580910 -23.755255 15.683994
+v 57.026207 -21.797644 17.595785
+v 57.026207 -21.797644 15.707766
+v 60.729580 -15.263779 15.683994
+v 58.128204 -20.128613 15.706448
+v 63.133755 -8.043282 15.683995
+v 64.015945 -0.279105 15.685441
+v 64.015945 -0.279105 15.683995
+v -0.662511 -46.336334 15.683993
+v 64.016495 -0.000001 15.685115
+v 63.140995 7.876788 15.683995
+v 63.140995 7.876788 17.595785
+v 61.083679 14.317352 15.683996
+v 61.083679 14.317353 17.595785
+v 58.071842 20.091084 15.683996
+v 58.071842 20.091084 17.595785
+v 63.572159 7.968172 17.595785
+v 61.488392 14.491858 17.595785
+v 58.438789 20.335413 17.595785
+v 65.559143 14.924196 19.799999
+v 64.791237 16.770905 19.799999
+v 77.791946 10.990335 25.736622
+v 70.835320 17.121979 23.000000
+v 70.067268 18.968626 23.000000
+v 74.835655 20.252550 25.736622
+v 70.541771 28.394087 25.736624
+v 55.284401 18.235088 15.683996
+v 46.884941 12.642374 9.179747
+v 46.884941 12.642374 9.967792
+v 58.090046 20.103207 15.677586
+v 71.372620 28.947300 25.724556
+v 71.372620 28.947300 29.739477
+v 73.391800 30.291756 29.739477
+v 73.391800 30.291756 25.724556
+v 70.267548 30.614283 29.739477
+v 72.286591 31.958647 25.724556
+v 72.286591 31.958647 29.739477
+v 70.267548 30.614283 25.724556
+v 69.435486 30.060263 25.736624
+v 56.986320 21.771084 15.677586
+v 57.333290 22.002111 17.595787
+v 56.966381 21.757809 15.683996
+v 56.966381 21.757809 17.595785
+v 54.179218 19.901999 15.683996
+v 45.783604 14.311845 9.179747
+v 45.783604 14.311845 9.969533
+v 63.765499 37.061539 25.736624
+v 57.553310 42.824448 25.736624
+v 51.011665 47.537853 25.736624
+v 40.920010 32.238316 15.683996
+v 35.370396 23.824778 9.179747
+v 35.370396 23.824778 9.973003
+v 42.780453 35.058853 15.677587
+v 42.763599 35.033306 15.683997
+v 42.763599 35.033306 17.595787
+v 43.006294 35.401245 17.595787
+v 51.565914 48.378124 25.724556
+v 51.565914 48.378124 29.739477
+v 52.901516 50.402973 25.724556
+v 52.901516 50.402973 29.739477
+v 49.864773 49.431408 29.739477
+v 51.201363 51.457760 25.724556
+v 51.201363 51.457760 29.739477
+v 49.864773 49.431408 25.724556
+v 49.310341 48.590862 25.736624
+v 41.070816 36.099262 15.677587
+v 41.297276 36.442589 17.595787
+v 41.054279 36.074196 17.595787
+v 41.054279 36.074196 15.683997
+v 39.208340 33.275642 15.683997
+v 33.649197 24.847656 9.179747
+v 33.649197 24.847656 9.972508
+v 30.308641 56.918587 25.736624
+v 24.971016 39.388004 15.683997
+v 22.032545 29.737062 9.179747
+v 22.032545 29.737062 9.966209
+v 25.946077 42.590435 15.683997
+v 25.946077 42.590435 17.595787
+v 26.074444 43.012035 17.595787
+v 25.951485 42.608196 15.677587
+v 30.598295 57.869907 25.724556
+v 30.598295 57.869907 29.739477
+v 31.304747 60.190136 25.724556
+v 31.304747 60.190136 29.739477
+v 28.678051 58.429585 29.739477
+v 28.678051 58.429585 25.724556
+v 29.384674 60.750374 25.724556
+v 29.384674 60.750374 29.739477
+v 28.388805 57.479603 25.736624
+v 24.029867 43.163357 15.677587
+v 24.153439 43.569210 17.595787
+v 24.025030 43.147472 15.683997
+v 24.025030 43.147472 17.595787
+v 23.049635 39.943943 15.683997
+v 20.109266 30.286772 9.179747
+v 20.109266 30.286772 9.964865
+v 1.000000 61.311420 25.736624
+v 1.000000 46.332970 15.684333
+v 1.000000 46.332970 17.595787
+v 1.000000 46.773708 17.595787
+v 1.000000 64.701927 29.739477
+v 1.000000 62.276440 25.724556
+v 1.000000 64.701927 25.724556
+v -1.000000 64.701927 29.739477
+v -1.000000 64.701927 25.724556
+v -1.000000 62.276440 25.724556
+v -1.000000 61.313591 25.736624
+v -1.000000 46.335480 15.685914
+v -1.000000 46.776207 17.595787
+v -1.000000 46.335480 17.595787
+v -14.948990 60.309059 25.736624
+v -28.405657 57.534943 25.736624
+v -29.384674 60.750374 25.724556
+v -29.384674 60.750374 29.739477
+v -28.678051 58.429585 25.724556
+v -24.041683 43.202168 15.703128
+v -24.170099 43.623928 17.595787
+v -24.041683 43.202168 17.595787
+v -31.304747 60.190136 29.739477
+v -25.963871 42.648880 17.595787
+v -25.963871 42.648880 15.704368
+v -26.092237 43.070480 17.595787
+v -30.326448 56.977074 25.736624
+v -30.598295 57.869907 25.724556
+v -31.304747 60.190136 25.724556
+v -49.356850 48.661369 25.736624
+v -51.201363 51.457760 25.724556
+v -51.201363 51.457760 29.739477
+v -49.864773 49.431408 25.724556
+v -41.100574 36.144379 15.711576
+v -41.343575 36.512783 17.595787
+v -41.100574 36.144379 17.595787
+v -52.901516 50.402973 29.739477
+v -42.810513 35.104427 17.595787
+v -42.810513 35.104427 15.711978
+v -43.053204 35.472363 17.595787
+v -51.058636 47.609058 25.736624
+v -51.565914 48.378124 25.724556
+v -52.901516 50.402973 25.724556
+v -59.720680 41.097324 25.736624
+v -64.813087 36.042236 25.736624
+v -69.494926 30.099840 25.736624
+v -72.286591 31.958647 25.724556
+v -72.286591 31.958647 29.739477
+v -70.267548 30.614283 25.724556
+v -57.026207 21.797644 15.707767
+v -57.393101 22.041937 17.595787
+v -57.026207 21.797644 17.595785
+v -73.391800 30.291756 29.739477
+v -58.128204 20.128613 17.595785
+v -58.128204 20.128613 15.706450
+v -58.495178 20.372959 17.595785
+v -70.598671 28.431973 25.736624
+v -71.372620 28.947300 25.724556
+v -73.391800 30.291756 25.724556
+v -74.887146 20.262024 25.736622
+v -77.822960 10.982238 25.736622
+v -78.985733 0.999999 25.736622
+v -82.374229 0.999999 25.724554
+v -82.374229 0.999999 29.739475
+v -79.948410 0.999999 25.724554
+v -64.004601 0.999999 15.686283
+v -64.445457 0.999999 17.595785
+v -64.004601 0.999999 17.595785
+v -82.374229 -1.000001 29.739475
+v -64.000885 -1.000001 17.595785
+v -64.000900 -1.000001 15.683977
+v -64.441788 -1.000001 17.595785
+v -78.983101 -1.000001 25.736622
+v -79.948410 -1.000001 25.724554
+v -82.374229 -1.000001 25.724554
+v -77.791946 -10.990336 25.736622
+v -74.835655 -20.252554 25.736622
+v -70.541771 -28.394091 25.736620
+v -55.284401 -18.235088 15.683994
+v -46.884941 -12.642374 9.179745
+v -46.884941 -12.642374 9.967790
+v -58.071842 -20.091084 15.683994
+v -58.071842 -20.091084 17.595785
+v -58.438789 -20.335413 17.595785
+v -58.090046 -20.103207 15.677584
+v -71.372620 -28.947304 25.724552
+v -71.372620 -28.947304 29.739473
+v -73.391800 -30.291759 29.739473
+v -73.391800 -30.291759 25.724552
+v -70.267548 -30.614286 29.739473
+v -70.267548 -30.614286 25.724552
+v -72.286591 -31.958651 25.724552
+v -72.286591 -31.958651 29.739473
+v -69.435486 -30.060266 25.736620
+v -56.986320 -21.771084 15.677584
+v -57.333290 -22.002111 17.595783
+v -56.966381 -21.757809 15.683994
+v -56.966381 -21.757809 17.595785
+v -54.179218 -19.901999 15.683994
+v -45.783604 -14.311845 9.179745
+v -45.783604 -14.311845 9.969531
+v -63.765499 -37.061539 25.736620
+v -57.553310 -42.824448 25.736620
+v -51.011665 -47.537853 25.736620
+v -40.920010 -32.238316 15.683994
+v -35.370396 -23.824778 9.179745
+v -35.370396 -23.824778 9.973001
+v -42.780453 -35.058853 15.677583
+v -42.763599 -35.033306 15.683993
+v -42.763599 -35.033306 17.595783
+v -43.006294 -35.401245 17.595783
+v -51.565914 -48.378124 25.724552
+v -51.565914 -48.378124 29.739473
+v -52.901516 -50.402973 25.724552
+v -52.901516 -50.402973 29.739473
+v -49.864773 -49.431408 29.739473
+v -51.201363 -51.457760 25.724552
+v -51.201363 -51.457760 29.739473
+v -49.864773 -49.431408 25.724552
+v -49.310341 -48.590862 25.736620
+v -41.070816 -36.099262 15.677583
+v -41.297276 -36.442589 17.595783
+v -41.054279 -36.074196 17.595783
+v -41.054279 -36.074196 15.683993
+v -39.208340 -33.275642 15.683993
+v -33.649197 -24.847656 9.179745
+v -33.649197 -24.847656 9.972507
+v -30.308641 -56.918587 25.736620
+v -24.971016 -39.388004 15.683993
+v -22.032545 -29.737062 9.179745
+v -22.032545 -29.737062 9.966208
+v -25.946077 -42.590435 15.683993
+v -25.946077 -42.590435 17.595783
+v -26.074444 -43.012035 17.595783
+v -25.951485 -42.608196 15.677583
+v -30.598295 -57.869907 25.724552
+v -30.598295 -57.869907 29.739473
+v -31.304747 -60.190136 29.739473
+v -31.304747 -60.190136 25.724552
+v -28.678051 -58.429585 29.739473
+v -28.678051 -58.429585 25.724552
+v -29.384674 -60.750374 25.724552
+v -29.384674 -60.750374 29.739473
+v -28.388805 -57.479603 25.736620
+v -24.029867 -43.163357 15.677583
+v -24.153439 -43.569210 17.595783
+v -23.049635 -39.943943 15.683993
+v -20.109266 -30.286772 9.179745
+v -20.109266 -30.286772 9.964863
+v -1.000000 -61.311420 25.736620
+v -1.000000 -64.701927 25.724552
+v -1.000000 -64.701927 29.739473
+v -1.000000 -62.276440 25.724552
+v -1.000000 -46.773708 17.595783
+v 1.000000 -64.701927 29.739473
+v 1.000000 -46.776207 17.595783
+v 1.000000 -61.313591 25.736620
+v 1.000000 -62.276440 25.724552
+v 1.000000 -64.701927 25.724552
+v 15.107149 -60.287189 25.736620
+v 28.405657 -57.534943 25.736620
+v 29.384674 -60.750374 25.724552
+v 29.384674 -60.750374 29.739473
+v 28.678051 -58.429585 25.724552
+v 24.170099 -43.623928 17.595783
+v 31.304747 -60.190136 29.739473
+v 26.092237 -43.070480 17.595783
+v 30.326448 -56.977074 25.736620
+v 30.598295 -57.869907 25.724552
+v 31.304747 -60.190136 25.724552
+v 49.356850 -48.661369 25.736620
+v 51.201363 -51.457760 25.724552
+v 51.201363 -51.457760 29.739473
+v 49.864773 -49.431408 25.724552
+v 41.343575 -36.512783 17.595783
+v 52.901516 -50.402973 29.739473
+v 43.053204 -35.472363 17.595783
+v 51.058636 -47.609058 25.736620
+v 51.565914 -48.378124 25.724552
+v 52.901516 -50.402973 25.724552
+v 59.720680 -41.097324 25.736620
+v 64.813087 -36.042236 25.736620
+v 69.494926 -30.099844 25.736620
+v 72.286591 -31.958651 25.724552
+v 72.286591 -31.958651 29.739473
+v 70.267548 -30.614286 25.724552
+v 57.393101 -22.041937 17.595783
+v 73.391800 -30.291759 29.739473
+v 71.372620 -28.947304 25.724552
+v 73.391800 -30.291759 25.724552
+v 78.999191 12.357826 32.582039
+v 80.476402 -0.405435 32.582039
+v 74.796082 23.886509 32.582039
+v 68.731689 33.535332 32.582039
+v 61.598881 41.285088 32.582039
+v 51.241322 49.147095 32.582043
+v 38.982700 55.406998 32.582043
+v 22.030628 60.554649 32.582043
+v 2.466806 62.770454 32.582043
+v -14.017264 61.928276 32.582043
+v -33.334686 57.578072 32.582043
+v -48.977470 50.605335 32.582043
+v -62.354191 40.694855 32.582039
+v -71.898109 29.152704 32.582039
+v -77.676933 17.077860 32.582039
+v -80.289703 4.518545 32.582039
+v -79.778465 -8.503142 32.582039
+v -76.292152 -20.615774 32.582039
+v -70.634094 -30.934900 32.582039
+v -63.682091 -39.280312 32.582039
+v -56.033443 -45.882370 32.582035
+v -45.261665 -52.527096 32.582035
+v -32.672810 -57.728386 32.582035
+v -15.371929 -61.715229 32.582035
+v 1.099217 -62.796089 32.582035
+v 20.863731 -60.834099 32.582035
+v 42.482929 -53.963871 32.582035
+v 57.671482 -44.739731 32.582035
+v 69.022781 -33.280212 32.582039
+v 75.879036 -21.707813 32.582039
+v 79.231567 -11.484066 32.582039
+v 77.077438 -19.722128 23.000000
+v 76.311165 -21.569515 23.000000
+v 71.801460 -17.524426 19.799999
+v 71.035507 -19.371946 19.799999
+v 49.914875 -30.362774 17.595783
+v 53.845966 -26.497295 17.595783
+v -1.000000 -46.332436 15.683993
+v -1.000000 -42.985149 15.683993
+v 23.066235 -39.998459 15.683993
+v 1.000000 -42.987751 15.683993
+v 1.000000 -46.332436 15.683993
+v 24.032831 -43.173100 15.683993
+v 24.988806 -39.446434 15.683993
+v 25.954449 -42.617935 15.683993
+v 39.254566 -33.345722 15.683993
+v 41.076427 -36.107769 15.683993
+v 47.359585 -27.564960 15.683994
+v 40.966904 -32.309410 15.683994
+v 42.786045 -35.067333 15.683993
+v 50.987991 -24.009480 15.683994
+v 54.239170 -19.941916 15.683994
+v 56.994781 -21.776718 15.683994
+v 58.055904 -13.012317 15.683994
+v 55.340588 -18.272499 15.683994
+v 58.098518 -20.108847 15.683994
+v 59.894676 -7.187027 15.683995
+v 64.000969 -1.000001 15.683995
+v 60.655788 -1.000001 15.683995
+v 64.013649 -0.279087 15.683995
+v 59.865952 7.182704 15.683995
+v 60.651699 0.999999 15.683995
+v 58.009041 12.993005 15.683996
+v 76.311165 21.569511 23.000000
+v 77.077438 19.722124 23.000000
+v 71.035507 19.371946 19.799999
+v 71.801460 17.524426 19.799999
+v 50.550041 0.000000 9.948984
+v 47.442719 -0.151908 8.187897
+v 50.549366 -0.175751 9.948690
+v 50.528202 1.000000 9.950654
+v 47.324127 2.099144 8.187897
+v 46.929474 7.164032 8.630000
+v 45.275734 6.945769 7.708742
+v 46.473400 2.099144 7.708741
+v 46.162800 9.011250 8.630000
+v 42.940704 11.410934 7.708742
+v 52.911724 9.655929 12.300000
+v 52.144428 11.502889 12.300001
+v 39.662056 15.387015 7.708742
+v 38.975094 18.249390 8.630001
+v 35.599216 18.855045 7.708742
+v 37.423893 19.517763 8.630001
+v 43.374645 23.004610 12.300001
+v 41.836136 24.286695 12.300001
+v 50.231861 24.701380 15.683996
+v 29.164558 22.697313 7.708742
+v 28.334963 24.880903 8.630001
+v 45.770397 28.785690 15.683996
+v 26.494911 25.666452 8.630001
+v 20.804350 25.947315 7.708742
+v 31.036251 30.766054 12.300001
+v 29.198563 31.556749 12.300001
+v 13.758842 27.655338 7.708743
+v 6.374107 28.648712 7.708743
+v 9.208792 29.993793 8.630001
+v 7.219922 30.205467 8.630001
+v 6.374107 29.497082 8.187898
+v 9.959172 36.425472 12.300002
+v 1.000000 32.866898 9.949746
+v 7.970483 36.638699 12.300002
+v -7.222428 30.226952 8.630001
+v -6.374107 28.668283 7.708743
+v -6.374107 29.516443 8.187898
+v -1.000000 32.866898 9.948089
+v -9.211977 30.021097 8.630001
+v 1.000000 42.985149 15.683997
+v -7.973040 36.660610 12.300002
+v -1.000000 42.987751 15.683997
+v -9.962355 36.452751 12.300002
+v -20.109266 30.286772 9.932963
+v -23.357828 25.185738 7.708742
+v -22.032545 29.737062 9.931618
+v -26.525383 25.732840 8.630001
+v -28.366938 24.950567 8.630001
+v -31.042089 21.821156 7.708742
+v -23.066235 39.998459 15.683997
+v -29.229242 31.623592 12.300001
+v -24.988806 39.446434 15.683997
+v -33.649197 24.847656 9.925321
+v -31.068266 30.835802 12.300001
+v -35.370396 23.824778 9.924828
+v -37.482746 19.581373 8.630001
+v -37.566841 17.426657 7.708742
+v -39.033222 18.312220 8.630001
+v -39.254566 33.345722 15.683997
+v -41.894859 24.350168 12.300001
+v -42.521404 12.141399 7.708742
+v -40.966904 32.309410 15.683996
+v -45.783604 14.311845 9.928354
+v -43.432686 23.067341 12.300001
+v -46.884941 12.642374 9.930110
+v -46.213615 9.032418 8.630000
+v -45.247829 7.149982 7.708742
+v -47.359585 27.564960 15.683996
+v -46.971027 7.181341 8.630000
+v -46.035576 4.663168 7.708741
+v -50.987991 24.009480 15.683996
+v -52.194347 11.523685 12.300001
+v -47.338470 2.099144 8.187897
+v -46.488384 2.099144 7.708741
+v -54.239170 19.941916 15.683996
+v -50.528202 1.000000 9.947313
+v -52.954441 9.673723 12.300000
+v -47.324127 -2.099144 8.187897
+v -50.528202 -1.000000 9.950654
+v -58.055904 13.012315 15.683996
+v -55.340588 18.272499 15.683996
+v -59.894676 7.187027 15.683995
+v -46.929474 -7.164032 8.630000
+v -45.275734 -6.945770 7.708741
+v -46.473400 -2.099144 7.708741
+v -46.162800 -9.011250 8.630000
+v -60.655788 0.999999 15.683995
+v -42.940704 -11.410934 7.708741
+v -52.911724 -9.655931 12.300000
+v -52.144428 -11.502891 12.299999
+v -59.865952 -7.182705 15.683995
+v -60.651699 -1.000001 15.683995
+v -39.662056 -15.387015 7.708741
+v -58.009041 -12.993007 15.683994
+v -38.975094 -18.249390 8.629999
+v -35.599216 -18.855045 7.708740
+v -37.423893 -19.517763 8.629999
+v -43.374645 -23.004610 12.299999
+v -41.836136 -24.286695 12.299999
+v -50.231861 -24.701380 15.683994
+v -29.164558 -22.697313 7.708740
+v -28.334963 -24.880903 8.629999
+v -45.770397 -28.785690 15.683994
+v -26.494911 -25.666452 8.629999
+v -20.804350 -25.947315 7.708740
+v -31.036251 -30.766054 12.299999
+v -29.198563 -31.556749 12.299999
+v -13.758842 -27.655338 7.708740
+v -6.374107 -28.648712 7.708740
+v -9.208792 -29.993793 8.629999
+v -7.219922 -30.205467 8.629999
+v -6.374107 -29.497082 8.187896
+v -9.959172 -36.425472 12.299998
+v -1.000000 -32.866898 9.949742
+v -7.970483 -36.638699 12.299998
+v 7.222428 -30.226952 8.629999
+v 6.374107 -28.668283 7.708740
+v 6.374107 -29.516443 8.187896
+v 1.000000 -32.866898 9.948085
+v 9.211977 -30.021097 8.629999
+v 7.973040 -36.660610 12.299998
+v 9.962355 -36.452751 12.299998
+v 20.109266 -30.286772 9.932961
+v 23.357828 -25.185738 7.708740
+v 22.032545 -29.737062 9.931616
+v 26.525383 -25.732840 8.629999
+v 28.366938 -24.950567 8.629999
+v 31.042089 -21.821156 7.708740
+v 29.229242 -31.623592 12.299999
+v 33.649197 -24.847656 9.925319
+v 31.068266 -30.835802 12.299999
+v 35.370396 -23.824778 9.924826
+v 37.482746 -19.581373 8.629999
+v 37.566841 -17.426657 7.708740
+v 39.033222 -18.312220 8.629999
+v 41.894859 -24.350168 12.299999
+v 42.521404 -12.141399 7.708741
+v 45.783604 -14.311845 9.928352
+v 43.432686 -23.067341 12.299999
+v 46.884941 -12.642374 9.930108
+v 46.213615 -9.032418 8.630000
+v 45.247829 -7.149983 7.708741
+v 46.971027 -7.181342 8.630000
+v 46.035576 -4.663169 7.708741
+v 52.194347 -11.523686 12.299999
+v 47.338470 -2.099144 8.187897
+v 46.488384 -2.099144 7.708741
+v 50.528202 -1.000000 9.947313
+v 52.954441 -9.673725 12.300000
+v 52.704353 26.959343 15.683996
+v 47.923073 31.350286 15.683996
+v 52.704353 26.959343 17.595787
+v 47.923073 31.350286 17.595787
+v 53.029804 27.256676 17.595787
+v 48.206440 31.687916 17.595787
+v 52.677967 33.060020 19.800001
+v 51.156792 34.360844 19.800001
+v 56.559361 37.255188 23.000002
+v 55.043163 38.561394 23.000002
+v 34.915302 44.011501 19.800001
+v 36.749325 43.212811 19.800001
+v 39.133057 48.406124 23.000002
+v 37.300201 49.207352 23.000002
+v 1.000000 46.332436 15.683997
+v -23.208813 43.426075 15.683997
+v -1.000000 46.332436 15.683997
+v -24.032831 43.173100 15.683997
+v -25.954449 42.617935 15.683997
+v -36.203659 38.728451 15.683997
+v -41.076427 36.107769 15.683997
+v -48.036201 31.369669 15.683996
+v -42.786045 35.067333 15.683997
+v -55.955837 23.269285 15.683996
+v -56.994781 21.776718 15.683996
+v -58.098518 20.108847 15.683996
+v -61.031708 14.571653 15.683996
+v -63.343071 7.041553 15.683995
+v -64.000969 0.999999 15.683995
+v 0.429030 46.337963 15.683997
+v -49.617649 30.037235 17.595787
+v -53.513515 26.207851 17.595787
+v -61.131332 14.335051 17.595785
+v -63.170067 7.879019 17.595785
+v 11.546195 50.028210 19.800001
+v 9.557811 50.244038 19.800001
+v 12.208372 55.703873 23.000002
+v 10.220090 55.920589 23.000002
+v -11.549373 50.055447 19.800001
+v -9.560451 50.266670 19.800001
+v -10.222758 55.943462 23.000002
+v -12.211548 55.731098 23.000002
+v -34.946301 44.079037 19.800001
+v -36.781395 43.282684 19.800001
+v -37.331303 49.275105 23.000002
+v -39.165150 48.476036 23.000002
+v -51.215298 34.424080 19.800001
+v -49.914875 30.362774 17.595787
+v -52.735878 33.122612 19.800001
+v -53.845966 26.497295 17.595787
+v -55.101597 38.624554 23.000002
+v -56.617233 37.317741 23.000002
+v -64.840141 16.791273 19.799999
+v -61.536156 14.509324 17.595785
+v -65.603142 14.942524 19.799999
+v -63.601284 7.970111 17.595785
+v -70.115913 18.988886 23.000000
+v -70.879631 17.140438 23.000000
+v -65.559143 -14.924198 19.799999
+v -61.488392 -14.491860 17.595785
+v -63.572159 -7.968174 17.595785
+v -64.791237 -16.770905 19.799999
+v -70.835320 -17.121983 23.000000
+v -70.067268 -18.968630 23.000000
+v -63.140995 -7.876790 17.595785
+v -61.083679 -14.317355 17.595785
+v -63.140995 -7.876789 15.683995
+v -61.083679 -14.317354 15.683994
+v -52.704353 -26.959343 15.683994
+v -47.923073 -31.350286 15.683994
+v -52.704353 -26.959343 17.595783
+v -47.923073 -31.350286 17.595783
+v -53.029804 -27.256676 17.595783
+v -48.206440 -31.687916 17.595783
+v -52.677967 -33.060020 19.799997
+v -51.156792 -34.360844 19.799997
+v -56.559361 -37.255188 22.999998
+v -55.043163 -38.561394 22.999998
+v -34.915302 -44.011501 19.799997
+v -36.749325 -43.212811 19.799997
+v -39.133057 -48.406124 22.999998
+v -37.300201 -49.207352 22.999998
+v -11.546195 -50.028210 19.799997
+v -9.557811 -50.244038 19.799997
+v -12.208372 -55.703873 22.999998
+v -10.220090 -55.920589 22.999998
+v 11.549373 -50.055447 19.799997
+v 9.560451 -50.266670 19.799997
+v 10.222758 -55.943462 22.999998
+v 12.211548 -55.731098 22.999998
+v 34.946301 -44.079037 19.799997
+v 36.781395 -43.282684 19.799997
+v 37.331303 -49.275105 22.999998
+v 39.165150 -48.476036 22.999998
+v 51.215298 -34.424080 19.799997
+v 52.735878 -33.122612 19.799997
+v 55.101597 -38.624554 22.999998
+v 56.617233 -37.317741 22.999998
+v 78.999191 12.357826 31.659950
+v 80.476402 -0.405435 31.659950
+v 74.796082 23.886509 31.659952
+v 68.731689 33.535332 31.659952
+v 61.598881 41.285088 31.659952
+v 51.241322 49.147095 31.659952
+v 38.982700 55.406998 31.659952
+v 22.030628 60.554649 31.659952
+v 2.466806 62.770454 31.659952
+v -14.017264 61.928276 31.659952
+v -33.334686 57.578072 31.659952
+v -48.977470 50.605335 31.659952
+v -62.354191 40.694855 31.659952
+v -71.898109 29.152704 31.659952
+v -77.676933 17.077860 31.659950
+v -80.289703 4.518545 31.659950
+v -79.778465 -8.503142 31.659950
+v -76.292152 -20.615774 31.659950
+v -70.634094 -30.934900 31.659948
+v -63.682091 -39.280312 31.659948
+v -56.033443 -45.882370 31.659948
+v -45.261665 -52.527096 31.659948
+v -32.672810 -57.728386 31.659948
+v -15.371929 -61.715229 31.659948
+v 1.099217 -62.796089 31.659948
+v 20.863731 -60.834099 31.659948
+v 42.482929 -53.963871 31.659948
+v 57.671482 -44.739731 31.659948
+v 69.022781 -33.280212 31.659948
+v 75.879036 -21.707813 31.659950
+v 79.231567 -11.484066 31.659950
+v 64.014717 -0.000001 15.683995
+v 50.528202 -1.000000 9.179746
+v 63.990784 -1.000001 15.677585
+v 64.004539 -0.000001 15.677585
+v -1.000000 -46.322258 15.677583
+v -1.000000 -32.866898 9.179744
+v 1.000000 -46.322258 15.677583
+v 1.000000 -32.866898 9.179744
+v 24.029867 -43.163357 15.677583
+v 20.109266 -30.286772 9.179745
+v 25.951485 -42.608196 15.677583
+v 22.032545 -29.737062 9.179745
+v 41.070816 -36.099262 15.677583
+v 33.649197 -24.847656 9.179745
+v 42.780453 -35.058853 15.677583
+v 35.370396 -23.824778 9.179745
+v 56.986320 -21.771084 15.677584
+v 45.783604 -14.311845 9.179745
+v 58.090046 -20.103207 15.677584
+v 46.884941 -12.642374 9.179745
+v 63.990784 0.999999 15.677585
+v 50.528202 1.000000 9.179746
+v 45.275734 6.945769 7.103746
+v 46.473400 2.099144 7.103746
+v 42.940704 11.410934 7.103746
+v 39.662056 15.387015 7.103746
+v 35.599216 18.855045 7.103747
+v 29.164558 22.697313 7.103747
+v 20.804350 25.947315 7.103747
+v 13.758842 27.655338 7.103747
+v 6.374107 28.648712 7.103747
+v 6.374107 36.212177 8.187899
+v 6.374107 31.083874 5.290061
+v 6.374107 27.514692 5.786510
+v 6.374107 27.514692 7.103747
+v 6.374107 31.083874 1.000001
+v 6.374107 22.718256 6.630103
+v 6.374107 22.718237 5.786509
+v 6.374107 22.142164 6.384269
+v 6.374107 24.506704 1.000001
+v 6.374107 21.906952 1.000001
+v -6.374107 36.212177 8.187899
+v -6.374107 31.083874 5.290061
+v -6.374107 28.668283 7.103747
+v -6.374107 27.534555 5.786510
+v -6.374107 27.534555 7.103747
+v -6.374107 31.083874 1.000001
+v -6.374107 22.739426 5.786509
+v -6.374107 22.739445 6.630103
+v -6.374107 22.163525 6.384269
+v -6.374107 24.444582 1.000001
+v -6.374107 21.928383 1.000001
+v -23.357828 25.185738 7.103747
+v -31.042089 21.821156 7.103747
+v -37.566841 17.426657 7.103747
+v -42.521404 12.141399 7.103746
+v -45.247829 7.149982 7.103746
+v -46.035576 4.663168 7.103746
+v -46.488384 2.099144 7.103746
+v -54.044556 2.099144 8.187897
+v -48.911640 2.099144 5.290060
+v -45.351452 2.099144 5.786508
+v -45.351452 2.099144 7.103746
+v -48.911640 2.099144 1.000000
+v -40.531025 2.099144 6.630102
+v -40.531021 2.099144 5.786508
+v -39.950077 2.099144 6.384268
+v -42.427719 2.099144 1.000000
+v -39.712696 2.099144 1.000000
+v -54.044556 -2.099144 8.187897
+v -48.911640 -2.099144 5.290060
+v -46.473400 -2.099144 7.103746
+v -45.335510 -2.099144 5.786508
+v -45.335510 -2.099144 7.103746
+v -48.911640 -2.099144 1.000000
+v -40.509274 -2.099144 5.786508
+v -40.509281 -2.099144 6.630102
+v -39.927341 -2.099144 6.384268
+v -42.488342 -2.099144 1.000000
+v -39.689533 -2.099144 1.000000
+v -45.275734 -6.945770 7.103745
+v -42.940704 -11.410934 7.103745
+v -39.662056 -15.387015 7.103745
+v -35.599216 -18.855045 7.103745
+v -29.164558 -22.697313 7.103745
+v -20.804350 -25.947315 7.103745
+v -13.758842 -27.655338 7.103745
+v -6.374107 -28.648712 7.103745
+v -6.374107 -36.212177 8.187895
+v -6.374107 -31.083874 5.290059
+v -6.374107 -27.514692 5.786507
+v -6.374107 -27.514692 7.103745
+v -6.374107 -31.083874 0.999999
+v -6.374107 -22.718256 6.630101
+v -6.374107 -22.718237 5.786507
+v -6.374107 -22.142164 6.384267
+v -6.374107 -24.506704 0.999999
+v -6.374107 -21.906952 0.999999
+v 6.374107 -36.212177 8.187895
+v 6.374107 -22.163525 6.384267
+v 6.374107 -22.739426 5.786507
+v 6.374107 -22.739445 6.630101
+v 6.374107 -21.928383 0.999999
+v 6.374107 -28.668283 7.103745
+v 6.374107 -27.534555 7.103745
+v 6.374107 -27.534555 5.786507
+v 6.374107 -24.444582 0.999999
+v 6.374107 -31.083874 5.290059
+v 6.374107 -31.083874 0.999999
+v 23.357828 -25.185738 7.103745
+v 31.042089 -21.821156 7.103745
+v 37.566841 -17.426657 7.103745
+v 42.521404 -12.141399 7.103745
+v 45.247829 -7.149983 7.103745
+v 46.035576 -4.663169 7.103746
+v 46.488384 -2.099144 7.103746
+v 54.044556 -2.099144 8.187897
+v 48.911640 -2.099144 5.290060
+v 45.351452 -2.099144 5.786508
+v 45.351452 -2.099144 7.103746
+v 48.911640 -2.099144 1.000000
+v 40.531025 -2.099144 6.630102
+v 40.531021 -2.099144 5.786508
+v 39.950077 -2.099144 6.384268
+v 42.427719 -2.099144 1.000000
+v 39.712696 -2.099144 1.000000
+v 54.127850 0.000000 8.187897
+v 54.044556 2.099144 8.187897
+v 50.550041 0.000000 9.179746
+v -50.528202 -1.000000 9.179746
+v -63.990784 -1.000001 15.677585
+v -50.528202 1.000000 9.179746
+v -63.990784 0.999999 15.677585
+v -46.884941 12.642374 9.179747
+v -58.090046 20.103207 15.677586
+v -45.783604 14.311845 9.179747
+v -56.986320 21.771084 15.677586
+v -35.370396 23.824778 9.179747
+v -42.780453 35.058853 15.677587
+v -33.649197 24.847656 9.179747
+v -41.070816 36.099262 15.677587
+v -22.032545 29.737062 9.179747
+v -25.951485 42.608196 15.677587
+v -20.109266 30.286772 9.179747
+v -24.029867 43.163357 15.677587
+v -1.000000 46.322258 15.677587
+v -1.000000 32.866898 9.179748
+v 1.000000 32.866898 9.179748
+v 1.000000 46.322258 15.677587
+v 48.911640 2.099144 5.290060
+v 45.335510 2.099144 5.786508
+v 45.335510 2.099144 7.103746
+v 48.911640 2.099144 1.000000
+v 40.509274 2.099144 5.786508
+v 40.509281 2.099144 6.630102
+v 39.927341 2.099144 6.384268
+v 42.488342 2.099144 1.000000
+v 39.689533 2.099144 1.000000
+v 32.004711 37.670349 12.300002
+v 33.841022 36.876652 12.300002
+v 29.301424 31.780851 8.630001
+v 31.139711 30.991455 8.630001
+v 58.342892 14.084851 12.300001
+v 59.107624 12.236825 12.300001
+v 52.363052 11.593959 8.630001
+v 53.126793 9.745517 8.630000
+v 46.416553 29.237398 12.300001
+v 47.945076 27.944519 12.300001
+v 42.008270 24.472746 8.630001
+v 43.546093 23.189917 8.630001
+v 8.746624 43.291180 12.300002
+v 10.735443 43.079067 12.300002
+v 7.996061 36.857937 8.630002
+v 9.985057 36.647339 8.630002
+v -10.735443 43.079067 12.300002
+v -8.746624 43.291180 12.300002
+v -9.985057 36.647339 8.630002
+v -7.996061 36.857937 8.630002
+v -33.841022 36.876652 12.300002
+v -32.004711 37.670349 12.300002
+v -31.139711 30.991455 8.630001
+v -29.301424 31.780851 8.630001
+v -47.945076 27.944519 12.300001
+v -46.416553 29.237398 12.300001
+v -43.546093 23.189917 8.630001
+v -42.008270 24.472746 8.630001
+v -59.107624 12.236825 12.300001
+v -58.342892 14.084851 12.300001
+v -53.126793 9.745517 8.630000
+v -52.363052 11.593959 8.630001
+v 8.746624 -43.291180 12.299998
+v 10.735443 -43.079067 12.299998
+v 9.985057 -36.647339 8.629998
+v 7.996061 -36.857937 8.629998
+v -59.107624 -12.236827 12.299999
+v -58.342892 -14.084853 12.299999
+v -52.363052 -11.593959 8.629999
+v -53.126793 -9.745517 8.630000
+v -46.416553 -29.237398 12.299999
+v -47.945076 -27.944519 12.299999
+v -42.008270 -24.472746 8.629999
+v -43.546093 -23.189917 8.629999
+v -32.004711 -37.670349 12.299998
+v -33.841022 -36.876652 12.299998
+v -29.301424 -31.780851 8.629999
+v -31.139711 -30.991455 8.629999
+v -8.746624 -43.291180 12.299998
+v -10.735443 -43.079067 12.299998
+v -7.996061 -36.857937 8.629998
+v -9.985057 -36.647339 8.629998
+v 32.004711 -37.670349 12.299998
+v 33.841022 -36.876652 12.299998
+v 31.139711 -30.991455 8.629999
+v 29.301424 -31.780851 8.629999
+v 46.416553 -29.237398 12.299999
+v 47.945076 -27.944519 12.299999
+v 43.546093 -23.189917 8.629999
+v 42.008270 -24.472746 8.629999
+v 59.107624 -12.236827 12.299999
+v 58.342892 -14.084853 12.299999
+v 53.126793 -9.745517 8.630000
+v 52.363052 -11.593959 8.629999
+v 59.652828 43.543709 23.000002
+v 61.163960 42.232029 23.000002
+v 55.767601 39.344398 19.800001
+v 57.282722 38.037029 19.800001
+v 40.127220 55.366425 23.000002
+v 41.959351 54.563618 23.000002
+v 37.742451 50.170856 19.800001
+v 39.575603 49.370277 19.800001
+v 11.002208 62.624298 23.000002
+v 12.990620 62.408703 23.000002
+v 10.339925 56.947720 19.800001
+v 12.328441 56.733009 19.800001
+v -12.990620 62.408703 23.000002
+v -11.002208 62.624298 23.000002
+v -12.328441 56.733009 19.800001
+v -10.339925 56.947720 19.800001
+v -41.959351 54.563618 23.000002
+v -40.127220 55.366425 23.000002
+v -39.575603 49.370277 19.800001
+v -37.742451 50.170856 19.800001
+v -61.163960 42.232029 23.000002
+v -59.652828 43.543709 23.000002
+v -57.282722 38.037029 19.800001
+v -55.767601 39.344398 19.800001
+v -77.077438 19.722124 23.000000
+v -76.311165 21.569511 23.000000
+v -71.801460 17.524426 19.799999
+v -71.035507 19.371946 19.799999
+v -77.077438 -19.722128 23.000000
+v -76.311165 -21.569515 23.000000
+v -71.035507 -19.371946 19.799999
+v -71.801460 -17.524426 19.799999
+v -59.652828 -43.543709 22.999998
+v -61.163960 -42.232029 22.999998
+v -55.767601 -39.344398 19.799997
+v -57.282722 -38.037029 19.799997
+v -40.127220 -55.366425 22.999998
+v -41.959351 -54.563618 22.999998
+v -37.742451 -50.170856 19.799997
+v -39.575603 -49.370277 19.799997
+v -11.002208 -62.624298 22.999998
+v -12.990620 -62.408703 22.999998
+v -10.339925 -56.947720 19.799997
+v -12.328441 -56.733009 19.799997
+v 11.002208 -62.624298 22.999998
+v 12.990620 -62.408703 22.999998
+v 12.328441 -56.733009 19.799997
+v 10.339925 -56.947720 19.799997
+v 40.127220 -55.366425 22.999998
+v 41.959351 -54.563618 22.999998
+v 39.575603 -49.370277 19.799997
+v 37.742451 -50.170856 19.799997
+v 59.652828 -43.543709 22.999998
+v 61.163960 -42.232029 22.999998
+v 57.282722 -38.037029 19.799997
+v 55.767601 -39.344398 19.799997
+v 79.503716 12.416275 31.659950
+v 80.980614 -0.409305 31.659950
+v 75.298401 24.008486 31.659952
+v 69.227028 33.718807 31.659952
+v 62.083855 41.523605 31.659952
+v 51.713078 49.446342 31.659952
+v 39.446594 55.761002 31.659952
+v 22.496660 60.972164 31.659952
+v 2.941637 63.262867 31.659952
+v -13.620163 62.485855 31.659952
+v -32.955814 58.234081 31.659952
+v -48.712666 51.337513 31.659952
+v -63.580975 40.210079 31.659952
+v -73.002693 28.326180 31.659952
+v -78.683571 15.582288 31.659950
+v -80.944695 2.054209 31.659950
+v -79.671638 -11.693501 31.659950
+v -75.247223 -24.111717 31.659948
+v -68.703247 -34.389473 31.659948
+v -60.989304 -42.514771 31.659948
+v -52.672276 -48.832161 31.659948
+v -41.076935 -55.065468 31.659948
+v -27.590693 -59.758179 31.659948
+v -9.132391 -62.922104 31.659948
+v 7.442807 -63.065224 31.659948
+v 23.082085 -60.895008 31.659948
+v 38.386791 -56.270523 31.659948
+v 53.155712 -48.617519 31.659948
+v 65.589973 -38.139751 31.659948
+v 74.195602 -26.254148 31.659948
+v 79.084923 -14.185026 31.659950
+v 80.474358 -7.409305 31.659950
+v 44.181484 6.642398 7.103746
+v 41.952591 10.855276 7.103746
+v 38.811039 14.640248 7.103746
+v 34.894848 17.970165 7.103747
+v 28.653446 21.689413 7.103747
+v 20.501358 24.858446 7.103747
+v 13.609652 26.533669 7.103747
+v -3.196056 24.668844 1.000001
+v 0.000000 24.754141 1.000001
+v 3.196056 24.699993 1.000001
+v 38.972836 5.236902 6.384268
+v 38.659599 5.363924 1.000000
+v 37.222637 8.283062 6.384268
+v 36.912582 8.311285 1.000000
+v 34.703949 11.174221 6.384268
+v 34.656689 10.893427 1.000000
+v 31.463432 13.845942 6.384268
+v 31.125479 13.797391 1.000001
+v 26.134790 16.963388 6.384269
+v 25.152277 17.165751 1.000001
+v 18.992676 19.723808 6.384269
+v 17.897518 19.800514 1.000001
+v 12.862669 21.228418 6.384269
+v 12.184310 21.116661 1.000001
+v 39.534222 5.384144 6.630102
+v 37.735363 8.552365 6.630103
+v 35.152782 11.538116 6.630103
+v 31.841761 14.280818 6.630103
+v 26.415630 17.464825 6.630103
+v 19.162550 20.271753 6.630103
+v 12.947220 21.796318 6.630103
+v 39.534206 5.384128 5.786508
+v 37.735359 8.552373 5.786509
+v 35.152790 11.538136 5.786509
+v 31.841755 14.280814 5.786509
+v 26.415625 17.464813 5.786509
+v 19.162565 20.271770 5.786509
+v 12.947221 21.796307 5.786509
+v 44.181484 6.642398 5.786509
+v 41.952591 10.855276 5.786509
+v 38.811039 14.640248 5.786509
+v 34.894848 17.970165 5.786509
+v 28.653446 21.689413 5.786509
+v 20.501358 24.858446 5.786509
+v 13.609652 26.533669 5.786509
+v -19.852297 19.276220 1.000001
+v -21.218451 19.067507 6.384269
+v -29.971397 14.667997 1.000001
+v -30.896194 14.343083 6.384268
+v -34.079540 11.555571 1.000000
+v -36.102840 9.820512 6.384268
+v -36.701973 8.716331 1.000000
+v -38.646347 6.065288 6.384268
+v -38.615208 5.590904 1.000000
+v -39.459591 4.096210 6.384268
+v -39.282566 3.882123 1.000000
+v -21.418491 19.605312 6.630103
+v -31.259190 14.790142 6.630103
+v -36.141037 10.639594 6.630103
+v -38.920113 6.782767 6.630103
+v -39.940399 4.466063 6.630102
+v -21.418503 19.605328 5.786509
+v -31.259182 14.790133 5.786509
+v -36.141045 10.639614 5.786509
+v -38.920101 6.782755 5.786509
+v -39.940384 4.466045 5.786508
+v -22.999201 24.114107 5.786509
+v -30.492594 20.833721 5.786509
+v -36.814110 16.583220 5.786509
+v -41.566475 11.533975 5.786509
+v -44.163933 6.819064 5.786509
+v -44.913494 4.492453 5.786508
+v -22.999201 24.114107 7.103747
+v -30.492594 20.833721 7.103747
+v -36.814110 16.583220 7.103747
+v -41.566475 11.533975 7.103746
+v -44.163933 6.819064 7.103746
+v -44.913494 4.492453 7.103746
+v -42.588291 -1.050518 1.000000
+v -42.611507 0.000000 1.000000
+v -42.557953 1.050518 1.000000
+v -39.840469 -0.937382 1.000000
+v -39.880630 0.233429 1.000000
+v -38.972836 -5.236903 6.384268
+v -38.659824 -5.363429 1.000000
+v -37.222637 -8.283062 6.384267
+v -36.912907 -8.310843 1.000000
+v -34.703949 -11.174221 6.384267
+v -34.657043 -10.893082 1.000000
+v -31.463432 -13.845942 6.384267
+v -31.125824 -13.797151 0.999999
+v -26.134790 -16.963388 6.384267
+v -25.152561 -17.165621 0.999999
+v -18.992676 -19.723808 6.384267
+v -17.897699 -19.800463 0.999999
+v -12.862669 -21.228418 6.384267
+v -12.184402 -21.116644 0.999999
+v -39.534222 -5.384145 6.630102
+v -37.735363 -8.552365 6.630102
+v -35.152782 -11.538116 6.630102
+v -31.841761 -14.280818 6.630102
+v -26.415630 -17.464825 6.630101
+v -19.162550 -20.271753 6.630101
+v -12.947220 -21.796318 6.630101
+v -39.534206 -5.384129 5.786508
+v -37.735359 -8.552373 5.786508
+v -35.152790 -11.538136 5.786508
+v -31.841755 -14.280814 5.786508
+v -26.415625 -17.464813 5.786507
+v -19.162565 -20.271770 5.786507
+v -12.947221 -21.796307 5.786507
+v -44.181484 -6.642399 5.786508
+v -41.952591 -10.855276 5.786508
+v -38.811039 -14.640248 5.786508
+v -34.894848 -17.970165 5.786507
+v -28.653446 -21.689413 5.786507
+v -20.501358 -24.858446 5.786507
+v -13.609652 -26.533669 5.786507
+v -44.181484 -6.642399 7.103745
+v -41.952591 -10.855276 7.103745
+v -38.811039 -14.640248 7.103745
+v -34.894848 -17.970165 7.103745
+v -28.653446 -21.689413 7.103745
+v -20.501358 -24.858446 7.103745
+v -13.609652 -26.533669 7.103745
+v -3.196056 -24.699993 0.999999
+v 0.000000 -24.754141 0.999999
+v 3.196056 -24.668844 0.999999
+v 22.999201 -24.114107 7.103745
+v 30.492594 -20.833721 7.103745
+v 36.814110 -16.583220 7.103745
+v 41.566475 -11.533975 7.103745
+v 44.163933 -6.819065 7.103745
+v 44.913494 -4.492454 7.103746
+v 22.999201 -24.114107 5.786507
+v 30.492594 -20.833721 5.786507
+v 36.814110 -16.583220 5.786507
+v 41.566475 -11.533975 5.786508
+v 44.163933 -6.819065 5.786508
+v 44.913494 -4.492454 5.786508
+v 21.418503 -19.605328 5.786507
+v 31.259182 -14.790133 5.786508
+v 36.141045 -10.639614 5.786508
+v 38.920101 -6.782756 5.786508
+v 39.940384 -4.466046 5.786508
+v 21.418491 -19.605312 6.630101
+v 31.259190 -14.790142 6.630102
+v 36.141037 -10.639594 6.630102
+v 38.920113 -6.782768 6.630102
+v 39.940399 -4.466064 6.630102
+v 21.218451 -19.067507 6.384267
+v 30.896194 -14.343083 6.384267
+v 36.102840 -9.820512 6.384267
+v 38.646347 -6.065289 6.384267
+v 39.459591 -4.096210 6.384268
+v 19.851954 -19.276331 0.999999
+v 29.970846 -14.668347 0.999999
+v 34.078960 -11.556103 1.000000
+v 36.701431 -8.717036 1.000000
+v 38.614883 -5.591603 1.000000
+v 39.282478 -3.882398 1.000000
+v 42.511906 -1.496981 1.000000
+v 42.570805 -0.893927 1.000000
+v 49.014908 0.000000 1.000000
+v 42.602379 0.760366 1.000000
+v 42.612617 0.313417 1.000000
+v 42.604382 -0.290341 1.000000
+v 42.578251 1.207068 1.000000
+v 42.540234 1.653376 1.000000
+v 39.881729 -0.093879 1.000000
+v 49.014908 0.000000 5.290060
+v 80.980614 -0.409305 32.013752
+v 79.503716 12.416275 32.013752
+v 75.298401 24.008486 32.013752
+v 69.227028 33.718807 32.013752
+v 62.083855 41.523605 32.013752
+v 51.713078 49.446342 32.013756
+v 39.446594 55.761002 32.013756
+v 22.496660 60.972164 32.013756
+v 2.941637 63.262867 32.013756
+v -13.620163 62.485855 32.013756
+v -32.955814 58.234081 32.013756
+v -48.712666 51.337513 32.013756
+v -63.580975 40.210079 32.013752
+v -73.002693 28.326180 32.013752
+v -78.683571 15.582288 32.013752
+v -80.944695 2.054209 32.013752
+v -79.671638 -11.693501 32.013752
+v -75.247223 -24.111717 32.013752
+v -68.703247 -34.389473 32.013752
+v -60.989304 -42.514771 32.013752
+v -52.672276 -48.832161 32.013748
+v -41.076935 -55.065468 32.013748
+v -27.590693 -59.758179 32.013748
+v -9.132391 -62.922104 32.013748
+v 7.442808 -63.065224 32.013748
+v 23.082085 -60.895008 32.013748
+v 38.386791 -56.270523 32.013748
+v 53.155712 -48.617519 32.013748
+v 65.589973 -38.139751 32.013752
+v 74.195602 -26.254148 32.013752
+v 79.084923 -14.185026 32.013752
+v 80.474358 -7.409305 32.013752
+v 85.514915 -0.444106 35.989189
+v 81.303871 5.316545 32.532322
+v 81.196152 6.310760 32.533405
+v 85.220757 5.773274 35.989189
+v 85.111336 6.767291 35.989189
+v 78.872772 16.865162 32.544567
+v 79.175064 15.909566 32.543591
+v 82.999649 16.841753 35.989189
+v 79.427979 25.886688 35.989189
+v 82.700714 17.798168 35.989189
+v 71.790161 31.237309 32.557575
+v 71.221146 32.059830 32.558186
+v 74.969559 33.522331 35.989189
+v 74.399117 34.343826 35.989189
+v 64.526802 40.034149 32.562885
+v 63.817417 40.739010 32.563171
+v 67.261566 42.826488 35.989189
+v 66.551689 43.530838 35.989189
+v 57.196243 51.251328 35.989193
+v 47.439533 57.072323 35.989193
+v 45.643959 53.599693 32.561836
+v 44.749184 54.046436 32.561459
+v 46.545238 57.519997 35.989193
+v 33.998997 58.469311 32.555405
+v 34.944683 58.143780 32.556034
+v 36.282829 61.824188 35.989193
+v 35.337612 62.151005 35.989193
+v 17.017822 62.589306 32.542072
+v 18.005383 62.431606 32.542927
+v 18.671667 66.305641 35.989193
+v 6.153144 63.721516 32.532291
+v 5.154394 63.771675 32.531368
+v 6.367396 67.658653 35.989193
+v 17.684340 66.464676 35.989193
+v 5.368709 67.709976 35.989193
+v -5.369306 67.720940 35.989193
+v -5.154394 63.771675 32.521801
+v -6.153144 63.721516 32.520878
+v -6.368104 67.671654 35.989193
+v -18.005383 62.431606 32.510227
+v -17.017822 62.589306 32.511086
+v -17.690351 66.499641 35.989193
+v -18.677999 66.342453 35.989193
+v -34.944683 58.143780 32.497082
+v -33.998997 58.469311 32.497715
+v -35.360146 62.212982 35.989193
+v -44.749184 54.046436 32.491627
+v -36.305828 61.887440 35.989193
+v -45.643959 53.599693 32.491245
+v -46.581860 57.590820 35.989193
+v -47.476528 57.143871 35.989193
+v -57.790462 50.938869 35.989193
+v -63.817417 40.739010 32.489845
+v -64.526802 40.034149 32.490128
+v -66.610207 43.590588 35.989189
+v -71.221146 32.059830 32.494816
+v -71.790161 31.237309 32.495426
+v -74.457855 34.386044 35.989189
+v -67.319664 42.885811 35.989189
+v -75.027252 33.563797 35.989189
+v -79.468597 25.934086 35.989189
+v -78.872772 16.865162 32.508430
+v -79.175064 15.909566 32.509407
+v -82.740257 17.807806 35.989189
+v -81.196152 6.310760 32.519592
+v -83.037125 16.850887 35.989189
+v -81.303871 5.316545 32.520676
+v -85.126976 6.769114 35.989189
+v -85.234108 5.774832 35.989189
+v -81.303871 -5.316548 32.532322
+v -81.196152 -6.310762 32.533405
+v -85.220757 -5.773277 35.989189
+v -85.111336 -6.767293 35.989189
+v -78.872772 -16.865166 32.544567
+v -79.175064 -15.909568 32.543591
+v -82.999649 -16.841757 35.989189
+v -79.437210 -25.867905 35.989189
+v -82.700714 -17.798172 35.989189
+v -71.790161 -31.237312 32.557575
+v -71.221146 -32.059830 32.558186
+v -74.969559 -33.522331 35.989189
+v -74.399117 -34.343826 35.989189
+v -64.526802 -40.034149 32.562885
+v -63.817417 -40.739010 32.563171
+v -67.261566 -42.826488 35.989189
+v -66.551689 -43.530838 35.989189
+v -57.196243 -51.251328 35.989185
+v -45.643959 -53.599693 32.561829
+v -44.749184 -54.046436 32.561451
+v -47.439533 -57.072323 35.989185
+v -46.545238 -57.519997 35.989185
+v -36.282829 -61.824188 35.989185
+v -34.944683 -58.143780 32.556026
+v -33.998997 -58.469311 32.555397
+v -35.337612 -62.151005 35.989185
+v -18.671667 -66.305641 35.989185
+v -18.005383 -62.431606 32.542919
+v -17.017822 -62.589306 32.542065
+v -17.684340 -66.464676 35.989185
+v -5.154394 -63.771675 32.531361
+v -6.153144 -63.721516 32.532284
+v -6.367396 -67.658653 35.989185
+v 5.154394 -63.771675 32.521793
+v -5.368709 -67.709976 35.989185
+v 6.153144 -63.721516 32.520870
+v 5.369306 -67.720940 35.989185
+v 6.368104 -67.671654 35.989185
+v 17.690351 -66.499641 35.989185
+v 17.017822 -62.589306 32.511078
+v 18.005383 -62.431606 32.510220
+v 18.677999 -66.342453 35.989185
+v 33.998997 -58.469311 32.497707
+v 34.944683 -58.143780 32.497074
+v 35.360146 -62.212982 35.989185
+v 36.305828 -61.887440 35.989185
+v 45.643959 -53.599693 32.491238
+v 44.749184 -54.046436 32.491619
+v 46.581860 -57.590820 35.989185
+v 47.476528 -57.143871 35.989185
+v 57.639774 -51.045513 35.989185
+v 63.817417 -40.739010 32.489845
+v 64.526802 -40.034149 32.490128
+v 66.610207 -43.590588 35.989189
+v 67.319664 -42.885811 35.989189
+v 71.221146 -32.059830 32.494816
+v 71.790161 -31.237312 32.495426
+v 74.457855 -34.386044 35.989189
+v 75.027252 -33.563797 35.989189
+v 79.597923 -25.668455 35.989189
+v 78.872772 -16.865166 32.508430
+v 79.175064 -15.909568 32.509407
+v 82.740257 -17.807810 35.989189
+v 83.037125 -16.850891 35.989189
+v 81.303871 -5.316548 32.520676
+v 81.196152 -6.310762 32.519592
+v 85.126976 -6.769117 35.989189
+v 85.234108 -5.774835 35.989189
+v 85.970749 -0.447604 35.989189
+v 85.686958 -5.827640 35.989189
+v 87.879311 -6.083279 39.613861
+v 87.879311 -6.083279 39.069618
+v 92.659142 -6.640633 44.320713
+v 93.346268 -6.720755 44.320713
+v 81.303871 -5.316548 32.013756
+v 86.124702 -5.878683 35.989189
+v 85.686958 -5.827640 39.069618
+v 81.196152 -6.310762 32.013756
+v 93.237061 -7.714797 44.320713
+v 87.771790 -7.077518 39.069618
+v 92.551018 -7.634800 44.320713
+v 87.771790 -7.077518 39.613861
+v 86.016312 -6.872818 35.989189
+v 85.579758 -6.821915 39.069618
+v 85.579758 -6.821914 35.989189
+v 83.480629 -16.958990 35.989189
+v 85.627632 -17.482292 39.069618
+v 90.969124 -18.784203 44.320713
+v 90.308022 -18.623068 44.320713
+v 85.627632 -17.482292 39.613861
+v 83.897202 -17.060524 35.989189
+v 83.480629 -16.958990 39.069618
+v 79.175064 -15.909568 32.013756
+v 78.872772 -16.865166 32.013756
+v 85.333366 -18.439844 39.069618
+v 85.333366 -18.439844 39.613861
+v 90.017921 -19.581636 44.320713
+v 90.678673 -19.742685 44.320713
+v 83.184227 -17.916021 35.989189
+v 83.600227 -18.017414 35.989189
+v 83.184227 -17.916021 39.069618
+v 80.012268 -25.858723 35.989189
+v 75.397537 -33.829918 35.989189
+v 77.190155 -35.118267 39.613861
+v 77.190155 -35.118267 39.069618
+v 81.098427 -37.927135 44.320713
+v 81.636894 -38.314125 44.320713
+v 71.790161 -31.237312 32.013756
+v 75.732086 -34.070358 35.989189
+v 75.397537 -33.829918 39.069618
+v 71.221146 -32.059830 32.013756
+v 81.065414 -39.134876 44.320713
+v 76.620186 -35.940102 39.069618
+v 80.527534 -38.748306 44.320713
+v 76.620186 -35.940102 39.613861
+v 75.161972 -34.892090 35.989189
+v 74.828033 -34.652092 39.069618
+v 74.828033 -34.652092 35.989189
+v 67.638657 -43.211517 35.989189
+v 69.182976 -44.788342 39.069614
+v 73.009735 -48.695667 44.320709
+v 72.549973 -48.226219 44.320709
+v 69.182976 -44.788342 39.613857
+v 67.922684 -43.501518 35.989189
+v 67.638657 -43.211517 39.069618
+v 64.526802 -40.034149 32.013756
+v 63.817417 -40.739010 32.013756
+v 68.473328 -45.492931 39.069614
+v 68.473328 -45.492931 39.613857
+v 71.840019 -48.930504 44.320709
+v 72.299561 -49.399719 44.320709
+v 66.929161 -43.916260 35.989185
+v 67.212952 -44.206020 35.989185
+v 66.929161 -43.916260 39.069614
+v 47.685905 -57.548809 35.989185
+v 57.905888 -51.415642 35.989185
+v 48.699554 -59.509201 39.613857
+v 48.699554 -59.509201 39.069614
+v 50.909580 -63.783382 44.320709
+v 51.211960 -64.368179 44.320709
+v 45.643959 -53.599693 32.013752
+v 47.872921 -57.910492 35.989185
+v 47.685905 -57.548809 39.069614
+v 44.749184 -54.046436 32.013752
+v 50.318012 -64.816521 44.320709
+v 47.805077 -59.956516 39.069614
+v 50.015419 -64.231300 44.320709
+v 47.805077 -59.956516 39.613857
+v 46.978504 -58.357929 35.989185
+v 46.791271 -57.995819 39.069614
+v 46.791271 -57.995819 35.989185
+v 36.461605 -62.315880 35.989185
+v 37.215752 -64.390068 39.613857
+v 37.215752 -64.390068 39.069614
+v 38.859989 -68.912338 44.320709
+v 39.087219 -69.537308 44.320709
+v 34.944683 -58.143780 32.013752
+v 36.603012 -62.704803 35.989185
+v 36.461605 -62.315880 39.069614
+v 33.998997 -58.469311 32.013752
+v 38.142200 -69.864685 44.320709
+v 36.270222 -64.716042 39.069614
+v 37.914722 -69.239029 44.320709
+v 36.270222 -64.716042 39.613857
+v 35.657612 -63.031128 35.989185
+v 35.515945 -62.641495 39.069614
+v 35.515945 -62.641495 35.989185
+v 18.755268 -66.791718 35.989185
+v 19.129341 -68.966728 39.069614
+v 20.060181 -74.378967 44.320709
+v 19.944925 -73.708832 44.320709
+v 19.129341 -68.966728 39.613857
+v 18.827951 -67.214325 35.989185
+v 18.755268 -66.791718 39.069614
+v 18.005383 -62.431606 32.013752
+v 17.017822 -62.589306 32.013752
+v 18.141743 -69.124199 39.069614
+v 18.141743 -69.124199 39.613857
+v 18.957411 -73.866791 44.320709
+v 19.072826 -74.537865 44.320709
+v 17.767628 -66.948952 35.989185
+v 17.840479 -67.372536 35.989185
+v 17.767628 -66.948952 39.069614
+v 6.392873 -68.126823 35.989185
+v 6.512790 -70.330444 39.069614
+v 6.811853 -75.826088 44.320709
+v 6.774241 -75.134918 44.320709
+v 6.512790 -70.330444 39.613857
+v 6.416835 -68.567162 35.989185
+v 6.392873 -68.126823 39.069614
+v 6.153144 -63.721516 32.013752
+v 5.154394 -63.771675 32.013752
+v 5.513999 -70.379845 39.069614
+v 5.513999 -70.379845 39.613857
+v 5.775460 -75.184517 44.320709
+v 5.813126 -75.876656 44.320709
+v 5.394077 -68.176132 35.989185
+v 5.418095 -68.617493 35.989185
+v 5.394077 -68.176132 39.069614
+v -5.393479 -68.165161 35.989185
+v -5.513400 -70.368835 39.613857
+v -5.513400 -70.368835 39.069614
+v -5.774857 -75.173424 44.320709
+v -5.812816 -75.870964 44.320709
+v -5.813126 -75.876656 44.320709
+v -5.154394 -63.771675 32.013752
+v -5.418095 -68.617493 35.989185
+v -5.393479 -68.165161 39.069614
+v -6.153144 -63.721516 32.013752
+v -6.811853 -75.826088 44.320709
+v -6.512083 -70.317444 39.069614
+v -6.811491 -75.819450 44.320709
+v -6.773534 -75.121925 44.320709
+v -6.512083 -70.317444 39.613857
+v -6.416835 -68.567162 35.989185
+v -6.392166 -68.113831 39.069614
+v -6.392166 -68.113831 35.989185
+v -17.761614 -66.913979 35.989185
+v -18.135717 -69.089165 39.613857
+v -18.135717 -69.089165 39.069614
+v -18.951361 -73.831627 44.320709
+v -19.069777 -74.520134 44.320709
+v -19.072826 -74.537865 44.320709
+v -17.017822 -62.589306 32.013752
+v -17.840479 -67.372536 35.989185
+v -17.761614 -66.913979 39.069614
+v -18.005383 -62.431606 32.013752
+v -20.060181 -74.378967 44.320709
+v -19.123005 -68.929878 39.069614
+v -20.056984 -74.360382 44.320709
+v -19.938578 -73.671928 44.320709
+v -19.123005 -68.929878 39.613857
+v -18.827951 -67.214325 35.989185
+v -18.748936 -66.754898 39.069614
+v -18.748936 -66.754898 35.989185
+v -35.493408 -62.579510 35.989185
+v -36.247662 -64.653992 39.069614
+v -38.142200 -69.864685 44.320709
+v -38.130859 -69.833488 44.320709
+v -37.892117 -69.176857 44.320709
+v -36.247662 -64.653992 39.613857
+v -35.657612 -63.031128 35.989185
+v -35.493408 -62.579510 39.069614
+v -33.998997 -58.469311 32.013752
+v -34.944683 -58.143780 32.013752
+v -37.192738 -64.326775 39.069614
+v -37.192738 -64.326775 39.613857
+v -38.836952 -68.848984 44.320709
+v -39.075661 -69.505524 44.320709
+v -39.087219 -69.537308 44.320709
+v -36.438602 -62.252621 35.989185
+v -36.603012 -62.704803 35.989185
+v -36.438602 -62.252621 39.069614
+v -46.754646 -57.924988 35.989185
+v -47.768436 -59.885654 39.069614
+v -50.318012 -64.816521 44.320709
+v -50.299641 -64.780983 44.320709
+v -49.978745 -64.160385 44.320709
+v -47.768436 -59.885654 39.613857
+v -46.978504 -58.357929 35.989185
+v -46.754646 -57.924988 39.069614
+v -44.749184 -54.046436 32.013752
+v -45.643959 -53.599693 32.013752
+v -48.662552 -59.437637 39.069614
+v -48.662552 -59.437637 39.613857
+v -50.872566 -63.711796 44.320709
+v -51.193417 -64.332321 44.320709
+v -51.211960 -64.368179 44.320709
+v -47.648911 -57.477257 35.989185
+v -47.872921 -57.910492 35.989185
+v -47.648911 -57.477257 39.069614
+v -57.458439 -51.624229 35.989185
+v -66.870644 -43.856510 35.989185
+v -68.414810 -45.433182 39.613857
+v -68.414810 -45.433182 39.069614
+v -71.781502 -48.870754 44.320709
+v -72.270287 -49.369823 44.320709
+v -72.299561 -49.399719 44.320709
+v -63.817417 -40.739010 32.013756
+v -67.212952 -44.206020 35.989185
+v -66.870644 -43.856510 39.069614
+v -64.526802 -40.034149 32.013756
+v -73.009735 -48.695667 44.320709
+v -69.124863 -44.729004 39.069614
+v -72.980644 -48.665966 44.320709
+v -72.491829 -48.166859 44.320709
+v -69.124863 -44.729004 39.613857
+v -67.922684 -43.501518 35.989189
+v -67.580559 -43.152191 39.069618
+v -67.580559 -43.152191 35.989189
+v -74.769295 -34.609875 35.989189
+v -76.561417 -35.897869 39.069618
+v -81.065414 -39.134876 44.320713
+v -81.035995 -39.113739 44.320713
+v -80.468735 -38.706047 44.320713
+v -76.561417 -35.897869 39.613861
+v -75.161972 -34.892090 35.989189
+v -74.769295 -34.609875 39.069618
+v -71.221146 -32.059830 32.013756
+v -71.790161 -31.237312 32.013756
+v -77.132393 -35.076756 39.069618
+v -77.132393 -35.076756 39.613861
+v -81.040558 -37.885544 44.320713
+v -81.607941 -38.293320 44.320713
+v -81.636894 -38.314125 44.320713
+v -75.339828 -33.788445 35.989189
+v -75.732086 -34.070358 35.989189
+v -75.339828 -33.788445 39.069618
+v -79.850731 -26.059986 35.989189
+v -83.144753 -17.906399 35.989189
+v -85.294205 -18.430298 39.613861
+v -85.294205 -18.430298 39.069618
+v -89.979355 -19.572237 44.320713
+v -90.659431 -19.737995 44.320713
+v -90.678673 -19.742685 44.320713
+v -78.872772 -16.865166 32.013756
+v -83.600227 -18.017414 35.989189
+v -83.144753 -17.906399 39.069618
+v -79.175064 -15.909568 32.013756
+v -90.969124 -18.784203 44.320713
+v -85.590446 -17.473228 39.069618
+v -90.950790 -18.779734 44.320713
+v -90.271294 -18.614117 44.320713
+v -85.590446 -17.473228 39.613861
+v -83.897202 -17.060524 35.989189
+v -83.443207 -16.949869 39.069618
+v -83.443207 -16.949869 35.989189
+v -85.564117 -6.820090 35.989189
+v -87.756157 -7.075695 39.069618
+v -93.237061 -7.714797 44.320713
+v -93.229248 -7.713886 44.320713
+v -92.535393 -7.632979 44.320713
+v -87.756157 -7.075695 39.613861
+v -86.016312 -6.872818 35.989189
+v -85.564117 -6.820091 39.069618
+v -81.196152 -6.310762 32.013756
+v -81.303871 -5.316548 32.013756
+v -87.865860 -6.081711 39.069618
+v -87.865860 -6.081711 39.613861
+v -92.645546 -6.639047 44.320713
+v -93.339462 -6.719961 44.320713
+v -93.346268 -6.720755 44.320713
+v -85.673592 -5.826080 35.989189
+v -86.124702 -5.878683 35.989189
+v -85.673592 -5.826081 39.069618
+v -85.686958 5.827637 35.989189
+v -87.879311 6.083275 39.613861
+v -87.879311 6.083275 39.069618
+v -92.659142 6.640629 44.320713
+v -93.346268 6.720751 44.320713
+v -81.303871 5.316545 32.013756
+v -86.124702 5.878680 35.989189
+v -85.686958 5.827636 39.069618
+v -81.196152 6.310760 32.013756
+v -93.237061 7.714793 44.320713
+v -87.771790 7.077514 39.069618
+v -92.551018 7.634796 44.320713
+v -87.771790 7.077514 39.613861
+v -86.016312 6.872816 35.989189
+v -85.579758 6.821911 39.069618
+v -85.579758 6.821911 35.989189
+v -83.480629 16.958986 35.989189
+v -85.627632 17.482288 39.069618
+v -90.969124 18.784199 44.320713
+v -90.308022 18.623064 44.320713
+v -85.627632 17.482288 39.613861
+v -83.897202 17.060520 35.989189
+v -83.480629 16.958986 39.069618
+v -79.175064 15.909566 32.013756
+v -78.872772 16.865162 32.013756
+v -85.333366 18.439840 39.069618
+v -85.333366 18.439840 39.613861
+v -90.017921 19.581633 44.320713
+v -90.678673 19.742682 44.320713
+v -83.184227 17.916018 35.989189
+v -83.600227 18.017410 35.989189
+v -83.184227 17.916018 39.069618
+v -79.882004 26.126379 35.989189
+v -75.397537 33.829918 35.989189
+v -77.190155 35.118267 39.613861
+v -77.190155 35.118267 39.069618
+v -81.098427 37.927128 44.320713
+v -81.636894 38.314117 44.320713
+v -71.790161 31.237309 32.013756
+v -75.732086 34.070358 35.989189
+v -75.397537 33.829918 39.069618
+v -71.221146 32.059830 32.013756
+v -81.065414 39.134869 44.320713
+v -76.620186 35.940102 39.069618
+v -80.527534 38.748299 44.320713
+v -76.620186 35.940102 39.613861
+v -75.161972 34.892090 35.989189
+v -74.828033 34.652092 39.069618
+v -74.828033 34.652092 35.989189
+v -67.638657 43.211517 35.989189
+v -69.182976 44.788342 39.069622
+v -73.009735 48.695660 44.320717
+v -72.549973 48.226212 44.320717
+v -69.182976 44.788342 39.613865
+v -67.922684 43.501518 35.989189
+v -67.638657 43.211517 39.069618
+v -64.526802 40.034149 32.013756
+v -63.817417 40.739010 32.013756
+v -68.473328 45.492931 39.069622
+v -68.473328 45.492931 39.613865
+v -71.840019 48.930496 44.320717
+v -72.299561 49.399712 44.320717
+v -66.929161 43.916260 35.989193
+v -67.212952 44.206020 35.989193
+v -66.929161 43.916260 39.069622
+v -47.685905 57.548809 35.989193
+v -58.057472 51.308353 35.989193
+v -48.699554 59.509201 39.613865
+v -48.699554 59.509201 39.069622
+v -50.909580 63.783375 44.320717
+v -51.211960 64.368179 44.320717
+v -45.643959 53.599693 32.013760
+v -47.872921 57.910492 35.989193
+v -47.685905 57.548809 39.069622
+v -44.749184 54.046436 32.013760
+v -50.318012 64.816521 44.320717
+v -47.805077 59.956516 39.069622
+v -50.015419 64.231300 44.320717
+v -47.805077 59.956516 39.613865
+v -46.978504 58.357929 35.989193
+v -46.791271 57.995819 39.069622
+v -46.791271 57.995819 35.989193
+v -36.461605 62.315880 35.989193
+v -37.215752 64.390068 39.613865
+v -37.215752 64.390068 39.069622
+v -38.859989 68.912338 44.320717
+v -39.087219 69.537308 44.320717
+v -34.944683 58.143780 32.013760
+v -36.603012 62.704803 35.989193
+v -36.461605 62.315880 39.069622
+v -33.998997 58.469311 32.013760
+v -38.142200 69.864685 44.320717
+v -36.270222 64.716042 39.069622
+v -37.914722 69.239029 44.320717
+v -36.270222 64.716042 39.613865
+v -35.657612 63.031128 35.989193
+v -35.515945 62.641495 39.069622
+v -35.515945 62.641495 35.989193
+v -18.755268 66.791718 35.989193
+v -19.129341 68.966728 39.069622
+v -20.060181 74.378967 44.320717
+v -19.944925 73.708832 44.320717
+v -19.129341 68.966728 39.613865
+v -18.827951 67.214325 35.989193
+v -18.755268 66.791718 39.069622
+v -18.005383 62.431606 32.013760
+v -17.017822 62.589306 32.013760
+v -18.141743 69.124199 39.069622
+v -18.141743 69.124199 39.613865
+v -18.957411 73.866791 44.320717
+v -19.072826 74.537865 44.320717
+v -17.767628 66.948952 35.989193
+v -17.840479 67.372536 35.989193
+v -17.767628 66.948952 39.069622
+v -6.392873 68.126823 35.989193
+v -6.512790 70.330444 39.069622
+v -6.811853 75.826088 44.320717
+v -6.774241 75.134918 44.320717
+v -6.512790 70.330444 39.613865
+v -6.416835 68.567162 35.989193
+v -6.392873 68.126823 39.069622
+v -6.153144 63.721516 32.013760
+v -5.154394 63.771675 32.013760
+v -5.513999 70.379845 39.069622
+v -5.513999 70.379845 39.613865
+v -5.775460 75.184517 44.320717
+v -5.813126 75.876656 44.320717
+v -5.394077 68.176132 35.989193
+v -5.418095 68.617493 35.989193
+v -5.394077 68.176132 39.069622
+v 5.393479 68.165161 35.989193
+v 5.513400 70.368835 39.613865
+v 5.513400 70.368835 39.069622
+v 5.774857 75.173424 44.320717
+v 5.812816 75.870964 44.320717
+v 5.813126 75.876656 44.320717
+v 5.154394 63.771675 32.013760
+v 5.418095 68.617493 35.989193
+v 5.393479 68.165161 39.069622
+v 6.153144 63.721516 32.013760
+v 6.811853 75.826088 44.320717
+v 6.512083 70.317444 39.069622
+v 6.811491 75.819450 44.320717
+v 6.773534 75.121925 44.320717
+v 6.512083 70.317444 39.613865
+v 6.416835 68.567162 35.989193
+v 6.392166 68.113831 39.069622
+v 6.392166 68.113831 35.989193
+v 17.761614 66.913979 35.989193
+v 18.135717 69.089165 39.613865
+v 18.135717 69.089165 39.069622
+v 18.951361 73.831627 44.320717
+v 19.069777 74.520134 44.320717
+v 19.072826 74.537865 44.320717
+v 17.017822 62.589306 32.013760
+v 17.840479 67.372536 35.989193
+v 17.761614 66.913979 39.069622
+v 18.005383 62.431606 32.013760
+v 20.060181 74.378967 44.320717
+v 19.123005 68.929878 39.069622
+v 20.056984 74.360382 44.320717
+v 19.938578 73.671928 44.320717
+v 19.123005 68.929878 39.613865
+v 18.827951 67.214325 35.989193
+v 18.748936 66.754898 39.069622
+v 18.748936 66.754898 35.989193
+v 35.493408 62.579510 35.989193
+v 36.247662 64.653992 39.069622
+v 38.142200 69.864685 44.320717
+v 38.130859 69.833488 44.320717
+v 37.892117 69.176857 44.320717
+v 36.247662 64.653992 39.613865
+v 35.657612 63.031128 35.989193
+v 35.493408 62.579510 39.069622
+v 33.998997 58.469311 32.013760
+v 34.944683 58.143780 32.013760
+v 37.192738 64.326775 39.069622
+v 37.192738 64.326775 39.613865
+v 38.836952 68.848984 44.320717
+v 39.075661 69.505524 44.320717
+v 39.087219 69.537308 44.320717
+v 36.438602 62.252621 35.989193
+v 36.603012 62.704803 35.989193
+v 36.438602 62.252621 39.069622
+v 46.754646 57.924988 35.989193
+v 47.768436 59.885654 39.069622
+v 50.318012 64.816521 44.320717
+v 50.299641 64.780983 44.320717
+v 49.978745 64.160385 44.320717
+v 47.768436 59.885654 39.613865
+v 46.978504 58.357929 35.989193
+v 46.754646 57.924988 39.069622
+v 44.749184 54.046436 32.013760
+v 45.643959 53.599693 32.013760
+v 48.662552 59.437637 39.069622
+v 48.662552 59.437637 39.613865
+v 50.872566 63.711788 44.320717
+v 51.193417 64.332321 44.320717
+v 51.211960 64.368179 44.320717
+v 47.648911 57.477257 35.989193
+v 47.872921 57.910492 35.989193
+v 47.648911 57.477257 39.069622
+v 57.458439 51.624229 35.989193
+v 66.870644 43.856510 35.989193
+v 68.414810 45.433182 39.613865
+v 68.414810 45.433182 39.069622
+v 71.781502 48.870747 44.320717
+v 72.270287 49.369816 44.320717
+v 72.299561 49.399712 44.320717
+v 63.817417 40.739010 32.013756
+v 67.212952 44.206020 35.989193
+v 66.870644 43.856510 39.069622
+v 64.526802 40.034149 32.013756
+v 73.009735 48.695660 44.320717
+v 69.124863 44.729004 39.069622
+v 72.980644 48.665958 44.320717
+v 72.491829 48.166851 44.320717
+v 69.124863 44.729004 39.613865
+v 67.922684 43.501518 35.989189
+v 67.580559 43.152191 39.069618
+v 67.580559 43.152191 35.989189
+v 74.769295 34.609875 35.989189
+v 76.561417 35.897869 39.069618
+v 81.065414 39.134869 44.320713
+v 81.035995 39.113731 44.320713
+v 80.468735 38.706039 44.320713
+v 76.561417 35.897869 39.613861
+v 75.161972 34.892090 35.989189
+v 74.769295 34.609875 39.069618
+v 71.221146 32.059830 32.013756
+v 71.790161 31.237309 32.013756
+v 77.132393 35.076756 39.069618
+v 77.132393 35.076756 39.613861
+v 81.040558 37.885536 44.320713
+v 81.607941 38.293312 44.320713
+v 81.636894 38.314117 44.320713
+v 75.339828 33.788445 35.989189
+v 75.732086 34.070358 35.989189
+v 75.339828 33.788445 39.069618
+v 79.842392 26.076963 35.989189
+v 83.144753 17.906395 35.989189
+v 85.294205 18.430294 39.613861
+v 85.294205 18.430294 39.069618
+v 89.979355 19.572233 44.320713
+v 90.659431 19.737991 44.320713
+v 90.678673 19.742682 44.320713
+v 78.872772 16.865162 32.013756
+v 83.600227 18.017410 35.989189
+v 83.144753 17.906395 39.069618
+v 79.175064 15.909566 32.013756
+v 90.969124 18.784199 44.320713
+v 85.590446 17.473225 39.069618
+v 90.950790 18.779730 44.320713
+v 90.271294 18.614113 44.320713
+v 85.590446 17.473225 39.613861
+v 83.897202 17.060520 35.989189
+v 83.443207 16.949865 39.069618
+v 83.443207 16.949865 35.989189
+v 85.564117 6.820087 35.989189
+v 87.756157 7.075691 39.069618
+v 93.237061 7.714793 44.320713
+v 93.229248 7.713882 44.320713
+v 92.535393 7.632975 44.320713
+v 87.756157 7.075691 39.613861
+v 86.016312 6.872816 35.989189
+v 85.564117 6.820087 39.069618
+v 81.196152 6.310760 32.013756
+v 81.303871 5.316545 32.013756
+v 87.865860 6.081707 39.069618
+v 87.865860 6.081707 39.613861
+v 92.645546 6.639043 44.320713
+v 93.339462 6.719957 44.320713
+v 93.346268 6.720751 44.320713
+v 85.673592 5.826077 35.989189
+v 86.124702 5.878680 35.989189
+v 85.673592 5.826077 39.069618
+v 85.970749 -0.447604 39.069618
+v 25.484203 -73.375977 44.320709
+v 43.720016 -67.822227 44.320709
+v 61.669674 -58.199821 44.320709
+v 62.003246 -57.114243 44.320709
+v 76.378479 -45.146999 44.320709
+v 86.542221 -30.066467 44.320713
+v 86.390961 -28.789391 44.320713
+v 91.724869 -16.069696 44.320713
+v 93.687569 -0.506829 44.320713
+v 92.989037 -0.501468 44.320713
+v 88.177567 -0.464541 39.613861
+v 88.177567 -0.464541 39.069618
+v 86.554886 -3.408113 39.069618
+v 87.747459 -3.541437 39.069618
+v 86.688210 -2.215542 39.069618
+v 87.880783 -2.348866 39.069618
+v 85.592918 -15.814242 39.069618
+v 84.456985 -15.427389 39.069618
+v 84.843842 -14.291456 39.069618
+v 85.979774 -14.678308 39.069618
+v 87.007095 -9.737949 39.069618
+v 85.836327 -9.474686 39.069618
+v 86.099586 -8.303920 39.069618
+v 87.270355 -8.567183 39.069618
+v 82.018127 -26.779999 39.613861
+v 82.018127 -26.779999 39.069618
+v 77.707352 -32.699673 39.069618
+v 76.733490 -31.998528 39.069618
+v 78.408493 -31.725819 39.069618
+v 80.012268 -25.858723 39.069618
+v 77.434639 -31.024672 39.069618
+v 79.858154 -26.739319 39.069618
+v 80.893417 -27.346136 39.069618
+v 80.464973 -25.704054 39.069618
+v 81.500237 -26.310871 39.069618
+v 82.449623 -21.200796 39.069618
+v 83.539650 -21.702639 39.069618
+v 82.951462 -20.110771 39.069618
+v 84.041489 -20.612614 39.069618
+v 69.166100 -41.622269 39.046009
+v 69.166100 -41.622269 39.069618
+v 69.977112 -40.735226 39.046009
+v 73.133705 -36.948513 39.046009
+v 69.977112 -40.735226 39.069618
+v 73.133705 -36.948513 39.069618
+v 73.192482 -36.872288 39.046009
+v 73.192482 -36.872288 39.069618
+v 69.939125 -42.413418 39.069618
+v 70.797432 -41.574772 39.069618
+v 74.037392 -37.729816 39.069618
+v 73.914452 -36.037220 39.069618
+v 74.822220 -36.822048 39.069618
+v 59.194225 -53.207527 39.613857
+v 59.194225 -53.207527 39.069614
+v 50.262779 -57.475101 39.069614
+v 49.742214 -56.471565 39.069614
+v 51.327995 -56.922546 39.069614
+v 55.584789 -54.268444 39.069614
+v 55.027576 -53.353485 39.069614
+v 50.793781 -55.892696 39.069614
+v 56.033031 -52.697395 39.069614
+v 56.609688 -53.644279 39.069614
+v 60.060116 -49.837914 39.069614
+v 60.665844 -50.688587 39.069614
+v 61.643353 -49.992546 39.069614
+v 65.465553 -46.735748 39.069614
+v 64.790451 -45.924782 39.069614
+v 61.010540 -49.103828 39.069614
+v 65.676186 -45.113159 39.069614
+v 66.387810 -45.967995 39.069614
+v 49.742214 -56.471565 39.046005
+v 50.793781 -55.892696 39.046005
+v 55.027576 -53.353485 39.046005
+v 56.033031 -52.697395 39.046005
+v 60.060116 -49.837914 39.046005
+v 61.010540 -49.103828 39.046005
+v 64.790451 -45.924782 39.046005
+v 65.676186 -45.113159 39.046005
+v 39.037083 -62.777531 39.069614
+v 38.626053 -61.650124 39.069614
+v 40.164494 -62.366501 39.069614
+v 44.736046 -60.310436 39.069614
+v 39.753460 -61.239090 39.069614
+v 44.254574 -59.211262 39.069614
+v 45.353752 -58.729790 39.069614
+v 45.835220 -59.828964 39.069614
+v 21.186155 -68.005852 39.069614
+v 20.982563 -66.823250 39.069614
+v 22.165165 -66.619659 39.069614
+v 22.368757 -67.802261 39.069614
+v 27.236742 -66.621651 39.069614
+v 26.964590 -65.452919 39.069614
+v 33.195145 -64.880028 39.069614
+v 28.133322 -65.180763 39.069614
+v 28.405474 -66.349495 39.069614
+v 32.853870 -63.729580 39.069614
+v 34.004322 -63.388309 39.069614
+v 34.345592 -64.538757 39.069614
+v 8.829425 -68.515175 39.069614
+v 8.897084 -69.713264 39.069614
+v 15.065881 -69.035614 39.069614
+v 10.027516 -68.447517 39.069614
+v 10.095175 -69.645607 39.069614
+v 14.930408 -67.843285 39.069614
+v 16.122736 -67.707817 39.069614
+v 16.258209 -68.900146 39.069614
+v -3.438015 -68.819641 39.069614
+v -3.505674 -70.017731 39.069614
+v -2.239924 -68.887299 39.069614
+v -2.307583 -70.085388 39.069614
+v 2.700000 -70.040382 39.069614
+v 2.700000 -68.840378 39.069614
+v 3.900000 -68.840378 39.069614
+v 3.900000 -70.040382 39.069614
+v -15.864440 -68.922012 39.069614
+v -15.660848 -67.739410 39.069614
+v -14.681837 -69.125610 39.069614
+v -9.700402 -69.645241 39.069614
+v -14.478245 -67.943001 39.069614
+v -9.564930 -68.452911 39.069614
+v -8.372602 -68.588387 39.069614
+v -8.508074 -69.780716 39.069614
+v -33.963741 -64.627174 39.069614
+v -33.552708 -63.499767 39.069614
+v -32.836330 -65.038208 39.069614
+v -28.018122 -66.415749 39.069614
+v -32.425297 -63.910797 39.069614
+v -27.676849 -65.265305 39.069614
+v -21.977451 -67.846336 39.069614
+v -26.526402 -65.606575 39.069614
+v -26.867672 -66.757027 39.069614
+v -21.705299 -66.677605 39.069614
+v -20.536568 -66.949760 39.069614
+v -20.808720 -68.118492 39.069614
+v -45.469318 -59.961613 39.069614
+v -44.916759 -58.896397 39.069614
+v -44.404106 -60.514168 39.069614
+v -39.789761 -62.477055 39.069614
+v -43.851547 -59.448956 39.069614
+v -39.308289 -61.377880 39.069614
+v -38.209114 -61.859352 39.069614
+v -38.690582 -62.958527 39.069614
+v -61.897316 -57.936905 44.320709
+v -61.495491 -57.365486 44.320709
+v -58.727814 -53.429523 39.613857
+v -58.727814 -53.429523 39.069614
+v -66.076782 -46.187305 39.069614
+v -65.276215 -45.367981 39.069614
+v -65.218475 -47.025948 39.069614
+v -61.315403 -50.190636 39.069614
+v -60.591621 -49.321194 39.069614
+v -64.385178 -46.173119 39.069614
+v -59.636501 -50.049473 39.069614
+v -60.393147 -50.958385 39.069614
+v -55.598209 -52.881470 39.069614
+v -56.267044 -53.820770 39.069614
+v -55.289536 -54.516811 39.069614
+v -50.972744 -57.077190 39.069614
+v -54.593494 -53.539303 39.069614
+v -50.348579 -56.052292 39.069614
+v -49.323681 -56.676460 39.069614
+v -49.947845 -57.701359 39.069614
+v -54.724884 -53.445744 39.069614
+v -65.276215 -45.367981 39.046005
+v -64.385178 -46.173119 39.046005
+v -60.591621 -49.321194 39.046005
+v -59.636501 -50.049473 39.046005
+v -55.598209 -52.881470 39.046005
+v -54.724884 -53.445744 39.046005
+v -69.599876 -41.031662 39.046009
+v -69.599876 -41.031662 39.069618
+v -69.535286 -41.102360 39.046009
+v -69.535286 -41.102360 39.069618
+v -74.552193 -37.082020 39.069618
+v -73.578339 -36.380875 39.069618
+v -73.851044 -38.055874 39.069618
+v -70.505661 -41.814777 39.069618
+v -72.877190 -37.354729 39.069618
+v -68.813065 -41.937717 39.069618
+v -69.720833 -42.722546 39.069618
+v -86.850204 -29.313307 44.320713
+v -86.216675 -29.018703 44.320713
+v -81.852592 -26.990068 39.613861
+v -81.852592 -26.990068 39.069618
+v -83.852081 -20.925943 39.069618
+v -82.716148 -20.539089 39.069618
+v -83.465233 -22.061876 39.069618
+v -80.191330 -26.105907 39.069618
+v -79.850731 -26.059986 39.069618
+v -82.329292 -21.675024 39.069618
+v -81.281357 -26.607750 39.069618
+v -79.689491 -27.195932 39.069618
+v -80.779510 -27.697775 39.069618
+v -77.127480 -31.398010 39.069618
+v -78.162743 -32.004826 39.069618
+v -76.520660 -32.433273 39.069618
+v -77.555923 -33.040089 39.069618
+v -85.954933 -8.774680 39.069618
+v -87.147499 -8.908004 39.069618
+v -85.821609 -9.967251 39.069618
+v -87.014175 -10.100574 39.069618
+v -85.822403 -15.006393 39.069618
+v -84.651642 -14.743131 39.069618
+v -84.388374 -15.913897 39.069618
+v -85.559143 -16.177160 39.069618
+v -23.423742 73.795265 44.320717
+v -49.415874 65.300964 44.320717
+v -62.168686 56.996964 44.320717
+v -67.195091 54.033649 44.320717
+v -80.092865 40.540497 44.320713
+v -86.246254 29.088274 44.320713
+v -88.750114 25.191818 44.320713
+v -92.972054 9.775893 44.320713
+v -86.554886 3.408109 39.069618
+v -87.747459 3.541433 39.069618
+v -87.794739 -2.700002 39.069618
+v -86.688210 2.215538 39.069618
+v -87.880783 2.348862 39.069618
+v -86.594734 -2.700002 39.069618
+v -86.594734 -3.900002 39.069618
+v -87.794739 -3.900002 39.069618
+v -85.592918 15.814239 39.069618
+v -84.456985 15.427385 39.069618
+v -84.843842 14.291452 39.069618
+v -85.979774 14.678305 39.069618
+v -87.007095 9.737946 39.069618
+v -85.836327 9.474682 39.069618
+v -86.099586 8.303916 39.069618
+v -87.270355 8.567180 39.069618
+v -81.883316 27.057474 39.613861
+v -81.883316 27.057474 39.069618
+v -77.707352 32.699673 39.069618
+v -76.733490 31.998524 39.069618
+v -78.408493 31.725815 39.069618
+v -79.882004 26.126379 39.069618
+v -77.434639 31.024668 39.069618
+v -79.858154 26.739315 39.069618
+v -80.893417 27.346132 39.069618
+v -80.464973 25.704050 39.069618
+v -81.500237 26.310867 39.069618
+v -82.449623 21.200792 39.069618
+v -83.539650 21.702635 39.069618
+v -82.951462 20.110767 39.069618
+v -84.041489 20.612610 39.069618
+v -69.166100 41.622269 39.046009
+v -69.166100 41.622269 39.069618
+v -69.977112 40.735226 39.046009
+v -73.133705 36.948513 39.046009
+v -69.977112 40.735226 39.069618
+v -73.133705 36.948513 39.069618
+v -73.192482 36.872288 39.046009
+v -73.192482 36.872288 39.069618
+v -69.939125 42.413418 39.069618
+v -70.797432 41.574772 39.069618
+v -74.037392 37.729816 39.069618
+v -73.914452 36.037220 39.069618
+v -74.822220 36.822048 39.069618
+v -59.350166 53.097099 39.613865
+v -59.350166 53.097099 39.069622
+v -50.262779 57.475101 39.069622
+v -49.742214 56.471565 39.069622
+v -51.327995 56.922546 39.069622
+v -55.584789 54.268444 39.069622
+v -55.027576 53.353485 39.069622
+v -50.793781 55.892696 39.069622
+v -56.033031 52.697395 39.069622
+v -56.609688 53.644279 39.069622
+v -60.060116 49.837914 39.069622
+v -60.665844 50.688587 39.069622
+v -61.643353 49.992546 39.069622
+v -65.465553 46.735748 39.069622
+v -64.790451 45.924782 39.069622
+v -61.010540 49.103828 39.069622
+v -65.676186 45.113159 39.069622
+v -66.387810 45.967995 39.069622
+v -49.742214 56.471565 39.046013
+v -50.793781 55.892696 39.046013
+v -55.027576 53.353485 39.046013
+v -56.033031 52.697395 39.046013
+v -60.060116 49.837914 39.046013
+v -61.010540 49.103828 39.046013
+v -64.790451 45.924782 39.046013
+v -65.676186 45.113159 39.046013
+v -39.037083 62.777531 39.069622
+v -38.626053 61.650124 39.069622
+v -40.164494 62.366501 39.069622
+v -44.736046 60.310436 39.069622
+v -39.753460 61.239090 39.069622
+v -44.254574 59.211262 39.069622
+v -45.353752 58.729790 39.069622
+v -45.835220 59.828964 39.069622
+v -21.186155 68.005852 39.069622
+v -20.982563 66.823250 39.069622
+v -22.165165 66.619659 39.069622
+v -22.368757 67.802261 39.069622
+v -27.236742 66.621651 39.069622
+v -26.964590 65.452919 39.069622
+v -33.195145 64.880028 39.069622
+v -28.133322 65.180763 39.069622
+v -28.405474 66.349495 39.069622
+v -32.853870 63.729580 39.069622
+v -34.004322 63.388309 39.069622
+v -34.345592 64.538757 39.069622
+v -8.829425 68.515175 39.069622
+v -8.897084 69.713264 39.069622
+v -15.065881 69.035614 39.069622
+v -10.027516 68.447517 39.069622
+v -10.095175 69.645607 39.069622
+v -14.930408 67.843285 39.069622
+v -16.122736 67.707817 39.069622
+v -16.258209 68.900146 39.069622
+v 3.438015 68.819641 39.069622
+v 3.505674 70.017731 39.069622
+v 2.239924 68.887299 39.069622
+v 2.307583 70.085388 39.069622
+v -2.700000 70.040382 39.069622
+v -2.700000 68.840378 39.069622
+v -3.900000 68.840378 39.069622
+v -3.900000 70.040382 39.069622
+v 15.864440 68.922012 39.069622
+v 15.660848 67.739410 39.069622
+v 14.681837 69.125610 39.069622
+v 9.700402 69.645241 39.069622
+v 14.478245 67.943001 39.069622
+v 9.564930 68.452911 39.069622
+v 8.372602 68.588387 39.069622
+v 8.508074 69.780716 39.069622
+v 33.963741 64.627174 39.069622
+v 33.552708 63.499767 39.069622
+v 32.836330 65.038208 39.069622
+v 28.018122 66.415749 39.069622
+v 32.425297 63.910797 39.069622
+v 27.676849 65.265305 39.069622
+v 21.977451 67.846336 39.069622
+v 26.526402 65.606575 39.069622
+v 26.867672 66.757027 39.069622
+v 21.705299 66.677605 39.069622
+v 20.536568 66.949760 39.069622
+v 20.808720 68.118492 39.069622
+v 45.469318 59.961613 39.069622
+v 44.916759 58.896397 39.069622
+v 44.404106 60.514168 39.069622
+v 39.789761 62.477055 39.069622
+v 43.851547 59.448956 39.069622
+v 39.308289 61.377880 39.069622
+v 38.209114 61.859352 39.069622
+v 38.690582 62.958527 39.069622
+v 61.897316 57.936897 44.320717
+v 61.495491 57.365479 44.320717
+v 58.727814 53.429523 39.613865
+v 58.727814 53.429523 39.069622
+v 66.076782 46.187305 39.069622
+v 65.276215 45.367981 39.069622
+v 65.218475 47.025948 39.069622
+v 61.315403 50.190636 39.069622
+v 60.591621 49.321194 39.069622
+v 64.385178 46.173119 39.069622
+v 59.636501 50.049473 39.069622
+v 60.393147 50.958385 39.069622
+v 55.598209 52.881470 39.069622
+v 56.267044 53.820770 39.069622
+v 55.289536 54.516811 39.069622
+v 50.972744 57.077190 39.069622
+v 54.593494 53.539303 39.069622
+v 50.348579 56.052292 39.069622
+v 49.323681 56.676460 39.069622
+v 49.947845 57.701359 39.069622
+v 54.724884 53.445744 39.069622
+v 65.276215 45.367981 39.046013
+v 64.385178 46.173119 39.046013
+v 60.591621 49.321194 39.046013
+v 59.636501 50.049473 39.046013
+v 55.598209 52.881470 39.046013
+v 54.724884 53.445744 39.046013
+v 69.599876 41.031662 39.046009
+v 69.599876 41.031662 39.069618
+v 69.535286 41.102360 39.046009
+v 69.535286 41.102360 39.069618
+v 74.552193 37.082020 39.069618
+v 73.578339 36.380875 39.069618
+v 73.851044 38.055874 39.069618
+v 70.505661 41.814777 39.069618
+v 72.877190 37.354729 39.069618
+v 68.813065 41.937717 39.069618
+v 69.720833 42.722546 39.069618
+v 86.857437 29.298464 44.320713
+v 86.222466 29.006826 44.320713
+v 81.848618 26.998167 39.613861
+v 81.848618 26.998167 39.069618
+v 83.852081 20.925940 39.069618
+v 82.716148 20.539085 39.069618
+v 83.465233 22.061872 39.069618
+v 80.191330 26.105904 39.069618
+v 79.842392 26.076963 39.069618
+v 82.329292 21.675020 39.069618
+v 81.281357 26.607746 39.069618
+v 79.689491 27.195929 39.069618
+v 80.779510 27.697771 39.069618
+v 77.127480 31.398006 39.069618
+v 78.162743 32.004826 39.069618
+v 76.520660 32.433273 39.069618
+v 77.555923 33.040089 39.069618
+v 85.954933 8.774676 39.069618
+v 87.147499 8.908000 39.069618
+v 85.821609 9.967247 39.069618
+v 87.014175 10.100571 39.069618
+v 85.822403 15.006390 39.069618
+v 84.651642 14.743127 39.069618
+v 84.388374 15.913893 39.069618
+v 85.559143 16.177156 39.069618
+v 86.594734 2.699998 39.069618
+v 87.794739 2.699998 39.069618
+v 86.594734 3.899998 39.069618
+v 87.794739 3.899998 39.069618
+v 93.687569 -0.506829 48.274822
+v 91.870766 15.337479 48.274822
+v 86.716644 29.585478 48.274822
+v 79.346558 41.404915 48.274822
+v 70.789864 50.780453 48.274826
+v 58.585163 60.135674 48.274826
+v 44.445290 67.444565 48.274826
+v 25.292433 73.369110 48.274826
+v 3.491938 75.959686 48.274826
+v -14.961328 75.123627 48.274826
+v -36.674446 70.387154 48.274826
+v -54.760918 62.515484 48.274826
+v -72.279327 49.477966 48.274826
+v -83.688477 35.211178 48.274822
+v -90.723671 19.664148 48.274822
+v -93.623985 2.998073 48.274822
+v -92.173828 -14.009275 48.274822
+v -86.837280 -29.339775 48.274822
+v -78.946976 -41.920464 48.274822
+v -69.744423 -51.733669 48.274818
+v -59.967720 -59.244274 48.274818
+v -46.577915 -66.527481 48.274818
+v -31.285460 -71.923645 48.274818
+v -10.652063 -75.546036 48.274818
+v 7.805005 -75.775131 48.274818
+v 25.269001 -73.421585 48.274818
+v 42.580093 -68.276733 48.274818
+v 59.648121 -59.555695 48.274818
+v 74.418396 -47.302799 48.274818
+v 84.934570 -33.088963 48.274822
+v 91.253586 -17.858418 48.274822
+v 93.035736 -9.336655 48.274822
+v 86.554886 -3.408113 39.346008
+v 87.747459 -3.541437 39.346008
+v 87.880783 -2.348866 39.346008
+v 86.688210 -2.215542 39.346008
+v 84.456985 -15.427389 39.346008
+v 85.592918 -15.814242 39.346008
+v 85.979774 -14.678308 39.346008
+v 84.843842 -14.291456 39.346008
+v 85.836327 -9.474686 39.346008
+v 87.007095 -9.737949 39.346008
+v 87.270355 -8.567183 39.346008
+v 86.099586 -8.303920 39.346008
+v 76.733490 -31.998528 39.346008
+v 77.707352 -32.699673 39.346008
+v 78.408493 -31.725819 39.346008
+v 77.434639 -31.024672 39.346008
+v 79.858154 -26.739319 39.346008
+v 80.893417 -27.346136 39.346008
+v 81.500237 -26.310871 39.346008
+v 80.464973 -25.704054 39.346008
+v 82.449623 -21.200796 39.346008
+v 83.539650 -21.702639 39.346008
+v 84.041489 -20.612614 39.346008
+v 82.951462 -20.110771 39.346008
+v 73.914452 -36.037220 39.346008
+v 73.129623 -36.944988 39.346008
+v 73.129623 -36.944988 39.046009
+v 74.037392 -37.729816 39.346008
+v 70.797432 -41.574772 39.346008
+v 69.958786 -40.716473 39.346008
+v 69.958786 -40.716473 39.046009
+v 69.100487 -41.555115 39.046009
+v 69.100487 -41.555115 39.346008
+v 69.939125 -42.413418 39.346008
+v 74.822220 -36.822048 39.346008
+v 49.710224 -56.409889 39.046005
+v 49.710224 -56.409889 39.346004
+v 50.262779 -57.475101 39.346004
+v 51.327995 -56.922546 39.346004
+v 50.775436 -55.857330 39.346004
+v 50.775436 -55.857330 39.046005
+v 54.960621 -53.243546 39.046005
+v 54.960621 -53.243546 39.346004
+v 55.584789 -54.268444 39.346004
+v 56.609688 -53.644279 39.346004
+v 55.985519 -52.619381 39.346004
+v 55.985519 -52.619381 39.046005
+v 59.969803 -49.711075 39.046005
+v 59.969803 -49.711075 39.346004
+v 60.665844 -50.688587 39.346004
+v 61.643353 -49.992546 39.346004
+v 60.947311 -49.015034 39.346004
+v 60.947311 -49.015034 39.046005
+v 64.697800 -45.813492 39.046005
+v 64.697800 -45.813492 39.346004
+v 65.465553 -46.735748 39.346004
+v 66.387810 -45.967995 39.346004
+v 65.620056 -45.045738 39.346004
+v 65.620056 -45.045738 39.046005
+v 38.626053 -61.650124 39.346004
+v 39.037083 -62.777531 39.346004
+v 40.164494 -62.366501 39.346004
+v 39.753460 -61.239090 39.346004
+v 44.254574 -59.211262 39.346004
+v 44.736046 -60.310436 39.346004
+v 45.835220 -59.828964 39.346004
+v 45.353752 -58.729790 39.346004
+v 20.982563 -66.823250 39.346004
+v 21.186155 -68.005852 39.346004
+v 22.368757 -67.802261 39.346004
+v 22.165165 -66.619659 39.346004
+v 32.853870 -63.729580 39.346004
+v 33.195145 -64.880028 39.346004
+v 34.345592 -64.538757 39.346004
+v 34.004322 -63.388309 39.346004
+v 26.964590 -65.452919 39.346004
+v 27.236742 -66.621651 39.346004
+v 28.405474 -66.349495 39.346004
+v 28.133322 -65.180763 39.346004
+v 8.829425 -68.515175 39.346004
+v 8.897084 -69.713264 39.346004
+v 10.095175 -69.645607 39.346004
+v 10.027516 -68.447517 39.346004
+v 14.930408 -67.843285 39.346004
+v 15.065881 -69.035614 39.346004
+v 16.258209 -68.900146 39.346004
+v 16.122736 -67.707817 39.346004
+v -3.438015 -68.819641 39.346004
+v -3.505674 -70.017731 39.346004
+v -2.307583 -70.085388 39.346004
+v -2.239924 -68.887299 39.346004
+v 2.700000 -68.840378 39.346004
+v 2.700000 -70.040382 39.346004
+v 3.900000 -70.040382 39.346004
+v 3.900000 -68.840378 39.346004
+v -15.660848 -67.739410 39.346004
+v -15.864440 -68.922012 39.346004
+v -14.681837 -69.125610 39.346004
+v -14.478245 -67.943001 39.346004
+v -9.564930 -68.452911 39.346004
+v -9.700402 -69.645241 39.346004
+v -8.508074 -69.780716 39.346004
+v -8.372602 -68.588387 39.346004
+v -33.552708 -63.499767 39.346004
+v -33.963741 -64.627174 39.346004
+v -32.836330 -65.038208 39.346004
+v -32.425297 -63.910797 39.346004
+v -27.676849 -65.265305 39.346004
+v -28.018122 -66.415749 39.346004
+v -26.867672 -66.757027 39.346004
+v -26.526402 -65.606575 39.346004
+v -21.705299 -66.677605 39.346004
+v -21.977451 -67.846336 39.346004
+v -20.808720 -68.118492 39.346004
+v -20.536568 -66.949760 39.346004
+v -44.916759 -58.896397 39.346004
+v -45.469318 -59.961613 39.346004
+v -44.404106 -60.514168 39.346004
+v -43.851547 -59.448956 39.346004
+v -39.308289 -61.377880 39.346004
+v -39.789761 -62.477055 39.346004
+v -38.690582 -62.958527 39.346004
+v -38.209114 -61.859352 39.346004
+v -65.238136 -45.329006 39.046005
+v -65.238136 -45.329006 39.346004
+v -66.076782 -46.187305 39.346004
+v -65.218475 -47.025948 39.346004
+v -64.379837 -46.167648 39.346004
+v -64.379837 -46.167648 39.046005
+v -60.547653 -49.268379 39.046005
+v -60.547653 -49.268379 39.346004
+v -61.315403 -50.190636 39.346004
+v -60.393147 -50.958385 39.346004
+v -59.625397 -50.036133 39.346004
+v -59.625397 -50.036133 39.046005
+v -55.571003 -52.843262 39.046005
+v -55.571003 -52.843262 39.346004
+v -56.267044 -53.820770 39.346004
+v -55.289536 -54.516811 39.346004
+v -54.593494 -53.539303 39.346004
+v -50.348579 -56.052292 39.346004
+v -49.323681 -56.676460 39.346004
+v -50.972744 -57.077190 39.346004
+v -49.947845 -57.701359 39.346004
+v -68.813065 -41.937717 39.346008
+v -69.597893 -41.029945 39.346008
+v -69.597893 -41.029945 39.046009
+v -70.505661 -41.814777 39.346008
+v -69.720833 -42.722546 39.346008
+v -73.578339 -36.380875 39.346008
+v -74.552193 -37.082020 39.346008
+v -73.851044 -38.055874 39.346008
+v -72.877190 -37.354729 39.346008
+v -80.191330 -26.105907 39.346008
+v -81.281357 -26.607750 39.346008
+v -80.779510 -27.697775 39.346008
+v -79.689491 -27.195932 39.346008
+v -82.716148 -20.539089 39.346008
+v -83.852081 -20.925943 39.346008
+v -83.465233 -22.061876 39.346008
+v -82.329292 -21.675024 39.346008
+v -77.127480 -31.398010 39.346008
+v -78.162743 -32.004826 39.346008
+v -77.555923 -33.040089 39.346008
+v -76.520660 -32.433273 39.346008
+v -85.954933 -8.774680 39.346008
+v -87.147499 -8.908004 39.346008
+v -87.014175 -10.100574 39.346008
+v -85.821609 -9.967251 39.346008
+v -84.651642 -14.743131 39.346008
+v -85.822403 -15.006393 39.346008
+v -85.559143 -16.177160 39.346008
+v -84.388374 -15.913897 39.346008
+v -86.554886 3.408109 39.346008
+v -87.747459 3.541433 39.346008
+v -87.880783 2.348862 39.346008
+v -86.688210 2.215538 39.346008
+v -86.594734 -2.700002 39.346008
+v -87.794739 -2.700002 39.346008
+v -87.794739 -3.900002 39.346008
+v -86.594734 -3.900002 39.346008
+v -84.456985 15.427385 39.346008
+v -85.592918 15.814239 39.346008
+v -85.979774 14.678305 39.346008
+v -84.843842 14.291452 39.346008
+v -85.836327 9.474682 39.346008
+v -87.007095 9.737946 39.346008
+v -87.270355 8.567180 39.346008
+v -86.099586 8.303916 39.346008
+v -76.733490 31.998524 39.346008
+v -77.707352 32.699673 39.346008
+v -78.408493 31.725815 39.346008
+v -77.434639 31.024668 39.346008
+v -79.858154 26.739315 39.346008
+v -80.893417 27.346132 39.346008
+v -81.500237 26.310867 39.346008
+v -80.464973 25.704050 39.346008
+v -82.449623 21.200792 39.346008
+v -83.539650 21.702635 39.346008
+v -84.041489 20.612610 39.346008
+v -82.951462 20.110767 39.346008
+v -73.914452 36.037220 39.346008
+v -73.129623 36.944988 39.346008
+v -73.129623 36.944988 39.046009
+v -74.037392 37.729816 39.346008
+v -70.797432 41.574772 39.346008
+v -69.958786 40.716473 39.346008
+v -69.958786 40.716473 39.046009
+v -69.100487 41.555115 39.046009
+v -69.100487 41.555115 39.346008
+v -69.939125 42.413418 39.346008
+v -74.822220 36.822048 39.346008
+v -49.710224 56.409889 39.046013
+v -49.710224 56.409889 39.346012
+v -50.262779 57.475101 39.346012
+v -51.327995 56.922546 39.346012
+v -50.775436 55.857330 39.346012
+v -50.775436 55.857330 39.046013
+v -54.960621 53.243546 39.046013
+v -54.960621 53.243546 39.346012
+v -55.584789 54.268444 39.346012
+v -56.609688 53.644279 39.346012
+v -55.985519 52.619381 39.346012
+v -55.985519 52.619381 39.046013
+v -59.969803 49.711075 39.046013
+v -59.969803 49.711075 39.346012
+v -60.665844 50.688587 39.346012
+v -61.643353 49.992546 39.346012
+v -60.947311 49.015034 39.346012
+v -60.947311 49.015034 39.046013
+v -64.697800 45.813492 39.046013
+v -64.697800 45.813492 39.346012
+v -65.465553 46.735748 39.346012
+v -66.387810 45.967995 39.346012
+v -65.620056 45.045738 39.346012
+v -65.620056 45.045738 39.046013
+v -38.626053 61.650124 39.346012
+v -39.037083 62.777531 39.346012
+v -40.164494 62.366501 39.346012
+v -39.753460 61.239090 39.346012
+v -44.254574 59.211262 39.346012
+v -44.736046 60.310436 39.346012
+v -45.835220 59.828964 39.346012
+v -45.353752 58.729790 39.346012
+v -20.982563 66.823250 39.346012
+v -21.186155 68.005852 39.346012
+v -22.368757 67.802261 39.346012
+v -22.165165 66.619659 39.346012
+v -32.853870 63.729580 39.346012
+v -33.195145 64.880028 39.346012
+v -34.345592 64.538757 39.346012
+v -34.004322 63.388309 39.346012
+v -26.964590 65.452919 39.346012
+v -27.236742 66.621651 39.346012
+v -28.405474 66.349495 39.346012
+v -28.133322 65.180763 39.346012
+v -8.829425 68.515175 39.346012
+v -8.897084 69.713264 39.346012
+v -10.095175 69.645607 39.346012
+v -10.027516 68.447517 39.346012
+v -14.930408 67.843285 39.346012
+v -15.065881 69.035614 39.346012
+v -16.258209 68.900146 39.346012
+v -16.122736 67.707817 39.346012
+v 3.438015 68.819641 39.346012
+v 3.505674 70.017731 39.346012
+v 2.307583 70.085388 39.346012
+v 2.239924 68.887299 39.346012
+v -2.700000 68.840378 39.346012
+v -2.700000 70.040382 39.346012
+v -3.900000 70.040382 39.346012
+v -3.900000 68.840378 39.346012
+v 15.660848 67.739410 39.346012
+v 15.864440 68.922012 39.346012
+v 14.681837 69.125610 39.346012
+v 14.478245 67.943001 39.346012
+v 9.564930 68.452911 39.346012
+v 9.700402 69.645241 39.346012
+v 8.508074 69.780716 39.346012
+v 8.372602 68.588387 39.346012
+v 33.552708 63.499767 39.346012
+v 33.963741 64.627174 39.346012
+v 32.836330 65.038208 39.346012
+v 32.425297 63.910797 39.346012
+v 27.676849 65.265305 39.346012
+v 28.018122 66.415749 39.346012
+v 26.867672 66.757027 39.346012
+v 26.526402 65.606575 39.346012
+v 21.705299 66.677605 39.346012
+v 21.977451 67.846336 39.346012
+v 20.808720 68.118492 39.346012
+v 20.536568 66.949760 39.346012
+v 44.916759 58.896397 39.346012
+v 45.469318 59.961613 39.346012
+v 44.404106 60.514168 39.346012
+v 43.851547 59.448956 39.346012
+v 39.308289 61.377880 39.346012
+v 39.789761 62.477055 39.346012
+v 38.690582 62.958527 39.346012
+v 38.209114 61.859352 39.346012
+v 65.238136 45.329006 39.046013
+v 65.238136 45.329006 39.346012
+v 66.076782 46.187305 39.346012
+v 65.218475 47.025948 39.346012
+v 64.379837 46.167648 39.346012
+v 64.379837 46.167648 39.046013
+v 60.547653 49.268379 39.046013
+v 60.547653 49.268379 39.346012
+v 61.315403 50.190636 39.346012
+v 60.393147 50.958385 39.346012
+v 59.625397 50.036133 39.346012
+v 59.625397 50.036133 39.046013
+v 55.571003 52.843262 39.046013
+v 55.571003 52.843262 39.346012
+v 56.267044 53.820770 39.346012
+v 55.289536 54.516811 39.346012
+v 54.593494 53.539303 39.346012
+v 49.323681 56.676460 39.346012
+v 50.348579 56.052292 39.346012
+v 50.972744 57.077190 39.346012
+v 49.947845 57.701359 39.346012
+v 68.813065 41.937717 39.346008
+v 69.597893 41.029945 39.346008
+v 69.597893 41.029945 39.046009
+v 70.505661 41.814777 39.346008
+v 69.720833 42.722546 39.346008
+v 73.578339 36.380875 39.346008
+v 74.552193 37.082020 39.346008
+v 73.851044 38.055874 39.346008
+v 72.877190 37.354729 39.346008
+v 80.191330 26.105904 39.346008
+v 81.281357 26.607746 39.346008
+v 80.779510 27.697771 39.346008
+v 79.689491 27.195929 39.346008
+v 82.716148 20.539085 39.346008
+v 83.852081 20.925940 39.346008
+v 83.465233 22.061872 39.346008
+v 82.329292 21.675020 39.346008
+v 77.127480 31.398006 39.346008
+v 78.162743 32.004826 39.346008
+v 77.555923 33.040089 39.346008
+v 76.520660 32.433273 39.346008
+v 85.954933 8.774676 39.346008
+v 87.147499 8.908000 39.346008
+v 87.014175 10.100571 39.346008
+v 85.821609 9.967247 39.346008
+v 84.651642 14.743127 39.346008
+v 85.822403 15.006390 39.346008
+v 85.559143 16.177156 39.346008
+v 84.388374 15.913893 39.346008
+v 86.594734 2.699998 39.346008
+v 87.794739 2.699998 39.346008
+v 87.794739 3.899998 39.346008
+v 86.594734 3.899998 39.346008
+v 93.274063 -0.503655 48.274822
+v 91.457047 15.289531 48.274822
+v 86.305145 29.484779 48.274822
+v 78.942131 41.252430 48.274822
+v 70.396507 50.581177 48.274826
+v 58.207840 59.884666 48.274826
+v 44.081921 67.147667 48.274826
+v 24.938196 73.021431 48.274826
+v 3.140965 75.555679 48.274826
+v -15.249976 74.671791 48.274826
+v -36.948601 69.862679 48.274826
+v -54.952732 61.931622 48.274826
+v -70.727165 50.389290 48.274826
+v -82.309273 36.625053 48.274822
+v -89.528076 21.969513 48.274822
+v -92.956276 6.533831 48.274822
+v -92.559654 -9.603173 48.274822
+v -88.467232 -24.656588 48.274822
+v -81.693405 -37.431389 48.274822
+v -73.390442 -47.659477 48.274818
+v -64.353806 -55.639553 48.274818
+v -51.833572 -63.537663 48.274818
+v -37.474033 -69.619499 48.274818
+v -18.066238 -74.255798 48.274818
+v 0.307383 -75.598206 48.274818
+v 22.333014 -73.581161 48.274818
+v 46.832596 -66.044899 48.274818
+v 64.611435 -55.552139 48.274818
+v 78.303215 -42.192638 48.274822
+v 87.683479 -26.656624 48.274822
+v 91.755058 -14.122890 48.274822
+v 86.774185 -2.828891 39.346008
+v 86.953056 -3.237905 39.346008
+v 87.396706 -3.287504 39.346008
+v 87.038963 -2.469475 39.346008
+v 87.661491 -2.928088 39.346008
+v 87.482613 -2.519073 39.346008
+v 84.795799 -14.908935 39.346008
+v 84.882454 -15.346860 39.346008
+v 85.305038 -15.490774 39.346008
+v 85.131721 -14.614923 39.346008
+v 85.640961 -15.196764 39.346008
+v 85.554306 -14.758839 39.346008
+v 86.117798 -8.922997 39.346008
+v 86.250755 -9.349156 39.346008
+v 86.686295 -9.447094 39.346008
+v 86.420387 -8.594775 39.346008
+v 86.988884 -9.118873 39.346008
+v 86.855927 -8.692714 39.346008
+v 77.208702 -31.601337 39.346008
+v 77.163956 -32.045506 39.346008
+v 77.526245 -32.306339 39.346008
+v 77.615738 -31.418005 39.346008
+v 77.933281 -32.123009 39.346008
+v 77.978027 -31.678841 39.346008
+v 80.294060 -26.299351 39.346008
+v 80.291130 -26.745758 39.346008
+v 80.676262 -26.971502 39.346008
+v 80.682129 -26.078688 39.346008
+v 81.064331 -26.750839 39.346008
+v 81.067261 -26.304432 39.346008
+v 82.840050 -20.720011 39.346008
+v 82.881126 -21.164536 39.346008
+v 83.286629 -21.351229 39.346008
+v 83.204483 -20.462181 39.346008
+v 83.651062 -21.093397 39.346008
+v 83.609985 -20.648872 39.346008
+v 73.638222 -36.591549 39.346008
+v 73.554222 -37.029995 39.346008
+v 73.891922 -37.321960 39.346008
+v 74.059921 -36.445076 39.346008
+v 74.313629 -37.175484 39.346008
+v 74.397629 -36.737041 39.346008
+v 69.636971 -41.245644 39.346008
+v 69.516441 -41.675484 39.346008
+v 69.828430 -41.994785 39.346008
+v 70.069489 -41.135105 39.346008
+v 70.260948 -41.884243 39.346008
+v 70.381470 -41.454407 39.346008
+v 50.313549 -56.269943 39.346004
+v 50.073143 -56.646099 39.346004
+v 50.278706 -57.042374 39.346004
+v 50.759514 -56.290062 39.346004
+v 50.724667 -57.062492 39.346004
+v 50.965073 -56.686337 39.346004
+v 55.552956 -53.062637 39.346004
+v 55.338860 -53.454365 39.346004
+v 55.571060 -53.835640 39.346004
+v 55.999252 -53.052185 39.346004
+v 56.017353 -53.825191 39.346004
+v 56.231449 -53.433460 39.346004
+v 60.547642 -49.488163 39.346004
+v 60.362179 -49.894234 39.346004
+v 60.621117 -50.257881 39.346004
+v 60.992039 -49.445740 39.346004
+v 61.065514 -50.215458 39.346004
+v 61.250973 -49.809387 39.346004
+v 65.257195 -45.547649 39.346004
+v 65.102875 -45.966549 39.346004
+v 65.388489 -46.309639 39.346004
+v 65.697128 -45.471848 39.346004
+v 65.828423 -46.233837 39.346004
+v 65.982742 -45.814941 39.346004
+v 39.242363 -61.588898 39.346004
+v 38.955597 -61.931030 39.346004
+v 39.108505 -62.350441 39.346004
+v 39.682041 -61.666180 39.346004
+v 39.548183 -62.427723 39.346004
+v 39.834949 -62.085594 39.346004
+v 44.865784 -59.111206 39.346004
+v 44.601215 -59.470776 39.346004
+v 44.780331 -59.879684 39.346004
+v 45.309467 -59.160542 39.346004
+v 45.224014 -59.929024 39.346004
+v 45.488583 -59.569450 39.346004
+v 21.599920 -66.872810 39.346004
+v 21.256786 -67.158379 39.346004
+v 21.332525 -67.598320 39.346004
+v 22.018795 -67.027191 39.346004
+v 21.751400 -67.752701 39.346004
+v 22.094534 -67.467133 39.346004
+v 33.472775 -63.706184 39.346004
+v 33.165607 -64.030128 39.346004
+v 33.292568 -64.458107 39.346004
+v 33.906898 -63.810230 39.346004
+v 33.726692 -64.562149 39.346004
+v 34.033855 -64.238213 39.346004
+v 27.583786 -65.466423 39.346004
+v 27.257875 -65.771492 39.346004
+v 27.359119 -66.206284 39.346004
+v 28.010944 -65.596130 39.346004
+v 27.786276 -66.335991 39.346004
+v 28.112188 -66.030922 39.346004
+v 9.437130 -68.634682 39.346004
+v 9.063722 -68.879333 39.346004
+v 9.088891 -69.325043 39.346004
+v 9.835709 -68.835739 39.346004
+v 9.487470 -69.526100 39.346004
+v 9.860879 -69.281448 39.346004
+v 15.543911 -67.928154 39.346004
+v 15.184973 -68.193581 39.346004
+v 15.235371 -68.637146 39.346004
+v 15.953247 -68.106285 39.346004
+v 15.644706 -68.815277 39.346004
+v 16.003645 -68.549850 39.346004
+v -2.847629 -69.006805 39.346004
+v -3.246208 -69.207863 39.346004
+v -3.271378 -69.653572 39.346004
+v -2.474221 -69.251457 39.346004
+v -2.897969 -69.898224 39.346004
+v -2.499390 -69.697166 39.346004
+v 3.300000 -68.993965 39.346004
+v 2.913391 -69.217171 39.346004
+v 2.913391 -69.663589 39.346004
+v 3.686609 -69.217171 39.346004
+v 3.300000 -69.886795 39.346004
+v 3.686609 -69.663589 39.346004
+v -15.095603 -67.992561 39.346004
+v -15.514477 -68.146942 39.346004
+v -15.590216 -68.586891 39.346004
+v -14.752469 -68.278130 39.346004
+v -15.247082 -68.872452 39.346004
+v -14.828208 -68.718079 39.346004
+v -8.986104 -68.673256 39.346004
+v -9.395440 -68.851387 39.346004
+v -9.445838 -69.294952 39.346004
+v -8.627166 -68.938683 39.346004
+v -9.086900 -69.560379 39.346004
+v -8.677564 -69.382240 39.346004
+v -33.041611 -63.849575 39.346004
+v -33.481285 -63.926857 39.346004
+v -33.634197 -64.346268 39.346004
+v -32.754841 -64.191704 39.346004
+v -33.347427 -64.688400 39.346004
+v -32.907753 -64.611115 39.346004
+v -27.145304 -65.583176 39.346004
+v -27.579428 -65.687225 39.346004
+v -27.706385 -66.115204 39.346004
+v -26.838137 -65.907120 39.346004
+v -27.399220 -66.439148 39.346004
+v -26.965096 -66.335106 39.346004
+v -21.155766 -66.963264 39.346004
+v -21.582922 -67.092972 39.346004
+v -21.684166 -67.527756 39.346004
+v -20.829853 -67.268333 39.346004
+v -21.358253 -67.832832 39.346004
+v -20.931097 -67.703117 39.346004
+v -44.454872 -59.309010 39.346004
+v -44.900837 -59.329124 39.346004
+v -45.106396 -59.725399 39.346004
+v -44.214470 -59.685165 39.346004
+v -44.865993 -60.101559 39.346004
+v -44.420029 -60.081440 39.346004
+v -38.820320 -61.759293 39.346004
+v -39.264004 -61.808632 39.346004
+v -39.443119 -62.217541 39.346004
+v -38.555752 -62.118866 39.346004
+v -39.178551 -62.577110 39.346004
+v -38.734867 -62.527775 39.346004
+v -64.916321 -45.858177 39.346004
+v -65.348839 -45.747639 39.346004
+v -65.660820 -46.066940 39.346004
+v -64.795792 -46.288017 39.346004
+v -65.540291 -46.496777 39.346004
+v -65.107780 -46.607315 39.346004
+v -60.184784 -49.770290 39.346004
+v -60.624718 -49.694485 39.346004
+v -60.910336 -50.037579 39.346004
+v -60.030464 -50.189186 39.346004
+v -60.756016 -50.456474 39.346004
+v -60.316082 -50.532280 39.346004
+v -55.171333 -53.316387 39.346004
+v -55.615730 -53.273968 39.346004
+v -55.874668 -53.637615 39.346004
+v -54.985874 -53.722458 39.346004
+v -55.689209 -54.043686 39.346004
+v -55.244812 -54.086105 39.346004
+v -49.916016 -56.495548 39.346004
+v -50.362309 -56.485096 39.346004
+v -50.594509 -56.866375 39.346004
+v -49.701920 -56.887276 39.346004
+v -50.380413 -57.258102 39.346004
+v -49.934116 -57.268555 39.346004
+v -69.321663 -41.584278 39.346008
+v -69.743362 -41.437801 39.346008
+v -70.081070 -41.729771 39.346008
+v -69.237663 -42.022720 39.346008
+v -69.997070 -42.168213 39.346008
+v -69.575363 -42.314690 39.346008
+v -73.352402 -36.957539 39.346008
+v -73.759438 -36.774204 39.346008
+v -74.121727 -37.035042 39.346008
+v -73.307655 -37.401707 39.346008
+v -74.076981 -37.479210 39.346008
+v -73.669945 -37.662544 39.346008
+v -80.079918 -26.715149 39.346008
+v -80.444351 -26.457317 39.346008
+v -80.849854 -26.644011 39.346008
+v -80.120987 -27.159672 39.346008
+v -80.890930 -27.088533 39.346008
+v -80.526497 -27.346365 39.346008
+v -82.668106 -21.156569 39.346008
+v -83.004028 -20.862558 39.346008
+v -83.426613 -21.006472 39.346008
+v -82.754761 -21.594494 39.346008
+v -83.513275 -21.444397 39.346008
+v -83.177345 -21.738409 39.346008
+v -76.956566 -31.993307 39.346008
+v -77.344635 -31.772644 39.346008
+v -77.729767 -31.998388 39.346008
+v -76.953636 -32.439713 39.346008
+v -77.726837 -32.444794 39.346008
+v -77.338768 -32.665459 39.346008
+v -86.040901 -9.388029 39.346008
+v -86.305679 -9.028613 39.346008
+v -86.749336 -9.078212 39.346008
+v -86.219772 -9.797044 39.346008
+v -86.928207 -9.487226 39.346008
+v -86.663429 -9.846642 39.346008
+v -84.669846 -15.362208 39.346008
+v -84.972435 -15.033987 39.346008
+v -85.407974 -15.131925 39.346008
+v -84.802803 -15.788367 39.346008
+v -85.540932 -15.558084 39.346008
+v -85.238342 -15.886305 39.346008
+v -86.774185 2.828887 39.346008
+v -86.953056 3.237901 39.346008
+v -87.396706 3.287500 39.346008
+v -87.038963 2.469471 39.346008
+v -87.661491 2.928084 39.346008
+v -87.482613 2.519069 39.346008
+v -86.748322 -3.300002 39.346008
+v -86.971527 -2.913393 39.346008
+v -87.417946 -2.913393 39.346008
+v -86.971527 -3.686611 39.346008
+v -87.641151 -3.300002 39.346008
+v -87.417946 -3.686611 39.346008
+v -84.795799 14.908931 39.346008
+v -84.882454 15.346856 39.346008
+v -85.305038 15.490770 39.346008
+v -85.131721 14.614920 39.346008
+v -85.640961 15.196760 39.346008
+v -85.554306 14.758835 39.346008
+v -86.117798 8.922993 39.346008
+v -86.250755 9.349153 39.346008
+v -86.686295 9.447090 39.346008
+v -86.420387 8.594771 39.346008
+v -86.988884 9.118869 39.346008
+v -86.855927 8.692710 39.346008
+v -77.208702 31.601334 39.346008
+v -77.163956 32.045506 39.346008
+v -77.526245 32.306339 39.346008
+v -77.615738 31.418001 39.346008
+v -77.933281 32.123009 39.346008
+v -77.978027 31.678837 39.346008
+v -80.294060 26.299347 39.346008
+v -80.291130 26.745754 39.346008
+v -80.676262 26.971498 39.346008
+v -80.682129 26.078684 39.346008
+v -81.064331 26.750835 39.346008
+v -81.067261 26.304428 39.346008
+v -82.840050 20.720007 39.346008
+v -82.881126 21.164532 39.346008
+v -83.286629 21.351225 39.346008
+v -83.204483 20.462177 39.346008
+v -83.651062 21.093393 39.346008
+v -83.609985 20.648869 39.346008
+v -73.638222 36.591549 39.346008
+v -73.554222 37.029995 39.346008
+v -73.891922 37.321960 39.346008
+v -74.059921 36.445076 39.346008
+v -74.313629 37.175484 39.346008
+v -74.397629 36.737041 39.346008
+v -69.636971 41.245644 39.346008
+v -69.516441 41.675484 39.346008
+v -69.828430 41.994785 39.346008
+v -70.069489 41.135105 39.346008
+v -70.260948 41.884243 39.346008
+v -70.381470 41.454407 39.346008
+v -50.313549 56.269943 39.346012
+v -50.073143 56.646099 39.346012
+v -50.278706 57.042374 39.346012
+v -50.759514 56.290062 39.346012
+v -50.724667 57.062492 39.346012
+v -50.965073 56.686337 39.346012
+v -55.552956 53.062637 39.346012
+v -55.338860 53.454365 39.346012
+v -55.571060 53.835640 39.346012
+v -55.999252 53.052185 39.346012
+v -56.017353 53.825191 39.346012
+v -56.231449 53.433460 39.346012
+v -60.547642 49.488163 39.346012
+v -60.362179 49.894234 39.346012
+v -60.621117 50.257881 39.346012
+v -60.992039 49.445740 39.346012
+v -61.065514 50.215458 39.346012
+v -61.250973 49.809387 39.346012
+v -65.257195 45.547649 39.346012
+v -65.102875 45.966549 39.346012
+v -65.388489 46.309639 39.346012
+v -65.697128 45.471848 39.346012
+v -65.828423 46.233837 39.346012
+v -65.982742 45.814941 39.346012
+v -39.242363 61.588898 39.346012
+v -38.955597 61.931030 39.346012
+v -39.108505 62.350441 39.346012
+v -39.682041 61.666180 39.346012
+v -39.548183 62.427723 39.346012
+v -39.834949 62.085594 39.346012
+v -44.865784 59.111206 39.346012
+v -44.601215 59.470776 39.346012
+v -44.780331 59.879684 39.346012
+v -45.309467 59.160542 39.346012
+v -45.224014 59.929024 39.346012
+v -45.488583 59.569450 39.346012
+v -21.599920 66.872810 39.346012
+v -21.256786 67.158379 39.346012
+v -21.332525 67.598320 39.346012
+v -22.018795 67.027191 39.346012
+v -21.751400 67.752701 39.346012
+v -22.094534 67.467133 39.346012
+v -33.472775 63.706184 39.346012
+v -33.165607 64.030128 39.346012
+v -33.292568 64.458107 39.346012
+v -33.906898 63.810230 39.346012
+v -33.726692 64.562149 39.346012
+v -34.033855 64.238213 39.346012
+v -27.583786 65.466423 39.346012
+v -27.257875 65.771492 39.346012
+v -27.359119 66.206284 39.346012
+v -28.010944 65.596130 39.346012
+v -27.786276 66.335991 39.346012
+v -28.112188 66.030922 39.346012
+v -9.437130 68.634682 39.346012
+v -9.063722 68.879333 39.346012
+v -9.088891 69.325043 39.346012
+v -9.835709 68.835739 39.346012
+v -9.487470 69.526100 39.346012
+v -9.860879 69.281448 39.346012
+v -15.543911 67.928154 39.346012
+v -15.184973 68.193581 39.346012
+v -15.235371 68.637146 39.346012
+v -15.953247 68.106285 39.346012
+v -15.644706 68.815277 39.346012
+v -16.003645 68.549850 39.346012
+v 2.847629 69.006805 39.346012
+v 3.246208 69.207863 39.346012
+v 3.271378 69.653572 39.346012
+v 2.474221 69.251457 39.346012
+v 2.897969 69.898224 39.346012
+v 2.499390 69.697166 39.346012
+v -3.300000 68.993965 39.346012
+v -2.913391 69.217171 39.346012
+v -2.913391 69.663589 39.346012
+v -3.686609 69.217171 39.346012
+v -3.300000 69.886795 39.346012
+v -3.686609 69.663589 39.346012
+v 15.095603 67.992561 39.346012
+v 15.514477 68.146942 39.346012
+v 15.590216 68.586891 39.346012
+v 14.752469 68.278130 39.346012
+v 15.247082 68.872452 39.346012
+v 14.828208 68.718079 39.346012
+v 8.986104 68.673256 39.346012
+v 9.395440 68.851387 39.346012
+v 9.445838 69.294952 39.346012
+v 8.627166 68.938683 39.346012
+v 9.086900 69.560379 39.346012
+v 8.677564 69.382240 39.346012
+v 33.041611 63.849575 39.346012
+v 33.481285 63.926857 39.346012
+v 33.634197 64.346268 39.346012
+v 32.754841 64.191704 39.346012
+v 33.347427 64.688400 39.346012
+v 32.907753 64.611115 39.346012
+v 27.145304 65.583176 39.346012
+v 27.579428 65.687225 39.346012
+v 27.706385 66.115204 39.346012
+v 26.838137 65.907120 39.346012
+v 27.399220 66.439148 39.346012
+v 26.965096 66.335106 39.346012
+v 21.155766 66.963264 39.346012
+v 21.582922 67.092972 39.346012
+v 21.684166 67.527756 39.346012
+v 20.829853 67.268333 39.346012
+v 21.358253 67.832832 39.346012
+v 20.931097 67.703117 39.346012
+v 44.454872 59.309010 39.346012
+v 44.900837 59.329124 39.346012
+v 45.106396 59.725399 39.346012
+v 44.214470 59.685165 39.346012
+v 44.865993 60.101559 39.346012
+v 44.420029 60.081440 39.346012
+v 38.820320 61.759293 39.346012
+v 39.264004 61.808632 39.346012
+v 39.443119 62.217541 39.346012
+v 38.555752 62.118866 39.346012
+v 39.178551 62.577110 39.346012
+v 38.734867 62.527775 39.346012
+v 64.916321 45.858177 39.346012
+v 65.348839 45.747639 39.346012
+v 65.660820 46.066940 39.346012
+v 64.795792 46.288017 39.346012
+v 65.540291 46.496777 39.346012
+v 65.107780 46.607315 39.346012
+v 60.184784 49.770290 39.346012
+v 60.624718 49.694485 39.346012
+v 60.910336 50.037579 39.346012
+v 60.030464 50.189186 39.346012
+v 60.756016 50.456474 39.346012
+v 60.316082 50.532280 39.346012
+v 55.171333 53.316387 39.346012
+v 55.615730 53.273968 39.346012
+v 55.874668 53.637615 39.346012
+v 54.985874 53.722458 39.346012
+v 55.689209 54.043686 39.346012
+v 55.244812 54.086105 39.346012
+v 49.916016 56.495548 39.346012
+v 50.362309 56.485096 39.346012
+v 50.594509 56.866375 39.346012
+v 49.701920 56.887276 39.346012
+v 50.380413 57.258102 39.346012
+v 49.934116 57.268555 39.346012
+v 69.321663 41.584278 39.346008
+v 69.743362 41.437801 39.346008
+v 70.081070 41.729771 39.346008
+v 69.237663 42.022720 39.346008
+v 69.997070 42.168213 39.346008
+v 69.575363 42.314690 39.346008
+v 73.352402 36.957539 39.346008
+v 73.759438 36.774204 39.346008
+v 74.121727 37.035042 39.346008
+v 73.307655 37.401707 39.346008
+v 74.076981 37.479210 39.346008
+v 73.669945 37.662544 39.346008
+v 80.079918 26.715145 39.346008
+v 80.444351 26.457314 39.346008
+v 80.849854 26.644007 39.346008
+v 80.120987 27.159668 39.346008
+v 80.890930 27.088530 39.346008
+v 80.526497 27.346361 39.346008
+v 82.668106 21.156565 39.346008
+v 83.004028 20.862555 39.346008
+v 83.426613 21.006468 39.346008
+v 82.754761 21.594490 39.346008
+v 83.513275 21.444393 39.346008
+v 83.177345 21.738405 39.346008
+v 76.956566 31.993303 39.346008
+v 77.344635 31.772640 39.346008
+v 77.729767 31.998384 39.346008
+v 76.953636 32.439713 39.346008
+v 77.726837 32.444794 39.346008
+v 77.338768 32.665459 39.346008
+v 86.040901 9.388025 39.346008
+v 86.305679 9.028609 39.346008
+v 86.749336 9.078208 39.346008
+v 86.219772 9.797040 39.346008
+v 86.928207 9.487223 39.346008
+v 86.663429 9.846638 39.346008
+v 84.669846 15.362205 39.346008
+v 84.972435 15.033983 39.346008
+v 85.407974 15.131921 39.346008
+v 84.802803 15.788363 39.346008
+v 85.540932 15.558080 39.346008
+v 85.238342 15.886301 39.346008
+v 86.748322 3.299998 39.346008
+v 86.971527 2.913389 39.346008
+v 87.417946 2.913389 39.346008
+v 86.971527 3.686607 39.346008
+v 87.641151 3.299998 39.346008
+v 87.417946 3.686607 39.346008
+v 93.274063 -0.503655 48.832260
+v 91.457047 15.289531 48.832260
+v 86.305145 29.484779 48.832260
+v 78.942131 41.252430 48.832260
+v 70.396507 50.581177 48.832264
+v 58.207840 59.884666 48.832264
+v 44.081921 67.147667 48.832264
+v 24.938196 73.021431 48.832264
+v 3.140965 75.555679 48.832264
+v -15.249976 74.671791 48.832264
+v -36.948601 69.862679 48.832264
+v -54.952732 61.931622 48.832264
+v -70.727165 50.389290 48.832264
+v -82.309273 36.625053 48.832260
+v -89.528076 21.969513 48.832260
+v -92.956276 6.533831 48.832260
+v -92.559654 -9.603173 48.832260
+v -88.467232 -24.656588 48.832260
+v -81.693405 -37.431389 48.832260
+v -73.390442 -47.659477 48.832256
+v -64.353806 -55.639553 48.832256
+v -51.833572 -63.537663 48.832256
+v -37.474033 -69.619499 48.832256
+v -18.066238 -74.255798 48.832256
+v 0.307383 -75.598206 48.832256
+v 22.333014 -73.581161 48.832256
+v 46.832596 -66.044899 48.832256
+v 64.611435 -55.552139 48.832256
+v 78.303215 -42.192638 48.832260
+v 87.683479 -26.656624 48.832260
+v 91.755058 -14.122890 48.832260
+v 87.008118 -3.163163 47.119339
+v 87.359512 -3.202447 47.119339
+v 87.569229 -2.917773 47.119339
+v 87.427551 -2.593815 47.119339
+v 87.076157 -2.554531 47.119339
+v 86.866440 -2.839205 47.119339
+v 84.952309 -15.285719 47.119339
+v 85.287018 -15.399706 47.119339
+v 85.553085 -15.166836 47.119339
+v 85.484451 -14.819980 47.119339
+v 85.149742 -14.705992 47.119339
+v 84.883675 -14.938862 47.119339
+v 86.313675 -9.280901 47.119339
+v 86.658646 -9.358472 47.119339
+v 86.898308 -9.098506 47.119339
+v 86.793007 -8.760968 47.119339
+v 86.448036 -8.683397 47.119339
+v 86.208374 -8.943363 47.119339
+v 77.248604 -32.007381 47.119339
+v 77.535553 -32.213978 47.119339
+v 77.857941 -32.068768 47.119339
+v 77.893387 -31.716965 47.119339
+v 77.606438 -31.510370 47.119339
+v 77.284042 -31.655579 47.119339
+v 80.371826 -26.699871 47.119339
+v 80.676872 -26.878670 47.119339
+v 80.984238 -26.703896 47.119339
+v 80.986565 -26.350321 47.119339
+v 80.681519 -26.171520 47.119339
+v 80.374153 -26.346294 47.119339
+v 82.956909 -21.110918 47.119339
+v 83.278084 -21.258787 47.119339
+v 83.566734 -21.054573 47.119339
+v 83.534203 -20.702490 47.119339
+v 83.213028 -20.554621 47.119339
+v 82.924377 -20.758835 47.119339
+v 73.641914 -36.999538 47.119339
+v 73.909393 -37.230789 47.119339
+v 74.243401 -37.114773 47.119339
+v 74.309929 -36.767506 47.119339
+v 74.042458 -36.536255 47.119339
+v 73.708450 -36.652271 47.119339
+v 69.606384 -41.652500 47.119339
+v 69.853493 -41.905399 47.119339
+v 70.196068 -41.817848 47.119339
+v 70.291527 -41.477398 47.119339
+v 70.044418 -41.224499 47.119339
+v 69.701851 -41.312050 47.119339
+v 50.165886 -56.650288 47.119335
+v 50.328697 -56.964153 47.119335
+v 50.681919 -56.980087 47.119335
+v 50.872334 -56.682156 47.119335
+v 50.709518 -56.368286 47.119335
+v 50.356297 -56.352352 47.119335
+v 55.431667 -53.452194 47.119335
+v 55.615582 -53.754185 47.119335
+v 55.969067 -53.745907 47.119335
+v 56.138641 -53.435638 47.119335
+v 55.954727 -53.133652 47.119335
+v 55.601242 -53.141930 47.119335
+v 60.454594 -49.885414 47.119335
+v 60.659683 -50.173439 47.119335
+v 61.011669 -50.139839 47.119335
+v 61.158562 -49.818214 47.119335
+v 60.953468 -49.530190 47.119335
+v 60.601486 -49.563789 47.119335
+v 65.194359 -45.950787 47.119335
+v 65.420578 -46.222530 47.119335
+v 65.769028 -46.162491 47.119335
+v 65.891258 -45.830708 47.119335
+v 65.665039 -45.558964 47.119335
+v 65.316589 -45.619003 47.119335
+v 39.047028 -61.947102 47.119335
+v 39.168140 -62.279297 47.119335
+v 39.516384 -62.340508 47.119335
+v 39.743519 -62.069527 47.119335
+v 39.622406 -61.737331 47.119335
+v 39.274162 -61.676121 47.119335
+v 44.693481 -59.481041 47.119335
+v 44.835350 -59.804913 47.119335
+v 45.186764 -59.843990 47.119335
+v 45.396317 -59.559193 47.119335
+v 45.254448 -59.235321 47.119335
+v 44.903030 -59.196243 47.119335
+v 21.343893 -67.190475 47.119335
+v 21.403883 -67.538933 47.119335
+v 21.735649 -67.661209 47.119335
+v 22.007427 -67.435036 47.119335
+v 21.947437 -67.086578 47.119335
+v 21.615671 -66.964302 47.119335
+v 33.255886 -64.051765 47.119335
+v 33.356441 -64.390747 47.119335
+v 33.700291 -64.473152 47.119335
+v 33.943577 -64.216576 47.119335
+v 33.843021 -63.877598 47.119335
+v 33.499176 -63.795189 47.119335
+v 27.346704 -65.798470 47.119335
+v 27.426893 -66.142838 47.119335
+v 27.765223 -66.245575 47.119335
+v 28.023359 -66.003944 47.119335
+v 27.943169 -65.659576 47.119335
+v 27.604841 -65.556839 47.119335
+v 9.146607 -68.921143 47.119335
+v 9.166543 -69.274170 47.119335
+v 9.482236 -69.433411 47.119335
+v 9.777992 -69.239639 47.119335
+v 9.758057 -68.886620 47.119335
+v 9.442365 -68.727371 47.119335
+v 15.270096 -68.230621 47.119335
+v 15.310013 -68.581947 47.119335
+v 15.634226 -68.723038 47.119335
+v 15.918521 -68.512810 47.119335
+v 15.878604 -68.161484 47.119335
+v 15.554391 -68.020393 47.119335
+v -3.168556 -69.258736 47.119335
+v -3.188492 -69.611755 47.119335
+v -2.892735 -69.805534 47.119335
+v -2.577042 -69.646286 47.119335
+v -2.557106 -69.293266 47.119335
+v -2.852863 -69.099495 47.119335
+v 2.993788 -69.263588 47.119335
+v 2.993788 -69.617172 47.119335
+v 3.300000 -69.793961 47.119335
+v 3.606212 -69.617172 47.119335
+v 3.606212 -69.263588 47.119335
+v 3.300000 -69.086800 47.119335
+v -15.443120 -68.206329 47.119335
+v -15.503109 -68.554787 47.119335
+v -15.231331 -68.780968 47.119335
+v -14.899565 -68.658691 47.119335
+v -14.839576 -68.310234 47.119335
+v -15.111354 -68.084053 47.119335
+v -9.320797 -68.906586 47.119335
+v -9.360715 -69.257904 47.119335
+v -9.076419 -69.468140 47.119335
+v -8.752207 -69.327049 47.119335
+v -8.712289 -68.975723 47.119335
+v -8.996585 -68.765495 47.119335
+v -33.421654 -63.998009 47.119335
+v -33.542763 -64.330200 47.119335
+v -33.315632 -64.601181 47.119335
+v -32.967388 -64.539970 47.119335
+v -32.846275 -64.207779 47.119335
+v -33.073406 -63.936798 47.119335
+v -27.515551 -65.754585 47.119335
+v -27.616106 -66.093567 47.119335
+v -27.372818 -66.350143 47.119335
+v -27.028973 -66.267738 47.119335
+v -26.928415 -65.928757 47.119335
+v -27.171705 -65.672180 47.119335
+v -21.515146 -67.156418 47.119335
+v -21.595337 -67.500786 47.119335
+v -21.337200 -67.742416 47.119335
+v -20.998873 -67.639679 47.119335
+v -20.918682 -67.295311 47.119335
+v -21.176819 -67.053680 47.119335
+v -44.850845 -59.407352 47.119335
+v -45.013657 -59.721222 47.119335
+v -44.823246 -60.019154 47.119335
+v -44.470020 -60.003220 47.119335
+v -44.307209 -59.689354 47.119335
+v -44.497620 -59.391418 47.119335
+v -39.208984 -61.883411 47.119335
+v -39.350853 -62.207283 47.119335
+v -39.141304 -62.492081 47.119335
+v -38.789886 -62.453003 47.119335
+v -38.648018 -62.129131 47.119335
+v -38.857571 -61.844334 47.119335
+v -65.323769 -45.837029 47.119335
+v -65.570877 -46.089931 47.119335
+v -65.475418 -46.430382 47.119335
+v -65.132843 -46.517933 47.119335
+v -64.885735 -46.265034 47.119335
+v -64.981201 -45.924583 47.119335
+v -60.592628 -49.781601 47.119335
+v -60.818848 -50.053345 47.119335
+v -60.696621 -50.385132 47.119335
+v -60.348171 -50.445171 47.119335
+v -60.121952 -50.173428 47.119335
+v -60.244179 -49.841640 47.119335
+v -55.577164 -53.358414 47.119335
+v -55.782253 -53.646439 47.119335
+v -55.635361 -53.968067 47.119335
+v -55.283379 -54.001667 47.119335
+v -55.078289 -53.713642 47.119335
+v -55.225182 -53.392014 47.119335
+v -50.317787 -56.566563 47.119335
+v -50.501698 -56.868553 47.119335
+v -50.332127 -57.178818 47.119335
+v -49.978642 -57.187096 47.119335
+v -49.794727 -56.885109 47.119335
+v -49.964302 -56.574841 47.119335
+v -69.725899 -41.528984 47.119339
+v -69.993370 -41.760235 47.119339
+v -69.926842 -42.107502 47.119339
+v -69.592834 -42.223518 47.119339
+v -69.325356 -41.992264 47.119339
+v -69.391891 -41.644997 47.119339
+v -73.750130 -36.866577 47.119339
+v -74.037079 -37.073170 47.119339
+v -74.001640 -37.424973 47.119339
+v -73.679245 -37.570179 47.119339
+v -73.392296 -37.363586 47.119339
+v -73.427742 -37.011784 47.119339
+v -80.452888 -26.549757 47.119339
+v -80.774071 -26.697626 47.119339
+v -80.806602 -27.049709 47.119339
+v -80.517952 -27.253923 47.119339
+v -80.196777 -27.106054 47.119339
+v -80.164246 -26.753971 47.119339
+v -83.022049 -20.953627 47.119339
+v -83.356758 -21.067614 47.119339
+v -83.425392 -21.414471 47.119339
+v -83.159325 -21.647341 47.119339
+v -82.824623 -21.533354 47.119339
+v -82.755981 -21.186497 47.119339
+v -77.344025 -31.865477 47.119339
+v -77.649071 -32.044277 47.119339
+v -77.646744 -32.397854 47.119339
+v -77.339378 -32.572628 47.119339
+v -77.034332 -32.393829 47.119339
+v -77.036659 -32.040253 47.119339
+v -86.342880 -9.113668 47.119339
+v -86.694275 -9.152954 47.119339
+v -86.835945 -9.476912 47.119339
+v -86.626228 -9.761585 47.119339
+v -86.274834 -9.722301 47.119339
+v -86.133163 -9.398343 47.119339
+v -85.000084 -15.122608 47.119339
+v -85.345055 -15.200180 47.119339
+v -85.450363 -15.537717 47.119339
+v -85.210693 -15.797683 47.119339
+v -84.865730 -15.720112 47.119339
+v -84.760422 -15.382574 47.119339
+v -87.008118 3.163159 47.119339
+v -87.359512 3.202443 47.119339
+v -87.569229 2.917769 47.119339
+v -87.427551 2.593811 47.119339
+v -87.076157 2.554527 47.119339
+v -86.866440 2.839201 47.119339
+v -87.017944 -2.993790 47.119339
+v -87.371529 -2.993790 47.119339
+v -87.548317 -3.300002 47.119339
+v -87.371529 -3.606214 47.119339
+v -87.017944 -3.606214 47.119339
+v -86.841156 -3.300002 47.119339
+v -84.952309 15.285715 47.119339
+v -85.287018 15.399702 47.119339
+v -85.553085 15.166832 47.119339
+v -85.484451 14.819976 47.119339
+v -85.149742 14.705988 47.119339
+v -84.883675 14.938858 47.119339
+v -86.313675 9.280897 47.119339
+v -86.658646 9.358468 47.119339
+v -86.898308 9.098502 47.119339
+v -86.793007 8.760964 47.119339
+v -86.448036 8.683393 47.119339
+v -86.208374 8.943359 47.119339
+v -77.248604 32.007374 47.119339
+v -77.535553 32.213970 47.119339
+v -77.857941 32.068760 47.119339
+v -77.893387 31.716961 47.119339
+v -77.606438 31.510366 47.119339
+v -77.284042 31.655575 47.119339
+v -80.371826 26.699867 47.119339
+v -80.676872 26.878666 47.119339
+v -80.984238 26.703892 47.119339
+v -80.986565 26.350317 47.119339
+v -80.681519 26.171516 47.119339
+v -80.374153 26.346291 47.119339
+v -82.956909 21.110914 47.119339
+v -83.278084 21.258783 47.119339
+v -83.566734 21.054569 47.119339
+v -83.534203 20.702486 47.119339
+v -83.213028 20.554617 47.119339
+v -82.924377 20.758831 47.119339
+v -73.641914 36.999531 47.119339
+v -73.909393 37.230782 47.119339
+v -74.243401 37.114765 47.119339
+v -74.309929 36.767498 47.119339
+v -74.042458 36.536247 47.119339
+v -73.708450 36.652264 47.119339
+v -69.606384 41.652493 47.119339
+v -69.853493 41.905392 47.119339
+v -70.196068 41.817841 47.119339
+v -70.291527 41.477390 47.119339
+v -70.044418 41.224491 47.119339
+v -69.701851 41.312042 47.119339
+v -50.165886 56.650280 47.119343
+v -50.328697 56.964146 47.119343
+v -50.681919 56.980080 47.119343
+v -50.872334 56.682148 47.119343
+v -50.709518 56.368279 47.119343
+v -50.356297 56.352345 47.119343
+v -55.431667 53.452187 47.119343
+v -55.615582 53.754177 47.119343
+v -55.969067 53.745899 47.119343
+v -56.138641 53.435631 47.119343
+v -55.954727 53.133644 47.119343
+v -55.601242 53.141922 47.119343
+v -60.454594 49.885406 47.119343
+v -60.659683 50.173431 47.119343
+v -61.011669 50.139832 47.119343
+v -61.158562 49.818207 47.119343
+v -60.953468 49.530182 47.119343
+v -60.601486 49.563782 47.119343
+v -65.194359 45.950779 47.119343
+v -65.420578 46.222523 47.119343
+v -65.769028 46.162483 47.119343
+v -65.891258 45.830700 47.119343
+v -65.665039 45.558956 47.119343
+v -65.316589 45.618996 47.119343
+v -39.047028 61.947094 47.119343
+v -39.168140 62.279289 47.119343
+v -39.516384 62.340500 47.119343
+v -39.743519 62.069519 47.119343
+v -39.622406 61.737324 47.119343
+v -39.274162 61.676113 47.119343
+v -44.693481 59.481033 47.119343
+v -44.835350 59.804905 47.119343
+v -45.186764 59.843983 47.119343
+v -45.396317 59.559185 47.119343
+v -45.254448 59.235313 47.119343
+v -44.903030 59.196236 47.119343
+v -21.343893 67.190475 47.119343
+v -21.403883 67.538933 47.119343
+v -21.735649 67.661209 47.119343
+v -22.007427 67.435036 47.119343
+v -21.947437 67.086578 47.119343
+v -21.615671 66.964302 47.119343
+v -33.255886 64.051765 47.119343
+v -33.356441 64.390747 47.119343
+v -33.700291 64.473152 47.119343
+v -33.943577 64.216576 47.119343
+v -33.843021 63.877590 47.119343
+v -33.499176 63.795181 47.119343
+v -27.346704 65.798470 47.119343
+v -27.426893 66.142838 47.119343
+v -27.765223 66.245575 47.119343
+v -28.023359 66.003944 47.119343
+v -27.943169 65.659576 47.119343
+v -27.604841 65.556839 47.119343
+v -9.146607 68.921143 47.119343
+v -9.166543 69.274170 47.119343
+v -9.482236 69.433411 47.119343
+v -9.777992 69.239639 47.119343
+v -9.758057 68.886620 47.119343
+v -9.442365 68.727371 47.119343
+v -15.270096 68.230621 47.119343
+v -15.310013 68.581947 47.119343
+v -15.634226 68.723038 47.119343
+v -15.918521 68.512810 47.119343
+v -15.878604 68.161484 47.119343
+v -15.554391 68.020393 47.119343
+v 3.168556 69.258736 47.119343
+v 3.188492 69.611755 47.119343
+v 2.892735 69.805534 47.119343
+v 2.577042 69.646286 47.119343
+v 2.557106 69.293266 47.119343
+v 2.852863 69.099495 47.119343
+v -2.993788 69.263588 47.119343
+v -2.993788 69.617172 47.119343
+v -3.300000 69.793961 47.119343
+v -3.606212 69.617172 47.119343
+v -3.606212 69.263588 47.119343
+v -3.300000 69.086800 47.119343
+v 15.443120 68.206329 47.119343
+v 15.503109 68.554787 47.119343
+v 15.231331 68.780968 47.119343
+v 14.899565 68.658691 47.119343
+v 14.839576 68.310234 47.119343
+v 15.111354 68.084053 47.119343
+v 9.320797 68.906586 47.119343
+v 9.360715 69.257904 47.119343
+v 9.076419 69.468140 47.119343
+v 8.752207 69.327049 47.119343
+v 8.712289 68.975723 47.119343
+v 8.996585 68.765495 47.119343
+v 33.421654 63.998001 47.119343
+v 33.542763 64.330200 47.119343
+v 33.315632 64.601181 47.119343
+v 32.967388 64.539970 47.119343
+v 32.846275 64.207779 47.119343
+v 33.073406 63.936790 47.119343
+v 27.515551 65.754585 47.119343
+v 27.616106 66.093567 47.119343
+v 27.372818 66.350143 47.119343
+v 27.028973 66.267738 47.119343
+v 26.928415 65.928757 47.119343
+v 27.171705 65.672180 47.119343
+v 21.515146 67.156418 47.119343
+v 21.595337 67.500786 47.119343
+v 21.337200 67.742416 47.119343
+v 20.998873 67.639679 47.119343
+v 20.918682 67.295311 47.119343
+v 21.176819 67.053680 47.119343
+v 44.850845 59.407345 47.119343
+v 45.013657 59.721214 47.119343
+v 44.823246 60.019146 47.119343
+v 44.470020 60.003212 47.119343
+v 44.307209 59.689346 47.119343
+v 44.497620 59.391411 47.119343
+v 39.208984 61.883404 47.119343
+v 39.350853 62.207275 47.119343
+v 39.141304 62.492073 47.119343
+v 38.789886 62.452995 47.119343
+v 38.648018 62.129124 47.119343
+v 38.857571 61.844326 47.119343
+v 65.323769 45.837021 47.119343
+v 65.570877 46.089924 47.119343
+v 65.475418 46.430374 47.119343
+v 65.132843 46.517925 47.119343
+v 64.885735 46.265026 47.119343
+v 64.981201 45.924576 47.119343
+v 60.592628 49.781593 47.119343
+v 60.818848 50.053337 47.119343
+v 60.696621 50.385124 47.119343
+v 60.348171 50.445164 47.119343
+v 60.121952 50.173420 47.119343
+v 60.244179 49.841633 47.119343
+v 55.577164 53.358406 47.119343
+v 55.782253 53.646431 47.119343
+v 55.635361 53.968060 47.119343
+v 55.283379 54.001659 47.119343
+v 55.078289 53.713634 47.119343
+v 55.225182 53.392006 47.119343
+v 50.317787 56.566555 47.119343
+v 50.501698 56.868546 47.119343
+v 50.332127 57.178810 47.119343
+v 49.978642 57.187088 47.119343
+v 49.794727 56.885101 47.119343
+v 49.964302 56.574833 47.119343
+v 69.725899 41.528976 47.119339
+v 69.993370 41.760227 47.119339
+v 69.926842 42.107494 47.119339
+v 69.592834 42.223511 47.119339
+v 69.325356 41.992256 47.119339
+v 69.391891 41.644989 47.119339
+v 73.750130 36.866570 47.119339
+v 74.037079 37.073162 47.119339
+v 74.001640 37.424965 47.119339
+v 73.679245 37.570171 47.119339
+v 73.392296 37.363579 47.119339
+v 73.427742 37.011776 47.119339
+v 80.452888 26.549753 47.119339
+v 80.774071 26.697622 47.119339
+v 80.806602 27.049706 47.119339
+v 80.517952 27.253920 47.119339
+v 80.196777 27.106050 47.119339
+v 80.164246 26.753967 47.119339
+v 83.022049 20.953623 47.119339
+v 83.356758 21.067610 47.119339
+v 83.425392 21.414467 47.119339
+v 83.159325 21.647337 47.119339
+v 82.824623 21.533350 47.119339
+v 82.755981 21.186493 47.119339
+v 77.344025 31.865473 47.119339
+v 77.649071 32.044270 47.119339
+v 77.646744 32.397846 47.119339
+v 77.339378 32.572620 47.119339
+v 77.034332 32.393822 47.119339
+v 77.036659 32.040245 47.119339
+v 86.342880 9.113665 47.119339
+v 86.694275 9.152950 47.119339
+v 86.835945 9.476908 47.119339
+v 86.626228 9.761581 47.119339
+v 86.274834 9.722298 47.119339
+v 86.133163 9.398339 47.119339
+v 85.000084 15.122604 47.119339
+v 85.345055 15.200176 47.119339
+v 85.450363 15.537713 47.119339
+v 85.210693 15.797679 47.119339
+v 84.865730 15.720108 47.119339
+v 84.760422 15.382570 47.119339
+v 87.017944 2.993786 47.119339
+v 87.371529 2.993786 47.119339
+v 87.548317 3.299998 47.119339
+v 87.371529 3.606210 47.119339
+v 87.017944 3.606210 47.119339
+v 86.841156 3.299998 47.119339
+v 92.983047 -0.501422 49.286438
+v 91.165878 15.255690 49.286438
+v 86.015556 29.413723 49.286438
+v 78.657532 41.144871 49.286438
+v 70.119690 50.440666 49.286442
+v 57.942253 59.707764 49.286442
+v 43.826012 66.938477 49.286442
+v 24.688494 72.776421 49.286442
+v 2.893382 75.270805 49.286442
+v -15.453626 74.353157 49.286442
+v -37.141876 69.492386 49.286442
+v -55.087662 61.519173 49.286442
+v -70.826370 49.896843 49.286442
+v -82.339622 36.040405 49.286438
+v -89.448013 21.310961 49.286438
+v -92.728256 5.849030 49.286438
+v -92.166862 -10.241255 49.286438
+v -87.939598 -25.179745 49.286438
+v -81.084557 -37.810783 49.286438
+v -72.745399 -47.902561 49.286434
+v -63.697880 -55.768806 49.286434
+v -51.177448 -63.549324 49.286434
+v -36.819752 -69.530617 49.286434
+v -17.410839 -74.057861 49.286434
+v 0.922249 -75.304733 49.286434
+v 22.940304 -73.170876 49.286434
+v 47.416260 -65.461182 49.286434
+v 65.114349 -54.796791 49.286434
+v 78.708359 -41.202892 49.286438
+v 87.121864 -27.205042 49.286438
+v 91.387421 -14.436687 49.286438
+v 86.665382 -3.319842 47.119339
+v 86.776482 -2.326033 47.119339
+v 87.659187 -3.430945 47.119339
+v 87.770294 -2.437137 47.119339
+v 84.583885 -15.364965 47.119339
+v 84.906265 -14.418355 47.119339
+v 85.530495 -15.687344 47.119339
+v 85.852875 -14.740732 47.119339
+v 85.955826 -9.399060 47.119339
+v 86.175217 -8.423423 47.119339
+v 86.931465 -9.618447 47.119339
+v 87.150856 -8.642809 47.119339
+v 76.873077 -31.975801 47.119339
+v 77.457367 -31.164255 47.119339
+v 77.684624 -32.560093 47.119339
+v 78.268913 -31.748545 47.119339
+v 79.994995 -26.703615 47.119339
+v 80.500679 -25.840895 47.119339
+v 80.857712 -27.209295 47.119339
+v 81.363396 -26.346575 47.119339
+v 82.582275 -21.151781 47.119339
+v 83.000481 -20.243425 47.119339
+v 83.490631 -21.569983 47.119339
+v 83.908836 -20.661629 47.119339
+v 73.270676 -36.934746 47.119339
+v 73.924698 -36.178272 47.119339
+v 74.027145 -37.588772 47.119339
+v 74.681175 -36.832298 47.119339
+v 69.241898 -41.556759 47.119339
+v 69.957146 -40.857891 47.119339
+v 69.940765 -42.272007 47.119339
+v 70.656013 -41.573139 47.119339
+v 49.845036 -56.452614 47.119335
+v 50.732716 -55.992149 47.119335
+v 50.305500 -57.340294 47.119335
+v 51.193180 -56.879829 47.119335
+v 55.098045 -53.276943 47.119335
+v 55.952126 -52.756805 47.119335
+v 55.618183 -54.131027 47.119335
+v 56.472263 -53.610889 47.119335
+v 60.109264 -49.734535 47.119335
+v 60.923855 -49.154503 47.119335
+v 60.689297 -50.549126 47.119335
+v 61.503891 -49.969093 47.119335
+v 64.838638 -45.826370 47.119335
+v 65.607185 -45.186577 47.119335
+v 65.478432 -46.594917 47.119335
+v 66.246979 -45.955124 47.119335
+v 38.754257 -61.709824 47.119335
+v 39.693764 -61.367298 47.119335
+v 39.096783 -62.649334 47.119335
+v 40.036289 -62.306805 47.119335
+v 44.386295 -59.262741 47.119335
+v 45.302277 -58.861515 47.119335
+v 44.787521 -60.178719 47.119335
+v 45.703503 -59.777493 47.119335
+v 21.098080 -66.904831 47.119335
+v 22.083582 -66.735176 47.119335
+v 21.267738 -67.890335 47.119335
+v 22.253241 -67.720680 47.119335
+v 32.978184 -63.797016 47.119335
+v 33.936890 -63.512623 47.119335
+v 33.262577 -64.755722 47.119335
+v 34.221283 -64.471329 47.119335
+v 27.084663 -65.527634 47.119335
+v 28.058605 -65.300842 47.119335
+v 27.311457 -66.501572 47.119335
+v 28.285400 -66.274780 47.119335
+v 8.934904 -68.609375 47.119335
+v 9.933313 -68.552994 47.119335
+v 8.991286 -69.607788 47.119335
+v 9.989696 -69.551407 47.119335
+v 15.041058 -67.931358 47.119335
+v 16.034664 -67.818466 47.119335
+v 15.153952 -68.924965 47.119335
+v 16.147558 -68.812073 47.119335
+v -3.343812 -68.925117 47.119335
+v -2.345403 -68.981499 47.119335
+v -3.400195 -69.923531 47.119335
+v -2.401786 -69.979912 47.119335
+v 2.800000 -68.940384 47.119335
+v 3.800000 -68.940384 47.119335
+v 2.800000 -69.940384 47.119335
+v 3.800000 -69.940384 47.119335
+v -15.579264 -67.854927 47.119335
+v -14.593761 -68.024590 47.119335
+v -15.748923 -68.840431 47.119335
+v -14.763421 -69.010094 47.119335
+v -9.476858 -68.563568 47.119335
+v -8.483252 -68.676460 47.119335
+v -9.589752 -69.557175 47.119335
+v -8.596146 -69.670067 47.119335
+v -33.493011 -63.627975 47.119335
+v -32.553501 -63.970501 47.119335
+v -33.835537 -64.567474 47.119335
+v -32.896030 -64.910004 47.119335
+v -27.609419 -65.389610 47.119335
+v -26.650711 -65.674004 47.119335
+v -27.893812 -66.348320 47.119335
+v -26.935104 -66.632713 47.119335
+v -21.630583 -66.797676 47.119335
+v -20.656641 -67.024475 47.119335
+v -21.857378 -67.771622 47.119335
+v -20.883434 -67.998413 47.119335
+v -44.874039 -59.031216 47.119335
+v -43.986362 -59.491680 47.119335
+v -45.334503 -59.918892 47.119335
+v -44.446827 -60.379356 47.119335
+v -39.256813 -61.509605 47.119335
+v -38.340832 -61.910831 47.119335
+v -39.658039 -62.425583 47.119335
+v -38.742058 -62.826809 47.119335
+v -65.236496 -45.470421 47.119335
+v -64.521248 -46.169292 47.119335
+v -65.935364 -46.185673 47.119335
+v -65.220116 -46.884541 47.119335
+v -60.534775 -49.409218 47.119335
+v -59.766232 -50.049011 47.119335
+v -61.174572 -50.177761 47.119335
+v -60.406025 -50.817558 47.119335
+v -55.547550 -52.982727 47.119335
+v -54.732956 -53.562763 47.119335
+v -56.127583 -53.797321 47.119335
+v -55.312992 -54.377354 47.119335
+v -50.315186 -56.189720 47.119335
+v -49.461102 -56.709858 47.119335
+v -50.835323 -57.043800 47.119335
+v -49.981243 -57.563938 47.119335
+v -69.608139 -41.171001 47.119339
+v -68.954117 -41.927475 47.119339
+v -70.364616 -41.825024 47.119339
+v -69.710594 -42.581497 47.119339
+v -73.601059 -36.520462 47.119339
+v -73.016769 -37.332008 47.119339
+v -74.412605 -37.104748 47.119339
+v -73.828316 -37.916294 47.119339
+v -80.240349 -26.238564 47.119339
+v -79.822144 -27.146917 47.119339
+v -81.148697 -26.656765 47.119339
+v -80.730499 -27.565119 47.119339
+v -82.778572 -20.665989 47.119339
+v -82.456192 -21.612600 47.119339
+v -83.725182 -20.988367 47.119339
+v -83.402809 -21.934977 47.119339
+v -77.163185 -31.534851 47.119339
+v -76.657501 -32.397572 47.119339
+v -78.025902 -32.040535 47.119339
+v -77.520218 -32.903255 47.119339
+v -86.043198 -8.885172 47.119339
+v -85.932098 -9.878981 47.119339
+v -87.037010 -8.996275 47.119339
+v -86.925903 -9.990084 47.119339
+v -84.727264 -14.862634 47.119339
+v -84.507881 -15.838272 47.119339
+v -85.702904 -15.082020 47.119339
+v -85.483513 -16.057657 47.119339
+v -86.665382 3.319838 47.119339
+v -86.776482 2.326029 47.119339
+v -87.659187 3.430941 47.119339
+v -87.770294 2.437133 47.119339
+v -86.694740 -2.800002 47.119339
+v -86.694740 -3.800002 47.119339
+v -87.694740 -2.800002 47.119339
+v -87.694740 -3.800002 47.119339
+v -84.583885 15.364962 47.119339
+v -84.906265 14.418351 47.119339
+v -85.530495 15.687340 47.119339
+v -85.852875 14.740728 47.119339
+v -85.955826 9.399056 47.119339
+v -86.175217 8.423419 47.119339
+v -86.931465 9.618443 47.119339
+v -87.150856 8.642805 47.119339
+v -76.873077 31.975798 47.119339
+v -77.457367 31.164251 47.119339
+v -77.684624 32.560085 47.119339
+v -78.268913 31.748541 47.119339
+v -79.994995 26.703611 47.119339
+v -80.500679 25.840891 47.119339
+v -80.857712 27.209291 47.119339
+v -81.363396 26.346571 47.119339
+v -82.582275 21.151777 47.119339
+v -83.000481 20.243422 47.119339
+v -83.490631 21.569979 47.119339
+v -83.908836 20.661625 47.119339
+v -73.270676 36.934738 47.119339
+v -73.924698 36.178265 47.119339
+v -74.027145 37.588764 47.119339
+v -74.681175 36.832291 47.119339
+v -69.241898 41.556751 47.119339
+v -69.957146 40.857883 47.119339
+v -69.940765 42.271999 47.119339
+v -70.656013 41.573132 47.119339
+v -49.845036 56.452606 47.119343
+v -50.732716 55.992142 47.119343
+v -50.305500 57.340286 47.119343
+v -51.193180 56.879822 47.119343
+v -55.098045 53.276936 47.119343
+v -55.952126 52.756798 47.119343
+v -55.618183 54.131020 47.119343
+v -56.472263 53.610882 47.119343
+v -60.109264 49.734528 47.119343
+v -60.923855 49.154495 47.119343
+v -60.689297 50.549118 47.119343
+v -61.503891 49.969086 47.119343
+v -64.838638 45.826363 47.119343
+v -65.607185 45.186569 47.119343
+v -65.478432 46.594910 47.119343
+v -66.246979 45.955116 47.119343
+v -38.754257 61.709816 47.119343
+v -39.693764 61.367290 47.119343
+v -39.096783 62.649326 47.119343
+v -40.036289 62.306797 47.119343
+v -44.386295 59.262733 47.119343
+v -45.302277 58.861507 47.119343
+v -44.787521 60.178711 47.119343
+v -45.703503 59.777485 47.119343
+v -21.098080 66.904831 47.119343
+v -22.083582 66.735176 47.119343
+v -21.267738 67.890335 47.119343
+v -22.253241 67.720680 47.119343
+v -32.978184 63.797009 47.119343
+v -33.936890 63.512615 47.119343
+v -33.262577 64.755722 47.119343
+v -34.221283 64.471329 47.119343
+v -27.084663 65.527634 47.119343
+v -28.058605 65.300842 47.119343
+v -27.311457 66.501572 47.119343
+v -28.285400 66.274780 47.119343
+v -8.934904 68.609375 47.119343
+v -9.933313 68.552994 47.119343
+v -8.991286 69.607788 47.119343
+v -9.989696 69.551407 47.119343
+v -15.041058 67.931358 47.119343
+v -16.034664 67.818466 47.119343
+v -15.153952 68.924965 47.119343
+v -16.147558 68.812073 47.119343
+v 3.343812 68.925117 47.119343
+v 2.345403 68.981499 47.119343
+v 3.400195 69.923531 47.119343
+v 2.401786 69.979912 47.119343
+v -2.800000 68.940384 47.119343
+v -3.800000 68.940384 47.119343
+v -2.800000 69.940384 47.119343
+v -3.800000 69.940384 47.119343
+v 15.579264 67.854927 47.119343
+v 14.593761 68.024590 47.119343
+v 15.748923 68.840431 47.119343
+v 14.763421 69.010094 47.119343
+v 9.476858 68.563568 47.119343
+v 8.483252 68.676460 47.119343
+v 9.589752 69.557175 47.119343
+v 8.596146 69.670067 47.119343
+v 33.493011 63.627968 47.119343
+v 32.553501 63.970493 47.119343
+v 33.835537 64.567474 47.119343
+v 32.896030 64.910004 47.119343
+v 27.609419 65.389610 47.119343
+v 26.650711 65.674004 47.119343
+v 27.893812 66.348320 47.119343
+v 26.935104 66.632713 47.119343
+v 21.630583 66.797676 47.119343
+v 20.656641 67.024475 47.119343
+v 21.857378 67.771622 47.119343
+v 20.883434 67.998413 47.119343
+v 44.874039 59.031208 47.119343
+v 43.986362 59.491673 47.119343
+v 45.334503 59.918884 47.119343
+v 44.446827 60.379349 47.119343
+v 39.256813 61.509598 47.119343
+v 38.340832 61.910824 47.119343
+v 39.658039 62.425575 47.119343
+v 38.742058 62.826801 47.119343
+v 65.236496 45.470413 47.119343
+v 64.521248 46.169285 47.119343
+v 65.935364 46.185665 47.119343
+v 65.220116 46.884533 47.119343
+v 60.534775 49.409210 47.119343
+v 59.766232 50.049004 47.119343
+v 61.174572 50.177753 47.119343
+v 60.406025 50.817551 47.119343
+v 55.547550 52.982719 47.119343
+v 54.732956 53.562756 47.119343
+v 56.127583 53.797314 47.119343
+v 55.312992 54.377346 47.119343
+v 50.315186 56.189713 47.119343
+v 49.461102 56.709850 47.119343
+v 50.835323 57.043793 47.119343
+v 49.981243 57.563931 47.119343
+v 69.608139 41.170994 47.119339
+v 68.954117 41.927467 47.119339
+v 70.364616 41.825016 47.119339
+v 69.710594 42.581490 47.119339
+v 73.601059 36.520454 47.119339
+v 73.016769 37.332001 47.119339
+v 74.412605 37.104740 47.119339
+v 73.828316 37.916286 47.119339
+v 80.240349 26.238560 47.119339
+v 79.822144 27.146914 47.119339
+v 81.148697 26.656761 47.119339
+v 80.730499 27.565115 47.119339
+v 82.778572 20.665985 47.119339
+v 82.456192 21.612597 47.119339
+v 83.725182 20.988363 47.119339
+v 83.402809 21.934973 47.119339
+v 77.163185 31.534847 47.119339
+v 76.657501 32.397564 47.119339
+v 78.025902 32.040527 47.119339
+v 77.520218 32.903248 47.119339
+v 86.043198 8.885168 47.119339
+v 85.932098 9.878977 47.119339
+v 87.037010 8.996271 47.119339
+v 86.925903 9.990080 47.119339
+v 84.727264 14.862630 47.119339
+v 84.507881 15.838268 47.119339
+v 85.702904 15.082016 47.119339
+v 85.483513 16.057653 47.119339
+v 86.694740 2.799998 47.119339
+v 86.694740 3.799998 47.119339
+v 87.694740 2.799998 47.119339
+v 87.694740 3.799998 47.119339
+v 87.921043 -0.462572 49.286438
+v 86.101273 14.653769 49.286438
+v 80.979561 28.152256 49.286438
+v 73.710190 39.240643 49.286438
+v 65.306656 47.961121 49.286442
+v 53.314751 56.597141 49.286442
+v 39.346409 63.266785 49.286442
+v 20.285006 68.470474 49.286442
+v 2.732554 70.211082 49.286442
+v -19.067137 68.716972 49.286442
+v -43.194633 61.794147 49.286442
+v -59.969681 52.335716 49.286442
+v -73.275826 39.894463 49.286438
+v -81.644333 26.962234 49.286438
+v -86.695076 12.177416 49.286438
+v -87.868279 -2.484934 49.286438
+v -85.891045 -15.468655 49.286438
+v -81.476402 -27.172853 49.286438
+v -75.387634 -37.079479 49.286438
+v -68.320839 -45.166119 49.286434
+v -58.137810 -53.525875 49.286434
+v -46.200912 -60.358025 49.286434
+v -29.879826 -66.329941 49.286434
+v -11.163266 -69.708878 49.286434
+v 6.437806 -70.077553 49.286434
+v 28.193104 -66.827789 49.286434
+v 45.381126 -60.825470 49.286434
+v 62.066853 -50.753868 49.286434
+v 74.051140 -38.938984 49.286438
+v 82.317551 -25.541594 49.286438
+v 86.395691 -13.559460 49.286438
+v 86.776482 -2.326033 47.419338
+v 86.665382 -3.319842 47.419338
+v 87.770294 -2.437137 47.419338
+v 87.659187 -3.430945 47.419338
+v 84.906265 -14.418355 47.419338
+v 84.583885 -15.364965 47.419338
+v 85.852875 -14.740732 47.419338
+v 85.530495 -15.687344 47.419338
+v 86.175217 -8.423423 47.419338
+v 85.955826 -9.399060 47.419338
+v 87.150856 -8.642809 47.419338
+v 86.931465 -9.618447 47.419338
+v 77.457367 -31.164255 47.419338
+v 76.873077 -31.975801 47.419338
+v 78.268913 -31.748545 47.419338
+v 77.684624 -32.560093 47.419338
+v 80.500679 -25.840895 47.419338
+v 79.994995 -26.703615 47.419338
+v 81.363396 -26.346575 47.419338
+v 80.857712 -27.209295 47.419338
+v 83.000481 -20.243425 47.419338
+v 82.582275 -21.151781 47.419338
+v 83.908836 -20.661629 47.419338
+v 83.490631 -21.569983 47.419338
+v 73.924698 -36.178272 47.419338
+v 73.270676 -36.934746 47.419338
+v 74.681175 -36.832298 47.419338
+v 74.027145 -37.588772 47.419338
+v 69.957146 -40.857891 47.419338
+v 69.241898 -41.556759 47.419338
+v 70.656013 -41.573139 47.419338
+v 69.940765 -42.272007 47.419338
+v 50.732716 -55.992149 47.419334
+v 49.845036 -56.452614 47.419334
+v 51.193180 -56.879829 47.419334
+v 50.305500 -57.340294 47.419334
+v 55.952126 -52.756805 47.419334
+v 55.098045 -53.276943 47.419334
+v 56.472263 -53.610889 47.419334
+v 55.618183 -54.131027 47.419334
+v 60.923855 -49.154503 47.419334
+v 60.109264 -49.734535 47.419334
+v 61.503891 -49.969093 47.419334
+v 60.689297 -50.549126 47.419334
+v 65.607185 -45.186577 47.419334
+v 64.838638 -45.826370 47.419334
+v 66.246979 -45.955124 47.419334
+v 65.478432 -46.594917 47.419334
+v 39.693764 -61.367298 47.419334
+v 38.754257 -61.709824 47.419334
+v 40.036289 -62.306805 47.419334
+v 39.096783 -62.649334 47.419334
+v 45.302277 -58.861515 47.419334
+v 44.386295 -59.262741 47.419334
+v 45.703503 -59.777493 47.419334
+v 44.787521 -60.178719 47.419334
+v 22.083582 -66.735176 47.419334
+v 21.098080 -66.904831 47.419334
+v 22.253241 -67.720680 47.419334
+v 21.267738 -67.890335 47.419334
+v 33.936890 -63.512623 47.419334
+v 32.978184 -63.797016 47.419334
+v 34.221283 -64.471329 47.419334
+v 33.262577 -64.755722 47.419334
+v 28.058605 -65.300842 47.419334
+v 27.084663 -65.527634 47.419334
+v 28.285400 -66.274780 47.419334
+v 27.311457 -66.501572 47.419334
+v 9.933313 -68.552994 47.419334
+v 8.934904 -68.609375 47.419334
+v 9.989696 -69.551407 47.419334
+v 8.991286 -69.607788 47.419334
+v 16.034664 -67.818466 47.419334
+v 15.041058 -67.931358 47.419334
+v 16.147558 -68.812073 47.419334
+v 15.153952 -68.924965 47.419334
+v -2.345403 -68.981499 47.419334
+v -3.343812 -68.925117 47.419334
+v -2.401786 -69.979912 47.419334
+v -3.400195 -69.923531 47.419334
+v 3.800000 -68.940384 47.419334
+v 2.800000 -68.940384 47.419334
+v 3.800000 -69.940384 47.419334
+v 2.800000 -69.940384 47.419334
+v -14.593761 -68.024590 47.419334
+v -15.579264 -67.854927 47.419334
+v -14.763421 -69.010094 47.419334
+v -15.748923 -68.840431 47.419334
+v -8.483252 -68.676460 47.419334
+v -9.476858 -68.563568 47.419334
+v -8.596146 -69.670067 47.419334
+v -9.589752 -69.557175 47.419334
+v -32.553501 -63.970501 47.419334
+v -33.493011 -63.627975 47.419334
+v -32.896030 -64.910004 47.419334
+v -33.835537 -64.567474 47.419334
+v -26.650711 -65.674004 47.419334
+v -27.609419 -65.389610 47.419334
+v -26.935104 -66.632713 47.419334
+v -27.893812 -66.348320 47.419334
+v -20.656641 -67.024475 47.419334
+v -21.630583 -66.797676 47.419334
+v -20.883434 -67.998413 47.419334
+v -21.857378 -67.771622 47.419334
+v -43.986362 -59.491680 47.419334
+v -44.874039 -59.031216 47.419334
+v -44.446827 -60.379356 47.419334
+v -45.334503 -59.918892 47.419334
+v -38.340832 -61.910831 47.419334
+v -39.256813 -61.509605 47.419334
+v -38.742058 -62.826809 47.419334
+v -39.658039 -62.425583 47.419334
+v -64.521248 -46.169292 47.419334
+v -65.236496 -45.470421 47.419334
+v -65.220116 -46.884541 47.419334
+v -65.935364 -46.185673 47.419334
+v -59.766232 -50.049011 47.419334
+v -60.534775 -49.409218 47.419334
+v -60.406025 -50.817558 47.419334
+v -61.174572 -50.177761 47.419334
+v -54.732956 -53.562763 47.419334
+v -55.547550 -52.982727 47.419334
+v -55.312992 -54.377354 47.419334
+v -56.127583 -53.797321 47.419334
+v -49.461102 -56.709858 47.419334
+v -50.315186 -56.189720 47.419334
+v -49.981243 -57.563938 47.419334
+v -50.835323 -57.043800 47.419334
+v -68.954117 -41.927475 47.419338
+v -69.608139 -41.171001 47.419338
+v -69.710594 -42.581497 47.419338
+v -70.364616 -41.825024 47.419338
+v -73.016769 -37.332008 47.419338
+v -73.601059 -36.520462 47.419338
+v -73.828316 -37.916294 47.419338
+v -74.412605 -37.104748 47.419338
+v -79.822144 -27.146917 47.419338
+v -80.240349 -26.238564 47.419338
+v -80.730499 -27.565119 47.419338
+v -81.148697 -26.656765 47.419338
+v -82.456192 -21.612600 47.419338
+v -82.778572 -20.665989 47.419338
+v -83.402809 -21.934977 47.419338
+v -83.725182 -20.988367 47.419338
+v -76.657501 -32.397572 47.419338
+v -77.163185 -31.534851 47.419338
+v -77.520218 -32.903255 47.419338
+v -78.025902 -32.040535 47.419338
+v -85.932098 -9.878981 47.419338
+v -86.043198 -8.885172 47.419338
+v -86.925903 -9.990084 47.419338
+v -87.037010 -8.996275 47.419338
+v -84.507881 -15.838272 47.419338
+v -84.727264 -14.862634 47.419338
+v -85.483513 -16.057657 47.419338
+v -85.702904 -15.082020 47.419338
+v -86.776482 2.326029 47.419338
+v -86.665382 3.319838 47.419338
+v -87.770294 2.437133 47.419338
+v -87.659187 3.430941 47.419338
+v -86.694740 -3.800002 47.419338
+v -86.694740 -2.800002 47.419338
+v -87.694740 -3.800002 47.419338
+v -87.694740 -2.800002 47.419338
+v -84.906265 14.418351 47.419338
+v -84.583885 15.364962 47.419338
+v -85.852875 14.740728 47.419338
+v -85.530495 15.687340 47.419338
+v -86.175217 8.423419 47.419338
+v -85.955826 9.399056 47.419338
+v -87.150856 8.642805 47.419338
+v -86.931465 9.618443 47.419338
+v -77.457367 31.164251 47.419338
+v -76.873077 31.975798 47.419338
+v -78.268913 31.748541 47.419338
+v -77.684624 32.560085 47.419338
+v -80.500679 25.840891 47.419338
+v -79.994995 26.703611 47.419338
+v -81.363396 26.346571 47.419338
+v -80.857712 27.209291 47.419338
+v -83.000481 20.243422 47.419338
+v -82.582275 21.151777 47.419338
+v -83.908836 20.661625 47.419338
+v -83.490631 21.569979 47.419338
+v -73.924698 36.178265 47.419338
+v -73.270676 36.934738 47.419338
+v -74.681175 36.832291 47.419338
+v -74.027145 37.588764 47.419338
+v -69.957146 40.857883 47.419338
+v -69.241898 41.556751 47.419338
+v -70.656013 41.573132 47.419338
+v -69.940765 42.271999 47.419338
+v -50.732716 55.992142 47.419342
+v -49.845036 56.452606 47.419342
+v -51.193180 56.879822 47.419342
+v -50.305500 57.340286 47.419342
+v -55.952126 52.756798 47.419342
+v -55.098045 53.276936 47.419342
+v -56.472263 53.610882 47.419342
+v -55.618183 54.131020 47.419342
+v -60.923855 49.154495 47.419342
+v -60.109264 49.734528 47.419342
+v -61.503891 49.969086 47.419342
+v -60.689297 50.549118 47.419342
+v -65.607185 45.186569 47.419342
+v -64.838638 45.826363 47.419342
+v -66.246979 45.955116 47.419342
+v -65.478432 46.594910 47.419342
+v -39.693764 61.367290 47.419342
+v -38.754257 61.709816 47.419342
+v -40.036289 62.306797 47.419342
+v -39.096783 62.649326 47.419342
+v -45.302277 58.861507 47.419342
+v -44.386295 59.262733 47.419342
+v -45.703503 59.777485 47.419342
+v -44.787521 60.178711 47.419342
+v -22.083582 66.735176 47.419342
+v -21.098080 66.904831 47.419342
+v -22.253241 67.720680 47.419342
+v -21.267738 67.890335 47.419342
+v -33.936890 63.512615 47.419342
+v -32.978184 63.797009 47.419342
+v -34.221283 64.471329 47.419342
+v -33.262577 64.755722 47.419342
+v -28.058605 65.300842 47.419342
+v -27.084663 65.527634 47.419342
+v -28.285400 66.274780 47.419342
+v -27.311457 66.501572 47.419342
+v -9.933313 68.552994 47.419342
+v -8.934904 68.609375 47.419342
+v -9.989696 69.551407 47.419342
+v -8.991286 69.607788 47.419342
+v -16.034664 67.818466 47.419342
+v -15.041058 67.931358 47.419342
+v -16.147558 68.812073 47.419342
+v -15.153952 68.924965 47.419342
+v 2.345403 68.981499 47.419342
+v 3.343812 68.925117 47.419342
+v 2.401786 69.979912 47.419342
+v 3.400195 69.923531 47.419342
+v -3.800000 68.940384 47.419342
+v -2.800000 68.940384 47.419342
+v -3.800000 69.940384 47.419342
+v -2.800000 69.940384 47.419342
+v 14.593761 68.024590 47.419342
+v 15.579264 67.854927 47.419342
+v 14.763421 69.010094 47.419342
+v 15.748923 68.840431 47.419342
+v 8.483252 68.676460 47.419342
+v 9.476858 68.563568 47.419342
+v 8.596146 69.670067 47.419342
+v 9.589752 69.557175 47.419342
+v 32.553501 63.970493 47.419342
+v 33.493011 63.627968 47.419342
+v 32.896030 64.910004 47.419342
+v 33.835537 64.567474 47.419342
+v 26.650711 65.674004 47.419342
+v 27.609419 65.389610 47.419342
+v 26.935104 66.632713 47.419342
+v 27.893812 66.348320 47.419342
+v 20.656641 67.024475 47.419342
+v 21.630583 66.797676 47.419342
+v 20.883434 67.998413 47.419342
+v 21.857378 67.771622 47.419342
+v 43.986362 59.491673 47.419342
+v 44.874039 59.031208 47.419342
+v 44.446827 60.379349 47.419342
+v 45.334503 59.918884 47.419342
+v 38.340832 61.910824 47.419342
+v 39.256813 61.509598 47.419342
+v 38.742058 62.826801 47.419342
+v 39.658039 62.425575 47.419342
+v 64.521248 46.169285 47.419342
+v 65.236496 45.470413 47.419342
+v 65.220116 46.884533 47.419342
+v 65.935364 46.185665 47.419342
+v 59.766232 50.049004 47.419342
+v 60.534775 49.409210 47.419342
+v 60.406025 50.817551 47.419342
+v 61.174572 50.177753 47.419342
+v 54.732956 53.562756 47.419342
+v 55.547550 52.982719 47.419342
+v 55.312992 54.377346 47.419342
+v 56.127583 53.797314 47.419342
+v 49.461102 56.709850 47.419342
+v 50.315186 56.189713 47.419342
+v 49.981243 57.563931 47.419342
+v 50.835323 57.043793 47.419342
+v 68.954117 41.927467 47.419338
+v 69.608139 41.170994 47.419338
+v 69.710594 42.581490 47.419338
+v 70.364616 41.825016 47.419338
+v 73.016769 37.332001 47.419338
+v 73.601059 36.520454 47.419338
+v 73.828316 37.916286 47.419338
+v 74.412605 37.104740 47.419338
+v 79.822144 27.146914 47.419338
+v 80.240349 26.238560 47.419338
+v 80.730499 27.565115 47.419338
+v 81.148697 26.656761 47.419338
+v 82.456192 21.612597 47.419338
+v 82.778572 20.665985 47.419338
+v 83.402809 21.934973 47.419338
+v 83.725182 20.988363 47.419338
+v 76.657501 32.397564 47.419338
+v 77.163185 31.534847 47.419338
+v 77.520218 32.903248 47.419338
+v 78.025902 32.040527 47.419338
+v 85.932098 9.878977 47.419338
+v 86.043198 8.885168 47.419338
+v 86.925903 9.990080 47.419338
+v 87.037010 8.996271 47.419338
+v 84.507881 15.838268 47.419338
+v 84.727264 14.862630 47.419338
+v 85.483513 16.057653 47.419338
+v 85.702904 15.082016 47.419338
+v 86.694740 3.799998 47.419338
+v 86.694740 2.799998 47.419338
+v 87.694740 3.799998 47.419338
+v 87.694740 2.799998 47.419338
+v 87.603249 -0.460133 48.832268
+v 85.783318 14.615106 48.832268
+v 80.663483 28.071392 48.832268
+v 73.399765 39.118938 48.832268
+v 65.004555 47.803185 48.832272
+v 53.023567 56.399723 48.832272
+v 39.063068 63.034153 48.832272
+v 20.004288 68.197174 48.832272
+v 2.497623 69.898598 48.832272
+v -19.298763 68.356636 48.832272
+v -43.407795 61.356514 48.832272
+v -60.107311 51.841091 48.832272
+v -73.352875 39.299427 48.832268
+v -81.622917 26.276159 48.832268
+v -86.518860 11.432999 48.832268
+v -87.514679 -3.214102 48.832268
+v -85.386032 -16.114588 48.832268
+v -80.859581 -27.690897 48.832268
+v -74.704948 -37.458206 48.832268
+v -67.606567 -45.417202 48.832264
+v -57.409115 -53.637634 48.832264
+v -45.468143 -60.349945 48.832264
+v -29.141951 -66.198509 48.832264
+v -10.418418 -69.458588 48.832264
+v 7.136874 -69.719963 48.832264
+v 28.764334 -66.354027 48.832264
+v 45.883278 -60.242630 48.832264
+v 62.476810 -50.025314 48.832264
+v 74.368538 -38.020405 48.832268
+v 82.463196 -24.440210 48.832268
+v 86.208633 -12.940502 48.832268
+v 87.168144 -2.872934 47.419338
+v 87.188179 -2.918745 47.419338
+v 87.237869 -2.924300 47.419338
+v 87.197800 -2.832678 47.419338
+v 87.267525 -2.884045 47.419338
+v 87.247490 -2.838234 47.419338
+v 85.171051 -15.036730 47.419338
+v 85.180756 -15.085779 47.419338
+v 85.228088 -15.101898 47.419338
+v 85.208672 -15.003799 47.419338
+v 85.265709 -15.068968 47.419338
+v 85.256004 -15.019918 47.419338
+v 86.504562 -9.009965 47.419338
+v 86.519447 -9.057696 47.419338
+v 86.568230 -9.068666 47.419338
+v 86.538452 -8.973204 47.419338
+v 86.602119 -9.031904 47.419338
+v 86.587234 -8.984173 47.419338
+v 77.530418 -31.832958 47.419338
+v 77.525406 -31.882708 47.419338
+v 77.565979 -31.911921 47.419338
+v 77.576004 -31.812426 47.419338
+v 77.611572 -31.891388 47.419338
+v 77.616585 -31.841639 47.419338
+v 80.636063 -26.499811 47.419338
+v 80.635735 -26.549810 47.419338
+v 80.678864 -26.575094 47.419338
+v 80.679527 -26.475096 47.419338
+v 80.722328 -26.550379 47.419338
+v 80.722664 -26.500380 47.419338
+v 83.200142 -20.885794 47.419338
+v 83.204735 -20.935581 47.419338
+v 83.250153 -20.956491 47.419338
+v 83.240959 -20.856916 47.419338
+v 83.290977 -20.927614 47.419338
+v 83.286377 -20.877827 47.419338
+v 73.938103 -36.850819 47.419338
+v 73.928688 -36.899929 47.419338
+v 73.966515 -36.932629 47.419338
+v 73.985329 -36.834415 47.419338
+v 74.013748 -36.916222 47.419338
+v 74.023155 -36.867115 47.419338
+v 69.914017 -41.529186 47.419338
+v 69.900513 -41.577328 47.419338
+v 69.935455 -41.613091 47.419338
+v 69.962456 -41.516804 47.419338
+v 69.983902 -41.600712 47.419338
+v 69.997398 -41.552567 47.419338
+v 50.496086 -56.621838 47.419334
+v 50.469158 -56.663967 47.419334
+v 50.492184 -56.708351 47.419334
+v 50.546036 -56.624092 47.419334
+v 50.542130 -56.710606 47.419334
+v 50.569057 -56.668476 47.419334
+v 55.759148 -53.401211 47.419334
+v 55.735168 -53.445087 47.419334
+v 55.761177 -53.487793 47.419334
+v 55.809135 -53.400043 47.419334
+v 55.811161 -53.486622 47.419334
+v 55.835140 -53.442745 47.419334
+v 60.777576 -49.811085 47.419334
+v 60.756805 -49.856567 47.419334
+v 60.785805 -49.897297 47.419334
+v 60.827351 -49.806332 47.419334
+v 60.835579 -49.892544 47.419334
+v 60.856350 -49.847061 47.419334
+v 65.510818 -45.852322 47.419334
+v 65.493530 -45.899239 47.419334
+v 65.525520 -45.937664 47.419334
+v 65.560089 -45.843830 47.419334
+v 65.574799 -45.929176 47.419334
+v 65.592079 -45.882256 47.419334
+v 39.378147 -61.961338 47.419334
+v 39.346027 -61.999660 47.419334
+v 39.363155 -62.046635 47.419334
+v 39.427391 -61.969994 47.419334
+v 39.412399 -62.055290 47.419334
+v 39.444519 -62.016972 47.419334
+v 45.024837 -59.474319 47.419334
+v 44.995205 -59.514591 47.419334
+v 45.015266 -59.560390 47.419334
+v 45.074532 -59.479843 47.419334
+v 45.064960 -59.565914 47.419334
+v 45.094593 -59.525642 47.419334
+v 21.667177 -67.263481 47.419334
+v 21.628746 -67.295464 47.419334
+v 21.637228 -67.344742 47.419334
+v 21.714092 -67.280769 47.419334
+v 21.684143 -67.362030 47.419334
+v 21.722574 -67.330048 47.419334
+v 33.585514 -64.086235 47.419334
+v 33.551109 -64.122513 47.419334
+v 33.565331 -64.170448 47.419334
+v 33.634136 -64.097885 47.419334
+v 33.613953 -64.182106 47.419334
+v 33.648357 -64.145821 47.419334
+v 27.673693 -65.852509 47.419334
+v 27.637188 -65.886681 47.419334
+v 27.648529 -65.935379 47.419334
+v 27.721535 -65.867035 47.419334
+v 27.696371 -65.949905 47.419334
+v 27.732874 -65.915733 47.419334
+v 9.459481 -69.030472 47.419334
+v 9.417658 -69.057869 47.419334
+v 9.420477 -69.107796 47.419334
+v 9.504123 -69.052986 47.419334
+v 9.465119 -69.130310 47.419334
+v 9.506942 -69.102913 47.419334
+v 15.588664 -68.322037 47.419334
+v 15.548462 -68.351761 47.419334
+v 15.554107 -68.401443 47.419334
+v 15.634511 -68.341988 47.419334
+v 15.599953 -68.421394 47.419334
+v 15.640155 -68.391670 47.419334
+v -2.869980 -69.402596 47.419334
+v -2.914622 -69.425110 47.419334
+v -2.917441 -69.475029 47.419334
+v -2.828157 -69.429993 47.419334
+v -2.875618 -69.502434 47.419334
+v -2.830976 -69.479912 47.419334
+v 3.300000 -69.390381 47.419334
+v 3.256699 -69.415382 47.419334
+v 3.256699 -69.465378 47.419334
+v 3.343301 -69.415382 47.419334
+v 3.300000 -69.490379 47.419334
+v 3.343301 -69.465378 47.419334
+v -15.162859 -68.383232 47.419334
+v -15.209774 -68.400528 47.419334
+v -15.218257 -68.449799 47.419334
+v -15.124428 -68.415222 47.419334
+v -15.179826 -68.481789 47.419334
+v -15.132911 -68.464493 47.419334
+v -9.030857 -69.067139 47.419334
+v -9.076704 -69.087090 47.419334
+v -9.082349 -69.136765 47.419334
+v -8.990655 -69.096863 47.419334
+v -9.042147 -69.166496 47.419334
+v -8.996300 -69.146545 47.419334
+v -33.177395 -64.222015 47.419334
+v -33.226639 -64.230667 47.419334
+v -33.243763 -64.277641 47.419334
+v -33.145275 -64.260330 47.419334
+v -33.211647 -64.315964 47.419334
+v -33.162399 -64.307304 47.419334
+v -27.258041 -65.963226 47.419334
+v -27.306665 -65.974884 47.419334
+v -27.320885 -66.022820 47.419334
+v -27.223639 -65.999512 47.419334
+v -27.286480 -66.059097 47.419334
+v -27.237858 -66.047447 47.419334
+v -21.245670 -67.349350 47.419334
+v -21.293512 -67.363876 47.419334
+v -21.304852 -67.412575 47.419334
+v -21.209166 -67.383522 47.419334
+v -21.268349 -67.446747 47.419334
+v -21.220507 -67.432213 47.419334
+v -44.637409 -59.660904 47.419334
+v -44.687359 -59.663155 47.419334
+v -44.710381 -59.707539 47.419334
+v -44.610485 -59.703033 47.419334
+v -44.683456 -59.749672 47.419334
+v -44.633507 -59.747417 47.419334
+v -38.979374 -62.122410 47.419334
+v -39.029068 -62.127934 47.419334
+v -39.049129 -62.173733 47.419334
+v -38.949741 -62.162682 47.419334
+v -39.019497 -62.214005 47.419334
+v -38.969803 -62.208481 47.419334
+v -65.193367 -46.141720 47.419334
+v -65.241806 -46.129337 47.419334
+v -65.276749 -46.165100 47.419334
+v -65.179863 -46.189861 47.419334
+v -65.263252 -46.213245 47.419334
+v -65.214806 -46.225624 47.419334
+v -60.438412 -50.074959 47.419334
+v -60.487682 -50.066467 47.419334
+v -60.519672 -50.104897 47.419334
+v -60.421127 -50.121876 47.419334
+v -60.502388 -50.151814 47.419334
+v -60.453117 -50.160305 47.419334
+v -55.401268 -53.639313 47.419334
+v -55.451042 -53.634560 47.419334
+v -55.480045 -53.675289 47.419334
+v -55.380497 -53.684792 47.419334
+v -55.459270 -53.720772 47.419334
+v -55.409496 -53.725521 47.419334
+v -50.122208 -56.834126 47.419334
+v -50.172192 -56.832954 47.419334
+v -50.198200 -56.875660 47.419334
+v -50.098228 -56.877998 47.419334
+v -50.174221 -56.919533 47.419334
+v -50.124233 -56.920704 47.419334
+v -69.621544 -41.843548 47.419338
+v -69.668777 -41.827145 47.419338
+v -69.706596 -41.859844 47.419338
+v -69.612137 -41.892654 47.419338
+v -69.697189 -41.908951 47.419338
+v -69.649956 -41.925358 47.419338
+v -73.674110 -37.189163 47.419338
+v -73.719704 -37.168629 47.419338
+v -73.760277 -37.197845 47.419338
+v -73.669098 -37.238911 47.419338
+v -73.755264 -37.247593 47.419338
+v -73.709679 -37.268127 47.419338
+v -80.440002 -26.880930 47.419338
+v -80.480820 -26.852053 47.419338
+v -80.526237 -26.872963 47.419338
+v -80.444603 -26.930719 47.419338
+v -80.530838 -26.922750 47.419338
+v -80.490021 -26.951630 47.419338
+v -83.043358 -21.284365 47.419338
+v -83.080986 -21.251434 47.419338
+v -83.128311 -21.267553 47.419338
+v -83.053062 -21.333412 47.419338
+v -83.138023 -21.316603 47.419338
+v -83.100395 -21.349531 47.419338
+v -77.298569 -32.193768 47.419338
+v -77.342033 -32.169056 47.419338
+v -77.385162 -32.194340 47.419338
+v -77.298233 -32.243767 47.419338
+v -77.384834 -32.244339 47.419338
+v -77.341370 -32.269051 47.419338
+v -86.434860 -9.432073 47.419338
+v -86.464523 -9.391817 47.419338
+v -86.514214 -9.397372 47.419338
+v -86.454895 -9.477883 47.419338
+v -86.534241 -9.443183 47.419338
+v -86.504585 -9.483438 47.419338
+v -85.056610 -15.449177 47.419338
+v -85.090500 -15.412415 47.419338
+v -85.139282 -15.423384 47.419338
+v -85.071503 -15.496907 47.419338
+v -85.154175 -15.471115 47.419338
+v -85.120285 -15.507875 47.419338
+v -87.168144 2.872930 47.419338
+v -87.188179 2.918741 47.419338
+v -87.237869 2.924296 47.419338
+v -87.197800 2.832674 47.419338
+v -87.267525 2.884041 47.419338
+v -87.247490 2.838230 47.419338
+v -87.144737 -3.300002 47.419338
+v -87.169739 -3.256701 47.419338
+v -87.219734 -3.256701 47.419338
+v -87.169739 -3.343303 47.419338
+v -87.244736 -3.300002 47.419338
+v -87.219734 -3.343303 47.419338
+v -85.171051 15.036726 47.419338
+v -85.180756 15.085775 47.419338
+v -85.228088 15.101894 47.419338
+v -85.208672 15.003796 47.419338
+v -85.265709 15.068964 47.419338
+v -85.256004 15.019915 47.419338
+v -86.504562 9.009961 47.419338
+v -86.519447 9.057693 47.419338
+v -86.568230 9.068662 47.419338
+v -86.538452 8.973200 47.419338
+v -86.602119 9.031900 47.419338
+v -86.587234 8.984169 47.419338
+v -77.530418 31.832954 47.419338
+v -77.525406 31.882704 47.419338
+v -77.565979 31.911917 47.419338
+v -77.576004 31.812422 47.419338
+v -77.611572 31.891384 47.419338
+v -77.616585 31.841635 47.419338
+v -80.636063 26.499807 47.419338
+v -80.635735 26.549807 47.419338
+v -80.678864 26.575090 47.419338
+v -80.679527 26.475092 47.419338
+v -80.722328 26.550375 47.419338
+v -80.722664 26.500376 47.419338
+v -83.200142 20.885790 47.419338
+v -83.204735 20.935577 47.419338
+v -83.250153 20.956488 47.419338
+v -83.240959 20.856913 47.419338
+v -83.290977 20.927610 47.419338
+v -83.286377 20.877823 47.419338
+v -73.938103 36.850811 47.419338
+v -73.928688 36.899921 47.419338
+v -73.966515 36.932621 47.419338
+v -73.985329 36.834408 47.419338
+v -74.013748 36.916214 47.419338
+v -74.023155 36.867107 47.419338
+v -69.914017 41.529179 47.419338
+v -69.900513 41.577320 47.419338
+v -69.935455 41.613083 47.419338
+v -69.962456 41.516796 47.419338
+v -69.983902 41.600704 47.419338
+v -69.997398 41.552559 47.419338
+v -50.496086 56.621830 47.419342
+v -50.469158 56.663960 47.419342
+v -50.492184 56.708344 47.419342
+v -50.546036 56.624084 47.419342
+v -50.542130 56.710598 47.419342
+v -50.569057 56.668468 47.419342
+v -55.759148 53.401203 47.419342
+v -55.735168 53.445080 47.419342
+v -55.761177 53.487785 47.419342
+v -55.809135 53.400036 47.419342
+v -55.811161 53.486614 47.419342
+v -55.835140 53.442738 47.419342
+v -60.777576 49.811077 47.419342
+v -60.756805 49.856560 47.419342
+v -60.785805 49.897289 47.419342
+v -60.827351 49.806324 47.419342
+v -60.835579 49.892536 47.419342
+v -60.856350 49.847054 47.419342
+v -65.510818 45.852314 47.419342
+v -65.493530 45.899231 47.419342
+v -65.525520 45.937656 47.419342
+v -65.560089 45.843822 47.419342
+v -65.574799 45.929169 47.419342
+v -65.592079 45.882248 47.419342
+v -39.378147 61.961330 47.419342
+v -39.346027 61.999653 47.419342
+v -39.363155 62.046627 47.419342
+v -39.427391 61.969986 47.419342
+v -39.412399 62.055283 47.419342
+v -39.444519 62.016964 47.419342
+v -45.024837 59.474312 47.419342
+v -44.995205 59.514584 47.419342
+v -45.015266 59.560383 47.419342
+v -45.074532 59.479836 47.419342
+v -45.064960 59.565907 47.419342
+v -45.094593 59.525635 47.419342
+v -21.667177 67.263481 47.419342
+v -21.628746 67.295464 47.419342
+v -21.637228 67.344742 47.419342
+v -21.714092 67.280769 47.419342
+v -21.684143 67.362030 47.419342
+v -21.722574 67.330048 47.419342
+v -33.585514 64.086235 47.419342
+v -33.551109 64.122513 47.419342
+v -33.565331 64.170448 47.419342
+v -33.634136 64.097885 47.419342
+v -33.613953 64.182106 47.419342
+v -33.648357 64.145821 47.419342
+v -27.673693 65.852509 47.419342
+v -27.637188 65.886681 47.419342
+v -27.648529 65.935379 47.419342
+v -27.721535 65.867035 47.419342
+v -27.696371 65.949905 47.419342
+v -27.732874 65.915733 47.419342
+v -9.459481 69.030472 47.419342
+v -9.417658 69.057869 47.419342
+v -9.420477 69.107796 47.419342
+v -9.504123 69.052986 47.419342
+v -9.465119 69.130310 47.419342
+v -9.506942 69.102913 47.419342
+v -15.588664 68.322037 47.419342
+v -15.548462 68.351761 47.419342
+v -15.554107 68.401443 47.419342
+v -15.634511 68.341988 47.419342
+v -15.599953 68.421394 47.419342
+v -15.640155 68.391670 47.419342
+v 2.869980 69.402596 47.419342
+v 2.914622 69.425110 47.419342
+v 2.917441 69.475029 47.419342
+v 2.828157 69.429993 47.419342
+v 2.875618 69.502434 47.419342
+v 2.830976 69.479912 47.419342
+v -3.300000 69.390381 47.419342
+v -3.256699 69.415382 47.419342
+v -3.256699 69.465378 47.419342
+v -3.343301 69.415382 47.419342
+v -3.300000 69.490379 47.419342
+v -3.343301 69.465378 47.419342
+v 15.162859 68.383232 47.419342
+v 15.209774 68.400528 47.419342
+v 15.218257 68.449799 47.419342
+v 15.124428 68.415222 47.419342
+v 15.179826 68.481789 47.419342
+v 15.132911 68.464493 47.419342
+v 9.030857 69.067139 47.419342
+v 9.076704 69.087090 47.419342
+v 9.082349 69.136765 47.419342
+v 8.990655 69.096863 47.419342
+v 9.042147 69.166496 47.419342
+v 8.996300 69.146545 47.419342
+v 33.177395 64.222015 47.419342
+v 33.226639 64.230667 47.419342
+v 33.243763 64.277641 47.419342
+v 33.145275 64.260330 47.419342
+v 33.211647 64.315964 47.419342
+v 33.162399 64.307304 47.419342
+v 27.258041 65.963226 47.419342
+v 27.306665 65.974884 47.419342
+v 27.320885 66.022820 47.419342
+v 27.223639 65.999512 47.419342
+v 27.286480 66.059097 47.419342
+v 27.237858 66.047447 47.419342
+v 21.245670 67.349350 47.419342
+v 21.293512 67.363876 47.419342
+v 21.304852 67.412575 47.419342
+v 21.209166 67.383522 47.419342
+v 21.268349 67.446747 47.419342
+v 21.220507 67.432213 47.419342
+v 44.637409 59.660896 47.419342
+v 44.687359 59.663147 47.419342
+v 44.710381 59.707531 47.419342
+v 44.610485 59.703026 47.419342
+v 44.683456 59.749664 47.419342
+v 44.633507 59.747410 47.419342
+v 38.979374 62.122402 47.419342
+v 39.029068 62.127926 47.419342
+v 39.049129 62.173725 47.419342
+v 38.949741 62.162674 47.419342
+v 39.019497 62.213997 47.419342
+v 38.969803 62.208473 47.419342
+v 65.193367 46.141712 47.419342
+v 65.241806 46.129330 47.419342
+v 65.276749 46.165092 47.419342
+v 65.179863 46.189854 47.419342
+v 65.263252 46.213238 47.419342
+v 65.214806 46.225616 47.419342
+v 60.438412 50.074951 47.419342
+v 60.487682 50.066460 47.419342
+v 60.519672 50.104889 47.419342
+v 60.421127 50.121868 47.419342
+v 60.502388 50.151806 47.419342
+v 60.453117 50.160297 47.419342
+v 55.401268 53.639305 47.419342
+v 55.451042 53.634552 47.419342
+v 55.480045 53.675282 47.419342
+v 55.380497 53.684784 47.419342
+v 55.459270 53.720764 47.419342
+v 55.409496 53.725513 47.419342
+v 50.122208 56.834118 47.419342
+v 50.172192 56.832947 47.419342
+v 50.198200 56.875652 47.419342
+v 50.098228 56.877991 47.419342
+v 50.174221 56.919525 47.419342
+v 50.124233 56.920696 47.419342
+v 69.621544 41.843540 47.419338
+v 69.668777 41.827137 47.419338
+v 69.706596 41.859837 47.419338
+v 69.612137 41.892647 47.419338
+v 69.697189 41.908943 47.419338
+v 69.649956 41.925350 47.419338
+v 73.674110 37.189156 47.419338
+v 73.719704 37.168621 47.419338
+v 73.760277 37.197838 47.419338
+v 73.669098 37.238903 47.419338
+v 73.755264 37.247585 47.419338
+v 73.709679 37.268120 47.419338
+v 80.440002 26.880926 47.419338
+v 80.480820 26.852049 47.419338
+v 80.526237 26.872959 47.419338
+v 80.444603 26.930716 47.419338
+v 80.530838 26.922747 47.419338
+v 80.490021 26.951626 47.419338
+v 83.043358 21.284361 47.419338
+v 83.080986 21.251431 47.419338
+v 83.128311 21.267550 47.419338
+v 83.053062 21.333408 47.419338
+v 83.138023 21.316599 47.419338
+v 83.100395 21.349527 47.419338
+v 77.298569 32.193760 47.419338
+v 77.342033 32.169048 47.419338
+v 77.385162 32.194332 47.419338
+v 77.298233 32.243759 47.419338
+v 77.384834 32.244331 47.419338
+v 77.341370 32.269043 47.419338
+v 86.434860 9.432069 47.419338
+v 86.464523 9.391813 47.419338
+v 86.514214 9.397368 47.419338
+v 86.454895 9.477880 47.419338
+v 86.534241 9.443179 47.419338
+v 86.504585 9.483435 47.419338
+v 85.056610 15.449173 47.419338
+v 85.090500 15.412411 47.419338
+v 85.139282 15.423380 47.419338
+v 85.071503 15.496903 47.419338
+v 85.154175 15.471111 47.419338
+v 85.120285 15.507872 47.419338
+v 87.144737 3.299998 47.419338
+v 87.169739 3.256697 47.419338
+v 87.219734 3.256697 47.419338
+v 87.169739 3.343299 47.419338
+v 87.244736 3.299998 47.419338
+v 87.219734 3.343299 47.419338
+v 87.603249 -0.460133 47.440170
+v 85.783318 14.615106 47.440170
+v 80.663483 28.071392 47.440170
+v 73.399765 39.118938 47.440170
+v 65.004555 47.803185 47.440174
+v 53.023567 56.399723 47.440174
+v 39.063068 63.034153 47.440174
+v 20.004288 68.197174 47.440174
+v 2.497623 69.898598 47.440174
+v -19.298763 68.356636 47.440174
+v -43.407795 61.356514 47.440174
+v -60.107311 51.841091 47.440174
+v -73.352875 39.299427 47.440170
+v -81.622917 26.276159 47.440170
+v -86.518860 11.432999 47.440170
+v -87.514679 -3.214102 47.440170
+v -85.386032 -16.114588 47.440170
+v -80.859581 -27.690897 47.440170
+v -74.704948 -37.458206 47.440170
+v -67.606567 -45.417202 47.440166
+v -57.409115 -53.637634 47.440166
+v -45.468143 -60.349945 47.440166
+v -29.141951 -66.198509 47.440166
+v -10.418418 -69.458588 47.440166
+v 7.136874 -69.719963 47.440166
+v 28.764334 -66.354027 47.440166
+v 45.883278 -60.242630 47.440166
+v 62.476810 -50.025314 47.440166
+v 74.368538 -38.020405 47.440170
+v 82.463196 -24.440210 47.440170
+v 86.208633 -12.940502 47.440170
+v 87.168144 -2.872934 47.440170
+v 87.188179 -2.918745 47.440170
+v 87.197800 -2.832678 47.440170
+v 87.247490 -2.838234 47.440170
+v 87.267525 -2.884045 47.440170
+v 87.237869 -2.924300 47.440170
+v 85.171051 -15.036730 47.440170
+v 85.180756 -15.085779 47.440170
+v 85.208672 -15.003799 47.440170
+v 85.256004 -15.019918 47.440170
+v 85.265709 -15.068968 47.440170
+v 85.228088 -15.101898 47.440170
+v 86.504562 -9.009965 47.440170
+v 86.519447 -9.057696 47.440170
+v 86.538452 -8.973204 47.440170
+v 86.587234 -8.984173 47.440170
+v 86.602119 -9.031904 47.440170
+v 86.568230 -9.068666 47.440170
+v 77.530418 -31.832958 47.719337
+v 77.525406 -31.882708 47.719337
+v 77.576004 -31.812426 47.719337
+v 77.616585 -31.841639 47.719337
+v 77.615845 -31.848957 47.719337
+v 77.611572 -31.891388 47.541565
+v 77.565979 -31.911921 47.719337
+v 77.581154 -31.905087 47.719337
+v 80.636063 -26.499811 47.440170
+v 80.635735 -26.549810 47.440170
+v 80.679527 -26.475096 47.440170
+v 80.722664 -26.500380 47.440170
+v 80.722328 -26.550379 47.440170
+v 80.678864 -26.575094 47.440170
+v 83.200142 -20.885794 47.440170
+v 83.204735 -20.935581 47.440170
+v 83.240959 -20.856916 47.440170
+v 83.286377 -20.877827 47.440170
+v 83.290977 -20.927614 47.440170
+v 83.250153 -20.956491 47.440170
+v 73.938103 -36.850819 47.719337
+v 73.928688 -36.899929 47.719337
+v 73.985329 -36.834415 47.719337
+v 74.023155 -36.867115 47.719337
+v 74.013748 -36.916222 47.719337
+v 73.966515 -36.932629 47.719337
+v 69.914017 -41.529186 47.719337
+v 69.900513 -41.577328 47.719337
+v 69.962456 -41.516804 47.719337
+v 69.997398 -41.552567 47.719337
+v 69.983902 -41.600712 47.719337
+v 69.935455 -41.613091 47.719337
+v 50.496086 -56.621838 47.719334
+v 50.469158 -56.663967 47.719334
+v 50.546036 -56.624092 47.719334
+v 50.569057 -56.668476 47.719334
+v 50.542130 -56.710606 47.719334
+v 50.492184 -56.708351 47.719334
+v 55.759148 -53.401211 47.719334
+v 55.735168 -53.445087 47.719334
+v 55.809135 -53.400043 47.719334
+v 55.835140 -53.442745 47.719334
+v 55.811161 -53.486622 47.719334
+v 55.761177 -53.487793 47.719334
+v 60.777576 -49.811085 47.719334
+v 60.756805 -49.856567 47.719334
+v 60.827351 -49.806332 47.719334
+v 60.856350 -49.847061 47.719334
+v 60.835579 -49.892544 47.719334
+v 60.785805 -49.897297 47.719334
+v 65.510818 -45.852322 47.719334
+v 65.493530 -45.899239 47.719334
+v 65.560089 -45.843830 47.719334
+v 65.592079 -45.882256 47.719334
+v 65.574799 -45.929176 47.719334
+v 65.525520 -45.937664 47.719334
+v 39.378147 -61.961338 47.719334
+v 39.346027 -61.999660 47.719334
+v 39.427391 -61.969994 47.719334
+v 39.444519 -62.016972 47.719334
+v 39.412399 -62.055290 47.719334
+v 39.363155 -62.046635 47.719334
+v 45.024837 -59.474319 47.719334
+v 44.995205 -59.514591 47.719334
+v 45.074532 -59.479843 47.719334
+v 45.094593 -59.525642 47.719334
+v 45.064960 -59.565914 47.719334
+v 45.015266 -59.560390 47.719334
+v 21.667177 -67.263481 47.440166
+v 21.628746 -67.295464 47.440166
+v 21.714092 -67.280769 47.440166
+v 21.722574 -67.330048 47.440166
+v 21.684143 -67.362030 47.440166
+v 21.637228 -67.344742 47.440166
+v 33.585514 -64.086235 47.719334
+v 33.551109 -64.122513 47.556953
+v 33.575199 -64.097115 47.719334
+v 33.599339 -64.089546 47.719334
+v 33.634136 -64.097885 47.544342
+v 33.637245 -64.108376 47.440166
+v 33.648357 -64.145821 47.440166
+v 33.613953 -64.182106 47.440166
+v 33.565331 -64.170448 47.440166
+v 33.554596 -64.134270 47.440166
+v 27.673693 -65.852509 47.440166
+v 27.637188 -65.886681 47.440166
+v 27.721535 -65.867035 47.440166
+v 27.732874 -65.915733 47.440166
+v 27.696371 -65.949905 47.440166
+v 27.648529 -65.935379 47.440166
+v 9.459481 -69.030472 47.440166
+v 9.417658 -69.057869 47.440166
+v 9.504123 -69.052986 47.440166
+v 9.506942 -69.102913 47.440166
+v 9.465119 -69.130310 47.440166
+v 9.420477 -69.107796 47.440166
+v 15.588664 -68.322037 47.440166
+v 15.548462 -68.351761 47.440166
+v 15.634511 -68.341988 47.440166
+v 15.640155 -68.391670 47.440166
+v 15.599953 -68.421394 47.440166
+v 15.554107 -68.401443 47.440166
+v -2.869980 -69.402596 47.440166
+v -2.914622 -69.425110 47.440166
+v -2.828157 -69.429993 47.440166
+v -2.830976 -69.479912 47.440166
+v -2.875618 -69.502434 47.440166
+v -2.917441 -69.475029 47.440166
+v 3.300000 -69.390381 47.440166
+v 3.256699 -69.415382 47.440166
+v 3.343301 -69.415382 47.440166
+v 3.343301 -69.465378 47.440166
+v 3.300000 -69.490379 47.440166
+v 3.256699 -69.465378 47.440166
+v -15.162859 -68.383232 47.440166
+v -15.209774 -68.400528 47.440166
+v -15.124428 -68.415222 47.440166
+v -15.132911 -68.464493 47.440166
+v -15.179826 -68.481789 47.440166
+v -15.218257 -68.449799 47.440166
+v -9.030857 -69.067139 47.440166
+v -9.076704 -69.087090 47.440166
+v -8.990655 -69.096863 47.440166
+v -8.996300 -69.146545 47.440166
+v -9.042147 -69.166496 47.440166
+v -9.082349 -69.136765 47.440166
+v -33.177395 -64.222015 47.440166
+v -33.226639 -64.230667 47.440166
+v -33.145275 -64.260330 47.440166
+v -33.162399 -64.307304 47.440166
+v -33.211647 -64.315964 47.440166
+v -33.243763 -64.277641 47.440166
+v -27.258041 -65.963226 47.440166
+v -27.306665 -65.974884 47.440166
+v -27.223639 -65.999512 47.440166
+v -27.237858 -66.047447 47.440166
+v -27.286480 -66.059097 47.440166
+v -27.320885 -66.022820 47.440166
+v -21.245670 -67.349350 47.440166
+v -21.293512 -67.363876 47.440166
+v -21.209166 -67.383522 47.440166
+v -21.220507 -67.432213 47.440166
+v -21.268349 -67.446747 47.440166
+v -21.304852 -67.412575 47.440166
+v -44.637409 -59.660904 47.719334
+v -44.687359 -59.663155 47.719334
+v -44.610485 -59.703033 47.719334
+v -44.633507 -59.747417 47.719334
+v -44.683456 -59.749672 47.719334
+v -44.710381 -59.707539 47.719334
+v -38.979374 -62.122410 47.719334
+v -39.029068 -62.127934 47.719334
+v -38.949741 -62.162682 47.719334
+v -38.951939 -62.167694 47.719334
+v -38.963711 -62.194572 47.440166
+v -38.969803 -62.208481 47.440166
+v -39.019497 -62.214005 47.440166
+v -39.049129 -62.173733 47.440166
+v -39.044769 -62.163776 47.440166
+v -39.032997 -62.136902 47.719334
+v -65.193367 -46.141720 47.719334
+v -65.241806 -46.129337 47.719334
+v -65.179863 -46.189861 47.719334
+v -65.214806 -46.225624 47.719334
+v -65.263252 -46.213245 47.719334
+v -65.276749 -46.165100 47.719334
+v -60.438412 -50.074959 47.719334
+v -60.487682 -50.066467 47.719334
+v -60.421127 -50.121876 47.719334
+v -60.453117 -50.160305 47.719334
+v -60.502388 -50.151814 47.719334
+v -60.519672 -50.104897 47.719334
+v -55.401268 -53.639313 47.719334
+v -55.451042 -53.634560 47.719334
+v -55.380497 -53.684792 47.719334
+v -55.409496 -53.725521 47.719334
+v -55.459270 -53.720772 47.719334
+v -55.480045 -53.675289 47.719334
+v -50.122208 -56.834126 47.719334
+v -50.172192 -56.832954 47.719334
+v -50.098228 -56.877998 47.719334
+v -50.124233 -56.920704 47.719334
+v -50.174221 -56.919533 47.719334
+v -50.198200 -56.875660 47.719334
+v -69.621544 -41.843548 47.719337
+v -69.668777 -41.827145 47.719337
+v -69.612137 -41.892654 47.719337
+v -69.649956 -41.925358 47.719337
+v -69.697189 -41.908951 47.719337
+v -69.706596 -41.859844 47.719337
+v -73.674110 -37.189163 47.719337
+v -73.719704 -37.168629 47.719337
+v -73.669098 -37.238911 47.719337
+v -73.709679 -37.268127 47.719337
+v -73.755264 -37.247593 47.719337
+v -73.760277 -37.197845 47.719337
+v -80.440002 -26.880930 47.440170
+v -80.480820 -26.852053 47.440170
+v -80.444603 -26.930719 47.440170
+v -80.490021 -26.951630 47.440170
+v -80.530838 -26.922750 47.440170
+v -80.526237 -26.872963 47.440170
+v -83.043358 -21.284365 47.440170
+v -83.080986 -21.251434 47.440170
+v -83.053062 -21.333412 47.440170
+v -83.100395 -21.349531 47.440170
+v -83.138023 -21.316603 47.440170
+v -83.128311 -21.267553 47.440170
+v -77.298569 -32.193768 47.719337
+v -77.342033 -32.169056 47.679527
+v -77.334351 -32.173420 47.719337
+v -77.298325 -32.230675 47.719337
+v -77.298233 -32.243767 47.653534
+v -77.317574 -32.255100 47.440170
+v -77.341370 -32.269051 47.440170
+v -77.384834 -32.244339 47.440170
+v -77.385162 -32.194340 47.440170
+v -77.363716 -32.181767 47.440170
+v -86.434860 -9.432073 47.440170
+v -86.464523 -9.391817 47.440170
+v -86.454895 -9.477883 47.440170
+v -86.504585 -9.483438 47.440170
+v -86.534241 -9.443183 47.440170
+v -86.514214 -9.397372 47.440170
+v -85.056610 -15.449177 47.440170
+v -85.090500 -15.412415 47.440170
+v -85.071503 -15.496907 47.440170
+v -85.120285 -15.507875 47.440170
+v -85.154175 -15.471115 47.440170
+v -85.139282 -15.423384 47.440170
+v -87.168144 2.872930 47.440170
+v -87.188179 2.918741 47.440170
+v -87.197800 2.832674 47.440170
+v -87.247490 2.838230 47.440170
+v -87.267525 2.884041 47.440170
+v -87.237869 2.924296 47.440170
+v -87.144737 -3.300002 47.440170
+v -87.169739 -3.256701 47.440170
+v -87.169739 -3.343303 47.440170
+v -87.219734 -3.343303 47.440170
+v -87.244736 -3.300002 47.440170
+v -87.219734 -3.256701 47.440170
+v -85.171051 15.036726 47.440170
+v -85.180756 15.085775 47.440170
+v -85.208672 15.003796 47.440170
+v -85.256004 15.019915 47.440170
+v -85.265709 15.068964 47.440170
+v -85.228088 15.101894 47.440170
+v -86.504562 9.009961 47.440170
+v -86.519447 9.057693 47.440170
+v -86.538452 8.973200 47.440170
+v -86.587234 8.984169 47.440170
+v -86.602119 9.031900 47.440170
+v -86.568230 9.068662 47.440170
+v -77.530418 31.832954 47.719337
+v -77.525406 31.882704 47.719337
+v -77.576004 31.812422 47.719337
+v -77.616585 31.841635 47.719337
+v -77.615845 31.848953 47.719337
+v -77.611572 31.891384 47.541565
+v -77.565979 31.911917 47.719337
+v -77.581154 31.905083 47.719337
+v -80.636063 26.499807 47.440170
+v -80.635735 26.549807 47.440170
+v -80.679527 26.475092 47.440170
+v -80.722664 26.500376 47.440170
+v -80.722328 26.550375 47.440170
+v -80.678864 26.575090 47.440170
+v -83.200142 20.885790 47.440170
+v -83.204735 20.935577 47.440170
+v -83.240959 20.856913 47.440170
+v -83.286377 20.877823 47.440170
+v -83.290977 20.927610 47.440170
+v -83.250153 20.956488 47.440170
+v -73.938103 36.850811 47.719337
+v -73.928688 36.899921 47.719337
+v -73.985329 36.834408 47.719337
+v -74.023155 36.867107 47.719337
+v -74.013748 36.916214 47.719337
+v -73.966515 36.932621 47.719337
+v -69.914017 41.529179 47.719337
+v -69.900513 41.577320 47.719337
+v -69.962456 41.516796 47.719337
+v -69.997398 41.552559 47.719337
+v -69.983902 41.600704 47.719337
+v -69.935455 41.613083 47.719337
+v -50.496086 56.621830 47.719341
+v -50.469158 56.663960 47.719341
+v -50.546036 56.624084 47.719341
+v -50.569057 56.668468 47.719341
+v -50.542130 56.710598 47.719341
+v -50.492184 56.708344 47.719341
+v -55.759148 53.401203 47.719341
+v -55.735168 53.445080 47.719341
+v -55.809135 53.400036 47.719341
+v -55.835140 53.442738 47.719341
+v -55.811161 53.486614 47.719341
+v -55.761177 53.487785 47.719341
+v -60.777576 49.811077 47.719341
+v -60.756805 49.856560 47.719341
+v -60.827351 49.806324 47.719341
+v -60.856350 49.847054 47.719341
+v -60.835579 49.892536 47.719341
+v -60.785805 49.897289 47.719341
+v -65.510818 45.852314 47.719341
+v -65.493530 45.899231 47.719341
+v -65.560089 45.843822 47.719341
+v -65.592079 45.882248 47.719341
+v -65.574799 45.929169 47.719341
+v -65.525520 45.937656 47.719341
+v -39.378147 61.961330 47.719341
+v -39.346027 61.999653 47.719341
+v -39.427391 61.969986 47.719341
+v -39.444519 62.016964 47.719341
+v -39.412399 62.055283 47.719341
+v -39.363155 62.046627 47.719341
+v -45.024837 59.474312 47.719341
+v -44.995205 59.514584 47.719341
+v -45.074532 59.479836 47.719341
+v -45.094593 59.525635 47.719341
+v -45.064960 59.565907 47.719341
+v -45.015266 59.560383 47.719341
+v -21.667177 67.263481 47.440174
+v -21.628746 67.295464 47.440174
+v -21.714092 67.280769 47.440174
+v -21.722574 67.330048 47.440174
+v -21.684143 67.362030 47.440174
+v -21.637228 67.344742 47.440174
+v -33.585514 64.086235 47.719341
+v -33.551109 64.122513 47.556961
+v -33.575199 64.097115 47.719341
+v -33.599339 64.089546 47.719341
+v -33.634136 64.097885 47.544350
+v -33.637245 64.108376 47.440174
+v -33.648357 64.145821 47.440174
+v -33.613953 64.182106 47.440174
+v -33.565331 64.170448 47.440174
+v -33.554596 64.134270 47.440174
+v -27.673693 65.852509 47.440174
+v -27.637188 65.886681 47.440174
+v -27.721535 65.867035 47.440174
+v -27.732874 65.915733 47.440174
+v -27.696371 65.949905 47.440174
+v -27.648529 65.935379 47.440174
+v -9.459481 69.030472 47.440174
+v -9.417658 69.057869 47.440174
+v -9.504123 69.052986 47.440174
+v -9.506942 69.102913 47.440174
+v -9.465119 69.130310 47.440174
+v -9.420477 69.107796 47.440174
+v -15.588664 68.322037 47.440174
+v -15.548462 68.351761 47.440174
+v -15.634511 68.341988 47.440174
+v -15.640155 68.391670 47.440174
+v -15.599953 68.421394 47.440174
+v -15.554107 68.401443 47.440174
+v 2.869980 69.402596 47.440174
+v 2.914622 69.425110 47.440174
+v 2.828157 69.429993 47.440174
+v 2.830976 69.479912 47.440174
+v 2.875618 69.502434 47.440174
+v 2.917441 69.475029 47.440174
+v -3.300000 69.390381 47.440174
+v -3.256699 69.415382 47.440174
+v -3.343301 69.415382 47.440174
+v -3.343301 69.465378 47.440174
+v -3.300000 69.490379 47.440174
+v -3.256699 69.465378 47.440174
+v 15.162859 68.383232 47.440174
+v 15.209774 68.400528 47.440174
+v 15.124428 68.415222 47.440174
+v 15.132911 68.464493 47.440174
+v 15.179826 68.481789 47.440174
+v 15.218257 68.449799 47.440174
+v 9.030857 69.067139 47.440174
+v 9.076704 69.087090 47.440174
+v 8.990655 69.096863 47.440174
+v 8.996300 69.146545 47.440174
+v 9.042147 69.166496 47.440174
+v 9.082349 69.136765 47.440174
+v 33.177395 64.222015 47.440174
+v 33.226639 64.230667 47.440174
+v 33.145275 64.260330 47.440174
+v 33.162399 64.307304 47.440174
+v 33.211647 64.315964 47.440174
+v 33.243763 64.277641 47.440174
+v 27.258041 65.963226 47.440174
+v 27.306665 65.974884 47.440174
+v 27.223639 65.999512 47.440174
+v 27.237858 66.047447 47.440174
+v 27.286480 66.059097 47.440174
+v 27.320885 66.022820 47.440174
+v 21.245670 67.349350 47.440174
+v 21.293512 67.363876 47.440174
+v 21.209166 67.383522 47.440174
+v 21.220507 67.432213 47.440174
+v 21.268349 67.446747 47.440174
+v 21.304852 67.412575 47.440174
+v 44.637409 59.660896 47.719341
+v 44.687359 59.663147 47.719341
+v 44.610485 59.703026 47.719341
+v 44.633507 59.747410 47.719341
+v 44.683456 59.749664 47.719341
+v 44.710381 59.707531 47.719341
+v 38.979374 62.122402 47.719341
+v 39.029068 62.127926 47.719341
+v 38.949741 62.162674 47.719341
+v 38.951939 62.167686 47.719341
+v 38.963711 62.194565 47.440174
+v 38.969803 62.208473 47.440174
+v 39.019497 62.213997 47.440174
+v 39.049129 62.173725 47.440174
+v 39.044769 62.163769 47.440174
+v 39.032997 62.136894 47.719341
+v 65.193367 46.141712 47.719341
+v 65.241806 46.129330 47.719341
+v 65.179863 46.189854 47.719341
+v 65.214806 46.225616 47.719341
+v 65.263252 46.213238 47.719341
+v 65.276749 46.165092 47.719341
+v 60.438412 50.074951 47.719341
+v 60.487682 50.066460 47.719341
+v 60.421127 50.121868 47.719341
+v 60.453117 50.160297 47.719341
+v 60.502388 50.151806 47.719341
+v 60.519672 50.104889 47.719341
+v 55.401268 53.639305 47.719341
+v 55.451042 53.634552 47.719341
+v 55.380497 53.684784 47.719341
+v 55.409496 53.725513 47.719341
+v 55.459270 53.720764 47.719341
+v 55.480045 53.675282 47.719341
+v 50.122208 56.834118 47.719341
+v 50.172192 56.832947 47.719341
+v 50.098228 56.877991 47.719341
+v 50.124233 56.920696 47.719341
+v 50.174221 56.919525 47.719341
+v 50.198200 56.875652 47.719341
+v 69.621544 41.843540 47.719337
+v 69.668777 41.827137 47.719337
+v 69.612137 41.892647 47.719337
+v 69.649956 41.925350 47.719337
+v 69.697189 41.908943 47.719337
+v 69.706596 41.859837 47.719337
+v 73.674110 37.189156 47.719337
+v 73.719704 37.168621 47.719337
+v 73.669098 37.238903 47.719337
+v 73.709679 37.268120 47.719337
+v 73.755264 37.247585 47.719337
+v 73.760277 37.197838 47.719337
+v 80.440002 26.880926 47.440170
+v 80.480820 26.852049 47.440170
+v 80.444603 26.930716 47.440170
+v 80.490021 26.951626 47.440170
+v 80.530838 26.922747 47.440170
+v 80.526237 26.872959 47.440170
+v 83.043358 21.284361 47.440170
+v 83.080986 21.251431 47.440170
+v 83.053062 21.333408 47.440170
+v 83.100395 21.349527 47.440170
+v 83.138023 21.316599 47.440170
+v 83.128311 21.267550 47.440170
+v 77.298569 32.193760 47.719337
+v 77.342033 32.169048 47.679527
+v 77.334351 32.173412 47.719337
+v 77.298325 32.230667 47.719337
+v 77.298233 32.243759 47.653534
+v 77.317574 32.255093 47.440170
+v 77.341370 32.269043 47.440170
+v 77.384834 32.244331 47.440170
+v 77.385162 32.194332 47.440170
+v 77.363716 32.181759 47.440170
+v 86.434860 9.432069 47.440170
+v 86.464523 9.391813 47.440170
+v 86.454895 9.477880 47.440170
+v 86.504585 9.483435 47.440170
+v 86.534241 9.443179 47.440170
+v 86.514214 9.397368 47.440170
+v 85.056610 15.449173 47.440170
+v 85.090500 15.412411 47.440170
+v 85.071503 15.496903 47.440170
+v 85.120285 15.507872 47.440170
+v 85.154175 15.471111 47.440170
+v 85.139282 15.423380 47.440170
+v 87.144737 3.299998 47.440170
+v 87.169739 3.256697 47.440170
+v 87.169739 3.343299 47.440170
+v 87.219734 3.343299 47.440170
+v 87.244736 3.299998 47.440170
+v 87.219734 3.256697 47.440170
+v 86.782829 -0.453837 47.440170
+v 85.652962 11.452106 47.440170
+v 82.332146 22.512367 47.440170
+v 66.901260 44.956993 47.440174
+v 55.271545 54.060265 47.440174
+v 47.226982 58.597389 47.440174
+v 14.970764 68.134209 47.440174
+v -9.400998 68.740936 47.440174
+v -53.304955 55.376934 47.440174
+v -68.445038 43.550758 47.440170
+v -78.382797 30.631401 47.440170
+v -84.371376 16.812122 47.440170
+v -86.729553 2.606747 47.440170
+v -85.570694 -11.860113 47.440170
+v -82.257141 -22.695541 47.440170
+v -66.901260 -44.957001 47.440166
+v -55.271545 -54.060272 47.440166
+v -47.226982 -58.597397 47.440166
+v -14.970764 -68.134209 47.440166
+v 9.400998 -68.740936 47.440166
+v 53.959118 -54.981121 47.440166
+v 68.047150 -43.952225 47.440166
+v 78.358078 -30.673525 47.440170
+v 84.504669 -16.350958 47.440170
+v 86.173538 -8.546471 47.440170
+v 86.400230 -0.450900 51.084740
+v 84.579681 14.467759 51.084740
+v 79.467026 27.763409 51.084740
+v 72.224831 38.655842 51.084740
+v 63.860889 47.202835 51.084743
+v 54.957058 53.807079 51.084743
+v 42.673187 60.281162 51.084743
+v 28.516993 65.118805 51.084743
+v 9.277218 68.348076 51.084743
+v -8.101107 68.453056 51.084743
+v -24.383680 66.158562 51.084743
+v -40.410969 61.298134 51.084743
+v -56.032085 53.212811 51.084743
+v -69.355042 42.049316 51.084740
+v -78.712090 29.285980 51.084740
+v -84.564552 14.660898 51.084740
+v -86.400772 -0.221952 51.084740
+v -84.788475 -13.619887 51.084740
+v -80.472687 -25.762300 51.084740
+v -74.289986 -36.006439 51.084740
+v -67.028519 -44.302479 51.084736
+v -56.520214 -52.785652 51.084736
+v -44.173359 -59.619423 51.084736
+v -27.251673 -65.440712 51.084736
+v -7.819139 -68.456062 51.084736
+v 9.559530 -68.344421 51.084736
+v 29.958801 -64.790779 51.084736
+v 46.832165 -58.454273 51.084736
+v 63.089245 -47.971123 51.084736
+v 75.075752 -35.045830 51.084740
+v 82.168251 -22.026911 51.084740
+v 85.258774 -11.606925 51.084740
+v 85.171761 14.540437 51.084740
+v 86.992012 -0.455442 51.084740
+v 80.055565 27.915281 51.084740
+v 72.802765 38.884117 51.084740
+v 64.423477 47.498642 51.084743
+v 55.504360 54.159569 51.084743
+v 43.205936 60.695488 51.084743
+v 29.043320 65.592308 51.084743
+v 9.804994 68.898361 51.084743
+v -7.660517 69.075264 51.084743
+v -23.952185 66.856262 51.084743
+v -40.003860 62.094658 51.084743
+v -55.674446 54.151756 51.084743
+v -70.504120 41.675549 51.084740
+v -79.756981 28.608986 51.084740
+v -85.110207 14.915622 51.084740
+v -86.990021 0.689133 51.084740
+v -85.404839 -13.585333 51.084740
+v -80.786736 -26.470850 51.084740
+v -74.119286 -37.218132 51.084740
+v -66.313789 -45.799435 51.084736
+v -55.075180 -54.433098 51.084736
+v -41.918068 -61.243866 51.084736
+v -23.918188 -66.815895 51.084736
+v -3.290156 -69.266998 51.084736
+v 14.166913 -68.475189 51.084736
+v 34.641628 -64.007362 51.084736
+v 51.503632 -56.665352 51.084736
+v 67.641533 -44.648094 51.084736
+v 78.019806 -31.646408 51.084740
+v 84.359482 -17.579777 51.084740
+v 86.287483 -9.196812 51.084740
+v 93.582611 15.534201 51.084740
+v 95.398521 -0.519960 51.084740
+v 88.419456 29.998890 51.084740
+v 81.020370 42.031540 51.084740
+v 72.417854 51.600353 51.084743
+v 60.145805 61.169800 51.084743
+v 45.945858 68.668732 51.084743
+v 26.751375 74.802246 51.084743
+v 4.934265 77.622017 51.084743
+v -13.775722 76.982132 51.084743
+v -35.546089 72.537209 51.084743
+v -53.966518 64.905052 51.084743
+v -71.707359 52.377522 51.084743
+v -83.518639 38.650410 51.084740
+v -91.220398 23.544176 51.084740
+v -95.042671 7.018288 51.084740
+v -94.598587 -10.327083 51.084740
+v -90.043747 -26.410324 51.084740
+v -82.587440 -39.882488 51.084740
+v -73.554726 -50.506748 51.084736
+v -63.814392 -58.676659 51.084736
+v -50.410267 -66.632675 51.084736
+v -35.103149 -72.608162 51.084736
+v -14.471948 -76.876930 51.084736
+v 4.231803 -77.656113 51.084736
+v 27.550045 -74.672089 51.084736
+v 53.497108 -65.155518 51.084736
+v 71.487961 -52.578518 51.084736
+v 84.057625 -37.833607 51.084740
+v 91.974419 -21.373732 51.084740
+v 94.479424 -11.203293 51.084740
+v 93.582611 15.534203 0.000001
+v 95.398521 -0.519958 0.000000
+v 88.419456 29.998892 0.000001
+v 81.020370 42.031544 0.000002
+v 72.417854 51.600357 0.000002
+v 60.145805 61.169804 0.000003
+v 45.945858 68.668732 0.000003
+v 26.751375 74.802246 0.000003
+v 4.934265 77.622017 0.000003
+v -13.775722 76.982132 0.000003
+v -35.546089 72.537209 0.000003
+v -53.966518 64.905052 0.000003
+v -71.707359 52.377525 0.000002
+v -83.518639 38.650414 0.000002
+v -91.220398 23.544178 0.000001
+v -95.042671 7.018290 0.000000
+v -94.598587 -10.327081 0.000000
+v -90.043747 -26.410322 -0.000001
+v -82.587440 -39.882484 -0.000002
+v -73.554726 -50.506744 -0.000002
+v -63.814392 -58.676655 -0.000003
+v -50.410267 -66.632675 -0.000003
+v -35.103149 -72.608162 -0.000003
+v -14.471948 -76.876930 -0.000003
+v 4.231803 -77.656113 -0.000003
+v 27.550045 -74.672089 -0.000003
+v 53.497108 -65.155518 -0.000003
+v 71.487961 -52.578514 -0.000002
+v 84.057625 -37.833603 -0.000002
+v 91.974419 -21.373730 -0.000001
+v 94.479424 -11.203291 0.000000
+v 42.611393 -0.007754 0.000000
+v 42.609390 -0.114814 0.000000
+v 42.612598 0.099305 0.000000
+v 42.613007 0.206363 0.000000
+v 42.612617 0.313417 0.000000
+v 42.226364 3.532824 0.000000
+v 41.121574 6.692115 0.000000
+v 39.317043 9.737532 0.000000
+v 36.843483 12.617250 0.000001
+v 32.578991 16.114941 0.000001
+v 26.612295 19.463064 0.000001
+v 17.119766 22.752020 0.000001
+v 5.089171 24.601774 0.000001
+v -7.377306 24.344406 0.000001
+v -19.211924 22.001961 0.000001
+v -29.401056 17.775066 0.000001
+v -36.438938 12.656002 0.000001
+v -39.995457 8.347209 0.000000
+v -41.832134 4.513335 0.000000
+v -42.565536 0.960662 0.000000
+v -42.411350 -2.612044 0.000000
+v -41.372791 -6.130282 0.000000
+v -39.471516 -9.520689 0.000000
+v -36.747166 -12.712568 -0.000001
+v -33.256550 -15.639361 -0.000001
+v -27.538357 -19.024868 -0.000001
+v -19.898857 -21.986435 -0.000001
+v -8.332186 -24.316927 -0.000001
+v 5.456104 -24.523806 -0.000001
+v 18.672485 -22.160097 -0.000001
+v 29.931612 -17.473566 -0.000001
+v 36.796482 -12.305256 -0.000001
+v 40.298946 -7.850019 0.000000
+v 42.024128 -3.896291 0.000000
+v 42.441559 -2.011467 0.000000
+v 39.838230 -0.093545 0.000000
+v 39.516113 2.730202 0.000000
+v 38.537918 5.522617 0.000000
+v 36.908577 8.243221 0.000000
+v 34.645119 10.843855 0.000000
+v 30.698856 14.037565 0.000001
+v 25.127754 17.129145 0.000001
+v 16.206894 20.206079 0.000001
+v 4.856043 21.986824 0.000001
+v -5.624547 21.947376 0.000001
+v -17.482336 19.929909 0.000001
+v -26.203007 16.709764 0.000001
+v -33.097588 12.352708 0.000001
+v -37.015251 8.220969 0.000000
+v -38.866879 4.904790 0.000000
+v -39.721897 1.750426 0.000000
+v -39.746258 -1.429409 0.000000
+v -38.939983 -4.589345 0.000000
+v -37.306488 -7.676668 0.000000
+v -34.864738 -10.625438 0.000000
+v -31.657534 -13.363870 -0.000001
+v -26.307478 -16.570164 -0.000001
+v -19.064821 -19.411480 -0.000001
+v -8.004031 -21.693142 -0.000001
+v 2.450935 -22.123152 -0.000001
+v 15.346885 -20.466660 -0.000001
+v 26.660564 -16.484013 -0.000001
+v 33.432499 -12.070296 -0.000001
+v 37.124111 -8.067621 0.000000
+v 38.983471 -4.608403 0.000000
+v 39.622131 -2.359672 0.000000
+f 1 2 3
+f 4 2 1
+f 4 5 2
+f 6 5 4
+f 7 4 1
+f 7 1 8
+f 9 4 7
+f 10 11 12
+f 13 10 12
+f 14 8 1
+f 15 13 14
+f 3 14 1
+f 3 15 14
+f 15 10 13
+f 3 16 15
+f 2 16 3
+f 5 17 16
+f 5 16 2
+f 18 5 6
+f 18 6 19
+f 17 5 18
+f 20 17 18
+f 21 20 22
+f 21 22 23
+f 21 17 20
+f 9 6 4
+f 19 6 9
+f 24 19 9
+f 24 9 7
+f 25 18 19
+f 26 25 19
+f 26 19 24
+f 27 25 26
+f 28 27 26
+f 29 30 27
+f 29 27 28
+f 31 32 33
+f 34 33 29
+f 34 31 33
+f 34 29 28
+f 35 36 31
+f 35 31 34
+f 37 38 36
+f 37 36 35
+f 39 40 37
+f 39 37 35
+f 41 42 40
+f 41 40 39
+f 43 42 41
+f 44 43 41
+f 45 46 47
+f 45 47 44
+f 45 44 41
+f 48 46 45
+f 49 50 48
+f 51 48 45
+f 51 49 48
+f 52 49 51
+f 53 54 52
+f 55 53 52
+f 55 52 51
+f 56 57 53
+f 56 53 55
+f 58 56 55
+f 58 59 56
+f 60 61 59
+f 60 59 58
+f 62 61 60
+f 63 62 60
+f 64 63 60
+f 64 65 66
+f 64 66 67
+f 64 67 63
+f 68 65 64
+f 68 69 65
+f 70 69 68
+f 70 71 69
+f 72 70 68
+f 73 74 72
+f 75 72 68
+f 75 73 72
+f 76 73 75
+f 77 76 75
+f 78 76 77
+f 78 79 76
+f 80 81 82
+f 83 78 77
+f 83 80 82
+f 83 82 78
+f 84 80 83
+f 84 85 80
+f 86 85 84
+f 87 85 86
+f 87 88 85
+f 89 90 91
+f 92 87 86
+f 92 89 91
+f 92 91 87
+f 93 89 92
+f 93 94 89
+f 95 96 94
+f 97 94 93
+f 97 95 94
+f 98 95 97
+f 99 100 98
+f 99 98 97
+f 101 100 99
+f 102 101 99
+f 103 104 105
+f 103 105 102
+f 103 102 99
+f 106 104 103
+f 107 106 103
+f 108 106 107
+f 109 108 107
+f 110 109 107
+f 110 111 112
+f 110 112 109
+f 113 111 110
+f 114 115 113
+f 116 113 110
+f 116 114 113
+f 117 114 116
+f 118 117 116
+f 118 119 117
+f 120 119 118
+f 121 120 118
+f 122 121 118
+f 123 122 118
+f 123 124 125
+f 123 125 122
+f 126 124 123
+f 127 128 126
+f 129 126 123
+f 129 127 126
+f 130 127 129
+f 131 132 130
+f 133 130 129
+f 133 131 130
+f 134 131 133
+f 135 134 133
+f 8 14 134
+f 8 134 135
+f 24 7 8
+f 24 8 135
+f 131 136 137
+f 131 137 132
+f 134 138 136
+f 134 136 131
+f 13 138 134
+f 14 13 134
+f 139 140 141
+f 142 140 139
+f 143 140 142
+f 144 141 137
+f 144 139 141
+f 145 143 142
+f 136 145 144
+f 136 144 137
+f 138 12 143
+f 138 145 136
+f 138 143 145
+f 13 12 138
+f 140 146 141
+f 140 147 146
+f 143 148 147
+f 143 147 140
+f 11 148 143
+f 12 11 143
+f 149 150 151
+f 152 149 151
+f 153 154 155
+f 156 153 155
+f 156 157 153
+f 158 159 160
+f 161 158 160
+f 161 162 158
+f 163 164 165
+f 166 163 165
+f 167 163 166
+f 168 163 167
+f 169 168 167
+f 169 170 168
+f 171 172 146
+f 147 171 146
+f 173 171 147
+f 148 173 147
+f 10 173 148
+f 174 175 10
+f 11 10 148
+f 176 150 149
+f 153 176 154
+f 158 153 157
+f 158 157 159
+f 163 158 162
+f 163 162 164
+f 171 168 172
+f 172 168 170
+f 175 173 10
+f 149 154 176
+f 15 174 10
+f 16 177 174
+f 16 174 15
+f 17 21 177
+f 17 177 16
+f 178 21 23
+f 179 178 23
+f 180 178 179
+f 181 180 179
+f 182 180 181
+f 183 182 181
+f 184 179 23
+f 184 23 22
+f 181 179 184
+f 185 181 184
+f 183 181 185
+f 186 183 185
+f 187 185 184
+f 188 185 187
+f 186 185 188
+f 189 184 22
+f 189 22 20
+f 190 184 189
+f 190 187 184
+f 191 186 188
+f 192 191 190
+f 192 190 189
+f 193 186 191
+f 193 191 192
+f 25 189 20
+f 25 20 18
+f 192 189 25
+f 27 192 25
+f 193 192 27
+f 30 193 27
+f 194 195 196
+f 182 183 186
+f 197 194 182
+f 197 195 194
+f 197 182 186
+f 193 197 186
+f 198 193 30
+f 198 30 29
+f 198 29 199
+f 198 199 200
+f 198 197 193
+f 201 198 200
+f 33 202 199
+f 33 199 29
+f 203 204 202
+f 205 202 33
+f 205 203 202
+f 32 205 33
+f 206 205 32
+f 207 206 208
+f 207 205 206
+f 209 208 210
+f 209 207 208
+f 211 207 209
+f 212 211 213
+f 212 207 211
+f 31 214 206
+f 31 206 32
+f 36 215 214
+f 36 214 31
+f 38 216 215
+f 38 215 36
+f 217 218 219
+f 220 217 221
+f 220 221 222
+f 220 222 223
+f 220 218 217
+f 216 220 223
+f 224 216 38
+f 224 38 37
+f 224 37 225
+f 224 220 216
+f 226 225 227
+f 226 224 225
+f 228 225 37
+f 40 228 37
+f 229 230 228
+f 231 228 40
+f 231 229 228
+f 42 231 40
+f 232 231 42
+f 233 232 234
+f 233 234 235
+f 233 231 232
+f 236 233 235
+f 237 233 236
+f 238 237 239
+f 238 233 237
+f 43 240 232
+f 43 232 42
+f 241 242 243
+f 244 245 246
+f 247 241 244
+f 247 242 241
+f 247 244 246
+f 240 247 246
+f 248 44 249
+f 248 240 43
+f 248 43 44
+f 248 247 240
+f 250 249 251
+f 250 248 249
+f 252 249 44
+f 47 252 44
+f 253 254 255
+f 253 255 252
+f 253 252 47
+f 46 253 47
+f 256 253 46
+f 257 256 258
+f 257 253 256
+f 259 258 260
+f 259 257 258
+f 261 257 259
+f 262 261 263
+f 262 257 261
+f 48 256 46
+f 50 264 48
+f 264 256 48
+f 265 266 267
+f 264 265 267
+f 50 49 268
+f 269 264 50
+f 270 50 268
+f 270 269 50
+f 269 265 264
+f 52 271 268
+f 52 268 49
+f 54 272 271
+f 54 271 52
+f 273 272 54
+f 274 273 54
+f 275 274 276
+f 275 276 277
+f 275 273 274
+f 278 274 54
+f 53 278 54
+f 279 278 53
+f 57 279 53
+f 280 57 281
+f 281 57 56
+f 280 282 57
+f 282 279 57
+f 279 283 284
+f 284 283 285
+f 282 283 279
+f 59 286 281
+f 59 281 56
+f 287 288 289
+f 288 290 289
+f 59 61 286
+f 291 61 290
+f 61 292 286
+f 291 292 61
+f 288 291 290
+f 293 290 61
+f 62 293 61
+f 294 62 295
+f 295 62 63
+f 294 296 62
+f 296 293 62
+f 293 297 298
+f 298 297 299
+f 296 297 293
+f 67 300 295
+f 67 295 63
+f 301 302 303
+f 302 304 303
+f 67 66 300
+f 305 66 304
+f 66 306 300
+f 305 306 66
+f 302 305 304
+f 307 304 66
+f 65 307 66
+f 308 307 65
+f 69 308 65
+f 309 308 69
+f 71 309 69
+f 310 71 311
+f 311 71 70
+f 310 312 71
+f 312 309 71
+f 309 313 314
+f 314 313 315
+f 312 313 309
+f 70 316 311
+f 72 316 70
+f 317 318 319
+f 318 320 319
+f 72 74 316
+f 321 74 320
+f 74 322 316
+f 321 322 74
+f 318 321 320
+f 73 323 320
+f 73 320 74
+f 76 324 323
+f 76 323 73
+f 325 324 76
+f 79 325 76
+f 326 79 327
+f 327 79 78
+f 326 328 79
+f 328 325 79
+f 325 329 330
+f 330 329 331
+f 328 329 325
+f 78 332 327
+f 82 332 78
+f 333 334 335
+f 334 336 335
+f 82 81 332
+f 336 337 81
+f 81 338 332
+f 337 338 81
+f 334 337 336
+f 80 339 336
+f 80 336 81
+f 340 339 80
+f 85 340 80
+f 341 340 85
+f 88 341 85
+f 342 343 344
+f 345 346 347
+f 348 342 345
+f 348 343 342
+f 348 345 347
+f 341 348 347
+f 349 341 88
+f 349 88 87
+f 349 87 350
+f 349 350 351
+f 349 348 341
+f 352 349 351
+f 91 353 350
+f 91 350 87
+f 354 355 356
+f 354 356 353
+f 354 353 91
+f 90 354 91
+f 357 354 90
+f 358 357 359
+f 358 354 357
+f 360 359 361
+f 360 358 359
+f 362 358 360
+f 363 362 364
+f 363 358 362
+f 89 365 357
+f 89 357 90
+f 94 366 365
+f 94 365 89
+f 96 367 366
+f 96 366 94
+f 368 369 370
+f 371 368 372
+f 371 372 373
+f 371 373 374
+f 371 369 368
+f 367 371 374
+f 375 367 96
+f 375 96 95
+f 375 95 376
+f 375 371 367
+f 377 376 378
+f 377 375 376
+f 379 376 95
+f 98 379 95
+f 380 381 379
+f 382 379 98
+f 382 380 379
+f 100 382 98
+f 383 382 100
+f 384 383 385
+f 384 385 386
+f 384 382 383
+f 387 384 386
+f 388 384 387
+f 389 388 390
+f 389 384 388
+f 101 391 383
+f 101 383 100
+f 392 393 394
+f 395 396 397
+f 398 392 395
+f 398 393 392
+f 398 395 397
+f 391 398 397
+f 399 102 400
+f 399 400 401
+f 399 391 101
+f 399 101 102
+f 399 398 391
+f 402 399 401
+f 403 400 102
+f 105 403 102
+f 404 405 406
+f 404 406 403
+f 404 403 105
+f 104 404 105
+f 407 404 104
+f 408 407 409
+f 408 404 407
+f 150 409 151
+f 150 408 409
+f 410 408 150
+f 411 410 412
+f 411 408 410
+f 106 407 104
+f 108 413 106
+f 413 407 106
+f 414 108 415
+f 415 108 109
+f 414 416 108
+f 416 413 108
+f 413 149 417
+f 417 149 152
+f 416 149 413
+f 112 415 109
+f 112 418 415
+f 155 154 419
+f 154 420 419
+f 112 111 418
+f 420 421 111
+f 111 422 418
+f 421 422 111
+f 154 421 420
+f 423 420 111
+f 113 423 111
+f 424 423 113
+f 115 424 113
+f 425 115 426
+f 426 115 114
+f 425 427 115
+f 427 424 115
+f 424 157 428
+f 428 157 156
+f 427 157 424
+f 117 426 114
+f 117 429 426
+f 160 159 430
+f 159 431 430
+f 117 119 429
+f 432 119 431
+f 119 433 429
+f 432 433 119
+f 159 432 431
+f 434 431 119
+f 120 434 119
+f 435 120 436
+f 436 120 121
+f 435 437 120
+f 437 434 120
+f 434 162 438
+f 438 162 161
+f 437 162 434
+f 122 436 121
+f 122 439 436
+f 165 164 440
+f 164 441 440
+f 122 125 439
+f 442 125 441
+f 125 443 439
+f 442 443 125
+f 164 442 441
+f 444 441 125
+f 124 444 125
+f 445 444 124
+f 126 445 124
+f 446 445 126
+f 128 446 126
+f 447 128 448
+f 448 128 127
+f 447 449 128
+f 449 446 128
+f 446 170 450
+f 450 170 169
+f 449 170 446
+f 127 451 448
+f 130 451 127
+f 146 172 141
+f 172 137 141
+f 130 132 451
+f 452 132 137
+f 132 453 451
+f 452 453 132
+f 172 452 137
+f 454 26 24
+f 454 24 455
+f 456 28 26
+f 456 26 454
+f 457 34 28
+f 457 28 456
+f 458 35 34
+f 458 34 457
+f 459 39 35
+f 459 35 458
+f 460 41 39
+f 460 39 459
+f 461 45 41
+f 461 41 460
+f 462 45 461
+f 51 45 462
+f 463 51 462
+f 55 51 463
+f 58 55 463
+f 464 58 463
+f 60 58 464
+f 465 60 464
+f 64 60 465
+f 466 64 465
+f 68 64 466
+f 467 68 466
+f 75 68 467
+f 468 75 467
+f 77 75 468
+f 469 77 468
+f 83 77 469
+f 470 83 469
+f 84 83 470
+f 471 84 470
+f 86 84 471
+f 472 86 471
+f 92 86 472
+f 473 92 472
+f 93 92 473
+f 474 93 473
+f 97 93 474
+f 475 97 474
+f 99 97 475
+f 476 99 475
+f 103 99 476
+f 477 103 476
+f 107 103 477
+f 478 107 477
+f 110 107 478
+f 479 110 478
+f 116 110 479
+f 480 116 479
+f 118 116 480
+f 481 118 480
+f 123 118 481
+f 482 129 123
+f 482 123 481
+f 483 129 482
+f 133 129 483
+f 484 135 133
+f 484 133 483
+f 455 24 135
+f 455 135 484
+f 144 485 486
+f 145 485 144
+f 142 487 145
+f 487 485 145
+f 487 139 488
+f 487 142 139
+f 486 488 144
+f 488 139 144
+f 177 175 174
+f 21 175 177
+f 452 172 170
+f 452 170 449
+f 166 165 440
+f 489 166 440
+f 167 166 489
+f 490 167 489
+f 169 167 490
+f 450 169 490
+f 437 164 162
+f 442 164 437
+f 161 160 430
+f 438 161 430
+f 427 159 157
+f 432 159 427
+f 156 155 419
+f 428 156 419
+f 416 154 149
+f 421 154 416
+f 417 152 151
+f 417 151 409
+f 491 492 410
+f 491 410 150
+f 153 493 494
+f 153 494 495
+f 496 493 153
+f 158 497 498
+f 499 497 158
+f 500 499 158
+f 163 501 502
+f 163 502 503
+f 504 501 163
+f 168 505 504
+f 168 504 163
+f 506 505 168
+f 171 507 508
+f 171 508 509
+f 173 510 507
+f 173 507 171
+f 511 512 510
+f 511 510 173
+f 175 513 511
+f 495 491 176
+f 150 176 491
+f 176 153 495
+f 153 158 496
+f 496 158 498
+f 158 163 500
+f 500 163 503
+f 168 171 509
+f 168 509 506
+f 173 175 511
+f 178 514 515
+f 178 515 21
+f 516 514 178
+f 180 516 178
+f 194 516 180
+f 182 194 180
+f 191 517 518
+f 191 518 190
+f 519 517 191
+f 188 519 191
+f 520 188 187
+f 519 188 520
+f 520 187 190
+f 518 520 190
+f 521 522 523
+f 524 522 521
+f 524 525 522
+f 526 527 528
+f 526 528 525
+f 526 525 524
+f 529 527 526
+f 530 527 529
+f 531 526 524
+f 196 530 529
+f 532 196 529
+f 514 531 524
+f 514 524 515
+f 213 530 196
+f 533 530 213
+f 516 531 514
+f 516 532 531
+f 534 533 213
+f 535 533 534
+f 536 535 534
+f 194 532 516
+f 537 213 211
+f 537 534 213
+f 219 535 536
+f 219 536 538
+f 539 537 211
+f 540 535 219
+f 239 540 219
+f 541 540 239
+f 542 538 537
+f 542 537 539
+f 543 540 541
+f 544 540 543
+f 217 219 538
+f 217 538 542
+f 545 541 239
+f 237 545 239
+f 546 545 237
+f 243 543 546
+f 243 544 543
+f 263 544 243
+f 547 544 263
+f 548 547 549
+f 241 546 237
+f 241 243 546
+f 550 551 548
+f 550 548 549
+f 552 263 261
+f 552 547 263
+f 552 549 547
+f 553 550 554
+f 553 551 550
+f 555 556 557
+f 555 557 558
+f 559 556 555
+f 560 554 552
+f 560 553 554
+f 560 552 261
+f 561 555 558
+f 562 561 558
+f 563 561 562
+f 564 559 563
+f 565 556 559
+f 565 559 564
+f 566 565 564
+f 567 565 566
+f 568 565 567
+f 569 565 568
+f 570 563 562
+f 570 564 563
+f 571 567 566
+f 572 571 566
+f 573 569 568
+f 573 568 574
+f 575 569 573
+f 576 569 575
+f 576 577 569
+f 578 577 576
+f 579 571 572
+f 579 573 574
+f 579 574 571
+f 580 576 575
+f 581 577 578
+f 582 580 575
+f 583 581 578
+f 583 578 584
+f 585 581 583
+f 586 587 581
+f 586 581 585
+f 588 580 582
+f 588 584 580
+f 589 587 586
+f 590 587 589
+f 591 584 588
+f 591 583 584
+f 592 586 585
+f 593 594 590
+f 593 590 589
+f 595 583 591
+f 596 589 597
+f 596 593 589
+f 598 593 596
+f 599 598 596
+f 600 597 592
+f 600 592 601
+f 602 596 597
+f 602 597 600
+f 603 604 605
+f 603 598 599
+f 603 605 598
+f 606 604 603
+f 607 596 602
+f 608 604 606
+f 609 603 599
+f 344 608 606
+f 610 344 606
+f 611 609 599
+f 611 599 612
+f 364 608 344
+f 613 608 364
+f 614 609 611
+f 614 610 609
+f 615 613 364
+f 616 613 615
+f 617 616 615
+f 342 610 614
+f 618 615 364
+f 618 364 362
+f 370 616 617
+f 370 617 619
+f 620 618 362
+f 621 616 370
+f 390 621 370
+f 622 621 390
+f 623 618 620
+f 623 619 618
+f 624 621 622
+f 625 621 624
+f 368 370 619
+f 368 619 623
+f 626 622 390
+f 388 626 390
+f 627 626 388
+f 394 625 624
+f 394 624 627
+f 412 625 394
+f 628 625 412
+f 629 628 630
+f 392 627 388
+f 392 394 627
+f 631 629 630
+f 631 632 629
+f 633 412 410
+f 633 630 628
+f 633 628 412
+f 634 632 631
+f 634 631 635
+f 636 637 638
+f 636 638 639
+f 640 637 636
+f 492 633 410
+f 492 635 633
+f 492 634 635
+f 641 636 639
+f 494 641 639
+f 642 641 494
+f 643 640 642
+f 644 637 640
+f 644 640 643
+f 645 644 643
+f 646 644 645
+f 647 644 646
+f 648 644 647
+f 493 643 642
+f 493 642 494
+f 649 646 645
+f 497 649 645
+f 650 648 647
+f 650 647 651
+f 652 648 650
+f 653 648 652
+f 653 654 648
+f 655 654 653
+f 499 649 497
+f 499 650 651
+f 499 651 649
+f 656 653 652
+f 657 654 655
+f 502 656 652
+f 658 657 655
+f 658 655 659
+f 660 657 658
+f 661 657 660
+f 661 662 657
+f 501 656 502
+f 501 659 656
+f 663 662 661
+f 664 662 663
+f 504 658 659
+f 504 659 501
+f 665 661 660
+f 666 664 663
+f 666 667 664
+f 505 658 504
+f 668 663 669
+f 668 666 663
+f 668 522 666
+f 523 522 668
+f 507 669 665
+f 507 665 508
+f 510 668 669
+f 510 669 507
+f 512 668 510
+f 585 601 592
+f 342 344 610
+f 660 508 665
+f 638 632 639
+f 639 632 634
+f 557 551 558
+f 558 551 553
+f 194 196 532
+f 212 213 196
+f 212 196 195
+f 197 212 195
+f 207 212 197
+f 198 207 197
+f 205 207 198
+f 201 205 198
+f 203 205 201
+f 204 201 200
+f 204 203 201
+f 202 204 200
+f 202 200 199
+f 670 539 211
+f 670 211 209
+f 671 542 539
+f 671 539 670
+f 221 217 542
+f 221 542 671
+f 672 670 209
+f 672 209 210
+f 673 671 670
+f 673 670 672
+f 222 221 671
+f 222 671 673
+f 674 210 208
+f 674 672 210
+f 675 673 672
+f 675 672 674
+f 223 222 673
+f 223 673 675
+f 676 675 674
+f 677 675 676
+f 223 675 677
+f 678 674 208
+f 678 208 206
+f 678 676 674
+f 214 678 206
+f 679 223 677
+f 215 679 678
+f 215 678 214
+f 216 223 679
+f 216 679 215
+f 239 219 218
+f 238 239 218
+f 233 238 218
+f 233 218 220
+f 231 220 224
+f 231 233 220
+f 229 231 224
+f 229 224 226
+f 227 229 226
+f 230 229 227
+f 225 230 227
+f 228 230 225
+f 244 241 237
+f 244 237 236
+f 244 236 235
+f 245 244 235
+f 246 245 235
+f 246 235 234
+f 680 234 681
+f 246 234 680
+f 682 234 232
+f 682 681 234
+f 683 682 232
+f 683 246 680
+f 240 246 683
+f 240 683 232
+f 263 243 242
+f 262 263 242
+f 257 262 242
+f 257 242 247
+f 253 257 247
+f 253 247 248
+f 254 253 248
+f 254 248 250
+f 255 250 251
+f 255 254 250
+f 249 255 251
+f 252 255 249
+f 684 560 261
+f 684 261 259
+f 685 570 562
+f 685 562 686
+f 687 570 685
+f 688 687 685
+f 689 572 688
+f 579 572 689
+f 690 579 689
+f 691 588 582
+f 691 582 692
+f 591 588 691
+f 693 595 591
+f 693 591 691
+f 694 595 693
+f 695 694 693
+f 696 600 601
+f 696 601 695
+f 602 600 696
+f 697 602 696
+f 607 602 697
+f 698 607 697
+f 686 684 699
+f 259 699 684
+f 699 685 686
+f 685 689 688
+f 689 691 690
+f 690 691 692
+f 693 696 695
+f 697 334 698
+f 265 259 260
+f 266 265 260
+f 685 275 277
+f 285 685 277
+f 285 283 685
+f 689 288 287
+f 299 689 287
+f 299 297 689
+f 691 302 301
+f 700 691 301
+f 701 691 700
+f 693 691 701
+f 315 693 701
+f 315 313 693
+f 696 318 317
+f 702 696 317
+f 703 697 696
+f 703 696 702
+f 331 329 697
+f 331 697 703
+f 699 259 265
+f 685 699 275
+f 689 685 283
+f 689 283 288
+f 691 689 297
+f 691 297 302
+f 696 693 318
+f 318 693 313
+f 334 697 329
+f 265 275 699
+f 267 266 260
+f 267 260 258
+f 267 704 705
+f 267 258 704
+f 706 258 256
+f 706 704 258
+f 707 267 705
+f 264 707 706
+f 264 706 256
+f 264 267 707
+f 269 275 265
+f 273 275 269
+f 272 273 269
+f 272 269 270
+f 268 272 270
+f 271 272 268
+f 285 277 276
+f 284 285 276
+f 708 276 709
+f 710 276 274
+f 710 709 276
+f 284 708 711
+f 284 276 708
+f 278 711 710
+f 278 710 274
+f 279 284 711
+f 279 711 278
+f 280 291 282
+f 292 291 280
+f 282 288 283
+f 291 288 282
+f 281 292 280
+f 286 292 281
+f 298 712 713
+f 298 289 712
+f 714 289 290
+f 714 712 289
+f 715 298 713
+f 293 715 714
+f 293 714 290
+f 293 298 715
+f 299 287 289
+f 298 299 289
+f 294 305 296
+f 306 305 294
+f 296 302 297
+f 305 302 296
+f 295 306 294
+f 300 306 295
+f 716 717 303
+f 718 717 716
+f 719 717 718
+f 720 303 304
+f 720 716 303
+f 721 719 718
+f 307 721 720
+f 307 720 304
+f 308 314 719
+f 308 719 721
+f 308 721 307
+f 309 314 308
+f 700 301 303
+f 717 700 303
+f 701 700 717
+f 719 701 717
+f 315 701 719
+f 314 315 719
+f 322 321 312
+f 322 312 310
+f 321 318 313
+f 321 313 312
+f 316 310 311
+f 316 322 310
+f 722 723 319
+f 724 723 722
+f 725 723 724
+f 726 319 320
+f 726 722 319
+f 727 725 724
+f 323 727 726
+f 323 726 320
+f 324 330 725
+f 324 727 323
+f 324 725 727
+f 325 330 324
+f 723 317 319
+f 723 702 317
+f 725 703 702
+f 725 702 723
+f 331 703 725
+f 330 331 725
+f 338 337 328
+f 338 328 326
+f 337 334 329
+f 337 329 328
+f 327 338 326
+f 332 338 327
+f 728 729 730
+f 731 729 728
+f 347 729 731
+f 339 730 335
+f 339 335 336
+f 732 730 339
+f 732 728 730
+f 733 347 731
+f 340 733 732
+f 340 732 339
+f 341 347 733
+f 341 733 340
+f 730 734 333
+f 730 333 335
+f 735 734 730
+f 729 735 730
+f 346 735 729
+f 347 346 729
+f 736 334 333
+f 734 736 333
+f 737 736 734
+f 735 737 734
+f 345 737 735
+f 346 345 735
+f 736 611 612
+f 736 612 334
+f 614 611 736
+f 737 614 736
+f 342 614 737
+f 345 342 737
+f 363 364 344
+f 363 344 343
+f 348 363 343
+f 358 363 348
+f 349 358 348
+f 354 358 349
+f 352 354 349
+f 355 354 352
+f 356 352 351
+f 356 355 352
+f 353 356 351
+f 353 351 350
+f 738 620 362
+f 738 362 360
+f 739 623 620
+f 739 620 738
+f 372 368 623
+f 372 623 739
+f 740 738 360
+f 740 360 361
+f 741 739 738
+f 741 738 740
+f 373 372 739
+f 373 739 741
+f 742 361 359
+f 742 740 361
+f 743 741 740
+f 743 740 742
+f 374 373 741
+f 374 741 743
+f 744 743 742
+f 745 743 744
+f 374 743 745
+f 746 742 359
+f 746 359 357
+f 746 744 742
+f 365 746 357
+f 747 374 745
+f 366 747 746
+f 366 746 365
+f 367 374 747
+f 367 747 366
+f 390 370 369
+f 389 390 369
+f 384 389 369
+f 384 369 371
+f 382 371 375
+f 382 384 371
+f 380 382 375
+f 380 375 377
+f 378 380 377
+f 381 380 378
+f 376 381 378
+f 379 381 376
+f 395 392 388
+f 395 388 387
+f 395 387 386
+f 396 395 386
+f 397 396 386
+f 397 386 385
+f 748 385 749
+f 397 385 748
+f 750 385 383
+f 750 749 385
+f 751 750 383
+f 751 397 748
+f 391 397 751
+f 391 751 383
+f 412 394 393
+f 411 412 393
+f 408 411 393
+f 408 393 398
+f 404 408 398
+f 404 398 399
+f 405 404 399
+f 405 399 402
+f 401 405 402
+f 406 405 401
+f 400 406 401
+f 403 406 400
+f 417 752 753
+f 417 409 752
+f 754 409 407
+f 754 752 409
+f 755 417 753
+f 413 755 754
+f 413 754 407
+f 413 417 755
+f 414 421 416
+f 422 421 414
+f 415 422 414
+f 418 422 415
+f 756 419 757
+f 758 419 420
+f 758 757 419
+f 428 756 759
+f 428 419 756
+f 423 759 758
+f 423 758 420
+f 424 428 759
+f 424 759 423
+f 425 432 427
+f 433 432 425
+f 426 433 425
+f 429 433 426
+f 438 760 761
+f 438 430 760
+f 762 430 431
+f 762 760 430
+f 763 438 761
+f 434 763 762
+f 434 762 431
+f 434 438 763
+f 435 442 437
+f 443 442 435
+f 436 443 435
+f 439 443 436
+f 764 489 440
+f 765 489 764
+f 490 489 765
+f 766 440 441
+f 766 764 440
+f 767 490 765
+f 444 767 766
+f 444 766 441
+f 445 450 490
+f 445 490 767
+f 445 767 444
+f 446 450 445
+f 453 452 449
+f 453 449 447
+f 448 453 447
+f 451 453 448
+f 768 454 455
+f 768 455 769
+f 770 456 454
+f 770 454 768
+f 771 457 456
+f 771 456 770
+f 772 458 457
+f 772 457 771
+f 773 459 458
+f 773 458 772
+f 774 460 459
+f 774 459 773
+f 775 461 460
+f 775 460 774
+f 776 462 461
+f 776 461 775
+f 777 462 776
+f 777 463 462
+f 778 463 777
+f 778 464 463
+f 779 464 778
+f 779 465 464
+f 780 465 779
+f 780 466 465
+f 781 466 780
+f 781 467 466
+f 782 468 467
+f 782 467 781
+f 783 469 468
+f 783 468 782
+f 784 470 469
+f 784 469 783
+f 785 471 470
+f 785 470 784
+f 786 472 471
+f 786 471 785
+f 787 473 472
+f 787 472 786
+f 788 474 473
+f 788 473 787
+f 789 475 474
+f 789 474 788
+f 790 476 475
+f 790 475 789
+f 791 477 476
+f 791 476 790
+f 792 478 477
+f 792 477 791
+f 793 479 478
+f 793 478 792
+f 794 480 479
+f 794 479 793
+f 795 481 480
+f 795 480 794
+f 796 482 481
+f 796 481 795
+f 797 483 482
+f 797 482 796
+f 798 484 483
+f 798 483 797
+f 769 455 484
+f 769 484 798
+f 485 487 488
+f 485 488 486
+f 799 513 175
+f 175 21 799
+f 512 800 668
+f 511 801 512
+f 801 800 512
+f 513 801 511
+f 799 802 513
+f 802 801 513
+f 803 492 491
+f 492 804 634
+f 803 804 492
+f 805 803 491
+f 495 805 491
+f 806 494 639
+f 805 495 494
+f 806 805 494
+f 807 493 496
+f 493 808 643
+f 807 808 493
+f 809 807 496
+f 498 809 496
+f 810 497 645
+f 809 498 497
+f 810 809 497
+f 811 499 500
+f 499 812 650
+f 811 812 499
+f 813 811 500
+f 503 813 500
+f 814 502 652
+f 813 503 502
+f 814 813 502
+f 815 505 506
+f 505 816 658
+f 815 816 505
+f 509 815 506
+f 509 817 815
+f 818 508 660
+f 817 509 508
+f 818 817 508
+f 515 819 21
+f 820 515 524
+f 820 819 515
+f 518 519 520
+f 517 519 518
+f 821 822 528
+f 527 821 528
+f 530 823 821
+f 530 821 527
+f 533 824 823
+f 533 823 530
+f 535 825 824
+f 535 824 533
+f 540 826 825
+f 540 825 535
+f 544 827 826
+f 544 826 540
+f 828 827 544
+f 547 828 544
+f 548 829 828
+f 548 828 547
+f 830 831 551
+f 551 829 548
+f 831 829 551
+f 829 832 833
+f 831 832 829
+f 831 834 832
+f 835 836 837
+f 832 838 836
+f 834 838 832
+f 836 839 837
+f 838 839 836
+f 840 830 557
+f 557 830 551
+f 841 840 557
+f 842 557 556
+f 842 841 557
+f 843 842 844
+f 843 841 842
+f 845 841 843
+f 846 847 848
+f 849 843 846
+f 849 845 843
+f 850 846 848
+f 850 849 846
+f 851 842 556
+f 565 851 556
+f 569 852 851
+f 569 851 565
+f 577 853 852
+f 577 852 569
+f 581 854 853
+f 581 853 577
+f 855 854 581
+f 587 855 581
+f 590 856 855
+f 590 855 587
+f 594 857 856
+f 594 856 590
+f 858 859 593
+f 593 857 594
+f 859 857 593
+f 857 860 861
+f 859 860 857
+f 859 862 860
+f 863 864 865
+f 860 866 864
+f 862 866 860
+f 864 867 865
+f 866 867 864
+f 858 593 868
+f 868 593 598
+f 869 868 598
+f 870 598 605
+f 870 869 598
+f 871 870 872
+f 871 869 870
+f 873 869 871
+f 874 875 876
+f 877 871 874
+f 877 873 871
+f 878 874 876
+f 878 877 874
+f 604 879 870
+f 604 870 605
+f 608 880 879
+f 608 879 604
+f 613 881 880
+f 613 880 608
+f 616 882 881
+f 616 881 613
+f 621 883 882
+f 621 882 616
+f 625 884 883
+f 625 883 621
+f 628 885 884
+f 628 884 625
+f 886 885 628
+f 629 886 628
+f 887 888 632
+f 632 886 629
+f 888 886 632
+f 886 889 890
+f 888 889 886
+f 888 891 889
+f 892 893 894
+f 889 895 893
+f 891 895 889
+f 893 896 894
+f 895 896 893
+f 632 638 887
+f 887 638 897
+f 898 899 900
+f 898 901 899
+f 637 902 638
+f 903 904 902
+f 899 905 904
+f 901 905 899
+f 904 906 902
+f 902 906 638
+f 906 897 638
+f 905 907 904
+f 904 907 906
+f 644 908 902
+f 644 902 637
+f 648 909 908
+f 648 908 644
+f 654 910 909
+f 654 909 648
+f 657 911 910
+f 657 910 654
+f 662 912 911
+f 662 911 657
+f 913 912 662
+f 664 913 662
+f 914 913 664
+f 667 914 664
+f 915 916 666
+f 666 914 667
+f 916 914 666
+f 914 917 918
+f 916 917 914
+f 916 919 917
+f 920 921 922
+f 917 923 921
+f 919 923 917
+f 921 924 922
+f 923 924 921
+f 522 915 666
+f 522 925 915
+f 525 926 522
+f 522 926 925
+f 523 668 800
+f 927 521 523
+f 927 523 800
+f 818 660 658
+f 818 658 816
+f 652 650 812
+f 814 652 812
+f 645 643 808
+f 810 645 808
+f 639 634 804
+f 806 639 804
+f 928 612 599
+f 929 334 612
+f 928 929 612
+f 928 599 596
+f 928 596 930
+f 931 607 698
+f 607 930 596
+f 931 930 607
+f 932 601 585
+f 933 695 601
+f 932 933 601
+f 932 585 583
+f 932 583 934
+f 935 595 694
+f 595 934 583
+f 935 934 595
+f 936 582 575
+f 937 692 582
+f 936 937 582
+f 575 573 938
+f 936 575 938
+f 939 579 690
+f 579 938 573
+f 939 938 579
+f 940 572 566
+f 941 688 572
+f 940 941 572
+f 566 564 942
+f 940 566 942
+f 943 570 687
+f 570 942 564
+f 943 942 570
+f 562 944 686
+f 945 562 558
+f 945 944 562
+f 558 553 946
+f 945 558 946
+f 560 946 553
+f 684 947 560
+f 947 946 560
+f 820 524 521
+f 820 521 927
+f 948 926 525
+f 822 525 528
+f 822 948 525
+f 949 822 950
+f 949 948 822
+f 951 948 949
+f 952 953 954
+f 955 949 952
+f 955 951 949
+f 956 952 954
+f 956 955 952
+f 545 957 958
+f 546 957 545
+f 959 957 546
+f 543 959 546
+f 959 543 541
+f 959 541 960
+f 960 541 545
+f 958 960 545
+f 532 961 962
+f 532 962 531
+f 963 961 532
+f 529 963 532
+f 964 529 526
+f 963 529 964
+f 964 526 531
+f 962 964 531
+f 537 965 966
+f 538 965 537
+f 967 965 538
+f 536 967 538
+f 967 536 534
+f 967 534 968
+f 968 534 537
+f 966 968 537
+f 552 969 970
+f 554 969 552
+f 971 969 554
+f 550 971 554
+f 971 550 549
+f 971 549 972
+f 972 549 552
+f 970 972 552
+f 563 973 974
+f 563 974 561
+f 559 975 563
+f 975 973 563
+f 976 559 555
+f 975 559 976
+f 974 976 561
+f 976 555 561
+f 574 977 978
+f 574 978 571
+f 568 979 574
+f 979 977 574
+f 980 568 567
+f 979 568 980
+f 978 980 571
+f 980 567 571
+f 584 981 982
+f 584 982 580
+f 578 983 584
+f 983 981 584
+f 984 578 576
+f 983 578 984
+f 982 984 580
+f 984 576 580
+f 592 985 986
+f 597 985 592
+f 589 987 597
+f 987 985 597
+f 987 589 586
+f 987 586 988
+f 986 988 592
+f 988 586 592
+f 642 989 641
+f 642 990 989
+f 640 991 642
+f 991 990 642
+f 992 640 636
+f 991 640 992
+f 989 992 641
+f 992 636 641
+f 610 993 609
+f 610 994 993
+f 995 994 610
+f 606 995 610
+f 996 606 603
+f 995 606 996
+f 996 603 609
+f 993 996 609
+f 618 997 998
+f 619 997 618
+f 999 997 619
+f 617 999 619
+f 999 615 1000
+f 999 617 615
+f 1000 615 618
+f 998 1000 618
+f 626 1001 1002
+f 627 1001 626
+f 1003 1001 627
+f 624 1003 627
+f 1003 622 1004
+f 1003 624 622
+f 1004 622 626
+f 1002 1004 626
+f 633 1005 1006
+f 635 1005 633
+f 1007 1005 635
+f 631 1007 635
+f 1007 630 1008
+f 1007 631 630
+f 1008 630 633
+f 1006 1008 633
+f 651 1009 649
+f 651 1010 1009
+f 647 1011 651
+f 1011 1010 651
+f 1012 647 646
+f 1011 647 1012
+f 1009 1012 649
+f 1012 646 649
+f 659 1013 656
+f 659 1014 1013
+f 655 1015 659
+f 1015 1014 659
+f 1016 655 653
+f 1015 655 1016
+f 1013 1016 656
+f 1016 653 656
+f 665 1017 1018
+f 669 1017 665
+f 663 1019 669
+f 1019 1017 669
+f 1019 661 1020
+f 1019 663 661
+f 1018 1020 665
+f 1020 661 665
+f 678 1021 1022
+f 679 1021 678
+f 1023 1021 679
+f 677 1023 679
+f 1023 677 676
+f 1023 676 1024
+f 1024 676 678
+f 1022 1024 678
+f 682 1025 1026
+f 683 1025 682
+f 1027 1025 683
+f 680 1027 683
+f 1027 680 681
+f 1027 681 1028
+f 1028 681 682
+f 1026 1028 682
+f 686 944 947
+f 686 947 684
+f 941 943 687
+f 688 941 687
+f 937 939 690
+f 692 937 690
+f 695 935 694
+f 695 933 935
+f 334 931 698
+f 929 931 334
+f 706 1029 1030
+f 707 1029 706
+f 1031 1029 707
+f 705 1031 707
+f 1031 705 704
+f 1031 704 1032
+f 1032 704 706
+f 1030 1032 706
+f 711 1033 1034
+f 711 1034 710
+f 708 1035 711
+f 1035 1033 711
+f 1036 708 709
+f 1035 708 1036
+f 1034 1036 710
+f 1036 709 710
+f 715 1037 1038
+f 715 1038 714
+f 713 1039 715
+f 1039 1037 715
+f 1040 713 712
+f 1039 713 1040
+f 1038 1040 714
+f 1040 712 714
+f 721 1041 1042
+f 721 1042 720
+f 718 1043 721
+f 1043 1041 721
+f 1044 718 716
+f 1043 718 1044
+f 1042 1044 720
+f 1044 716 720
+f 726 1045 1046
+f 727 1045 726
+f 724 1047 727
+f 1047 1045 727
+f 1047 724 722
+f 1047 722 1048
+f 1046 1048 726
+f 1048 722 726
+f 733 1049 732
+f 733 1050 1049
+f 1051 1050 733
+f 731 1051 733
+f 1052 731 728
+f 1051 731 1052
+f 1052 728 732
+f 1049 1052 732
+f 746 1053 1054
+f 747 1053 746
+f 1055 1053 747
+f 745 1055 747
+f 1055 744 1056
+f 1055 745 744
+f 1056 744 746
+f 1054 1056 746
+f 750 1057 1058
+f 751 1057 750
+f 1059 1057 751
+f 748 1059 751
+f 1059 749 1060
+f 1059 748 749
+f 1060 749 750
+f 1058 1060 750
+f 754 1061 1062
+f 755 1061 754
+f 1063 1061 755
+f 753 1063 755
+f 1063 752 1064
+f 1063 753 752
+f 1064 752 754
+f 1062 1064 754
+f 759 1065 758
+f 759 1066 1065
+f 756 1067 759
+f 1067 1066 759
+f 1068 756 757
+f 1067 756 1068
+f 1065 1068 758
+f 1068 757 758
+f 763 1069 762
+f 763 1070 1069
+f 761 1071 763
+f 1071 1070 763
+f 1072 761 760
+f 1071 761 1072
+f 1069 1072 762
+f 1072 760 762
+f 767 1073 766
+f 767 1074 1073
+f 765 1075 767
+f 1075 1074 767
+f 1076 765 764
+f 1075 765 1076
+f 1073 1076 766
+f 1076 764 766
+f 1077 768 769
+f 1077 769 1078
+f 1079 770 768
+f 1079 768 1077
+f 1080 771 770
+f 1080 770 1079
+f 1081 772 771
+f 1081 771 1080
+f 1082 773 772
+f 1082 772 1081
+f 1083 774 773
+f 1083 773 1082
+f 1084 775 774
+f 1084 774 1083
+f 1085 775 1084
+f 776 775 1085
+f 1086 776 1085
+f 777 776 1086
+f 1087 777 1086
+f 778 777 1087
+f 1088 778 1087
+f 779 778 1088
+f 780 779 1088
+f 1089 780 1088
+f 781 780 1089
+f 1090 781 1089
+f 782 781 1090
+f 1091 782 1090
+f 783 782 1091
+f 1092 783 1091
+f 784 783 1092
+f 1093 784 1092
+f 785 784 1093
+f 1094 785 1093
+f 786 785 1094
+f 1095 786 1094
+f 787 786 1095
+f 1096 787 1095
+f 788 787 1096
+f 1097 788 1096
+f 789 788 1097
+f 1098 789 1097
+f 790 789 1098
+f 1099 790 1098
+f 791 790 1099
+f 1100 791 1099
+f 792 791 1100
+f 1101 792 1100
+f 793 792 1101
+f 1102 793 1101
+f 1103 793 1102
+f 794 793 1103
+f 1104 794 1103
+f 795 794 1104
+f 1105 795 1104
+f 796 795 1105
+f 1106 796 1105
+f 797 796 1106
+f 1107 797 1106
+f 798 797 1107
+f 1108 798 1107
+f 769 798 1108
+f 1078 769 1108
+f 21 802 799
+f 819 802 21
+f 801 927 800
+f 802 927 801
+f 805 806 804
+f 805 804 803
+f 807 810 808
+f 809 810 807
+f 811 814 812
+f 813 814 811
+f 817 818 816
+f 817 816 815
+f 819 820 927
+f 819 927 802
+f 821 950 822
+f 821 1109 950
+f 823 1110 1109
+f 823 1109 821
+f 824 1111 1110
+f 824 1110 823
+f 825 1112 1111
+f 825 1111 824
+f 826 1113 1112
+f 826 1112 825
+f 1114 1113 826
+f 827 1114 826
+f 1115 1114 827
+f 828 1115 827
+f 833 1115 828
+f 829 833 828
+f 845 849 1116
+f 1117 845 1116
+f 834 1118 838
+f 834 1117 1118
+f 834 845 1117
+f 1116 849 850
+f 1117 1116 850
+f 839 1118 1117
+f 839 1117 850
+f 838 1118 839
+f 1119 1120 956
+f 1119 956 954
+f 1121 1122 1120
+f 1121 1120 1119
+f 1123 1124 1122
+f 1123 1122 1121
+f 1125 1126 1124
+f 1125 1124 1123
+f 1127 1128 1126
+f 1127 1126 1125
+f 1129 1130 1128
+f 1129 1128 1127
+f 1131 1132 1130
+f 1131 1130 1129
+f 837 839 1132
+f 837 1132 1131
+f 1133 1119 954
+f 1133 954 953
+f 1134 1121 1119
+f 1134 1119 1133
+f 1135 1123 1121
+f 1135 1121 1134
+f 1136 1125 1123
+f 1136 1123 1135
+f 1137 1127 1125
+f 1137 1125 1136
+f 1138 1129 1127
+f 1138 1127 1137
+f 1131 1129 1138
+f 1139 1131 1138
+f 837 1131 1139
+f 835 837 1139
+f 1133 953 952
+f 1140 1133 952
+f 1134 1133 1140
+f 1141 1134 1140
+f 1135 1134 1141
+f 1142 1135 1141
+f 1136 1135 1142
+f 1143 1136 1142
+f 1137 1136 1143
+f 1144 1137 1143
+f 1145 1138 1137
+f 1145 1137 1144
+f 1146 1139 1138
+f 1146 1138 1145
+f 836 835 1139
+f 836 1139 1146
+f 1147 952 949
+f 1147 1140 952
+f 1148 1141 1140
+f 1148 1140 1147
+f 1149 1142 1141
+f 1149 1141 1148
+f 1150 1143 1142
+f 1150 1142 1149
+f 1151 1144 1143
+f 1151 1143 1150
+f 1152 1145 1144
+f 1152 1144 1151
+f 1146 1145 1152
+f 1153 1146 1152
+f 836 1146 1153
+f 832 836 1153
+f 1109 1147 949
+f 1109 949 950
+f 1110 1148 1147
+f 1110 1147 1109
+f 1111 1149 1148
+f 1111 1148 1110
+f 1112 1150 1149
+f 1112 1149 1111
+f 1113 1151 1150
+f 1113 1150 1112
+f 1152 1151 1113
+f 1114 1152 1113
+f 1115 1153 1152
+f 1115 1152 1114
+f 832 1153 1115
+f 833 832 1115
+f 841 831 830
+f 840 841 830
+f 841 834 831
+f 841 845 834
+f 1154 850 848
+f 1155 1154 848
+f 1156 1154 1155
+f 1157 1158 1156
+f 1157 1156 1155
+f 1159 1160 1158
+f 1159 1158 1157
+f 1161 1162 1160
+f 1161 1160 1159
+f 1163 1164 1162
+f 1163 1162 1161
+f 865 867 1164
+f 865 1164 1163
+f 1165 1155 848
+f 1165 848 847
+f 1157 1155 1165
+f 1166 1157 1165
+f 1167 1157 1166
+f 1159 1157 1167
+f 1168 1159 1167
+f 1161 1159 1168
+f 1169 1163 1161
+f 1169 1161 1168
+f 863 865 1163
+f 863 1163 1169
+f 1165 847 846
+f 1170 1165 846
+f 1166 1165 1170
+f 1171 1166 1170
+f 1172 1167 1166
+f 1172 1166 1171
+f 1173 1168 1167
+f 1173 1167 1172
+f 1174 1169 1168
+f 1174 1168 1173
+f 864 863 1169
+f 864 1169 1174
+f 1175 1170 846
+f 1175 846 843
+f 1176 1171 1170
+f 1176 1170 1175
+f 1177 1172 1171
+f 1177 1171 1176
+f 1178 1173 1172
+f 1178 1172 1177
+f 1179 1174 1173
+f 1179 1173 1178
+f 1180 864 1174
+f 1180 1174 1179
+f 860 864 1180
+f 1175 843 844
+f 1181 1175 844
+f 1176 1175 1181
+f 1182 1176 1181
+f 1177 1176 1182
+f 1183 1177 1182
+f 1178 1177 1183
+f 1184 1178 1183
+f 1179 1178 1184
+f 1185 1179 1184
+f 1186 1180 1179
+f 1186 1179 1185
+f 861 860 1180
+f 861 1180 1186
+f 851 1181 844
+f 851 844 842
+f 1182 1181 851
+f 852 1182 851
+f 1183 1182 852
+f 853 1183 852
+f 1184 1183 853
+f 854 1184 853
+f 1185 1184 854
+f 855 1185 854
+f 1186 1185 855
+f 856 1186 855
+f 861 1186 856
+f 857 861 856
+f 1187 873 877
+f 1188 862 873
+f 1188 873 1187
+f 1189 862 1188
+f 866 862 1189
+f 1190 1188 1187
+f 1190 1187 877
+f 1190 877 878
+f 1191 1189 1188
+f 1191 1188 1190
+f 867 866 1189
+f 867 1189 1191
+f 868 869 859
+f 868 859 858
+f 859 873 862
+f 869 873 859
+f 1192 1193 878
+f 1192 878 876
+f 1194 1195 1193
+f 1194 1193 1192
+f 1196 1197 1195
+f 1196 1195 1194
+f 1198 1199 1197
+f 1198 1197 1196
+f 1200 1201 1199
+f 1200 1199 1198
+f 1202 1203 1201
+f 1202 1201 1200
+f 1204 1205 1203
+f 1204 1203 1202
+f 894 896 1205
+f 894 1205 1204
+f 1206 1192 876
+f 1206 876 875
+f 1207 1194 1192
+f 1207 1192 1206
+f 1208 1196 1194
+f 1208 1194 1207
+f 1209 1198 1196
+f 1209 1196 1208
+f 1210 1200 1198
+f 1210 1198 1209
+f 1211 1202 1200
+f 1211 1200 1210
+f 1204 1202 1211
+f 1212 1204 1211
+f 894 1204 1212
+f 892 894 1212
+f 1206 875 874
+f 1213 1206 874
+f 1207 1206 1213
+f 1214 1207 1213
+f 1208 1207 1214
+f 1215 1208 1214
+f 1209 1208 1215
+f 1216 1209 1215
+f 1210 1209 1216
+f 1217 1210 1216
+f 1218 1211 1210
+f 1218 1210 1217
+f 1219 1212 1211
+f 1219 1211 1218
+f 893 892 1212
+f 893 1212 1219
+f 1220 874 871
+f 1220 1213 874
+f 1221 1214 1213
+f 1221 1213 1220
+f 1222 1215 1214
+f 1222 1214 1221
+f 1223 1216 1215
+f 1223 1215 1222
+f 1224 1217 1216
+f 1224 1216 1223
+f 1225 1218 1217
+f 1225 1217 1224
+f 1219 1218 1225
+f 1226 1219 1225
+f 893 1219 1226
+f 889 893 1226
+f 1227 1220 871
+f 1227 871 872
+f 1228 1221 1220
+f 1228 1220 1227
+f 1229 1222 1221
+f 1229 1221 1228
+f 1230 1223 1222
+f 1230 1222 1229
+f 1231 1224 1223
+f 1231 1223 1230
+f 1232 1225 1224
+f 1232 1224 1231
+f 1226 1225 1232
+f 1233 1226 1232
+f 890 889 1226
+f 890 1226 1233
+f 879 872 870
+f 879 1227 872
+f 880 1228 1227
+f 880 1227 879
+f 881 1229 1228
+f 881 1228 880
+f 882 1230 1229
+f 882 1229 881
+f 883 1231 1230
+f 883 1230 882
+f 1232 1231 883
+f 884 1232 883
+f 1233 1232 884
+f 885 1233 884
+f 890 1233 885
+f 886 890 885
+f 1234 895 891
+f 1235 1234 891
+f 907 1235 891
+f 1236 1235 907
+f 905 1236 907
+f 1234 896 895
+f 1235 896 1234
+f 901 1235 1236
+f 901 1236 905
+f 901 896 1235
+f 906 888 887
+f 897 906 887
+f 906 891 888
+f 906 907 891
+f 908 1237 903
+f 908 903 902
+f 1238 1237 908
+f 909 1238 908
+f 1239 1238 909
+f 910 1239 909
+f 1240 1239 910
+f 911 1240 910
+f 1241 1240 911
+f 912 1241 911
+f 1242 1241 912
+f 913 1242 912
+f 918 1242 913
+f 914 918 913
+f 1237 1243 904
+f 1237 904 903
+f 1238 1244 1243
+f 1238 1243 1237
+f 1239 1245 1244
+f 1239 1244 1238
+f 1246 1245 1239
+f 1240 1246 1239
+f 1241 1247 1246
+f 1241 1246 1240
+f 1242 1248 1247
+f 1242 1247 1241
+f 918 917 1248
+f 918 1248 1242
+f 1243 1249 899
+f 1243 899 904
+f 1244 1250 1249
+f 1244 1249 1243
+f 1245 1251 1250
+f 1245 1250 1244
+f 1246 1252 1251
+f 1246 1251 1245
+f 1247 1253 1252
+f 1247 1252 1246
+f 1248 921 1253
+f 1248 1253 1247
+f 917 921 1248
+f 1254 900 899
+f 1249 1254 899
+f 1255 1254 1249
+f 1250 1255 1249
+f 1251 1256 1255
+f 1251 1255 1250
+f 1252 1257 1256
+f 1252 1256 1251
+f 1253 1258 1257
+f 1253 1257 1252
+f 921 920 1258
+f 921 1258 1253
+f 1254 1259 898
+f 1254 898 900
+f 1260 1259 1254
+f 1255 1260 1254
+f 1256 1260 1255
+f 1261 1260 1256
+f 1257 1261 1256
+f 1262 1261 1257
+f 1258 1263 1262
+f 1258 1262 1257
+f 920 922 1263
+f 920 1263 1258
+f 1264 901 898
+f 1259 1264 898
+f 1265 1264 1259
+f 1260 1266 1265
+f 1260 1265 1259
+f 1261 1267 1266
+f 1261 1266 1260
+f 1262 1268 1267
+f 1262 1267 1261
+f 1263 1269 1268
+f 1263 1268 1262
+f 922 924 1269
+f 922 1269 1263
+f 919 1270 923
+f 919 1271 1270
+f 1272 1273 1274
+f 1272 1275 1271
+f 1272 1274 1275
+f 1272 1271 919
+f 951 1276 1273
+f 951 1277 1276
+f 951 955 1277
+f 951 1273 1272
+f 1270 1278 924
+f 1270 924 923
+f 1271 1278 1270
+f 1275 1278 1271
+f 1274 1278 1275
+f 1273 1278 1274
+f 1276 956 1278
+f 1276 1278 1273
+f 1277 956 1276
+f 955 956 1277
+f 915 1279 916
+f 925 1279 915
+f 916 1272 919
+f 1279 1272 916
+f 926 948 1279
+f 926 1279 925
+f 929 928 930
+f 929 930 931
+f 933 932 934
+f 933 934 935
+f 939 936 938
+f 937 936 939
+f 943 940 942
+f 941 940 943
+f 944 945 946
+f 944 946 947
+f 948 951 1272
+f 948 1272 1279
+f 957 959 960
+f 957 960 958
+f 962 963 964
+f 961 963 962
+f 965 967 968
+f 965 968 966
+f 969 971 972
+f 969 972 970
+f 974 975 976
+f 973 975 974
+f 978 979 980
+f 977 979 978
+f 982 983 984
+f 981 983 982
+f 985 987 988
+f 985 988 986
+f 989 991 992
+f 990 991 989
+f 993 995 996
+f 994 995 993
+f 997 999 1000
+f 997 1000 998
+f 1001 1003 1004
+f 1001 1004 1002
+f 1005 1007 1008
+f 1005 1008 1006
+f 1009 1011 1012
+f 1010 1011 1009
+f 1013 1015 1016
+f 1014 1015 1013
+f 1017 1019 1020
+f 1017 1020 1018
+f 1021 1023 1024
+f 1021 1024 1022
+f 1025 1027 1028
+f 1025 1028 1026
+f 1029 1031 1032
+f 1029 1032 1030
+f 1034 1035 1036
+f 1033 1035 1034
+f 1038 1039 1040
+f 1037 1039 1038
+f 1042 1043 1044
+f 1041 1043 1042
+f 1045 1047 1048
+f 1045 1048 1046
+f 1049 1051 1052
+f 1050 1051 1049
+f 1053 1055 1056
+f 1053 1056 1054
+f 1057 1059 1060
+f 1057 1060 1058
+f 1061 1063 1064
+f 1061 1064 1062
+f 1065 1067 1068
+f 1066 1067 1065
+f 1069 1071 1072
+f 1070 1071 1069
+f 1073 1075 1076
+f 1074 1075 1073
+f 1077 1078 1280
+f 1281 1077 1280
+f 1079 1077 1281
+f 1282 1079 1281
+f 1080 1079 1282
+f 1283 1080 1282
+f 1081 1080 1283
+f 1284 1081 1283
+f 1082 1081 1284
+f 1285 1082 1284
+f 1083 1082 1285
+f 1286 1083 1285
+f 1084 1083 1286
+f 1287 1084 1286
+f 1085 1084 1287
+f 1288 1085 1287
+f 1086 1085 1288
+f 1289 1086 1288
+f 1087 1086 1289
+f 1290 1087 1289
+f 1088 1087 1290
+f 1291 1088 1290
+f 1089 1088 1291
+f 1292 1089 1291
+f 1090 1089 1292
+f 1293 1090 1292
+f 1091 1090 1293
+f 1294 1091 1293
+f 1092 1091 1294
+f 1295 1092 1294
+f 1093 1092 1295
+f 1296 1093 1295
+f 1094 1093 1296
+f 1297 1094 1296
+f 1095 1094 1297
+f 1298 1095 1297
+f 1096 1095 1298
+f 1299 1096 1298
+f 1097 1096 1299
+f 1300 1097 1299
+f 1098 1097 1300
+f 1301 1098 1300
+f 1099 1098 1301
+f 1302 1099 1301
+f 1100 1099 1302
+f 1303 1100 1302
+f 1101 1100 1303
+f 1304 1101 1303
+f 1102 1101 1304
+f 1305 1102 1304
+f 1103 1102 1305
+f 1306 1103 1305
+f 1104 1103 1306
+f 1307 1104 1306
+f 1105 1104 1307
+f 1308 1105 1307
+f 1106 1105 1308
+f 1309 1106 1308
+f 1107 1106 1309
+f 1310 1107 1309
+f 1108 1107 1310
+f 1311 1108 1310
+f 1078 1108 1311
+f 1280 1078 1311
+f 867 1191 1190
+f 867 1190 878
+f 1164 878 1193
+f 1164 867 878
+f 1162 1193 1195
+f 1162 1164 1193
+f 1160 1195 1197
+f 1160 1162 1195
+f 1158 1197 1199
+f 1158 1160 1197
+f 1156 1199 1201
+f 1156 1158 1199
+f 1154 1201 1203
+f 1154 1203 1205
+f 1154 1156 1201
+f 850 1205 896
+f 850 1154 1205
+f 839 896 901
+f 839 850 896
+f 1132 901 1264
+f 1132 839 901
+f 1130 1132 1264
+f 956 1269 924
+f 956 924 1278
+f 1128 1264 1265
+f 1128 1130 1264
+f 1120 1269 956
+f 1120 1268 1269
+f 1126 1128 1265
+f 1126 1265 1266
+f 1122 1267 1268
+f 1122 1268 1120
+f 1124 1126 1266
+f 1124 1267 1122
+f 1124 1266 1267
+f 1312 1313 1280
+f 1314 1280 1313
+f 1281 1280 1314
+f 1315 1313 1312
+f 1316 1281 1314
+f 1317 1281 1318
+f 1319 1281 1316
+f 1319 1318 1281
+f 1282 1281 1317
+f 1320 1317 1321
+f 1320 1282 1317
+f 1322 1282 1320
+f 1283 1282 1322
+f 1283 1322 1323
+f 1324 1322 1320
+f 1325 1283 1323
+f 1284 1283 1326
+f 1284 1326 1327
+f 1328 1326 1283
+f 1328 1283 1325
+f 1329 1284 1327
+f 1330 1285 1284
+f 1330 1284 1329
+f 1331 1285 1330
+f 1331 1332 1285
+f 1286 1285 1332
+f 1286 1332 1333
+f 1286 1333 1334
+f 1335 1286 1336
+f 1337 1286 1334
+f 1337 1336 1286
+f 1287 1286 1335
+f 1287 1335 1338
+f 1339 1287 1340
+f 1341 1287 1338
+f 1341 1340 1287
+f 1288 1287 1339
+f 1288 1339 1342
+f 1288 1342 1343
+f 1344 1342 1339
+f 1344 1339 1345
+f 1346 1288 1343
+f 1347 1288 1346
+f 1347 1348 1288
+f 1289 1288 1348
+f 1289 1348 1349
+f 1289 1349 1350
+f 1351 1289 1352
+f 1353 1289 1350
+f 1353 1352 1289
+f 1290 1289 1351
+f 1290 1351 1354
+f 1355 1290 1356
+f 1357 1290 1354
+f 1357 1356 1290
+f 1358 1355 1359
+f 1358 1290 1355
+f 1291 1358 1360
+f 1291 1290 1358
+f 1361 1358 1359
+f 1362 1291 1360
+f 1363 1291 1362
+f 1292 1291 1363
+f 1364 1292 1363
+f 1365 1292 1364
+f 1366 1364 1363
+f 1367 1292 1365
+f 1293 1292 1367
+f 1293 1367 1368
+f 1369 1365 1370
+f 1369 1367 1365
+f 1371 1293 1368
+f 1372 1293 1371
+f 1373 1293 1372
+f 1294 1293 1373
+f 1374 1294 1373
+f 1375 1373 1372
+f 1376 1294 1374
+f 1376 1374 1377
+f 1295 1376 1378
+f 1295 1294 1376
+f 1379 1376 1377
+f 1380 1295 1378
+f 1296 1381 1382
+f 1296 1295 1381
+f 1383 1381 1295
+f 1383 1295 1380
+f 1384 1296 1382
+f 1385 1296 1386
+f 1387 1296 1384
+f 1387 1386 1296
+f 1297 1296 1385
+f 1388 1385 1389
+f 1388 1297 1385
+f 1390 1297 1388
+f 1298 1390 1391
+f 1298 1297 1390
+f 1392 1390 1388
+f 1393 1298 1391
+f 1299 1394 1395
+f 1299 1298 1394
+f 1396 1298 1393
+f 1396 1394 1298
+f 1397 1299 1395
+f 1398 1300 1299
+f 1398 1299 1397
+f 1301 1399 1400
+f 1301 1300 1399
+f 1401 1300 1398
+f 1401 1399 1300
+f 1402 1301 1400
+f 1403 1301 1402
+f 1403 1404 1301
+f 1302 1404 1405
+f 1302 1405 1406
+f 1302 1301 1404
+f 1407 1408 1302
+f 1407 1302 1406
+f 1303 1302 1408
+f 1303 1408 1409
+f 1303 1409 1410
+f 1411 1303 1412
+f 1413 1303 1410
+f 1413 1412 1303
+f 1414 1411 1415
+f 1304 1303 1411
+f 1304 1411 1414
+f 1304 1414 1416
+f 1417 1414 1415
+f 1418 1304 1416
+f 1419 1420 1304
+f 1419 1304 1418
+f 1305 1304 1420
+f 1305 1420 1421
+f 1305 1421 1422
+f 1306 1305 1423
+f 1306 1423 1424
+f 1425 1423 1305
+f 1425 1305 1422
+f 1426 1306 1424
+f 1427 1306 1428
+f 1429 1306 1426
+f 1429 1428 1306
+f 1307 1427 1430
+f 1307 1306 1427
+f 1431 1307 1430
+f 1432 1307 1431
+f 1308 1432 1433
+f 1308 1307 1432
+f 1434 1432 1431
+f 1435 1308 1433
+f 1309 1436 1437
+f 1309 1308 1436
+f 1438 1308 1435
+f 1438 1436 1308
+f 1439 1309 1437
+f 1440 1309 1439
+f 1441 1309 1440
+f 1310 1441 1442
+f 1310 1309 1441
+f 1443 1441 1440
+f 1444 1310 1442
+f 1445 1311 1446
+f 1280 1311 1445
+f 1447 1446 1311
+f 1447 1311 1310
+f 1447 1310 1444
+f 1312 1445 1448
+f 1312 1280 1445
+f 1449 1312 1448
+f 1449 1448 1450
+f 1451 1452 1453
+f 1452 1454 1453
+f 1445 1455 1448
+f 1455 1450 1448
+f 1450 1456 1457
+f 1457 1456 1452
+f 1455 1456 1450
+f 1456 1454 1452
+f 1455 1445 1446
+f 1455 1446 1458
+f 1459 1460 1461
+f 1461 1460 1462
+f 1460 1463 1464
+f 1463 1465 1464
+f 1465 1458 1447
+f 1447 1458 1446
+f 1463 1458 1465
+f 1459 1463 1460
+f 1447 1444 1466
+f 1465 1447 1466
+f 1467 1468 1469
+f 1467 1469 1470
+f 1471 1467 1472
+f 1466 1471 1472
+f 1473 1466 1444
+f 1473 1444 1442
+f 1473 1471 1466
+f 1471 1468 1467
+f 1473 1442 1441
+f 1473 1441 1474
+f 1475 1476 1477
+f 1478 1475 1477
+f 1443 1474 1441
+f 1479 1474 1443
+f 1480 1479 1481
+f 1480 1481 1475
+f 1480 1474 1479
+f 1478 1480 1475
+f 1482 1440 1439
+f 1482 1439 1483
+f 1443 1440 1482
+f 1479 1443 1482
+f 1484 1485 1486
+f 1485 1487 1486
+f 1488 1439 1437
+f 1488 1483 1439
+f 1483 1489 1490
+f 1490 1489 1485
+f 1488 1489 1483
+f 1489 1487 1485
+f 1488 1437 1436
+f 1488 1436 1491
+f 1492 1493 1494
+f 1494 1493 1495
+f 1493 1496 1497
+f 1496 1498 1497
+f 1498 1491 1438
+f 1438 1491 1436
+f 1496 1491 1498
+f 1492 1496 1493
+f 1498 1438 1435
+f 1498 1435 1499
+f 1500 1501 1502
+f 1500 1502 1503
+f 1504 1500 1505
+f 1499 1504 1505
+f 1506 1499 1435
+f 1506 1435 1433
+f 1506 1504 1499
+f 1504 1501 1500
+f 1506 1433 1432
+f 1506 1432 1507
+f 1508 1509 1510
+f 1511 1508 1510
+f 1434 1507 1432
+f 1512 1507 1434
+f 1513 1512 1514
+f 1513 1514 1508
+f 1513 1507 1512
+f 1511 1513 1508
+f 1431 1430 1515
+f 1516 1431 1515
+f 1434 1431 1516
+f 1512 1434 1516
+f 1517 1518 1519
+f 1518 1520 1519
+f 1521 1430 1427
+f 1521 1515 1430
+f 1515 1522 1523
+f 1523 1522 1518
+f 1521 1522 1515
+f 1522 1520 1518
+f 1427 1428 1524
+f 1521 1427 1524
+f 1525 1526 1527
+f 1527 1526 1528
+f 1526 1529 1530
+f 1529 1531 1530
+f 1531 1524 1429
+f 1429 1524 1428
+f 1529 1524 1531
+f 1525 1529 1526
+f 1429 1426 1532
+f 1531 1429 1532
+f 1533 1534 1535
+f 1534 1536 1535
+f 1537 1426 1424
+f 1537 1532 1426
+f 1532 1538 1539
+f 1539 1538 1534
+f 1537 1538 1532
+f 1538 1536 1534
+f 1424 1423 1540
+f 1537 1424 1540
+f 1541 1542 1543
+f 1543 1542 1544
+f 1542 1545 1546
+f 1545 1547 1546
+f 1547 1540 1425
+f 1425 1540 1423
+f 1545 1540 1547
+f 1541 1545 1542
+f 1425 1422 1548
+f 1547 1425 1548
+f 1549 1550 1551
+f 1549 1551 1552
+f 1553 1549 1554
+f 1548 1553 1554
+f 1555 1548 1422
+f 1555 1422 1421
+f 1555 1553 1548
+f 1553 1550 1549
+f 1421 1420 1556
+f 1555 1421 1556
+f 1557 1558 1559
+f 1560 1557 1559
+f 1556 1420 1419
+f 1561 1556 1419
+f 1562 1561 1563
+f 1562 1563 1557
+f 1562 1556 1561
+f 1560 1562 1557
+f 1419 1418 1564
+f 1561 1419 1564
+f 1565 1566 1567
+f 1565 1567 1568
+f 1569 1565 1570
+f 1564 1569 1570
+f 1571 1564 1418
+f 1571 1418 1416
+f 1571 1569 1564
+f 1569 1566 1565
+f 1416 1414 1572
+f 1571 1416 1572
+f 1573 1574 1575
+f 1576 1573 1575
+f 1572 1414 1417
+f 1577 1572 1417
+f 1578 1577 1579
+f 1578 1579 1573
+f 1578 1572 1577
+f 1576 1578 1573
+f 1417 1415 1580
+f 1577 1417 1580
+f 1581 1582 1583
+f 1582 1584 1583
+f 1582 1585 1584
+f 1411 1586 1415
+f 1586 1580 1415
+f 1580 1587 1588
+f 1588 1587 1582
+f 1586 1587 1580
+f 1587 1585 1582
+f 1411 1412 1589
+f 1586 1411 1589
+f 1590 1591 1592
+f 1592 1591 1593
+f 1593 1591 1594
+f 1591 1595 1596
+f 1595 1597 1596
+f 1597 1589 1413
+f 1413 1589 1412
+f 1595 1589 1597
+f 1590 1595 1591
+f 1597 1413 1410
+f 1597 1410 1598
+f 1599 1600 1601
+f 1600 1602 1601
+f 1600 1603 1602
+f 1409 1604 1410
+f 1604 1598 1410
+f 1598 1605 1606
+f 1606 1605 1600
+f 1604 1605 1598
+f 1605 1603 1600
+f 1409 1408 1607
+f 1604 1409 1607
+f 1608 1609 1610
+f 1610 1609 1611
+f 1611 1609 1612
+f 1609 1613 1614
+f 1613 1615 1614
+f 1615 1607 1407
+f 1407 1607 1408
+f 1613 1607 1615
+f 1608 1613 1609
+f 1615 1407 1406
+f 1615 1406 1616
+f 1617 1618 1619
+f 1617 1619 1620
+f 1617 1620 1621
+f 1622 1617 1623
+f 1616 1622 1623
+f 1624 1616 1406
+f 1624 1406 1405
+f 1624 1622 1616
+f 1622 1618 1617
+f 1405 1404 1625
+f 1624 1405 1625
+f 1626 1627 1628
+f 1629 1626 1628
+f 1630 1626 1629
+f 1625 1404 1403
+f 1631 1625 1403
+f 1632 1631 1633
+f 1632 1633 1626
+f 1632 1625 1631
+f 1630 1632 1626
+f 1631 1403 1402
+f 1631 1402 1634
+f 1635 1636 1637
+f 1635 1637 1638
+f 1635 1638 1639
+f 1640 1635 1641
+f 1634 1640 1641
+f 1642 1634 1402
+f 1642 1402 1400
+f 1642 1640 1634
+f 1640 1636 1635
+f 1400 1399 1643
+f 1642 1400 1643
+f 1644 1645 1646
+f 1647 1644 1646
+f 1648 1644 1647
+f 1643 1399 1401
+f 1649 1643 1401
+f 1650 1649 1651
+f 1650 1651 1644
+f 1650 1643 1649
+f 1648 1650 1644
+f 1652 1398 1397
+f 1652 1397 1653
+f 1649 1401 1398
+f 1649 1398 1652
+f 1654 1655 1656
+f 1655 1657 1656
+f 1655 1658 1657
+f 1395 1659 1397
+f 1659 1653 1397
+f 1653 1660 1661
+f 1661 1660 1655
+f 1659 1660 1653
+f 1660 1658 1655
+f 1659 1395 1394
+f 1659 1394 1662
+f 1663 1664 1665
+f 1665 1664 1666
+f 1666 1664 1667
+f 1664 1668 1669
+f 1668 1670 1669
+f 1670 1662 1396
+f 1396 1662 1394
+f 1668 1662 1670
+f 1663 1668 1664
+f 1396 1393 1671
+f 1670 1396 1671
+f 1672 1673 1674
+f 1672 1674 1675
+f 1672 1675 1676
+f 1677 1672 1678
+f 1671 1677 1678
+f 1679 1671 1393
+f 1679 1393 1391
+f 1679 1677 1671
+f 1677 1673 1672
+f 1679 1391 1390
+f 1679 1390 1680
+f 1681 1682 1683
+f 1684 1681 1683
+f 1685 1681 1684
+f 1680 1390 1392
+f 1686 1680 1392
+f 1687 1686 1688
+f 1687 1688 1681
+f 1687 1680 1686
+f 1685 1687 1681
+f 1689 1388 1389
+f 1689 1389 1690
+f 1392 1388 1689
+f 1686 1392 1689
+f 1691 1692 1693
+f 1692 1694 1693
+f 1692 1695 1694
+f 1385 1696 1389
+f 1696 1690 1389
+f 1690 1697 1698
+f 1698 1697 1692
+f 1696 1697 1690
+f 1697 1695 1692
+f 1696 1385 1386
+f 1696 1386 1699
+f 1700 1701 1702
+f 1702 1701 1703
+f 1703 1701 1704
+f 1701 1705 1706
+f 1705 1707 1706
+f 1707 1699 1387
+f 1387 1699 1386
+f 1705 1699 1707
+f 1700 1705 1701
+f 1707 1387 1384
+f 1707 1384 1708
+f 1709 1710 1711
+f 1709 1711 1712
+f 1709 1712 1713
+f 1714 1709 1715
+f 1708 1714 1715
+f 1716 1708 1384
+f 1716 1384 1382
+f 1716 1714 1708
+f 1714 1710 1709
+f 1716 1382 1381
+f 1716 1381 1717
+f 1718 1719 1720
+f 1721 1718 1720
+f 1722 1718 1721
+f 1717 1381 1383
+f 1723 1717 1383
+f 1724 1723 1725
+f 1724 1725 1718
+f 1724 1717 1723
+f 1722 1724 1718
+f 1383 1380 1726
+f 1723 1383 1726
+f 1727 1728 1729
+f 1728 1730 1729
+f 1378 1731 1380
+f 1731 1726 1380
+f 1726 1732 1733
+f 1733 1732 1728
+f 1731 1732 1726
+f 1732 1730 1728
+f 1731 1378 1376
+f 1731 1376 1734
+f 1735 1736 1737
+f 1737 1736 1738
+f 1736 1739 1740
+f 1739 1741 1740
+f 1741 1734 1379
+f 1379 1734 1376
+f 1739 1734 1741
+f 1735 1739 1736
+f 1379 1377 1742
+f 1741 1379 1742
+f 1743 1744 1745
+f 1743 1745 1746
+f 1747 1743 1748
+f 1742 1747 1748
+f 1749 1742 1377
+f 1749 1377 1374
+f 1749 1747 1742
+f 1747 1744 1743
+f 1749 1374 1373
+f 1749 1373 1750
+f 1751 1752 1753
+f 1754 1751 1753
+f 1375 1750 1373
+f 1755 1750 1375
+f 1756 1755 1757
+f 1756 1757 1751
+f 1756 1750 1755
+f 1754 1756 1751
+f 1758 1372 1371
+f 1758 1371 1759
+f 1375 1372 1758
+f 1755 1375 1758
+f 1760 1761 1762
+f 1761 1763 1762
+f 1764 1371 1368
+f 1764 1759 1371
+f 1759 1765 1766
+f 1766 1765 1761
+f 1764 1765 1759
+f 1765 1763 1761
+f 1764 1368 1367
+f 1764 1367 1767
+f 1768 1769 1770
+f 1770 1769 1771
+f 1769 1772 1773
+f 1772 1774 1773
+f 1774 1767 1369
+f 1369 1767 1367
+f 1772 1767 1774
+f 1768 1772 1769
+f 1774 1369 1370
+f 1774 1370 1775
+f 1776 1777 1778
+f 1776 1778 1779
+f 1780 1776 1781
+f 1775 1780 1781
+f 1782 1775 1370
+f 1782 1370 1365
+f 1782 1780 1775
+f 1780 1777 1776
+f 1782 1365 1364
+f 1782 1364 1783
+f 1784 1785 1786
+f 1787 1784 1786
+f 1366 1783 1364
+f 1788 1783 1366
+f 1789 1788 1790
+f 1789 1790 1784
+f 1789 1783 1788
+f 1787 1789 1784
+f 1363 1362 1791
+f 1792 1363 1791
+f 1366 1363 1792
+f 1788 1366 1792
+f 1793 1794 1795
+f 1794 1796 1795
+f 1797 1362 1360
+f 1797 1791 1362
+f 1791 1798 1799
+f 1799 1798 1794
+f 1797 1798 1791
+f 1798 1796 1794
+f 1360 1358 1800
+f 1797 1360 1800
+f 1801 1802 1803
+f 1803 1802 1804
+f 1802 1805 1806
+f 1805 1807 1806
+f 1807 1800 1361
+f 1361 1800 1358
+f 1805 1800 1807
+f 1801 1805 1802
+f 1361 1359 1808
+f 1807 1361 1808
+f 1809 1810 1811
+f 1810 1812 1811
+f 1813 1359 1355
+f 1813 1808 1359
+f 1808 1814 1815
+f 1815 1814 1810
+f 1813 1814 1808
+f 1814 1812 1810
+f 1355 1356 1816
+f 1813 1355 1816
+f 1817 1818 1819
+f 1819 1818 1820
+f 1818 1821 1822
+f 1821 1823 1822
+f 1823 1816 1357
+f 1357 1816 1356
+f 1821 1816 1823
+f 1817 1821 1818
+f 1357 1354 1824
+f 1823 1357 1824
+f 1825 1826 1827
+f 1825 1827 1828
+f 1829 1825 1830
+f 1824 1829 1830
+f 1831 1824 1354
+f 1831 1354 1351
+f 1831 1829 1824
+f 1829 1826 1825
+f 1351 1352 1832
+f 1831 1351 1832
+f 1833 1834 1835
+f 1836 1833 1835
+f 1832 1352 1353
+f 1837 1832 1353
+f 1838 1837 1839
+f 1838 1839 1833
+f 1838 1832 1837
+f 1836 1838 1833
+f 1353 1350 1840
+f 1837 1353 1840
+f 1841 1842 1843
+f 1841 1843 1844
+f 1845 1841 1846
+f 1840 1845 1846
+f 1847 1840 1350
+f 1847 1350 1349
+f 1847 1845 1840
+f 1845 1842 1841
+f 1349 1348 1848
+f 1847 1349 1848
+f 1849 1850 1851
+f 1852 1849 1851
+f 1848 1348 1347
+f 1853 1848 1347
+f 1854 1853 1855
+f 1854 1855 1849
+f 1854 1848 1853
+f 1852 1854 1849
+f 1347 1346 1856
+f 1853 1347 1856
+f 1857 1858 1859
+f 1858 1860 1859
+f 1858 1861 1860
+f 1343 1862 1346
+f 1862 1856 1346
+f 1856 1863 1864
+f 1864 1863 1858
+f 1862 1863 1856
+f 1863 1861 1858
+f 1343 1342 1865
+f 1862 1343 1865
+f 1866 1867 1868
+f 1868 1867 1869
+f 1869 1867 1870
+f 1867 1871 1872
+f 1871 1873 1872
+f 1873 1865 1344
+f 1344 1865 1342
+f 1871 1865 1873
+f 1866 1871 1867
+f 1873 1344 1345
+f 1873 1345 1874
+f 1875 1876 1877
+f 1876 1878 1877
+f 1876 1879 1878
+f 1339 1880 1345
+f 1880 1874 1345
+f 1874 1881 1882
+f 1882 1881 1876
+f 1880 1881 1874
+f 1881 1879 1876
+f 1339 1340 1883
+f 1880 1339 1883
+f 1884 1885 1886
+f 1886 1885 1887
+f 1887 1885 1888
+f 1885 1889 1890
+f 1889 1891 1890
+f 1891 1883 1341
+f 1341 1883 1340
+f 1889 1883 1891
+f 1884 1889 1885
+f 1891 1341 1338
+f 1891 1338 1892
+f 1893 1894 1895
+f 1893 1895 1896
+f 1893 1896 1897
+f 1898 1893 1899
+f 1892 1898 1899
+f 1900 1892 1338
+f 1900 1338 1335
+f 1900 1898 1892
+f 1898 1894 1893
+f 1335 1336 1901
+f 1900 1335 1901
+f 1902 1903 1904
+f 1905 1902 1904
+f 1906 1902 1905
+f 1901 1336 1337
+f 1907 1901 1337
+f 1908 1907 1909
+f 1908 1909 1902
+f 1908 1901 1907
+f 1906 1908 1902
+f 1907 1337 1334
+f 1907 1334 1910
+f 1911 1912 1913
+f 1911 1913 1914
+f 1911 1914 1915
+f 1916 1911 1917
+f 1910 1916 1917
+f 1918 1910 1334
+f 1918 1334 1333
+f 1918 1916 1910
+f 1916 1912 1911
+f 1333 1332 1919
+f 1918 1333 1919
+f 1920 1921 1922
+f 1923 1920 1922
+f 1924 1920 1923
+f 1919 1332 1331
+f 1925 1919 1331
+f 1926 1925 1927
+f 1926 1927 1920
+f 1926 1919 1925
+f 1924 1926 1920
+f 1928 1330 1329
+f 1928 1329 1929
+f 1925 1331 1330
+f 1925 1330 1928
+f 1930 1931 1932
+f 1931 1933 1932
+f 1931 1934 1933
+f 1327 1935 1329
+f 1935 1929 1329
+f 1929 1936 1937
+f 1937 1936 1931
+f 1935 1936 1929
+f 1936 1934 1931
+f 1935 1327 1326
+f 1935 1326 1938
+f 1939 1940 1941
+f 1941 1940 1942
+f 1942 1940 1943
+f 1940 1944 1945
+f 1944 1946 1945
+f 1946 1938 1328
+f 1328 1938 1326
+f 1944 1938 1946
+f 1939 1944 1940
+f 1328 1325 1947
+f 1946 1328 1947
+f 1948 1949 1950
+f 1948 1950 1951
+f 1948 1951 1952
+f 1953 1948 1954
+f 1947 1953 1954
+f 1955 1947 1325
+f 1955 1325 1323
+f 1955 1953 1947
+f 1953 1949 1948
+f 1955 1323 1322
+f 1955 1322 1956
+f 1957 1958 1959
+f 1960 1957 1959
+f 1961 1957 1960
+f 1956 1322 1324
+f 1962 1956 1324
+f 1963 1962 1964
+f 1963 1964 1957
+f 1963 1956 1962
+f 1961 1963 1957
+f 1965 1320 1321
+f 1965 1321 1966
+f 1324 1320 1965
+f 1962 1324 1965
+f 1967 1968 1969
+f 1968 1970 1969
+f 1968 1971 1970
+f 1317 1972 1321
+f 1972 1966 1321
+f 1966 1973 1974
+f 1974 1973 1968
+f 1972 1973 1966
+f 1973 1971 1968
+f 1972 1317 1318
+f 1972 1318 1975
+f 1976 1977 1978
+f 1978 1977 1979
+f 1979 1977 1980
+f 1977 1981 1982
+f 1981 1983 1982
+f 1983 1975 1319
+f 1319 1975 1318
+f 1981 1975 1983
+f 1976 1981 1977
+f 1983 1319 1316
+f 1983 1316 1984
+f 1985 1986 1987
+f 1985 1987 1988
+f 1985 1988 1989
+f 1990 1985 1991
+f 1984 1990 1991
+f 1992 1984 1316
+f 1992 1316 1314
+f 1992 1990 1984
+f 1990 1986 1985
+f 1992 1314 1313
+f 1992 1313 1993
+f 1994 1995 1996
+f 1997 1994 1996
+f 1998 1994 1997
+f 1993 1313 1315
+f 1999 1993 1315
+f 2000 1999 2001
+f 2000 2001 1994
+f 2000 1993 1999
+f 1998 2000 1994
+f 1315 1312 1449
+f 1999 1315 1449
+f 2002 1449 1450
+f 2002 1450 1457
+f 1575 1583 1584
+f 1576 1575 1584
+f 1559 1567 1566
+f 1560 1559 1566
+f 2003 1551 1550
+f 1543 1551 2003
+f 1541 1543 2003
+f 2004 1535 1536
+f 1527 1535 2004
+f 1525 1527 2004
+f 2005 1519 1520
+f 2006 1519 2005
+f 1511 1510 2006
+f 1511 2006 2005
+f 2007 1502 1501
+f 1494 1502 2007
+f 1492 1494 2007
+f 2008 1486 1487
+f 2009 1486 2008
+f 1478 1477 2009
+f 1478 2009 2008
+f 2010 1469 1468
+f 1461 1469 2010
+f 1459 1461 2010
+f 2011 2012 1453
+f 2011 1453 1454
+f 1584 2003 1576
+f 1576 2003 1566
+f 1566 2003 1560
+f 1560 2003 1550
+f 2003 2004 1541
+f 1541 2004 1536
+f 2004 2005 1525
+f 1525 2005 1520
+f 2005 2007 1501
+f 2005 1501 1511
+f 2007 2008 1487
+f 2007 1487 1492
+f 2008 2010 1468
+f 2008 1468 1478
+f 2010 2011 1454
+f 2010 1454 1459
+f 2012 2013 1451
+f 2012 1451 1453
+f 2013 2014 1452
+f 2013 1452 1451
+f 2015 1457 1452
+f 2016 2015 1452
+f 2002 2015 2017
+f 2014 2017 2018
+f 2014 2002 2017
+f 2002 1457 2015
+f 1452 2014 2018
+f 1452 2018 2016
+f 1456 1455 1458
+f 1456 1458 1463
+f 1454 1456 1463
+f 1454 1463 1459
+f 1464 1465 1466
+f 1464 1466 1472
+f 2019 1472 1467
+f 2019 2020 1472
+f 2021 1472 2020
+f 2022 2019 1467
+f 2023 2021 2022
+f 2023 2024 2021
+f 1464 2024 2025
+f 1460 2025 2026
+f 1460 1464 2025
+f 1464 1472 2021
+f 1464 2021 2024
+f 1467 1460 2026
+f 1467 2026 2023
+f 1467 2023 2022
+f 1462 1460 1467
+f 1462 1467 1470
+f 1462 1470 1469
+f 1461 1462 1469
+f 1480 1473 1474
+f 1471 1473 1480
+f 1478 1471 1480
+f 1468 1471 1478
+f 2009 2027 1484
+f 2009 1484 1486
+f 1476 2027 2009
+f 1477 1476 2009
+f 2027 2028 1485
+f 2027 1485 1484
+f 1476 1475 2028
+f 1476 2028 2027
+f 2029 1490 1485
+f 2029 2030 1490
+f 2031 2029 1485
+f 2032 2033 2034
+f 2035 2033 2031
+f 2035 2034 2033
+f 2036 2032 2034
+f 2028 2037 2035
+f 2028 2035 2031
+f 2038 2032 2036
+f 2039 2036 2037
+f 2039 2037 2028
+f 2039 2038 2036
+f 1481 2038 2040
+f 1475 2040 2041
+f 1475 2041 2039
+f 1475 2039 2028
+f 1475 1481 2040
+f 2032 1490 2030
+f 2032 2030 2033
+f 1481 2032 2038
+f 1485 2028 2031
+f 2032 1482 1483
+f 2032 1483 1490
+f 1481 1479 1482
+f 1481 1482 2032
+f 1489 1488 1491
+f 1489 1491 1496
+f 1487 1489 1496
+f 1487 1496 1492
+f 2042 1499 1505
+f 2043 2042 1505
+f 2044 1499 2042
+f 1498 1499 2044
+f 2045 2044 2046
+f 2045 1498 2044
+f 2047 2045 2046
+f 2048 1498 2045
+f 1497 2048 2049
+f 1497 1498 2048
+f 2050 2043 1505
+f 2050 1505 1500
+f 2051 2050 1500
+f 2052 2047 2046
+f 2052 2046 2051
+f 1497 2053 2054
+f 1493 2054 2052
+f 1493 1497 2054
+f 1500 1493 2052
+f 1500 2052 2051
+f 1497 2049 2053
+f 1495 1493 1500
+f 1495 1500 1503
+f 1494 1495 1503
+f 1494 1503 1502
+f 1504 1506 1507
+f 1504 1507 1513
+f 1501 1504 1513
+f 1501 1513 1511
+f 2055 1517 1519
+f 2006 2055 1519
+f 1509 2055 2006
+f 1510 1509 2006
+f 2055 2056 1518
+f 2055 1518 1517
+f 1509 1508 2056
+f 1509 2056 2055
+f 2057 2058 1523
+f 2057 1523 1518
+f 2059 2057 1518
+f 2060 2061 2062
+f 2060 2062 2059
+f 2056 2063 2064
+f 2056 2064 2060
+f 2056 2060 2059
+f 2065 2063 2056
+f 2066 2065 2056
+f 2067 2066 2056
+f 2068 2069 2070
+f 2068 2070 2067
+f 1514 2071 2072
+f 1508 2072 2068
+f 1508 2068 2067
+f 1508 2067 2056
+f 1508 1514 2072
+f 1518 2056 2059
+f 2073 1515 1523
+f 2058 2073 1523
+f 2074 1515 2073
+f 2075 2074 2062
+f 2061 2075 2062
+f 1516 1515 2074
+f 1516 2074 2075
+f 2076 1516 2075
+f 2077 2076 2063
+f 2077 1516 2076
+f 2065 2077 2063
+f 2078 1516 2077
+f 1512 1516 2078
+f 2079 2078 2070
+f 2079 1512 2078
+f 2069 2079 2070
+f 2080 1512 2079
+f 1514 2080 2071
+f 1514 1512 2080
+f 1529 1521 1524
+f 1522 1521 1529
+f 1525 1522 1529
+f 1520 1522 1525
+f 1531 1532 1539
+f 1530 1531 1539
+f 2081 1539 1534
+f 2081 2082 1539
+f 2083 2081 1534
+f 2084 2085 2083
+f 2084 2086 2085
+f 1530 2087 2088
+f 1526 2088 2084
+f 1526 1530 2088
+f 1530 1539 2086
+f 2086 1539 2082
+f 2086 2082 2085
+f 1530 2086 2087
+f 1534 1526 2083
+f 2083 1526 2084
+f 1528 1526 1534
+f 1528 1534 1533
+f 1528 1533 1535
+f 1527 1528 1535
+f 1545 1537 1540
+f 1538 1537 1545
+f 1541 1538 1545
+f 1536 1538 1541
+f 1547 1548 1554
+f 1546 1547 1554
+f 2089 1554 1549
+f 2089 2090 1554
+f 2091 1554 2090
+f 2092 2089 1549
+f 2093 2091 2092
+f 2093 2094 2091
+f 2095 2096 2097
+f 2095 2098 2096
+f 1546 2098 2099
+f 1546 2099 2100
+f 1542 2100 2095
+f 1542 2095 2097
+f 1542 1546 2100
+f 1546 1554 2098
+f 2098 1554 2094
+f 2094 1554 2091
+f 2098 2094 2096
+f 1549 1542 2092
+f 2092 1542 2093
+f 2093 1542 2097
+f 1544 1542 1549
+f 1544 1549 1552
+f 1544 1552 1551
+f 1543 1544 1551
+f 1562 1555 1556
+f 1553 1555 1562
+f 1560 1553 1562
+f 1550 1553 1560
+f 1558 1568 1567
+f 1559 1558 1567
+f 1558 1557 1565
+f 1558 1565 1568
+f 2101 1570 1565
+f 2102 2101 1565
+f 2103 2104 2105
+f 2103 2106 2104
+f 1563 2106 2107
+f 1557 2107 2108
+f 1557 2108 2103
+f 1557 1563 2107
+f 1563 1570 2106
+f 2106 1570 2104
+f 2104 1570 2101
+f 1565 1557 2105
+f 2105 1557 2103
+f 1565 2105 2102
+f 1563 1561 1564
+f 1563 1564 1570
+f 1578 1571 1572
+f 1569 1571 1578
+f 1576 1569 1578
+f 1566 1569 1576
+f 1574 1581 1583
+f 1575 1574 1583
+f 1573 1582 1581
+f 1574 1573 1581
+f 2109 1588 1582
+f 2110 2109 1582
+f 2111 1588 2109
+f 2112 2110 1582
+f 2113 2111 2112
+f 2113 2114 2111
+f 1579 2114 2115
+f 1573 2116 2113
+f 1573 2115 2116
+f 1573 1579 2115
+f 1579 1588 2114
+f 2114 1588 2111
+f 1582 1573 2112
+f 2112 1573 2113
+f 1579 1577 1580
+f 1579 1580 1588
+f 1585 1590 1592
+f 1584 1585 1592
+f 1587 1586 1589
+f 1587 1589 1595
+f 1585 1587 1595
+f 1585 1595 1590
+f 1596 1597 1598
+f 1596 1598 1606
+f 2117 1606 1600
+f 2117 2118 1606
+f 2119 2117 1600
+f 2120 2121 2119
+f 2120 2122 2121
+f 1596 2122 2123
+f 1591 2124 2120
+f 1591 2123 2124
+f 1591 1596 2123
+f 1596 1606 2118
+f 1596 2118 2121
+f 1596 2121 2122
+f 1600 1591 2119
+f 2119 1591 2120
+f 1591 1600 1599
+f 1594 1591 1599
+f 1593 1594 1599
+f 1593 1599 1601
+f 1592 1593 1601
+f 1592 1601 1602
+f 1603 1608 1610
+f 1602 1603 1610
+f 1605 1604 1607
+f 1605 1607 1613
+f 1603 1605 1613
+f 1603 1613 1608
+f 1615 1616 1623
+f 1614 1615 1623
+f 2125 1623 1617
+f 2125 2126 1623
+f 2127 2125 1617
+f 2128 2129 2127
+f 2128 2130 2129
+f 2131 2132 2133
+f 2131 2134 2132
+f 1614 2134 2135
+f 1609 2135 2136
+f 1609 2136 2131
+f 1609 1614 2135
+f 1614 1623 2126
+f 1614 2126 2129
+f 1614 2129 2130
+f 1614 2130 2132
+f 1614 2132 2134
+f 1617 1609 2131
+f 1617 2131 2133
+f 1617 2133 2128
+f 1617 2128 2127
+f 1612 1609 1617
+f 1612 1617 1621
+f 1611 1612 1621
+f 1611 1621 1620
+f 1610 1611 1620
+f 1610 1620 1619
+f 1622 1624 1625
+f 1622 1625 1632
+f 1618 1630 1629
+f 1619 1618 1629
+f 1618 1622 1632
+f 1618 1632 1630
+f 1629 1628 1638
+f 1629 1638 1637
+f 1628 1627 1639
+f 1628 1639 1638
+f 1626 1635 1639
+f 1627 1626 1639
+f 2137 1641 1635
+f 2137 2138 1641
+f 2139 2137 1635
+f 2140 2141 2139
+f 2140 2142 2141
+f 1633 2142 2143
+f 1633 2143 2144
+f 1626 2144 2140
+f 1626 1633 2144
+f 1633 1641 2138
+f 1633 2138 2141
+f 1633 2141 2142
+f 1635 1626 2140
+f 1635 2140 2139
+f 1633 1631 1634
+f 1633 1634 1641
+f 1640 1642 1643
+f 1640 1643 1650
+f 1636 1648 1647
+f 1637 1636 1647
+f 1636 1640 1650
+f 1636 1650 1648
+f 2145 2146 1656
+f 2145 1656 1657
+f 1647 1646 2146
+f 1647 2146 2145
+f 2146 2147 1654
+f 2146 1654 1656
+f 1646 1645 2147
+f 1646 2147 2146
+f 2147 2148 1655
+f 2147 1655 1654
+f 1644 2148 2147
+f 1645 1644 2147
+f 2149 2150 1661
+f 2149 1661 1655
+f 2151 2149 1655
+f 2152 2153 2154
+f 2152 2154 2151
+f 2152 2151 1655
+f 2148 2155 2156
+f 2148 2156 2152
+f 2157 2155 2148
+f 2158 2157 2148
+f 2159 2158 2148
+f 2160 2161 2159
+f 2160 2162 2161
+f 1651 2162 2163
+f 1651 2163 2164
+f 1644 2164 2160
+f 1644 2160 2159
+f 1644 2159 2148
+f 1644 1651 2164
+f 1655 2148 2152
+f 1651 2165 2162
+f 2162 2165 2161
+f 2166 1653 1661
+f 2150 2166 1661
+f 2167 1653 2166
+f 2168 1653 2167
+f 2153 2167 2154
+f 2153 2168 2167
+f 1652 1653 2168
+f 2169 1652 2168
+f 2170 1652 2169
+f 2157 2169 2155
+f 2157 2170 2169
+f 2171 1652 2170
+f 1649 1652 2171
+f 1651 2171 2165
+f 1651 1649 2171
+f 1657 1658 1663
+f 1657 1663 1665
+f 1668 1659 1662
+f 1660 1659 1668
+f 1663 1660 1668
+f 1658 1660 1663
+f 2172 1670 1671
+f 2172 1671 1678
+f 2173 2172 1678
+f 2174 1670 2172
+f 1669 2174 2175
+f 1669 1670 2174
+f 2176 1678 1672
+f 2176 2177 1678
+f 2178 2176 1672
+f 2179 2180 2178
+f 2179 2173 2180
+f 1669 2181 2182
+f 1664 2182 2179
+f 1664 1669 2182
+f 2173 1678 2177
+f 2173 2177 2180
+f 1672 1664 2178
+f 2178 1664 2179
+f 1669 2175 2181
+f 1667 1664 1672
+f 1667 1672 1676
+f 1667 1676 1675
+f 1666 1667 1675
+f 1666 1675 1674
+f 1665 1666 1674
+f 1687 1679 1680
+f 1677 1679 1687
+f 1674 1673 1685
+f 1674 1685 1684
+f 1685 1677 1687
+f 1673 1677 1685
+f 2183 2184 1693
+f 2183 1693 1694
+f 1683 2184 2183
+f 1684 1683 2183
+f 2184 2185 1691
+f 2184 1691 1693
+f 1682 2185 2184
+f 1683 1682 2184
+f 2185 2186 1692
+f 2185 1692 1691
+f 1682 1681 2186
+f 1682 2186 2185
+f 2187 1698 1692
+f 2187 2188 1698
+f 2189 2187 1692
+f 2190 2191 2192
+f 2193 2192 2189
+f 2193 2190 2192
+f 2194 2191 2190
+f 2186 2193 2189
+f 2195 2193 2186
+f 2196 2191 2194
+f 2197 2194 2195
+f 2197 2196 2194
+f 2197 2195 2186
+f 1688 2196 2198
+f 1688 2198 2199
+f 1681 2199 2197
+f 1681 2197 2186
+f 1681 1688 2199
+f 2191 1698 2188
+f 2191 2188 2192
+f 1688 2191 2196
+f 1692 2186 2189
+f 2191 1689 1690
+f 2191 1690 1698
+f 1688 1686 1689
+f 1688 1689 2191
+f 1695 1700 1702
+f 1694 1695 1702
+f 1697 1696 1699
+f 1697 1699 1705
+f 1695 1697 1705
+f 1695 1705 1700
+f 1706 1707 1708
+f 1706 1708 1715
+f 2200 1715 1709
+f 2201 2200 1709
+f 2202 1715 2200
+f 2203 2201 1709
+f 2204 2202 2203
+f 2204 2205 2202
+f 1706 2205 2206
+f 1701 2207 2204
+f 1701 2206 2207
+f 1701 1706 2206
+f 1706 1715 2205
+f 2205 1715 2202
+f 1709 1701 2203
+f 2203 1701 2204
+f 1704 1701 1709
+f 1704 1709 1713
+f 1703 1704 1713
+f 1703 1713 1712
+f 1702 1703 1712
+f 1702 1712 1711
+f 1724 1716 1717
+f 1714 1716 1724
+f 1711 1710 1722
+f 1711 1722 1721
+f 1722 1714 1724
+f 1710 1714 1722
+f 1851 1859 1860
+f 1852 1851 1860
+f 1835 1843 1842
+f 1836 1835 1842
+f 2208 1827 1826
+f 1819 1827 2208
+f 1817 1819 2208
+f 2209 1811 1812
+f 1803 1811 2209
+f 1801 1803 2209
+f 1796 1801 2209
+f 2210 1795 1796
+f 2211 2210 1796
+f 1786 2210 2211
+f 1787 1786 2211
+f 2212 1778 1777
+f 1770 1778 2212
+f 1768 1770 2212
+f 1763 1768 2212
+f 2213 1762 1763
+f 2214 2213 1763
+f 1753 2213 2214
+f 1754 1753 2214
+f 2215 1745 1744
+f 1737 1745 2215
+f 1735 1737 2215
+f 1720 1729 1730
+f 1721 1720 1730
+f 1860 2208 1852
+f 1852 2208 1842
+f 1842 2208 1836
+f 1836 2208 1826
+f 2208 2209 1817
+f 1817 2209 1812
+f 2209 2211 1796
+f 2211 2212 1777
+f 2211 1777 1787
+f 2212 2214 1763
+f 2214 2215 1744
+f 2214 1744 1754
+f 2215 1721 1730
+f 2215 1730 1735
+f 1719 1727 1729
+f 1720 1719 1729
+f 1718 1728 1727
+f 1719 1718 1727
+f 2216 1733 1728
+f 2217 2216 1728
+f 2218 2219 2220
+f 2218 2221 2219
+f 1725 2221 2222
+f 1718 2222 2223
+f 1718 1725 2222
+f 1725 1733 2216
+f 1725 2216 2219
+f 1725 2219 2221
+f 1728 1718 2223
+f 1728 2223 2218
+f 1728 2218 2220
+f 1728 2220 2217
+f 1725 1723 1726
+f 1725 1726 1733
+f 1732 1731 1734
+f 1732 1734 1739
+f 1730 1732 1739
+f 1730 1739 1735
+f 1740 1741 1742
+f 1740 1742 1748
+f 2224 1748 1743
+f 2224 2225 1748
+f 2226 1748 2225
+f 2227 2224 1743
+f 2228 2226 2227
+f 2228 2229 2226
+f 1740 2229 2230
+f 1736 2230 2231
+f 1736 1740 2230
+f 1740 1748 2226
+f 1740 2226 2229
+f 1743 1736 2231
+f 1743 2231 2228
+f 1743 2228 2227
+f 1736 1743 1746
+f 1738 1736 1746
+f 1738 1746 1745
+f 1737 1738 1745
+f 1756 1749 1750
+f 1747 1749 1756
+f 1754 1747 1756
+f 1744 1747 1754
+f 2213 2232 1760
+f 2213 1760 1762
+f 1752 2232 2213
+f 1753 1752 2213
+f 2232 2233 1761
+f 2232 1761 1760
+f 1751 2233 2232
+f 1752 1751 2232
+f 2234 1766 1761
+f 2234 2235 1766
+f 2236 2234 1761
+f 2237 2238 2239
+f 2240 2238 2236
+f 2240 2239 2238
+f 2241 2237 2239
+f 2233 2242 2240
+f 2233 2240 2236
+f 2243 2237 2241
+f 2244 2241 2242
+f 2244 2243 2241
+f 2244 2242 2233
+f 1757 2243 2245
+f 1751 2245 2246
+f 1751 2246 2244
+f 1751 2244 2233
+f 1751 1757 2245
+f 2237 1766 2235
+f 2237 2235 2238
+f 1757 2237 2243
+f 1761 2233 2236
+f 1758 1759 1766
+f 2237 1758 1766
+f 1755 1758 2237
+f 1757 1755 2237
+f 1765 1764 1767
+f 1765 1767 1772
+f 1763 1765 1772
+f 1763 1772 1768
+f 2247 1775 1781
+f 2248 2247 1781
+f 2249 1775 2247
+f 1774 1775 2249
+f 2250 2249 2251
+f 2250 1774 2249
+f 2252 2250 2251
+f 2253 1774 2250
+f 1773 2253 2254
+f 1773 1774 2253
+f 2255 2248 1781
+f 2255 1781 1776
+f 2256 2255 1776
+f 2257 2252 2251
+f 2257 2251 2256
+f 1773 2258 2259
+f 1769 2259 2257
+f 1769 1773 2259
+f 1776 1769 2257
+f 1776 2257 2256
+f 1773 2254 2258
+f 1771 1769 1776
+f 1771 1776 1779
+f 1770 1771 1779
+f 1770 1779 1778
+f 1780 1782 1783
+f 1780 1783 1789
+f 1777 1780 1789
+f 1777 1789 1787
+f 2260 1793 1795
+f 2210 2260 1795
+f 1785 2260 2210
+f 1786 1785 2210
+f 2260 2261 1794
+f 2260 1794 1793
+f 1785 1784 2261
+f 1785 2261 2260
+f 2262 2263 1799
+f 2262 1799 1794
+f 2264 2262 1794
+f 2265 2266 2267
+f 2265 2267 2264
+f 2261 2268 2269
+f 2261 2269 2265
+f 2261 2265 2264
+f 2270 2268 2261
+f 2271 2270 2261
+f 2272 2271 2261
+f 2273 2274 2275
+f 2273 2275 2272
+f 1790 2276 2277
+f 1784 2277 2273
+f 1784 2273 2272
+f 1784 2272 2261
+f 1784 1790 2277
+f 1794 2261 2264
+f 2278 1791 1799
+f 2263 2278 1799
+f 2279 1791 2278
+f 2280 2279 2267
+f 2266 2280 2267
+f 1792 1791 2279
+f 1792 2279 2280
+f 2281 1792 2280
+f 2282 2281 2268
+f 2282 1792 2281
+f 2270 2282 2268
+f 2283 1792 2282
+f 1788 1792 2283
+f 2284 2283 2275
+f 2284 1788 2283
+f 2274 2284 2275
+f 2285 1788 2284
+f 1790 2285 2276
+f 1790 1788 2285
+f 1805 1797 1800
+f 1798 1797 1805
+f 1801 1798 1805
+f 1796 1798 1801
+f 1806 1807 1808
+f 1806 1808 1815
+f 2286 1815 1810
+f 2286 2287 1815
+f 2288 2286 1810
+f 2289 2290 2288
+f 2289 2291 2290
+f 1806 2292 2293
+f 1802 2293 2289
+f 1802 1806 2293
+f 1806 1815 2291
+f 2291 1815 2287
+f 2291 2287 2290
+f 1806 2291 2292
+f 1810 1802 2288
+f 2288 1802 2289
+f 1804 1802 1810
+f 1804 1810 1809
+f 1804 1809 1811
+f 1803 1804 1811
+f 1821 1813 1816
+f 1814 1813 1821
+f 1817 1814 1821
+f 1812 1814 1817
+f 1822 1823 1824
+f 1822 1824 1830
+f 2294 1830 1825
+f 2294 2295 1830
+f 2296 1830 2295
+f 2297 2294 1825
+f 2298 2296 2297
+f 2298 2299 2296
+f 2300 2301 2302
+f 2300 2303 2301
+f 1822 2303 2304
+f 1822 2304 2305
+f 1818 2305 2300
+f 1818 2300 2302
+f 1818 1822 2305
+f 1822 1830 2303
+f 2303 1830 2299
+f 2299 1830 2296
+f 2303 2299 2301
+f 1825 1818 2297
+f 2297 1818 2298
+f 2298 1818 2302
+f 1820 1818 1825
+f 1820 1825 1828
+f 1820 1828 1827
+f 1819 1820 1827
+f 1838 1831 1832
+f 1829 1831 1838
+f 1836 1829 1838
+f 1826 1829 1836
+f 1834 1844 1843
+f 1835 1834 1843
+f 1834 1833 1841
+f 1834 1841 1844
+f 2306 1846 1841
+f 2307 2306 1841
+f 2308 2309 2310
+f 2308 2311 2309
+f 1839 2311 2312
+f 1833 2312 2313
+f 1833 2313 2308
+f 1833 1839 2312
+f 1839 1846 2311
+f 2311 1846 2309
+f 2309 1846 2306
+f 1841 1833 2310
+f 2310 1833 2308
+f 1841 2310 2307
+f 1837 1840 1846
+f 1839 1837 1846
+f 1854 1847 1848
+f 1845 1847 1854
+f 1852 1845 1854
+f 1842 1845 1852
+f 1850 1857 1859
+f 1851 1850 1859
+f 1850 1849 1858
+f 1850 1858 1857
+f 2314 1864 1858
+f 2315 2314 1858
+f 2316 1864 2314
+f 2317 2315 1858
+f 2318 2316 2317
+f 2318 2319 2316
+f 1855 2319 2320
+f 1849 2321 2318
+f 1849 2320 2321
+f 1849 1855 2320
+f 1855 1864 2319
+f 2319 1864 2316
+f 1858 1849 2317
+f 2317 1849 2318
+f 1853 1856 1864
+f 1855 1853 1864
+f 1861 1866 1868
+f 1860 1861 1868
+f 1863 1862 1865
+f 1863 1865 1871
+f 1861 1863 1871
+f 1861 1871 1866
+f 1873 1874 1882
+f 1872 1873 1882
+f 2322 1882 1876
+f 2322 2323 1882
+f 2324 2322 1876
+f 2325 2326 2324
+f 2325 2327 2326
+f 1872 2327 2328
+f 1867 2329 2325
+f 1867 2328 2329
+f 1867 1872 2328
+f 1872 1882 2323
+f 1872 2323 2326
+f 1872 2326 2327
+f 1876 1867 2324
+f 2324 1867 2325
+f 1870 1867 1876
+f 1870 1876 1875
+f 1869 1870 1875
+f 1869 1875 1877
+f 1868 1869 1877
+f 1868 1877 1878
+f 1879 1884 1886
+f 1878 1879 1886
+f 1881 1880 1883
+f 1881 1883 1889
+f 1879 1881 1889
+f 1879 1889 1884
+f 1891 1892 1899
+f 1890 1891 1899
+f 2330 1899 1893
+f 2330 2331 1899
+f 2332 2330 1893
+f 2333 2334 2332
+f 2333 2335 2334
+f 2336 2337 2338
+f 2336 2339 2337
+f 1890 2339 2340
+f 1885 2340 2341
+f 1885 2341 2336
+f 1885 1890 2340
+f 1890 1899 2331
+f 1890 2331 2334
+f 1890 2334 2335
+f 1890 2335 2337
+f 1890 2337 2339
+f 1893 1885 2336
+f 1893 2336 2338
+f 1893 2338 2333
+f 1893 2333 2332
+f 1888 1885 1893
+f 1888 1893 1897
+f 1887 1888 1897
+f 1887 1897 1896
+f 1886 1887 1896
+f 1886 1896 1895
+f 1898 1900 1901
+f 1898 1901 1908
+f 1894 1906 1905
+f 1895 1894 1905
+f 1894 1898 1908
+f 1894 1908 1906
+f 1905 1904 1914
+f 1905 1914 1913
+f 1904 1903 1915
+f 1904 1915 1914
+f 1903 1902 1911
+f 1903 1911 1915
+f 2342 1917 1911
+f 2342 2343 1917
+f 2344 2342 1911
+f 2345 2346 2344
+f 2345 2347 2346
+f 1909 2347 2348
+f 1909 2348 2349
+f 1902 2349 2345
+f 1902 1909 2349
+f 1909 1917 2343
+f 1909 2343 2346
+f 1909 2346 2347
+f 1911 1902 2345
+f 1911 2345 2344
+f 1907 1910 1917
+f 1909 1907 1917
+f 1916 1918 1919
+f 1916 1919 1926
+f 1912 1924 1923
+f 1913 1912 1923
+f 1912 1916 1926
+f 1912 1926 1924
+f 2350 2351 1932
+f 2350 1932 1933
+f 1923 1922 2351
+f 1923 2351 2350
+f 2351 2352 1930
+f 2351 1930 1932
+f 1922 1921 2352
+f 1922 2352 2351
+f 2352 2353 1931
+f 2352 1931 1930
+f 1921 1920 2353
+f 1921 2353 2352
+f 2354 2355 1937
+f 2354 1937 1931
+f 2356 2354 1931
+f 2357 2358 2359
+f 2357 2359 2356
+f 2357 2356 1931
+f 2353 2360 2361
+f 2353 2361 2357
+f 2362 2360 2353
+f 2363 2362 2353
+f 2364 2363 2353
+f 2365 2366 2364
+f 2365 2367 2366
+f 1927 2367 2368
+f 1927 2368 2369
+f 1920 2369 2365
+f 1920 2365 2364
+f 1920 2364 2353
+f 1920 1927 2369
+f 1931 2353 2357
+f 1927 2370 2367
+f 2367 2370 2366
+f 2371 1929 1937
+f 2355 2371 1937
+f 2372 1929 2371
+f 2373 1929 2372
+f 2358 2372 2359
+f 2358 2373 2372
+f 1928 1929 2373
+f 2374 1928 2373
+f 2375 1928 2374
+f 2362 2374 2360
+f 2362 2375 2374
+f 2376 1928 2375
+f 1925 1928 2376
+f 1927 2376 2370
+f 1927 1925 2376
+f 1933 1934 1939
+f 1933 1939 1941
+f 1944 1935 1938
+f 1936 1935 1944
+f 1939 1936 1944
+f 1934 1936 1939
+f 2377 1946 1947
+f 2377 1947 1954
+f 2378 2377 1954
+f 2379 1946 2377
+f 1945 2379 2380
+f 1945 1946 2379
+f 2381 1954 1948
+f 2381 2382 1954
+f 2383 2381 1948
+f 2384 2385 2383
+f 2384 2378 2385
+f 1945 2386 2387
+f 1940 2387 2384
+f 1940 1945 2387
+f 2378 1954 2382
+f 2378 2382 2385
+f 1948 1940 2383
+f 2383 1940 2384
+f 1945 2380 2386
+f 1943 1940 1948
+f 1943 1948 1952
+f 1943 1952 1951
+f 1942 1943 1951
+f 1942 1951 1950
+f 1941 1942 1950
+f 1963 1955 1956
+f 1953 1955 1963
+f 1950 1949 1961
+f 1950 1961 1960
+f 1961 1953 1963
+f 1949 1953 1961
+f 2388 2389 1969
+f 2388 1969 1970
+f 1959 2389 2388
+f 1960 1959 2388
+f 2389 2390 1967
+f 2389 1967 1969
+f 1958 2390 2389
+f 1959 1958 2389
+f 2390 2391 1968
+f 2390 1968 1967
+f 1958 1957 2391
+f 1958 2391 2390
+f 2392 1974 1968
+f 2392 2393 1974
+f 2394 2392 1968
+f 2395 2396 2397
+f 2398 2397 2394
+f 2398 2395 2397
+f 2399 2396 2395
+f 2391 2398 2394
+f 2400 2398 2391
+f 2401 2396 2399
+f 2402 2399 2400
+f 2402 2401 2399
+f 2402 2400 2391
+f 1964 2401 2403
+f 1964 2403 2404
+f 1957 2404 2402
+f 1957 2402 2391
+f 1957 1964 2404
+f 2396 1974 2393
+f 2396 2393 2397
+f 1964 2396 2401
+f 1968 2391 2394
+f 1965 1966 1974
+f 2396 1965 1974
+f 1962 1965 2396
+f 1964 1962 2396
+f 1971 1976 1978
+f 1970 1971 1978
+f 1973 1972 1975
+f 1973 1975 1981
+f 1971 1973 1981
+f 1971 1981 1976
+f 1983 1984 1991
+f 1982 1983 1991
+f 2405 1991 1985
+f 2406 2405 1985
+f 2407 1991 2405
+f 2408 2406 1985
+f 2409 2407 2408
+f 2409 2410 2407
+f 1982 2410 2411
+f 1977 2412 2409
+f 1977 2411 2412
+f 1977 1982 2411
+f 1982 1991 2410
+f 2410 1991 2407
+f 1985 1977 2408
+f 2408 1977 2409
+f 1977 1985 1989
+f 1980 1977 1989
+f 1979 1980 1989
+f 1979 1989 1988
+f 1978 1979 1988
+f 1978 1988 1987
+f 2000 1992 1993
+f 1990 1992 2000
+f 1987 1986 1998
+f 1987 1998 1997
+f 1998 1990 2000
+f 1986 1990 1998
+f 1996 2012 2011
+f 1997 1996 2011
+f 1995 2013 2012
+f 1996 1995 2012
+f 1995 1994 2014
+f 1995 2014 2013
+f 2413 2002 2014
+f 2414 2413 2014
+f 2001 2413 2415
+f 1994 2415 2416
+f 1994 2001 2415
+f 2001 2002 2413
+f 2014 1994 2416
+f 2014 2416 2414
+f 2001 1999 1449
+f 2001 1449 2002
+f 1997 2011 2417
+f 1987 1997 2417
+f 2418 1970 1978
+f 2418 1978 1987
+f 2418 1987 2417
+f 2419 2388 1970
+f 2419 1970 2418
+f 1960 2388 2419
+f 2420 1950 1960
+f 2420 1960 2419
+f 1941 1950 2420
+f 2421 1941 2420
+f 2421 1933 1941
+f 2350 1933 2421
+f 2422 2350 2421
+f 1923 2350 2422
+f 2423 1923 2422
+f 2423 1913 1923
+f 1905 1913 2423
+f 1895 1905 2423
+f 2424 1895 2423
+f 1886 1895 2424
+f 1878 1886 2424
+f 2425 1860 1868
+f 2425 1878 2424
+f 2425 1868 1878
+f 2426 1860 2425
+f 2208 1860 2426
+f 2427 2208 2426
+f 2209 2208 2427
+f 2428 2209 2427
+f 2211 2209 2428
+f 2429 2211 2428
+f 2212 2211 2429
+f 2430 2212 2429
+f 2214 2212 2430
+f 2431 2214 2430
+f 2215 2214 2431
+f 2432 2215 2431
+f 1721 2215 2432
+f 2433 1702 1711
+f 2433 1711 1721
+f 2433 1721 2432
+f 1694 1702 2433
+f 2434 2183 1694
+f 2434 1694 2433
+f 1684 2183 2434
+f 2435 1674 1684
+f 2435 1684 2434
+f 1665 1674 2435
+f 2436 1657 1665
+f 2436 1665 2435
+f 2145 1657 2436
+f 2437 2145 2436
+f 1647 2145 2437
+f 2438 1637 1647
+f 2438 1647 2437
+f 1629 1637 2438
+f 2439 1619 1629
+f 2439 1629 2438
+f 1610 1619 2439
+f 2440 1610 2439
+f 2440 1602 1610
+f 1592 1602 2440
+f 1584 1592 2440
+f 2441 1584 2440
+f 2003 1584 2441
+f 2442 2003 2441
+f 2443 2004 2003
+f 2443 2003 2442
+f 2444 2005 2004
+f 2444 2004 2443
+f 2445 2007 2005
+f 2445 2005 2444
+f 2446 2008 2007
+f 2446 2007 2445
+f 2447 2010 2008
+f 2447 2008 2446
+f 2448 2010 2447
+f 2011 2010 2448
+f 2417 2011 2448
+f 2015 2016 2449
+f 2449 2016 2450
+f 2016 2451 2450
+f 2016 2018 2451
+f 2018 2017 2451
+f 2451 2017 2452
+f 2017 2015 2452
+f 2452 2015 2449
+f 2020 2019 2453
+f 2453 2019 2454
+f 2019 2022 2454
+f 2454 2022 2455
+f 2022 2021 2455
+f 2455 2021 2456
+f 2021 2020 2456
+f 2456 2020 2453
+f 2024 2023 2457
+f 2457 2023 2458
+f 2023 2026 2458
+f 2458 2026 2459
+f 2026 2025 2459
+f 2459 2025 2460
+f 2025 2024 2460
+f 2460 2024 2457
+f 2030 2029 2461
+f 2461 2029 2462
+f 2029 2031 2462
+f 2462 2031 2463
+f 2031 2033 2463
+f 2463 2033 2464
+f 2033 2030 2464
+f 2464 2030 2461
+f 2034 2035 2465
+f 2465 2035 2466
+f 2035 2037 2466
+f 2466 2037 2467
+f 2037 2036 2467
+f 2467 2036 2468
+f 2036 2034 2468
+f 2468 2034 2465
+f 2038 2039 2469
+f 2469 2039 2470
+f 2039 2041 2470
+f 2470 2041 2471
+f 2041 2040 2471
+f 2471 2040 2472
+f 2040 2038 2472
+f 2472 2038 2469
+f 2053 2049 2473
+f 2473 2049 2474
+f 2048 2475 2049
+f 2049 2475 2474
+f 2475 2048 2045
+f 2474 2475 2047
+f 2475 2045 2047
+f 2047 2476 2474
+f 2047 2052 2476
+f 2051 2046 2477
+f 2477 2046 2478
+f 2044 2479 2046
+f 2046 2479 2478
+f 2479 2044 2480
+f 2480 2044 2042
+f 2480 2043 2481
+f 2480 2042 2043
+f 2043 2482 2481
+f 2043 2050 2482
+f 2050 2051 2482
+f 2482 2051 2477
+f 2052 2054 2476
+f 2476 2054 2483
+f 2054 2053 2483
+f 2483 2053 2473
+f 2484 2058 2485
+f 2484 2073 2058
+f 2058 2486 2485
+f 2058 2057 2486
+f 2057 2487 2486
+f 2057 2059 2487
+f 2059 2062 2487
+f 2487 2062 2488
+f 2074 2489 2062
+f 2062 2489 2488
+f 2490 2061 2491
+f 2490 2075 2061
+f 2061 2492 2491
+f 2061 2060 2492
+f 2060 2493 2492
+f 2060 2064 2493
+f 2064 2063 2493
+f 2493 2063 2494
+f 2076 2495 2063
+f 2063 2495 2494
+f 2496 2065 2497
+f 2496 2077 2065
+f 2065 2498 2497
+f 2065 2066 2498
+f 2066 2067 2498
+f 2498 2067 2499
+f 2067 2070 2499
+f 2499 2070 2500
+f 2078 2501 2070
+f 2070 2501 2500
+f 2502 2069 2503
+f 2502 2079 2069
+f 2069 2504 2503
+f 2069 2068 2504
+f 2068 2072 2504
+f 2504 2072 2505
+f 2072 2071 2505
+f 2505 2071 2506
+f 2080 2507 2071
+f 2071 2507 2506
+f 2507 2080 2502
+f 2502 2080 2079
+f 2501 2078 2496
+f 2496 2078 2077
+f 2495 2076 2490
+f 2490 2076 2075
+f 2489 2074 2484
+f 2484 2074 2073
+f 2082 2081 2508
+f 2508 2081 2509
+f 2081 2083 2509
+f 2509 2083 2510
+f 2083 2085 2510
+f 2510 2085 2511
+f 2085 2082 2511
+f 2511 2082 2508
+f 2086 2084 2512
+f 2512 2084 2513
+f 2084 2514 2513
+f 2084 2088 2514
+f 2088 2087 2514
+f 2514 2087 2515
+f 2087 2086 2515
+f 2515 2086 2512
+f 2090 2089 2516
+f 2516 2089 2517
+f 2089 2092 2517
+f 2517 2092 2518
+f 2092 2091 2518
+f 2518 2091 2519
+f 2091 2090 2519
+f 2519 2090 2516
+f 2098 2095 2520
+f 2520 2095 2521
+f 2095 2100 2521
+f 2521 2100 2522
+f 2100 2099 2522
+f 2522 2099 2523
+f 2099 2098 2523
+f 2523 2098 2520
+f 2094 2093 2524
+f 2524 2093 2525
+f 2093 2526 2525
+f 2093 2097 2526
+f 2097 2096 2526
+f 2526 2096 2527
+f 2096 2094 2527
+f 2527 2094 2524
+f 2101 2102 2528
+f 2528 2102 2529
+f 2102 2105 2529
+f 2529 2105 2530
+f 2105 2104 2530
+f 2530 2104 2531
+f 2104 2101 2531
+f 2531 2101 2528
+f 2106 2103 2532
+f 2532 2103 2533
+f 2103 2108 2533
+f 2533 2108 2534
+f 2108 2107 2534
+f 2534 2107 2535
+f 2107 2532 2535
+f 2107 2106 2532
+f 2109 2110 2536
+f 2536 2110 2537
+f 2110 2112 2537
+f 2537 2112 2538
+f 2112 2111 2538
+f 2538 2111 2539
+f 2111 2536 2539
+f 2111 2109 2536
+f 2114 2113 2540
+f 2540 2113 2541
+f 2113 2542 2541
+f 2113 2116 2542
+f 2116 2115 2542
+f 2542 2115 2543
+f 2115 2114 2543
+f 2543 2114 2540
+f 2118 2117 2544
+f 2544 2117 2545
+f 2117 2119 2545
+f 2545 2119 2546
+f 2119 2121 2546
+f 2546 2121 2547
+f 2121 2118 2547
+f 2547 2118 2544
+f 2122 2120 2548
+f 2548 2120 2549
+f 2120 2124 2549
+f 2549 2124 2550
+f 2124 2123 2550
+f 2550 2123 2551
+f 2123 2122 2551
+f 2551 2122 2548
+f 2126 2125 2552
+f 2552 2125 2553
+f 2125 2127 2553
+f 2553 2127 2554
+f 2127 2129 2554
+f 2554 2129 2555
+f 2129 2552 2555
+f 2129 2126 2552
+f 2130 2128 2556
+f 2556 2128 2557
+f 2128 2133 2557
+f 2557 2133 2558
+f 2133 2132 2558
+f 2558 2132 2559
+f 2132 2130 2559
+f 2559 2130 2556
+f 2134 2131 2560
+f 2560 2131 2561
+f 2131 2136 2561
+f 2561 2136 2562
+f 2136 2135 2562
+f 2562 2135 2563
+f 2135 2134 2563
+f 2563 2134 2560
+f 2138 2137 2564
+f 2564 2137 2565
+f 2137 2566 2565
+f 2137 2139 2566
+f 2139 2141 2566
+f 2566 2141 2567
+f 2141 2138 2567
+f 2567 2138 2564
+f 2142 2140 2568
+f 2568 2140 2569
+f 2140 2144 2569
+f 2569 2144 2570
+f 2144 2143 2570
+f 2570 2143 2571
+f 2143 2142 2571
+f 2571 2142 2568
+f 2572 2150 2573
+f 2572 2166 2150
+f 2150 2574 2573
+f 2150 2149 2574
+f 2149 2151 2574
+f 2574 2151 2575
+f 2151 2154 2575
+f 2575 2154 2576
+f 2167 2577 2154
+f 2154 2577 2576
+f 2578 2153 2579
+f 2578 2168 2153
+f 2153 2580 2579
+f 2153 2152 2580
+f 2152 2581 2580
+f 2152 2156 2581
+f 2156 2155 2581
+f 2581 2155 2582
+f 2169 2583 2155
+f 2155 2583 2582
+f 2584 2157 2585
+f 2584 2170 2157
+f 2157 2586 2585
+f 2157 2158 2586
+f 2158 2159 2586
+f 2586 2159 2587
+f 2159 2161 2587
+f 2587 2161 2588
+f 2161 2165 2588
+f 2165 2585 2588
+f 2171 2584 2165
+f 2165 2584 2585
+f 2163 2589 2590
+f 2163 2162 2589
+f 2162 2160 2589
+f 2589 2160 2591
+f 2160 2164 2591
+f 2591 2164 2592
+f 2164 2163 2592
+f 2592 2163 2590
+f 2584 2171 2170
+f 2583 2169 2578
+f 2578 2169 2168
+f 2577 2167 2572
+f 2572 2167 2166
+f 2181 2175 2593
+f 2593 2175 2594
+f 2174 2595 2175
+f 2175 2595 2594
+f 2595 2174 2172
+f 2595 2172 2173
+f 2173 2596 2594
+f 2173 2179 2596
+f 2594 2595 2173
+f 2179 2182 2596
+f 2596 2182 2597
+f 2182 2181 2597
+f 2597 2181 2593
+f 2177 2176 2598
+f 2598 2176 2599
+f 2176 2178 2599
+f 2599 2178 2600
+f 2178 2180 2600
+f 2600 2180 2601
+f 2180 2177 2601
+f 2601 2177 2598
+f 2190 2193 2602
+f 2602 2193 2603
+f 2193 2604 2603
+f 2193 2195 2604
+f 2195 2194 2604
+f 2604 2194 2605
+f 2194 2190 2605
+f 2605 2190 2602
+f 2188 2187 2606
+f 2606 2187 2607
+f 2187 2189 2607
+f 2607 2189 2608
+f 2189 2609 2608
+f 2189 2192 2609
+f 2192 2188 2609
+f 2609 2188 2606
+f 2196 2197 2610
+f 2610 2197 2611
+f 2197 2199 2611
+f 2611 2199 2612
+f 2199 2198 2612
+f 2612 2198 2613
+f 2198 2196 2613
+f 2613 2196 2610
+f 2200 2201 2614
+f 2614 2201 2615
+f 2201 2203 2615
+f 2615 2203 2616
+f 2203 2202 2616
+f 2616 2202 2617
+f 2202 2614 2617
+f 2202 2200 2614
+f 2205 2204 2618
+f 2618 2204 2619
+f 2204 2207 2619
+f 2619 2207 2620
+f 2207 2206 2620
+f 2620 2206 2621
+f 2206 2618 2621
+f 2206 2205 2618
+f 2216 2217 2622
+f 2622 2217 2623
+f 2217 2220 2623
+f 2623 2220 2624
+f 2220 2219 2624
+f 2624 2219 2625
+f 2219 2622 2625
+f 2219 2216 2622
+f 2221 2218 2626
+f 2626 2218 2627
+f 2218 2628 2627
+f 2218 2223 2628
+f 2223 2222 2628
+f 2628 2222 2629
+f 2222 2221 2629
+f 2629 2221 2626
+f 2225 2224 2630
+f 2630 2224 2631
+f 2224 2632 2631
+f 2224 2227 2632
+f 2227 2226 2632
+f 2632 2226 2633
+f 2226 2225 2633
+f 2633 2225 2630
+f 2229 2228 2634
+f 2634 2228 2635
+f 2228 2636 2635
+f 2228 2231 2636
+f 2231 2230 2636
+f 2636 2230 2637
+f 2230 2229 2637
+f 2637 2229 2634
+f 2235 2234 2638
+f 2638 2234 2639
+f 2234 2236 2639
+f 2639 2236 2640
+f 2236 2238 2640
+f 2640 2238 2641
+f 2238 2235 2641
+f 2641 2235 2638
+f 2239 2240 2642
+f 2642 2240 2643
+f 2240 2242 2643
+f 2643 2242 2644
+f 2242 2241 2644
+f 2644 2241 2645
+f 2241 2239 2645
+f 2645 2239 2642
+f 2243 2244 2646
+f 2646 2244 2647
+f 2244 2246 2647
+f 2647 2246 2648
+f 2246 2245 2648
+f 2648 2245 2649
+f 2245 2243 2649
+f 2649 2243 2646
+f 2258 2254 2650
+f 2650 2254 2651
+f 2253 2652 2254
+f 2254 2652 2651
+f 2652 2253 2250
+f 2651 2652 2252
+f 2652 2250 2252
+f 2252 2653 2651
+f 2252 2257 2653
+f 2256 2251 2654
+f 2654 2251 2655
+f 2249 2656 2251
+f 2251 2656 2655
+f 2656 2249 2657
+f 2657 2249 2247
+f 2657 2248 2658
+f 2657 2247 2248
+f 2248 2659 2658
+f 2248 2255 2659
+f 2255 2256 2659
+f 2659 2256 2654
+f 2257 2259 2653
+f 2653 2259 2660
+f 2259 2258 2660
+f 2660 2258 2650
+f 2661 2263 2662
+f 2661 2278 2263
+f 2263 2663 2662
+f 2263 2262 2663
+f 2262 2264 2663
+f 2663 2264 2664
+f 2264 2267 2664
+f 2664 2267 2665
+f 2279 2666 2267
+f 2267 2666 2665
+f 2667 2266 2668
+f 2667 2280 2266
+f 2266 2669 2668
+f 2266 2265 2669
+f 2265 2269 2669
+f 2669 2269 2670
+f 2269 2268 2670
+f 2670 2268 2671
+f 2281 2672 2268
+f 2268 2672 2671
+f 2673 2270 2674
+f 2673 2282 2270
+f 2270 2675 2674
+f 2270 2271 2675
+f 2271 2272 2675
+f 2675 2272 2676
+f 2272 2275 2676
+f 2676 2275 2677
+f 2283 2678 2275
+f 2275 2678 2677
+f 2679 2274 2680
+f 2679 2284 2274
+f 2274 2681 2680
+f 2274 2273 2681
+f 2273 2277 2681
+f 2681 2277 2682
+f 2277 2276 2682
+f 2682 2276 2683
+f 2285 2684 2276
+f 2276 2684 2683
+f 2684 2285 2679
+f 2679 2285 2284
+f 2678 2283 2673
+f 2673 2283 2282
+f 2672 2281 2667
+f 2667 2281 2280
+f 2666 2279 2661
+f 2661 2279 2278
+f 2287 2286 2685
+f 2685 2286 2686
+f 2286 2288 2686
+f 2686 2288 2687
+f 2288 2290 2687
+f 2687 2290 2688
+f 2290 2287 2688
+f 2688 2287 2685
+f 2291 2289 2689
+f 2689 2289 2690
+f 2289 2691 2690
+f 2289 2293 2691
+f 2293 2292 2691
+f 2691 2292 2692
+f 2292 2291 2692
+f 2692 2291 2689
+f 2295 2294 2693
+f 2693 2294 2694
+f 2294 2297 2694
+f 2694 2297 2695
+f 2297 2296 2695
+f 2695 2296 2696
+f 2296 2693 2696
+f 2296 2295 2693
+f 2303 2300 2697
+f 2697 2300 2698
+f 2300 2305 2698
+f 2698 2305 2699
+f 2305 2304 2699
+f 2699 2304 2700
+f 2304 2303 2700
+f 2700 2303 2697
+f 2299 2298 2701
+f 2701 2298 2702
+f 2298 2703 2702
+f 2298 2302 2703
+f 2302 2301 2703
+f 2703 2301 2704
+f 2301 2299 2704
+f 2704 2299 2701
+f 2306 2307 2705
+f 2705 2307 2706
+f 2307 2310 2706
+f 2706 2310 2707
+f 2310 2309 2707
+f 2707 2309 2708
+f 2309 2705 2708
+f 2309 2306 2705
+f 2311 2308 2709
+f 2709 2308 2710
+f 2308 2711 2710
+f 2308 2313 2711
+f 2313 2312 2711
+f 2711 2312 2712
+f 2312 2311 2712
+f 2712 2311 2709
+f 2314 2315 2713
+f 2713 2315 2714
+f 2315 2715 2714
+f 2315 2317 2715
+f 2317 2316 2715
+f 2715 2316 2716
+f 2316 2314 2716
+f 2716 2314 2713
+f 2319 2318 2717
+f 2717 2318 2718
+f 2318 2719 2718
+f 2318 2321 2719
+f 2321 2320 2719
+f 2719 2320 2720
+f 2320 2319 2720
+f 2720 2319 2717
+f 2323 2322 2721
+f 2721 2322 2722
+f 2322 2324 2722
+f 2722 2324 2723
+f 2324 2326 2723
+f 2723 2326 2724
+f 2326 2323 2724
+f 2724 2323 2721
+f 2327 2325 2725
+f 2725 2325 2726
+f 2325 2329 2726
+f 2726 2329 2727
+f 2329 2328 2727
+f 2727 2328 2728
+f 2328 2725 2728
+f 2328 2327 2725
+f 2331 2330 2729
+f 2729 2330 2730
+f 2330 2731 2730
+f 2330 2332 2731
+f 2332 2334 2731
+f 2731 2334 2732
+f 2334 2331 2732
+f 2732 2331 2729
+f 2335 2333 2733
+f 2733 2333 2734
+f 2333 2338 2734
+f 2734 2338 2735
+f 2338 2337 2735
+f 2735 2337 2736
+f 2337 2335 2736
+f 2736 2335 2733
+f 2339 2336 2737
+f 2737 2336 2738
+f 2336 2341 2738
+f 2738 2341 2739
+f 2341 2340 2739
+f 2739 2340 2740
+f 2340 2339 2740
+f 2740 2339 2737
+f 2343 2342 2741
+f 2741 2342 2742
+f 2342 2344 2742
+f 2742 2344 2743
+f 2344 2346 2743
+f 2743 2346 2744
+f 2346 2741 2744
+f 2346 2343 2741
+f 2347 2345 2745
+f 2745 2345 2746
+f 2345 2349 2746
+f 2746 2349 2747
+f 2349 2348 2747
+f 2747 2348 2748
+f 2348 2745 2748
+f 2348 2347 2745
+f 2749 2355 2750
+f 2749 2371 2355
+f 2355 2751 2750
+f 2355 2354 2751
+f 2354 2356 2751
+f 2751 2356 2752
+f 2356 2359 2752
+f 2752 2359 2753
+f 2372 2754 2359
+f 2359 2754 2753
+f 2755 2358 2756
+f 2755 2373 2358
+f 2358 2757 2756
+f 2358 2357 2757
+f 2357 2361 2757
+f 2757 2361 2758
+f 2361 2360 2758
+f 2758 2360 2759
+f 2374 2760 2360
+f 2360 2760 2759
+f 2761 2362 2762
+f 2761 2375 2362
+f 2362 2763 2762
+f 2362 2363 2763
+f 2363 2364 2763
+f 2763 2364 2764
+f 2364 2366 2764
+f 2764 2366 2765
+f 2366 2370 2765
+f 2370 2762 2765
+f 2376 2761 2370
+f 2370 2761 2762
+f 2368 2367 2766
+f 2766 2367 2767
+f 2367 2365 2767
+f 2767 2365 2768
+f 2365 2769 2768
+f 2365 2369 2769
+f 2369 2368 2769
+f 2769 2368 2766
+f 2761 2376 2375
+f 2760 2374 2755
+f 2755 2374 2373
+f 2754 2372 2749
+f 2749 2372 2371
+f 2386 2380 2770
+f 2770 2380 2771
+f 2379 2772 2380
+f 2380 2772 2771
+f 2772 2379 2377
+f 2772 2377 2378
+f 2378 2773 2771
+f 2378 2384 2773
+f 2771 2772 2378
+f 2384 2387 2773
+f 2773 2387 2774
+f 2387 2386 2774
+f 2774 2386 2770
+f 2382 2381 2775
+f 2775 2381 2776
+f 2381 2383 2776
+f 2776 2383 2777
+f 2383 2385 2777
+f 2777 2385 2778
+f 2385 2382 2778
+f 2778 2382 2775
+f 2395 2398 2779
+f 2779 2398 2780
+f 2398 2400 2780
+f 2780 2400 2781
+f 2400 2399 2781
+f 2781 2399 2782
+f 2399 2395 2782
+f 2782 2395 2779
+f 2393 2392 2783
+f 2783 2392 2784
+f 2392 2394 2784
+f 2784 2394 2785
+f 2394 2397 2785
+f 2785 2397 2786
+f 2397 2783 2786
+f 2397 2393 2783
+f 2401 2402 2787
+f 2787 2402 2788
+f 2402 2404 2788
+f 2788 2404 2789
+f 2404 2403 2789
+f 2789 2403 2790
+f 2403 2401 2790
+f 2790 2401 2787
+f 2405 2406 2791
+f 2791 2406 2792
+f 2406 2793 2792
+f 2406 2408 2793
+f 2408 2407 2793
+f 2793 2407 2794
+f 2407 2405 2794
+f 2794 2405 2791
+f 2410 2409 2795
+f 2795 2409 2796
+f 2409 2412 2796
+f 2796 2412 2797
+f 2412 2411 2797
+f 2797 2411 2798
+f 2411 2795 2798
+f 2411 2410 2795
+f 2413 2414 2799
+f 2799 2414 2800
+f 2414 2801 2800
+f 2414 2416 2801
+f 2416 2415 2801
+f 2801 2415 2802
+f 2415 2413 2802
+f 2802 2413 2799
+f 2418 2417 2803
+f 2804 2418 2803
+f 2419 2418 2804
+f 2805 2419 2804
+f 2420 2419 2805
+f 2806 2420 2805
+f 2421 2420 2806
+f 2807 2421 2806
+f 2422 2421 2807
+f 2808 2422 2807
+f 2423 2422 2808
+f 2809 2423 2808
+f 2424 2423 2809
+f 2810 2424 2809
+f 2425 2424 2810
+f 2811 2425 2810
+f 2426 2425 2811
+f 2812 2426 2811
+f 2427 2426 2812
+f 2813 2427 2812
+f 2428 2427 2813
+f 2814 2428 2813
+f 2815 2428 2814
+f 2429 2428 2815
+f 2816 2429 2815
+f 2430 2429 2816
+f 2817 2430 2816
+f 2431 2430 2817
+f 2818 2431 2817
+f 2432 2431 2818
+f 2819 2432 2818
+f 2433 2432 2819
+f 2820 2433 2819
+f 2434 2433 2820
+f 2821 2434 2820
+f 2435 2434 2821
+f 2822 2435 2821
+f 2436 2435 2822
+f 2823 2436 2822
+f 2437 2436 2823
+f 2824 2437 2823
+f 2438 2437 2824
+f 2825 2438 2824
+f 2439 2438 2825
+f 2826 2439 2825
+f 2440 2439 2826
+f 2827 2440 2826
+f 2441 2440 2827
+f 2828 2441 2827
+f 2442 2441 2828
+f 2443 2442 2828
+f 2829 2443 2828
+f 2444 2443 2829
+f 2830 2444 2829
+f 2445 2444 2830
+f 2831 2445 2830
+f 2446 2445 2831
+f 2832 2446 2831
+f 2447 2446 2832
+f 2833 2447 2832
+f 2448 2447 2833
+f 2803 2417 2448
+f 2803 2448 2833
+f 2834 2449 2835
+f 2836 2835 2449
+f 2450 2836 2449
+f 2452 2449 2834
+f 2837 2452 2834
+f 2838 2836 2450
+f 2451 2839 2838
+f 2451 2838 2450
+f 2451 2452 2837
+f 2451 2837 2839
+f 2840 2453 2841
+f 2842 2841 2453
+f 2454 2842 2453
+f 2456 2453 2840
+f 2843 2456 2840
+f 2844 2842 2454
+f 2455 2845 2844
+f 2455 2844 2454
+f 2455 2456 2843
+f 2455 2843 2845
+f 2846 2457 2847
+f 2848 2847 2457
+f 2458 2848 2457
+f 2460 2457 2846
+f 2849 2460 2846
+f 2850 2848 2458
+f 2459 2851 2850
+f 2459 2850 2458
+f 2459 2460 2849
+f 2459 2849 2851
+f 2852 2461 2853
+f 2854 2853 2461
+f 2462 2854 2461
+f 2464 2461 2852
+f 2855 2464 2852
+f 2856 2854 2462
+f 2463 2857 2856
+f 2463 2856 2462
+f 2463 2464 2855
+f 2463 2855 2857
+f 2858 2465 2859
+f 2860 2859 2465
+f 2466 2860 2465
+f 2468 2465 2858
+f 2861 2468 2858
+f 2862 2860 2466
+f 2467 2863 2862
+f 2467 2862 2466
+f 2467 2468 2861
+f 2467 2861 2863
+f 2864 2469 2865
+f 2866 2865 2469
+f 2470 2866 2469
+f 2472 2469 2864
+f 2867 2472 2864
+f 2868 2866 2470
+f 2471 2869 2868
+f 2471 2868 2470
+f 2471 2472 2867
+f 2471 2867 2869
+f 2870 2474 2871
+f 2872 2871 2474
+f 2476 2872 2474
+f 2473 2474 2870
+f 2873 2473 2870
+f 2874 2872 2476
+f 2483 2875 2874
+f 2483 2874 2476
+f 2483 2473 2873
+f 2483 2873 2875
+f 2479 2480 2478
+f 2478 2480 2481
+f 2876 2481 2877
+f 2878 2877 2481
+f 2482 2878 2481
+f 2478 2481 2876
+f 2879 2478 2876
+f 2880 2878 2482
+f 2477 2881 2880
+f 2477 2880 2482
+f 2477 2478 2879
+f 2477 2879 2881
+f 2882 2485 2883
+f 2884 2883 2485
+f 2486 2884 2485
+f 2488 2485 2882
+f 2885 2488 2882
+f 2886 2884 2486
+f 2487 2887 2886
+f 2487 2886 2486
+f 2487 2488 2885
+f 2487 2885 2887
+f 2489 2484 2488
+f 2488 2484 2485
+f 2888 2491 2889
+f 2890 2889 2491
+f 2492 2890 2491
+f 2494 2491 2888
+f 2891 2494 2888
+f 2892 2890 2492
+f 2493 2893 2892
+f 2493 2892 2492
+f 2493 2494 2891
+f 2493 2891 2893
+f 2495 2490 2494
+f 2494 2490 2491
+f 2894 2497 2895
+f 2896 2895 2497
+f 2498 2896 2497
+f 2500 2497 2894
+f 2897 2500 2894
+f 2898 2896 2498
+f 2499 2899 2898
+f 2499 2898 2498
+f 2499 2500 2897
+f 2499 2897 2899
+f 2501 2496 2500
+f 2500 2496 2497
+f 2900 2503 2901
+f 2902 2901 2503
+f 2504 2902 2503
+f 2506 2503 2900
+f 2903 2506 2900
+f 2904 2902 2504
+f 2505 2905 2904
+f 2505 2904 2504
+f 2505 2506 2903
+f 2505 2903 2905
+f 2507 2502 2506
+f 2506 2502 2503
+f 2906 2508 2907
+f 2908 2907 2508
+f 2509 2908 2508
+f 2511 2508 2906
+f 2909 2511 2906
+f 2910 2908 2509
+f 2510 2911 2910
+f 2510 2910 2509
+f 2510 2511 2909
+f 2510 2909 2911
+f 2912 2512 2913
+f 2914 2913 2512
+f 2513 2914 2512
+f 2515 2512 2912
+f 2915 2515 2912
+f 2916 2914 2513
+f 2514 2917 2916
+f 2514 2916 2513
+f 2514 2515 2915
+f 2514 2915 2917
+f 2918 2516 2919
+f 2920 2919 2516
+f 2517 2920 2516
+f 2519 2516 2918
+f 2921 2519 2918
+f 2922 2920 2517
+f 2518 2923 2922
+f 2518 2922 2517
+f 2518 2519 2921
+f 2518 2921 2923
+f 2924 2520 2925
+f 2926 2925 2520
+f 2521 2926 2520
+f 2523 2520 2924
+f 2927 2523 2924
+f 2928 2926 2521
+f 2522 2929 2928
+f 2522 2928 2521
+f 2522 2523 2927
+f 2522 2927 2929
+f 2930 2524 2931
+f 2932 2931 2524
+f 2525 2932 2524
+f 2527 2524 2930
+f 2933 2527 2930
+f 2934 2932 2525
+f 2526 2935 2934
+f 2526 2934 2525
+f 2526 2527 2933
+f 2526 2933 2935
+f 2936 2528 2937
+f 2938 2937 2528
+f 2529 2938 2528
+f 2531 2528 2936
+f 2939 2531 2936
+f 2940 2938 2529
+f 2530 2941 2940
+f 2530 2940 2529
+f 2530 2531 2939
+f 2530 2939 2941
+f 2942 2532 2943
+f 2944 2943 2532
+f 2533 2944 2532
+f 2535 2532 2942
+f 2945 2535 2942
+f 2946 2944 2533
+f 2534 2947 2946
+f 2534 2946 2533
+f 2534 2535 2945
+f 2534 2945 2947
+f 2948 2536 2949
+f 2950 2949 2536
+f 2537 2950 2536
+f 2539 2536 2948
+f 2951 2539 2948
+f 2952 2950 2537
+f 2538 2953 2952
+f 2538 2952 2537
+f 2538 2539 2951
+f 2538 2951 2953
+f 2954 2540 2955
+f 2956 2955 2540
+f 2541 2956 2540
+f 2543 2540 2954
+f 2957 2543 2954
+f 2958 2956 2541
+f 2542 2959 2958
+f 2542 2958 2541
+f 2542 2543 2957
+f 2542 2957 2959
+f 2960 2544 2961
+f 2962 2961 2544
+f 2545 2962 2544
+f 2547 2544 2960
+f 2963 2547 2960
+f 2964 2962 2545
+f 2546 2965 2964
+f 2546 2964 2545
+f 2546 2547 2963
+f 2546 2963 2965
+f 2966 2548 2967
+f 2968 2967 2548
+f 2549 2968 2548
+f 2551 2548 2966
+f 2969 2551 2966
+f 2970 2968 2549
+f 2550 2971 2970
+f 2550 2970 2549
+f 2550 2551 2969
+f 2550 2969 2971
+f 2972 2552 2973
+f 2974 2973 2552
+f 2553 2974 2552
+f 2555 2552 2972
+f 2975 2555 2972
+f 2976 2974 2553
+f 2554 2977 2976
+f 2554 2976 2553
+f 2554 2555 2975
+f 2554 2975 2977
+f 2978 2556 2979
+f 2980 2979 2556
+f 2557 2980 2556
+f 2559 2556 2978
+f 2981 2559 2978
+f 2982 2980 2557
+f 2558 2983 2982
+f 2558 2982 2557
+f 2558 2559 2981
+f 2558 2981 2983
+f 2984 2560 2985
+f 2986 2985 2560
+f 2561 2986 2560
+f 2563 2560 2984
+f 2987 2563 2984
+f 2988 2986 2561
+f 2562 2989 2988
+f 2562 2988 2561
+f 2562 2563 2987
+f 2562 2987 2989
+f 2990 2564 2991
+f 2992 2991 2564
+f 2565 2992 2564
+f 2567 2564 2990
+f 2993 2567 2990
+f 2994 2992 2565
+f 2566 2995 2994
+f 2566 2994 2565
+f 2566 2567 2993
+f 2566 2993 2995
+f 2996 2568 2997
+f 2998 2997 2568
+f 2569 2998 2568
+f 2571 2568 2996
+f 2999 2571 2996
+f 3000 2998 2569
+f 2570 3001 3000
+f 2570 3000 2569
+f 2570 2571 2999
+f 2570 2999 3001
+f 3002 2573 3003
+f 3004 3003 2573
+f 2574 3004 2573
+f 2576 2573 3002
+f 3005 2576 3002
+f 3006 3004 2574
+f 2575 3007 3006
+f 2575 3006 2574
+f 2575 2576 3005
+f 2575 3005 3007
+f 2577 2572 2576
+f 2576 2572 2573
+f 3008 2579 3009
+f 3010 3009 2579
+f 2580 3010 2579
+f 2582 2579 3008
+f 3011 2582 3008
+f 3012 3010 2580
+f 2581 3013 3012
+f 2581 3012 2580
+f 2581 2582 3011
+f 2581 3011 3013
+f 2583 2578 2582
+f 2582 2578 2579
+f 3014 2585 3015
+f 3016 3015 2585
+f 2586 3016 2585
+f 2588 2585 3014
+f 3017 2588 3014
+f 3018 3016 2586
+f 2587 3019 3018
+f 2587 3018 2586
+f 2587 2588 3017
+f 2587 3017 3019
+f 3020 2589 3021
+f 3022 3021 2589
+f 2591 3022 2589
+f 2590 2589 3020
+f 3023 2590 3020
+f 3024 3022 2591
+f 2592 3025 3024
+f 2592 3024 2591
+f 2592 2590 3023
+f 2592 3023 3025
+f 3026 2594 3027
+f 3028 3027 2594
+f 2596 3028 2594
+f 2593 2594 3026
+f 3029 2593 3026
+f 3030 3028 2596
+f 2597 3031 3030
+f 2597 3030 2596
+f 2597 2593 3029
+f 2597 3029 3031
+f 3032 2598 3033
+f 3034 3033 2598
+f 2599 3034 2598
+f 2601 2598 3032
+f 3035 2601 3032
+f 3036 3034 2599
+f 2600 3037 3036
+f 2600 3036 2599
+f 2600 2601 3035
+f 2600 3035 3037
+f 3038 2602 3039
+f 3040 3039 2602
+f 2603 3040 2602
+f 2605 2602 3038
+f 3041 2605 3038
+f 3042 3040 2603
+f 2604 3043 3042
+f 2604 3042 2603
+f 2604 2605 3041
+f 2604 3041 3043
+f 3044 2606 3045
+f 3046 3045 2606
+f 2607 3046 2606
+f 2609 2606 3044
+f 3047 2609 3044
+f 3048 3046 2607
+f 2608 3049 3048
+f 2608 3048 2607
+f 2608 2609 3047
+f 2608 3047 3049
+f 3050 2610 3051
+f 3052 3051 2610
+f 2611 3052 2610
+f 2613 2610 3050
+f 3053 2613 3050
+f 3054 3052 2611
+f 2612 3055 3054
+f 2612 3054 2611
+f 2612 2613 3053
+f 2612 3053 3055
+f 3056 2614 3057
+f 3058 3057 2614
+f 2615 3058 2614
+f 2617 2614 3056
+f 3059 2617 3056
+f 3060 3058 2615
+f 2616 3061 3060
+f 2616 3060 2615
+f 2616 2617 3059
+f 2616 3059 3061
+f 3062 2618 3063
+f 3064 3063 2618
+f 2619 3064 2618
+f 2621 2618 3062
+f 3065 2621 3062
+f 3066 3064 2619
+f 2620 3067 3066
+f 2620 3066 2619
+f 2620 2621 3065
+f 2620 3065 3067
+f 3068 2622 3069
+f 3070 3069 2622
+f 2623 3070 2622
+f 2625 2622 3068
+f 3071 2625 3068
+f 3072 3070 2623
+f 2624 3073 3072
+f 2624 3072 2623
+f 2624 2625 3071
+f 2624 3071 3073
+f 3074 2626 3075
+f 3076 3075 2626
+f 2627 3076 2626
+f 2629 2626 3074
+f 3077 2629 3074
+f 3078 3076 2627
+f 2628 3079 3078
+f 2628 3078 2627
+f 2628 2629 3077
+f 2628 3077 3079
+f 3080 2630 3081
+f 3082 3081 2630
+f 2631 3082 2630
+f 2633 2630 3080
+f 3083 2633 3080
+f 3084 3082 2631
+f 2632 3085 3084
+f 2632 3084 2631
+f 2632 2633 3083
+f 2632 3083 3085
+f 3086 2634 3087
+f 3088 3087 2634
+f 2635 3088 2634
+f 2637 2634 3086
+f 3089 2637 3086
+f 3090 3088 2635
+f 2636 3091 3090
+f 2636 3090 2635
+f 2636 2637 3089
+f 2636 3089 3091
+f 3092 2638 3093
+f 3094 3093 2638
+f 2639 3094 2638
+f 2641 2638 3092
+f 3095 2641 3092
+f 3096 3094 2639
+f 2640 3097 3096
+f 2640 3096 2639
+f 2640 2641 3095
+f 2640 3095 3097
+f 3098 2642 3099
+f 3100 3099 2642
+f 2643 3100 2642
+f 2645 2642 3098
+f 3101 2645 3098
+f 3102 3100 2643
+f 2644 3103 3102
+f 2644 3102 2643
+f 2644 2645 3101
+f 2644 3101 3103
+f 3104 2646 3105
+f 3106 3105 2646
+f 2647 3106 2646
+f 2649 2646 3104
+f 3107 2649 3104
+f 3108 3106 2647
+f 2648 3109 3108
+f 2648 3108 2647
+f 2648 2649 3107
+f 2648 3107 3109
+f 3110 2651 3111
+f 3112 3111 2651
+f 2653 3112 2651
+f 2650 2651 3110
+f 3113 2650 3110
+f 3114 3112 2653
+f 2660 3115 3114
+f 2660 3114 2653
+f 2660 2650 3113
+f 2660 3113 3115
+f 2656 2657 2655
+f 2655 2657 2658
+f 3116 2658 3117
+f 3118 3117 2658
+f 2659 3118 2658
+f 2655 2658 3116
+f 3119 2655 3116
+f 3120 3118 2659
+f 2654 3121 3120
+f 2654 3120 2659
+f 2654 2655 3119
+f 2654 3119 3121
+f 3122 2662 3123
+f 3124 3123 2662
+f 2663 3124 2662
+f 2665 2662 3122
+f 3125 2665 3122
+f 3126 3124 2663
+f 2664 3127 3126
+f 2664 3126 2663
+f 2664 2665 3125
+f 2664 3125 3127
+f 2666 2661 2665
+f 2665 2661 2662
+f 3128 2668 3129
+f 3130 3129 2668
+f 2669 3130 2668
+f 2671 2668 3128
+f 3131 2671 3128
+f 3132 3130 2669
+f 2670 3133 3132
+f 2670 3132 2669
+f 2670 2671 3131
+f 2670 3131 3133
+f 2672 2667 2671
+f 2671 2667 2668
+f 3134 2674 3135
+f 3136 3135 2674
+f 2675 3136 2674
+f 2677 2674 3134
+f 3137 2677 3134
+f 3138 3136 2675
+f 2676 3139 3138
+f 2676 3138 2675
+f 2676 2677 3137
+f 2676 3137 3139
+f 2678 2673 2677
+f 2677 2673 2674
+f 3140 2680 3141
+f 3142 3141 2680
+f 2681 3142 2680
+f 2683 2680 3140
+f 3143 2683 3140
+f 3144 3142 2681
+f 2682 3145 3144
+f 2682 3144 2681
+f 2682 2683 3143
+f 2682 3143 3145
+f 2684 2679 2683
+f 2683 2679 2680
+f 3146 2685 3147
+f 3148 3147 2685
+f 2686 3148 2685
+f 2688 2685 3146
+f 3149 2688 3146
+f 3150 3148 2686
+f 2687 3151 3150
+f 2687 3150 2686
+f 2687 2688 3149
+f 2687 3149 3151
+f 3152 2689 3153
+f 3154 3153 2689
+f 2690 3154 2689
+f 2692 2689 3152
+f 3155 2692 3152
+f 3156 3154 2690
+f 2691 3157 3156
+f 2691 3156 2690
+f 2691 2692 3155
+f 2691 3155 3157
+f 3158 2693 3159
+f 3160 3159 2693
+f 2694 3160 2693
+f 2696 2693 3158
+f 3161 2696 3158
+f 3162 3160 2694
+f 2695 3163 3162
+f 2695 3162 2694
+f 2695 2696 3161
+f 2695 3161 3163
+f 3164 2697 3165
+f 3166 3165 2697
+f 2698 3166 2697
+f 2700 2697 3164
+f 3167 2700 3164
+f 3168 3166 2698
+f 2699 3169 3168
+f 2699 3168 2698
+f 2699 2700 3167
+f 2699 3167 3169
+f 3170 2701 3171
+f 3172 3171 2701
+f 2702 3172 2701
+f 2704 2701 3170
+f 3173 2704 3170
+f 3174 3172 2702
+f 2703 3175 3174
+f 2703 3174 2702
+f 2703 2704 3173
+f 2703 3173 3175
+f 3176 2705 3177
+f 3178 3177 2705
+f 2706 3178 2705
+f 2708 2705 3176
+f 3179 2708 3176
+f 3180 3178 2706
+f 2707 3181 3180
+f 2707 3180 2706
+f 2707 2708 3179
+f 2707 3179 3181
+f 3182 2709 3183
+f 3184 3183 2709
+f 2710 3184 2709
+f 2712 2709 3182
+f 3185 2712 3182
+f 3186 3184 2710
+f 2711 3187 3186
+f 2711 3186 2710
+f 2711 2712 3185
+f 2711 3185 3187
+f 3188 2713 3189
+f 3190 3189 2713
+f 2714 3190 2713
+f 2716 2713 3188
+f 3191 2716 3188
+f 3192 3190 2714
+f 2715 3193 3192
+f 2715 3192 2714
+f 2715 2716 3191
+f 2715 3191 3193
+f 3194 2717 3195
+f 3196 3195 2717
+f 2718 3196 2717
+f 2720 2717 3194
+f 3197 2720 3194
+f 3198 3196 2718
+f 2719 3199 3198
+f 2719 3198 2718
+f 2719 2720 3197
+f 2719 3197 3199
+f 3200 2721 3201
+f 3202 3201 2721
+f 2722 3202 2721
+f 2724 2721 3200
+f 3203 2724 3200
+f 3204 3202 2722
+f 2723 3205 3204
+f 2723 3204 2722
+f 2723 2724 3203
+f 2723 3203 3205
+f 3206 2725 3207
+f 3208 3207 2725
+f 2726 3208 2725
+f 2728 2725 3206
+f 3209 2728 3206
+f 3210 3208 2726
+f 2727 3211 3210
+f 2727 3210 2726
+f 2727 2728 3209
+f 2727 3209 3211
+f 3212 2729 3213
+f 3214 3213 2729
+f 2730 3214 2729
+f 2732 2729 3212
+f 3215 2732 3212
+f 3216 3214 2730
+f 2731 3217 3216
+f 2731 3216 2730
+f 2731 2732 3215
+f 2731 3215 3217
+f 3218 2733 3219
+f 3220 3219 2733
+f 2734 3220 2733
+f 2736 2733 3218
+f 3221 2736 3218
+f 3222 3220 2734
+f 2735 3223 3222
+f 2735 3222 2734
+f 2735 2736 3221
+f 2735 3221 3223
+f 3224 2737 3225
+f 3226 3225 2737
+f 2738 3226 2737
+f 2740 2737 3224
+f 3227 2740 3224
+f 3228 3226 2738
+f 2739 3229 3228
+f 2739 3228 2738
+f 2739 2740 3227
+f 2739 3227 3229
+f 3230 2741 3231
+f 3232 3231 2741
+f 2742 3232 2741
+f 2744 2741 3230
+f 3233 2744 3230
+f 3234 3232 2742
+f 2743 3235 3234
+f 2743 3234 2742
+f 2743 2744 3233
+f 2743 3233 3235
+f 3236 2745 3237
+f 3238 3237 2745
+f 2746 3238 2745
+f 2748 2745 3236
+f 3239 2748 3236
+f 3240 3238 2746
+f 2747 3241 3240
+f 2747 3240 2746
+f 2747 2748 3239
+f 2747 3239 3241
+f 3242 2750 3243
+f 3244 3243 2750
+f 2751 3244 2750
+f 2753 2750 3242
+f 3245 2753 3242
+f 3246 3244 2751
+f 2752 3247 3246
+f 2752 3246 2751
+f 2752 2753 3245
+f 2752 3245 3247
+f 2754 2749 2753
+f 2753 2749 2750
+f 3248 2756 3249
+f 3250 3249 2756
+f 2757 3250 2756
+f 2759 2756 3248
+f 3251 2759 3248
+f 3252 3250 2757
+f 2758 3253 3252
+f 2758 3252 2757
+f 2758 2759 3251
+f 2758 3251 3253
+f 2760 2755 2759
+f 2759 2755 2756
+f 3254 2762 3255
+f 3256 3255 2762
+f 2763 3256 2762
+f 2765 2762 3254
+f 3257 2765 3254
+f 3258 3256 2763
+f 2764 3259 3258
+f 2764 3258 2763
+f 2764 2765 3257
+f 2764 3257 3259
+f 3260 2767 3261
+f 3262 3261 2767
+f 2768 3262 2767
+f 2766 2767 3260
+f 3263 2766 3260
+f 3264 3262 2768
+f 2769 3265 3264
+f 2769 3264 2768
+f 2769 2766 3263
+f 2769 3263 3265
+f 3266 2771 3267
+f 3268 3267 2771
+f 2773 3268 2771
+f 2770 2771 3266
+f 3269 2770 3266
+f 3270 3268 2773
+f 2774 3271 3270
+f 2774 3270 2773
+f 2774 2770 3269
+f 2774 3269 3271
+f 3272 2775 3273
+f 3274 3273 2775
+f 2776 3274 2775
+f 2778 2775 3272
+f 3275 2778 3272
+f 3276 3274 2776
+f 2777 3277 3276
+f 2777 3276 2776
+f 2777 2778 3275
+f 2777 3275 3277
+f 3278 2779 3279
+f 3280 3279 2779
+f 2780 3280 2779
+f 2782 2779 3278
+f 3281 2782 3278
+f 3282 3280 2780
+f 2781 3283 3282
+f 2781 3282 2780
+f 2781 2782 3281
+f 2781 3281 3283
+f 3284 2783 3285
+f 3286 3285 2783
+f 2784 3286 2783
+f 2786 2783 3284
+f 3287 2786 3284
+f 3288 3286 2784
+f 2785 3289 3288
+f 2785 3288 2784
+f 2785 2786 3287
+f 2785 3287 3289
+f 3290 2787 3291
+f 3292 3291 2787
+f 2788 3292 2787
+f 2790 2787 3290
+f 3293 2790 3290
+f 3294 3292 2788
+f 2789 3295 3294
+f 2789 3294 2788
+f 2789 2790 3293
+f 2789 3293 3295
+f 3296 2791 3297
+f 3298 3297 2791
+f 2792 3298 2791
+f 2794 2791 3296
+f 3299 2794 3296
+f 3300 3298 2792
+f 2793 3301 3300
+f 2793 3300 2792
+f 2793 2794 3299
+f 2793 3299 3301
+f 3302 2795 3303
+f 3304 3303 2795
+f 2796 3304 2795
+f 2798 2795 3302
+f 3305 2798 3302
+f 3306 3304 2796
+f 2797 3307 3306
+f 2797 3306 2796
+f 2797 2798 3305
+f 2797 3305 3307
+f 3308 2799 3309
+f 3310 3309 2799
+f 2800 3310 2799
+f 2802 2799 3308
+f 3311 2802 3308
+f 3312 3310 2800
+f 2801 3313 3312
+f 2801 3312 2800
+f 2801 2802 3311
+f 2801 3311 3313
+f 2804 2803 3314
+f 3315 2804 3314
+f 3316 2805 2804
+f 3316 2804 3315
+f 3317 2806 2805
+f 3317 2805 3316
+f 3318 2807 2806
+f 3318 2806 3317
+f 3319 2808 2807
+f 3319 2807 3318
+f 2809 2808 3319
+f 3320 2809 3319
+f 3321 2810 2809
+f 3321 2809 3320
+f 3322 2811 2810
+f 3322 2810 3321
+f 3323 2811 3322
+f 3323 2812 2811
+f 3324 2812 3323
+f 3324 2813 2812
+f 3325 2813 3324
+f 3325 2814 2813
+f 2815 2814 3325
+f 3326 2815 3325
+f 3327 2816 2815
+f 3327 2815 3326
+f 3328 2817 2816
+f 3328 2816 3327
+f 3329 2818 2817
+f 3329 2817 3328
+f 3330 2819 2818
+f 3330 2818 3329
+f 3331 2820 2819
+f 3331 2819 3330
+f 3332 2821 2820
+f 3332 2820 3331
+f 3333 2822 2821
+f 3333 2821 3332
+f 3334 2823 2822
+f 3334 2822 3333
+f 3335 2824 2823
+f 3335 2823 3334
+f 3336 2825 2824
+f 3336 2824 3335
+f 3337 2826 2825
+f 3337 2825 3336
+f 3338 2827 2826
+f 3338 2826 3337
+f 2828 2827 3338
+f 3339 2828 3338
+f 3340 2829 2828
+f 3340 2828 3339
+f 3341 2830 2829
+f 3341 2829 3340
+f 3342 2831 2830
+f 3342 2830 3341
+f 2832 2831 3342
+f 3343 2832 3342
+f 3344 2833 2832
+f 3344 2832 3343
+f 2803 2833 3344
+f 3314 2803 3344
+f 3345 2835 2836
+f 3346 3345 2836
+f 3346 2836 2838
+f 3347 3346 2838
+f 3347 2838 2839
+f 3348 3347 2839
+f 3348 2839 2837
+f 3349 3348 2837
+f 3349 2837 2834
+f 3350 3349 2834
+f 3350 2834 2835
+f 3345 3350 2835
+f 3351 2841 2842
+f 3352 3351 2842
+f 3352 2842 2844
+f 3353 3352 2844
+f 3353 2844 2845
+f 3354 3353 2845
+f 3354 2845 2843
+f 3355 3354 2843
+f 3355 2843 2840
+f 3356 3355 2840
+f 3356 2840 2841
+f 3351 3356 2841
+f 3357 2847 2848
+f 3358 3357 2848
+f 3358 2848 2850
+f 3359 3358 2850
+f 3359 2850 2851
+f 3360 3359 2851
+f 3360 2851 2849
+f 3361 3360 2849
+f 3361 2849 2846
+f 3362 3361 2846
+f 3362 2846 2847
+f 3357 3362 2847
+f 3363 2853 2854
+f 3364 3363 2854
+f 3364 2854 2856
+f 3365 3364 2856
+f 3365 2856 2857
+f 3366 3365 2857
+f 3366 2857 2855
+f 3367 3366 2855
+f 3367 2855 2852
+f 3368 3367 2852
+f 3368 2852 2853
+f 3363 3368 2853
+f 3369 2859 2860
+f 3370 3369 2860
+f 3370 2860 2862
+f 3371 3370 2862
+f 3371 2862 2863
+f 3372 3371 2863
+f 3372 2863 2861
+f 3373 3372 2861
+f 3373 2861 2858
+f 3374 3373 2858
+f 3374 2858 2859
+f 3369 3374 2859
+f 3375 2865 2866
+f 3376 3375 2866
+f 3376 2866 2868
+f 3377 3376 2868
+f 3377 2868 2869
+f 3378 3377 2869
+f 3378 2869 2867
+f 3379 3378 2867
+f 3379 2867 2864
+f 3380 3379 2864
+f 3380 2864 2865
+f 3375 3380 2865
+f 3381 2871 2872
+f 3382 3381 2872
+f 3382 2872 2874
+f 3383 3382 2874
+f 3383 2874 2875
+f 3384 3383 2875
+f 3384 2875 2873
+f 3385 3384 2873
+f 3385 2873 2870
+f 3386 3385 2870
+f 3386 2870 2871
+f 3381 3386 2871
+f 3387 2877 2878
+f 3388 3387 2878
+f 3388 2878 2880
+f 3389 3388 2880
+f 3389 2880 2881
+f 3390 3389 2881
+f 3390 2881 2879
+f 3391 3390 2879
+f 3391 2879 2876
+f 3392 3391 2876
+f 3392 2876 2877
+f 3387 3392 2877
+f 3393 2883 2884
+f 3394 3393 2884
+f 3394 2884 2886
+f 3395 3394 2886
+f 3395 2886 2887
+f 3396 3395 2887
+f 3396 2887 2885
+f 3397 3396 2885
+f 3397 2885 2882
+f 3398 3397 2882
+f 3398 2882 2883
+f 3393 3398 2883
+f 3399 2889 2890
+f 3400 3399 2890
+f 3400 2890 2892
+f 3401 3400 2892
+f 3401 2892 2893
+f 3402 3401 2893
+f 3402 2893 2891
+f 3403 3402 2891
+f 3403 2891 2888
+f 3404 3403 2888
+f 3404 2888 2889
+f 3399 3404 2889
+f 3405 2895 2896
+f 3406 3405 2896
+f 3406 2896 2898
+f 3407 3406 2898
+f 3407 2898 2899
+f 3408 3407 2899
+f 3408 2899 2897
+f 3409 3408 2897
+f 3409 2897 2894
+f 3410 3409 2894
+f 3410 2894 2895
+f 3405 3410 2895
+f 3411 2901 2902
+f 3412 3411 2902
+f 3412 2902 2904
+f 3413 3412 2904
+f 3413 2904 2905
+f 3414 3413 2905
+f 3414 2905 2903
+f 3415 3414 2903
+f 3415 2903 2900
+f 3416 3415 2900
+f 3416 2900 2901
+f 3411 3416 2901
+f 3417 2907 2908
+f 3418 3417 2908
+f 3418 2908 2910
+f 3419 3418 2910
+f 3419 2910 2911
+f 3420 3419 2911
+f 3420 2911 2909
+f 3421 3420 2909
+f 3421 2909 2906
+f 3422 3421 2906
+f 3422 2906 2907
+f 3417 3422 2907
+f 3423 2913 2914
+f 3424 3423 2914
+f 3424 2914 2916
+f 3425 3424 2916
+f 3425 2916 2917
+f 3426 3425 2917
+f 3426 2917 2915
+f 3427 3426 2915
+f 3427 2915 2912
+f 3428 3427 2912
+f 3428 2912 2913
+f 3423 3428 2913
+f 3429 2919 2920
+f 3430 3429 2920
+f 3430 2920 2922
+f 3431 3430 2922
+f 3431 2922 2923
+f 3432 3431 2923
+f 3432 2923 2921
+f 3433 3432 2921
+f 3433 2921 2918
+f 3434 3433 2918
+f 3434 2918 2919
+f 3429 3434 2919
+f 3435 2925 2926
+f 3436 3435 2926
+f 3436 2926 2928
+f 3437 3436 2928
+f 3437 2928 2929
+f 3438 3437 2929
+f 3438 2929 2927
+f 3439 3438 2927
+f 3439 2927 2924
+f 3440 3439 2924
+f 3440 2924 2925
+f 3435 3440 2925
+f 3441 2931 2932
+f 3442 3441 2932
+f 3442 2932 2934
+f 3443 3442 2934
+f 3443 2934 2935
+f 3444 3443 2935
+f 3444 2935 2933
+f 3445 3444 2933
+f 3445 2933 2930
+f 3446 3445 2930
+f 3446 2930 2931
+f 3441 3446 2931
+f 3447 2937 2938
+f 3448 3447 2938
+f 3448 2938 2940
+f 3449 3448 2940
+f 3449 2940 2941
+f 3450 3449 2941
+f 3450 2941 2939
+f 3451 3450 2939
+f 3451 2939 2936
+f 3452 3451 2936
+f 3452 2936 2937
+f 3447 3452 2937
+f 3453 2943 2944
+f 3454 3453 2944
+f 3454 2944 2946
+f 3455 3454 2946
+f 3455 2946 2947
+f 3456 3455 2947
+f 3456 2947 2945
+f 3457 3456 2945
+f 3457 2945 2942
+f 3458 3457 2942
+f 3458 2942 2943
+f 3453 3458 2943
+f 3459 2949 2950
+f 3460 3459 2950
+f 3460 2950 2952
+f 3461 3460 2952
+f 3461 2952 2953
+f 3462 3461 2953
+f 3462 2953 2951
+f 3463 3462 2951
+f 3463 2951 2948
+f 3464 3463 2948
+f 3464 2948 2949
+f 3459 3464 2949
+f 3465 2955 2956
+f 3466 3465 2956
+f 3466 2956 2958
+f 3467 3466 2958
+f 3467 2958 2959
+f 3468 3467 2959
+f 3468 2959 2957
+f 3469 3468 2957
+f 3469 2957 2954
+f 3470 3469 2954
+f 3470 2954 2955
+f 3465 3470 2955
+f 3471 2961 2962
+f 3472 3471 2962
+f 3472 2962 2964
+f 3473 3472 2964
+f 3473 2964 2965
+f 3474 3473 2965
+f 3474 2965 2963
+f 3475 3474 2963
+f 3475 2963 2960
+f 3476 3475 2960
+f 3476 2960 2961
+f 3471 3476 2961
+f 3477 2967 2968
+f 3478 3477 2968
+f 3478 2968 2970
+f 3479 3478 2970
+f 3479 2970 2971
+f 3480 3479 2971
+f 3480 2971 2969
+f 3481 3480 2969
+f 3481 2969 2966
+f 3482 3481 2966
+f 3482 2966 2967
+f 3477 3482 2967
+f 3483 2973 2974
+f 3484 3483 2974
+f 3484 2974 2976
+f 3485 3484 2976
+f 3485 2976 2977
+f 3486 3485 2977
+f 3486 2977 2975
+f 3487 3486 2975
+f 3487 2975 2972
+f 3488 3487 2972
+f 3488 2972 2973
+f 3483 3488 2973
+f 3489 2979 2980
+f 3490 3489 2980
+f 3490 2980 2982
+f 3491 3490 2982
+f 3491 2982 2983
+f 3492 3491 2983
+f 3492 2983 2981
+f 3493 3492 2981
+f 3493 2981 2978
+f 3494 3493 2978
+f 3494 2978 2979
+f 3489 3494 2979
+f 3495 2985 2986
+f 3496 3495 2986
+f 3496 2986 2988
+f 3497 3496 2988
+f 3497 2988 2989
+f 3498 3497 2989
+f 3498 2989 2987
+f 3499 3498 2987
+f 3499 2987 2984
+f 3500 3499 2984
+f 3500 2984 2985
+f 3495 3500 2985
+f 3501 2991 2992
+f 3502 3501 2992
+f 3502 2992 2994
+f 3503 3502 2994
+f 3503 2994 2995
+f 3504 3503 2995
+f 3504 2995 2993
+f 3505 3504 2993
+f 3505 2993 2990
+f 3506 3505 2990
+f 3506 2990 2991
+f 3501 3506 2991
+f 3507 2997 2998
+f 3508 3507 2998
+f 3508 2998 3000
+f 3509 3508 3000
+f 3509 3000 3001
+f 3510 3509 3001
+f 3510 3001 2999
+f 3511 3510 2999
+f 3511 2999 2996
+f 3512 3511 2996
+f 3512 2996 2997
+f 3507 3512 2997
+f 3513 3003 3004
+f 3514 3513 3004
+f 3514 3004 3006
+f 3515 3514 3006
+f 3515 3006 3007
+f 3516 3515 3007
+f 3516 3007 3005
+f 3517 3516 3005
+f 3517 3005 3002
+f 3518 3517 3002
+f 3518 3002 3003
+f 3513 3518 3003
+f 3519 3009 3010
+f 3520 3519 3010
+f 3520 3010 3012
+f 3521 3520 3012
+f 3521 3012 3013
+f 3522 3521 3013
+f 3522 3013 3011
+f 3523 3522 3011
+f 3523 3011 3008
+f 3524 3523 3008
+f 3524 3008 3009
+f 3519 3524 3009
+f 3525 3015 3016
+f 3526 3525 3016
+f 3526 3016 3018
+f 3527 3526 3018
+f 3527 3018 3019
+f 3528 3527 3019
+f 3528 3019 3017
+f 3529 3528 3017
+f 3529 3017 3014
+f 3530 3529 3014
+f 3530 3014 3015
+f 3525 3530 3015
+f 3531 3021 3022
+f 3532 3531 3022
+f 3532 3022 3024
+f 3533 3532 3024
+f 3533 3024 3025
+f 3534 3533 3025
+f 3534 3025 3023
+f 3535 3534 3023
+f 3535 3023 3020
+f 3536 3535 3020
+f 3536 3020 3021
+f 3531 3536 3021
+f 3537 3027 3028
+f 3538 3537 3028
+f 3538 3028 3030
+f 3539 3538 3030
+f 3539 3030 3031
+f 3540 3539 3031
+f 3540 3031 3029
+f 3541 3540 3029
+f 3541 3029 3026
+f 3542 3541 3026
+f 3542 3026 3027
+f 3537 3542 3027
+f 3543 3033 3034
+f 3544 3543 3034
+f 3544 3034 3036
+f 3545 3544 3036
+f 3545 3036 3037
+f 3546 3545 3037
+f 3546 3037 3035
+f 3547 3546 3035
+f 3547 3035 3032
+f 3548 3547 3032
+f 3548 3032 3033
+f 3543 3548 3033
+f 3549 3039 3040
+f 3550 3549 3040
+f 3550 3040 3042
+f 3551 3550 3042
+f 3551 3042 3043
+f 3552 3551 3043
+f 3552 3043 3041
+f 3553 3552 3041
+f 3553 3041 3038
+f 3554 3553 3038
+f 3554 3038 3039
+f 3549 3554 3039
+f 3555 3045 3046
+f 3556 3555 3046
+f 3556 3046 3048
+f 3557 3556 3048
+f 3557 3048 3049
+f 3558 3557 3049
+f 3558 3049 3047
+f 3559 3558 3047
+f 3559 3047 3044
+f 3560 3559 3044
+f 3560 3044 3045
+f 3555 3560 3045
+f 3561 3051 3052
+f 3562 3561 3052
+f 3562 3052 3054
+f 3563 3562 3054
+f 3563 3054 3055
+f 3564 3563 3055
+f 3564 3055 3053
+f 3565 3564 3053
+f 3565 3053 3050
+f 3566 3565 3050
+f 3566 3050 3051
+f 3561 3566 3051
+f 3567 3057 3058
+f 3568 3567 3058
+f 3568 3058 3060
+f 3569 3568 3060
+f 3569 3060 3061
+f 3570 3569 3061
+f 3570 3061 3059
+f 3571 3570 3059
+f 3571 3059 3056
+f 3572 3571 3056
+f 3572 3056 3057
+f 3567 3572 3057
+f 3573 3063 3064
+f 3574 3573 3064
+f 3574 3064 3066
+f 3575 3574 3066
+f 3575 3066 3067
+f 3576 3575 3067
+f 3576 3067 3065
+f 3577 3576 3065
+f 3577 3065 3062
+f 3578 3577 3062
+f 3578 3062 3063
+f 3573 3578 3063
+f 3579 3069 3070
+f 3580 3579 3070
+f 3580 3070 3072
+f 3581 3580 3072
+f 3581 3072 3073
+f 3582 3581 3073
+f 3582 3073 3071
+f 3583 3582 3071
+f 3583 3071 3068
+f 3584 3583 3068
+f 3584 3068 3069
+f 3579 3584 3069
+f 3585 3075 3076
+f 3586 3585 3076
+f 3586 3076 3078
+f 3587 3586 3078
+f 3587 3078 3079
+f 3588 3587 3079
+f 3588 3079 3077
+f 3589 3588 3077
+f 3589 3077 3074
+f 3590 3589 3074
+f 3590 3074 3075
+f 3585 3590 3075
+f 3591 3081 3082
+f 3592 3591 3082
+f 3592 3082 3084
+f 3593 3592 3084
+f 3593 3084 3085
+f 3594 3593 3085
+f 3594 3085 3083
+f 3595 3594 3083
+f 3595 3083 3080
+f 3596 3595 3080
+f 3596 3080 3081
+f 3591 3596 3081
+f 3597 3087 3088
+f 3598 3597 3088
+f 3598 3088 3090
+f 3599 3598 3090
+f 3599 3090 3091
+f 3600 3599 3091
+f 3600 3091 3089
+f 3601 3600 3089
+f 3601 3089 3086
+f 3602 3601 3086
+f 3602 3086 3087
+f 3597 3602 3087
+f 3603 3093 3094
+f 3604 3603 3094
+f 3604 3094 3096
+f 3605 3604 3096
+f 3605 3096 3097
+f 3606 3605 3097
+f 3606 3097 3095
+f 3607 3606 3095
+f 3607 3095 3092
+f 3608 3607 3092
+f 3608 3092 3093
+f 3603 3608 3093
+f 3609 3099 3100
+f 3610 3609 3100
+f 3610 3100 3102
+f 3611 3610 3102
+f 3611 3102 3103
+f 3612 3611 3103
+f 3612 3103 3101
+f 3613 3612 3101
+f 3613 3101 3098
+f 3614 3613 3098
+f 3614 3098 3099
+f 3609 3614 3099
+f 3615 3105 3106
+f 3616 3615 3106
+f 3616 3106 3108
+f 3617 3616 3108
+f 3617 3108 3109
+f 3618 3617 3109
+f 3618 3109 3107
+f 3619 3618 3107
+f 3619 3107 3104
+f 3620 3619 3104
+f 3620 3104 3105
+f 3615 3620 3105
+f 3621 3111 3112
+f 3622 3621 3112
+f 3622 3112 3114
+f 3623 3622 3114
+f 3623 3114 3115
+f 3624 3623 3115
+f 3624 3115 3113
+f 3625 3624 3113
+f 3625 3113 3110
+f 3626 3625 3110
+f 3626 3110 3111
+f 3621 3626 3111
+f 3627 3117 3118
+f 3628 3627 3118
+f 3628 3118 3120
+f 3629 3628 3120
+f 3629 3120 3121
+f 3630 3629 3121
+f 3630 3121 3119
+f 3631 3630 3119
+f 3631 3119 3116
+f 3632 3631 3116
+f 3632 3116 3117
+f 3627 3632 3117
+f 3633 3123 3124
+f 3634 3633 3124
+f 3634 3124 3126
+f 3635 3634 3126
+f 3635 3126 3127
+f 3636 3635 3127
+f 3636 3127 3125
+f 3637 3636 3125
+f 3637 3125 3122
+f 3638 3637 3122
+f 3638 3122 3123
+f 3633 3638 3123
+f 3639 3129 3130
+f 3640 3639 3130
+f 3640 3130 3132
+f 3641 3640 3132
+f 3641 3132 3133
+f 3642 3641 3133
+f 3642 3133 3131
+f 3643 3642 3131
+f 3643 3131 3128
+f 3644 3643 3128
+f 3644 3128 3129
+f 3639 3644 3129
+f 3645 3135 3136
+f 3646 3645 3136
+f 3646 3136 3138
+f 3647 3646 3138
+f 3647 3138 3139
+f 3648 3647 3139
+f 3648 3139 3137
+f 3649 3648 3137
+f 3649 3137 3134
+f 3650 3649 3134
+f 3650 3134 3135
+f 3645 3650 3135
+f 3651 3141 3142
+f 3652 3651 3142
+f 3652 3142 3144
+f 3653 3652 3144
+f 3653 3144 3145
+f 3654 3653 3145
+f 3654 3145 3143
+f 3655 3654 3143
+f 3655 3143 3140
+f 3656 3655 3140
+f 3656 3140 3141
+f 3651 3656 3141
+f 3657 3147 3148
+f 3658 3657 3148
+f 3658 3148 3150
+f 3659 3658 3150
+f 3659 3150 3151
+f 3660 3659 3151
+f 3660 3151 3149
+f 3661 3660 3149
+f 3661 3149 3146
+f 3662 3661 3146
+f 3662 3146 3147
+f 3657 3662 3147
+f 3663 3153 3154
+f 3664 3663 3154
+f 3664 3154 3156
+f 3665 3664 3156
+f 3665 3156 3157
+f 3666 3665 3157
+f 3666 3157 3155
+f 3667 3666 3155
+f 3667 3155 3152
+f 3668 3667 3152
+f 3668 3152 3153
+f 3663 3668 3153
+f 3669 3159 3160
+f 3670 3669 3160
+f 3670 3160 3162
+f 3671 3670 3162
+f 3671 3162 3163
+f 3672 3671 3163
+f 3672 3163 3161
+f 3673 3672 3161
+f 3673 3161 3158
+f 3674 3673 3158
+f 3674 3158 3159
+f 3669 3674 3159
+f 3675 3165 3166
+f 3676 3675 3166
+f 3676 3166 3168
+f 3677 3676 3168
+f 3677 3168 3169
+f 3678 3677 3169
+f 3678 3169 3167
+f 3679 3678 3167
+f 3679 3167 3164
+f 3680 3679 3164
+f 3680 3164 3165
+f 3675 3680 3165
+f 3681 3171 3172
+f 3682 3681 3172
+f 3682 3172 3174
+f 3683 3682 3174
+f 3683 3174 3175
+f 3684 3683 3175
+f 3684 3175 3173
+f 3685 3684 3173
+f 3685 3173 3170
+f 3686 3685 3170
+f 3686 3170 3171
+f 3681 3686 3171
+f 3687 3177 3178
+f 3688 3687 3178
+f 3688 3178 3180
+f 3689 3688 3180
+f 3689 3180 3181
+f 3690 3689 3181
+f 3690 3181 3179
+f 3691 3690 3179
+f 3691 3179 3176
+f 3692 3691 3176
+f 3692 3176 3177
+f 3687 3692 3177
+f 3693 3183 3184
+f 3694 3693 3184
+f 3694 3184 3186
+f 3695 3694 3186
+f 3695 3186 3187
+f 3696 3695 3187
+f 3696 3187 3185
+f 3697 3696 3185
+f 3697 3185 3182
+f 3698 3697 3182
+f 3698 3182 3183
+f 3693 3698 3183
+f 3699 3189 3190
+f 3700 3699 3190
+f 3700 3190 3192
+f 3701 3700 3192
+f 3701 3192 3193
+f 3702 3701 3193
+f 3702 3193 3191
+f 3703 3702 3191
+f 3703 3191 3188
+f 3704 3703 3188
+f 3704 3188 3189
+f 3699 3704 3189
+f 3705 3195 3196
+f 3706 3705 3196
+f 3706 3196 3198
+f 3707 3706 3198
+f 3707 3198 3199
+f 3708 3707 3199
+f 3708 3199 3197
+f 3709 3708 3197
+f 3709 3197 3194
+f 3710 3709 3194
+f 3710 3194 3195
+f 3705 3710 3195
+f 3711 3201 3202
+f 3712 3711 3202
+f 3712 3202 3204
+f 3713 3712 3204
+f 3713 3204 3205
+f 3714 3713 3205
+f 3714 3205 3203
+f 3715 3714 3203
+f 3715 3203 3200
+f 3716 3715 3200
+f 3716 3200 3201
+f 3711 3716 3201
+f 3717 3207 3208
+f 3718 3717 3208
+f 3718 3208 3210
+f 3719 3718 3210
+f 3719 3210 3211
+f 3720 3719 3211
+f 3720 3211 3209
+f 3721 3720 3209
+f 3721 3209 3206
+f 3722 3721 3206
+f 3722 3206 3207
+f 3717 3722 3207
+f 3723 3213 3214
+f 3724 3723 3214
+f 3724 3214 3216
+f 3725 3724 3216
+f 3725 3216 3217
+f 3726 3725 3217
+f 3726 3217 3215
+f 3727 3726 3215
+f 3727 3215 3212
+f 3728 3727 3212
+f 3728 3212 3213
+f 3723 3728 3213
+f 3729 3219 3220
+f 3730 3729 3220
+f 3730 3220 3222
+f 3731 3730 3222
+f 3731 3222 3223
+f 3732 3731 3223
+f 3732 3223 3221
+f 3733 3732 3221
+f 3733 3221 3218
+f 3734 3733 3218
+f 3734 3218 3219
+f 3729 3734 3219
+f 3735 3225 3226
+f 3736 3735 3226
+f 3736 3226 3228
+f 3737 3736 3228
+f 3737 3228 3229
+f 3738 3737 3229
+f 3738 3229 3227
+f 3739 3738 3227
+f 3739 3227 3224
+f 3740 3739 3224
+f 3740 3224 3225
+f 3735 3740 3225
+f 3741 3231 3232
+f 3742 3741 3232
+f 3742 3232 3234
+f 3743 3742 3234
+f 3743 3234 3235
+f 3744 3743 3235
+f 3744 3235 3233
+f 3745 3744 3233
+f 3745 3233 3230
+f 3746 3745 3230
+f 3746 3230 3231
+f 3741 3746 3231
+f 3747 3237 3238
+f 3748 3747 3238
+f 3748 3238 3240
+f 3749 3748 3240
+f 3749 3240 3241
+f 3750 3749 3241
+f 3750 3241 3239
+f 3751 3750 3239
+f 3751 3239 3236
+f 3752 3751 3236
+f 3752 3236 3237
+f 3747 3752 3237
+f 3753 3243 3244
+f 3754 3753 3244
+f 3754 3244 3246
+f 3755 3754 3246
+f 3755 3246 3247
+f 3756 3755 3247
+f 3756 3247 3245
+f 3757 3756 3245
+f 3757 3245 3242
+f 3758 3757 3242
+f 3758 3242 3243
+f 3753 3758 3243
+f 3759 3249 3250
+f 3760 3759 3250
+f 3760 3250 3252
+f 3761 3760 3252
+f 3761 3252 3253
+f 3762 3761 3253
+f 3762 3253 3251
+f 3763 3762 3251
+f 3763 3251 3248
+f 3764 3763 3248
+f 3764 3248 3249
+f 3759 3764 3249
+f 3765 3255 3256
+f 3766 3765 3256
+f 3766 3256 3258
+f 3767 3766 3258
+f 3767 3258 3259
+f 3768 3767 3259
+f 3768 3259 3257
+f 3769 3768 3257
+f 3769 3257 3254
+f 3770 3769 3254
+f 3770 3254 3255
+f 3765 3770 3255
+f 3771 3261 3262
+f 3772 3771 3262
+f 3772 3262 3264
+f 3773 3772 3264
+f 3773 3264 3265
+f 3774 3773 3265
+f 3774 3265 3263
+f 3775 3774 3263
+f 3775 3263 3260
+f 3776 3775 3260
+f 3776 3260 3261
+f 3771 3776 3261
+f 3777 3267 3268
+f 3778 3777 3268
+f 3778 3268 3270
+f 3779 3778 3270
+f 3779 3270 3271
+f 3780 3779 3271
+f 3780 3271 3269
+f 3781 3780 3269
+f 3781 3269 3266
+f 3782 3781 3266
+f 3782 3266 3267
+f 3777 3782 3267
+f 3783 3273 3274
+f 3784 3783 3274
+f 3784 3274 3276
+f 3785 3784 3276
+f 3785 3276 3277
+f 3786 3785 3277
+f 3786 3277 3275
+f 3787 3786 3275
+f 3787 3275 3272
+f 3788 3787 3272
+f 3788 3272 3273
+f 3783 3788 3273
+f 3789 3279 3280
+f 3790 3789 3280
+f 3790 3280 3282
+f 3791 3790 3282
+f 3791 3282 3283
+f 3792 3791 3283
+f 3792 3283 3281
+f 3793 3792 3281
+f 3793 3281 3278
+f 3794 3793 3278
+f 3794 3278 3279
+f 3789 3794 3279
+f 3795 3285 3286
+f 3796 3795 3286
+f 3796 3286 3288
+f 3797 3796 3288
+f 3797 3288 3289
+f 3798 3797 3289
+f 3798 3289 3287
+f 3799 3798 3287
+f 3799 3287 3284
+f 3800 3799 3284
+f 3800 3284 3285
+f 3795 3800 3285
+f 3801 3291 3292
+f 3802 3801 3292
+f 3802 3292 3294
+f 3803 3802 3294
+f 3803 3294 3295
+f 3804 3803 3295
+f 3804 3295 3293
+f 3805 3804 3293
+f 3805 3293 3290
+f 3806 3805 3290
+f 3806 3290 3291
+f 3801 3806 3291
+f 3807 3297 3298
+f 3808 3807 3298
+f 3808 3298 3300
+f 3809 3808 3300
+f 3809 3300 3301
+f 3810 3809 3301
+f 3810 3301 3299
+f 3811 3810 3299
+f 3811 3299 3296
+f 3812 3811 3296
+f 3812 3296 3297
+f 3807 3812 3297
+f 3813 3303 3304
+f 3814 3813 3304
+f 3814 3304 3306
+f 3815 3814 3306
+f 3815 3306 3307
+f 3816 3815 3307
+f 3816 3307 3305
+f 3817 3816 3305
+f 3817 3305 3302
+f 3818 3817 3302
+f 3818 3302 3303
+f 3813 3818 3303
+f 3819 3309 3310
+f 3820 3819 3310
+f 3820 3310 3312
+f 3821 3820 3312
+f 3821 3312 3313
+f 3822 3821 3313
+f 3822 3313 3311
+f 3823 3822 3311
+f 3823 3311 3308
+f 3824 3823 3308
+f 3824 3308 3309
+f 3819 3824 3309
+f 3315 3314 3825
+f 3826 3315 3825
+f 3316 3315 3826
+f 3827 3316 3826
+f 3317 3316 3827
+f 3828 3317 3827
+f 3318 3317 3828
+f 3829 3318 3828
+f 3319 3318 3829
+f 3830 3319 3829
+f 3320 3319 3830
+f 3831 3320 3830
+f 3321 3320 3831
+f 3832 3321 3831
+f 3322 3321 3832
+f 3833 3322 3832
+f 3323 3322 3833
+f 3834 3323 3833
+f 3324 3323 3834
+f 3835 3324 3834
+f 3325 3324 3835
+f 3836 3325 3835
+f 3326 3325 3836
+f 3837 3326 3836
+f 3327 3326 3837
+f 3838 3327 3837
+f 3328 3327 3838
+f 3839 3328 3838
+f 3329 3328 3839
+f 3840 3329 3839
+f 3330 3329 3840
+f 3841 3330 3840
+f 3331 3330 3841
+f 3842 3331 3841
+f 3332 3331 3842
+f 3843 3332 3842
+f 3333 3332 3843
+f 3844 3333 3843
+f 3334 3333 3844
+f 3845 3334 3844
+f 3335 3334 3845
+f 3846 3335 3845
+f 3336 3335 3846
+f 3847 3336 3846
+f 3337 3336 3847
+f 3848 3337 3847
+f 3338 3337 3848
+f 3849 3338 3848
+f 3339 3338 3849
+f 3850 3339 3849
+f 3340 3339 3850
+f 3851 3340 3850
+f 3341 3340 3851
+f 3852 3341 3851
+f 3342 3341 3852
+f 3853 3342 3852
+f 3343 3853 3854
+f 3343 3342 3853
+f 3855 3344 3343
+f 3855 3343 3854
+f 3825 3314 3344
+f 3825 3344 3855
+f 3856 3350 3345
+f 3345 3346 3856
+f 3856 3857 3350
+f 3346 3858 3856
+f 3857 3349 3350
+f 3346 3347 3858
+f 3348 3859 3347
+f 3347 3859 3858
+f 3857 3859 3349
+f 3349 3859 3348
+f 3860 3356 3351
+f 3351 3352 3860
+f 3860 3861 3356
+f 3352 3862 3860
+f 3861 3355 3356
+f 3352 3353 3862
+f 3354 3863 3353
+f 3353 3863 3862
+f 3861 3863 3355
+f 3355 3863 3354
+f 3864 3362 3357
+f 3357 3358 3864
+f 3864 3865 3362
+f 3358 3866 3864
+f 3865 3361 3362
+f 3358 3359 3866
+f 3360 3867 3359
+f 3359 3867 3866
+f 3865 3867 3361
+f 3361 3867 3360
+f 3868 3368 3363
+f 3363 3364 3868
+f 3868 3869 3368
+f 3364 3870 3868
+f 3869 3367 3368
+f 3364 3365 3870
+f 3366 3871 3365
+f 3365 3871 3870
+f 3869 3871 3367
+f 3367 3871 3366
+f 3872 3374 3369
+f 3369 3370 3872
+f 3872 3873 3374
+f 3370 3874 3872
+f 3873 3373 3374
+f 3370 3371 3874
+f 3372 3875 3371
+f 3371 3875 3874
+f 3873 3875 3373
+f 3373 3875 3372
+f 3876 3380 3375
+f 3375 3376 3876
+f 3876 3877 3380
+f 3376 3878 3876
+f 3877 3379 3380
+f 3376 3377 3878
+f 3378 3879 3377
+f 3377 3879 3878
+f 3877 3879 3379
+f 3379 3879 3378
+f 3880 3386 3381
+f 3381 3382 3880
+f 3880 3881 3386
+f 3382 3882 3880
+f 3881 3385 3386
+f 3382 3383 3882
+f 3384 3883 3383
+f 3383 3883 3882
+f 3881 3883 3385
+f 3385 3883 3384
+f 3884 3392 3387
+f 3387 3388 3884
+f 3884 3885 3392
+f 3388 3886 3884
+f 3885 3391 3392
+f 3388 3389 3886
+f 3390 3887 3389
+f 3389 3887 3886
+f 3885 3887 3391
+f 3391 3887 3390
+f 3888 3398 3393
+f 3393 3394 3888
+f 3888 3889 3398
+f 3394 3890 3888
+f 3889 3397 3398
+f 3394 3395 3890
+f 3396 3891 3395
+f 3395 3891 3890
+f 3889 3891 3397
+f 3397 3891 3396
+f 3892 3404 3399
+f 3399 3400 3892
+f 3892 3893 3404
+f 3400 3894 3892
+f 3893 3403 3404
+f 3400 3401 3894
+f 3402 3895 3401
+f 3401 3895 3894
+f 3893 3895 3403
+f 3403 3895 3402
+f 3896 3410 3405
+f 3405 3406 3896
+f 3896 3897 3410
+f 3406 3898 3896
+f 3897 3409 3410
+f 3406 3407 3898
+f 3408 3899 3407
+f 3407 3899 3898
+f 3897 3899 3409
+f 3409 3899 3408
+f 3900 3416 3411
+f 3411 3412 3900
+f 3900 3901 3416
+f 3412 3902 3900
+f 3901 3415 3416
+f 3412 3413 3902
+f 3414 3903 3413
+f 3413 3903 3902
+f 3901 3903 3415
+f 3415 3903 3414
+f 3904 3422 3417
+f 3417 3418 3904
+f 3904 3905 3422
+f 3418 3906 3904
+f 3905 3421 3422
+f 3418 3419 3906
+f 3420 3907 3419
+f 3419 3907 3906
+f 3905 3907 3421
+f 3421 3907 3420
+f 3908 3428 3423
+f 3423 3424 3908
+f 3908 3909 3428
+f 3424 3910 3908
+f 3909 3427 3428
+f 3424 3425 3910
+f 3426 3911 3425
+f 3425 3911 3910
+f 3909 3911 3427
+f 3427 3911 3426
+f 3912 3434 3429
+f 3429 3430 3912
+f 3912 3913 3434
+f 3430 3914 3912
+f 3913 3433 3434
+f 3430 3431 3914
+f 3432 3915 3431
+f 3431 3915 3914
+f 3913 3915 3433
+f 3433 3915 3432
+f 3916 3440 3435
+f 3435 3436 3916
+f 3916 3917 3440
+f 3436 3918 3916
+f 3917 3439 3440
+f 3436 3437 3918
+f 3438 3919 3437
+f 3437 3919 3918
+f 3917 3919 3439
+f 3439 3919 3438
+f 3920 3446 3441
+f 3441 3442 3920
+f 3920 3921 3446
+f 3442 3922 3920
+f 3921 3445 3446
+f 3442 3443 3922
+f 3444 3923 3443
+f 3443 3923 3922
+f 3921 3923 3445
+f 3445 3923 3444
+f 3924 3452 3447
+f 3447 3448 3924
+f 3924 3925 3452
+f 3448 3926 3924
+f 3925 3451 3452
+f 3448 3449 3926
+f 3450 3927 3449
+f 3449 3927 3926
+f 3925 3927 3451
+f 3451 3927 3450
+f 3928 3458 3453
+f 3453 3454 3928
+f 3928 3929 3458
+f 3454 3930 3928
+f 3929 3457 3458
+f 3454 3455 3930
+f 3456 3931 3455
+f 3455 3931 3930
+f 3929 3931 3457
+f 3457 3931 3456
+f 3932 3464 3459
+f 3459 3460 3932
+f 3932 3933 3464
+f 3460 3934 3932
+f 3933 3463 3464
+f 3460 3461 3934
+f 3462 3935 3461
+f 3461 3935 3934
+f 3933 3935 3463
+f 3463 3935 3462
+f 3936 3470 3465
+f 3465 3466 3936
+f 3936 3937 3470
+f 3466 3938 3936
+f 3937 3469 3470
+f 3466 3467 3938
+f 3468 3939 3467
+f 3467 3939 3938
+f 3937 3939 3469
+f 3469 3939 3468
+f 3940 3476 3471
+f 3471 3472 3940
+f 3940 3941 3476
+f 3472 3942 3940
+f 3941 3475 3476
+f 3472 3473 3942
+f 3474 3943 3473
+f 3473 3943 3942
+f 3941 3943 3475
+f 3475 3943 3474
+f 3944 3482 3477
+f 3477 3478 3944
+f 3944 3945 3482
+f 3478 3946 3944
+f 3945 3481 3482
+f 3478 3479 3946
+f 3480 3947 3479
+f 3479 3947 3946
+f 3945 3947 3481
+f 3481 3947 3480
+f 3948 3488 3483
+f 3483 3484 3948
+f 3948 3949 3488
+f 3484 3950 3948
+f 3949 3487 3488
+f 3484 3485 3950
+f 3486 3951 3485
+f 3485 3951 3950
+f 3949 3951 3487
+f 3487 3951 3486
+f 3952 3494 3489
+f 3489 3490 3952
+f 3952 3953 3494
+f 3490 3954 3952
+f 3953 3493 3494
+f 3490 3491 3954
+f 3492 3955 3491
+f 3491 3955 3954
+f 3953 3955 3493
+f 3493 3955 3492
+f 3956 3500 3495
+f 3495 3496 3956
+f 3956 3957 3500
+f 3496 3958 3956
+f 3957 3499 3500
+f 3496 3497 3958
+f 3498 3959 3497
+f 3497 3959 3958
+f 3957 3959 3499
+f 3499 3959 3498
+f 3960 3506 3501
+f 3501 3502 3960
+f 3960 3961 3506
+f 3502 3962 3960
+f 3961 3505 3506
+f 3502 3503 3962
+f 3504 3963 3503
+f 3503 3963 3962
+f 3961 3963 3505
+f 3505 3963 3504
+f 3964 3512 3507
+f 3507 3508 3964
+f 3964 3965 3512
+f 3508 3966 3964
+f 3965 3511 3512
+f 3508 3509 3966
+f 3510 3967 3509
+f 3509 3967 3966
+f 3965 3967 3511
+f 3511 3967 3510
+f 3968 3518 3513
+f 3513 3514 3968
+f 3968 3969 3518
+f 3514 3970 3968
+f 3969 3517 3518
+f 3514 3515 3970
+f 3516 3971 3515
+f 3515 3971 3970
+f 3969 3971 3517
+f 3517 3971 3516
+f 3972 3524 3519
+f 3519 3520 3972
+f 3972 3973 3524
+f 3520 3974 3972
+f 3973 3523 3524
+f 3520 3521 3974
+f 3522 3975 3521
+f 3521 3975 3974
+f 3973 3975 3523
+f 3523 3975 3522
+f 3976 3530 3525
+f 3525 3526 3976
+f 3976 3977 3530
+f 3526 3978 3976
+f 3977 3529 3530
+f 3526 3527 3978
+f 3528 3979 3527
+f 3527 3979 3978
+f 3977 3979 3529
+f 3529 3979 3528
+f 3980 3536 3531
+f 3531 3532 3980
+f 3980 3981 3536
+f 3532 3982 3980
+f 3981 3535 3536
+f 3532 3533 3982
+f 3534 3983 3533
+f 3533 3983 3982
+f 3981 3983 3535
+f 3535 3983 3534
+f 3984 3542 3537
+f 3537 3538 3984
+f 3984 3985 3542
+f 3538 3986 3984
+f 3985 3541 3542
+f 3538 3539 3986
+f 3540 3987 3539
+f 3539 3987 3986
+f 3985 3987 3541
+f 3541 3987 3540
+f 3988 3548 3543
+f 3543 3544 3988
+f 3988 3989 3548
+f 3544 3990 3988
+f 3989 3547 3548
+f 3544 3545 3990
+f 3546 3991 3545
+f 3545 3991 3990
+f 3989 3991 3547
+f 3547 3991 3546
+f 3992 3554 3549
+f 3549 3550 3992
+f 3992 3993 3554
+f 3550 3994 3992
+f 3993 3553 3554
+f 3550 3551 3994
+f 3552 3995 3551
+f 3551 3995 3994
+f 3993 3995 3553
+f 3553 3995 3552
+f 3996 3560 3555
+f 3555 3556 3996
+f 3996 3997 3560
+f 3556 3998 3996
+f 3997 3559 3560
+f 3556 3557 3998
+f 3558 3999 3557
+f 3557 3999 3998
+f 3997 3999 3559
+f 3559 3999 3558
+f 4000 3566 3561
+f 3561 3562 4000
+f 4000 4001 3566
+f 3562 4002 4000
+f 4001 3565 3566
+f 3562 3563 4002
+f 3564 4003 3563
+f 3563 4003 4002
+f 4001 4003 3565
+f 3565 4003 3564
+f 4004 3572 3567
+f 3567 3568 4004
+f 4004 4005 3572
+f 3568 4006 4004
+f 4005 3571 3572
+f 3568 3569 4006
+f 3570 4007 3569
+f 3569 4007 4006
+f 4005 4007 3571
+f 3571 4007 3570
+f 4008 3578 3573
+f 3573 3574 4008
+f 4008 4009 3578
+f 3574 4010 4008
+f 4009 3577 3578
+f 3574 3575 4010
+f 3576 4011 3575
+f 3575 4011 4010
+f 4009 4011 3577
+f 3577 4011 3576
+f 4012 3584 3579
+f 3579 3580 4012
+f 4012 4013 3584
+f 3580 4014 4012
+f 4013 3583 3584
+f 3580 3581 4014
+f 3582 4015 3581
+f 3581 4015 4014
+f 4013 4015 3583
+f 3583 4015 3582
+f 4016 3590 3585
+f 3585 3586 4016
+f 4016 4017 3590
+f 3586 4018 4016
+f 4017 3589 3590
+f 3586 3587 4018
+f 3588 4019 3587
+f 3587 4019 4018
+f 4017 4019 3589
+f 3589 4019 3588
+f 4020 3596 3591
+f 3591 3592 4020
+f 4020 4021 3596
+f 3592 4022 4020
+f 4021 3595 3596
+f 3592 3593 4022
+f 3594 4023 3593
+f 3593 4023 4022
+f 4021 4023 3595
+f 3595 4023 3594
+f 4024 3602 3597
+f 3597 3598 4024
+f 4024 4025 3602
+f 3598 4026 4024
+f 4025 3601 3602
+f 3598 3599 4026
+f 3600 4027 3599
+f 3599 4027 4026
+f 4025 4027 3601
+f 3601 4027 3600
+f 4028 3608 3603
+f 3603 3604 4028
+f 4028 4029 3608
+f 3604 4030 4028
+f 4029 3607 3608
+f 3604 3605 4030
+f 3606 4031 3605
+f 3605 4031 4030
+f 4029 4031 3607
+f 3607 4031 3606
+f 4032 3614 3609
+f 3609 3610 4032
+f 4032 4033 3614
+f 3610 4034 4032
+f 4033 3613 3614
+f 3610 3611 4034
+f 3612 4035 3611
+f 3611 4035 4034
+f 4033 4035 3613
+f 3613 4035 3612
+f 4036 3620 3615
+f 3615 3616 4036
+f 4036 4037 3620
+f 3616 4038 4036
+f 4037 3619 3620
+f 3616 3617 4038
+f 3618 4039 3617
+f 3617 4039 4038
+f 4037 4039 3619
+f 3619 4039 3618
+f 4040 3626 3621
+f 3621 3622 4040
+f 4040 4041 3626
+f 3622 4042 4040
+f 4041 3625 3626
+f 3622 3623 4042
+f 3624 4043 3623
+f 3623 4043 4042
+f 4041 4043 3625
+f 3625 4043 3624
+f 4044 3632 3627
+f 3627 3628 4044
+f 4044 4045 3632
+f 3628 4046 4044
+f 4045 3631 3632
+f 3628 3629 4046
+f 3630 4047 3629
+f 3629 4047 4046
+f 4045 4047 3631
+f 3631 4047 3630
+f 4048 3638 3633
+f 3633 3634 4048
+f 4048 4049 3638
+f 3634 4050 4048
+f 4049 3637 3638
+f 3634 3635 4050
+f 3636 4051 3635
+f 3635 4051 4050
+f 4049 4051 3637
+f 3637 4051 3636
+f 4052 3644 3639
+f 3639 3640 4052
+f 4052 4053 3644
+f 3640 4054 4052
+f 4053 3643 3644
+f 3640 3641 4054
+f 3642 4055 3641
+f 3641 4055 4054
+f 4053 4055 3643
+f 3643 4055 3642
+f 4056 3650 3645
+f 3645 3646 4056
+f 4056 4057 3650
+f 3646 4058 4056
+f 4057 3649 3650
+f 3646 3647 4058
+f 3648 4059 3647
+f 3647 4059 4058
+f 4057 4059 3649
+f 3649 4059 3648
+f 4060 3656 3651
+f 3651 3652 4060
+f 4060 4061 3656
+f 3652 4062 4060
+f 4061 3655 3656
+f 3652 3653 4062
+f 3654 4063 3653
+f 3653 4063 4062
+f 4061 4063 3655
+f 3655 4063 3654
+f 4064 3662 3657
+f 3657 3658 4064
+f 4064 4065 3662
+f 3658 4066 4064
+f 4065 3661 3662
+f 3658 3659 4066
+f 3660 4067 3659
+f 3659 4067 4066
+f 4065 4067 3661
+f 3661 4067 3660
+f 4068 3668 3663
+f 3663 3664 4068
+f 4068 4069 3668
+f 3664 4070 4068
+f 4069 3667 3668
+f 3664 3665 4070
+f 3666 4071 3665
+f 3665 4071 4070
+f 4069 4071 3667
+f 3667 4071 3666
+f 4072 3674 3669
+f 3669 3670 4072
+f 4072 4073 3674
+f 3670 4074 4072
+f 4073 3673 3674
+f 3670 3671 4074
+f 3672 4075 3671
+f 3671 4075 4074
+f 4073 4075 3673
+f 3673 4075 3672
+f 4076 3680 3675
+f 3675 3676 4076
+f 4076 4077 3680
+f 3676 4078 4076
+f 4077 3679 3680
+f 3676 3677 4078
+f 3678 4079 3677
+f 3677 4079 4078
+f 4077 4079 3679
+f 3679 4079 3678
+f 4080 3686 3681
+f 3681 3682 4080
+f 4080 4081 3686
+f 3682 4082 4080
+f 4081 3685 3686
+f 3682 3683 4082
+f 3684 4083 3683
+f 3683 4083 4082
+f 4081 4083 3685
+f 3685 4083 3684
+f 4084 3692 3687
+f 3687 3688 4084
+f 4084 4085 3692
+f 3688 4086 4084
+f 4085 3691 3692
+f 3688 3689 4086
+f 3690 4087 3689
+f 3689 4087 4086
+f 4085 4087 3691
+f 3691 4087 3690
+f 4088 3698 3693
+f 3693 3694 4088
+f 4088 4089 3698
+f 3694 4090 4088
+f 4089 3697 3698
+f 3694 3695 4090
+f 3696 4091 3695
+f 3695 4091 4090
+f 4089 4091 3697
+f 3697 4091 3696
+f 4092 3704 3699
+f 3699 3700 4092
+f 4092 4093 3704
+f 3700 4094 4092
+f 4093 3703 3704
+f 3700 3701 4094
+f 3702 4095 3701
+f 3701 4095 4094
+f 4093 4095 3703
+f 3703 4095 3702
+f 4096 3710 3705
+f 3705 3706 4096
+f 4096 4097 3710
+f 3706 4098 4096
+f 4097 3709 3710
+f 3706 3707 4098
+f 3708 4099 3707
+f 3707 4099 4098
+f 4097 4099 3709
+f 3709 4099 3708
+f 4100 3716 3711
+f 3711 3712 4100
+f 4100 4101 3716
+f 3712 4102 4100
+f 4101 3715 3716
+f 3712 3713 4102
+f 3714 4103 3713
+f 3713 4103 4102
+f 4101 4103 3715
+f 3715 4103 3714
+f 4104 3722 3717
+f 3717 3718 4104
+f 4104 4105 3722
+f 3718 4106 4104
+f 4105 3721 3722
+f 3718 3719 4106
+f 3720 4107 3719
+f 3719 4107 4106
+f 4105 4107 3721
+f 3721 4107 3720
+f 4108 3728 3723
+f 3723 3724 4108
+f 4108 4109 3728
+f 3724 4110 4108
+f 4109 3727 3728
+f 3724 3725 4110
+f 3726 4111 3725
+f 3725 4111 4110
+f 4109 4111 3727
+f 3727 4111 3726
+f 4112 3734 3729
+f 3729 3730 4112
+f 4112 4113 3734
+f 3730 4114 4112
+f 4113 3733 3734
+f 3730 3731 4114
+f 3732 4115 3731
+f 3731 4115 4114
+f 4113 4115 3733
+f 3733 4115 3732
+f 4116 3740 3735
+f 3735 3736 4116
+f 4116 4117 3740
+f 3736 4118 4116
+f 4117 3739 3740
+f 3736 3737 4118
+f 3738 4119 3737
+f 3737 4119 4118
+f 4117 4119 3739
+f 3739 4119 3738
+f 4120 3746 3741
+f 3741 3742 4120
+f 4120 4121 3746
+f 3742 4122 4120
+f 4121 3745 3746
+f 3742 3743 4122
+f 3744 4123 3743
+f 3743 4123 4122
+f 4121 4123 3745
+f 3745 4123 3744
+f 4124 3752 3747
+f 3747 3748 4124
+f 4124 4125 3752
+f 3748 4126 4124
+f 4125 3751 3752
+f 3748 3749 4126
+f 3750 4127 3749
+f 3749 4127 4126
+f 4125 4127 3751
+f 3751 4127 3750
+f 4128 3758 3753
+f 3753 3754 4128
+f 4128 4129 3758
+f 3754 4130 4128
+f 4129 3757 3758
+f 3754 3755 4130
+f 3756 4131 3755
+f 3755 4131 4130
+f 4129 4131 3757
+f 3757 4131 3756
+f 4132 3764 3759
+f 3759 3760 4132
+f 4132 4133 3764
+f 3760 4134 4132
+f 4133 3763 3764
+f 3760 3761 4134
+f 3762 4135 3761
+f 3761 4135 4134
+f 4133 4135 3763
+f 3763 4135 3762
+f 4136 3770 3765
+f 3765 3766 4136
+f 4136 4137 3770
+f 3766 4138 4136
+f 4137 3769 3770
+f 3766 3767 4138
+f 3768 4139 3767
+f 3767 4139 4138
+f 4137 4139 3769
+f 3769 4139 3768
+f 4140 3776 3771
+f 3771 3772 4140
+f 4140 4141 3776
+f 3772 4142 4140
+f 4141 3775 3776
+f 3772 3773 4142
+f 3774 4143 3773
+f 3773 4143 4142
+f 4141 4143 3775
+f 3775 4143 3774
+f 4144 3782 3777
+f 3777 3778 4144
+f 4144 4145 3782
+f 3778 4146 4144
+f 4145 3781 3782
+f 3778 3779 4146
+f 3780 4147 3779
+f 3779 4147 4146
+f 4145 4147 3781
+f 3781 4147 3780
+f 4148 3788 3783
+f 3783 3784 4148
+f 4148 4149 3788
+f 3784 4150 4148
+f 4149 3787 3788
+f 3784 3785 4150
+f 3786 4151 3785
+f 3785 4151 4150
+f 4149 4151 3787
+f 3787 4151 3786
+f 4152 3794 3789
+f 3789 3790 4152
+f 4152 4153 3794
+f 3790 4154 4152
+f 4153 3793 3794
+f 3790 3791 4154
+f 3792 4155 3791
+f 3791 4155 4154
+f 4153 4155 3793
+f 3793 4155 3792
+f 4156 3800 3795
+f 3795 3796 4156
+f 4156 4157 3800
+f 3796 4158 4156
+f 4157 3799 3800
+f 3796 3797 4158
+f 3798 4159 3797
+f 3797 4159 4158
+f 4157 4159 3799
+f 3799 4159 3798
+f 4160 3806 3801
+f 3801 3802 4160
+f 4160 4161 3806
+f 3802 4162 4160
+f 4161 3805 3806
+f 3802 3803 4162
+f 3804 4163 3803
+f 3803 4163 4162
+f 4161 4163 3805
+f 3805 4163 3804
+f 4164 3812 3807
+f 3807 3808 4164
+f 4164 4165 3812
+f 3808 4166 4164
+f 4165 3811 3812
+f 3808 3809 4166
+f 3810 4167 3809
+f 3809 4167 4166
+f 4165 4167 3811
+f 3811 4167 3810
+f 4168 3818 3813
+f 3813 3814 4168
+f 4168 4169 3818
+f 3814 4170 4168
+f 4169 3817 3818
+f 3814 3815 4170
+f 3816 4171 3815
+f 3815 4171 4170
+f 4169 4171 3817
+f 3817 4171 3816
+f 4172 3824 3819
+f 3819 3820 4172
+f 4172 4173 3824
+f 3820 4174 4172
+f 4173 3823 3824
+f 3820 3821 4174
+f 3822 4175 3821
+f 3821 4175 4174
+f 4173 4175 3823
+f 3823 4175 3822
+f 3826 3825 4176
+f 4177 3826 4176
+f 3827 3826 4177
+f 4178 3827 4177
+f 3828 3827 4178
+f 4179 3828 4178
+f 3829 3828 4179
+f 4180 3829 4179
+f 3830 3829 4180
+f 4181 3830 4180
+f 3831 3830 4181
+f 4182 3831 4181
+f 3832 3831 4182
+f 4183 3832 4182
+f 3833 3832 4183
+f 4184 3833 4183
+f 3834 3833 4184
+f 4185 3834 4184
+f 3835 3834 4185
+f 4186 3835 4185
+f 3836 3835 4186
+f 4187 3836 4186
+f 3837 3836 4187
+f 4188 3837 4187
+f 3838 3837 4188
+f 4189 3838 4188
+f 3839 3838 4189
+f 4190 3839 4189
+f 3840 3839 4190
+f 4191 3840 4190
+f 3841 3840 4191
+f 4192 3841 4191
+f 3842 3841 4192
+f 4193 3842 4192
+f 3843 3842 4193
+f 4194 3843 4193
+f 3844 3843 4194
+f 4195 3844 4194
+f 3845 3844 4195
+f 4196 3845 4195
+f 3846 3845 4196
+f 4197 3846 4196
+f 3847 3846 4197
+f 4198 3847 4197
+f 3848 3847 4198
+f 4199 3848 4198
+f 3849 3848 4199
+f 4200 3849 4199
+f 3850 3849 4200
+f 4201 3850 4200
+f 3851 3850 4201
+f 4202 3851 4201
+f 3852 3851 4202
+f 4203 3852 4202
+f 4204 3853 3852
+f 4204 3852 4203
+f 4205 3854 3853
+f 4205 3853 4204
+f 4206 3855 3854
+f 4206 3854 4205
+f 4176 3825 3855
+f 4176 3855 4206
+f 3857 3856 4207
+f 4207 3856 4208
+f 3859 3857 4209
+f 4209 3857 4207
+f 3856 3858 4208
+f 4208 3858 4210
+f 3858 3859 4210
+f 4210 3859 4209
+f 3861 3860 4211
+f 4211 3860 4212
+f 3863 3861 4213
+f 4213 3861 4211
+f 3860 3862 4212
+f 4212 3862 4214
+f 3862 3863 4214
+f 4214 3863 4213
+f 3865 3864 4215
+f 4215 3864 4216
+f 3867 3865 4217
+f 4217 3865 4215
+f 3864 3866 4216
+f 4216 3866 4218
+f 3866 3867 4218
+f 4218 3867 4217
+f 3869 3868 4219
+f 4219 3868 4220
+f 3871 3869 4221
+f 4221 3869 4219
+f 3868 3870 4220
+f 4220 3870 4222
+f 3870 3871 4222
+f 4222 3871 4221
+f 3873 3872 4223
+f 4223 3872 4224
+f 3875 3873 4225
+f 4225 3873 4223
+f 3872 3874 4224
+f 4224 3874 4226
+f 3874 3875 4226
+f 4226 3875 4225
+f 3877 3876 4227
+f 4227 3876 4228
+f 3879 3877 4229
+f 4229 3877 4227
+f 3876 3878 4228
+f 4228 3878 4230
+f 3878 3879 4230
+f 4230 3879 4229
+f 3881 3880 4231
+f 4231 3880 4232
+f 3883 3881 4233
+f 4233 3881 4231
+f 3880 3882 4232
+f 4232 3882 4234
+f 3882 3883 4234
+f 4234 3883 4233
+f 3885 3884 4235
+f 4235 3884 4236
+f 3887 3885 4237
+f 4237 3885 4235
+f 3884 3886 4236
+f 4236 3886 4238
+f 3886 3887 4238
+f 4238 3887 4237
+f 3889 3888 4239
+f 4239 3888 4240
+f 3891 3889 4241
+f 4241 3889 4239
+f 3888 3890 4240
+f 4240 3890 4242
+f 3890 3891 4242
+f 4242 3891 4241
+f 3893 3892 4243
+f 4243 3892 4244
+f 3895 3893 4245
+f 4245 3893 4243
+f 3892 3894 4244
+f 4244 3894 4246
+f 3894 3895 4246
+f 4246 3895 4245
+f 3897 3896 4247
+f 4247 3896 4248
+f 3899 3897 4249
+f 4249 3897 4247
+f 3896 3898 4248
+f 4248 3898 4250
+f 3898 3899 4250
+f 4250 3899 4249
+f 3901 3900 4251
+f 4251 3900 4252
+f 3903 3901 4253
+f 4253 3901 4251
+f 3900 3902 4252
+f 4252 3902 4254
+f 3902 3903 4254
+f 4254 3903 4253
+f 3905 3904 4255
+f 4255 3904 4256
+f 3907 3905 4257
+f 4257 3905 4255
+f 3904 3906 4256
+f 4256 3906 4258
+f 3906 3907 4258
+f 4258 3907 4257
+f 3909 3908 4259
+f 4259 3908 4260
+f 3911 3909 4261
+f 4261 3909 4259
+f 3908 3910 4260
+f 4260 3910 4262
+f 3910 3911 4262
+f 4262 3911 4261
+f 3913 3912 4263
+f 4263 3912 4264
+f 3915 3913 4265
+f 4265 3913 4263
+f 3912 3914 4264
+f 4264 3914 4266
+f 3914 3915 4266
+f 4266 3915 4265
+f 3917 3916 4267
+f 4267 3916 4268
+f 3919 3917 4269
+f 4269 3917 4267
+f 3916 3918 4268
+f 4268 3918 4270
+f 3918 3919 4270
+f 4270 3919 4269
+f 3921 3920 4271
+f 4271 3920 4272
+f 3923 3921 4273
+f 4273 3921 4271
+f 3920 3922 4272
+f 4272 3922 4274
+f 3922 3923 4274
+f 4274 3923 4273
+f 3925 3924 4275
+f 4275 3924 4276
+f 3927 3925 4277
+f 4277 3925 4275
+f 3924 3926 4276
+f 4276 3926 4278
+f 3926 3927 4278
+f 4278 3927 4277
+f 3929 3928 4279
+f 4279 3928 4280
+f 3931 3929 4281
+f 4281 3929 4279
+f 3928 3930 4280
+f 4280 3930 4282
+f 3930 3931 4282
+f 4282 3931 4281
+f 3933 3932 4283
+f 4283 3932 4284
+f 3935 3933 4285
+f 4285 3933 4283
+f 3932 3934 4284
+f 4284 3934 4286
+f 3934 3935 4286
+f 4286 3935 4285
+f 3937 3936 4287
+f 4287 3936 4288
+f 3939 3937 4289
+f 4289 3937 4287
+f 3936 3938 4288
+f 4288 3938 4290
+f 3938 3939 4290
+f 4290 3939 4289
+f 3941 3940 4291
+f 4291 3940 4292
+f 3943 3941 4293
+f 4293 3941 4291
+f 3940 3942 4292
+f 4292 3942 4294
+f 3942 3943 4294
+f 4294 3943 4293
+f 3945 3944 4295
+f 4295 3944 4296
+f 3947 3945 4297
+f 4297 3945 4295
+f 3944 3946 4296
+f 4296 3946 4298
+f 3946 3947 4298
+f 4298 3947 4297
+f 3949 3948 4299
+f 4299 3948 4300
+f 3951 3949 4301
+f 4301 3949 4299
+f 3948 3950 4300
+f 4300 3950 4302
+f 3950 3951 4302
+f 4302 3951 4301
+f 3953 3952 4303
+f 4303 3952 4304
+f 3955 3953 4305
+f 4305 3953 4303
+f 3952 3954 4304
+f 4304 3954 4306
+f 3954 3955 4306
+f 4306 3955 4305
+f 3957 3956 4307
+f 4307 3956 4308
+f 3959 3957 4309
+f 4309 3957 4307
+f 3956 3958 4308
+f 4308 3958 4310
+f 3958 3959 4310
+f 4310 3959 4309
+f 3961 3960 4311
+f 4311 3960 4312
+f 3963 3961 4313
+f 4313 3961 4311
+f 3960 3962 4312
+f 4312 3962 4314
+f 3962 3963 4314
+f 4314 3963 4313
+f 3965 3964 4315
+f 4315 3964 4316
+f 3967 3965 4317
+f 4317 3965 4315
+f 3964 3966 4316
+f 4316 3966 4318
+f 3966 3967 4318
+f 4318 3967 4317
+f 3969 3968 4319
+f 4319 3968 4320
+f 3971 3969 4321
+f 4321 3969 4319
+f 3968 3970 4320
+f 4320 3970 4322
+f 3970 3971 4322
+f 4322 3971 4321
+f 3973 3972 4323
+f 4323 3972 4324
+f 3975 3973 4325
+f 4325 3973 4323
+f 3972 3974 4324
+f 4324 3974 4326
+f 3974 3975 4326
+f 4326 3975 4325
+f 3977 3976 4327
+f 4327 3976 4328
+f 3979 3977 4329
+f 4329 3977 4327
+f 3976 3978 4328
+f 4328 3978 4330
+f 3978 3979 4330
+f 4330 3979 4329
+f 3981 3980 4331
+f 4331 3980 4332
+f 3983 3981 4333
+f 4333 3981 4331
+f 3980 3982 4332
+f 4332 3982 4334
+f 3982 3983 4334
+f 4334 3983 4333
+f 3985 3984 4335
+f 4335 3984 4336
+f 3987 3985 4337
+f 4337 3985 4335
+f 3984 3986 4336
+f 4336 3986 4338
+f 3986 3987 4338
+f 4338 3987 4337
+f 3989 3988 4339
+f 4339 3988 4340
+f 3991 3989 4341
+f 4341 3989 4339
+f 3988 3990 4340
+f 4340 3990 4342
+f 3990 3991 4342
+f 4342 3991 4341
+f 3993 3992 4343
+f 4343 3992 4344
+f 3995 3993 4345
+f 4345 3993 4343
+f 3992 3994 4344
+f 4344 3994 4346
+f 3994 3995 4346
+f 4346 3995 4345
+f 3997 3996 4347
+f 4347 3996 4348
+f 3999 3997 4349
+f 4349 3997 4347
+f 3996 3998 4348
+f 4348 3998 4350
+f 3998 3999 4350
+f 4350 3999 4349
+f 4001 4000 4351
+f 4351 4000 4352
+f 4003 4001 4353
+f 4353 4001 4351
+f 4000 4002 4352
+f 4352 4002 4354
+f 4002 4003 4354
+f 4354 4003 4353
+f 4005 4004 4355
+f 4355 4004 4356
+f 4007 4005 4357
+f 4357 4005 4355
+f 4004 4006 4356
+f 4356 4006 4358
+f 4006 4007 4358
+f 4358 4007 4357
+f 4009 4008 4359
+f 4359 4008 4360
+f 4011 4009 4361
+f 4361 4009 4359
+f 4008 4010 4360
+f 4360 4010 4362
+f 4010 4011 4362
+f 4362 4011 4361
+f 4013 4012 4363
+f 4363 4012 4364
+f 4015 4013 4365
+f 4365 4013 4363
+f 4012 4014 4364
+f 4364 4014 4366
+f 4014 4015 4366
+f 4366 4015 4365
+f 4017 4016 4367
+f 4367 4016 4368
+f 4019 4017 4369
+f 4369 4017 4367
+f 4016 4018 4368
+f 4368 4018 4370
+f 4018 4019 4370
+f 4370 4019 4369
+f 4021 4020 4371
+f 4371 4020 4372
+f 4023 4021 4373
+f 4373 4021 4371
+f 4020 4022 4372
+f 4372 4022 4374
+f 4022 4023 4374
+f 4374 4023 4373
+f 4025 4024 4375
+f 4375 4024 4376
+f 4027 4025 4377
+f 4377 4025 4375
+f 4024 4026 4376
+f 4376 4026 4378
+f 4026 4027 4378
+f 4378 4027 4377
+f 4029 4028 4379
+f 4379 4028 4380
+f 4031 4029 4381
+f 4381 4029 4379
+f 4028 4030 4380
+f 4380 4030 4382
+f 4030 4031 4382
+f 4382 4031 4381
+f 4033 4032 4383
+f 4383 4032 4384
+f 4035 4033 4385
+f 4385 4033 4383
+f 4032 4034 4384
+f 4384 4034 4386
+f 4034 4035 4386
+f 4386 4035 4385
+f 4037 4036 4387
+f 4387 4036 4388
+f 4039 4037 4389
+f 4389 4037 4387
+f 4036 4038 4388
+f 4388 4038 4390
+f 4038 4039 4390
+f 4390 4039 4389
+f 4041 4040 4391
+f 4391 4040 4392
+f 4043 4041 4393
+f 4393 4041 4391
+f 4040 4042 4392
+f 4392 4042 4394
+f 4042 4043 4394
+f 4394 4043 4393
+f 4045 4044 4395
+f 4395 4044 4396
+f 4047 4045 4397
+f 4397 4045 4395
+f 4044 4046 4396
+f 4396 4046 4398
+f 4046 4047 4398
+f 4398 4047 4397
+f 4049 4048 4399
+f 4399 4048 4400
+f 4051 4049 4401
+f 4401 4049 4399
+f 4048 4050 4400
+f 4400 4050 4402
+f 4050 4051 4402
+f 4402 4051 4401
+f 4053 4052 4403
+f 4403 4052 4404
+f 4055 4053 4405
+f 4405 4053 4403
+f 4052 4054 4404
+f 4404 4054 4406
+f 4054 4055 4406
+f 4406 4055 4405
+f 4057 4056 4407
+f 4407 4056 4408
+f 4059 4057 4409
+f 4409 4057 4407
+f 4056 4058 4408
+f 4408 4058 4410
+f 4058 4059 4410
+f 4410 4059 4409
+f 4061 4060 4411
+f 4411 4060 4412
+f 4063 4061 4413
+f 4413 4061 4411
+f 4060 4062 4412
+f 4412 4062 4414
+f 4062 4063 4414
+f 4414 4063 4413
+f 4065 4064 4415
+f 4415 4064 4416
+f 4067 4065 4417
+f 4417 4065 4415
+f 4064 4066 4416
+f 4416 4066 4418
+f 4066 4067 4418
+f 4418 4067 4417
+f 4069 4068 4419
+f 4419 4068 4420
+f 4071 4069 4421
+f 4421 4069 4419
+f 4068 4070 4420
+f 4420 4070 4422
+f 4070 4071 4422
+f 4422 4071 4421
+f 4073 4072 4423
+f 4423 4072 4424
+f 4075 4073 4425
+f 4425 4073 4423
+f 4072 4074 4424
+f 4424 4074 4426
+f 4074 4075 4426
+f 4426 4075 4425
+f 4077 4076 4427
+f 4427 4076 4428
+f 4079 4077 4429
+f 4429 4077 4427
+f 4076 4078 4428
+f 4428 4078 4430
+f 4078 4079 4430
+f 4430 4079 4429
+f 4081 4080 4431
+f 4431 4080 4432
+f 4083 4081 4433
+f 4433 4081 4431
+f 4080 4082 4432
+f 4432 4082 4434
+f 4082 4083 4434
+f 4434 4083 4433
+f 4085 4084 4435
+f 4435 4084 4436
+f 4087 4085 4437
+f 4437 4085 4435
+f 4084 4086 4436
+f 4436 4086 4438
+f 4086 4087 4438
+f 4438 4087 4437
+f 4089 4088 4439
+f 4439 4088 4440
+f 4091 4089 4441
+f 4441 4089 4439
+f 4088 4090 4440
+f 4440 4090 4442
+f 4090 4091 4442
+f 4442 4091 4441
+f 4093 4092 4443
+f 4443 4092 4444
+f 4095 4093 4445
+f 4445 4093 4443
+f 4092 4094 4444
+f 4444 4094 4446
+f 4094 4095 4446
+f 4446 4095 4445
+f 4097 4096 4447
+f 4447 4096 4448
+f 4099 4097 4449
+f 4449 4097 4447
+f 4096 4098 4448
+f 4448 4098 4450
+f 4098 4099 4450
+f 4450 4099 4449
+f 4101 4100 4451
+f 4451 4100 4452
+f 4103 4101 4453
+f 4453 4101 4451
+f 4100 4102 4452
+f 4452 4102 4454
+f 4102 4103 4454
+f 4454 4103 4453
+f 4105 4104 4455
+f 4455 4104 4456
+f 4107 4105 4457
+f 4457 4105 4455
+f 4104 4106 4456
+f 4456 4106 4458
+f 4106 4107 4458
+f 4458 4107 4457
+f 4109 4108 4459
+f 4459 4108 4460
+f 4111 4109 4461
+f 4461 4109 4459
+f 4108 4110 4460
+f 4460 4110 4462
+f 4110 4111 4462
+f 4462 4111 4461
+f 4113 4112 4463
+f 4463 4112 4464
+f 4115 4113 4465
+f 4465 4113 4463
+f 4112 4114 4464
+f 4464 4114 4466
+f 4114 4115 4466
+f 4466 4115 4465
+f 4117 4116 4467
+f 4467 4116 4468
+f 4119 4117 4469
+f 4469 4117 4467
+f 4116 4118 4468
+f 4468 4118 4470
+f 4118 4119 4470
+f 4470 4119 4469
+f 4121 4120 4471
+f 4471 4120 4472
+f 4123 4121 4473
+f 4473 4121 4471
+f 4120 4122 4472
+f 4472 4122 4474
+f 4122 4123 4474
+f 4474 4123 4473
+f 4125 4124 4475
+f 4475 4124 4476
+f 4127 4125 4477
+f 4477 4125 4475
+f 4124 4126 4476
+f 4476 4126 4478
+f 4126 4127 4478
+f 4478 4127 4477
+f 4129 4128 4479
+f 4479 4128 4480
+f 4131 4129 4481
+f 4481 4129 4479
+f 4128 4130 4480
+f 4480 4130 4482
+f 4130 4131 4482
+f 4482 4131 4481
+f 4133 4132 4483
+f 4483 4132 4484
+f 4135 4133 4485
+f 4485 4133 4483
+f 4132 4134 4484
+f 4484 4134 4486
+f 4134 4135 4486
+f 4486 4135 4485
+f 4137 4136 4487
+f 4487 4136 4488
+f 4139 4137 4489
+f 4489 4137 4487
+f 4136 4138 4488
+f 4488 4138 4490
+f 4138 4139 4490
+f 4490 4139 4489
+f 4141 4140 4491
+f 4491 4140 4492
+f 4143 4141 4493
+f 4493 4141 4491
+f 4140 4142 4492
+f 4492 4142 4494
+f 4142 4143 4494
+f 4494 4143 4493
+f 4145 4144 4495
+f 4495 4144 4496
+f 4147 4145 4497
+f 4497 4145 4495
+f 4144 4146 4496
+f 4496 4146 4498
+f 4146 4147 4498
+f 4498 4147 4497
+f 4149 4148 4499
+f 4499 4148 4500
+f 4151 4149 4501
+f 4501 4149 4499
+f 4148 4150 4500
+f 4500 4150 4502
+f 4150 4151 4502
+f 4502 4151 4501
+f 4153 4152 4503
+f 4503 4152 4504
+f 4155 4153 4505
+f 4505 4153 4503
+f 4152 4154 4504
+f 4504 4154 4506
+f 4154 4155 4506
+f 4506 4155 4505
+f 4157 4156 4507
+f 4507 4156 4508
+f 4159 4157 4509
+f 4509 4157 4507
+f 4156 4158 4508
+f 4508 4158 4510
+f 4158 4159 4510
+f 4510 4159 4509
+f 4161 4160 4511
+f 4511 4160 4512
+f 4163 4161 4513
+f 4513 4161 4511
+f 4160 4162 4512
+f 4512 4162 4514
+f 4162 4163 4514
+f 4514 4163 4513
+f 4165 4164 4515
+f 4515 4164 4516
+f 4167 4165 4517
+f 4517 4165 4515
+f 4164 4166 4516
+f 4516 4166 4518
+f 4166 4167 4518
+f 4518 4167 4517
+f 4169 4168 4519
+f 4519 4168 4520
+f 4171 4169 4521
+f 4521 4169 4519
+f 4168 4170 4520
+f 4520 4170 4522
+f 4170 4171 4522
+f 4522 4171 4521
+f 4173 4172 4523
+f 4523 4172 4524
+f 4175 4173 4525
+f 4525 4173 4523
+f 4172 4174 4524
+f 4524 4174 4526
+f 4174 4175 4526
+f 4526 4175 4525
+f 4177 4176 4527
+f 4528 4177 4527
+f 4178 4177 4528
+f 4529 4178 4528
+f 4179 4178 4529
+f 4530 4179 4529
+f 4180 4179 4530
+f 4531 4180 4530
+f 4181 4180 4531
+f 4532 4181 4531
+f 4182 4181 4532
+f 4533 4182 4532
+f 4183 4182 4533
+f 4534 4183 4533
+f 4184 4183 4534
+f 4535 4184 4534
+f 4185 4184 4535
+f 4536 4185 4535
+f 4186 4185 4536
+f 4537 4186 4536
+f 4187 4186 4537
+f 4538 4187 4537
+f 4188 4187 4538
+f 4539 4188 4538
+f 4189 4188 4539
+f 4540 4189 4539
+f 4190 4189 4540
+f 4541 4190 4540
+f 4191 4190 4541
+f 4542 4191 4541
+f 4192 4191 4542
+f 4543 4192 4542
+f 4193 4192 4543
+f 4544 4193 4543
+f 4194 4193 4544
+f 4545 4194 4544
+f 4195 4194 4545
+f 4546 4195 4545
+f 4196 4195 4546
+f 4547 4196 4546
+f 4197 4196 4547
+f 4548 4197 4547
+f 4198 4197 4548
+f 4549 4198 4548
+f 4199 4198 4549
+f 4550 4199 4549
+f 4200 4199 4550
+f 4551 4200 4550
+f 4201 4200 4551
+f 4552 4201 4551
+f 4202 4201 4552
+f 4553 4202 4552
+f 4203 4202 4553
+f 4554 4203 4553
+f 4204 4203 4554
+f 4555 4204 4554
+f 4205 4204 4555
+f 4556 4205 4555
+f 4206 4205 4556
+f 4557 4206 4556
+f 4176 4206 4557
+f 4527 4176 4557
+f 4558 4208 4559
+f 4560 4559 4208
+f 4207 4208 4558
+f 4210 4560 4208
+f 4561 4207 4558
+f 4562 4560 4210
+f 4209 4561 4563
+f 4209 4563 4562
+f 4209 4207 4561
+f 4209 4562 4210
+f 4564 4212 4565
+f 4566 4565 4212
+f 4211 4212 4564
+f 4214 4566 4212
+f 4567 4211 4564
+f 4568 4566 4214
+f 4213 4567 4569
+f 4213 4569 4568
+f 4213 4211 4567
+f 4213 4568 4214
+f 4570 4216 4571
+f 4572 4571 4216
+f 4218 4572 4216
+f 4215 4216 4570
+f 4573 4215 4570
+f 4574 4572 4218
+f 4217 4573 4575
+f 4217 4575 4574
+f 4217 4215 4573
+f 4217 4574 4218
+f 4576 4220 4577
+f 4578 4577 4220
+f 4222 4578 4220
+f 4219 4220 4576
+f 4579 4219 4576
+f 4580 4578 4222
+f 4221 4579 4581
+f 4221 4581 4580
+f 4221 4219 4579
+f 4221 4580 4222
+f 4582 4224 4583
+f 4584 4583 4224
+f 4223 4224 4582
+f 4226 4584 4224
+f 4585 4223 4582
+f 4586 4584 4226
+f 4225 4585 4587
+f 4225 4587 4586
+f 4225 4223 4585
+f 4225 4586 4226
+f 4588 4228 4589
+f 4590 4589 4228
+f 4230 4590 4228
+f 4227 4228 4588
+f 4591 4227 4588
+f 4592 4590 4230
+f 4229 4591 4593
+f 4229 4593 4592
+f 4229 4227 4591
+f 4229 4592 4230
+f 4594 4232 4595
+f 4596 4595 4232
+f 4231 4232 4594
+f 4234 4596 4232
+f 4597 4231 4594
+f 4598 4596 4234
+f 4233 4597 4599
+f 4233 4599 4598
+f 4233 4231 4597
+f 4233 4598 4234
+f 4600 4236 4601
+f 4602 4601 4236
+f 4238 4602 4236
+f 4235 4236 4600
+f 4603 4235 4600
+f 4604 4602 4238
+f 4237 4603 4605
+f 4237 4605 4604
+f 4237 4235 4603
+f 4237 4604 4238
+f 4606 4240 4607
+f 4608 4607 4240
+f 4239 4240 4606
+f 4242 4608 4240
+f 4609 4239 4606
+f 4610 4608 4242
+f 4241 4609 4611
+f 4241 4611 4610
+f 4241 4239 4609
+f 4241 4610 4242
+f 4612 4244 4613
+f 4614 4613 4244
+f 4243 4244 4612
+f 4246 4614 4244
+f 4615 4243 4612
+f 4616 4614 4246
+f 4245 4615 4617
+f 4245 4617 4616
+f 4245 4243 4615
+f 4245 4616 4246
+f 4618 4248 4619
+f 4620 4619 4248
+f 4247 4248 4618
+f 4250 4620 4248
+f 4621 4247 4618
+f 4622 4620 4250
+f 4249 4621 4623
+f 4249 4623 4622
+f 4249 4247 4621
+f 4249 4622 4250
+f 4624 4252 4625
+f 4626 4625 4252
+f 4251 4252 4624
+f 4254 4626 4252
+f 4627 4251 4624
+f 4628 4626 4254
+f 4253 4627 4629
+f 4253 4629 4628
+f 4253 4251 4627
+f 4253 4628 4254
+f 4630 4256 4631
+f 4632 4631 4256
+f 4255 4256 4630
+f 4258 4632 4256
+f 4633 4255 4630
+f 4634 4632 4258
+f 4257 4633 4635
+f 4257 4635 4634
+f 4257 4255 4633
+f 4257 4634 4258
+f 4636 4260 4637
+f 4638 4637 4260
+f 4259 4260 4636
+f 4262 4638 4260
+f 4639 4259 4636
+f 4640 4638 4262
+f 4261 4639 4641
+f 4261 4641 4640
+f 4261 4259 4639
+f 4261 4640 4262
+f 4642 4264 4643
+f 4644 4643 4264
+f 4266 4644 4264
+f 4263 4264 4642
+f 4645 4263 4642
+f 4646 4644 4266
+f 4265 4645 4647
+f 4265 4647 4646
+f 4265 4263 4645
+f 4265 4646 4266
+f 4648 4268 4649
+f 4650 4649 4268
+f 4267 4268 4648
+f 4270 4650 4268
+f 4651 4267 4648
+f 4652 4650 4270
+f 4269 4651 4653
+f 4269 4653 4652
+f 4269 4267 4651
+f 4269 4652 4270
+f 4654 4272 4655
+f 4656 4655 4272
+f 4274 4656 4272
+f 4271 4272 4654
+f 4657 4271 4654
+f 4658 4656 4274
+f 4273 4657 4659
+f 4273 4659 4658
+f 4273 4271 4657
+f 4273 4658 4274
+f 4660 4276 4661
+f 4662 4661 4276
+f 4278 4662 4276
+f 4275 4276 4660
+f 4663 4275 4660
+f 4664 4662 4278
+f 4277 4663 4665
+f 4277 4665 4664
+f 4277 4275 4663
+f 4277 4664 4278
+f 4666 4280 4667
+f 4668 4667 4280
+f 4282 4668 4280
+f 4279 4280 4666
+f 4669 4279 4666
+f 4670 4668 4282
+f 4281 4669 4671
+f 4281 4671 4670
+f 4281 4279 4669
+f 4281 4670 4282
+f 4672 4284 4673
+f 4674 4673 4284
+f 4283 4284 4672
+f 4286 4674 4284
+f 4675 4283 4672
+f 4676 4674 4286
+f 4285 4675 4677
+f 4285 4677 4676
+f 4285 4283 4675
+f 4285 4676 4286
+f 4678 4288 4679
+f 4680 4679 4288
+f 4287 4288 4678
+f 4290 4680 4288
+f 4681 4287 4678
+f 4682 4680 4290
+f 4289 4681 4683
+f 4289 4683 4682
+f 4289 4287 4681
+f 4289 4682 4290
+f 4684 4292 4685
+f 4686 4685 4292
+f 4294 4686 4292
+f 4291 4292 4684
+f 4687 4291 4684
+f 4688 4686 4294
+f 4293 4687 4689
+f 4293 4689 4688
+f 4293 4291 4687
+f 4293 4688 4294
+f 4690 4296 4691
+f 4692 4691 4296
+f 4295 4296 4690
+f 4298 4692 4296
+f 4693 4295 4690
+f 4694 4692 4298
+f 4297 4693 4695
+f 4297 4695 4694
+f 4297 4295 4693
+f 4297 4694 4298
+f 4696 4300 4697
+f 4698 4697 4300
+f 4299 4300 4696
+f 4302 4698 4300
+f 4699 4299 4696
+f 4700 4698 4302
+f 4301 4699 4701
+f 4301 4701 4700
+f 4301 4299 4699
+f 4301 4700 4302
+f 4702 4304 4703
+f 4704 4703 4304
+f 4303 4304 4702
+f 4306 4704 4304
+f 4705 4303 4702
+f 4706 4704 4306
+f 4305 4705 4707
+f 4305 4707 4706
+f 4305 4303 4705
+f 4305 4706 4306
+f 4708 4308 4709
+f 4710 4709 4308
+f 4310 4710 4308
+f 4307 4308 4708
+f 4711 4307 4708
+f 4712 4710 4310
+f 4309 4711 4713
+f 4309 4713 4712
+f 4309 4307 4711
+f 4309 4712 4310
+f 4714 4312 4715
+f 4716 4715 4312
+f 4311 4312 4714
+f 4314 4716 4312
+f 4717 4311 4714
+f 4718 4716 4314
+f 4313 4717 4719
+f 4313 4719 4718
+f 4313 4311 4717
+f 4313 4718 4314
+f 4720 4316 4721
+f 4722 4721 4316
+f 4315 4316 4720
+f 4318 4722 4316
+f 4723 4315 4720
+f 4724 4722 4318
+f 4317 4723 4725
+f 4317 4725 4724
+f 4317 4315 4723
+f 4317 4724 4318
+f 4726 4320 4727
+f 4728 4727 4320
+f 4322 4728 4320
+f 4319 4320 4726
+f 4729 4319 4726
+f 4730 4728 4322
+f 4321 4729 4731
+f 4321 4731 4730
+f 4321 4319 4729
+f 4321 4730 4322
+f 4732 4324 4733
+f 4734 4733 4324
+f 4323 4324 4732
+f 4326 4734 4324
+f 4735 4323 4732
+f 4736 4734 4326
+f 4325 4735 4737
+f 4325 4737 4736
+f 4325 4323 4735
+f 4325 4736 4326
+f 4738 4328 4739
+f 4740 4739 4328
+f 4327 4328 4738
+f 4330 4740 4328
+f 4741 4327 4738
+f 4742 4740 4330
+f 4329 4741 4743
+f 4329 4743 4742
+f 4329 4327 4741
+f 4329 4742 4330
+f 4744 4332 4745
+f 4746 4745 4332
+f 4331 4332 4744
+f 4334 4746 4332
+f 4747 4331 4744
+f 4748 4746 4334
+f 4333 4747 4749
+f 4333 4749 4748
+f 4333 4331 4747
+f 4333 4748 4334
+f 4750 4336 4751
+f 4752 4751 4336
+f 4335 4336 4750
+f 4338 4752 4336
+f 4753 4335 4750
+f 4754 4752 4338
+f 4337 4753 4755
+f 4337 4755 4754
+f 4337 4335 4753
+f 4337 4754 4338
+f 4756 4340 4757
+f 4758 4757 4340
+f 4342 4758 4340
+f 4339 4340 4756
+f 4759 4339 4756
+f 4760 4758 4342
+f 4341 4759 4761
+f 4341 4761 4760
+f 4341 4339 4759
+f 4341 4760 4342
+f 4762 4344 4763
+f 4764 4763 4344
+f 4346 4764 4344
+f 4343 4344 4762
+f 4765 4343 4762
+f 4766 4764 4346
+f 4345 4765 4767
+f 4345 4767 4766
+f 4345 4343 4765
+f 4345 4766 4346
+f 4768 4348 4769
+f 4770 4769 4348
+f 4347 4348 4768
+f 4350 4770 4348
+f 4771 4347 4768
+f 4772 4770 4350
+f 4349 4771 4773
+f 4349 4773 4772
+f 4349 4347 4771
+f 4349 4772 4350
+f 4774 4352 4775
+f 4776 4775 4352
+f 4351 4352 4774
+f 4354 4776 4352
+f 4777 4351 4774
+f 4778 4776 4354
+f 4353 4777 4779
+f 4353 4779 4778
+f 4353 4351 4777
+f 4353 4778 4354
+f 4780 4356 4781
+f 4782 4781 4356
+f 4355 4356 4780
+f 4358 4782 4356
+f 4783 4355 4780
+f 4784 4782 4358
+f 4357 4783 4785
+f 4357 4785 4784
+f 4357 4355 4783
+f 4357 4784 4358
+f 4786 4360 4787
+f 4788 4787 4360
+f 4362 4788 4360
+f 4359 4360 4786
+f 4789 4359 4786
+f 4790 4788 4362
+f 4361 4789 4791
+f 4361 4791 4790
+f 4361 4359 4789
+f 4361 4790 4362
+f 4792 4364 4793
+f 4794 4793 4364
+f 4363 4364 4792
+f 4366 4794 4364
+f 4795 4363 4792
+f 4796 4794 4366
+f 4365 4795 4797
+f 4365 4797 4796
+f 4365 4363 4795
+f 4365 4796 4366
+f 4798 4368 4799
+f 4800 4799 4368
+f 4367 4368 4798
+f 4370 4800 4368
+f 4801 4367 4798
+f 4802 4800 4370
+f 4369 4801 4803
+f 4369 4803 4802
+f 4369 4367 4801
+f 4369 4802 4370
+f 4804 4372 4805
+f 4806 4805 4372
+f 4371 4372 4804
+f 4374 4806 4372
+f 4807 4371 4804
+f 4808 4806 4374
+f 4373 4807 4809
+f 4373 4809 4808
+f 4373 4371 4807
+f 4373 4808 4374
+f 4810 4376 4811
+f 4812 4811 4376
+f 4378 4812 4376
+f 4375 4376 4810
+f 4813 4375 4810
+f 4814 4812 4378
+f 4377 4813 4815
+f 4377 4815 4814
+f 4377 4375 4813
+f 4377 4814 4378
+f 4816 4380 4817
+f 4818 4817 4380
+f 4379 4380 4816
+f 4382 4818 4380
+f 4819 4379 4816
+f 4820 4818 4382
+f 4381 4819 4821
+f 4381 4821 4820
+f 4381 4379 4819
+f 4381 4820 4382
+f 4822 4384 4823
+f 4824 4823 4384
+f 4383 4384 4822
+f 4386 4824 4384
+f 4825 4383 4822
+f 4826 4824 4386
+f 4385 4825 4827
+f 4385 4827 4826
+f 4385 4383 4825
+f 4385 4826 4386
+f 4828 4388 4829
+f 4830 4829 4388
+f 4387 4388 4828
+f 4390 4830 4388
+f 4831 4387 4828
+f 4832 4830 4390
+f 4389 4831 4833
+f 4389 4833 4832
+f 4389 4387 4831
+f 4389 4832 4390
+f 4834 4392 4835
+f 4836 4835 4392
+f 4394 4836 4392
+f 4391 4392 4834
+f 4837 4391 4834
+f 4838 4836 4394
+f 4393 4837 4839
+f 4393 4839 4838
+f 4393 4391 4837
+f 4393 4838 4394
+f 4840 4396 4841
+f 4842 4841 4396
+f 4395 4396 4840
+f 4398 4842 4396
+f 4843 4395 4840
+f 4844 4842 4398
+f 4397 4843 4845
+f 4397 4845 4844
+f 4397 4395 4843
+f 4397 4844 4398
+f 4846 4400 4847
+f 4848 4847 4400
+f 4399 4400 4846
+f 4402 4848 4400
+f 4849 4399 4846
+f 4850 4848 4402
+f 4401 4849 4851
+f 4401 4851 4850
+f 4401 4399 4849
+f 4401 4850 4402
+f 4852 4404 4853
+f 4854 4853 4404
+f 4403 4404 4852
+f 4406 4854 4404
+f 4855 4403 4852
+f 4856 4854 4406
+f 4405 4855 4857
+f 4405 4857 4856
+f 4405 4403 4855
+f 4405 4856 4406
+f 4858 4408 4859
+f 4860 4859 4408
+f 4410 4860 4408
+f 4407 4408 4858
+f 4861 4407 4858
+f 4862 4860 4410
+f 4409 4861 4863
+f 4409 4863 4862
+f 4409 4407 4861
+f 4409 4862 4410
+f 4864 4412 4865
+f 4866 4865 4412
+f 4411 4412 4864
+f 4414 4866 4412
+f 4867 4411 4864
+f 4868 4866 4414
+f 4413 4867 4869
+f 4413 4869 4868
+f 4413 4411 4867
+f 4413 4868 4414
+f 4870 4416 4871
+f 4872 4871 4416
+f 4415 4416 4870
+f 4418 4872 4416
+f 4873 4415 4870
+f 4874 4872 4418
+f 4417 4873 4875
+f 4417 4875 4874
+f 4417 4415 4873
+f 4417 4874 4418
+f 4876 4420 4877
+f 4878 4877 4420
+f 4419 4420 4876
+f 4422 4878 4420
+f 4879 4419 4876
+f 4880 4878 4422
+f 4421 4879 4881
+f 4421 4881 4880
+f 4421 4419 4879
+f 4421 4880 4422
+f 4882 4424 4883
+f 4884 4883 4424
+f 4426 4884 4424
+f 4423 4424 4882
+f 4885 4423 4882
+f 4886 4884 4426
+f 4425 4885 4887
+f 4425 4887 4886
+f 4425 4423 4885
+f 4425 4886 4426
+f 4888 4428 4889
+f 4890 4889 4428
+f 4427 4428 4888
+f 4430 4890 4428
+f 4891 4427 4888
+f 4892 4890 4430
+f 4429 4891 4893
+f 4429 4893 4892
+f 4429 4427 4891
+f 4429 4892 4430
+f 4894 4432 4895
+f 4896 4895 4432
+f 4434 4896 4432
+f 4431 4432 4894
+f 4897 4431 4894
+f 4898 4896 4434
+f 4433 4897 4899
+f 4433 4899 4898
+f 4433 4431 4897
+f 4433 4898 4434
+f 4900 4436 4901
+f 4902 4901 4436
+f 4438 4902 4436
+f 4435 4436 4900
+f 4903 4435 4900
+f 4904 4902 4438
+f 4437 4903 4905
+f 4437 4905 4904
+f 4437 4435 4903
+f 4437 4904 4438
+f 4906 4440 4907
+f 4908 4907 4440
+f 4442 4908 4440
+f 4439 4440 4906
+f 4909 4439 4906
+f 4910 4908 4442
+f 4441 4909 4911
+f 4441 4911 4910
+f 4441 4439 4909
+f 4441 4910 4442
+f 4912 4444 4913
+f 4914 4913 4444
+f 4446 4914 4444
+f 4443 4444 4912
+f 4915 4443 4912
+f 4916 4914 4446
+f 4445 4915 4917
+f 4445 4917 4916
+f 4445 4443 4915
+f 4445 4916 4446
+f 4918 4448 4919
+f 4920 4919 4448
+f 4447 4448 4918
+f 4450 4920 4448
+f 4921 4447 4918
+f 4922 4920 4450
+f 4449 4921 4923
+f 4449 4923 4922
+f 4449 4447 4921
+f 4449 4922 4450
+f 4924 4452 4925
+f 4926 4925 4452
+f 4454 4926 4452
+f 4451 4452 4924
+f 4927 4451 4924
+f 4928 4926 4454
+f 4453 4927 4929
+f 4453 4929 4928
+f 4453 4451 4927
+f 4453 4928 4454
+f 4930 4456 4931
+f 4932 4931 4456
+f 4458 4932 4456
+f 4455 4456 4930
+f 4933 4455 4930
+f 4934 4932 4458
+f 4457 4933 4935
+f 4457 4935 4934
+f 4457 4455 4933
+f 4457 4934 4458
+f 4936 4460 4937
+f 4938 4937 4460
+f 4459 4460 4936
+f 4462 4938 4460
+f 4939 4459 4936
+f 4940 4938 4462
+f 4461 4939 4941
+f 4461 4941 4940
+f 4461 4459 4939
+f 4461 4940 4462
+f 4942 4464 4943
+f 4944 4943 4464
+f 4463 4464 4942
+f 4466 4944 4464
+f 4945 4463 4942
+f 4946 4944 4466
+f 4465 4945 4947
+f 4465 4947 4946
+f 4465 4463 4945
+f 4465 4946 4466
+f 4948 4468 4949
+f 4950 4949 4468
+f 4470 4950 4468
+f 4467 4468 4948
+f 4951 4467 4948
+f 4952 4950 4470
+f 4469 4951 4953
+f 4469 4953 4952
+f 4469 4467 4951
+f 4469 4952 4470
+f 4954 4472 4955
+f 4956 4955 4472
+f 4471 4472 4954
+f 4474 4956 4472
+f 4957 4471 4954
+f 4958 4956 4474
+f 4473 4957 4959
+f 4473 4959 4958
+f 4473 4471 4957
+f 4473 4958 4474
+f 4960 4476 4961
+f 4962 4961 4476
+f 4475 4476 4960
+f 4478 4962 4476
+f 4963 4475 4960
+f 4964 4962 4478
+f 4477 4963 4965
+f 4477 4965 4964
+f 4477 4475 4963
+f 4477 4964 4478
+f 4966 4480 4967
+f 4968 4967 4480
+f 4482 4968 4480
+f 4479 4480 4966
+f 4969 4479 4966
+f 4970 4968 4482
+f 4481 4969 4971
+f 4481 4971 4970
+f 4481 4479 4969
+f 4481 4970 4482
+f 4972 4484 4973
+f 4974 4973 4484
+f 4483 4484 4972
+f 4486 4974 4484
+f 4975 4483 4972
+f 4976 4974 4486
+f 4485 4975 4977
+f 4485 4977 4976
+f 4485 4483 4975
+f 4485 4976 4486
+f 4978 4488 4979
+f 4980 4979 4488
+f 4487 4488 4978
+f 4490 4980 4488
+f 4981 4487 4978
+f 4982 4980 4490
+f 4489 4981 4983
+f 4489 4983 4982
+f 4489 4487 4981
+f 4489 4982 4490
+f 4984 4492 4985
+f 4986 4985 4492
+f 4491 4492 4984
+f 4494 4986 4492
+f 4987 4491 4984
+f 4988 4986 4494
+f 4493 4987 4989
+f 4493 4989 4988
+f 4493 4491 4987
+f 4493 4988 4494
+f 4990 4496 4991
+f 4992 4991 4496
+f 4495 4496 4990
+f 4498 4992 4496
+f 4993 4495 4990
+f 4994 4992 4498
+f 4497 4993 4995
+f 4497 4995 4994
+f 4497 4495 4993
+f 4497 4994 4498
+f 4996 4500 4997
+f 4998 4997 4500
+f 4499 4500 4996
+f 4502 4998 4500
+f 4999 4499 4996
+f 5000 4998 4502
+f 4501 4999 5001
+f 4501 5001 5000
+f 4501 4499 4999
+f 4501 5000 4502
+f 5002 4504 5003
+f 5004 5003 4504
+f 4503 4504 5002
+f 4506 5004 4504
+f 5005 4503 5002
+f 5006 5004 4506
+f 4505 5005 5007
+f 4505 5007 5006
+f 4505 4503 5005
+f 4505 5006 4506
+f 5008 4508 5009
+f 5010 5009 4508
+f 4507 4508 5008
+f 4510 5010 4508
+f 5011 4507 5008
+f 5012 5010 4510
+f 4509 5011 5013
+f 4509 5013 5012
+f 4509 4507 5011
+f 4509 5012 4510
+f 5014 4512 5015
+f 5016 5015 4512
+f 4511 4512 5014
+f 4514 5016 4512
+f 5017 4511 5014
+f 5018 5016 4514
+f 4513 5017 5019
+f 4513 5019 5018
+f 4513 4511 5017
+f 4513 5018 4514
+f 5020 4516 5021
+f 5022 5021 4516
+f 4518 5022 4516
+f 4515 4516 5020
+f 5023 4515 5020
+f 5024 5022 4518
+f 4517 5023 5025
+f 4517 5025 5024
+f 4517 4515 5023
+f 4517 5024 4518
+f 5026 4520 5027
+f 5028 5027 4520
+f 4522 5028 4520
+f 4519 4520 5026
+f 5029 4519 5026
+f 5030 5028 4522
+f 4521 5029 5031
+f 4521 5031 5030
+f 4521 4519 5029
+f 4521 5030 4522
+f 5032 4524 5033
+f 5034 5033 4524
+f 4523 4524 5032
+f 4526 5034 4524
+f 5035 4523 5032
+f 5036 5034 4526
+f 4525 5035 5037
+f 4525 5037 5036
+f 4525 4523 5035
+f 4525 5036 4526
+f 4528 4527 5038
+f 5039 4528 5038
+f 4529 4528 5039
+f 5040 4529 5039
+f 4530 4529 5040
+f 5041 4530 5040
+f 4531 4530 5041
+f 5042 4531 5041
+f 4532 4531 5042
+f 5043 4532 5042
+f 4533 4532 5043
+f 5044 4533 5043
+f 4534 4533 5044
+f 5045 4534 5044
+f 4535 4534 5045
+f 5046 4535 5045
+f 4536 4535 5046
+f 5047 4536 5046
+f 4537 4536 5047
+f 5048 4537 5047
+f 4538 4537 5048
+f 5049 4538 5048
+f 4539 4538 5049
+f 5050 4539 5049
+f 4540 4539 5050
+f 5051 4540 5050
+f 4541 4540 5051
+f 5052 4541 5051
+f 4542 4541 5052
+f 5053 4542 5052
+f 4543 4542 5053
+f 5054 4543 5053
+f 4544 4543 5054
+f 5055 4544 5054
+f 4545 4544 5055
+f 5056 4545 5055
+f 4546 4545 5056
+f 5057 4546 5056
+f 4547 4546 5057
+f 5058 4547 5057
+f 4548 4547 5058
+f 5059 4548 5058
+f 4549 4548 5059
+f 5060 4549 5059
+f 4550 4549 5060
+f 5061 4550 5060
+f 4551 4550 5061
+f 5062 4551 5061
+f 4552 4551 5062
+f 5063 4552 5062
+f 4553 4552 5063
+f 5064 4553 5063
+f 4554 4553 5064
+f 5065 4554 5064
+f 4555 4554 5065
+f 5066 4555 5065
+f 4556 4555 5066
+f 5067 4556 5066
+f 4557 4556 5067
+f 5068 4557 5067
+f 4527 4557 5068
+f 5038 4527 5068
+f 4558 4559 5069
+f 5069 4559 5070
+f 4561 4558 5071
+f 5071 4558 5069
+f 4563 4561 5072
+f 5072 4561 5071
+f 4562 4563 5073
+f 5073 4563 5072
+f 4560 4562 5074
+f 5074 4562 5073
+f 4559 4560 5070
+f 5070 4560 5074
+f 4564 4565 5075
+f 5075 4565 5076
+f 4567 4564 5077
+f 5077 4564 5075
+f 4569 4567 5078
+f 5078 4567 5077
+f 4568 4569 5079
+f 5079 4569 5078
+f 4566 4568 5080
+f 5080 4568 5079
+f 4565 4566 5076
+f 5076 4566 5080
+f 4570 4571 5081
+f 5081 4571 5082
+f 4573 4570 5083
+f 5083 4570 5081
+f 4575 4573 5084
+f 5084 4573 5083
+f 4574 4575 5085
+f 5085 4575 5084
+f 4572 4574 5086
+f 5086 4574 5085
+f 4571 4572 5082
+f 5082 4572 5086
+f 4576 4577 5087
+f 5087 4577 5088
+f 4579 4576 5089
+f 5089 4576 5087
+f 4581 4579 5090
+f 5090 4579 5089
+f 5091 5092 5090
+f 4580 4581 5092
+f 5092 4581 5090
+f 5093 5092 5094
+f 5093 4578 5092
+f 4578 4580 5092
+f 4577 4578 5088
+f 5088 4578 5093
+f 4582 4583 5095
+f 5095 4583 5096
+f 4585 4582 5097
+f 5097 4582 5095
+f 4587 4585 5098
+f 5098 4585 5097
+f 4586 4587 5099
+f 5099 4587 5098
+f 4584 4586 5100
+f 5100 4586 5099
+f 4583 4584 5096
+f 5096 4584 5100
+f 4588 4589 5101
+f 5101 4589 5102
+f 4591 4588 5103
+f 5103 4588 5101
+f 4593 4591 5104
+f 5104 4591 5103
+f 4592 4593 5105
+f 5105 4593 5104
+f 4590 4592 5106
+f 5106 4592 5105
+f 4589 4590 5102
+f 5102 4590 5106
+f 4594 4595 5107
+f 5107 4595 5108
+f 4597 4594 5109
+f 5109 4594 5107
+f 4599 4597 5110
+f 5110 4597 5109
+f 4598 4599 5111
+f 5111 4599 5110
+f 4596 4598 5112
+f 5112 4598 5111
+f 4595 4596 5108
+f 5108 4596 5112
+f 4600 4601 5113
+f 5113 4601 5114
+f 4603 4600 5115
+f 5115 4600 5113
+f 4605 4603 5116
+f 5116 4603 5115
+f 4604 4605 5117
+f 5117 4605 5116
+f 4602 4604 5118
+f 5118 4604 5117
+f 4601 4602 5114
+f 5114 4602 5118
+f 4606 4607 5119
+f 5119 4607 5120
+f 4609 4606 5121
+f 5121 4606 5119
+f 4611 4609 5122
+f 5122 4609 5121
+f 4610 4611 5123
+f 5123 4611 5122
+f 4608 4610 5124
+f 5124 4610 5123
+f 4607 4608 5120
+f 5120 4608 5124
+f 4612 4613 5125
+f 5125 4613 5126
+f 4615 4612 5127
+f 5127 4612 5125
+f 4617 4615 5128
+f 5128 4615 5127
+f 4616 4617 5129
+f 5129 4617 5128
+f 4614 4616 5130
+f 5130 4616 5129
+f 4613 4614 5126
+f 5126 4614 5130
+f 4618 4619 5131
+f 5131 4619 5132
+f 4621 4618 5133
+f 5133 4618 5131
+f 4623 4621 5134
+f 5134 4621 5133
+f 4622 4623 5135
+f 5135 4623 5134
+f 4620 4622 5136
+f 5136 4622 5135
+f 4619 4620 5132
+f 5132 4620 5136
+f 4624 4625 5137
+f 5137 4625 5138
+f 4627 4624 5139
+f 5139 4624 5137
+f 4629 4627 5140
+f 5140 4627 5139
+f 4628 4629 5141
+f 5141 4629 5140
+f 4626 4628 5142
+f 5142 4628 5141
+f 4625 4626 5138
+f 5138 4626 5142
+f 4630 4631 5143
+f 5143 4631 5144
+f 4633 4630 5145
+f 5145 4630 5143
+f 4635 4633 5146
+f 5146 4633 5145
+f 4634 4635 5147
+f 5147 4635 5146
+f 4632 4634 5148
+f 5148 4634 5147
+f 4631 4632 5144
+f 5144 4632 5148
+f 4636 4637 5149
+f 5149 4637 5150
+f 4639 4636 5151
+f 5151 4636 5149
+f 4641 4639 5152
+f 5152 4639 5151
+f 4640 4641 5153
+f 5153 4641 5152
+f 4638 4640 5154
+f 5154 4640 5153
+f 4637 4638 5150
+f 5150 4638 5154
+f 4642 4643 5155
+f 5155 4643 5156
+f 4645 4642 5157
+f 5157 4642 5155
+f 4647 4645 5158
+f 5158 4645 5157
+f 4646 4647 5159
+f 5159 4647 5158
+f 4644 4646 5160
+f 5160 4646 5159
+f 4643 4644 5156
+f 5156 4644 5160
+f 5161 5162 5163
+f 5161 4648 5162
+f 4648 4649 5162
+f 5164 5165 5161
+f 4651 4648 5165
+f 5165 4648 5161
+f 4653 5166 5167
+f 5166 4651 5165
+f 4653 4651 5166
+f 4652 4653 5168
+f 5168 4653 5167
+f 4650 4652 5169
+f 5169 4652 5168
+f 5162 4649 5170
+f 5170 4650 5169
+f 4649 4650 5170
+f 4654 4655 5171
+f 5171 4655 5172
+f 4657 4654 5173
+f 5173 4654 5171
+f 4659 4657 5174
+f 5174 4657 5173
+f 4658 4659 5175
+f 5175 4659 5174
+f 4656 4658 5176
+f 5176 4658 5175
+f 4655 4656 5172
+f 5172 4656 5176
+f 4660 4661 5177
+f 5177 4661 5178
+f 4663 4660 5179
+f 5179 4660 5177
+f 4665 4663 5180
+f 5180 4663 5179
+f 4664 4665 5181
+f 5181 4665 5180
+f 4662 4664 5182
+f 5182 4664 5181
+f 4661 4662 5178
+f 5178 4662 5182
+f 4666 4667 5183
+f 5183 4667 5184
+f 4669 4666 5185
+f 5185 4666 5183
+f 4671 4669 5186
+f 5186 4669 5185
+f 4670 4671 5187
+f 5187 4671 5186
+f 4668 4670 5188
+f 5188 4670 5187
+f 4667 4668 5184
+f 5184 4668 5188
+f 4672 4673 5189
+f 5189 4673 5190
+f 4675 4672 5191
+f 5191 4672 5189
+f 4677 4675 5192
+f 5192 4675 5191
+f 4676 4677 5193
+f 5193 4677 5192
+f 4674 4676 5194
+f 5194 4676 5193
+f 4673 4674 5190
+f 5190 4674 5194
+f 4678 4679 5195
+f 5195 4679 5196
+f 4681 4678 5197
+f 5197 4678 5195
+f 4683 4681 5198
+f 5198 4681 5197
+f 4682 4683 5199
+f 5199 4683 5198
+f 4680 4682 5200
+f 5200 4682 5199
+f 4679 4680 5196
+f 5196 4680 5200
+f 4684 4685 5201
+f 5201 4685 5202
+f 4687 4684 5203
+f 5203 4684 5201
+f 4689 4687 5204
+f 5204 4687 5203
+f 4688 4689 5205
+f 5205 4689 5204
+f 4686 4688 5206
+f 5206 4688 5205
+f 4685 4686 5202
+f 5202 4686 5206
+f 4690 4691 5207
+f 5207 4691 5208
+f 4693 4690 5209
+f 5209 4690 5207
+f 4695 4693 5210
+f 5210 4693 5209
+f 4694 4695 5211
+f 5211 4695 5210
+f 4692 4694 5212
+f 5212 4694 5211
+f 4691 4692 5208
+f 5208 4692 5212
+f 4696 4697 5213
+f 5213 4697 5214
+f 4699 4696 5215
+f 5215 4696 5213
+f 4701 4699 5216
+f 5216 4699 5215
+f 4700 4701 5217
+f 5217 4701 5216
+f 4698 4700 5218
+f 5218 4700 5217
+f 4697 4698 5214
+f 5214 4698 5218
+f 4702 4703 5219
+f 5219 4703 5220
+f 4705 4702 5221
+f 5221 4702 5219
+f 4707 4705 5222
+f 5222 4705 5221
+f 4706 4707 5223
+f 5223 4707 5222
+f 4704 4706 5224
+f 5224 4706 5223
+f 4703 4704 5220
+f 5220 4704 5224
+f 4708 4709 5225
+f 5225 4709 5226
+f 4711 4708 5227
+f 5227 4708 5225
+f 4713 4711 5228
+f 5228 4711 5227
+f 4712 4713 5229
+f 5229 4713 5228
+f 4710 4712 5230
+f 5230 4712 5229
+f 4709 4710 5226
+f 5226 4710 5230
+f 4714 4715 5231
+f 5231 4715 5232
+f 4717 4714 5233
+f 5233 4714 5231
+f 4719 4717 5234
+f 5234 4717 5233
+f 4718 4719 5235
+f 5235 4719 5234
+f 4716 4718 5236
+f 5236 4718 5235
+f 4715 4716 5232
+f 5232 4716 5236
+f 4720 4721 5237
+f 5237 4721 5238
+f 4723 4720 5239
+f 5239 4720 5237
+f 5240 5241 5239
+f 5242 4725 5241
+f 4725 4723 5241
+f 5241 4723 5239
+f 4724 4725 5243
+f 5243 4725 5242
+f 4722 4724 5244
+f 5244 4724 5243
+f 4721 5245 5238
+f 5238 5245 5246
+f 5245 4722 5244
+f 4721 4722 5245
+f 4726 4727 5247
+f 5247 4727 5248
+f 4729 4726 5249
+f 5249 4726 5247
+f 4731 4729 5250
+f 5250 4729 5249
+f 4730 4731 5251
+f 5251 4731 5250
+f 4728 4730 5252
+f 5252 4730 5251
+f 4727 4728 5248
+f 5248 4728 5252
+f 4732 4733 5253
+f 5253 4733 5254
+f 4735 4732 5255
+f 5255 4732 5253
+f 4737 4735 5256
+f 5256 4735 5255
+f 4736 4737 5257
+f 5257 4737 5256
+f 4734 4736 5258
+f 5258 4736 5257
+f 4733 4734 5254
+f 5254 4734 5258
+f 4738 4739 5259
+f 5259 4739 5260
+f 4741 4738 5261
+f 5261 4738 5259
+f 4743 4741 5262
+f 5262 4741 5261
+f 4742 4743 5263
+f 5263 4743 5262
+f 4740 4742 5264
+f 5264 4742 5263
+f 4739 4740 5260
+f 5260 4740 5264
+f 4744 4745 5265
+f 5265 4745 5266
+f 4747 4744 5267
+f 5267 4744 5265
+f 4749 4747 5268
+f 5268 4747 5267
+f 4748 4749 5269
+f 5269 4749 5268
+f 4746 4748 5270
+f 5270 4748 5269
+f 4745 4746 5266
+f 5266 4746 5270
+f 4750 4751 5271
+f 5271 4751 5272
+f 4753 4750 5273
+f 5273 4750 5271
+f 4755 4753 5274
+f 5274 4753 5273
+f 4754 4755 5275
+f 5275 4755 5274
+f 4752 4754 5276
+f 5276 4754 5275
+f 4751 4752 5272
+f 5272 4752 5276
+f 4756 4757 5277
+f 5277 4757 5278
+f 4759 4756 5279
+f 5279 4756 5277
+f 4761 4759 5280
+f 5280 4759 5279
+f 4760 4761 5281
+f 5281 4761 5280
+f 4758 4760 5282
+f 5282 4760 5281
+f 4757 4758 5278
+f 5278 4758 5282
+f 4762 4763 5283
+f 5283 4763 5284
+f 4765 4762 5285
+f 5285 4762 5283
+f 4767 4765 5286
+f 5286 4765 5285
+f 4766 4767 5287
+f 5287 4767 5286
+f 4764 4766 5288
+f 5288 4766 5287
+f 4763 4764 5284
+f 5284 4764 5288
+f 4768 4769 5289
+f 5289 4769 5290
+f 4771 4768 5291
+f 5291 4768 5289
+f 4773 4771 5292
+f 5292 4771 5291
+f 4772 4773 5293
+f 5293 4773 5292
+f 4770 4772 5294
+f 5294 4772 5293
+f 4769 4770 5290
+f 5290 4770 5294
+f 5295 5296 5297
+f 5295 4774 5296
+f 4774 4775 5296
+f 5298 5299 5295
+f 4777 4774 5299
+f 5299 4774 5295
+f 4779 5300 5301
+f 5300 4777 5299
+f 4779 4777 5300
+f 4778 4779 5302
+f 5302 4779 5301
+f 4776 4778 5303
+f 5303 4778 5302
+f 4775 5304 5296
+f 5304 4776 5303
+f 4775 4776 5304
+f 4780 4781 5305
+f 5305 4781 5306
+f 4783 4780 5307
+f 5307 4780 5305
+f 4785 4783 5308
+f 5308 4783 5307
+f 4784 4785 5309
+f 5309 4785 5308
+f 4782 4784 5310
+f 5310 4784 5309
+f 4781 4782 5306
+f 5306 4782 5310
+f 4786 4787 5311
+f 5311 4787 5312
+f 4789 4786 5313
+f 5313 4786 5311
+f 4791 4789 5314
+f 5314 4789 5313
+f 4790 4791 5315
+f 5315 4791 5314
+f 4788 4790 5316
+f 5316 4790 5315
+f 4787 4788 5312
+f 5312 4788 5316
+f 4792 4793 5317
+f 5317 4793 5318
+f 4795 5317 5319
+f 4795 4792 5317
+f 4797 4795 5320
+f 5320 4795 5319
+f 4796 4797 5321
+f 5321 4797 5320
+f 4794 4796 5322
+f 5322 4796 5321
+f 4793 4794 5318
+f 5318 4794 5322
+f 4798 4799 5323
+f 5323 4799 5324
+f 4801 4798 5325
+f 5325 4798 5323
+f 4803 4801 5326
+f 5326 4801 5325
+f 4802 4803 5327
+f 5327 4803 5326
+f 4800 4802 5328
+f 5328 4802 5327
+f 4799 4800 5324
+f 5324 4800 5328
+f 4804 4805 5329
+f 5329 4805 5330
+f 4807 4804 5331
+f 5331 4804 5329
+f 4809 4807 5332
+f 5332 4807 5331
+f 4808 4809 5333
+f 5333 4809 5332
+f 4806 4808 5334
+f 5334 4808 5333
+f 4805 4806 5330
+f 5330 4806 5334
+f 4810 4811 5335
+f 5335 4811 5336
+f 4813 4810 5337
+f 5337 4810 5335
+f 4815 4813 5338
+f 5338 4813 5337
+f 4814 4815 5339
+f 5339 4815 5338
+f 4812 4814 5340
+f 5340 4814 5339
+f 4811 4812 5336
+f 5336 4812 5340
+f 4816 4817 5341
+f 5341 4817 5342
+f 4819 4816 5343
+f 5343 4816 5341
+f 4821 4819 5344
+f 5344 4819 5343
+f 5345 5346 5344
+f 4820 4821 5346
+f 5346 4821 5344
+f 5347 5346 5348
+f 5347 4818 5346
+f 4818 4820 5346
+f 4817 4818 5342
+f 5342 4818 5347
+f 4822 4823 5349
+f 5349 4823 5350
+f 4825 4822 5351
+f 5351 4822 5349
+f 4827 4825 5352
+f 5352 4825 5351
+f 4826 4827 5353
+f 5353 4827 5352
+f 4824 4826 5354
+f 5354 4826 5353
+f 4823 4824 5350
+f 5350 4824 5354
+f 4828 4829 5355
+f 5355 4829 5356
+f 4831 4828 5357
+f 5357 4828 5355
+f 4833 4831 5358
+f 5358 4831 5357
+f 4832 4833 5359
+f 5359 4833 5358
+f 4830 4832 5360
+f 5360 4832 5359
+f 4829 4830 5356
+f 5356 4830 5360
+f 4834 4835 5361
+f 5361 4835 5362
+f 4837 4834 5363
+f 5363 4834 5361
+f 4839 4837 5364
+f 5364 4837 5363
+f 4838 4839 5365
+f 5365 4839 5364
+f 4836 4838 5366
+f 5366 4838 5365
+f 4835 4836 5362
+f 5362 4836 5366
+f 4840 4841 5367
+f 5367 4841 5368
+f 4843 4840 5369
+f 5369 4840 5367
+f 4845 4843 5370
+f 5370 4843 5369
+f 4844 4845 5371
+f 5371 4845 5370
+f 4842 4844 5372
+f 5372 4844 5371
+f 4841 4842 5368
+f 5368 4842 5372
+f 4846 4847 5373
+f 5373 4847 5374
+f 4849 4846 5375
+f 5375 4846 5373
+f 4851 4849 5376
+f 5376 4849 5375
+f 4850 4851 5377
+f 5377 4851 5376
+f 4848 4850 5378
+f 5378 4850 5377
+f 4847 4848 5374
+f 5374 4848 5378
+f 4852 4853 5379
+f 5379 4853 5380
+f 4855 4852 5381
+f 5381 4852 5379
+f 4857 4855 5382
+f 5382 4855 5381
+f 4856 4857 5383
+f 5383 4857 5382
+f 4854 4856 5384
+f 5384 4856 5383
+f 4853 4854 5380
+f 5380 4854 5384
+f 4858 4859 5385
+f 5385 4859 5386
+f 4861 4858 5387
+f 5387 4858 5385
+f 4863 4861 5388
+f 5388 4861 5387
+f 4862 4863 5389
+f 5389 4863 5388
+f 4860 4862 5390
+f 5390 4862 5389
+f 4859 4860 5386
+f 5386 4860 5390
+f 4864 4865 5391
+f 5391 4865 5392
+f 4867 4864 5393
+f 5393 4864 5391
+f 4869 4867 5394
+f 5394 4867 5393
+f 4868 4869 5395
+f 5395 4869 5394
+f 4866 4868 5396
+f 5396 4868 5395
+f 4865 4866 5392
+f 5392 4866 5396
+f 4870 4871 5397
+f 5397 4871 5398
+f 4873 4870 5399
+f 5399 4870 5397
+f 4875 4873 5400
+f 5400 4873 5399
+f 4874 4875 5401
+f 5401 4875 5400
+f 4872 4874 5402
+f 5402 4874 5401
+f 4871 4872 5398
+f 5398 4872 5402
+f 4876 4877 5403
+f 5403 4877 5404
+f 4879 4876 5405
+f 5405 4876 5403
+f 4881 4879 5406
+f 5406 4879 5405
+f 4880 4881 5407
+f 5407 4881 5406
+f 4878 4880 5408
+f 5408 4880 5407
+f 4877 4878 5404
+f 5404 4878 5408
+f 4882 4883 5409
+f 5409 4883 5410
+f 4885 4882 5411
+f 5411 4882 5409
+f 4887 4885 5412
+f 5412 4885 5411
+f 4886 4887 5413
+f 5413 4887 5412
+f 4884 4886 5414
+f 5414 4886 5413
+f 4883 4884 5410
+f 5410 4884 5414
+f 5415 5416 5417
+f 5415 4888 5416
+f 4888 4889 5416
+f 5418 5419 5415
+f 4891 4888 5419
+f 5419 4888 5415
+f 4893 5420 5421
+f 5420 4891 5419
+f 4893 4891 5420
+f 4892 4893 5422
+f 5422 4893 5421
+f 4890 4892 5423
+f 5423 4892 5422
+f 5416 4889 5424
+f 5424 4890 5423
+f 4889 4890 5424
+f 4894 4895 5425
+f 5425 4895 5426
+f 4897 4894 5427
+f 5427 4894 5425
+f 4899 4897 5428
+f 5428 4897 5427
+f 4898 5428 5429
+f 4898 4899 5428
+f 4896 4898 5430
+f 5430 4898 5429
+f 4895 4896 5426
+f 5426 4896 5430
+f 4900 4901 5431
+f 5431 4901 5432
+f 4903 5431 5433
+f 4903 4900 5431
+f 4905 4903 5434
+f 5434 4903 5433
+f 4904 4905 5435
+f 5435 4905 5434
+f 4902 4904 5436
+f 5436 4904 5435
+f 4901 4902 5432
+f 5432 4902 5436
+f 4906 4907 5437
+f 5437 4907 5438
+f 4909 4906 5439
+f 5439 4906 5437
+f 4911 4909 5440
+f 5440 4909 5439
+f 4910 4911 5441
+f 5441 4911 5440
+f 4908 4910 5442
+f 5442 4910 5441
+f 4907 4908 5438
+f 5438 4908 5442
+f 4912 4913 5443
+f 5443 4913 5444
+f 4915 4912 5445
+f 5445 4912 5443
+f 4917 4915 5446
+f 5446 4915 5445
+f 4916 4917 5447
+f 5447 4917 5446
+f 4914 4916 5448
+f 5448 4916 5447
+f 4913 4914 5444
+f 5444 4914 5448
+f 4918 4919 5449
+f 5449 4919 5450
+f 4921 4918 5451
+f 5451 4918 5449
+f 4923 4921 5452
+f 5452 4921 5451
+f 4922 4923 5453
+f 5453 4923 5452
+f 4920 4922 5454
+f 5454 4922 5453
+f 4919 4920 5450
+f 5450 4920 5454
+f 4924 4925 5455
+f 5455 4925 5456
+f 4927 4924 5457
+f 5457 4924 5455
+f 4929 4927 5458
+f 5458 4927 5457
+f 4928 4929 5459
+f 5459 4929 5458
+f 4926 4928 5460
+f 5460 4928 5459
+f 4925 4926 5456
+f 5456 4926 5460
+f 4930 4931 5461
+f 5461 4931 5462
+f 4933 4930 5463
+f 5463 4930 5461
+f 4935 4933 5464
+f 5464 4933 5463
+f 4934 4935 5465
+f 5465 4935 5464
+f 4932 4934 5466
+f 5466 4934 5465
+f 4931 4932 5462
+f 5462 4932 5466
+f 4936 4937 5467
+f 5467 4937 5468
+f 4939 4936 5469
+f 5469 4936 5467
+f 4941 4939 5470
+f 5470 4939 5469
+f 4940 4941 5471
+f 5471 4941 5470
+f 4938 4940 5472
+f 5472 4940 5471
+f 4937 4938 5468
+f 5468 4938 5472
+f 4942 4943 5473
+f 5473 4943 5474
+f 4945 4942 5475
+f 5475 4942 5473
+f 4947 4945 5476
+f 5476 4945 5475
+f 4946 4947 5477
+f 5477 4947 5476
+f 4944 4946 5478
+f 5478 4946 5477
+f 4943 4944 5474
+f 5474 4944 5478
+f 4948 4949 5479
+f 5479 4949 5480
+f 4951 4948 5481
+f 5481 4948 5479
+f 4953 4951 5482
+f 5482 4951 5481
+f 4952 4953 5483
+f 5483 4953 5482
+f 4950 4952 5484
+f 5484 4952 5483
+f 4949 4950 5480
+f 5480 4950 5484
+f 4954 4955 5485
+f 5485 4955 5486
+f 4957 4954 5487
+f 5487 4954 5485
+f 4959 4957 5488
+f 5488 4957 5487
+f 4958 4959 5489
+f 5489 4959 5488
+f 4956 4958 5490
+f 5490 4958 5489
+f 4955 4956 5486
+f 5486 4956 5490
+f 4960 4961 5491
+f 5491 4961 5492
+f 4963 4960 5493
+f 5493 4960 5491
+f 5494 5495 5493
+f 5496 4965 5495
+f 4965 4963 5495
+f 5495 4963 5493
+f 4964 4965 5497
+f 5497 4965 5496
+f 4962 4964 5498
+f 5498 4964 5497
+f 4961 5499 5492
+f 5492 5499 5500
+f 5499 4962 5498
+f 4961 4962 5499
+f 4966 4967 5501
+f 5501 4967 5502
+f 4969 4966 5503
+f 5503 4966 5501
+f 4971 4969 5504
+f 5504 4969 5503
+f 4970 4971 5505
+f 5505 4971 5504
+f 4968 4970 5506
+f 5506 4970 5505
+f 4967 4968 5502
+f 5502 4968 5506
+f 4972 4973 5507
+f 5507 4973 5508
+f 4975 4972 5509
+f 5509 4972 5507
+f 4977 4975 5510
+f 5510 4975 5509
+f 4976 4977 5511
+f 5511 4977 5510
+f 4974 4976 5512
+f 5512 4976 5511
+f 4973 4974 5508
+f 5508 4974 5512
+f 4978 4979 5513
+f 5513 4979 5514
+f 4981 4978 5515
+f 5515 4978 5513
+f 4983 4981 5516
+f 5516 4981 5515
+f 4982 4983 5517
+f 5517 4983 5516
+f 4980 4982 5518
+f 5518 4982 5517
+f 4979 4980 5514
+f 5514 4980 5518
+f 4984 4985 5519
+f 5519 4985 5520
+f 4987 4984 5521
+f 5521 4984 5519
+f 4989 4987 5522
+f 5522 4987 5521
+f 4988 4989 5523
+f 5523 4989 5522
+f 4986 4988 5524
+f 5524 4988 5523
+f 4985 4986 5520
+f 5520 4986 5524
+f 4990 4991 5525
+f 5525 4991 5526
+f 4993 4990 5527
+f 5527 4990 5525
+f 4995 4993 5528
+f 5528 4993 5527
+f 4994 4995 5529
+f 5529 4995 5528
+f 4992 4994 5530
+f 5530 4994 5529
+f 4991 4992 5526
+f 5526 4992 5530
+f 4996 4997 5531
+f 5531 4997 5532
+f 4999 4996 5533
+f 5533 4996 5531
+f 5001 4999 5534
+f 5534 4999 5533
+f 5000 5001 5535
+f 5535 5001 5534
+f 4998 5000 5536
+f 5536 5000 5535
+f 4997 4998 5532
+f 5532 4998 5536
+f 5002 5003 5537
+f 5537 5003 5538
+f 5005 5002 5539
+f 5539 5002 5537
+f 5007 5005 5540
+f 5540 5005 5539
+f 5006 5007 5541
+f 5541 5007 5540
+f 5004 5006 5542
+f 5542 5006 5541
+f 5003 5004 5538
+f 5538 5004 5542
+f 5008 5009 5543
+f 5543 5009 5544
+f 5011 5008 5545
+f 5545 5008 5543
+f 5013 5011 5546
+f 5546 5011 5545
+f 5012 5013 5547
+f 5547 5013 5546
+f 5010 5012 5548
+f 5548 5012 5547
+f 5009 5010 5544
+f 5544 5010 5548
+f 5549 5550 5551
+f 5549 5014 5550
+f 5014 5015 5550
+f 5552 5553 5549
+f 5017 5014 5553
+f 5553 5014 5549
+f 5019 5554 5555
+f 5554 5017 5553
+f 5019 5017 5554
+f 5018 5019 5556
+f 5556 5019 5555
+f 5016 5018 5557
+f 5557 5018 5556
+f 5015 5558 5550
+f 5558 5016 5557
+f 5015 5016 5558
+f 5020 5021 5559
+f 5559 5021 5560
+f 5023 5020 5561
+f 5561 5020 5559
+f 5025 5023 5562
+f 5562 5023 5561
+f 5024 5025 5563
+f 5563 5025 5562
+f 5022 5024 5564
+f 5564 5024 5563
+f 5021 5022 5560
+f 5560 5022 5564
+f 5026 5027 5565
+f 5565 5027 5566
+f 5029 5026 5567
+f 5567 5026 5565
+f 5031 5029 5568
+f 5568 5029 5567
+f 5030 5031 5569
+f 5569 5031 5568
+f 5028 5030 5570
+f 5570 5030 5569
+f 5027 5028 5566
+f 5566 5028 5570
+f 5032 5033 5571
+f 5571 5033 5572
+f 5035 5032 5573
+f 5573 5032 5571
+f 5037 5035 5574
+f 5574 5035 5573
+f 5036 5037 5575
+f 5575 5037 5574
+f 5034 5036 5576
+f 5576 5036 5575
+f 5033 5034 5572
+f 5572 5034 5576
+f 5575 5038 5576
+f 5572 5038 5577
+f 5572 5576 5038
+f 5571 5572 5577
+f 5564 5574 5573
+f 5563 5038 5575
+f 5563 5574 5564
+f 5563 5575 5574
+f 5560 5564 5573
+f 5560 5573 5571
+f 5559 5560 5571
+f 5578 5571 5577
+f 5578 5559 5571
+f 5578 5561 5559
+f 5578 5563 5562
+f 5578 5562 5561
+f 5039 5038 5563
+f 5039 5563 5578
+f 5569 5039 5570
+f 5566 5039 5578
+f 5566 5570 5039
+f 5565 5566 5578
+f 5548 5568 5567
+f 5547 5569 5568
+f 5547 5568 5548
+f 5547 5039 5569
+f 5544 5567 5565
+f 5544 5548 5567
+f 5543 5544 5565
+f 5579 5545 5543
+f 5579 5547 5546
+f 5579 5546 5545
+f 5579 5565 5578
+f 5579 5543 5565
+f 5541 5579 5542
+f 5538 5542 5579
+f 5537 5538 5579
+f 5040 5541 5540
+f 5040 5540 5539
+f 5040 5547 5579
+f 5040 5579 5541
+f 5040 5039 5547
+f 5556 5040 5557
+f 5558 5040 5539
+f 5558 5537 5579
+f 5558 5539 5537
+f 5558 5557 5040
+f 5041 5040 5556
+f 5041 5556 5555
+f 5041 5555 5554
+f 5580 5041 5554
+f 5042 5041 5580
+f 5581 5042 5580
+f 5043 5042 5581
+f 5582 5043 5581
+f 5044 5043 5582
+f 5498 5044 5582
+f 5499 5498 5582
+f 5497 5044 5498
+f 5496 5044 5497
+f 5495 5044 5496
+f 5471 5044 5472
+f 5468 5472 5044
+f 5468 5044 5495
+f 5467 5468 5495
+f 5478 5470 5469
+f 5477 5044 5471
+f 5477 5470 5478
+f 5477 5471 5470
+f 5474 5478 5469
+f 5474 5469 5467
+f 5473 5474 5467
+f 5484 5476 5475
+f 5483 5477 5476
+f 5483 5476 5484
+f 5480 5475 5473
+f 5480 5484 5475
+f 5479 5480 5473
+f 5045 5044 5477
+f 5045 5481 5479
+f 5045 5483 5482
+f 5045 5482 5481
+f 5045 5477 5483
+f 5459 5045 5460
+f 5456 5460 5045
+f 5583 5457 5455
+f 5583 5455 5456
+f 5583 5458 5457
+f 5583 5045 5479
+f 5583 5479 5473
+f 5583 5456 5045
+f 5466 5458 5583
+f 5465 5459 5458
+f 5465 5458 5466
+f 5465 5045 5459
+f 5462 5466 5583
+f 5461 5462 5583
+f 5448 5464 5463
+f 5444 5448 5463
+f 5444 5463 5461
+f 5046 5045 5465
+f 5046 5464 5448
+f 5046 5448 5447
+f 5046 5465 5464
+f 5446 5046 5447
+f 5443 5461 5583
+f 5443 5444 5461
+f 5445 5046 5446
+f 5453 5046 5454
+f 5450 5445 5443
+f 5450 5046 5445
+f 5450 5454 5046
+f 5449 5450 5443
+f 5436 5452 5451
+f 5435 5046 5453
+f 5435 5452 5436
+f 5435 5453 5452
+f 5432 5436 5451
+f 5584 5432 5451
+f 5584 5449 5443
+f 5584 5451 5449
+f 5584 5433 5431
+f 5584 5431 5432
+f 5442 5434 5433
+f 5441 5435 5434
+f 5441 5434 5442
+f 5438 5433 5584
+f 5438 5442 5433
+f 5437 5438 5584
+f 5047 5046 5435
+f 5047 5435 5441
+f 5047 5439 5437
+f 5047 5441 5440
+f 5047 5440 5439
+f 5413 5047 5414
+f 5410 5414 5047
+f 5409 5047 5437
+f 5409 5437 5584
+f 5409 5410 5047
+f 5430 5412 5411
+f 5429 5047 5413
+f 5429 5412 5430
+f 5429 5413 5412
+f 5426 5430 5411
+f 5426 5411 5409
+f 5425 5426 5409
+f 5423 5428 5427
+f 5422 5429 5428
+f 5422 5428 5423
+f 5424 5427 5425
+f 5424 5423 5427
+f 5048 5422 5421
+f 5048 5421 5420
+f 5048 5047 5429
+f 5048 5429 5422
+f 5585 5048 5420
+f 5049 5048 5585
+f 5586 5049 5585
+f 5050 5049 5586
+f 5587 5050 5586
+f 5051 5050 5587
+f 5354 5051 5587
+f 5353 5051 5354
+f 5350 5354 5587
+f 5352 5051 5353
+f 5349 5350 5587
+f 5351 5051 5352
+f 5359 5051 5360
+f 5356 5351 5349
+f 5356 5051 5351
+f 5356 5360 5051
+f 5355 5356 5349
+f 5588 5358 5357
+f 5588 5355 5349
+f 5588 5357 5355
+f 5588 5359 5358
+f 5333 5051 5359
+f 5333 5588 5334
+f 5333 5359 5588
+f 5330 5334 5588
+f 5329 5330 5588
+f 5052 5051 5333
+f 5052 5331 5329
+f 5052 5333 5332
+f 5052 5332 5331
+f 5339 5052 5340
+f 5336 5340 5052
+f 5335 5052 5329
+f 5335 5329 5588
+f 5335 5336 5052
+f 5322 5338 5337
+f 5321 5339 5338
+f 5321 5338 5322
+f 5321 5052 5339
+f 5318 5322 5337
+f 5589 5319 5317
+f 5589 5317 5318
+f 5589 5320 5319
+f 5589 5337 5335
+f 5589 5318 5337
+f 5589 5335 5588
+f 5053 5321 5320
+f 5053 5052 5321
+f 5053 5320 5589
+f 5327 5053 5328
+f 5324 5053 5589
+f 5324 5328 5053
+f 5326 5053 5327
+f 5323 5324 5589
+f 5310 5326 5325
+f 5310 5053 5326
+f 5309 5053 5310
+f 5306 5325 5323
+f 5306 5310 5325
+f 5305 5306 5323
+f 5590 5305 5323
+f 5590 5307 5305
+f 5590 5309 5308
+f 5590 5308 5307
+f 5590 5323 5589
+f 5315 5590 5316
+f 5054 5309 5590
+f 5054 5590 5315
+f 5054 5053 5309
+f 5312 5316 5590
+f 5314 5054 5315
+f 5311 5312 5590
+f 5313 5054 5314
+f 5293 5054 5294
+f 5290 5294 5054
+f 5290 5054 5313
+f 5290 5313 5311
+f 5289 5290 5311
+f 5591 5311 5590
+f 5591 5289 5311
+f 5591 5291 5289
+f 5591 5293 5292
+f 5591 5292 5291
+f 5055 5054 5293
+f 5055 5293 5591
+f 5288 5055 5591
+f 5287 5055 5288
+f 5284 5288 5591
+f 5286 5055 5287
+f 5283 5284 5591
+f 5285 5055 5286
+f 5302 5055 5303
+f 5304 5283 5591
+f 5304 5303 5055
+f 5304 5055 5285
+f 5304 5285 5283
+f 5056 5055 5302
+f 5056 5302 5301
+f 5056 5301 5300
+f 5592 5057 5056
+f 5592 5056 5300
+f 5058 5057 5592
+f 5593 5058 5592
+f 5594 5058 5593
+f 5059 5058 5594
+f 5245 5059 5594
+f 5245 5244 5059
+f 5243 5059 5244
+f 5218 5242 5241
+f 5217 5243 5242
+f 5217 5242 5218
+f 5214 5218 5241
+f 5213 5214 5241
+f 5060 5215 5213
+f 5060 5217 5216
+f 5060 5216 5215
+f 5060 5059 5243
+f 5060 5243 5217
+f 5223 5060 5224
+f 5220 5060 5213
+f 5220 5224 5060
+f 5219 5220 5213
+f 5230 5222 5221
+f 5229 5060 5223
+f 5229 5222 5230
+f 5229 5223 5222
+f 5226 5230 5221
+f 5226 5221 5219
+f 5225 5226 5219
+f 5206 5228 5227
+f 5205 5228 5206
+f 5205 5229 5228
+f 5202 5206 5227
+f 5595 5225 5219
+f 5595 5202 5227
+f 5595 5203 5201
+f 5595 5201 5202
+f 5595 5204 5203
+f 5595 5227 5225
+f 5061 5060 5229
+f 5061 5229 5205
+f 5061 5204 5595
+f 5061 5205 5204
+f 5211 5061 5212
+f 5208 5212 5061
+f 5207 5061 5595
+f 5207 5208 5061
+f 5194 5210 5209
+f 5193 5061 5211
+f 5193 5211 5210
+f 5193 5210 5194
+f 5190 5209 5207
+f 5190 5194 5209
+f 5189 5207 5595
+f 5189 5190 5207
+f 5200 5192 5191
+f 5199 5193 5192
+f 5199 5192 5200
+f 5196 5191 5189
+f 5196 5200 5191
+f 5195 5196 5189
+f 5062 5061 5193
+f 5062 5193 5199
+f 5062 5197 5195
+f 5062 5199 5198
+f 5062 5198 5197
+f 5181 5062 5182
+f 5178 5182 5062
+f 5596 5195 5189
+f 5596 5189 5595
+f 5596 5179 5177
+f 5596 5177 5178
+f 5596 5062 5195
+f 5596 5178 5062
+f 5188 5180 5179
+f 5187 5181 5180
+f 5187 5062 5181
+f 5187 5180 5188
+f 5184 5179 5596
+f 5184 5188 5179
+f 5183 5184 5596
+f 5160 5186 5185
+f 5159 5187 5186
+f 5159 5186 5160
+f 5156 5185 5183
+f 5156 5160 5185
+f 5155 5156 5183
+f 5155 5183 5596
+f 5176 5158 5157
+f 5175 5158 5176
+f 5172 5176 5157
+f 5172 5157 5155
+f 5171 5172 5155
+f 5063 5158 5175
+f 5063 5159 5158
+f 5063 5175 5174
+f 5063 5174 5173
+f 5063 5187 5159
+f 5063 5062 5187
+f 5168 5063 5169
+f 5170 5063 5173
+f 5170 5169 5063
+f 5170 5173 5171
+f 5064 5063 5168
+f 5064 5168 5167
+f 5064 5167 5166
+f 5597 5064 5166
+f 5065 5064 5597
+f 5598 5065 5597
+f 5066 5065 5598
+f 5599 5066 5598
+f 5099 5599 5100
+f 5096 5100 5599
+f 5095 5096 5599
+f 5067 5097 5095
+f 5067 5099 5098
+f 5067 5098 5097
+f 5067 5066 5599
+f 5067 5599 5099
+f 5105 5067 5106
+f 5102 5067 5095
+f 5102 5106 5067
+f 5101 5102 5095
+f 5600 5103 5101
+f 5600 5105 5104
+f 5600 5104 5103
+f 5600 5101 5095
+f 5079 5105 5600
+f 5079 5600 5080
+f 5076 5080 5600
+f 5075 5076 5600
+f 5068 5067 5105
+f 5068 5077 5075
+f 5068 5079 5078
+f 5068 5078 5077
+f 5068 5105 5079
+f 5085 5068 5086
+f 5082 5086 5068
+f 5601 5083 5081
+f 5601 5081 5082
+f 5601 5084 5083
+f 5601 5068 5075
+f 5601 5075 5600
+f 5601 5082 5068
+f 5074 5084 5601
+f 5073 5084 5074
+f 5073 5085 5084
+f 5070 5074 5601
+f 5069 5070 5601
+f 5038 5085 5073
+f 5038 5073 5072
+f 5038 5072 5071
+f 5038 5068 5085
+f 5577 5069 5601
+f 5577 5038 5071
+f 5577 5071 5069
+f 5495 5583 5467
+f 5467 5583 5473
+f 5583 5584 5443
+f 5584 5424 5425
+f 5584 5425 5409
+f 5587 5588 5349
+f 5241 5595 5213
+f 5213 5595 5219
+f 5596 5170 5171
+f 5596 5171 5155
+f 5599 5600 5095
+f 5094 5087 5088
+f 5094 5088 5093
+f 5089 5087 5094
+f 5091 5089 5094
+f 5090 5089 5091
+f 5578 5577 5602
+f 5603 5578 5602
+f 5579 5578 5603
+f 5604 5579 5603
+f 5558 5579 5604
+f 5550 5558 5604
+f 5551 5550 5604
+f 5552 5551 5604
+f 5605 5552 5604
+f 5605 5554 5553
+f 5605 5553 5552
+f 5580 5554 5605
+f 5606 5580 5605
+f 5581 5580 5606
+f 5607 5581 5606
+f 5582 5581 5607
+f 5608 5582 5607
+f 5499 5582 5608
+f 5500 5499 5608
+f 5494 5500 5608
+f 5609 5494 5608
+f 5609 5495 5494
+f 5583 5495 5609
+f 5610 5583 5609
+f 5584 5583 5610
+f 5611 5584 5610
+f 5612 5584 5611
+f 5424 5584 5612
+f 5416 5424 5612
+f 5417 5416 5612
+f 5613 5417 5612
+f 5613 5420 5419
+f 5613 5419 5418
+f 5613 5418 5417
+f 5585 5420 5613
+f 5614 5585 5613
+f 5586 5585 5614
+f 5615 5586 5614
+f 5346 5586 5615
+f 5348 5346 5615
+f 5587 5586 5346
+f 5587 5346 5345
+f 5616 5348 5615
+f 5616 5587 5345
+f 5616 5345 5348
+f 5588 5587 5616
+f 5617 5588 5616
+f 5589 5588 5617
+f 5618 5589 5617
+f 5590 5589 5618
+f 5619 5590 5618
+f 5591 5590 5619
+f 5620 5591 5619
+f 5304 5591 5620
+f 5296 5304 5620
+f 5297 5296 5620
+f 5621 5297 5620
+f 5621 5300 5299
+f 5621 5299 5298
+f 5621 5298 5297
+f 5592 5300 5621
+f 5622 5592 5621
+f 5623 5592 5622
+f 5623 5593 5592
+f 5594 5593 5623
+f 5624 5594 5623
+f 5245 5594 5624
+f 5246 5245 5624
+f 5240 5246 5624
+f 5625 5240 5624
+f 5625 5241 5240
+f 5595 5241 5625
+f 5626 5595 5625
+f 5596 5595 5626
+f 5627 5596 5626
+f 5628 5596 5627
+f 5170 5596 5628
+f 5162 5170 5628
+f 5163 5162 5628
+f 5164 5163 5628
+f 5629 5166 5165
+f 5629 5165 5164
+f 5629 5164 5628
+f 5597 5166 5629
+f 5630 5597 5629
+f 5598 5597 5630
+f 5631 5598 5630
+f 5631 5092 5598
+f 5094 5092 5631
+f 5091 5094 5631
+f 5599 5598 5092
+f 5599 5091 5631
+f 5599 5092 5091
+f 5632 5599 5631
+f 5600 5599 5632
+f 5633 5601 5600
+f 5633 5600 5632
+f 5602 5577 5601
+f 5602 5601 5633
+f 5111 5108 5112
+f 5110 5107 5108
+f 5110 5109 5107
+f 5110 5108 5111
+f 5117 5114 5118
+f 5116 5113 5114
+f 5116 5115 5113
+f 5116 5114 5117
+f 5123 5120 5124
+f 5122 5119 5120
+f 5122 5121 5119
+f 5122 5120 5123
+f 5129 5126 5130
+f 5128 5125 5126
+f 5128 5127 5125
+f 5128 5126 5129
+f 5135 5132 5136
+f 5134 5131 5132
+f 5134 5133 5131
+f 5134 5132 5135
+f 5141 5138 5142
+f 5140 5137 5138
+f 5140 5139 5137
+f 5140 5138 5141
+f 5147 5144 5148
+f 5146 5143 5144
+f 5146 5145 5143
+f 5146 5144 5147
+f 5153 5150 5154
+f 5152 5149 5150
+f 5152 5151 5149
+f 5152 5150 5153
+f 5164 5161 5163
+f 5235 5232 5236
+f 5234 5231 5232
+f 5234 5233 5231
+f 5234 5232 5235
+f 5237 5238 5246
+f 5240 5239 5237
+f 5240 5237 5246
+f 5251 5248 5252
+f 5250 5247 5248
+f 5250 5249 5247
+f 5250 5248 5251
+f 5257 5254 5258
+f 5256 5253 5254
+f 5256 5255 5253
+f 5256 5254 5257
+f 5263 5260 5264
+f 5262 5259 5260
+f 5262 5261 5259
+f 5262 5260 5263
+f 5269 5266 5270
+f 5268 5265 5266
+f 5268 5267 5265
+f 5268 5266 5269
+f 5275 5272 5276
+f 5274 5271 5272
+f 5274 5273 5271
+f 5274 5272 5275
+f 5281 5278 5282
+f 5280 5277 5278
+f 5280 5279 5277
+f 5280 5278 5281
+f 5298 5295 5297
+f 5348 5341 5342
+f 5348 5342 5347
+f 5343 5341 5348
+f 5345 5343 5348
+f 5344 5343 5345
+f 5365 5362 5366
+f 5364 5361 5362
+f 5364 5363 5361
+f 5364 5362 5365
+f 5371 5368 5372
+f 5370 5367 5368
+f 5370 5369 5367
+f 5370 5368 5371
+f 5377 5374 5378
+f 5376 5373 5374
+f 5376 5375 5373
+f 5376 5374 5377
+f 5383 5380 5384
+f 5382 5379 5380
+f 5382 5381 5379
+f 5382 5380 5383
+f 5389 5386 5390
+f 5388 5385 5386
+f 5388 5387 5385
+f 5388 5386 5389
+f 5395 5392 5396
+f 5394 5391 5392
+f 5394 5393 5391
+f 5394 5392 5395
+f 5401 5398 5402
+f 5400 5397 5398
+f 5400 5399 5397
+f 5400 5398 5401
+f 5407 5404 5408
+f 5406 5403 5404
+f 5406 5405 5403
+f 5406 5404 5407
+f 5418 5415 5417
+f 5489 5486 5490
+f 5488 5485 5486
+f 5488 5487 5485
+f 5488 5486 5489
+f 5491 5492 5500
+f 5494 5493 5491
+f 5494 5491 5500
+f 5505 5502 5506
+f 5504 5501 5502
+f 5504 5503 5501
+f 5504 5502 5505
+f 5511 5508 5512
+f 5510 5507 5508
+f 5510 5509 5507
+f 5510 5508 5511
+f 5517 5514 5518
+f 5516 5513 5514
+f 5516 5515 5513
+f 5516 5514 5517
+f 5523 5520 5524
+f 5522 5519 5520
+f 5522 5521 5519
+f 5522 5520 5523
+f 5529 5526 5530
+f 5528 5525 5526
+f 5528 5527 5525
+f 5528 5526 5529
+f 5535 5532 5536
+f 5534 5531 5532
+f 5534 5533 5531
+f 5534 5532 5535
+f 5552 5549 5551
+f 5634 5603 5602
+f 5634 5602 5635
+f 5636 5604 5603
+f 5636 5603 5634
+f 5637 5605 5604
+f 5637 5604 5636
+f 5638 5606 5605
+f 5638 5605 5637
+f 5639 5607 5606
+f 5639 5606 5638
+f 5640 5608 5607
+f 5640 5607 5639
+f 5641 5609 5608
+f 5641 5608 5640
+f 5642 5610 5609
+f 5642 5609 5641
+f 5643 5610 5642
+f 5643 5611 5610
+f 5644 5611 5643
+f 5612 5611 5644
+f 5645 5612 5644
+f 5613 5612 5645
+f 5646 5613 5645
+f 5614 5613 5646
+f 5615 5614 5646
+f 5647 5615 5646
+f 5616 5615 5647
+f 5648 5616 5647
+f 5617 5616 5648
+f 5649 5617 5648
+f 5650 5617 5649
+f 5618 5617 5650
+f 5651 5619 5618
+f 5651 5618 5650
+f 5620 5619 5651
+f 5652 5620 5651
+f 5621 5620 5652
+f 5653 5621 5652
+f 5622 5621 5653
+f 5654 5622 5653
+f 5623 5622 5654
+f 5655 5623 5654
+f 5624 5623 5655
+f 5656 5624 5655
+f 5625 5624 5656
+f 5657 5625 5656
+f 5626 5625 5657
+f 5658 5626 5657
+f 5627 5626 5658
+f 5659 5627 5658
+f 5628 5627 5659
+f 5660 5628 5659
+f 5629 5628 5660
+f 5661 5629 5660
+f 5630 5629 5661
+f 5662 5630 5661
+f 5631 5630 5662
+f 5663 5631 5662
+f 5632 5631 5663
+f 5664 5632 5663
+f 5633 5632 5664
+f 5665 5633 5664
+f 5602 5633 5665
+f 5635 5602 5665
+f 5666 5634 5635
+f 5666 5635 5667
+f 5668 5636 5634
+f 5668 5634 5666
+f 5669 5637 5636
+f 5669 5636 5668
+f 5670 5638 5637
+f 5670 5637 5669
+f 5671 5639 5638
+f 5671 5638 5670
+f 5640 5639 5671
+f 5672 5640 5671
+f 5641 5640 5672
+f 5673 5641 5672
+f 5642 5641 5673
+f 5674 5642 5673
+f 5643 5642 5674
+f 5675 5643 5674
+f 5644 5643 5675
+f 5676 5644 5675
+f 5645 5644 5676
+f 5677 5645 5676
+f 5677 5646 5645
+f 5678 5647 5646
+f 5678 5646 5677
+f 5679 5648 5647
+f 5679 5647 5678
+f 5680 5649 5648
+f 5680 5648 5679
+f 5681 5650 5649
+f 5681 5649 5680
+f 5682 5651 5650
+f 5682 5650 5681
+f 5683 5652 5651
+f 5683 5651 5682
+f 5684 5653 5652
+f 5684 5652 5683
+f 5685 5654 5653
+f 5685 5653 5684
+f 5686 5655 5654
+f 5686 5654 5685
+f 5687 5656 5655
+f 5687 5655 5686
+f 5688 5656 5687
+f 5657 5656 5688
+f 5689 5657 5688
+f 5658 5657 5689
+f 5690 5658 5689
+f 5659 5658 5690
+f 5691 5659 5690
+f 5660 5659 5691
+f 5692 5661 5660
+f 5692 5660 5691
+f 5693 5662 5661
+f 5693 5661 5692
+f 5694 5663 5662
+f 5694 5662 5693
+f 5695 5664 5663
+f 5695 5663 5694
+f 5696 5665 5664
+f 5696 5664 5695
+f 5667 5635 5665
+f 5667 5665 5696
+f 5697 5666 5667
+f 5697 5667 5698
+f 5699 5668 5666
+f 5699 5666 5697
+f 5700 5669 5668
+f 5700 5668 5699
+f 5701 5670 5669
+f 5701 5669 5700
+f 5702 5671 5670
+f 5702 5670 5701
+f 5703 5672 5671
+f 5703 5671 5702
+f 5704 5673 5672
+f 5704 5672 5703
+f 5705 5673 5704
+f 5705 5674 5673
+f 5706 5674 5705
+f 5706 5675 5674
+f 5707 5676 5675
+f 5707 5675 5706
+f 5708 5676 5707
+f 5708 5677 5676
+f 5709 5678 5677
+f 5709 5677 5708
+f 5710 5679 5678
+f 5710 5678 5709
+f 5711 5680 5679
+f 5711 5679 5710
+f 5712 5681 5680
+f 5712 5680 5711
+f 5713 5682 5681
+f 5713 5681 5712
+f 5714 5683 5682
+f 5714 5682 5713
+f 5715 5684 5683
+f 5715 5683 5714
+f 5716 5685 5684
+f 5716 5684 5715
+f 5717 5686 5685
+f 5717 5685 5716
+f 5718 5687 5686
+f 5718 5686 5717
+f 5719 5688 5687
+f 5719 5687 5718
+f 5720 5689 5688
+f 5720 5688 5719
+f 5721 5690 5689
+f 5721 5689 5720
+f 5722 5691 5690
+f 5722 5690 5721
+f 5723 5692 5691
+f 5723 5691 5722
+f 5724 5693 5692
+f 5724 5692 5723
+f 5725 5694 5693
+f 5725 5693 5724
+f 5726 5695 5694
+f 5726 5694 5725
+f 5727 5696 5695
+f 5727 5695 5726
+f 5698 5667 5696
+f 5698 5696 5727
+f 5728 5698 5729
+f 5730 5698 5728
+f 5731 5698 5730
+f 5732 5697 5698
+f 5732 5698 5731
+f 5733 5697 5732
+f 5734 5699 5697
+f 5734 5697 5733
+f 5735 5700 5699
+f 5735 5699 5734
+f 5736 5701 5700
+f 5736 5700 5735
+f 5737 5701 5736
+f 5737 5702 5701
+f 5738 5702 5737
+f 5738 5703 5702
+f 5739 5704 5703
+f 5739 5703 5738
+f 5740 5704 5739
+f 5740 5705 5704
+f 5741 5706 5705
+f 5741 5705 5740
+f 5742 5707 5706
+f 5742 5706 5741
+f 5743 5708 5707
+f 5743 5709 5708
+f 5743 5707 5742
+f 5744 5710 5709
+f 5744 5709 5743
+f 5745 5711 5710
+f 5745 5710 5744
+f 5746 5712 5711
+f 5746 5711 5745
+f 5747 5713 5712
+f 5747 5712 5746
+f 5748 5714 5713
+f 5748 5713 5747
+f 5749 5714 5748
+f 5750 5715 5714
+f 5750 5714 5749
+f 5751 5716 5715
+f 5751 5715 5750
+f 5752 5717 5716
+f 5752 5716 5751
+f 5753 5718 5717
+f 5753 5717 5752
+f 5754 5719 5718
+f 5754 5718 5753
+f 5755 5720 5719
+f 5755 5721 5720
+f 5755 5719 5754
+f 5756 5722 5721
+f 5756 5721 5755
+f 5757 5723 5722
+f 5757 5722 5756
+f 5758 5724 5723
+f 5758 5723 5757
+f 5759 5725 5724
+f 5759 5724 5758
+f 5760 5726 5725
+f 5760 5725 5759
+f 5761 5727 5726
+f 5761 5726 5760
+f 5762 5727 5761
+f 5762 5698 5727
+f 5729 5698 5762
+f 5763 5728 5729
+f 5763 5730 5728
+f 5763 5731 5730
+f 5763 5732 5731
+f 5764 5733 5732
+f 5764 5732 5763
+f 5765 5734 5733
+f 5765 5733 5764
+f 5735 5734 5765
+f 5766 5735 5765
+f 5736 5735 5766
+f 5767 5736 5766
+f 5737 5736 5767
+f 5768 5737 5767
+f 5738 5737 5768
+f 5769 5738 5768
+f 5739 5738 5769
+f 5770 5739 5769
+f 5740 5739 5770
+f 5771 5740 5770
+f 5772 5740 5771
+f 5772 5741 5740
+f 5773 5741 5772
+f 5773 5742 5741
+f 5774 5742 5773
+f 5774 5743 5742
+f 5775 5743 5774
+f 5744 5743 5775
+f 5776 5744 5775
+f 5776 5745 5744
+f 5777 5745 5776
+f 5777 5746 5745
+f 5778 5746 5777
+f 5778 5747 5746
+f 5779 5747 5778
+f 5779 5748 5747
+f 5780 5748 5779
+f 5780 5749 5748
+f 5781 5749 5780
+f 5781 5750 5749
+f 5782 5750 5781
+f 5782 5751 5750
+f 5783 5752 5751
+f 5783 5751 5782
+f 5784 5752 5783
+f 5784 5753 5752
+f 5754 5753 5784
+f 5785 5754 5784
+f 5755 5754 5785
+f 5786 5755 5785
+f 5787 5756 5755
+f 5787 5755 5786
+f 5788 5757 5756
+f 5788 5756 5787
+f 5789 5758 5757
+f 5789 5757 5788
+f 5790 5758 5789
+f 5759 5758 5790
+f 5791 5760 5759
+f 5791 5759 5790
+f 5792 5761 5760
+f 5792 5760 5791
+f 5793 5762 5761
+f 5793 5761 5792
+f 5763 5729 5762
+f 5763 5762 5793
+f 5779 5778 5780
+f 5780 5777 5781
+f 5778 5777 5780
+f 5781 5776 5782
+f 5777 5776 5781
+f 5782 5775 5783
+f 5776 5775 5782
+f 5783 5774 5784
+f 5784 5774 5785
+f 5775 5774 5783
+f 5785 5773 5786
+f 5774 5773 5785
+f 5786 5772 5787
+f 5773 5772 5786
+f 5787 5771 5788
+f 5772 5771 5787
+f 5771 5770 5788
+f 5792 5764 5793
+f 5793 5764 5763
+f 5788 5769 5789
+f 5770 5769 5788
+f 5791 5765 5792
+f 5792 5765 5764
+f 5789 5768 5790
+f 5769 5768 5789
+f 5791 5766 5765
+f 5790 5767 5791
+f 5768 5767 5790
+f 5791 5767 5766
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/concert-hall.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/concert-hall.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/concert-hall.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/concert-hall.obj	2025-08-26 18:16:07.541772151 +0000
@@ -0,0 +1,8544 @@
+# Concert Hall
+# (C) Linux Studio Plugins Project
+o Curtains
+v 16.500006 0.000000 9.000000
+v 16.500006 0.000000 0.800000
+v 16.500006 5.400000 9.000000
+v 16.500006 5.400000 0.800000
+v 10.561628 -6.974595 0.800000
+v 16.200001 -5.169180 0.800000
+v 16.500006 -5.400000 0.800000
+v 10.484738 -6.684615 0.800000
+v 16.200001 5.170158 0.800000
+v 10.561628 7.000714 0.800000
+v 10.483548 6.711053 0.800000
+v 10.561628 7.000714 9.000000
+v 16.200001 -5.169180 9.000000
+v 10.561628 -6.974595 9.000000
+v 16.500006 -5.400000 9.000000
+v 10.484738 -6.684615 9.000000
+v 16.200001 5.170158 9.000000
+v 10.483548 6.711053 9.000000
+f 1 2 3
+f 2 4 3
+f 5 6 7
+f 8 6 5
+f 2 7 6
+f 9 4 2
+f 10 9 11
+f 10 4 9
+f 6 9 2
+f 4 10 3
+f 3 10 12
+f 13 14 15
+f 13 16 14
+f 15 1 13
+f 3 17 1
+f 17 12 18
+f 3 12 17
+f 17 13 1
+f 7 2 1
+f 7 1 15
+f 10 11 12
+f 12 11 18
+f 11 9 18
+f 18 9 17
+f 9 6 17
+f 17 6 13
+f 6 8 13
+f 13 8 16
+f 16 8 14
+f 8 5 14
+f 5 7 15
+f 5 15 14
+o Seats
+v -7.696222 8.830247 4.359291
+v -9.584471 6.553572 4.359291
+v -7.606019 8.772677 4.359291
+v -9.682292 6.592292 4.359291
+v -10.934532 3.904792 4.359291
+v -11.036572 3.924176 4.359291
+v -11.567688 1.000000 4.359291
+v -11.670694 1.000000 4.359291
+v -7.606019 8.772677 3.959291
+v -7.696222 8.830247 3.817693
+v -7.606031 8.772685 3.817693
+v -7.263935 8.542651 3.959291
+v -7.263935 8.542651 3.659286
+v -7.606031 8.772685 3.659286
+v -9.682292 6.592292 3.817693
+v -11.036572 3.924176 3.817693
+v -11.670694 1.000000 3.817693
+v -11.567688 1.000000 3.959291
+v -11.567701 1.000000 3.817693
+v -11.168779 1.000000 3.959291
+v -11.567701 1.000000 3.659286
+v -11.168779 1.000000 3.659286
+v -9.584471 6.553572 3.959291
+v -10.934532 3.904792 3.959291
+v -9.209173 6.397872 3.959291
+v -9.209173 6.397872 3.659286
+v -10.540375 3.826505 3.959291
+v -10.540375 3.826505 3.659286
+v -9.584484 6.553577 3.817693
+v -10.934546 3.904794 3.817693
+v -9.584484 6.553577 3.659286
+v -10.934546 3.904794 3.659286
+v -8.390384 9.234983 4.118442
+v -8.486579 9.286173 4.518442
+v -8.390384 9.234983 4.518442
+v -8.486579 9.286173 3.976099
+v -8.389592 9.234557 3.976099
+v -8.024359 9.029659 4.118442
+v -8.024359 9.029659 3.817693
+v -8.389592 9.234557 3.817693
+v -10.034507 6.725604 4.118442
+v -10.034507 6.725604 3.817693
+v -11.401748 3.990641 4.118442
+v -11.401748 3.990641 3.817693
+v -12.038483 1.000000 4.118442
+v -12.038483 1.000000 3.817693
+v -10.421299 6.861486 4.118442
+v -11.799016 4.057916 4.118442
+v -12.437181 1.000000 4.118442
+v -10.421299 6.861486 4.518442
+v -11.799016 4.057916 4.518442
+v -12.437181 1.000000 4.518442
+v -10.521985 6.895132 4.518442
+v -11.901828 4.074495 4.518442
+v -12.540136 1.000000 4.518442
+v -10.521985 6.895132 3.976099
+v -11.901828 4.074495 3.976099
+v -12.540136 1.000000 3.976099
+v -10.420468 6.861206 3.976099
+v -11.798167 4.057778 3.976099
+v -12.436330 1.000000 3.976099
+v -10.420468 6.861206 3.817693
+v -11.798167 4.057778 3.817693
+v -12.436330 1.000000 3.817693
+v -9.222695 9.643599 4.277593
+v -9.324161 9.688475 4.677592
+v -9.222695 9.643599 4.677592
+v -9.324161 9.688475 4.134505
+v -9.221011 9.642845 4.134505
+v -8.835434 9.462831 4.277593
+v -8.835434 9.462831 3.976099
+v -9.221011 9.642845 3.976099
+v -11.279203 7.126786 4.134505
+v -11.384090 7.156046 4.134505
+v -12.667866 4.187683 4.134505
+v -12.773057 4.201849 4.134505
+v -13.304567 1.000000 4.134505
+v -13.409195 1.000000 4.134505
+v -11.279203 7.126786 3.976099
+v -12.667866 4.187683 3.976099
+v -13.304567 1.000000 3.976099
+v -10.884070 7.010498 3.976099
+v -12.269647 4.131082 3.976099
+v -12.907753 1.000000 3.976099
+v -10.884070 7.010498 4.277593
+v -12.269647 4.131082 4.277593
+v -12.907753 1.000000 4.277593
+v -11.280919 7.127270 4.277593
+v -12.669588 4.187917 4.277593
+v -13.306281 1.000000 4.277593
+v -11.280919 7.127270 4.677592
+v -12.669588 4.187917 4.677592
+v -13.306281 1.000000 4.677592
+v -11.384090 7.156046 4.677592
+v -12.773057 4.201849 4.677592
+v -13.409195 1.000000 4.677592
+v -10.096683 9.999468 4.436743
+v -10.168760 10.025908 4.836743
+v -10.096683 9.999468 4.836743
+v -10.168760 10.025908 4.134505
+v -9.691109 9.842719 4.134505
+v -9.691109 9.842719 4.436743
+v -11.031124 9.068450 4.134505
+v -11.754675 7.254262 4.134505
+v -11.803670 8.037155 4.134505
+v -12.480107 6.940420 4.134505
+v -12.486102 6.929629 4.134505
+v -12.492087 6.918833 4.134505
+v -12.498064 6.908032 4.134505
+v -13.305405 5.185431 4.134505
+v -13.143111 4.249156 4.134505
+v -13.876606 3.370801 4.134505
+v -13.776672 1.000000 4.134505
+v -14.201530 1.496347 4.134505
+v -14.205827 1.330910 4.134505
+v -14.209620 1.165460 4.134505
+v -14.212911 1.000000 4.134505
+v -11.754675 7.254262 4.436743
+v -13.143111 4.249156 4.436743
+v -13.776672 1.000000 4.436743
+v -12.160069 7.352898 4.436743
+v -13.545280 4.296251 4.436743
+v -14.175061 1.000000 4.436743
+v -12.160069 7.352898 4.836743
+v -13.545280 4.296251 4.836743
+v -14.175061 1.000000 4.836743
+v -11.031124 9.068450 4.836743
+v -11.803670 8.037155 4.836743
+v -12.480107 6.940420 4.836743
+v -12.486102 6.929629 4.836743
+v -12.492087 6.918833 4.836743
+v -12.498064 6.908032 4.836743
+v -13.364816 5.030328 4.836743
+v -13.951257 3.047118 4.836743
+v -14.245087 1.000000 4.836743
+v -14.217973 1.331071 4.134505
+v -14.232492 1.165614 4.134505
+v -14.245087 1.000000 4.134505
+v -14.175061 -1.000000 4.436743
+v -14.245087 -1.000000 4.836743
+v -14.175061 -1.000000 4.836743
+v -14.212911 -1.000000 4.134505
+v -14.245087 -1.000000 4.134505
+v -13.776672 -1.000000 4.134505
+v -13.776672 -1.000000 4.436743
+v -14.232492 -1.165614 4.134505
+v -14.209620 -1.165460 4.134505
+v -14.217973 -1.331071 4.134505
+v -14.205827 -1.330910 4.134505
+v -14.201530 -1.496347 4.134505
+v -13.873687 -3.382796 4.134505
+v -13.143111 -4.249156 4.134505
+v -13.296420 -5.208427 4.134505
+v -11.754675 -7.254262 4.134505
+v -12.480107 -6.940420 4.134505
+v -12.467851 -6.962414 4.134505
+v -11.794214 -8.051024 4.134505
+v -11.025793 -9.074932 4.134505
+v -9.691109 -9.842719 4.134505
+v -10.168760 -10.025908 4.134505
+v -13.143111 -4.249156 4.436743
+v -11.754675 -7.254262 4.436743
+v -9.691109 -9.842719 4.436743
+v -13.545280 -4.296251 4.436743
+v -12.160069 -7.352898 4.436743
+v -10.096683 -9.999468 4.436743
+v -13.545280 -4.296251 4.836743
+v -12.160069 -7.352898 4.836743
+v -10.096683 -9.999468 4.836743
+v -13.948618 -3.059177 4.836743
+v -12.480107 -6.940420 4.836743
+v -13.356099 -5.053426 4.836743
+v -12.467851 -6.962414 4.836743
+v -11.794214 -8.051024 4.836743
+v -11.025793 -9.074932 4.836743
+v -10.168760 -10.025908 4.836743
+v -11.168779 -1.000000 3.959291
+v -10.540375 -3.826505 3.959291
+v -11.168779 -1.000000 3.659286
+v -10.540375 -3.826505 3.659286
+v -9.209173 -6.397872 3.959291
+v -9.209173 -6.397872 3.659286
+v -7.263935 -8.542651 3.659286
+v -7.263935 -8.542651 3.959291
+v -11.567688 -1.000000 3.959291
+v -11.670694 -1.000000 4.359291
+v -11.567688 -1.000000 4.359291
+v -11.670694 -1.000000 3.817693
+v -11.567701 -1.000000 3.817693
+v -11.567701 -1.000000 3.659286
+v -10.934532 -3.904792 3.959291
+v -9.584471 -6.553572 3.959291
+v -7.606019 -8.772677 3.959291
+v -7.696222 -8.830247 4.359291
+v -7.606019 -8.772677 4.359291
+v -7.696222 -8.830247 3.817693
+v -7.606030 -8.772685 3.817693
+v -7.606030 -8.772685 3.659286
+v -10.934546 -3.904794 3.659286
+v -9.584484 -6.553577 3.659286
+v -10.934532 -3.904792 4.359291
+v -9.584471 -6.553572 4.359291
+v -11.036572 -3.924176 4.359291
+v -9.682292 -6.592292 4.359291
+v -11.036572 -3.924176 3.817693
+v -9.682292 -6.592292 3.817693
+v -10.934546 -3.904794 3.817693
+v -9.584484 -6.553577 3.817693
+v -12.038483 -1.000000 4.118442
+v -11.401748 -3.990641 4.118442
+v -12.038483 -1.000000 3.817693
+v -11.401748 -3.990641 3.817693
+v -10.034507 -6.725604 4.118442
+v -10.034507 -6.725604 3.817693
+v -8.024358 -9.029659 3.817693
+v -8.024358 -9.029659 4.118442
+v -12.437181 -1.000000 4.118442
+v -12.540136 -1.000000 4.518442
+v -12.437181 -1.000000 4.518442
+v -12.540136 -1.000000 3.976099
+v -12.436330 -1.000000 3.976099
+v -12.436330 -1.000000 3.817693
+v -11.799016 -4.057916 4.118442
+v -10.421299 -6.861486 4.118442
+v -8.390384 -9.234983 4.118442
+v -8.486578 -9.286173 4.518442
+v -8.390384 -9.234983 4.518442
+v -8.486578 -9.286173 3.976099
+v -8.389592 -9.234557 3.976099
+v -8.389592 -9.234557 3.817693
+v -11.798167 -4.057778 3.817693
+v -10.420468 -6.861206 3.817693
+v -11.799016 -4.057916 4.518442
+v -10.421299 -6.861486 4.518442
+v -11.901828 -4.074495 4.518442
+v -10.521985 -6.895132 4.518442
+v -11.901828 -4.074495 3.976099
+v -10.521985 -6.895132 3.976099
+v -11.798167 -4.057778 3.976099
+v -10.420468 -6.861206 3.976099
+v -12.907753 -1.000000 4.277593
+v -12.269647 -4.131082 4.277593
+v -12.907753 -1.000000 3.976099
+v -12.269647 -4.131082 3.976099
+v -10.884070 -7.010498 4.277593
+v -10.884070 -7.010498 3.976099
+v -8.835434 -9.462831 4.277593
+v -8.835434 -9.462831 3.976099
+v -13.306281 -1.000000 4.277593
+v -13.409195 -1.000000 4.677592
+v -13.306281 -1.000000 4.677592
+v -13.409195 -1.000000 4.134505
+v -13.304567 -1.000000 4.134505
+v -13.304567 -1.000000 3.976099
+v -12.669588 -4.187917 4.277593
+v -11.280919 -7.127270 4.277593
+v -9.222695 -9.643599 4.277593
+v -9.324161 -9.688475 4.677592
+v -9.222695 -9.643599 4.677592
+v -9.324161 -9.688475 4.134505
+v -9.221011 -9.642845 4.134505
+v -9.221011 -9.642845 3.976099
+v -12.667866 -4.187683 3.976099
+v -11.279203 -7.126786 3.976099
+v -12.773057 -4.201849 4.134505
+v -12.667866 -4.187683 4.134505
+v -11.384090 -7.156046 4.134505
+v -11.279203 -7.126786 4.134505
+v -12.669588 -4.187917 4.677592
+v -11.280919 -7.127270 4.677592
+v -12.773057 -4.201849 4.677592
+v -11.384090 -7.156046 4.677592
+v 6.338505 7.128158 1.351077
+v 6.682689 8.179988 1.351077
+v 6.584598 8.211510 1.351077
+v 6.438305 7.103364 1.351077
+v 6.127290 6.037470 1.351077
+v 6.228469 6.019476 1.351077
+v 6.053395 4.929434 1.351077
+v 5.951170 4.940568 1.351077
+v 6.682689 8.179988 0.950788
+v 6.584598 8.211510 0.808799
+v 6.680284 8.180762 0.808799
+v 7.061976 8.057522 0.950788
+v 7.061976 8.057522 0.650392
+v 6.680284 8.180762 0.650392
+v 6.438305 7.103364 0.950788
+v 6.228469 6.019476 0.950788
+v 6.053395 4.929434 0.950788
+v 5.951170 4.940568 0.808799
+v 6.050888 4.929707 0.808799
+v 6.448745 4.886054 0.950788
+v 6.050888 4.929707 0.650392
+v 6.448745 4.886054 0.650392
+v 6.338505 7.128158 0.808799
+v 6.127290 6.037470 0.808799
+v 6.824229 7.006993 0.650392
+v 6.824229 7.006993 0.950788
+v 6.619751 5.949486 0.650392
+v 6.619751 5.949486 0.950788
+v 6.435859 7.103972 0.808799
+v 6.225988 6.019918 0.808799
+v 6.435859 7.103972 0.650392
+v 6.225988 6.019918 0.650392
+v 7.658993 6.796100 0.491986
+v 7.882280 7.789778 0.491986
+v 7.882280 7.789778 0.789695
+v 7.658993 6.796100 0.789695
+v 7.466226 5.796052 0.491986
+v 7.466226 5.796052 0.789695
+v 7.304160 4.790573 0.491986
+v 7.304160 4.790573 0.789695
+v 7.503339 7.913922 0.789695
+v 7.405344 7.945901 1.189984
+v 7.503339 7.913922 1.189984
+v 7.405344 7.945901 0.650392
+v 7.506051 7.913037 0.650392
+v 7.506051 7.913037 0.491986
+v 7.276116 6.893221 0.491986
+v 7.077960 5.866757 0.491986
+v 6.911772 4.834636 0.491986
+v 6.806755 4.846354 1.189984
+v 6.908943 4.834952 0.789695
+v 6.908943 4.834952 1.189984
+v 6.806755 4.846354 0.650392
+v 6.911772 4.834636 0.650392
+v 7.273356 6.893919 0.789695
+v 7.075161 5.867265 0.789695
+v 7.273356 6.893919 1.189984
+v 7.075161 5.867265 1.189984
+v 7.173634 6.919107 1.189984
+v 6.974040 5.885590 1.189984
+v 7.173634 6.919107 0.650392
+v 6.974040 5.885590 0.650392
+v 7.276116 6.893221 0.650392
+v 7.077960 5.866757 0.650392
+v 5.988808 7.214599 0.808799
+v 6.240867 8.321441 0.808799
+v 6.240867 8.321441 1.111880
+v 5.988808 7.214599 1.111880
+v 5.772787 6.100162 0.808799
+v 5.772787 6.100162 1.111880
+v 5.593032 4.979304 0.808799
+v 5.593032 4.979304 1.111880
+v 5.861132 8.441869 1.111880
+v 5.762915 8.472829 1.512169
+v 5.861132 8.441869 1.512169
+v 5.762915 8.472829 0.967205
+v 5.853598 8.444246 0.967205
+v 5.853598 8.444246 0.808799
+v 5.594869 7.311104 0.808799
+v 5.373486 6.170077 0.808799
+v 5.189687 5.022396 0.808799
+v 5.095268 5.032398 1.512169
+v 5.197532 5.021564 1.111880
+v 5.197532 5.021564 1.512169
+v 5.095268 5.032398 0.967205
+v 5.189687 5.022396 0.967205
+v 5.602532 7.309236 1.111880
+v 5.381253 6.168724 1.111880
+v 5.602532 7.309236 1.512169
+v 5.381253 6.168724 1.512169
+v 5.502635 7.333556 1.512169
+v 5.280005 6.186331 1.512169
+v 5.502635 7.333556 0.967205
+v 5.280005 6.186331 0.967205
+v 5.594869 7.311104 0.967205
+v 5.373486 6.170077 0.967205
+v 5.152577 7.418241 0.967205
+v 5.418713 8.580673 0.967205
+v 5.418713 8.580673 1.272973
+v 5.152577 7.418241 1.272973
+v 4.925251 6.247601 0.967205
+v 4.925251 6.247601 1.272973
+v 4.736986 5.070046 0.967205
+v 4.736986 5.070046 1.272973
+v 5.038387 8.698542 1.272973
+v 4.940004 8.728790 1.673262
+v 5.038387 8.698542 1.673262
+v 4.940004 8.728790 1.126658
+v 5.025705 8.702447 1.126658
+v 5.025705 8.702447 0.967205
+v 4.752966 7.513809 0.967205
+v 4.520353 6.316672 0.967205
+v 4.328129 5.112391 0.967205
+v 4.239008 5.121529 1.673262
+v 4.341318 5.111035 1.272973
+v 4.341318 5.111035 1.673262
+v 4.239008 5.121529 1.126658
+v 4.328129 5.112391 1.126658
+v 4.765859 7.510746 1.272973
+v 4.533415 6.314459 1.272973
+v 4.765859 7.510746 1.673262
+v 4.533415 6.314459 1.673262
+v 4.665839 7.534477 1.673262
+v 4.432085 6.331601 1.673262
+v 4.665839 7.534477 1.126658
+v 4.432085 6.331601 1.126658
+v 4.752966 7.513809 1.126658
+v 4.520353 6.316672 1.126658
+v 4.315320 7.616958 1.126658
+v 4.595170 8.833956 1.126658
+v 4.595170 8.833956 1.434066
+v 4.315320 7.616958 1.434066
+v 4.077025 6.391145 1.126658
+v 4.077025 6.391145 1.434066
+v 3.880562 5.157937 1.126658
+v 3.880562 5.157937 1.434066
+v 4.214041 8.948471 1.434066
+v 4.115430 8.977774 1.834355
+v 4.214041 8.948471 1.834355
+v 4.115430 8.977774 1.284017
+v 4.190692 8.955421 1.284017
+v 4.190692 8.955421 1.126658
+v 3.904307 7.712182 1.126658
+v 3.660802 6.459837 1.126658
+v 3.460463 5.199866 1.126658
+v 3.382341 5.207571 1.834355
+v 3.484702 5.197470 1.434066
+v 3.484702 5.197470 1.834355
+v 3.382341 5.207571 1.284017
+v 3.460463 5.199866 1.284017
+v 3.928029 7.706734 1.434066
+v 3.684820 6.455908 1.434066
+v 3.827847 7.729701 1.284017
+v 3.904307 7.712182 1.284017
+v 3.583387 6.472470 1.284017
+v 3.660802 6.459837 1.284017
+v 3.928029 7.706734 1.834355
+v 3.684820 6.455908 1.834355
+v 3.827847 7.729701 1.834355
+v 3.583387 6.472470 1.834355
+v 3.476716 7.809278 1.284017
+v 3.769716 9.079314 1.284017
+v 3.769716 9.079314 1.595158
+v 3.476716 7.809278 1.595158
+v 3.227946 6.529842 1.284017
+v 3.227946 6.529842 1.595158
+v 3.023706 5.242548 1.284017
+v 3.023706 5.242548 1.595158
+v 3.387440 9.189149 1.595158
+v 3.288496 9.217100 1.995447
+v 3.387440 9.189149 1.995447
+v 3.288496 9.217099 1.442423
+v 3.364361 9.195687 1.442423
+v 3.364361 9.195687 1.284017
+v 3.065218 7.900479 1.284017
+v 2.811571 6.595599 1.284017
+v 2.603730 5.282643 1.284017
+v 2.525204 5.290031 1.995447
+v 2.627625 5.280388 1.595158
+v 2.627625 5.280388 1.995447
+v 2.525204 5.290031 1.442423
+v 2.603730 5.282643 1.442423
+v 3.088640 7.895355 1.595158
+v 2.835265 6.591903 1.595158
+v 2.988235 7.917263 1.442423
+v 3.065218 7.900479 1.442423
+v 2.811571 6.595599 1.442423
+v 2.733699 6.607704 1.442423
+v 3.088640 7.895355 1.995447
+v 2.835265 6.591903 1.995447
+v 2.988235 7.917263 1.995447
+v 2.733699 6.607704 1.995447
+v 2.636227 7.992720 1.442423
+v 2.941467 9.313329 1.442423
+v 2.941467 9.313329 1.756251
+v 2.636227 7.992720 1.756251
+v 2.377747 6.662169 1.442423
+v 2.377747 6.662169 1.756251
+v 2.166349 5.323330 1.442423
+v 2.166349 5.323330 1.756251
+v 2.557397 9.415948 1.756251
+v 2.457913 9.441730 2.156540
+v 2.557397 9.415948 2.156540
+v 2.457913 9.441730 1.600830
+v 2.529003 9.423344 1.600830
+v 2.529003 9.423344 1.442423
+v 2.218222 8.079104 1.442423
+v 1.955359 6.724679 1.442423
+v 1.740747 5.361776 1.442423
+v 1.667515 5.368270 2.156540
+v 1.770007 5.359171 1.756251
+v 1.770007 5.359171 2.156540
+v 1.667515 5.368270 1.600830
+v 1.740747 5.361776 1.600830
+v 2.246981 8.073291 1.756251
+v 1.984408 6.720464 1.756251
+v 2.218222 8.079104 1.600830
+v 2.146227 8.093564 1.600830
+v 1.955359 6.724679 1.600830
+v 1.882651 6.735171 1.600830
+v 2.246981 8.073291 2.156540
+v 1.984408 6.720464 2.156540
+v 2.146227 8.093564 2.156540
+v 1.882651 6.735171 2.156540
+v 1.792804 8.162354 1.600830
+v 2.108653 9.529021 1.600830
+v 2.108653 9.529021 1.917344
+v 1.792804 8.162354 1.917344
+v 1.525940 6.785283 1.600830
+v 1.525940 6.785283 1.917344
+v 1.308401 5.399564 1.600830
+v 1.308401 5.399564 1.917344
+v 1.721226 9.618211 1.917344
+v 1.620645 9.639601 2.317633
+v 1.721226 9.618211 2.317633
+v 1.620645 9.639601 1.759236
+v 1.687283 9.625525 1.759236
+v 1.687283 9.625525 1.600830
+v 1.367238 8.238944 1.600830
+v 1.097064 6.841789 1.600830
+v 0.877108 5.435853 1.600830
+v 0.809169 5.441432 2.317633
+v 0.911747 5.432994 1.917344
+v 0.911747 5.432994 2.317633
+v 0.809169 5.441432 1.759236
+v 0.877108 5.435853 1.759236
+v 1.401475 8.233104 1.917344
+v 1.131533 6.837435 1.917344
+v 1.367238 8.238944 1.759236
+v 1.300050 8.250206 1.759236
+v 1.097064 6.841789 1.759236
+v 1.029442 6.850217 1.759236
+v 1.401475 8.233104 2.317633
+v 1.131533 6.837435 2.317633
+v 1.300050 8.250206 2.317633
+v 1.029442 6.850217 2.317633
+v 0.868154 9.752515 2.078436
+v 0.827200 9.753710 2.478725
+v 0.868154 9.752515 2.478725
+v 1.266280 9.706427 1.759236
+v 1.266280 9.706427 2.078436
+v 0.827187 9.753714 1.759236
+v 0.943547 8.304433 1.759236
+v 0.505347 8.346996 1.759236
+v 0.671250 6.891776 1.759236
+v 0.233730 6.929725 1.759236
+v 0.449738 5.470272 1.759236
+v 0.012680 5.503693 1.759236
+v 0.943547 8.304433 2.078436
+v 0.671250 6.891776 2.078436
+v 0.449738 5.470272 2.078436
+v 0.545918 8.345228 2.078436
+v 0.273985 6.927361 2.078436
+v 0.052699 5.500712 2.078436
+v 0.545918 8.345228 2.478725
+v 0.273985 6.927361 2.478725
+v 0.052699 5.500712 2.478725
+v 0.505373 8.346992 2.478725
+v 0.233757 6.929721 2.478725
+v 0.012693 5.503691 2.478725
+v -2.545053 5.866241 2.913379
+v -2.443132 5.851532 2.513349
+v -2.443132 5.851532 2.913379
+v -2.545053 5.866241 2.371657
+v -2.443849 5.851635 2.371657
+v -2.050106 5.795869 2.513349
+v -2.443849 5.851635 2.213251
+v -2.050106 5.795869 2.213251
+v -1.609588 8.405032 2.213251
+v -1.328873 9.698116 2.213251
+v -1.328873 9.698116 2.513349
+v -1.609588 8.405032 2.513349
+v -1.850077 7.103867 2.213251
+v -1.850077 7.103867 2.513349
+v -1.611229 9.655222 2.513349
+v -1.751907 9.630690 2.513349
+v -1.470207 9.677699 2.513349
+v -2.019757 8.378011 2.513349
+v -2.250233 7.117920 2.513349
+v -1.751907 9.630690 2.913379
+v -2.019757 8.378011 2.913379
+v -2.250233 7.117920 2.913379
+v -1.825522 9.617007 2.913379
+v -1.862290 9.609955 2.913379
+v -1.788728 9.623919 2.913379
+v -2.126529 8.368920 2.913379
+v -2.354182 7.120656 2.913379
+v -1.862290 9.609955 2.371657
+v -2.126529 8.368920 2.371657
+v -2.354182 7.120656 2.371657
+v -2.020508 8.377950 2.371657
+v -1.825780 9.616959 2.371657
+v -1.789245 9.623823 2.371657
+v -1.752683 9.630548 2.371657
+v -2.250964 7.117940 2.371657
+v -1.752683 9.630548 2.213251
+v -2.020508 8.377950 2.213251
+v -2.250964 7.117940 2.213251
+v -1.611747 9.655135 2.213251
+v -1.470467 9.677659 2.213251
+v -3.400628 5.994848 3.071004
+v -3.298861 5.979021 2.670974
+v -3.298861 5.979021 3.071004
+v -3.400628 5.994848 2.530063
+v -3.300080 5.979209 2.530063
+v -2.906383 5.919376 2.670974
+v -3.300080 5.979209 2.371657
+v -2.906383 5.919376 2.371657
+v -2.922826 8.273402 2.530063
+v -2.800056 9.379715 2.530063
+v -2.763016 9.390693 2.530063
+v -2.725932 9.401525 2.530063
+v -2.688806 9.412210 2.530063
+v -3.029596 8.256764 2.530063
+v -3.126632 7.128801 2.530063
+v -3.229831 7.128221 2.530063
+v -2.688806 9.412210 2.371657
+v -2.922826 8.273402 2.371657
+v -3.126632 7.128801 2.371657
+v -2.506425 8.329534 2.371657
+v -2.545080 9.452086 2.371657
+v -2.400763 9.489768 2.371657
+v -2.255888 9.525248 2.371657
+v -2.723313 7.127261 2.371657
+v -2.255888 9.525248 2.670974
+v -2.506425 8.329534 2.670974
+v -2.723313 7.127261 2.670974
+v -2.544178 9.452329 2.670974
+v -2.687460 9.412594 2.670974
+v -2.400310 9.489882 2.670974
+v -2.921533 8.273598 2.670974
+v -3.125381 7.128806 2.670974
+v -2.687460 9.412594 3.071004
+v -2.921533 8.273598 3.071004
+v -3.125381 7.128806 3.071004
+v -2.762568 9.390824 3.071004
+v -2.800056 9.379715 3.071004
+v -2.725036 9.401784 3.071004
+v -3.029596 8.256764 3.071004
+v -3.229831 7.128221 3.071004
+v -4.254654 6.134681 3.228628
+v -4.153100 6.117313 2.828598
+v -4.153100 6.117313 3.228628
+v -4.254654 6.134681 2.688469
+v -4.154818 6.117605 2.688469
+v -3.761365 6.052286 2.828598
+v -4.154818 6.117605 2.530063
+v -3.761365 6.052286 2.530063
+v -3.414101 8.189011 2.530063
+v -3.201509 9.250389 2.530063
+v -3.201509 9.250389 2.828598
+v -3.414101 8.189011 2.828598
+v -3.600757 7.122765 2.530063
+v -3.600757 7.122765 2.828598
+v -3.495797 9.143236 2.828598
+v -3.641618 9.086143 2.828598
+v -3.349081 9.197989 2.828598
+v -3.834286 8.100438 2.828598
+v -4.004809 7.110663 2.828598
+v -3.641618 9.086143 3.228628
+v -3.834286 8.100438 3.228628
+v -4.004809 7.110663 3.228628
+v -3.718225 9.055063 3.228628
+v -3.756429 9.039281 3.228628
+v -3.679954 9.070683 3.228628
+v -3.943678 8.074793 3.228628
+v -4.109780 7.106438 3.228628
+v -3.756429 9.039281 2.688469
+v -3.943678 8.074793 2.688469
+v -4.109780 7.106438 2.688469
+v -3.836135 8.100014 2.688469
+v -3.718869 9.054798 2.688469
+v -3.681245 9.070160 2.688469
+v -3.643557 9.085365 2.688469
+v -4.006584 7.110595 2.688469
+v -3.643557 9.085365 2.530063
+v -3.836135 8.100014 2.530063
+v -4.006584 7.110595 2.530063
+v -3.497098 9.142738 2.530063
+v -3.349736 9.197751 2.530063
+v -5.106420 6.290744 3.386253
+v -5.005191 6.271059 2.986223
+v -5.005191 6.271059 3.386253
+v -5.106420 6.290744 2.846875
+v -5.007403 6.271485 2.846875
+v -4.614552 6.198167 2.986223
+v -5.007403 6.271485 2.688469
+v -4.614552 6.198167 2.688469
+v -4.760823 7.847160 2.846875
+v -4.731407 8.569314 2.846875
+v -4.693342 8.590221 2.846875
+v -4.655184 8.610959 2.846875
+v -4.616935 8.631528 2.846875
+v -4.869182 7.811930 2.846875
+v -4.890992 7.060400 2.846875
+v -4.994198 7.052335 2.846875
+v -4.616935 8.631528 2.688469
+v -4.760823 7.847160 2.688469
+v -4.890992 7.060400 2.688469
+v -4.332947 7.974489 2.688469
+v -4.467841 8.709636 2.688469
+v -4.317427 8.785169 2.688469
+v -4.165735 8.858105 2.688469
+v -4.482573 7.087727 2.688469
+v -4.165735 8.858105 2.986223
+v -4.332947 7.974489 2.986223
+v -4.482573 7.087727 2.986223
+v -4.466123 8.710517 2.986223
+v -4.614381 8.632894 2.986223
+v -4.316560 8.785595 2.986223
+v -4.758404 7.847932 2.986223
+v -4.888688 7.060574 2.986223
+v -4.614381 8.632894 3.386253
+v -4.758404 7.847932 3.386253
+v -4.888688 7.060574 3.386253
+v -4.692494 8.590684 3.386253
+v -4.731407 8.569314 3.386253
+v -4.653486 8.611877 3.386253
+v -4.869182 7.811930 3.386253
+v -4.994198 7.052335 3.386253
+v -5.954428 6.473445 3.543878
+v -5.853779 6.449670 3.143848
+v -5.853779 6.449670 3.543878
+v -5.954428 6.473445 3.005282
+v -5.856477 6.450299 3.005282
+v -5.464995 6.363649 3.143848
+v -5.856477 6.450299 2.846875
+v -5.464995 6.363649 2.846875
+v -5.697426 7.499329 3.005282
+v -5.724990 7.940016 3.005282
+v -5.686440 7.967670 3.005282
+v -5.647757 7.995136 3.005282
+v -5.608941 8.022415 3.005282
+v -5.806655 7.451980 3.005282
+v -5.779942 6.975267 3.005282
+v -5.883138 6.963104 3.005282
+v -5.608941 8.022415 2.846875
+v -5.697426 7.499329 2.846875
+v -5.779942 6.975267 2.846875
+v -5.263429 7.672994 2.846875
+v -5.457387 8.126271 2.846875
+v -5.303911 8.227265 2.846875
+v -5.148566 8.325360 2.846875
+v -5.368912 7.019045 2.846875
+v -5.148566 8.325360 3.143848
+v -5.263429 7.672994 3.143848
+v -5.368912 7.019045 3.143848
+v -5.455232 8.127719 3.143848
+v -5.605749 8.024646 3.143848
+v -5.302820 8.227968 3.143848
+v -5.694421 7.500610 3.143848
+v -5.777101 6.975595 3.143848
+v -5.605749 8.024646 3.543878
+v -5.694421 7.500610 3.543878
+v -5.777101 6.975595 3.543878
+v -5.685383 7.968424 3.543878
+v -5.724990 7.940016 3.543878
+v -5.645636 7.996634 3.543878
+v -5.806655 7.451980 3.543878
+v -5.883138 6.963104 3.543878
+v -6.794115 6.714076 3.701503
+v -6.695008 6.679646 3.301473
+v -6.695008 6.679646 3.701503
+v -6.794115 6.714076 3.163688
+v -6.698159 6.680703 3.163688
+v -6.310455 6.564223 3.301473
+v -6.698159 6.680703 3.005282
+v -6.310455 6.564223 3.005282
+v -6.646436 7.034430 3.163688
+v -6.698178 7.138191 3.163688
+v -6.658976 7.174775 3.163688
+v -6.619574 7.211144 3.163688
+v -6.737179 7.101393 3.163688
+v -6.756512 6.972339 3.163688
+v -6.672631 6.857615 3.163688
+v -6.775491 6.843233 3.163688
+v -6.619574 7.211144 3.005282
+v -6.646436 7.034430 3.005282
+v -6.672631 6.857615 3.005282
+v -6.206131 7.265523 3.005282
+v -6.309361 7.484071 3.005282
+v -6.150004 7.615564 3.005282
+v -6.465908 7.349245 3.005282
+v -6.259615 6.915070 3.005282
+v -6.150004 7.615564 3.301473
+v -6.206131 7.265523 3.301473
+v -6.259615 6.915070 3.301473
+v -6.463292 7.351545 3.301473
+v -6.615724 7.214677 3.301473
+v -6.308030 7.485194 3.301473
+v -6.642830 7.036434 3.301473
+v -6.669259 6.858090 3.301473
+v -6.615724 7.214677 3.701503
+v -6.642830 7.036434 3.701503
+v -6.669259 6.858090 3.701503
+v -6.696908 7.139383 3.701503
+v -6.737179 7.101393 3.701503
+v -6.656422 7.177145 3.701503
+v -6.756512 6.972339 3.701503
+v -6.775491 6.843233 3.701503
+v -2.746530 -4.139741 2.913379
+v -2.644467 -4.125340 2.513349
+v -2.644467 -4.125340 2.913379
+v -2.746530 -4.139741 2.371657
+v -2.645185 -4.125442 2.371657
+v -2.251108 -4.068983 2.513349
+v -2.645185 -4.125442 2.213251
+v -2.251108 -4.068983 2.213251
+v -2.423934 1.358162 2.213251
+v -2.251108 4.068983 2.213251
+v -2.251108 4.068983 2.513349
+v -2.423934 1.358162 2.513349
+v -2.423934 -1.358162 2.213251
+v -2.423934 -1.358162 2.513349
+v -2.820479 1.376990 2.513349
+v -2.644467 4.125340 2.513349
+v -2.820479 -1.376990 2.513349
+v -2.644467 4.125340 2.913379
+v -2.820479 1.376990 2.913379
+v -2.820479 -1.376990 2.913379
+v -2.923351 1.381801 2.913379
+v -2.746530 4.139741 2.913379
+v -2.923351 -1.381801 2.913379
+v -2.746530 4.139741 2.371657
+v -2.923351 1.381801 2.371657
+v -2.923351 -1.381801 2.371657
+v -2.645185 4.125442 2.371657
+v -2.821202 1.377024 2.371657
+v -2.821202 -1.377024 2.371657
+v -2.645185 4.125442 2.213251
+v -2.821202 1.377024 2.213251
+v -2.821202 -1.377024 2.213251
+v -3.604361 -4.256810 3.071004
+v -3.502218 -4.243266 2.670974
+v -3.502218 -4.243266 3.071004
+v -3.604361 -4.256810 2.530063
+v -3.503441 -4.243428 2.530063
+v -3.108572 -4.190042 2.670974
+v -3.503441 -4.243428 2.371657
+v -3.108572 -4.190042 2.371657
+v -3.787658 1.420909 2.530063
+v -3.604361 4.256810 2.530063
+v -3.503441 4.243428 2.530063
+v -3.686008 1.416439 2.530063
+v -3.686008 -1.416439 2.530063
+v -3.787658 -1.420909 2.530063
+v -3.503441 4.243428 2.371657
+v -3.686008 1.416439 2.371657
+v -3.686008 -1.416439 2.371657
+v -3.108572 4.190042 2.371657
+v -3.288199 1.398605 2.371657
+v -3.288199 -1.398605 2.371657
+v -3.108572 4.190042 2.670974
+v -3.288199 1.398605 2.670974
+v -3.288199 -1.398605 2.670974
+v -3.684776 1.416385 2.670974
+v -3.502218 4.243266 2.670974
+v -3.684776 -1.416385 2.670974
+v -3.502218 4.243266 3.071004
+v -3.684776 1.416385 3.071004
+v -3.684776 -1.416385 3.071004
+v -3.787658 1.420909 3.071004
+v -3.604361 4.256810 3.071004
+v -3.787658 -1.420909 3.071004
+v -4.462951 -4.365856 3.228628
+v -4.360708 -4.353353 2.828598
+v -4.360708 -4.353353 3.228628
+v -4.462951 -4.365856 2.688469
+v -4.362437 -4.353566 2.688469
+v -3.966702 -4.303916 2.828598
+v -4.362437 -4.353566 2.530063
+v -3.966702 -4.303916 2.530063
+v -4.152539 1.436644 2.530063
+v -3.966702 4.303916 2.530063
+v -3.966702 4.303916 2.828598
+v -4.152539 1.436644 2.828598
+v -4.152539 -1.436644 2.530063
+v -4.152539 -1.436644 2.828598
+v -4.549156 1.453156 2.828598
+v -4.360708 4.353353 2.828598
+v -4.549156 -1.453156 2.828598
+v -4.360708 4.353353 3.228628
+v -4.549156 1.453156 3.228628
+v -4.549156 -1.453156 3.228628
+v -4.652049 1.457332 3.228628
+v -4.462951 4.365856 3.228628
+v -4.652049 -1.457332 3.228628
+v -4.462951 4.365856 2.688469
+v -4.652049 1.457332 2.688469
+v -4.652049 -1.457332 2.688469
+v -4.362437 4.353566 2.688469
+v -4.550896 1.453227 2.688469
+v -4.550896 -1.453227 2.688469
+v -4.362437 4.353566 2.530063
+v -4.550896 1.453227 2.530063
+v -4.550896 -1.453227 2.530063
+v -5.322500 -4.464975 3.386253
+v -5.220130 -4.453779 2.986223
+v -5.220130 -4.453779 3.386253
+v -5.322500 -4.464975 2.846875
+v -5.222367 -4.454025 2.846875
+v -4.825668 -4.409045 2.986223
+v -5.222367 -4.454025 2.688469
+v -4.825668 -4.409045 2.688469
+v -5.016972 1.471756 2.688469
+v -4.825668 4.409045 2.688469
+v -4.825668 4.409045 2.986223
+v -5.016972 1.471756 2.986223
+v -5.016972 -1.471756 2.688469
+v -5.016972 -1.471756 2.986223
+v -5.413640 1.486694 2.986223
+v -5.220130 4.453779 2.986223
+v -5.413640 -1.486694 2.986223
+v -5.220130 4.453779 3.386253
+v -5.413640 1.486694 3.386253
+v -5.413640 -1.486694 3.386253
+v -5.516547 1.490433 3.386253
+v -5.322500 4.464975 3.386253
+v -5.516547 -1.490433 3.386253
+v -5.322500 4.464975 2.846875
+v -5.516547 1.490433 2.846875
+v -5.516547 -1.490433 2.846875
+v -5.222367 4.454025 2.846875
+v -5.415888 1.486776 2.846875
+v -5.415888 -1.486776 2.846875
+v -5.222367 4.454025 2.688469
+v -5.415888 1.486776 2.688469
+v -5.415888 -1.486776 2.688469
+v -6.183295 -4.551362 3.543878
+v -6.080758 -4.541872 3.143848
+v -6.080758 -4.541872 3.543878
+v -6.183295 -4.551362 3.005282
+v -6.083505 -4.542129 3.005282
+v -5.685701 -4.503202 3.143848
+v -6.083505 -4.542129 2.846875
+v -5.685701 -4.503202 2.846875
+v -6.281015 1.516189 3.005282
+v -6.183295 4.551362 3.005282
+v -6.083505 4.542129 3.005282
+v -6.381182 1.519271 3.005282
+v -6.281015 -1.516189 3.005282
+v -6.381182 -1.519271 3.005282
+v -6.083505 4.542129 2.846875
+v -6.281015 1.516189 2.846875
+v -6.281015 -1.516189 2.846875
+v -5.881523 1.503196 2.846875
+v -5.685701 4.503202 2.846875
+v -5.881523 -1.503196 2.846875
+v -5.685701 4.503202 3.143848
+v -5.881523 1.503196 3.143848
+v -5.881523 -1.503196 3.143848
+v -6.080758 4.541872 3.143848
+v -6.278257 1.516103 3.143848
+v -6.278257 -1.516103 3.143848
+v -6.080758 4.541872 3.543878
+v -6.278257 1.516103 3.543878
+v -6.278257 -1.516103 3.543878
+v -6.183295 4.551362 3.543878
+v -6.381182 1.519271 3.543878
+v -6.381182 -1.519271 3.543878
+v -7.045773 -4.620565 3.701503
+v -6.943005 -4.613440 3.301473
+v -6.943005 -4.613440 3.701503
+v -7.045773 -4.620565 3.163688
+v -6.946265 -4.613671 3.163688
+v -6.547141 -4.583016 3.301473
+v -6.946265 -4.613671 3.005282
+v -6.547141 -4.583016 3.005282
+v -7.146322 1.540058 3.163688
+v -7.045773 4.620565 3.163688
+v -6.946265 4.613671 3.163688
+v -7.246006 1.542357 3.163688
+v -7.246006 -1.542357 3.163688
+v -7.146322 -1.540058 3.163688
+v -6.946265 4.613671 3.005282
+v -7.146322 1.540058 3.005282
+v -7.146322 -1.540058 3.005282
+v -6.746231 1.529834 3.005282
+v -6.547141 4.583016 3.005282
+v -6.746231 -1.529834 3.005282
+v -6.547141 4.583016 3.301473
+v -6.746231 1.529834 3.301473
+v -6.746231 -1.529834 3.301473
+v -6.943005 4.613440 3.301473
+v -7.143055 1.539981 3.301473
+v -7.143055 -1.539981 3.301473
+v -6.943005 4.613440 3.701503
+v -7.143055 1.539981 3.701503
+v -7.143055 -1.539981 3.701503
+v -7.045773 4.620565 3.701503
+v -7.246006 1.542357 3.701503
+v -7.246006 -1.542357 3.701503
+v -7.910680 -4.664720 3.859127
+v -7.807565 -4.661188 3.459097
+v -7.807565 -4.661188 3.859127
+v -7.910680 -4.664720 3.322094
+v -7.811346 -4.661327 3.322094
+v -7.410525 -4.642918 3.459097
+v -7.811346 -4.661327 3.163688
+v -7.410525 -4.642918 3.163688
+v -8.011888 1.555932 3.322094
+v -7.910680 4.664720 3.322094
+v -7.811346 4.661327 3.322094
+v -8.111100 1.557059 3.322094
+v -8.011888 -1.555932 3.322094
+v -8.111100 -1.557059 3.322094
+v -7.811346 4.661327 3.163688
+v -8.011888 1.555932 3.163688
+v -8.011888 -1.555932 3.163688
+v -7.611156 1.549806 3.163688
+v -7.410525 4.642918 3.163688
+v -7.611156 -1.549806 3.163688
+v -7.410525 4.642918 3.459097
+v -7.611156 1.549806 3.459097
+v -7.611156 -1.549806 3.459097
+v -7.807565 4.661188 3.459097
+v -8.008110 1.555886 3.459097
+v -8.008110 -1.555886 3.459097
+v -7.807565 4.661188 3.859127
+v -8.008110 1.555886 3.859127
+v -8.008110 -1.555886 3.859127
+v -7.910680 4.664720 3.859127
+v -8.111100 1.557059 3.859127
+v -8.111100 -1.557059 3.859127
+v -8.476406 1.559598 3.322094
+v -8.276837 4.672403 3.322094
+v -8.276837 4.672403 3.616722
+v -8.476406 1.559598 3.616722
+v -8.476406 -1.559598 3.322094
+v -8.476406 -1.559598 3.616722
+v -8.276837 -4.672403 3.322094
+v -8.276837 -4.672403 3.616722
+v -8.443196 4.672980 3.469408
+v -8.602121 4.671495 3.322094
+v -8.602121 4.671495 3.616722
+v -8.634065 4.612189 3.322094
+v -8.665600 4.552664 3.322094
+v -8.696723 4.492924 3.322094
+v -8.879710 1.499504 3.322094
+v -8.879710 -1.499504 3.322094
+v -8.696723 -4.492924 3.322094
+v -8.665600 -4.552664 3.322094
+v -8.634065 -4.612189 3.322094
+v -8.602121 -4.671495 3.322094
+v -8.443196 -4.672980 3.469408
+v -8.602121 -4.671495 3.616722
+v -8.662066 4.559384 3.616722
+v -8.691490 4.503038 3.616722
+v -8.632276 4.615537 3.616722
+v -8.875320 1.502888 3.616722
+v -8.875320 -1.502888 3.616722
+v -8.691490 -4.503038 3.616722
+v -8.632276 -4.615537 3.616722
+v -8.662066 -4.559384 3.616722
+v -8.776218 4.335591 4.016752
+v -8.817375 4.251266 4.016752
+v -8.734256 4.419518 4.016752
+v -8.691490 4.503038 4.016752
+v -8.696723 4.492924 3.480500
+v -8.737681 4.412742 3.480500
+v -8.777900 4.332187 3.480500
+v -8.817375 4.251266 3.480500
+v -8.879710 1.499504 3.480500
+v -8.879710 -1.499504 3.480500
+v -8.696723 -4.492924 3.480500
+v -8.734256 -4.419518 4.016752
+v -8.691490 -4.503038 4.016752
+v -8.776218 -4.335591 4.016752
+v -8.817375 -4.251266 4.016752
+v -8.817375 -4.251266 3.480500
+v -8.777900 -4.332187 3.480500
+v -8.737681 -4.412742 3.480500
+v -8.875320 1.502888 4.016752
+v -8.875320 -1.502888 4.016752
+v -8.980843 1.418660 3.480500
+v -8.980843 -1.418660 3.480500
+v -8.980843 1.418660 4.016752
+v -8.980843 -1.418660 4.016752
+v -1.788728 -9.623919 2.913379
+v -1.751907 -9.630690 2.513349
+v -1.751907 -9.630690 2.913379
+v -1.825522 -9.617007 2.913379
+v -1.862290 -9.609956 2.913379
+v -1.862290 -9.609956 2.371657
+v -1.825780 -9.616959 2.371657
+v -1.789245 -9.623823 2.371657
+v -1.470207 -9.677699 2.513349
+v -1.752683 -9.630548 2.371657
+v -1.328872 -9.698116 2.513349
+v -1.611229 -9.655222 2.513349
+v -1.752683 -9.630548 2.213251
+v -1.611747 -9.655135 2.213251
+v -1.470467 -9.677659 2.213251
+v -1.328872 -9.698116 2.213251
+v -1.850077 -7.103867 2.213251
+v -2.050106 -5.795869 2.213251
+v -2.050106 -5.795869 2.513349
+v -1.850077 -7.103867 2.513349
+v -1.609588 -8.405032 2.213251
+v -1.609588 -8.405032 2.513349
+v -2.250233 -7.117920 2.513349
+v -2.443132 -5.851532 2.513349
+v -2.019757 -8.378011 2.513349
+v -2.443132 -5.851532 2.913379
+v -2.250233 -7.117920 2.913379
+v -2.019757 -8.378011 2.913379
+v -2.354182 -7.120656 2.913379
+v -2.545053 -5.866241 2.913379
+v -2.126529 -8.368920 2.913379
+v -2.545053 -5.866241 2.371657
+v -2.354182 -7.120656 2.371657
+v -2.126529 -8.368920 2.371657
+v -2.443849 -5.851635 2.371657
+v -2.250964 -7.117940 2.371657
+v -2.020508 -8.377950 2.371657
+v -2.443849 -5.851635 2.213251
+v -2.250964 -7.117940 2.213251
+v -2.020508 -8.377950 2.213251
+v -2.725036 -9.401784 3.071004
+v -2.687460 -9.412594 2.670974
+v -2.687460 -9.412594 3.071004
+v -2.762568 -9.390824 3.071004
+v -2.800056 -9.379715 3.071004
+v -2.800056 -9.379715 2.530063
+v -2.763016 -9.390693 2.530063
+v -2.725932 -9.401525 2.530063
+v -2.400310 -9.489882 2.670974
+v -2.688806 -9.412210 2.530063
+v -2.255888 -9.525248 2.670974
+v -2.544178 -9.452329 2.670974
+v -2.688806 -9.412210 2.371657
+v -2.545080 -9.452086 2.371657
+v -2.400763 -9.489768 2.371657
+v -2.255888 -9.525248 2.371657
+v -3.229831 -7.128221 2.530063
+v -3.400628 -5.994848 2.530063
+v -3.300080 -5.979209 2.530063
+v -3.126632 -7.128802 2.530063
+v -3.029596 -8.256764 2.530063
+v -2.922826 -8.273402 2.530063
+v -3.300080 -5.979209 2.371657
+v -3.126632 -7.128802 2.371657
+v -2.922826 -8.273402 2.371657
+v -2.906383 -5.919376 2.371657
+v -2.723313 -7.127261 2.371657
+v -2.506425 -8.329534 2.371657
+v -2.906383 -5.919376 2.670974
+v -2.723313 -7.127261 2.670974
+v -2.506425 -8.329534 2.670974
+v -3.125381 -7.128806 2.670974
+v -3.298861 -5.979021 2.670974
+v -2.921533 -8.273598 2.670974
+v -3.298861 -5.979021 3.071004
+v -3.125381 -7.128806 3.071004
+v -2.921533 -8.273598 3.071004
+v -3.229831 -7.128221 3.071004
+v -3.400628 -5.994848 3.071004
+v -3.029596 -8.256764 3.071004
+v -3.679954 -9.070683 3.228628
+v -3.641617 -9.086143 2.828598
+v -3.641617 -9.086143 3.228628
+v -3.718225 -9.055063 3.228628
+v -3.756429 -9.039281 3.228628
+v -3.756429 -9.039281 2.688469
+v -3.718869 -9.054799 2.688469
+v -3.681245 -9.070160 2.688469
+v -3.349081 -9.197990 2.828598
+v -3.643557 -9.085365 2.688469
+v -3.201509 -9.250389 2.828598
+v -3.495797 -9.143236 2.828598
+v -3.643557 -9.085365 2.530063
+v -3.497098 -9.142738 2.530063
+v -3.349736 -9.197752 2.530063
+v -3.201509 -9.250389 2.530063
+v -3.600757 -7.122765 2.530063
+v -3.761365 -6.052286 2.530063
+v -3.761365 -6.052286 2.828598
+v -3.600757 -7.122765 2.828598
+v -3.414101 -8.189011 2.530063
+v -3.414101 -8.189011 2.828598
+v -4.004809 -7.110663 2.828598
+v -4.153100 -6.117313 2.828598
+v -3.834286 -8.100438 2.828598
+v -4.153100 -6.117313 3.228628
+v -4.004809 -7.110663 3.228628
+v -3.834286 -8.100438 3.228628
+v -4.109780 -7.106438 3.228628
+v -4.254654 -6.134681 3.228628
+v -3.943678 -8.074793 3.228628
+v -4.254654 -6.134681 2.688469
+v -4.109780 -7.106438 2.688469
+v -3.943678 -8.074793 2.688469
+v -4.154818 -6.117605 2.688469
+v -4.006584 -7.110595 2.688469
+v -3.836135 -8.100015 2.688469
+v -4.154818 -6.117605 2.530063
+v -4.006584 -7.110595 2.530063
+v -3.836135 -8.100015 2.530063
+v -4.653486 -8.611877 3.386253
+v -4.614381 -8.632894 2.986223
+v -4.614381 -8.632894 3.386253
+v -4.692494 -8.590685 3.386253
+v -4.731407 -8.569315 3.386253
+v -4.731407 -8.569315 2.846875
+v -4.693342 -8.590221 2.846875
+v -4.655184 -8.610960 2.846875
+v -4.316560 -8.785595 2.986223
+v -4.616935 -8.631528 2.846875
+v -4.165735 -8.858105 2.986223
+v -4.466123 -8.710517 2.986223
+v -4.616935 -8.631528 2.688469
+v -4.467841 -8.709636 2.688469
+v -4.317427 -8.785169 2.688469
+v -4.165735 -8.858105 2.688469
+v -4.994198 -7.052335 2.846875
+v -5.106420 -6.290744 2.846875
+v -5.007403 -6.271485 2.846875
+v -4.890992 -7.060400 2.846875
+v -4.869182 -7.811930 2.846875
+v -4.760823 -7.847160 2.846875
+v -5.007403 -6.271485 2.688469
+v -4.890992 -7.060400 2.688469
+v -4.760823 -7.847160 2.688469
+v -4.614552 -6.198167 2.688469
+v -4.482573 -7.087727 2.688469
+v -4.332947 -7.974489 2.688469
+v -4.614552 -6.198167 2.986223
+v -4.482573 -7.087727 2.986223
+v -4.332947 -7.974489 2.986223
+v -4.888688 -7.060574 2.986223
+v -5.005191 -6.271059 2.986223
+v -4.758404 -7.847932 2.986223
+v -5.005191 -6.271059 3.386253
+v -4.888688 -7.060574 3.386253
+v -4.758404 -7.847932 3.386253
+v -4.994198 -7.052335 3.386253
+v -5.106420 -6.290744 3.386253
+v -4.869182 -7.811930 3.386253
+v -5.645636 -7.996634 3.543878
+v -5.605749 -8.024646 3.143848
+v -5.605749 -8.024646 3.543878
+v -5.685383 -7.968424 3.543878
+v -5.724990 -7.940016 3.543878
+v -5.724990 -7.940016 3.005282
+v -5.686440 -7.967670 3.005282
+v -5.647757 -7.995137 3.005282
+v -5.302820 -8.227968 3.143848
+v -5.608941 -8.022415 3.005282
+v -5.148566 -8.325360 3.143848
+v -5.455232 -8.127719 3.143848
+v -5.608941 -8.022415 2.846875
+v -5.457387 -8.126271 2.846875
+v -5.303911 -8.227265 2.846875
+v -5.148566 -8.325360 2.846875
+v -5.883138 -6.963104 3.005282
+v -5.954428 -6.473445 3.005282
+v -5.856477 -6.450299 3.005282
+v -5.779942 -6.975267 3.005282
+v -5.806655 -7.451980 3.005282
+v -5.697426 -7.499329 3.005282
+v -5.856477 -6.450299 2.846875
+v -5.779942 -6.975267 2.846875
+v -5.697426 -7.499329 2.846875
+v -5.464995 -6.363649 2.846875
+v -5.368912 -7.019045 2.846875
+v -5.263429 -7.672994 2.846875
+v -5.464995 -6.363649 3.143848
+v -5.368912 -7.019045 3.143848
+v -5.263429 -7.672994 3.143848
+v -5.777101 -6.975595 3.143848
+v -5.853779 -6.449670 3.143848
+v -5.694421 -7.500610 3.143848
+v -5.853779 -6.449670 3.543878
+v -5.777101 -6.975595 3.543878
+v -5.694421 -7.500610 3.543878
+v -5.883138 -6.963104 3.543878
+v -5.954428 -6.473445 3.543878
+v -5.806655 -7.451980 3.543878
+v -6.656422 -7.177145 3.701503
+v -6.615724 -7.214677 3.301473
+v -6.615724 -7.214677 3.701503
+v -6.696908 -7.139383 3.701503
+v -6.737179 -7.101393 3.701503
+v -6.737179 -7.101393 3.163688
+v -6.698178 -7.138191 3.163688
+v -6.658976 -7.174776 3.163688
+v -6.308030 -7.485194 3.301473
+v -6.619574 -7.211144 3.163688
+v -6.150004 -7.615564 3.301473
+v -6.463292 -7.351545 3.301473
+v -6.619574 -7.211144 3.005282
+v -6.465908 -7.349245 3.005282
+v -6.309361 -7.484071 3.005282
+v -6.150004 -7.615564 3.005282
+v -6.775491 -6.843233 3.163688
+v -6.794115 -6.714076 3.163688
+v -6.698159 -6.680703 3.163688
+v -6.672631 -6.857615 3.163688
+v -6.756512 -6.972340 3.163688
+v -6.646436 -7.034430 3.163688
+v -6.698159 -6.680703 3.005282
+v -6.672631 -6.857615 3.005282
+v -6.646436 -7.034430 3.005282
+v -6.310455 -6.564223 3.005282
+v -6.259615 -6.915070 3.005282
+v -6.206131 -7.265523 3.005282
+v -6.310455 -6.564223 3.301473
+v -6.259615 -6.915070 3.301473
+v -6.206131 -7.265523 3.301473
+v -6.695008 -6.679646 3.301473
+v -6.669259 -6.858090 3.301473
+v -6.642830 -7.036435 3.301473
+v -6.695008 -6.679646 3.701503
+v -6.669259 -6.858090 3.701503
+v -6.642830 -7.036435 3.701503
+v -6.775491 -6.843233 3.701503
+v -6.794115 -6.714076 3.701503
+v -6.756512 -6.972340 3.701503
+v 7.466226 -5.796052 0.491986
+v 7.304160 -4.790572 0.491986
+v 7.304160 -4.790572 0.789695
+v 7.466226 -5.796052 0.789695
+v 7.658993 -6.796101 0.491986
+v 7.658993 -6.796101 0.789695
+v 7.882281 -7.789780 0.491986
+v 7.882281 -7.789780 0.789695
+v 6.908943 -4.834951 0.789695
+v 6.806755 -4.846353 1.189984
+v 6.908943 -4.834951 1.189984
+v 6.806755 -4.846353 0.650392
+v 6.911772 -4.834635 0.650392
+v 6.911772 -4.834635 0.491986
+v 7.077960 -5.866758 0.491986
+v 7.276117 -6.893222 0.491986
+v 7.506052 -7.913038 0.491986
+v 7.405344 -7.945903 1.189984
+v 7.503339 -7.913924 0.789695
+v 7.503339 -7.913924 1.189984
+v 7.405344 -7.945903 0.650392
+v 7.506052 -7.913038 0.650392
+v 7.075161 -5.867266 0.789695
+v 7.273356 -6.893920 0.789695
+v 7.075161 -5.867266 1.189984
+v 7.273356 -6.893920 1.189984
+v 6.974040 -5.885590 1.189984
+v 7.173635 -6.919108 1.189984
+v 6.974040 -5.885590 0.650392
+v 7.173635 -6.919108 0.650392
+v 7.077960 -5.866758 0.650392
+v 7.276117 -6.893222 0.650392
+v 6.619751 -5.949487 0.650392
+v 6.448745 -4.886053 0.650392
+v 6.448745 -4.886053 0.950788
+v 6.619751 -5.949487 0.950788
+v 6.824229 -7.006994 0.650392
+v 6.824229 -7.006994 0.950788
+v 7.061976 -8.057523 0.650392
+v 7.061976 -8.057523 0.950788
+v 6.053395 -4.929433 0.950788
+v 5.951170 -4.940568 1.351077
+v 6.053395 -4.929433 1.351077
+v 5.951170 -4.940568 0.808799
+v 6.050888 -4.929707 0.808799
+v 6.050888 -4.929707 0.650392
+v 6.225988 -6.019918 0.650392
+v 6.435859 -7.103973 0.650392
+v 6.680284 -8.180763 0.650392
+v 6.584598 -8.211511 1.351077
+v 6.682689 -8.179990 0.950788
+v 6.682689 -8.179990 1.351077
+v 6.584598 -8.211511 0.808799
+v 6.680284 -8.180763 0.808799
+v 6.228469 -6.019476 0.950788
+v 6.438306 -7.103364 0.950788
+v 6.228469 -6.019476 1.351077
+v 6.438306 -7.103364 1.351077
+v 6.127290 -6.037470 1.351077
+v 6.338505 -7.128159 1.351077
+v 6.127290 -6.037470 0.808799
+v 6.338505 -7.128159 0.808799
+v 6.225988 -6.019918 0.808799
+v 6.435859 -7.103973 0.808799
+v 5.772787 -6.100163 0.808799
+v 5.593032 -4.979304 0.808799
+v 5.593032 -4.979304 1.111880
+v 5.772787 -6.100163 1.111880
+v 5.988808 -7.214600 0.808799
+v 5.988808 -7.214600 1.111880
+v 6.240867 -8.321443 0.808799
+v 6.240867 -8.321443 1.111880
+v 5.197532 -5.021563 1.111880
+v 5.095268 -5.032398 1.512169
+v 5.197532 -5.021563 1.512169
+v 5.095268 -5.032398 0.967205
+v 5.189687 -5.022396 0.967205
+v 5.189687 -5.022396 0.808799
+v 5.373486 -6.170077 0.808799
+v 5.594869 -7.311104 0.808799
+v 5.853598 -8.444247 0.808799
+v 5.762916 -8.472831 1.512169
+v 5.861132 -8.441870 1.111880
+v 5.861132 -8.441870 1.512169
+v 5.762916 -8.472831 0.967205
+v 5.853598 -8.444247 0.967205
+v 5.381253 -6.168725 1.111880
+v 5.602532 -7.309237 1.111880
+v 5.381253 -6.168725 1.512169
+v 5.602532 -7.309237 1.512169
+v 5.280005 -6.186331 1.512169
+v 5.502635 -7.333557 1.512169
+v 5.280005 -6.186331 0.967205
+v 5.502635 -7.333557 0.967205
+v 5.373486 -6.170077 0.967205
+v 5.594869 -7.311104 0.967205
+v 4.925251 -6.247601 0.967205
+v 4.736986 -5.070046 0.967205
+v 4.736986 -5.070046 1.272973
+v 4.925251 -6.247601 1.272973
+v 5.152577 -7.418242 0.967205
+v 5.152577 -7.418242 1.272973
+v 5.418714 -8.580674 0.967205
+v 5.418714 -8.580674 1.272973
+v 4.341318 -5.111035 1.272973
+v 4.239008 -5.121528 1.673262
+v 4.341318 -5.111035 1.673262
+v 4.239008 -5.121528 1.126658
+v 4.328129 -5.112390 1.126658
+v 4.328129 -5.112390 0.967205
+v 4.520353 -6.316672 0.967205
+v 4.752966 -7.513810 0.967205
+v 5.025706 -8.702448 0.967205
+v 4.940005 -8.728792 1.673262
+v 5.038387 -8.698543 1.272973
+v 5.038387 -8.698543 1.673262
+v 4.940005 -8.728792 1.126658
+v 5.025706 -8.702448 1.126658
+v 4.533415 -6.314459 1.272973
+v 4.765860 -7.510746 1.272973
+v 4.533415 -6.314459 1.673262
+v 4.765860 -7.510746 1.673262
+v 4.432085 -6.331601 1.673262
+v 4.665839 -7.534477 1.673262
+v 4.432085 -6.331601 1.126658
+v 4.665839 -7.534477 1.126658
+v 4.520353 -6.316672 1.126658
+v 4.752966 -7.513810 1.126658
+v 4.077025 -6.391145 1.126658
+v 3.880561 -5.157937 1.126658
+v 3.880561 -5.157937 1.434066
+v 4.077025 -6.391145 1.434066
+v 4.315320 -7.616959 1.126658
+v 4.315320 -7.616959 1.434066
+v 4.595170 -8.833957 1.126658
+v 4.595170 -8.833957 1.434066
+v 3.484702 -5.197469 1.434066
+v 3.382341 -5.207570 1.834355
+v 3.484702 -5.197469 1.834355
+v 3.382341 -5.207570 1.284017
+v 3.460463 -5.199865 1.284017
+v 3.460463 -5.199865 1.126658
+v 3.660802 -6.459837 1.126658
+v 3.904307 -7.712182 1.126658
+v 4.190693 -8.955422 1.126658
+v 4.115430 -8.977775 1.834355
+v 4.214041 -8.948472 1.434066
+v 4.214041 -8.948472 1.834355
+v 4.115430 -8.977775 1.284017
+v 4.190693 -8.955422 1.284017
+v 3.684820 -6.455908 1.434066
+v 3.928029 -7.706734 1.434066
+v 3.583387 -6.472470 1.284017
+v 3.660802 -6.459837 1.284017
+v 3.904307 -7.712182 1.284017
+v 3.827847 -7.729701 1.284017
+v 3.684820 -6.455908 1.834355
+v 3.928029 -7.706734 1.834355
+v 3.583387 -6.472470 1.834355
+v 3.827847 -7.729701 1.834355
+v 3.227946 -6.529842 1.284017
+v 3.023706 -5.242547 1.284017
+v 3.023706 -5.242547 1.595158
+v 3.227946 -6.529842 1.595158
+v 3.476716 -7.809278 1.284017
+v 3.476716 -7.809278 1.595158
+v 3.769716 -9.079315 1.284017
+v 3.769716 -9.079315 1.595158
+v 2.627625 -5.280387 1.595158
+v 2.525204 -5.290030 1.995447
+v 2.627625 -5.280387 1.995447
+v 2.525204 -5.290030 1.442423
+v 2.603730 -5.282642 1.442423
+v 2.603730 -5.282642 1.284017
+v 2.811571 -6.595599 1.284017
+v 3.065218 -7.900480 1.284017
+v 3.364361 -9.195688 1.284017
+v 3.288497 -9.217100 1.995447
+v 3.387440 -9.189150 1.595158
+v 3.387440 -9.189150 1.995447
+v 3.288497 -9.217100 1.442423
+v 3.364361 -9.195688 1.442423
+v 2.835265 -6.591903 1.595158
+v 3.088640 -7.895355 1.595158
+v 2.733699 -6.607704 1.442423
+v 2.811571 -6.595599 1.442423
+v 2.988235 -7.917263 1.442423
+v 3.065218 -7.900480 1.442423
+v 2.835265 -6.591903 1.995447
+v 3.088640 -7.895355 1.995447
+v 2.733699 -6.607704 1.995447
+v 2.988235 -7.917263 1.995447
+v 2.377747 -6.662168 1.442423
+v 2.166349 -5.323329 1.442423
+v 2.166349 -5.323329 1.756251
+v 2.377747 -6.662168 1.756251
+v 2.636227 -7.992720 1.442423
+v 2.636227 -7.992720 1.756251
+v 2.941467 -9.313330 1.442423
+v 2.941467 -9.313330 1.756251
+v 1.770007 -5.359170 1.756251
+v 1.667515 -5.368269 2.156540
+v 1.770007 -5.359170 2.156540
+v 1.667515 -5.368269 1.600830
+v 1.740747 -5.361775 1.600830
+v 1.740747 -5.361775 1.442423
+v 1.955359 -6.724679 1.442423
+v 2.218222 -8.079104 1.442423
+v 2.529003 -9.423344 1.442423
+v 2.457913 -9.441731 2.156540
+v 2.557397 -9.415949 1.756251
+v 2.557397 -9.415949 2.156540
+v 2.457913 -9.441731 1.600830
+v 2.529003 -9.423344 1.600830
+v 1.984408 -6.720464 1.756251
+v 2.246981 -8.073291 1.756251
+v 1.882650 -6.735171 1.600830
+v 1.955359 -6.724679 1.600830
+v 2.146227 -8.093563 1.600830
+v 2.218222 -8.079104 1.600830
+v 1.984408 -6.720464 2.156540
+v 2.246981 -8.073291 2.156540
+v 1.882650 -6.735171 2.156540
+v 2.146227 -8.093563 2.156540
+v 1.525940 -6.785282 1.600830
+v 1.308401 -5.399562 1.600830
+v 1.308401 -5.399562 1.917344
+v 1.525940 -6.785282 1.917344
+v 1.792804 -8.162354 1.600830
+v 1.792804 -8.162354 1.917344
+v 2.108653 -9.529021 1.600830
+v 2.108653 -9.529021 1.917344
+v 0.911746 -5.432992 1.917344
+v 0.809169 -5.441430 2.317633
+v 0.911746 -5.432992 2.317633
+v 0.809169 -5.441430 1.759236
+v 0.877108 -5.435851 1.759236
+v 0.877108 -5.435851 1.600830
+v 1.097064 -6.841787 1.600830
+v 1.367238 -8.238942 1.600830
+v 1.687283 -9.625524 1.600830
+v 1.620645 -9.639599 2.317633
+v 1.721226 -9.618210 1.917344
+v 1.721226 -9.618210 2.317633
+v 1.620645 -9.639599 1.759236
+v 1.687283 -9.625524 1.759236
+v 1.131533 -6.837433 1.917344
+v 1.401475 -8.233103 1.917344
+v 1.029442 -6.850215 1.759236
+v 1.097064 -6.841787 1.759236
+v 1.300050 -8.250205 1.759236
+v 1.367238 -8.238942 1.759236
+v 1.131533 -6.837433 2.317633
+v 1.401475 -8.233103 2.317633
+v 1.029442 -6.850215 2.317633
+v 1.300050 -8.250205 2.317633
+v 0.052698 -5.500710 2.078436
+v 0.012743 -5.503684 2.478725
+v 0.052698 -5.500710 2.478725
+v 0.449737 -5.470269 1.759236
+v 0.449737 -5.470269 2.078436
+v 0.012704 -5.503689 1.759236
+v 0.233730 -6.929726 1.759236
+v 0.671250 -6.891774 1.759236
+v 0.505347 -8.346997 1.759236
+v 0.943547 -8.304429 1.759236
+v 0.827218 -9.753706 1.759236
+v 1.266279 -9.706423 1.759236
+v 0.671250 -6.891774 2.078436
+v 0.943547 -8.304429 2.078436
+v 1.266279 -9.706423 2.078436
+v 0.273984 -6.927355 2.078436
+v 0.545916 -8.345219 2.078436
+v 0.868151 -9.752503 2.078436
+v 0.273984 -6.927355 2.478725
+v 0.545916 -8.345219 2.478725
+v 0.868151 -9.752503 2.478725
+v 0.233810 -6.929711 2.478725
+v 0.505431 -8.346979 2.478725
+v 0.827261 -9.753695 2.478725
+v 6.971071 0.952355 0.491986
+v 7.080076 2.853932 0.491986
+v 7.080076 2.853932 0.789695
+v 6.971071 0.952355 0.789695
+v 6.971071 -0.952344 0.491986
+v 6.971071 -0.952344 0.789695
+v 7.080075 -2.853920 0.491986
+v 7.080075 -2.853920 0.789695
+v 6.686712 2.918779 0.789695
+v 6.585017 2.935554 1.189984
+v 6.686712 2.918779 1.189984
+v 6.585017 2.935554 0.650392
+v 6.689527 2.918315 0.650392
+v 6.750343 2.908283 0.724652
+v 6.689527 2.918315 0.491986
+v 6.576880 0.973861 0.491986
+v 6.576880 -0.973852 0.491986
+v 6.689526 -2.918305 0.491986
+v 6.585016 -2.935544 1.189984
+v 6.686711 -2.918769 0.789695
+v 6.686711 -2.918769 1.189984
+v 6.585016 -2.935544 0.650392
+v 6.689526 -2.918305 0.650392
+v 6.750342 -2.908273 0.724652
+v 6.574039 0.974017 0.789695
+v 6.574039 -0.974007 0.789695
+v 6.574039 0.974017 1.189984
+v 6.574039 -0.974007 1.189984
+v 6.471391 0.979620 1.189984
+v 6.471391 -0.979611 1.189984
+v 6.471391 0.979620 0.650392
+v 6.471391 -0.979611 0.650392
+v 6.576880 0.973861 0.650392
+v 6.576880 -0.973852 0.650392
+v 6.111807 0.999239 0.650392
+v 6.228782 2.994284 0.650392
+v 6.228782 2.994284 0.950788
+v 6.111807 0.999239 0.950788
+v 6.111807 -0.999232 0.650392
+v 6.111807 -0.999232 0.950788
+v 6.228781 -2.994276 0.650392
+v 6.228781 -2.994276 0.950788
+v 5.835462 3.058957 0.950788
+v 5.733772 3.075629 1.351077
+v 5.835462 3.058957 1.351077
+v 5.733772 3.075629 0.808799
+v 5.832968 3.059366 0.808799
+v 5.898937 3.048539 0.883954
+v 5.832968 3.059366 0.650392
+v 5.712263 1.020981 0.650392
+v 5.712263 -1.020975 0.650392
+v 5.832967 -3.059360 0.650392
+v 5.733772 -3.075623 1.351077
+v 5.835461 -3.058950 0.950788
+v 5.835461 -3.058950 1.351077
+v 5.733772 -3.075623 0.808799
+v 5.832967 -3.059360 0.808799
+v 5.898937 -3.048532 0.883954
+v 5.714780 1.020844 0.950788
+v 5.714780 -1.020838 0.950788
+v 5.714780 1.020844 1.351077
+v 5.714780 -1.020838 1.351077
+v 5.612133 1.026414 1.351077
+v 5.612133 -1.026408 1.351077
+v 5.612133 1.026414 0.808799
+v 5.612133 -1.026408 0.808799
+v 5.712263 1.020981 0.808799
+v 5.712263 -1.020975 0.808799
+v 5.252548 1.045852 0.808799
+v 5.377538 3.133812 0.808799
+v 5.377538 3.133812 1.111880
+v 5.252548 1.045852 1.111880
+v 5.252548 -1.045846 0.808799
+v 5.252548 -1.045846 1.111880
+v 5.377538 -3.133807 0.808799
+v 5.377538 -3.133807 1.111880
+v 4.984186 3.197546 1.111880
+v 4.882483 3.213918 1.512169
+v 4.984186 3.197546 1.512169
+v 4.882483 3.213918 0.967205
+v 4.976384 3.198804 0.967205
+v 5.047523 3.187327 1.043255
+v 4.976384 3.198804 0.808799
+v 4.847643 1.067564 0.808799
+v 4.847643 -1.067560 0.808799
+v 4.976384 -3.198800 0.808799
+v 4.882483 -3.213914 1.512169
+v 4.984186 -3.197542 1.111880
+v 4.984186 -3.197542 1.512169
+v 4.882483 -3.213914 0.967205
+v 4.976384 -3.198800 0.967205
+v 5.047523 -3.187322 1.043255
+v 4.855517 1.067144 1.111880
+v 4.855517 -1.067140 1.111880
+v 4.855517 1.067144 1.512169
+v 4.855517 -1.067140 1.512169
+v 4.752869 1.072614 1.512169
+v 4.752869 -1.072610 1.512169
+v 4.752869 1.072614 0.967205
+v 4.752869 -1.072610 0.967205
+v 4.847643 1.067564 0.967205
+v 4.847643 -1.067560 0.967205
+v 4.393278 1.091639 0.967205
+v 4.526181 3.270866 0.967205
+v 4.526181 3.270866 1.272973
+v 4.393278 1.091639 1.272973
+v 4.393278 -1.091636 0.967205
+v 4.393278 -1.091636 1.272973
+v 4.526181 -3.270862 0.967205
+v 4.526181 -3.270862 1.272973
+v 4.132718 3.332895 1.272973
+v 4.030980 3.348768 1.673262
+v 4.132718 3.332895 1.673262
+v 4.030980 3.348768 1.126658
+v 4.119603 3.334945 1.126658
+v 4.195930 3.322997 1.202557
+v 4.119603 3.334945 0.967205
+v 3.983001 1.113048 0.967205
+v 3.983001 -1.113045 0.967205
+v 4.119603 -3.334942 0.967205
+v 4.030980 -3.348764 1.673262
+v 4.132718 -3.332892 1.272973
+v 4.132718 -3.332892 1.673262
+v 4.030980 -3.348764 1.126658
+v 4.119603 -3.334942 1.126658
+v 4.195929 -3.322994 1.202557
+v 3.996235 1.112363 1.272973
+v 3.996234 -1.112360 1.272973
+v 3.996235 1.112363 1.673262
+v 3.996234 -1.112360 1.673262
+v 3.893582 1.117666 1.673262
+v 3.893582 -1.117663 1.673262
+v 3.893582 1.117666 1.126658
+v 3.893582 -1.117663 1.126658
+v 3.983001 1.113048 1.126658
+v 3.983001 -1.113045 1.126658
+v 3.533974 1.136042 1.126658
+v 3.674534 3.403770 1.126658
+v 3.674534 3.403770 1.434066
+v 3.533974 1.136042 1.434066
+v 3.533974 -1.136039 1.126658
+v 3.533974 -1.136039 1.434066
+v 3.674534 -3.403767 1.126658
+v 3.674534 -3.403767 1.434066
+v 3.280873 3.463292 1.434066
+v 3.179077 3.478453 1.834355
+v 3.280873 3.463292 1.834355
+v 3.179077 3.478452 1.284017
+v 3.256768 3.466891 1.284017
+v 3.343968 3.453846 1.362557
+v 3.256768 3.466891 1.126658
+v 3.112599 1.157130 1.126658
+v 3.112599 -1.157127 1.126658
+v 3.256768 -3.466888 1.126658
+v 3.179077 -3.478450 1.834355
+v 3.280873 -3.463289 1.434066
+v 3.280873 -3.463289 1.834355
+v 3.179077 -3.478450 1.284017
+v 3.256768 -3.466888 1.284017
+v 3.343968 -3.453843 1.362557
+v 3.136909 1.155927 1.434066
+v 3.136909 -1.155924 1.434066
+v 3.034250 1.160992 1.284017
+v 3.112599 1.157130 1.284017
+v 3.112599 -1.157127 1.284017
+v 3.034250 -1.160989 1.284017
+v 3.136909 1.155927 1.834355
+v 3.136909 -1.155924 1.834355
+v 3.034250 1.160992 1.834355
+v 3.034250 -1.160989 1.834355
+v 2.674617 1.178463 1.284017
+v 2.822406 3.530749 1.284017
+v 2.822406 3.530749 1.595158
+v 2.674617 1.178463 1.595158
+v 2.674617 -1.178460 1.284017
+v 2.674617 -1.178460 1.595158
+v 2.822406 -3.530746 1.284017
+v 2.822406 -3.530746 1.595158
+v 2.428451 3.586883 1.595158
+v 2.326572 3.601096 1.995447
+v 2.428451 3.586883 1.995447
+v 2.326572 3.601096 1.442423
+v 2.404683 3.590210 1.442423
+v 2.491436 3.578031 1.521160
+v 2.404683 3.590210 1.284017
+v 2.253567 1.198328 1.284017
+v 2.253567 -1.198324 1.284017
+v 2.404683 -3.590207 1.284017
+v 2.326571 -3.601093 1.995447
+v 2.428451 -3.586880 1.595158
+v 2.428451 -3.586880 1.995447
+v 2.326571 -3.601093 1.442423
+v 2.404683 -3.590207 1.442423
+v 2.491436 -3.578028 1.521160
+v 2.277519 1.197216 1.595158
+v 2.277519 -1.197213 1.595158
+v 2.174851 1.201964 1.442423
+v 2.253567 1.198328 1.442423
+v 2.174851 -1.201961 1.442423
+v 2.253567 -1.198324 1.442423
+v 2.277519 1.197216 1.995447
+v 2.277519 -1.197213 1.995447
+v 2.174851 1.201964 1.995447
+v 2.174851 -1.201961 1.995447
+v 1.815182 1.218244 1.442423
+v 1.969580 3.649833 1.442423
+v 1.969580 3.649833 1.756251
+v 1.815182 1.218244 1.756251
+v 1.815182 -1.218241 1.442423
+v 1.815182 -1.218241 1.756251
+v 1.969580 -3.649829 1.442423
+v 1.969579 -3.649829 1.756251
+v 1.575223 3.701574 1.756251
+v 1.473230 3.714568 2.156540
+v 1.575223 3.701574 2.156540
+v 1.473230 3.714568 1.600830
+v 1.546106 3.705300 1.600830
+v 1.638100 3.693481 1.680462
+v 1.546106 3.705300 1.442423
+v 1.388725 1.236772 1.442423
+v 1.388725 -1.236768 1.442423
+v 1.546106 -3.705296 1.442423
+v 1.473230 -3.714564 2.156540
+v 1.575222 -3.701570 1.756251
+v 1.575222 -3.701570 2.156540
+v 1.473230 -3.714564 1.600830
+v 1.546106 -3.705296 1.600830
+v 1.638099 -3.693477 1.680462
+v 1.418040 1.235527 1.756251
+v 1.418040 -1.235523 1.756251
+v 1.315359 1.239868 1.600830
+v 1.388725 1.236772 1.600830
+v 1.315359 -1.239863 1.600830
+v 1.388725 -1.236768 1.600830
+v 1.418040 1.235527 2.156540
+v 1.418040 -1.235523 2.156540
+v 1.315359 1.239868 2.156540
+v 1.315359 -1.239863 2.156540
+v 0.955644 1.254623 1.600830
+v 1.115813 3.758746 1.600830
+v 1.115813 3.758746 1.917344
+v 0.955644 1.254623 1.917344
+v 0.955643 -1.254618 1.600830
+v 0.955643 -1.254618 1.917344
+v 1.115813 -3.758741 1.600830
+v 1.115813 -3.758741 1.917344
+v 0.720927 3.804898 1.917344
+v 0.618787 3.816345 2.317633
+v 0.720927 3.804898 2.317633
+v 0.618787 3.816345 1.759236
+v 0.686437 3.808787 1.759236
+v 0.783692 3.797760 1.839764
+v 0.686437 3.808787 1.600830
+v 0.523762 1.271334 1.600830
+v 0.523762 -1.271328 1.600830
+v 0.686436 -3.808781 1.600830
+v 0.618786 -3.816339 2.317633
+v 0.720926 -3.804892 1.917344
+v 0.720926 -3.804892 2.317633
+v 0.618786 -3.816339 1.759236
+v 0.686436 -3.808781 1.759236
+v 0.783691 -3.797755 1.839764
+v 0.558442 1.270036 1.917344
+v 0.558442 -1.270029 1.917344
+v 0.455745 1.273858 1.759236
+v 0.523762 1.271334 1.759236
+v 0.455745 -1.273852 1.759236
+v 0.523762 -1.271328 1.759236
+v 0.558442 1.270036 2.317633
+v 0.558442 -1.270029 2.317633
+v 0.455745 1.273858 2.317633
+v 0.455745 -1.273852 2.317633
+v -0.134750 3.893829 2.078436
+v -0.174602 3.897557 2.478725
+v -0.134750 3.893829 2.478725
+v -0.174623 3.897559 1.759236
+v -0.030216 3.883865 1.999065
+v 0.260816 3.854749 1.759236
+v 0.260816 3.854749 2.078436
+v -0.341358 1.300972 1.759236
+v 0.095967 1.286681 1.759236
+v -0.341358 -1.300963 1.759236
+v 0.095967 -1.286673 1.759236
+v 0.260816 -3.854742 1.759236
+v -0.174624 -3.897550 1.759236
+v 0.095967 1.286681 2.078436
+v 0.095967 -1.286673 2.078436
+v 0.260816 -3.854742 2.078436
+v -0.301310 1.299727 2.078436
+v -0.301310 -1.299718 2.078436
+v -0.134751 -3.893821 2.078436
+v -0.301310 1.299727 2.478725
+v -0.301310 -1.299718 2.478725
+v -0.134751 -3.893821 2.478725
+v -0.341317 1.300971 2.478725
+v -0.341317 -1.300962 2.478725
+v -0.174603 -3.897548 2.478725
+v -0.030216 -3.883857 1.999065
+f 19 20 21
+f 19 22 20
+f 22 23 20
+f 22 24 23
+f 24 25 23
+f 24 26 25
+f 27 19 21
+f 28 19 27
+f 29 28 27
+f 30 29 27
+f 31 32 29
+f 31 29 30
+f 28 33 19
+f 19 33 22
+f 22 34 24
+f 33 34 22
+f 24 35 26
+f 34 35 24
+f 26 36 25
+f 26 35 36
+f 35 37 36
+f 37 38 36
+f 39 40 37
+f 37 40 38
+f 21 20 27
+f 27 20 41
+f 41 23 42
+f 20 23 41
+f 42 25 36
+f 23 25 42
+f 30 43 31
+f 31 43 44
+f 44 45 46
+f 43 45 44
+f 46 38 40
+f 45 38 46
+f 27 43 30
+f 27 41 43
+f 41 45 43
+f 41 42 45
+f 42 38 45
+f 42 36 38
+f 47 28 29
+f 33 28 47
+f 48 33 47
+f 34 33 48
+f 37 34 48
+f 35 34 37
+f 47 29 32
+f 47 32 49
+f 48 49 50
+f 48 47 49
+f 37 50 39
+f 37 48 50
+f 44 32 31
+f 49 32 44
+f 46 49 44
+f 50 49 46
+f 40 50 46
+f 39 50 40
+f 51 52 53
+f 54 52 51
+f 55 54 51
+f 56 55 51
+f 57 58 55
+f 57 55 56
+f 56 59 57
+f 57 59 60
+f 60 61 62
+f 59 61 60
+f 62 63 64
+f 61 63 62
+f 51 59 56
+f 51 65 59
+f 65 61 59
+f 65 66 61
+f 66 63 61
+f 66 67 63
+f 53 68 51
+f 51 68 65
+f 65 69 66
+f 68 69 65
+f 66 70 67
+f 69 70 66
+f 52 68 53
+f 52 71 68
+f 71 69 68
+f 71 72 69
+f 72 70 69
+f 72 73 70
+f 54 74 52
+f 52 74 71
+f 71 75 72
+f 74 75 71
+f 72 76 73
+f 75 76 72
+f 77 54 55
+f 74 54 77
+f 78 74 77
+f 75 74 78
+f 79 75 78
+f 76 75 79
+f 77 55 58
+f 77 58 80
+f 78 80 81
+f 78 77 80
+f 79 81 82
+f 79 78 81
+f 60 58 57
+f 80 58 60
+f 62 80 60
+f 81 80 62
+f 64 81 62
+f 82 81 64
+f 73 67 70
+f 73 76 67
+f 76 79 67
+f 79 63 67
+f 82 64 79
+f 79 64 63
+f 83 84 85
+f 86 84 83
+f 87 86 83
+f 88 87 83
+f 89 90 87
+f 89 87 88
+f 91 86 87
+f 92 86 91
+f 93 92 91
+f 94 92 93
+f 95 94 93
+f 96 94 95
+f 91 87 90
+f 91 90 97
+f 93 97 98
+f 93 91 97
+f 95 98 99
+f 95 93 98
+f 100 90 89
+f 97 90 100
+f 101 97 100
+f 98 97 101
+f 102 98 101
+f 99 98 102
+f 88 103 89
+f 89 103 100
+f 100 104 101
+f 103 104 100
+f 101 105 102
+f 104 105 101
+f 83 103 88
+f 83 106 103
+f 106 104 103
+f 106 107 104
+f 107 105 104
+f 107 108 105
+f 85 109 83
+f 83 109 106
+f 106 110 107
+f 109 110 106
+f 107 111 108
+f 110 111 107
+f 84 109 85
+f 84 112 109
+f 112 110 109
+f 112 113 110
+f 113 111 110
+f 113 114 111
+f 86 92 84
+f 84 92 112
+f 112 94 113
+f 92 94 112
+f 113 96 114
+f 94 96 113
+f 114 108 111
+f 114 96 108
+f 96 95 108
+f 95 105 108
+f 99 102 95
+f 95 102 105
+f 115 116 117
+f 118 116 115
+f 119 115 120
+f 119 118 115
+f 121 118 119
+f 122 123 121
+f 122 121 119
+f 124 123 122
+f 125 124 122
+f 126 125 122
+f 127 126 122
+f 128 127 122
+f 129 128 122
+f 130 128 129
+f 131 132 130
+f 131 130 129
+f 133 132 131
+f 134 133 131
+f 135 134 131
+f 120 136 119
+f 119 136 122
+f 122 137 129
+f 136 137 122
+f 129 138 131
+f 137 138 129
+f 115 136 120
+f 115 139 136
+f 139 137 136
+f 139 140 137
+f 140 138 137
+f 140 141 138
+f 117 142 115
+f 115 142 139
+f 139 143 140
+f 142 143 139
+f 140 144 141
+f 143 144 140
+f 116 145 117
+f 146 142 145
+f 145 142 117
+f 146 147 142
+f 147 148 142
+f 148 149 142
+f 149 150 142
+f 150 151 142
+f 151 143 142
+f 152 144 143
+f 152 153 144
+f 151 152 143
+f 118 121 116
+f 116 121 145
+f 145 123 146
+f 121 123 145
+f 146 124 147
+f 123 124 146
+f 124 125 147
+f 147 125 148
+f 148 126 149
+f 125 126 148
+f 149 127 150
+f 126 127 149
+f 127 128 150
+f 150 128 151
+f 151 130 152
+f 128 130 151
+f 152 132 153
+f 130 132 152
+f 132 154 153
+f 154 155 153
+f 155 156 153
+f 154 132 133
+f 134 154 133
+f 155 154 134
+f 135 155 134
+f 156 155 135
+f 153 141 144
+f 156 135 141
+f 141 131 138
+f 135 131 141
+f 153 156 141
+f 157 158 159
+f 160 161 157
+f 162 157 163
+f 162 160 157
+f 161 158 157
+f 164 161 160
+f 164 160 165
+f 166 165 167
+f 166 164 165
+f 168 166 167
+f 165 160 162
+f 167 165 162
+f 168 167 162
+f 169 168 162
+f 170 169 162
+f 171 169 170
+f 172 171 170
+f 173 171 172
+f 174 173 172
+f 175 174 172
+f 176 172 177
+f 176 175 172
+f 178 176 177
+f 163 179 162
+f 162 179 170
+f 170 180 172
+f 179 180 170
+f 172 181 177
+f 180 181 172
+f 157 182 163
+f 163 182 179
+f 179 183 180
+f 182 183 179
+f 180 184 181
+f 183 184 180
+f 159 185 157
+f 157 185 182
+f 182 186 183
+f 185 186 182
+f 183 187 184
+f 186 187 183
+f 158 188 159
+f 188 185 159
+f 189 186 190
+f 191 186 189
+f 190 186 185
+f 191 192 186
+f 186 193 187
+f 192 193 186
+f 193 194 187
+f 188 190 185
+f 161 164 158
+f 164 166 158
+f 158 168 188
+f 166 168 158
+f 188 169 190
+f 168 169 188
+f 190 171 189
+f 169 171 190
+f 171 173 189
+f 173 174 191
+f 173 191 189
+f 191 174 192
+f 192 175 193
+f 174 175 192
+f 193 176 194
+f 175 176 193
+f 176 178 194
+f 194 184 187
+f 194 178 184
+f 184 177 181
+f 178 177 184
+f 195 196 197
+f 197 196 198
+f 198 199 200
+f 200 199 201
+f 196 199 198
+f 199 202 201
+f 203 204 205
+f 206 204 203
+f 207 206 203
+f 195 207 203
+f 197 208 207
+f 197 207 195
+f 203 209 195
+f 195 209 196
+f 196 210 199
+f 209 210 196
+f 199 211 202
+f 210 211 199
+f 212 211 213
+f 212 214 211
+f 214 215 211
+f 215 202 211
+f 216 201 215
+f 215 201 202
+f 217 197 198
+f 217 208 197
+f 218 198 200
+f 218 217 198
+f 216 200 201
+f 216 218 200
+f 205 219 203
+f 203 219 209
+f 209 220 210
+f 219 220 209
+f 210 213 211
+f 220 213 210
+f 204 221 205
+f 205 221 219
+f 219 222 220
+f 221 222 219
+f 220 212 213
+f 222 212 220
+f 206 223 204
+f 204 223 221
+f 221 224 222
+f 223 224 221
+f 222 214 212
+f 224 214 222
+f 223 206 207
+f 223 207 225
+f 224 225 226
+f 224 223 225
+f 214 226 215
+f 214 224 226
+f 225 207 208
+f 225 208 217
+f 226 217 218
+f 226 225 217
+f 215 218 216
+f 215 226 218
+f 227 228 229
+f 229 228 230
+f 230 231 232
+f 232 231 233
+f 228 231 230
+f 231 234 233
+f 235 236 237
+f 238 236 235
+f 239 238 235
+f 227 239 235
+f 229 240 239
+f 229 239 227
+f 235 241 227
+f 227 241 228
+f 228 242 231
+f 241 242 228
+f 231 243 234
+f 242 243 231
+f 244 243 245
+f 244 246 243
+f 246 247 243
+f 247 234 243
+f 248 233 247
+f 247 233 234
+f 249 240 229
+f 249 229 230
+f 250 230 232
+f 250 249 230
+f 248 232 233
+f 248 250 232
+f 237 251 235
+f 235 251 241
+f 241 252 242
+f 251 252 241
+f 242 245 243
+f 252 245 242
+f 236 253 237
+f 237 253 251
+f 251 254 252
+f 253 254 251
+f 252 244 245
+f 254 244 252
+f 236 238 253
+f 253 255 254
+f 238 255 253
+f 254 256 244
+f 255 256 254
+f 256 246 244
+f 255 238 239
+f 255 239 257
+f 256 257 258
+f 256 255 257
+f 246 258 247
+f 246 256 258
+f 257 239 240
+f 257 240 249
+f 258 249 250
+f 258 257 249
+f 247 250 248
+f 247 258 250
+f 259 260 261
+f 261 260 262
+f 262 263 264
+f 260 263 262
+f 264 265 266
+f 263 265 264
+f 267 268 269
+f 270 268 267
+f 271 270 267
+f 259 271 267
+f 261 272 271
+f 261 271 259
+f 267 273 259
+f 259 273 260
+f 260 274 263
+f 273 274 260
+f 263 275 265
+f 274 275 263
+f 276 275 277
+f 276 278 275
+f 278 279 275
+f 279 265 275
+f 280 266 279
+f 279 266 265
+f 281 272 261
+f 281 261 262
+f 282 262 264
+f 282 281 262
+f 280 264 266
+f 280 282 264
+f 283 270 271
+f 283 271 284
+f 285 284 286
+f 285 283 284
+f 278 286 279
+f 278 285 286
+f 284 271 272
+f 284 272 281
+f 286 281 282
+f 286 284 281
+f 279 282 280
+f 279 286 282
+f 269 287 267
+f 267 287 273
+f 273 288 274
+f 287 288 273
+f 274 277 275
+f 288 277 274
+f 268 289 269
+f 269 289 287
+f 287 290 288
+f 289 290 287
+f 288 276 277
+f 290 276 288
+f 270 283 268
+f 268 283 289
+f 289 285 290
+f 283 285 289
+f 290 278 276
+f 285 278 290
+f 291 292 293
+f 294 292 291
+f 295 294 291
+f 296 294 295
+f 297 295 298
+f 297 296 295
+f 299 293 292
+f 300 293 299
+f 301 300 299
+f 302 301 299
+f 303 304 301
+f 303 301 302
+f 305 299 292
+f 305 292 294
+f 306 294 296
+f 306 305 294
+f 307 296 297
+f 307 306 296
+f 298 307 297
+f 298 308 307
+f 308 309 307
+f 309 310 307
+f 311 312 309
+f 309 312 310
+f 291 293 300
+f 291 300 313
+f 295 313 314
+f 295 291 313
+f 298 314 308
+f 298 295 314
+f 315 303 302
+f 315 302 316
+f 317 316 318
+f 317 315 316
+f 312 318 310
+f 312 317 318
+f 305 302 299
+f 316 302 305
+f 306 316 305
+f 318 316 306
+f 310 306 307
+f 310 318 306
+f 313 300 301
+f 313 301 319
+f 314 319 320
+f 314 313 319
+f 309 314 320
+f 308 314 309
+f 319 301 304
+f 319 304 321
+f 320 321 322
+f 320 319 321
+f 309 322 311
+f 309 320 322
+f 321 304 303
+f 321 303 315
+f 322 315 317
+f 322 321 315
+f 312 322 317
+f 311 322 312
+f 323 324 325
+f 323 325 326
+f 327 326 328
+f 327 323 326
+f 329 328 330
+f 329 327 328
+f 331 332 333
+f 334 332 331
+f 335 334 331
+f 325 335 331
+f 324 336 335
+f 324 335 325
+f 337 336 324
+f 337 324 323
+f 338 323 327
+f 338 337 323
+f 329 338 327
+f 339 338 329
+f 340 341 342
+f 340 343 341
+f 343 344 341
+f 344 330 341
+f 339 329 344
+f 344 329 330
+f 345 325 331
+f 326 325 345
+f 346 326 345
+f 328 326 346
+f 330 346 341
+f 330 328 346
+f 345 331 333
+f 345 333 347
+f 346 347 348
+f 346 345 347
+f 341 348 342
+f 341 346 348
+f 349 333 332
+f 347 333 349
+f 350 347 349
+f 348 347 350
+f 342 350 340
+f 342 348 350
+f 349 332 334
+f 349 334 351
+f 350 351 352
+f 350 349 351
+f 340 352 343
+f 340 350 352
+f 351 334 335
+f 351 335 353
+f 352 353 354
+f 352 351 353
+f 344 352 354
+f 343 352 344
+f 353 335 336
+f 353 336 337
+f 354 337 338
+f 354 353 337
+f 344 338 339
+f 344 354 338
+f 355 356 357
+f 355 357 358
+f 359 358 360
+f 359 355 358
+f 361 360 362
+f 361 359 360
+f 363 364 365
+f 366 364 363
+f 367 366 363
+f 357 367 363
+f 356 368 367
+f 356 367 357
+f 369 368 356
+f 369 356 355
+f 370 355 359
+f 370 369 355
+f 361 370 359
+f 371 370 361
+f 372 373 374
+f 372 375 373
+f 375 376 373
+f 376 362 373
+f 371 361 376
+f 376 361 362
+f 377 357 363
+f 358 357 377
+f 378 358 377
+f 360 358 378
+f 362 378 373
+f 362 360 378
+f 377 363 365
+f 377 365 379
+f 378 379 380
+f 378 377 379
+f 373 380 374
+f 373 378 380
+f 381 365 364
+f 379 365 381
+f 382 379 381
+f 380 379 382
+f 374 382 372
+f 374 380 382
+f 381 364 366
+f 381 366 383
+f 382 383 384
+f 382 381 383
+f 372 384 375
+f 372 382 384
+f 383 366 367
+f 383 367 385
+f 384 385 386
+f 384 383 385
+f 376 384 386
+f 375 384 376
+f 385 367 368
+f 385 368 369
+f 386 369 370
+f 386 385 369
+f 376 370 371
+f 376 386 370
+f 387 388 389
+f 387 389 390
+f 391 390 392
+f 391 387 390
+f 393 392 394
+f 393 391 392
+f 395 396 397
+f 398 396 395
+f 399 398 395
+f 389 399 395
+f 388 400 399
+f 388 399 389
+f 401 400 388
+f 401 388 387
+f 402 387 391
+f 402 401 387
+f 393 402 391
+f 403 402 393
+f 404 405 406
+f 404 407 405
+f 407 408 405
+f 408 394 405
+f 403 393 408
+f 408 393 394
+f 409 389 395
+f 390 389 409
+f 410 390 409
+f 392 390 410
+f 394 410 405
+f 394 392 410
+f 409 395 397
+f 409 397 411
+f 410 411 412
+f 410 409 411
+f 405 412 406
+f 405 410 412
+f 413 397 396
+f 411 397 413
+f 414 411 413
+f 412 411 414
+f 406 414 404
+f 406 412 414
+f 413 396 398
+f 413 398 415
+f 414 415 416
+f 414 413 415
+f 404 416 407
+f 404 414 416
+f 415 398 399
+f 415 399 417
+f 416 417 418
+f 416 415 417
+f 408 416 418
+f 407 416 408
+f 417 399 400
+f 417 400 401
+f 418 401 402
+f 418 417 401
+f 408 402 403
+f 408 418 402
+f 419 420 421
+f 419 421 422
+f 423 422 424
+f 423 419 422
+f 425 424 426
+f 425 423 424
+f 427 428 429
+f 430 428 427
+f 431 430 427
+f 421 431 427
+f 420 432 431
+f 420 431 421
+f 433 432 420
+f 433 420 419
+f 434 419 423
+f 434 433 419
+f 425 434 423
+f 435 434 425
+f 436 437 438
+f 436 439 437
+f 439 440 437
+f 440 426 437
+f 435 425 440
+f 440 425 426
+f 441 421 427
+f 422 421 441
+f 442 422 441
+f 424 422 442
+f 426 442 437
+f 426 424 442
+f 443 430 431
+f 443 431 444
+f 445 444 446
+f 445 443 444
+f 440 445 446
+f 439 445 440
+f 444 431 432
+f 444 432 433
+f 446 433 434
+f 446 444 433
+f 440 434 435
+f 440 446 434
+f 441 427 429
+f 441 429 447
+f 442 447 448
+f 442 441 447
+f 437 448 438
+f 437 442 448
+f 449 429 428
+f 447 429 449
+f 450 447 449
+f 448 447 450
+f 438 450 436
+f 438 448 450
+f 449 428 430
+f 449 430 443
+f 450 443 445
+f 450 449 443
+f 436 445 439
+f 436 450 445
+f 451 452 453
+f 451 453 454
+f 455 454 456
+f 455 451 454
+f 457 456 458
+f 457 455 456
+f 459 460 461
+f 462 460 459
+f 463 462 459
+f 453 463 459
+f 452 464 463
+f 452 463 453
+f 465 464 452
+f 465 452 451
+f 455 465 451
+f 466 465 455
+f 457 466 455
+f 467 466 457
+f 468 469 470
+f 468 471 469
+f 471 472 469
+f 472 458 469
+f 467 457 472
+f 472 457 458
+f 473 453 459
+f 454 453 473
+f 456 473 474
+f 456 454 473
+f 458 474 469
+f 458 456 474
+f 475 462 463
+f 475 463 476
+f 477 475 476
+f 478 475 477
+f 472 478 477
+f 471 478 472
+f 476 463 464
+f 476 464 465
+f 477 465 466
+f 477 476 465
+f 472 466 467
+f 472 477 466
+f 473 459 461
+f 473 461 479
+f 474 479 480
+f 474 473 479
+f 469 480 470
+f 469 474 480
+f 481 461 460
+f 479 461 481
+f 480 481 482
+f 480 479 481
+f 470 482 468
+f 470 480 482
+f 481 460 462
+f 481 462 475
+f 482 475 478
+f 482 481 475
+f 468 478 471
+f 468 482 478
+f 483 484 485
+f 483 485 486
+f 487 486 488
+f 487 483 486
+f 489 488 490
+f 489 487 488
+f 491 492 493
+f 494 492 491
+f 495 494 491
+f 485 495 491
+f 484 496 495
+f 484 495 485
+f 497 496 484
+f 497 484 483
+f 487 497 483
+f 498 497 487
+f 489 498 487
+f 499 498 489
+f 500 501 502
+f 500 503 501
+f 503 504 501
+f 504 490 501
+f 499 489 504
+f 504 489 490
+f 505 485 491
+f 486 485 505
+f 488 505 506
+f 488 486 505
+f 490 506 501
+f 490 488 506
+f 507 494 495
+f 508 494 507
+f 509 508 507
+f 510 508 509
+f 504 510 509
+f 503 510 504
+f 507 495 496
+f 507 496 497
+f 509 497 498
+f 509 507 497
+f 504 498 499
+f 504 509 498
+f 505 491 493
+f 505 493 511
+f 506 511 512
+f 506 505 511
+f 501 512 502
+f 501 506 512
+f 511 493 492
+f 511 492 513
+f 512 513 514
+f 512 511 513
+f 502 514 500
+f 502 512 514
+f 513 492 494
+f 513 494 508
+f 514 508 510
+f 514 513 508
+f 500 510 503
+f 500 514 510
+f 515 516 517
+f 515 517 518
+f 519 518 520
+f 519 515 518
+f 521 520 522
+f 521 519 520
+f 523 524 525
+f 526 524 523
+f 527 526 523
+f 517 527 523
+f 516 528 527
+f 516 527 517
+f 515 528 516
+f 529 528 515
+f 519 529 515
+f 530 529 519
+f 521 530 519
+f 531 530 521
+f 532 533 534
+f 532 535 533
+f 535 536 533
+f 536 522 533
+f 531 521 536
+f 536 521 522
+f 518 517 523
+f 518 523 537
+f 520 537 538
+f 520 518 537
+f 522 538 533
+f 522 520 538
+f 539 526 527
+f 540 526 539
+f 541 540 539
+f 542 540 541
+f 536 542 541
+f 535 542 536
+f 539 527 528
+f 539 528 529
+f 541 529 530
+f 541 539 529
+f 536 530 531
+f 536 541 530
+f 537 523 525
+f 537 525 543
+f 538 543 544
+f 538 537 543
+f 533 544 534
+f 533 538 544
+f 543 525 524
+f 543 524 545
+f 544 545 546
+f 544 543 545
+f 534 546 532
+f 534 544 546
+f 545 524 526
+f 545 526 540
+f 546 540 542
+f 546 545 540
+f 532 542 535
+f 532 546 542
+f 547 548 549
+f 550 547 551
+f 550 552 547
+f 552 548 547
+f 553 552 550
+f 554 552 553
+f 555 554 553
+f 556 554 555
+f 557 556 555
+f 558 556 557
+f 553 550 551
+f 553 551 559
+f 555 559 560
+f 555 553 559
+f 557 560 561
+f 557 555 560
+f 559 551 547
+f 559 547 562
+f 560 562 563
+f 560 559 562
+f 561 563 564
+f 561 560 563
+f 562 547 549
+f 562 549 565
+f 563 565 566
+f 563 562 565
+f 564 566 567
+f 564 563 566
+f 565 549 548
+f 565 548 568
+f 566 568 569
+f 566 565 568
+f 567 569 570
+f 567 566 569
+f 548 552 568
+f 552 554 568
+f 568 556 569
+f 554 556 568
+f 569 558 570
+f 556 558 569
+f 570 564 567
+f 564 557 561
+f 558 557 564
+f 570 558 564
+f 571 572 573
+f 571 574 572
+f 574 575 572
+f 575 576 572
+f 577 578 575
+f 575 578 576
+f 579 580 581
+f 579 581 582
+f 583 582 584
+f 583 579 582
+f 578 584 576
+f 578 583 584
+f 582 585 586
+f 582 587 585
+f 582 581 587
+f 582 586 588
+f 584 588 589
+f 584 582 588
+f 576 589 572
+f 576 584 589
+f 588 586 590
+f 588 590 591
+f 589 591 592
+f 589 588 591
+f 572 592 573
+f 572 589 592
+f 591 593 594
+f 591 595 593
+f 591 590 595
+f 591 594 596
+f 592 596 597
+f 592 591 596
+f 573 597 571
+f 573 592 597
+f 596 594 598
+f 596 598 599
+f 597 599 600
+f 597 596 599
+f 571 600 574
+f 571 597 600
+f 601 598 602
+f 601 602 603
+f 601 603 604
+f 599 598 601
+f 605 599 601
+f 600 599 605
+f 575 600 605
+f 574 600 575
+f 601 604 606
+f 601 606 607
+f 605 607 608
+f 605 601 607
+f 575 608 577
+f 575 605 608
+f 579 606 609
+f 579 609 610
+f 579 610 580
+f 607 606 579
+f 583 607 579
+f 608 607 583
+f 578 608 583
+f 577 608 578
+f 593 586 594
+f 595 586 593
+f 590 586 595
+f 585 604 586
+f 587 604 585
+f 581 604 587
+f 604 603 586
+f 603 602 586
+f 602 598 586
+f 581 580 604
+f 580 610 604
+f 610 609 604
+f 609 606 604
+f 598 594 586
+f 611 612 613
+f 611 614 612
+f 614 615 612
+f 615 616 612
+f 617 618 615
+f 615 618 616
+f 619 620 621
+f 619 621 622
+f 619 622 623
+f 624 620 619
+f 625 624 619
+f 626 624 625
+f 615 626 625
+f 614 626 615
+f 619 623 627
+f 619 627 628
+f 625 628 629
+f 625 619 628
+f 615 629 617
+f 615 625 629
+f 630 627 631
+f 630 631 632
+f 630 632 633
+f 628 627 630
+f 634 628 630
+f 629 628 634
+f 618 629 634
+f 617 629 618
+f 630 633 635
+f 630 635 636
+f 634 636 637
+f 634 630 636
+f 618 637 616
+f 618 634 637
+f 636 638 639
+f 636 640 638
+f 636 635 640
+f 636 639 641
+f 637 641 642
+f 637 636 641
+f 616 642 612
+f 616 637 642
+f 641 639 643
+f 641 643 644
+f 642 644 645
+f 642 641 644
+f 612 645 613
+f 612 642 645
+f 644 646 647
+f 644 648 646
+f 644 643 648
+f 644 647 649
+f 645 649 650
+f 645 644 649
+f 613 650 611
+f 613 645 650
+f 649 647 620
+f 649 620 624
+f 650 624 626
+f 650 649 624
+f 611 626 614
+f 611 650 626
+f 646 639 647
+f 648 639 646
+f 643 639 648
+f 638 623 639
+f 640 623 638
+f 635 623 640
+f 623 622 639
+f 622 621 639
+f 621 620 639
+f 635 633 623
+f 633 632 623
+f 632 631 623
+f 631 627 623
+f 620 647 639
+f 651 652 653
+f 651 654 652
+f 654 655 652
+f 655 656 652
+f 657 658 655
+f 655 658 656
+f 659 660 661
+f 659 661 662
+f 663 662 664
+f 663 659 662
+f 658 664 656
+f 658 663 664
+f 662 665 666
+f 662 667 665
+f 662 661 667
+f 662 666 668
+f 664 668 669
+f 664 662 668
+f 656 669 652
+f 656 664 669
+f 668 666 670
+f 668 670 671
+f 669 671 672
+f 669 668 671
+f 652 672 653
+f 652 669 672
+f 671 673 674
+f 671 675 673
+f 671 670 675
+f 671 674 676
+f 672 676 677
+f 672 671 676
+f 653 677 651
+f 653 672 677
+f 676 674 678
+f 676 678 679
+f 677 679 680
+f 677 676 679
+f 651 680 654
+f 651 677 680
+f 681 678 682
+f 681 682 683
+f 681 683 684
+f 679 678 681
+f 685 679 681
+f 680 679 685
+f 655 680 685
+f 654 680 655
+f 681 684 686
+f 681 686 687
+f 685 687 688
+f 685 681 687
+f 655 688 657
+f 655 685 688
+f 659 686 689
+f 659 689 690
+f 659 690 660
+f 687 686 659
+f 663 687 659
+f 688 687 663
+f 658 688 663
+f 657 688 658
+f 673 666 674
+f 675 666 673
+f 670 666 675
+f 665 684 666
+f 667 684 665
+f 661 684 667
+f 684 683 666
+f 683 682 666
+f 682 678 666
+f 661 660 684
+f 660 690 684
+f 690 689 684
+f 689 686 684
+f 678 674 666
+f 691 692 693
+f 691 694 692
+f 694 695 692
+f 695 696 692
+f 697 698 695
+f 695 698 696
+f 699 700 701
+f 699 701 702
+f 699 702 703
+f 704 700 699
+f 705 704 699
+f 706 704 705
+f 695 706 705
+f 694 706 695
+f 699 703 707
+f 699 707 708
+f 705 708 709
+f 705 699 708
+f 695 709 697
+f 695 705 709
+f 710 707 711
+f 710 711 712
+f 710 712 713
+f 708 707 710
+f 714 708 710
+f 709 708 714
+f 698 709 714
+f 697 709 698
+f 710 713 715
+f 710 715 716
+f 714 716 717
+f 714 710 716
+f 698 717 696
+f 698 714 717
+f 716 718 719
+f 716 720 718
+f 716 715 720
+f 716 719 721
+f 717 721 722
+f 717 716 721
+f 696 722 692
+f 696 717 722
+f 721 719 723
+f 721 723 724
+f 722 724 725
+f 722 721 724
+f 692 725 693
+f 692 722 725
+f 724 726 727
+f 724 728 726
+f 724 723 728
+f 724 727 729
+f 725 729 730
+f 725 724 729
+f 693 730 691
+f 693 725 730
+f 729 727 700
+f 729 700 704
+f 730 704 706
+f 730 729 704
+f 691 706 694
+f 691 730 706
+f 726 719 727
+f 728 719 726
+f 723 719 728
+f 718 703 719
+f 720 703 718
+f 715 703 720
+f 703 702 719
+f 702 701 719
+f 701 700 719
+f 715 713 703
+f 713 712 703
+f 712 711 703
+f 711 707 703
+f 700 727 719
+f 731 732 733
+f 731 734 732
+f 734 735 732
+f 735 736 732
+f 737 738 735
+f 735 738 736
+f 739 740 741
+f 739 741 742
+f 739 742 743
+f 744 740 739
+f 745 744 739
+f 746 744 745
+f 735 746 745
+f 734 746 735
+f 739 743 747
+f 739 747 748
+f 745 748 749
+f 745 739 748
+f 735 749 737
+f 735 745 749
+f 750 747 751
+f 750 751 752
+f 750 752 753
+f 748 747 750
+f 754 748 750
+f 749 748 754
+f 738 749 754
+f 737 749 738
+f 750 753 755
+f 750 755 756
+f 754 756 757
+f 754 750 756
+f 738 757 736
+f 738 754 757
+f 756 758 759
+f 756 760 758
+f 756 755 760
+f 756 759 761
+f 757 761 762
+f 757 756 761
+f 736 762 732
+f 736 757 762
+f 761 759 763
+f 761 763 764
+f 762 764 765
+f 762 761 764
+f 732 765 733
+f 732 762 765
+f 764 766 767
+f 764 768 766
+f 764 763 768
+f 764 767 769
+f 765 769 770
+f 765 764 769
+f 733 770 731
+f 733 765 770
+f 769 767 740
+f 769 740 744
+f 770 744 746
+f 770 769 744
+f 731 746 734
+f 731 770 746
+f 766 759 767
+f 768 759 766
+f 763 759 768
+f 758 743 759
+f 760 743 758
+f 755 743 760
+f 743 742 759
+f 742 741 759
+f 741 740 759
+f 755 753 743
+f 753 752 743
+f 752 751 743
+f 751 747 743
+f 740 767 759
+f 771 772 773
+f 771 774 772
+f 774 775 772
+f 775 776 772
+f 777 778 775
+f 775 778 776
+f 779 780 781
+f 779 781 782
+f 783 780 779
+f 784 783 779
+f 785 784 779
+f 786 784 785
+f 775 786 785
+f 774 786 775
+f 779 782 787
+f 779 787 788
+f 785 788 789
+f 785 779 788
+f 775 789 777
+f 775 785 789
+f 790 791 792
+f 793 791 790
+f 787 790 794
+f 787 793 790
+f 788 787 794
+f 789 794 778
+f 789 788 794
+f 777 789 778
+f 790 792 795
+f 790 795 796
+f 794 796 797
+f 794 790 796
+f 778 797 776
+f 778 794 797
+f 796 798 799
+f 796 800 798
+f 796 795 800
+f 797 799 801
+f 797 801 802
+f 797 796 799
+f 776 802 772
+f 776 797 802
+f 801 799 803
+f 801 803 804
+f 802 804 805
+f 802 801 804
+f 772 805 773
+f 772 802 805
+f 804 806 807
+f 804 808 806
+f 804 803 808
+f 804 807 809
+f 805 809 810
+f 805 804 809
+f 773 810 771
+f 773 805 810
+f 809 807 783
+f 809 783 784
+f 810 784 786
+f 810 786 774
+f 810 809 784
+f 771 810 774
+f 806 799 807
+f 808 799 806
+f 803 799 808
+f 798 782 799
+f 800 782 798
+f 795 782 800
+f 782 781 799
+f 781 780 799
+f 780 783 799
+f 795 792 782
+f 792 791 782
+f 791 793 782
+f 793 787 782
+f 783 807 799
+f 811 812 813
+f 811 814 812
+f 814 815 812
+f 815 816 812
+f 817 818 815
+f 815 818 816
+f 819 820 821
+f 819 821 822
+f 823 822 824
+f 823 819 822
+f 818 824 816
+f 818 823 824
+f 825 821 826
+f 822 821 825
+f 824 825 827
+f 824 822 825
+f 816 827 812
+f 816 824 827
+f 825 826 828
+f 825 828 829
+f 827 829 830
+f 827 825 829
+f 812 830 813
+f 812 827 830
+f 831 828 832
+f 829 828 831
+f 830 831 833
+f 830 829 831
+f 813 833 811
+f 813 830 833
+f 831 832 834
+f 831 834 835
+f 833 835 836
+f 833 831 835
+f 811 836 814
+f 811 833 836
+f 835 834 837
+f 835 837 838
+f 836 838 839
+f 836 835 838
+f 815 836 839
+f 814 836 815
+f 838 837 840
+f 838 840 841
+f 839 841 842
+f 839 838 841
+f 815 842 817
+f 815 839 842
+f 841 840 820
+f 841 820 819
+f 823 841 819
+f 842 841 823
+f 818 842 823
+f 817 842 818
+f 826 832 828
+f 834 832 826
+f 837 834 826
+f 821 837 826
+f 820 840 837
+f 820 837 821
+f 843 844 845
+f 843 846 844
+f 846 847 844
+f 847 848 844
+f 849 850 847
+f 847 850 848
+f 851 852 853
+f 851 853 854
+f 855 851 854
+f 856 851 855
+f 847 856 855
+f 846 856 847
+f 854 853 857
+f 854 857 858
+f 855 858 859
+f 855 854 858
+f 847 859 849
+f 847 855 859
+f 858 857 860
+f 858 860 861
+f 859 861 862
+f 859 858 861
+f 850 859 862
+f 849 859 850
+f 861 860 863
+f 861 863 864
+f 862 864 865
+f 862 861 864
+f 850 865 848
+f 850 862 865
+f 866 863 867
+f 864 863 866
+f 865 866 868
+f 865 864 866
+f 848 868 844
+f 848 865 868
+f 866 867 869
+f 866 869 870
+f 868 870 871
+f 868 866 870
+f 844 871 845
+f 844 868 871
+f 872 869 873
+f 870 869 872
+f 871 872 874
+f 871 870 872
+f 845 874 843
+f 845 871 874
+f 872 873 852
+f 872 852 851
+f 874 851 856
+f 874 872 851
+f 843 856 846
+f 843 874 856
+f 867 873 869
+f 852 873 867
+f 853 852 867
+f 863 853 867
+f 860 857 853
+f 860 853 863
+f 875 876 877
+f 875 878 876
+f 878 879 876
+f 879 880 876
+f 881 882 879
+f 879 882 880
+f 883 884 885
+f 883 885 886
+f 887 886 888
+f 887 883 886
+f 882 888 880
+f 882 887 888
+f 889 885 890
+f 886 885 889
+f 888 889 891
+f 888 886 889
+f 880 891 876
+f 880 888 891
+f 889 890 892
+f 889 892 893
+f 891 893 894
+f 891 889 893
+f 876 894 877
+f 876 891 894
+f 895 892 896
+f 893 892 895
+f 894 895 897
+f 894 893 895
+f 877 897 875
+f 877 894 897
+f 895 896 898
+f 895 898 899
+f 897 899 900
+f 897 895 899
+f 875 900 878
+f 875 897 900
+f 899 898 901
+f 899 901 902
+f 903 899 902
+f 900 899 903
+f 879 900 903
+f 878 900 879
+f 902 901 904
+f 902 904 905
+f 903 905 906
+f 903 902 905
+f 879 906 881
+f 879 903 906
+f 905 904 884
+f 905 884 883
+f 906 883 887
+f 906 905 883
+f 882 906 887
+f 881 906 882
+f 890 896 892
+f 898 896 890
+f 901 898 890
+f 885 901 890
+f 884 904 901
+f 884 901 885
+f 907 908 909
+f 907 910 908
+f 910 911 908
+f 911 912 908
+f 913 914 911
+f 911 914 912
+f 915 916 917
+f 915 917 918
+f 919 918 920
+f 919 915 918
+f 914 920 912
+f 914 919 920
+f 921 917 922
+f 918 917 921
+f 920 921 923
+f 920 918 921
+f 912 923 908
+f 912 920 923
+f 921 922 924
+f 921 924 925
+f 923 925 926
+f 923 921 925
+f 908 926 909
+f 908 923 926
+f 927 924 928
+f 925 924 927
+f 929 925 927
+f 926 925 929
+f 909 929 907
+f 909 926 929
+f 927 928 930
+f 927 930 931
+f 929 931 932
+f 929 927 931
+f 907 932 910
+f 907 929 932
+f 931 930 933
+f 931 933 934
+f 932 934 935
+f 932 931 934
+f 911 932 935
+f 910 932 911
+f 934 933 936
+f 934 936 937
+f 935 937 938
+f 935 934 937
+f 911 938 913
+f 911 935 938
+f 937 936 916
+f 937 916 915
+f 938 915 919
+f 938 937 915
+f 914 938 919
+f 913 938 914
+f 922 928 924
+f 930 928 922
+f 933 930 922
+f 917 933 922
+f 916 936 933
+f 916 933 917
+f 939 940 941
+f 939 942 940
+f 942 943 940
+f 943 944 940
+f 945 946 943
+f 943 946 944
+f 947 948 949
+f 950 948 947
+f 951 950 947
+f 952 950 951
+f 942 951 943
+f 942 952 951
+f 947 949 953
+f 947 953 954
+f 951 954 955
+f 951 947 954
+f 943 955 945
+f 943 951 955
+f 956 953 957
+f 954 953 956
+f 955 956 958
+f 955 954 956
+f 945 958 946
+f 945 955 958
+f 956 957 959
+f 956 959 960
+f 958 960 961
+f 958 956 960
+f 946 961 944
+f 946 958 961
+f 960 959 962
+f 960 962 963
+f 961 963 964
+f 961 960 963
+f 940 961 964
+f 944 961 940
+f 963 962 965
+f 963 965 966
+f 964 966 967
+f 964 963 966
+f 940 967 941
+f 940 964 967
+f 966 965 968
+f 966 968 969
+f 967 969 970
+f 967 966 969
+f 939 967 970
+f 941 967 939
+f 969 968 948
+f 969 948 950
+f 970 950 952
+f 970 969 950
+f 939 952 942
+f 939 970 952
+f 962 968 965
+f 948 968 962
+f 949 948 962
+f 959 949 962
+f 957 953 949
+f 957 949 959
+f 971 972 973
+f 971 974 972
+f 974 975 972
+f 975 976 972
+f 977 978 975
+f 975 978 976
+f 979 980 981
+f 982 980 979
+f 983 979 984
+f 983 982 979
+f 974 984 975
+f 974 983 984
+f 979 981 985
+f 979 985 986
+f 984 986 987
+f 984 979 986
+f 975 987 977
+f 975 984 987
+f 988 985 989
+f 986 985 988
+f 987 988 990
+f 987 986 988
+f 977 990 978
+f 977 987 990
+f 988 989 991
+f 988 991 992
+f 990 992 993
+f 990 988 992
+f 978 993 976
+f 978 990 993
+f 992 991 994
+f 992 994 995
+f 993 995 996
+f 993 992 995
+f 972 993 996
+f 976 993 972
+f 995 994 997
+f 995 997 998
+f 996 998 999
+f 996 995 998
+f 972 999 973
+f 972 996 999
+f 998 997 1000
+f 998 1000 1001
+f 1002 998 1001
+f 999 998 1002
+f 971 999 1002
+f 973 999 971
+f 1001 1000 980
+f 1001 980 982
+f 1002 982 983
+f 1002 983 974
+f 1002 1001 982
+f 971 1002 974
+f 994 1000 997
+f 980 1000 994
+f 981 980 994
+f 991 981 994
+f 989 985 981
+f 989 981 991
+f 1003 1004 1005
+f 1003 1006 1004
+f 1006 1007 1004
+f 1007 1008 1004
+f 1009 1010 1007
+f 1007 1010 1008
+f 1011 1012 1013
+f 1014 1012 1011
+f 1015 1014 1011
+f 1016 1014 1015
+f 1006 1015 1007
+f 1006 1016 1015
+f 1011 1013 1017
+f 1011 1017 1018
+f 1015 1018 1019
+f 1015 1011 1018
+f 1007 1019 1009
+f 1007 1015 1019
+f 1020 1017 1021
+f 1018 1017 1020
+f 1019 1020 1022
+f 1019 1018 1020
+f 1009 1022 1010
+f 1009 1019 1022
+f 1020 1021 1023
+f 1020 1023 1024
+f 1022 1024 1025
+f 1022 1020 1024
+f 1010 1025 1008
+f 1010 1022 1025
+f 1024 1023 1026
+f 1024 1026 1027
+f 1025 1027 1028
+f 1025 1024 1027
+f 1004 1025 1028
+f 1008 1025 1004
+f 1027 1026 1029
+f 1027 1029 1030
+f 1028 1030 1031
+f 1028 1027 1030
+f 1004 1031 1005
+f 1004 1028 1031
+f 1030 1029 1032
+f 1030 1032 1033
+f 1031 1033 1034
+f 1031 1030 1033
+f 1003 1031 1034
+f 1005 1031 1003
+f 1033 1032 1012
+f 1033 1012 1014
+f 1034 1014 1016
+f 1034 1033 1014
+f 1003 1016 1006
+f 1003 1034 1016
+f 1026 1032 1029
+f 1012 1032 1026
+f 1013 1012 1026
+f 1023 1013 1026
+f 1021 1017 1013
+f 1021 1013 1023
+f 1035 1036 1037
+f 1035 1037 1038
+f 1039 1038 1040
+f 1039 1035 1038
+f 1041 1040 1042
+f 1041 1039 1040
+f 1043 1036 1044
+f 1043 1044 1045
+f 1043 1045 1037
+f 1043 1037 1036
+f 1046 1044 1036
+f 1047 1046 1036
+f 1048 1047 1036
+f 1035 1048 1036
+f 1049 1048 1035
+f 1050 1035 1039
+f 1050 1049 1035
+f 1051 1039 1041
+f 1051 1050 1039
+f 1052 1051 1041
+f 1053 1052 1041
+f 1054 1053 1041
+f 1041 1055 1054
+f 1054 1055 1056
+f 1056 1055 1042
+f 1042 1055 1041
+f 1037 1057 1058
+f 1037 1059 1057
+f 1037 1045 1059
+f 1038 1058 1060
+f 1038 1037 1058
+f 1040 1060 1061
+f 1040 1038 1060
+f 1062 1040 1061
+f 1042 1063 1056
+f 1042 1064 1063
+f 1042 1062 1064
+f 1042 1040 1062
+f 1065 1058 1066
+f 1067 1058 1065
+f 1068 1058 1067
+f 1057 1069 1058
+f 1059 1069 1057
+f 1045 1069 1059
+f 1069 1070 1058
+f 1070 1071 1058
+f 1071 1072 1058
+f 1045 1044 1069
+f 1044 1046 1069
+f 1046 1047 1069
+f 1047 1048 1069
+f 1072 1066 1058
+f 1073 1069 1048
+f 1073 1048 1049
+f 1074 1049 1050
+f 1074 1073 1049
+f 1075 1050 1051
+f 1075 1074 1050
+f 1076 1062 1077
+f 1078 1062 1076
+f 1079 1062 1078
+f 1080 1081 1062
+f 1081 1082 1062
+f 1063 1075 1056
+f 1064 1075 1063
+f 1062 1075 1064
+f 1082 1075 1062
+f 1051 1052 1075
+f 1052 1053 1075
+f 1075 1054 1056
+f 1053 1054 1075
+f 1079 1080 1062
+f 1060 1058 1068
+f 1060 1068 1083
+f 1061 1083 1084
+f 1061 1060 1083
+f 1062 1084 1077
+f 1062 1061 1084
+f 1073 1072 1071
+f 1073 1071 1070
+f 1073 1070 1069
+f 1085 1072 1073
+f 1086 1073 1074
+f 1086 1085 1073
+f 1080 1086 1074
+f 1081 1080 1074
+f 1082 1081 1074
+f 1075 1082 1074
+f 1087 1066 1072
+f 1087 1072 1085
+f 1088 1085 1086
+f 1088 1086 1080
+f 1088 1087 1085
+f 1079 1088 1080
+f 1083 1065 1066
+f 1083 1067 1065
+f 1083 1068 1067
+f 1083 1066 1087
+f 1088 1083 1087
+f 1084 1083 1088
+f 1079 1084 1088
+f 1078 1084 1079
+f 1076 1084 1078
+f 1077 1084 1076
+f 1089 1090 1091
+f 1092 1090 1089
+f 1093 1090 1092
+f 1094 1095 1090
+f 1095 1096 1090
+f 1097 1098 1099
+f 1100 1098 1097
+f 1090 1098 1100
+f 1096 1098 1090
+f 1101 1102 1098
+f 1102 1103 1098
+f 1098 1104 1099
+f 1103 1104 1098
+f 1093 1094 1090
+f 1105 1106 1107
+f 1105 1107 1108
+f 1109 1108 1110
+f 1109 1105 1108
+f 1104 1110 1099
+f 1104 1109 1110
+f 1111 1107 1112
+f 1108 1107 1111
+f 1113 1108 1111
+f 1110 1108 1113
+f 1090 1110 1113
+f 1100 1110 1090
+f 1097 1110 1100
+f 1099 1110 1097
+f 1111 1112 1114
+f 1111 1114 1115
+f 1113 1115 1116
+f 1113 1111 1115
+f 1090 1116 1091
+f 1090 1113 1116
+f 1117 1114 1118
+f 1115 1114 1117
+f 1119 1115 1117
+f 1116 1115 1119
+f 1093 1116 1119
+f 1092 1116 1093
+f 1089 1116 1092
+f 1091 1116 1089
+f 1117 1118 1120
+f 1117 1120 1121
+f 1119 1121 1122
+f 1119 1122 1094
+f 1119 1117 1121
+f 1093 1119 1094
+f 1121 1120 1123
+f 1121 1123 1124
+f 1122 1124 1125
+f 1122 1121 1124
+f 1096 1125 1098
+f 1095 1125 1096
+f 1094 1122 1125
+f 1094 1125 1095
+f 1124 1123 1126
+f 1124 1126 1127
+f 1125 1127 1128
+f 1125 1124 1127
+f 1098 1128 1101
+f 1098 1125 1128
+f 1127 1126 1106
+f 1127 1106 1105
+f 1128 1105 1109
+f 1128 1127 1105
+f 1103 1109 1104
+f 1102 1109 1103
+f 1101 1128 1109
+f 1101 1109 1102
+f 1112 1118 1114
+f 1120 1118 1112
+f 1123 1120 1112
+f 1107 1123 1112
+f 1106 1126 1123
+f 1106 1123 1107
+f 1129 1130 1131
+f 1132 1130 1129
+f 1133 1130 1132
+f 1134 1135 1130
+f 1135 1136 1130
+f 1137 1138 1139
+f 1140 1138 1137
+f 1130 1138 1140
+f 1136 1138 1130
+f 1141 1142 1138
+f 1142 1143 1138
+f 1138 1144 1139
+f 1143 1144 1138
+f 1133 1134 1130
+f 1145 1146 1147
+f 1145 1147 1148
+f 1149 1148 1150
+f 1149 1145 1148
+f 1136 1150 1138
+f 1135 1150 1136
+f 1134 1149 1150
+f 1134 1150 1135
+f 1148 1147 1151
+f 1148 1151 1152
+f 1150 1152 1153
+f 1150 1148 1152
+f 1138 1153 1141
+f 1138 1150 1153
+f 1152 1151 1154
+f 1152 1154 1155
+f 1153 1155 1156
+f 1153 1152 1155
+f 1143 1156 1144
+f 1142 1156 1143
+f 1141 1153 1156
+f 1141 1156 1142
+f 1155 1154 1157
+f 1155 1157 1158
+f 1156 1158 1159
+f 1156 1155 1158
+f 1144 1159 1139
+f 1144 1156 1159
+f 1160 1157 1161
+f 1158 1157 1160
+f 1162 1158 1160
+f 1159 1158 1162
+f 1130 1159 1162
+f 1140 1159 1130
+f 1137 1159 1140
+f 1139 1159 1137
+f 1160 1161 1163
+f 1160 1163 1164
+f 1162 1164 1165
+f 1162 1160 1164
+f 1130 1165 1131
+f 1130 1162 1165
+f 1166 1163 1167
+f 1164 1163 1166
+f 1168 1164 1166
+f 1165 1164 1168
+f 1133 1165 1168
+f 1132 1165 1133
+f 1129 1165 1132
+f 1131 1165 1129
+f 1166 1167 1146
+f 1166 1146 1145
+f 1168 1145 1149
+f 1168 1166 1145
+f 1133 1149 1134
+f 1133 1168 1149
+f 1161 1167 1163
+f 1146 1167 1161
+f 1147 1146 1161
+f 1157 1147 1161
+f 1154 1151 1147
+f 1154 1147 1157
+f 1169 1170 1171
+f 1172 1170 1169
+f 1173 1170 1172
+f 1174 1175 1170
+f 1175 1176 1170
+f 1177 1178 1179
+f 1180 1178 1177
+f 1170 1178 1180
+f 1176 1178 1170
+f 1181 1182 1178
+f 1182 1183 1178
+f 1178 1184 1179
+f 1183 1184 1178
+f 1173 1174 1170
+f 1185 1186 1187
+f 1185 1187 1188
+f 1189 1188 1190
+f 1189 1185 1188
+f 1184 1190 1179
+f 1184 1189 1190
+f 1191 1187 1192
+f 1188 1187 1191
+f 1193 1188 1191
+f 1190 1188 1193
+f 1170 1190 1193
+f 1180 1190 1170
+f 1177 1190 1180
+f 1179 1190 1177
+f 1191 1192 1194
+f 1191 1194 1195
+f 1193 1195 1196
+f 1193 1191 1195
+f 1170 1196 1171
+f 1170 1193 1196
+f 1197 1194 1198
+f 1195 1194 1197
+f 1199 1195 1197
+f 1196 1195 1199
+f 1173 1196 1199
+f 1172 1196 1173
+f 1169 1196 1172
+f 1171 1196 1169
+f 1197 1198 1200
+f 1197 1200 1201
+f 1199 1201 1202
+f 1199 1197 1201
+f 1173 1202 1174
+f 1173 1199 1202
+f 1201 1200 1203
+f 1201 1203 1204
+f 1202 1204 1205
+f 1202 1201 1204
+f 1176 1205 1178
+f 1175 1205 1176
+f 1174 1202 1205
+f 1174 1205 1175
+f 1204 1203 1206
+f 1204 1206 1207
+f 1205 1207 1208
+f 1205 1204 1207
+f 1178 1208 1181
+f 1178 1205 1208
+f 1207 1206 1186
+f 1207 1186 1185
+f 1208 1185 1189
+f 1208 1207 1185
+f 1183 1189 1184
+f 1182 1189 1183
+f 1181 1208 1189
+f 1181 1189 1182
+f 1192 1198 1194
+f 1200 1198 1192
+f 1203 1200 1192
+f 1187 1203 1192
+f 1186 1206 1203
+f 1186 1203 1187
+f 1209 1210 1211
+f 1212 1210 1209
+f 1213 1210 1212
+f 1214 1215 1210
+f 1215 1216 1210
+f 1217 1218 1219
+f 1220 1218 1217
+f 1210 1218 1220
+f 1216 1218 1210
+f 1221 1222 1218
+f 1222 1223 1218
+f 1218 1224 1219
+f 1223 1224 1218
+f 1213 1214 1210
+f 1225 1226 1227
+f 1225 1227 1228
+f 1229 1228 1230
+f 1229 1225 1228
+f 1216 1230 1218
+f 1215 1230 1216
+f 1214 1229 1230
+f 1214 1230 1215
+f 1228 1227 1231
+f 1228 1231 1232
+f 1230 1232 1233
+f 1230 1228 1232
+f 1218 1233 1221
+f 1218 1230 1233
+f 1232 1231 1234
+f 1232 1234 1235
+f 1233 1235 1236
+f 1233 1232 1235
+f 1223 1236 1224
+f 1222 1236 1223
+f 1221 1233 1236
+f 1221 1236 1222
+f 1235 1234 1237
+f 1235 1237 1238
+f 1236 1238 1239
+f 1236 1235 1238
+f 1224 1239 1219
+f 1224 1236 1239
+f 1240 1237 1241
+f 1238 1237 1240
+f 1242 1238 1240
+f 1239 1238 1242
+f 1210 1239 1242
+f 1220 1239 1210
+f 1217 1239 1220
+f 1219 1239 1217
+f 1240 1241 1243
+f 1240 1243 1244
+f 1242 1244 1245
+f 1242 1240 1244
+f 1210 1245 1211
+f 1210 1242 1245
+f 1246 1243 1247
+f 1244 1243 1246
+f 1248 1244 1246
+f 1245 1244 1248
+f 1213 1245 1248
+f 1212 1245 1213
+f 1209 1245 1212
+f 1211 1245 1209
+f 1246 1247 1226
+f 1246 1226 1225
+f 1248 1225 1229
+f 1248 1246 1225
+f 1213 1229 1214
+f 1213 1248 1229
+f 1241 1247 1243
+f 1226 1247 1241
+f 1227 1226 1241
+f 1237 1227 1241
+f 1234 1231 1227
+f 1234 1227 1237
+f 1249 1250 1251
+f 1252 1250 1249
+f 1253 1250 1252
+f 1254 1255 1250
+f 1255 1256 1250
+f 1257 1258 1259
+f 1260 1258 1257
+f 1250 1258 1260
+f 1256 1258 1250
+f 1261 1262 1258
+f 1262 1263 1258
+f 1258 1264 1259
+f 1263 1264 1258
+f 1253 1254 1250
+f 1265 1266 1267
+f 1265 1267 1268
+f 1269 1268 1270
+f 1269 1265 1268
+f 1256 1270 1258
+f 1255 1270 1256
+f 1254 1269 1270
+f 1254 1270 1255
+f 1268 1267 1271
+f 1268 1271 1272
+f 1270 1272 1273
+f 1270 1268 1272
+f 1258 1273 1261
+f 1258 1270 1273
+f 1272 1271 1274
+f 1272 1274 1275
+f 1273 1275 1276
+f 1273 1272 1275
+f 1263 1276 1264
+f 1262 1276 1263
+f 1261 1273 1276
+f 1261 1276 1262
+f 1275 1274 1277
+f 1275 1277 1278
+f 1276 1278 1279
+f 1276 1275 1278
+f 1264 1279 1259
+f 1264 1276 1279
+f 1280 1277 1281
+f 1278 1277 1280
+f 1282 1278 1280
+f 1279 1278 1282
+f 1250 1279 1282
+f 1260 1279 1250
+f 1257 1279 1260
+f 1259 1279 1257
+f 1280 1281 1283
+f 1280 1283 1284
+f 1282 1284 1285
+f 1282 1280 1284
+f 1250 1285 1251
+f 1250 1282 1285
+f 1286 1283 1287
+f 1284 1283 1286
+f 1288 1284 1286
+f 1285 1284 1288
+f 1253 1285 1288
+f 1252 1285 1253
+f 1249 1285 1252
+f 1251 1285 1249
+f 1286 1287 1266
+f 1286 1266 1265
+f 1288 1265 1269
+f 1288 1269 1254
+f 1288 1286 1265
+f 1253 1288 1254
+f 1281 1287 1283
+f 1266 1287 1281
+f 1267 1266 1281
+f 1277 1267 1281
+f 1274 1271 1267
+f 1274 1267 1277
+f 1289 1290 1291
+f 1292 1290 1289
+f 1293 1290 1292
+f 1294 1295 1290
+f 1295 1296 1290
+f 1297 1298 1299
+f 1300 1298 1297
+f 1290 1298 1300
+f 1296 1298 1290
+f 1301 1302 1298
+f 1302 1303 1298
+f 1298 1304 1299
+f 1303 1304 1298
+f 1293 1294 1290
+f 1305 1306 1307
+f 1305 1307 1308
+f 1309 1308 1310
+f 1309 1305 1308
+f 1296 1310 1298
+f 1295 1310 1296
+f 1294 1309 1310
+f 1294 1310 1295
+f 1308 1307 1311
+f 1308 1311 1312
+f 1310 1312 1313
+f 1310 1308 1312
+f 1298 1313 1301
+f 1298 1310 1313
+f 1312 1311 1314
+f 1312 1314 1315
+f 1313 1312 1315
+f 1303 1316 1304
+f 1302 1316 1303
+f 1301 1315 1316
+f 1301 1313 1315
+f 1301 1316 1302
+f 1315 1314 1317
+f 1315 1317 1318
+f 1316 1318 1319
+f 1316 1315 1318
+f 1304 1319 1299
+f 1304 1316 1319
+f 1317 1320 1321
+f 1318 1321 1322
+f 1318 1322 1290
+f 1318 1317 1321
+f 1319 1290 1300
+f 1319 1318 1290
+f 1297 1319 1300
+f 1299 1319 1297
+f 1321 1320 1323
+f 1321 1323 1324
+f 1322 1324 1325
+f 1322 1321 1324
+f 1290 1325 1291
+f 1290 1322 1325
+f 1326 1323 1327
+f 1324 1323 1326
+f 1328 1324 1326
+f 1325 1328 1293
+f 1325 1324 1328
+f 1292 1325 1293
+f 1289 1325 1292
+f 1291 1325 1289
+f 1326 1327 1306
+f 1326 1306 1305
+f 1328 1305 1309
+f 1328 1326 1305
+f 1293 1309 1294
+f 1293 1328 1309
+f 1320 1327 1323
+f 1306 1327 1320
+f 1307 1306 1320
+f 1317 1307 1320
+f 1314 1311 1307
+f 1314 1307 1317
+f 1329 1330 1331
+f 1329 1331 1332
+f 1333 1332 1334
+f 1333 1329 1332
+f 1335 1334 1336
+f 1335 1333 1334
+f 1337 1338 1339
+f 1340 1338 1337
+f 1341 1340 1337
+f 1331 1341 1337
+f 1330 1342 1341
+f 1330 1341 1331
+f 1343 1330 1329
+f 1343 1342 1330
+f 1333 1343 1329
+f 1344 1343 1333
+f 1335 1344 1333
+f 1345 1344 1335
+f 1346 1347 1348
+f 1346 1349 1347
+f 1349 1350 1347
+f 1350 1336 1347
+f 1345 1335 1350
+f 1350 1335 1336
+f 1351 1331 1337
+f 1332 1331 1351
+f 1334 1351 1352
+f 1334 1332 1351
+f 1336 1352 1347
+f 1336 1334 1352
+f 1351 1337 1339
+f 1351 1339 1353
+f 1352 1353 1354
+f 1352 1351 1353
+f 1347 1354 1348
+f 1347 1352 1354
+f 1355 1339 1338
+f 1353 1339 1355
+f 1354 1355 1356
+f 1354 1353 1355
+f 1348 1356 1346
+f 1348 1354 1356
+f 1355 1338 1340
+f 1355 1340 1357
+f 1356 1357 1358
+f 1356 1355 1357
+f 1346 1358 1349
+f 1346 1356 1358
+f 1357 1340 1341
+f 1357 1341 1359
+f 1360 1357 1359
+f 1358 1357 1360
+f 1350 1358 1360
+f 1349 1358 1350
+f 1359 1341 1342
+f 1359 1342 1343
+f 1360 1343 1344
+f 1360 1359 1343
+f 1350 1344 1345
+f 1350 1360 1344
+f 1361 1362 1363
+f 1361 1363 1364
+f 1365 1364 1366
+f 1365 1361 1364
+f 1367 1366 1368
+f 1367 1365 1366
+f 1369 1370 1371
+f 1372 1370 1369
+f 1373 1372 1369
+f 1363 1373 1369
+f 1362 1374 1373
+f 1362 1373 1363
+f 1375 1374 1362
+f 1375 1362 1361
+f 1365 1375 1361
+f 1376 1375 1365
+f 1367 1376 1365
+f 1377 1376 1367
+f 1378 1379 1380
+f 1378 1381 1379
+f 1381 1382 1379
+f 1382 1368 1379
+f 1377 1367 1382
+f 1382 1367 1368
+f 1383 1363 1369
+f 1364 1363 1383
+f 1366 1383 1384
+f 1366 1364 1383
+f 1368 1384 1379
+f 1368 1366 1384
+f 1383 1369 1371
+f 1383 1371 1385
+f 1384 1385 1386
+f 1384 1383 1385
+f 1379 1386 1380
+f 1379 1384 1386
+f 1387 1371 1370
+f 1385 1371 1387
+f 1386 1387 1388
+f 1386 1385 1387
+f 1380 1388 1378
+f 1380 1386 1388
+f 1387 1370 1372
+f 1387 1372 1389
+f 1388 1389 1390
+f 1388 1387 1389
+f 1378 1390 1381
+f 1378 1388 1390
+f 1389 1372 1373
+f 1389 1373 1391
+f 1392 1389 1391
+f 1390 1389 1392
+f 1382 1390 1392
+f 1381 1390 1382
+f 1391 1373 1374
+f 1391 1374 1375
+f 1392 1375 1376
+f 1392 1391 1375
+f 1382 1376 1377
+f 1382 1392 1376
+f 1393 1394 1395
+f 1393 1395 1396
+f 1397 1396 1398
+f 1397 1393 1396
+f 1399 1398 1400
+f 1399 1397 1398
+f 1401 1402 1403
+f 1404 1402 1401
+f 1405 1404 1401
+f 1395 1405 1401
+f 1394 1406 1405
+f 1394 1405 1395
+f 1407 1406 1394
+f 1407 1394 1393
+f 1397 1407 1393
+f 1408 1407 1397
+f 1399 1408 1397
+f 1409 1408 1399
+f 1410 1411 1412
+f 1410 1413 1411
+f 1413 1414 1411
+f 1414 1400 1411
+f 1409 1399 1414
+f 1414 1399 1400
+f 1415 1395 1401
+f 1396 1395 1415
+f 1398 1415 1416
+f 1398 1396 1415
+f 1400 1416 1411
+f 1400 1398 1416
+f 1415 1401 1403
+f 1415 1403 1417
+f 1416 1417 1418
+f 1416 1415 1417
+f 1411 1418 1412
+f 1411 1416 1418
+f 1419 1403 1402
+f 1417 1403 1419
+f 1418 1419 1420
+f 1418 1417 1419
+f 1412 1420 1410
+f 1412 1418 1420
+f 1419 1402 1404
+f 1419 1404 1421
+f 1420 1421 1422
+f 1420 1419 1421
+f 1410 1422 1413
+f 1410 1420 1422
+f 1421 1404 1405
+f 1421 1405 1423
+f 1424 1421 1423
+f 1422 1421 1424
+f 1414 1422 1424
+f 1413 1422 1414
+f 1423 1405 1406
+f 1423 1406 1407
+f 1424 1407 1408
+f 1424 1423 1407
+f 1414 1408 1409
+f 1414 1424 1408
+f 1425 1426 1427
+f 1425 1427 1428
+f 1429 1428 1430
+f 1429 1425 1428
+f 1431 1430 1432
+f 1431 1429 1430
+f 1433 1434 1435
+f 1436 1434 1433
+f 1437 1436 1433
+f 1427 1437 1433
+f 1426 1438 1437
+f 1426 1437 1427
+f 1439 1438 1426
+f 1439 1426 1425
+f 1429 1439 1425
+f 1440 1439 1429
+f 1431 1440 1429
+f 1441 1440 1431
+f 1442 1443 1444
+f 1442 1445 1443
+f 1445 1446 1443
+f 1446 1432 1443
+f 1441 1431 1446
+f 1446 1431 1432
+f 1447 1427 1433
+f 1428 1427 1447
+f 1430 1447 1448
+f 1430 1428 1447
+f 1432 1448 1443
+f 1432 1430 1448
+f 1447 1433 1435
+f 1447 1435 1449
+f 1448 1449 1450
+f 1448 1447 1449
+f 1443 1450 1444
+f 1443 1448 1450
+f 1451 1435 1434
+f 1449 1435 1451
+f 1450 1451 1452
+f 1450 1449 1451
+f 1444 1452 1442
+f 1444 1450 1452
+f 1451 1434 1436
+f 1451 1436 1453
+f 1452 1453 1454
+f 1452 1451 1453
+f 1442 1454 1445
+f 1442 1452 1454
+f 1453 1436 1437
+f 1453 1437 1455
+f 1456 1453 1455
+f 1454 1453 1456
+f 1446 1454 1456
+f 1445 1454 1446
+f 1455 1437 1438
+f 1455 1438 1439
+f 1456 1439 1440
+f 1456 1455 1439
+f 1446 1440 1441
+f 1446 1456 1440
+f 1457 1458 1459
+f 1457 1459 1460
+f 1461 1460 1462
+f 1461 1457 1460
+f 1463 1462 1464
+f 1463 1461 1462
+f 1465 1466 1467
+f 1468 1466 1465
+f 1469 1468 1465
+f 1459 1469 1465
+f 1458 1470 1469
+f 1458 1469 1459
+f 1471 1470 1458
+f 1471 1458 1457
+f 1461 1471 1457
+f 1472 1471 1461
+f 1463 1472 1461
+f 1473 1472 1463
+f 1474 1475 1476
+f 1474 1477 1475
+f 1477 1478 1475
+f 1478 1464 1475
+f 1473 1463 1478
+f 1478 1463 1464
+f 1479 1459 1465
+f 1460 1459 1479
+f 1462 1479 1480
+f 1462 1460 1479
+f 1464 1480 1475
+f 1464 1462 1480
+f 1481 1468 1469
+f 1481 1469 1482
+f 1483 1481 1482
+f 1484 1481 1483
+f 1478 1484 1483
+f 1477 1484 1478
+f 1482 1469 1470
+f 1482 1470 1471
+f 1483 1471 1472
+f 1483 1482 1471
+f 1478 1472 1473
+f 1478 1483 1472
+f 1479 1465 1467
+f 1479 1467 1485
+f 1480 1485 1486
+f 1480 1479 1485
+f 1475 1486 1476
+f 1475 1480 1486
+f 1487 1467 1466
+f 1485 1467 1487
+f 1486 1487 1488
+f 1486 1485 1487
+f 1476 1488 1474
+f 1476 1486 1488
+f 1487 1466 1468
+f 1487 1468 1481
+f 1488 1481 1484
+f 1488 1487 1481
+f 1474 1484 1477
+f 1474 1488 1484
+f 1489 1490 1491
+f 1489 1491 1492
+f 1493 1492 1494
+f 1493 1489 1492
+f 1495 1494 1496
+f 1495 1493 1494
+f 1497 1498 1499
+f 1500 1498 1497
+f 1501 1500 1497
+f 1491 1501 1497
+f 1490 1502 1501
+f 1490 1501 1491
+f 1503 1502 1490
+f 1503 1490 1489
+f 1504 1489 1493
+f 1504 1503 1489
+f 1495 1504 1493
+f 1505 1504 1495
+f 1506 1507 1508
+f 1506 1509 1507
+f 1509 1510 1507
+f 1510 1496 1507
+f 1505 1495 1510
+f 1510 1495 1496
+f 1511 1491 1497
+f 1492 1491 1511
+f 1512 1492 1511
+f 1494 1492 1512
+f 1496 1512 1507
+f 1496 1494 1512
+f 1513 1500 1501
+f 1513 1501 1514
+f 1515 1514 1516
+f 1515 1513 1514
+f 1510 1515 1516
+f 1509 1515 1510
+f 1514 1501 1502
+f 1514 1502 1503
+f 1516 1503 1504
+f 1516 1514 1503
+f 1510 1504 1505
+f 1510 1516 1504
+f 1511 1497 1499
+f 1511 1499 1517
+f 1512 1517 1518
+f 1512 1511 1517
+f 1507 1518 1508
+f 1507 1512 1518
+f 1519 1499 1498
+f 1517 1499 1519
+f 1520 1517 1519
+f 1518 1517 1520
+f 1508 1520 1506
+f 1508 1518 1520
+f 1519 1498 1500
+f 1519 1500 1513
+f 1520 1513 1515
+f 1520 1519 1513
+f 1506 1515 1509
+f 1506 1520 1515
+f 1521 1522 1523
+f 1521 1523 1524
+f 1525 1524 1526
+f 1525 1521 1524
+f 1527 1526 1528
+f 1527 1525 1526
+f 1529 1530 1531
+f 1532 1530 1529
+f 1533 1532 1529
+f 1523 1533 1529
+f 1522 1534 1533
+f 1522 1533 1523
+f 1535 1534 1522
+f 1535 1522 1521
+f 1536 1521 1525
+f 1536 1535 1521
+f 1527 1536 1525
+f 1537 1536 1527
+f 1538 1539 1540
+f 1538 1541 1539
+f 1541 1542 1539
+f 1542 1528 1539
+f 1537 1527 1542
+f 1542 1527 1528
+f 1543 1523 1529
+f 1524 1523 1543
+f 1544 1524 1543
+f 1526 1524 1544
+f 1528 1544 1539
+f 1528 1526 1544
+f 1545 1532 1533
+f 1545 1533 1546
+f 1547 1546 1548
+f 1547 1545 1546
+f 1541 1548 1542
+f 1541 1547 1548
+f 1546 1533 1534
+f 1546 1534 1535
+f 1548 1535 1536
+f 1548 1546 1535
+f 1542 1536 1537
+f 1542 1548 1536
+f 1543 1529 1531
+f 1543 1531 1549
+f 1544 1549 1550
+f 1544 1543 1549
+f 1539 1550 1540
+f 1539 1544 1550
+f 1551 1531 1530
+f 1549 1531 1551
+f 1552 1549 1551
+f 1550 1549 1552
+f 1538 1550 1552
+f 1540 1550 1538
+f 1551 1530 1532
+f 1551 1532 1545
+f 1552 1545 1547
+f 1552 1551 1545
+f 1538 1547 1541
+f 1538 1552 1547
+f 1553 1554 1555
+f 1553 1555 1556
+f 1557 1556 1558
+f 1557 1553 1556
+f 1559 1558 1560
+f 1559 1557 1558
+f 1561 1562 1563
+f 1564 1562 1561
+f 1565 1564 1561
+f 1555 1565 1561
+f 1554 1566 1565
+f 1554 1565 1555
+f 1567 1566 1554
+f 1567 1554 1553
+f 1568 1553 1557
+f 1568 1567 1553
+f 1569 1557 1559
+f 1569 1568 1557
+f 1570 1571 1572
+f 1570 1573 1571
+f 1573 1574 1571
+f 1574 1560 1571
+f 1569 1559 1574
+f 1574 1559 1560
+f 1575 1555 1561
+f 1556 1555 1575
+f 1576 1556 1575
+f 1558 1556 1576
+f 1571 1558 1576
+f 1560 1558 1571
+f 1577 1564 1565
+f 1577 1565 1578
+f 1579 1578 1580
+f 1579 1577 1578
+f 1573 1580 1574
+f 1573 1579 1580
+f 1578 1565 1566
+f 1578 1566 1567
+f 1580 1567 1568
+f 1580 1578 1567
+f 1574 1568 1569
+f 1574 1580 1568
+f 1575 1561 1563
+f 1575 1563 1581
+f 1576 1581 1582
+f 1576 1575 1581
+f 1571 1582 1572
+f 1571 1576 1582
+f 1583 1563 1562
+f 1581 1563 1583
+f 1584 1581 1583
+f 1582 1581 1584
+f 1570 1582 1584
+f 1572 1582 1570
+f 1583 1562 1564
+f 1583 1564 1577
+f 1584 1577 1579
+f 1584 1583 1577
+f 1570 1579 1573
+f 1570 1584 1579
+f 1585 1586 1587
+f 1588 1585 1589
+f 1588 1590 1585
+f 1590 1586 1585
+f 1591 1590 1588
+f 1591 1588 1592
+f 1593 1592 1594
+f 1593 1591 1592
+f 1595 1594 1596
+f 1595 1593 1594
+f 1592 1588 1589
+f 1592 1589 1597
+f 1594 1597 1598
+f 1594 1592 1597
+f 1596 1598 1599
+f 1596 1594 1598
+f 1600 1589 1585
+f 1597 1589 1600
+f 1601 1597 1600
+f 1598 1597 1601
+f 1602 1598 1601
+f 1599 1598 1602
+f 1600 1585 1587
+f 1600 1587 1603
+f 1601 1603 1604
+f 1601 1600 1603
+f 1602 1604 1605
+f 1602 1601 1604
+f 1606 1587 1586
+f 1603 1587 1606
+f 1607 1603 1606
+f 1604 1603 1607
+f 1608 1604 1607
+f 1605 1604 1608
+f 1590 1591 1586
+f 1586 1591 1606
+f 1606 1593 1607
+f 1591 1593 1606
+f 1607 1595 1608
+f 1593 1595 1607
+f 1608 1602 1605
+f 1602 1596 1599
+f 1595 1596 1602
+f 1608 1595 1602
+f 1609 1610 1611
+f 1609 1611 1612
+f 1613 1612 1614
+f 1613 1609 1612
+f 1615 1614 1616
+f 1615 1613 1614
+f 1617 1618 1619
+f 1620 1618 1617
+f 1621 1620 1617
+f 1622 1611 1610
+f 1622 1610 1623
+f 1622 1623 1621
+f 1622 1617 1611
+f 1622 1621 1617
+f 1624 1623 1610
+f 1624 1610 1609
+f 1613 1624 1609
+f 1625 1624 1613
+f 1615 1625 1613
+f 1626 1625 1615
+f 1627 1628 1629
+f 1627 1630 1628
+f 1630 1631 1628
+f 1616 1632 1615
+f 1615 1632 1626
+f 1626 1632 1631
+f 1628 1632 1616
+f 1631 1632 1628
+f 1633 1611 1617
+f 1612 1611 1633
+f 1614 1633 1634
+f 1614 1612 1633
+f 1616 1634 1628
+f 1616 1614 1634
+f 1633 1617 1619
+f 1633 1619 1635
+f 1634 1635 1636
+f 1634 1633 1635
+f 1628 1636 1629
+f 1628 1634 1636
+f 1637 1619 1618
+f 1635 1619 1637
+f 1636 1637 1638
+f 1636 1635 1637
+f 1629 1638 1627
+f 1629 1636 1638
+f 1637 1618 1620
+f 1637 1620 1639
+f 1638 1639 1640
+f 1638 1637 1639
+f 1627 1640 1630
+f 1627 1638 1640
+f 1639 1620 1621
+f 1639 1621 1641
+f 1642 1639 1641
+f 1640 1639 1642
+f 1631 1640 1642
+f 1630 1640 1631
+f 1641 1621 1623
+f 1641 1623 1624
+f 1642 1624 1625
+f 1642 1641 1624
+f 1631 1625 1626
+f 1631 1642 1625
+f 1643 1644 1645
+f 1643 1645 1646
+f 1647 1646 1648
+f 1647 1643 1646
+f 1649 1648 1650
+f 1649 1647 1648
+f 1651 1652 1653
+f 1654 1652 1651
+f 1655 1654 1651
+f 1656 1645 1644
+f 1656 1644 1657
+f 1656 1657 1655
+f 1656 1651 1645
+f 1656 1655 1651
+f 1658 1657 1644
+f 1658 1644 1643
+f 1647 1658 1643
+f 1659 1658 1647
+f 1649 1659 1647
+f 1660 1659 1649
+f 1661 1662 1663
+f 1661 1664 1662
+f 1664 1665 1662
+f 1650 1666 1649
+f 1649 1666 1660
+f 1660 1666 1665
+f 1662 1666 1650
+f 1665 1666 1662
+f 1667 1645 1651
+f 1646 1645 1667
+f 1648 1667 1668
+f 1648 1646 1667
+f 1650 1668 1662
+f 1650 1648 1668
+f 1667 1651 1653
+f 1667 1653 1669
+f 1668 1669 1670
+f 1668 1667 1669
+f 1662 1670 1663
+f 1662 1668 1670
+f 1671 1653 1652
+f 1669 1653 1671
+f 1670 1671 1672
+f 1670 1669 1671
+f 1663 1672 1661
+f 1663 1670 1672
+f 1671 1652 1654
+f 1671 1654 1673
+f 1672 1673 1674
+f 1672 1671 1673
+f 1661 1674 1664
+f 1661 1672 1674
+f 1673 1654 1655
+f 1673 1655 1675
+f 1676 1673 1675
+f 1674 1673 1676
+f 1665 1674 1676
+f 1664 1674 1665
+f 1675 1655 1657
+f 1675 1657 1658
+f 1676 1658 1659
+f 1676 1675 1658
+f 1665 1659 1660
+f 1665 1676 1659
+f 1677 1678 1679
+f 1677 1679 1680
+f 1681 1680 1682
+f 1681 1677 1680
+f 1683 1682 1684
+f 1683 1681 1682
+f 1685 1686 1687
+f 1688 1686 1685
+f 1689 1688 1685
+f 1690 1679 1678
+f 1690 1678 1691
+f 1690 1691 1689
+f 1690 1685 1679
+f 1690 1689 1685
+f 1692 1691 1678
+f 1692 1678 1677
+f 1681 1692 1677
+f 1693 1692 1681
+f 1683 1693 1681
+f 1694 1693 1683
+f 1695 1696 1697
+f 1695 1698 1696
+f 1698 1699 1696
+f 1684 1700 1683
+f 1683 1700 1694
+f 1694 1700 1699
+f 1696 1700 1684
+f 1699 1700 1696
+f 1701 1679 1685
+f 1680 1679 1701
+f 1682 1701 1702
+f 1682 1680 1701
+f 1684 1702 1696
+f 1684 1682 1702
+f 1701 1685 1687
+f 1701 1687 1703
+f 1702 1703 1704
+f 1702 1701 1703
+f 1696 1704 1697
+f 1696 1702 1704
+f 1705 1687 1686
+f 1703 1687 1705
+f 1704 1705 1706
+f 1704 1703 1705
+f 1697 1706 1695
+f 1697 1704 1706
+f 1705 1686 1688
+f 1705 1688 1707
+f 1706 1707 1708
+f 1706 1705 1707
+f 1695 1708 1698
+f 1695 1706 1708
+f 1707 1688 1689
+f 1707 1689 1709
+f 1710 1707 1709
+f 1708 1707 1710
+f 1699 1708 1710
+f 1698 1708 1699
+f 1709 1689 1691
+f 1709 1691 1692
+f 1710 1692 1693
+f 1710 1709 1692
+f 1699 1693 1694
+f 1699 1710 1693
+f 1711 1712 1713
+f 1711 1713 1714
+f 1715 1714 1716
+f 1715 1711 1714
+f 1717 1716 1718
+f 1717 1715 1716
+f 1719 1720 1721
+f 1722 1720 1719
+f 1723 1722 1719
+f 1724 1713 1712
+f 1724 1712 1725
+f 1724 1725 1723
+f 1724 1719 1713
+f 1724 1723 1719
+f 1726 1725 1712
+f 1726 1712 1711
+f 1715 1726 1711
+f 1727 1726 1715
+f 1717 1727 1715
+f 1728 1727 1717
+f 1729 1730 1731
+f 1729 1732 1730
+f 1732 1733 1730
+f 1718 1734 1717
+f 1717 1734 1728
+f 1728 1734 1733
+f 1730 1734 1718
+f 1733 1734 1730
+f 1735 1713 1719
+f 1714 1713 1735
+f 1716 1735 1736
+f 1716 1714 1735
+f 1718 1736 1730
+f 1718 1716 1736
+f 1735 1719 1721
+f 1735 1721 1737
+f 1736 1737 1738
+f 1736 1735 1737
+f 1730 1738 1731
+f 1730 1736 1738
+f 1739 1721 1720
+f 1737 1721 1739
+f 1738 1739 1740
+f 1738 1737 1739
+f 1731 1740 1729
+f 1731 1738 1740
+f 1739 1720 1722
+f 1739 1722 1741
+f 1740 1741 1742
+f 1740 1739 1741
+f 1729 1742 1732
+f 1729 1740 1742
+f 1741 1722 1723
+f 1741 1723 1743
+f 1744 1741 1743
+f 1742 1741 1744
+f 1733 1742 1744
+f 1732 1742 1733
+f 1743 1723 1725
+f 1743 1725 1726
+f 1744 1726 1727
+f 1744 1743 1726
+f 1733 1727 1728
+f 1733 1744 1727
+f 1745 1746 1747
+f 1745 1747 1748
+f 1749 1748 1750
+f 1749 1745 1748
+f 1751 1750 1752
+f 1751 1749 1750
+f 1753 1754 1755
+f 1756 1754 1753
+f 1757 1756 1753
+f 1758 1753 1747
+f 1758 1747 1746
+f 1758 1746 1759
+f 1758 1759 1757
+f 1758 1757 1753
+f 1760 1759 1746
+f 1760 1746 1745
+f 1749 1760 1745
+f 1761 1760 1749
+f 1751 1761 1749
+f 1762 1761 1751
+f 1763 1764 1765
+f 1763 1766 1764
+f 1766 1767 1764
+f 1764 1768 1752
+f 1752 1768 1751
+f 1751 1768 1762
+f 1762 1768 1767
+f 1767 1768 1764
+f 1769 1747 1753
+f 1748 1747 1769
+f 1750 1769 1770
+f 1750 1748 1769
+f 1752 1770 1764
+f 1752 1750 1770
+f 1771 1756 1757
+f 1771 1757 1772
+f 1773 1771 1772
+f 1774 1771 1773
+f 1767 1774 1773
+f 1766 1774 1767
+f 1772 1757 1759
+f 1772 1759 1760
+f 1773 1760 1761
+f 1773 1772 1760
+f 1767 1761 1762
+f 1767 1773 1761
+f 1769 1753 1755
+f 1769 1755 1775
+f 1770 1775 1776
+f 1770 1769 1775
+f 1764 1776 1765
+f 1764 1770 1776
+f 1777 1755 1754
+f 1775 1755 1777
+f 1776 1777 1778
+f 1776 1775 1777
+f 1765 1778 1763
+f 1765 1776 1778
+f 1777 1754 1756
+f 1777 1756 1771
+f 1778 1771 1774
+f 1778 1777 1771
+f 1763 1774 1766
+f 1763 1778 1774
+f 1779 1780 1781
+f 1779 1781 1782
+f 1783 1782 1784
+f 1783 1779 1782
+f 1785 1784 1786
+f 1785 1783 1784
+f 1787 1788 1789
+f 1790 1788 1787
+f 1791 1790 1787
+f 1792 1787 1781
+f 1792 1781 1780
+f 1792 1780 1793
+f 1792 1793 1791
+f 1792 1791 1787
+f 1794 1793 1780
+f 1794 1780 1779
+f 1795 1779 1783
+f 1795 1794 1779
+f 1785 1795 1783
+f 1796 1795 1785
+f 1797 1798 1799
+f 1797 1800 1798
+f 1800 1801 1798
+f 1798 1802 1786
+f 1786 1802 1785
+f 1785 1802 1796
+f 1796 1802 1801
+f 1801 1802 1798
+f 1803 1781 1787
+f 1782 1781 1803
+f 1804 1782 1803
+f 1784 1782 1804
+f 1786 1804 1798
+f 1786 1784 1804
+f 1805 1790 1791
+f 1805 1791 1806
+f 1807 1806 1808
+f 1807 1805 1806
+f 1801 1807 1808
+f 1800 1807 1801
+f 1806 1791 1793
+f 1806 1793 1794
+f 1808 1794 1795
+f 1808 1806 1794
+f 1801 1795 1796
+f 1801 1808 1795
+f 1803 1787 1789
+f 1803 1789 1809
+f 1804 1809 1810
+f 1804 1803 1809
+f 1798 1810 1799
+f 1798 1804 1810
+f 1811 1789 1788
+f 1809 1789 1811
+f 1812 1809 1811
+f 1810 1809 1812
+f 1799 1812 1797
+f 1799 1810 1812
+f 1811 1788 1790
+f 1811 1790 1805
+f 1812 1805 1807
+f 1812 1811 1805
+f 1797 1807 1800
+f 1797 1812 1807
+f 1813 1814 1815
+f 1813 1815 1816
+f 1817 1816 1818
+f 1817 1813 1816
+f 1819 1818 1820
+f 1819 1817 1818
+f 1821 1822 1823
+f 1824 1822 1821
+f 1825 1824 1821
+f 1826 1821 1815
+f 1826 1815 1814
+f 1826 1814 1827
+f 1826 1827 1825
+f 1826 1825 1821
+f 1828 1827 1814
+f 1828 1814 1813
+f 1829 1813 1817
+f 1829 1828 1813
+f 1819 1829 1817
+f 1830 1829 1819
+f 1831 1832 1833
+f 1831 1834 1832
+f 1834 1835 1832
+f 1832 1836 1820
+f 1820 1836 1819
+f 1819 1836 1830
+f 1830 1836 1835
+f 1835 1836 1832
+f 1837 1815 1821
+f 1816 1815 1837
+f 1838 1816 1837
+f 1818 1816 1838
+f 1820 1838 1832
+f 1820 1818 1838
+f 1839 1824 1825
+f 1839 1825 1840
+f 1841 1840 1842
+f 1841 1839 1840
+f 1835 1841 1842
+f 1834 1841 1835
+f 1840 1825 1827
+f 1840 1827 1828
+f 1842 1828 1829
+f 1842 1840 1828
+f 1835 1829 1830
+f 1835 1842 1829
+f 1837 1821 1823
+f 1837 1823 1843
+f 1838 1843 1844
+f 1838 1837 1843
+f 1832 1844 1833
+f 1832 1838 1844
+f 1845 1823 1822
+f 1843 1823 1845
+f 1846 1843 1845
+f 1844 1843 1846
+f 1833 1846 1831
+f 1833 1844 1846
+f 1845 1822 1824
+f 1845 1824 1839
+f 1846 1839 1841
+f 1846 1845 1839
+f 1831 1841 1834
+f 1831 1846 1841
+f 1847 1848 1849
+f 1847 1849 1850
+f 1851 1850 1852
+f 1851 1847 1850
+f 1853 1852 1854
+f 1853 1851 1852
+f 1855 1856 1857
+f 1858 1856 1855
+f 1859 1858 1855
+f 1860 1855 1849
+f 1860 1849 1848
+f 1860 1848 1861
+f 1860 1861 1859
+f 1860 1859 1855
+f 1862 1861 1848
+f 1862 1848 1847
+f 1863 1847 1851
+f 1863 1862 1847
+f 1853 1863 1851
+f 1864 1863 1853
+f 1865 1866 1867
+f 1865 1868 1866
+f 1868 1869 1866
+f 1866 1870 1854
+f 1854 1870 1853
+f 1853 1870 1864
+f 1864 1870 1869
+f 1869 1870 1866
+f 1871 1849 1855
+f 1850 1849 1871
+f 1872 1850 1871
+f 1852 1850 1872
+f 1854 1872 1866
+f 1854 1852 1872
+f 1873 1858 1859
+f 1873 1859 1874
+f 1875 1874 1876
+f 1875 1873 1874
+f 1869 1875 1876
+f 1868 1875 1869
+f 1874 1859 1861
+f 1874 1861 1862
+f 1876 1862 1863
+f 1876 1874 1862
+f 1869 1863 1864
+f 1869 1876 1863
+f 1871 1855 1857
+f 1871 1857 1877
+f 1872 1877 1878
+f 1872 1871 1877
+f 1866 1878 1867
+f 1866 1872 1878
+f 1879 1857 1856
+f 1877 1857 1879
+f 1880 1877 1879
+f 1878 1877 1880
+f 1867 1880 1865
+f 1867 1878 1880
+f 1879 1856 1858
+f 1879 1858 1873
+f 1880 1873 1875
+f 1880 1879 1873
+f 1865 1875 1868
+f 1865 1880 1875
+f 1881 1882 1883
+f 1884 1882 1881
+f 1885 1886 1884
+f 1885 1881 1887
+f 1885 1887 1886
+f 1885 1884 1881
+f 1888 1884 1886
+f 1888 1886 1889
+f 1890 1889 1891
+f 1890 1888 1889
+f 1892 1890 1891
+f 1893 1890 1892
+f 1889 1886 1887
+f 1889 1887 1894
+f 1891 1894 1895
+f 1891 1889 1894
+f 1892 1895 1896
+f 1892 1891 1895
+f 1897 1887 1881
+f 1894 1887 1897
+f 1898 1894 1897
+f 1895 1894 1898
+f 1896 1898 1899
+f 1896 1895 1898
+f 1897 1881 1883
+f 1897 1883 1900
+f 1898 1900 1901
+f 1898 1897 1900
+f 1899 1901 1902
+f 1899 1898 1901
+f 1900 1883 1882
+f 1900 1882 1903
+f 1904 1900 1903
+f 1901 1900 1904
+f 1905 1901 1904
+f 1902 1901 1905
+f 1884 1888 1882
+f 1882 1888 1903
+f 1903 1890 1904
+f 1888 1890 1903
+f 1904 1893 1905
+f 1890 1893 1904
+f 1905 1899 1902
+f 1905 1893 1899
+f 1892 1906 1893
+f 1899 1906 1896
+f 1896 1906 1892
+f 1893 1906 1899
+o Top cover
+v -18.363129 -7.673147 7.300000
+v -17.169716 -3.918774 7.300000
+v -16.347300 -7.673147 7.300000
+v -15.500000 -8.097411 7.300000
+v -16.766270 0.000000 7.300000
+v -18.363129 7.673147 7.300000
+v -16.347300 7.673147 7.300000
+v -17.169716 3.918774 7.300000
+v -15.500000 8.097411 7.300000
+v -18.363129 -7.673147 7.600000
+v -17.169716 -3.918774 7.600000
+v -16.766270 0.000000 7.600000
+v -17.169716 3.918774 7.600000
+v -18.363129 7.673147 7.600000
+v -16.347300 7.673147 7.600000
+v -15.000000 8.347774 8.142759
+v -15.500000 8.097411 7.600000
+v -15.000000 8.347774 8.442760
+v -14.447148 -8.029615 8.858998
+v -15.000000 -8.347774 8.142759
+v -13.834356 -7.676961 9.482644
+v -13.815109 -4.658575 9.500000
+v -12.757531 -7.057263 10.297261
+v -14.296200 -2.859758 9.026673
+v -14.545087 -0.999999 8.744509
+v -14.545087 0.999999 8.744509
+v -14.296241 2.859554 9.026629
+v -13.815109 4.658575 9.500000
+v -14.447143 8.029632 8.859005
+v -13.834341 7.676994 9.482657
+v -12.757498 7.057323 10.297282
+v -15.500000 -8.097411 7.600000
+v -15.000000 -8.347774 8.442760
+v -16.347300 -7.673147 7.600000
+v -14.447012 -8.029537 9.159155
+v -14.130032 -3.591902 9.500000
+v -13.834263 -7.676908 9.782728
+v -12.757531 -7.057263 10.597261
+v -14.545087 -0.999999 9.044509
+v -14.545087 0.999999 9.044509
+v -14.130032 3.591902 9.500000
+v -14.447006 8.029553 9.159162
+v -13.834248 7.676941 9.782742
+v -12.757498 7.057323 10.597282
+v -13.929116 4.305726 9.500000
+v -14.034113 3.950091 9.500000
+v -14.034113 -3.950091 9.500000
+v -13.929116 -4.305726 9.500000
+v -10.974120 -9.137351 11.162917
+v -5.821436 -9.333322 12.118193
+v -9.400000 -10.750000 11.621378
+v -10.415242 9.769608 11.351341
+v -5.821436 9.333322 12.118193
+v -11.315315 8.711266 11.031305
+v -9.400000 10.750000 11.621378
+v -12.480107 -6.940420 10.464781
+v -6.614488 -5.500001 12.043424
+v -12.467851 -6.962414 10.471852
+v -11.783096 -8.067288 10.827478
+v -4.067815 -10.220219 12.231676
+v -13.815109 -3.614591 9.500000
+v -13.815109 3.614591 9.500000
+v -6.614488 -0.000002 12.043424
+v -14.245087 0.999999 9.081191
+v -14.245087 -0.999999 9.081191
+v -2.091726 -10.799291 12.219530
+v -0.843202 -5.500001 12.104615
+v 0.000000 -11.000000 11.985987
+v -4.078483 10.215967 12.231270
+v -6.614488 5.499998 12.043424
+v -12.480107 6.940420 10.464781
+v -12.498064 6.908032 10.454372
+v -0.843202 -0.000002 12.104615
+v 4.634663 -10.277549 11.229815
+v 3.593608 -5.500001 11.365468
+v 9.200000 -9.026744 11.175667
+v -2.097475 10.798176 12.219859
+v -0.843202 5.499998 12.104615
+v 0.000000 11.000000 11.985987
+v 3.593608 -0.000002 11.365468
+v 9.200000 9.026744 11.175667
+v 3.593608 5.499998 11.365468
+v 4.634663 10.277549 11.229815
+v 9.200000 9.026744 7.800000
+v 9.200000 -9.026744 7.800000
+v 9.800000 -8.844365 8.700000
+v 11.000000 -8.470549 8.700000
+v 11.000000 -8.470549 9.000000
+v 9.700000 -8.874983 9.000000
+v 4.889939 -10.216045 11.504923
+v 9.700000 -8.874983 11.500000
+v 9.800000 -8.844365 7.800000
+v 0.000000 -11.000000 12.285987
+v -5.821436 -9.333322 12.418193
+v -4.067109 -10.220500 12.531703
+v -2.091336 -10.799366 12.519507
+v -9.400000 -10.750000 11.921378
+v -10.974126 -9.137344 11.462914
+v -11.783104 -8.067277 11.127475
+v -12.467851 -6.962414 10.771852
+v -12.480117 -6.940425 10.764750
+v -13.429696 -4.854459 10.123848
+v -14.130032 -2.065116 9.500000
+v -14.044158 -2.585368 9.500000
+v -13.850062 -3.478256 9.768391
+v -13.939137 -3.102094 9.500000
+v -14.245087 -0.999999 9.381191
+v -14.245087 0.999999 9.381191
+v -13.939137 3.102094 9.500000
+v -14.044158 2.585367 9.500000
+v -14.130032 2.065116 9.500000
+v -13.130154 5.614407 10.347715
+v -12.498064 6.908032 10.754373
+v -13.624079 4.278666 9.965960
+v -12.480107 6.940420 10.764781
+v -10.433991 9.749580 11.645522
+v -9.400000 10.750000 11.921378
+v -11.325578 8.697919 11.327134
+v -5.821436 9.333322 12.418193
+v 0.000000 11.000000 12.285987
+v -2.097464 10.798178 12.519858
+v -4.078475 10.215970 12.531270
+v 11.000000 8.470549 8.700000
+v 9.800000 8.844365 8.700000
+v 11.000000 8.470549 9.000000
+v 9.700000 8.874983 9.000000
+v 4.889939 10.216045 11.504923
+v 9.700000 8.874983 11.500000
+v 9.800000 8.844365 7.800000
+v 10.844578 -7.983409 8.700000
+v 10.698437 -7.493405 8.700000
+v 10.561628 -7.000714 8.700000
+v 16.500006 0.000000 8.700000
+v 16.500006 -5.400000 8.700000
+v 10.561628 7.000714 8.700000
+v 10.698437 7.493405 8.700000
+v 10.844578 7.983409 8.700000
+v 16.500006 5.400000 8.700000
+v -6.614488 -5.500000 12.343424
+v -6.614488 0.000000 12.343424
+v -6.614488 5.500000 12.343424
+v 3.593608 -5.500000 11.665468
+v 3.593608 0.000000 11.665468
+v 3.593608 5.500000 11.665468
+v 10.844578 -7.983409 9.000000
+v 10.698437 -7.493405 9.000000
+v 10.561628 -7.000714 9.000000
+v 16.500006 -5.400000 9.000000
+v 16.500006 0.000000 9.000000
+v 16.500006 5.400000 9.000000
+v 10.561628 7.000714 9.000000
+v 10.698437 7.493405 9.000000
+v 10.844578 7.983409 9.000000
+f 1907 1908 1909
+f 1909 1908 1910
+f 1908 1911 1910
+f 1912 1913 1914
+f 1914 1915 1911
+f 1913 1915 1914
+f 1915 1910 1911
+f 1907 1916 1917
+f 1908 1907 1917
+f 1911 1917 1918
+f 1911 1908 1917
+f 1914 1918 1919
+f 1914 1911 1918
+f 1912 1919 1920
+f 1912 1914 1919
+f 1913 1912 1921
+f 1921 1912 1920
+f 1922 1923 1924
+f 1922 1915 1923
+f 1923 1913 1921
+f 1915 1913 1923
+f 1910 1925 1926
+f 1927 1928 1929
+f 1925 1928 1927
+f 1910 1928 1925
+f 1910 1930 1928
+f 1910 1931 1930
+f 1932 1915 1933
+f 1933 1915 1934
+f 1922 1935 1915
+f 1915 1935 1934
+f 1935 1936 1934
+f 1936 1937 1934
+f 1910 1915 1932
+f 1910 1932 1931
+f 1938 1926 1939
+f 1910 1926 1938
+f 1940 1910 1938
+f 1909 1910 1940
+f 1907 1909 1940
+f 1907 1940 1916
+f 1917 1916 1940
+f 1917 1940 1938
+f 1918 1917 1938
+f 1921 1920 1919
+f 1923 1919 1918
+f 1923 1921 1919
+f 1938 1923 1918
+f 1941 1938 1939
+f 1942 1943 1944
+f 1942 1941 1943
+f 1942 1938 1941
+f 1945 1938 1942
+f 1923 1946 1947
+f 1948 1924 1923
+f 1948 1923 1947
+f 1949 1948 1947
+f 1950 1949 1947
+f 1923 1938 1946
+f 1946 1938 1945
+f 1937 1949 1950
+f 1937 1936 1949
+f 1936 1948 1949
+f 1936 1935 1948
+f 1935 1924 1948
+f 1935 1922 1924
+f 1951 1934 1937
+f 1952 1951 1937
+f 1947 1937 1950
+f 1947 1952 1937
+f 1933 1934 1951
+f 1933 1951 1952
+f 1933 1952 1947
+f 1946 1933 1947
+f 1932 1933 1946
+f 1932 1946 1945
+f 1931 1932 1945
+f 1930 1945 1942
+f 1930 1942 1953
+f 1930 1953 1954
+f 1930 1954 1928
+f 1931 1945 1930
+f 1942 1944 1929
+f 1953 1942 1929
+f 1954 1953 1929
+f 1928 1954 1929
+f 1943 1929 1944
+f 1927 1929 1943
+f 1941 1927 1943
+f 1925 1927 1941
+f 1939 1925 1941
+f 1926 1925 1939
+f 1955 1956 1957
+f 1958 1959 1960
+f 1961 1959 1958
+f 1962 1963 1964
+f 1965 1963 1955
+f 1964 1963 1965
+f 1956 1963 1966
+f 1967 1963 1962
+f 1955 1963 1956
+f 1968 1969 1970
+f 1970 1969 1971
+f 1971 1969 1967
+f 1967 1969 1963
+f 1972 1973 1974
+f 1966 1973 1972
+f 1963 1973 1966
+f 1975 1976 1959
+f 1960 1976 1977
+f 1977 1976 1978
+f 1978 1976 1968
+f 1968 1976 1969
+f 1959 1976 1960
+f 1963 1979 1973
+f 1969 1979 1963
+f 1980 1981 1982
+f 1974 1981 1980
+f 1973 1981 1974
+f 1983 1984 1975
+f 1985 1984 1983
+f 1969 1984 1979
+f 1975 1984 1976
+f 1976 1984 1969
+f 1982 1986 1987
+f 1973 1986 1981
+f 1979 1986 1973
+f 1981 1986 1982
+f 1984 1986 1979
+f 1987 1988 1989
+f 1989 1988 1985
+f 1985 1988 1984
+f 1986 1988 1987
+f 1984 1988 1986
+f 1987 1990 1982
+f 1982 1990 1991
+f 1992 1993 1994
+f 1992 1994 1995
+f 1996 1982 1997
+f 1991 1998 1992
+f 1991 1992 1995
+f 1999 1980 1996
+f 1974 1980 1999
+f 1980 1982 1996
+f 1982 1991 1997
+f 1997 1991 1995
+f 1956 1966 2000
+f 2001 1966 2002
+f 2000 1966 2001
+f 1966 1972 2002
+f 1972 1999 2002
+f 1972 1974 1999
+f 2003 1956 2000
+f 1957 1956 2003
+f 2004 1957 2003
+f 2005 1955 2004
+f 2004 1955 1957
+f 2006 1965 2005
+f 2005 1965 1955
+f 2006 1964 1965
+f 1964 2006 2007
+f 1962 1964 2007
+f 2008 1962 2007
+f 2009 2010 2011
+f 2010 2012 2011
+f 2011 1967 2008
+f 2008 1967 1962
+f 2012 1967 2011
+f 2009 2013 2010
+f 2013 2012 2010
+f 2013 1967 2012
+f 2013 1971 1967
+f 1970 1971 2014
+f 2014 1971 2013
+f 1968 2014 2015
+f 2015 2014 2016
+f 2016 2014 2017
+f 1968 1970 2014
+f 1978 2018 2019
+f 1978 2020 2018
+f 1978 1968 2020
+f 1968 2015 2020
+f 2015 2016 2020
+f 2016 2017 2020
+f 1978 2019 1977
+f 2021 1977 2019
+f 1961 2022 2023
+f 1961 1958 2022
+f 1958 2024 2022
+f 1958 1960 2024
+f 1960 2021 2024
+f 1960 1977 2021
+f 1959 2023 2025
+f 1959 1961 2023
+f 2026 1983 2027
+f 2026 1985 1983
+f 2028 1975 2025
+f 2027 1975 2028
+f 1983 1975 2027
+f 1975 1959 2025
+f 2029 2030 2031
+f 2031 2030 2032
+f 1987 2033 2034
+f 2035 1990 2030
+f 2030 1990 2032
+f 1989 2026 2033
+f 1989 1985 2026
+f 1987 1989 2033
+f 1990 1987 2034
+f 1990 2034 2032
+f 1990 2035 1991
+f 1991 2035 1998
+f 1992 2036 1993
+f 1992 2037 2036
+f 1992 2038 2037
+f 2038 2039 2040
+f 2038 2041 2039
+f 2041 2030 2042
+f 2030 2043 2042
+f 2030 2029 2043
+f 2041 2044 2039
+f 1992 2030 2041
+f 1992 2041 2038
+f 2035 2030 1998
+f 1998 2030 1992
+f 2000 2004 2003
+f 2025 2022 2024
+f 2025 2023 2022
+f 2045 2007 2006
+f 2045 2005 2004
+f 2045 2006 2005
+f 2045 2001 2002
+f 2045 2000 2001
+f 2045 2008 2007
+f 2045 2011 2008
+f 2045 2004 2000
+f 2046 2020 2017
+f 2046 2017 2014
+f 2046 2014 2013
+f 2046 2013 2009
+f 2046 2009 2011
+f 2046 2011 2045
+f 2047 2028 2025
+f 2047 2027 2028
+f 2047 2024 2021
+f 2047 2021 2019
+f 2047 2018 2020
+f 2047 2019 2018
+f 2047 2020 2046
+f 2047 2025 2024
+f 2048 2002 1999
+f 2048 1996 1997
+f 2048 1999 1996
+f 2048 2045 2002
+f 2049 1997 2034
+f 2049 2048 1997
+f 2049 2045 2048
+f 2049 2046 2045
+f 2050 2034 2033
+f 2050 2033 2026
+f 2050 2026 2027
+f 2050 2047 2046
+f 2050 2046 2049
+f 2050 2049 2034
+f 2050 2027 2047
+f 2032 2034 1995
+f 1995 2034 1997
+f 2051 1995 1994
+f 2051 2052 1995
+f 2052 2053 1995
+f 2054 2055 2053
+f 2056 2057 2055
+f 2055 2057 2053
+f 2058 2032 2057
+f 2059 2032 2058
+f 2031 2032 2059
+f 2032 1995 2057
+f 2057 1995 2053
+f 2038 2053 2052
+f 2037 2038 2052
+f 2036 2052 2051
+f 2036 2037 2052
+f 1993 2051 1994
+f 1993 2036 2051
+f 2043 2029 2031
+f 2043 2031 2059
+f 2042 2059 2058
+f 2042 2043 2059
+f 2041 2058 2057
+f 2041 2042 2058
+f 2044 2041 2056
+f 2056 2041 2057
+f 2044 2056 2055
+f 2044 2055 2039
+f 2039 2055 2054
+f 2039 2054 2040
+f 2038 2040 2054
+f 2038 2054 2053
+o Scene floor
+v 9.400000 8.966311 0.333580
+v 9.400000 -8.966311 0.333580
+v 9.400000 -8.966311 1.100000
+v 9.400000 8.966311 1.100000
+v 10.844578 -7.983409 1.100000
+v 11.000000 -8.470549 1.100000
+v 10.698437 -7.493405 1.100000
+v 10.561628 -7.000714 1.100000
+v 16.500006 0.000000 1.100000
+v 16.500006 -5.400000 1.100000
+v 10.561628 7.000714 1.100000
+v 10.698437 7.493405 1.100000
+v 10.844578 7.983409 1.100000
+v 11.000000 8.470549 1.100000
+v 16.500006 5.400000 1.100000
+v 9.700000 -8.874983 0.800000
+v 11.000000 -8.470549 0.800000
+v 9.700000 -8.874983 0.333580
+v 9.700000 8.874983 0.333580
+v 11.000000 8.470549 0.800000
+v 9.700000 8.874983 0.800000
+v 10.844578 7.983409 0.800000
+v 10.698437 7.493405 0.800000
+v 10.561628 7.000714 0.800000
+v 16.500006 5.400000 0.800000
+v 16.500006 0.000000 0.800000
+v 16.500006 -5.400000 0.800000
+v 10.561628 -7.000714 0.800000
+v 10.698437 -7.493405 0.800000
+v 10.844578 -7.983409 0.800000
+f 2060 2061 2062
+f 2063 2060 2062
+f 2064 2062 2065
+f 2066 2062 2064
+f 2067 2062 2066
+f 2068 2067 2069
+f 2070 2062 2067
+f 2070 2067 2068
+f 2063 2070 2071
+f 2063 2062 2070
+f 2072 2063 2071
+f 2073 2063 2072
+f 2074 2070 2068
+f 2075 2076 2065
+f 2062 2075 2065
+f 2061 2077 2075
+f 2061 2075 2062
+f 2077 2060 2078
+f 2061 2060 2077
+f 2079 2080 2073
+f 2080 2063 2073
+f 2078 2060 2080
+f 2080 2060 2063
+f 2081 2079 2073
+f 2081 2073 2072
+f 2082 2072 2071
+f 2082 2081 2072
+f 2083 2071 2070
+f 2083 2082 2071
+f 2084 2070 2074
+f 2084 2083 2070
+f 2084 2074 2068
+f 2084 2068 2085
+f 2085 2068 2069
+f 2085 2069 2086
+f 2087 2086 2069
+f 2087 2069 2067
+f 2087 2067 2066
+f 2088 2087 2066
+f 2089 2066 2064
+f 2089 2088 2066
+f 2076 2064 2065
+f 2076 2089 2064
+f 2078 2080 2075
+f 2078 2075 2077
+f 2075 2089 2076
+f 2088 2089 2075
+f 2087 2088 2075
+f 2085 2086 2087
+f 2083 2084 2085
+f 2083 2085 2087
+f 2080 2082 2083
+f 2080 2081 2082
+f 2080 2079 2081
+f 2075 2080 2083
+f 2075 2083 2087
+o Hall
+v -18.679955 11.273867 0.000000
+v -18.679955 -11.273867 0.000000
+v -18.679955 11.273867 13.000000
+v -18.679955 -11.273867 13.000000
+v 16.937220 11.273867 0.000000
+v 16.937220 11.273867 13.000000
+v 16.937220 -11.273867 13.000000
+v 16.937220 -11.273867 0.000000
+v 9.700000 -8.874983 9.000000
+v 10.844578 -7.983409 9.000000
+v 11.000000 -8.470549 9.000000
+v 10.698437 -7.493405 9.000000
+v 10.561628 -7.000714 9.000000
+v 16.500006 0.000000 9.000000
+v 16.500006 -5.400000 9.000000
+v 10.561628 7.000714 9.000000
+v 16.500006 5.400000 9.000000
+v 9.700000 8.874983 9.000000
+v 10.698437 7.493405 9.000000
+v 10.844578 7.983409 9.000000
+v 11.000000 8.470549 9.000000
+v 16.500006 5.400000 0.800000
+v 10.561628 7.000714 0.800000
+v 11.000000 8.470549 0.800000
+v 10.844578 7.983409 0.800000
+v 10.698437 7.493405 0.800000
+v 4.889939 10.216045 11.504923
+v 9.700000 8.874983 11.500000
+v 9.700000 8.874983 0.800000
+v 8.735205 9.165736 0.333580
+v 9.700000 8.874983 0.333580
+v 4.537972 10.300494 1.127785
+v 0.000000 11.000000 1.917642
+v 0.242290 10.996132 1.917642
+v 0.000000 11.000000 12.285987
+v 4.250000 10.367638 6.309783
+v 9.700000 -8.874983 11.500000
+v 4.889939 -10.216045 11.504923
+v 11.000000 -8.470549 0.800000
+v 9.700000 -8.874983 0.800000
+v 9.700000 -8.874983 0.333580
+v 8.735205 -9.165736 0.333580
+v 4.537972 -10.300494 1.127785
+v 0.242290 -10.996132 1.917642
+v 0.000000 -11.000000 1.917642
+v 0.000000 -11.000000 12.285987
+v 4.250000 -10.367638 6.309783
+v 10.561628 -7.000714 0.800000
+v 10.698437 -7.493405 0.800000
+v 10.844578 -7.983409 0.800000
+v 16.500006 -5.400000 0.800000
+v 16.500006 0.000000 0.800000
+v 7.574481 3.091883 0.333580
+v 7.574481 -3.091883 0.333580
+v 8.325068 7.643802 0.334739
+v 0.827200 9.753710 1.756867
+v 7.766067 4.738158 0.334739
+v 0.012693 5.503691 1.756867
+v -0.174602 3.897557 1.756865
+v 7.539946 2.778378 0.334739
+v -1.076385 3.704806 1.917642
+v 7.539945 -2.778365 0.334739
+v -0.174603 -3.897548 1.756865
+v -1.076385 -3.704806 1.917642
+v 0.012743 -5.503684 1.756858
+v 7.766084 -4.738155 0.334735
+v 8.325096 -7.643795 0.334734
+v 0.827261 -9.753695 1.756856
+v -0.522196 10.987598 1.917642
+v -0.630665 10.577136 1.917642
+v -0.348204 10.994488 1.917642
+v -0.174124 10.998622 1.917642
+v -0.734999 10.165603 1.917642
+v -0.822687 9.754105 1.917642
+v -0.826854 9.753752 1.917642
+v -0.831021 9.753398 1.917642
+v -0.835188 9.753042 1.917642
+v -1.116708 8.421274 1.917642
+v -1.367465 7.079631 1.917642
+v -1.586504 5.732177 1.917642
+v -1.661453 5.156033 1.917642
+v -1.574694 5.730580 1.917642
+v -1.728463 4.578911 1.917642
+v -1.775718 3.999167 1.917642
+v -1.787522 4.000922 1.917642
+v -1.944558 1.334837 1.917642
+v -1.944558 -1.334837 1.917642
+v -1.775718 -3.999167 1.917642
+v -1.787522 -4.000922 1.917642
+v -1.728463 -4.578911 1.917642
+v -1.661453 -5.156033 1.917642
+v -1.574694 -5.730580 1.917642
+v -1.586504 -5.732177 1.917642
+v -1.367465 -7.079632 1.917642
+v -0.822686 -9.754105 1.917642
+v -1.116708 -8.421274 1.917642
+v -0.734999 -10.165604 1.917642
+v -0.826854 -9.753752 1.917642
+v -0.831021 -9.753398 1.917642
+v -0.835188 -9.753042 1.917642
+v -0.630665 -10.577136 1.917642
+v -0.174124 -10.998622 1.917642
+v -0.348204 -10.994488 1.917642
+v -0.522196 -10.987598 1.917642
+v -2.305696 10.755639 2.251440
+v -2.097464 10.798178 12.519858
+v -4.086208 10.212879 2.572480
+v -4.078475 10.215970 12.531270
+v -5.821436 9.333322 2.874821
+v -5.821436 9.333322 12.418193
+v -10.974126 -9.137344 11.462914
+v -5.821436 -9.333322 12.418193
+v -9.400000 -10.750000 11.921378
+v -10.433998 9.749573 11.645519
+v -11.325583 8.697912 11.327132
+v -9.400000 10.750000 11.921378
+v -12.480117 -6.940425 10.764750
+v -6.614488 -5.500001 12.343424
+v -12.467851 -6.962414 10.771852
+v -11.783104 -8.067277 11.127475
+v -4.067109 -10.220500 12.531703
+v -2.091336 -10.799366 12.519507
+v -13.429695 -4.854460 10.123848
+v -13.850062 -3.478256 9.768391
+v -13.624078 4.278667 9.965960
+v -6.614488 -0.000002 12.343424
+v -14.130032 2.065116 9.500000
+v -14.245087 0.999999 9.381191
+v -14.245087 -0.999999 9.381191
+v -14.130032 -2.065116 9.500000
+v -6.614488 5.499997 12.343424
+v -12.480107 6.940420 10.764781
+v -12.498064 6.908032 10.754373
+v -13.130154 5.614407 10.347715
+v 3.593608 -5.500001 11.665468
+v 3.593608 -0.000002 11.665468
+v 3.593608 5.499997 11.665468
+v -5.821436 -9.333322 2.874821
+v -4.086186 -10.212888 2.572476
+v -2.305717 -10.755634 2.251443
+v 1.687283 -9.625524 1.759236
+v 0.827218 -9.753706 1.759236
+v 1.687283 -9.625524 1.600830
+v 2.529003 -9.423344 1.442423
+v 2.529003 -9.423344 1.600830
+v 3.364361 -9.195688 1.284017
+v 3.364361 -9.195688 1.442423
+v 4.190693 -8.955422 1.126658
+v 4.190693 -8.955422 1.284017
+v 5.025706 -8.702448 0.967205
+v 5.025706 -8.702448 1.126658
+v 5.853598 -8.444247 0.808799
+v 5.853598 -8.444247 0.967205
+v 6.680284 -8.180763 0.650392
+v 6.680284 -8.180763 0.808799
+v 7.506052 -7.913038 0.491986
+v 7.506052 -7.913038 0.650392
+v 8.325096 -7.643795 0.491986
+v 7.923257 -5.712162 0.491986
+v 8.109651 -6.681000 0.491986
+v 7.766084 -4.738155 0.491986
+v 0.012704 -5.503689 1.759236
+v 0.233730 -6.929726 1.759236
+v 0.505347 -8.346997 1.759236
+v 0.877108 -5.435851 1.759236
+v 0.877108 -5.435851 1.600830
+v 1.740747 -5.361775 1.442423
+v 1.740747 -5.361775 1.600830
+v 2.603730 -5.282642 1.284017
+v 2.603730 -5.282642 1.442423
+v 3.460463 -5.199865 1.126658
+v 3.460463 -5.199865 1.284017
+v 4.328129 -5.112390 0.967205
+v 4.328129 -5.112390 1.126658
+v 5.189687 -5.022396 0.808799
+v 5.189687 -5.022396 0.967205
+v 6.050888 -4.929707 0.650392
+v 6.050888 -4.929707 0.808799
+v 6.911772 -4.834635 0.491986
+v 6.911772 -4.834635 0.650392
+v 0.877108 5.435853 1.759236
+v 0.012680 5.503693 1.759236
+v 0.877108 5.435853 1.600830
+v 1.740747 5.361776 1.442423
+v 1.740747 5.361776 1.600830
+v 2.603730 5.282643 1.284017
+v 2.603730 5.282643 1.442423
+v 3.460463 5.199866 1.126658
+v 3.460463 5.199866 1.284017
+v 4.328129 5.112391 0.967205
+v 4.328129 5.112391 1.126658
+v 5.189687 5.022396 0.808799
+v 5.189687 5.022396 0.967205
+v 6.050888 4.929707 0.650392
+v 6.050888 4.929707 0.808799
+v 6.911772 4.834636 0.491986
+v 6.911772 4.834636 0.650392
+v 7.766067 4.738158 0.491986
+v 8.109628 6.681005 0.491986
+v 7.923237 5.712165 0.491986
+v 8.325068 7.643802 0.491986
+v 0.827187 9.753714 1.759236
+v 0.505347 8.346996 1.759236
+v 0.233730 6.929725 1.759236
+v 1.687283 9.625525 1.759236
+v 1.687283 9.625525 1.600830
+v 2.529003 9.423344 1.442423
+v 2.529003 9.423344 1.600830
+v 3.364361 9.195687 1.284017
+v 3.364361 9.195687 1.442423
+v 4.190692 8.955421 1.126658
+v 4.190692 8.955421 1.284017
+v 5.025705 8.702447 0.967205
+v 5.025705 8.702447 1.126658
+v 5.853598 8.444246 0.808799
+v 5.853598 8.444246 0.967205
+v 6.680284 8.180762 0.650392
+v 6.680284 8.180762 0.808799
+v 7.506051 7.913037 0.491986
+v 7.506051 7.913037 0.650392
+v 0.686436 -3.808781 1.759236
+v -0.174624 -3.897550 1.759236
+v 0.686436 -3.808781 1.600830
+v 1.546106 -3.705296 1.442423
+v 1.546106 -3.705296 1.600830
+v 2.404683 -3.590207 1.284017
+v 3.256768 -3.466888 1.126658
+v 3.256768 -3.466888 1.284017
+v 4.119603 -3.334942 0.967205
+v 4.119603 -3.334942 1.126658
+v 4.976384 -3.198800 0.808799
+v 5.832967 -3.059360 0.650392
+v 5.832967 -3.059360 0.808799
+v 6.689526 -2.918305 0.491986
+v 6.689526 -2.918305 0.650392
+v 7.539945 -2.778365 0.491986
+v 2.322875 -3.601606 1.284403
+v 2.404683 -3.590207 1.442423
+v 4.930583 -3.206177 0.809571
+v 4.976384 -3.198800 0.967205
+v 7.435178 0.927118 0.491986
+v 7.435178 -0.927104 0.491986
+v 7.539946 2.778378 0.491986
+v -0.174623 3.897559 1.759236
+v -0.341358 1.300972 1.759236
+v -0.341358 -1.300963 1.759236
+v 0.686437 3.808787 1.759236
+v 0.686437 3.808787 1.600830
+v 1.546106 3.705300 1.442423
+v 1.546106 3.705300 1.600830
+v 3.256768 3.466891 1.126658
+v 2.404683 3.590210 1.284017
+v 3.256768 3.466891 1.284017
+v 4.119603 3.334945 0.967205
+v 4.119603 3.334945 1.126658
+v 5.832968 3.059366 0.650392
+v 4.976384 3.198804 0.808799
+v 5.832968 3.059366 0.808799
+v 6.689527 2.918315 0.491986
+v 6.689527 2.918315 0.650392
+v 2.322875 3.601610 1.284403
+v 2.404683 3.590210 1.442423
+v 4.930583 3.206181 0.809571
+v 4.976384 3.198804 0.967205
+v -2.986192 9.322125 2.318657
+v -4.370749 8.758762 2.567439
+v -5.706715 7.953161 2.801207
+v -6.518404 9.609237 3.022611
+v -6.879231 8.259637 3.043039
+v -7.226325 9.889487 3.172795
+v -6.385193 7.419479 2.917713
+v -8.675732 10.463277 3.480500
+v -8.744470 10.136701 3.480500
+v -8.811026 9.809673 3.480500
+v -7.031149 6.810455 3.027316
+v -8.875399 9.482208 3.480500
+v -8.180101 6.973619 3.259688
+v -8.903683 6.022447 3.378145
+v -8.602121 4.671495 3.288768
+v -9.535915 4.961023 3.480500
+v -9.197990 3.349079 3.386134
+v -9.664221 3.438883 3.480500
+v -9.601445 1.905681 3.451520
+v -9.745976 1.913534 3.480500
+v -9.781107 0.386400 3.480500
+v -1.128909 8.421082 1.917642
+v -1.379435 7.080328 1.917642
+v -1.956463 1.335423 1.917642
+v -1.956463 -1.335423 1.917642
+v -9.745976 -1.913534 3.480500
+v -9.547815 -2.158375 3.442853
+v -9.757718 -0.778655 3.476732
+v -9.664221 -3.438883 3.480500
+v -9.154217 -3.466940 3.379014
+v -8.602121 -4.671495 3.288768
+v -7.031150 -6.810455 3.027316
+v -9.535915 -4.961024 3.480500
+v -2.986192 -9.322125 2.318657
+v -8.479227 -6.606673 3.308830
+v -7.710150 -7.489928 3.181979
+v -6.879231 -8.259637 3.043039
+v -5.090662 -8.360892 2.694146
+v -6.518404 -9.609237 3.022611
+v -7.226325 -9.889487 3.172795
+v -8.875399 -9.482208 3.480500
+v -8.811026 -9.809673 3.480500
+v -8.744470 -10.136701 3.480500
+v -8.675732 -10.463277 3.480500
+v -9.781107 -0.386400 3.480500
+v -1.379435 -7.080328 1.917642
+v -1.128909 -8.421082 1.917642
+v -9.400000 10.750000 3.480500
+v -12.498064 6.908032 6.500000
+v -12.498064 6.908032 9.500000
+v -13.234825 5.363012 9.500000
+v -13.364816 5.030328 6.500000
+v -13.781432 3.740939 9.500000
+v -13.951257 3.047118 6.500000
+v -14.245087 0.999999 6.500000
+v -12.486102 6.929629 9.500000
+v -12.480107 6.940420 9.500000
+v -12.492087 6.918833 9.500000
+v -10.168760 10.025908 4.134505
+v -9.645640 10.530153 3.480500
+v -9.564325 10.604065 3.480500
+v -9.482443 10.677348 3.480500
+v -10.168760 10.025908 3.557844
+v -11.031124 9.068450 4.134505
+v -12.480107 6.940420 6.500000
+v -11.803670 8.037155 4.134505
+v -12.480107 6.940420 4.134505
+v -9.400000 -10.750000 3.480500
+v -11.794214 -8.051024 4.134505
+v -12.467851 -6.962414 4.134505
+v -11.025793 -9.074932 4.134505
+v -10.168760 -10.025908 4.134505
+v -9.645640 -10.530153 3.480500
+v -10.168760 -10.025908 3.557844
+v -9.564325 -10.604065 3.480500
+v -9.482443 -10.677348 3.480500
+v -12.480107 -6.940420 9.500000
+v -12.480107 -6.940420 4.134505
+v -12.480107 -6.940420 6.500000
+v -13.778193 -3.752851 9.500000
+v -13.225533 -5.385886 9.500000
+v -13.948618 -3.059177 6.500000
+v -14.245087 -0.999999 6.500000
+v -13.356099 -5.053426 6.500000
+v -14.276247 0.333576 6.500000
+v -14.276247 -0.333576 6.500000
+v 7.077960 -5.866758 0.491986
+v 7.276117 -6.893222 0.491986
+v 7.077960 -5.866758 0.650392
+v 7.276117 -6.893222 0.650392
+v 6.225988 -6.019918 0.650392
+v 6.435859 -7.103973 0.650392
+v 6.225988 -6.019918 0.808799
+v 6.435859 -7.103973 0.808799
+v 5.373486 -6.170077 0.808799
+v 5.594869 -7.311104 0.808799
+v 5.373486 -6.170077 0.967205
+v 5.594869 -7.311104 0.967205
+v 4.520353 -6.316672 0.967205
+v 4.752966 -7.513810 0.967205
+v 4.520353 -6.316672 1.126658
+v 4.752966 -7.513810 1.126658
+v 3.660802 -6.459837 1.126658
+v 3.904307 -7.712182 1.126658
+v 3.660802 -6.459837 1.284017
+v 3.904307 -7.712182 1.284017
+v 2.811571 -6.595599 1.284017
+v 3.065218 -7.900480 1.284017
+v 2.811571 -6.595599 1.442423
+v 3.065218 -7.900480 1.442423
+v 1.955359 -6.724679 1.442423
+v 2.218222 -8.079104 1.442423
+v 1.955359 -6.724679 1.600830
+v 2.218222 -8.079104 1.600830
+v 1.097064 -6.841787 1.600830
+v 1.367238 -8.238942 1.600830
+v 1.097064 -6.841787 1.759236
+v 1.367238 -8.238942 1.759236
+v 7.276116 6.893221 0.491986
+v 7.077960 5.866757 0.491986
+v 7.276116 6.893221 0.650392
+v 7.077960 5.866757 0.650392
+v 6.435859 7.103972 0.650392
+v 6.225988 6.019918 0.650392
+v 6.435859 7.103972 0.808799
+v 6.225988 6.019918 0.808799
+v 5.594869 7.311104 0.808799
+v 5.373486 6.170077 0.808799
+v 5.594869 7.311104 0.967205
+v 5.373486 6.170077 0.967205
+v 4.752966 7.513809 0.967205
+v 4.520353 6.316672 0.967205
+v 4.752966 7.513809 1.126658
+v 4.520353 6.316672 1.126658
+v 3.904307 7.712182 1.126658
+v 3.660802 6.459837 1.126658
+v 3.904307 7.712182 1.284017
+v 3.660802 6.459837 1.284017
+v 3.065218 7.900479 1.284017
+v 2.811571 6.595599 1.284017
+v 3.065218 7.900479 1.442423
+v 2.811571 6.595599 1.442423
+v 2.218222 8.079104 1.442423
+v 1.955359 6.724679 1.442423
+v 2.218222 8.079104 1.600830
+v 1.955359 6.724679 1.600830
+v 1.367238 8.238944 1.600830
+v 1.097064 6.841789 1.600830
+v 1.367238 8.238944 1.759236
+v 1.097064 6.841789 1.759236
+v 6.576880 0.973861 0.491986
+v 6.576880 -0.973852 0.491986
+v 6.576880 0.973861 0.650392
+v 6.576880 -0.973852 0.650392
+v 5.712263 1.020981 0.650392
+v 5.712263 -1.020975 0.650392
+v 5.712263 1.020981 0.808799
+v 5.712263 -1.020975 0.808799
+v 4.847643 1.067564 0.808799
+v 4.847643 -1.067560 0.808799
+v 4.847643 1.067564 0.967205
+v 4.847643 -1.067560 0.967205
+v 3.983001 1.113048 0.967205
+v 3.983001 -1.113045 0.967205
+v 3.983001 1.113048 1.126658
+v 3.983001 -1.113045 1.126658
+v 3.112599 1.157130 1.126658
+v 3.112599 -1.157127 1.126658
+v 3.112599 1.157130 1.284017
+v 3.112599 -1.157127 1.284017
+v 2.253567 1.198328 1.284017
+v 2.253567 -1.198324 1.284017
+v 2.253567 1.198328 1.442423
+v 2.253567 -1.198324 1.442423
+v 1.388725 1.236772 1.442423
+v 1.388725 -1.236768 1.442423
+v 1.388725 1.236772 1.600830
+v 1.388725 -1.236768 1.600830
+v 0.523762 1.271334 1.600830
+v 0.523762 -1.271328 1.600830
+v 0.523762 1.271334 1.759236
+v 0.523762 -1.271328 1.759236
+v -9.691016 10.312910 3.480500
+v -9.735446 10.095472 3.480500
+v -9.778929 9.877842 3.480500
+v -9.221011 9.642845 3.976099
+v -9.221011 9.642845 4.134505
+v -8.389592 9.234557 3.976099
+v -8.389592 9.234557 3.817693
+v -7.606031 8.772685 3.659286
+v -7.606031 8.772685 3.817693
+v -6.879231 8.259637 3.659286
+v -8.398586 9.239391 3.588772
+v -8.777963 6.204257 3.659286
+v -10.081867 3.728455 3.659286
+v -10.094324 3.694598 3.480500
+v -10.485376 2.366920 3.480500
+v -10.702590 1.000000 3.659286
+v -10.702590 1.000000 3.480500
+v -10.744129 0.333352 3.480500
+v -9.787889 0.128830 3.480500
+v -10.735409 1.000000 3.480500
+v -9.787889 -0.128830 3.480500
+v -10.744129 -0.333352 3.480500
+v -10.702590 -1.000000 3.480500
+v -10.735409 -1.000000 3.480500
+v -10.485376 -2.366920 3.480500
+v -10.094324 -3.694599 3.480500
+v -9.257173 3.181843 3.480500
+v -9.621208 1.803251 3.480500
+v -8.696723 4.492924 3.480500
+v -8.665600 4.552664 3.322094
+v -8.696723 4.492924 3.322094
+v -8.634065 4.612189 3.322094
+v -8.602121 4.671495 3.322094
+v -7.811346 4.661327 3.322094
+v -7.811346 4.661327 3.163688
+v -6.946265 4.613671 3.005282
+v -6.946265 4.613671 3.163688
+v -6.083505 4.542129 2.846875
+v -6.083505 4.542129 3.005282
+v -5.222367 4.454025 2.688469
+v -5.222367 4.454025 2.846875
+v -4.362437 4.353566 2.530063
+v -4.362437 4.353566 2.688469
+v -3.503441 4.243428 2.371657
+v -3.503441 4.243428 2.530063
+v -2.645185 4.125442 2.213251
+v -2.645185 4.125442 2.371657
+v -1.787522 4.000922 2.213251
+v -6.698159 6.680703 3.163688
+v -7.031149 6.810455 3.163688
+v -6.698159 6.680703 3.005282
+v -5.856477 6.450299 2.846875
+v -5.856477 6.450299 3.005282
+v -5.007403 6.271485 2.688469
+v -4.154818 6.117605 2.530063
+v -4.154818 6.117605 2.688469
+v -3.300080 5.979209 2.371657
+v -3.300080 5.979209 2.530063
+v -2.443849 5.851635 2.213251
+v -2.443849 5.851635 2.371657
+v -1.586504 5.732177 2.213251
+v -5.155102 6.300342 2.540665
+v -5.007403 6.271485 2.846875
+v -2.067052 9.568002 2.371657
+v -1.752683 9.630548 2.213251
+v -2.379205 9.495196 2.371657
+v -1.752683 9.630548 2.371657
+v -1.448190 9.681018 2.213251
+v -1.142256 9.721863 2.213251
+v -0.835188 9.753042 2.213251
+v -2.688806 9.412210 2.530063
+v -2.688806 9.412210 2.371657
+v -3.010740 9.314226 2.530063
+v -3.643557 9.085365 2.688469
+v -3.643557 9.085365 2.530063
+v -3.973480 8.945994 2.688469
+v -3.329116 9.205235 2.530063
+v -4.616935 8.631528 2.846875
+v -4.616935 8.631528 2.688469
+v -4.955572 8.441663 2.846875
+v -5.286414 8.238519 2.846875
+v -4.298085 8.794648 2.688469
+v -5.608941 8.022415 3.005282
+v -5.608941 8.022415 2.846875
+v -5.957656 7.766962 3.005282
+v -6.619574 7.211144 3.163688
+v -6.619574 7.211144 3.005282
+v -6.759370 7.080274 3.163688
+v -6.294753 7.496363 3.005282
+v -6.896580 6.946694 3.163688
+v -1.128909 8.421082 2.213251
+v -1.379435 7.080328 2.213251
+v -1.956463 1.335423 2.213251
+v -1.956463 -1.335423 2.213251
+v -1.787522 -4.000922 2.213251
+v -7.811346 -4.661327 3.322094
+v -8.602121 -4.671495 3.322094
+v -7.811346 -4.661327 3.163688
+v -6.946265 -4.613671 3.005282
+v -6.946265 -4.613671 3.163688
+v -6.083505 -4.542129 2.846875
+v -6.083505 -4.542129 3.005282
+v -5.222367 -4.454025 2.688469
+v -5.222367 -4.454025 2.846875
+v -4.362437 -4.353566 2.530063
+v -4.362437 -4.353566 2.688469
+v -3.503441 -4.243428 2.371657
+v -3.503441 -4.243428 2.530063
+v -2.645185 -4.125442 2.213251
+v -2.645185 -4.125442 2.371657
+v -9.569506 -2.060076 3.480500
+v -9.757718 -0.778655 3.480500
+v -9.213765 -3.305434 3.480500
+v -8.696723 -4.492924 3.480500
+v -8.634065 -4.612189 3.322094
+v -8.665600 -4.552664 3.322094
+v -8.696723 -4.492924 3.322094
+v -9.767263 -0.648011 3.480500
+v -9.775061 -0.517252 3.480500
+v -10.702590 -1.000000 3.659286
+v -10.081867 -3.728455 3.659286
+v -8.777963 -6.204257 3.659286
+v -6.879231 -8.259637 3.659286
+v -9.778929 -9.877842 3.480500
+v -9.221011 -9.642845 3.976099
+v -9.221011 -9.642845 4.134505
+v -8.389592 -9.234557 3.976099
+v -8.389592 -9.234557 3.817693
+v -7.606030 -8.772685 3.659286
+v -7.606030 -8.772685 3.817693
+v -8.398586 -9.239391 3.588772
+v -9.735446 -10.095472 3.480500
+v -9.691016 -10.312910 3.480500
+v -6.896580 -6.946694 3.163688
+v -6.759370 -7.080274 3.163688
+v -7.031150 -6.810455 3.163688
+v -6.619574 -7.211144 3.005282
+v -6.619574 -7.211144 3.163688
+v -5.957656 -7.766962 3.005282
+v -5.608941 -8.022415 2.846875
+v -5.608941 -8.022415 3.005282
+v -6.294753 -7.496363 3.005282
+v -5.286414 -8.238519 2.846875
+v -4.955572 -8.441663 2.846875
+v -4.616935 -8.631528 2.688469
+v -4.616935 -8.631528 2.846875
+v -3.973480 -8.945994 2.688469
+v -3.643557 -9.085365 2.530063
+v -3.643557 -9.085365 2.688469
+v -4.298085 -8.794648 2.688469
+v -3.329116 -9.205235 2.530063
+v -3.010740 -9.314226 2.530063
+v -2.688806 -9.412210 2.371657
+v -2.688806 -9.412210 2.530063
+v -2.379205 -9.495196 2.371657
+v -2.067052 -9.568002 2.371657
+v -1.752683 -9.630548 2.213251
+v -1.752683 -9.630548 2.371657
+v -1.142256 -9.721863 2.213251
+v -0.835188 -9.753042 2.213251
+v -1.448190 -9.681018 2.213251
+v -6.698159 -6.680703 3.163688
+v -6.698159 -6.680703 3.005282
+v -5.856477 -6.450299 2.846875
+v -5.856477 -6.450299 3.005282
+v -4.154818 -6.117605 2.530063
+v -5.007403 -6.271485 2.688469
+v -4.154818 -6.117605 2.688469
+v -3.300080 -5.979209 2.371657
+v -3.300080 -5.979209 2.530063
+v -2.443849 -5.851635 2.213251
+v -2.443849 -5.851635 2.371657
+v -1.586504 -5.732177 2.213251
+v -5.155102 -6.300342 2.540665
+v -5.007403 -6.271485 2.846875
+v -1.379435 -7.080328 2.213251
+v -1.128909 -8.421082 2.213251
+v -13.305405 5.185431 4.134505
+v -12.498064 6.908032 4.134505
+v -13.876606 3.370801 4.134505
+v -14.201530 1.496347 4.134505
+v -14.217973 1.331071 4.134505
+v -14.232492 1.165614 4.134505
+v -14.245087 1.000000 4.134505
+v -12.486102 6.929629 6.500000
+v -12.492087 6.918833 6.500000
+v -12.486102 6.929629 4.134505
+v -12.492087 6.918833 4.134505
+v -11.279203 7.126786 4.134505
+v -12.667866 4.187683 4.134505
+v -13.304567 1.000000 4.134505
+v -14.205827 1.330910 4.134505
+v -14.209620 1.165460 4.134505
+v -14.212911 1.000000 4.134505
+v -14.212911 -1.000000 4.134505
+v -14.209620 -1.165460 4.134505
+v -13.304567 -1.000000 4.134505
+v -14.205827 -1.330910 4.134505
+v -14.201530 -1.496347 4.134505
+v -13.873687 -3.382796 4.134505
+v -12.667866 -4.187683 4.134505
+v -13.296420 -5.208427 4.134505
+v -11.279203 -7.126786 4.134505
+v -14.232492 -1.165614 4.134505
+v -14.245087 -1.000000 4.134505
+v -14.217973 -1.331071 4.134505
+v -14.575605 -0.333566 6.500000
+v -14.545087 -0.999999 6.500000
+v -14.575605 0.333566 6.500000
+v -14.545087 0.999999 6.500000
+v -9.584484 6.553577 3.659286
+v -10.934546 3.904794 3.659286
+v -11.567701 1.000000 3.659286
+v -9.584484 6.553577 3.817693
+v -10.934546 3.904794 3.817693
+v -11.567701 1.000000 3.817693
+v -10.420468 6.861206 3.817693
+v -11.798167 4.057778 3.817693
+v -12.436330 1.000000 3.817693
+v -10.420468 6.861206 3.976099
+v -11.798167 4.057778 3.976099
+v -12.436330 1.000000 3.976099
+v -11.279203 7.126786 3.976099
+v -12.667866 4.187683 3.976099
+v -13.304567 1.000000 3.976099
+v -13.321906 1.000000 3.966934
+v -12.445478 1.000000 3.802106
+v -12.445478 -1.000000 3.802106
+v -14.221074 0.333350 4.134505
+v -13.321906 -1.000000 3.966934
+v -14.221074 -0.333350 4.134505
+v -13.304567 -1.000000 3.976099
+v -12.436330 -1.000000 3.976099
+v -12.436330 -1.000000 3.817693
+v -11.567701 -1.000000 3.659286
+v -11.567701 -1.000000 3.817693
+v -9.782434 0.128801 3.480500
+v -9.782434 -0.128801 3.480500
+v -8.879710 1.499504 3.480500
+v -8.879710 -1.499504 3.480500
+v -8.879710 1.499504 3.322094
+v -8.879710 -1.499504 3.322094
+v -8.011888 1.555932 3.322094
+v -8.011888 -1.555932 3.322094
+v -2.821202 1.377024 2.213251
+v -2.821202 -1.377024 2.213251
+v -2.821202 1.377024 2.371657
+v -2.821202 -1.377024 2.371657
+v -3.686008 1.416439 2.371657
+v -3.686008 -1.416439 2.371657
+v -3.686008 1.416439 2.530063
+v -3.686008 -1.416439 2.530063
+v -4.550896 1.453227 2.530063
+v -4.550896 -1.453227 2.530063
+v -4.550896 1.453227 2.688469
+v -4.550896 -1.453227 2.688469
+v -5.415888 1.486776 2.688469
+v -5.415888 -1.486776 2.688469
+v -5.415888 1.486776 2.846875
+v -5.415888 -1.486776 2.846875
+v -6.281015 1.516189 2.846875
+v -6.281015 -1.516189 2.846875
+v -6.281015 1.516189 3.005282
+v -6.281015 -1.516189 3.005282
+v -7.146322 1.540058 3.005282
+v -7.146322 -1.540058 3.005282
+v -7.146322 1.540058 3.163688
+v -7.146322 -1.540058 3.163688
+v -8.011888 1.555932 3.163688
+v -8.011888 -1.555932 3.163688
+v -2.020508 8.377950 2.213251
+v -2.250964 7.117940 2.213251
+v -2.020508 8.377950 2.371657
+v -2.250964 7.117940 2.371657
+v -2.922826 8.273402 2.371657
+v -3.126632 7.128801 2.371657
+v -2.922826 8.273402 2.530063
+v -3.126632 7.128801 2.530063
+v -3.836135 8.100014 2.530063
+v -4.006584 7.110595 2.530063
+v -3.836135 8.100014 2.688469
+v -4.006584 7.110595 2.688469
+v -4.760823 7.847160 2.688469
+v -4.890992 7.060400 2.688469
+v -4.760823 7.847160 2.846875
+v -4.890992 7.060400 2.846875
+v -5.697426 7.499329 2.846875
+v -5.779942 6.975267 2.846875
+v -5.697426 7.499329 3.005282
+v -5.779942 6.975267 3.005282
+v -6.646436 7.034430 3.005282
+v -6.672631 6.857615 3.005282
+v -6.646436 7.034430 3.163688
+v -6.672631 6.857615 3.163688
+v -10.934546 -3.904794 3.659286
+v -9.584484 -6.553577 3.659286
+v -10.934546 -3.904794 3.817693
+v -9.584484 -6.553577 3.817693
+v -11.798167 -4.057778 3.817693
+v -10.420468 -6.861206 3.817693
+v -11.798167 -4.057778 3.976099
+v -10.420468 -6.861206 3.976099
+v -12.667866 -4.187683 3.976099
+v -11.279203 -7.126786 3.976099
+v -2.250964 -7.117940 2.213251
+v -2.020508 -8.377950 2.213251
+v -2.250964 -7.117940 2.371657
+v -2.020508 -8.377950 2.371657
+v -3.126632 -7.128802 2.371657
+v -2.922826 -8.273402 2.371657
+v -3.126632 -7.128802 2.530063
+v -2.922826 -8.273402 2.530063
+v -4.006584 -7.110595 2.530063
+v -3.836135 -8.100015 2.530063
+v -4.006584 -7.110595 2.688469
+v -3.836135 -8.100015 2.688469
+v -4.890992 -7.060400 2.688469
+v -4.760823 -7.847160 2.688469
+v -4.890992 -7.060400 2.846875
+v -4.760823 -7.847160 2.846875
+v -5.779942 -6.975267 2.846875
+v -5.697426 -7.499329 2.846875
+v -5.779942 -6.975267 3.005282
+v -5.697426 -7.499329 3.005282
+v -6.672631 -6.857615 3.005282
+v -6.646436 -7.034430 3.005282
+v -6.672631 -6.857615 3.163688
+v -6.646436 -7.034430 3.163688
+v -14.375602 1.000000 4.134505
+v -14.545087 0.999999 4.134505
+v -14.375602 -1.000000 4.134505
+v -14.545087 -0.999999 4.134505
+v -14.545087 0.999999 9.044509
+v -14.545087 -0.999999 9.044509
+v -15.000000 8.347774 4.134505
+v -13.855306 6.309299 4.134505
+v -13.689931 7.593893 4.134505
+v -16.347300 7.673147 4.134505
+v -13.990078 5.021134 4.134505
+v -18.363129 7.673147 4.134505
+v -17.169716 3.918774 4.134505
+v -14.094172 3.730128 4.134505
+v -14.302076 2.830225 4.134505
+v -14.452582 1.918962 4.134505
+v -16.766270 0.000000 4.134505
+v -14.452582 -1.918962 4.134505
+v -14.302076 -2.830225 4.134505
+v -17.169716 -3.918774 4.134505
+v -14.094172 -3.730128 4.134505
+v -13.990080 -5.021120 4.134505
+v -13.855309 -6.309270 4.134505
+v -15.000000 -8.347774 4.134505
+v -13.689937 -7.593850 4.134505
+v -16.347300 -7.673147 4.134505
+v -18.363129 -7.673147 4.134505
+v -12.757498 7.057323 6.500000
+v -12.757498 7.057323 3.947034
+v -13.646166 5.132417 6.500000
+v -14.246260 3.098975 6.500000
+v -14.246264 -3.098952 6.500000
+v -13.646182 -5.132373 6.500000
+v -12.757531 -7.057263 3.947039
+v -12.757531 -7.057263 6.500000
+v -14.130032 -3.591902 9.500000
+v -13.771916 -4.784755 9.500000
+v -13.313300 -5.942692 9.500000
+v -12.757531 -7.057263 9.500000
+v -15.500000 -8.097411 7.600000
+v -14.447012 -8.029537 9.159155
+v -15.000000 -8.347774 8.442760
+v -13.834263 -7.676908 9.782728
+v -12.757531 -7.057263 10.597261
+v -15.500000 8.097411 7.600000
+v -14.130032 3.591902 9.500000
+v -15.000000 8.347774 8.442760
+v -14.447006 8.029553 9.159162
+v -13.834248 7.676941 9.782742
+v -12.757498 7.057323 10.597282
+v -12.757498 7.057323 9.500000
+v -13.313281 5.942735 9.500000
+v -13.771909 4.784777 9.500000
+v -12.988994 7.190538 3.993524
+v -13.221560 7.324369 4.040265
+v -16.347300 7.673147 7.600000
+v -18.363129 7.673147 7.600000
+v -18.363129 -7.673147 7.600000
+v -17.169716 -3.918774 7.600000
+v -16.766270 0.000000 7.600000
+v -17.169716 3.918774 7.600000
+v -16.347300 -7.673147 7.600000
+v -12.989020 -7.190482 3.993527
+v -13.221581 -7.324317 4.040267
+f 2090 2091 2092
+f 2092 2091 2093
+f 2094 2092 2095
+f 2094 2090 2092
+f 2091 2096 2093
+f 2091 2097 2096
+f 2090 2097 2091
+f 2090 2094 2097
+f 2096 2092 2093
+f 2095 2092 2096
+f 2097 2094 2096
+f 2096 2094 2095
+f 2098 2099 2100
+f 2101 2099 2098
+f 2102 2101 2098
+f 2103 2104 2102
+f 2105 2106 2103
+f 2105 2103 2102
+f 2107 2108 2105
+f 2107 2109 2108
+f 2107 2110 2109
+f 2098 2107 2105
+f 2098 2105 2102
+f 2111 2106 2105
+f 2112 2111 2105
+f 2113 2114 2110
+f 2110 2114 2109
+f 2108 2115 2105
+f 2109 2115 2108
+f 2114 2115 2109
+f 2115 2112 2105
+f 2116 2107 2117
+f 2113 2110 2107
+f 2118 2113 2107
+f 2119 2120 2118
+f 2121 2119 2118
+f 2122 2123 2124
+f 2125 2116 2124
+f 2125 2123 2121
+f 2125 2107 2116
+f 2125 2118 2107
+f 2125 2124 2123
+f 2125 2121 2118
+f 2117 2107 2098
+f 2117 2098 2126
+f 2098 2127 2126
+f 2100 2128 2098
+f 2128 2129 2098
+f 2130 2131 2129
+f 2131 2132 2129
+f 2133 2134 2135
+f 2129 2136 2098
+f 2127 2136 2135
+f 2133 2136 2132
+f 2098 2136 2127
+f 2135 2136 2133
+f 2132 2136 2129
+f 2137 2138 2102
+f 2102 2138 2101
+f 2101 2139 2099
+f 2138 2139 2101
+f 2099 2128 2100
+f 2139 2128 2099
+f 2140 2137 2104
+f 2104 2137 2102
+f 2103 2140 2104
+f 2103 2141 2140
+f 2106 2141 2103
+f 2106 2111 2141
+f 2139 2129 2128
+f 2139 2138 2129
+f 2138 2137 2129
+f 2140 2141 2137
+f 2111 2112 2141
+f 2141 2112 2137
+f 2115 2118 2112
+f 2114 2118 2115
+f 2113 2118 2114
+f 2118 2129 2112
+f 2112 2129 2137
+f 2118 2120 2129
+f 2129 2120 2130
+f 2119 2142 2120
+f 2143 2130 2142
+f 2142 2130 2120
+f 2143 2131 2130
+f 2119 2121 2144
+f 2123 2145 2121
+f 2146 2147 2142
+f 2123 2147 2145
+f 2142 2148 2149
+f 2147 2148 2142
+f 2123 2150 2147
+f 2147 2150 2148
+f 2151 2152 2143
+f 2150 2152 2148
+f 2150 2153 2152
+f 2153 2154 2152
+f 2143 2154 2155
+f 2152 2154 2143
+f 2156 2132 2131
+f 2154 2133 2157
+f 2153 2133 2154
+f 2157 2133 2132
+f 2142 2119 2144
+f 2142 2144 2146
+f 2143 2142 2151
+f 2151 2142 2149
+f 2131 2143 2156
+f 2156 2143 2155
+f 2156 2157 2132
+f 2145 2144 2121
+f 2158 2159 2160
+f 2160 2159 2161
+f 2161 2159 2122
+f 2122 2162 2123
+f 2159 2162 2122
+f 2162 2163 2123
+f 2162 2164 2163
+f 2162 2165 2164
+f 2162 2166 2165
+f 2163 2167 2123
+f 2167 2168 2123
+f 2169 2170 2171
+f 2172 2150 2170
+f 2171 2150 2168
+f 2168 2150 2123
+f 2170 2150 2171
+f 2172 2173 2150
+f 2172 2174 2173
+f 2173 2175 2150
+f 2175 2176 2150
+f 2176 2153 2150
+f 2176 2177 2153
+f 2178 2179 2177
+f 2177 2179 2153
+f 2179 2180 2153
+f 2180 2181 2153
+f 2180 2182 2181
+f 2181 2183 2153
+f 2184 2133 2185
+f 2185 2133 2183
+f 2183 2133 2153
+f 2184 2186 2133
+f 2187 2186 2184
+f 2188 2186 2187
+f 2189 2186 2188
+f 2186 2134 2133
+f 2134 2190 2191
+f 2186 2190 2134
+f 2190 2192 2191
+f 2190 2193 2192
+f 2161 2122 2124
+f 2160 2161 2124
+f 2158 2160 2124
+f 2194 2124 2195
+f 2194 2158 2124
+f 2196 2195 2197
+f 2196 2194 2195
+f 2198 2197 2199
+f 2198 2196 2197
+f 2200 2201 2202
+f 2203 2199 2204
+f 2205 2199 2203
+f 2206 2207 2208
+f 2209 2207 2200
+f 2208 2207 2209
+f 2210 2207 2211
+f 2201 2207 2210
+f 2212 2207 2206
+f 2213 2207 2212
+f 2200 2207 2201
+f 2214 2215 2216
+f 2216 2215 2217
+f 2217 2215 2218
+f 2218 2215 2219
+f 2219 2215 2213
+f 2213 2215 2207
+f 2197 2220 2199
+f 2195 2220 2197
+f 2204 2220 2221
+f 2221 2220 2222
+f 2223 2220 2214
+f 2222 2220 2223
+f 2214 2220 2215
+f 2199 2220 2204
+f 2211 2224 2135
+f 2127 2224 2126
+f 2135 2224 2127
+f 2207 2224 2211
+f 2126 2225 2117
+f 2224 2225 2126
+f 2207 2225 2224
+f 2215 2225 2207
+f 2117 2226 2116
+f 2116 2226 2124
+f 2124 2226 2195
+f 2220 2226 2215
+f 2215 2226 2225
+f 2225 2226 2117
+f 2195 2226 2220
+f 2227 2201 2210
+f 2228 2210 2211
+f 2228 2227 2210
+f 2229 2211 2135
+f 2229 2228 2211
+f 2193 2229 2135
+f 2192 2193 2135
+f 2191 2192 2135
+f 2134 2191 2135
+f 2157 2230 2231
+f 2157 2232 2230
+f 2232 2233 2234
+f 2233 2235 2236
+f 2235 2237 2238
+f 2237 2239 2240
+f 2239 2241 2242
+f 2241 2243 2244
+f 2243 2245 2246
+f 2245 2156 2247
+f 2157 2156 2245
+f 2157 2245 2243
+f 2157 2243 2241
+f 2157 2241 2239
+f 2157 2239 2237
+f 2157 2237 2235
+f 2157 2235 2233
+f 2157 2233 2232
+f 2155 2248 2249
+f 2155 2250 2248
+f 2156 2249 2247
+f 2156 2155 2249
+f 2251 2154 2252
+f 2252 2154 2253
+f 2253 2157 2231
+f 2154 2157 2253
+f 2254 2154 2251
+f 2255 2154 2254
+f 2256 2255 2257
+f 2258 2256 2259
+f 2260 2258 2261
+f 2262 2260 2263
+f 2264 2262 2265
+f 2266 2264 2267
+f 2268 2266 2269
+f 2155 2268 2250
+f 2155 2154 2268
+f 2268 2154 2266
+f 2266 2154 2264
+f 2264 2154 2262
+f 2262 2154 2260
+f 2260 2154 2258
+f 2258 2154 2256
+f 2256 2154 2255
+f 2147 2270 2271
+f 2147 2272 2270
+f 2272 2273 2274
+f 2273 2275 2276
+f 2275 2277 2278
+f 2277 2279 2280
+f 2279 2281 2282
+f 2281 2283 2284
+f 2283 2285 2286
+f 2285 2146 2287
+f 2147 2146 2285
+f 2147 2285 2283
+f 2147 2283 2281
+f 2147 2281 2279
+f 2147 2279 2277
+f 2147 2277 2275
+f 2147 2275 2273
+f 2147 2273 2272
+f 2144 2288 2289
+f 2144 2290 2288
+f 2146 2289 2287
+f 2146 2144 2289
+f 2291 2145 2292
+f 2292 2145 2293
+f 2293 2147 2271
+f 2145 2147 2293
+f 2294 2145 2291
+f 2295 2145 2294
+f 2296 2295 2297
+f 2298 2296 2299
+f 2300 2298 2301
+f 2302 2300 2303
+f 2304 2302 2305
+f 2306 2304 2307
+f 2308 2306 2309
+f 2144 2308 2290
+f 2144 2145 2308
+f 2308 2145 2306
+f 2306 2145 2304
+f 2304 2145 2302
+f 2302 2145 2300
+f 2300 2145 2298
+f 2298 2145 2296
+f 2296 2145 2295
+f 2152 2310 2311
+f 2152 2312 2310
+f 2312 2313 2314
+f 2315 2316 2317
+f 2316 2318 2319
+f 2320 2321 2322
+f 2321 2323 2324
+f 2323 2151 2325
+f 2313 2326 2327
+f 2327 2326 2315
+f 2152 2326 2312
+f 2312 2326 2313
+f 2315 2326 2316
+f 2316 2326 2318
+f 2151 2328 2152
+f 2318 2328 2329
+f 2329 2328 2320
+f 2326 2328 2318
+f 2320 2328 2321
+f 2321 2328 2323
+f 2152 2328 2326
+f 2323 2328 2151
+f 2149 2330 2331
+f 2149 2332 2330
+f 2151 2331 2325
+f 2151 2149 2331
+f 2333 2148 2334
+f 2334 2148 2335
+f 2335 2152 2311
+f 2148 2152 2335
+f 2336 2148 2333
+f 2337 2148 2336
+f 2338 2337 2339
+f 2340 2341 2342
+f 2343 2340 2344
+f 2345 2346 2347
+f 2348 2345 2349
+f 2149 2348 2332
+f 2350 2338 2351
+f 2350 2351 2341
+f 2350 2148 2337
+f 2350 2337 2338
+f 2350 2341 2340
+f 2350 2340 2343
+f 2352 2149 2148
+f 2352 2343 2353
+f 2352 2353 2346
+f 2352 2350 2343
+f 2352 2346 2345
+f 2352 2345 2348
+f 2352 2148 2350
+f 2352 2348 2149
+f 2158 2194 2159
+f 2159 2194 2162
+f 2162 2194 2166
+f 2194 2354 2166
+f 2194 2196 2354
+f 2196 2355 2354
+f 2196 2198 2355
+f 2198 2356 2355
+f 2357 2358 2198
+f 2359 2358 2357
+f 2198 2358 2356
+f 2358 2360 2356
+f 2361 2362 2359
+f 2362 2363 2359
+f 2172 2364 2174
+f 2358 2364 2360
+f 2359 2365 2358
+f 2363 2365 2359
+f 2358 2366 2364
+f 2366 2367 2364
+f 2364 2368 2174
+f 2367 2368 2364
+f 2367 2369 2368
+f 2369 2370 2368
+f 2369 2371 2370
+f 2371 2372 2370
+f 2371 2373 2372
+f 2373 2374 2372
+f 2169 2364 2170
+f 2170 2364 2172
+f 2166 2167 2165
+f 2165 2167 2164
+f 2164 2167 2163
+f 2166 2375 2167
+f 2375 2168 2167
+f 2375 2376 2168
+f 2376 2171 2168
+f 2376 2169 2171
+f 2174 2377 2173
+f 2173 2377 2175
+f 2377 2176 2175
+f 2377 2378 2176
+f 2378 2177 2176
+f 2378 2178 2177
+f 2379 2380 2381
+f 2380 2382 2383
+f 2379 2382 2380
+f 2384 2385 2178
+f 2178 2385 2179
+f 2179 2385 2180
+f 2383 2386 2384
+f 2382 2386 2383
+f 2387 2229 2189
+f 2189 2229 2186
+f 2186 2229 2190
+f 2190 2229 2193
+f 2384 2388 2385
+f 2386 2388 2384
+f 2388 2389 2385
+f 2385 2390 2391
+f 2389 2390 2385
+f 2391 2228 2387
+f 2387 2228 2229
+f 2390 2227 2391
+f 2391 2227 2228
+f 2390 2392 2227
+f 2390 2393 2392
+f 2390 2394 2393
+f 2394 2395 2393
+f 2395 2396 2393
+f 2396 2397 2393
+f 2385 2182 2180
+f 2398 2379 2381
+f 2182 2399 2181
+f 2181 2399 2183
+f 2183 2400 2185
+f 2399 2400 2183
+f 2185 2187 2184
+f 2185 2188 2187
+f 2400 2189 2185
+f 2185 2189 2188
+f 2357 2198 2199
+f 2359 2199 2205
+f 2359 2357 2199
+f 2361 2359 2205
+f 2401 2361 2205
+f 2402 2403 2404
+f 2405 2404 2406
+f 2405 2402 2404
+f 2407 2406 2216
+f 2407 2216 2217
+f 2407 2405 2406
+f 2408 2407 2217
+f 2403 2222 2223
+f 2214 2403 2223
+f 2404 2403 2214
+f 2406 2404 2214
+f 2216 2406 2214
+f 2409 2410 2222
+f 2411 2409 2222
+f 2403 2411 2222
+f 2410 2221 2222
+f 2410 2204 2221
+f 2412 2413 2414
+f 2412 2414 2415
+f 2412 2415 2401
+f 2412 2401 2205
+f 2412 2203 2204
+f 2412 2205 2203
+f 2416 2413 2412
+f 2417 2412 2204
+f 2418 2204 2410
+f 2418 2417 2204
+f 2419 2417 2418
+f 2420 2419 2418
+f 2227 2392 2201
+f 2201 2393 2202
+f 2392 2393 2201
+f 2393 2397 2202
+f 2397 2421 2202
+f 2422 2423 2208
+f 2422 2208 2209
+f 2424 2209 2200
+f 2424 2422 2209
+f 2425 2200 2202
+f 2425 2424 2200
+f 2426 2427 2425
+f 2428 2426 2425
+f 2429 2428 2425
+f 2421 2425 2202
+f 2421 2429 2425
+f 2208 2430 2206
+f 2423 2431 2432
+f 2208 2423 2430
+f 2430 2423 2432
+f 2433 2219 2213
+f 2434 2213 2212
+f 2434 2433 2213
+f 2430 2212 2206
+f 2430 2434 2212
+f 2435 2436 2218
+f 2435 2218 2219
+f 2435 2219 2433
+f 2437 2433 2434
+f 2437 2435 2433
+f 2432 2434 2430
+f 2432 2437 2434
+f 2438 2408 2217
+f 2439 2217 2218
+f 2439 2438 2217
+f 2436 2439 2218
+f 2268 2440 2250
+f 2248 2440 2249
+f 2250 2440 2248
+f 2249 2441 2247
+f 2440 2441 2249
+f 2441 2245 2247
+f 2269 2442 2268
+f 2268 2442 2440
+f 2440 2443 2441
+f 2442 2443 2440
+f 2441 2246 2245
+f 2443 2246 2441
+f 2266 2444 2269
+f 2269 2444 2442
+f 2442 2444 2443
+f 2443 2445 2246
+f 2444 2445 2443
+f 2445 2243 2246
+f 2267 2446 2266
+f 2266 2446 2444
+f 2444 2447 2445
+f 2446 2447 2444
+f 2445 2244 2243
+f 2447 2244 2445
+f 2264 2448 2267
+f 2267 2448 2446
+f 2446 2448 2447
+f 2447 2449 2244
+f 2448 2449 2447
+f 2449 2241 2244
+f 2265 2450 2264
+f 2264 2450 2448
+f 2448 2451 2449
+f 2450 2451 2448
+f 2449 2242 2241
+f 2451 2242 2449
+f 2262 2452 2265
+f 2265 2452 2450
+f 2450 2452 2451
+f 2451 2453 2242
+f 2452 2453 2451
+f 2453 2239 2242
+f 2263 2454 2262
+f 2262 2454 2452
+f 2452 2455 2453
+f 2454 2455 2452
+f 2453 2240 2239
+f 2455 2240 2453
+f 2260 2456 2263
+f 2263 2456 2454
+f 2454 2456 2455
+f 2455 2457 2240
+f 2456 2457 2455
+f 2457 2237 2240
+f 2261 2458 2260
+f 2260 2458 2456
+f 2456 2459 2457
+f 2458 2459 2456
+f 2457 2238 2237
+f 2459 2238 2457
+f 2258 2460 2261
+f 2261 2460 2458
+f 2458 2461 2459
+f 2459 2461 2238
+f 2460 2461 2458
+f 2461 2235 2238
+f 2259 2462 2258
+f 2258 2462 2460
+f 2460 2463 2461
+f 2462 2463 2460
+f 2461 2236 2235
+f 2463 2236 2461
+f 2256 2464 2259
+f 2259 2464 2462
+f 2462 2465 2463
+f 2463 2465 2236
+f 2464 2465 2462
+f 2465 2233 2236
+f 2257 2466 2256
+f 2256 2466 2464
+f 2464 2467 2465
+f 2466 2467 2464
+f 2465 2234 2233
+f 2467 2234 2465
+f 2255 2468 2257
+f 2257 2468 2466
+f 2466 2469 2467
+f 2468 2469 2466
+f 2467 2232 2234
+f 2469 2232 2467
+f 2254 2470 2255
+f 2255 2470 2468
+f 2468 2471 2469
+f 2470 2471 2468
+f 2469 2230 2232
+f 2471 2230 2469
+f 2251 2252 2254
+f 2254 2252 2470
+f 2470 2253 2471
+f 2252 2253 2470
+f 2471 2231 2230
+f 2253 2231 2471
+f 2308 2472 2290
+f 2290 2472 2288
+f 2288 2473 2289
+f 2472 2473 2288
+f 2473 2287 2289
+f 2473 2285 2287
+f 2309 2474 2308
+f 2308 2474 2472
+f 2472 2475 2473
+f 2474 2475 2472
+f 2473 2286 2285
+f 2475 2286 2473
+f 2306 2476 2309
+f 2309 2476 2474
+f 2474 2477 2475
+f 2476 2477 2474
+f 2477 2286 2475
+f 2477 2283 2286
+f 2307 2478 2306
+f 2306 2478 2476
+f 2476 2479 2477
+f 2478 2479 2476
+f 2477 2284 2283
+f 2479 2284 2477
+f 2304 2480 2307
+f 2307 2480 2478
+f 2478 2481 2479
+f 2480 2481 2478
+f 2481 2284 2479
+f 2481 2281 2284
+f 2305 2482 2304
+f 2304 2482 2480
+f 2480 2483 2481
+f 2482 2483 2480
+f 2481 2282 2281
+f 2483 2282 2481
+f 2302 2484 2305
+f 2305 2484 2482
+f 2482 2485 2483
+f 2484 2485 2482
+f 2485 2282 2483
+f 2485 2279 2282
+f 2303 2486 2302
+f 2302 2486 2484
+f 2484 2487 2485
+f 2486 2487 2484
+f 2485 2280 2279
+f 2487 2280 2485
+f 2300 2488 2303
+f 2303 2488 2486
+f 2486 2489 2487
+f 2488 2489 2486
+f 2489 2280 2487
+f 2489 2277 2280
+f 2301 2490 2300
+f 2300 2490 2488
+f 2488 2491 2489
+f 2490 2491 2488
+f 2489 2278 2277
+f 2491 2278 2489
+f 2298 2492 2301
+f 2301 2492 2490
+f 2492 2491 2490
+f 2492 2493 2491
+f 2493 2278 2491
+f 2493 2275 2278
+f 2299 2494 2298
+f 2298 2494 2492
+f 2492 2495 2493
+f 2494 2495 2492
+f 2493 2276 2275
+f 2495 2276 2493
+f 2296 2496 2299
+f 2299 2496 2494
+f 2496 2495 2494
+f 2496 2497 2495
+f 2497 2276 2495
+f 2497 2273 2276
+f 2297 2498 2296
+f 2296 2498 2496
+f 2496 2499 2497
+f 2498 2499 2496
+f 2497 2274 2273
+f 2499 2274 2497
+f 2295 2498 2297
+f 2295 2500 2498
+f 2500 2499 2498
+f 2500 2501 2499
+f 2501 2274 2499
+f 2501 2272 2274
+f 2294 2502 2295
+f 2295 2502 2500
+f 2500 2503 2501
+f 2502 2503 2500
+f 2501 2270 2272
+f 2503 2270 2501
+f 2291 2502 2294
+f 2291 2292 2502
+f 2292 2503 2502
+f 2292 2293 2503
+f 2293 2270 2503
+f 2293 2271 2270
+f 2348 2504 2332
+f 2332 2504 2330
+f 2504 2331 2330
+f 2504 2505 2331
+f 2505 2325 2331
+f 2505 2323 2325
+f 2349 2506 2348
+f 2348 2506 2504
+f 2504 2507 2505
+f 2506 2507 2504
+f 2505 2324 2323
+f 2507 2324 2505
+f 2345 2508 2349
+f 2349 2508 2506
+f 2508 2507 2506
+f 2508 2509 2507
+f 2509 2324 2507
+f 2509 2321 2324
+f 2347 2510 2345
+f 2345 2510 2508
+f 2508 2511 2509
+f 2510 2511 2508
+f 2509 2322 2321
+f 2511 2322 2509
+f 2346 2512 2347
+f 2347 2512 2510
+f 2512 2511 2510
+f 2512 2513 2511
+f 2513 2322 2511
+f 2513 2320 2322
+f 2353 2514 2346
+f 2346 2514 2512
+f 2512 2515 2513
+f 2514 2515 2512
+f 2513 2329 2320
+f 2515 2329 2513
+f 2343 2516 2353
+f 2353 2516 2514
+f 2516 2515 2514
+f 2516 2517 2515
+f 2517 2329 2515
+f 2517 2318 2329
+f 2344 2518 2343
+f 2343 2518 2516
+f 2516 2519 2517
+f 2518 2519 2516
+f 2517 2319 2318
+f 2519 2319 2517
+f 2340 2520 2344
+f 2344 2520 2518
+f 2520 2519 2518
+f 2520 2521 2519
+f 2521 2319 2519
+f 2521 2316 2319
+f 2342 2522 2340
+f 2340 2522 2520
+f 2520 2523 2521
+f 2522 2523 2520
+f 2521 2317 2316
+f 2523 2317 2521
+f 2341 2524 2342
+f 2342 2524 2522
+f 2522 2525 2523
+f 2524 2525 2522
+f 2525 2317 2523
+f 2525 2315 2317
+f 2351 2526 2341
+f 2341 2526 2524
+f 2524 2527 2525
+f 2526 2527 2524
+f 2525 2327 2315
+f 2527 2327 2525
+f 2338 2528 2351
+f 2351 2528 2526
+f 2526 2529 2527
+f 2528 2529 2526
+f 2529 2327 2527
+f 2529 2313 2327
+f 2339 2530 2338
+f 2338 2530 2528
+f 2528 2531 2529
+f 2530 2531 2528
+f 2529 2314 2313
+f 2531 2314 2529
+f 2337 2532 2339
+f 2339 2532 2530
+f 2530 2533 2531
+f 2532 2533 2530
+f 2533 2314 2531
+f 2533 2312 2314
+f 2336 2534 2337
+f 2337 2534 2532
+f 2532 2535 2533
+f 2534 2535 2532
+f 2533 2310 2312
+f 2535 2310 2533
+f 2333 2334 2336
+f 2336 2334 2534
+f 2534 2335 2535
+f 2334 2335 2534
+f 2335 2310 2535
+f 2335 2311 2310
+f 2361 2401 2362
+f 2401 2415 2362
+f 2415 2414 2362
+f 2413 2536 2414
+f 2414 2536 2362
+f 2362 2537 2363
+f 2536 2537 2362
+f 2363 2538 2365
+f 2537 2538 2363
+f 2538 2416 2412
+f 2539 2412 2540
+f 2539 2538 2412
+f 2365 2538 2539
+f 2541 2365 2539
+f 2542 2365 2541
+f 2543 2542 2544
+f 2358 2543 2545
+f 2546 2358 2365
+f 2546 2365 2542
+f 2546 2542 2543
+f 2546 2543 2358
+f 2367 2545 2547
+f 2367 2366 2545
+f 2358 2545 2366
+f 2369 2547 2548
+f 2369 2367 2547
+f 2549 2369 2548
+f 2550 2548 2551
+f 2550 2549 2548
+f 2552 2550 2551
+f 2369 2549 2371
+f 2371 2550 2373
+f 2549 2550 2371
+f 2373 2552 2374
+f 2550 2552 2373
+f 2374 2553 2554
+f 2555 2553 2552
+f 2552 2553 2374
+f 2556 2557 2398
+f 2554 2557 2556
+f 2553 2557 2554
+f 2398 2558 2379
+f 2557 2558 2398
+f 2557 2559 2558
+f 2558 2560 2379
+f 2560 2382 2379
+f 2560 2561 2382
+f 2561 2386 2382
+f 2562 2372 2563
+f 2564 2370 2562
+f 2562 2370 2372
+f 2372 2374 2563
+f 2565 2368 2566
+f 2567 2368 2565
+f 2568 2368 2567
+f 2566 2368 2370
+f 2564 2566 2370
+f 2569 2368 2568
+f 2570 2368 2569
+f 2571 2570 2572
+f 2573 2571 2574
+f 2575 2573 2576
+f 2577 2575 2578
+f 2579 2577 2580
+f 2581 2579 2582
+f 2174 2581 2583
+f 2174 2579 2581
+f 2174 2368 2570
+f 2174 2570 2571
+f 2174 2571 2573
+f 2174 2573 2575
+f 2174 2575 2577
+f 2174 2577 2579
+f 2364 2584 2585
+f 2364 2586 2584
+f 2586 2587 2588
+f 2589 2590 2591
+f 2590 2592 2593
+f 2592 2594 2595
+f 2594 2169 2596
+f 2592 2169 2594
+f 2169 2597 2364
+f 2587 2597 2598
+f 2598 2597 2589
+f 2364 2597 2586
+f 2586 2597 2587
+f 2589 2597 2590
+f 2590 2597 2592
+f 2592 2597 2169
+f 2599 2600 2601
+f 2602 2600 2599
+f 2603 2166 2600
+f 2604 2166 2603
+f 2605 2166 2604
+f 2606 2607 2608
+f 2609 2610 2611
+f 2601 2354 2607
+f 2612 2354 2610
+f 2608 2354 2612
+f 2166 2354 2600
+f 2600 2354 2601
+f 2607 2354 2608
+f 2613 2614 2615
+f 2614 2616 2615
+f 2617 2355 2614
+f 2611 2355 2617
+f 2354 2355 2610
+f 2610 2355 2611
+f 2618 2619 2620
+f 2616 2356 2619
+f 2355 2356 2614
+f 2614 2356 2616
+f 2619 2356 2620
+f 2621 2622 2623
+f 2624 2360 2622
+f 2620 2360 2624
+f 2356 2360 2620
+f 2625 2364 2585
+f 2623 2364 2625
+f 2360 2364 2622
+f 2622 2364 2623
+f 2605 2626 2166
+f 2166 2626 2375
+f 2375 2627 2376
+f 2626 2627 2375
+f 2376 2596 2169
+f 2627 2596 2376
+f 2583 2628 2174
+f 2174 2628 2377
+f 2377 2629 2378
+f 2628 2629 2377
+f 2378 2630 2178
+f 2629 2630 2378
+f 2384 2631 2632
+f 2384 2633 2631
+f 2633 2634 2635
+f 2634 2636 2637
+f 2636 2638 2639
+f 2638 2640 2641
+f 2640 2642 2643
+f 2642 2644 2645
+f 2644 2178 2630
+f 2642 2178 2644
+f 2384 2178 2633
+f 2633 2178 2634
+f 2634 2178 2636
+f 2636 2178 2638
+f 2638 2178 2640
+f 2640 2178 2642
+f 2381 2646 2647
+f 2381 2380 2646
+f 2380 2648 2646
+f 2648 2383 2649
+f 2380 2383 2648
+f 2650 2384 2632
+f 2651 2384 2650
+f 2652 2384 2651
+f 2383 2384 2652
+f 2652 2649 2383
+f 2653 2381 2647
+f 2654 2381 2653
+f 2398 2381 2654
+f 2560 2558 2655
+f 2560 2655 2656
+f 2561 2560 2656
+f 2386 2656 2657
+f 2386 2561 2656
+f 2388 2657 2658
+f 2388 2386 2657
+f 2389 2388 2658
+f 2390 2389 2658
+f 2427 2659 2425
+f 2425 2660 2661
+f 2659 2660 2425
+f 2659 2394 2660
+f 2394 2662 2660
+f 2394 2663 2662
+f 2663 2664 2665
+f 2664 2390 2658
+f 2390 2666 2394
+f 2394 2666 2663
+f 2663 2666 2664
+f 2664 2666 2390
+f 2394 2659 2395
+f 2395 2667 2396
+f 2659 2667 2395
+f 2667 2668 2396
+f 2396 2421 2397
+f 2396 2429 2421
+f 2668 2428 2396
+f 2396 2428 2429
+f 2668 2426 2428
+f 2669 2385 2670
+f 2671 2385 2669
+f 2670 2672 2673
+f 2385 2672 2670
+f 2674 2675 2676
+f 2677 2675 2674
+f 2672 2675 2677
+f 2385 2675 2672
+f 2678 2391 2679
+f 2675 2391 2678
+f 2385 2391 2675
+f 2679 2680 2681
+f 2391 2680 2679
+f 2682 2683 2684
+f 2685 2683 2682
+f 2680 2683 2685
+f 2391 2683 2680
+f 2686 2387 2687
+f 2683 2387 2686
+f 2391 2387 2683
+f 2687 2688 2689
+f 2387 2688 2687
+f 2387 2690 2688
+f 2691 2692 2693
+f 2690 2692 2691
+f 2387 2692 2690
+f 2694 2189 2695
+f 2696 2189 2694
+f 2692 2189 2696
+f 2387 2189 2692
+f 2697 2385 2671
+f 2698 2385 2697
+f 2699 2698 2700
+f 2701 2702 2703
+f 2704 2701 2705
+f 2706 2704 2707
+f 2182 2706 2708
+f 2182 2704 2706
+f 2709 2182 2385
+f 2709 2699 2710
+f 2709 2710 2702
+f 2709 2385 2698
+f 2709 2698 2699
+f 2709 2702 2701
+f 2709 2701 2704
+f 2709 2704 2182
+f 2708 2711 2182
+f 2182 2711 2399
+f 2399 2712 2400
+f 2711 2712 2399
+f 2400 2695 2189
+f 2712 2695 2400
+f 2713 2714 2402
+f 2713 2402 2405
+f 2715 2405 2407
+f 2715 2713 2405
+f 2716 2407 2408
+f 2716 2715 2407
+f 2717 2716 2408
+f 2718 2717 2408
+f 2719 2718 2408
+f 2720 2418 2410
+f 2720 2410 2409
+f 2721 2409 2411
+f 2721 2720 2409
+f 2402 2411 2403
+f 2402 2721 2411
+f 2722 2420 2418
+f 2722 2418 2720
+f 2723 2720 2721
+f 2723 2722 2720
+f 2714 2721 2402
+f 2714 2723 2721
+f 2413 2416 2536
+f 2536 2416 2537
+f 2537 2416 2538
+f 2412 2417 2540
+f 2419 2724 2417
+f 2417 2724 2540
+f 2419 2420 2724
+f 2420 2722 2724
+f 2722 2723 2724
+f 2723 2714 2724
+f 2713 2725 2714
+f 2714 2725 2724
+f 2713 2715 2725
+f 2715 2726 2725
+f 2715 2716 2726
+f 2716 2727 2726
+f 2727 2728 2726
+f 2728 2729 2726
+f 2730 2731 2732
+f 2731 2733 2732
+f 2733 2734 2732
+f 2732 2735 2736
+f 2734 2735 2732
+f 2735 2737 2736
+f 2736 2431 2738
+f 2737 2431 2736
+f 2431 2423 2738
+f 2423 2422 2738
+f 2738 2424 2661
+f 2422 2424 2738
+f 2424 2425 2661
+f 2659 2427 2667
+f 2667 2427 2668
+f 2427 2426 2668
+f 2739 2740 2436
+f 2741 2739 2436
+f 2734 2436 2435
+f 2734 2741 2436
+f 2735 2435 2437
+f 2735 2734 2435
+f 2737 2437 2432
+f 2737 2735 2437
+f 2431 2737 2432
+f 2742 2439 2743
+f 2743 2439 2436
+f 2742 2744 2439
+f 2744 2438 2439
+f 2744 2745 2438
+f 2745 2408 2438
+f 2543 2547 2545
+f 2543 2746 2547
+f 2746 2548 2547
+f 2746 2747 2548
+f 2747 2551 2548
+f 2747 2748 2551
+f 2544 2749 2543
+f 2543 2749 2746
+f 2746 2750 2747
+f 2749 2750 2746
+f 2747 2751 2748
+f 2750 2751 2747
+f 2542 2749 2544
+f 2542 2752 2749
+f 2752 2750 2749
+f 2752 2753 2750
+f 2753 2751 2750
+f 2753 2754 2751
+f 2541 2755 2542
+f 2542 2755 2752
+f 2752 2756 2753
+f 2755 2756 2752
+f 2753 2757 2754
+f 2756 2757 2753
+f 2539 2755 2541
+f 2539 2758 2755
+f 2758 2756 2755
+f 2758 2759 2756
+f 2759 2757 2756
+f 2759 2760 2757
+f 2540 2724 2539
+f 2539 2724 2758
+f 2758 2725 2759
+f 2724 2725 2758
+f 2759 2726 2760
+f 2725 2726 2759
+f 2729 2761 2726
+f 2761 2760 2726
+f 2760 2762 2757
+f 2757 2762 2754
+f 2761 2762 2760
+f 2754 2748 2751
+f 2762 2748 2754
+f 2748 2555 2551
+f 2555 2552 2551
+f 2762 2555 2748
+f 2555 2762 2553
+f 2553 2762 2557
+f 2557 2763 2559
+f 2762 2763 2557
+f 2729 2764 2761
+f 2761 2765 2762
+f 2762 2765 2763
+f 2764 2766 2761
+f 2761 2766 2765
+f 2766 2730 2765
+f 2765 2730 2732
+f 2767 2765 2732
+f 2763 2767 2768
+f 2763 2768 2769
+f 2763 2765 2767
+f 2770 2769 2771
+f 2770 2763 2769
+f 2559 2770 2655
+f 2558 2559 2655
+f 2559 2763 2770
+f 2374 2554 2772
+f 2554 2773 2772
+f 2554 2556 2773
+f 2556 2398 2773
+f 2562 2774 2564
+f 2562 2563 2774
+f 2563 2374 2774
+f 2374 2772 2774
+f 2772 2773 2774
+f 2654 2775 2398
+f 2398 2775 2773
+f 2773 2775 2774
+f 2654 2653 2775
+f 2653 2647 2775
+f 2647 2646 2775
+f 2646 2648 2775
+f 2648 2649 2775
+f 2564 2774 2566
+f 2566 2774 2776
+f 2776 2775 2777
+f 2774 2775 2776
+f 2777 2649 2652
+f 2775 2649 2777
+f 2568 2567 2569
+f 2567 2565 2569
+f 2565 2566 2569
+f 2566 2778 2569
+f 2566 2776 2778
+f 2776 2779 2778
+f 2776 2777 2779
+f 2779 2652 2631
+f 2777 2652 2779
+f 2652 2651 2631
+f 2651 2650 2631
+f 2650 2632 2631
+f 2581 2780 2583
+f 2583 2780 2628
+f 2780 2629 2628
+f 2780 2781 2629
+f 2781 2630 2629
+f 2781 2644 2630
+f 2582 2782 2581
+f 2581 2782 2780
+f 2780 2783 2781
+f 2782 2783 2780
+f 2781 2645 2644
+f 2783 2645 2781
+f 2579 2784 2582
+f 2582 2784 2782
+f 2782 2785 2783
+f 2784 2785 2782
+f 2785 2645 2783
+f 2785 2642 2645
+f 2580 2786 2579
+f 2579 2786 2784
+f 2784 2787 2785
+f 2786 2787 2784
+f 2785 2643 2642
+f 2787 2643 2785
+f 2577 2788 2580
+f 2580 2788 2786
+f 2788 2787 2786
+f 2788 2789 2787
+f 2789 2643 2787
+f 2789 2640 2643
+f 2578 2790 2577
+f 2577 2790 2788
+f 2788 2791 2789
+f 2790 2791 2788
+f 2789 2641 2640
+f 2791 2641 2789
+f 2575 2792 2578
+f 2578 2792 2790
+f 2792 2791 2790
+f 2792 2793 2791
+f 2793 2641 2791
+f 2793 2638 2641
+f 2576 2794 2575
+f 2575 2794 2792
+f 2792 2795 2793
+f 2794 2795 2792
+f 2793 2639 2638
+f 2795 2639 2793
+f 2573 2796 2576
+f 2576 2796 2794
+f 2794 2797 2795
+f 2796 2797 2794
+f 2797 2639 2795
+f 2797 2636 2639
+f 2574 2798 2573
+f 2573 2798 2796
+f 2796 2799 2797
+f 2798 2799 2796
+f 2797 2637 2636
+f 2799 2637 2797
+f 2571 2798 2574
+f 2571 2800 2798
+f 2800 2799 2798
+f 2800 2801 2799
+f 2799 2634 2637
+f 2801 2634 2799
+f 2572 2802 2571
+f 2571 2802 2800
+f 2800 2803 2801
+f 2802 2803 2800
+f 2801 2635 2634
+f 2803 2635 2801
+f 2570 2802 2572
+f 2570 2804 2802
+f 2804 2803 2802
+f 2804 2805 2803
+f 2803 2633 2635
+f 2805 2633 2803
+f 2569 2778 2570
+f 2570 2778 2804
+f 2804 2779 2805
+f 2778 2779 2804
+f 2805 2631 2633
+f 2779 2631 2805
+f 2600 2626 2603
+f 2603 2626 2604
+f 2604 2626 2605
+f 2600 2806 2626
+f 2806 2627 2626
+f 2806 2807 2627
+f 2807 2596 2627
+f 2807 2594 2596
+f 2602 2808 2600
+f 2600 2808 2806
+f 2806 2809 2807
+f 2808 2809 2806
+f 2807 2595 2594
+f 2809 2595 2807
+f 2607 2808 2601
+f 2601 2808 2599
+f 2599 2808 2602
+f 2607 2810 2808
+f 2810 2809 2808
+f 2810 2811 2809
+f 2811 2595 2809
+f 2811 2592 2595
+f 2606 2812 2607
+f 2607 2812 2810
+f 2810 2813 2811
+f 2812 2813 2810
+f 2811 2593 2592
+f 2813 2593 2811
+f 2610 2812 2612
+f 2612 2812 2608
+f 2608 2812 2606
+f 2610 2814 2812
+f 2814 2813 2812
+f 2814 2815 2813
+f 2815 2593 2813
+f 2815 2590 2593
+f 2609 2816 2610
+f 2610 2816 2814
+f 2814 2817 2815
+f 2816 2817 2814
+f 2815 2591 2590
+f 2817 2591 2815
+f 2617 2816 2611
+f 2611 2816 2609
+f 2617 2614 2816
+f 2816 2818 2817
+f 2614 2818 2816
+f 2818 2819 2817
+f 2819 2591 2817
+f 2819 2589 2591
+f 2613 2820 2614
+f 2614 2820 2818
+f 2818 2821 2819
+f 2820 2821 2818
+f 2819 2598 2589
+f 2821 2598 2819
+f 2615 2820 2613
+f 2615 2616 2820
+f 2616 2619 2820
+f 2820 2822 2821
+f 2619 2822 2820
+f 2821 2823 2598
+f 2822 2823 2821
+f 2823 2587 2598
+f 2618 2824 2619
+f 2619 2824 2822
+f 2822 2825 2823
+f 2824 2825 2822
+f 2823 2588 2587
+f 2825 2588 2823
+f 2620 2824 2618
+f 2620 2624 2824
+f 2624 2825 2824
+f 2624 2622 2825
+f 2622 2826 2825
+f 2825 2827 2588
+f 2826 2827 2825
+f 2827 2586 2588
+f 2621 2828 2622
+f 2622 2828 2826
+f 2826 2829 2827
+f 2828 2829 2826
+f 2827 2584 2586
+f 2829 2584 2827
+f 2621 2623 2828
+f 2623 2829 2828
+f 2623 2625 2829
+f 2625 2584 2829
+f 2625 2585 2584
+f 2770 2830 2655
+f 2655 2830 2656
+f 2656 2831 2657
+f 2830 2831 2656
+f 2657 2664 2658
+f 2831 2664 2657
+f 2771 2832 2770
+f 2770 2832 2830
+f 2830 2833 2831
+f 2832 2833 2830
+f 2831 2665 2664
+f 2833 2665 2831
+f 2769 2834 2771
+f 2771 2834 2832
+f 2832 2835 2833
+f 2834 2835 2832
+f 2833 2663 2665
+f 2835 2663 2833
+f 2768 2836 2769
+f 2769 2836 2834
+f 2834 2837 2835
+f 2836 2837 2834
+f 2835 2662 2663
+f 2837 2662 2835
+f 2767 2838 2768
+f 2768 2838 2836
+f 2836 2839 2837
+f 2838 2839 2836
+f 2837 2660 2662
+f 2839 2660 2837
+f 2732 2736 2767
+f 2767 2736 2838
+f 2838 2738 2839
+f 2736 2738 2838
+f 2839 2661 2660
+f 2738 2661 2839
+f 2706 2840 2708
+f 2708 2840 2711
+f 2711 2841 2712
+f 2840 2841 2711
+f 2712 2694 2695
+f 2712 2696 2694
+f 2841 2692 2712
+f 2712 2692 2696
+f 2707 2842 2706
+f 2706 2842 2840
+f 2840 2843 2841
+f 2842 2843 2840
+f 2841 2693 2692
+f 2843 2693 2841
+f 2704 2844 2707
+f 2707 2844 2842
+f 2842 2845 2843
+f 2844 2845 2842
+f 2843 2691 2693
+f 2843 2690 2691
+f 2845 2688 2843
+f 2843 2688 2690
+f 2705 2846 2704
+f 2704 2846 2844
+f 2844 2847 2845
+f 2846 2847 2844
+f 2845 2689 2688
+f 2847 2689 2845
+f 2701 2848 2705
+f 2705 2848 2846
+f 2846 2849 2847
+f 2848 2849 2846
+f 2847 2687 2689
+f 2847 2686 2687
+f 2849 2683 2847
+f 2847 2683 2686
+f 2703 2850 2701
+f 2701 2850 2848
+f 2848 2851 2849
+f 2850 2851 2848
+f 2849 2684 2683
+f 2851 2684 2849
+f 2702 2852 2703
+f 2703 2852 2850
+f 2850 2853 2851
+f 2852 2853 2850
+f 2851 2682 2684
+f 2851 2685 2682
+f 2853 2680 2851
+f 2851 2680 2685
+f 2710 2854 2702
+f 2702 2854 2852
+f 2852 2855 2853
+f 2854 2855 2852
+f 2853 2681 2680
+f 2855 2681 2853
+f 2699 2856 2710
+f 2710 2856 2854
+f 2854 2857 2855
+f 2856 2857 2854
+f 2855 2679 2681
+f 2855 2678 2679
+f 2857 2675 2855
+f 2855 2675 2678
+f 2700 2858 2699
+f 2699 2858 2856
+f 2856 2859 2857
+f 2858 2859 2856
+f 2857 2676 2675
+f 2859 2676 2857
+f 2698 2860 2700
+f 2700 2860 2858
+f 2860 2861 2858
+f 2859 2674 2676
+f 2858 2677 2859
+f 2859 2677 2674
+f 2861 2672 2858
+f 2858 2672 2677
+f 2697 2862 2698
+f 2698 2862 2860
+f 2860 2863 2861
+f 2862 2863 2860
+f 2861 2673 2672
+f 2863 2673 2861
+f 2862 2670 2863
+f 2863 2670 2673
+f 2671 2669 2697
+f 2697 2669 2862
+f 2862 2669 2670
+f 2716 2717 2727
+f 2717 2728 2727
+f 2717 2718 2728
+f 2718 2729 2728
+f 2718 2719 2729
+f 2864 2719 2408
+f 2864 2408 2745
+f 2865 2864 2745
+f 2740 2739 2730
+f 2730 2739 2731
+f 2731 2741 2733
+f 2739 2741 2731
+f 2741 2734 2733
+f 2740 2866 2436
+f 2436 2866 2743
+f 2866 2867 2743
+f 2745 2744 2868
+f 2868 2744 2869
+f 2744 2742 2869
+f 2742 2743 2869
+f 2870 2871 2872
+f 2870 2873 2871
+f 2873 2874 2871
+f 2875 2876 2873
+f 2874 2876 2877
+f 2878 2876 2879
+f 2877 2876 2878
+f 2873 2876 2874
+f 2865 2764 2864
+f 2864 2764 2719
+f 2719 2764 2729
+f 2766 2740 2730
+f 2766 2866 2740
+f 2766 2867 2866
+f 2867 2880 2881
+f 2879 2880 2865
+f 2764 2880 2766
+f 2876 2880 2879
+f 2865 2880 2764
+f 2766 2880 2867
+f 2882 2883 2884
+f 2881 2883 2882
+f 2884 2883 2885
+f 2880 2883 2881
+f 2886 2887 2888
+f 2885 2889 2886
+f 2886 2889 2887
+f 2883 2889 2885
+f 2883 2890 2889
+f 2891 2892 2893
+f 2893 2877 2894
+f 2892 2877 2893
+f 2877 2878 2894
+f 2894 2879 2745
+f 2878 2879 2894
+f 2879 2865 2745
+f 2867 2881 2743
+f 2743 2881 2895
+f 2881 2882 2895
+f 2895 2884 2896
+f 2882 2884 2895
+f 2896 2897 2898
+f 2884 2897 2896
+f 2743 2895 2869
+f 2869 2895 2899
+f 2899 2896 2900
+f 2900 2896 2901
+f 2895 2896 2899
+f 2901 2898 2902
+f 2896 2898 2901
+f 2903 2904 2905
+f 2906 2899 2907
+f 2904 2899 2906
+f 2903 2899 2904
+f 2903 2869 2899
+f 2868 2908 2909
+f 2910 2911 2908
+f 2908 2911 2909
+f 2911 2912 2909
+f 2912 2913 2909
+f 2903 2908 2869
+f 2869 2908 2868
+f 2914 2891 2915
+f 2915 2893 2916
+f 2916 2893 2909
+f 2891 2893 2915
+f 2909 2894 2868
+f 2893 2894 2909
+f 2894 2745 2868
+f 2912 2914 2913
+f 2911 2914 2912
+f 2891 2914 2911
+f 2910 2891 2911
+f 2917 2892 2891
+f 2918 2917 2891
+f 2872 2918 2891
+f 2870 2891 2910
+f 2870 2872 2891
+f 2870 2910 2908
+f 2873 2908 2919
+f 2873 2870 2908
+f 2873 2919 2920
+f 2875 2873 2920
+f 2890 2883 2921
+f 2921 2883 2922
+f 2922 2880 2923
+f 2883 2880 2922
+f 2924 2876 2920
+f 2923 2876 2924
+f 2880 2876 2923
+f 2876 2875 2920
+f 2925 2889 2921
+f 2889 2890 2921
+f 2905 2887 2903
+f 2903 2889 2925
+f 2887 2889 2903
+f 2902 2906 2907
+f 2902 2904 2906
+f 2902 2898 2904
+f 2898 2905 2904
+f 2897 2926 2898
+f 2926 2927 2898
+f 2927 2888 2898
+f 2898 2887 2905
+f 2888 2887 2898
+f 2885 2897 2884
+f 2885 2886 2897
+f 2886 2926 2897
+f 2886 2927 2926
+f 2886 2888 2927
+f 2917 2871 2892
+f 2918 2871 2917
+f 2872 2871 2918
+f 2871 2874 2892
+f 2874 2877 2892
+f 2899 2900 2907
+f 2900 2901 2907
+f 2901 2902 2907
+f 2914 2915 2913
+f 2915 2916 2913
+f 2916 2909 2913
+f 2921 2922 2925
+f 2925 2922 2903
+f 2922 2923 2903
+f 2920 2919 2924
+f 2924 2908 2923
+f 2919 2908 2924
+f 2908 2903 2923
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/cooling-tower.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/cooling-tower.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/cooling-tower.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/cooling-tower.obj	2025-08-26 18:16:07.541772151 +0000
@@ -0,0 +1,7514 @@
+# Cooling Tower
+# (C) Linux Studio Plugins Project
+o Body
+v 21.132799 -0.000004 81.847198
+v 20.811745 3.669668 80.847198
+v 20.811745 3.669668 81.847198
+v 21.132799 -0.000004 80.847198
+v 19.858335 7.227839 80.847198
+v 19.858335 7.227839 81.847198
+v 18.301542 10.566396 80.847198
+v 18.301542 10.566396 81.847198
+v 16.188663 13.583899 80.847198
+v 16.188663 13.583899 81.847198
+v 13.583902 16.188660 80.847198
+v 13.583902 16.188660 81.847198
+v 10.566400 18.301538 80.847198
+v 10.566400 18.301538 81.847198
+v 7.227843 19.858332 80.847198
+v 7.227843 19.858332 81.847198
+v 3.669672 20.811741 80.847198
+v 3.669672 20.811741 81.847198
+v 0.000000 21.132795 80.847198
+v 0.000000 21.132795 81.847198
+v -3.669672 20.811741 80.847198
+v -3.669672 20.811741 81.847198
+v -7.227843 19.858332 81.847198
+v -7.227843 19.858332 80.847198
+v -10.566400 18.301538 80.847198
+v 30.730791 8.234291 7.138781
+v -10.566400 18.301538 81.847198
+v 31.814856 -0.000000 7.138780
+v -13.583902 16.188660 80.847198
+v 27.552473 15.907428 7.138781
+v -13.583902 16.188660 81.847198
+v 22.496500 22.496500 7.138781
+v -16.188663 13.583899 80.847198
+v 15.907428 27.552473 7.138782
+v -16.188663 13.583899 81.847198
+v 8.234291 30.730791 7.138782
+v 0.000000 31.814856 7.138782
+v -18.301542 10.566396 80.847198
+v -18.301542 10.566396 81.847198
+v -8.234291 30.730791 7.138782
+v -19.858335 7.227839 80.847198
+v -15.907428 27.552473 7.138782
+v -19.858335 7.227839 81.847198
+v -22.496500 22.496500 7.138781
+v -20.811745 3.669668 80.847198
+v -27.552473 15.907428 7.138781
+v -20.811745 3.669668 81.847198
+v -30.730791 8.234291 7.138781
+v -21.132799 -0.000004 81.847198
+v -31.814856 -0.000000 7.138780
+v -21.132799 -0.000004 80.847198
+v -30.730791 -8.234291 7.138780
+v -20.811745 -3.669676 80.847198
+v -27.552473 -15.907428 7.138780
+v -22.496500 -22.496500 7.138779
+v -20.811745 -3.669676 81.847198
+v -15.907428 -27.552473 7.138779
+v -19.858335 -7.227846 80.847198
+v -8.234291 -30.730791 7.138779
+v -19.858335 -7.227847 81.847198
+v 0.000000 -31.814856 7.138779
+v -18.301542 -10.566403 80.847198
+v -18.301542 -10.566403 81.847198
+v 8.234291 -30.730791 7.138779
+v 15.907428 -27.552473 7.138779
+v -16.188663 -13.583906 80.847198
+v 22.496500 -22.496500 7.138779
+v -16.188663 -13.583906 81.847198
+v 27.552473 -15.907428 7.138780
+v -13.583902 -16.188667 80.847198
+v 30.730791 -8.234291 7.138780
+v -13.583902 -16.188667 81.847198
+v -10.566400 -18.301546 80.847198
+v 30.504807 8.173738 8.146670
+v -10.566400 -18.301546 81.847198
+v -7.227843 -19.858339 80.847198
+v -7.227843 -19.858339 81.847198
+v 22.331068 22.331068 8.146671
+v -3.669672 -20.811749 80.847198
+v 8.173738 30.504807 8.146671
+v -3.669672 -20.811749 81.847198
+v 0.000000 -21.132803 81.847198
+v -8.173738 30.504807 8.146671
+v 0.000000 -21.132803 80.847198
+v 3.669672 -20.811749 80.847198
+v -22.331068 22.331068 8.146671
+v 3.669672 -20.811749 81.847198
+v 7.227843 -19.858339 80.847198
+v 7.227843 -19.858339 81.847198
+v -30.504807 8.173738 8.146670
+v 10.566400 -18.301546 81.847198
+v -30.504807 -8.173738 8.146670
+v 10.566400 -18.301546 80.847198
+v 13.583902 -16.188667 80.847198
+v -22.331068 -22.331068 8.146669
+v 13.583902 -16.188667 81.847198
+v 16.188663 -13.583906 80.847198
+v -8.173738 -30.504807 8.146669
+v 16.188663 -13.583906 81.847198
+v 18.301542 -10.566403 80.847198
+v 18.301542 -10.566403 81.847198
+v 8.173738 -30.504807 8.146669
+v 19.858335 -7.227846 80.847198
+v 19.858335 -7.227847 81.847198
+v 22.331068 -22.331068 8.146669
+v 20.811745 -3.669676 81.847198
+v 30.504807 -8.173738 8.146670
+v 20.811745 -3.669676 80.847198
+v 19.466776 -0.000003 74.852875
+v 32.580898 -0.000000 8.146670
+v 32.085922 5.657614 8.146670
+v 24.883451 -0.000001 31.504997
+v 30.616032 11.143324 8.146671
+v 30.616032 -11.143324 8.146669
+v 32.085922 -5.657615 8.146670
+v 16.858721 9.733385 74.852875
+v 16.179596 9.341291 68.331696
+v 18.682589 -0.000003 68.331696
+v 9.733388 16.858717 74.852875
+v 16.249046 9.381389 61.159252
+v 18.762783 -0.000003 61.159252
+v 9.341294 16.179592 68.331696
+v 0.000000 19.466772 74.852875
+v 20.184128 -0.000002 50.367893
+v 17.479967 10.092062 50.367893
+v 9.381392 16.249044 61.159252
+v 0.000000 18.682585 68.331696
+v -9.733388 16.858717 74.852875
+v 10.092064 17.479965 50.367893
+v 0.000000 18.762781 61.159252
+v -9.341294 16.179592 68.331696
+v 21.549702 12.441725 31.504997
+v 28.215887 16.290449 8.146671
+v 24.958418 20.942598 8.146671
+v -16.858721 9.733385 74.852875
+v 0.000000 20.184126 50.367893
+v -9.381392 16.249044 61.159252
+v -16.179596 9.341291 68.331696
+v 20.942598 24.958418 8.146671
+v 12.441726 21.549700 31.504997
+v 16.290449 28.215887 8.146671
+v 11.143324 30.616032 8.146671
+v 5.657614 32.085922 8.146671
+v -19.466776 -0.000003 74.852875
+v -10.092064 17.479965 50.367893
+v -16.249046 9.381389 61.159252
+v -18.682589 -0.000003 68.331696
+v 0.000000 24.883450 31.504999
+v 0.000000 32.580898 8.146671
+v -5.657614 32.085922 8.146671
+v -11.143324 30.616032 8.146671
+v -16.858721 -9.733391 74.852875
+v -17.479967 10.092062 50.367893
+v -18.762783 -0.000003 61.159252
+v -16.179596 -9.341297 68.331696
+v -12.441726 21.549700 31.504997
+v -16.290449 28.215887 8.146671
+v -20.942598 24.958418 8.146671
+v -24.958418 20.942598 8.146671
+v -9.733388 -16.858725 74.852875
+v -20.184128 -0.000002 50.367893
+v -16.249046 -9.381394 61.159252
+v -9.341294 -16.179600 68.331696
+v -21.549702 12.441725 31.504997
+v -28.215887 16.290449 8.146671
+v -30.616032 11.143324 8.146671
+v 0.000000 -19.466780 74.852875
+v -17.479967 -10.092066 50.367893
+v -9.381392 -16.249048 61.159252
+v 0.000000 -18.682592 68.331696
+v -24.883451 -0.000001 31.504997
+v -32.085922 5.657614 8.146670
+v -32.580898 -0.000000 8.146670
+v -32.085922 -5.657615 8.146670
+v 9.733388 -16.858725 74.852875
+v -10.092064 -17.479969 50.367893
+v 0.000000 -18.762785 61.159252
+v 9.341294 -16.179600 68.331696
+v -21.549702 -12.441727 31.504997
+v -30.616032 -11.143324 8.146669
+v -28.215887 -16.290449 8.146669
+v -24.958418 -20.942598 8.146669
+v -20.942598 -24.958418 8.146669
+v 16.858721 -9.733391 74.852875
+v 0.000000 -20.184130 50.367893
+v 9.381392 -16.249048 61.159252
+v 16.179596 -9.341297 68.331696
+v -12.441726 -21.549704 31.504997
+v -16.290449 -28.215887 8.146669
+v -11.143324 -30.616032 8.146669
+v 10.092064 -17.479969 50.367893
+v 16.249046 -9.381394 61.159252
+v 0.000000 -24.883453 31.504995
+v -5.657614 -32.085922 8.146669
+v 0.000000 -32.580898 8.146669
+v 5.657614 -32.085922 8.146669
+v 11.143324 -30.616032 8.146669
+v 17.479967 -10.092066 50.367893
+v 12.441726 -21.549704 31.504997
+v 16.290449 -28.215887 8.146669
+v 20.942598 -24.958418 8.146669
+v 21.549702 -12.441727 31.504997
+v 24.958418 -20.942598 8.146669
+v 28.215887 -16.290449 8.146669
+v 33.277927 5.867795 7.308438
+v 33.791294 -0.000000 7.308438
+v 31.753429 11.557303 7.308438
+v 29.264118 16.895647 7.308439
+v 25.885633 21.720625 7.308439
+v 21.720625 25.885633 7.308439
+v 16.895647 29.264118 7.308439
+v 11.557303 31.753429 7.308439
+v 5.867796 33.277927 7.308439
+v 0.000000 33.791294 7.308439
+v -5.867796 33.277927 7.308439
+v -11.557303 31.753429 7.308439
+v -16.895647 29.264118 7.308439
+v -21.720625 25.885633 7.308439
+v -25.885633 21.720625 7.308439
+v -29.264118 16.895647 7.308439
+v -31.753429 11.557303 7.308438
+v -33.277927 5.867795 7.308438
+v -33.791294 -0.000000 7.308438
+v -33.277927 -5.867796 7.308437
+v -31.753429 -11.557303 7.308437
+v -29.264118 -16.895647 7.308437
+v -25.885633 -21.720625 7.308437
+v -21.720625 -25.885633 7.308437
+v -16.895647 -29.264118 7.308436
+v -11.557303 -31.753429 7.308436
+v -5.867796 -33.277927 7.308436
+v 0.000000 -33.791294 7.308436
+v 5.867796 -33.277927 7.308436
+v 11.557303 -31.753429 7.308436
+v 16.895647 -29.264118 7.308436
+v 21.720625 -25.885633 7.308437
+v 25.885633 -21.720625 7.308437
+v 29.264118 -16.895647 7.308437
+v 31.753429 -11.557303 7.308437
+v 33.277927 -5.867796 7.308437
+v 32.638531 5.755054 6.000000
+v 33.142033 -0.000000 6.000000
+v 31.143324 11.335243 6.000000
+v 28.701843 16.571016 6.000001
+v 25.388269 21.303288 6.000001
+v 21.303288 25.388269 6.000001
+v 16.571016 28.701843 6.000001
+v 11.335243 31.143324 6.000001
+v 5.755054 32.638531 6.000001
+v 0.000000 33.142033 6.000001
+v -5.755054 32.638531 6.000001
+v -11.335243 31.143324 6.000001
+v -16.571016 28.701843 6.000001
+v -21.303288 25.388269 6.000001
+v -25.388269 21.303288 6.000001
+v -28.701843 16.571016 6.000001
+v -31.143324 11.335243 6.000000
+v -32.638531 5.755054 6.000000
+v -33.142033 -0.000000 6.000000
+v -32.638531 -5.755054 6.000000
+v -31.143324 -11.335243 6.000000
+v -28.701843 -16.571016 5.999999
+v -25.388269 -21.303288 5.999999
+v -21.303288 -25.388269 5.999999
+v -16.571016 -28.701843 5.999999
+v -11.335243 -31.143324 5.999999
+v -5.755054 -32.638531 5.999999
+v 0.000000 -33.142033 5.999999
+v 5.755054 -32.638531 5.999999
+v 11.335243 -31.143324 5.999999
+v 16.571016 -28.701843 5.999999
+v 21.303288 -25.388269 5.999999
+v 25.388269 -21.303288 5.999999
+v 28.701843 -16.571016 5.999999
+v 31.143324 -11.335243 6.000000
+v 32.638531 -5.755054 6.000000
+v 31.101114 5.483965 8.146670
+v 31.580900 -0.000000 8.146670
+v 29.676338 10.801304 8.146670
+v 27.349861 15.790450 8.146671
+v 24.192373 20.299810 8.146671
+v 20.299810 24.192373 8.146671
+v 15.790450 27.349861 8.146671
+v 10.801304 29.676338 8.146671
+v 5.483966 31.101114 8.146671
+v 0.000000 31.580900 8.146671
+v -5.483966 31.101114 8.146671
+v -10.801304 29.676338 8.146671
+v -15.790450 27.349861 8.146671
+v -20.299810 24.192373 8.146671
+v -24.192373 20.299810 8.146671
+v -27.349861 15.790450 8.146671
+v -29.676338 10.801304 8.146670
+v -31.101114 5.483965 8.146670
+v -31.580900 -0.000000 8.146670
+v -31.101114 -5.483966 8.146670
+v -29.676338 -10.801304 8.146670
+v -27.349861 -15.790450 8.146669
+v -24.192373 -20.299810 8.146669
+v -20.299810 -24.192373 8.146669
+v -15.790450 -27.349861 8.146669
+v -10.801304 -29.676338 8.146669
+v -5.483966 -31.101114 8.146669
+v 0.000000 -31.580900 8.146669
+v 5.483966 -31.101114 8.146669
+v 10.801304 -29.676338 8.146669
+v 15.790450 -27.349861 8.146669
+v 20.299810 -24.192373 8.146669
+v 24.192373 -20.299810 8.146669
+v 27.349861 -15.790450 8.146669
+v 29.676338 -10.801304 8.146670
+v 31.101114 -5.483966 8.146670
+v 19.595106 -0.000002 48.263905
+v 20.132799 -0.000004 80.847198
+v 19.826937 3.496020 80.847198
+v 18.793509 -0.000003 76.368752
+v 18.918644 6.885819 80.847198
+v 18.918644 -6.885826 80.847198
+v 19.826937 -3.496027 80.847198
+v 16.969858 9.797551 48.263905
+v 9.797553 16.969856 48.263905
+v 15.294666 8.830376 63.068100
+v 17.660759 -0.000003 63.068100
+v 0.000000 19.595104 48.263905
+v 15.552605 8.979297 71.607796
+v 17.435516 10.066396 80.847198
+v 15.422620 12.941111 80.847198
+v 17.958601 -0.000003 71.607796
+v 8.830379 15.294663 63.068100
+v -9.797553 16.969856 48.263905
+v 8.979300 15.552602 71.607796
+v 12.941114 15.422616 80.847198
+v 10.066400 17.435513 80.847198
+v 6.885823 18.918640 80.847198
+v 0.000000 17.660757 63.068100
+v -16.969858 9.797551 48.263905
+v 0.000000 17.958597 71.607796
+v 3.496024 19.826933 80.847198
+v 0.000000 20.132795 80.847198
+v -3.496024 19.826933 80.847198
+v -8.830379 15.294663 63.068100
+v -19.595106 -0.000002 48.263905
+v -6.885823 18.918640 80.847198
+v -8.979300 15.552602 71.607796
+v -10.066400 17.435513 80.847198
+v -12.941114 15.422616 80.847198
+v -15.294666 8.830376 63.068100
+v -16.969858 -9.797555 48.263905
+v -15.552605 8.979297 71.607796
+v -15.422620 12.941111 80.847198
+v -17.435516 10.066396 80.847198
+v -18.918644 6.885819 80.847198
+v -19.826937 3.496020 80.847198
+v -17.660759 -0.000003 63.068100
+v -9.797553 -16.969860 48.263905
+v -17.958601 -0.000003 71.607796
+v -20.132799 -0.000004 80.847198
+v -19.826937 -3.496027 80.847198
+v -15.294666 -8.830381 63.068100
+v 0.000000 -19.595108 48.263905
+v -15.552605 -8.979302 71.607796
+v -18.918644 -6.885826 80.847198
+v -17.435516 -10.066403 80.847198
+v -15.422620 -12.941118 80.847198
+v -8.830379 -15.294669 63.068100
+v 9.797553 -16.969860 48.263905
+v -8.979300 -15.552608 71.607796
+v -12.941114 -15.422624 80.847198
+v -10.066400 -17.435520 80.847198
+v -6.885823 -18.918648 80.847198
+v -3.496024 -19.826941 80.847198
+v 0.000000 -17.660761 63.068100
+v 16.969858 -9.797555 48.263905
+v 0.000000 -17.958605 71.607796
+v 0.000000 -20.132803 80.847198
+v 3.496024 -19.826941 80.847198
+v 8.830379 -15.294669 63.068100
+v 8.979300 -15.552608 71.607796
+v 6.885823 -18.918648 80.847198
+v 10.066400 -17.435520 80.847198
+v 12.941114 -15.422624 80.847198
+v 15.422620 -12.941118 80.847198
+v 15.294666 -8.830381 63.068100
+v 15.552605 -8.979302 71.607796
+v 17.435516 -10.066403 80.847198
+v 18.842131 3.322372 81.347198
+v 19.132799 -0.000004 81.347198
+v 17.978951 6.543800 81.347198
+v 16.569490 9.566396 81.347198
+v 14.656575 12.298322 81.347198
+v 12.298326 14.656571 81.347198
+v 9.566400 16.569487 81.347198
+v 6.543803 17.978947 81.347198
+v 3.322376 18.842127 81.347198
+v 0.000000 19.132795 81.347198
+v -3.322376 18.842127 81.347198
+v -6.543803 17.978947 81.347198
+v -9.566400 16.569487 81.347198
+v -12.298326 14.656571 81.347198
+v -14.656575 12.298322 81.347198
+v -16.569490 9.566396 81.347198
+v -17.978951 6.543800 81.347198
+v -18.842131 3.322372 81.347198
+v -19.132799 -0.000004 81.347198
+v -18.842131 -3.322380 81.347198
+v -17.978951 -6.543807 81.347198
+v -16.569490 -9.566403 81.347198
+v -14.656575 -12.298329 81.347198
+v -12.298326 -14.656579 81.347198
+v -9.566400 -16.569494 81.347198
+v -6.543803 -17.978954 81.347198
+v -3.322376 -18.842134 81.347198
+v 0.000000 -19.132803 81.347198
+v 3.322376 -18.842134 81.347198
+v 6.543803 -17.978954 81.347198
+v 9.566400 -16.569494 81.347198
+v 12.298326 -14.656579 81.347198
+v 14.656575 -12.298329 81.347198
+v 16.569490 -9.566403 81.347198
+v 17.978951 -6.543807 81.347198
+v 18.842131 -3.322380 81.347198
+v 18.842131 3.322372 81.847198
+v 19.132799 -0.000004 81.847198
+v 17.978951 6.543799 81.847198
+v 16.569490 9.566396 81.847198
+v 14.656575 12.298322 81.847198
+v 12.298326 14.656571 81.847198
+v 9.566400 16.569487 81.847198
+v 6.543803 17.978947 81.847198
+v 3.322376 18.842127 81.847198
+v 0.000000 19.132795 81.847198
+v -3.322376 18.842127 81.847198
+v -6.543803 17.978947 81.847198
+v -9.566400 16.569487 81.847198
+v -12.298326 14.656571 81.847198
+v -14.656575 12.298322 81.847198
+v -16.569490 9.566396 81.847198
+v -17.978951 6.543799 81.847198
+v -18.842131 3.322372 81.847198
+v -19.132799 -0.000004 81.847198
+v -18.842131 -3.322380 81.847198
+v -17.978951 -6.543807 81.847198
+v -16.569490 -9.566403 81.847198
+v -14.656575 -12.298329 81.847198
+v -12.298326 -14.656579 81.847198
+v -9.566400 -16.569494 81.847198
+v -6.543803 -17.978954 81.847198
+v -3.322376 -18.842134 81.847198
+v 0.000000 -19.132803 81.847198
+v 3.322376 -18.842134 81.847198
+v 6.543803 -17.978954 81.847198
+v 9.566400 -16.569494 81.847198
+v 12.298326 -14.656579 81.847198
+v 14.656575 -12.298329 81.847198
+v 16.569490 -9.566403 81.847198
+v 17.978951 -6.543807 81.847198
+v 18.842131 -3.322380 81.847198
+v 31.674082 3.944398 6.000000
+v 31.462994 5.547774 6.000000
+v 32.193371 -0.000000 6.000000
+v 31.026218 8.501712 6.000000
+v 30.021639 10.926983 6.000000
+v 31.282236 6.920754 6.000000
+v 31.096409 8.332258 6.000000
+v 27.880278 16.096685 6.000000
+v 28.425097 14.781374 6.000000
+v 28.629753 14.287289 6.000000
+v 25.458357 19.252993 6.000001
+v 24.473864 20.536009 6.000001
+v 27.880278 16.096685 6.000000
+v 22.618635 22.875809 6.000001
+v 20.536009 24.473864 6.000001
+v 23.630835 21.634666 6.000001
+v 22.764151 22.764151 6.000001
+v 19.252993 25.458359 6.000001
+v 16.096685 27.880278 6.000001
+v 16.096685 27.880278 6.000001
+v 17.226170 27.013594 6.000001
+v 12.421089 29.402760 6.000001
+v 10.926983 30.021639 6.000001
+v 8.150412 31.120350 6.000001
+v 6.920755 31.282236 6.000001
+v 5.547775 31.462994 6.000001
+v 9.647570 30.551588 6.000001
+v 8.332258 31.096409 6.000001
+v 3.944399 31.674082 6.000001
+v 0.000000 32.193371 6.000001
+v -3.944399 31.674082 6.000001
+v -5.547775 31.462994 6.000001
+v -1.411503 32.007542 6.000001
+v -8.150412 31.120350 6.000001
+v -8.332258 31.096409 6.000001
+v -9.647570 30.551588 6.000001
+v -10.926983 30.021639 6.000001
+v -14.287289 28.629753 6.000001
+v -16.096685 27.880278 6.000001
+v -16.096685 27.880278 6.000001
+v -17.226170 27.013594 6.000001
+v -17.650452 26.688030 6.000001
+v -20.536009 24.473864 6.000001
+v -22.875809 22.618635 6.000001
+v -23.630835 21.634666 6.000001
+v -24.473864 20.536009 6.000001
+v -22.764151 22.764151 6.000001
+v -27.880278 16.096685 6.000000
+v -27.880278 16.096685 6.000000
+v -26.688030 17.650450 6.000001
+v -28.629753 14.287289 6.000000
+v -28.425097 14.781374 6.000000
+v -30.021639 10.926983 6.000000
+v -31.026218 8.501712 6.000000
+v -31.462994 5.547774 6.000000
+v -31.282236 6.920754 6.000000
+v -31.096409 8.332258 6.000000
+v -31.937738 1.941721 6.000000
+v -32.193371 -0.000000 6.000000
+v -31.674082 -3.944399 6.000000
+v -31.462994 -5.547775 6.000000
+v -32.007542 -1.411504 6.000000
+v -31.120350 -8.150412 6.000000
+v -31.096409 -8.332258 6.000000
+v -30.021639 -10.926983 6.000000
+v -28.629753 -14.287289 6.000000
+v -28.425097 -14.781374 6.000000
+v -27.880278 -16.096685 6.000000
+v -27.880278 -16.096685 6.000000
+v -27.013594 -17.226170 5.999999
+v -26.688030 -17.650452 5.999999
+v -24.473864 -20.536009 5.999999
+v -22.618635 -22.875809 5.999999
+v -21.634666 -23.630835 5.999999
+v -20.536009 -24.473864 5.999999
+v -22.764151 -22.764151 5.999999
+v -17.650450 -26.688030 5.999999
+v -16.096685 -27.880278 5.999999
+v -16.096685 -27.880278 5.999999
+v -12.421089 -29.402760 5.999999
+v -10.926983 -30.021639 5.999999
+v -14.781374 -28.425097 5.999999
+v -8.150412 -31.120350 5.999999
+v -6.920755 -31.282236 5.999999
+v -5.547775 -31.462994 5.999999
+v -8.332258 -31.096409 5.999999
+v -1.941721 -31.937738 5.999999
+v 0.000000 -32.193371 5.999999
+v 3.944399 -31.674082 5.999999
+v 5.547775 -31.462994 5.999999
+v 1.411503 -32.007542 5.999999
+v 8.150412 -31.120350 5.999999
+v 10.926983 -30.021639 5.999999
+v 9.647570 -30.551588 5.999999
+v 8.332258 -31.096409 5.999999
+v 14.287289 -28.629753 5.999999
+v 16.096685 -27.880278 5.999999
+v 16.096685 -27.880278 5.999999
+v 17.650452 -26.688030 5.999999
+v 17.226170 -27.013594 5.999999
+v 20.536009 -24.473864 5.999999
+v 22.875809 -22.618635 5.999999
+v 22.764151 -22.764151 5.999999
+v 23.630835 -21.634666 5.999999
+v 24.473864 -20.536009 5.999999
+v 26.688030 -17.650450 5.999999
+v 27.880278 -16.096685 6.000000
+v 27.880278 -16.096685 6.000000
+v 28.425097 -14.781374 6.000000
+v 29.402760 -12.421089 6.000000
+v 30.021639 -10.926983 6.000000
+v 31.096409 -8.332258 6.000000
+v 31.120350 -8.150412 6.000000
+v 31.462994 -5.547775 6.000000
+v 31.282236 -6.920755 6.000000
+v 31.674082 -3.944399 6.000000
+v 31.258039 3.690317 7.444556
+v 31.117430 5.297473 7.138780
+v 31.101114 5.483965 7.114002
+v 29.958483 9.748328 7.721572
+v 29.692530 10.740873 7.138781
+v 29.676338 10.801304 7.114001
+v 31.084923 5.544394 7.138781
+v 30.960592 6.008401 7.411233
+v 30.087452 9.267003 8.004190
+v 30.152472 9.024349 8.146670
+v 30.624981 7.260917 8.146670
+v 28.713457 12.866208 7.535126
+v 29.597219 10.970975 7.138781
+v 25.225101 18.824923 7.444554
+v 24.299763 20.146442 7.138781
+v 24.192373 20.299810 7.113999
+v 21.070644 23.421539 7.721572
+v 20.344053 24.148130 7.138781
+v 20.299810 24.192373 7.113999
+v 21.600634 22.891550 8.146671
+v 21.422998 23.069185 8.004192
+v 22.891550 21.600634 8.146671
+v 24.148130 20.344053 7.138781
+v 23.808455 20.683729 7.411232
+v 18.433477 25.499193 7.535127
+v 20.146442 24.299763 7.138781
+v 12.866208 28.713457 7.535127
+v 10.970975 29.597219 7.138782
+v 10.801304 29.676338 7.114002
+v 7.260918 30.624981 8.146671
+v 7.018263 30.690001 8.004191
+v 9.024349 30.152472 8.146671
+v 6.536940 30.818972 7.721574
+v 10.740873 29.692530 7.138782
+v 9.267003 30.087452 8.004191
+v 5.544394 31.084923 7.138782
+v 5.483966 31.101114 7.114003
+v 3.214267 31.299688 7.535128
+v 5.297473 31.117430 7.138782
+v -3.690317 31.258039 7.444557
+v -5.297473 31.117430 7.138782
+v -5.483966 31.101114 7.114003
+v -9.748328 29.958483 7.721573
+v -10.740873 29.692530 7.138782
+v -10.801304 29.676338 7.114002
+v -9.024349 30.152472 8.146671
+v -9.267003 30.087452 8.004191
+v -7.260918 30.624981 8.146671
+v -5.544394 31.084923 7.138782
+v -6.008402 30.960592 7.411234
+v -12.866208 28.713457 7.535127
+v -10.970975 29.597219 7.138782
+v -18.824923 25.225101 7.444554
+v -20.146442 24.299763 7.138781
+v -20.299810 24.192373 7.113999
+v -23.421539 21.070644 7.721572
+v -23.808455 20.683729 7.411232
+v -24.148130 20.344053 7.138781
+v -24.192373 20.299810 7.113999
+v -21.600634 22.891550 8.146671
+v -22.891550 21.600634 8.146671
+v -20.344053 24.148130 7.138781
+v -20.683729 23.808455 7.411232
+v -24.299763 20.146442 7.138781
+v -28.915413 12.433113 7.444555
+v -29.597219 10.970975 7.138781
+v -29.676338 10.801304 7.114001
+v -30.818972 6.536940 7.721573
+v -31.084923 5.544394 7.138781
+v -31.101114 5.483965 7.114002
+v -30.624981 7.260917 8.146670
+v -30.690001 7.018263 8.004190
+v -30.152472 9.024349 8.146670
+v -29.692530 10.740873 7.138781
+v -29.816860 10.276866 7.411232
+v -31.299688 3.214267 7.535126
+v -31.117430 5.297473 7.138780
+v -31.258039 -3.690317 7.444556
+v -31.117430 -5.297474 7.138780
+v -31.101114 -5.483966 7.114001
+v -29.958483 -9.748328 7.721571
+v -29.692530 -10.740873 7.138780
+v -29.676338 -10.801304 7.114000
+v -30.152472 -9.024349 8.146670
+v -30.087452 -9.267003 8.004190
+v -30.624981 -7.260918 8.146670
+v -31.084923 -5.544394 7.138780
+v -30.960592 -6.008402 7.411232
+v -28.713457 -12.866208 7.535125
+v -29.597219 -10.970975 7.138780
+v -25.225101 -18.824923 7.444552
+v -24.299763 -20.146442 7.138779
+v -24.192373 -20.299810 7.113997
+v -23.421539 -21.070644 7.721570
+v -23.808455 -20.683729 7.411231
+v -24.148130 -20.344053 7.138779
+v -22.891550 -21.600634 8.146669
+v -20.344053 -24.148130 7.138779
+v -21.422998 -23.069185 8.004190
+v -20.299810 -24.192373 7.113997
+v -21.600634 -22.891550 8.146669
+v -18.824923 -25.225101 7.444552
+v -20.146442 -24.299763 7.138779
+v -18.433477 -25.499193 7.535125
+v -12.866208 -28.713457 7.535124
+v -10.970975 -29.597219 7.138779
+v -10.801304 -29.676338 7.113999
+v -6.536940 -30.818972 7.721571
+v -5.544394 -31.084923 7.138779
+v -5.483966 -31.101114 7.114000
+v -10.740873 -29.692530 7.138779
+v -9.267003 -30.087452 8.004189
+v -7.018263 -30.690001 8.004189
+v -7.260918 -30.624981 8.146669
+v -9.024349 -30.152472 8.146669
+v -3.214267 -31.299688 7.535125
+v -5.297473 -31.117430 7.138779
+v 6.536940 -30.818972 7.721571
+v 5.544394 -31.084923 7.138779
+v 5.483966 -31.101114 7.114000
+v 3.214267 -31.299688 7.535125
+v 5.297473 -31.117430 7.138779
+v 7.260918 -30.624981 8.146669
+v 7.018263 -30.690001 8.004189
+v 9.024349 -30.152472 8.146669
+v 10.740873 -29.692530 7.138779
+v 9.267003 -30.087452 8.004189
+v 10.801304 -29.676338 7.113999
+v 12.866208 -28.713457 7.535124
+v 10.970975 -29.597219 7.138779
+v 18.824923 -25.225101 7.444552
+v 20.146442 -24.299763 7.138779
+v 20.299810 -24.192373 7.113997
+v 20.344053 -24.148130 7.138779
+v 22.891550 -21.600634 8.146669
+v 23.421539 -21.070644 7.721570
+v 21.600634 -22.891550 8.146669
+v 20.683729 -23.808455 7.411231
+v 24.148130 -20.344053 7.138779
+v 24.192373 -20.299810 7.113997
+v 23.808455 -20.683729 7.411231
+v 24.299763 -20.146442 7.138779
+v 28.915413 -12.433113 7.444554
+v 29.597219 -10.970975 7.138780
+v 29.676338 -10.801304 7.114000
+v 29.692530 -10.740873 7.138780
+v 29.816860 -10.276866 7.411232
+v 30.690001 -7.018264 8.004190
+v 30.818972 -6.536941 7.721572
+v 30.624981 -7.260918 8.146670
+v 30.152472 -9.024349 8.146670
+v 31.084923 -5.544394 7.138780
+v 31.101114 -5.483966 7.114001
+v 31.299688 -3.214267 7.535126
+v 31.117430 -5.297474 7.138780
+v 30.051992 -8.867484 8.587282
+v 29.422388 -7.883415 11.349128
+v 30.171564 6.895060 9.851628
+v 29.430515 8.965883 10.427240
+v 21.014034 22.395657 10.596725
+v 22.760193 21.428247 8.834147
+v 7.071633 29.828588 10.765758
+v 8.977996 29.956787 8.790085
+v -8.671090 29.347916 10.926836
+v -7.228393 30.438637 8.749757
+v -22.057669 21.141844 11.072430
+v -21.503084 22.738945 8.712857
+v -29.596914 7.418790 11.194446
+v -30.007456 8.922930 8.679046
+v -29.358049 -8.201040 11.284917
+v -30.452654 -7.298895 8.648010
+v -22.715351 -21.567936 8.619473
+v -21.442453 -21.640022 11.337319
+v -8.871375 -30.049038 8.593196
+v -7.346556 -30.459536 8.587247
+v -7.885026 -29.421959 11.349119
+v 7.884682 -29.422047 11.349134
+v 7.346619 -30.459543 8.587172
+v 21.539225 -21.538036 11.349121
+v 21.591993 -22.705486 8.587354
+vn -0.9416 -0.1240 -0.3130
+vn -0.8775 -0.3635 -0.3130
+vn -0.7535 -0.5782 -0.3130
+vn -0.5782 -0.7535 -0.3130
+vn -0.3635 -0.8775 -0.3130
+vn -0.1240 -0.9416 -0.3130
+vn 0.1240 -0.9416 -0.3130
+vn 0.3635 -0.8775 -0.3130
+vn 0.5782 -0.7535 -0.3130
+vn 0.7535 -0.5782 -0.3130
+vn 0.8775 -0.3635 -0.3130
+vn 0.9416 -0.1240 -0.3130
+vn 0.9416 0.1240 -0.3130
+vn 0.8775 0.3635 -0.3130
+vn 0.7535 0.5782 -0.3130
+vn 0.5782 0.7535 -0.3130
+vn 0.3635 0.8775 -0.3130
+vn 0.1240 0.9416 -0.3130
+vn -0.1240 0.9416 -0.3130
+vn -0.3635 0.8775 -0.3130
+vn -0.5782 0.7535 -0.3130
+vn -0.7535 0.5782 -0.3130
+vn -0.8775 0.3635 -0.3130
+vn -0.9416 0.1240 -0.3130
+vn -0.9662 -0.1272 -0.2243
+vn -0.9003 -0.3729 -0.2243
+vn -0.7731 -0.5933 -0.2243
+vn -0.5933 -0.7731 -0.2243
+vn -0.5933 -0.7731 -0.2242
+vn -0.3729 -0.9003 -0.2243
+vn -0.1272 -0.9662 -0.2243
+vn 0.1272 -0.9662 -0.2243
+vn 0.3729 -0.9003 -0.2243
+vn 0.5933 -0.7731 -0.2243
+vn 0.7731 -0.5933 -0.2243
+vn 0.9003 -0.3729 -0.2243
+vn 0.9662 -0.1272 -0.2243
+vn 0.9662 0.1272 -0.2243
+vn 0.9003 0.3729 -0.2243
+vn 0.7731 0.5933 -0.2243
+vn 0.5933 0.7731 -0.2242
+vn 0.5933 0.7731 -0.2243
+vn 0.3729 0.9003 -0.2243
+vn 0.1272 0.9662 -0.2243
+vn -0.1272 0.9662 -0.2243
+vn -0.3729 0.9003 -0.2243
+vn -0.5933 0.7731 -0.2243
+vn -0.7731 0.5933 -0.2243
+vn -0.9003 0.3729 -0.2243
+vn -0.9662 0.1272 -0.2243
+vn -0.9089 -0.2283 -0.3489
+vn -0.9518 -0.1253 -0.2800
+vn -0.8844 -0.3663 -0.2894
+vn -0.7041 -0.6106 -0.3624
+vn -0.7590 -0.5824 -0.2911
+vn -0.5821 -0.7586 -0.2929
+vn -0.3125 -0.8796 -0.3586
+vn -0.3657 -0.8828 -0.2948
+vn -0.1246 -0.9467 -0.2969
+vn 0.1616 -0.9210 -0.3544
+vn 0.1246 -0.9461 -0.2990
+vn 0.3649 -0.8809 -0.3013
+vn 0.5954 -0.7233 -0.3497
+vn 0.5800 -0.7559 -0.3037
+vn 0.7553 -0.5795 -0.3061
+vn 0.8763 -0.3369 -0.3445
+vn 0.8788 -0.3640 -0.3087
+vn 0.9422 -0.1240 -0.3114
+vn 0.9413 0.1239 -0.3142
+vn 0.9306 0.1387 -0.3388
+vn 0.8762 0.3629 -0.3170
+vn 0.7433 0.5804 -0.3327
+vn 0.7516 0.5768 -0.3200
+vn 0.5761 0.7508 -0.3231
+vn 0.3607 0.8732 -0.3278
+vn 0.3617 0.8733 -0.3262
+vn 0.1233 0.9366 -0.3278
+vn 0.1233 0.9367 -0.3278
+vn -0.1233 0.9367 -0.3278
+vn -0.3615 0.8728 -0.3277
+vn -0.5752 0.7495 -0.3278
+vn -0.5751 0.7495 -0.3277
+vn -0.7495 0.5751 -0.3278
+vn -0.8728 0.3615 -0.3278
+vn -0.9367 0.1233 -0.3278
+vn 0.9962 0.0872 0.0000
+vn 0.9659 0.2588 0.0000
+vn 0.9063 0.4226 0.0000
+vn 0.8192 0.5736 0.0000
+vn 0.7071 0.7071 0.0000
+vn 0.5736 0.8192 0.0000
+vn 0.4226 0.9063 0.0000
+vn 0.2588 0.9659 0.0000
+vn 0.0872 0.9962 0.0000
+vn -0.0872 0.9962 0.0000
+vn -0.2588 0.9659 0.0000
+vn -0.4226 0.9063 0.0000
+vn -0.5736 0.8192 0.0000
+vn -0.7071 0.7071 0.0000
+vn -0.8192 0.5736 0.0000
+vn -0.9063 0.4226 0.0000
+vn -0.9659 0.2588 0.0000
+vn -0.9962 0.0872 0.0000
+vn -0.9962 -0.0872 0.0000
+vn -0.9659 -0.2588 0.0000
+vn -0.9063 -0.4226 0.0000
+vn -0.8192 -0.5736 0.0000
+vn -0.7071 -0.7071 0.0000
+vn -0.5736 -0.8192 0.0000
+vn -0.4226 -0.9063 0.0000
+vn -0.2588 -0.9659 0.0000
+vn -0.0872 -0.9962 0.0000
+vn 0.0872 -0.9962 0.0000
+vn 0.2588 -0.9659 0.0000
+vn 0.4226 -0.9063 0.0000
+vn 0.5736 -0.8192 0.0000
+vn 0.7071 -0.7071 0.0000
+vn 0.8192 -0.5736 0.0000
+vn 0.9063 -0.4226 0.0000
+vn 0.9659 -0.2588 0.0000
+vn 0.9962 -0.0872 0.0000
+vn 0.9601 0.0840 -0.2668
+vn 0.9465 0.0828 0.3119
+vn 0.9087 0.2435 0.3392
+vn 0.9601 -0.0840 -0.2668
+vn 0.9087 -0.2435 0.3392
+vn 0.9465 -0.0828 0.3119
+vn 0.9044 0.2423 -0.3513
+vn 0.8734 0.4073 -0.2668
+vn 0.7895 0.5528 -0.2668
+vn 0.9595 0.2571 -0.1154
+vn 0.6620 0.6620 -0.3513
+vn 0.5528 0.7895 -0.2668
+vn 0.4073 0.8734 -0.2668
+vn 0.9659 0.2588 0.0108
+vn 0.7024 0.7024 -0.1154
+vn 0.7071 0.7071 0.0108
+vn 0.2423 0.9044 -0.3513
+vn 0.0840 0.9601 -0.2668
+vn -0.0840 0.9601 -0.2668
+vn 0.9582 0.2567 0.1262
+vn 0.2571 0.9595 -0.1154
+vn -0.2423 0.9044 -0.3513
+vn -0.4073 0.8734 -0.2668
+vn -0.5528 0.7895 -0.2668
+vn -0.2571 0.9595 -0.1154
+vn 0.7015 0.7015 0.1262
+vn 0.2588 0.9659 0.0108
+vn -0.2588 0.9659 0.0108
+vn 0.8611 0.4015 0.3119
+vn 0.7783 0.5450 0.3119
+vn 0.6875 0.6875 0.2340
+vn 0.9391 0.2516 0.2340
+vn -0.6620 0.6620 -0.3513
+vn -0.7895 0.5528 -0.2668
+vn -0.8734 0.4073 -0.2668
+vn 0.2567 0.9582 0.1262
+vn -0.2567 0.9582 0.1262
+vn -0.7024 0.7024 -0.1154
+vn 0.6652 0.6652 0.3392
+vn 0.5450 0.7783 0.3119
+vn 0.4015 0.8611 0.3119
+vn 0.2435 0.9087 0.3392
+vn 0.2516 0.9391 0.2340
+vn -0.9044 0.2423 -0.3513
+vn -0.9601 0.0840 -0.2668
+vn -0.9601 -0.0840 -0.2668
+vn -0.9595 0.2571 -0.1154
+vn -0.7071 0.7071 0.0108
+vn -0.7015 0.7015 0.1262
+vn 0.0828 0.9465 0.3119
+vn -0.0828 0.9465 0.3119
+vn -0.2435 0.9087 0.3392
+vn -0.9044 -0.2423 -0.3513
+vn -0.8734 -0.4073 -0.2668
+vn -0.7895 -0.5528 -0.2668
+vn -0.9659 0.2588 0.0108
+vn -0.9595 -0.2571 -0.1154
+vn -0.2516 0.9391 0.2340
+vn -0.4015 0.8611 0.3119
+vn -0.5450 0.7783 0.3119
+vn -0.6652 0.6652 0.3392
+vn -0.6620 -0.6620 -0.3513
+vn -0.5528 -0.7895 -0.2668
+vn -0.4073 -0.8734 -0.2668
+vn -0.7024 -0.7024 -0.1154
+vn -0.9582 0.2567 0.1262
+vn -0.9659 -0.2588 0.0108
+vn -0.6875 0.6875 0.2340
+vn -0.7783 0.5450 0.3119
+vn -0.8611 0.4015 0.3119
+vn -0.2423 -0.9044 -0.3513
+vn -0.0840 -0.9601 -0.2668
+vn 0.0840 -0.9601 -0.2668
+vn -0.9582 -0.2567 0.1262
+vn -0.7071 -0.7071 0.0108
+vn -0.2571 -0.9595 -0.1154
+vn -0.9391 0.2516 0.2340
+vn -0.9087 0.2435 0.3392
+vn -0.9465 0.0828 0.3119
+vn -0.9465 -0.0828 0.3119
+vn 0.2423 -0.9044 -0.3513
+vn 0.4073 -0.8734 -0.2668
+vn 0.5528 -0.7895 -0.2668
+vn 0.6620 -0.6620 -0.3513
+vn -0.7015 -0.7015 0.1262
+vn -0.2588 -0.9659 0.0108
+vn -0.2567 -0.9582 0.1262
+vn 0.2571 -0.9595 -0.1154
+vn -0.9391 -0.2516 0.2340
+vn -0.6875 -0.6875 0.2340
+vn -0.9087 -0.2435 0.3392
+vn -0.8611 -0.4015 0.3119
+vn -0.7783 -0.5450 0.3119
+vn -0.6652 -0.6652 0.3392
+vn 0.9044 -0.2423 -0.3513
+vn 0.7895 -0.5528 -0.2668
+vn 0.8734 -0.4073 -0.2668
+vn 0.2588 -0.9659 0.0108
+vn 0.7071 -0.7071 0.0108
+vn 0.7024 -0.7024 -0.1154
+vn 0.9595 -0.2571 -0.1154
+vn 0.9659 -0.2588 0.0108
+vn -0.5450 -0.7783 0.3119
+vn -0.4015 -0.8611 0.3119
+vn 0.2567 -0.9582 0.1262
+vn 0.7015 -0.7015 0.1262
+vn -0.2435 -0.9087 0.3392
+vn -0.0828 -0.9465 0.3119
+vn 0.0828 -0.9465 0.3119
+vn 0.2435 -0.9087 0.3392
+vn -0.2516 -0.9391 0.2340
+vn 0.9582 -0.2567 0.1262
+vn 0.2516 -0.9391 0.2340
+vn 0.4015 -0.8611 0.3119
+vn 0.5450 -0.7783 0.3119
+vn 0.6875 -0.6875 0.2340
+vn 0.9391 -0.2516 0.2340
+vn 0.6652 -0.6652 0.3392
+vn 0.7783 -0.5450 0.3119
+vn 0.8611 -0.4015 0.3119
+vn 0.5686 0.0497 0.8211
+vn 0.5514 0.1477 0.8211
+vn 0.5173 0.2412 0.8211
+vn 0.4676 0.3274 0.8211
+vn 0.4036 0.4036 0.8211
+vn 0.3274 0.4676 0.8211
+vn 0.2412 0.5173 0.8211
+vn 0.1477 0.5514 0.8211
+vn 0.1477 0.5513 0.8211
+vn 0.0497 0.5686 0.8211
+vn -0.0497 0.5686 0.8211
+vn -0.1477 0.5514 0.8211
+vn -0.1477 0.5513 0.8211
+vn -0.2412 0.5173 0.8211
+vn -0.3274 0.4676 0.8211
+vn -0.4036 0.4036 0.8211
+vn -0.4676 0.3274 0.8211
+vn -0.5173 0.2412 0.8211
+vn -0.5514 0.1477 0.8211
+vn -0.5686 0.0497 0.8211
+vn -0.5686 -0.0497 0.8211
+vn -0.5513 -0.1477 0.8211
+vn -0.5514 -0.1477 0.8211
+vn -0.5173 -0.2412 0.8211
+vn -0.4676 -0.3274 0.8211
+vn -0.4036 -0.4036 0.8211
+vn -0.3274 -0.4676 0.8211
+vn -0.2412 -0.5173 0.8211
+vn -0.1477 -0.5514 0.8211
+vn -0.1477 -0.5513 0.8211
+vn -0.0497 -0.5686 0.8211
+vn 0.0497 -0.5686 0.8211
+vn 0.1477 -0.5514 0.8211
+vn 0.2412 -0.5173 0.8211
+vn 0.3274 -0.4676 0.8211
+vn 0.4036 -0.4036 0.8211
+vn 0.4676 -0.3274 0.8211
+vn 0.5173 -0.2412 0.8211
+vn 0.5514 -0.1477 0.8211
+vn 0.5513 -0.1477 0.8211
+vn 0.5686 -0.0497 0.8211
+vn 0.8930 0.0781 -0.4431
+vn 0.8659 0.2320 -0.4431
+vn 0.8125 0.3789 -0.4431
+vn 0.7343 0.5142 -0.4431
+vn 0.6339 0.6339 -0.4431
+vn 0.5142 0.7343 -0.4431
+vn 0.3789 0.8125 -0.4431
+vn 0.2320 0.8659 -0.4431
+vn 0.0781 0.8930 -0.4431
+vn -0.0781 0.8930 -0.4431
+vn -0.2320 0.8659 -0.4431
+vn -0.3789 0.8125 -0.4431
+vn -0.5142 0.7343 -0.4431
+vn -0.6339 0.6339 -0.4431
+vn -0.7343 0.5142 -0.4431
+vn -0.8125 0.3789 -0.4431
+vn -0.8659 0.2320 -0.4431
+vn -0.8930 0.0781 -0.4431
+vn -0.8930 -0.0781 -0.4431
+vn -0.8659 -0.2320 -0.4431
+vn -0.8125 -0.3789 -0.4431
+vn -0.7343 -0.5142 -0.4431
+vn -0.6339 -0.6339 -0.4431
+vn -0.5142 -0.7343 -0.4431
+vn -0.3789 -0.8125 -0.4431
+vn -0.2320 -0.8659 -0.4431
+vn -0.0781 -0.8930 -0.4431
+vn 0.0781 -0.8930 -0.4431
+vn 0.2320 -0.8659 -0.4431
+vn 0.3789 -0.8125 -0.4431
+vn 0.5142 -0.7343 -0.4431
+vn 0.6339 -0.6339 -0.4431
+vn 0.7343 -0.5142 -0.4431
+vn 0.8125 -0.3789 -0.4431
+vn 0.8659 -0.2320 -0.4431
+vn 0.8930 -0.0781 -0.4431
+vn 0.0000 0.0000 -1.0000
+vn -0.9548 -0.0835 -0.2853
+vn -0.9547 -0.0835 0.2855
+vn -0.8890 -0.2382 0.3911
+vn -0.9220 0.2470 -0.2982
+vn -0.9548 0.0835 -0.2853
+vn -0.8890 0.2382 0.3911
+vn -0.9547 0.0835 0.2855
+vn -0.9220 -0.2470 -0.2982
+vn -0.8686 -0.4051 -0.2853
+vn -0.7851 -0.5497 -0.2853
+vn -0.6749 -0.6749 -0.2982
+vn -0.5497 -0.7851 -0.2853
+vn -0.4051 -0.8686 -0.2853
+vn -0.7015 -0.7015 -0.1252
+vn -0.9583 -0.2568 -0.1252
+vn -0.2470 -0.9220 -0.2982
+vn -0.0835 -0.9548 -0.2853
+vn 0.0835 -0.9548 -0.2853
+vn 0.2470 -0.9220 -0.2982
+vn -0.9654 -0.2587 0.0337
+vn -0.9368 -0.1786 0.3008
+vn -0.8824 -0.4115 0.2282
+vn -0.7975 -0.5584 0.2282
+vn -0.9524 -0.2552 0.1670
+vn 0.4051 -0.8686 -0.2853
+vn 0.5497 -0.7851 -0.2853
+vn -0.7067 -0.7067 0.0337
+vn -0.6785 -0.6785 0.2814
+vn -0.5584 -0.7975 0.2282
+vn -0.4115 -0.8824 0.2282
+vn -0.2568 -0.9583 -0.1252
+vn 0.2568 -0.9583 -0.1252
+vn 0.6749 -0.6749 -0.2982
+vn 0.7851 -0.5497 -0.2853
+vn 0.8686 -0.4051 -0.2853
+vn 0.9220 -0.2470 -0.2982
+vn -0.2484 -0.9269 0.2814
+vn -0.0849 -0.9699 0.2282
+vn 0.0849 -0.9699 0.2282
+vn -0.2587 -0.9654 0.0337
+vn 0.2587 -0.9654 0.0337
+vn 0.9548 -0.0835 -0.2853
+vn 0.9548 0.0835 -0.2853
+vn 0.9220 0.2470 -0.2982
+vn 0.2484 -0.9269 0.2814
+vn 0.4115 -0.8824 0.2282
+vn 0.5584 -0.7975 0.2282
+vn 0.7015 -0.7015 -0.1252
+vn 0.9583 -0.2568 -0.1252
+vn 0.8686 0.4051 -0.2853
+vn 0.7851 0.5497 -0.2853
+vn 0.6749 0.6749 -0.2982
+vn 0.7067 -0.7067 0.0337
+vn 0.6785 -0.6785 0.2814
+vn 0.7975 -0.5584 0.2282
+vn 0.8824 -0.4115 0.2282
+vn 0.9269 -0.2484 0.2814
+vn 0.9654 -0.2587 0.0337
+vn 0.5497 0.7851 -0.2853
+vn 0.4051 0.8686 -0.2853
+vn 0.2470 0.9220 -0.2982
+vn 0.9699 -0.0849 0.2282
+vn 0.9699 0.0849 0.2282
+vn 0.9583 0.2568 -0.1252
+vn 0.0835 0.9548 -0.2853
+vn -0.0835 0.9548 -0.2853
+vn -0.2470 0.9220 -0.2982
+vn 0.9654 0.2587 0.0337
+vn 0.9269 0.2484 0.2814
+vn 0.8824 0.4115 0.2282
+vn 0.7975 0.5584 0.2282
+vn 0.7015 0.7015 -0.1252
+vn -0.4051 0.8686 -0.2853
+vn -0.5497 0.7851 -0.2853
+vn 0.6785 0.6785 0.2814
+vn 0.7067 0.7067 0.0337
+vn 0.5584 0.7975 0.2282
+vn 0.4115 0.8824 0.2282
+vn 0.2484 0.9269 0.2814
+vn 0.2568 0.9583 -0.1252
+vn -0.2568 0.9583 -0.1252
+vn -0.6749 0.6749 -0.2982
+vn -0.7851 0.5497 -0.2853
+vn -0.8686 0.4051 -0.2853
+vn 0.2587 0.9654 0.0337
+vn 0.0849 0.9699 0.2282
+vn -0.0849 0.9699 0.2282
+vn -0.2587 0.9654 0.0337
+vn -0.2484 0.9269 0.2814
+vn -0.4115 0.8824 0.2282
+vn -0.5584 0.7975 0.2282
+vn -0.6785 0.6785 0.2814
+vn -0.7015 0.7015 -0.1252
+vn -0.9583 0.2568 -0.1252
+vn -0.9654 0.2587 0.0337
+vn -0.9524 0.2552 0.1670
+vn -0.9368 0.1786 0.3008
+vn -0.7067 0.7067 0.0337
+vn -0.7975 0.5584 0.2282
+vn -0.8824 0.4115 0.2282
+vn -0.4469 -0.0391 -0.8937
+vn -0.4333 -0.1161 -0.8937
+vn -0.4066 -0.1896 -0.8937
+vn -0.4065 -0.1896 -0.8937
+vn -0.3675 -0.2573 -0.8937
+vn -0.3172 -0.3172 -0.8937
+vn -0.2573 -0.3675 -0.8937
+vn -0.1896 -0.4066 -0.8937
+vn -0.1161 -0.4333 -0.8937
+vn -0.0391 -0.4469 -0.8937
+vn 0.0391 -0.4469 -0.8937
+vn 0.1161 -0.4333 -0.8937
+vn 0.1896 -0.4065 -0.8937
+vn 0.1896 -0.4066 -0.8937
+vn 0.2573 -0.3675 -0.8937
+vn 0.3172 -0.3172 -0.8937
+vn 0.3675 -0.2573 -0.8937
+vn 0.4066 -0.1896 -0.8937
+vn 0.4065 -0.1896 -0.8937
+vn 0.4333 -0.1161 -0.8937
+vn 0.4469 -0.0391 -0.8937
+vn 0.4469 0.0391 -0.8937
+vn 0.4333 0.1161 -0.8937
+vn 0.4065 0.1896 -0.8937
+vn 0.3675 0.2573 -0.8937
+vn 0.3172 0.3172 -0.8937
+vn 0.2573 0.3675 -0.8937
+vn 0.1896 0.4065 -0.8937
+vn 0.1896 0.4066 -0.8937
+vn 0.1161 0.4333 -0.8937
+vn 0.0391 0.4469 -0.8937
+vn -0.0391 0.4469 -0.8937
+vn -0.1161 0.4333 -0.8937
+vn -0.1896 0.4065 -0.8937
+vn -0.1896 0.4066 -0.8937
+vn -0.2573 0.3675 -0.8937
+vn -0.3172 0.3172 -0.8937
+vn -0.3675 0.2573 -0.8937
+vn -0.4066 0.1896 -0.8937
+vn -0.4065 0.1896 -0.8937
+vn -0.4333 0.1161 -0.8937
+vn -0.4469 0.0391 -0.8937
+vn -0.8191 -0.5736 0.0000
+vn -0.5736 -0.8191 0.0000
+vn 0.5736 -0.8191 0.0000
+vn 0.8191 -0.5736 0.0000
+vn 0.8191 0.5736 0.0000
+vn 0.5736 0.8191 0.0000
+vn -0.5736 0.8191 0.0000
+vn -0.8191 0.5736 0.0000
+vn -0.0000 0.0000 1.0000
+s off
+f 463//1 459//1 458//1 460//1 28//1 575//1 576//1 580//1 26//1
+f 464//1 463//1 26//1
+f 467//2 462//2 461//2 464//2 26//2 578//2 579//2 586//2 30//2 466//2
+f 30//2 470//2 465//2 466//2
+f 473//3 469//3 468//3 470//3 30//3 588//3 589//3 596//3 32//3
+f 474//3 473//3 32//3
+f 34//4 478//4 475//4 472//4 471//4 474//4 32//4 591//4 592//4 599//4
+f 34//4 477//4 478//4
+f 36//5 484//5 480//5 479//5 476//5 477//5 34//5 601//5 602//5 607//5
+f 36//5 485//5 484//5
+f 37//6 487//6 486//6 483//6 482//6 36//6 609//6 610//6 612//6
+f 485//6 36//6 482//6 481//6
+f 40//7 492//7 491//7 489//7 488//7 490//7 37//7 614//7 615//7 622//7
+f 487//7 37//7 490//7
+f 42//8 497//8 496//8 495//8 494//8 493//8 40//8 617//8 618//8 625//8
+f 492//8 40//8 493//8
+f 44//9 504//9 500//9 499//9 498//9 42//9 627//9 628//9 635//9
+f 497//9 42//9 498//9
+f 507//10 503//10 502//10 44//10 631//10 632//10 637//10 46//10 506//10
+f 501//10 504//10 44//10 502//10
+f 511//11 510//11 508//11 509//11 46//11 639//11 640//11 647//11 48//11 514//11
+f 505//11 506//11 46//11 509//11
+f 50//12 516//12 515//12 512//12 513//12 48//12 642//12 643//12 650//12
+f 514//12 48//12 513//12
+f 516//13 50//13 519//13
+f 52//13 521//13 520//13 518//13 517//13 519//13 50//13 652//13 653//13 660//13
+f 523//14 522//14 521//14 52//14 655//14 656//14 663//14 54//14 524//14
+f 524//14 54//14 526//14 525//14
+f 526//15 54//15 527//15
+f 55//15 533//15 529//15 528//15 527//15 54//15 665//15 666//15 669//15
+f 533//16 55//16 531//16 530//16
+f 676//16 57//16 535//16 534//16 532//16 531//16 55//16 671//16 673//16
+f 543//17 538//17 537//17 539//17 57//17 679//17 680//17 684//17 59//17
+f 535//17 57//17 539//17 536//17
+f 690//18 61//18 545//18 544//18 542//18 541//18 59//18 682//18 683//18
+f 59//18 541//18 540//18 543//18
+f 692//19 64//19 552//19 549//19 547//19 546//19 548//19 61//19 695//19 693//19
+f 548//19 545//19 61//19
+f 703//20 65//20 555//20 554//20 553//20 550//20 551//20 64//20 699//20 701//20
+f 64//20 551//20 552//20
+f 707//21 67//21 560//21 558//21 556//21 557//21 65//21 705//21 706//21
+f 65//21 557//21 555//21
+f 715//22 69//22 565//22 563//22 562//22 561//22 67//22 712//22 713//22
+f 560//22 67//22 561//22 559//22
+f 569//23 568//23 567//23 566//23 69//23 717//23 718//23 719//23 71//23
+f 565//23 69//23 566//23 564//23
+f 728//24 28//24 460//24 573//24 571//24 572//24 71//24 725//24 726//24
+f 71//24 572//24 570//24 569//24
+f 74//25 26//25 581//25 584//25
+f 26//25 580//25 581//25
+f 574//25 575//25 28//25 278//25
+f 583//26 582//26 74//26
+f 280//26 30//26 585//26
+f 30//26 586//26 585//26
+f 577//26 578//26 26//26 74//26 582//26
+f 78//27 32//27 597//27 595//27
+f 32//27 596//27 597//27
+f 587//27 588//27 30//27 280//27
+f 283//28 34//28 598//28
+f 593//29 594//29 78//29
+f 598//28 34//28 599//28
+f 32//28 78//28 594//28 590//28 591//28
+f 605//30 80//30 608//30
+f 283//30 600//30 34//30
+f 80//30 36//30 607//30 608//30
+f 34//30 600//30 601//30
+f 286//31 37//31 611//31
+f 603//31 604//31 80//31
+f 611//31 37//31 612//31
+f 36//31 80//31 604//31 606//31 609//31
+f 83//32 40//32 623//32 621//32
+f 623//32 40//32 622//32
+f 613//32 614//32 37//32 286//32
+f 289//33 42//33 624//33
+f 619//33 620//33 83//33
+f 624//33 42//33 625//33
+f 40//33 83//33 620//33 616//33 617//33
+f 86//34 44//34 636//34 633//34
+f 636//34 44//34 635//34
+f 626//34 627//34 42//34 289//34
+f 629//35 630//35 44//35 86//35 634//35
+f 292//35 46//35 637//35
+f 630//35 631//35 44//35
+f 90//36 48//36 648//36 646//36
+f 648//36 48//36 647//36
+f 638//36 639//36 46//36 292//36
+f 295//37 50//37 649//37
+f 644//37 645//37 90//37
+f 649//37 50//37 650//37
+f 48//37 90//37 645//37 641//37 642//37
+f 92//38 52//38 661//38 659//38
+f 661//38 52//38 660//38
+f 651//38 652//38 50//38 295//38
+f 662//39 54//39 663//39
+f 52//39 92//39 658//39 654//39 655//39
+f 298//39 54//39 662//39
+f 657//39 658//39 92//39
+f 668//40 55//40 669//40
+f 664//40 665//40 54//40 298//40
+f 95//40 55//40 668//40 667//40 670//40
+f 674//41 672//41 95//41
+f 677//42 301//42 57//42
+f 671//42 55//42 95//42 672//42
+f 57//42 676//42 675//42 677//42
+f 301//43 678//43 57//43
+f 688//43 98//43 685//43
+f 678//43 679//43 57//43
+f 59//43 684//43 685//43 98//43
+f 687//44 686//44 98//44
+f 689//44 304//44 61//44
+f 61//44 690//44 689//44
+f 681//44 682//44 59//44 98//44 686//44
+f 304//45 694//45 61//45
+f 696//45 102//45 697//45
+f 694//45 695//45 61//45
+f 64//45 692//45 691//45 697//45 102//45
+f 698//46 700//46 102//46
+f 307//46 65//46 702//46
+f 65//46 703//46 702//46
+f 700//46 699//46 64//46 102//46
+f 105//47 67//47 711//47 710//47
+f 67//47 707//47 711//47
+f 704//47 705//47 65//47 307//47
+f 714//48 67//48 105//48 708//48 709//48
+f 714//48 712//48 67//48
+f 715//48 310//48 69//48
+f 724//49 107//49 71//49 720//49
+f 71//49 719//49 720//49
+f 716//49 717//49 69//49 310//49
+f 723//50 721//50 107//50
+f 727//50 278//50 28//50
+f 28//50 728//50 727//50
+f 722//50 725//50 71//50 107//50 721//50
+f 74//51 731//51 732//51
+f 731//52 74//52 584//52
+f 732//53 583//53 74//53
+f 78//54 734//54 733//54
+f 734//55 78//55 595//55
+f 733//56 593//56 78//56
+f 80//57 736//57 735//57
+f 736//58 80//58 605//58
+f 735//59 603//59 80//59
+f 83//60 738//60 737//60
+f 83//61 621//61 738//61
+f 83//62 737//62 619//62
+f 739//63 86//63 740//63
+f 86//64 633//64 740//64
+f 739//65 634//65 86//65
+f 90//66 742//66 741//66
+f 742//67 90//67 646//67
+f 741//68 644//68 90//68
+f 744//69 92//69 659//69
+f 92//70 744//70 743//70
+f 92//71 743//71 657//71
+f 746//72 95//72 745//72
+f 95//73 670//73 745//73
+f 95//74 746//74 674//74
+f 98//75 747//75 749//75
+f 747//76 98//76 688//76
+f 749//77 748//77 98//77
+f 748//78 687//78 98//78
+f 102//79 751//79 750//79
+f 751//79 102//79 696//79
+f 102//80 750//80 698//80
+f 752//81 105//81 753//81
+f 753//82 105//82 710//82
+f 105//83 752//83 708//83
+f 107//84 729//84 730//84
+f 729//84 107//84 724//84
+f 730//85 723//85 107//85
+s 1
+f 1//86 2//86 3//86
+f 4//86 2//86 1//86
+f 3//87 5//87 6//87
+f 2//87 5//87 3//87
+f 6//88 7//88 8//88
+f 5//88 7//88 6//88
+f 8//89 9//89 10//89
+f 7//89 9//89 8//89
+f 10//90 11//90 12//90
+f 9//90 11//90 10//90
+f 12//91 13//91 14//91
+f 11//91 13//91 12//91
+f 13//92 15//92 14//92
+f 14//92 15//92 16//92
+f 16//93 17//93 18//93
+f 15//93 17//93 16//93
+f 18//94 19//94 20//94
+f 17//94 19//94 18//94
+f 19//95 21//95 20//95
+f 20//95 21//95 22//95
+f 22//96 21//96 23//96
+f 21//96 24//96 23//96
+f 23//97 25//97 27//97
+f 24//97 25//97 23//97
+f 27//98 29//98 31//98
+f 25//98 29//98 27//98
+f 31//99 33//99 35//99
+f 29//99 33//99 31//99
+f 35//100 38//100 39//100
+f 33//100 38//100 35//100
+f 39//101 41//101 43//101
+f 38//101 41//101 39//101
+f 43//102 45//102 47//102
+f 47//103 45//103 49//103
+f 41//102 45//102 43//102
+f 45//103 51//103 49//103
+f 49//104 53//104 56//104
+f 51//104 53//104 49//104
+f 56//105 58//105 60//105
+f 53//105 58//105 56//105
+f 60//106 62//106 63//106
+f 58//106 62//106 60//106
+f 63//107 66//107 68//107
+f 62//107 66//107 63//107
+f 68//108 70//108 72//108
+f 66//108 70//108 68//108
+f 72//109 73//109 75//109
+f 70//109 73//109 72//109
+f 75//110 76//110 77//110
+f 73//110 76//110 75//110
+f 77//111 79//111 81//111
+f 81//112 79//112 82//112
+f 76//111 79//111 77//111
+f 79//112 84//112 82//112
+f 82//113 85//113 87//113
+f 84//113 85//113 82//113
+f 87//114 88//114 89//114
+f 89//115 88//115 91//115
+f 85//114 88//114 87//114
+f 88//115 93//115 91//115
+f 93//116 94//116 91//116
+f 91//116 94//116 96//116
+f 94//117 97//117 96//117
+f 96//117 97//117 99//117
+f 97//118 100//118 99//118
+f 99//118 100//118 101//118
+f 100//119 103//119 101//119
+f 101//119 103//119 104//119
+f 104//120 103//120 106//120
+f 103//120 108//120 106//120
+f 108//121 4//121 106//121
+f 106//121 4//121 1//121
+f 4//122 109//122 2//122
+f 112//123 110//123 111//123
+f 112//124 111//124 113//124
+f 108//125 109//125 4//125
+f 114//126 115//126 112//126
+f 115//127 110//127 112//127
+f 2//128 116//128 5//128
+f 5//129 116//129 7//129
+f 7//130 116//130 9//130
+f 109//128 116//128 2//128
+f 109//131 117//131 116//131
+f 118//131 117//131 109//131
+f 9//132 119//132 11//132
+f 11//133 119//133 13//133
+f 13//134 119//134 15//134
+f 116//132 119//132 9//132
+f 118//135 120//135 117//135
+f 121//135 120//135 118//135
+f 117//136 122//136 116//136
+f 116//136 122//136 119//136
+f 120//137 122//137 117//137
+f 15//138 123//138 17//138
+f 17//139 123//139 19//139
+f 19//140 123//140 21//140
+f 119//138 123//138 15//138
+f 124//141 125//141 121//141
+f 121//141 125//141 120//141
+f 120//137 126//137 122//137
+f 122//142 127//142 119//142
+f 119//142 127//142 123//142
+f 123//143 128//143 21//143
+f 21//143 128//143 24//143
+f 24//144 128//144 25//144
+f 25//145 128//145 29//145
+f 127//146 128//146 123//146
+f 125//147 129//147 120//147
+f 120//147 129//147 126//147
+f 126//148 130//148 122//148
+f 122//148 130//148 127//148
+f 127//146 131//146 128//146
+f 130//149 131//149 127//149
+f 112//124 113//124 132//124
+f 132//150 113//150 133//150
+f 132//151 133//151 134//151
+f 125//152 132//152 129//152
+f 112//153 132//153 124//153
+f 124//153 132//153 125//153
+f 29//154 135//154 33//154
+f 33//155 135//155 38//155
+f 38//156 135//156 41//156
+f 128//154 135//154 29//154
+f 129//157 136//157 126//157
+f 126//157 136//157 130//157
+f 136//158 137//158 130//158
+f 130//149 137//149 131//149
+f 128//159 138//159 135//159
+f 131//159 138//159 128//159
+f 140//160 134//160 139//160
+f 140//161 139//161 141//161
+f 140//162 141//162 142//162
+f 143//163 140//163 142//163
+f 132//152 140//152 129//152
+f 132//160 134//160 140//160
+f 129//164 140//164 136//164
+f 41//165 144//165 45//165
+f 45//166 144//166 51//166
+f 51//167 144//167 53//167
+f 135//165 144//165 41//165
+f 138//168 144//168 135//168
+f 136//158 145//158 137//158
+f 137//169 146//169 131//169
+f 131//169 146//169 138//169
+f 145//170 146//170 137//170
+f 138//168 147//168 144//168
+f 140//164 148//164 136//164
+f 148//171 143//171 149//171
+f 150//172 148//172 149//172
+f 151//173 148//173 150//173
+f 148//163 140//163 143//163
+f 53//174 152//174 58//174
+f 58//175 152//175 62//175
+f 62//176 152//176 66//176
+f 144//174 152//174 53//174
+f 145//170 153//170 146//170
+f 138//177 154//177 147//177
+f 146//177 154//177 138//177
+f 147//178 155//178 144//178
+f 144//178 155//178 152//178
+f 136//179 156//179 145//179
+f 156//173 148//173 151//173
+f 156//180 151//180 157//180
+f 158//181 156//181 157//181
+f 159//182 156//182 158//182
+f 148//179 156//179 136//179
+f 66//183 160//183 70//183
+f 70//184 160//184 73//184
+f 73//185 160//185 76//185
+f 155//186 160//186 152//186
+f 152//183 160//183 66//183
+f 153//187 161//187 146//187
+f 146//187 161//187 154//187
+f 147//188 162//188 155//188
+f 154//188 162//188 147//188
+f 155//186 163//186 160//186
+f 156//189 164//189 145//189
+f 145//189 164//189 153//189
+f 164//190 159//190 165//190
+f 164//191 165//191 166//191
+f 164//182 156//182 159//182
+f 76//192 167//192 79//192
+f 79//193 167//193 84//193
+f 84//194 167//194 85//194
+f 160//192 167//192 76//192
+f 154//195 168//195 162//195
+f 161//195 168//195 154//195
+f 155//196 169//196 163//196
+f 162//196 169//196 155//196
+f 163//197 170//197 160//197
+f 160//197 170//197 167//197
+f 153//198 171//198 161//198
+f 171//199 166//199 172//199
+f 171//200 172//200 173//200
+f 174//201 171//201 173//201
+f 171//199 164//199 166//199
+f 164//198 171//198 153//198
+f 85//202 175//202 88//202
+f 88//203 175//203 93//203
+f 93//204 175//204 94//204
+f 94//205 175//205 97//205
+f 167//202 175//202 85//202
+f 162//206 176//206 169//206
+f 168//206 176//206 162//206
+f 169//207 177//207 163//207
+f 176//208 177//208 169//208
+f 163//207 177//207 170//207
+f 170//209 178//209 167//209
+f 167//209 178//209 175//209
+f 171//210 179//210 161//210
+f 161//210 179//210 168//210
+f 168//211 179//211 176//211
+f 179//212 171//212 174//212
+f 179//212 174//212 180//212
+f 179//213 180//213 181//213
+f 182//214 179//214 181//214
+f 179//215 182//215 183//215
+f 108//216 184//216 109//216
+f 175//205 184//205 97//205
+f 97//217 184//217 100//217
+f 100//218 184//218 103//218
+f 103//216 184//216 108//216
+f 176//208 185//208 177//208
+f 177//219 186//219 170//219
+f 170//219 186//219 178//219
+f 186//220 187//220 178//220
+f 175//221 187//221 184//221
+f 184//222 187//222 109//222
+f 109//222 187//222 118//222
+f 118//223 187//223 121//223
+f 178//221 187//221 175//221
+f 179//211 188//211 176//211
+f 183//224 189//224 188//224
+f 188//225 189//225 190//225
+f 179//215 183//215 188//215
+f 177//226 191//226 186//226
+f 185//226 191//226 177//226
+f 187//223 192//223 121//223
+f 186//220 192//220 187//220
+f 191//227 192//227 186//227
+f 188//228 190//228 193//228
+f 190//228 194//228 193//228
+f 194//229 195//229 193//229
+f 193//230 195//230 196//230
+f 193//231 196//231 197//231
+f 176//232 193//232 185//232
+f 188//232 193//232 176//232
+f 191//227 198//227 192//227
+f 121//233 198//233 124//233
+f 192//233 198//233 121//233
+f 193//231 197//231 199//231
+f 185//234 199//234 191//234
+f 193//234 199//234 185//234
+f 199//235 197//235 200//235
+f 199//236 200//236 201//236
+f 199//237 202//237 191//237
+f 198//238 202//238 124//238
+f 199//239 201//239 202//239
+f 124//238 202//238 112//238
+f 202//126 114//126 112//126
+f 202//239 201//239 203//239
+f 203//240 204//240 202//240
+f 202//241 204//241 114//241
+f 191//237 202//237 198//237
+f 110//242 205//242 111//242
+f 206//242 205//242 110//242
+f 207//243 113//243 111//243
+f 207//243 111//243 205//243
+f 208//244 133//244 113//244
+f 208//244 113//244 207//244
+f 134//245 133//245 208//245
+f 209//245 134//245 208//245
+f 210//246 139//246 134//246
+f 210//246 134//246 209//246
+f 211//247 141//247 139//247
+f 211//247 139//247 210//247
+f 212//248 141//248 211//248
+f 212//248 142//248 141//248
+f 213//249 142//249 212//250
+f 213//249 143//249 142//249
+f 213//251 214//251 143//251
+f 143//251 214//251 149//251
+f 149//252 215//252 150//252
+f 214//252 215//252 149//252
+f 216//253 151//253 150//254
+f 215//254 216//253 150//254
+f 217//255 157//255 151//255
+f 216//255 217//255 151//255
+f 218//256 158//256 157//256
+f 217//256 218//256 157//256
+f 219//257 159//257 158//257
+f 218//257 219//257 158//257
+f 220//258 165//258 159//258
+f 219//258 220//258 159//258
+f 220//259 166//259 165//259
+f 221//259 166//259 220//259
+f 222//260 172//260 166//260
+f 221//260 222//260 166//260
+f 222//261 173//261 172//261
+f 222//261 223//261 173//261
+f 173//262 224//262 174//262
+f 223//262 224//262 173//262
+f 174//263 224//263 180//264
+f 224//263 225//264 180//264
+f 180//265 225//265 181//265
+f 225//265 226//265 181//265
+f 181//266 227//266 182//266
+f 181//266 226//266 227//266
+f 182//267 228//267 183//267
+f 182//267 227//267 228//267
+f 183//268 229//268 189//268
+f 183//268 228//268 229//268
+f 189//269 230//269 190//269
+f 189//269 229//269 230//269
+f 190//270 231//270 194//270
+f 190//270 230//271 231//270
+f 194//272 232//272 195//272
+f 231//272 232//272 194//272
+f 195//273 233//273 196//273
+f 232//273 233//273 195//273
+f 197//274 196//274 234//274
+f 196//274 233//274 234//274
+f 200//275 197//275 235//275
+f 197//275 234//275 235//275
+f 201//276 200//276 236//276
+f 200//276 235//276 236//276
+f 201//277 236//277 237//277
+f 203//277 201//277 237//277
+f 203//278 237//278 238//278
+f 204//278 203//278 238//278
+f 204//279 238//279 114//279
+f 114//279 238//279 239//279
+f 114//280 239//280 240//281
+f 115//281 114//280 240//281
+f 240//282 206//282 115//282
+f 115//282 206//282 110//282
+f 206//283 241//283 205//283
+f 206//283 242//283 241//283
+f 205//284 243//284 207//284
+f 205//284 241//284 243//284
+f 207//285 244//285 208//285
+f 207//285 243//285 244//285
+f 208//286 245//286 209//286
+f 208//286 244//286 245//286
+f 210//287 209//287 246//287
+f 246//287 209//287 245//287
+f 211//288 210//288 247//288
+f 247//288 210//288 246//288
+f 248//289 211//289 247//289
+f 212//289 211//289 248//289
+f 249//290 212//290 248//290
+f 213//290 212//290 249//290
+f 214//291 213//291 249//291
+f 214//291 249//291 250//291
+f 215//292 214//292 251//292
+f 251//292 214//292 250//292
+f 215//293 251//293 216//293
+f 216//293 251//293 252//293
+f 217//294 216//294 253//294
+f 216//294 252//294 253//294
+f 218//295 217//295 254//295
+f 217//295 253//295 254//295
+f 219//296 218//296 255//296
+f 218//296 254//296 255//296
+f 220//297 219//297 256//297
+f 256//297 219//297 255//297
+f 221//298 220//298 257//298
+f 257//298 220//298 256//298
+f 222//299 221//299 257//299
+f 222//299 257//299 258//299
+f 223//300 222//300 259//300
+f 259//300 222//300 258//300
+f 224//301 223//301 259//301
+f 224//301 259//301 260//301
+f 225//302 224//302 261//302
+f 224//302 260//302 261//302
+f 226//303 225//303 262//303
+f 225//303 261//303 262//303
+f 227//304 226//304 263//304
+f 226//304 262//304 263//304
+f 228//305 227//305 264//305
+f 227//305 263//305 264//305
+f 229//306 228//306 265//306
+f 228//306 264//306 265//306
+f 230//307 229//307 266//307
+f 229//307 265//307 266//307
+f 231//308 230//308 267//308
+f 230//308 266//308 267//308
+f 231//309 268//309 232//309
+f 231//309 267//309 268//309
+f 232//310 268//310 233//310
+f 268//310 269//310 233//310
+f 233//311 270//311 234//311
+f 233//311 269//311 270//311
+f 234//312 271//312 235//312
+f 234//312 270//312 271//312
+f 235//313 272//313 236//313
+f 235//313 271//313 272//313
+f 236//314 272//314 273//314
+f 236//314 273//314 237//314
+f 237//315 273//315 274//315
+f 238//315 237//315 274//315
+f 238//316 274//316 239//316
+f 239//316 274//316 275//316
+f 239//317 275//317 276//317
+f 240//317 239//317 276//317
+f 240//318 276//318 242//318
+f 240//318 242//318 206//318
+f 458//319 459//319 241//319 242//319
+f 458//319 242//319 460//319
+f 461//319 462//319 243//319 241//319
+f 461//319 241//319 459//319 463//319 464//319
+f 465//319 244//319 243//319 467//319 466//319
+f 462//319 467//319 243//319
+f 468//319 469//319 245//319 244//319
+f 470//319 468//319 244//319 465//319
+f 471//319 472//319 246//319 245//319
+f 471//319 245//319 469//319 473//319 474//319
+f 247//319 246//319 472//319 475//319
+f 476//319 247//319 475//319 478//319 477//319
+f 476//319 479//319 247//319
+f 479//319 480//319 248//319 247//319
+f 249//319 248//319 481//319 482//319 483//319
+f 481//319 248//319 480//319 484//319 485//319
+f 250//319 249//319 483//319 486//319
+f 486//319 487//319 250//319
+f 251//319 250//319 488//319 489//319
+f 488//319 250//319 487//319 490//319
+f 252//319 251//319 489//319 491//319
+f 252//319 491//319 492//319 493//319 494//319
+f 253//319 252//319 495//319 496//319
+f 494//319 495//319 252//319
+f 254//319 253//319 496//319 497//319 498//319 499//319
+f 254//319 499//319 500//319
+f 255//319 254//319 501//319 502//319 503//319
+f 501//319 254//319 500//319 504//319
+f 256//319 255//319 507//319 506//319 505//319
+f 503//319 507//319 255//319
+f 256//319 505//319 509//319 508//319 257//319
+f 257//319 508//319 510//319
+f 257//319 510//319 511//319 258//319
+f 258//319 511//319 514//319 513//319 512//319
+f 516//319 259//319 258//319 515//319
+f 258//319 512//319 515//319
+f 518//319 260//319 259//319 517//319
+f 519//319 517//319 259//319 516//319
+f 261//319 260//319 518//319 520//319
+f 522//319 261//319 520//319 521//319
+f 525//319 262//319 261//319 523//319 524//319
+f 522//319 523//319 261//319
+f 263//319 262//319 525//319 526//319 527//319 528//319
+f 263//319 528//319 529//319
+f 264//319 263//319 530//319 531//319 532//319
+f 530//319 263//319 529//319 533//319
+f 536//319 265//319 264//319 534//319 535//319
+f 532//319 534//319 264//319
+f 266//319 265//319 537//319 538//319
+f 537//319 265//319 536//319 539//319
+f 267//319 266//319 540//319 541//319 542//319
+f 540//319 266//319 538//319 543//319
+f 268//319 267//319 544//319 545//319
+f 542//319 544//319 267//319
+f 269//319 268//319 546//319 547//319
+f 546//319 268//319 545//319 548//319
+f 549//319 270//319 269//319 547//319
+f 270//319 549//319 552//319 551//319 550//319
+f 271//319 270//319 553//319 554//319
+f 270//319 550//319 553//319
+f 272//319 271//319 554//319 555//319 557//319 556//319
+f 272//319 556//319 558//319
+f 559//319 272//319 558//319 560//319
+f 273//319 272//319 559//319 561//319 562//319
+f 273//319 562//319 563//319
+f 564//319 274//319 273//319 563//319 565//319
+f 274//319 564//319 566//319 567//319
+f 275//319 274//319 567//319 568//319
+f 275//319 568//319 569//319 570//319
+f 571//319 276//319 275//319 570//319 572//319
+f 573//319 242//319 276//319 571//319
+f 460//319 242//319 573//319
+f 574//104 277//104 576//104 575//104
+f 574//104 278//104 277//104
+f 577//105 279//105 579//105 578//105
+f 580//105 576//105 277//105 584//105 581//105
+f 582//105 583//105 279//105 577//105
+f 279//106 280//106 585//106 586//106 579//106
+f 587//107 281//107 589//107 588//107
+f 587//107 280//107 281//107
+f 591//108 590//108 282//108 592//108
+f 594//108 593//108 282//108 590//108
+f 589//108 281//108 595//108 597//108 596//108
+f 592//109 282//109 283//109 598//109 599//109
+f 600//110 283//110 284//110 602//110 601//110
+f 604//111 603//111 285//111 606//111
+f 602//111 284//111 605//111 608//111 607//111
+f 609//111 606//111 285//111 610//111
+f 610//112 285//112 286//112 611//112 612//112
+f 614//113 613//113 287//113 615//113
+f 287//113 613//113 286//113
+f 617//114 616//114 288//114 618//114
+f 620//114 619//114 288//114 616//114
+f 615//114 287//114 621//114 623//114 622//114
+f 618//115 288//115 289//115 624//115 625//115
+f 627//116 626//116 290//116 628//116
+f 290//116 626//116 289//116
+f 630//117 629//117 291//117 632//117 631//117
+f 291//117 629//117 634//117
+f 628//117 290//117 633//117 636//117 635//117
+f 632//118 291//118 292//118 637//118
+f 639//119 638//119 293//119 640//119
+f 293//119 638//119 292//119
+f 642//120 641//120 294//120 643//120
+f 645//120 644//120 294//120 641//120
+f 640//120 293//120 646//120 648//120 647//120
+f 643//121 294//121 295//121 649//121 650//121
+f 652//86 651//86 296//86 653//86
+f 296//86 651//86 295//86
+f 655//87 654//87 297//87 656//87
+f 658//87 657//87 297//87 654//87
+f 653//87 296//87 659//87 661//87 660//87
+f 656//88 297//88 298//88 662//88 663//88
+f 665//89 664//89 299//89 666//89
+f 299//90 667//90 668//90 669//90 666//90
+f 299//89 664//89 298//89
+f 299//90 670//90 667//90
+f 672//90 674//90 300//90 673//90 671//90
+f 300//91 675//91 676//91 673//91
+f 300//91 301//91 677//91 675//91
+f 301//92 302//92 680//92 679//92 678//92
+f 681//93 303//93 683//93 682//93
+f 684//93 680//93 302//93 688//93 685//93
+f 686//93 687//93 303//93 681//93
+f 303//94 304//94 689//94 690//94 683//94
+f 305//96 691//96 692//96 693//96
+f 304//95 305//95 693//95 695//95 694//95
+f 305//96 696//96 697//96 691//96
+f 700//96 698//96 306//96 701//96 699//96
+f 306//97 307//97 702//97 703//97 701//97
+f 704//98 307//98 308//98
+f 704//98 308//98 706//98 705//98
+f 707//99 706//99 308//99 710//99 711//99
+f 708//99 309//99 709//99
+f 709//99 309//99 713//99 712//99 714//99
+f 715//100 713//100 309//100 310//100
+f 716//101 310//101 311//101
+f 716//101 311//101 718//101 717//101
+f 719//102 718//102 311//102 724//102 720//102
+f 721//102 723//102 312//102 722//102
+f 722//102 312//102 726//102 725//102
+f 312//103 278//103 727//103 728//103 726//103
+f 313//320 277//320 278//320
+f 314//321 315//321 316//321
+f 315//322 317//322 316//322
+f 311//323 313//323 312//323 723//323 730//323 729//323 724//323
+f 312//324 313//324 278//324
+f 318//325 319//325 316//325
+f 319//326 314//326 316//326
+f 731//327 584//327 277//327 320//327 279//327 583//327 732//327
+f 320//328 280//328 279//328
+f 320//329 281//329 280//329
+f 595//330 281//330 320//330 282//330 593//330 733//330 734//330
+f 313//327 320//327 277//327
+f 321//331 283//331 282//331
+f 321//332 284//332 283//332
+f 320//330 321//330 282//330
+f 320//333 322//333 321//333
+f 313//334 322//334 320//334
+f 323//334 322//334 313//334
+f 605//335 284//335 324//335 285//335 603//335 735//335 736//335
+f 324//336 286//336 285//336
+f 287//337 286//337 324//337
+f 738//338 621//338 287//338 324//338 288//338 619//338 737//338
+f 321//335 324//335 284//335
+f 323//339 325//339 322//339
+f 317//340 325//340 316//340
+f 326//341 325//341 317//341
+f 327//342 325//342 326//342
+f 328//339 325//339 323//339
+f 316//343 325//343 328//343
+f 322//333 329//333 321//333
+f 289//344 288//344 330//344
+f 330//338 288//338 324//338
+f 290//345 289//345 330//345
+f 325//346 331//346 322//346
+f 332//347 331//347 327//347
+f 333//348 331//348 332//348
+f 334//349 331//349 333//349
+f 322//346 331//346 329//346
+f 327//347 331//347 325//347
+f 321//350 335//350 324//350
+f 324//351 335//351 330//351
+f 329//350 335//350 321//350
+f 740//352 633//352 290//352 336//352 291//352 634//352 739//352
+f 336//353 292//353 291//353
+f 336//354 293//354 292//354
+f 742//355 646//355 293//355 336//355 294//355 644//355 741//355
+f 336//352 290//352 330//352
+f 334//356 337//356 331//356
+f 338//356 337//356 334//356
+f 339//357 337//357 338//357
+f 340//358 337//358 339//358
+f 331//359 337//359 329//359
+f 329//359 337//359 335//359
+f 337//360 341//360 335//360
+f 335//351 341//351 330//351
+f 342//361 295//361 294//361
+f 296//362 295//362 342//362
+f 744//363 659//363 296//363 342//363 297//363 657//363 743//363
+f 342//355 294//355 336//355
+f 343//364 344//364 340//364
+f 345//365 344//365 343//365
+f 346//366 344//366 345//366
+f 340//364 344//364 337//364
+f 337//360 344//360 341//360
+f 341//367 347//367 330//367
+f 336//368 347//368 342//368
+f 330//367 347//367 336//367
+f 298//369 297//369 348//369
+f 299//370 298//370 348//370
+f 299//371 348//371 300//371 674//371 746//371 745//371 670//371
+f 348//363 297//363 342//363
+f 341//372 349//372 347//372
+f 344//372 349//372 341//372
+f 346//373 349//373 344//373
+f 350//373 349//373 346//373
+f 351//374 349//374 350//374
+f 352//375 349//375 351//375
+f 353//376 349//376 352//376
+f 349//377 354//377 347//377
+f 347//368 354//368 342//368
+f 300//378 355//378 301//378
+f 301//379 355//379 302//379
+f 688//380 302//380 355//380 303//380 687//380 748//380 749//380 747//380
+f 348//371 355//371 300//371
+f 349//377 356//377 354//377
+f 353//376 356//376 349//376
+f 357//381 356//381 353//381
+f 358//382 356//382 357//382
+f 354//383 359//383 342//383
+f 342//383 359//383 348//383
+f 303//384 360//384 304//384
+f 360//385 305//385 304//385
+f 305//386 360//386 306//386 698//386 750//386 751//386 696//386
+f 355//380 360//380 303//380
+f 356//387 361//387 354//387
+f 362//388 361//388 358//388
+f 363//389 361//389 362//389
+f 364//390 361//390 363//390
+f 358//388 361//388 356//388
+f 354//387 361//387 359//387
+f 348//391 365//391 355//391
+f 359//391 365//391 348//391
+f 366//392 307//392 306//392
+f 366//393 308//393 307//393
+f 366//386 306//386 360//386
+f 364//394 367//394 361//394
+f 359//395 367//395 365//395
+f 368//394 367//394 364//394
+f 369//396 367//396 368//396
+f 370//397 367//397 369//397
+f 371//398 367//398 370//398
+f 361//395 367//395 359//395
+f 365//399 372//399 355//399
+f 360//400 372//400 366//400
+f 355//399 372//399 360//399
+f 373//323 313//323 311//323
+f 710//401 308//401 373//401 309//401 708//401 752//401 753//401
+f 309//402 373//402 310//402
+f 310//403 373//403 311//403
+f 373//401 308//401 366//401
+f 365//404 374//404 372//404
+f 367//404 374//404 365//404
+f 375//405 374//405 371//405
+f 376//406 374//406 375//406
+f 371//398 374//398 367//398
+f 372//400 377//400 366//400
+f 372//407 378//407 377//407
+f 379//408 378//408 376//408
+f 380//409 378//409 379//409
+f 374//407 378//407 372//407
+f 381//410 378//410 380//410
+f 382//411 378//411 381//411
+f 376//408 378//408 374//408
+f 377//412 383//412 366//412
+f 366//412 383//412 373//412
+f 313//413 383//413 323//413
+f 323//414 383//414 328//414
+f 373//413 383//413 313//413
+f 328//415 384//415 316//415
+f 316//416 384//416 318//416
+f 377//417 384//417 383//417
+f 378//417 384//417 377//417
+f 382//411 384//411 378//411
+f 385//418 384//418 382//418
+f 318//419 384//419 385//419
+f 383//414 384//414 328//414
+f 314//420 386//420 315//420
+f 387//420 386//420 314//420
+f 315//421 388//421 317//421
+f 386//421 388//421 315//421
+f 388//422 326//423 317//422
+f 388//422 389//423 326//423
+f 326//424 390//424 327//424
+f 389//424 390//424 326//424
+f 327//425 391//425 332//425
+f 390//425 391//425 327//425
+f 391//426 333//426 332//426
+f 391//426 392//426 333//426
+f 392//427 393//427 333//427
+f 333//427 393//427 334//427
+f 334//428 394//428 338//428
+f 393//428 394//428 334//428
+f 394//429 339//429 338//429
+f 394//429 395//429 339//429
+f 339//430 396//430 340//430
+f 395//430 396//430 339//430
+f 396//431 343//431 340//431
+f 396//431 397//431 343//431
+f 343//432 398//433 345//433
+f 397//432 398//433 343//432
+f 398//434 346//434 345//434
+f 398//434 399//434 346//434
+f 399//435 350//435 346//435
+f 399//435 400//435 350//435
+f 350//436 401//436 351//436
+f 400//436 401//436 350//436
+f 401//437 352//438 351//437
+f 401//437 402//438 352//438
+f 352//439 403//439 353//439
+f 402//439 403//439 352//439
+f 353//440 404//440 357//440
+f 403//440 404//440 353//440
+f 404//441 358//441 357//441
+f 404//441 405//441 358//441
+f 405//442 362//442 358//442
+f 405//442 406//442 362//442
+f 362//443 407//443 363//443
+f 406//443 407//443 362//443
+f 407//444 364//444 363//444
+f 407//444 408//444 364//444
+f 364//445 409//445 368//445
+f 408//445 409//445 364//445
+f 368//446 410//446 369//446
+f 409//446 410//446 368//446
+f 369//447 411//448 370//448
+f 410//447 411//448 369//447
+f 370//449 412//449 371//449
+f 411//449 412//449 370//449
+f 371//450 413//450 375//450
+f 412//450 413//450 371//450
+f 375//451 414//451 376//451
+f 413//451 414//451 375//451
+f 376//452 415//452 379//452
+f 414//452 415//452 376//452
+f 379//453 416//454 380//454
+f 415//453 416//454 379//453
+f 380//455 417//455 381//455
+f 416//455 417//455 380//455
+f 417//456 418//456 381//456
+f 381//456 418//456 382//456
+f 418//457 419//457 382//457
+f 382//457 419//457 385//457
+f 419//458 420//459 385//458
+f 385//458 420//459 318//459
+f 420//460 421//460 318//460
+f 318//460 421//460 319//460
+f 421//461 314//461 319//461
+f 421//461 387//461 314//461
+f 387//104 422//104 386//104
+f 423//104 422//104 387//104
+f 386//105 424//105 388//105
+f 422//105 424//105 386//105
+f 388//106 425//106 389//106
+f 424//106 425//106 388//106
+f 389//462 426//107 390//107
+f 425//462 426//107 389//462
+f 390//108 427//108 391//108
+f 426//108 427//108 390//108
+f 391//463 428//109 392//109
+f 427//463 428//109 391//463
+f 428//110 429//110 392//110
+f 392//110 429//110 393//110
+f 393//111 430//111 394//111
+f 429//111 430//111 393//111
+f 394//112 431//112 395//112
+f 430//112 431//112 394//112
+f 431//113 432//113 395//113
+f 395//113 432//113 396//113
+f 396//114 432//114 397//114
+f 432//114 433//114 397//114
+f 397//115 434//115 398//115
+f 433//115 434//115 397//115
+f 398//464 435//116 399//116
+f 434//464 435//116 398//464
+f 399//117 436//117 400//117
+f 435//117 436//117 399//117
+f 400//465 437//118 401//118
+f 436//465 437//118 400//465
+f 401//119 438//119 402//119
+f 437//119 438//119 401//119
+f 402//120 439//120 403//120
+f 403//121 439//121 404//121
+f 438//120 439//120 402//120
+f 439//121 440//121 404//121
+f 404//86 441//86 405//86
+f 440//86 441//86 404//86
+f 405//87 442//87 406//87
+f 441//87 442//87 405//87
+f 406//88 443//88 407//88
+f 442//88 443//88 406//88
+f 407//466 444//89 408//89
+f 443//466 444//89 407//466
+f 408//90 445//90 409//90
+f 444//90 445//90 408//90
+f 409//467 446//91 410//91
+f 445//467 446//91 409//467
+f 410//92 447//92 411//92
+f 446//92 447//92 410//92
+f 411//93 448//93 412//93
+f 412//94 448//94 413//94
+f 447//93 448//93 411//93
+f 448//94 449//94 413//94
+f 413//95 450//95 414//95
+f 449//95 450//95 413//95
+f 414//96 451//96 415//96
+f 415//97 451//97 416//97
+f 450//96 451//96 414//96
+f 451//97 452//97 416//97
+f 452//468 453//98 416//468
+f 416//468 453//98 417//98
+f 453//99 454//99 417//99
+f 417//99 454//99 418//99
+f 454//469 455//100 418//469
+f 418//469 455//100 419//100
+f 455//101 456//101 419//101
+f 419//101 456//101 420//101
+f 420//102 456//102 421//102
+f 456//102 457//102 421//102
+f 457//103 423//103 421//103
+f 421//103 423//103 387//103
+f 423//470 3//470 422//470
+f 1//470 3//470 423//470
+f 422//470 6//470 424//470
+f 3//470 6//470 422//470
+f 424//470 8//470 425//470
+f 6//470 8//470 424//470
+f 425//470 10//470 426//470
+f 8//470 10//470 425//470
+f 426//470 12//470 427//470
+f 10//470 12//470 426//470
+f 427//470 14//470 428//470
+f 12//470 14//470 427//470
+f 14//470 16//470 428//470
+f 428//470 16//470 429//470
+f 16//470 18//470 429//470
+f 429//470 18//470 430//470
+f 18//470 20//470 430//470
+f 430//470 20//470 431//470
+f 431//470 22//470 432//470
+f 20//470 22//470 431//470
+f 432//470 23//470 433//470
+f 22//470 23//470 432//470
+f 23//470 434//470 433//470
+f 23//470 27//470 434//470
+f 434//470 31//470 435//470
+f 27//470 31//470 434//470
+f 435//470 35//470 436//470
+f 31//470 35//470 435//470
+f 35//470 437//470 436//470
+f 35//470 39//470 437//470
+f 437//470 43//470 438//470
+f 39//470 43//470 437//470
+f 43//470 439//470 438//470
+f 43//470 47//470 439//470
+f 439//470 49//470 440//470
+f 47//470 49//470 439//470
+f 440//470 56//470 441//470
+f 49//470 56//470 440//470
+f 441//470 60//470 442//470
+f 56//470 60//470 441//470
+f 442//470 63//470 443//470
+f 60//470 63//470 442//470
+f 443//470 68//470 444//470
+f 63//470 68//470 443//470
+f 68//470 445//470 444//470
+f 68//470 72//470 445//470
+f 445//470 75//470 446//470
+f 72//470 75//470 445//470
+f 446//470 77//470 447//470
+f 75//470 77//470 446//470
+f 447//470 81//470 448//470
+f 77//470 81//470 447//470
+f 448//470 82//470 449//470
+f 81//470 82//470 448//470
+f 82//470 450//470 449//470
+f 82//470 87//470 450//470
+f 450//470 89//470 451//470
+f 87//470 89//470 450//470
+f 451//470 91//470 452//470
+f 89//470 91//470 451//470
+f 91//470 453//470 452//470
+f 91//470 96//470 453//470
+f 96//470 99//470 453//470
+f 453//470 99//470 454//470
+f 99//470 455//470 454//470
+f 99//470 101//470 455//470
+f 101//470 104//470 455//470
+f 455//470 104//470 456//470
+f 104//470 106//470 456//470
+f 456//470 106//470 457//470
+f 106//470 1//470 457//470
+f 457//470 1//470 423//470
+o Cooling_systems
+v -24.174349 -24.174349 -0.000001
+v -29.607409 -17.093845 -0.000001
+v -17.093845 -29.607409 -0.000001
+v -8.848426 -33.022774 -0.000001
+v 8.848426 -33.022774 -0.000001
+v 0.000000 -34.187691 -0.000001
+v -33.022774 -8.848426 -0.000000
+v -33.022774 8.848426 0.000000
+v -34.187691 0.000000 0.000000
+v -29.607409 17.093845 0.000001
+v -24.174349 24.174349 0.000001
+v 17.093845 -29.607409 -0.000001
+v 29.607409 -17.093845 -0.000001
+v 24.174349 -24.174349 -0.000001
+v -17.093845 29.607409 0.000001
+v -8.848426 33.022774 0.000001
+v 0.000000 34.187691 0.000001
+v 34.187691 0.000000 0.000000
+v 33.022774 -8.848426 -0.000000
+v 33.022774 8.848426 0.000000
+v 8.848426 33.022774 0.000001
+v 17.093845 29.607409 0.000001
+v 24.174349 24.174349 0.000001
+v 29.607409 17.093845 0.000001
+v 30.730791 8.234291 7.138781
+v 31.814856 -0.000000 7.138780
+v 27.552473 15.907428 7.138781
+v 22.496500 22.496500 7.138781
+v 15.907428 27.552473 7.138782
+v 8.234291 30.730791 7.138782
+v 0.000000 31.814856 7.138782
+v -8.234291 30.730791 7.138782
+v -15.907428 27.552473 7.138782
+v -22.496500 22.496500 7.138781
+v -27.552473 15.907428 7.138781
+v -30.730791 8.234291 7.138781
+v -31.814856 -0.000000 7.138780
+v -30.730791 -8.234291 7.138780
+v -27.552473 -15.907428 7.138780
+v -22.496500 -22.496500 7.138779
+v -15.907428 -27.552473 7.138779
+v -8.234291 -30.730791 7.138779
+v 0.000000 -31.814856 7.138779
+v 8.234291 -30.730791 7.138779
+v 15.907428 -27.552473 7.138779
+v 22.496500 -22.496500 7.138779
+v 27.552473 -15.907428 7.138780
+v 30.730791 -8.234291 7.138780
+v 31.580900 -0.000000 8.146670
+v 30.504807 8.173738 8.146670
+v 27.349861 15.790450 8.146671
+v 22.331068 22.331068 8.146671
+v 15.790450 27.349861 8.146671
+v 8.173738 30.504807 8.146671
+v 0.000000 31.580900 8.146671
+v -8.173738 30.504807 8.146671
+v -15.790450 27.349861 8.146671
+v -22.331068 22.331068 8.146671
+v -27.349861 15.790450 8.146671
+v -30.504807 8.173738 8.146670
+v -31.580900 -0.000000 8.146670
+v -30.504807 -8.173738 8.146670
+v -27.349861 -15.790450 8.146669
+v -22.331068 -22.331068 8.146669
+v -15.790450 -27.349861 8.146669
+v -8.173738 -30.504807 8.146669
+v 0.000000 -31.580900 8.146669
+v 8.173738 -30.504807 8.146669
+v 15.790450 -27.349861 8.146669
+v 22.331068 -22.331068 8.146669
+v 27.349861 -15.790450 8.146669
+v 30.504807 -8.173738 8.146670
+v 29.653929 4.908844 12.500000
+v 30.057484 -0.000001 12.500000
+v 28.454115 9.685845 12.500000
+v 25.048429 16.614103 12.500001
+v 19.990923 22.445829 12.500001
+v 13.615341 26.796917 12.500001
+v 6.341868 29.380827 12.500001
+v -1.349834 30.027159 12.500001
+v -8.952518 28.693287 12.500001
+v -15.964809 25.467178 12.500001
+v -21.924269 20.561583 12.500001
+v -26.437887 14.300013 12.500001
+v -29.208006 7.095398 12.500000
+v -30.051941 -0.577136 12.500000
+v -28.914042 -8.211611 12.500000
+v -25.869345 -15.304553 12.499999
+v -21.118641 -21.388205 12.499999
+v -14.975224 -26.061369 12.499999
+v -7.781271 -29.032810 12.499999
+v -0.000394 -30.057484 12.499999
+v 7.780805 -29.032936 12.499999
+v 15.030061 -26.029781 12.499999
+v 21.254658 -21.253042 12.499999
+v 26.030924 -15.028083 12.499999
+v 29.033398 -7.779081 12.500000
+v 31.176914 13.304724 0.000001
+v 32.083069 11.117073 0.000000
+v 25.669205 22.226215 0.000001
+v 27.110687 20.347637 0.000001
+v 14.825201 30.547112 0.000001
+v 4.066229 33.652363 0.000001
+v 1.132411 34.038605 0.000001
+v -1.546903 33.984035 0.000001
+v -2.087078 33.912922 0.000001
+v -11.505137 31.922327 0.000001
+v -14.825201 30.547112 0.000001
+v -25.669205 22.226215 0.000001
+v -33.812351 2.851002 0.000000
+v -33.912922 2.087078 0.000000
+v -33.226429 -7.301522 -0.000000
+v -32.716309 -9.588298 -0.000000
+v -22.936518 -25.124168 -0.000001
+v -15.148998 -30.412991 -0.000001
+v -5.997423 -33.398117 -0.000001
+v -2.434556 -33.867176 -0.000001
+v 11.117073 -32.083069 -0.000001
+v 27.856853 -19.375214 -0.000001
+v 28.325912 -18.763924 -0.000001
+v 28.657589 -18.331676 -0.000001
+v 29.119894 -17.729189 -0.000001
+v 31.176914 -13.304724 -0.000001
+v 30.044502 -16.038607 -0.000001
+v 33.867176 -2.434556 -0.000000
+v -21.735237 -24.966017 -0.000001
+v -12.294713 30.893332 0.000001
+v 1.237830 33.856014 0.000001
+v 1.375215 33.618057 0.000001
+v -2.475661 33.524338 0.000001
+v -1.750556 33.718632 0.000001
+v -15.489672 30.037245 0.000001
+v -16.202736 29.490091 0.000001
+v -7.637538 28.362463 0.000001
+v -13.631232 29.151546 0.000001
+v -14.200917 28.409119 0.000001
+v -15.757326 26.380766 0.000001
+v -9.526917 26.473083 0.000001
+v -16.415842 29.326571 0.000001
+v -16.842052 28.999527 0.000001
+v -25.004732 22.736082 0.000001
+v -18.588697 27.659279 0.000001
+v -13.959520 22.040480 0.000001
+v -32.464458 4.607606 0.000000
+v -31.686255 5.621783 0.000000
+v -17.093845 28.806320 0.000001
+v -17.093845 24.638981 0.000001
+v -17.093845 18.906155 0.000001
+v -31.303139 4.696861 0.000000
+v -33.022774 2.977226 0.000000
+v -32.339737 3.660261 0.000000
+v -33.022774 3.879997 0.000000
+v -30.558126 -9.872428 -0.000000
+v -33.022774 -7.036116 -0.000000
+v 24.349371 -6.174348 -0.000000
+v 18.486427 -16.329266 -0.000001
+v 26.539352 -9.967508 -0.000000
+v 28.989264 -17.711990 -0.000001
+v 29.939085 -15.856015 -0.000001
+v 27.486151 -11.607409 -0.000001
+v 24.316818 -17.096851 -0.000001
+v 15.489672 30.037245 0.000001
+v 21.905699 25.114054 0.000001
+v 22.914127 24.340260 0.000001
+v 25.004732 22.736082 0.000001
+v 5.857476 32.618183 0.000001
+v 11.109140 29.586134 0.000001
+v 19.392149 24.803938 0.000001
+v 26.020208 20.977224 0.000001
+v 31.176914 12.045548 0.000001
+v 32.192390 10.286692 0.000000
+v 32.344769 9.129265 0.000000
+v 31.176914 9.613006 0.000000
+v 32.500774 7.944295 0.000000
+v 33.640537 -0.713065 -0.000000
+v 33.665691 -0.904130 -0.000000
+v 33.757854 -1.604174 -0.000000
+v 31.176914 -11.236371 -0.000000
+v 31.176914 -5.214818 -0.000000
+v 31.176914 -3.923720 -0.000000
+v 31.176914 5.651303 0.000000
+v 5.400555 26.645966 0.000001
+v -6.023536 28.149975 0.000001
+v 10.223639 18.292135 0.000001
+v -7.844875 25.776360 0.000001
+v 21.366825 -16.708477 -0.000001
+v 9.395580 -32.309708 -0.000001
+v 9.248971 -32.329010 -0.000001
+v 8.596633 -32.414890 -0.000001
+v 6.413867 -32.702259 -0.000001
+v 3.979310 -33.022774 -0.000001
+v -5.091268 -33.022774 -0.000001
+v -1.729279 -31.630192 -0.000001
+v 26.950697 -19.750557 -0.000001
+v 28.325912 -18.375341 -0.000001
+v 21.475275 -22.018551 -0.000001
+v 15.343289 -24.558502 -0.000001
+v 13.229855 -25.433916 -0.000001
+v 6.807005 -28.094347 -0.000001
+v -12.820866 19.291523 0.000001
+v 0.979031 -14.024373 -0.000001
+v -17.093845 -24.354967 -0.000001
+v 4.102232 -21.564449 -0.000001
+v -19.156971 -24.626583 -0.000001
+v -13.773784 -30.044502 -0.000001
+v 5.478059 -24.885988 -0.000001
+v 16.398529 -19.945612 -0.000001
+v 15.022774 -22.328489 -0.000001
+v 19.162058 -19.581785 -0.000001
+v 17.580273 -21.643209 -0.000001
+v 23.188164 -19.051739 -0.000001
+v 22.444473 -20.339851 -0.000001
+v 27.795099 -18.906155 -0.000001
+v -17.093845 -11.645034 -0.000001
+v -17.093845 13.722868 0.000001
+v -24.963240 -10.609009 -0.000000
+v -28.749794 -1.467460 -0.000000
+v -31.237789 -4.709878 -0.000000
+vn 0.0000 0.0000 -1.0000
+vn 0.9416 0.1240 0.3130
+vn 0.8775 0.3635 0.3130
+vn 0.7535 0.5782 0.3130
+vn 0.5782 0.7535 0.3130
+vn 0.3635 0.8775 0.3130
+vn 0.1240 0.9416 0.3130
+vn -0.1240 0.9416 0.3130
+vn -0.3635 0.8775 0.3130
+vn -0.5782 0.7535 0.3130
+vn -0.7535 0.5782 0.3130
+vn -0.8775 0.3635 0.3130
+vn -0.9416 0.1240 0.3130
+vn -0.9416 -0.1240 0.3130
+vn -0.8775 -0.3635 0.3130
+vn -0.7535 -0.5782 0.3130
+vn -0.5782 -0.7535 0.3130
+vn -0.3635 -0.8775 0.3130
+vn -0.1240 -0.9416 0.3130
+vn 0.1240 -0.9416 0.3130
+vn 0.3635 -0.8775 0.3130
+vn 0.5782 -0.7535 0.3130
+vn 0.7535 -0.5782 0.3130
+vn 0.8775 -0.3635 0.3130
+vn 0.9416 -0.1240 0.3130
+vn 0.9662 0.1272 0.2243
+vn 0.9003 0.3729 0.2243
+vn 0.7731 0.5933 0.2243
+vn 0.5933 0.7731 0.2243
+vn 0.3729 0.9003 0.2243
+vn 0.1272 0.9662 0.2243
+vn -0.1272 0.9662 0.2243
+vn -0.3729 0.9003 0.2243
+vn -0.5933 0.7731 0.2243
+vn -0.7731 0.5933 0.2243
+vn -0.9003 0.3729 0.2243
+vn -0.9662 0.1272 0.2243
+vn -0.9662 -0.1272 0.2243
+vn -0.9003 -0.3729 0.2243
+vn -0.7731 -0.5933 0.2243
+vn -0.5933 -0.7731 0.2243
+vn -0.3729 -0.9003 0.2243
+vn -0.1272 -0.9662 0.2243
+vn 0.1272 -0.9662 0.2243
+vn 0.3729 -0.9003 0.2243
+vn 0.5933 -0.7731 0.2243
+vn 0.7731 -0.5933 0.2243
+vn 0.9003 -0.3729 0.2243
+vn 0.9662 -0.1272 0.2243
+vn 0.9410 0.0774 0.3293
+vn 0.9089 0.2283 0.3489
+vn 0.9518 0.1253 0.2800
+vn 0.8358 0.4109 0.3641
+vn 0.8844 0.3663 0.2894
+vn 0.7041 0.6106 0.3624
+vn 0.7590 0.5824 0.2911
+vn 0.5258 0.7704 0.3606
+vn 0.5821 0.7586 0.2929
+vn 0.3125 0.8796 0.3586
+vn 0.3657 0.8828 0.2948
+vn 0.0782 0.9310 0.3565
+vn 0.1246 0.9467 0.2969
+vn -0.1616 0.9210 0.3544
+vn -0.1246 0.9461 0.2990
+vn -0.3912 0.8503 0.3521
+vn -0.3649 0.8809 0.3013
+vn -0.5954 0.7233 0.3497
+vn -0.5800 0.7559 0.3037
+vn -0.7608 0.5484 0.3471
+vn -0.7553 0.5795 0.3061
+vn -0.8763 0.3369 0.3445
+vn -0.8788 0.3640 0.3087
+vn -0.9342 0.1028 0.3417
+vn -0.9422 0.1240 0.3114
+vn -0.9413 -0.1239 0.3142
+vn -0.9306 -0.1387 0.3388
+vn -0.8762 -0.3629 0.3170
+vn -0.8655 -0.3715 0.3358
+vn -0.7433 -0.5804 0.3327
+vn -0.7516 -0.5768 0.3200
+vn -0.5699 -0.7511 0.3332
+vn -0.5747 -0.7501 0.3272
+vn -0.5716 -0.7515 0.3295
+vn -0.5761 -0.7508 0.3231
+vn -0.5779 -0.7510 0.3194
+vn -0.5730 -0.7522 0.3254
+vn -0.3603 -0.8730 0.3287
+vn -0.3615 -0.8731 0.3272
+vn -0.3607 -0.8732 0.3278
+vn -0.3617 -0.8733 0.3262
+vn -0.3621 -0.8735 0.3254
+vn -0.3609 -0.8735 0.3268
+vn -0.1233 -0.9366 0.3278
+vn -0.1233 -0.9367 0.3278
+vn 0.1233 -0.9367 0.3278
+vn 0.3616 -0.8728 0.3278
+vn 0.3615 -0.8728 0.3277
+vn 0.5752 -0.7495 0.3278
+vn 0.5751 -0.7495 0.3277
+vn 0.7495 -0.5751 0.3278
+vn 0.8728 -0.3615 0.3278
+vn 0.9367 -0.1233 0.3278
+vn 0.0000 0.0000 1.0000
+s off
+f 755//471 879//471 867//471 754//471
+f 867//471 879//471 756//471
+f 870//471 944//471 758//471 759//471
+f 869//471 945//471 944//471 870//471
+f 757//471 945//471 869//471
+f 758//471 944//471 943//471
+f 943//471 944//471 945//471 946//471
+f 756//471 958//471 868//471
+f 946//471 945//471 757//471 868//471 958//471
+f 897//471 905//471 761//471
+f 904//471 903//471 905//471 897//471
+f 760//471 907//471 971//471 906//471 866//471
+f 866//471 906//471 755//471
+f 903//471 904//471 971//471 907//471
+f 865//471 762//471 864//471 903//471 907//471
+f 863//471 905//471 903//471 864//471
+f 761//471 905//471 863//471
+f 865//471 907//471 760//471
+f 897//471 761//471 898//471
+f 904//471 897//471 898//471 902//471
+f 756//471 879//471 957//471
+f 755//471 906//471 969//471 957//471 879//471
+f 904//471 902//471 970//471 971//471
+f 969//471 906//471 971//471 970//471
+f 764//471 894//471 862//471
+f 862//471 894//471 761//471 763//471
+f 765//471 947//471 872//471 767//471
+f 875//471 911//471 766//471
+f 873//471 966//471 948//471 874//471
+f 872//471 947//471 966//471 873//471
+f 948//471 911//471 875//471 874//471
+f 893//471 899//471 768//471
+f 896//471 901//471 900//471 890//471
+f 758//471 943//471 942//471
+f 956//471 959//471 958//471 756//471 955//471
+f 943//471 946//471 952//471 942//471
+f 952//471 946//471 958//471 959//471
+f 967//471 954//471 956//471 955//471
+f 890//471 900//471 899//471 893//471
+f 901//471 896//471 953//471 968//471
+f 954//471 967//471 968//471 953//471
+f 768//471 899//471 895//471
+f 900//471 898//471 761//471 895//471 899//471
+f 902//471 898//471 900//471 901//471
+f 756//471 957//471 955//471
+f 957//471 969//471 967//471 955//471
+f 902//471 901//471 968//471 970//471
+f 967//471 969//471 970//471 968//471
+f 761//471 894//471 895//471
+f 764//471 768//471 895//471 894//471
+f 858//471 884//471 883//471 859//471
+f 770//471 884//471 858//471
+f 860//471 769//471 859//471 883//471 880//471
+f 861//471 885//471 768//471
+f 880//471 885//471 861//471 860//471
+f 766//471 912//471 877//471
+f 878//471 930//471 771//471
+f 877//471 912//471 931//471 876//471
+f 931//471 930//471 878//471 772//471 876//471
+f 771//471 929//471 928//471
+f 928//471 929//471 932//471 933//471
+f 913//471 910//471 933//471 932//471
+f 910//471 913//471 914//471 939//471
+f 758//471 940//471 871//471
+f 962//471 964//471 965//471 963//471
+f 965//471 949//471 950//471 963//471
+f 765//471 871//471 940//471 950//471 949//471
+f 962//471 939//471 914//471 964//471
+f 771//471 930//471 929//471
+f 929//471 930//471 931//471 932//471
+f 912//471 913//471 932//471 931//471
+f 766//471 911//471 914//471 913//471 912//471
+f 765//471 949//471 947//471
+f 964//471 948//471 966//471 965//471
+f 966//471 947//471 949//471 965//471
+f 964//471 914//471 911//471 948//471
+f 892//471 893//471 768//471
+f 896//471 890//471 889//471 891//471
+f 773//471 927//471 925//471
+f 926//471 925//471 927//471 934//471
+f 934//471 908//471 937//471 926//471
+f 758//471 942//471 941//471
+f 956//471 960//471 961//471 959//471
+f 961//471 951//471 952//471 959//471
+f 941//471 942//471 952//471 951//471
+f 956//471 954//471 909//471 960//471
+f 889//471 890//471 893//471 892//471
+f 896//471 891//471 938//471 953//471
+f 937//471 908//471 909//471 954//471 953//471 938//471
+f 771//471 928//471 927//471 773//471
+f 927//471 928//471 933//471 934//471
+f 910//471 908//471 934//471 933//471
+f 758//471 941//471 940//471
+f 960//471 962//471 963//471 961//471
+f 963//471 950//471 951//471 961//471
+f 940//471 941//471 951//471 950//471
+f 960//471 909//471 939//471 962//471
+f 939//471 909//471 908//471 910//471
+f 855//471 915//471 919//471 856//471 774//471
+f 857//471 881//471 770//471
+f 775//471 915//471 855//471
+f 919//471 881//471 857//471 856//471
+f 851//471 923//471 922//471 854//471 777//471
+f 853//471 918//471 776//471
+f 853//471 854//471 922//471 918//471
+f 773//471 924//471 852//471
+f 852//471 924//471 923//471 851//471
+f 881//471 882//471 770//471
+f 775//471 776//471 916//471 915//471
+f 915//471 916//471 920//471 919//471
+f 920//471 882//471 881//471 919//471
+f 885//471 886//471 768//471
+f 880//471 883//471 887//471 888//471
+f 776//471 917//471 916//471
+f 916//471 917//471 921//471 920//471
+f 920//471 921//471 935//471 882//471
+f 886//471 885//471 880//471 888//471
+f 883//471 884//471 936//471 887//471
+f 882//471 935//471 936//471 884//471 770//471
+f 886//471 892//471 768//471
+f 888//471 887//471 891//471 889//471
+f 776//471 918//471 917//471
+f 918//471 922//471 921//471 917//471
+f 773//471 925//471 924//471
+f 923//471 924//471 925//471 926//471
+f 921//471 922//471 923//471 926//471 937//471 935//471
+f 892//471 886//471 888//471 889//471
+f 887//471 936//471 938//471 891//471
+f 935//471 937//471 938//471 936//471
+f 779//472 771//472 778//472
+f 778//472 771//472 773//472
+f 778//473 773//473 780//473
+f 780//473 773//473 852//473 851//473 777//473
+f 780//474 777//474 781//474
+f 781//474 777//474 854//474 853//474 776//474
+f 781//475 776//475 782//475
+f 782//475 776//475 775//475
+f 782//476 775//476 783//476
+f 783//476 775//476 855//476 774//476
+f 784//477 783//477 770//477
+f 770//477 783//477 774//477 856//477 857//477
+f 785//478 784//478 769//478
+f 769//478 784//478 770//478 858//478 859//478
+f 786//479 785//479 768//479
+f 768//479 785//479 769//479 860//479 861//479
+f 787//480 786//480 764//480
+f 764//480 786//480 768//480
+f 788//481 787//481 763//481
+f 763//481 787//481 764//481 862//481
+f 789//482 788//482 761//482
+f 788//482 763//482 761//482
+f 790//483 789//483 762//483
+f 762//483 789//483 761//483 863//483 864//483
+f 760//484 790//484 762//484 865//484
+f 791//484 790//484 760//484
+f 792//485 791//485 760//485
+f 792//485 760//485 866//485 755//485
+f 754//486 792//486 755//486
+f 793//486 792//486 754//486
+f 756//487 793//487 754//487 867//487
+f 793//487 756//487 794//487
+f 794//488 757//488 795//488
+f 868//488 757//488 794//488 756//488
+f 795//489 759//489 796//489
+f 870//489 759//489 795//489 757//489 869//489
+f 797//490 796//490 758//490
+f 796//490 759//490 758//490
+f 798//491 797//491 765//491
+f 871//491 765//491 797//491 758//491
+f 799//492 798//492 767//492
+f 798//492 765//492 767//492
+f 799//493 766//493 800//493
+f 875//493 766//493 799//493 767//493 872//493 873//493 874//493
+f 800//494 772//494 801//494
+f 800//494 766//494 877//494 876//494 772//494
+f 801//495 771//495 779//495
+f 878//495 771//495 801//495 772//495
+f 802//496 778//496 803//496
+f 779//496 778//496 802//496
+f 803//497 780//497 804//497
+f 778//497 780//497 803//497
+f 804//498 781//498 805//498
+f 780//498 781//498 804//498
+f 805//499 782//499 806//499
+f 781//499 782//499 805//499
+f 782//500 807//500 806//500
+f 782//500 783//500 807//500
+f 807//501 784//501 808//501
+f 783//501 784//501 807//501
+f 808//502 785//502 809//502
+f 784//502 785//502 808//502
+f 809//503 786//503 810//503
+f 785//503 786//503 809//503
+f 810//504 787//504 811//504
+f 786//504 787//504 810//504
+f 787//505 812//505 811//505
+f 787//505 788//505 812//505
+f 812//506 789//506 813//506
+f 788//506 789//506 812//506
+f 813//507 790//507 814//507
+f 789//507 790//507 813//507
+f 814//508 791//508 815//508
+f 790//508 791//508 814//508
+f 791//509 792//509 815//509
+f 815//509 792//509 816//509
+f 792//510 793//510 816//510
+f 816//510 793//510 817//510
+f 817//511 794//511 818//511
+f 793//511 794//511 817//511
+f 794//512 819//512 818//512
+f 794//512 795//512 819//512
+f 819//513 796//513 820//513
+f 795//513 796//513 819//513
+f 796//514 821//514 820//514
+f 796//514 797//514 821//514
+f 821//515 798//515 822//515
+f 797//515 798//515 821//515
+f 822//516 799//516 823//516
+f 798//516 799//516 822//516
+f 799//517 824//517 823//517
+f 799//517 800//517 824//517
+f 824//518 801//518 825//518
+f 800//518 801//518 824//518
+f 825//519 779//519 802//519
+f 801//519 779//519 825//519
+f 802//520 826//520 827//520
+f 826//521 803//521 828//521
+f 802//522 803//522 826//522
+f 828//523 804//523 829//523
+f 803//524 804//524 828//524
+f 829//525 805//525 830//525
+f 804//526 805//526 829//526
+f 830//527 806//527 831//527
+f 805//528 806//528 830//528
+f 831//529 807//529 832//529
+f 806//530 807//530 831//530
+f 832//531 808//531 833//531
+f 807//532 808//532 832//532
+f 833//533 809//533 834//533
+f 808//534 809//534 833//534
+f 834//535 810//535 835//535
+f 809//536 810//536 834//536
+f 835//537 811//537 836//537
+f 810//538 811//538 835//538
+f 836//539 812//539 837//539
+f 811//540 812//540 836//540
+f 837//541 813//541 838//541
+f 812//542 813//542 837//542
+f 838//543 814//543 839//543
+f 813//544 814//544 838//544
+f 814//545 815//545 839//545
+f 839//546 815//546 840//546
+f 815//547 816//547 840//547
+f 840//548 816//548 841//548
+f 841//549 817//549 842//549
+f 816//550 817//550 841//550
+f 842//551 818//552 843//553
+f 817//554 818//555 842//556
+f 843//557 819//558 844//559
+f 818//560 819//561 843//562
+f 819//563 845//563 844//563
+f 819//564 820//564 845//564
+f 845//565 821//565 846//565
+f 820//565 821//565 845//565
+f 846//566 822//566 847//566
+f 821//567 822//567 846//567
+f 847//568 823//568 848//568
+f 822//569 823//569 847//569
+f 848//570 824//570 849//570
+f 823//570 824//570 848//570
+f 849//571 825//571 850//571
+f 824//571 825//571 849//571
+f 850//572 802//572 827//572
+f 825//572 802//572 850//572
+f 843//573 841//573 842//573
+f 840//573 841//573 843//573
+f 845//573 843//573 844//573
+f 845//573 840//573 843//573
+f 836//573 839//573 840//573
+f 836//573 838//573 839//573
+f 836//573 837//573 838//573
+f 848//573 846//573 847//573
+f 848//573 845//573 846//573
+f 848//573 840//573 845//573
+f 834//573 835//573 836//573
+f 850//573 848//573 849//573
+f 827//573 840//573 848//573
+f 827//573 848//573 850//573
+f 832//573 833//573 834//573
+f 832//573 834//573 836//573
+f 828//573 827//573 826//573
+f 831//573 836//573 840//573
+f 831//573 840//573 827//573
+f 831//573 827//573 828//573
+f 831//573 832//573 836//573
+f 830//573 828//573 829//573
+f 830//573 831//573 828//573
+o Base
+v 36.000000 0.000000 -2.000000
+v 34.773331 9.317486 -2.000000
+v 36.000000 0.000000 0.000000
+v 34.773331 9.317486 0.000000
+v 31.176914 18.000000 -1.999999
+v 31.176914 18.000000 0.000001
+v 25.455845 25.455845 -1.999999
+v 25.455845 25.455845 0.000001
+v 18.000000 31.176914 -1.999999
+v 18.000000 31.176914 0.000001
+v 9.317486 34.773331 -1.999998
+v 9.317486 34.773331 0.000002
+v 0.000000 36.000000 -1.999998
+v 0.000000 36.000000 0.000002
+v -9.317486 34.773331 0.000002
+v -9.317486 34.773331 -1.999998
+v -18.000000 31.176914 -1.999999
+v -18.000000 31.176914 0.000001
+v -25.455845 25.455845 -1.999999
+v -25.455845 25.455845 0.000001
+v -31.176914 18.000000 -1.999999
+v -31.176914 18.000000 0.000001
+v -34.773331 9.317486 0.000000
+v -34.773331 9.317486 -2.000000
+v -36.000000 0.000000 -2.000000
+v -36.000000 0.000000 0.000000
+v -34.773331 -9.317486 -2.000000
+v -34.773331 -9.317486 -0.000000
+v -31.176914 -18.000000 -0.000001
+v -31.176914 -18.000000 -2.000001
+v -25.455845 -25.455845 -2.000001
+v -25.455845 -25.455845 -0.000001
+v -18.000000 -31.176914 -2.000001
+v -18.000000 -31.176914 -0.000001
+v -9.317486 -34.773331 -2.000001
+v -9.317486 -34.773331 -0.000002
+v 0.000000 -36.000000 -2.000002
+v 0.000000 -36.000000 -0.000002
+v 9.317486 -34.773331 -2.000001
+v 9.317486 -34.773331 -0.000002
+v 18.000000 -31.176914 -2.000001
+v 18.000000 -31.176914 -0.000001
+v 25.455845 -25.455845 -2.000001
+v 25.455845 -25.455845 -0.000001
+v 31.176914 -18.000000 -2.000001
+v 31.176914 -18.000000 -0.000001
+v 34.773331 -9.317486 -2.000000
+v 34.773331 -9.317486 -0.000000
+vn 0.9914 0.1305 0.0000
+vn 0.9239 0.3827 0.0000
+vn 0.7934 0.6088 0.0000
+vn 0.6088 0.7934 0.0000
+vn 0.3827 0.9239 0.0000
+vn 0.1305 0.9914 0.0000
+vn -0.1305 0.9914 0.0000
+vn -0.3827 0.9239 0.0000
+vn -0.6088 0.7934 0.0000
+vn -0.7934 0.6088 0.0000
+vn -0.9239 0.3827 0.0000
+vn -0.9914 0.1305 0.0000
+vn -0.9914 -0.1305 0.0000
+vn -0.9239 -0.3827 0.0000
+vn -0.7934 -0.6088 0.0000
+vn -0.6088 -0.7934 0.0000
+vn -0.3827 -0.9239 0.0000
+vn -0.1305 -0.9914 0.0000
+vn 0.1305 -0.9914 0.0000
+vn 0.3827 -0.9239 0.0000
+vn 0.6088 -0.7934 0.0000
+vn 0.7934 -0.6088 0.0000
+vn 0.9239 -0.3827 0.0000
+vn 0.9914 -0.1305 0.0000
+vn -0.0000 -0.0000 -1.0000
+vn -0.0000 -0.0000 1.0000
+s 1
+f 972//574 973//574 974//574
+f 974//574 973//574 975//574
+f 975//575 976//575 977//575
+f 973//575 976//575 975//575
+f 977//576 978//576 979//576
+f 976//576 978//576 977//576
+f 979//577 980//577 981//577
+f 978//577 980//577 979//577
+f 981//578 982//578 983//578
+f 980//578 982//578 981//578
+f 983//579 984//579 985//579
+f 985//580 984//580 986//580
+f 982//579 984//579 983//579
+f 984//580 987//580 986//580
+f 986//581 988//581 989//581
+f 987//581 988//581 986//581
+f 989//582 990//582 991//582
+f 988//582 990//582 989//582
+f 991//583 992//583 993//583
+f 993//584 992//584 994//584
+f 990//583 992//583 991//583
+f 992//584 995//584 994//584
+f 995//585 996//585 994//585
+f 994//585 996//585 997//585
+f 996//586 998//586 997//586
+f 997//586 998//586 999//586
+f 999//587 998//587 1000//587
+f 998//587 1001//587 1000//587
+f 1000//588 1002//588 1003//588
+f 1001//588 1002//588 1000//588
+f 1003//589 1004//589 1005//589
+f 1002//589 1004//589 1003//589
+f 1005//590 1006//590 1007//590
+f 1004//590 1006//590 1005//590
+f 1007//591 1008//591 1009//591
+f 1006//591 1008//591 1007//591
+f 1008//592 1010//592 1009//592
+f 1009//592 1010//592 1011//592
+f 1011//593 1012//593 1013//593
+f 1010//593 1012//593 1011//593
+f 1013//594 1014//594 1015//594
+f 1012//594 1014//594 1013//594
+f 1015//595 1016//595 1017//595
+f 1014//595 1016//595 1015//595
+f 1017//596 1018//596 1019//596
+f 1016//596 1018//596 1017//596
+f 1019//597 972//597 974//597
+f 1018//597 972//597 1019//597
+f 1001//598 998//598 1002//598
+f 1006//598 1012//598 1008//598
+f 1008//598 1012//598 1010//598
+f 995//598 992//598 996//598
+f 1002//598 1016//598 1004//598
+f 1004//598 1016//598 1006//598
+f 1012//598 1016//598 1014//598
+f 998//598 1016//598 1002//598
+f 1006//598 1016//598 1012//598
+f 990//598 988//598 992//598
+f 992//598 987//598 996//598
+f 988//598 987//598 992//598
+f 996//598 984//598 998//598
+f 998//598 984//598 1016//598
+f 987//598 984//598 996//598
+f 972//598 976//598 973//598
+f 980//598 976//598 982//598
+f 982//598 976//598 984//598
+f 1016//598 976//598 1018//598
+f 1018//598 976//598 972//598
+f 984//598 976//598 1016//598
+f 980//598 978//598 976//598
+f 999//599 1000//599 1003//599
+f 1013//599 1007//599 1009//599
+f 1013//599 1009//599 1011//599
+f 993//599 994//599 997//599
+f 1017//599 1003//599 1005//599
+f 1017//599 1005//599 1007//599
+f 1017//599 1013//599 1015//599
+f 1017//599 999//599 1003//599
+f 1017//599 1007//599 1013//599
+f 989//599 991//599 993//599
+f 986//599 993//599 997//599
+f 986//599 989//599 993//599
+f 985//599 997//599 999//599
+f 985//599 999//599 1017//599
+f 985//599 986//599 997//599
+f 977//599 974//599 975//599
+f 977//599 981//599 983//599
+f 977//599 983//599 985//599
+f 977//599 1017//599 1019//599
+f 977//599 1019//599 974//599
+f 977//599 985//599 1017//599
+f 979//599 981//599 977//599
+o Supports
+v 33.120998 -1.572073 6.105556
+v 33.134087 -2.813651 5.819593
+v 33.362934 -2.332964 5.244755
+v -17.093845 -29.607409 -0.000001
+v 33.202461 -1.822765 5.822238
+v 8.848426 -33.022774 -0.000001
+v 33.017456 -3.052778 6.105556
+v 32.164112 -2.744152 5.736480
+v 32.232033 -1.755914 5.739894
+v -33.022774 -8.848426 -0.000000
+v 32.392284 -2.265089 5.163587
+v 35.092388 -1.953260 0.123309
+v -29.607409 17.093845 0.000001
+v 34.694439 -1.949548 1.319314
+v 34.858009 -2.437509 0.735778
+v 34.169331 -0.500000 3.052778
+v 34.288998 -7.901784 -0.000000
+v 29.607409 -17.093845 -0.000001
+v 34.500210 -6.921640 -0.000000
+v 35.022591 -2.949284 0.123765
+v -8.848426 33.022774 0.000001
+v 34.006023 -4.771636 2.552835
+v 33.767212 -5.250586 3.052778
+v 33.906384 -4.260318 3.052778
+v 33.678757 -4.713014 3.552377
+v 33.022774 8.848426 0.000000
+v 32.393688 -7.079615 6.105556
+v 32.369400 -7.473064 5.917337
+v 32.731140 -6.926498 5.209875
+v 17.093845 29.607409 0.000001
+v 32.486916 -6.638690 6.105556
+v 31.776731 -6.728268 5.133968
+v 31.427654 -7.255647 5.816602
+v 32.688488 -4.573841 3.552377
+v 32.776833 -5.111397 3.052778
+v 32.916004 -4.121129 3.052778
+v 33.015755 -4.632463 2.552835
+v 33.282124 -7.683784 0.090585
+v 33.170918 -7.036911 0.838120
+v 33.450432 -7.061650 -0.000000
+v 33.508202 -6.782223 -0.000000
+v 33.610657 -2.809137 1.383469
+v 33.831997 -2.365764 0.821577
+v 33.995972 -2.875952 0.211461
+v 32.998730 -0.000000 3.577049
+v 33.169220 -0.500000 3.052778
+v 33.342262 -0.000000 2.543511
+v 34.065674 -1.882745 0.210681
+v 33.006924 0.020030 3.552377
+v 34.006924 0.020030 3.552377
+v 35.111080 -2.320672 -0.000000
+v 35.127762 2.052778 0.000000
+v 35.055016 3.052778 0.000000
+v 34.339161 0.007525 2.552835
+v 34.169331 0.500000 3.052778
+v 33.094681 2.052778 6.105556
+v 33.094433 2.895388 5.917338
+v 33.339161 0.007525 2.552835
+v 34.128967 -7.879293 -0.000000
+v 34.096497 -2.495442 -0.000000
+v 32.131592 2.811150 5.816602
+v 33.169220 0.500000 3.052778
+v 34.126007 2.052778 0.000000
+v 34.027603 2.977029 0.090585
+v 35.055016 -3.052778 -0.000000
+v 35.138729 -1.855647 -0.000000
+v 34.893414 3.052778 0.000000
+v 34.144600 -1.715931 -0.000000
+v 34.051121 -3.052778 -0.000000
+v 31.700312 -9.774324 3.052778
+v 32.651474 -10.083376 3.052778
+v 34.282661 -7.929231 -0.000000
+v 32.771252 -12.701804 0.123308
+v 32.398705 -13.089926 0.735777
+v 32.660809 -10.604228 2.552835
+v 32.342457 -11.034432 3.052778
+v 34.042831 -8.902768 -0.000000
+v 31.009111 -12.528495 5.244754
+v 32.348694 -10.489667 3.552377
+v 31.014151 -11.993677 5.822237
+v 32.109257 -8.274511 6.105556
+v 30.111877 -11.630219 5.739893
+v 30.106943 -12.163995 5.163587
+v 31.397638 -10.180651 3.552377
+v 31.391294 -10.725381 3.052778
+v 31.445078 -12.704637 0.821576
+v 31.709753 -10.295211 2.552835
+v 31.816582 -12.317470 0.210680
+v 33.090103 -8.593208 -0.000000
+v 35.052563 3.080840 0.000000
+v 34.950554 4.078280 0.000000
+v 33.820526 5.963471 2.543511
+v 33.737045 5.441038 3.052778
+v 33.482212 5.903817 3.577049
+v 32.995949 3.277087 6.105556
+v 33.269569 3.526987 5.209875
+v 32.948360 3.725240 6.105556
+v 32.300617 3.420587 5.133969
+v 32.752129 5.267371 3.052778
+v 33.721943 3.557876 0.838120
+v 30.642923 -12.914937 5.819592
+v 32.397083 -13.627512 0.123764
+v 29.741899 -12.549101 5.736480
+v 31.443375 -13.240525 0.211460
+v 33.995419 3.620723 0.000000
+v 33.964016 3.904327 0.000000
+v 32.501995 5.751318 3.552377
+v 33.486801 5.924966 3.552377
+v 34.219841 8.017640 0.123765
+v 33.905167 8.453507 0.735778
+v 33.816166 5.970344 2.552835
+v 33.563396 6.425846 3.052778
+v 32.450962 8.090934 5.244755
+v 32.381855 7.563055 5.819593
+v 32.831360 5.796695 2.552835
+v 30.168989 -18.110926 -0.000001
+v 30.672745 -17.244022 -0.000001
+v 30.867134 -15.046535 2.552834
+v 30.492004 -15.428246 3.052777
+v 30.930376 -14.529451 3.052777
+v 30.573999 -14.889650 3.552376
+v 28.475824 -17.110001 5.917337
+v 28.988758 -16.701969 5.209874
+v 30.458107 -13.106319 6.105556
+v 31.943193 -12.183209 -0.000001
+v 32.845490 -12.623289 -0.000001
+v 32.395943 -13.735960 -0.000001
+v 30.031483 -14.091032 3.052777
+v 27.647358 -16.612207 5.816601
+v 29.675205 -14.451280 3.552376
+v 29.593111 -14.989826 3.052777
+v 29.968340 -14.608163 2.552834
+v 29.278763 -17.592455 0.090584
+v 29.772373 -16.804882 -0.000001
+v 31.441179 -13.425739 -0.000001
+v 31.437878 7.329413 5.736481
+v 31.506845 7.855539 5.163588
+v 32.578480 6.252179 3.052778
+v 32.907200 8.204687 0.821577
+v 33.220810 7.770141 0.211461
+v 32.140682 8.526572 5.822238
+v 34.109749 8.642831 0.000000
+v 33.978436 8.986484 0.123309
+v 30.023741 -18.040083 -0.000001
+v 32.980183 8.736276 0.210681
+v 31.197092 8.290273 5.739894
+v 32.344830 7.299591 6.105556
+v 31.985739 8.739820 6.105556
+v 33.598816 8.867040 1.319314
+v 32.656158 10.618542 2.552835
+v 32.651474 10.083376 3.052778
+v 32.774143 12.807384 0.000001
+v 32.395943 13.735960 0.000001
+v 32.342457 11.034432 3.052778
+v 32.336315 10.527766 3.552377
+v 30.840570 12.179128 6.105556
+v 30.579950 12.980419 5.917338
+v 31.563553 8.333787 4.640615
+v 31.700312 9.774324 3.052778
+v 33.992344 9.093639 0.000000
+v 34.282661 7.929231 0.000000
+v 33.327900 7.619010 0.000000
+v 27.128355 -19.091869 3.052777
+v 27.937462 -19.679720 3.052777
+v 28.749411 -17.980524 0.838119
+v 30.154482 -18.135073 -0.000001
+v 27.532114 -17.234060 5.133968
+v 27.242241 -22.207008 0.123308
+v 26.767988 -22.461010 0.735777
+v 27.785389 -20.177965 2.552834
+v 27.349676 -20.488737 3.052777
+v 29.625549 -18.986849 -0.000001
+v 25.619900 -21.497648 5.244754
+v 27.523952 -19.972563 3.552376
+v 25.789961 -20.990564 5.822237
+v 27.980753 -17.791834 6.105555
+v 25.044163 -20.366079 5.739893
+v 24.874523 -20.872204 5.163586
+v 26.714935 -19.384777 3.552376
+v 26.540569 -19.900887 3.052777
+v 25.980099 -21.799891 0.821576
+v 26.976372 -19.590179 2.552834
+v 26.453060 -21.546474 0.210680
+v 28.815111 -18.398031 -0.000001
+v 28.967661 -18.156895 -0.000001
+v 33.003696 8.919314 0.000000
+v 31.385260 10.218750 3.552377
+v 30.125620 12.144022 5.133969
+v 29.690268 12.602771 5.816603
+v 31.391294 10.725381 3.052778
+v 31.705101 10.309525 2.552835
+v 31.445028 12.690074 0.838121
+v 31.821417 12.497824 0.000001
+v 31.716002 12.762974 0.000001
+v 31.442221 13.346431 0.090586
+v 32.242249 13.686022 0.000001
+v 25.152216 -21.752020 5.819592
+v 26.600327 -22.971783 0.123764
+v 24.408342 -21.125656 5.736479
+v 25.812878 -22.309025 0.211460
+v 32.384933 13.761890 0.000001
+v 31.979694 14.678990 0.000001
+v 30.067417 18.199741 0.123766
+v 30.316147 16.127905 2.552836
+v 30.404465 15.600055 3.052779
+v 29.633453 18.517036 0.735779
+v 29.934992 16.483004 3.052779
+v 30.016928 15.982968 3.552378
+v 30.368336 13.313004 6.105556
+v 30.551342 13.635226 5.209876
+v 30.184591 13.724517 6.105556
+v 28.362463 17.722834 5.244756
+v 28.459862 17.199436 5.819594
+v 29.521420 15.130531 3.052779
+v 25.871408 -20.739868 6.105555
+v 23.095831 -26.547245 -0.000001
+v 23.842817 -25.878439 -0.000001
+v 24.706753 -23.848574 2.552834
+v 24.232031 -24.095682 3.052777
+v 24.926689 -23.376341 3.052777
+v 24.476446 -23.608786 3.552376
+v 22.045752 -24.768061 6.105555
+v 21.794836 -25.072092 5.917337
+v 22.408754 -24.842535 5.209874
+v 22.380342 -24.466143 6.105555
+v 24.917305 -21.876925 6.105555
+v 26.614964 -21.457911 -0.000001
+v 27.337107 -22.155275 -0.000001
+v 26.565725 -23.074572 -0.000001
+v 24.207270 -22.681606 3.052777
+v 25.388269 21.303288 6.000001
+v 21.303288 25.388269 6.000001
+v 21.753139 -24.121176 5.133968
+v 16.571016 28.701843 6.000001
+v 21.160746 -24.342651 5.816601
+v 23.757107 -22.914127 3.552376
+v 23.512611 -23.400946 3.052777
+v 23.987413 -23.153915 2.552834
+v 22.409389 -25.779055 0.090584
+v 22.699642 -25.190357 0.838119
+v -21.303288 25.388269 6.000001
+v 22.911234 -25.374664 -0.000001
+v -25.388269 21.303288 6.000001
+v -28.701843 16.571016 6.000001
+v 23.122215 -25.182562 -0.000001
+v 25.753557 -22.484495 -0.000001
+v 27.634285 16.685526 5.736481
+v 29.133980 15.513497 3.552378
+v 27.537294 17.207212 5.163588
+v 29.051947 16.013479 3.052779
+v -25.388269 -21.303288 5.999999
+v 29.433201 15.658433 2.552836
+v 31.095196 14.208694 0.000001
+v -21.303288 -25.388269 5.999999
+v 28.761221 17.972006 0.821578
+v -16.571016 -28.701843 5.999999
+v 29.193762 17.655638 0.211462
+v 27.932751 18.041269 5.822239
+v 29.538435 19.046568 0.123310
+v 22.979582 -26.434986 -0.000001
+v 28.666361 18.500130 0.210682
+v 27.108364 17.524950 5.739895
+v 21.303288 -25.388269 5.999999
+v 25.388269 -21.303288 5.999999
+v 28.701843 -16.571016 5.999999
+v 27.719492 18.196199 6.105557
+v 27.776543 20.190142 2.552836
+v 27.937462 19.679720 3.052779
+v 27.212364 22.308313 0.000001
+v 26.565725 23.074572 0.000001
+v 27.349676 20.488737 3.052779
+v 27.500404 20.004972 3.552378
+v 25.072092 21.794836 5.917339
+v 27.128355 19.091869 3.052779
+v 29.518549 19.152777 0.000001
+v 30.154482 18.135073 0.000001
+v 29.342312 17.544996 0.000001
+v 19.900887 -26.540569 3.052777
+v 20.488737 -27.349676 3.052777
+v 23.074572 -26.565725 -0.000001
+v 19.046568 -29.538435 0.123308
+v 18.517036 -29.633453 0.735777
+v 20.190142 -27.776543 2.552834
+v 19.679720 -27.937462 3.052777
+v 22.308313 -27.212364 -0.000001
+v 17.722834 -28.362463 5.244753
+v 20.004972 -27.500404 3.552376
+v 18.041269 -27.932751 5.822237
+v 17.524950 -27.108364 5.739893
+v 17.207212 -27.537294 5.163586
+v 19.417187 -26.691387 3.552376
+v 19.091869 -27.128355 3.052777
+v 17.972006 -28.761221 0.821576
+v 19.602356 -26.967525 2.552834
+v 18.500130 -28.666361 0.210680
+v 21.719496 -26.401926 -0.000001
+v 28.632162 18.681475 0.000001
+v 26.691387 19.417187 3.552378
+v 24.342651 21.160746 5.816603
+v 26.540569 19.900887 3.052779
+v 26.967525 19.602356 2.552836
+v 26.401926 21.719496 0.000001
+v 25.779055 22.409389 0.090586
+v 26.434986 22.979582 0.000001
+v 17.199436 -28.459862 5.819592
+v 18.199741 -30.067417 0.123764
+v 16.685526 -27.634285 5.736479
+v 17.655638 -29.193762 0.211460
+v 26.547245 23.095831 0.000001
+v 25.878439 23.842817 0.000001
+v 22.971783 26.600327 0.123766
+v 23.848574 24.706753 2.552836
+v 24.095682 24.232031 3.052779
+v 22.461010 26.767988 0.735779
+v 23.376341 24.926689 3.052779
+v 23.608786 24.476446 3.552378
+v 24.768061 22.045752 6.105557
+v 24.842535 22.408754 5.209876
+v 24.466143 22.380342 6.105557
+v 21.497648 25.619900 5.244756
+v 21.752020 25.152216 5.819594
+v 24.121176 21.753139 5.133970
+v 23.400946 23.512611 3.052779
+v 25.190357 22.699642 0.838121
+v 18.196199 -27.719492 6.105555
+v 13.761890 -32.384933 -0.000001
+v 14.678990 -31.979694 -0.000001
+v 16.127905 -30.316147 2.552834
+v 15.600055 -30.404465 3.052777
+v 16.483004 -29.934992 3.052777
+v 15.982968 -30.016928 3.552376
+v 13.313004 -30.368336 6.105555
+v 12.980419 -30.579950 5.917336
+v 13.635226 -30.551342 5.209874
+v 13.724517 -30.184591 6.105555
+v 18.681475 -28.632162 -0.000001
+v 19.152777 -29.518549 -0.000001
+v 18.135073 -30.154482 -0.000001
+v 16.013479 -29.051947 3.052777
+v 13.234611 -29.662691 5.133967
+v 12.602771 -29.690268 5.816601
+v 15.513497 -29.133980 3.552376
+v 15.130531 -29.521420 3.052777
+v 15.658433 -29.433201 2.552834
+v 13.346431 -31.442221 0.090584
+v 13.804395 -30.972029 0.838119
+v 13.948675 -31.212700 -0.000001
+v 14.208694 -31.095196 -0.000001
+v 17.544996 -29.342312 -0.000001
+v 21.125656 24.408342 5.736481
+v 22.914127 23.757107 3.552378
+v 20.872204 24.874523 5.163588
+v 22.681606 24.207270 3.052779
+v 23.153915 23.987413 2.552836
+v 25.374664 22.911234 0.000001
+v 25.182562 23.122215 0.000001
+v 21.799891 25.980099 0.821578
+v 22.309025 25.812878 0.211462
+v 20.990564 25.789961 5.822239
+v 22.207008 27.242241 0.123310
+v 13.686022 -32.242249 -0.000001
+v 21.546474 26.453060 0.210682
+v 20.366079 25.044163 5.739895
+v 21.876925 24.917305 6.105557
+v 20.739868 25.871408 6.105557
+v 20.177965 27.785389 2.552836
+v 20.488737 27.349676 3.052779
+v 18.986849 29.625549 0.000001
+v 18.135073 30.154482 0.000001
+v 19.679720 27.937462 3.052779
+v 19.972563 27.523952 3.552378
+v 17.791834 27.980753 6.105557
+v 17.110001 28.475824 5.917339
+v 19.900887 26.540569 3.052779
+v 22.155275 27.337107 0.000001
+v 23.074572 26.565725 0.000001
+v 22.484495 25.753557 0.000001
+v 10.725381 -31.391294 3.052777
+v 11.034432 -32.342457 3.052777
+v 13.735960 -32.395943 -0.000001
+v 8.986484 -33.978436 0.123308
+v 8.453507 -33.905167 0.735776
+v 10.618542 -32.656158 2.552834
+v 10.083376 -32.651474 3.052777
+v 12.807384 -32.774143 -0.000001
+v 8.090934 -32.450962 5.244753
+v 10.527766 -32.336315 3.552376
+v 8.526572 -32.140682 5.822237
+v 12.179128 -30.840570 6.105555
+v 8.290273 -31.197092 5.739892
+v 7.855539 -31.506845 5.163586
+v 10.218750 -31.385260 3.552376
+v 9.774324 -31.700312 3.052777
+v 8.204687 -32.907200 0.821576
+v 10.309525 -31.705101 2.552834
+v 8.736276 -32.980183 0.210680
+v 12.497824 -31.821417 -0.000001
+v 21.457911 26.614964 0.000001
+v 19.384777 26.714935 3.552378
+v 16.612207 27.647358 5.816604
+v 19.091869 27.128355 3.052779
+v 19.590179 26.976372 2.552836
+v 18.398031 28.815111 0.000001
+v 17.592455 29.278763 0.090586
+v 18.040083 30.023741 0.000001
+v 7.563055 -32.381855 5.819592
+v 8.017640 -34.219841 0.123764
+v 7.329414 -31.437878 5.736479
+v 7.770141 -33.220810 0.211460
+v 18.110926 30.168989 0.000001
+v 17.244022 30.672745 0.000001
+v 13.627512 32.397083 0.123766
+v 15.046535 30.867134 2.552836
+v 15.428246 30.492004 3.052779
+v 13.089926 32.398705 0.735779
+v 14.529451 30.930376 3.052779
+v 14.889650 30.573999 3.552378
+v 16.701969 28.988758 5.209877
+v 12.528495 31.009111 5.244756
+v 12.914937 30.642923 5.819594
+v 16.218513 28.142317 5.133970
+v 14.989826 29.593111 3.052779
+v 16.942877 29.372890 0.838121
+v 8.739820 -31.985739 6.105555
+v 3.080840 -35.052563 -0.000002
+v 4.078280 -34.950554 -0.000002
+v 5.970344 -33.816166 2.552834
+v 5.441038 -33.737045 3.052777
+v 6.425846 -33.563396 3.052777
+v 5.924966 -33.486801 3.552376
+v 3.277087 -32.995949 6.105555
+v 2.895388 -33.094433 5.917336
+v 3.526987 -33.269569 5.209874
+v 3.725240 -32.948360 6.105555
+v 7.299591 -32.344830 6.105555
+v 8.919314 -33.003696 -0.000001
+v 9.093639 -33.992344 -0.000001
+v 31.096409 8.332258 6.000000
+v 7.929231 -34.282661 -0.000001
+v 6.252179 -32.578480 3.052777
+v 3.420587 -32.300617 5.133967
+v 2.811150 -32.131592 5.816601
+v 5.751318 -32.501995 3.552376
+v 5.267371 -32.752129 3.052777
+v 5.796695 -32.831360 2.552834
+v 2.977029 -34.027603 0.090584
+v 3.557876 -33.721943 0.838118
+v 16.096685 27.880278 6.000001
+v 3.620723 -33.995419 -0.000001
+v 3.904327 -33.964016 -0.000001
+v 7.619010 -33.327900 -0.000001
+v 12.549101 29.741899 5.736482
+v 14.451280 29.675205 3.552378
+v 12.163995 30.106943 5.163589
+v 14.091032 30.031483 3.052779
+v 14.608163 29.968340 2.552836
+v 17.052780 29.631081 0.000001
+v 16.804882 29.772373 0.000001
+v 12.704637 31.445078 0.821578
+v 13.240525 31.443375 0.211462
+v 11.993677 31.014151 5.822239
+v -8.332258 31.096409 6.000001
+v 12.701804 32.771252 0.123310
+v 3.052778 -34.893414 -0.000002
+v 12.317470 31.816582 0.210682
+v 11.630219 30.111877 5.739895
+v 13.106319 30.458107 6.105557
+v 10.604228 32.660809 2.552836
+v 11.034432 32.342457 3.052779
+v 8.902768 34.042831 0.000001
+v 7.929231 34.282661 0.000001
+v 10.083376 32.651474 3.052779
+v 10.489667 32.348694 3.552378
+v -27.880278 16.096685 6.000000
+v 8.274511 32.109257 6.105557
+v 7.473064 32.369400 5.917339
+v 10.725381 31.391294 3.052779
+v 12.623289 32.845490 0.000001
+v 13.735960 32.395943 0.000001
+v 13.425739 31.441179 0.000001
+v 0.500000 -33.169220 3.052777
+v 0.500000 -34.169331 3.052777
+v 3.052778 -35.055016 -0.000002
+v -1.953260 -35.092388 0.123307
+v -2.437509 -34.858009 0.735776
+v 0.007525 -34.339161 2.552834
+v -0.500000 -34.169331 3.052777
+v 2.052778 -35.127762 -0.000002
+v -2.332964 -33.362934 5.244753
+v 0.020030 -34.006924 3.552376
+v -31.096409 -8.332258 6.000000
+v -1.822765 -33.202461 5.822237
+v 2.052778 -33.094681 6.105555
+v -1.755914 -32.232033 5.739892
+v -2.265089 -32.392284 5.163586
+v 0.020030 -33.006924 3.552376
+v -0.500000 -33.169220 3.052777
+v -2.365764 -33.831997 0.821576
+v 0.007525 -33.339161 2.552834
+v -1.882745 -34.065674 0.210680
+v 2.052778 -34.126007 -0.000001
+v 12.183209 31.943193 0.000001
+v 10.180651 31.397638 3.552378
+v -16.096685 -27.880278 5.999999
+v 7.255646 31.427654 5.816604
+v 9.774324 31.700312 3.052779
+v 10.295211 31.709753 2.552836
+v 8.593208 33.090103 0.000001
+v 7.683784 33.282124 0.090586
+v 7.879293 34.128967 0.000001
+v -2.813651 -33.134087 5.819592
+v -2.949284 -35.022591 0.123763
+v -2.744152 -32.164112 5.736479
+v -2.875952 -33.995972 0.211460
+v 7.901784 34.288998 0.000001
+v 6.921640 34.500210 0.000002
+v 2.949284 35.022591 0.123767
+v 4.771636 34.006023 2.552836
+v 5.250586 33.767212 3.052779
+v 2.437509 34.858009 0.735780
+v 8.332258 -31.096409 5.999999
+v 4.260318 33.906384 3.052779
+v 4.713014 33.678757 3.552378
+v 7.079614 32.393688 6.105557
+v 6.926498 32.731140 5.209877
+v 6.638690 32.486916 6.105557
+v 2.332964 33.362934 5.244756
+v 2.813651 33.134087 5.819594
+v 6.728268 31.776731 5.133970
+v 5.111397 32.776833 3.052779
+v 7.036911 33.170918 0.838121
+v -1.572073 -33.120998 6.105555
+v -7.901784 -34.288998 -0.000001
+v -6.921640 -34.500210 -0.000002
+v 27.880278 -16.096685 6.000000
+v -4.771636 -34.006023 2.552834
+v -5.250586 -33.767212 3.052777
+v -4.260318 -33.906384 3.052777
+v -4.713014 -33.678757 3.552376
+v -7.079614 -32.393688 6.105555
+v -7.473064 -32.369400 5.917336
+v -6.926498 -32.731140 5.209874
+v -6.638690 -32.486916 6.105555
+v -3.052778 -33.017456 6.105555
+v -1.715931 -34.144600 -0.000001
+v -1.855647 -35.138729 -0.000002
+v -3.052778 -35.055016 -0.000002
+v -4.121129 -32.916004 3.052777
+v -6.728268 -31.776731 5.133967
+v -7.255646 -31.427654 5.816601
+v -4.573841 -32.688488 3.552376
+v -5.111397 -32.776833 3.052777
+v -4.632463 -33.015755 2.552834
+v -7.683784 -33.282124 0.090584
+v -7.036911 -33.170918 0.838119
+v -7.061650 -33.450432 -0.000001
+v -6.782223 -33.508202 -0.000001
+v -3.052778 -34.051121 -0.000001
+v 2.744152 32.164112 5.736482
+v 4.573841 32.688488 3.552378
+v 2.265089 32.392284 5.163589
+v 4.121129 32.916004 3.052779
+v 4.632463 33.015755 2.552836
+v 7.061650 33.450432 0.000001
+v 6.782223 33.508202 0.000001
+v 2.365764 33.831997 0.821579
+v 2.875952 33.995972 0.211462
+v 1.822765 33.202461 5.822239
+v 1.953260 35.092388 0.123311
+v -7.879293 -34.128967 -0.000001
+v 1.882745 34.065674 0.210682
+v 1.755914 32.232033 5.739895
+v 3.052778 33.017456 6.105557
+v 1.572073 33.120998 6.105557
+v -0.007525 34.339161 2.552836
+v 0.500000 34.169331 3.052779
+v -2.052778 35.127762 0.000002
+v -3.052778 35.055016 0.000002
+v -0.500000 34.169331 3.052779
+v -0.020030 34.006924 3.552378
+v -2.052778 33.094681 6.105557
+v -2.895388 33.094433 5.917339
+v 0.500000 33.169220 3.052779
+v 1.855647 35.138729 0.000002
+v 3.052778 35.055016 0.000002
+v 3.052778 34.051121 0.000001
+v -9.774324 -31.700312 3.052777
+v -10.083376 -32.651474 3.052777
+v -7.929231 -34.282661 -0.000001
+v -12.701804 -32.771252 0.123308
+v -13.089926 -32.398705 0.735777
+v -10.604228 -32.660809 2.552834
+v -11.034432 -32.342457 3.052777
+v -8.902768 -34.042831 -0.000001
+v -12.528495 -31.009111 5.244753
+v -10.489667 -32.348694 3.552376
+v -11.993677 -31.014151 5.822237
+v -8.274511 -32.109257 6.105555
+v -11.630219 -30.111877 5.739892
+v -12.163995 -30.106943 5.163586
+v -10.180651 -31.397638 3.552376
+v -10.725381 -31.391294 3.052777
+v -12.704637 -31.445078 0.821576
+v -10.295211 -31.709753 2.552834
+v -12.317470 -31.816582 0.210680
+v -8.593208 -33.090103 -0.000001
+v 1.715931 34.144600 0.000001
+v -0.020030 33.006924 3.552378
+v -2.811150 32.131592 5.816604
+v -0.500000 33.169220 3.052779
+v -0.007525 33.339161 2.552836
+v -2.052778 34.126007 0.000001
+v -2.977029 34.027603 0.090586
+v -3.052778 34.893414 0.000002
+v -12.914937 -30.642923 5.819592
+v -13.627512 -32.397083 0.123764
+v -12.549101 -29.741899 5.736479
+v -13.240525 -31.443375 0.211460
+v -3.080840 35.052563 0.000002
+v -4.078280 34.950554 0.000002
+v -8.017640 34.219841 0.123766
+v -5.970344 33.816166 2.552836
+v -5.441038 33.737045 3.052779
+v -8.453507 33.905167 0.735779
+v -6.425846 33.563396 3.052779
+v -5.924966 33.486801 3.552378
+v -3.277087 32.995949 6.105557
+v -3.526987 33.269569 5.209877
+v -3.725240 32.948360 6.105557
+v -8.090934 32.450962 5.244756
+v -7.563055 32.381855 5.819594
+v -3.420587 32.300617 5.133970
+v -5.267371 32.752129 3.052779
+v -3.557876 33.721943 0.838121
+v -18.110926 -30.168989 -0.000001
+v -17.244022 -30.672745 -0.000001
+v -15.046535 -30.867134 2.552834
+v -15.428246 -30.492004 3.052777
+v -14.529451 -30.930376 3.052777
+v -14.889650 -30.573999 3.552376
+v -17.110001 -28.475824 5.917336
+v -16.701969 -28.988758 5.209874
+v -13.106319 -30.458107 6.105555
+v -12.183209 -31.943193 -0.000001
+v -12.623289 -32.845490 -0.000001
+v -13.735960 -32.395943 -0.000001
+v -14.091032 -30.031483 3.052777
+v -16.218513 -28.142317 5.133967
+v -16.612207 -27.647358 5.816601
+v -14.451280 -29.675205 3.552376
+v -14.989826 -29.593111 3.052777
+v -14.608163 -29.968340 2.552834
+v -17.592455 -29.278763 0.090584
+v -16.942877 -29.372890 0.838119
+v -17.052780 -29.631081 -0.000001
+v -16.804882 -29.772373 -0.000001
+v -13.425739 -31.441179 -0.000001
+v -7.329414 31.437878 5.736482
+v -5.751318 32.501995 3.552378
+v -7.855539 31.506845 5.163589
+v -6.252179 32.578480 3.052779
+v -5.796695 32.831360 2.552836
+v -3.620723 33.995419 0.000001
+v -3.904327 33.964016 0.000001
+v -8.204687 32.907200 0.821578
+v -7.770141 33.220810 0.211462
+v -8.526572 32.140682 5.822239
+v -8.986484 33.978436 0.123310
+v -18.040083 -30.023741 -0.000001
+v -8.736276 32.980183 0.210682
+v -8.290273 31.197092 5.739895
+v -7.299591 32.344830 6.105557
+v -8.739820 31.985739 6.105557
+v -10.618542 32.656158 2.552836
+v -10.083376 32.651474 3.052779
+v -12.807384 32.774143 0.000001
+v -13.735960 32.395943 0.000001
+v -11.034432 32.342457 3.052779
+v -10.527766 32.336315 3.552378
+v -12.179128 30.840570 6.105557
+v -12.980419 30.579950 5.917339
+v -9.774324 31.700312 3.052779
+v -9.093639 33.992344 0.000001
+v -7.929231 34.282661 0.000001
+v -7.619010 33.327900 0.000001
+v -19.091869 -27.128355 3.052777
+v -19.679720 -27.937462 3.052777
+v -18.135073 -30.154482 -0.000001
+v -22.207008 -27.242241 0.123308
+v -22.461010 -26.767988 0.735777
+v -20.177965 -27.785389 2.552834
+v -20.488737 -27.349676 3.052777
+v -18.986849 -29.625549 -0.000001
+v -21.497648 -25.619900 5.244754
+v -19.972563 -27.523952 3.552376
+v -20.990564 -25.789961 5.822237
+v -17.791834 -27.980753 6.105555
+v -20.366079 -25.044163 5.739893
+v -20.872204 -24.874523 5.163586
+v -19.384777 -26.714935 3.552376
+v -19.900887 -26.540569 3.052777
+v -21.799891 -25.980099 0.821576
+v -19.590179 -26.976372 2.552834
+v -21.546474 -26.453060 0.210680
+v -18.398031 -28.815111 -0.000001
+v -8.919314 33.003696 0.000001
+v -10.218750 31.385260 3.552378
+v -12.144022 30.125620 5.133970
+v -12.602771 29.690268 5.816604
+v -10.725381 31.391294 3.052779
+v -10.309525 31.705101 2.552836
+v -12.690074 31.445028 0.838121
+v -12.497824 31.821417 0.000001
+v -12.762974 31.716002 0.000001
+v -13.346431 31.442221 0.090586
+v -13.686022 32.242249 0.000001
+v -21.752020 -25.152216 5.819592
+v -22.971783 -26.600327 0.123764
+v -21.125656 -24.408342 5.736479
+v -22.309025 -25.812878 0.211460
+v -13.761890 32.384933 0.000001
+v -14.678990 31.979694 0.000001
+v -18.199741 30.067417 0.123766
+v -16.127905 30.316147 2.552836
+v -15.600055 30.404465 3.052779
+v -18.517036 29.633453 0.735779
+v -16.483004 29.934992 3.052779
+v -15.982968 30.016928 3.552378
+v -13.313004 30.368336 6.105557
+v -13.635226 30.551342 5.209877
+v -13.724517 30.184591 6.105557
+v -17.722834 28.362463 5.244756
+v -17.199436 28.459862 5.819594
+v -15.130531 29.521420 3.052779
+v -20.739868 -25.871408 6.105555
+v -26.547245 -23.095831 -0.000001
+v -25.878439 -23.842817 -0.000001
+v -23.848574 -24.706753 2.552834
+v -24.095682 -24.232031 3.052777
+v -23.376341 -24.926689 3.052777
+v -23.608786 -24.476446 3.552376
+v -24.768061 -22.045752 6.105555
+v -25.072092 -21.794836 5.917337
+v -24.842535 -22.408754 5.209874
+v -24.466143 -22.380342 6.105555
+v -21.876925 -24.917305 6.105555
+v -21.457911 -26.614964 -0.000001
+v -22.155275 -27.337107 -0.000001
+v -23.074572 -26.565725 -0.000001
+v -22.681606 -24.207270 3.052777
+v -24.121176 -21.753139 5.133968
+v -24.342651 -21.160746 5.816601
+v -22.914127 -23.757107 3.552376
+v -23.400946 -23.512611 3.052777
+v -23.153915 -23.987413 2.552834
+v -25.779055 -22.409389 0.090584
+v -25.190357 -22.699642 0.838119
+v -25.374664 -22.911234 -0.000001
+v -25.182562 -23.122215 -0.000001
+v -22.484495 -25.753557 -0.000001
+v -16.685526 27.634285 5.736482
+v -15.513497 29.133980 3.552378
+v -17.207212 27.537294 5.163589
+v -16.013479 29.051947 3.052779
+v -15.658433 29.433201 2.552836
+v -14.208694 31.095196 0.000001
+v -17.972006 28.761221 0.821578
+v -17.655638 29.193762 0.211462
+v -18.041269 27.932751 5.822239
+v -19.046568 29.538435 0.123310
+v -26.434986 -22.979582 -0.000001
+v -18.500130 28.666361 0.210682
+v -17.524950 27.108364 5.739895
+v -18.196199 27.719492 6.105557
+v -20.190142 27.776543 2.552836
+v -19.679720 27.937462 3.052779
+v -22.308313 27.212364 0.000001
+v -23.074572 26.565725 0.000001
+v -20.488737 27.349676 3.052779
+v -20.004972 27.500404 3.552378
+v -21.794836 25.072092 5.917339
+v -19.091869 27.128355 3.052779
+v -19.152777 29.518549 0.000001
+v -18.135073 30.154482 0.000001
+v -17.544996 29.342312 0.000001
+v -26.540569 -19.900887 3.052777
+v -27.349676 -20.488737 3.052777
+v -26.565725 -23.074572 -0.000001
+v -29.538435 -19.046568 0.123308
+v -29.633453 -18.517036 0.735777
+v -27.776543 -20.190142 2.552834
+v -27.937462 -19.679720 3.052777
+v -27.212364 -22.308313 -0.000001
+v -28.362463 -17.722834 5.244754
+v -27.500404 -20.004972 3.552376
+v -27.932751 -18.041269 5.822237
+v -27.108364 -17.524950 5.739893
+v -27.537294 -17.207212 5.163586
+v -26.691387 -19.417187 3.552376
+v -27.128355 -19.091869 3.052777
+v -28.761221 -17.972006 0.821576
+v -26.967525 -19.602356 2.552834
+v -28.666361 -18.500130 0.210680
+v -26.401926 -21.719496 -0.000001
+v -18.681475 28.632162 0.000001
+v -19.417187 26.691387 3.552378
+v -21.160746 24.342651 5.816603
+v -19.900887 26.540569 3.052779
+v -19.602356 26.967525 2.552836
+v -21.719496 26.401926 0.000001
+v -22.409389 25.779055 0.090586
+v -22.979582 26.434986 0.000001
+v -28.459862 -17.199436 5.819592
+v -30.067417 -18.199741 0.123764
+v -27.634285 -16.685526 5.736479
+v -29.193762 -17.655638 0.211460
+v -23.095831 26.547245 0.000001
+v -23.842817 25.878439 0.000001
+v -26.600327 22.971783 0.123766
+v -24.706753 23.848574 2.552836
+v -24.232031 24.095682 3.052779
+v -26.767988 22.461010 0.735779
+v -24.926689 23.376341 3.052779
+v -24.476446 23.608786 3.552378
+v -22.045752 24.768061 6.105557
+v -22.408754 24.842535 5.209876
+v -22.380342 24.466143 6.105557
+v -25.619900 21.497648 5.244756
+v -25.152216 21.752020 5.819594
+v -21.753139 24.121176 5.133970
+v -23.512611 23.400946 3.052779
+v -22.699642 25.190357 0.838121
+v -27.719492 -18.196199 6.105555
+v -32.384933 -13.761890 -0.000001
+v -31.979694 -14.678990 -0.000001
+v -30.316147 -16.127905 2.552834
+v -30.404465 -15.600055 3.052777
+v -29.934992 -16.483004 3.052777
+v -30.016928 -15.982968 3.552376
+v -30.368336 -13.313004 6.105556
+v -30.579950 -12.980419 5.917337
+v -30.551342 -13.635226 5.209875
+v -30.184591 -13.724517 6.105556
+v -28.632162 -18.681475 -0.000001
+v -29.518549 -19.152777 -0.000001
+v -30.154482 -18.135073 -0.000001
+v -29.051947 -16.013479 3.052777
+v -29.690268 -12.602771 5.816602
+v -29.133980 -15.513497 3.552376
+v -29.521420 -15.130531 3.052777
+v -29.433201 -15.658433 2.552834
+v -31.442221 -13.346431 0.090584
+v -31.095196 -14.208694 -0.000001
+v -29.342312 -17.544996 -0.000001
+v -24.408342 21.125656 5.736481
+v -23.757107 22.914127 3.552378
+v -24.874523 20.872204 5.163588
+v -24.207270 22.681606 3.052779
+v -23.987413 23.153915 2.552836
+v -22.911234 25.374664 0.000001
+v -23.122215 25.182562 0.000001
+v -25.980099 21.799891 0.821578
+v -25.812878 22.309025 0.211462
+v -25.789961 20.990564 5.822239
+v -27.242241 22.207008 0.123310
+v -32.242249 -13.686022 -0.000001
+v -26.453060 21.546474 0.210682
+v -25.044163 20.366079 5.739895
+v -24.917305 21.876925 6.105557
+v -25.871408 20.739868 6.105557
+v -27.785389 20.177965 2.552836
+v -27.349676 20.488737 3.052779
+v -29.625549 18.986849 0.000001
+v -30.154482 18.135073 0.000001
+v -27.937462 19.679720 3.052779
+v -27.523952 19.972563 3.552378
+v -27.980753 17.791834 6.105557
+v -28.475824 17.110001 5.917339
+v -26.540569 19.900887 3.052779
+v -27.337107 22.155275 0.000001
+v -26.565725 23.074572 0.000001
+v -25.753557 22.484495 0.000001
+v -31.391294 -10.725381 3.052778
+v -32.342457 -11.034432 3.052778
+v -31.445028 -12.690074 0.838119
+v -32.395943 -13.735960 -0.000001
+v -30.125620 -12.144022 5.133968
+v -33.978436 -8.986484 0.123309
+v -33.905167 -8.453507 0.735778
+v -32.656158 -10.618542 2.552835
+v -32.651474 -10.083376 3.052778
+v -32.774143 -12.807384 -0.000001
+v -32.450962 -8.090934 5.244754
+v -32.336315 -10.527766 3.552377
+v -32.140682 -8.526572 5.822237
+v -30.840570 -12.179128 6.105556
+v -31.197092 -8.290273 5.739893
+v -31.506845 -7.855539 5.163587
+v -31.385260 -10.218750 3.552377
+v -31.700312 -9.774324 3.052778
+v -32.907200 -8.204687 0.821577
+v -31.705101 -10.309525 2.552835
+v -32.980183 -8.736276 0.210681
+v -31.821417 -12.497824 -0.000001
+v -31.716002 -12.762974 -0.000001
+v -26.614964 21.457911 0.000001
+v -26.714935 19.384777 3.552378
+v -27.532114 17.234060 5.133970
+v -27.647358 16.612207 5.816603
+v -27.128355 19.091869 3.052779
+v -26.976372 19.590179 2.552836
+v -28.749411 17.980524 0.838121
+v -28.815111 18.398031 0.000001
+v -28.967661 18.156895 0.000001
+v -29.278763 17.592455 0.090586
+v -30.023741 18.040083 0.000001
+v -32.381855 -7.563056 5.819592
+v -34.219841 -8.017640 0.123765
+v -31.437878 -7.329414 5.736480
+v -33.220810 -7.770141 0.211461
+v -30.168989 18.110926 0.000001
+v -30.672745 17.244022 0.000001
+v -32.397083 13.627512 0.123766
+v -30.867134 15.046535 2.552836
+v -30.492004 15.428246 3.052779
+v -32.398705 13.089926 0.735779
+v -30.930376 14.529451 3.052779
+v -30.573999 14.889650 3.552378
+v -28.988758 16.701969 5.209876
+v -31.009111 12.528495 5.244755
+v -30.642923 12.914937 5.819593
+v -29.593111 14.989826 3.052779
+v -31.985739 -8.739820 6.105556
+v -35.052563 -3.080840 -0.000000
+v -34.950554 -4.078280 -0.000000
+v -33.816166 -5.970344 2.552835
+v -33.737045 -5.441038 3.052778
+v -33.563396 -6.425846 3.052778
+v -33.486801 -5.924966 3.552377
+v -32.995949 -3.277087 6.105556
+v -33.094433 -2.895388 5.917338
+v -33.269569 -3.526987 5.209875
+v -32.948360 -3.725240 6.105556
+v -32.344830 -7.299592 6.105556
+v -33.003696 -8.919314 -0.000000
+v -33.992344 -9.093639 -0.000000
+v -34.282661 -7.929231 -0.000000
+v -32.578480 -6.252179 3.052778
+v -32.300617 -3.420587 5.133969
+v -32.131592 -2.811150 5.816602
+v -32.501995 -5.751318 3.552377
+v -32.752129 -5.267371 3.052778
+v -32.831360 -5.796695 2.552835
+v -34.027603 -2.977029 0.090585
+v -33.721943 -3.557876 0.838120
+v -33.995419 -3.620723 -0.000000
+v -33.964016 -3.904327 -0.000000
+v -33.327900 -7.619010 -0.000000
+v -29.741899 12.549101 5.736481
+v -29.675205 14.451280 3.552378
+v -30.106943 12.163995 5.163588
+v -30.031483 14.091032 3.052779
+v -29.968340 14.608163 2.552836
+v -29.772373 16.804882 0.000001
+v -31.445078 12.704637 0.821578
+v -31.443375 13.240525 0.211462
+v -31.014151 11.993677 5.822238
+v -32.771252 12.701804 0.123310
+v -34.893414 -3.052778 -0.000000
+v -31.816582 12.317470 0.210682
+v -30.111877 11.630219 5.739894
+v -30.458107 13.106319 6.105556
+v -32.660809 10.604228 2.552835
+v -32.342457 11.034432 3.052778
+v -34.042831 8.902768 0.000000
+v -34.282661 7.929231 0.000000
+v -32.651474 10.083376 3.052778
+v -32.348694 10.489667 3.552377
+v -32.109257 8.274511 6.105556
+v -32.369400 7.473063 5.917338
+v -31.391294 10.725381 3.052778
+v -32.845490 12.623289 0.000001
+v -32.395943 13.735960 0.000001
+v -31.441179 13.425739 0.000001
+v -33.169220 -0.500000 3.052778
+v -34.169331 -0.500000 3.052778
+v -35.055016 -3.052778 -0.000000
+v -35.092388 1.953260 0.123309
+v -34.858009 2.437509 0.735778
+v -34.339161 -0.007525 2.552835
+v -34.169331 0.500000 3.052778
+v -35.127762 -2.052778 -0.000000
+v -33.362934 2.332964 5.244755
+v -34.006924 -0.020030 3.552377
+v -33.202461 1.822765 5.822238
+v -33.094681 -2.052778 6.105556
+v -32.232033 1.755914 5.739894
+v -32.392284 2.265089 5.163587
+v -33.006924 -0.020030 3.552377
+v -33.169220 0.500000 3.052778
+v -33.831997 2.365764 0.821577
+v -33.339161 -0.007525 2.552835
+v -34.065674 1.882745 0.210681
+v -34.126007 -2.052778 -0.000000
+v -31.943193 12.183209 0.000001
+v -31.397638 10.180651 3.552377
+v -31.427654 7.255646 5.816603
+v -31.700312 9.774324 3.052778
+v -31.709753 10.295211 2.552835
+v -33.090103 8.593208 0.000000
+v -33.282124 7.683784 0.090585
+v -34.128967 7.879293 0.000000
+v -33.134087 2.813651 5.819593
+v -35.022591 2.949284 0.123765
+v -32.164112 2.744152 5.736480
+v -33.995972 2.875952 0.211461
+v -34.288998 7.901784 0.000000
+v -34.500210 6.921640 0.000000
+v -34.006023 4.771636 2.552835
+v -33.767212 5.250586 3.052778
+v -33.906384 4.260318 3.052778
+v -33.678757 4.713014 3.552377
+v -32.393688 7.079614 6.105556
+v -32.731140 6.926498 5.209876
+v -32.486916 6.638690 6.105556
+v -31.776731 6.728268 5.133969
+v -32.776833 5.111397 3.052778
+v -33.170918 7.036911 0.838120
+v -33.120998 1.572073 6.105556
+v -33.017456 3.052778 6.105556
+v -34.144600 1.715931 0.000000
+v -35.138729 1.855647 0.000000
+v -35.055016 3.052778 0.000000
+v -32.916004 4.121129 3.052778
+v -32.688488 4.573841 3.552377
+v -33.015755 4.632463 2.552835
+v -33.450432 7.061650 0.000000
+v -33.508202 6.782223 0.000000
+v -34.051121 3.052778 0.000000
+v 33.057652 -1.563170 6.105556
+v 32.927326 -3.052778 6.105556
+v 32.553478 -1.581449 6.000000
+v 32.156876 -1.525710 6.000000
+v 32.998207 -1.643951 6.000000
+v 32.882671 -2.964511 6.000000
+v 32.056259 -2.964511 6.000000
+v 6.815447 31.463631 6.000001
+v 6.732959 31.477686 6.000001
+v 6.419639 31.544041 6.000001
+v 31.236841 7.783137 6.000000
+v 31.403399 7.086511 6.000000
+v 31.211948 7.873366 6.000000
+v 31.185658 7.991463 6.000000
+v 31.195595 7.952629 6.000000
+v 32.130497 1.968738 6.000000
+v 32.409344 1.968738 6.000000
+v 32.969791 1.968738 6.000000
+v 33.014816 2.052778 6.105556
+v 16.204672 27.817602 6.000001
+v 17.273815 27.164377 6.000001
+v 17.293091 27.151314 6.000001
+v 17.268200 27.168690 6.000001
+v -31.896978 -8.724169 6.105556
+v -32.283989 -7.279823 6.105556
+v -31.062519 -8.323177 6.105556
+v -31.068701 -8.276226 6.105556
+v 24.655115 -20.688097 5.999999
+v 24.191565 -21.240536 5.999999
+v 25.118670 -20.135662 5.999999
+v -6.815447 -31.463631 5.999999
+v -8.056488 -31.166292 5.999999
+v -8.034119 -31.172758 5.999999
+v -8.027447 -31.175125 5.999999
+v 29.571230 -12.725347 6.000000
+v 30.373547 -12.986034 6.000000
+v 30.385962 -13.082878 6.105556
+v -28.481865 -16.976149 6.105555
+v -28.505627 -16.939892 6.102862
+v -3.711371 32.869709 6.105557
+v -3.787972 32.810627 6.000001
+v -3.642204 31.983942 6.000001
+v -21.770527 -24.921030 5.999999
+v -21.864771 -24.900578 6.105555
+v -21.240536 -24.191565 5.999999
+v -3.240921 32.029781 6.000001
+v -2.909521 32.059223 6.000001
+v -1.992011 32.129734 6.000001
+v -1.968738 32.130497 6.000001
+v -1.999088 32.129925 6.000001
+v 32.869709 3.711371 6.105556
+v 32.810627 3.787972 6.000000
+v 31.983942 3.642204 6.000000
+v 27.934332 -17.758106 6.105555
+v 27.843901 -17.796284 5.999999
+v 27.151314 -17.293091 5.999999
+v -33.057652 1.563170 6.105556
+v -32.156876 1.525709 6.000000
+v -32.998207 1.643950 6.000000
+v 32.029781 3.240921 6.000000
+v 32.017658 3.323715 6.000000
+v 30.997032 -11.772431 6.105556
+v 8.247075 32.024815 6.105557
+v 6.634473 32.456909 6.105557
+v 32.211418 7.349053 6.000000
+v 32.283989 7.279822 6.105556
+v 31.784304 7.210275 6.000000
+v -13.082878 -30.385962 6.105555
+v -11.783819 -30.991722 6.105555
+v -11.772430 -30.997032 6.105555
+v 16.976149 -28.481865 6.105555
+v 16.939892 -28.505627 6.102862
+v 27.857691 -16.060316 6.105556
+v 27.834940 -16.098629 6.105556
+v 27.849894 -16.079144 6.105556
+v 28.455252 -17.014158 6.105555
+v -8.276226 31.068701 6.105557
+v -7.086512 31.403399 6.000001
+v -8.354133 31.087349 6.000001
+v -8.485985 31.054476 6.000001
+v -8.219755 31.120850 6.000001
+v -30.997032 11.772430 6.105556
+v -31.014143 11.732588 6.102863
+v 27.676554 16.443857 6.000001
+v 26.912249 17.667011 6.000001
+v 31.063986 8.312038 6.105556
+v 31.062519 8.323177 6.105556
+v 31.896978 8.724169 6.105556
+v 21.705841 -25.059507 6.105555
+v 22.339066 -24.426283 6.105555
+v 25.767275 -20.762012 5.999999
+v 25.856535 -20.725506 6.105555
+v 25.628538 -20.628036 5.999999
+v -25.720798 20.919359 6.105557
+v -25.067919 21.697432 6.105557
+v -25.111076 21.649612 6.098890
+v -25.408401 21.320179 6.052961
+v -13.397630 29.387268 6.000001
+v -13.736077 30.023796 6.000001
+v -13.682834 30.106197 6.105557
+v -13.347525 29.293036 6.000001
+v 31.166292 -8.056488 6.000000
+v 31.953341 -8.312216 6.000000
+v 32.024815 -8.247075 6.105556
+v -32.029781 -3.240922 6.000000
+v -32.059223 -2.909521 6.000000
+v -32.129734 -1.992011 6.000000
+v -32.130497 -1.968738 6.000000
+v -32.129925 -1.999088 6.000000
+v -22.339066 24.426283 6.105557
+v -22.362131 24.329426 6.000001
+v -21.746296 23.734718 6.000001
+v -22.066540 24.043976 6.000001
+v -12.175508 29.802137 6.000001
+v -13.318996 29.307554 6.000001
+v -21.448591 24.007669 6.000001
+v -21.508448 23.949198 6.000001
+v 21.448591 -24.007669 5.999999
+v 20.478577 -24.836924 5.999999
+v 20.496956 -24.822628 5.999999
+v 20.692097 -24.659882 5.999999
+v 20.502792 -24.818621 5.999999
+v 30.106197 13.682834 6.105556
+v 30.811752 12.169765 6.105556
+v 21.746296 -23.734718 5.999999
+v 22.362131 -24.329426 5.999999
+v 22.066540 -24.043976 5.999999
+v 28.481865 16.976149 6.105557
+v 27.652512 18.160585 6.105557
+v -24.007669 -21.448591 5.999999
+v -23.949198 -21.508448 5.999999
+v -23.734718 -21.746296 5.999999
+v 11.801251 -29.949545 5.999999
+v 12.004091 -30.573822 5.999999
+v 12.076781 -30.797539 5.999999
+v 12.169765 -30.811752 6.105555
+v -16.343327 -28.856592 6.089059
+v -16.258484 -28.847580 5.999999
+v -15.853085 -28.016388 5.999999
+v -16.216600 -28.761703 5.999999
+v 25.580059 21.106136 6.089058
+v 25.577957 21.108957 6.088848
+v 25.410637 21.322056 6.058843
+v 25.059507 21.705841 6.105557
+v -12.725347 -29.571230 5.999999
+v -11.388057 -30.111536 5.999999
+v 27.321232 -17.021612 5.999999
+v 27.339806 -16.994806 5.999999
+v 27.367449 -16.953852 5.999999
+v 27.336357 -16.999043 5.999999
+v -2.690797 -32.075397 5.999999
+v -2.964511 -32.056259 5.999999
+v -1.525709 -32.156876 5.999999
+v 27.194736 17.817213 6.000001
+v 27.657104 18.063059 6.000001
+v -32.427197 6.543758 6.000000
+v -32.456909 6.634472 6.105556
+v -31.544041 6.419639 6.000000
+v -32.194733 6.511087 6.000000
+v 20.919359 25.720798 6.105557
+v 21.697432 25.067919 6.105557
+v 21.649612 25.111076 6.098890
+v 21.320179 25.408401 6.052961
+v -17.758106 -27.934332 6.105555
+v -17.014158 -28.455252 6.105555
+v -16.076118 -27.851145 6.105555
+v -16.079144 -27.849894 6.105555
+v -16.081711 -27.847923 6.105555
+v 32.059223 2.909520 6.000000
+v 32.106907 2.329814 6.000000
+v -16.976149 28.481865 6.105557
+v -16.939892 28.505627 6.102865
+v 18.160585 -27.652512 6.105555
+v 17.667011 -26.912249 5.999999
+v 18.063059 -27.657104 5.999999
+v 16.980471 -28.415140 5.999999
+v 16.443857 -27.676554 5.999999
+v -31.463631 6.815447 6.000000
+v -31.172758 8.034119 6.000000
+v -31.166292 8.056488 6.000000
+v -31.175125 8.027447 6.000000
+v 15.853085 28.016388 6.000001
+v 16.119156 27.863035 6.000001
+v 16.130566 27.856461 6.000001
+v 16.081711 27.847923 6.105557
+v 16.076118 27.851145 6.105557
+v -24.822628 -20.496956 5.999999
+v -24.836924 -20.478577 5.999999
+v -24.659882 -20.692097 5.999999
+v -24.818621 -20.502792 5.999999
+v 12.980045 -29.460630 5.999999
+v 13.347525 -29.293036 5.999999
+v 13.055040 -29.423515 5.999999
+v 23.734718 21.746296 6.000001
+v 24.329426 22.362131 6.000001
+v 24.043976 22.066540 6.000001
+v 24.426283 22.339066 6.105557
+v 31.054476 8.485985 6.000000
+v 31.868328 8.629489 6.000000
+v 30.111536 -11.388057 6.000000
+v 31.014143 -11.732588 6.102862
+v 30.932077 -11.788262 6.000000
+v -28.630716 16.742167 6.080725
+v -28.604868 16.782949 6.085212
+v -28.482677 16.971773 6.101828
+v -28.455252 17.014158 6.105557
+v 3.240921 -32.029781 5.999999
+v 2.909521 -32.059223 5.999999
+v 1.968738 -32.130497 5.999999
+v 1.992011 -32.129734 5.999999
+v 1.999088 -32.129925 5.999999
+v 32.060310 -2.906603 6.000000
+v -27.676554 -16.443857 5.999999
+v -28.415140 -16.980471 5.999999
+v 28.630716 -16.742167 6.080723
+v 28.604868 -16.782949 6.085210
+v 28.482677 -16.971773 6.101826
+v 20.688097 24.655115 6.000001
+v 21.240536 24.191565 6.000001
+v 20.135662 25.118670 6.000001
+v 31.463631 -6.815448 6.000000
+v 31.544041 -6.419640 6.000000
+v 31.477686 -6.732960 6.000000
+v 31.172758 -8.034119 6.000000
+v 31.175125 -8.027447 6.000000
+v -24.426283 -22.339066 6.105555
+v -25.059507 -21.705841 6.105555
+v 21.864771 24.900578 6.105557
+v 20.725506 25.856535 6.105557
+v 20.762012 25.767275 6.000001
+v 25.067919 -21.697432 6.105555
+v 25.111076 -21.649612 6.098888
+v 25.720798 -20.919359 6.105555
+v 25.408401 -21.320179 6.052959
+v 21.508448 -23.949198 5.999999
+v 17.758106 27.934332 6.105557
+v 17.014158 28.455252 6.105557
+v 16.079144 27.849894 6.105557
+v -21.697432 -25.067919 6.105555
+v -21.649612 -25.111076 6.098888
+v -20.919359 -25.720798 6.105555
+v -21.320179 -25.408401 6.052959
+v 32.427197 -6.543759 6.000000
+v 32.456909 -6.634473 6.105556
+v 7.279823 -32.283989 6.105555
+v 8.323177 -31.062519 6.105555
+v 8.724169 -31.896978 6.105555
+v 7.086512 -31.403399 5.999999
+v 7.349054 -32.211418 5.999999
+v 24.836924 20.478577 6.000001
+v 25.585114 21.022167 6.000001
+v 25.581411 21.083645 6.065204
+v 12.725347 29.571230 6.000001
+v 12.986034 30.373547 6.000001
+v 13.082878 30.385962 6.105557
+v 11.772430 30.997032 6.105557
+v 11.783819 30.991722 6.105557
+v -26.912249 -17.667011 5.999999
+v -29.571230 12.725347 6.000000
+v -30.111536 11.388057 6.000000
+v 24.007669 21.448591 6.000001
+v 24.822628 20.496956 6.000001
+v 24.659882 20.692097 6.000001
+v 24.818621 20.502792 6.000001
+v 11.388057 30.111536 6.000001
+v 11.732588 31.014143 6.102864
+v 11.737082 31.007517 6.094560
+v 11.788262 30.932077 6.000001
+v 8.056488 31.166292 6.000001
+v 8.312216 31.953341 6.000001
+v -8.247075 -32.024815 6.105555
+v -6.634473 -32.456909 6.105555
+v 13.682834 -30.106197 6.105555
+v 13.736077 -30.023796 5.999999
+v 13.397630 -29.387268 5.999999
+v 28.642202 -16.722727 6.077199
+v 28.727320 -16.585726 6.059285
+v 28.856592 -16.343327 6.089060
+v -31.007517 11.737082 6.094559
+v -30.808792 11.728131 6.000000
+v -30.932077 11.788262 6.000000
+v 23.949198 21.508448 6.000001
+v -31.953341 8.312216 6.000000
+v -32.024815 8.247075 6.105556
+v -31.268143 8.089581 6.000000
+v -3.052778 -32.927326 6.105555
+v -1.563170 -33.057652 6.105555
+v -27.934332 17.758106 6.105557
+v -27.843901 17.796284 6.000001
+v -27.151314 17.293091 6.000001
+v 6.543759 32.427197 6.000001
+v 16.343327 28.856592 6.089062
+v 16.216600 28.761703 6.000001
+v 16.258484 28.847580 6.000001
+v -2.964511 -32.125702 5.999999
+v -2.964510 -32.882671 5.999999
+v -29.949545 -11.801251 6.000000
+v -29.829792 -12.098289 6.000000
+v -29.819021 -12.129071 6.000000
+v -29.802137 -12.175508 6.000000
+v -29.820421 -12.123791 6.000000
+v 2.964511 32.056259 6.000001
+v 2.964510 32.882671 6.000001
+v 3.052778 32.927326 6.105557
+v -27.321232 17.021612 6.000001
+v -27.339806 16.994806 6.000001
+v -27.367449 16.953852 6.000001
+v -27.336357 16.999043 6.000001
+v 8.034119 31.172758 6.000001
+v 8.027447 31.175125 6.000001
+v 1.563170 33.057652 6.105557
+v 1.581448 32.553478 6.000001
+v 1.525709 32.156876 6.000001
+v 1.643951 32.998207 6.000001
+v -1.968738 32.409344 6.000001
+v -1.968738 32.969791 6.000001
+v -2.052778 33.014816 6.105557
+v 17.555017 27.511827 6.000001
+v 17.796284 27.843901 6.000001
+v -16.443857 27.676554 6.000001
+v -16.980471 28.415140 6.000001
+v -17.293091 -27.151314 5.999999
+v -17.796284 -27.843901 5.999999
+v -6.419639 -31.544041 5.999999
+v -6.543759 -32.427197 5.999999
+v 21.022167 -25.585114 5.999999
+v 21.083645 -25.581411 6.065202
+v 21.106136 -25.580059 6.089056
+v 20.966276 -25.508186 5.999999
+v 1.968738 -32.409344 5.999999
+v 1.968738 -32.969791 5.999999
+v 2.052778 -33.014816 6.105555
+v 31.097437 8.324454 6.000000
+v 31.070236 8.426724 6.000000
+v 31.093481 8.339328 6.000000
+v 29.829792 12.098289 6.000000
+v 29.949545 11.801251 6.000000
+v 29.802137 12.175508 6.000000
+v -11.737082 -31.007517 6.094557
+v -11.788262 -30.932077 5.999999
+v -11.732588 -31.014143 6.102861
+v -11.801251 29.949545 6.000001
+v -12.098289 29.829792 6.000001
+v -12.129071 29.819021 6.000001
+v -12.123791 29.820421 6.000001
+v -12.986034 -30.373547 5.999999
+v -7.349054 32.211418 6.000001
+v -7.279823 32.283989 6.105557
+v 16.742167 28.630716 6.080725
+v 16.782949 28.604868 6.085212
+v 16.971773 28.482677 6.101828
+v -31.403399 -7.086512 6.000000
+v -31.087349 -8.354133 6.000000
+v -31.054476 -8.485985 6.000000
+v -31.120850 -8.219755 6.000000
+v -24.655115 20.688097 6.000001
+v -24.191565 21.240536 6.000001
+v -25.118670 20.135662 6.000001
+v -8.724169 31.896978 6.105557
+v -8.323177 31.062519 6.105557
+v -12.004091 30.573822 6.000001
+v -12.076781 30.797539 6.000001
+v -12.169765 30.811752 6.105557
+v 21.770527 24.921030 6.000001
+v 16.585726 28.727320 6.059287
+v 16.722727 28.642202 6.077201
+v -20.725506 -25.856535 6.105555
+v -20.135662 -25.118670 5.999999
+v -20.628038 -25.628538 5.999999
+v -20.762012 -25.767275 5.999999
+v -21.705841 25.059507 6.105557
+v -16.204672 -27.817602 5.999999
+v -16.119156 -27.863035 5.999999
+v -16.130566 -27.856461 5.999999
+v -16.070221 -27.891239 5.999999
+v -27.857691 16.060316 6.105556
+v -27.874302 16.079222 6.037034
+v -27.834940 16.098629 6.105556
+v -27.864285 16.102749 6.027304
+v -28.001841 15.881599 6.000000
+v -27.870123 16.109921 6.000000
+v -27.886694 16.081194 6.000000
+v -28.016388 15.853085 6.000000
+v -6.732959 -31.477686 5.999999
+v 11.823150 -29.941628 5.999999
+v 11.829938 -29.939621 5.999999
+v 28.505627 16.939892 6.102864
+v 28.415140 16.980471 6.000001
+v 28.304169 16.899847 6.000001
+v -32.017658 -3.323716 6.000000
+v -31.983942 -3.642205 6.000000
+v 3.711371 -32.869709 6.105555
+v 3.787972 -32.810627 5.999999
+v 3.642204 -31.983942 5.999999
+v -24.329426 -22.362131 5.999999
+v -24.043976 -22.066540 5.999999
+v -18.160585 27.652512 6.105557
+v -25.577957 -21.108957 6.088846
+v -25.580059 -21.106136 6.089056
+v -25.410637 -21.322056 6.058841
+v 28.854191 -16.320713 6.065322
+v 28.847580 -16.258484 6.000000
+v 28.761703 -16.216600 6.000000
+v 28.016388 -15.853085 6.000000
+v 21.108957 -25.577957 6.088846
+v 21.322056 -25.410637 6.058841
+v 2.906603 32.060310 6.000001
+v -17.667011 26.912249 6.000001
+v -18.063059 27.657104 6.000001
+v -25.585114 -21.022167 5.999999
+v -25.581411 -21.083645 6.065202
+v -25.508186 -20.966276 5.999999
+v -16.722727 -28.642202 6.077199
+v -16.585726 -28.727320 6.059284
+v -16.742167 -28.630716 6.080722
+v -27.652512 -18.160585 6.105555
+v -27.657104 -18.063059 5.999999
+v 3.323716 -32.017658 5.999999
+v 27.874302 -16.079222 6.037033
+v 27.864285 -16.102749 6.027303
+v 27.870123 -16.109921 6.000000
+v 27.886694 -16.081194 6.000000
+v 28.001841 -15.881599 6.000000
+v -31.477686 6.732959 6.000000
+v -29.307554 -13.318996 6.000000
+v -29.293036 -13.347525 6.000000
+v -30.811752 -12.169765 6.105556
+v -30.106197 -13.682834 6.105556
+v -30.023796 -13.736077 6.000000
+v -29.387268 -13.397630 6.000000
+v -21.108957 25.577957 6.088848
+v -21.106136 25.580059 6.089058
+v -21.322056 25.410637 6.058843
+v 30.573822 12.004091 6.000000
+v 30.797539 12.076781 6.000000
+v -20.688097 -24.655115 5.999999
+v 8.219755 -31.120850 5.999999
+v 8.485985 -31.054476 5.999999
+v 8.354133 -31.087349 5.999999
+v -17.273815 -27.164377 5.999999
+v -17.268200 -27.168690 5.999999
+v -24.900578 21.864771 6.105557
+v -25.856535 20.725506 6.105557
+v -25.628538 20.628036 6.000001
+v -25.767275 20.762012 6.000001
+v -1.643951 -32.998207 5.999999
+v -30.573822 -12.004091 6.000000
+v -30.797539 -12.076781 6.000000
+v 8.629489 -31.868328 5.999999
+v 8.498042 -31.122858 5.999999
+v 24.921030 -21.770527 5.999999
+v 24.900578 -21.864771 6.105555
+v -27.849894 16.079144 6.105556
+v -31.122858 -8.498042 6.000000
+v -31.868328 -8.629488 6.000000
+v -32.869709 -3.711372 6.105556
+v -32.810627 -3.787972 6.000000
+v -32.211418 -7.349054 6.000000
+v -29.875513 12.824214 6.000000
+v -30.373547 12.986034 6.000000
+v -30.385962 13.082878 6.105556
+v -8.312216 -31.953341 5.999999
+v -16.782949 -28.604868 6.085209
+v -16.971773 -28.482677 6.101825
+v -20.496956 24.822628 6.000001
+v -20.478577 24.836924 6.000001
+v -20.692097 24.659882 6.000001
+v -20.502792 24.818621 6.000001
+v -32.075397 2.690797 6.000000
+v -32.056259 2.964510 6.000000
+v 29.307554 13.318996 6.000000
+v 29.293036 13.347525 6.000000
+v -30.991722 11.783819 6.105556
+v 29.387268 13.397630 6.000000
+v 30.023796 13.736077 6.000000
+v -33.014816 -2.052778 6.105556
+v -20.966276 25.508186 6.000001
+v -21.022167 25.585114 6.000001
+v -21.083645 25.581411 6.065204
+v -32.969791 -1.968738 6.000000
+v -32.409344 -1.968738 6.000000
+v -28.856592 16.343327 6.089061
+v -28.847580 16.258484 6.000000
+v -8.498042 31.122858 6.000001
+v -8.629488 31.868328 6.000001
+v -24.921030 21.770527 6.000001
+v -28.727320 16.585726 6.059287
+v -28.642202 16.722727 6.077201
+v -3.323716 32.017658 6.000001
+v -32.927326 3.052778 6.105556
+v -32.125702 2.964510 6.000000
+v -32.882671 2.964510 6.000000
+v 0.000000 32.998726 3.577050
+v 0.005188 32.995922 3.583441
+v -0.003427 32.999680 3.572829
+v -0.002721 -33.341290 2.545359
+v 0.001583 -33.340393 2.548499
+v 0.000413 -33.336781 2.559839
+v -0.000462 -33.336487 2.560701
+v 0.001310 -33.341549 2.545133
+v -0.002002 -33.342823 2.541029
+v 32.993473 8.839745 0.091586
+v 33.024342 8.836506 0.000000
+v 32.993694 8.841460 0.089612
+v 33.017162 8.855669 0.007325
+v 33.019249 8.856934 0.000000
+v 32.898495 8.802530 0.392080
+v 32.924362 8.805147 0.313214
+v 32.871643 8.824306 0.451704
+v 32.896606 8.839395 0.364198
+v 32.457184 8.789964 1.653533
+v 32.567665 8.646273 1.449280
+v -16.958265 -29.370661 0.820410
+v -16.957306 -29.370914 0.821574
+v -16.956348 -29.370939 0.822617
+v 16.234520 28.122192 5.161725
+v 16.216204 28.088137 5.278471
+v 16.236792 28.119339 5.165662
+v 16.216125 28.086281 5.283422
+v 16.956348 29.370939 0.822619
+v 17.090052 29.606749 0.006257
+v 17.095329 29.603302 0.007143
+v 16.958265 29.370661 0.820412
+v 17.089046 29.608017 0.003868
+v 17.087418 29.610071 0.000001
+v 17.101534 29.601509 0.000001
+v -28.418062 -16.513060 3.936155
+v -28.505337 -16.457563 3.828560
+v -28.564894 -16.397337 3.731531
+v -31.068699 -8.276232 6.105556
+v -31.056959 -8.336598 6.105556
+v 29.375141 -16.794493 0.998788
+v 29.342411 -17.065477 0.690367
+v 29.370914 -16.957304 0.821575
+v 32.613373 -8.567614 1.342927
+v 32.527340 -8.715674 1.543116
+v 32.396549 -8.854167 1.748959
+v 31.576435 -8.630017 4.308462
+v 31.577707 -8.461222 4.500909
+v 31.539131 -8.285417 4.686602
+v -8.452016 -31.209370 5.544241
+v -8.292224 -31.191967 5.728365
+v -8.630017 -31.576435 4.308461
+v -8.447924 -31.301538 5.290596
+v -8.327768 -31.265415 5.493316
+v -8.285417 -31.539131 4.686602
+v -8.922299 -32.347366 1.807728
+v -8.522811 -32.648876 1.253856
+v -8.567613 -32.613373 1.342925
+v -8.854167 -32.396549 1.748958
+v -8.770087 -32.901524 0.395819
+v -8.779748 -32.938816 0.279790
+v -8.870949 -32.864853 0.416582
+v -8.855641 -32.810307 0.587271
+v 32.938816 -8.779748 0.279791
+v 32.914822 -8.819500 0.336235
+v 32.864853 -8.870949 0.416583
+v 28.418062 16.513060 3.936157
+v 28.564894 16.397337 3.731532
+v 28.505337 16.457563 3.828562
+v -0.001075 33.012840 3.534168
+v 0.001201 33.013550 3.531982
+v 0.000462 33.336487 2.560704
+v -0.000413 33.336781 2.559842
+v -16.206669 28.247019 4.844119
+v -16.270582 28.181475 4.953648
+v -16.317417 28.105307 5.050501
+v -32.924362 -8.805147 0.313213
+v -32.915627 -8.819716 0.333726
+v -32.896606 -8.839395 0.364197
+v 31.577557 8.481297 4.478021
+v 31.577707 8.461222 4.500909
+v 31.574081 8.444697 4.518363
+v 27.857689 -16.060318 6.105556
+v 27.834940 -16.098627 6.105556
+v 27.849892 -16.079144 6.105556
+v -32.613373 8.567613 1.342928
+v -32.396549 8.854167 1.748960
+v -32.527340 8.715674 1.543116
+v -8.356006 31.058943 6.077459
+v -8.346292 31.156271 5.814347
+v -8.349722 31.153770 5.818905
+v -8.331332 31.482367 4.839198
+v -8.378650 31.559589 4.588127
+v -8.551594 31.577026 4.397876
+v -8.569499 31.470112 4.676818
+v -8.378779 31.205729 5.639500
+v -8.349133 31.202835 5.673129
+v -8.301598 31.100445 6.000001
+v -8.276232 31.068699 6.105557
+v -8.294640 31.091738 6.028954
+v 28.231052 16.471296 4.463519
+v 28.440899 16.248695 4.251762
+v 28.247019 16.206669 4.844118
+v 28.105307 16.317417 5.050500
+v 31.063984 8.312042 6.105556
+v 31.061243 8.326260 6.105556
+v -32.938816 8.779748 0.279792
+v -32.914822 8.819500 0.336236
+v -32.864853 8.870949 0.416584
+v 32.915627 8.819716 0.333726
+v 32.993690 8.840633 0.090585
+v 31.202835 8.349133 5.673128
+v 31.205673 8.361535 5.659679
+v 31.205729 8.378779 5.639499
+v 31.209370 -8.452016 5.544242
+v 31.208433 -8.362275 5.651079
+v 31.191967 -8.292224 5.728366
+v 23.464962 23.483528 2.973550
+v 23.479191 23.479191 2.957707
+v 23.496426 23.469233 2.934608
+v -33.012840 -0.001076 3.534167
+v -33.013550 0.001200 3.531981
+v -33.336487 0.000462 2.560703
+v -33.336781 -0.000413 2.559841
+v -23.253141 23.119791 4.165822
+v -23.168081 23.168081 4.281390
+v -23.041174 23.206291 4.423834
+v -23.446449 23.428028 3.131038
+v -23.441616 23.421814 3.154153
+v -23.403141 23.433125 3.209091
+v -23.414307 23.441185 3.169058
+v -23.488697 23.510084 2.865770
+v -23.469233 23.496426 2.934608
+v -23.495363 23.479656 2.917910
+v -23.483528 23.464962 2.973550
+v -23.775299 23.651264 1.926975
+v -23.693260 23.843620 1.684916
+v -23.440800 23.420591 3.158383
+v -23.400635 23.431578 3.217447
+v -23.287868 23.130121 4.063136
+v -23.034935 23.246546 4.338448
+v -33.342823 0.002002 2.541030
+v -33.342262 -0.000000 2.543511
+v -33.341549 -0.001310 2.545135
+v 29.115606 16.750626 1.777343
+v 29.126413 16.875767 1.560819
+v 29.295916 16.803562 1.210373
+v 29.272404 16.999676 0.980462
+v 28.961197 16.624832 2.356310
+v 28.933344 16.812471 2.142547
+v 28.958246 16.719051 2.255169
+v 29.294006 16.912903 1.088752
+v 23.041174 -23.206291 4.423832
+v 23.253139 -23.119791 4.165820
+v 23.168081 -23.168081 4.281388
+v 23.693260 -23.843620 1.684914
+v 23.747229 -23.747229 1.817279
+v 23.775299 -23.651266 1.926972
+v -23.130121 -23.287867 4.063135
+v -23.119791 -23.253139 4.165821
+v -23.206291 -23.041174 4.423832
+v -23.246546 -23.034935 4.338446
+v -23.651266 -23.775299 1.926972
+v -23.618338 -23.762354 2.018964
+v -23.843620 -23.693260 1.684914
+v -23.840755 -23.654570 1.763284
+v -23.472525 -23.490801 2.942064
+v -23.464962 -23.483528 2.973548
+v -23.506895 -23.480330 2.888903
+v -23.496426 -23.469233 2.934606
+v -23.428028 -23.446449 3.131036
+v -23.421814 -23.441616 3.154151
+v -23.433125 -23.403141 3.209089
+v -23.441185 -23.414307 3.169056
+v -23.134768 -23.291327 4.046223
+v -23.252325 -23.043154 4.309350
+v -23.681803 -23.493198 2.444052
+v -23.432680 -23.578840 2.803721
+v -8.461222 31.577707 4.500911
+v -0.005188 -32.995922 3.583438
+v 0.003427 -32.999680 3.572826
+v 0.001075 -33.012840 3.534166
+v -0.001201 -33.013550 3.531979
+v -8.819500 -32.914822 0.336234
+v -16.081701 -27.847929 6.105555
+v -16.079144 -27.849892 6.105555
+v 23.428028 23.446449 3.131038
+v 23.434809 23.434809 3.146541
+v 23.441185 23.414307 3.169058
+v 16.513060 -28.418062 3.936155
+v 16.457563 -28.505337 3.828560
+v 16.397337 -28.564894 3.731530
+v -31.191967 8.292224 5.728367
+v -31.209370 8.452016 5.544243
+v -31.576435 8.630017 4.308463
+v -31.301538 8.447924 5.290598
+v -31.539131 8.285417 4.686604
+v -31.265415 8.327768 5.493317
+v -32.648876 8.522811 1.253858
+v -32.347366 8.922299 1.807730
+v -32.901524 8.770088 0.395821
+v -32.810307 8.855641 0.587273
+v 16.081701 27.847929 6.105557
+v 16.070215 27.891241 6.000001
+v 16.075785 27.853416 6.099576
+v 16.065851 27.920950 5.921777
+v 16.119154 27.863037 5.999999
+v 16.076696 27.928080 5.889195
+v 16.119154 27.863037 5.999998
+v 16.119154 27.863037 5.999998
+v 16.071173 27.929892 5.890532
+v -23.479191 23.479191 2.957707
+v 23.119791 23.253139 4.165822
+v 23.168081 23.168081 4.281390
+v 23.206291 23.041174 4.423834
+v -8.839395 32.896606 0.364199
+v -8.819716 32.915627 0.333727
+v -8.805147 32.924362 0.313215
+v 23.843620 23.693260 1.684916
+v 23.747229 23.747229 1.817281
+v 23.651264 23.775299 1.926975
+v 31.155291 8.348036 5.816602
+v 31.153770 8.349722 5.818904
+v 31.156271 8.346292 5.814346
+v 16.803560 -29.295916 1.210371
+v 16.999676 -29.272404 0.980460
+v 16.912903 -29.294006 1.088750
+v 16.957306 29.370914 0.821577
+v -16.999676 29.272404 0.980463
+v -16.875769 29.126413 1.560819
+v -16.750626 29.115606 1.777344
+v -16.803560 29.295916 1.210373
+v -16.624832 28.961197 2.356310
+v -16.812471 28.933344 2.142547
+v 31.301538 -8.447924 5.290597
+v 31.265415 -8.327768 5.493316
+v 32.347366 -8.922299 1.807729
+v 32.648876 -8.522812 1.253858
+v 32.901520 -8.770088 0.395820
+v 32.810307 -8.855641 0.587272
+v 32.527340 8.715674 1.543116
+v 8.551594 -31.577026 4.397873
+v 8.461222 -31.577707 4.500908
+v 8.378650 -31.559589 4.588124
+v -28.220474 16.134340 5.002526
+v -28.121042 16.235691 5.163588
+v -28.023624 16.298473 5.282138
+v 8.378779 -31.205729 5.639497
+v 8.361535 -31.205673 5.659677
+v 8.349133 -31.202835 5.673126
+v 16.235691 28.121044 5.163587
+v 0.000000 -33.342262 2.543510
+v 8.805147 -32.924362 0.313212
+v 8.819716 -32.915627 0.333724
+v 8.839395 -32.896606 0.364196
+v 23.762354 -23.618336 2.018964
+v 23.654570 -23.840755 1.763284
+v 23.490801 -23.472525 2.942065
+v 23.483528 -23.464962 2.973548
+v 23.480330 -23.506895 2.888903
+v 23.469233 -23.496426 2.934606
+v 23.403141 -23.433125 3.209089
+v 23.441616 -23.421814 3.154151
+v 23.414307 -23.441185 3.169056
+v 23.446449 -23.428028 3.131036
+v 23.195976 -23.359022 3.770179
+v 23.429825 -23.298418 3.410486
+v 23.398354 -23.422537 3.243425
+v 23.433105 -23.415970 3.185438
+v 16.079144 27.849892 6.105557
+v 8.336682 -31.056925 6.105555
+v 8.646273 -32.567665 1.449279
+v 8.789963 -32.457184 1.653531
+v 8.715674 -32.527340 1.543115
+v -33.340393 -0.001583 2.548500
+v -33.341290 0.002721 2.545361
+v -29.272404 -16.999676 0.980461
+v -29.126413 -16.875769 1.560817
+v -29.115606 -16.750626 1.777342
+v -29.295916 -16.803562 1.210371
+v -28.961197 -16.624832 2.356308
+v -28.933344 -16.812471 2.142545
+v -28.231052 -16.471296 4.463518
+v -28.440899 -16.248695 4.251761
+v -28.247019 -16.206669 4.844117
+v -28.105307 -16.317417 5.050499
+v 16.471296 -28.231052 4.463517
+v 16.248695 -28.440899 4.251760
+v 16.206669 -28.247019 4.844116
+v 16.317417 -28.105307 5.050498
+v 8.452016 31.209370 5.544244
+v 8.362275 31.208433 5.651081
+v 8.292224 31.191967 5.728368
+v 8.630017 31.576435 4.308464
+v 8.461222 31.577707 4.500911
+v 8.285417 31.539131 4.686604
+v 8.567613 32.613373 1.342929
+v 8.715674 32.527340 1.543117
+v 8.854167 32.396549 1.748961
+v -23.747229 23.747229 1.817281
+v 0.000000 -32.998726 3.577048
+v 23.433125 23.403141 3.209091
+v 23.421814 23.441616 3.154153
+v 23.479656 23.495363 2.917910
+v 23.510084 23.488697 2.865770
+v 23.431578 23.400635 3.217447
+v 23.420591 23.440800 3.158383
+v 23.130121 23.287868 4.063136
+v 23.246548 23.034935 4.338448
+v 16.270582 -28.181475 4.953645
+v 23.479191 -23.479191 2.957705
+v -31.208433 8.362275 5.651080
+v -32.993473 -8.839745 0.091586
+v -32.993690 -8.840633 0.090584
+v -32.993694 -8.841460 0.089611
+v -8.715674 -32.527340 1.543115
+v -8.461222 -31.577707 4.500908
+v 8.447924 31.301538 5.290599
+v 8.327768 31.265415 5.493318
+v 8.522811 32.648876 1.253860
+v 8.922299 32.347366 1.807731
+v 8.770088 32.901524 0.395822
+v 8.779748 32.938816 0.279793
+v 8.855641 32.810307 0.587274
+v 8.870949 32.864853 0.416585
+v -32.656982 -8.642808 1.181937
+v -32.567665 -8.646273 1.449280
+v -32.534092 -8.857985 1.358923
+v -32.457184 -8.789964 1.653532
+v -33.017162 -8.855669 0.007325
+v -33.019249 -8.856934 -0.000000
+v -33.024342 -8.836506 -0.000000
+v -33.021191 -8.836836 0.009351
+v 31.571060 8.438583 4.529875
+v 31.574804 8.490840 4.474655
+v 31.202734 8.338906 5.677482
+v 31.212276 8.421155 5.571931
+v 31.566483 8.418887 4.551452
+v 31.571413 8.562171 4.401329
+v 31.073523 8.335887 6.059946
+v -0.001310 33.341549 2.545136
+v 0.000000 33.342262 2.543513
+v 0.002002 33.342823 2.541032
+v -23.434809 23.434809 3.146541
+v -8.361535 31.205673 5.659680
+v -16.236792 -28.119339 5.165659
+v -16.235691 -28.121044 5.163584
+v -16.234520 -28.122192 5.161722
+v -8.642808 32.656982 1.181939
+v -8.646273 32.567665 1.449281
+v -8.857985 32.534092 1.358925
+v -8.789963 32.457184 1.653534
+v -8.856934 33.019249 0.000001
+v -8.836506 33.024342 0.000001
+v -8.836836 33.021191 0.009352
+v -8.841460 32.993694 0.089613
+v -8.839745 32.993473 0.091587
+v -8.715674 32.527340 1.543117
+v -31.059111 -8.355994 6.077002
+v -31.156271 -8.346292 5.814345
+v -31.153770 -8.349722 5.818903
+v -31.482367 -8.331332 4.839196
+v -31.559589 -8.378650 4.588125
+v -31.577026 -8.551594 4.397874
+v -31.470112 -8.569500 4.676816
+v -31.205729 -8.378779 5.639498
+v -31.202835 -8.349133 5.673127
+v -31.100445 -8.301598 6.000000
+v -31.091738 -8.294640 6.028952
+v -8.336741 31.056900 6.105557
+v -8.840633 32.993690 0.090586
+v -23.747229 -23.747229 1.817279
+v -16.216204 -28.088137 5.278469
+v -16.216125 -28.086281 5.283420
+v -16.119154 -27.863037 5.999999
+v -16.070223 -27.891237 5.999999
+v -16.076696 -27.928080 5.889193
+v -16.119154 -27.863037 5.999995
+v -29.623487 17.055029 0.000001
+v -29.606934 17.068846 0.030361
+v -29.576092 17.134659 0.000001
+v -29.581617 17.113441 0.025893
+v -29.583488 17.106255 0.034664
+v -27.834942 16.098627 6.105553
+v -27.834940 16.098627 6.105556
+v -27.874298 16.079224 6.037041
+v -27.857689 16.060318 6.105556
+v -27.834942 16.098629 6.105552
+v -27.886692 16.081194 6.000004
+v -27.886692 16.081196 6.000002
+v -27.864290 16.102743 6.027297
+v -29.386606 16.737972 1.032286
+v -29.341803 17.092960 0.641063
+v -29.342411 17.065477 0.690368
+v -29.375141 16.794493 0.998791
+v -27.892050 16.077429 5.989359
+v -27.904545 16.078291 5.953326
+v -27.870129 16.109915 5.999992
+v -27.954571 16.284834 5.473579
+v -28.176268 16.048588 5.226041
+v 8.839745 -32.993473 0.091584
+v 8.840633 -32.993690 0.090583
+v 8.841460 -32.993694 0.089610
+v -16.397337 28.564894 3.731532
+v -16.457563 28.505337 3.828562
+v -16.513060 28.418062 3.936157
+v -16.719051 28.958246 2.255170
+v 23.434809 -23.434809 3.146539
+v -16.912903 29.294006 1.088753
+v -23.168081 -23.168081 4.281388
+v -23.479191 -23.479191 2.957705
+v -23.434809 -23.434809 3.146539
+v -16.471296 28.231052 4.463520
+v -16.248695 28.440899 4.251763
+v -28.958246 -16.719051 2.255168
+v 27.864288 -16.102741 6.027306
+v 27.874300 -16.079227 6.037031
+v 28.220474 -16.134340 5.002526
+v 28.023624 -16.298473 5.282137
+v 29.581617 -17.113441 0.025892
+v 29.576092 -17.134659 -0.000001
+v 29.606934 -17.068846 0.030360
+v 29.623487 -17.055029 -0.000001
+v 29.583488 -17.106255 0.034662
+v 29.341803 -17.092960 0.641062
+v 29.386606 -16.737972 1.032283
+v 29.388098 -17.119282 0.480985
+v 29.465448 -16.784531 0.757178
+v -29.294006 -16.912903 1.088751
+v -32.995922 0.005188 3.583439
+v -32.998726 -0.000000 3.577049
+v -32.999680 -0.003427 3.572828
+v 8.346292 -31.156271 5.814344
+v 8.349722 -31.153770 5.818902
+v 8.356001 -31.059011 6.077270
+v 8.331332 -31.482367 4.839195
+v 8.569499 -31.470112 4.676816
+v 8.301598 -31.100445 5.999999
+v -17.090052 -29.606749 0.006255
+v -17.095329 -29.603302 0.007141
+v -17.101534 -29.601509 -0.000001
+v -17.097425 -29.602697 0.004729
+v -17.087418 -29.610071 -0.000001
+v 28.181475 16.270582 4.953647
+v 8.348036 -31.155291 5.816600
+v -32.527340 -8.715674 1.543116
+v -31.577707 -8.461222 4.500909
+v -27.849892 16.079144 6.105556
+v -28.181475 -16.270582 4.953646
+v -29.370914 16.957304 0.821577
+v 8.642808 -32.656982 1.181936
+v 8.857985 -32.534092 1.358922
+v 8.836506 -33.024342 -0.000001
+v 8.836836 -33.021191 0.009349
+v 8.856934 -33.019249 -0.000001
+v -0.001583 33.340393 2.548502
+v 0.002721 33.341290 2.545362
+v 16.624832 -28.961197 2.356308
+v 16.812471 -28.933344 2.142545
+v 16.719051 -28.958246 2.255167
+v -31.155291 -8.348036 5.816601
+v -8.362275 -31.208433 5.651078
+v 28.121042 -16.235691 5.163587
+v -31.577707 8.461222 4.500910
+v -31.205673 -8.361535 5.659678
+v -8.348036 31.155291 5.816603
+v 16.750626 -29.115606 1.777341
+v 16.875769 -29.126413 1.560817
+v 8.819500 32.914822 0.336237
+v 16.081253 27.886669 6.000001
+v -8.324093 31.097485 6.000001
+v -31.097485 -8.324093 6.000000
+v 8.324093 -31.097485 5.999999
+v -8.339724 31.081808 6.032264
+v -31.081987 -8.339632 6.031866
+v 8.313496 -31.079536 6.058191
+v 8.339686 -31.081882 6.032098
+v 29.709480 18.847223 0.000001
+v 14.178293 -32.200939 -0.000001
+v 4.070985 -34.909184 -0.000002
+v 26.297338 -22.879576 -0.000001
+v 1.828337 34.944408 0.000002
+v 34.977299 3.816775 0.000000
+v 30.153938 -18.134678 -0.000001
+v 34.909184 4.070985 0.000000
+v 27.176619 -22.000296 -0.000001
+v -32.760918 -12.803086 -0.000001
+v -26.514599 21.577520 0.000001
+v -12.630868 32.230885 0.000001
+v -33.648815 8.774744 0.000000
+v 32.325584 13.713099 0.000001
+v 33.582722 9.021412 0.000000
+v 29.051224 -18.569576 -0.000001
+v 29.323774 -18.767595 -0.000001
+v 13.728185 -32.321545 -0.000001
+v 32.321545 13.728185 0.000001
+v -13.986683 31.190529 0.000001
+v 12.522712 -31.898014 -0.000001
+v 12.745849 -32.584759 -0.000001
+v 31.176914 14.252145 0.000001
+v 31.638048 14.497334 0.000001
+v 23.565895 -25.611019 -0.000001
+v 34.473953 -7.043487 -0.000000
+v 28.875216 -18.303024 -0.000001
+v 22.163654 -27.013260 -0.000001
+v 32.200939 14.178293 0.000001
+v 25.611019 23.565895 0.000001
+v 13.472495 31.585079 0.000001
+v 22.879576 26.297338 0.000001
+v 13.713099 -32.325584 -0.000001
+v 29.913349 -18.523386 -0.000001
+v 30.051022 -18.301682 -0.000001
+v 22.000296 27.176619 0.000001
+v 3.816775 -34.977299 -0.000002
+v 27.013260 22.163654 0.000001
+v -34.090584 2.488398 0.000000
+v -34.134113 1.865886 0.000000
+v -23.565895 25.611019 0.000001
+v -7.043487 -34.473953 -0.000002
+v 30.300497 -17.884617 -0.000001
+v -6.814305 -33.736481 -0.000001
+v -6.915583 -34.457115 -0.000002
+v 3.052778 34.237476 0.000001
+v -7.897556 -34.185177 -0.000001
+v -22.163654 27.013260 0.000001
+v 32.584759 12.745849 0.000001
+v 31.898014 12.522712 0.000001
+v -34.158230 6.873578 0.000000
+v -32.249062 -13.689646 -0.000001
+v 12.407224 32.402493 0.000001
+v -32.325584 13.713099 0.000001
+v 34.457115 -6.915583 -0.000000
+v 7.807492 -33.907990 -0.000001
+v 9.021412 -33.582722 -0.000001
+v -29.194424 -18.980436 -0.000001
+v 29.214794 -17.741682 -0.000001
+v -7.886552 -34.180618 -0.000001
+v -31.748758 -14.556199 -0.000001
+v 14.497334 -31.638048 -0.000001
+v -29.821972 -17.893490 -0.000001
+v -26.297338 22.879576 0.000001
+v -32.249748 -13.688458 -0.000001
+v -34.141750 -8.494395 -0.000000
+v -26.639544 21.481647 0.000001
+v -27.176619 22.000296 0.000001
+v 33.907990 7.807492 0.000000
+v -33.517254 -7.680535 -0.000000
+v -8.056948 -34.251198 -0.000001
+v 31.176914 14.018390 0.000001
+v -32.643940 12.524986 0.000001
+v 29.342438 19.059135 0.000001
+v -34.630878 1.784273 0.000000
+v -34.266884 1.733117 0.000000
+vn 0.9416 0.1242 0.3130
+vn 0.8775 0.3632 0.3130
+vn 0.5782 0.7535 0.3129
+vn 0.3633 0.8775 0.3130
+vn -0.1240 0.9416 0.3130
+vn -0.3635 0.8775 0.3130
+vn -0.7535 0.5782 0.3130
+vn -0.8775 0.3635 0.3129
+vn -0.9416 -0.1240 0.3130
+vn -0.8775 -0.3634 0.3130
+vn -0.5782 -0.7535 0.3129
+vn -0.3634 -0.8775 0.3130
+vn 0.1240 -0.9416 0.3130
+vn 0.3634 -0.8775 0.3130
+vn 0.7535 -0.5782 0.3130
+vn 0.8775 -0.3635 0.3129
+vn -0.9417 -0.1238 -0.3130
+vn -0.9416 -0.1241 -0.3130
+vn -0.9416 -0.1240 -0.3130
+vn -0.8775 -0.3634 -0.3130
+vn -0.8776 -0.3632 -0.3130
+vn -0.8775 -0.3635 -0.3130
+vn -0.8776 -0.3631 -0.3129
+vn -0.8774 -0.3635 -0.3130
+vn -0.7535 -0.5782 -0.3130
+vn -0.5782 -0.7535 -0.3130
+vn -0.5782 -0.7536 -0.3127
+vn -0.3634 -0.8775 -0.3130
+vn -0.3636 -0.8774 -0.3131
+vn -0.3633 -0.8774 -0.3134
+vn -0.3635 -0.8775 -0.3130
+vn -0.1232 -0.9417 -0.3130
+vn -0.1240 -0.9416 -0.3130
+vn 0.1238 -0.9417 -0.3130
+vn 0.1240 -0.9416 -0.3130
+vn 0.1238 -0.9414 -0.3137
+vn 0.1223 -0.9418 -0.3131
+vn 0.3635 -0.8775 -0.3130
+vn 0.3635 -0.8774 -0.3130
+vn 0.5782 -0.7535 -0.3130
+vn 0.7535 -0.5782 -0.3130
+vn 0.8775 -0.3635 -0.3130
+vn 0.8775 -0.3634 -0.3130
+vn 0.9416 -0.1243 -0.3130
+vn 0.9416 -0.1239 -0.3130
+vn 0.9416 -0.1240 -0.3130
+vn 0.9419 0.1217 -0.3131
+vn 0.9416 0.1247 -0.3129
+vn 0.9417 0.1236 -0.3130
+vn 0.9416 0.1240 -0.3130
+vn 0.9416 0.1239 -0.3130
+vn 0.8774 0.3636 -0.3129
+vn 0.8775 0.3635 -0.3130
+vn 0.8775 0.3634 -0.3130
+vn 0.8774 0.3637 -0.3128
+vn 0.8774 0.3635 -0.3130
+vn 0.7535 0.5782 -0.3130
+vn 0.7535 0.5781 -0.3130
+vn 0.5781 0.7538 -0.3124
+vn 0.5782 0.7535 -0.3130
+vn 0.5785 0.7532 -0.3131
+vn 0.5782 0.7535 -0.3129
+vn 0.3635 0.8775 -0.3130
+vn 0.3636 0.8774 -0.3130
+vn 0.3634 0.8775 -0.3130
+vn 0.1232 0.9417 -0.3130
+vn 0.1240 0.9416 -0.3130
+vn -0.1240 0.9416 -0.3130
+vn -0.1238 0.9417 -0.3129
+vn -0.1238 0.9414 -0.3137
+vn -0.1224 0.9418 -0.3131
+vn -0.3635 0.8775 -0.3130
+vn -0.3636 0.8774 -0.3129
+vn -0.5782 0.7535 -0.3130
+vn -0.7535 0.5782 -0.3130
+vn -0.8775 0.3635 -0.3130
+vn -0.8775 0.3634 -0.3130
+vn -0.9416 0.1240 -0.3130
+vn -0.9416 0.1239 -0.3130
+vn 0.0676 0.9463 0.3161
+vn 0.1335 0.9398 0.3144
+vn 0.1233 0.9388 0.3218
+vn 0.0654 0.9462 0.3168
+vn 0.0652 0.9444 0.3222
+vn 0.0658 0.9470 0.3146
+vn -0.7764 -0.0000 0.6303
+vn -0.4834 -0.7806 0.3962
+vn 0.0000 0.0000 1.0000
+vn -0.3550 0.8461 0.3977
+vn 0.1068 0.7597 -0.6415
+vn -0.5434 0.7784 0.3143
+vn 0.1261 0.8971 0.4234
+vn -0.6382 0.5864 0.4988
+vn 0.8048 0.5032 0.3149
+vn 0.0266 0.9514 -0.3069
+vn 0.0659 0.9470 -0.3145
+vn 0.4126 -0.8532 0.3190
+vn 0.4549 -0.8316 0.3184
+vn 0.4463 -0.8362 0.3186
+vn 0.3667 -0.8742 0.3183
+vn 0.4028 -0.8590 0.3160
+vn 0.3553 0.8802 -0.3145
+vn 0.3627 0.8770 -0.3151
+vn 0.3556 0.8820 -0.3093
+vn 0.3525 0.8816 -0.3139
+vn 0.3500 0.8840 -0.3099
+vn -0.7159 -0.4664 0.5196
+vn -0.6398 -0.7030 0.3105
+vn 0.0000 -0.7671 -0.6415
+vn -0.1608 -0.9349 -0.3163
+vn -0.1701 -0.8031 0.5711
+vn -0.1375 -0.7995 0.5847
+vn -0.4599 -0.6623 0.5914
+vn -0.9245 -0.2306 -0.3035
+vn -0.9264 -0.2057 -0.3152
+vn -0.4037 -0.8603 0.3112
+vn -0.7916 -0.1758 0.5851
+vn -0.7886 -0.1952 0.5831
+vn -0.9116 -0.2663 -0.3132
+vn 0.0000 0.7764 0.6303
+vn -0.6895 0.3363 0.6415
+vn 0.1068 0.7597 0.6415
+vn 0.0000 -0.7671 0.6415
+vn 0.2405 0.7401 -0.6280
+vn 0.7664 0.1351 -0.6280
+vn -0.4509 -0.6206 0.6415
+vn 0.4509 0.6206 0.6415
+vn -0.1089 -0.7747 0.6229
+vn -0.0000 -0.4342 0.9008
+vn -0.7151 -0.3790 0.5874
+vn -0.0000 -0.7823 0.6229
+vn -0.4234 -0.3611 0.8309
+vn -0.2438 -0.4359 0.8663
+vn 0.4509 0.6206 -0.6415
+vn -0.1086 -0.7728 -0.6253
+vn -0.1068 -0.7597 0.6415
+vn -0.1068 -0.7597 -0.6415
+vn -0.6206 0.4509 0.6415
+vn -0.4829 -0.8174 -0.3142
+vn -0.5202 -0.7936 -0.3156
+vn -0.1144 -0.8048 0.5824
+vn -0.4446 -0.6783 0.5850
+vn -0.4222 -0.7059 0.5687
+vn -0.4813 -0.8181 -0.3146
+vn 0.7401 -0.2405 -0.6280
+vn 0.3601 -0.6773 -0.6415
+vn 0.2027 0.8949 0.3977
+vn 0.6116 -0.6848 0.3962
+vn 0.7071 0.0000 0.7071
+vn -0.3363 -0.6895 0.6415
+vn 0.0000 -0.7804 -0.6253
+vn -0.6296 -0.4574 -0.6280
+vn 0.2371 0.7296 0.6415
+vn 0.2371 0.7296 -0.6415
+vn -0.9469 0.0659 0.3148
+vn -0.9450 0.0664 0.3202
+vn -0.9454 0.0632 0.3197
+vn -0.9451 0.0653 0.3201
+vn -0.9465 0.0677 0.3156
+vn -0.9470 0.0652 0.3145
+vn 0.6561 -0.6839 0.3190
+vn 0.6531 -0.6870 0.3186
+vn 0.6870 -0.6515 0.3218
+vn 0.6824 -0.6576 0.3193
+vn 0.6191 -0.7186 0.3168
+vn 0.6472 -0.6925 0.3188
+vn -0.6220 0.5211 0.5844
+vn 0.0228 0.9498 0.3121
+vn -0.7271 0.6091 -0.3169
+vn -0.9313 -0.1881 0.3119
+vn 0.1701 0.8031 0.5711
+vn 0.1717 0.9333 -0.3153
+vn 0.2261 0.9236 -0.3096
+vn -0.1560 0.7987 0.5811
+vn 0.1924 0.7860 0.5876
+vn 0.2644 0.9112 -0.3159
+vn 0.2256 0.9202 -0.3199
+vn 0.1752 0.9320 -0.3172
+vn 0.1924 0.9283 -0.3182
+vn 0.0000 0.0000 -1.0000
+vn -0.7728 0.1086 -0.6252
+vn -0.8180 -0.1973 0.5404
+vn -0.8276 -0.4666 0.3119
+vn -0.2371 -0.7296 -0.6415
+vn -0.7118 -0.5811 0.3946
+vn -0.7597 0.1068 0.6415
+vn -0.8039 -0.5033 0.3168
+vn -0.8363 -0.4457 0.3193
+vn -0.8319 -0.4521 0.3218
+vn -0.0904 0.0132 0.9958
+vn -0.5109 0.6928 0.5089
+vn -0.2399 -0.7384 0.6303
+vn -0.2412 -0.7422 -0.6253
+vn -0.3601 0.6773 -0.6415
+vn -0.3835 -0.3129 0.8689
+vn -0.2782 -0.4797 0.8322
+vn -0.7646 -0.1348 0.6303
+vn -0.2328 -0.7720 0.5914
+vn 0.0865 0.8231 0.5612
+vn -0.1881 0.9313 0.3119
+vn -0.6206 0.4509 -0.6415
+vn -0.3177 0.8629 0.3930
+vn -0.2371 -0.7296 0.6415
+vn -0.8802 0.3553 -0.3145
+vn -0.8770 0.3627 -0.3150
+vn -0.8807 0.3533 -0.3154
+vn -0.8828 0.3497 -0.3136
+vn 0.0409 -0.8071 0.5890
+vn 0.0758 -0.8169 0.5718
+vn 0.0480 -0.9478 -0.3154
+vn 0.3819 -0.7178 0.5822
+vn 0.0410 -0.8099 0.5851
+vn -0.0070 -0.9489 -0.3155
+vn 0.9452 0.0789 0.3168
+vn 0.9416 0.1161 0.3161
+vn 0.9392 0.1266 0.3191
+vn 0.7555 0.1332 0.6415
+vn -0.3129 0.3835 0.8689
+vn -0.4797 0.2782 0.8322
+vn -0.1348 0.7646 0.6303
+vn -0.7719 0.2340 0.5911
+vn -0.7555 -0.1332 -0.6415
+vn -0.1351 0.7664 -0.6280
+vn 0.6773 0.3601 -0.6415
+vn -0.4126 0.8532 0.3190
+vn -0.4521 0.8319 0.3218
+vn -0.4457 0.8363 0.3193
+vn -0.3664 0.8738 0.3198
+vn -0.4028 0.8590 0.3160
+vn 0.3363 0.6895 0.6415
+vn -0.4381 -0.2012 0.8761
+vn -0.7972 0.1259 0.5905
+vn -0.4598 -0.6329 0.6229
+vn -0.5525 -0.0217 0.8332
+vn 0.6382 -0.5864 0.4988
+vn 0.3551 -0.8461 0.3977
+vn 0.5398 -0.7818 0.3121
+vn 0.3363 0.6895 -0.6415
+vn -0.8170 -0.0751 0.5718
+vn -0.8031 -0.1148 0.5847
+vn -0.9391 -0.1343 -0.3163
+vn -0.6773 -0.3601 -0.6415
+vn 0.5329 0.5518 0.6415
+vn 0.6908 0.3673 0.6229
+vn 0.0874 0.0306 0.9957
+vn -0.2412 0.7422 -0.6253
+vn 0.2021 -0.5167 0.8320
+vn -0.4210 -0.3632 0.8312
+vn -0.1359 0.7704 0.6229
+vn 0.2405 -0.7401 -0.6280
+vn 0.7274 -0.6099 -0.3145
+vn 0.2800 -0.8616 0.4234
+vn 0.2371 -0.7296 -0.6415
+vn -0.2027 -0.8949 0.3977
+vn -0.5267 -0.6883 0.4988
+vn -0.5811 0.7118 0.3946
+vn 0.0304 -0.0877 0.9957
+vn 0.2230 0.4782 0.8495
+vn 0.0632 0.9454 0.3197
+vn 0.0659 0.9469 0.3148
+vn 0.0652 0.9451 0.3201
+vn 0.0678 0.9465 0.3156
+vn 0.0653 0.9470 0.3145
+vn 0.0640 0.9466 0.3158
+vn 0.0663 0.9450 0.3203
+vn 0.5033 -0.8039 0.3168
+vn -0.0132 -0.0904 0.9958
+vn -0.6928 -0.5109 0.5089
+vn -0.3366 0.8877 0.3141
+vn -0.3310 0.8894 0.3153
+vn -0.3348 0.8876 0.3163
+vn -0.3372 0.8879 0.3129
+vn -0.3304 0.8885 0.3185
+vn -0.3343 0.8873 0.3177
+vn -0.3385 0.8869 0.3145
+vn 0.7422 0.2412 -0.6252
+vn 0.0049 0.0000 1.0000
+vn 0.0757 -0.0100 0.9971
+vn 0.8801 -0.3553 0.3148
+vn 0.8783 -0.3549 0.3202
+vn 0.8796 -0.3523 0.3197
+vn 0.8791 -0.3539 0.3192
+vn 0.8793 -0.3570 0.3154
+vn 0.8814 -0.3543 0.3123
+vn -0.0676 -0.9463 0.3161
+vn -0.1322 -0.9399 0.3148
+vn -0.1208 -0.9402 0.3184
+vn -0.0654 -0.9462 0.3168
+vn -0.0662 -0.9478 0.3120
+vn 0.0458 -0.9483 0.3141
+vn 0.1177 -0.9414 0.3160
+vn 0.0801 -0.9446 0.3185
+vn 0.0399 -0.9481 0.3153
+vn 0.0441 -0.9476 0.3163
+vn 0.0397 -0.9471 0.3185
+vn 0.1168 -0.4684 0.8758
+vn -0.5804 -0.7553 0.3043
+vn 0.2283 -0.9158 -0.3303
+vn 0.1217 -0.5358 0.8355
+vn 0.2101 -0.9250 -0.3166
+vn 0.8593 -0.4028 0.3153
+vn 0.1797 -0.7912 0.5845
+vn 0.2633 -0.9110 -0.3174
+vn 0.3419 -0.9117 -0.2279
+vn 0.9481 0.0480 0.3142
+vn 0.9480 0.0423 0.3153
+vn 0.9498 0.0458 0.3096
+vn 0.9475 0.0463 0.3163
+vn 0.9470 0.0419 0.3185
+vn -0.8797 0.3546 0.3168
+vn -0.8526 0.4141 0.3187
+vn -0.8569 0.4054 0.3185
+vn -0.3830 -0.7717 0.5078
+vn -0.0875 -0.0306 0.9957
+vn -0.8223 -0.4702 -0.3205
+vn -0.7980 -0.5132 -0.3160
+vn -0.1043 -0.9448 0.3105
+vn -0.8972 0.3101 0.3145
+vn -0.6116 0.6848 0.3962
+vn 0.2412 0.7422 -0.6253
+vn -0.0777 0.5454 0.8345
+vn -0.0509 -0.1362 0.9894
+vn -0.2371 0.7296 -0.6415
+vn -0.2371 0.7296 0.6415
+vn 0.5329 0.5518 -0.6415
+vn 0.6293 0.6516 0.4235
+vn -0.2282 0.7956 0.5612
+vn 0.1630 0.9050 0.3930
+vn -0.2405 0.7401 -0.6280
+vn -0.1332 0.7555 0.6415
+vn -0.6895 0.3363 -0.6415
+vn -0.2399 0.7384 0.6303
+vn -0.1217 -0.0324 0.9920
+vn -0.1190 -0.0297 0.9925
+vn -0.7271 0.6091 0.3167
+vn -0.6824 0.6576 0.3193
+vn -0.6870 0.6515 0.3218
+vn 0.0073 0.1208 0.9926
+vn 0.0536 -0.0462 0.9975
+vn 0.4563 0.6281 0.6303
+vn -0.2628 -0.4091 0.8738
+vn -0.1055 -0.5427 0.8333
+vn -0.6855 -0.3645 0.6303
+vn 0.0041 -0.8138 0.5811
+vn -0.3796 -0.2018 0.9029
+vn -0.4587 -0.6314 -0.6253
+vn 0.4574 0.6296 -0.6280
+vn -0.4509 -0.6206 -0.6415
+vn -0.2418 -0.7440 0.6229
+vn -0.5167 -0.2020 0.8320
+vn -0.3606 -0.3328 0.8713
+vn -0.7987 -0.1560 0.5811
+vn -0.6773 -0.3601 0.6415
+vn 0.1677 0.9328 0.3190
+vn 0.2171 0.9223 0.3198
+vn 0.1790 0.9317 0.3160
+vn -0.7664 -0.1351 -0.6280
+vn 0.3601 -0.6773 0.6415
+vn 0.5518 -0.5329 0.6415
+vn 0.8802 -0.3553 -0.3145
+vn 0.8820 -0.3557 -0.3093
+vn 0.8796 -0.3561 -0.3156
+vn 0.8816 -0.3525 -0.3140
+vn -0.6839 -0.6561 0.3190
+vn -0.6515 -0.6870 0.3218
+vn -0.6576 -0.6824 0.3193
+vn -0.7186 -0.6191 0.3168
+vn -0.6924 -0.6475 0.3184
+vn 0.8071 0.0409 0.5890
+vn 0.8169 0.0758 0.5718
+vn 0.9408 0.1215 -0.3163
+vn 0.9478 0.0480 -0.3154
+vn 0.9415 0.1166 -0.3163
+vn 0.9441 0.0933 -0.3162
+vn 0.7178 0.3819 0.5822
+vn 0.8099 0.0410 0.5851
+vn 0.9489 -0.0070 -0.3155
+vn -0.5393 -0.5585 0.6303
+vn 0.2629 -0.7633 0.5901
+vn -0.2987 -0.3093 0.9029
+vn -0.1211 -0.4621 0.8785
+vn 0.0777 -0.5454 0.8345
+vn 0.4050 -0.8581 -0.3157
+vn 0.3353 -0.8875 -0.3163
+vn 0.3182 -0.7567 0.5711
+vn 0.3462 -0.7335 0.5849
+vn 0.6568 -0.6850 -0.3150
+vn 0.6585 -0.6821 -0.3180
+vn 0.5402 -0.6190 0.5701
+vn 0.5638 -0.5841 0.5840
+vn 0.6748 -0.6671 -0.3156
+vn -0.5403 0.6189 0.5701
+vn -0.6483 0.6920 -0.3177
+vn -0.5942 0.7399 -0.3154
+vn -0.6440 0.6970 -0.3153
+vn -0.6274 0.7120 -0.3155
+vn -0.7300 0.3574 0.5825
+vn -0.5078 0.6323 0.5851
+vn -0.5056 0.6295 0.5900
+vn -0.2826 -0.4810 0.8299
+vn -0.5427 0.1055 0.8333
+vn 0.0000 -0.7782 -0.6280
+vn 0.6206 -0.4509 0.6415
+vn -0.7422 -0.2412 -0.6252
+vn -0.8292 -0.4651 -0.3102
+vn -0.7976 -0.5141 -0.3155
+vn -0.7296 0.2371 -0.6415
+vn -0.3601 0.6773 0.6415
+vn 0.3664 -0.6891 -0.6253
+vn -0.3653 0.6871 -0.6280
+vn 0.6895 -0.3363 0.6415
+vn 0.4509 -0.6206 0.6415
+vn 0.1211 0.4621 0.8785
+vn 0.5393 0.5585 0.6303
+vn -0.2630 0.7632 0.5902
+vn 0.2987 0.3093 0.9029
+vn -0.5435 -0.5628 0.6229
+vn 0.5406 0.5598 -0.6280
+vn -0.3363 -0.6895 -0.6415
+vn -0.7296 -0.2371 0.6415
+vn -0.7671 -0.0000 0.6415
+vn 0.1359 -0.7704 0.6229
+vn -0.8019 0.4486 0.3946
+vn 0.0904 -0.0132 0.9958
+vn 0.5032 -0.8048 0.3149
+vn 0.5018 -0.8035 0.3202
+vn 0.5045 -0.8021 0.3196
+vn -0.9160 0.2495 0.3142
+vn -0.9317 0.1790 0.3160
+vn -0.9239 0.2178 0.3145
+vn -0.9141 0.2550 0.3153
+vn -0.9149 0.2509 0.3163
+vn -0.9165 0.2475 0.3145
+vn 0.6827 0.6593 -0.3151
+vn 0.7112 0.6282 -0.3155
+vn 0.6958 0.6453 -0.3153
+vn 0.6709 0.6710 -0.3157
+vn 0.6821 0.6585 -0.3180
+vn 0.6920 0.6482 -0.3177
+vn 0.6190 0.5403 0.5701
+vn 0.5840 0.5638 0.5840
+vn 0.7633 0.2629 0.5901
+vn -0.5839 0.5655 0.5824
+vn -0.7440 -0.2418 0.6229
+vn -0.4810 0.2826 0.8299
+vn -0.4987 0.0978 0.8612
+vn -0.4130 -0.1342 0.9008
+vn 0.1394 -0.1497 0.9789
+vn 0.6978 -0.3403 0.6303
+vn 0.6421 0.4878 0.5915
+vn 0.3864 -0.1885 0.9029
+vn 0.4684 0.0269 0.8831
+vn 0.7296 0.2371 -0.6415
+vn 0.6206 0.4509 0.6415
+vn 0.9372 -0.1436 0.3180
+vn 0.9403 -0.1190 0.3187
+vn 0.9430 -0.1119 0.3135
+vn 0.9255 -0.2056 0.3182
+vn 0.9357 -0.1585 0.3152
+vn -0.0338 -0.0630 0.9974
+vn 0.0085 0.1027 0.9947
+vn 0.1627 -0.1090 0.9806
+vn 0.7408 0.5926 0.3162
+vn 0.6925 0.6472 0.3188
+vn 0.7186 0.6191 0.3168
+vn 0.1362 -0.0509 0.9894
+vn 0.3546 0.8797 -0.3169
+vn -0.4666 0.8276 0.3119
+vn 0.9103 0.2718 0.3121
+vn 0.3537 0.8779 -0.3227
+vn 0.3548 0.8813 -0.3120
+vn -0.6708 0.4561 0.5847
+vn -0.6933 0.4383 0.5720
+vn -0.7899 0.5256 -0.3158
+vn -0.7845 0.5335 -0.3162
+vn -0.7921 0.5229 -0.3149
+vn -0.8010 0.5102 -0.3133
+vn 0.0150 0.9463 -0.3228
+vn 0.0559 0.8095 0.5845
+vn 0.7818 0.5398 0.3121
+vn 0.0654 0.9462 -0.3169
+vn -0.6996 0.6429 0.3119
+vn -0.5518 0.5329 -0.6415
+vn -0.4253 0.7999 0.4234
+vn -0.8398 0.0522 0.5404
+vn -0.7555 -0.1332 0.6415
+vn -0.4509 0.6206 -0.6415
+vn -0.4574 0.6296 -0.6280
+vn -0.7422 0.2412 -0.6253
+vn 0.1812 -0.4699 0.8639
+vn 0.3632 -0.4210 0.8312
+vn -0.1080 -0.7688 0.6303
+vn 0.6623 -0.4599 0.5914
+vn -0.0598 -0.4257 0.9029
+vn -0.0324 0.1217 0.9920
+vn -0.0297 0.1190 0.9925
+vn 0.6091 0.7271 0.3167
+vn 0.6576 0.6824 0.3193
+vn 0.6515 0.6870 0.3218
+vn 0.1208 -0.0073 0.9926
+vn -0.0462 -0.0536 0.9975
+vn 0.6281 0.4563 0.6303
+vn 0.6281 -0.4563 0.6303
+vn -0.6314 -0.4587 -0.6253
+vn -0.0217 0.5525 0.8332
+vn -0.0100 -0.0757 0.9971
+vn -0.1332 0.7555 -0.6415
+vn -0.6206 -0.4509 -0.6415
+vn -0.5329 -0.5518 -0.6415
+vn 0.5628 -0.5435 0.6229
+vn -0.8082 -0.0409 0.5875
+vn -0.9478 -0.0480 -0.3152
+vn -0.8099 -0.0410 0.5851
+vn -0.6561 0.6839 0.3190
+vn -0.6531 0.6870 0.3186
+vn -0.6191 0.7186 0.3168
+vn -0.6477 0.6924 0.3181
+vn 0.5518 -0.5329 -0.6415
+vn -0.5033 0.8039 0.3168
+vn 0.0132 0.0904 0.9958
+vn 0.6928 0.5109 0.5089
+vn -0.9462 0.0654 0.3168
+vn -0.9399 0.1334 0.3144
+vn -0.9388 0.1233 0.3218
+vn -0.9477 0.0662 0.3121
+vn -0.9466 0.0629 0.3161
+vn -0.9457 0.0674 0.3180
+vn 0.8532 0.4126 0.3190
+vn 0.8316 0.4549 0.3184
+vn 0.8362 0.4463 0.3186
+vn 0.8791 0.3567 0.3163
+vn 0.8602 0.4003 0.3159
+vn -0.0000 0.7671 0.6415
+vn 0.4486 0.8019 0.3946
+vn 0.3101 0.8972 0.3145
+vn 0.0522 0.8398 0.5404
+vn -0.9448 0.1043 0.3105
+vn -0.8355 0.2707 0.4782
+vn 0.9112 -0.2644 -0.3159
+vn 0.9236 -0.2261 -0.3096
+vn 0.7987 0.1560 0.5811
+vn 0.7860 -0.1924 0.5876
+vn 0.8031 -0.1701 0.5711
+vn 0.9202 -0.2256 -0.3199
+vn -0.4418 -0.8395 -0.3163
+vn -0.2063 -0.3920 0.8965
+vn -0.6421 -0.4878 0.5915
+vn -0.3813 -0.7178 0.5826
+vn -0.2684 -0.5053 0.8201
+vn -0.4443 -0.8363 -0.3213
+vn 0.7399 0.5942 -0.3154
+vn 0.3574 0.7300 0.5825
+vn 0.6323 0.5078 0.5851
+vn 0.6295 0.5056 0.5900
+vn -0.3241 0.7552 0.5697
+vn -0.3587 0.7276 0.5847
+vn -0.0172 0.8062 0.5914
+vn -0.4195 0.8509 -0.3163
+vn -0.3795 0.8695 -0.3163
+vn -0.4014 0.8595 -0.3164
+vn -0.4059 0.8574 -0.3164
+vn -0.4621 0.1211 0.8785
+vn -0.5454 -0.0777 0.8345
+vn -0.5585 0.5393 0.6303
+vn -0.7633 -0.2629 0.5901
+vn -0.3093 0.2987 0.9029
+vn -0.7401 -0.2405 -0.6280
+vn 0.5614 -0.5421 -0.6253
+vn -0.5598 0.5406 -0.6280
+vn -0.7587 0.5762 0.3041
+vn -0.7860 0.3350 0.5196
+vn -0.6891 -0.3664 -0.6253
+vn 0.6206 0.4509 -0.6415
+vn -0.6206 -0.4509 0.6415
+vn 0.4651 -0.8292 -0.3102
+vn 0.5140 -0.7976 -0.3155
+vn -0.4117 0.7758 0.4782
+vn 0.3830 0.7717 0.5078
+vn -0.2718 0.9103 0.3121
+vn -0.7273 0.6099 0.3149
+vn -0.7259 0.6112 0.3155
+vn -0.7255 0.6092 0.3202
+vn -0.0764 0.0094 0.9970
+vn -0.0757 0.0100 0.9971
+vn -0.7926 0.5214 0.3163
+vn -0.8295 0.4585 0.3188
+vn -0.1045 -0.0234 0.9943
+vn -0.0409 0.8071 0.5890
+vn -0.0758 0.8169 0.5718
+vn -0.1215 0.9408 -0.3163
+vn -0.0480 0.9478 -0.3154
+vn -0.1166 0.9415 -0.3163
+vn -0.0933 0.9441 -0.3162
+vn -0.3819 0.7178 0.5822
+vn -0.0410 0.8099 0.5851
+vn 0.0070 0.9489 -0.3155
+vn -0.9471 0.0543 -0.3162
+vn -0.8099 0.0465 0.5847
+vn 0.6206 -0.4509 -0.6415
+vn 0.2708 0.8355 0.4782
+vn 0.1043 0.9448 0.3105
+vn 0.7296 -0.2371 0.6415
+vn -0.5614 0.5421 -0.6253
+vn 0.7296 0.2371 0.6415
+vn -0.6099 -0.7273 0.3148
+vn -0.6092 -0.7255 0.3202
+vn -0.6069 -0.7277 0.3195
+vn -0.6082 -0.7267 0.3192
+vn -0.6096 -0.7272 0.3156
+vn 0.7926 -0.5214 0.3163
+vn 0.8295 -0.4585 0.3188
+vn 0.1045 0.0234 0.9943
+vn 0.0764 -0.0094 0.9970
+vn -0.5211 -0.6220 0.5844
+vn -0.9498 0.0228 0.3121
+vn -0.6091 -0.7271 -0.3169
+vn 0.1881 -0.9313 0.3119
+vn -0.6112 -0.7260 -0.3153
+vn -0.6099 -0.7274 -0.3145
+vn -0.6107 -0.7290 -0.3093
+vn -0.9380 0.1442 -0.3151
+vn -0.9302 0.1840 -0.3177
+vn -0.9346 0.1624 -0.3164
+vn -0.9361 0.1579 -0.3143
+vn -0.8042 0.1637 0.5714
+vn -0.8015 0.1232 0.5852
+vn -0.6671 0.4490 0.5945
+vn -0.9236 0.2261 -0.3096
+vn -0.7860 0.1924 0.5876
+vn -0.9112 0.2644 -0.3159
+vn -0.9202 0.2256 -0.3199
+vn 0.2371 -0.7296 0.6415
+vn -0.7296 -0.2371 -0.6415
+vn -0.6281 0.4563 0.6303
+vn 0.5454 0.0777 0.8345
+vn -0.1362 0.0509 0.9894
+vn 0.6314 -0.4587 -0.6253
+vn -0.6296 0.4574 -0.6280
+vn 0.3177 -0.8629 0.3930
+vn -0.9050 0.1630 0.3930
+vn -0.5518 0.5329 0.6415
+vn -0.7956 -0.2282 0.5612
+vn 0.1217 0.0324 0.9920
+vn 0.1190 0.0297 0.9925
+vn 0.7271 -0.6091 0.3167
+vn -0.0073 -0.1208 0.9926
+vn -0.0536 0.0462 0.9975
+vn 0.7384 0.2399 0.6303
+vn 0.7597 -0.1068 0.6415
+vn 0.1288 -0.9390 0.3190
+vn 0.1729 -0.9309 0.3218
+vn 0.1647 -0.9348 0.3148
+vn 0.6895 -0.3363 -0.6415
+vn 0.7782 0.0000 -0.6280
+vn -0.9390 -0.1288 0.3190
+vn -0.9309 -0.1729 0.3218
+vn -0.9351 -0.1634 0.3145
+vn -0.9452 -0.0786 0.3168
+vn -0.9414 -0.1177 0.3160
+vn -0.4563 0.6281 0.6303
+vn 0.7401 0.2405 -0.6280
+vn -0.7706 0.1083 -0.6280
+vn -0.6577 0.6842 -0.3151
+vn -0.6727 0.6692 -0.3157
+vn -0.6586 0.6820 -0.3180
+vn -0.5639 0.5839 0.5840
+vn 0.0100 0.0757 0.9971
+vn 0.0217 -0.5525 0.8332
+vn -0.0420 0.0000 -0.9991
+vn 0.7032 -0.3430 0.6229
+vn 0.0324 -0.1217 0.9920
+vn 0.0297 -0.1190 0.9925
+vn -0.6091 -0.7271 0.3167
+vn -0.1208 0.0073 0.9926
+vn 0.0462 0.0536 0.9975
+vn 0.4587 -0.6314 -0.6253
+vn -0.1812 0.4699 0.8639
+vn -0.3632 0.4210 0.8312
+vn 0.1080 0.7688 0.6303
+vn 0.1351 -0.7664 -0.6280
+vn 0.7014 -0.3421 -0.6253
+vn 0.0000 0.7782 -0.6280
+vn 0.6848 0.6116 0.3962
+vn -0.8948 0.2027 0.3977
+vn -0.7704 -0.1359 0.6229
+vn -0.7686 -0.1355 -0.6253
+vn -0.6883 0.5266 0.4989
+vn -0.8593 0.4028 0.3153
+vn 0.4598 -0.6329 0.6229
+vn -0.1727 -0.7215 0.6705
+vn 0.0552 -0.4703 0.8808
+vn -0.3574 -0.7300 0.5825
+vn 0.9514 -0.0267 -0.3069
+vn 0.9470 -0.0659 -0.3145
+vn 0.1973 -0.8180 0.5404
+vn 0.4666 -0.8276 0.3119
+vn 0.7296 -0.2371 -0.6415
+vn 0.5811 -0.7118 0.3946
+vn -0.8048 -0.5032 0.3148
+vn -0.8035 -0.5018 0.3202
+vn -0.8020 -0.5046 0.3197
+vn -0.8030 -0.5027 0.3201
+vn -0.8056 -0.5015 0.3155
+vn -0.8047 -0.5048 0.3123
+vn 0.9160 -0.2495 0.3142
+vn 0.9141 -0.2550 0.3153
+vn 0.9149 -0.2509 0.3163
+vn 0.9130 -0.2549 0.3185
+vn 0.8292 0.4651 -0.3102
+vn 0.7976 0.5140 -0.3155
+vn 0.6773 0.3601 0.6415
+vn -0.0304 0.0877 0.9957
+vn -0.2230 -0.4782 0.8495
+vn 0.1355 -0.7686 -0.6253
+vn 0.7671 0.0000 0.6415
+vn -0.3553 -0.8801 0.3148
+vn -0.3551 -0.8783 0.3202
+vn -0.3523 -0.8796 0.3197
+vn -0.3541 -0.8787 0.3201
+vn -0.3566 -0.8792 0.3160
+vn -0.3541 -0.8815 0.3125
+vn -0.0458 0.9483 0.3141
+vn -0.1175 0.9418 0.3151
+vn -0.0783 0.9460 0.3145
+vn -0.0399 0.9481 0.3153
+vn -0.0441 0.9476 0.3163
+vn -0.0479 0.9481 0.3145
+vn 0.8972 -0.3101 0.3145
+vn 0.7980 0.5132 -0.3160
+vn 0.8223 0.4702 -0.3205
+vn 0.8797 -0.3546 -0.3169
+vn 0.8276 0.4666 0.3119
+vn 0.2718 -0.9103 0.3121
+vn 0.8809 -0.3522 -0.3162
+vn 0.8780 -0.3537 -0.3227
+vn -0.5046 0.8020 0.3197
+vn -0.5032 0.8048 0.3149
+vn -0.5027 0.8030 0.3201
+vn -0.5015 0.8057 0.3153
+vn -0.5039 0.8045 0.3144
+vn -0.5048 0.8035 0.3156
+vn -0.5018 0.8035 0.3202
+vn -0.6190 -0.5402 0.5701
+vn -0.7399 -0.5942 -0.3154
+vn -0.6323 -0.5078 0.5851
+vn -0.6295 -0.5056 0.5900
+vn 0.4509 -0.6206 -0.6415
+vn -0.4702 0.8223 -0.3205
+vn -0.5132 0.7980 -0.3160
+vn -0.9006 -0.4013 -0.1668
+vn -0.7711 0.3832 0.5085
+vn -0.9103 -0.2718 0.3121
+vn -0.7758 -0.4117 0.4782
+vn -0.7384 0.2399 0.6303
+vn 0.7728 -0.1086 -0.6253
+vn 0.7440 -0.2418 0.6229
+vn 0.3328 -0.3606 0.8713
+vn 0.1560 -0.7987 0.5811
+vn 0.4210 0.3632 0.8312
+vn -0.2020 0.5167 0.8320
+vn -0.7296 0.2371 0.6415
+vn -0.5406 -0.5598 -0.6280
+vn 0.7764 0.0000 0.6303
+vn -0.5628 0.5435 0.6229
+vn -0.7671 0.0000 -0.6415
+vn -0.8797 0.3546 -0.3169
+vn -0.8780 0.3537 -0.3227
+vn -0.8813 0.3548 -0.3120
+vn 0.2628 0.4091 0.8738
+vn 0.1055 0.5427 0.8333
+vn 0.6855 0.3645 0.6303
+vn 0.3796 0.2018 0.9029
+vn -0.1677 -0.9328 0.3190
+vn -0.2156 -0.9233 0.3177
+vn -0.1798 -0.9306 0.3188
+vn 0.7597 -0.1068 -0.6415
+vn 0.8353 -0.4476 0.3191
+vn 0.8569 -0.4054 0.3185
+vn 0.8526 -0.4141 0.3187
+vn 0.1497 0.1394 0.9789
+vn -0.0519 0.0720 0.9961
+vn 0.1309 0.0862 0.9876
+vn -0.4509 0.6206 0.6415
+vn 0.4563 -0.6281 0.6303
+vn -0.3971 -0.8142 0.4235
+vn 0.4117 -0.7758 0.4782
+vn 0.4014 -0.9005 -0.1671
+vn -0.6851 -0.6568 -0.3150
+vn -0.6821 -0.6585 -0.3180
+vn -0.5841 -0.5638 0.5840
+vn -0.6671 -0.6748 -0.3156
+vn -0.6908 -0.3673 0.6229
+vn 0.7747 -0.1089 0.6229
+vn -0.7597 0.1068 -0.6415
+vn -0.5329 -0.5518 0.6415
+vn -0.7014 0.3421 -0.6253
+vn 0.2418 0.7440 0.6229
+vn 0.5167 0.2020 0.8320
+vn 0.3606 0.3328 0.8713
+vn 0.1342 0.4130 0.9008
+vn -0.7806 0.4834 0.3961
+vn 0.8461 0.3551 0.3977
+vn 0.4381 0.2012 0.8761
+vn 0.7972 -0.1259 0.5905
+vn 0.4598 0.6329 0.6229
+vn 0.5525 0.0217 0.8332
+vn -0.7688 0.1080 0.6303
+vn -0.4699 -0.1812 0.8639
+vn -0.6978 0.3403 0.6303
+vn -0.3864 0.1885 0.9029
+vn -0.4684 -0.0269 0.8831
+vn -0.1394 0.1497 0.9789
+vn -0.7747 0.1089 0.6229
+vn 0.7706 -0.1083 -0.6280
+vn -0.9059 -0.0000 0.4234
+vn -0.4664 0.7159 0.5196
+vn 0.7633 0.2746 0.5847
+vn 0.7567 0.3182 0.5711
+vn 0.8875 0.3353 -0.3163
+vn 0.8927 0.3211 -0.3162
+vn 0.8856 0.3400 -0.3163
+vn 0.8767 0.3623 -0.3163
+vn 0.5704 0.5709 0.5905
+vn 0.6099 0.7274 -0.3145
+vn 0.6160 0.7220 -0.3150
+vn 0.6129 0.7270 -0.3096
+vn 0.6069 0.7299 -0.3145
+vn 0.6060 0.7326 -0.3099
+vn 0.4664 -0.7159 0.5196
+vn 0.6996 -0.6429 0.3118
+vn 0.7671 0.0000 -0.6415
+vn 0.7806 -0.4834 0.3962
+vn -0.3421 -0.7014 -0.6253
+vn 0.1332 -0.7555 0.6415
+vn 0.7273 -0.6099 0.3148
+vn 0.7255 -0.6092 0.3202
+vn 0.7277 -0.6068 0.3197
+vn 0.7263 -0.6083 0.3201
+vn 0.7259 -0.6112 0.3155
+vn 0.7288 -0.6094 0.3122
+vn -0.9483 -0.0458 0.3142
+vn -0.9481 -0.0400 0.3153
+vn -0.9476 -0.0441 0.3163
+vn -0.9484 -0.0467 0.3136
+vn 0.3524 0.8796 0.3196
+vn 0.3553 0.8801 0.3149
+vn 0.3566 0.8792 0.3160
+vn 0.3547 0.8805 0.3145
+vn 0.3551 0.8783 0.3202
+vn 0.2495 0.9160 0.3142
+vn 0.2550 0.9141 0.3153
+vn 0.2509 0.9149 0.3163
+vn 0.2491 0.9165 0.3129
+vn 0.2549 0.9130 0.3185
+vn 0.2511 0.9143 0.3178
+vn 0.2475 0.9165 0.3145
+vn 0.9476 -0.0519 0.3152
+vn 0.9458 -0.0524 0.3205
+vn 0.9471 -0.0537 0.3166
+vn 0.9477 -0.0541 0.3146
+vn 0.9482 -0.0555 0.3127
+vn 0.9477 -0.0512 0.3149
+vn 0.7845 -0.5335 -0.3162
+vn 0.6708 -0.4561 0.5847
+vn 0.6943 -0.4367 0.5721
+vn 0.7903 -0.5250 -0.3158
+vn -0.3546 -0.8797 -0.3169
+vn -0.3539 -0.8780 -0.3222
+vn -0.3537 -0.8779 -0.3227
+vn -0.2644 -0.9112 -0.3159
+vn -0.2261 -0.9236 -0.3096
+vn -0.1924 -0.7860 0.5876
+vn -0.2256 -0.9202 -0.3199
+vn -0.8461 -0.3550 0.3977
+vn -0.7818 -0.5398 0.3121
+vn -0.8971 0.1261 0.4234
+vn -0.5864 -0.6382 0.4988
+vn 0.4342 0.0000 0.9008
+vn 0.7823 0.0000 0.6229
+vn 0.3611 -0.4234 0.8309
+vn 0.4359 -0.2438 0.8663
+vn 0.3513 -0.2552 0.9008
+vn 0.6329 -0.4598 0.6229
+vn 0.2012 -0.4381 0.8761
+vn 0.7804 0.0000 -0.6253
+vn 0.8355 -0.2707 0.4782
+vn 0.9448 -0.1043 0.3105
+vn -0.2012 0.4381 0.8761
+vn 0.1144 0.8048 0.5824
+vn -0.6329 0.4598 0.6229
+vn 0.7384 -0.2399 0.6303
+vn 0.4699 0.1812 0.8639
+vn 0.7688 -0.1080 0.6303
+vn 0.4599 0.6623 0.5914
+vn 0.6314 0.4587 -0.6253
+vn -0.6329 -0.4598 0.6229
+vn -0.1090 -0.1627 0.9806
+vn -0.7215 0.1727 0.6705
+vn -0.4703 -0.0552 0.8808
+vn -0.3513 -0.2552 0.9008
+vn -0.7823 0.0000 0.6229
+vn -0.3611 0.4234 0.8309
+vn -0.4359 0.2438 0.8663
+vn -0.4342 0.0000 0.9008
+vn 0.9124 0.2635 -0.3132
+vn 0.9257 0.2098 -0.3148
+vn 0.9245 0.2305 -0.3035
+vn -0.3411 -0.6994 -0.6280
+vn -0.9209 -0.2282 0.3161
+vn -0.9201 -0.2302 0.3168
+vn -0.9218 -0.2300 0.3120
+vn -0.9195 -0.2287 0.3196
+vn -0.9138 -0.2552 -0.3159
+vn -0.4821 -0.1346 0.8657
+vn -0.8969 -0.3083 -0.3172
+vn -0.5760 -0.5635 0.5922
+vn -0.7674 -0.2638 0.5843
+vn -0.7595 -0.3137 0.5698
+vn -0.8911 -0.3246 -0.3172
+vn -0.5601 -0.1490 0.8150
+vn -0.9159 -0.2436 -0.3189
+vn 0.0242 -0.6342 0.7728
+vn 0.3724 0.0990 0.9228
+vn -0.9328 0.1677 0.3190
+vn -0.9322 0.1719 0.3185
+vn -0.3553 -0.8802 -0.3145
+vn -0.3533 -0.8808 -0.3153
+vn -0.3525 -0.8816 -0.3139
+vn 0.9006 0.4013 -0.1668
+vn 0.7711 -0.3832 0.5084
+vn 0.7758 0.4117 0.4782
+vn -0.7782 -0.0000 -0.6280
+vn 0.2412 -0.7422 -0.6253
+vn 0.7704 0.1359 0.6229
+vn 0.7686 0.1355 -0.6253
+vn 0.3211 -0.8927 -0.3162
+vn 0.5709 -0.5704 0.5905
+vn 0.2746 -0.7633 0.5847
+vn -0.7032 0.3430 0.6229
+vn -0.7384 -0.2399 0.6303
+vn -0.1973 0.8180 0.5404
+vn -0.1083 -0.7706 -0.6280
+vn 0.0000 0.7804 -0.6253
+vn 0.6883 -0.5266 0.4988
+vn 0.8948 -0.2027 0.3977
+vn -0.7274 0.6099 -0.3145
+vn -0.7220 0.6160 -0.3150
+vn -0.7289 0.6108 -0.3093
+vn -0.7264 0.6105 -0.3156
+vn -0.7284 0.6087 -0.3144
+vn -0.7326 0.6060 -0.3099
+vn -0.8877 -0.3366 0.3141
+vn -0.8594 -0.4028 0.3151
+vn -0.8738 -0.3664 0.3197
+vn -0.8894 -0.3310 0.3153
+vn -0.8876 -0.3348 0.3163
+vn -0.8885 -0.3304 0.3185
+vn 0.2098 -0.9257 -0.3148
+vn 0.2635 -0.9124 -0.3132
+vn 0.2305 -0.9245 -0.3035
+vn 0.0094 0.0764 0.9970
+vn 0.5214 0.7926 0.3163
+vn 0.4585 0.8295 0.3188
+vn -0.0234 0.1045 0.9943
+vn 0.4684 0.1168 0.8758
+vn 0.7553 -0.5804 0.3043
+vn 0.9158 0.2284 -0.3303
+vn 0.5358 0.1217 0.8355
+vn 0.9250 0.2101 -0.3166
+vn 0.4028 0.8593 0.3153
+vn 0.7912 0.1797 0.5846
+vn 0.9110 0.2633 -0.3174
+vn 0.9285 0.0000 -0.3714
+vn -0.3430 -0.7032 0.6229
+vn 0.6220 -0.5211 0.5844
+vn -0.0228 -0.9498 0.3121
+vn 0.7271 -0.6091 -0.3169
+vn 0.9313 0.1881 0.3119
+vn -0.6848 -0.6116 0.3962
+vn 0.3430 0.7032 0.6229
+vn 0.4130 0.1342 0.9008
+vn 0.7440 0.2418 0.6229
+vn 0.4810 -0.2826 0.8299
+vn 0.4987 -0.0978 0.8612
+vn -0.4587 0.6314 -0.6253
+vn -0.8796 0.3523 0.3197
+vn -0.8801 0.3553 0.3148
+vn -0.8788 0.3540 0.3201
+vn -0.8793 0.3570 0.3154
+vn -0.8805 0.3546 0.3147
+vn -0.8806 0.3534 0.3157
+vn -0.8783 0.3549 0.3202
+vn -0.6314 0.4587 -0.6253
+vn -0.0865 -0.8231 0.5612
+vn 0.2399 0.7384 0.6303
+vn 0.5598 -0.5406 -0.6280
+vn 0.4476 0.8353 0.3191
+vn 0.4054 0.8569 0.3185
+vn 0.4141 0.8526 0.3187
+vn -0.0720 -0.0518 0.9961
+vn -0.0862 0.1309 0.9876
+vn 0.6296 -0.4574 -0.6280
+vn 0.6839 0.6561 0.3190
+vn 0.7956 0.2282 0.5612
+vn 0.9050 -0.1630 0.3930
+vn 0.9498 -0.0228 0.3121
+vn 0.6516 -0.6293 0.4235
+vn 0.0509 0.1362 0.9894
+vn 0.3411 0.6994 -0.6280
+vn 0.4443 0.8363 -0.3213
+vn 0.5171 0.7955 -0.3159
+vn 0.4222 0.7059 0.5687
+vn 0.3813 0.7178 0.5826
+vn 0.2684 0.5053 0.8202
+vn 0.4418 0.8395 -0.3163
+vn 0.2662 0.5059 0.8205
+vn 0.4611 0.8293 -0.3156
+vn 0.4506 0.8349 -0.3160
+vn 0.4487 0.8360 -0.3160
+vn 0.4438 0.8385 -0.3162
+vn 0.8166 -0.4869 -0.3100
+vn 0.8351 -0.4502 -0.3162
+vn 0.4773 -0.2573 0.8402
+vn 0.7141 -0.3850 0.5847
+vn 0.4850 -0.6528 0.5819
+vn 0.8181 -0.4820 -0.3136
+vn 0.4641 -0.2734 0.8426
+vn 0.1083 0.7706 -0.6280
+vn 0.1375 0.7995 0.5847
+vn 0.1608 0.9349 -0.3163
+vn -0.3365 0.8872 -0.3156
+vn -0.2876 0.7584 0.5850
+vn 0.5109 -0.6928 0.5089
+vn -0.2708 -0.8355 0.4782
+vn 0.5325 -0.7329 0.4234
+vn 0.8029 0.1163 0.5847
+vn 0.7720 -0.2328 0.5914
+vn 0.9389 0.1360 -0.3163
+vn 0.3835 0.3129 0.8689
+vn 0.2782 0.4797 0.8322
+vn 0.7646 0.1348 0.6303
+vn 0.2328 0.7720 0.5914
+vn 0.6891 0.3664 -0.6253
+vn -0.6871 -0.3653 -0.6280
+vn 0.4621 -0.1211 0.8785
+vn 0.5585 -0.5393 0.6303
+vn 0.3093 -0.2987 0.9029
+vn -0.4486 -0.8019 0.3946
+vn -0.2319 0.9188 0.3195
+vn -0.2299 0.9209 0.3149
+vn -0.2279 0.9212 0.3153
+vn -0.2304 0.9210 0.3142
+vn -0.2290 0.9193 0.3202
+vn 0.0338 0.0630 0.9974
+vn -0.0085 -0.1027 0.9947
+vn -0.1627 0.1090 0.9806
+vn -0.7408 -0.5926 0.3162
+vn 0.3546 0.8797 0.3168
+vn 0.3403 0.6978 0.6303
+vn -0.4851 0.6527 0.5820
+vn 0.1885 0.3864 0.9029
+vn -0.0269 0.4684 0.8831
+vn -0.2966 0.6763 0.6743
+vn 0.8947 0.3187 0.3130
+vn 0.8963 0.3131 0.3142
+vn 0.8946 0.3168 0.3152
+vn 0.8968 0.3143 0.3113
+vn 0.8944 0.3175 0.3149
+vn 0.8937 0.3185 0.3159
+vn 0.8939 0.3206 0.3133
+vn -0.0630 0.0338 0.9974
+vn 0.1027 -0.0085 0.9947
+vn 0.5926 -0.7408 0.3162
+vn -0.0150 -0.9464 -0.3228
+vn -0.0654 -0.9462 -0.3169
+vn -0.0559 -0.8095 0.5844
+vn 0.4702 -0.8223 -0.3205
+vn 0.5132 -0.7980 -0.3160
+vn -0.3101 -0.8972 0.3145
+vn -0.0522 -0.8398 0.5404
+vn -0.6281 -0.4563 0.6303
+vn 0.7555 0.1332 -0.6415
+vn 0.8039 0.5033 0.3168
+vn -0.4598 0.6329 0.6229
+vn 0.1727 0.7215 0.6705
+vn -0.0552 0.4703 0.8808
+vn -0.2552 0.3513 0.9008
+vn 0.4574 -0.6296 -0.6280
+vn -0.4476 -0.8353 0.3191
+vn -0.4054 -0.8569 0.3185
+vn -0.4141 -0.8526 0.3187
+vn 0.0720 0.0518 0.9961
+vn 0.0862 -0.1309 0.9876
+vn 0.0234 -0.1045 0.9943
+vn -0.4585 -0.8295 0.3188
+vn -0.3546 -0.8797 0.3168
+vn 0.8019 -0.4486 0.3946
+vn 0.8398 -0.0522 0.5404
+vn -0.1163 0.8029 0.5847
+vn -0.1360 0.9389 -0.3163
+vn -0.8352 0.4499 -0.3162
+vn -0.4774 0.2572 0.8402
+vn -0.7142 0.3848 0.5847
+vn -0.8161 0.4854 -0.3137
+vn -0.4629 0.2753 0.8425
+vn -0.8176 0.4852 -0.3099
+vn 0.7995 -0.1375 0.5847
+vn 0.9349 -0.1608 -0.3163
+vn 0.8581 0.4050 -0.3157
+vn 0.7335 0.3462 0.5849
+vn 0.8138 0.0041 0.5811
+vn 0.5435 0.5628 0.6229
+vn 0.1332 -0.7555 -0.6415
+vn 0.6296 0.4574 -0.6280
+vn 0.5421 0.5614 -0.6253
+vn -0.4563 -0.6281 0.6303
+vn 0.5427 -0.1055 0.8333
+vn 0.2826 0.4810 0.8299
+vn 0.4091 -0.2628 0.8738
+vn 0.3645 -0.6855 0.6303
+vn 0.2018 -0.3796 0.9029
+vn -0.3664 0.6891 -0.6253
+vn 0.3653 -0.6871 -0.6280
+vn 0.6871 0.3653 -0.6280
+vn 0.0000 -0.7764 0.6303
+vn 0.6068 0.7277 0.3197
+vn 0.6099 0.7273 0.3148
+vn 0.6083 0.7263 0.3201
+vn 0.6112 0.7258 0.3156
+vn 0.6081 0.7284 0.3156
+vn 0.6092 0.7255 0.3202
+vn 0.0630 -0.0338 0.9974
+vn -0.1027 0.0085 0.9947
+vn 0.1090 0.1627 0.9806
+vn -0.5926 0.7408 0.3162
+vn 0.1342 -0.4130 0.9008
+vn 0.2418 -0.7440 0.6229
+vn -0.0978 -0.4987 0.8612
+vn -0.9209 -0.2299 0.3148
+vn 0.3366 -0.8877 0.3141
+vn 0.3310 -0.8894 0.3153
+vn 0.3348 -0.8876 0.3163
+vn 0.3375 -0.8876 0.3136
+vn 0.5211 0.6220 0.5844
+vn 0.6091 0.7271 -0.3169
+vn -0.1217 0.5358 0.8355
+vn -0.2101 0.9250 -0.3166
+vn -0.1797 0.7912 0.5845
+vn -0.1168 0.4684 0.8758
+vn 0.5805 0.7553 0.3043
+vn -0.2283 0.9158 -0.3303
+vn -0.2633 0.9110 -0.3174
+vn 0.4829 0.8174 -0.3142
+vn 0.5202 0.7936 -0.3156
+vn 0.5202 0.7935 -0.3158
+vn 0.4446 0.6783 0.5850
+vn 0.1705 -0.4407 -0.8813
+vn 0.4813 0.8181 -0.3147
+vn 0.8629 0.3177 0.3930
+vn -0.1631 -0.9050 0.3930
+vn -0.6293 -0.6516 0.4235
+vn 0.2282 -0.7956 0.5612
+vn 0.3673 -0.6908 0.6229
+vn 0.5864 0.6382 0.4988
+vn 0.4587 0.6314 -0.6252
+vn -0.4574 -0.6296 -0.6280
+vn 0.2281 -0.9208 0.3165
+vn 0.2302 -0.9201 0.3168
+vn 0.2300 -0.9218 0.3120
+vn 0.2301 -0.9209 0.3146
+vn -0.2418 0.7440 0.6229
+vn 0.0978 0.4987 0.8612
+vn -0.1342 0.4130 0.9008
+vn 0.3350 0.7860 0.5196
+vn 0.8922 0.1573 0.4234
+vn -0.8629 -0.3177 0.3930
+vn -0.8231 0.0865 0.5612
+vn -0.2189 0.0000 0.9758
+vn -0.8532 -0.4126 0.3190
+vn -0.8552 -0.4089 0.3186
+vn -0.3673 0.6908 0.6229
+vn -0.2635 0.9124 -0.3132
+vn -0.2098 0.9257 -0.3148
+vn -0.2305 0.9245 -0.3035
+vn -0.1288 0.9390 0.3190
+vn -0.1246 0.9397 0.3186
+vn -0.1729 0.9309 0.3218
+vn -0.1635 0.9351 0.3144
+vn -0.6994 0.3411 -0.6280
+vn -0.0659 -0.9470 -0.3145
+vn -0.0266 -0.9513 -0.3070
+vn 0.8797 -0.3546 0.3168
+vn 0.7860 -0.3350 0.5196
+vn 0.1573 -0.8922 0.4234
+vn -0.0000 0.7671 -0.6415
+vn 0.3129 -0.3835 0.8689
+vn 0.4797 -0.2782 0.8322
+vn 0.1348 -0.7646 0.6303
+vn -0.1355 0.7686 -0.6253
+vn 0.5267 0.6883 0.4988
+vn -0.7401 0.2405 -0.6280
+vn 0.6994 -0.3411 -0.6280
+vn 0.7118 0.5811 0.3946
+vn 0.8180 0.1973 0.5404
+vn 0.2800 0.8616 0.4234
+vn 0.2299 -0.9209 0.3149
+vn 0.2290 -0.9193 0.3202
+vn 0.2320 -0.9187 0.3197
+vn 0.2300 -0.9190 0.3201
+vn 0.2279 -0.9212 0.3153
+vn 0.2314 -0.9214 0.3123
+vn -0.2281 0.9208 0.3165
+vn -0.2302 0.9201 0.3168
+vn -0.2300 0.9218 0.3120
+vn -0.2282 0.9202 0.3180
+vn -0.2509 -0.9149 0.3163
+vn -0.7440 0.2418 0.6229
+vn -0.3328 0.3606 0.8713
+vn 0.3421 0.7014 -0.6253
+vn -0.7804 0.0000 -0.6253
+vn -0.0659 -0.9469 0.3148
+vn -0.0663 -0.9450 0.3203
+vn -0.0633 -0.9455 0.3195
+vn -0.0649 -0.9455 0.3192
+vn -0.0659 -0.9466 0.3156
+vn -0.5214 -0.7926 0.3163
+vn -0.0094 -0.0765 0.9970
+vn -0.0094 -0.0764 0.9970
+vn 0.9225 0.2174 0.3190
+vn 0.9230 0.2206 0.3154
+vn 0.9208 0.2247 0.3187
+vn 0.9228 0.2191 0.3169
+vn 0.9228 0.2201 0.3161
+vn 0.9225 0.2191 0.3178
+vn 0.9231 0.2189 0.3163
+vn 0.9232 0.2171 0.3172
+vn 0.9223 0.2201 0.3178
+vn 0.9239 0.2165 0.3156
+vn 0.9214 0.2182 0.3215
+vn 0.5942 -0.7399 -0.3154
+vn 0.7300 -0.3574 0.5825
+vn 0.5078 -0.6323 0.5851
+vn 0.5056 -0.6295 0.5900
+vn 0.9463 -0.0149 -0.3230
+vn 0.8095 -0.0559 0.5845
+vn 0.9462 -0.0654 -0.3169
+vn 0.6429 0.6996 0.3119
+vn -0.8581 -0.4050 -0.3157
+vn -0.7335 -0.3462 0.5849
+vn -0.8138 -0.0041 0.5811
+vn 0.4782 -0.2230 0.8495
+vn -0.4091 0.2628 0.8738
+vn -0.3645 0.6855 0.6303
+vn -0.2018 0.3796 0.9029
+vn -0.2405 -0.7401 -0.6280
+vn 0.4234 0.3611 0.8309
+vn -0.5421 -0.5614 -0.6253
+vn 0.3513 0.2552 0.9008
+vn 0.6329 0.4598 0.6229
+vn 0.7215 -0.1727 0.6705
+vn 0.4703 0.0552 0.8808
+vn 0.2399 -0.7384 0.6303
+vn 0.0000 0.7823 0.6229
+vn 0.2438 0.4359 0.8663
+vn -0.0000 0.4342 0.9008
+vn 0.0269 -0.4684 0.8831
+vn -0.1497 -0.1394 0.9789
+vn -0.3403 -0.6978 0.6303
+vn -0.8922 -0.1573 0.4234
+vn -0.3350 -0.7860 0.5196
+vn -0.4651 0.8292 -0.3102
+vn -0.5140 0.7976 -0.3155
+vn 0.7422 -0.2412 -0.6253
+vn 0.8231 -0.0865 0.5612
+vn -0.8353 0.4476 0.3191
+vn 0.0518 -0.0720 0.9961
+vn -0.1309 -0.0862 0.9876
+vn 0.1163 -0.8029 0.5847
+vn 0.1360 -0.9389 -0.3163
+vn 0.1089 0.7747 0.6229
+vn 0.1086 0.7728 -0.6253
+vn 0.4834 0.7806 0.3961
+vn -0.0000 0.9059 0.4234
+vn 0.7159 0.4664 0.5196
+vn -0.7343 -0.5142 0.4431
+vn -0.6339 -0.6339 0.4431
+vn -0.5142 -0.7343 0.4431
+vn -0.3789 -0.8125 0.4431
+vn 0.5142 -0.7343 0.4431
+vn 0.6339 -0.6339 0.4431
+vn 0.7343 -0.5142 0.4431
+vn 0.8125 -0.3789 0.4431
+vn 0.7343 0.5142 0.4431
+vn 0.6339 0.6339 0.4431
+vn 0.5142 0.7343 0.4432
+vn 0.5142 0.7343 0.4431
+vn 0.3789 0.8125 0.4431
+vn -0.5142 0.7343 0.4432
+vn -0.6339 0.6339 0.4432
+vn -0.6339 0.6339 0.4431
+vn -0.7343 0.5142 0.4431
+vn -0.8125 0.3789 0.4431
+s off
+f 2145//600 2144//600 2391//600 1457//600
+f 2889//601 2655//601 2145//601 1457//601 2393//601
+f 1467//602 2296//602 2243//602 2241//602
+f 2244//603 2296//603 1467//603 3019//603 2754//603
+f 3020//604 1481//604 2418//604 2135//604 2649//604
+f 2919//605 2418//605 1481//605 2137//605 2638//605 3023//605
+f 2437//606 2439//606 1493//606 2511//606 2436//606
+f 2434//607 2511//607 1493//607 2440//607 2435//607
+f 3021//608 1510//608 2084//608 2085//608 2918//608
+f 2589//609 2084//609 1510//609 2411//609 2908//609 3024//609
+f 2431//610 1523//610 2225//610 2226//610
+f 2224//611 2225//611 1523//611 2433//611
+f 3025//612 3022//612 1540//612 2304//612
+f 3026//613 2820//613 2304//613 1540//613 2497//613 2984//613
+f 2478//614 2479//614 1554//614 2133//614 2132//614
+f 2131//615 2133//615 1554//615 2480//615 2477//615
+f 2654//616 2145//616 2771//616 2773//616
+f 2661//617 2662//617 2630//617 2631//617 2883//617 2887//617 2885//617
+f 2659//618 2566//618 2565//618 2570//618 2790//618
+f 1045//616 2561//616 2560//616 2660//616
+f 2889//619 2772//619 2771//619 2145//619 2655//619
+f 2562//620 2563//620 1045//620 2660//620
+f 2790//619 2569//619 2567//619 2568//619 2659//619
+f 2884//621 2629//621 2630//621 2662//621 2663//621 2886//621 2888//621
+f 2563//622 2564//622 1045//622
+f 2700//623 2701//623 2696//623 2694//623 2698//623
+f 2652//621 2993//621 2618//621 2617//621 2651//621
+f 2993//624 2653//624 2650//624 2616//624 2618//624
+f 2700//624 2699//624 2695//624 2697//624 2701//624
+f 2855//624 2858//624 2764//624 2763//624 2737//624 2738//624 2851//624
+f 2854//624 2669//624 2668//624 2769//624 2768//624
+f 2853//625 2770//625 2769//625 2668//625 2667//625
+f 2852//625 2736//625 2737//625 2763//625 2762//625 2857//625 2856//625
+f 2800//625 2576//625 2577//625 2758//625 2759//625 2756//625 2752//625 2819//625
+f 2777//626 1049//626 2584//626 2580//626 2581//626
+f 3019//627 2753//627 2755//627 2760//627 2757//627 2575//627 2574//627 2800//627 2819//627 2244//627 2754//627
+f 2579//628 2582//628 1049//628 2777//628 2578//628
+f 2582//629 2583//629 1049//629
+f 2867//630 2840//630 2841//630 2844//630 2843//630
+f 3018//630 2874//630 2873//630 2870//630 2848//630 2847//630
+f 2891//631 2892//631 3006//631 2621//631 2620//631 2552//631 2551//631
+f 3018//632 2847//632 2846//632 2869//632 2871//632 2872//632
+f 2868//632 2845//632 2844//632 2841//632 2842//632
+f 2920//633 1040//633 2904//633 2906//633
+f 2899//634 2907//634 2766//634 2767//634 2898//634
+f 3020//634 2649//634 2648//634 2418//634 3015//634 2639//634 2647//634
+f 2894//634 2728//634 2642//634 2641//634 2646//634
+f 2904//635 1040//635 2903//635
+f 2891//636 2551//636 2553//636 2619//636 2622//636 3005//636 2890//636
+f 2956//637 2958//637 2781//637 2780//637 2782//637
+f 2953//637 2963//637 2623//637 2624//637 2954//637
+f 1040//638 2920//638 2905//638 2902//638
+f 2901//637 2900//637 2765//637 2766//637 2907//637
+f 2894//637 2645//637 2644//637 2643//637 2728//637
+f 3023//638 2638//638 2640//638 3015//638 2418//638 2919//638
+f 2761//639 2849//639 2686//639 2681//639 2682//639
+f 2893//639 2680//639 2679//639 2688//639 2690//639 2676//639 2675//639
+f 2955//639 2954//639 2624//639 2625//639 2962//639
+f 2956//639 2783//639 2779//639 2778//639 2958//639
+f 2795//640 2796//640 2948//640 2947//640 2940//640 2937//640 2933//640 2934//640 2997//640
+f 2943//640 2999//640 1032//640 2931//640 2932//640 2942//640
+f 2761//640 2684//640 2683//640 2685//640 2849//640
+f 2893//640 2675//640 2674//640 2689//640 2687//640 2678//640 2677//640
+f 2931//640 1032//640 2930//640
+f 2861//641 3013//641 2744//641 2745//641 2743//641
+f 2749//641 2636//641 2637//641 2657//641 2658//641 2751//641
+f 2997//641 2936//641 2935//641 2938//641 2939//641 2945//641 2946//641 2949//641 2794//641 2795//641
+f 2929//642 2928//642 1032//642 2999//642 2944//642 2941//642
+f 2692//643 2691//643 2825//643 2672//643 2671//643 2979//643 2980//643
+f 2861//644 2742//644 2747//644 2746//644 3013//644
+f 2750//645 2656//645 2657//645 2637//645 2635//645 2748//645
+f 2980//646 2981//646 2670//646 2673//646 2824//646 2693//646 2692//646
+f 2882//647 1029//647 2881//647
+f 2862//648 2863//648 1029//648 2882//648
+f 2876//649 2995//649 2627//649 2626//649 2875//649
+f 3021//650 2918//650 2588//650 2084//650 3010//650 2909//650 2917//650
+f 3014//650 2996//650 2912//650 2911//650 2916//650
+f 1029//651 2863//651 2864//651 2879//651
+f 2878//652 2877//652 2628//652 2627//652 2995//652
+f 3014//653 2915//653 2914//653 2913//653 2996//653
+f 3024//653 2908//653 2910//653 3010//653 2084//653 2589//653
+f 2879//654 2880//654 1029//654
+f 2964//655 2978//655 2829//655 2828//655 2830//655
+f 2834//652 2998//652 2586//652 2587//652 2833//652
+f 2835//656 2832//656 2585//656 2586//656 2998//656
+f 2964//657 2831//657 2827//657 2826//657 2978//657
+f 2921//656 2714//656 2715//656 2726//656 2718//656 2719//656 2960//656
+f 2959//657 2961//657 2723//657 2722//657 2725//657 2711//657 2710//657
+f 2991//658 1023//658 2990//658
+f 2716//659 2727//659 2713//659 2712//659 2921//659 2960//659 2717//659
+f 2961//659 2959//659 2709//659 2708//659 2724//659 2721//659 2720//659
+f 2571//660 2572//660 1023//660 2991//660 2989//660
+f 2735//661 2896//661 2895//661 2923//661 2927//661 2924//661 2734//661
+f 2865//662 2733//662 2611//662 2612//662 2605//662 2608//662
+f 2866//662 2601//662 2602//662 2599//662 3011//662
+f 2988//663 2992//663 1023//663 2572//663 2573//663
+f 2896//664 2735//664 2224//664 2925//664 2926//664 2922//664 2897//664
+f 2559//665 2554//665 2557//665 2732//665 2729//665 2850//665 2801//665
+f 2733//666 2865//666 2607//666 2606//666 2609//666 2610//666
+f 3011//666 2600//666 2603//666 2604//666 2866//666
+f 2304//667 2994//667 2982//667 2987//667 3022//667 3025//667
+f 2821//667 2823//667 2803//667 2802//667 3000//667
+f 2950//668 2951//668 1025//668 3003//668
+f 2799//667 2798//667 2792//667 2793//667 2985//667
+f 3003//669 1025//669 3002//669
+f 2850//670 2730//670 2731//670 2556//670 2555//670 2558//670 2801//670
+f 3007//671 3009//671 2776//671 2774//671 3016//671
+f 2838//671 2859//671 2740//671 2741//671 2837//671
+f 3026//671 2984//671 2983//671 2994//671 2304//671 2820//671
+f 3004//672 1025//672 2951//672 2952//672
+f 2822//671 3001//671 2804//671 2803//671 2823//671
+f 2986//671 2791//671 2792//671 2798//671 2797//671
+f 2810//673 2860//673 2706//673 2705//673 2806//673 2809//673
+f 2957//673 2813//673 2811//673 2817//673 2815//673 2702//673 2704//673
+f 2859//673 2839//673 2836//673 2739//673 2740//673
+f 3009//673 3008//673 3017//673 2775//673 2776//673
+f 2974//674 2591//674 2592//674 1037//674 2969//674 2973//674 2976//674
+f 2965//674 2633//674 2634//674 3012//674 2968//674
+f 2807//674 2805//674 2707//674 2706//674 2860//674 2808//674
+f 2957//674 2704//674 2703//674 2816//674 2818//674 2812//674 2814//674
+f 2969//674 1037//674 2970//674
+f 2784//675 2664//675 2665//675 2597//675 2596//675
+f 2786//675 2595//675 2594//675 2614//675 2615//675 2789//675
+f 2971//676 2972//676 1037//676 2592//676 2590//676 2975//676 2977//676
+f 3012//675 2634//675 2632//675 2966//675 2967//675
+f 2613//677 2614//677 2594//677 2593//677 2787//677 2788//677
+f 2785//678 2598//678 2597//678 2665//678 2666//678
+s 1
+f 1547//679 1542//680 1541//681 1546//682 1595//682 1599//683 1587//682 1593//684 1592//682
+f 2552//685 1591//685 1587//685 1599//685 1627//685 2553//685 2551//685
+f 2060//686 1026//687 1020//687 2059//688
+f 2059//688 1020//689 1024//689 1028//689 2062//690 2061//691 2063//692
+f 1225//693 1226//693 1223//693 1222//693 1295//693 3027//693 1294//693 1278//693 1286//693 1287//693
+f 2555//694 2556//694 1518//694 2558//694
+f 1572//695 1567//695 1517//695 1516//695 2557//695 2554//695 2559//695 1519//695 1564//695 1577//695 1533//695
+f 1346//696 1347//696 1349//697 1350//698 1354//696 1351//699 1353//700 1348//696 1345//696 3028//696
+f 1671//701 1666//702 1622//701 1621//701 1623//703 1624//701 1663//704 1676//701 1637//705
+f 2064//706 2065//707 1027//708 1021//708 1026//708 2060//686
+f 1550//709 1549//709 1548//709 2066//710 2067//711 2068//712 1579//709 1581//709 1582//709 1584//709 1583//709
+f 2563//713 2562//713 1205//713 2564//713
+f 1159//714 1134//714 1126//714 1155//714 2070//715 2069//716 2071//716 2073//716 2072//717 1177//714 1156//714 1157//714 1158//714 2570//714 2565//714 2566//714 1164//714 2560//714 2561//714 1181//714
+f 2569//718 1178//718 1210//718 2568//718 2567//718
+f 1064//719 1028//719 1024//719 1069//719 1068//719
+f 2572//720 2571//720 1672//720 1688//720 1654//720 1657//720 1670//720 1673//720 2573//720
+f 1061//721 1055//721 1043//721 1034//721 1062//721
+f 1035//722 1065//722 1062//722 1034//722 1033//722
+f 1107//723 1106//723 1094//723 1092//723
+f 1065//708 1035//708 1022//708 1030//708
+f 1446//724 1445//724 3029//724 1469//724 1464//724
+f 1248//725 1217//725 1219//725 1265//725 3030//725
+f 1841//726 1891//726 1898//726 1881//726
+f 1053//727 1044//727 1021//727 1027//727
+f 2075//728 2074//729 1068//730 1069//730 1075//730 2077//731 2076//732
+f 1891//733 1847//733 1876//733 1898//733
+f 1039//734 1041//734 1056//734 1063//734
+f 1042//735 1054//735 1058//735 1057//735 1078//735 1036//735
+f 1051//736 1054//736 1042//736 1048//736 1047//736 1052//736
+f 1739//737 1779//737 1768//737 1737//737
+f 1440//738 2574//738 2575//738
+f 2577//739 2576//739 1419//739 1420//739 1423//739 2581//739 2580//739 2584//739 1422//739 1421//739 1393//739 1418//739 2080//740 2079//741 2081//741 2078//742
+f 2583//743 2582//743 2579//743 2578//743 1442//743 1476//743
+f 1624//744 1623//744 1611//744 1609//744
+f 2586//745 2585//745 1817//745 1813//745 1857//745 1866//745 2587//745
+f 2083//746 1963//687 1952//687 2082//747
+f 2588//748 2085//748 2084//748
+f 1200//725 1188//725 1190//725 1199//725
+f 2591//749 1152//749 1163//749 1135//749 1138//749 1150//749 2590//749 2592//749
+f 1077//750 1082//750 1071//750 1073//750
+f 1828//751 1794//751 1789//751 1791//751
+f 1088//722 1084//722 1039//722 1063//722
+f 1057//752 2593//752 2594//752 2595//752 1089//752 1090//752 1091//752 1078//752
+f 2598//753 1052//753 1047//753 1090//753 1089//753 2596//753 2597//753
+f 2007//754 2009//755 2010//754 2008//756 2040//754 2038//757 2033//758 2052//759 2051//754
+f 1235//760 1236//761 1237//760 1239//762 1240//763 1244//760 1241//764 1243//765 1238//760
+f 2086//766 2088//767 1196//768 1198//768 1199//768 1197//768 1249//768 1255//768 1218//768 2087//769
+f 2089//770 1568//771 1569//772 2604//772 2603//772 2600//772 2090//773 2091//774 2092//774
+f 1623//775 1621//775 1620//775 2599//775 2602//775 2601//775 1606//775 2608//775 2605//775 2612//775 2611//775
+f 2606//776 2607//776 1573//776 1574//777 1575//778 1625//776 2610//776 2609//776
+f 1079//779 1087//779 1085//779 1070//779 1084//779 1088//779
+f 1533//780 1531//780 1555//780 1572//780
+f 2094//781 2093//782 1122//783 1120//783 1143//783 2095//784
+f 1154//779 1144//779 1145//779 1146//779
+f 2001//779 2002//779 3080//779 3099//779
+f 2003//779 2024//779 3099//779 3080//779
+f 1038//779 3052//779 3081//779
+f 1036//779 1078//779 1091//779 1096//779 1108//779 1059//779 1060//779 3081//779 3052//779
+f 1590//785 1588//785 1603//785 3031//785 1626//785
+f 1832//786 1858//787 1857//788 1813//786 1811//786 1814//786 1815//786 1852//786 2096//789 2097//790
+f 1986//791 1997//791 2025//791 1990//791
+f 2614//792 2613//792 1108//792 1096//792 1094//792 1106//792 2615//792
+f 2618//793 2616//793 1268//793 1231//793 1226//793 1269//793 2617//793
+f 2099//794 2098//795 1648//796 1645//796 1678//796 2100//797
+f 2101//798 2103//799 1738//800 1736//800 1765//800 2102//801
+f 1093//802 1095//802 1104//802 1105//802
+f 1721//737 1709//737 1711//737 1720//737
+f 1151//803 1147//804 1105//803 1104//803 1106//803 1107//805 1144//803 1154//803 1123//806
+f 2105//807 2104//808 1651//809 1628//809 1629//809 1632//809 1653//809 1682//809 1631//809 1630//809 2622//809 2619//809 1627//809 2107//810 2106//811 2108//811
+f 1602//812 2620//812 2621//812
+f 1114//813 1115//814 1112//815 1109//815 3032//815 1110//815 1111//815 1113//815 1116//815
+f 1459//816 1448//816 1401//816 1413//816
+f 1110//779 3032//779 3034//779
+f 1109//779 1086//779 1072//779 1071//779 1082//779 1124//779 1125//779 3034//779 3032//779
+f 1184//726 1182//726 1183//726 1185//726 3033//726 1163//726 1152//726
+f 2110//817 2109//818 1116//819 1113//819 1127//819 1126//819 2111//820
+f 1649//821 1644//821 1680//821 1679//821
+f 1134//822 1130//822 1111//822 1110//822 3034//822 1125//822
+f 1749//823 1700//823 1728//823 1753//823 1744//823
+f 1744//824 1740//824 1741//824 1743//824 1746//825 1747//826 1750//824 1748//827 1749//828
+f 2053//736 2017//736 2012//736 2040//736
+f 1144//829 1107//829 1092//829 1145//829
+f 2113//830 2114//831 1198//832 1193//832 1195//832 2112//833
+f 1105//829 1147//829 1139//829 1093//829
+f 2117//834 2115//835 2048//736 2014//736 2016//736 2116//836
+f 1097//837 1139//837 1147//837 1102//837
+f 2118//838 2119//839 2111//820 1126//840 1134//840 1125//840 1124//840 1119//840 1118//840 1117//840
+f 1359//841 1362//841 1348//841 1353//841 1352//841 1360//841
+f 1246//842 1202//842 1187//842 1247//842 3035//842
+f 2624//843 2623//843 1781//843 1747//843 1752//843 1780//843 2625//843
+f 2095//784 1143//687 2120//844
+f 1911//845 1909//845 1921//845 1923//845 3036//845
+f 2121//846 1494//687 1543//687 1545//687 2122//847
+f 1938//848 1970//848 1958//848 1936//848
+f 2627//849 2628//849 1921//849 1909//849 1907//849 1922//849 2626//849
+f 1882//850 1878//850 1877//850 1881//850 1898//850 1930//850 1886//850 1925//850 3037//850 1901//850
+f 2125//851 2070//715 1155//852 1133//852 1166//852 2124//853 2123//854
+f 2126//855 1662//687 2128//856 2127//857
+f 3071//779 3068//779 1552//779 3086//779 3070//779
+f 1553//779 3068//779 3071//779
+f 1589//779 3073//779 3097//779 1613//779 1625//779 1575//779 1576//779 3070//779 3086//779
+f 1608//779 3097//779 3073//779
+f 1539//858 1541//859 1537//860 1536//861 1604//862 1603//859 1588//863 1594//864 1595//859
+f 1324//865 1350//698 1349//697 1305//865 1303//865 1306//865 1307//865 1344//865 2129//866 2130//867
+f 1700//868 1749//828 1748//827 1699//869 1698//870 1694//870 1693//871 1695//872 1696//873 1697//874
+f 2629//852 1178//852 1170//852 1132//852 1156//852 1177//852 2631//852 2630//852
+f 1695//875 1693//875 1730//875 1732//875 3038//875
+f 2634//876 2633//876 2132//876 2133//876 2131//876 2632//876
+f 2112//833 1195//687 2134//877
+f 2637//802 2636//802 2027//802 1996//802 1995//802 2031//802 2030//802 2635//802
+f 1092//878 1094//879 1095//878 1093//880 1139//878 1137//881 1121//882 1146//883 1145//878
+f 1530//884 1558//885 1557//886 1508//887 1506//887 1509//888 1511//887 1551//887 1563//887
+f 1451//889 1452//890 1450//891 1512//892 1509//893 1506//893 1505//893 1507//894 1502//893 1501//893
+f 2137//895 2138//896 2640//897 2638//897
+f 2647//898 2639//899 1690//899 2646//899 2641//899 2642//899 1679//899 1680//899 1678//899 1677//899 2136//900 2139//901
+f 2645//902 1726//902 1701//902 2643//902 2644//902
+f 2648//903 2649//903 2135//903
+f 1076//904 1115//814 1114//813 1075//905 1069//906 1073//907 1071//908 1072//907 1074//907
+f 1950//909 1947//910 1946//911 1949//909 1993//909 1997//909 1986//909 2141//912 2140//913 1991//909
+f 2651//914 2617//914 1269//914 1267//914 2652//914
+f 2650//915 2653//915 1266//915 2142//916 2143//917 1281//915 1317//915 1293//915 1268//915 2616//915
+f 2124//853 1166//687 1167//687 2146//918
+f 2654//687 2144//687 2145//687
+f 1994//919 1992//919 2028//919 2658//919 2657//919 2656//919 2029//919 3039//919
+f 1241//687 1244//687 2148//920 2147//921
+f 1207//922 1208//922 1176//922 1173//922 1209//922
+f 1211//923 1209//923 1173//923 1172//923 3040//923 1215//923 1214//923
+f 1234//924 1194//924 1196//924 2088//767 2151//925 2149//926 2150//927
+f 2659//928 2568//928 1210//928 1169//928 1162//928 1164//928 2566//928
+f 2560//929 1164//929 1162//929 1179//929 3041//929 1205//929 2562//929 2660//929
+f 1474//930 1473//930 1438//930 1435//930
+f 3061//779 3042//779 1203//779 3053//779 3033//779 1185//779
+f 3060//779 3043//779 3042//779 3061//779
+f 1191//779 3043//779 3060//779
+f 1204//779 3085//779 3069//779 1135//779 1163//779 3033//779 3053//779
+f 2970//779 1037//779 2972//779 1153//779 1136//779 3069//779 3085//779
+f 2661//931 1165//931 1160//931 1174//931 1206//931 2663//931 2662//931
+f 2154//932 2153//933 1888//934 1848//934 1843//935 1842//936 1847//934 1891//934 1895//934 1883//934 1889//934 2152//937 2155//938
+f 1196//939 1194//939 1193//939 1198//939
+f 2046//689 2039//689 2043//689 1999//689 2026//689 2045//689
+f 2157//940 2158//941 1750//942 1747//942 1781//942 2159//943 2156//944
+f 3043//945 1191//945 1189//945 1201//945 1203//945 3042//945
+f 1202//946 1201//946 1189//946 1187//946
+f 1197//947 1199//947 1190//947 1192//947
+f 2665//948 2664//948 1103//948 1098//948 1100//948 2162//949 2161//950 2160//951 2666//948
+f 1345//952 1348//952 1362//952 1365//952 1364//952 1380//952 3044//952
+f 1538//953 1534//953 1535//953 1537//953 1541//681 1542//680 1545//953 1543//954 1544//955
+f 1683//956 1681//956 1641//956 1639//956
+f 1233//745 1224//745 1229//745 1176//745 1208//745
+f 1224//957 1233//957 1214//957 1215//957 3045//957 1220//957
+f 1343//958 1322//958 1323//958 1328//958 1332//958 1342//958 2667//958 2668//958 2669//958
+f 1985//959 1982//959 1981//959 1984//959 2000//959 2028//960 1989//961 2024//962 2003//959
+f 1758//963 1755//963 1756//963 1757//963 1759//964 1760//965 1764//963 1761//966 1763//967
+f 2164//968 2163//969 1968//970 1969//971 2004//971 1973//971 1974//972 1975//973 2023//971 2021//971 2673//971 2670//971 2018//971 2166//974 2165//975 2167//975
+f 2019//976 2671//976 2672//976
+f 1894//725 1893//725 1935//725 1934//725 1931//725 1929//725
+f 1846//977 1843//977 1875//977 2674//977 2675//977 2676//977 2170//978 2171//979 2169//980 2168//981
+f 1192//924 1239//924 1249//924 1197//924
+f 1733//982 1731//982 1734//982 1753//982 1728//982 1727//983 2172//984 2173//985 2159//943 1781//982 1783//982 1784//982 1785//982 3046//982
+f 2686//986 1880//986 1879//986 1851//986 2682//986 2681//986
+f 2688//987 2679//987 2680//987 1849//987 2174//988 2175//989 2170//978 2676//987 2690//987
+f 2683//990 2684//990 1850//990 2677//990 2678//990 2687//990 2689//990 2674//990 1875//990 1877//990 1878//990 2685//990
+f 2176//991 1252//992 1254//993 1297//993 1258//993 1259//994 1261//995 1315//993 1313//993 1311//993 1310//993 2177//996 2178//997 2180//997 2179//998
+f 2182//999 1175//687 1228//687 1230//687 2181//1000
+f 2692//1001 2693//1001 2021//1001 2009//1001 2007//1001 2022//1001 2691//1001
+f 1706//1002 1707//1002 1688//1002 1672//1002 1705//1002
+f 1404//1003 1402//1003 1414//1003 1416//1003 3047//1003 3048//1003
+f 2698//1004 2694//1004 2696//1004 1271//1004 1269//1004
+f 2695//1005 2699//1005 1274//1005 1293//1005 1320//1005 1280//1005 1316//1005 1296//1005 1276//1005 2697//1005
+f 1619//1006 1621//1006 1612//1006 1614//1006
+f 2698//1007 1269//1007 1226//1007 1225//1007 1274//1007 2699//1007 2700//1007
+f 2701//1008 2697//1008 1276//1008 1222//1008 1223//1008 1271//1008 2696//1008
+f 1271//1009 1223//1009 1221//1009 3050//1009 3049//1009 1272//1009
+f 1172//779 1171//779 3075//779 3040//779
+f 1213//779 3098//779 3049//779 3050//779 3076//779 1212//779
+f 1272//779 3049//779 3098//779
+f 3055//779 3045//779 1215//779 3040//779 3075//779 3076//779 3050//779 1221//779
+f 3055//779 1220//779 3045//779
+f 1609//1010 1664//1010 1663//1010 1624//1010
+f 1296//1011 1295//1011 1222//1011 1276//1011
+f 2184//1012 2148//920 1244//1013 1240//1013 1255//1013 2703//1013 2704//1013 2702//1013 2183//1014 2185//1015
+f 1255//1016 1240//1016 1216//1016 1218//1016
+f 2707//1017 1257//1017 1237//1017 1236//1017 3051//1017 1264//1017 2705//1017 2706//1017
+f 1980//1018 1949//1018 1946//1018 1981//1018
+f 1731//1019 1729//1019 1697//1019 1696//1019 1735//1019 1734//1019
+f 1265//779 1246//779 3035//779 3030//779
+f 1247//779 1248//779 3030//779 3035//779
+f 1504//1020 1506//1020 1516//1020 1517//1020
+f 1126//1021 1127//1021 1133//1021 1155//1021
+f 1285//687 2187//1022 2186//1023
+f 1300//1024 1302//1025 1303//1024 1301//1026 1349//1024 1347//1024 1325//1024 1357//1024 1356//1024
+f 1999//1027 2043//1028 2042//1029 1998//1030 1997//1031 1993//1031 1992//1031 1994//1031 1995//1031 1996//1032
+f 2714//1033 1778//1033 1777//1034 1776//1035 2719//1033 2718//1033 2726//1033 2715//1033
+f 2716//1036 2717//1036 1773//1036 2720//1036 2721//1036 2724//1036 2708//1036 2709//1036 1772//1036 1769//1036 1774//1036 2712//1036 2713//1036 2727//1036
+f 2725//1037 2722//1037 2723//1037 1770//1038 2188//1039 2189//1040 2190//1041 2710//1037 2711//1037
+f 2191//1042 1411//1043 1406//1043 1408//1043 2194//1044 2193//1045 2192//1046
+f 2195//1047 1659//1048 1669//1048 2197//1049 2198//1050 2196//1051
+f 2643//1052 1701//1052 1694//1052 1649//1052 1679//1052 2642//1052 2728//1052
+f 1279//1053 1258//1053 1297//1053 1298//1053 1299//1053
+f 1038//1054 1041//1054 1039//1054 1084//1054 1070//1054 1033//1054 1034//1054 1043//1055 1044//1056 1050//1054 1046//1057 1048//1058 1042//1054 1036//1054 3052//1054
+f 2201//1059 2200//1060 2199//1061 1291//1062 1287//1062 1286//1062 1288//1062 1289//1062 1290//1062 1292//1062 1337//1063 1336//1064 2202//1065
+f 1636//1066 2203//1067 2204//1068 1618//1066 1620//1069 1621//1066 1619//1066 1666//1066 1669//1070
+f 2206//1071 2207//1072 1186//1073 1182//1074 1184//1075 1204//1076 3053//1074 1203//1074 1201//1074 1199//1074 1198//1074 2114//831 2205//1071 2208//1071
+f 1515//1077 2731//1077 2730//1077
+f 2209//1078 2211//1079 1513//1080 2729//1080 2732//1080 1516//1080 1514//1080 1567//1080 1570//1080 1532//1080 2210//1081
+f 1102//783 1104//783 1095//783 1097//783
+f 1339//1082 1334//1082 1372//1082 1371//1082
+f 2187//1022 1285//793 1277//793 1281//793 2143//917 2212//1083 2213//1084
+f 1444//1085 1447//1085 1463//1085 1466//1085 1465//1085 1483//1085
+f 1292//1086 1290//1086 1319//1086 1318//1086
+f 1321//779 1374//779 1375//779 3056//779 3064//779
+f 1329//779 1328//779 1323//779 1289//779 1288//779 3064//779 3056//779
+f 1280//1087 1320//1087 1286//1087 1278//1087
+f 1294//779 3027//779 3100//779
+f 3027//779 1295//779 1296//779 1316//779 3100//779
+f 1625//1088 1613//1088 1611//1088 1623//1088 2611//1088 2733//1088 2610//1088
+f 2214//1089 2215//1090 2044//1091 2041//1091 2054//1091 2216//1092 2217//1093
+f 2220//1094 2219//1095 1383//1096 1340//1096 1335//1097 1334//1098 1339//1096 1386//1096 1390//1096 1378//1096 1384//1096 2218//1099 2221//1100
+f 1310//1101 1308//1101 1307//1101 1306//1101
+f 1719//1102 1717//1102 1715//1102 1714//1102
+f 1304//1103 1302//1103 1313//1103 1315//1103 3054//1103
+f 2222//1104 1716//687 2223//1105
+f 2734//687 2226//687 2225//687 2224//687 2735//687
+f 1971//1106 1956//1106 1961//1106 1960//1106 1969//1106 1968//1106
+f 1309//1107 1311//1107 1303//1107 1305//1107
+f 1847//1108 1842//1108 1877//1108 1876//1108
+f 1369//1109 1370//1109 1335//1109 1340//1109
+f 2227//1110 2118//838 1117//1111 1080//1111 1081//1111 1083//1111 1119//1111 1124//1111 1082//1111 1077//1111 1066//1111 1064//1111 1068//1111 2074//729 2228//1112
+f 1840//1113 1836//1113 1837//1114 1839//1113 1842//936 1843//935 1846//1113 1844//1115 1845//1116
+f 2736//1117 1342//1117 1332//1117 1337//1117 1292//1117 1318//1117 1341//1117 2738//1117 2737//1117
+f 1752//1118 1747//826 1746//825 1751//1118 1795//1118 1799//1118 1788//1118 1793//1118 2229//1119 2230//1120
+f 2032//1121 2041//1122 2040//1123 2012//1121 2010//1121 2013//1124 2014//1125 2048//1126 2049//1121
+f 1221//1127 1223//1127 1226//1128 1227//1129 1230//1127 1228//1130 1229//1131 1224//1127 1220//1127 3055//1127
+f 2008//1132 2010//1132 2019//1132 2020//1132
+f 2231//1133 1344//823 1307//823 1308//823 2232//1134 2233//1135
+f 1357//779 1368//779 1355//779 1356//779
+f 2235//1136 1326//1107 1324//1107 2130//867 2234//1137
+f 2740//823 2739//823 1309//823 1305//823 1349//823 1358//823 2741//823
+f 2028//1138 2000//1138 2025//1138 2743//1138 2745//1138 2744//1138 2027//1138 2636//1138 2749//1138 2751//1138 2658//1138
+f 2742//1139 2238//1140 2237//1141 2239//1141 2236//1142 2045//1139 2026//1139 2746//1139 2747//1139
+f 2030//1143 2047//1143 2056//1143 2029//1143 2656//1143 2750//1143 2748//1143 2635//1143
+f 2755//1144 2753//1145 2240//1146 1472//1144 1474//1144 1475//1144 1477//1144 1476//1144 1442//1144 1441//1144 1440//1144 2575//1144 2757//1144 2760//1144
+f 2078//742 2242//1147 2241//1148 2243//1149 2752//1149 2756//1149 2759//1149 2758//1149 2577//1149
+f 2188//1039 1770//1038 1771//1150 1805//1150 1775//1150 1776//1035 1777//1034 1823//1150 1821//1150 1819//1150 1818//1150 2246//1151 2245//1152 2248//1152 2247//1153
+f 1836//842 1840//842 1850//842 2684//842 2761//842 2682//842 1851//842 1830//842 1831//842
+f 1603//779 1604//779 3072//779 3031//779
+f 1605//779 1626//779 3031//779 3072//779
+f 2249//1154 2251//1155 2250//1156 1361//1157 1358//1157 1363//1157 1367//1157 1366//1158 1365//1159 1362//1157 1359//1160
+f 2253//1161 2255//1162 1338//1163 1335//1163 1370//1163 2762//1163 2763//1163 2764//1163 2252//1164 2254//1165
+f 2766//1166 2765//1166 1730//1166 1693//1166 1687//1166 1689//1166 2767//1166
+f 1373//1167 1377//1167 1330//1167 1331//1167
+f 2770//1168 1373//1168 1331//1168 1329//1168 3056//1168 1375//1168 2768//1168 2769//1168
+f 2231//1133 2129//866 1344//687
+f 2771//1106 2772//1106 2256//1169 2257//1170 2146//918 1167//1106 1160//1106 1165//1106 2773//1106
+f 2775//1171 1327//1171 1325//1171 1347//1171 1363//1171 2774//1171 2776//1171
+f 1928//947 1897//947 1894//947 1929//947 1927//947
+f 1346//779 3028//779 3044//779 1380//779 3059//779 3048//779 3047//779 3088//779
+f 1345//779 3044//779 3028//779
+f 1399//779 1404//779 3048//779 3059//779
+f 1416//779 1366//779 1367//779 3088//779 3047//779
+f 2777//1010 2581//1010 1423//1010 1424//1010 1429//1010 1433//1010 1441//1010 1442//1010 2578//1010
+f 1254//1172 1242//1172 1298//1172 1297//1172
+f 1327//1173 1368//1173 1357//1173 1325//1173
+f 2782//1174 2780//1174 2781//1174 1784//1174 1783//1174
+f 1787//1175 2778//1175 2779//1175 2783//1175 1786//1175 1801//1175 1828//1175 1791//1175 1824//1175 1804//1175
+f 2260//1176 2259//1177 1099//837 1101//837 2258//1178
+f 1841//1179 1842//1179 1839//1179 1838//1180 1900//1179 1899//1179 1884//1179 1890//1181 1891//1179
+f 2263//1182 2264//1183 1896//1184 1895//1184 1891//1184 1890//1184 1892//1184 1893//1184 1894//1184 1897//1184 1948//1185 2261//1186 2262//1182
+f 2266//1187 2265//1188 1460//1189 1461//1190 1500//1190 1465//1190 1466//1191 1468//1192 1520//1190 1518//1190 2556//1190 2731//1190 1515//1190 2267//1193 2268//1194 2269//1194
+f 2732//1195 2557//1195 1516//1195
+f 1055//1196 1053//1196 1027//1196 2065//707 2270//1197 2062//690 1028//1196 1064//1196 1066//1196 1067//1196 1087//1196 1079//1196 1061//1196 1062//1196 1065//1196 1030//1196
+f 1371//1198 1393//1198 1386//1198 1339//1198
+f 2272//1199 2271//1200 1834//1086 1832//1086 2097//790
+f 1394//779 1395//779 3058//779 3062//779
+f 1396//779 1417//779 3062//779 3058//779
+f 1684//1085 1680//1085 1644//1085 1643//1085
+f 1498//1201 1431//1201 1479//1201 1499//1201 3057//1201
+f 1757//1202 1774//1202 1739//1202 1737//1202
+f 1330//1002 1377//1002 1396//1002 3058//1002 1395//1002
+f 3059//1203 1380//1203 1364//1203 1397//1203 1398//1203 1399//1203
+f 1397//1052 1360//1052 1352//1052 1398//1052
+f 1708//1204 1710//1205 1711//1204 1709//1206 1759//1204 1757//1207 1737//1204 1768//1208 1767//1204
+f 3061//1209 1185//1209 1183//1209 1141//1209 1142//1210 2273//1211 2274//1212 2275//1212 2134//877 1195//1209 1193//1209 1190//1209 1189//1209 1191//1209 3060//1209
+f 2276//1213 2278//1214 1382//1215 1418//1215 1393//1215 1371//1215 1372//1215 1370//1215 1369//1215 2277//1216
+f 1377//1217 1373//1218 1372//1218 1376//1218 1393//1218 1421//1219 1381//1218 1417//1218 1396//1218
+f 1063//1220 1056//1220 1060//1220 1059//1221 1058//1222 1054//1220 1051//1223 2279//1224 2281//1225 2280//1226 1053//1220 1055//1220 1061//1220 1079//1220 1088//1220
+f 2279//1224 1051//1223 1052//1227 2598//1227 2785//1227 2666//1227 2160//951 2282//1228 2283//1228
+f 1106//1229 1104//1229 1103//1229 2664//1229 2784//1229 2596//1229 1089//1229 2595//1229 2786//1229 2789//1229 2615//1229
+f 2787//1230 2593//1230 1057//1230 1058//1222 1059//1221 1108//1230 2613//1230 2788//1230
+f 2790//1231 2570//1231 1158//1231 1129//1231 1168//1231 1170//1231 1178//1231 2569//1231
+f 2792//1232 2791//1232 1412//1232 1403//1232 1405//1232 1410//1232 2793//1232
+f 1378//1233 1390//1233 1418//1233 1382//1233
+f 1420//800 1419//800 1392//800 1389//800
+f 1761//687 1764//687 2284//1234 2285//1235
+f 1422//1236 1387//1236 1385//1236 1421//1236
+f 1381//1237 1421//1237 1385//1237 1379//1237
+f 2219//1095 2286//1238 1383//687
+f 1384//687 2287//1239 2218//1099
+f 1417//1240 1381//1240 1379//1240 1394//1240 3062//1240
+f 2287//1239 1384//1082 1378//1082 1382//1082 2278//1214 2288//1241
+f 2290//1242 2289//1243 1245//1244 1216//1244 1240//763 1239//762 1192//1244 1190//1244 1193//1244 1194//1244 1234//1244 2291//1245 2292//1246
+f 1951//837 1944//837 1948//837 1897//837 1928//837 2796//837 2795//837 2794//837
+f 2798//1247 2799//1247 1409//1247 1407//1247 1406//1247 1411//1247 2797//1247
+f 1564//1248 1519//1248 1503//1248 1565//1248
+f 1445//1249 1446//1249 1448//1250 1449//1251 1453//1249 1450//891 1452//890 1447//1249 1444//1249 3063//1249
+f 2800//1252 2574//1252 1440//1252 1441//1252 1433//1252 1437//1252 1392//1252 1419//1252 2576//1252
+f 2801//1253 2558//1253 1518//1253 1505//1253 1503//1253 1519//1253 2559//1253
+f 1430//779 1429//779 1424//779 1388//779 1387//779 1422//779 2584//779 1049//779 2583//779 1476//779 1477//779
+f 1956//1254 1953//1254 1954//1254 1955//1254 1957//1255 1958//1256 1962//1254 1959//1257 1961//1258
+f 1317//1259 1281//1259 1277//1259 1291//1259
+f 2803//1260 2804//1260 1414//1260 1402//1260 1400//1260 1415//1260 2802//1260
+f 1535//1261 1584//1261 1582//1261 1537//1261
+f 1259//994 2810//1262 2809//1262 2806//1262 2705//1262 1264//1262 1261//995
+f 2816//1263 2703//1263 1255//1263 1249//1263 1257//1263 2707//1263 2805//1263 2807//1263 2808//1263 1256//1263 2814//1263 2812//1263 2818//1263
+f 2815//1264 2817//1264 2811//1264 2813//1264 1252//992 2176//991 2293//1265 2183//1014 2702//1264
+f 2295//1266 2294//1267 1391//687
+f 2296//1268 2244//1268 2819//1268 2752//1268 2243//1268
+f 1471//1269 1472//1269 1436//1269 1439//1269
+f 2298//1270 2297//1271 1765//1272 1736//1272 1760//965 1759//964 1713//1272 1711//1272 1714//1272 1715//1272 1754//1272 2299//1273 2300//1274
+f 1288//1275 1286//1275 1320//1275 1321//1275 3064//1275
+f 2301//1276 2302//1277 1050//1278 1044//1278 1053//1278 2280//1226
+f 1972//1279 1955//1279 1954//1279 1976//1279
+f 1432//1280 1475//1280 1479//1280 1431//1280
+f 1077//1281 1073//1281 1031//1281 1067//1281 1066//1281
+f 1454//687 1443//687 2305//1282 2303//1283
+f 1462//1284 1449//1284 1425//1284 1427//1284
+f 1428//1285 1426//1285 1446//1285 1464//1285
+f 1807//1011 1790//1011 1775//1011 1805//1011 1806//1011
+f 2823//1019 2821//1019 1413//1019 1401//1019 1403//1019 1412//1019 2822//1019
+f 1463//821 1447//821 1452//821 1451//821 1461//821 1460//821
+f 2307//1286 2306//1287 1427//1232 1425//1232 1454//1232 2303//1283
+f 1317//1288 1291//1288 2199//1061 2310//1289 2309//1290 2308//1291
+f 2302//1277 2162//949 1100//687 1046//687 1050//687
+f 2021//1292 2693//1292 2824//1292 2673//1292
+f 2035//1293 2055//1293 2053//1293 2020//1293 2019//1293 2672//1293 2825//1293 2691//1293 2022//1293 2050//1293 3066//1293 3065//1293 2058//1293
+f 2312//1294 2311//1295 1471//1296 1439//1296 1486//1296 2313//1297
+f 1808//1298 1810//1299 1811//1298 1809//1300 1857//1298 1855//1301 1833//1302 1865//1303 1864//1298
+f 1047//1304 1048//1058 1046//1057 1100//1305 1098//1306 1095//1306 1094//1306 1096//1307 1091//1306 1090//1306
+f 2830//1308 2828//1308 2829//1308 1870//1308 1866//1308
+f 2827//1309 2831//1309 1820//1309 1819//1309 1821//1309 1822//1309 1863//1309 1873//1309 1835//1309 2826//1309
+f 1496//1296 1488//1296 1438//1296 1473//1296
+f 1355//1310 1314//1310 1300//1310 1356//1310
+f 1434//1201 1488//1201 1496//1201 1478//1201
+f 2313//1297 1486//687 2314//1311 2315//1312
+f 1499//779 1521//779 3079//779 3057//779
+f 1497//779 1498//779 3057//779 3079//779
+f 1134//1313 1159//1313 1128//1313 1130//1313
+f 1502//1314 1483//1314 1465//1314 1500//1314 1501//1314
+f 1609//1315 1611//1316 1612//1315 1610//1317 1658//1315 1656//1318 1635//1319 1665//1320 1664//1315
+f 1601//1321 1647//1322 1646//1323 1600//1324 1599//1325 1595//1325 1594//1325 1596//1325 1597//1325 1598//1326
+f 2271//1200 2316//1327 1816//1328 1818//1328 1819//1328 1817//1328 2585//1328 2832//1328 2835//1328 1834//1328
+f 2587//1329 1866//1329 1868//1329 2834//1329 2833//1329
+f 1980//1330 1981//1330 1979//1330 1978//1330 2317//1331 2318//1332 1990//1333 2025//1334 2000//1330
+f 1745//1335 1746//1336 1743//1337 1742//1338 1803//1339 1802//1336 1789//1340 1794//1341 1795//1336
+f 2319//1342 1341//1343 1318//1343 1319//1343 1322//1343 1343//1343 1374//1343 1321//1343 1320//1343 1293//1343 1317//1343 2308//1291 2320//1344 2322//1344 2321//1345
+f 1293//1346 1287//1346 1231//1346 1268//1346
+f 2837//1347 2741//1347 1358//1347 1361//1347 2838//1347
+f 1326//1348 2235//1136 2232//1134 1308//1348 1310//1348 1311//1348 1309//1348 2739//1348 2836//1348 2839//1348
+f 2325//1349 2324//1350 1480//930 1485//930 2323//1351 2326//1352
+f 1522//1353 1485//1353 1480//1353 1492//1353
+f 1586//1354 1536//1354 1537//1354 1582//1354
+f 2841//1355 2840//1355 1522//1355 1492//1355 1494//1355 2121//846 2328//1356 2327//1357 2842//1355
+f 2330//1358 2329//1359 1617//687 1559//687 1562//687
+f 2845//1006 1524//1006 1495//1006 1491//1006 1525//1006 2843//1006 2844//1006
+f 2848//1360 1525//1360 1491//1360 1490//1360 1529//1360 1528//1360 2846//1360 2847//1360
+f 2685//1361 1878//1361 1839//1361 1837//1361 3067//1361 1880//1361 2686//1361 2849//1361
+f 1445//779 3063//779 3029//779
+f 1520//779 1468//779 1469//779 3029//779 3063//779 1444//779 1483//779 1502//779 1507//779
+f 2850//1362 2729//1362 1513//1362 1511//1362 1509//1362 1515//1362 2730//1362
+f 1738//1363 1772//1363 1760//1363 1736//1363
+f 1506//1364 1508//1364 1514//1364 1516//1364
+f 1122//1365 2093//782 2258//1178 1101//1365 1103//1366 1104//1365 1102//1365 1147//1365 1149//1367
+f 1154//802 1146//802 1121//802 1123//802
+f 2332//1368 2331//1369 1354//1370 1350//1370 1361//1370 2250//1156 2333//1371
+f 1553//1372 1555//1372 1557//886 1558//885 1562//1372 1559//1373 1561//1374 1556//1372 1552//1372 3068//1372
+f 1548//1375 1549//1375 1538//1375 1544//1375 1495//1375 1524//1375
+f 1550//1248 1528//1248 1529//1248 1534//1248 1538//1248 1549//1248
+f 1529//779 1490//779 1489//779 1527//779 1583//779 1584//779 1535//779 1534//779
+f 1136//1376 1137//1376 1139//1377 1140//1378 2336//1379 2335//1380 2334//1381 2273//1211 1142//1210 1138//1376 1135//1376 3069//1376
+f 1322//1382 1319//1382 1290//1382 1289//1382 1323//1382
+f 1816//1383 1815//1383 1814//1383 1818//1383
+f 2141//912 1986//1018 1990//1018 2318//1332 2338//1384 2339//1385 2337//1386
+f 1567//1248 1557//1248 1504//1248 1517//1248
+f 1374//1387 1343//1387 2669//1387 2854//1387 2768//1387 1375//1387
+f 2855//1388 2851//1388 2738//1388 1341//1388 2319//1342 2340//1389 2252//1164 2764//1388 2858//1388
+f 2857//1390 2762//1390 1370//1390 1372//1390 1373//1390 2770//1390 2853//1390 2667//1390 1342//1390 2736//1390 2852//1390 2856//1390
+f 2859//1391 2838//1391 1361//1391 1350//1391 1324//1391 1326//1391 2839//1391
+f 1578//1392 1579//1392 1542//1392 1547//1392
+f 1580//1393 1546//1393 1541//1393 1581//1393
+f 1581//785 1541//785 1539//785 1585//785
+f 2860//1394 2810//1394 1259//1394 1258//1394 1279//1394 1235//1394 1238//1394 1256//1394 2808//1394
+f 1637//1395 1635//1395 1656//1395 1671//1395
+f 2861//1396 2743//1396 2025//1396 1997//1396 1998//1396 2342//1397 2341//1398 2343//1399 2238//1140 2742//1396
+f 2344//1400 1563//687 1551//687 2345//1401
+f 2347//1402 2348//1403 1926//1404 1895//1404 1896//1404 2346//1405
+f 2122//847 1545//1406 1542//1406 1579//1406 2068//712 2349//1407
+f 1436//1408 1472//1408 2240//1146 2351//1409 2352//1410 2350//1411
+f 1532//1412 1570//1412 1558//1412 1530//1412
+f 1555//1413 1553//1413 3071//1413 3070//1413 1576//1413 1572//1413
+f 1727//1232 1728//1232 1700//1232 1697//1232 1729//1232
+f 2353//1414 2210//1081 1532//1364 1530//1364 1563//1364 2344//1400 2354//1415
+f 1564//779 1565//779 1566//779 1577//779
+f 1577//1020 1566//1020 1531//1020 1533//1020
+f 2357//1416 2358//1417 1906//1418 1902//1419 1904//1420 1924//1421 1923//1419 1921//1419 1919//1419 1918//1419 2355//1422 2356//1416 2359//1416
+f 1774//1423 1769//1424 1721//1425 1720//1423 1722//1423 1723//1423 1766//1426 1779//1423 1739//1427
+f 2361//1428 2360//1429 1578//1430 1547//1430 1592//1430 2362//1431
+f 1123//1432 1121//1432 1137//1432 1151//1432
+f 2863//1433 2862//1433 1922//1433 1907//1433 1965//1433 1964//1433 2864//1433
+f 1187//1434 1189//1435 1190//1434 1188//1436 1239//1434 1237//1437 1217//1438 1248//1439 1247//1434
+f 1960//1440 1961//1258 1959//1257 2015//1441 2013//1442 2010//1442 2009//1442 2011//1442 2006//1443 2005//1442
+f 1536//1314 1586//1314 1605//1314 3072//1314 1604//1314
+f 2865//1201 2608//1201 1606//1201 1607//1201 1608//1201 3073//1201 1589//1201 1573//1201 2607//1201
+f 2866//1296 2604//1296 1569//1296 1560//1296 1607//1296 1606//1296 2601//1296
+f 1434//1444 1435//1445 1432//1445 1431//1446 1498//1447 1497//1445 1482//1445 1487//1448 1488//1445
+f 1495//1449 1544//955 1543//954 1494//1450 1492//1451 1488//1451 1487//1452 1489//1453 1490//1454 1491//1455
+f 1031//1456 1073//1456 1069//1457 1024//1456 1020//1458 1026//1456 1021//1459 1044//1056 1043//1055 1022//1456 1035//1456 1033//1460 1070//1461 1085//1456
+f 1930//1462 1898//1462 1926//1462 2348//1403 2363//1463 2366//1463 2364//1463 2365//1464 1927//1465 1929//1462 1931//1462 1933//1462 1932//1462
+f 1473//1466 1474//1466 1472//1467 1471//1466 2311//1295 2323//1351 1485//1466 1522//1468 1496//1466
+f 1526//1469 1496//1469 1522//1469 2840//1469 2867//1469 2843//1469 1525//1469 2848//1469 2870//1469 2873//1469 2874//1469
+f 2842//1470 2327//1357 2367//1471 2368//1471 2066//710 1548//1470 1524//1470 2845//1470 2868//1470
+f 1528//1472 1550//1472 1583//1472 1527//1472 2872//1472 2871//1472 2869//1472 2846//1472
+f 2362//1431 1592//687 1593//687 2369//1473
+f 1274//1011 1225//1011 1287//1011 1293//1011
+f 2369//1473 1593//1393 1587//1393 1591//1393 2371//1474 2370//1475 2372//1476
+f 2373//1477 2107//810 1627//1478 1599//1478 1600//1478 2375//1479 2374//1480
+f 2376//1481 2080//740 1418//1482 1390//1482 1391//1482 2294//1267 2377//1483
+f 1461//1430 1451//1430 1501//1430 1500//1430
+f 1631//1484 1596//1484 1594//1484 1630//1484
+f 1186//733 1148//733 1141//733 1183//733 1182//733
+f 2379//1485 2378//1486 1780//1172 1752//1172 2230//1120
+f 2381//1487 2380//1488 1719//1489 1714//1489 1716//1489 2222//1104
+f 1620//1490 1618//1490 1616//1490 1615//1490
+f 2383//1491 2330//1358 1562//1492 1558//1492 1570//1492 2382//1493
+f 2006//722 1988//722 1973//722 2004//722 2005//722
+f 1621//1360 1622//1360 1610//1360 1612//1360
+f 1796//1494 1794//1494 1828//1494 1829//1494 3074//1494
+f 1023//779 2992//779 1674//779 1675//779 1655//779 1654//779 1688//779 1707//779 1712//779 1724//779 2990//779
+f 1753//1310 1734//1310 1735//1310 1740//1310 1744//1310
+f 2177//996 1310//1495 1306//1495 2386//1496 2385//1497 2384//1498 2387//1499
+f 2267//1193 1515//1500 1509//1500 1512//1500 2390//1501 2389//1502 2388//1503
+f 1791//952 1789//952 1802//952 1824//952
+f 2878//1504 1919//1504 1921//1504 2628//1504 2877//1504
+f 1939//1505 1972//1505 1967//1505 1920//1505 2876//1505 2875//1505 2626//1505 1922//1505 2862//1505 2882//1505 2881//1505 1977//1505
+f 1964//1506 2880//1506 2879//1506 2864//1506
+f 1983//1507 1982//1507 1943//1507 1941//1507
+f 1653//816 1632//816 1633//816 1638//816 1642//816 1652//816
+f 2331//1369 2194//1044 1408//687 1351//687 1354//687
+f 1936//1508 1958//1256 1957//1255 1912//1509 1910//1509 1913//1510 1914//1509 1952//1511 1963//1509
+f 2883//1512 2631//1512 1177//1512 2072//717 2391//1513 2144//1512 2654//1512 2773//1512 1165//1512 2661//1512 2885//1512 2887//1512
+f 2886//1514 2663//1514 1206//1514 2395//1515 2394//1516 2396//1517 1207//1518 1209//1514 1211//1514 1213//1514 1212//1514 1210//1514 1178//1514 2629//1514 2884//1514 2888//1514
+f 2392//1519 2256//1169 2772//1520 2889//1521
+f 2889//1521 2393//1522 2392//1519
+f 2039//1523 2036//1523 2037//1524 2038//1523 2040//1123 2041//1122 2044//1523 2042//1029 2043//1028
+f 1479//1525 1475//1525 1474//1525 1478//1525 1496//1525 1526//1525 1484//1526 1521//1527 1499//1525
+f 2397//1528 2399//1529 1616//1252 1618//1252 2204//1068 2398//1530
+f 2890//1531 1630//1531 1594//1531 1588//1531 1590//1531 2892//1531 2891//1531
+f 1622//1010 1666//1010 1658//1010 1610//1010
+f 1953//929 1956//929 1971//929 1974//929 1973//929 1988//929
+f 1619//1252 1614//1252 1658//1252 1666//1252
+f 1169//1532 1210//1532 1212//1532 3076//1532 3075//1532 1171//1532
+f 1678//1533 1645//1533 1650//1533 1677//1533
+f 2004//708 1969//708 1960//708 2005//708
+f 1685//1534 1640//1534 1641//1534 1681//1534
+f 1596//779 1631//779 1682//779 1683//779 1639//779 1638//779 1633//779 1597//779
+f 1730//1535 1701//1535 1726//1535 2400//1536 2401//1537 2403//1537 2402//1537 2172//984 1727//983 1729//1535 1731//1535 1733//1535 1732//1535
+f 1669//1538 1659//1538 1634//1538 1636//1538
+f 1827//1107 1826//1107 1800//1107 1798//1107
+f 2677//924 1850//924 1840//924 1845//924 1800//924 1826//924 1849//924 2680//924 2893//924
+f 2646//1539 1690//1539 1686//1539 1698//1539 1726//1539 2645//1539 2894//1539
+f 2896//930 2897//930 1667//930 1670//930 1657//930 1661//930 1660//930 1668//930 2895//930
+f 2404//1540 2203//1067 1636//1006 1634//1006 1662//1006 2126//855
+f 2057//1541 2055//1541 2038//1541 2037//1541 3077//1541
+f 1663//779 1664//779 1665//779 1676//779
+f 2021//1542 2023//1542 2011//1542 2009//1542
+f 1157//929 1131//929 1129//929 1158//929
+f 2405//1543 2136//900 1677//1052 1650//1052 1691//1052 2406//1544
+f 1580//1430 1602//1430 1595//1430 1546//1430
+f 1257//1545 1249//1546 1200//1545 1199//1545 1201//1547 1202//1548 1246//1549 1265//1545 1219//1550
+f 1860//1551 1861//1552 1859//1553 1915//1554 1913//1555 1910//1555 1909//1555 1911//1556 1905//1555 1903//1555
+f 1685//1557 1681//1557 1680//1557 1684//1557 2899//1557 2898//1557 2767//1557 1689//1557 2906//1557 2904//1557 2903//1557 1704//1557
+f 2901//1558 1701//1558 1730//1558 2765//1558 2900//1558
+f 1725//1559 2902//1559 2905//1559
+f 2907//1203 2899//1203 1684//1203 1643//1203 1694//1203 1701//1203 2901//1203
+f 1703//1203 1640//1203 1685//1203 1704//1203
+f 1632//1020 1629//1020 1598//1020 1597//1020 1633//1020
+f 1853//1007 1856//1007 1869//1007 1871//1007 1885//1007 3078//1007
+f 2409//1560 2295//1266 1391//1561 1390//1561 1386//1561 1385//1561 1387//1561 1388//1561 1389//1561 1392//1561 1437//1562 2407//1563 2408//1560
+f 2411//1564 2412//1565 2910//1566 2908//1566
+f 2917//1567 2909//1568 1916//1568 2916//1568 2911//1568 2912//1568 1917//1568 1967//1568 1970//1568 1938//1568 2410//1569 2413//1570
+f 2915//1571 1918//1571 1919//1571 2913//1571 2914//1571
+f 2588//1572 2918//1572 2085//1572
+f 1122//1573 1149//1573 1140//1573 1120//1573
+f 2414//1574 2416//1575 1887//1576 1926//1576 1898//1576 1876//1576 1877//1576 1875//1576 1874//1576 2415//1577
+f 1925//779 3093//779 3037//779
+f 1899//779 1900//779 3090//779 3094//779
+f 1901//779 3037//779 3093//779 3094//779 3090//779
+f 2406//1544 1691//687 1692//687 2417//1578
+f 2648//687 2135//687 2418//687
+f 1978//1579 1979//1579 1947//1579 1950//1579
+f 1236//779 1235//779 1279//779 1299//779 1304//779 3054//779 3051//779
+f 1315//779 1261//779 1264//779 3051//779 3054//779
+f 2419//1580 2400//1536 1726//1581 1698//1581 1699//1581 2421//1582 2420//1583
+f 1484//720 1482//720 1497//720 3079//720 1521//720
+f 2906//1085 1689//1085 1687//1085 1702//1085 1725//1085 2905//1085 2920//1085
+f 1821//1584 1823//1584 1812//1584 1810//1584
+f 1040//779 2902//779 1725//779 1702//779 1703//779 1704//779 2903//779
+f 1456//779 1458//779 3082//779 3083//779
+f 1470//779 3002//779 1025//779 3004//779 1455//779 3083//779 3082//779
+f 1945//1585 1946//1586 1943//1587 1942//1588 2002//1589 2001//1586 1987//1590 1992//1591 1993//1586
+f 1724//1592 1712//1592 1710//1592 1722//1592
+f 2277//1216 1369//1198 1340//1198 1383//1198 2286//1238 2422//1593
+f 1976//779 1954//779 1953//779 1988//779 2006//779 2011//779 2023//779 1975//779
+f 1942//752 1985//752 2003//752 3080//752 2002//752
+f 1103//1594 1101//1594 1099//1594 1098//1594
+f 2712//1595 1774//1595 1757//1595 1756//1595 1778//1595 2714//1595 2921//1595
+f 1718//800 1720//800 1711//800 1713//800
+f 1433//1596 1429//1596 1430//1596 1432//1596 1435//1597 1436//1598 2350//1411 2423//1599 2424//1600 2407//1563 1437//1562
+f 1334//1240 1333//1240 1376//1240 1372//1240
+f 1022//689 1043//689 1055//689 1030//689
+f 1723//1601 1722//1601 1710//1601 1708//1601
+f 1328//1602 1329//1602 1331//1602 1334//1098 1335//1097 1338//1602 1336//1064 1337//1063 1332//1602
+f 1312//1173 1301//1173 1303//1173 1311//1173
+f 2428//1603 2425//1604 1754//1117 1715//1117 1717//1117 2426//1605 2427//1606
+f 1766//958 1723//958 1708//958 1767//958
+f 1705//1198 1668//1198 1660//1198 1706//1198
+f 1087//721 1067//721 1031//721 1085//721
+f 2429//1607 1844//687 1846//687 2168//981
+f 1153//1608 1151//1608 1137//1608 1136//1608
+f 1759//958 1709//958 1721//958 1769//958
+f 1769//1117 1718//1117 1713//1117 1759//1117
+f 2927//1609 2923//1610 2430//1611 2432//1612 2431//1613 2226//1609 2734//1609 2924//1609
+f 2925//1614 2224//1614 2433//1615 2197//1049 1669//1614 1666//1614 1671//1614 1675//1614 1674//1616 1673//1617 1670//1614 1667//1618 2922//1619 2926//1614
+f 2931//1620 2930//1620 1933//1620 1931//1620 1934//1620 2943//1620 2942//1620 2932//1620
+f 2935//1621 2936//1621 2434//1621 2435//1621 2440//1622 2438//1623 2441//1624 1979//1621 1981//1621 1982//1621 1983//1621 2928//1621 2929//1621 2941//1621 2944//1621 1951//1621 2794//1621 2949//1621 2946//1621 2945//1621 2939//1621 2938//1621
+f 2796//1625 1928//1625 1927//1465 2365//1464 2439//1626 2437//1625 2436//1625 2934//1625 2933//1625 2937//1625 2940//1625 2947//1625 2948//1625
+f 1056//1627 1041//1627 1038//1627 3081//1627 1060//1627
+f 1426//1019 1428//1019 1470//1019 3082//1019 1458//1019
+f 2089//770 2442//1628 2382//1493 1570//1629 1567//1629 1572//1629 1576//1629 1575//778 1574//777 1571//1629 1568//771
+f 2249//1154 1359//1160 1360//1630 1397//1630 1364//1630 1365//1159 1366//1158 1416//1630 1414//1630 1412//1630 1411//1630 2191//1042 2443//1631 2444//1631
+f 2421//1582 1699//687 1748//687 1750//687 2158//941
+f 2951//816 2950//816 1415//816 1400//816 1456//816 3083//816 1455//816 2952//816
+f 2142//916 1266//1346 1232//1346 2445//1632 2446//1633 2447//1634
+f 2448//1635 2449//1636 1970//1637 1967//1637 1972//1637 1976//1637 1975//973 1974//972 1971//1637 1968//970 2163//969
+f 2954//841 2955//841 1782//841 1751//841 1746//841 1783//841 2953//841
+f 2782//952 1783//952 1746//952 1745//952 1786//952 2783//952 2956//952
+f 2814//1108 1256//1108 1238//1108 1243//1108 1242//1108 1254//1108 1252//1108 2813//1108 2957//1108
+f 2451//1638 2450//1639 1453//1640 1449//1640 1462//1640 2452//1641
+f 2778//1642 1787//1642 1742//1642 1743//1642 1784//1642 2781//1642 2958//1642
+f 1743//1643 1741//1643 1785//1643 1784//1643
+f 1732//779 1733//779 3046//779 3038//779
+f 1735//779 1696//779 1695//779 3038//779 3046//779 1785//779 1741//779 1740//779
+f 2102//801 1765//687 2297//1271
+f 2299//1273 1754//687 2425//1604
+f 2453//1644 2284//1234 1764//1645 1760//1645 1772//1645 2709//1645 2959//1645 2710//1645 2190//1041 2454//1646
+f 1790//1240 1755//1240 1758//1240 1773//1240 2717//1240 2960//1240 2719//1240 1776//1240 1775//1240
+f 2961//1082 2720//1082 1773//1082 1758//1082 1763//1082 1762//1082 1771//1082 1770//1082 2723//1082
+f 1793//687 2455//1647 2229//1119
+f 1643//1648 1644//1649 1641//1649 1640//1650 1703//1651 1702//1649 1687//1649 1693//1652 1694//1649
+f 2458//1653 2456//1654 2457//1655 1814//1656 1811//1656 1810//1656 1812//1656 1807//1656 1806//1656 1762//1656 1763//967 1761//966 2285//1235
+f 1439//1657 1436//1598 1435//1597 1438//1657 1488//1657 1492//1657 1480//1657 2324//1350 2314//1311 1486//1657
+f 1801//1053 1786//1053 1745//1053 1795//1053
+f 1787//1053 1804//1053 1803//1053 1742//1053
+f 1778//779 1756//779 1755//779 1790//779 1807//779 1812//779 1823//779 1777//779
+f 2336//1379 1140//1658 1149//1658 2462//1659 2461//1660 2460//1661 2459//1662
+f 1805//1346 1771//1346 1762//1346 1806//1346
+f 1176//1663 1229//1131 1228//1130 1175//1664 1174//1665 1170//1665 1168//1666 1161//1667 1179//1665 1162//1668 1169//1665 1171//1665 1172//1665 1173//1669
+f 2464//1670 2463//1671 2386//1496 1306//1672 1303//1672 1302//1672 1304//1672 1299//1672 1298//1672 1242//1672 1243//765 1241//764 2147//921
+f 2553//1673 1627//1673 2619//1673
+f 1580//1674 1581//1674 1579//1674 1578//1674 2360//1429 2465//1675 2371//1474 1591//1674 2552//1674 2620//1674 1602//1674
+f 2953//1676 1783//1676 1781//1676 2623//1676 2963//1676
+f 1792//1677 1825//1677 1801//1677 1782//1677 2955//1677 2962//1677 2625//1677 1780//1677 2378//1486 2466//1678
+f 1393//1002 1376//1002 1333//1002 1386//1002
+f 2467//1679 2455//1647 1793//841 1788//841 1792//841 2466//1678
+f 1825//1680 1792//1680 1788//1680 1799//1680
+f 1651//1681 1652//1681 1642//1681 1647//1681 1601//1681 1628//1681
+f 1829//779 1879//779 1880//779 3067//779 3074//779
+f 1837//779 1836//779 1831//779 1797//779 1796//779 3074//779 3067//779
+f 1782//1172 1801//1172 1795//1172 1751//1172
+f 1804//779 1824//779 1802//779 1803//779
+f 2450//1639 2390//1501 1512//687 1450//687 1453//687
+f 1232//1682 1227//1129 1226//1128 1231//1682 1287//1682 1291//1682 1277//1682 1285//1682 2186//1023 2445//1632
+f 2246//1151 1818//1683 1814//1683 2457//1655 2469//1684 2468//1685 2470//1686
+f 1822//1687 1821//1687 1810//1687 1808//1687
+f 1820//1382 1809//1382 1811//1382 1819//1382
+f 1629//1364 1628//1364 1601//1364 1598//1364
+f 1903//852 1902//852 1906//852 1867//852 1860//852
+f 1654//1688 1655//1688 1656//1688 1658//1689 1659//1690 2195//1047 2472//1691 2471//1692 2473//1693 1661//1694 1657//1688
+f 1478//720 1474//720 1435//720 1434//720
+f 1634//1695 1659//1690 1658//1689 1614//1695 1612//1695 1615//1695 1616//1695 2399//1529 2128//856 1662//1695
+f 1822//957 1808//957 1864//957 3084//957 1863//957
+f 1864//779 1865//779 3089//779 3084//779
+f 1873//779 1863//779 3084//779 3089//779
+f 2830//957 1866//957 1857//957 1809//957 1820//957 2831//957 2964//957
+f 2056//779 2057//779 3077//779 3039//779 2029//779
+f 2037//779 2036//779 2031//779 1995//779 1994//779 3039//779 3077//779
+f 2474//1696 1852//745 1815//745 1816//745 2316//1327 2475//1697
+f 1119//1433 1083//1433 1086//1433 1109//1433 1112//1433 1118//1433
+f 2265//1188 2476//1698 2452//1641 1462//1699 1459//1699 1464//1699 1469//1699 1468//1192 1466//1191 1463//1699 1460//1189
+f 2632//1700 2131//1700 2477//1700 2480//1701 2481//1702 2462//1659 1149//1700 1147//1700 1151//1700 1153//1700 2972//1700 2971//1700 2977//1700 2975//1700 2590//1700 1150//1700 2967//1700 2966//1700
+f 1148//1703 1186//1073 2207//1072 2479//1704 2478//1703 2132//1703 2633//1703 2965//1703 2968//1703
+f 1184//1075 1152//1705 2591//1705 2974//1705 2976//1705 2973//1705 2969//1705 2970//1705 3085//1705 1204//1076
+f 1552//785 1556//785 1571//785 1574//785 1573//785 1589//785 3086//785
+f 2236//1142 2482//1706 2216//1092 2054//1707 2053//1707 2055//1707 2057//1707 2056//1707 2047//1707 2046//1707 2045//1707
+f 1871//1708 1869//1708 1867//1708 1906//1418 2358//1417 2483//1709 2484//1710 1868//1708 1866//1708 1870//1708 1872//1708 1924//1421 1904//1420
+f 1875//1711 1843//1711 1848//1711 1874//1711
+f 1117//1712 1118//1712 1112//1712 1115//1712 1076//1712 1080//1712
+f 1314//1713 1313//1713 1302//1713 1300//1713
+f 1882//1714 1838//1714 1839//1714 1878//1714
+f 1887//1715 1883//1715 1895//1715 1926//1715
+f 2096//789 1852//687 2474//1696
+f 2486//1716 2485//1717 1915//687 1859//687 1862//687
+f 2487//1718 2486//1716 1862//1719 1858//1719 1868//1719 2484//1710 2488//1720
+f 2375//1479 1600//687 1646//687 1648//687 2098//795
+f 2826//1721 1835//1721 1833//1721 1855//1721 1870//1721 2829//1721 2978//1721
+f 1855//1722 1854//1722 3087//1722 1872//1722 1870//1722
+f 1347//1723 1346//1723 3088//1723 1367//1723 1363//1723
+f 1854//779 1853//779 3078//779 3087//779
+f 1905//779 1911//779 3036//779 3091//779
+f 1885//779 3091//779 3036//779 1923//779 1924//779 1872//779 3087//779 3078//779
+f 1869//793 1856//793 1861//793 1860//793 1867//793
+f 2202//1065 1336//687 1338//687 2255//1162
+f 1865//1382 1833//1382 1835//1382 1873//1382 3089//1382
+f 2980//1724 2979//1724 2016//1724 2014//1724 2013//1724 2018//1724 2981//1724
+f 1424//737 1423//737 1420//737 1389//737 1388//737
+f 1333//1725 1334//1726 1331//1727 1330//1728 1395//1726 1394//1726 1379//1729 1385//1730 1386//1726
+f 2491//1731 2489//1732 2490//1733 1799//1734 1795//1734 1794//1734 1796//1734 1797//1734 1798//1734 1800//1734 1845//1116 1844//1115 2429//1607
+f 2492//1735 2395//1515 1206//1736 1174//1736 1175//1736 2182//999 2493//1737
+f 1900//726 1838//726 1882//726 1901//726 3090//726
+f 1885//1231 1871//1231 1904//1231 1902//1231 1903//1231 1905//1231 3091//1231
+f 1907//1738 1909//1738 1910//1738 1908//1738 1957//1738 1955//1738 1937//1738 1966//1738 3092//1738 1965//1738
+f 1352//1739 1353//700 1351//699 1408//1740 1406//1741 1403//1741 1402//1741 1404//1741 1399//1742 1398//1741
+f 2494//1743 2426//1605 1717//1744 1719//1744 1720//1744 1718//1744 1769//1744 1772//1744 1738//1744 2103//799
+f 2987//1745 2982//1746 1409//1746 2799//1746 2985//1746 2793//1746 1410//1746 1459//1746 1462//1746 1427//1746 2306//1287 2495//1747
+f 2497//1748 2496//1749 2983//1750 2984//1750
+f 2986//1751 2797//1751 1411//1751 1412//1751 2791//1751
+f 1667//1618 2897//1752 2922//1619
+f 2430//1611 2923//1610 2895//1753 1668//1753 1705//1753 1672//1753 2571//1753 2989//1754 2990//1754 1724//1753 1722//1753 1720//1753 1719//1753 2380//1488 2498//1755 2499//1755
+f 2991//1756 2990//1754 2989//1754
+f 2573//1757 1673//1617 1674//1616 2992//1757 2988//1757
+f 1888//687 2153//933 2500//1758
+f 1889//687 2501//1759 2152//937
+f 1889//1108 1883//1108 1887//1108 2416//1575 2502//1760 2503//1761 2501//1759
+f 1676//1360 1665//1360 1635//1360 1637//1360
+f 1817//1086 1819//1086 1811//1086 1813//1086
+f 2993//1762 2652//1762 1267//1762 1227//1762 1232//1762 1266//1762 2653//1762
+f 2077//731 1075//687 1114//687 1116//687 2109//818
+f 1410//1681 1405//1681 1448//1681 1459//1681
+f 2504//1763 2345//1401 1551//1375 1511//1375 1513//1375 2211//1079
+f 1932//1764 1892//1764 1890//1764 1930//1764
+f 1886//1765 1930//1765 1890//1765 1884//1765
+f 1768//779 1779//779 1766//779 1767//779
+f 1602//1314 1585//1314 1539//1314 1595//1314
+f 1425//1766 1449//1251 1448//1250 1405//1767 1403//1767 1406//1768 1407//1767 1443//1769 1454//1767
+f 2355//1422 1918//1770 1913//1770 1915//1770 2485//1717 2506//1771 2505//1772
+f 1571//1393 1556//1393 1561//1393 1560//1393 1569//1393 1568//1393
+f 2507//1773 2305//1282 1443//1681 1407//1681 1409//1681 2982//1681 2994//1681 2983//1681 2496//1749 2508//1774
+f 2995//923 2876//923 1920//923 1908//923 1910//923 1919//923 2878//923
+f 1083//1132 1081//1132 1074//1132 1072//1132 1086//1132
+f 2996//922 2913//922 1919//922 1910//922 1912//922 1917//922 2912//922
+f 2087//769 1218//947 1216//947 1245//947 2510//1775 2509//1776
+f 2997//1777 2934//1777 2436//1777 2511//1777 2434//1777 2936//1777
+f 1896//687 2264//1183 2346//1405
+f 1856//1778 1853//1778 1854//1779 1855//1778 1857//788 1858//787 1862//1778 1859//1553 1861//1552
+f 2998//1780 2834//1780 1868//1780 1858//1780 1832//1780 1834//1780 2835//1780
+f 2999//829 2943//829 1934//829 1935//829 1940//829 1944//829 1951//829 2944//829
+f 3001//1781 2822//1781 1412//1781 1414//1781 2804//1781
+f 1464//1782 1459//1782 1413//1782 2821//1782 3000//1782 2802//1782 1415//1782 2950//1782 3003//1782 3002//1782 1470//1782 1428//1782
+f 2952//1783 1455//1783 3004//1783
+f 1642//1784 1638//1784 1639//1785 1641//1784 1644//1786 1645//1787 1648//1784 1646//1323 1647//1322
+f 1966//779 3096//779 3092//779
+f 1029//779 2880//779 1964//779 1965//779 3092//779 3096//779 1977//779 2881//779
+f 1967//1433 1957//1433 1908//1433 1920//1433
+f 1967//1712 1917//1712 1912//1712 1957//1712
+f 1477//1788 1475//1788 1432//1788 1430//1788
+f 1586//1789 1582//1789 1581//1789 1585//1789 1602//1789 2621//1789 3006//1789 2892//1789 1590//1789 1626//1789 1605//1789
+f 1630//1790 2890//1790 3005//1790 2622//1790
+f 1980//753 2000//753 1993//753 1949//753
+f 1120//1791 1140//1378 1139//1377 1097//1791 1095//1791 1098//1791 1099//1791 2259//1177 2120//844 1143//1791
+f 3009//1310 3007//1310 1358//1310 1349//1310 1301//1310 1312//1310 3008//1310
+f 3093//1394 1925//1394 1886//1394 1884//1394 1899//1394 3094//1394
+f 2513//1792 2082//747 1952//1712 1914//1712 1916//1712 2909//1712 3010//1712 2910//1712 2412//1565 2512//1793
+f 1080//1794 1076//1794 1074//1794 1081//1794
+f 2515//1795 2514//1796 1962//1797 1958//1797 1970//1797 2449//1636
+f 1939//1798 1937//1798 1955//1798 1972//1798
+f 1128//1231 1159//1231 1181//1231 3095//1231 1180//1231
+f 1132//1106 1131//1106 1157//1106 1156//1106
+f 1881//1394 1877//1394 1842//1394 1841//1394
+f 2516//1799 2410//1569 1938//922 1936//922 1963//922 2083//746
+f 1484//1800 1526//1800 1487//1800 1482//1800
+f 1937//923 1939//923 1977//923 3096//923 1966//923
+f 1984//749 1981//749 1946//749 1945//749
+f 1675//1801 1671//1801 1656//1801 1655//1801
+f 1978//753 1950//753 1991//753 2519//1802 2518//1803 2517//1804 2317//1331
+f 1400//1805 1402//1806 1403//1805 1401//1807 1448//1805 1446//1808 1426//1809 1458//1810 1456//1805
+f 1650//1811 1645//1787 1644//1786 1649//1812 1694//1812 1698//1813 1686//1812 1692//1814 1691//1812
+f 1560//1815 1561//1374 1559//1373 1617//1815 1615//1815 1612//1815 1611//1815 1613//1815 3097//1815 1608//1815 1607//1815
+f 3011//1816 2599//1816 1620//1816 1615//1816 1617//1816 2329//1359 2520//1817 2090//773 2600//1816
+f 1985//1818 1942//1818 1943//1818 1982//1818
+f 2000//752 1984//752 1945//752 1993//752
+f 1507//1819 1505//1819 1518//1819 1520//1819
+f 1503//1820 1505//1821 1506//1820 1504//1822 1557//1820 1555//1823 1531//1820 1566//1824 1565//1820
+f 1706//1825 1660//1825 1661//1694 2473//1693 2521//1826 2522//1827 2223//1105 1716//1825 1714//1825 1711//1825 1710//1825 1712//1825 1707//1825
+f 1167//1828 1166//1829 1133//1830 1127//1831 1113//1832 1111//1833 1130//1834 1128//1835 1180//1836 1161//1837 1168//1834 1129//1834 1131//1834 1132//1834 1170//1834 1174//1838 1160//1834
+f 2174//988 1849//1839 1826//1839 1827//1839 1830//1839 1851//1839 1879//1839 1829//1839 1828//1839 1801//1839 1825//1839 2524//1840 2523//1841 2526//1841 2525//1842
+f 2981//1843 2018//1843 2670//1843
+f 2527//1844 2116//836 2016//1845 2979//1845 2671//1845 2019//1845 2017//1845 2053//1845 2054//1845 2034//1845 2528//1846
+f 1214//1847 1233//1847 1208//1847 1207//1518 2396//1517 2529//1848 2530//1849 1267//1847 1269//1847 1271//1847 1272//1847 3098//1847 1213//1847 1211//1847
+f 1991//687 2140//913 2531//1850 2519//1802
+f 2510//1775 1245//687 2289//1243
+f 2150//927 2291//1245 1234//687
+f 2342//1397 1998//687 2042//687 2044//687 2215//1090
+f 1150//1018 1138//1018 1142//1018 1141//1018 1148//1018 2968//1018 3012//1018 2967//1018
+f 3013//783 2746//783 2026//783 1999//783 1996//783 2027//783 2744//783
+f 2533//1851 2181//1000 1230//1852 1227//1852 1267//1852 2530//1849 2532//1853
+f 1567//1375 1514//1375 1508//1375 1557//1375
+f 1989//1854 2028//1854 1992//1854 1987//1854
+f 2024//749 1989//749 1987//749 2001//749 3099//749
+f 2514//1796 2534//1855 2015//687 1959//687 1962//687
+f 1219//1856 1217//1856 1237//1856 1257//1856
+f 2535//1857 2524//1840 1825//1858 1799//1858 2490//1733 2537//1859 2536//1860
+f 3014//1861 2916//1861 1916//1861 1914//1861 1913//1861 1918//1861 2915//1861
+f 2166//974 2018//1862 2013//1862 2015//1862 2534//1855 2538//1863 2539//1864
+f 1830//1173 1827//1173 1798//1173 1797//1173 1831//1173
+f 2541//1865 2540//1866 1947//1867 1979//1867 2441//1624
+f 1692//821 1686//821 1690//821 2639//821 3015//821 2640//821 2138//896 2542//1868 2543//1869 2417//1578
+f 2012//1794 2017//1794 2019//1794 2010//1794
+f 3007//1870 3016//1870 2774//1870 1363//1870 1358//1870
+f 3017//1871 3008//1871 1312//1871 1311//1871 1313//1871 1314//1871 1355//1871 1368//1871 1327//1871 2775//1871
+f 3018//1872 2872//1872 1527//1872 1489//1872 1487//1872 1526//1872 2874//1872
+f 2544//1873 2415//1577 1874//733 1848//733 1888//733 2500//1758
+f 1280//1007 1278//1007 1294//1007 3100//1007 1316//1007
+f 1944//1874 1940//1874 1941//1874 1943//1874 1946//911 1947//910 2540//1866 2545//1875 2546//1876 2261//1186 1948//1185
+f 2036//721 2039//721 2046//721 2047//721 2030//721 2031//721
+f 2007//735 2051//735 3101//735 3102//735 2050//735 2022//735
+f 2104//808 2547//1877 2100//797 1678//1878 1680//1878 1681//1878 1683//1878 1682//1878 1653//1878 1652//1878 1651//1878
+f 2020//735 2053//735 2040//735 2008//735
+f 2034//1879 2054//1879 2041//1879 2032//1879
+f 1935//779 1893//779 1892//779 1932//779 1933//779 2930//779 1032//779 2928//779 1983//779 1941//779 1940//779
+f 1249//842 1239//842 1188//842 1200//842
+f 2035//1880 2033//1880 2038//1880 2055//1880
+f 2049//687 2048//687 2115//835 2548//1881
+f 2549//1882 2528//1846 2034//1794 2032//1794 2049//1794 2548//1881 2550//1883
+f 1179//779 1161//779 1180//779 3095//779 3041//779
+f 1181//779 2561//779 1045//779 2564//779 1205//779 3041//779 3095//779
+f 2050//779 3102//779 3066//779
+f 3101//779 3065//779 3066//779 3102//779
+f 2051//779 2052//779 2058//779 3065//779 3101//779
+f 2052//1132 2033//1132 2035//1132 2058//1132
+f 2110//817 2076//732 2077//731 2109//818
+f 2257//1170 2123//854 2124//853 2146//918
+f 2182//999 2181//1000 2533//1851 2493//1737
+f 2310//1289 2199//1061 2200//1060 2201//1059 1250//1884
+f 2445//1632 2186//1023 2187//1022 2213//1084 2446//1633
+f 2310//1289 1250//1884 2309//1290
+f 2221//1100 1251//1885 2220//1094
+f 2422//1593 2286//1238 2219//1095 2220//1094 1251//1885
+f 2255//1162 2253//1161 1250//1885 2201//1059 2202//1065
+f 2424//1600 2423//1599 1253//1886 2409//1560 2408//1560 2407//1563
+f 2295//1266 2409//1560 1253//1886 2377//1483 2294//1267
+f 2287//1239 2288//1241 1251//1886 2221//1100 2218//1099
+f 2326//1352 2312//1294 2313//1297 2315//1312 2325//1349
+f 2352//1410 1253//1887 2423//1599 2350//1411
+f 2314//1311 2324//1350 2325//1349 2315//1312
+f 2121//846 2122//847 2349//1407 2328//1356
+f 2369//1473 2372//1476 2361//1428 2362//1431
+f 2098//795 2099//794 2374//1480 2375//1479
+f 2405//1543 2406//1544 2417//1578 2543//1869
+f 2158//941 2157//940 2420//1583 2421//1582
+f 2537//1859 2490//1733 2489//1732 2491//1731 1260//1888
+f 2537//1859 1260//1888 2536//1860
+f 2467//1679 2379//1485 2230//1120 2229//1119 2455//1647
+f 2155//938 1262//1889 2154//932
+f 2500//1758 2153//933 2154//932 1262//1889 2544//1873
+f 2429//1607 2168//981 2169//980 1260//1889 2491//1731
+f 2546//1876 2545//1875 1263//1890 2263//1182 2262//1182 2261//1186
+f 2346//1405 2264//1183 2263//1182 1263//1890 2347//1402
+f 2501//1759 2503//1761 1262//1890 2155//938 2152//937
+f 2140//913 2141//912 2337//1386 2531//1850
+f 2519//1802 2531//1850 2337//1386 2339//1385 2518//1803
+f 2541//1865 1263//1891 2545//1875 2540//1866
+f 2215//1090 2214//1089 2341//1398 2342//1397
+f 2115//835 2117//834 2550//1883 2548//1881
+f 2514//1796 2515//1795 2538//1863 2534//1855
+f 2083//746 2082//747 2513//1792 2516//1799
+f 2485//1717 2486//1716 2487//1718 2506//1771
+f 2469//1684 2457//1655 2456//1654 2458//1653 1270//1892
+f 2469//1684 1270//1892 2468//1685
+f 2475//1697 2272//1199 2097//790 2096//789 2474//1696
+f 2300//1274 1273//1893 2298//1270
+f 2297//1271 2298//1270 1273//1893 2101//798 2102//801
+f 2458//1653 2285//1235 2284//1234 2453//1644 1270//1893
+f 2521//1826 2473//1693 2471//1692 2472//1691 1275//1894 2522//1827
+f 2223//1105 2522//1827 1275//1894 2381//1487 2222//1104
+f 2299//1273 2425//1604 2428//1603 1273//1895 2300//1274
+f 2128//856 2399//1529 2397//1528 2127//857
+f 2196//1051 1275//1896 2472//1691 2195//1047
+f 2404//1540 2126//855 2127//857 2397//1528 2398//1530
+f 2329//1359 2330//1358 2383//1491 2520//1817
+f 2344//1400 2345//1401 2504//1763 2354//1415
+f 2450//1639 2451//1638 2389//1502 2390//1501
+f 2303//1283 2305//1282 2507//1773 2307//1286
+f 2332//1368 2193//1045 2194//1044 2331//1369
+f 2464//1670 1282//1897 2385//1497 2386//1496 2463//1671
+f 2234//1137 2130//867 2129//866 2231//1133 2233//1135
+f 2385//1497 1282//1897 2384//1498
+f 2510//1775 2289//1243 2290//1242 1283//1898 2509//1776
+f 2464//1670 2147//921 2148//920 2184//1012 1282//1899
+f 2292//1246 1283//1898 2290//1242
+f 2292//1246 2291//1245 2150//927 2149//926 1283//1900
+f 2134//877 2275//1212 1284//1900 2113//830 2112//833
+f 2334//1381 2335//1380 1284//1900 2275//1212 2274//1212 2273//1211
+f 2459//1662 1284//1901 2335//1380 2336//1379
+f 2459//1662 2460//1661 1284//1901
+f 2260//1176 2094//781 2095//784 2120//844 2259//1177
+f 2301//1276 2161//950 2162//949 2302//1277
+f 2060//686 2059//688 2063//692 2064//706
+f 2118//838 2227//1110 2075//728 2076//732 2110//817 2111//820 2119//839
+f 2074//729 2075//728 2227//1110 2228//1112
+f 2256//1169 2392//1519 2125//851 2123//854 2257//1170
+f 2073//716 2071//716 2069//716 2070//715 2125//851 2392//1519 2393//1522 1457//687 2391//1513 2072//717
+f 2492//1735 2493//1737 2533//1851 2532//1853
+f 2532//1853 2530//1849 2529//1848 2396//1517 2394//1516 2395//1515 2492//1735
+f 2322//1344 2320//1344 2308//1291 2309//1290 1250//687 2321//1345
+f 2447//1634 2446//1633 2213//1084 2212//1083
+f 2142//916 2447//1634 2212//1083 2143//917
+f 2422//1593 1251//687 2276//1213 2277//1216
+f 2253//1161 2254//1165 1250//687
+f 2319//1342 2321//1345 1250//687 2254//1165 2252//1164 2340//1389
+f 1253//687 2376//1481 2377//1483
+f 2278//1214 2276//1213 1251//687 2288//1241
+f 2376//1481 1253//687 1467//687 2241//1148 2242//1147 2078//742 2081//741 2079//741 2080//740
+f 1467//687 1253//687 2351//1409 2240//1146 2753//1145 3019//687
+f 2352//1410 2351//1409 1253//687
+f 2311//1295 2312//1294 2326//1352 2323//1351
+f 2368//1471 2367//1471 2327//1357 2328//1356 2349//1407 2068//712 2067//711 2066//710
+f 2372//1476 2370//1475 2465//1675 2360//1429 2361//1428
+f 2370//1475 2371//1474 2465//1675
+f 2373//1477 2374//1480 2099//794 2100//797 2547//1877 2104//808 2105//807
+f 2108//811 2106//811 2107//810 2373//1477 2105//807
+f 2542//1868 2139//901 2136//900 2405//1543 2543//1869
+f 3020//687 2647//898 2139//901 2542//1868 2138//896 2137//895 1481//687
+f 2419//1580 2420//1583 2157//940 2156//944
+f 2402//1537 2403//1537 2401//1537 2400//1536 2419//1580 2156//944 2159//943 2173//985 2172//984
+f 2536//1860 1260//687 2535//1857
+f 2466//1678 2378//1486 2379//1485 2467//1679
+f 2526//1841 2523//1841 2524//1840 2535//1857 1260//687 2525//1842
+f 2544//1873 1262//687 2414//1574 2415//1577
+f 2169//980 2171//979 1260//687
+f 2525//1842 1260//687 2171//979 2170//978 2175//989 2174//988
+f 2364//1463 2366//1463 2363//1463 2348//1403 2347//1402 1263//687 1493//687 2439//1626 2365//1464
+f 2503//1761 2502//1760 1262//687
+f 2416//1575 2414//1574 1262//687 2502//1760
+f 2338//1384 2517//1804 2518//1803 2339//1385
+f 2438//1623 2440//1622 1493//687 1263//687 2541//1865 2441//1624
+f 2318//1332 2317//1331 2517//1804 2338//1384
+f 2214//1089 2217//1093 2343//1399 2341//1398
+f 2239//1141 2237//1141 2238//1140 2343//1399 2217//1093 2216//1092 2482//1706 2236//1142
+f 2549//1882 2550//1883 2117//834 2116//836 2527//1844
+f 2549//1882 2527//1844 2528//1846
+f 2449//1636 2448//1635 2163//969 2164//968 2539//1864 2538//1863 2515//1795
+f 2539//1864 2164//968 2167//975 2165//975 2166//974
+f 2512//1793 2413//1570 2410//1569 2516//1799 2513//1792
+f 3021//687 2917//1567 2413//1570 2512//1793 2412//1565 2411//1564 1510//687
+f 2505//1772 2506//1771 2487//1718 2488//1720
+f 2357//1416 2359//1416 2356//1416 2355//1422 2505//1772 2488//1720 2484//1710 2483//1709 2358//1417
+f 2470//1686 2468//1685 1270//687
+f 2316//1327 2271//1200 2272//1199 2475//1697
+f 2248//1152 2245//1152 2246//1151 2470//1686 1270//687 2247//1153
+f 1273//687 2494//1743 2103//799 2101//798
+f 1270//687 2453//1644 2454//1646
+f 2190//1041 2189//1040 2188//1039 2247//1153 1270//687 2454//1646
+f 1273//687 2428//1603 2427//1606
+f 2499//1755 2498//1755 2380//1488 2381//1487 1275//687 1523//687 2431//1613 2432//1612 2430//1611
+f 2494//1743 1273//687 2427//1606 2426//1605
+f 1275//687 2196//1051 2198//1050
+f 2204//1068 2203//1067 2404//1540 2398//1530
+f 2433//1615 1523//687 1275//687 2198//1050 2197//1049
+f 2092//774 2091//774 2090//773 2520//1817 2383//1491 2382//1493 2442//1628 2089//770
+f 2354//1415 2504//1763 2211//1079 2209//1078 2353//1414
+f 2210//1081 2353//1414 2209//1078
+f 2452//1641 2476//1698 2265//1188 2266//1187 2388//1503 2389//1502 2451//1638
+f 2269//1194 2268//1194 2267//1193 2388//1503 2266//1187
+f 2507//1773 2508//1774 2495//1747 2306//1287 2307//1286
+f 3022//687 2987//1745 2495//1747 2508//1774 2496//1749 2497//1748 1540//687
+f 2332//1368 2333//1371 2192//1046 2193//1045
+f 2444//1631 2443//1631 2191//1042 2192//1046 2333//1371 2250//1156 2251//1155 2249//1154
+f 2387//1499 2384//1498 1282//687
+f 2234//1137 2233//1135 2232//1134 2235//1136
+f 2180//997 2178//997 2177//996 2387//1499 1282//687 2179//998
+f 2183//1014 2293//1265 2176//991 2179//998 1282//687 2185//1015
+f 2509//1776 1283//687 2086//766 2087//769
+f 2185//1015 1282//687 2184//1012
+f 2088//767 2086//766 1283//687 2151//925
+f 2151//925 1283//687 2149//926
+f 2206//1071 2208//1071 2205//1071 2114//831 2113//830 1284//687 1554//687 2479//1704 2207//1072
+f 2481//1702 2480//1701 1554//687 1284//687 2461//1660 2462//1659
+f 2461//1660 1284//687 2460//1661
+f 2094//781 2260//1176 2258//1178 2093//782
+f 2283//1228 2282//1228 2160//951 2161//950 2301//1276 2280//1226 2281//1225 2279//1224
+f 2270//1197 2065//707 2064//706 2063//692 2061//691
+f 2062//690 2270//1197 2061//691
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/forest.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/forest.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/forest.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/forest.obj	2025-08-26 18:16:07.545772112 +0000
@@ -0,0 +1,16998 @@
+# Forest
+# (C) Linux Studio Plugins Project
+o Crown
+v -9.895969 35.479290 14.013926
+v -5.380883 35.666012 14.227640
+v -7.404320 23.177568 11.895271
+v -14.647302 28.641973 24.711975
+v -7.428742 22.615034 24.835541
+v -5.686970 31.226931 26.467739
+v -16.076418 24.250683 20.892681
+v -1.790244 24.072596 23.693195
+v -5.978638 35.671055 23.447992
+v -8.310428 36.718529 24.392963
+v -3.108002 28.703119 11.544284
+v -1.123244 22.278435 17.270899
+v -39.657166 22.814989 8.848895
+v -33.749100 15.949165 11.649615
+v -46.603741 19.476385 9.387616
+v -40.634018 13.318188 7.144238
+v -46.883488 14.116743 10.321175
+v -42.672493 23.833834 26.330425
+v -47.029388 19.361547 27.707066
+v -38.501438 20.527016 30.676020
+v -48.670013 14.355245 26.795237
+v -40.413631 13.001769 30.778492
+v -34.946953 11.185138 14.506185
+v -22.847408 23.541864 12.564294
+v -16.926674 16.507963 14.882776
+v -26.631554 16.023252 13.978514
+v -19.652924 24.101402 15.103592
+v -20.606571 13.344411 18.033724
+v -18.440197 14.622607 18.314457
+v -17.104591 15.141989 22.103821
+v -18.521372 14.566157 19.343166
+v -18.071518 14.799095 19.861532
+v -16.688404 13.070149 23.118416
+v -17.537802 15.633451 18.999987
+v -16.840054 23.664583 22.178608
+v -25.148102 14.494662 16.108213
+v -27.073273 -18.908781 22.562195
+v -28.648336 -24.263647 21.915804
+v -21.156857 -30.177658 24.556507
+v -51.818203 10.548554 21.932489
+v -55.252663 21.654184 22.945597
+v -55.813107 16.988625 15.187379
+v -41.682373 -45.441078 25.841000
+v -32.428368 -48.612671 25.483934
+v -33.728878 -41.580402 29.684542
+v -38.746525 -32.665714 27.285780
+v -41.569859 -47.305611 20.447071
+v -32.984081 -49.091175 19.027372
+v -39.186592 -40.233845 8.305207
+v -34.654587 -48.859863 13.548094
+v -42.064159 -46.166122 15.211730
+v -34.429230 -40.413372 6.560294
+v -9.865637 -6.499537 21.445642
+v -10.441173 -14.979115 20.932722
+v -11.068961 -7.137710 13.893541
+v -24.252350 -15.642059 16.038332
+v -25.355597 -8.256391 13.809445
+v -20.992397 -8.979524 10.474286
+v -31.931261 -32.985214 25.038759
+v -33.079006 -27.707705 30.120039
+v -36.257172 -25.034061 6.734976
+v -29.835154 -24.067047 13.663328
+v -31.933687 -29.429136 8.587285
+v -32.550236 -36.104744 31.768322
+v -24.566648 -39.388500 22.460848
+v -29.535976 -48.485096 13.366223
+v -25.926025 -36.687244 11.992317
+v -31.939625 -33.659809 12.720390
+v -56.387730 -20.436485 18.646128
+v -55.361774 -13.907925 19.633511
+v -50.262123 -12.663896 14.278434
+v -51.513729 -15.794893 25.423538
+v -52.920334 -23.358677 22.348352
+v -53.042297 -24.374872 16.335270
+v -51.342937 -23.799046 12.870684
+v -26.416439 8.310908 11.311706
+v -28.917997 10.299225 18.765276
+v -26.879524 13.542326 18.711792
+v -28.531401 12.018619 21.875906
+v -28.534714 7.110866 22.529676
+v -21.897049 9.677612 25.903620
+v -21.262657 5.537391 22.751749
+v -23.530899 13.151744 23.310141
+v -19.069868 8.088080 16.329256
+v -22.617908 5.004672 14.750255
+v -54.669422 -26.508944 18.966293
+v -3.366998 1.837570 20.233490
+v -6.614962 0.424046 15.960486
+v 0.183549 9.501696 14.522128
+v -5.956057 10.337846 26.521885
+v 1.787302 9.063901 19.360081
+v -2.367474 11.218024 24.743721
+v -5.661831 14.090223 23.349506
+v -7.019094 9.154321 11.005136
+v -2.607183 15.474751 15.002557
+v -42.111328 -28.118114 10.270661
+v -38.150051 -21.351961 11.027141
+v -34.413578 -20.127150 24.830158
+v -42.016479 -25.643583 28.305817
+v -34.459698 -20.462624 14.252443
+v -9.378195 11.325799 10.253020
+v -14.369601 2.473120 10.766763
+v -15.987492 5.346167 25.624794
+v -11.092683 -1.489885 25.649822
+v -17.984217 8.312402 18.769857
+v -16.626694 10.694278 14.015684
+v -12.616532 13.516092 14.548169
+v 2.112165 48.669716 24.103308
+v 8.467217 47.843548 24.398701
+v 7.958755 50.908497 17.386124
+v -1.400168 50.255417 16.941250
+v 5.281566 40.774647 11.295982
+v 4.185067 48.020458 12.433568
+v 9.412293 46.283161 12.746543
+v 3.743878 26.847904 26.957762
+v 6.579345 21.586445 20.462740
+v 9.896100 28.585203 23.893988
+v 0.965423 30.825830 7.896383
+v 10.153297 28.049286 14.714079
+v 6.552656 32.432453 10.630872
+v -6.788886 17.488861 12.065185
+v -15.380396 24.915234 15.999951
+v -1.121172 14.760348 20.191927
+v -10.656146 14.391703 24.740520
+v -14.078320 16.739277 24.362341
+v -17.130117 15.246751 15.719363
+v -18.630856 14.440638 19.217348
+v -25.418104 -23.590103 15.412292
+v -24.771202 -19.180321 14.829666
+v -18.077417 -23.661953 3.271728
+v -18.518377 -21.994989 34.252022
+v -16.628391 -13.586509 26.141644
+v -23.276466 -16.741055 22.673346
+v -13.540224 -32.552528 19.752583
+v -7.771930 -22.281815 28.930004
+v -21.726034 -29.796326 12.354136
+v -8.533779 -20.341612 7.669467
+v -14.421008 -14.290253 12.159369
+v -49.325005 25.558474 13.482531
+v 19.387854 59.252129 22.267399
+v 22.491163 57.569500 16.040350
+v 13.234011 57.436790 15.635386
+v 9.638877 51.399784 22.671759
+v 16.955034 47.250950 26.015110
+v 28.675983 49.396381 17.181528
+v 25.059080 42.021248 19.456224
+v 13.291681 47.026306 24.624399
+v 11.793038 42.360619 21.921587
+v 13.142259 40.551575 18.504881
+v 12.225047 42.004711 16.066782
+v 14.000075 49.079582 14.970160
+v 18.359221 49.962238 10.338776
+v -52.862358 -34.264717 9.620932
+v -43.621674 -32.095604 6.878080
+v -46.618427 -41.083172 3.671414
+v -46.390720 -39.512814 35.001308
+v -50.296890 -45.051258 26.829195
+v -55.418591 -35.786549 20.051340
+v -46.246613 -32.224361 30.956097
+v -49.229710 -45.559502 11.025587
+v -37.415291 -34.811852 13.605999
+v -53.787132 -39.886898 11.345936
+v -25.318718 38.962429 21.081280
+v -27.204136 45.697887 22.652021
+v -30.547461 35.193336 23.523487
+v -30.064581 51.126778 24.591257
+v -34.835617 43.907993 33.920719
+v -41.979126 40.632305 29.658566
+v -37.940464 36.157837 29.336056
+v -39.806156 34.757633 15.013452
+v -41.776482 39.405231 8.149786
+v -34.408009 43.599689 3.600887
+v -31.987431 34.953194 13.596235
+v -27.357553 36.828373 14.729976
+v -30.751001 48.831043 12.556555
+v -40.512836 48.832851 10.373843
+v -43.582924 45.773106 11.788169
+v -32.273361 11.228068 21.188597
+v -33.748505 15.410755 24.695457
+v -34.636520 11.083464 22.411613
+v -53.226860 39.069622 14.631045
+v -46.796467 50.906189 14.736220
+v -49.898144 42.298828 9.762142
+v -54.209095 43.072975 20.585543
+v -43.407139 46.011845 25.555250
+v -47.200302 49.853748 23.916466
+v -49.256340 44.763550 26.406349
+v -45.723469 52.313808 20.774521
+v -51.632874 4.044853 22.230829
+v -46.510475 -7.462652 21.607405
+v -43.456871 -1.158317 25.040287
+v -50.385246 -5.742570 17.853115
+v -51.049553 3.265749 14.996106
+v -42.923450 -0.679802 12.168762
+v -45.876484 -6.425848 15.019959
+v -23.437487 34.993896 10.700077
+v -19.843262 30.795164 10.336315
+v -27.816593 29.315857 7.033534
+v -26.269381 27.770073 29.903175
+v -20.754969 24.443159 23.753378
+v -22.023731 32.911613 27.407383
+v -25.864132 37.018246 23.215330
+v -1.844899 43.074276 5.002682
+v -1.146232 37.413094 8.478641
+v -0.281424 39.419250 30.363539
+v -4.690264 49.029530 29.151699
+v 7.597122 42.056717 25.822943
+v -8.502994 40.438461 13.781722
+v -4.774222 46.248508 9.021049
+v -31.918242 -4.319633 11.480845
+v -35.171280 -15.436777 13.428601
+v -40.704792 -11.967947 11.301149
+v -44.985775 -9.229341 23.566895
+v -38.416271 -13.535175 26.325489
+v -31.327335 -5.171664 26.053547
+v -46.936703 -10.629478 17.359179
+v -39.620586 -3.531641 11.134545
+v -47.711578 39.079773 30.503895
+v -50.137951 34.425533 23.087048
+v -42.184765 33.009602 22.050295
+v -45.943676 32.698765 14.462934
+v -26.602791 51.445286 22.595451
+v -29.269453 54.818874 16.074282
+v -26.262545 51.475792 16.034393
+v -17.565493 -9.089666 28.202396
+v -25.992033 -9.914518 23.431479
+v -26.621880 -15.469988 22.325060
+v -36.685898 28.106234 4.026008
+v -33.180382 23.140228 6.570333
+v -32.906857 23.951517 31.203979
+v -42.073078 31.315683 23.885067
+v -42.498482 31.435339 15.824010
+v -29.576429 17.385733 14.490797
+v -29.716820 17.190155 22.342150
+v -21.269781 19.180876 25.861032
+v -27.906006 23.105791 24.494249
+v -26.690504 14.633672 21.333874
+v -28.126110 23.763937 13.049232
+v -41.221352 58.124882 14.597529
+v -36.980564 58.958801 21.687395
+v -41.223595 49.640896 26.714741
+v -49.516834 6.902267 6.133211
+v -38.190441 5.056540 6.282091
+v -44.800316 5.944230 33.654053
+v -36.892063 5.002528 31.348896
+v -11.200670 52.841805 23.807169
+v -8.532572 52.940174 15.360593
+v -11.005611 50.520481 12.718217
+v -19.491615 -36.777016 17.623058
+v -18.050842 46.934547 27.599676
+v -12.130248 45.114960 24.553143
+v -17.915726 51.818001 26.222578
+v -18.218269 54.194241 15.652226
+v -16.953917 49.449566 9.530991
+v -10.973335 45.279762 12.677428
+v -30.435791 8.604504 15.500196
+v -49.623135 -52.713230 20.935244
+v -58.902790 -47.080486 19.494463
+v -52.076813 -27.704601 6.085051
+v -47.516048 -25.790674 33.000961
+v -54.043770 -35.562145 26.338427
+v -52.207699 -23.252588 26.587193
+v -28.333250 4.948416 24.728697
+v -39.055199 -3.615182 26.536812
+v -28.721029 0.198779 27.872005
+v -28.175322 6.115002 13.597713
+v -34.505619 -0.100839 4.777629
+v -49.200527 31.657768 20.566143
+v -48.293800 25.995926 24.063643
+v -52.307907 26.019478 20.583181
+v -43.070473 28.956566 12.757126
+v -52.579803 21.813358 11.453225
+v -31.326757 18.660608 28.124039
+v -12.012721 8.750047 25.704016
+v -13.841231 28.619030 13.585730
+v 11.514491 35.425179 9.775723
+v 5.630617 36.387905 8.028480
+v 12.422758 31.699057 18.915659
+v 13.902237 36.586124 27.121403
+v 4.631190 40.448215 27.973349
+v 8.138681 34.150703 28.187872
+v -21.595133 -3.853446 13.393011
+v -29.192629 0.009586 10.549155
+v -21.826885 -4.296218 24.195898
+v -33.332829 -14.469148 23.773960
+v -28.068357 -16.930752 15.096349
+v -30.070562 -11.308423 12.275679
+v -20.092710 44.521152 9.290308
+v -23.646534 43.179173 23.967453
+v -27.078768 45.857090 15.082612
+v -16.151651 -5.275211 11.947135
+v -31.474691 -17.973907 11.331980
+v -45.845596 -18.539948 4.231117
+v -43.533085 -13.407528 33.673676
+v -23.384087 43.178341 14.168326
+v -15.447248 42.499531 34.205780
+v -13.799445 37.581593 4.484079
+v -1.485334 -4.768677 16.441084
+v 0.990863 3.773858 18.210627
+v 6.563632 -0.912908 9.850243
+v 11.402965 -5.592093 11.603754
+v 5.537499 -9.253227 13.180626
+v 4.516082 1.721025 26.215675
+v 6.013690 -8.535444 25.300470
+v 10.858533 -3.847974 27.103037
+v -0.287629 -5.038112 23.010605
+v 37.171562 39.057941 9.635967
+v 43.883453 42.290691 11.913845
+v 42.673752 32.244225 5.969173
+v 36.053696 36.531803 28.016653
+v 42.701332 32.048080 31.020395
+v 40.998718 37.155308 31.645117
+v 48.220886 35.431629 27.995396
+v 46.421406 41.008530 25.854618
+v 40.209576 42.777225 23.977547
+v 52.896511 35.087864 19.908916
+v 48.391911 37.592152 12.257603
+v 29.647915 33.310364 13.540412
+v 34.076965 32.131840 10.952720
+v 27.393103 25.738691 10.959026
+v 30.000772 21.253088 14.618254
+v 29.330910 27.972450 26.005974
+v 28.000101 22.218475 24.543472
+v 38.600613 24.689884 24.907940
+v 33.084686 20.198334 23.147635
+v 36.127934 31.922668 26.492624
+v 46.822708 -9.669147 15.778248
+v 47.838448 -4.723413 13.665525
+v 52.999279 -7.089017 17.457773
+v 48.786335 -7.725429 22.526346
+v 49.846275 -12.027504 19.452547
+v 8.613027 19.542593 15.392542
+v 13.379941 26.063862 10.294264
+v 19.137705 31.291744 15.210695
+v 16.568653 23.338900 28.841660
+v 22.274111 24.514984 25.045977
+v 18.718618 30.751129 23.285555
+v 8.706417 20.179546 23.776596
+v 20.776112 25.007637 11.814616
+v 14.611459 -8.989391 10.584811
+v 15.600273 -12.889729 15.745891
+v 9.245645 -10.518223 14.408474
+v 15.438982 -10.486468 22.742517
+v 14.946573 -3.880591 23.439877
+v 15.753674 -4.041759 15.382051
+v 34.050961 16.204947 22.473043
+v 39.742748 10.021585 24.862040
+v 43.197193 14.084881 22.450399
+v 33.306458 8.812641 22.539850
+v 43.154327 19.963009 25.168192
+v 43.629879 19.959751 12.282477
+v 43.232925 13.601892 14.924575
+v 38.149174 15.736522 12.774162
+v -18.371254 -45.935623 13.539957
+v -13.955760 -40.780773 15.931536
+v -11.848386 -47.525585 12.572204
+v -12.442296 -49.179916 23.843197
+v -15.552944 -46.948574 26.203268
+v -16.526066 -50.458138 18.226341
+v -16.452782 -42.089096 23.640570
+v 28.842489 6.216216 23.116192
+v 32.676346 3.171885 24.915176
+v 6.854543 -13.993800 24.004509
+v -0.586581 -14.562154 19.469290
+v 2.897735 -16.863050 16.109083
+v 9.003305 -13.685594 11.248670
+v 54.669838 -51.265110 16.759251
+v 55.613960 -40.383442 14.756228
+v 56.150078 -38.344955 19.151777
+v 43.744640 -46.793381 26.688042
+v 46.982037 -52.432190 22.295914
+v 53.071053 -44.555691 26.233637
+v -7.738588 -52.672237 24.043783
+v -9.670598 -57.607391 17.088793
+v -3.421839 -54.212276 15.366936
+v -0.150195 -51.188038 21.384148
+v 10.419623 2.592220 7.218241
+v 4.721716 5.161764 15.572896
+v 11.519389 1.488911 30.244236
+v 15.299103 5.748399 22.217640
+v 10.921441 7.521700 22.474010
+v 16.454771 1.426673 23.449594
+v 5.786369 6.282103 22.072739
+v 16.519609 -0.322135 15.162696
+v 15.043739 5.659193 15.636939
+v 11.031728 7.869153 14.937606
+v 18.211880 -3.436537 23.969414
+v 24.692303 -11.008053 19.712708
+v 21.098881 -13.082272 20.094118
+v 24.661165 -6.375411 21.134802
+v 26.236216 -6.092238 15.336308
+v 21.509342 -12.401914 15.370428
+v 18.963205 -3.483418 12.304599
+v 21.800573 -4.939500 15.745810
+v 1.920824 -29.876616 15.664814
+v 6.503211 -22.519501 16.914911
+v 7.756294 -26.548792 12.504924
+v 12.373317 -30.331326 13.897794
+v 6.961779 -31.440474 12.794598
+v 6.653064 -24.537306 23.416155
+v 7.047717 -30.885683 24.353041
+v 11.213727 -29.932859 25.052618
+v 1.481550 -28.946180 20.623463
+v 13.032862 -24.780552 15.023675
+v 18.512293 -19.128895 19.659231
+v 14.878583 -18.994576 9.368382
+v 16.297819 -21.089434 21.421986
+v 12.863385 -14.312878 27.956732
+v 12.849613 -24.918884 23.950907
+v 19.052221 -18.128923 23.528669
+v 17.840883 -16.959543 20.954525
+v 7.721829 -20.685816 12.375637
+v 2.692099 -35.607121 13.021980
+v 13.810658 -34.493698 11.373639
+v 12.986875 -41.732285 10.040227
+v 3.184423 -41.658894 25.635220
+v 5.125894 -45.547562 23.724890
+v 8.980864 -43.054161 27.022717
+v 15.423323 -43.972950 26.255270
+v 12.117069 -47.304020 23.635054
+v 15.377462 -36.897743 26.000687
+v 2.953060 -40.166664 10.811060
+v 7.494678 -47.185505 14.545302
+v 2.590407 -43.739830 14.077184
+v 51.648987 -32.096954 12.447517
+v 54.149975 -33.345398 19.593710
+v 39.163303 -34.490200 23.470026
+v 43.952961 -37.913185 33.311733
+v 42.212021 -30.621904 22.970434
+v 39.066399 -42.491398 26.281698
+v 53.753803 -38.317574 30.712576
+v 49.845421 -30.871805 26.485779
+v 51.399380 -45.699734 10.188414
+v 47.700748 -38.817028 2.614275
+v 38.286346 -35.291550 13.221107
+v 37.845669 -42.342354 10.963897
+v 42.038383 -30.425079 14.298316
+v 13.245769 -46.732723 14.205633
+v 9.736148 -50.520622 13.528756
+v 7.384904 -49.586498 23.197527
+v 14.800404 -52.139919 18.903181
+v -7.811834 -35.470352 17.615807
+v -4.456628 -29.150898 17.851286
+v -2.798553 -35.285934 12.466820
+v -3.746229 -33.168358 24.304583
+v 1.984330 -35.948078 24.157682
+v -7.404144 -35.999741 20.923605
+v 28.157717 -53.608944 22.400635
+v 26.977524 -52.598415 13.049956
+v 33.552643 -51.894318 16.162474
+v 32.504086 -48.823231 23.956696
+v 31.877079 -44.802273 26.086206
+v 29.367491 -43.694912 29.450382
+v 28.566246 -48.574947 11.502800
+v 33.115898 -47.055805 12.686707
+v 24.206554 -39.593639 4.270044
+v 27.548977 -45.541843 6.612158
+v 15.393753 -43.690216 11.271212
+v 30.908010 -38.156868 26.637539
+v 27.162384 -34.275162 21.994907
+v 25.159807 -51.111664 26.578672
+v 20.757282 -44.062077 33.331715
+v 22.252340 -35.465645 28.516508
+v 31.252834 -40.715645 10.509001
+v 26.927588 -34.082474 15.359171
+v 19.656054 -36.053593 9.639797
+v 45.765636 -13.973154 27.862347
+v 46.415920 -8.703913 23.003519
+v 36.929607 -14.307747 25.120790
+v 42.108009 -17.975418 26.418495
+v 37.027626 -17.187891 11.322680
+v 41.904827 -7.746933 12.069323
+v 43.418411 -12.615541 10.889720
+v 31.705950 -0.889089 21.311972
+v 31.596783 0.173674 16.887688
+v 32.879227 -3.863622 16.099096
+v 56.598171 44.222664 14.135714
+v 56.126579 41.685612 24.097790
+v 46.016529 51.054924 17.982958
+v 41.457779 43.755310 17.495853
+v 45.744934 7.004910 8.486133
+v 47.950413 2.914732 9.144629
+v 39.484081 -0.296449 3.515921
+v 39.492188 6.289592 31.046570
+v 34.259609 -5.722099 24.223930
+v 40.802071 -0.616874 34.230507
+v 48.363464 -3.229798 24.156942
+v 43.601437 -6.735396 25.488052
+v 47.918850 3.330933 28.374479
+v 31.612331 2.911034 12.928380
+v 36.470207 8.474887 12.911393
+v 21.732849 29.642706 10.338936
+v 25.993967 33.840034 11.623634
+v 26.784376 30.821098 30.164936
+v 23.366001 37.263168 21.464516
+v 29.125948 32.332874 23.209608
+v 24.842190 22.159437 12.758190
+v 37.656689 27.913548 13.499913
+v 33.509411 16.934435 15.837155
+v 32.151718 -22.648123 15.113968
+v 37.990620 -22.384092 10.205639
+v 25.069052 18.695292 9.179921
+v 30.055744 7.532913 13.873595
+v 20.188122 11.596370 9.113315
+v 29.900843 16.979473 30.097618
+v 32.693932 10.153449 14.913280
+v 34.166367 -15.722364 23.131659
+v 36.833443 -11.025159 22.317991
+v 35.003426 -14.101405 14.965216
+v 34.727409 -31.472963 23.933300
+v 34.842621 -32.087627 13.601885
+v 15.901428 18.893017 3.795186
+v 15.133305 15.761583 32.886993
+v 11.565284 11.158407 25.684263
+v 19.438553 8.925119 23.790083
+v 21.500917 10.431974 27.603918
+v 24.985023 19.122496 25.926376
+v 12.856858 10.261971 11.739075
+v 20.020798 8.643314 13.859782
+v 19.576733 -57.512779 21.695282
+v 13.490202 -51.342026 16.888437
+v 17.947104 -50.731331 11.141426
+v 57.236275 20.636795 21.096426
+v 54.446712 17.739677 12.818709
+v 51.168236 23.226536 5.362507
+v 47.641693 25.705559 31.127163
+v 51.583134 16.009533 26.750132
+v 50.932129 26.958969 30.104025
+v 54.485348 28.484575 16.122448
+v 48.724552 25.160673 7.357959
+v 33.818760 45.855556 19.719469
+v 31.911919 39.998985 11.155024
+v 27.664740 37.545280 22.970465
+v 27.974972 37.779976 14.921725
+v 2.926424 -52.042320 19.256142
+v 2.453739 -49.965088 15.737546
+v -10.847728 -40.711979 11.410068
+v -5.625197 -38.576065 9.028985
+v -4.954663 -45.298546 4.473378
+v -2.641075 -38.065506 30.121859
+v -12.297677 -43.304993 25.197155
+v -1.691778 -52.475380 28.042377
+v 53.963322 -0.367301 20.987150
+v 51.374592 11.624549 23.695490
+v 54.537560 10.690503 17.452641
+v 52.286762 -1.178828 14.588678
+v 50.660282 12.274777 13.607096
+v 42.872883 -22.189606 23.315578
+v 51.633175 -18.263119 18.256735
+v 46.704170 -17.113817 9.401239
+v 42.408493 -19.533556 12.798364
+v 28.367151 -15.548941 12.962204
+v 23.669218 -21.325438 12.904368
+v 31.624334 -14.397182 18.918894
+v 22.248281 -22.053343 23.715767
+v 28.701342 -22.244793 24.238064
+v 30.156694 -15.058847 24.720676
+v 19.564251 -20.750628 16.027233
+v 32.131397 -28.941681 14.425417
+v 36.059933 -21.842176 26.676575
+v 32.015545 -23.098236 22.494310
+v 40.431133 -22.674383 25.921864
+v 42.732422 -22.421053 14.295007
+v 39.461468 -57.058651 21.282156
+v 44.349010 -49.528809 11.572008
+v 17.582390 -29.486710 5.123083
+v 21.060499 -24.410078 10.117791
+v 25.538137 -27.084028 9.732551
+v 19.692909 -24.665619 32.741123
+v 27.650806 -28.533953 26.707747
+v 24.159296 2.704016 5.113870
+v 26.568132 -0.679316 29.290709
+v 23.797688 6.485804 31.892443
+v 37.843567 28.449272 23.734009
+v 31.025274 -32.650818 21.600431
+v 30.326784 -32.667740 18.699930
+v 48.608345 -24.857819 9.821372
+v 57.765800 -26.176018 19.778214
+v 1.403341 -17.219044 21.724312
+v 13.439794 -10.748627 24.901556
+v 8.840998 -11.417746 22.630836
+v 7.738081 8.749319 17.479738
+v -37.185631 -34.144539 24.161514
+v -29.856485 -30.552607 12.633641
+v -25.021296 38.902241 17.149893
+v -8.743529 41.291073 22.740833
+v -50.564018 12.432913 12.260192
+v -16.160103 45.476627 11.656381
+v 10.870459 -24.197359 22.217205
+v 30.336288 -32.664650 18.699944
+vn 0.0392 0.1773 -0.9834
+vn -0.1466 -0.1555 0.9769
+vn -0.4352 -0.5060 0.7447
+vn 0.2498 -0.2288 0.9409
+vn 0.5094 0.5063 0.6958
+vn -0.2517 0.2345 0.9390
+vn 0.5373 -0.4626 -0.7052
+vn 0.0792 -0.3173 -0.9450
+vn 0.2907 0.5635 -0.7733
+vn -0.4624 -0.1287 -0.8773
+vn -0.3393 0.5626 0.7539
+vn -0.4372 -0.0205 0.8992
+vn 0.5982 -0.5174 -0.6120
+vn 0.1018 -0.2331 -0.9671
+vn 0.8068 0.3044 -0.5063
+vn 0.5166 -0.8259 -0.2259
+vn 0.5580 -0.8218 -0.1150
+vn 0.9789 -0.0041 -0.2045
+vn 0.0969 -0.7754 -0.6240
+vn 0.0867 -0.7518 -0.6536
+vn 0.5803 0.2311 -0.7809
+vn -0.3415 -0.0130 0.9398
+vn -0.9181 -0.3068 0.2508
+vn -0.1484 -0.5272 0.8367
+vn -0.4343 -0.0021 0.9008
+vn -0.1887 -0.9780 0.0887
+vn -0.3793 -0.6179 -0.6887
+vn -0.2943 -0.6045 -0.7402
+vn 0.9866 -0.0578 -0.1523
+vn -0.6092 -0.3111 -0.7295
+vn 0.8949 -0.1928 0.4024
+vn 0.6560 0.3674 -0.6593
+vn 0.6808 0.6386 0.3587
+vn 0.4364 -0.4005 0.8057
+vn 0.6537 -0.3347 0.6788
+vn 0.2519 -0.9665 0.0499
+vn 0.7770 -0.6035 0.1791
+vn 0.9301 -0.3079 -0.2002
+vn 0.5998 -0.2712 -0.7528
+vn 0.2167 0.6131 -0.7597
+vn -0.7318 0.2129 -0.6474
+vn -0.8405 -0.0625 0.5382
+vn -0.7259 0.0101 0.6878
+vn 0.0555 0.9596 0.2758
+vn -0.7923 -0.4054 -0.4560
+vn -0.6971 0.1561 -0.6998
+vn -0.7939 0.4659 -0.3907
+vn -0.7961 0.4947 -0.3485
+vn -0.4853 0.1158 0.8667
+vn -0.1564 -0.6133 0.7742
+vn -0.3393 0.4551 0.8233
+vn 0.9525 -0.0780 0.2942
+vn 0.9487 0.1971 0.2474
+vn 0.6787 0.6168 0.3987
+vn -0.2895 0.9127 0.2884
+vn 0.5465 -0.2142 -0.8096
+vn 0.5257 0.3976 -0.7521
+vn 0.4425 0.4912 -0.7503
+vn -0.7267 -0.2396 -0.6438
+vn 0.7218 -0.5963 -0.3514
+vn 0.4610 -0.6420 0.6127
+vn 0.2213 0.6194 0.7532
+vn 0.7580 -0.5773 -0.3035
+vn 0.4191 -0.4334 -0.7978
+vn 0.4119 -0.4353 -0.8005
+vn 0.4125 -0.4352 -0.8003
+vn 0.4130 0.2631 -0.8719
+vn -0.6224 0.4370 -0.6494
+vn -0.2047 -0.5442 -0.8136
+vn -0.2046 -0.5443 -0.8135
+vn -0.2047 -0.5445 -0.8134
+vn 0.6502 0.5084 0.5646
+vn -0.2480 -0.2514 0.9356
+vn -0.0359 0.5676 0.8225
+vn 0.4748 0.6970 -0.5374
+vn 0.1701 -0.1524 -0.9736
+vn -0.0671 -0.0444 0.9968
+vn 0.6328 -0.3266 0.7020
+vn -0.4581 0.2365 0.8569
+vn 0.3968 -0.9179 0.0020
+vn -0.8054 0.5042 -0.3117
+vn 0.4197 -0.4333 -0.7976
+vn -0.7250 0.0716 -0.6850
+vn -0.4647 0.2121 -0.8597
+vn -0.3872 0.6698 -0.6335
+vn 0.1006 0.9143 0.3923
+vn -0.0793 0.9644 0.2524
+vn 0.1154 0.1711 -0.9785
+vn -0.2619 -0.4696 0.8431
+vn 0.0145 -0.7738 0.6332
+vn 0.4906 -0.5599 0.6677
+vn -0.1874 -0.9509 0.2462
+vn -0.2532 -0.6861 -0.6820
+vn 0.1967 -0.7459 -0.6363
+vn 0.2615 -0.7182 -0.6449
+vn 0.4907 -0.3431 -0.8010
+vn 0.5870 0.0393 -0.8086
+vn -0.9745 0.1942 -0.1123
+vn 0.6553 0.1064 -0.7479
+vn 0.9512 -0.1115 -0.2877
+vn 0.2592 0.5100 0.8202
+vn 0.0690 -0.1574 0.9851
+vn 0.5731 -0.0240 0.8191
+vn 0.7510 0.2393 0.6154
+vn -0.3431 0.3171 0.8841
+vn 0.1131 -0.9850 0.1302
+vn -0.3492 0.0903 -0.9327
+vn -0.0608 -0.6797 0.7310
+vn -0.8542 0.0570 -0.5168
+vn -0.5724 0.6323 0.5221
+vn 0.1459 -0.7752 0.6146
+vn -0.8008 -0.3322 0.4983
+vn 0.2909 -0.7231 0.6264
+vn 0.3673 0.6016 0.7093
+vn -0.4365 0.7382 0.5143
+vn -0.3065 -0.9517 -0.0154
+vn 0.8958 -0.4386 -0.0721
+vn 0.9401 0.3408 -0.0026
+vn 0.1701 -0.8470 -0.5037
+vn 0.4835 -0.7078 -0.5150
+vn -0.8298 -0.2471 -0.5003
+vn 0.1124 0.6603 -0.7425
+vn -0.4692 0.6971 -0.5421
+vn -0.2805 0.4465 -0.8497
+vn -0.0024 0.9651 -0.2620
+vn -0.2297 0.3322 0.9148
+vn 0.5809 0.1330 0.8030
+vn 0.6072 -0.0533 0.7927
+vn -0.3587 0.1140 0.9265
+vn 0.6603 -0.5238 0.5381
+vn 0.0411 -0.7559 0.6534
+vn 0.7638 0.6082 0.2163
+vn -0.5820 0.7399 0.3375
+vn -0.7421 0.6468 0.1758
+vn 0.1453 -0.8249 -0.5463
+vn -0.7334 0.0794 -0.6752
+vn 0.1912 -0.6662 -0.7208
+vn 0.4722 -0.4629 -0.7502
+vn 0.5389 0.2978 -0.7879
+vn -0.7270 -0.0120 -0.6865
+vn 0.0268 0.5901 -0.8068
+vn -0.3471 0.4157 -0.8407
+vn 0.5137 0.1312 -0.8479
+vn 0.0257 -0.8332 0.5524
+vn -0.8628 -0.1172 0.4918
+vn 0.4163 0.4349 0.7984
+vn -0.0053 -0.9451 0.3266
+vn 0.1946 -0.8670 -0.4587
+vn 0.7578 0.3125 -0.5729
+vn -0.7347 -0.0856 -0.6729
+vn 0.4660 -0.0752 0.8816
+vn 0.2459 0.6145 0.7496
+vn 0.7927 0.2138 0.5708
+vn 0.8237 -0.2188 0.5231
+vn -0.3437 -0.3723 0.8621
+vn 0.1040 -0.8094 -0.5779
+vn -0.0965 -0.7642 -0.6377
+vn 0.4165 -0.6352 -0.6504
+vn 0.8755 0.1653 -0.4541
+vn -0.6050 0.2586 -0.7530
+vn -0.6057 0.2587 -0.7525
+vn -0.6048 0.2587 -0.7531
+vn -0.6097 0.2585 -0.7493
+vn 0.4243 -0.4892 0.7620
+vn -0.8447 0.4613 -0.2715
+vn -0.7943 0.4353 -0.4237
+vn 0.0407 0.4257 0.9039
+vn -0.7201 0.5171 0.4626
+vn -0.7066 0.7059 0.0498
+vn -0.8430 0.5374 0.0245
+vn -0.4521 -0.2477 0.8569
+vn -0.7270 -0.3554 0.5875
+vn -0.9930 -0.0954 -0.0698
+vn -0.5417 -0.1334 -0.8299
+vn -0.4404 -0.3008 -0.8459
+vn 0.3057 0.3388 -0.8898
+vn 0.6700 -0.2072 0.7129
+vn -0.2378 0.5760 0.7821
+vn -0.1745 0.5820 0.7942
+vn 0.6312 -0.1795 -0.7545
+vn 0.4073 -0.5221 -0.7494
+vn -0.3441 0.6821 -0.6452
+vn 0.5339 -0.3936 -0.7484
+vn -0.1407 -0.8173 0.5588
+vn 0.4016 0.2936 0.8674
+vn 0.5037 0.5834 0.6371
+vn -0.5563 -0.1522 0.8169
+vn 0.1557 0.9778 0.1401
+vn -0.6349 -0.4725 -0.6113
+vn 0.6845 0.2130 -0.6972
+vn -0.7997 0.0216 -0.6000
+vn 0.2200 -0.2304 -0.9479
+vn -0.2413 0.2351 0.9415
+vn -0.7047 -0.2009 -0.6805
+vn -0.5446 0.0535 -0.8370
+vn 0.0423 -0.0252 -0.9988
+vn 0.0032 0.4993 -0.8664
+vn 0.0047 0.4973 -0.8675
+vn 0.0049 0.4971 -0.8677
+vn -0.0769 -0.8330 0.5479
+vn -0.8516 -0.2711 0.4487
+vn 0.2840 -0.6812 0.6748
+vn -0.0363 0.5779 0.8153
+vn -0.4862 -0.5376 -0.6889
+vn -0.3414 -0.5230 -0.7810
+vn 0.3035 -0.7463 -0.5924
+vn 0.5020 -0.0440 0.8637
+vn 0.1505 0.9018 0.4050
+vn 0.4144 0.3826 -0.8258
+vn -0.4065 -0.4493 0.7956
+vn -0.3561 -0.2419 0.9026
+vn -0.1672 -0.1743 0.9704
+vn 0.3404 -0.2272 -0.9124
+vn 0.0854 0.1850 0.9790
+vn 0.4883 0.7134 0.5027
+vn -0.4456 -0.0469 0.8940
+vn -0.8613 0.2189 0.4586
+vn -0.8699 0.3348 0.3621
+vn -0.1437 0.7037 -0.6958
+vn 0.0541 0.8609 -0.5058
+vn -0.7308 0.4719 -0.4932
+vn -0.2064 -0.0795 -0.9752
+vn -0.3266 -0.2332 0.9159
+vn -0.5931 -0.7902 -0.1540
+vn -0.0979 -0.1982 -0.9753
+vn -0.7915 0.6112 -0.0018
+vn 0.2879 0.9158 -0.2799
+vn -0.5052 0.5765 0.6421
+vn 0.1129 0.4315 0.8950
+vn 0.6303 0.6891 0.3576
+vn -0.6003 0.7526 0.2705
+vn 0.1937 0.4609 -0.8661
+vn 0.2243 0.4174 -0.8806
+vn 0.0315 0.1129 -0.9931
+vn -0.9798 0.1746 -0.0978
+vn -0.5838 -0.6688 0.4604
+vn 0.2959 0.1969 0.9347
+vn -0.3026 0.5149 0.8021
+vn -0.8595 0.0209 0.5106
+vn -0.9901 -0.0345 -0.1363
+vn -0.9901 -0.0365 -0.1358
+vn -0.9901 -0.0347 -0.1362
+vn -0.0997 -0.6713 -0.7344
+vn 0.7961 0.2908 -0.5307
+vn -0.3174 0.5601 -0.7652
+vn -0.5906 0.4459 -0.6726
+vn -0.6198 0.2140 -0.7550
+vn -0.5860 0.7910 -0.1759
+vn -0.0719 0.0959 -0.9928
+vn 0.1105 -0.2592 0.9595
+vn -0.0503 0.3534 0.9341
+vn 0.7320 -0.3970 0.5537
+vn 0.6169 -0.3387 -0.7104
+vn 0.2569 0.5458 -0.7976
+vn 0.4645 0.0296 0.8851
+vn 0.2933 0.2519 0.9222
+vn -0.0690 0.9729 0.2207
+vn 0.3863 0.9041 -0.1825
+vn 0.4709 0.0098 -0.8821
+vn 0.1685 0.7956 -0.5819
+vn -0.9216 0.2449 0.3013
+vn 0.5333 -0.8147 -0.2277
+vn -0.4518 -0.5686 0.6874
+vn -0.6621 0.1682 0.7303
+vn -0.3675 -0.7471 -0.5539
+vn 0.2596 -0.7879 -0.5585
+vn -0.5628 -0.4117 -0.7168
+vn -0.1537 -0.4545 -0.8774
+vn -0.9772 0.1569 -0.1430
+vn -0.3637 -0.3466 0.8646
+vn -0.7826 0.1043 0.6137
+vn -0.9683 0.1403 0.2067
+vn -0.9586 0.1082 0.2634
+vn -0.9707 -0.0130 -0.2398
+vn -0.8655 -0.3561 0.3523
+vn 0.4507 0.6810 0.5771
+vn 0.0731 -0.5002 0.8628
+vn 0.4605 0.5355 -0.7079
+vn 0.4014 0.6515 -0.6438
+vn -0.6319 -0.2361 -0.7382
+vn -0.3596 0.4480 0.8185
+vn -0.6147 0.3409 0.7113
+vn 0.4737 0.6396 -0.6053
+vn -0.2411 0.2432 -0.9395
+vn -0.2213 0.8156 0.5346
+vn -0.8783 0.4351 -0.1982
+vn -0.4998 0.0060 0.8661
+vn -0.5987 -0.6730 -0.4343
+vn -0.0249 -0.6778 0.7349
+vn -0.9107 -0.3969 0.1146
+vn -0.9112 -0.3955 0.1156
+vn -0.9081 -0.4040 0.1098
+vn -0.9074 -0.4061 0.1084
+vn -0.2539 -0.5446 -0.7994
+vn 0.8589 -0.3856 0.3372
+vn 0.1931 -0.4499 0.8719
+vn 0.0456 -0.7409 0.6701
+vn 0.5992 -0.4930 -0.6308
+vn -0.5748 0.1469 0.8050
+vn 0.3119 0.9333 0.1778
+vn 0.4118 0.9004 0.1406
+vn 0.2512 0.8164 -0.5200
+vn 0.3613 0.4942 -0.7907
+vn -0.5084 0.0036 -0.8611
+vn -0.1843 0.2084 0.9605
+vn 0.2722 -0.6023 -0.7505
+vn -0.1332 -0.9794 -0.1520
+vn 0.3175 0.5826 -0.7482
+vn 0.1655 -0.5148 -0.8412
+vn 0.9882 -0.0859 -0.1270
+vn 0.9873 -0.0864 -0.1333
+vn 0.9877 -0.0863 -0.1301
+vn 0.5913 0.7511 0.2935
+vn 0.1360 0.1093 0.9847
+vn 0.2928 0.5269 0.7979
+vn 0.4184 -0.8115 0.4079
+vn 0.9882 -0.0862 -0.1268
+vn 0.2070 -0.5704 -0.7949
+vn 0.4862 0.7109 -0.5082
+vn 0.4732 0.3292 -0.8171
+vn 0.2135 -0.2711 -0.9386
+vn 0.1543 -0.2997 -0.9415
+vn 0.2113 -0.4039 0.8901
+vn 0.1760 -0.2114 0.9614
+vn 0.3291 -0.3272 -0.8858
+vn 0.4198 -0.2042 -0.8843
+vn -0.4848 0.3480 -0.8024
+vn -0.3197 0.0428 0.9465
+vn -0.5223 -0.0454 0.8516
+vn -0.3815 0.2606 0.8869
+vn -0.1337 0.9661 0.2210
+vn -0.3206 0.9471 -0.0122
+vn -0.5980 0.2175 -0.7714
+vn -0.2767 0.7310 -0.6238
+vn 0.7489 0.6597 -0.0624
+vn 0.5201 0.8270 -0.2134
+vn -0.4474 -0.2023 -0.8711
+vn -0.1203 -0.4684 0.8753
+vn 0.5450 -0.2603 -0.7970
+vn 0.1201 -0.2380 0.9638
+vn 0.2660 -0.5440 -0.7958
+vn 0.2121 0.7106 -0.6708
+vn -0.0555 0.0702 -0.9960
+vn -0.1941 -0.3139 0.9294
+vn 0.1076 -0.2277 0.9678
+vn 0.4930 -0.3951 -0.7752
+vn -0.7622 -0.1896 -0.6190
+vn -0.1138 -0.0779 0.9904
+vn 0.9103 -0.1116 0.3986
+vn 0.2825 -0.2076 -0.9365
+vn 0.5382 -0.0879 -0.8382
+vn -0.2249 0.1222 -0.9667
+vn -0.1857 0.6087 -0.7714
+vn 0.2909 0.0278 0.9564
+vn 0.2284 0.1363 0.9640
+vn -0.5879 -0.2112 -0.7809
+vn -0.8722 0.1438 -0.4675
+vn 0.6891 0.2079 -0.6943
+vn 0.5854 -0.2567 -0.7691
+vn -0.6011 0.7044 0.3776
+vn 0.5574 -0.2746 0.7835
+vn 0.4368 0.8518 0.2893
+vn -0.2451 -0.4148 0.8763
+vn -0.7324 0.1710 0.6590
+vn -0.9799 0.1164 0.1618
+vn -0.6858 0.7171 0.1244
+vn -0.1877 0.9006 -0.3921
+vn 0.4323 0.1437 -0.8902
+vn -0.2337 0.7910 -0.5654
+vn -0.8357 0.2189 -0.5036
+vn -0.0265 -0.5660 0.8240
+vn 0.5875 -0.4340 0.6830
+vn 0.8407 0.3750 0.3905
+vn -0.7747 0.0874 0.6262
+vn -0.6547 0.1451 0.7419
+vn 0.1204 -0.7076 -0.6963
+vn 0.7971 -0.4321 -0.4218
+vn 0.8707 -0.2640 -0.4149
+vn 0.7938 0.2821 -0.5389
+vn 0.2063 0.6766 -0.7069
+vn -0.5541 0.0718 -0.8293
+vn -0.2004 -0.9795 0.0198
+vn 0.1306 0.3033 -0.9439
+vn -0.0738 0.0782 0.9942
+vn -0.6877 0.3330 -0.6451
+vn -0.0197 -0.3687 -0.9293
+vn -0.2411 -0.1211 0.9629
+vn -0.4058 -0.1399 0.9032
+vn -0.8142 0.3643 0.4520
+vn -0.5364 -0.2552 -0.8044
+vn 0.0498 0.5042 -0.8622
+vn -0.5447 -0.2778 0.7913
+vn -0.5425 -0.2722 0.7947
+vn -0.5451 -0.2785 0.7908
+vn 0.4862 0.4455 0.7518
+vn 0.0527 0.8079 0.5869
+vn 0.0525 0.8075 0.5875
+vn 0.0512 0.8058 0.5900
+vn 0.7916 0.4242 0.4397
+vn 0.4797 0.4033 -0.7792
+vn -0.3815 0.3980 -0.8343
+vn 0.4054 -0.4247 -0.8095
+vn 0.0254 -0.2518 0.9674
+vn 0.0715 -0.4389 0.8957
+vn 0.0455 -0.1989 0.9790
+vn 0.3993 -0.4283 -0.8106
+vn 0.7608 -0.2426 0.6019
+vn 0.4269 -0.5595 -0.7104
+vn -0.7838 0.0930 -0.6140
+vn -0.9010 0.1301 -0.4139
+vn -0.2615 0.7945 -0.5481
+vn -0.2612 0.7945 -0.5482
+vn -0.2545 0.7963 -0.5487
+vn 0.2102 0.7989 0.5636
+vn -0.0003 0.2715 0.9624
+vn -0.5594 0.0676 0.8261
+vn 0.2425 0.5094 -0.8257
+vn -0.1788 -0.8011 -0.5712
+vn 0.6669 -0.0289 0.7446
+vn 0.9781 -0.0255 -0.2066
+vn 0.4002 0.5886 -0.7024
+vn 0.1043 0.4405 0.8917
+vn -0.3463 0.0433 0.9371
+vn -0.2196 -0.1585 0.9626
+vn 0.2171 -0.3861 -0.8965
+vn -0.0262 0.4391 -0.8981
+vn -0.3014 -0.8587 0.4145
+vn -0.9749 -0.0690 0.2115
+vn -0.9621 -0.1861 0.1992
+vn -0.7258 0.6774 -0.1201
+vn -0.2719 -0.7437 -0.6107
+vn -0.1129 0.3963 0.9112
+vn -0.4583 -0.2715 0.8463
+vn -0.4814 -0.2922 0.8264
+vn -0.9834 -0.0353 0.1778
+vn -0.7533 -0.2564 -0.6056
+vn -0.5847 -0.1067 -0.8042
+vn -0.4963 -0.1564 -0.8539
+vn 0.9922 -0.0998 -0.0747
+vn 0.1703 -0.5428 0.8224
+vn 0.5006 -0.6644 0.5550
+vn 0.9488 -0.1592 0.2729
+vn -0.5198 -0.6697 0.5304
+vn -0.5387 -0.6092 0.5819
+vn 0.5202 -0.7580 0.3934
+vn 0.2841 -0.9097 0.3028
+vn -0.5697 -0.4354 -0.6971
+vn -0.0262 -0.4134 -0.9102
+vn -0.7226 0.3452 -0.5990
+vn -0.1522 -0.4810 -0.8634
+vn 0.3389 0.7556 0.5606
+vn 0.7874 -0.2248 0.5740
+vn -0.4659 -0.4053 0.7866
+vn 0.5896 -0.4627 0.6621
+vn 0.7570 0.3582 0.5465
+vn -0.2309 0.7598 0.6077
+vn -0.3477 0.6816 0.6438
+vn 0.6844 -0.2788 -0.6737
+vn 0.7435 -0.1909 -0.6409
+vn 0.8104 0.2423 -0.5334
+vn -0.3835 0.7763 -0.5003
+vn -0.1659 0.0453 0.9851
+vn 0.2779 -0.2788 0.9193
+vn 0.2855 -0.2722 0.9189
+vn 0.2763 -0.2797 0.9195
+vn 0.2790 -0.3166 0.9066
+vn 0.2763 -0.2803 0.9193
+vn 0.9634 -0.0728 0.2581
+vn 0.0729 -0.9880 -0.1360
+vn -0.0324 -0.3332 -0.9423
+vn 0.7719 0.0019 -0.6357
+vn -0.0781 0.0531 -0.9955
+vn -0.6141 0.4879 -0.6203
+vn 0.2171 -0.0928 -0.9717
+vn -0.1933 0.1315 0.9723
+vn -0.5322 0.0911 0.8417
+vn -0.6998 0.6775 0.2264
+vn 0.0664 0.7459 -0.6627
+vn 0.9192 0.2273 -0.3216
+vn 0.5520 -0.8082 -0.2054
+vn 0.4111 -0.3226 0.8526
+vn 0.5730 0.8134 0.0999
+vn -0.1020 -0.3514 0.9307
+vn 0.8714 -0.4557 -0.1818
+vn -0.1495 -0.6663 -0.7305
+vn 0.3792 0.6391 -0.6691
+vn 0.3787 0.6399 -0.6687
+vn 0.3738 0.6485 -0.6631
+vn -0.3697 -0.0813 -0.9256
+vn -0.1630 0.1967 -0.9668
+vn -0.3167 -0.5409 0.7792
+vn 0.0048 -0.6212 0.7837
+vn 0.1233 0.0365 0.9917
+vn -0.0436 0.2075 0.9773
+vn -0.1872 0.1820 0.9653
+vn -0.3605 -0.6091 -0.7064
+vn -0.1476 -0.5373 -0.8304
+vn -0.0011 0.4363 -0.8998
+vn 0.0627 0.5332 -0.8436
+vn 0.8985 0.3598 -0.2516
+vn -0.6417 0.5718 0.5112
+vn -0.5217 -0.5022 0.6897
+vn 0.1840 -0.5905 0.7858
+vn 0.1794 -0.5871 0.7894
+vn 0.1791 -0.5871 0.7894
+vn 0.1792 -0.5867 0.7898
+vn 0.2326 0.5696 0.7883
+vn -0.2445 0.7726 0.5859
+vn 0.9491 -0.2455 0.1973
+vn 0.8155 -0.1715 -0.5528
+vn 0.8152 -0.1708 -0.5534
+vn 0.8155 -0.1717 -0.5527
+vn 0.8250 0.2541 -0.5049
+vn -0.6767 0.2625 -0.6879
+vn -0.5260 0.5493 -0.6494
+vn -0.0763 0.2435 -0.9669
+vn -0.4592 -0.3627 0.8109
+vn -0.4768 -0.7355 0.4813
+vn -0.6697 0.3793 -0.6384
+vn 0.1157 0.4288 -0.8960
+vn 0.0501 0.9824 -0.1799
+vn 0.2408 0.4511 0.8594
+vn -0.2750 0.8023 0.5298
+vn -0.8303 0.4275 0.3575
+vn -0.7070 0.6795 0.1959
+vn -0.1912 0.6178 -0.7628
+vn 0.1646 -0.9782 -0.1265
+vn 0.7471 -0.2164 0.6285
+vn 0.3624 -0.5691 0.7381
+vn 0.6311 -0.6890 0.3564
+vn 0.4189 -0.4653 -0.7798
+vn 0.3733 -0.5188 -0.7691
+vn -0.3741 -0.5141 -0.7718
+vn -0.4191 0.5011 0.7571
+vn -0.5494 -0.7309 0.4049
+vn 0.3609 0.4072 0.8390
+vn 0.5970 0.5791 0.5552
+vn 0.6680 0.0843 -0.7393
+vn 0.5341 0.6975 -0.4777
+vn -0.6675 0.2206 -0.7111
+vn 0.1299 0.8748 -0.4667
+vn 0.8147 0.3356 0.4729
+vn 0.0073 0.3426 0.9394
+vn -0.1905 0.1748 -0.9660
+vn -0.9546 -0.2940 -0.0471
+vn 0.1596 0.0812 -0.9838
+vn 0.0508 0.8052 0.5908
+vn 0.0330 0.5709 0.8203
+vn 0.5851 0.7788 0.2260
+vn -0.8429 0.5319 -0.0821
+vn 0.9112 -0.4076 -0.0607
+vn 0.0597 0.5584 -0.8274
+vn 0.5111 0.1391 -0.8482
+vn -0.6434 0.6667 0.3762
+vn -0.7766 -0.1851 0.6022
+vn 0.5809 -0.5677 0.5833
+vn 0.4223 0.7684 0.4808
+vn -0.5181 -0.7117 -0.4744
+vn -0.5180 -0.7122 -0.4738
+vn -0.5189 -0.7062 -0.4817
+vn 0.6077 -0.4111 -0.6795
+vn -0.7686 -0.3834 -0.5121
+vn -0.2284 0.6740 -0.7025
+vn -0.5736 0.4988 -0.6497
+vn -0.8781 0.0292 -0.4776
+vn 0.1842 0.1119 -0.9765
+vn -0.5401 0.5609 0.6275
+vn 0.5460 0.7615 0.3493
+vn -0.6406 -0.1528 0.7526
+vn -0.0729 -0.4059 -0.9110
+vn 0.4764 0.1533 -0.8658
+vn -0.0919 -0.2848 -0.9542
+vn -0.5210 0.6849 -0.5094
+vn 0.0566 -0.2283 -0.9719
+vn -0.6440 0.0448 -0.7637
+vn 0.3450 -0.2287 -0.9103
+vn 0.4025 -0.5257 0.7494
+vn 0.9099 -0.0044 0.4148
+vn 0.4605 -0.0384 0.8868
+vn 0.4849 -0.1460 -0.8623
+vn 0.6230 0.0316 -0.7816
+vn 0.3508 0.6838 -0.6398
+vn -0.8689 0.4949 0.0092
+vn 0.1378 0.2942 -0.9458
+vn -0.0005 -0.0828 0.9966
+vn -0.3890 0.5278 0.7551
+vn 0.1525 0.2767 -0.9488
+vn -0.2975 0.4295 -0.8527
+vn 0.4749 -0.3188 -0.8202
+vn -0.0948 -0.8169 0.5690
+vn -0.8413 -0.1572 0.5172
+vn -0.2903 -0.8259 0.4833
+vn 0.5939 -0.0836 0.8002
+vn 0.4582 0.3495 0.8173
+vn -0.6040 0.4614 0.6498
+vn -0.1535 -0.6393 -0.7535
+vn -0.0351 -0.8480 -0.5288
+vn 0.3843 0.6754 -0.6295
+vn 0.5135 0.5027 -0.6954
+vn -0.8374 -0.1797 -0.5162
+vn -0.3079 -0.3804 0.8721
+vn -0.3098 -0.3902 0.8671
+vn -0.3083 -0.3823 0.8711
+vn -0.3098 -0.3910 0.8667
+vn -0.7791 -0.6023 0.1737
+vn -0.7102 -0.3819 -0.5914
+vn 0.9342 0.0884 -0.3457
+vn -0.3820 -0.5048 0.7741
+vn -0.3846 -0.5132 0.7672
+vn -0.3824 -0.5062 0.7730
+vn 0.7577 -0.1495 0.6352
+vn 0.8449 0.4644 0.2654
+vn 0.9333 0.1106 -0.3417
+vn 0.2612 0.8331 -0.4876
+vn 0.0583 0.8180 -0.5723
+vn -0.3742 0.5648 0.7355
+vn -0.2029 0.6234 0.7551
+vn -0.6739 0.6712 -0.3089
+vn -0.6357 -0.1555 -0.7561
+vn 0.0047 0.8573 -0.5149
+vn 0.5330 -0.6953 -0.4821
+vn -0.5190 -0.7056 -0.4825
+vn 0.0131 -0.3326 0.9430
+vn -0.8949 -0.4434 0.0506
+vn -0.8919 -0.4497 0.0485
+vn -0.8916 -0.4502 0.0485
+vn -0.5158 0.4448 -0.7322
+vn 0.2667 0.5588 -0.7853
+vn -0.5928 0.6638 0.4560
+vn -0.4447 -0.5588 0.7000
+vn 0.5884 -0.0774 0.8049
+vn -0.4006 -0.1567 0.9027
+vn -0.3560 -0.2015 0.9125
+vn -0.4028 -0.7353 -0.5450
+vn 0.4970 -0.6360 -0.5903
+vn 0.7129 -0.3437 -0.6113
+vn 0.9925 0.0107 0.1219
+vn 0.7803 0.0273 0.6248
+vn 0.5983 -0.4042 0.6919
+vn 0.8937 0.0938 0.4388
+vn 0.9635 -0.1256 -0.2365
+vn 0.8402 0.3929 -0.3738
+vn 0.7059 0.0368 -0.7073
+vn 0.7084 0.0262 -0.7053
+vn 0.7086 0.0254 -0.7052
+vn -0.0023 0.6980 -0.7161
+vn 0.2734 -0.5376 0.7976
+vn 0.5891 -0.5400 0.6011
+vn 0.8726 0.1617 0.4608
+vn 0.8378 0.3475 -0.4212
+vn 0.4737 0.5686 -0.6726
+vn -0.5634 -0.1423 -0.8138
+vn -0.2395 0.2043 -0.9491
+vn 0.2370 0.8609 -0.4501
+vn -0.9186 0.3946 -0.0230
+vn 0.3738 0.8510 -0.3689
+vn -0.0812 -0.0186 0.9965
+vn -0.0935 -0.0478 0.9945
+vn -0.2497 0.6120 0.7504
+vn -0.5771 0.6064 0.5470
+vn -0.6892 -0.7147 0.1195
+vn 0.4487 0.8680 0.2125
+vn -0.2606 0.5917 0.7629
+vn -0.7988 -0.0273 -0.6010
+vn -0.6403 0.6562 -0.3992
+vn -0.2650 0.7806 -0.5661
+vn -0.4345 0.5164 0.7380
+vn -0.4959 0.7705 -0.4005
+vn 0.6932 0.3136 0.6489
+vn 0.2596 0.4333 -0.8630
+vn 0.1134 0.6696 -0.7340
+vn -0.6434 0.0853 -0.7608
+vn -0.6990 -0.1048 0.7074
+vn 0.1545 -0.2904 0.9444
+vn 0.1001 -0.3266 0.9398
+vn 0.7350 -0.0851 0.6727
+vn 0.1748 -0.3753 -0.9103
+vn 0.6518 -0.0568 -0.7563
+vn -0.4524 -0.1603 -0.8773
+vn 0.8172 0.2836 -0.5017
+vn 0.1489 -0.9060 0.3962
+vn -0.3821 -0.9170 -0.1146
+vn 0.0089 -0.9690 -0.2469
+vn 0.5256 -0.7798 -0.3402
+vn -0.0213 -0.3251 0.9455
+vn -0.3626 -0.3113 0.8784
+vn -0.7263 -0.6672 0.1652
+vn -0.2063 -0.5831 -0.7858
+vn -0.1068 -0.7590 -0.6423
+vn -0.1423 -0.2107 -0.9671
+vn -0.8509 0.1997 -0.4859
+vn 0.2750 0.5719 -0.7728
+vn 0.5465 -0.3505 -0.7606
+vn -0.5366 0.7449 0.3963
+vn 0.5296 -0.1972 0.8250
+vn 0.0435 0.9563 0.2891
+vn -0.2395 -0.4024 0.8836
+vn -0.7868 -0.0609 0.6143
+vn 0.0885 0.1861 0.9785
+vn -0.3705 -0.6029 -0.7065
+vn 0.6304 -0.4065 -0.6613
+vn -0.3199 0.7671 -0.5561
+vn -0.3163 0.7686 -0.5561
+vn -0.3207 0.7668 -0.5560
+vn -0.3829 0.7537 -0.5342
+vn 0.9509 -0.1613 -0.2640
+vn 0.7909 -0.3880 0.4733
+vn -0.3853 -0.5151 0.7657
+vn 0.8088 -0.3616 0.4639
+vn -0.2251 -0.3619 -0.9046
+vn -0.6397 0.7647 -0.0774
+vn -0.8240 0.0245 -0.5660
+vn -0.8065 0.2362 -0.5420
+vn -0.1083 -0.8030 0.5861
+vn -0.6891 -0.1738 0.7035
+vn -0.3741 -0.4409 0.8159
+vn 0.6042 -0.0551 0.7950
+vn 0.5168 0.8117 0.2722
+vn 0.8126 -0.5496 0.1939
+vn -0.0000 -0.7580 -0.6522
+vn 0.7001 -0.4647 -0.5421
+vn 0.5254 -0.7009 -0.4825
+vn 0.6707 0.3587 -0.6492
+vn 0.0941 0.8437 -0.5285
+vn -0.8332 0.0049 0.5530
+vn -0.4968 -0.3738 0.7833
+vn -0.4814 -0.4214 0.7686
+vn 0.1810 0.2917 0.9393
+vn 0.3291 0.2716 0.9044
+vn 0.9633 0.0860 0.2542
+vn 0.8103 0.3720 0.4527
+vn -0.6490 -0.3871 -0.6550
+vn -0.3382 -0.4508 -0.8260
+vn 0.6277 0.4954 -0.6005
+vn 0.6699 0.4576 -0.5846
+vn 0.2655 0.5579 -0.7863
+vn 0.5936 0.0856 -0.8002
+vn 0.7715 -0.1381 0.6211
+vn 0.3787 -0.9215 -0.0858
+vn 0.6281 -0.6982 -0.3434
+vn 0.3878 -0.5296 -0.7544
+vn -0.2414 -0.4190 -0.8753
+vn 0.3982 0.4611 0.7930
+vn 0.7185 -0.3774 0.5842
+vn 0.2515 0.5037 0.8265
+vn -0.4184 -0.0044 0.9082
+vn 0.8353 -0.4119 -0.3643
+vn 0.7388 0.0670 -0.6706
+vn 0.6934 0.4256 -0.5814
+vn -0.8144 -0.4282 -0.3916
+vn 0.6298 0.4443 0.6371
+vn -0.3627 -0.0450 0.9308
+vn -0.4157 0.6297 0.6562
+vn -0.7822 -0.6000 -0.1682
+vn 0.9223 0.3716 -0.1064
+vn -0.7077 -0.6678 -0.2307
+vn -0.6185 -0.0133 -0.7856
+vn 0.8817 0.3777 -0.2827
+vn 0.3589 0.2593 -0.8966
+vn -0.0938 0.2117 0.9728
+vn 0.6206 -0.3048 -0.7224
+vn -0.4829 0.8423 -0.2395
+vn -0.3324 -0.0072 -0.9431
+vn 0.9675 -0.0061 -0.2527
+vn 0.5666 -0.2333 0.7903
+vn 0.7297 -0.3970 0.5567
+vn 0.4472 -0.3464 -0.8246
+vn 0.4196 -0.8953 -0.1497
+vn 0.2774 -0.7239 0.6317
+vn -0.5907 -0.7172 -0.3696
+vn -0.0619 -0.8440 -0.5328
+vn -0.9547 -0.2956 0.0331
+vn -0.5273 -0.0248 0.8493
+vn -0.8411 -0.2665 0.4706
+vn -0.9122 0.1478 0.3821
+vn -0.6245 -0.0992 -0.7747
+vn 0.0916 -0.6178 -0.7810
+vn -0.8086 -0.1453 -0.5701
+vn -0.2536 -0.9515 -0.1742
+vn -0.3668 0.2279 -0.9020
+vn 0.2937 -0.9123 0.2854
+vn -0.4878 -0.3253 -0.8101
+vn -0.1384 0.1408 -0.9803
+vn 0.6862 -0.4447 0.5757
+vn -0.3392 0.0989 0.9355
+vn 0.6969 -0.1676 0.6973
+vn 0.4070 0.3050 0.8610
+vn 0.5882 0.0798 0.8048
+vn -0.5689 -0.1302 0.8120
+vn -0.7957 -0.3877 -0.4653
+vn 0.3003 -0.4650 0.8328
+vn -0.3779 -0.9218 -0.0870
+vn 0.4040 -0.8945 0.1913
+vn 0.3029 -0.9520 0.0431
+vn 0.3235 -0.7720 -0.5472
+vn 0.6655 -0.6982 -0.2638
+vn 0.7548 -0.6554 -0.0272
+vn -0.3619 0.9105 0.2001
+vn -0.0842 0.5303 -0.8436
+vn -0.6942 -0.2754 0.6650
+vn 0.8376 0.5181 0.1733
+vn -0.2980 -0.9041 0.3063
+vn -0.2157 0.7177 -0.6621
+vn -0.2398 -0.5505 -0.7997
+vn 0.2089 -0.6543 0.7268
+vn 0.7119 -0.4913 -0.5019
+vn 0.0497 -0.0606 -0.9969
+vn 0.8951 0.0671 -0.4409
+vn -0.2598 0.8850 0.3864
+vn -0.8554 -0.0130 0.5179
+vn 0.0706 -0.9955 -0.0636
+vn 0.0193 -0.6376 -0.7701
+vn -0.2552 0.7013 -0.6657
+vn 0.3224 -0.0224 -0.9464
+vn 0.2151 -0.2766 0.9366
+vn 0.2096 -0.2822 0.9362
+vn 0.2150 -0.2761 0.9368
+vn -0.1927 0.9559 0.2215
+vn -0.0004 -0.7210 -0.6929
+vn -0.7873 -0.1919 0.5859
+vn 0.6059 -0.3456 0.7166
+vn 0.3382 0.6956 0.6339
+vn 0.8054 0.3403 0.4854
+vn -0.5239 -0.3298 0.7854
+vn -0.4704 -0.3764 -0.7981
+vn 0.1143 -0.8746 0.4711
+vn -0.2047 -0.5478 -0.8112
+vn 0.0313 -0.6985 -0.7149
+vn 0.2886 0.7859 -0.5469
+vn -0.6169 0.7600 0.2046
+vn -0.1795 0.1871 0.9658
+vn -0.2559 0.2773 0.9261
+vn 0.5562 -0.6233 0.5497
+vn 0.6758 0.0788 0.7329
+vn -0.0138 0.2409 0.9704
+vn -0.0382 0.8756 -0.4815
+vn 0.5785 -0.2275 -0.7833
+vn 0.2780 0.7224 -0.6331
+vn 0.4968 -0.4263 0.7559
+vn -0.4694 -0.0771 -0.8796
+vn -0.3010 -0.1474 -0.9422
+vn 0.6610 0.4524 0.5987
+vn -0.8165 -0.1498 0.5576
+vn -0.9887 0.0723 -0.1314
+vn 0.9838 -0.1772 -0.0279
+vn 0.7386 -0.6738 0.0213
+vn 0.7423 -0.6697 0.0216
+vn 0.7416 -0.6705 0.0217
+vn 0.7425 -0.6695 0.0218
+vn 0.5445 0.7019 0.4592
+vn 0.6134 0.7589 -0.2186
+vn -0.3851 0.3484 -0.8546
+vn -0.3088 0.3825 -0.8708
+vn -0.1815 0.4466 0.8761
+vn -0.2287 -0.6659 0.7101
+vn -0.3602 0.0412 -0.9320
+vn -0.9702 0.0907 -0.2245
+vn 0.7886 -0.2450 0.5639
+vn -0.5878 0.4014 0.7024
+vn -0.5873 -0.7940 0.1568
+vn 0.3979 -0.7713 -0.4967
+vn 0.7598 0.2301 -0.6080
+vn -0.6682 -0.5061 -0.5453
+vn -0.2504 0.7467 0.6163
+vn 0.7173 0.0051 -0.6968
+vn 0.5745 0.0142 -0.8184
+vn -0.6668 0.1693 0.7258
+vn 0.4547 -0.5813 0.6748
+vn 0.0123 0.7878 0.6158
+vn -0.5963 0.3808 0.7067
+vn -0.5814 -0.5669 0.5836
+vn 0.1202 0.8351 -0.5369
+vn 0.5864 -0.3889 0.7105
+vn 0.0031 0.4995 -0.8663
+vn 0.2066 -0.7710 0.6024
+vn -0.0930 -0.7293 -0.6779
+vn -0.1203 0.7140 -0.6898
+vn -0.0054 0.8932 -0.4496
+vn 0.2638 0.5618 0.7841
+vn -0.8843 0.0823 0.4597
+vn -0.6359 -0.4593 -0.6202
+vn 0.0650 0.8056 -0.5889
+vn 0.3842 -0.2972 0.8741
+vn -0.0326 -0.4403 0.8973
+vn -0.6246 0.2726 0.7318
+vn -0.1086 -0.1406 -0.9841
+vn -0.0130 0.6042 0.7967
+vn -0.7736 0.2185 0.5948
+vn 0.5932 0.0499 -0.8035
+vn -0.5232 0.3744 -0.7656
+vn 0.3359 -0.0653 -0.9396
+vn 0.3107 0.0840 -0.9468
+vn 0.2764 0.7490 0.6021
+vn 0.6296 -0.0894 0.7718
+vn 0.6824 -0.1822 0.7079
+vn -0.4952 0.2541 0.8308
+vn 0.8589 -0.3023 -0.4134
+vn -0.1049 0.4827 -0.8695
+vn -0.5422 0.7000 -0.4647
+vn -0.2460 -0.5739 -0.7811
+vn 0.5076 -0.7225 0.4694
+vn 0.6807 -0.5554 -0.4776
+vn -0.8084 -0.0779 -0.5835
+vn -0.2035 -0.5582 0.8044
+vn 0.0272 0.3694 0.9289
+vn -0.4587 0.3385 -0.8216
+vn -0.9901 -0.0372 -0.1356
+vn -0.5092 -0.7617 -0.4006
+vn 0.0966 -0.7605 0.6421
+vn 0.7985 0.3846 0.4632
+vn -0.8398 0.0010 0.5429
+vn -0.5720 0.5579 -0.6013
+vn 0.4586 0.0777 0.8852
+vn 0.6618 -0.0291 -0.7492
+vn -0.1132 0.3372 -0.9346
+vn 0.3890 0.1057 -0.9152
+vn 0.8695 0.4263 -0.2496
+vn -0.5031 0.8630 -0.0465
+vn -0.2215 -0.1681 0.9606
+vn -0.2994 0.2301 0.9260
+vn -0.5129 0.8561 0.0632
+vn -0.6676 0.7231 0.1773
+vn -0.5741 0.8176 0.0435
+vn 0.5320 0.8204 0.2096
+vn -0.4306 0.9025 -0.0003
+vn -0.8291 0.5210 0.2028
+vn -0.7804 0.1415 0.6090
+vn 0.8645 0.4681 -0.1831
+vn -0.7604 -0.3130 0.5691
+vn -0.7632 -0.4636 -0.4502
+vn 0.5997 0.0846 -0.7957
+vn 0.2238 -0.9363 -0.2707
+vn 0.9594 0.2799 -0.0360
+vn -0.0339 -0.0052 -0.9994
+vn -0.0485 0.1568 -0.9864
+vn 0.1572 -0.4412 -0.8835
+vn -0.2832 0.8987 -0.3348
+vn -0.9933 0.0159 0.1146
+vn -0.7198 -0.1328 -0.6814
+vn -0.9047 0.2943 -0.3082
+vn 0.4043 -0.5351 0.7418
+vn 0.4214 -0.1981 0.8850
+vn 0.6350 0.1868 0.7496
+vn 0.1824 0.9526 0.2435
+vn -0.9232 0.3555 0.1463
+vn -0.7499 0.6052 -0.2672
+vn 0.3472 0.5288 -0.7745
+vn 0.2458 0.8284 -0.5034
+vn -0.9753 0.2124 -0.0604
+vn -0.4669 -0.3389 0.8168
+vn -0.0049 -0.3186 0.9479
+vn 0.5549 0.4271 0.7139
+vn 0.4214 0.6656 0.6159
+vn 0.5209 0.7640 -0.3807
+vn -0.0644 -0.8556 -0.5136
+vn 0.6327 -0.5215 -0.5725
+vn 0.7170 0.2121 -0.6641
+vn -0.5818 -0.4215 -0.6956
+vn -0.2464 0.3189 0.9152
+vn -0.2744 0.6982 0.6613
+vn -0.8140 0.4472 -0.3708
+vn -0.8178 0.4432 -0.3672
+vn -0.8216 0.4390 -0.3636
+vn -0.8138 0.4474 -0.3709
+vn -0.4248 -0.0335 0.9047
+vn -0.5309 0.1469 -0.8346
+vn -0.4126 -0.1354 -0.9008
+vn -0.7068 -0.6715 -0.2225
+vn -0.8587 0.4747 -0.1931
+vn -0.2728 0.5937 0.7570
+vn -0.6281 0.2792 0.7263
+vn -0.6280 0.7138 -0.3101
+vn -0.6018 -0.1959 -0.7742
+vn -0.3777 -0.1596 -0.9121
+vn 0.2112 -0.3898 -0.8964
+vn 0.7431 0.6679 0.0416
+vn -0.3876 0.5154 0.7643
+vn 0.5403 -0.7672 0.3456
+vn 0.7894 -0.1152 0.6029
+vn 0.7654 -0.3024 -0.5680
+vn -0.2021 -0.5598 0.8036
+vn -0.4186 -0.3996 -0.8155
+vn -0.3717 0.2064 -0.9051
+vn 0.7477 -0.0525 -0.6619
+vn 0.7488 -0.0638 -0.6597
+vn 0.7488 -0.0643 -0.6597
+vn 0.7476 -0.0521 -0.6621
+vn -0.4300 -0.4212 -0.7985
+vn 0.3199 -0.2057 0.9248
+vn 0.3572 0.0981 -0.9289
+vn -0.1527 -0.1074 -0.9824
+vn 0.2144 -0.9659 -0.1449
+vn 0.1163 -0.3788 0.9182
+vn 0.3640 -0.6759 0.6409
+vn 0.2861 0.9238 0.2546
+vn 0.2278 -0.5606 -0.7962
+vn -0.1707 0.8235 -0.5410
+vn 0.9218 -0.3183 -0.2214
+vn 0.9021 -0.0461 0.4290
+vn 0.5081 -0.6422 -0.5739
+vn 0.2091 -0.2824 0.9362
+vn 0.8427 -0.3433 -0.4148
+vn 0.2331 0.1735 -0.9568
+vn -0.5743 -0.6032 -0.5535
+vn 0.5443 -0.3086 -0.7801
+vn -0.8533 0.0079 -0.5213
+vn 0.3523 0.5633 0.7473
+vn -0.4369 -0.2577 0.8618
+vn 0.0303 0.4285 0.9030
+vn -0.8805 0.4076 0.2420
+vn -0.0761 0.6941 -0.7158
+vn 0.3543 -0.6791 -0.6428
+vn -0.2058 -0.9746 0.0886
+vn 0.0984 -0.8761 0.4720
+vn -0.2412 0.3568 0.9025
+vn 0.8222 -0.5441 0.1672
+vn 0.9912 -0.1312 -0.0168
+vn 0.8223 -0.5206 -0.2298
+vn -0.8098 0.2925 0.5086
+vn 0.3826 0.2435 0.8912
+vn 0.0375 0.5989 -0.8000
+vn -0.6826 0.0579 -0.7285
+vn -0.4432 -0.0345 -0.8958
+vn 0.0609 -0.6329 0.7719
+vn -0.4682 0.1546 0.8700
+vn 0.8690 -0.4852 -0.0975
+vn -0.5218 0.8389 0.1550
+vn 0.1071 0.6062 0.7881
+vn 0.5161 0.0954 0.8512
+vn 0.7721 0.3482 0.5316
+vn -0.4937 0.8687 -0.0408
+vn -0.4633 -0.5948 -0.6569
+vn -0.9387 0.1397 -0.3151
+vn -0.6793 0.4567 0.5744
+vn 0.4426 0.8155 0.3730
+vn 0.6921 0.3024 0.6554
+vn -0.9415 0.3314 0.0613
+vn -0.4530 -0.3156 -0.8338
+vn 0.1420 0.8132 -0.5644
+vn -0.3694 -0.9147 -0.1642
+vn 0.2187 -0.5389 0.8135
+vn -0.6700 0.5927 0.4470
+vn -0.9536 0.2384 0.1836
+vn 0.1006 -0.5252 -0.8450
+vn -0.6225 0.4283 -0.6550
+vn -0.3017 0.8818 -0.3625
+vn -0.5424 -0.2716 0.7950
+vn -0.4055 -0.6829 0.6076
+vn 0.4590 0.0445 0.8873
+vn -0.4879 0.6792 0.5482
+vn -0.7326 -0.2512 -0.6326
+vn 0.9323 0.2647 0.2465
+vn -0.3449 0.4952 0.7974
+vn 0.1973 -0.3786 -0.9043
+vn 0.3600 -0.4828 0.7983
+vn 0.3598 -0.4821 0.7988
+vn 0.3610 -0.4863 0.7957
+vn -0.8153 0.1074 0.5690
+vn -0.6202 -0.7816 0.0663
+vn -0.1830 0.8726 0.4529
+vn -0.2623 0.7942 -0.5482
+vn 0.7293 0.0552 0.6820
+vn -0.3575 -0.4026 0.8427
+vn -0.5166 -0.2415 -0.8215
+vn -0.5103 0.1761 -0.8418
+vn 0.3521 -0.0990 -0.9307
+vn -0.4373 0.0842 -0.8954
+vn -0.1302 0.0537 -0.9900
+vn -0.1470 -0.1992 0.9689
+vn -0.0947 -0.4184 0.9033
+vn -0.5457 0.0278 -0.8375
+vn 0.4928 -0.2069 0.8452
+vn -0.2052 0.4266 0.8809
+vn -0.1673 0.1431 -0.9755
+vn -0.3765 0.3949 0.8380
+vn -0.2014 0.5296 -0.8240
+vn 0.4291 0.6213 -0.6557
+vn -0.1859 -0.8899 0.4166
+vn 0.6378 -0.0835 0.7657
+vn 0.4939 -0.5431 0.6790
+vn 0.7576 -0.4724 -0.4505
+vn -0.0355 -0.9668 -0.2530
+vn 0.2339 -0.6814 -0.6935
+vn 0.8158 -0.1724 -0.5521
+vn 0.4797 0.7062 -0.5208
+vn -0.1438 -0.1145 0.9830
+vn -0.2745 -0.9114 0.3067
+vn 0.7439 -0.5593 -0.3658
+vn -0.6904 -0.0178 -0.7232
+vn -0.6977 0.1018 -0.7091
+vn -0.8222 0.5418 -0.1745
+vn 0.2119 0.4433 0.8710
+vn 0.3884 0.1386 -0.9110
+vn -0.4881 0.0276 -0.8723
+vn -0.4044 -0.8051 -0.4338
+vn -0.3932 0.6500 0.6503
+vn 0.7377 -0.6749 -0.0161
+vn -0.0266 -0.9333 -0.3581
+vn -0.5505 -0.0360 0.8341
+vn 0.6980 -0.7108 0.0863
+vn 0.9262 0.3577 -0.1190
+vn -0.1724 0.0309 0.9845
+vn -0.2339 0.1972 0.9521
+vn 0.0050 -0.6399 -0.7685
+vn -0.1316 -0.6385 -0.7583
+vn -0.1562 0.1065 -0.9820
+vn -0.8587 0.1791 0.4802
+vn 0.7750 0.5662 0.2808
+vn 0.9173 0.3502 0.1893
+vn -0.4607 -0.4801 -0.7465
+vn 0.2215 -0.6654 -0.7128
+vn 0.0322 0.8191 -0.5727
+vn 0.2778 -0.5351 0.7978
+vn -0.2816 0.1015 -0.9541
+vn 0.5641 -0.3928 -0.7263
+vn 0.3149 -0.2243 -0.9223
+vn 0.3713 -0.5109 0.7753
+vn 0.8105 0.0699 0.5816
+vn -0.3875 0.5009 0.7739
+vn -0.7983 0.0165 0.6020
+vn -0.3626 -0.6119 -0.7029
+vn 0.8552 -0.3416 -0.3898
+vn 0.1375 -0.2820 -0.9495
+vn -0.7336 0.5074 0.4520
+vn -0.2065 0.6318 0.7471
+vn -0.6612 0.4759 0.5800
+vn -0.6993 0.7045 -0.1207
+vn -0.6331 0.3804 -0.6741
+vn 0.6473 0.3636 -0.6699
+vn -0.7426 0.4939 -0.4523
+vn 0.1835 -0.5894 0.7867
+vn 0.5989 -0.5870 -0.5447
+vn 0.7033 -0.3501 0.6187
+vn -0.1620 -0.8321 0.5305
+vn 0.4089 0.4449 0.7968
+vn -0.7025 0.1837 0.6875
+vn -0.8728 -0.1903 0.4495
+vn -0.9463 -0.2642 -0.1864
+vn 0.4764 -0.5917 -0.6503
+vn -0.5439 0.3455 0.7647
+vn -0.1511 -0.5556 0.8176
+vn 0.6917 -0.3240 0.6454
+vn 0.8924 0.2726 0.3597
+vn -0.7478 0.2387 -0.6195
+vn -0.7477 0.2387 -0.6196
+vn -0.7486 0.2390 -0.6185
+vn 0.4347 0.7246 0.5347
+vn 0.1845 -0.5475 0.8162
+vn -0.5097 0.3556 0.7834
+vn -0.3238 0.6304 0.7055
+vn -0.0927 -0.8440 -0.5283
+vn 0.6279 0.3085 -0.7145
+vn -0.0160 -0.3290 -0.9442
+vn 0.1205 -0.4499 0.8849
+vn 0.2112 0.3218 0.9230
+vn 0.2564 0.2330 0.9381
+vn -0.3089 0.9501 0.0426
+vn -0.3677 0.9248 0.0980
+vn -0.2694 0.9542 -0.1300
+vn -0.3047 0.9382 -0.1640
+vn 0.4625 0.3645 0.8082
+vn 0.2385 0.6969 -0.6764
+vn -0.8265 0.1898 -0.5300
+vn 0.2254 0.0996 -0.9692
+vn -0.1928 -0.9488 -0.2503
+vn -0.6595 -0.2259 -0.7170
+vn 0.3734 -0.2513 0.8930
+vn -0.4393 -0.5272 -0.7274
+vn 0.5929 -0.5017 -0.6299
+vn -0.6602 -0.0620 -0.7485
+vn 0.2900 -0.3022 -0.9081
+vn -0.5220 -0.1075 0.8462
+vn -0.4201 -0.2910 0.8596
+vn 0.3135 0.9282 0.2004
+vn -0.8061 0.5916 -0.0138
+vn -0.4851 0.0873 -0.8701
+vn -0.2860 -0.0541 -0.9567
+vn 0.0459 -0.9023 0.4286
+vn 0.4383 -0.2698 0.8574
+vn 0.3612 -0.4872 0.7951
+vn -0.1597 -0.8538 0.4956
+vn -0.8954 -0.4424 0.0509
+vn 0.4316 -0.4279 -0.7941
+vn 0.7228 -0.6902 0.0339
+vn 0.5550 -0.1268 0.8221
+vn 0.1361 -0.9781 -0.1576
+vn -0.7617 0.0013 -0.6480
+vn 0.0209 0.4846 0.8745
+vn 0.0182 0.4988 0.8665
+vn 0.5074 -0.4444 -0.7383
+vn 0.7089 0.0238 -0.7049
+vn -0.2535 0.6245 -0.7388
+vn 0.8219 0.3252 -0.4676
+vn -0.3773 -0.4592 -0.8042
+vn 0.5267 -0.7548 -0.3911
+vn -0.2215 0.8649 -0.4504
+vn -0.7546 -0.6021 0.2609
+vn -0.5547 0.2933 -0.7787
+vn -0.0746 0.9969 0.0262
+vn -0.3274 -0.0485 0.9436
+vn 0.4690 0.4163 -0.7790
+vn -0.7697 0.4088 0.4904
+vn 0.3747 0.7431 0.5544
+vn -0.4429 0.8011 -0.4025
+vn 0.1826 0.2472 0.9516
+vn -0.7470 0.2384 -0.6206
+vn -0.8132 0.1896 0.5503
+vn 0.1587 0.9652 0.2079
+vn 0.2231 -0.1719 -0.9595
+vn 0.4307 -0.1470 0.8905
+vn 0.9544 0.1491 0.2584
+vn -0.4887 -0.3761 0.7872
+vn -0.2095 -0.8541 -0.4761
+vn 0.2102 -0.5228 0.8261
+vn 0.6195 0.6896 0.3750
+vn 0.7485 -0.4577 0.4800
+vn -0.8603 0.0119 -0.5096
+vn 0.5208 -0.4642 -0.7164
+vn -0.2560 -0.4072 0.8767
+vn -0.1381 0.5674 0.8118
+vn -0.5060 0.8398 0.1968
+vn -0.4981 0.7671 -0.4043
+vn -0.5491 0.7514 -0.3660
+vn -0.8014 0.2953 0.5201
+vn 0.6138 0.7168 0.3308
+vn -0.8802 0.0035 0.4746
+vn 0.6849 -0.5683 0.4560
+vn -0.2631 -0.9471 -0.1838
+vn 0.4523 -0.8351 0.3132
+vn 0.7692 -0.6167 -0.1671
+vn -0.7872 -0.0530 -0.6144
+vn 0.8075 -0.2198 -0.5474
+vn 0.2145 -0.3171 -0.9238
+vn -0.2287 0.2015 -0.9524
+vn -0.5656 0.7039 -0.4296
+vn -0.5697 0.8001 0.1877
+vn -0.3472 0.6508 -0.6752
+vn 0.4999 0.2429 0.8313
+vn 0.3317 -0.6153 0.7151
+vn -0.0638 0.3740 0.9252
+vn 0.7841 -0.5924 -0.1854
+vn 0.2905 0.4944 -0.8192
+vn -0.5915 0.0510 -0.8047
+vn -0.1137 0.8021 -0.5863
+vn -0.4172 0.3855 0.8230
+vn -0.3816 0.3443 -0.8578
+vn 0.8322 0.1623 0.5302
+vn -0.4848 0.8715 -0.0738
+vn 0.3793 0.6388 -0.6694
+vn 0.7201 -0.3219 0.6147
+vn -0.7331 0.1566 0.6619
+vn 0.1397 -0.1533 0.9783
+vn -0.6426 0.2254 0.7323
+vn -0.0872 -0.2549 -0.9630
+vn 0.3302 -0.6084 0.7217
+vn 0.1966 -0.5486 -0.8126
+vn 0.1101 0.9856 0.1286
+vn -0.3153 0.7690 -0.5561
+vn -0.4408 0.1351 0.8874
+vn -0.2451 0.8937 0.3759
+vn 0.0546 0.1755 -0.9830
+vn -0.7861 0.5902 0.1839
+vn -0.6618 -0.4052 -0.6308
+vn 0.1242 0.0302 0.9918
+vn 0.3465 -0.9348 -0.0778
+vn -0.2096 -0.6260 0.7512
+vn 0.0629 -0.5073 0.8595
+vn -0.2651 -0.6934 -0.6700
+s 1
+f 1//1 2//1 3//1
+f 4//2 5//2 6//2
+f 4//3 7//3 5//3
+f 6//4 5//4 8//4
+f 9//5 10//5 6//5
+f 4//6 6//6 10//6
+f 3//7 11//7 12//7
+f 13//8 14//8 15//8
+f 15//9 14//9 16//9
+f 15//10 16//10 17//10
+f 18//11 19//11 20//11
+f 21//12 22//12 19//12
+f 14//13 23//13 16//13
+f 24//14 25//14 26//14
+f 27//15 7//15 25//15
+f 28//16 25//16 29//16
+f 30//17 31//17 32//17
+f 33//18 34//18 35//18
+f 36//19 26//19 25//19
+f 36//20 25//20 28//20
+f 24//21 27//21 25//21
+f 37//22 38//22 39//22
+f 40//23 41//23 42//23
+f 43//24 44//24 45//24
+f 46//25 43//25 45//25
+f 44//26 47//26 48//26
+f 49//27 50//27 51//27
+f 49//28 52//28 50//28
+f 53//29 54//29 55//29
+f 56//30 57//30 58//30
+f 59//31 38//31 60//31
+f 61//32 62//32 63//32
+f 64//33 65//33 59//33
+f 45//34 44//34 64//34
+f 64//35 44//35 65//35
+f 66//36 44//36 48//36
+f 44//37 66//37 65//37
+f 65//38 66//38 67//38
+f 52//39 67//39 66//39
+f 68//40 67//40 52//40
+f 69//41 70//41 71//41
+f 72//42 70//42 73//42
+f 73//43 70//43 69//43
+f 72//44 71//44 70//44
+f 74//45 69//45 75//45
+f 69//46 71//46 75//46
+f 76//47 77//47 36//47
+f 36//48 77//48 78//48
+f 79//49 80//49 81//49
+f 80//50 82//50 81//50
+f 81//51 83//51 79//51
+f 82//52 84//52 81//52
+f 81//53 84//53 28//53
+f 81//54 28//54 83//54
+f 83//55 78//55 79//55
+f 85//56 76//56 84//56
+f 84//57 76//57 28//57
+f 36//58 28//58 76//58
+f 86//59 69//59 74//59
+f 87//60 88//60 89//60
+f 90//61 91//61 92//61
+f 92//62 93//62 90//62
+f 87//63 89//63 91//63
+f 94//64 89//65 88//66
+f 89//67 94//67 95//67
+f 61//68 96//68 97//68
+f 61//69 63//70 96//71
+f 60//72 38//72 98//72
+f 99//73 46//73 60//73
+f 99//74 60//74 98//74
+f 100//75 62//75 61//75
+f 101//76 94//76 102//76
+f 103//77 104//77 90//77
+f 90//78 104//78 87//78
+f 33//79 82//79 103//79
+f 104//80 88//80 87//80
+f 33//81 105//81 82//81
+f 94//64 88//66 102//82
+f 106//83 102//83 84//83
+f 106//84 101//84 102//84
+f 107//85 101//85 106//85
+f 108//86 109//86 110//86
+f 110//87 111//87 108//87
+f 112//88 113//88 114//88
+f 115//89 6//89 8//89
+f 8//90 116//90 115//90
+f 116//91 117//91 115//91
+f 8//92 12//92 116//92
+f 11//93 118//93 12//93
+f 12//94 118//94 116//94
+f 118//95 119//95 116//95
+f 120//96 119//96 118//96
+f 121//97 3//97 95//97
+f 122//98 25//98 7//98
+f 95//99 3//99 12//99
+f 123//100 95//100 12//100
+f 124//101 93//101 125//101
+f 125//102 93//102 5//102
+f 5//103 93//103 123//103
+f 123//104 12//104 5//104
+f 7//105 125//105 5//105
+f 125//106 34//106 126//106
+f 122//107 121//107 126//107
+f 31//108 28//108 127//108
+f 128//109 129//109 130//109
+f 131//110 132//110 133//110
+f 131//111 39//111 134//111
+f 39//112 131//112 37//112
+f 131//113 134//113 135//113
+f 131//114 135//114 132//114
+f 131//115 133//115 37//115
+f 39//116 136//116 134//116
+f 134//117 137//117 135//117
+f 135//118 137//118 54//118
+f 136//119 130//119 134//119
+f 134//120 130//120 137//120
+f 136//121 128//121 130//121
+f 138//122 137//122 130//122
+f 129//123 138//123 130//123
+f 139//124 13//124 15//124
+f 140//125 141//125 142//125
+f 140//126 143//126 144//126
+f 140//127 144//127 145//127
+f 144//128 146//128 145//128
+f 143//129 147//129 144//129
+f 148//130 149//130 147//130
+f 144//131 149//131 146//131
+f 145//132 141//132 140//132
+f 143//133 140//133 142//133
+f 143//134 142//134 110//134
+f 149//135 150//135 146//135
+f 151//136 152//136 150//136
+f 150//137 152//137 146//137
+f 146//138 152//138 145//138
+f 141//139 145//139 152//139
+f 151//140 142//140 152//140
+f 142//141 141//141 152//141
+f 153//142 154//142 155//142
+f 154//143 49//143 155//143
+f 156//144 157//144 43//144
+f 157//145 156//145 158//145
+f 159//146 156//146 46//146
+f 43//147 157//147 47//147
+f 160//148 155//148 51//148
+f 154//149 161//149 49//149
+f 162//150 153//150 155//150
+f 163//151 164//151 165//151
+f 124//152 90//152 93//152
+f 166//153 167//153 164//153
+f 167//154 165//154 164//154
+f 168//155 169//155 167//155
+f 170//156 171//156 172//156
+f 170//157 172//157 173//157
+f 173//158 172//158 174//158
+f 174//159 172//159 175//159
+f 176//160 171//161 177//162
+f 176//160 172//163 171//161
+f 178//164 179//164 180//164
+f 181//165 182//165 183//165
+f 184//166 182//166 181//166
+f 185//167 186//167 187//167
+f 187//168 186//168 184//168
+f 186//169 182//169 184//169
+f 186//170 188//170 182//170
+f 189//171 190//171 191//171
+f 190//172 189//172 192//172
+f 192//173 189//173 193//173
+f 194//174 195//174 192//174
+f 193//175 194//175 192//175
+f 196//176 197//176 198//176
+f 199//177 200//177 201//177
+f 202//178 199//178 201//178
+f 202//179 165//179 199//179
+f 24//180 198//180 27//180
+f 197//181 27//181 198//181
+f 174//182 196//182 198//182
+f 203//183 112//183 204//183
+f 205//184 10//184 9//184
+f 206//185 205//185 207//185
+f 206//186 207//186 108//186
+f 206//187 10//187 205//187
+f 206//188 108//188 111//188
+f 208//189 204//189 2//189
+f 203//190 113//190 112//190
+f 208//191 209//191 203//191
+f 210//192 211//192 212//192
+f 213//193 214//193 215//193
+f 212//194 216//194 195//194
+f 195//195 217//195 212//195
+f 217//196 210//196 212//196
+f 183//197 177//198 171//199
+f 218//200 219//200 220//200
+f 219//201 218//201 184//201
+f 218//202 220//202 168//202
+f 187//203 218//203 168//203
+f 181//204 183//204 221//204
+f 221//205 183//205 171//205
+f 170//206 221//206 171//206
+f 164//207 222//207 166//207
+f 166//208 222//208 223//208
+f 223//209 224//209 175//209
+f 225//210 226//210 132//210
+f 133//211 132//211 226//211
+f 226//212 227//212 133//212
+f 228//213 198//213 229//213
+f 169//214 230//214 199//214
+f 169//215 199//215 165//215
+f 169//216 18//216 230//216
+f 18//217 169//217 231//217
+f 220//218 231//218 169//218
+f 170//219 173//219 198//219
+f 170//220 198//220 228//220
+f 232//221 170//221 228//221
+f 24//222 26//222 233//222
+f 234//223 235//223 236//223
+f 26//224 36//224 237//224
+f 238//225 24//225 233//225
+f 182//226 188//226 239//226
+f 240//227 223//227 239//227
+f 240//228 188//228 241//228
+f 240//229 241//229 166//229
+f 240//230 166//230 223//230
+f 188//231 240//231 239//231
+f 176//232 223//232 175//232
+f 239//233 223//233 176//233
+f 242//234 16//234 243//234
+f 189//235 242//235 193//235
+f 189//236 191//236 244//236
+f 244//237 245//237 22//237
+f 21//238 244//238 22//238
+f 244//239 21//239 189//239
+f 189//240 40//241 242//242
+f 194//243 242//243 243//243
+f 16//244 23//244 243//244
+f 242//245 17//245 16//245
+f 121//246 101//246 107//246
+f 126//247 106//247 28//247
+f 246//248 247//248 248//248
+f 136//249 67//249 68//249
+f 59//250 65//250 39//250
+f 38//251 59//251 39//251
+f 65//252 249//252 39//252
+f 136//253 249//253 67//253
+f 136//254 62//254 128//254
+f 250//255 251//255 246//255
+f 252//256 250//256 246//256
+f 252//257 246//257 253//257
+f 246//258 248//258 253//258
+f 254//259 248//259 255//259
+f 253//260 248//260 254//260
+f 80//261 77//261 256//261
+f 47//262 257//262 51//262
+f 258//263 257//263 157//263
+f 158//264 258//264 157//264
+f 258//265 160//265 257//265
+f 257//266 160//266 51//266
+f 162//267 160//267 258//267
+f 259//268 154//268 153//268
+f 259//269 158//269 74//269
+f 260//270 261//270 159//270
+f 261//271 260//271 262//271
+f 261//272 262//272 158//272
+f 262//273 86//273 158//273
+f 158//274 259//274 153//274
+f 190//275 216//275 213//275
+f 245//276 263//276 180//276
+f 245//277 264//277 265//277
+f 243//278 266//278 267//278
+f 23//279 266//279 243//279
+f 267//280 194//280 243//280
+f 231//281 268//281 269//281
+f 268//282 270//282 269//282
+f 271//283 221//283 232//283
+f 139//284 221//284 271//284
+f 241//285 188//285 186//285
+f 272//286 42//286 41//286
+f 41//287 21//287 19//287
+f 268//288 181//288 221//288
+f 268//289 220//289 219//289
+f 219//290 184//291 181//292
+f 219//290 181//292 268//293
+f 13//294 229//294 14//294
+f 273//295 234//295 236//295
+f 230//296 20//296 273//296
+f 20//297 179//297 273//297
+f 229//298 233//298 14//298
+f 246//299 251//299 206//299
+f 206//300 111//300 247//300
+f 246//301 206//301 247//301
+f 248//302 111//302 209//302
+f 247//303 111//303 248//303
+f 248//304 209//304 255//304
+f 274//305 90//305 124//305
+f 27//306 275//306 122//306
+f 122//307 7//307 200//307
+f 112//308 276//308 277//308
+f 277//309 276//309 120//309
+f 278//310 276//311 149//312
+f 279//313 149//313 207//313
+f 280//314 281//314 279//314
+f 280//315 279//315 207//315
+f 281//316 278//316 279//316
+f 279//317 278//310 149//312
+f 119//318 120//318 276//318
+f 112//319 149//319 276//319
+f 266//320 282//320 283//320
+f 283//321 282//321 57//321
+f 283//322 57//322 210//322
+f 215//323 284//323 265//323
+f 227//324 226//324 285//324
+f 56//325 286//325 287//325
+f 287//326 57//326 56//326
+f 224//327 254//327 288//327
+f 289//328 222//328 164//328
+f 222//329 289//329 250//329
+f 222//330 250//330 252//330
+f 222//331 252//331 253//331
+f 222//332 253//332 224//332
+f 290//333 224//333 288//333
+f 224//334 253//334 254//334
+f 80//335 256//335 178//335
+f 256//336 23//336 178//336
+f 194//337 217//337 195//337
+f 148//338 147//338 109//338
+f 114//339 151//339 150//339
+f 237//340 234//340 178//340
+f 23//341 14//341 26//341
+f 26//342 14//342 233//342
+f 204//343 277//343 118//343
+f 6//344 115//344 205//344
+f 205//345 115//345 281//345
+f 277//346 120//346 118//346
+f 2//347 204//347 118//347
+f 103//348 284//348 104//348
+f 104//349 53//349 88//349
+f 102//350 55//350 291//350
+f 102//351 88//351 55//351
+f 85//352 291//352 282//352
+f 85//353 84//353 102//353
+f 98//354 37//354 227//354
+f 285//355 98//355 227//355
+f 211//356 292//356 100//356
+f 75//357 71//357 293//357
+f 212//358 97//358 293//358
+f 293//359 97//359 96//359
+f 294//360 213//360 72//360
+f 294//361 99//361 98//361
+f 294//362 214//362 213//362
+f 294//363 262//363 99//363
+f 262//364 294//364 72//364
+f 72//365 73//365 262//365
+f 72//366 213//366 71//366
+f 216//367 212//367 71//367
+f 212//368 211//368 97//368
+f 71//369 212//369 293//369
+f 196//370 295//370 288//370
+f 201//371 4//371 296//371
+f 4//372 10//372 296//372
+f 296//373 10//373 251//373
+f 201//374 296//374 289//374
+f 201//375 289//375 202//375
+f 197//376 297//376 275//376
+f 275//377 297//377 1//377
+f 1//378 297//378 208//378
+f 208//379 297//379 255//379
+f 288//380 255//380 297//380
+f 288//381 297//381 196//381
+f 47//382 50//382 48//382
+f 286//383 56//383 129//383
+f 227//384 37//384 133//384
+f 298//385 299//385 300//385
+f 300//386 301//386 302//386
+f 303//387 304//387 305//387
+f 303//388 306//388 304//388
+f 306//389 303//389 299//389
+f 298//390 300//390 302//390
+f 307//391 308//391 309//391
+f 310//392 311//393 312//394
+f 312//395 313//395 314//395
+f 312//396 314//397 315//398
+f 313//399 316//399 314//399
+f 308//400 317//400 309//400
+f 318//401 319//401 320//401
+f 319//402 321//402 320//402
+f 322//403 323//403 324//403
+f 323//404 325//404 324//404
+f 322//405 324//405 326//405
+f 327//406 328//406 329//406
+f 330//407 331//407 329//407
+f 331//408 327//408 329//408
+f 332//409 119//409 333//409
+f 332//410 116//410 119//410
+f 333//411 278//412 334//413
+f 117//414 335//414 336//414
+f 336//415 337//415 117//415
+f 335//416 117//416 338//416
+f 334//417 339//417 333//417
+f 340//418 341//418 342//418
+f 305//419 343//419 344//419
+f 341//420 340//420 345//420
+f 301//421 345//421 340//421
+f 346//422 347//422 348//422
+f 346//423 349//423 347//423
+f 346//424 350//424 324//424
+f 351//425 352//425 353//425
+f 354//426 355//426 356//426
+f 357//427 358//427 359//427
+f 358//428 360//428 354//428
+f 358//429 354//429 359//429
+f 360//430 355//430 354//430
+f 359//431 354//431 356//431
+f 349//432 361//432 362//432
+f 306//433 363//433 304//433
+f 306//434 364//434 363//434
+f 364//435 306//435 298//435
+f 364//436 298//436 365//436
+f 302//437 366//437 365//437
+f 298//438 302//438 365//438
+f 367//439 368//439 369//439
+f 370//440 371//440 372//440
+f 372//441 371//441 367//441
+f 372//442 367//442 369//442
+f 357//443 359//443 373//443
+f 359//444 374//444 373//444
+f 373//445 374//445 375//445
+f 373//446 375//446 376//446
+f 356//447 374//447 359//447
+f 356//448 375//448 374//448
+f 377//449 300//449 378//449
+f 377//450 301//450 300//450
+f 379//451 380//451 381//451
+f 379//452 344//452 382//452
+f 303//453 305//453 379//453
+f 379//454 305//454 344//454
+f 379//455 382//455 380//455
+f 379//456 381//456 383//456
+f 383//457 303//457 379//457
+f 377//458 345//458 301//458
+f 345//459 377//459 384//459
+f 384//460 377//460 385//460
+f 378//461 386//461 377//461
+f 387//462 382//462 344//462
+f 387//463 343//464 388//465
+f 343//466 389//466 388//466
+f 388//465 390//467 387//463
+f 390//468 388//468 391//468
+f 389//469 341//469 392//469
+f 341//470 393//470 392//470
+f 394//471 392//471 393//471
+f 392//472 394//472 391//472
+f 395//473 396//473 397//473
+f 398//474 399//474 397//474
+f 400//475 401//475 402//475
+f 400//476 403//476 401//476
+f 400//477 396//477 403//477
+f 396//478 404//478 397//478
+f 405//479 406//479 341//479
+f 407//480 406//480 405//480
+f 408//481 409//481 410//481
+f 408//482 410//482 411//482
+f 408//483 400//483 409//483
+f 407//484 404//484 406//484
+f 412//485 406//485 404//485
+f 366//486 341//487 406//488
+f 366//489 406//489 412//489
+f 413//490 414//490 415//490
+f 416//491 417//491 418//491
+f 419//492 418//492 420//492
+f 418//493 419//493 421//493
+f 401//494 418//494 421//494
+f 401//495 416//495 418//495
+f 422//496 423//496 424//496
+f 422//497 415//497 423//497
+f 413//498 415//498 422//498
+f 398//499 414//499 399//499
+f 368//500 425//500 426//500
+f 427//501 428//501 429//501
+f 428//502 430//502 370//502
+f 428//503 370//504 431//505
+f 431//505 370//504 372//506
+f 428//507 431//507 432//507
+f 428//508 432//508 429//508
+f 372//509 369//509 431//509
+f 433//510 434//511 368//512
+f 368//513 434//513 425//513
+f 435//514 434//514 436//514
+f 435//515 437//515 434//515
+f 423//516 438//516 439//516
+f 417//517 440//517 418//517
+f 420//518 418//518 441//518
+f 442//519 443//519 444//519
+f 395//520 413//520 444//520
+f 403//521 395//521 443//521
+f 403//522 445//522 446//522
+f 445//523 403//523 443//523
+f 445//524 443//524 442//524
+f 447//525 445//525 442//525
+f 443//526 395//526 444//526
+f 448//527 449//527 450//527
+f 451//528 452//528 453//528
+f 451//529 453//529 448//529
+f 448//530 450//530 451//530
+f 454//531 450//531 449//531
+f 454//532 455//532 450//532
+f 456//533 457//533 458//533
+f 453//534 459//534 460//534
+f 461//535 462//535 419//535
+f 463//536 462//536 453//536
+f 463//537 453//537 460//537
+f 456//538 464//538 457//538
+f 465//539 464//539 456//539
+f 466//540 456//540 458//540
+f 465//541 456//541 466//541
+f 467//542 331//542 468//542
+f 468//543 469//543 470//543
+f 471//544 472//544 473//544
+f 474//545 475//545 476//545
+f 308//546 477//546 317//546
+f 315//398 314//397 478//547
+f 479//548 315//548 478//548
+f 479//549 478//549 477//549
+f 315//550 479//550 480//550
+f 316//551 477//551 478//551
+f 479//552 477//552 308//552
+f 481//553 482//553 483//553
+f 362//554 484//554 347//554
+f 485//555 486//555 362//555
+f 487//556 486//556 488//556
+f 347//557 484//557 489//557
+f 476//558 483//559 472//560
+f 482//561 328//561 483//561
+f 476//562 490//562 483//562
+f 491//563 481//563 483//563
+f 490//564 491//564 483//564
+f 492//565 339//565 334//565
+f 492//566 493//566 320//566
+f 494//567 495//567 337//567
+f 494//568 496//568 495//568
+f 336//569 494//569 337//569
+f 497//570 339//570 320//570
+f 493//571 318//571 320//571
+f 492//572 320//572 339//572
+f 334//573 493//573 492//573
+f 321//574 498//574 499//574
+f 500//575 471//575 501//575
+f 502//576 503//576 504//576
+f 361//577 349//577 505//577
+f 505//578 349//578 325//578
+f 349//579 346//579 325//579
+f 502//580 506//580 503//580
+f 506//581 502//581 499//581
+f 502//582 497//582 321//582
+f 507//583 508//583 509//583
+f 464//584 435//584 436//584
+f 430//585 459//585 452//585
+f 459//586 510//586 460//586
+f 435//587 464//587 511//587
+f 511//588 464//588 465//588
+f 512//589 502//589 504//589
+f 513//590 514//590 515//590
+f 514//591 513//591 338//591
+f 513//592 515//592 516//592
+f 513//593 516//593 517//593
+f 335//594 513//594 517//594
+f 338//595 513//595 335//595
+f 518//596 512//596 504//596
+f 518//597 504//597 519//597
+f 512//598 497//598 502//598
+f 339//599 497//599 512//599
+f 518//600 332//600 512//600
+f 419//601 420//602 461//603
+f 420//602 520//604 461//603
+f 520//605 420//605 441//605
+f 521//606 438//606 522//606
+f 523//607 524//607 525//607
+f 526//608 350//609 527//610
+f 528//611 527//611 523//611
+f 528//612 523//612 529//612
+f 523//613 525//613 529//613
+f 525//614 530//614 529//614
+f 531//615 480//615 532//615
+f 531//616 533//616 310//616
+f 310//617 315//617 531//617
+f 531//618 532//618 534//618
+f 319//619 534//619 532//619
+f 532//620 480//620 307//620
+f 535//621 375//621 536//621
+f 508//622 476//558 472//560
+f 485//623 508//623 468//623
+f 485//624 476//625 508//626
+f 537//627 538//627 539//627
+f 538//628 422//628 539//628
+f 540//629 447//629 541//629
+f 357//630 373//630 542//630
+f 540//631 542//631 417//631
+f 540//632 357//632 542//632
+f 357//633 540//633 541//633
+f 539//634 375//634 356//634
+f 375//635 539//635 536//635
+f 539//636 422//636 536//636
+f 536//637 422//637 424//637
+f 489//638 543//638 544//638
+f 489//639 487//639 543//639
+f 544//640 543//640 545//640
+f 543//641 546//641 545//641
+f 546//642 482//642 481//642
+f 546//643 481//644 545//645
+f 352//646 547//646 481//646
+f 470//647 548//647 467//647
+f 467//648 548//648 549//648
+f 467//649 549//649 331//649
+f 549//650 550//650 327//650
+f 473//651 327//651 550//651
+f 473//652 550//652 551//652
+f 392//653 552//653 553//653
+f 388//654 552//654 392//654
+f 389//655 392//655 405//655
+f 388//656 554//656 552//656
+f 410//657 555//657 556//657
+f 410//658 556//658 557//658
+f 389//659 410//659 557//659
+f 389//660 411//660 410//660
+f 558//661 555//661 405//661
+f 557//662 554//662 388//662
+f 389//663 557//663 388//663
+f 405//664 392//664 553//664
+f 495//665 534//665 493//665
+f 278//666 495//666 334//666
+f 337//667 495//667 278//667
+f 495//668 493//668 334//668
+f 540//669 416//669 446//669
+f 538//670 413//670 422//670
+f 538//671 444//671 413//671
+f 559//672 500//672 501//672
+f 560//673 561//673 510//673
+f 560//674 510//674 429//674
+f 560//675 429//675 562//675
+f 429//676 548//676 562//676
+f 501//677 437//677 511//677
+f 501//678 563//678 437//678
+f 559//679 501//679 511//679
+f 552//680 554//680 500//680
+f 440//681 535//681 521//681
+f 521//682 441//682 440//682
+f 535//683 439//683 521//683
+f 564//684 565//684 371//684
+f 451//685 564//685 430//685
+f 430//686 564//686 370//686
+f 451//687 450//687 564//687
+f 450//688 455//688 565//688
+f 450//689 565//689 564//689
+f 436//690 565//690 455//690
+f 398//691 404//691 566//691
+f 567//692 568//692 566//692
+f 566//693 568//693 466//693
+f 569//694 407//694 409//694
+f 569//695 463//695 570//695
+f 569//696 555//696 407//696
+f 569//697 421//697 463//697
+f 421//698 569//698 409//698
+f 421//699 409//699 402//699
+f 566//700 466//700 414//700
+f 466//701 568//701 465//701
+f 558//702 567//703 566//704
+f 404//705 558//705 566//705
+f 545//706 524//706 523//706
+f 527//707 545//707 523//707
+f 544//708 527//610 350//609
+f 527//709 544//709 545//709
+f 352//710 351//710 547//710
+f 360//711 442//711 355//711
+f 537//712 356//712 355//712
+f 519//713 571//713 384//713
+f 572//714 387//714 390//714
+f 387//715 573//715 382//715
+f 573//716 387//716 572//716
+f 573//717 572//717 362//717
+f 573//718 362//718 361//718
+f 390//719 391//719 572//719
+f 571//720 391//720 393//720
+f 391//721 571//721 475//721
+f 475//722 571//722 490//722
+f 490//723 571//723 503//723
+f 571//724 519//724 503//724
+f 324//725 311//725 574//725
+f 311//726 324//726 526//726
+f 324//727 350//727 526//727
+f 526//728 528//728 313//728
+f 311//729 526//729 313//729
+f 316//730 528//730 529//730
+f 528//731 316//731 313//731
+f 498//732 309//732 351//732
+f 351//733 309//733 530//733
+f 529//734 530//734 316//734
+f 309//735 316//735 530//735
+f 568//736 567//736 500//736
+f 500//737 559//737 568//737
+f 561//738 570//738 575//738
+f 460//739 576//739 575//739
+f 576//740 465//740 559//740
+f 465//741 568//741 559//741
+f 577//742 425//742 437//742
+f 549//743 432//743 578//743
+f 432//744 426//744 578//744
+f 549//745 548//745 432//745
+f 548//746 429//746 432//746
+f 578//747 426//747 425//747
+f 425//748 577//748 578//748
+f 578//749 577//749 549//749
+f 396//750 579//750 412//750
+f 343//751 580//751 408//751
+f 363//752 579//752 400//752
+f 581//753 408//753 580//753
+f 400//754 579//754 396//754
+f 343//755 411//755 341//755
+f 579//756 365//756 412//756
+f 365//757 366//757 412//757
+f 369//758 368//758 426//758
+f 551//759 501//759 471//759
+f 469//760 560//760 470//760
+f 501//761 551//761 563//761
+f 407//762 558//762 404//762
+f 385//763 519//763 384//763
+f 329//764 546//764 543//764
+f 330//765 543//765 487//765
+f 330//766 329//766 543//766
+f 546//767 329//767 328//767
+f 448//768 520//768 449//768
+f 461//769 520//769 448//769
+f 441//770 522//770 520//770
+f 520//771 522//771 449//771
+f 514//772 338//772 332//772
+f 510//773 561//773 575//773
+f 381//774 514//774 582//774
+f 514//775 332//775 582//775
+f 582//776 332//776 386//776
+f 518//777 519//777 385//777
+f 332//778 518//778 386//778
+f 192//779 195//779 190//779
+f 3//780 2//780 11//780
+f 8//781 5//781 12//781
+f 3//782 122//782 275//782
+f 1//783 3//783 275//783
+f 22//784 180//784 179//784
+f 20//785 19//785 22//785
+f 22//786 179//786 20//786
+f 235//787 35//787 200//787
+f 235//788 33//788 35//788
+f 83//789 235//789 237//789
+f 30//790 33//790 235//790
+f 235//791 83//791 30//791
+f 36//792 83//792 237//792
+f 83//793 28//793 31//793
+f 83//794 31//794 30//794
+f 34//795 33//795 32//795
+f 31//796 34//796 32//796
+f 25//797 34//797 29//797
+f 27//798 35//798 7//798
+f 139//799 15//799 272//799
+f 41//800 40//800 21//800
+f 46//801 45//801 583//801
+f 44//802 43//802 47//802
+f 52//803 49//803 161//803
+f 58//804 138//804 56//804
+f 60//805 46//805 59//805
+f 63//806 584//806 68//806
+f 2//807 1//807 208//807
+f 62//808 584//808 63//808
+f 64//809 59//809 583//809
+f 64//810 583//810 45//810
+f 48//811 50//811 66//811
+f 50//812 52//812 66//812
+f 52//813 161//813 68//813
+f 210//814 57//814 287//814
+f 226//815 215//816 285//817
+f 83//818 36//818 78//818
+f 76//819 85//819 266//819
+f 69//820 86//820 73//820
+f 91//821 90//821 87//821
+f 123//822 93//822 92//822
+f 91//823 123//823 92//823
+f 164//824 163//824 289//824
+f 585//825 290//825 295//825
+f 59//826 46//826 583//826
+f 161//827 96//71 63//70
+f 161//828 63//828 68//828
+f 97//829 100//829 61//829
+f 84//830 105//830 106//830
+f 103//831 90//831 274//831
+f 274//832 33//832 103//832
+f 207//833 149//833 148//833
+f 148//834 109//834 207//834
+f 108//835 207//835 109//835
+f 110//836 113//836 111//836
+f 112//837 114//837 150//837
+f 110//838 114//838 113//838
+f 281//839 115//839 117//839
+f 121//840 122//840 3//840
+f 107//841 126//841 121//841
+f 125//842 7//842 35//842
+f 125//843 35//843 34//843
+f 126//844 34//844 25//844
+f 25//845 122//845 126//845
+f 34//846 31//847 29//848
+f 31//847 127//849 29//848
+f 54//850 132//850 135//850
+f 138//851 54//851 137//851
+f 138//852 129//852 56//852
+f 13//853 139//853 271//853
+f 19//854 18//854 269//854
+f 144//855 147//855 149//855
+f 151//856 110//856 142//856
+f 162//857 158//857 153//857
+f 43//858 46//858 156//858
+f 156//859 159//859 261//859
+f 158//860 156//860 261//860
+f 49//861 51//861 155//861
+f 96//862 161//862 154//862
+f 155//863 160//863 162//863
+f 202//864 163//864 165//864
+f 174//865 290//865 585//865
+f 174//866 175//866 290//866
+f 241//867 185//867 167//867
+f 167//868 169//868 165//868
+f 167//869 166//869 241//869
+f 168//870 167//870 185//870
+f 169//871 168//871 220//871
+f 176//872 175//872 172//872
+f 178//873 234//873 179//873
+f 183//197 182//874 177//198
+f 236//875 200//875 199//875
+f 24//876 238//876 198//876
+f 198//877 173//877 174//877
+f 113//878 209//878 111//878
+f 207//879 205//879 280//879
+f 586//880 10//880 206//880
+f 208//881 203//881 204//881
+f 113//882 203//882 209//882
+f 285//883 215//883 214//883
+f 213//884 215//884 264//884
+f 264//885 190//885 213//885
+f 211//886 210//886 287//886
+f 185//887 187//887 168//887
+f 184//888 218//888 187//888
+f 290//889 175//889 224//889
+f 282//890 58//890 57//890
+f 291//891 55//891 58//891
+f 138//892 58//892 55//892
+f 53//893 284//893 225//893
+f 54//894 53//894 132//894
+f 53//895 225//895 132//895
+f 226//896 225//896 284//896
+f 54//897 138//897 55//897
+f 291//898 58//898 282//898
+f 232//899 228//899 271//899
+f 229//900 13//900 228//900
+f 236//901 199//901 230//901
+f 198//902 238//902 229//902
+f 228//903 13//903 271//903
+f 237//904 235//904 234//904
+f 200//905 236//905 235//905
+f 239//906 176//906 182//906
+f 242//242 40//241 587//907
+f 242//908 194//908 193//908
+f 244//909 191//909 245//909
+f 245//910 180//910 22//910
+f 21//911 40//911 189//911
+f 242//912 587//912 17//912
+f 285//913 214//913 98//913
+f 211//914 100//914 97//914
+f 107//915 106//915 126//915
+f 121//916 94//916 101//916
+f 95//917 91//917 89//917
+f 126//918 28//918 29//918
+f 33//919 124//919 125//919
+f 33//920 274//920 124//920
+f 28//921 30//921 127//921
+f 30//922 32//922 127//922
+f 127//923 32//923 29//923
+f 32//924 33//924 126//924
+f 32//925 126//925 29//925
+f 125//926 126//926 33//926
+f 30//927 28//927 33//927
+f 91//928 95//928 123//928
+f 105//929 33//929 28//929
+f 28//930 106//930 105//930
+f 121//931 95//931 94//931
+f 67//932 249//932 65//932
+f 249//933 136//933 39//933
+f 136//934 68//934 584//934
+f 584//935 62//935 136//935
+f 588//936 254//936 255//936
+f 77//937 76//937 256//937
+f 79//938 77//938 80//938
+f 76//939 266//939 256//939
+f 258//940 158//940 162//940
+f 257//941 47//941 157//941
+f 46//942 260//942 159//942
+f 260//943 46//943 99//943
+f 260//944 99//944 262//944
+f 262//945 73//945 86//945
+f 74//946 75//946 259//946
+f 154//947 259//947 96//947
+f 259//948 75//948 96//948
+f 216//949 190//949 195//949
+f 264//950 245//950 191//950
+f 265//951 264//951 215//951
+f 245//952 265//952 263//952
+f 263//953 80//953 180//953
+f 266//954 23//954 256//954
+f 210//955 217//955 267//955
+f 267//956 283//956 210//956
+f 267//957 266//957 283//957
+f 194//958 267//958 217//958
+f 231//959 269//959 18//959
+f 231//960 220//960 268//960
+f 139//961 268//962 221//963
+f 268//962 139//961 270//964
+f 186//965 185//965 241//965
+f 177//966 182//966 176//966
+f 587//967 15//967 17//967
+f 40//968 42//968 587//968
+f 272//969 41//969 270//969
+f 19//970 270//970 41//970
+f 270//971 19//971 269//971
+f 272//972 270//972 139//972
+f 587//973 42//973 272//973
+f 587//974 272//974 15//974
+f 170//975 232//975 221//975
+f 223//976 222//976 224//976
+f 230//977 18//977 20//977
+f 273//978 179//978 234//978
+f 236//979 230//979 273//979
+f 238//980 233//980 229//980
+f 251//981 586//981 206//981
+f 209//982 208//982 255//982
+f 287//983 292//983 211//983
+f 286//984 292//985 287//986
+f 62//987 292//985 286//984
+f 62//988 100//988 292//988
+f 37//989 98//989 38//989
+f 128//990 62//990 286//990
+f 129//991 128//991 286//991
+f 27//992 122//992 35//992
+f 4//993 201//993 200//993
+f 4//994 200//994 7//994
+f 122//995 200//995 35//995
+f 275//996 27//996 197//996
+f 174//997 585//997 196//997
+f 276//998 278//998 119//998
+f 117//999 278//999 281//999
+f 149//1000 112//1000 150//1000
+f 215//816 226//815 284//1001
+f 265//1002 80//1002 263//1002
+f 266//1003 85//1003 282//1003
+f 290//1004 288//1004 295//1004
+f 288//1005 254//1005 588//1005
+f 74//1006 158//1006 86//1006
+f 80//1007 178//1007 180//1007
+f 190//1008 264//1008 191//1008
+f 147//1009 143//1009 109//1009
+f 110//1010 109//1010 143//1010
+f 114//1011 110//1011 151//1011
+f 23//1012 26//1012 77//1012
+f 23//1013 77//1013 178//1013
+f 77//1014 79//1014 178//1014
+f 79//1015 237//1015 178//1015
+f 237//1016 79//1016 78//1016
+f 26//1017 237//1017 78//1017
+f 78//1018 77//1018 26//1018
+f 205//1019 9//1019 6//1019
+f 281//1020 280//1020 205//1020
+f 204//1021 112//1021 277//1021
+f 11//1022 2//1022 118//1022
+f 291//1023 85//1023 102//1023
+f 284//1024 53//1024 104//1024
+f 284//1025 103//1025 82//1025
+f 55//1026 88//1026 53//1026
+f 84//1027 82//1027 105//1027
+f 80//1028 265//1028 82//1028
+f 265//1029 284//1029 82//1029
+f 294//1030 98//1030 214//1030
+f 213//1031 216//1031 71//1031
+f 293//1032 96//1032 75//1032
+f 196//1033 585//1033 295//1033
+f 296//1034 250//1034 289//1034
+f 296//1035 251//1035 250//1035
+f 251//1036 10//1036 586//1036
+f 163//1037 202//1037 289//1037
+f 197//1038 196//1038 297//1038
+f 255//1039 288//1039 588//1039
+f 51//1040 50//1040 47//1040
+f 581//1041 305//1041 304//1041
+f 383//1042 299//1042 303//1042
+f 306//1043 299//1043 298//1043
+f 301//1044 342//1044 302//1044
+f 300//1045 299//1045 378//1045
+f 307//1046 480//1046 308//1046
+f 311//393 310//392 326//1047
+f 574//1048 311//1048 326//1048
+f 313//1049 312//1049 311//1049
+f 312//1050 315//1050 310//1050
+f 498//1051 307//1051 309//1051
+f 326//1052 324//1052 574//1052
+f 326//1053 496//1053 322//1053
+f 321//1054 319//1054 498//1054
+f 468//1055 331//1056 330//1057
+f 117//1058 116//1058 338//1058
+f 116//1059 332//1059 338//1059
+f 117//1060 337//1060 278//1060
+f 119//1061 278//412 333//411
+f 343//1062 305//1062 580//1062
+f 305//1063 581//1063 580//1063
+f 340//1064 342//1064 301//1064
+f 353//1065 506//1065 499//1065
+f 353//1066 352//1066 491//1066
+f 506//1067 353//1067 491//1067
+f 353//1068 498//1068 351//1068
+f 324//1069 325//1069 346//1069
+f 346//1070 348//1070 350//1070
+f 499//1071 498//1071 353//1071
+f 358//1072 357//1072 541//1072
+f 358//1073 541//1073 360//1073
+f 503//1074 491//1074 490//1074
+f 362//1075 347//1075 349//1075
+f 491//1076 503//1076 506//1076
+f 342//1077 366//1077 302//1077
+f 364//1078 365//1078 363//1078
+f 304//1079 363//1079 581//1079
+f 461//1080 448//1080 453//1080
+f 449//1081 457//1081 454//1081
+f 367//1082 371//1082 565//1082
+f 433//1083 367//1083 565//1083
+f 433//510 368//512 367//1084
+f 385//1085 377//1085 386//1085
+f 387//1086 344//1086 343//1086
+f 389//1087 343//1087 341//1087
+f 392//1088 391//1088 388//1088
+f 345//1089 393//1089 341//1089
+f 345//1090 384//1090 393//1090
+f 396//1091 395//1091 403//1091
+f 400//1092 402//1092 589//1092
+f 404//1093 398//1093 397//1093
+f 399//1094 395//1094 397//1094
+f 404//1095 396//1095 412//1095
+f 408//1096 581//1096 363//1096
+f 410//1097 409//1097 407//1097
+f 409//1098 400//1098 589//1098
+f 400//1099 408//1099 363//1099
+f 405//1100 410//1100 407//1100
+f 341//1101 411//1101 405//1101
+f 402//1102 401//1102 421//1102
+f 416//1103 401//1103 446//1103
+f 423//1104 415//1104 438//1104
+f 415//1105 458//1105 438//1105
+f 414//1106 413//1106 399//1106
+f 428//1107 427//1107 430//1107
+f 432//1108 431//1108 426//1108
+f 426//1109 431//1109 369//1109
+f 436//1110 434//1110 565//1110
+f 433//1111 565//1111 434//1111
+f 434//1112 437//1112 425//1112
+f 440//1113 441//1113 418//1113
+f 423//1114 439//1114 536//1114
+f 438//1115 521//1115 439//1115
+f 454//1116 464//1116 455//1116
+f 461//1117 453//1117 462//1117
+f 452//1118 459//1118 453//1118
+f 421//1119 462//1119 463//1119
+f 421//1120 419//1120 462//1120
+f 449//1121 458//1121 457//1121
+f 464//1122 454//1122 457//1122
+f 473//1123 551//1123 471//1123
+f 468//1124 470//1124 467//1124
+f 468//1125 508//1125 469//1125
+f 507//1126 469//1126 508//1126
+f 509//1127 508//1127 472//1127
+f 471//1128 509//1128 472//1128
+f 473//1129 472//1129 327//1129
+f 479//1130 308//1130 480//1130
+f 314//1131 316//1131 478//1131
+f 316//1132 317//1132 477//1132
+f 486//1133 487//1133 489//1133
+f 486//1134 485//1134 488//1134
+f 486//1135 489//1135 484//1135
+f 484//1136 362//1136 486//1136
+f 474//1137 485//1137 362//1137
+f 475//1138 490//1138 476//1138
+f 472//1139 483//1139 328//1139
+f 409//1140 589//1140 402//1140
+f 323//1141 494//1141 336//1141
+f 494//1142 323//1142 322//1142
+f 322//1143 496//1143 494//1143
+f 500//1144 509//1145 471//1146
+f 505//1147 325//1147 323//1147
+f 516//1148 361//1148 505//1148
+f 516//1149 505//1149 517//1149
+f 517//1150 505//1150 323//1150
+f 504//1151 503//1151 519//1151
+f 499//1152 502//1152 321//1152
+f 436//1153 455//1153 464//1153
+f 451//1154 430//1154 452//1154
+f 459//1155 430//1155 427//1155
+f 459//1156 427//1156 510//1156
+f 510//1157 590//1157 576//1157
+f 510//1158 576//1158 460//1158
+f 465//1159 576//1159 511//1159
+f 576//1160 590//1160 511//1160
+f 336//1161 335//1161 517//1161
+f 333//1162 339//1162 512//1162
+f 512//1163 332//1163 333//1163
+f 522//1164 458//1164 449//1164
+f 522//1165 441//1165 521//1165
+f 522//1166 438//1166 458//1166
+f 528//1167 526//1167 527//1167
+f 547//1168 351//1168 525//1168
+f 524//1169 547//1169 525//1169
+f 351//1170 530//1170 525//1170
+f 307//1171 498//1171 319//1171
+f 310//1172 533//1172 496//1172
+f 326//1173 310//1173 496//1173
+f 480//1174 531//1174 315//1174
+f 531//1175 534//1175 533//1175
+f 534//1176 319//1176 318//1176
+f 307//1177 319//1177 532//1177
+f 376//1178 375//1178 535//1178
+f 330//1179 487//1179 488//1179
+f 488//1180 468//1055 330//1057
+f 488//1181 485//1181 468//1181
+f 476//625 485//624 474//1182
+f 472//1183 328//1183 327//1183
+f 417//1184 542//1184 376//1184
+f 540//1185 417//1185 416//1185
+f 373//1186 376//1186 542//1186
+f 537//1187 539//1187 356//1187
+f 544//1188 347//1188 489//1188
+f 347//1189 544//1189 348//1189
+f 328//1190 482//1190 546//1190
+f 547//1191 545//645 481//644
+f 481//1192 491//1192 352//1192
+f 549//1193 327//1193 331//1193
+f 551//1194 550//1194 563//1194
+f 550//1195 549//1195 563//1195
+f 553//1196 558//1196 405//1196
+f 555//1197 410//1197 405//1197
+f 389//1198 405//1198 411//1198
+f 533//1199 534//1199 495//1199
+f 495//1200 496//1200 533//1200
+f 318//1201 493//1201 534//1201
+f 540//1202 445//1202 447//1202
+f 446//1203 445//1203 540//1203
+f 442//1204 444//1204 538//1204
+f 336//1205 517//1205 323//1205
+f 500//1144 554//1206 509//1145
+f 507//1207 554//1207 561//1207
+f 507//1208 509//1208 554//1208
+f 500//1209 553//1209 552//1209
+f 557//1210 556//1210 561//1210
+f 557//1211 561//1211 554//1211
+f 440//1212 417//1212 535//1212
+f 535//1213 536//1213 439//1213
+f 371//1214 370//1214 564//1214
+f 555//1215 569//1215 570//1215
+f 570//1216 463//1216 460//1216
+f 398//1217 566//1217 414//1217
+f 524//1218 545//1218 547//1218
+f 348//1219 544//1219 350//1219
+f 541//1220 447//1220 360//1220
+f 447//1221 442//1221 360//1221
+f 442//1222 538//1222 537//1222
+f 355//1223 442//1223 537//1223
+f 382//1224 573//1224 515//1224
+f 361//1225 516//1225 573//1225
+f 516//1226 515//1226 573//1226
+f 474//1227 362//1227 572//1227
+f 393//1228 391//1228 394//1228
+f 572//1229 391//1229 474//1229
+f 475//1230 474//1230 391//1230
+f 571//1231 393//1231 384//1231
+f 316//1232 309//1232 317//1232
+f 415//1233 466//1233 458//1233
+f 415//1234 414//1234 466//1234
+f 582//1235 378//1235 299//1235
+f 383//1236 582//1236 299//1236
+f 386//1237 378//1237 582//1237
+f 561//1238 556//1238 570//1238
+f 570//1239 460//1239 575//1239
+f 555//1240 570//1240 556//1240
+f 559//1241 575//1241 576//1241
+f 553//1242 500//1242 567//1242
+f 577//1243 437//1243 563//1243
+f 563//1244 549//1244 577//1244
+f 401//1245 403//1245 446//1245
+f 399//1246 413//1246 395//1246
+f 408//1247 411//1247 343//1247
+f 579//1248 363//1248 365//1248
+f 342//1249 341//487 366//486
+f 548//1250 470//1250 562//1250
+f 561//1251 560//1251 507//1251
+f 470//1252 560//1252 562//1252
+f 469//1253 507//1253 560//1253
+f 536//1254 424//1254 423//1254
+f 376//1255 535//1255 417//1255
+f 321//1256 497//1256 320//1256
+f 555//1257 558//1257 407//1257
+f 567//703 558//702 553//1258
+f 515//1259 380//1259 382//1259
+f 383//1260 381//1260 582//1260
+f 511//1261 437//1261 435//1261
+f 575//1262 559//1262 590//1262
+f 559//1263 511//1263 590//1263
+f 427//1264 429//1264 510//1264
+f 590//1265 510//1265 575//1265
+f 514//1266 381//1266 380//1266
+f 515//1267 514//1267 380//1267
+f 518//1268 385//1268 386//1268
+o Bushes
+v -46.048153 48.493900 -0.162104
+v -46.020687 48.271935 0.234227
+v -46.460934 48.726425 -0.152020
+v -45.604572 48.761742 -0.116517
+v -14.282016 43.670837 0.507489
+v -13.428384 44.611076 0.404463
+v -13.628428 44.203674 -0.183545
+v -14.047506 43.701405 -0.266079
+v -13.281260 42.809280 0.008802
+v -13.327815 42.882565 -0.061801
+v -13.220044 42.904797 -0.036599
+v -10.513710 35.867149 0.475031
+v -10.659616 35.840050 0.703708
+v -10.832087 35.872200 0.479231
+v -2.437887 32.167847 -0.385411
+v -1.349668 33.315483 -0.433816
+v -1.569551 31.704491 -0.600477
+v 10.720780 27.216072 0.442719
+v 10.889452 27.907187 0.123714
+v 10.793886 27.324097 0.145597
+v 10.936001 27.027933 0.151717
+v -28.658382 22.541470 0.313782
+v -29.493099 23.388779 -0.341548
+v -29.143248 23.711203 -0.667158
+v -29.026203 23.691374 -0.662960
+v -28.619881 23.731672 -0.636904
+v -27.638336 23.600929 -0.390712
+v -16.061211 19.988518 0.205743
+v -15.217360 20.573883 0.197425
+v -15.706903 19.937929 -0.647790
+v -16.020525 19.714993 -0.660141
+v -14.292231 20.343296 -0.526212
+v -14.919891 20.207392 -0.584976
+v -12.865344 17.844353 -0.084499
+v -12.801692 17.656548 0.435085
+v -13.863767 17.112911 -0.121435
+v -2.304313 19.471958 0.207943
+v -2.082650 19.029007 0.269561
+v -2.340850 19.305183 0.781630
+v 4.765948 10.802735 -0.287746
+v 4.809255 10.186260 -0.284036
+v 4.572511 10.537376 -0.017409
+v 8.241728 9.799220 -0.067509
+v 8.414794 9.865959 0.140895
+v 7.672386 9.243249 -0.114245
+v 1.032569 2.774450 -0.087621
+v 0.978852 2.465832 -0.061687
+v 0.870375 2.719734 0.344656
+v 2.560249 2.903452 -0.049468
+v 2.834798 2.916172 0.068690
+v 2.806951 2.809706 -0.033029
+v 11.235162 3.502860 -0.123902
+v 11.496614 3.658741 -0.017291
+v 11.486065 3.595131 -0.118287
+v 12.139195 2.623425 0.381729
+v 11.880086 2.800529 -0.060804
+v -4.481278 -6.688349 -0.230814
+v -4.067972 -6.478770 -0.339947
+v -4.091962 -6.500000 -0.342775
+v -4.390104 -6.754502 -0.368490
+v -3.301657 -9.483603 0.216354
+v -3.262963 -9.471476 0.283695
+v -3.273957 -9.501930 0.212372
+v -3.066192 -9.601604 0.184689
+v 0.173972 -7.168903 0.075381
+v -0.025005 -7.065258 0.093787
+v 0.113124 -7.026592 0.383842
+v -0.754925 -10.708063 -0.123128
+v -0.837231 -10.820528 0.011134
+v -0.890478 -10.724224 -0.109763
+v 0.898152 -9.041588 -0.157471
+v 1.205749 -8.848026 0.359885
+v 0.591794 -9.810929 -0.213308
+v 0.680344 -9.573793 -0.208933
+v -2.950556 -9.062698 0.203660
+v -40.857033 -12.286329 0.062055
+v -41.074120 -12.636900 0.596954
+v -41.116768 -12.520878 0.075489
+v -2.839747 -11.375002 0.058230
+v -2.677922 -10.570785 0.087673
+v -2.833055 -12.071712 0.387078
+v -2.949491 -12.099548 0.118674
+v 6.764110 -14.578514 -0.555462
+v 7.366266 -15.270069 -0.320239
+v 6.504242 -15.132395 0.029327
+v 6.412953 -14.352794 -0.549655
+v -43.312748 -21.917259 0.060501
+v -43.637775 -21.804529 0.055437
+v -43.275059 -21.736366 0.647112
+v -43.213943 -22.096842 0.066296
+v -42.411968 -23.567186 0.083477
+v -42.485928 -23.479033 -0.029288
+v -35.543907 -20.435356 -0.431687
+v -35.724022 -20.726858 -0.430210
+v -35.940540 -20.244026 0.558516
+v -35.048630 -19.289825 -0.028325
+v -35.456448 -20.282217 -0.418674
+v -34.439430 -21.154354 0.322031
+v -35.472706 -20.880478 -0.473088
+v -35.381237 -20.807173 -0.479281
+v -34.469433 -20.191294 -0.450842
+v -8.146599 -21.354469 0.625088
+v -8.104762 -21.234589 0.622382
+v -8.098817 -21.224007 0.641553
+v 2.007942 -20.116312 -0.197944
+v 1.868427 -21.192137 -0.297738
+v 1.488731 -20.712793 0.527007
+v 3.083215 -20.983561 -0.306023
+v 2.658585 -21.652416 0.433103
+v 2.238363 -21.490921 -0.334961
+v -46.083481 -23.602070 0.033284
+v -46.103539 -22.807997 0.512848
+v -46.040489 -22.688761 0.063311
+v -46.058365 -23.029186 0.066745
+v -47.633499 -24.857170 -0.012557
+v -47.631020 -24.831406 0.014254
+v -46.900181 -25.700535 0.250516
+v -47.138374 -25.686970 -0.070790
+v -48.419506 -26.613045 0.262035
+v -48.481068 -26.139635 -0.072925
+v -48.047935 -26.604227 -0.108393
+v -29.250002 -25.880384 -0.103663
+v -29.882317 -26.106157 -0.267388
+v -28.913647 -25.594170 0.533584
+v -29.080801 -25.831394 -0.097687
+v -8.795738 -25.881618 -0.167532
+v -8.798409 -26.037584 -0.174557
+v -8.841323 -25.962894 -0.102147
+v -40.145557 -28.686874 -0.028034
+v -38.044170 -27.751143 -0.285567
+v -38.111832 -27.788639 -0.335294
+v -38.495701 -27.961201 -0.301069
+v -39.225811 -28.302431 -0.338538
+v -39.985298 -28.656740 -0.372364
+v -40.001045 -29.200314 -0.429601
+v -37.437614 -28.551022 -0.372584
+v -38.058876 -27.775131 -0.339795
+v -2.361691 -28.915958 0.680676
+v -1.318866 -28.481728 0.152143
+v -1.865979 -28.738729 0.244749
+v -2.163352 -28.876905 0.304654
+v -0.145357 -28.765987 0.030433
+v -0.739769 -28.365223 0.068442
+v -0.072444 -28.611616 0.612771
+v -2.382004 -29.085733 0.354115
+v 0.817244 -30.314692 0.088357
+v 0.793497 -30.292589 0.052671
+v -2.521921 -30.655153 0.501407
+v -2.386303 -30.948446 0.506544
+v -2.528716 -30.783381 0.820241
+v -37.589481 -31.140732 -0.624925
+v -37.569786 -31.369530 -0.310724
+v -39.734344 -31.063082 -0.454330
+v -39.465431 -30.973051 -0.613838
+v -18.201223 -31.044554 0.105794
+v -17.995747 -31.235371 0.255126
+v -18.208467 -31.377075 0.028275
+v -18.133377 -31.962622 0.198001
+v -18.374886 -31.923597 -0.087748
+v -15.096738 -32.261463 -0.004636
+v -15.736505 -31.735151 -0.237903
+v -14.807117 -31.823006 -0.327000
+v 0.618883 -30.683691 0.110683
+v 0.797623 -30.325687 0.055199
+v 0.293565 -31.391123 0.289116
+v 0.272013 -31.369345 0.205741
+v 2.961316 -34.710091 0.160651
+v 2.706100 -34.654411 0.630072
+v 2.664299 -34.555294 0.146579
+v 2.679535 -34.562904 0.145246
+v 35.850368 49.467285 0.746176
+v 36.469242 50.699169 0.043239
+v 36.151600 49.992012 -0.011739
+v 35.870205 49.356892 -0.108442
+v 34.147224 49.191692 -0.195526
+v 34.183353 49.194408 -0.199394
+v 38.765568 50.827812 -0.112790
+v 38.746464 50.838795 -0.110153
+v 39.249443 50.708611 0.208807
+v 39.112225 50.670212 -0.058767
+v 39.461334 48.065926 0.361369
+v 39.406311 48.430740 -0.138514
+v 39.598282 49.465446 -0.041687
+v 21.904758 44.515869 0.298766
+v 21.881311 44.515991 0.253854
+v 21.901876 44.593407 0.238084
+v 34.282524 46.485966 -0.327633
+v 34.050949 46.334373 0.459038
+v 33.885006 46.830505 -0.268863
+v 35.988010 46.186646 -0.528722
+v 36.190990 46.180672 -0.521201
+v 35.280819 45.897430 0.009279
+v 35.077629 46.140816 -0.430286
+v 37.127136 47.503014 -0.360520
+v 37.350872 47.541672 0.447478
+v 36.341942 46.294159 -0.499793
+v 36.763577 46.932129 -0.396958
+v 43.113934 47.367607 -0.124710
+v 43.152939 47.384846 -0.146435
+v 43.115814 47.356583 -0.140385
+v 42.627613 45.932316 0.010941
+v 43.024269 45.064602 0.026064
+v 42.572021 45.901718 0.148459
+v 25.341122 44.169556 0.151069
+v 25.750723 43.882645 0.136042
+v 25.199474 44.049965 0.440383
+v 25.138027 44.331791 0.132585
+v 30.786510 40.554970 -0.173228
+v 30.141064 40.358292 0.350325
+v 30.081928 40.611919 -0.139214
+v 41.273148 40.586601 0.342626
+v 41.008934 40.980717 0.234226
+v 41.022121 41.156059 0.502226
+v 12.316309 26.126165 0.132117
+v 12.263103 26.120262 0.153622
+v 12.253578 26.124054 0.134233
+v 41.553654 22.069359 -0.318383
+v 43.327927 22.974995 0.030793
+v 43.033119 22.549446 -0.781773
+v 42.012310 22.102770 -0.778657
+v 43.662052 22.572174 -0.811317
+v 44.609329 22.378342 -0.284218
+v 44.265232 22.325548 -0.854386
+v 44.189995 22.351990 -0.862295
+v 44.472778 21.958107 -0.815040
+v 13.597102 17.112164 0.201272
+v 13.975605 16.900486 -0.002742
+v 13.705148 17.002371 -0.007929
+v 38.563850 16.763268 0.220517
+v 39.876202 16.312656 -0.085850
+v 39.431541 16.350861 -0.500986
+v 38.584698 16.582085 -0.573249
+v 18.817669 14.568222 0.195689
+v 19.641657 14.915763 -0.292245
+v 18.879387 14.403723 -0.260082
+v 18.418081 13.463850 -0.238984
+v 18.441614 12.647950 -0.231796
+v 18.164865 13.223824 0.203125
+v 21.140669 14.420852 -0.398260
+v 21.188091 14.691593 0.286014
+v 21.542822 12.539665 0.480407
+v 21.329155 13.210557 -0.373788
+v 39.902924 16.085302 -0.437383
+v 20.755747 11.745976 -0.350895
+v 20.147249 11.400326 0.527725
+v 19.861631 11.812120 -0.301939
+v 31.067524 10.200344 -0.103199
+v 31.018433 9.661509 -0.130582
+v 30.882320 10.001553 0.490579
+v 26.184422 3.739693 0.062758
+v 27.051592 4.896641 -0.061195
+v 27.038956 4.866495 -0.093576
+v 26.235262 3.769149 -0.043237
+v 27.743885 3.552985 -0.210170
+v 27.114681 3.125690 0.379695
+v 26.961061 3.453023 -0.114806
+v 17.161774 0.129710 0.029406
+v 16.900324 0.154999 0.267444
+v 16.793772 0.567133 0.003967
+v 17.069445 0.266793 -0.001502
+v 33.905884 -2.483424 -0.338672
+v 33.913212 -2.824025 -0.244440
+v 33.685646 -2.520966 -0.214410
+v 35.296703 -2.411847 -0.119677
+v 35.079552 -1.905564 -0.295122
+v 35.086494 -1.555096 0.353447
+v 35.505043 -2.823887 0.177892
+v 35.395821 -2.687866 -0.118374
+v 44.224453 -4.665334 -0.261786
+v 44.324409 -4.614046 -0.258061
+v 44.374100 -4.831938 0.103234
+v 43.884148 -4.841936 -0.271518
+v 44.327305 -4.603621 -0.258323
+v 44.517830 -3.978070 -0.219924
+v 44.791061 -3.852428 0.546353
+v 45.391884 -19.447773 0.136923
+v 45.821568 -18.886665 -0.476913
+v 46.125530 -20.015907 -0.763154
+v 41.049839 -28.315659 -0.180659
+v 41.137020 -29.444511 -0.301278
+v 40.766636 -28.762663 0.394702
+v 43.341644 -27.082958 0.944967
+v 44.444736 -28.087774 -0.303167
+v 44.299587 -27.981234 -0.285891
+v 42.967281 -27.020811 -0.227536
+v 42.872982 -30.557455 -0.298779
+v 43.103279 -30.712730 0.727805
+v 42.290031 -30.493752 -0.311643
+v 43.776981 -30.343361 -0.290166
+v 44.160419 -30.317696 0.031542
+v 27.407207 -32.353252 0.138996
+v 28.675171 -31.739656 0.272078
+v 28.467396 -32.208096 -0.829142
+v 27.941326 -32.424843 -0.773371
+v 45.729435 -32.741589 -0.159901
+v 45.755512 -32.793373 -0.157367
+v 45.717777 -32.781490 -0.115243
+v -19.209841 -37.102264 -0.290785
+v -18.479387 -37.805428 -0.275550
+v -19.238655 -37.812634 0.380929
+v -12.395703 -38.108387 -0.048551
+v -12.409625 -38.105946 -0.049135
+v -12.409602 -38.094536 -0.037500
+v -10.881505 -38.767197 0.308676
+v -10.851476 -38.964260 -0.022071
+v -11.375002 -38.660347 -0.005794
+v -3.819831 -41.866947 0.675166
+v -2.695623 -42.016094 -0.055432
+v -3.016663 -42.016666 -0.131106
+v -3.676662 -42.003948 -0.195169
+v -39.136658 -42.637676 -0.166486
+v -39.588573 -42.693855 -0.140593
+v -39.230488 -42.570293 0.032378
+v -38.917309 -46.256687 -0.283834
+v -38.492477 -46.297531 -0.197320
+v -39.262741 -46.472958 0.993027
+v -40.068298 -46.202694 -0.212224
+v -26.859821 -44.921078 -0.087545
+v -27.081266 -45.015488 -0.062858
+v -26.888241 -44.894398 -0.015109
+v -3.911665 -43.052849 -0.236247
+v -4.308084 -42.810097 0.267928
+v -3.966721 -42.482174 -0.240670
+v -3.914815 -42.914818 -0.251109
+v -46.436588 -50.792782 -0.093619
+v -46.684700 -50.481106 -0.489585
+v -46.594276 -49.765617 -0.428032
+v -27.944706 -47.928143 0.096078
+v -27.512300 -48.408012 0.064233
+v -27.904774 -48.185535 0.908739
+v -48.768547 -50.632614 -0.378022
+v -49.276196 -49.972214 0.145651
+v -48.998566 -49.992493 -0.364441
+v -48.876694 -50.311653 -0.384763
+v 29.642069 -34.744072 -0.945103
+v 28.852663 -35.298546 0.061508
+v 27.822437 -34.866737 -0.650276
+v 28.097601 -34.822300 -0.740243
+v 37.962132 -35.874710 -0.441738
+v 37.041199 -35.030964 0.201877
+v 37.321697 -34.745850 -0.498145
+v 37.727783 -35.443523 -0.479218
+v 39.446224 -41.381336 0.037376
+v 40.517948 -40.564129 0.008093
+v 40.510525 -40.575684 -0.007053
+v 39.476170 -41.373108 -0.001487
+v -46.808983 49.034073 0.658075
+v -45.604332 49.506706 0.911391
+v -46.108952 50.061291 0.006469
+v -46.469257 49.879738 -0.026636
+v -46.873600 49.134323 -0.122819
+v 0.417241 45.600670 0.380386
+v 0.191413 45.545670 0.379173
+v 0.241139 45.564583 0.561628
+v 0.177596 44.546341 0.457979
+v 1.090565 44.854164 1.036982
+v 0.112613 44.814060 0.435173
+v 0.855600 44.539719 0.475224
+v 5.109244 42.469540 0.257672
+v 4.456158 41.756001 0.158950
+v 5.365124 41.732498 0.905465
+v 5.220273 42.572826 0.285254
+v -11.413655 39.192562 0.517201
+v -12.576738 38.137695 0.498760
+v -12.524884 38.149498 0.998557
+v -11.561364 38.481232 1.640858
+v -10.007159 38.351379 1.515421
+v -10.844505 39.400711 0.513180
+v -11.072183 39.433548 0.516463
+v -10.007731 37.003296 1.731494
+v -12.083671 36.464882 1.304675
+v -10.093171 38.994705 0.499497
+v -9.277373 37.753548 0.476975
+v -9.238283 37.397602 0.473057
+v -1.811079 32.564034 0.831268
+v -0.858095 32.608292 0.390189
+v -2.262839 33.002487 0.079389
+v -1.517735 31.616852 0.596383
+v 12.186872 27.042995 1.645107
+v 13.969719 26.423126 0.821934
+v -28.403423 24.357716 -0.084514
+v -28.951122 23.882511 -0.638818
+v -29.036016 23.793579 -0.652733
+v -28.699944 23.848957 0.800807
+v -19.015223 22.556486 0.120619
+v -18.766846 22.360283 0.818764
+v -18.404985 21.794140 0.049376
+v -19.500801 21.126156 0.538709
+v -20.178835 22.004486 -0.190808
+v -19.430927 21.261477 -0.235458
+v -18.541470 21.526085 -0.032492
+v -13.599502 20.338215 0.682087
+v -13.589358 20.229841 -0.431255
+v -1.189548 21.539869 0.029013
+v -2.288719 20.443802 0.098140
+v -1.346479 21.245560 1.265125
+v 0.082942 21.509396 1.257199
+v -0.598671 21.644361 0.047010
+v 4.734308 21.125002 -0.071074
+v 4.651875 21.309765 -0.059905
+v 4.199280 21.830379 0.586384
+v 4.622496 20.153564 1.391638
+v 4.876074 20.832893 -0.120663
+v 3.713348 21.425587 1.269483
+v -14.583490 16.930313 -0.185882
+v -15.532544 17.503288 1.098573
+v -15.660314 17.682238 -0.394796
+v -12.847701 19.592255 -0.130842
+v -12.979508 19.695154 -0.300995
+v -13.237729 19.227463 1.315438
+v -14.679109 19.294315 1.855344
+v -13.694718 17.588985 1.355082
+v 0.665983 18.755035 0.027292
+v 0.863830 18.861782 0.786974
+v -0.403592 18.132431 0.346770
+v -0.244703 18.227381 0.060212
+v -0.470658 19.431690 1.942273
+v 2.724153 19.313629 1.139340
+v 2.617039 19.134216 -0.121774
+v 3.481354 18.807796 -0.242948
+v 3.981172 18.699471 0.153848
+v -42.757748 14.577305 0.259754
+v -43.371098 14.183261 0.286712
+v -42.816483 14.578133 0.838336
+v -42.836658 13.402283 0.237256
+v -42.605377 13.396313 0.628918
+v -43.216103 13.742682 0.267425
+v -41.980782 14.224249 0.205923
+v -41.968422 14.599248 0.213856
+v -6.260275 14.720208 0.909263
+v -5.503238 14.835125 1.497625
+v -5.367782 15.176113 0.815857
+v -6.077750 14.804124 0.913059
+v -3.867957 14.547398 1.278942
+v -4.402967 14.962236 0.767088
+v -4.469005 12.594004 0.967740
+v -3.872245 12.932043 0.804502
+v -4.744275 13.245667 1.936493
+v -4.949481 12.170251 0.931471
+v -6.299415 12.860691 1.457743
+v 2.504410 15.392799 0.714143
+v 3.615024 14.666122 0.758797
+v 2.983177 15.517661 -0.477634
+v 2.894252 15.577906 -0.486904
+v 2.608961 14.744020 -0.500632
+v 3.000318 13.970882 0.023679
+v -32.324890 11.668102 1.036577
+v -30.723934 12.799660 0.731626
+v -31.719902 12.560161 -0.221062
+v -32.045124 12.367887 -0.251584
+v -32.259483 12.045390 -0.289097
+v -32.979008 10.826225 0.240178
+v -31.894489 9.860863 1.498212
+v -29.637154 12.316433 1.122205
+v -31.036270 11.671501 1.985139
+v 5.399837 9.003159 0.422825
+v 5.398211 9.151582 -0.227446
+v 5.103509 10.634319 1.310607
+v 5.186887 11.880531 -0.117149
+v 6.564617 12.199112 1.040800
+v 6.063149 12.041329 -0.160168
+v 5.222853 11.880512 -0.242274
+v 5.652322 9.074188 -0.202721
+v 6.695337 8.773008 -0.173698
+v 7.210735 12.171638 -0.048110
+v 8.148048 11.264072 0.920814
+v 7.725395 11.838345 -0.000821
+v 7.693770 11.857982 -0.001251
+v 6.517717 11.250809 1.929505
+v 7.541064 9.851498 1.469319
+v 6.519415 9.105164 1.301945
+v 6.985228 8.752634 -0.162915
+v -16.671600 6.753195 0.509877
+v -17.403223 6.466816 0.568063
+v -16.491013 6.649357 0.793996
+v -16.341780 6.323468 0.479188
+v -16.998781 5.701751 0.528531
+v 1.576249 1.060359 0.073846
+v 1.633433 0.915723 0.078939
+v 1.100784 1.860714 1.096713
+v 2.653825 1.997902 0.915135
+v 1.706317 0.945605 0.092998
+v 10.385793 3.021460 -0.134152
+v 10.637048 3.230656 0.766751
+v 11.198324 2.025372 0.515213
+v 10.649290 2.568271 -0.099761
+v 11.246436 1.970290 -0.044048
+v 11.772142 2.316609 -0.040209
+v -1.221432 -6.839672 0.160359
+v -42.790394 -9.416056 1.068863
+v -40.990128 -9.772612 1.265903
+v -41.899109 -9.420728 0.036768
+v -42.675331 -9.282463 0.053506
+v -42.874321 -10.540810 1.653926
+v -6.049393 -10.376470 -0.069352
+v -5.665490 -9.690098 0.669514
+v -5.571163 -9.743481 -0.148632
+v -5.776414 -10.022882 -0.149412
+v -3.147384 -8.783578 0.240568
+v -2.899584 -8.953979 0.204571
+v -3.840358 -8.037998 1.159280
+v -4.612453 -7.898006 0.082765
+v -3.426646 -8.633554 0.153395
+v -2.691024 -7.065792 1.468784
+v -3.476079 -6.442570 1.033915
+v -2.868889 -8.952149 0.201439
+v -2.000072 -7.554323 1.301811
+v -5.010669 -10.168653 1.565336
+v -3.277944 -10.849691 1.377984
+v -2.799149 -10.005516 0.415393
+v -4.891494 -11.796387 2.071682
+v -6.124501 -11.231720 1.275123
+v 0.216010 -10.238315 -0.198385
+v -0.306683 -10.077333 1.528216
+v -0.467044 -10.640034 -0.149563
+v -1.647852 -6.848189 0.194320
+v -1.700507 -6.806514 0.202285
+v 0.036338 -8.457640 1.803116
+v -1.968257 -9.056311 1.456844
+v -2.539768 -9.812366 0.116965
+v -2.401872 -9.919552 0.096219
+v -1.626775 -10.412080 -0.014035
+v -42.848408 -12.341636 0.098608
+v -42.660099 -11.932514 1.339898
+v -43.739204 -11.599016 0.870942
+v -43.334145 -12.107987 0.094765
+v -40.322422 -11.203217 0.019139
+v -40.227592 -10.885132 0.741913
+v -40.406963 -11.375000 0.022999
+v -42.442684 -12.449236 0.104417
+v -41.846916 -12.613685 0.095552
+v -41.273354 -11.171387 1.621781
+v -11.271428 -12.001448 -0.167299
+v -11.286660 -11.861620 0.716767
+v -10.637385 -12.566477 -0.004124
+v -10.679281 -12.535704 -0.061059
+v -10.923249 -12.313598 -0.090841
+v -11.435054 -13.182936 0.606207
+v -12.416383 -11.951817 0.210817
+v -12.264283 -12.734695 -0.234392
+v -12.009851 -13.094139 -0.166309
+v -11.312559 -13.211800 -0.094268
+v -11.918195 -13.109554 -0.152389
+v -10.692469 -12.628794 -0.058969
+v -5.893506 -12.484818 0.272776
+v -6.279191 -11.088815 0.111062
+v -6.195117 -11.375001 0.194080
+v -3.597338 -12.652664 0.224322
+v -3.570776 -12.635871 0.220387
+v -3.512521 -12.196970 1.347040
+v -4.299179 -13.112340 0.283283
+v -2.678969 -9.941325 0.124191
+v 7.679485 -14.184532 0.643340
+v 7.843889 -14.293285 -0.442363
+v 7.737830 -14.183033 -0.434982
+v 7.044463 -13.481876 -0.047581
+v 6.816033 -14.224434 0.833860
+v -44.409210 -21.561367 0.545010
+v -45.153954 -22.032236 0.053878
+v -45.465221 -22.263029 0.058947
+v -45.768162 -22.487938 0.065661
+v -45.269371 -22.637461 1.625517
+v -43.816750 -22.871986 1.836941
+v -34.429020 -20.128508 0.779528
+v -12.244397 -20.432989 0.971663
+v -11.125396 -20.088915 0.602153
+v -11.713340 -20.222765 0.584222
+v -12.327191 -20.376402 0.628267
+v -12.812591 -20.754332 0.683684
+v -13.027474 -21.153397 1.383760
+v -12.537673 -20.543667 0.662166
+v -13.264850 -22.288424 1.272119
+v -13.300975 -21.915831 0.802480
+v -13.286656 -22.144552 0.825890
+v -13.275161 -22.356104 0.788583
+v -11.081165 -20.156836 0.613640
+v -11.688272 -22.954041 0.902214
+v -11.345572 -21.635937 1.656113
+v -10.783319 -20.208441 0.638246
+v -9.769782 -20.891766 1.933689
+v -10.573763 -20.064741 0.632159
+v -8.899233 -20.066622 0.633051
+v -8.896131 -20.057755 0.690460
+v -8.107628 -21.215738 0.622247
+v -10.006614 -20.072399 0.667235
+v -9.253096 -20.036777 0.643600
+v -9.601626 -22.327156 1.845762
+v -9.102428 -23.092453 0.457485
+v -8.838828 -23.061504 0.491605
+v 2.562676 -19.793171 0.511685
+v 2.349481 -19.829023 -0.178375
+v 3.038462 -20.455700 -0.254425
+v 3.345410 -20.941971 0.488837
+v 3.268405 -20.791716 -0.291957
+v -47.227085 -26.098942 -0.093555
+v -42.796455 -23.770947 1.224532
+v -44.535824 -25.257011 0.638985
+v -45.250648 -24.397547 1.490029
+v -28.439772 -26.243608 -0.163615
+v -28.408905 -26.699684 0.806412
+v -28.255318 -26.585758 -0.215704
+v -30.004292 -26.793514 0.710954
+v -30.072149 -26.261253 -0.329477
+v -11.581655 -22.871170 0.457410
+v -11.899499 -23.122536 0.460919
+v -12.879328 -22.719683 0.670196
+v -10.672321 -23.233038 0.265212
+v -10.462264 -23.328930 0.262266
+v -7.232169 -26.464785 1.417577
+v -6.566989 -25.138163 0.936168
+v -8.172126 -25.369274 1.032060
+v -6.429365 -25.337492 0.256184
+v -6.115030 -26.772793 0.248939
+v -6.962615 -27.538963 0.788238
+v -6.138119 -26.920603 0.238799
+v -38.552994 -29.545467 1.941752
+v -39.213249 -28.517479 1.459949
+v -39.537094 -30.172810 1.493618
+v -37.430840 -28.683065 1.255126
+v -37.846699 -30.716419 1.472452
+v -37.036491 -29.933544 1.184426
+v -29.115318 -27.581392 -0.356695
+v -29.250002 -27.405361 -0.329594
+v -29.098516 -27.581236 -0.356799
+v -1.532353 -29.832813 1.747798
+v 0.126928 -29.437239 1.272371
+v -0.356405 -31.158754 1.380563
+v -39.004589 -31.233109 0.712082
+v -15.386066 -30.609488 0.000503
+v -15.839530 -31.261000 -0.119015
+v -15.007781 -30.476009 0.774563
+v -18.774298 -31.048594 0.147068
+v -19.005386 -30.987642 0.110289
+v -19.343891 -31.544384 0.607905
+v -15.339795 -31.476593 1.016605
+v -15.956919 -31.470127 -0.159455
+v -14.661137 -30.917089 -0.125111
+v -14.370183 -31.615093 0.504040
+v -14.397198 -31.384552 -0.254284
+v -0.881690 -31.712328 0.375900
+v 0.076178 -31.476797 0.238334
+v 2.120370 -32.191456 0.036486
+v 1.805395 -32.929203 0.131480
+v 1.879633 -32.293182 0.910400
+v 2.930748 -31.423309 0.604036
+v 4.093686 -31.643730 1.238892
+v 4.379894 -31.466591 -0.237469
+v 3.947956 -31.417786 -0.239974
+v 5.707622 -33.297832 0.251229
+v 5.211892 -32.547737 -0.114796
+v 2.117703 -33.455509 1.279612
+v 1.877043 -33.405624 0.158420
+v 4.486671 -34.398941 1.481155
+v 4.846344 -32.852295 1.481436
+v 3.561647 -32.737152 1.956389
+v 5.591735 -33.094357 -0.052460
+v 12.500594 -34.083477 -0.020016
+v 12.209620 -34.520432 0.060060
+v 12.501115 -33.938992 0.408170
+v 24.545317 49.876297 0.058261
+v 23.597660 48.488415 0.096273
+v 24.592966 49.711655 1.277310
+v 23.576166 48.375191 0.098275
+v 24.706200 48.677689 1.783420
+v 25.101826 49.817337 0.048117
+v 26.141857 49.537514 1.325850
+v 26.412533 49.820221 0.084271
+v 25.728178 49.825428 0.035662
+v 37.755493 50.984077 -0.020519
+v 36.638119 50.849258 0.047382
+v 37.886955 50.750572 1.350828
+v 39.460625 50.384739 -0.012050
+v 38.396965 49.504761 2.068531
+v 39.547298 50.030392 -0.017324
+v 36.670231 48.167549 1.455575
+v 38.127781 47.969933 1.275973
+v 47.090111 47.995682 0.962931
+v 47.355789 48.245468 -0.398181
+v 44.479694 47.390221 1.487126
+v 19.512964 46.677994 0.280290
+v 19.135416 45.972237 0.454213
+v 19.219305 46.340363 0.746815
+v 19.805119 44.408310 0.600640
+v 19.520945 44.642403 1.257364
+v 19.270321 44.840050 0.615732
+v 20.113010 44.104378 0.926891
+v 21.399784 44.901390 1.316198
+v 21.868574 44.991344 0.179074
+v 21.771673 46.025814 0.166569
+v 21.720207 46.177246 0.673134
+v 20.371056 46.200485 1.552369
+v 21.582232 46.409473 0.164955
+v 20.997429 46.562397 0.174347
+v 21.857742 44.495449 0.260912
+v 20.173471 44.063747 0.597870
+v 26.811960 47.995750 0.121742
+v 26.876045 48.357498 0.861706
+v 26.122095 46.850143 0.691726
+v 26.331339 47.073368 0.132988
+v 25.154846 46.510460 0.093153
+v 24.406023 47.017136 0.880841
+v 24.336157 47.044033 0.101849
+v 26.156567 46.965370 0.138231
+v 25.393669 46.505047 0.095814
+v 25.548056 44.940193 0.146267
+v 26.155672 45.012291 0.846466
+v 26.201168 45.037193 0.126974
+v 25.566685 44.942917 0.147517
+v 26.704033 44.603588 0.108114
+v 26.042912 47.807846 1.692442
+v 35.036781 46.617050 1.409007
+v 35.698402 47.055779 1.799981
+v 36.256844 46.224937 -0.512565
+v 43.398220 46.097122 1.665702
+v 43.384758 44.496769 0.028870
+v 43.473042 44.409534 0.027447
+v 44.550610 44.538635 1.221280
+v 44.511791 46.346230 2.094193
+v 48.189407 47.212036 0.517915
+v 45.103745 44.591496 -0.125062
+v 44.510338 44.352272 -0.057386
+v 45.859051 44.968395 -0.216299
+v 46.280025 45.373367 0.850409
+v 45.883854 46.788010 1.455327
+v 47.184170 46.763046 1.581502
+v 47.764446 45.756966 0.960353
+v 26.268147 44.087090 0.119936
+v 31.179688 41.649155 -0.026205
+v 30.099102 41.652489 0.455628
+v 31.185947 40.763298 0.601202
+v 30.059305 41.226490 -0.116238
+v 38.920944 41.220592 -0.082084
+v 38.537689 40.540905 -0.004111
+v 39.016953 41.384460 0.630497
+v 40.830349 41.223438 0.165405
+v 39.563755 41.404171 -0.033092
+v 38.287605 39.861767 0.099008
+v 38.618076 39.976135 1.385788
+v 38.341061 40.010765 0.069995
+v 40.453007 40.075813 1.916447
+v 19.092670 39.255856 0.171385
+v 18.106400 39.780922 0.266320
+v 18.320263 39.198654 1.511828
+v 17.083204 39.800812 0.506895
+v 16.321095 38.675262 0.326190
+v 19.133036 39.000004 0.125925
+v 18.747829 37.737038 0.911673
+v 19.138121 38.892429 0.127353
+v 17.529676 37.610840 1.304421
+v 31.523888 35.511780 1.397294
+v 32.599300 36.684608 1.232004
+v 32.054691 36.789330 0.059157
+v 31.728325 36.444393 0.089542
+v 33.990005 35.823853 1.572970
+v 33.469620 36.772923 0.160378
+v 33.077305 36.990921 0.115061
+v 38.177467 39.095886 0.360426
+v 38.169399 39.192841 0.234408
+v 39.008293 38.799255 1.438867
+v 40.928143 38.449249 0.646384
+v 40.876213 38.425343 0.607537
+v 40.923897 38.449028 0.606802
+v 41.304321 40.370621 0.387272
+v 41.435932 39.677242 0.478818
+v 16.050274 33.212635 0.142534
+v 15.763187 32.519821 0.122217
+v 16.154018 33.582420 0.544263
+v 16.147718 33.443424 0.135004
+v 15.475960 31.695784 0.098954
+v 15.663455 32.077728 1.151880
+v 16.623011 31.817001 1.725912
+v 17.485851 32.961006 1.621037
+v 18.290035 32.291054 1.498527
+v 18.469410 33.228584 0.512068
+v 30.969273 35.196239 0.199136
+v 33.384651 33.416718 0.557262
+v 33.409534 33.463203 0.348373
+v 33.643326 33.645485 0.332265
+v 32.691219 34.721169 1.997621
+v 32.211109 33.809181 1.226271
+v 33.894611 34.114807 1.411452
+v 42.153812 33.046211 0.639020
+v 42.017868 33.088352 0.489123
+v 42.206772 33.060135 0.474370
+v 42.517731 33.367554 0.443277
+v 42.495335 33.385258 0.610732
+v 42.906986 33.752373 0.404355
+v 41.871796 33.741741 0.488380
+v 42.274200 34.184822 0.447273
+v 42.152843 33.585766 0.542690
+v 42.140572 34.037685 0.460924
+v 14.180994 26.521294 0.083543
+v 14.315802 26.683542 0.074619
+v 14.617854 27.311871 1.283275
+v 14.060756 26.374413 0.081447
+v 14.998894 28.521700 0.019809
+v 14.104497 29.184776 1.068911
+v 15.052348 28.371988 0.017338
+v 42.226242 21.372364 1.419997
+v 43.081257 22.665955 1.088595
+v 44.659245 21.352329 1.383294
+v 43.665508 21.573299 1.870789
+v 42.337048 19.925758 1.264197
+v 12.226491 16.276943 -0.008568
+v 11.957667 15.886051 0.836643
+v 13.358703 17.012857 -0.014666
+v 12.914332 16.726912 -0.023536
+v 14.917947 16.049667 1.157981
+v 13.462982 16.547352 1.493972
+v 42.236435 19.592308 -0.091125
+v 44.038567 19.378693 0.411963
+v 43.960018 20.158466 1.413091
+v 44.485447 19.820648 -0.614848
+v 45.295765 21.076893 -0.010857
+v 15.087651 14.484416 0.268406
+v 15.108392 14.979394 0.011431
+v 15.102519 15.146297 0.017856
+v 15.071966 16.168638 0.018043
+v 15.036650 14.475152 0.639367
+v 12.701392 14.137196 1.456454
+v 12.631650 13.697256 0.014247
+v 13.405336 13.757473 0.002370
+v 14.292521 13.910066 0.266240
+v 14.371013 14.071232 0.780073
+v 14.026544 15.017467 1.896937
+v 14.764301 14.328404 0.906527
+v 14.373935 14.090220 0.798909
+v 19.174726 14.205597 1.358223
+v 19.397570 12.295612 1.453364
+v 20.985889 13.430962 1.461536
+v 37.053997 15.596107 1.020313
+v 37.553230 16.376835 -0.147134
+v 39.685741 15.751305 1.300313
+v 39.998543 13.648791 -0.017453
+v 39.744915 13.768089 1.658799
+v 38.726307 12.861294 0.067856
+v 38.587448 15.561260 2.048320
+v 40.733624 14.891819 -0.050134
+v 37.998451 14.786560 1.974623
+v 37.330215 13.500870 0.928443
+v 18.706907 12.304288 -0.242948
+v 18.962500 12.096242 -0.254974
+v 21.204460 12.111585 -0.370200
+v 21.125000 12.045479 -0.374516
+v 32.181358 9.589087 -0.123690
+v 32.135098 9.523197 0.490189
+v 31.547777 9.456938 -0.136025
+v 31.892403 10.633762 1.025578
+v 32.261066 10.951286 -0.054864
+v 32.110790 10.852243 -0.061175
+v 18.435953 1.116942 0.012992
+v 17.629868 1.222931 0.827354
+v 18.291553 0.222824 0.527971
+v 18.512897 0.923130 0.009509
+v 27.721682 3.751637 -0.159306
+v 26.870457 4.347439 0.803739
+v 34.031410 -2.350285 0.885874
+v 34.148144 -1.561226 -0.475388
+v 34.074287 -2.987100 -0.172299
+v 34.270939 -3.231736 -0.166930
+v 43.130035 -3.428064 -0.180596
+v 42.982533 -3.480469 -0.183394
+v 43.418083 -3.511703 0.859317
+v 44.596893 -2.990217 0.310558
+v 43.682625 -4.698522 -0.261883
+v 43.875008 -4.835425 -0.271075
+v 20.082073 -11.083014 0.837898
+v 19.702145 -10.969568 -0.070304
+v 19.777401 -12.264538 -0.203686
+v 46.323753 -18.913883 0.577737
+v 46.789661 -18.889870 -0.304576
+v 45.983665 -20.109085 0.533623
+v 47.174858 -19.949217 0.378974
+v 42.549568 -27.121000 -0.207143
+v 41.444725 -27.766499 -0.151216
+v 41.743057 -27.426262 0.708557
+v 41.378391 -27.859516 -0.147575
+v 41.671894 -30.227133 -0.332495
+v 41.806984 -30.054716 1.443399
+v 41.393837 -29.827698 -0.352000
+v 43.775597 -29.877245 1.633385
+v 44.366413 -28.884956 1.225731
+v 42.320679 -28.133575 1.863430
+v 44.603844 -28.423319 -0.344753
+v 44.609528 -28.330875 -0.335427
+v 44.539631 -29.235840 -0.316480
+v 44.321815 -29.965624 -0.293985
+v 46.054249 -31.125452 0.823668
+v 47.965046 -30.436071 0.822625
+v 47.149773 -30.340658 -0.218899
+v 46.660995 -30.515299 -0.223181
+v 27.314941 -33.081356 1.246216
+v 27.003748 -33.903790 -0.690444
+v 27.965378 -34.709335 1.379907
+v 29.230011 -32.651249 1.643683
+v 28.783419 -34.097126 1.852955
+v 30.368885 -32.799519 0.784088
+v 29.897020 -32.633278 -0.962237
+v 29.643644 -32.466675 -0.938775
+v 29.782791 -34.708160 0.919059
+v 30.567463 -33.907249 -0.049981
+v 38.068298 -34.150742 -0.039860
+v 37.571808 -34.536900 -0.480576
+v 39.008671 -34.976223 0.753146
+v 46.041786 -31.411427 -0.203142
+v 47.545856 -31.379971 1.880871
+v 45.998581 -32.445641 1.142334
+v 46.978729 -33.908123 0.447039
+v 47.215778 -33.357452 1.379933
+v 48.285572 -33.559887 -0.072173
+v 48.532879 -33.446766 -0.070940
+v 48.696022 -33.320419 -0.072079
+v 48.890747 -32.110695 1.302745
+v 48.552662 -30.986158 0.000895
+v 48.992233 -31.675198 -0.004271
+v 49.082096 -32.614807 -0.090116
+v -18.679218 -36.662727 0.506768
+v -19.083967 -36.786472 -0.321903
+v -17.982113 -36.769115 -0.321178
+v -18.028763 -37.598225 0.649215
+v -18.143061 -37.760651 -0.296994
+v -18.140587 -37.744869 -0.298345
+v -18.139719 -36.564644 -0.331402
+v -12.058383 -38.788410 1.290471
+v -6.238769 -35.565910 -0.171804
+v -6.201318 -35.686127 0.704680
+v -4.674218 -36.056065 0.101772
+v -5.172754 -35.885166 -0.103389
+v -5.525721 -35.778767 -0.131593
+v -5.214892 -36.829876 0.549732
+v -5.598798 -36.950386 -0.201871
+v -5.002488 -36.327393 -0.121242
+v -6.488072 -36.731468 0.404894
+v 4.573635 -34.863274 0.464942
+v 12.931271 -35.450726 0.226458
+v 12.620256 -35.140785 0.894004
+v 12.193023 -35.003902 0.147731
+v -21.374964 -40.311230 -0.140813
+v -21.594318 -40.087002 0.688473
+v -21.972900 -41.379131 0.696003
+v -21.493977 -40.717777 -0.138742
+v -22.972874 -40.137852 0.174900
+v -18.405159 -42.454681 -0.268598
+v -18.875999 -42.973698 -0.253711
+v -18.630234 -42.593571 0.730427
+v -17.927582 -41.884621 0.112448
+v -17.779564 -43.002087 1.651425
+v -16.675896 -42.550545 1.290811
+v -13.592040 -39.793617 -0.098886
+v -13.708773 -39.961323 -0.112789
+v -13.718469 -39.980968 1.188225
+v -12.422700 -38.113308 -0.049684
+v -12.368197 -41.952675 -0.120041
+v -12.654885 -41.495281 1.370793
+v -13.514888 -41.374531 -0.096255
+v -13.340425 -41.474304 -0.155934
+v -11.374585 -41.688568 1.004297
+v -10.357015 -41.315079 0.363646
+v -11.362285 -40.175903 1.948316
+v -10.630906 -40.040359 -0.029017
+v -10.446838 -40.941662 -0.056265
+v -2.644303 -42.110897 -0.033628
+v -2.753721 -42.897350 0.539544
+v -40.241936 -43.000561 -0.109638
+v -39.553658 -43.006088 1.259386
+v -39.569824 -44.645519 2.198484
+v -38.273960 -44.022755 1.671069
+v -40.889641 -43.962837 0.911682
+v -40.536865 -45.676868 1.125974
+v -37.957424 -45.563210 1.266057
+v -37.508629 -44.908066 0.008246
+v -37.994678 -45.950954 -0.094562
+v -37.997776 -43.090199 0.693554
+v -25.149879 -46.194633 0.395822
+v -25.619184 -45.873360 -0.149310
+v -26.000000 -45.582954 -0.158068
+v -27.391598 -45.622803 1.612063
+v -25.903980 -45.843948 1.354384
+v -26.404850 -47.096458 2.032061
+v -18.872890 -44.497753 1.093208
+v -18.964462 -43.518593 -0.251763
+v -16.259462 -42.391491 -0.340816
+v -15.784360 -43.678230 0.565201
+v -16.006569 -43.689102 -0.351807
+v -16.343571 -42.250435 -0.337713
+v -16.873600 -46.150909 -0.385709
+v -16.820885 -45.963379 0.545236
+v -18.569038 -45.174576 0.669686
+v -16.945850 -46.118752 -0.382532
+v -16.574566 -43.871021 1.676147
+v -16.017551 -45.963005 0.398889
+v -3.194802 -43.526276 -0.018712
+v -48.452091 -48.741486 -0.330771
+v -47.517567 -48.730709 0.982044
+v -46.866959 -48.946350 -0.359005
+v -48.065865 -48.792675 -0.350494
+v -46.455044 -49.837284 0.920005
+v -46.663601 -49.156265 -0.376175
+v -48.046017 -49.374760 1.549513
+v -48.512562 -48.783920 -0.330030
+v -48.701412 -49.005302 -0.331851
+v -47.529148 -50.802299 1.379947
+v -48.460667 -51.079056 -0.383540
+v -48.700695 -50.885696 0.672163
+v 13.580340 -34.176220 -0.006500
+v 13.641071 -34.058861 0.418913
+v 13.581631 -35.259220 0.424235
+v 13.558537 -34.992455 0.141493
+v 18.071030 -35.439938 0.560794
+v 19.454317 -34.904388 0.900659
+v 19.407690 -35.079285 0.178723
+v 18.260489 -35.442192 0.264872
+v 18.664841 -37.923687 1.284690
+v 18.375635 -37.964046 0.361321
+v 19.504669 -38.290291 0.304611
+v 17.711092 -36.450787 0.340423
+v 17.620724 -36.999352 0.368570
+v 18.748833 -36.564503 1.833288
+v 20.532759 -35.667637 1.350565
+v 20.597322 -37.387486 1.302716
+v 29.932795 -34.549103 -1.015944
+v 32.599476 -38.357376 0.571684
+v 31.388969 -37.935120 0.967853
+v 31.824699 -39.357826 1.852738
+v 38.236427 -35.816505 0.673408
+v 38.209290 -36.056583 -0.426303
+v 38.308167 -35.952763 -0.435719
+v 30.730968 -41.538452 0.198911
+v 30.005936 -40.912418 1.312001
+v 29.087740 -40.074581 0.157172
+v 29.704302 -40.625004 0.238995
+v 32.438774 -41.170731 0.692250
+v 31.463833 -41.530617 0.157039
+v 32.477165 -41.070686 0.090119
+v 29.860710 -38.317711 -0.260006
+v 29.067047 -39.980919 0.138456
+v 30.030167 -38.867222 1.544553
+v 31.009272 -41.619118 0.184691
+v 31.237022 -41.257980 1.278259
+v 32.474281 -40.213951 1.368560
+v 32.660870 -38.648258 -0.349179
+v 33.072006 -39.659946 -0.157686
+v 32.672359 -40.625008 0.070053
+v 33.056667 -39.744007 -0.138957
+v 33.072941 -39.693943 -0.150517
+v 40.160084 -42.027550 0.111893
+v 40.084030 -41.311554 0.871911
+v 39.525032 -41.480473 0.012617
+v 41.245377 -41.346214 0.505037
+v -13.016768 44.276962 -0.038542
+v 4.023682 21.826681 0.008383
+v -16.150404 19.178896 -0.616559
+v -16.079121 18.175919 -0.498131
+v -16.404995 18.543583 0.271076
+v -12.866178 19.465038 -0.262440
+v -0.669740 18.213842 0.104562
+v -0.470713 18.206329 0.082070
+v 1.724227 20.278450 0.103911
+v 1.726621 20.237085 0.098536
+v 1.713832 20.256279 0.115538
+v 4.228837 19.070076 -0.279918
+v -31.667349 12.563521 -0.218593
+v -30.249460 12.611813 -0.370423
+v -30.654913 12.585475 -0.391565
+v 2.734310 14.446919 -0.484257
+v 3.539941 14.580626 -0.410864
+v 11.738733 14.987214 0.012838
+v -32.631218 11.216563 -0.358864
+v -32.660198 10.688362 -0.342846
+v -32.393902 9.991748 -0.309141
+v -32.555950 11.374999 -0.360918
+v -30.154226 9.298780 -0.223736
+v -30.253315 9.091179 0.414187
+v -31.221762 9.219121 -0.267959
+v -30.875000 9.247074 -0.260258
+v 8.333844 10.010232 -0.054756
+v 8.016871 11.093180 -0.021059
+v 1.508900 1.218783 0.067426
+v -40.487495 -10.206208 0.012150
+v -4.432814 -7.794209 -0.209223
+v -3.403609 -9.490414 0.226715
+v 1.000458 -8.568749 -0.108581
+v -43.438145 -11.702641 0.104487
+v -43.697247 -10.640081 0.092328
+v -43.516369 -11.375000 0.096088
+v -11.910935 -12.020673 -0.252637
+v 7.772232 -14.459226 -0.469528
+v 6.613532 -13.919527 -0.477792
+v -44.411327 -21.671503 0.047345
+v -34.780396 -19.542805 -0.366669
+v -47.677151 -24.864830 -0.012209
+v -42.473713 -23.593731 -0.036268
+v -43.195637 -24.701811 -0.087138
+v -43.182518 -24.843208 0.186990
+v -43.381866 -24.898439 -0.095018
+v -44.376442 -25.197130 -0.092947
+v -45.492306 -24.723452 -0.043979
+v -44.735012 -25.044968 -0.076931
+v -7.436517 -25.134005 0.113891
+v -7.266963 -25.172323 0.121283
+v -39.722244 -30.947529 -0.612057
+v -39.846760 -30.165279 -0.532057
+v -36.704227 -29.710764 -0.475036
+v -7.001129 -27.453526 0.070176
+v -7.470443 -27.343296 -0.004666
+v -8.261710 -27.246807 -0.111582
+v -8.302003 -27.401817 0.749056
+v -8.401482 -26.927111 -0.144815
+v -2.412062 -29.421333 0.376408
+v -2.508958 -30.509924 0.488841
+v -19.143915 -31.677271 0.012337
+v 2.278814 -34.083141 0.159219
+v 5.533544 -33.489056 -0.004893
+v 39.184929 48.076557 -0.200138
+v 33.610889 47.387184 1.040613
+v 34.035034 49.094849 -0.187345
+v 33.648170 47.424450 -0.217015
+v 37.960049 47.710014 -0.399307
+v 38.155083 47.775414 -0.406510
+v 46.824169 48.146248 -0.522680
+v 47.371593 48.082832 -0.535703
+v 47.189705 48.082634 -0.549517
+v 47.773403 47.176880 -0.535762
+v 47.559483 47.645622 -0.550432
+v 47.810574 46.052559 -0.459802
+v 46.382923 45.452091 -0.295228
+v 47.313454 45.566418 -0.382993
+v 30.934217 41.480782 -0.150768
+v 30.875000 41.466270 -0.144698
+v 31.176460 41.313351 -0.183698
+v 16.370142 38.684250 0.135159
+v 17.020794 39.630196 0.241553
+v 16.596291 39.000004 0.130530
+v 16.515354 38.240856 0.140820
+v 17.287628 39.874645 0.284433
+v 38.255322 39.042439 0.269604
+v 38.355095 38.959480 0.291229
+v 16.887205 33.762730 0.158432
+v 33.202297 33.424503 0.351926
+v 12.185062 29.197012 0.046902
+v 14.050189 29.111502 0.017268
+v 13.644570 29.129177 0.010920
+v 18.810608 32.078606 0.171047
+v 18.883280 31.919624 0.444404
+v 18.475687 31.324060 0.147229
+v 41.841717 21.233217 -0.865110
+v 44.883797 21.070179 -0.727584
+v 37.943222 16.393627 -0.565872
+v 42.070019 20.450003 -0.927632
+v 42.895699 19.837872 -0.821669
+v 42.023376 20.618700 -0.941599
+v 43.769009 19.793682 -0.745496
+v 44.410049 19.843071 -0.694451
+v 44.467716 19.892635 -0.692544
+v 14.974559 14.160714 -0.009271
+v 15.018213 14.427757 -0.002518
+v 13.920957 13.850840 -0.006138
+v 14.620990 13.976867 0.007588
+v 14.252192 13.910472 0.000357
+v 18.712196 14.057281 -0.261493
+v 20.903137 14.572797 -0.388510
+v 20.277733 14.986396 -0.331979
+v 21.125000 14.430118 -0.399343
+v 36.934914 15.038935 -0.373458
+v 36.962650 14.656228 -0.307007
+v 36.725010 14.883663 -0.010844
+v 37.544781 16.099516 -0.531044
+v 40.641788 14.958629 -0.218407
+v 40.631058 14.677586 -0.169482
+v 40.625004 14.985195 -0.221515
+v 37.606384 13.560031 -0.097438
+v 37.522324 13.702007 -0.122344
+v 38.544777 12.868705 0.057377
+v 27.184875 4.694152 -0.105369
+v 26.858955 3.490157 -0.090375
+v 18.123962 0.160238 0.085988
+v 34.225529 -1.621818 -0.519047
+v 34.667698 -3.182148 -0.151110
+v 44.460014 -3.391099 -0.182977
+v 43.875008 -3.407189 -0.181719
+v 20.191063 -11.517307 -0.510080
+v 21.286873 -11.049013 -0.502580
+v 21.224876 -11.159925 -0.552441
+v 21.125002 -11.225340 -0.566438
+v 20.206629 -12.184557 -0.559341
+v 20.706915 -12.204695 -0.602222
+v 20.715525 -12.531378 0.466954
+v 21.125002 -11.396137 -0.578717
+v 21.417942 -11.701515 0.436134
+v 20.891321 -11.989442 -0.602019
+v 12.939177 -34.109966 -0.016552
+v 27.063993 -33.839905 -0.725249
+v 27.051798 -33.895313 -0.726103
+v 27.862967 -34.799923 -0.715256
+v 27.331470 -34.125000 -0.770450
+v 29.273478 -32.400288 -0.936938
+v 29.957598 -32.825035 -0.995688
+v 30.091805 -34.387302 -1.064569
+v 30.042013 -34.125004 -1.105391
+v 29.961933 -33.141701 -1.053600
+v 38.414276 -34.420887 -0.426840
+v 46.965801 -33.697479 -0.096335
+v -6.225410 -36.578892 -0.165415
+v -6.154101 -36.888397 -0.175153
+v -6.347136 -35.995800 -0.171432
+v -6.327345 -36.110546 -0.162207
+v -4.825863 -36.040176 -0.080113
+v -4.972845 -36.275360 -0.116478
+v 4.662270 -34.689415 0.145105
+v 4.347963 -34.857304 0.167565
+v -22.904392 -40.071327 -0.071598
+v -22.792749 -40.543175 -0.080193
+v -17.807106 -42.103466 -0.288093
+v -16.686073 -42.150307 -0.325976
+v -13.512487 -41.337723 -0.160074
+v -10.507712 -41.058651 -0.055805
+v -10.700027 -41.390858 -0.083148
+v -13.525084 -41.295921 -0.159023
+v -25.263214 -46.433521 -0.134013
+v -18.741356 -44.340755 -0.260846
+v -16.314568 -44.276928 -0.342540
+v -15.902347 -45.434086 -0.370847
+v -15.993184 -45.157959 -0.355048
+v -18.593296 -44.743305 -0.277945
+v -15.928147 -45.682285 -0.382720
+v -16.833096 -46.149582 -0.386520
+v -28.557859 -46.786381 0.129872
+v -28.571541 -46.977238 0.135954
+v -28.600441 -46.950928 0.210402
+v -25.484310 -47.861172 -0.099779
+v -25.463593 -48.152668 0.369270
+v -26.051828 -48.640888 -0.077511
+v -25.999998 -48.566246 -0.084584
+v -46.696632 -50.504211 -0.491608
+v -47.011730 -51.193859 -0.509548
+v 20.099186 -35.199238 0.124692
+v 19.753048 -35.137199 0.159656
+v 31.812376 -38.150978 -0.406512
+v 29.998812 -38.234730 -0.285493
+v 38.791473 -34.737297 -0.406190
+v 38.344250 -35.854500 -0.444486
+v 40.530079 -40.580593 -0.005179
+v 41.211094 -41.366543 0.121023
+v 40.685993 -41.861847 0.132812
+v -45.338005 49.286854 -0.049436
+v -12.543975 43.691917 0.637985
+v -12.557268 43.798141 0.090248
+v 1.143944 45.228344 0.427795
+v 1.203551 44.644482 0.475507
+v 5.369804 40.956085 -0.139996
+v 5.360238 40.963581 -0.138055
+v 6.074288 41.914703 0.114876
+v -12.632571 37.573952 0.492413
+v -12.449850 36.564373 0.482800
+v -12.498304 36.832096 0.485349
+v -12.367048 36.730316 0.751040
+v -12.367330 36.541954 0.668014
+v -11.343286 39.241623 0.518160
+v -10.007461 36.363708 0.473186
+v -12.079214 36.342861 0.482740
+v -12.367261 36.515015 0.482787
+v -11.163072 35.997784 0.484748
+v 11.284101 29.152710 0.816255
+v 12.427355 28.394527 1.766442
+v 11.238946 29.181847 0.072193
+v 12.043346 26.269806 0.147904
+v -20.091175 22.122053 -0.150402
+v 0.361805 21.361115 0.127826
+v 1.379067 20.429022 0.158545
+v 1.037895 20.733601 0.233432
+v 3.470852 21.814714 0.059659
+v 2.577262 21.494028 0.136848
+v 2.806662 21.016094 1.461310
+v 2.329330 21.125004 0.152974
+v -15.753514 18.897247 1.523173
+v -14.312183 16.939884 -0.155085
+v -2.408523 20.071741 0.134419
+v -1.765247 18.864838 0.304297
+v 1.468174 20.097986 0.107665
+v 0.675946 19.823475 1.621930
+v 1.493986 20.247559 0.123498
+v 4.596481 19.766037 -0.227489
+v -42.258663 13.512590 0.205824
+v -29.911324 12.463062 -0.336868
+v -6.509511 14.003248 0.927661
+v -6.462943 12.800079 0.976568
+v -3.708615 14.578543 0.657858
+v -4.250514 14.873464 0.765750
+v -3.672309 13.452271 0.720749
+v -3.735248 13.284938 0.746055
+v -5.267449 12.215103 0.947168
+v -5.451294 12.233995 0.949772
+v 3.696082 14.757130 -0.398987
+v 11.814435 14.675370 0.015209
+v -31.911926 9.425551 -0.287130
+v -32.331280 9.918720 -0.304174
+v -30.777225 10.445789 1.978740
+v -28.862879 10.995473 -0.187240
+v -29.590944 12.017027 -0.276619
+v -28.874352 10.874836 -0.180659
+v -28.855438 10.902409 -0.181499
+v -29.436317 10.588020 1.098562
+v -28.982122 10.714340 -0.183879
+v -6.152813 12.634911 0.995066
+v -16.409685 6.611679 0.487100
+v 2.603675 1.909917 0.041066
+v 1.725348 0.966259 0.097122
+v -3.067156 -6.046673 -0.167122
+v -2.275036 -6.102049 0.450775
+v -1.793735 -6.600407 0.190407
+v -1.925009 -6.500000 0.144575
+v -2.567445 -6.002648 -0.060061
+v -1.762152 -6.705728 0.214617
+v -1.371201 -6.838398 0.165701
+v -43.323433 -9.673471 0.073003
+v -40.810692 -9.661939 0.013813
+v -3.633256 -9.512385 0.249671
+v -2.870720 -8.972875 0.200433
+v -5.654514 -12.721002 0.299965
+v -4.556156 -13.128812 0.300655
+v -5.194858 -12.867671 0.335441
+v 6.439098 -14.156654 -0.521611
+v -34.469727 -19.890305 -0.417919
+v -13.164388 -21.082628 0.717230
+v -8.692956 -22.466024 0.655060
+v -48.346096 -25.490231 0.889592
+v -48.488537 -25.501184 -0.034983
+v -45.881683 -24.403324 -0.017869
+v -8.287076 -25.232704 0.004086
+v -8.590857 -25.613623 -0.121539
+v -37.262253 -28.783501 -0.381551
+v -36.655758 -29.583809 -0.461828
+v -36.650024 -29.601254 -0.463602
+v -7.870111 -27.292427 -0.070213
+v -19.095545 -31.691086 0.019925
+v -1.950826 -31.249840 0.474784
+v 3.850390 -31.440626 -0.236497
+v 2.746077 -31.665813 -0.081392
+v 26.713139 48.873615 0.129468
+v 26.663904 49.288715 0.115499
+v 34.068810 49.161190 -0.188198
+v 34.436478 48.732445 1.404270
+v 45.284725 47.794567 -0.366041
+v 19.999683 46.858234 0.189885
+v 19.911320 46.833469 0.191971
+v 23.623144 48.152020 0.100459
+v 25.312992 46.503929 0.090128
+v 44.520042 47.841152 -0.303811
+v 43.483414 47.496689 -0.190756
+v 43.241913 44.719467 0.025430
+v 47.693718 45.660877 -0.422219
+v 31.174318 40.695396 -0.205530
+v 30.875000 40.587368 -0.176087
+v 18.530443 37.547722 0.146423
+v 17.868830 37.437122 0.149102
+v 16.959660 37.579330 0.148852
+v 32.354935 36.852634 0.053379
+v 34.711803 35.650879 0.321277
+v 38.650440 38.773243 0.342792
+v 39.401485 38.312565 0.526941
+v 39.749878 38.349842 0.565189
+v 40.992149 38.538349 0.598917
+v 18.473774 33.133930 0.185886
+v 17.913847 33.576000 0.182494
+v 17.422607 33.734055 0.177050
+v 17.119400 33.747200 0.172303
+v 17.790186 33.616104 0.180515
+v 31.001869 35.132717 0.204654
+v 32.183201 33.661968 0.332051
+v 34.266129 34.299805 0.334259
+v 34.660641 35.252930 0.332560
+v 33.851185 33.860134 0.313353
+v 16.948961 30.677925 0.100608
+v 16.981815 30.606491 1.056273
+v 15.834099 31.309002 0.096230
+v 17.308498 30.725988 0.107664
+v 17.939318 30.810005 0.123932
+v 14.985595 28.097620 0.010073
+v 14.769190 27.240046 0.044245
+v 19.815985 14.984978 1.015923
+v 19.986647 15.060702 -0.309940
+v 40.625004 14.667965 -0.167323
+v 38.637653 12.865512 0.063705
+v 32.271248 10.794315 -0.062620
+v 17.663107 1.381200 0.018047
+v 16.922560 1.038667 0.012294
+v 27.700655 3.780398 -0.149229
+v 18.389284 0.696509 0.005536
+v 48.117031 -30.634987 -0.062763
+v 47.556198 -30.472982 -0.204867
+v 49.052246 -32.249538 -0.104561
+v -18.760771 -36.711227 -0.344997
+v -6.288369 -35.755672 -0.194469
+v -5.603951 -36.949966 -0.202360
+v -22.236431 -41.400955 -0.111376
+v -22.374329 -39.999950 -0.094382
+v -11.387417 -41.718971 -0.103868
+v -12.052925 -41.973213 -0.118244
+v -12.263629 -41.957947 -0.114213
+v -38.263557 -43.055130 -0.139236
+v -38.597786 -42.901711 -0.206873
+v -40.605049 -43.305771 -0.096307
+v -41.195107 -44.371944 -0.091030
+v -41.140663 -44.745636 -0.105082
+v -40.463200 -45.957787 -0.181150
+v -37.612713 -43.917164 -0.009504
+v -28.103594 -45.744953 0.058347
+v -18.689255 -44.483944 -0.262875
+v -2.997148 -43.521599 0.027436
+v -26.104700 -48.646763 -0.072028
+v -26.072191 -48.644184 -0.075374
+v -47.525517 -51.292217 -0.460738
+v -47.303146 -51.317360 -0.480445
+v -47.064705 -51.217648 -0.508276
+v 13.459702 -35.386745 0.213252
+v 18.038418 -35.525192 0.282072
+v 20.689116 -35.571686 0.079290
+v 17.674852 -37.178555 0.372570
+v 21.359343 -36.813839 0.071272
+v 20.182089 -38.135555 0.256187
+v 20.431787 -37.852154 0.229039
+v 21.359489 -36.803589 0.070711
+v 32.250225 -38.295490 -0.400738
+v -12.366836 36.755501 0.485349
+v 42.139812 33.591511 0.469569
+v 14.252414 13.972651 0.000409
+v 14.707758 14.243871 0.009481
+v 14.738463 14.262160 0.010093
+v 14.752579 14.270516 0.009456
+v 14.624116 13.977437 0.007400
+v 14.645535 13.981342 0.006118
+v 14.661258 13.997806 0.005667
+v 14.700274 14.169413 0.009278
+v 42.606083 34.061588 0.422771
+v 42.554100 34.097633 0.426286
+v 42.502697 34.157497 0.429297
+v -11.375002 -40.625008 -0.005980
+v -5.687500 -36.156250 -0.182069
+v -11.375000 -21.125004 0.721835
+v -45.500004 -22.750004 0.073018
+v -4.875000 -11.375002 0.272932
+v -30.875000 11.374998 -0.291476
+v -4.875001 13.000000 1.030346
+vn -0.4551 -0.7900 -0.4109
+vn 0.4950 -0.7430 -0.4505
+vn -0.7365 0.6470 -0.1977
+vn 0.2964 -0.5583 -0.7749
+vn -0.0174 -0.9915 -0.1286
+vn -0.1752 0.1249 -0.9766
+vn -0.9711 0.1523 -0.1836
+vn -0.8397 -0.4103 -0.3558
+vn -0.0852 -0.6607 -0.7458
+vn 0.1114 -0.6224 -0.7747
+vn -0.5498 0.7887 -0.2750
+vn -0.1456 0.8735 -0.4645
+vn 0.5637 -0.7523 -0.3410
+vn -0.8674 -0.4604 -0.1891
+vn -0.7836 -0.0588 -0.6184
+vn 0.6699 -0.6569 -0.3459
+vn -0.9332 0.1344 -0.3331
+vn 0.2850 0.6221 -0.7292
+vn -0.2917 0.8228 -0.4878
+vn 0.8522 0.3980 -0.3397
+vn -0.4793 0.6239 -0.6172
+vn 0.4624 0.7874 -0.4075
+vn 0.3486 0.8414 -0.4130
+vn 0.4161 0.8541 -0.3120
+vn 0.0302 -0.7753 -0.6309
+vn 0.8629 -0.3149 -0.3952
+vn -0.3849 0.1148 -0.9158
+vn 0.6483 -0.7303 -0.2155
+vn 0.9104 -0.1694 -0.3774
+vn -0.3841 -0.5791 -0.7191
+vn 0.3169 0.9004 -0.2980
+vn 0.8612 0.4674 -0.1995
+vn -0.7789 0.4792 -0.4046
+vn 0.4040 -0.5649 -0.7195
+vn 0.9378 -0.3297 -0.1089
+vn -0.8594 0.1566 -0.4867
+vn 0.4771 -0.7703 -0.4230
+vn -0.9908 0.0508 -0.1255
+vn 0.7202 0.4658 -0.5142
+vn -0.6001 -0.5126 -0.6141
+vn -0.2579 0.9249 -0.2793
+vn -0.8416 0.0387 -0.5387
+vn -0.4158 0.9022 -0.1146
+vn -0.9067 0.0701 -0.4159
+vn 0.6915 0.5723 -0.4407
+vn -0.4403 0.8868 -0.1401
+vn 0.5245 0.8044 -0.2789
+vn -0.6937 0.6558 -0.2978
+vn 0.8289 0.5063 -0.2380
+vn -0.8906 -0.4151 -0.1859
+vn -0.0757 -0.8083 -0.5839
+vn 0.6707 0.1545 -0.7254
+vn 0.7543 -0.0917 -0.6501
+vn -0.1304 -0.5299 -0.8380
+vn 0.8219 -0.4620 -0.3331
+vn -0.4522 -0.8806 -0.1414
+vn -0.9075 0.4134 -0.0745
+vn -0.0881 0.9876 -0.1296
+vn 0.4326 0.8344 -0.3416
+vn 0.9624 -0.1579 -0.2211
+vn 0.8415 -0.3132 -0.4402
+vn -0.6466 -0.6909 -0.3235
+vn -0.0080 -0.8764 -0.4816
+vn 0.8314 -0.5163 -0.2055
+vn -0.5700 0.6381 -0.5175
+vn -0.8234 -0.3837 -0.4182
+vn -0.9102 0.2795 -0.3058
+vn -0.5000 -0.6861 -0.5284
+vn -0.0935 -0.8886 -0.4491
+vn 0.8218 0.4575 -0.3397
+vn 0.0261 -0.9786 -0.2042
+vn -0.3811 0.8686 -0.3167
+vn 0.3443 0.8928 -0.2905
+vn 0.7745 0.3836 -0.5029
+vn 0.3421 0.8931 -0.2921
+vn 0.2741 0.9391 -0.2072
+vn -0.5324 0.7706 -0.3502
+vn -0.8604 -0.0293 -0.5087
+vn 0.9804 0.1501 -0.1273
+vn 0.4838 0.7512 -0.4491
+vn -0.0898 -0.9041 -0.4178
+vn -0.9589 0.1008 -0.2653
+vn -0.7916 0.5696 -0.2214
+vn 0.0375 -0.8279 -0.5597
+vn -0.5960 -0.5362 -0.5977
+vn -0.4437 -0.2478 -0.8612
+vn 0.9245 0.3311 -0.1888
+vn 0.4071 -0.7563 -0.5121
+vn 0.9216 -0.2632 -0.2855
+vn -0.7917 -0.0590 -0.6081
+vn -0.8907 -0.0203 -0.4542
+vn 0.5749 0.8060 -0.1408
+vn -0.1050 -0.9865 -0.1256
+vn 0.2278 -0.9539 -0.1954
+vn -0.3905 0.8714 -0.2970
+vn -0.7364 -0.3976 -0.5475
+vn -0.5347 -0.5690 -0.6247
+vn 0.1528 0.7056 -0.6920
+vn 0.4436 0.7871 -0.4287
+vn 0.0336 0.9881 -0.1500
+vn -0.1355 0.9172 -0.3747
+vn -0.0574 -0.9817 -0.1818
+vn -0.3922 0.8025 -0.4496
+vn -0.8023 -0.0820 -0.5913
+vn 0.8256 -0.0560 -0.5614
+vn -0.7376 -0.6533 -0.1707
+vn -0.8444 -0.2939 -0.4479
+vn -0.0217 -0.8684 -0.4954
+vn -0.7505 -0.4500 -0.4840
+vn -0.5852 0.7570 -0.2906
+vn -0.3948 0.6687 0.6300
+vn -0.8784 0.4595 0.1317
+vn -0.2363 0.9710 -0.0362
+vn -0.5217 -0.0541 0.8514
+vn -0.0211 -0.8686 0.4950
+vn -0.6991 -0.6740 -0.2386
+vn -0.5686 0.4228 0.7056
+vn -0.6713 0.7393 0.0522
+vn 0.1153 0.7327 0.6707
+vn -0.1703 -0.1190 0.9782
+vn 0.4293 0.7790 0.4570
+vn 0.8378 0.0861 0.5392
+vn 0.2203 0.8013 0.5563
+vn -0.8748 -0.0825 0.4775
+vn 0.8227 -0.5633 -0.0769
+vn -0.7725 -0.3676 0.5177
+vn -0.4596 -0.7656 0.4502
+vn -0.0540 -0.8504 0.5234
+vn -0.7270 0.6717 0.1425
+vn 0.7027 -0.2286 0.6737
+vn 0.7724 0.6275 -0.0984
+vn -0.6983 -0.6918 -0.1839
+vn 0.5875 -0.4947 0.6404
+vn 0.1710 0.9808 -0.0939
+vn -0.7013 0.7084 0.0796
+vn -0.1765 0.9624 0.2067
+vn 0.8742 0.3711 0.3133
+vn 0.5646 0.4687 0.6794
+vn -0.5652 -0.8234 -0.0503
+vn 0.6658 0.7432 -0.0663
+vn 0.8213 0.4599 0.3375
+vn 0.9531 0.1056 0.2837
+vn -0.0737 0.7778 0.6242
+vn 0.7122 -0.1822 0.6779
+vn 0.3468 -0.0741 0.9350
+vn 0.5011 -0.8654 -0.0089
+vn -0.3165 -0.7420 0.5909
+vn -0.3290 -0.9306 0.1603
+vn -0.5414 0.8389 -0.0562
+vn -0.6101 -0.7111 0.3494
+vn -0.5922 -0.2420 0.7686
+vn 0.5931 -0.0366 0.8043
+vn -0.3979 0.8497 0.3459
+vn 0.2136 0.8561 0.4706
+vn 0.5168 -0.6351 0.5741
+vn -0.3170 0.1088 0.9422
+vn 0.5155 0.8058 0.2915
+vn -0.9153 0.3172 -0.2482
+vn -0.3628 -0.5064 0.7823
+vn -0.5037 0.8003 0.3254
+vn -0.8335 0.5409 0.1128
+vn -0.7637 -0.0170 0.6453
+vn 0.0813 0.7307 0.6779
+vn -0.8611 -0.4962 -0.1111
+vn -0.8551 0.4143 0.3117
+vn -0.8581 -0.3568 0.3692
+vn -0.1827 0.9817 -0.0527
+vn -0.2655 -0.9401 -0.2139
+vn 0.5039 0.8177 0.2784
+vn -0.5237 0.6567 0.5426
+vn 0.8274 -0.1448 0.5426
+vn -0.5142 -0.4802 0.7106
+vn 0.5199 -0.7865 0.3334
+vn -0.0763 -0.9747 0.2103
+vn 0.5227 0.1040 0.8462
+vn -0.2852 -0.2693 0.9199
+vn 0.0477 -0.2804 0.9587
+vn -0.2854 0.8274 0.4838
+vn 0.5009 -0.4717 0.7257
+vn -0.9192 -0.3683 -0.1391
+vn -0.0861 0.9919 0.0933
+vn 0.0364 0.6734 0.7384
+vn 0.1440 -0.6865 0.7127
+vn -0.4915 0.8685 -0.0646
+vn -0.7080 -0.7062 0.0086
+vn 0.5449 -0.8286 0.1285
+vn 0.1699 0.9630 -0.2093
+vn 0.1765 0.9731 0.1480
+vn -0.0056 0.4618 0.8870
+vn -0.7989 0.5872 -0.1304
+vn -0.5194 -0.8117 0.2670
+vn -0.3794 0.1582 0.9116
+vn 0.1152 -0.6576 0.7445
+vn -0.0041 0.8808 0.4735
+vn 0.4394 0.5557 0.7058
+vn -0.4491 0.2352 0.8619
+vn 0.2199 0.3044 0.9268
+vn 0.5055 -0.8315 0.2305
+vn 0.5632 0.6038 0.5641
+vn 0.1338 0.6942 0.7072
+vn -0.4456 -0.6849 0.5765
+vn -0.4073 -0.7558 0.5127
+vn -0.1973 0.0965 0.9756
+vn 0.7141 -0.2615 0.6494
+vn -0.4097 -0.8461 0.3410
+vn -0.4516 -0.2620 0.8529
+vn 0.8953 -0.4389 0.0757
+vn -0.2459 -0.9089 0.3369
+vn 0.6552 -0.3711 0.6580
+vn -0.0711 -0.2300 0.9706
+vn 0.6765 0.7291 -0.1037
+vn -0.7464 -0.4326 0.5057
+vn -0.1675 -0.9858 0.0113
+vn 0.6730 -0.7248 0.1476
+vn -0.4065 -0.0308 0.9131
+vn 0.6662 -0.1362 0.7332
+vn -0.9622 -0.2546 0.0966
+vn 0.5423 -0.7920 0.2805
+vn 0.9258 -0.0204 0.3776
+vn 0.7214 0.6913 0.0400
+vn 0.1105 0.7458 0.6569
+vn 0.1706 -0.6872 0.7061
+vn 0.1766 -0.6860 0.7058
+vn 0.1806 -0.6825 0.7082
+vn -0.5893 0.7976 0.1289
+vn 0.0417 0.6911 0.7215
+vn 0.0152 0.7198 0.6940
+vn -0.1597 0.6211 0.7673
+vn -0.2231 0.9518 0.2106
+vn -0.5731 0.7751 0.2659
+vn -0.9978 -0.0594 0.0296
+vn 0.2156 0.2977 0.9300
+vn -0.0054 -0.4954 0.8686
+vn -0.4136 0.6309 0.6564
+vn -0.1763 -0.0598 0.9825
+vn 0.8158 0.5632 -0.1311
+vn -0.0225 0.8375 0.5460
+vn 0.6108 0.3886 0.6899
+vn 0.6145 0.0237 0.7886
+vn 0.0382 -0.8692 0.4929
+vn -0.6408 0.7510 0.1590
+vn 0.8264 0.5625 0.0267
+vn -0.6087 -0.7749 0.1701
+vn 0.0097 -0.0875 0.9961
+vn 0.4632 -0.7656 0.4464
+vn 0.8836 0.3080 0.3527
+vn 0.2325 -0.5798 0.7809
+vn -0.1558 -0.0775 0.9847
+vn 0.1968 -0.3896 0.8997
+vn 0.8769 0.4451 0.1814
+vn -0.6568 0.6531 0.3769
+vn 0.6203 -0.7843 0.0026
+vn -0.2559 -0.8559 0.4493
+vn -0.4040 -0.8770 -0.2602
+vn 0.0076 0.3377 0.9412
+vn 0.9682 0.2114 0.1340
+vn 0.6237 -0.1501 0.7671
+vn -0.4689 0.1096 0.8764
+vn 0.1352 0.8707 0.4728
+vn 0.4224 -0.1060 0.9002
+vn -0.7887 -0.5667 -0.2385
+vn 0.7595 -0.6492 0.0418
+vn -0.0987 0.8556 0.5082
+vn -0.7337 0.1157 0.6696
+vn 0.0700 0.6329 0.7710
+vn 0.2794 -0.0181 0.9600
+vn -0.1361 -0.9889 -0.0590
+vn -0.1979 -0.6440 0.7390
+vn 0.1711 -0.9163 0.3622
+vn -0.8066 0.5051 0.3071
+vn 0.0501 0.6485 0.7596
+vn -0.8195 0.3765 0.4321
+vn 0.8782 0.4654 0.1102
+vn 0.2709 -0.8959 0.3520
+vn -0.9089 0.3612 -0.2083
+vn 0.1104 0.9841 0.1395
+vn 0.7607 0.6104 0.2207
+vn -0.9701 -0.1344 0.2022
+vn -0.2897 -0.5619 0.7748
+vn 0.3394 -0.0791 0.9373
+vn 0.8150 0.5748 0.0741
+vn 0.7665 0.5454 0.3391
+vn -0.8340 0.5232 -0.1755
+vn -0.8196 0.5626 0.1080
+vn -0.8325 0.1674 0.5282
+vn 0.1068 0.9859 0.1290
+vn -0.0082 0.9754 0.2203
+vn 0.0215 0.4414 0.8970
+vn -0.1073 0.9784 0.1769
+vn 0.1568 0.9760 0.1512
+vn -0.5516 0.6049 0.5743
+vn 0.8367 0.1970 0.5111
+vn 0.8681 0.0571 0.4931
+vn -0.4548 0.1882 0.8705
+vn 0.5241 -0.4615 0.7158
+vn -0.1970 0.9704 0.1396
+vn -0.8768 0.4053 -0.2586
+vn -0.6280 -0.7782 0.0056
+vn 0.0403 -0.4904 0.8706
+vn 0.9929 0.0939 0.0728
+vn 0.2424 0.9056 0.3480
+vn 0.2761 -0.9464 0.1676
+vn 0.8780 -0.4557 0.1467
+vn -0.5458 -0.8377 0.0200
+vn 0.5171 -0.8438 -0.1434
+vn -0.1461 0.9889 0.0250
+vn 0.6530 0.7544 0.0674
+vn -0.6949 0.4558 0.5561
+vn -0.2231 -0.4341 0.8728
+vn -0.1588 -0.8890 0.4294
+vn 0.4756 -0.7850 0.3969
+vn 0.6517 -0.3635 0.6657
+vn -0.5693 -0.5855 0.5771
+vn -0.4066 0.4499 0.7952
+vn 0.6278 0.7346 0.2574
+vn 0.3830 -0.9157 0.1214
+vn 0.4560 -0.8768 0.1529
+vn 0.1323 0.2580 0.9570
+vn -0.0782 0.4424 0.8934
+vn 0.0313 -0.3856 0.9222
+vn 0.3717 -0.3972 0.8391
+vn 0.5685 -0.4642 0.6792
+vn 0.3430 0.5445 0.7654
+vn -0.9942 -0.0403 0.0992
+vn -0.2010 -0.0859 0.9758
+vn -0.8708 0.4915 0.0043
+vn 0.1203 0.9844 0.1284
+vn -0.9090 0.3652 0.2010
+vn -0.2641 0.5129 0.8168
+vn 0.4702 0.8278 0.3062
+vn -0.5407 0.2365 0.8073
+vn 0.8646 0.0475 0.5002
+vn 0.3207 -0.2780 0.9055
+vn -0.6600 0.6566 0.3651
+vn 0.4094 0.8200 0.4001
+vn -0.9506 0.2136 0.2252
+vn -0.7998 -0.2404 0.5500
+vn -0.2751 -0.0479 0.9602
+vn 0.2281 -0.5569 0.7986
+vn 0.4439 -0.8950 -0.0428
+vn 0.8323 0.2249 0.5067
+vn -0.9164 0.3831 -0.1160
+vn -0.9436 0.3275 0.0492
+vn -0.3659 0.4486 0.8154
+vn 0.5540 0.5508 0.6242
+vn -0.8193 0.5196 0.2424
+vn 0.6072 -0.7879 -0.1030
+vn -0.0037 0.3631 0.9317
+vn 0.0363 -0.6564 0.7535
+vn 0.0779 -0.7942 0.6026
+vn -0.1566 -0.9787 -0.1331
+vn 0.7016 -0.6927 0.1671
+vn -0.7533 -0.1677 0.6360
+vn -0.0924 0.1748 0.9803
+vn 0.7657 -0.6287 0.1355
+vn 0.1428 -0.9863 0.0824
+vn 0.8107 0.2810 0.5136
+vn -0.6673 0.5653 0.4849
+vn 0.5272 0.7307 0.4338
+vn -0.3240 0.4300 0.8427
+vn -0.2808 -0.1240 0.9517
+vn -0.5320 0.8202 0.2101
+vn 0.3782 0.8333 0.4033
+vn -0.1819 -0.9516 0.2476
+vn -0.9585 -0.2520 0.1332
+vn -0.0418 -0.3154 0.9480
+vn 0.8116 -0.5745 0.1060
+vn 0.7898 -0.4523 0.4142
+vn 0.9901 0.0296 0.1369
+vn 0.0787 -0.9546 0.2874
+vn 0.7341 -0.1619 0.6595
+vn 0.3229 0.3505 0.8791
+vn -0.4003 0.1502 0.9040
+vn 0.2435 -0.7017 0.6696
+vn -0.8307 0.4055 0.3816
+vn -0.0375 0.0453 0.9983
+vn 0.9171 0.1832 0.3542
+vn -0.4444 0.8208 0.3589
+vn 0.3793 0.8383 0.3916
+vn 0.5279 -0.8378 0.1395
+vn -0.3316 0.7863 0.5213
+vn 0.2223 0.8159 0.5337
+vn 0.8098 0.4966 0.3124
+vn -0.7570 -0.1279 0.6407
+vn 0.0854 -0.1585 0.9837
+vn -0.7498 -0.5886 0.3023
+vn -0.6055 -0.7579 0.2427
+vn 0.6294 -0.7653 0.1348
+vn 0.4489 -0.5197 0.7269
+vn 0.2050 -0.9747 -0.0892
+vn -0.5511 0.8325 0.0566
+vn 0.7021 0.2669 0.6602
+vn 0.7151 -0.0973 0.6922
+vn -0.3907 0.8105 0.4363
+vn 0.4382 0.0202 0.8986
+vn -0.7408 -0.5884 0.3241
+vn -0.3329 0.9281 0.1669
+vn -0.8110 -0.4870 0.3242
+vn -0.4449 -0.6654 0.5994
+vn -0.9227 -0.0922 0.3745
+vn -0.0014 0.9996 0.0265
+vn -0.5760 0.7627 0.2940
+vn 0.1255 -0.9904 -0.0574
+vn 0.7425 0.5323 0.4066
+vn 0.1384 -0.0758 0.9875
+vn -0.5039 0.8486 -0.1610
+vn -0.8121 0.5812 0.0518
+vn -0.8178 -0.5636 0.1169
+vn -0.3966 -0.9103 0.1185
+vn 0.8668 -0.3869 0.3146
+vn -0.7118 0.3816 0.5897
+vn 0.3949 0.3565 0.8467
+vn -0.0770 -0.1933 0.9781
+vn 0.3497 0.1703 0.9213
+vn 0.9891 -0.0737 0.1279
+vn 0.9458 -0.2771 0.1693
+vn -0.3200 0.8874 0.3318
+vn -0.9736 0.2195 0.0632
+vn -0.8976 -0.3351 0.2865
+vn -0.2920 0.7379 0.6085
+vn -0.4395 -0.1023 0.8924
+vn -0.2441 0.2123 0.9462
+vn 0.5438 0.8365 -0.0673
+vn 0.8395 -0.2227 0.4957
+vn 0.4014 0.8293 0.3888
+vn 0.6495 -0.0914 0.7548
+vn -0.6424 0.7644 0.0539
+vn -0.2449 0.5119 0.8234
+vn -0.9726 0.2267 -0.0513
+vn -0.2771 0.7690 0.5761
+vn -0.5750 -0.6322 0.5193
+vn 0.3802 -0.8356 0.3966
+vn 0.5257 -0.6742 0.5188
+vn -0.3183 -0.1825 0.9302
+vn 0.8198 0.5212 0.2373
+vn 0.8450 -0.4551 0.2808
+vn 0.5565 0.4982 0.6649
+vn -0.8536 0.3758 0.3608
+vn 0.9826 -0.1617 -0.0909
+vn 0.6746 0.5449 0.4980
+vn 0.2998 0.8758 0.3783
+vn 0.2779 0.9532 0.1189
+vn 0.7141 -0.6498 -0.2606
+vn -0.1281 -0.2408 0.9621
+vn -0.0655 -0.9097 0.4101
+vn -0.5236 -0.8394 0.1458
+vn 0.9119 -0.2654 0.3130
+vn -0.3506 0.1081 0.9303
+vn -0.7397 0.6689 -0.0736
+vn -0.2625 0.7686 0.5834
+vn -0.1326 0.7959 0.5907
+vn -0.8208 0.5712 0.0025
+vn -0.4393 -0.8790 0.1852
+vn -0.5257 0.6890 0.4990
+vn 0.5887 -0.4314 0.6836
+vn -0.2706 0.2982 0.9153
+vn 0.9791 0.2009 -0.0308
+vn 0.5276 0.4512 0.7198
+vn -0.4075 0.8891 0.2085
+vn 0.1141 0.4930 0.8625
+vn -0.7124 -0.0592 0.6993
+vn 0.4321 -0.1452 0.8901
+vn 0.1871 -0.5188 0.8342
+vn 0.8984 -0.4283 0.0975
+vn 0.9295 0.0975 0.3556
+vn 0.6063 0.7934 -0.0544
+vn 0.2073 0.8674 0.4524
+vn 0.2137 0.3974 0.8924
+vn -0.9706 0.1582 0.1813
+vn 0.9540 0.1879 -0.2334
+vn 0.8318 0.4903 0.2601
+vn -0.3907 -0.8979 0.2030
+vn -0.6658 0.2206 0.7128
+vn 0.1571 -0.4838 0.8610
+vn -0.2078 -0.5842 0.7846
+vn -0.1816 -0.2246 0.9574
+vn 0.7733 0.2316 0.5902
+vn -0.5455 -0.8377 -0.0256
+vn -0.1805 -0.3096 0.9336
+vn 0.1259 0.9872 -0.0977
+vn 0.7075 0.6661 0.2361
+vn -0.7096 0.6023 0.3655
+vn 0.4328 0.3694 0.8223
+vn 0.3742 0.0254 0.9270
+vn 0.7888 0.0170 0.6144
+vn -0.8209 -0.5651 -0.0831
+vn 0.6863 -0.5230 0.5055
+vn 0.9906 -0.0496 -0.1277
+vn -0.3092 0.9287 -0.2050
+vn -0.2695 -0.9547 0.1261
+vn -0.8045 0.1618 0.5715
+vn -0.0131 0.4940 0.8694
+vn 0.0962 -0.3777 0.9209
+vn -0.7599 -0.6418 0.1033
+vn -0.4427 -0.8910 0.1003
+vn 0.5525 -0.8331 -0.0257
+vn 0.1201 -0.8738 0.4713
+vn 0.4282 0.5682 0.7027
+vn 0.7239 -0.6776 0.1301
+vn -0.2705 0.1585 0.9496
+vn -0.6649 -0.7468 -0.0131
+vn 0.4032 -0.9065 -0.1249
+vn -0.8584 0.4627 0.2215
+vn -0.2443 -0.9045 0.3496
+vn 0.1998 -0.9420 0.2695
+vn 0.7509 0.2171 0.6237
+vn -0.8015 -0.0582 0.5951
+vn -0.1970 -0.1085 0.9744
+vn 0.9286 0.3671 -0.0541
+vn 0.9158 -0.4015 -0.0083
+vn 0.9116 0.1087 0.3965
+vn 0.9289 -0.2361 0.2853
+vn -0.6048 -0.6090 0.5132
+vn 0.2416 0.6705 0.7015
+vn 0.0394 0.8150 -0.5781
+vn -0.5486 0.4917 -0.6763
+vn 0.8350 -0.0573 -0.5473
+vn 0.2699 0.5829 -0.7664
+vn 0.3109 -0.9406 -0.1363
+vn 0.6113 0.7681 -0.1906
+vn -0.2480 0.8377 -0.4867
+vn -0.9328 -0.1069 -0.3441
+vn 0.8321 0.3358 -0.4415
+vn -0.0650 -0.9653 -0.2530
+vn 0.0618 -0.9572 -0.2829
+vn -0.7785 0.0364 -0.6266
+vn 0.2548 -0.8022 -0.5399
+vn -0.0538 0.9803 -0.1902
+vn 0.1769 -0.6702 -0.7208
+vn -0.9277 0.3486 -0.1338
+vn -0.8736 0.0332 -0.4855
+vn -0.8553 -0.3456 -0.3860
+vn -0.8781 0.4140 -0.2400
+vn 0.0833 -0.9513 -0.2967
+vn 0.7782 -0.3066 -0.5481
+vn -0.8864 0.3865 -0.2548
+vn 0.9120 0.3620 -0.1927
+vn -0.9203 -0.3913 -0.0012
+vn 0.8072 -0.2036 -0.5541
+vn 0.9675 0.1588 -0.1968
+vn -0.4261 -0.7373 -0.5243
+vn -0.8432 -0.0474 -0.5356
+vn -0.0794 0.9880 -0.1323
+vn -0.3967 -0.7951 -0.4587
+vn 0.1349 -0.7987 -0.5864
+vn 0.8732 -0.1407 -0.4665
+vn -0.9165 -0.2272 -0.3293
+vn -0.6248 0.2907 -0.7246
+vn 0.7665 -0.1227 -0.6304
+vn 0.6232 -0.7582 -0.1917
+vn 0.1099 -0.2329 -0.9663
+vn 0.1704 0.6003 -0.7814
+vn 0.1677 0.9624 -0.2137
+vn -0.4726 0.4839 -0.7365
+vn 0.9220 0.1375 -0.3619
+vn 0.7123 -0.6729 -0.1997
+vn -0.1319 0.7207 -0.6806
+vn 0.7929 -0.1379 -0.5936
+vn 0.8709 0.1217 -0.4761
+vn 0.6846 -0.6339 -0.3598
+vn -0.3917 -0.9062 -0.1594
+vn 0.8050 -0.5106 -0.3019
+vn 0.4610 0.7836 -0.4165
+vn 0.2240 0.9465 -0.2321
+vn -0.2595 0.9073 -0.3310
+vn -0.9749 -0.1373 -0.1754
+vn 0.8028 -0.4569 -0.3830
+vn -0.2116 -0.9718 -0.1043
+vn -0.9056 -0.4080 -0.1159
+vn 0.5391 -0.8325 -0.1280
+vn 0.8490 0.0658 -0.5242
+vn -0.9958 0.0902 0.0151
+vn -0.0837 -0.8008 -0.5931
+vn -0.9052 0.2324 -0.3558
+vn 0.4117 -0.8500 -0.3285
+vn -0.7739 -0.6302 -0.0623
+vn 0.8713 -0.1833 -0.4553
+vn 0.6103 0.6777 -0.4102
+vn 0.8054 -0.4330 -0.4047
+vn 0.5735 -0.7617 -0.3014
+vn -0.9739 0.2259 -0.0222
+vn -0.4124 -0.8643 -0.2880
+vn 0.3077 -0.9363 -0.1692
+vn 0.0570 0.6479 -0.7596
+vn 0.8561 0.3797 -0.3507
+vn 0.9300 0.0059 -0.3674
+vn 0.1164 -0.9915 -0.0577
+vn -0.2504 0.7847 -0.5671
+vn 0.1670 0.4173 -0.8933
+vn -0.2570 0.9488 -0.1836
+vn 0.7978 0.4857 -0.3571
+vn -0.8011 0.5712 -0.1788
+vn -0.9191 -0.3042 -0.2503
+vn -0.6111 0.7234 -0.3214
+vn -0.7738 -0.5250 -0.3544
+vn -0.6267 -0.7750 -0.0812
+vn -0.3711 0.8810 -0.2935
+vn 0.1769 -0.9650 -0.1937
+vn 0.0445 0.9964 -0.0717
+vn 0.8311 -0.3554 -0.4277
+vn -0.7007 0.2054 -0.6833
+vn -0.0533 0.8924 -0.4480
+vn 0.8166 0.3315 -0.4725
+vn 0.0358 0.8924 -0.4499
+vn -0.2773 0.9351 -0.2207
+vn -0.4216 -0.6737 -0.6069
+vn -0.9582 -0.2722 -0.0885
+vn -0.0186 -0.9425 -0.3336
+vn 0.0999 -0.9290 -0.3564
+vn 0.5107 -0.5695 -0.6441
+vn 0.8266 -0.3061 -0.4723
+vn 0.9646 -0.1522 -0.2154
+vn 0.1777 -0.9837 -0.0285
+vn -0.8670 0.4195 -0.2688
+vn 0.4947 0.7958 -0.3492
+vn 0.9412 -0.1078 -0.3201
+vn -0.8251 -0.1542 -0.5436
+vn -0.5472 0.6842 -0.4822
+vn 0.8502 -0.1216 -0.5123
+vn -0.8455 0.4415 -0.3003
+vn 0.8303 0.4946 -0.2568
+vn -0.8135 -0.5254 -0.2493
+vn -0.5602 -0.8045 -0.1972
+vn -0.2995 -0.8917 -0.3395
+vn 0.5380 0.5019 -0.6772
+vn -0.3971 -0.8172 -0.4176
+vn 0.0237 -0.9911 0.1313
+vn -0.4914 -0.0000 -0.8709
+vn 0.4997 -0.7025 -0.5068
+vn 0.3851 0.8102 -0.4419
+vn -0.0228 0.7791 -0.6265
+vn -0.2056 0.4945 -0.8445
+vn -0.6421 0.0415 -0.7655
+vn -0.0634 -0.9546 -0.2912
+vn 0.8754 -0.3310 -0.3523
+vn 0.1689 0.2847 -0.9436
+vn 0.7314 -0.1616 -0.6625
+vn -0.7001 -0.7027 -0.1271
+vn 0.4840 -0.7033 -0.5207
+vn 0.0596 0.9458 -0.3192
+vn -0.6061 0.1455 -0.7820
+vn -0.4830 -0.4421 -0.7558
+vn -0.7542 0.4514 -0.4769
+vn -0.1415 -0.6447 -0.7512
+vn 0.1589 0.8974 -0.4117
+vn 0.8830 0.0961 -0.4594
+vn -0.0694 0.7878 -0.6120
+vn -0.5640 -0.7744 -0.2868
+vn 0.1032 -0.9266 -0.3617
+vn -0.8724 -0.1868 -0.4518
+vn 0.7057 -0.3454 -0.6186
+vn 0.4243 -0.8397 -0.3389
+vn -0.9250 -0.2131 -0.3145
+vn -0.4426 0.7242 -0.5288
+vn 0.0207 0.8800 -0.4746
+vn -0.3494 0.6693 -0.6557
+vn -0.5546 -0.7117 -0.4312
+vn 0.7593 -0.3971 -0.5155
+vn -0.9403 -0.2784 -0.1960
+vn -0.8252 0.5212 -0.2178
+vn 0.7830 0.4870 -0.3871
+vn -0.9581 -0.2586 -0.1231
+vn 0.8658 -0.4568 -0.2044
+vn 0.7382 0.2780 -0.6146
+vn -0.6206 -0.7196 -0.3116
+vn 0.4442 -0.8581 -0.2574
+vn -0.8415 0.2688 -0.4687
+vn -0.9242 0.0542 -0.3779
+vn -0.8303 -0.5418 -0.1308
+vn 0.7440 -0.5523 -0.3761
+vn 0.6867 -0.2965 -0.6637
+vn 0.1475 0.9590 -0.2419
+vn -0.0569 0.9835 -0.1720
+vn 0.9036 -0.3534 -0.2421
+vn -0.6864 -0.3928 -0.6121
+vn 0.2417 0.7107 -0.6607
+vn 0.6857 -0.7275 -0.0227
+vn -0.7038 -0.7097 -0.0329
+vn 0.0049 -0.4821 0.8761
+vn 0.7095 0.7038 0.0356
+vn 0.8228 -0.4603 0.3334
+vn 0.7001 0.7040 0.1195
+vn -0.9607 0.1225 0.2491
+vn 0.3656 0.7785 0.5102
+vn 0.9814 0.1129 0.1553
+vn 0.2659 -0.8843 0.3838
+vn 0.8050 -0.5785 -0.1317
+vn -0.0758 0.1764 0.9814
+vn -0.0560 -0.5481 0.8345
+vn -0.4538 -0.7164 0.5300
+vn 0.5517 0.5547 0.6228
+vn 0.6578 -0.6033 0.4510
+vn -0.9902 0.0969 0.1004
+vn -0.9079 -0.1680 0.3842
+vn -0.5268 0.7478 0.4041
+vn -0.5560 0.0054 0.8312
+vn 0.0205 -0.6684 0.7435
+vn 0.8080 0.5263 0.2649
+vn 0.7677 -0.5711 0.2905
+vn 0.0925 0.1575 0.9832
+vn -0.5091 -0.8518 0.1237
+vn -0.3495 -0.9271 0.1357
+vn 0.6589 -0.6705 0.3410
+vn -0.0097 0.8613 0.5081
+vn -0.4787 -0.8769 -0.0435
+vn 0.4218 -0.0930 0.9019
+vn -0.0685 0.7380 0.6713
+vn -0.9614 0.2664 0.0688
+vn -0.5609 -0.8198 0.1152
+vn -0.6314 0.0342 0.7747
+vn -0.6290 0.0400 0.7764
+vn -0.6263 0.0347 0.7788
+vn -0.6178 0.0428 0.7852
+vn -0.6226 0.0406 0.7815
+vn -0.6186 0.0448 0.7844
+vn -0.6148 0.7806 0.1124
+vn 0.6973 0.4953 0.5182
+vn -0.7435 -0.2540 0.6186
+vn -0.4271 0.8194 0.3822
+vn -0.6018 0.1814 0.7778
+vn 0.2867 0.9565 -0.0548
+vn 0.6728 0.7366 0.0694
+vn -0.0549 0.3258 0.9438
+vn -0.0216 0.9998 0.0002
+vn -0.2856 0.8846 0.3687
+vn -0.7774 0.5366 0.3283
+vn -0.3436 0.8946 0.2857
+vn 0.1240 0.1823 0.9754
+vn -0.9674 0.2249 -0.1165
+vn -0.7612 -0.6484 -0.0126
+vn -0.8885 0.2294 0.3975
+vn -0.4400 0.6388 0.6312
+vn -0.4356 0.6391 0.6339
+vn -0.4375 0.6397 0.6320
+vn -0.8158 -0.2830 0.5044
+vn -0.4349 0.6408 0.6327
+vn -0.4328 0.6402 0.6346
+vn -0.4308 0.6409 0.6354
+vn -0.1735 -0.3120 0.9341
+vn 0.9919 -0.0134 -0.1263
+vn -0.0130 -0.9167 0.3993
+vn 0.3314 -0.9084 0.2550
+vn 0.3161 0.5455 0.7762
+vn -0.1144 -0.3399 0.9335
+vn -0.9761 -0.1838 -0.1156
+vn -0.4669 -0.8550 0.2257
+vn 0.8525 -0.5002 -0.1517
+vn -0.8325 0.3127 0.4574
+vn 0.7618 0.3813 0.5238
+vn 0.8829 -0.1975 0.4261
+vn 0.3945 -0.5573 0.7306
+vn 0.2170 -0.7525 0.6219
+vn -0.5293 0.0604 0.8463
+vn 0.1739 0.2663 0.9481
+vn 0.9652 -0.2576 0.0461
+vn -0.7533 -0.6391 0.1549
+vn 0.8768 -0.4706 0.0985
+vn -0.7484 -0.0881 0.6574
+vn 0.2109 -0.6859 0.6965
+vn -0.0494 -0.1833 0.9818
+vn -0.0280 0.9996 -0.0043
+vn 0.1797 -0.9762 -0.1210
+vn 0.7762 -0.3032 0.5528
+vn 0.4012 0.9158 0.0166
+vn -0.9457 -0.0234 0.3243
+vn 0.4970 0.8509 0.1702
+vn 0.9671 0.0452 0.2504
+vn -0.6185 0.2343 0.7501
+vn 0.7524 -0.1875 0.6315
+vn 0.1834 0.3421 0.9216
+vn -0.0590 -0.6756 0.7349
+vn 0.7202 0.6859 0.1043
+vn -0.9167 -0.3799 0.1240
+vn 0.7490 -0.6626 0.0004
+vn -0.8658 -0.2067 0.4556
+vn -0.7473 -0.6246 0.2267
+vn -0.7545 -0.6359 0.1624
+vn -0.2847 -0.9307 0.2297
+vn -0.4085 0.7267 0.5523
+vn -0.5917 0.0644 0.8036
+vn 0.0973 -0.7361 0.6699
+vn -0.3580 -0.0805 0.9303
+vn 0.4890 0.0988 0.8667
+vn 0.8145 0.5722 -0.0956
+vn 0.8055 -0.5455 0.2315
+vn 0.7685 -0.6339 -0.0869
+vn 0.8969 0.0983 0.4312
+vn 0.5442 0.0518 0.8374
+vn 0.4924 -0.5696 0.6581
+vn -0.4656 -0.8445 0.2646
+vn -0.1040 0.9908 -0.0867
+vn 0.9421 0.2814 -0.1823
+vn 0.5268 -0.7730 0.3535
+vn -0.6051 0.5602 0.5658
+vn 0.4125 0.6120 0.6748
+vn 0.4765 0.8790 0.0184
+vn 0.9498 0.2176 0.2250
+vn -0.2072 -0.1594 0.9652
+vn 0.9743 -0.2229 -0.0335
+vn 0.7325 -0.6802 0.0264
+vn 0.0289 0.6628 0.7482
+vn -0.8252 -0.4543 0.3356
+vn 0.4066 0.5372 0.7390
+vn 0.2060 -0.1070 0.9727
+vn -0.4140 0.8970 0.1547
+vn 0.6402 0.7350 -0.2234
+vn -0.1411 0.9535 0.2663
+vn 0.1508 0.6864 0.7114
+vn 0.7007 0.3527 0.6202
+vn 0.0265 0.8390 0.5434
+vn -0.5146 0.8557 0.0543
+vn -0.8626 0.3411 0.3736
+vn -0.8185 0.3120 0.4824
+vn 0.2172 0.9691 0.1168
+vn 0.8481 0.5031 0.1660
+vn 0.1079 0.2246 0.9685
+vn 0.6312 0.0687 0.7726
+vn -0.1025 0.9918 -0.0765
+vn -0.9257 0.3404 0.1648
+vn -0.7827 0.2343 0.5766
+vn -0.5788 -0.3175 0.7511
+vn -0.7780 0.2238 0.5871
+vn 0.0086 -0.3125 0.9499
+vn 0.3120 0.5887 0.7457
+vn -0.5958 0.4411 0.6712
+vn 0.8551 0.5139 -0.0684
+vn -0.6392 0.5860 0.4980
+vn 0.6780 -0.7252 0.1200
+vn 0.7261 -0.6287 0.2784
+vn 0.9023 -0.0207 0.4306
+vn 0.7511 0.4441 0.4885
+vn -0.8101 0.0432 0.5847
+vn -0.1279 -0.1396 0.9819
+vn 0.1168 -0.9674 -0.2248
+vn 0.1378 -0.5550 0.8204
+vn -0.0088 0.9877 -0.1564
+vn 0.8158 -0.1548 0.5572
+vn -0.6152 -0.5585 0.5564
+vn -0.2936 -0.7898 0.5386
+vn 0.0917 -0.7873 0.6097
+vn 0.4407 -0.0972 0.8924
+vn -0.8014 0.5433 0.2500
+vn -0.9585 0.0890 0.2710
+vn 0.1834 -0.6855 0.7046
+vn 0.1933 -0.6802 0.7071
+vn 0.1875 -0.6818 0.7071
+vn 0.8928 -0.4144 0.1767
+vn -0.4301 0.8819 -0.1933
+vn -0.5675 0.7634 0.3085
+vn -0.4576 -0.8344 0.3073
+vn -0.1020 -0.4043 0.9089
+vn 0.7490 0.6542 0.1047
+vn 0.9994 0.0046 -0.0331
+vn -0.6559 0.7245 0.2117
+vn -0.9597 0.1794 0.2162
+vn 0.0314 0.5721 0.8196
+vn -0.2632 -0.4265 0.8653
+vn 0.0784 0.9846 -0.1563
+vn 0.7275 -0.3415 0.5950
+vn -0.1378 -0.0766 0.9875
+vn 0.6396 0.7317 -0.2356
+vn 0.0198 -0.0064 0.9998
+vn -0.9881 -0.0206 0.1525
+vn -0.6163 0.7828 0.0857
+vn 0.4046 0.5407 0.7375
+vn 0.2950 -0.4808 0.8257
+vn 0.2876 -0.9576 -0.0157
+vn -0.8931 -0.2489 0.3747
+vn -0.6037 -0.7551 0.2555
+vn 0.8463 -0.4951 0.1967
+vn 0.4090 -0.7063 0.5778
+vn 0.6870 0.3434 0.6405
+vn -0.7948 -0.0550 0.6043
+vn -0.0706 0.2085 0.9755
+vn -0.6522 -0.7487 0.1187
+vn 0.0570 -0.8099 0.5837
+vn -0.1325 0.9805 0.1451
+vn -0.7969 0.5807 0.1663
+vn -0.8573 -0.0169 0.5146
+vn -0.4682 -0.0924 0.8788
+vn 0.7728 -0.1651 0.6128
+vn -0.3885 0.9108 0.1397
+vn -0.9614 -0.2003 0.1889
+vn -0.8431 0.1753 0.5083
+vn -0.1287 -0.4348 0.8913
+vn 0.7984 0.6005 0.0454
+vn 0.9221 0.2754 0.2718
+vn 0.8852 -0.4503 0.1168
+vn 0.7135 -0.6148 0.3360
+vn 0.1444 0.4945 0.8571
+vn 0.4644 0.0967 0.8803
+vn 0.0112 -0.8001 0.5998
+vn 0.3246 0.8927 -0.3126
+vn -0.0949 -0.9789 -0.1808
+vn -0.0780 -0.5185 0.8515
+vn 0.8902 0.3955 0.2259
+vn 0.7843 -0.1829 0.5928
+vn -0.0763 0.7262 0.6832
+vn -0.7061 -0.6143 0.3522
+vn -0.2894 -0.9503 0.1149
+vn -0.6680 -0.6583 0.3469
+vn 0.2783 -0.1275 0.9520
+vn 0.2248 -0.7460 0.6268
+vn 0.7303 -0.6459 -0.2224
+vn 0.4728 0.0558 0.8794
+vn -0.5511 -0.8151 0.1787
+vn -0.2807 -0.7710 0.5716
+vn -0.2961 -0.4898 0.8200
+vn 0.7949 -0.2870 0.5345
+vn -0.2286 0.9355 -0.2694
+vn -0.6506 0.7539 -0.0915
+vn -0.8492 -0.5034 0.1599
+vn -0.2882 0.6086 0.7393
+vn 0.7896 -0.5297 0.3096
+vn -0.2900 0.6197 0.7293
+vn -0.4870 0.1722 0.8562
+vn 0.3499 0.3890 0.8522
+vn 0.7740 -0.1801 0.6071
+vn -0.2288 -0.3833 0.8949
+vn 0.7991 -0.5926 -0.1007
+vn 0.9838 0.1120 -0.1399
+vn 0.8602 0.4235 0.2840
+vn 0.1911 0.1930 0.9624
+vn 0.6605 0.1193 0.7413
+vn -0.3185 0.8943 0.3143
+vn -0.8450 0.4342 0.3120
+vn 0.1149 0.5308 0.8397
+vn 0.5357 0.5754 0.6180
+vn -0.4424 0.3048 0.8434
+vn 0.0460 -0.4647 0.8843
+vn -0.2094 0.9703 0.1208
+vn -0.6828 -0.7297 -0.0354
+vn -0.2274 0.8513 0.4729
+vn -0.9360 -0.0621 0.3465
+vn -0.5548 0.1477 0.8188
+vn -0.0055 -0.1831 0.9831
+vn -0.8396 -0.5402 0.0567
+vn 0.8960 0.4422 -0.0412
+vn 0.2706 0.8938 0.3577
+vn 0.8956 -0.0007 0.4448
+vn 0.3526 -0.8036 0.4795
+vn -0.8054 -0.1640 0.5695
+vn 0.5286 0.2725 0.8039
+vn -0.0251 -0.8515 0.5238
+vn 0.7632 -0.4356 0.4772
+vn 0.0059 -0.7222 0.6916
+vn -0.9293 -0.3672 -0.0384
+vn 0.2722 -0.8356 0.4771
+vn -0.4799 -0.5693 0.6675
+vn -0.3472 -0.0402 0.9369
+vn 0.0437 0.2605 0.9645
+vn -0.3657 -0.2480 0.8971
+vn 0.2403 -0.9705 -0.0201
+vn 0.2429 -0.9357 0.2559
+vn 0.5426 -0.7403 0.3970
+vn -0.0557 -0.8647 0.4992
+vn -0.2845 0.9311 0.2280
+vn -0.0427 -0.9885 0.1454
+vn -0.8313 0.3825 0.4034
+vn -0.6201 0.5900 0.5171
+vn -0.7473 -0.4721 0.4677
+vn -0.2402 -0.4263 0.8721
+vn 0.9571 -0.2883 -0.0289
+vn 0.2460 -0.9677 0.0547
+vn 0.6792 -0.7339 0.0106
+vn 0.0788 0.9663 0.2451
+vn 0.5749 0.4016 0.7129
+vn 0.7276 -0.0039 0.6860
+vn -0.0906 -0.5605 0.8232
+vn 0.2310 0.4944 0.8380
+vn 0.4710 -0.2320 0.8511
+vn 0.2527 -0.5784 0.7756
+vn 0.9999 -0.0030 -0.0142
+vn 0.3450 -0.9357 0.0738
+vn 0.1274 0.7628 0.6339
+vn 0.8995 -0.4087 -0.1544
+vn -0.1537 -0.9828 0.1026
+vn -0.7660 -0.5097 0.3917
+vn 0.1625 -0.9676 0.1932
+vn 0.1128 0.9074 0.4048
+vn -0.5339 0.1573 0.8308
+vn -0.1997 0.9634 0.1787
+vn 0.6282 0.7329 0.2610
+vn -0.5473 -0.8132 0.1980
+vn 0.0404 -0.8742 0.4840
+vn 0.7885 -0.6096 -0.0813
+vn 0.7699 -0.2376 0.5923
+vn -0.4492 0.4115 0.7930
+vn 0.6061 0.7660 -0.2142
+vn 0.9496 0.3042 -0.0756
+vn 0.8781 0.2568 0.4037
+vn 0.0309 0.8818 0.4707
+vn 0.2698 0.8538 0.4453
+vn -0.7788 -0.6146 0.1255
+vn -0.8018 -0.3707 0.4688
+vn -0.2349 0.3436 0.9093
+vn -0.5937 -0.3141 0.7409
+vn 0.8959 -0.3704 0.2454
+vn 0.7180 -0.6838 0.1302
+vn -0.2269 -0.9598 0.1651
+vn 0.8565 -0.0957 0.5071
+vn 0.3907 -0.1082 0.9141
+vn -0.4919 -0.8693 -0.0481
+vn -0.0149 0.9991 0.0400
+vn 0.5262 0.8460 -0.0861
+vn -0.6853 -0.6370 0.3531
+vn -0.5375 -0.5246 0.6602
+vn 0.1336 -0.9879 -0.0784
+vn 0.5986 -0.6460 0.4737
+vn 0.2379 -0.4152 0.8781
+vn 0.5885 -0.5995 0.5425
+vn 0.1391 -0.0141 0.9902
+vn 0.9624 -0.2376 0.1313
+vn 0.7721 -0.6219 0.1304
+vn 0.1822 -0.5544 0.8121
+vn 0.2998 0.1892 0.9351
+vn 0.1588 -0.1163 0.9804
+vn -0.4722 0.8696 0.1440
+vn 0.4646 0.8149 0.3464
+vn -0.9410 -0.1067 0.3213
+vn 0.4426 0.6663 0.6002
+vn 0.3932 -0.2079 0.8957
+vn 0.8240 0.4932 0.2788
+vn 0.5460 0.8225 0.1596
+vn -0.4916 0.8155 0.3053
+vn 0.0561 -0.7855 0.6163
+vn 0.7700 -0.4599 0.4424
+vn -0.4280 0.0795 0.9003
+vn -0.3872 0.9220 0.0028
+vn 0.2526 0.9636 0.0876
+vn -0.6133 0.6806 0.4007
+vn -0.7299 -0.0512 0.6816
+vn 0.4799 0.5559 0.6787
+vn 0.0907 0.3370 0.9371
+vn -0.8753 0.4807 -0.0528
+vn -0.9123 -0.1372 0.3859
+vn 0.8509 -0.4989 0.1643
+vn 0.8209 0.1252 0.5572
+vn -0.0650 -0.8485 0.5252
+vn -0.5222 0.3219 0.7898
+vn 0.5354 0.1657 0.8282
+vn -0.1819 -0.5620 0.8069
+vn 0.3593 -0.5083 0.7826
+vn -0.5297 0.8402 0.1161
+vn 0.9948 -0.0776 0.0666
+vn -0.3272 -0.8572 0.3976
+vn -0.1747 -0.4583 0.8715
+vn 0.9414 0.0446 0.3343
+vn -0.4155 0.8957 0.1581
+vn 0.3185 0.9278 0.1945
+vn -0.7691 0.6001 0.2199
+vn 0.7923 0.4263 0.4366
+vn -0.5095 -0.3713 0.7762
+vn 0.8502 -0.4593 -0.2574
+vn -0.7621 0.1973 0.6167
+vn -0.1529 -0.3749 0.9144
+vn -0.8609 0.4687 0.1978
+vn 0.0687 -0.7572 0.6496
+vn 0.2841 0.3119 0.9066
+vn 0.0933 -0.4431 0.8916
+vn 0.9298 0.1136 -0.3502
+vn 0.0750 0.9929 0.0926
+vn -0.6023 -0.4349 0.6695
+vn 0.7441 -0.6373 -0.2007
+vn 0.4831 0.7491 0.4532
+vn 0.2202 -0.1505 0.9638
+vn -0.4726 0.1022 0.8753
+vn -0.2258 0.9663 0.1233
+vn -0.2519 0.7640 0.5939
+vn -0.6925 0.0275 0.7209
+vn 0.5175 -0.7852 0.3402
+vn 0.0009 -0.7353 0.6777
+vn 0.3106 0.9374 -0.1573
+vn 0.8066 0.5062 0.3053
+vn 0.1030 0.9550 -0.2782
+vn 0.0309 0.3772 0.9256
+vn -0.4235 0.7727 0.4728
+vn 0.9193 0.3283 -0.2171
+vn 0.5875 -0.1238 0.7997
+vn 0.6410 0.7666 0.0379
+vn -0.8154 0.5602 -0.1461
+vn -0.9769 0.0882 0.1946
+vn -0.7066 -0.6283 0.3256
+vn -0.5391 0.2190 0.8133
+vn 0.2487 -0.2767 0.9282
+vn 0.6320 0.7722 -0.0650
+vn 0.9908 0.0851 0.1053
+vn -0.2162 -0.0017 0.9763
+vn -0.2289 0.9729 -0.0335
+vn 0.1399 -0.9786 0.1511
+vn 0.4082 0.8739 -0.2640
+vn -0.9669 0.2438 0.0748
+vn -0.0987 -0.9734 0.2065
+vn 0.4050 0.2294 0.8851
+vn -0.1057 -0.9926 0.0603
+vn -0.8516 0.1217 0.5099
+vn -0.8018 -0.5300 0.2760
+vn 0.2850 0.9416 -0.1792
+vn 0.6601 -0.7252 -0.1959
+vn -0.1203 0.9663 0.2274
+vn 0.2804 0.9322 0.2290
+vn -0.9907 -0.1360 -0.0094
+vn 0.4282 -0.8859 -0.1785
+vn -0.7688 -0.4905 0.4103
+vn 0.3564 -0.9341 0.0215
+vn 0.5226 0.5649 0.6386
+vn 0.8852 0.1914 0.4240
+vn -0.0640 -0.9574 0.2814
+vn -0.3132 -0.1062 0.9437
+vn 0.1605 -0.5235 0.8368
+vn 0.4317 0.8964 -0.1000
+vn -0.6056 0.7340 0.3074
+vn -0.8727 0.4833 0.0687
+vn -0.8700 -0.4898 0.0562
+vn -0.5122 -0.8452 0.1528
+vn 0.1844 0.9099 0.3717
+vn -0.9276 -0.1480 0.3430
+vn 0.5265 -0.8213 0.2196
+vn 0.2905 0.6500 0.7022
+vn -0.5045 0.4329 0.7471
+vn -0.2691 -0.5614 0.7825
+vn 0.7931 0.5643 -0.2293
+vn 0.9186 0.1033 0.3816
+vn -0.5551 0.8096 0.1907
+vn -0.8469 0.3939 0.3571
+vn 0.5688 0.8084 0.1517
+vn -0.9324 -0.3374 -0.1297
+vn 0.9915 -0.1067 0.0751
+vn 0.0360 -0.9801 0.1954
+vn -0.0966 -0.4644 0.8803
+vn 0.8186 -0.1244 0.5607
+vn 0.1887 0.2884 0.9387
+vn -0.1714 -0.5840 0.7934
+vn 0.9568 -0.2460 -0.1549
+vn 0.9881 0.1206 -0.0956
+vn -0.5303 0.7622 0.3712
+vn -0.7343 -0.0737 0.6748
+vn -0.1466 -0.9712 0.1878
+vn -0.7394 -0.0364 0.6722
+vn 0.1244 -0.7903 0.6000
+vn -0.5369 -0.1216 0.8348
+vn 0.9781 -0.1548 -0.1394
+vn 0.8213 -0.1391 0.5533
+vn 0.1888 -0.7770 0.6005
+vn -0.2102 -0.9690 0.1297
+vn -0.0862 -0.9628 0.2561
+vn 0.3979 -0.8706 0.2894
+vn -0.4830 -0.2737 0.8317
+vn 0.8943 -0.2867 -0.3435
+vn 0.4372 -0.0177 0.8992
+vn 0.1179 -0.8786 0.4629
+vn -0.3562 0.9044 -0.2350
+vn 0.5365 0.8340 0.1289
+vn -0.9426 0.3339 0.0082
+vn -0.7200 -0.6460 0.2537
+vn 0.7480 -0.6434 0.1631
+vn -0.7434 -0.2104 0.6350
+vn 0.2263 -0.8327 0.5054
+vn -0.3977 0.5720 0.7174
+vn 0.2690 -0.0167 0.9630
+vn 0.8698 0.4723 0.1426
+vn 0.8467 0.0170 0.5318
+vn 0.7129 -0.7013 -0.0024
+vn 0.3136 0.9481 -0.0523
+vn 0.6535 0.7332 -0.1880
+vn 0.1676 -0.7332 0.6591
+vn -0.4505 0.8414 0.2985
+vn -0.5899 -0.7858 0.1861
+vn -0.0016 0.5278 0.8494
+vn -0.0508 -0.2746 0.9602
+vn 0.2246 -0.3450 0.9113
+vn 0.4005 -0.5388 0.7412
+vn -0.5583 0.7453 0.3644
+vn 0.7599 0.6421 -0.1018
+vn 0.1947 -0.7041 0.6828
+vn -0.5017 -0.8611 -0.0821
+vn -1.0000 0.0018 -0.0006
+vn 0.5085 0.8608 -0.0230
+vn 0.9844 -0.0051 -0.1758
+vn 0.9887 -0.0034 -0.1500
+vn 0.5104 -0.8585 0.0487
+vn 0.0663 -0.0360 0.9971
+vn -0.0195 -0.0008 0.9998
+vn 0.0807 0.0192 0.9966
+vn -0.0062 -0.0106 0.9999
+vn -0.0448 0.0464 -0.9979
+vn 0.0042 -0.0246 -0.9997
+vn -0.0216 0.0500 -0.9985
+vn 0.1999 0.0034 -0.9798
+vn -0.0126 0.0893 -0.9959
+vn -0.0440 0.0078 -0.9990
+vn -0.0337 0.0019 -0.9994
+vn 0.0577 0.0425 -0.9974
+vn 0.0972 0.0357 -0.9946
+vn -0.0532 -0.0769 -0.9956
+vn -0.0310 0.0001 -0.9995
+vn -0.1207 -0.1750 -0.9771
+vn -0.0025 -0.0880 -0.9961
+vn -0.0371 -0.0864 -0.9956
+vn 0.1055 0.0873 -0.9906
+vn -0.0076 -0.1185 -0.9929
+vn 0.0033 0.1023 -0.9948
+vn 0.0021 0.1026 -0.9947
+vn 0.0012 0.1029 -0.9947
+vn -0.1225 0.0422 -0.9916
+vn 0.0274 0.1802 -0.9832
+vn 0.0222 -0.0377 -0.9990
+vn -0.0075 0.1466 -0.9892
+vn 0.0979 -0.0605 -0.9934
+vn -0.1245 -0.0910 -0.9880
+vn -0.0428 0.1029 -0.9938
+vn -0.1409 0.1645 -0.9763
+vn 0.0966 0.2414 -0.9656
+vn -0.0475 -0.0052 -0.9989
+vn 0.0167 -0.0110 -0.9998
+vn 0.0001 -0.1018 -0.9948
+vn -0.0232 0.0953 -0.9952
+vn -0.1248 0.0721 -0.9896
+vn -0.0424 0.1086 -0.9932
+vn 0.0595 -0.1287 -0.9899
+vn 0.0222 0.0297 -0.9993
+vn 0.0595 -0.0545 -0.9967
+vn -0.0657 -0.0277 -0.9975
+vn 0.1344 -0.0917 -0.9867
+vn 0.0924 0.0714 -0.9932
+vn -0.0235 -0.0109 -0.9997
+vn 0.2179 -0.1172 -0.9689
+vn 0.1632 -0.2598 -0.9518
+vn -0.0039 0.0624 -0.9980
+vn -0.0037 0.0624 -0.9980
+vn -0.0036 0.0624 -0.9980
+vn 0.0413 -0.0517 -0.9978
+vn 0.0413 -0.0325 -0.9986
+vn 0.0516 -0.0146 -0.9986
+vn -0.0722 0.0071 -0.9974
+vn 0.0629 -0.0104 -0.9980
+vn 0.0579 -0.0927 -0.9940
+vn 0.0387 -0.0391 -0.9985
+vn -0.0755 -0.1147 -0.9905
+vn -0.2261 -0.0653 -0.9719
+vn -0.2254 -0.0679 -0.9719
+vn -0.2270 -0.0616 -0.9719
+vn -0.0663 0.0361 -0.9971
+vn 0.0627 -0.1363 -0.9887
+vn -0.0837 -0.1678 -0.9823
+vn -0.0921 0.1231 -0.9881
+vn -0.0145 -0.0111 -0.9998
+vn 0.0195 0.0008 -0.9998
+vn 0.1560 0.2150 -0.9641
+vn 0.0502 -0.1129 -0.9923
+vn 0.0533 0.1045 -0.9931
+vn -0.0927 0.0188 -0.9955
+vn 0.0229 0.0214 -0.9995
+vn 0.0192 0.0220 -0.9996
+vn 0.0195 0.0219 -0.9996
+vn 0.0558 -0.0561 -0.9969
+vn -0.0807 -0.0192 -0.9966
+vn -0.0130 0.0096 -0.9999
+vn -0.0008 -0.0870 -0.9962
+vn 0.0926 -0.0401 -0.9949
+vn 0.0455 -0.1223 -0.9915
+vn 0.0033 0.2547 -0.9670
+vn -0.0018 0.1747 -0.9846
+vn 0.1266 -0.1832 -0.9749
+vn -0.1105 0.0355 -0.9932
+vn -0.1547 -0.1576 -0.9753
+vn -0.0331 0.0051 -0.9994
+vn -0.1095 0.0430 -0.9931
+vn -0.0735 0.1101 -0.9912
+vn 0.1797 0.0586 -0.9820
+vn -0.0851 -0.0700 -0.9939
+vn -0.0941 -0.0526 -0.9942
+vn 0.2933 0.1941 -0.9361
+vn 0.0039 0.0852 -0.9964
+vn -0.1004 -0.0245 -0.9946
+vn -0.0607 0.0287 -0.9977
+vn -0.0568 -0.0201 -0.9982
+vn -0.0471 0.0206 -0.9987
+vn 0.2285 -0.0991 -0.9685
+vn 0.0705 -0.0983 -0.9927
+vn 0.0419 0.0001 -0.9991
+vn -0.0619 -0.0410 -0.9972
+vn -0.1097 -0.0528 -0.9926
+vn -0.0556 -0.2075 -0.9767
+vn 0.0285 -0.0280 -0.9992
+vn -0.1238 -0.0746 -0.9895
+vn -0.0030 -0.1783 -0.9840
+vn 0.0624 0.0092 -0.9980
+vn -0.0046 0.1049 -0.9945
+vn 0.1826 0.1022 -0.9779
+vn -0.0715 0.2279 -0.9710
+vn 0.0847 0.0963 -0.9917
+vn 0.0181 -0.0362 -0.9992
+vn -0.0793 -0.0213 -0.9966
+vn 0.1997 0.1436 -0.9693
+vn 0.1668 0.0415 -0.9851
+vn -0.1750 -0.0496 -0.9833
+vn -0.0183 0.0591 -0.9981
+vn -0.0190 0.0589 -0.9981
+vn -0.0193 0.0588 -0.9981
+vn -0.0197 0.0586 -0.9981
+vn 0.0029 -0.0291 -0.9996
+vn -0.0008 -0.0288 -0.9996
+vn 0.0037 -0.0291 -0.9996
+vn 0.0054 -0.0293 -0.9996
+vn -0.0308 -0.0118 -0.9995
+vn -0.0303 -0.1618 -0.9864
+vn -0.0235 -0.0312 -0.9992
+vn 0.0896 -0.0350 -0.9954
+vn -0.1047 -0.0669 -0.9923
+vn 0.0686 0.1322 -0.9888
+vn -0.0823 0.0715 -0.9940
+vn 0.0575 -0.2625 -0.9632
+vn 0.2167 -0.1565 -0.9636
+vn -0.1047 0.0574 -0.9928
+vn -0.0345 0.1102 -0.9933
+vn 0.0387 0.0092 -0.9992
+vn 0.0584 -0.0413 -0.9974
+vn 0.0634 -0.1787 -0.9819
+vn -0.0033 0.0624 -0.9980
+vn 0.1755 0.0347 -0.9839
+vn 0.0324 -0.0893 -0.9955
+vn -0.0005 0.0178 -0.9998
+vn -0.1466 0.2300 -0.9621
+vn -0.0824 0.0080 -0.9966
+vn 0.0234 -0.0147 -0.9996
+vn 0.0401 0.0428 -0.9983
+vn 0.0090 0.0499 -0.9987
+vn 0.0407 -0.0583 -0.9975
+vn -0.0031 0.1069 -0.9943
+vn -0.0319 0.1211 -0.9921
+vn -0.2239 -0.0740 -0.9718
+vn 0.0971 0.0008 -0.9953
+vn -0.0554 -0.0104 -0.9984
+vn -0.0587 0.0230 -0.9980
+vn 0.0411 0.0884 -0.9952
+vn -0.1671 -0.0510 -0.9846
+vn 0.0381 -0.1683 -0.9850
+vn 0.1159 -0.1083 -0.9873
+vn -0.1069 0.1229 -0.9867
+vn 0.0933 -0.0155 -0.9955
+vn 0.0838 -0.0592 -0.9947
+vn -0.0351 0.0430 -0.9985
+vn -0.0506 0.1086 -0.9928
+vn -0.0262 -0.0332 -0.9991
+vn 0.0166 0.0224 -0.9996
+vn 0.0062 0.0106 -0.9999
+vn -0.0018 -0.0134 -0.9999
+vn -0.1110 0.2352 -0.9656
+vn -0.0453 0.0357 -0.9983
+vn 0.0413 -0.2052 -0.9778
+vn 0.2346 -0.0361 -0.9714
+vn 0.0246 -0.0789 -0.9966
+vn -0.0197 -0.0139 -0.9997
+vn 0.0706 -0.0252 -0.9972
+vn 0.0406 0.1328 -0.9903
+vn -0.1101 -0.0676 -0.9916
+vn 0.0755 0.0660 -0.9950
+vn 0.0367 0.1083 -0.9934
+s off
+f 591//1269 592//1269 593//1269
+f 594//1270 592//1270 591//1270
+f 595//1271 596//1271 597//1271 598//1271
+f 599//1272 600//1272 601//1272
+f 602//1273 603//1273 604//1273
+f 605//1274 606//1274 607//1274
+f 608//1275 609//1275 610//1275
+f 610//1276 611//1276 608//1276
+f 612//1277 613//1277 614//1277 615//1277
+f 616//1278 617//1278 612//1278 615//1278
+f 618//1279 619//1279 620//1279 621//1279
+f 619//1280 622//1280 623//1280
+f 624//1281 625//1281 626//1281
+f 627//1282 628//1282 629//1282
+f 630//1283 631//1283 632//1283
+f 633//1284 634//1284 635//1284
+f 636//1285 637//1285 638//1285
+f 639//1286 640//1286 641//1286
+f 642//1287 643//1287 644//1287
+f 644//1288 643//1288 645//1288 646//1288
+f 647//1289 648//1289 649//1289 650//1289
+f 651//1290 652//1290 653//1290
+f 654//1291 653//1291 652//1291
+f 655//1292 656//1292 657//1292
+f 658//1293 659//1293 660//1293
+f 661//1294 662//1294 663//1294 664//1294
+f 652//1295 665//1295 654//1295
+f 666//1296 667//1296 668//1296
+f 669//1297 670//1297 671//1297 672//1297
+f 673//1298 674//1298 675//1298 676//1298
+f 677//1299 678//1299 679//1299
+f 680//1300 677//1300 679//1300 681//1300 682//1300
+f 683//1301 684//1301 685//1301 686//1301 687//1301
+f 688//1302 689//1302 690//1302 691//1302
+f 692//1303 693//1303 694//1303
+f 695//1304 696//1304 697//1304
+f 698//1305 699//1305 700//1305
+f 701//1306 702//1306 703//1306 704//1306
+f 705//1307 706//1307 707//1307 708//1307
+f 709//1308 710//1308 711//1308
+f 712//1309 713//1309 714//1309 715//1309
+f 716//1310 717//1310 718//1310
+f 719//1311 720//1311 721//1311 722//1311 723//1311 724//1311
+f 724//1312 725//1312 719//1312
+f 726//1313 727//1313 720//1313
+f 728//1314 729//1314 730//1314 731//1314
+f 732//1315 733//1315 734//1315
+f 731//1316 735//1316 728//1316
+f 732//1317 734//1317 736//1317 737//1317
+f 738//1318 739//1318 740//1318
+f 741//1319 742//1319 743//1319 744//1319
+f 745//1320 746//1320 747//1320
+f 747//1321 746//1321 748//1321 749//1321
+f 750//1322 751//1322 752//1322
+f 753//1323 754//1323 736//1323 755//1323 756//1323
+f 757//1324 758//1324 759//1324 760//1324
+f 761//1325 762//1325 763//1325 764//1325
+f 765//1326 761//1326 764//1326 766//1326
+f 767//1327 768//1327 769//1327 770//1327
+f 771//1328 772//1328 773//1328
+f 774//1329 775//1329 776//1329
+f 777//1330 778//1330 779//1330
+f 780//1331 781//1331 782//1331 783//1331
+f 784//1332 785//1332 786//1332 787//1332
+f 788//1333 789//1333 790//1333
+f 791//1334 792//1334 793//1334
+f 793//1335 788//1335 790//1335 791//1335
+f 794//1336 795//1336 796//1336 797//1336
+f 798//1337 799//1337 800//1337
+f 801//1338 802//1338 803//1338
+f 804//1339 805//1339 806//1339
+f 807//1340 808//1340 809//1340 810//1340
+f 811//1341 808//1341 812//1341 813//1341 814//1341
+f 813//1342 812//1342 815//1342
+f 816//1343 817//1343 818//1343
+f 819//1344 820//1344 821//1344 822//1344
+f 823//1345 824//1345 825//1345
+f 826//1346 827//1346 828//1346
+f 829//1347 830//1347 831//1347 832//1347
+f 833//1348 821//1348 820//1348
+f 834//1349 835//1349 836//1349
+f 837//1350 838//1350 839//1350
+f 840//1351 841//1351 842//1351 843//1351
+f 844//1352 845//1352 846//1352
+f 847//1353 848//1353 849//1353 850//1353
+f 851//1354 852//1354 853//1354
+f 854//1355 855//1355 856//1355 857//1355 858//1355
+f 859//1356 860//1356 861//1356 862//1356
+f 863//1357 864//1357 865//1357 861//1357 860//1357
+f 866//1358 867//1358 868//1358
+f 869//1359 870//1359 871//1359
+f 872//1360 873//1360 874//1360 875//1360
+f 876//1361 877//1361 878//1361
+f 877//1362 876//1362 879//1362 880//1362
+f 881//1363 882//1363 883//1363 884//1363
+f 885//1364 886//1364 887//1364
+f 888//1365 889//1365 890//1365
+f 891//1366 892//1366 893//1366
+f 891//1367 893//1367 894//1367 895//1367 896//1367
+f 897//1368 898//1368 899//1368 900//1368
+f 901//1369 902//1369 903//1369
+f 904//1370 905//1370 906//1370 907//1370
+f 908//1371 909//1371 910//1371
+f 911//1372 912//1372 913//1372 914//1372
+f 915//1373 916//1373 917//1373
+f 918//1374 919//1374 920//1374
+f 921//1375 922//1375 923//1375 924//1375
+f 925//1376 926//1376 927//1376 928//1376
+f 929//1377 930//1377 931//1377 932//1377
+f 933//1378 934//1378 935//1378 936//1378
+f 937//1379 938//1379 939//1379 940//1379
+f 937//1380 940//1380 941//1380
+f 942//1381 943//1381 944//1381
+f 945//1382 946//1382 944//1382 947//1382
+f 948//1383 946//1383 945//1383
+f 599//1384 595//1384 598//1384 600//1384
+f 949//1385 950//1385 951//1385 952//1385
+f 953//1386 954//1386 955//1386
+f 956//1387 957//1387 958//1387 959//1387
+f 960//1388 956//1388 961//1388
+f 962//1389 958//1389 957//1389
+f 963//1390 957//1390 960//1390 964//1390
+f 965//1391 966//1391 606//1391
+f 965//1392 967//1392 605//1392
+f 968//1393 607//1393 966//1393
+f 968//1394 965//1394 605//1394
+f 969//1395 608//1395 805//1395
+f 969//1396 805//1396 970//1396
+f 971//1397 972//1397 973//1397 974//1397
+f 612//1398 617//1398 974//1398
+f 975//1399 976//1399 977//1399
+f 978//1400 979//1400 980//1400
+f 981//1401 977//1401 976//1401 978//1401
+f 619//1402 982//1402 983//1402 622//1402
+f 984//1403 985//1403 986//1403
+f 986//1404 987//1404 988//1404 984//1404
+f 989//1405 990//1405 991//1405 992//1405 993//1405
+f 991//1406 994//1406 992//1406
+f 995//1407 996//1407 997//1407
+f 982//1408 998//1408 999//1408 983//1408
+f 1000//1409 998//1409 982//1409
+f 1000//1410 625//1410 998//1410
+f 1001//1411 982//1411 619//1411
+f 1002//1412 625//1412 1000//1412
+f 1002//1413 1000//1413 1001//1413
+f 1003//1414 1004//1414 1005//1414 1006//1414
+f 1005//1415 1007//1415 629//1415
+f 1008//1416 1009//1416 1010//1416 1011//1416
+f 1012//1417 1013//1417 1014//1417
+f 1015//1418 1016//1418 1017//1418
+f 1014//1419 1013//1419 1017//1419 1016//1419
+f 1018//1420 1019//1420 1014//1420 1016//1420
+f 1020//1421 1021//1421 1022//1421 1023//1421
+f 1021//1422 1024//1422 1025//1422 1022//1422
+f 1026//1423 1027//1423 1028//1423 1029//1423
+f 1028//1424 1021//1424 1030//1424
+f 1031//1425 1032//1425 1033//1425 1034//1425
+f 1034//1426 1035//1426 1031//1426
+f 1031//1427 1036//1427 1032//1427
+f 1037//1428 1038//1428 1039//1428 1040//1428
+f 1037//1429 1040//1429 1041//1429 1042//1429
+f 1043//1430 1037//1430 1042//1430
+f 1044//1431 1038//1431 1045//1431
+f 1046//1432 632//1432 631//1432 1047//1432
+f 1048//1433 1049//1433 632//1433
+f 1046//1434 1048//1434 632//1434
+f 1049//1435 1050//1435 1051//1435 1052//1435
+f 1053//1436 1054//1436 1046//1436 1047//1436
+f 1055//1437 1050//1437 1056//1437 1057//1437 1058//1437
+f 1048//1438 1059//1438 1049//1438
+f 1060//1439 634//1439 1056//1439
+f 1061//1440 1048//1440 1046//1440
+f 1060//1441 1061//1441 634//1441
+f 1054//1442 1062//1442 1061//1442 1046//1442
+f 1060//1443 1056//1443 1059//1443
+f 1061//1444 1059//1444 1048//1444
+f 1060//1445 1059//1445 1061//1445
+f 1063//1446 1064//1446 1065//1446
+f 1066//1447 1065//1447 1067//1447
+f 1068//1448 1069//1448 1070//1448 638//1448
+f 638//1449 640//1449 639//1449 636//1449
+f 638//1450 1071//1450 640//1450
+f 1072//1451 1071//1451 1070//1451 1069//1451
+f 642//1452 1073//1452 1074//1452 643//1452
+f 1075//1453 1076//1453 1077//1453
+f 1078//1454 645//1454 1075//1454 1077//1454
+f 656//1455 1079//1455 657//1455
+f 1080//1456 1081//1456 1082//1456 1083//1456
+f 1084//1457 1081//1457 1080//1457
+f 1085//1458 1086//1458 1087//1458 1088//1458
+f 1089//1459 1090//1459 1091//1459 1092//1459 1093//1459
+f 1091//1460 1094//1460 1095//1460
+f 1096//1461 1097//1461 1091//1461 1090//1461
+f 652//1462 1086//1462 1098//1462
+f 1099//1463 1100//1463 652//1463
+f 1101//1464 1098//1464 1102//1464
+f 1099//1465 1098//1465 1101//1465
+f 1103//1466 1104//1466 659//1466 1105//1466
+f 1097//1467 1106//1467 1107//1467 1094//1467
+f 1097//1468 1108//1468 657//1468
+f 1109//1469 1110//1469 1111//1469 1104//1469
+f 1112//1470 659//1470 1104//1470 1111//1470
+f 1109//1471 1108//1471 1097//1471
+f 1104//1472 662//1472 1108//1472
+f 1113//1473 1114//1473 1115//1473 1116//1473
+f 1114//1474 1084//1474 1115//1474
+f 1117//1475 1118//1475 667//1475 666//1475 1119//1475
+f 1120//1476 1121//1476 667//1476 1114//1476 1113//1476
+f 667//1477 1118//1477 1122//1477
+f 1114//1478 1122//1478 1084//1478
+f 1123//1479 1124//1479 1125//1479 1126//1479 1127//1479
+f 1128//1480 1129//1480 1130//1480 1131//1480
+f 1132//1481 1128//1481 1131//1481 1133//1481
+f 1134//1482 1125//1482 1128//1482 1132//1482
+f 1129//1483 1128//1483 1124//1483
+f 1124//1484 1128//1484 1125//1484
+f 1135//1485 1102//1485 1136//1485 1137//1485
+f 1138//1486 1139//1486 671//1486 1140//1486 1141//1486
+f 1142//1487 1100//1487 671//1487 670//1487
+f 1143//1488 1144//1488 1145//1488 1146//1488
+f 1147//1489 1143//1489 1146//1489
+f 1147//1490 675//1491 674//1492
+f 703//1493 702//1493 1148//1493 1149//1493 1150//1493 1151//1493
+f 679//1494 1148//1494 1152//1494
+f 679//1495 1152//1495 1153//1495
+f 686//1496 685//1496 1154//1496
+f 1155//1497 1156//1497 1157//1497 1158//1497
+f 1159//1498 1160//1498 1155//1498 1158//1498 1161//1498
+f 1162//1499 1163//1499 1164//1499 1165//1499
+f 1166//1500 1156//1500 1155//1500 1160//1500
+f 1162//1501 1167//1501 1168//1501
+f 1169//1502 1168//1502 1170//1502 1171//1502
+f 1168//1503 1160//1503 1162//1503
+f 1172//1504 1173//1504 694//1504 1174//1504
+f 1175//1505 1171//1505 1170//1505 1173//1505 1176//1505
+f 1173//1506 1170//1506 694//1506
+f 1170//1507 1177//1507 694//1507
+f 1178//1508 1179//1508 1177//1508 1167//1508
+f 697//1509 1180//1509 1181//1509 695//1509
+f 1182//1510 1180//1510 1183//1510 1184//1510
+f 700//1511 699//1511 697//1511 696//1511
+f 697//1512 699//1512 1183//1512
+f 1185//1513 707//1513 709//1513 711//1513
+f 681//1514 679//1514 1186//1514
+f 1187//1515 1186//1515 1188//1515
+f 1188//1516 1153//1516 1152//1516
+f 1186//1517 1153//1517 1188//1517
+f 1189//1518 714//1518 1190//1518 1191//1518
+f 1192//1519 714//1519 713//1519 1193//1519
+f 1194//1520 1167//1520 1195//1520
+f 1195//1521 1167//1521 1162//1521 1196//1521
+f 1197//1522 1198//1522 1167//1522 1194//1522
+f 1199//1523 1200//1523 1201//1523
+f 1202//1524 1200//1524 1203//1524
+f 1200//1525 1204//1525 1205//1525 1203//1525
+f 1206//1526 1207//1526 1208//1526
+f 1207//1527 1209//1527 720//1527
+f 1210//1528 1211//1528 1206//1528
+f 1212//1529 1192//1529 1193//1529 1213//1529
+f 1191//1530 1190//1530 1214//1530
+f 728//1531 734//1531 733//1531 729//1531
+f 740//1532 1215//1532 728//1532
+f 734//1533 1215//1533 1216//1533
+f 1217//1534 1216//1534 1215//1534
+f 1218//1535 743//1535 742//1535
+f 1210//1536 1208//1536 1218//1536
+f 1210//1537 1218//1537 742//1537
+f 1219//1538 1220//1538 1221//1538
+f 1222//1539 1223//1539 1224//1539 746//1539 745//1539
+f 1225//1540 1221//1540 1220//1540 1226//1540
+f 1227//1541 1221//1541 1228//1541 1229//1541
+f 1217//1542 1230//1542 1231//1542 755//1542
+f 1232//1543 1233//1543 1234//1543
+f 1235//1544 1236//1544 1237//1544 1238//1544
+f 1237//1545 1236//1545 1239//1545 1240//1545
+f 1241//1546 1234//1546 1233//1546 1242//1546
+f 758//1547 1243//1547 1241//1547
+f 1243//1548 1244//1548 1245//1548
+f 1239//1549 1246//1549 1240//1549
+f 1244//1550 1239//1550 1236//1550
+f 1247//1551 1248//1551 1249//1551
+f 1250//1552 1251//1552 1252//1552
+f 1251//1553 1253//1553 1254//1553 1252//1553
+f 1255//1554 1250//1554 1252//1554 1256//1554
+f 1255//1555 1256//1555 1257//1555 1258//1555
+f 1256//1556 1252//1556 1254//1556
+f 1259//1557 1260//1557 1261//1557
+f 768//1558 1259//1558 1261//1558 769//1558
+f 761//1559 1261//1559 1260//1559 762//1559
+f 1262//1560 769//1560 1263//1560 1264//1560
+f 1264//1561 1263//1561 771//1561 773//1561
+f 1263//1562 761//1562 1265//1562
+f 1263//1563 1266//1563 771//1563
+f 1267//1564 1268//1564 1269//1564
+f 1270//1565 1271//1565 1272//1565
+f 1273//1566 1274//1566 1275//1566
+f 1274//1567 1276//1567 1277//1567
+f 1278//1568 1279//1568 1280//1568 774//1568 776//1568
+f 1281//1569 1280//1569 1282//1569 1283//1569
+f 1284//1570 774//1570 1276//1570 1285//1570
+f 1286//1571 1287//1571 1288//1571 1289//1571
+f 1290//1572 1291//1572 1292//1572
+f 1293//1573 1289//1573 1288//1573 1294//1573
+f 1295//1574 1296//1574 1297//1574 1298//1574
+f 1296//1575 1299//1575 1297//1575
+f 796//1576 1296//1576 1295//1576 797//1576
+f 1254//1577 1291//1577 1300//1577
+f 1301//1578 778//1578 782//1578
+f 1302//1579 782//1579 781//1579 1303//1579
+f 1265//1580 1302//1580 785//1580
+f 1304//1581 1305//1581 1306//1581 1307//1581
+f 1308//1582 1269//1582 1304//1582
+f 1267//1583 1309//1583 1268//1583
+f 1310//1584 1307//1584 1311//1584
+f 1312//1585 1313//1585 1307//1585 1310//1585
+f 1314//1586 1267//1586 1269//1586
+f 1315//1587 1267//1587 1314//1587
+f 1316//1588 1314//1588 1313//1588
+f 1313//1589 1308//1589 1307//1589
+f 1296//1590 1317//1590 1299//1590
+f 1318//1591 1319//1591 1320//1591
+f 799//1592 1319//1592 1321//1592 800//1592
+f 1319//1593 799//1593 1320//1593
+f 1322//1594 1323//1594 1324//1594
+f 1324//1595 803//1595 1325//1595 1326//1595
+f 1327//1596 1328//1596 1324//1596 1323//1596 1329//1596
+f 1324//1597 1328//1597 1330//1597
+f 1331//1598 1332//1598 1333//1598
+f 1334//1599 1335//1599 1333//1599
+f 1336//1600 1331//1600 1333//1600 1337//1600 1338//1600
+f 1333//1601 1339//1601 1337//1601
+f 1340//1602 1341//1602 1342//1602 1343//1602
+f 1341//1603 1344//1603 1345//1603 1346//1603
+f 1347//1604 1328//1604 1327//1604 1348//1604
+f 1349//1605 1328//1605 1347//1605
+f 1330//1606 1328//1606 1349//1606
+f 1330//1607 1349//1607 1350//1607
+f 1351//1608 1352//1608 1350//1608
+f 1353//1609 801//1609 803//1609 1330//1609 1354//1609
+f 1355//1610 1356//1610 1357//1610 1358//1610
+f 1356//1611 1359//1611 1360//1611 1357//1611
+f 1361//1612 1357//1612 1360//1612
+f 1362//1613 1363//1613 1364//1613
+f 1343//1614 1365//1614 1340//1614
+f 1366//1615 1367//1615 1368//1615
+f 1341//1616 1369//1616 1344//1616
+f 1370//1617 1371//1617 1369//1617
+f 1370//1618 1366//1618 1371//1618
+f 1372//1619 1373//1619 1374//1619
+f 1375//1620 1376//1620 1372//1620 1374//1620 1377//1620
+f 1372//1621 1378//1621 1373//1621
+f 1379//1622 1378//1622 1372//1622 1376//1622 1380//1622 1381//1622
+f 1382//1623 1383//1623 1384//1623 970//1623 1385//1623
+f 1385//1624 970//1624 805//1624 804//1624
+f 1386//1625 1387//1625 1384//1625 1388//1625
+f 1389//1626 1390//1626 807//1626
+f 1390//1627 1391//1627 812//1627
+f 1390//1628 1389//1628 1392//1628
+f 1389//1629 1393//1629 1392//1629
+f 1394//1630 1395//1630 816//1630 1396//1630 1397//1630
+f 1398//1631 816//1631 1399//1631
+f 1393//1632 1400//1632 1401//1632
+f 1393//1633 807//1633 1400//1633
+f 1392//1634 1393//1634 1402//1634
+f 1401//1635 1403//1635 1404//1635
+f 1391//1636 1402//1636 1401//1636
+f 1405//1637 1406//1637 1407//1637 1408//1637 1398//1637 1409//1637
+f 1410//1638 1411//1638 1412//1638 1413//1638 1414//1638
+f 1415//1639 1416//1639 1409//1639 1398//1639
+f 1399//1640 1415//1640 1398//1640
+f 1415//1641 1395//1641 1410//1641
+f 1417//1642 1416//1642 1415//1642 1410//1642 1414//1642
+f 828//1643 1418//1643 823//1643
+f 1419//1644 1420//1644 1418//1644
+f 831//1645 830//1645 1420//1645
+f 1421//1646 819//1646 1422//1646
+f 1423//1647 820//1647 819//1647
+f 1424//1648 1425//1648 1426//1648
+f 1421//1649 1427//1649 819//1649
+f 1427//1650 1423//1650 819//1650
+f 1423//1651 1428//1651 820//1651
+f 1429//1652 1421//1652 1430//1652
+f 1425//1653 1427//1653 1429//1653
+f 1419//1654 828//1654 827//1654 1431//1654
+f 1419//1655 1431//1655 1432//1655 835//1655
+f 1433//1656 831//1656 835//1656 834//1656 1434//1656
+f 831//1657 1420//1657 835//1657
+f 1435//1658 1436//1658 1437//1658
+f 1438//1659 1439//1659 1440//1659 839//1659
+f 1441//1660 1442//1660 1443//1660 1444//1660
+f 1445//1661 1446//1661 845//1661 844//1661
+f 1447//1662 856//1662 1448//1662
+f 856//1663 1447//1663 857//1663
+f 1449//1664 1450//1664 1447//1664 853//1664 852//1664
+f 1451//1665 1452//1665 1453//1665 1454//1665
+f 1452//1666 1455//1666 1453//1666
+f 1456//1667 862//1667 861//1667 1453//1667 1455//1667
+f 1457//1668 1458//1668 1459//1668
+f 1460//1669 1461//1669 867//1669
+f 866//1670 1460//1670 867//1670
+f 1462//1671 868//1671 1463//1671
+f 1460//1672 1463//1672 1461//1672
+f 1462//1673 1463//1673 1460//1673
+f 1464//1674 1465//1674 1466//1674
+f 869//1675 871//1675 1466//1675 1465//1675 1467//1675
+f 1468//1676 1469//1676 871//1676 870//1676 1470//1676
+f 1469//1677 1468//1677 878//1677 877//1677
+f 1471//1678 880//1678 1472//1678
+f 871//1679 1473//1679 1466//1679
+f 1473//1680 1472//1680 872//1680
+f 1471//1681 1473//1681 1469//1681
+f 1471//1682 1472//1682 1473//1682
+f 1474//1683 1475//1683 1472//1683 1476//1683
+f 1476//1684 1472//1684 880//1684 1477//1684
+f 1478//1685 1479//1685 1480//1685 1481//1685
+f 1482//1686 881//1686 1483//1686
+f 1484//1687 1482//1687 1483//1687
+f 1485//1688 882//1688 1482//1688
+f 1486//1689 1482//1689 1484//1689
+f 1486//1690 1485//1690 1482//1690
+f 882//1691 1487//1691 1488//1691 1489//1691
+f 1490//1692 1491//1692 1487//1692
+f 1487//1693 882//1693 1485//1693
+f 1490//1694 1485//1694 1486//1694
+f 930//1695 1492//1695 1493//1695 931//1695
+f 1492//1696 930//1696 1494//1696
+f 887//1697 1478//1697 1495//1697 885//1697
+f 1496//1698 1479//1698 1478//1698
+f 1497//1699 1498//1699 1499//1699
+f 1500//1700 1501//1700 1499//1700 1498//1700
+f 1502//1701 1503//1701 1499//1701 1501//1701
+f 1499//1702 1496//1702 1497//1702
+f 1504//1703 1479//1703 1503//1703 1505//1703
+f 1506//1704 1503//1704 1502//1704
+f 1496//1705 1503//1705 1479//1705
+f 890//1706 1507//1706 1508//1706 888//1706
+f 1509//1707 1510//1707 1511//1707 1512//1707
+f 1513//1708 1507//1708 1510//1708 1509//1708
+f 1514//1709 894//1709 893//1709
+f 1515//1710 1516//1710 1517//1710 1518//1710 1519//1710
+f 1520//1711 1521//1711 1522//1711 1517//1711
+f 1516//1712 1523//1712 1520//1712
+f 1243//1713 758//1713 1524//1713
+f 1525//1714 1526//1714 1527//1714
+f 1528//1715 1529//1715 1530//1715 1531//1715
+f 1530//1716 1529//1716 1532//1716
+f 1533//1717 1534//1717 1535//1717 1536//1717
+f 1536//1718 1535//1718 1537//1718
+f 1538//1719 1536//1719 1537//1719
+f 1539//1720 1540//1720 1541//1720 893//1720 1542//1720
+f 1543//1721 1544//1721 1545//1721 1546//1721
+f 1541//1722 1514//1722 893//1722
+f 1547//1723 1548//1723 1549//1723
+f 1549//1724 1514//1724 1541//1724
+f 1550//1725 895//1725 894//1725 1548//1725 1551//1725
+f 1552//1726 898//1726 897//1726 1553//1726
+f 902//1727 1554//1727 1555//1727 903//1727
+f 1555//1728 1556//1728 1557//1728
+f 1556//1729 1558//1729 1559//1729
+f 1560//1730 1557//1730 1556//1730
+f 1560//1731 1556//1731 906//1731
+f 1561//1732 1560//1732 1562//1732
+f 1557//1733 1560//1733 1563//1733
+f 908//1734 910//1734 1564//1734 1565//1734 1566//1734
+f 1567//1735 1568//1735 910//1735
+f 1569//1736 1568//1736 1567//1736
+f 1570//1737 1535//1737 1534//1737 1571//1737
+f 1572//1738 1573//1738 1574//1738
+f 1572//1739 1575//1739 1538//1739 1573//1739
+f 1576//1740 1577//1740 1578//1740 1579//1740
+f 1570//1741 1537//1741 1535//1741
+f 1580//1742 1577//1742 1581//1742
+f 1578//1743 1577//1743 1570//1743
+f 1580//1744 1537//1744 1570//1744
+f 1580//1745 1573//1745 1538//1745
+f 912//1746 911//1746 1582//1746
+f 897//1747 912//1747 1553//1747
+f 1583//1748 1584//1748 1585//1748 1586//1748
+f 1585//1749 1584//1749 1587//1749 1588//1749
+f 1589//1750 1590//1750 1591//1750 922//1750
+f 1589//1751 1587//1751 1584//1751
+f 1587//1752 1589//1752 1592//1752
+f 1569//1753 1564//1753 1568//1753
+f 921//1754 1593//1754 1594//1754 922//1754
+f 1592//1755 915//1755 1587//1755
+f 1595//1756 1596//1756 1597//1756 1598//1756
+f 1599//1757 1600//1757 1601//1757 1602//1757
+f 1603//1758 1604//1758 1605//1758
+f 1606//1759 1607//1759 1608//1759 1599//1759
+f 1609//1760 1600//1760 1608//1760
+f 1608//1761 1603//1761 1610//1761
+f 1484//1762 1483//1762 927//1762
+f 1484//1763 927//1763 926//1763
+f 1611//1764 1490//1764 926//1764 925//1764
+f 1484//1765 926//1765 1490//1765
+f 1612//1766 1613//1766 1614//1766
+f 1615//1767 1616//1767 1617//1767 1494//1767
+f 1615//1768 1494//1768 930//1768
+f 1618//1769 1619//1769 1620//1769 1621//1769
+f 1622//1770 1623//1770 1624//1770
+f 1625//1771 1626//1771 1627//1771
+f 1628//1772 1629//1772 1619//1772 1618//1772
+f 1629//1773 1628//1773 1623//1773 1622//1773
+f 1614//1774 1630//1774 1612//1774
+f 1619//1775 1627//1775 1626//1775 1620//1775
+f 1614//1776 1627//1776 1619//1776
+f 1631//1777 1612//1777 1632//1777
+f 1633//1778 1634//1778 1622//1778 1624//1778
+f 1632//1779 1612//1779 1630//1779 1635//1779
+f 1634//1780 1635//1780 1630//1780 1622//1780
+f 1636//1781 1637//1781 933//1781 1638//1781
+f 934//1782 1637//1782 1639//1782
+f 1640//1783 597//1783 596//1783
+f 967//1784 606//1784 605//1784
+f 966//1785 607//1785 606//1785
+f 616//1786 972//1786 971//1786 617//1786
+f 978//1787 980//1787 981//1787
+f 990//1788 1641//1788 991//1788
+f 623//1789 620//1789 619//1789
+f 1642//1790 1643//1790 1644//1790
+f 999//1791 998//1791 1645//1791
+f 1646//1792 1647//1792 1005//1792
+f 1006//1793 1005//1793 1647//1793
+f 1648//1794 1649//1794 1650//1794
+f 1651//1795 1011//1795 1010//1795
+f 1652//1796 1039//1796 1038//1796 1653//1796 1654//1796
+f 1036//1797 1655//1797 1656//1797
+f 1394//1798 1657//1798 1395//1798
+f 1658//1799 1659//1799 1042//1799
+f 1659//1800 1660//1800 1042//1800
+f 1042//1801 1041//1801 1661//1801 1658//1801
+f 1662//1802 1663//1802 1664//1802 1665//1802
+f 1666//1803 634//1803 633//1803
+f 632//1804 1049//1804 1052//1804 630//1804
+f 1057//1805 1056//1805 1667//1805
+f 1068//1806 638//1806 637//1806 1668//1806
+f 646//1807 645//1807 1078//1807
+f 1669//1808 1118//1808 1117//1808
+f 1092//1809 1670//1809 1093//1809
+f 1092//1810 647//1810 650//1810 1670//1810
+f 1671//1811 652//1811 651//1811
+f 1112//1812 660//1812 659//1812
+f 659//1813 658//1813 1105//1813
+f 1672//1814 662//1814 661//1814
+f 1673//1815 1116//1815 1115//1815 1674//1815 1675//1815
+f 1129//1816 1676//1816 1130//1816
+f 1126//1817 1125//1817 1134//1817
+f 1139//1818 672//1818 671//1818
+f 673//1819 1677//1819 674//1819
+f 1145//1820 1678//1820 1146//1820
+f 678//1821 1679//1821 1148//1821 679//1821
+f 1680//1822 687//1822 686//1822
+f 1174//1823 694//1823 693//1823
+f 1184//1824 1183//1824 699//1824 698//1824
+f 1681//1825 706//1825 705//1825
+f 708//1826 707//1826 1185//1826
+f 682//1827 681//1827 1682//1827
+f 1683//1828 1684//1828 1685//1828
+f 1686//1829 1187//1829 1687//1829 1688//1829
+f 1682//1830 681//1830 1684//1830 1683//1830
+f 1189//1831 715//1831 714//1831
+f 1689//1832 1200//1832 1202//1832 1690//1832
+f 721//1833 720//1833 727//1833
+f 1691//1834 743//1834 719//1834 725//1834 1692//1834
+f 742//1835 741//1835 1693//1835
+f 1694//1836 1204//1836 1695//1836
+f 1696//1837 1697//1837 718//1837 717//1837 1698//1837
+f 1205//1838 1204//1838 1694//1838
+f 737//1839 736//1839 754//1839
+f 738//1840 740//1840 728//1840 735//1840 1699//1840 1700//1840
+f 743//1841 1691//1841 744//1841
+f 1223//1842 1701//1842 1224//1842
+f 1231//1843 756//1843 755//1843
+f 758//1844 1702//1844 759//1844
+f 1246//1845 1239//1845 1703//1845
+f 1262//1846 770//1846 769//1846
+f 771//1847 1704//1847 772//1847
+f 1284//1848 775//1848 774//1848
+f 1705//1849 1706//1849 1707//1849
+f 783//1850 782//1850 778//1850 777//1850
+f 1704//1851 771//1851 1708//1851 1709//1851
+f 1710//1852 1268//1852 1711//1852 1712//1852
+f 1713//1853 1714//1853 1711//1853 1268//1853 1309//1853
+f 1713//1854 1309//1854 1715//1854
+f 1313//1855 1716//1855 1717//1855
+f 1321//1856 1319//1856 1318//1856 1718//1856 1719//1856
+f 1720//1857 1718//1857 1318//1857
+f 1326//1858 1322//1858 1324//1858
+f 1325//1859 803//1859 802//1859
+f 1721//1860 1335//1860 1334//1860 1722//1860 1723//1860
+f 1721//1861 1724//1861 1335//1861
+f 1725//1862 1722//1862 1334//1862
+f 1348//1863 1726//1863 1347//1863
+f 1347//1864 1726//1864 1727//1864
+f 1728//1865 1358//1865 1357//1865
+f 1367//1866 1366//1866 1729//1866
+f 1730//1867 1387//1867 1731//1867 1732//1867
+f 1733//1868 1734//1868 1735//1868
+f 807//1869 810//1869 1736//1869
+f 811//1870 809//1870 808//1870
+f 1404//1871 1737//1871 815//1871 812//1871
+f 818//1872 1396//1872 816//1872
+f 1422//1873 819//1873 822//1873 1738//1873
+f 1400//1874 1739//1874 1740//1874
+f 1400//1875 807//1875 1736//1875 1741//1875 1739//1875
+f 1742//1876 1401//1876 1400//1876 1740//1876
+f 1743//1877 1403//1877 1401//1877 1742//1877
+f 1744//1878 1403//1878 1743//1878
+f 1737//1879 1404//1879 1403//1879 1744//1879
+f 1745//1880 1406//1880 1405//1880 1746//1880
+f 1412//1881 1747//1881 1748//1881 1749//1881 1413//1881
+f 826//1882 828//1882 823//1882 825//1882 1750//1882
+f 1751//1883 1752//1883 830//1883 829//1883 1753//1883
+f 832//1884 831//1884 1433//1884
+f 1754//1885 1755//1885 1756//1885
+f 1738//1886 1757//1886 1422//1886
+f 1758//1887 1428//1887 1759//1887
+f 1756//1888 1422//1888 1757//1888 1754//1888
+f 1760//1889 833//1889 820//1889 1428//1889 1758//1889
+f 1761//1890 1430//1890 1756//1890 1755//1890 1762//1890
+f 1430//1891 1761//1891 1763//1891
+f 836//1892 835//1892 1432//1892
+f 1764//1893 842//1893 841//1893
+f 1765//1894 846//1894 845//1894 840//1894 843//1894
+f 1766//1895 1443//1895 848//1895 847//1895
+f 853//1896 1448//1896 1767//1896 851//1896
+f 858//1897 857//1897 1768//1897
+f 1448//1898 856//1898 855//1898 1767//1898
+f 1451//1899 1454//1899 1769//1899 1770//1899
+f 1771//1900 1458//1900 1772//1900 1773//1900 1774//1900
+f 1775//1901 1459//1901 1458//1901 1771//1901
+f 1776//1902 1777//1902 1459//1902 1775//1902
+f 1778//1903 1773//1903 1772//1903 1779//1903 1780//1903
+f 867//1904 1461//1904 868//1904
+f 1463//1905 868//1905 1461//1905
+f 1462//1906 866//1906 868//1906
+f 1477//1907 880//1907 879//1907
+f 1781//1908 1247//1908 1249//1908
+f 1483//1909 1782//1909 1783//1909
+f 1784//1910 927//1910 1483//1910 1783//1910 1785//1910
+f 1483//1911 881//1911 884//1911 1782//1911
+f 1784//1912 928//1912 927//1912
+f 882//1913 1489//1913 1786//1913 883//1913
+f 1787//1914 1491//1914 1788//1914 1789//1914 1790//1914
+f 1791//1915 1493//1915 1492//1915
+f 1792//1916 1498//1916 887//1916 886//1916
+f 1500//1917 1498//1917 1792//1917
+f 1793//1918 1794//1918 1523//1918 1795//1918 1796//1918
+f 1797//1919 1517//1919 1522//1919 1798//1919
+f 1799//1920 1524//1920 1800//1920
+f 1801//1921 1802//1921 1532//1921
+f 1803//1922 1533//1922 1536//1922
+f 1536//1923 1804//1923 1803//1923
+f 892//1924 1542//1924 893//1924
+f 1545//1925 1805//1925 1546//1925
+f 1806//1926 1551//1926 1548//1926 1807//1926
+f 1545//1927 1808//1927 1805//1927
+f 912//1928 897//1928 900//1928 913//1928
+f 1565//1929 1564//1929 1809//1929
+f 1570//1930 1571//1930 1810//1930
+f 1574//1931 1573//1931 1811//1931
+f 1811//1932 1573//1932 1812//1932 1813//1932
+f 1579//1933 1578//1933 1814//1933
+f 1815//1934 1581//1934 1816//1934
+f 1591//1935 923//1935 922//1935
+f 1817//1936 1818//1936 1819//1936
+f 920//1937 1819//1937 1818//1937 918//1937
+f 1820//1938 1821//1938 1822//1938 1823//1938
+f 1824//1939 916//1939 915//1939 1825//1939
+f 1600//1940 1826//1940 1827//1940 1601//1940
+f 1828//1941 1829//1941 1613//1941
+f 1830//1942 1494//1942 1617//1942 1831//1942
+f 936//1943 1638//1943 933//1943
+f 1832//1944 935//1944 934//1944
+f 1833//1945 1639//1945 1834//1945
+f 937//1946 941//1946 593//1946 592//1946
+f 937//1947 592//1947 938//1947
+f 939//1948 938//1948 1835//1948
+f 1835//1949 938//1949 592//1949 594//1949
+f 596//1950 1836//1950 1837//1950 1640//1950
+f 943//1951 947//1951 944//1951
+f 944//1952 946//1952 1838//1952 942//1952
+f 1838//1953 946//1953 1839//1953
+f 1839//1954 946//1954 948//1954
+f 1837//1955 1836//1955 599//1955 601//1955
+f 596//1956 595//1956 1836//1956
+f 595//1957 599//1957 1836//1957
+f 1840//1958 951//1958 950//1958 1841//1958
+f 951//1959 1842//1959 952//1959
+f 951//1960 1840//1960 1842//1960
+f 954//1961 1843//1961 955//1961
+f 961//1962 955//1962 1843//1962 1844//1962 1845//1962 1846//1962 1847//1962
+f 1848//1963 953//1963 955//1963 956//1963 959//1963
+f 955//1964 961//1964 956//1964
+f 603//1965 960//1965 961//1965
+f 962//1966 957//1966 963//1966
+f 964//1967 960//1967 1849//1967
+f 960//1968 957//1968 956//1968
+f 1844//1969 1850//1969 961//1969 1847//1969 1851//1969
+f 1852//1970 604//1970 603//1970 961//1970 1850//1970
+f 1849//1971 960//1971 603//1971 602//1971
+f 965//1972 606//1972 967//1972
+f 605//1973 607//1973 968//1973
+f 968//1974 966//1974 965//1974
+f 1387//1975 1853//1975 1854//1975
+f 608//1976 1853//1976 1855//1976 609//1976
+f 1856//1977 806//1977 805//1977 608//1977 611//1977
+f 608//1978 969//1979 1853//1980
+f 969//1981 1854//1982 1853//1983
+f 613//1984 974//1984 973//1984 614//1984
+f 974//1985 617//1985 971//1985
+f 612//1986 974//1986 613//1986
+f 1857//1987 976//1987 975//1987
+f 978//1988 976//1988 1857//1988 979//1988
+f 1858//1989 988//1989 987//1989
+f 987//1990 1859//1990 1860//1990 1858//1990
+f 1007//1991 987//1991 986//1991
+f 1641//1992 1861//1992 991//1992
+f 1861//1993 1862//1993 1863//1993 991//1993
+f 1648//1994 1650//1994 1863//1994 1862//1994 1864//1994
+f 991//1995 1863//1995 994//1995
+f 1863//1996 992//1996 994//1996
+f 1644//1997 618//1997 621//1997 1642//1997
+f 996//1998 1644//1998 1643//1998 997//1998
+f 1865//1999 618//1999 1644//1999
+f 1865//2000 619//2001 618//2002
+f 996//2003 1865//2003 1644//2003
+f 1865//2004 1001//2005 619//2006
+f 1865//2007 996//2007 1001//2007
+f 1645//2008 998//2008 625//2008 624//2008
+f 1866//2009 1002//2009 996//2009 995//2009
+f 1002//2010 1866//2010 626//2010 625//2010
+f 982//2011 1001//2011 1000//2011
+f 996//2012 1002//2012 1001//2012
+f 629//2013 1867//2013 627//2013
+f 1868//2014 1646//2014 1005//2014 629//2014 628//2014
+f 1869//2015 1004//2015 1003//2015
+f 629//2016 986//2016 985//2016 1867//2016
+f 1859//2017 987//2017 1870//2017 1871//2017
+f 1869//2018 1871//2018 1870//2018 1004//2018
+f 1004//2019 1870//2019 1007//2019
+f 1004//2020 1007//2020 1005//2020
+f 629//2021 1007//2021 986//2021
+f 1007//2022 1870//2022 987//2022
+f 993//2023 992//2023 1872//2023
+f 1649//2024 1009//2024 1008//2024 1650//2024
+f 1872//2025 992//2025 1011//2025 1651//2025
+f 1008//2026 1863//2026 1650//2026
+f 1008//2027 1011//2027 992//2027
+f 1008//2028 992//2028 1863//2028
+f 1014//2029 1019//2029 1012//2029
+f 1873//2030 1016//2030 1015//2030
+f 1016//2031 1873//2031 1018//2031
+f 1038//2032 1044//2032 1874//2032 1653//2032
+f 1875//2033 1876//2033 1030//2033
+f 1025//2034 1024//2034 1877//2034 1878//2034
+f 1877//2035 1024//2035 1879//2035
+f 1030//2036 1021//2036 1020//2036 1875//2036
+f 1880//2037 1879//2037 1024//2037 1028//2037 1027//2037
+f 1028//2038 1024//2038 1021//2038
+f 1881//2039 1029//2039 1028//2039 1030//2039 1882//2039
+f 1032//2040 1883//2040 1033//2040
+f 1036//2041 1031//2041 1035//2041 1655//2041
+f 1883//2042 1032//2042 1036//2042 1656//2042
+f 1410//2043 1395//2043 1657//2043 1884//2043
+f 1884//2044 1411//2044 1410//2044
+f 1885//2045 1043//2045 1042//2045 1660//2045 1886//2045
+f 1043//2046 1885//2046 1664//2046 1663//2046
+f 1038//2047 1037//2047 1045//2047
+f 1043//2048 1045//2048 1037//2048
+f 1887//2049 1043//2049 1663//2049
+f 1043//2050 1887//2050 1045//2050
+f 1887//2051 1044//2051 1045//2051
+f 1874//2052 1044//2052 1888//2052 1889//2052
+f 1890//2053 1891//2053 1892//2053 1663//2053 1893//2053
+f 1663//2054 1662//2054 1893//2054
+f 1888//2055 1044//2055 1892//2055 1891//2055
+f 1887//2056 1892//2056 1044//2056
+f 1887//2057 1663//2057 1892//2057
+f 1894//2058 1882//2058 1030//2058 1876//2058
+f 1055//2059 1051//2059 1050//2059
+f 1667//2060 1056//2060 634//2060 1666//2060
+f 635//2061 634//2061 1061//2061 1062//2061
+f 1059//2062 1050//2062 1049//2062
+f 1059//2063 1056//2063 1050//2063
+f 1895//2064 1063//2064 1065//2064
+f 1895//2065 1065//2065 1066//2065
+f 1067//2066 1065//2066 1064//2066
+f 1071//2067 1896//2067 641//2067 640//2067
+f 1896//2068 1071//2068 1072//2068 1897//2068
+f 638//2069 1070//2069 1071//2069
+f 1075//2070 1074//2070 1073//2070 1076//2070
+f 643//2071 1074//2071 645//2071
+f 1074//2072 1075//2072 645//2072
+f 647//2073 1095//2073 1898//2073 648//2073
+f 1899//2074 1900//2074 1901//2074 1902//2074
+f 1095//2075 1899//2075 1902//2075 1898//2075
+f 1095//2076 1094//2076 1899//2076
+f 1903//2077 1900//2077 1899//2077 1094//2077 1107//2077
+f 1106//2078 1097//2078 657//2078 1079//2078 1904//2078
+f 1083//2079 1905//2079 1080//2079
+f 1115//2080 1080//2080 1905//2080 1674//2080
+f 1115//2081 1084//2081 1080//2081
+f 1906//2082 1082//2082 1081//2082
+f 1906//2083 1081//2083 1118//2083 1669//2083
+f 1122//2084 1081//2084 1084//2084
+f 1081//2085 1122//2085 1118//2085
+f 1907//2086 1087//2086 1086//2086 652//2086 1671//2086
+f 1102//2087 1086//2087 1085//2087 1136//2087
+f 1092//2088 1095//2088 647//2088
+f 652//2089 1100//2089 1109//2089
+f 1091//2090 1095//2090 1092//2090
+f 1097//2091 1094//2091 1091//2091
+f 1098//2092 1099//2092 652//2092
+f 1102//2093 1098//2093 1086//2093
+f 655//2094 657//2094 662//2094 1672//2094
+f 652//2095 1109//2095 1908//2095 665//2095
+f 1110//2096 1109//2096 1100//2096 1142//2096
+f 1104//2097 1103//2097 663//2097 662//2097
+f 1099//2098 671//2098 1100//2098
+f 1108//2099 662//2099 657//2099
+f 1109//2100 1097//2100 1096//2100 1908//2100
+f 1104//2101 1108//2101 1109//2101
+f 668//2102 667//2102 1121//2102
+f 667//2103 1122//2103 1114//2103
+f 1129//2104 1124//2104 1123//2104 1676//2104
+f 1140//2105 671//2105 1099//2105
+f 1135//2106 1909//2106 1101//2106 1102//2106
+f 1910//2107 1101//2107 1909//2107 1911//2107
+f 1141//2108 1140//2108 1101//2108 1910//2108
+f 1101//2109 1140//2109 1099//2109
+f 1147//2110 1146//2110 1678//2110 1912//2110
+f 675//2111 1147//2111 1912//2111 676//2111
+f 1147//2112 674//2113 1143//2114
+f 1144//2115 1143//2115 674//2115 1677//2115
+f 1679//2116 1149//2116 1148//2116
+f 1148//2117 702//2117 1152//2117
+f 689//2118 688//2118 685//2118 684//2118
+f 685//2119 688//2119 1154//2119
+f 1680//2120 686//2120 1154//2120 1913//2120
+f 1913//2121 1154//2121 688//2121 691//2121
+f 1159//2122 1914//2122 1160//2122
+f 1162//2123 1160//2123 1914//2123 1163//2123
+f 1160//2124 1168//2124 1169//2124 1166//2124
+f 1168//2125 1167//2125 1177//2125
+f 1172//2126 1176//2126 1173//2126
+f 1915//2127 692//2127 694//2127 1177//2127 1179//2127
+f 1177//2128 1170//2128 1168//2128
+f 1182//2129 1181//2129 1180//2129
+f 1180//2130 697//2130 1183//2130
+f 709//2131 1916//2131 1917//2131 710//2131
+f 1681//2132 1917//2132 1916//2132 706//2132
+f 706//2133 1916//2133 707//2133
+f 709//2134 707//2134 1916//2134
+f 1685//2135 1684//2135 1187//2135 1686//2135
+f 701//2136 1918//2136 1188//2136 702//2136
+f 1188//2137 1918//2137 1687//2137 1187//2137
+f 1186//2138 1684//2138 681//2138
+f 1684//2139 1186//2139 1187//2139
+f 1153//2140 1186//2140 679//2140
+f 702//2141 1188//2141 1152//2141
+f 1190//2142 714//2142 1192//2142
+f 1196//2143 1162//2143 1165//2143
+f 1167//2144 1198//2144 1178//2144
+f 1689//2145 1919//2145 1201//2145 1200//2145
+f 716//2146 718//2146 1201//2146 1919//2146 1920//2146
+f 1697//2147 1201//2147 718//2147
+f 1697//2148 1199//2148 1201//2148
+f 1199//2149 1204//2149 1200//2149
+f 1207//2150 720//2150 719//2150
+f 1208//2151 719//2151 743//2151
+f 719//2152 1208//2152 1207//2152
+f 1208//2153 1210//2153 1206//2153
+f 1921//2154 726//2154 720//2154 1209//2154 1922//2154
+f 1922//2155 1209//2155 1211//2155 1923//2155
+f 1693//2156 1923//2156 1211//2156 742//2156
+f 1210//2157 742//2157 1211//2157
+f 1207//2158 1206//2158 1209//2158
+f 1206//2159 1211//2159 1209//2159
+f 1214//2160 1190//2160 1192//2160 1212//2160
+f 1227//2161 1219//2161 1221//2161
+f 1924//2162 1695//2162 1204//2162 1697//2162 1696//2162
+f 1697//2163 1204//2163 1199//2163
+f 1216//2164 736//2164 734//2164
+f 1217//2165 736//2165 1216//2165
+f 734//2166 728//2166 1215//2166
+f 1218//2167 1208//2167 743//2167
+f 1925//2168 749//2168 748//2168 1224//2168 1701//2168
+f 750//2169 1225//2169 1226//2169 751//2169
+f 1224//2170 748//2170 746//2170
+f 1225//2171 750//2171 1228//2171
+f 1229//2172 1228//2172 750//2172 752//2172
+f 1221//2173 1225//2173 1228//2173
+f 740//2174 739//2174 1926//2174
+f 1230//2175 1217//2175 740//2175 1926//2175
+f 740//2176 1217//2176 1215//2176
+f 1217//2177 755//2177 736//2177
+f 1235//2178 1238//2178 1927//2178 1928//2178
+f 1234//2179 1235//2179 1928//2179 1232//2179
+f 758//2180 1241//2180 1242//2180 1702//2180
+f 1235//2181 1234//2181 1236//2181
+f 1243//2182 1524//2182 1239//2182
+f 1236//2183 1234//2183 1245//2183
+f 1245//2184 1234//2184 1241//2184
+f 1245//2185 1244//2185 1236//2185
+f 1243//2186 1239//2186 1244//2186
+f 1241//2187 1243//2187 1245//2187
+f 1703//2188 1239//2188 1524//2188 1799//2188
+f 1929//2189 1930//2189 1287//2189 1286//2189
+f 1257//2190 1256//2190 1287//2190 1930//2190
+f 1300//2191 1256//2191 1254//2191
+f 1300//2192 1287//2192 1256//2192
+f 765//2193 1931//2193 1932//2193 761//2193
+f 1932//2194 1931//2194 1706//2194 1705//2194
+f 1932//2195 1265//2195 761//2195
+f 1261//2196 1263//2196 769//2196
+f 1263//2197 1261//2197 761//2197
+f 1266//2198 1263//2198 1265//2198
+f 1269//2199 1268//2199 1710//2199 1933//2199
+f 1285//2200 1276//2200 1274//2200 1273//2200
+f 1270//2201 1272//2201 1281//2201 1934//2201 1935//2201
+f 1274//2202 1272//2202 1271//2202 1275//2202
+f 1272//2203 1274//2203 1281//2203
+f 1274//2204 1277//2204 1281//2204
+f 1291//2205 1936//2205 1292//2205
+f 1282//2206 1280//2206 1279//2206
+f 1283//2207 1934//2207 1281//2207
+f 1277//2208 774//2208 1280//2208
+f 1277//2209 1276//2209 774//2209
+f 1291//2210 1254//2210 1253//2210 1936//2210
+f 1281//2211 1277//2211 1280//2211
+f 1294//2212 1288//2212 1291//2212 1290//2212 1937//2212
+f 1300//2213 1288//2213 1287//2213
+f 1300//2214 1291//2214 1288//2214
+f 778//2215 1705//2215 1707//2215 779//2215
+f 1301//2216 782//2216 1302//2216
+f 778//2217 1301//2217 1705//2217
+f 1302//2218 1932//2218 1705//2218
+f 1302//2219 1265//2219 1932//2219
+f 1705//2220 1301//2220 1302//2220
+f 785//2221 784//2221 1708//2221 771//2221
+f 771//2222 1266//2222 785//2222
+f 786//2223 785//2223 1302//2223 1303//2223
+f 785//2224 1266//2224 1265//2224
+f 789//2225 788//2225 1269//2225 1938//2225 1939//2225
+f 1311//2226 1307//2226 1306//2226
+f 1304//2227 788//2227 793//2227
+f 1304//2228 1269//2228 788//2228
+f 1940//2229 1305//2229 1304//2229 793//2229 792//2229
+f 1307//2230 1308//2230 1304//2230
+f 1316//2231 1941//2231 1715//2231 1309//2231
+f 1941//2232 1316//2232 1313//2232 1717//2232
+f 1716//2233 1313//2233 1312//2233
+f 1269//2234 1933//2234 1938//2234
+f 1315//2235 1309//2235 1267//2235
+f 1316//2236 1309//2236 1315//2236
+f 1316//2237 1315//2237 1314//2237
+f 1308//2238 1314//2238 1269//2238
+f 1313//2239 1314//2239 1308//2239
+f 1317//2240 1296//2240 796//2240 795//2240
+f 1320//2241 1942//2241 1720//2241 1318//2241
+f 1943//2242 1942//2242 1320//2242 799//2242 798//2242
+f 1330//2243 803//2243 1324//2243
+f 1338//2244 1337//2244 1944//2244
+f 1945//2245 1339//2245 1946//2245
+f 1724//2246 1946//2246 1339//2246 1335//2246
+f 1944//2247 1337//2247 1339//2247 1945//2247
+f 1334//2248 1333//2248 1332//2248 1725//2248
+f 1335//2249 1339//2249 1333//2249
+f 1342//2250 1341//2250 1346//2250 1947//2250
+f 1344//2251 1948//2251 1345//2251
+f 1949//2252 1950//2252 1349//2252 1347//2252 1727//2252
+f 1951//2253 1351//2253 1350//2253 1349//2253 1950//2253
+f 1952//2254 1350//2254 1352//2254
+f 1354//2255 1330//2255 1350//2255 1952//2255
+f 1361//2256 1362//2256 1357//2256
+f 1953//2257 1954//2257 1364//2257
+f 1953//2258 1364//2258 1734//2258 1733//2258
+f 1363//2259 1734//2259 1364//2259
+f 1728//2260 1357//2260 1362//2260 1955//2260 1956//2260
+f 1955//2261 1362//2261 1364//2261 1954//2261 1957//2261
+f 1958//2262 1959//2262 1370//2262
+f 1370//2263 1340//2263 1365//2263 1958//2263
+f 1369//2264 1341//2264 1340//2264
+f 1370//2265 1369//2265 1340//2265
+f 1371//2266 1960//2266 1961//2266
+f 1962//2267 1960//2267 1371//2267 1366//2267 1368//2267
+f 1370//2268 1959//2268 1729//2268 1366//2268
+f 1948//2269 1344//2269 1371//2269 1961//2269
+f 1369//2270 1371//2270 1344//2270
+f 1963//2271 1964//2271 1965//2271
+f 1730//2272 1855//2272 1853//2272 1387//2272
+f 1386//2273 1731//2273 1387//2273
+f 1964//2274 1360//2274 1359//2274 1965//2274
+f 1964//2275 1361//2275 1360//2275
+f 1966//2276 1967//2276 1964//2276 1963//2276
+f 1735//2277 1734//2277 1964//2277 1967//2277
+f 1964//2278 1363//2278 1361//2278
+f 1363//2279 1964//2279 1734//2279
+f 1361//2280 1363//2280 1362//2280
+f 1968//2281 1388//2281 1384//2281 1969//2281
+f 1969//2282 1384//2282 1383//2282
+f 970//2283 1384//2283 969//2283
+f 1384//2284 1387//2284 1854//2284
+f 969//2285 1384//2285 1854//2285
+f 1390//2286 808//2286 807//2286
+f 1390//2287 812//2287 808//2287
+f 1389//2288 807//2288 1393//2288
+f 1392//2289 1391//2289 1390//2289
+f 1402//2290 1391//2290 1392//2290
+f 1404//2291 812//2291 1391//2291
+f 816//2292 1398//2292 1408//2292 817//2292
+f 816//2293 1395//2293 1399//2293
+f 1402//2294 1393//2294 1401//2294
+f 1401//2295 1404//2295 1391//2295
+f 1415//2296 1399//2296 1395//2296
+f 823//2297 1970//2297 1971//2297 824//2297
+f 1970//2298 830//2298 1752//2298 1971//2298
+f 1970//2299 823//2299 1418//2299
+f 828//2300 1419//2300 1418//2300
+f 1420//2301 830//2301 1970//2301
+f 1418//2302 1420//2302 1970//2302
+f 1421//2303 1422//2303 1756//2303
+f 1430//2304 1421//2304 1756//2304
+f 1972//2305 1759//2305 1428//2305 1425//2305 1424//2305
+f 1425//2306 1428//2306 1423//2306
+f 1973//2307 1426//2307 1425//2307 1430//2307 1763//2307
+f 1427//2308 1421//2308 1429//2308
+f 1425//2309 1423//2309 1427//2309
+f 1430//2310 1425//2310 1429//2310
+f 835//2311 1420//2311 1419//2311
+f 839//2312 1440//2312 837//2312
+f 1436//2313 1435//2313 1974//2313
+f 1437//2314 1436//2314 839//2314 838//2314
+f 839//2315 1436//2315 1438//2315
+f 1974//2316 1439//2316 1438//2316 1436//2316
+f 1975//2317 1976//2317 1442//2317
+f 1442//2318 1441//2318 1975//2318
+f 1446//2319 841//2319 840//2319
+f 1977//2320 1764//2320 841//2320 1446//2320 1445//2320
+f 845//2321 1446//2321 840//2321
+f 1978//2322 1444//2322 1443//2322 1766//2322
+f 848//2323 1442//2323 1976//2323 849//2323
+f 1442//2324 848//2324 1443//2324
+f 1447//2325 1448//2325 853//2325
+f 1768//2326 857//2326 1447//2326 1450//2326
+f 1454//2327 1453//2327 865//2327
+f 1453//2328 861//2328 865//2328
+f 865//2329 864//2329 1769//2329 1454//2329
+f 1457//2330 1772//2330 1458//2330
+f 1457//2331 1459//2331 1777//2331
+f 1780//2332 1779//2332 1777//2332 1776//2332
+f 1457//2333 1779//2333 1772//2333
+f 1457//2334 1777//2334 1779//2334
+f 1462//2335 1460//2335 866//2335
+f 1466//2336 872//2336 875//2336 1464//2336
+f 1466//2337 1473//2337 872//2337
+f 1469//2338 1473//2338 871//2338
+f 1471//2339 877//2339 880//2339
+f 877//2340 1471//2340 1469//2340
+f 1480//2341 1479//2341 1979//2341 1980//2341
+f 873//2342 872//2342 1472//2342 1475//2342
+f 1249//2343 1596//2343 1595//2343 1781//2343
+f 1249//2344 1526//2344 1596//2344
+f 881//2345 1482//2345 882//2345
+f 1488//2346 1487//2346 1491//2346 1787//2346
+f 1490//2347 1487//2347 1485//2347
+f 1492//2348 1494//2348 1830//2348 1791//2348
+f 1481//2349 1495//2349 1478//2349
+f 1497//2350 1478//2350 887//2350
+f 1498//2351 1497//2351 887//2351
+f 1497//2352 1496//2352 1478//2352
+f 1499//2353 1503//2353 1496//2353
+f 1479//2354 1504//2354 1979//2354
+f 1505//2355 1503//2355 1506//2355 1981//2355
+f 1510//2356 1507//2356 890//2356
+f 1508//2357 1507//2357 1513//2357 1982//2357
+f 1511//2358 1510//2358 890//2358 889//2358
+f 1518//2359 1517//2359 1797//2359
+f 1795//2360 1523//2360 1516//2360 1515//2360 1983//2360
+f 1794//2361 1984//2361 1521//2361 1520//2361 1523//2361
+f 1516//2362 1520//2362 1517//2362
+f 1800//2363 1524//2363 758//2363 757//2363
+f 1526//2364 1249//2364 1248//2364 1527//2364
+f 1802//2365 1985//2365 1530//2365 1532//2365
+f 1528//2366 1986//2366 1529//2366
+f 1531//2367 1530//2367 1985//2367
+f 1532//2368 1529//2368 1986//2368 1801//2368
+f 1536//2369 1538//2369 1575//2369 1804//2369
+f 1545//2370 1541//2370 1540//2370 1808//2370
+f 1987//2371 1807//2371 1548//2371
+f 1544//2372 1541//2372 1545//2372
+f 1547//2373 1988//2373 1987//2373 1548//2373
+f 1549//2374 894//2374 1514//2374
+f 1549//2375 1548//2375 894//2375
+f 1989//2376 1988//2376 1547//2376 1544//2376 1543//2376
+f 1541//2377 1544//2377 1549//2377
+f 1544//2378 1547//2378 1549//2378
+f 903//2379 1563//2379 1990//2379 1991//2379 901//2379
+f 1558//2380 1555//2380 1554//2380 1992//2380
+f 1992//2381 1993//2381 1558//2381
+f 1994//2382 1995//2382 1559//2382
+f 907//2383 906//2383 1559//2383 1995//2383
+f 1555//2384 1563//2384 903//2384
+f 1559//2385 1558//2385 1993//2385 1994//2385
+f 1562//2386 1560//2386 906//2386 905//2386
+f 1555//2387 1557//2387 1563//2387
+f 1555//2388 1558//2388 1556//2388
+f 1559//2389 906//2389 1556//2389
+f 1563//2390 1996//2390 1990//2390
+f 1996//2391 1563//2391 1560//2391 1561//2391
+f 909//2392 1997//2392 1567//2392 910//2392
+f 1819//2393 1567//2393 1997//2393 1817//2393
+f 1568//2394 1564//2394 910//2394
+f 1814//2395 1578//2395 1570//2395 1810//2395 1998//2395
+f 1812//2396 1573//2396 1581//2396 1815//2396
+f 1577//2397 1576//2397 1816//2397 1581//2397
+f 1570//2398 1577//2398 1580//2398
+f 1580//2399 1581//2399 1573//2399
+f 1537//2400 1580//2400 1538//2400
+f 1999//2401 1553//2401 912//2401 1582//2401
+f 1552//2402 1553//2402 1999//2402
+f 917//2403 1588//2403 1587//2403 915//2403
+f 1583//2404 1590//2404 1589//2404 1584//2404
+f 1594//2405 1589//2405 922//2405
+f 920//2406 919//2406 2000//2406
+f 920//2407 1567//2407 1819//2407
+f 2000//2408 2001//2408 1569//2408 920//2408
+f 920//2409 1569//2409 1567//2409
+f 1809//2410 1564//2410 1821//2410 1820//2410
+f 1569//2411 1821//2411 1564//2411
+f 1822//2412 1821//2412 1569//2412 2001//2412
+f 1594//2413 1593//2413 2002//2413
+f 2002//2414 2003//2414 1592//2414 1594//2414
+f 2003//2415 2004//2415 1825//2415 915//2415 1592//2415
+f 1594//2416 1592//2416 1589//2416
+f 1598//2417 1597//2417 2005//2417
+f 1526//2418 1597//2418 1596//2418
+f 2005//2419 1597//2419 1526//2419 1525//2419
+f 1602//2420 2006//2420 1599//2420
+f 1600//2421 1609//2421 2007//2421 1826//2421
+f 2006//2422 1606//2422 1599//2422
+f 1603//2423 2008//2423 1604//2423
+f 2009//2424 1610//2424 2010//2424 2011//2424
+f 1603//2425 1608//2425 1607//2425 2008//2425
+f 2010//2426 1610//2426 1603//2426 1605//2426
+f 1599//2427 1608//2427 1600//2427
+f 1608//2428 1610//2428 1609//2428
+f 2007//2429 1609//2429 2012//2429
+f 2012//2430 1609//2430 1610//2430 2009//2430
+f 1788//2431 1491//2431 1490//2431 1611//2431
+f 1613//2432 1612//2432 2013//2432 1828//2432
+f 1631//2433 2013//2433 1612//2433
+f 1484//2434 1490//2434 1486//2434
+f 1829//2435 1625//2435 1627//2435 1613//2435
+f 1616//2436 1615//2436 930//2436 929//2436
+f 1627//2437 1614//2437 1613//2437
+f 1619//2438 1629//2438 1614//2438
+f 1614//2439 1629//2439 1630//2439
+f 1629//2440 1622//2440 1630//2440
+f 1637//2441 934//2441 933//2441
+f 1639//2442 1833//2442 1832//2442 934//2442
+f 1834//2443 1639//2443 1637//2443 1636//2443
+f 1845//2444 2014//2444 1846//2444
+f 1846//2445 2014//2445 1851//2445 1847//2445
+f 1376//2446 1375//2446 2015//2446 1380//2446
+f 2015//2447 1381//2447 1380//2447
+f 1749//2448 2016//2448 1417//2448 1414//2448 1413//2448
+f 1746//2449 1405//2449 1409//2449 1416//2449 1417//2449 2016//2449 2017//2449 2018//2449 2019//2449
+f 2020//2450 2021//2450 1745//2450 1746//2450 2019//2450 2022//2450
+f 2023//2451 2017//2451 2016//2451 1749//2451 1748//2451
+f 1379//2452 1381//2452 2015//2452 1375//2452 1377//2452 2024//2452 2025//2452 2026//2452
+f 1851//2453 2014//2453 1845//2453 1844//2453
+s 1
+f 2004//2454 924//2454 923//2454 1591//2454 1590//2454 1583//2454 1586//2454 1824//2454 1825//2454
+f 1823//2455 1566//2455 1565//2455 1809//2455 1820//2455
+f 1816//2456 1576//2456 1579//2456 1814//2456 1998//2456 1813//2456 1812//2456 1815//2456
+f 1996//2457 1561//2457 1562//2457 905//2457 904//2457 1991//2457 1990//2457
+f 1988//2458 1989//2458 2027//2458 1806//2458 1807//2458 1987//2458
+f 1985//2459 1802//2459 1801//2459 1986//2459 1528//2459 1531//2459
+f 1804//2460 1575//2460 1572//2460 1574//2460 1811//2460 1813//2460 1998//2460 1810//2460 1571//2460 1534//2460 1533//2460 1803//2460
+f 1805//2461 1808//2461 1540//2461 1539//2461 2027//2461 1989//2461 1543//2461 1546//2461
+f 1798//2462 1522//2462 1521//2462 1984//2462 2028//2462
+f 899//2462 914//2462 913//2462 900//2462
+f 1512//2463 1511//2463 889//2463 888//2463 1508//2463 1982//2463
+f 895//2464 1550//2464 2027//2464 896//2464
+f 1793//2464 1796//2464 2028//2464
+f 1789//2465 1788//2465 1611//2465 925//2465 928//2465 1784//2465 1785//2465
+f 1617//2466 1616//2466 929//2466 932//2466 1831//2466
+f 2028//2467 1796//2467 1795//2467 1983//2467
+f 1797//2468 1798//2468 2028//2468 1519//2468 1518//2468
+f 1927//2469 1238//2469 1237//2469 1240//2469 1246//2469 1703//2469 1799//2469 1800//2469 757//2469 760//2469
+f 1923//2470 1693//2470 741//2470 744//2470 1691//2470 1692//2471 723//2472 722//2470 1921//2470 1922//2470
+f 1783//2473 1782//2473 884//2473 883//2473 1786//2473 1790//2473 1789//2473 1785//2473
+f 1786//2474 1489//2474 1488//2474 1787//2474 1790//2474
+f 1506//2475 1502//2475 1501//2475 1500//2475 1792//2475 886//2475 885//2475 1495//2475 1481//2475 1480//2475 1980//2475 1981//2475
+f 1212//2476 1213//2476 712//2476 715//2476 1189//2476 1191//2476 1214//2476
+f 1696//2477 1698//2477 1924//2477
+f 1699//2478 730//2478 729//2478 733//2478 732//2478 737//2478 754//2478 753//2478 1700//2478
+f 1470//2479 870//2479 869//2479 1467//2479 874//2479 873//2479 1475//2479 1474//2479
+f 1196//2480 1165//2480 1164//2480 2029//2480 1197//2480 1194//2480 1195//2480
+f 1919//2481 1689//2481 1690//2481 1920//2481
+f 1915//2481 1179//2481 1178//2481 1198//2481 1197//2481 2029//2481
+f 1467//2482 1465//2482 1464//2482 875//2482 874//2482
+f 1151//2483 2030//2483 704//2483 703//2483
+f 1914//2484 1159//2484 1161//2484 2029//2484 1164//2484 1163//2484
+f 1184//2485 698//2485 700//2485 696//2485 695//2485 1181//2485 1182//2485
+f 689//2486 684//2486 683//2486 690//2486
+f 1680//2487 1913//2487 691//2487 690//2487 683//2487 687//2487
+f 1171//2488 1175//2488 2029//2488 1157//2488 1156//2488 1166//2488 1169//2488
+f 1673//2489 1120//2489 1113//2489 1116//2489
+f 1909//2490 1135//2490 1137//2490 2031//2490 1911//2490
+f 1911//2491 2031//2491 1138//2491 1141//2491 1910//2491
+f 1676//2492 1123//2492 1127//2492 1133//2492 1131//2492 1130//2492
+f 1774//2493 1773//2493 1778//2493
+f 1905//2494 1083//2494 1082//2494 1906//2494 1669//2494 1117//2494 1119//2494 1675//2494 1674//2494
+f 1898//2495 1902//2495 1901//2495 649//2495 648//2495
+f 1767//2496 855//2496 854//2496 1449//2496 852//2496 851//2496
+f 863//2497 859//2497 862//2497 1456//2498 1770//2499 1769//2497 864//2497
+f 642//2500 644//2500 646//2500 1078//2500 1077//2500 1076//2500 1073//2500
+f 1886//2501 1660//2501 1659//2501 1658//2501 1661//2501 2032//2501
+f 1890//2502 1893//2502 1662//2502 1665//2502 2032//2502
+f 1765//2503 843//2503 842//2503 1764//2503 1977//2503
+f 1433//2504 1434//2504 1753//2504 829//2504 832//2504
+f 1874//2505 1889//2505 2032//2505 1654//2505 1653//2505
+f 1876//2506 1875//2506 1020//2506 1023//2506 2033//2506 1894//2506
+f 1878//2507 2033//2507 1023//2507 1022//2507 1025//2507
+f 1880//2508 2033//2509 1878//2510 1877//2510 1879//2510
+f 1750//2511 825//2511 824//2511 1971//2511 1752//2511 1751//2511
+f 2018//2511 1407//2511 1406//2511 1745//2511 2021//2511 2020//2511 2022//2511 2019//2511
+f 1761//2512 1762//2512 1973//2512 1763//2512
+f 1759//2513 1972//2513 1760//2513 1758//2513
+f 1651//2514 1010//2514 1009//2514 1649//2514 1648//2514 1864//2514 989//2514 993//2514 1872//2514
+f 1657//2515 1394//2515 1397//2515 1747//2515 1412//2515 1411//2515 1884//2515
+f 2023//2516 1748//2516 1747//2516 1397//2516 1396//2516 818//2516 817//2516 1408//2516 1407//2516 2018//2516 2017//2516
+f 1857//2517 975//2517 977//2517 981//2517 980//2517 979//2517
+f 1868//2518 628//2518 627//2518 1867//2518 985//2518 984//2518 988//2518 1858//2518 1860//2518
+f 973//2519 972//2519 616//2519 615//2519 614//2519
+f 1641//2520 990//2520 989//2520 1864//2520 1862//2520 1861//2520
+f 1954//2521 1953//2521 1733//2521 1735//2521 1967//2521 1966//2522 1957//2523
+f 1956//2524 1355//2524 1358//2524 1728//2524
+f 2024//2525 1377//2525 1374//2525 1373//2525 1378//2525 1379//2525 2026//2525 2025//2525
+f 964//2526 1849//2526 602//2526 604//2526 1852//2526 1848//2526 959//2526 958//2526 962//2526 963//2526
+f 1962//2527 1368//2527 1367//2527 1729//2527 1959//2527 1958//2527 1365//2527 1343//2527 1342//2527 1947//2527
+f 1947//2528 1346//2528 1345//2528 1948//2528 1961//2528 1960//2528 1962//2528
+f 1354//2529 1952//2529 1352//2529 1351//2529 1951//2529 1353//2529
+f 1841//2530 949//2530 952//2530 1842//2530 1840//2530
+f 1722//2531 1725//2531 1332//2531 1331//2531 1336//2531 1723//2531
+f 1325//2532 802//2532 801//2532 1353//2532 1951//2532 1950//2532 1949//2532 1329//2532 1323//2532 1322//2532 1326//2532
+f 1943//2533 1719//2533 1718//2533 1720//2533 1942//2533
+f 1273//2534 1275//2534 1271//2534 1270//2534 1935//2534 1278//2534 776//2534 775//2534 1284//2534 1285//2534
+f 1299//2535 1317//2535 795//2535 794//2535 1298//2535 1297//2535
+f 1286//2535 1289//2535 1293//2535 1929//2535
+f 1931//2536 765//2536 766//2536 780//2536 783//2536 777//2536 779//2536 1707//2536 1706//2536
+f 1709//2537 1708//2537 784//2537 787//2537 763//2537 762//2537 1260//2537 1259//2537 768//2537 767//2537
+f 1264//2538 773//2538 772//2538 1704//2538 1709//2538 767//2538 770//2538 1262//2538
+f 1941//2539 1717//2539 1716//2539 1312//2539 1310//2539 1311//2539 1306//2539 1305//2539 1940//2539 1939//2539 1938//2539 1933//2539 1710//2539 1712//2539 1714//2539 1713//2539 1715//2539
+f 2004//2540 2003//2540 2002//2540 1593//2540 921//2540 924//2540
+f 1979//2541 1504//2541 1505//2541 1981//2541 1980//2541
+f 1588//2542 917//2542 916//2542 1824//2542 1586//2542 1585//2542
+f 2001//2543 2000//2543 919//2543 918//2543 1818//2543 1817//2543 1997//2543 909//2543 908//2543 1566//2543 1823//2543 1822//2543
+f 1992//2544 1554//2544 902//2544 901//2544 1991//2544 904//2544 907//2544 1995//2544 1994//2544 1993//2544
+f 1623//2545 1628//2545 1618//2545 1621//2545 1633//2545 1624//2545
+f 1806//2546 2027//2546 1550//2546 1551//2546
+f 1793//2546 2028//2546 1984//2546 1794//2546
+f 914//2547 899//2547 898//2547 1552//2547 1999//2547 1582//2547 911//2547
+f 1636//2548 1638//2548 936//2548 935//2548 1832//2548 1833//2548 1834//2548
+f 1542//2549 892//2549 891//2549 896//2549 2027//2549 1539//2549
+f 2008//2550 1607//2550 1606//2550 2006//2550 1602//2550 1601//2550 1827//2550 2011//2550 2010//2550 1605//2550 1604//2550
+f 2012//2551 2009//2551 2011//2551 1827//2551 1826//2551 2007//2551
+f 1828//2552 2013//2552 1631//2552 1632//2552 1635//2552 1634//2552 1633//2552 1621//2552 1620//2552 1626//2552 1625//2552 1829//2552
+f 1509//2553 1512//2553 1982//2553 1513//2553
+f 1702//2554 1242//2554 1233//2554 1232//2554 1928//2554 1927//2554 760//2554 759//2554
+f 1926//2554 739//2554 738//2554 1700//2554 753//2554 756//2554 1231//2554 1230//2554
+f 1598//2555 2005//2555 1525//2555 1527//2555 1248//2555 1247//2555 1781//2555 1595//2555
+f 1830//2556 1831//2556 932//2556 931//2556 1493//2556 1791//2556
+f 723//2472 1692//2471 725//2557 724//2557
+f 1925//2558 1701//2558 1223//2558 1222//2558
+f 749//2559 1925//2559 1222//2559 745//2559 747//2559
+f 1229//2559 752//2559 751//2559 1226//2559 1220//2559 1219//2559 1227//2559
+f 1515//2560 1519//2560 2028//2560 1983//2560
+f 1477//2561 879//2561 876//2561 878//2561 1468//2561 1470//2561 1474//2561 1476//2561
+f 726//2562 1921//2562 722//2562 721//2562 727//2562
+f 713//2563 712//2563 1213//2563 1193//2563
+f 1695//2564 1924//2564 1698//2564 717//2564 716//2564 1920//2564 1690//2564 1202//2564 1203//2564 1205//2564 1694//2564
+f 731//2565 730//2565 1699//2565 735//2565
+f 701//2566 704//2566 2030//2567 1688//2568 1687//2566 1918//2566
+f 1681//2566 705//2566 708//2566 1185//2566 711//2566 710//2566 1917//2566
+f 1688//2568 2030//2567 680//2569 682//2569 1682//2569 1683//2569 1685//2569 1686//2569
+f 2030//2570 1151//2571 1150//2572
+f 1149//2573 1679//2573 678//2573 677//2573 680//2573 2030//2570 1150//2572
+f 1175//2574 1176//2574 1172//2574 1174//2574 693//2574 692//2574 1915//2574 2029//2574
+f 1157//2575 2029//2575 1161//2575 1158//2575
+f 1119//2576 666//2576 668//2576 1121//2576 1120//2576 1673//2576 1675//2576
+f 1134//2577 1132//2577 1133//2577 1127//2577 1126//2577
+f 1138//2578 2031//2578 669//2578 672//2578 1139//2578
+f 1144//2579 1677//2579 673//2579 676//2579 1912//2579 1678//2579 1145//2579
+f 1776//2580 1775//2580 1771//2580 1774//2580 1778//2580 1780//2580
+f 1137//2581 1136//2581 1085//2581 1088//2581 2031//2581
+f 1087//2582 1907//2582 2031//2582 1088//2582
+f 1093//2582 1670//2582 650//2582 649//2582 1901//2582 1900//2582 1903//2582 1089//2582
+f 1671//2583 651//2583 653//2583 654//2583 665//2583 1908//2583 1096//2583 1090//2583 1089//2583 1903//2583 1107//2583 1106//2583 1904//2583 664//2583 663//2583 1103//2583 1105//2583 658//2583 660//2583 1112//2583 1111//2583 1110//2583 1142//2583 670//2583 669//2583 2031//2583 1907//2583
+f 1079//2584 656//2584 655//2584 1672//2584 661//2584 664//2584 1904//2584
+f 1768//2585 1450//2585 1449//2585 854//2585 858//2585
+f 860//2586 859//2586 863//2586
+f 850//2587 1978//2587 1766//2587 847//2587
+f 1770//2499 1456//2498 1455//2588 1452//2588 1451//2588
+f 1072//2589 1069//2589 1068//2589 1668//2589 1897//2589
+f 1897//2590 1668//2590 637//2590 636//2590 639//2590 641//2590 1896//2590
+f 1976//2591 1975//2591 1441//2591 1444//2591 1978//2591 850//2591 849//2591
+f 1445//2592 844//2592 846//2592 1765//2592 1977//2592
+f 1066//2593 1067//2593 1064//2593 1063//2593 1895//2593
+f 1885//2594 1886//2594 2032//2594 1665//2594 1664//2594
+f 1666//2595 633//2595 635//2595 1062//2595 1054//2595 1053//2595 1058//2595 1057//2595 1667//2595
+f 1974//2596 1435//2596 1437//2596 838//2596 837//2596 1440//2596 1439//2596
+f 1888//2597 1891//2597 1890//2597 2032//2597 1889//2597
+f 1882//2598 1894//2598 2033//2598 1881//2598
+f 1881//2599 2033//2599 1026//2599 1029//2599
+f 2033//2509 1880//2508 1027//2600 1026//2600
+f 1053//2601 1047//2601 631//2601 630//2601 1052//2601 1051//2601 1055//2601 1058//2601
+f 1432//2602 1431//2602 827//2602 826//2602 1750//2602 1751//2602 1753//2602 1434//2602 834//2602 836//2602
+f 1017//2603 1013//2603 1012//2603 1019//2603 1018//2603 1873//2603 1015//2603
+f 1661//2604 1041//2604 1040//2604 1039//2604 1652//2604 2032//2604
+f 2032//2605 1652//2605 1654//2605
+f 1757//2606 1738//2606 822//2606 821//2606 833//2606 1760//2606 1972//2606 1424//2606 1426//2606 1973//2606 1762//2606 1755//2606 1754//2606
+f 1642//2607 621//2607 620//2607 623//2607 622//2607 983//2607 999//2607 1645//2607 624//2607 626//2607 1866//2607 995//2607 997//2607 1643//2607
+f 1871//2608 1869//2608 1003//2608 1006//2608 1647//2608 1646//2608 1868//2608 1860//2608 1859//2608
+f 1035//2609 1034//2609 1033//2609 1883//2609 1656//2609 1655//2609
+f 1744//2610 1743//2610 1742//2610 1740//2610 1739//2610 1741//2610 814//2610 813//2610 815//2610 1737//2610
+f 1385//2611 804//2611 806//2611 1856//2611 1382//2611
+f 810//2612 809//2612 811//2612 814//2612 1741//2612 1736//2612
+f 1969//2613 1383//2613 1382//2613 1856//2613 611//2613 610//2613 609//2613 1855//2613 1730//2613 1732//2613 1968//2613
+f 1966//2522 1963//2614 1965//2614 1359//2614 1356//2614 1355//2614 1956//2614 1955//2614 1957//2523
+f 1732//2614 1731//2614 1386//2614 1388//2614 1968//2614
+f 1843//2615 954//2615 953//2615 1848//2615 1852//2615 1850//2615 1844//2615
+f 1946//2616 1724//2616 1721//2616 1723//2616 1336//2616 1338//2616 1944//2616 1945//2616
+f 949//2617 1841//2617 950//2617
+f 1719//2618 1943//2618 798//2618 800//2618 1321//2618
+f 1949//2619 1727//2619 1726//2619 1348//2619 1327//2619 1329//2619
+f 1837//2620 601//2620 600//2620 598//2620 597//2620 1640//2620
+f 1838//2621 1839//2621 948//2621 945//2621 947//2621 943//2621 942//2621
+f 1282//2622 1279//2622 1278//2622 1935//2622 1934//2622 1283//2622
+f 1937//2622 1290//2622 1292//2622 1936//2622 1253//2622 1251//2622 1250//2622 1255//2622 1258//2622
+f 1298//2623 794//2623 797//2623 1295//2623
+f 1929//2623 1293//2623 1294//2623 1937//2623 1258//2623 1257//2623 1930//2623
+f 1303//2624 781//2624 780//2624 766//2624 764//2624 763//2624 787//2624 786//2624
+f 792//2625 791//2625 790//2625 789//2625 1939//2625 1940//2625
+f 1711//2626 1714//2626 1712//2626
+f 594//2627 591//2627 593//2627 941//2627 940//2627 939//2627 1835//2627
+o Trunks
+v -23.579279 27.080400 9.894612
+v -23.453920 27.002068 11.016746
+v -23.652891 27.118038 10.827804
+v -23.088253 28.951912 6.271603
+v -22.955896 29.015137 3.746106
+v -23.056793 28.953346 3.082325
+v -23.235294 28.861229 5.183768
+v -22.544960 28.628765 6.464015
+v -22.516716 28.386406 10.561586
+v -22.481543 28.364267 10.596128
+v -22.173687 28.416300 6.443893
+v -22.493223 28.129063 10.753654
+v -22.493622 28.005239 10.759019
+v -22.500225 27.988096 10.848068
+v -22.528864 27.411318 11.234368
+v -22.324291 27.376741 8.475177
+v -22.029253 27.832743 4.495832
+v -22.824718 27.238886 11.193714
+v -45.876446 -5.684017 14.900688
+v -46.509045 -4.650781 0.074624
+v -45.442249 -5.268806 0.078199
+v -45.138878 -6.095925 14.561125
+v -45.150074 -6.089786 14.568802
+v -45.579700 -5.848361 14.733410
+v -45.883793 -4.807612 14.764601
+v -46.513264 -3.409381 0.027216
+v -45.442993 -2.792502 0.042765
+v -46.414082 -3.351553 0.023138
+v -45.146362 -4.314254 14.203953
+v -44.374367 -3.415545 0.047439
+v -44.867130 -4.461836 14.045414
+v -44.385399 -4.724748 13.859031
+v -44.376549 -4.651096 0.034525
+v -44.376408 -4.574157 0.031579
+v -44.387131 -5.628327 14.069757
+v -45.066509 -6.051126 14.516901
+v -6.220116 30.486355 13.260275
+v -6.245219 30.500782 13.261875
+v -7.237264 29.372709 6.747080
+v -6.853880 29.153313 6.726305
+v -6.627611 28.239119 3.674496
+v -5.441856 29.934158 12.804305
+v -7.143304 27.547411 -0.119969
+v -7.120660 27.534306 -0.121763
+v -7.060029 27.620977 0.345066
+v -8.244748 29.561346 0.100776
+v -8.248126 29.374361 0.082725
+v -7.637046 29.748592 4.102947
+v -6.213461 31.526571 13.448093
+v -5.376981 32.015671 13.303810
+v -7.086539 30.252188 0.140953
+v -6.034048 31.634745 13.474751
+v -4.573460 31.469391 12.839063
+v -5.950641 29.597202 0.051165
+v -5.960218 28.241644 -0.080038
+v -4.597463 30.422054 12.584218
+v -6.349817 28.006498 -0.072262
+v -42.071896 17.544733 9.683618
+v -42.455814 16.902033 0.300833
+v -42.206600 16.757387 0.292692
+v -41.216347 16.696556 5.838950
+v -41.143383 17.004499 9.638993
+v -42.055550 18.634573 10.051561
+v -42.452065 18.213650 0.353861
+v -42.050438 18.226994 10.188848
+v -41.320709 18.868479 0.403667
+v -42.033108 18.455896 0.359813
+v -41.137390 19.163218 9.951020
+v -40.192257 18.216364 0.373025
+v -40.216511 18.642673 10.203009
+v -40.216259 18.008705 10.415907
+v -40.205708 17.864830 6.119074
+v -40.204655 17.963205 5.633871
+v -40.192062 18.076311 0.362290
+v -40.781693 17.118120 8.260449
+v -40.411316 17.329935 8.214794
+v -40.581184 17.363941 10.112260
+v -23.279104 16.867805 14.127663
+v -23.316969 18.491802 -0.863498
+v -22.208580 17.841879 -0.782265
+v -22.499252 16.395702 14.323514
+v -23.281607 17.811163 13.900002
+v -23.291702 18.334473 9.985667
+v -23.295774 18.170370 8.064279
+v -23.317167 18.572483 -0.876525
+v -22.378977 19.119802 8.128695
+v -22.643177 18.702551 10.071011
+v -22.489613 18.278732 13.870624
+v -21.370445 19.095461 4.566310
+v -21.903854 19.400803 4.595573
+v -21.705564 17.791615 14.070538
+v -21.302155 19.104061 4.260099
+v -21.093477 18.500620 -0.912548
+v -21.092388 18.612997 -0.930723
+v -21.092510 18.676498 -0.922855
+v -21.717649 16.852057 14.295747
+v -21.356445 -23.735336 8.746932
+v -22.903564 -23.053246 0.064800
+v -21.730579 -23.739481 0.315887
+v -20.579145 -24.222532 7.698297
+v -21.344507 -22.655766 8.782574
+v -22.602076 -21.920187 1.720109
+v -22.607342 -22.522211 1.708029
+v -22.906252 -22.828768 0.043271
+v -21.363209 -23.629791 8.706011
+v -20.580021 -21.997513 7.591665
+v -21.750988 -21.121304 0.066524
+v -22.366753 -21.444534 -0.001036
+v -20.476818 -22.055504 7.414693
+v -19.787977 -22.444508 6.318135
+v -20.588963 -21.825621 0.317568
+v -20.584177 -23.125257 0.440499
+v -19.798584 -22.509596 6.243608
+v -19.819286 -23.569862 6.160837
+v -19.913164 -23.643986 6.307820
+v -48.837872 17.848213 0.088072
+v -48.610264 17.714155 0.076306
+v -48.568710 17.689402 0.080579
+v -48.550323 17.343775 7.765417
+v -48.875988 17.408913 10.690351
+v -49.814358 17.950924 10.984059
+v -48.837902 19.165255 0.253509
+v -49.784988 19.000208 10.788262
+v -48.807278 19.532391 10.290268
+v -47.695972 19.810816 0.360055
+v -48.477524 19.349014 10.185814
+v -47.642666 19.779846 0.357353
+v -48.545258 17.547913 10.155554
+v -48.419720 17.619164 10.172074
+v -48.443401 17.631273 10.472308
+v -37.838993 -40.914848 4.934037
+v -37.719978 -40.909248 5.407894
+v -36.862408 -41.415955 5.461104
+v -37.030655 -40.902596 7.994168
+v -37.971195 -40.349960 7.916796
+v -38.025402 -39.031116 9.230691
+v -37.673409 -40.327454 1.306312
+v -37.968300 -40.279819 7.858359
+v -36.499687 -39.902485 0.000137
+v -37.262432 -40.330017 0.048119
+v -37.640976 -40.308640 1.307606
+v -37.134708 -38.458870 9.560814
+v -36.128662 -39.178547 8.452769
+v -35.385288 -40.556885 0.051634
+v -36.019024 -40.498158 7.261641
+v -35.761108 -41.051178 4.350071
+v -35.641300 -40.707817 2.971752
+v -35.386379 -40.794731 0.074257
+v -36.008854 -40.353764 7.139670
+v -36.744251 -41.430603 5.118556
+v -36.671227 -41.827965 3.294260
+v -36.472916 -41.449356 4.393691
+v -18.095806 -14.467531 -0.069907
+v -17.042664 -15.076263 -0.040447
+v -17.750517 -14.738133 13.466195
+v -18.509375 -14.299224 13.391636
+v -18.090641 -13.249253 -0.238060
+v -18.490437 -13.411957 12.775174
+v -17.684956 -12.949441 12.215223
+v -17.025290 -12.634325 -0.371967
+v -17.576117 -12.952281 -0.305575
+v -15.963722 -13.246540 -0.343933
+v -16.900698 -13.404904 12.293560
+v -16.947737 -14.306033 12.927991
+v -15.975945 -14.470281 -0.179084
+v -15.967708 -13.667130 -0.290189
+v -33.741245 -33.375137 12.363320
+v -34.293232 -32.473568 -0.573456
+v -33.144352 -33.132191 -0.724254
+v -32.860748 -33.905407 12.814800
+v -32.930099 -33.868198 12.880585
+v -33.789593 -32.261723 11.273399
+v -34.295525 -31.137913 -0.571613
+v -34.295185 -31.198360 -0.566222
+v -33.461952 -30.653990 -0.588517
+v -34.036850 -30.985195 -0.598152
+v -34.249310 -31.111195 -0.571622
+v -32.903980 -31.687271 10.750966
+v -33.141560 -30.468472 -0.590974
+v -31.989384 -31.325914 1.363417
+v -32.179703 -31.022385 -0.659011
+v -33.055729 -30.518581 -0.589903
+v -31.997370 -32.273849 11.363779
+v -31.994308 -32.856033 4.871351
+v -31.992836 -32.031731 4.855771
+v -32.000019 -33.383564 12.447850
+v -32.713558 -33.822639 12.845563
+v -32.790310 -32.924923 -0.768478
+v -32.609894 -32.972839 1.428022
+v -17.142887 -8.281096 11.799264
+v -17.896688 -9.138254 6.849019
+v -17.508389 -9.360464 6.827979
+v -17.354683 -9.981482 4.754874
+v -17.164465 -10.090364 4.744435
+v -16.213799 -8.731387 12.064164
+v -18.503490 -8.669046 2.837960
+v -18.396187 -8.798380 3.548307
+v -18.312611 -8.747198 4.098137
+v -17.142601 -8.264994 11.800786
+v -17.150196 -7.256321 11.727936
+v -19.004524 -9.050340 -0.456602
+v -19.004818 -9.065743 -0.458186
+v -16.219400 -6.686323 12.021034
+v -17.856234 -8.374788 -0.581889
+v -16.723387 -9.063054 -0.840916
+v -16.756069 -9.044903 -0.841691
+v -15.299515 -7.127393 12.380532
+v -16.700718 -10.389120 -0.673126
+v -15.290490 -7.921237 12.438956
+v -15.291862 -8.134953 12.419552
+v -17.125288 -10.085432 4.568770
+v -16.914320 -10.515698 -0.646963
+v -35.962852 -27.673372 8.426420
+v -36.133854 -28.395084 -0.479611
+v -35.242973 -28.914986 -0.539326
+v -35.068645 -28.179235 8.539850
+v -35.092110 -26.068266 7.317799
+v -35.244041 -26.312544 -0.594982
+v -35.531769 -26.478308 -0.568549
+v -35.380344 -26.234852 7.317629
+v -35.184746 -26.124245 7.194435
+v -34.117867 -26.964540 -0.653984
+v -34.326534 -26.844297 -0.656561
+v -34.139156 -26.590315 7.974997
+v -34.137829 -27.678656 7.970841
+v -34.116344 -28.267399 -0.631410
+v -34.137630 -27.188700 7.643051
+v -34.251461 -28.345764 -0.630371
+v -9.193234 35.887550 14.024123
+v -9.227463 37.355602 0.472514
+v -8.171875 36.746998 0.452924
+v -8.433821 35.443748 14.065824
+v -8.590410 35.533283 14.075722
+v -9.195232 36.780479 13.969711
+v -9.230011 38.583347 0.484304
+v -8.171091 39.204258 0.476443
+v -8.431291 37.226177 13.980683
+v -7.111074 38.591408 0.456755
+v -7.669878 36.773403 14.046179
+v -7.114415 37.361908 0.445025
+v -7.674844 35.881706 14.100169
+v -8.251799 35.547283 14.091750
+v -30.617990 -33.851028 12.606201
+v -32.208443 -33.270699 -0.844918
+v -31.841557 -33.488224 -0.874404
+v -29.756437 -34.362972 12.494333
+v -30.601265 -32.845688 12.670797
+v -30.602562 -33.154041 12.672443
+v -31.787966 -30.809196 -0.653484
+v -29.719652 -32.356869 12.638378
+v -29.246393 -32.641045 12.623814
+v -28.854208 -32.875641 12.572739
+v -30.632189 -31.501869 -0.746986
+v -30.659061 -32.837803 -0.857146
+v -28.875988 -33.874241 12.477807
+v -18.844215 -19.156713 0.350742
+v -18.656050 -19.269737 0.391425
+v -18.637611 -19.616282 8.096703
+v -18.747423 -19.594318 9.082966
+v -19.767557 -19.059593 10.653704
+v -18.820410 -17.920029 0.240420
+v -19.875471 -18.103893 11.976213
+v -19.034054 -17.635340 11.850462
+v -17.741840 -17.311590 0.303728
+v -18.066259 -17.492483 0.345422
+v -18.654713 -17.826269 0.258404
+v -18.617878 -17.822834 11.249084
+v -17.688286 -17.343111 0.305304
+v -18.635561 -19.533653 9.064155
+v -33.608570 -41.162102 0.092085
+v -32.588512 -41.767345 0.139815
+v -32.483326 -41.830612 0.139473
+v -32.983669 -40.303936 7.672508
+v -33.576847 -40.039856 7.104813
+v -33.922916 -39.818932 7.184402
+v -33.973515 -38.482635 8.419521
+v -33.598125 -39.865143 -0.031621
+v -33.598164 -39.868572 -0.030993
+v -33.945965 -39.102417 7.756051
+v -32.461853 -39.243504 -0.183865
+v -33.640965 -38.275043 8.510718
+v -33.072624 -37.855015 9.011766
+v -32.124950 -38.438824 8.810907
+v -31.336298 -39.901112 -0.101912
+v -32.064182 -39.655838 8.171579
+v -31.345922 -41.195927 0.063240
+v -31.345650 -40.938770 0.049088
+v -31.343615 -40.494835 0.006863
+v -32.056831 -39.373779 8.075830
+v -50.781063 -19.329819 -0.052771
+v -49.679180 -19.966694 -0.027367
+v -50.322025 -19.659618 12.238853
+v -50.908848 -19.326796 13.436084
+v -51.205723 -19.156994 13.769691
+v -50.780632 -18.057505 -0.066716
+v -51.212254 -18.233158 13.982315
+v -50.356239 -17.744223 12.891719
+v -49.676548 -17.419546 -0.077577
+v -50.479630 -17.883547 -0.063591
+v -50.778561 -17.984520 13.605780
+v -49.387611 -18.194065 10.946128
+v -48.571587 -18.056143 -0.060047
+v -49.361050 -19.197920 10.587859
+v -48.574314 -19.330894 -0.023281
+v -48.841572 -19.484379 -0.018653
+v -14.209597 35.081184 6.954392
+v -14.486732 35.533836 0.459200
+v -13.427380 34.920284 0.459238
+v -13.254261 34.448292 8.723848
+v -13.812243 34.836784 7.271484
+v -14.263078 36.260551 5.746524
+v -14.488356 36.760956 0.472252
+v -13.426832 37.373074 0.485350
+v -13.804247 36.551704 5.529951
+v -13.305723 36.751774 6.267077
+v -12.366836 36.755501 0.485349
+v -12.373505 35.963978 8.835650
+v -12.369001 35.529839 0.472289
+v -12.376149 34.869835 9.951415
+v -32.121597 -7.899036 0.067664
+v -31.553186 -8.210142 0.091753
+v -30.963129 -8.523740 0.153001
+v -29.373377 -6.251190 12.393419
+v -30.293983 -5.820827 12.069649
+v -30.294077 -5.293928 12.057142
+v -30.315493 -4.828393 11.905423
+v -32.120426 -6.574622 0.045452
+v -29.439598 -4.308910 11.883551
+v -30.965149 -5.882584 0.137460
+v -31.118826 -5.974244 0.132193
+v -31.928198 -6.460089 0.049907
+v -28.534039 -4.756165 12.174314
+v -29.816380 -6.499418 0.267071
+v -30.397102 -6.186515 0.206785
+v -28.497252 -5.710804 12.484266
+v -29.811581 -7.813731 0.270040
+v -29.046900 -6.042076 12.499674
+v -24.698376 9.923915 13.381031
+v -25.243994 9.010536 0.046541
+v -24.375002 8.527964 0.254750
+v -24.178600 8.416474 0.275530
+v -23.921101 9.503238 13.686275
+v -24.610867 9.875204 13.400753
+v -24.672089 10.842036 13.997622
+v -25.244217 10.234688 0.004793
+v -25.243902 9.967224 0.020433
+v -25.244434 9.097927 0.033158
+v -24.183849 10.847454 0.002146
+v -24.375004 10.737153 0.010884
+v -23.900593 11.302872 14.754352
+v -23.124311 10.237333 0.025089
+v -23.334118 10.981343 14.877954
+v -23.161129 10.884499 14.947678
+v -23.123276 9.024055 0.203347
+v -23.124237 10.166923 0.029202
+v -23.158939 10.001316 14.482334
+v -20.527100 29.598452 7.778286
+v -20.646795 29.785299 6.677860
+v -21.476799 30.260324 6.726173
+v -21.493187 30.963240 0.237541
+v -20.380424 30.328203 0.155788
+v -21.475456 30.408188 7.445020
+v -21.470592 30.537897 9.679230
+v -21.470951 30.830542 9.790533
+v -21.474159 30.701290 8.277206
+v -21.493378 31.062513 0.245579
+v -20.192799 31.203489 10.371691
+v -19.707378 30.947744 10.204739
+v -19.676228 30.925179 10.233060
+v -19.428360 31.731585 4.205224
+v -19.518579 31.720222 4.609772
+v -19.661203 31.801865 4.617595
+v -19.974003 31.318415 8.836484
+v -20.255276 31.240931 10.364480
+v -19.266771 30.973244 0.177592
+v -19.266851 31.402193 0.212304
+v -19.684511 30.737606 10.422260
+v -19.714220 29.791443 11.079917
+v -20.174009 29.527777 11.039598
+v -19.813057 29.732941 11.092828
+v -48.481853 -24.518824 11.504538
+v -48.767319 -24.392969 9.902568
+v -49.579010 -24.177383 0.020481
+v -49.440334 -24.259222 0.023697
+v -47.670712 -25.001616 11.369621
+v -48.614403 -24.363951 10.757917
+v -48.612999 -23.575718 10.743023
+v -49.552086 -21.828974 -0.004821
+v -48.612083 -23.328127 9.984043
+v -48.612728 -23.460369 10.638380
+v -47.927490 -22.882652 9.631938
+v -49.426834 -21.760727 -0.003475
+v -47.076412 -23.391090 9.492077
+v -48.340542 -22.414349 0.021852
+v -48.349968 -23.658829 0.035341
+v -46.966053 -24.463245 10.385112
+v -19.856728 1.415240 0.496602
+v -18.809835 0.771739 0.408384
+v -19.669653 3.395261 13.353561
+v -20.442629 3.918747 13.715834
+v -20.457045 4.858169 14.114417
+v -19.856045 2.644778 0.584177
+v -20.440281 4.336318 13.698577
+v -18.821533 3.237011 0.584504
+v -19.732126 5.307095 14.294151
+v -18.942848 4.771098 13.681164
+v -17.776279 2.608091 0.497391
+v -17.763838 1.372420 0.408848
+v -18.874479 3.855747 12.942379
+v -18.874439 3.753767 12.946289
+v -7.743777 7.958952 11.273180
+v -7.412193 7.824009 0.480200
+v -7.305485 7.762404 0.469250
+v -7.286319 7.707808 8.757800
+v -6.928601 7.484284 11.959842
+v -6.942152 7.492174 11.948580
+v -7.734649 8.540994 10.976127
+v -7.598323 8.341953 6.538731
+v -7.464473 9.076225 2.181921
+v -7.416440 9.095774 0.618440
+v -7.412571 7.924857 0.492520
+v -7.734827 8.503759 10.981925
+v -7.164510 9.249308 2.132933
+v -6.609575 9.591541 6.238400
+v -6.478792 9.654013 3.742928
+v -6.949529 9.365729 0.646014
+v -6.038031 9.239599 6.658109
+v -5.978842 8.967461 10.972714
+v -5.657419 9.021790 6.637485
+v -5.796120 7.923162 8.508221
+v -5.499117 8.382202 4.502380
+v -5.980150 8.560881 10.990325
+v -6.049416 8.381028 11.924560
+v -6.065429 7.968682 12.140550
+v -6.450862 7.742795 12.065072
+v -24.626234 42.441174 15.248079
+v -25.266644 43.487167 0.238892
+v -24.190447 42.867229 0.163986
+v -23.879534 42.019550 15.006823
+v -24.645651 43.352554 14.829714
+v -25.259527 44.716145 0.457419
+v -24.121386 43.712906 14.350779
+v -23.902082 43.889961 13.930318
+v -24.181305 45.322388 0.600376
+v -23.110106 44.705395 0.525830
+v -23.120531 43.468067 13.579183
+v -23.112144 43.479218 0.307967
+v -23.120979 43.285683 13.778386
+v -23.122065 42.563053 13.466141
+v -23.811007 42.063301 14.945803
+v -23.389271 42.383648 13.831565
+v 5.908811 37.672142 -1.002958
+v 6.239537 37.474354 -1.053907
+v 8.034115 40.039711 12.763598
+v 7.536100 40.324871 12.791243
+v 7.536190 40.338005 12.842314
+v 7.256919 40.474079 12.765476
+v 5.189653 38.123352 -0.810340
+v 7.240388 41.121658 12.641870
+v 7.230174 41.344833 12.569496
+v 5.241125 39.420475 -0.500270
+v 7.318154 40.716850 13.163700
+v 8.069597 41.870396 13.036780
+v 7.820040 41.612968 11.115313
+v 7.529940 41.441284 11.129137
+v 7.524965 41.308582 8.843351
+v 6.328501 40.074379 -0.368894
+v 5.583409 39.624550 -0.489916
+v 8.798752 41.395061 12.713658
+v 8.305508 41.677235 12.741811
+v 8.910554 41.547050 13.751802
+v 7.521660 40.944366 7.072695
+v 8.187078 40.563534 7.033963
+v 7.372696 39.456436 -0.528036
+v 8.965080 41.057682 14.240376
+v 8.915424 41.418400 13.792771
+v 7.340181 38.160755 -0.869361
+v 8.380266 40.261963 8.810040
+v 8.623058 40.213364 11.052600
+v 8.336397 40.043709 11.089760
+v -37.208935 -27.303049 8.492176
+v -37.571785 -27.910475 -0.375634
+v -36.440098 -28.570896 -0.451490
+v -36.266075 -27.836439 8.611779
+v -37.571350 -26.602362 -0.403687
+v -37.236233 -26.246618 7.792376
+v -36.441174 -25.951252 -0.507514
+v -36.293213 -25.713362 7.198440
+v -12.344372 4.247906 10.868314
+v -12.370937 5.387306 0.350476
+v -11.245410 4.738165 0.331607
+v -11.463290 3.654149 11.654504
+v -12.347060 5.317863 10.674811
+v -12.373627 6.695070 0.373345
+v -12.344593 4.313741 10.832433
+v -11.245276 7.352883 0.393131
+v -11.445529 7.237896 0.376624
+v -11.444860 5.835618 10.751391
+v -10.115261 6.701734 0.358360
+v -10.790554 7.092346 0.369701
+v -10.985577 5.549011 10.876505
+v -10.563744 5.242650 11.264908
+v -10.118398 5.392481 0.335503
+v -10.590854 4.144630 11.847136
+v 2.159099 42.947269 8.894552
+v 2.913747 42.867889 0.473933
+v 3.513968 42.513969 0.451945
+v 4.049571 42.203278 0.314666
+v 3.018624 42.409481 9.574013
+v 2.920862 44.158207 0.556370
+v 2.915676 43.875004 0.578672
+v 2.143118 44.022671 9.207459
+v 4.054475 44.794598 0.533924
+v 2.975239 44.524208 10.177590
+v 5.166184 44.135948 0.613743
+v 5.067327 44.195549 0.595628
+v 4.356565 44.615627 0.555549
+v 3.800913 43.980267 10.821941
+v 3.827928 42.940426 10.530731
+v 5.185894 42.839039 0.355242
+v 5.164741 43.730133 0.589836
+v 5.161359 43.982388 0.636734
+v 5.059642 42.767151 0.335877
+v -15.090939 7.875531 0.412143
+v -14.034905 7.237935 0.393940
+v -14.860917 9.758302 12.830141
+v -15.666969 10.336861 13.408661
+v -15.670290 10.777603 13.519219
+v -15.696062 11.349132 14.139258
+v -15.696107 11.352648 14.140532
+v -15.085541 9.104025 0.394914
+v -15.090887 8.356075 0.451135
+v -15.090425 8.047873 0.415152
+v -14.041833 9.720986 0.498226
+v -15.664968 11.371012 14.143388
+v -14.947788 11.780523 14.138021
+v -12.996952 9.110184 0.571400
+v -13.504287 9.413809 0.599053
+v -14.091018 11.138759 12.935803
+v -12.979310 7.851414 0.424678
+v -14.068379 10.917169 12.687676
+v -14.047667 10.142181 12.485231
+v -13.313147 7.652922 0.396365
+v 1.100424 30.291967 -0.679764
+v 2.269699 29.616135 -0.652132
+v 1.748954 29.864887 9.284302
+v 1.439661 30.045330 8.957931
+v 0.857628 30.384703 8.380198
+v 0.822311 30.405151 8.372739
+v 1.110478 31.646042 -1.007009
+v 0.833311 30.756985 8.014694
+v 0.832883 30.926916 8.028608
+v 0.835848 31.230038 7.932112
+v 0.835188 31.534008 7.953584
+v 2.302082 32.333248 -1.270033
+v 2.142702 32.241150 -1.269603
+v 1.819468 32.102711 7.938806
+v 3.487823 31.650801 -1.263656
+v 1.966242 32.019058 7.924722
+v 2.750950 31.526257 8.674945
+v 3.464700 30.287025 -0.951786
+v 3.487780 31.568611 -1.263080
+v 2.744131 31.337303 8.766913
+v 2.716069 30.413557 9.145403
+v 2.585922 30.336121 9.098845
+v -9.905503 17.176996 13.201682
+v -10.456272 18.076580 0.293381
+v -9.310213 17.400265 0.572210
+v -9.051728 16.695530 12.912127
+v -9.437050 16.914705 13.000940
+v -9.903226 18.165024 13.296437
+v -10.465852 19.414772 0.124056
+v -9.317937 20.068907 0.203424
+v -9.511752 19.955128 0.217906
+v -9.049308 18.690823 13.027660
+v -8.174612 19.384190 0.398680
+v -8.184403 18.222078 12.658533
+v -8.177158 18.046654 0.675444
+v -8.186122 17.219021 12.562115
+v -8.222029 18.020544 0.678749
+v -8.272795 17.167131 12.589539
+v -22.048010 19.768019 5.706248
+v -20.179678 20.797665 13.734714
+v -20.716904 21.010801 13.398571
+v -21.035492 21.170092 13.326653
+v -22.194157 19.852554 5.717665
+v -21.003523 22.126917 13.515811
+v -23.187807 20.013674 -0.836821
+v -23.188087 20.001106 -0.838389
+v -22.662474 20.417021 2.617436
+v -21.043180 21.398422 13.270805
+v -20.098209 22.713158 14.361979
+v -22.055637 20.693983 -0.709390
+v -19.271311 22.354988 14.870458
+v -20.952997 20.068848 -0.744928
+v -20.966204 18.754551 -0.908371
+v -19.300400 21.419840 14.572164
+v -17.431618 -22.788326 4.146405
+v -17.563953 -23.009861 0.912217
+v -17.553715 -23.015574 0.914390
+v -17.470163 -23.063364 0.919294
+v -17.334875 -22.847698 4.108254
+v -17.376759 -21.495371 5.451606
+v -17.567785 -21.698158 0.779563
+v -17.564379 -22.844940 0.896926
+v -17.398947 -21.922972 4.920889
+v -16.427612 -21.040548 0.712434
+v -17.190241 -21.388041 5.428190
+v -16.325825 -20.876894 6.013625
+v -15.285811 -21.696253 0.779710
+v -15.297773 -21.486008 5.627618
+v -15.293844 -22.752081 4.634906
+v -15.284551 -23.006754 0.913828
+v -15.293721 -22.693474 4.554464
+v -15.368766 -23.055298 0.918784
+v -15.370646 -22.797358 4.625024
+v -42.800224 19.749321 9.614819
+v -42.823772 20.759256 0.292076
+v -42.787434 20.738754 0.287217
+v -41.681293 20.079544 0.467494
+v -41.862514 19.177917 9.885297
+v -42.803524 20.899492 9.228331
+v -42.826649 22.098198 0.262045
+v -41.672424 22.798851 0.076953
+v -41.846577 21.474922 9.115331
+v -40.900558 20.881271 9.393975
+v -40.525036 22.102995 0.261684
+v -41.658630 22.791126 0.075107
+v -40.919727 19.734674 9.777379
+v -40.537251 20.744871 0.458149
+v 18.916365 48.205315 12.110548
+v 16.787193 49.144016 0.162044
+v 17.875002 48.503616 0.245196
+v 17.961243 48.452526 0.239769
+v 19.939014 47.622807 12.920272
+v 16.799894 50.478439 0.194638
+v 16.786213 49.185524 0.155356
+v 18.723656 49.353195 10.998408
+v 19.694983 49.831833 11.260002
+v 17.985100 51.111298 0.271589
+v 17.875000 51.050610 0.273877
+v 18.822491 49.413151 10.969213
+v 20.748730 49.173882 12.329276
+v 19.130791 50.423996 0.208525
+v 19.114464 49.099049 0.176102
+v 19.115515 49.246212 0.174030
+v 20.835550 48.098648 13.047456
+v 18.102446 48.535942 0.203890
+v 20.201260 47.778965 12.845500
+v -36.442352 22.218996 0.384072
+v -36.285542 22.120274 0.356506
+v -35.993362 23.104425 7.482482
+v -36.753162 23.547050 7.396578
+v -36.716442 24.529482 6.663275
+v -36.431984 23.481857 0.259252
+v -36.437351 23.000299 0.338237
+v -35.717216 24.979492 6.018006
+v -35.320145 24.076820 0.039845
+v -36.106041 23.662916 0.230071
+v -34.753300 24.420444 6.125158
+v -34.197273 23.389484 -0.158664
+v -34.784115 23.927433 6.497054
+v -34.197376 23.310049 -0.154090
+v -18.916821 -10.749866 10.373567
+v -18.837812 -10.799236 11.080793
+v -18.971571 -10.721872 11.067651
+v -19.037842 -9.129511 11.102279
+v -18.686666 -8.925879 11.235560
+v -17.852236 -9.418583 11.465641
+v -17.845963 -10.395747 11.381035
+v -17.644726 -10.429758 8.666828
+v -18.124798 -10.562012 11.274802
+v -35.449238 26.034275 5.158723
+v -35.678722 26.409101 -0.219726
+v -34.946575 25.981852 -0.148475
+v -34.595753 25.781488 -0.211320
+v -34.475891 25.454702 5.510714
+v -35.064674 25.809568 5.202700
+v -35.680531 26.615559 -0.253596
+v -35.460175 26.369841 4.915646
+v -35.467529 26.955103 4.767166
+v -34.585972 25.787296 -0.213725
+v -34.108742 25.660542 5.596425
+v -46.325676 -15.133960 9.195091
+v -47.740276 -16.742529 -0.094655
+v -47.600071 -16.821251 -0.096392
+v -46.673672 -17.334789 -0.082278
+v -45.636200 -15.851724 7.905797
+v -46.076130 -13.904241 10.812496
+v -47.730209 -15.504522 -0.056223
+v -47.730267 -15.511608 -0.056458
+v -45.207409 -13.365371 11.207329
+v -46.666698 -14.870698 -0.028605
+v -44.532932 -13.992011 10.004154
+v -44.570457 -13.970542 10.006300
+v -45.297050 -14.411970 5.902041
+v -45.225510 -14.933523 3.573215
+v -45.614803 -15.462748 -0.041629
+v -44.526829 -13.983716 10.060814
+v -44.528660 -13.996639 10.043489
+v -45.615017 -16.693575 -0.082364
+v -45.225060 -15.527151 3.558660
+v -44.981384 -15.679758 5.806084
+v -45.667076 -16.725252 -0.083737
+v -45.201553 -15.564719 8.127676
+v -46.067444 -16.968777 -0.093289
+v -46.747360 -38.012020 5.243215
+v -46.962193 -38.371658 -0.007156
+v -45.798992 -39.042187 0.004755
+v -45.710861 -38.670231 4.594731
+v -45.798424 -38.623898 4.548856
+v -46.721302 -36.773865 5.844674
+v -46.957527 -37.024632 0.067233
+v -46.961994 -37.992401 -0.013461
+v -45.798965 -36.356270 0.006363
+v -46.615673 -36.826870 0.077120
+v -45.689407 -36.180122 5.712194
+v -44.638844 -37.025917 -0.006954
+v -45.102337 -36.536266 5.293702
+v -44.652500 -36.785896 5.527581
+v -44.650574 -38.002609 5.340413
+v -44.637218 -38.368500 -0.005686
+v -44.638206 -37.527641 -0.019667
+v -44.638638 -37.222275 0.005830
+v -18.636196 -20.273237 8.113546
+v -18.655661 -19.438391 0.407055
+v -17.742970 -19.987511 0.604467
+v -17.573725 -20.086510 0.614624
+v -17.692320 -20.676552 6.777821
+v -16.787516 -19.174681 7.926125
+v -16.477760 -18.166927 0.393246
+v -16.570810 -18.111889 0.387074
+v -17.167559 -19.034203 8.435761
+v -16.739544 -20.114500 6.675924
+v -16.488113 -19.450422 0.549689
+v -16.481724 -18.571640 0.459755
+v 9.223336 40.308823 14.415722
+v 9.046709 40.386696 13.424521
+v 9.079351 40.345913 12.619499
+v 8.437096 40.544712 5.856650
+v 7.685904 40.986641 5.787953
+v 6.653155 41.441959 -0.007630
+v 7.733500 40.799324 -0.173151
+v 10.025872 39.837627 14.524380
+v 9.199362 41.230087 14.254871
+v 8.846815 41.436298 12.274979
+v 9.049332 41.138477 13.417475
+v 9.331266 40.659725 15.009890
+v 7.515997 41.187225 4.830835
+v 7.513741 42.216042 4.788475
+v 6.717896 42.681545 0.319034
+v 9.997943 41.610172 14.536560
+v 10.045051 41.630096 14.565563
+v 8.566204 42.736679 5.061888
+v 6.984882 42.820065 0.356430
+v 7.510754 42.435841 3.689891
+v 8.283319 42.948357 3.243946
+v 7.842481 43.278229 0.410933
+v 11.033287 41.000053 16.135902
+v 9.430765 42.238255 4.130630
+v 9.387880 42.239914 5.184322
+v 10.059535 41.621082 14.578880
+v 8.012805 43.176403 0.386001
+v 11.095940 40.609646 16.628239
+v 10.994980 40.163242 15.907133
+v 9.074432 41.279583 1.544101
+v 9.426394 41.262516 4.163661
+v 8.442183 41.175323 -0.071696
+v 8.515486 40.934731 1.782744
+v -34.956196 40.177422 -0.500987
+v -33.809776 39.498280 -0.470717
+v -34.790619 39.694462 8.338611
+v -35.700451 40.255703 7.803688
+v -34.935963 41.506577 -0.559948
+v -34.936932 41.439209 -0.557588
+v -35.602982 41.065266 6.818802
+v -35.389992 40.875412 4.421213
+v -35.117443 41.474949 1.458728
+v -33.766228 42.162987 -0.590251
+v -34.909542 41.521378 -0.561278
+v -34.738991 41.686970 1.438806
+v -34.330711 42.021564 4.453750
+v -34.191238 41.841629 5.503449
+v -33.777115 42.055340 0.628071
+v -32.733521 41.470757 0.342842
+v -32.612770 41.484524 -0.560012
+v -32.645111 41.456490 -0.320291
+v -32.630775 40.450821 -0.513642
+v -32.635071 40.204189 -0.502579
+v -32.867825 40.166275 1.236745
+v -32.636032 40.148972 -0.500102
+v -33.778183 39.610130 0.648453
+v -34.359524 39.907375 8.018247
+v -10.099925 10.095138 0.730973
+v -9.912470 9.980782 0.720502
+v -9.782884 10.401482 3.783983
+v -9.767262 10.402712 3.849226
+v -9.570204 11.066467 8.655301
+v -9.698644 11.458367 10.589050
+v -10.194798 11.878119 11.336118
+v -10.595366 12.212112 11.909214
+v -10.624267 13.276039 12.639870
+v -10.101428 11.350504 0.869246
+v -10.100456 10.450912 0.772511
+v -9.803802 13.657302 12.172260
+v -9.055697 11.956612 0.909003
+v -9.577125 11.656535 0.900522
+v -8.890929 12.976670 10.919583
+v -8.000815 11.326255 0.860099
+v -8.882266 11.855066 0.919706
+v -8.854154 11.932837 10.545860
+v -8.804845 11.827109 9.989220
+v -8.681523 11.870590 8.583839
+v -7.998509 11.151904 0.841344
+v -8.862477 12.553307 10.613953
+v -9.631263 11.496964 10.588675
+v -9.515807 11.415980 9.977074
+v -9.234293 11.668313 10.353732
+v -45.114437 -15.572170 -0.042126
+v -44.811863 -15.746995 -0.046022
+v -44.043842 -16.190826 -0.042152
+v -44.422478 -16.009956 7.182649
+v -45.115688 -14.338161 -0.001295
+v -44.047680 -13.720819 0.031067
+v -44.424335 -13.938557 0.016248
+v -43.644447 -14.450100 9.043489
+v -42.976650 -14.337231 0.036538
+v -43.534412 -15.478311 7.559373
+v -42.973934 -15.573041 -0.000078
+v -9.354712 47.628826 11.731418
+v -9.877417 48.482574 -0.519166
+v -9.217359 48.098652 -0.482848
+v -8.812337 47.863968 -0.480599
+v -8.566321 47.193230 11.264091
+v -9.356153 48.553902 11.736105
+v -9.698664 49.314716 3.717127
+v -9.879851 48.726494 -0.566216
+v -8.890349 48.855927 11.462314
+v -8.927985 48.852962 11.305131
+v -8.782489 49.318726 8.113261
+v -8.632264 49.405243 8.116037
+v -8.690195 49.702431 5.350441
+v -9.309213 49.345383 5.343640
+v -8.225121 49.583961 3.749555
+v -7.751694 49.233025 4.538152
+v -7.747362 49.747208 -0.886330
+v -7.818208 49.788864 -0.890314
+v -7.758368 47.692112 10.789084
+v -7.756632 47.852394 8.487059
+v -7.757159 48.475754 11.077021
+v -7.757302 48.293579 10.790951
+v -7.750429 48.425194 0.260418
+v -7.749749 48.488068 -0.642589
+v -8.135651 48.260906 -0.576448
+v -8.433160 48.032204 0.248859
+v -8.636108 47.605793 4.719729
+v -7.894418 47.773003 8.485889
+v -19.811914 32.410782 6.650311
+v -18.926586 32.566479 9.167872
+v -19.773796 33.105610 9.424143
+v -20.193039 32.628883 6.670962
+v -20.811497 33.102665 2.582956
+v -20.717377 32.989223 3.206015
+v -20.631939 33.041546 3.768109
+v -19.822111 34.074348 9.083756
+v -20.893665 33.037643 2.042714
+v -20.065210 33.436977 0.400941
+v -20.544579 33.151440 0.391252
+v -20.722700 33.124912 1.789496
+v -19.016235 34.519039 8.477599
+v -18.151806 33.979805 8.212011
+v -19.001713 32.824413 0.320150
+v -19.571852 33.152557 0.362262
+v -19.008459 31.559305 0.217965
+v -18.110588 32.995899 8.561995
+v -37.235146 42.442329 5.502128
+v -37.480709 42.031242 -0.499348
+v -37.315258 41.935547 -0.501158
+v -36.207508 41.867493 5.703167
+v -36.871536 42.197342 5.121737
+v -37.217216 43.653313 5.905301
+v -37.477146 43.377380 -0.451925
+v -37.480759 42.277023 -0.507849
+v -36.317520 44.046597 -0.500788
+v -36.614864 43.875000 -0.488372
+v -36.206520 44.225060 5.280115
+v -35.156574 43.372124 -0.617662
+v -35.167633 43.378510 -0.617540
+v -36.022182 43.875000 -0.530888
+v -35.168495 43.581642 4.213486
+v -35.167648 43.167271 4.069848
+v -35.167652 43.165943 4.071707
+v -35.156456 43.266476 -0.614010
+v -44.086067 -42.170631 7.388274
+v -44.104614 -41.375092 0.044653
+v -43.875004 -41.508183 0.047016
+v -43.050091 -41.984623 0.039475
+v -43.225246 -42.856075 9.142080
+v -44.093540 -40.854416 5.338541
+v -44.107246 -40.143936 0.024181
+v -43.161282 -40.381172 5.874472
+v -43.048061 -39.520462 -0.001534
+v -43.875004 -40.007706 0.022068
+v -43.971397 -40.780663 5.321852
+v -42.283085 -41.094372 7.161233
+v -41.988152 -40.134842 -0.011187
+v -42.765152 -40.642811 6.073954
+v -41.992817 -41.367947 0.009404
+v -42.363525 -42.347057 9.041908
+v -29.372665 -13.523045 13.283715
+v -29.878136 -13.300193 10.447119
+v -30.734276 -13.072797 0.023901
+v -30.667723 -13.112301 0.016904
+v -28.509138 -14.017876 13.856653
+v -29.259340 -13.586392 13.418515
+v -29.419422 -12.601646 12.995301
+v -29.786243 -12.387085 10.935246
+v -29.787844 -13.283062 10.952179
+v -29.376760 -13.256665 13.253094
+v -30.623047 -10.679424 0.192021
+v -30.687183 -10.713195 0.185491
+v -29.785093 -12.151885 9.771497
+v -28.775402 -12.273110 13.113262
+v -28.602575 -12.191298 13.176421
+v -27.760284 -12.709546 13.695940
+v -29.563858 -11.315996 0.184486
+v -30.194927 -10.937811 0.236517
+v -29.598751 -12.520277 0.005837
+v -27.752638 -13.034904 13.774685
+v -27.728157 -13.607585 13.995309
+v -29.633427 -12.538976 0.002847
+v -40.543003 16.734833 9.607931
+v -40.532715 16.726231 9.665777
+v -40.548260 16.735386 9.666605
+v -39.005424 16.233725 0.242101
+v -38.978764 16.218145 0.237903
+v -38.569141 15.978060 0.189634
+v -39.207840 16.105808 5.926066
+v -39.354095 16.259733 4.377624
+v -39.784756 16.655079 1.147144
+v -39.705719 16.646765 0.265244
+v -40.540771 16.977203 9.613427
+v -39.699673 17.948509 0.360937
+v -39.704838 16.762609 0.269922
+v -39.772835 17.806059 1.158506
+v -40.022591 17.892235 3.952872
+v -38.566315 18.587923 0.429403
+v -40.129906 17.907270 6.114257
+v -39.677673 18.309484 10.360060
+v -38.798298 17.770559 10.614741
+v -37.423027 17.927382 0.331794
+v -38.276943 18.419170 0.421428
+v -38.794582 17.003635 10.521320
+v -38.659100 16.945522 9.502024
+v -38.661503 16.710859 9.499928
+v -37.420753 16.618221 0.202764
+v -38.822193 17.341187 10.756916
+v -39.147194 16.139465 5.924980
+v -38.081791 16.250000 0.198402
+v -30.144171 2.693278 -0.286728
+v -29.893408 2.545890 -0.266381
+v -29.306913 2.727013 3.012204
+v -29.853165 4.393761 11.236402
+v -29.904709 4.416883 11.188135
+v -30.645424 4.835093 11.022664
+v -30.677668 5.908268 11.828277
+v -30.144283 3.943897 -0.179743
+v -30.675329 5.850784 11.771564
+v -29.109606 4.577996 0.041592
+v -29.795736 4.155491 -0.115830
+v -29.963064 6.518197 12.891045
+v -28.069826 3.971857 0.129467
+v -29.200863 6.068985 12.911714
+v -29.136007 5.041818 12.217695
+v -28.417753 3.501740 4.109410
+v -28.293694 3.857273 2.682222
+v -28.067101 3.780013 0.106696
+v -29.195433 6.007190 12.852565
+v -29.139679 5.168079 12.254062
+v -29.101444 3.119282 4.151307
+v -47.924206 43.384777 10.395414
+v -48.201637 43.544621 10.486574
+v -47.883549 43.415169 0.132880
+v -46.759087 42.765827 0.046667
+v -47.290668 43.019753 10.189825
+v -47.883175 44.706745 0.120736
+v -48.219795 44.569752 11.077585
+v -46.959206 45.260338 3.865185
+v -47.533024 44.908928 0.090097
+v -47.352547 45.072445 11.370563
+v -46.453102 44.570820 11.084583
+v -46.132439 44.625019 6.759600
+v -46.518421 44.845901 6.780518
+v -45.627388 43.411381 -0.052286
+v -45.627300 43.537525 -0.053476
+v -45.924973 43.786793 3.961387
+v -46.437374 44.202751 10.872415
+v -46.409382 43.543549 10.494880
+v -36.409412 29.862761 7.045321
+v -36.722145 30.373556 -0.284186
+v -35.650925 29.754396 -0.312426
+v -35.527943 29.419102 5.558598
+v -35.714813 29.485968 6.478286
+v -36.447517 31.001450 6.197041
+v -36.722065 30.563799 -0.274417
+v -36.344795 30.773275 8.601998
+v -35.939644 30.963589 8.969259
+v -34.584511 30.754898 8.758998
+v -34.577988 31.529297 0.589382
+v -34.590717 31.009800 6.120977
+v -35.011417 30.972664 9.083989
+v -34.579494 30.369949 -0.277265
+v -34.579147 30.570057 -0.266988
+v -34.580265 30.723391 1.936214
+v -34.585144 29.848236 7.215722
+v -34.906139 29.684723 6.903077
+v -35.113007 29.657944 5.565620
+v -46.255291 -0.112464 0.069368
+v -45.127811 -0.740520 0.074700
+v -43.766102 1.206043 10.559285
+v -44.701069 1.654868 10.275986
+v -44.822731 2.573029 9.453181
+v -46.249485 1.192679 0.078181
+v -46.248337 1.150335 0.086713
+v -43.980412 3.042916 8.909233
+v -45.136486 1.850373 0.007944
+v -43.028084 2.571667 9.210672
+v -44.007568 1.240122 0.115597
+v -44.479534 1.504095 0.113380
+v -42.935493 1.653324 10.037592
+v -44.005070 -0.057998 0.097886
+v -26.436939 29.138550 -0.014061
+v -26.254827 29.035069 0.004060
+v -25.210941 28.970942 5.850704
+v -25.158823 29.190907 8.565081
+v -26.066313 29.640591 7.758549
+v -26.119181 29.670490 7.751770
+v -26.435936 30.424467 -0.027554
+v -26.100311 30.780754 8.180990
+v -25.321667 31.070646 0.084110
+v -25.514181 30.958771 0.052985
+v -25.155901 31.337166 8.717334
+v -24.213245 30.437542 0.231200
+v -24.234470 30.810606 8.833434
+v -24.232822 29.737038 8.687845
+v -24.231325 29.696022 8.088546
+v -24.225634 30.227812 5.465657
+v -24.213121 30.340174 0.228770
+v -24.232706 29.980782 8.518081
+v -24.796738 29.372665 8.158241
+v -23.750944 25.824520 11.265359
+v -23.779568 27.052217 -0.067546
+v -22.699564 26.436565 -0.153359
+v -22.934984 25.265289 12.081013
+v -23.756571 26.979776 9.871283
+v -23.760666 26.814783 7.939450
+v -23.779795 27.174313 -0.054547
+v -23.753317 26.720484 11.050216
+v -23.753733 26.832642 10.971845
+v -22.111732 26.704809 11.953333
+v -21.792259 27.744177 4.184135
+v -21.859697 27.735683 4.486529
+v -21.619701 27.059929 -0.107298
+v -21.620110 27.393085 -0.071832
+v -22.142916 25.691858 12.642152
+v -22.143093 25.677549 12.645408
+v -35.169609 0.399258 -0.297678
+v -35.106590 0.362070 -0.296214
+v -34.269966 0.011089 5.067807
+v -34.347107 0.054808 4.998487
+v -34.741325 0.285503 4.916562
+v -33.989651 2.083431 6.765633
+v -34.168758 2.217453 5.614612
+v -34.170891 2.018020 6.598252
+v -33.017654 1.494820 6.952651
+v -33.981693 2.239693 -0.269437
+v -34.154690 2.343786 -0.273458
+v -33.090527 0.448273 6.480856
+v -33.996002 0.974592 -0.290863
+v -33.987926 1.554547 -0.269752
+v -33.036194 1.342018 6.824998
+v -35.105110 0.362883 -0.296179
+v -47.346672 26.871286 0.456704
+v -47.145515 26.752274 0.458591
+v -47.127525 26.414139 7.976804
+v -47.722855 26.533213 13.323705
+v -48.529068 26.995655 13.650266
+v -47.325089 28.093050 0.369285
+v -48.531979 27.233095 13.712466
+v -48.609455 27.869226 14.655686
+v -47.755123 28.319387 13.794281
+v -46.231953 28.701004 0.183758
+v -47.032852 28.256571 0.348148
+v -48.111847 28.120281 13.834282
+v -46.941177 27.872982 13.469886
+v -45.175400 28.074333 0.267097
+v -46.919594 26.972425 13.231267
+v -46.481651 26.939728 9.949678
+v -46.218452 27.355404 8.014700
+v -45.180107 27.969503 0.293362
+v -47.123528 26.575424 9.865208
+v -2.404335 41.662792 0.389171
+v -1.263480 40.953098 0.241187
+v -1.625627 42.058102 5.693570
+v -1.724965 42.102467 5.599371
+v -2.656647 42.740906 6.081911
+v -2.653516 43.919044 6.110789
+v -2.401898 42.992371 0.446112
+v -2.403518 42.707226 0.458268
+v -2.656173 42.753109 6.072388
+v -1.723971 44.652126 7.174198
+v -1.277385 43.636887 0.450515
+v -1.501628 43.504887 0.431263
+v -2.093956 43.171570 0.461619
+v -2.631151 43.926262 6.081241
+v -0.677232 43.947376 6.415749
+v -0.145657 42.961750 0.408243
+v -0.741393 43.979446 6.362562
+v -0.642462 42.713959 6.073003
+v -0.128265 41.611420 0.268303
+v -0.747634 41.242905 0.214720
+v -0.665589 42.693726 6.044117
+v -37.962086 -8.510085 -0.012099
+v -36.807014 -9.177528 -0.019279
+v -37.403564 -8.892568 11.363581
+v -38.309990 -8.368503 11.311959
+v -37.962612 -7.178793 0.005043
+v -38.309177 -7.319836 11.285572
+v -37.019077 -6.612441 4.027143
+v -37.630005 -6.986575 0.007925
+v -37.400799 -6.794782 11.310843
+v -36.493408 -7.319610 11.362524
+v -36.169823 -7.264917 6.998151
+v -36.566620 -7.037846 7.019653
+v -35.650276 -8.511562 -0.009287
+v -35.650398 -8.384149 -0.007647
+v -35.956184 -8.128088 4.116668
+v -36.495243 -8.303717 11.387241
+v -36.496391 -8.368556 11.402738
+v -36.716385 -8.496212 11.382718
+v -17.348364 -23.521353 3.763063
+v -17.468559 -23.325037 0.946074
+v -16.527143 -23.872810 1.002275
+v -16.417809 -23.934952 0.976026
+v -16.319572 -24.202784 5.665763
+v -17.355309 -23.410723 3.604479
+v -15.369252 -23.326784 0.927198
+v -15.369133 -23.255205 0.939242
+v -15.372941 -23.667364 5.818717
+v -7.425514 16.851871 0.778607
+v -6.344806 16.245415 0.766476
+v -4.670369 18.639025 13.658923
+v -5.560013 18.973166 13.029415
+v -5.548564 19.915983 13.083603
+v -7.443644 18.082539 0.631289
+v -7.439819 17.875000 0.661193
+v -4.633417 20.508848 13.943443
+v -6.384562 18.702463 0.460365
+v -5.422949 19.996059 13.178680
+v -3.777964 20.174692 14.645452
+v -5.305019 18.098764 0.465915
+v -3.790044 19.262770 14.505113
+v -5.284898 16.871000 0.613228
+v -5.300770 17.875002 0.498148
+v -4.605549 18.683552 13.708140
+v -46.305664 40.213982 9.588017
+v -46.424507 40.015030 6.683517
+v -45.895966 39.975628 9.568556
+v -46.321053 41.248680 9.180513
+v -46.694096 40.852673 0.056860
+v -46.695736 40.654682 0.022495
+v -46.326527 41.026329 9.053085
+v -45.579723 41.494823 -0.038222
+v -46.678402 40.861763 0.057903
+v -45.396671 41.789135 9.495357
+v -44.462181 40.846691 -0.123879
+v -44.485165 41.250702 9.191970
+v -44.482967 40.164127 8.824638
+v -44.477783 40.022060 6.748877
+v -44.461967 40.667355 -0.122214
+v -44.482883 40.369473 8.687076
+v -44.809036 39.992821 9.081903
+v -32.830956 47.443672 9.932950
+v -32.856422 48.535965 -0.150032
+v -31.778620 47.891045 0.049961
+v -31.961414 46.981598 9.549428
+v -32.015377 47.022350 9.460217
+v -32.858902 49.787472 -0.085557
+v -32.829727 48.275158 11.226525
+v -31.864716 49.738125 4.583817
+v -31.966621 49.718529 4.287549
+v -32.620384 49.919178 -0.027043
+v -32.007553 48.652233 11.997111
+v -30.869219 49.209930 4.264987
+v -30.928873 49.202415 4.532479
+v -31.168324 48.236828 11.538869
+v -30.710520 48.538048 0.314965
+v -30.710178 48.885571 0.333092
+v -31.168173 48.234280 11.534943
+v -31.158104 47.307217 11.216859
+v -30.808786 48.229832 2.705584
+v -30.807560 48.616013 2.704943
+v -31.189678 48.220905 0.194685
+v -34.375622 20.951336 8.441044
+v -35.056408 21.132154 0.152721
+v -34.919750 21.050777 0.128431
+v -33.613327 20.502707 8.504555
+v -33.827091 22.758682 7.035641
+v -34.052345 22.927235 5.588063
+v -34.055885 22.596624 7.218701
+v -32.797905 22.124130 7.727705
+v -33.856823 22.942312 -0.205167
+v -34.038586 23.050840 -0.172878
+v -33.238636 22.403664 7.090592
+v -33.858463 21.676397 -0.132273
+v -32.672775 20.987202 8.735037
+v -33.376431 20.661316 8.321271
+v -19.310198 -10.563519 -0.528201
+v -19.140032 -10.664337 -0.523365
+v -19.119362 -11.052839 8.114693
+v -19.485054 -10.979697 11.399125
+v -20.370352 -10.452008 11.301372
+v -20.301332 -9.406744 10.663136
+v -19.304539 -9.233034 -0.424525
+v -19.306593 -10.405182 -0.548532
+v -20.301750 -9.537677 10.651386
+v -19.416750 -8.897856 10.998504
+v -19.114628 -10.862136 10.347538
+v -35.891575 26.749344 -0.275877
+v -35.681129 26.626217 -0.255345
+v -35.478966 27.307167 4.675232
+v -36.097252 27.628183 4.364643
+v -36.155273 29.101126 5.776144
+v -35.881096 28.091375 -0.396358
+v -35.881813 27.625000 -0.419502
+v -36.089012 28.187639 4.228407
+v -34.719414 28.763170 -0.360233
+v -35.063854 28.563856 -0.371610
+v -33.551373 28.069529 -0.375569
+v -34.125000 28.409239 -0.376436
+v -34.117802 29.119776 6.025815
+v -34.020752 28.375051 4.953313
+v -33.549805 27.879503 -0.385276
+v -34.019089 28.469940 4.930305
+v -25.822939 20.210167 10.033135
+v -25.599579 20.070597 12.032500
+v -25.673487 20.105902 13.442753
+v -26.097401 20.350500 13.512543
+v -25.658680 21.998407 13.160189
+v -24.936775 22.343248 -0.614572
+v -24.974249 22.321571 -0.618686
+v -26.153814 21.712849 13.267927
+v -24.833261 21.524189 13.149222
+v -23.810019 21.697134 -0.651792
+v -24.968908 21.600983 13.171675
+v -24.839098 20.574032 13.227945
+v -24.488760 20.514820 8.502763
+v -23.808815 21.565720 -0.668039
+v -25.142971 20.334599 12.056735
+v -34.723328 16.966238 11.226427
+v -35.193581 17.734312 0.205200
+v -35.065483 17.660723 0.191772
+v -34.112461 17.117443 -0.001427
+v -33.875000 16.470030 11.334781
+v -34.521496 16.846775 11.283462
+v -34.753338 18.010067 10.564642
+v -35.195652 18.992573 0.209026
+v -35.193298 17.852446 0.216819
+v -34.725220 17.083527 11.186885
+v -34.112843 19.645908 -0.019711
+v -33.904896 18.579136 9.907522
+v -33.029804 17.995441 10.682834
+v -34.038391 19.603970 -0.034808
+v -33.557339 18.373835 9.936993
+v -33.029850 17.990227 10.737857
+v -33.029865 17.983217 10.743319
+v -33.032009 16.960642 11.271380
+v -33.031380 17.314190 11.264698
+v -33.032223 16.940849 11.555647
+v -34.064148 17.146015 -0.011628
+v -33.226955 16.923649 10.180936
+v -33.699169 16.580519 11.203671
+v -35.871391 51.303978 12.727075
+v -35.930000 51.336868 12.727738
+v -37.893810 49.103783 -0.168665
+v -36.729198 48.431740 -0.253417
+v -35.052372 50.828762 12.657408
+v -35.843307 52.443447 13.274298
+v -37.881119 50.471912 -0.115878
+v -34.905079 53.030590 13.791515
+v -36.715435 51.163128 -0.147449
+v -34.051544 52.550240 13.781206
+v -35.560623 50.498749 -0.231409
+v -34.110405 51.457657 13.202776
+v -35.562386 49.134487 -0.290654
+v -35.561352 49.606083 -0.266230
+v -34.065567 52.265404 13.642633
+v -36.003452 48.869244 -0.272793
+v -43.621487 7.701591 6.410860
+v -43.885513 7.259602 -0.041760
+v -43.794228 7.206046 -0.050951
+v -43.520241 7.642810 6.407382
+v -43.879971 8.606343 0.054078
+v -43.614532 8.888123 6.546019
+v -42.722145 9.275085 0.033760
+v -42.595192 9.479198 6.645527
+v -41.564236 8.603641 -0.052716
+v -42.219589 8.983125 -0.016632
+v -41.580677 8.892632 6.610957
+v -41.578922 7.708759 6.476377
+v -41.562450 7.257320 -0.119705
+v -41.648335 7.207443 -0.119929
+v -41.651680 7.666021 6.469213
+v -42.277027 -18.994503 7.636885
+v -42.296356 -18.165432 -0.016294
+v -41.168564 -18.821201 0.014590
+v -41.329708 -19.622934 8.388960
+v -42.299122 -16.850317 -0.020331
+v -42.278545 -17.916945 7.958005
+v -41.340580 -17.510225 9.010728
+v -41.258659 -16.887449 4.759080
+v -41.329514 -16.901075 4.553081
+v -42.021240 -16.688774 -0.012052
+v -42.127193 -16.750229 -0.016227
+v -40.434223 -18.148600 9.719167
+v -40.212540 -17.427378 4.328082
+v -40.296890 -17.438002 4.706313
+v -40.040359 -18.168140 0.041536
+v -40.039108 -17.781084 0.040400
+v -40.425182 -19.184536 9.417976
+v -7.833880 8.598909 10.949723
+v -7.953710 8.651740 10.277265
+v -8.748779 8.862915 0.597548
+v -8.527277 8.731668 0.582746
+v -7.835651 8.674141 10.937636
+v -6.993415 10.084025 11.123383
+v -6.850600 10.139273 11.236894
+v -7.782331 10.836468 5.249193
+v -7.788237 10.284637 7.970922
+v -8.017061 10.153774 7.999129
+v -7.754840 9.735573 10.785594
+v -7.688601 9.770581 10.791687
+v -5.880864 9.546551 11.662723
+v -7.332572 10.668229 0.787262
+v -7.771743 10.931563 0.816947
+v -6.487795 9.915451 11.486521
+v -7.363173 9.364784 0.647200
+v -5.898777 9.208352 11.552177
+v -5.848972 8.484631 11.971354
+v -17.305239 -0.810958 0.228242
+v -17.059046 -0.955597 0.207066
+v -17.041195 -1.291138 7.667659
+v -17.578733 -1.183625 12.495514
+v -18.441160 -0.691478 12.903254
+v -17.299562 0.449444 0.322948
+v -18.426628 0.253030 12.859657
+v -17.547035 0.731608 12.406009
+v -16.478001 0.999445 2.853502
+v -16.862846 0.694919 0.323201
+v -16.658756 0.250698 11.985045
+v -15.854557 0.342403 5.972002
+v -16.005144 0.429508 5.983765
+v -16.675989 -0.720391 12.031002
+v -16.395901 -0.741303 9.932241
+v -16.171280 -0.386559 8.280899
+v -15.681992 -0.097181 4.642444
+v -17.036573 -1.104926 9.847929
+v -9.987133 48.789970 -0.572327
+v -9.854227 51.008362 13.549235
+v -10.262409 51.247650 13.512308
+v -10.470299 52.134037 18.191031
+v -10.816189 52.332458 18.132994
+v -10.807470 53.078506 18.001734
+v -9.971981 50.001514 -0.807594
+v -10.148491 53.451527 17.979584
+v -8.888971 50.588219 -0.983385
+v -9.498229 53.078506 18.088692
+v -7.815941 49.959267 -0.923412
+v -9.501032 52.838730 18.130878
+v -9.152866 51.573235 14.222766
+v -9.193509 52.293495 14.654400
+v -21.331375 32.672367 10.434389
+v -20.966772 32.881603 10.157102
+v -20.049295 32.370659 9.851983
+v -20.079538 31.336252 10.259907
+v -20.235252 31.253084 10.375987
+v -50.208626 -24.470377 12.319769
+v -50.734497 -23.611458 -0.005041
+v -49.669395 -24.229452 0.019541
+v -49.418903 -24.912395 11.977969
+v -50.231834 -23.498451 11.814823
+v -50.737270 -22.375734 -0.018638
+v -50.199135 -24.334181 12.548539
+v -49.669964 -21.760036 -0.007547
+v -49.445030 -22.913952 10.730605
+v -48.612549 -23.383545 10.568686
+v -48.614967 -24.415989 11.505301
+v -49.195759 -24.803617 12.265945
+v -25.468103 -29.954908 12.512896
+v -26.645540 -31.293795 4.780623
+v -26.555826 -31.345472 4.774445
+v -26.555239 -32.225456 1.367127
+v -27.216854 -32.448338 -0.926911
+v -27.048286 -32.545803 -0.939922
+v -26.336451 -32.906208 -0.796639
+v -24.615305 -30.445827 12.455441
+v -25.192831 -30.118801 12.473316
+v -25.440254 -28.935820 12.673489
+v -27.192104 -30.630693 1.162316
+v -24.581888 -28.423290 12.712746
+v -26.332945 -30.229584 -0.769641
+v -26.941051 -30.591787 -0.781667
+v -23.747171 -28.915625 12.593465
+v -25.195734 -30.884846 -0.857233
+v -25.181583 -32.203640 -0.767955
+v -25.198517 -31.389698 -0.898854
+v -23.761097 -29.930861 12.432800
+v -23.866858 -29.995461 12.427732
+v -16.334902 49.142693 9.858041
+v -16.720800 48.496681 0.426917
+v -15.801808 47.951527 0.269152
+v -15.648480 47.860035 0.237021
+v -15.454825 48.677345 10.322698
+v -16.717009 49.742371 0.482848
+v -16.334190 49.561138 9.863053
+v -16.298054 50.187119 10.729429
+v -15.646281 50.358585 0.351541
+v -15.915442 50.203743 0.387719
+v -15.428485 50.708759 11.694550
+v -14.570616 49.730312 0.163556
+v -14.597981 50.211327 11.254963
+v -14.595640 49.208576 10.787236
+v -14.568984 48.478130 0.114544
+v -14.569633 48.970081 0.136943
+v -14.596461 49.873997 10.794165
+v -15.554204 47.914387 0.231621
+v -7.274852 6.272435 12.436129
+v -7.305138 7.571339 0.445920
+v -6.685665 7.219667 0.383081
+v -6.231509 6.964939 0.308061
+v -6.478467 5.736260 13.141999
+v -6.873158 6.001735 12.794561
+v -7.278263 7.290208 11.881432
+v -6.941455 7.477129 11.957120
+v -5.381540 8.314898 4.495932
+v -5.664932 7.173536 12.779004
+v -5.311392 8.323732 4.181390
+v -5.159634 7.982682 0.427139
+v -5.159692 8.014348 0.431006
+v -5.689477 6.180665 13.306287
+v -5.157902 7.584658 0.354224
+v -29.898825 2.287143 -0.289230
+v -28.760002 1.616849 -0.196904
+v -26.819767 0.802879 12.242919
+v -27.721037 1.327005 11.932092
+v -27.640396 2.264683 12.356512
+v -26.677505 2.647914 13.068529
+v -25.815395 2.123055 13.356381
+v -27.578674 3.485470 0.146788
+v -27.608999 2.221728 0.006125
+v -27.599186 2.691124 0.047575
+v -25.877588 1.215321 12.954708
+v -50.586842 -43.931725 0.055571
+v -49.446671 -44.603535 0.002512
+v -50.727417 -44.347366 11.505379
+v -51.650780 -43.819817 11.927397
+v -50.571274 -42.621288 0.046347
+v -50.586636 -43.875008 0.060424
+v -51.581726 -42.797382 11.285927
+v -50.476662 -42.239479 9.472506
+v -49.421448 -41.975105 0.043506
+v -51.488209 -42.748360 11.184340
+v -49.438641 -42.774960 8.697432
+v -48.282837 -42.643162 0.055440
+v -49.614532 -43.861500 9.921333
+v -48.298763 -43.959736 0.062020
+v -48.298763 -43.875008 0.069268
+v -50.346634 -44.169270 11.104097
+v -49.082680 -31.176085 -0.128940
+v -48.721394 -31.395145 -0.140866
+v -48.147808 -31.218004 3.065550
+v -48.399982 -30.448565 6.862182
+v -49.387051 -29.875538 6.738307
+v -49.376114 -28.737896 6.590449
+v -49.076767 -29.840340 -0.148688
+v -49.366211 -29.112297 6.339285
+v -47.932995 -29.189413 -0.168697
+v -49.059322 -29.830521 -0.149562
+v -48.441727 -28.032887 7.490682
+v -47.468605 -28.604179 7.536948
+v -46.783794 -29.873934 -0.202349
+v -47.388409 -29.911549 6.680363
+v -47.185295 -30.347063 4.387443
+v -47.070713 -30.018686 3.069296
+v -46.782650 -30.116907 -0.204940
+v -47.901451 -30.747683 4.431323
+v -47.559021 -30.050823 6.508787
+v -36.312359 5.069048 7.513262
+v -35.695332 4.753560 -0.308897
+v -35.673775 4.741099 -0.308396
+v -36.086208 4.938111 7.561323
+v -35.671333 7.243601 -0.354970
+v -35.685627 7.235339 -0.355292
+v -36.490990 6.819726 9.125946
+v -36.187523 6.997024 9.494574
+v -35.317291 6.494536 9.528689
+v -34.587936 6.617812 -0.308532
+v -35.250107 6.999892 -0.329626
+v -35.244297 5.476657 8.544174
+v -34.589294 5.365951 -0.290199
+v -35.441525 4.875001 -0.302930
+v -35.445675 5.346623 8.287026
+v -40.350494 -9.269688 11.248183
+v -40.830368 -8.485897 0.001454
+v -39.703716 -9.137558 -0.017924
+v -39.466667 -9.783847 11.298596
+v -40.349777 -8.251707 11.307518
+v -40.674076 -7.531355 3.715016
+v -40.831360 -8.041989 -0.003362
+v -40.350658 -9.212409 11.246733
+v -39.586205 -7.126881 5.592071
+v -40.226318 -7.496098 5.585037
+v -40.216003 -8.164626 11.226041
+v -39.467751 -7.734546 11.246918
+v -38.574963 -7.183770 0.004229
+v -38.797325 -7.054355 0.005623
+v -39.157978 -7.235960 4.118024
+v -38.583981 -8.254260 11.297468
+v -38.577263 -8.488231 -0.012228
+v -38.576000 -7.772009 -0.003347
+v -38.585812 -9.277482 11.323172
+v -39.645905 -9.104095 -0.019648
+v -21.970802 29.281651 10.234532
+v -21.015062 28.943092 10.989861
+v -23.135317 29.047993 2.562497
+v -22.070307 30.174503 9.558364
+v -23.507977 28.783590 0.111626
+v -23.508581 28.752630 0.108342
+v -22.424366 29.429346 0.138834
+v -23.317301 28.897434 0.120161
+v -21.571613 30.474501 9.620382
+v -21.359480 28.816450 0.060179
+v -21.362522 28.245840 0.014090
+v -20.168829 29.465889 11.085534
+v -21.368179 27.546925 -0.060191
+v -36.192722 1.590655 5.680729
+v -36.438553 1.179128 -0.327166
+v -36.430943 1.174751 -0.326989
+v -36.176521 1.580327 5.670162
+v -36.436939 2.500065 -0.326801
+v -36.200520 2.271391 5.469633
+v -36.184128 2.768439 5.856303
+v -35.294853 3.160641 -0.299924
+v -35.154823 3.385778 6.992882
+v -34.154884 2.504279 -0.273422
+v -34.173347 2.828823 7.210012
+v -47.114567 25.272840 12.573171
+v -47.145138 26.583923 0.470527
+v -46.074520 25.963560 0.479640
+v -46.298092 24.851217 12.098419
+v -47.115536 26.161182 12.963729
+v -46.312386 26.641306 12.889806
+v -44.991482 27.857546 0.308260
+v -45.489544 26.237167 12.420477
+v -44.999126 26.594975 0.399753
+v -44.991604 27.848320 0.310551
+v -45.476025 25.335400 12.019569
+v -42.208286 16.621185 0.287197
+v -41.061356 15.942622 0.249210
+v -39.697781 15.370575 8.991773
+v -40.647751 15.933179 9.044635
+v -38.525238 16.842093 10.504855
+v -39.880318 17.889109 0.353284
+v -38.637772 15.843356 9.734768
+v -39.899410 16.904116 0.277434
+v -39.904102 16.579430 0.264342
+v -24.527740 18.659174 13.564475
+v -24.574085 18.744291 12.239517
+v -23.398098 18.620596 -0.882562
+v -23.924976 18.296219 13.715386
+v -23.385874 19.889189 -0.859792
+v -23.385971 19.090828 -0.958773
+v -24.135405 19.405521 7.433229
+v -24.136694 19.758347 7.491819
+v -23.856129 20.117964 13.283496
+v -24.334755 19.816816 12.362057
+v -24.493172 19.760567 13.302621
+v -23.087332 19.649504 13.477308
+v -23.126514 18.738638 13.692751
+v -43.972157 46.987492 -0.221700
+v -43.838409 46.905453 -0.231909
+v -42.893459 46.334869 -0.248549
+v -43.736042 48.905800 12.437132
+v -44.561157 49.504234 13.067392
+v -43.972363 48.262772 -0.110565
+v -43.971130 47.182678 -0.228232
+v -43.971825 47.066906 -0.222472
+v -44.564011 50.169571 13.186349
+v -44.568382 50.457817 13.307542
+v -42.905621 48.881916 -0.065458
+v -43.433647 48.581470 -0.055919
+v -43.775436 50.859299 13.030235
+v -41.824444 48.229687 -0.170749
+v -42.417820 48.582180 -0.161926
+v -42.929585 50.278801 12.318834
+v -41.815304 46.960720 -0.220225
+v -42.901939 49.621155 12.032466
+v -42.894894 49.275578 11.967139
+v -42.783703 46.397469 -0.250286
+v -48.388115 17.599415 10.454988
+v -48.091049 19.571301 9.986876
+v -47.586666 19.812235 0.362670
+v -47.139267 19.040411 9.685670
+v -46.443832 19.157951 0.305958
+v -47.152664 17.963364 9.866436
+v -47.036606 17.943747 8.301072
+v -46.479149 18.805336 0.782318
+v -46.485722 17.850637 0.870966
+v -46.439228 17.842779 0.243906
+v -46.437424 18.468864 0.219542
+v -47.146347 18.511341 9.781195
+v -47.343754 17.859135 9.969632
+v -46.460213 17.830645 0.242713
+v -46.273594 38.554169 10.685622
+v -46.738453 39.313435 -0.209221
+v -45.583576 38.651508 -0.363897
+v -45.353100 38.023136 10.638886
+v -46.307453 39.693653 9.937280
+v -46.731037 40.634548 0.020205
+v -44.420956 40.643761 -0.125360
+v -44.428291 39.772812 9.062811
+v -44.423206 39.315559 -0.288235
+v -44.421616 40.273033 -0.121828
+v -44.430843 38.610180 9.842575
+v -29.688423 50.975643 14.083416
+v -30.163170 51.206821 13.952276
+v -30.490677 51.396854 13.980136
+v -30.404150 52.390343 14.528158
+v -32.616516 50.249924 -0.009024
+v -29.563288 52.919682 15.046908
+v -31.496599 50.925385 0.161232
+v -31.962103 50.648197 0.153438
+v -29.772480 52.785835 14.879915
+v -28.783182 52.525814 15.255917
+v -30.388447 50.343559 0.350128
+v -28.830353 51.570953 14.789847
+v -30.377048 49.096237 0.416205
+v -30.375778 49.656746 0.445597
+v -36.285343 21.940720 0.366754
+v -36.232216 21.909172 0.357306
+v -35.966637 22.332527 6.617380
+v -35.724190 22.314453 7.940768
+v -35.976166 22.458292 7.922811
+v -35.990372 22.999121 7.558901
+v -34.038761 23.217381 -0.182384
+v -34.055431 23.510391 6.573958
+v -34.055664 23.096275 6.878263
+v -19.108246 -12.061023 12.030490
+v -19.139942 -10.701571 -0.518628
+v -18.031389 -11.346110 -0.488688
+v -18.273993 -12.553136 12.119063
+v -19.112188 -10.988593 11.293427
+v -17.409071 -11.008686 11.470017
+v -16.915737 -10.686525 -0.625144
+v -17.408638 -11.875773 11.393257
+v -17.412510 -11.998602 11.478972
+v -34.404568 25.679270 -0.245968
+v -33.439384 25.274357 5.942294
+v -33.522377 27.728111 5.300327
+v -33.532887 27.735975 5.232798
+v -33.533028 27.722822 5.297671
+v -32.397369 27.038256 5.891796
+v -33.235252 27.685654 -0.385189
+v -33.519466 27.856518 -0.385488
+v -32.366211 25.827209 6.204982
+v -33.265892 26.350163 -0.523416
+v -33.236225 27.625000 -0.388335
+v -33.272675 26.346510 -0.524017
+v -26.605347 20.078762 13.642230
+v -26.622095 20.088545 13.644978
+v -27.403543 20.551250 13.629434
+v -26.101604 20.414307 -0.898045
+v -25.994364 20.351065 -0.901805
+v -25.973148 19.952314 7.964209
+v -26.101448 21.700069 -0.738636
+v -27.375978 21.477959 13.438376
+v -26.541651 21.940710 13.260575
+v -24.988455 22.329847 -0.618200
+v -25.968805 20.127378 10.013939
+v -8.936156 48.887878 11.489494
+v -7.307878 45.983322 -0.344882
+v -8.411240 46.644943 -0.353824
+v -9.002772 50.130001 13.072501
+v -8.935373 49.101215 11.489916
+v -8.399275 47.907406 -0.514003
+v -8.657674 50.455688 13.750487
+v -8.268003 50.746788 14.110481
+v -7.285995 48.514359 -0.674345
+v -7.607650 48.340107 -0.622135
+v -7.477534 50.269299 14.027843
+v -6.178044 47.859833 -0.658139
+v -7.114830 48.414028 -0.664779
+v -7.723530 50.429913 14.161184
+v -6.188935 46.593285 -0.479801
+v -6.185968 46.783550 -0.521735
+v -7.302345 48.980659 12.089357
+v -6.387098 46.481853 -0.470055
+v -18.205822 -17.584982 11.198298
+v -17.634575 -17.312109 0.298256
+v -17.268167 -18.046810 9.792706
+v -16.568575 -17.928566 0.356934
+v -17.365435 -17.467346 0.305739
+v -43.523327 6.636935 6.292892
+v -43.794388 7.079669 -0.059965
+v -43.573273 6.952597 -0.082038
+v -42.722454 6.461918 -0.128785
+v -42.588604 6.096992 6.261096
+v -41.648556 7.081151 -0.126203
+v -41.653442 6.630136 6.351351
+v -39.450573 -16.228188 11.222596
+v -39.558201 -16.179571 11.178172
+v -40.440910 -15.890628 10.388582
+v -40.378979 -14.813472 10.772555
+v -42.018948 -16.400101 -0.003434
+v -39.404942 -14.188917 11.573928
+v -40.902794 -15.734018 0.041100
+v -39.998669 -14.561669 11.225414
+v -38.518669 -14.610564 11.936291
+v -39.799046 -16.351152 0.047275
+v -39.794800 -17.632483 0.046214
+v -39.799015 -16.505157 0.042705
+v -38.533566 -15.614515 11.767001
+v -9.500967 10.446535 10.369212
+v -9.667579 10.167622 6.297331
+v -8.892467 10.109838 10.528238
+v -9.504388 11.101984 10.266008
+v -9.502036 11.315008 10.317306
+v -9.498058 11.406869 10.412001
+v -9.497272 11.435657 10.430393
+v -9.280249 11.558929 10.321568
+v -8.642118 11.933946 10.636120
+v -7.771873 11.020571 0.826517
+v -7.796829 11.459201 10.940628
+v -7.795373 10.480192 10.828221
+v -8.193465 10.235292 10.630728
+v -8.388412 10.120995 10.614560
+v -17.028427 -2.336446 12.267670
+v -17.058905 -1.029315 0.201507
+v -16.015127 -1.623732 0.113143
+v -16.241829 -2.751637 11.894483
+v -17.030420 -1.423851 12.233480
+v -16.239513 -0.905281 11.822170
+v -15.153664 -0.399614 4.613462
+v -15.431556 -1.314222 11.438174
+v -15.150301 -0.399189 4.598377
+v -14.969730 -1.016671 0.115215
+v -14.969721 -0.767474 0.133986
+v -15.435598 -2.161824 11.472845
+v -15.436654 -2.249909 11.492058
+v -15.458732 -2.262404 11.488168
+v -33.003708 -18.648148 -0.344647
+v -31.932003 -19.284340 -0.459932
+v -31.855583 -19.329138 -0.446927
+v -29.673254 -20.244671 13.545076
+v -30.754728 -19.639673 12.276190
+v -30.766188 -18.612583 12.182349
+v -31.526438 -18.167898 7.912811
+v -31.902420 -18.532549 5.818200
+v -32.999226 -18.465174 -0.324832
+v -29.685820 -18.261900 13.374712
+v -30.969547 -17.301317 5.124928
+v -30.975449 -17.852789 7.844900
+v -31.808205 -16.684919 -0.209306
+v -31.777653 -16.696627 -0.068306
+v -31.799603 -16.680202 -0.209360
+v -28.670986 -18.899366 14.570905
+v -30.659042 -17.363277 -0.322603
+v -30.875000 -17.233971 -0.299809
+v -30.956608 -17.185095 -0.291826
+v -31.264181 -17.000879 -0.261738
+v -30.666922 -18.696224 -0.291644
+v -30.668819 -17.862114 -0.361819
+v -28.670139 -19.361418 14.608254
+v -28.682104 -19.849926 14.552068
+v -28.805996 -19.910160 14.498063
+v -30.669350 -18.697599 -0.291412
+v -21.723862 31.198034 0.262835
+v -21.632343 30.732929 9.697914
+v -22.559738 31.285955 9.589841
+v -21.718918 32.515575 0.372870
+v -21.723036 31.404722 0.279537
+v -22.583725 32.364868 9.992401
+v -21.696791 32.880863 10.493610
+v -20.566412 33.164070 0.392968
+v -21.557570 32.797798 10.509817
+v 6.185346 35.354652 -1.218035
+v 7.304761 34.722481 -0.968856
+v 6.662908 36.680935 8.694697
+v 5.743962 37.240646 8.740544
+v 5.706420 38.462868 9.676264
+v 6.192426 36.672985 -1.265107
+v 6.192704 36.638618 -1.274157
+v 6.192568 36.550873 -1.278466
+v 6.191845 36.456860 -1.270268
+v 6.541151 39.101643 10.527851
+v 7.310219 37.353294 -1.051015
+v 6.400562 36.798508 -1.231335
+v 7.419394 38.577423 10.492367
+v 8.426950 36.709248 -0.894376
+v 8.426803 35.398609 -0.836381
+v 8.430303 36.287613 -0.914408
+v 7.502726 37.380009 9.595394
+v 7.621664 34.917053 -0.916445
+v -28.952854 -1.746807 11.147616
+v -28.074163 -2.196086 0.008296
+v -28.030260 -2.221498 0.016235
+v -28.619715 -1.939927 11.263683
+v -28.018764 0.405481 -0.203125
+v -28.050920 0.386869 -0.208943
+v -28.972227 -0.088577 10.637256
+v -28.602644 0.126570 10.937960
+v -26.882902 -0.253056 -0.110181
+v -27.724174 -0.395245 11.236513
+v -26.894955 -1.566420 0.052370
+v -26.882742 -0.278502 -0.112337
+v -27.714241 -0.742117 11.102538
+v -27.728634 -1.425514 11.296658
+v -28.357552 -1.789392 11.258714
+v -31.485598 -13.380294 12.384183
+v -32.008358 -12.526458 0.132342
+v -30.895748 -13.166058 0.025636
+v -30.646318 -13.846107 11.933302
+v -31.478582 -12.415627 12.589305
+v -32.010864 -11.233281 0.127356
+v -32.010509 -11.375000 0.129749
+v -32.007870 -12.224652 0.156386
+v -31.478331 -12.447824 12.593879
+v -30.892847 -10.591335 0.164120
+v -31.026695 -10.667088 0.150503
+v -31.322639 -12.321814 12.558687
+v -30.637115 -11.903258 12.372653
+v -30.240332 -12.114326 12.161579
+v -29.787437 -12.430085 12.706389
+v -29.789238 -13.411725 12.800065
+v -30.875000 -13.154084 0.025552
+v -30.599234 -13.818054 11.920365
+v -5.196743 10.196240 12.182876
+v -4.346627 9.794304 12.464314
+v -5.144319 11.185246 12.506167
+v -6.948061 9.440168 0.654014
+v -4.265328 11.740966 13.090279
+v -5.873727 10.081833 0.706298
+v -6.529886 9.690228 0.679601
+v -3.451222 11.339526 13.354809
+v -4.825040 9.471913 0.598140
+v -4.837353 8.211047 0.444649
+v -3.480748 10.381615 13.051747
+v -21.259438 48.199863 11.590630
+v -21.696545 47.468132 0.908033
+v -21.125002 47.134285 0.866315
+v -20.622217 46.834270 0.760953
+v -20.428480 47.651928 10.850906
+v -21.241072 49.194683 12.010951
+v -21.689072 48.719101 1.053987
+v -21.688658 48.679550 1.065290
+v -20.617472 49.337502 1.007995
+v -21.311493 48.936497 1.012641
+v -20.411882 49.668045 11.715199
+v -19.544487 48.711845 0.845475
+v -20.566427 49.308582 1.020483
+v -19.569498 49.151459 10.982164
+v -19.567190 48.130032 10.537811
+v -19.542616 47.456665 0.699112
+v -19.544224 48.512890 0.836416
+v -38.695324 -41.987068 -0.174653
+v -38.520191 -42.086945 -0.188183
+v -37.616932 -42.628998 -0.005840
+v -37.821285 -43.645725 10.614221
+v -38.667999 -43.159042 10.643870
+v -38.672649 -42.039333 9.641924
+v -38.697872 -40.731796 -0.138426
+v -37.783249 -41.390251 8.691668
+v -37.615845 -40.117573 0.003204
+v -38.372826 -40.539600 -0.152688
+v -38.360970 -41.805302 9.260337
+v -36.894409 -41.919121 8.770186
+v -37.432278 -40.230083 0.040252
+v -36.673084 -42.360222 3.299250
+v -36.936401 -43.055695 9.715117
+v -37.151646 -42.366829 0.089990
+v -37.043968 -42.400154 1.223792
+v -37.506367 -43.431911 10.248990
+v -46.389629 -32.745338 7.699675
+v -47.347191 -32.182961 7.576147
+v -48.721855 -31.576906 -0.138193
+v -47.594143 -32.244099 -0.175660
+v -46.368214 -32.758400 7.684377
+v -47.446213 -31.013960 6.987938
+v -46.672825 -30.511051 6.591906
+v -46.503540 -30.443090 6.714200
+v -45.521954 -31.034023 6.750853
+v -46.451744 -30.315615 -0.214646
+v -45.465054 -32.194103 7.252117
+v -46.465256 -31.612724 -0.228025
+v -45.529545 -31.104790 6.699137
+v -46.314590 -32.727726 7.677401
+v -46.590439 -31.682182 -0.225879
+v -37.537354 5.432134 7.069375
+v -36.873013 5.362257 -0.343561
+v -36.050842 4.875001 -0.317182
+v -35.772770 4.710311 -0.310719
+v -36.606434 4.877055 7.176723
+v -37.098129 5.171981 7.079980
+v -36.855022 6.638106 -0.384137
+v -36.872826 5.377174 -0.343776
+v -37.593964 6.183589 7.794502
+v -37.604790 6.507444 7.955748
+v -35.738461 7.266588 -0.358493
+v -37.332211 6.678172 8.458193
+v -36.798912 7.000903 9.117293
+v -40.914333 -7.991897 -0.001957
+v -40.626762 -6.274239 11.614029
+v -41.454727 -5.682844 12.190496
+v -41.453876 -4.751402 12.249433
+v -40.910202 -6.753671 0.009756
+v -40.913673 -7.836329 -0.003669
+v -40.710548 -4.465284 11.512039
+v -40.620117 -4.413157 11.513955
+v -39.856171 -6.149860 0.012215
+v -39.928562 -6.190480 0.016540
+v -40.762508 -4.436875 11.819695
+v -39.785648 -4.946649 11.163201
+v -38.798687 -6.776637 0.009197
+v -38.934677 -6.695980 0.010069
+v -39.604958 -6.298349 0.015136
+v -40.610004 -4.395800 11.723096
+v -39.801262 -4.937499 11.162309
+v -39.784176 -5.893263 11.187115
+v -39.935383 -5.981090 11.182919
+v -41.126034 -4.228117 12.069550
+v -41.601990 -3.954030 12.250370
+v -41.223167 -4.108195 -0.080113
+v -40.103664 -4.755184 -0.068005
+v -41.222591 -2.816312 -0.098873
+v -41.222252 -3.626647 -0.109969
+v -41.594841 -2.967807 12.017670
+v -40.098946 -2.167306 -0.158067
+v -40.801453 -2.512029 11.504307
+v -40.704109 -2.456384 11.389175
+v -38.970230 -2.813368 -0.216627
+v -39.205788 -2.677723 -0.219144
+v -39.796764 -2.953068 10.931290
+v -39.819355 -3.967857 11.236009
+v -38.976196 -4.110364 -0.136126
+v -39.816380 -3.362586 11.195853
+v -39.821064 -3.624389 11.259058
+v -36.161213 0.549086 5.986954
+v -36.430614 0.989110 -0.327028
+v -35.292355 0.328663 -0.300567
+v -35.174713 0.007923 5.315599
+v -34.770954 0.270531 4.885962
+v -48.190189 14.558874 10.853311
+v -48.624989 13.831007 0.227136
+v -47.553429 13.222333 0.336170
+v -47.357346 14.049891 10.548285
+v -48.194851 15.521792 10.710745
+v -48.625473 15.064661 0.178807
+v -47.555279 15.684359 0.239649
+v -47.362907 15.993658 10.258738
+v -46.802834 15.661968 10.052023
+v -46.512363 15.489083 9.924273
+v -46.488739 15.073792 0.348358
+v -46.511524 14.507319 10.067828
+v -46.487370 13.845412 0.396550
+v -46.873260 14.312649 10.287051
+v -9.435281 33.204788 13.622202
+v -9.708565 33.363693 13.683614
+v -8.503062 33.236893 0.232214
+v -7.435857 32.609348 0.153244
+v -8.931795 32.908558 13.588868
+v -8.500730 34.457573 0.359190
+v -8.501019 33.397358 0.229545
+v -9.710033 34.246830 13.810660
+v -8.947280 34.678925 13.907450
+v -7.423257 35.060757 0.289348
+v -9.652829 34.278862 13.807183
+v -8.175437 34.231487 13.857554
+v -6.329955 34.441933 0.058809
+v -6.384361 34.471924 0.078844
+v -6.337424 33.637264 0.045899
+v -6.326266 34.125000 0.004078
+v -8.164274 33.344872 13.698143
+v -6.343274 33.208908 0.053056
+v 9.367020 46.458164 0.642698
+v 10.316065 45.915401 0.812111
+v 10.394545 45.866302 0.800219
+v 9.440670 48.776814 15.161510
+v 8.696528 49.323101 15.770367
+v 8.657347 50.300213 16.721996
+v 9.379538 47.640499 0.463431
+v 9.328665 50.708260 16.847761
+v 10.416652 48.234905 0.467362
+v 9.062655 50.574306 16.944668
+v 11.446232 47.638542 0.588695
+v 10.905734 47.954933 0.554707
+v 9.967090 50.300507 16.582977
+v 10.035603 50.254078 16.530674
+v 11.430695 46.464996 0.815924
+v 10.124340 49.266083 15.563217
+v 10.756358 46.080509 0.827091
+v 11.344637 46.418770 0.829153
+v -42.818310 -28.720354 -0.365903
+v -41.674660 -29.380842 -0.440856
+v -42.209614 -29.125301 9.766695
+v -42.442257 -28.989611 9.527324
+v -43.121132 -28.597115 9.490912
+v -43.151596 -27.541752 10.482451
+v -42.822189 -27.407698 -0.239679
+v -42.821861 -27.625000 -0.250401
+v -43.131920 -28.075766 9.842001
+v -43.154114 -27.630241 10.564355
+v -42.212475 -27.002535 9.821287
+v -41.686623 -26.751345 -0.212575
+v -42.484631 -27.160616 9.666907
+v -41.296154 -27.533056 9.883047
+v -40.544849 -27.406076 -0.250183
+v -41.661171 -27.349213 10.356627
+v -41.333824 -28.587048 10.391116
+v -40.535469 -28.721981 -0.376685
+v -40.544048 -27.625000 -0.260988
+v -41.288025 -27.684387 9.773418
+v -41.315128 -28.220676 10.138970
+v -41.658920 -28.762976 10.591981
+v -35.870708 21.091541 8.820369
+v -36.231258 21.680435 0.370212
+v -35.161739 21.069611 0.178622
+v -34.979237 20.572037 8.891134
+v -35.904160 22.193745 8.080154
+v -31.203835 47.009544 0.128691
+v -30.116476 46.455891 0.335496
+v -28.291544 49.064632 14.386686
+v -29.123240 49.375427 13.792031
+v -29.117186 49.793743 13.822501
+v -29.077623 50.289688 14.072132
+v -28.246197 50.821644 14.735838
+v -30.099440 48.909946 0.466669
+v -27.483950 50.463623 15.069819
+v -29.034891 48.355221 0.668476
+v -27.775785 50.584141 14.861874
+v -29.037651 47.138130 0.604654
+v -27.486996 49.619179 15.015085
+v -35.475803 26.959496 4.762985
+v -35.681072 26.615868 -0.253647
+v -33.519474 27.862015 -0.385206
+v -33.533260 28.104347 5.202581
+v -25.957603 18.732965 13.614861
+v -25.994282 20.306162 -0.907368
+v -24.893764 19.673382 -0.943934
+v -25.173384 18.282202 13.587413
+v -25.419598 18.431253 13.525578
+v -25.959711 19.655973 13.540036
+v -25.167547 20.147764 13.332237
+v -23.798939 21.560034 -0.668368
+v -24.689240 19.882380 13.252627
+v -23.796497 20.300640 -0.824409
+v -32.948273 16.800783 11.744851
+v -33.894363 17.044794 -0.046014
+v -31.935516 16.223019 12.513144
+v -32.307022 16.445646 12.631531
+v -32.107647 18.372444 11.315207
+v -33.879028 19.697931 -0.068456
+v -30.994583 17.666475 12.924242
+v -32.759186 19.029911 -0.295257
+v -32.769592 17.701946 -0.283459
+v -30.913038 16.925566 13.580697
+v -30.956888 16.648287 13.273089
+v -25.289307 -22.712114 15.296290
+v -25.874340 -22.368542 15.349685
+v -24.479332 -22.515274 -0.216305
+v -24.375002 -22.577057 -0.214015
+v -23.446951 -23.134480 -0.013996
+v -25.119242 -22.799999 15.005511
+v -24.455240 -21.294842 -0.331841
+v -25.856628 -21.539059 15.256259
+v -23.394644 -20.695333 -0.234963
+v -24.375002 -21.249985 -0.338763
+v -25.110239 -21.125158 15.094975
+v -22.363827 -21.319973 -0.012280
+v -25.060698 -21.153749 15.090400
+v -24.184498 -21.527586 13.600972
+v -24.180769 -22.404732 13.498027
+v -0.303760 34.785023 8.246343
+v -0.500025 34.934830 8.442104
+v -0.071708 33.104668 -1.221658
+v 1.084580 32.415066 -1.189210
+v 0.462927 34.311886 8.170229
+v -0.491517 36.021767 8.344023
+v -0.063674 34.446079 -1.288018
+v -0.068156 33.346577 -1.280325
+v -0.491901 35.371922 8.298219
+v 1.088725 35.112610 -1.251602
+v 0.607771 34.830086 -1.289804
+v 0.452362 36.559273 8.329296
+v 2.249036 34.421558 -1.284730
+v 1.227818 35.025890 -1.290338
+v 1.406638 35.983501 8.235486
+v 2.253320 33.065392 -1.275227
+v 1.417929 34.856632 8.155394
+v 1.433998 32.595501 -1.273040
+v -34.169830 39.797215 8.121559
+v -34.170559 41.854385 5.656455
+v -34.034668 41.932312 5.542511
+v -33.156715 41.370018 6.580015
+v -33.922096 41.863976 5.607370
+v -32.631588 40.206188 -0.502669
+v -33.230179 40.307358 7.570870
+v -33.450577 40.179668 7.554432
+v -9.488353 8.744871 10.637803
+v -9.914196 9.440413 0.657374
+v -9.465912 9.181824 0.634072
+v -8.830887 8.815889 0.592747
+v -8.615587 8.228892 10.871067
+v -9.497036 9.766532 10.476350
+v -15.207047 1.337039 11.224901
+v -14.304169 0.814741 11.154211
+v -14.708736 0.998565 10.991395
+v -16.861467 0.788311 0.330179
+v -15.209412 2.386637 11.185615
+v -14.595517 2.743001 11.034121
+v -14.463223 2.814125 10.901524
+v -14.343215 2.882749 10.853582
+v -15.709613 1.473246 0.332893
+v -16.393764 1.066443 0.331598
+v -14.814691 2.609726 10.981717
+v -13.383076 2.438110 11.304903
+v -14.575454 0.817150 0.233010
+v -14.625003 0.846599 0.241174
+v -15.495986 1.349952 0.315463
+v -14.197017 2.779215 10.749000
+v -14.091682 2.725734 10.775776
+v -14.581775 -0.532700 0.132089
+v -13.367932 2.208441 11.437637
+v -13.355581 1.429211 11.527261
+v -14.625003 -0.558536 0.135329
+v -13.888935 1.073513 11.222110
+v -33.086205 -18.414095 -0.315536
+v -31.791500 -18.064419 11.594971
+v -32.580070 -17.566809 12.054031
+v -32.577560 -16.643955 12.088195
+v -33.079372 -17.176659 -0.184884
+v -33.080032 -17.323742 -0.196580
+v -32.583450 -17.212917 11.960843
+v -32.017765 -16.563211 -0.189109
+v -31.786285 -16.191036 11.866573
+v -30.956615 -17.179510 -0.291380
+v -31.176191 -16.556911 11.532597
+v -30.986343 -16.656960 11.757826
+v -30.985449 -17.578764 11.848725
+v -31.456482 -17.887463 11.344218
+v -31.535820 -17.931952 11.366651
+v 7.536171 40.321796 12.819620
+v 8.301222 39.868706 12.917739
+v 8.551476 41.113785 -0.087526
+v 8.542851 43.481564 0.423765
+v 9.011903 41.016708 14.327679
+v 9.589628 42.896278 0.278053
+v 8.995586 40.669250 14.702044
+v 9.020409 40.190235 14.055658
+v 9.594918 41.707626 0.057444
+v 9.415750 41.604630 0.044708
+v -37.315201 41.881321 -0.499283
+v -36.159332 41.198166 -0.511419
+v -35.863594 41.215469 6.678233
+v -36.072311 41.333359 6.475575
+v -34.284554 42.619366 4.756982
+v -35.001709 43.173485 -0.615582
+v -34.809536 42.941998 4.449778
+v -35.007515 41.843052 -0.569375
+v -29.271069 -1.564492 -0.200224
+v -28.148075 -2.237430 0.005776
+v -29.389254 -1.989179 11.153276
+v -30.157520 -1.522996 10.878982
+v -30.249815 -1.461545 10.720986
+v -29.241098 -0.238100 -0.368004
+v -30.159857 -0.398210 9.851658
+v -28.093695 0.412247 -0.212394
+v -28.892948 -0.042008 -0.356305
+v -29.469189 0.003837 10.248728
+v -29.289957 0.112535 10.476958
+v -29.186924 0.043827 10.566253
+v -45.342693 -19.474735 -0.021561
+v -45.269199 -19.518703 -0.020348
+v -44.187553 -20.164694 0.004437
+v -44.545788 -19.071629 5.397925
+v -45.197052 -18.776930 4.803853
+v -45.543449 -18.616919 4.507956
+v -45.335888 -18.130655 -0.060330
+v -45.547710 -18.159128 4.640794
+v -45.610481 -17.119375 6.121520
+v -44.628223 -16.459299 6.639004
+v -44.182831 -17.471832 -0.066736
+v -44.399284 -17.596712 -0.071907
+v -45.163025 -18.032265 -0.063297
+v -43.640930 -17.017807 6.875024
+v -43.029484 -18.151527 -0.035126
+v -44.370575 -16.654278 6.259684
+v -43.026714 -19.501347 -0.008689
+v -43.027733 -18.651751 -0.033572
+v -43.606621 -18.257917 6.537781
+v -44.492603 -19.034342 5.425959
+v -28.155643 -32.998989 12.510229
+v -28.725742 -32.067833 -0.851079
+v -27.640911 -32.692394 -0.934593
+v -27.361408 -33.454433 12.408697
+v -28.723570 -30.817698 -0.747875
+v -28.153849 -32.227768 12.584636
+v -28.154137 -32.082569 12.583891
+v -27.636585 -30.191656 -0.728147
+v -27.358353 -31.618999 12.554510
+v -26.561983 -32.076260 12.483999
+v -27.036980 -31.805290 12.544585
+v -26.563553 -32.993324 12.395482
+v -45.763073 45.704823 11.740923
+v -44.953888 45.174961 11.438336
+v -47.532982 44.930214 0.089893
+v -45.665504 46.777779 12.359926
+v -47.533146 44.970879 0.087894
+v -44.793640 47.313831 12.672155
+v -46.440426 45.615097 -0.007390
+v -44.384953 47.054211 12.523938
+v -44.019905 46.792126 12.245568
+v -45.348370 44.986172 -0.089960
+v -46.415264 45.600845 -0.008147
+v -45.342766 43.707199 -0.078424
+v -44.024498 46.478443 12.193261
+v -44.067627 45.747421 11.771609
+v -36.731514 30.569277 -0.274167
+v -36.336430 31.230661 9.381396
+v -36.727383 31.818638 -0.210001
+v -36.259384 32.315449 11.236026
+v -35.469734 32.789436 12.127251
+v -35.414146 32.821983 12.148687
+v -35.650764 32.441551 -0.174445
+v -34.576424 31.820744 -0.202759
+v -35.047230 32.597672 11.846042
+v -34.605125 32.325222 11.429599
+v -34.599396 31.247639 9.596086
+v -34.574764 30.572613 -0.266842
+v -25.971365 28.717878 0.033915
+v -25.090923 28.197561 0.026522
+v -24.362663 27.892042 4.695767
+v -24.714268 28.205456 8.653731
+v -26.255327 28.884874 0.005600
+v -24.694487 29.312857 8.732476
+v -24.712715 28.373880 8.657550
+v -24.583374 28.471729 9.378916
+v -23.687704 29.825291 8.922626
+v -22.585320 29.137897 10.000705
+v -23.888454 30.144775 0.238284
+v -24.045391 30.238832 0.250889
+v -22.481264 27.998056 10.851433
+v -23.340260 28.996647 4.393780
+v -23.696693 28.704540 1.761689
+v -23.915621 28.831795 0.124414
+v -23.909496 29.094831 0.152295
+v -23.898743 29.636961 0.195869
+v -24.375002 28.580837 0.106334
+v -24.094652 28.481590 1.782637
+v -23.944626 27.271185 -0.041140
+v -24.073084 26.877270 10.745407
+v -24.843157 27.365696 9.984984
+v -24.775013 28.363024 9.350500
+v -23.942524 28.508101 0.090468
+v -24.841642 27.415640 9.974369
+v -24.035217 26.900545 10.771548
+v -17.732927 38.060841 0.056982
+v -17.202894 37.723751 -0.057045
+v -16.583721 37.378937 0.110598
+v -17.023874 38.721954 6.737414
+v -18.062653 39.469727 7.496293
+v -18.062819 40.640072 7.597776
+v -17.722208 39.385647 -0.070385
+v -16.551563 39.998440 -0.373554
+v -16.748156 39.883762 -0.384893
+v -17.038218 41.104771 6.953388
+v -16.007057 40.453201 6.588626
+v -15.418256 39.361469 -0.065618
+v -16.925901 41.029125 6.871786
+v -15.956034 39.172642 6.062921
+v -15.434546 38.054470 0.175908
+v -15.965680 39.970291 6.138455
+v -8.485228 28.008303 -0.039725
+v -7.415339 27.390509 -0.127467
+v -8.086838 27.711271 12.685486
+v -8.353829 27.865469 12.702641
+v -8.880325 28.169094 12.820593
+v -8.488746 29.235273 0.074808
+v -8.488620 29.193159 0.070722
+v -8.884336 29.074280 12.951165
+v -8.628586 29.221992 12.936266
+v -8.103946 29.525562 13.011922
+v -7.316219 29.075169 12.962128
+v -7.304125 28.167793 12.799009
+v -7.220778 27.502705 -0.122511
+v -35.008728 -6.773695 11.411694
+v -35.905476 -6.286048 11.361401
+v -35.905888 -5.259748 11.335525
+v -37.629684 -6.927482 0.008686
+v -35.015453 -4.729001 11.359892
+v -36.488400 -6.248409 0.018828
+v -34.128384 -5.215702 11.409751
+v -35.355854 -6.884359 0.012026
+v -35.353195 -8.203847 -0.004961
+v -34.122108 -6.234108 11.435676
+v -48.541813 16.512625 10.708834
+v -48.568657 17.663877 0.081582
+v -47.514240 17.042297 0.189758
+v -47.710854 16.064083 10.407543
+v -48.333824 16.399380 10.642528
+v -48.544273 17.496836 10.537604
+v -46.849213 17.601377 9.781826
+v -46.461063 17.648981 0.249756
+v -46.858631 16.598917 9.936785
+v -35.628101 -43.024380 9.169362
+v -36.184898 -42.932724 0.285199
+v -36.077042 -42.996307 0.290206
+v -34.679878 -43.582443 9.248114
+v -35.781921 -41.853535 8.274297
+v -34.947433 -41.227020 7.430835
+v -33.933826 -41.843830 7.757102
+v -34.956638 -41.053547 0.094730
+v -34.458805 -41.521828 7.477322
+v -34.951733 -42.364090 0.219278
+v -33.812500 -43.026287 8.739186
+v -34.510624 -43.464127 9.084188
+v -26.556158 -18.485102 -0.504884
+v -25.523483 -19.095768 -0.502543
+v -25.493052 -19.113791 -0.501875
+v -27.237724 -18.764833 15.167708
+v -27.369158 -18.687647 15.179704
+v -27.945242 -18.338993 14.994986
+v -26.538088 -17.255882 -0.552215
+v -26.539520 -17.604034 -0.579896
+v -27.943808 -17.500851 15.084044
+v -25.457932 -16.649244 -0.566266
+v -27.860600 -17.452791 15.121118
+v -27.553122 -17.282286 15.054677
+v -27.218185 -17.090261 15.162711
+v -24.392025 -17.264444 -0.664047
+v -24.916403 -16.961185 -0.622441
+v -26.486721 -17.515400 15.127301
+v -24.374218 -17.274506 -0.667994
+v -24.372982 -17.468878 -0.693874
+v -24.372921 -17.464855 -0.693983
+v -26.471104 -18.020519 14.967160
+v -26.480043 -18.356876 15.005319
+v -24.398066 -18.512323 -0.595334
+v -24.375000 -17.554836 -0.686118
+v -24.373024 -17.470728 -0.693710
+v 8.807338 -42.019909 0.659818
+v 9.135812 -42.211491 0.695578
+v 9.878892 -42.665379 0.650544
+v 9.220268 -40.655758 10.566581
+v 8.356087 -40.091755 10.841042
+v 8.368156 -39.474838 10.624569
+v 8.368193 -39.713692 10.603899
+v 8.613365 -40.038094 5.132642
+v 8.821688 -40.805321 0.442664
+v 8.344742 -39.464043 11.145390
+v 8.951073 -40.733574 0.430422
+v 9.015238 -39.819603 5.071543
+v 9.595366 -40.136803 1.636503
+v 9.813101 -40.011299 1.641121
+v 9.892259 -40.191257 0.449314
+v 9.073839 -40.663956 0.426946
+v 9.007112 -40.704559 0.414222
+v 10.172533 -39.394394 9.073626
+v 10.023862 -39.082447 11.078823
+v 10.025739 -39.083622 11.078268
+v 10.952393 -40.801792 0.605837
+v 10.045481 -39.982220 10.892165
+v 10.051666 -40.115578 10.827502
+v 10.959612 -42.062389 0.577814
+v 10.950262 -41.200077 0.647194
+v 10.464142 -42.369736 0.482854
+v 6.268466 -3.311996 10.808226
+v 6.030889 -3.175313 10.923291
+v 6.349209 -3.304858 0.562049
+v 7.484565 -3.961220 0.614614
+v 6.942973 -3.702509 10.948825
+v 6.353408 -1.990772 0.425386
+v 6.348256 -2.953010 0.593084
+v 6.041413 -2.117744 10.580743
+v 6.987281 -1.573665 10.103372
+v 7.500712 -1.328405 0.306503
+v 6.443784 -1.887020 10.239216
+v 8.638680 -1.989188 0.418225
+v 7.648176 -1.961561 10.243222
+v 7.907372 -2.112792 10.281780
+v 7.874777 -3.179039 10.721386
+v 8.621671 -3.305276 0.647622
+v 7.903374 -2.208314 10.335692
+v 8.078602 -3.614612 0.703164
+v 36.585995 -27.140490 11.896968
+v 36.084442 -26.321299 0.142227
+v 36.534508 -26.578993 0.076143
+v 37.158703 -26.939262 0.048334
+v 37.414513 -27.636711 12.260674
+v 36.346107 -25.659521 6.320168
+v 36.084511 -26.076517 0.154073
+v 36.578152 -26.737944 11.729490
+v 36.572784 -26.163034 11.627231
+v 36.816345 -26.003729 11.472515
+v 37.285831 -25.729576 11.449643
+v 38.229919 -26.051512 10.416049
+v 37.991714 -25.671614 7.884783
+v 37.480991 -25.716698 11.481812
+v 38.228798 -26.184429 11.818273
+v 38.227676 -27.085321 11.070251
+v 38.229286 -26.180277 11.053148
+v 38.226807 -27.165543 12.222406
+v 37.224987 -26.900799 0.044980
+v 38.048050 -27.119410 10.065519
+v 9.735956 -37.588966 11.431141
+v 9.461515 -37.901039 9.628881
+v 10.134066 -38.285912 9.592430
+v 10.216658 -38.619598 8.478503
+v 10.567956 -38.117413 11.183364
+v 8.048145 -38.225220 0.318260
+v 8.048404 -38.285439 0.321321
+v 8.408539 -38.000465 2.689150
+v 8.527815 -38.144226 3.478757
+v 9.249865 -37.702042 8.229032
+v 9.770379 -36.558990 11.634832
+v 10.621256 -36.055473 11.593773
+v 9.154783 -37.568211 0.302555
+v 8.552131 -37.927414 0.286276
+v 11.447286 -36.568657 11.350107
+v 10.397188 -37.996201 1.599369
+v 9.594904 -37.537216 1.645231
+v 9.359801 -37.680050 0.317227
+v 11.428436 -37.600498 11.143411
+v 10.594011 -38.935585 3.388955
+v 10.593004 -38.208344 3.402534
+v 40.967636 35.071964 7.524249
+v 40.683014 34.595493 0.568214
+v 41.802094 33.942150 0.490169
+v 41.931679 34.489056 7.239038
+v 40.683620 35.889286 0.544821
+v 40.683552 35.878510 0.543488
+v 40.996544 36.221474 8.198111
+v 41.805676 36.540363 0.676660
+v 41.957478 36.784435 8.582786
+v 42.921471 35.895638 0.648243
+v 42.902565 36.228001 8.311961
+v 42.905567 35.082596 7.642341
+v 42.916946 34.770798 3.086602
+v 42.922401 35.280560 0.572353
+v 42.140739 34.136559 0.459008
+v 42.618980 34.600395 3.123330
+v 30.654263 25.716129 12.604204
+v 30.622112 27.094900 -0.123286
+v 31.748800 26.450211 -0.190091
+v 31.489067 25.157948 13.308024
+v 31.468704 25.170776 13.298210
+v 30.619461 28.400858 -0.084826
+v 30.621452 27.396425 -0.135306
+v 30.650745 26.779255 12.044718
+v 31.748915 29.067728 -0.127276
+v 31.510923 27.258512 12.224114
+v 32.344715 26.673742 12.860054
+v 32.883217 28.425695 -0.235659
+v 32.093807 26.839087 12.736083
+v 32.881821 27.117729 -0.301125
+v 32.324165 25.644861 13.286358
+v 32.751236 27.041460 -0.296176
+v 46.970654 -7.641132 -0.036902
+v 48.066246 -8.285910 0.054689
+v 50.872986 -9.463393 18.050066
+v 50.038380 -8.993626 17.178560
+v 46.978485 -6.396965 -0.029014
+v 46.979252 -6.737550 -0.014874
+v 49.943062 -8.365686 16.626730
+v 49.918713 -8.116764 16.483217
+v 50.666763 -7.741900 16.653666
+v 48.076996 -5.804032 0.010709
+v 51.481457 -8.250130 17.460161
+v 49.164337 -6.459781 0.101455
+v 50.976566 -7.933961 16.907761
+v 49.160007 -7.696679 0.152391
+v 51.570766 -9.097966 18.181570
+v 48.855404 -7.863242 0.141465
+v 14.741309 22.584236 7.189221
+v 15.384423 22.516590 0.013134
+v 16.537319 21.833857 0.038125
+v 15.769199 21.987490 6.936907
+v 15.400162 23.851746 0.005038
+v 14.651806 23.721331 8.329248
+v 16.569456 24.509560 0.021910
+v 15.543335 24.252476 9.190948
+v 17.726271 23.828838 0.055272
+v 16.799677 24.374243 0.026894
+v 16.534775 23.692970 8.964148
+v 16.670586 22.566084 7.850973
+v 17.709991 22.488480 0.062507
+v 16.936031 22.056217 0.043890
+v 11.523290 -8.718661 0.476047
+v 12.590288 -9.384946 0.322048
+v 11.830034 -7.065217 11.768243
+v 11.007058 -6.512845 12.123385
+v 11.032123 -5.659082 11.638201
+v 11.521748 -7.462301 0.615302
+v 11.007362 -6.495430 12.118074
+v 11.028513 -5.825819 11.704422
+v 12.571652 -6.863709 0.602672
+v 11.316652 -5.508636 11.572479
+v 11.388714 -5.473487 11.540200
+v 11.824278 -5.164681 11.854902
+v 12.589034 -5.568049 12.299724
+v 13.635253 -7.507909 0.476063
+v 13.113935 -7.193581 0.525375
+v 12.164850 -5.320601 12.265401
+v 13.654685 -8.776865 0.309380
+v 13.642748 -7.898664 0.407537
+v 12.669926 -6.665345 11.426218
+v 12.532359 -6.787947 11.245085
+v 37.836296 10.325006 0.232487
+v 37.942715 10.263472 0.240057
+v 37.274445 10.582692 12.991449
+v 36.995033 10.744800 12.868496
+v 36.832596 10.838204 12.956601
+v 37.953709 12.793331 0.030302
+v 37.470753 12.514288 0.038165
+v 37.839722 12.728538 0.234983
+v 36.744892 12.163541 13.124027
+v 37.279667 12.471351 12.891814
+v 39.042591 12.158311 0.186893
+v 37.381401 12.415857 12.836917
+v 38.081730 11.995907 13.146545
+v 38.074524 11.056859 13.243709
+v 39.034145 10.894670 0.300797
+v 39.034618 11.375000 0.294399
+v 39.567669 19.634295 12.799148
+v 38.988094 20.580925 -0.784243
+v 40.152679 19.912607 -0.921772
+v 40.437130 19.137077 12.657791
+v 39.175919 21.512096 3.669505
+v 38.995697 20.927002 -0.591073
+v 38.996597 21.910425 -0.528895
+v 38.991840 21.920990 -0.640248
+v 39.568199 20.640732 12.853707
+v 40.290115 21.920700 5.639315
+v 39.645882 21.549103 5.632242
+v 40.439419 21.154762 12.767010
+v 39.001671 21.926666 -0.640191
+v 41.315842 20.918291 9.889006
+v 40.739571 21.837353 3.765287
+v 40.698502 21.816673 4.233567
+v 41.313656 20.658936 12.625101
+v 41.095840 22.016754 -0.297177
+v 41.323929 21.878296 -0.238709
+v 41.324348 21.927969 -0.762745
+v 41.134785 22.036364 -0.741231
+v 41.312927 19.742956 11.201997
+v 41.314560 20.656418 11.184736
+v 41.311897 19.647676 12.570441
+v 41.324284 21.890175 -0.766877
+v 40.433510 20.074474 -0.920175
+v 41.307755 20.577999 -0.909606
+v 40.302635 19.977547 -0.610300
+v 41.238815 19.728893 10.787420
+v -7.902826 -43.306145 4.534101
+v -7.818056 -43.289848 4.780551
+v -6.853104 -43.842216 4.727623
+v -6.592010 -43.468983 6.737934
+v -7.412601 -42.748703 7.753422
+v -7.309120 -41.550083 8.408591
+v -8.624978 -42.823147 -0.237738
+v -8.629395 -43.083149 -0.260984
+v -6.416254 -41.037292 8.091183
+v -7.495728 -42.150818 -0.220315
+v -7.874509 -42.375252 -0.207080
+v -5.587096 -41.706646 7.100594
+v -6.382581 -42.788055 -0.285926
+v -5.636468 -42.559383 6.617407
+v -5.973892 -43.346703 3.473890
+v -5.974054 -43.444412 3.469318
+v -6.388383 -44.107342 -0.381097
+v -6.382191 -43.121410 -0.292812
+v -6.584763 -44.226379 -0.381956
+v -6.433237 -44.134708 -0.382983
+v -6.112555 -43.197041 6.565414
+v -6.777779 -43.832733 4.389862
+v -14.634329 -45.228046 13.776871
+v -15.214746 -46.199688 -0.408127
+v -14.850952 -46.403812 -0.343764
+v -14.145154 -46.814476 -0.377757
+v -13.878108 -45.687416 13.530198
+v -14.615330 -44.329739 14.215539
+v -15.212144 -44.963291 -0.381009
+v -15.212645 -45.353092 -0.381733
+v -15.215040 -46.090042 -0.418594
+v -14.144137 -44.344944 -0.324772
+v -14.934719 -44.803135 -0.390058
+v -13.861244 -43.890110 14.408485
+v -13.079198 -44.961170 -0.373065
+v -13.935128 -44.465199 -0.317798
+v -13.115083 -44.330402 14.171434
+v -13.077694 -46.194855 -0.378533
+v -13.078797 -45.242302 -0.398267
+v -13.112936 -45.229122 13.731948
+v -14.007294 -46.735420 -0.391654
+v -13.471146 -46.423084 -0.376069
+v 32.824265 3.243701 12.113815
+v 32.793175 4.576918 -0.193143
+v 33.880318 3.939368 -0.112669
+v 33.664886 2.867547 11.082842
+v 32.823975 4.110874 12.779883
+v 32.790562 5.842928 -0.175839
+v 32.792580 4.875001 -0.180205
+v 33.880653 6.465947 -0.064331
+v 33.639343 4.631443 12.459706
+v 34.966431 5.818461 0.040751
+v 34.497593 4.293161 11.442251
+v 34.523781 3.396241 10.730478
+v 34.963268 4.557018 0.022119
+v 34.963688 4.875001 0.036026
+v 5.144089 -9.420095 -0.061663
+v 6.291608 -10.097512 -0.043640
+v 8.390466 -10.978027 13.413186
+v 7.530373 -10.472157 13.329707
+v 7.582215 -9.524232 13.592583
+v 5.170690 -8.113680 0.049526
+v 5.150895 -9.106169 -0.032627
+v 7.630108 -9.967099 13.873534
+v 8.400023 -9.035223 13.386058
+v 6.346738 -7.498790 0.190766
+v 6.293567 -7.526342 0.183148
+v 9.302103 -9.587844 13.836956
+v 7.485132 -8.183945 0.225137
+v 6.920791 -7.844473 0.216122
+v 9.353844 -10.271156 14.267805
+v 9.359873 -10.485677 14.327076
+v 9.373711 -10.566016 14.435427
+v 9.370401 -10.588284 14.412302
+v 7.455809 -9.475402 0.093782
+v 7.470901 -8.772267 0.158806
+v 9.236097 -10.643007 14.283987
+v 8.873934 -7.285206 0.439376
+v 9.926373 -7.908236 0.457301
+v 8.581076 -7.639162 12.539950
+v 8.350162 -7.497604 12.424470
+v 7.810344 -7.173335 12.307290
+v 8.876451 -6.069086 0.563761
+v 8.874901 -6.541733 0.521794
+v 7.853802 -6.247300 11.939010
+v 8.691693 -5.783382 11.737188
+v 9.924809 -5.474439 0.718527
+v 9.987001 -5.511128 0.721341
+v 9.044711 -5.997405 11.814598
+v 10.007289 -7.862216 0.469080
+v 10.007294 -7.862213 0.469081
+v 9.063320 -7.379556 12.436036
+v 9.063291 -7.379570 12.436042
+v 23.414700 -45.093758 0.399279
+v 24.087194 -45.500000 0.386384
+v 24.305820 -45.638359 0.343528
+v 24.427109 -45.708431 0.360839
+v 24.536457 -45.774708 0.357393
+v 24.062445 -44.328381 7.493979
+v 23.096991 -43.736206 7.567526
+v 23.421852 -43.795795 0.348929
+v 23.420713 -44.068573 0.351390
+v 23.131807 -42.727589 6.878752
+v 23.620279 -43.164680 3.087016
+v 24.351858 -42.736519 3.136694
+v 24.536753 -43.156845 0.352993
+v 23.312473 -42.650444 6.739779
+v 25.154760 -42.891640 6.007362
+v 25.653944 -43.817211 0.365909
+v 25.541405 -43.750393 0.367250
+v 24.456150 -42.471249 6.065983
+v 25.095879 -43.921009 6.721624
+v 25.659288 -45.129070 0.361365
+v 24.817690 -45.610672 0.368037
+v 46.001457 -44.247780 7.155744
+v 45.866940 -44.170219 7.188885
+v 46.081093 -44.257374 0.218218
+v 46.183670 -44.316570 0.202721
+v 46.200138 -44.363483 7.325487
+v 46.082558 -42.927570 0.170500
+v 46.081184 -43.875004 0.215147
+v 45.890388 -43.005775 6.425518
+v 47.052498 -42.348656 3.677610
+v 46.566483 -42.646301 0.480121
+v 47.231323 -42.263229 0.265362
+v 47.247452 -42.255524 -0.042377
+v 46.499172 -42.657131 5.825564
+v 46.945248 -42.399887 5.724042
+v 47.427006 -42.700779 6.154615
+v 47.260941 -42.263187 -0.044118
+v 48.066414 -43.659447 4.570695
+v 47.914024 -43.043739 6.626092
+v 47.849712 -43.994377 7.493510
+v -8.951090 -51.409969 14.253173
+v -9.571753 -50.396229 -0.293201
+v -8.445842 -51.049519 -0.266862
+v -8.137614 -51.889866 14.447744
+v -9.574290 -49.090836 -0.298404
+v -9.573093 -49.541523 -0.289063
+v -8.971758 -50.429230 13.808307
+v -8.446650 -48.438087 -0.305437
+v -8.530883 -50.158112 13.672480
+v -8.167634 -49.869453 13.014600
+v -7.319750 -49.096554 -0.285318
+v -7.330409 -50.361542 13.059846
+v -7.322084 -50.401939 -0.258296
+v -7.332371 -51.109165 14.069977
+v -7.332989 -51.409058 14.206209
+v -8.004901 -50.796074 -0.254061
+v 41.350357 -2.351577 6.652679
+v 41.558060 -3.190788 3.851178
+v 42.019871 -2.530630 7.406921
+v 41.273300 -2.307481 6.656855
+v 40.358040 -1.663019 2.632302
+v 40.455994 -1.781075 3.280702
+v 40.539856 -1.729713 3.832451
+v 40.890316 -2.059219 6.150331
+v 40.764721 -1.229915 5.303667
+v 40.133003 -1.841089 1.152723
+v 41.052094 -1.362654 -0.044601
+v 40.667091 -1.592283 -0.057712
+v 40.601234 -1.602091 0.459255
+v 40.989315 -1.094071 5.344611
+v 41.806915 -0.584021 5.767213
+v 42.142593 -1.982391 -0.086930
+v 42.902370 -0.949526 6.968008
+v 42.976925 -1.927473 7.626335
+v 42.138271 -3.269327 -0.167431
+v 41.856735 -3.440897 -0.177247
+v 42.791981 -2.049300 7.534644
+v 9.209692 0.567681 0.091561
+v 9.426846 0.442534 0.094130
+v 10.421888 0.381411 5.667188
+v 10.472836 0.596431 8.320556
+v 9.541132 1.122524 8.191715
+v 9.207124 1.840278 -0.009077
+v 9.527057 1.780869 7.827485
+v 9.536708 2.190152 8.051694
+v 10.455322 2.708331 7.408575
+v 10.311213 2.476634 -0.096746
+v 10.327898 2.633584 7.352736
+v 10.431392 2.693672 7.366651
+v 11.417800 1.841203 -0.030262
+v 10.517669 2.357662 -0.094304
+v 10.530239 2.665586 7.419630
+v 11.396680 2.212457 8.530266
+v 11.397290 1.166687 8.801300
+v 11.399439 1.107798 7.940858
+v 11.404886 1.616932 5.429713
+v 11.417916 1.733962 -0.024703
+v 11.396880 2.125322 8.490993
+v 11.397245 1.376347 8.714501
+v 10.842337 0.789194 8.009533
+v 10.647912 0.692181 8.236365
+v 16.959761 19.656740 0.057463
+v 17.131924 19.558739 0.042474
+v 17.074080 19.270958 3.048438
+v 16.959623 19.337952 3.041183
+v 16.547924 19.404987 4.642638
+v 16.387590 19.502840 4.594979
+v 16.084133 19.671289 4.661511
+v 16.072462 20.171915 0.040206
+v 16.218452 20.087118 0.043360
+v 16.069853 21.407284 0.032406
+v 16.084402 20.653156 5.673261
+v 17.133030 22.027321 0.049425
+v 16.944197 21.917397 0.044908
+v 17.009712 21.089838 6.449549
+v 18.195097 21.405048 0.081935
+v 17.457325 20.844677 6.354821
+v 17.931580 20.547726 6.490360
+v 18.195820 20.182777 -0.029164
+v 18.193781 21.010595 0.084159
+v 17.954687 19.643154 5.853553
+v 17.958172 19.555107 5.761211
+v 17.268423 19.638550 0.036285
+v 17.791353 19.946743 -0.016230
+v 17.427336 19.297533 5.160777
+v 19.771460 -7.580162 13.725311
+v 19.067690 -7.269886 9.775902
+v 18.303251 -7.066846 0.469135
+v 18.523846 -7.198665 0.412889
+v 20.706705 -8.114422 14.408266
+v 20.205395 -7.834507 13.800333
+v 19.714375 -6.589711 13.377081
+v 19.277552 -6.334206 10.923908
+v 19.275957 -7.230364 10.940855
+v 18.382967 -4.816706 0.967305
+v 19.277998 -6.244133 10.478236
+v 19.830282 -6.520575 13.348655
+v 20.724102 -6.250538 14.434820
+v 18.625383 -4.680114 0.947562
+v 21.689537 -6.857722 15.605389
+v 19.714705 -5.331850 0.810964
+v 18.949148 -4.875000 0.958433
+v 19.656708 -6.580693 0.463402
+v 21.679413 -7.756422 15.590477
+v 19.181253 -6.834379 0.404777
+v 7.434209 -29.806290 -0.452355
+v 7.582436 -29.893946 -0.451941
+v 7.602612 -30.273214 7.980874
+v 7.068823 -30.166451 12.775044
+v 6.204025 -29.676895 13.274449
+v 7.454511 -28.526039 -0.518179
+v 6.212295 -28.742517 13.299410
+v 7.084614 -28.268707 12.826302
+v 8.232653 -27.981077 2.567861
+v 7.847673 -28.285711 0.036680
+v 8.252388 -28.079132 -0.562785
+v 7.917688 -28.749647 12.751185
+v 8.857824 -28.642443 5.721736
+v 8.710810 -28.557405 5.733222
+v 7.445749 -28.460760 12.618146
+v 8.507307 -29.334688 8.286768
+v 9.012325 -29.036009 4.531368
+v 7.895342 -29.701284 12.837082
+v 8.258038 -29.728365 10.119335
+v 7.606962 -30.097891 10.033653
+v 7.177743 -30.110823 12.715858
+v 10.901415 -18.593739 -0.691933
+v 11.131221 -18.738338 -0.731846
+v 12.003068 -19.235065 -0.564615
+v 11.259139 -16.965149 10.635785
+v 10.386126 -16.391951 10.934130
+v 10.903561 -17.287827 -0.630407
+v 10.905014 -17.933872 -0.716698
+v 10.901608 -18.241802 -0.666787
+v 10.393842 -15.410612 10.844818
+v 11.211123 -14.845659 11.358693
+v 12.002689 -16.645155 -0.558924
+v 11.375000 -17.004623 -0.559809
+v 10.730316 -15.246144 10.695968
+v 13.104696 -17.293531 -0.519179
+v 12.371232 -16.869923 -0.616684
+v 12.054991 -15.347211 11.343869
+v 13.105470 -18.579988 -0.472718
+v 13.107159 -18.136904 -0.510970
+v 12.156510 -16.534872 10.239536
+v 12.156468 -16.545139 10.240456
+v 12.054926 -19.204008 -0.559289
+v 9.658630 -40.167027 0.429323
+v 9.383008 -40.007652 0.409245
+v 8.297248 -39.436665 11.158718
+v 8.347548 -38.237259 5.600968
+v 8.167131 -38.681190 11.473519
+v 8.164808 -38.311626 11.549080
+v 9.078317 -37.783985 11.502366
+v 9.664059 -37.504181 0.325660
+v 10.012012 -38.306541 11.238640
+v 10.814910 -38.170841 0.409541
+v 10.811070 -39.502316 0.461318
+v 41.601791 -50.476868 13.149088
+v 41.055935 -49.585300 0.355848
+v 41.489925 -49.837708 0.379132
+v 42.120766 -50.202988 0.377145
+v 42.397423 -50.957256 13.584416
+v 41.562565 -49.481342 12.268505
+v 41.054108 -48.351925 0.364388
+v 41.584106 -50.134605 12.747607
+v 42.199207 -49.055523 11.785340
+v 42.358799 -48.957909 11.740588
+v 42.121883 -47.742512 0.430303
+v 43.185860 -48.362976 0.436349
+v 42.288769 -47.840591 0.439250
+v 42.727051 -49.171730 11.732961
+v 43.176769 -49.441570 11.815101
+v 43.183697 -49.591831 0.405033
+v 43.176003 -49.785816 12.070755
+v 43.174305 -50.459526 12.867105
+v 21.124771 25.179611 11.729699
+v 20.907034 24.932018 10.299815
+v 20.907415 24.360594 8.087247
+v 20.192808 24.119862 5.609481
+v 19.747892 23.613934 2.687677
+v 20.776583 23.678162 5.160941
+v 21.096361 23.487038 5.112141
+v 21.970156 24.736130 11.839991
+v 21.329485 25.068775 11.743064
+v 21.086754 26.101297 11.458247
+v 20.577185 25.608299 8.109930
+v 20.907526 25.207523 10.296825
+v 19.904707 24.085054 3.710865
+v 19.431490 24.499870 0.581751
+v 19.357611 24.428392 0.096298
+v 19.356312 23.921469 0.099167
+v 21.892408 26.567949 11.241352
+v 20.912306 25.556931 3.694990
+v 20.911337 25.660086 5.522467
+v 19.473333 24.497347 0.099057
+v 21.532412 24.477692 0.155287
+v 20.830505 24.866541 0.133930
+v 20.913153 24.890646 0.474505
+v 22.732357 26.108940 11.297454
+v 22.765446 25.189411 11.574329
+v 21.521200 23.198616 0.011397
+v 21.533247 24.270552 0.156497
+v 22.763512 25.227207 11.557642
+v 21.417597 23.362251 2.127297
+v 21.131123 22.963575 0.022859
+v 45.818897 -39.526512 4.232010
+v 45.649487 -39.810112 0.091718
+v 45.717724 -39.850319 0.082979
+v 45.893013 -39.570892 4.214809
+v 45.648552 -38.477772 0.029377
+v 45.818016 -39.490513 4.209401
+v 45.837608 -38.277077 4.653200
+v 46.802834 -37.811558 -0.015433
+v 46.254665 -38.129665 -0.081313
+v 46.005928 -38.182358 4.523760
+v 46.884480 -37.680286 4.236855
+v 47.958115 -38.480183 -0.070603
+v 46.970493 -37.734745 4.121129
+v 47.949749 -38.333122 3.320373
+v 47.958302 -38.596325 -0.087424
+v 47.950027 -38.392742 3.235116
+v 47.950687 -38.664700 3.099335
+v 34.819675 -47.734207 12.742710
+v 34.788044 -46.377445 0.218432
+v 35.876087 -47.003277 0.184377
+v 35.631603 -48.219646 12.889722
+v 34.816719 -46.734703 12.366429
+v 34.785347 -45.108337 0.201238
+v 34.786560 -45.658169 0.227571
+v 34.818523 -47.430641 12.517750
+v 35.877659 -44.464581 0.168970
+v 35.647167 -46.216820 12.131397
+v 36.479168 -46.697475 12.113632
+v 36.969799 -45.101280 0.182177
+v 36.694523 -44.942684 0.190797
+v 36.966507 -46.368359 0.166220
+v 36.467251 -47.687000 12.330918
+v 36.337955 -47.765152 12.366971
+v 44.089649 32.638081 7.899891
+v 43.461346 32.980824 6.835314
+v 43.263058 33.096298 6.773005
+v 42.139812 33.591511 0.469569
+v 43.244125 32.937088 0.392741
+v 44.454765 32.429199 8.154761
+v 43.379230 34.155712 7.392863
+v 43.296741 35.476997 0.613772
+v 44.492630 34.582142 8.299049
+v 45.610130 33.879536 9.644524
+v 44.400497 34.814171 0.582568
+v 44.905251 34.331242 8.423222
+v 44.367973 33.552799 0.425356
+v 45.655319 33.073601 10.034837
+v 45.621624 32.824097 9.800932
+v 43.701393 33.195984 0.350734
+v 23.584230 14.138809 -0.266943
+v 23.610222 14.123345 -0.264743
+v 23.582472 14.100407 0.638487
+v 23.640471 14.066996 0.618232
+v 23.659685 13.705940 8.646131
+v 23.526545 13.732569 9.841915
+v 22.716978 14.230029 9.410153
+v 23.606405 15.373823 -0.359314
+v 22.749470 15.224485 9.172672
+v 24.348352 15.897423 2.697475
+v 24.078848 15.684162 0.925508
+v 23.581800 15.395543 0.660364
+v 23.613129 15.377601 -0.359332
+v 23.601234 15.710238 9.373456
+v 24.374876 15.865455 2.873054
+v 23.813025 15.575505 9.487563
+v 23.662289 13.810784 9.873712
+v 43.365746 29.604624 0.242601
+v 44.424961 28.938766 0.062508
+v 43.996204 30.247017 6.517786
+v 43.084599 30.805952 6.585959
+v 43.109688 31.787081 6.110872
+v 43.362465 30.856146 0.420160
+v 43.111340 31.731949 6.069611
+v 43.922268 32.539536 7.630955
+v 44.407368 31.436739 0.327416
+v 43.395401 30.875000 0.420163
+v 45.458656 30.804562 0.243119
+v 45.343391 30.875000 0.262431
+v 44.750183 32.118187 8.249825
+v 44.827770 30.941080 7.417358
+v 45.129013 30.295158 4.016677
+v 45.465042 30.413637 0.187223
+v 44.597240 29.037697 0.062573
+v 44.759712 30.081608 4.010373
+v 44.278439 30.365648 6.337482
+v 26.695551 -20.028831 -0.143745
+v 26.732185 -20.049984 -0.147120
+v 26.751703 -20.105574 8.293436
+v 27.138693 -20.347391 11.757498
+v 27.047012 -20.303596 13.506866
+v 26.284060 -19.861366 13.250221
+v 26.694569 -18.799017 -0.111699
+v 26.288963 -18.964088 13.090638
+v 27.757938 -18.184250 -0.058426
+v 27.135048 -18.544622 -0.139050
+v 27.063591 -18.515928 13.190509
+v 28.815237 -18.800005 0.078190
+v 27.823950 -18.967548 13.448232
+v 27.812325 -19.857937 13.605018
+v 28.191240 -19.921980 8.494377
+v 28.815239 -18.957550 0.078160
+v 27.586195 -20.088655 11.781253
+v 13.358495 -44.589355 12.381381
+v 13.127701 -44.452293 12.306017
+v 12.541581 -44.099442 12.008399
+v 12.056099 -43.306492 0.630203
+v 13.114405 -43.923862 0.728598
+v 12.503674 -43.080753 11.159922
+v 12.058191 -42.091213 0.730131
+v 13.038922 -42.737564 10.877633
+v 13.322631 -42.548641 10.669339
+v 13.117319 -41.495369 0.867774
+v 12.740962 -41.711704 0.857380
+v 14.169486 -42.123333 1.024769
+v 14.158101 -42.116600 1.023718
+v 14.161551 -43.064957 10.958526
+v 14.167410 -43.330132 0.925538
+v 14.159193 -44.088745 11.820957
+v 40.717049 -45.299313 11.093454
+v 39.934669 -46.188965 5.955569
+v 40.086555 -46.276817 5.943705
+v 40.497025 -47.322426 2.781176
+v 41.552574 -45.813511 10.908483
+v 39.434608 -45.586220 2.645116
+v 40.638290 -44.384193 10.553520
+v 39.221802 -45.754616 1.245951
+v 40.179413 -45.236969 0.335728
+v 39.700764 -45.523216 0.306089
+v 39.664589 -45.528603 0.590062
+v 41.409840 -43.967735 9.809494
+v 42.268650 -44.489159 9.614800
+v 41.275707 -45.838993 0.394797
+v 42.332321 -45.419807 10.174034
+v 41.279076 -47.105000 0.386116
+v 40.820004 -47.386105 0.357644
+v 18.149242 -30.526030 0.344032
+v 18.344246 -30.637068 0.360951
+v 19.334688 -30.697908 5.908278
+v 19.354052 -30.616186 6.916730
+v 18.380558 -30.138803 5.997174
+v 18.372448 -29.691854 5.785353
+v 18.149744 -30.441988 0.353833
+v 20.304342 -29.282970 0.227866
+v 20.194159 -29.218822 0.242201
+v 19.643562 -28.639469 6.483628
+v 19.898439 -28.787251 6.464973
+v 20.288025 -28.996161 6.841208
+v 20.292307 -29.446283 5.294296
+v 20.304415 -29.337536 0.225816
+v 20.288103 -29.838659 7.229566
+v 19.529467 -30.509003 6.993380
+v 48.121372 15.794014 12.589523
+v 48.088676 17.196373 -0.355682
+v 49.159031 16.566990 -0.260737
+v 48.914814 15.351944 12.430799
+v 48.117546 16.813278 11.853072
+v 48.109795 17.215057 8.847769
+v 48.088509 17.275679 -0.355890
+v 48.408485 17.028418 11.521447
+v 49.604515 17.444277 8.358458
+v 49.142353 17.316959 10.869150
+v 49.782299 16.965908 10.737146
+v 50.218388 18.384661 0.132074
+v 50.214485 18.387022 0.131489
+v 50.222084 17.166809 -0.051722
+v 50.221573 17.336563 -0.026101
+v 50.216011 17.340923 0.110911
+v 50.219860 17.900309 0.058977
+v 49.747078 15.912212 11.522135
+v 49.730324 16.894686 -0.211680
+v 11.333445 -45.621639 13.268044
+v 9.171412 -44.668449 1.135148
+v 9.464465 -44.840714 1.167291
+v 10.295841 -45.333275 1.113817
+v 12.262156 -46.158184 13.720842
+v 11.177949 -44.539715 12.366149
+v 9.135949 -43.345310 0.898353
+v 11.996459 -44.002930 11.924499
+v 10.232566 -42.683048 0.588953
+v 9.268175 -43.270397 0.885558
+v 11.358996 -43.358814 0.527760
+v 11.296711 -43.321243 0.522071
+v 12.945791 -44.584869 12.415227
+v 11.381244 -44.683613 0.782299
+v 11.358325 -43.391659 0.524973
+v 13.056223 -45.657219 13.308859
+v 36.775829 10.928100 0.157192
+v 37.812756 10.311796 0.231172
+v 36.373425 10.599680 13.158407
+v 35.571754 11.054748 13.592673
+v 36.799252 12.137184 0.047597
+v 36.781357 11.375001 0.151561
+v 35.574303 11.923715 13.673120
+v 36.374992 12.361562 13.323277
+v 39.153923 23.050182 13.038985
+v 38.385944 23.532404 13.166179
+v 39.001404 22.164640 -0.614568
+v 38.387131 24.426929 13.214578
+v 39.147381 24.847523 13.137405
+v 40.060219 22.772345 -0.605979
+v 39.618782 22.518661 -0.611253
+v 41.133629 22.122427 -0.731756
+v 39.917641 24.377071 13.010550
+v 39.925442 23.474262 12.960521
+v 40.833389 22.106239 2.685918
+v -2.236051 -35.805351 0.216285
+v -1.151811 -36.432213 0.276494
+v -1.758149 -36.142574 11.846118
+v -2.602972 -35.656029 12.159437
+v -2.239429 -34.552826 0.326259
+v -2.612992 -35.296791 12.485581
+v -2.616212 -35.076935 12.590380
+v -2.625415 -34.709908 12.889946
+v -1.823374 -34.245384 13.090688
+v -1.163298 -33.930077 0.495682
+v -1.959713 -34.324463 13.035243
+v -0.079052 -34.553452 0.489598
+v -0.560734 -34.278545 0.529135
+v -1.004683 -34.709900 12.974086
+v -0.980701 -35.392273 12.650623
+v -0.963207 -35.653908 12.414666
+v -0.075849 -35.803886 0.446390
+v -0.081332 -34.957699 0.520346
+v 36.266697 -44.347462 11.633039
+v 35.775677 -43.545471 0.125082
+v 36.888115 -44.191093 0.154544
+v 37.128170 -44.845585 11.614741
+v 36.262009 -43.920547 11.540741
+v 36.252041 -43.319496 11.331463
+v 35.770508 -42.249886 0.057749
+v 35.772392 -42.684242 0.083836
+v 36.955025 -42.893932 11.171229
+v 36.082268 -42.828873 6.407326
+v 35.823608 -42.218864 0.055002
+v 38.000664 -42.250809 0.020772
+v 37.941376 -42.216167 0.019674
+v 37.926529 -42.822067 6.471326
+v 37.260597 -42.880844 11.161480
+v 37.288490 -42.897610 11.166847
+v 37.991772 -43.305965 11.152280
+v 37.998310 -43.547592 0.109008
+v 37.998795 -43.283974 0.082928
+v 37.989815 -44.332081 11.376071
+v 36.949467 -44.155582 0.152763
+v 37.841499 -43.637890 0.106821
+v 27.829121 -44.713459 6.959716
+v 26.822222 -45.858421 0.347370
+v 27.636139 -46.315289 0.337759
+v 27.969381 -46.503834 0.328042
+v 29.160467 -44.801174 9.498904
+v 28.112020 -44.808186 7.204539
+v 27.857508 -43.530880 7.120164
+v 26.827461 -44.527424 0.351875
+v 28.996099 -42.790798 8.233328
+v 27.971310 -43.847912 0.342891
+v 30.168726 -43.046700 10.173426
+v 29.108589 -44.487885 0.329456
+v 29.509544 -42.987186 8.674879
+v 30.257324 -43.980179 10.962911
+v 29.112606 -45.811729 0.324885
+v 30.247355 -43.657063 10.880939
+v 28.091761 -46.429192 0.332864
+v 30.104120 -44.076073 10.933923
+v 22.591106 -42.824162 0.332783
+v 23.567659 -43.386761 0.346512
+v 22.682510 -42.281231 6.799215
+v 22.418066 -42.723927 0.336301
+v 22.418934 -41.396595 0.318328
+v 22.417957 -42.564438 0.328900
+v 22.653614 -41.147469 6.057959
+v 23.567196 -40.732899 0.322463
+v 23.660723 -40.582527 5.193401
+v 24.714296 -41.393806 0.338589
+v 24.702568 -41.187683 5.091471
+v 24.702106 -42.342781 5.861170
+v 24.715870 -42.719925 0.350618
+v 41.103508 -16.845196 11.810930
+v 41.072495 -15.515312 -0.465264
+v 42.201485 -16.156952 -0.573000
+v 41.957813 -17.369291 12.090275
+v 41.100597 -15.802196 11.500709
+v 41.069912 -14.211711 -0.396052
+v 41.071400 -14.950531 -0.425681
+v 41.072258 -15.387808 -0.451983
+v 42.102821 -14.284674 4.615623
+v 42.059746 -14.292955 4.490407
+v 41.319859 -14.065871 -0.392594
+v 41.970673 -15.289329 11.474328
+v 43.143677 -14.810427 4.114188
+v 43.043350 -14.823061 4.564030
+v 42.829269 -15.833318 11.760202
+v 43.331219 -15.503011 -0.545902
+v 43.330860 -15.192183 -0.513534
+v 42.815495 -16.745560 12.029170
+v 42.814201 -16.868565 12.051570
+v 42.795795 -16.880510 12.066402
+v 35.407242 -0.470625 9.764803
+v 33.555267 0.345868 -0.628106
+v 34.672626 -0.309202 -0.440492
+v 36.144943 -0.926867 8.999250
+v 35.300564 0.581605 9.137119
+v 33.617062 1.566317 -0.317363
+v 35.887630 1.168988 7.816293
+v 35.969978 1.220689 7.783286
+v 34.742455 2.139217 -0.105296
+v 33.868031 1.682433 -0.212302
+v 36.491558 0.922907 7.094162
+v 36.739559 0.779887 6.829042
+v 35.824516 1.486901 -0.025971
+v 35.806038 0.262277 -0.081209
+v 36.824127 -0.329502 7.532701
+v 35.401707 0.046512 -0.130887
+v 47.155464 41.583584 0.001415
+v 48.281425 40.917404 0.011944
+v 46.911663 41.191376 12.314382
+v 46.060608 41.698746 12.218181
+v 46.060665 42.692307 12.342087
+v 47.186741 42.888546 -0.183633
+v 47.180523 42.537140 -0.158364
+v 46.064106 42.622036 12.294909
+v 48.349155 43.536842 -0.328852
+v 46.888302 43.170841 12.724809
+v 47.763393 42.672302 12.574703
+v 49.496010 42.869873 -0.380151
+v 47.485504 42.838017 12.543295
+v 49.456524 41.553711 -0.197090
+v 49.487591 42.470406 -0.351310
+v 47.763000 41.680153 12.492799
+v -4.744161 -47.122581 -0.289407
+v -4.500773 -47.266884 -0.277351
+v -3.902449 -47.082108 3.067374
+v -4.122066 -46.412003 6.373868
+v -4.809880 -46.140491 5.502327
+v -5.000363 -46.027843 5.491106
+v -4.959794 -45.419975 4.641001
+v -4.738638 -46.004570 -0.318673
+v -2.638450 -45.861904 -0.040245
+v -3.410528 -45.420189 -0.180484
+v -3.426136 -44.728111 5.935418
+v -3.195944 -44.828217 6.260177
+v -3.236556 -45.809513 6.764511
+v -3.006367 -46.303085 4.165924
+v -2.880281 -45.941750 2.715454
+v -2.636517 -46.024868 -0.055246
+v -3.696663 -46.689240 4.208223
+v -3.649633 -46.120583 6.457622
+v 40.085178 -3.838577 8.183453
+v 40.744461 -4.175674 -0.174443
+v 40.749859 -4.178792 -0.174622
+v 40.314552 -3.970853 8.131534
+v 40.265038 -1.879620 5.528764
+v 40.448971 -1.773127 5.566627
+v 41.343193 -2.352787 6.749292
+v 41.857204 -3.542281 -0.183592
+v 41.273384 -3.443604 7.690756
+v 41.061558 -3.999973 -0.183441
+v 41.748199 -3.580500 0.260191
+v 41.807800 -3.570792 -0.185215
+v 40.629311 -3.821191 7.562442
+v 45.541927 8.298302 0.065998
+v 46.673626 7.638451 0.163720
+v 46.852608 7.150473 8.708243
+v 46.833061 7.151649 8.933700
+v 46.861229 7.126957 9.119959
+v 46.871605 7.098663 9.615386
+v 46.508274 7.324878 9.264569
+v 46.214321 7.508149 8.975153
+v 45.928688 7.666591 9.130511
+v 45.533871 9.620890 -0.068051
+v 45.967983 8.656617 10.095407
+v 46.668011 10.280830 -0.103806
+v 46.891365 9.135036 10.558772
+v 47.802570 9.610402 -0.004936
+v 47.452755 8.835908 10.265393
+v 47.794106 8.605078 10.600863
+v 47.792725 7.815159 10.571914
+v 47.793571 7.724679 8.968961
+v 47.793625 7.687599 8.789732
+v 47.800152 8.290653 0.128539
+v 47.792809 7.863314 10.574504
+v 46.948334 7.137482 9.693976
+v 47.743446 7.672964 8.582938
+v 46.935310 6.161702 9.630196
+v 46.547356 5.720551 7.082479
+v 46.946869 5.491928 7.060829
+v 47.164513 4.612602 4.125415
+v 48.017494 5.831940 10.693006
+v 45.488678 5.850993 0.099961
+v 45.487473 5.771332 0.093818
+v 46.096596 6.144364 4.101168
+v 47.998432 7.949505 10.784197
+v 48.034088 7.972784 10.820839
+v 46.643787 6.538623 0.116080
+v 48.044853 7.968965 10.831535
+v 49.049900 7.609350 11.815814
+v 47.780483 5.883665 0.028594
+v 47.773758 4.532091 -0.076086
+v 49.047302 6.569760 11.759114
+v 47.476345 4.351473 -0.080513
+v 40.127064 1.023513 4.573366
+v 39.943081 0.715515 0.076885
+v 40.838787 0.196191 0.053622
+v 41.097168 0.046061 0.043387
+v 41.185791 0.420090 4.658933
+v 40.438194 0.816229 4.273349
+v 40.148647 1.564953 5.085841
+v 39.943596 0.874266 0.084769
+v 42.249786 2.054873 0.149882
+v 42.067577 2.160161 0.154597
+v 41.579777 2.673436 5.684184
+v 41.875008 2.491830 5.413971
+v 42.236340 2.291185 5.598828
+v 42.238277 1.082996 5.401900
+v 42.251564 0.718879 0.081717
+v 42.251369 0.860935 0.090605
+v 7.616220 -31.410372 12.862255
+v 7.582602 -29.968451 -0.448147
+v 8.674290 -30.600288 -0.445793
+v 8.422444 -31.853289 12.642205
+v 7.614221 -30.474154 12.848084
+v 7.616152 -31.306353 12.927998
+v 8.416796 -30.022776 12.984298
+v 9.510801 -29.321356 4.504019
+v 9.209987 -30.519102 13.208928
+v 9.580851 -29.312532 4.189917
+v 9.770096 -29.958466 -0.508485
+v 9.771428 -29.701208 -0.521637
+v 9.206788 -30.980337 13.252265
+v 9.216707 -31.420065 12.975058
+v 20.403894 21.580891 9.062744
+v 18.805620 22.285534 0.093530
+v 19.238323 22.030268 0.106785
+v 19.949728 21.606337 -0.030598
+v 21.418245 20.990263 9.384807
+v 18.811192 23.625916 0.086003
+v 20.561808 22.601944 9.917417
+v 21.690546 22.994263 11.034466
+v 22.644636 22.414169 11.319647
+v 21.111984 22.254457 -0.071881
+v 22.528717 21.430962 10.523340
+v 24.048903 -18.201099 0.107850
+v 24.173248 -18.274117 0.096363
+v 24.192438 -18.634867 8.117432
+v 23.589848 -18.514339 13.529540
+v 22.891666 -18.112982 13.792146
+v 22.795389 -18.061531 13.917781
+v 24.033321 -18.191742 0.104548
+v 24.064640 -16.974228 -0.091981
+v 22.801010 -17.738438 13.895654
+v 22.796524 -17.195219 14.013723
+v 23.567024 -16.765699 13.911727
+v 24.845293 -16.445444 2.489576
+v 24.453878 -16.755167 -0.083910
+v 24.361576 -17.203518 13.616950
+v 25.445753 -17.079889 5.510516
+v 25.303312 -16.997499 5.521640
+v 25.119135 -17.677038 7.904713
+v 25.574457 -17.407755 4.518860
+v 24.377378 -18.085052 13.423195
+v 24.838964 -18.119516 9.964446
+v 24.196173 -18.484339 9.879853
+v 23.680073 28.448412 0.205129
+v 23.893513 28.320498 0.207290
+v 24.232100 29.460985 8.465256
+v 24.076056 29.937113 10.814607
+v 23.214500 30.437771 10.709496
+v 23.683529 29.738308 0.236141
+v 23.683550 29.692160 0.231805
+v 23.213579 31.101269 10.785365
+v 23.185535 31.572346 11.447427
+v 24.053606 32.013523 11.152648
+v 24.768978 30.387243 0.382209
+v 24.911144 31.505440 11.151848
+v 25.870354 29.726908 0.311496
+v 25.201057 30.132391 0.392110
+v 24.100292 31.974709 11.052703
+v 24.925135 30.478107 11.036745
+v 25.011831 30.292212 10.058029
+v 25.114096 30.328266 8.892666
+v 25.872152 29.530613 0.299479
+v 24.297152 29.878933 10.045827
+v 8.575022 -17.123682 10.016502
+v 8.758474 -17.238319 11.658638
+v 8.436632 -17.052923 11.770902
+v 9.470765 -15.052689 -0.430978
+v 9.303474 -15.149492 -0.455536
+v 9.403975 -15.091135 -0.401914
+v 8.369154 -15.625161 11.780644
+v 8.680993 -15.446263 11.532120
+v 8.847740 -15.350299 11.457084
+v 9.711719 -15.830589 11.154184
+v 10.571280 -15.685308 -0.439178
+v 9.705160 -16.807444 11.242639
+v 9.882963 -16.837496 8.844515
+v 10.572138 -15.772331 -0.450755
+v 9.417831 -16.965630 11.371307
+v 45.914978 -40.344223 4.698610
+v 45.718380 -40.023117 0.090981
+v 46.805141 -40.646255 -0.048989
+v 46.899395 -40.903225 4.450558
+v 46.833939 -40.629280 -0.054268
+v 47.186111 -40.722820 4.233379
+v 47.085785 -40.782379 4.257800
+v 34.733292 25.370264 13.926950
+v 34.641113 25.412018 13.889357
+v 32.486507 22.961975 -0.260032
+v 33.579327 22.320253 -0.382567
+v 35.454540 25.000868 14.055751
+v 34.587593 26.273428 13.517012
+v 32.492584 24.246559 -0.248987
+v 35.381474 26.744041 13.493176
+v 33.582321 24.888138 -0.359510
+v 35.984013 26.458361 13.744250
+v 36.205833 26.342384 13.784419
+v 34.676311 24.263107 -0.418003
+v 34.125000 24.571510 -0.420341
+v 34.679413 22.981535 -0.429641
+v 36.231285 25.464531 13.992105
+v 34.125000 22.644848 -0.437880
+v 37.729053 -20.046120 10.776979
+v 37.556000 -20.335825 6.547570
+v 38.358475 -20.395647 10.927867
+v 37.701004 -19.100367 10.062094
+v 37.643295 -19.471151 8.659885
+v 37.456360 -20.100836 4.100520
+v 37.742146 -19.056692 11.068322
+v 38.535072 -18.644701 8.728809
+v 38.417000 -18.686331 10.074331
+v 38.589275 -18.557554 11.551756
+v 39.444538 -19.536903 -0.036715
+v 39.306717 -19.456654 -0.018411
+v 39.415462 -19.025864 11.747063
+v 39.417309 -19.996664 11.467086
+v 39.429436 -20.328901 6.612718
+v 39.444721 -19.705235 -0.028043
+v 38.791702 -20.385193 11.104311
+v 23.665083 12.764341 10.137623
+v 23.638859 13.889195 -0.245925
+v 24.342056 13.476050 -0.186788
+v 24.799330 13.208126 -0.155197
+v 24.591661 12.174934 10.636826
+v 23.638439 14.072780 -0.259803
+v 25.196444 14.206325 9.208177
+v 24.996592 14.151270 10.293856
+v 25.523895 13.799419 10.582072
+v 25.779444 14.630816 4.367443
+v 25.681044 14.618423 4.808659
+v 25.521986 14.709474 4.817386
+v 25.961132 13.882807 -0.153166
+v 25.963432 14.255579 -0.181221
+v 25.509325 12.689495 10.855348
+v 24.911432 13.272702 -0.148809
+v 38.449642 -27.296461 12.319179
+v 37.389011 -26.997892 0.037685
+v 39.366146 -27.827341 12.714072
+v 38.376602 -26.266445 11.880472
+v 39.245285 -25.784832 11.848727
+v 38.229744 -25.024923 5.322409
+v 38.224243 -25.538630 7.856113
+v 39.905785 -26.188618 12.142056
+v 40.178913 -26.358492 12.390207
+v 38.521503 -25.077887 -0.026217
+v 38.242493 -24.910439 -0.013820
+v 38.510818 -26.369785 -0.018958
+v 40.179363 -26.732090 12.418670
+v 40.209122 -27.356945 12.682014
+v 7.561162 -39.788651 0.414196
+v 8.635327 -40.423595 0.410751
+v 7.479321 -40.192375 10.793284
+v 6.609012 -39.688496 11.038603
+v 7.580859 -38.547222 0.350254
+v 6.577834 -38.722019 11.507219
+v 7.401264 -38.252827 11.689789
+v 7.266092 -38.328545 11.697180
+v 8.311804 -39.709480 11.026431
+v 8.888767 -40.283867 0.395178
+v 36.582710 -16.122732 0.417233
+v 37.579918 -16.769730 0.124002
+v 37.644108 -16.809671 0.115610
+v 36.769432 -14.140827 13.284447
+v 35.962048 -13.470681 14.420821
+v 35.812309 -12.053005 17.864296
+v 36.581795 -14.886908 0.540908
+v 35.956470 -13.223889 14.565310
+v 35.803715 -12.788167 17.993639
+v 36.466698 -11.682579 17.842300
+v 37.628044 -14.322700 0.357441
+v 37.521439 -12.811366 13.328351
+v 38.696754 -14.990587 0.045732
+v 36.763504 -11.852840 17.892101
+v 36.903717 -12.351710 14.167835
+v 38.712803 -16.243937 -0.083163
+v 37.579765 -13.814479 12.707573
+v 38.392872 -16.414061 -0.026821
+v 24.327946 23.769732 -0.224103
+v 24.357529 23.752666 -0.229739
+v 24.377253 23.696487 8.299364
+v 24.767450 23.452667 11.792144
+v 24.746853 23.462507 12.185179
+v 23.951054 23.923115 12.043653
+v 24.322763 25.000587 -0.055367
+v 23.963835 24.854515 11.627601
+v 25.388258 25.616310 -0.053612
+v 25.171694 25.491011 -0.083195
+v 24.790665 25.330851 11.349141
+v 25.599955 24.857235 11.495381
+v 26.455284 25.001801 -0.040935
+v 25.568821 23.920454 11.915302
+v 25.819033 23.878164 8.540558
+v 26.456387 24.863241 -0.055822
+v 25.216101 23.712069 11.815957
+v 18.742720 24.921509 0.076715
+v 20.043427 23.706844 10.333322
+v 19.836798 23.829395 10.269333
+v 19.184111 24.200573 10.421569
+v 18.740173 26.181299 0.069428
+v 19.222902 25.109022 11.371261
+v 19.828976 26.807631 0.095514
+v 19.417147 25.201706 11.535268
+v 20.076975 25.535378 11.934911
+v 20.801086 25.128628 11.776096
+v 20.906338 25.066507 11.784500
+v 20.915644 26.171354 0.128775
+v 20.737892 25.154230 11.893839
+v 20.906250 25.022015 11.797789
+v 20.906034 24.916630 11.844766
+v 20.905008 24.138201 11.281321
+v 20.913408 24.914221 0.135916
+v 35.109749 -39.363102 11.491786
+v 34.261047 -40.328178 5.918332
+v 34.409653 -40.414146 5.906721
+v 34.851089 -41.538628 2.505637
+v 34.468052 -41.958542 0.050790
+v 34.539474 -41.997955 0.052584
+v 36.021580 -39.879292 11.464129
+v 33.349407 -40.010433 -0.099027
+v 33.352901 -40.132786 -0.073237
+v 33.803261 -39.776413 2.887855
+v 35.167255 -38.251705 11.845842
+v 36.112473 -37.671711 12.163991
+v 34.515900 -39.318649 -0.128961
+v 34.440430 -39.363281 -0.124830
+v 33.711842 -39.798691 -0.164634
+v 37.001270 -38.175289 12.136900
+v 35.685768 -39.963634 -0.078317
+v 35.573151 -39.900928 -0.080217
+v 35.698994 -41.301067 0.001884
+v 36.967594 -39.271313 11.791101
+v 35.000946 -41.719936 0.038662
+v 17.197332 16.649923 5.434513
+v 17.184320 16.485258 3.565514
+v 16.308149 16.999393 3.654930
+v 16.158825 16.749424 0.005594
+v 17.308773 16.076162 -0.095198
+v 17.417915 16.536797 5.589068
+v 17.229750 16.632000 5.443118
+v 16.159409 16.967619 0.013444
+v 16.242441 17.108475 2.042639
+v 16.243052 17.249361 2.053470
+v 18.454187 18.184868 2.370131
+v 18.274618 18.345398 3.728239
+v 17.904959 18.559628 3.752786
+v 17.796877 18.673355 4.977997
+v 18.446487 18.320230 5.491369
+v 18.462013 16.741953 -0.147794
+v 18.461828 16.883833 -0.142652
+v 18.455778 17.083174 2.263985
+v 18.446802 17.158810 5.942996
+v 20.028183 -48.460381 11.858881
+v 19.998688 -47.195301 0.180857
+v 21.146204 -47.837250 -0.024271
+v 20.914619 -48.989437 12.010685
+v 19.996674 -45.903652 0.484649
+v 20.026276 -47.438259 11.963490
+v 21.137182 -45.239960 0.513621
+v 20.700485 -45.500008 0.546319
+v 20.167320 -47.361202 12.004216
+v 20.932928 -46.792744 11.114370
+v 21.842432 -47.319565 11.103767
+v 22.283358 -45.885071 0.381031
+v 21.587194 -45.500004 0.504445
+v 21.796410 -48.488609 12.145203
+v 22.291750 -47.180332 0.076088
+v 21.709513 -48.547188 12.241028
+v 41.550407 19.591518 12.536019
+v 42.333061 19.125740 12.407788
+v 41.563744 20.510664 12.584157
+v 42.361137 20.963066 12.503826
+v 43.143646 20.495586 12.375521
+v 41.388336 21.851839 -0.774334
+v 41.358974 20.606211 -0.909128
+v 43.128918 19.577408 12.327620
+v 19.723057 -32.383224 7.996304
+v 20.431133 -32.457703 0.095331
+v 20.956669 -32.765446 0.026893
+v 21.526674 -33.099136 -0.049404
+v 20.538977 -32.901585 8.821514
+v 19.766697 -31.500050 7.620615
+v 20.082869 -31.781874 4.061528
+v 20.333666 -31.230188 1.335481
+v 20.441061 -31.211473 0.140891
+v 20.796835 -30.970705 1.311091
+v 21.128633 -30.698786 3.761301
+v 21.544592 -30.594572 0.044452
+v 21.629389 -31.344824 7.530107
+v 22.649736 -31.228472 -0.099071
+v 22.621046 -31.212027 -0.095245
+v 21.628271 -31.453993 7.529134
+v 21.435280 -31.775408 8.946536
+v 21.394106 -32.393681 9.201907
+v 22.641935 -32.486851 -0.148312
+v 48.190704 21.782642 -0.294138
+v 48.567047 21.572849 -0.193567
+v 49.113533 21.741619 2.861390
+v 48.806004 22.679968 7.491463
+v 47.809357 23.412127 8.309993
+v 47.815762 24.232931 8.236396
+v 47.822830 24.477697 8.099911
+v 48.198475 23.094254 -0.356953
+v 48.197815 23.009716 -0.349379
+v 49.316502 23.764950 -0.194414
+v 48.238045 24.664021 7.828217
+v 48.818951 24.896053 7.296598
+v 49.858086 24.184721 6.438865
+v 50.420464 23.141979 0.083234
+v 49.853786 23.051594 6.536458
+v 50.059875 22.609697 4.209939
+v 50.165352 22.911966 2.996564
+v 50.419147 22.825428 0.111826
+v 49.364464 22.220688 4.252556
+v 36.005527 35.194546 0.460132
+v 36.072723 35.155670 0.467956
+v 35.555546 35.402718 10.336354
+v 35.541931 35.410622 10.329377
+v 35.220264 35.596054 10.415047
+v 35.562534 37.536892 10.202974
+v 36.078251 37.783241 0.362522
+v 36.016518 37.747547 0.358213
+v 35.169205 37.310284 10.333368
+v 36.497749 37.004356 10.104228
+v 37.210243 37.124779 0.494468
+v 36.305813 37.120281 10.004345
+v 36.472008 35.936264 10.451482
+v 36.639763 35.907909 8.188875
+v 36.640480 36.837639 8.179106
+v 37.209915 37.014858 0.498870
+v 36.324463 35.301449 0.485516
+v 23.243420 0.581679 7.580333
+v 22.929642 1.094179 0.226381
+v 23.217388 0.925306 0.275693
+v 24.033768 0.451322 0.301385
+v 24.200478 -0.003198 8.260027
+v 23.192430 1.783867 6.431954
+v 23.091566 2.007915 4.070478
+v 22.926050 1.470576 0.157655
+v 23.193617 1.554097 6.450249
+v 23.698277 2.157651 5.751637
+v 23.493559 2.039570 5.749388
+v 25.136150 2.385110 0.048454
+v 24.997986 2.463546 0.070078
+v 24.651171 2.288908 4.024665
+v 24.230757 2.396000 5.471827
+v 24.232254 2.395019 5.472966
+v 25.130419 1.704899 7.224439
+v 25.133797 1.095726 0.158005
+v 25.127714 0.534072 8.224599
+v 24.832220 0.916464 0.234851
+v 24.721365 0.323516 7.880333
+v 43.850044 -13.669897 10.775205
+v 43.319145 -13.295517 11.077321
+v 43.050999 -13.165789 10.999970
+v 43.059654 -12.202198 11.035280
+v 41.321590 -13.883735 -0.385310
+v 43.039127 -12.886906 10.915416
+v 44.012497 -11.579495 12.026037
+v 42.402550 -13.240224 -0.369843
+v 43.254253 -12.087510 11.017655
+v 44.422916 -11.746151 12.332176
+v 44.856022 -11.963781 12.453244
+v 43.468048 -13.850625 -0.434791
+v 42.558258 -13.328502 -0.374869
+v 43.464169 -15.111103 -0.510410
+v 44.752510 -13.049765 11.462277
+v 43.442081 -15.124494 -0.510522
+v 44.095139 -13.541995 10.583157
+v 36.735363 35.957069 10.528667
+v 36.324471 35.269222 0.486817
+v 36.814922 34.991280 0.543688
+v 37.394333 34.658424 0.562077
+v 37.586685 35.470242 10.579965
+v 37.320080 35.646187 10.818879
+v 36.723213 36.925461 10.202492
+v 37.251053 37.231838 10.269109
+v 37.572224 37.408703 9.826883
+v 37.393360 37.121132 0.511665
+v 38.458588 36.511379 0.621575
+v 38.294762 36.605648 0.616377
+v 38.437828 36.876289 9.035761
+v 38.438076 35.884075 9.429518
+v 38.460106 35.280380 0.608783
+v 46.204327 -45.349529 8.247242
+v 46.184013 -44.478199 0.203959
+v 47.301590 -45.106701 0.034990
+v 47.126793 -45.976372 9.119027
+v 48.107914 -44.185139 7.751812
+v 48.257805 -43.697487 4.106654
+v 48.155403 -43.710381 4.565813
+v 48.428604 -44.436756 -0.145825
+v 48.429943 -44.048561 -0.149136
+v 48.057968 -45.415691 8.884986
+v -4.500895 -47.532425 -0.270359
+v -3.354598 -48.208088 -0.213680
+v -1.563040 -48.959682 11.272890
+v -2.747131 -48.305618 9.571424
+v -3.015566 -47.087627 8.033247
+v -1.942371 -46.643566 8.742864
+v -2.505067 -46.841541 8.197888
+v -0.771397 -47.388363 10.527331
+v -2.172965 -46.305435 0.027496
+v -0.660286 -48.392117 11.421402
+v -0.659657 -48.484947 11.432324
+v -2.201829 -47.588539 -0.101010
+v -0.726123 -47.962097 10.902699
+v -2.542731 -47.762123 -0.197892
+v -0.655017 -48.498825 11.540800
+v 39.494961 -3.556143 -0.133448
+v 40.641804 -4.232553 -0.171531
+v 39.623505 -4.028881 8.974258
+v 38.659843 -3.468303 9.185107
+v 39.506287 -2.236830 -0.094252
+v 39.503010 -2.817593 -0.130576
+v 38.840569 -2.352841 7.310713
+v 40.064884 -1.736467 5.251848
+v 40.659054 -1.587605 -0.057393
+v 39.969593 -1.790739 5.231415
+v 41.807758 -3.584947 -0.186100
+v 41.499691 -3.757205 -0.195873
+v -5.808918 -45.325104 -0.354738
+v -5.654744 -45.417301 -0.351942
+v -5.427116 -44.650570 5.199736
+v -6.089965 -44.124207 5.986330
+v -5.802850 -43.976624 -0.376781
+v -5.802836 -44.029644 -0.381533
+v -4.651784 -43.310276 -0.337330
+v -4.917787 -43.468529 -0.369007
+v -5.279127 -43.672939 -0.356182
+v -5.247152 -42.366177 6.460549
+v -5.111098 -42.266102 6.577971
+v -3.652030 -43.875004 -0.090901
+v -4.436158 -43.436161 -0.320765
+v -4.099546 -42.875374 6.488050
+v -3.519537 -43.950806 -0.066835
+v -4.056793 -43.539539 6.029986
+v -3.517687 -44.106804 -0.081194
+v 45.153008 4.246583 0.075123
+v 46.312618 3.576984 -0.020800
+v 45.889931 3.778894 8.044576
+v 44.923237 4.340092 7.554016
+v 45.152428 5.577720 0.094076
+v 44.917591 5.482150 7.737865
+v 45.871124 6.036660 8.403426
+v 45.209225 5.610521 0.090310
+v 46.457798 5.682868 8.698974
+v 46.787457 5.464983 9.210909
+v 47.476967 4.243015 -0.088951
+v 46.817451 5.015868 8.806357
+v 46.825157 4.353181 8.702347
+v 47.360825 4.176123 -0.090397
+v 17.769127 -7.422966 13.738516
+v 17.212414 -6.513676 0.690980
+v 17.433537 -6.640851 0.671144
+v 18.243879 -7.101121 0.469577
+v 18.524567 -7.866385 13.869345
+v 17.758644 -6.530330 13.529309
+v 17.219151 -5.331969 0.898547
+v 17.759510 -6.850223 13.536343
+v 18.026905 -4.875000 0.982257
+v 17.916424 -4.937136 0.967743
+v 17.849827 -4.975693 0.968217
+v 17.911926 -6.423906 13.380375
+v 18.511196 -6.059597 13.230980
+v 18.254223 -4.741305 0.963189
+v 19.275690 -6.517935 13.366773
+v 19.273888 -7.421525 13.686315
+v 10.690988 -27.634277 13.590951
+v 9.862519 -27.247776 13.296549
+v 9.889074 -26.310701 13.450469
+v 10.729656 -25.786097 13.888683
+v 8.848292 -27.726810 -0.597045
+v 11.529500 -26.175999 14.170364
+v 9.939275 -28.337799 -0.595735
+v 9.950451 -29.593884 -0.532004
+v 11.517024 -27.087368 14.026359
+v 44.620888 -15.584996 10.576319
+v 44.160938 -16.354977 -0.664677
+v 45.259636 -16.999218 -0.771584
+v 45.468056 -16.119574 10.083241
+v 44.167896 -15.077314 -0.531934
+v 44.615219 -14.602451 10.408471
+v 45.264332 -14.443544 -0.526783
+v 44.239517 -15.035889 -0.530220
+v 44.795643 -14.501000 10.265821
+v 45.487679 -14.084446 11.105384
+v 46.359867 -15.078944 -0.611601
+v 45.957142 -14.845041 -0.572647
+v 46.330482 -14.562584 11.294785
+v 46.333828 -15.593032 10.426029
+v 46.361732 -16.357567 -0.744763
+v 45.836460 -15.925906 9.794320
+v 24.206421 -19.858707 13.084530
+v 24.173603 -18.451195 0.091733
+v 25.270330 -19.074919 -0.009050
+v 25.019255 -20.324095 13.038966
+v 24.662222 -20.104458 12.916595
+v 24.204950 -18.939283 13.282825
+v 25.017431 -18.450201 13.183054
+v 26.113348 -17.716234 4.489304
+v 25.711912 -18.813776 12.929516
+v 25.838995 -18.894564 12.973541
+v 26.204718 -17.704729 4.079606
+v 26.371666 -18.429428 -0.077192
+v 26.372452 -18.046822 -0.067306
+v 25.829021 -19.862661 13.144630
+v 25.942616 27.082890 10.839521
+v 24.047430 27.918434 0.204120
+v 24.809544 27.468840 0.227466
+v 25.195421 27.238892 0.152947
+v 26.879932 26.532206 10.953186
+v 25.970352 28.128660 10.964606
+v 25.429487 28.445023 7.927123
+v 25.055552 28.082354 5.843925
+v 24.049126 28.144178 0.207090
+v 24.047722 27.988417 0.203727
+v 26.900427 28.591408 11.193053
+v 26.935631 28.606234 11.215050
+v 25.987196 29.315926 5.120003
+v 25.981253 28.760574 7.859107
+v 27.899511 28.017031 11.641091
+v 26.377619 29.192936 0.239840
+v 26.239912 29.275414 0.253226
+v 25.998755 29.419727 0.282164
+v 26.359804 27.875425 0.195852
+v 26.360640 28.106560 0.186528
+v 27.876255 27.361120 11.512155
+v 27.851923 27.008112 11.354859
+v 25.463606 27.388441 0.143421
+v 26.082870 27.718082 0.224919
+v 27.754274 26.951511 11.372509
+v 27.225353 26.710003 11.038710
+v 8.320375 -16.927223 -0.495656
+v 8.386475 -16.966152 -0.499193
+v 8.407522 -17.361750 8.296699
+v 7.982633 -17.276768 12.112805
+v 7.131051 -16.802128 12.775235
+v 8.343157 -15.694118 -0.595030
+v 8.343418 -16.040518 -0.641333
+v 7.143393 -15.903203 12.750356
+v 8.009242 -15.440572 12.060884
+v 8.411121 -17.216711 9.994936
+v 8.381650 -17.081461 11.795371
+v -3.387315 -40.849045 -0.125474
+v -2.418925 -41.418926 -0.051243
+v -2.286110 -41.492420 -0.012394
+v -2.898655 -39.623394 9.209912
+v -3.805072 -39.064003 9.300055
+v -3.828275 -37.912899 9.911483
+v -3.384529 -39.547150 -0.078523
+v -3.809284 -38.912777 9.406229
+v -3.827480 -37.934353 9.892039
+v -2.290372 -38.896206 0.051776
+v -2.990735 -37.304050 10.596243
+v -2.107782 -37.842831 10.455359
+v -1.194668 -39.535892 0.135951
+v -2.658226 -37.516975 10.453379
+v -1.193392 -40.819530 0.176548
+v -1.190176 -40.190178 0.112930
+v -2.055103 -38.971851 9.904306
+v -2.344138 -39.184444 9.710603
+v 23.453936 18.189659 8.441339
+v 24.161026 17.828119 -0.522593
+v 24.199848 17.805670 -0.519355
+v 23.719049 18.035339 8.654819
+v 24.207846 20.393291 -0.671970
+v 24.181395 20.378012 -0.671103
+v 23.322256 19.934649 9.443231
+v 23.656080 20.129723 9.856333
+v 24.380331 20.295626 -0.700193
+v 24.369083 20.302147 -0.701132
+v 24.353035 20.311283 -0.699392
+v 24.552614 19.614305 9.850666
+v 25.334120 19.746393 -0.689949
+v 24.618086 18.569771 8.967611
+v 25.324142 18.450434 -0.555354
+v 24.621822 18.704937 8.917234
+v 25.018051 18.276176 -0.522370
+v 37.684113 -21.786236 10.499197
+v 37.247143 -21.072517 0.257933
+v 38.372448 -21.716841 0.092701
+v 38.594608 -22.322542 10.698568
+v 38.337227 -22.160452 10.409053
+v 37.901577 -21.903627 10.308926
+v 37.684841 -20.741093 10.559923
+v 37.398651 -20.105383 3.859523
+v 37.247276 -20.596815 0.280955
+v 37.685986 -20.740322 10.559005
+v 39.506210 -19.740278 -0.036248
+v 39.497181 -20.811380 11.263477
+v 39.503853 -21.057146 -0.010108
+v 39.504593 -20.634821 0.010257
+v 39.496223 -21.412634 11.089235
+v 39.495350 -21.842539 11.269878
+v 25.371023 15.319406 6.853490
+v 26.413790 15.665885 10.450491
+v 25.453995 16.080891 9.982507
+v 24.980742 15.542747 6.874640
+v 23.882769 15.597601 -0.365230
+v 23.883038 15.564247 -0.362700
+v 24.533922 15.962855 3.919408
+v 25.417162 17.082092 9.717061
+v 26.379080 17.680416 10.183248
+v 25.008320 16.266417 -0.371006
+v 25.710218 17.260082 9.783414
+v 26.122082 17.515625 9.971725
+v 27.346369 17.294661 10.938757
+v 26.135479 15.648533 -0.305044
+v 25.786247 15.843555 -0.308165
+v 27.345297 16.277853 10.896846
+v 26.153105 14.370342 -0.182350
+v 26.149345 14.693742 -0.206919
+v 27.272238 16.227152 10.836559
+v 26.420519 15.670120 10.451977
+v 36.070915 -26.068483 0.156082
+v 36.961945 -25.554924 11.315434
+v 36.534584 -25.292280 11.487854
+v 36.074909 -24.810156 0.216545
+v 36.528683 -24.328442 11.314816
+v 37.156914 -24.186777 0.117862
+v 37.362000 -23.857040 10.798929
+v 38.242382 -24.818363 -0.014296
+v 37.972221 -24.662045 -0.002262
+v 37.488415 -23.932110 10.747447
+v 38.215076 -24.338329 11.054483
+v 38.215275 -25.292795 11.448050
+v 26.732573 -20.237373 -0.152021
+v 26.910784 -20.338726 -0.168398
+v 27.673140 -20.790306 -0.069894
+v 27.812860 -20.873459 -0.048190
+v 27.547260 -22.194906 13.754775
+v 26.921566 -21.832581 13.751570
+v 26.767551 -21.737837 13.698782
+v 26.765213 -20.805826 13.531293
+v 27.550495 -20.360054 13.634068
+v 28.892727 -19.004150 0.088172
+v 28.324684 -20.852209 13.902268
+v 28.888857 -20.259918 0.087430
+v 28.315178 -21.775108 14.065372
+v 28.570627 -20.441284 0.046240
+v 27.936577 -21.990850 14.015969
+v 7.118249 -48.658920 0.833136
+v 8.220407 -49.306076 0.980709
+v 10.201551 -50.137211 13.682819
+v 10.129108 -50.096504 13.604544
+v 9.422899 -49.674988 13.766383
+v 7.153731 -47.433426 0.996393
+v 9.466826 -48.786404 13.986650
+v 10.268754 -48.356766 14.031567
+v 8.288257 -46.874802 1.304065
+v 11.027700 -48.809032 13.857823
+v 9.371002 -47.528973 1.446697
+v 9.315137 -48.721279 1.111183
+v 9.366394 -47.700417 1.423932
+v 11.013578 -49.141903 13.775126
+v 11.055595 -49.732941 14.127423
+v 8.334960 -49.247562 1.012043
+v 37.469715 -47.372868 12.114947
+v 38.535137 -47.484932 0.226608
+v 38.648067 -47.551899 0.231096
+v 39.668743 -48.157749 0.285772
+v 38.353493 -47.894684 12.098527
+v 38.549187 -46.167915 0.235089
+v 38.537205 -47.302456 0.226444
+v 37.501614 -46.350475 11.887561
+v 38.428017 -45.838413 11.639674
+v 39.696396 -45.520634 0.305855
+v 39.327168 -46.363411 11.621683
+v 40.818691 -47.511856 0.356686
+v 39.284435 -47.397305 11.853169
+v 17.782555 -29.426258 5.239056
+v 17.695414 -29.372458 5.247857
+v 17.913214 -30.303101 0.333797
+v 17.911266 -28.950451 0.490014
+v 17.693998 -29.323807 5.283356
+v 17.678404 -29.063477 5.651351
+v 17.600800 -27.807045 7.479542
+v 18.561684 -27.217773 7.687163
+v 19.045675 -28.318052 0.400302
+v 17.941973 -28.931576 0.496885
+v 18.020113 -27.557215 7.531428
+v 19.594585 -27.905313 7.009497
+v 20.192701 -29.014313 0.250012
+v 18.937174 -27.509272 7.068609
+v 47.983444 17.336441 -0.365207
+v 47.613728 17.486904 11.669067
+v 47.983536 18.642550 -0.368219
+v 47.983543 18.641468 -0.368382
+v 47.636745 18.501415 10.919847
+v 48.574753 19.038441 9.964174
+v 49.097034 19.287928 -0.001595
+v 49.498802 18.516809 9.784247
+v 50.211712 18.637304 0.168776
+v 49.440029 17.472078 10.576962
+v 50.226059 17.339226 -0.024615
+v 13.571002 -38.696117 10.542213
+v 13.143370 -37.997654 0.519846
+v 13.337498 -38.110725 0.534020
+v 14.238369 -38.638512 0.667964
+v 14.438676 -39.184631 10.230488
+v 13.578109 -37.702229 10.750754
+v 13.138430 -36.725578 0.456869
+v 13.139305 -36.817871 0.473592
+v 14.231417 -36.079304 0.336412
+v 14.447474 -37.187683 10.650810
+v 15.328441 -36.731831 0.476868
+v 14.288502 -36.113129 0.342368
+v 15.320566 -37.666737 10.339785
+v 15.326124 -38.004326 0.569971
+v 15.326637 -37.725826 0.540874
+v 15.328112 -36.906269 0.507115
+v 15.318918 -38.669823 10.127987
+v 14.625002 -38.416245 0.678640
+v 22.020704 4.959549 9.278831
+v 21.608709 4.491062 6.573238
+v 21.985628 4.275364 6.552813
+v 22.182108 3.481525 3.902774
+v 22.514872 3.957211 6.464926
+v 22.615953 4.327472 8.117702
+v 22.156996 6.082833 10.152029
+v 20.615709 4.591672 0.024430
+v 20.615908 4.569255 0.026240
+v 21.166750 4.906599 3.650181
+v 22.063375 5.711943 9.543192
+v 23.154301 6.745907 11.388269
+v 21.667946 5.212665 -0.056045
+v 23.875780 6.182144 10.616614
+v 22.728273 4.622184 -0.038632
+v 23.646833 4.856167 8.458782
+v 22.742189 3.408732 0.051778
+v 22.742077 3.484406 0.053124
+v 23.426731 4.690331 8.154817
+v 23.421595 4.545780 6.832851
+v 22.467840 3.242257 0.048943
+v 17.598635 -41.693878 9.820987
+v 17.225758 -42.318089 0.708095
+v 18.293789 -42.953377 0.506184
+v 18.453932 -42.277493 8.846624
+v 18.444626 -42.272038 8.847502
+v 17.472391 -40.819290 6.703445
+v 17.227436 -41.079327 0.712536
+v 17.229013 -41.598999 0.766592
+v 17.604658 -41.243320 9.955128
+v 17.896708 -40.650688 2.828679
+v 18.338621 -40.395042 2.841099
+v 18.294601 -40.465816 0.548538
+v 19.341253 -41.070942 0.513572
+v 18.804380 -40.484894 7.103165
+v 18.720036 -40.348896 9.185684
+v 19.348024 -40.740917 8.474582
+v 19.367680 -41.086391 0.508598
+v 19.350115 -41.806492 8.142001
+v 19.369438 -42.335953 0.405907
+v 18.624115 -42.188602 8.704910
+v -8.828794 -45.537846 9.026850
+v -8.852570 -44.518066 -0.386766
+v -8.825664 -44.533447 -0.388485
+v -7.720165 -45.175117 -0.368837
+v -7.879471 -45.967709 7.910048
+v -8.831048 -44.457565 9.031737
+v -8.855036 -43.214031 -0.269863
+v -7.878420 -43.748745 7.913410
+v -6.874090 -44.146069 6.732016
+v -6.585905 -44.515659 -0.375971
+v -6.877706 -45.286362 6.733904
+v 48.567501 21.434092 -0.187016
+v 49.699677 20.773373 0.116913
+v 50.878357 20.278894 7.674013
+v 49.995422 20.804554 7.826192
+v 49.869690 21.925171 7.089892
+v 50.658504 22.542950 6.165782
+v 51.697971 21.900858 6.917020
+v 50.802658 22.592630 0.209773
+v 51.123646 22.265144 6.086252
+v 51.825890 20.761066 7.945238
+v 50.806759 21.353447 0.323551
+v 50.288979 21.079414 0.244940
+v 51.036839 20.393513 7.495235
+v 33.869556 35.918011 10.800609
+v 34.808506 35.819248 0.323492
+v 35.928600 35.151279 0.454714
+v 34.804375 35.376141 10.551805
+v 34.827835 37.130848 0.272405
+v 33.887142 36.966915 10.736033
+v 34.843018 37.493187 10.420532
+v 35.969719 37.775471 0.352730
+v 22.740887 1.576761 0.126375
+v 23.473989 2.099282 6.044025
+v 23.194952 2.322030 6.382317
+v 22.397003 3.046150 7.885157
+v 22.376509 4.251496 8.440879
+v 22.749563 2.877591 0.042328
+v 22.747309 2.115401 0.028772
+v 23.874233 3.516777 0.018030
+v 23.452698 3.281372 0.049186
+v 24.358120 4.041432 7.284608
+v 24.999186 2.852790 0.039693
+v 24.987398 2.859874 0.040596
+v 24.966406 2.872123 0.038917
+v 24.507374 2.597238 5.647977
+v 24.999317 2.821038 0.039565
+v 24.999516 2.836440 0.036647
+v 24.999203 2.848862 0.039663
+v 24.507387 2.989085 5.630992
+v 24.520578 2.714051 5.492675
+v 24.495243 2.589722 5.645686
+v 24.231901 2.396513 5.471230
+v 10.069651 -7.898253 0.470240
+v 9.433249 -7.594254 12.613533
+v 9.480832 -5.745957 11.705592
+v 10.055955 -5.471228 0.731590
+v 11.104754 -6.075987 0.757545
+v 10.283468 -5.602688 0.742130
+v 10.280495 -6.215302 11.874806
+v 10.239504 -7.140710 12.427673
+v 11.114652 -7.288624 0.624065
+v 10.278172 -6.294170 11.906143
+v 4.232985 -7.647857 13.541226
+v 3.657259 -6.707506 0.047997
+v 4.753454 -7.343847 0.080155
+v 5.027270 -8.090382 13.151947
+v 4.218752 -6.689445 13.246647
+v 3.659386 -5.446937 0.150580
+v 4.757744 -4.828021 0.284892
+v 5.014524 -6.145308 12.543343
+v 5.849342 -5.467538 0.322005
+v 5.516209 -5.272006 0.306842
+v 5.839909 -6.587110 12.133094
+v 5.847185 -6.722281 0.214328
+v 5.848025 -6.234272 0.254043
+v 5.839491 -6.798663 12.200491
+v 5.837914 -7.578383 12.509840
+v 5.736113 -7.638913 12.536012
+v 48.471523 -43.258492 6.999789
+v 47.314217 -41.922882 5.393416
+v 47.549805 -42.094456 -0.097004
+v 48.235149 -41.387501 5.179811
+v 49.260361 -41.813782 5.896301
+v 48.600414 -42.710934 -0.231658
+v 49.360630 -42.741989 6.793922
+v 48.610401 -43.942360 -0.178080
+v 48.610119 -43.875004 -0.178575
+v 44.872868 29.050369 6.811976
+v 44.594078 28.583662 -0.001491
+v 45.736134 27.906885 -0.189838
+v 45.868862 28.467045 6.722566
+v 44.859707 29.685169 6.470896
+v 44.877869 30.207039 6.900198
+v 45.743389 30.574505 0.187474
+v 45.904270 30.833174 8.566416
+v 46.882675 29.913017 0.082416
+v 46.353539 30.218414 0.087625
+v 46.860050 30.310717 9.252660
+v 46.863605 29.158590 8.354915
+v 46.884769 28.578583 -0.119688
+v 46.471333 28.333740 -0.188900
+v 45.890438 28.478514 6.707470
+v 16.809553 -39.785339 0.616727
+v 17.940006 -40.435272 0.578582
+v 16.932985 -40.932423 10.682063
+v 16.834866 -40.870968 10.638183
+v 16.806437 -38.450764 0.478761
+v 16.806469 -38.465740 0.479374
+v 16.831648 -39.757797 10.255347
+v 17.945156 -37.770870 0.380117
+v 17.754295 -39.221817 10.285636
+v 18.713028 -39.641144 9.411859
+v 19.086222 -38.427002 0.336212
+v 17.852097 -39.285683 10.330270
+v 19.079441 -39.758411 0.401203
+v 19.080589 -39.602802 0.384865
+v 9.428013 0.311700 0.104446
+v 10.458300 -0.296582 0.117783
+v 10.561498 -0.357272 0.128048
+v 12.180561 -1.036502 10.508660
+v 11.025407 -0.392554 9.068704
+v 10.930496 0.737628 8.504632
+v 12.043729 1.138899 9.535191
+v 11.684433 1.019171 9.154043
+v 13.160676 0.432954 11.041195
+v 11.686148 1.572263 -0.005215
+v 11.683443 0.272337 0.062009
+v 13.198932 -0.608561 11.395790
+v 10.946782 -0.138544 0.088771
+v 11.343912 0.085495 0.057621
+v 13.042725 -0.670141 11.232921
+v 22.782866 -27.916136 8.136178
+v 22.584530 -27.799555 8.151866
+v 23.319220 -27.876833 -0.046058
+v 24.470898 -28.551226 -0.196033
+v 23.466228 -28.350279 8.827323
+v 23.333105 -26.565863 -0.036472
+v 23.319929 -27.787836 -0.042804
+v 22.526112 -26.706495 8.939974
+v 24.495718 -25.916376 -0.150770
+v 24.165924 -26.101057 -0.131050
+v 23.400805 -26.190695 9.632980
+v 24.339270 -26.734030 9.564890
+v 25.653368 -26.584181 -0.260684
+v 24.371668 -27.812494 9.230092
+v 25.643612 -27.907461 -0.300849
+v 24.397234 -27.428587 9.071525
+v 24.991428 -28.265408 -0.241716
+v 25.364046 -28.061619 -0.284059
+v 39.808243 0.956209 0.088457
+v 39.558815 2.021990 5.716085
+v 39.502747 3.422468 7.078017
+v 39.810276 2.289891 0.154682
+v 40.459824 4.019846 7.340070
+v 40.934719 2.940247 0.190139
+v 41.525753 3.269325 6.273479
+v 42.066715 2.266290 0.159864
+v 47.506771 -27.593033 -0.211440
+v 47.995079 -27.875309 -0.192357
+v 48.636501 -28.246485 -0.093132
+v 48.030811 -27.957157 11.464124
+v 47.148087 -27.447060 11.463467
+v 47.508762 -26.282351 -0.276332
+v 47.506069 -26.902836 -0.188651
+v 47.163277 -26.422955 10.969108
+v 48.083324 -25.893953 10.462122
+v 48.641674 -25.627237 -0.191853
+v 48.989891 -26.415424 10.461646
+v 49.768250 -26.283865 -0.036518
+v 49.194950 -25.952841 -0.058935
+v 48.952251 -27.454409 10.969319
+v 49.771446 -27.592869 -0.079630
+v 49.439892 -27.785009 -0.105282
+v 6.572913 -36.832699 12.118317
+v 6.067422 -36.007065 0.271222
+v 7.208903 -36.667999 0.266858
+v 7.451931 -37.330589 11.868827
+v 6.579782 -35.826687 12.321780
+v 6.059127 -34.670170 0.132068
+v 6.066250 -35.709530 0.256094
+v 7.204203 -33.997471 0.042499
+v 7.192123 -34.004623 0.043905
+v 7.460497 -35.312286 12.277904
+v 8.352009 -34.671955 0.102903
+v 8.342484 -35.802479 12.029478
+v 8.351350 -35.022381 0.162793
+v 8.351831 -34.767376 0.116576
+v 8.340819 -36.814774 11.823858
+v 8.349584 -36.005508 0.201077
+v 8.283037 -36.043766 0.199225
+v 26.505203 -15.630812 13.414497
+v 27.235132 -16.112644 13.126554
+v 26.537025 -14.715068 13.603597
+v 24.453348 -16.730968 -0.087947
+v 27.584997 -13.966211 15.820384
+v 25.521002 -16.095316 -0.071527
+v 26.542728 -14.711719 13.602878
+v 27.274687 -14.199018 14.969005
+v 28.253187 -14.414299 15.463843
+v 26.582638 -16.685295 -0.048119
+v 25.938108 -16.311893 0.011288
+v 26.583361 -17.920462 -0.080284
+v 28.048399 -15.155069 13.547735
+v 27.999773 -15.380352 13.091214
+v 27.994303 -15.662960 13.031758
+v 23.893330 28.233984 0.205436
+v 25.151701 28.488144 10.851409
+v 24.324751 28.956200 10.749089
+v 24.330439 29.914270 10.859965
+v 25.155916 30.395508 11.070804
+v 25.998703 29.456995 0.284421
+v 25.971842 29.929138 11.171237
+v 25.973251 28.979832 11.062705
+v 8.418139 -18.471401 11.902929
+v 8.386882 -17.130728 -0.472848
+v 9.515528 -17.776920 -0.536221
+v 9.282018 -18.938696 11.598927
+v 8.415815 -17.460033 11.814989
+v 10.646543 -15.815472 -0.451359
+v 10.171335 -17.361502 11.105118
+v 10.649559 -17.110750 -0.624360
+v 10.164332 -18.392336 11.198493
+v 10.164502 -17.386536 -0.694911
+v 47.019093 -40.739292 -0.077935
+v 47.767853 -41.053413 4.722744
+v 48.798748 -39.203182 4.351155
+v 48.204594 -38.744102 -0.099944
+v 48.416374 -38.958687 3.712324
+v 48.167316 -40.073357 -0.287930
+v 48.167397 -40.042397 -0.289395
+v 48.850040 -40.470200 4.817916
+v 48.629948 -40.546154 4.517108
+v 23.001305 18.461092 -0.570927
+v 23.237793 18.322388 -0.596599
+v 24.113255 17.801544 -0.522484
+v 23.127958 17.998617 8.326863
+v 22.267347 18.538294 7.618814
+v 23.015146 19.751728 -0.563453
+v 22.276871 18.755512 7.539894
+v 22.207907 19.611052 8.415721
+v 24.158716 20.390894 -0.666810
+v 23.979799 20.290548 -0.660533
+v 23.026745 20.107290 9.448050
+v 37.117443 -20.515631 0.300350
+v 37.488976 -19.000280 10.983290
+v 37.348915 -18.921528 10.949996
+v 36.616642 -18.375744 11.599539
+v 36.617485 -17.647182 11.641588
+v 36.613640 -17.380747 11.749197
+v 37.121002 -19.249296 0.326940
+v 37.118912 -19.591085 0.344950
+v 37.466454 -16.973246 11.322452
+v 38.210579 -18.664875 0.119229
+v 36.975056 -17.246761 11.363557
+v 37.033978 -17.222153 11.315315
+v 37.062057 -17.202902 11.332124
+v 38.280384 -17.427198 11.575115
+v 39.306816 -19.330372 -0.024955
+v 38.293121 -18.420712 11.472775
+v 38.273685 -17.731081 11.664408
+v 23.610140 14.089146 -0.262163
+v 23.613199 15.408321 -0.361649
+v 24.236921 15.820982 9.586550
+v 25.133116 15.279194 10.062277
+v 25.113935 14.220270 10.320995
+v -0.652712 -48.545471 11.592995
+v -1.141643 -47.746895 0.134068
+v -0.092320 -48.363144 0.323155
+v 0.170308 -49.079170 12.860823
+v -0.680088 -47.991096 10.972693
+v -0.692349 -47.537537 10.703392
+v -1.138901 -46.545624 0.248650
+v -0.087550 -45.973965 0.550883
+v 0.140856 -47.145702 11.454879
+v 0.949945 -46.578693 0.553748
+v 0.000000 -46.026466 0.566557
+v 0.940231 -47.731613 12.716615
+v 0.947900 -47.771282 0.440551
+v 0.938253 -48.662296 13.237556
+v 0.000000 -48.311741 0.349809
+v 0.634441 -48.819115 12.971379
+v 2.617133 -46.005238 0.677581
+v 3.350050 -46.416592 0.669094
+v 3.694665 -46.609848 0.665723
+v 5.317383 -44.290173 13.159965
+v 4.520775 -43.840572 13.178851
+v 4.423012 -43.013592 12.515664
+v 2.639833 -44.738777 0.798645
+v 4.698936 -42.864830 12.246568
+v 5.165852 -42.601624 11.993243
+v 3.725831 -44.087067 0.905691
+v 5.998145 -43.039902 12.128867
+v 4.788191 -44.684753 0.893778
+v 4.489823 -44.516972 0.896739
+v 6.059596 -43.893040 12.669984
+v 4.779646 -45.940960 0.775255
+v 5.546441 -44.174603 12.943409
+v 24.357857 23.570749 -0.254628
+v 24.835255 23.304150 -0.344378
+v 25.448992 22.948328 -0.337342
+v 25.202229 21.720610 12.486582
+v 24.858038 21.917425 12.508206
+v 24.595230 22.069214 12.510616
+v 24.389948 22.194498 12.449597
+v 24.387703 23.154818 12.351043
+v 24.389822 22.476311 12.653214
+v 25.211550 23.677465 12.052184
+v 26.534227 24.817875 -0.054955
+v 25.707827 23.374035 12.147655
+v 26.023245 23.155451 12.371542
+v 26.535839 23.567179 -0.189953
+v 25.992224 22.131397 13.055385
+v 25.766235 21.997086 13.091379
+v 18.556208 -30.979025 0.353739
+v 19.485638 -31.531326 0.232404
+v 19.609325 -31.411196 7.466578
+v 18.338566 -30.850945 0.335336
+v 20.620007 -29.691494 7.400238
+v 21.776812 -30.413572 8.564296
+v 20.657591 -29.548798 0.179658
+v 21.845140 -31.580051 9.151015
+v 20.639156 -30.879053 0.131875
+v 33.024456 -41.536514 0.068327
+v 33.522499 -41.830006 0.045876
+v 34.091591 -42.167149 0.061276
+v 32.884460 -41.925709 10.902962
+v 32.067516 -41.435863 10.746138
+v 33.046207 -40.303295 -0.019561
+v 33.036407 -40.625008 0.049332
+v 32.089394 -40.922058 10.566722
+v 32.081982 -40.471329 10.705830
+v 32.898720 -40.003036 10.970513
+v 33.736378 -40.490917 10.940850
+v 33.754211 -41.456730 10.724766
+v 33.761307 -41.334583 10.682081
+v 15.879624 17.890409 4.650366
+v 16.084848 17.013504 0.020060
+v 16.013191 17.815987 4.686305
+v 15.920706 18.860203 3.819102
+v 15.921294 18.888609 3.808401
+v 16.088707 18.272051 0.039446
+v 16.085962 17.534658 0.038829
+v 17.160553 18.881174 0.016073
+v 16.483187 18.499346 0.047300
+v 15.927354 18.892458 3.810414
+v 15.947518 18.909855 3.841390
+v 17.780142 19.087416 5.150725
+v 18.031855 18.620703 2.306057
+v 17.356020 19.018614 2.284197
+v 17.204906 18.854464 0.012159
+v 17.802048 18.852024 4.911542
+v 20.245710 3.075619 0.046999
+v 21.356213 2.433959 0.035076
+v 20.830936 2.684874 10.057961
+v 19.887857 3.221251 11.694939
+v 20.245489 4.355348 0.054189
+v 20.245098 4.197830 0.066959
+v 19.874067 4.204192 12.143770
+v 20.780476 4.722082 11.020750
+v 21.780210 4.240645 9.323413
+v 22.468063 3.074152 0.045953
+v 21.818584 3.183924 8.805850
+v 47.122025 -3.113548 -0.156502
+v 48.243881 -3.716457 -0.065923
+v 49.946426 -1.282673 13.042930
+v 49.005024 -0.972359 12.209212
+v 48.918934 -0.094822 11.621811
+v 47.135780 -1.819977 -0.095038
+v 47.121490 -2.927109 -0.164249
+v 49.798214 0.443805 11.901814
+v 48.244915 -1.158492 -0.057946
+v 49.339539 -1.776786 -0.082102
+v 49.181690 -1.690989 -0.094887
+v 50.720646 0.100732 12.742216
+v 50.783520 -0.748499 13.296622
+v 49.349586 -3.042795 -0.029120
+v 36.272209 -42.510902 11.049352
+v 36.270370 -41.564522 10.976237
+v 35.823383 -42.039021 0.044192
+v 36.264938 -41.952328 10.854829
+v 36.881638 -41.428493 -0.010092
+v 37.097794 -41.080963 11.247226
+v 37.941189 -42.038784 0.009011
+v 37.895672 -41.542286 11.220027
+v 37.913578 -41.553532 11.198120
+v 37.915241 -42.512753 10.990772
+v 37.915211 -42.317478 10.904978
+v 37.915176 -42.419163 10.970396
+v 37.363987 -42.822372 11.139349
+v 21.167526 -50.674129 -0.692295
+v 21.652334 -50.945347 -0.778959
+v 22.286856 -51.321999 -0.689495
+v 22.007975 -52.709499 13.803386
+v 21.202175 -52.160351 13.027057
+v 21.165558 -49.409798 -0.394928
+v 21.197834 -51.403435 11.828450
+v 21.197174 -51.048798 11.864746
+v 22.280609 -48.770298 -0.297224
+v 22.041573 -50.587486 12.108562
+v 23.393974 -49.423836 -0.255527
+v 22.640360 -48.969288 -0.361001
+v 22.879698 -51.096985 12.251140
+v 22.880396 -51.751312 12.184051
+v 22.854536 -52.132095 12.790290
+v 23.395651 -50.702904 -0.394268
+v 9.969192 4.307878 -0.218046
+v 11.062577 3.664061 -0.139401
+v 12.798149 2.935952 10.988212
+v 11.786958 3.499111 9.707621
+v 11.736787 3.528584 9.701364
+v 9.971164 4.890972 -0.223856
+v 9.968484 4.479674 -0.226975
+v 11.987610 4.375803 11.081252
+v 9.978683 5.550863 -0.200821
+v 13.040089 4.674491 12.455855
+v 11.075065 6.144872 -0.172194
+v 10.452305 5.809513 -0.198611
+v 13.943552 4.112884 13.263041
+v 12.155060 5.494777 -0.135413
+v 13.311828 4.510490 12.483809
+v 12.145251 4.259855 -0.125411
+v 12.145935 4.588547 -0.142409
+v 13.868291 3.258315 12.760560
+v 16.959520 16.530220 5.584530
+v 15.952931 17.138927 5.273085
+v 17.612396 19.082846 -0.006674
+v 18.790810 18.404259 -0.131332
+v 17.762638 18.996071 -0.019800
+v 18.778921 17.059046 -0.157398
+v 18.782986 17.669619 -0.135593
+v 37.188965 -31.649506 13.810407
+v 36.589264 -30.669987 -0.244867
+v 37.716896 -31.318012 -0.357780
+v 38.012859 -32.124928 13.771280
+v 37.172333 -30.660042 13.460694
+v 36.592972 -29.373129 -0.103434
+v 37.189575 -31.545374 13.829032
+v 37.722721 -28.722847 -0.079630
+v 37.167648 -29.042643 -0.088849
+v 38.005501 -30.173519 13.420105
+v 38.850513 -29.368927 -0.195052
+v 38.839344 -30.695066 13.795276
+v 38.848301 -30.667397 -0.329384
+v 38.838390 -31.164423 13.988610
+v 38.837570 -31.658178 13.900411
+v 38.812824 -30.687819 -0.329971
+v 15.467054 14.033843 8.006809
+v 14.247435 12.646991 -0.002475
+v 14.420353 12.551993 0.003480
+v 15.387180 11.999726 -0.045001
+v 16.461535 13.535516 8.227062
+v 14.249222 13.074002 -0.000341
+v 14.248631 13.007030 -0.002723
+v 14.248586 12.982450 -0.002464
+v 14.248742 12.933352 -0.000325
+v 15.345922 15.030597 7.185713
+v 14.252414 13.972651 0.000409
+v 16.247200 15.531847 6.576786
+v 15.390517 14.648141 -0.019301
+v 14.738463 14.262160 0.010093
+v 16.514578 13.998044 -0.117534
+v 17.260750 15.012412 6.811066
+v 16.518242 12.676214 -0.125297
+v 16.514347 13.540141 -0.134075
+v 17.353836 14.013166 7.639987
+v 15.651708 12.157084 -0.071778
+v -5.093294 -45.343330 4.636244
+v -5.434294 -45.109467 5.037567
+v -5.654767 -45.478546 -0.350673
+v -5.243112 -45.715565 -0.343397
+v -5.434066 -44.925426 5.037681
+v -3.412332 -44.166763 -0.062028
+v -3.427249 -43.904552 5.984106
+v -3.426074 -44.306538 5.698473
+v -14.625000 -45.500004 -0.401823
+v 24.375000 -45.500000 0.372793
+v -4.875000 -43.875004 -0.379399
+v 34.125000 -40.625008 -0.012631
+v 14.625003 -37.375008 0.570033
+v 8.124999 -34.937500 0.148099
+v -30.875000 -17.875000 -0.350930
+v -24.375000 -17.468752 -0.694210
+v -17.875002 -17.875000 0.388251
+v 11.375000 -18.281252 -0.730525
+v -30.875000 -11.375000 0.167431
+v 6.500001 -8.125000 0.150300
+v 24.984375 2.843749 0.040700
+v -24.375004 9.750000 0.068561
+v -39.000000 16.250000 0.242710
+v 17.062500 19.906250 0.059654
+v -34.125000 27.625000 -0.416705
+v 25.593750 28.234375 0.244453
+v -24.375002 29.250000 0.177554
+v -6.500003 34.125000 0.051823
+v 4.875000 43.875004 0.626991
+v -43.875000 47.125000 -0.230965
+v -21.125004 48.750008 1.076026
+v 17.875002 48.750008 0.205388
+v -7.019094 9.154321 11.005136
+v -42.111328 -28.118114 10.270661
+v -14.369601 2.473120 10.766763
+v -9.378195 11.325798 10.253020
+v 0.965423 30.825830 7.896383
+v -19.843262 30.795164 10.336315
+v -1.844899 43.074276 5.002682
+v -29.192629 0.009585 10.549155
+v -23.384087 43.178341 14.168326
+v 11.402965 -5.592093 11.603754
+v 20.776112 25.007637 11.814616
+v 9.245645 -10.518223 14.408474
+v 10.419623 2.592220 7.218242
+v 47.700748 -38.817028 2.614275
+v 37.845669 -42.342354 10.963897
+v 43.418411 -12.615542 10.889720
+v 24.842190 22.159437 12.758190
+v -4.954663 -45.298546 4.473378
+v 24.159296 2.704016 5.113871
+vn -0.5003 -0.8658 -0.0045
+vn -0.5003 0.8658 -0.0045
+vn 0.4981 0.8658 0.0478
+vn 0.9973 -0.0000 0.0739
+vn 0.4981 -0.8658 0.0478
+vn -0.5008 -0.8647 -0.0389
+vn -0.9991 -0.0018 0.0425
+vn -0.4978 0.8611 0.1030
+vn 0.5017 0.8611 0.0820
+vn 1.0000 -0.0018 0.0006
+vn 0.4987 -0.8647 -0.0598
+vn -0.4755 -0.8518 0.2199
+vn -0.9887 0.0034 0.1500
+vn -0.5104 0.8585 -0.0487
+vn 0.4810 0.8585 -0.1775
+vn 0.9942 0.0034 -0.1076
+vn 0.5159 -0.8518 0.0911
+vn -0.4984 -0.8633 0.0795
+vn -0.9992 0.0012 0.0408
+vn -0.5003 0.8657 -0.0171
+vn 0.4993 0.8657 -0.0363
+vn 1.0000 0.0012 0.0024
+vn 0.5011 -0.8633 0.0603
+vn -0.4986 -0.8619 -0.0921
+vn -1.0000 -0.0021 0.0023
+vn -0.5018 0.8572 0.1159
+vn 0.4978 0.8567 0.1351
+vn 0.9992 -0.0031 0.0407
+vn 0.5009 -0.8624 -0.0729
+vn -0.5085 -0.8608 0.0230
+vn -0.9844 0.0051 0.1758
+vn -0.4726 0.8639 0.1741
+vn 0.5151 0.8569 0.0196
+vn 0.9910 -0.0090 -0.1332
+vn 0.4792 -0.8678 -0.1315
+vn -0.5086 -0.8602 -0.0375
+vn -0.9959 0.0112 -0.0894
+vn -0.4898 0.8713 -0.0304
+vn 0.5038 0.8601 0.0805
+vn 0.4849 -0.8715 0.0734
+vn -0.5102 -0.8489 0.1382
+vn -0.9990 0.0038 -0.0450
+vn -0.4902 0.8564 -0.1619
+vn 0.5073 0.8564 -0.0956
+vn 0.9962 0.0038 0.0875
+vn 0.4874 -0.8489 0.2044
+vn -0.9995 -0.0000 -0.0307
+vn 0.4850 -0.8715 0.0734
+vn -0.5104 0.8586 -0.0487
+vn -0.4985 -0.8633 0.0795
+vn 0.9911 -0.0113 0.1324
+vn 0.5012 -0.8633 0.0603
+vn 0.4988 -0.8647 -0.0598
+vn 0.9942 0.0032 -0.1076
+vn -0.4897 0.8713 -0.0304
+vn -0.5085 -0.8603 -0.0374
+vn 0.4810 0.8586 -0.1775
+vn 1.0000 -0.0020 0.0007
+vn -0.0653 0.1736 0.9826
+vn 1.0000 -0.0017 0.0006
+vn -0.4986 -0.8632 0.0796
+vn -0.4727 0.8639 0.1741
+vn 0.9910 -0.0089 -0.1332
+vn 0.4980 -0.8659 0.0478
+vn -0.4978 0.8612 0.1030
+vn -0.4985 -0.8632 0.0795
+vn -0.4724 0.8640 0.1741
+vn -0.5102 -0.8489 0.1381
+vn -0.4728 0.8638 0.1742
+vn 0.5039 0.8600 0.0805
+vn -1.0000 -0.0020 0.0023
+vn 0.5006 -0.8636 0.0602
+vn 0.4791 -0.8678 -0.1315
+vn -0.4977 0.8612 0.1029
+vn 1.0000 -0.0019 0.0006
+vn 0.4982 0.8657 0.0478
+vn -0.5004 -0.8658 -0.0046
+vn 0.5010 -0.8624 -0.0729
+vn 0.5036 0.8602 0.0805
+vn 0.9911 -0.0121 0.1324
+vn 0.5039 0.8600 0.0804
+vn 0.9962 0.0037 0.0875
+vn -0.5004 -0.8658 -0.0045
+vn -0.0216 0.0500 -0.9985
+vn 0.0414 0.0943 -0.9947
+vn 0.0427 0.0936 -0.9947
+vn 0.2026 0.1235 -0.9714
+vn 0.2002 0.1059 -0.9740
+vn 0.0038 0.0582 -0.9983
+vn 0.0389 -0.0013 -0.9992
+vn 0.0576 0.0070 -0.9983
+vn -0.1538 -0.0079 -0.9881
+vn 0.1999 0.0034 -0.9798
+vn -0.0126 0.0893 -0.9959
+vn -0.1777 -0.1953 -0.9645
+vn -0.1385 0.0809 -0.9871
+vn -0.0471 -0.0463 -0.9978
+vn -0.0013 -0.0478 -0.9989
+vn 0.0039 -0.0113 -0.9999
+vn -0.0187 -0.0166 -0.9997
+vn -0.0096 -0.0946 -0.9955
+vn -0.0337 0.0019 -0.9994
+vn 0.0577 0.0425 -0.9974
+vn 0.0972 0.0357 -0.9946
+vn -0.0928 -0.1033 -0.9903
+vn -0.1537 -0.0463 -0.9870
+vn -0.0193 0.0832 -0.9963
+vn 0.0502 -0.0390 -0.9980
+vn -0.0025 -0.0880 -0.9961
+vn 0.1055 0.0873 -0.9906
+vn -0.0076 -0.1185 -0.9929
+vn 0.0258 -0.1708 -0.9850
+vn -0.0418 -0.0146 -0.9990
+vn -0.0293 0.0823 -0.9962
+vn -0.0312 -0.1417 -0.9894
+vn 0.1499 0.1136 -0.9821
+vn -0.1076 0.0372 -0.9935
+vn -0.0372 0.1084 -0.9934
+vn 0.0024 -0.0173 -0.9998
+vn -0.0428 0.1029 -0.9938
+vn -0.1409 0.1645 -0.9763
+vn -0.1164 0.0064 -0.9932
+vn -0.0475 -0.0052 -0.9989
+vn 0.1533 -0.1389 -0.9784
+vn 0.0167 -0.0110 -0.9998
+vn 0.1480 -0.0345 -0.9884
+vn -0.0473 -0.0838 -0.9954
+vn 0.1563 -0.0920 -0.9834
+vn 0.1564 -0.0924 -0.9834
+vn 0.0001 -0.1018 -0.9948
+vn -0.1273 0.0708 -0.9893
+vn 0.1383 -0.0261 -0.9901
+vn -0.0424 0.1086 -0.9932
+vn 0.1110 -0.1612 -0.9807
+vn 0.1283 0.0002 -0.9917
+vn 0.0222 0.0297 -0.9993
+vn 0.0332 -0.0312 -0.9990
+vn -0.0575 0.0794 -0.9952
+vn 0.1625 -0.0292 -0.9863
+vn 0.1624 -0.0292 -0.9863
+vn -0.0511 -0.1363 -0.9893
+vn -0.1446 -0.1568 -0.9770
+vn -0.0743 0.1322 -0.9884
+vn -0.2224 0.0969 -0.9701
+vn -0.1423 0.1330 -0.9809
+vn 0.0690 0.0904 -0.9935
+vn -0.0095 0.0400 -0.9992
+vn -0.0235 -0.0109 -0.9997
+vn 0.0332 -0.0168 -0.9993
+vn 0.1023 -0.0019 -0.9948
+vn -0.1681 0.1040 -0.9803
+vn 0.0760 0.0807 -0.9938
+vn -0.0745 0.1098 -0.9912
+vn 0.0969 0.0233 -0.9950
+vn -0.0188 -0.0382 -0.9991
+vn 0.0966 0.0877 -0.9914
+vn -0.0307 0.0042 -0.9995
+vn -0.0605 0.0136 -0.9981
+vn 0.1048 -0.1271 -0.9863
+vn -0.1188 0.0746 -0.9901
+vn -0.1997 -0.0826 -0.9764
+vn -0.0039 0.0624 -0.9980
+vn 0.0539 -0.1958 -0.9792
+vn -0.0154 0.0366 -0.9992
+vn 0.1298 0.0845 -0.9879
+vn -0.0403 0.0710 -0.9967
+vn 0.0413 -0.0517 -0.9978
+vn 0.2870 0.2227 -0.9317
+vn 0.0028 0.0496 -0.9988
+vn -0.0067 0.0175 -0.9998
+vn -0.0743 0.0142 -0.9971
+vn 0.0413 -0.0325 -0.9986
+vn 0.0516 -0.0146 -0.9986
+vn 0.0191 -0.1506 -0.9884
+vn 0.0153 0.1160 -0.9931
+vn -0.0749 -0.0436 -0.9962
+vn -0.0722 0.0071 -0.9974
+vn 0.0991 0.0047 -0.9951
+vn 0.0633 -0.0134 -0.9979
+vn 0.0272 -0.1006 -0.9946
+vn -0.0120 -0.0583 -0.9982
+vn 0.0629 -0.0104 -0.9980
+vn -0.0092 0.0404 -0.9991
+vn -0.1124 0.0746 -0.9909
+vn 0.0387 -0.0391 -0.9985
+vn -0.0755 -0.1147 -0.9905
+vn -0.0663 0.0361 -0.9971
+vn 0.0627 -0.1363 -0.9887
+vn -0.2026 -0.0071 -0.9792
+vn -0.0211 -0.1594 -0.9870
+vn 0.1657 -0.1226 -0.9785
+vn 0.0195 0.0008 -0.9998
+vn 0.0396 -0.0752 -0.9964
+vn -0.0485 -0.1028 -0.9935
+vn 0.0458 -0.2025 -0.9782
+vn -0.1450 -0.0225 -0.9892
+vn 0.0317 0.1046 -0.9940
+vn 0.0180 -0.0063 -0.9998
+vn 0.0272 -0.0057 -0.9996
+vn 0.0735 0.1071 -0.9915
+vn 0.0093 0.0091 -0.9999
+vn -0.0187 0.1058 -0.9942
+vn -0.0281 0.0927 -0.9953
+vn -0.0819 -0.0399 -0.9958
+vn -0.0799 0.1398 -0.9869
+vn -0.0658 -0.2397 -0.9686
+vn 0.0016 0.0496 -0.9988
+vn 0.0319 0.0513 -0.9982
+vn 0.0931 -0.0105 -0.9956
+vn -0.0298 0.0838 -0.9960
+vn -0.2642 -0.0764 -0.9614
+vn -0.1116 -0.2327 -0.9661
+vn 0.0229 0.0214 -0.9995
+vn -0.0834 0.0601 -0.9947
+vn -0.0669 0.0499 -0.9965
+vn 0.1500 -0.0870 -0.9849
+vn -0.0807 -0.0192 -0.9966
+vn -0.0338 0.1712 -0.9847
+vn -0.0130 0.0096 -0.9999
+vn -0.0900 0.2823 -0.9551
+vn 0.1659 0.0481 -0.9850
+vn 0.0926 -0.0401 -0.9949
+vn -0.0715 0.0509 -0.9961
+vn -0.0002 -0.0448 -0.9990
+vn 0.1617 -0.1813 -0.9700
+vn -0.0880 0.0658 -0.9939
+vn 0.0245 0.1034 -0.9943
+vn 0.0033 0.2547 -0.9670
+vn -0.0167 0.0015 -0.9999
+vn -0.0579 -0.0493 -0.9971
+vn -0.0501 0.0390 -0.9980
+vn 0.2115 0.0507 -0.9761
+vn 0.0322 0.1748 -0.9841
+vn -0.1299 0.1276 -0.9833
+vn -0.0669 -0.1250 -0.9899
+vn 0.0734 -0.2157 -0.9737
+vn 0.0898 -0.1502 -0.9846
+vn -0.0491 -0.1892 -0.9807
+vn -0.1547 -0.1576 -0.9753
+vn -0.0851 -0.0700 -0.9939
+vn 0.0581 0.0330 -0.9978
+vn 0.0869 -0.0024 -0.9962
+vn 0.2344 -0.0451 -0.9711
+vn 0.0765 0.1494 -0.9858
+vn -0.0371 0.0297 -0.9989
+vn 0.0525 -0.2739 -0.9603
+vn -0.1027 0.1493 -0.9834
+vn 0.0050 0.0310 -0.9995
+vn 0.0039 0.0852 -0.9964
+vn 0.0058 -0.0207 -0.9998
+vn 0.0339 -0.0263 -0.9991
+vn 0.2286 0.0919 -0.9692
+vn -0.0459 0.2286 -0.9724
+vn -0.0240 0.0127 -0.9996
+vn 0.0116 0.0255 -0.9996
+vn -0.0607 0.0287 -0.9977
+vn -0.0363 -0.0549 -0.9978
+vn 0.0045 -0.1760 -0.9844
+vn 0.1390 0.0809 -0.9870
+vn 0.1389 0.0809 -0.9870
+vn 0.0088 -0.0091 -0.9999
+vn -0.0099 0.0034 -0.9999
+vn -0.0568 -0.0201 -0.9982
+vn 0.0007 -0.0166 -0.9999
+vn -0.0471 0.0206 -0.9987
+vn 0.2285 -0.0991 -0.9685
+vn 0.0868 -0.1034 -0.9909
+vn -0.0166 -0.0600 -0.9981
+vn 0.0705 -0.0983 -0.9927
+vn 0.0357 0.1433 -0.9890
+vn -0.0334 -0.1797 -0.9832
+vn -0.0333 -0.0509 -0.9982
+vn -0.0619 -0.0410 -0.9972
+vn -0.0556 -0.2075 -0.9767
+vn 0.1248 -0.1188 -0.9850
+vn -0.0489 -0.0649 -0.9967
+vn 0.0509 -0.0884 -0.9948
+vn -0.1271 0.0054 -0.9919
+vn 0.1188 -0.1552 -0.9807
+vn -0.1238 -0.0746 -0.9895
+vn -0.0030 -0.1783 -0.9840
+vn -0.0230 0.0106 -0.9997
+vn -0.0046 0.1049 -0.9945
+vn -0.0310 0.0828 -0.9961
+vn -0.1098 0.0395 -0.9932
+vn -0.0793 -0.0213 -0.9966
+vn -0.0273 -0.0509 -0.9983
+vn -0.0046 0.0493 -0.9988
+vn 0.1464 -0.0752 -0.9864
+vn -0.0768 0.0308 -0.9966
+vn -0.1181 0.0480 -0.9918
+vn -0.0008 -0.0288 -0.9996
+vn -0.0007 -0.0288 -0.9996
+vn 0.0054 -0.0293 -0.9996
+vn -0.0336 -0.0935 -0.9951
+vn -0.0335 -0.0935 -0.9951
+vn 0.1580 -0.0907 -0.9833
+vn 0.1581 -0.0909 -0.9832
+vn 0.1581 -0.0908 -0.9832
+vn 0.1323 -0.0858 -0.9875
+vn 0.0256 -0.0030 -0.9997
+vn -0.0303 -0.1618 -0.9864
+vn -0.0769 0.0259 -0.9967
+vn -0.1606 -0.0509 -0.9857
+vn -0.1606 -0.0510 -0.9857
+vn -0.0360 0.1035 -0.9940
+vn 0.0062 0.0331 -0.9994
+vn -0.0498 0.0794 -0.9956
+vn 0.0686 0.1322 -0.9888
+vn 0.1265 -0.0093 -0.9919
+vn -0.0313 0.0600 -0.9977
+vn 0.0063 0.1466 -0.9892
+vn -0.0466 -0.1262 -0.9909
+vn -0.0002 0.0124 -0.9999
+vn 0.0012 0.0129 -0.9999
+vn 0.0818 0.1097 -0.9906
+vn 0.0111 0.1729 -0.9849
+vn -0.1253 0.2045 -0.9708
+vn -0.0249 0.2691 -0.9628
+vn -0.0249 -0.0618 -0.9978
+vn 0.0583 -0.0413 -0.9974
+vn 0.0123 0.0137 -0.9998
+vn 0.0800 -0.0771 -0.9938
+vn -0.0416 0.0750 -0.9963
+vn -0.0030 -0.1717 -0.9851
+vn 0.0634 -0.1787 -0.9819
+vn -0.0257 -0.0982 -0.9948
+vn -0.3312 -0.1715 -0.9278
+vn -0.0033 0.0624 -0.9980
+vn 0.0234 0.0002 -0.9997
+vn 0.0234 0.0003 -0.9997
+vn 0.1521 0.1186 -0.9812
+vn -0.0337 -0.0789 -0.9963
+vn -0.0005 0.0178 -0.9998
+vn -0.1466 0.2299 -0.9621
+vn 0.0990 0.0433 -0.9941
+vn -0.0286 -0.0807 -0.9963
+vn -0.0321 0.0773 -0.9965
+vn -0.0585 0.0711 -0.9957
+vn -0.0262 0.0496 -0.9984
+vn 0.0234 -0.0147 -0.9996
+vn 0.1515 -0.1489 -0.9772
+vn -0.0615 0.1796 -0.9818
+vn -0.0145 0.0350 -0.9993
+vn 0.0384 0.0073 -0.9992
+vn 0.0685 -0.0193 -0.9975
+vn 0.0407 -0.0583 -0.9975
+vn 0.1422 -0.0752 -0.9870
+vn -0.0031 0.1069 -0.9943
+vn -0.0319 0.1211 -0.9921
+vn -0.0554 -0.0104 -0.9984
+vn 0.0792 -0.0390 -0.9961
+vn -0.0479 0.1178 -0.9919
+vn 0.0171 0.0764 -0.9969
+vn -0.0480 0.0979 -0.9940
+vn -0.1039 0.0069 -0.9946
+vn 0.0221 0.1246 -0.9920
+vn 0.0377 0.1229 -0.9917
+vn -0.0752 -0.1436 -0.9868
+vn -0.1100 0.1345 -0.9848
+vn -0.0559 0.1068 -0.9927
+vn -0.0325 -0.0708 -0.9970
+vn 0.0753 -0.1434 -0.9868
+vn 0.0016 -0.1619 -0.9868
+vn -0.2069 -0.0560 -0.9768
+vn -0.1062 0.0091 -0.9943
+vn -0.0506 0.1086 -0.9928
+vn 0.0541 0.1057 -0.9929
+vn -0.0230 0.0965 -0.9951
+vn 0.0033 0.0513 -0.9987
+vn 0.1455 0.0249 -0.9891
+vn -0.0272 0.0806 -0.9964
+vn -0.0829 -0.0155 -0.9964
+vn 0.0778 0.0933 -0.9926
+vn 0.0013 -0.0070 -1.0000
+vn 0.1914 -0.0476 -0.9804
+vn 0.0377 0.0104 -0.9992
+vn 0.0455 0.1224 -0.9914
+vn 0.0062 0.0106 -0.9999
+vn -0.1312 0.1204 -0.9840
+vn -0.2615 0.1613 -0.9516
+vn -0.0309 -0.0346 -0.9989
+vn -0.0309 -0.0345 -0.9989
+vn -0.2640 -0.0902 -0.9603
+vn 0.0751 -0.0429 -0.9963
+vn -0.1110 0.2352 -0.9656
+vn -0.0869 -0.1624 -0.9829
+vn -0.0818 -0.0093 -0.9966
+vn -0.0349 0.1822 -0.9826
+vn 0.0083 0.0390 -0.9992
+vn -0.0715 0.0517 -0.9961
+vn 0.0028 0.1287 -0.9917
+vn 0.0246 -0.0789 -0.9966
+vn -0.0011 -0.0968 -0.9953
+vn -0.0184 -0.1595 -0.9870
+vn -0.0197 -0.0139 -0.9997
+vn 0.1221 -0.0940 -0.9881
+vn -0.0744 -0.0454 -0.9962
+vn 0.0262 0.0049 -0.9996
+vn -0.0621 0.2952 -0.9534
+vn 0.0686 -0.1454 -0.9870
+vn 0.2321 0.1458 -0.9617
+vn 0.1954 -0.0890 -0.9767
+vn 0.0577 0.0297 -0.9979
+vn -0.0564 -0.1896 -0.9802
+vn -0.1525 0.0344 -0.9877
+vn -0.1431 0.0448 -0.9887
+vn 0.1166 -0.2131 -0.9701
+vn 0.0971 -0.1353 -0.9860
+vn 0.0367 0.1083 -0.9934
+vn -0.0392 -0.1773 0.9834
+vn -0.0792 0.3173 0.9450
+vn -0.2907 -0.5635 0.7733
+vn 0.4624 0.1287 0.8773
+vn -0.1018 0.2331 0.9671
+vn -0.5803 -0.2311 0.7809
+vn 0.3793 0.6179 0.6887
+vn 0.2943 0.6045 0.7402
+vn -0.6560 -0.3674 0.6593
+vn -0.5998 0.2712 0.7528
+vn -0.2167 -0.6131 0.7597
+vn 0.6971 -0.1561 0.6998
+vn -0.5257 -0.3976 0.7521
+vn -0.4425 -0.4912 0.7503
+vn -0.4119 0.4353 0.8005
+vn -0.4152 0.4345 0.7993
+vn -0.4140 0.4348 0.7998
+vn -0.4151 0.4345 0.7993
+vn -0.4138 0.4348 0.7998
+vn -0.4130 -0.2631 0.8719
+vn 0.6224 -0.4370 0.6494
+vn 0.2047 0.5464 0.8121
+vn 0.2047 0.5460 0.8124
+vn 0.2047 0.5442 0.8136
+vn -0.1701 0.1524 0.9736
+vn -0.4197 0.4333 0.7976
+vn 0.7251 -0.0716 0.6850
+vn 0.4647 -0.2121 0.8597
+vn 0.3872 -0.6698 0.6335
+vn 0.3872 -0.6699 0.6335
+vn 0.2532 0.6861 0.6820
+vn -0.1967 0.7459 0.6363
+vn -0.2615 0.7182 0.6449
+vn -0.4907 0.3431 0.8010
+vn -0.5870 -0.0393 0.8086
+vn -0.6553 -0.1064 0.7479
+vn 0.3492 -0.0903 0.9327
+vn 0.8542 -0.0570 0.5168
+vn -0.4835 0.7078 0.5150
+vn 0.8298 0.2471 0.5003
+vn -0.1124 -0.6603 0.7425
+vn 0.4692 -0.6971 0.5421
+vn -0.1912 0.6663 0.7208
+vn -0.4722 0.4629 0.7502
+vn 0.3471 -0.4157 0.8407
+vn 0.3471 -0.4156 0.8407
+vn -0.5137 -0.1312 0.8479
+vn -0.1040 0.8094 0.5779
+vn 0.0965 0.7642 0.6377
+vn -0.4165 0.6352 0.6504
+vn -0.8755 -0.1653 0.4541
+vn 0.6097 -0.2585 0.7493
+vn 0.5417 0.1334 0.8299
+vn -0.3057 -0.3388 0.8898
+vn -0.6312 0.1795 0.7546
+vn -0.6312 0.1795 0.7545
+vn -0.4073 0.5221 0.7494
+vn -0.5339 0.3936 0.7484
+vn -0.6845 -0.2130 0.6972
+vn 0.7997 -0.0216 0.6000
+vn -0.2200 0.2304 0.9479
+vn 0.5446 -0.0532 0.8370
+vn 0.5446 -0.0535 0.8370
+vn -0.0423 0.0252 0.9988
+vn -0.0049 -0.4971 0.8677
+vn -0.0037 -0.4987 0.8668
+vn -0.0038 -0.4986 0.8668
+vn 0.3414 0.5230 0.7810
+vn -0.4144 -0.3826 0.8258
+vn -0.3404 0.2272 0.9124
+vn 0.1437 -0.7037 0.6958
+vn -0.0541 -0.8609 0.5058
+vn 0.2064 0.0795 0.9752
+vn 0.0979 0.1982 0.9753
+vn -0.1937 -0.4609 0.8661
+vn -0.2243 -0.4174 0.8806
+vn -0.0315 -0.1129 0.9931
+vn 0.0997 0.6713 0.7344
+vn -0.7961 -0.2908 0.5307
+vn 0.5906 -0.4459 0.6726
+vn 0.5860 -0.7910 0.1759
+vn 0.0719 -0.0959 0.9928
+vn -0.4709 -0.0098 0.8821
+vn -0.1685 -0.7956 0.5819
+vn 0.5628 0.4117 0.7168
+vn 0.1537 0.4545 0.8774
+vn -0.4605 -0.5355 0.7079
+vn -0.4014 -0.6515 0.6438
+vn 0.6319 0.2361 0.7382
+vn 0.2411 -0.2432 0.9395
+vn 0.2539 0.5446 0.7994
+vn 0.2539 0.5445 0.7994
+vn -0.5992 0.4930 0.6308
+vn -0.2512 -0.8164 0.5200
+vn -0.3613 -0.4942 0.7907
+vn 0.5084 -0.0036 0.8611
+vn -0.3175 -0.5826 0.7482
+vn -0.4862 -0.7109 0.5082
+vn -0.4732 -0.3292 0.8171
+vn -0.2135 0.2711 0.9386
+vn -0.1543 0.2997 0.9415
+vn -0.3291 0.3272 0.8858
+vn -0.4198 0.2042 0.8843
+vn 0.4848 -0.3480 0.8024
+vn 0.4474 0.2023 0.8711
+vn -0.2121 -0.7107 0.6708
+vn 0.0555 -0.0702 0.9960
+vn -0.4930 0.3951 0.7752
+vn 0.7621 0.1896 0.6190
+vn -0.2825 0.2076 0.9365
+vn -0.5382 0.0879 0.8382
+vn 0.1857 -0.6087 0.7714
+vn 0.5879 0.2112 0.7809
+vn 0.8722 -0.1438 0.4675
+vn -0.6891 -0.2079 0.6943
+vn -0.5854 0.2568 0.7691
+vn -0.5854 0.2567 0.7691
+vn -0.4323 -0.1437 0.8902
+vn 0.2337 -0.7910 0.5654
+vn 0.8357 -0.2189 0.5036
+vn -0.1204 0.7076 0.6963
+vn -0.7971 0.4321 0.4218
+vn -0.2063 -0.6766 0.7069
+vn 0.5541 -0.0718 0.8293
+vn -0.1306 -0.3033 0.9439
+vn 0.0197 0.3687 0.9293
+vn 0.0197 0.3687 0.9294
+vn 0.5364 0.2552 0.8044
+vn -0.0498 -0.5042 0.8622
+vn -0.4797 -0.4033 0.7792
+vn 0.3815 -0.3980 0.8343
+vn -0.4054 0.4247 0.8095
+vn -0.3993 0.4283 0.8106
+vn -0.4269 0.5595 0.7104
+vn -0.2425 -0.5094 0.8257
+vn 0.1788 0.8011 0.5712
+vn -0.4002 -0.5886 0.7024
+vn 0.0262 -0.4391 0.8981
+vn 0.0262 0.4134 0.9102
+vn 0.7226 -0.3452 0.5990
+vn 0.1522 0.4810 0.8634
+vn -0.6844 0.2788 0.6737
+vn -0.7435 0.1909 0.6409
+vn -0.8104 -0.2423 0.5334
+vn 0.3835 -0.7763 0.5003
+vn 0.0324 0.3332 0.9423
+vn -0.7719 -0.0019 0.6357
+vn -0.2171 0.0928 0.9717
+vn -0.3738 -0.6485 0.6631
+vn 0.3697 0.0813 0.9256
+vn 0.1630 -0.1967 0.9668
+vn 0.3605 0.6091 0.7064
+vn 0.1476 0.5373 0.8304
+vn 0.0011 -0.4363 0.8998
+vn -0.0627 -0.5332 0.8436
+vn -0.8152 0.1708 0.5534
+vn -0.8250 -0.2541 0.5049
+vn 0.6767 -0.2625 0.6879
+vn 0.5260 -0.5492 0.6494
+vn 0.0763 -0.2435 0.9669
+vn -0.1157 -0.4288 0.8960
+vn 0.1912 -0.6178 0.7628
+vn 0.3741 0.5142 0.7718
+vn 0.3741 0.5141 0.7718
+vn -0.6680 -0.0843 0.7393
+vn 0.6675 -0.2206 0.7111
+vn 0.1905 -0.1748 0.9660
+vn -0.1596 -0.0812 0.9838
+vn -0.0597 -0.5584 0.8274
+vn -0.5111 -0.1391 0.8482
+vn 0.5180 0.7122 0.4738
+vn -0.6077 0.4111 0.6795
+vn 0.7686 0.3834 0.5121
+vn 0.2284 -0.6740 0.7025
+vn 0.5736 -0.4988 0.6497
+vn 0.8781 -0.0292 0.4776
+vn -0.1842 -0.1119 0.9765
+vn 0.0729 0.4059 0.9110
+vn -0.4764 -0.1533 0.8658
+vn 0.0919 0.2848 0.9542
+vn 0.5210 -0.6849 0.5094
+vn -0.0566 0.2283 0.9719
+vn 0.6440 -0.0448 0.7637
+vn -0.3450 0.2287 0.9103
+vn -0.4849 0.1460 0.8623
+vn -0.6230 -0.0316 0.7816
+vn -0.3508 -0.6838 0.6398
+vn -0.1378 -0.2942 0.9458
+vn -0.4749 0.3188 0.8202
+vn 0.1535 0.6393 0.7535
+vn -0.3843 -0.6754 0.6295
+vn -0.5135 -0.5027 0.6954
+vn 0.5158 -0.4448 0.7322
+vn -0.2667 -0.5588 0.7853
+vn 0.4028 0.7353 0.5450
+vn -0.4970 0.6360 0.5903
+vn -0.7129 0.3437 0.6113
+vn -0.8402 -0.3929 0.3738
+vn -0.7064 -0.0348 0.7069
+vn -0.7060 -0.0363 0.7072
+vn -0.7059 -0.0368 0.7073
+vn -0.7077 -0.0290 0.7059
+vn -0.7082 -0.0267 0.7055
+vn 0.0023 -0.6980 0.7161
+vn -0.4737 -0.5686 0.6726
+vn 0.5635 0.1424 0.8138
+vn 0.5634 0.1423 0.8138
+vn 0.2395 -0.2043 0.9491
+vn -0.2370 -0.8609 0.4501
+vn -0.3738 -0.8510 0.3689
+vn 0.7988 0.0273 0.6010
+vn -0.2596 -0.4333 0.8630
+vn -0.1134 -0.6696 0.7340
+vn -0.1748 0.3753 0.9103
+vn -0.6518 0.0568 0.7563
+vn 0.4524 0.1603 0.8773
+vn 0.2063 0.5831 0.7858
+vn 0.1068 0.7590 0.6423
+vn 0.1423 0.2107 0.9671
+vn 0.1424 0.2107 0.9671
+vn -0.2750 -0.5719 0.7728
+vn -0.5465 0.3505 0.7606
+vn 0.3207 -0.7668 0.5560
+vn 0.3829 -0.7537 0.5342
+vn 0.8065 -0.2362 0.5420
+vn 0.0000 0.7580 0.6522
+vn -0.7001 0.4647 0.5421
+vn -0.5254 0.7009 0.4825
+vn -0.6707 -0.3587 0.6492
+vn -0.0941 -0.8437 0.5285
+vn 0.3382 0.4508 0.8260
+vn 0.3382 0.4509 0.8260
+vn 0.3382 0.4508 0.8261
+vn -0.6699 -0.4576 0.5846
+vn 0.2414 0.4190 0.8753
+vn 0.6185 0.0133 0.7856
+vn -0.3589 -0.2593 0.8966
+vn -0.6206 0.3048 0.7224
+vn 0.0619 0.8440 0.5328
+vn 0.3668 -0.2279 0.9020
+vn 0.1384 -0.1408 0.9803
+vn 0.2157 -0.7177 0.6621
+vn 0.2398 0.5505 0.7997
+vn -0.0497 0.0606 0.9969
+vn -0.0193 0.6376 0.7701
+vn 0.2552 -0.7013 0.6656
+vn 0.2552 -0.7012 0.6657
+vn -0.3223 0.0224 0.9464
+vn 0.4704 0.3764 0.7981
+vn 0.2047 0.5478 0.8112
+vn -0.0313 0.6985 0.7149
+vn -0.5785 0.2275 0.7833
+vn -0.5787 0.2277 0.7831
+vn 0.3010 0.1474 0.9422
+vn 0.3088 -0.3825 0.8708
+vn 0.3602 -0.0412 0.9320
+vn -0.3979 0.7713 0.4967
+vn -0.7598 -0.2301 0.6080
+vn 0.6682 0.5061 0.5453
+vn -0.1202 -0.8351 0.5369
+vn -0.0031 -0.4995 0.8663
+vn 0.6359 0.4593 0.6202
+vn -0.0650 -0.8056 0.5889
+vn 0.1086 0.1406 0.9841
+vn -0.5932 -0.0499 0.8035
+vn -0.3359 0.0653 0.9396
+vn -0.3106 -0.0840 0.9468
+vn 0.2460 0.5739 0.7811
+vn 0.4587 -0.3385 0.8216
+vn 0.1131 -0.3371 0.9346
+vn -0.3890 -0.1057 0.9152
+vn -0.5997 -0.0846 0.7957
+vn 0.0339 0.0052 0.9994
+vn 0.0485 -0.1568 0.9864
+vn -0.3472 -0.5288 0.7745
+vn -0.3472 -0.5287 0.7745
+vn -0.2458 -0.8284 0.5034
+vn -0.6327 0.5215 0.5725
+vn -0.7170 -0.2121 0.6641
+vn 0.5818 0.4215 0.6956
+vn 0.8216 -0.4390 0.3636
+vn 0.5309 -0.1469 0.8346
+vn 0.4126 0.1354 0.9008
+vn 0.3777 0.1596 0.9121
+vn 0.3717 -0.2064 0.9051
+vn -0.7488 0.0643 0.6597
+vn -0.7476 0.0521 0.6621
+vn -0.3572 -0.0981 0.9289
+vn 0.1527 0.1074 0.9824
+vn -0.2278 0.5606 0.7962
+vn -0.5081 0.6422 0.5739
+vn 0.5743 0.6032 0.5535
+vn 0.0761 -0.6941 0.7158
+vn 0.6826 -0.0579 0.7285
+vn 0.4432 0.0345 0.8958
+vn 0.4633 0.5948 0.6569
+vn 0.9387 -0.1397 0.3151
+vn 0.4530 0.3156 0.8338
+vn -0.1006 0.5252 0.8450
+vn 0.7326 0.2512 0.6326
+vn -0.1973 0.3786 0.9043
+vn 0.5166 0.2415 0.8215
+vn -0.3521 0.0990 0.9307
+vn 0.4373 -0.0842 0.8954
+vn 0.1302 -0.0537 0.9900
+vn -0.4291 -0.6213 0.6557
+vn -0.4797 -0.7062 0.5208
+vn -0.4797 -0.7061 0.5208
+vn 0.6904 0.0178 0.7232
+vn -0.3884 -0.1386 0.9110
+vn 0.4881 -0.0276 0.8723
+vn -0.0050 0.6399 0.7685
+vn 0.1316 0.6385 0.7583
+vn 0.4607 0.4801 0.7465
+vn -0.2215 0.6654 0.7128
+vn -0.0322 -0.8191 0.5727
+vn -0.5641 0.3928 0.7263
+vn -0.3149 0.2243 0.9223
+vn 0.3626 0.6119 0.7029
+vn -0.8552 0.3416 0.3898
+vn -0.1375 0.2820 0.9495
+vn 0.6993 -0.7045 0.1207
+vn 0.6331 -0.3804 0.6741
+vn -0.6473 -0.3636 0.6699
+vn -0.4765 0.5917 0.6503
+vn 0.7486 -0.2390 0.6185
+vn 0.0160 0.3290 0.9442
+vn -0.2386 -0.6969 0.6764
+vn -0.2385 -0.6969 0.6764
+vn -0.2254 -0.0996 0.9692
+vn 0.4393 0.5272 0.7274
+vn -0.5929 0.5017 0.6299
+vn 0.6602 0.0620 0.7485
+vn -0.2900 0.3022 0.9081
+vn 0.2860 0.0541 0.9567
+vn 0.7617 -0.0013 0.6480
+vn -0.5074 0.4444 0.7383
+vn -0.7089 -0.0238 0.7049
+vn -0.7089 -0.0252 0.7049
+vn -0.2231 0.1719 0.9595
+vn 0.7872 0.0530 0.6144
+vn -0.8075 0.2198 0.5474
+vn -0.2145 0.3171 0.9238
+vn 0.2287 -0.2015 0.9524
+vn -0.2905 -0.4944 0.8193
+vn -0.3793 -0.6388 0.6694
+vn -0.1966 0.5486 0.8126
+vn -0.0546 -0.1755 0.9830
+s off
+f 2034//2628 2035//2628 2036//2628
+f 2037//2629 2038//2629 2039//2629 2040//2629
+f 2041//2630 2038//2630 2037//2630 2042//2630 2043//2630 2044//2630
+f 2045//2631 2046//2631 2047//2631 2048//2631 2049//2631 2050//2631 2044//2631 2043//2631
+f 2049//2632 2048//2632 2051//2632
+f 2052//2633 2053//2633 2054//2633 2055//2633 2056//2633 2057//2633
+f 2058//2634 2059//2634 2053//2634 2052//2634
+f 2060//2635 2061//2635 2059//2635 2058//2635 2062//2635
+f 2063//2636 2060//2636 2062//2636 2064//2636 2065//2636
+f 2066//2637 2067//2637 2063//2637 2065//2637 2068//2637
+f 2069//2638 2055//2638 2054//2638 2066//2638 2068//2638
+f 2070//2639 2071//2639 2072//2639 2073//2639 2074//2639 2075//2639
+f 2076//2639 2077//2639 2078//2639
+f 2079//2640 2080//2640 2081//2640 2072//2640 2071//2640 2082//2640
+f 2083//2641 2084//2641 2079//2641 2082//2641 2085//2641
+f 2084//2642 2083//2642 2086//2642 2087//2642
+f 2088//2643 2087//2643 2086//2643 2089//2643
+f 2075//2644 2074//2644 2090//2644 2078//2644 2077//2644 2088//2644 2089//2644
+f 2091//2645 2092//2645 2093//2645 2094//2645 2095//2645
+f 2096//2646 2097//2646 2092//2646 2091//2646 2098//2646
+f 2099//2647 2100//2647 2097//2647 2096//2647 2101//2647
+f 2102//2648 2099//2648 2101//2648 2103//2648
+f 2104//2649 2105//2649 2106//2649 2107//2649 2102//2649 2103//2649
+f 2095//2650 2094//2650 2108//2650 2109//2650 2110//2650
+f 2111//2651 2112//2651 2113//2651 2114//2651
+f 2115//2652 2116//2652 2117//2652 2118//2652 2112//2652 2111//2652
+f 2119//2653 2120//2653 2116//2653 2115//2653 2121//2653
+f 2122//2654 2123//2654 2119//2654 2121//2654 2124//2654 2125//2654
+f 2126//2655 2127//2655 2128//2655 2125//2655 2124//2655 2129//2655
+f 2113//2656 2126//2656 2129//2656 2114//2656
+f 2130//2657 2131//2657 2132//2657 2133//2657
+f 2134//2658 2135//2658 2136//2658 2137//2658 2131//2658 2130//2658 2138//2658
+f 2139//2659 2140//2659 2141//2659 2135//2659 2134//2659
+f 2140//2660 2139//2660 2142//2660 2143//2660 2144//2660
+f 2145//2661 2144//2661 2143//2661 2146//2661 2147//2661
+f 2133//2662 2132//2662 2145//2662 2147//2662 2148//2662
+f 2149//2663 2150//2663 2151//2663 2152//2663 2153//2663 2154//2663
+f 2155//2664 2149//2664 2154//2664 2156//2664
+f 2157//2665 2158//2665 2155//2665 2156//2665
+f 2159//2666 2160//2666 2158//2666 2157//2666
+f 2153//2667 2152//2667 2161//2667 2162//2667 2163//2667
+f 2164//2668 2165//2668 2166//2668 2167//2668 2168//2668
+f 2169//2669 2170//2669 2164//2669 2168//2669 2171//2669
+f 2172//2670 2173//2670 2174//2670 2170//2670 2169//2670 2175//2670
+f 2176//2671 2177//2671 2172//2671 2175//2671
+f 2178//2672 2179//2672 2180//2672 2181//2672 2177//2672 2176//2672 2182//2672
+f 2183//2673 2184//2673 2185//2673 2179//2673 2178//2673 2167//2673 2166//2673
+f 2186//2628 2187//2628 2188//2628 2189//2628
+f 2190//2674 2186//2674 2189//2674 2191//2674
+f 2192//2629 2193//2629 2194//2629 2190//2629 2191//2629
+f 2195//2630 2193//2630 2192//2630 2196//2630
+f 2197//2631 2198//2631 2199//2631 2195//2631 2196//2631
+f 2187//2632 2198//2632 2197//2632 2188//2632
+f 2200//2633 2201//2633 2202//2633 2203//2633 2204//2633
+f 2205//2634 2206//2634 2207//2634 2201//2634 2200//2634
+f 2208//2635 2209//2635 2210//2635 2206//2635 2205//2635 2211//2635 2212//2635
+f 2213//2636 2214//2636 2215//2636 2212//2636 2211//2636 2216//2636
+f 2217//2637 2218//2637 2213//2637 2216//2637 2219//2637
+f 2220//2638 2203//2638 2202//2638 2221//2638 2222//2638 2217//2638 2219//2638
+f 2223//2639 2224//2639 2225//2639 2226//2639 2227//2639 2228//2639
+f 2229//2640 2230//2640 2231//2640 2224//2640 2223//2640 2232//2640 2233//2640 2234//2640 2235//2640
+f 2236//2641 2237//2641 2234//2641 2233//2641
+f 2238//2642 2239//2642 2237//2642 2236//2642 2240//2642
+f 2241//2643 2238//2643 2240//2643 2242//2643 2243//2643
+f 2228//2644 2227//2644 2244//2644 2245//2644 2241//2644 2243//2644
+f 2246//2645 2247//2645 2248//2645 2249//2645
+f 2250//2647 2251//2647 2252//2647 2253//2647 2254//2647
+f 2255//2648 2256//2648 2251//2648 2250//2648 2257//2648
+f 2258//2649 2259//2649 2255//2649 2257//2649 2260//2649
+f 2249//2650 2248//2650 2261//2650 2259//2650 2258//2650
+f 2262//2651 2263//2651 2264//2651 2265//2651 2266//2651
+f 2267//2652 2268//2652 2263//2652 2262//2652
+f 2269//2653 2268//2653 2267//2653 2270//2653
+f 2271//2654 2269//2654 2270//2654 2272//2654
+f 2273//2655 2271//2655 2272//2655 2274//2655
+f 2275//2656 2265//2656 2264//2656 2273//2656 2274//2656
+f 2276//2657 2222//2657 2221//2657 2277//2657 2278//2657 2279//2657
+f 2280//2658 2218//2658 2217//2658 2222//2658 2276//2658 2281//2658
+f 2282//2659 2214//2659 2213//2659 2218//2659 2280//2659 2283//2659
+f 2284//2660 2285//2660 2286//2660 2282//2660 2283//2660
+f 2287//2661 2286//2661 2285//2661 2288//2661
+f 2278//2662 2287//2662 2288//2662 2279//2662
+f 2289//2663 2290//2663 2291//2663 2292//2663 2293//2663
+f 2294//2664 2289//2664 2293//2664 2295//2664
+f 2296//2665 2297//2665 2298//2665 2299//2665 2294//2665 2295//2665
+f 2300//2666 2301//2666 2297//2666 2296//2666
+f 2292//2675 2291//2675 2302//2675
+f 2303//2668 2304//2668 2305//2668 2306//2668 2307//2668 2308//2668
+f 2309//2669 2310//2669 2311//2669 2303//2669 2308//2669 2312//2669
+f 2313//2670 2310//2670 2309//2670 2314//2670 2315//2670
+f 2316//2671 2317//2671 2313//2671 2315//2671
+f 2318//2672 2319//2672 2320//2672 2321//2672 2317//2672 2316//2672 2322//2672
+f 2305//2673 2319//2673 2318//2673 2306//2673
+f 2323//2628 2324//2628 2325//2628 2326//2628 2327//2628
+f 2328//2674 2323//2674 2327//2674 2329//2674
+f 2330//2629 2331//2629 2332//2629 2328//2629 2329//2629 2333//2629
+f 2334//2630 2335//2630 2331//2630 2330//2630
+f 2336//2631 2337//2631 2335//2631 2334//2631
+f 2324//2632 2338//2632 2337//2632 2336//2632 2325//2632
+f 2339//2633 2340//2633 2341//2633 2342//2633 2343//2633
+f 2344//2634 2345//2634 2340//2634 2339//2634
+f 2346//2635 2345//2635 2344//2635 2347//2635 2348//2635
+f 2349//2636 2346//2636 2348//2636 2350//2636
+f 2351//2637 2349//2637 2350//2637 2352//2637
+f 2342//2638 2341//2638 2351//2638 2352//2638
+f 2353//2639 2354//2639 2355//2639 2356//2639 2357//2639
+f 2358//2640 2359//2640 2360//2640 2353//2640 2357//2640
+f 2361//2641 2362//2641 2363//2641 2364//2641 2360//2641 2359//2641
+f 2365//2642 2366//2642 2367//2642 2362//2642 2361//2642
+f 2368//2643 2369//2643 2366//2643 2365//2643
+f 2370//2644 2356//2644 2355//2644 2369//2644 2368//2644
+f 2371//2645 2372//2645 2373//2645 2374//2645 2375//2645 2376//2645
+f 2377//2646 2378//2646 2379//2646 2380//2646 2372//2646 2371//2646
+f 2381//2647 2382//2647 2378//2647 2377//2647 2383//2647
+f 2384//2648 2381//2648 2383//2648 2385//2648 2386//2648
+f 2387//2649 2388//2649 2384//2649 2386//2649 2389//2649
+f 2375//2650 2374//2650 2387//2650 2389//2650
+f 2390//2651 2391//2651 2392//2651 2393//2651 2394//2651
+f 2392//2652 2395//2652 2396//2652 2397//2652 2398//2652 2399//2652 2393//2652
+f 2400//2654 2401//2654 2402//2654 2403//2654 2404//2654 2405//2654 2406//2654 2407//2654
+f 2408//2655 2409//2655 2403//2655 2402//2655 2410//2655 2411//2655
+f 2412//2656 2390//2656 2394//2656 2408//2656 2411//2656 2413//2656
+f 2414//2657 2415//2657 2416//2657 2417//2657 2418//2657
+f 2419//2658 2415//2658 2414//2658 2420//2658
+f 2421//2659 2422//2659 2423//2659 2424//2659 2425//2659
+f 2426//2660 2427//2660 2425//2660 2424//2660
+f 2428//2661 2427//2661 2426//2661 2429//2661
+f 2418//2662 2417//2662 2428//2662 2429//2662
+f 2430//2668 2431//2668 2432//2668 2433//2668
+f 2434//2669 2435//2669 2430//2669 2433//2669 2436//2669
+f 2437//2670 2435//2670 2434//2670 2438//2670
+f 2439//2671 2440//2671 2437//2671 2438//2671
+f 2441//2672 2440//2672 2439//2672 2442//2672 2443//2672
+f 2431//2673 2441//2673 2443//2673 2432//2673
+f 2444//2628 2445//2628 2446//2628 2447//2628 2448//2628 2449//2628
+f 2450//2674 2451//2674 2452//2674 2453//2674 2454//2674 2445//2674 2444//2674 2455//2674
+f 2453//2629 2452//2629 2456//2629 2457//2629 2458//2629 2459//2629
+f 2460//2630 2458//2630 2457//2630 2461//2630 2462//2630
+f 2463//2631 2464//2631 2462//2631 2461//2631 2465//2631 2466//2631 2467//2631
+f 2463//2632 2467//2632 2468//2632
+f 2469//2633 2470//2633 2471//2633 2472//2633
+f 2473//2634 2474//2634 2470//2634 2469//2634
+f 2474//2635 2473//2635 2475//2635 2476//2635 2477//2635
+f 2478//2636 2477//2636 2476//2636 2479//2636
+f 2480//2637 2478//2637 2479//2637 2481//2637 2482//2637
+f 2483//2638 2472//2638 2471//2638 2480//2638 2482//2638 2484//2638
+f 2485//2639 2486//2639 2487//2639 2488//2639 2489//2639 2490//2639 2491//2639
+f 2492//2640 2493//2640 2494//2640 2491//2640 2490//2640 2495//2640
+f 2496//2676 2497//2676 2498//2676 2499//2676 2500//2676 2501//2676 2494//2676 2493//2676
+f 2502//2642 2503//2642 2497//2642 2496//2642 2504//2642
+f 2500//2642 2499//2642 2505//2642 2506//2642 2507//2642
+f 2508//2643 2502//2643 2504//2643 2509//2643
+f 2510//2643 2507//2643 2506//2643 2511//2643 2512//2643
+f 2486//2644 2510//2644 2512//2644 2513//2644 2487//2644
+f 2514//2677 2515//2677 2516//2677 2517//2677
+f 2518//2646 2515//2646 2514//2646 2519//2646
+f 2520//2647 2518//2647 2519//2647 2521//2647
+f 2252//2648 2520//2648 2521//2648 2253//2648
+f 2517//2650 2516//2650 2247//2650 2246//2650
+f 2522//2651 2523//2651 2524//2651 2525//2651
+f 2526//2652 2527//2652 2523//2652 2522//2652 2528//2652
+f 2529//2653 2530//2653 2527//2653 2526//2653 2531//2653
+f 2532//2654 2533//2654 2529//2654 2531//2654 2534//2654 2535//2654
+f 2536//2655 2532//2655 2535//2655 2537//2655
+f 2524//2656 2536//2656 2537//2656 2525//2656
+f 2538//2663 2539//2663 2540//2663 2541//2663 2542//2663
+f 2543//2664 2544//2664 2539//2664 2538//2664 2545//2664
+f 2546//2665 2543//2665 2545//2665 2547//2665
+f 2548//2666 2549//2666 2550//2666 2546//2666 2547//2666 2551//2666
+f 2552//2678 2553//2678 2554//2678 2555//2678 2548//2678 2551//2678
+f 2542//2667 2541//2667 2556//2667 2553//2667 2552//2667
+f 2557//2668 2558//2668 2559//2668 2560//2668
+f 2561//2669 2562//2669 2563//2669 2564//2669 2565//2669 2566//2669 2557//2669 2560//2669
+f 2567//2670 2564//2670 2563//2670 2568//2670 2569//2670
+f 2570//2671 2571//2671 2567//2671 2569//2671 2572//2671
+f 2573//2672 2570//2672 2572//2672 2574//2672 2575//2672
+f 2558//2673 2576//2673 2573//2673 2575//2673 2559//2673
+f 2577//2628 2578//2628 2579//2628 2580//2628 2581//2628 2582//2628
+f 2583//2674 2577//2674 2582//2674 2584//2674 2585//2674 2586//2674 2587//2674
+f 2588//2629 2589//2629 2583//2629 2587//2629 2590//2629
+f 2591//2630 2588//2630 2590//2630 2592//2630 2593//2630
+f 2594//2631 2595//2631 2591//2631 2593//2631 2596//2631 2597//2631
+f 2578//2632 2594//2632 2597//2632 2598//2632 2579//2632
+f 2599//2633 2600//2633 2601//2633 2602//2633 2603//2633
+f 2604//2634 2605//2634 2600//2634 2599//2634
+f 2606//2635 2607//2635 2605//2635 2604//2635 2608//2635
+f 2609//2636 2606//2636 2608//2636 2610//2636
+f 2611//2637 2609//2637 2610//2637 2612//2637
+f 2602//2638 2601//2638 2613//2638 2611//2638 2612//2638 2614//2638
+f 2615//2639 2123//2639 2122//2639 2616//2639 2617//2639 2618//2639 2619//2639
+f 2620//2640 2621//2640 2622//2640 2623//2640 2619//2640 2618//2640 2624//2640
+f 2625//2641 2626//2641 2621//2641 2620//2641
+f 2627//2642 2628//2642 2626//2642 2625//2642
+f 2629//2643 2628//2643 2627//2643 2630//2643
+f 2616//2644 2122//2644 2125//2644 2128//2644 2629//2644 2630//2644
+f 2631//2645 2632//2645 2633//2645 2634//2645 2635//2645
+f 2636//2646 2637//2646 2638//2646 2632//2646 2631//2646 2639//2646
+f 2640//2647 2637//2647 2636//2647 2641//2647 2642//2647
+f 2643//2648 2640//2648 2642//2648 2644//2648
+f 2645//2649 2646//2649 2643//2649 2644//2649 2647//2649
+f 2648//2679 2646//2679 2645//2679 2649//2679
+f 2650//2651 2651//2651 2652//2651 2653//2651 2654//2651
+f 2655//2652 2656//2652 2651//2652 2650//2652
+f 2657//2653 2656//2653 2655//2653 2658//2653
+f 2659//2654 2660//2654 2661//2654 2657//2654 2658//2654
+f 2662//2655 2663//2655 2660//2655 2659//2655
+f 2654//2656 2653//2656 2663//2656 2662//2656
+f 2664//2657 2665//2657 2666//2657 2667//2657 2668//2657
+f 2669//2658 2670//2658 2665//2658 2664//2658 2671//2658
+f 2672//2659 2673//2659 2674//2659 2669//2659 2671//2659 2675//2659
+f 2676//2660 2677//2660 2673//2660 2672//2660
+f 2678//2661 2679//2661 2677//2661 2676//2661 2680//2661
+f 2668//2662 2667//2662 2681//2662 2678//2662 2680//2662 2682//2662
+f 2683//2668 2684//2668 2685//2668 2686//2668
+f 2687//2669 2688//2669 2689//2669 2683//2669 2686//2669
+f 2690//2670 2691//2670 2692//2670 2688//2670 2687//2670
+f 2693//2671 2694//2671 2691//2671 2690//2671
+f 2695//2672 2696//2672 2694//2672 2693//2672
+f 2697//2628 2698//2628 2699//2628
+f 2231//2629 2230//2629 2700//2629 2701//2629
+f 2225//2630 2224//2630 2231//2630 2701//2630 2702//2630
+f 2703//2631 2704//2631 2226//2631 2225//2631 2702//2631
+f 2703//2632 2705//2632 2704//2632
+f 2706//2633 2707//2633 2708//2633 2709//2633 2710//2633 2711//2633
+f 2712//2634 2707//2634 2706//2634 2713//2634 2714//2634
+f 2710//2680 2709//2680 2715//2680 2716//2680
+f 2717//2639 2718//2639 2719//2639 2720//2639 2721//2639
+f 2722//2640 2723//2640 2724//2640 2718//2640 2717//2640
+f 2725//2641 2726//2641 2723//2641 2722//2641
+f 2727//2642 2728//2642 2729//2642 2730//2642 2731//2642 2726//2642 2725//2642 2732//2642
+f 2727//2681 2732//2681 2733//2681
+f 2734//2643 2731//2643 2730//2643 2735//2643 2736//2643
+f 2737//2644 2734//2644 2736//2644 2738//2644 2721//2644 2720//2644 2739//2644
+f 2740//2645 2741//2645 2742//2645 2743//2645 2744//2645
+f 2745//2646 2746//2646 2747//2646 2741//2646 2740//2646
+f 2748//2647 2749//2647 2746//2647 2745//2647 2750//2647
+f 2751//2648 2748//2648 2750//2648 2752//2648 2753//2648
+f 2754//2649 2755//2649 2756//2649 2757//2649 2751//2649 2753//2649
+f 2743//2650 2742//2650 2755//2650 2754//2650
+f 2758//2651 2759//2651 2760//2651 2761//2651 2762//2651
+f 2291//2652 2290//2652 2759//2652 2758//2652 2302//2652
+f 2763//2654 2764//2654 2765//2654 2766//2654
+f 2767//2655 2768//2655 2769//2655 2764//2655 2763//2655
+f 2761//2656 2768//2656 2767//2656 2762//2656
+f 2770//2657 2771//2657 2772//2657 2773//2657 2774//2657 2775//2657 2776//2657 2777//2657
+f 2778//2658 2779//2658 2780//2658 2771//2658 2770//2658 2781//2658
+f 2775//2658 2774//2658 2782//2658 2783//2658 2784//2658
+f 2785//2659 2786//2659 2787//2659 2779//2659 2778//2659
+f 2788//2659 2784//2659 2783//2659 2789//2659 2790//2659 2791//2659
+f 2792//2660 2793//2660 2794//2660 2787//2660 2786//2660 2795//2660
+f 2791//2660 2790//2660 2796//2660
+f 2797//2661 2798//2661 2799//2661 2800//2661 2793//2661 2792//2661
+f 2776//2662 2801//2662 2802//2662 2799//2662 2798//2662 2777//2662
+f 2803//2663 2804//2663 2805//2663 2806//2663
+f 2807//2664 2808//2664 2803//2664 2806//2664 2809//2664 2810//2664 2811//2664
+f 2812//2682 2813//2682 2807//2682 2811//2682 2814//2682 2815//2682
+f 2816//2666 2817//2666 2818//2666 2819//2666 2812//2666 2815//2666
+f 2819//2678 2818//2678 2820//2678 2821//2678
+f 2822//2678 2823//2678 2824//2678
+f 2804//2675 2824//2675 2823//2675 2825//2675 2826//2675 2805//2675
+f 2827//2668 2828//2668 2829//2668 2830//2668 2831//2668 2832//2668 2833//2668 2834//2668
+f 2835//2669 2836//2669 2837//2669 2827//2669 2834//2669
+f 2838//2670 2839//2670 2840//2670 2836//2670 2835//2670
+f 2841//2671 2842//2671 2843//2671 2839//2671 2838//2671
+f 2844//2672 2845//2672 2846//2672 2847//2672 2842//2672 2841//2672 2848//2672
+f 2849//2673 2832//2673 2831//2673 2850//2673 2845//2673 2844//2673 2851//2673
+f 2736//2628 2735//2628 2852//2628 2853//2628 2854//2628 2855//2628 2738//2628
+f 2856//2674 2852//2674 2735//2674 2730//2674 2729//2674
+f 2729//2629 2728//2629 2857//2629 2858//2629 2856//2629
+f 2859//2630 2860//2630 2857//2630 2728//2630 2727//2630 2733//2630
+f 2861//2631 2862//2631 2860//2631 2859//2631
+f 2855//2632 2854//2632 2862//2632 2861//2632
+f 2863//2633 2864//2633 2865//2633 2866//2633 2867//2633
+f 2868//2634 2869//2634 2870//2634 2864//2634 2863//2634
+f 2871//2635 2872//2635 2873//2635 2874//2635 2875//2635 2876//2635 2869//2635 2868//2635
+f 2877//2636 2875//2636 2874//2636 2878//2636 2879//2636 2880//2636
+f 2881//2637 2882//2637 2883//2637 2884//2637
+f 2879//2637 2878//2637 2885//2637 2886//2637
+f 2887//2638 2886//2638 2885//2638 2888//2638 2889//2638 2890//2638 2882//2638 2881//2638 2867//2638 2866//2638
+f 2891//2639 2405//2639 2404//2639 2892//2639 2893//2639 2894//2639
+f 2895//2640 2896//2640 2897//2640 2894//2640 2893//2640 2898//2640 2899//2640
+f 2900//2641 2901//2641 2902//2641 2899//2641 2898//2641 2903//2641
+f 2904//2642 2905//2642 2906//2642 2900//2642 2903//2642
+f 2907//2643 2905//2643 2904//2643 2908//2643
+f 2892//2644 2404//2644 2403//2644 2409//2644 2907//2644 2908//2644
+f 2909//2645 2910//2645 2911//2645 2912//2645 2913//2645
+f 2914//2646 2915//2646 2916//2646 2910//2646 2909//2646
+f 2917//2647 2918//2647 2915//2647 2914//2647 2919//2647
+f 2920//2648 2921//2648 2922//2648 2917//2648 2919//2648 2923//2648
+f 2924//2649 2925//2649 2926//2649 2920//2649 2923//2649
+f 2927//2651 2928//2651 2929//2651 2930//2651 2931//2651
+f 2932//2652 2933//2652 2928//2652 2927//2652
+f 2934//2653 2935//2653 2936//2653 2933//2653 2932//2653 2937//2653
+f 2938//2654 2939//2654 2935//2654 2934//2654 2940//2654
+f 2941//2655 2939//2655 2938//2655 2942//2655
+f 2930//2656 2941//2656 2942//2656 2931//2656
+f 2943//2657 2944//2657 2945//2657 2946//2657 2947//2657 2948//2657
+f 2949//2658 2950//2658 2951//2658 2944//2658 2943//2658 2952//2658
+f 2953//2659 2954//2659 2955//2659 2950//2659 2949//2659 2956//2659 2957//2659
+f 2958//2660 2959//2660 2960//2660 2953//2660 2957//2660
+f 2961//2661 2959//2661 2958//2661 2962//2661 2963//2661
+f 2946//2662 2964//2662 2961//2662 2963//2662 2947//2662
+f 2965//2683 2966//2683 2967//2683
+f 2968//2663 2969//2663 2970//2663 2971//2663 2972//2663 2973//2663 2974//2663
+f 2109//2664 2975//2664 2965//2664 2967//2664 2110//2664
+f 2976//2664 2977//2664 2974//2664 2973//2664 2978//2664 2979//2664
+f 2980//2665 2976//2665 2979//2665 2981//2665 2105//2665 2104//2665 2982//2665
+f 2983//2666 2984//2666 2985//2666 2980//2666 2982//2666
+f 2986//2678 2987//2678 2988//2678 2989//2678 2984//2678 2983//2678 2990//2678
+f 2988//2675 2991//2675 2971//2675 2970//2675 2992//2675 2989//2675
+f 2993//2668 2994//2668 2995//2668 2996//2668 2997//2668 2998//2668
+f 2999//2669 3000//2669 2993//2669 2998//2669 3001//2669
+f 3002//2670 3003//2670 3000//2670 2999//2670 3004//2670
+f 3005//2671 3002//2671 3004//2671 3006//2671
+f 3007//2672 3008//2672 3009//2672 3010//2672 3005//2672 3006//2672 3011//2672 3012//2672
+f 2995//2673 3013//2673 3008//2673 3007//2673 2996//2673
+f 3014//2628 3015//2628 3016//2628 3017//2628 3018//2628
+f 3019//2674 3016//2674 3015//2674 3020//2674
+f 3021//2629 3022//2629 3019//2629 3020//2629 3023//2629
+f 3024//2630 3025//2630 3026//2630 3021//2630 3023//2630
+f 3027//2631 3028//2631 3029//2631 3025//2631 3024//2631 3030//2631 3031//2631
+f 3017//2632 3027//2632 3031//2632 3018//2632
+f 3032//2633 3033//2633 3034//2633 3035//2633 3036//2633
+f 3037//2634 3038//2634 3033//2634 3032//2634 3039//2634
+f 3039//2635 3040//2635 3037//2635
+f 3041//2636 3042//2636 3043//2636 3044//2636
+f 3045//2637 3046//2637 3047//2637 3042//2637 3041//2637 3048//2637
+f 3049//2638 3050//2638 3035//2638 3034//2638 3045//2638 3048//2638
+f 3051//2639 3052//2639 3053//2639 3054//2639
+f 3055//2640 3056//2640 3057//2640 3051//2640 3054//2640
+f 3056//2641 3055//2641 3058//2641 3059//2641
+f 3060//2684 3061//2684 3062//2684 3059//2684 3058//2684
+f 3063//2643 3064//2643 3061//2643 3060//2643
+f 3053//2644 3052//2644 3064//2644 3063//2644
+f 3065//2645 3066//2645 3067//2645 3068//2645 3069//2645 3070//2645
+f 3071//2646 3065//2646 3070//2646 3072//2646
+f 3073//2647 3074//2647 3071//2647 3072//2647 3075//2647
+f 3076//2648 3073//2648 3075//2648 3077//2648
+f 3078//2649 3079//2649 3080//2649 3081//2649 3076//2649 3077//2649 3082//2649
+f 3068//2650 3067//2650 3083//2650 3079//2650 3078//2650
+f 3084//2651 3085//2651 3086//2651 3087//2651
+f 3088//2652 3089//2652 3090//2652 3085//2652 3084//2652 3091//2652 3092//2652
+f 2035//2653 2034//2653 3088//2653 3092//2653
+f 2049//2654 2051//2654 3093//2654 3094//2654 3095//2654 2050//2654
+f 3096//2655 3097//2655 3094//2655 3093//2655 3098//2655 3099//2655
+f 3086//2656 3096//2656 3099//2656 3087//2656
+f 3100//2657 3101//2657 3102//2657 3103//2657 3104//2657
+f 3105//2659 3106//2659 3107//2659
+f 3108//2660 3109//2660 3110//2660 3106//2660 3105//2660
+f 3111//2661 3112//2661 3113//2661 3109//2661 3108//2661 3114//2661
+f 3102//2662 3101//2662 3115//2662 3112//2662 3111//2662
+f 3116//2663 3117//2663 3118//2663 3119//2663 3120//2663
+f 3121//2664 3116//2664 3120//2664 3122//2664 3123//2664
+f 3124//2665 3125//2665 3126//2665 3121//2665 3123//2665 3127//2665
+f 3128//2666 3129//2666 3125//2666 3124//2666
+f 3130//2678 3131//2678 3132//2678 3133//2678 3129//2678 3128//2678
+f 3118//2667 3134//2667 3131//2667 3130//2667 3119//2667
+f 3135//2668 3136//2668 3137//2668 3138//2668 3139//2668
+f 3140//2669 3141//2669 3142//2669 3135//2669 3139//2669 3143//2669
+f 3144//2670 3145//2670 3146//2670 3147//2670 3141//2670 3140//2670 3148//2670
+f 3149//2671 3150//2671 3145//2671 3144//2671 3151//2671
+f 3152//2672 3153//2672 3150//2672 3149//2672
+f 3137//2673 3136//2673 3154//2673 3153//2673 3152//2673 3155//2673
+f 3156//2628 3157//2628 3158//2628 3159//2628
+f 3160//2674 3156//2674 3159//2674 3161//2674
+f 3162//2629 3163//2629 3160//2629 3161//2629 3164//2629
+f 3165//2630 3166//2630 3167//2630 3162//2630 3164//2630
+f 3168//2631 3169//2631 3170//2631 3166//2631 3165//2631 3171//2631 3172//2631
+f 3157//2632 3168//2632 3172//2632 3173//2632 3158//2632
+f 3174//2633 3175//2633 3176//2633 3177//2633 3178//2633
+f 2635//2634 2634//2634 3175//2634 3174//2634 3179//2634
+f 3180//2637 3181//2637 2648//2637 2649//2637 3182//2637
+f 3178//2638 3177//2638 3180//2638 3182//2638
+f 3183//2639 3184//2639 3185//2639 3186//2639
+f 3187//2640 3188//2640 3189//2640 3183//2640 3186//2640
+f 3190//2641 3191//2641 3188//2641 3187//2641 3192//2641
+f 3193//2642 3194//2642 3191//2642 3190//2642
+f 3195//2643 3196//2643 3197//2643 3194//2643 3193//2643
+f 3184//2644 3196//2644 3195//2644 3198//2644 3185//2644
+f 3199//2645 3200//2645 3201//2645
+f 3202//2646 3203//2646 3204//2646 3200//2646 3199//2646 3205//2646
+f 3206//2647 3207//2647 3203//2647 3202//2647 3208//2647
+f 3209//2648 3206//2648 3208//2648 3210//2648
+f 3211//2649 3212//2649 3213//2649 3209//2649 3210//2649 3214//2649
+f 3212//2650 3211//2650 3215//2650
+f 3216//2651 3217//2651 3218//2651 3219//2651 3220//2651
+f 3221//2652 3217//2652 3216//2652 3222//2652
+f 3223//2653 3224//2653 3225//2653 3221//2653 3222//2653 3226//2653
+f 3227//2654 3228//2654 3223//2654 3226//2654 3229//2654
+f 3230//2655 3231//2655 3227//2655 3229//2655 3232//2655 3233//2655 3234//2655 3235//2655
+f 3218//2656 3236//2656 3234//2656 3233//2656 3219//2656
+f 3237//2657 3238//2657 3239//2657 3240//2657
+f 3241//2659 3242//2659 3243//2659
+f 3244//2660 3245//2660 3246//2660 3242//2660 3241//2660 3247//2660
+f 3248//2661 3245//2661 3244//2661 3249//2661
+f 3240//2662 3239//2662 3248//2662 3249//2662 3250//2662
+f 3251//2663 3252//2663 3253//2663 3254//2663 3255//2663
+f 3256//2664 3257//2664 3258//2664 3251//2664 3255//2664 3259//2664
+f 3260//2665 2229//2665 2235//2665 3257//2665 3256//2665
+f 2230//2666 2229//2666 3260//2666 2700//2666
+f 3254//2667 3253//2667 3261//2667 2697//2667 2699//2667
+f 3262//2668 3263//2668 3264//2668 3265//2668
+f 3266//2669 3267//2669 3268//2669 3262//2669 3265//2669 3269//2669
+f 3035//2670 3050//2670 3270//2670 3271//2670 3267//2670 3266//2670 3036//2670
+f 3272//2671 3273//2671 3270//2671 3050//2671 3049//2671 3274//2671
+f 3275//2672 3276//2672 3272//2672 3274//2672 3277//2672
+f 3278//2628 3279//2628 3280//2628 3281//2628
+f 3282//2629 3283//2629 3284//2629 3285//2629
+f 3286//2630 3287//2630 3283//2630 3282//2630 3288//2630
+f 3289//2631 3290//2631 3291//2631 3287//2631 3286//2631
+f 3279//2632 3292//2632 3290//2632 3289//2632 3280//2632
+f 3293//2633 3294//2633 3295//2633 3296//2633 3297//2633 3298//2633
+f 3299//2634 3300//2634 3301//2634 3294//2634 3293//2634 3302//2634
+f 3303//2635 3300//2635 3299//2635 3304//2635
+f 3305//2636 3306//2636 3303//2636 3304//2636 3307//2636 3308//2636
+f 3308//2685 3309//2685 3305//2685
+f 3310//2637 3311//2637 3312//2637
+f 3296//2638 3313//2638 3314//2638 3310//2638 3312//2638 3315//2638 3297//2638
+f 3316//2639 3317//2639 3318//2639 3319//2639 3320//2639
+f 3321//2640 3322//2640 3318//2640 3317//2640
+f 3323//2641 3324//2641 3322//2641 3321//2641
+f 3325//2642 3326//2642 3324//2642 3323//2642
+f 3327//2643 3328//2643 3329//2643 3326//2643 3325//2643 3330//2643
+f 3320//2644 3319//2644 3331//2644 3328//2644 3327//2644
+f 3332//2645 3333//2645 3334//2645 3335//2645
+f 3336//2646 3333//2646 3332//2646 3337//2646
+f 3338//2647 3336//2647 3337//2647 3339//2647
+f 3340//2648 3341//2648 3338//2648 3339//2648 3342//2648
+f 3343//2649 3344//2649 3340//2649 3342//2649
+f 3345//2650 3344//2650 3343//2650 3346//2650
+f 3347//2651 3348//2651 3349//2651 3350//2651
+f 3351//2652 3348//2652 3347//2652 3352//2652
+f 3353//2653 3354//2653 3355//2653 3356//2653 3357//2653 3351//2653 3352//2653
+f 3358//2654 3359//2654 3360//2654 3354//2654 3353//2654
+f 3361//2655 3362//2655 3359//2655 3358//2655 3363//2655
+f 3349//2656 3361//2656 3363//2656 3350//2656
+f 3364//2657 3365//2657 3366//2657 3367//2657 2451//2657 2450//2657
+f 3365//2658 3364//2658 3368//2658
+f 3369//2659 3370//2659 3371//2659 3372//2659 3373//2659 3374//2659 3375//2659
+f 3376//2660 3377//2660 3378//2660 3371//2660 3370//2660 3379//2660
+f 2465//2661 2461//2661 2457//2661 2456//2661 3380//2661 3377//2661 3376//2661 3381//2661 3382//2661
+f 2465//2662 3382//2662 2466//2662
+f 3367//2662 3380//2662 2456//2662 2452//2662 2451//2662
+f 3383//2663 3384//2663 3385//2663 3386//2663 3387//2663
+f 3388//2664 3383//2664 3387//2664 3389//2664
+f 3390//2665 3391//2665 3392//2665 3388//2665 3389//2665
+f 3393//2666 3394//2666 3395//2666 3391//2666 3390//2666
+f 3396//2678 3397//2678 3398//2678 3399//2678 3394//2678 3393//2678
+f 3386//2667 3385//2667 3400//2667 3397//2667 3396//2667
+f 3401//2668 2870//2668 2869//2668 2876//2668 3402//2668 3403//2668 3404//2668 3405//2668
+f 3401//2669 3405//2669 3406//2669 3407//2669
+f 3408//2670 3409//2670 3407//2670 3406//2670
+f 3409//2671 3408//2671 3410//2671 3411//2671
+f 3412//2686 3410//2686 3408//2686 3406//2686 3405//2686 3404//2686
+f 3413//2672 2877//2672 2880//2672 3411//2672 3410//2672 3412//2672 3414//2672
+f 2876//2673 2875//2673 2877//2673 3413//2673 3402//2673
+f 2897//2629 2896//2629 3415//2629 3416//2629
+f 3417//2630 2891//2630 2894//2630 2897//2630 3416//2630
+f 3418//2631 2406//2631 2405//2631 2891//2631 3417//2631
+f 3418//2632 3419//2632 2407//2632 2406//2632
+f 3420//2633 3421//2633 3422//2633 3423//2633
+f 3424//2634 3425//2634 3421//2634 3420//2634 3426//2634
+f 3427//2635 3425//2635 3424//2635 3428//2635
+f 2422//2636 2421//2636 3427//2636 3428//2636 3429//2636
+f 2419//2637 2420//2637 3430//2637
+f 2423//2687 2422//2687 3429//2687
+f 3431//2638 3423//2638 3422//2638 2416//2638 2415//2638 2419//2638 3430//2638
+f 3432//2639 3433//2639 3434//2639 3435//2639 3436//2639 3437//2639 3438//2639 3439//2639 3440//2639
+f 3441//2640 3442//2640 3433//2640 3432//2640
+f 3443//2641 3444//2641 3445//2641 3442//2641 3441//2641
+f 3446//2684 3447//2684 3444//2684 3443//2684
+f 3448//2643 3449//2643 3447//2643 3446//2643 3450//2643
+f 3438//2644 3448//2644 3450//2644 3451//2644 3439//2644
+f 3452//2645 3453//2645 3454//2645 3455//2645 3456//2645
+f 3457//2646 3453//2646 3452//2646 3458//2646 3459//2646
+f 3460//2647 3461//2647 3457//2647 3459//2647 3462//2647
+f 3463//2648 3460//2648 3462//2648 3464//2648
+f 3465//2649 3466//2649 3467//2649 3463//2649 3464//2649 3468//2649
+f 3456//2650 3455//2650 3469//2650 3466//2650 3465//2650
+f 3470//2651 3471//2651 3472//2651 3473//2651 3474//2651 3475//2651
+f 2447//2652 2446//2652 3471//2652 3470//2652 3476//2652
+f 3477//2653 2448//2653 2447//2653 3476//2653
+f 3478//2654 2464//2654 2463//2654 2468//2654 3479//2654 3480//2654
+f 3481//2655 3482//2655 3480//2655 3479//2655 3483//2655 3484//2655
+f 3473//2656 3484//2656 3483//2656 3474//2656
+f 3485//2657 3486//2657 3487//2657 3488//2657
+f 3489//2658 3013//2658 2995//2658 2994//2658 3485//2658 3488//2658
+f 3490//2659 3009//2659 3008//2659 3013//2659 3489//2659
+f 3491//2660 3492//2660 3010//2660 3009//2660 3490//2660
+f 3493//2661 3494//2661 3492//2661 3491//2661 3495//2661
+f 3486//2662 3493//2662 3495//2662 3487//2662
+f 3496//2663 3497//2663 3498//2663 3499//2663
+f 3500//2664 3501//2664 3496//2664 3499//2664 3502//2664
+f 3503//2682 3504//2682 3500//2682 3502//2682 3505//2682
+f 3506//2666 3507//2666 3504//2666 3503//2666
+f 3508//2678 3509//2678 3510//2678 3507//2678 3506//2678
+f 3511//2667 3498//2667 3497//2667 3509//2667 3508//2667
+f 3512//2668 3513//2668 3514//2668 3515//2668 3516//2668
+f 3517//2669 3518//2669 3512//2669 3516//2669 3519//2669
+f 3520//2670 3521//2670 3518//2670 3517//2670 3522//2670
+f 3523//2671 3524//2671 3520//2671 3522//2671
+f 3525//2672 3526//2672 3527//2672 3528//2672 3524//2672 3523//2672
+f 3515//2673 3514//2673 3529//2673 3526//2673 3525//2673 3530//2673
+f 3531//2628 3532//2628 3533//2628 3534//2628
+f 3535//2629 3536//2629 3537//2629 3538//2629
+f 3539//2630 3540//2630 3541//2630 3535//2630 3538//2630
+f 3542//2631 3543//2631 3540//2631 3539//2631
+f 3533//2632 3544//2632 3543//2632 3542//2632 3545//2632 3534//2632
+f 3546//2633 3547//2633 3548//2633 3549//2633
+f 3550//2634 3551//2634 3552//2634 3547//2634 3546//2634 3553//2634
+f 3554//2635 3555//2635 3551//2635 3550//2635 3556//2635 3557//2635
+f 3558//2636 3559//2636 3560//2636 3554//2636 3557//2636 3561//2636
+f 3562//2637 3563//2637 3558//2637 3561//2637 3564//2637
+f 3549//2638 3548//2638 3565//2638 3562//2638 3564//2638
+f 3566//2639 2041//2639 2044//2639 2050//2639 3095//2639 3567//2639
+f 3568//2640 2039//2640 2038//2640 2041//2640 3566//2640 3569//2640 3570//2640 3571//2640
+f 2395//2641 3572//2641 3573//2641 3570//2641 3569//2641 3574//2641 2396//2641
+f 3572//2642 2395//2642 2392//2642 2391//2642 3575//2642
+f 3576//2643 3575//2643 2391//2643 2390//2643 2412//2643 3577//2643 3578//2643
+f 3567//2644 3095//2644 3094//2644 3097//2644 3578//2644 3577//2644
+f 3579//2688 3580//2688 3581//2688 3582//2688
+f 3583//2646 3580//2646 3579//2646 3584//2646 3585//2646
+f 3586//2647 3583//2647 3585//2647 3587//2647
+f 3588//2648 3586//2648 3587//2648 3589//2648
+f 3106//2649 3110//2649 3588//2649 3589//2649 3107//2649
+f 3590//2651 3591//2651 3592//2651 3593//2651
+f 3594//2652 3134//2652 3118//2652 3117//2652 3591//2652 3590//2652
+f 3132//2653 3131//2653 3134//2653 3594//2653 3595//2653
+f 3596//2654 3133//2654 3132//2654 3595//2654 3597//2654
+f 3598//2655 3599//2655 3596//2655 3597//2655 3600//2655
+f 3592//2656 3598//2656 3600//2656 3593//2656
+f 3601//2657 3602//2657 3603//2657 3604//2657
+f 2965//2658 2975//2658 2108//2658 2094//2658 2093//2658 3601//2658 3604//2658 2966//2658
+f 2975//2659 2109//2659 2108//2659
+f 2981//2689 2106//2689 2105//2689
+f 3605//2660 2987//2660 2986//2660
+f 2107//2660 2106//2660 2981//2660 2979//2660 2978//2660 3606//2660
+f 2991//2690 2988//2690 2987//2690 3605//2690 3607//2690
+f 3608//2690 3606//2690 2978//2690 2973//2690 2972//2690 3609//2690
+f 3602//2662 3609//2662 2972//2662 2971//2662 2991//2662 3607//2662 3603//2662
+f 3610//2663 3611//2663 3612//2663 2118//2663 2117//2663 3613//2663
+f 3614//2664 3615//2664 3612//2664 3611//2664 3616//2664 3617//2664
+f 3618//2665 2623//2665 2622//2665 3614//2665 3617//2665 3619//2665 3620//2665
+f 3621//2666 2615//2666 2619//2666 2623//2666 3618//2666
+f 3622//2678 2120//2678 2119//2678 2123//2678 2615//2678 3621//2678
+f 2117//2667 2116//2667 2120//2667 3622//2667 3613//2667
+f 3623//2668 3624//2668 3625//2668 3626//2668 3627//2668
+f 3628//2669 3629//2669 3630//2669 3623//2669 3627//2669 3631//2669 3632//2669
+f 3633//2670 3634//2670 3628//2670 3632//2670 3635//2670
+f 3636//2671 3637//2671 3633//2671 3635//2671 3638//2671
+f 3639//2672 3636//2672 3638//2672 3640//2672 3641//2672
+f 3625//2673 3642//2673 3639//2673 3641//2673 3626//2673
+f 2163//2628 2162//2628 3643//2628
+f 3644//2629 3645//2629 2160//2629 2159//2629
+f 3646//2630 3647//2630 3645//2630 3644//2630
+f 3648//2631 3649//2631 3650//2631 3651//2631 3652//2631 3653//2631 3647//2631 3646//2631 3654//2631
+f 3648//2632 3655//2632 3649//2632
+f 3651//2691 3656//2691 3652//2691
+f 3657//2633 3658//2633 3659//2633 3660//2633
+f 3661//2634 3662//2634 3658//2634 3657//2634
+f 3201//2692 3200//2692 3204//2692 3662//2692 3661//2692
+f 3663//2636 3213//2636 3212//2636 3215//2636 3664//2636
+f 3665//2637 3666//2637 3663//2637 3664//2637 3667//2637
+f 3660//2638 3659//2638 3665//2638 3667//2638
+f 3224//2639 3223//2639 3228//2639 3668//2639 3669//2639 3670//2639
+f 3671//2640 3672//2640 3225//2640 3224//2640 3670//2640
+f 3673//2641 3674//2641 3675//2641 3672//2641 3671//2641 3676//2641
+f 3677//2642 3678//2642 3674//2642 3673//2642
+f 3679//2643 3680//2643 3681//2643 3678//2643 3677//2643
+f 3668//2644 3228//2644 3227//2644 3231//2644 3680//2644 3679//2644
+f 3682//2693 3683//2693 3684//2693 3685//2693 3686//2693
+f 3682//2646 3686//2646 3687//2646 2685//2646 2684//2646
+f 3688//2648 2696//2648 2695//2648 3689//2648
+f 3242//2649 3246//2649 3688//2649 3689//2649 3690//2649 3243//2649
+f 3691//2651 3692//2651 3693//2651 3694//2651
+f 3261//2652 3253//2652 3252//2652 3692//2652 3691//2652 3695//2652
+f 2697//2653 3261//2653 3695//2653 2698//2653
+f 3696//2654 2244//2654 2227//2654 2226//2654 2704//2654 2705//2654
+f 3697//2655 2245//2655 2244//2655 3696//2655 3698//2655 3699//2655
+f 3693//2656 3697//2656 3699//2656 3694//2656
+f 2716//2657 2715//2657 3700//2657 3701//2657
+f 3702//2694 3703//2694 3704//2694
+f 3705//2660 3706//2660 3707//2660 3703//2660 3702//2660
+f 3708//2661 3709//2661 3710//2661 3706//2661 3705//2661
+f 3701//2662 3700//2662 3711//2662 3709//2662 3708//2662
+f 3712//2663 3713//2663 3714//2663 3715//2663 3716//2663 3717//2663
+f 3718//2664 3715//2664 3714//2664 3719//2664
+f 3720//2665 3721//2665 3718//2665 3719//2665
+f 3285//2666 3284//2666 3721//2666 3720//2666
+f 3717//2667 3722//2667 3278//2667 3281//2667 3712//2667
+f 2872//2695 2871//2695 3723//2695
+f 3724//2668 2890//2668 2889//2668 3725//2668
+f 3726//2669 2873//2669 2872//2669 3723//2669 3727//2669
+f 3725//2669 2889//2669 2888//2669 3728//2669
+f 3728//2670 2888//2670 2885//2670 2878//2670 2874//2670 2873//2670 3726//2670 3729//2670 3730//2670 3731//2670 3732//2670
+f 3733//2671 3734//2671 3735//2671 3731//2671 3730//2671 3736//2671
+f 3737//2672 3738//2672 3734//2672 3733//2672 3739//2672
+f 2882//2673 2890//2673 3724//2673 3740//2673 3737//2673 3739//2673 2883//2673
+f 3741//2629 3742//2629 2301//2629 2300//2629
+f 3743//2630 3744//2630 3745//2630 3742//2630 3741//2630
+f 2765//2631 3744//2631 3743//2631 2766//2631
+f 3746//2633 3747//2633 3748//2633 3749//2633 3750//2633
+f 3334//2634 3747//2634 3746//2634 3335//2634
+f 3751//2637 3345//2637 3346//2637 3752//2637
+f 3750//2638 3749//2638 3751//2638 3752//2638
+f 3355//2639 3354//2639 3360//2639 3753//2639 3754//2639 3755//2639
+f 3756//2640 3757//2640 3356//2640 3355//2640 3755//2640
+f 3758//2641 3759//2641 3757//2641 3756//2641 3760//2641
+f 3761//2642 3762//2642 3759//2642 3758//2642
+f 3763//2643 3764//2643 3762//2643 3761//2643 3765//2643
+f 3753//2644 3360//2644 3359//2644 3362//2644 3763//2644 3765//2644
+f 3766//2645 3767//2645 3768//2645
+f 2850//2646 2831//2646 2830//2646 3767//2646 3766//2646 3769//2646 3770//2646 3771//2646 3772//2646
+f 2846//2647 2845//2647 2850//2647 3772//2647 3773//2647 3774//2647
+f 3775//2648 2847//2648 2846//2648 3774//2648 3776//2648
+f 3777//2649 3372//2649 3371//2649 3378//2649 3775//2649 3776//2649
+f 3373//2650 3372//2650 3777//2650 3778//2650 3779//2650
+f 3780//2651 3781//2651 3782//2651 3783//2651
+f 3784//2652 3400//2652 3385//2652 3384//2652 3781//2652 3780//2652
+f 3398//2653 3397//2653 3400//2653 3784//2653 3785//2653
+f 3786//2654 3399//2654 3398//2654 3785//2654 3787//2654 3788//2654
+f 3789//2655 3790//2655 3788//2655 3787//2655 3791//2655 3792//2655
+f 3782//2656 3789//2656 3792//2656 3793//2656 3783//2656
+f 3794//2657 3795//2657 3796//2657 3797//2657 3798//2657
+f 3799//2658 3800//2658 3801//2658 3802//2658 3794//2658 3798//2658
+f 3803//2659 3804//2659 3805//2659 3800//2659 3799//2659
+f 3806//2696 3807//2696 3808//2696
+f 3809//2660 3810//2660 3811//2660 3812//2660 3804//2660 3803//2660
+f 3808//2660 3807//2660 3813//2660
+f 3814//2661 3815//2661 3810//2661 3809//2661 3816//2661 3817//2661
+f 3818//2662 3797//2662 3796//2662 3819//2662 3814//2662 3817//2662
+f 3820//2663 2399//2663 2398//2663 3821//2663 3822//2663
+f 3823//2664 3824//2664 3820//2664 3822//2664 3825//2664
+f 3826//2665 2895//2665 2899//2665 2902//2665 3827//2665 3823//2665 3825//2665
+f 2902//2697 2901//2697 3827//2697
+f 2896//2666 2895//2666 3826//2666 3828//2666 3415//2666
+f 2398//2667 2397//2667 3821//2667
+f 3829//2668 3830//2668 3831//2668 3832//2668
+f 3833//2669 3834//2669 3835//2669 3836//2669 3837//2669 3829//2669 3832//2669
+f 3838//2670 3839//2670 3840//2670 3834//2670 3833//2670
+f 3841//2671 3842//2671 3839//2671 3838//2671
+f 3843//2672 3844//2672 3842//2672 3841//2672 3845//2672
+f 3831//2673 3830//2673 3846//2673 3843//2673 3845//2673
+f 3847//2628 3848//2628 3849//2628 3850//2628
+f 3851//2629 3852//2629 3853//2629 3854//2629
+f 3855//2630 3851//2630 3854//2630 3856//2630
+f 3857//2631 3858//2631 3855//2631 3856//2631 3859//2631 3860//2631
+f 3849//2632 3857//2632 3860//2632 3861//2632 3850//2632
+f 3862//2633 3863//2633 3864//2633 3865//2633
+f 3866//2634 3867//2634 3868//2634 3869//2634 3863//2634 3862//2634 3870//2634
+f 3871//2635 3872//2635 3867//2635 3866//2635 3873//2635 3874//2635
+f 2955//2636 2954//2636 3871//2636 3874//2636 3875//2636 3876//2636
+f 2951//2637 2950//2637 2955//2637 3876//2637 3877//2637
+f 3878//2638 2945//2638 2944//2638 2951//2638 3877//2638 3879//2638 3865//2638 3864//2638
+f 3880//2639 2460//2639 2462//2639 2464//2639 3478//2639 3881//2639
+f 3882//2640 3883//2640 2459//2640 2458//2640 2460//2640 3880//2640
+f 3884//2641 3885//2641 3886//2641 3883//2641 3882//2641
+f 3887//2642 3888//2642 3885//2642 3884//2642
+f 3889//2643 3888//2643 3887//2643 3890//2643
+f 3881//2644 3478//2644 3480//2644 3482//2644 3889//2644 3890//2644
+f 3891//2645 3892//2645 3893//2645 3894//2645 3895//2645
+f 3896//2646 3897//2646 3898//2646 3892//2646 3891//2646
+f 3899//2647 3900//2647 3897//2647 3896//2647 3901//2647
+f 3902//2648 3903//2648 3899//2648 3901//2648 3904//2648
+f 3905//2649 3906//2649 3907//2649 3902//2649 3904//2649
+f 3895//2650 3894//2650 3906//2650 3905//2650
+f 3908//2651 3909//2651 3910//2651 3911//2651 3912//2651
+f 3913//2652 3914//2652 3908//2652 3912//2652
+f 3915//2653 2165//2653 2164//2653 2170//2653 2174//2653 3916//2653 3917//2653 3914//2653 3913//2653 3918//2653
+f 3919//2654 2183//2654 2166//2654 2165//2654 3915//2654
+f 2174//2654 2173//2654 3920//2654 3916//2654
+f 3921//2655 2184//2655 2183//2655 3919//2655 3922//2655
+f 3910//2656 3923//2656 3924//2656 3921//2656 3922//2656 3925//2656 3911//2656
+f 3926//2657 3927//2657 3928//2657 3929//2657 3930//2657
+f 3529//2658 3514//2658 3513//2658 3928//2658 3927//2658 3931//2658
+f 3526//2659 3529//2659 3931//2659 3932//2659 3933//2659 3527//2659
+f 3934//2660 3935//2660 3528//2660 3527//2660 3933//2660
+f 3936//2661 3937//2661 3935//2661 3934//2661 3938//2661
+f 3939//2662 3930//2662 3929//2662 3940//2662 3937//2662 3936//2662
+f 3941//2663 3942//2663 3943//2663 3944//2663 3945//2663 3946//2663
+f 3947//2664 3948//2664 3942//2664 3941//2664 3949//2664 3950//2664
+f 3951//2665 3947//2665 3950//2665 3952//2665 3953//2665
+f 3537//2666 3536//2666 3951//2666 3953//2666
+f 3945//2675 3944//2675 3532//2675 3531//2675
+f 3954//2668 3552//2668 3551//2668 3555//2668 3955//2668 3956//2668
+f 3957//2669 3958//2669 3959//2669 3954//2669 3956//2669
+f 3960//2670 3961//2670 3962//2670 3963//2670 3958//2670 3957//2670 3964//2670
+f 3965//2671 3966//2671 3967//2671 3968//2671 3962//2671 3961//2671 3969//2671 3970//2671
+f 3971//2672 3560//2672 3559//2672 3966//2672 3965//2672
+f 3555//2673 3554//2673 3560//2673 3971//2673 3972//2673 3955//2673
+f 3960//2628 3964//2628 3973//2628 3974//2628 3975//2628 3976//2628
+f 3977//2674 3978//2674 3975//2674 3974//2674 3979//2674
+f 3980//2629 3977//2629 3979//2629 3981//2629 3982//2629
+f 3983//2630 3984//2630 3980//2630 3982//2630 3985//2630
+f 3986//2631 3987//2631 3983//2631 3985//2631 3988//2631 3989//2631
+f 3969//2632 3961//2632 3960//2632 3976//2632 3987//2632 3986//2632
+f 3990//2633 3991//2633 3992//2633 3993//2633
+f 3991//2634 3990//2634 3582//2634 3581//2634
+f 3993//2638 3992//2638 3100//2638 3104//2638 3994//2638
+f 3995//2645 3996//2645 3997//2645 3998//2645
+f 3999//2646 4000//2646 3996//2646 3995//2646
+f 4001//2647 4000//2647 3999//2647 4002//2647
+f 4003//2648 4004//2648 4005//2648 4001//2648 4002//2648
+f 4006//2649 4007//2649 4005//2649 4004//2649
+f 4008//2650 3998//2650 3997//2650 4007//2650 4006//2650
+f 4009//2663 4010//2663 4011//2663 4012//2663 4013//2663
+f 4014//2664 4015//2664 4011//2664 4010//2664 4016//2664
+f 4017//2665 4018//2665 4014//2665 4016//2665 4019//2665
+f 4020//2666 4021//2666 4022//2666 4018//2666 4017//2666
+f 4023//2678 4024//2678 4021//2678 4020//2678 4025//2678 4026//2678
+f 4012//2667 4026//2667 4025//2667 4013//2667
+f 4027//2668 4028//2668 4029//2668 4030//2668 4031//2668
+f 4032//2669 4033//2669 4027//2669 4031//2669
+f 4034//2670 4035//2670 4033//2670 4032//2670 4036//2670
+f 4037//2671 4038//2671 4035//2671 4034//2671 4039//2671 4040//2671
+f 4041//2672 4037//2672 4040//2672 4042//2672
+f 4029//2673 4043//2673 4044//2673 4041//2673 4042//2673 4030//2673
+f 4045//2628 4046//2628 4047//2628 4048//2628 4049//2628
+f 4050//2674 4051//2674 4052//2674 4045//2674 4049//2674 4053//2674 4054//2674
+f 4055//2629 4056//2629 4051//2629 4050//2629 4057//2629
+f 4058//2630 4059//2630 4056//2630 4055//2630 4060//2630
+f 4061//2631 4062//2631 4063//2631 4059//2631 4058//2631 4064//2631 4065//2631
+f 4046//2632 4062//2632 4061//2632 4066//2632 4047//2632
+f 4067//2633 4068//2633 4069//2633 4070//2633
+f 4071//2634 3684//2634 3683//2634 4068//2634 4067//2634
+f 4071//2635 3685//2635 3684//2635
+f 4070//2638 4069//2638 3238//2638 3237//2638
+f 4072//2639 4073//2639 4074//2639 4075//2639
+f 4076//2640 4077//2640 3235//2640 3234//2640 3236//2640 4072//2640 4075//2640
+f 4078//2676 4079//2676 3230//2676 3235//2676 4077//2676
+f 4080//2642 4081//2642 4079//2642 4078//2642 4082//2642
+f 4083//2643 4081//2643 4080//2643 4084//2643
+f 4073//2644 4083//2644 4084//2644 4074//2644
+f 4085//2693 4086//2693 2712//2693 2714//2693
+f 4086//2646 4085//2646 3264//2646 3263//2646
+f 4087//2648 3276//2648 3275//2648 4088//2648
+f 3703//2649 3707//2649 4087//2649 4088//2649 3704//2649
+f 4089//2651 4090//2651 4091//2651 4092//2651 4093//2651
+f 3722//2652 3717//2652 3716//2652 4090//2652 4089//2652 4094//2652
+f 3292//2653 3279//2653 3278//2653 3722//2653 4094//2653 4095//2653
+f 3619//2654 4096//2654 3291//2654 3290//2654 3292//2654 4095//2654 4097//2654 3620//2654
+f 4096//2655 3619//2655 3617//2655 3616//2655 4098//2655
+f 4091//2656 4098//2656 3616//2656 3611//2656 3610//2656 4092//2656
+f 4099//2657 3314//2657 3313//2657 4100//2657 4101//2657 4102//2657
+f 3311//2658 3310//2658 3314//2658 4099//2658
+f 3306//2659 3305//2659 3309//2659 4103//2659 4104//2659
+f 4105//2660 4106//2660 4104//2660 4103//2660
+f 4107//2661 4106//2661 4105//2661 4108//2661 4109//2661
+f 4100//2662 4107//2662 4109//2662 4101//2662
+f 4110//2663 4111//2663 4112//2663 4113//2663 4114//2663 4115//2663
+f 4116//2664 4112//2664 4111//2664 4117//2664
+f 4118//2665 4119//2665 4116//2665 4117//2665 4120//2665
+f 4121//2666 4118//2666 4120//2666 4122//2666 4123//2666
+f 4124//2678 2136//2678 2135//2678 2141//2678 4121//2678 4123//2678
+f 4114//2667 2137//2667 2136//2667 4124//2667 4115//2667
+f 4125//2668 4126//2668 4127//2668 4128//2668 4129//2668
+f 4130//2669 4131//2669 4132//2669 4127//2669 4126//2669 4133//2669
+f 4134//2670 4135//2670 4131//2670 4130//2670 4136//2670
+f 4137//2671 4138//2671 4134//2671 4136//2671 4139//2671
+f 4140//2672 4137//2672 4139//2672 4141//2672
+f 4129//2673 4128//2673 4142//2673 4140//2673 4141//2673
+f 4143//2628 2826//2628 2825//2628
+f 2817//2629 2816//2629 4144//2629 4145//2629
+f 4146//2630 2820//2630 2818//2630 2817//2630 4145//2630 4147//2630
+f 4148//2631 2821//2631 2820//2631 4146//2631 4149//2631
+f 2825//2632 2823//2632 2822//2632 4148//2632 4149//2632 4150//2632 4143//2632
+f 4151//2633 4152//2633 4153//2633 4154//2633 4155//2633
+f 4156//2634 2829//2634 2828//2634 4152//2634 4151//2634
+f 3767//2635 2830//2635 2829//2635 4156//2635 3768//2635
+f 3373//2636 3779//2636 3374//2636
+f 4154//2638 3366//2638 3365//2638 3368//2638 4155//2638
+f 4157//2639 3395//2639 3394//2639 3399//2639 3786//2639 4158//2639 4159//2639
+f 4160//2640 3392//2640 3391//2640 3395//2640 4157//2640 4161//2640
+f 4162//2641 4163//2641 4164//2641 4165//2641 4166//2641 4160//2641 4161//2641 4167//2641
+f 4168//2642 4169//2642 4170//2642 4171//2642 4165//2642 4164//2642 4172//2642 4173//2642
+f 4174//2643 4169//2643 4168//2643 4175//2643 4176//2643
+f 4158//2644 3786//2644 3788//2644 3790//2644 4177//2644 4174//2644 4176//2644 4178//2644
+f 4179//2645 3802//2645 3801//2645 4180//2645 4181//2645
+f 4182//2646 4183//2646 4184//2646 4179//2646 4181//2646 4185//2646
+f 4186//2647 4183//2647 4182//2647 4187//2647
+f 4188//2648 3813//2648 3807//2648 3806//2648 4186//2648 4187//2648 4189//2648 4190//2648
+f 4191//2649 3805//2649 3804//2649 3812//2649 4188//2649 4190//2649
+f 4180//2650 3801//2650 3800//2650 3805//2650 4191//2650 4192//2650 4193//2650
+f 4194//2651 2488//2651 2487//2651 2513//2651 4195//2651
+f 2511//2651 2506//2651 2505//2651 2782//2651 2774//2651 2773//2651
+f 4196//2651 2802//2651 2801//2651
+f 2489//2698 2488//2698 4194//2698
+f 2783//2652 2782//2652 2505//2652 2499//2652 2498//2652 2789//2652
+f 4197//2653 2796//2653 2790//2653 2789//2653 2498//2653 2497//2653 2503//2653
+f 2503//2654 2502//2654 2508//2654 4198//2654 2780//2654 2779//2654 2787//2654 2794//2654 4199//2654 4197//2654
+f 2772//2655 2771//2655 2780//2655 4198//2655 4200//2655 4201//2655
+f 4199//2655 2794//2655 2793//2655 2800//2655 4202//2655
+f 2513//2656 2512//2656 2511//2656 2773//2656 2772//2656 4201//2656 4195//2656
+f 4203//2656 4202//2656 2800//2656 2799//2656 2802//2656 4196//2656
+f 4204//2657 4205//2657 2810//2657 2809//2657 4206//2657 4207//2657
+f 2912//2658 2911//2658 4204//2658 4207//2658
+f 4208//2660 4209//2660 2926//2660 2925//2660 4210//2660
+f 4144//2661 2816//2661 2815//2661 2814//2661 4211//2661 4209//2661 4208//2661
+f 4205//2662 4211//2662 2814//2662 2811//2662 2810//2662
+f 4212//2663 4213//2663 4214//2663 4215//2663 4216//2663
+f 4217//2664 4212//2664 4216//2664 4218//2664
+f 4219//2682 4220//2682 4217//2682 4218//2682 4221//2682 4222//2682
+f 3852//2666 4219//2666 4222//2666 4223//2666 3853//2666
+f 4214//2667 4213//2667 3848//2667 3847//2667
+f 4224//2668 4225//2668 4226//2668 4227//2668 4228//2668 4229//2668
+f 4230//2669 4224//2669 4229//2669 4231//2669 4232//2669
+f 4233//2670 4234//2670 4235//2670 4236//2670 4230//2670 4232//2670
+f 4237//2671 4238//2671 4234//2671 4233//2671 4239//2671
+f 4240//2672 4241//2672 4238//2672 4237//2672 4242//2672
+f 4226//2673 4240//2673 4242//2673 4243//2673 4227//2673
+f 4244//2633 4245//2633 4246//2633 4247//2633
+f 4248//2634 4245//2634 4244//2634 4249//2634 4250//2634
+f 4251//2635 4248//2635 4250//2635 4252//2635
+f 4253//2636 3434//2636 3433//2636 3442//2636 3445//2636 4251//2636 4252//2636 4254//2636
+f 3435//2637 3434//2637 4253//2637 4255//2637
+f 4246//2638 3436//2638 3435//2638 4255//2638 4247//2638
+f 4256//2639 3026//2639 3025//2639 3029//2639 4257//2639
+f 4258//2640 3022//2640 3021//2640 3026//2640 4256//2640 4259//2640 4260//2640
+f 4261//2641 4262//2641 4260//2641 4259//2641
+f 4263//2684 4264//2684 4265//2684 4266//2684 4262//2684 4261//2684
+f 4267//2643 4265//2643 4264//2643 4268//2643 4269//2643
+f 4257//2644 3029//2644 3028//2644 4267//2644 4269//2644
+f 4270//2645 3038//2645 3037//2645 3040//2645 4271//2645
+f 4272//2646 4270//2646 4271//2646 4273//2646
+f 4274//2647 4275//2647 4276//2647 4272//2647 4273//2647
+f 4277//2648 4276//2648 4275//2648 4278//2648 4279//2648
+f 4280//2649 3043//2649 3042//2649 3047//2649 4281//2649 4277//2649 4279//2649
+f 3043//2650 4280//2650 3044//2650
+f 3047//2699 3046//2699 4281//2699
+f 4282//2657 4283//2657 4284//2657 4285//2657 4286//2657
+f 4287//2658 3083//2658 3067//2658 3066//2658 4286//2658 4285//2658 4288//2658 4289//2658
+f 3079//2659 3083//2659 4287//2659 4290//2659 3080//2659
+f 4291//2660 4292//2660 4293//2660 3081//2660 3080//2660 4290//2660
+f 2046//2661 2045//2661 4294//2661
+f 2042//2661 2037//2661 2040//2661 4295//2661 4296//2661 4297//2661 4298//2661 4299//2661 4292//2661 4291//2661
+f 2046//2700 4294//2700 2047//2700
+f 4300//2662 4297//2662 4296//2662 4301//2662 4284//2662 4283//2662
+f 4302//2663 3090//2663 3089//2663 4303//2663 4304//2663
+f 4305//2664 4288//2664 4285//2664 4284//2664 4301//2664 4306//2664 4302//2664 4304//2664 4307//2664
+f 4288//2665 4305//2665 4289//2665
+f 4296//2665 4295//2665 3568//2665 3571//2665 4306//2665 4301//2665
+f 2040//2666 2039//2666 3568//2666 4295//2666
+f 4308//2667 4303//2667 3089//2667 3088//2667 2034//2667 2036//2667
+f 4309//2668 4310//2668 4311//2668 4312//2668 4313//2668
+f 4314//2669 4315//2669 4309//2669 4313//2669
+f 4316//2670 4317//2670 4315//2670 4314//2670 4318//2670
+f 4319//2671 4320//2671 4316//2671 4318//2671 4321//2671
+f 4322//2672 4323//2672 4320//2672 4319//2672 4324//2672
+f 4311//2673 4323//2673 4322//2673 4312//2673
+f 4325//2628 4326//2628 4327//2628 4328//2628 4329//2628
+f 4330//2674 4331//2674 4325//2674 4329//2674 4332//2674
+f 2081//2629 2080//2629 4330//2629 4332//2629 4333//2629 4334//2629
+f 4335//2630 2073//2630 2072//2630 2081//2630 4334//2630
+f 4336//2631 2090//2631 2074//2631 2073//2631 4335//2631
+f 4326//2632 4337//2632 2076//2632 2078//2632 2090//2632 4336//2632 4327//2632
+f 3167//2639 3166//2639 3170//2639 4338//2639 4339//2639
+f 4340//2640 4341//2640 3163//2640 3162//2640 3167//2640 4339//2640
+f 4342//2641 4343//2641 4341//2641 4340//2641
+f 4344//2642 4345//2642 4343//2642 4342//2642
+f 4346//2643 4345//2643 4344//2643 4347//2643
+f 4338//2644 3170//2644 3169//2644 4346//2644 4347//2644
+f 4348//2651 4349//2651 4350//2651 4351//2651 4352//2651
+f 4353//2652 2161//2652 2152//2652 2151//2652 4349//2652 4348//2652
+f 2162//2653 2161//2653 4353//2653 3643//2653
+f 4354//2654 3650//2654 3649//2654 3655//2654
+f 4355//2655 3656//2655 3651//2655 3650//2655 4354//2655 4356//2655
+f 4350//2656 4355//2656 4356//2656 4351//2656
+f 4357//2657 3924//2657 3923//2657 4358//2657 4359//2657 4360//2657
+f 2185//2658 2184//2658 3921//2658 3924//2658 4357//2658 4361//2658
+f 4362//2659 2180//2659 2179//2659 2185//2659 4361//2659
+f 4363//2660 4364//2660 2181//2660 2180//2660 4362//2660 4365//2660
+f 4366//2661 4364//2661 4363//2661 4367//2661
+f 4360//2662 4359//2662 4366//2662 4367//2662 4368//2662
+f 4369//2663 4370//2663 4371//2663 4372//2663 4373//2663 4374//2663
+f 4375//2664 4376//2664 4369//2664 4374//2664 4377//2664
+f 4378//2665 4375//2665 4377//2665 4379//2665 4380//2665 4381//2665
+f 4382//2666 4383//2666 4378//2666 4381//2666 4384//2666 4385//2666
+f 4386//2678 4387//2678 4385//2678 4384//2678 4388//2678 4389//2678 4390//2678 4391//2678 4392//2678
+f 4371//2667 4390//2667 4389//2667 4372//2667
+f 4393//2668 4394//2668 4395//2668 4396//2668 4397//2668
+f 4398//2669 4399//2669 4400//2669 4401//2669 4393//2669 4397//2669 4402//2669
+f 4403//2670 4401//2670 4400//2670 4404//2670 4405//2670 4406//2670 4407//2670 4408//2670 4409//2670
+f 4407//2671 4406//2671 4410//2671 4411//2671 4412//2671 4413//2671
+f 4414//2672 4415//2672 4416//2672 4417//2672 4413//2672 4412//2672
+f 4395//2673 4418//2673 4416//2673 4415//2673 4396//2673
+f 4419//2628 4420//2628 4421//2628 4422//2628 4423//2628
+f 4424//2674 4425//2674 4421//2674 4420//2674 4426//2674
+f 4427//2629 4428//2629 4424//2629 4426//2629 4429//2629
+f 4430//2630 4428//2630 4427//2630 4431//2630 4432//2630
+f 4433//2631 4434//2631 4430//2631 4432//2631 4435//2631
+f 4422//2632 4436//2632 4434//2632 4433//2632 4423//2632
+f 4437//2633 4438//2633 4439//2633 4440//2633 4441//2633
+f 4442//2634 4443//2634 4438//2634 4437//2634 4444//2634 4445//2634
+f 4446//2635 4447//2635 4442//2635 4445//2635
+f 4448//2636 4449//2636 4450//2636 4451//2636
+f 4452//2637 4453//2637 4448//2637 4451//2637 4454//2637
+f 4440//2638 4455//2638 4456//2638 4452//2638 4454//2638 4441//2638
+f 4457//2639 4458//2639 4459//2639 4460//2639 4461//2639
+f 4462//2640 4463//2640 4464//2640 4465//2640 4466//2640 4458//2640 4457//2640 4467//2640
+f 4468//2641 4469//2641 4470//2641 4462//2641 4467//2641
+f 4471//2642 4472//2642 4473//2642 4474//2642 4469//2642 4468//2642
+f 4475//2643 4476//2643 4477//2643 4472//2643 4471//2643
+f 4461//2644 4460//2644 4476//2644 4475//2644
+f 4478//2645 4479//2645 4480//2645 4481//2645
+f 4482//2646 4483//2646 4479//2646 4478//2646 4484//2646
+f 4485//2647 4482//2647 4484//2647 4486//2647
+f 4487//2648 4485//2648 4486//2648 4488//2648
+f 4489//2649 4490//2649 4491//2649 4487//2649 4488//2649
+f 4480//2650 4492//2650 4493//2650 4490//2650 4489//2650 4481//2650
+f 4494//2651 4495//2651 4496//2651 4497//2651 4498//2651
+f 4499//2652 4500//2652 4495//2652 4494//2652 4501//2652
+f 4502//2653 4499//2653 4501//2653 4503//2653
+f 4504//2654 4505//2654 4502//2654 4503//2654 4506//2654
+f 4507//2655 4505//2655 4504//2655 4508//2655
+f 4496//2656 4509//2656 4507//2656 4508//2656 4497//2656
+f 4510//2657 4511//2657 4512//2657 4513//2657
+f 4514//2658 4515//2658 4510//2658 4513//2658 4516//2658 4517//2658
+f 4518//2659 4519//2659 4514//2659 4517//2659
+f 4520//2660 4521//2660 4519//2660 4518//2660 4522//2660
+f 4523//2661 4521//2661 4520//2661 4524//2661
+f 4512//2662 4511//2662 4525//2662 4523//2662 4524//2662
+f 4526//2663 4527//2663 4528//2663 4529//2663
+f 4530//2664 4527//2664 4526//2664 4531//2664
+f 4532//2682 4530//2682 4531//2682 4533//2682
+f 4534//2666 4535//2666 4532//2666 4533//2666 4536//2666
+f 4537//2678 4538//2678 4534//2678 4536//2678
+f 4529//2667 4528//2667 4539//2667 4538//2667 4537//2667
+f 4540//2668 4541//2668 4542//2668 4543//2668
+f 4544//2669 4545//2669 4540//2669 4543//2669 4546//2669 4547//2669
+f 4548//2670 4545//2670 4544//2670 4549//2670 4550//2670 4551//2670
+f 4552//2671 4553//2671 4554//2671 4548//2671 4551//2671 4555//2671
+f 4556//2672 4557//2672 4553//2672 4552//2672 4558//2672
+f 4541//2673 4556//2673 4558//2673 4559//2673 4542//2673
+f 4560//2628 4561//2628 4562//2628 4563//2628 4564//2628
+f 4565//2629 4566//2629 4567//2629 4568//2629 4569//2629
+f 4570//2630 4565//2630 4569//2630 4571//2630 4572//2630
+f 4573//2631 4574//2631 4575//2631 4570//2631 4572//2631
+f 4561//2632 4574//2632 4573//2632 4562//2632
+f 4576//2633 4577//2633 4578//2633 4579//2633
+f 4580//2634 4581//2634 4582//2634 4583//2634 4577//2634 4576//2634 4584//2634
+f 4585//2635 4586//2635 4580//2635 4584//2635 4587//2635
+f 4588//2701 4583//2701 4582//2701
+f 4589//2636 4590//2636 4591//2636 4585//2636 4587//2636 4592//2636
+f 4593//2636 4594//2636 4595//2636 4596//2636
+f 4597//2637 4598//2637 4589//2637 4592//2637 4599//2637
+f 4594//2702 4600//2702 4595//2702
+f 4578//2638 4601//2638 4602//2638 4603//2638 4604//2638 4597//2638 4599//2638 4579//2638
+f 4605//2639 4606//2639 4607//2639 4608//2639 4609//2639
+f 4610//2640 4611//2640 4612//2640 4605//2640 4609//2640
+f 4613//2676 4614//2676 4615//2676 4611//2676 4610//2676
+f 4614//2642 4613//2642 4616//2642 4617//2642
+f 4618//2643 4619//2643 4620//2643 4621//2643 4622//2643 4617//2643 4616//2643
+f 4623//2644 4624//2644 4621//2644 4620//2644 4625//2644 4608//2644 4607//2644 4626//2644
+f 4627//2677 4628//2677 4629//2677 4630//2677 4631//2677
+f 4632//2646 4633//2646 4634//2646 4635//2646 4628//2646 4627//2646
+f 4636//2647 4637//2647 4633//2647 4632//2647 4638//2647
+f 4639//2648 4640//2648 4636//2648 4638//2648 4641//2648
+f 4642//2649 4643//2649 4639//2649 4641//2649 4644//2649
+f 4631//2650 4630//2650 4645//2650 4646//2650 4642//2650 4644//2650
+f 4647//2651 4648//2651 4649//2651 4650//2651
+f 4651//2652 4652//2652 4653//2652 4648//2652 4647//2652
+f 4654//2653 4652//2653 4651//2653 4655//2653
+f 4656//2654 4654//2654 4655//2654 4657//2654
+f 4658//2655 4659//2655 4660//2655 4656//2655 4657//2655
+f 4649//2656 4659//2656 4658//2656 4650//2656
+f 4661//2657 4662//2657 4663//2657 4664//2657
+f 4665//2658 4666//2658 4667//2658 4661//2658 4664//2658 4668//2658
+f 4669//2659 4670//2659 4671//2659 4666//2659 4665//2659
+f 4672//2660 4673//2660 4674//2660 4670//2660 4669//2660
+f 4675//2661 4676//2661 4677//2661 4678//2661 4679//2661 4680//2661 4673//2661 4672//2661
+f 4662//2662 4679//2662 4678//2662 4681//2662 4663//2662
+f 4682//2663 4683//2663 4684//2663 4685//2663 4686//2663
+f 4687//2664 4688//2664 4682//2664 4686//2664 4689//2664
+f 4690//2665 4691//2665 4687//2665 4689//2665
+f 4692//2666 4691//2666 4690//2666 4693//2666
+f 4684//2667 4683//2667 4694//2667 4695//2667 4696//2667 4697//2667
+f 4698//2668 4699//2668 4700//2668 4701//2668 4702//2668 4703//2668 4704//2668
+f 4705//2669 4706//2669 4698//2669 4704//2669 4707//2669
+f 4708//2670 4709//2670 4710//2670 4705//2670 4707//2670 4711//2670
+f 4712//2671 4713//2671 4714//2671 4710//2671 4709//2671 4715//2671
+f 4716//2672 4717//2672 4713//2672 4712//2672
+f 4702//2673 4718//2673 4717//2673 4716//2673 4703//2673
+f 4719//2628 4720//2628 4721//2628 4722//2628 4723//2628
+f 4724//2674 4725//2674 4721//2674 4720//2674 4726//2674
+f 4727//2629 4728//2629 4729//2629 4730//2629 4724//2629 4726//2629 4731//2629 4732//2629
+f 4727//2630 4732//2630 4733//2630
+f 4729//2703 4734//2703 4730//2703
+f 4735//2631 4736//2631 4737//2631
+f 4738//2633 4739//2633 4740//2633 4741//2633
+f 4742//2634 4743//2634 4739//2634 4738//2634 4744//2634
+f 4745//2635 4742//2635 4744//2635 4746//2635 4747//2635
+f 4748//2636 4745//2636 4747//2636 4749//2636
+f 4750//2637 4748//2637 4749//2637 4751//2637 4752//2637
+f 4741//2638 4740//2638 4753//2638 4750//2638 4752//2638
+f 4754//2639 4755//2639 4756//2639 4757//2639
+f 4758//2640 4759//2640 4760//2640 4761//2640 4762//2640 4763//2640
+f 4764//2676 4765//2676 4766//2676 4763//2676 4762//2676 4767//2676 4768//2676
+f 4769//2684 4764//2684 4768//2684 4770//2684
+f 4771//2643 4772//2643 4769//2643 4770//2643
+f 4756//2644 4755//2644 4773//2644 4772//2644 4771//2644 4774//2644
+f 4775//2645 4776//2645 4777//2645 4778//2645 4779//2645
+f 4780//2646 4775//2646 4779//2646 4781//2646 4782//2646
+f 4783//2647 4784//2647 4780//2647 4782//2647 4785//2647 4786//2647
+f 4787//2648 4788//2648 4784//2648 4783//2648 4789//2648 4790//2648
+f 4791//2649 4792//2649 4793//2649 4794//2649 4787//2649 4790//2649 4795//2649 4796//2649
+f 4778//2650 4777//2650 4797//2650 4792//2650 4791//2650 4798//2650
+f 4799//2651 4800//2651 4801//2651 4802//2651 4803//2651 4804//2651 4805//2651 4806//2651 4807//2651
+f 4808//2652 4806//2652 4805//2652 4809//2652
+f 4810//2653 4811//2653 4808//2653 4809//2653 4812//2653
+f 4813//2654 4810//2654 4812//2654 4814//2654 4815//2654
+f 4816//2655 4817//2655 4813//2655 4815//2655 4818//2655 4819//2655
+f 4820//2656 4821//2656 4816//2656 4819//2656 4822//2656 4801//2656 4800//2656
+f 4823//2657 4824//2657 4825//2657 4826//2657 4827//2657 4828//2657
+f 4829//2658 4830//2658 4831//2658 4824//2658 4823//2658
+f 4832//2659 4833//2659 4830//2659 4829//2659 4834//2659 4835//2659 4836//2659
+f 4837//2660 4838//2660 4839//2660 4836//2660 4835//2660
+f 4840//2661 4838//2661 4837//2661 4841//2661
+f 4827//2662 4826//2662 4842//2662 4840//2662 4841//2662
+f 4843//2663 4844//2663 4845//2663 4846//2663 4847//2663
+f 4848//2664 4843//2664 4847//2664 4849//2664
+f 4850//2665 4851//2665 4852//2665 4853//2665 4848//2665 4849//2665
+f 4854//2666 4855//2666 4856//2666 4851//2666 4850//2666 4857//2666
+f 4858//2678 4859//2678 4855//2678 4854//2678 4860//2678 4861//2678
+f 4845//2667 4862//2667 4861//2667 4860//2667 4863//2667 4846//2667
+f 4864//2668 4865//2668 4866//2668 4867//2668 4868//2668
+f 4869//2669 4870//2669 4871//2669 4864//2669 4868//2669 4872//2669
+f 4873//2670 4874//2670 4875//2670 4869//2670 4872//2670 4876//2670
+f 4877//2671 4878//2671 4874//2671 4873//2671 4879//2671
+f 4880//2672 4881//2672 4877//2672 4879//2672 4882//2672 4883//2672
+f 4866//2673 4884//2673 4880//2673 4883//2673 4867//2673
+f 4885//2628 4405//2628 4404//2628 4886//2628
+f 4887//2704 4398//2704 4402//2704
+f 4888//2674 4889//2674 4890//2674
+f 4466//2629 4465//2629 4888//2629 4890//2629 4891//2629
+f 4892//2629 4474//2629 4473//2629
+f 4893//2630 4459//2630 4458//2630 4466//2630 4891//2630
+f 4892//2630 4473//2630 4472//2630 4477//2630 4894//2630
+f 4411//2631 4410//2631 4895//2631 4894//2631 4477//2631 4476//2631 4460//2631 4459//2631 4893//2631
+f 4895//2632 4410//2632 4406//2632 4405//2632 4885//2632
+f 4896//2633 4897//2633 4898//2633 4899//2633 4900//2633
+f 4901//2634 4902//2634 4897//2634 4896//2634 4903//2634
+f 4902//2635 4901//2635 4904//2635 4905//2635 4906//2635
+f 4907//2636 4908//2636 4906//2636 4905//2636 4909//2636 4910//2636
+f 4911//2637 4907//2637 4910//2637 4912//2637 4913//2637
+f 4900//2638 4899//2638 4911//2638 4913//2638
+f 4914//2639 4915//2639 4916//2639 4917//2639 4918//2639 4919//2639 4920//2639 4921//2639 4922//2639
+f 4923//2640 4924//2640 4925//2640 4915//2640 4914//2640
+f 4918//2640 4917//2640 4926//2640 4927//2640 4928//2640 4929//2640
+f 4930//2641 4931//2641 4932//2641 4924//2641 4923//2641
+f 4933//2641 4928//2641 4927//2641
+f 4934//2642 4935//2642 4936//2642 4931//2642 4930//2642 4937//2642
+f 4938//2643 4939//2643 4940//2643 4934//2643 4937//2643 4941//2643
+f 4921//2644 4920//2644 4942//2644 4943//2644 4939//2644 4938//2644
+f 4944//2677 4945//2677 4946//2677 4947//2677
+f 4948//2646 4945//2646 4944//2646 4949//2646 4950//2646
+f 4951//2647 4952//2647 4948//2647 4950//2647 4953//2647 4954//2647
+f 4955//2648 4951//2648 4954//2648 4956//2648 4957//2648
+f 4958//2649 4955//2649 4957//2649 4959//2649 4960//2649
+f 4961//2651 4962//2651 4963//2651 4964//2651
+f 4965//2652 4966//2652 4967//2652 4962//2652 4961//2652 4968//2652
+f 4969//2653 4966//2653 4965//2653 4970//2653
+f 4971//2654 4972//2654 4973//2654 4969//2654 4970//2654
+f 4974//2655 4972//2655 4971//2655 4975//2655
+f 4963//2656 4974//2656 4975//2656 4976//2656 4964//2656
+f 4977//2657 4978//2657 4979//2657 4980//2657 4981//2657 4982//2657
+f 4983//2658 4493//2658 4492//2658 4980//2658 4979//2658
+f 4984//2659 4491//2659 4490//2659 4493//2659 4983//2659 4985//2659
+f 4986//2660 4987//2660 4984//2660 4985//2660 4988//2660
+f 4989//2661 4987//2661 4986//2661 4990//2661 4991//2661
+f 4982//2662 4981//2662 4992//2662 4989//2662 4991//2662
+f 4993//2663 4994//2663 4995//2663 4996//2663 4997//2663 4998//2663 4999//2663
+f 5000//2664 4993//2664 4999//2664 5001//2664
+f 5002//2665 5003//2665 5004//2665 5005//2665 5000//2665 5001//2665 5006//2665
+f 5007//2666 5002//2666 5006//2666 5008//2666
+f 4998//2667 4997//2667 5009//2667
+f 5010//2668 5011//2668 5012//2668 5013//2668
+f 5014//2669 5015//2669 5010//2669 5013//2669 5016//2669
+f 5017//2670 5018//2670 5019//2670 5015//2670 5014//2670
+f 5020//2671 5021//2671 5018//2671 5017//2671 5022//2671
+f 5023//2672 5024//2672 5025//2672 5020//2672 5022//2672
+f 5011//2673 5026//2673 5027//2673 5024//2673 5023//2673 5028//2673 5012//2673
+f 5029//2628 5030//2628 5031//2628 5032//2628 5033//2628 5034//2628
+f 5035//2674 5029//2674 5034//2674 5036//2674
+f 5037//2629 5038//2629 5035//2629 5036//2629 5039//2629
+f 5040//2630 5037//2630 5039//2630 5041//2630
+f 5042//2631 5043//2631 5044//2631 5040//2631 5041//2631
+f 5032//2632 5045//2632 5043//2632 5042//2632 5033//2632
+f 5046//2633 5047//2633 5048//2633 5049//2633 5050//2633
+f 5051//2634 5052//2634 5049//2634 5048//2634
+f 5053//2635 5054//2635 5055//2635 5056//2635 5052//2635 5051//2635
+f 5057//2636 5058//2636 5055//2636 5054//2636 5059//2636
+f 5060//2637 5057//2637 5059//2637 5061//2637
+f 5046//2638 5050//2638 5060//2638 5061//2638
+f 5062//2639 5063//2639 5064//2639 5065//2639 5066//2639
+f 5067//2640 5063//2640 5062//2640 5068//2640 5069//2640
+f 5070//2641 5071//2641 5072//2641 5069//2641 5068//2641 5073//2641
+f 5074//2642 5075//2642 5070//2642 5073//2642
+f 5076//2643 5077//2643 5075//2643 5074//2643
+f 5066//2644 5065//2644 5078//2644 5077//2644 5076//2644
+f 5079//2645 5080//2645 5081//2645 5082//2645 5083//2645
+f 5084//2646 5085//2646 5079//2646 5083//2646
+f 5086//2648 5087//2648 5088//2648 5089//2648 5090//2648
+f 5091//2649 5092//2649 5086//2649 5090//2649 5093//2649
+f 5082//2650 5081//2650 5094//2650
+f 5095//2651 5096//2651 5097//2651 5098//2651
+f 5099//2652 5100//2652 5101//2652 5096//2652 5095//2652
+f 5099//2653 5102//2653 5100//2653
+f 5103//2654 5104//2654 5105//2654 5106//2654 5107//2654
+f 5108//2655 5109//2655 5110//2655 5111//2655 5106//2655 5105//2655 5112//2655
+f 5097//2656 5113//2656 5108//2656 5112//2656 5098//2656
+f 5114//2657 5115//2657 5116//2657 5117//2657 5118//2657
+f 5119//2658 5120//2658 5115//2658 5114//2658
+f 5121//2659 5122//2659 5123//2659 5120//2659 5119//2659
+f 5124//2660 5125//2660 5122//2660 5121//2660 5126//2660
+f 5127//2661 5128//2661 5124//2661 5126//2661 5129//2661
+f 5118//2662 5117//2662 5127//2662 5129//2662
+f 5130//2663 5131//2663 5132//2663 5133//2663
+f 5134//2664 5135//2664 5130//2664 5133//2664 5136//2664
+f 5137//2665 4567//2665 4566//2665 5134//2665 5136//2665
+f 4568//2666 4567//2666 5137//2666
+f 5131//2667 4560//2667 4564//2667 5132//2667
+f 4581//2668 4580//2668 4586//2668 5138//2668 5139//2668
+f 5140//2669 4588//2669 4582//2669 4581//2669 5139//2669 5141//2669
+f 5142//2670 5143//2670 5144//2670 5140//2670 5141//2670
+f 5145//2671 5143//2671 5142//2671 5146//2671
+f 5147//2672 4591//2672 4590//2672 5148//2672 4593//2672 4596//2672 5145//2672 5146//2672
+f 4586//2673 4585//2673 4591//2673 5147//2673 5138//2673
+f 5149//2628 5150//2628 5151//2628 5152//2628
+f 5153//2674 5149//2674 5152//2674 5154//2674 5155//2674 5156//2674
+f 5157//2629 5158//2629 5153//2629 5156//2629 5159//2629
+f 5160//2630 5161//2630 5158//2630 5157//2630 5162//2630
+f 5163//2631 5164//2631 5165//2631 5166//2631 5160//2631 5162//2631
+f 5150//2632 5165//2632 5164//2632 5151//2632
+f 5167//2633 5168//2633 5169//2633 5170//2633
+f 5171//2634 5172//2634 5173//2634 5174//2634 5168//2634 5167//2634
+f 5175//2635 5176//2635 5177//2635 5173//2635 5172//2635
+f 5178//2636 5179//2636 5180//2636 5181//2636 5182//2636 5183//2636
+f 5184//2637 5185//2637 5178//2637 5183//2637 5186//2637
+f 5187//2638 5188//2638 5184//2638 5186//2638 5170//2638 5169//2638
+f 5189//2639 5190//2639 5191//2639 5192//2639 5193//2639 5194//2639
+f 5195//2640 5196//2640 5190//2640 5189//2640
+f 5197//2641 5198//2641 5196//2641 5195//2641
+f 5199//2642 5200//2642 5198//2642 5197//2642 5201//2642
+f 5202//2643 5203//2643 5200//2643 5199//2643 5204//2643
+f 5193//2644 5192//2644 5205//2644 5203//2644 5202//2644 5206//2644
+f 5207//2645 5208//2645 4708//2645 4711//2645 5209//2645 5210//2645
+f 5211//2646 5212//2646 5210//2646 5209//2646 5213//2646
+f 5214//2647 5211//2647 5213//2647 5215//2647
+f 5216//2648 5214//2648 5215//2648 5217//2648
+f 5218//2649 5219//2649 5216//2649 5217//2649
+f 4715//2650 4709//2650 4708//2650 5208//2650 5219//2650 5218//2650
+f 5220//2651 5221//2651 5222//2651 5223//2651
+f 5224//2652 5225//2652 5226//2652 5227//2652 5221//2652 5220//2652
+f 5228//2653 5229//2653 5230//2653 5225//2653 5224//2653 5231//2653
+f 5232//2654 5233//2654 5228//2654 5231//2654 5234//2654
+f 5235//2655 5236//2655 5232//2655 5234//2655 5237//2655 5238//2655
+f 5222//2705 5235//2705 5238//2705 5239//2705 5223//2705
+f 5240//2657 5241//2657 5242//2657 5243//2657
+f 5244//2658 5245//2658 5241//2658 5240//2658
+f 5246//2659 5247//2659 5248//2659 5249//2659 5245//2659 5244//2659
+f 5248//2660 5247//2660 5250//2660 5251//2660 5252//2660
+f 5253//2690 5252//2690 5251//2690 5254//2690
+f 5243//2662 5242//2662 5255//2662 5253//2662 5254//2662
+f 5256//2663 5257//2663 5258//2663 5259//2663
+f 5260//2664 5261//2664 5262//2664 5256//2664 5259//2664 5263//2664
+f 5264//2665 5261//2665 5260//2665 5265//2665
+f 5266//2666 5267//2666 5264//2666 5265//2666 5268//2666
+f 5269//2678 5270//2678 5267//2678 5266//2678 5271//2678
+f 5257//2667 5269//2667 5271//2667 5258//2667
+f 5272//2668 5273//2668 5274//2668 5275//2668 5276//2668 5277//2668
+f 5272//2669 5277//2669 5278//2669 5279//2669
+f 5280//2671 5281//2671 5282//2671 5283//2671
+f 5284//2672 5285//2672 5286//2672 5287//2672 5280//2672 5283//2672
+f 5275//2673 5274//2673 5288//2673 5285//2673 5284//2673 5289//2673
+f 5290//2628 5291//2628 5292//2628 5293//2628
+f 4760//2629 4759//2629 5294//2629 5295//2629
+f 5296//2630 4754//2630 4757//2630
+f 4760//2630 5295//2630 4761//2630
+f 5297//2631 4773//2631 4755//2631 4754//2631 5296//2631 5298//2631
+f 5292//2632 5299//2632 5300//2632 5301//2632 5297//2632 5298//2632 5302//2632 5293//2632
+f 5303//2633 5304//2633 5305//2633 5306//2633 5307//2633 5308//2633 5309//2633 5310//2633 5311//2633
+f 5312//2634 5303//2634 5311//2634 5313//2634
+f 5314//2635 5312//2635 5313//2635 5315//2635
+f 5316//2636 5314//2636 5315//2636 5317//2636 5318//2636
+f 5319//2637 5320//2637 5321//2637 5322//2637 5316//2637 5318//2637 5323//2637
+f 5308//2638 5307//2638 5324//2638
+f 5321//2638 5325//2638 5305//2638 5304//2638 5322//2638
+f 5326//2639 5327//2639 5328//2639 5329//2639 5330//2639
+f 5307//2640 5306//2640 5331//2640 5332//2640 5333//2640 5327//2640 5326//2640 5324//2640
+f 5334//2641 5335//2641 5320//2641 5319//2641
+f 5331//2676 5306//2676 5305//2676 5325//2676 5336//2676
+f 5325//2642 5321//2642 5320//2642 5335//2642 5337//2642 5338//2642 5339//2642 5336//2642
+f 5340//2643 5339//2643 5338//2643 5341//2643
+f 5330//2644 5329//2644 5342//2644 5340//2644 5341//2644
+f 5343//2645 5344//2645 5345//2645 5346//2645 5347//2645 5348//2645
+f 5349//2646 5350//2646 5344//2646 5343//2646
+f 5351//2648 5352//2648 5353//2648 5354//2648 5355//2648
+f 5356//2649 5357//2649 5358//2649 5351//2649 5355//2649
+f 5347//2650 5346//2650 5357//2650 5356//2650
+f 5359//2651 5360//2651 5361//2651 5362//2651
+f 5363//2652 4862//2652 4845//2652 4844//2652 5360//2652 5359//2652 5364//2652
+f 4858//2653 4861//2653 4862//2653 5363//2653 5365//2653
+f 5366//2654 4859//2654 4858//2654 5365//2654 5367//2654 5368//2654
+f 5369//2655 5370//2655 5368//2655 5367//2655 5371//2655 5372//2655
+f 5361//2656 5369//2656 5372//2656 5362//2656
+f 5373//2657 5374//2657 5375//2657 5376//2657 5377//2657
+f 5378//2658 5374//2658 5373//2658 5379//2658
+f 5380//2659 4919//2659 4918//2659 4929//2659 5378//2659 5379//2659
+f 5381//2660 4942//2660 4920//2660 4919//2660 5380//2660
+f 5382//2661 4943//2661 4942//2661 5381//2661 5383//2661
+f 5376//2662 5382//2662 5383//2662 5377//2662
+f 5384//2663 5385//2663 5386//2663 5387//2663 5388//2663 5389//2663 5390//2663
+f 5391//2664 5390//2664 5389//2664 5392//2664 5393//2664
+f 5394//2682 5395//2682 5396//2682 5391//2682 5393//2682
+f 5397//2666 5398//2666 5399//2666 5395//2666 5394//2666
+f 5400//2678 5401//2678 5398//2678 5397//2678 5402//2678 5403//2678
+f 5386//2667 5404//2667 5403//2667 5402//2667 5387//2667
+f 5405//2668 5406//2668 5407//2668 5408//2668 5409//2668
+f 5410//2669 5411//2669 5405//2669 5409//2669 5412//2669 5413//2669
+f 5414//2670 5415//2670 5410//2670 5413//2670
+f 5416//2671 5417//2671 5418//2671 5415//2671 5414//2671 5419//2671
+f 5420//2672 5421//2672 5422//2672 5423//2672 5417//2672 5416//2672
+f 5407//2673 5424//2673 5421//2673 5420//2673 5408//2673
+f 5425//2628 5426//2628 5427//2628
+f 5428//2629 5429//2629 5430//2629 5431//2629 5432//2629 5433//2629
+f 5434//2630 5435//2630 5428//2630 5433//2630
+f 5436//2631 5437//2631 5438//2631 5435//2631 5434//2631
+f 5436//2632 5439//2632 5437//2632
+f 5440//2633 5441//2633 5442//2633 5443//2633
+f 4946//2634 5441//2634 5440//2634 4947//2634
+f 5443//2638 5442//2638 5444//2638 5445//2638 5446//2638
+f 5447//2639 5448//2639 5449//2639 5450//2639 5451//2639
+f 5449//2640 5448//2640 5452//2640 5453//2640
+f 5454//2641 5455//2641 5453//2641 5452//2641
+f 5456//2684 5457//2684 5458//2684 5459//2684 5455//2684 5454//2684
+f 5460//2643 5458//2643 5457//2643 5461//2643
+f 5451//2644 5450//2644 5462//2644 5460//2644 5461//2644
+f 5463//2645 5464//2645 5465//2645
+f 5466//2646 5467//2646 5468//2646 5464//2646 5463//2646 5469//2646
+f 5470//2647 5471//2647 5466//2647 5469//2647 5472//2647
+f 5473//2648 5474//2648 5470//2648 5472//2648 5475//2648
+f 5476//2649 5477//2649 5478//2649 5473//2649 5475//2649
+f 5477//2650 5476//2650 5479//2650
+f 5480//2651 5481//2651 5482//2651 5483//2651 5484//2651
+f 4997//2652 4996//2652 5485//2652 5481//2652 5480//2652 5009//2652
+f 5486//2654 5487//2654 5488//2654 5489//2654 5490//2654 5491//2654
+f 5492//2655 5493//2655 5489//2655 5488//2655 5494//2655
+f 5483//2656 5495//2656 5492//2656 5494//2656 5484//2656
+f 5496//2657 4456//2657 4455//2657 5497//2657 5498//2657
+f 4453//2658 4452//2658 4456//2658 5496//2658 5499//2658
+f 4449//2659 4448//2659 4453//2659 5499//2659 5500//2659 5501//2659 5502//2659
+f 5503//2660 5504//2660 5505//2660 5506//2660 5501//2660 5500//2660
+f 5507//2690 5505//2690 5504//2690 5508//2690 5509//2690
+f 5497//2662 5507//2662 5509//2662 5498//2662
+f 5510//2663 5511//2663 5512//2663 5513//2663
+f 5514//2664 5510//2664 5513//2664 5515//2664
+f 5516//2665 4464//2665 4463//2665 5514//2665 5515//2665 5517//2665
+f 4888//2666 4465//2666 4464//2666 5516//2666 4889//2666
+f 5518//2678 4399//2678 4398//2678 4887//2678
+f 5511//2667 5519//2667 4886//2667 4404//2667 4400//2667 4399//2667 5518//2667 5512//2667
+f 5520//2668 5521//2668 5522//2668 5523//2668 5524//2668
+f 5525//2669 5526//2669 5520//2669 5524//2669 5527//2669 5528//2669
+f 5529//2670 5530//2670 5526//2670 5525//2670
+f 5531//2671 5532//2671 5530//2671 5529//2671 5533//2671 5534//2671
+f 5533//2686 5529//2686 5525//2686 5528//2686
+f 5535//2672 5532//2672 5531//2672 5536//2672
+f 5522//2673 5537//2673 5535//2673 5536//2673 5523//2673
+f 5538//2628 5539//2628 5540//2628 5541//2628 5542//2628 5543//2628
+f 5544//2674 5538//2674 5543//2674 5545//2674
+f 5546//2629 5547//2629 5544//2629 5545//2629 5548//2629
+f 5549//2630 5550//2630 5546//2630 5548//2630
+f 5551//2631 5552//2631 5553//2631 5550//2631 5549//2631
+f 5541//2632 5554//2632 5552//2632 5551//2632 5542//2632
+f 5555//2633 4933//2633 4927//2633 4926//2633 5556//2633 5557//2633 5558//2633
+f 5559//2634 5555//2634 5558//2634 5560//2634
+f 5561//2635 5559//2635 5560//2635 5562//2635 5563//2635
+f 5564//2636 5565//2636 4925//2636 4924//2636 4932//2636 5566//2636 5561//2636 5563//2636 5567//2636
+f 4916//2637 4915//2637 4925//2637 5565//2637 5568//2637 5569//2637 5570//2637
+f 5566//2637 4932//2637 4931//2637 4936//2637 5571//2637
+f 5556//2638 4926//2638 4917//2638 4916//2638 5570//2638
+f 5571//2680 4936//2680 4935//2680
+f 5572//2639 5573//2639 5574//2639 5575//2639 5576//2639 5577//2639 5578//2639
+f 5579//2640 5580//2640 5581//2640 5573//2640 5572//2640 5582//2640
+f 5583//2641 5584//2641 5585//2641 5586//2641 5579//2641 5582//2641
+f 5587//2642 5588//2642 5589//2642 5584//2642 5583//2642
+f 5590//2643 5588//2643 5587//2643 5591//2643
+f 5578//2644 5577//2644 5592//2644 5590//2644 5591//2644
+f 5593//2645 5594//2645 5595//2645 5596//2645 5597//2645 5598//2645 5599//2645
+f 5600//2646 5596//2646 5595//2646 5601//2646 5602//2646
+f 5603//2648 5604//2648 5605//2648 5606//2648 5607//2648
+f 5608//2649 5609//2649 5610//2649 5603//2649 5607//2649 5611//2649
+f 5598//2650 5597//2650 5608//2650 5611//2650
+f 5612//2651 5613//2651 5614//2651 5615//2651
+f 5616//2652 5613//2652 5612//2652 5617//2652
+f 5618//2653 5619//2653 5616//2653 5617//2653 5620//2653 5621//2653
+f 5622//2654 5623//2654 5624//2654 5618//2654 5621//2654
+f 5625//2655 5626//2655 5623//2655 5622//2655
+f 5614//2656 5626//2656 5625//2656 5627//2656 5615//2656
+f 5628//2657 4604//2657 4603//2657 5629//2657
+f 4598//2658 4597//2658 4604//2658 5628//2658 5630//2658
+f 4590//2659 4589//2659 4598//2659 5630//2659 5631//2659 5148//2659
+f 4600//2660 4594//2660 4593//2660 5148//2660 5631//2660 5632//2660 5633//2660
+f 5634//2690 5633//2690 5632//2690 5635//2690
+f 5629//2662 4603//2662 4602//2662 5634//2662 5635//2662
+f 5636//2663 5637//2663 5638//2663 5639//2663 5640//2663
+f 5641//2664 5642//2664 5643//2664 5644//2664 5637//2664 5636//2664
+f 5644//2665 5643//2665 5645//2665 5646//2665 5647//2665
+f 5646//2666 5648//2666 5649//2666 5650//2666 5647//2666
+f 5648//2678 5651//2678 5652//2678 5653//2678 5654//2678 5649//2678
+f 5639//2667 5654//2667 5653//2667 5640//2667
+f 5655//2668 5656//2668 5657//2668 5658//2668 5659//2668
+f 5660//2669 5661//2669 5662//2669 5663//2669 5655//2669 5659//2669
+f 5664//2670 5662//2670 5661//2670 5665//2670 5666//2670
+f 5667//2671 5668//2671 5664//2671 5666//2671
+f 5669//2672 5670//2672 5671//2672 5672//2672 5668//2672 5667//2672
+f 5658//2673 5657//2673 5673//2673 5670//2673 5669//2673
+f 5674//2628 5675//2628 5676//2628 5677//2628 5678//2628
+f 5679//2629 5680//2629 5681//2629 5682//2629
+f 5683//2630 5684//2630 5680//2630 5679//2630 5685//2630
+f 5686//2631 5687//2631 5688//2631 5689//2631 5684//2631 5683//2631
+f 5675//2632 5690//2632 5687//2632 5686//2632 5676//2632
+f 5691//2633 5692//2633 5693//2633 5694//2633 5695//2633
+f 5696//2634 5697//2634 5698//2634 5692//2634 5691//2634 5699//2634
+f 5700//2635 5701//2635 5697//2635 5696//2635
+f 5702//2636 5703//2636 5704//2636 5705//2636 5706//2636 5707//2636
+f 5708//2637 5702//2637 5707//2637 5709//2637
+f 5695//2638 5694//2638 5710//2638 5708//2638 5709//2638 5711//2638
+f 5229//2639 5228//2639 5233//2639 5712//2639 5713//2639 5714//2639
+f 5715//2640 5716//2640 5230//2640 5229//2640 5714//2640 5717//2640
+f 5718//2676 5719//2676 5716//2676 5715//2676 5720//2676
+f 5721//2642 5722//2642 5723//2642 5724//2642 5719//2642 5718//2642
+f 5725//2643 5723//2643 5722//2643 5726//2643
+f 5712//2644 5233//2644 5232//2644 5236//2644 5727//2644 5725//2644 5726//2644 5728//2644
+f 5729//2645 5730//2645 5731//2645 5732//2645 5733//2645 5734//2645
+f 5688//2646 5687//2646 5690//2646 5730//2646 5729//2646 5735//2646
+f 5688//2647 5735//2647 5736//2647 5737//2647 5738//2647 5689//2647
+f 5739//2648 5740//2648 5738//2648 5737//2648 5741//2648
+f 5742//2649 5743//2649 5739//2649 5741//2649
+f 5733//2650 5732//2650 5743//2650 5742//2650
+f 5744//2651 5745//2651 5746//2651 5747//2651
+f 4722//2652 5745//2652 5744//2652 4723//2652
+f 5748//2654 5749//2654 5750//2654 4735//2654 4737//2654
+f 5751//2655 5752//2655 5749//2655 5748//2655 5753//2655
+f 5746//2656 5751//2656 5753//2656 5747//2656
+f 5754//2657 5755//2657 5756//2657 5757//2657
+f 5758//2658 5288//2658 5274//2658 5273//2658 5754//2658 5757//2658
+f 5759//2659 5286//2659 5285//2659 5288//2659 5758//2659 5760//2659
+f 5761//2660 5762//2660 5287//2660 5286//2660 5759//2660
+f 5763//2661 5764//2661 5765//2661 5762//2661 5761//2661 5766//2661
+f 5755//2662 5767//2662 5765//2662 5764//2662 5768//2662 5756//2662
+f 5769//2663 5770//2663 5771//2663 5772//2663
+f 5773//2664 5774//2664 5769//2664 5772//2664 5775//2664
+f 5776//2665 4758//2665 4763//2665 4766//2665 5777//2665 5773//2665 5775//2665 5778//2665
+f 4766//2706 4765//2706 5777//2706
+f 4759//2666 4758//2666 5776//2666 5294//2666
+f 5301//2707 5300//2707 5779//2707
+f 5779//2675 5300//2675 5299//2675 5780//2675
+f 5771//2667 5770//2667 5291//2667 5290//2667
+f 5781//2668 5782//2668 5783//2668 5784//2668
+f 5785//2669 5786//2669 5781//2669 5784//2669 4625//2669 4620//2669 4619//2669
+f 5787//2670 5788//2670 5789//2670 5785//2670 4619//2670 4618//2670 5790//2670 5791//2670
+f 5792//2671 5793//2671 5787//2671 5791//2671 5794//2671 5795//2671
+f 5796//2672 5797//2672 5795//2672 5794//2672
+f 5798//2628 5799//2628 5800//2628 5801//2628
+f 5802//2674 5798//2674 5801//2674 5803//2674
+f 5804//2629 5333//2629 5332//2629 5805//2629 5802//2629 5803//2629
+f 5328//2630 5327//2630 5333//2630 5804//2630 5806//2630 5807//2630
+f 5808//2631 5342//2631 5329//2631 5328//2631 5807//2631 5809//2631 5810//2631
+f 5799//2632 5811//2632 5808//2632 5810//2632 5800//2632
+f 5812//2633 5813//2633 5814//2633 5815//2633 5816//2633
+f 5817//2634 5818//2634 5813//2634 5812//2634 5819//2634
+f 5820//2635 5821//2635 5822//2635 5818//2635 5817//2635 5823//2635 5824//2635 5825//2635
+f 4833//2636 4832//2636 5825//2636 5824//2636 5826//2636
+f 4831//2637 4830//2637 4833//2637 5826//2637 5827//2637
+f 5815//2638 4825//2638 4824//2638 4831//2638 5827//2638 5816//2638
+f 4856//2639 4855//2639 4859//2639 5366//2639 5828//2639 5829//2639
+f 4851//2640 4856//2640 5829//2640 5830//2640 4852//2640
+f 5831//2641 5832//2641 4853//2641 4852//2641 5830//2641
+f 5833//2642 5834//2642 5832//2642 5831//2642
+f 5835//2643 5834//2643 5833//2643 5836//2643
+f 5828//2644 5366//2644 5368//2644 5370//2644 5835//2644 5836//2644
+f 5837//2677 5838//2677 5839//2677 5840//2677
+f 5841//2646 5838//2646 5837//2646 5842//2646
+f 5843//2647 5844//2647 5841//2647 5842//2647 5845//2647 5846//2647
+f 5847//2648 5848//2648 5843//2648 5846//2648 5849//2648
+f 5850//2649 5851//2649 5847//2649 5849//2649
+f 5840//2650 5839//2650 5851//2650 5850//2650 5852//2650
+f 5853//2651 5854//2651 5855//2651 5856//2651 5857//2651
+f 5858//2652 5404//2652 5386//2652 5385//2652 5854//2652 5853//2652
+f 5400//2653 5403//2653 5404//2653 5858//2653 5859//2653
+f 5860//2654 5401//2654 5400//2654 5859//2654 5861//2654 5862//2654 5863//2654
+f 5864//2655 5865//2655 5863//2655 5862//2655 5866//2655
+f 5855//2656 5864//2656 5866//2656 5856//2656
+f 5867//2657 5868//2657 5869//2657 5870//2657 5871//2657
+f 5872//2658 5873//2658 5874//2658 5875//2658 5876//2658 5868//2658 5867//2658
+f 5877//2659 5878//2659 5879//2659 5880//2659 5873//2659 5872//2659
+f 5881//2660 5882//2660 5883//2660 5884//2660 5879//2660 5878//2660
+f 5885//2661 5886//2661 5882//2661 5881//2661 5887//2661 5888//2661
+f 5871//2662 5870//2662 5889//2662 5890//2662 5885//2662 5888//2662 5891//2662 5892//2662
+f 5893//2663 5894//2663 5895//2663 5896//2663 5897//2663
+f 5898//2664 5899//2664 5893//2664 5897//2664 5900//2664
+f 5901//2682 5430//2682 5429//2682 5898//2682 5900//2682
+f 5431//2666 5430//2666 5901//2666
+f 5896//2667 5895//2667 5902//2667 5425//2667 5427//2667 5903//2667
+f 5904//2668 5905//2668 5906//2668 5907//2668 5908//2668
+f 5909//2669 5910//2669 5904//2669 5908//2669 5911//2669 5912//2669
+f 5913//2670 5910//2670 5909//2670 5914//2670
+f 5915//2671 5916//2671 5913//2671 5914//2671 5917//2671
+f 5918//2672 5919//2672 5916//2672 5915//2672 5920//2672
+f 5906//2673 5918//2673 5920//2673 5921//2673 5907//2673
+f 5922//2628 5923//2628 5924//2628 5925//2628
+f 5926//2629 5927//2629 5928//2629 5929//2629
+f 5930//2630 5931//2630 5932//2630 5926//2630 5929//2630 5933//2630 5934//2630
+f 5935//2631 5936//2631 5934//2631 5933//2631 5937//2631
+f 5924//2632 5938//2632 5936//2632 5935//2632 5925//2632
+f 5939//2633 5940//2633 5941//2633 5942//2633 5943//2633 5944//2633
+f 5945//2634 5946//2634 5947//2634 5940//2634 5939//2634
+f 5465//2635 5464//2635 5468//2635 5946//2635 5945//2635 5948//2635
+f 5949//2636 5478//2636 5477//2636 5479//2636 5950//2636
+f 5951//2637 5952//2637 5949//2637 5950//2637 5953//2637 5954//2637
+f 5942//2638 5941//2638 5951//2638 5954//2638
+f 5955//2639 5491//2639 5490//2639 5956//2639 5957//2639 5958//2639
+f 5959//2640 5960//2640 5003//2640 5002//2640 5007//2640 5961//2640 5958//2640 5957//2640 5962//2640
+f 5963//2641 5964//2641 5959//2641 5962//2641 5965//2641 5966//2641
+f 5967//2684 5968//2684 5969//2684 5964//2684 5963//2684
+f 5970//2643 5971//2643 5972//2643 5968//2643 5967//2643
+f 5956//2644 5490//2644 5489//2644 5493//2644 5971//2644 5970//2644 5973//2644 5974//2644
+f 5975//2645 4443//2645 4442//2645 4447//2645 5976//2645 5977//2645
+f 5978//2646 5975//2646 5977//2646 5979//2646
+f 5980//2647 5978//2647 5979//2647 5981//2647
+f 5982//2648 5983//2648 5980//2648 5981//2648 5984//2648 5985//2648
+f 5986//2649 5502//2649 5501//2649 5506//2649 5982//2649 5985//2649
+f 4449//2650 5502//2650 5986//2650 4450//2650
+f 5987//2651 5988//2651 5989//2651 5990//2651 5991//2651 5992//2651 5993//2651
+f 5994//2652 5031//2652 5030//2652 5987//2652 5993//2652
+f 5045//2653 5032//2653 5031//2653 5994//2653 5995//2653
+f 5996//2654 5044//2654 5043//2654 5045//2654 5995//2654 5997//2654
+f 5998//2655 5996//2655 5997//2655 5999//2655
+f 5990//2656 6000//2656 5998//2656 5999//2656 6001//2656 5991//2656
+f 6002//2657 6003//2657 6004//2657 6005//2657 6006//2657
+f 6007//2658 6002//2658 6006//2658 6008//2658
+f 6009//2659 6010//2659 6007//2659 6008//2659
+f 6011//2660 6012//2660 6010//2660 6009//2660
+f 6013//2690 6014//2690 6012//2690 6011//2690 6015//2690 6016//2690
+f 6004//2662 6003//2662 6017//2662 6013//2662 6016//2662
+f 6018//2663 6019//2663 6020//2663 6021//2663 6022//2663
+f 6023//2664 6024//2664 6019//2664 6018//2664 6025//2664
+f 6026//2665 5067//2665 5069//2665 5072//2665 6027//2665 6023//2665 6025//2665
+f 6028//2666 5064//2666 5063//2666 5067//2666 6026//2666
+f 5072//2708 5071//2708 6027//2708
+f 6029//2678 5078//2678 5065//2678 5064//2678 6028//2678 6030//2678
+f 6021//2667 6029//2667 6030//2667 6022//2667
+f 6031//2668 6032//2668 6033//2668 5085//2668 5084//2668
+f 6034//2669 6033//2669 6032//2669 6035//2669 6036//2669 6037//2669
+f 6038//2670 6039//2670 6040//2670 6034//2670 6037//2670 6041//2670
+f 6042//2671 6043//2671 6039//2671 6038//2671 6044//2671
+f 5087//2672 6043//2672 6042//2672 5088//2672
+f 6045//2628 5101//2628 5100//2628 5102//2628 6046//2628
+f 6047//2674 6048//2674 6045//2674 6046//2674 6049//2674
+f 6050//2629 6051//2629 6047//2629 6049//2629
+f 6052//2630 6053//2630 6051//2630 6050//2630
+f 6054//2631 5103//2631 5107//2631 6053//2631 6052//2631
+f 5110//2631 6055//2631 5111//2631
+f 5104//2632 5103//2632 6054//2632
+f 5110//2632 5109//2632 6055//2632
+f 6056//2633 6057//2633 6058//2633 6059//2633 6060//2633
+f 6061//2634 6062//2634 6063//2634 6057//2634 6056//2634
+f 6064//2635 6062//2635 6061//2635 6065//2635
+f 6066//2636 6067//2636 6064//2636 6065//2636 6068//2636
+f 6069//2637 6070//2637 6071//2637 6066//2637 6068//2637 6072//2637
+f 6060//2638 6059//2638 6073//2638 6069//2638 6072//2638
+f 6074//2639 6075//2639 6076//2639 6077//2639 6078//2639 6079//2639
+f 6080//2640 6081//2640 6082//2640 6083//2640 6075//2640 6074//2640 6084//2640
+f 6085//2641 6086//2641 6081//2641 6080//2641
+f 6086//2642 6085//2642 6087//2642 6088//2642
+f 6089//2643 6090//2643 6091//2643 6088//2643 6087//2643
+f 6092//2644 6093//2644 6078//2644 6077//2644 6094//2644 6090//2644 6089//2644
+f 6095//2677 6096//2677 6097//2677 6098//2677 6099//2677
+f 6100//2646 6101//2646 6102//2646 6096//2646 6095//2646 6103//2646
+f 6100//2647 6104//2647 6105//2647 6106//2647 6101//2647
+f 6107//2648 6106//2648 6105//2648 6108//2648 6109//2648 6110//2648 6111//2648
+f 6112//2649 6113//2649 6111//2649 6110//2649
+f 6098//2650 6097//2650 6113//2650 6112//2650 6114//2650
+f 6115//2651 6116//2651 6117//2651 6118//2651 6119//2651
+f 6120//2652 6121//2652 6116//2652 6115//2652
+f 6122//2653 4606//2653 4605//2653 4612//2653 6121//2653 6120//2653
+f 6123//2654 4626//2654 4607//2654 4606//2654 6122//2654
+f 6124//2655 4623//2655 4626//2655 6123//2655 6125//2655
+f 6118//2656 6124//2656 6125//2656 6119//2656
+f 6126//2657 6127//2657 6128//2657 6129//2657
+f 5673//2658 5657//2658 5656//2658 6126//2658 6129//2658 6130//2658
+f 5670//2659 5673//2659 6130//2659 6131//2659 5671//2659
+f 6132//2660 6133//2660 5672//2660 5671//2660 6131//2660 6134//2660
+f 6135//2690 6136//2690 6133//2690 6132//2690
+f 6128//2662 6127//2662 6137//2662 6136//2662 6135//2662 6138//2662
+f 6139//2663 6140//2663 6141//2663 6142//2663
+f 6143//2664 6140//2664 6139//2664 6144//2664
+f 6145//2665 6146//2665 6143//2665 6144//2665
+f 5682//2666 5681//2666 6146//2666 6145//2666
+f 6142//2667 6141//2667 5674//2667 5678//2667
+f 6147//2668 5698//2668 5697//2668 5701//2668 6148//2668 6149//2668 6150//2668
+f 6151//2669 6152//2669 6153//2669 6147//2669 6150//2669
+f 6078//2670 6093//2670 6154//2670 6155//2670 6152//2670 6151//2670 6079//2670
+f 6093//2671 6092//2671 6156//2671 6157//2671 6158//2671 6159//2671 6154//2671
+f 6160//2672 5704//2672 5703//2672 6161//2672 6162//2672 6163//2672 6157//2672 6156//2672 6164//2672 6165//2672
+f 5701//2673 5700//2673 6148//2673
+f 5704//2673 6160//2673 6166//2673 6167//2673 5705//2673
+f 4695//2628 6168//2628 6169//2628 4696//2628
+f 6170//2629 6171//2629 4692//2629 4693//2629
+f 6172//2630 6173//2630 6171//2630 6170//2630 6174//2630
+f 6175//2631 6176//2631 6172//2631 6174//2631 6177//2631
+f 6168//2632 6176//2632 6175//2632 6169//2632
+f 6178//2633 6179//2633 6180//2633 6181//2633
+f 6182//2634 6183//2634 6179//2634 6178//2634
+f 6184//2635 6183//2635 6182//2635 6185//2635
+f 6186//2636 6187//2636 6184//2636 6185//2636 6188//2636
+f 6189//2637 6190//2637 6186//2637 6188//2637 6191//2637 6192//2637
+f 6181//2638 6180//2638 6189//2638 6192//2638 6193//2638
+f 4735//2639 5750//2639 6194//2639 4736//2639
+f 4727//2640 4733//2640 6195//2640 4728//2640
+f 6196//2641 4734//2641 4729//2641 4728//2641 6195//2641 6197//2641
+f 6198//2642 6199//2642 6196//2642 6197//2642
+f 6200//2643 6201//2643 6202//2643 6199//2643 6198//2643
+f 6194//2644 5750//2644 5749//2644 5752//2644 6201//2644 6200//2644
+f 6203//2677 6204//2677 6205//2677 6206//2677
+f 5027//2646 5026//2646 6204//2646 6203//2646 6207//2646 6208//2646
+f 6209//2647 5025//2647 5024//2647 5027//2647 6208//2647 6210//2647
+f 6211//2648 6212//2648 6209//2648 6210//2648 6213//2648
+f 6214//2649 6215//2649 6211//2649 6213//2649
+f 6206//2650 6205//2650 6216//2650 6215//2650 6214//2650 6217//2650
+f 6218//2651 6219//2651 6104//2651 6100//2651 6103//2651 6220//2651 6221//2651
+f 6222//2652 6223//2652 6218//2652 6221//2652 6224//2652
+f 6225//2653 6222//2653 6224//2653 6226//2653
+f 6227//2654 6228//2654 6225//2654 6226//2654 6229//2654
+f 6109//2655 6108//2655 6230//2655 6231//2655 6228//2655 6227//2655
+f 6108//2656 6105//2656 6104//2656 6219//2656 6230//2656
+f 6232//2657 6233//2657 6234//2657 6235//2657 6236//2657
+f 6237//2658 4797//2658 4777//2658 4776//2658 6232//2658 6236//2658
+f 6238//2659 4793//2659 4792//2659 4797//2659 6237//2659 6239//2659
+f 6240//2660 6241//2660 4794//2660 4793//2660 6238//2660
+f 6242//2661 6241//2661 6240//2661 6243//2661
+f 6244//2662 6245//2662 6242//2662 6243//2662 6246//2662 6235//2662 6234//2662
+f 6247//2663 6248//2663 6249//2663 6250//2663 6251//2663
+f 6252//2664 6253//2664 6249//2664 6248//2664 6254//2664
+f 6255//2665 6256//2665 6252//2665 6254//2665 6257//2665
+f 6258//2666 6259//2666 6255//2666 6257//2666
+f 6260//2678 6261//2678 6259//2678 6258//2678 6262//2678
+f 6263//2667 6264//2667 6261//2667 6260//2667 6251//2667 6250//2667
+f 6265//2668 5350//2668 5349//2668 6266//2668
+f 6267//2669 6268//2669 6265//2669 6266//2669
+f 6269//2670 6270//2670 6268//2670 6267//2670
+f 6271//2671 6272//2671 6270//2671 6269//2671
+f 5352//2709 6272//2709 6271//2709 5353//2709
+f 6273//2628 6274//2628 6275//2628 6276//2628 6277//2628
+f 6278//2674 6279//2674 6273//2674 6277//2674 6280//2674
+f 6281//2629 6282//2629 6278//2629 6280//2629
+f 6283//2630 6284//2630 6285//2630 6282//2630 6281//2630
+f 6286//2631 6287//2631 6284//2631 6283//2631
+f 6275//2632 6288//2632 6287//2632 6286//2632 6276//2632
+f 6289//2633 6290//2633 6291//2633 6292//2633
+f 6293//2634 6294//2634 6295//2634 6290//2634 6289//2634
+f 6296//2635 6297//2635 6294//2635 6293//2635 6298//2635
+f 6299//2636 6296//2636 6298//2636 6300//2636
+f 6301//2637 6302//2637 6299//2637 6300//2637 6303//2637 6304//2637
+f 6292//2638 6291//2638 6305//2638 6304//2638 6303//2638
+f 6306//2639 5399//2639 5398//2639 5401//2639 5860//2639 6307//2639
+f 6308//2640 6309//2640 5396//2640 5395//2640 5399//2640 6306//2640
+f 6310//2641 6311//2641 6309//2641 6308//2641 6312//2641 6313//2641
+f 6314//2642 6315//2642 6316//2642 6311//2642 6310//2642
+f 6317//2643 6315//2643 6314//2643 6318//2643 6319//2643 6320//2643
+f 6307//2644 5860//2644 5863//2644 5865//2644 6317//2644 6320//2644
+f 6321//2677 5875//2677 5874//2677 6322//2677 6323//2677
+f 5424//2646 5407//2646 5406//2646 6321//2646 6323//2646 6324//2646
+f 5422//2647 5421//2647 5424//2647 6324//2647 6325//2647
+f 6326//2648 5423//2648 5422//2648 6325//2648 6327//2648
+f 6328//2649 5880//2649 5879//2649 5884//2649 6326//2649 6327//2649
+f 6322//2650 5874//2650 5873//2650 5880//2650 6328//2650
+f 6329//2651 6330//2651 6331//2651 6332//2651
+f 6333//2652 5902//2652 5895//2652 5894//2652 6330//2652 6329//2652
+f 5902//2653 6333//2653 5426//2653 5425//2653
+f 6334//2654 5438//2654 5437//2654 5439//2654 6335//2654
+f 6336//2655 6334//2655 6335//2655 6337//2655
+f 6331//2656 6338//2656 6336//2656 6337//2656 6332//2656
+f 5444//2657 6339//2657 6340//2657 5445//2657
+f 6341//2660 6342//2660 4958//2660 4960//2660 6343//2660
+f 6344//2661 6345//2661 6342//2661 6341//2661 6346//2661
+f 6340//2662 6339//2662 6344//2662 6346//2662 6347//2662
+f 6348//2663 6349//2663 6350//2663 6351//2663 6352//2663
+f 6353//2664 6348//2664 6352//2664 6354//2664 6355//2664
+f 6356//2665 6357//2665 6353//2665 6355//2665 6358//2665
+f 5928//2666 5927//2666 6356//2666 6358//2666
+f 6350//2667 5923//2667 5922//2667 6351//2667
+f 6359//2668 5947//2668 5946//2668 5468//2668 5467//2668 6360//2668 6361//2668 6362//2668
+f 6363//2669 6364//2669 6365//2669 6366//2669 6359//2669 6362//2669
+f 6367//2670 6368//2670 6365//2670 6364//2670 6369//2670 6370//2670 6371//2670
+f 6372//2671 6373//2671 6368//2671 6367//2671
+f 6374//2672 5471//2672 5470//2672 5474//2672 6373//2672 6372//2672 6375//2672
+f 5467//2673 5466//2673 5471//2673 6374//2673 6360//2673
+f 5485//2710 4996//2710 4995//2710 6376//2710
+f 4994//2674 6376//2674 4995//2674
+f 6377//2674 5005//2674 5004//2674
+f 5961//2629 5007//2629 5008//2629 6378//2629
+f 5004//2629 5003//2629 5960//2629 6377//2629
+f 5955//2630 5958//2630 5961//2630 6378//2630 6379//2630
+f 6380//2631 5486//2631 5491//2631 5955//2631 6379//2631
+f 5487//2632 5486//2632 6380//2632
+f 6381//2633 6382//2633 6383//2633 6384//2633
+f 5764//2634 5763//2634 6385//2634 6386//2634 6387//2634 6382//2634 6381//2634 5768//2634
+f 6388//2635 6387//2635 6386//2635 6389//2635
+f 6390//2636 6391//2636 6388//2636 6389//2636 6392//2636
+f 6393//2637 6390//2637 6392//2637 6394//2637
+f 6384//2638 6383//2638 6395//2638 6393//2638 6394//2638 6396//2638
+f 6397//2639 6398//2639 6399//2639 6400//2639 6401//2639
+f 6397//2640 6401//2640 6402//2640 6403//2640
+f 6403//2641 6402//2641 6404//2641 6405//2641 6406//2641
+f 6407//2642 6408//2642 6409//2642 6406//2642 6405//2642
+f 6410//2643 6411//2643 6408//2643 6407//2643
+f 6400//2644 6399//2644 6411//2644 6410//2644 6412//2644
+f 6413//2651 6414//2651 6415//2651 6416//2651 6417//2651 6418//2651 6419//2651
+f 6420//2652 5540//2652 5539//2652 6413//2652 6419//2652 6421//2652
+f 5554//2653 5541//2653 5540//2653 6420//2653 6422//2653
+f 6423//2654 5553//2654 5552//2654 5554//2654 6422//2654 6424//2654 6425//2654
+f 6426//2655 6423//2655 6425//2655 6427//2655
+f 6415//2656 6426//2656 6427//2656 6428//2656 6416//2656
+f 6429//2657 6430//2657 5642//2657 5641//2657 6431//2657 6432//2657
+f 5081//2658 5080//2658 6432//2658 6431//2658 5094//2658
+f 5091//2659 5093//2659 6433//2659
+f 6434//2660 6435//2660 5092//2660 5091//2660 6433//2660
+f 6436//2661 5651//2661 5648//2661 5646//2661 5645//2661 6437//2661 6435//2661 6434//2661
+f 5651//2662 6436//2662 5652//2662
+f 6430//2662 6437//2662 5645//2662 5643//2662 5642//2662
+f 6438//2663 6439//2663 6440//2663 6441//2663 6442//2663
+f 6443//2664 6444//2664 6438//2664 6442//2664 6445//2664 6446//2664
+f 6447//2665 5581//2665 5580//2665 6443//2665 6446//2665
+f 6448//2666 5574//2666 5573//2666 5581//2666 6447//2666
+f 6449//2678 5575//2678 5574//2678 6448//2678 6450//2678
+f 6440//2667 5576//2667 5575//2667 6449//2667 6441//2667
+f 6451//2668 6452//2668 5600//2668 5602//2668 6453//2668
+f 6454//2669 6455//2669 6456//2669 6457//2669 6452//2669 6451//2669
+f 4802//2670 6458//2670 6459//2670 6456//2670 6455//2670 6460//2670 6461//2670 4803//2670
+f 6458//2671 4802//2671 4801//2671 4822//2671 6462//2671 6463//2671 6464//2671 6465//2671
+f 5606//2709 5605//2709 6463//2709 6462//2709 6466//2709
+f 6467//2628 6468//2628 6469//2628 6470//2628
+f 6471//2674 6472//2674 6467//2674 6470//2674 6473//2674
+f 6083//2629 6082//2629 6471//2629 6473//2629 6474//2629
+f 6475//2630 6076//2630 6075//2630 6083//2630 6474//2630
+f 6476//2631 6094//2631 6077//2631 6076//2631 6475//2631 6477//2631
+f 6468//2632 6476//2632 6477//2632 6469//2632
+f 6478//2639 6479//2639 6480//2639 6481//2639
+f 6482//2640 6483//2640 6484//2640 6478//2640 6481//2640
+f 6485//2676 6486//2676 6483//2676 6482//2676
+f 6487//2642 6488//2642 6486//2642 6485//2642 6489//2642
+f 6490//2643 6491//2643 6487//2643 6489//2643
+f 6479//2644 6491//2644 6490//2644 6480//2644
+f 6492//2645 5176//2645 5175//2645
+f 6493//2646 6494//2646 5177//2646 5176//2646 6492//2646 6495//2646
+f 6496//2647 6494//2647 6493//2647 6497//2647
+f 6498//2648 6496//2648 6497//2648 6499//2648 6500//2648
+f 6501//2649 5180//2649 5179//2649 6498//2649 6500//2649 6502//2649 6503//2649
+f 6504//2650 5181//2650 5180//2650 6501//2650
+f 6505//2651 6506//2651 6507//2651 6508//2651 6509//2651
+f 6510//2652 6505//2652 6509//2652 6511//2652 6512//2652
+f 6513//2653 6510//2653 6512//2653 6514//2653
+f 6515//2654 6516//2654 6513//2654 6514//2654 6517//2654
+f 6518//2655 6519//2655 6520//2655 6515//2655 6517//2655
+f 6507//2656 6520//2656 6519//2656 6508//2656
+f 6521//2657 6522//2657 6523//2657 6524//2657 6525//2657
+f 6526//2658 6527//2658 6521//2658 6525//2658 6528//2658 6529//2658
+f 6530//2659 6531//2659 6532//2659 6529//2659 6528//2659
+f 6533//2660 6534//2660 6531//2660 6530//2660 6535//2660
+f 6536//2661 6537//2661 6534//2661 6533//2661 6538//2661
+f 6522//2662 6536//2662 6538//2662 6523//2662
+f 5601//2663 5595//2663 5594//2663 6539//2663 6540//2663
+f 6453//2664 5602//2664 5601//2664 6540//2664
+f 6541//2665 6465//2665 6464//2665
+f 6463//2666 5605//2666 5604//2666 6542//2666 6543//2666 6541//2666 6464//2666
+f 6542//2678 5604//2678 5603//2678 5610//2678 6544//2678 6545//2678
+f 5594//2675 5593//2675 6539//2675
+f 5610//2667 5609//2667 6544//2667
+f 6546//2633 6547//2633 6548//2633 6549//2633
+f 6550//2634 6551//2634 6547//2634 6546//2634 6552//2634
+f 6553//2635 6554//2635 6551//2635 6550//2635 6555//2635
+f 6556//2636 6553//2636 6555//2636 6557//2636
+f 6558//2637 6556//2637 6557//2637 6559//2637 6560//2637
+f 6549//2638 6548//2638 6561//2638 6558//2638 6560//2638
+f 6562//2639 6563//2639 6564//2639 6565//2639 6566//2639
+f 6567//2640 6568//2640 6569//2640 6570//2640 6563//2640 6562//2640 6571//2640 6572//2640
+f 6573//2641 6574//2641 6575//2641 6572//2641 6571//2641
+f 6576//2642 6574//2642 6573//2642 6577//2642
+f 6578//2643 6579//2643 6576//2643 6577//2643 6580//2643
+f 6566//2644 6565//2644 6581//2644 6578//2644 6580//2644
+f 5279//2645 5278//2645 6582//2645 6583//2645 6584//2645 6585//2645
+f 5783//2646 5782//2646 6584//2646 6583//2646 6586//2646
+f 6587//2648 5797//2648 5796//2648 6588//2648
+f 5282//2649 5281//2649 6587//2649 6588//2649 6589//2649
+f 4634//2711 6590//2711 4635//2711
+f 6391//2712 6390//2712 6393//2712 6395//2712
+f 6409//2712 6398//2712 6397//2712 6403//2712 6406//2712
+f 6409//2713 6408//2713 6411//2713 6399//2713 6398//2713
+f 6017//2714 6003//2714 6002//2714 6007//2714 6010//2714 6012//2714 6014//2714
+f 6520//2715 6507//2715 6506//2715 6516//2715 6515//2715
+f 6591//2715 4701//2715 4700//2715
+f 4702//2716 4701//2716 6591//2716 4718//2716
+f 5191//2716 5205//2716 5192//2716
+f 6024//2717 6020//2717 6019//2717
+f 6024//2718 6023//2718 6027//2718 5071//2718 5070//2718 5075//2718 5077//2718 5078//2718 6029//2718 6021//2718 6020//2718
+f 4908//2718 4898//2718 4897//2718 4902//2718 4906//2718
+f 5746//2719 5745//2719 4722//2719 4721//2719 4725//2719 6202//2719 6201//2719 5752//2719 5751//2719
+f 3923//2720 3910//2720 3909//2720 3917//2720 3916//2720 3920//2720 4358//2720
+f 4640//2721 4639//2721 4643//2721 6590//2721
+f 6117//2721 6116//2721 6121//2721 4612//2721 4611//2721 4615//2721 4622//2721 4621//2721 4624//2721
+f 6592//2721 5786//2721 5785//2721 5789//2721
+f 4418//2722 4395//2722 4394//2722 4403//2722 4409//2722
+f 5127//2722 5117//2722 5116//2722 5123//2722 5122//2722 5125//2722 5128//2722
+f 6113//2723 6097//2723 6096//2723 6102//2723 6107//2723 6111//2723
+f 4699//2724 4698//2724 4706//2724 6591//2724
+f 5624//2724 5619//2724 5618//2724
+f 5212//2724 5207//2724 5210//2724
+f 5592//2725 5577//2725 5576//2725 6440//2725 6439//2725 6593//2725
+f 4973//2725 4967//2725 4966//2725 4969//2725
+f 5169//2725 5168//2725 5174//2725 5187//2725
+f 3504//2726 3507//2726 3510//2726 3501//2726 3500//2726
+f 2939//2727 2941//2727 2930//2727 2929//2727 2936//2727 2935//2727
+f 4364//2728 4366//2728 4359//2728 4358//2728 3920//2728 2173//2728 2172//2728 2177//2728 2181//2728
+f 2320//2728 2304//2728 2303//2728 2311//2728 2321//2728
+f 6590//2729 4634//2729 4633//2729 4637//2729
+f 4640//2730 6590//2730 4637//2730 4636//2730
+f 5788//2731 5787//2731 5793//2731 6592//2731
+f 5919//2731 5905//2731 5904//2731 5910//2731 5913//2731 5916//2731
+f 6107//2732 6102//2732 6101//2732 6106//2732
+f 6594//2732 6070//2732 6069//2732 6073//2732
+f 6230//2732 6219//2732 6218//2732 6223//2732 6231//2732
+f 6199//2733 6202//2733 4725//2733 4724//2733 4730//2733 4734//2733 6196//2733
+f 5444//2733 5442//2733 5441//2733 4946//2733 4945//2733 4948//2733 4952//2733 6345//2733 6344//2733 6339//2733
+f 2757//2734 2756//2734 2747//2734 2746//2734 2749//2734
+f 6063//2735 6594//2735 6058//2735 6057//2735
+f 6595//2735 6301//2735 6304//2735 6305//2735
+f 4895//2735 4885//2735 4886//2735 5519//2735 4470//2735 4469//2735 4474//2735 4892//2735 4894//2735
+f 5589//2736 6593//2736 5585//2736 5584//2736
+f 5165//2737 5150//2737 5149//2737 5153//2737 5158//2737 5161//2737 5166//2737
+f 6595//2738 6295//2738 6294//2738 6297//2738
+f 6071//2739 6594//2739 6067//2739 6066//2739
+f 3929//2740 3928//2740 3513//2740 3512//2740 3518//2740 3521//2740 3940//2740
+f 4248//2741 4251//2741 3445//2741 3444//2741 3447//2741 3449//2741 3437//2741 3436//2741 4246//2741 4245//2741
+f 6302//2742 6595//2742 6297//2742 6296//2742 6299//2742
+f 6429//2743 6432//2743 5080//2743 5079//2743 5085//2743 6033//2743 6034//2743 6040//2743
+f 6040//2744 6039//2744 6043//2744 5087//2744 5086//2744 5092//2744 6435//2744 6437//2744 6430//2744 6429//2744
+f 5647//2744 5650//2744 5638//2744 5637//2744 5644//2744
+f 6250//2744 6249//2744 6253//2744 6263//2744
+f 6551//2745 6554//2745 6561//2745 6548//2745 6547//2745
+f 2215//2746 2208//2746 2212//2746
+f 2256//2746 2255//2746 2259//2746 2261//2746
+f 6561//2747 6554//2747 6553//2747 6556//2747 6558//2747
+f 3176//2748 3181//2748 3180//2748 3177//2748
+f 6264//2749 6263//2749 6253//2749 6252//2749 6256//2749
+f 4455//2750 4440//2750 4439//2750 5983//2750 5982//2750 5506//2750 5505//2750 5507//2750 5497//2750
+f 6285//2751 6279//2751 6278//2751 6282//2751
+f 2428//2752 2417//2752 2416//2752 3422//2752 3421//2752 3425//2752 3427//2752 2421//2752 2425//2752 2427//2752
+f 2328//2752 2332//2752 2338//2752 2324//2752 2323//2752
+f 3795//2753 6596//2753 3819//2753 3796//2753
+f 6596//2754 3815//2754 3814//2754 3819//2754
+f 4369//2754 4376//2754 6597//2754 4370//2754
+f 6597//2755 4392//2755 4391//2755
+f 4118//2756 4121//2756 2141//2756 2140//2756 2144//2756 2145//2756 2132//2756 2131//2756 2137//2756 4114//2756 4113//2756 4119//2756
+f 3176//2757 3175//2757 2634//2757 2633//2757 2638//2757 2637//2757 2640//2757 2643//2757 2646//2757 2648//2757 3181//2757
+f 2761//2757 2760//2757 6598//2757 2769//2757 2768//2757
+f 4871//2758 6599//2758 4865//2758 4864//2758
+f 5990//2759 5989//2759 6000//2759
+f 4184//2760 6596//2760 3795//2760 3794//2760 3802//2760 4179//2760
+f 6311//2761 6316//2761 5384//2761 5390//2761 5391//2761 5396//2761 6309//2761
+f 6000//2762 5989//2762 5988//2762 5038//2762 5037//2762 5040//2762 5044//2762 5996//2762 5998//2762
+f 2860//2763 2862//2763 2854//2763 2853//2763 2858//2763 2857//2763
+f 3764//2763 3357//2763 3356//2763 3757//2763 3759//2763 3762//2763
+f 3868//2764 6600//2764 3869//2764
+f 3815//2765 6596//2765 3811//2765 3810//2765
+f 4383//2765 6597//2765 4376//2765 4375//2765 4378//2765
+f 2945//2765 3878//2765 6600//2765 2964//2765 2946//2765
+f 6597//2766 4387//2766 4386//2766
+f 6598//2767 2299//2767 2298//2767
+f 3745//2768 6598//2768 2298//2768 2297//2768 2301//2768 3742//2768
+f 2198//2768 2187//2768 2186//2768 2190//2768 2194//2768 2199//2768
+f 4870//2769 6599//2769 4871//2769
+f 6338//2769 6331//2769 6330//2769 5894//2769 5893//2769 5899//2769
+f 4875//2770 4874//2770 4878//2770 6599//2770
+f 5535//2771 5537//2771 5521//2771 5520//2771 5526//2771 5530//2771 5532//2771
+f 4387//2772 6597//2772 4382//2772 4385//2772
+f 4661//2773 4667//2773 6601//2773 4680//2773 4679//2773 4662//2773
+f 5719//2774 5724//2774 5226//2774 5225//2774 5230//2774 5716//2774
+f 3959//2775 3565//2775 3548//2775 3547//2775 3552//2775 3954//2775
+f 6600//2776 3868//2776 3867//2776 3872//2776
+f 2354//2776 2353//2776 2360//2776 2364//2776
+f 2953//2777 2960//2777 6600//2777 3872//2777 3871//2777 2954//2777
+f 2369//2777 2355//2777 2354//2777 2364//2777 2363//2777 2367//2777 2366//2777
+f 3258//2778 3257//2778 2235//2778 2234//2778 2237//2778 2239//2778
+f 6601//2779 4667//2779 4666//2779 4671//2779
+f 6189//2779 6180//2779 6179//2779 6183//2779 6184//2779 6187//2779 6190//2779
+f 4556//2780 4541//2780 4540//2780 4545//2780 4548//2780 4554//2780 4557//2780
+f 4511//2781 4510//2781 4515//2781 4525//2781
+f 2067//2782 2066//2782 2054//2782 2053//2782 2059//2782 2061//2782
+f 4674//2783 6601//2783 4671//2783 4670//2783
+f 6187//2783 6186//2783 6190//2783
+f 4422//2783 4421//2783 4425//2783 4436//2783
+f 6171//2783 6173//2783 4688//2783 4687//2783 4691//2783 4692//2783
+f 5299//2784 5292//2784 5291//2784 5770//2784 5769//2784 5774//2784 5780//2784
+f 3984//2785 3978//2785 3977//2785 3980//2785
+f 3857//2786 3849//2786 3848//2786 4213//2786 4212//2786 4217//2786 4220//2786 3858//2786
+f 4170//2787 4169//2787 4174//2787 4177//2787
+f 5710//2788 6602//2788 6161//2788 5703//2788 5702//2788 5708//2788
+f 6488//2789 6484//2789 6483//2789 6486//2789
+f 3062//2790 3057//2790 3056//2790 3059//2790
+f 3115//2791 3113//2791 3112//2791
+f 4220//2792 4219//2792 3852//2792 3851//2792 3855//2792 3858//2792
+f 3486//2792 3485//2792 2994//2792 2993//2792 3000//2792 3003//2792 3494//2792 3493//2792
+f 4171//2793 4166//2793 4165//2793
+f 2440//2793 2441//2793 2431//2793 2430//2793 2435//2793 2437//2793
+f 6527//2794 6537//2794 6536//2794 6522//2794 6521//2794
+f 6245//2794 4788//2794 4787//2794 4794//2794 6241//2794 6242//2794
+f 5255//2795 5242//2795 5241//2795 5245//2795 5249//2795
+f 6270//2796 6272//2796 5352//2796 5351//2796 5358//2796 5345//2796 5344//2796 5350//2796 6265//2796 6268//2796
+f 2557//2797 2566//2797 2576//2797 2558//2797
+f 2536//2797 2524//2797 2523//2797 2527//2797 2530//2797 2533//2797 2532//2797
+f 5811//2798 5799//2798 5798//2798 5802//2798 5805//2798
+f 3947//2799 3951//2799 3536//2799 3535//2799 3541//2799 3948//2799
+f 2379//2800 6603//2800 2380//2800
+f 2387//2801 2374//2801 2373//2801 6603//2801 2388//2801
+f 2573//2802 2576//2802 2566//2802 2565//2802 2571//2802 2570//2802
+f 2533//2802 2530//2802 2529//2802
+f 4153//2802 4152//2802 2828//2802 2827//2802 2837//2802
+f 6570//2803 6569//2803 6581//2803 6565//2803 6564//2803
+f 6157//2804 6163//2804 6602//2804 6158//2804
+f 4656//2805 4660//2805 4653//2805 4652//2805 4654//2805
+f 4575//2806 4574//2806 4561//2806 4560//2806 5131//2806 5130//2806 5135//2806
+f 5322//2807 5304//2807 5303//2807 5312//2807 5314//2807 5316//2807
+f 2384//2808 2388//2808 6603//2808 2382//2808 2381//2808
+f 5482//2809 5495//2809 5483//2809
+f 3602//2810 3601//2810 2093//2810 2092//2810 2097//2810 2100//2810 3608//2810 3609//2810
+f 2974//2810 2977//2810 6604//2810 2968//2810
+f 2969//2811 2968//2811 6604//2811
+f 2839//2812 2843//2812 2840//2812
+f 3196//2813 3184//2813 3183//2813 3189//2813 3197//2813
+f 6576//2814 6579//2814 6568//2814 6567//2814 6575//2814 6574//2814
+f 6545//2814 6544//2814 5609//2814 5608//2814 5597//2814 5596//2814 5600//2814 6452//2814 6457//2814 6459//2814 6458//2814 6465//2814 6541//2814 6543//2814
+f 4799//2814 6605//2814 4820//2814 4800//2814
+f 5135//2815 5134//2815 4566//2815 4565//2815 4570//2815 4575//2815
+f 3313//2816 3296//2816 3295//2816 3301//2816 3300//2816 3303//2816 3306//2816 4104//2816 4106//2816 4107//2816 4100//2816
+f 2126//2817 2113//2817 2112//2817 2118//2817 3612//2817 3615//2817 2127//2817
+f 2605//2818 2607//2818 2613//2818 2601//2818 2600//2818
+f 6575//2819 6567//2819 6572//2819
+f 6459//2819 6457//2819 6456//2819
+f 4807//2819 6605//2819 4799//2819
+f 5485//2820 6376//2820 4994//2820 4993//2820 5000//2820 5005//2820 6377//2820 5960//2820 5959//2820 5964//2820 5969//2820 5972//2820 5971//2820 5493//2820 5492//2820 5495//2820 5482//2820 5481//2820
+f 6349//2820 5931//2820 5930//2820 5938//2820 5924//2820 5923//2820 6350//2820
+f 5972//2821 5969//2821 5968//2821
+f 5938//2821 5930//2821 5934//2821 5936//2821
+f 2613//2822 2607//2822 2606//2822 2609//2822 2611//2822
+f 2661//2823 2652//2823 2651//2823 2656//2823 2657//2823
+f 6606//2824 3710//2824 3709//2824 3711//2824
+f 4811//2825 6605//2825 4807//2825 4806//2825 4808//2825
+f 4535//2825 4539//2825 4528//2825 4527//2825 4530//2825 4532//2825
+f 4817//2826 6605//2826 4811//2826 4810//2826 4813//2826
+f 4535//2826 4534//2826 4538//2826 4539//2826
+f 5566//2826 5571//2826 4935//2826 4934//2826 4940//2826 5375//2826 5374//2826 5378//2826 4929//2826 4928//2826 4933//2826 5555//2826 5559//2826 5561//2826
+f 5869//2826 5868//2826 5876//2826 6607//2826
+f 6607//2827 5890//2827 5889//2827
+f 6415//2827 6414//2827 5547//2827 5546//2827 5550//2827 5553//2827 6423//2827 6426//2827
+f 5459//2828 5458//2828 5460//2828 5462//2828
+f 3576//2829 3578//2829 3097//2829 3096//2829 3086//2829 3085//2829 3090//2829 4302//2829 4306//2829 3571//2829 3570//2829 3573//2829
+f 6608//2829 4298//2829 4297//2829 4300//2829
+f 4325//2830 4331//2830 4337//2830 4326//2830
+f 6607//2831 5886//2831 5885//2831 5890//2831
+f 4495//2831 4500//2831 4509//2831 4496//2831
+f 5026//2832 5011//2832 5010//2832 5015//2832 5019//2832 5021//2832 5020//2832 5025//2832 6209//2832 6212//2832 6216//2832 6205//2832 6204//2832
+f 3596//2833 3599//2833 3126//2833 3125//2833 3129//2833 3133//2833
+f 6606//2834 3268//2834 3267//2834 3271//2834
+f 3707//2835 3706//2835 3710//2835 6606//2835 3273//2835 3272//2835 3276//2835 4087//2835
+f 3071//2836 3074//2836 6608//2836 4282//2836 4286//2836 3066//2836 3065//2836
+f 4299//2837 6608//2837 4293//2837 4292//2837
+f 3823//2837 3827//2837 2901//2837 2900//2837 2906//2837 3824//2837
+f 6609//2838 4024//2838 4023//2838
+f 4127//2839 4132//2839 4142//2839 4128//2839
+f 2594//2839 2578//2839 2577//2839 2583//2839 2589//2839 2595//2839
+f 5875//2840 6321//2840 5406//2840 5405//2840 5411//2840 6607//2840 5876//2840
+f 5884//2841 5883//2841 6607//2841 5418//2841 5417//2841 5423//2841 6326//2841
+f 5886//2842 6607//2842 5883//2842 5882//2842
+f 4507//2842 4509//2842 4500//2842 4499//2842 4502//2842 4505//2842
+f 3846//2843 3837//2843 3836//2843 3844//2843 3843//2843
+f 5018//2844 5021//2844 5019//2844
+f 4981//2844 4980//2844 4492//2844 4480//2844 4479//2844 4483//2844 4992//2844
+f 3658//2845 3662//2845 3204//2845 3203//2845 3207//2845 3666//2845 3665//2845 3659//2845
+f 2273//2846 2264//2846 2263//2846 2268//2846 2269//2846 2271//2846
+f 4138//2847 4135//2847 4134//2847
+f 3844//2848 3836//2848 3835//2848 3840//2848 3839//2848 3842//2848
+f 5690//2849 5675//2849 5674//2849 6141//2849 6140//2849 6143//2849 6146//2849 5681//2849 5680//2849 5684//2849 5689//2849 5738//2849 5740//2849 5731//2849 5730//2849
+f 2922//2850 2921//2850 2916//2850 2915//2850 2918//2850
+f 4148//2851 2822//2851 2824//2851 2804//2851 2803//2851 2808//2851 2813//2851 2812//2851 2819//2851 2821//2851
+f 4320//2852 4323//2852 4311//2852 4310//2852 4317//2852 4316//2852
+f 3154//2853 3136//2853 3135//2853 3142//2853 3147//2853 3146//2853
+f 3154//2854 3146//2854 3145//2854 3150//2854 3153//2854
+f 2540//2854 2539//2854 2544//2854 6610//2854
+f 3840//2855 3835//2855 3834//2855
+f 6610//2855 2554//2855 2553//2855 2556//2855
+f 2510//2855 2486//2855 2485//2855 2501//2855 2500//2855 2507//2855
+f 2801//2855 2776//2855 2775//2855 2784//2855 2788//2855 4203//2855 4196//2855
+f 3625//2856 3624//2856 6611//2856 3642//2856
+f 3629//2857 6611//2857 3630//2857
+f 4266//2857 4258//2857 4260//2857 4262//2857
+f 3331//2858 3319//2858 3318//2858 3322//2858 3324//2858 3326//2858 3329//2858
+f 3681//2859 3680//2859 3231//2859 3230//2859 4079//2859 4081//2859 4083//2859 4073//2859 4072//2859 3236//2859 3218//2859 3217//2859 3221//2859 3225//2859 3672//2859 3675//2859
+f 2480//2860 2471//2860 2470//2860 2474//2860 2477//2860 2478//2860
+f 3894//2861 3893//2861 6612//2861 3907//2861 3906//2861
+f 3454//2861 3469//2861 3455//2861
+f 2866//2862 2865//2862 2887//2862
+f 3740//2862 3724//2862 3725//2862 3728//2862 3732//2862 3735//2862 3734//2862 3738//2862
+f 3740//2863 3738//2863 3737//2863
+f 2555//2864 6610//2864 2549//2864 2548//2864
+f 4043//2864 4028//2864 4027//2864 4033//2864 4035//2864 4038//2864 4044//2864
+f 4038//2865 4037//2865 4041//2865 4044//2865
+f 2666//2866 6613//2866 2681//2866 2667//2866
+f 5267//2867 5270//2867 5262//2867 5261//2867 5264//2867
+f 6288//2868 6274//2868 6273//2868 6279//2868 6285//2868 6284//2868 6287//2868
+f 5113//2869 5097//2869 5096//2869 5101//2869 6045//2869 6048//2869
+f 6127//2870 6126//2870 5656//2870 5655//2870 5663//2870 6137//2870
+f 6212//2871 6211//2871 6215//2871 6216//2871
+f 2677//2872 2679//2872 6613//2872 2674//2872 2673//2872
+f 6612//2873 3898//2873 3897//2873 3900//2873
+f 3634//2874 3633//2874 3637//2874 6611//2874
+f 2739//2875 2719//2875 2718//2875 2724//2875 2737//2875
+f 3501//2876 3510//2876 3509//2876 3497//2876 3496//2876
+f 6590//2877 4643//2877 4642//2877 4646//2877
+f 6117//2877 4624//2877 4623//2877 6124//2877 6118//2877
+f 5782//2877 5781//2877 5786//2877 6592//2877 6585//2877 6584//2877
+f 4750//2877 4753//2877 4743//2877 4742//2877 4745//2877 4748//2877
+f 5755//2878 5754//2878 5273//2878 5272//2878 5279//2878 6585//2878 6592//2878 5767//2878
+f 6391//2879 6395//2879 6383//2879 6382//2879 6387//2879 6388//2879
+f 5797//2879 6587//2879 5281//2879 5280//2879 5287//2879 5762//2879 5765//2879 5767//2879 6592//2879 5792//2879 5795//2879
+f 6516//2880 6506//2880 6505//2880 6510//2880 6513//2880
+f 4700//2880 4699//2880 6591//2880
+f 5626//2880 5614//2880 5613//2880 5616//2880 5619//2880 5624//2880 5623//2880
+f 4974//2881 4963//2881 4962//2881 4967//2881 4973//2881 4972//2881
+f 4908//2882 4907//2882 4911//2882 4899//2882 4898//2882
+f 3917//2883 3909//2883 3908//2883 3914//2883
+f 2304//2884 2320//2884 2319//2884 2305//2884
+f 4403//2885 4394//2885 4393//2885 4401//2885
+f 5116//2885 5115//2885 5120//2885 5123//2885
+f 4417//2886 4416//2886 4418//2886 4409//2886 4408//2886
+f 5128//2887 5125//2887 5124//2887
+f 5060//2886 5050//2886 5049//2886 5052//2886 5056//2886 5058//2886 5057//2886
+f 4714//2888 6591//2888 4706//2888 4705//2888 4710//2888
+f 5219//2888 5208//2888 5207//2888 5212//2888 5211//2888 5214//2888 5216//2888
+f 4718//2889 6591//2889 4714//2889 4713//2889 4717//2889
+f 5205//2889 5191//2889 5190//2889 5196//2889 5198//2889 5200//2889 5203//2889
+f 6438//2890 6444//2890 6593//2890 6439//2890
+f 2929//2891 2928//2891 2933//2891 2936//2891
+f 2747//2891 2756//2891 2755//2891 2742//2891 2741//2891
+f 4617//2892 4622//2892 4615//2892 4614//2892
+f 6592//2892 5789//2892 5788//2892
+f 5792//2893 6592//2893 5793//2893
+f 5906//2893 5905//2893 5919//2893 5918//2893
+f 4407//2894 4413//2894 4417//2894 4408//2894
+f 6059//2894 6058//2894 6594//2894 6073//2894
+f 5058//2894 5056//2894 5055//2894
+f 5592//2895 6593//2895 5589//2895 5588//2895 5590//2895
+f 6496//2895 6498//2895 5179//2895 5178//2895 5185//2895 5188//2895 5187//2895 5174//2895 5173//2895 5177//2895 6494//2895
+f 5188//2896 5185//2896 5184//2896
+f 6342//2897 6345//2897 4952//2897 4951//2897 4955//2897 4958//2897
+f 2317//2898 2321//2898 2311//2898 2310//2898 2313//2898
+f 6295//2899 6595//2899 6305//2899 6291//2899 6290//2899
+f 5511//2899 5510//2899 5514//2899 4463//2899 4462//2899 4470//2899 5519//2899
+f 6594//2900 6071//2900 6070//2900
+f 6228//2900 6231//2900 6223//2900 6222//2900 6225//2900
+f 6444//2901 6443//2901 5580//2901 5579//2901 5586//2901 6593//2901
+f 6593//2902 5586//2902 5585//2902
+f 2751//2903 2757//2903 2749//2903 2748//2903
+f 2210//2904 2207//2904 2206//2904
+f 2221//2905 2202//2905 2201//2905 2207//2905 2210//2905 2209//2905 2277//2905
+f 3438//2906 3437//2906 3449//2906 3448//2906
+f 5161//2907 5160//2907 5166//2907
+f 6067//2908 6594//2908 6063//2908 6062//2908 6064//2908
+f 6595//2908 6302//2908 6301//2908
+f 3937//2909 3940//2909 3521//2909 3520//2909 3524//2909 3528//2909 3935//2909
+f 4062//2910 4046//2910 4045//2910 4052//2910 4063//2910
+f 2278//2911 2277//2911 2209//2911 2208//2911 2215//2911 2214//2911 2282//2911 2286//2911 2287//2911
+f 5654//2912 5639//2912 5638//2912 5650//2912 5649//2912
+f 2518//2913 2520//2913 2252//2913 2251//2913 2256//2913 2261//2913 2248//2913 2247//2913 2516//2913 2515//2913
+f 5361//2914 5360//2914 4844//2914 4843//2914 4848//2914 4853//2914 5832//2914 5834//2914 5835//2914 5370//2914 5369//2914
+f 4059//2915 4063//2915 4052//2915 4051//2915 4056//2915
+f 4865//2916 6599//2916 4884//2916 4866//2916
+f 6264//2917 6256//2917 6255//2917 6259//2917 6261//2917
+f 5983//2918 4439//2918 4438//2918 4443//2918 5975//2918 5978//2918 5980//2918
+f 5951//2918 5941//2918 5940//2918 5947//2918 6359//2918 6366//2918 5952//2918
+f 2337//2919 2338//2919 2332//2919 2331//2919 2335//2919
+f 2719//2919 2739//2919 2720//2919
+f 4225//2920 4224//2920 4230//2920 4236//2920
+f 4241//2921 4240//2921 4226//2921 4225//2921 4236//2921 4235//2921
+f 4371//2922 4370//2922 6597//2922 4391//2922 4390//2922
+f 4113//2923 4112//2923 4116//2923 4119//2923
+f 2638//2924 2633//2924 2632//2924
+f 6597//2925 4386//2925 4392//2925
+f 2760//2926 2759//2926 2290//2926 2289//2926 2294//2926 2299//2926 6598//2926
+f 6599//2927 4881//2927 4880//2927 4884//2927
+f 3764//2928 3763//2928 3362//2928 3361//2928 3349//2928 3348//2928 3351//2928 3357//2928
+f 4238//2928 4241//2928 4235//2928 4234//2928
+f 3745//2929 3744//2929 2765//2929 2764//2929 2769//2929 6598//2929
+f 5988//2930 5987//2930 5030//2930 5029//2930 5035//2930 5038//2930
+f 5855//2930 5854//2930 5385//2930 5384//2930 6316//2930 6315//2930 6317//2930 5865//2930 5864//2930
+f 5522//2931 5521//2931 5537//2931
+f 6368//2932 6373//2932 5474//2932 5473//2932 5478//2932 5949//2932 5952//2932 6366//2932 6365//2932
+f 5236//2933 5235//2933 5222//2933 5221//2933 5227//2933 5727//2933
+f 5851//2933 5839//2933 5838//2933 5841//2933 5844//2933 5848//2933 5847//2933
+f 2853//2934 2852//2934 2856//2934 2858//2934
+f 2737//2934 2724//2934 2723//2934 2726//2934 2731//2934 2734//2934
+f 3813//2935 4188//2935 3812//2935 3811//2935 6596//2935 4184//2935 4183//2935 4186//2935 3806//2935 3808//2935
+f 3878//2935 3864//2935 3863//2935 3869//2935 6600//2935
+f 6599//2936 4870//2936 4869//2936 4875//2936
+f 5899//2936 5898//2936 5429//2936 5428//2936 5435//2936 5438//2936 6334//2936 6336//2936 6338//2936
+f 4878//2937 4877//2937 4881//2937 6599//2937
+f 5725//2938 5727//2938 5227//2938 5226//2938 5724//2938 5723//2938
+f 5848//2938 5844//2938 5843//2938
+f 6597//2939 4383//2939 4382//2939
+f 2964//2939 6600//2939 2960//2939 2959//2939 2961//2939
+f 2195//2940 2199//2940 2194//2940 2193//2940
+f 3693//2940 3692//2940 3252//2940 3251//2940 3258//2940 2239//2940 2238//2940 2241//2940 2245//2940 3697//2940
+f 3967//2941 3563//2941 3562//2941 3565//2941 3959//2941 3958//2941 3963//2941 3968//2941
+f 3967//2942 3966//2942 3559//2942 3558//2942 3563//2942
+f 3169//2942 3168//2942 3157//2942 3156//2942 3160//2942 3163//2942 4341//2942 4343//2942 4345//2942 4346//2942
+f 6601//2943 4674//2943 4673//2943 4680//2943
+f 4695//2943 4694//2943 4683//2943 4682//2943 4688//2943 6173//2943 6172//2943 6176//2943 6168//2943
+f 4557//2944 4554//2944 4553//2944
+f 5822//2944 5814//2944 5813//2944 5818//2944
+f 4842//2945 4826//2945 4825//2945 5815//2945 5814//2945 5822//2945 5821//2945
+f 5820//2946 4839//2946 4838//2946 4840//2946 4842//2946 5821//2946
+f 3968//2947 3963//2947 3962//2947
+f 3987//2947 3976//2947 3975//2947 3978//2947 3984//2947 3983//2947
+f 4523//2948 4525//2948 4515//2948 4514//2948 4519//2948 4521//2948
+f 6487//2948 6491//2948 6479//2948 6478//2948 6484//2948 6488//2948
+f 2067//2949 2061//2949 2060//2949 2063//2949
+f 3061//2949 3064//2949 3052//2949 3051//2949 3057//2949 3062//2949
+f 2367//2950 2363//2950 2362//2950
+f 4170//2951 4177//2951 3790//2951 3789//2951 3782//2951 3781//2951 3384//2951 3383//2951 3388//2951 3392//2951 4160//2951 4166//2951 4171//2951
+f 4434//2952 4436//2952 4425//2952 4424//2952 4428//2952 4430//2952
+f 6233//2952 6244//2952 6234//2952
+f 6153//2953 6602//2953 5693//2953 5692//2953 5698//2953 6147//2953
+f 5694//2954 5693//2954 6602//2954 5710//2954
+f 5820//2954 5825//2954 4832//2954 4836//2954 4839//2954
+f 6602//2955 6162//2955 6161//2955
+f 5773//2956 5777//2956 4765//2956 4764//2956 4769//2956 4772//2956 4773//2956 5297//2956 5301//2956 5779//2956 5780//2956 5774//2956
+f 5345//2956 5358//2956 5357//2956 5346//2956
+f 3115//2957 3101//2957 3100//2957 3992//2957 3991//2957 3581//2957 3580//2957 3583//2957 3586//2957 3588//2957 3110//2957 3109//2957 3113//2957
+f 3544//2958 3533//2958 3532//2958 3944//2958 3943//2958
+f 3492//2959 3494//2959 3003//2959 3002//2959 3005//2959 3010//2959
+f 6244//2960 6233//2960 6232//2960 4776//2960 4775//2960 4780//2960 4784//2960 4788//2960 6245//2960
+f 6602//2961 6153//2961 6152//2961 6155//2961
+f 6476//2961 6468//2961 6467//2961 6472//2961 6091//2961 6090//2961 6094//2961
+f 6163//2962 6162//2962 6602//2962
+f 5253//2963 5255//2963 5249//2963 5248//2963 5252//2963
+f 4653//2963 4660//2963 4659//2963 4649//2963 4648//2963
+f 6602//2964 6155//2964 6154//2964 6159//2964
+f 6082//2964 6081//2964 6086//2964 6088//2964 6091//2964 6472//2964 6471//2964
+f 5811//2965 5805//2965 5332//2965 5331//2965 5336//2965 5339//2965 5340//2965 5342//2965 5808//2965
+f 3334//2966 3333//2966 3336//2966 3338//2966 3341//2966 3748//2966 3747//2966
+f 3751//2967 3749//2967 3748//2967 3341//2967 3340//2967 3344//2967 3345//2967
+f 3942//2968 3948//2968 3541//2968 3540//2968 3543//2968 3544//2968 3943//2968
+f 2373//2969 2372//2969 2380//2969 6603//2969
+f 3472//2970 3481//2970 3484//2970 3473//2970
+f 6532//2971 6526//2971 6529//2971
+f 6534//2972 6537//2972 6527//2972 6526//2972 6532//2972 6531//2972
+f 6570//2972 6564//2972 6563//2972
+f 6602//2973 6159//2973 6158//2973
+f 2382//2974 6603//2974 2379//2974 2378//2974
+f 2567//2975 2571//2975 2565//2975 2564//2975
+f 3380//2976 3367//2976 3366//2976 4154//2976 4153//2976 2837//2976 2836//2976 2840//2976 2843//2976 2842//2976 2847//2976 3775//2976 3378//2976 3377//2976
+f 2459//2976 3883//2976 3886//2976 2454//2976 2453//2976
+f 3472//2977 3471//2977 2446//2977 2445//2977 2454//2977 3886//2977 3885//2977 3888//2977 3889//2977 3482//2977 3481//2977
+f 6578//2978 6581//2978 6569//2978 6568//2978 6579//2978
+f 4005//2979 4007//2979 3997//2979 3996//2979 4000//2979 4001//2979
+f 4350//2979 4349//2979 2151//2979 2150//2979 3653//2979 3652//2979 3656//2979 4355//2979
+f 2970//2980 2969//2980 6604//2980 2992//2980
+f 3608//2981 2100//2981 2099//2981 2102//2981 2107//2981 3606//2981
+f 2985//2981 6604//2981 2977//2981 2976//2981 2980//2981
+f 2984//2982 2989//2982 2992//2982 6604//2982 2985//2982
+f 3294//2982 3301//2982 3295//2982
+f 6542//2983 6545//2983 6543//2983
+f 6605//2983 4821//2983 4820//2983
+f 6357//2983 5932//2983 5931//2983 6349//2983 6348//2983 6353//2983
+f 3647//2984 3653//2984 2150//2984 2149//2984 2155//2984 2158//2984 2160//2984 3645//2984
+f 3615//2985 3614//2985 2622//2985 2621//2985 2626//2985 2628//2985 2629//2985 2128//2985 2127//2985
+f 3718//2985 3721//2985 3284//2985 3283//2985 3287//2985 3291//2985 4096//2985 4098//2985 4091//2985 4090//2985 3716//2985 3715//2985
+f 3194//2986 3197//2986 3189//2986 3188//2986 3191//2986
+f 6605//2987 4817//2987 4816//2987 4821//2987
+f 6357//2987 6356//2987 5927//2987 5926//2987 5932//2987
+f 5376//2987 5375//2987 4940//2987 4939//2987 4943//2987 5382//2987
+f 5870//2987 5869//2987 6607//2987 5889//2987
+f 6414//2987 6413//2987 5539//2987 5538//2987 5544//2987 5547//2987
+f 4601//2988 4578//2988 4577//2988 4583//2988 4588//2988 5140//2988 5144//2988
+f 3592//2989 3591//2989 3117//2989 3116//2989 3121//2989 3126//2989 3599//2989 3598//2989
+f 2663//2990 2653//2990 2652//2990 2661//2990 2660//2990
+f 3268//2991 6606//2991 2708//2991 2707//2991 2712//2991 4086//2991 3263//2991 3262//2991
+f 2692//2991 2689//2991 2688//2991
+f 2715//2992 2709//2992 2708//2992 6606//2992 3711//2992 3700//2992
+f 3683//2992 3682//2992 2684//2992 2683//2992 2689//2992 2692//2992 2691//2992 2694//2992 2696//2992 3688//2992 3246//2992 3245//2992 3248//2992 3239//2992 3238//2992 4069//2992 4068//2992
+f 5462//2993 5450//2993 5449//2993 5453//2993 5455//2993 5459//2993
+f 5143//2994 5145//2994 4596//2994 4595//2994 4600//2994 5633//2994 5634//2994 4602//2994 4601//2994 5144//2994
+f 4283//2995 4282//2995 6608//2995 4300//2995
+f 4331//2996 4330//2996 2080//2996 2079//2996 2084//2996 2087//2996 2088//2996 2077//2996 2076//2996 4337//2996
+f 6606//2997 3271//2997 3270//2997 3273//2997
+f 4277//2997 4281//2997 3046//2997 3045//2997 3034//2997 3033//2997 3038//2997 4270//2997 4272//2997 4276//2997
+f 3081//2998 4293//2998 6608//2998 3074//2998 3073//2998 3076//2998
+f 3572//2999 3575//2999 3576//2999 3573//2999
+f 6608//2999 4299//2999 4298//2999
+f 2905//2999 2907//2999 2409//2999 2408//2999 2394//2999 2393//2999 2399//2999 3820//2999 3824//2999 2906//2999
+f 4026//3000 4012//3000 4011//3000 4015//3000 6609//3000 4023//3000
+f 5418//3001 6607//3001 5411//3001 5410//3001 5415//3001
+f 4140//3002 4142//3002 4132//3002 4131//3002 4135//3002 4138//3002 4137//3002
+f 2595//3002 2589//3002 2588//3002 2591//3002
+f 3830//3003 3829//3003 3837//3003 3846//3003
+f 5740//3004 5739//3004 5743//3004 5732//3004 5731//3004
+f 4992//3005 4483//3005 4482//3005 4485//3005 4487//3005 4491//3005 4984//3005 4987//3005 4989//3005
+f 2349//3006 2351//3006 2341//3006 2340//3006 2345//3006 2346//3006
+f 4022//3007 6609//3007 4015//3007 4014//3007 4018//3007
+f 4024//3008 6609//3008 4022//3008 4021//3008
+f 4205//3009 4204//3009 2911//3009 2910//3009 2916//3009 2921//3009 2920//3009 2926//3009 4209//3009 4211//3009
+f 2813//3010 2808//3010 2807//3010
+f 4310//3011 4309//3011 4315//3011 4317//3011
+f 3147//3012 3142//3012 3141//3012
+f 2541//3013 2540//3013 6610//3013 2556//3013
+f 2485//3013 2491//3013 2494//3013 2501//3013
+f 5269//3014 5257//3014 5256//3014 5262//3014 5270//3014
+f 3213//3015 3663//3015 3666//3015 3207//3015 3206//3015 3209//3015
+f 3630//3015 6611//3015 3624//3015 3623//3015
+f 4266//3015 4265//3015 4267//3015 3028//3015 3027//3015 3017//3015 3016//3015 3019//3015 3022//3015 4258//3015
+f 2555//3016 2554//3016 6610//3016
+f 4203//3016 2788//3016 2791//3016 2796//3016 4197//3016 4199//3016 4202//3016
+f 4028//3016 4043//3016 4029//3016
+f 3642//3017 6611//3017 3637//3017 3636//3017 3639//3017
+f 2922//3018 2918//3018 2917//3018
+f 3331//3018 3329//3018 3328//3018
+f 6612//3019 3893//3019 3892//3019 3898//3019
+f 2550//3020 6610//3020 2544//3020 2543//3020 2546//3020
+f 6610//3021 2550//3021 2549//3021
+f 2670//3022 6613//3022 2666//3022 2665//3022
+f 6613//3023 2679//3023 2678//3023 2681//3023
+f 4629//3024 4628//3024 4635//3024 6590//3024
+f 4629//3025 6590//3025 4645//3025 4630//3025
+f 6590//3026 4646//3026 4645//3026
+f 4740//3026 4739//3026 4743//3026 4753//3026
+f 6017//3027 6014//3027 6013//3027
+f 6275//3028 6274//3028 6288//3028
+f 6047//3029 6051//3029 6053//3029 5107//3029 5106//3029 5111//3029 6055//3029 5109//3029 5108//3029 5113//3029 6048//3029
+f 6136//3030 6137//3030 5663//3030 5662//3030 5664//3030 5668//3030 5672//3030 6133//3030
+f 6613//3031 2670//3031 2669//3031 2674//3031
+f 2886//3032 2887//3032 2865//3032 2864//3032 2870//3032 3401//3032 3407//3032 3409//3032 3411//3032 2880//3032 2879//3032
+f 3731//3032 3735//3032 3732//3032
+f 3467//3033 3461//3033 3460//3033 3463//3033
+f 3902//3034 3907//3034 6612//3034 3903//3034
+f 3466//3034 3469//3034 3454//3034 3453//3034 3457//3034 3461//3034 3467//3034
+f 3903//3035 6612//3035 3900//3035 3899//3035
+f 3678//3036 3681//3036 3675//3036 3674//3036
+f 3634//3037 6611//3037 3629//3037 3628//3037
+s 1
+f 4017//3038 4019//3038 4009//3038 4013//3038 4025//3038 4020//3038
+f 2266//3038 2265//3038 2275//3038
+f 2071//3038 2070//3038 2085//3038 2082//3038
+f 4335//3038 4334//3038 4333//3038 4328//3038 4327//3038 4336//3038
+f 2650//3039 2654//3039 2662//3039 2659//3039 2658//3039 2655//3039
+f 3293//3039 3298//3039 3302//3039
+f 2101//3039 2096//3039 2098//3039 2990//3039 2983//3039 2982//3039 2104//3039 2103//3039
+f 3605//3040 2986//3040 2990//3040 2098//3040 2091//3040 2095//3040 2110//3040 2967//3040 2966//3040 3604//3040 3603//3040 3607//3040
+f 4004//3041 4003//3041 4008//3041 4006//3041
+f 2624//3042 2618//3042 2617//3042
+f 2121//3042 2115//3042 2111//3042 2114//3042 2129//3042 2124//3042
+f 3621//3042 3618//3042 3620//3042 4097//3042 4093//3042 4092//3042 3610//3042 3613//3042 3622//3042
+f 2624//3043 2617//3043 2616//3043 2630//3043 2627//3043 2625//3043 2620//3043
+f 3912//3044 3911//3044 3925//3044 3918//3044 3913//3044
+f 2171//3045 2168//3045 2167//3045 2178//3045 2182//3045
+f 3915//3045 3918//3045 3925//3045 3922//3045 3919//3045
+f 4362//3045 4361//3045 4357//3045 4360//3045 4368//3045 4365//3045
+f 2257//3046 2250//3046 2254//3046 2260//3046
+f 2318//3047 2322//3047 2307//3047 2306//3047
+f 2315//3048 2314//3048 2312//3048 2308//3048 2307//3048 2322//3048 2316//3048
+f 2329//3049 2327//3049 2326//3049 2333//3049
+f 2386//3050 2385//3050 2376//3050 2375//3050 2389//3050
+f 2371//3051 2376//3051 2385//3051 2383//3051 2377//3051
+f 2467//3052 2466//3052 3382//3052 3381//3052 6614//3053 2449//3054 2448//3052 3477//3055 3475//3056 3474//3052 3483//3052 3479//3052 2468//3052
+f 3376//3057 3379//3057 6614//3057 3381//3057
+f 3882//3057 3880//3057 3881//3057 3890//3057 3887//3057 3884//3057
+f 4058//3058 4060//3058 6615//3058 4064//3058
+f 6615//3059 4065//3060 4064//3061
+f 2246//3061 2249//3061 2258//3061 2260//3061 2254//3061 2253//3061 2521//3061 2519//3061 2514//3061 2517//3061
+f 4172//3062 6616//3062 4173//3062
+f 2526//3062 2528//3062 2534//3062 2531//3062
+f 3368//3062 3364//3062 2450//3062 2455//3062 6614//3062 3375//3062 3374//3062 3779//3062 3778//3062 6617//3062 3769//3062 3766//3062 3768//3062 4156//3062 4151//3062 4155//3062
+f 4173//3063 6616//3063 4175//3063 4168//3063
+f 2528//3063 2522//3063 2525//3063 2537//3063 2535//3063 2534//3063
+f 2444//3063 2449//3054 6614//3053 2455//3063
+f 3470//3063 3475//3056 3477//3055 3476//3063
+f 4162//3064 6616//3064 4163//3064
+f 2560//3065 2559//3065 2575//3065 2574//3065 2561//3065
+f 3770//3065 3769//3065 6617//3065
+f 4164//3065 4163//3065 6616//3065 4172//3065
+f 2569//3066 2568//3066 2562//3066 2561//3066 2574//3066 2572//3066
+f 6617//3067 3771//3067 3770//3067
+f 2833//3066 2832//3066 2849//3066
+f 2582//3068 2581//3068 6618//3068 2584//3068
+f 2580//3069 6618//3069 2581//3069
+f 2598//3070 6618//3070 2580//3070 2579//3070
+f 2598//3071 2597//3071 2596//3071 6618//3071
+f 3186//3072 3185//3072 3198//3072 3192//3072 3187//3072
+f 3193//3073 3190//3073 3192//3073 3198//3073 3195//3073
+f 2612//3074 2610//3074 2608//3074 2604//3074 2599//3074 2603//3074 2614//3074
+f 2142//3075 2139//3075 2134//3075 2138//3075 2148//3075 2147//3075 2146//3075
+f 4124//3075 4123//3075 4122//3075 4110//3075 4115//3075
+f 2647//3076 3179//3076 3174//3076 3178//3076 3182//3076 2649//3076 2645//3076
+f 2130//3077 2133//3077 2148//3077 2138//3077
+f 2635//3078 3179//3078 2647//3078 2644//3078 2642//3078 2641//3078 2639//3078 2631//3078
+f 2146//3079 2143//3079 2142//3079
+f 2767//3079 2763//3079 2766//3079 3743//3079 3741//3079 2300//3079 2296//3079 2295//3079 2293//3079 2292//3079 2302//3079 2758//3079 2762//3079
+f 2636//3079 2639//3079 2641//3079
+f 2675//3080 2671//3080 2664//3080 2668//3080 2682//3080
+f 2680//3081 2676//3081 2672//3081 2675//3081 2682//3081
+f 2750//3082 2745//3082 2740//3082 2744//3082 2752//3082
+f 3930//3083 3939//3083 3926//3083
+f 2934//3084 2937//3084 2940//3084
+f 2753//3084 2752//3084 2744//3084 2743//3084 2754//3084
+f 4207//3085 4206//3085 4210//3085 2925//3085 2924//3085 2913//3085 2912//3085
+f 4145//3086 4144//3086 4208//3086 4210//3086 4206//3086 2809//3086 2806//3086 2805//3086 2826//3086 4143//3086 4150//3086 4147//3086
+f 4146//3087 4147//3087 4150//3087 4149//3087
+f 3232//3088 3220//3088 3219//3088 3233//3088
+f 2923//3089 2919//3089 2914//3089 2909//3089 2913//3089 2924//3089
+f 2058//3090 2052//3090 2057//3090 2064//3090 2062//3090
+f 3070//3091 3069//3091 3082//3091 3077//3091 3075//3091 3072//3091
+f 3821//3091 2397//3091 2396//3091 3574//3091 6619//3091 2400//3091 2407//3091 3419//3091 3828//3091 3826//3091 3825//3091 3822//3091
+f 4303//3092 4308//3092 4307//3092 4304//3092
+f 3099//3093 3098//3093 3091//3093 3084//3093 3087//3093
+f 3078//3094 3082//3094 3069//3094 3068//3094
+f 4305//3094 4307//3094 4308//3094 2036//3094 2035//3094 3092//3094 3091//3094 3098//3094 3093//3094 2051//3094 2048//3094 2047//3094 4294//3094 2045//3094 2043//3094 2042//3094 4291//3094 4290//3094 4287//3094 4289//3094
+f 3577//3094 2412//3094 2413//3094 6619//3094 3574//3094 3569//3094 3566//3094 3567//3094
+f 3155//3095 6620//3095 3138//3095 3137//3095
+f 3149//3096 3151//3096 6620//3096 3155//3096 3152//3096
+f 2552//3096 2551//3096 2547//3096 2545//3096 2538//3096 2542//3096
+f 3140//3097 3143//3097 6620//3097 3148//3097
+f 3173//3098 3172//3098 3171//3098
+f 2056//3099 2055//3099 2069//3099
+f 3550//3100 3553//3100 3556//3100
+f 3986//3100 3989//3100 3973//3100 3964//3100 3957//3100 3956//3100 3955//3100 3972//3100 3970//3100 3969//3100
+f 3965//3101 3970//3101 3972//3101 3971//3101
+f 3557//3101 3556//3101 3553//3101 3546//3101 3549//3101 3564//3101 3561//3101
+f 3173//3101 3171//3101 3165//3101 3164//3101 3161//3101 3159//3101 3158//3101
+f 4340//3101 4339//3101 4338//3101 4347//3101 4344//3101 4342//3101
+f 3031//3102 3030//3103 3014//3104 3018//3102
+f 3202//3102 3205//3102 3214//3102 3210//3102 3208//3102
+f 3664//3105 3215//3105 3211//3105 3214//3105 3205//3105 3199//3105 3201//3105 3661//3105 3657//3105 3660//3105 3667//3105
+f 3677//3106 3673//3106 3676//3106 3669//3106 3668//3106 3679//3106
+f 4077//3106 4076//3106 4082//3106 4078//3106
+f 4085//3107 2714//3107 2713//3107 2711//3107 2710//3107 2716//3107 3701//3107 3708//3107 3705//3107 3702//3107 3704//3107 4088//3107 3275//3107 3277//3107 3269//3107 3265//3107 3264//3107
+f 4275//3108 4274//3108 4278//3108
+f 3274//3109 3049//3109 3048//3109 3041//3109 3044//3109 4280//3109 4279//3109 4278//3109 4274//3109 4273//3109 4271//3109 3040//3109 3039//3109 3032//3109 3036//3109 3266//3109 3269//3109 3277//3109
+f 4095//3110 4094//3110 4089//3110 4093//3110 4097//3110
+f 3286//3110 3288//3110 3713//3110 3712//3110 3281//3110 3280//3110 3289//3110
+f 3282//3111 3285//3111 3720//3111 3719//3111 3714//3111 3713//3111 3288//3111
+f 3327//3112 3330//3112 3316//3112 3320//3112
+f 3669//3112 3676//3112 3671//3112 3670//3112
+f 3330//3113 3325//3113 3323//3113 3321//3113 3317//3113 3316//3113
+f 3750//3114 3752//3114 3346//3114 3343//3114 3342//3114 3339//3114 3337//3114 3332//3114 3335//3114 3746//3114
+f 3060//3115 3058//3115 3055//3115 3054//3115 3053//3115 3063//3115
+f 3949//3116 3952//3116 3950//3116
+f 2834//3117 2833//3117 2849//3117 2851//3117 2848//3117 2841//3117 2838//3117 2835//3117
+f 3772//3117 3771//3117 6617//3117 3773//3117
+f 3412//3118 3404//3118 3403//3118 3414//3118
+f 2285//3119 2284//3119 2281//3119 2276//3119 2279//3119 2288//3119
+f 4253//3119 4254//3119 4249//3119 4244//3119 4247//3119 4255//3119
+f 3452//3120 3456//3120 3465//3120 3468//3120 3458//3120
+f 3462//3121 3459//3121 3458//3121 3468//3121 3464//3121
+f 3499//3122 3498//3122 3511//3122 3505//3122 3502//3122
+f 3515//3123 3530//3123 3519//3123 3516//3123
+f 3931//3123 3927//3123 3926//3123 3939//3123 3936//3123 3938//3123 3932//3123
+f 3531//3124 3534//3124 3545//3124 3946//3124 3945//3124
+f 2998//3124 2997//3124 3012//3124 3011//3124 3001//3124
+f 3105//3124 3107//3124 3589//3124 3587//3124 3585//3124 3584//3124 3994//3124 3104//3124 3103//3124 3114//3124 3108//3124
+f 3941//3125 3946//3125 3545//3125 3542//3125 3539//3125 3538//3125 3537//3125 3953//3125 3952//3125 3949//3125
+f 3001//3125 3011//3125 3006//3125 3004//3125 2999//3125
+f 3579//3126 3582//3126 3990//3126 3993//3126 3994//3126 3584//3126
+f 3130//3127 3128//3127 3124//3127 3127//3127 3122//3127 3120//3127 3119//3127
+f 3686//3128 3685//3128 4071//3128 4067//3128 4070//3128 3237//3128 3240//3128 3250//3128 3247//3128 3241//3128 3243//3128 3690//3128 3687//3128
+f 3302//3129 3298//3129 3297//3129 3315//3129 3307//3129 3304//3129 3299//3129
+f 3312//3130 3311//3130 4099//3130 4102//3130 4108//3130 4105//3130 4103//3130 3309//3130 3308//3130 3307//3130 3315//3130
+f 3249//3130 3244//3130 3247//3130 3250//3130
+f 3733//3131 3736//3131 3729//3131 3726//3131 3727//3131 2884//3131 2883//3131 3739//3131
+f 3730//3132 3729//3132 3736//3132
+f 3414//3132 3403//3132 3402//3132 3413//3132
+f 3727//3133 3723//3133 2871//3133 2868//3133 2863//3133 2867//3133 2881//3133 2884//3133
+f 3833//3134 3832//3134 3831//3134 3845//3134 3841//3134 3838//3134
+f 4194//3135 4195//3135 4201//3135 4200//3135 2495//3135 2490//3135 2489//3135
+f 2777//3135 2798//3135 2797//3135 2781//3135 2770//3135
+f 4223//3136 6621//3136 3859//3136 3856//3136 3854//3136 3853//3136
+f 3488//3136 3487//3136 3495//3136 3491//3136 3490//3136 3489//3136
+f 3860//3137 3859//3137 6621//3137 3861//3137
+f 2359//3138 2358//3138 2370//3138 2368//3138 2365//3138 2361//3138
+f 3847//3138 3850//3138 3861//3138 6621//3138 4215//3138 4214//3138
+f 2949//3139 2952//3139 2948//3139 2947//3139 2963//3139 2962//3139 2956//3139
+f 2957//3140 2956//3140 2962//3140 2958//3140
+f 3901//3141 3896//3141 3891//3141 3895//3141 3905//3141 3904//3141
+f 2065//3142 2064//3142 2057//3142 2056//3142 2069//3142 2068//3142
+f 3974//3142 3973//3142 3989//3142 3988//3142 3981//3142 3979//3142
+f 4109//3143 4108//3143 4102//3143 4101//3143
+f 4130//3144 4133//3144 4125//3144 4129//3144 4141//3144 4139//3144 4136//3144
+f 2587//3144 2586//3144 6618//3144 2592//3144 2590//3144
+f 2596//3145 2593//3145 2592//3145 6618//3145
+f 2585//3146 6618//3146 2586//3146
+f 4126//3146 4125//3146 4133//3146
+f 3793//3147 3792//3147 3791//3147
+f 4178//3147 6616//3147 4159//3147 4158//3147
+f 4176//3148 4175//3148 6616//3148 4178//3148
+f 2438//3149 2434//3149 2436//3149 2442//3149 2439//3149
+f 4167//3149 6616//3149 4162//3149
+f 4185//3150 4181//3150 4180//3150 4193//3150
+f 2336//3151 2334//3151 2330//3151 2333//3151 2326//3151 2325//3151
+f 4229//3152 4228//3152 4243//3152 4242//3152 4237//3152 4239//3152 4231//3152
+f 3358//3152 3353//3152 3352//3152 3347//3152 3350//3152 3363//3152
+f 3754//3152 3760//3152 3756//3152 3755//3152
+f 4227//3153 4243//3153 4228//3153
+f 4055//3154 4057//3154 6615//3154 4060//3154
+f 3761//3155 3758//3155 3760//3155 3754//3155 3753//3155 3765//3155
+f 2733//3156 2732//3156 2725//3156 2722//3156 2717//3156 2721//3156 2738//3156 2855//3156 2861//3156 2859//3156
+f 4233//3156 4232//3156 4231//3156 4239//3156
+f 6622//3157 2484//3157 2482//3157 2481//3157
+f 6619//3158 2410//3158 2402//3158 2401//3158
+f 2343//3158 2347//3158 2344//3158 2339//3158
+f 2352//3159 2350//3159 2348//3159 2347//3159 2343//3159 2342//3159
+f 4319//3160 4321//3160 4324//3160
+f 4324//3161 4321//3161 4318//3161 4314//3161 4313//3161 4312//3161 4322//3161
+f 4381//3162 4380//3162 4388//3162 4384//3162
+f 6192//3163 6191//3163 6193//3163
+f 6623//3164 4549//3164 4544//3164 4547//3164
+f 6170//3163 4693//3163 4690//3163 4689//3163 4686//3163 4685//3163 6177//3163 6174//3163
+f 4435//3163 4431//3163 4427//3163 4429//3163 4419//3163 4423//3163 4433//3163
+f 4419//3165 4429//3165 4426//3165 4420//3165
+f 6191//3165 6188//3165 6185//3165 6182//3165 6178//3165 6181//3165 6193//3165
+f 4489//3166 4488//3166 4486//3166 4484//3166 4478//3166 4481//3166
+f 4979//3167 4978//3167 4988//3167 4985//3167 4983//3167
+f 5891//3168 5888//3168 5887//3168
+f 4501//3169 4494//3169 4498//3169 4506//3169 4503//3169
+f 4518//3170 4517//3170 4516//3170 4522//3170
+f 4520//3171 4522//3171 4516//3171 4513//3171 4512//3171 4524//3171
+f 5563//3172 5562//3172 6624//3172 5567//3172
+f 6625//3173 4677//3173 4676//3173
+f 4552//3174 4555//3174 6623//3174 4559//3174 4558//3174
+f 4644//3175 4641//3175 4638//3175 4632//3175 4627//3175 4631//3175
+f 4752//3176 4751//3176 4746//3176 4744//3176 4738//3176 4741//3176
+f 4782//3177 4781//3177 6626//3177 4785//3177
+f 4431//3178 4435//3178 4432//3178
+f 6623//3178 4550//3178 4549//3178
+f 4779//3178 4778//3178 4798//3178 6626//3178 4781//3178
+f 6623//3179 4555//3179 4551//3179 4550//3179
+f 4796//3179 6626//3179 4798//3179 4791//3179
+f 6236//3179 6235//3179 6246//3179 6239//3179 6237//3179
+f 6243//3180 6240//3180 6238//3180 6239//3180 6246//3180
+f 6626//3180 4796//3180 4795//3180
+f 4789//3181 6626//3181 4795//3181 4790//3181
+f 6533//3181 6535//3181 6524//3181 6523//3181 6538//3181
+f 6626//3182 4786//3182 4785//3182
+f 5823//3183 5819//3183 5812//3183 5816//3183 5827//3183 5826//3183 5824//3183
+f 4823//3183 4828//3183 4834//3183 4829//3183
+f 4837//3184 4835//3184 4834//3184 4828//3184 4827//3184 4841//3184
+f 5363//3185 5364//3185 5371//3185 5367//3185 5365//3185
+f 4860//3185 4854//3185 4857//3185 4863//3185
+f 4879//3186 4873//3186 4876//3186 4882//3186
+f 6333//3187 6329//3187 6332//3187 6337//3187 6335//3187 5439//3187 5436//3187 5434//3187 5433//3187 5432//3187 5903//3187 5427//3187 5426//3187
+f 4883//3187 4882//3187 4876//3187 4872//3187 4868//3187 4867//3187
+f 6303//3188 6300//3188 6298//3188 6293//3188 6289//3188 6292//3188
+f 4412//3188 4411//3188 4893//3188 4891//3188 4890//3188 4889//3188 5516//3188 5517//3188 4414//3188
+f 4457//3188 4461//3188 4475//3188 4471//3188 4468//3188 4467//3188
+f 6402//3189 6401//3189 6400//3189 6412//3189 6404//3189
+f 6405//3190 6404//3190 6412//3190 6410//3190 6407//3190
+f 4887//3191 4402//3191 4397//3191 4396//3191 4415//3191 4414//3191 5517//3191 5515//3191 5513//3191 5512//3191 5518//3191
+f 5359//3192 5362//3192 5372//3192 5371//3192 5364//3192
+f 6341//3193 6343//3193 6627//3193 6347//3193 6346//3193
+f 4959//3194 6627//3194 6343//3194 4960//3194
+f 6500//3195 6499//3195 6628//3195 6502//3195
+f 4953//3195 4950//3195 4949//3195 6627//3195
+f 4954//3196 4953//3196 6627//3196 4956//3196
+f 6011//3197 6009//3197 6008//3197 6006//3197 6005//3197 6015//3197
+f 5157//3198 5159//3198 5155//3198 5154//3198 5163//3198 5162//3198
+f 5155//3199 5159//3199 5156//3199
+f 6098//3200 6114//3200 6099//3200
+f 5209//3201 4711//3201 4707//3201 4704//3201 4703//3201 4716//3201 4712//3201 4715//3201 5218//3201 5217//3201 5215//3201 5213//3201
+f 5189//3202 5194//3202 5201//3202 5197//3202 5195//3202
+f 6095//3203 6099//3203 6114//3203 6112//3203 6110//3203 6109//3203 6227//3203 6229//3203 6220//3203 6103//3203
+f 5717//3204 6629//3204 5720//3204 5715//3204
+f 5259//3205 5258//3205 5271//3205 5266//3205 5268//3205 5263//3205
+f 5260//3206 5263//3206 5268//3206 5265//3206
+f 5355//3207 5354//3207 5348//3207 5347//3207 5356//3207
+f 5810//3207 5809//3207 5806//3207 5804//3207 5803//3207 5801//3207 5800//3207
+f 5772//3208 5771//3208 5290//3208 5293//3208 5302//3208 5778//3208 5775//3208
+f 4768//3209 4767//3209 4774//3209 4771//3209 4770//3209
+f 5251//3210 5250//3210 5246//3210 5244//3210 5240//3210 5243//3210 5254//3210
+f 5343//3211 5348//3211 5354//3211 5353//3211 6271//3211 6269//3211 6267//3211 6266//3211 5349//3211
+f 4647//3212 4650//3212 4658//3212 4657//3212 4655//3212 4651//3212
+f 5247//3212 5246//3212 5250//3212
+f 6624//3213 5564//3213 5567//3213
+f 6324//3214 6323//3214 6322//3214 6328//3214 6327//3214 6325//3214
+f 5420//3214 5416//3214 5419//3214 5412//3214 5409//3214 5408//3214
+f 5867//3214 5871//3214 5892//3214 5877//3214 5872//3214
+f 5568//3215 6624//3215 5569//3215
+f 4938//3215 4941//3215 4922//3215 4921//3215
+f 5551//3215 5549//3215 5548//3215 5545//3215 5543//3215 5542//3215
+f 6421//3215 6630//3215 6424//3215 6422//3215 6420//3215
+f 5891//3216 5887//3216 5881//3216 5878//3216 5877//3216 5892//3216
+f 5564//3217 6624//3217 5568//3217 5565//3217
+f 4914//3217 4922//3217 4941//3217 4937//3217 4930//3217 4923//3217
+f 5414//3218 5413//3218 5412//3218 5419//3218
+f 5461//3219 5457//3219 5456//3219 5447//3219 5451//3219
+f 6362//3220 6361//3220 6370//3220 6369//3220 6363//3220
+f 5945//3220 5939//3220 5944//3220 5948//3220
+f 4999//3221 4998//3221 5009//3221 5480//3221 5484//3221 5494//3221 5488//3221 5487//3221 6380//3221 6379//3221 6378//3221 5008//3221 5006//3221 5001//3221
+f 5957//3221 5956//3221 5974//3221 5965//3221 5962//3221
+f 5973//3222 5966//3222 5965//3222 5974//3222
+f 5970//3223 5967//3223 5963//3223 5966//3223 5973//3223
+f 6428//3224 6630//3224 6417//3224 6416//3224
+f 5582//3225 5572//3225 5578//3225 5591//3225 5587//3225 5583//3225
+f 6448//3225 6447//3225 6446//3225 6445//3225 6450//3225
+f 6493//3225 6495//3225 6628//3225 6499//3225 6497//3225
+f 6460//3226 6455//3226 6454//3226 5599//3226 5598//3226 5611//3226 5607//3226 5606//3226 6466//3226
+f 5935//3226 5937//3226 6354//3226 6352//3226 6351//3226 5922//3226 5925//3226
+f 6562//3227 6566//3227 6580//3227 6577//3227 6573//3227 6571//3227
+f 6539//3227 5593//3227 5599//3227 6454//3227 6451//3227 6453//3227 6540//3227
+f 4819//3228 4818//3228 6461//3228 6460//3228 6466//3228 6462//3228 4822//3228
+f 5929//3228 5928//3228 6358//3228 6355//3228 6354//3228 5937//3228 5933//3228
+f 6630//3228 6418//3228 6417//3228
+f 4815//3229 4814//3229 4804//3229 4803//3229 6461//3229 4818//3229
+f 6624//3229 5557//3229 5556//3229 5570//3229 5569//3229
+f 6419//3229 6418//3229 6630//3229 6421//3229
+f 5380//3229 5379//3229 5373//3229 5377//3229 5383//3229 5381//3229
+f 4610//3230 4609//3230 4608//3230 4625//3230 5784//3230 5783//3230 6586//3230 6631//3230 5790//3230 4618//3230 4616//3230 4613//3230
+f 5794//3231 5791//3231 5790//3231 6631//3231 6589//3231 6588//3231 5796//3231
+f 5911//3231 5908//3231 5907//3231 5921//3231
+f 4746//3232 4751//3232 4749//3232 4747//3232
+f 5277//3232 5276//3232 6631//3232 6582//3232 5278//3232
+f 5275//3233 5289//3233 6631//3233 5276//3233
+f 6384//3233 6396//3233 6385//3233 5763//3233 5766//3233 5760//3233 5758//3233 5757//3233 5756//3233 5768//3233 6381//3233
+f 5759//3234 5760//3234 5766//3234 5761//3234
+f 5282//3234 6589//3234 6631//3234 5289//3234 5284//3234 5283//3234
+f 6386//3234 6385//3234 6396//3234 6394//3234 6392//3234 6389//3234
+f 5806//3235 5809//3235 5807//3235
+f 5337//3236 5334//3237 5319//3238 5323//3239 5309//3240 5308//3238 5324//3238 5326//3238 5330//3238 5341//3238 5338//3238
+f 5311//3241 5310//3241 5317//3241 5315//3241 5313//3241
+f 5722//3242 5721//3242 6629//3242 5728//3242 5726//3242
+f 5846//3242 5845//3242 5852//3242 5850//3242 5849//3242
+f 5238//3243 5237//3243 5239//3243
+f 5837//3244 5840//3244 5852//3244 5845//3244 5842//3244
+f 6629//3244 5713//3244 5712//3244 5728//3244
+f 5393//3245 5392//3245 5388//3245 5387//3245 5402//3245 5397//3245 5394//3245
+f 5859//3245 5858//3245 5853//3245 5857//3245 5861//3245
+f 6308//3245 6306//3245 6307//3245 6320//3245 6319//3245 6312//3245
+f 6313//3246 6312//3246 6319//3246 6318//3246
+f 6310//3247 6313//3247 6318//3247 6314//3247
+f 5389//3248 5388//3248 5392//3248
+f 5920//3249 5915//3249 5917//3249 5912//3249 5911//3249 5921//3249
+f 5909//3250 5912//3250 5917//3250 5914//3250
+f 5163//3250 5154//3250 5152//3250 5151//3250 5164//3250
+f 6550//3251 6552//3251 6559//3251 6557//3251 6555//3251
+f 5496//3251 5498//3251 5509//3251 5508//3251 5503//3251 5500//3251 5499//3251
+f 4451//3251 4450//3251 5986//3251 5985//3251 5984//3251 5976//3251 4447//3251 4446//3251 4444//3251 4437//3251 4441//3251 4454//3251
+f 5504//3252 5503//3252 5508//3252
+f 5977//3253 5976//3253 5984//3253 5981//3253 5979//3253
+f 4445//3253 4444//3253 4446//3253
+f 4961//3254 4964//3254 4976//3254 4968//3254
+f 4912//3254 4910//3254 4909//3254 4904//3254 4901//3254 4903//3254
+f 4900//3255 4913//3255 4912//3255 4903//3255 4896//3255
+f 4976//3256 4975//3256 4971//3256 4970//3256 4965//3256 4968//3256
+f 6501//3256 6503//3256 6628//3256 6504//3256
+f 5183//3256 5182//3256 5171//3256 5167//3256 5170//3256 5186//3256
+f 4905//3257 4904//3257 4909//3257
+f 6018//3256 6022//3256 6030//3256 6028//3256 6026//3256 6025//3256
+f 6035//3258 6032//3258 6031//3258 5089//3258 5088//3258 6042//3258 6044//3258
+f 6248//3258 6247//3258 6262//3258 6258//3258 6257//3258 6254//3258
+f 6431//3259 5641//3259 5636//3259 5640//3259 5653//3259 5652//3259 6436//3259 6434//3259 6433//3259 5093//3259 5090//3259 5089//3259 6031//3259 5084//3259 5083//3259 5082//3259 5094//3259
+f 6260//3259 6262//3259 6247//3259 6251//3259
+f 6038//3260 6041//3260 6036//3260 6035//3260 6044//3260
+f 6037//3261 6036//3261 6041//3261
+f 6477//3262 6475//3262 6474//3262 6473//3262 6470//3262 6469//3262
+f 6151//3262 6150//3262 6149//3262 6632//3262 6084//3262 6074//3262 6079//3262
+f 6167//3263 6632//3263 5699//3263 5691//3263 5695//3263 5711//3263 5706//3263 5705//3263
+f 5709//3264 5707//3264 5706//3264 5711//3264
+f 6632//3264 6167//3264 6166//3264
+f 6160//3265 6165//3265 6632//3265 6166//3265
+f 6165//3266 6164//3266 6632//3266
+f 6156//3267 6092//3267 6089//3267 6087//3267 6085//3267 6080//3267 6084//3267 6632//3267 6164//3267
+f 5013//3268 5012//3268 5028//3268 5016//3268
+f 6203//3269 6206//3269 6217//3269 6207//3269
+f 5661//3270 5660//3270 5665//3270
+f 6210//3271 6208//3271 6207//3271 6217//3271 6214//3271 6213//3271
+f 5014//3271 5016//3271 5028//3271 5023//3271 5022//3271 5017//3271
+f 4990//3271 4977//3271 4982//3271 4991//3271
+f 6281//3272 6280//3272 6277//3272 6276//3272 6286//3272 6283//3272
+f 5900//3273 5897//3273 5896//3273 5903//3273 5432//3273 5431//3273 5901//3273
+f 5472//3274 5469//3274 5463//3274 5465//3274 5948//3274 5944//3274 5943//3274 5953//3274 5950//3274 5479//3274 5476//3274 5475//3274
+f 6374//3274 6375//3274 6371//3274 6370//3274 6361//3274 6360//3274
+f 5954//3275 5953//3275 5943//3275 5942//3275
+f 6518//3276 6511//3276 6509//3276 6508//3276 6519//3276
+f 2083//3277 2085//3277 2070//3277 2075//3277 2089//3277 2086//3277
+f 4010//3278 4009//3278 4019//3278 4016//3278
+f 4329//3278 4328//3278 4333//3278 4332//3278
+f 2169//3279 2171//3279 2182//3279 2176//3279 2175//3279
+f 3695//3280 3691//3280 3694//3280 3699//3280 3698//3280 3259//3280 3255//3280 3254//3280 2699//3280 2698//3280
+f 2196//3280 2192//3280 2191//3280 2189//3280 2188//3280 2197//3280
+f 2270//3281 2267//3281 2262//3281 2266//3281 2275//3281 2274//3281 2272//3281
+f 4363//3282 4365//3282 4368//3282 4367//3282
+f 2203//3283 2220//3283 2204//3283
+f 2309//3284 2312//3284 2314//3284
+f 2357//3285 2356//3285 2370//3285 2358//3285
+f 2469//3286 2472//3286 2483//3286 6622//3286 2475//3286 2473//3286
+f 4066//3287 4061//3287 4065//3060 6615//3059
+f 2211//3288 2205//3288 2200//3288 2204//3288 2220//3288 2219//3288 2216//3288
+f 2509//3289 2504//3289 2496//3289 2493//3289 2492//3289
+f 2795//3290 2786//3290 2785//3290
+f 2614//3291 2603//3291 2602//3291
+f 3595//3292 3594//3292 3590//3292 3593//3292 3600//3292 3597//3292
+f 4034//3293 4036//3293 4039//3293
+f 2942//3294 2938//3294 2940//3294 2937//3294 2932//3294 2927//3294 2931//3294
+f 6615//3295 4048//3295 4047//3295 4066//3295
+f 3506//3296 3503//3296 3505//3296 3511//3296 3508//3296
+f 3229//3297 3226//3297 3222//3297 3216//3297 3220//3297 3232//3297
+f 3030//3103 3024//3298 3023//3298 3020//3298 3015//3298 3014//3104
+f 4261//3298 4259//3298 4256//3298 4257//3298 4269//3298 4268//3298 4263//3298
+f 3139//3299 3138//3299 6620//3299 3143//3299
+f 3144//3300 3148//3300 6620//3300 3151//3300
+f 3870//3301 3873//3301 3866//3301
+f 4075//3302 4074//3302 4084//3302 4080//3302 4082//3302 4076//3302
+f 2233//3303 2232//3303 2242//3303 2240//3303 2236//3303
+f 3696//3304 2705//3304 2703//3304 2702//3304 2701//3304 2700//3304 3260//3304 3256//3304 3259//3304 3698//3304
+f 2243//3304 2242//3304 2232//3304 2223//3304 2228//3304
+f 2706//3305 2711//3305 2713//3305
+f 2693//3305 2690//3305 2687//3305 2686//3305 2685//3305 3687//3305 3690//3305 3689//3305 2695//3305
+f 3632//3306 3631//3306 3640//3306 3638//3306 3635//3306
+f 2562//3307 2568//3307 2563//3307
+f 3774//3308 3773//3308 6617//3308 3778//3308 3777//3308 3776//3308
+f 2844//3308 2848//3308 2851//3308
+f 3375//3308 6614//3308 3369//3308
+f 3370//3309 3369//3309 6614//3309 3379//3309
+f 2280//3310 2281//3310 2284//3310 2283//3310
+f 4252//3310 4250//3310 4249//3310 4254//3310
+f 3451//3310 3440//3310 3439//3310
+f 3451//3311 3450//3311 3446//3311 3443//3311 3441//3311 3432//3311 3440//3311
+f 3525//3312 3523//3312 3522//3312 3517//3312 3519//3312 3530//3312
+f 3933//3313 3932//3313 3938//3313 3934//3313
+f 4048//3313 6615//3313 4053//3313 4049//3313
+f 3423//3314 3431//3314 3426//3314 3420//3314
+f 4053//3314 6615//3314 4054//3314
+f 4216//3315 4215//3315 6621//3315 4221//3315 4218//3315
+f 6621//3316 4223//3316 4222//3316 4221//3316
+f 3012//3316 2997//3316 2996//3316 3007//3316
+f 3111//3316 3114//3316 3103//3316 3102//3316
+f 3982//3317 3981//3317 3988//3317 3985//3317
+f 3123//3318 3122//3318 3127//3318
+f 3627//3319 3626//3319 3641//3319 3640//3319 3631//3319
+f 4263//3319 4268//3319 4264//3319
+f 3999//3320 3995//3320 3998//3320 4008//3320 4003//3320 4002//3320
+f 4356//3320 4354//3320 3655//3320 3648//3320 3654//3320 4352//3320 4351//3320
+f 4353//3321 4348//3321 4352//3321 3654//3321 3646//3321 3644//3321 2159//3321 2157//3321 2156//3321 2154//3321 2153//3321 2163//3321 3643//3321
+f 3874//3322 3873//3322 3870//3322 3862//3322 3865//3322 3879//3322 3875//3322
+f 4187//3322 4182//3322 4185//3322 4193//3322 4192//3322 4189//3322
+f 4189//3323 4192//3323 4191//3323 4190//3323
+f 2948//3323 2952//3323 2943//3323
+f 3876//3323 3875//3323 3879//3323 3877//3323
+f 3799//3324 3798//3324 3797//3324 3818//3324 3816//3324 3809//3324 3803//3324
+f 3817//3325 3816//3325 3818//3325
+f 4373//3325 4379//3325 4377//3325 4374//3325
+f 4389//3326 4388//3326 4380//3326 4379//3326 4373//3326 4372//3326
+f 4117//3326 4111//3326 4110//3326 4122//3326 4120//3326
+f 2410//3327 6619//3327 2413//3327 2411//3327
+f 4198//3328 2508//3328 2509//3328 2492//3328 2495//3328 4200//3328
+f 2781//3328 2797//3328 2792//3328 2795//3328 2785//3328 2778//3328
+f 2479//3329 2476//3329 2475//3329 6622//3329 2481//3329
+f 4042//3330 4040//3330 4039//3330 4036//3330 4032//3330 4031//3330 4030//3330
+f 2585//3331 2584//3331 6618//3331
+f 2443//3332 2442//3332 2436//3332 2433//3332 2432//3332
+f 3785//3332 3784//3332 3780//3332 3783//3332 3793//3332 3791//3332 3787//3332
+f 4161//3332 4157//3332 4159//3332 6616//3332 4167//3332
+f 3393//3332 3390//3332 3389//3332 3387//3332 3386//3332 3396//3332
+f 3429//3333 3428//3333 3424//3333 3426//3333 3431//3333 3430//3333 2420//3333 2414//3333 2418//3333 2429//3333 2426//3333 2424//3333 2423//3333
+f 4050//3333 4054//3333 6615//3333 4057//3333
+f 2484//3334 6622//3334 2483//3334
+f 6619//3335 2401//3335 2400//3335
+f 3418//3335 3417//3335 3416//3335 3415//3335 3828//3335 3419//3335
+f 2893//3335 2892//3335 2908//3335 2904//3335 2903//3335 2898//3335
+f 4669//3336 4665//3336 4668//3336 6625//3336 4675//3336 4672//3336
+f 4546//3336 6623//3336 4547//3336
+f 6175//3336 6177//3336 4685//3336 4684//3336 4697//3336 4696//3336 6169//3336
+f 5741//3337 5737//3337 5736//3337 5734//3337 5733//3337 5742//3337
+f 4508//3338 4504//3338 4506//3338 4498//3338 4497//3338
+f 5454//3338 5452//3338 5448//3338 5447//3338 5456//3338
+f 4675//3339 6625//3339 4676//3339
+f 4546//3339 4543//3339 4542//3339 4559//3339 6623//3339
+f 4572//3340 4571//3340 4563//3340 4562//3340 4573//3340
+f 5136//3341 5133//3341 5132//3341 4564//3341 4563//3341 4571//3341 4569//3341 4568//3341 5137//3341
+f 5138//3342 5147//3342 5146//3342 5142//3342 5141//3342 5139//3342
+f 4599//3342 4592//3342 4587//3342 4584//3342 4576//3342 4579//3342
+f 5628//3342 5629//3342 5635//3342 5632//3342 5631//3342 5630//3342
+f 4664//3343 4663//3343 4681//3343 6625//3343 4668//3343
+f 4783//3344 4786//3344 6626//3344 4789//3344
+f 6525//3345 6524//3345 6535//3345 6530//3345 6528//3345
+f 5819//3346 5823//3346 5817//3346
+f 5830//3347 5829//3347 5828//3347 5836//3347 5833//3347 5831//3347
+f 4849//3348 4847//3348 4846//3348 4863//3348 4857//3348 4850//3348
+f 5119//3349 5114//3349 5118//3349 5129//3349 5126//3349 5121//3349
+f 5048//3349 5047//3349 5053//3349 5051//3349
+f 5054//3350 5053//3350 5047//3350 5046//3350 5061//3350 5059//3350
+f 6628//3351 6503//3351 6502//3351
+f 5068//3351 5062//3351 5066//3351 5076//3351 5074//3351 5073//3351
+f 4949//3351 4944//3351 4947//3351 5440//3351 5443//3351 5446//3351 6627//3351
+f 4720//3351 4719//3351 4731//3351 4726//3351
+f 6198//3352 6197//3352 6195//3352 4733//3352 4732//3352 4731//3352 4719//3352 4723//3352 5744//3352 5747//3352 5753//3352 5748//3352 4737//3352 4736//3352 6194//3352 6200//3352
+f 6347//3352 6627//3352 5446//3352 5445//3352 6340//3352
+f 4959//3353 4957//3353 4956//3353 6627//3353
+f 6015//3354 6005//3354 6004//3354 6016//3354
+f 5204//3355 5206//3355 5202//3355
+f 5627//3356 5625//3356 5622//3356 5621//3356 5620//3356
+f 5206//3357 5204//3357 5199//3357 5201//3357 5194//3357 5193//3357
+f 6367//3358 6371//3358 6375//3358 6372//3358
+f 5220//3358 5223//3358 5239//3358 5237//3358 5234//3358 5231//3358 5224//3358
+f 5714//3358 5713//3358 6629//3358 5717//3358
+f 5527//3359 5534//3359 5533//3359 5528//3359
+f 5536//3360 5531//3360 5534//3360 5527//3360 5524//3360 5523//3360
+f 6629//3361 5721//3361 5718//3361 5720//3361
+f 5295//3362 5294//3362 5776//3362 5778//3362 5302//3362 5298//3362 5296//3362 4757//3362 4756//3362 4774//3362 4767//3362 4762//3362 4761//3362
+f 6364//3363 6363//3363 6369//3363
+f 6449//3364 6450//3364 6445//3364 6442//3364 6441//3364
+f 6492//3364 5175//3364 5172//3364 5171//3364 5182//3364 5181//3364 6504//3364 6628//3364 6495//3364
+f 4526//3365 4529//3365 4537//3365 4536//3365 4533//3365 4531//3365
+f 4812//3366 4809//3366 4805//3366 4804//3366 4814//3366
+f 5558//3365 5557//3365 6624//3365 5562//3365 5560//3365
+f 5617//3367 5612//3367 5615//3367 5627//3367 5620//3367
+f 6511//3367 6518//3367 6517//3367 6514//3367 6512//3367
+f 5105//3368 5104//3368 6054//3368 6052//3368 6050//3368 6049//3368 6046//3368 5102//3368 5099//3368 5095//3368 5098//3368 5112//3368
+f 6130//3368 6129//3368 6128//3368 6138//3368 6134//3368 6131//3368
+f 6135//3369 6132//3369 6134//3369 6138//3369
+f 5665//3370 5660//3370 5659//3370 5658//3370 5669//3370 5667//3370 5666//3370
+f 5686//3371 5683//3371 5685//3371 5677//3371 5676//3371
+f 5735//3371 5729//3371 5734//3371 5736//3371
+f 5679//3372 5682//3372 6145//3372 6144//3372 6139//3372 6142//3372 5678//3372 5677//3372 5685//3372
+f 6123//3373 6122//3373 6120//3373 6115//3373 6119//3373 6125//3373
+f 6583//3373 6582//3373 6631//3373 6586//3373
+f 6481//3374 6480//3374 6490//3374 6489//3374 6485//3374 6482//3374
+f 5317//3375 5310//3375 5309//3240 5323//3239 5318//3375
+f 5335//3376 5334//3237 5337//3236
+f 5862//3377 5861//3377 5857//3377 5856//3377 5866//3377
+f 5995//3377 5994//3377 5993//3377 5992//3377 6001//3377 5999//3377 5997//3377
+f 5041//3377 5039//3377 5036//3377 5034//3377 5033//3377 5042//3377
+f 5696//3378 5699//3378 6632//3378 6149//3378 6148//3378 5700//3378
+f 4977//3379 4990//3379 4986//3379 4988//3379 4978//3379
+f 6221//3380 6220//3380 6229//3380 6226//3380 6224//3380
+f 6068//3381 6065//3381 6061//3381 6056//3381 6060//3381 6072//3381
+f 5992//3382 5991//3382 6001//3382
+f 4678//3383 4677//3383 6625//3383 4681//3383
+f 6428//3384 6427//3384 6425//3384 6424//3384 6630//3384
+f 6560//3385 6559//3385 6552//3385 6546//3385 6549//3385
+o Land
+v -45.500000 -51.999996 -0.614933
+v -52.000008 -43.875008 0.054960
+v -51.999996 -48.750008 -0.171865
+v -39.000004 -47.125004 -0.303752
+v -43.875004 -43.875004 0.086369
+v -30.875000 -47.125000 0.372201
+v -35.750000 -43.875000 0.370599
+v -35.750000 -51.999996 0.791199
+v -25.999998 -51.999996 -0.000004
+v -21.125004 -43.875008 -0.179602
+v -26.000000 -43.875000 -0.200138
+v -21.125006 -52.000008 -0.586572
+v -14.625000 -45.500004 -0.401823
+v 0.000000 -52.000008 -0.000006
+v 4.875001 -43.875008 0.973670
+v 0.000000 -43.875004 0.770613
+v 6.499997 -51.999996 0.279277
+v 9.750002 -47.125008 1.577121
+v 25.999998 -51.999996 -0.000005
+v 24.375000 -45.500000 0.372793
+v 21.125006 -52.000008 -1.002032
+v 30.875000 -47.125004 0.302964
+v 40.625008 -52.000008 0.314043
+v 37.375004 -44.687504 0.177681
+v 35.750000 -51.999996 0.124166
+v 43.875000 -43.875000 0.558622
+v 45.500000 -51.999996 0.370568
+v 52.000008 -43.875008 -0.706337
+v -38.187508 -38.593758 -0.108052
+v -30.875000 -40.625004 0.014731
+v -4.875000 -43.875004 -0.379399
+v -11.375002 -40.625008 -0.005980
+v 14.625000 -47.125000 0.678846
+v 8.937501 -40.625004 0.410943
+v 21.125002 -40.625008 0.299901
+v 14.625000 -42.250000 1.078521
+v 19.500002 -45.500008 0.603011
+v 34.125000 -40.625008 -0.012631
+v -51.999996 -39.000008 -0.000007
+v -43.875004 -37.375000 -0.021706
+v -17.875004 -38.187508 -0.278367
+v -25.187502 -37.375000 0.049952
+v 1.625000 -37.375000 0.489066
+v -5.687500 -36.156250 -0.182069
+v 14.625003 -37.375008 0.570033
+v 45.500004 -37.375004 0.000785
+v -52.000008 -35.750008 0.271274
+v -30.875000 -34.937500 -1.024884
+v -20.312504 -34.125004 -0.461722
+v -11.375002 -35.750008 -0.005520
+v 8.124999 -34.937500 0.148099
+v 27.625000 -40.625004 0.357348
+v 30.875000 -34.125004 -1.208324
+v 24.375000 -34.125000 -0.405117
+v 40.625000 -37.375000 -0.315991
+v 35.750000 -34.125000 -0.590644
+v -45.500008 -32.500008 -0.259586
+v -51.999996 -32.500000 0.012509
+v -13.000000 -31.281254 -0.332978
+v -3.250000 -30.468756 0.578434
+v 4.062500 -30.875000 -0.305653
+v 19.500000 -34.125004 0.133790
+v 13.000000 -31.281254 -0.529387
+v 43.875004 -32.500000 -0.210261
+v 52.000008 -35.750004 0.093076
+v -52.000008 -27.625004 -0.058660
+v -40.625004 -32.500000 -0.774595
+v -43.875000 -27.625000 -0.245506
+v -34.125000 -30.875006 -0.586255
+v -39.000000 -27.625000 -0.268164
+v -24.375002 -30.875000 -0.880570
+v -29.250004 -29.250004 -0.602885
+v 17.062500 -26.000000 0.701845
+v 25.593752 -28.437500 -0.313394
+v 35.750000 -27.625000 0.118925
+v 39.000008 -30.875000 -0.357405
+v 45.500000 -28.031250 -0.342729
+v -52.000000 -26.000006 -0.000004
+v -34.531250 -22.750004 -0.727975
+v -29.250000 -24.375000 0.119365
+v -17.875002 -29.250004 0.502991
+v -24.375004 -24.375000 -0.045003
+v -17.468750 -24.375000 1.053528
+v -9.749999 -26.000004 -0.334142
+v 1.625001 -24.375002 -0.596920
+v 8.125001 -24.375004 -0.748141
+v -39.812508 -21.125000 0.056294
+v -11.375000 -21.125004 0.721835
+v -4.875000 -24.375002 0.560003
+v 21.125000 -21.125002 0.257298
+v 30.875000 -24.375000 0.471752
+v 26.812500 -21.125000 -0.181260
+v 40.625008 -21.125002 -0.146929
+v 47.125008 -20.312504 -1.184124
+v 52.000000 -24.374998 0.156510
+v -45.500004 -22.750004 0.073018
+v -52.000000 -16.397728 -0.105301
+v -30.875000 -17.875000 -0.350930
+v -24.375000 -17.468752 -0.694210
+v -17.875002 -17.875000 0.388251
+v 1.625000 -17.875004 0.025630
+v -6.093750 -17.062502 0.511108
+v 11.375000 -18.281252 -0.730525
+v 6.500001 -17.875000 -0.074157
+v 16.250000 -17.875000 -0.112608
+v 34.125004 -18.281252 0.764972
+v -37.375000 -16.249998 0.104063
+v -13.812502 -14.625000 -0.269572
+v 27.625000 -14.625002 -0.074934
+v 21.125000 -14.625000 -0.810850
+v 40.625008 -15.437503 -0.440936
+v -43.875000 -11.375000 0.104519
+v -45.093758 -17.062500 -0.091318
+v -30.875000 -11.375000 0.167431
+v -37.375000 -11.375000 -0.048270
+v -21.125000 -11.374999 -0.339523
+v -4.875000 -11.375002 0.272932
+v -9.750000 -11.374998 -0.018262
+v 2.031250 -11.375002 -0.455625
+v 16.250000 -11.375002 -0.173453
+v 11.375000 -11.375002 0.193009
+v 34.125000 -11.375000 1.454944
+v -25.187500 -7.718750 0.745207
+v -15.031250 -8.125000 -1.039942
+v 6.500001 -8.125000 0.150300
+v 27.625000 -9.750001 0.144455
+v 21.125002 -9.750000 -0.460371
+v 45.093754 -10.562501 -0.288220
+v 37.375000 -7.312500 -0.084199
+v -48.750000 -6.500000 0.187513
+v -51.999996 -12.999997 -0.000004
+v -43.875004 -4.875000 0.033656
+v -32.093754 -5.687501 0.031433
+v 4.468750 -2.234375 0.473515
+v 11.375000 -4.875000 0.912873
+v 30.062500 -4.875001 -0.344996
+v 24.375000 -4.875000 0.818270
+v 52.000000 -9.750002 0.403505
+v 43.875008 -4.875000 -0.273551
+v -52.000000 0.000000 0.000000
+v -36.968750 -1.625000 -0.340262
+v -39.000004 -6.500000 0.012513
+v -14.625003 -3.250001 -0.067411
+v -22.343754 -0.812500 0.438535
+v -8.125002 -6.500000 -1.249810
+v -1.625000 -6.500000 0.212048
+v -4.874999 -1.218750 -1.157613
+v 36.968750 -1.625001 -0.047700
+v -43.875008 1.625001 0.122494
+v -29.250006 -0.000001 -0.399639
+v -9.750001 -1.624999 -0.529982
+v -14.625003 1.624999 0.299809
+v 16.250002 -0.000002 -0.005871
+v 11.375002 -0.000002 0.063338
+v 24.984375 2.843749 0.040700
+v 30.875006 -0.000001 -1.536395
+v 52.000000 0.000000 0.000000
+v 43.875008 1.624999 0.133114
+v -51.999996 3.249997 -0.649985
+v -30.875000 4.875000 -0.196118
+v -19.500000 4.874999 0.728666
+v -8.124999 6.500001 0.341525
+v 17.875004 4.875000 0.080090
+v 9.750000 4.468750 -0.235460
+v 30.875000 4.875001 -0.371187
+v 37.375000 4.875001 0.276180
+v -52.000008 8.125002 0.153064
+v -37.375000 4.875002 -0.348155
+v -43.875004 6.500001 -0.096617
+v -15.437500 8.125000 0.418820
+v -1.625001 4.874999 -0.362543
+v 48.750008 3.250001 -0.207071
+v 43.875004 6.500000 0.202367
+v -35.750004 11.375002 -0.492869
+v -40.625004 11.375001 0.060413
+v -30.875000 11.374998 -0.291476
+v -24.375004 9.750000 0.068561
+v -24.375000 4.875001 0.811312
+v -19.500004 11.375002 -0.084847
+v -10.562500 11.374999 0.873314
+v 4.062500 6.906250 -0.359620
+v -1.624998 9.749998 0.529188
+v 21.125002 8.937501 -0.342159
+v 14.218750 13.000000 -0.000990
+v 26.812500 12.593749 -0.022003
+v 34.125000 11.375002 -0.016830
+v 40.625004 11.375000 0.395216
+v 45.500004 14.625000 -0.575324
+v 48.750008 8.125002 0.171281
+v -24.375000 14.625000 -0.216276
+v 1.625001 14.625000 -0.590961
+v 21.125000 14.625000 -0.401372
+v -39.000000 16.250000 0.242710
+v -43.468750 19.500000 0.415241
+v -29.250000 20.312500 -1.030489
+v -13.812502 14.625000 0.157591
+v -19.500000 18.281250 -0.911248
+v -4.875001 13.000000 1.030346
+v -8.125000 17.875000 0.713420
+v -3.250001 17.875002 0.341833
+v 17.062500 19.906250 0.059654
+v 34.125000 16.249996 -0.689055
+v 29.250000 17.875002 -0.687578
+v 40.625000 19.499998 -0.992783
+v -34.125000 16.250000 0.007468
+v -37.375000 21.125000 0.644363
+v -11.375001 22.750002 -0.447870
+v 6.500000 21.125000 -0.235567
+v 1.625000 21.125004 0.218590
+v 11.375001 21.125004 -0.050142
+v 8.531251 13.000000 0.081400
+v 24.375002 20.312504 -0.701679
+v 34.125000 21.125002 -0.451716
+v 47.125008 19.500002 -0.445400
+v -17.875004 22.750000 0.348315
+v -24.375002 24.375002 -0.341304
+v -4.875001 24.375002 -0.480032
+v 29.250000 24.375000 0.098432
+v -43.875008 27.625000 0.289985
+v -47.125008 22.750004 0.741983
+v -39.000000 27.625000 -0.424467
+v -29.250000 27.625000 -0.261093
+v -34.125000 27.625000 -0.416705
+v -14.625000 27.625000 0.060656
+v 4.875001 26.000000 0.007910
+v 9.750002 26.000000 0.216953
+v 16.656250 26.812500 0.009017
+v 25.593750 28.234375 0.244453
+v 39.000004 24.374998 -0.376630
+v 34.125000 26.812500 -0.399941
+v -19.500000 27.625000 -0.086975
+v -24.375002 29.250000 0.177554
+v -10.968750 32.500000 0.448720
+v -0.000001 27.625000 0.089650
+v -4.875000 29.250004 -0.007388
+v 11.375000 30.875000 0.012354
+v 4.875001 30.875000 -1.256353
+v 34.531250 32.500000 0.431515
+v 46.718758 24.375000 -0.769736
+v 40.625008 30.875000 0.644487
+v 46.312500 30.875000 0.183960
+v -47.125000 34.125000 -1.097996
+v -52.000000 29.250004 0.439636
+v -40.625000 34.125000 -0.104502
+v -34.125000 34.125000 -0.082943
+v -27.625000 34.125000 -0.177832
+v -17.875000 34.531250 0.427517
+v -22.750000 34.125000 0.539100
+v -1.625000 34.125000 -1.287874
+v -6.500003 34.125000 0.051822
+v 17.875002 34.125000 0.193342
+v 29.250000 34.125000 0.294090
+v 24.375000 34.125000 0.702717
+v 12.999998 35.750000 -0.170961
+v 6.093751 36.562500 -1.294542
+v 39.000000 37.375000 0.651018
+v 52.000008 34.124996 0.271071
+v 45.500004 37.375004 0.949136
+v -42.656254 39.812504 -0.262422
+v -52.000000 42.250008 0.481716
+v -35.750000 39.000000 -0.448039
+v -28.843750 40.015633 -0.494760
+v -4.875001 39.000004 0.431514
+v -11.375001 39.812508 0.524040
+v 0.000000 39.000000 0.000004
+v 11.375002 40.625004 -0.206536
+v 24.781250 42.250000 0.159883
+v 30.875000 39.812504 -0.203761
+v 43.062504 42.656254 0.186037
+v -34.125000 43.875000 -0.666983
+v -39.000000 43.875000 -0.317274
+v -21.125000 43.875004 0.443280
+v -21.125004 39.000008 0.277590
+v -16.250000 42.250008 -0.744044
+v -1.625000 43.875004 0.466695
+v 4.875000 43.875004 0.626991
+v 21.125000 39.000004 0.122309
+v 17.875000 43.875008 0.993016
+v 16.250004 39.000004 0.131159
+v 37.375000 43.875000 -0.781830
+v 51.999996 39.000004 0.000004
+v -43.875000 47.125000 -0.230965
+v -8.124999 43.875000 -0.023499
+v -13.000002 47.531254 -0.155538
+v 11.375000 46.312500 0.848139
+v 30.875000 44.687504 -0.029653
+v -52.000000 52.000000 0.000004
+v -34.124996 52.000008 -0.244909
+v -39.000004 51.999996 0.000004
+v -27.625000 47.937508 0.952216
+v -21.125004 48.750008 1.076026
+v -4.875001 48.750004 -0.858590
+v -0.812499 52.000008 -0.156766
+v 9.750002 52.000000 -0.167972
+v 17.875002 48.750008 0.205388
+v 27.625004 52.000008 0.115112
+v 32.500000 51.999996 0.107797
+v 39.000004 51.999996 0.000004
+v 35.750004 52.000008 0.241054
+v 52.000000 42.397736 -0.561429
+v 43.875008 52.000008 -0.541308
+v -52.000000 -52.000008 -0.000003
+v -40.625008 -52.000008 -0.603481
+v -30.875010 -52.000008 0.811088
+v 16.249996 -52.000000 -0.484148
+v 11.375006 -52.000008 -0.038105
+v 30.875010 -52.000008 0.592932
+v 52.000000 -32.500000 0.766970
+v 52.000008 -27.625004 0.049010
+v 52.000000 -16.249996 -1.031921
+v 47.937500 -14.625000 -0.621566
+v 52.000008 8.125001 -0.412910
+v 52.000008 14.625002 -0.008068
+v 52.000008 19.500002 0.731225
+v 52.000008 29.250000 0.379227
+v 26.000000 52.000000 0.000004
+v 17.875000 52.000000 0.302140
+v -24.375000 52.000008 -0.028592
+v -42.397736 52.000000 0.354935
+v -52.000000 16.536768 -0.147150
+v -47.125004 11.375000 0.442549
+v -52.000000 12.999997 0.000002
+v -52.000000 -3.249997 0.541167
+v -52.000008 -8.125002 0.618414
+v -6.499997 -51.999996 -0.220471
+v 51.999996 -48.750004 -1.002168
+v 51.999996 -39.000004 -0.000004
+v 17.875000 -4.875000 0.986181
+v 48.750004 51.999996 -0.171443
+v -16.249996 -52.000000 0.015721
+v -11.375006 -52.000008 -0.348321
+v 52.000000 -52.000008 -0.000001
+v 52.000008 3.250001 0.041274
+v 52.000008 24.375000 0.286849
+v 52.000000 52.000000 0.000004
+v -8.125001 52.000008 -1.300457
+v -13.000002 52.000008 0.000004
+v -17.875002 52.000008 0.752858
+v -29.250000 52.000008 0.234945
+v 52.000000 -52.000008 -10.000001
+v 52.000000 52.000000 -9.999996
+v -52.000000 52.000000 -9.999996
+v -52.000000 -52.000008 -10.000003
+vn 0.0448 -0.0464 0.9979
+vn 0.0198 -0.0899 0.9958
+vn 0.0361 0.0547 0.9979
+vn 0.0343 0.0520 0.9981
+vn 0.0341 0.0517 0.9981
+vn -0.0042 0.0246 0.9997
+vn 0.1193 -0.0497 0.9916
+vn 0.0216 -0.0500 0.9985
+vn -0.0417 -0.0941 0.9947
+vn -0.0420 -0.0940 0.9947
+vn -0.0414 -0.0943 0.9947
+vn -0.0427 -0.0936 0.9947
+vn -0.2026 -0.1235 0.9714
+vn -0.2002 -0.1059 0.9740
+vn -0.0038 -0.0582 0.9983
+vn -0.0389 0.0013 0.9992
+vn -0.0576 -0.0070 0.9983
+vn 0.1538 0.0079 0.9881
+vn -0.1999 -0.0034 0.9798
+vn 0.0804 0.0547 0.9953
+vn 0.0126 -0.0893 0.9959
+vn 0.1777 0.1953 0.9645
+vn 0.1385 -0.0809 0.9871
+vn 0.0471 0.0463 0.9978
+vn 0.0013 0.0478 0.9989
+vn -0.0035 0.0120 0.9999
+vn -0.0011 0.0163 0.9999
+vn -0.0039 0.0113 0.9999
+vn 0.0187 0.0166 0.9997
+vn 0.0096 0.0946 0.9955
+vn 0.0435 -0.0076 0.9990
+vn 0.0342 -0.0022 0.9994
+vn 0.0440 -0.0078 0.9990
+vn 0.0337 -0.0019 0.9994
+vn -0.0577 -0.0425 0.9974
+vn -0.0972 -0.0357 0.9946
+vn -0.0416 0.0536 0.9977
+vn 0.0560 0.1020 0.9932
+vn 0.0928 0.1033 0.9903
+vn 0.1537 0.0463 0.9870
+vn 0.0193 -0.0832 0.9963
+vn -0.1082 0.1788 0.9779
+vn 0.0532 0.0769 0.9956
+vn 0.0310 -0.0001 0.9995
+vn -0.0502 0.0390 0.9980
+vn 0.1207 0.1750 0.9771
+vn 0.0025 0.0880 0.9961
+vn 0.0417 0.0793 0.9960
+vn -0.0609 0.0509 0.9968
+vn 0.0371 0.0864 0.9956
+vn -0.1055 -0.0873 0.9906
+vn 0.0076 0.1185 0.9929
+vn -0.0258 0.1708 0.9850
+vn -0.0648 0.0216 0.9977
+vn -0.0231 0.0356 0.9991
+vn -0.0223 0.0376 0.9990
+vn -0.0230 0.0357 0.9991
+vn 0.0418 0.0146 0.9990
+vn 0.1050 -0.0379 0.9938
+vn -0.0033 -0.1023 0.9948
+vn 0.0006 -0.1035 0.9946
+vn 0.0040 -0.1057 0.9944
+vn 0.0293 -0.0823 0.9962
+vn 0.0308 -0.0828 0.9961
+vn 0.0293 -0.0825 0.9962
+vn 0.0312 0.1417 0.9894
+vn -0.1499 -0.1136 0.9821
+vn 0.1096 -0.0393 0.9932
+vn 0.1095 -0.0387 0.9932
+vn 0.1076 -0.0372 0.9935
+vn 0.1225 -0.0422 0.9916
+vn 0.1218 -0.0417 0.9917
+vn -0.0274 -0.1802 0.9832
+vn -0.1250 -0.1077 0.9863
+vn 0.0372 -0.1084 0.9934
+vn 0.0376 -0.1083 0.9934
+vn 0.0430 -0.1033 0.9937
+vn -0.0183 0.0363 0.9992
+vn 0.0230 -0.0361 0.9991
+vn -0.0024 0.0173 0.9998
+vn 0.0075 -0.1466 0.9892
+vn -0.1764 -0.1255 0.9763
+vn 0.1185 -0.1212 0.9855
+vn 0.1565 -0.0961 0.9830
+vn -0.0979 0.0605 0.9934
+vn 0.1245 0.0910 0.9880
+vn 0.0232 0.0531 0.9983
+vn 0.0232 0.0534 0.9983
+vn 0.0428 -0.1029 0.9938
+vn 0.1371 -0.0323 0.9900
+vn 0.1409 -0.1645 0.9763
+vn -0.0966 -0.2414 0.9656
+vn 0.1164 -0.0064 0.9932
+vn -0.1528 0.0076 0.9882
+vn 0.0475 0.0052 0.9989
+vn 0.1478 0.0764 0.9861
+vn -0.1533 0.1389 0.9784
+vn -0.1500 0.1428 0.9783
+vn -0.1531 0.1392 0.9784
+vn -0.0167 0.0110 0.9998
+vn -0.1480 0.0345 0.9884
+vn 0.0473 0.0838 0.9954
+vn -0.1572 0.0916 0.9833
+vn -0.1564 0.0924 0.9834
+vn -0.0001 0.1018 0.9948
+vn 0.0646 0.0174 0.9978
+vn 0.0658 0.0270 0.9975
+vn 0.0651 0.0177 0.9977
+vn 0.0208 -0.0979 0.9950
+vn 0.0218 -0.0967 0.9951
+vn 0.0232 -0.0953 0.9952
+vn 0.1273 -0.0708 0.9893
+vn -0.0096 0.0988 0.9951
+vn -0.1383 0.0261 0.9901
+vn 0.1248 -0.0721 0.9896
+vn 0.0424 -0.1086 0.9932
+vn -0.0595 0.1287 0.9899
+vn -0.1110 0.1612 0.9807
+vn -0.1283 -0.0002 0.9917
+vn 0.1511 0.0510 0.9872
+vn 0.1516 0.0511 0.9871
+vn 0.1601 0.0510 0.9858
+vn -0.0222 -0.0297 0.9993
+vn -0.0332 0.0312 0.9990
+vn 0.0575 -0.0794 0.9952
+vn 0.0572 -0.0797 0.9952
+vn 0.0501 -0.0797 0.9956
+vn -0.1624 0.0292 0.9863
+vn 0.0511 0.1363 0.9893
+vn 0.0466 0.1266 0.9909
+vn 0.0507 0.1357 0.9895
+vn -0.0595 0.0545 0.9967
+vn 0.0657 0.0277 0.9975
+vn 0.0204 0.0726 0.9972
+vn 0.1446 0.1568 0.9770
+vn 0.0743 -0.1322 0.9884
+vn 0.1357 0.0093 0.9907
+vn 0.2224 -0.0969 0.9701
+vn 0.1422 -0.1330 0.9809
+vn -0.1344 0.0917 0.9867
+vn -0.0690 -0.0904 0.9935
+vn -0.0725 -0.0856 0.9937
+vn -0.0689 -0.0900 0.9936
+vn -0.0924 -0.0714 0.9932
+vn -0.2080 -0.0440 0.9771
+vn 0.0095 -0.0401 0.9992
+vn -0.0077 -0.0252 0.9997
+vn -0.0079 -0.0249 0.9997
+vn -0.0072 -0.0330 0.9994
+vn 0.0235 0.0109 0.9997
+vn 0.0240 0.0109 0.9997
+vn 0.0273 0.0109 0.9996
+vn -0.0332 0.0168 0.9993
+vn -0.1023 0.0019 0.9948
+vn 0.1681 -0.1040 0.9803
+vn -0.0760 -0.0807 0.9938
+vn 0.0745 -0.1098 0.9912
+vn 0.2004 -0.0018 0.9797
+vn -0.1526 0.1740 0.9728
+vn 0.0680 0.3055 0.9498
+vn -0.0969 -0.0233 0.9950
+vn 0.0188 0.0382 0.9991
+vn -0.0115 0.0774 0.9969
+vn -0.0094 0.0799 0.9968
+vn -0.0118 0.0771 0.9970
+vn 0.0024 -0.1958 0.9806
+vn 0.0770 -0.2012 0.9765
+vn -0.2179 0.1172 0.9689
+vn -0.1530 0.1588 0.9754
+vn -0.0966 -0.0877 0.9914
+vn 0.0281 0.0025 0.9996
+vn 0.0303 -0.0033 0.9995
+vn 0.0307 -0.0042 0.9995
+vn 0.0605 -0.0136 0.9981
+vn -0.0092 0.0801 0.9967
+vn -0.1047 0.1271 0.9863
+vn 0.1188 -0.0746 0.9901
+vn 0.0129 0.1718 0.9850
+vn 0.0140 0.1717 0.9851
+vn 0.0036 0.1720 0.9851
+vn 0.1997 0.0826 0.9764
+vn -0.1632 0.2598 0.9518
+vn 0.0035 -0.0624 0.9980
+vn 0.0039 -0.0624 0.9980
+vn 0.0036 -0.0624 0.9980
+vn -0.0539 0.1958 0.9792
+vn 0.0154 -0.0366 0.9992
+vn -0.1298 -0.0845 0.9879
+vn 0.0414 -0.0748 0.9963
+vn 0.0404 -0.0714 0.9966
+vn 0.0403 -0.0710 0.9967
+vn 0.1374 -0.1328 0.9816
+vn -0.0413 0.0517 0.9978
+vn -0.2870 -0.2227 0.9317
+vn -0.0028 -0.0496 0.9988
+vn -0.1253 -0.1613 0.9789
+vn 0.0401 0.0448 0.9982
+vn 0.0498 0.0448 0.9978
+vn 0.0491 0.0448 0.9978
+vn 0.0067 -0.0175 0.9998
+vn 0.0657 -0.1635 0.9844
+vn 0.0743 -0.0142 0.9971
+vn 0.1128 -0.0061 0.9936
+vn -0.0413 0.0325 0.9986
+vn -0.0516 0.0146 0.9986
+vn -0.0191 0.1506 0.9884
+vn -0.0237 0.1242 0.9920
+vn -0.0153 -0.1160 0.9931
+vn 0.0625 -0.1796 0.9818
+vn 0.0636 -0.1796 0.9817
+vn 0.0749 0.0436 0.9962
+vn 0.0722 -0.0071 0.9974
+vn -0.0991 -0.0047 0.9951
+vn -0.0633 0.0134 0.9979
+vn 0.1539 0.0636 0.9860
+vn -0.0272 0.1006 0.9946
+vn 0.0120 0.0583 0.9982
+vn 0.1984 0.0919 0.9758
+vn -0.0683 0.0191 0.9975
+vn -0.0629 0.0104 0.9980
+vn -0.0634 0.0113 0.9979
+vn 0.0092 -0.0404 0.9991
+vn 0.1125 -0.0745 0.9909
+vn -0.0579 0.0927 0.9940
+vn -0.1100 0.1178 0.9869
+vn -0.1100 0.1181 0.9869
+vn -0.1096 0.1181 0.9869
+vn -0.0387 0.0391 0.9985
+vn 0.0755 0.1147 0.9905
+vn 0.2265 0.0616 0.9721
+vn 0.2238 0.0736 0.9718
+vn 0.2270 0.0616 0.9719
+vn 0.0663 -0.0361 0.9971
+vn 0.0366 0.1081 0.9935
+vn 0.0364 0.1084 0.9934
+vn 0.0482 0.1026 0.9936
+vn -0.0627 0.1363 0.9887
+vn 0.0837 0.1678 0.9823
+vn 0.2026 0.0071 0.9792
+vn 0.0211 0.1594 0.9870
+vn -0.1657 0.1226 0.9785
+vn 0.0921 -0.1231 0.9881
+vn 0.0145 0.0111 0.9998
+vn -0.0195 -0.0008 0.9998
+vn -0.0256 0.0055 0.9997
+vn -0.0187 0.0028 0.9998
+vn -0.0396 0.0752 0.9964
+vn 0.0485 0.1028 0.9935
+vn 0.0708 -0.0485 0.9963
+vn -0.0841 0.0013 0.9965
+vn -0.0853 0.0019 0.9964
+vn -0.0839 0.0014 0.9965
+vn -0.1560 -0.2150 0.9641
+vn 0.1157 -0.3082 0.9443
+vn -0.0458 0.2025 0.9782
+vn -0.0502 0.1129 0.9923
+vn 0.0320 -0.1200 0.9923
+vn 0.1072 0.0207 0.9940
+vn 0.1450 0.0225 0.9892
+vn -0.0317 -0.1046 0.9940
+vn -0.0533 -0.1045 0.9931
+vn -0.0537 -0.1050 0.9930
+vn -0.0537 -0.1051 0.9930
+vn 0.1216 -0.0225 0.9923
+vn 0.0927 -0.0188 0.9955
+vn -0.0427 -0.0642 0.9970
+vn -0.0404 -0.0656 0.9970
+vn -0.0428 -0.0640 0.9970
+vn -0.0193 0.0062 0.9998
+vn -0.0272 0.0057 0.9996
+vn -0.0735 -0.1071 0.9915
+vn -0.0093 -0.0091 0.9999
+vn 0.0187 -0.1058 0.9942
+vn 0.0237 -0.0960 0.9951
+vn 0.0203 -0.0974 0.9950
+vn 0.0189 -0.0924 0.9955
+vn -0.0519 -0.0964 0.9940
+vn -0.1857 0.2467 0.9512
+vn 0.0819 0.0399 0.9958
+vn -0.0741 -0.1389 0.9875
+vn -0.0730 -0.1383 0.9877
+vn -0.0697 -0.1395 0.9878
+vn 0.0501 -0.1672 0.9846
+vn 0.0799 -0.1398 0.9869
+vn 0.0658 0.2397 0.9686
+vn 0.1450 -0.0125 0.9894
+vn -0.0025 -0.0504 0.9987
+vn -0.0017 -0.0498 0.9988
+vn -0.0016 -0.0496 0.9988
+vn -0.0319 -0.0513 0.9982
+vn -0.0931 0.0105 0.9956
+vn 0.0296 -0.0834 0.9961
+vn 0.0284 -0.0821 0.9962
+vn 0.0298 -0.0838 0.9960
+vn -0.0215 -0.0639 0.9977
+vn -0.0296 -0.0671 0.9973
+vn -0.0302 -0.0672 0.9973
+vn 0.2642 0.0764 0.9614
+vn 0.0539 0.2199 0.9740
+vn 0.1116 0.2327 0.9661
+vn -0.0229 -0.0214 0.9995
+vn -0.0169 -0.0223 0.9996
+vn 0.0834 -0.0601 0.9947
+vn 0.0669 -0.0499 0.9965
+vn -0.1500 0.0870 0.9849
+vn -0.0558 0.0561 0.9969
+vn 0.0807 0.0192 0.9966
+vn 0.0481 -0.1108 0.9927
+vn 0.0338 -0.1712 0.9847
+vn 0.0314 0.0390 0.9987
+vn 0.0313 0.0384 0.9988
+vn 0.0309 0.0352 0.9989
+vn -0.1455 0.0231 0.9891
+vn 0.0130 -0.0096 0.9999
+vn 0.0847 -0.2811 0.9559
+vn 0.0847 -0.2810 0.9560
+vn 0.0846 -0.2808 0.9560
+vn 0.0900 -0.2823 0.9551
+vn -0.1659 -0.0481 0.9850
+vn -0.0770 -0.0157 0.9969
+vn -0.0811 -0.0197 0.9965
+vn 0.0846 0.0630 0.9944
+vn 0.0840 0.0626 0.9945
+vn 0.0834 0.0623 0.9946
+vn 0.0008 0.0870 0.9962
+vn -0.0926 0.0401 0.9949
+vn -0.0455 0.1223 0.9915
+vn 0.0715 -0.0509 0.9961
+vn 0.0715 -0.0516 0.9961
+vn 0.0002 0.0448 0.9990
+vn -0.0924 -0.0338 0.9951
+vn -0.0947 -0.0338 0.9949
+vn -0.1025 -0.0338 0.9942
+vn -0.1617 0.1813 0.9700
+vn 0.0880 -0.0658 0.9939
+vn -0.0245 -0.1034 0.9943
+vn -0.0033 -0.2547 0.9670
+vn 0.0018 -0.1747 0.9846
+vn 0.0922 -0.1152 0.9891
+vn -0.1266 0.1832 0.9749
+vn 0.0963 0.1858 0.9779
+vn 0.0167 -0.0015 0.9999
+vn 0.0460 0.0972 0.9942
+vn -0.0899 -0.1816 0.9793
+vn 0.1103 -0.0360 0.9932
+vn 0.1100 -0.0393 0.9932
+vn 0.1105 -0.0355 0.9932
+vn 0.0579 0.0493 0.9971
+vn 0.0501 -0.0390 0.9980
+vn -0.2115 -0.0507 0.9761
+vn -0.0322 -0.1748 0.9841
+vn 0.1299 -0.1276 0.9833
+vn 0.0669 0.1250 0.9899
+vn -0.0734 0.2157 0.9737
+vn -0.2454 0.0985 0.9644
+vn -0.0898 0.1502 0.9846
+vn 0.0491 0.1892 0.9807
+vn 0.1547 0.1576 0.9753
+vn 0.0331 -0.0051 0.9994
+vn 0.1095 -0.0430 0.9931
+vn 0.0735 -0.1101 0.9912
+vn -0.1797 -0.0586 0.9820
+vn 0.0851 0.0700 0.9939
+vn 0.0941 0.0526 0.9942
+vn -0.2749 0.0326 0.9609
+vn 0.1635 0.0885 0.9826
+vn 0.0892 -0.2029 0.9751
+vn 0.1035 -0.1980 0.9747
+vn 0.0955 0.0591 0.9937
+vn -0.2933 -0.1941 0.9361
+vn -0.0581 -0.0330 0.9978
+vn 0.0577 -0.1064 0.9926
+vn -0.0825 -0.1387 0.9869
+vn 0.1764 -0.0762 0.9814
+vn -0.0867 0.0708 0.9937
+vn -0.0869 0.0024 0.9962
+vn -0.2344 0.0451 0.9711
+vn -0.0765 -0.1494 0.9858
+vn -0.0280 0.0222 0.9994
+vn 0.0371 -0.0297 0.9989
+vn -0.0525 0.2739 0.9603
+vn 0.1027 -0.1493 0.9834
+vn -0.1225 -0.0458 0.9914
+vn -0.0761 0.0403 0.9963
+vn -0.0796 0.0322 0.9963
+vn -0.0800 0.0313 0.9963
+vn 0.1237 0.0157 0.9922
+vn -0.0052 -0.0314 0.9995
+vn -0.0050 -0.0310 0.9995
+vn -0.0039 -0.0852 0.9964
+vn -0.2506 0.0500 0.9668
+vn 0.1004 0.0245 0.9946
+vn -0.0058 0.0207 0.9998
+vn -0.0339 0.0263 0.9991
+vn -0.2286 -0.0919 0.9692
+vn 0.0878 -0.2181 0.9720
+vn 0.0459 -0.2286 0.9724
+vn 0.0240 -0.0127 0.9996
+vn -0.0116 -0.0255 0.9996
+vn 0.2344 -0.0589 0.9704
+vn 0.0607 -0.0287 0.9977
+vn 0.0363 0.0549 0.9978
+vn -0.0045 0.1760 0.9844
+vn -0.1390 -0.0809 0.9870
+vn -0.0058 0.0640 0.9979
+vn -0.0088 0.0091 0.9999
+vn 0.0099 -0.0034 0.9999
+vn 0.0568 0.0201 0.9982
+vn -0.0007 0.0166 0.9999
+vn 0.0170 -0.0406 0.9990
+vn -0.0042 -0.0379 0.9993
+vn 0.0471 -0.0206 0.9987
+vn -0.2285 0.0991 0.9685
+vn -0.0868 0.1034 0.9909
+vn 0.0166 0.0600 0.9981
+vn -0.0705 0.0983 0.9927
+vn -0.0652 0.1009 0.9928
+vn -0.0700 0.0983 0.9927
+vn -0.0645 0.1013 0.9928
+vn -0.0357 -0.1433 0.9890
+vn 0.0334 0.1797 0.9832
+vn -0.0419 -0.0001 0.9991
+vn 0.0333 0.0509 0.9982
+vn 0.0619 0.0410 0.9972
+vn 0.1097 0.0528 0.9926
+vn -0.0088 0.1122 0.9937
+vn 0.0556 0.2075 0.9767
+vn -0.1248 0.1188 0.9850
+vn -0.0070 -0.0286 0.9996
+vn 0.0489 0.0649 0.9967
+vn 0.1047 0.0833 0.9910
+vn 0.0419 0.1252 0.9913
+vn -0.0509 0.0884 0.9948
+vn 0.1271 -0.0054 0.9919
+vn -0.1188 0.1552 0.9807
+vn 0.0103 0.1404 0.9900
+vn -0.0285 0.0280 0.9992
+vn 0.1238 0.0746 0.9895
+vn 0.0030 0.1783 0.9840
+vn -0.0624 -0.0092 0.9980
+vn -0.0306 -0.0013 0.9995
+vn 0.0230 -0.0106 0.9997
+vn 0.0046 -0.1049 0.9945
+vn 0.0310 -0.0828 0.9961
+vn -0.1826 -0.1022 0.9779
+vn 0.0715 -0.2279 0.9710
+vn -0.0847 -0.0963 0.9917
+vn -0.0181 0.0362 0.9992
+vn 0.0793 0.0213 0.9966
+vn -0.1997 -0.1436 0.9693
+vn 0.0334 -0.1274 0.9913
+vn -0.1563 -0.0980 0.9828
+vn -0.1668 -0.0415 0.9851
+vn 0.1750 0.0496 0.9833
+vn 0.0273 0.0509 0.9983
+vn -0.1759 -0.0931 0.9800
+vn -0.0299 -0.1521 0.9879
+vn 0.0183 -0.0591 0.9981
+vn 0.0190 -0.0589 0.9981
+vn 0.0197 -0.0586 0.9981
+vn 0.0046 -0.0493 0.9988
+vn -0.1464 0.0752 0.9864
+vn 0.0768 -0.0308 0.9966
+vn 0.0768 -0.0306 0.9966
+vn 0.0768 -0.0262 0.9967
+vn 0.0297 -0.0638 0.9975
+vn 0.1181 -0.0480 0.9918
+vn 0.0003 0.0289 0.9996
+vn -0.0048 0.0292 0.9996
+vn 0.0008 0.0288 0.9996
+vn -0.0054 0.0293 0.9996
+vn 0.0335 0.0935 0.9951
+vn -0.1581 0.0908 0.9832
+vn 0.0308 0.0118 0.9995
+vn 0.1745 -0.0939 0.9802
+vn 0.0204 -0.0981 0.9950
+vn -0.1323 0.0858 0.9875
+vn -0.0256 0.0030 0.9997
+vn 0.0303 0.1618 0.9864
+vn 0.0332 0.1621 0.9862
+vn 0.0769 -0.0259 0.9967
+vn 0.1606 0.0510 0.9857
+vn 0.0360 -0.1035 0.9940
+vn 0.0235 0.0312 0.9992
+vn 0.0498 -0.0794 0.9956
+vn -0.0896 0.0350 0.9954
+vn 0.1047 0.0669 0.9923
+vn -0.0686 -0.1322 0.9888
+vn -0.1265 0.0093 0.9919
+vn -0.1814 -0.0978 0.9785
+vn 0.0313 -0.0600 0.9977
+vn -0.0063 -0.1466 0.9892
+vn 0.0466 0.1262 0.9909
+vn 0.0823 -0.0715 0.9940
+vn -0.1124 -0.0447 0.9927
+vn 0.3309 0.0911 0.9393
+vn 0.0279 0.0109 0.9996
+vn -0.0002 -0.0125 0.9999
+vn -0.0008 -0.0127 0.9999
+vn 0.0002 -0.0124 0.9999
+vn -0.0012 -0.0129 0.9999
+vn -0.0305 0.2544 0.9666
+vn -0.0575 0.2625 0.9632
+vn -0.2167 0.1565 0.9636
+vn 0.1047 -0.0574 0.9928
+vn 0.0345 -0.1102 0.9933
+vn -0.0818 -0.1097 0.9906
+vn -0.0111 -0.1729 0.9849
+vn 0.1253 -0.2045 0.9708
+vn 0.0249 -0.2691 0.9628
+vn -0.0909 -0.1955 0.9765
+vn 0.0278 0.0034 0.9996
+vn 0.0249 0.0618 0.9978
+vn 0.1720 -0.0271 0.9847
+vn 0.1282 -0.1032 0.9864
+vn 0.1350 -0.1008 0.9857
+vn 0.1279 -0.1030 0.9864
+vn 0.1353 -0.1005 0.9857
+vn -0.0387 -0.0092 0.9992
+vn -0.0583 0.0413 0.9974
+vn -0.0123 -0.0137 0.9998
+vn -0.0800 0.0771 0.9938
+vn 0.0416 -0.0750 0.9963
+vn 0.0030 0.1717 0.9851
+vn -0.0111 0.1959 0.9806
+vn -0.0634 0.1787 0.9819
+vn 0.0257 0.0982 0.9948
+vn 0.3312 0.1715 0.9278
+vn 0.0033 -0.0624 0.9980
+vn 0.0695 0.0056 0.9976
+vn -0.0234 -0.0002 0.9997
+vn -0.1521 -0.1186 0.9812
+vn 0.0169 -0.0594 0.9981
+vn 0.0861 -0.1233 0.9886
+vn -0.1755 -0.0348 0.9839
+vn -0.0324 0.0893 0.9955
+vn 0.0175 0.0915 0.9956
+vn 0.0337 0.0789 0.9963
+vn 0.0142 -0.0224 0.9996
+vn 0.0005 -0.0178 0.9998
+vn 0.1466 -0.2300 0.9621
+vn -0.0990 -0.0433 0.9941
+vn 0.0362 0.0996 0.9944
+vn 0.0396 0.0449 0.9982
+vn 0.0824 -0.0080 0.9966
+vn 0.0286 0.0807 0.9963
+vn 0.0149 -0.0142 0.9998
+vn 0.0181 -0.0271 0.9995
+vn 0.0150 -0.0148 0.9998
+vn 0.0321 -0.0773 0.9965
+vn 0.0099 -0.1034 0.9946
+vn 0.0585 -0.0711 0.9957
+vn 0.0262 -0.0496 0.9984
+vn -0.0234 0.0147 0.9996
+vn -0.1515 0.1489 0.9772
+vn 0.0168 0.1242 0.9921
+vn 0.0615 -0.1796 0.9818
+vn -0.0401 -0.0428 0.9983
+vn 0.0145 -0.0350 0.9993
+vn -0.0384 -0.0073 0.9992
+vn -0.0685 0.0193 0.9975
+vn -0.0090 -0.0499 0.9987
+vn 0.0182 -0.0274 0.9995
+vn -0.0407 0.0583 0.9975
+vn -0.0762 0.0590 0.9953
+vn -0.1422 0.0752 0.9870
+vn -0.1414 0.0760 0.9870
+vn -0.1420 0.0752 0.9870
+vn 0.0031 -0.1069 0.9943
+vn 0.0319 -0.1211 0.9921
+vn 0.2239 0.0740 0.9718
+vn -0.0971 -0.0008 0.9953
+vn 0.0554 0.0104 0.9984
+vn -0.0792 0.0390 0.9961
+vn -0.0768 0.0411 0.9962
+vn 0.0587 -0.0230 0.9980
+vn 0.0479 -0.1178 0.9919
+vn -0.0411 -0.0884 0.9952
+vn 0.1671 0.0510 0.9846
+vn 0.0524 0.1186 0.9916
+vn -0.1404 0.0769 0.9871
+vn 0.0221 0.1366 0.9904
+vn -0.0381 0.1683 0.9850
+vn -0.0171 -0.0764 0.9969
+vn 0.0480 -0.0979 0.9940
+vn -0.1159 0.1083 0.9873
+vn 0.1069 -0.1229 0.9867
+vn -0.0933 0.0155 0.9955
+vn -0.0380 0.0295 0.9988
+vn 0.1039 -0.0069 0.9946
+vn -0.0159 -0.0486 0.9987
+vn -0.0221 -0.1246 0.9920
+vn -0.0377 -0.1229 0.9917
+vn 0.0752 0.1436 0.9868
+vn 0.1100 -0.1345 0.9848
+vn -0.0628 -0.1198 0.9908
+vn 0.0559 -0.1068 0.9927
+vn 0.0556 -0.1067 0.9927
+vn 0.0533 -0.1077 0.9928
+vn -0.0838 0.0592 0.9947
+vn 0.0325 0.0708 0.9970
+vn -0.0753 0.1434 0.9868
+vn -0.0016 0.1619 0.9868
+vn 0.2069 0.0560 0.9768
+vn -0.0909 0.0585 0.9941
+vn -0.0302 0.0789 0.9964
+vn -0.1108 -0.0080 0.9938
+vn 0.0255 0.0262 0.9993
+vn -0.0379 -0.0673 0.9970
+vn 0.0351 -0.0430 0.9985
+vn 0.1062 -0.0091 0.9943
+vn 0.0506 -0.1086 0.9928
+vn -0.0541 -0.1057 0.9929
+vn 0.0174 -0.0923 0.9956
+vn 0.0230 -0.0965 0.9951
+vn 0.0994 0.2498 0.9632
+vn -0.0428 0.0561 0.9975
+vn 0.0262 0.0332 0.9991
+vn -0.0712 -0.1374 0.9880
+vn -0.1497 0.1343 0.9796
+vn -0.0033 -0.0513 0.9987
+vn 0.0146 -0.0165 0.9998
+vn -0.1455 -0.0249 0.9891
+vn 0.0272 -0.0806 0.9964
+vn -0.0216 -0.0632 0.9978
+vn 0.0829 0.0155 0.9964
+vn -0.0166 -0.0224 0.9996
+vn -0.0778 -0.0933 0.9926
+vn -0.0686 -0.1395 0.9878
+vn -0.0013 0.0070 1.0000
+vn -0.1914 0.0476 0.9804
+vn -0.0377 -0.0104 0.9992
+vn -0.0455 -0.1224 0.9914
+vn -0.1510 -0.0265 0.9882
+vn -0.0033 0.0736 0.9973
+vn -0.0036 0.0735 0.9973
+vn -0.0037 0.0735 0.9973
+vn -0.0040 0.0733 0.9973
+vn 0.0146 0.0567 0.9983
+vn -0.0884 0.0827 0.9926
+vn 0.0189 0.0473 0.9987
+vn -0.0062 -0.0106 0.9999
+vn 0.1312 -0.1204 0.9840
+vn 0.2615 -0.1613 0.9516
+vn -0.0729 -0.0116 0.9973
+vn 0.0018 0.0134 0.9999
+vn -0.0780 0.0665 0.9947
+vn -0.0731 0.0699 0.9949
+vn -0.0776 0.0669 0.9947
+vn -0.0725 0.0701 0.9949
+vn 0.0845 0.0629 0.9944
+vn 0.1308 0.0550 0.9899
+vn 0.0309 0.0346 0.9989
+vn -0.1039 -0.0338 0.9940
+vn 0.2639 0.0902 0.9603
+vn 0.0281 0.1114 0.9934
+vn -0.0751 0.0429 0.9963
+vn 0.1110 -0.2352 0.9656
+vn -0.1136 -0.1361 0.9842
+vn 0.0453 -0.0357 0.9983
+vn -0.0413 0.2052 0.9778
+vn 0.0869 0.1624 0.9829
+vn 0.0818 0.0093 0.9966
+vn -0.1459 -0.1560 0.9769
+vn 0.1651 -0.2090 0.9639
+vn -0.2346 0.0361 0.9714
+vn 0.0349 -0.1822 0.9826
+vn -0.0083 -0.0390 0.9992
+vn 0.0715 -0.0517 0.9961
+vn -0.0028 -0.1287 0.9917
+vn -0.0246 0.0789 0.9966
+vn 0.0011 0.0967 0.9953
+vn 0.0184 0.1595 0.9870
+vn 0.0197 0.0139 0.9997
+vn -0.0706 0.0252 0.9972
+vn 0.0015 -0.0191 0.9998
+vn -0.0406 -0.1328 0.9903
+vn 0.1101 0.0676 0.9916
+vn -0.0755 -0.0660 0.9950
+vn -0.0023 -0.0606 0.9982
+vn -0.0041 0.0897 0.9960
+vn -0.1221 0.0940 0.9881
+vn 0.0744 0.0454 0.9962
+vn -0.0262 -0.0049 0.9996
+vn 0.0621 -0.2952 0.9534
+vn 0.1751 -0.2566 0.9505
+vn -0.1205 0.0589 0.9910
+vn 0.0544 0.2942 0.9542
+vn -0.0686 0.1454 0.9870
+vn -0.1498 0.1431 0.9783
+vn 0.0124 -0.2156 0.9764
+vn -0.0762 -0.0127 0.9970
+vn -0.0759 0.0925 0.9928
+vn 0.1766 -0.0612 0.9824
+vn -0.2321 -0.1458 0.9617
+vn -0.1954 0.0890 0.9767
+vn -0.1961 -0.0186 0.9804
+vn -0.0526 -0.0583 0.9969
+vn -0.0577 -0.0297 0.9979
+vn -0.1545 -0.0202 0.9878
+vn 0.0564 0.1896 0.9802
+vn 0.2576 -0.0336 0.9657
+vn 0.1438 -0.0439 0.9886
+vn 0.1525 -0.0344 0.9877
+vn 0.1510 -0.0360 0.9879
+vn 0.1431 -0.0448 0.9887
+vn -0.1166 0.2131 0.9700
+vn 0.0530 0.1941 0.9795
+vn -0.0971 0.1353 0.9860
+vn -0.0367 -0.1083 0.9934
+vn 0.3036 -0.0031 0.9528
+vn 0.2621 0.1585 0.9519
+vn 0.1909 -0.1235 0.9738
+vn -0.0000 -0.0000 1.0000
+vn -0.0000 1.0000 -0.0000
+vn -0.0000 1.0000 0.0002
+vn -1.0000 0.0000 0.0000
+vn -1.0000 0.0000 -0.0001
+vn 0.0000 -1.0000 0.0001
+vn 0.0000 -1.0000 -0.0000
+vn -1.0000 0.0000 0.0001
+vn -0.0000 -1.0000 -0.0002
+vn -0.0000 -1.0000 -0.0001
+vn 1.0000 0.0000 0.0000
+vn 1.0000 -0.0000 -0.0001
+s 1
+f 6633//3386 6634//3386 6635//3386
+f 6636//3387 6637//3387 6633//3387
+f 6638//3388 6639//3389 6640//3390
+f 6641//3391 6642//3391 6643//3391
+f 6644//3392 6642//3392 6641//3392
+f 6645//3393 6642//3393 6644//3393
+f 6646//3394 6647//3395 6648//3396
+f 6649//3397 6647//3395 6646//3394
+f 6649//3398 6650//3398 6647//3398
+f 6651//3399 6652//3399 6653//3399
+f 6654//3400 6652//3400 6651//3400
+f 6655//3401 6656//3401 6657//3401
+f 6655//3402 6658//3402 6656//3402
+f 6659//3403 6660//3403 6658//3403
+f 6639//3404 6661//3404 6636//3404
+f 6643//3405 6662//3405 6638//3405
+f 6663//3406 6664//3406 6645//3406
+f 6665//3407 6666//3407 6650//3407
+f 6665//3408 6667//3408 6668//3408
+f 6652//3409 6667//3409 6669//3409
+f 6656//3410 6670//3410 6654//3410
+f 6637//3411 6671//3412 6634//3413
+f 6661//3414 6672//3414 6637//3414
+f 6639//3415 6662//3415 6661//3415
+f 6642//3416 6673//3417 6674//3418
+f 6645//3419 6673//3417 6642//3416
+f 6664//3420 6673//3420 6645//3420
+f 6663//3421 6675//3421 6676//3421
+f 6647//3422 6675//3422 6648//3422
+f 6647//3423 6666//3423 6675//3423
+f 6668//3424 6667//3424 6677//3424
+f 6660//3425 6678//3425 6658//3425
+f 6672//3426 6679//3426 6671//3426
+f 6662//3427 6674//3427 6680//3427
+f 6673//3428 6681//3428 6674//3428
+f 6676//3429 6682//3429 6664//3429
+f 6666//3430 6677//3430 6683//3430
+f 6684//3431 6685//3431 6686//3431
+f 6670//3432 6687//3432 6688//3432
+f 6679//3433 6689//3433 6690//3433
+f 6682//3434 6691//3434 6673//3434
+f 6676//3435 6691//3435 6682//3435
+f 6675//3436 6692//3436 6676//3436
+f 6675//3437 6683//3437 6693//3437
+f 6694//3438 6695//3438 6677//3438
+f 6678//3439 6696//3439 6687//3439
+f 6678//3440 6697//3441 6696//3442
+f 6689//3443 6698//3443 6690//3443
+f 6699//3444 6700//3444 6689//3444
+f 6701//3445 6702//3446 6699//3447
+f 6703//3448 6704//3449 6680//3450
+f 6695//3451 6693//3451 6683//3451
+f 6694//3452 6705//3452 6695//3452
+f 6694//3453 6706//3454 6705//3455
+f 6685//3456 6706//3454 6686//3457
+f 6685//3458 6707//3458 6706//3458
+f 6688//3459 6707//3459 6685//3459
+f 6688//3460 6708//3461 6707//3462
+f 6697//3441 6709//3463 6696//3442
+f 6698//3464 6700//3464 6710//3464
+f 6704//3465 6711//3465 6701//3465
+f 6703//3466 6712//3466 6704//3466
+f 6713//3467 6714//3467 6703//3467
+f 6691//3468 6715//3468 6713//3468
+f 6691//3469 6716//3469 6715//3469
+f 6692//3470 6716//3470 6691//3470
+f 6693//3471 6717//3471 6692//3471
+f 6693//3472 6718//3472 6717//3473
+f 6708//3461 6709//3474 6707//3462
+f 6702//3475 6711//3475 6719//3475
+f 6716//3476 6720//3476 6715//3476
+f 6721//3477 6720//3477 6716//3477
+f 6706//3478 6722//3478 6705//3478
+f 6723//3479 6724//3479 6706//3479
+f 6709//3480 6725//3480 6707//3480
+f 6709//3481 6726//3481 6725//3481
+f 6709//3482 6727//3483 6726//3484
+f 6728//3485 6729//3485 6710//3485
+f 6712//3486 6730//3486 6711//3486
+f 6712//3487 6731//3487 6730//3487
+f 6715//3488 6731//3488 6714//3489
+f 6715//3490 6720//3490 6732//3490
+f 6721//3491 6733//3492 6734//3493
+f 6718//3494 6733//3495 6717//3496
+f 6718//3497 6735//3497 6736//3497
+f 6722//3498 6737//3498 6705//3498
+f 6723//3499 6738//3499 6724//3499
+f 6711//3500 6739//3500 6719//3500
+f 6730//3501 6739//3501 6711//3501
+f 6720//3502 6734//3502 6740//3502
+f 6722//3503 6741//3503 6742//3503
+f 6738//3504 6741//3504 6724//3504
+f 6726//3505 6743//3506 6725//3507
+f 6739//3508 6744//3508 6745//3508
+f 6739//3509 6746//3509 6747//3509
+f 6731//3510 6746//3511 6730//3512
+f 6732//3513 6748//3513 6731//3513
+f 6732//3514 6740//3515 6748//3516
+f 6734//3517 6749//3517 6750//3517
+f 6733//3492 6749//3518 6734//3493
+f 6736//3519 6751//3519 6733//3519
+f 6735//3520 6751//3520 6736//3520
+f 6735//3521 6752//3521 6753//3521
+f 6742//3522 6752//3522 6737//3522
+f 6738//3523 6743//3523 6754//3523
+f 6748//3524 6755//3524 6731//3524
+f 6750//3525 6756//3525 6740//3525
+f 6753//3526 6757//3527 6751//3528
+f 6742//3529 6758//3529 6759//3529
+f 6754//3530 6758//3530 6741//3530
+f 6743//3531 6760//3531 6761//3531
+f 6744//3532 6762//3533 6763//3534
+f 6747//3535 6764//3536 6744//3537
+f 6746//3538 6765//3538 6747//3538
+f 6755//3539 6765//3539 6746//3539
+f 6748//3540 6756//3540 6755//3540
+f 6751//3528 6757//3527 6766//3541
+f 6752//3542 6767//3542 6753//3542
+f 6758//3543 6768//3543 6769//3543
+f 6754//3544 6768//3544 6758//3544
+f 6754//3545 6761//3545 6768//3545
+f 6760//3546 6770//3546 6771//3546
+f 6762//3547 6764//3547 6772//3547
+f 6765//3548 6773//3549 6774//3550
+f 6756//3551 6775//3551 6776//3551
+f 6777//3552 6775//3552 6756//3552
+f 6778//3553 6779//3553 6777//3553
+f 6778//3554 6766//3554 6779//3554
+f 6767//3555 6766//3555 6757//3555
+f 6761//3556 6771//3557 6780//3558
+f 6764//3559 6773//3559 6781//3559
+f 6765//3548 6782//3560 6773//3549
+f 6765//3561 6776//3561 6782//3561
+f 6783//3562 6784//3562 6775//3562
+f 6767//3563 6785//3564 6786//3565
+f 6768//3566 6787//3566 6769//3566
+f 6780//3567 6788//3567 6768//3567
+f 6771//3568 6789//3569 6790//3570
+f 6781//3571 6791//3571 6772//3571
+f 6782//3572 6792//3572 6773//3572
+f 6776//3573 6792//3573 6782//3573
+f 6776//3574 6784//3575 6793//3576
+f 6779//3577 6794//3577 6783//3577
+f 6786//3578 6795//3578 6796//3578
+f 6780//3579 6797//3579 6788//3579
+f 6780//3580 6790//3580 6798//3580
+f 6781//3581 6799//3581 6791//3581
+f 6781//3582 6800//3583 6801//3584
+f 6794//3585 6802//3585 6784//3585
+f 6779//3586 6803//3586 6794//3586
+f 6804//3587 6805//3587 6790//3587
+f 6800//3588 6806//3588 6807//3588
+f 6800//3589 6808//3589 6806//3589
+f 6792//3590 6809//3590 6808//3590
+f 6810//3591 6811//3591 6809//3591
+f 6793//3592 6802//3592 6811//3592
+f 6794//3593 6812//3593 6802//3593
+f 6803//3594 6813//3595 6814//3594
+f 6795//3596 6815//3596 6816//3596
+f 6797//3597 6817//3597 6787//3597
+f 6798//3598 6818//3598 6797//3598
+f 6798//3599 6819//3599 6818//3599
+f 6805//3600 6820//3600 6819//3600
+f 6821//3601 6820//3601 6805//3601
+f 6811//3602 6822//3602 6809//3602
+f 6813//3603 6823//3603 6814//3603
+f 6817//3604 6824//3605 6815//3606
+f 6807//3607 6825//3607 6826//3607
+f 6806//3608 6825//3608 6807//3608
+f 6822//3609 6827//3609 6808//3609
+f 6828//3610 6829//3611 6811//3612
+f 6830//3613 6831//3613 6812//3613
+f 6830//3614 6832//3614 6831//3614
+f 6830//3615 6823//3616 6832//3617
+f 6816//3618 6824//3618 6833//3618
+f 6817//3619 6834//3620 6835//3621
+f 6819//3622 6834//3622 6818//3622
+f 6819//3623 6820//3623 6836//3623
+f 6837//3624 6827//3624 6838//3624
+f 6822//3625 6829//3625 6827//3625
+f 6828//3626 6831//3626 6839//3626
+f 6823//3627 6840//3627 6841//3627
+f 6816//3628 6842//3628 6843//3628
+f 6816//3629 6833//3630 6842//3631
+f 6817//3632 6844//3632 6824//3632
+f 6835//3621 6844//3633 6817//3619
+f 6834//3634 6836//3634 6845//3634
+f 6820//3635 6846//3636 6836//3637
+f 6829//3638 6847//3638 6848//3638
+f 6839//3639 6847//3639 6829//3639
+f 6831//3640 6849//3640 6839//3640
+f 6841//3641 6849//3641 6832//3641
+f 6845//3642 6850//3642 6835//3642
+f 6826//3643 6851//3643 6852//3643
+f 6826//3644 6853//3644 6851//3644
+f 6827//3645 6854//3645 6855//3645
+f 6827//3646 6848//3647 6854//3648
+f 6839//3649 6856//3649 6847//3649
+f 6840//3650 6857//3650 6841//3650
+f 6840//3651 6858//3652 6857//3653
+f 6833//3630 6859//3654 6842//3631
+f 6833//3630 6860//3655 6859//3654
+f 6844//3656 6850//3656 6860//3656
+f 6845//3657 6861//3657 6862//3657
+f 6848//3658 6863//3658 6864//3658
+f 6849//3659 6865//3660 6839//3661
+f 6866//3662 6867//3662 6849//3662
+f 6857//3663 6868//3663 6869//3663
+f 6862//3664 6860//3664 6850//3664
+f 6861//3665 6870//3666 6862//3667
+f 6871//3668 6872//3668 6861//3668
+f 6871//3669 6873//3669 6872//3669
+f 6851//3670 6874//3670 6875//3670
+f 6853//3671 6876//3671 6851//3671
+f 6855//3672 6876//3673 6853//3674
+f 6854//3675 6877//3675 6855//3675
+f 6864//3676 6878//3676 6854//3676
+f 6864//3677 6879//3678 6880//3679
+f 6856//3680 6879//3681 6863//3682
+f 6867//3683 6881//3683 6882//3683
+f 6866//3684 6881//3684 6867//3684
+f 6866//3685 6869//3685 6881//3685
+f 6860//3686 6883//3687 6859//3687
+f 6860//3688 6884//3688 6885//3688
+f 6862//3689 6884//3689 6860//3689
+f 6868//3690 6886//3690 6887//3690
+f 6883//3691 6886//3691 6868//3691
+f 6873//3692 6888//3692 6872//3692
+f 6889//3693 6890//3693 6873//3693
+f 6874//3694 6891//3694 6892//3694
+f 6876//3695 6893//3696 6891//3697
+f 6880//3698 6894//3698 6878//3698
+f 6865//3699 6895//3699 6896//3699
+f 6881//3700 6897//3701 6895//3702
+f 6887//3703 6897//3701 6881//3700
+f 6886//3704 6898//3704 6887//3704
+f 6883//3705 6898//3705 6886//3706
+f 6884//3707 6899//3708 6885//3709
+f 6870//3710 6900//3710 6884//3710
+f 6870//3711 6888//3711 6900//3711
+f 6890//3712 6901//3712 6888//3712
+f 6891//3713 6902//3714 6903//3714
+f 6894//3715 6902//3715 6893//3715
+f 6879//3716 6904//3717 6905//3718
+f 6896//3719 6906//3719 6879//3719
+f 6897//3720 6907//3720 6895//3720
+f 6897//3721 6908//3721 6907//3721
+f 6898//3722 6908//3722 6887//3722
+f 6909//3723 6910//3723 6911//3723
+f 6909//3724 6899//3724 6910//3724
+f 6901//3725 6912//3725 6888//3725
+f 6913//3726 6901//3726 6890//3726
+f 6891//3727 6903//3727 6914//3727
+f 6915//3728 6916//3728 6896//3728
+f 6910//3729 6917//3729 6898//3729
+f 6912//3730 6918//3731 6900//3732
+f 6892//3733 6914//3733 6919//3733
+f 6903//3734 6920//3734 6921//3734
+f 6922//3735 6920//3735 6902//3735
+f 6904//3736 6922//3736 6894//3736
+f 6904//3737 6916//3737 6923//3737
+f 6915//3738 6924//3738 6916//3738
+f 6907//3739 6924//3739 6915//3739
+f 6907//3740 6925//3740 6924//3740
+f 6917//3741 6926//3741 6908//3741
+f 6910//3742 6926//3742 6917//3742
+f 6899//3743 6927//3743 6910//3743
+f 6918//3744 6928//3744 6899//3744
+f 6912//3730 6929//3745 6918//3731
+f 6912//3746 6930//3746 6931//3746
+f 6901//3747 6930//3747 6912//3747
+f 6932//3748 6933//3748 6901//3748
+f 6633//3749 6635//3749 6934//3749
+f 6640//3750 6636//3750 6935//3750
+f 6641//3751 6638//3751 6936//3751
+f 6937//3752 6665//3752 6938//3752
+f 6937//3753 6653//3753 6665//3753
+f 6657//3754 6654//3754 6939//3754
+f 6940//3755 6709//3755 6697//3755
+f 6941//3756 6727//3756 6709//3756
+f 6726//3757 6942//3757 6943//3757
+f 6770//3758 6760//3758 6943//3758
+f 6804//3759 6944//3759 6821//3759
+f 6821//3760 6945//3760 6820//3760
+f 6945//3761 6846//3636 6820//3635
+f 6946//3762 6871//3762 6846//3762
+f 6871//3763 6947//3763 6873//3763
+f 6947//3764 6889//3764 6873//3764
+f 6927//3765 6948//3765 6949//3765
+f 6923//3766 6950//3766 6922//3766
+f 6914//3767 6921//3767 6951//3767
+f 6852//3768 6875//3768 6952//3768
+f 6953//3769 6954//3770 6799//3771
+f 6762//3772 6955//3772 6956//3772
+f 6745//3773 6763//3534 6729//3774
+f 6633//3775 6637//3775 6634//3775
+f 6636//3776 6640//3776 6639//3776
+f 6641//3777 6643//3777 6638//3777
+f 6957//3778 6663//3778 6645//3778
+f 6957//3779 6646//3779 6663//3779
+f 6646//3780 6648//3780 6663//3780
+f 6665//3781 6653//3781 6669//3781
+f 6653//3782 6652//3782 6669//3782
+f 6657//3783 6656//3783 6654//3783
+f 6655//3784 6659//3784 6658//3784
+f 6659//3785 6958//3785 6660//3785
+f 6636//3786 6661//3786 6637//3786
+f 6638//3388 6662//3787 6639//3389
+f 6650//3788 6666//3788 6647//3788
+f 6665//3789 6668//3789 6666//3789
+f 6665//3790 6669//3790 6667//3790
+f 6652//3791 6684//3791 6667//3791
+f 6652//3792 6654//3792 6684//3792
+f 6654//3793 6670//3793 6684//3793
+f 6637//3411 6672//3794 6671//3412
+f 6643//3795 6674//3795 6662//3795
+f 6643//3796 6642//3796 6674//3796
+f 6663//3797 6676//3797 6664//3797
+f 6663//3798 6648//3798 6675//3798
+f 6666//3799 6668//3799 6677//3799
+f 6656//3800 6687//3800 6670//3800
+f 6656//3801 6658//3802 6687//3803
+f 6658//3802 6678//3804 6687//3803
+f 6660//3805 6959//3805 6678//3805
+f 6661//3806 6662//3806 6680//3806
+f 6673//3807 6664//3807 6682//3807
+f 6675//3808 6666//3808 6683//3808
+f 6667//3809 6694//3809 6677//3809
+f 6667//3810 6686//3810 6694//3810
+f 6667//3811 6684//3811 6686//3811
+f 6684//3812 6670//3812 6685//3812
+f 6670//3813 6688//3813 6685//3813
+f 6959//3814 6697//3814 6678//3814
+f 6679//3815 6672//3815 6689//3815
+f 6672//3816 6699//3816 6689//3816
+f 6672//3817 6661//3817 6699//3817
+f 6661//3818 6701//3818 6699//3818
+f 6661//3819 6680//3819 6701//3819
+f 6674//3820 6703//3820 6680//3820
+f 6674//3821 6681//3821 6703//3821
+f 6673//3822 6691//3822 6681//3822
+f 6675//3823 6693//3823 6692//3823
+f 6683//3824 6677//3824 6695//3824
+f 6687//3825 6708//3825 6688//3825
+f 6687//3826 6696//3826 6708//3826
+f 6689//3827 6700//3827 6698//3827
+f 6699//3447 6702//3446 6700//3828
+f 6680//3450 6704//3449 6701//3829
+f 6681//3830 6713//3830 6703//3830
+f 6681//3831 6691//3831 6713//3831
+f 6691//3832 6676//3832 6692//3832
+f 6694//3453 6686//3457 6706//3454
+f 6696//3442 6709//3463 6708//3833
+f 6702//3834 6701//3834 6711//3834
+f 6704//3835 6712//3835 6711//3835
+f 6703//3836 6714//3836 6712//3836
+f 6713//3837 6715//3837 6714//3837
+f 6692//3838 6721//3838 6716//3838
+f 6692//3839 6717//3839 6721//3839
+f 6693//3472 6695//3840 6718//3472
+f 6695//3841 6705//3841 6718//3841
+f 6706//3842 6707//3842 6723//3842
+f 6710//3843 6700//3844 6728//3844
+f 6700//3844 6719//3845 6728//3844
+f 6700//3846 6702//3846 6719//3846
+f 6705//3847 6735//3847 6718//3847
+f 6706//3848 6724//3849 6722//3850
+f 6707//3851 6738//3851 6723//3851
+f 6707//3852 6725//3852 6738//3852
+f 6728//3853 6745//3854 6729//3855
+f 6728//3853 6719//3856 6745//3854
+f 6712//3857 6714//3857 6731//3857
+f 6715//3488 6732//3858 6731//3488
+f 6721//3859 6734//3859 6720//3859
+f 6721//3860 6717//3860 6733//3860
+f 6718//3494 6736//3861 6733//3495
+f 6705//3862 6737//3862 6735//3862
+f 6719//3863 6739//3863 6745//3863
+f 6732//3864 6720//3864 6740//3864
+f 6737//3865 6722//3865 6742//3865
+f 6722//3850 6724//3849 6741//3866
+f 6738//3867 6725//3507 6743//3506
+f 6726//3868 6943//3868 6743//3868
+f 6745//3773 6744//3532 6763//3534
+f 6739//3869 6747//3869 6744//3869
+f 6739//3870 6730//3512 6746//3511
+f 6734//3871 6750//3871 6740//3871
+f 6733//3872 6751//3872 6749//3872
+f 6735//3873 6753//3873 6751//3873
+f 6735//3874 6737//3874 6752//3874
+f 6741//3875 6738//3875 6754//3875
+f 6743//3876 6943//3876 6760//3876
+f 6746//3877 6731//3877 6755//3877
+f 6748//3516 6740//3515 6756//3878
+f 6752//3879 6742//3879 6759//3879
+f 6742//3880 6741//3880 6758//3880
+f 6743//3881 6761//3881 6754//3881
+f 6744//3537 6764//3536 6762//3882
+f 6747//3883 6774//3884 6764//3885
+f 6747//3883 6765//3886 6774//3884
+f 6756//3887 6750//3887 6777//3887
+f 6750//3888 6749//3888 6777//3888
+f 6749//3889 6778//3889 6777//3889
+f 6749//3890 6751//3890 6778//3890
+f 6751//3891 6766//3891 6778//3891
+f 6757//3892 6753//3892 6767//3892
+f 6752//3893 6960//3893 6767//3893
+f 6752//3894 6759//3894 6960//3894
+f 6759//3895 6769//3895 6960//3895
+f 6759//3896 6758//3896 6769//3896
+f 6761//3556 6760//3897 6771//3557
+f 6774//3898 6773//3898 6764//3898
+f 6755//3899 6756//3899 6776//3899
+f 6777//3900 6783//3901 6775//3902
+f 6777//3900 6779//3903 6783//3901
+f 6768//3904 6761//3904 6780//3904
+f 6770//3905 6789//3905 6771//3905
+f 6772//3906 6764//3906 6781//3906
+f 6765//3907 6755//3907 6776//3907
+f 6775//3908 6784//3575 6776//3574
+f 6767//3563 6786//3565 6766//3909
+f 6767//3910 6960//3910 6785//3910
+f 6960//3911 6787//3911 6785//3911
+f 6960//3912 6769//3912 6787//3912
+f 6768//3913 6788//3913 6787//3913
+f 6771//3568 6790//3570 6780//3914
+f 6773//3915 6800//3915 6781//3915
+f 6773//3916 6792//3916 6800//3916
+f 6776//3917 6810//3917 6792//3917
+f 6776//3918 6793//3918 6810//3918
+f 6783//3919 6794//3919 6784//3919
+f 6779//3920 6766//3920 6803//3920
+f 6766//3921 6813//3921 6803//3921
+f 6766//3922 6796//3922 6813//3922
+f 6766//3923 6786//3923 6796//3923
+f 6786//3924 6785//3924 6795//3924
+f 6785//3925 6787//3925 6795//3925
+f 6787//3926 6788//3926 6797//3926
+f 6780//3927 6798//3927 6797//3927
+f 6789//3928 6804//3928 6790//3928
+f 6781//3582 6801//3584 6799//3929
+f 6784//3930 6802//3930 6793//3930
+f 6795//3931 6787//3931 6815//3931
+f 6790//3932 6805//3933 6798//3934
+f 6804//3935 6821//3935 6805//3935
+f 6799//3936 6801//3936 6953//3936
+f 6801//3937 6807//3937 6953//3937
+f 6801//3938 6800//3938 6807//3938
+f 6800//3939 6792//3939 6808//3939
+f 6792//3940 6810//3940 6809//3940
+f 6810//3941 6793//3941 6811//3941
+f 6803//3594 6814//3594 6794//3942
+f 6796//3943 6843//3943 6813//3943
+f 6796//3944 6816//3944 6843//3944
+f 6796//3945 6795//3945 6816//3945
+f 6787//3946 6817//3604 6815//3606
+f 6797//3947 6818//3947 6817//3947
+f 6798//3934 6805//3933 6819//3948
+f 6809//3949 6822//3949 6808//3949
+f 6802//3950 6828//3950 6811//3950
+f 6802//3951 6812//3952 6828//3953
+f 6794//3954 6830//3954 6812//3954
+f 6794//3955 6814//3955 6830//3955
+f 6814//3956 6823//3616 6830//3615
+f 6813//3957 6843//3957 6823//3957
+f 6815//3958 6824//3958 6816//3958
+f 6953//3769 6826//3959 6952//3960
+f 6953//3961 6807//3961 6826//3961
+f 6806//3962 6837//3962 6825//3962
+f 6806//3963 6808//3963 6837//3963
+f 6808//3964 6827//3964 6837//3964
+f 6811//3965 6829//3965 6822//3965
+f 6812//3952 6831//3966 6828//3953
+f 6817//3967 6818//3967 6834//3967
+f 6819//3968 6836//3968 6834//3968
+f 6825//3969 6838//3969 6826//3969
+f 6825//3970 6837//3970 6838//3970
+f 6828//3610 6839//3971 6829//3611
+f 6823//3972 6841//3972 6832//3972
+f 6823//3973 6843//3973 6840//3973
+f 6843//3974 6842//3974 6840//3974
+f 6824//3975 6844//3975 6833//3975
+f 6835//3976 6834//3976 6845//3976
+f 6952//3977 6826//3977 6852//3977
+f 6827//3978 6829//3978 6848//3978
+f 6831//3979 6832//3979 6849//3979
+f 6833//3980 6844//3980 6860//3980
+f 6844//3981 6835//3981 6850//3981
+f 6845//3982 6836//3983 6861//3984
+f 6846//3985 6871//3985 6836//3985
+f 6852//3986 6851//3986 6875//3986
+f 6826//3987 6838//3987 6853//3987
+f 6838//3988 6855//3988 6853//3988
+f 6838//3989 6827//3989 6855//3989
+f 6847//3990 6863//3990 6848//3990
+f 6847//3991 6856//3991 6863//3991
+f 6849//3992 6841//3992 6866//3992
+f 6841//3993 6857//3993 6866//3993
+f 6840//3651 6842//3994 6858//3652
+f 6842//3995 6859//3995 6858//3995
+f 6845//3996 6862//3996 6850//3996
+f 6836//3983 6871//3997 6861//3984
+f 6848//3647 6864//3998 6854//3648
+f 6839//3661 6865//3660 6856//3999
+f 6849//3659 6867//4000 6865//3660
+f 6866//4001 6857//4001 6869//4001
+f 6857//4002 6858//4002 6868//4002
+f 6858//4003 6859//4003 6868//4003
+f 6861//3665 6872//4004 6870//3666
+f 6851//4005 6876//4005 6874//4005
+f 6855//3672 6877//4006 6876//3673
+f 6854//4007 6878//4007 6877//4007
+f 6864//4008 6880//4008 6878//4008
+f 6864//3677 6863//4009 6879//3678
+f 6856//3680 6865//4010 6879//3681
+f 6865//4011 6867//4011 6882//4011
+f 6868//4012 6859//3687 6883//3687
+f 6860//4013 6885//4013 6883//4013
+f 6862//3667 6870//3666 6884//4014
+f 6881//4015 6869//4015 6887//4015
+f 6869//4016 6868//4016 6887//4016
+f 6870//4017 6872//4017 6888//4017
+f 6873//4018 6890//4018 6888//4018
+f 6874//4019 6876//4019 6891//4019
+f 6876//4020 6877//4021 6893//4022
+f 6877//4021 6894//4023 6893//4022
+f 6877//4024 6878//4024 6894//4024
+f 6880//4025 6905//4025 6894//4025
+f 6880//4026 6879//4026 6905//4026
+f 6865//4027 6896//4027 6879//4027
+f 6865//4028 6882//4028 6895//4028
+f 6882//4029 6881//4029 6895//4029
+f 6883//3705 6911//4030 6898//3705
+f 6883//4031 6909//4031 6911//4031
+f 6883//4032 6885//4033 6909//4034
+f 6885//4033 6899//4035 6909//4034
+f 6884//3707 6900//4036 6899//3708
+f 6890//4037 6889//4037 6913//4037
+f 6891//3697 6893//3696 6902//4038
+f 6905//3718 6904//3717 6894//4039
+f 6879//4040 6906//4040 6904//4040
+f 6896//4041 6895//4041 6915//4041
+f 6895//4042 6907//4042 6915//4042
+f 6897//4043 6887//4043 6908//4043
+f 6911//4044 6910//4044 6898//4044
+f 6900//4045 6918//4045 6899//4045
+f 6888//4046 6912//4046 6900//4046
+f 6913//4047 6932//4047 6901//4047
+f 6892//4048 6891//4048 6914//4048
+f 6894//4049 6922//4049 6902//4049
+f 6906//4050 6916//4050 6904//4050
+f 6906//4051 6896//4051 6916//4051
+f 6908//4052 6898//4052 6917//4052
+f 6914//4053 6903//4053 6921//4053
+f 6903//3714 6902//3714 6920//4054
+f 6904//4055 6923//4055 6922//4055
+f 6907//4056 6908//4056 6925//4056
+f 6908//4057 6926//4057 6925//4057
+f 6910//4058 6927//4058 6926//4058
+f 6899//4059 6948//4059 6927//4059
+f 6899//4060 6928//4060 6948//4060
+f 6918//4061 6929//4061 6928//4061
+f 6912//4062 6931//4062 6929//4062
+f 6901//4063 6933//4063 6930//4063
+f 6932//4064 6961//4064 6933//4064
+f 6935//4065 6636//4065 6633//4065
+f 6936//4066 6638//4066 6640//4066
+f 6962//4067 6645//4067 6644//4067
+f 6962//4068 6963//4068 6645//4068
+f 6963//4069 6957//4069 6645//4069
+f 6649//4070 6938//4070 6650//4070
+f 6938//4071 6665//4071 6650//4071
+f 6651//4072 6939//4072 6654//4072
+f 6659//4073 6964//4073 6958//4073
+f 6940//4074 6941//4074 6709//4074
+f 6726//3484 6727//3483 6942//4075
+f 6942//4076 6770//4076 6943//4076
+f 6789//4077 6965//4077 6804//4077
+f 6804//4078 6965//4078 6944//4078
+f 6821//4079 6944//4079 6945//4079
+f 6945//4080 6946//4080 6846//4080
+f 6946//4081 6966//4081 6871//4081
+f 6871//4082 6966//4082 6947//4082
+f 6932//4083 6967//4083 6961//4083
+f 6926//4084 6927//4084 6949//4084
+f 6924//4085 6925//4085 6968//4085
+f 6916//4086 6924//4086 6968//4086
+f 6916//4087 6968//4087 6969//4087
+f 6916//4088 6969//4089 6970//4090
+f 6923//4091 6916//4088 6970//4090
+f 6923//4092 6970//4092 6950//4092
+f 6922//4093 6950//4093 6971//4093
+f 6920//4094 6922//4094 6971//4094
+f 6919//4095 6914//4095 6951//4095
+f 6875//4096 6874//4096 6892//4096
+f 6954//3770 6953//3769 6952//3960
+f 6762//4097 6772//4097 6955//4097
+f 6763//4098 6762//4098 6956//4098
+f 6972//4099 6973//4099 6974//4099
+f 6972//4099 6974//4099 6975//4099
+f 6926//4100 6933//4100 6968//4100
+f 6973//4100 6974//4100 6968//4100
+f 6933//4100 6973//4100 6968//4100
+f 6968//4100 6974//4100 6919//4100
+f 6925//4100 6926//4100 6968//4100
+f 6969//4100 6968//4100 6920//4100
+f 6920//4100 6968//4100 6919//4100
+f 6967//4100 6933//4100 6961//4101
+f 6926//4100 6948//4100 6933//4100
+f 6948//4100 6930//4100 6933//4100
+f 6969//4100 6920//4100 6950//4100
+f 6950//4100 6920//4100 6971//4100
+f 6921//4100 6920//4100 6919//4100
+f 6948//4100 6926//4100 6949//4100
+f 6969//4100 6950//4100 6970//4100
+f 6931//4100 6930//4100 6929//4100
+f 6929//4100 6930//4100 6948//4100
+f 6951//4100 6921//4100 6919//4100
+f 6929//4100 6948//4100 6928//4100
+f 6933//4100 6967//4100 6973//4100
+f 6975//4102 6791//4102 6974//4102
+f 6934//4102 6635//4102 6975//4102
+f 6635//4102 6791//4102 6975//4102
+f 6955//4102 6772//4102 6763//4102
+f 6635//4102 6698//4102 6791//4102
+f 6729//4102 6772//4102 6791//4102
+f 6799//4102 6954//4102 6791//4102
+f 6952//4102 6919//4102 6791//4102
+f 6634//4103 6671//4102 6635//4102
+f 6671//4102 6698//4102 6635//4102
+f 6957//4104 6963//4105 6937//4105
+f 6698//4102 6729//4102 6791//4102
+f 6875//4102 6919//4102 6952//4102
+f 6698//4102 6710//4106 6729//4102
+f 6763//4102 6772//4102 6729//4102
+f 6671//4102 6690//4106 6698//4102
+f 6679//4102 6690//4106 6671//4102
+f 6956//4102 6955//4102 6763//4102
+f 6954//4102 6952//4102 6791//4102
+f 6875//4102 6892//4102 6919//4102
+f 6791//4102 6919//4102 6974//4102
+f 6975//4105 6972//4105 6653//4105
+f 6633//4105 6975//4105 6653//4105
+f 6653//4105 6972//4105 6964//4105
+f 6644//4105 6935//4107 6653//4105
+f 6644//4105 6653//4105 6937//4105
+f 6651//4105 6653//4105 6964//4105
+f 6644//4105 6641//4105 6935//4107
+f 6633//4105 6934//4105 6975//4105
+f 6962//4105 6644//4105 6963//4105
+f 6963//4105 6644//4105 6937//4105
+f 6938//4105 6957//4104 6937//4105
+f 6655//4108 6657//4104 6964//4105
+f 6646//4105 6957//4104 6938//4105
+f 6646//4105 6938//4105 6649//4105
+f 6939//4105 6651//4105 6657//4104
+f 6657//4104 6651//4105 6964//4105
+f 6640//4105 6641//4105 6936//4105
+f 6659//4104 6655//4108 6964//4105
+f 6935//4107 6633//4105 6653//4105
+f 6641//4105 6640//4105 6935//4107
+f 6967//4109 6932//4109 6973//4109
+f 6964//4109 6972//4109 6958//4109
+f 6958//4109 6972//4109 6942//4109
+f 6972//4109 6973//4109 6942//4109
+f 6973//4109 6932//4109 6942//4109
+f 6944//4109 6789//4109 6942//4109
+f 6944//4109 6942//4109 6932//4109
+f 6789//4109 6770//4109 6942//4109
+f 6959//4109 6660//4109 6941//4109
+f 6660//4109 6942//4109 6941//4109
+f 6944//4109 6932//4109 6913//4109
+f 6942//4109 6727//4109 6941//4109
+f 6789//4109 6944//4109 6965//4109
+f 6945//4109 6944//4109 6913//4109
+f 6946//4109 6945//4109 6966//4109
+f 6966//4109 6945//4109 6913//4109
+f 6697//4110 6959//4109 6941//4109
+f 6966//4109 6913//4109 6889//4109
+f 6697//4110 6941//4109 6940//4109
+f 6966//4109 6889//4109 6947//4109
+f 6660//4109 6958//4109 6942//4109
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/parking.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/parking.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/parking.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/parking.obj	2025-08-26 18:16:07.545772112 +0000
@@ -0,0 +1,5550 @@
+# Parking
+# (C) Linux Studio Plugins Project
+o Cars
+v 12.648240 4.022533 0.250001
+v 12.648240 4.290485 0.250001
+v 12.946774 4.290485 0.250001
+v 12.946774 4.995182 0.250001
+v 12.648240 4.995182 0.250001
+v 12.648240 7.260300 0.250001
+v 12.946774 7.260300 0.250001
+v 12.946774 7.964998 0.250001
+v 12.648240 7.964998 0.250001
+v 12.648240 8.451532 0.250001
+v 14.551760 8.451532 0.250001
+v 14.551760 7.964998 0.250001
+v 14.253226 7.964998 0.250001
+v 14.253226 7.260300 0.250001
+v 14.551760 7.260300 0.250001
+v 14.551760 4.995182 0.250001
+v 14.253226 4.995182 0.250001
+v 14.253226 4.290485 0.250001
+v 14.551760 4.290485 0.250001
+v 14.551760 4.022533 0.250001
+v 8.246774 -23.209517 0.249998
+v 8.246774 -23.006443 0.031144
+v 8.246774 -22.707890 0.031144
+v 8.246774 -22.504818 0.249998
+v 12.648240 7.761927 0.031147
+v 12.648240 7.463371 0.031147
+v 12.648240 4.792110 0.031147
+v 12.648240 4.493555 0.031147
+v 12.648240 3.894726 0.393658
+v 12.648240 3.947720 0.858133
+v 12.648240 3.999435 0.873730
+v 12.648240 8.475908 0.873730
+v 12.648240 8.573107 0.458998
+v 14.551760 3.894726 0.393658
+v 27.462790 2.160160 0.250001
+v 27.714581 2.251804 0.250001
+v 28.365623 0.463081 0.250001
+v 28.113832 0.371437 0.250001
+v 28.011728 0.651966 0.250001
+v 27.349529 0.410946 0.250001
+v 27.451633 0.130417 0.250001
+v 25.323118 -0.644300 0.250001
+v 25.221014 -0.363770 0.250001
+v 24.558815 -0.604792 0.250001
+v 24.660919 -0.885321 0.250001
+v 24.203728 -1.051725 0.250001
+v 23.552685 0.736998 0.250001
+v 24.009878 0.903402 0.250001
+v 24.111982 0.622873 0.250001
+v 24.774181 0.863894 0.250001
+v 24.672075 1.144423 0.250001
+v 26.800592 1.919140 0.250001
+v 26.902697 1.638609 0.250001
+v 27.564896 1.879629 0.250001
+v 12.748240 -12.500565 0.873727
+v 13.142460 -9.110181 1.407337
+v 12.986664 -8.544116 1.141684
+v 12.986664 -8.145103 1.141684
+v 12.748240 -8.024093 0.873730
+v 2.848240 -23.605274 0.393655
+v 4.751760 -23.605274 0.393655
+v 4.751760 -23.552280 0.858130
+v 2.848240 -23.552280 0.858130
+v 25.348240 -22.707890 0.031144
+v 25.646774 -22.707890 0.031144
+v 25.646774 -23.006443 0.031144
+v 25.348240 -23.006443 0.031144
+v 17.351761 -3.539700 0.250001
+v 17.351761 -5.804819 0.250001
+v 17.053226 -5.804819 0.250001
+v 17.053226 -6.509516 0.250001
+v 17.351761 -6.509516 0.250001
+v 17.351761 -6.777466 0.250001
+v 15.448240 -6.777466 0.250001
+v 15.448240 -6.509516 0.250001
+v 15.746774 -6.509516 0.250001
+v 15.746774 -5.804819 0.250001
+v 15.448240 -5.804819 0.250001
+v 15.448240 -3.539700 0.250001
+v 15.746774 -3.539700 0.250001
+v 15.746774 -2.835003 0.250001
+v 15.448240 -2.835003 0.250001
+v 15.448240 -2.348469 0.250001
+v 17.351761 -2.348469 0.250001
+v 17.351761 -2.835003 0.250001
+v 17.053226 -2.835003 0.250001
+v 17.053226 -3.539700 0.250001
+v 7.948240 4.493555 0.031147
+v 7.948240 4.792110 0.031147
+v 8.246774 4.792110 0.031147
+v 8.246774 4.493555 0.031147
+v 14.253226 7.761927 0.031147
+v 14.253226 7.463371 0.031147
+v 9.553226 4.995182 0.250001
+v 9.553226 4.792110 0.031147
+v 9.553226 4.493555 0.031147
+v 9.553226 4.290485 0.250001
+v 10.248240 3.999435 0.873730
+v 10.248240 3.947720 0.858133
+v 12.151760 3.947720 0.858133
+v 12.151760 3.999435 0.873730
+v 11.757540 7.389818 1.407337
+v 10.642460 7.389818 1.407337
+v 14.257540 -9.110181 1.407337
+v 14.413336 -8.544116 1.141684
+v -24.951759 8.475908 0.873730
+v -24.713337 8.354895 1.141684
+v -23.286663 8.354895 1.141684
+v -23.048241 8.475908 0.873730
+v -23.048241 8.573107 0.458998
+v -24.951759 8.573107 0.458998
+v 4.751760 -20.036629 0.031144
+v 4.751760 -20.239700 0.249998
+v 4.453226 -20.239700 0.249998
+v 4.453226 -20.036629 0.031144
+v -32.748241 8.475908 0.873730
+v -32.748241 8.573107 0.458998
+v -34.651760 8.573107 0.458998
+v -34.651760 8.475908 0.873730
+v -34.413338 8.354895 1.141684
+v -32.986664 8.354895 1.141684
+v 25.348240 -23.500565 0.873727
+v 25.348240 -23.552280 0.858130
+v 27.251760 -23.552280 0.858130
+v 27.251760 -23.500565 0.873727
+v 26.857540 -20.110180 1.407334
+v 25.742460 -20.110180 1.407334
+v 4.453226 4.493555 0.031147
+v 4.453226 4.792110 0.031147
+v 4.751760 4.792110 0.031147
+v 4.751760 4.493555 0.031147
+v -2.453226 -3.539700 0.250001
+v -2.453226 -3.336628 0.031147
+v -2.453226 -3.038074 0.031147
+v -2.453226 -2.835003 0.250001
+v -32.748241 -19.738073 0.031144
+v -32.748241 -19.535002 0.249998
+v -32.748241 -19.048468 0.249998
+v -32.748241 -18.926893 0.458995
+v -32.748241 -19.024092 0.873727
+v -32.748241 -23.500565 0.873727
+v -32.748241 -23.552280 0.858130
+v -32.748241 -23.605274 0.393655
+v -32.748241 -23.477467 0.249998
+v -32.748241 -23.209517 0.249998
+v -32.748241 -23.006443 0.031144
+v -32.748241 -22.707890 0.031144
+v -32.748241 -22.504818 0.249998
+v -32.748241 -20.239700 0.249998
+v -32.748241 -20.036629 0.031144
+v 9.553226 7.463371 0.031147
+v 9.851760 7.463371 0.031147
+v 9.851760 7.260300 0.250001
+v 9.553226 7.260300 0.250001
+v -24.951759 4.792110 0.031147
+v -24.951759 4.995182 0.250001
+v -24.653227 4.995182 0.250001
+v -24.653227 4.792110 0.031147
+v 12.946774 4.792110 0.031147
+v 12.946774 4.493555 0.031147
+v 27.748240 -23.209517 0.249998
+v 27.748240 -23.477467 0.249998
+v 27.748240 -23.605274 0.393655
+v 27.748240 -23.552280 0.858130
+v 27.748240 -23.500565 0.873727
+v 27.748240 -19.024092 0.873727
+v 27.748240 -18.926893 0.458995
+v 27.748240 -19.048468 0.249998
+v 27.748240 -19.535002 0.249998
+v 27.748240 -19.738073 0.031144
+v 27.748240 -20.036629 0.031144
+v 27.748240 -20.239700 0.249998
+v 27.748240 -22.504818 0.249998
+v 27.748240 -22.707890 0.031144
+v 27.748240 -23.006443 0.031144
+v -19.448240 -19.024092 0.873727
+v -19.448240 -23.500565 0.873727
+v -19.448240 -23.552280 0.858130
+v -19.448240 -23.605274 0.393655
+v -19.448240 -23.477467 0.249998
+v -19.448240 -23.209517 0.249998
+v -19.448240 -23.006443 0.031144
+v -19.448240 -22.707890 0.031144
+v -19.448240 -22.504818 0.249998
+v -19.448240 -20.239700 0.249998
+v -19.448240 -20.036629 0.031144
+v -19.448240 -19.738073 0.031144
+v -19.448240 -19.535002 0.249998
+v -19.448240 -19.048468 0.249998
+v -19.448240 -18.926893 0.458995
+v -23.346773 7.463371 0.031147
+v -23.346773 7.761927 0.031147
+v -23.048241 7.761927 0.031147
+v -23.048241 7.463371 0.031147
+v -19.746775 -23.209517 0.249998
+v -19.746775 -23.006443 0.031144
+v 21.748983 8.796865 1.407337
+v 21.367605 9.844698 1.407337
+v 20.782393 9.797495 1.141685
+v 21.270342 8.456858 1.141684
+v -21.313335 7.955885 1.141684
+v -21.157539 7.389818 1.407337
+v -20.042459 7.389818 1.407337
+v -19.886663 7.955885 1.141684
+v 14.253226 4.792110 0.031147
+v 14.253226 4.493555 0.031147
+v 10.248240 7.964998 0.250001
+v 10.248240 7.761927 0.031147
+v 10.248240 7.463371 0.031147
+v 10.248240 7.260300 0.250001
+v 10.248240 4.995182 0.250001
+v 10.248240 4.792110 0.031147
+v 10.248240 4.493555 0.031147
+v 10.248240 4.290485 0.250001
+v 10.248240 4.022533 0.250001
+v 10.248240 3.894726 0.393658
+v 10.248240 8.475908 0.873730
+v 10.248240 8.573107 0.458998
+v 10.248240 8.451532 0.250001
+v 12.886663 7.955885 1.141684
+v 14.313336 7.955885 1.141684
+v 14.313336 8.354895 1.141684
+v 12.886663 8.354895 1.141684
+v 13.042460 7.389818 1.407337
+v 14.157540 7.389818 1.407337
+v 12.748240 -11.707890 0.031145
+v 12.748240 -11.504818 0.250001
+v 13.046774 -11.504818 0.250001
+v 13.046774 -11.707890 0.031145
+v 3.146774 -20.036629 0.031144
+v 3.146774 -20.239700 0.249998
+v 2.848240 -20.239700 0.249998
+v 2.848240 -20.036629 0.031144
+v 4.651760 -2.835003 0.250001
+v 4.651760 -2.348469 0.250001
+v 4.651760 -2.226894 0.458998
+v 4.651760 -2.324093 0.873730
+v 4.651760 -6.800564 0.873730
+v 4.651760 -6.852282 0.858133
+v 4.651760 -6.905273 0.393658
+v 4.651760 -6.777466 0.250001
+v 4.651760 -6.509516 0.250001
+v 4.651760 -6.306444 0.031147
+v 4.651760 -6.007889 0.031147
+v 4.651760 -5.804819 0.250001
+v 4.651760 -3.539700 0.250001
+v 4.651760 -3.336628 0.031147
+v 4.651760 -3.038074 0.031147
+v 11.853226 7.964998 0.250001
+v 11.853226 7.761927 0.031147
+v 11.853226 7.463371 0.031147
+v 11.853226 7.260300 0.250001
+v -21.253225 7.463371 0.031147
+v -21.253225 7.761927 0.031147
+v -21.253225 7.964998 0.250001
+v -21.253225 7.260300 0.250001
+v -28.046774 -23.209517 0.249998
+v -27.748240 -23.209517 0.249998
+v -27.748240 -23.477467 0.249998
+v -29.651760 -23.477467 0.249998
+v -29.651760 -23.209517 0.249998
+v -29.353226 -23.209517 0.249998
+v -29.353226 -22.504818 0.249998
+v -29.651760 -22.504818 0.249998
+v -29.651760 -20.239700 0.249998
+v -29.353226 -20.239700 0.249998
+v -29.353226 -19.535002 0.249998
+v -29.651760 -19.535002 0.249998
+v -29.651760 -19.048468 0.249998
+v -27.748240 -19.048468 0.249998
+v -27.748240 -19.535002 0.249998
+v -28.046774 -19.535002 0.249998
+v -28.046774 -20.239700 0.249998
+v -27.748240 -20.239700 0.249998
+v -27.748240 -22.504818 0.249998
+v -28.046774 -22.504818 0.249998
+v 36.727528 -1.929033 1.141684
+v 37.206169 -1.589027 1.407337
+v 36.824787 -0.541195 1.407337
+v 36.239574 -0.588400 1.141684
+v -28.046774 -22.707890 0.031144
+v -27.748240 -22.707890 0.031144
+v -21.351761 -18.926893 0.458995
+v -21.351761 -19.048468 0.249998
+v 32.468010 11.807646 0.250004
+v 32.570114 11.527117 0.250004
+v 32.379288 11.457659 0.031150
+v 32.277184 11.738192 0.031150
+v 12.151760 4.022533 0.250001
+v 12.151760 3.894726 0.393658
+v -33.046776 -19.738073 0.031144
+v -33.046776 -19.535002 0.249998
+v -21.351761 -6.800564 0.873730
+v -21.351761 -6.852282 0.858133
+v -19.448240 -6.852282 0.858133
+v -19.448240 -6.800564 0.873730
+v -19.842461 -3.410181 1.407337
+v -20.957541 -3.410181 1.407337
+v -34.651760 -12.209516 0.249999
+v -34.651760 -12.006444 0.031145
+v -34.353226 -12.006444 0.031145
+v -34.353226 -12.209516 0.249999
+v -19.448240 -6.306444 0.031147
+v -19.448240 -6.509516 0.250001
+v -19.746775 -6.509516 0.250001
+v -19.746775 -6.306444 0.031147
+v -27.251760 -22.707890 0.031144
+v -26.953226 -22.707890 0.031144
+v -26.953226 -23.006443 0.031144
+v -27.251760 -23.006443 0.031144
+v -19.448240 -3.539700 0.250001
+v -19.746775 -3.539700 0.250001
+v -19.746775 -3.336628 0.031147
+v -19.448240 -3.336628 0.031147
+v -2.751760 -6.852282 0.858133
+v -0.848240 -6.852282 0.858133
+v -0.848240 -6.800564 0.873730
+v -1.242460 -3.410181 1.407337
+v -2.357540 -3.410181 1.407337
+v -2.751760 -6.800564 0.873730
+v 29.353226 -22.707890 0.031144
+v 29.353226 -22.504818 0.249998
+v 29.651760 -22.504818 0.249998
+v 29.651760 -22.707890 0.031144
+v 29.651760 -23.605274 0.393655
+v 29.651760 -23.477467 0.249998
+v 19.751760 -6.777466 0.250001
+v 17.848240 -6.777466 0.250001
+v 17.848240 -6.509516 0.250001
+v 18.146774 -6.509516 0.250001
+v 18.146774 -5.804819 0.250001
+v 17.848240 -5.804819 0.250001
+v 17.848240 -3.539700 0.250001
+v 18.146774 -3.539700 0.250001
+v 18.146774 -2.835003 0.250001
+v 17.848240 -2.835003 0.250001
+v 17.848240 -2.348469 0.250001
+v 19.751760 -2.348469 0.250001
+v 19.751760 -2.835003 0.250001
+v 19.453226 -2.835003 0.250001
+v 19.453226 -3.539700 0.250001
+v 19.751760 -3.539700 0.250001
+v 19.751760 -5.804819 0.250001
+v 19.453226 -5.804819 0.250001
+v 19.453226 -6.509516 0.250001
+v 19.751760 -6.509516 0.250001
+v 32.383869 10.005064 1.141685
+v 31.895920 11.345697 1.141685
+v 31.520971 11.209227 1.141685
+v 32.008923 9.868593 1.141685
+v -15.951760 -19.535002 0.249998
+v -15.951760 -19.738073 0.031144
+v -15.951760 -20.036629 0.031144
+v -15.951760 -20.239700 0.249998
+v -15.951760 -22.504818 0.249998
+v -15.951760 -22.707890 0.031144
+v -15.951760 -23.006443 0.031144
+v -15.951760 -23.209517 0.249998
+v -15.951760 -23.477467 0.249998
+v -15.951760 -23.605274 0.393655
+v -15.951760 -23.552280 0.858130
+v -15.951760 -23.500565 0.873727
+v -15.951760 -19.024092 0.873727
+v -15.951760 -18.926893 0.458995
+v -15.951760 -19.048468 0.249998
+v -19.746775 -19.535002 0.249998
+v -19.746775 -20.239700 0.249998
+v -19.746775 -22.504818 0.249998
+v -21.351761 -23.477467 0.249998
+v -21.351761 -23.209517 0.249998
+v -21.053226 -23.209517 0.249998
+v -21.053226 -22.504818 0.249998
+v -21.351761 -22.504818 0.249998
+v -21.351761 -20.239700 0.249998
+v -21.053226 -20.239700 0.249998
+v -21.053226 -19.535002 0.249998
+v -21.351761 -19.535002 0.249998
+v 22.948240 -18.926893 0.458995
+v 24.851761 -18.926893 0.458995
+v 24.851761 -19.048468 0.249998
+v 22.948240 -19.048468 0.249998
+v 0.548240 -12.605274 0.393655
+v 2.451760 -12.605274 0.393655
+v 2.451760 -12.552280 0.858130
+v 0.548240 -12.552280 0.858130
+v -15.653226 -22.707890 0.031144
+v -15.653226 -23.006443 0.031144
+v -34.651760 -19.048468 0.249998
+v -34.651760 -18.926893 0.458995
+v 10.486664 7.955885 1.141684
+v 11.913336 7.955885 1.141684
+v 11.913336 8.354895 1.141684
+v 10.486664 8.354895 1.141684
+v -33.046776 -20.239700 0.249998
+v -33.046776 -22.504818 0.249998
+v -33.046776 -23.209517 0.249998
+v -34.651760 -23.477467 0.249998
+v -34.651760 -23.209517 0.249998
+v -34.353226 -23.209517 0.249998
+v -34.353226 -22.504818 0.249998
+v -34.651760 -22.504818 0.249998
+v -34.651760 -20.239700 0.249998
+v -34.353226 -20.239700 0.249998
+v -34.353226 -19.535002 0.249998
+v -34.651760 -19.535002 0.249998
+v -21.113337 -19.544117 1.141681
+v -19.686665 -19.544117 1.141681
+v -19.686665 -19.145103 1.141681
+v -21.113337 -19.145103 1.141681
+v 34.596523 12.582361 0.250004
+v 31.996634 11.636080 0.031150
+v 31.805809 11.566626 0.250004
+v 31.348618 11.400221 0.250004
+v 31.234375 11.358641 0.459000
+v 31.325710 11.391882 0.873731
+v 35.532219 12.922926 0.873733
+v 35.580818 12.940615 0.858136
+v 35.630615 12.958738 0.393661
+v 35.510513 12.915026 0.250004
+v 35.258724 12.823381 0.250004
+v 35.067898 12.753927 0.031150
+v 34.787350 12.651815 0.031150
+v 40.164665 -9.338746 0.250001
+v 39.973843 -9.408201 0.031147
+v 39.871735 -9.127670 0.031147
+v 40.062561 -9.058216 0.250001
+v 29.257540 -20.110180 1.407334
+v 29.413336 -19.544117 1.141681
+v 27.986664 -19.544117 1.141681
+v 28.142460 -20.110180 1.407334
+v -33.046776 -20.036629 0.031144
+v -28.046774 -19.738073 0.031144
+v -27.748240 -19.738073 0.031144
+v -27.748240 -20.036629 0.031144
+v -28.046774 -20.036629 0.031144
+v -34.353226 -20.036629 0.031144
+v -34.353226 -19.738073 0.031144
+v 18.242460 -3.410181 1.407337
+v 19.357540 -3.410181 1.407337
+v 19.513336 -2.844116 1.141684
+v 18.086664 -2.844116 1.141684
+v 10.546774 7.463371 0.031147
+v 10.546774 7.260300 0.250001
+v -13.551760 -19.535002 0.249998
+v -13.253226 -19.535002 0.249998
+v -13.253226 -19.738073 0.031144
+v -13.551760 -19.738073 0.031144
+v -29.413336 -19.145103 1.141681
+v -27.986664 -19.145103 1.141681
+v -27.748240 -19.024092 0.873727
+v -27.748240 -18.926893 0.458995
+v -29.651760 -18.926893 0.458995
+v -29.651760 -19.024092 0.873727
+v 19.751760 -6.905273 0.393658
+v 17.848240 -6.905273 0.393658
+v -14.346774 -22.707890 0.031144
+v -14.346774 -22.504818 0.249998
+v -14.048240 -22.504818 0.249998
+v -14.048240 -22.707890 0.031144
+v 2.848240 4.290485 0.250001
+v 2.848240 4.493555 0.031147
+v 3.146774 4.493555 0.031147
+v 3.146774 4.290485 0.250001
+v 24.605413 9.417002 0.031147
+v 24.503307 9.697531 0.031147
+v 24.694132 9.766985 0.250001
+v 24.796238 9.486456 0.250001
+v 5.446774 -6.007889 0.031147
+v 5.446774 -5.804819 0.250001
+v 5.446774 -6.509516 0.250001
+v 5.446774 -6.306444 0.031147
+v 2.451760 -12.209516 0.249999
+v 2.153226 -12.209516 0.249999
+v 2.153226 -12.006444 0.031145
+v 2.451760 -12.006444 0.031145
+v -13.253226 -20.036629 0.031144
+v -13.551760 -20.036629 0.031144
+v -33.046776 -12.209516 0.249999
+v -33.046776 -12.006444 0.031145
+v -32.748241 -12.006444 0.031145
+v -32.748241 -12.209516 0.249999
+v 41.347767 -3.055155 0.873730
+v 41.396362 -3.037468 0.858133
+v 40.745319 -1.248743 0.858133
+v 40.696724 -1.266432 0.873730
+v 37.645638 -2.796457 1.407337
+v 38.027016 -3.844290 1.407337
+v 24.418692 11.374723 0.873731
+v 20.212183 9.843679 0.873730
+v 20.407444 9.661024 1.141685
+v -19.946774 7.964998 0.250001
+v -19.946774 7.761927 0.031147
+v -19.946774 7.463371 0.031147
+v -19.946774 7.260300 0.250001
+v -34.651760 -22.707890 0.031144
+v -34.353226 -22.707890 0.031144
+v 20.985210 9.807344 0.031147
+v 20.883106 10.087877 0.031147
+v 21.163656 10.189989 0.031147
+v 21.265760 9.909456 0.031147
+v 35.966309 8.818907 0.250001
+v 36.068413 8.538374 0.250001
+v 33.939899 7.763659 0.250001
+v 33.837795 8.044189 0.250001
+v 33.175594 7.803169 0.250001
+v 33.277699 7.522638 0.250001
+v 32.820507 7.356234 0.250001
+v 32.169464 9.144957 0.250001
+v 32.626659 9.311361 0.250001
+v 32.728764 9.030832 0.250001
+v 33.390961 9.271852 0.250001
+v 33.288857 9.552382 0.250001
+v 35.417374 10.327101 0.250001
+v 35.519478 10.046568 0.250001
+v 36.181675 10.287588 0.250001
+v 36.079571 10.568121 0.250001
+v 36.331364 10.659765 0.250002
+v 36.982403 8.871042 0.250001
+v 36.730614 8.779398 0.250001
+v 36.628510 9.059927 0.250001
+v 12.151760 8.475908 0.873730
+v -34.651760 -23.500565 0.873727
+v -34.651760 -23.552280 0.858130
+v -33.142460 -20.110180 1.407334
+v -34.257542 -20.110180 1.407334
+v 8.186664 -19.544117 1.141681
+v 9.613337 -19.544117 1.141681
+v 9.613337 -19.145103 1.141681
+v 8.186664 -19.145103 1.141681
+v -34.353226 -23.006443 0.031144
+v 10.546774 4.995182 0.250001
+v 10.546774 4.792110 0.031147
+v 11.953226 -19.738073 0.031144
+v 12.251760 -19.738073 0.031144
+v 12.251760 -20.036629 0.031144
+v 11.953226 -20.036629 0.031144
+v 21.712593 8.681795 0.031147
+v 21.903418 8.751249 0.250001
+v 22.005524 8.470716 0.250001
+v 21.814699 8.401262 0.031147
+v 24.324863 9.314890 0.031147
+v 24.134039 9.245436 0.250001
+v 24.031935 9.525965 0.250001
+v 24.222759 9.595419 0.031147
+v 4.751760 7.463371 0.031147
+v 4.751760 7.761927 0.031147
+v 4.751760 7.964998 0.250001
+v 4.751760 8.451532 0.250001
+v 4.751760 8.573107 0.458998
+v 4.751760 8.475908 0.873730
+v 4.751760 3.999435 0.873730
+v 4.751760 3.947720 0.858133
+v 4.751760 3.894726 0.393658
+v 4.751760 4.022533 0.250001
+v 4.751760 4.290485 0.250001
+v 4.751760 4.995182 0.250001
+v 4.751760 7.260300 0.250001
+v -25.646774 -20.036629 0.031144
+v -25.646774 -20.239700 0.249998
+v -25.646774 -19.535002 0.249998
+v -25.646774 -19.738073 0.031144
+v 42.626431 -6.417053 0.858133
+v 43.277473 -8.205777 0.858133
+v 43.327271 -8.187653 0.393658
+v 42.676228 -6.398928 0.393658
+v -26.953226 -20.036629 0.031144
+v -26.953226 -19.738073 0.031144
+v -26.953226 -19.535002 0.249998
+v -26.953226 -20.239700 0.249998
+v 12.151760 7.260300 0.250001
+v 12.151760 4.995182 0.250001
+v 11.853226 4.995182 0.250001
+v 11.853226 4.290485 0.250001
+v 12.151760 4.290485 0.250001
+v 10.546774 4.290485 0.250001
+v 10.546774 7.964998 0.250001
+v 12.151760 8.451532 0.250001
+v 12.151760 7.964998 0.250001
+v 11.853226 4.493555 0.031147
+v 11.853226 4.792110 0.031147
+v 12.151760 4.792110 0.031147
+v 12.151760 4.493555 0.031147
+v -19.746775 -22.707890 0.031144
+v -21.551760 4.493555 0.031147
+v -21.551760 4.792110 0.031147
+v -21.253225 4.792110 0.031147
+v -21.253225 4.493555 0.031147
+v -34.651760 -19.024092 0.873727
+v -34.413338 -19.544117 1.141681
+v -34.413338 -19.145103 1.141681
+v 40.423225 -1.365976 0.250001
+v 40.525330 -1.646507 0.250001
+v 40.334507 -1.715961 0.031147
+v 40.232403 -1.435431 0.031147
+v -19.746775 -6.007889 0.031147
+v -19.746775 -5.804819 0.250001
+v -19.448240 -5.804819 0.250001
+v -19.448240 -6.007889 0.031147
+v -34.651760 3.999435 0.873730
+v -34.651760 3.947720 0.858133
+v -32.748241 3.947720 0.858133
+v -32.748241 3.999435 0.873730
+v -33.142460 7.389818 1.407337
+v -34.257542 7.389818 1.407337
+v 15.448240 -6.007889 0.031147
+v 15.746774 -6.007889 0.031147
+v -19.648239 4.493555 0.031147
+v -19.648239 4.290485 0.250001
+v -19.946774 4.290485 0.250001
+v -19.946774 4.493555 0.031147
+v 10.546774 4.493555 0.031147
+v 11.953226 -22.504818 0.249998
+v 11.953226 -22.707890 0.031144
+v 11.953226 -23.006443 0.031144
+v 11.953226 -23.209517 0.249998
+v 5.148240 -6.777466 0.250001
+v 7.051760 -6.777466 0.250001
+v 7.051760 -6.905273 0.393658
+v 5.148240 -6.905273 0.393658
+v 39.693291 -9.510312 0.031147
+v 39.502468 -9.579767 0.250001
+v 39.400364 -9.299237 0.250001
+v 39.591187 -9.229782 0.031147
+v -32.748241 3.894726 0.393658
+v -34.651760 3.894726 0.393658
+v -34.651760 4.022533 0.250001
+v -32.748241 4.022533 0.250001
+v 10.348240 -19.024092 0.873727
+v 10.348240 -18.926893 0.458995
+v 10.348240 -19.048468 0.249998
+v 10.348240 -19.535002 0.249998
+v 10.348240 -19.738073 0.031144
+v 10.348240 -20.036629 0.031144
+v 10.348240 -20.239700 0.249998
+v 10.348240 -22.504818 0.249998
+v 10.348240 -22.707890 0.031144
+v 10.348240 -23.006443 0.031144
+v 10.348240 -23.209517 0.249998
+v 10.348240 -23.477467 0.249998
+v 10.348240 -23.605274 0.393655
+v 10.348240 -23.552280 0.858130
+v 10.348240 -23.500565 0.873727
+v -26.857540 -20.110180 1.407334
+v -27.251760 -23.500565 0.873727
+v -27.251760 -23.552280 0.858130
+v -25.348240 -23.552280 0.858130
+v -25.348240 -23.500565 0.873727
+v -25.742460 -20.110180 1.407334
+v -26.953226 -22.504818 0.249998
+v -26.953226 -23.209517 0.249998
+v -25.646774 -22.504818 0.249998
+v -25.646774 -22.707890 0.031144
+v -25.646774 -23.006443 0.031144
+v -25.646774 -23.209517 0.249998
+v 17.848240 -2.324093 0.873730
+v 17.848240 -6.800564 0.873730
+v 18.086664 -2.445105 1.141684
+v -15.713336 -19.145103 1.141681
+v -14.286664 -19.145103 1.141681
+v -14.048240 -19.024092 0.873727
+v -14.048240 -18.926893 0.458995
+v -23.346773 7.964998 0.250001
+v -23.048241 7.964998 0.250001
+v 4.353226 -3.038074 0.031147
+v 4.353226 -2.835003 0.250001
+v -23.048241 7.260300 0.250001
+v -23.048241 8.451532 0.250001
+v -23.048241 3.999435 0.873730
+v -23.048241 3.947720 0.858133
+v -23.048241 3.894726 0.393658
+v -23.048241 4.022533 0.250001
+v -23.048241 4.290485 0.250001
+v -23.048241 4.493555 0.031147
+v -23.048241 4.792110 0.031147
+v -23.048241 4.995182 0.250001
+v 18.146774 -6.007889 0.031147
+v 18.146774 -6.306444 0.031147
+v -25.348240 -23.605274 0.393655
+v -27.251760 -23.605274 0.393655
+v -27.251760 -23.477467 0.249998
+v -25.348240 -23.477467 0.249998
+v -29.353226 -20.036629 0.031144
+v -29.353226 -19.738073 0.031144
+v 25.132294 -0.713755 0.031147
+v 25.030190 -0.433224 0.031147
+v -27.251760 -19.738073 0.031144
+v -27.251760 -19.535002 0.249998
+v -19.946774 4.995182 0.250001
+v -19.946774 4.792110 0.031147
+v 9.553226 -19.535002 0.249998
+v 9.851760 -19.535002 0.249998
+v 9.851760 -19.738073 0.031144
+v 9.553226 -19.738073 0.031144
+v 5.148240 -6.007889 0.031147
+v 5.148240 -5.804819 0.250001
+v 3.146774 -23.209517 0.249998
+v 2.848240 -23.209517 0.249998
+v 2.848240 -23.006443 0.031144
+v 3.146774 -23.006443 0.031144
+v -14.048240 -23.605274 0.393655
+v -14.048240 -23.552280 0.858130
+v 9.613337 8.354895 1.141684
+v 9.613337 7.955885 1.141684
+v 9.457540 7.389818 1.407337
+v 9.851760 3.999435 0.873730
+v 9.851760 8.475908 0.873730
+v 12.748240 -8.738072 0.031147
+v 13.046774 -8.738072 0.031147
+v 13.046774 -9.036628 0.031147
+v 12.748240 -9.036628 0.031147
+v -29.651760 -23.500565 0.873727
+v -29.651760 -23.552280 0.858130
+v -27.748240 -23.552280 0.858130
+v -27.748240 -23.500565 0.873727
+v -28.142460 -20.110180 1.407334
+v -29.257540 -20.110180 1.407334
+v -29.353226 -23.006443 0.031144
+v -29.353226 -22.707890 0.031144
+v 10.546774 7.761927 0.031147
+v -14.048240 -20.239700 0.249998
+v -14.048240 -20.036629 0.031144
+v -14.048240 -19.738073 0.031144
+v -14.048240 -19.535002 0.249998
+v -14.048240 -19.048468 0.249998
+v -14.048240 -23.500565 0.873727
+v -14.048240 -23.477467 0.249998
+v -14.048240 -23.209517 0.249998
+v -14.048240 -23.006443 0.031144
+v -27.986664 -19.544117 1.141681
+v -29.413336 -19.544117 1.141681
+v 5.386664 -2.844116 1.141684
+v 6.813336 -2.844116 1.141684
+v 6.813336 -2.445105 1.141684
+v 5.386664 -2.445105 1.141684
+v 39.875874 0.988831 0.873730
+v 35.669369 -0.542213 0.873730
+v 35.864628 -0.724871 1.141684
+v -13.551760 -18.926893 0.458995
+v -11.648240 -18.926893 0.458995
+v -11.648240 -19.048468 0.249998
+v -13.551760 -19.048468 0.249998
+v 37.632511 -2.381714 0.250001
+v 37.734615 -2.662243 0.250001
+v 37.543793 -2.731697 0.031147
+v 37.441689 -2.451168 0.031147
+v 36.259239 8.607832 0.031147
+v 36.157135 8.888361 0.031147
+v -19.746775 -2.835003 0.250001
+v -19.448240 -2.835003 0.250001
+v -19.448240 -3.038074 0.031147
+v -19.746775 -3.038074 0.031147
+v 14.551760 7.761927 0.031147
+v 14.551760 7.463371 0.031147
+v 14.413336 -8.145103 1.141684
+v 14.651760 -12.500565 0.873727
+v 14.651760 -8.024093 0.873730
+v -13.551760 -19.024092 0.873727
+v -13.551760 -23.500565 0.873727
+v -13.157540 -20.110180 1.407334
+v -13.313336 -19.544117 1.141681
+v -13.313336 -19.145103 1.141681
+v -11.946774 -23.209517 0.249998
+v -11.946774 -23.006443 0.031144
+v -11.648240 -23.006443 0.031144
+v -11.648240 -23.209517 0.249998
+v -19.842461 -20.110180 1.407334
+v -20.957541 -20.110180 1.407334
+v -11.946774 -19.535002 0.249998
+v -11.946774 -19.738073 0.031144
+v -11.946774 -20.036629 0.031144
+v -11.946774 -20.239700 0.249998
+v -24.951759 3.894726 0.393658
+v -24.951759 3.947720 0.858133
+v -13.253226 -20.239700 0.249998
+v 32.098740 11.355551 0.031148
+v 31.907915 11.286093 0.250004
+v 39.045273 -9.746172 0.250001
+v 38.394230 -7.957448 0.250001
+v 38.851425 -7.791044 0.250001
+v 38.953529 -8.071573 0.250001
+v 39.615726 -7.830553 0.250001
+v 39.513622 -7.550022 0.250001
+v 41.642139 -6.775307 0.250001
+v 41.744244 -7.055836 0.250001
+v 42.406441 -6.814816 0.250001
+v 42.304337 -6.534286 0.250001
+v 42.556129 -6.442642 0.250001
+v 43.207172 -8.231365 0.250001
+v 42.955379 -8.323009 0.250001
+v 42.853275 -8.042480 0.250001
+v 42.191074 -8.283500 0.250001
+v 42.293182 -8.564030 0.250001
+v 35.807659 11.315187 0.250004
+v 35.909763 11.034658 0.250002
+v 35.718941 10.965204 0.031148
+v 35.616837 11.245733 0.031148
+v 15.448240 -6.306444 0.031147
+v 15.746774 -6.306444 0.031147
+v -11.648240 -23.477467 0.249998
+v -11.648240 -23.605274 0.393655
+v -13.551760 -23.605274 0.393655
+v -13.551760 -23.477467 0.249998
+v 12.251760 -23.605274 0.393655
+v 12.251760 -23.552280 0.858130
+v -34.651760 -9.036628 0.031147
+v -34.651760 -9.239700 0.250001
+v -34.651760 -11.504818 0.250001
+v -34.651760 -11.707890 0.031145
+v -34.651760 -12.477466 0.249999
+v -34.651760 -12.605274 0.393655
+v -34.651760 -12.552280 0.858130
+v -34.651760 -12.500565 0.873727
+v -34.651760 -8.024093 0.873730
+v -34.651760 -7.926894 0.458998
+v -34.651760 -8.048468 0.250001
+v -34.651760 -8.535003 0.250001
+v -34.651760 -8.738072 0.031147
+v -13.551760 -23.209517 0.249998
+v -13.253226 -23.209517 0.249998
+v -13.253226 -22.504818 0.249998
+v -13.551760 -22.504818 0.249998
+v -13.551760 -20.239700 0.249998
+v -11.648240 -19.535002 0.249998
+v -11.648240 -20.239700 0.249998
+v -11.648240 -22.504818 0.249998
+v -11.946774 -22.504818 0.249998
+v -34.353226 -8.535003 0.250001
+v -34.353226 -8.738072 0.031147
+v -33.046776 -22.707890 0.031144
+v -21.351761 -19.024092 0.873727
+v -21.351761 -23.500565 0.873727
+v -11.946774 -22.707890 0.031144
+v -11.648240 -22.707890 0.031144
+v 9.553226 -23.006443 0.031144
+v 9.553226 -22.707890 0.031144
+v 9.851760 -22.707890 0.031144
+v 9.851760 -23.006443 0.031144
+v 38.181450 -3.889906 0.250001
+v 37.990627 -3.959362 0.031147
+v 37.710075 -4.061474 0.031147
+v 37.519253 -4.130928 0.250001
+v 10.646774 -19.535002 0.249998
+v 10.646774 -19.738073 0.031144
+v -13.551760 -23.552280 0.858130
+v -11.648240 -23.552280 0.858130
+v -11.648240 -23.500565 0.873727
+v -12.042460 -20.110180 1.407334
+v 37.621357 -4.411457 0.250001
+v 37.812180 -4.342003 0.031147
+v -34.353226 -11.707890 0.031145
+v -13.253226 -22.707890 0.031144
+v -13.253226 -23.006443 0.031144
+v 2.848240 -19.048468 0.249998
+v 2.848240 -18.926893 0.458995
+v 4.751760 -18.926893 0.458995
+v 4.751760 -19.048468 0.249998
+v 2.451760 -8.738072 0.031147
+v 2.451760 -8.535003 0.250001
+v 2.451760 -8.048468 0.250001
+v 2.451760 -7.926894 0.458998
+v 2.451760 -8.024093 0.873730
+v 2.451760 -12.500565 0.873727
+v 2.451760 -12.477466 0.249999
+v 2.451760 -11.707890 0.031145
+v 2.451760 -11.504818 0.250001
+v 2.451760 -9.239700 0.250001
+v 2.451760 -9.036628 0.031147
+v 12.251760 -19.024092 0.873727
+v 12.013336 -19.145103 1.141681
+v 12.013336 -19.544117 1.141681
+v 11.857540 -20.110180 1.407334
+v 12.251760 -23.500565 0.873727
+v 27.251760 -22.707890 0.031144
+v 27.251760 -22.504818 0.249998
+v 27.251760 -20.239700 0.249998
+v 27.251760 -20.036629 0.031144
+v 27.251760 -19.738073 0.031144
+v 27.251760 -19.535002 0.249998
+v 27.251760 -19.048468 0.249998
+v 27.251760 -18.926893 0.458995
+v 27.251760 -19.024092 0.873727
+v 27.251760 -23.605274 0.393655
+v 27.251760 -23.477467 0.249998
+v 27.251760 -23.209517 0.249998
+v 27.251760 -23.006443 0.031144
+v 39.022369 -9.754509 0.873730
+v 43.228878 -8.223465 0.873730
+v 39.908127 -9.012599 1.407337
+v 39.429485 -9.352605 1.141684
+v 39.054535 -9.489075 1.141684
+v 27.820904 0.582512 0.031147
+v 27.540354 0.480400 0.031147
+v 7.948240 4.022533 0.250001
+v 9.851760 4.022533 0.250001
+v 9.851760 3.894726 0.393658
+v 7.948240 3.894726 0.393658
+v 15.448240 -3.038074 0.031147
+v 15.746774 -3.038074 0.031147
+v 15.746774 -3.336628 0.031147
+v 15.448240 -3.336628 0.031147
+v -21.351761 -6.007889 0.031147
+v -21.053226 -6.007889 0.031147
+v -21.053226 -6.306444 0.031147
+v -21.351761 -6.306444 0.031147
+v -15.653226 -23.209517 0.249998
+v -15.653226 -22.504818 0.249998
+v -15.653226 -20.239700 0.249998
+v -15.653226 -19.535002 0.249998
+v -14.346774 -19.535002 0.249998
+v -14.346774 -20.239700 0.249998
+v -14.346774 -23.209517 0.249998
+v 32.797604 7.347897 0.873730
+v 32.829769 7.613331 1.141684
+v 32.341820 8.953962 1.141684
+v 32.146561 9.136621 0.873730
+v 32.055222 9.103376 0.458998
+v 32.706264 7.314653 0.458998
+v -14.346774 -20.036629 0.031144
+v -14.346774 -19.738073 0.031144
+v 17.848240 -6.852282 0.858133
+v 17.848240 -2.226894 0.458998
+v 17.848240 -3.038074 0.031147
+v 17.848240 -3.336628 0.031147
+v 17.848240 -6.007889 0.031147
+v 17.848240 -6.306444 0.031147
+v -15.653226 -20.036629 0.031144
+v -15.653226 -19.738073 0.031144
+v -21.351761 -5.804819 0.250001
+v -21.053226 -5.804819 0.250001
+v 14.353226 -11.707890 0.031145
+v 14.353226 -11.504818 0.250001
+v 14.651760 -11.504818 0.250001
+v 14.651760 -11.707890 0.031145
+v 17.053226 -6.007889 0.031147
+v 17.351761 -6.007889 0.031147
+v 17.351761 -6.306444 0.031147
+v 17.053226 -6.306444 0.031147
+v 24.247299 10.994650 0.250002
+v 24.056475 10.925196 0.031148
+v 23.954370 11.205725 0.031148
+v 24.145195 11.275179 0.250004
+v 25.348240 -22.504818 0.249998
+v 25.646774 -22.504818 0.249998
+v 4.453226 4.290485 0.250001
+v 6.753226 -2.835003 0.250001
+v 7.051760 -2.835003 0.250001
+v 7.051760 -3.038074 0.031147
+v 6.753226 -3.038074 0.031147
+v -29.651760 -19.738073 0.031144
+v -2.751760 -5.804819 0.250001
+v -2.453226 -5.804819 0.250001
+v -2.453226 -6.007889 0.031147
+v -2.751760 -6.007889 0.031147
+v 21.534149 8.299150 0.031147
+v 21.343325 8.229696 0.250001
+v 21.241220 8.510229 0.250001
+v 21.432045 8.579683 0.031147
+v -21.351761 -23.006443 0.031144
+v -21.351761 -22.707890 0.031144
+v -21.053226 -22.707890 0.031144
+v -21.053226 -23.006443 0.031144
+v -2.453226 -6.509516 0.250001
+v -2.751760 -6.509516 0.250001
+v -2.751760 -6.306444 0.031147
+v -2.453226 -6.306444 0.031147
+v -15.557540 -20.110180 1.407334
+v -14.442460 -20.110180 1.407334
+v -15.713336 -19.544117 1.141681
+v -14.286664 -19.544117 1.141681
+v 27.271965 2.090706 0.031147
+v 27.374071 1.810175 0.031147
+v 7.948240 -19.535002 0.249998
+v 8.246774 -19.535002 0.249998
+v 8.246774 -19.738073 0.031144
+v 7.948240 -19.738073 0.031144
+v -14.346774 -23.006443 0.031144
+v 2.153226 -9.036628 0.031147
+v 2.153226 -8.738072 0.031147
+v 5.148240 -2.324093 0.873730
+v 7.051760 -2.324093 0.873730
+v 7.051760 -2.226894 0.458998
+v 5.148240 -2.226894 0.458998
+v 4.453226 -19.535002 0.249998
+v 4.453226 -19.738073 0.031144
+v -32.748241 -8.048468 0.250001
+v -32.748241 -8.535003 0.250001
+v -33.046776 -8.535003 0.250001
+v -33.046776 -9.239700 0.250001
+v -32.748241 -9.239700 0.250001
+v -32.748241 -11.504818 0.250001
+v -33.046776 -11.504818 0.250001
+v -32.748241 -12.477466 0.249999
+v -34.353226 -11.504818 0.250001
+v -34.353226 -9.239700 0.250001
+v 3.146774 -19.738073 0.031144
+v 3.146774 -19.535002 0.249998
+v 19.751760 -3.038074 0.031147
+v 19.453226 -3.038074 0.031147
+v 18.146774 -3.038074 0.031147
+v 18.146774 -3.336628 0.031147
+v -25.348240 -19.535002 0.249998
+v -25.348240 -19.738073 0.031144
+v 2.848240 7.761927 0.031147
+v 2.848240 7.964998 0.250001
+v 3.146774 7.964998 0.250001
+v 3.146774 7.761927 0.031147
+v 2.848240 -23.477467 0.249998
+v 4.751760 -23.477467 0.249998
+v 27.642458 0.199871 0.031147
+v 9.851760 4.493555 0.031147
+v 9.851760 4.290485 0.250001
+v 22.948240 -23.605274 0.393655
+v 22.948240 -23.477467 0.249998
+v 24.851761 -23.477467 0.249998
+v 24.851761 -23.605274 0.393655
+v -34.651760 8.451532 0.250001
+v -32.748241 8.451532 0.250001
+v 3.146774 -22.504818 0.249998
+v 2.848240 -22.504818 0.249998
+v 2.848240 -19.535002 0.249998
+v 4.751760 -19.535002 0.249998
+v 4.751760 -22.504818 0.249998
+v 4.453226 -22.504818 0.249998
+v 4.453226 -23.209517 0.249998
+v 4.751760 -23.209517 0.249998
+v 40.972164 -2.874170 0.250001
+v 41.074268 -3.154699 0.250001
+v 40.883446 -3.224155 0.031147
+v 40.781338 -2.943624 0.031147
+v 3.242460 -20.110180 1.407334
+v 4.357540 -20.110180 1.407334
+v 4.513336 -19.544117 1.141681
+v 3.086664 -19.544117 1.141681
+v -13.551760 -22.707890 0.031144
+v -13.551760 -23.006443 0.031144
+v 12.251760 -18.926893 0.458995
+v 12.251760 -19.048468 0.249998
+v -21.551760 3.894726 0.393658
+v -19.648239 3.894726 0.393658
+v -19.648239 3.947720 0.858133
+v -21.551760 3.947720 0.858133
+v 36.183262 11.134203 0.873731
+v 36.231857 11.151892 0.858134
+v 32.481133 11.392900 1.407339
+v 32.862511 10.345068 1.407339
+v 33.646969 7.974735 0.031147
+v 33.749073 7.694204 0.031147
+v 2.848240 3.894726 0.393658
+v 2.848240 3.947720 0.858133
+v 2.848240 3.999435 0.873730
+v 2.848240 8.475908 0.873730
+v 2.848240 8.573107 0.458998
+v 2.848240 8.451532 0.250001
+v 2.848240 7.463371 0.031147
+v 2.848240 7.260300 0.250001
+v 2.848240 4.995182 0.250001
+v 2.848240 4.792110 0.031147
+v 2.848240 4.022533 0.250001
+v 5.148240 -6.852282 0.858133
+v 5.148240 -6.800564 0.873730
+v 5.148240 -2.348469 0.250001
+v 5.148240 -2.835003 0.250001
+v 5.148240 -3.038074 0.031147
+v 5.148240 -3.336628 0.031147
+v 5.148240 -3.539700 0.250001
+v 5.148240 -6.306444 0.031147
+v 5.148240 -6.509516 0.250001
+v 11.953226 -19.535002 0.249998
+v 11.953226 -20.239700 0.249998
+v 10.646774 -20.036629 0.031144
+v 10.646774 -20.239700 0.249998
+v 7.948240 -23.552280 0.858130
+v 9.851760 -23.552280 0.858130
+v 9.851760 -23.500565 0.873727
+v 9.457540 -20.110180 1.407334
+v 8.342460 -20.110180 1.407334
+v 7.948240 -23.500565 0.873727
+v 37.102505 8.914755 0.393658
+v 36.451462 10.703478 0.393659
+v 36.401665 10.685354 0.858133
+v 37.052708 8.896627 0.858133
+v -24.653227 4.493555 0.031147
+v -24.951759 4.493555 0.031147
+v 39.974270 1.024643 0.393658
+v 39.854168 0.980930 0.250001
+v 39.602379 0.889286 0.250001
+v 39.411552 0.819832 0.031147
+v 39.131004 0.717720 0.031147
+v 38.940178 0.648266 0.250001
+v 36.811665 -0.126451 0.250001
+v 36.620838 -0.195906 0.031147
+v 36.340290 -0.298018 0.031147
+v 36.149464 -0.367472 0.250001
+v 35.692272 -0.533876 0.250001
+v 35.578030 -0.575457 0.458998
+v 39.924473 1.006519 0.858133
+v -33.046776 4.493555 0.031147
+v -33.046776 4.792110 0.031147
+v -32.748241 4.792110 0.031147
+v -32.748241 4.493555 0.031147
+v 12.251760 -23.209517 0.249998
+v 12.251760 -23.477467 0.249998
+v 10.646774 -23.209517 0.249998
+v 10.646774 -22.504818 0.249998
+v 12.251760 -19.535002 0.249998
+v 12.251760 -20.239700 0.249998
+v 12.251760 -22.504818 0.249998
+v 12.748240 -12.552280 0.858130
+v 14.651760 -12.552280 0.858130
+v 12.151760 7.761927 0.031147
+v 12.151760 7.463371 0.031147
+v 4.751760 -19.738073 0.031144
+v 13.046774 -12.006444 0.031145
+v 12.748240 -12.006444 0.031145
+v 42.764557 -8.392464 0.031147
+v 42.484005 -8.494576 0.031147
+v 42.381901 -8.214046 0.031147
+v 42.662449 -8.111934 0.031147
+v -29.651760 -22.707890 0.031144
+v -29.651760 -23.006443 0.031144
+v -29.651760 -23.605274 0.393655
+v -29.651760 -20.036629 0.031144
+v 23.725039 0.546005 1.141684
+v 23.529779 0.728661 0.873730
+v 23.438442 0.695417 0.458998
+v 24.089485 -1.093306 0.458998
+v 24.180820 -1.060062 0.873730
+v 24.212990 -0.794628 1.141684
+v 28.387329 0.470982 0.873730
+v 28.435926 0.488668 0.858133
+v 27.784885 2.277393 0.858133
+v 27.736286 2.259705 0.873730
+v 24.685200 0.729679 1.407337
+v 25.066580 -0.318153 1.407337
+v 10.742460 -20.110180 1.407334
+v 12.151760 8.573107 0.458998
+v 24.851744 -0.815866 0.031147
+v 24.749640 -0.535336 0.031147
+v 12.946774 7.761927 0.031147
+v 12.946774 7.463371 0.031147
+v 10.586664 -19.544117 1.141681
+v 40.575516 -0.782206 0.858133
+v 40.625313 -0.764080 0.393658
+v 38.092731 -4.239891 0.031147
+v 38.283554 -4.170437 0.250001
+v -34.353226 -9.036628 0.031147
+v 4.353226 -6.509516 0.250001
+v 4.353226 -6.306444 0.031147
+v 39.144352 -8.002119 0.031147
+v 39.042248 -7.721588 0.031147
+v 39.322800 -7.619476 0.031147
+v 39.424904 -7.900007 0.031147
+v -33.046776 -9.036628 0.031147
+v -32.748241 -9.036628 0.031147
+v -1.086664 -2.844116 1.141684
+v -2.513336 -2.844116 1.141684
+v 27.923008 0.301983 0.031147
+v 9.553226 -22.504818 0.249998
+v 9.851760 -22.504818 0.249998
+v 9.553226 -20.036629 0.031144
+v 9.553226 -20.239700 0.249998
+v 25.348240 -18.926893 0.458995
+v 25.348240 -19.048468 0.249998
+v -0.848240 -3.336628 0.031147
+v -0.848240 -3.539700 0.250001
+v -1.146774 -3.539700 0.250001
+v -1.146774 -3.336628 0.031147
+v 8.246774 -20.036629 0.031144
+v 8.246774 -20.239700 0.249998
+v -32.748241 -12.605274 0.393655
+v 33.204720 7.749802 1.141684
+v 32.716766 9.090433 1.141684
+v -1.146774 -2.835003 0.250001
+v -1.146774 -3.038074 0.031147
+v 28.046774 -19.535002 0.249998
+v 28.046774 -19.738073 0.031144
+v -34.651760 7.964998 0.250001
+v -34.353226 7.964998 0.250001
+v -34.353226 7.761927 0.031147
+v -34.651760 7.761927 0.031147
+v -19.746775 -19.738073 0.031144
+v 32.456852 9.777903 0.250001
+v 32.354748 10.058432 0.250001
+v 32.545570 10.127886 0.031147
+v 32.647675 9.847357 0.031147
+v 17.351761 -3.336628 0.031147
+v 17.053226 -3.336628 0.031147
+v 9.851760 -23.477467 0.249998
+v 9.851760 -23.605274 0.393655
+v 7.948240 -23.605274 0.393655
+v 7.948240 -23.477467 0.249998
+v -1.146774 -6.306444 0.031147
+v -1.146774 -6.007889 0.031147
+v -0.848240 -6.007889 0.031147
+v -0.848240 -6.306444 0.031147
+v 8.246774 7.463371 0.031147
+v 8.246774 7.761927 0.031147
+v 8.246774 7.964998 0.250001
+v 8.246774 7.260300 0.250001
+v 23.775925 10.823084 0.031148
+v 23.673820 11.103613 0.031148
+v -11.648240 -19.024092 0.873727
+v -11.886663 -19.145103 1.141681
+v -11.886663 -19.544117 1.141681
+v 12.251760 -23.006443 0.031144
+v 29.353226 -23.209517 0.249998
+v 29.353226 -23.006443 0.031144
+v 29.651760 -23.006443 0.031144
+v 29.651760 -23.209517 0.249998
+v 31.999659 9.611498 0.250001
+v 31.885416 9.569914 0.458998
+v 9.553226 -23.209517 0.249998
+v 38.566586 -8.148441 1.141684
+v 38.371326 -7.965785 0.873730
+v 38.279991 -7.999028 0.458998
+v 38.931030 -9.787752 0.458998
+v 15.448240 -6.800564 0.873730
+v 15.842460 -3.410181 1.407337
+v 15.686664 -2.844116 1.141684
+v 15.686664 -2.445105 1.141684
+v 15.448240 -2.324093 0.873730
+v 2.748240 -6.007889 0.031147
+v 3.046774 -6.007889 0.031147
+v 3.046774 -6.306444 0.031147
+v 2.748240 -6.306444 0.031147
+v 29.651760 -18.926893 0.458995
+v 29.651760 -19.048468 0.249998
+v -21.351761 -23.605274 0.393655
+v -21.351761 -23.552280 0.858130
+v 15.448240 -6.905273 0.393658
+v 17.351761 -6.905273 0.393658
+v 17.351761 -6.852282 0.858133
+v 15.448240 -6.852282 0.858133
+v 27.093521 1.708063 0.031147
+v 26.991417 1.988594 0.031147
+v 29.353226 -20.036629 0.031144
+v 29.353226 -20.239700 0.249998
+v 29.353226 -19.535002 0.249998
+v 29.353226 -19.738073 0.031144
+v 28.046774 -20.239700 0.249998
+v 28.046774 -20.036629 0.031144
+v -21.351761 -19.738073 0.031144
+v -21.053226 -19.738073 0.031144
+v 26.953226 -22.504818 0.249998
+v 26.953226 -22.707890 0.031144
+v 26.953226 -23.006443 0.031144
+v 26.953226 -23.209517 0.249998
+v 33.366421 7.872623 0.031147
+v 33.468525 7.592093 0.031147
+v 39.526749 -7.964767 1.407337
+v 38.941536 -8.011971 1.141684
+v -33.046776 4.995182 0.250001
+v -33.046776 4.290485 0.250001
+v 28.046774 -23.209517 0.249998
+v 28.046774 -22.504818 0.249998
+v 29.651760 -19.535002 0.249998
+v 29.651760 -20.239700 0.249998
+v 35.710300 10.116022 0.031147
+v 35.608196 10.396555 0.031147
+v 28.046774 -22.707890 0.031144
+v -27.748240 -23.605274 0.393655
+v 29.651760 -23.552280 0.858130
+v 29.651760 -23.500565 0.873727
+v 28.046774 -23.006443 0.031144
+v 36.442394 -0.578547 0.031147
+v 36.251572 -0.648003 0.250001
+v 26.953226 -19.535002 0.249998
+v 26.953226 -20.239700 0.249998
+v 25.348240 -23.477467 0.249998
+v 25.348240 -23.209517 0.249998
+v 25.646774 -23.209517 0.249998
+v 25.348240 -20.239700 0.249998
+v 25.646774 -20.239700 0.249998
+v 25.646774 -19.535002 0.249998
+v 25.348240 -19.535002 0.249998
+v 25.348240 -23.605274 0.393655
+v 25.348240 -19.024092 0.873727
+v 25.348240 -19.738073 0.031144
+v 25.348240 -20.036629 0.031144
+v -32.986664 -19.544117 1.141681
+v 0.548240 -11.707890 0.031145
+v 0.846774 -11.707890 0.031145
+v 0.846774 -12.006444 0.031145
+v 0.548240 -12.006444 0.031145
+v -19.746775 -20.036629 0.031144
+v 0.548240 -9.239700 0.250001
+v 0.548240 -11.504818 0.250001
+v 0.548240 -12.209516 0.249999
+v 0.548240 -12.477466 0.249999
+v 0.548240 -12.500565 0.873727
+v 0.548240 -8.024093 0.873730
+v 0.548240 -7.926894 0.458998
+v 0.548240 -8.048468 0.250001
+v 0.548240 -8.535003 0.250001
+v 0.548240 -8.738072 0.031147
+v 0.548240 -9.036628 0.031147
+v -23.346773 4.792110 0.031147
+v -23.346773 4.493555 0.031147
+v 26.953226 -20.036629 0.031144
+v 26.953226 -19.738073 0.031144
+v 25.646774 -20.036629 0.031144
+v 25.646774 -19.738073 0.031144
+v 0.846774 -8.738072 0.031147
+v 0.846774 -9.036628 0.031147
+v 2.848240 -19.738073 0.031144
+v 24.553226 -22.707890 0.031144
+v 24.553226 -22.504818 0.249998
+v 24.851761 -22.504818 0.249998
+v 24.851761 -22.707890 0.031144
+v 29.651760 -19.738073 0.031144
+v 15.448240 -2.226894 0.458998
+v 2.748240 -5.804819 0.250001
+v 3.046774 -5.804819 0.250001
+v -24.951759 7.260300 0.250001
+v -24.951759 7.463371 0.031147
+v -24.653227 7.463371 0.031147
+v -24.653227 7.260300 0.250001
+v 27.013336 -19.544117 1.141681
+v 25.586664 -19.544117 1.141681
+v 35.438389 10.863092 0.031148
+v 35.336285 11.143621 0.031148
+v -21.053226 -20.036629 0.031144
+v -21.351761 -20.036629 0.031144
+v 9.851760 3.947720 0.858133
+v 7.948240 3.947720 0.858133
+v 27.986664 -19.145103 1.141681
+v 32.928226 9.949469 0.031147
+v 32.826122 10.229998 0.031147
+v -34.353226 4.290485 0.250001
+v -34.651760 4.290485 0.250001
+v -34.651760 4.493555 0.031147
+v -34.353226 4.493555 0.031147
+v -21.113337 -2.844116 1.141684
+v -19.686665 -2.844116 1.141684
+v -19.686665 -2.445105 1.141684
+v -21.113337 -2.445105 1.141684
+v 35.990852 10.218134 0.031147
+v 35.888744 10.498667 0.031148
+v 19.453226 -6.007889 0.031147
+v 19.453226 -6.306444 0.031147
+v -25.348240 -19.048468 0.249998
+v -25.348240 -18.926893 0.458995
+v -25.348240 -19.024092 0.873727
+v -25.348240 -23.209517 0.249998
+v -25.348240 -23.006443 0.031144
+v -25.348240 -22.707890 0.031144
+v -25.348240 -22.504818 0.249998
+v -25.348240 -20.239700 0.249998
+v -25.348240 -20.036629 0.031144
+v 23.186665 -19.544117 1.141681
+v 24.613337 -19.544117 1.141681
+v 24.613337 -19.145103 1.141681
+v 23.186665 -19.145103 1.141681
+v 4.453226 -22.707890 0.031144
+v 4.751760 -22.707890 0.031144
+v 4.751760 -23.006443 0.031144
+v 4.453226 -23.006443 0.031144
+v 36.437683 8.990473 0.031147
+v -2.751760 -3.336628 0.031147
+v -2.751760 -3.038074 0.031147
+v -33.046776 7.463371 0.031147
+v -33.046776 7.761927 0.031147
+v -32.748241 7.761927 0.031147
+v -32.748241 7.463371 0.031147
+v 35.360828 12.542852 0.250004
+v 35.170002 12.473398 0.031150
+v 24.587938 -0.658159 1.141684
+v 24.099987 0.682474 1.141684
+v -1.146774 -5.804819 0.250001
+v -1.146774 -6.509516 0.250001
+v -0.848240 -6.509516 0.250001
+v -0.848240 -6.777466 0.250001
+v -2.751760 -6.777466 0.250001
+v -2.751760 -3.539700 0.250001
+v -2.751760 -2.835003 0.250001
+v -2.751760 -2.348469 0.250001
+v -0.848240 -2.348469 0.250001
+v -0.848240 -2.835003 0.250001
+v -0.848240 -5.804819 0.250001
+v 37.141258 -4.586199 0.873730
+v 37.548374 -4.184296 1.141684
+v 37.173424 -4.320766 1.141684
+v 4.513336 8.354895 1.141684
+v 4.513336 7.955885 1.141684
+v 4.357540 7.389818 1.407337
+v 40.795116 -1.230619 0.393658
+v 40.675018 -1.274332 0.250001
+v 39.951851 -1.537542 0.031147
+v 39.761028 -1.606997 0.250001
+v 37.161137 -2.553280 0.031147
+v 36.970314 -2.622734 0.250001
+v 36.513123 -2.789139 0.250001
+v 36.398880 -2.830719 0.458998
+v 36.490215 -2.797476 0.873730
+v 36.320408 -2.330936 0.873730
+v 36.352577 -2.065504 1.141684
+v 36.229073 -2.364182 0.458998
+v -23.346773 4.995182 0.250001
+v -23.346773 4.290485 0.250001
+v 3.086664 7.955885 1.141684
+v 3.086664 8.354895 1.141684
+v -33.046776 -23.006443 0.031144
+v 5.446774 -3.539700 0.250001
+v 5.446774 -3.336628 0.031147
+v 5.446774 -3.038074 0.031147
+v 5.446774 -2.835003 0.250001
+v 31.976753 9.603159 0.873730
+v -33.046776 -8.738072 0.031147
+v -32.748241 -8.738072 0.031147
+v -32.986664 7.955885 1.141684
+v 14.551760 4.493555 0.031147
+v -34.651760 -20.036629 0.031144
+v 14.551760 8.475908 0.873730
+v 14.551760 8.573107 0.458998
+v 2.748240 -6.509516 0.250001
+v 3.046774 -6.509516 0.250001
+v 3.146774 7.463371 0.031147
+v 3.146774 7.260300 0.250001
+v -25.586664 -19.145103 1.141681
+v -25.586664 -19.544117 1.141681
+v -24.713337 7.955885 1.141684
+v -23.286663 7.955885 1.141684
+v 0.846774 -9.239700 0.250001
+v 12.748240 -8.535003 0.250001
+v 13.046774 -8.535003 0.250001
+v 17.351761 -2.324093 0.873730
+v 17.351761 -2.226894 0.458998
+v 17.113337 -2.445105 1.141684
+v 5.542460 -3.410181 1.407337
+v 6.657540 -3.410181 1.407337
+v -19.648239 7.260300 0.250001
+v -19.648239 7.463371 0.031147
+v 7.948240 -22.707890 0.031144
+v 7.948240 -22.504818 0.249998
+v 19.513336 -2.445105 1.141684
+v -32.986664 -19.145103 1.141681
+v 3.146774 4.792110 0.031147
+v 3.146774 4.995182 0.250001
+v -21.551760 3.999435 0.873730
+v -21.313335 8.354895 1.141684
+v -21.551760 8.475908 0.873730
+v 2.748240 -6.800564 0.873730
+v 2.748240 -2.324093 0.873730
+v 2.748240 -2.226894 0.458998
+v 2.748240 -2.348469 0.250001
+v 2.748240 -2.835003 0.250001
+v 2.748240 -3.038074 0.031147
+v 2.748240 -3.336628 0.031147
+v 2.748240 -3.539700 0.250001
+v 2.748240 -6.777466 0.250001
+v 2.748240 -6.905273 0.393658
+v 2.748240 -6.852282 0.858133
+v -23.346773 7.260300 0.250001
+v 19.751760 -6.007889 0.031147
+v 0.786664 -8.145103 1.141684
+v 2.213336 -8.145103 1.141684
+v 17.113337 -2.844116 1.141684
+v 3.146774 -22.707890 0.031144
+v 2.848240 -22.707890 0.031144
+v 40.151318 -0.618908 0.250001
+v 40.253422 -0.899437 0.250001
+v 40.062595 -0.968893 0.031147
+v 39.960491 -0.688362 0.031147
+v 7.948240 -19.024092 0.873727
+v -0.848240 -2.324093 0.873730
+v -1.086664 -2.445105 1.141684
+v 3.046774 -3.539700 0.250001
+v 3.046774 -2.835003 0.250001
+v 4.353226 -3.539700 0.250001
+v 4.353226 -5.804819 0.250001
+v -24.951759 8.451532 0.250001
+v 3.046774 -3.038074 0.031147
+v -28.046774 -23.006443 0.031144
+v 3.142460 -3.410181 1.407337
+v 4.257540 -3.410181 1.407337
+v 4.413336 -2.844116 1.141684
+v 2.986664 -2.844116 1.141684
+v -24.951759 7.761927 0.031147
+v -24.951759 7.964998 0.250001
+v -24.653227 7.964998 0.250001
+v -24.653227 7.761927 0.031147
+v -21.351761 -3.336628 0.031147
+v -21.351761 -3.038074 0.031147
+v -21.053226 -3.038074 0.031147
+v -21.053226 -3.336628 0.031147
+v 20.120848 9.810434 0.458998
+v 20.771889 8.021711 0.458998
+v 20.863226 8.054956 0.873730
+v 20.895393 8.320391 1.141684
+v 14.551760 4.792110 0.031147
+v 9.553226 7.761927 0.031147
+v 9.553226 7.964998 0.250001
+v 9.851760 7.964998 0.250001
+v 9.851760 7.761927 0.031147
+v -21.551760 4.995182 0.250001
+v -21.253225 4.995182 0.250001
+v 22.948240 -22.707890 0.031144
+v 22.948240 -22.504818 0.249998
+v 23.246775 -22.504818 0.249998
+v 23.246775 -22.707890 0.031144
+v -21.053226 -6.509516 0.250001
+v -21.351761 -6.509516 0.250001
+v -32.748241 4.290485 0.250001
+v 9.851760 -23.209517 0.249998
+v 7.051760 -6.306444 0.031147
+v 7.051760 -6.509516 0.250001
+v 6.753226 -6.509516 0.250001
+v 6.753226 -6.306444 0.031147
+v 6.753226 -6.007889 0.031147
+v 6.753226 -5.804819 0.250001
+v 7.051760 -5.804819 0.250001
+v 7.051760 -6.007889 0.031147
+v -32.748241 4.995182 0.250001
+v 32.919586 9.100286 0.031147
+v 33.200138 9.202398 0.031147
+v -19.648239 4.792110 0.031147
+v -27.251760 -20.036629 0.031144
+v -27.251760 -20.239700 0.249998
+v 6.753226 -3.336628 0.031147
+v 6.753226 -3.539700 0.250001
+v -21.551760 8.573107 0.458998
+v -21.551760 8.451532 0.250001
+v -21.551760 7.964998 0.250001
+v -21.551760 7.761927 0.031147
+v -21.551760 7.463371 0.031147
+v -21.551760 7.260300 0.250001
+v -21.551760 4.290485 0.250001
+v -21.551760 4.022533 0.250001
+v -2.513336 -2.445105 1.141684
+v -34.651760 -23.605274 0.393655
+v 7.948240 7.463371 0.031147
+v 7.948240 7.761927 0.031147
+v -32.748241 -12.552280 0.858130
+v 14.551760 3.947720 0.858133
+v 4.353226 -3.336628 0.031147
+v -21.351761 -6.905273 0.393658
+v -19.448240 -6.905273 0.393658
+v 17.351761 -6.800564 0.873730
+v 16.957541 -3.410181 1.407337
+v -27.013336 -19.544117 1.141681
+v -27.013336 -19.145103 1.141681
+v 0.846774 -8.535003 0.250001
+v -11.648240 -20.036629 0.031144
+v -11.648240 -19.738073 0.031144
+v 37.004108 8.878942 0.873730
+v 33.683361 8.089808 1.407337
+v 8.186664 7.955885 1.141684
+v 8.186664 8.354895 1.141684
+v 33.016945 10.299452 0.250001
+v 33.119049 10.018923 0.250001
+v 42.577835 -6.434742 0.873730
+v 42.113514 -6.603741 0.031147
+v 41.832962 -6.705853 0.031147
+v -19.886663 8.354895 1.141684
+v -19.648239 8.475908 0.873730
+v -19.648239 8.573107 0.458998
+v -34.651760 -19.738073 0.031144
+v 22.948240 -23.552280 0.858130
+v 24.851761 -23.552280 0.858130
+v 24.851761 -23.500565 0.873727
+v 24.457541 -20.110180 1.407334
+v 23.342461 -20.110180 1.407334
+v 22.948240 -23.500565 0.873727
+v 37.164162 -4.577862 0.250001
+v 37.072418 -2.903265 0.250001
+v 39.863132 -1.887527 0.250001
+v 41.326061 -3.063055 0.250001
+v 40.309967 -3.115191 0.250001
+v 40.412071 -3.395721 0.250001
+v 37.049919 -4.619442 0.458998
+v 36.685474 -2.980131 1.141684
+v 20.794386 9.737890 0.250001
+v 20.692282 10.018423 0.250001
+v 25.069735 9.586000 0.873730
+v 25.118332 9.603689 0.858133
+v 24.467289 11.392412 0.858134
+v -33.046776 -11.707890 0.031145
+v -32.748241 -11.707890 0.031145
+v 22.948240 -19.738073 0.031144
+v 22.948240 -19.535002 0.249998
+v 23.246775 -19.535002 0.249998
+v 23.246775 -19.738073 0.031144
+v -34.651760 -23.006443 0.031144
+v 2.153226 -8.535003 0.250001
+v 4.453226 7.964998 0.250001
+v 4.453226 7.260300 0.250001
+v 4.453226 4.995182 0.250001
+v -21.053226 -3.539700 0.250001
+v -21.351761 -3.539700 0.250001
+v 36.539787 8.709940 0.031147
+v -34.257542 -9.110181 1.407337
+v -34.413338 -8.544116 1.141684
+v -34.413338 -8.145103 1.141684
+v 7.948240 8.475908 0.873730
+v 9.851760 8.573107 0.458998
+v 7.948240 8.573107 0.458998
+v 39.591221 -1.140459 0.250001
+v 39.489117 -0.859928 0.250001
+v 39.679943 -0.790474 0.031147
+v 39.782047 -1.071005 0.031147
+v 40.602894 -3.326265 0.031147
+v 40.500790 -3.045736 0.031147
+v 41.935066 -6.986382 0.031147
+v 42.215618 -6.884270 0.031147
+v 36.722942 -0.476435 0.031147
+v 36.343315 -2.322599 0.250001
+v 37.263245 -2.833809 0.031147
+v 40.505211 -0.807793 0.250001
+v 40.526917 -0.799892 0.873730
+v 36.800507 -2.156195 0.250001
+v 36.991333 -2.086740 0.031147
+v 37.271881 -1.984629 0.031147
+v 37.462708 -1.915174 0.250001
+v 41.446159 -3.019342 0.393658
+v 9.851760 -20.239700 0.249998
+v 9.851760 -20.036629 0.031144
+v 37.360603 -1.634644 0.250001
+v 37.169777 -1.704100 0.031147
+v 36.889229 -1.806211 0.031147
+v 36.698402 -1.875666 0.250001
+v 13.046774 -9.239700 0.250001
+v 36.913769 -0.406981 0.250001
+v 39.042286 0.367735 0.250001
+v 39.704483 0.608755 0.250001
+v 0.846774 -12.209516 0.249999
+v 0.846774 -11.504818 0.250001
+v 2.153226 -9.239700 0.250001
+v 2.153226 -11.504818 0.250001
+v 24.553226 -23.209517 0.249998
+v 24.553226 -23.006443 0.031144
+v 24.851761 -23.006443 0.031144
+v 24.851761 -23.209517 0.249998
+v 4.353226 -6.007889 0.031147
+v 14.353226 -8.738072 0.031147
+v 14.651760 -8.738072 0.031147
+v 14.651760 -9.036628 0.031147
+v 14.353226 -9.036628 0.031147
+v 39.233109 0.437189 0.031147
+v 39.513657 0.539301 0.031147
+v 7.948240 4.995182 0.250001
+v 8.246774 4.995182 0.250001
+v 10.646774 -23.006443 0.031144
+v 22.948240 -19.024092 0.873727
+v 24.851761 -19.024092 0.873727
+v 7.948240 -23.006443 0.031144
+v -34.651760 4.995182 0.250001
+v -34.353226 4.995182 0.250001
+v -34.353226 4.792110 0.031147
+v -34.651760 4.792110 0.031147
+v 40.053959 -1.818073 0.031147
+v -34.651760 7.463371 0.031147
+v -34.353226 7.463371 0.031147
+v 7.948240 7.260300 0.250001
+v -19.648239 8.451532 0.250001
+v 27.834682 2.295517 0.393658
+v 28.485723 0.506794 0.393658
+v 25.168129 9.621813 0.393658
+v 24.517086 11.410536 0.393661
+v 7.051760 -6.852282 0.858133
+v 7.051760 -6.800564 0.873730
+v 35.247566 10.793638 0.250002
+v 36.161556 11.126303 0.250002
+v 36.281654 11.170015 0.393659
+v 24.302807 0.692327 0.031147
+v 24.200703 0.972857 0.031147
+v 19.751760 -2.226894 0.458998
+v -21.351761 -2.324093 0.873730
+v -0.848240 -2.226894 0.458998
+v -2.751760 -2.226894 0.458998
+v -2.751760 -2.324093 0.873730
+v 2.153226 -11.707890 0.031145
+v 14.353226 -9.239700 0.250001
+v 14.651760 -9.239700 0.250001
+v 4.453226 7.463371 0.031147
+v -19.448240 -2.324093 0.873730
+v 35.145462 11.074167 0.250002
+v 34.698627 12.301832 0.250004
+v 34.889454 12.371286 0.031150
+v 9.851760 4.995182 0.250001
+v 9.851760 4.792110 0.031147
+v 24.481251 1.074968 0.031147
+v 24.583357 0.794439 0.031147
+v 14.353226 -12.209516 0.249999
+v 14.353226 -12.006444 0.031145
+v 14.651760 -12.006444 0.031145
+v 14.651760 -12.209516 0.249999
+v -19.648239 3.999435 0.873730
+v -34.413338 7.955885 1.141684
+v -19.448240 -2.348469 0.250001
+v -19.448240 -2.226894 0.458998
+v -19.448240 -6.777466 0.250001
+v -32.748241 7.260300 0.250001
+v -32.748241 7.964998 0.250001
+v 32.817482 9.380816 0.031147
+v 33.301979 9.137640 1.407337
+v 19.751760 -6.306444 0.031147
+v 21.354481 10.259443 0.250001
+v 21.456585 9.978910 0.250001
+v 13.046774 -12.209516 0.249999
+v 12.748240 -12.209516 0.249999
+v -21.053226 -2.835003 0.250001
+v 7.051760 -3.539700 0.250001
+v 7.051760 -3.336628 0.031147
+v 7.051760 -2.348469 0.250001
+v -2.751760 -6.905273 0.393658
+v 17.053226 -3.038074 0.031147
+v 17.351761 -3.038074 0.031147
+v -19.648239 4.022533 0.250001
+v -21.253225 4.290485 0.250001
+v -19.648239 7.964998 0.250001
+v -19.648239 4.995182 0.250001
+v -32.748241 -7.926894 0.458998
+v 12.251760 -22.707890 0.031144
+v -27.748240 -23.006443 0.031144
+v -32.748241 -8.024093 0.873730
+v -32.748241 -12.500565 0.873727
+v 33.098034 9.482927 0.031147
+v -27.251760 -19.024092 0.873727
+v -27.251760 -18.926893 0.458995
+v 14.551760 3.999435 0.873730
+v 12.748240 -12.477466 0.249999
+v 12.748240 -12.605274 0.393655
+v 12.748240 -7.926894 0.458998
+v 12.748240 -8.048468 0.250001
+v 12.748240 -9.239700 0.250001
+v 14.651760 -12.605274 0.393655
+v 29.651760 -19.024092 0.873727
+v 29.413336 -19.145103 1.141681
+v 0.786664 -8.544116 1.141684
+v 2.213336 -8.544116 1.141684
+v -33.142460 -9.110181 1.407337
+v 36.353069 10.667665 0.873730
+v -34.651760 7.260300 0.250001
+v 25.586664 -19.145103 1.141681
+v 4.453226 7.761927 0.031147
+v -33.046776 7.260300 0.250001
+v -33.046776 7.964998 0.250001
+v 19.453226 -3.336628 0.031147
+v -34.353226 7.260300 0.250001
+v 19.751760 -3.336628 0.031147
+v 22.948240 -23.006443 0.031144
+v 23.246775 -23.006443 0.031144
+v 23.246775 -23.209517 0.249998
+v 22.948240 -23.209517 0.249998
+v -27.251760 -19.048468 0.249998
+v -19.648239 7.761927 0.031147
+v 7.948240 -23.209517 0.249998
+v 7.948240 -18.926893 0.458995
+v 7.948240 -19.048468 0.249998
+v 7.948240 -20.036629 0.031144
+v 7.948240 -20.239700 0.249998
+v 24.851761 -20.239700 0.249998
+v 24.553226 -20.239700 0.249998
+v 24.553226 -20.036629 0.031144
+v 24.851761 -20.036629 0.031144
+v -27.251760 -22.504818 0.249998
+v -27.251760 -23.209517 0.249998
+v 29.651760 -20.036629 0.031144
+v -21.351761 -2.226894 0.458998
+v -21.351761 -2.348469 0.250001
+v 3.242460 7.389818 1.407337
+v -21.351761 -2.835003 0.250001
+v -21.351761 -6.777466 0.250001
+v 23.246775 -20.036629 0.031144
+v 22.948240 -20.036629 0.031144
+v -32.986664 -8.544116 1.141684
+v 10.586664 -19.145103 1.141681
+v 37.060425 -2.843662 1.141684
+v 4.751760 -19.024092 0.873727
+v 4.513336 -19.145103 1.141681
+v 4.751760 -23.500565 0.873727
+v -24.951759 4.290485 0.250001
+v -24.653227 4.290485 0.250001
+v 3.046774 -3.336628 0.031147
+v 2.057540 -9.110181 1.407337
+v 0.942460 -9.110181 1.407337
+v 19.751760 -6.852282 0.858133
+v -0.848240 -6.905273 0.393658
+v -32.986664 -8.145103 1.141684
+v 27.013336 -19.145103 1.141681
+v 8.246774 4.290485 0.250001
+v -0.848240 -3.038074 0.031147
+v 14.651760 -12.477466 0.249999
+v 7.948240 7.964998 0.250001
+v 10.646774 -22.707890 0.031144
+v -24.951759 3.999435 0.873730
+v -24.951759 4.022533 0.250001
+v -24.557541 7.389818 1.407337
+v -23.442459 7.389818 1.407337
+v 2.848240 -19.024092 0.873727
+v 3.086664 -19.145103 1.141681
+v 2.848240 -23.500565 0.873727
+v 2.986664 -2.445105 1.141684
+v 14.353226 -8.535003 0.250001
+v 14.651760 -8.535003 0.250001
+v 7.948240 4.290485 0.250001
+v 7.948240 8.451532 0.250001
+v 9.851760 8.451532 0.250001
+v 8.342460 7.389818 1.407337
+v 7.948240 3.999435 0.873730
+v 14.651760 -7.926894 0.458998
+v 14.651760 -8.048468 0.250001
+v 25.048029 9.578100 0.250001
+v 24.396986 11.366823 0.250004
+v 24.553226 -19.738073 0.031144
+v 24.851761 -19.738073 0.031144
+v 19.751760 -6.800564 0.873730
+v 23.585100 10.753630 0.250002
+v 23.482996 11.034159 0.250002
+v 9.851760 -19.024092 0.873727
+v 9.851760 -18.926893 0.458995
+v 20.886131 8.063293 0.250001
+v 20.235088 9.852018 0.250001
+v 22.948240 -20.239700 0.249998
+v 23.246775 -20.239700 0.249998
+v 24.553226 -19.535002 0.249998
+v 24.851761 -19.535002 0.249998
+v 9.851760 -19.048468 0.249998
+v 19.751760 -2.324093 0.873730
+v 4.413336 -2.445105 1.141684
+vn -0.0000 0.0000 -1.0000
+vn 1.0000 0.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 -0.7471 -0.6647
+vn -0.7060 0.0000 0.7082
+vn -0.8626 -0.0000 0.5059
+vn 0.0000 -1.0000 -0.0000
+vn -0.0000 -0.9710 0.2392
+vn 0.0000 0.2043 -0.9789
+vn -0.0001 0.2043 -0.9789
+vn -0.0000 -0.2043 -0.9789
+vn 0.0001 -0.2043 -0.9789
+vn 0.0000 -0.2888 0.9574
+vn 0.0000 -0.2887 0.9574
+vn -0.0001 -0.2887 0.9574
+vn 0.1996 0.0000 0.9799
+vn -0.1996 0.0000 0.9799
+vn 0.0000 0.4248 0.9053
+vn 0.0000 0.9114 0.4116
+vn -0.0000 1.0000 -0.0000
+vn -0.0001 1.0000 -0.0000
+vn -0.0000 -0.5787 -0.8156
+vn -0.0000 -0.8565 -0.5161
+vn -0.0001 -0.5787 -0.8156
+vn 0.0001 -0.8565 -0.5161
+vn 0.0001 0.5787 -0.8156
+vn 0.0000 0.8565 -0.5161
+vn -0.0000 0.5787 -0.8156
+vn -0.3992 -0.1453 0.9053
+vn 0.0000 0.0000 1.0000
+vn -0.0001 0.8565 -0.5161
+vn 0.0000 0.8644 -0.5028
+vn 0.8049 0.2929 -0.5161
+vn 0.8049 0.2930 -0.5161
+vn 0.5438 0.1979 -0.8156
+vn -0.3420 0.9397 0.0000
+vn 0.5438 0.1978 -0.8156
+vn 0.2713 0.0987 0.9574
+vn 0.2713 0.0988 0.9574
+vn 0.2714 0.0987 0.9574
+vn -0.0683 0.1876 0.9799
+vn 0.0683 -0.1876 0.9799
+vn -0.2950 0.8106 0.5059
+vn -0.2415 0.6634 0.7082
+vn -0.1919 -0.0698 -0.9789
+vn -0.1919 -0.0699 -0.9789
+vn 0.1919 0.0698 -0.9789
+vn 0.1919 0.0699 -0.9789
+vn 0.7060 0.0000 0.7082
+vn 0.8626 0.0000 0.5059
+vn -0.5438 -0.1978 -0.8156
+vn -0.8049 -0.2929 -0.5161
+vn -0.8049 -0.2930 -0.5161
+vn -0.5438 -0.1979 -0.8156
+vn 0.9124 0.3321 0.2392
+vn 0.9397 0.3420 -0.0000
+vn -0.5437 -0.1980 -0.8156
+vn 0.2415 -0.6634 0.7082
+vn 0.2950 -0.8106 0.5059
+vn -0.8564 -0.3117 0.4116
+vn -0.9397 -0.3420 0.0000
+vn -0.9397 -0.3419 0.0000
+vn -0.0002 1.0000 -0.0000
+vn 0.9397 0.3421 -0.0000
+vn -0.1919 -0.0700 -0.9789
+vn 0.1919 0.0700 -0.9789
+vn -0.8123 -0.2956 -0.5028
+vn -0.8564 -0.3118 0.4116
+vn 0.0001 1.0000 -0.0000
+vn 0.3420 -0.9397 -0.0000
+vn 0.8049 0.2931 -0.5161
+vn 0.0001 -0.2887 0.9574
+vn 0.0002 1.0000 -0.0000
+vn 0.2715 0.0990 0.9573
+vn 0.7021 0.2555 -0.6647
+vn -0.8049 -0.2928 -0.5161
+vn 0.2710 0.0986 0.9575
+s 1
+f 1//1 2//1 3//1 4//1 5//1 6//1 7//1 8//1 9//1 10//1 11//1 12//1 13//1 14//1 15//1 16//1 17//1 18//1 19//1 20//1
+f 21//2 22//2 23//2 24//2
+f 9//3 25//3 26//3 6//3 5//3 27//3 28//3 2//3 1//3 29//3 30//3 31//3 32//3 33//3 10//3
+f 1//4 20//4 34//4 29//4
+f 35//1 36//1 37//1 38//1 39//1 40//1 41//1 42//1 43//1 44//1 45//1 46//1 47//1 48//1 49//1 50//1 51//1 52//1 53//1 54//1
+f 55//5 56//6 57//6 58//6 59//5
+f 60//7 61//7 62//8 63//8
+f 64//9 65//10 66//11 67//12
+f 68//1 69//1 70//1 71//1 72//1 73//1 74//1 75//1 76//1 77//1 78//1 79//1 80//1 81//1 82//1 83//1 84//1 85//1 86//1 87//1
+f 88//11 89//9 90//9 91//11
+f 13//3 92//3 93//3 14//3
+f 94//3 95//3 96//3 97//3
+f 98//13 99//14 100//15 101//13 102//16 103//17
+f 104//18 105//18 57//18 56//18
+f 106//19 107//19 108//19 109//19 110//20 111//21
+f 112//22 113//23 114//23 115//22
+f 116//19 117//20 118//21 119//19 120//19 121//19
+f 122//13 123//14 124//14 125//13 126//16 127//17
+f 128//11 129//9 130//9 131//11
+f 132//2 133//2 134//2 135//2
+f 136//2 137//2 138//2 139//2 140//2 141//2 142//2 143//2 144//2 145//2 146//2 147//2 148//2 149//2 150//2
+f 151//22 152//24 153//23 154//25
+f 155//26 156//27 157//27 158//28
+f 159//2 4//2 3//2 160//2
+f 161//3 162//3 163//3 164//3 165//3 166//3 167//3 168//3 169//3 170//3 171//3 172//3 173//3 174//3 175//3
+f 176//2 177//2 178//2 179//2 180//2 181//2 182//2 183//2 184//2 185//2 186//2 187//2 188//2 189//2 190//2
+f 191//11 192//9 193//9 194//11
+f 195//23 196//22 182//22 181//23
+f 197//29 198//29 199//29 200//29
+f 201//18 202//18 203//18 204//18
+f 17//3 205//3 206//3 18//3
+f 207//3 208//3 209//3 210//3 211//3 212//3 213//3 214//3 215//3 216//3 99//3 98//3 217//3 218//3 219//3
+f 220//30 221//30 222//30 223//30
+f 224//18 225//18 221//18 220//18
+f 226//28 227//27 228//31 229//28
+f 230//22 231//23 232//23 233//22
+f 234//2 235//2 236//2 237//2 238//2 239//2 240//2 241//2 242//2 243//2 244//2 245//2 246//2 247//2 248//2
+f 249//3 250//3 251//3 252//3
+f 253//2 254//2 255//2 256//2
+f 257//1 258//1 259//1 260//1 261//1 262//1 263//1 264//1 265//1 266//1 267//1 268//1 269//1 270//1 271//1 272//1 273//1 274//1 275//1 276//1
+f 277//29 278//29 279//29 280//29
+f 281//26 276//27 275//27 282//28
+f 283//32 190//32 189//32 284//32
+f 285//33 286//34 287//35 288//35
+f 215//4 289//4 290//4 216//4
+f 291//28 292//27 137//27 136//28
+f 293//14 294//14 295//14 296//14 297//16 298//17
+f 299//23 300//22 301//22 302//23
+f 303//22 304//23 305//23 306//22
+f 307//9 308//10 309//11 310//12
+f 311//23 312//25 313//22 314//22
+f 315//14 316//14 317//14 318//16 319//17 320//14
+f 321//28 322//27 323//27 324//28
+f 325//4 163//4 162//4 326//4
+f 327//1 328//1 329//1 330//1 331//1 332//1 333//1 334//1 335//1 336//1 337//1 338//1 339//1 340//1 341//1 342//1 343//1 344//1 345//1 346//1
+f 347//30 348//30 349//30 350//30
+f 351//3 352//3 353//3 354//3 355//3 356//3 357//3 358//3 359//3 360//3 361//3 362//3 363//3 364//3 365//3
+f 188//1 366//1 367//1 185//1 184//1 368//1 195//1 181//1 180//1 369//1 370//1 371//1 372//1 373//1 374//1 375//1 376//1 377//1 284//1 189//1
+f 378//32 379//32 380//32 381//32
+f 382//7 383//7 384//8 385//8
+f 357//12 356//9 386//10 387//11
+f 388//32 389//32 139//32 138//32
+f 390//30 391//30 392//30 393//30
+f 388//1 138//1 137//1 292//1 394//1 149//1 148//1 395//1 396//1 145//1 144//1 397//1 398//1 399//1 400//1 401//1 402//1 403//1 404//1 405//1
+f 406//30 407//30 408//30 409//30
+f 410//36 285//36 288//36 411//36 412//36 413//36 414//36 415//36 416//36 417//36 418//36 419//36 420//36 421//36 422//36
+f 423//34 424//35 425//37 426//33
+f 427//18 428//18 429//18 430//18
+f 291//3 431//3 394//3 292//3
+f 432//9 433//9 434//11 435//12
+f 436//2 437//2 404//2 403//2
+f 438//18 439//18 440//18 441//18
+f 210//25 209//22 442//22 443//23
+f 444//27 445//27 446//28 447//28
+f 448//19 449//19 450//19 451//20 452//20 453//19
+f 328//4 327//4 454//4 455//4
+f 456//28 457//27 458//27 459//28
+f 460//23 461//22 462//22 463//23
+f 464//35 465//37 466//33 467//34
+f 468//2 469//2 470//2 471//2
+f 472//23 473//25 474//22 475//22
+f 447//9 446//9 476//11 477//12
+f 478//23 479//22 480//22 481//23
+f 482//38 483//39 484//38 485//40 486//41 487//42
+f 199//43 198//43 488//44 489//44 490//43
+f 491//3 492//3 493//3 494//3
+f 495//26 401//27 400//27 496//28
+f 497//45 498//46 499//47 500//48
+f 501//1 502//1 503//1 504//1 505//1 506//1 507//1 508//1 509//1 510//1 511//1 512//1 513//1 514//1 515//1 516//1 517//1 518//1 519//1 520//1
+f 101//49 521//49 392//50 391//50 102//50
+f 522//13 523//14 142//14 141//13 524//16 525//17
+f 526//30 527//30 528//30 529//30
+f 496//2 400//2 399//2 530//2
+f 212//28 211//27 531//27 532//28
+f 533//9 534//9 535//11 536//12
+f 537//35 538//33 539//33 540//35
+f 541//51 542//52 543//53 544//54
+f 545//2 546//2 547//2 548//2 549//2 550//2 551//2 552//2 553//2 554//2 555//2 131//2 130//2 556//2 557//2
+f 558//3 559//3 560//3 561//3
+f 562//55 563//55 564//56 565//56
+f 566//2 567//2 568//2 569//2
+f 570//1 571//1 572//1 573//1 574//1 289//1 215//1 214//1 575//1 531//1 211//1 210//1 443//1 576//1 207//1 219//1 577//1 578//1 249//1 252//1
+f 579//11 580//9 581//9 582//11
+f 196//3 195//3 368//3 583//3
+f 584//11 585//9 586//9 587//11
+f 588//5 522//5 525//6 589//6 590//6
+f 591//33 592//34 593//35 594//35
+f 595//28 596//27 597//27 598//28
+f 599//13 600//14 601//14 602//13 603//16 604//17
+f 605//26 78//27 77//27 606//28
+f 607//22 608//23 609//25 610//22
+f 532//2 531//2 575//2 611//2
+f 612//3 613//3 614//3 615//3
+f 616//4 617//4 618//4 619//4
+f 620//54 621//52 622//53 623//54
+f 624//4 625//4 626//4 627//4
+f 628//3 629//3 630//3 631//3 632//3 633//3 634//3 635//3 636//3 637//3 638//3 639//3 640//3 641//3 642//3
+f 643//17 644//13 645//14 646//14 647//13 648//16
+f 308//2 649//2 650//2 309//2
+f 651//3 652//3 653//3 654//3
+f 655//5 656//5 438//6 441//6 657//6
+f 363//19 658//19 659//19 660//19 661//20 364//20
+f 192//28 662//27 663//27 193//28
+f 664//28 665//27 234//27 248//28
+f 666//2 194//2 193//2 663//2 667//2 110//2 109//2 668//2 669//2 670//2 671//2 672//2 673//2 674//2 675//2
+f 676//2 331//2 330//2 677//2
+f 435//3 273//3 272//3 432//3
+f 678//4 679//4 680//4 681//4
+f 266//2 682//2 683//2 267//2
+f 42//34 684//35 685//35 43//33
+f 686//28 687//27 568//27 567//28
+f 688//3 689//3 610//3 609//3
+f 213//22 611//22 575//23 214//23
+f 690//27 691//27 692//28 693//28
+f 694//28 695//27 469//27 468//28
+f 696//23 697//23 698//22 699//22
+f 360//7 700//7 701//8 361//8
+f 702//50 703//50 704//50 705//49 706//49
+f 595//9 598//9 303//11 306//11
+f 707//9 708//9 709//11 710//11
+f 711//13 712//14 713//14 714//13 715//16 716//17
+f 263//2 262//2 717//2 718//2
+f 442//2 719//2 576//2 443//2
+f 459//2 458//2 720//2 721//2 722//2 723//2 724//2 661//2 660//2 725//2 701//2 700//2 726//2 727//2 728//2
+f 716//18 715//18 729//18 730//18
+f 731//30 732//30 733//30 734//30
+f 280//43 279//43 735//44 736//44 737//43
+f 738//32 739//32 740//32 741//32
+f 742//33 743//34 744//35 745//35
+f 746//57 502//52 501//53 747//54
+f 748//27 749//27 750//28 751//28
+f 93//11 92//9 752//9 753//11
+f 754//50 105//50 104//50 755//49 756//49
+f 757//5 758//5 759//6 760//6 761//6
+f 762//23 763//22 764//22 765//23
+f 766//18 407//18 406//18 767//18
+f 768//3 769//3 770//3 771//3
+f 772//7 670//7 669//8 773//8
+f 476//2 446//2 445//2 774//2
+f 775//54 776//52 412//53 411//54
+f 777//1 778//1 779//1 780//1 781//1 782//1 783//1 784//1 785//1 786//1 787//1 788//1 789//1 790//1 791//1 792//1 423//1 426//1 622//1 621//1
+f 793//33 794//34 795//35 796//35
+f 797//22 798//22 76//23 75//23
+f 799//4 800//4 801//4 802//4
+f 640//7 803//7 804//8 641//8
+f 805//3 806//3 807//3 808//3 300//3 299//3 809//3 810//3 811//3 812//3 813//3 814//3 815//3 816//3 817//3
+f 765//1 799//1 802//1 818//1 819//1 820//1 821//1 822//1 774//1 445//1 444//1 741//1 740//1 823//1 768//1 771//1 824//1 825//1 826//1 762//1
+f 817//28 816//27 827//27 828//28
+f 829//28 395//27 148//27 147//28
+f 830//5 831//5 767//6 406//6 409//6
+f 832//9 833//10 764//11 763//12
+f 834//12 835//9 836//10 837//11
+f 838//36 839//36 840//36 841//36
+f 632//28 631//27 842//27 843//28
+f 759//17 758//13 844//14 845//14 846//13 847//16
+f 848//52 841//53 840//54 849//54
+f 808//9 850//9 301//11 300//11
+f 851//2 820//2 819//2 852//2
+f 826//3 832//3 763//3 762//3
+f 853//32 854//32 855//32 856//32
+f 28//11 27//9 159//9 160//11
+f 857//2 858//2 859//2 860//2 861//2 862//2 384//2 383//2 863//2 472//2 475//2 864//2 865//2 866//2 867//2
+f 868//49 869//50 870//50 871//50 872//49
+f 873//2 874//2 875//2 876//2 877//2 878//2 879//2 880//2 881//2 125//2 124//2 882//2 883//2 884//2 885//2
+f 886//58 887//58 888//59 889//59 890//59
+f 39//36 891//36 892//36 40//36
+f 893//4 894//4 895//4 896//4
+f 897//9 898//9 899//11 900//11
+f 901//9 902//9 903//11 904//11
+f 905//1 906//1 355//1 354//1 907//1 908//1 351//1 365//1 724//1 723//1 909//1 910//1 720//1 458//1 457//1 911//1 727//1 726//1 359//1 358//1
+f 912//60 913//60 914//60 915//60 916//61 917//62
+f 918//3 910//3 909//3 919//3
+f 455//3 920//3 656//3 655//3 921//3 337//3 336//3 922//3 923//3 333//3 332//3 924//3 925//3 329//3 328//3
+f 907//2 926//2 927//2 908//2
+f 901//28 928//27 929//27 902//28
+f 930//28 931//27 932//27 933//28
+f 700//4 360//4 359//4 726//4
+f 934//9 935//9 936//11 937//11
+f 938//34 939//35 940//35 941//33
+f 64//26 942//27 943//27 65//28
+f 944//23 128//22 131//22 555//23
+f 945//27 946//27 947//28 948//28
+f 949//28 268//27 267//27 683//28
+f 950//27 951//27 952//28 953//28
+f 954//51 955//52 956//53 957//54
+f 958//12 959//9 960//10 961//11
+f 962//23 963//25 964//22 965//22
+f 966//17 362//13 361//14 701//14 725//13 967//16
+f 386//2 906//2 905//2 387//2
+f 968//18 966//18 967//18 969//18
+f 970//35 35//33 54//34 971//35
+f 972//27 973//31 974//28 975//28
+f 911//23 976//22 728//22 727//23
+f 977//11 978//9 857//9 867//11
+f 176//49 408//50 407//50 766//50 177//49
+f 979//19 734//19 733//19 980//19 981//20 982//63
+f 115//3 114//3 983//3 984//3
+f 815//1 985//1 986//1 987//1 988//1 989//1 990//1 991//1 478//1 481//1 992//1 809//1 299//1 302//1 993//1 807//1 806//1 994//1 827//1 816//1
+f 230//2 995//2 996//2 231//2
+f 340//27 339//27 997//28 998//28
+f 922//9 999//9 1000//11 923//11
+f 561//28 560//27 1001//27 1002//28
+f 1003//28 1004//27 1005//27 1006//28
+f 61//4 60//4 1007//4 1008//4
+f 41//52 40//53 892//54 1009//54
+f 291//9 136//9 150//11 431//12
+f 97//23 96//22 1010//22 1011//23
+f 476//22 774//23 822//23 477//22
+f 606//2 77//2 76//2 798//2
+f 1012//4 1013//4 1014//4 1015//4
+f 1016//32 118//32 117//32 1017//32
+f 808//28 807//27 993//27 850//28
+f 1007//1 697//1 696//1 1018//1 1019//1 232//1 231//1 996//1 1020//1 853//1 856//1 1021//1 983//1 114//1 113//1 1022//1 1023//1 1024//1 1025//1 1008//1
+f 1026//33 1027//34 1028//35 1029//35
+f 1030//18 1031//18 1032//18 1033//18
+f 1034//9 851//10 852//11 1035//12
+f 629//32 1036//32 1037//32 630//32
+f 1038//7 1039//7 1040//8 1041//8
+f 1042//38 1043//39 417//38 416//39 1044//41 1045//42
+f 1046//35 504//33 503//34 1047//35
+f 919//9 722//9 721//11 918//12
+f 1048//3 1049//3 1050//3 1051//3 1052//3 1053//3 1004//3 1003//3 1054//3 1055//3 1056//3 1057//3 461//3 460//3 1058//3
+f 619//3 1059//3 1060//3 979//3 982//3 1061//3 1062//3 1063//3 1064//3 1065//3 695//3 694//3 1066//3 1067//3 616//3
+f 1068//3 533//3 536//3 1069//3
+f 1070//2 843//2 842//2 1071//2
+f 1072//14 1073//14 1074//13 1075//16 1076//17 1077//13
+f 1078//56 1079//56 1080//55 1081//55
+f 155//9 158//9 1082//11 1083//11
+f 1084//36 1085//36 1086//36 1087//36 1088//36 1089//36 1090//36 1091//36 1092//36 1093//36 1094//36 1095//36 736//36 735//36 1096//36
+f 1097//11 1098//9 1099//9 1100//11
+f 1101//1 1102//1 639//1 638//1 1103//1 1104//1 635//1 634//1 1071//1 842//1 631//1 630//1 1037//1 1105//1 1068//1 1069//1 1106//1 1107//1 612//1 615//1
+f 1108//14 1109//15 755//13 104//16 56//17 55//13
+f 251//11 250//9 1110//9 1111//11
+f 115//11 984//9 1112//10 112//11
+f 226//9 229//9 1113//11 1114//11
+f 1115//48 1116//46 1117//46 1118//48
+f 1119//3 1120//3 261//3 260//3 1121//3 712//3 711//3 453//3 452//3 269//3 268//3 949//3 1122//3 265//3 264//3
+f 1123//60 1124//60 1125//61 1126//61 1127//60 1128//60
+f 1129//38 1130//39 1131//39 1132//39 1133//41 1134//42
+f 1135//17 642//13 641//14 804//14 872//13 871//16
+f 218//32 1136//32 577//32 219//32
+f 684//48 1137//46 1138//46 685//48
+f 26//11 25//9 1139//9 1140//11
+f 1135//18 871//18 870//18 1141//18
+f 1084//64 1096//55 1142//55 1143//56
+f 1144//35 839//35 838//34 1145//34
+f 356//26 355//27 906//27 386//28
+f 1146//2 828//2 827//2 994//2
+f 243//22 242//23 1147//25 1148//22
+f 1149//45 1150//65 1151//48 1152//66
+f 988//23 1153//22 1154//22 989//23
+f 319//18 318//18 1155//18 1156//18
+f 39//33 38//34 1157//35 891//35
+f 835//28 1158//27 1159//27 836//28
+f 92//26 13//27 12//31 752//28
+f 1160//3 1161//3 690//3 693//3
+f 1162//32 880//32 879//32 1163//32
+f 1164//24 1165//23 1166//23 1167//22
+f 1168//2 974//2 973//2 1169//2
+f 832//28 826//27 825//27 833//28
+f 70//3 934//3 937//3 71//3
+f 1170//4 810//4 809//4 992//4
+f 1171//30 1172//30 914//30 913//30
+f 1173//3 1174//3 1167//3 1166//3
+f 170//28 169//27 1175//27 1176//28
+f 1177//27 1178//31 1179//28 1180//28
+f 1181//28 366//27 188//27 187//28
+f 1182//52 1183//53 1184//54 1185//54
+f 1186//22 68//23 87//25 1187//22
+f 1188//4 1189//4 1190//4 1191//4
+f 352//28 351//27 908//27 927//28
+f 1192//11 1193//9 1194//9 1195//11
+f 1196//2 1197//2 1198//2 1199//2
+f 939//48 1200//46 1201//46 940//48
+f 846//49 1202//49 1203//50 1204//50 847//50
+f 615//23 614//22 1205//22 1101//23
+f 1206//23 1207//22 1208//22 1209//23
+f 413//67 1210//67 1211//67 414//67
+f 1158//3 835//3 834//3 1212//3
+f 526//18 1076//18 1075//18 527//18
+f 886//60 890//60 1213//60 1214//68 1215//61 1216//61
+f 1217//5 1218//6 1219//6 1220//6 1221//5
+f 190//20 283//69 830//19 409//19 408//19 176//19
+f 1222//9 1223//9 1224//11 1225//11
+f 167//32 1226//32 1227//32 168//32
+f 1228//7 179//7 178//8 1229//8
+f 1230//7 1231//7 1232//8 1233//8
+f 1234//54 53//52 52//53 1235//54
+f 1236//3 1237//3 1238//3 1239//3
+f 1240//2 1241//2 1176//2 1175//2
+f 1242//28 377//27 376//27 1243//28
+f 751//9 750//9 314//11 313//11
+f 1244//3 1245//3 1246//3 1247//3
+f 506//52 505//53 1248//54 1249//54
+f 1119//28 264//27 263//27 718//28
+f 888//29 1250//29 1251//29 889//29
+f 1252//3 1098//3 1097//3 1253//3
+f 1206//1 1209//1 326//1 162//1 161//1 1254//1 1255//1 173//1 172//1 1240//1 1175//1 169//1 168//1 1227//1 1256//1 1238//1 1237//1 1257//1 323//1 322//1
+f 1258//54 514//52 513//53 1259//54
+f 174//26 173//27 1255//27 1260//28
+f 1121//7 1261//7 713//8 712//8
+f 1121//4 260//4 259//4 1261//4
+f 714//49 450//49 449//50 729//50 715//50
+f 165//13 164//14 1262//14 1263//13 427//16 430//17
+f 1260//2 1255//2 1254//2 1264//2
+f 322//3 321//3 1207//3 1206//3
+f 1265//54 1266//52 1093//53 1092//54
+f 1126//67 1125//67 47//67 46//67
+f 464//48 541//46 544//46 465//48
+f 878//1 1267//1 1268//1 875//1 874//1 1244//1 1247//1 884//1 883//1 1269//1 1270//1 1271//1 943//1 942//1 1272//1 1273//1 1274//1 1275//1 1163//1 879//1
+f 1270//3 1269//3 1276//3 123//3 122//3 1277//3 1162//3 1163//3 1275//3 1278//3 1279//3 1272//3 942//3 64//3 67//3
+f 589//18 525//18 524//18 1280//18
+f 1281//9 1282//9 1283//11 1284//11
+f 186//22 185//23 367//23 1285//22
+f 1286//3 1287//3 1281//3 1284//3 1288//3 1289//3 382//3 385//3 1290//3 1291//3 1292//3 1293//3 1294//3 1295//3 1296//3
+f 432//28 272//27 271//27 433//28
+f 1297//9 674//9 673//11 1298//11
+f 1299//3 1268//3 1267//3 1300//3
+f 1301//2 1302//2 1274//2 1273//2
+f 1295//9 1303//9 1304//11 1296//11
+f 1020//27 996//31 995//28 1305//28
+f 1306//28 1307//27 1308//27 1309//28
+f 1276//4 1269//4 883//4 882//4
+f 1239//28 1238//27 1256//27 1310//28
+f 605//3 797//3 75//3 74//3 1230//3 1233//3 1217//3 1221//3 1311//3 83//3 82//3 897//3 900//3 79//3 78//3
+f 1312//27 1313//27 1223//28 1222//28
+f 1314//23 1315//22 1316//22 1317//23
+f 424//66 620//45 623//46 425//48
+f 358//23 357//22 387//22 905//23
+f 65//2 943//2 1271//2 66//2
+f 126//18 1318//18 1319//18 127//18
+f 795//48 1320//46 1321//46 796//48
+f 1242//9 1243//9 1322//11 1323//12
+f 896//7 895//7 1324//8 1325//8
+f 166//5 165//5 430//6 429//6 1326//6
+f 25//28 9//27 8//31 1139//28
+f 1327//48 1185//46 1184//46 1328//48
+f 1329//23 1330//23 1331//22 1332//22
+f 1333//30 1334//30 1335//30 1336//30
+f 1337//48 1258//45 1259//46 1338//48
+f 344//3 1339//3 1340//3 345//3
+f 1002//2 1001//2 1341//2 1342//2 1343//2 647//2 646//2 678//2 681//2 1344//2 1345//2 1346//2 1347//2 1348//2 1349//2
+f 1350//30 1351//30 1352//30 1353//30
+f 1354//9 1355//9 1356//11 1357//11
+f 520//36 1358//36 747//36 501//36
+f 515//33 1337//35 1338//35 516//34
+f 1359//11 1360//9 134//9 133//11
+f 897//28 82//27 81//27 898//28
+f 1361//11 1362//9 1363//9 1364//11
+f 421//35 420//33 1365//34 1366//35
+f 1367//30 1368//30 1123//30 1128//30
+f 1369//1 1370//1 1371//1 1372//1 1373//1 963//1 962//1 951//1 950//1 1374//1 132//1 135//1 1375//1 1376//1 1377//1 1378//1 1173//1 1166//1 1165//1 1379//1
+f 1380//58 482//58 487//59 1381//59 1382//59
+f 550//49 1383//50 1384//50 1385//50 551//49
+f 1386//36 1387//36 591//36 594//36 1388//36 1389//36 742//36 745//36 1390//36 1391//36 1392//36 1393//36 1394//36 485//36 484//36
+f 1395//60 1396//60 737//60 736//60 1095//61 1397//61
+f 1398//3 1297//3 1298//3 1399//3
+f 760//30 1204//30 1203//30 761//30
+f 1400//30 1384//30 1383//30 1401//30
+f 217//19 393//19 392//19 521//19 1136//20 218//69
+f 396//23 1402//22 146//22 145//23
+f 103//6 390//6 393//6 217//5 98//5
+f 1403//2 1404//2 1405//2 1406//2
+f 625//7 624//7 601//8 600//8
+f 1042//58 1045//59 347//59 350//59 1407//58
+f 1408//28 987//27 986//27 1409//28
+f 1410//50 603//50 602//49 116//49 121//50
+f 18//23 206//22 1411//22 19//23
+f 436//22 403//23 402//23 1412//22
+f 32//19 223//19 222//19 1413//19 1414//20 33//20
+f 1415//25 1225//22 1224//22 1416//23
+f 1055//25 1054//22 1417//22 1418//23
+f 1343//49 1419//50 1420//50 648//50 647//49
+f 1421//30 1422//30 108//30 107//30
+f 1304//22 1423//23 1286//23 1296//22
+f 707//28 1424//27 1425//27 708//28
+f 1426//19 1427//20 1311//20 1221//19 1220//19 1428//19
+f 731//18 1429//18 1430//18 732//18
+f 1431//23 494//25 493//22 1432//22
+f 1433//26 1434//27 24//31 23//28
+f 441//30 440//30 1435//30 657//30
+f 140//49 1436//50 1280//50 524//50 141//49
+f 1437//2 1438//2 463//2 462//2
+f 457//3 456//3 976//3 911//3
+f 1439//5 202//6 201//6 1440//6 1441//5
+f 1442//3 1443//3 1444//3 1445//3 1446//3 1447//3 1448//3 1449//3 1312//3 1222//3 1225//3 1415//3 1450//3 1451//3 1452//3
+f 805//22 1146//22 994//23 806//23
+f 191//22 194//22 666//23 1453//23
+f 344//27 343//27 1454//28 1339//28
+f 1291//19 1455//19 1456//19 861//19 860//20 1292//20
+f 1219//30 1457//30 1428//30 1220//30
+f 1019//27 1018//31 1458//28 1459//28
+f 1374//23 1359//22 133//22 132//23
+f 423//70 792//70 1116//70 1115//70 789//70 788//70 564//70 563//70 887//70 886//70 1216//70 777//70 621//70 620//70 424//70
+f 1190//7 1189//7 1073//8 1072//8
+f 1460//33 1461//34 1462//35 1463//37
+f 1464//5 1077//5 1076//6 526//6 529//6
+f 1465//49 1466//50 1155//50 318//50 317//49
+f 240//4 1451//4 1450//4 241//4
+f 1147//1 242//1 241//1 1450//1 1415//1 1416//1 1313//1 1312//1 1449//1 1467//1 1468//1 1446//1 1445//1 235//1 234//1 665//1 1469//1 246//1 245//1 1470//1
+f 790//33 789//71 1115//35 1118//35
+f 383//4 382//4 1289//4 863//4
+f 111//32 110//32 667//32 1471//32
+f 1447//28 1446//27 1468//27 1472//28
+f 1268//23 1299//22 876//22 875//23
+f 1473//3 257//3 276//3 281//3
+f 818//3 802//3 801//3 844//3 758//3 757//3 738//3 741//3 444//3 447//3 477//3 822//3 821//3 1034//3 1035//3
+f 1474//17 1442//14 1452//14 239//72 238//14 1475//16
+f 1474//18 1475//18 1476//18 1477//18
+f 1478//28 1479//27 1480//27 1481//28
+f 1337//70 515//70 514//70 1258//70
+f 6//25 26//22 1140//24 7//23
+f 1482//11 1483//9 1484//9 1485//11
+f 559//23 558//22 1349//22 1348//23
+f 489//68 1486//61 1487//61 1488//60 1489//60 490//60
+f 206//11 205//9 1490//9 1411//11
+f 1181//9 187//9 186//11 1285//12
+f 1491//28 1492//27 1493//31 1494//28
+f 1495//27 1496//31 586//28 585//28
+f 1497//26 1498//27 1499//27 1500//28
+f 1501//23 1502//25 904//22 903//22
+f 1100//22 1503//23 1253//23 1097//22
+f 1212//23 834//22 837//22 1504//23
+f 1505//22 1506//23 1507//25 1508//22
+f 1509//28 1510//27 1511//27 1512//28
+f 1252//27 1513//31 1099//28 1098//28
+f 721//22 720//23 910//23 918//22
+f 370//23 958//22 961//22 371//23
+f 971//48 1234//46 1235//46 970//48
+f 1068//27 1105//27 534//28 533//28
+f 510//70 1514//70 1515//70 511//70
+f 610//11 689//9 1516//9 607//11
+f 27//26 5//27 4//27 159//28
+f 686//9 567//9 566//11 1517//12
+f 1518//23 1517//22 566//22 569//23
+f 1519//3 1520//3 945//3 948//3
+f 926//22 907//23 354//23 353//22
+f 1038//3 1041//3 1439//3 1441//3 1521//3 1522//3 1523//3 1524//3 1525//3 1526//3 1495//3 585//3 584//3 1527//3 1528//3
+f 1156//30 1155//30 1466//30 1529//30
+f 143//7 142//8 523//8 1530//7
+f 1531//11 1532//9 1197//9 1196//11
+f 1354//26 1023//27 1022//27 1355//28
+f 14//25 93//22 753//24 15//23
+f 350//60 349//60 415//60 414//61 1211//61 1407//60
+f 1170//7 1533//8 811//8 810//7
+f 936//22 72//23 71//25 937//22
+f 34//7 1534//8 30//8 29//7
+f 247//22 246//23 1469//25 1535//22
+f 1536//7 1537//7 295//8 294//8
+f 1217//14 1233//14 1232//14 1538//14 1539//16 1218//17
+f 7//2 1140//2 1139//2 8//2
+f 1540//30 1420//30 1419//30 1541//30
+f 1423//2 1304//2 1303//2 1542//2
+f 765//2 764//2 833//2 825//2 824//2 1543//2 1544//2 823//2 740//2 739//2 1202//2 846//2 845//2 800//2 799//2
+f 1218//18 1539//18 1457//18 1219//18
+f 912//58 1545//58 1546//59 1171//59 913//59
+f 1547//30 703//30 702//30 1548//30
+f 580//28 572//27 571//31 581//28
+f 1549//33 1550//34 1327//35 1328//35
+f 782//36 1151//36 1150//36 779//36 778//36 1215//36 1214//36 1551//36 562//36 565//36 787//36 786//36 1552//36 1553//36 783//36
+f 1440//19 1554//19 1555//19 1556//20 1521//73 1441//19
+f 1557//28 405//27 404//27 437//28
+f 1063//9 1405//9 1404//11 1064//11
+f 1558//14 1559//14 1560//13 1561//16 1562//17 1563//13
+f 1152//70 781//70 780//70 1149//70
+f 1564//1 1392//1 1391//1 1565//1 743//1 742//1 1389//1 1566//1 592//1 591//1 1387//1 1567//1 1027//1 1026//1 1568//1 1569//1 1145//1 838//1 841//1 848//1
+f 1393//61 1570//62 1380//60 1382//60 1571//60 1394//68
+f 425//36 623//36 622//36 426//36
+f 1572//52 1573//53 498//54 497//54
+f 1574//38 1575//39 1576//38 488//74 198//41 197//42
+f 163//7 325//7 1262//8 164//8
+f 1577//9 1578//9 480//11 479//11
+f 1579//28 1580//27 1581//27 1582//28
+f 565//75 564//75 788//75 787//75
+f 1525//11 1524//9 254//9 253//11
+f 398//23 1583//22 530//22 399//23
+f 1584//27 858//31 857//28 978//26
+f 944//1 555//1 554//1 1058//1 460//1 463//1 1438//1 1056//1 1055//1 1418//1 1005//1 1004//1 1053//1 548//1 547//1 1585//1 1586//1 557//1 556//1 1587//1
+f 1485//22 1588//23 1589//23 1482//22
+f 746//45 747//46 1358//48 1590//48
+f 812//5 1591//6 1592//6 1593//6 813//5
+f 520//33 519//34 1590//35 1358//35
+f 1594//19 1548//19 702//19 706//19 1595//20 1596//63
+f 390//18 103//18 102//18 391//18
+f 397//4 144//4 143//4 1530//4
+f 1597//52 1598//53 1599//54 1600//54
+f 1601//54 1569//52 1568//53 1602//54
+f 1603//70 1604//70 785//70 784//70
+f 1605//48 1265//46 1092//46 1091//48
+f 889//30 1251//30 1213//30 890//30
+f 1397//67 1095//67 1094//67 1606//67
+f 958//3 370//3 369//3 1228//3 1229//3 831//3 830//3 283//3 284//3 377//3 1242//3 1323//3 374//3 373//3 959//3
+f 744//70 743//70 1565//70 1607//70
+f 1600//70 1462//70 1461//70 1608//70 1143//70 1142//70 1609//70 1395//70 1397//70 1606//70 1610//70 1611//70 1612//70 1613//70 1597//70
+f 790//36 1118//36 1117//36 791//36
+f 1386//64 484//55 483//55 1614//56
+f 1615//23 1161//23 1160//22 1616//22
+f 1617//36 1618//36 1619//36 1620//36
+f 983//27 1021//27 1112//28 984//28
+f 1621//2 709//2 708//2 1425//2
+f 1606//1 1094//1 1093//1 1266//1 1622//1 1090//1 1089//1 1623//1 1624//1 1086//1 1085//1 1608//1 1461//1 1460//1 1598//1 1597//1 1613//1 1617//1 1620//1 1610//1
+f 1084//75 1143//75 1608//75 1085//75
+f 1611//54 1610//52 1620//53 1619//54
+f 535//22 1106//23 1069//23 536//22
+f 1289//1 1288//1 1625//1 1626//1 1287//1 1286//1 1423//1 1542//1 1294//1 1293//1 859//1 858//1 1584//1 1627//1 866//1 865//1 1628//1 473//1 472//1 863//1
+f 1629//23 1630//22 1631//22 1632//23
+f 1633//28 1470//27 245//27 244//28
+f 1369//3 1193//3 1192//3 1370//3
+f 1301//22 1273//23 1272//23 1279//22
+f 1634//9 1635//9 1636//11 1637//11
+f 1599//36 1598//36 1460//36 1463//36
+f 1638//70 1639//70 1624//70 1623//70
+f 917//67 916//67 508//67 507//67
+f 73//4 1231//4 1230//4 74//4
+f 369//4 180//4 179//4 1228//4
+f 1408//9 1409//9 1154//11 1153//11
+f 1640//27 1641//31 90//28 89//28
+f 482//70 1380//70 1570//70 1564//70 848//70 849//70 1144//70 1145//70 1569//70 1601//70 1028//70 1027//70 1567//70 1614//70 483//70
+f 637//22 1642//22 1103//23 638//23
+f 1643//19 1353//19 1352//19 1644//19 379//20 378//73
+f 1645//11 1433//9 23//9 22//11
+f 1646//27 1647//31 1648//28 1649//28
+f 693//9 692//9 1616//11 1160//12
+f 919//28 909//27 723//27 722//28
+f 1650//46 1388//46 594//48 593//48
+f 1651//11 1180//9 1179//9 1652//11
+f 1570//67 1393//67 1392//67 1564//67
+f 1653//25 1531//22 1196//22 1199//23
+f 349//43 348//43 1044//43 416//44 415//44
+f 205//26 17//27 16//27 1490//28
+f 1521//32 1556//32 1654//32 1522//32
+f 1655//56 1131//55 1130//55 1656//56
+f 1644//49 1352//50 1351//50 1561//50 1560//49
+f 1657//56 1658//56 1576//55 1575//55
+f 1120//12 1119//9 718//10 717//11
+f 175//12 174//9 1260//10 1264//11
+f 570//2 1111//2 1110//2 578//2 577//2 1136//2 521//2 101//2 100//2 290//2 289//2 574//2 582//2 581//2 571//2
+f 1602//36 1568//36 1026//36 1029//36
+f 1566//70 1650//70 593//70 592//70
+f 1060//14 1059//14 1659//14 1660//14 1430//16 1429//17
+f 652//26 651//27 1347//27 1346//28
+f 1051//19 1401//19 1383//19 550//19 549//20 1052//21
+f 1407//70 1211//70 1210//70 1182//70 1185//70 1327//70 1550//70 1661//70 1320//70 795//70 794//70 1662//70 1663//70 1043//70 1042//70
+f 1034//26 821//27 820//27 851//28
+f 1583//12 495//9 496//10 530//11
+f 1664//51 49//52 48//53 1665//54
+f 921//32 1666//32 338//32 337//32
+f 817//9 828//9 1146//11 805//11
+f 924//9 676//9 677//11 925//11
+f 1478//9 1481//9 1316//11 1315//11
+f 1451//7 240//7 239//8 1452//8
+f 298//6 1333//6 1336//6 1667//5 293//5
+f 1549//36 1328//36 1184//36 1183//36
+f 1529//19 1466//19 1465//19 1668//20 1669//69 1670//19
+f 1062//27 1406//27 1405//28 1063//26
+f 1663//75 1662//75 419//75 418//75
+f 1207//12 321//9 324//10 1208//11
+f 474//11 1671//9 864//9 475//11
+f 1643//5 1563//5 1562//6 1350//6 1353//6
+f 1672//23 1637//22 1636//22 1673//23
+f 887//38 563//39 562//38 1551//40 1250//41 888//42
+f 1241//22 1240//23 172//23 171//22
+f 1586//25 1674//22 545//22 557//23
+f 1276//7 882//7 124//8 123//8
+f 1675//49 1335//50 1334//50 297//50 296//49
+f 1012//7 1015//7 1559//8 1558//8
+f 540//48 954//45 957//46 537//48
+f 583//28 368//27 184//27 183//28
+f 793//36 796//36 1321//36 1676//36
+f 1677//70 1678//70 1366//70 1365//70
+f 278//42 1609//38 1142//39 1096//38 735//39 279//41
+f 1376//32 1669//32 1668//32 1377//32
+f 1605//70 1622//70 1266//70 1265//70
+f 95//28 94//27 1679//27 1680//28
+f 1681//35 51//33 50//34 1682//35
+f 648//18 1420//18 1540//18 643//18
+f 652//9 1346//10 1345//11 653//12
+f 1288//25 1284//22 1283//22 1625//23
+f 504//36 1046//36 1248//36 505//36
+f 1229//14 178//14 177//13 766//16 767//17 831//13
+f 298//18 297//18 1334//18 1333//18
+f 1683//25 1684//22 1685//22 1686//23
+f 1554//50 204//50 203//50 1687//49 1555//49
+f 517//75 1079//75 1078//75 518//75
+f 1297//26 1398//27 675//27 674//28
+f 1650//54 1566//53 1389//53 1388//54
+f 470//23 1067//23 1066//22 471//22
+f 1399//25 1298//22 673//22 672//23
+f 1120//22 717//22 262//23 261//23
+f 1688//30 1410//30 121//30 120//30
+f 1127//58 1129//58 1134//59 1367//59 1128//59
+f 598//2 597//2 311//2 314//2 750//2 749//2 1689//2 1690//2 1675//2 296//2 295//2 1537//2 1691//2 304//2 303//2
+f 161//23 175//22 1264//22 1254//23
+f 624//2 627//2 1503//2 1100//2 1099//2 1513//2 1692//2 1364//2 1363//2 1693//2 1017//2 117//2 116//2 602//2 601//2
+f 200//30 199//30 490//30 1489//30
+f 1367//29 1134//29 1133//29 1368//29
+f 589//30 1280//30 1436//30 590//30
+f 1369//27 1379//27 1194//28 1193//26
+f 1003//9 1006//9 1417//11 1054//11
+f 96//11 95//9 1680//9 1010//11
+f 510//52 509//76 1694//54 1514//54
+f 1171//29 1546//29 1695//29 1172//29
+f 1339//9 1454//9 1696//11 1340//11
+f 1697//33 1698//34 500//35 499//35
+f 1682//48 1664//46 1665//46 1681//48
+f 1655//75 1656//75 37//75 36//75
+f 1114//22 1113//22 1699//23 1700//25
+f 1485//2 1484//2 1701//2 1588//2
+f 1512//2 1511//2 1702//2 1703//2 947//2 946//2 1704//2 981//2 980//2 1660//2 1659//2 618//2 617//2 1506//2 1505//2
+f 1552//35 786//33 785//34 1604//35
+f 1181//3 1285//3 367//3 366//3
+f 1322//2 1243//2 376//2 375//2
+f 698//11 1459//9 1458//9 699//11
+f 1374//3 950//3 953//3 964//3 963//3 1373//3 1705//3 315//3 320//3 1670//3 1669//3 1376//3 1375//3 1360//3 1359//3
+f 1577//28 991//27 990//27 1578//28
+f 1116//51 792//52 791//53 1117//54
+f 1187//11 1706//9 1707//9 1186//11
+f 688//1 609//1 608//1 1708//1 1528//1 1527//1 1709//1 1496//1 1495//1 1526//1 256//1 255//1 1523//1 1522//1 1654//1 1710//1 491//1 494//1 1431//1 1711//1
+f 814//32 1712//32 985//32 815//32
+f 868//2 872//2 804//2 803//2 1102//2 1101//2 1205//2 1713//2 1107//2 1106//2 535//2 534//2 1105//2 1037//2 1036//2
+f 233//11 1305//9 995//9 230//11
+f 714//2 713//2 1261//2 259//2 258//2 1714//2 282//2 275//2 274//2 434//2 433//2 271//2 270//2 451//2 450//2
+f 990//2 989//2 1154//2 1409//2 986//2 985//2 1712//2 1715//2 1716//2 1533//2 1170//2 992//2 481//2 480//2 1578//2
+f 1514//46 1694//65 1717//48 1515//48
+f 28//22 160//22 3//23 2//23
+f 139//20 389//69 588//19 590//19 1436//19 140//19
+f 1510//3 1509//3 1508//3 1507//3
+f 1718//19 1541//19 1419//19 1343//19 1342//20 1719//21
+f 948//9 947//9 1703//11 1519//11
+f 1720//49 1413//49 222//50 221//50 225//50
+f 287//48 775//46 411//65 288//47
+f 1429//6 731//6 734//6 979//5 1060//5
+f 226//3 1114//3 1700//3 1721//3 1722//3 1108//3 55//3 59//3 1723//3 1724//3 1424//3 707//3 710//3 1725//3 227//3
+f 1152//35 1151//37 782//33 781//34
+f 197//59 200//59 1489//59 1488//58 1574//58
+f 67//22 66//22 1271//23 1270//23
+f 277//30 280//30 737//30 1396//30
+f 1726//7 1109//8 1108//8 1722//7
+f 1727//49 1728//50 428//50 427//50 1263//49
+f 1729//30 1730//30 1456//30 1455//30
+f 811//14 1533//14 1716//13 1731//16 1591//17 812//13
+f 1172//43 1695//43 1732//44 915//44 914//43
+f 302//2 301//2 850//2 993//2
+f 991//3 1577//3 479//3 478//3
+f 1677//52 410//53 422//54 1678//54
+f 364//32 661//32 724//32 365//32
+f 1039//4 1038//4 1528//4 1708//4
+f 1651//3 1733//3 1646//3 1649//3 1331//3 1330//3 626//3 625//3 600//3 599//3 119//3 118//3 1016//3 1177//3 1180//3
+f 1277//5 122//5 127//6 1319//6 1734//6
+f 759//18 847//18 1204//18 760//18
+f 1674//11 1735//9 546//9 545//11
+f 79//23 900//22 899//24 80//23
+f 1362//3 1361//3 1736//3 1737//3
+f 1738//3 341//3 340//3 998//3
+f 1739//2 1652//2 1179//2 1178//2
+f 614//12 613//9 1713//10 1205//11
+f 1740//22 342//23 341//23 1738//22
+f 1137//70 684//70 42//70 41//70 1009//70 1157//70 38//70 37//70 1656//70 1130//70 1129//70 1127//70 1126//70 46//70 45//70
+f 953//9 952//9 965//11 964//11
+f 1057//9 1437//9 462//11 461//11
+f 1741//22 1742//22 1743//23 1744//23
+f 1719//32 1342//32 1341//32 1745//32
+f 491//27 1710//31 1746//28 492//28
+f 1645//3 1747//3 1191//3 1190//3 1072//3 1077//3 1464//3 1748//3 1749//3 972//3 975//3 1750//3 1751//3 1434//3 1433//3
+f 1111//22 570//23 252//23 251//22
+f 1752//23 1753//23 1754//22 1755//22
+f 1647//2 1329//2 1332//2 1648//2
+f 209//11 208//9 719//9 442//11
+f 1688//18 604//18 603//18 1410//18
+f 332//27 331//27 676//28 924//28
+f 285//1 410//1 1677//1 1365//1 420//1 419//1 1662//1 794//1 793//1 1676//1 1661//1 1550//1 1549//1 1183//1 1182//1 1210//1 413//1 412//1 776//1 286//1
+f 307//26 1756//27 649//27 308//28
+f 1157//48 1009//46 892//46 891//48
+f 70//27 69//27 935//28 934//28
+f 33//32 1414//32 11//32 10//32
+f 1692//1 1513//1 1252//1 1253//1 1503//1 627//1 626//1 1330//1 1329//1 1647//1 1646//1 1733//1 1739//1 1178//1 1177//1 1016//1 1017//1 1693//1 1737//1 1736//1
+f 654//1 1344//1 681//1 680//1 1757//1 650//1 649//1 1756//1 1518//1 569//1 568//1 687//1 1745//1 1341//1 1001//1 560//1 559//1 1348//1 1347//1 651//1
+f 1052//32 549//32 548//32 1053//32
+f 1310//2 1256//2 1227//2 1226//2 1727//2 1263//2 1262//2 325//2 326//2 1209//2 1208//2 324//2 323//2 1257//2 1758//2
+f 982//32 981//32 1704//32 1061//32
+f 1759//32 1690//32 1689//32 1760//32
+f 751//3 313//3 312//3 748//3
+f 1050//13 1049//14 552//14 551//13 1385//16 1761//17
+f 1536//3 294//3 293//3 1667//3 1759//3 1760//3 1762//3 1483//3 1482//3 1589//3 928//3 901//3 904//3 1502//3 1763//3
+f 1601//45 1602//46 1029//48 1028//48
+f 336//27 335//27 999//28 922//28
+f 1579//9 1582//9 1764//11 1765//12
+f 1592//18 1591//18 1731//18 1766//18
+f 1080//36 1079//36 517//36 516//36 1338//36 1259//36 513//36 512//36 1717//36 1694//36 509//36 508//36 916//36 915//36 1732//36
+f 1497//9 1500//10 1742//11 1741//12
+f 1402//3 396//3 395//3 829//3
+f 1661//52 1676//76 1321//54 1320//54
+f 1767//6 628//5 642//5 1135//6 1141//6
+f 1381//29 487//29 486//29 1768//29
+f 1769//49 1770//50 1032//50 1031//50 1771//49
+f 374//23 1323//22 1322//22 375//23
+f 1772//25 1083//22 1082//22 1773//23
+f 1000//22 334//23 333//25 923//22
+f 1449//25 1448//22 1774//22 1467//23
+f 1247//23 1246//22 885//22 884//23
+f 1290//13 385//14 384//14 862//13 1775//16 1776//17
+f 265//23 1122//22 682//22 266//23
+f 1470//3 1633//3 1148//3 1147//3
+f 455//7 454//7 1777//8 920//8
+f 1024//23 1357//22 1356//22 1025//23
+f 1705//7 1778//7 316//8 315//8
+f 801//7 800//7 845//8 844//8
+f 1592//30 1766//30 1779//30 1593//30
+f 1692//23 1736//25 1361//22 1364//22
+f 929//1 928//1 1589//1 1588//1 1701//1 1762//1 1760//1 1689//1 749//1 748//1 312//1 311//1 597//1 596//1 305//1 304//1 1691//1 1763//1 1502//1 1501//1
+f 1628//27 865//27 864//28 1671//28
+f 1768//43 486//43 485//44 1394//44 1571//43
+f 1319//30 1318//30 1780//30 1734//30
+f 448//6 453//5 711//5 716//6 730//6
+f 100//8 99//8 216//7 290//7
+f 90//2 1641//2 1781//2 91//2
+f 170//9 1176//9 1241//11 171//12
+f 1277//19 1734//19 1780//19 881//19 880//20 1162//73
+f 1538//2 1232//2 1231//2 73//2 72//2 936//2 935//2 69//2 68//2 1186//2 1707//2 85//2 84//2 1427//2 1426//2
+f 1743//2 1742//2 1500//2 1499//2
+f 664//3 1535//3 1469//3 665//3
+f 80//2 899//2 898//2 81//2
+f 1417//2 1006//2 1005//2 1418//2
+f 1645//22 22//22 21//23 1747//23
+f 1174//9 1782//9 1164//11 1167//11
+f 192//3 191//3 1453//3 662//3
+f 1726//4 1722//4 1721//4 1783//4
+f 1784//27 1198//31 1197//28 1532//28
+f 158//2 157//2 1773//2 1082//2
+f 596//3 595//3 306//3 305//3
+f 1103//2 1642//2 1785//2 1104//2
+f 34//2 20//2 19//2 1411//2 1490//2 16//2 15//2 753//2 752//2 12//2 11//2 1414//2 1413//2 1720//2 1534//2
+f 1771//2 62//2 61//2 1008//2 1025//2 1356//2 1355//2 1022//2 113//2 112//2 1112//2 1021//2 856//2 855//2 1769//2
+f 772//3 773//3 1786//3 106//3 111//3 1471//3 1479//3 1478//3 1315//3 1314//3 156//3 155//3 1083//3 1772//3 1787//3
+f 1306//9 1309//10 1631//11 1630//12
+f 201//30 204//30 1554//30 1440//30
+f 1788//17 1786//13 773//14 669//14 668//13 1789//16
+f 634//23 633//22 1070//22 1071//23
+f 1790//19 1791//19 1770//19 1769//19 855//20 854//21
+f 1448//11 1447//9 1472//9 1774//11
+f 1788//18 1789//18 1422//18 1421//18
+f 867//22 866//23 1627//23 977//22
+f 1292//32 860//32 859//32 1293//32
+f 1350//18 1562//18 1561//18 1351//18
+f 196//12 583//9 183//10 182//11
+f 1718//3 1719//3 1745//3 687//3 686//3 1517//3 1518//3 1756//3 307//3 310//3 1757//3 680//3 679//3 645//3 644//3
+f 1678//46 422//46 421//48 1366//48
+f 1538//49 1426//49 1428//50 1457//50 1539//50
+f 1381//30 1768//30 1571//30 1382//30
+f 1584//3 978//3 977//3 1627//3
+f 1195//24 1371//23 1370//23 1192//22
+f 257//23 1473//22 1714//22 258//23
+f 1467//2 1774//2 1472//2 1468//2
+f 57//30 105//30 754//30 58//30
+f 902//2 929//2 1501//2 903//2
+f 232//3 1019//3 1459//3 698//3 697//3 1007//3 60//3 63//3 1792//3 1790//3 854//3 853//3 1020//3 1305//3 233//3
+f 959//26 373//27 372//27 960//28
+f 637//12 636//9 1785//10 1642//11
+f 1474//6 1477//6 1793//6 1443//5 1442//5
+f 679//7 678//7 646//8 645//8
+f 1291//5 1290//5 1776//6 1729//6 1455//6
+f 346//23 345//25 1340//22 1696//22
+f 273//23 435//22 434//22 274//23
+f 1794//27 1795//31 1635//28 1634//28
+f 106//5 1786//5 1788//6 1421//6 107//6
+f 912//70 917//70 507//70 506//70 1249//70 1047//70 503//70 502//70 746//70 1590//70 519//70 518//70 1078//70 1081//70 1545//70
+f 1709//23 1527//23 584//22 587//22
+f 1739//23 1733//25 1651//22 1652//22
+f 1718//5 644//5 643//6 1540//6 1541//6
+f 1492//1 154//1 153//1 1679//1 94//1 97//1 1011//1 894//1 893//1 1796//1 1781//1 1641//1 1640//1 1653//1 1199//1 1198//1 1784//1 1797//1 1798//1 1493//1
+f 1799//6 1547//6 1548//6 1594//5 1800//5
+f 1173//27 1378//31 1782//28 1174//28
+f 632//9 843//9 1070//11 633//12
+f 1625//2 1283//2 1282//2 1626//2
+f 1628//3 1671//3 474//3 473//3
+f 452//32 451//32 270//32 269//32
+f 1776//18 1775//18 1730//18 1729//18
+f 1796//23 88//22 91//22 1781//23
+f 1723//32 1801//32 1802//32 1724//32
+f 1724//1 1802//1 1795//1 1794//1 1672//1 1673//1 932//1 931//1 1683//1 1686//1 1783//1 1721//1 1700//1 1699//1 228//1 227//1 1725//1 1621//1 1425//1 1424//1
+f 1658//75 1657//75 1803//75 1804//75
+f 1635//2 1795//2 1802//2 1801//2 756//2 755//2 1109//2 1726//2 1783//2 1686//2 1685//2 933//2 932//2 1673//2 1636//2
+f 572//3 580//3 579//3 573//3
+f 1587//3 129//3 128//3 944//3
+f 1728//19 1727//19 1226//20 167//20 166//19 1326//19
+f 30//14 1534//14 1720//13 225//16 224//17 31//13
+f 1663//56 418//56 417//55 1043//55
+f 1805//9 1806//9 1755//11 1754//12
+f 656//14 920//14 1777//15 1807//14 439//16 438//17
+f 619//7 618//7 1659//8 1059//8
+f 1637//3 1672//3 1794//3 1634//3
+f 1223//2 1313//2 1416//2 1224//2
+f 694//9 468//9 471//11 1066//11
+f 1311//32 1427//32 84//32 83//32
+f 1667//19 1336//19 1335//19 1675//19 1690//20 1759//21
+f 849//46 840//46 839//48 1144//48
+f 881//49 1780//50 1318//50 126//50 125//49
+f 1132//44 1124//44 1123//43 1368//43 1133//43
+f 1281//28 1287//27 1626//31 1282//28
+f 1200//51 1808//52 1809//53 1201//54
+f 1603//54 784//52 783//53 1553//54
+f 1300//9 877//9 876//11 1299//12
+f 1464//19 529//19 528//19 1810//19 1811//20 1748//20
+f 310//22 309//22 650//23 1757//23
+f 512//34 511//34 1515//35 1717//35
+f 696//2 699//2 1458//2 1018//2
+f 1699//2 1113//2 229//2 228//2
+f 733//50 732//50 1430//50 1660//49 980//49
+f 931//3 930//3 1684//3 1683//3
+f 1378//2 1377//2 1668//2 1465//2 317//2 316//2 1778//2 1372//2 1371//2 1195//2 1194//2 1379//2 1165//2 1164//2 1782//2
+f 1738//11 998//9 997//9 1740//11
+f 1812//67 1487//67 1486//67 1813//67
+f 605//9 606//9 798//11 797//11
+f 968//30 969//30 659//30 658//30
+f 334//2 1000//2 999//2 335//2
+f 223//6 32//5 31//5 224//6 220//6
+f 1618//35 1617//33 1613//34 1612//35
+f 493//11 492//9 1746//9 1432//11
+f 1814//23 1765//22 1764//22 1815//23
+f 1462//48 1600//46 1599//46 1463//48
+f 1486//36 489//36 488//36 1576//36 1658//36 1804//36 941//36 940//36 1201//36 1809//36 1697//36 499//36 498//36 1573//36 1813//36
+f 1102//4 803//4 640//4 639//4
+f 500//70 1698//70 1572//70 497//70
+f 538//36 537//36 957//36 956//36
+f 824//23 771//23 770//22 1543//22
+f 86//27 85//27 1707//28 1706//28
+f 1087//35 1086//33 1624//34 1639//35
+f 868//19 1036//20 629//20 628//19 1767//19 869//19
+f 1805//28 1816//27 1817//27 1806//28
+f 1187//3 87//3 86//3 1706//3
+f 1535//11 664//9 248//9 247//11
+f 1168//22 1169//23 1751//25 1750//22
+f 1818//32 1749//32 1748//32 1811//32
+f 1670//5 320//5 319//6 1156//6 1529//6
+f 636//28 635//27 1104//27 1785//28
+f 1607//54 1565//52 1391//53 1390//54
+f 538//1 956//1 955//1 1812//1 1813//1 1573//1 1572//1 1698//1 1697//1 1809//1 1808//1 938//1 941//1 1804//1 1803//1 467//1 466//1 543//1 542//1 539//1
+f 952//2 951//2 962//2 965//2
+f 1057//28 1056//27 1438//27 1437//28
+f 544//36 543//36 466//36 465//36
+f 599//5 604//6 1688//6 120//6 119//5
+f 1808//70 1200//70 939//70 938//70
+f 819//23 818//23 1035//22 852//22
+f 659//50 969//50 967//50 725//49 660//49
+f 1124//36 1132//36 1131//36 1655//36 36//36 35//36 970//36 1235//36 52//36 51//36 1681//36 1665//36 48//36 47//36 1125//36
+f 1216//67 1215//67 778//67 777//67
+f 50//70 49//70 1664//70 1682//70
+f 685//36 1138//36 44//36 43//36
+f 1090//33 1622//34 1605//35 1091//37
+f 1141//30 870//30 869//30 1767//30
+f 1758//22 1257//23 1237//23 1236//22
+f 1551//44 1214//44 1213//43 1251//43 1250//43
+f 1295//28 1294//27 1542//27 1303//28
+f 655//19 657//19 1435//19 1819//19 1666//20 921//20
+f 1278//9 1302//9 1301//11 1279//12
+f 561//9 1002//9 1349//11 558//12
+f 278//59 277//59 1396//59 1395//58 1609//58
+f 59//19 58//19 754//19 756//19 1801//20 1723//20
+f 769//9 1544//9 1543//11 770//12
+f 1234//70 971//70 54//70 53//70
+f 930//9 933//9 1685//11 1684//11
+f 1715//49 1779//50 1766//50 1731//50 1716//49
+f 1612//48 1611//46 1619//46 1618//48
+f 1585//3 1735//3 1674//3 1586//3
+f 1725//25 710//22 709//22 1621//23
+f 1188//1 1191//1 1747//1 21//1 24//1 1434//1 1751//1 1169//1 973//1 972//1 1749//1 1818//1 691//1 690//1 1161//1 1615//1 1159//1 1158//1 1212//1 1504//1
+f 1603//46 1553//46 1552//48 1604//48
+f 1509//9 1512//9 1505//11 1508//11
+f 1585//27 547//31 546//28 1735//28
+f 1048//4 1058//4 554//4 553//4
+f 352//9 927//9 926//11 353//12
+f 1583//3 398//3 397//3 1530//3 523//3 522//3 588//3 389//3 388//3 405//3 1557//3 1412//3 402//3 401//3 495//3
+f 1633//9 244//9 243//11 1148//11
+f 1408//3 1153//3 988//3 987//3
+f 150//22 149//23 394//23 431//22
+f 1317//1 1480//1 1479//1 1471//1 667//1 663//1 662//1 1453//1 666//1 675//1 1398//1 1399//1 672//1 671//1 1787//1 1772//1 1773//1 157//1 156//1 1314//1
+f 1820//50 1476//50 1475//50 238//49 237//49
+f 1820//19 237//19 236//20 1444//20 1443//19 1793//19
+f 1814//3 1498//3 1497//3 1741//3 1744//3 1013//3 1012//3 1558//3 1563//3 1643//3 378//3 381//3 1580//3 1579//3 1765//3
+f 1033//30 1032//30 1770//30 1791//30
+f 1762//27 1701//27 1484//28 1483//28
+f 1385//18 1384//18 1400//18 1761//18
+f 1545//77 1081//39 1080//39 1732//40 1695//41 1546//42
+f 1278//28 1275//27 1274//27 1302//28
+f 861//49 1456//50 1730//50 1775//50 862//49
+f 1039//2 1708//2 608//2 607//2 1516//2 1711//2 1431//2 1432//2 1746//2 1710//2 1654//2 1556//2 1555//2 1687//2 1040//2
+f 775//70 287//70 286//70 776//70
+f 1245//26 1244//27 874//27 873//28
+f 1523//27 255//31 254//28 1524//28
+f 1402//12 829//9 147//10 146//11
+f 692//2 691//2 1818//2 1811//2 1810//2 1074//2 1073//2 1189//2 1188//2 1504//2 837//2 836//2 1159//2 1615//2 1616//2
+f 1325//14 1324//15 705//13 704//16 1799//17 1800//13
+f 1702//23 1520//25 1519//22 1703//22
+f 1737//27 1693//31 1363//28 1362//28
+f 757//19 761//19 1203//19 1202//19 739//20 738//20
+f 1557//9 437//9 436//11 1412//12
+f 330//23 329//25 925//22 677//22
+f 1045//29 1044//29 348//29 347//29
+f 654//23 653//22 1345//22 1344//23
+f 256//23 1526//25 1525//22 253//22
+f 1537//4 1536//4 1763//4 1691//4
+f 249//27 578//27 1110//28 250//28
+f 949//9 683//9 682//11 1122//12
+f 1041//14 1040//14 1687//13 203//16 202//17 1439//13
+f 553//7 552//8 1049//8 1048//7
+f 1316//2 1481//2 1480//2 1317//2
+f 1790//5 1792//5 1030//6 1033//6 1791//6
+f 1666//2 1819//2 1807//2 1777//2 454//2 327//2 346//2 1696//2 1454//2 343//2 342//2 1740//2 997//2 339//2 338//2
+f 213//11 212//9 532//9 611//11
+f 613//28 612//27 1107//27 1713//28
+f 1013//1 1744//1 1743//1 1499//1 1498//1 1814//1 1815//1 1581//1 1580//1 381//1 380//1 1817//1 1816//1 1753//1 1752//1 1308//1 1307//1 1629//1 1632//1 1014//1
+f 363//5 362//5 966//6 968//6 658//6
+f 1639//48 1638//46 1088//46 1087//48
+f 456//9 459//10 728//11 976//12
+f 1644//2 1560//2 1559//2 1015//2 1014//2 1632//2 1631//2 1309//2 1308//2 1752//2 1755//2 1806//2 1817//2 380//2 379//2
+f 1750//11 975//9 974//10 1168//11
+f 1473//12 281//9 282//10 1714//11
+f 542//70 541//70 464//70 467//70 1803//70 1657//70 1575//70 1574//70 1488//70 1487//70 1812//70 955//70 954//70 540//70 539//70
+f 1816//3 1805//3 1754//3 1753//3
+f 1815//2 1764//2 1582//2 1581//2
+f 1810//49 528//50 527//50 1075//50 1074//49
+f 63//14 62//14 1771//13 1031//16 1030//17 1792//13
+f 768//27 823//27 1544//28 769//28
+f 586//2 1496//2 1709//2 587//2
+f 151//11 1491//9 1494//9 152//11
+f 109//49 108//50 1422//50 1789//50 668//49
+f 1065//25 1064//22 1404//22 1403//23
+f 1047//66 1249//46 1248//46 1046//48
+f 1607//46 1390//46 745//48 744//48
+f 1331//11 1649//9 1648//9 1332//11
+f 1372//4 1778//4 1705//4 1373//4
+f 1360//28 1375//27 135//27 134//28
+f 1307//3 1306//3 1630//3 1629//3
+f 772//4 1787//4 671//4 670//4
+f 1477//30 1476//30 1820//30 1793//30
+f 1797//32 1596//32 1595//32 1798//32
+f 1614//75 1567//75 1387//75 1386//75
+f 1531//3 1653//3 1640//3 89//3 88//3 1796//3 893//3 896//3 1325//3 1800//3 1594//3 1596//3 1797//3 1784//3 1532//3
+f 153//2 152//2 1494//2 1493//2 1798//2 1595//2 706//2 705//2 1324//2 895//2 894//2 1011//2 1010//2 1680//2 1679//2
+f 1357//3 1024//3 1023//3 1354//3
+f 582//22 574//23 573//23 579//22
+f 1491//3 151//3 154//3 1492//3
+f 1300//28 1267//27 878//27 877//28
+f 1051//5 1050//5 1761//6 1400//6 1401//6
+f 1137//54 45//52 44//53 1138//54
+f 129//28 1587//27 556//31 130//28
+f 371//2 961//2 960//2 372//2
+f 730//30 729//30 449//30 448//30
+f 1712//20 814//69 813//19 1593//19 1779//19 1715//19
+f 208//28 207//27 576//31 719//28
+f 780//52 779//53 1150//54 1149//54
+f 429//30 428//30 1728//30 1326//30
+f 1444//32 236//32 235//32 1445//32
+f 470//1 469//1 695//1 1065//1 1403//1 1406//1 1062//1 1061//1 1704//1 946//1 945//1 1520//1 1702//1 1511//1 1510//1 1507//1 1506//1 617//1 616//1 1067//1
+f 1245//9 873//10 885//11 1246//12
+f 1239//9 1310//9 1758//11 1236//12
+f 1819//49 1435//50 440//50 439//50 1807//49
+f 1638//54 1623//52 1089//53 1088//54
+f 1799//18 704//18 703//18 1547//18
+f 688//27 1711//31 1516//28 689//28
+o Floor
+v -39.484219 -25.864807 -0.000000
+v -39.484219 27.040174 0.000002
+v -39.484219 27.040174 -0.499998
+v -39.484219 -25.864807 -0.500000
+v 33.542374 27.040174 0.000002
+v 33.542374 27.040174 -0.499998
+v 43.770226 -25.864807 -0.000000
+v 43.770226 -25.864807 -0.500000
+v 13.601372 12.119150 0.000002
+v -37.380447 -16.977444 0.000000
+v 12.872247 16.323282 0.000002
+v -37.330448 -23.844000 0.000000
+v -37.330448 -16.977444 0.000000
+v 50.317074 -19.047932 0.000000
+v -37.380447 -16.177444 0.000000
+v 36.027946 20.211119 0.000002
+v -37.380447 -15.246632 0.000000
+v 34.568771 24.220171 0.000002
+v -37.330448 -16.177444 0.000000
+v 50.317074 -19.047932 -0.500000
+v -37.330448 -15.246632 0.000000
+v 34.568771 24.220171 -0.199998
+v -37.380447 -14.446631 0.000000
+v 36.027946 20.211119 -0.199998
+v 34.568771 24.220171 4.071209
+v -37.330448 -12.729661 0.000000
+v -37.330448 -14.446631 0.000000
+v 36.027946 20.211119 4.203956
+v -35.085789 -12.279661 0.000001
+v -35.035789 -12.729661 0.000000
+v -35.035789 -12.279661 0.000001
+v -35.085789 -11.479661 0.000001
+v -37.330448 -7.076204 0.000001
+v -35.035789 -7.076204 0.000001
+v -35.035789 -11.479661 0.000001
+v -37.380447 -0.450436 0.000001
+v -37.330448 -0.450436 0.000001
+v -37.380447 1.426359 0.000001
+v -37.330448 1.426359 0.000001
+v -37.380447 0.349564 0.000001
+v -37.330448 0.349564 0.000001
+v -37.380447 2.226360 0.000001
+v -37.330448 8.887293 0.000001
+v -37.330448 2.226360 0.000001
+v 14.948427 -23.844000 0.000000
+v -13.628716 7.941137 0.000001
+v -13.289828 7.991137 0.000001
+v -13.289828 7.941137 0.000001
+v -13.628716 8.887293 0.000001
+v -12.489828 7.991137 0.000001
+v -11.128716 7.941137 0.000001
+v -12.489828 7.941137 0.000001
+v 16.198427 -18.761621 0.000000
+v 17.448427 -23.844000 0.000000
+v 14.948427 -18.711620 0.000000
+v 16.198427 -18.711620 0.000000
+v 16.998426 -18.761621 0.000000
+v 16.998426 -18.711620 0.000000
+v 17.448427 -18.711620 0.000000
+v -11.128716 16.323317 0.000002
+v -3.688910 11.009729 0.000002
+v -3.217584 11.523291 0.000002
+v -4.016689 10.394541 0.000001
+v -4.180056 9.716894 0.000001
+v -4.168609 9.019926 0.000001
+v -2.632718 11.902533 0.000002
+v -1.971545 12.123316 0.000002
+v 40.000263 -23.844000 0.000000
+v 40.000263 -18.711620 0.000000
+v 41.594418 -18.711620 0.000000
+v 41.552635 -18.611385 0.000000
+v 41.537792 -18.503811 0.000000
+v 41.655529 -18.207760 0.000000
+v 41.590996 -18.295099 0.000000
+v 41.550865 -18.396008 0.000000
+v 41.839405 -18.095594 0.000000
+v 41.946594 -18.078186 0.000000
+v 41.740196 -18.139759 0.000000
+v 42.054680 -18.088682 0.000000
+v 13.600650 12.123316 0.000002
+v 13.612914 12.123316 0.000002
+v 19.656212 9.019926 0.000001
+v 19.656212 9.893988 0.000001
+v 46.174992 -14.785413 0.000000
+v 41.475014 -16.496065 0.000000
+v 35.322247 0.201824 0.000001
+v 35.369232 0.218925 0.000001
+v 35.476158 -0.221037 0.000001
+v 35.048634 0.953579 0.000001
+v 34.621105 2.128193 0.000001
+v 35.095615 0.970678 0.000001
+v 26.182775 12.322668 0.000002
+v 26.199875 12.275686 0.000002
+v 26.934528 12.596285 0.000002
+v 27.800396 12.858225 0.000002
+v 26.951630 12.549299 0.000002
+v 27.783295 12.905210 0.000002
+v 40.242565 1.513794 0.000001
+v 39.387516 3.863026 0.000001
+v 28.535048 13.178827 0.000002
+v 35.141079 15.530016 0.000002
+v 28.552149 13.131842 0.000002
+v 12.872341 16.323317 0.000002
+v 13.612912 12.123316 0.000002
+v -22.672579 -21.454777 0.000000
+v -22.672579 -21.854776 0.000000
+v -22.272577 -21.454777 0.000000
+v -22.272577 -21.854776 0.000000
+v -30.175529 -18.653444 0.000000
+v -30.175529 -19.053444 0.000000
+v -29.775530 -18.653444 0.000000
+v -29.775530 -19.053444 0.000000
+v -22.675529 -18.653444 0.000000
+v -22.675529 -19.053444 0.000000
+v -22.275530 -18.653444 0.000000
+v -22.275530 -19.053444 0.000000
+v -18.925529 -18.653444 0.000000
+v -18.925529 -19.053444 0.000000
+v -18.525530 -18.653444 0.000000
+v -18.525530 -19.053444 0.000000
+v -11.475529 -18.653444 0.000000
+v -11.475529 -19.053444 0.000000
+v -11.075529 -18.653444 0.000000
+v -11.075529 -19.053444 0.000000
+v -3.975529 -18.653444 0.000000
+v -3.975529 -19.053444 0.000000
+v -3.575529 -18.653444 0.000000
+v -3.575529 -19.053444 0.000000
+v -0.175529 -18.653444 0.000000
+v -0.175529 -19.053444 0.000000
+v 0.224471 -18.653444 0.000000
+v 0.224471 -19.053444 0.000000
+v -30.172609 -12.343353 0.000001
+v -30.172609 -12.743353 0.000000
+v -29.772608 -12.343353 0.000001
+v -29.772608 -12.743353 0.000000
+v -22.672609 -12.343353 0.000001
+v -22.672609 -12.743353 0.000000
+v -22.272610 -12.343353 0.000001
+v -22.272610 -12.743353 0.000000
+v -18.870583 -12.729661 0.000000
+v -9.485923 -12.729661 0.000000
+v -18.870583 -2.060263 0.000001
+v -9.485923 -7.099552 0.000001
+v -15.331446 -2.060263 0.000001
+v -13.628716 -7.099552 0.000001
+v -15.331446 -2.110262 0.000001
+v -13.628716 -2.049547 0.000001
+v -14.531446 -2.110262 0.000001
+v -14.531446 -2.049547 0.000001
+v -3.972609 -12.343353 0.000001
+v -3.972609 -12.743353 0.000000
+v -3.572609 -12.343353 0.000001
+v -3.572609 -12.743353 0.000000
+v -0.172609 -12.343353 0.000001
+v -0.172609 -12.743353 0.000000
+v 0.227391 -12.343353 0.000001
+v 0.227391 -12.743353 0.000000
+v 7.327422 -21.454777 0.000000
+v 7.327422 -21.854776 0.000000
+v 7.727422 -21.454777 0.000000
+v 7.727422 -21.854776 0.000000
+v 7.324471 -18.653444 0.000000
+v 7.324471 -19.053444 0.000000
+v 7.724471 -18.653444 0.000000
+v 7.724471 -19.053444 0.000000
+v 22.318348 -18.653444 0.000000
+v 22.318348 -19.053444 0.000000
+v 22.718348 -18.653444 0.000000
+v 22.718348 -19.053444 0.000000
+v 29.818348 -18.653444 0.000000
+v 29.818348 -19.053444 0.000000
+v 30.218348 -18.653444 0.000000
+v 30.218348 -19.053444 0.000000
+v 37.318348 -18.653444 0.000000
+v 37.318348 -19.053444 0.000000
+v 37.718346 -18.653444 0.000000
+v 37.718346 -19.053444 0.000000
+v 7.327391 -12.343353 0.000001
+v 7.327391 -12.743353 0.000000
+v 7.727391 -12.343353 0.000001
+v 7.727391 -12.743353 0.000000
+v 14.827391 -12.343353 0.000001
+v 14.827391 -12.743353 0.000000
+v 15.227391 -12.343353 0.000001
+v 15.227391 -12.743353 0.000000
+v 22.327391 -12.343353 0.000001
+v 22.327391 -12.743353 0.000000
+v 22.727390 -12.343353 0.000001
+v 22.727390 -12.743353 0.000000
+v 40.377884 -14.167850 0.000000
+v 40.514694 -14.543727 0.000000
+v 40.753761 -14.031042 0.000000
+v 40.890572 -14.406919 0.000000
+v 24.087997 -4.097775 0.000001
+v 22.313528 -6.631981 0.000001
+v 27.941290 -5.288776 0.000001
+v 24.750605 -9.845544 0.000001
+v 28.803806 -5.860407 0.000001
+v 25.582762 -10.460536 0.000001
+v 28.776186 -5.902084 0.000001
+v 25.612478 -10.420326 0.000001
+v 29.443029 -6.344032 0.000001
+v 26.255848 -10.895800 0.000001
+v 29.470652 -6.302355 0.000001
+v 26.226131 -10.936009 0.000001
+v 31.986221 -7.969539 0.000001
+v 28.653147 -12.729661 0.000000
+v 32.898914 -10.477148 0.000001
+v 31.321690 -12.729661 0.000000
+v -30.196814 -6.199760 0.000001
+v -30.196814 -6.599760 0.000001
+v -29.796814 -6.199760 0.000001
+v -29.796814 -6.599760 0.000001
+v -22.696814 -6.199760 0.000001
+v -22.696814 -6.599760 0.000001
+v -22.296814 -6.199760 0.000001
+v -22.296814 -6.599760 0.000001
+v -30.181654 -2.080406 0.000001
+v -30.181654 -2.480406 0.000001
+v -29.781652 -2.080406 0.000001
+v -29.781652 -2.480406 0.000001
+v -22.681652 -2.080406 0.000001
+v -22.681652 -2.480406 0.000001
+v -22.281652 -2.080406 0.000001
+v -22.281652 -2.480406 0.000001
+v -11.496814 -6.199760 0.000001
+v -11.496814 -6.599760 0.000001
+v -11.096814 -6.199760 0.000001
+v -11.096814 -6.599760 0.000001
+v -3.996814 -6.199760 0.000001
+v -3.996814 -6.599760 0.000001
+v -3.596814 -6.199760 0.000001
+v -3.596814 -6.599760 0.000001
+v -0.196814 -6.199760 0.000001
+v -0.196814 -6.599760 0.000001
+v 0.203186 -6.199760 0.000001
+v 0.203186 -6.599760 0.000001
+v -11.481653 -2.080406 0.000001
+v -11.481653 -2.480406 0.000001
+v -11.081653 -2.080406 0.000001
+v -11.081653 -2.480406 0.000001
+v -3.981653 -2.080406 0.000001
+v -3.981653 -2.480406 0.000001
+v -3.581653 -2.080406 0.000001
+v -3.581653 -2.480406 0.000001
+v -0.181653 -2.080406 0.000001
+v -0.181653 -2.480406 0.000001
+v 0.218347 -2.080406 0.000001
+v 0.218347 -2.480406 0.000001
+v -30.175571 3.836163 0.000001
+v -29.775572 3.836163 0.000001
+v -30.175571 4.236162 0.000001
+v -29.775572 4.236162 0.000001
+v -22.675571 3.836163 0.000001
+v -22.275572 3.836163 0.000001
+v -22.675571 4.236162 0.000001
+v -22.275572 4.236162 0.000001
+v -18.925571 3.836163 0.000001
+v -18.525572 3.836163 0.000001
+v -18.925571 4.236162 0.000001
+v -18.525572 4.236162 0.000001
+v -11.475572 3.836163 0.000001
+v -11.075572 3.836163 0.000001
+v -11.475572 4.236162 0.000001
+v -11.075572 4.236162 0.000001
+v -3.975572 3.836163 0.000001
+v -3.575572 3.836163 0.000001
+v -3.975572 4.236162 0.000001
+v -3.575572 4.236162 0.000001
+v -0.175572 3.836163 0.000001
+v 0.224428 3.836163 0.000001
+v -0.175572 4.236162 0.000001
+v 0.224428 4.236162 0.000001
+v 7.303186 -6.199760 0.000001
+v 7.303186 -6.599760 0.000001
+v 7.703186 -6.199760 0.000001
+v 7.703186 -6.599760 0.000001
+v 14.803186 -6.199760 0.000001
+v 14.803186 -6.599760 0.000001
+v 15.203186 -6.199760 0.000001
+v 15.203186 -6.599760 0.000001
+v 7.318347 -2.080406 0.000001
+v 7.318347 -2.480406 0.000001
+v 7.718347 -2.080406 0.000001
+v 7.718347 -2.480406 0.000001
+v 14.818347 -2.080406 0.000001
+v 14.818347 -2.480406 0.000001
+v 15.218347 -2.080406 0.000001
+v 15.218347 -2.480406 0.000001
+v 22.318348 -2.080406 0.000001
+v 22.318348 -2.480406 0.000001
+v 22.718348 -2.080406 0.000001
+v 22.718348 -2.480406 0.000001
+v 37.812733 -7.120155 0.000001
+v 37.949543 -7.496031 0.000001
+v 38.188610 -6.983347 0.000001
+v 38.325420 -7.359224 0.000001
+v 29.327518 -2.227188 0.000001
+v 29.464327 -2.603065 0.000001
+v 29.703396 -2.090380 0.000001
+v 29.840204 -2.466257 0.000001
+v 20.842304 2.665781 0.000001
+v 20.979113 2.289904 0.000001
+v 21.218182 2.802588 0.000001
+v 21.354990 2.426712 0.000001
+v 7.324428 3.836163 0.000001
+v 7.724428 3.836163 0.000001
+v 7.324428 4.236162 0.000001
+v 7.724428 4.236162 0.000001
+v 14.824428 3.836163 0.000001
+v 15.224428 3.836163 0.000001
+v 14.824428 4.236162 0.000001
+v 15.224428 4.236162 0.000001
+v 26.762367 4.820507 0.000001
+v 26.899176 4.444630 0.000001
+v 27.138245 4.957315 0.000001
+v 27.275053 4.581438 0.000001
+v 32.682430 6.975235 0.000001
+v 32.819241 6.599358 0.000001
+v 33.058308 7.112041 0.000001
+v 33.195118 6.736166 0.000001
+v 12.872341 16.323317 0.000002
+v 12.872341 16.323317 0.000002
+v 12.872341 16.323317 0.000019
+v 12.872341 16.323317 0.000002
+v 13.600650 12.123316 0.000002
+v 13.600649 12.123316 0.000002
+v 13.612912 12.123316 0.002165
+v 13.612903 12.123312 0.002163
+v 13.612914 12.123316 0.002165
+v 21.967260 15.137735 1.568222
+v 12.872341 16.323317 0.000019
+v 21.126659 19.327642 1.548887
+v 13.612917 12.123316 0.000002
+v 13.612917 12.123316 0.000002
+v 13.612917 12.123316 0.000002
+v 13.612917 12.123316 0.000002
+v 13.612915 12.123316 0.000002
+v 13.612915 12.123316 0.000002
+v -1.356090 16.323317 0.000002
+v 12.872079 16.323317 0.000002
+v 12.872313 16.323317 0.000002
+v -36.659981 -23.844000 0.000000
+v 40.000263 -21.118254 0.000000
+v 45.559578 -15.009406 0.000000
+v 17.252346 9.019926 0.000001
+v 16.062939 9.019926 0.000001
+v 9.269960 9.019926 0.000001
+v 13.586552 12.123316 0.000002
+v -29.964800 -19.053444 0.000000
+v -29.775530 -18.918018 0.000000
+v -18.870583 -11.115277 0.000001
+v -13.258287 -7.099552 0.000001
+v 27.260542 -5.078367 0.000001
+v 32.266216 -11.380736 0.000001
+v 21.049763 2.741289 0.000001
+v 21.312033 2.411077 0.000001
+v -13.500953 -7.273184 0.000001
+v -5.856277 17.588205 0.000002
+v 21.267042 2.467722 0.000001
+v 30.847980 -9.595114 0.000001
+v 31.948866 -10.981178 0.000001
+v 45.722786 -15.147949 0.000000
+v 40.608887 -21.884537 0.000000
+v -0.078829 18.974249 0.000002
+v 27.509512 -5.391830 0.000001
+v 27.700636 -5.632465 0.000001
+v 27.754526 -5.700314 0.000001
+v 28.372587 -6.478481 0.000001
+v 28.441492 -6.565235 0.000001
+v 28.891457 -7.131760 0.000001
+v 30.257868 -8.852136 0.000001
+v -14.367959 -7.893547 0.000001
+vn -1.0000 -0.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 -0.0000 1.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.9397 0.3420 0.0000
+vn 0.7212 -0.6927 0.0000
+vn -0.3369 0.9415 0.0000
+vn -0.2906 -0.7064 0.6454
+vn -0.9853 -0.1710 0.0005
+vn -0.2383 0.6658 0.7071
+vn 0.1190 -0.6972 0.7069
+vn 0.0982 -0.6595 0.7453
+vn -0.1736 -0.0302 0.9843
+vn -0.1647 -0.0286 0.9859
+vn -0.4999 -0.0869 0.8617
+vn -0.1308 -0.1469 0.9805
+vn 0.1178 -0.7023 0.7021
+vn -0.0050 -0.7555 0.6551
+vn 0.0254 -0.7494 0.6616
+vn -0.3514 0.5913 0.7259
+vn -0.3591 0.6333 0.6856
+vn -0.3591 0.6332 0.6856
+vn -0.3420 0.9397 0.0000
+vn 0.0000 0.0000 0.0000
+vn -0.9852 -0.1713 0.0000
+vn 0.3395 -0.9406 0.0000
+vn 0.3394 -0.9406 0.0000
+s 1
+f 1823//78 1821//78 1822//78
+f 1821//78 1823//78 1824//78
+f 1826//79 1822//79 1825//79
+f 1822//79 1826//79 1823//79
+f 1821//80 1824//80 1827//80
+f 1828//80 1827//80 1824//80
+f 2089//81 2090//81 1885//81 1884//81 1883//81 1881//81 1882//81 1886//81 1887//81 2170//81 2161//81 1880//81 1871//81 2085//81 2086//81
+f 2060//81 2059//81 1968//81 1966//81 2174//81
+f 1852//81 1849//81 1851//81 1850//81 1954//81 1953//81 2032//81 2031//81 1854//81 1855//81
+f 2091//81 2093//81 2090//81 2088//81
+f 2079//81 2081//81 2078//81 2076//81 2075//81 2043//81 2045//81 2046//81 2037//81 2038//81 1959//81 1960//81 2173//81 1963//81
+f 2033//81 2042//81 2040//81 2031//81
+f 2071//81 2039//81 2041//81 2072//81
+f 1860//81 1856//81 1857//81 1853//81 1854//81 2031//81 2040//81 2039//81 2071//81 2073//81 2074//81 2072//81 2041//81 2042//81 2033//81 2034//81 2032//81 1953//81 1955//81 1956//81 1954//81 1850//81 1846//81 1847//81 1843//81 1837//81 1841//81 1839//81 1835//81 1830//81 1833//81 1832//81 2164//81 2171//81 1930//81 1929//81 1931//81 2172//81 2173//81 1960//81 1958//81 1957//81 1959//81 2038//81 2036//81 2035//81 2037//81 2046//81 2044//81 2043//81 2075//81 2077//81 2078//81 2081//81 2082//81 2080//81 2079//81 1963//81 1965//81 1967//81 1969//81 1970//81 1968//81 2059//81 2061//81 2062//81 2060//81 2174//81 2169//81 1885//81 2090//81 2093//81 2094//81 2092//81 2091//81 2088//81 2087//81 2089//81 2086//81 2084//81 2083//81 2085//81 1871//81 1872//81 1870//81 1867//81 1868//81 1866//81 1869//81 1863//81 1864//81 1862//81 1858//81 1859//81 1861//81
+f 1999//81 2001//81 2098//81 2096//81
+f 2112//81 2016//81 2015//81 2114//81
+f 1984//81 1979//81 1981//81 1986//81
+f 2003//81 2005//81 2102//81 2100//81
+f 2000//81 1983//81 1985//81 2002//81
+f 2026//81 2024//81 2022//81 2020//81 2018//81 2009//81 2010//81 1989//81 1990//81 1988//81 1987//81 1879//81 1874//81 1888//81 1996//81 1995//81 1997//81 1998//81 2165//81 2176//81 2030//81 1993//81 1994//81 1992//81 1991//81 2028//81
+f 1991//81 1993//81 2030//81 2028//81
+f 1998//81 1996//81 1888//81 2165//81
+f 2131//81 2107//81 2109//81 2132//81
+f 2101//81 2110//81 2108//81 2099//81
+f 2129//81 2130//81 2133//81 2134//81 2168//81 2169//81
+f 2097//81 2106//81 2104//81 2095//81
+f 1976//81 1975//81 1973//81 1974//81 1972//81 1945//81 1947//81 1949//81 1951//81 1978//81
+f 1934//81 1925//81 1927//81 1936//81
+f 1938//81 1937//81 1935//81 1936//81
+f 1961//81 1937//81 1939//81 1941//81 1943//81 1962//81
+f 2068//81 2067//81 2065//81 2066//81 2053//81 2054//81 2056//81 2055//81 2057//81 2070//81
+f 2052//81 2051//81 1964//81 1962//81 1972//81 1971//81
+f 2049//81 2050//81 1964//81 2051//81 2053//81 2066//81 2064//81 2063//81 2065//81 2067//81 2069//81 2070//81 2057//81 2058//81 2056//81 2054//81 2052//81 1971//81 1973//81 1975//81 1977//81 1978//81 1951//81 1952//81 1950//81 1949//81 1947//81 1948//81 1946//81 1945//81 1972//81 1962//81 1943//81 1944//81 1942//81 1941//81 1939//81 1940//81 1938//81 1936//81 1927//81 1928//81 1926//81 1925//81 1934//81 1933//81 1935//81 1937//81 1961//81 2173//81 2172//81 1932//81 2171//81 2164//81 1865//81 1875//81 1876//81 1873//81 1877//81 1878//81 1879//81 1987//81 1989//81 2010//81 2008//81 2007//81 2009//81 2018//81 2016//81 2112//81 2111//81 2113//81 2114//81 2015//81 2175//81 2178//81 2124//81 2123//81 2177//81 2168//81 2134//81 2132//81 2109//81 2110//81 2101//81 2102//81 2005//81 2006//81 2004//81 2003//81 2100//81 2099//81 2108//81 2107//81 2131//81 2133//81 2130//81 2128//81 2105//81 2106//81 2097//81 2098//81 2001//81 2002//81 1985//81 1986//81 1981//81 1982//81 1980//81 1979//81 1984//81 1983//81 2000//81 1999//81 2096//81 2095//81 2104//81 2103//81 2127//81 2129//81 2169//81 2174//81 2048//81 2047//81
+f 2048//81 2174//81 1964//81 2050//81
+f 2127//81 2103//81 2105//81 2128//81
+f 2170//81 2148//81 1831//81 2162//81 2161//81
+f 2012//81 1889//81 1890//81 1891//81 1892//81 1895//81 1894//81 1893//81 1898//81 1896//81 1897//81 1899//81 1905//81 2014//81
+f 2019//81 2021//81 2023//81 2025//81 2027//81 2029//81 2176//81 2165//81 1889//81 2012//81 2011//81 2013//81 2014//81 1905//81 2166//81 2167//81 2168//81 2177//81 2125//81 2126//81 2178//81 2175//81 2119//81 2121//81 2122//81 2120//81 2017//81
+f 2175//81 2017//81 2120//81 2119//81
+f 1920//81 1917//81 1915//81 1916//81 1914//81 1912//81 1913//81 1903//81 1902//81 2167//81 2166//81 1904//81 1918//81 2117//81 2118//81 2116//81 2115//81 1908//81 1906//81 1907//81 1911//81 1909//81 1910//81 2140//81 2138//81 2136//81 2135//81 2137//81 2139//81 2141//81 2142//81 1919//81 1921//81 1922//81
+f 1910//81 1919//81 2142//81 2140//81
+f 1908//81 2115//81 2117//81 1918//81
+f 2137//81 2138//81 2140//81 2139//81
+f 2163//81 1831//81 2143//81
+f 2162//81 1831//81 2163//81
+f 1823//82 1826//82 1824//82
+f 1824//82 1826//82 1828//82
+f 1828//82 1826//82 1840//82
+f 1826//83 1825//83 1842//83
+f 1838//83 1842//83 1825//83
+f 1842//83 1844//83 1826//83
+f 1844//83 1840//83 1826//83
+f 1844//83 1836//83 1834//83
+f 1834//83 1840//83 1844//83
+f 1827//84 1828//84 1834//84
+f 1840//84 1834//84 1828//84
+f 1831//85 2145//86 2144//87 2143//88
+f 2152//89 1848//90 1831//91 2148//92 2147//93 1829//94 2150//95 2149//96 2151//97
+f 2145//86 1831//91 1848//90 1845//98 2154//99 2153//100
+f 1836//83 1838//83 1845//83
+f 1848//83 1836//83 1845//83
+f 1844//83 1842//83 1838//83
+f 1836//83 1844//83 1838//83
+f 1830//81 1821//81 1832//81
+f 1832//81 1833//81 1830//81
+f 1830//81 1835//81 1821//81
+f 1835//81 1837//81 1821//81
+f 1837//81 1835//81 1839//81
+f 1839//81 1841//81 1837//81
+f 1821//81 1837//81 1843//81
+f 1821//81 1843//81 1846//81
+f 1847//81 1846//81 1843//81
+f 1850//81 1849//81 1846//81
+f 1849//81 1850//81 1851//81
+f 1849//81 1852//81 1846//81
+f 1846//81 1853//81 1821//81
+f 1853//81 1846//81 1852//81
+f 1852//81 1854//81 1853//81
+f 1855//81 1854//81 1852//81
+f 1853//81 1857//81 1856//81
+f 1858//81 1860//81 1859//81
+f 1861//81 1859//81 1860//81
+f 1862//81 1864//81 1863//81
+f 1832//81 1821//81 2164//81
+f 2164//81 1821//81 1865//81
+f 1868//81 1867//81 1866//81
+f 1869//81 1866//81 1867//81
+f 1867//81 1870//81 1869//81
+f 1869//81 1870//81 1871//81
+f 1870//81 1872//81 1871//81
+f 1873//81 1865//81 1874//81
+f 1875//81 1865//81 1873//81
+f 1873//81 1876//81 1875//81
+f 1877//81 1873//81 1874//81
+f 1878//81 1877//81 1879//81
+f 1874//81 1879//81 1877//81
+f 1822//81 1863//81 1880//81
+f 1871//81 1880//81 1869//81
+f 1869//81 1880//81 1863//81
+f 1882//81 1881//81 1883//81
+f 1883//81 1884//81 1882//81
+f 1884//81 1885//81 1882//81
+f 1886//81 1882//81 1885//81
+f 1887//81 1886//81 1885//81
+f 1827//81 1888//81 1874//81
+f 1874//81 1865//81 1827//81
+f 2165//81 1888//81 2185//81
+f 1890//81 1889//81 2165//81 2185//81
+f 1827//81 1890//81 2185//81
+f 1827//81 2185//81 1888//81
+f 1892//81 1891//81 1890//81
+f 1892//81 1890//81 1893//81
+f 1893//81 1894//81 1895//81
+f 1895//81 1892//81 1893//81
+f 1896//81 1898//81 1897//81
+f 1898//81 1893//81 1897//81
+f 1827//81 1899//81 1890//81
+f 1890//81 1899//81 1893//81
+f 1899//81 1897//81 1893//81
+f 1887//81 1885//81 1829//81
+f 2148//81 2170//81 1829//81
+f 1829//81 1900//81 2148//81
+f 1829//81 2170//81 1887//81
+f 2160//81 1901//81 1829//81
+f 2160//81 1829//81 1902//81
+f 1901//81 2160//81 2159//81
+f 2159//81 2160//81 1902//81 1903//81
+f 1899//81 1827//81 1834//81
+f 1834//81 1904//81 2184//81
+f 1899//81 1834//81 2184//81
+f 1904//81 2166//81 2184//81
+f 1899//81 2184//81 2166//81 1905//81
+f 1907//81 1906//81 1908//81
+f 1910//81 1909//81 1911//81
+f 1913//81 1912//81 1903//81
+f 1914//81 1916//81 1915//81
+f 1915//81 1917//81 1914//81
+f 1911//81 1907//81 1918//81
+f 1904//81 1834//81 1918//81
+f 1907//81 1908//81 1918//81
+f 1910//81 1911//81 1919//81
+f 1919//81 1911//81 1918//81
+f 1920//81 1922//81 1921//81
+f 1919//81 1836//81 1921//81
+f 1918//81 1834//81 1836//81
+f 1921//81 1836//81 1920//81
+f 1836//81 1919//81 1918//81
+f 1880//81 2161//81 2180//81
+f 2143//81 1923//81 2146//81
+f 2143//81 2146//81 1825//81 2163//81
+f 2162//81 2163//81 1825//81 2186//81
+f 2180//81 2161//81 2162//81 2186//81
+f 2146//81 1923//81 1838//81
+f 1838//81 1825//81 2146//81
+f 1822//81 1880//81 2180//81
+f 1822//81 2180//81 2186//81
+f 1825//81 1822//81 2186//81
+f 1822//81 1821//81 1856//81
+f 1856//81 1821//81 1853//81
+f 1856//81 1860//81 1822//81
+f 1860//81 1858//81 1822//81
+f 1858//81 1862//81 1822//81
+f 1822//81 1862//81 1863//81
+f 1827//81 1865//81 1821//81
+f 1901//81 2155//81 1836//81
+f 1920//81 1836//81 2155//81
+f 2156//81 2155//81 1901//81
+f 2155//81 2156//81 1917//81 1920//81
+f 2157//81 2156//81 1901//81
+f 2156//81 2157//81 1914//81 1917//81
+f 2158//81 2157//81 1901//81
+f 2157//81 2158//81 1912//81 1914//81
+f 1901//81 2159//81 2158//81
+f 2158//81 2159//81 1903//81 1912//81
+f 2169//81 2168//81 1829//81
+f 2168//81 2167//81 1829//81
+f 2167//81 1902//81 1829//81
+f 1885//81 2169//81 1829//81
+f 1838//101 1923//101 2153//100 2154//99
+f 1838//101 2154//99 1845//98
+f 1923//102 2144//87 2145//86 2153//100
+f 1923//102 2143//88 2144//87
+f 1900//102 2147//93 2148//92
+f 1829//94 2147//93 1900//103
+f 1924//104 2150//95 1829//94
+f 1924//104 2149//96 2150//95
+f 2149//96 1924//80 1901//80 2151//97
+f 1836//105 1848//90 2152//89
+f 2151//97 1901//105 1836//105 2152//89
+f 1925//81 1926//81 1927//81
+f 1928//81 1927//81 1926//81
+f 1929//81 1930//81 1931//81
+f 2172//81 1931//81 1930//81 2171//81
+f 1932//81 2172//81 2171//81
+f 1933//81 1934//81 1935//81
+f 1936//81 1935//81 1934//81
+f 1937//81 1938//81 1939//81
+f 1940//81 1939//81 1938//81
+f 1941//81 1942//81 1943//81
+f 1944//81 1943//81 1942//81
+f 1945//81 1946//81 1947//81
+f 1948//81 1947//81 1946//81
+f 1949//81 1950//81 1951//81
+f 1952//81 1951//81 1950//81
+f 1953//81 1954//81 1955//81
+f 1956//81 1955//81 1954//81
+f 1957//81 1958//81 1959//81
+f 1960//81 1959//81 1958//81
+f 2173//81 1961//81 2194//81
+f 1966//81 1963//81 2173//81 2194//81
+f 1961//81 1962//81 2179//81 2194//81
+f 1966//81 2194//81 2179//81
+f 1966//81 1967//81 1963//81
+f 1967//81 1965//81 1963//81
+f 1969//81 1967//81 1966//81
+f 1962//81 1964//81 2174//81 2179//81
+f 2174//81 1966//81 2179//81
+f 1968//81 1970//81 1969//81
+f 1966//81 1968//81 1969//81
+f 1971//81 1972//81 1973//81
+f 1974//81 1973//81 1972//81
+f 1975//81 1976//81 1977//81
+f 1978//81 1977//81 1976//81
+f 1979//81 1980//81 1981//81
+f 1980//81 1982//81 1981//81
+f 1983//81 1984//81 1985//81
+f 1986//81 1985//81 1984//81
+f 1987//81 1988//81 1989//81
+f 1990//81 1989//81 1988//81
+f 1993//81 1991//81 1992//81
+f 1994//81 1993//81 1992//81
+f 1997//81 1995//81 1996//81
+f 1998//81 1997//81 1996//81
+f 1999//81 2000//81 2001//81
+f 2002//81 2001//81 2000//81
+f 2003//81 2004//81 2005//81
+f 2006//81 2005//81 2004//81
+f 2007//81 2008//81 2009//81
+f 2010//81 2009//81 2008//81
+f 2011//81 2012//81 2013//81
+f 2014//81 2013//81 2012//81
+f 2018//81 2020//81 2022//81
+f 2024//81 2026//81 2028//81
+f 2176//81 2029//81 2183//81
+f 2028//81 2030//81 2176//81 2183//81
+f 2175//81 2015//81 2016//81 2187//81
+f 2017//81 2175//81 2187//81
+f 2016//81 2018//81 2188//81 2187//81
+f 2017//81 2187//81 2188//81
+f 2018//81 2022//81 2189//81 2188//81
+f 2017//81 2188//81 2189//81
+f 2191//81 2021//81 2190//81
+f 2191//81 2190//81 2022//81 2024//81
+f 2189//81 2022//81 2190//81
+f 2021//81 2017//81 2189//81 2190//81
+f 2021//81 2019//81 2017//81
+f 2191//81 2024//81 2192//81
+f 2191//81 2192//81 2023//81 2021//81
+f 2025//81 2023//81 2027//81
+f 2182//81 2027//81 2193//81
+f 2024//81 2028//81 2182//81 2193//81
+f 2029//81 2027//81 2182//81 2183//81
+f 2183//81 2182//81 2028//81
+f 2192//81 2024//81 2193//81
+f 2192//81 2193//81 2027//81 2023//81
+f 2031//81 2032//81 2033//81
+f 2034//81 2033//81 2032//81
+f 2035//81 2036//81 2037//81
+f 2038//81 2037//81 2036//81
+f 2039//81 2040//81 2041//81
+f 2042//81 2041//81 2040//81
+f 2043//81 2044//81 2045//81
+f 2046//81 2045//81 2044//81
+f 2047//81 2048//81 2049//81
+f 2050//81 2049//81 2048//81
+f 2051//81 2052//81 2053//81
+f 2054//81 2053//81 2052//81
+f 2055//81 2056//81 2057//81
+f 2056//81 2058//81 2057//81
+f 2059//81 2060//81 2061//81
+f 2062//81 2061//81 2060//81
+f 2063//81 2064//81 2065//81
+f 2066//81 2065//81 2064//81
+f 2067//81 2068//81 2069//81
+f 2070//81 2069//81 2068//81
+f 2073//81 2071//81 2074//81
+f 2072//81 2074//81 2071//81
+f 2077//81 2075//81 2078//81
+f 2076//81 2078//81 2075//81
+f 2081//81 2079//81 2082//81
+f 2080//81 2082//81 2079//81
+f 2085//81 2083//81 2084//81
+f 2084//81 2086//81 2085//81
+f 2089//81 2087//81 2090//81
+f 2088//81 2090//81 2087//81
+f 2093//81 2091//81 2094//81
+f 2092//81 2094//81 2091//81
+f 2095//81 2096//81 2097//81
+f 2098//81 2097//81 2096//81
+f 2099//81 2100//81 2101//81
+f 2102//81 2101//81 2100//81
+f 2103//81 2104//81 2105//81
+f 2106//81 2105//81 2104//81
+f 2107//81 2108//81 2109//81
+f 2110//81 2109//81 2108//81
+f 2111//81 2112//81 2113//81
+f 2114//81 2113//81 2112//81
+f 2115//81 2116//81 2117//81
+f 2117//81 2116//81 2118//81
+f 2119//81 2120//81 2122//81
+f 2121//81 2119//81 2122//81
+f 2178//81 2126//81 2181//81
+f 2123//81 2124//81 2178//81 2181//81
+f 2177//81 2123//81 2181//81
+f 2126//81 2125//81 2177//81 2181//81
+f 2129//81 2127//81 2130//81
+f 2128//81 2130//81 2127//81
+f 2133//81 2131//81 2134//81
+f 2132//81 2134//81 2131//81
+f 2135//81 2136//81 2138//81
+f 2137//81 2135//81 2138//81
+f 2139//81 2140//81 2142//81
+f 2141//81 2139//81 2142//81
+o Base
+v -39.484219 27.040174 0.000002
+v -39.484219 -25.864807 -0.000000
+v -39.484219 27.040174 7.500002
+v -39.484219 -25.864807 7.500000
+v 33.542374 27.040174 0.000002
+v 33.542374 27.040174 7.500002
+v 43.770226 -25.864807 -0.000000
+v 43.770226 -25.864807 7.500000
+v -37.380447 -16.977444 0.000000
+v -37.330448 -23.844000 0.000000
+v -37.330448 -16.977444 0.000000
+v -37.380447 -16.177444 0.000000
+v -37.380447 -15.246632 0.000000
+v -37.330448 -16.177444 0.000000
+v -37.330448 -15.246632 0.000000
+v -37.380447 -14.446631 0.000000
+v -37.330448 -12.729661 0.000000
+v -37.330448 -14.446631 0.000000
+v -35.085789 -12.279661 0.000001
+v -35.035789 -12.729661 0.000000
+v -35.035789 -12.279661 0.000001
+v -35.085789 -11.479661 0.000001
+v -37.330448 -7.076204 0.000001
+v -35.035789 -7.076204 0.000001
+v -35.035789 -11.479661 0.000001
+v -37.380447 -0.450436 0.000001
+v -37.330448 -0.450436 0.000001
+v -37.380447 1.426359 0.000001
+v -37.330448 1.426359 0.000001
+v -37.380447 0.349564 0.000001
+v -37.330448 0.349564 0.000001
+v -37.380447 2.226360 0.000001
+v -37.330448 8.887293 0.000001
+v -37.330448 2.226360 0.000001
+v 14.948427 -23.844000 0.000000
+v -13.628716 7.941137 0.000001
+v -13.289828 7.991137 0.000001
+v -13.289828 7.941137 0.000001
+v -13.628716 8.887293 0.000001
+v -12.489828 7.991137 0.000001
+v -11.128716 7.941137 0.000001
+v -12.489828 7.941137 0.000001
+v 16.198427 -18.761621 0.000000
+v 17.448427 -23.844000 0.000000
+v 14.948427 -18.711620 0.000000
+v 16.198427 -18.711620 0.000000
+v 16.998426 -18.761621 0.000000
+v 16.998426 -18.711620 0.000000
+v 17.448427 -18.711620 0.000000
+v -11.128716 16.323317 0.000002
+v -3.688910 11.009729 0.000002
+v -3.217584 11.523291 0.000002
+v -4.016689 10.394541 0.000001
+v -4.180056 9.716894 0.000001
+v -4.168609 9.019926 0.000001
+v -2.632718 11.902533 0.000002
+v -1.971545 12.123316 0.000002
+v 40.000263 -23.844000 0.000000
+v 40.000263 -18.711620 0.000000
+v 41.594418 -18.711620 0.000000
+v 41.552635 -18.611385 0.000000
+v 41.537792 -18.503811 0.000000
+v 41.655529 -18.207760 0.000000
+v 41.590996 -18.295099 0.000000
+v 41.550865 -18.396008 0.000000
+v 41.839405 -18.095594 0.000000
+v 41.946594 -18.078186 0.000000
+v 41.740196 -18.139759 0.000000
+v 42.054680 -18.088682 0.000000
+v 13.601372 12.119150 0.000002
+v 13.600650 12.123316 0.000002
+v 13.612914 12.123316 0.000002
+v 19.656212 9.019926 0.000001
+v 19.656212 9.893988 0.000001
+v 50.317074 -19.047932 0.000000
+v 46.174992 -14.785413 0.000000
+v 41.475014 -16.496065 0.000000
+v 35.322247 0.201824 0.000001
+v 35.369232 0.218925 0.000001
+v 35.476158 -0.221037 0.000001
+v 35.048634 0.953579 0.000001
+v 34.621105 2.128193 0.000001
+v 35.095615 0.970678 0.000001
+v 26.182775 12.322668 0.000002
+v 26.199875 12.275686 0.000002
+v 26.934528 12.596285 0.000002
+v 27.800396 12.858225 0.000002
+v 26.951630 12.549299 0.000002
+v 27.783295 12.905210 0.000002
+v 40.242565 1.513794 0.000001
+v 39.387516 3.863026 0.000001
+v 28.535048 13.178827 0.000002
+v 35.141079 15.530016 0.000002
+v 28.552149 13.131842 0.000002
+v 36.027946 20.211119 0.000002
+v 12.872341 16.323317 0.000002
+v 34.568771 24.220171 0.000002
+v 50.317074 -19.047932 7.500000
+v 34.568771 24.220171 6.571209
+v 36.027946 20.211119 6.701789
+v 12.872341 16.323317 2.500002
+v 12.872247 16.323282 2.500002
+v -11.128716 16.323317 2.500002
+v -11.128716 7.941137 2.500001
+v -12.489828 7.941137 2.500001
+v -12.489828 7.991137 2.500001
+v -13.289828 7.991137 2.500001
+v -13.289828 7.941137 2.500001
+v -13.628716 7.941137 2.500001
+v -13.628716 8.887293 2.500001
+v -37.330448 8.887293 2.500001
+v -37.330448 2.226360 2.500001
+v -37.380447 2.226360 2.500001
+v -37.380447 1.426359 2.500001
+v -37.330448 1.426359 2.500001
+v -37.330448 0.349564 2.500001
+v -37.380447 0.349564 2.500001
+v -37.380447 -0.450436 2.500001
+v -37.330448 -0.450436 2.500001
+v -37.330448 -7.076204 2.500001
+v -35.035789 -7.076204 2.500001
+v -35.035789 -11.479661 2.500000
+v -35.085789 -11.479661 2.500000
+v -35.085789 -12.279661 2.500000
+v -35.035789 -12.279661 2.500000
+v -35.035789 -12.729661 2.500000
+v -37.330448 -12.729661 2.500000
+v -37.330448 -14.446631 2.500000
+v -37.380447 -14.446631 2.500000
+v -37.380447 -15.246632 2.500000
+v -37.330448 -15.246632 2.500000
+v -37.330448 -16.177444 2.500000
+v -37.380447 -16.177444 2.500000
+v -37.380447 -16.977444 2.500000
+v -37.330448 -16.977444 2.500000
+v -37.330448 -23.844000 2.500000
+v 14.948427 -23.844000 2.500000
+v 14.948427 -18.711620 2.500000
+v 16.198427 -18.711620 2.500000
+v 16.198427 -18.761621 2.500000
+v 16.998426 -18.761621 2.500000
+v 16.998426 -18.711620 2.500000
+v 17.448427 -18.711620 2.500000
+v 17.448427 -23.844000 2.500000
+v 40.000263 -23.844000 2.500000
+v 40.000263 -18.711620 2.500000
+v 41.594418 -18.711620 2.500000
+v 42.054680 -18.088682 2.500000
+v 41.946594 -18.078186 2.500000
+v 41.839405 -18.095594 2.500000
+v 41.740196 -18.139759 2.500000
+v 41.655529 -18.207760 2.500000
+v 41.590996 -18.295099 2.500000
+v 41.550865 -18.396008 2.500000
+v 41.537792 -18.503811 2.500000
+v 41.552635 -18.611385 2.500000
+v 41.475014 -16.496065 2.500000
+v 46.174992 -14.785413 2.500000
+v 40.242565 1.513794 2.500001
+v 35.476158 -0.221037 2.500001
+v 35.322247 0.201824 2.500001
+v 35.369232 0.218925 2.500001
+v 35.095615 0.970678 2.500001
+v 35.048634 0.953579 2.500001
+v 34.621105 2.128193 2.500001
+v 39.387516 3.863026 2.500001
+v 35.141079 15.530016 2.500002
+v 28.552149 13.131842 2.500002
+v 28.535048 13.178827 2.500002
+v 27.783295 12.905210 2.500002
+v 27.800396 12.858225 2.500002
+v 26.951630 12.549299 2.500002
+v 26.934528 12.596285 2.500002
+v 26.182775 12.322668 2.500002
+v 26.199875 12.275686 2.500002
+v 19.656212 9.893988 2.500001
+v 19.656212 9.019926 2.500001
+v -4.168609 9.019926 2.500001
+v -1.971545 12.123316 2.500002
+v -2.632718 11.902533 2.500002
+v -3.217584 11.523291 2.500001
+v -3.688910 11.009729 2.500001
+v -4.016689 10.394541 2.500001
+v -4.180056 9.716894 2.500001
+v 13.600650 12.123316 2.497840
+v 13.612914 12.123316 2.500002
+v 13.601372 12.119150 2.497838
+v 13.612912 12.123316 0.000002
+v 13.612914 12.123316 0.000002
+v 13.597350 12.211588 2.500002
+v 13.597360 12.211531 2.500002
+v -30.175529 -19.053444 2.500000
+v -29.775530 -19.053444 2.500000
+v -30.175529 -18.653444 2.500000
+v -22.672579 -21.854776 2.500000
+v -22.272577 -21.854776 2.500000
+v -22.672579 -21.454777 2.500000
+v -30.172609 -12.743353 2.500000
+v -29.775530 -18.653444 2.500000
+v -29.772608 -12.743353 2.500000
+v -30.172609 -12.343353 2.500000
+v -22.675529 -19.053444 2.500000
+v -22.675529 -18.653444 2.500000
+v -22.275530 -19.053444 2.500000
+v -22.272577 -21.454777 2.500000
+v -22.275530 -18.653444 2.500000
+v -18.925529 -19.053444 2.500000
+v -18.925529 -18.653444 2.500000
+v -18.525530 -19.053444 2.500000
+v -30.196814 -6.599760 2.500001
+v -29.796814 -6.599760 2.500001
+v -29.772608 -12.343353 2.500000
+v -30.196814 -6.199760 2.500001
+v -22.672609 -12.743353 2.500000
+v -22.272610 -12.743353 2.500000
+v -22.672609 -12.343353 2.500000
+v -30.181654 -2.480406 2.500001
+v -29.796814 -6.199760 2.500001
+v -30.181654 -2.080406 2.500001
+v -29.781652 -2.480406 2.500001
+v -18.870583 -12.729661 2.500000
+v -18.525530 -18.653444 2.500000
+v -22.272610 -12.343353 2.500000
+v -11.475529 -19.053444 2.500000
+v -11.075529 -19.053444 2.500000
+v -11.475529 -18.653444 2.500000
+v -22.696814 -6.599760 2.500001
+v -22.696814 -6.199760 2.500001
+v -22.296814 -6.599760 2.500001
+v -30.175571 3.836163 2.500001
+v -29.781652 -2.080406 2.500001
+v -30.175571 4.236162 2.500001
+v -29.775572 3.836163 2.500001
+v -29.775572 4.236162 2.500001
+v -22.681652 -2.480406 2.500001
+v -22.296814 -6.199760 2.500001
+v -22.281652 -2.480406 2.500001
+v -22.681652 -2.080406 2.500001
+v -3.975529 -19.053444 2.500000
+v -11.075529 -18.653444 2.500000
+v -3.975529 -18.653444 2.500000
+v -9.485923 -12.729661 2.500000
+v -22.281652 -2.080406 2.500001
+v -18.870583 -2.060263 2.500001
+v -22.675571 3.836163 2.500001
+v -3.575529 -18.653444 2.500000
+v -0.175529 -18.653444 2.500000
+v -3.575529 -19.053444 2.500000
+v -0.175529 -19.053444 2.500000
+v -22.675571 4.236162 2.500001
+v -22.275572 3.836163 2.500001
+v -13.628716 -7.099552 2.500001
+v -11.496814 -6.199760 2.500001
+v -11.496814 -6.599760 2.500001
+v -3.972609 -12.743353 2.500000
+v -15.331446 -2.060263 2.500001
+v -14.531446 -2.110262 2.500001
+v -15.331446 -2.110262 2.500001
+v -11.096814 -6.199760 2.500001
+v -9.485923 -7.099552 2.500001
+v -11.096814 -6.599760 2.500001
+v -14.531446 -2.049547 2.500001
+v -3.572609 -12.743353 2.500000
+v -3.972609 -12.343353 2.500000
+v -13.628716 -2.049547 2.500001
+v -18.925571 3.836163 2.500001
+v -18.925571 4.236162 2.500001
+v -22.275572 4.236162 2.500001
+v -18.525572 3.836163 2.500001
+v 7.327422 -21.854776 2.500000
+v 0.224471 -19.053444 2.500000
+v 7.327422 -21.454777 2.500000
+v -11.481653 -2.480406 2.500001
+v -11.081653 -2.480406 2.500001
+v -11.481653 -2.080406 2.500001
+v -0.172609 -12.743353 2.500000
+v 0.224471 -18.653444 2.500000
+v 0.227391 -12.743353 2.500000
+v -3.572609 -12.343353 2.500000
+v -0.172609 -12.343353 2.500000
+v 7.324471 -19.053444 2.500000
+v 7.324471 -18.653444 2.500000
+v 7.724471 -19.053444 2.500000
+v 7.727422 -21.454777 2.500000
+v -3.996814 -6.599760 2.500001
+v -3.596814 -6.599760 2.500001
+v -3.996814 -6.199760 2.500001
+v 7.727422 -21.854776 2.500000
+v -11.475572 3.836163 2.500001
+v -11.081653 -2.080406 2.500001
+v -18.525572 4.236162 2.500001
+v -11.475572 4.236162 2.500001
+v -11.075572 3.836163 2.500001
+v -0.196814 -6.599760 2.500001
+v -3.981653 -2.480406 2.500001
+v -3.596814 -6.199760 2.500001
+v -0.196814 -6.199760 2.500001
+v 0.203186 -6.599760 2.500001
+v 0.227391 -12.343353 2.500000
+v -3.581653 -2.480406 2.500001
+v -3.981653 -2.080406 2.500001
+v 7.327391 -12.743353 2.500000
+v 7.724471 -18.653444 2.500000
+v 7.327391 -12.343353 2.500000
+v 7.727391 -12.743353 2.500000
+v -11.075572 4.236162 2.500001
+v -0.181653 -2.480406 2.500001
+v 0.203186 -6.199760 2.500001
+v -0.181653 -2.080406 2.500001
+v -3.581653 -2.080406 2.500001
+v 0.218347 -2.480406 2.500001
+v -3.975572 3.836163 2.500001
+v -3.975572 4.236162 2.500001
+v -3.575572 3.836163 2.500001
+v 7.303186 -6.599760 2.500001
+v 7.303186 -6.199760 2.500001
+v 7.703186 -6.599760 2.500001
+v 7.727391 -12.343353 2.500000
+v 14.827391 -12.743353 2.500000
+v 15.227391 -12.743353 2.500000
+v 14.827391 -12.343353 2.500000
+v 22.318348 -19.053444 2.500000
+v -0.175572 3.836163 2.500001
+v 0.218347 -2.080406 2.500001
+v 22.318348 -18.653444 2.500000
+v 22.718348 -19.053444 2.500000
+v 0.224428 3.836163 2.500001
+v -0.175572 4.236162 2.500001
+v -3.575572 4.236162 2.500001
+v 7.318347 -2.480406 2.500001
+v 7.703186 -6.199760 2.500001
+v 7.318347 -2.080406 2.500001
+v 7.718347 -2.480406 2.500001
+v 14.803186 -6.599760 2.500001
+v 14.803186 -6.199760 2.500001
+v 15.203186 -6.599760 2.500001
+v 15.227391 -12.343353 2.500000
+v 22.327391 -12.743353 2.500000
+v 22.718348 -18.653444 2.500000
+v 22.327391 -12.343353 2.500000
+v 22.727390 -12.743353 2.500000
+v 29.818348 -19.053444 2.500000
+v 0.224428 4.236162 2.500001
+v 7.324428 3.836163 2.500001
+v 7.718347 -2.080406 2.500001
+v 29.818348 -18.653444 2.500000
+v 7.724428 3.836163 2.500001
+v 7.324428 4.236162 2.500001
+v 14.818347 -2.480406 2.500001
+v 15.203186 -6.199760 2.500001
+v 14.818347 -2.080406 2.500001
+v 15.218347 -2.480406 2.500001
+v 24.750605 -9.845544 2.500001
+v 22.727390 -12.343353 2.500000
+v 25.582762 -10.460536 2.500000
+v 26.226131 -10.936009 2.500000
+v 26.255848 -10.895800 2.500000
+v 25.612478 -10.420326 2.500000
+v 22.313528 -6.631981 2.500001
+v 28.653147 -12.729661 2.500000
+v 30.218348 -19.053444 2.500000
+v 37.318348 -19.053444 2.500000
+v 31.321690 -12.729661 2.500000
+v 30.218348 -18.653444 2.500000
+v 14.824428 3.836163 2.500001
+v 15.218347 -2.080406 2.500001
+v 7.724428 4.236162 2.500001
+v 37.318348 -18.653444 2.500000
+v 37.718346 -19.053444 2.500000
+v 15.224428 3.836163 2.500001
+v 14.824428 4.236162 2.500001
+v 22.318348 -2.480406 2.500001
+v 24.087997 -4.097775 2.500001
+v 22.318348 -2.080406 2.500001
+v 22.718348 -2.480406 2.500001
+v 22.718348 -2.080406 2.500001
+v 37.718346 -18.653444 2.500000
+v 28.803806 -5.860407 2.500001
+v 29.470652 -6.302355 2.500001
+v 28.776186 -5.902084 2.500001
+v 29.443029 -6.344032 2.500001
+v 20.979113 2.289904 2.500001
+v 20.842304 2.665781 2.500001
+v 15.224428 4.236162 2.500001
+v 21.354990 2.426712 2.500001
+v 40.514694 -14.543727 2.500000
+v 40.377884 -14.167850 2.500000
+v 32.898914 -10.477148 2.500000
+v 40.890572 -14.406919 2.500000
+v 29.464327 -2.603065 2.500001
+v 27.941290 -5.288776 2.500001
+v 29.327518 -2.227188 2.500001
+v 29.840204 -2.466257 2.500001
+v 31.986221 -7.969539 2.500001
+v 21.218182 2.802588 2.500001
+v 37.949543 -7.496031 2.500001
+v 37.812733 -7.120155 2.500001
+v 38.325420 -7.359224 2.500001
+v 40.753761 -14.031042 2.500000
+v 26.899176 4.444630 2.500001
+v 26.762367 4.820507 2.500001
+v 27.275053 4.581438 2.500001
+v 29.703396 -2.090380 2.500001
+v 38.188610 -6.983347 2.500001
+v 27.138245 4.957315 2.500001
+v 32.819241 6.599358 2.500001
+v 32.682430 6.975235 2.500001
+v 33.195118 6.736166 2.500001
+v 33.058308 7.112041 2.500001
+v -22.672579 -21.454777 0.000000
+v -22.672579 -21.854776 0.000000
+v -22.272577 -21.454777 0.000000
+v -22.272577 -21.854776 0.000000
+v -30.175529 -18.653444 0.000000
+v -30.175529 -19.053444 0.000000
+v -29.775530 -18.653444 0.000000
+v -29.775530 -19.053444 0.000000
+v -22.675529 -18.653444 0.000000
+v -22.675529 -19.053444 0.000000
+v -22.275530 -18.653444 0.000000
+v -22.275530 -19.053444 0.000000
+v -18.925529 -18.653444 0.000000
+v -18.925529 -19.053444 0.000000
+v -18.525530 -18.653444 0.000000
+v -18.525530 -19.053444 0.000000
+v -11.475529 -18.653444 0.000000
+v -11.475529 -19.053444 0.000000
+v -11.075529 -18.653444 0.000000
+v -11.075529 -19.053444 0.000000
+v -3.975529 -18.653444 0.000000
+v -3.975529 -19.053444 0.000000
+v -3.575529 -18.653444 0.000000
+v -3.575529 -19.053444 0.000000
+v -0.175529 -18.653444 0.000000
+v -0.175529 -19.053444 0.000000
+v 0.224471 -18.653444 0.000000
+v 0.224471 -19.053444 0.000000
+v -30.172609 -12.343353 0.000001
+v -30.172609 -12.743353 0.000000
+v -29.772608 -12.343353 0.000001
+v -29.772608 -12.743353 0.000000
+v -22.672609 -12.343353 0.000001
+v -22.672609 -12.743353 0.000000
+v -22.272610 -12.343353 0.000001
+v -22.272610 -12.743353 0.000000
+v -18.870583 -12.729661 0.000000
+v -9.485923 -12.729661 0.000000
+v -18.870583 -2.060263 0.000001
+v -9.485923 -7.099552 0.000001
+v -15.331446 -2.060263 0.000001
+v -13.628716 -7.099552 0.000001
+v -15.331446 -2.110262 0.000001
+v -13.628716 -2.049547 0.000001
+v -14.531446 -2.110262 0.000001
+v -14.531446 -2.049547 0.000001
+v -3.972609 -12.343353 0.000001
+v -3.972609 -12.743353 0.000000
+v -3.572609 -12.343353 0.000001
+v -3.572609 -12.743353 0.000000
+v -0.172609 -12.343353 0.000001
+v -0.172609 -12.743353 0.000000
+v 0.227391 -12.343353 0.000001
+v 0.227391 -12.743353 0.000000
+v 7.327422 -21.454777 0.000000
+v 7.327422 -21.854776 0.000000
+v 7.727422 -21.454777 0.000000
+v 7.727422 -21.854776 0.000000
+v 7.324471 -18.653444 0.000000
+v 7.324471 -19.053444 0.000000
+v 7.724471 -18.653444 0.000000
+v 7.724471 -19.053444 0.000000
+v 22.318348 -18.653444 0.000000
+v 22.318348 -19.053444 0.000000
+v 22.718348 -18.653444 0.000000
+v 22.718348 -19.053444 0.000000
+v 29.818348 -18.653444 0.000000
+v 29.818348 -19.053444 0.000000
+v 30.218348 -18.653444 0.000000
+v 30.218348 -19.053444 0.000000
+v 37.318348 -18.653444 0.000000
+v 37.318348 -19.053444 0.000000
+v 37.718346 -18.653444 0.000000
+v 37.718346 -19.053444 0.000000
+v 7.327391 -12.343353 0.000001
+v 7.327391 -12.743353 0.000000
+v 7.727391 -12.343353 0.000001
+v 7.727391 -12.743353 0.000000
+v 14.827391 -12.343353 0.000001
+v 14.827391 -12.743353 0.000000
+v 15.227391 -12.343353 0.000001
+v 15.227391 -12.743353 0.000000
+v 22.327391 -12.343353 0.000001
+v 22.327391 -12.743353 0.000000
+v 22.727390 -12.343353 0.000001
+v 22.727390 -12.743353 0.000000
+v 40.377884 -14.167850 0.000000
+v 40.514694 -14.543727 0.000000
+v 40.753761 -14.031042 0.000000
+v 40.890572 -14.406919 0.000000
+v 24.087997 -4.097775 0.000001
+v 22.313528 -6.631981 0.000001
+v 27.941290 -5.288776 0.000001
+v 24.750605 -9.845544 0.000001
+v 28.803806 -5.860407 0.000001
+v 25.582762 -10.460536 0.000001
+v 28.776186 -5.902084 0.000001
+v 25.612478 -10.420326 0.000001
+v 29.443029 -6.344032 0.000001
+v 26.255848 -10.895800 0.000001
+v 29.470652 -6.302355 0.000001
+v 26.226131 -10.936009 0.000001
+v 31.986221 -7.969539 0.000001
+v 28.653147 -12.729661 0.000000
+v 32.898914 -10.477148 0.000001
+v 31.321690 -12.729661 0.000000
+v -30.196814 -6.199760 0.000001
+v -30.196814 -6.599760 0.000001
+v -29.796814 -6.199760 0.000001
+v -29.796814 -6.599760 0.000001
+v -22.696814 -6.199760 0.000001
+v -22.696814 -6.599760 0.000001
+v -22.296814 -6.199760 0.000001
+v -22.296814 -6.599760 0.000001
+v -30.181654 -2.080406 0.000001
+v -30.181654 -2.480406 0.000001
+v -29.781652 -2.080406 0.000001
+v -29.781652 -2.480406 0.000001
+v -22.681652 -2.080406 0.000001
+v -22.681652 -2.480406 0.000001
+v -22.281652 -2.080406 0.000001
+v -22.281652 -2.480406 0.000001
+v -11.496814 -6.199760 0.000001
+v -11.496814 -6.599760 0.000001
+v -11.096814 -6.199760 0.000001
+v -11.096814 -6.599760 0.000001
+v -3.996814 -6.199760 0.000001
+v -3.996814 -6.599760 0.000001
+v -3.596814 -6.199760 0.000001
+v -3.596814 -6.599760 0.000001
+v -0.196814 -6.199760 0.000001
+v -0.196814 -6.599760 0.000001
+v 0.203186 -6.199760 0.000001
+v 0.203186 -6.599760 0.000001
+v -11.481653 -2.080406 0.000001
+v -11.481653 -2.480406 0.000001
+v -11.081653 -2.080406 0.000001
+v -11.081653 -2.480406 0.000001
+v -3.981653 -2.080406 0.000001
+v -3.981653 -2.480406 0.000001
+v -3.581653 -2.080406 0.000001
+v -3.581653 -2.480406 0.000001
+v -0.181653 -2.080406 0.000001
+v -0.181653 -2.480406 0.000001
+v 0.218347 -2.080406 0.000001
+v 0.218347 -2.480406 0.000001
+v -30.175571 3.836163 0.000001
+v -29.775572 3.836163 0.000001
+v -30.175571 4.236162 0.000001
+v -29.775572 4.236162 0.000001
+v -22.675571 3.836163 0.000001
+v -22.275572 3.836163 0.000001
+v -22.675571 4.236162 0.000001
+v -22.275572 4.236162 0.000001
+v -18.925571 3.836163 0.000001
+v -18.525572 3.836163 0.000001
+v -18.925571 4.236162 0.000001
+v -18.525572 4.236162 0.000001
+v -11.475572 3.836163 0.000001
+v -11.075572 3.836163 0.000001
+v -11.475572 4.236162 0.000001
+v -11.075572 4.236162 0.000001
+v -3.975572 3.836163 0.000001
+v -3.575572 3.836163 0.000001
+v -3.975572 4.236162 0.000001
+v -3.575572 4.236162 0.000001
+v -0.175572 3.836163 0.000001
+v 0.224428 3.836163 0.000001
+v -0.175572 4.236162 0.000001
+v 0.224428 4.236162 0.000001
+v 7.303186 -6.199760 0.000001
+v 7.303186 -6.599760 0.000001
+v 7.703186 -6.199760 0.000001
+v 7.703186 -6.599760 0.000001
+v 14.803186 -6.199760 0.000001
+v 14.803186 -6.599760 0.000001
+v 15.203186 -6.199760 0.000001
+v 15.203186 -6.599760 0.000001
+v 7.318347 -2.080406 0.000001
+v 7.318347 -2.480406 0.000001
+v 7.718347 -2.080406 0.000001
+v 7.718347 -2.480406 0.000001
+v 14.818347 -2.080406 0.000001
+v 14.818347 -2.480406 0.000001
+v 15.218347 -2.080406 0.000001
+v 15.218347 -2.480406 0.000001
+v 22.318348 -2.080406 0.000001
+v 22.318348 -2.480406 0.000001
+v 22.718348 -2.080406 0.000001
+v 22.718348 -2.480406 0.000001
+v 37.812733 -7.120155 0.000001
+v 37.949543 -7.496031 0.000001
+v 38.188610 -6.983347 0.000001
+v 38.325420 -7.359224 0.000001
+v 29.327518 -2.227188 0.000001
+v 29.464327 -2.603065 0.000001
+v 29.703396 -2.090380 0.000001
+v 29.840204 -2.466257 0.000001
+v 20.842304 2.665781 0.000001
+v 20.979113 2.289904 0.000001
+v 21.218182 2.802588 0.000001
+v 21.354990 2.426712 0.000001
+v 7.324428 3.836163 0.000001
+v 7.724428 3.836163 0.000001
+v 7.324428 4.236162 0.000001
+v 7.724428 4.236162 0.000001
+v 14.824428 3.836163 0.000001
+v 15.224428 3.836163 0.000001
+v 14.824428 4.236162 0.000001
+v 15.224428 4.236162 0.000001
+v 26.762367 4.820507 0.000001
+v 26.899176 4.444630 0.000001
+v 27.138245 4.957315 0.000001
+v 27.275053 4.581438 0.000001
+v 32.682430 6.975235 0.000001
+v 32.819241 6.599358 0.000001
+v 33.058308 7.112041 0.000001
+v 33.195118 6.736166 0.000001
+vn -1.0000 0.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn -0.0000 0.0000 -1.0000
+vn 0.0000 -0.0000 1.0000
+vn 0.9397 0.3420 0.0000
+vn 0.7212 -0.6927 0.0000
+vn 0.3303 -0.9394 0.0915
+vn 0.3418 -0.9398 0.0011
+vn 0.3222 -0.9354 0.1455
+vn 0.3420 -0.9397 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0967 0.9953 0.0000
+vn -0.1603 0.9871 0.0000
+vn -0.4067 0.9136 0.0000
+vn -0.6262 0.7797 0.0000
+vn -0.6262 0.7796 0.0000
+vn -0.8043 0.5942 0.0000
+vn -0.8043 0.5943 0.0000
+vn -0.8042 0.5943 0.0000
+vn -0.9292 0.3695 0.0000
+vn -0.9292 0.3696 0.0000
+vn -0.9927 0.1203 0.0000
+vn -0.9927 0.1204 0.0000
+vn -0.9906 -0.1367 0.0000
+vn -0.9906 -0.1366 0.0000
+vn -0.9230 -0.3848 0.0000
+vn -0.9230 -0.3847 0.0000
+vn -0.9231 -0.3847 0.0000
+vn -0.9397 -0.3420 0.0000
+vn -0.3420 0.9397 0.0000
+vn 0.9397 0.3421 0.0000
+vn 0.9397 0.3419 0.0000
+vn -0.3167 0.9485 0.0000
+vn -0.5441 0.8390 0.0000
+vn -0.7368 0.6762 0.0000
+vn -0.8825 0.4702 0.0000
+vn -0.9721 0.2344 0.0000
+vn -0.9999 -0.0164 0.0000
+vn 0.0000 1.0000 0.0023
+vn 0.0000 1.0000 0.0036
+vn 0.9853 0.1707 -0.0000
+vn 0.9854 0.1705 0.0000
+vn 0.9853 0.1708 0.0000
+vn -0.3395 0.9406 0.0000
+vn 0.0000 0.0000 0.0000
+vn -0.3394 0.9406 0.0000
+vn 0.1747 0.0267 -0.9843
+vn 0.1735 0.0306 -0.9844
+vn 0.1734 0.0311 -0.9844
+vn 0.1616 0.0238 -0.9866
+vn 0.1640 0.0242 -0.9862
+vn 0.1735 0.0305 -0.9844
+vn -0.8192 0.5736 0.0000
+vn 0.2953 0.9554 0.0000
+vn -0.7968 -0.6043 0.0000
+vn 0.5524 0.8336 0.0000
+vn -0.5943 -0.8042 0.0000
+vn 0.8336 -0.5524 0.0000
+vn 0.8042 -0.5943 0.0000
+vn 0.8042 -0.5944 0.0000
+vn -0.8335 0.5525 0.0000
+vn -0.8336 0.5524 0.0000
+vn -0.8042 0.5944 0.0000
+vn 0.8192 -0.5736 0.0000
+s 1
+f 2195//106 2196//106 2197//106
+f 2197//106 2196//106 2198//106
+f 2199//107 2195//107 2200//107
+f 2200//107 2195//107 2197//107
+f 2196//108 2201//108 2198//108
+f 2198//108 2201//108 2202//108
+f 2196//109 2203//109 2204//109
+f 2203//109 2205//109 2204//109
+f 2196//109 2206//109 2203//109
+f 2196//109 2207//109 2206//109
+f 2206//109 2207//109 2208//109
+f 2207//109 2209//109 2208//109
+f 2196//109 2210//109 2207//109
+f 2196//109 2211//109 2210//109
+f 2210//109 2211//109 2212//109
+f 2211//109 2213//109 2214//109
+f 2213//109 2215//109 2214//109
+f 2211//109 2216//109 2213//109
+f 2196//109 2217//109 2211//109
+f 2211//109 2217//109 2216//109
+f 2217//109 2218//109 2216//109
+f 2216//109 2218//109 2219//109
+f 2220//109 2221//109 2217//109
+f 2222//109 2223//109 2224//109
+f 2224//109 2223//109 2225//109
+f 2226//109 2227//109 2228//109
+f 2204//109 2229//109 2196//109
+f 2230//109 2231//109 2232//109
+f 2230//109 2233//109 2231//109
+f 2233//109 2234//109 2231//109
+f 2233//109 2235//109 2234//109
+f 2234//109 2235//109 2236//109
+f 2229//109 2237//109 2238//109
+f 2239//109 2237//109 2229//109
+f 2239//109 2240//109 2237//109
+f 2237//109 2241//109 2238//109
+f 2242//109 2243//109 2241//109
+f 2241//109 2243//109 2238//109
+f 2195//109 2244//109 2227//109
+f 2233//109 2244//109 2235//109
+f 2227//109 2244//109 2233//109
+f 2245//109 2246//109 2247//109
+f 2247//109 2246//109 2248//109
+f 2248//109 2246//109 2249//109
+f 2246//109 2250//109 2249//109
+f 2250//109 2251//109 2249//109
+f 2252//109 2201//109 2238//109
+f 2238//109 2201//109 2229//109
+f 2253//109 2254//109 2252//109
+f 2252//109 2254//109 2201//109
+f 2255//109 2256//109 2254//109
+f 2256//109 2257//109 2254//109
+f 2258//109 2257//109 2259//109
+f 2259//109 2257//109 2256//109
+f 2260//109 2261//109 2262//109
+f 2262//109 2261//109 2257//109
+f 2254//109 2263//109 2201//109
+f 2257//109 2263//109 2254//109
+f 2261//109 2263//109 2257//109
+f 2251//109 2264//109 2249//109
+f 2251//109 2265//109 2264//109
+f 2266//109 2267//109 2264//109
+f 2266//109 2268//109 2267//109
+f 2263//109 2269//109 2201//109
+f 2263//109 2270//109 2269//109
+f 2271//109 2270//109 2263//109
+f 2272//109 2273//109 2274//109
+f 2275//109 2276//109 2277//109
+f 2268//109 2278//109 2279//109
+f 2280//109 2281//109 2282//109
+f 2280//109 2283//109 2281//109
+f 2277//109 2284//109 2273//109
+f 2270//109 2284//109 2269//109
+f 2273//109 2284//109 2274//109
+f 2276//109 2285//109 2277//109
+f 2277//109 2285//109 2284//109
+f 2286//109 2287//109 2288//109
+f 2287//109 2289//109 2285//109
+f 2284//109 2289//109 2269//109
+f 2286//109 2289//109 2287//109
+f 2285//109 2289//109 2284//109
+f 2244//109 2199//109 2290//109
+f 2291//109 2290//109 2199//109
+f 2195//109 2199//109 2244//109
+f 2196//109 2195//109 2220//109
+f 2196//109 2220//109 2217//109
+f 2220//109 2195//109 2224//109
+f 2224//109 2195//109 2222//109
+f 2222//109 2195//109 2226//109
+f 2226//109 2195//109 2227//109
+f 2201//109 2196//109 2229//109
+f 2266//109 2289//109 2286//109
+f 2266//109 2286//109 2283//109
+f 2266//109 2283//109 2280//109
+f 2266//109 2280//109 2278//109
+f 2266//109 2278//109 2268//109
+f 2267//109 2249//109 2264//109
+f 2200//110 2197//110 2198//110
+f 2200//110 2198//110 2202//110
+f 2200//110 2202//110 2292//110
+f 2199//111 2200//111 2293//111
+f 2294//111 2293//111 2200//111
+f 2291//111 2199//111 2293//111
+f 2292//111 2294//111 2200//111
+f 2269//111 2289//111 2294//111
+f 2269//111 2294//111 2292//111
+f 2201//112 2269//112 2202//112
+f 2202//112 2269//112 2292//112
+f 2295//113 2293//114 2296//115
+f 2290//116 2291//116 2295//113
+f 2295//113 2291//116 2293//114
+f 2297//108 2290//108 2295//108
+f 2244//108 2290//108 2297//108
+f 2235//117 2244//117 2297//117
+f 2235//117 2297//117 2298//117
+f 2236//108 2235//108 2298//108
+f 2236//108 2298//108 2299//108
+f 2234//106 2236//106 2299//106
+f 2234//106 2299//106 2300//106
+f 2231//108 2234//108 2300//108
+f 2231//108 2300//108 2301//108
+f 2232//117 2231//117 2301//117
+f 2232//117 2301//117 2302//117
+f 2230//108 2232//108 2302//108
+f 2230//108 2302//108 2303//108
+f 2233//106 2230//106 2303//106
+f 2233//106 2303//106 2304//106
+f 2227//108 2233//108 2304//108
+f 2227//108 2304//108 2305//108
+f 2228//117 2227//117 2305//117
+f 2228//117 2305//117 2306//117
+f 2226//108 2228//108 2306//108
+f 2226//108 2306//108 2307//108
+f 2222//117 2226//117 2307//117
+f 2222//117 2307//117 2308//117
+f 2223//107 2222//107 2308//107
+f 2223//107 2308//107 2309//107
+f 2225//117 2223//117 2309//117
+f 2225//117 2309//117 2310//117
+f 2224//108 2225//108 2310//108
+f 2224//108 2310//108 2311//108
+f 2220//117 2224//117 2311//117
+f 2220//117 2311//117 2312//117
+f 2221//107 2220//107 2312//107
+f 2221//107 2312//107 2313//107
+f 2217//117 2221//117 2313//117
+f 2217//117 2313//117 2314//117
+f 2218//107 2217//107 2314//107
+f 2218//107 2314//107 2315//107
+f 2219//117 2218//117 2315//117
+f 2219//117 2315//117 2316//117
+f 2216//108 2219//108 2316//108
+f 2216//108 2316//108 2317//108
+f 2213//117 2216//117 2317//117
+f 2213//117 2317//117 2318//117
+f 2215//107 2213//107 2318//107
+f 2215//107 2318//107 2319//107
+f 2214//117 2215//117 2319//117
+f 2214//117 2319//117 2320//117
+f 2211//108 2214//108 2320//108
+f 2211//108 2320//108 2321//108
+f 2212//117 2211//117 2321//117
+f 2212//117 2321//117 2322//117
+f 2210//108 2212//108 2322//108
+f 2210//108 2322//108 2323//108
+f 2207//117 2210//117 2323//117
+f 2207//117 2323//117 2324//117
+f 2209//107 2207//107 2324//107
+f 2209//107 2324//107 2325//107
+f 2208//117 2209//117 2325//117
+f 2208//117 2325//117 2326//117
+f 2206//108 2208//108 2326//108
+f 2206//108 2326//108 2327//108
+f 2203//117 2206//117 2327//117
+f 2203//117 2327//117 2328//117
+f 2205//107 2203//107 2328//107
+f 2205//107 2328//107 2329//107
+f 2204//117 2205//117 2329//117
+f 2204//117 2329//117 2330//117
+f 2229//107 2204//107 2330//107
+f 2229//107 2330//107 2331//107
+f 2239//106 2229//106 2331//106
+f 2239//106 2331//106 2332//106
+f 2240//107 2239//107 2332//107
+f 2240//107 2332//107 2333//107
+f 2237//117 2240//117 2333//117
+f 2237//117 2333//117 2334//117
+f 2241//107 2237//107 2334//107
+f 2241//107 2334//107 2335//107
+f 2242//106 2241//106 2335//106
+f 2242//106 2335//106 2336//106
+f 2243//107 2242//107 2336//107
+f 2243//107 2336//107 2337//107
+f 2238//117 2243//117 2337//117
+f 2238//117 2337//117 2338//117
+f 2252//107 2238//107 2338//107
+f 2252//107 2338//107 2339//107
+f 2253//106 2252//106 2339//106
+f 2253//106 2339//106 2340//106
+f 2254//107 2253//107 2340//107
+f 2254//107 2340//107 2341//107
+f 2263//118 2261//118 2342//118
+f 2342//118 2261//118 2343//118
+f 2343//119 2260//119 2344//119
+f 2261//119 2260//119 2343//119
+f 2344//120 2262//120 2345//120
+f 2345//121 2262//122 2346//121
+f 2260//120 2262//120 2344//120
+f 2262//122 2257//122 2346//121
+f 2346//123 2258//124 2347//123
+f 2257//125 2258//124 2346//123
+f 2347//126 2259//127 2348//126
+f 2258//127 2259//127 2347//126
+f 2348//128 2256//129 2349//128
+f 2259//129 2256//129 2348//128
+f 2349//130 2255//131 2350//130
+f 2256//131 2255//131 2349//130
+f 2350//132 2254//133 2341//132
+f 2255//134 2254//133 2350//132
+f 2271//135 2263//135 2342//135
+f 2271//135 2342//135 2351//135
+f 2270//136 2271//136 2351//136
+f 2270//136 2351//136 2352//136
+f 2284//135 2270//135 2352//135
+f 2284//135 2352//135 2353//135
+f 2274//116 2284//116 2353//116
+f 2274//116 2353//116 2354//116
+f 2272//135 2274//135 2354//135
+f 2272//135 2354//135 2355//135
+f 2273//136 2272//136 2355//136
+f 2273//136 2355//136 2356//136
+f 2277//135 2273//135 2356//135
+f 2277//135 2356//135 2357//135
+f 2275//116 2277//116 2357//116
+f 2275//116 2357//116 2358//116
+f 2276//135 2275//135 2358//135
+f 2276//135 2358//135 2359//135
+f 2285//136 2276//136 2359//136
+f 2285//136 2359//136 2360//136
+f 2287//135 2285//135 2360//135
+f 2287//135 2360//135 2361//135
+f 2288//116 2287//116 2361//116
+f 2288//116 2361//116 2362//116
+f 2286//135 2288//135 2362//135
+f 2286//135 2362//135 2363//135
+f 2283//116 2286//116 2363//116
+f 2283//116 2363//116 2364//116
+f 2281//111 2283//111 2364//111
+f 2281//111 2364//111 2365//111
+f 2282//116 2281//116 2365//116
+f 2282//116 2365//116 2366//116
+f 2280//135 2282//135 2366//135
+f 2280//135 2366//135 2367//135
+f 2278//116 2280//116 2367//116
+f 2278//116 2367//116 2368//116
+f 2279//137 2278//137 2368//111
+f 2279//137 2368//111 2369//138
+f 2268//116 2279//116 2369//116
+f 2268//116 2369//116 2370//116
+f 2267//117 2268//117 2370//117
+f 2267//117 2370//117 2371//117
+f 2249//108 2267//108 2371//108
+f 2249//108 2371//108 2372//108
+f 2251//139 2250//139 2373//139
+f 2373//139 2250//139 2374//139
+f 2374//140 2246//140 2375//140
+f 2250//140 2246//140 2374//140
+f 2375//141 2245//141 2376//141
+f 2246//141 2245//141 2375//141
+f 2376//142 2247//142 2377//142
+f 2245//142 2247//142 2376//142
+f 2377//143 2248//143 2378//143
+f 2247//143 2248//143 2377//143
+f 2378//144 2249//144 2372//144
+f 2248//144 2249//144 2378//144
+f 2379//145 2251//107 2373//107
+f 2380//146 2379//145 2373//107
+f 2265//107 2251//107 2379//145
+f 2381//147 2264//148 2379//147
+f 2379//147 2264//148 2265//149
+f 2382//150 2264//150 2381//150
+f 2382//150 2381//150 2380//150
+f 2383//151 2382//151 2380//151
+f 2266//151 2383//151 2380//151
+f 2289//152 2380//152 2294//152
+f 2289//152 2266//152 2380//152
+f 2294//153 2296//154 2293//155
+f 2294//153 2384//156 2296//154
+f 2294//153 2385//157 2384//156
+f 2294//153 2380//154 2385//157
+f 2327//109 2326//109 2328//109
+f 2328//109 2326//109 2329//109
+f 2323//109 2322//109 2324//109
+f 2324//109 2322//109 2325//109
+f 2329//109 2386//109 2330//109
+f 2386//109 2387//109 2330//109
+f 2326//109 2388//109 2329//109
+f 2329//109 2388//109 2386//109
+f 2322//109 2320//109 2325//109
+f 2326//109 2320//109 2388//109
+f 2321//109 2320//109 2322//109
+f 2325//109 2320//109 2326//109
+f 2317//109 2316//109 2318//109
+f 2318//109 2316//109 2319//109
+f 2387//109 2389//109 2330//109
+f 2389//109 2390//109 2330//109
+f 2387//109 2391//109 2389//109
+f 2320//109 2392//109 2388//109
+f 2388//109 2392//109 2393//109
+f 2392//109 2394//109 2393//109
+f 2319//109 2395//109 2320//109
+f 2320//109 2395//109 2392//109
+f 2316//109 2395//109 2319//109
+f 2387//109 2396//109 2391//109
+f 2387//109 2397//109 2396//109
+f 2394//109 2397//109 2393//109
+f 2393//109 2397//109 2387//109
+f 2396//109 2398//109 2391//109
+f 2391//109 2398//109 2399//109
+f 2400//109 2401//109 2398//109
+f 2398//109 2401//109 2399//109
+f 2399//109 2401//109 2390//109
+f 2314//109 2313//109 2315//109
+f 2400//109 2402//109 2401//109
+f 2401//109 2403//109 2390//109
+f 2311//109 2310//109 2312//109
+f 2312//109 2310//109 2313//109
+f 2315//109 2404//109 2316//109
+f 2316//109 2404//109 2395//109
+f 2395//109 2405//109 2406//109
+f 2404//109 2405//109 2395//109
+f 2315//109 2407//109 2404//109
+f 2397//109 2408//109 2400//109
+f 2406//109 2408//109 2394//109
+f 2394//109 2408//109 2397//109
+f 2307//109 2306//109 2308//109
+f 2308//109 2306//109 2309//109
+f 2400//109 2409//109 2402//109
+f 2408//109 2409//109 2400//109
+f 2406//109 2410//109 2408//109
+f 2313//109 2411//109 2315//109
+f 2315//109 2411//109 2407//109
+f 2407//109 2411//109 2412//109
+f 2313//109 2413//109 2411//109
+f 2310//109 2413//109 2313//109
+f 2411//109 2414//109 2412//109
+f 2402//109 2415//109 2416//109
+f 2417//109 2415//109 2409//109
+f 2409//109 2415//109 2402//109
+f 2403//109 2418//109 2390//109
+f 2418//109 2419//109 2390//109
+f 2416//109 2420//109 2403//109
+f 2415//109 2420//109 2416//109
+f 2403//109 2420//109 2418//109
+f 2406//109 2421//109 2410//109
+f 2405//109 2421//109 2406//109
+f 2412//109 2421//109 2405//109
+f 2412//109 2422//109 2421//109
+f 2414//109 2422//109 2412//109
+f 2417//109 2423//109 2415//109
+f 2421//109 2423//109 2410//109
+f 2410//109 2423//109 2417//109
+f 2306//109 2424//109 2309//109
+f 2413//109 2424//109 2425//109
+f 2310//109 2424//109 2413//109
+f 2309//109 2424//109 2310//109
+f 2305//109 2426//109 2306//109
+f 2306//109 2426//109 2424//109
+f 2424//109 2427//109 2425//109
+f 2305//109 2428//109 2426//109
+f 2422//109 2429//109 2430//109
+f 2414//109 2429//109 2422//109
+f 2429//109 2431//109 2430//109
+f 2425//109 2432//109 2414//109
+f 2427//109 2432//109 2425//109
+f 2414//109 2432//109 2429//109
+f 2419//109 2433//109 2390//109
+f 2434//109 2435//109 2419//109
+f 2419//109 2435//109 2433//109
+f 2420//109 2436//109 2434//109
+f 2415//109 2436//109 2420//109
+f 2434//109 2436//109 2435//109
+f 2437//109 2438//109 2431//109
+f 2431//109 2438//109 2430//109
+f 2432//109 2439//109 2437//109
+f 2427//109 2439//109 2432//109
+f 2440//109 2441//109 2442//109
+f 2442//109 2441//109 2443//109
+f 2428//109 2444//109 2427//109
+f 2305//109 2444//109 2428//109
+f 2427//109 2444//109 2439//109
+f 2439//109 2445//109 2437//109
+f 2446//109 2447//109 2448//109
+f 2435//109 2449//109 2440//109
+f 2436//109 2449//109 2435//109
+f 2450//109 2451//109 2452//109
+f 2453//109 2454//109 2455//109
+f 2450//109 2456//109 2451//109
+f 2440//109 2457//109 2441//109
+f 2449//109 2457//109 2440//109
+f 2436//109 2458//109 2449//109
+f 2454//109 2458//109 2436//109
+f 2446//109 2459//109 2447//109
+f 2437//109 2460//109 2438//109
+f 2445//109 2460//109 2437//109
+f 2445//109 2461//109 2460//109
+f 2462//109 2461//109 2445//109
+f 2438//109 2463//109 2450//109
+f 2460//109 2463//109 2438//109
+f 2442//109 2464//109 2433//109
+f 2465//109 2464//109 2443//109
+f 2443//109 2464//109 2442//109
+f 2433//109 2464//109 2390//109
+f 2465//109 2466//109 2464//109
+f 2459//109 2467//109 2447//109
+f 2447//109 2467//109 2453//109
+f 2453//109 2468//109 2454//109
+f 2467//109 2468//109 2453//109
+f 2459//109 2469//109 2467//109
+f 2457//109 2470//109 2441//109
+f 2441//109 2470//109 2471//109
+f 2470//109 2472//109 2471//109
+f 2473//109 2474//109 2457//109
+f 2457//109 2474//109 2470//109
+f 2465//109 2475//109 2466//109
+f 2471//109 2476//109 2465//109
+f 2472//109 2476//109 2471//109
+f 2465//109 2476//109 2475//109
+f 2475//109 2477//109 2466//109
+f 2466//109 2477//109 2478//109
+f 2454//109 2479//109 2458//109
+f 2479//109 2480//109 2458//109
+f 2458//109 2480//109 2473//109
+f 2454//109 2481//109 2479//109
+f 2464//109 2331//109 2390//109
+f 2390//109 2331//109 2330//109
+f 2478//109 2331//109 2482//109
+f 2482//109 2331//109 2464//109
+f 2450//109 2483//109 2456//109
+f 2459//109 2483//109 2469//109
+f 2463//109 2483//109 2450//109
+f 2469//109 2483//109 2484//109
+f 2456//109 2483//109 2459//109
+f 2485//109 2483//109 2463//109
+f 2485//109 2486//109 2483//109
+f 2483//109 2487//109 2484//109
+f 2480//109 2488//109 2473//109
+f 2473//109 2488//109 2474//109
+f 2481//109 2489//109 2490//109
+f 2468//109 2489//109 2454//109
+f 2454//109 2489//109 2481//109
+f 2490//109 2491//109 2480//109
+f 2480//109 2491//109 2488//109
+f 2474//109 2492//109 2493//109
+f 2488//109 2492//109 2474//109
+f 2489//109 2494//109 2490//109
+f 2490//109 2494//109 2491//109
+f 2484//109 2495//109 2468//109
+f 2468//109 2495//109 2489//109
+f 2487//109 2495//109 2484//109
+f 2485//109 2303//109 2486//109
+f 2493//109 2496//109 2472//109
+f 2472//109 2496//109 2476//109
+f 2476//109 2496//109 2497//109
+f 2303//109 2302//109 2486//109
+f 2493//109 2498//109 2496//109
+f 2496//109 2499//109 2497//109
+f 2462//109 2304//109 2461//109
+f 2444//109 2304//109 2462//109
+f 2461//109 2304//109 2485//109
+f 2485//109 2304//109 2303//109
+f 2302//109 2299//109 2486//109
+f 2301//109 2300//109 2302//109
+f 2302//109 2300//109 2299//109
+f 2497//109 2332//109 2477//109
+f 2477//109 2332//109 2478//109
+f 2478//109 2332//109 2331//109
+f 2299//109 2298//109 2486//109
+f 2486//109 2298//109 2500//109
+f 2491//109 2501//109 2502//109
+f 2494//109 2501//109 2491//109
+f 2494//109 2503//109 2501//109
+f 2504//109 2503//109 2494//109
+f 2501//109 2505//109 2502//109
+f 2333//109 2335//109 2334//109
+f 2333//109 2336//109 2335//109
+f 2495//109 2506//109 2504//109
+f 2487//109 2506//109 2495//109
+f 2487//109 2507//109 2506//109
+f 2500//109 2507//109 2487//109
+f 2298//109 2507//109 2500//109
+f 2504//109 2508//109 2503//109
+f 2506//109 2508//109 2504//109
+f 2493//109 2509//109 2498//109
+f 2502//109 2509//109 2492//109
+f 2492//109 2509//109 2493//109
+f 2505//109 2510//109 2502//109
+f 2502//109 2510//109 2509//109
+f 2498//109 2511//109 2512//109
+f 2509//109 2511//109 2498//109
+f 2499//109 2513//109 2497//109
+f 2497//109 2513//109 2332//109
+f 2513//109 2514//109 2332//109
+f 2332//109 2514//109 2333//109
+f 2336//109 2514//109 2337//109
+f 2333//109 2514//109 2336//109
+f 2512//109 2515//109 2499//109
+f 2499//109 2515//109 2513//109
+f 2337//109 2516//109 2338//109
+f 2503//109 2517//109 2518//109
+f 2508//109 2517//109 2503//109
+f 2337//109 2519//109 2516//109
+f 2516//109 2520//109 2338//109
+f 2517//109 2521//109 2518//109
+f 2508//109 2522//109 2517//109
+f 2523//109 2522//109 2508//109
+f 2505//109 2524//109 2510//109
+f 2510//109 2524//109 2525//109
+f 2298//109 2372//109 2507//109
+f 2523//109 2372//109 2522//109
+f 2507//109 2372//109 2523//109
+f 2521//109 2526//109 2518//109
+f 2518//109 2526//109 2505//109
+f 2505//109 2526//109 2524//109
+f 2524//109 2527//109 2525//109
+f 2298//109 2378//109 2372//109
+f 2297//109 2377//109 2298//109
+f 2298//109 2377//109 2378//109
+f 2297//109 2376//109 2377//109
+f 2511//109 2528//109 2512//109
+f 2512//109 2528//109 2515//109
+f 2297//109 2375//109 2376//109
+f 2511//109 2529//109 2528//109
+f 2525//109 2529//109 2511//109
+f 2527//109 2529//109 2525//109
+f 2515//109 2530//109 2531//109
+f 2528//109 2530//109 2515//109
+f 2297//109 2374//109 2375//109
+f 2514//109 2532//109 2337//109
+f 2519//109 2532//109 2533//109
+f 2337//109 2532//109 2519//109
+f 2514//109 2534//109 2532//109
+f 2531//109 2534//109 2514//109
+f 2532//109 2535//109 2533//109
+f 2297//109 2373//109 2374//109
+f 2520//109 2536//109 2338//109
+f 2537//109 2538//109 2521//109
+f 2526//109 2538//109 2539//109
+f 2521//109 2538//109 2526//109
+f 2520//109 2540//109 2536//109
+f 2533//109 2540//109 2520//109
+f 2538//109 2541//109 2539//109
+f 2537//109 2542//109 2538//109
+f 2527//109 2543//109 2529//109
+f 2529//109 2543//109 2544//109
+f 2541//109 2545//109 2539//109
+f 2527//109 2545//109 2543//109
+f 2539//109 2545//109 2527//109
+f 2543//109 2546//109 2544//109
+f 2534//109 2547//109 2548//109
+f 2547//109 2549//109 2548//109
+f 2549//109 2550//109 2548//109
+f 2548//109 2550//109 2535//109
+f 2549//109 2551//109 2550//109
+f 2552//109 2551//109 2549//109
+f 2531//109 2553//109 2534//109
+f 2534//109 2553//109 2547//109
+f 2544//109 2553//109 2530//109
+f 2530//109 2553//109 2531//109
+f 2535//109 2554//109 2533//109
+f 2533//109 2554//109 2540//109
+f 2550//109 2554//109 2535//109
+f 2536//109 2339//109 2338//109
+f 2555//109 2339//109 2536//109
+f 2555//109 2556//109 2339//109
+f 2554//109 2557//109 2540//109
+f 2540//109 2557//109 2558//109
+f 2541//109 2559//109 2545//109
+f 2545//109 2559//109 2560//109
+f 2561//109 2559//109 2541//109
+f 2557//109 2562//109 2558//109
+f 2555//109 2562//109 2556//109
+f 2558//109 2562//109 2555//109
+f 2556//109 2563//109 2339//109
+f 2559//109 2564//109 2560//109
+f 2561//109 2565//109 2559//109
+f 2544//109 2566//109 2553//109
+f 2546//109 2566//109 2544//109
+f 2566//109 2567//109 2553//109
+f 2546//109 2568//109 2566//109
+f 2560//109 2568//109 2546//109
+f 2566//109 2569//109 2567//109
+f 2569//109 2570//109 2567//109
+f 2571//109 2340//109 2563//109
+f 2563//109 2340//109 2339//109
+f 2340//109 2350//109 2341//109
+f 2340//109 2349//109 2350//109
+f 2340//109 2348//109 2349//109
+f 2572//109 2573//109 2574//109
+f 2574//109 2573//109 2575//109
+f 2564//109 2576//109 2560//109
+f 2560//109 2576//109 2568//109
+f 2340//109 2347//109 2348//109
+f 2564//109 2577//109 2576//109
+f 2578//109 2577//109 2564//109
+f 2576//109 2579//109 2568//109
+f 2568//109 2579//109 2570//109
+f 2340//109 2351//109 2347//109
+f 2343//109 2351//109 2342//109
+f 2344//109 2351//109 2343//109
+f 2345//109 2351//109 2344//109
+f 2346//109 2351//109 2345//109
+f 2347//109 2351//109 2346//109
+f 2340//109 2580//109 2351//109
+f 2562//109 2580//109 2571//109
+f 2571//109 2580//109 2340//109
+f 2562//109 2581//109 2580//109
+f 2557//109 2581//109 2562//109
+f 2582//109 2581//109 2557//109
+f 2580//109 2583//109 2351//109
+f 2572//109 2584//109 2573//109
+f 2585//109 2584//109 2572//109
+f 2585//109 2586//109 2584//109
+f 2570//109 2586//109 2567//109
+f 2567//109 2586//109 2585//109
+f 2573//109 2587//109 2588//109
+f 2584//109 2587//109 2573//109
+f 2578//109 2371//109 2577//109
+f 2577//109 2371//109 2589//109
+f 2373//109 2296//109 2384//109
+f 2297//109 2296//109 2373//109
+f 2297//109 2295//109 2296//109
+f 2582//109 2590//109 2581//109
+f 2582//109 2591//109 2590//109
+f 2588//109 2591//109 2582//109
+f 2590//109 2592//109 2581//109
+f 2581//109 2592//109 2593//109
+f 2570//109 2594//109 2586//109
+f 2579//109 2594//109 2570//109
+f 2589//109 2594//109 2579//109
+f 2583//109 2352//109 2351//109
+f 2592//109 2352//109 2593//109
+f 2593//109 2352//109 2583//109
+f 2371//109 2595//109 2589//109
+f 2589//109 2595//109 2594//109
+f 2594//109 2596//109 2586//109
+f 2586//109 2596//109 2597//109
+f 2587//109 2354//109 2588//109
+f 2588//109 2354//109 2591//109
+f 2591//109 2354//109 2598//109
+f 2597//109 2354//109 2587//109
+f 2597//109 2355//109 2354//109
+f 2597//109 2358//109 2355//109
+f 2355//109 2357//109 2356//109
+f 2358//109 2357//109 2355//109
+f 2596//109 2359//109 2597//109
+f 2597//109 2359//109 2358//109
+f 2595//109 2369//109 2599//109
+f 2371//109 2369//109 2595//109
+f 2370//109 2369//109 2371//109
+f 2599//109 2600//109 2596//109
+f 2596//109 2600//109 2359//109
+f 2369//109 2366//109 2599//109
+f 2368//109 2366//109 2369//109
+f 2368//109 2367//109 2366//109
+f 2599//109 2601//109 2600//109
+f 2600//109 2602//109 2359//109
+f 2366//109 2365//109 2599//109
+f 2599//109 2365//109 2601//109
+f 2601//109 2362//109 2603//109
+f 2365//109 2362//109 2601//109
+f 2365//109 2363//109 2362//109
+f 2364//109 2363//109 2365//109
+f 2354//109 2353//109 2598//109
+f 2592//109 2353//109 2352//109
+f 2598//109 2353//109 2592//109
+f 2602//109 2360//109 2359//109
+f 2603//109 2360//109 2602//109
+f 2362//109 2361//109 2603//109
+f 2603//109 2361//109 2360//109
+f 2305//109 2304//109 2444//109
+f 2372//109 2371//109 2522//109
+f 2522//109 2371//109 2537//109
+f 2537//109 2371//109 2542//109
+f 2542//109 2371//109 2561//109
+f 2561//109 2371//109 2565//109
+f 2565//109 2371//109 2578//109
+f 2380//109 2373//109 2385//109
+f 2385//109 2373//109 2384//109
+f 2438//109 2415//109 2430//109
+f 2430//109 2415//109 2423//109
+f 2454//109 2446//109 2455//109
+f 2455//109 2446//109 2448//109
+f 2380//158 2381//158 2379//158
+f 2604//106 2605//106 2391//106
+f 2391//106 2605//106 2389//106
+f 2606//107 2604//107 2399//107
+f 2399//107 2604//107 2391//107
+f 2605//108 2607//108 2389//108
+f 2389//108 2607//108 2390//108
+f 2607//117 2606//117 2390//117
+f 2390//117 2606//117 2399//117
+f 2608//106 2609//106 2388//106
+f 2388//106 2609//106 2386//106
+f 2610//107 2608//107 2393//107
+f 2393//107 2608//107 2388//107
+f 2609//108 2611//108 2386//108
+f 2386//108 2611//108 2387//108
+f 2611//117 2610//117 2387//117
+f 2387//117 2610//117 2393//117
+f 2612//106 2613//106 2397//106
+f 2397//106 2613//106 2396//106
+f 2614//107 2612//107 2400//107
+f 2400//107 2612//107 2397//107
+f 2613//108 2615//108 2396//108
+f 2396//108 2615//108 2398//108
+f 2615//117 2614//117 2398//117
+f 2398//117 2614//117 2400//117
+f 2616//106 2617//106 2402//106
+f 2402//106 2617//106 2401//106
+f 2618//107 2616//107 2416//107
+f 2416//107 2616//107 2402//107
+f 2617//108 2619//108 2401//108
+f 2401//108 2619//108 2403//108
+f 2619//117 2618//117 2403//117
+f 2403//117 2618//117 2416//117
+f 2620//106 2621//106 2420//106
+f 2420//106 2621//106 2418//106
+f 2622//107 2620//107 2434//107
+f 2434//107 2620//107 2420//107
+f 2621//108 2623//108 2418//108
+f 2418//108 2623//108 2419//108
+f 2623//117 2622//117 2419//117
+f 2419//117 2622//117 2434//117
+f 2624//106 2625//106 2435//106
+f 2435//106 2625//106 2433//106
+f 2626//107 2624//107 2440//107
+f 2440//107 2624//107 2435//107
+f 2625//108 2627//108 2433//108
+f 2433//108 2627//108 2442//108
+f 2627//117 2626//117 2442//117
+f 2442//117 2626//117 2440//117
+f 2628//106 2629//106 2441//106
+f 2441//106 2629//106 2443//106
+f 2630//107 2628//107 2471//107
+f 2471//107 2628//107 2441//107
+f 2629//108 2631//108 2443//108
+f 2443//108 2631//108 2465//108
+f 2631//117 2630//117 2465//117
+f 2465//117 2630//117 2471//117
+f 2632//106 2633//106 2395//106
+f 2395//106 2633//106 2392//106
+f 2634//107 2632//107 2406//107
+f 2406//107 2632//107 2395//107
+f 2633//108 2635//108 2392//108
+f 2392//108 2635//108 2394//108
+f 2635//117 2634//117 2394//117
+f 2394//117 2634//117 2406//117
+f 2636//106 2637//106 2410//106
+f 2410//106 2637//106 2408//106
+f 2638//107 2636//107 2417//107
+f 2417//107 2636//107 2410//107
+f 2637//108 2639//108 2408//108
+f 2408//108 2639//108 2409//108
+f 2639//117 2638//117 2409//117
+f 2409//117 2638//117 2417//117
+f 2640//108 2641//108 2415//108
+f 2415//108 2641//108 2436//108
+f 2642//106 2640//106 2438//106
+f 2438//106 2640//106 2415//106
+f 2641//117 2643//117 2436//117
+f 2436//117 2643//117 2454//117
+f 2644//107 2642//107 2450//107
+f 2450//107 2642//107 2438//107
+f 2643//107 2645//107 2454//107
+f 2454//107 2645//107 2446//107
+f 2646//117 2644//117 2452//117
+f 2452//117 2644//117 2450//117
+f 2645//117 2647//117 2446//117
+f 2446//117 2647//117 2459//117
+f 2648//107 2646//107 2451//107
+f 2451//107 2646//107 2452//107
+f 2647//107 2649//107 2459//107
+f 2459//107 2649//107 2456//107
+f 2649//106 2648//106 2456//106
+f 2456//106 2648//106 2451//106
+f 2650//106 2651//106 2458//106
+f 2458//106 2651//106 2449//106
+f 2652//107 2650//107 2473//107
+f 2473//107 2650//107 2458//107
+f 2651//108 2653//108 2449//108
+f 2449//108 2653//108 2457//108
+f 2653//117 2652//117 2457//117
+f 2457//117 2652//117 2473//117
+f 2654//106 2655//106 2474//106
+f 2474//106 2655//106 2470//106
+f 2656//107 2654//107 2493//107
+f 2493//107 2654//107 2474//107
+f 2655//108 2657//108 2470//108
+f 2470//108 2657//108 2472//108
+f 2657//117 2656//117 2472//117
+f 2472//117 2656//117 2493//117
+f 2658//106 2659//106 2466//106
+f 2466//106 2659//106 2464//106
+f 2660//107 2658//107 2478//107
+f 2478//107 2658//107 2466//107
+f 2659//108 2661//108 2464//108
+f 2464//108 2661//108 2482//108
+f 2661//117 2660//117 2482//117
+f 2482//117 2660//117 2478//117
+f 2662//106 2663//106 2476//106
+f 2476//106 2663//106 2475//106
+f 2664//107 2662//107 2497//107
+f 2497//107 2662//107 2476//107
+f 2663//108 2665//108 2475//108
+f 2475//108 2665//108 2477//108
+f 2665//117 2664//117 2477//117
+f 2477//117 2664//117 2497//117
+f 2666//106 2667//106 2519//106
+f 2519//106 2667//106 2516//106
+f 2668//107 2666//107 2533//107
+f 2533//107 2666//107 2519//107
+f 2667//108 2669//108 2516//108
+f 2516//108 2669//108 2520//108
+f 2669//117 2668//117 2520//117
+f 2520//117 2668//117 2533//117
+f 2670//106 2671//106 2540//106
+f 2540//106 2671//106 2536//106
+f 2672//107 2670//107 2558//107
+f 2558//107 2670//107 2540//107
+f 2671//108 2673//108 2536//108
+f 2536//108 2673//108 2555//108
+f 2673//117 2672//117 2555//117
+f 2555//117 2672//117 2558//117
+f 2674//106 2675//106 2562//106
+f 2562//106 2675//106 2556//106
+f 2676//107 2674//107 2571//107
+f 2571//107 2674//107 2562//107
+f 2675//108 2677//108 2556//108
+f 2556//108 2677//108 2563//108
+f 2677//117 2676//117 2563//117
+f 2563//117 2676//117 2571//117
+f 2678//106 2679//106 2498//106
+f 2498//106 2679//106 2496//106
+f 2680//107 2678//107 2512//107
+f 2512//107 2678//107 2498//107
+f 2679//108 2681//108 2496//108
+f 2496//108 2681//108 2499//108
+f 2681//117 2680//117 2499//117
+f 2499//117 2680//117 2512//117
+f 2682//106 2683//106 2515//106
+f 2515//106 2683//106 2513//106
+f 2684//107 2682//107 2531//107
+f 2531//107 2682//107 2515//107
+f 2683//108 2685//108 2513//108
+f 2513//108 2685//108 2514//108
+f 2685//117 2684//117 2514//117
+f 2514//117 2684//117 2531//117
+f 2686//106 2687//106 2534//106
+f 2534//106 2687//106 2532//106
+f 2688//107 2686//107 2548//107
+f 2548//107 2686//107 2534//107
+f 2687//108 2689//108 2532//108
+f 2532//108 2689//108 2535//108
+f 2689//117 2688//117 2535//117
+f 2535//117 2688//117 2548//117
+f 2690//135 2691//135 2581//135
+f 2581//135 2691//135 2580//135
+f 2692//136 2690//136 2593//136
+f 2593//136 2690//136 2581//136
+f 2691//116 2693//116 2580//116
+f 2580//116 2693//116 2583//116
+f 2693//111 2692//111 2583//111
+f 2583//111 2692//111 2593//111
+f 2694//159 2695//159 2567//159
+f 2567//159 2695//159 2553//159
+f 2696//160 2694//160 2567//160
+f 2696//160 2567//160 2585//160
+f 2695//161 2697//161 2553//161
+f 2553//161 2697//161 2547//161
+f 2698//162 2696//162 2585//162
+f 2698//162 2585//162 2572//162
+f 2697//163 2699//163 2547//163
+f 2547//163 2699//163 2549//163
+f 2700//164 2698//164 2572//164
+f 2700//164 2572//164 2574//164
+f 2699//165 2701//165 2549//166
+f 2549//166 2701//165 2552//166
+f 2702//162 2700//162 2574//162
+f 2702//162 2574//162 2575//162
+f 2701//163 2703//163 2552//163
+f 2552//163 2703//163 2551//163
+f 2704//167 2702//167 2575//168
+f 2704//167 2575//168 2573//168
+f 2703//124 2705//124 2551//169
+f 2551//169 2705//124 2550//169
+f 2706//162 2704//162 2573//162
+f 2706//162 2573//162 2588//162
+f 2705//163 2707//163 2550//163
+f 2550//163 2707//163 2554//163
+f 2708//111 2706//111 2588//111
+f 2708//111 2588//111 2582//111
+f 2707//108 2709//108 2554//108
+f 2554//108 2709//108 2557//108
+f 2709//170 2708//170 2557//170
+f 2557//170 2708//170 2582//170
+f 2710//106 2711//106 2407//106
+f 2407//106 2711//106 2404//106
+f 2712//107 2710//107 2412//107
+f 2412//107 2710//107 2407//107
+f 2711//108 2713//108 2404//108
+f 2404//108 2713//108 2405//108
+f 2713//117 2712//117 2405//117
+f 2405//117 2712//117 2412//117
+f 2714//106 2715//106 2422//106
+f 2422//106 2715//106 2421//106
+f 2716//107 2714//107 2430//107
+f 2430//107 2714//107 2422//107
+f 2715//108 2717//108 2421//108
+f 2421//108 2717//108 2423//108
+f 2717//117 2716//117 2423//117
+f 2423//117 2716//117 2430//117
+f 2718//106 2719//106 2413//106
+f 2413//106 2719//106 2411//106
+f 2720//107 2718//107 2425//107
+f 2425//107 2718//107 2413//107
+f 2719//108 2721//108 2411//108
+f 2411//108 2721//108 2414//108
+f 2721//117 2720//117 2414//117
+f 2414//117 2720//117 2425//117
+f 2722//106 2723//106 2432//106
+f 2432//106 2723//106 2429//106
+f 2724//107 2722//107 2437//107
+f 2437//107 2722//107 2432//107
+f 2723//108 2725//108 2429//108
+f 2429//108 2725//108 2431//108
+f 2725//117 2724//117 2431//117
+f 2431//117 2724//117 2437//117
+f 2726//106 2727//106 2447//106
+f 2447//106 2727//106 2448//106
+f 2728//107 2726//107 2453//107
+f 2453//107 2726//107 2447//107
+f 2727//108 2729//108 2448//108
+f 2448//108 2729//108 2455//108
+f 2729//117 2728//117 2455//117
+f 2455//117 2728//117 2453//117
+f 2730//106 2731//106 2481//106
+f 2481//106 2731//106 2479//106
+f 2732//107 2730//107 2490//107
+f 2490//107 2730//107 2481//107
+f 2731//108 2733//108 2479//108
+f 2479//108 2733//108 2480//108
+f 2733//117 2732//117 2480//117
+f 2480//117 2732//117 2490//117
+f 2734//106 2735//106 2491//106
+f 2491//106 2735//106 2488//106
+f 2736//107 2734//107 2502//107
+f 2502//107 2734//107 2491//107
+f 2735//108 2737//108 2488//108
+f 2488//108 2737//108 2492//108
+f 2737//117 2736//117 2492//117
+f 2492//117 2736//117 2502//117
+f 2738//106 2739//106 2469//106
+f 2469//106 2739//106 2467//106
+f 2740//107 2738//107 2484//107
+f 2484//107 2738//107 2469//107
+f 2739//108 2741//108 2467//108
+f 2467//108 2741//108 2468//108
+f 2741//117 2740//117 2468//117
+f 2468//117 2740//117 2484//117
+f 2742//106 2743//106 2495//106
+f 2495//106 2743//106 2489//106
+f 2744//107 2742//107 2504//107
+f 2504//107 2742//107 2495//107
+f 2743//108 2745//108 2489//108
+f 2489//108 2745//108 2494//108
+f 2745//117 2744//117 2494//117
+f 2494//117 2744//117 2504//117
+f 2746//106 2747//106 2503//106
+f 2503//106 2747//106 2501//106
+f 2748//107 2746//107 2518//107
+f 2518//107 2746//107 2503//107
+f 2747//108 2749//108 2501//108
+f 2501//108 2749//108 2505//108
+f 2749//117 2748//117 2505//117
+f 2505//117 2748//117 2518//117
+f 2750//108 2751//108 2424//108
+f 2424//108 2751//108 2427//108
+f 2752//106 2750//106 2426//106
+f 2426//106 2750//106 2424//106
+f 2751//117 2753//117 2427//117
+f 2427//117 2753//117 2428//117
+f 2753//107 2752//107 2428//107
+f 2428//107 2752//107 2426//107
+f 2754//108 2755//108 2439//108
+f 2439//108 2755//108 2445//108
+f 2756//106 2754//106 2444//106
+f 2444//106 2754//106 2439//106
+f 2755//117 2757//117 2445//117
+f 2445//117 2757//117 2462//117
+f 2757//107 2756//107 2462//107
+f 2462//107 2756//107 2444//107
+f 2758//108 2759//108 2460//108
+f 2460//108 2759//108 2463//108
+f 2760//106 2758//106 2461//106
+f 2461//106 2758//106 2460//106
+f 2759//117 2761//117 2463//117
+f 2463//117 2761//117 2485//117
+f 2761//107 2760//107 2485//107
+f 2485//107 2760//107 2461//107
+f 2762//108 2763//108 2483//108
+f 2483//108 2763//108 2487//108
+f 2764//106 2762//106 2486//106
+f 2486//106 2762//106 2483//106
+f 2763//117 2765//117 2487//117
+f 2487//117 2765//117 2500//117
+f 2765//107 2764//107 2500//107
+f 2500//107 2764//107 2486//107
+f 2766//108 2767//108 2506//108
+f 2506//108 2767//108 2508//108
+f 2768//106 2766//106 2507//106
+f 2507//106 2766//106 2506//106
+f 2767//117 2769//117 2508//117
+f 2508//117 2769//117 2523//117
+f 2769//107 2768//107 2523//107
+f 2523//107 2768//107 2507//107
+f 2770//108 2771//108 2517//108
+f 2517//108 2771//108 2521//108
+f 2772//106 2770//106 2522//106
+f 2522//106 2770//106 2517//106
+f 2771//117 2773//117 2521//117
+f 2521//117 2773//117 2537//117
+f 2773//107 2772//107 2537//107
+f 2537//107 2772//107 2522//107
+f 2774//106 2775//106 2510//106
+f 2510//106 2775//106 2509//106
+f 2776//107 2774//107 2525//107
+f 2525//107 2774//107 2510//107
+f 2775//108 2777//108 2509//108
+f 2509//108 2777//108 2511//108
+f 2777//117 2776//117 2511//117
+f 2511//117 2776//117 2525//117
+f 2778//106 2779//106 2529//106
+f 2529//106 2779//106 2528//106
+f 2780//107 2778//107 2544//107
+f 2544//107 2778//107 2529//107
+f 2779//108 2781//108 2528//108
+f 2528//108 2781//108 2530//108
+f 2781//117 2780//117 2530//117
+f 2530//117 2780//117 2544//117
+f 2782//106 2783//106 2526//106
+f 2526//106 2783//106 2524//106
+f 2784//107 2782//107 2539//107
+f 2539//107 2782//107 2526//107
+f 2783//108 2785//108 2524//108
+f 2524//108 2785//108 2527//108
+f 2785//117 2784//117 2527//117
+f 2527//117 2784//117 2539//117
+f 2786//106 2787//106 2545//106
+f 2545//106 2787//106 2543//106
+f 2788//107 2786//107 2560//107
+f 2560//107 2786//107 2545//107
+f 2787//108 2789//108 2543//108
+f 2543//108 2789//108 2546//108
+f 2789//117 2788//117 2546//117
+f 2546//117 2788//117 2560//117
+f 2790//106 2791//106 2568//106
+f 2568//106 2791//106 2566//106
+f 2792//107 2790//107 2570//107
+f 2570//107 2790//107 2568//107
+f 2791//108 2793//108 2566//108
+f 2566//108 2793//108 2569//108
+f 2793//117 2792//117 2569//117
+f 2569//117 2792//117 2570//117
+f 2794//135 2795//135 2591//135
+f 2591//135 2795//135 2590//135
+f 2796//136 2794//136 2598//136
+f 2598//136 2794//136 2591//136
+f 2795//116 2797//116 2590//116
+f 2590//116 2797//116 2592//116
+f 2797//111 2796//111 2592//111
+f 2592//111 2796//111 2598//111
+f 2798//135 2799//135 2586//135
+f 2586//135 2799//135 2584//135
+f 2800//136 2798//136 2597//136
+f 2597//136 2798//136 2586//136
+f 2799//116 2801//116 2584//116
+f 2584//116 2801//116 2587//116
+f 2801//111 2800//111 2587//111
+f 2587//111 2800//111 2597//111
+f 2802//135 2803//135 2577//135
+f 2577//135 2803//135 2576//135
+f 2804//136 2802//136 2589//136
+f 2589//136 2802//136 2577//136
+f 2803//116 2805//116 2576//116
+f 2576//116 2805//116 2579//116
+f 2805//111 2804//111 2579//111
+f 2579//111 2804//111 2589//111
+f 2806//108 2807//108 2538//108
+f 2538//108 2807//108 2541//108
+f 2808//106 2806//106 2542//106
+f 2542//106 2806//106 2538//106
+f 2807//117 2809//117 2541//117
+f 2541//117 2809//117 2561//117
+f 2809//107 2808//107 2561//107
+f 2561//107 2808//107 2542//107
+f 2810//108 2811//108 2559//108
+f 2559//108 2811//108 2564//108
+f 2812//106 2810//106 2565//106
+f 2565//106 2810//106 2559//106
+f 2811//117 2813//117 2564//117
+f 2564//117 2813//117 2578//117
+f 2813//107 2812//107 2578//107
+f 2578//107 2812//107 2565//107
+f 2814//135 2815//135 2595//135
+f 2595//135 2815//135 2594//135
+f 2816//136 2814//136 2599//136
+f 2599//136 2814//136 2595//136
+f 2815//116 2817//116 2594//116
+f 2594//116 2817//116 2596//116
+f 2817//111 2816//111 2596//111
+f 2596//111 2816//111 2599//111
+f 2818//135 2819//135 2601//135
+f 2601//135 2819//135 2600//135
+f 2820//136 2818//136 2603//136
+f 2603//136 2818//136 2601//136
+f 2819//116 2821//116 2600//116
+f 2600//116 2821//116 2602//116
+f 2821//111 2820//111 2602//111
+f 2602//111 2820//111 2603//111
+f 2604//109 2606//109 2605//109
+f 2605//109 2606//109 2607//109
+f 2608//109 2610//109 2609//109
+f 2609//109 2610//109 2611//109
+f 2612//109 2614//109 2613//109
+f 2613//109 2614//109 2615//109
+f 2616//109 2618//109 2617//109
+f 2617//109 2618//109 2619//109
+f 2620//109 2622//109 2621//109
+f 2621//109 2622//109 2623//109
+f 2624//109 2626//109 2625//109
+f 2625//109 2626//109 2627//109
+f 2628//109 2630//109 2629//109
+f 2629//109 2630//109 2631//109
+f 2632//109 2634//109 2633//109
+f 2633//109 2634//109 2635//109
+f 2636//109 2638//109 2637//109
+f 2637//109 2638//109 2639//109
+f 2642//109 2645//109 2640//109
+f 2640//109 2645//109 2641//109
+f 2642//109 2646//109 2645//109
+f 2642//109 2644//109 2646//109
+f 2646//109 2648//109 2645//109
+f 2645//109 2643//109 2641//109
+f 2649//109 2647//109 2648//109
+f 2648//109 2647//109 2645//109
+f 2650//109 2652//109 2651//109
+f 2651//109 2652//109 2653//109
+f 2654//109 2656//109 2655//109
+f 2655//109 2656//109 2657//109
+f 2658//109 2660//109 2659//109
+f 2659//109 2660//109 2661//109
+f 2662//109 2664//109 2663//109
+f 2663//109 2664//109 2665//109
+f 2666//109 2668//109 2667//109
+f 2667//109 2668//109 2669//109
+f 2670//109 2672//109 2671//109
+f 2671//109 2672//109 2673//109
+f 2674//109 2676//109 2675//109
+f 2675//109 2676//109 2677//109
+f 2678//109 2680//109 2679//109
+f 2679//109 2680//109 2681//109
+f 2682//109 2684//109 2683//109
+f 2683//109 2684//109 2685//109
+f 2686//109 2688//109 2687//109
+f 2687//109 2688//109 2689//109
+f 2690//109 2692//109 2691//109
+f 2691//109 2692//109 2693//109
+f 2697//109 2701//109 2699//109
+f 2703//109 2707//109 2705//109
+f 2707//109 2708//109 2709//109
+f 2694//109 2696//109 2695//109
+f 2695//109 2696//109 2697//109
+f 2697//109 2696//109 2701//109
+f 2701//109 2700//109 2703//109
+f 2696//109 2700//109 2701//109
+f 2696//109 2698//109 2700//109
+f 2700//109 2702//109 2703//109
+f 2704//109 2706//109 2702//109
+f 2703//109 2706//109 2707//109
+f 2707//109 2706//109 2708//109
+f 2702//109 2706//109 2703//109
+f 2710//109 2712//109 2711//109
+f 2711//109 2712//109 2713//109
+f 2714//109 2716//109 2715//109
+f 2715//109 2716//109 2717//109
+f 2718//109 2720//109 2719//109
+f 2719//109 2720//109 2721//109
+f 2722//109 2724//109 2723//109
+f 2723//109 2724//109 2725//109
+f 2726//109 2728//109 2727//109
+f 2727//109 2728//109 2729//109
+f 2730//109 2732//109 2731//109
+f 2731//109 2732//109 2733//109
+f 2734//109 2736//109 2735//109
+f 2735//109 2736//109 2737//109
+f 2738//109 2740//109 2739//109
+f 2739//109 2740//109 2741//109
+f 2742//109 2744//109 2743//109
+f 2743//109 2744//109 2745//109
+f 2746//109 2748//109 2747//109
+f 2747//109 2748//109 2749//109
+f 2752//109 2753//109 2750//109
+f 2750//109 2753//109 2751//109
+f 2756//109 2757//109 2754//109
+f 2754//109 2757//109 2755//109
+f 2760//109 2761//109 2758//109
+f 2758//109 2761//109 2759//109
+f 2762//109 2764//109 2763//109
+f 2764//109 2765//109 2763//109
+f 2768//109 2769//109 2766//109
+f 2766//109 2769//109 2767//109
+f 2772//109 2773//109 2770//109
+f 2770//109 2773//109 2771//109
+f 2774//109 2776//109 2775//109
+f 2775//109 2776//109 2777//109
+f 2778//109 2780//109 2779//109
+f 2779//109 2780//109 2781//109
+f 2782//109 2784//109 2783//109
+f 2783//109 2784//109 2785//109
+f 2786//109 2788//109 2787//109
+f 2787//109 2788//109 2789//109
+f 2790//109 2792//109 2791//109
+f 2791//109 2792//109 2793//109
+f 2794//109 2796//109 2795//109
+f 2795//109 2796//109 2797//109
+f 2798//109 2801//109 2799//109
+f 2798//109 2800//109 2801//109
+f 2802//109 2805//109 2803//109
+f 2802//109 2804//109 2805//109
+f 2808//109 2809//109 2806//109
+f 2806//109 2809//109 2807//109
+f 2812//109 2813//109 2810//109
+f 2810//109 2813//109 2811//109
+f 2814//109 2817//109 2815//109
+f 2814//109 2816//109 2817//109
+f 2818//109 2821//109 2819//109
+f 2818//109 2820//109 2821//109
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/staircase-landing.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/staircase-landing.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/staircase-landing.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/staircase-landing.obj	2025-08-26 18:16:07.545772112 +0000
@@ -0,0 +1,2976 @@
+# Staircase Landing
+# (C) Linux Studio Plugins Project
+o Windows
+v 2.241009 -1.400000 6.093225
+v 2.241009 -1.400000 5.559892
+v 2.251009 -1.400000 6.093225
+v 2.251009 -1.400000 5.559892
+v 2.241009 0.400000 5.559892
+v 2.251009 0.400000 5.559892
+v 2.241009 0.400000 6.093225
+v 2.251009 0.400000 6.093225
+v 2.241009 -1.400000 3.373589
+v 2.241009 -1.400000 2.840256
+v 2.251009 -1.400000 3.373589
+v 2.251009 -1.400000 2.840256
+v 2.241009 0.400000 2.840256
+v 2.251009 0.400000 2.840256
+v 2.241009 0.400000 3.373589
+v 2.251009 0.400000 3.373589
+v 2.241009 -1.400000 12.165830
+v 2.241009 -1.400000 11.632497
+v 2.251009 -1.400000 12.165830
+v 2.251009 -1.400000 11.632497
+v 2.241009 0.400000 11.632497
+v 2.251009 0.400000 11.632497
+v 2.241009 0.400000 12.165830
+v 2.251009 0.400000 12.165830
+v 2.241009 -1.400000 9.546194
+v 2.241009 0.400000 9.546194
+v 2.251009 -1.400000 9.546194
+v 2.251009 0.400000 9.546194
+v 2.241009 0.400000 10.079527
+v 2.251009 0.400000 10.079527
+v 2.241009 -1.400000 10.079527
+v 2.251009 -1.400000 10.079527
+v 2.241009 -1.400000 9.446194
+v 2.241009 -1.400000 8.912861
+v 2.251009 -1.400000 9.446194
+v 2.251009 -1.400000 8.912861
+v 2.241009 0.400000 8.912861
+v 2.251009 0.400000 8.912861
+v 2.241009 0.400000 9.446194
+v 2.251009 0.400000 9.446194
+v 2.241009 -1.400000 12.265830
+v 2.241009 0.400000 12.265830
+v 2.251009 -1.400000 12.265830
+v 2.251009 0.400000 12.265830
+v 2.241009 0.399999 12.799163
+v 2.251009 0.399999 12.799163
+v 2.241009 -1.400001 12.799163
+v 2.251009 -1.400001 12.799163
+v 2.241009 -1.400000 6.826558
+v 2.241009 0.400000 6.826558
+v 2.251009 -1.400000 6.826558
+v 2.251009 0.400000 6.826558
+v 2.241009 0.400000 7.359891
+v 2.251009 0.400000 7.359891
+v 2.241009 -1.400000 7.359891
+v 2.251009 -1.400000 7.359891
+v 2.241009 -1.400000 4.106922
+v 2.241009 0.400000 4.106922
+v 2.251009 -1.400000 4.106922
+v 2.251009 0.400000 4.106922
+v 2.241009 0.400000 4.640255
+v 2.251009 0.400000 4.640255
+v 2.241009 -1.400000 4.640255
+v 2.251009 -1.400000 4.640255
+v 2.241009 -1.400001 13.432496
+v 2.241009 -1.400001 12.899163
+v 2.251009 -1.400001 13.432496
+v 2.251009 -1.400001 12.899163
+v 2.241009 0.399999 12.899163
+v 2.251009 0.399999 12.899163
+v 2.241009 0.399999 13.432496
+v 2.251009 0.399999 13.432496
+v 2.241009 -1.400000 11.532497
+v 2.241009 -1.400000 10.999164
+v 2.251009 -1.400000 11.532497
+v 2.251009 -1.400000 10.999164
+v 2.241009 0.400000 10.999164
+v 2.251009 0.400000 10.999164
+v 2.241009 0.400000 11.532497
+v 2.251009 0.400000 11.532497
+v 2.241009 -1.400000 6.726558
+v 2.241009 -1.400000 6.193225
+v 2.251009 -1.400000 6.726558
+v 2.251009 -1.400000 6.193225
+v 2.241009 0.400000 6.193225
+v 2.251009 0.400000 6.193225
+v 2.241009 0.400000 6.726558
+v 2.251009 0.400000 6.726558
+v 2.241009 -1.400000 4.006922
+v 2.241009 -1.400000 3.473589
+v 2.251009 -1.400000 4.006922
+v 2.251009 -1.400000 3.473589
+v 2.241009 0.400000 3.473589
+v 2.251009 0.400000 3.473589
+v 2.241009 0.400000 4.006922
+v 2.251009 0.400000 4.006922
+v 2.241009 -1.400000 8.812861
+v 2.241009 -1.400000 8.279528
+v 2.251009 -1.400000 8.812861
+v 2.251009 -1.400000 8.279528
+v 2.241009 0.400000 8.279528
+v 2.251009 0.400000 8.279528
+v 2.241009 0.400000 8.812861
+v 2.251009 0.400000 8.812861
+f 1 2 3
+f 3 2 4
+f 2 5 4
+f 4 5 6
+f 5 7 6
+f 6 7 8
+f 7 1 8
+f 8 1 3
+f 2 1 5
+f 5 1 7
+f 3 4 6
+f 3 6 8
+f 9 10 11
+f 11 10 12
+f 10 13 12
+f 12 13 14
+f 13 15 14
+f 14 15 16
+f 15 9 16
+f 16 9 11
+f 10 9 13
+f 13 9 15
+f 11 12 14
+f 11 14 16
+f 17 18 19
+f 19 18 20
+f 18 21 20
+f 20 21 22
+f 21 23 22
+f 22 23 24
+f 23 17 24
+f 24 17 19
+f 18 17 21
+f 21 17 23
+f 19 20 22
+f 19 22 24
+f 25 26 27
+f 27 26 28
+f 26 29 28
+f 28 29 30
+f 29 31 30
+f 30 31 32
+f 31 25 32
+f 32 25 27
+f 25 31 26
+f 26 31 29
+f 32 27 28
+f 32 28 30
+f 33 34 35
+f 35 34 36
+f 34 37 36
+f 36 37 38
+f 37 39 38
+f 38 39 40
+f 39 33 40
+f 40 33 35
+f 34 33 37
+f 37 33 39
+f 35 36 38
+f 35 38 40
+f 41 42 43
+f 43 42 44
+f 42 45 44
+f 44 45 46
+f 45 47 46
+f 46 47 48
+f 47 41 48
+f 48 41 43
+f 41 47 42
+f 42 47 45
+f 48 43 44
+f 48 44 46
+f 49 50 51
+f 51 50 52
+f 50 53 52
+f 52 53 54
+f 53 55 54
+f 54 55 56
+f 55 49 56
+f 56 49 51
+f 49 55 50
+f 50 55 53
+f 56 51 52
+f 56 52 54
+f 57 58 59
+f 59 58 60
+f 58 61 60
+f 60 61 62
+f 61 63 62
+f 62 63 64
+f 63 57 64
+f 64 57 59
+f 57 63 58
+f 58 63 61
+f 64 59 60
+f 64 60 62
+f 65 66 67
+f 67 66 68
+f 66 69 68
+f 68 69 70
+f 69 71 70
+f 70 71 72
+f 71 65 72
+f 72 65 67
+f 66 65 69
+f 69 65 71
+f 67 68 70
+f 67 70 72
+f 73 74 75
+f 75 74 76
+f 74 77 76
+f 76 77 78
+f 77 79 78
+f 78 79 80
+f 79 73 80
+f 80 73 75
+f 74 73 77
+f 77 73 79
+f 75 76 78
+f 75 78 80
+f 81 82 83
+f 83 82 84
+f 82 85 84
+f 84 85 86
+f 85 87 86
+f 86 87 88
+f 87 81 88
+f 88 81 83
+f 82 81 85
+f 85 81 87
+f 83 84 86
+f 83 86 88
+f 89 90 91
+f 91 90 92
+f 90 93 92
+f 92 93 94
+f 93 95 94
+f 94 95 96
+f 95 89 96
+f 96 89 91
+f 90 89 93
+f 93 89 95
+f 91 92 94
+f 91 94 96
+f 97 98 99
+f 99 98 100
+f 98 101 100
+f 100 101 102
+f 101 103 102
+f 102 103 104
+f 103 97 104
+f 104 97 99
+f 98 97 101
+f 101 97 103
+f 99 100 102
+f 99 102 104
+o Base
+v 2.521319 -2.050000 -0.500000
+v -3.929690 -2.050000 -0.500000
+v 2.521319 1.050000 -0.500000
+v -3.929690 1.050000 -0.500000
+v 2.521319 0.399999 13.432496
+v 2.521319 0.399999 12.899163
+v 2.521319 1.049999 14.738180
+v 2.521319 0.399999 12.799163
+v 2.521319 0.400000 12.265830
+v 2.521319 0.400000 12.165830
+v 2.521319 0.400000 11.632497
+v 2.521319 -2.050001 14.738180
+v 2.521319 -1.400001 13.432496
+v 2.521319 0.400000 11.532497
+v 2.521319 -1.400001 12.899163
+v 2.521319 0.400000 10.999164
+v 2.521319 -1.400001 12.799163
+v 2.521319 -1.400000 12.265830
+v 2.521319 -1.400000 12.165830
+v 2.521319 0.400000 10.079527
+v 2.521319 -1.400000 11.632497
+v 2.521319 -1.400000 11.532497
+v 2.521319 0.400000 9.546194
+v 2.521319 0.400000 9.446194
+v 2.521319 0.400000 8.912861
+v 2.521319 0.400000 8.812861
+v 2.521319 0.400000 8.279528
+v 2.521319 -1.400000 10.999164
+v 2.521319 -1.400000 10.079527
+v 2.521319 -1.400000 9.446194
+v 2.521319 -1.400000 9.546194
+v 2.521319 0.400000 7.359891
+v 2.521319 -1.400000 8.912861
+v 2.521319 -1.400000 8.812861
+v 2.521319 -1.400000 8.279528
+v 2.521319 -1.400000 7.359891
+v 2.521319 0.400000 6.826558
+v 2.521319 -1.400000 6.726558
+v 2.521319 0.400000 6.726558
+v 2.521319 -1.400000 6.826558
+v 2.521319 0.400000 6.193225
+v 2.521319 -1.400000 6.193225
+v 2.521319 0.400000 6.093225
+v 2.521319 -1.400000 6.093225
+v 2.521319 0.400000 5.559892
+v 2.521319 -1.400000 4.640255
+v 2.521319 0.400000 4.640255
+v 2.521319 -1.400000 5.559892
+v 2.521319 -1.400000 4.106922
+v 2.521319 -1.400000 4.006922
+v 2.521319 0.400000 4.106922
+v 2.521319 0.400000 4.006922
+v 2.521319 -1.400000 3.473589
+v 2.521319 -1.400000 3.373589
+v 2.521319 0.400000 3.473589
+v 2.521319 0.400000 3.373589
+v 2.521319 -1.400000 2.840256
+v 2.521319 -0.550000 1.900000
+v 2.521319 0.400000 2.840256
+v 2.521319 -1.550000 1.900000
+v 2.521319 -0.550000 0.000000
+v 2.521319 -1.550000 0.000000
+v -3.927392 -0.471319 0.640000
+v -3.927392 0.328681 0.640000
+v -3.927392 -0.628681 0.640000
+v -3.927392 -1.428681 0.640000
+v -3.923360 0.328681 2.640000
+v -3.921909 0.328681 3.359636
+v -3.923360 -0.471319 2.640000
+v -3.923360 -0.628681 2.640000
+v -3.921909 -0.471319 3.359636
+v -3.921909 -0.628681 3.359636
+v -3.923360 -1.428681 2.640000
+v -3.921909 -1.428681 3.359636
+v -3.917877 0.328681 5.359636
+v -3.916426 0.328681 6.079272
+v -3.917877 -0.471319 5.359636
+v -3.917877 -0.628681 5.359636
+v -3.916426 -0.471319 6.079272
+v -3.916426 -0.628681 6.079272
+v -3.917877 -1.428681 5.359636
+v -3.916426 -1.428681 6.079272
+v -3.912395 0.328681 8.079272
+v -3.912395 -0.471319 8.079272
+v -3.912395 -0.628681 8.079272
+v -3.910944 -0.471319 8.798908
+v -3.910944 0.328681 8.798908
+v -3.910944 -0.628681 8.798908
+v -3.910944 -1.428681 8.798908
+v -3.912395 -1.428681 8.079272
+v -3.906912 0.328681 10.798908
+v -3.906912 -0.471319 10.798908
+v -3.905461 0.328681 11.518544
+v -3.906912 -0.628681 10.798908
+v -3.905461 -0.471319 11.518544
+v -3.905461 -0.628681 11.518544
+v -3.905461 -1.428681 11.518544
+v -3.906912 -1.428681 10.798908
+v -3.898970 1.049999 14.738180
+v -3.901429 0.328680 13.518544
+v -3.901429 -0.471320 13.518544
+v -3.901429 -0.628682 13.518544
+v -3.898970 -2.050001 14.738180
+v -3.901429 -1.428681 13.518544
+v -2.328681 -2.050000 0.640000
+v -3.128681 -2.050000 0.640000
+v -3.128681 -2.050000 2.640000
+v -3.128681 -2.050000 3.359636
+v -2.328681 -2.050000 2.640000
+v -2.328681 -2.050000 3.359636
+v -3.128681 -2.050000 5.359636
+v -3.128681 -2.050000 6.079272
+v -2.328681 -2.050000 5.359636
+v -2.328681 -2.050000 6.079272
+v -3.128681 -2.050000 8.079272
+v -2.328681 -2.050000 8.079272
+v -2.328681 -2.050000 8.798908
+v -3.128681 -2.050000 8.798908
+v -2.328681 -2.050000 10.798908
+v -2.328681 -2.050000 11.518544
+v -3.128681 -2.050000 10.798908
+v -3.128681 -2.050000 11.518544
+v -3.128681 -2.050001 13.518544
+v -2.328681 -2.050001 13.518544
+v -2.328681 1.050000 0.640000
+v -3.128681 1.050000 0.640000
+v -3.128681 1.050000 2.640000
+v -3.128681 1.050000 3.359636
+v -2.328681 1.050000 3.359636
+v -2.328681 1.050000 2.640000
+v -3.128681 1.050000 5.359636
+v -3.128681 1.050000 6.079272
+v -2.328681 1.050000 5.359636
+v -2.328681 1.050000 6.079272
+v -3.128681 1.050000 8.079272
+v -2.328681 1.050000 8.079272
+v -2.328681 1.049999 8.798908
+v -3.128681 1.049999 8.798908
+v -2.328681 1.049999 11.518544
+v -2.328681 1.049999 10.798908
+v -3.128681 1.049999 10.798908
+v -3.128681 1.049999 11.518544
+v -3.128681 1.049999 13.518544
+v -2.328681 1.049999 13.518544
+v 2.021319 -1.400001 13.432496
+v 2.021319 0.399999 13.432496
+v 2.021319 0.399999 12.899163
+v 2.021319 -1.400001 12.899163
+v 2.021319 -1.400000 12.265830
+v 2.021319 -1.400001 12.799163
+v 2.021319 0.399999 12.799163
+v 2.021319 0.400000 12.265830
+v 2.021319 -1.400000 12.165830
+v 2.021319 0.400000 12.165830
+v 2.021319 0.400000 11.632497
+v 2.021319 -1.400000 11.632497
+v 2.021319 -1.400000 11.532497
+v 2.021319 0.400000 11.532497
+v 2.021319 0.400000 10.999164
+v 2.021319 -1.400000 10.999164
+v 2.021319 -1.400000 9.546194
+v 2.021319 -1.400000 10.079527
+v 2.021319 0.400000 10.079527
+v 2.021319 0.400000 9.546194
+v 2.021319 -1.400000 9.446194
+v 2.021319 0.400000 9.446194
+v 2.021319 0.400000 8.912861
+v 2.021319 -1.400000 8.912861
+v 2.021319 -1.400000 8.812861
+v 2.021319 0.400000 8.812861
+v 2.021319 0.400000 8.279528
+v 2.021319 -1.400000 8.279528
+v 2.021319 -1.400000 6.826558
+v 2.021319 -1.400000 7.359891
+v 2.021319 0.400000 7.359891
+v 2.021319 0.400000 6.826558
+v 2.021319 -1.400000 6.726558
+v 2.021319 0.400000 6.726558
+v 2.021319 0.400000 6.193225
+v 2.021319 -1.400000 6.193225
+v 2.021319 -1.400000 6.093225
+v 2.021319 0.400000 6.093225
+v 2.021319 0.400000 5.559892
+v 2.021319 -1.400000 5.559892
+v 2.021319 -1.400000 4.106922
+v 2.021319 -1.400000 4.640255
+v 2.021319 0.400000 4.640255
+v 2.021319 0.400000 4.106922
+v 2.021319 -1.400000 4.006922
+v 2.021319 0.400000 4.006922
+v 2.021319 0.400000 3.473589
+v 2.021319 -1.400000 3.473589
+v 2.021319 -1.400000 3.373589
+v 2.021319 0.400000 3.373589
+v 2.021319 0.400000 2.840256
+v 2.021319 -1.400000 2.840256
+v 2.021319 -1.550000 1.900000
+v 2.021319 -0.550000 1.900000
+v 2.021319 -0.550000 0.000000
+v 2.021319 -1.550000 0.000000
+v -3.428681 -0.450000 0.640000
+v -3.428681 0.328681 0.640000
+v -3.428681 -0.471319 0.640000
+v -3.428681 0.328681 2.640000
+v -3.428681 -0.471319 2.640000
+v -3.428681 -0.450000 3.359636
+v -3.428681 0.328681 3.359636
+v -3.428681 -0.471319 3.359636
+v -3.428681 0.328681 5.359636
+v -3.428681 -0.471319 5.359636
+v -3.428681 -0.450000 6.079272
+v -3.428681 0.328681 6.079272
+v -3.428681 -0.471319 6.079272
+v -3.428681 0.328681 8.079272
+v -3.428681 -0.471319 8.079272
+v -3.428681 -0.450000 8.798908
+v -3.428681 0.328681 8.798908
+v -3.428681 -0.471319 8.798908
+v -3.428681 0.328681 10.798908
+v -3.428681 -0.471319 10.798908
+v -3.428681 0.328681 11.518544
+v -3.428681 -0.471319 11.518544
+v -3.428681 0.328680 13.518544
+v -3.428681 -0.471320 13.518544
+v -3.428681 -0.628681 0.640000
+v -3.428681 -0.628681 2.640000
+v -3.428681 -1.428681 2.640000
+v -3.428681 -1.428681 0.640000
+v -3.428681 -0.628681 3.359636
+v -3.428681 -0.628681 5.359636
+v -3.428681 -1.428681 5.359636
+v -3.428681 -1.428681 3.359636
+v -3.428681 -0.628681 6.079272
+v -3.428681 -0.628681 8.079272
+v -3.428681 -1.428681 8.079272
+v -3.428681 -1.428681 6.079272
+v -3.428681 -0.628681 8.798908
+v -3.428681 -0.628681 10.798908
+v -3.428681 -1.428681 10.798908
+v -3.428681 -1.428681 8.798908
+v -3.428681 -0.628681 11.518544
+v -3.428681 -0.628682 13.518544
+v -3.428681 -1.428681 13.518544
+v -3.428681 -1.428681 11.518544
+v -3.128681 -1.550000 2.640000
+v -3.128681 -1.550000 0.640000
+v -2.328681 -1.550000 2.640000
+v -2.328681 -1.550000 0.640000
+v -3.128681 -1.550000 5.359636
+v -3.128681 -1.550000 3.359636
+v -2.328681 -1.550000 5.359636
+v -2.328681 -1.550000 3.359636
+v -3.128681 -1.550000 8.079272
+v -3.128681 -1.550000 6.079272
+v -2.328681 -1.550000 8.079272
+v -2.328681 -1.550000 6.079272
+v -3.128681 -1.550000 10.798908
+v -3.128681 -1.550000 8.798908
+v -2.328681 -1.550000 10.798908
+v -2.328681 -1.550000 8.798908
+v -3.128681 -1.550001 13.518544
+v -3.128681 -1.550000 11.518544
+v -2.328681 -1.550001 13.518544
+v -2.328681 -1.550000 11.518544
+v -3.128681 0.550000 0.640000
+v -3.128681 0.450000 2.640000
+v -3.128681 0.450000 0.640000
+v -2.328681 0.450000 2.640000
+v -2.328681 0.550000 0.640000
+v -2.328681 0.450000 0.640000
+v -3.128681 0.550000 3.359636
+v -3.128681 0.450000 5.359636
+v -3.128681 0.450000 3.359636
+v -2.328681 0.450000 5.359636
+v -2.328681 0.550000 3.359636
+v -2.328681 0.450000 3.359636
+v -3.128681 0.550000 6.079272
+v -3.128681 0.450000 8.079272
+v -3.128681 0.450000 6.079272
+v -2.328681 0.450000 8.079272
+v -2.328681 0.550000 6.079272
+v -2.328681 0.450000 6.079272
+v -3.128681 0.549999 8.798908
+v -3.128681 0.450000 10.798908
+v -3.128681 0.450000 8.798908
+v -2.328681 0.450000 10.798908
+v -2.328681 0.549999 8.798908
+v -2.328681 0.450000 8.798908
+v -3.128681 0.549999 11.518544
+v -3.128681 0.449999 13.518544
+v -3.128681 0.450000 11.518544
+v -2.328681 0.449999 13.518544
+v -2.328681 0.549999 11.518544
+v -2.328681 0.450000 11.518544
+v 2.021319 -0.550000 10.399163
+v 2.021319 -1.550000 10.399163
+v 2.021319 0.450000 10.399163
+v 2.021319 -0.450000 10.399163
+v 2.021319 -1.550001 14.238180
+v 2.021319 0.449999 14.238180
+v 2.021319 -0.550000 7.679528
+v 2.021319 -1.550000 7.679528
+v 2.021319 -1.550000 10.199163
+v 2.021319 0.450000 7.679528
+v 2.021319 -0.450000 7.679528
+v 2.021319 -0.550000 10.199163
+v 2.021319 0.450000 10.199163
+v 2.021319 -0.450000 10.199163
+v 2.021319 -0.550000 4.959891
+v 2.021319 -1.550000 4.959891
+v 2.021319 -1.550000 7.479527
+v 2.021319 0.450000 4.959891
+v 2.021319 -0.450000 4.959891
+v 2.021319 -0.550000 7.479527
+v 2.021319 0.450000 7.479527
+v 2.021319 -0.450000 7.479527
+v 2.021319 -0.550000 2.240256
+v 2.021319 -1.550000 2.240256
+v 2.021319 -1.550000 4.759892
+v 2.021319 0.450000 2.240256
+v 2.021319 -0.450000 2.240256
+v 2.021319 -0.550000 4.759892
+v 2.021319 0.450000 4.759892
+v 2.021319 -0.450000 4.759892
+v 2.021319 0.450000 0.000000
+v 2.021319 -0.550000 2.040256
+v 2.021319 -1.550000 2.040256
+v 2.021319 -0.450000 2.040256
+v 2.021319 0.450000 2.040256
+v -1.081855 -0.550000 0.000000
+v -1.081855 -1.550000 0.000000
+v -1.623239 -1.550000 0.480000
+v -1.846778 -1.550000 0.480000
+v -1.846778 -1.550000 0.640000
+v -1.346111 -1.550000 0.320000
+v -1.636108 -1.550000 0.320000
+v -1.068983 -1.550000 0.160000
+v -1.358983 -1.550000 0.160000
+v -2.000000 -1.550000 1.900000
+v -1.900368 -1.550000 0.640000
+v -2.000000 -1.550000 0.640000
+v -1.900368 -0.450000 0.640000
+v -1.900368 -0.550000 0.640000
+v -3.428681 -0.550000 0.640000
+v -1.900368 0.450000 0.640000
+v -3.428681 0.450000 0.640000
+v -3.428681 -0.550000 3.159636
+v -3.428681 -1.550000 3.159636
+v -3.428681 -0.450000 3.159636
+v -3.428681 0.450000 3.159636
+v -3.428681 -1.550000 0.640000
+v -1.900368 -0.450000 3.359636
+v -3.428681 -0.550000 3.359636
+v -1.846778 -0.550000 3.359636
+v -1.846778 -0.450000 3.359636
+v -3.428681 0.450000 3.359636
+v -1.900368 0.450000 3.359636
+v -3.428681 -0.550000 5.879272
+v -3.428681 -1.550000 5.879272
+v -3.428681 -0.450000 5.879272
+v -3.428681 0.450000 5.879272
+v -3.428681 -1.550000 3.359636
+v -1.900368 -0.450000 6.079272
+v -3.428681 -0.550000 6.079272
+v -1.846778 -0.550000 6.079272
+v -1.846778 -0.450000 6.079272
+v -3.428681 0.450000 6.079272
+v -1.900368 0.450000 6.079272
+v -3.428681 -0.550000 8.598908
+v -3.428681 -1.550000 8.598908
+v -3.428681 -0.450000 8.598908
+v -3.428681 0.450000 8.598908
+v -3.428681 -1.550000 6.079272
+v -1.900368 -0.450000 8.798908
+v -3.428681 -0.550000 8.798908
+v -1.846778 -0.550000 8.798908
+v -1.846778 -0.450000 8.798908
+v -3.428681 0.450000 8.798908
+v -1.900368 0.450000 8.798908
+v -3.428681 -0.550000 11.318544
+v -3.428681 -1.550000 11.318544
+v -3.428681 0.450000 11.318544
+v -3.428681 -1.550000 8.798908
+v -1.066343 0.450000 11.518544
+v -1.066343 -0.550000 11.518544
+v -3.428681 -0.550000 11.518544
+v -3.428681 0.450000 11.518544
+v -3.428681 -1.550001 14.238180
+v -3.428681 0.449999 14.238180
+v -3.428681 -1.550000 11.518544
+v -1.846778 -1.550000 3.359636
+v -1.846778 -1.550000 6.079272
+v -1.846778 -1.550000 8.798908
+v -1.066343 -1.550000 11.518544
+v -1.846778 -1.550000 3.159636
+v -1.409932 -1.550000 3.159636
+v 0.528891 -1.550000 2.040256
+v 0.598854 -1.550000 2.040256
+v -0.789214 -1.550000 3.199636
+v -1.080341 -1.550000 3.199636
+v -1.066343 -1.550000 3.359636
+v -0.513213 -1.550000 3.039636
+v -0.803212 -1.550000 3.039636
+v -0.235012 -1.550000 2.879636
+v -0.527211 -1.550000 2.879636
+v 0.041043 -1.550000 2.720255
+v -0.248956 -1.550000 2.720255
+v 0.319298 -1.550000 2.559636
+v 0.026991 -1.550000 2.559636
+v 0.595300 -1.550000 2.399636
+v 0.305300 -1.550000 2.399636
+v -1.846778 -1.550000 5.879272
+v 0.581356 -1.550000 2.240256
+v -1.409932 -1.550000 5.879272
+v 0.528891 -1.550000 4.759892
+v 0.598854 -1.550000 4.759892
+v -0.789214 -1.550000 5.919272
+v -1.080341 -1.550000 5.919272
+v -1.066343 -1.550000 6.079272
+v -0.513213 -1.550000 5.759272
+v -0.803212 -1.550000 5.759272
+v -0.235012 -1.550000 5.599272
+v -0.527211 -1.550000 5.599272
+v 0.041043 -1.550000 5.439891
+v -0.248956 -1.550000 5.439891
+v 0.319298 -1.550000 5.279272
+v 0.026991 -1.550000 5.279272
+v 0.595300 -1.550000 5.119272
+v 0.305300 -1.550000 5.119272
+v -1.846778 -1.550000 8.598908
+v 0.581356 -1.550000 4.959891
+v -1.409932 -1.550000 8.598908
+v 0.528891 -1.550000 7.479527
+v 0.598854 -1.550000 7.479527
+v -0.789214 -1.550000 8.638908
+v -1.080341 -1.550000 8.638908
+v -1.066343 -1.550000 8.798908
+v -0.513213 -1.550000 8.478908
+v -0.803212 -1.550000 8.478908
+v -0.235012 -1.550000 8.318908
+v -0.527211 -1.550000 8.318908
+v 0.041043 -1.550000 8.159527
+v -0.248956 -1.550000 8.159527
+v 0.319298 -1.550000 7.998908
+v 0.026991 -1.550000 7.998908
+v 0.595300 -1.550000 7.838908
+v 0.305300 -1.550000 7.838908
+v 0.581356 -1.550000 7.679528
+v -1.409932 -1.550000 11.318544
+v 0.528891 -1.550000 10.199163
+v 0.598854 -1.550000 10.199163
+v -0.789214 -1.550000 11.358544
+v -1.080341 -1.550000 11.358544
+v -0.513213 -1.550000 11.198544
+v -0.803212 -1.550000 11.198544
+v -0.235012 -1.550000 11.038544
+v -0.527211 -1.550000 11.038544
+v 0.041043 -1.550000 10.879163
+v -0.248956 -1.550000 10.879163
+v 0.319298 -1.550000 10.718544
+v 0.026991 -1.550000 10.718544
+v 0.595300 -1.550000 10.558544
+v 0.305300 -1.550000 10.558544
+v 0.581356 -1.550000 10.399163
+v -1.914312 0.450000 0.799381
+v -1.624312 0.450000 0.799381
+v -1.638310 0.450000 0.959381
+v -1.346004 0.450000 0.959381
+v -1.360056 0.450000 1.120000
+v -1.070056 0.450000 1.120000
+v -1.084000 0.450000 1.279381
+v -0.791801 0.450000 1.279381
+v -0.805799 0.450000 1.439381
+v -0.515800 0.450000 1.439381
+v -0.529798 0.450000 1.599381
+v -1.846778 0.450000 3.159636
+v -0.238671 0.450000 1.599381
+v -0.252669 0.450000 1.759381
+v 0.039583 0.450000 1.759381
+v 0.025585 0.450000 1.919381
+v 0.316764 0.450000 1.919381
+v 0.302635 0.450000 2.080874
+v 0.595300 0.450000 2.080874
+v 0.581356 0.450000 2.240256
+v 0.924946 0.450000 4.759892
+v -1.914312 0.450000 3.519017
+v -1.624312 0.450000 3.519017
+v -1.638310 0.450000 3.679017
+v -1.346004 0.450000 3.679017
+v -1.360056 0.450000 3.839636
+v -1.070056 0.450000 3.839636
+v -1.084000 0.450000 3.999017
+v -0.791801 0.450000 3.999017
+v -0.805799 0.450000 4.159017
+v -0.515800 0.450000 4.159017
+v -0.529798 0.450000 4.319017
+v -1.846778 0.450000 5.879272
+v -0.238671 0.450000 4.319017
+v -0.252669 0.450000 4.479017
+v 0.039583 0.450000 4.479017
+v 0.025585 0.450000 4.639017
+v 0.316764 0.450000 4.639017
+v 0.302635 0.450000 4.800510
+v 0.595300 0.450000 4.800510
+v 0.581356 0.450000 4.959891
+v 0.924946 0.450000 7.479527
+v -1.914312 0.450000 6.238653
+v -1.624312 0.450000 6.238653
+v -1.638310 0.450000 6.398653
+v -1.346004 0.450000 6.398653
+v -1.360056 0.450000 6.559272
+v -1.070056 0.450000 6.559272
+v -1.084000 0.450000 6.718653
+v -0.791801 0.450000 6.718653
+v -0.805799 0.450000 6.878653
+v -0.515800 0.450000 6.878653
+v -0.529798 0.450000 7.038653
+v -1.846778 0.450000 8.598908
+v -0.238671 0.450000 7.038653
+v -0.252669 0.450000 7.198653
+v 0.039583 0.450000 7.198653
+v 0.025585 0.450000 7.358653
+v 0.316764 0.450000 7.358653
+v 0.302635 0.450000 7.520146
+v 0.595300 0.450000 7.520146
+v 0.581356 0.450000 7.679528
+v 0.924946 0.450000 10.199163
+v -1.914312 0.450000 8.958289
+v -1.624312 0.450000 8.958289
+v -1.638310 0.450000 9.118289
+v -1.346004 0.450000 9.118289
+v -1.360056 0.450000 9.278908
+v -1.070056 0.450000 9.278908
+v -1.084000 0.450000 9.438289
+v -0.791801 0.450000 9.438289
+v -0.805799 0.450000 9.598289
+v -0.515800 0.450000 9.598289
+v -0.529798 0.450000 9.758289
+v -0.238671 0.450000 9.758289
+v -0.252669 0.450000 9.918289
+v 0.039583 0.450000 9.918289
+v 0.025585 0.450000 10.078289
+v -1.083840 0.450000 11.318544
+v 0.316764 0.450000 10.078289
+v 0.302635 0.450000 10.239782
+v 0.581356 0.450000 10.399163
+v 0.595300 0.450000 10.239782
+v 0.581356 -0.550000 10.399163
+v 0.581356 -0.450000 10.399163
+v 0.924946 -0.450000 10.199163
+v 0.598854 -0.550000 10.199163
+v 0.598854 -0.450000 10.199163
+v 0.581356 -0.550000 7.679528
+v 0.581356 -0.450000 7.679528
+v 0.924946 -0.450000 7.479527
+v 0.598854 -0.550000 7.479527
+v 0.598854 -0.450000 7.479527
+v 0.581356 -0.550000 4.959891
+v 0.581356 -0.450000 4.959891
+v 0.924946 -0.450000 4.759892
+v 0.598854 -0.550000 4.759892
+v 0.598854 -0.450000 4.759892
+v 0.581356 -0.550000 2.240256
+v 0.581356 -0.450000 2.240256
+v -1.900368 0.450000 0.000000
+v -1.846778 0.450000 0.440000
+v -1.900368 0.450000 0.440000
+v 0.924946 0.450000 2.040256
+v 0.924946 -0.450000 2.040256
+v 0.598854 -0.550000 2.040256
+v 0.598854 -0.450000 2.040256
+v -1.900368 -0.550000 0.000000
+v -1.068983 -0.550000 0.160000
+v -1.846778 -0.450000 0.640000
+v -1.846778 -0.550000 0.480000
+v -1.846778 -0.550000 0.440000
+v -1.846778 -0.450000 0.440000
+v -1.623239 -0.550000 0.480000
+v -1.636108 -0.550000 0.320000
+v -1.346111 -0.550000 0.320000
+v -1.358983 -0.550000 0.160000
+v -1.914312 -0.450000 0.799381
+v -1.846778 -0.550000 3.159636
+v -1.846778 -0.450000 3.159636
+v -1.914312 -0.450000 3.519017
+v -1.624312 -0.450000 3.519017
+v -1.346004 -0.450000 3.679017
+v -1.638310 -0.450000 3.679017
+v -1.070056 -0.450000 3.839636
+v -1.360056 -0.450000 3.839636
+v -0.791801 -0.450000 3.999017
+v -1.084000 -0.450000 3.999017
+v -0.515800 -0.450000 4.159017
+v -0.805799 -0.450000 4.159017
+v -0.238671 -0.450000 4.319017
+v -0.529798 -0.450000 4.319017
+v 0.039583 -0.450000 4.479017
+v -0.252669 -0.450000 4.479017
+v 0.316764 -0.450000 4.639017
+v 0.025585 -0.450000 4.639017
+v 0.302635 -0.450000 4.800510
+v 0.595300 -0.450000 4.800510
+v -1.846778 -0.550000 5.879272
+v -1.846778 -0.450000 5.879272
+v -1.914312 -0.450000 6.238653
+v -1.624312 -0.450000 6.238653
+v -1.346004 -0.450000 6.398653
+v -1.638310 -0.450000 6.398653
+v -1.070056 -0.450000 6.559272
+v -1.360056 -0.450000 6.559272
+v -0.791801 -0.450000 6.718653
+v -1.084000 -0.450000 6.718653
+v -0.515800 -0.450000 6.878653
+v -0.805799 -0.450000 6.878653
+v -0.238671 -0.450000 7.038653
+v -0.529798 -0.450000 7.038653
+v 0.039583 -0.450000 7.198653
+v -0.252669 -0.450000 7.198653
+v 0.316764 -0.450000 7.358653
+v 0.025585 -0.450000 7.358653
+v 0.302635 -0.450000 7.520146
+v 0.595300 -0.450000 7.520146
+v -1.846778 -0.550000 8.598908
+v -1.846778 -0.450000 8.598908
+v -1.914312 -0.450000 8.958289
+v -1.624312 -0.450000 8.958289
+v -1.346004 -0.450000 9.118289
+v -1.638310 -0.450000 9.118289
+v -1.070056 -0.450000 9.278908
+v -1.360056 -0.450000 9.278908
+v -0.791801 -0.450000 9.438289
+v -1.084000 -0.450000 9.438289
+v -0.515800 -0.450000 9.598289
+v -0.805799 -0.450000 9.598289
+v -0.238671 -0.450000 9.758289
+v -0.529798 -0.450000 9.758289
+v 0.039583 -0.450000 9.918289
+v -0.252669 -0.450000 9.918289
+v 0.316764 -0.450000 10.078289
+v 0.025585 -0.450000 10.078289
+v 0.302635 -0.450000 10.239782
+v 0.595300 -0.450000 10.239782
+v -1.409932 -0.550000 11.318544
+v -1.083840 -0.550000 11.318544
+v -1.080341 -0.550000 11.358544
+v -1.066343 -0.550000 3.359636
+v -1.066343 -0.550000 6.079272
+v -1.066343 -0.550000 8.798908
+v 0.528891 -0.550000 2.040256
+v -1.409932 -0.550000 3.159636
+v -1.080341 -0.550000 3.199636
+v -0.789214 -0.550000 3.199636
+v -0.803212 -0.550000 3.039636
+v -0.513213 -0.550000 3.039636
+v -0.527211 -0.550000 2.879636
+v -0.235012 -0.550000 2.879636
+v -0.248956 -0.550000 2.720255
+v 0.041043 -0.550000 2.720255
+v 0.026991 -0.550000 2.559636
+v 0.319298 -0.550000 2.559636
+v 0.305300 -0.550000 2.399636
+v 0.595300 -0.550000 2.399636
+v 0.528891 -0.550000 4.759892
+v -1.409932 -0.550000 5.879272
+v -1.080341 -0.550000 5.919272
+v -0.789214 -0.550000 5.919272
+v -0.803212 -0.550000 5.759272
+v -0.513213 -0.550000 5.759272
+v -0.527211 -0.550000 5.599272
+v -0.235012 -0.550000 5.599272
+v -0.248956 -0.550000 5.439891
+v 0.041043 -0.550000 5.439891
+v 0.026991 -0.550000 5.279272
+v 0.319298 -0.550000 5.279272
+v 0.305300 -0.550000 5.119272
+v 0.595300 -0.550000 5.119272
+v 0.528891 -0.550000 7.479527
+v -1.409932 -0.550000 8.598908
+v -1.080341 -0.550000 8.638908
+v -0.789214 -0.550000 8.638908
+v -0.803212 -0.550000 8.478908
+v -0.513213 -0.550000 8.478908
+v -0.527211 -0.550000 8.318908
+v -0.235012 -0.550000 8.318908
+v -0.248956 -0.550000 8.159527
+v 0.041043 -0.550000 8.159527
+v 0.026991 -0.550000 7.998908
+v 0.319298 -0.550000 7.998908
+v 0.305300 -0.550000 7.838908
+v 0.595300 -0.550000 7.838908
+v 0.528891 -0.550000 10.199163
+v -0.789214 -0.550000 11.358544
+v -0.803212 -0.550000 11.198544
+v -0.513213 -0.550000 11.198544
+v -0.527211 -0.550000 11.038544
+v -0.235012 -0.550000 11.038544
+v -0.248956 -0.550000 10.879163
+v 0.041043 -0.550000 10.879163
+v 0.026991 -0.550000 10.718544
+v 0.319298 -0.550000 10.718544
+v 0.305300 -0.550000 10.558544
+v 0.595300 -0.550000 10.558544
+v -1.624312 -0.450000 0.799381
+v -1.638310 -0.450000 0.959381
+v -1.346004 -0.450000 0.959381
+v -1.360056 -0.450000 1.120000
+v -1.070056 -0.450000 1.120000
+v -1.084000 -0.450000 1.279381
+v -0.791801 -0.450000 1.279381
+v -0.805799 -0.450000 1.439381
+v -0.515800 -0.450000 1.439381
+v -0.529798 -0.450000 1.599381
+v -0.238671 -0.450000 1.599381
+v -0.252669 -0.450000 1.759381
+v 0.039583 -0.450000 1.759381
+v 0.025585 -0.450000 1.919381
+v 0.316764 -0.450000 1.919381
+v 0.302635 -0.450000 2.080874
+v 0.595300 -0.450000 2.080874
+v -1.900368 -0.450000 0.440000
+v -1.900368 -0.550000 0.440000
+f 105 106 107
+f 107 106 108
+f 109 110 111
+f 110 112 111
+f 112 113 111
+f 113 114 111
+f 114 115 111
+f 116 117 111
+f 111 117 109
+f 115 118 111
+f 116 119 117
+f 118 120 111
+f 119 121 110
+f 110 121 112
+f 116 121 119
+f 116 122 121
+f 122 123 113
+f 113 123 114
+f 116 123 122
+f 120 124 111
+f 116 125 123
+f 125 126 115
+f 116 126 125
+f 115 126 118
+f 124 127 111
+f 127 128 111
+f 128 129 111
+f 129 130 111
+f 130 131 111
+f 132 133 120
+f 120 133 124
+f 127 134 128
+f 135 134 127
+f 131 136 111
+f 129 137 130
+f 137 138 130
+f 131 139 136
+f 139 140 136
+f 141 142 143
+f 144 142 141
+f 145 146 147
+f 146 148 147
+f 149 150 151
+f 152 150 149
+f 153 154 155
+f 155 154 156
+f 157 158 159
+f 159 158 160
+f 161 162 163
+f 136 107 111
+f 143 107 141
+f 147 107 145
+f 141 107 136
+f 151 107 149
+f 145 107 143
+f 149 107 147
+f 155 107 151
+f 156 107 155
+f 159 107 156
+f 163 107 160
+f 160 107 159
+f 162 107 163
+f 158 164 161
+f 157 164 158
+f 161 164 162
+f 162 165 107
+f 164 105 166
+f 166 105 165
+f 165 105 107
+f 116 105 164
+f 116 164 157
+f 116 157 154
+f 116 154 153
+f 116 153 150
+f 116 150 152
+f 116 152 148
+f 116 148 146
+f 116 146 142
+f 116 142 144
+f 116 144 140
+f 116 140 139
+f 116 139 138
+f 116 138 137
+f 116 137 134
+f 116 134 135
+f 116 135 133
+f 116 133 132
+f 116 132 126
+f 108 167 168
+f 108 106 167
+f 167 106 169
+f 106 170 169
+f 168 171 108
+f 171 172 108
+f 171 173 172
+f 167 174 173
+f 169 174 167
+f 173 175 172
+f 174 176 173
+f 173 176 175
+f 106 177 170
+f 177 178 174
+f 174 178 176
+f 172 179 108
+f 179 180 108
+f 176 181 175
+f 176 182 181
+f 181 183 179
+f 179 183 180
+f 181 184 183
+f 182 184 181
+f 185 186 182
+f 182 186 184
+f 180 187 108
+f 184 188 183
+f 184 189 188
+f 188 190 187
+f 189 190 188
+f 187 190 191
+f 189 192 190
+f 189 193 192
+f 194 193 189
+f 195 196 197
+f 190 198 196
+f 192 198 190
+f 196 199 197
+f 198 200 196
+f 196 200 199
+f 198 201 200
+f 202 201 198
+f 197 203 195
+f 195 203 191
+f 204 203 197
+f 187 203 108
+f 191 203 187
+f 204 205 203
+f 200 206 199
+f 199 206 205
+f 206 207 205
+f 205 207 203
+f 201 207 208
+f 208 207 206
+f 106 207 177
+f 177 207 178
+f 178 207 185
+f 185 207 186
+f 186 207 194
+f 194 207 193
+f 193 207 202
+f 202 207 201
+f 106 209 210
+f 210 211 106
+f 211 212 106
+f 213 214 211
+f 211 214 212
+f 209 105 213
+f 213 105 214
+f 106 105 209
+f 212 215 106
+f 215 216 106
+f 105 217 214
+f 215 217 216
+f 105 218 217
+f 217 218 216
+f 216 219 106
+f 105 220 218
+f 220 221 219
+f 219 221 222
+f 223 224 225
+f 225 224 226
+f 225 207 222
+f 227 207 226
+f 219 207 106
+f 222 207 219
+f 226 207 225
+f 227 228 207
+f 221 116 223
+f 224 116 228
+f 220 116 221
+f 105 116 220
+f 223 116 224
+f 228 116 207
+f 229 108 230
+f 231 230 108
+f 232 231 108
+f 233 234 231
+f 233 231 232
+f 107 229 234
+f 107 234 233
+f 107 108 229
+f 235 232 108
+f 236 235 108
+f 237 107 233
+f 238 237 235
+f 238 107 237
+f 238 235 236
+f 239 236 108
+f 240 107 238
+f 241 240 239
+f 241 239 242
+f 243 244 245
+f 243 245 246
+f 203 245 242
+f 203 247 246
+f 203 239 108
+f 203 242 239
+f 203 246 245
+f 248 247 203
+f 111 241 244
+f 111 243 248
+f 111 240 241
+f 111 107 240
+f 111 244 243
+f 111 248 203
+f 207 116 203
+f 203 116 111
+f 249 250 109
+f 249 109 117
+f 250 251 110
+f 250 110 109
+f 252 249 117
+f 252 117 119
+f 251 252 119
+f 251 119 110
+f 253 254 121
+f 253 121 122
+f 254 255 112
+f 254 112 121
+f 256 253 122
+f 256 122 113
+f 255 256 113
+f 255 113 112
+f 257 258 114
+f 257 114 123
+f 258 259 115
+f 258 115 114
+f 260 257 123
+f 260 123 125
+f 259 260 125
+f 259 125 115
+f 261 262 118
+f 261 118 126
+f 262 263 120
+f 262 120 118
+f 264 261 126
+f 264 126 132
+f 263 264 132
+f 263 132 120
+f 265 266 133
+f 265 133 135
+f 266 267 124
+f 266 124 133
+f 268 265 135
+f 268 135 127
+f 267 268 127
+f 267 127 124
+f 269 270 128
+f 269 128 134
+f 270 271 129
+f 270 129 128
+f 272 269 134
+f 272 134 137
+f 271 272 137
+f 271 137 129
+f 273 274 130
+f 273 130 138
+f 274 275 131
+f 274 131 130
+f 276 273 138
+f 276 138 139
+f 275 276 139
+f 275 139 131
+f 277 278 140
+f 277 140 144
+f 278 279 136
+f 278 136 140
+f 280 277 144
+f 280 144 141
+f 279 280 141
+f 279 141 136
+f 281 282 143
+f 281 143 142
+f 282 283 145
+f 282 145 143
+f 284 281 142
+f 284 142 146
+f 283 284 146
+f 283 146 145
+f 285 286 147
+f 285 147 148
+f 286 287 149
+f 286 149 147
+f 288 285 148
+f 288 148 152
+f 287 288 152
+f 287 152 149
+f 289 290 150
+f 289 150 153
+f 290 291 151
+f 290 151 150
+f 292 289 153
+f 292 153 155
+f 291 292 155
+f 291 155 151
+f 293 294 156
+f 293 156 154
+f 294 295 159
+f 294 159 156
+f 296 293 154
+f 296 154 157
+f 295 296 157
+f 295 157 159
+f 297 298 160
+f 297 160 158
+f 298 299 163
+f 298 163 160
+f 300 297 158
+f 300 158 161
+f 299 300 161
+f 299 161 163
+f 162 164 301
+f 162 301 302
+f 303 162 302
+f 165 162 303
+f 166 165 303
+f 166 303 304
+f 301 166 304
+f 164 166 301
+f 168 305 306
+f 305 167 307
+f 168 167 305
+f 171 306 308
+f 171 168 306
+f 173 171 309
+f 309 171 308
+f 167 173 307
+f 307 173 309
+f 172 310 311
+f 310 175 312
+f 172 175 310
+f 179 311 313
+f 179 172 311
+f 181 179 314
+f 314 179 313
+f 175 181 312
+f 312 181 314
+f 180 315 316
+f 315 183 317
+f 180 183 315
+f 187 316 318
+f 187 180 316
+f 188 187 319
+f 319 187 318
+f 183 188 317
+f 317 188 319
+f 191 320 321
+f 320 190 322
+f 191 190 320
+f 195 321 323
+f 195 191 321
+f 196 195 324
+f 324 195 323
+f 190 196 322
+f 322 196 324
+f 197 199 325
+f 325 199 326
+f 204 325 327
+f 204 197 325
+f 205 204 328
+f 328 204 327
+f 199 205 326
+f 326 205 328
+f 174 169 329
+f 174 329 330
+f 177 174 330
+f 177 330 331
+f 332 177 331
+f 170 177 332
+f 169 170 332
+f 169 332 329
+f 182 176 333
+f 182 333 334
+f 185 182 334
+f 185 334 335
+f 336 185 335
+f 178 185 336
+f 176 178 336
+f 176 336 333
+f 189 184 337
+f 189 337 338
+f 194 189 338
+f 194 338 339
+f 340 194 339
+f 186 194 340
+f 184 186 340
+f 184 340 337
+f 198 192 341
+f 198 341 342
+f 202 198 342
+f 202 342 343
+f 344 202 343
+f 193 202 344
+f 192 193 344
+f 192 344 341
+f 206 200 345
+f 206 345 346
+f 208 206 346
+f 208 346 347
+f 348 208 347
+f 201 208 348
+f 200 201 348
+f 200 348 345
+f 210 349 211
+f 350 349 210
+f 349 351 213
+f 349 213 211
+f 213 352 209
+f 351 352 213
+f 352 350 210
+f 352 210 209
+f 212 353 215
+f 354 353 212
+f 353 355 217
+f 353 217 215
+f 217 356 214
+f 355 356 217
+f 356 354 212
+f 356 212 214
+f 216 357 219
+f 358 357 216
+f 357 359 220
+f 357 220 219
+f 220 360 218
+f 359 360 220
+f 360 358 216
+f 360 216 218
+f 222 361 225
+f 362 361 222
+f 361 363 223
+f 361 223 225
+f 223 364 221
+f 363 364 223
+f 364 362 222
+f 364 222 221
+f 226 365 227
+f 366 365 226
+f 365 367 228
+f 365 228 227
+f 228 368 224
+f 367 368 228
+f 368 366 226
+f 368 226 224
+f 369 231 370
+f 369 370 371
+f 230 231 369
+f 231 234 372
+f 231 372 370
+f 372 373 374
+f 234 229 373
+f 234 373 372
+f 229 230 369
+f 229 369 373
+f 375 235 376
+f 375 376 377
+f 232 235 375
+f 235 237 378
+f 235 378 376
+f 378 379 380
+f 237 233 379
+f 237 379 378
+f 233 232 375
+f 233 375 379
+f 381 239 382
+f 381 382 383
+f 236 239 381
+f 239 240 384
+f 239 384 382
+f 384 385 386
+f 240 238 385
+f 240 385 384
+f 238 236 381
+f 238 381 385
+f 387 245 388
+f 387 388 389
+f 242 245 387
+f 245 244 390
+f 245 390 388
+f 390 391 392
+f 244 241 391
+f 244 391 390
+f 241 242 387
+f 241 387 391
+f 393 247 394
+f 393 394 395
+f 246 247 393
+f 247 248 396
+f 247 396 394
+f 396 397 398
+f 248 243 397
+f 248 397 396
+f 243 246 393
+f 243 393 397
+f 399 400 264
+f 261 264 400
+f 260 261 400
+f 257 260 400
+f 253 257 400
+f 263 401 402
+f 259 262 261
+f 259 261 260
+f 256 258 257
+f 256 257 253
+f 403 254 253
+f 403 249 252
+f 403 253 400
+f 403 252 254
+f 255 254 252
+f 251 255 252
+f 404 250 249
+f 404 249 403
+f 404 401 250
+f 250 401 251
+f 251 401 255
+f 255 401 256
+f 256 401 258
+f 258 401 259
+f 259 401 262
+f 262 401 263
+f 264 263 402
+f 264 402 399
+f 405 406 276
+f 273 276 406
+f 272 273 406
+f 407 269 272
+f 407 272 406
+f 407 265 269
+f 266 265 407
+f 275 408 409
+f 271 274 273
+f 271 273 272
+f 410 266 407
+f 411 268 267
+f 411 267 412
+f 265 268 269
+f 269 268 270
+f 267 266 410
+f 267 410 412
+f 411 408 270
+f 270 408 271
+f 271 408 274
+f 274 408 275
+f 411 270 268
+f 276 275 405
+f 405 275 409
+f 413 414 288
+f 285 288 414
+f 284 285 414
+f 415 281 284
+f 415 284 414
+f 415 277 281
+f 278 277 415
+f 287 416 417
+f 283 286 285
+f 283 285 284
+f 418 278 415
+f 419 280 279
+f 419 279 420
+f 277 280 282
+f 277 282 281
+f 279 278 420
+f 420 278 418
+f 419 416 282
+f 282 416 283
+f 283 416 286
+f 286 416 287
+f 419 282 280
+f 288 287 417
+f 288 417 413
+f 421 422 300
+f 297 300 422
+f 296 297 422
+f 423 293 296
+f 423 296 422
+f 423 289 293
+f 290 289 423
+f 299 424 425
+f 295 298 297
+f 295 297 296
+f 426 290 423
+f 427 292 291
+f 427 291 428
+f 289 292 294
+f 289 294 293
+f 291 290 428
+f 428 290 426
+f 427 424 294
+f 294 424 295
+f 295 424 298
+f 298 424 299
+f 427 294 292
+f 300 299 421
+f 421 299 425
+f 302 429 303
+f 430 302 301
+f 430 301 431
+f 432 302 430
+f 433 429 302
+f 433 302 432
+f 303 434 435
+f 303 435 304
+f 436 437 438
+f 439 440 436
+f 441 442 439
+f 443 438 444
+f 443 444 445
+f 443 441 439
+f 443 436 438
+f 443 439 436
+f 304 435 441
+f 301 304 441
+f 301 441 443
+f 446 307 447
+f 447 307 448
+f 446 305 307
+f 449 374 446
+f 374 305 446
+f 374 371 305
+f 371 306 305
+f 371 450 306
+f 451 452 331
+f 330 451 331
+f 309 453 451
+f 309 451 330
+f 308 454 453
+f 308 453 309
+f 455 331 452
+f 332 331 455
+f 448 330 329
+f 448 309 330
+f 307 309 448
+f 450 308 306
+f 450 454 308
+f 456 310 312
+f 456 312 457
+f 456 457 458
+f 459 456 458
+f 377 311 310
+f 377 460 311
+f 380 310 456
+f 380 377 310
+f 461 380 456
+f 462 463 335
+f 334 462 335
+f 314 464 462
+f 314 462 334
+f 313 465 464
+f 313 464 314
+f 466 335 463
+f 336 335 466
+f 457 334 333
+f 457 314 334
+f 312 314 457
+f 460 313 311
+f 460 465 313
+f 467 315 317
+f 467 317 468
+f 467 468 469
+f 470 467 469
+f 383 316 315
+f 383 471 316
+f 386 315 467
+f 386 383 315
+f 472 386 467
+f 473 474 339
+f 338 473 339
+f 319 475 473
+f 319 473 338
+f 318 476 475
+f 318 475 319
+f 477 339 474
+f 340 339 477
+f 468 338 337
+f 468 319 338
+f 317 319 468
+f 471 318 316
+f 471 476 318
+f 478 320 322
+f 478 322 479
+f 478 479 480
+f 481 478 480
+f 389 321 320
+f 389 482 321
+f 392 320 478
+f 392 389 320
+f 483 392 478
+f 484 485 343
+f 342 484 343
+f 324 484 342
+f 323 486 484
+f 323 484 324
+f 487 343 485
+f 344 343 487
+f 479 342 341
+f 479 324 342
+f 322 324 479
+f 482 323 321
+f 482 486 323
+f 488 398 489
+f 398 490 489
+f 398 326 490
+f 398 395 326
+f 395 325 326
+f 395 491 325
+f 346 492 347
+f 493 492 346
+f 493 346 328
+f 327 493 328
+f 494 347 492
+f 348 347 494
+f 490 346 345
+f 490 328 346
+f 326 328 490
+f 491 327 325
+f 491 493 327
+f 444 447 445
+f 445 447 352
+f 350 332 455
+f 352 329 350
+f 447 329 352
+f 350 329 332
+f 447 448 329
+f 495 458 356
+f 354 336 466
+f 356 333 354
+f 458 333 356
+f 354 333 336
+f 458 457 333
+f 496 469 360
+f 358 340 477
+f 360 337 358
+f 469 337 360
+f 358 337 340
+f 469 468 337
+f 497 480 364
+f 362 344 487
+f 364 341 362
+f 480 341 364
+f 362 341 344
+f 480 479 341
+f 489 368 498
+f 366 348 494
+f 368 345 366
+f 366 345 348
+f 489 490 368
+f 368 490 345
+f 349 350 455
+f 452 349 455
+f 443 445 352
+f 351 349 452
+f 499 351 452
+f 499 443 351
+f 500 443 499
+f 501 443 500
+f 431 301 502
+f 301 443 501
+f 301 501 502
+f 352 351 443
+f 353 354 466
+f 503 504 505
+f 463 353 466
+f 506 507 503
+f 508 509 506
+f 510 511 508
+f 512 513 510
+f 514 515 512
+f 355 505 495
+f 355 495 356
+f 355 353 463
+f 516 355 463
+f 422 517 514
+f 518 355 516
+f 518 505 355
+f 519 503 505
+f 519 506 503
+f 519 508 506
+f 519 505 518
+f 519 510 508
+f 520 512 510
+f 520 514 512
+f 520 510 519
+f 423 422 514
+f 423 514 520
+f 357 358 477
+f 521 522 523
+f 474 357 477
+f 524 525 521
+f 526 527 524
+f 528 529 526
+f 530 531 528
+f 532 533 530
+f 359 523 496
+f 359 496 360
+f 359 357 474
+f 534 359 474
+f 414 535 532
+f 536 359 534
+f 536 523 359
+f 537 521 523
+f 537 524 521
+f 537 526 524
+f 537 523 536
+f 537 528 526
+f 538 530 528
+f 538 532 530
+f 538 528 537
+f 415 414 532
+f 415 532 538
+f 361 362 487
+f 539 540 541
+f 485 361 487
+f 542 543 539
+f 544 545 542
+f 546 547 544
+f 548 549 546
+f 550 551 548
+f 363 541 497
+f 363 497 364
+f 363 361 485
+f 406 552 550
+f 553 363 485
+f 553 541 363
+f 554 541 553
+f 554 539 541
+f 554 542 539
+f 554 544 542
+f 554 546 544
+f 555 548 546
+f 555 550 548
+f 555 546 554
+f 407 406 550
+f 407 550 555
+f 365 366 494
+f 556 557 498
+f 558 559 556
+f 560 561 558
+f 492 365 494
+f 562 563 560
+f 564 565 562
+f 566 567 564
+f 367 498 368
+f 367 365 492
+f 400 568 566
+f 403 400 566
+f 403 367 492
+f 403 556 498
+f 403 558 556
+f 403 560 558
+f 403 498 367
+f 403 562 560
+f 403 564 562
+f 403 566 564
+f 373 369 371
+f 373 371 374
+f 449 569 374
+f 570 571 569
+f 371 370 450
+f 370 454 450
+f 572 573 571
+f 574 575 573
+f 569 372 374
+f 571 372 569
+f 573 372 571
+f 370 372 454
+f 575 372 573
+f 576 577 575
+f 575 577 372
+f 578 579 577
+f 372 580 454
+f 577 580 372
+f 579 580 577
+f 581 582 579
+f 579 582 580
+f 583 584 582
+f 582 584 580
+f 585 586 584
+f 584 586 580
+f 587 588 586
+f 586 588 580
+f 424 589 588
+f 588 589 580
+f 424 427 589
+f 379 375 377
+f 379 377 380
+f 461 590 380
+f 591 592 590
+f 377 376 460
+f 376 465 460
+f 593 594 592
+f 595 596 594
+f 590 378 380
+f 592 378 590
+f 594 378 592
+f 376 378 465
+f 596 378 594
+f 597 598 596
+f 596 598 378
+f 599 600 598
+f 378 601 465
+f 598 601 378
+f 600 601 598
+f 602 603 600
+f 600 603 601
+f 604 605 603
+f 603 605 601
+f 606 607 605
+f 605 607 601
+f 608 609 607
+f 607 609 601
+f 416 610 609
+f 609 610 601
+f 416 419 610
+f 385 381 383
+f 385 383 386
+f 472 611 386
+f 612 613 611
+f 383 382 471
+f 382 476 471
+f 614 615 613
+f 616 617 615
+f 611 384 386
+f 613 384 611
+f 615 384 613
+f 382 384 476
+f 617 384 615
+f 618 619 617
+f 617 619 384
+f 620 621 619
+f 384 622 476
+f 619 622 384
+f 621 622 619
+f 623 624 621
+f 621 624 622
+f 625 626 624
+f 624 626 622
+f 627 628 626
+f 626 628 622
+f 629 630 628
+f 628 630 622
+f 408 631 630
+f 630 631 622
+f 408 411 631
+f 391 387 389
+f 391 389 392
+f 483 632 392
+f 633 634 632
+f 389 388 482
+f 388 486 482
+f 635 636 634
+f 637 638 636
+f 632 390 392
+f 634 390 632
+f 636 390 634
+f 638 390 636
+f 639 640 638
+f 638 640 390
+f 641 642 640
+f 643 644 642
+f 645 646 644
+f 642 647 640
+f 640 647 390
+f 644 647 642
+f 646 647 644
+f 395 394 491
+f 648 649 646
+f 646 649 647
+f 394 493 491
+f 647 650 488
+f 651 650 649
+f 649 650 647
+f 394 396 493
+f 488 396 398
+f 488 404 396
+f 401 404 650
+f 650 404 488
+f 396 404 493
+f 647 486 388
+f 647 388 390
+f 397 393 395
+f 397 395 398
+f 493 404 403
+f 493 403 492
+f 399 652 568
+f 399 568 400
+f 402 653 652
+f 402 652 399
+f 401 650 653
+f 401 653 402
+f 631 411 412
+f 631 412 654
+f 654 412 410
+f 655 654 410
+f 656 654 655
+f 655 410 407
+f 655 407 555
+f 405 657 552
+f 405 552 406
+f 409 658 657
+f 409 657 405
+f 408 630 658
+f 408 658 409
+f 610 419 420
+f 610 420 659
+f 659 420 418
+f 660 659 418
+f 661 659 660
+f 660 418 415
+f 660 415 538
+f 413 662 535
+f 413 535 414
+f 417 663 662
+f 417 662 413
+f 417 609 663
+f 416 609 417
+f 589 427 428
+f 589 428 664
+f 664 428 426
+f 665 664 426
+f 666 664 665
+f 665 426 423
+f 665 423 520
+f 421 667 517
+f 421 517 422
+f 425 668 667
+f 425 667 421
+f 425 588 668
+f 424 588 425
+f 669 670 671
+f 669 429 670
+f 429 672 670
+f 429 433 672
+f 672 433 432
+f 672 432 673
+f 673 432 430
+f 674 673 430
+f 675 673 674
+f 674 430 431
+f 674 431 502
+f 669 676 434
+f 429 434 303
+f 429 669 434
+f 434 677 435
+f 435 677 441
+f 447 444 438
+f 678 446 447
+f 438 678 447
+f 437 679 438
+f 680 681 679
+f 681 678 679
+f 679 678 438
+f 682 679 436
+f 436 679 437
+f 683 682 440
+f 440 682 436
+f 684 683 439
+f 439 683 440
+f 685 684 442
+f 442 684 439
+f 677 685 441
+f 441 685 442
+f 569 449 446
+f 569 446 686
+f 451 499 452
+f 451 687 499
+f 453 688 687
+f 453 687 451
+f 453 580 688
+f 454 580 453
+f 459 689 456
+f 688 690 459
+f 459 690 689
+f 690 691 692
+f 688 691 690
+f 691 693 694
+f 688 693 691
+f 693 695 696
+f 688 695 693
+f 695 697 698
+f 697 699 700
+f 699 701 702
+f 701 703 704
+f 703 666 705
+f 666 706 705
+f 699 664 701
+f 701 664 703
+f 703 664 666
+f 688 664 695
+f 695 664 697
+f 697 664 699
+f 688 458 687
+f 688 459 458
+f 590 461 456
+f 590 456 689
+f 462 516 463
+f 462 707 516
+f 464 708 707
+f 464 707 462
+f 465 601 708
+f 465 708 464
+f 470 709 467
+f 708 710 470
+f 470 710 709
+f 710 711 712
+f 708 711 710
+f 711 713 714
+f 708 713 711
+f 713 715 716
+f 708 715 713
+f 715 717 718
+f 717 719 720
+f 719 721 722
+f 721 723 724
+f 723 661 725
+f 661 726 725
+f 719 659 721
+f 721 659 723
+f 723 659 661
+f 708 659 715
+f 715 659 717
+f 717 659 719
+f 708 469 707
+f 708 470 469
+f 611 472 467
+f 611 467 709
+f 473 534 474
+f 473 727 534
+f 475 728 727
+f 475 727 473
+f 476 622 728
+f 476 728 475
+f 481 729 478
+f 728 730 481
+f 481 730 729
+f 730 731 732
+f 728 731 730
+f 731 733 734
+f 728 733 731
+f 733 735 736
+f 728 735 733
+f 735 737 738
+f 737 739 740
+f 739 741 742
+f 741 743 744
+f 743 656 745
+f 656 746 745
+f 739 654 741
+f 741 654 743
+f 743 654 656
+f 728 654 735
+f 735 654 737
+f 737 654 739
+f 728 480 727
+f 728 481 480
+f 632 483 478
+f 632 478 729
+f 484 747 485
+f 485 747 553
+f 486 747 484
+f 747 647 748
+f 486 647 747
+f 748 647 749
+f 749 488 489
+f 647 488 749
+f 505 750 495
+f 750 458 495
+f 523 751 496
+f 751 469 496
+f 541 752 497
+f 752 480 497
+f 749 489 557
+f 557 489 498
+f 753 674 502
+f 753 502 501
+f 754 501 500
+f 754 753 501
+f 687 754 499
+f 499 754 500
+f 755 750 504
+f 504 750 505
+f 756 755 503
+f 503 755 504
+f 757 756 507
+f 507 756 503
+f 758 757 506
+f 506 757 507
+f 759 758 509
+f 509 758 506
+f 760 759 508
+f 508 759 509
+f 761 760 511
+f 511 760 508
+f 762 761 510
+f 510 761 511
+f 763 762 513
+f 513 762 510
+f 764 763 512
+f 512 763 513
+f 765 764 515
+f 515 764 512
+f 766 765 514
+f 514 765 515
+f 667 766 517
+f 517 766 514
+f 767 665 520
+f 767 520 519
+f 768 519 518
+f 768 767 519
+f 707 768 516
+f 516 768 518
+f 769 751 522
+f 522 751 523
+f 770 769 521
+f 521 769 522
+f 771 770 525
+f 525 770 521
+f 772 771 524
+f 524 771 525
+f 773 772 527
+f 527 772 524
+f 774 773 526
+f 526 773 527
+f 775 774 529
+f 529 774 526
+f 776 775 528
+f 528 775 529
+f 777 776 531
+f 531 776 528
+f 778 777 530
+f 530 777 531
+f 779 778 533
+f 533 778 530
+f 780 779 532
+f 532 779 533
+f 662 780 535
+f 535 780 532
+f 781 660 538
+f 781 538 537
+f 782 537 536
+f 782 781 537
+f 727 782 534
+f 534 782 536
+f 783 752 540
+f 540 752 541
+f 784 783 539
+f 539 783 540
+f 785 784 543
+f 543 784 539
+f 786 785 542
+f 542 785 543
+f 787 786 545
+f 545 786 542
+f 788 787 544
+f 544 787 545
+f 789 788 547
+f 547 788 544
+f 790 789 546
+f 546 789 547
+f 791 790 549
+f 549 790 546
+f 792 791 548
+f 548 791 549
+f 793 792 551
+f 551 792 548
+f 794 793 550
+f 550 793 551
+f 657 794 552
+f 552 794 550
+f 795 655 555
+f 795 555 554
+f 747 554 553
+f 747 795 554
+f 796 749 556
+f 556 749 557
+f 797 796 559
+f 559 796 556
+f 798 797 558
+f 558 797 559
+f 799 798 561
+f 561 798 558
+f 800 799 560
+f 560 799 561
+f 801 800 563
+f 563 800 560
+f 802 801 562
+f 562 801 563
+f 803 802 565
+f 565 802 562
+f 804 803 564
+f 564 803 565
+f 805 804 567
+f 567 804 564
+f 806 805 566
+f 566 805 567
+f 652 806 568
+f 568 806 566
+f 570 569 686
+f 570 686 807
+f 571 570 807
+f 571 807 808
+f 572 571 808
+f 572 808 809
+f 573 572 809
+f 573 809 810
+f 574 573 810
+f 574 810 811
+f 575 574 811
+f 575 811 812
+f 576 575 812
+f 576 812 813
+f 577 576 813
+f 577 813 814
+f 578 577 814
+f 578 814 815
+f 579 578 815
+f 579 815 816
+f 581 579 816
+f 581 816 817
+f 582 581 817
+f 582 817 818
+f 583 582 818
+f 583 818 819
+f 584 583 819
+f 584 819 820
+f 585 584 820
+f 585 820 821
+f 586 585 821
+f 586 821 822
+f 587 586 822
+f 587 822 823
+f 588 587 823
+f 588 823 668
+f 580 589 664
+f 580 664 688
+f 591 590 689
+f 591 689 690
+f 592 591 690
+f 592 690 692
+f 593 592 692
+f 593 692 691
+f 594 593 691
+f 594 691 694
+f 595 594 694
+f 595 694 693
+f 596 595 693
+f 596 693 696
+f 597 596 696
+f 597 696 695
+f 598 597 695
+f 598 695 698
+f 599 598 698
+f 599 698 697
+f 600 599 697
+f 600 697 700
+f 602 600 700
+f 602 700 699
+f 603 602 699
+f 603 699 702
+f 604 603 702
+f 604 702 701
+f 605 604 701
+f 605 701 704
+f 606 605 704
+f 606 704 703
+f 607 606 703
+f 607 703 705
+f 608 607 705
+f 608 705 706
+f 609 608 706
+f 609 706 663
+f 601 610 659
+f 601 659 708
+f 612 611 709
+f 612 709 710
+f 613 612 710
+f 613 710 712
+f 614 613 712
+f 614 712 711
+f 615 614 711
+f 615 711 714
+f 616 615 714
+f 616 714 713
+f 617 616 713
+f 617 713 716
+f 618 617 716
+f 618 716 715
+f 619 618 715
+f 619 715 718
+f 620 619 718
+f 620 718 717
+f 621 620 717
+f 621 717 720
+f 623 621 720
+f 623 720 719
+f 624 623 719
+f 624 719 722
+f 625 624 722
+f 625 722 721
+f 626 625 721
+f 626 721 724
+f 627 626 724
+f 627 724 723
+f 628 627 723
+f 628 723 725
+f 629 628 725
+f 629 725 726
+f 630 629 726
+f 630 726 658
+f 622 631 654
+f 622 654 728
+f 633 632 729
+f 633 729 730
+f 634 633 730
+f 634 730 732
+f 635 634 732
+f 635 732 731
+f 636 635 731
+f 636 731 734
+f 637 636 734
+f 637 734 733
+f 638 637 733
+f 638 733 736
+f 639 638 736
+f 639 736 735
+f 640 639 735
+f 640 735 738
+f 641 640 738
+f 641 738 737
+f 642 641 737
+f 642 737 740
+f 643 642 740
+f 643 740 739
+f 644 643 739
+f 644 739 742
+f 645 644 742
+f 645 742 741
+f 646 645 741
+f 646 741 744
+f 648 646 744
+f 648 744 743
+f 649 648 743
+f 649 743 745
+f 651 649 745
+f 651 745 746
+f 650 651 746
+f 650 746 653
+f 653 746 652
+f 652 746 655
+f 746 656 655
+f 658 726 657
+f 657 726 660
+f 726 661 660
+f 663 706 662
+f 662 706 665
+f 706 666 665
+f 668 823 667
+f 667 823 674
+f 823 675 674
+f 670 672 673
+f 670 673 681
+f 671 670 681
+f 671 681 824
+f 676 824 825
+f 669 671 824
+f 669 824 676
+f 678 686 446
+f 681 807 678
+f 678 807 686
+f 807 809 808
+f 681 809 807
+f 809 811 810
+f 681 811 809
+f 811 813 812
+f 681 813 811
+f 813 815 814
+f 815 817 816
+f 817 819 818
+f 819 821 820
+f 821 675 822
+f 675 823 822
+f 817 673 819
+f 819 673 821
+f 821 673 675
+f 681 673 813
+f 813 673 815
+f 815 673 817
+f 680 676 825
+f 683 676 680
+f 685 676 683
+f 682 680 679
+f 682 683 680
+f 434 676 685
+f 684 685 683
+f 677 434 685
+f 824 681 680
+f 824 680 825
+f 754 687 458
+f 757 754 755
+f 750 754 458
+f 750 755 754
+f 759 754 757
+f 756 757 755
+f 758 759 757
+f 763 753 761
+f 760 761 759
+f 765 753 763
+f 762 763 761
+f 667 674 753
+f 667 753 765
+f 764 765 763
+f 766 667 765
+f 753 754 759
+f 753 759 761
+f 768 707 469
+f 771 768 769
+f 751 768 469
+f 751 769 768
+f 773 768 771
+f 770 771 769
+f 772 773 771
+f 777 767 775
+f 774 775 773
+f 779 767 777
+f 776 777 775
+f 662 665 767
+f 662 767 779
+f 778 779 777
+f 780 662 779
+f 767 768 773
+f 767 773 775
+f 782 727 480
+f 785 782 783
+f 752 782 480
+f 752 783 782
+f 787 782 785
+f 784 785 783
+f 786 787 785
+f 791 781 789
+f 788 789 787
+f 793 781 791
+f 790 791 789
+f 657 660 781
+f 657 781 793
+f 792 793 791
+f 794 657 793
+f 781 782 787
+f 781 787 789
+f 797 747 748
+f 799 747 797
+f 796 748 749
+f 796 797 748
+f 798 799 797
+f 803 795 801
+f 800 801 799
+f 805 795 803
+f 802 803 801
+f 652 655 795
+f 652 795 805
+f 804 805 803
+f 806 652 805
+f 795 747 799
+f 795 799 801
+o Doors
+v 2.300000 -1.550000 0.000000
+v 2.300000 -1.550000 1.900000
+v 2.250000 -1.550000 0.000000
+v 2.250000 -1.550000 1.900000
+v 2.300000 -0.550000 1.900000
+v 2.250000 -0.550000 1.900000
+v 2.300000 -0.550000 0.000000
+v 2.250000 -0.550000 0.000000
+v -3.650000 -0.471319 11.518544
+v -3.650000 0.328681 11.518544
+v -3.600000 0.328681 11.518544
+v -3.600000 -0.471319 11.518544
+v -3.650000 -0.471320 13.518544
+v -3.600000 -0.471320 13.518544
+v -3.650000 0.328680 13.518544
+v -3.600000 0.328680 13.518544
+v -3.650000 -0.471319 0.640000
+v -3.650000 0.328681 0.640000
+v -3.600000 0.328681 0.640000
+v -3.600000 -0.471319 0.640000
+v -3.650000 -0.471319 2.640000
+v -3.600000 -0.471319 2.640000
+v -3.650000 0.328681 2.640000
+v -3.600000 0.328681 2.640000
+v -3.650000 -1.428681 11.518544
+v -3.650000 -0.628681 11.518544
+v -3.600000 -1.428681 11.518544
+v -3.600000 -0.628681 11.518544
+v -3.650000 -0.628682 13.518544
+v -3.600000 -0.628682 13.518544
+v -3.650000 -1.428681 13.518544
+v -3.600000 -1.428681 13.518544
+v -3.650000 -1.428681 0.640000
+v -3.650000 -0.628681 0.640000
+v -3.600000 -1.428681 0.640000
+v -3.600000 -0.628681 0.640000
+v -3.650000 -0.628681 2.640000
+v -3.600000 -0.628681 2.640000
+v -3.650000 -1.428681 2.640000
+v -3.600000 -1.428681 2.640000
+v -3.650000 -0.471319 8.798908
+v -3.650000 0.328681 8.798908
+v -3.600000 0.328681 8.798908
+v -3.600000 -0.471319 8.798908
+v -3.650000 -0.471319 10.798908
+v -3.600000 -0.471319 10.798908
+v -3.650000 0.328681 10.798908
+v -3.600000 0.328681 10.798908
+v -3.650000 -0.471319 6.079272
+v -3.650000 0.328681 6.079272
+v -3.600000 0.328681 6.079272
+v -3.600000 -0.471319 6.079272
+v -3.650000 -0.471319 8.079272
+v -3.600000 -0.471319 8.079272
+v -3.650000 0.328681 8.079272
+v -3.600000 0.328681 8.079272
+v -3.650000 -1.428681 8.798908
+v -3.650000 -0.628681 8.798908
+v -3.600000 -1.428681 8.798908
+v -3.600000 -0.628681 8.798908
+v -3.650000 -0.628681 10.798908
+v -3.600000 -0.628681 10.798908
+v -3.650000 -1.428681 10.798908
+v -3.600000 -1.428681 10.798908
+v -3.650000 -1.428681 6.079272
+v -3.650000 -0.628681 6.079272
+v -3.600000 -1.428681 6.079272
+v -3.600000 -0.628681 6.079272
+v -3.650000 -0.628681 8.079272
+v -3.600000 -0.628681 8.079272
+v -3.650000 -1.428681 8.079272
+v -3.600000 -1.428681 8.079272
+v -3.650000 -1.428681 3.359636
+v -3.650000 -0.628681 3.359636
+v -3.600000 -1.428681 3.359636
+v -3.600000 -0.628681 3.359636
+v -3.650000 -0.628681 5.359636
+v -3.600000 -0.628681 5.359636
+v -3.650000 -1.428681 5.359636
+v -3.600000 -1.428681 5.359636
+v -3.650000 -0.471319 3.359636
+v -3.650000 0.328681 3.359636
+v -3.600000 0.328681 3.359636
+v -3.600000 -0.471319 3.359636
+v -3.650000 -0.471319 5.359636
+v -3.600000 -0.471319 5.359636
+v -3.650000 0.328681 5.359636
+v -3.600000 0.328681 5.359636
+v -2.328681 0.600000 0.640000
+v -3.128681 0.600000 0.640000
+v -3.128681 0.650000 0.640000
+v -2.328681 0.650000 0.640000
+v -2.328681 0.600000 2.640000
+v -2.328681 0.650000 2.640000
+v -3.128681 0.600000 2.640000
+v -3.128681 0.650000 2.640000
+v -2.328681 0.600000 11.518544
+v -3.128681 0.600000 11.518544
+v -3.128681 0.650000 11.518544
+v -2.328681 0.650000 11.518544
+v -2.328681 0.600000 13.518544
+v -2.328681 0.650000 13.518544
+v -3.128681 0.600000 13.518544
+v -3.128681 0.650000 13.518544
+v -2.328681 0.600000 8.798908
+v -3.128681 0.600000 8.798908
+v -3.128681 0.650000 8.798908
+v -2.328681 0.650000 8.798908
+v -2.328681 0.600000 10.798908
+v -2.328681 0.650000 10.798908
+v -3.128681 0.600000 10.798908
+v -3.128681 0.650000 10.798908
+v -2.328681 0.600000 6.079272
+v -3.128681 0.600000 6.079272
+v -3.128681 0.650000 6.079272
+v -2.328681 0.650000 6.079272
+v -2.328681 0.600000 8.079272
+v -2.328681 0.650000 8.079272
+v -3.128681 0.600000 8.079272
+v -3.128681 0.650000 8.079272
+v -2.328681 0.600000 3.359636
+v -3.128681 0.600000 3.359636
+v -3.128681 0.650000 3.359636
+v -2.328681 0.650000 3.359636
+v -2.328681 0.600000 5.359636
+v -2.328681 0.650000 5.359636
+v -3.128681 0.600000 5.359636
+v -3.128681 0.650000 5.359636
+v -2.328681 -1.750000 0.640000
+v -3.128681 -1.750000 0.640000
+v -3.128681 -1.700000 0.640000
+v -2.328681 -1.700000 0.640000
+v -2.328681 -1.750000 2.640000
+v -2.328681 -1.700000 2.640000
+v -3.128681 -1.750000 2.640000
+v -3.128681 -1.700000 2.640000
+v -2.328681 -1.750000 11.518544
+v -3.128681 -1.750000 11.518544
+v -3.128681 -1.700001 11.518544
+v -2.328681 -1.700001 11.518544
+v -2.328681 -1.750001 13.518544
+v -2.328681 -1.700001 13.518544
+v -3.128681 -1.750001 13.518544
+v -3.128681 -1.700001 13.518544
+v -2.328681 -1.750000 8.798908
+v -3.128681 -1.750000 8.798908
+v -3.128681 -1.700000 8.798908
+v -2.328681 -1.700000 8.798908
+v -2.328681 -1.750000 10.798908
+v -2.328681 -1.700000 10.798908
+v -3.128681 -1.750000 10.798908
+v -3.128681 -1.700000 10.798908
+v -2.328681 -1.750000 6.079272
+v -3.128681 -1.750000 6.079272
+v -3.128681 -1.700000 6.079272
+v -2.328681 -1.700000 6.079272
+v -2.328681 -1.750000 8.079272
+v -2.328681 -1.700000 8.079272
+v -3.128681 -1.750000 8.079272
+v -3.128681 -1.700000 8.079272
+v -2.328681 -1.750000 3.359636
+v -3.128681 -1.750000 3.359636
+v -3.128681 -1.700000 3.359636
+v -2.328681 -1.700000 3.359636
+v -2.328681 -1.750000 5.359636
+v -2.328681 -1.700000 5.359636
+v -3.128681 -1.750000 5.359636
+v -3.128681 -1.700000 5.359636
+f 826 827 828
+f 828 827 829
+f 827 830 829
+f 829 830 831
+f 830 832 831
+f 831 832 833
+f 832 826 833
+f 833 826 828
+f 827 826 832
+f 827 832 830
+f 828 829 833
+f 833 829 831
+f 834 835 836
+f 834 836 837
+f 838 834 837
+f 838 837 839
+f 840 838 839
+f 840 839 841
+f 835 840 841
+f 835 841 836
+f 835 838 840
+f 834 838 835
+f 839 836 841
+f 839 837 836
+f 842 843 844
+f 842 844 845
+f 846 842 845
+f 846 845 847
+f 848 846 847
+f 848 847 849
+f 843 848 849
+f 843 849 844
+f 843 846 848
+f 842 846 843
+f 847 844 849
+f 847 845 844
+f 850 851 852
+f 852 851 853
+f 851 854 853
+f 853 854 855
+f 854 856 855
+f 855 856 857
+f 856 850 857
+f 857 850 852
+f 850 854 851
+f 850 856 854
+f 855 852 853
+f 857 852 855
+f 858 859 860
+f 860 859 861
+f 859 862 861
+f 861 862 863
+f 862 864 863
+f 863 864 865
+f 864 858 865
+f 865 858 860
+f 858 864 859
+f 859 864 862
+f 865 860 861
+f 865 861 863
+f 866 867 868
+f 866 868 869
+f 870 866 869
+f 870 869 871
+f 872 870 871
+f 872 871 873
+f 867 872 873
+f 867 873 868
+f 867 870 872
+f 866 870 867
+f 871 868 873
+f 871 869 868
+f 874 875 876
+f 874 876 877
+f 878 874 877
+f 878 877 879
+f 880 878 879
+f 880 879 881
+f 875 880 881
+f 875 881 876
+f 875 878 880
+f 874 878 875
+f 879 876 881
+f 879 877 876
+f 882 883 884
+f 884 883 885
+f 883 886 885
+f 885 886 887
+f 886 888 887
+f 887 888 889
+f 888 882 889
+f 889 882 884
+f 882 888 883
+f 883 888 886
+f 889 884 885
+f 889 885 887
+f 890 891 892
+f 892 891 893
+f 891 894 893
+f 893 894 895
+f 894 896 895
+f 895 896 897
+f 896 890 897
+f 897 890 892
+f 890 896 891
+f 891 896 894
+f 897 892 893
+f 897 893 895
+f 898 899 900
+f 900 899 901
+f 899 902 901
+f 901 902 903
+f 902 904 903
+f 903 904 905
+f 904 898 905
+f 905 898 900
+f 898 904 899
+f 899 904 902
+f 905 900 901
+f 905 901 903
+f 906 907 908
+f 906 908 909
+f 910 906 909
+f 910 909 911
+f 912 910 911
+f 912 911 913
+f 907 912 913
+f 907 913 908
+f 907 910 912
+f 906 910 907
+f 911 908 913
+f 911 909 908
+f 914 915 916
+f 914 916 917
+f 918 914 917
+f 918 917 919
+f 920 918 919
+f 920 919 921
+f 915 920 921
+f 915 921 916
+f 915 918 920
+f 914 918 915
+f 919 916 921
+f 919 917 916
+f 922 923 924
+f 922 924 925
+f 926 922 925
+f 926 925 927
+f 928 926 927
+f 928 927 929
+f 923 928 929
+f 923 929 924
+f 923 926 928
+f 922 926 923
+f 927 924 929
+f 927 925 924
+f 930 931 932
+f 930 932 933
+f 934 930 933
+f 934 933 935
+f 936 934 935
+f 936 935 937
+f 931 936 937
+f 931 937 932
+f 931 934 936
+f 930 934 931
+f 935 932 937
+f 935 933 932
+f 938 939 940
+f 938 940 941
+f 942 938 941
+f 942 941 943
+f 944 942 943
+f 944 943 945
+f 939 944 945
+f 939 945 940
+f 939 942 944
+f 938 942 939
+f 943 940 945
+f 943 941 940
+f 946 947 948
+f 946 948 949
+f 950 946 949
+f 950 949 951
+f 952 950 951
+f 952 951 953
+f 947 952 953
+f 947 953 948
+f 947 950 952
+f 946 950 947
+f 951 948 953
+f 951 949 948
+f 954 955 956
+f 954 956 957
+f 958 954 957
+f 958 957 959
+f 960 958 959
+f 960 959 961
+f 955 960 961
+f 955 961 956
+f 955 958 960
+f 954 958 955
+f 959 956 961
+f 959 957 956
+f 962 963 964
+f 962 964 965
+f 966 962 965
+f 966 965 967
+f 968 966 967
+f 968 967 969
+f 963 968 969
+f 963 969 964
+f 963 966 968
+f 962 966 963
+f 967 964 969
+f 967 965 964
+f 970 971 972
+f 970 972 973
+f 974 970 973
+f 974 973 975
+f 976 974 975
+f 976 975 977
+f 971 976 977
+f 971 977 972
+f 971 974 976
+f 970 974 971
+f 975 972 977
+f 975 973 972
+f 978 979 980
+f 978 980 981
+f 982 978 981
+f 982 981 983
+f 984 982 983
+f 984 983 985
+f 979 984 985
+f 979 985 980
+f 979 982 984
+f 978 982 979
+f 983 980 985
+f 983 981 980
+f 986 987 988
+f 986 988 989
+f 990 986 989
+f 990 989 991
+f 992 990 991
+f 992 991 993
+f 987 992 993
+f 987 993 988
+f 987 990 992
+f 986 990 987
+f 991 988 993
+f 991 989 988
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/subway-station.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/subway-station.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/subway-station.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/subway-station.obj	2025-08-26 18:16:07.545772112 +0000
@@ -0,0 +1,2439 @@
+# Blender v2.82 (sub 7) OBJ File: ''
+# www.blender.org
+o Doors
+v -38.500000 -2.300000 3.600000
+v -38.500000 -2.300000 1.600001
+v -38.500000 -2.350000 3.600000
+v -38.500000 -2.350000 1.600000
+v -37.700001 -2.300000 1.600001
+v -37.700001 -2.350000 1.600000
+v -37.700001 -2.300000 3.600000
+v -37.700001 -2.350000 3.600000
+v -36.450249 -2.275160 3.600000
+v -36.450249 -2.275160 1.600001
+v -36.421570 -2.316117 3.600000
+v -36.421570 -2.316117 1.600001
+v -35.794926 -1.816298 1.600001
+v -35.766247 -1.857256 1.600001
+v -35.794926 -1.816298 3.600000
+v -35.766247 -1.857256 3.600000
+f 1 2 3
+f 3 2 4
+f 2 5 4
+f 4 5 6
+f 5 7 6
+f 6 7 8
+f 7 1 8
+f 8 1 3
+f 7 5 2
+f 7 2 1
+f 6 8 4
+f 4 8 3
+f 9 10 11
+f 11 10 12
+f 10 13 12
+f 12 13 14
+f 13 15 14
+f 14 15 16
+f 15 9 16
+f 16 9 11
+f 15 13 10
+f 15 10 9
+f 14 16 12
+f 12 16 11
+o Station
+v -8.128944 -6.625000 1.600000
+v -8.128944 -7.125000 1.600000
+v -8.128944 -6.625000 4.000000
+v -8.128944 -7.125000 4.000000
+v -7.628944 -6.625000 1.600000
+v -7.628944 -6.625000 4.000000
+v -7.628944 -7.125000 1.600000
+v -7.628944 -7.125000 4.000000
+v 37.371056 -6.625000 1.600000
+v 44.000000 -7.160239 1.600000
+v 44.000000 -3.875000 1.600000
+v 44.000000 -3.414993 1.600000
+v 37.371056 -7.125000 1.600000
+v 36.871056 -6.625000 1.600000
+v 32.871056 -6.625000 1.600000
+v 36.871056 -7.125000 1.600000
+v 32.871056 -7.125000 1.600000
+v 32.371056 -6.625000 1.600000
+v 28.371056 -6.625000 1.600000
+v 32.371056 -7.125000 1.600000
+v 28.371056 -7.125000 1.600000
+v 27.871056 -6.625000 1.600000
+v 23.871056 -6.625000 1.600000
+v 27.871056 -7.125000 1.600000
+v 23.871056 -7.125000 1.600000
+v 19.371056 -6.625000 1.600000
+v 19.371056 -7.125000 1.600000
+v 23.371056 -7.125000 1.600000
+v 23.371056 -6.625000 1.600000
+v 14.871056 -6.625000 1.600000
+v 14.871056 -7.125000 1.600000
+v 18.871056 -7.125000 1.600000
+v 18.871056 -6.625000 1.600000
+v 10.371056 -6.625000 1.600000
+v 10.371056 -7.125000 1.600000
+v 14.371056 -7.125000 1.600000
+v 14.371056 -6.625000 1.600000
+v 5.871056 -6.625000 1.600000
+v 5.871056 -7.125000 1.600000
+v 9.871056 -7.125000 1.600000
+v 9.871056 -6.625000 1.600000
+v 1.371056 -6.625000 1.600000
+v 5.371056 -7.125000 1.600000
+v 5.371056 -6.625000 1.600000
+v 1.371056 -7.125000 1.600000
+v -3.128944 -6.625000 1.600000
+v 0.871056 -7.125000 1.600000
+v 0.871056 -6.625000 1.600000
+v -3.128944 -7.125000 1.600000
+v -3.628944 -7.125000 1.600000
+v -3.628944 -6.625000 1.600000
+v -12.128944 -6.625000 1.600000
+v -12.128944 -7.125000 1.600000
+v -16.628944 -7.125000 1.600000
+v -12.628944 -7.125000 1.600000
+v -12.628944 -6.625000 1.600000
+v -16.628944 -6.625000 1.600000
+v -21.128944 -6.625000 1.600000
+v -17.128944 -7.125000 1.600000
+v -17.128944 -6.625000 1.600000
+v -21.128944 -7.125000 1.600000
+v -25.628944 -6.625000 1.600000
+v -21.628944 -7.125000 1.600000
+v -21.628944 -6.625000 1.600000
+v -25.628944 -7.125000 1.600000
+v -28.000000 -7.160239 1.600000
+v -26.128944 -7.125000 1.600000
+v -26.128944 -6.625000 1.600000
+v -28.000000 -3.414993 1.600000
+v 44.000000 -7.260689 4.000000
+v 43.500000 -5.875000 4.000000
+v 44.000000 -5.875000 4.000000
+v 44.000000 -3.875000 4.000000
+v 43.500000 -3.875000 4.000000
+v 44.000000 -3.741784 4.000000
+v 37.371056 -7.125000 4.000000
+v 37.371056 -6.625000 4.000000
+v 36.871056 -6.625000 4.000000
+v 36.871056 -7.125000 4.000000
+v 32.871056 -6.625000 4.000000
+v 32.871056 -7.125000 4.000000
+v 32.371056 -6.625000 4.000000
+v 32.371056 -7.125000 4.000000
+v 28.371056 -7.125000 4.000000
+v 28.371056 -6.625000 4.000000
+v 23.871056 -7.125000 4.000000
+v 23.871056 -6.625000 4.000000
+v 27.871056 -7.125000 4.000000
+v 27.871056 -6.625000 4.000000
+v 19.371056 -7.125000 4.000000
+v 19.371056 -6.625000 4.000000
+v 23.371056 -7.125000 4.000000
+v 23.371056 -6.625000 4.000000
+v 18.871056 -7.125000 4.000000
+v 14.871056 -7.125000 4.000000
+v 18.871056 -6.625000 4.000000
+v 14.871056 -6.625000 4.000000
+v 14.371056 -7.125000 4.000000
+v 10.371056 -6.625000 4.000000
+v 14.371056 -6.625000 4.000000
+v 10.371056 -7.125000 4.000000
+v 9.871056 -7.125000 4.000000
+v 5.871056 -6.625000 4.000000
+v 9.871056 -6.625000 4.000000
+v 5.871056 -7.125000 4.000000
+v 5.371056 -7.125000 4.000000
+v 1.371056 -6.625000 4.000000
+v 5.371056 -6.625000 4.000000
+v 1.371056 -7.125000 4.000000
+v 0.871056 -7.125000 4.000000
+v -3.128944 -6.625000 4.000000
+v 0.871056 -6.625000 4.000000
+v -3.128944 -7.125000 4.000000
+v -3.628944 -7.125000 4.000000
+v -3.628944 -6.625000 4.000000
+v -12.128944 -6.625000 4.000000
+v -12.128944 -7.125000 4.000000
+v -12.628944 -7.125000 4.000000
+v -16.628944 -6.625000 4.000000
+v -12.628944 -6.625000 4.000000
+v -16.628944 -7.125000 4.000000
+v -17.128944 -7.125000 4.000000
+v -21.128944 -6.625000 4.000000
+v -17.128944 -6.625000 4.000000
+v -21.128944 -7.125000 4.000000
+v -21.628944 -7.125000 4.000000
+v -25.628944 -7.125000 4.000000
+v -21.628944 -6.625000 4.000000
+v -25.628944 -6.625000 4.000000
+v -26.128944 -7.125000 4.000000
+v -28.000000 -7.260689 4.000000
+v -26.128944 -6.625000 4.000000
+v -28.000000 -3.741784 4.000000
+v -30.128944 -6.625000 1.600000
+v -30.128944 -7.125000 1.600000
+v -30.628944 -6.625000 1.600000
+v -34.628944 -6.625000 1.600000
+v -30.628944 -7.125000 1.600000
+v -34.628944 -7.125000 1.600000
+v -35.128944 -6.625000 1.600000
+v -39.128944 -6.625000 1.600000
+v -35.128944 -7.125000 1.600000
+v -39.128944 -7.125000 1.600000
+v -44.000000 -7.160239 1.600000
+v -39.628944 -7.125000 1.600000
+v -39.628944 -6.625000 1.600000
+v -44.000000 -3.414993 1.600000
+v -28.000000 -7.221691 1.600000
+v 44.000000 -7.221691 1.600000
+v -28.000000 -3.418415 3.702893
+v 44.000000 -3.418415 3.702893
+v 58.000000 -7.221691 1.600000
+v 58.000000 -3.875000 1.600000
+v 44.000000 -3.875000 1.800000
+v 44.000000 -3.438522 3.797626
+v 44.000000 -3.557820 3.947263
+v 44.000000 -3.486508 3.881742
+v 44.000000 -3.645692 3.987971
+v 58.000000 -7.226048 3.808479
+v 58.000000 -7.221691 3.711165
+v 70.000000 -7.221691 3.711165
+v 70.000000 -7.258801 3.993047
+v 58.000000 -7.239081 3.905015
+v 58.000000 -7.260689 4.000000
+v 70.000000 -7.367604 4.255719
+v -70.000000 -7.221691 3.711165
+v -44.000000 -7.221691 3.711165
+v -44.000000 -7.226048 3.808479
+v -70.000000 -7.258801 3.993047
+v -44.000000 -7.239081 3.905015
+v -44.000000 -7.260689 4.000000
+v -70.000000 -7.367604 4.255719
+v -70.000000 -7.540683 4.481281
+v 70.000000 -7.540683 4.481281
+v 70.000000 -7.766245 4.654361
+v -70.000000 -7.766245 4.654361
+v -70.000000 -8.028918 4.763163
+v 70.000000 -8.028918 4.763163
+v 70.000000 -8.310799 4.800273
+v -70.000000 -8.310799 4.800273
+v 47.520737 -5.875000 4.000000
+v 47.840801 -5.875000 4.000000
+v 57.500000 -5.875000 4.000000
+v 58.000000 -5.875000 4.000000
+v 47.840801 -3.875000 4.000000
+v 57.500000 -3.875000 4.000000
+v -30.128944 -7.125000 4.000000
+v -30.128944 -6.625000 4.000000
+v -30.628944 -6.625000 4.000000
+v -30.628944 -7.125000 4.000000
+v -34.628944 -6.625000 4.000000
+v -34.628944 -7.125000 4.000000
+v -35.128944 -6.625000 4.000000
+v -35.128944 -7.125000 4.000000
+v -39.128944 -6.625000 4.000000
+v -39.128944 -7.125000 4.000000
+v -39.628944 -7.125000 4.000000
+v -43.500000 -5.875000 4.000000
+v -39.628944 -6.625000 4.000000
+v -44.000000 -5.875000 4.000000
+v -43.500000 -3.875000 4.000000
+v -44.000000 -3.875000 4.000000
+v -44.000000 -3.741784 4.000000
+v -28.000000 -3.438522 3.797626
+v -28.000000 -3.486508 3.881742
+v -28.000000 -3.557820 3.947263
+v -28.000000 -3.645692 3.987971
+v -44.000000 -3.418415 3.702893
+v -44.000000 -3.875000 1.800000
+v -44.000000 -3.557820 3.947263
+v -44.000000 -3.438522 3.797626
+v -44.000000 -3.486508 3.881742
+v -44.000000 -3.645692 3.987971
+v -44.000000 -5.875000 1.800000
+v -44.000000 -7.221691 1.600000
+v -40.579090 -2.375000 1.600000
+v -44.000000 -2.375000 1.600000
+v -38.500000 -2.375000 1.600000
+v -37.700001 -2.375000 1.600000
+v -37.700001 -2.275000 1.600001
+v -38.500000 -2.275000 1.600001
+v -37.443016 -2.375000 1.600000
+v -40.579090 1.125000 1.600001
+v -40.579090 -2.275000 1.600001
+v -36.715160 -2.375000 1.600000
+v -36.450001 -2.375000 1.600000
+v -35.650002 -2.375000 1.600000
+v -35.650002 -2.275000 1.600001
+v -36.450001 -2.275000 1.600001
+v -37.543018 1.125000 1.600001
+v -37.543018 -2.275000 1.600001
+v -36.615162 1.125000 1.600001
+v -36.615162 -2.275000 1.600001
+v -33.579090 1.125000 1.600001
+v -33.579090 -2.275000 1.600001
+v -33.479092 -2.375000 1.600000
+v -28.000000 1.125000 1.600001
+v -33.479092 1.125000 1.600001
+v -36.715160 1.125000 1.600001
+v -37.443016 1.125000 1.600001
+v 44.000000 -8.307998 1.600000
+v -44.000000 -8.307998 1.600000
+v -28.000000 1.125000 4.000000
+v 57.500000 -3.875000 1.800000
+v 58.000000 -3.875000 1.800000
+v 47.520737 -3.875000 3.800000
+v 47.520737 -3.875000 4.000000
+v 47.200668 -3.875000 3.600000
+v 47.200668 -3.875000 3.800000
+v 46.880604 -3.875000 3.400000
+v 46.880604 -3.875000 3.600000
+v 46.560535 -3.875000 3.200000
+v 46.560535 -3.875000 3.400000
+v 46.240467 -3.875000 3.000000
+v 46.240467 -3.875000 3.200000
+v 45.920403 -3.875000 2.800000
+v 45.920403 -3.875000 3.000000
+v 45.600334 -3.875000 2.600000
+v 45.600334 -3.875000 2.800000
+v 45.280270 -3.875000 2.400000
+v 45.280270 -3.875000 2.600000
+v 44.941929 -3.875000 2.192388
+v 44.941929 -3.875000 2.400000
+v 44.627953 -3.875000 1.996194
+v 44.627953 -3.875000 2.192388
+v 44.313976 -3.875000 1.800000
+v 44.313976 -3.875000 1.996194
+v 58.000000 -5.875000 1.800000
+v 70.000000 -7.221691 0.768807
+v 44.000000 -7.221691 1.302898
+v -70.000000 -7.221691 0.768807
+v -44.000000 -7.221691 1.302898
+v -70.000000 -7.291605 0.098602
+v -70.000000 -7.075011 0.611179
+v -70.000000 11.375000 -0.499999
+v -70.000000 11.375000 7.400001
+v -70.000000 -8.234954 0.098602
+v -70.000000 -11.577362 0.098602
+v -70.000000 -8.618003 0.282362
+v -70.000000 -11.194313 0.282362
+v -70.000000 -12.375000 -0.500000
+v -70.000000 -11.875000 0.557128
+v -70.000000 -11.577362 0.557128
+v -70.000000 -11.875000 3.711165
+v -70.000000 -10.785892 4.800273
+v -70.000000 -12.375000 7.400000
+v -70.000000 -11.837891 3.993047
+v -70.000000 -11.729087 4.255719
+v -70.000000 -11.556008 4.481281
+v -70.000000 -11.330446 4.654361
+v -70.000000 -11.067774 4.763163
+v 70.000000 -10.785892 4.800273
+v 70.000000 -7.075011 0.611179
+v 70.000000 -7.291605 0.098602
+v 70.000000 11.375000 -0.499999
+v 70.000000 11.375000 7.400001
+v 70.000000 -11.577362 0.098602
+v 70.000000 -8.234954 0.098602
+v 70.000000 -8.618003 0.282362
+v 70.000000 -11.194313 0.282362
+v 70.000000 -12.375000 -0.500000
+v 70.000000 -11.875000 0.557128
+v 70.000000 -11.577362 0.557128
+v 70.000000 -11.875000 3.711165
+v 70.000000 -12.375000 7.400000
+v 70.000000 -11.837891 3.993047
+v 70.000000 -11.729087 4.255719
+v 70.000000 -11.556008 4.481281
+v 70.000000 -11.330446 4.654361
+v 70.000000 -11.067774 4.763163
+v 53.929626 -5.875000 7.183104
+v 53.609558 -5.875000 7.183104
+v 53.929626 -5.875000 7.400001
+v 53.609558 -5.875000 6.983103
+v 53.289490 -5.875000 6.983103
+v 53.289490 -5.875000 6.783103
+v 52.969425 -5.875000 6.783103
+v 52.969425 -5.875000 6.583104
+v 52.649357 -5.875000 6.583104
+v 52.649357 -5.875000 6.383103
+v 52.329288 -5.875000 6.383103
+v 52.329288 -5.875000 6.183104
+v 52.009224 -5.875000 6.183104
+v 52.009224 -5.875000 5.983103
+v 51.689156 -5.875000 5.983103
+v 51.689156 -5.875000 5.783103
+v 51.369091 -5.875000 5.783103
+v 51.369091 -5.875000 5.583104
+v 51.049023 -5.875000 5.583104
+v 51.049023 -5.875000 5.383103
+v 50.728954 -5.875000 5.383103
+v 50.728954 -5.875000 5.183104
+v 50.408890 -5.875000 5.183104
+v 50.408890 -5.875000 4.986909
+v 50.094913 -5.875000 4.986909
+v 50.094913 -5.875000 4.790718
+v 49.780937 -5.875000 4.790718
+v 49.780937 -5.875000 4.600000
+v 48.480938 -5.875000 4.600000
+v 48.480938 -5.875000 4.400001
+v 48.160870 -5.875000 4.400001
+v 48.160870 -5.875000 4.200000
+v 47.840801 -5.875000 4.200000
+v 50.751328 -5.875000 7.400001
+v 49.780937 -5.875000 6.794522
+v 48.480938 -5.875000 6.794522
+v 47.840801 -3.875000 4.200000
+v 58.000000 -3.875000 4.000000
+v -44.000000 -2.375000 4.000000
+v -40.579090 -2.375000 4.000000
+v -37.443016 -2.375000 4.000000
+v -36.715160 -2.375000 4.000000
+v -37.443016 1.125000 4.000000
+v -36.715160 1.125000 4.000000
+v -33.479092 -2.375000 4.000000
+v -33.479092 1.125000 4.000000
+v -31.000000 0.625000 4.000000
+v -31.000000 1.125000 4.000000
+v -29.000000 0.625000 4.000000
+v -29.000000 1.125000 4.000000
+v 48.480938 -3.875000 6.794522
+v -53.609558 -5.875000 7.183104
+v -53.929626 -5.875000 7.183104
+v -53.929626 -5.875000 7.400001
+v -53.289490 -5.875000 6.983103
+v -53.609558 -5.875000 6.983103
+v -52.969425 -5.875000 6.783103
+v -53.289490 -5.875000 6.783103
+v -52.649357 -5.875000 6.583104
+v -52.969425 -5.875000 6.583104
+v -52.329288 -5.875000 6.383103
+v -52.649357 -5.875000 6.383103
+v -52.009224 -5.875000 6.183104
+v -52.329288 -5.875000 6.183104
+v -51.689156 -5.875000 5.983103
+v -52.009224 -5.875000 5.983103
+v -51.369091 -5.875000 5.783103
+v -51.689156 -5.875000 5.783103
+v -51.049023 -5.875000 5.583104
+v -51.369091 -5.875000 5.583104
+v -50.728954 -5.875000 5.383103
+v -51.049023 -5.875000 5.383103
+v -50.408890 -5.875000 5.183104
+v -50.728954 -5.875000 5.183104
+v -50.094913 -5.875000 4.986909
+v -50.408890 -5.875000 4.986909
+v -49.780937 -5.875000 4.790718
+v -50.094913 -5.875000 4.790718
+v -48.480938 -5.875000 4.600000
+v -49.780937 -5.875000 4.600000
+v -48.160870 -5.875000 4.400001
+v -48.480938 -5.875000 4.400001
+v -47.840801 -5.875000 4.200000
+v -48.160870 -5.875000 4.200000
+v -47.520737 -5.875000 4.000000
+v -47.840801 -5.875000 4.000000
+v -47.200668 -5.875000 3.800000
+v -47.520737 -5.875000 3.800000
+v -50.751328 -5.875000 7.400001
+v -46.880604 -5.875000 3.600000
+v -47.200668 -5.875000 3.600000
+v -46.560535 -5.875000 3.400000
+v -46.880604 -5.875000 3.400000
+v -46.240467 -5.875000 3.200000
+v -46.560535 -5.875000 3.200000
+v -49.780937 -5.875000 6.794522
+v -45.920403 -5.875000 3.000000
+v -46.240467 -5.875000 3.000000
+v -45.600334 -5.875000 2.800000
+v -45.920403 -5.875000 2.800000
+v -45.280270 -5.875000 2.600000
+v -45.600334 -5.875000 2.600000
+v -44.941929 -5.875000 2.400000
+v -45.280270 -5.875000 2.400000
+v -44.627953 -5.875000 2.192388
+v -44.941929 -5.875000 2.192388
+v -44.313976 -5.875000 1.996194
+v -44.627953 -5.875000 1.996194
+v -44.313976 -5.875000 1.800000
+v -48.480938 -5.875000 6.794522
+v -44.313976 -3.875000 1.800000
+v -53.929626 -3.875000 7.183104
+v -53.609558 -3.875000 7.183104
+v -53.929626 -3.875000 7.400001
+v -53.609558 -3.875000 6.983103
+v -53.289490 -3.875000 6.983103
+v -53.289490 -3.875000 6.783103
+v -52.969425 -3.875000 6.783103
+v -52.969425 -3.875000 6.583104
+v -52.649357 -3.875000 6.583104
+v -52.649357 -3.875000 6.383103
+v -52.329288 -3.875000 6.383103
+v -52.329288 -3.875000 6.183104
+v -52.009224 -3.875000 6.183104
+v -52.009224 -3.875000 5.983103
+v -51.689156 -3.875000 5.983103
+v -51.689156 -3.875000 5.783103
+v -51.369091 -3.875000 5.783103
+v -51.369091 -3.875000 5.583104
+v -51.049023 -3.875000 5.583104
+v -51.049023 -3.875000 5.383103
+v -50.728954 -3.875000 5.383103
+v -50.728954 -3.875000 5.183104
+v -50.408890 -3.875000 5.183104
+v -50.408890 -3.875000 4.986909
+v -50.094913 -3.875000 4.986909
+v -50.094913 -3.875000 4.790718
+v -49.780937 -3.875000 4.790718
+v -49.780937 -3.875000 4.600000
+v -48.480938 -3.875000 4.600000
+v -48.480938 -3.875000 4.400001
+v -48.160870 -3.875000 4.400001
+v -48.160870 -3.875000 4.200000
+v -47.840801 -3.875000 4.200000
+v -47.840801 -3.875000 4.000000
+v -47.520737 -3.875000 4.000000
+v -47.520737 -3.875000 3.800000
+v -47.200668 -3.875000 3.800000
+v -50.751328 -3.875000 7.400001
+v -47.200668 -3.875000 3.600000
+v -46.880604 -3.875000 3.600000
+v -46.880604 -3.875000 3.400000
+v -46.560535 -3.875000 3.400000
+v -46.560535 -3.875000 3.200000
+v -46.240467 -3.875000 3.200000
+v -49.780937 -3.875000 6.794522
+v -46.240467 -3.875000 3.000000
+v -45.920403 -3.875000 3.000000
+v -45.920403 -3.875000 2.800000
+v -45.600334 -3.875000 2.800000
+v -45.600334 -3.875000 2.600000
+v -45.280270 -3.875000 2.600000
+v -45.280270 -3.875000 2.400000
+v -44.941929 -3.875000 2.400000
+v -44.941929 -3.875000 2.192388
+v -44.627953 -3.875000 2.192388
+v -44.627953 -3.875000 1.996194
+v -44.313976 -3.875000 1.996194
+v -48.480938 -3.875000 6.794522
+v -38.500000 -2.375000 3.600000
+v -37.700001 -2.375000 3.600000
+v -38.500000 -2.275000 3.600000
+v -40.579090 -2.275000 4.000000
+v -37.543018 -2.275000 4.000000
+v -37.700001 -2.275000 3.600000
+v -40.579090 1.125000 4.000000
+v -37.543018 1.125000 4.000000
+v -35.650002 -2.375000 3.600000
+v -36.450001 -2.375000 3.600000
+v -36.450001 -2.275000 3.600000
+v -35.650002 -2.275000 3.600000
+v -36.615162 -2.275000 4.000000
+v -33.579090 -2.275000 4.000000
+v -36.615162 1.125000 4.000000
+v -33.579090 1.125000 4.000000
+v -29.000000 1.125000 1.800001
+v -31.000000 1.125000 1.800001
+v -44.000000 -8.307998 1.478962
+v 44.000000 -8.307998 1.478962
+v 53.609558 -3.875000 7.183104
+v 53.929626 -3.875000 7.183104
+v 53.929626 -3.875000 7.400001
+v 53.289490 -3.875000 6.983103
+v 53.609558 -3.875000 6.983103
+v 52.969425 -3.875000 6.783103
+v 53.289490 -3.875000 6.783103
+v 52.649357 -3.875000 6.583104
+v 52.969425 -3.875000 6.583104
+v 52.329288 -3.875000 6.383103
+v 52.649357 -3.875000 6.383103
+v 52.009224 -3.875000 6.183104
+v 52.329288 -3.875000 6.183104
+v 51.689156 -3.875000 5.983103
+v 52.009224 -3.875000 5.983103
+v 51.369091 -3.875000 5.783103
+v 51.689156 -3.875000 5.783103
+v 51.049023 -3.875000 5.583104
+v 51.369091 -3.875000 5.583104
+v 50.728954 -3.875000 5.383103
+v 51.049023 -3.875000 5.383103
+v 50.408890 -3.875000 5.183104
+v 50.728954 -3.875000 5.183104
+v 50.094913 -3.875000 4.986909
+v 50.408890 -3.875000 4.986909
+v 49.780937 -3.875000 4.790718
+v 50.094913 -3.875000 4.790718
+v 48.480938 -3.875000 4.600000
+v 49.780937 -3.875000 4.600000
+v 48.160870 -3.875000 4.400001
+v 48.480938 -3.875000 4.400001
+v 48.160870 -3.875000 4.200000
+v 50.751328 -3.875000 7.400001
+v 49.780937 -3.875000 6.794522
+v 58.313976 -5.875000 1.800000
+v 58.313976 -3.875000 1.800000
+v 67.929626 -5.875000 7.183104
+v 67.609558 -5.875000 7.183104
+v 67.929626 -5.875000 7.400001
+v 67.609558 -5.875000 6.983103
+v 67.289490 -5.875000 6.983103
+v 67.289490 -5.875000 6.783103
+v 66.969421 -5.875000 6.783103
+v 66.969421 -5.875000 6.583104
+v 66.649361 -5.875000 6.583104
+v 66.649361 -5.875000 6.383103
+v 66.329292 -5.875000 6.383103
+v 66.329292 -5.875000 6.183104
+v 66.009224 -5.875000 6.183104
+v 66.009224 -5.875000 5.983103
+v 65.689156 -5.875000 5.983103
+v 65.689156 -5.875000 5.783103
+v 65.369087 -5.875000 5.783103
+v 65.369087 -5.875000 5.583104
+v 65.049026 -5.875000 5.583104
+v 65.049026 -5.875000 5.383103
+v 64.728958 -5.875000 5.383103
+v 64.728958 -5.875000 5.183104
+v 64.408890 -5.875000 5.183104
+v 64.408890 -5.875000 4.986909
+v 64.094910 -5.875000 4.986909
+v 64.094910 -5.875000 4.790718
+v 63.780937 -5.875000 4.790718
+v 63.780937 -5.875000 4.600000
+v 62.480938 -5.875000 4.600000
+v 62.480938 -5.875000 4.400001
+v 62.160870 -5.875000 4.400001
+v 62.160870 -5.875000 4.200000
+v 61.840801 -5.875000 4.200000
+v 61.840801 -5.875000 4.000000
+v 61.520737 -5.875000 4.000000
+v 61.520737 -5.875000 3.800000
+v 61.200668 -5.875000 3.800000
+v 64.751328 -5.875000 7.400001
+v 61.200668 -5.875000 3.600000
+v 60.880604 -5.875000 3.600000
+v 60.880604 -5.875000 3.400000
+v 60.560535 -5.875000 3.400000
+v 60.560535 -5.875000 3.200000
+v 60.240467 -5.875000 3.200000
+v 63.780937 -5.875000 6.794522
+v 60.240467 -5.875000 3.000000
+v 59.920403 -5.875000 3.000000
+v 59.920403 -5.875000 2.800000
+v 59.600334 -5.875000 2.800000
+v 59.600334 -5.875000 2.600000
+v 59.280270 -5.875000 2.600000
+v 59.280270 -5.875000 2.400000
+v 58.941929 -5.875000 2.400000
+v 58.941929 -5.875000 2.192388
+v 58.627953 -5.875000 2.192388
+v 58.627953 -5.875000 1.996194
+v 58.313976 -5.875000 1.996194
+v 62.480938 -5.875000 6.794522
+v 64.751328 -3.875000 7.400001
+v 67.929626 -3.875000 7.400001
+v -29.000000 11.054625 7.400001
+v -29.000000 7.876329 7.400001
+v -31.000000 11.054625 7.400001
+v -31.000000 7.876329 7.400001
+v 62.480938 -3.875000 6.794522
+v -31.000000 10.734558 7.183104
+v -31.000000 11.054625 7.183104
+v -31.000000 10.414492 6.983104
+v -31.000000 10.734558 6.983104
+v -31.000000 10.094423 6.783104
+v -31.000000 10.414492 6.783104
+v -31.000000 9.774357 6.583104
+v -31.000000 10.094423 6.583104
+v -31.000000 9.454290 6.383104
+v -31.000000 9.774357 6.383104
+v -31.000000 9.134224 6.183104
+v -31.000000 9.454290 6.183104
+v -31.000000 8.814156 5.983104
+v -31.000000 9.134224 5.983104
+v -31.000000 8.494089 5.783104
+v -31.000000 8.814156 5.783104
+v -31.000000 8.174023 5.583104
+v -31.000000 8.494089 5.583104
+v -31.000000 7.853956 5.383104
+v -31.000000 8.174023 5.383104
+v -31.000000 7.533890 5.183104
+v -31.000000 7.853956 5.183104
+v -31.000000 7.219913 4.986910
+v -31.000000 7.533890 4.986910
+v -31.000000 6.905937 4.790718
+v -31.000000 7.219913 4.790718
+v -31.000000 5.605936 4.600001
+v -31.000000 6.905937 4.600001
+v -31.000000 5.285870 4.400001
+v -31.000000 5.605936 4.400001
+v -31.000000 4.965803 4.200001
+v -31.000000 5.285870 4.200001
+v -31.000000 4.645737 4.000001
+v -31.000000 4.965803 4.000001
+v -31.000000 4.325668 3.800001
+v -31.000000 4.645737 3.800001
+v -31.000000 4.005602 3.600001
+v -31.000000 4.325668 3.600001
+v -31.000000 3.685535 3.400001
+v -31.000000 4.005602 3.400001
+v -31.000000 3.365468 3.200001
+v -31.000000 3.685535 3.200001
+v -31.000000 6.905937 6.794523
+v -31.000000 3.045402 3.000001
+v -31.000000 3.365468 3.000001
+v -31.000000 2.725335 2.800001
+v -31.000000 3.045402 2.800001
+v -31.000000 2.405268 2.600001
+v -31.000000 2.725335 2.600001
+v -31.000000 2.066928 2.400001
+v -31.000000 2.405268 2.400001
+v -31.000000 1.752952 2.192389
+v -31.000000 2.066928 2.192389
+v -31.000000 1.438976 1.996195
+v -31.000000 1.752952 1.996195
+v -31.000000 1.438976 1.800001
+v -31.000000 5.605936 6.794523
+v -29.000000 1.438976 1.800001
+v -29.000000 11.054625 7.183104
+v -29.000000 10.734558 7.183104
+v -29.000000 10.734558 6.983104
+v -29.000000 10.414492 6.983104
+v -29.000000 10.414492 6.783104
+v -29.000000 10.094423 6.783104
+v -29.000000 10.094423 6.583104
+v -29.000000 9.774357 6.583104
+v -29.000000 9.774357 6.383104
+v -29.000000 9.454290 6.383104
+v -29.000000 9.454290 6.183104
+v -29.000000 9.134224 6.183104
+v -29.000000 9.134224 5.983104
+v -29.000000 8.814156 5.983104
+v -29.000000 8.814156 5.783104
+v -29.000000 8.494089 5.783104
+v -29.000000 8.494089 5.583104
+v -29.000000 8.174023 5.583104
+v -29.000000 8.174023 5.383104
+v -29.000000 7.853956 5.383104
+v -29.000000 7.853956 5.183104
+v -29.000000 7.533890 5.183104
+v -29.000000 7.533890 4.986910
+v -29.000000 7.219913 4.986910
+v -29.000000 7.219913 4.790718
+v -29.000000 6.905937 4.790718
+v -29.000000 6.905937 4.600001
+v -29.000000 5.605936 4.600001
+v -29.000000 5.605936 4.400001
+v -29.000000 5.285870 4.400001
+v -29.000000 5.285870 4.200001
+v -29.000000 4.965803 4.200001
+v -29.000000 4.965803 4.000001
+v -29.000000 4.645737 4.000001
+v -29.000000 4.645737 3.800001
+v -29.000000 4.325668 3.800001
+v -29.000000 4.325668 3.600001
+v -29.000000 4.005602 3.600001
+v -29.000000 4.005602 3.400001
+v -29.000000 3.685535 3.400001
+v -29.000000 3.685535 3.200001
+v -29.000000 3.365468 3.200001
+v -29.000000 6.905937 6.794523
+v -29.000000 3.365468 3.000001
+v -29.000000 3.045402 3.000001
+v -29.000000 3.045402 2.800001
+v -29.000000 2.725335 2.800001
+v -29.000000 2.725335 2.600001
+v -29.000000 2.405268 2.600001
+v -29.000000 2.405268 2.400001
+v -29.000000 2.066928 2.400001
+v -29.000000 2.066928 2.192389
+v -29.000000 1.752952 2.192389
+v -29.000000 1.752952 1.996195
+v -29.000000 1.438976 1.996195
+v -29.000000 5.605936 6.794523
+v 67.609558 -3.875000 7.183104
+v 67.929626 -3.875000 7.183104
+v 67.289490 -3.875000 6.983103
+v 67.609558 -3.875000 6.983103
+v 66.969421 -3.875000 6.783103
+v 67.289490 -3.875000 6.783103
+v 66.649361 -3.875000 6.583104
+v 66.969421 -3.875000 6.583104
+v 66.329292 -3.875000 6.383103
+v 66.649361 -3.875000 6.383103
+v 66.009224 -3.875000 6.183104
+v 66.329292 -3.875000 6.183104
+v 65.689156 -3.875000 5.983103
+v 66.009224 -3.875000 5.983103
+v 65.369087 -3.875000 5.783103
+v 65.689156 -3.875000 5.783103
+v 65.049026 -3.875000 5.583104
+v 65.369087 -3.875000 5.583104
+v 64.728958 -3.875000 5.383103
+v 65.049026 -3.875000 5.383103
+v 64.408890 -3.875000 5.183104
+v 64.728958 -3.875000 5.183104
+v 64.094910 -3.875000 4.986909
+v 64.408890 -3.875000 4.986909
+v 63.780937 -3.875000 4.790718
+v 64.094910 -3.875000 4.790718
+v 62.480938 -3.875000 4.600000
+v 63.780937 -3.875000 4.600000
+v 62.160870 -3.875000 4.400001
+v 62.480938 -3.875000 4.400001
+v 61.840801 -3.875000 4.200000
+v 62.160870 -3.875000 4.200000
+v 61.520737 -3.875000 4.000000
+v 61.840801 -3.875000 4.000000
+v 61.200668 -3.875000 3.800000
+v 61.520737 -3.875000 3.800000
+v 60.880604 -3.875000 3.600000
+v 61.200668 -3.875000 3.600000
+v 60.560535 -3.875000 3.400000
+v 60.880604 -3.875000 3.400000
+v 60.240467 -3.875000 3.200000
+v 60.560535 -3.875000 3.200000
+v 63.780937 -3.875000 6.794522
+v 59.920403 -3.875000 3.000000
+v 60.240467 -3.875000 3.000000
+v 59.600334 -3.875000 2.800000
+v 59.920403 -3.875000 2.800000
+v 59.280270 -3.875000 2.600000
+v 59.600334 -3.875000 2.600000
+v 58.941929 -3.875000 2.400000
+v 59.280270 -3.875000 2.400000
+v 58.627953 -3.875000 2.192388
+v 58.941929 -3.875000 2.192388
+v 58.313976 -3.875000 1.996194
+v 58.627953 -3.875000 1.996194
+f 17 18 19
+f 19 18 20
+f 21 17 22
+f 22 17 19
+f 18 23 20
+f 20 23 24
+f 25 26 27
+f 25 27 28
+f 25 29 26
+f 30 25 28
+f 31 32 30
+f 31 33 32
+f 31 30 28
+f 34 31 28
+f 35 36 34
+f 35 37 36
+f 35 34 28
+f 38 35 28
+f 39 40 38
+f 39 41 40
+f 42 43 44
+f 42 44 45
+f 46 47 48
+f 46 48 49
+f 50 51 52
+f 50 52 53
+f 54 55 56
+f 54 56 57
+f 58 59 60
+f 58 61 59
+f 62 63 64
+f 62 65 63
+f 23 66 67
+f 21 23 67
+f 68 18 17
+f 68 69 18
+f 70 71 72
+f 73 70 72
+f 74 75 76
+f 74 77 75
+f 78 79 80
+f 78 81 79
+f 82 83 84
+f 82 81 83
+f 85 72 68
+f 85 76 73
+f 85 80 74
+f 85 84 78
+f 85 68 17
+f 85 73 72
+f 85 74 76
+f 85 78 80
+f 85 82 84
+f 82 26 41
+f 41 26 40
+f 40 26 37
+f 37 26 36
+f 36 26 33
+f 33 26 32
+f 32 26 29
+f 82 41 44
+f 82 44 43
+f 82 43 48
+f 82 48 47
+f 82 47 52
+f 82 52 51
+f 82 51 56
+f 82 56 55
+f 82 55 59
+f 82 59 61
+f 82 61 63
+f 82 63 65
+f 82 65 66
+f 82 66 23
+f 82 23 18
+f 82 18 69
+f 82 69 71
+f 82 71 70
+f 82 70 75
+f 82 75 77
+f 82 77 79
+f 82 79 81
+f 28 85 17
+f 28 17 21
+f 28 21 67
+f 28 67 62
+f 28 62 64
+f 28 64 58
+f 28 58 60
+f 28 60 54
+f 28 54 57
+f 28 57 50
+f 28 50 53
+f 28 53 46
+f 28 46 49
+f 28 49 42
+f 28 42 45
+f 28 45 39
+f 28 39 38
+f 86 87 88
+f 89 90 91
+f 86 92 87
+f 87 93 90
+f 92 93 87
+f 93 94 90
+f 95 96 94
+f 97 96 95
+f 94 96 90
+f 96 98 90
+f 99 100 98
+f 100 101 98
+f 98 101 90
+f 102 103 104
+f 104 103 105
+f 106 107 108
+f 108 107 109
+f 110 111 112
+f 111 113 112
+f 114 115 116
+f 117 115 114
+f 118 119 120
+f 121 119 118
+f 122 123 124
+f 125 123 122
+f 126 127 128
+f 129 127 126
+f 130 22 131
+f 24 22 130
+f 20 132 19
+f 133 132 20
+f 134 135 136
+f 137 135 134
+f 138 139 140
+f 141 139 138
+f 142 143 144
+f 143 145 144
+f 146 147 148
+f 143 147 146
+f 142 147 143
+f 145 149 144
+f 136 149 132
+f 140 149 135
+f 144 149 139
+f 148 149 145
+f 132 149 19
+f 135 149 136
+f 139 149 140
+f 147 149 148
+f 86 147 92
+f 92 147 95
+f 95 147 97
+f 97 147 99
+f 99 147 100
+f 100 147 104
+f 104 147 102
+f 102 147 108
+f 108 147 106
+f 106 147 110
+f 110 147 111
+f 111 147 114
+f 114 147 117
+f 117 147 118
+f 118 147 121
+f 121 147 122
+f 122 147 125
+f 125 147 126
+f 126 147 129
+f 129 147 130
+f 130 147 24
+f 24 147 20
+f 20 147 133
+f 133 147 134
+f 134 147 137
+f 137 147 138
+f 138 147 141
+f 141 147 142
+f 149 91 90
+f 149 90 101
+f 149 101 105
+f 149 105 103
+f 149 103 109
+f 149 109 107
+f 149 107 112
+f 149 112 113
+f 149 113 116
+f 149 116 115
+f 149 115 120
+f 149 120 119
+f 149 119 124
+f 149 124 123
+f 149 123 128
+f 149 128 127
+f 149 127 131
+f 149 131 22
+f 149 22 19
+f 23 21 24
+f 24 21 22
+f 150 151 82
+f 85 152 150
+f 85 150 82
+f 153 154 152
+f 153 152 85
+f 153 155 154
+f 156 153 85
+f 157 158 156
+f 157 159 158
+f 160 161 162
+f 163 162 157
+f 163 156 85
+f 163 157 156
+f 163 160 162
+f 160 82 155
+f 155 82 154
+f 154 82 151
+f 160 155 158
+f 160 158 159
+f 160 159 161
+f 82 164 165
+f 82 165 26
+f 166 85 28
+f 166 28 167
+f 168 26 165
+f 169 27 26
+f 169 26 168
+f 27 170 28
+f 170 167 28
+f 171 172 173
+f 167 91 171
+f 172 91 174
+f 171 91 172
+f 170 89 167
+f 167 89 91
+f 30 32 94
+f 94 32 95
+f 32 29 95
+f 95 29 92
+f 29 25 92
+f 92 25 93
+f 25 30 93
+f 93 30 94
+f 34 36 98
+f 98 36 99
+f 36 33 99
+f 99 33 97
+f 33 31 97
+f 97 31 96
+f 31 34 96
+f 96 34 98
+f 38 40 105
+f 105 40 104
+f 40 37 104
+f 104 37 100
+f 37 35 100
+f 100 35 101
+f 35 38 101
+f 101 38 105
+f 45 44 109
+f 109 44 108
+f 44 41 108
+f 108 41 102
+f 41 39 102
+f 102 39 103
+f 39 45 103
+f 103 45 109
+f 49 48 112
+f 112 48 110
+f 48 43 110
+f 110 43 106
+f 43 42 106
+f 106 42 107
+f 42 49 107
+f 107 49 112
+f 53 52 116
+f 116 52 114
+f 52 47 114
+f 114 47 111
+f 47 46 111
+f 111 46 113
+f 46 53 113
+f 113 53 116
+f 57 56 120
+f 120 56 118
+f 56 51 118
+f 118 51 117
+f 51 50 117
+f 117 50 115
+f 50 57 115
+f 115 57 120
+f 60 59 124
+f 124 59 122
+f 59 55 122
+f 122 55 121
+f 55 54 121
+f 121 54 119
+f 54 60 119
+f 119 60 124
+f 64 63 128
+f 128 63 126
+f 63 61 126
+f 126 61 125
+f 61 58 125
+f 125 58 123
+f 58 64 123
+f 123 64 128
+f 67 66 131
+f 131 66 130
+f 66 65 130
+f 130 65 129
+f 65 62 129
+f 129 62 127
+f 62 67 127
+f 127 67 131
+f 72 71 136
+f 136 71 134
+f 71 69 134
+f 134 69 133
+f 69 68 133
+f 133 68 132
+f 68 72 132
+f 132 72 136
+f 76 75 140
+f 140 75 138
+f 75 70 138
+f 138 70 137
+f 70 73 137
+f 137 73 135
+f 73 76 135
+f 135 76 140
+f 80 79 144
+f 144 79 142
+f 79 77 142
+f 142 77 141
+f 77 74 141
+f 141 74 139
+f 74 80 139
+f 139 80 144
+f 84 83 148
+f 148 83 146
+f 83 81 146
+f 146 81 143
+f 81 78 143
+f 143 78 145
+f 78 84 145
+f 145 84 148
+f 175 176 177
+f 178 179 175
+f 178 175 177
+f 180 179 178
+f 181 86 180
+f 181 180 178
+f 182 183 184
+f 147 86 181
+f 185 186 187
+f 185 184 186
+f 185 182 184
+f 188 187 147
+f 188 147 181
+f 188 185 187
+f 189 190 191
+f 189 181 190
+f 189 188 181
+f 192 189 191
+f 193 194 195
+f 193 191 194
+f 193 192 191
+f 196 193 195
+f 88 197 86
+f 197 198 86
+f 198 180 86
+f 198 199 180
+f 199 200 180
+f 201 202 198
+f 198 202 199
+f 203 204 147
+f 205 149 204
+f 204 149 147
+f 206 207 205
+f 205 207 149
+f 208 207 206
+f 207 209 149
+f 210 211 209
+f 212 211 210
+f 213 214 215
+f 187 214 213
+f 187 216 214
+f 215 217 211
+f 209 217 149
+f 211 217 209
+f 214 217 215
+f 218 219 217
+f 147 187 203
+f 203 187 206
+f 206 187 208
+f 208 187 210
+f 210 187 212
+f 212 187 213
+f 219 149 217
+f 88 87 89
+f 89 87 90
+f 220 166 167
+f 220 167 171
+f 221 171 173
+f 221 220 171
+f 222 173 172
+f 222 221 173
+f 223 172 174
+f 223 222 172
+f 149 174 91
+f 149 223 174
+f 224 225 163
+f 226 227 228
+f 229 227 226
+f 230 163 225
+f 219 224 227
+f 219 227 229
+f 218 225 224
+f 218 224 219
+f 183 231 160
+f 183 230 216
+f 183 160 230
+f 184 183 216
+f 186 184 216
+f 187 186 216
+f 160 163 230
+f 160 231 164
+f 160 164 82
+f 232 233 163
+f 234 232 163
+f 235 234 163
+f 236 237 234
+f 236 234 235
+f 238 235 163
+f 239 240 237
+f 241 238 163
+f 242 241 163
+f 243 242 163
+f 244 245 242
+f 244 242 243
+f 246 236 247
+f 246 237 236
+f 246 239 237
+f 248 249 245
+f 248 245 244
+f 250 244 251
+f 250 248 244
+f 85 252 243
+f 85 243 163
+f 253 254 252
+f 253 252 85
+f 241 255 256
+f 241 256 238
+f 152 154 205
+f 205 154 206
+f 154 151 206
+f 206 151 203
+f 151 150 203
+f 203 150 204
+f 150 152 204
+f 204 152 205
+f 156 158 209
+f 209 158 210
+f 158 155 210
+f 210 155 208
+f 155 153 208
+f 208 153 207
+f 153 156 207
+f 207 156 209
+f 162 161 215
+f 215 161 213
+f 161 159 213
+f 213 159 212
+f 159 157 212
+f 212 157 211
+f 157 162 211
+f 211 162 215
+f 165 164 257
+f 231 258 164
+f 258 257 164
+f 259 223 149
+f 259 222 223
+f 259 221 222
+f 259 220 221
+f 259 166 220
+f 253 85 166
+f 253 166 259
+f 260 169 261
+f 201 260 202
+f 262 201 263
+f 262 260 201
+f 264 262 265
+f 264 260 262
+f 266 264 267
+f 266 260 264
+f 268 266 269
+f 268 260 266
+f 270 268 271
+f 272 270 273
+f 274 272 275
+f 276 274 277
+f 278 276 279
+f 280 278 281
+f 282 280 283
+f 27 282 170
+f 27 169 282
+f 282 169 260
+f 282 260 280
+f 280 260 278
+f 278 260 276
+f 276 260 274
+f 274 260 272
+f 272 260 270
+f 270 260 268
+f 200 179 180
+f 200 175 179
+f 200 176 175
+f 284 168 176
+f 284 176 200
+f 169 284 261
+f 169 168 284
+f 176 168 177
+f 177 168 285
+f 165 286 168
+f 183 182 231
+f 231 287 288
+f 182 287 231
+f 287 285 286
+f 287 286 288
+f 286 285 168
+f 265 262 263
+f 267 264 265
+f 269 266 267
+f 271 268 269
+f 273 270 271
+f 275 272 273
+f 277 274 275
+f 279 276 277
+f 281 278 279
+f 283 280 281
+f 170 282 283
+f 89 170 283
+f 89 265 263
+f 89 267 265
+f 89 269 267
+f 89 271 269
+f 89 273 271
+f 89 275 273
+f 89 277 275
+f 89 279 277
+f 89 281 279
+f 89 283 281
+f 289 290 291
+f 291 182 292
+f 287 182 290
+f 290 182 291
+f 182 185 292
+f 185 188 292
+f 293 294 295
+f 295 294 296
+f 289 297 293
+f 293 297 294
+f 188 189 292
+f 189 192 292
+f 294 298 299
+f 297 298 294
+f 297 300 298
+f 301 302 196
+f 196 302 193
+f 193 302 192
+f 300 302 303
+f 303 302 304
+f 304 302 305
+f 305 302 306
+f 306 302 307
+f 307 302 301
+f 192 302 292
+f 297 302 300
+f 291 297 289
+f 301 196 308
+f 308 196 195
+f 309 310 311
+f 177 311 312
+f 177 285 309
+f 177 309 311
+f 178 177 312
+f 181 178 312
+f 313 314 315
+f 313 315 316
+f 317 310 314
+f 317 314 313
+f 190 181 312
+f 191 190 312
+f 318 313 319
+f 318 317 313
+f 320 317 318
+f 321 308 195
+f 321 195 194
+f 321 194 191
+f 321 320 322
+f 321 322 323
+f 321 323 324
+f 321 324 325
+f 321 325 326
+f 321 326 308
+f 321 191 312
+f 321 317 320
+f 317 311 310
+f 327 328 329
+f 330 331 328
+f 332 333 331
+f 334 335 333
+f 336 337 335
+f 338 339 337
+f 340 341 339
+f 342 343 341
+f 344 345 343
+f 346 347 345
+f 348 349 347
+f 350 351 349
+f 352 353 351
+f 354 355 353
+f 356 357 355
+f 358 359 357
+f 198 197 359
+f 328 360 329
+f 331 360 328
+f 333 360 331
+f 335 360 333
+f 337 360 335
+f 339 360 337
+f 341 360 339
+f 343 360 341
+f 345 360 343
+f 345 361 360
+f 347 361 345
+f 349 361 347
+f 351 361 349
+f 353 361 351
+f 197 362 359
+f 359 362 357
+f 357 362 355
+f 353 362 361
+f 355 362 353
+f 197 88 362
+f 198 359 201
+f 201 359 363
+f 200 199 364
+f 364 199 202
+f 218 217 216
+f 216 217 214
+f 365 366 219
+f 366 367 219
+f 367 368 219
+f 369 370 367
+f 367 370 368
+f 371 149 368
+f 368 149 219
+f 372 373 371
+f 371 373 149
+f 372 374 373
+f 373 375 149
+f 376 259 375
+f 375 259 149
+f 362 88 89
+f 362 89 377
+f 378 379 380
+f 381 382 378
+f 383 384 381
+f 385 386 383
+f 387 388 385
+f 389 390 387
+f 391 392 389
+f 393 394 391
+f 395 396 393
+f 397 398 395
+f 399 400 397
+f 401 402 399
+f 403 404 401
+f 405 406 403
+f 407 408 405
+f 409 410 407
+f 411 412 409
+f 413 414 411
+f 415 395 393
+f 415 378 380
+f 415 381 378
+f 415 383 381
+f 415 385 383
+f 415 387 385
+f 415 389 387
+f 415 391 389
+f 415 393 391
+f 416 417 413
+f 418 419 416
+f 420 421 418
+f 422 397 395
+f 422 399 397
+f 422 401 399
+f 422 403 401
+f 422 395 415
+f 423 424 420
+f 425 426 423
+f 427 428 425
+f 429 430 427
+f 431 432 429
+f 433 434 431
+f 230 435 433
+f 436 405 403
+f 436 403 422
+f 436 407 405
+f 436 409 407
+f 436 411 409
+f 436 413 411
+f 216 413 436
+f 216 416 413
+f 216 418 416
+f 216 420 418
+f 216 423 420
+f 216 425 423
+f 216 230 433
+f 216 427 425
+f 216 429 427
+f 216 431 429
+f 216 433 431
+f 225 437 230
+f 230 437 435
+f 438 439 440
+f 441 442 439
+f 443 444 442
+f 445 446 444
+f 447 448 446
+f 449 450 448
+f 451 452 450
+f 453 454 452
+f 455 456 454
+f 457 458 456
+f 459 460 458
+f 461 462 460
+f 463 464 462
+f 465 466 464
+f 467 468 466
+f 469 470 468
+f 471 472 470
+f 473 474 472
+f 456 475 454
+f 439 475 440
+f 442 475 439
+f 444 475 442
+f 446 475 444
+f 448 475 446
+f 450 475 448
+f 452 475 450
+f 454 475 452
+f 476 477 474
+f 478 479 477
+f 480 481 479
+f 458 482 456
+f 460 482 458
+f 462 482 460
+f 464 482 462
+f 456 482 475
+f 483 484 481
+f 485 486 484
+f 487 488 486
+f 489 490 488
+f 491 492 490
+f 493 494 492
+f 437 225 494
+f 466 495 464
+f 464 495 482
+f 468 495 466
+f 470 495 468
+f 472 495 470
+f 474 495 472
+f 474 218 495
+f 477 218 474
+f 479 218 477
+f 481 218 479
+f 484 218 481
+f 486 218 484
+f 225 218 494
+f 488 218 486
+f 490 218 488
+f 492 218 490
+f 494 218 492
+f 224 365 227
+f 227 365 228
+f 228 365 226
+f 226 365 229
+f 229 365 219
+f 163 233 224
+f 224 233 365
+f 233 232 366
+f 233 366 365
+f 496 497 367
+f 238 367 497
+f 235 238 497
+f 366 496 367
+f 232 234 496
+f 232 496 366
+f 237 498 496
+f 237 496 234
+f 498 240 499
+f 500 498 499
+f 501 498 500
+f 237 240 498
+f 247 236 501
+f 247 501 500
+f 499 239 502
+f 240 239 499
+f 239 246 503
+f 239 503 502
+f 246 247 500
+f 246 500 503
+f 501 236 235
+f 501 235 497
+f 238 256 367
+f 367 256 369
+f 256 255 370
+f 256 370 369
+f 255 241 370
+f 370 241 368
+f 504 252 371
+f 368 504 371
+f 505 504 368
+f 243 252 504
+f 241 242 505
+f 241 505 368
+f 245 506 505
+f 245 505 242
+f 507 506 508
+f 249 508 506
+f 245 249 506
+f 509 507 508
+f 251 244 507
+f 251 507 509
+f 249 248 510
+f 249 510 508
+f 248 250 511
+f 248 511 510
+f 250 251 511
+f 511 251 509
+f 507 244 243
+f 507 243 504
+f 252 254 371
+f 371 254 372
+f 512 253 259
+f 512 259 376
+f 372 513 374
+f 254 513 372
+f 254 253 513
+f 513 253 512
+f 288 514 231
+f 514 258 231
+f 258 514 257
+f 257 514 515
+f 515 286 165
+f 257 515 165
+f 516 517 518
+f 519 520 516
+f 521 522 519
+f 523 524 521
+f 525 526 523
+f 527 528 525
+f 529 530 527
+f 531 532 529
+f 533 534 531
+f 535 536 533
+f 537 538 535
+f 539 540 537
+f 541 542 539
+f 543 544 541
+f 545 546 543
+f 363 547 545
+f 263 201 363
+f 548 516 518
+f 548 519 516
+f 548 521 519
+f 548 523 521
+f 548 525 523
+f 548 527 525
+f 548 529 527
+f 548 531 529
+f 548 533 531
+f 549 533 548
+f 549 535 533
+f 549 537 535
+f 549 539 537
+f 549 541 539
+f 377 263 363
+f 377 363 545
+f 377 545 543
+f 377 541 549
+f 377 543 541
+f 89 263 377
+f 202 261 364
+f 202 260 261
+f 284 550 261
+f 261 550 551
+f 552 553 554
+f 555 556 553
+f 557 558 556
+f 559 560 558
+f 561 562 560
+f 563 564 562
+f 565 566 564
+f 567 568 566
+f 569 570 568
+f 571 572 570
+f 573 574 572
+f 575 576 574
+f 577 578 576
+f 579 580 578
+f 581 582 580
+f 583 584 582
+f 585 586 584
+f 587 588 586
+f 570 589 568
+f 553 589 554
+f 556 589 553
+f 558 589 556
+f 560 589 558
+f 562 589 560
+f 564 589 562
+f 566 589 564
+f 568 589 566
+f 590 591 588
+f 592 593 591
+f 594 595 593
+f 572 596 570
+f 574 596 572
+f 576 596 574
+f 578 596 576
+f 570 596 589
+f 597 598 595
+f 599 600 598
+f 601 602 600
+f 603 604 602
+f 605 606 604
+f 607 608 606
+f 550 284 608
+f 580 609 578
+f 578 609 596
+f 582 609 580
+f 584 609 582
+f 586 609 584
+f 588 609 586
+f 588 200 609
+f 591 200 588
+f 593 200 591
+f 595 200 593
+f 598 200 595
+f 600 200 598
+f 284 200 608
+f 602 200 600
+f 604 200 602
+f 606 200 604
+f 608 200 606
+f 285 287 309
+f 287 290 309
+f 514 288 515
+f 515 288 286
+f 321 302 317
+f 302 297 317
+f 312 610 611
+f 589 321 554
+f 554 321 611
+f 611 321 312
+f 610 518 589
+f 312 518 610
+f 589 329 321
+f 518 329 589
+f 312 548 518
+f 329 360 321
+f 312 612 548
+f 548 613 360
+f 612 613 548
+f 614 475 615
+f 615 415 613
+f 613 415 360
+f 475 415 615
+f 475 292 440
+f 614 292 475
+f 440 302 380
+f 380 302 415
+f 292 302 440
+f 312 292 612
+f 612 292 614
+f 302 321 415
+f 415 321 360
+f 297 291 317
+f 317 291 311
+f 311 291 312
+f 291 292 312
+f 301 308 326
+f 307 326 325
+f 307 301 326
+f 306 307 325
+f 305 325 324
+f 305 306 325
+f 304 324 323
+f 304 305 324
+f 303 322 320
+f 303 323 322
+f 303 304 323
+f 300 303 320
+f 298 300 320
+f 298 320 318
+f 299 298 318
+f 299 318 319
+f 294 299 319
+f 294 319 313
+f 296 294 313
+f 296 313 316
+f 295 296 316
+f 295 316 315
+f 293 295 314
+f 314 295 315
+f 289 293 314
+f 289 314 310
+f 290 289 309
+f 309 289 310
+f 361 362 549
+f 549 362 377
+f 361 549 548
+f 360 361 548
+f 327 329 518
+f 327 518 517
+f 328 327 516
+f 516 327 517
+f 330 328 520
+f 520 328 516
+f 331 330 519
+f 519 330 520
+f 332 331 522
+f 522 331 519
+f 333 332 521
+f 521 332 522
+f 334 333 524
+f 524 333 521
+f 335 334 523
+f 523 334 524
+f 336 335 526
+f 526 335 523
+f 337 336 525
+f 525 336 526
+f 338 337 528
+f 528 337 525
+f 339 338 527
+f 527 338 528
+f 340 339 530
+f 530 339 527
+f 341 340 529
+f 529 340 530
+f 342 341 532
+f 532 341 529
+f 343 342 531
+f 531 342 532
+f 344 343 534
+f 534 343 531
+f 345 344 533
+f 533 344 534
+f 346 345 536
+f 536 345 533
+f 347 346 535
+f 535 346 536
+f 348 347 538
+f 538 347 535
+f 349 348 537
+f 537 348 538
+f 350 349 540
+f 540 349 537
+f 351 350 539
+f 539 350 540
+f 352 351 542
+f 542 351 539
+f 353 352 541
+f 541 352 542
+f 354 353 541
+f 354 541 544
+f 355 354 543
+f 543 354 544
+f 356 355 546
+f 546 355 543
+f 357 356 545
+f 545 356 546
+f 358 357 545
+f 358 545 547
+f 359 358 363
+f 363 358 547
+f 609 200 364
+f 609 364 616
+f 495 218 216
+f 495 216 436
+f 376 375 374
+f 374 375 373
+f 482 495 422
+f 422 495 436
+f 482 422 415
+f 475 482 415
+f 438 440 380
+f 438 380 379
+f 439 438 378
+f 378 438 379
+f 441 439 382
+f 382 439 378
+f 442 441 381
+f 381 441 382
+f 443 442 384
+f 384 442 381
+f 444 443 383
+f 383 443 384
+f 445 444 386
+f 386 444 383
+f 446 445 385
+f 385 445 386
+f 447 446 388
+f 388 446 385
+f 448 447 387
+f 387 447 388
+f 449 448 390
+f 390 448 387
+f 450 449 389
+f 389 449 390
+f 451 450 392
+f 392 450 389
+f 452 451 391
+f 391 451 392
+f 453 452 394
+f 394 452 391
+f 454 453 393
+f 393 453 394
+f 455 454 396
+f 396 454 393
+f 456 455 395
+f 395 455 396
+f 457 456 398
+f 398 456 395
+f 458 457 397
+f 397 457 398
+f 459 458 400
+f 400 458 397
+f 460 459 399
+f 399 459 400
+f 461 460 402
+f 402 460 399
+f 462 461 401
+f 401 461 402
+f 463 462 404
+f 404 462 401
+f 464 463 403
+f 403 463 404
+f 465 464 403
+f 465 403 406
+f 466 465 405
+f 405 465 406
+f 467 466 408
+f 408 466 405
+f 468 467 407
+f 407 467 408
+f 469 468 407
+f 469 407 410
+f 470 469 409
+f 409 469 410
+f 471 470 412
+f 412 470 409
+f 472 471 411
+f 411 471 412
+f 473 472 414
+f 414 472 411
+f 474 473 413
+f 413 473 414
+f 476 474 417
+f 417 474 413
+f 477 476 416
+f 416 476 417
+f 478 477 419
+f 419 477 416
+f 479 478 418
+f 418 478 419
+f 480 479 421
+f 421 479 418
+f 481 480 420
+f 420 480 421
+f 483 481 424
+f 424 481 420
+f 484 483 423
+f 423 483 424
+f 485 484 426
+f 426 484 423
+f 486 485 425
+f 425 485 426
+f 487 486 428
+f 428 486 425
+f 488 487 427
+f 427 487 428
+f 489 488 430
+f 430 488 427
+f 490 489 429
+f 429 489 430
+f 491 490 432
+f 432 490 429
+f 492 491 431
+f 431 491 432
+f 493 492 434
+f 434 492 431
+f 494 493 433
+f 433 493 434
+f 437 494 435
+f 435 494 433
+f 498 501 497
+f 498 497 496
+f 499 502 500
+f 502 503 500
+f 506 507 504
+f 506 504 505
+f 510 511 508
+f 508 511 509
+f 617 618 614
+f 619 620 617
+f 621 622 619
+f 623 624 621
+f 625 626 623
+f 627 628 625
+f 629 630 627
+f 631 632 629
+f 633 634 631
+f 635 636 633
+f 637 638 635
+f 639 640 637
+f 641 642 639
+f 643 644 641
+f 645 646 643
+f 647 648 645
+f 649 650 647
+f 651 652 649
+f 615 633 631
+f 615 617 614
+f 615 619 617
+f 615 621 619
+f 615 623 621
+f 615 625 623
+f 615 627 625
+f 615 629 627
+f 615 631 629
+f 653 654 651
+f 655 656 653
+f 657 658 655
+f 659 635 633
+f 659 637 635
+f 659 639 637
+f 659 641 639
+f 659 633 615
+f 660 661 657
+f 662 663 660
+f 664 665 662
+f 666 667 664
+f 668 669 666
+f 670 671 668
+f 513 672 670
+f 673 643 641
+f 673 641 659
+f 673 645 643
+f 673 647 645
+f 673 649 647
+f 673 651 649
+f 374 651 673
+f 374 653 651
+f 374 655 653
+f 374 657 655
+f 374 660 657
+f 374 662 660
+f 374 513 670
+f 374 664 662
+f 374 666 664
+f 374 668 666
+f 374 670 668
+f 512 674 513
+f 513 674 672
+f 675 676 612
+f 677 678 676
+f 679 680 678
+f 681 682 680
+f 683 684 682
+f 685 686 684
+f 687 688 686
+f 689 690 688
+f 691 692 690
+f 693 694 692
+f 695 696 694
+f 697 698 696
+f 699 700 698
+f 701 702 700
+f 703 704 702
+f 705 706 704
+f 707 708 706
+f 709 710 708
+f 692 613 690
+f 676 613 612
+f 678 613 676
+f 680 613 678
+f 682 613 680
+f 684 613 682
+f 686 613 684
+f 688 613 686
+f 690 613 688
+f 711 712 710
+f 713 714 712
+f 715 716 714
+f 694 717 692
+f 696 717 694
+f 698 717 696
+f 700 717 698
+f 692 717 613
+f 718 719 716
+f 720 721 719
+f 722 723 721
+f 724 725 723
+f 726 727 725
+f 728 729 727
+f 674 512 729
+f 702 730 700
+f 700 730 717
+f 704 730 702
+f 706 730 704
+f 708 730 706
+f 710 730 708
+f 710 376 730
+f 712 376 710
+f 714 376 712
+f 716 376 714
+f 719 376 716
+f 721 376 719
+f 512 376 729
+f 723 376 721
+f 725 376 723
+f 727 376 725
+f 729 376 727
+f 731 732 611
+f 733 734 731
+f 735 736 733
+f 737 738 735
+f 739 740 737
+f 741 742 739
+f 743 744 741
+f 745 746 743
+f 747 748 745
+f 749 750 747
+f 751 752 749
+f 753 754 751
+f 755 756 753
+f 757 758 755
+f 759 760 757
+f 761 762 759
+f 763 764 761
+f 765 766 763
+f 610 747 745
+f 610 731 611
+f 610 733 731
+f 610 735 733
+f 610 737 735
+f 610 739 737
+f 610 741 739
+f 610 743 741
+f 610 745 743
+f 767 768 765
+f 769 770 767
+f 771 772 769
+f 773 749 747
+f 773 751 749
+f 773 753 751
+f 773 755 753
+f 773 747 610
+f 774 775 771
+f 776 777 774
+f 778 779 776
+f 780 781 778
+f 782 783 780
+f 784 785 782
+f 261 551 784
+f 616 757 755
+f 616 755 773
+f 616 759 757
+f 616 761 759
+f 616 763 761
+f 616 765 763
+f 364 765 616
+f 364 767 765
+f 364 769 767
+f 364 771 769
+f 364 774 771
+f 364 776 774
+f 364 261 784
+f 364 778 776
+f 364 780 778
+f 364 782 780
+f 364 784 782
+f 550 608 551
+f 551 608 784
+f 596 609 773
+f 773 609 616
+f 589 596 773
+f 589 773 610
+f 552 554 611
+f 552 611 732
+f 553 552 731
+f 731 552 732
+f 555 553 734
+f 734 553 731
+f 556 555 733
+f 733 555 734
+f 557 556 736
+f 736 556 733
+f 558 557 735
+f 735 557 736
+f 559 558 738
+f 738 558 735
+f 560 559 737
+f 737 559 738
+f 561 560 740
+f 740 560 737
+f 562 561 739
+f 739 561 740
+f 563 562 742
+f 742 562 739
+f 564 563 741
+f 741 563 742
+f 565 564 744
+f 744 564 741
+f 566 565 743
+f 743 565 744
+f 567 566 746
+f 746 566 743
+f 568 567 745
+f 745 567 746
+f 569 568 748
+f 748 568 745
+f 570 569 747
+f 747 569 748
+f 571 570 750
+f 750 570 747
+f 572 571 749
+f 749 571 750
+f 573 572 752
+f 752 572 749
+f 574 573 751
+f 751 573 752
+f 575 574 754
+f 754 574 751
+f 576 575 753
+f 753 575 754
+f 577 576 756
+f 756 576 753
+f 578 577 755
+f 755 577 756
+f 579 578 755
+f 579 755 758
+f 580 579 757
+f 757 579 758
+f 581 580 760
+f 760 580 757
+f 582 581 759
+f 759 581 760
+f 583 582 759
+f 583 759 762
+f 584 583 761
+f 761 583 762
+f 585 584 764
+f 764 584 761
+f 586 585 763
+f 763 585 764
+f 587 586 766
+f 766 586 763
+f 588 587 765
+f 765 587 766
+f 590 588 768
+f 768 588 765
+f 591 590 767
+f 767 590 768
+f 592 591 770
+f 770 591 767
+f 593 592 769
+f 769 592 770
+f 594 593 772
+f 772 593 769
+f 595 594 771
+f 771 594 772
+f 597 595 775
+f 775 595 771
+f 598 597 774
+f 774 597 775
+f 599 598 777
+f 777 598 774
+f 600 599 776
+f 776 599 777
+f 601 600 779
+f 779 600 776
+f 602 601 778
+f 778 601 779
+f 603 602 781
+f 781 602 778
+f 604 603 780
+f 780 603 781
+f 605 604 783
+f 783 604 780
+f 606 605 782
+f 782 605 783
+f 607 606 785
+f 785 606 782
+f 608 607 784
+f 784 607 785
+f 675 612 614
+f 675 614 618
+f 613 717 659
+f 613 659 615
+f 730 376 374
+f 730 374 673
+f 717 730 659
+f 659 730 673
+f 676 675 617
+f 617 675 618
+f 677 676 620
+f 620 676 617
+f 678 677 619
+f 619 677 620
+f 679 678 622
+f 622 678 619
+f 680 679 621
+f 621 679 622
+f 681 680 624
+f 624 680 621
+f 682 681 623
+f 623 681 624
+f 683 682 626
+f 626 682 623
+f 684 683 625
+f 625 683 626
+f 685 684 628
+f 628 684 625
+f 686 685 627
+f 627 685 628
+f 687 686 630
+f 630 686 627
+f 688 687 629
+f 629 687 630
+f 689 688 632
+f 632 688 629
+f 690 689 631
+f 631 689 632
+f 691 690 634
+f 634 690 631
+f 692 691 633
+f 633 691 634
+f 693 692 636
+f 636 692 633
+f 694 693 635
+f 635 693 636
+f 695 694 638
+f 638 694 635
+f 696 695 637
+f 637 695 638
+f 697 696 640
+f 640 696 637
+f 698 697 639
+f 639 697 640
+f 699 698 642
+f 642 698 639
+f 700 699 641
+f 641 699 642
+f 701 700 641
+f 701 641 644
+f 702 701 643
+f 643 701 644
+f 703 702 646
+f 646 702 643
+f 704 703 645
+f 645 703 646
+f 705 704 645
+f 705 645 648
+f 706 705 647
+f 647 705 648
+f 707 706 650
+f 650 706 647
+f 708 707 649
+f 649 707 650
+f 709 708 652
+f 652 708 649
+f 710 709 651
+f 651 709 652
+f 711 710 654
+f 654 710 651
+f 712 711 653
+f 653 711 654
+f 713 712 656
+f 656 712 653
+f 714 713 655
+f 655 713 656
+f 715 714 658
+f 658 714 655
+f 716 715 657
+f 657 715 658
+f 718 716 661
+f 661 716 657
+f 719 718 660
+f 660 718 661
+f 720 719 663
+f 663 719 660
+f 721 720 662
+f 662 720 663
+f 722 721 665
+f 665 721 662
+f 723 722 664
+f 664 722 665
+f 724 723 667
+f 667 723 664
+f 725 724 666
+f 666 724 667
+f 726 725 669
+f 669 725 666
+f 727 726 668
+f 668 726 669
+f 728 727 671
+f 671 727 668
+f 729 728 670
+f 670 728 671
+f 674 729 672
+f 672 729 670
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/suntory-hall-tokyo.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/suntory-hall-tokyo.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/suntory-hall-tokyo.obj	2025-03-01 12:43:13.468548288 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/suntory-hall-tokyo.obj	2025-08-26 18:16:07.545772112 +0000
@@ -1,6 +1,6 @@
-# Blender v2.82 (sub 7) OBJ File: ''
-# www.blender.org
-o Suntory_Hall_Tokyo
+# Suntory Hall Tokyo
+# (C) Linux Studio Plugins Project
+o Suntory Hall Tokyo
 v -0.091385 -11.868274 14.366107
 v -0.091385 -8.880274 15.434107
 v 11.108616 -8.880273 15.934107
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/train-carriage.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/train-carriage.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/train-carriage.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/train-carriage.obj	2025-08-26 18:16:07.545772112 +0000
@@ -0,0 +1,5267 @@
+# Train Carriage
+# (C) Linux Studio Plugins Project
+o Base
+v -1.422096 10.770070 3.983962
+v -1.359365 10.770070 4.081291
+v -1.207203 10.770070 4.205394
+v -1.459007 10.770070 3.883546
+v -1.088346 10.770070 4.261128
+v -1.489219 10.770070 3.657770
+v -0.944057 10.770070 4.306843
+v -0.479980 10.770070 4.379019
+v -1.486620 10.770070 3.208670
+v 0.000000 10.770070 4.400000
+v 0.227216 10.770070 1.400000
+v -1.486620 10.770070 1.400000
+v 0.227216 10.770070 4.394270
+v 0.227216 10.670070 1.400000
+v 0.227216 10.670070 4.394270
+v 0.000000 -11.940000 4.400000
+v 0.419510 -10.843361 4.383719
+v 0.978964 -11.940000 4.297362
+v 0.784062 -10.843361 4.341110
+v 1.125638 -10.843361 4.245904
+v 1.202969 -11.940000 4.207794
+v 1.293600 -10.843361 4.146285
+v 1.302159 -11.940000 4.139087
+v 0.000000 -9.730865 4.400000
+v 0.550572 -9.984322 4.372525
+v 1.402189 -10.843361 4.020919
+v 1.397264 -11.940000 4.028990
+v 1.460864 -11.940000 3.876476
+v 1.488495 -11.940000 3.673779
+v 1.488007 -11.757270 3.342651
+v 1.486620 -11.940000 3.208670
+v 1.486620 -11.757270 3.208670
+v 1.470113 -10.843361 3.835562
+v 1.488007 -10.977270 3.342651
+v 1.486620 -10.843361 3.208670
+v 1.486620 -10.977270 3.208670
+v 0.125138 -9.045800 4.397621
+v 0.408772 -8.508063 4.384477
+v 0.218545 -9.077109 4.394609
+v 0.315828 -8.476909 4.390165
+v 0.998387 -8.799303 4.291698
+v 0.000000 -7.836452 4.400000
+v 0.000000 -9.419128 4.400000
+v 0.530506 -7.836452 4.374489
+v 0.000000 -7.736452 4.400000
+v 0.550000 -7.648155 4.372582
+v 0.550000 -7.736452 4.372582
+v 0.550000 -7.048155 4.372582
+v 0.650000 -7.048155 4.361242
+v 0.650000 -7.648155 4.361242
+v 0.000000 -6.486452 4.400000
+v 0.550000 -6.486452 4.372582
+v 0.000000 -6.386452 4.400000
+v 0.550000 -5.841452 4.372582
+v 0.550000 -6.386452 4.372582
+v 0.550000 -5.241452 4.372582
+v 0.650000 -5.241452 4.361242
+v 0.650000 -5.841452 4.361242
+v 0.000000 -4.696452 4.400000
+v 0.550000 -4.696452 4.372582
+v 0.000000 -4.596452 4.400000
+v 0.550000 -4.051452 4.372582
+v 0.550000 -4.596452 4.372582
+v 0.550000 -3.451452 4.372582
+v 0.650000 -3.451452 4.361242
+v 0.650000 -4.051452 4.361242
+v 0.000000 -2.906452 4.400000
+v 0.550000 -2.906452 4.372582
+v 0.000000 -2.806452 4.400000
+v 0.550000 -2.261452 4.372582
+v 0.550000 -2.806452 4.372582
+v 0.650000 -1.661452 4.361242
+v 0.650000 -2.261452 4.361242
+v 0.550000 -1.661452 4.372582
+v 0.000000 -1.116452 4.400000
+v 0.550000 -1.116452 4.372582
+v 0.000000 -1.016452 4.400000
+v 0.550000 -0.471452 4.372582
+v 0.550000 -1.016452 4.372582
+v 0.550000 0.128548 4.372582
+v 0.650000 0.128548 4.361242
+v 0.650000 -0.471452 4.361242
+v 0.000000 0.673548 4.400000
+v 0.550000 0.673548 4.372582
+v 0.000000 0.773548 4.400000
+v 0.550000 1.318548 4.372582
+v 0.550000 0.773548 4.372582
+v 0.550000 1.918548 4.372582
+v 0.650000 1.318548 4.361242
+v 0.650000 1.918548 4.361242
+v 0.000000 2.463548 4.400000
+v 0.550000 2.463548 4.372582
+v 0.000000 2.563548 4.400000
+v 0.550000 3.108548 4.372582
+v 0.550000 2.563548 4.372582
+v 0.550000 3.708548 4.372582
+v 0.650000 3.108548 4.361242
+v 0.650000 3.708548 4.361242
+v 0.000000 4.253548 4.400000
+v 0.550000 4.253548 4.372582
+v 0.000000 4.353548 4.400000
+v 0.550000 4.898548 4.372582
+v 0.550000 4.353548 4.372582
+v 0.650000 5.498548 4.361242
+v 0.650000 4.898548 4.361242
+v 0.550000 5.498548 4.372582
+v 0.000000 6.043548 4.400000
+v 0.550000 6.043548 4.372582
+v 0.000000 6.143548 4.400000
+v 0.550000 6.688548 4.372582
+v 0.550000 6.143548 4.372582
+v 0.650000 7.288548 4.361242
+v 0.650000 6.688548 4.361242
+v 0.550000 7.288548 4.372582
+v 0.000000 7.833548 4.400000
+v 0.550000 7.833548 4.372582
+v 0.000000 7.933548 4.400000
+v 0.550000 8.478548 4.372582
+v 0.550000 7.933548 4.372582
+v 0.650000 9.078548 4.361242
+v 0.650000 8.478548 4.361242
+v 0.550000 9.078548 4.372582
+v 0.000000 9.470070 4.400000
+v 0.550000 9.470070 4.372582
+v 0.050000 10.670070 4.399260
+v 0.050000 9.570070 4.399260
+v 0.650000 9.570070 4.361242
+v 0.827216 10.670070 4.333141
+v 0.827216 10.770070 4.333141
+v 0.000000 11.860000 4.400000
+v 0.978964 11.860000 4.297362
+v 1.130590 10.770070 4.243746
+v 1.202969 11.860000 4.207794
+v 1.267547 10.770070 4.166472
+v 1.302159 11.860000 4.139087
+v 1.368115 10.770070 4.070503
+v 1.397264 11.860000 4.028990
+v 1.427169 10.770070 3.973171
+v 1.488007 10.902993 3.342651
+v 1.486620 10.902993 3.208670
+v 1.486620 10.770070 3.208670
+v 1.460864 11.860000 3.876476
+v 1.461607 10.770070 3.873557
+v 1.488495 11.860000 3.673779
+v 1.488007 11.682993 3.342651
+v 1.486620 11.860000 3.208670
+v 1.486620 11.682993 3.208670
+v 1.118900 -4.006667 4.248786
+v 1.118900 3.926667 4.248786
+v 1.486620 -8.799303 3.208670
+v 1.467940 3.926667 3.846199
+v 1.486620 10.670070 3.208670
+v 1.467940 -4.006667 3.846199
+v 1.272789 -8.223729 4.162603
+v 1.320248 -8.799303 4.122796
+v 1.421903 -8.799303 3.984360
+v 1.172737 -8.799303 4.223902
+v 0.650000 -7.786452 4.361242
+v 1.272789 -7.923729 4.162603
+v 1.425695 -7.923729 3.976375
+v 1.475664 -8.799303 3.804290
+v 1.425695 -7.320377 3.976375
+v 1.253930 -4.924059 4.176118
+v 1.253930 -4.624059 4.176118
+v 1.253930 -3.729059 4.176118
+v 1.253930 -3.134059 4.176118
+v 1.253930 -2.834059 4.176118
+v 1.253930 -2.239059 4.176118
+v 1.253930 -1.939059 4.176118
+v 1.253930 2.027607 4.176118
+v 1.253930 2.622607 4.176118
+v 1.253930 2.922607 4.176118
+v 1.253930 3.517607 4.176118
+v 1.253930 4.412607 4.176118
+v 1.253930 4.712607 4.176118
+v 1.253930 5.307607 4.176118
+v 1.425695 8.679309 3.976375
+v 1.425695 8.979309 3.976375
+v 1.425695 9.574309 3.976375
+v 1.240670 9.874309 4.184990
+v 1.240670 10.120070 4.184990
+v 1.427169 10.670070 3.973171
+v 1.368115 10.670070 4.070503
+v 1.267547 10.670070 4.166472
+v 1.130590 10.670070 4.243746
+v 1.425695 9.874309 3.976375
+v 1.461607 10.670070 3.873557
+v -1.488007 10.902993 3.342651
+v -1.486620 10.902993 3.208670
+v -1.486620 11.860000 3.208670
+v -1.488007 11.682993 3.342651
+v -1.486620 11.682993 3.208670
+v -1.488495 11.860000 3.673779
+v -1.118900 11.133380 4.248786
+v -1.118900 11.496690 4.248786
+v -0.978964 11.860000 4.297362
+v -1.202969 11.860000 4.207794
+v -1.302159 11.860000 4.139087
+v -1.397264 11.860000 4.028990
+v -1.467940 11.133380 3.846199
+v -1.467940 11.496690 3.846199
+v -1.460864 11.860000 3.876476
+v -1.486620 10.902993 1.442807
+v -1.486620 11.682993 1.442807
+v -1.486620 11.860000 1.400000
+v -0.371899 -10.843368 1.400000
+v -1.486620 -10.843368 1.400000
+v -1.486620 -11.940000 1.400000
+v 1.486620 -11.940000 1.400000
+v 0.419510 -10.843361 1.400000
+v 0.550572 -9.984322 1.400000
+v 1.486620 -10.843361 1.400000
+v 0.125138 -9.045800 1.400000
+v -1.486620 -7.836452 1.400000
+v -1.486620 -9.526452 1.400000
+v -0.035974 -9.526452 1.400000
+v 0.315828 -8.476909 1.400000
+v 0.408772 -8.508063 1.400000
+v 0.218545 -9.077109 1.400000
+v 0.998387 -8.799303 1.400000
+v 0.530506 -7.836452 1.400000
+v 0.650000 -7.786452 1.400000
+v 1.486620 -8.799303 1.400000
+v 0.650000 -7.648155 1.400000
+v 0.550000 -7.048155 1.400000
+v -1.486620 -7.736452 1.400000
+v 0.550000 -7.648155 1.400000
+v -1.486620 -6.486452 1.400000
+v 0.650000 -7.048155 1.400000
+v 0.550000 -6.486452 1.400000
+v 0.550000 -5.841452 1.400000
+v -1.486620 -6.386452 1.400000
+v 0.550000 -6.386452 1.400000
+v 0.650000 -5.841452 1.400000
+v 0.550000 -5.241452 1.400000
+v -1.486620 -4.696452 1.400000
+v 0.650000 -5.241452 1.400000
+v 0.550000 -4.696452 1.400000
+v 0.550000 -4.051452 1.400000
+v -1.486620 -4.596452 1.400000
+v 0.550000 -4.596452 1.400000
+v 0.650000 -4.051452 1.400000
+v 0.550000 -3.451452 1.400000
+v -1.486620 -2.906452 1.400000
+v 0.650000 -3.451452 1.400000
+v 0.550000 -2.906452 1.400000
+v 0.550000 -2.261452 1.400000
+v -1.486620 -2.806452 1.400000
+v 0.550000 -2.806452 1.400000
+v 0.550000 -1.661452 1.400000
+v -1.486620 -1.116452 1.400000
+v 0.650000 -1.661452 1.400000
+v 0.650000 -2.261452 1.400000
+v 0.550000 -1.116452 1.400000
+v 0.550000 -0.471452 1.400000
+v -1.486620 -1.016452 1.400000
+v 0.550000 -1.016452 1.400000
+v 0.550000 0.128548 1.400000
+v -1.486620 0.673548 1.400000
+v 0.650000 0.128548 1.400000
+v 0.650000 -0.471452 1.400000
+v 0.550000 0.673548 1.400000
+v 0.550000 1.318548 1.400000
+v -1.486620 0.773548 1.400000
+v 0.550000 0.773548 1.400000
+v 0.550000 1.918548 1.400000
+v -1.486620 2.463548 1.400000
+v 0.650000 1.918548 1.400000
+v 0.650000 1.318548 1.400000
+v 0.550000 2.463548 1.400000
+v 0.550000 3.108548 1.400000
+v -1.486620 2.563548 1.400000
+v 0.550000 2.563548 1.400000
+v 0.550000 3.708548 1.400000
+v -1.486620 4.253548 1.400000
+v 0.650000 3.708548 1.400000
+v 0.650000 3.108548 1.400000
+v 0.550000 4.253548 1.400000
+v 0.550000 4.898548 1.400000
+v -1.486620 4.353548 1.400000
+v 0.550000 4.353548 1.400000
+v 0.550000 5.498548 1.400000
+v -1.486620 6.043548 1.400000
+v 0.650000 5.498548 1.400000
+v 0.650000 4.898548 1.400000
+v 0.550000 6.043548 1.400000
+v 0.550000 6.688548 1.400000
+v -1.486620 7.833548 1.400000
+v -1.486620 6.143548 1.400000
+v 0.550000 6.143548 1.400000
+v 0.550000 7.288548 1.400000
+v 0.650000 7.288548 1.400000
+v 0.650000 6.688548 1.400000
+v 0.550000 7.833548 1.400000
+v 0.550000 8.478548 1.400000
+v -1.486620 7.933548 1.400000
+v 0.550000 7.933548 1.400000
+v 0.650000 9.078548 1.400000
+v 0.550000 9.078548 1.400000
+v 0.650000 8.478548 1.400000
+v 0.050000 10.670070 1.400000
+v 0.050000 9.570070 1.400000
+v 0.650000 9.570070 1.400000
+v 0.827216 10.670070 1.400000
+v 0.827216 10.770070 1.400000
+v 1.486620 10.670070 1.400000
+v 1.486620 11.860000 1.400000
+v 1.486620 10.770070 1.400000
+v 0.550000 9.470070 1.400000
+v -1.486620 9.470070 1.400000
+v 0.550000 -7.736452 1.400000
+v -0.400000 11.860000 1.507524
+v -0.400000 11.860000 3.407524
+v 0.400000 11.860000 3.407524
+v 0.400000 11.860000 1.507524
+v 1.486620 10.902993 1.442807
+v 1.486620 11.682993 1.442807
+v 1.586620 11.682993 1.442807
+v 1.586620 11.682993 3.208670
+v 1.587493 11.682993 3.342651
+v 1.587493 10.902993 3.342651
+v 1.586620 10.902993 3.208670
+v 1.586620 10.902993 1.442807
+v 1.486620 -8.035861 3.100000
+v 1.486620 -8.735861 3.100000
+v 1.486620 -8.735861 2.200000
+v 1.486620 -7.535861 3.100000
+v 1.486620 -8.035861 2.200000
+v 1.486620 -7.535861 2.200000
+v 1.486620 -6.835861 2.200000
+v 1.486620 -6.835861 3.100000
+v 1.486620 -6.043502 2.200000
+v 1.486620 -6.043502 3.100000
+v 1.486620 -5.043502 2.200000
+v 1.486620 -4.253502 3.100000
+v 1.486620 -5.043502 3.100000
+v 1.486620 -4.253502 2.200000
+v 1.486620 -3.253502 3.100000
+v 1.486620 -2.463502 2.200000
+v 1.486620 -3.253502 2.200000
+v 1.486620 -2.463502 3.100000
+v 1.486620 -0.673502 3.100000
+v 1.486620 -0.673502 2.200000
+v 1.486620 -1.463502 3.100000
+v 1.486620 -1.463502 2.200000
+v 1.486620 1.116498 3.100000
+v 1.486620 1.116498 2.200000
+v 1.486620 0.326498 3.100000
+v 1.486620 0.326498 2.200000
+v 1.486620 2.906498 3.100000
+v 1.486620 2.906498 2.200000
+v 1.486620 2.116498 3.100000
+v 1.486620 2.116498 2.200000
+v 1.486620 4.696498 3.100000
+v 1.486620 4.696498 2.200000
+v 1.486620 3.906498 3.100000
+v 1.486620 3.906498 2.200000
+v 1.486620 6.486498 3.100000
+v 1.486620 6.486498 2.200000
+v 1.486620 5.696498 3.100000
+v 1.486620 5.696498 2.200000
+v 1.486620 8.276498 3.100000
+v 1.486620 7.486498 2.200000
+v 1.486620 7.486498 3.100000
+v 1.486620 8.276498 2.200000
+v 1.486620 9.276498 3.100000
+v 1.486620 9.769932 3.100000
+v 1.486620 10.469932 3.100000
+v 1.486620 9.769932 2.200000
+v 1.486620 9.276498 2.200000
+v 1.486620 10.469932 2.200000
+v 1.486620 -11.757270 1.442807
+v 1.486620 -10.977270 1.442807
+v 1.586620 -10.977270 1.442807
+v 1.586620 -10.977270 3.208670
+v 1.587493 -10.977270 3.342651
+v 1.587493 -11.757270 3.342651
+v 1.586620 -11.757270 3.208670
+v 1.586620 -11.757270 1.442807
+v -1.486620 -11.940000 3.208670
+v -0.400000 -11.940000 1.507524
+v -1.302159 -11.940000 4.139087
+v -1.460864 -11.940000 3.876476
+v -1.397264 -11.940000 4.028990
+v -1.202969 -11.940000 4.207794
+v -0.400000 -11.940000 3.407524
+v -1.488495 -11.940000 3.673779
+v -0.978964 -11.940000 4.297362
+v 0.400000 -11.940000 3.407524
+v 0.400000 -11.940000 1.507524
+v -0.371899 -10.843368 4.386916
+v -1.488007 -11.757270 3.342651
+v -1.486620 -11.757270 3.208670
+v -1.486620 -10.843368 3.208670
+v -1.488007 -10.977270 3.342651
+v -1.486620 -10.977270 3.208670
+v -1.467324 -10.843368 3.849082
+v -1.118900 -11.203622 4.248786
+v -1.403249 -10.843368 4.019132
+v -1.289547 -10.843368 4.149590
+v -1.131807 -10.843368 4.243211
+v -0.764663 -10.843368 4.344433
+v -1.467940 -11.203622 3.846199
+v -0.035974 -9.526452 4.399495
+v -0.523873 -9.526452 4.375117
+v -1.118900 -8.963119 4.248786
+v -1.221331 -9.526452 4.197103
+v -1.367428 -9.526452 4.071374
+v -0.992177 -9.526452 4.293540
+v -1.118900 -8.399785 4.248786
+v -1.359365 -7.836452 4.081291
+v -1.207203 -7.836452 4.205394
+v -1.088346 -7.836452 4.261128
+v -0.944057 -7.836452 4.306843
+v -0.479980 -7.836452 4.379019
+v -1.467940 -8.963119 3.846199
+v -1.489447 -9.526452 3.651983
+v -1.486620 -9.526452 3.208670
+v -1.461405 -9.526452 3.874357
+v -1.426772 -9.526452 3.974038
+v -1.486620 -7.836452 3.208670
+v -1.467940 -8.399785 3.846199
+v -1.489219 -7.836452 3.657770
+v -1.459007 -7.836452 3.883546
+v -1.422096 -7.836452 3.983962
+v -1.422096 -7.736452 3.983962
+v -1.359365 -7.736452 4.081291
+v -1.207203 -7.736452 4.205394
+v -1.459007 -7.736452 3.883546
+v -1.088346 -7.736452 4.261128
+v -1.489219 -7.736452 3.657770
+v -0.944057 -7.736452 4.306843
+v -0.479980 -7.736452 4.379019
+v -1.486620 -7.736452 3.208670
+v -0.479980 -6.486452 4.379019
+v -1.118900 -7.319785 4.248786
+v -1.118900 -6.903119 4.248786
+v -1.359365 -6.486452 4.081291
+v -1.207203 -6.486452 4.205394
+v -1.088346 -6.486452 4.261128
+v -0.944057 -6.486452 4.306843
+v -1.467940 -7.319785 3.846199
+v -1.467940 -6.903119 3.846199
+v -1.486620 -6.486452 3.208670
+v -1.489219 -6.486452 3.657770
+v -1.459007 -6.486452 3.883546
+v -1.422096 -6.486452 3.983962
+v -1.422096 -6.386452 3.983962
+v -1.359365 -6.386452 4.081291
+v -1.207203 -6.386452 4.205394
+v -1.459007 -6.386452 3.883546
+v -1.088346 -6.386452 4.261128
+v -1.489219 -6.386452 3.657770
+v -0.944057 -6.386452 4.306843
+v -0.479980 -6.386452 4.379019
+v -1.486620 -6.386452 3.208670
+v -1.118900 -5.823119 4.248786
+v -1.118900 -5.259785 4.248786
+v -1.359365 -4.696452 4.081291
+v -1.207203 -4.696452 4.205394
+v -1.088346 -4.696452 4.261128
+v -0.944057 -4.696452 4.306843
+v -0.479980 -4.696452 4.379019
+v -1.467940 -5.823119 3.846199
+v -1.467940 -5.259785 3.846199
+v -1.486620 -4.696452 3.208670
+v -1.489219 -4.696452 3.657770
+v -1.459007 -4.696452 3.883546
+v -1.422096 -4.696452 3.983962
+v -1.422096 -4.596452 3.983962
+v -1.359365 -4.596452 4.081291
+v -1.207203 -4.596452 4.205394
+v -1.459007 -4.596452 3.883546
+v -1.088346 -4.596452 4.261128
+v -1.489219 -4.596452 3.657770
+v -0.944057 -4.596452 4.306843
+v -0.479980 -4.596452 4.379019
+v -1.486620 -4.596452 3.208670
+v -1.118900 -4.033119 4.248786
+v -1.118900 -3.469785 4.248786
+v -1.359365 -2.906452 4.081291
+v -1.207203 -2.906452 4.205394
+v -1.088346 -2.906452 4.261128
+v -0.944057 -2.906452 4.306843
+v -0.479980 -2.906452 4.379019
+v -1.467940 -4.033119 3.846199
+v -1.467940 -3.469785 3.846199
+v -1.486620 -2.906452 3.208670
+v -1.489219 -2.906452 3.657770
+v -1.459007 -2.906452 3.883546
+v -1.422096 -2.906452 3.983962
+v -1.422096 -2.806452 3.983962
+v -1.359365 -2.806452 4.081291
+v -1.207203 -2.806452 4.205394
+v -1.459007 -2.806452 3.883546
+v -1.088346 -2.806452 4.261128
+v -1.489219 -2.806452 3.657770
+v -0.944057 -2.806452 4.306843
+v -0.479980 -2.806452 4.379019
+v -1.486620 -2.806452 3.208670
+v -1.118900 -2.243119 4.248786
+v -1.118900 -1.679785 4.248786
+v -1.359365 -1.116452 4.081291
+v -1.207203 -1.116452 4.205394
+v -1.088346 -1.116452 4.261128
+v -0.944057 -1.116452 4.306843
+v -0.479980 -1.116452 4.379019
+v -1.467940 -2.243119 3.846199
+v -1.486620 -1.116452 3.208670
+v -1.467940 -1.679785 3.846199
+v -1.489219 -1.116452 3.657770
+v -1.459007 -1.116452 3.883546
+v -1.422096 -1.116452 3.983962
+v -1.422096 -1.016452 3.983962
+v -1.359365 -1.016452 4.081291
+v -1.207203 -1.016452 4.205394
+v -1.459007 -1.016452 3.883546
+v -1.088346 -1.016452 4.261128
+v -1.489219 -1.016452 3.657770
+v -0.944057 -1.016452 4.306843
+v -0.479980 -1.016452 4.379019
+v -1.486620 -1.016452 3.208670
+v -1.118900 -0.453119 4.248786
+v -1.118900 0.110215 4.248786
+v -1.359365 0.673548 4.081291
+v -1.207203 0.673548 4.205394
+v -1.088346 0.673548 4.261128
+v -0.944057 0.673548 4.306843
+v -0.479980 0.673548 4.379019
+v -1.467940 -0.453119 3.846199
+v -1.486620 0.673548 3.208670
+v -1.467940 0.110215 3.846199
+v -1.489219 0.673548 3.657770
+v -1.459007 0.673548 3.883546
+v -1.422096 0.673548 3.983962
+v -1.422096 0.773548 3.983962
+v -1.359365 0.773548 4.081291
+v -1.207203 0.773548 4.205394
+v -1.459007 0.773548 3.883546
+v -1.088346 0.773548 4.261128
+v -1.489219 0.773548 3.657770
+v -0.944057 0.773548 4.306843
+v -0.479980 0.773548 4.379019
+v -1.486620 0.773548 3.208670
+v -1.118900 1.336881 4.248786
+v -1.118900 1.900215 4.248786
+v -1.359365 2.463548 4.081291
+v -1.207203 2.463548 4.205394
+v -1.088346 2.463548 4.261128
+v -0.944057 2.463548 4.306843
+v -0.479980 2.463548 4.379019
+v -1.467940 1.336881 3.846199
+v -1.486620 2.463548 3.208670
+v -1.467940 1.900215 3.846199
+v -1.489219 2.463548 3.657770
+v -1.459007 2.463548 3.883546
+v -1.422096 2.463548 3.983962
+v -1.422096 2.563548 3.983962
+v -1.359365 2.563548 4.081291
+v -1.207203 2.563548 4.205394
+v -1.459007 2.563548 3.883546
+v -1.088346 2.563548 4.261128
+v -1.489219 2.563548 3.657770
+v -0.944057 2.563548 4.306843
+v -0.479980 2.563548 4.379019
+v -1.486620 2.563548 3.208670
+v -1.118900 3.126881 4.248786
+v -1.118900 3.690215 4.248786
+v -1.359365 4.253548 4.081291
+v -1.207203 4.253548 4.205394
+v -1.088346 4.253548 4.261128
+v -0.944057 4.253548 4.306843
+v -0.479980 4.253548 4.379019
+v -1.467940 3.126881 3.846199
+v -1.467940 3.690215 3.846199
+v -1.486620 4.253548 3.208670
+v -1.489219 4.253548 3.657770
+v -1.459007 4.253548 3.883546
+v -1.422096 4.253548 3.983962
+v -1.422096 4.353548 3.983962
+v -1.359365 4.353548 4.081291
+v -1.207203 4.353548 4.205394
+v -1.459007 4.353548 3.883546
+v -1.088346 4.353548 4.261128
+v -1.489219 4.353548 3.657770
+v -0.944057 4.353548 4.306843
+v -0.479980 4.353548 4.379019
+v -1.486620 4.353548 3.208670
+v -1.118900 4.916882 4.248786
+v -1.118900 5.480215 4.248786
+v -1.359365 6.043548 4.081291
+v -1.207203 6.043548 4.205394
+v -1.088346 6.043548 4.261128
+v -0.944057 6.043548 4.306843
+v -0.479980 6.043548 4.379019
+v -1.467940 4.916882 3.846199
+v -1.467940 5.480215 3.846199
+v -1.486620 6.043548 3.208670
+v -1.489219 6.043548 3.657770
+v -1.459007 6.043548 3.883546
+v -1.422096 6.043548 3.983962
+v -1.422096 6.143548 3.983962
+v -1.359365 6.143548 4.081291
+v -1.207203 6.143548 4.205394
+v -1.459007 6.143548 3.883546
+v -1.088346 6.143548 4.261128
+v -1.489219 6.143548 3.657770
+v -0.944057 6.143548 4.306843
+v -0.479980 6.143548 4.379019
+v -1.486620 6.143548 3.208670
+v -1.118900 6.706882 4.248786
+v -1.118900 7.270215 4.248786
+v -1.359365 7.833548 4.081291
+v -1.207203 7.833548 4.205394
+v -1.088346 7.833548 4.261128
+v -0.944057 7.833548 4.306843
+v -0.479980 7.833548 4.379019
+v -1.467940 6.706882 3.846199
+v -1.486620 7.833548 3.208670
+v -1.467940 7.270215 3.846199
+v -1.489219 7.833548 3.657770
+v -1.459007 7.833548 3.883546
+v -1.422096 7.833548 3.983962
+v -1.422096 7.933548 3.983962
+v -1.359365 7.933548 4.081291
+v -1.207203 7.933548 4.205394
+v -1.459007 7.933548 3.883546
+v -1.088346 7.933548 4.261128
+v -1.489219 7.933548 3.657770
+v -0.944057 7.933548 4.306843
+v -0.479980 7.933548 4.379019
+v -1.486620 7.933548 3.208670
+v -1.118900 8.445722 4.248786
+v -1.118900 8.957896 4.248786
+v -1.359365 9.470070 4.081291
+v -1.207203 9.470070 4.205394
+v -1.088346 9.470070 4.261128
+v -0.944057 9.470070 4.306843
+v -0.479980 9.470070 4.379019
+v -1.467940 8.445722 3.846199
+v -1.486620 9.470070 3.208670
+v -1.467940 8.957896 3.846199
+v -1.489219 9.470070 3.657770
+v -1.459007 9.470070 3.883546
+v -1.422096 9.470070 3.983962
+v -1.586620 11.682993 1.442807
+v -1.586620 11.682993 3.208670
+v -1.587493 11.682993 3.342651
+v -1.587493 10.902993 3.342651
+v -1.586620 10.902993 3.208670
+v -1.586620 10.902993 1.442807
+v -1.486620 -11.757270 1.442807
+v -1.486620 -10.977270 1.442807
+v -1.486620 -8.735861 3.100000
+v -1.486620 -8.035861 3.100000
+v -1.486620 -8.735861 2.200000
+v -1.486620 -8.035861 2.200000
+v -1.486620 -6.835861 3.100000
+v -1.486620 -7.535861 3.100000
+v -1.486620 -7.535861 2.200000
+v -1.486620 -6.835861 2.200000
+v -1.486620 -6.043502 2.200000
+v -1.486620 -6.043502 3.100000
+v -1.486620 -5.043502 3.100000
+v -1.486620 -5.043502 2.200000
+v -1.486620 -4.253502 2.200000
+v -1.486620 -4.253502 3.100000
+v -1.486620 -3.253502 3.100000
+v -1.486620 -3.253502 2.200000
+v -1.486620 -2.463502 2.200000
+v -1.486620 -2.463502 3.100000
+v -1.486620 -1.463502 3.100000
+v -1.486620 -1.463502 2.200000
+v -1.486620 -0.673502 2.200000
+v -1.486620 -0.673502 3.100000
+v -1.486620 0.326498 3.100000
+v -1.486620 0.326498 2.200000
+v -1.486620 1.116498 2.200000
+v -1.486620 1.116498 3.100000
+v -1.486620 2.116498 3.100000
+v -1.486620 2.116498 2.200000
+v -1.486620 2.906498 2.200000
+v -1.486620 2.906498 3.100000
+v -1.486620 3.906498 3.100000
+v -1.486620 3.906498 2.200000
+v -1.486620 4.696498 2.200000
+v -1.486620 4.696498 3.100000
+v -1.486620 5.696498 3.100000
+v -1.486620 5.696498 2.200000
+v -1.486620 6.486498 2.200000
+v -1.486620 6.486498 3.100000
+v -1.486620 7.486498 3.100000
+v -1.486620 7.486498 2.200000
+v -1.486620 8.276498 2.200000
+v -1.486620 8.276498 3.100000
+v -1.486620 9.276498 3.100000
+v -1.486620 9.276498 2.200000
+v -0.400000 12.265111 3.407524
+v 0.400000 12.265111 3.407524
+v 0.400000 12.265111 1.507524
+v -0.400000 12.265111 1.507524
+v 1.586620 -12.346386 3.208670
+v 1.584480 -12.044222 3.729534
+v 1.584480 -12.346386 3.729534
+v 1.586620 12.265111 3.208670
+v 1.586450 12.265111 3.693555
+v 1.586450 11.962947 3.693555
+v 1.178655 4.061279 4.326178
+v 0.000000 11.962947 4.500000
+v 0.000000 -12.044222 4.500000
+v 1.178655 -4.142554 4.326178
+v 1.558928 4.061279 3.915411
+v 1.558928 -4.142554 3.915411
+v 1.410266 -11.510746 4.185583
+v 1.388684 -12.044222 4.204949
+v 1.468127 -12.044222 4.120216
+v 1.219872 -12.044222 4.308654
+v 0.968754 -12.044222 4.391364
+v 0.628762 -12.044222 4.451078
+v 1.484220 -11.510746 4.096951
+v 1.523617 -11.510746 4.023369
+v 1.541831 -12.044222 3.975819
+v 1.552159 -11.510746 3.941891
+v 1.547526 -7.559912 3.957927
+v 1.547526 7.482136 3.957927
+v 1.410266 11.432970 4.185583
+v 1.483392 11.962947 4.098224
+v 1.408558 11.962947 4.187195
+v 1.257249 11.962947 4.290767
+v 1.003042 11.962947 4.382784
+v 0.650718 11.962947 4.448250
+v 1.486781 11.432970 4.092964
+v 1.527551 11.432970 4.014103
+v 1.550698 11.962947 3.947111
+v 1.556337 11.432970 3.926039
+v 1.150124 -9.802067 4.337169
+v 1.150125 9.722542 4.337169
+v 1.544304 -10.389668 3.968269
+v 1.556293 -10.389668 3.926213
+v 1.544304 10.312767 3.968269
+v 1.556293 10.312767 3.926213
+v 1.586620 -12.346386 1.034082
+v 1.586620 -8.735861 2.200000
+v 1.586620 -8.735861 3.100000
+v 1.586620 -8.035861 2.200000
+v 1.586620 -7.535861 2.200000
+v 1.586620 -8.035861 3.100000
+v 1.586620 -7.535861 3.100000
+v 1.586620 -6.835861 2.200000
+v 1.586620 -6.043502 2.200000
+v 1.586620 -6.835861 3.100000
+v 1.586620 -6.043502 3.100000
+v 1.586620 -4.253502 2.200000
+v 1.586620 -4.253502 3.100000
+v 1.586620 -5.043502 3.100000
+v 1.586620 -5.043502 2.200000
+v 1.586620 -2.463502 2.200000
+v 1.586620 -2.463502 3.100000
+v 1.586620 -3.253502 3.100000
+v 1.586620 -3.253502 2.200000
+v 1.586620 -0.673502 2.200000
+v 1.586620 -0.673502 3.100000
+v 1.586620 -1.463502 3.100000
+v 1.586620 -1.463502 2.200000
+v 1.586620 1.116498 2.200000
+v 1.586620 1.116498 3.100000
+v 1.586620 0.326498 3.100000
+v 1.586620 0.326498 2.200000
+v 1.586620 2.906498 2.200000
+v 1.586620 2.906498 3.100000
+v 1.586620 2.116498 3.100000
+v 1.586620 2.116498 2.200000
+v 1.586620 3.906498 2.200000
+v 1.586620 4.696498 3.100000
+v 1.586620 3.906498 3.100000
+v 1.586620 4.696498 2.200000
+v 1.586620 5.696498 2.200000
+v 1.586620 6.486498 3.100000
+v 1.586620 5.696498 3.100000
+v 1.586620 6.486498 2.200000
+v 1.586620 7.486498 2.200000
+v 1.586620 8.276498 3.100000
+v 1.586620 7.486498 3.100000
+v 1.586620 8.276498 2.200000
+v 1.586620 9.276498 2.200000
+v 1.586620 9.769932 3.100000
+v 1.586620 9.276498 3.100000
+v 1.586620 9.769932 2.200000
+v 1.586620 10.469932 3.100000
+v 1.586620 10.469932 2.200000
+v 1.586620 12.265111 1.034082
+v 0.400000 -12.346386 3.407524
+v -0.400000 -12.346386 3.407524
+v 0.400000 -12.346386 1.507524
+v -0.400000 -12.346386 1.507524
+v -1.586620 -10.977270 1.442807
+v -1.586620 -10.977270 3.208670
+v -1.587493 -10.977270 3.342651
+v -1.587493 -11.757270 3.342651
+v -1.586620 -11.757270 3.208670
+v -1.586620 -11.757270 1.442807
+v -1.586620 -12.346386 3.208670
+v -1.586620 -12.346386 1.034082
+v -1.586620 -8.735861 2.200000
+v -1.586620 -8.735861 3.100000
+v -1.586620 -8.035861 2.200000
+v -1.586620 -8.035861 3.100000
+v -1.586620 -7.535861 2.200000
+v -1.586620 -7.535861 3.100000
+v -1.586620 -6.835861 2.200000
+v -1.586620 -6.835861 3.100000
+v -1.586620 -6.043502 2.200000
+v -1.586620 -6.043502 3.100000
+v -1.586620 -4.253502 3.100000
+v -1.586620 -4.253502 2.200000
+v -1.586620 -5.043502 3.100000
+v -1.586620 -5.043502 2.200000
+v -1.586620 -2.463502 3.100000
+v -1.586620 -2.463502 2.200000
+v -1.586620 -3.253502 3.100000
+v -1.586620 -3.253502 2.200000
+v -1.586620 -0.673502 3.100000
+v -1.586620 -0.673502 2.200000
+v -1.586620 -1.463502 3.100000
+v -1.586620 -1.463502 2.200000
+v -1.586620 1.116498 3.100000
+v -1.586620 1.116498 2.200000
+v -1.586620 0.326498 3.100000
+v -1.586620 0.326498 2.200000
+v -1.586620 2.906498 3.100000
+v -1.586620 2.906498 2.200000
+v -1.586620 2.116498 3.100000
+v -1.586620 2.116498 2.200000
+v -1.586620 4.696498 3.100000
+v -1.586620 3.906498 2.200000
+v -1.586620 3.906498 3.100000
+v -1.586620 4.696498 2.200000
+v -1.586620 6.486498 3.100000
+v -1.586620 6.486498 2.200000
+v -1.586620 5.696498 3.100000
+v -1.586620 5.696498 2.200000
+v -1.586620 7.486498 3.100000
+v -1.586620 8.276498 2.200000
+v -1.586620 7.486498 2.200000
+v -1.586620 8.276498 3.100000
+v -1.586620 9.769932 3.100000
+v -1.586620 9.276498 2.200000
+v -1.586620 9.276498 3.100000
+v -1.586620 9.769932 2.200000
+v -1.586620 10.469932 3.100000
+v -1.586620 10.469932 2.200000
+v -1.586620 12.265111 3.208670
+v -1.586620 12.265111 1.034082
+v -1.584480 -12.044222 3.729534
+v -1.584480 -12.346386 3.729534
+v -1.586450 12.265111 3.693555
+v -1.586450 11.962947 3.693555
+v -1.178655 4.061279 4.326178
+v -1.178655 -4.142554 4.326178
+v -1.558928 4.061279 3.915411
+v -1.558928 -4.142554 3.915411
+v -1.388684 -12.044222 4.204949
+v -1.410266 -11.510746 4.185583
+v -1.468127 -12.044222 4.120216
+v -1.219872 -12.044222 4.308654
+v -0.968754 -12.044222 4.391364
+v -0.628762 -12.044222 4.451078
+v -1.484220 -11.510746 4.096951
+v -1.523617 -11.510746 4.023369
+v -1.541831 -12.044222 3.975819
+v -1.552159 -11.510746 3.941891
+v -1.547526 -7.559912 3.957927
+v -1.547526 7.482136 3.957927
+v -1.483392 11.962947 4.098224
+v -1.410266 11.432970 4.185583
+v -1.408558 11.962947 4.187195
+v -1.257249 11.962947 4.290767
+v -1.003042 11.962947 4.382784
+v -0.650718 11.962947 4.448250
+v -1.486781 11.432970 4.092964
+v -1.550698 11.962947 3.947111
+v -1.527551 11.432970 4.014103
+v -1.556337 11.432970 3.926039
+v -1.150124 -9.802067 4.337169
+v -1.150125 9.722542 4.337169
+v -1.544304 -10.389668 3.968269
+v -1.556293 -10.389668 3.926213
+v -1.544304 10.312767 3.968269
+v -1.556293 10.312767 3.926213
+v 1.505497 12.265111 0.993274
+v 1.465019 12.265111 0.887229
+v -1.505497 12.265111 0.993274
+v -1.465019 12.265111 0.887229
+v 1.526330 -12.346386 1.003754
+v -1.526330 -12.346386 1.003754
+v 1.526330 -11.776122 1.003754
+v 1.505497 -11.776122 0.993274
+v -1.526330 -11.776122 1.003754
+v -1.505497 -11.776122 0.993274
+v -1.486620 10.469932 2.200000
+v -1.486620 10.469932 3.100000
+v -1.486620 9.769932 3.100000
+v -1.486620 9.769932 2.200000
+v -1.382432 -10.976439 0.670864
+v -1.382432 -11.776122 0.670864
+v -1.317213 -10.308087 0.500000
+v -1.317213 -6.843781 0.500000
+v -1.240873 -10.225245 0.300000
+v -1.240873 -6.926624 0.300000
+v -1.317213 -6.424294 0.500000
+v -1.258941 -3.832891 0.347335
+v -1.258941 -6.424294 0.347335
+v -1.444404 -3.313474 0.833219
+v -1.444404 -2.664988 0.833219
+v -1.322583 -1.771217 0.514067
+v -1.322583 -2.664988 0.514067
+v -1.254709 0.370642 0.336249
+v -1.254709 -1.616795 0.336249
+v -1.286444 0.576537 0.419390
+v -1.317213 6.779116 0.500000
+v -1.240873 10.160579 0.300000
+v -1.240873 6.861959 0.300000
+v -1.317213 10.243422 0.500000
+v -1.465019 11.694847 0.887229
+v -1.341286 10.906658 0.563067
+v -1.341286 11.706341 0.563067
+v -1.286444 6.244752 0.419390
+v 1.465019 11.694847 0.887229
+v 1.382432 -10.976439 0.670864
+v 1.382432 -11.776122 0.670864
+v 1.317213 -10.308087 0.500000
+v 1.317213 -6.843781 0.500000
+v 1.240873 -6.926624 0.300000
+v 1.240873 -10.225245 0.300000
+v 1.258941 -3.832891 0.347335
+v 1.317213 -6.424294 0.500000
+v 1.258941 -6.424294 0.347335
+v 1.444404 -3.313474 0.833219
+v 1.322583 -1.771217 0.514067
+v 1.444404 -2.664988 0.833219
+v 1.322583 -2.664988 0.514067
+v 1.254709 0.370642 0.336249
+v 1.254709 -1.616795 0.336249
+v 1.286444 0.576537 0.419390
+v 1.240873 10.160579 0.300000
+v 1.317213 6.779116 0.500000
+v 1.240873 6.861959 0.300000
+v 1.317213 10.243422 0.500000
+v 1.341286 10.906658 0.563067
+v 1.341286 11.706341 0.563067
+v 1.286444 6.244752 0.419390
+v 0.900538 10.160579 0.300000
+v 0.900538 10.096975 0.146447
+v 0.725674 10.096975 0.146447
+v 0.725674 10.160579 0.300000
+v -0.900538 10.096975 0.146447
+v -0.900538 10.160579 0.300000
+v -0.725674 10.096975 0.146447
+v -0.725674 10.160579 0.300000
+v 0.900538 7.737373 0.300000
+v 0.900538 6.861959 0.300000
+v -0.725674 7.737373 0.300000
+v 0.725674 7.737373 0.300000
+v 0.725674 6.861959 0.300000
+v -0.725674 6.861959 0.300000
+v 0.725674 9.285165 0.300000
+v 0.900538 9.285165 0.300000
+v -0.900538 7.737373 0.300000
+v -0.900538 6.861959 0.300000
+v -0.725674 9.285165 0.300000
+v -0.900538 9.285165 0.300000
+v 0.900538 6.925562 0.146447
+v 0.725674 6.925562 0.146447
+v -0.725674 6.925562 0.146447
+v -0.900538 6.925562 0.146447
+v 0.900538 -6.926624 0.300000
+v 0.900538 -6.990228 0.146447
+v 0.725674 -6.990228 0.146447
+v 0.725674 -6.926624 0.300000
+v -0.900538 -6.990228 0.146447
+v -0.900538 -6.926624 0.300000
+v -0.725674 -6.990228 0.146447
+v -0.725674 -6.926624 0.300000
+v 0.900538 -9.349830 0.300000
+v 0.900538 -10.225245 0.300000
+v 0.900538 -7.802039 0.300000
+v 0.725674 -9.349830 0.300000
+v -0.725674 -9.349830 0.300000
+v 0.725674 -10.225245 0.300000
+v -0.725674 -10.225245 0.300000
+v 0.725674 -7.802039 0.300000
+v -0.900538 -9.349830 0.300000
+v -0.900538 -10.225245 0.300000
+v -0.725674 -7.802039 0.300000
+v -0.900538 -7.802039 0.300000
+v 0.725674 -10.161640 0.146447
+v 0.900538 -10.161640 0.146447
+v -0.900538 -10.161640 0.146447
+v -0.725674 -10.161640 0.146447
+v -0.900538 9.389869 0.146447
+v -0.900538 9.738829 0.001903
+v -0.900538 9.748015 0.001903
+v 0.900538 9.389869 0.146447
+v 0.900538 9.738829 0.001903
+v 0.900538 9.748015 0.001903
+v 0.725674 9.748015 0.001903
+v 0.725674 9.738829 0.001903
+v 0.725674 9.389869 0.146447
+v -0.725674 9.748015 0.001903
+v -0.725674 9.738829 0.001903
+v -0.725674 9.389869 0.146447
+v 0.900538 7.274521 0.001903
+v 0.900538 7.283710 0.001903
+v 0.900538 7.632669 0.146446
+v 0.725674 7.632669 0.146446
+v 0.725674 7.274521 0.001903
+v 0.725674 7.283710 0.001903
+v -0.725674 7.274521 0.001903
+v -0.725674 7.283710 0.001903
+v -0.725674 7.632669 0.146446
+v -0.900538 7.632669 0.146446
+v -0.900538 7.274521 0.001903
+v -0.900538 7.283710 0.001903
+v -0.900538 -7.697334 0.146447
+v -0.900538 -7.348375 0.001903
+v -0.900538 -7.339187 0.001903
+v 0.900538 -7.697334 0.146447
+v 0.900538 -7.348375 0.001903
+v 0.900538 -7.339187 0.001903
+v 0.725674 -7.339187 0.001903
+v 0.725674 -7.348375 0.001903
+v 0.725674 -7.697334 0.146447
+v -0.725674 -7.339187 0.001903
+v -0.725674 -7.348375 0.001903
+v -0.725674 -7.697334 0.146447
+v -0.900538 -9.812681 0.001903
+v -0.900538 -9.803493 0.001903
+v -0.900538 -9.454534 0.146447
+v 0.900538 -9.812681 0.001903
+v 0.900538 -9.803493 0.001903
+v 0.900538 -9.454534 0.146447
+v 0.725674 -9.454534 0.146447
+v 0.725674 -9.812681 0.001903
+v 0.725674 -9.803493 0.001903
+v -0.725674 -9.812681 0.001903
+v -0.725674 -9.803493 0.001903
+v -0.725674 -9.454534 0.146447
+f 1 2 3
+f 4 3 5
+f 4 1 3
+f 6 5 7
+f 6 4 5
+f 8 6 7
+f 9 6 8
+f 10 9 8
+f 11 12 9
+f 11 10 13
+f 11 9 10
+f 14 11 13
+f 14 13 15
+f 16 17 18
+f 17 19 18
+f 18 20 21
+f 19 20 18
+f 21 22 23
+f 20 22 21
+f 16 24 17
+f 24 25 17
+f 23 26 27
+f 27 26 28
+f 22 26 23
+f 29 30 31
+f 30 32 31
+f 28 33 29
+f 29 33 30
+f 26 33 28
+f 33 34 30
+f 34 35 36
+f 33 35 34
+f 37 38 39
+f 40 38 37
+f 38 41 39
+f 37 42 40
+f 43 42 37
+f 42 44 40
+f 45 46 47
+f 45 48 46
+f 48 49 46
+f 46 49 50
+f 45 51 48
+f 51 52 48
+f 53 54 55
+f 53 56 54
+f 56 57 54
+f 54 57 58
+f 53 59 56
+f 59 60 56
+f 61 62 63
+f 64 65 62
+f 62 65 66
+f 61 67 62
+f 62 67 64
+f 67 68 64
+f 69 70 71
+f 70 72 73
+f 74 72 70
+f 69 75 70
+f 70 75 74
+f 75 76 74
+f 77 78 79
+f 77 80 78
+f 78 81 82
+f 80 81 78
+f 77 83 80
+f 83 84 80
+f 85 86 87
+f 85 88 86
+f 86 88 89
+f 88 90 89
+f 85 91 88
+f 91 92 88
+f 93 94 95
+f 93 96 94
+f 94 96 97
+f 96 98 97
+f 93 99 96
+f 99 100 96
+f 101 102 103
+f 102 104 105
+f 106 104 102
+f 101 107 102
+f 102 107 106
+f 107 108 106
+f 109 110 111
+f 110 112 113
+f 114 112 110
+f 109 115 110
+f 110 115 114
+f 115 116 114
+f 117 118 119
+f 118 120 121
+f 122 120 118
+f 117 123 118
+f 118 123 122
+f 123 124 122
+f 125 15 126
+f 126 15 127
+f 15 128 127
+f 13 129 15
+f 15 129 128
+f 10 130 13
+f 13 130 129
+f 130 131 129
+f 129 131 132
+f 131 133 132
+f 132 133 134
+f 133 135 134
+f 134 135 136
+f 135 137 136
+f 136 137 138
+f 139 140 141
+f 137 142 138
+f 138 142 143
+f 142 144 143
+f 143 144 139
+f 144 145 139
+f 144 146 145
+f 145 146 147
+f 24 39 25
+f 25 39 41
+f 141 143 139
+f 65 148 66
+f 105 149 98
+f 150 151 152
+f 153 151 150
+f 38 154 41
+f 155 154 156
+f 157 154 155
+f 41 154 157
+f 158 154 38
+f 158 159 154
+f 50 159 158
+f 154 160 156
+f 161 160 150
+f 156 160 161
+f 159 160 154
+f 159 162 160
+f 49 162 50
+f 150 162 153
+f 50 162 159
+f 58 162 49
+f 160 162 150
+f 57 163 58
+f 58 163 162
+f 162 163 153
+f 57 164 163
+f 163 164 153
+f 153 164 148
+f 66 164 57
+f 148 164 66
+f 148 165 153
+f 65 165 148
+f 65 166 165
+f 165 166 153
+f 65 167 166
+f 166 167 153
+f 73 167 65
+f 167 168 153
+f 73 168 167
+f 168 169 153
+f 73 169 168
+f 82 169 72
+f 153 169 151
+f 72 169 73
+f 81 169 82
+f 90 170 89
+f 81 170 169
+f 169 170 151
+f 89 170 81
+f 97 171 90
+f 90 171 170
+f 170 171 151
+f 97 172 171
+f 171 172 151
+f 98 173 97
+f 151 173 149
+f 97 173 172
+f 172 173 151
+f 149 173 98
+f 105 174 149
+f 149 174 151
+f 105 175 174
+f 174 175 151
+f 113 176 104
+f 104 176 105
+f 105 176 175
+f 175 176 151
+f 121 177 112
+f 112 177 113
+f 120 177 121
+f 113 177 176
+f 151 177 152
+f 176 177 151
+f 177 178 152
+f 120 178 177
+f 127 179 120
+f 180 179 127
+f 178 179 152
+f 120 179 178
+f 127 181 180
+f 182 181 183
+f 183 181 184
+f 184 181 185
+f 185 181 128
+f 128 181 127
+f 182 186 181
+f 181 186 180
+f 152 186 187
+f 187 186 182
+f 179 186 152
+f 180 186 179
+f 130 10 8
+f 9 188 6
+f 189 188 9
+f 190 191 192
+f 190 193 191
+f 194 3 2
+f 194 5 3
+f 194 7 5
+f 194 8 7
+f 195 196 130
+f 195 197 196
+f 195 198 197
+f 195 199 198
+f 195 8 194
+f 195 130 8
+f 200 4 6
+f 200 1 4
+f 200 2 1
+f 200 188 191
+f 200 6 188
+f 200 194 2
+f 201 202 199
+f 201 193 202
+f 201 195 194
+f 201 194 200
+f 201 199 195
+f 201 191 193
+f 201 200 191
+f 203 189 9
+f 203 9 12
+f 204 190 192
+f 204 203 12
+f 205 190 204
+f 12 205 204
+f 206 207 208
+f 209 206 208
+f 210 206 209
+f 211 206 210
+f 212 210 209
+f 213 214 215
+f 213 215 216
+f 217 214 213
+f 218 217 213
+f 218 213 219
+f 220 219 211
+f 220 218 219
+f 221 214 217
+f 222 220 223
+f 222 218 220
+f 224 222 223
+f 225 226 227
+f 225 228 226
+f 229 224 223
+f 229 225 227
+f 229 227 224
+f 230 228 225
+f 231 232 233
+f 234 229 223
+f 235 236 232
+f 235 232 231
+f 237 234 223
+f 237 231 234
+f 237 235 231
+f 238 236 235
+f 239 240 241
+f 242 237 223
+f 243 244 240
+f 243 240 239
+f 245 239 242
+f 245 242 223
+f 245 243 239
+f 246 244 243
+f 247 248 249
+f 250 248 247
+f 250 251 248
+f 252 250 247
+f 252 247 253
+f 254 251 250
+f 255 256 257
+f 258 256 255
+f 258 259 256
+f 260 258 255
+f 260 255 261
+f 262 259 258
+f 263 264 265
+f 266 264 263
+f 266 267 264
+f 268 266 263
+f 268 263 269
+f 270 267 266
+f 271 272 273
+f 274 275 272
+f 274 272 271
+f 276 271 277
+f 276 274 271
+f 278 275 274
+f 279 280 281
+f 282 283 280
+f 282 280 279
+f 284 279 285
+f 284 282 279
+f 286 283 282
+f 287 288 289
+f 287 289 290
+f 291 288 287
+f 292 287 293
+f 292 291 287
+f 294 288 291
+f 295 296 297
+f 298 299 295
+f 298 295 300
+f 14 301 302
+f 14 302 303
+f 304 11 14
+f 304 14 303
+f 305 11 304
+f 306 303 298
+f 306 298 300
+f 306 300 292
+f 306 304 303
+f 306 293 284
+f 306 284 285
+f 306 292 293
+f 307 305 308
+f 307 205 11
+f 307 11 305
+f 12 11 205
+f 309 310 299
+f 299 310 295
+f 295 310 296
+f 226 311 227
+f 219 206 211
+f 223 306 276
+f 276 306 285
+f 223 276 277
+f 223 277 268
+f 223 268 269
+f 223 269 260
+f 223 260 261
+f 223 261 252
+f 223 252 253
+f 223 253 245
+f 301 14 15
+f 301 15 125
+f 312 190 205
+f 202 198 199
+f 202 197 198
+f 193 313 202
+f 190 313 193
+f 312 313 190
+f 202 313 197
+f 313 196 197
+f 314 130 313
+f 313 130 196
+f 315 146 314
+f 307 146 315
+f 146 144 314
+f 314 131 130
+f 144 142 314
+f 314 133 131
+f 142 133 314
+f 137 135 142
+f 142 135 133
+f 205 307 315
+f 205 315 312
+f 140 316 141
+f 141 316 308
+f 146 317 147
+f 316 317 308
+f 146 307 317
+f 307 308 317
+f 147 317 318
+f 147 318 319
+f 145 319 320
+f 145 147 319
+f 139 145 320
+f 139 320 321
+f 322 139 321
+f 140 139 322
+f 323 140 322
+f 316 140 323
+f 136 138 134
+f 134 143 132
+f 138 143 134
+f 143 129 132
+f 143 141 129
+f 308 305 141
+f 141 305 129
+f 305 304 129
+f 129 304 128
+f 184 182 183
+f 185 187 184
+f 128 187 185
+f 184 187 182
+f 128 152 187
+f 128 304 152
+f 304 306 152
+f 150 324 325
+f 325 326 150
+f 150 327 324
+f 328 223 326
+f 326 223 150
+f 324 329 328
+f 328 329 223
+f 327 329 324
+f 329 330 223
+f 331 332 330
+f 330 332 223
+f 333 332 331
+f 332 334 223
+f 335 334 336
+f 334 337 223
+f 335 337 334
+f 338 339 340
+f 341 339 338
+f 342 343 344
+f 344 343 345
+f 346 347 348
+f 348 347 349
+f 350 351 352
+f 352 351 353
+f 354 355 356
+f 356 355 357
+f 358 359 360
+f 360 359 361
+f 362 363 364
+f 362 365 363
+f 362 152 366
+f 366 152 367
+f 367 152 368
+f 367 369 366
+f 366 369 370
+f 152 371 368
+f 359 306 361
+f 363 306 359
+f 365 306 363
+f 370 306 365
+f 369 306 370
+f 371 306 369
+f 152 306 371
+f 306 223 355
+f 306 355 361
+f 355 223 357
+f 357 223 351
+f 351 223 353
+f 353 223 347
+f 347 223 349
+f 349 223 343
+f 343 223 345
+f 345 223 339
+f 339 223 340
+f 340 223 337
+f 150 152 362
+f 150 362 364
+f 150 364 358
+f 150 358 360
+f 150 360 354
+f 150 354 356
+f 150 356 350
+f 150 350 352
+f 150 352 346
+f 150 346 348
+f 150 348 342
+f 150 342 344
+f 150 344 341
+f 150 341 338
+f 150 338 335
+f 150 335 336
+f 150 336 333
+f 150 333 331
+f 150 331 327
+f 156 157 155
+f 161 41 157
+f 161 157 156
+f 150 41 161
+f 220 41 150
+f 223 220 150
+f 211 25 41
+f 220 211 41
+f 210 17 25
+f 211 210 25
+f 33 26 22
+f 33 22 20
+f 19 33 20
+f 35 19 17
+f 35 33 19
+f 210 212 35
+f 210 35 17
+f 32 372 31
+f 31 372 209
+f 35 373 36
+f 373 212 372
+f 35 212 373
+f 212 209 372
+f 36 373 374
+f 36 374 375
+f 34 375 376
+f 34 36 375
+f 30 34 376
+f 30 376 377
+f 378 30 377
+f 32 30 378
+f 379 32 378
+f 372 32 379
+f 380 381 208
+f 382 383 384
+f 385 383 382
+f 386 387 383
+f 386 380 387
+f 386 381 380
+f 386 383 385
+f 388 386 385
+f 16 389 386
+f 16 386 388
+f 31 390 389
+f 31 209 390
+f 29 31 389
+f 18 389 16
+f 28 29 389
+f 21 389 18
+f 21 28 389
+f 23 27 28
+f 23 28 21
+f 209 208 390
+f 390 208 381
+f 24 16 391
+f 392 387 380
+f 393 392 380
+f 394 395 396
+f 394 397 395
+f 398 16 388
+f 398 388 385
+f 398 385 382
+f 398 382 384
+f 398 399 400
+f 398 400 401
+f 398 401 402
+f 398 402 391
+f 398 391 16
+f 403 384 383
+f 403 383 387
+f 403 392 395
+f 403 397 399
+f 403 387 392
+f 403 398 384
+f 403 399 398
+f 403 395 397
+f 219 39 24
+f 206 24 391
+f 206 219 24
+f 213 37 39
+f 219 213 39
+f 216 404 43
+f 213 43 37
+f 213 216 43
+f 405 43 404
+f 406 407 408
+f 406 409 407
+f 406 405 409
+f 406 43 405
+f 410 411 412
+f 410 412 413
+f 410 413 414
+f 410 414 415
+f 410 415 42
+f 410 42 43
+f 410 43 406
+f 416 417 418
+f 416 419 417
+f 416 420 419
+f 416 408 420
+f 416 418 421
+f 416 406 408
+f 422 421 423
+f 422 423 424
+f 422 424 425
+f 422 425 411
+f 422 411 410
+f 422 416 421
+f 422 406 416
+f 422 410 406
+f 425 412 411
+f 424 413 412
+f 424 412 425
+f 423 414 413
+f 423 415 414
+f 423 413 424
+f 221 44 42
+f 421 42 415
+f 421 221 42
+f 421 415 423
+f 214 221 421
+f 217 40 44
+f 221 217 44
+f 217 218 38
+f 217 38 40
+f 218 222 158
+f 218 158 38
+f 222 224 50
+f 222 50 158
+f 227 46 50
+f 224 227 50
+f 311 47 46
+f 227 311 46
+f 426 427 428
+f 429 428 430
+f 429 426 428
+f 431 430 432
+f 431 429 430
+f 433 431 432
+f 434 431 433
+f 45 434 433
+f 311 226 434
+f 311 45 47
+f 311 434 45
+f 51 45 433
+f 435 51 433
+f 436 428 427
+f 436 430 428
+f 436 432 430
+f 436 433 432
+f 437 438 439
+f 437 439 440
+f 437 440 441
+f 437 441 435
+f 437 433 436
+f 437 435 433
+f 442 431 434
+f 442 429 431
+f 442 426 429
+f 442 427 426
+f 442 436 427
+f 443 444 445
+f 443 445 446
+f 443 446 447
+f 443 447 438
+f 443 434 444
+f 443 437 436
+f 443 438 437
+f 443 436 442
+f 443 442 434
+f 447 439 438
+f 446 440 439
+f 446 439 447
+f 445 441 440
+f 445 435 441
+f 445 440 446
+f 230 52 51
+f 444 51 435
+f 444 230 51
+f 444 435 445
+f 228 230 444
+f 230 225 48
+f 230 48 52
+f 225 229 49
+f 225 49 48
+f 229 234 58
+f 229 58 49
+f 231 54 58
+f 234 231 58
+f 233 55 54
+f 231 233 54
+f 448 449 450
+f 451 450 452
+f 451 448 450
+f 453 452 454
+f 453 451 452
+f 455 453 454
+f 456 453 455
+f 53 456 455
+f 233 232 456
+f 233 53 55
+f 233 456 53
+f 457 450 449
+f 457 452 450
+f 457 454 452
+f 457 455 454
+f 457 53 455
+f 458 459 460
+f 458 460 461
+f 458 461 462
+f 458 462 463
+f 458 463 59
+f 458 59 53
+f 458 53 457
+f 464 453 456
+f 464 451 453
+f 464 448 451
+f 464 449 448
+f 464 457 449
+f 465 466 467
+f 465 467 468
+f 465 468 469
+f 465 469 459
+f 465 456 466
+f 465 459 458
+f 465 457 464
+f 465 464 456
+f 465 458 457
+f 469 460 459
+f 468 461 460
+f 468 460 469
+f 467 462 461
+f 467 463 462
+f 467 461 468
+f 238 60 59
+f 466 59 463
+f 466 238 59
+f 466 463 467
+f 236 238 466
+f 238 235 56
+f 238 56 60
+f 235 237 57
+f 235 57 56
+f 237 242 66
+f 237 66 57
+f 239 62 66
+f 242 239 66
+f 239 241 63
+f 239 63 62
+f 470 471 472
+f 473 472 474
+f 473 470 472
+f 475 474 476
+f 475 473 474
+f 477 475 476
+f 478 475 477
+f 61 478 477
+f 241 240 478
+f 241 61 63
+f 241 478 61
+f 479 472 471
+f 479 474 472
+f 479 476 474
+f 479 477 476
+f 479 61 477
+f 480 481 482
+f 480 482 483
+f 480 483 484
+f 480 484 485
+f 480 485 67
+f 480 67 61
+f 480 61 479
+f 486 475 478
+f 486 473 475
+f 486 470 473
+f 486 471 470
+f 486 479 471
+f 487 488 489
+f 487 489 490
+f 487 490 491
+f 487 491 481
+f 487 478 488
+f 487 481 480
+f 487 479 486
+f 487 486 478
+f 487 480 479
+f 491 482 481
+f 490 483 482
+f 490 482 491
+f 489 484 483
+f 489 485 484
+f 489 483 490
+f 246 68 67
+f 488 67 485
+f 488 246 67
+f 488 485 489
+f 244 246 488
+f 246 243 64
+f 246 64 68
+f 243 245 65
+f 243 65 64
+f 245 253 73
+f 245 73 65
+f 247 70 73
+f 253 247 73
+f 247 249 71
+f 247 71 70
+f 492 493 494
+f 495 494 496
+f 495 492 494
+f 497 496 498
+f 497 495 496
+f 499 497 498
+f 500 497 499
+f 69 500 499
+f 249 248 500
+f 249 69 71
+f 249 500 69
+f 501 75 69
+f 501 494 493
+f 501 496 494
+f 501 498 496
+f 501 499 498
+f 501 69 499
+f 502 503 504
+f 502 504 505
+f 502 505 506
+f 502 506 507
+f 502 507 75
+f 502 75 501
+f 508 497 500
+f 508 495 497
+f 508 492 495
+f 508 493 492
+f 508 500 509
+f 508 501 493
+f 510 509 511
+f 510 511 512
+f 510 512 513
+f 510 513 503
+f 510 503 502
+f 510 501 508
+f 510 502 501
+f 510 508 509
+f 513 504 503
+f 512 505 504
+f 512 504 513
+f 511 506 505
+f 511 507 506
+f 511 505 512
+f 254 76 75
+f 509 75 507
+f 509 254 75
+f 509 507 511
+f 251 254 509
+f 254 250 74
+f 254 74 76
+f 250 252 72
+f 250 72 74
+f 252 261 82
+f 252 82 72
+f 255 78 82
+f 261 255 82
+f 255 257 79
+f 255 79 78
+f 514 515 516
+f 517 516 518
+f 517 514 516
+f 519 518 520
+f 519 517 518
+f 521 519 520
+f 522 519 521
+f 77 522 521
+f 257 256 522
+f 257 77 79
+f 257 522 77
+f 523 83 77
+f 523 516 515
+f 523 518 516
+f 523 520 518
+f 523 521 520
+f 523 77 521
+f 524 525 526
+f 524 526 527
+f 524 527 528
+f 524 528 529
+f 524 529 83
+f 524 83 523
+f 530 519 522
+f 530 517 519
+f 530 514 517
+f 530 515 514
+f 530 522 531
+f 530 523 515
+f 532 531 533
+f 532 533 534
+f 532 534 535
+f 532 535 525
+f 532 525 524
+f 532 523 530
+f 532 524 523
+f 532 530 531
+f 535 526 525
+f 534 527 526
+f 534 526 535
+f 533 528 527
+f 533 529 528
+f 533 527 534
+f 262 84 83
+f 531 83 529
+f 531 262 83
+f 531 529 533
+f 259 262 531
+f 262 258 80
+f 262 80 84
+f 258 260 81
+f 258 81 80
+f 260 269 89
+f 260 89 81
+f 263 86 89
+f 269 263 89
+f 263 265 87
+f 263 87 86
+f 536 537 538
+f 539 538 540
+f 539 536 538
+f 541 540 542
+f 541 539 540
+f 543 541 542
+f 544 541 543
+f 85 544 543
+f 265 264 544
+f 265 85 87
+f 265 544 85
+f 545 91 85
+f 545 538 537
+f 545 540 538
+f 545 542 540
+f 545 543 542
+f 545 85 543
+f 546 547 548
+f 546 548 549
+f 546 549 550
+f 546 550 551
+f 546 551 91
+f 546 91 545
+f 552 541 544
+f 552 539 541
+f 552 536 539
+f 552 537 536
+f 552 544 553
+f 552 545 537
+f 554 553 555
+f 554 555 556
+f 554 556 557
+f 554 557 547
+f 554 547 546
+f 554 545 552
+f 554 552 553
+f 554 546 545
+f 557 548 547
+f 556 549 548
+f 556 548 557
+f 555 550 549
+f 555 551 550
+f 555 549 556
+f 270 92 91
+f 553 91 551
+f 553 270 91
+f 553 551 555
+f 267 270 553
+f 270 266 88
+f 270 88 92
+f 266 268 90
+f 266 90 88
+f 268 277 97
+f 268 97 90
+f 271 94 97
+f 277 271 97
+f 271 273 95
+f 271 95 94
+f 558 559 560
+f 561 560 562
+f 561 558 560
+f 563 562 564
+f 563 561 562
+f 565 563 564
+f 566 563 565
+f 93 566 565
+f 273 272 566
+f 273 93 95
+f 273 566 93
+f 567 560 559
+f 567 562 560
+f 567 564 562
+f 567 565 564
+f 567 93 565
+f 568 569 570
+f 568 570 571
+f 568 571 572
+f 568 572 573
+f 568 573 99
+f 568 99 93
+f 568 93 567
+f 574 563 566
+f 574 561 563
+f 574 558 561
+f 574 559 558
+f 574 567 559
+f 575 576 577
+f 575 577 578
+f 575 578 579
+f 575 579 569
+f 575 566 576
+f 575 569 568
+f 575 567 574
+f 575 574 566
+f 575 568 567
+f 579 570 569
+f 578 571 570
+f 578 570 579
+f 577 572 571
+f 577 573 572
+f 577 571 578
+f 278 100 99
+f 576 99 573
+f 576 278 99
+f 576 573 577
+f 275 278 576
+f 278 274 96
+f 278 96 100
+f 274 276 98
+f 274 98 96
+f 276 285 105
+f 276 105 98
+f 279 102 105
+f 285 279 105
+f 279 281 103
+f 279 103 102
+f 580 581 582
+f 583 582 584
+f 583 580 582
+f 585 584 586
+f 585 583 584
+f 587 585 586
+f 588 585 587
+f 101 588 587
+f 281 280 588
+f 281 101 103
+f 281 588 101
+f 589 582 581
+f 589 584 582
+f 589 586 584
+f 589 587 586
+f 589 101 587
+f 590 591 592
+f 590 592 593
+f 590 593 594
+f 590 594 595
+f 590 595 107
+f 590 107 101
+f 590 101 589
+f 596 585 588
+f 596 583 585
+f 596 580 583
+f 596 581 580
+f 596 589 581
+f 597 598 599
+f 597 599 600
+f 597 600 601
+f 597 601 591
+f 597 588 598
+f 597 591 590
+f 597 589 596
+f 597 596 588
+f 597 590 589
+f 601 592 591
+f 600 593 592
+f 600 592 601
+f 599 594 593
+f 599 595 594
+f 599 593 600
+f 286 108 107
+f 598 107 595
+f 598 286 107
+f 598 595 599
+f 283 286 598
+f 286 282 106
+f 286 106 108
+f 282 284 104
+f 282 104 106
+f 284 293 113
+f 284 113 104
+f 287 110 113
+f 293 287 113
+f 287 290 111
+f 287 111 110
+f 602 603 604
+f 605 604 606
+f 605 602 604
+f 607 606 608
+f 607 605 606
+f 609 607 608
+f 610 607 609
+f 109 610 609
+f 290 289 610
+f 290 109 111
+f 290 610 109
+f 611 115 109
+f 611 604 603
+f 611 606 604
+f 611 608 606
+f 611 609 608
+f 611 109 609
+f 612 613 614
+f 612 614 615
+f 612 615 616
+f 612 616 617
+f 612 617 115
+f 612 115 611
+f 618 607 610
+f 618 605 607
+f 618 602 605
+f 618 603 602
+f 618 610 619
+f 618 611 603
+f 620 619 621
+f 620 621 622
+f 620 622 623
+f 620 623 613
+f 620 613 612
+f 620 611 618
+f 620 612 611
+f 620 618 619
+f 623 614 613
+f 622 615 614
+f 622 614 623
+f 621 616 615
+f 621 617 616
+f 621 615 622
+f 294 116 115
+f 619 115 617
+f 619 294 115
+f 619 617 621
+f 288 294 619
+f 294 291 114
+f 294 114 116
+f 291 292 112
+f 291 112 114
+f 292 300 121
+f 292 121 112
+f 295 118 121
+f 300 295 121
+f 297 119 118
+f 295 297 118
+f 624 625 626
+f 627 626 628
+f 627 624 626
+f 629 628 630
+f 629 627 628
+f 631 629 630
+f 632 629 631
+f 117 632 631
+f 297 296 632
+f 297 117 119
+f 297 632 117
+f 633 626 625
+f 633 628 626
+f 633 630 628
+f 633 631 630
+f 633 117 631
+f 634 635 636
+f 634 636 637
+f 634 637 638
+f 634 638 639
+f 634 639 123
+f 634 123 117
+f 634 117 633
+f 640 629 632
+f 640 627 629
+f 640 624 627
+f 640 625 624
+f 640 632 641
+f 640 633 625
+f 642 641 643
+f 642 643 644
+f 642 644 645
+f 642 645 635
+f 642 635 634
+f 642 640 641
+f 642 633 640
+f 642 634 633
+f 645 636 635
+f 644 637 636
+f 644 636 645
+f 643 638 637
+f 643 639 638
+f 643 637 644
+f 309 124 123
+f 641 123 639
+f 641 309 123
+f 641 639 643
+f 310 309 641
+f 309 299 122
+f 309 122 124
+f 299 298 120
+f 299 120 122
+f 298 303 127
+f 298 127 120
+f 303 302 127
+f 127 302 126
+f 302 301 125
+f 302 125 126
+f 192 646 204
+f 647 646 192
+f 191 647 192
+f 648 647 191
+f 649 648 191
+f 649 191 188
+f 650 649 188
+f 650 188 189
+f 651 189 203
+f 651 650 189
+f 646 651 203
+f 646 203 204
+f 652 393 380
+f 652 380 208
+f 653 394 396
+f 207 653 652
+f 207 394 653
+f 208 207 652
+f 397 400 399
+f 397 401 400
+f 397 402 401
+f 394 391 402
+f 394 402 397
+f 206 391 394
+f 207 206 394
+f 420 408 407
+f 419 420 407
+f 417 407 409
+f 417 419 407
+f 405 417 409
+f 418 417 405
+f 404 418 405
+f 216 215 418
+f 216 418 404
+f 421 654 655
+f 656 654 418
+f 215 656 418
+f 657 421 655
+f 214 657 656
+f 214 656 215
+f 214 421 657
+f 421 418 654
+f 658 434 659
+f 660 659 434
+f 444 434 658
+f 226 660 434
+f 661 444 658
+f 661 660 226
+f 228 661 226
+f 228 444 661
+f 662 663 456
+f 664 456 663
+f 466 456 664
+f 232 662 456
+f 665 466 664
+f 665 662 232
+f 236 665 232
+f 236 466 665
+f 666 667 478
+f 668 478 667
+f 488 478 668
+f 240 666 478
+f 669 488 668
+f 669 666 240
+f 244 669 240
+f 244 488 669
+f 670 671 500
+f 672 500 671
+f 509 500 672
+f 248 670 500
+f 673 509 672
+f 673 670 248
+f 251 673 248
+f 251 509 673
+f 674 675 522
+f 676 522 675
+f 531 522 676
+f 256 674 522
+f 677 531 676
+f 677 674 256
+f 259 677 256
+f 259 531 677
+f 678 679 544
+f 680 544 679
+f 553 544 680
+f 264 678 544
+f 681 553 680
+f 681 678 264
+f 267 681 264
+f 267 553 681
+f 682 683 566
+f 684 566 683
+f 576 566 684
+f 272 682 566
+f 685 576 684
+f 685 682 272
+f 275 685 272
+f 275 576 685
+f 686 687 588
+f 688 588 687
+f 598 588 688
+f 280 686 588
+f 689 598 688
+f 689 686 280
+f 283 689 280
+f 283 598 689
+f 690 691 610
+f 692 610 691
+f 619 610 692
+f 289 690 610
+f 693 619 692
+f 693 690 289
+f 288 693 289
+f 288 619 693
+f 694 695 632
+f 641 695 696
+f 641 632 695
+f 296 694 632
+f 697 641 696
+f 310 697 694
+f 310 694 296
+f 310 641 697
+f 698 699 314
+f 698 314 313
+f 314 700 315
+f 699 700 314
+f 700 701 312
+f 700 312 315
+f 312 698 313
+f 701 698 312
+f 317 316 323
+f 317 323 318
+f 702 703 704
+f 377 703 702
+f 378 377 702
+f 705 320 319
+f 705 706 707
+f 705 707 320
+f 708 709 710
+f 708 710 711
+f 712 375 322
+f 712 711 713
+f 712 708 711
+f 712 713 375
+f 714 715 716
+f 714 717 715
+f 714 718 717
+f 714 719 718
+f 714 710 719
+f 720 714 716
+f 721 716 722
+f 721 720 716
+f 723 377 376
+f 723 722 703
+f 723 703 377
+f 723 721 722
+f 724 713 711
+f 724 375 713
+f 725 712 322
+f 725 708 712
+f 726 727 728
+f 726 728 729
+f 726 729 730
+f 726 730 731
+f 726 731 709
+f 732 727 726
+f 733 734 727
+f 733 727 732
+f 735 321 320
+f 735 707 734
+f 735 320 707
+f 735 734 733
+f 736 724 711
+f 736 711 710
+f 736 710 714
+f 737 709 708
+f 737 708 725
+f 737 726 709
+f 738 721 723
+f 738 720 721
+f 738 714 720
+f 738 736 714
+f 739 736 738
+f 739 376 375
+f 739 375 724
+f 739 723 376
+f 739 724 736
+f 739 738 723
+f 740 732 726
+f 740 733 732
+f 740 735 733
+f 740 726 737
+f 741 322 321
+f 741 740 737
+f 741 321 735
+f 741 735 740
+f 741 725 322
+f 741 737 725
+f 379 378 702
+f 379 702 742
+f 374 379 742
+f 743 375 374
+f 743 744 375
+f 745 743 374
+f 746 747 745
+f 746 745 374
+f 746 748 747
+f 749 746 374
+f 750 751 749
+f 750 749 374
+f 750 752 751
+f 753 754 755
+f 753 755 756
+f 757 758 759
+f 757 759 760
+f 761 762 763
+f 761 763 764
+f 765 766 767
+f 765 767 768
+f 769 770 771
+f 769 771 772
+f 773 774 775
+f 776 774 773
+f 777 778 779
+f 780 778 777
+f 781 782 783
+f 784 782 781
+f 785 786 787
+f 788 786 785
+f 322 782 787
+f 322 786 789
+f 322 787 786
+f 790 322 789
+f 323 781 780
+f 323 780 777
+f 323 785 784
+f 323 784 781
+f 323 790 788
+f 323 788 785
+f 318 705 319
+f 791 318 323
+f 791 705 318
+f 323 322 790
+f 322 375 783
+f 783 375 778
+f 778 375 779
+f 779 375 774
+f 774 375 775
+f 775 375 770
+f 770 375 771
+f 771 375 766
+f 766 375 767
+f 767 375 762
+f 762 375 763
+f 763 375 758
+f 758 375 759
+f 759 375 754
+f 754 375 755
+f 755 375 752
+f 752 375 751
+f 751 375 748
+f 748 375 747
+f 747 375 744
+f 322 783 782
+f 742 791 374
+f 374 791 323
+f 374 323 773
+f 773 323 776
+f 776 323 777
+f 374 773 769
+f 374 769 772
+f 374 772 765
+f 374 765 768
+f 374 768 761
+f 374 761 764
+f 374 764 757
+f 374 757 760
+f 374 760 753
+f 374 753 756
+f 374 756 750
+f 328 326 743
+f 328 743 745
+f 324 328 745
+f 324 745 747
+f 326 325 744
+f 326 744 743
+f 325 324 747
+f 325 747 744
+f 330 329 746
+f 330 746 749
+f 331 330 749
+f 331 749 751
+f 329 327 748
+f 329 748 746
+f 327 331 751
+f 327 751 748
+f 334 332 750
+f 334 750 756
+f 336 334 756
+f 336 756 755
+f 332 333 752
+f 332 752 750
+f 333 336 755
+f 333 755 752
+f 340 337 753
+f 340 753 760
+f 338 340 760
+f 338 760 759
+f 337 335 754
+f 337 754 753
+f 335 338 759
+f 335 759 754
+f 345 339 757
+f 345 757 764
+f 344 345 764
+f 344 764 763
+f 339 341 758
+f 339 758 757
+f 341 344 763
+f 341 763 758
+f 349 343 761
+f 349 761 768
+f 348 349 768
+f 348 768 767
+f 343 342 762
+f 343 762 761
+f 762 348 767
+f 342 348 762
+f 353 347 765
+f 353 765 772
+f 352 353 772
+f 352 772 771
+f 347 346 766
+f 347 766 765
+f 346 352 771
+f 346 771 766
+f 773 351 769
+f 357 351 773
+f 356 357 773
+f 356 773 775
+f 351 350 770
+f 351 770 769
+f 350 356 775
+f 350 775 770
+f 361 355 776
+f 361 776 777
+f 360 361 777
+f 360 777 779
+f 355 354 774
+f 355 774 776
+f 354 360 779
+f 354 779 774
+f 363 359 780
+f 363 780 781
+f 364 363 781
+f 364 781 783
+f 359 358 778
+f 359 778 780
+f 778 364 783
+f 358 364 778
+f 370 365 784
+f 370 784 785
+f 366 370 785
+f 366 785 787
+f 365 362 782
+f 365 782 784
+f 362 366 787
+f 362 787 782
+f 368 371 790
+f 368 790 789
+f 367 368 789
+f 367 789 786
+f 790 369 788
+f 371 369 790
+f 369 367 786
+f 369 786 788
+f 373 372 379
+f 373 379 374
+f 386 389 792
+f 386 792 793
+f 792 390 794
+f 389 390 792
+f 390 381 795
+f 390 795 794
+f 795 386 793
+f 381 386 795
+f 396 796 653
+f 797 796 396
+f 395 797 396
+f 798 797 395
+f 799 798 395
+f 799 395 392
+f 800 799 392
+f 800 392 393
+f 801 393 652
+f 801 800 393
+f 800 801 802
+f 802 801 803
+f 801 796 803
+f 797 804 796
+f 805 804 797
+f 804 806 796
+f 807 808 806
+f 806 808 796
+f 809 808 807
+f 808 810 796
+f 811 812 810
+f 810 812 796
+f 813 812 811
+f 814 815 816
+f 816 815 817
+f 818 819 820
+f 820 819 821
+f 822 823 824
+f 824 823 825
+f 826 827 828
+f 828 827 829
+f 830 831 832
+f 832 831 833
+f 834 835 836
+f 834 837 835
+f 838 839 840
+f 840 839 841
+f 842 843 844
+f 845 843 842
+f 846 847 848
+f 846 849 847
+f 845 650 848
+f 846 650 850
+f 848 650 846
+f 650 851 850
+f 839 651 841
+f 844 651 839
+f 843 651 844
+f 847 651 843
+f 851 651 849
+f 849 651 847
+f 852 646 647
+f 646 853 651
+f 852 853 646
+f 650 651 851
+f 797 650 845
+f 797 845 842
+f 797 842 838
+f 797 838 840
+f 797 840 834
+f 797 834 836
+f 797 836 830
+f 797 830 832
+f 797 832 826
+f 797 826 828
+f 797 828 822
+f 797 822 824
+f 797 824 818
+f 797 818 820
+f 797 820 814
+f 797 814 816
+f 797 816 813
+f 797 813 811
+f 797 811 809
+f 797 809 807
+f 797 807 805
+f 853 803 796
+f 853 796 651
+f 651 796 819
+f 651 819 825
+f 651 825 823
+f 651 823 829
+f 651 829 827
+f 651 827 833
+f 651 833 831
+f 651 831 835
+f 651 835 837
+f 651 837 841
+f 819 796 821
+f 821 796 815
+f 815 796 817
+f 817 796 812
+f 854 802 855
+f 854 799 802
+f 799 800 802
+f 648 852 647
+f 856 852 857
+f 857 852 648
+f 709 858 710
+f 710 858 859
+f 797 860 650
+f 859 860 861
+f 858 860 859
+f 861 860 797
+f 862 863 864
+f 865 863 862
+f 866 863 865
+f 867 863 866
+f 710 863 867
+f 863 868 864
+f 864 869 870
+f 868 869 864
+f 799 871 798
+f 870 871 854
+f 854 871 799
+f 869 871 870
+f 861 872 859
+f 797 872 861
+f 860 873 650
+f 858 873 860
+f 874 875 876
+f 876 875 877
+f 877 875 878
+f 878 875 879
+f 879 875 709
+f 874 880 875
+f 881 882 874
+f 874 882 880
+f 649 883 648
+f 857 883 881
+f 648 883 857
+f 881 883 882
+f 872 884 859
+f 859 884 710
+f 710 884 863
+f 709 885 858
+f 858 885 873
+f 875 885 709
+f 869 886 871
+f 868 886 869
+f 863 886 868
+f 884 886 863
+f 884 887 886
+f 798 887 797
+f 797 887 872
+f 871 887 798
+f 872 887 884
+f 886 887 871
+f 880 888 875
+f 882 888 880
+f 883 888 882
+f 875 888 885
+f 650 889 649
+f 888 889 885
+f 649 889 883
+f 883 889 888
+f 873 889 650
+f 885 889 873
+f 796 801 652
+f 796 652 653
+f 806 804 656
+f 806 656 657
+f 807 806 657
+f 807 657 655
+f 804 805 654
+f 804 654 656
+f 805 807 655
+f 805 655 654
+f 810 808 660
+f 810 660 661
+f 811 810 661
+f 811 661 658
+f 808 809 659
+f 808 659 660
+f 809 811 658
+f 809 658 659
+f 817 812 662
+f 817 662 665
+f 816 817 665
+f 816 665 664
+f 812 813 663
+f 812 663 662
+f 813 816 664
+f 813 664 663
+f 821 815 666
+f 821 666 669
+f 820 821 669
+f 820 669 668
+f 815 814 667
+f 815 667 666
+f 814 820 668
+f 814 668 667
+f 825 819 670
+f 825 670 673
+f 824 825 673
+f 824 673 672
+f 819 818 671
+f 819 671 670
+f 818 824 672
+f 818 672 671
+f 829 823 674
+f 829 674 677
+f 828 829 677
+f 828 677 676
+f 823 822 675
+f 823 675 674
+f 822 828 676
+f 822 676 675
+f 833 827 678
+f 833 678 681
+f 832 833 681
+f 832 681 680
+f 827 826 679
+f 827 679 678
+f 826 832 680
+f 826 680 679
+f 835 831 682
+f 835 682 685
+f 836 835 685
+f 836 685 684
+f 831 830 683
+f 831 683 682
+f 830 836 684
+f 830 684 683
+f 689 837 686
+f 841 837 689
+f 840 841 689
+f 840 689 688
+f 837 834 687
+f 837 687 686
+f 834 840 688
+f 834 688 687
+f 844 839 690
+f 844 690 693
+f 842 844 693
+f 842 693 692
+f 839 838 691
+f 839 691 690
+f 838 842 692
+f 838 692 691
+f 847 843 694
+f 847 694 697
+f 848 847 697
+f 848 697 696
+f 843 845 695
+f 843 695 694
+f 695 848 696
+f 845 848 695
+f 699 706 705
+f 698 706 699
+f 856 706 698
+f 700 705 791
+f 700 791 890
+f 700 890 891
+f 700 699 705
+f 852 856 698
+f 701 852 698
+f 853 852 701
+f 853 701 892
+f 893 701 700
+f 893 700 891
+f 893 892 701
+f 857 707 706
+f 856 857 706
+f 794 894 742
+f 702 794 742
+f 795 894 794
+f 895 894 795
+f 803 895 795
+f 792 702 704
+f 792 794 702
+f 802 795 793
+f 802 803 795
+f 855 793 792
+f 855 802 793
+f 855 792 704
+f 854 855 704
+f 854 704 703
+f 715 722 716
+f 717 703 722
+f 717 722 715
+f 718 703 717
+f 719 703 718
+f 710 703 719
+f 854 710 867
+f 854 703 710
+f 866 854 867
+f 865 870 854
+f 865 854 866
+f 862 864 870
+f 862 870 865
+f 734 728 727
+f 734 729 728
+f 707 730 729
+f 707 729 734
+f 731 730 707
+f 709 731 707
+f 881 874 876
+f 881 876 877
+f 857 877 878
+f 857 878 879
+f 857 879 709
+f 857 709 707
+f 857 881 877
+f 896 742 894
+f 890 896 897
+f 890 791 896
+f 791 742 896
+f 803 898 895
+f 898 892 899
+f 853 892 898
+f 803 853 898
+f 850 851 900
+f 850 900 901
+f 846 850 901
+f 846 901 902
+f 851 849 903
+f 851 903 900
+f 849 846 902
+f 849 902 903
+f 899 904 905
+f 899 906 904
+f 906 907 908
+f 899 907 906
+f 907 909 908
+f 910 911 912
+f 913 911 910
+f 914 915 916
+f 915 917 918
+f 914 919 915
+f 915 919 917
+f 920 921 922
+f 923 921 920
+f 923 924 925
+f 920 924 923
+f 924 926 925
+f 892 893 924
+f 899 892 924
+f 899 924 914
+f 899 914 913
+f 899 913 910
+f 899 910 907
+f 914 924 920
+f 914 920 927
+f 914 927 919
+f 893 891 928
+f 924 893 928
+f 929 897 930
+f 931 897 929
+f 932 897 931
+f 933 931 934
+f 933 932 931
+f 935 936 937
+f 935 938 936
+f 939 940 941
+f 942 939 943
+f 944 940 939
+f 944 939 942
+f 945 946 947
+f 945 948 946
+f 928 948 949
+f 928 946 948
+f 950 928 949
+f 891 890 928
+f 890 897 928
+f 928 897 940
+f 940 897 938
+f 938 897 936
+f 936 897 932
+f 928 940 946
+f 946 940 951
+f 951 940 944
+f 898 896 894
+f 895 898 894
+f 899 905 930
+f 899 930 897
+f 896 898 899
+f 896 899 897
+f 901 900 902
+f 902 900 903
+f 924 928 950
+f 926 924 950
+f 926 950 949
+f 925 926 949
+f 925 949 948
+f 923 925 948
+f 945 952 948
+f 953 954 952
+f 954 955 952
+f 952 955 948
+f 956 957 958
+f 958 957 959
+f 921 923 957
+f 957 923 959
+f 923 948 955
+f 923 955 959
+f 960 947 961
+f 962 963 964
+f 962 964 965
+f 966 960 963
+f 966 963 962
+f 966 967 960
+f 968 969 922
+f 945 947 960
+f 945 960 967
+f 952 945 967
+f 970 955 966
+f 970 966 962
+f 971 962 968
+f 971 970 962
+f 959 955 970
+f 921 957 971
+f 921 968 922
+f 921 971 968
+f 946 961 947
+f 961 964 972
+f 946 964 961
+f 964 973 972
+f 965 969 974
+f 969 975 974
+f 965 920 969
+f 920 922 969
+f 946 920 965
+f 946 965 964
+f 927 920 951
+f 951 920 946
+f 919 927 944
+f 944 927 951
+f 917 919 942
+f 942 919 944
+f 918 917 943
+f 943 917 942
+f 915 918 939
+f 939 918 943
+f 916 915 941
+f 941 915 939
+f 914 916 940
+f 940 916 941
+f 913 914 938
+f 938 914 940
+f 911 913 935
+f 935 913 938
+f 912 911 937
+f 937 911 935
+f 910 912 936
+f 936 912 937
+f 932 907 936
+f 907 910 936
+f 933 976 932
+f 977 978 976
+f 978 979 976
+f 976 979 932
+f 980 981 982
+f 982 981 983
+f 909 907 981
+f 981 907 983
+f 907 932 979
+f 907 979 983
+f 984 934 985
+f 986 984 987
+f 988 987 989
+f 988 989 990
+f 991 986 987
+f 992 993 908
+f 933 934 984
+f 933 984 986
+f 976 933 986
+f 994 987 988
+f 994 991 987
+f 995 988 992
+f 995 994 988
+f 983 979 991
+f 983 991 994
+f 909 981 995
+f 909 992 908
+f 909 995 992
+f 931 985 934
+f 931 989 985
+f 985 996 997
+f 989 996 985
+f 990 998 999
+f 993 998 990
+f 990 906 993
+f 906 908 993
+f 931 906 990
+f 931 990 989
+f 904 906 931
+f 904 931 929
+f 904 929 930
+f 905 904 930
+f 971 957 1000
+f 1000 957 1001
+f 1001 957 1002
+f 957 956 1002
+f 952 967 1003
+f 952 1003 1004
+f 952 1004 1005
+f 953 952 1005
+f 1005 954 953
+f 1006 954 1005
+f 955 954 1006
+f 955 1006 1007
+f 955 1007 1008
+f 955 1008 966
+f 958 959 1009
+f 1009 959 1010
+f 1010 959 1011
+f 1011 959 970
+f 1002 958 1009
+f 1002 956 958
+f 971 1000 1011
+f 971 1011 970
+f 966 1008 1003
+f 966 1003 967
+f 1012 961 972
+f 1013 961 1012
+f 1014 960 961
+f 1014 961 1013
+f 1015 963 1014
+f 1014 963 960
+f 1016 973 964
+f 1017 1016 964
+f 1015 1017 964
+f 963 1015 964
+f 974 1018 965
+f 1018 1019 965
+f 1019 1020 965
+f 1020 962 965
+f 1021 968 1020
+f 1020 968 962
+f 969 1022 975
+f 969 1023 1022
+f 968 1021 969
+f 969 1021 1023
+f 975 1022 974
+f 974 1022 1018
+f 973 1016 972
+f 972 1016 1012
+f 995 981 1024
+f 1024 981 1025
+f 1025 981 1026
+f 981 980 1026
+f 976 986 1027
+f 976 1027 1028
+f 976 1028 1029
+f 977 976 1029
+f 1029 978 977
+f 1030 978 1029
+f 979 978 1030
+f 979 1030 1031
+f 979 1031 1032
+f 979 1032 991
+f 982 983 1033
+f 1033 983 1034
+f 1034 983 1035
+f 1035 983 994
+f 1026 982 1033
+f 1026 980 982
+f 993 1036 998
+f 993 1037 1036
+f 992 1038 993
+f 993 1038 1037
+f 995 1024 994
+f 994 1024 1035
+f 991 1032 986
+f 986 1032 1027
+f 1039 985 997
+f 1040 985 1039
+f 1041 984 985
+f 1041 985 1040
+f 1042 987 1041
+f 1041 987 984
+f 1043 996 989
+f 1044 1043 989
+f 1042 1044 989
+f 987 1042 989
+f 999 1045 990
+f 1045 1046 990
+f 1046 1047 990
+f 1047 988 990
+f 1038 992 1047
+f 1047 992 988
+f 998 1036 999
+f 999 1036 1045
+f 996 1043 997
+f 997 1043 1039
+f 1002 1009 1001
+f 1001 1009 1010
+f 1000 1001 1011
+f 1011 1001 1010
+f 1006 1005 1004
+f 1006 1004 1007
+f 1008 1007 1003
+f 1003 1007 1004
+f 1013 1015 1014
+f 1017 1015 1013
+f 1017 1013 1012
+f 1017 1012 1016
+f 1023 1020 1019
+f 1023 1021 1020
+f 1023 1019 1022
+f 1022 1019 1018
+f 1026 1033 1025
+f 1025 1033 1034
+f 1024 1025 1035
+f 1035 1025 1034
+f 1030 1029 1028
+f 1030 1028 1031
+f 1032 1031 1027
+f 1027 1031 1028
+f 1037 1047 1046
+f 1037 1038 1047
+f 1037 1045 1036
+f 1037 1046 1045
+f 1044 1041 1040
+f 1044 1042 1041
+f 1043 1040 1039
+f 1044 1040 1043
+o Windows
+v -0.250000 -12.045000 3.200058
+v -0.250000 -12.045000 2.880463
+v -0.250000 -12.055000 3.200058
+v -0.250000 -12.055000 2.880463
+v 0.250000 -12.045000 2.880463
+v 0.250000 -12.055000 2.880463
+v 0.250000 -12.045000 3.200058
+v 0.250000 -12.055000 3.200058
+v -0.250000 12.005000 3.200058
+v -0.250000 12.005000 2.880463
+v -0.250000 11.995000 3.200058
+v -0.250000 11.995000 2.880463
+v 0.250000 12.005000 2.880463
+v 0.250000 11.995000 2.880463
+v 0.250000 12.005000 3.200058
+v 0.250000 11.995000 3.200058
+v 1.545000 2.906498 3.100000
+v 1.555000 2.906498 2.200000
+v 1.555000 2.906498 3.100000
+v 1.545000 2.906498 2.200000
+v 1.545000 3.906498 2.200000
+v 1.555000 3.906498 2.200000
+v 1.545000 3.906498 3.100000
+v 1.555000 3.906498 3.100000
+v 1.545000 -6.043502 3.100000
+v 1.545000 -6.043502 2.200000
+v 1.555000 -6.043502 3.100000
+v 1.555000 -6.043502 2.200000
+v 1.555000 -5.043502 2.200000
+v 1.545000 -5.043502 2.200000
+v 1.555000 -5.043502 3.100000
+v 1.545000 -5.043502 3.100000
+v 1.545000 -2.463502 3.100000
+v 1.545000 -2.463502 2.200000
+v 1.555000 -2.463502 3.100000
+v 1.555000 -2.463502 2.200000
+v 1.555000 -1.463502 2.200000
+v 1.545000 -1.463502 2.200000
+v 1.545000 -1.463502 3.100000
+v 1.555000 -1.463502 3.100000
+v 1.545000 8.276498 3.100000
+v 1.555000 8.276498 2.200000
+v 1.555000 8.276498 3.100000
+v 1.545000 8.276498 2.200000
+v 1.545000 9.276498 2.200000
+v 1.555000 9.276498 2.200000
+v 1.545000 9.276498 3.100000
+v 1.555000 9.276498 3.100000
+v 1.545000 6.486498 3.100000
+v 1.555000 6.486498 2.200000
+v 1.555000 6.486498 3.100000
+v 1.545000 6.486498 2.200000
+v 1.545000 7.486498 2.200000
+v 1.555000 7.486498 2.200000
+v 1.545000 7.486498 3.100000
+v 1.555000 7.486498 3.100000
+v 1.545000 4.696498 3.100000
+v 1.555000 4.696498 2.200000
+v 1.555000 4.696498 3.100000
+v 1.545000 4.696498 2.200000
+v 1.545000 5.696498 2.200000
+v 1.555000 5.696498 2.200000
+v 1.545000 5.696498 3.100000
+v 1.555000 5.696498 3.100000
+v 1.545000 1.116498 3.100000
+v 1.555000 1.116498 2.200000
+v 1.555000 1.116498 3.100000
+v 1.545000 1.116498 2.200000
+v 1.545000 2.116498 2.200000
+v 1.555000 2.116498 2.200000
+v 1.545000 2.116498 3.100000
+v 1.555000 2.116498 3.100000
+v 1.545000 -0.673502 3.100000
+v 1.555000 -0.673502 2.200000
+v 1.555000 -0.673502 3.100000
+v 1.545000 -0.673502 2.200000
+v 1.555000 0.326498 2.200000
+v 1.545000 0.326498 2.200000
+v 1.545000 0.326498 3.100000
+v 1.555000 0.326498 3.100000
+v 1.545000 -4.253502 3.100000
+v 1.545000 -4.253502 2.200000
+v 1.555000 -4.253502 3.100000
+v 1.555000 -4.253502 2.200000
+v 1.555000 -3.253502 2.200000
+v 1.545000 -3.253502 2.200000
+v 1.545000 -3.253502 3.100000
+v 1.555000 -3.253502 3.100000
+v 1.545000 -8.735861 3.100000
+v 1.545000 -8.735861 2.200000
+v 1.555000 -8.735861 3.100000
+v 1.555000 -8.735861 2.200000
+v 1.555000 -8.035861 2.200000
+v 1.545000 -8.035861 2.200000
+v 1.555000 -8.035861 3.100000
+v 1.545000 -8.035861 3.100000
+v 1.545000 -7.535861 3.100000
+v 1.545000 -7.535861 2.200000
+v 1.555000 -7.535861 3.100000
+v 1.555000 -7.535861 2.200000
+v 1.555000 -6.835861 2.200000
+v 1.545000 -6.835861 2.200000
+v 1.555000 -6.835861 3.100000
+v 1.545000 -6.835861 3.100000
+v 1.545000 9.769932 2.200000
+v 1.545000 10.469932 2.200000
+v 1.555000 9.769932 2.200000
+v 1.555000 10.469932 2.200000
+v 1.545000 10.469932 3.100000
+v 1.555000 10.469932 3.100000
+v 1.555000 9.769932 3.100000
+v 1.545000 9.769932 3.100000
+v 1.545000 11.046015 2.200000
+v 1.545000 11.546015 2.200000
+v 1.555000 11.046015 2.200000
+v 1.555000 11.546015 2.200000
+v 1.545000 11.546015 3.100000
+v 1.555000 11.546015 3.100000
+v 1.555000 11.046015 3.100000
+v 1.545000 11.046015 3.100000
+v 1.545000 -11.619958 3.100000
+v 1.545000 -11.619958 2.200000
+v 1.555000 -11.619958 3.100000
+v 1.555000 -11.619958 2.200000
+v 1.555000 -11.119958 2.200000
+v 1.545000 -11.119958 2.200000
+v 1.555000 -11.119958 3.100000
+v 1.545000 -11.119958 3.100000
+v -1.545000 2.906498 3.100000
+v -1.535000 2.906498 2.200000
+v -1.535000 2.906498 3.100000
+v -1.545000 2.906498 2.200000
+v -1.545000 3.906498 2.200000
+v -1.535000 3.906498 2.200000
+v -1.545000 3.906498 3.100000
+v -1.535000 3.906498 3.100000
+v -1.545000 -6.043502 3.100000
+v -1.545000 -6.043502 2.200000
+v -1.535000 -6.043502 3.100000
+v -1.535000 -6.043502 2.200000
+v -1.535000 -5.043502 2.200000
+v -1.545000 -5.043502 2.200000
+v -1.535000 -5.043502 3.100000
+v -1.545000 -5.043502 3.100000
+v -1.545000 -2.463502 3.100000
+v -1.545000 -2.463502 2.200000
+v -1.535000 -2.463502 3.100000
+v -1.535000 -2.463502 2.200000
+v -1.535000 -1.463502 2.200000
+v -1.545000 -1.463502 2.200000
+v -1.545000 -1.463502 3.100000
+v -1.535000 -1.463502 3.100000
+v -1.545000 8.276498 3.100000
+v -1.535000 8.276498 2.200000
+v -1.535000 8.276498 3.100000
+v -1.545000 8.276498 2.200000
+v -1.545000 9.276498 2.200000
+v -1.535000 9.276498 2.200000
+v -1.545000 9.276498 3.100000
+v -1.535000 9.276498 3.100000
+v -1.545000 6.486498 3.100000
+v -1.535000 6.486498 2.200000
+v -1.535000 6.486498 3.100000
+v -1.545000 6.486498 2.200000
+v -1.545000 7.486498 2.200000
+v -1.535000 7.486498 2.200000
+v -1.545000 7.486498 3.100000
+v -1.535000 7.486498 3.100000
+v -1.545000 4.696498 3.100000
+v -1.535000 4.696498 2.200000
+v -1.535000 4.696498 3.100000
+v -1.545000 4.696498 2.200000
+v -1.545000 5.696498 2.200000
+v -1.535000 5.696498 2.200000
+v -1.545000 5.696498 3.100000
+v -1.535000 5.696498 3.100000
+v -1.545000 1.116498 3.100000
+v -1.535000 1.116498 2.200000
+v -1.535000 1.116498 3.100000
+v -1.545000 1.116498 2.200000
+v -1.545000 2.116498 2.200000
+v -1.535000 2.116498 2.200000
+v -1.545000 2.116498 3.100000
+v -1.535000 2.116498 3.100000
+v -1.545000 -0.673502 3.100000
+v -1.535000 -0.673502 2.200000
+v -1.535000 -0.673502 3.100000
+v -1.545000 -0.673502 2.200000
+v -1.535000 0.326498 2.200000
+v -1.545000 0.326498 2.200000
+v -1.545000 0.326498 3.100000
+v -1.535000 0.326498 3.100000
+v -1.545000 -4.253502 3.100000
+v -1.545000 -4.253502 2.200000
+v -1.535000 -4.253502 3.100000
+v -1.535000 -4.253502 2.200000
+v -1.535000 -3.253502 2.200000
+v -1.545000 -3.253502 2.200000
+v -1.545000 -3.253502 3.100000
+v -1.535000 -3.253502 3.100000
+v -1.545000 -8.735861 3.100000
+v -1.545000 -8.735861 2.200000
+v -1.535000 -8.735861 3.100000
+v -1.535000 -8.735861 2.200000
+v -1.535000 -8.035861 2.200000
+v -1.545000 -8.035861 2.200000
+v -1.535000 -8.035861 3.100000
+v -1.545000 -8.035861 3.100000
+v -1.545000 -7.535861 3.100000
+v -1.545000 -7.535861 2.200000
+v -1.535000 -7.535861 3.100000
+v -1.535000 -7.535861 2.200000
+v -1.535000 -6.835861 2.200000
+v -1.545000 -6.835861 2.200000
+v -1.535000 -6.835861 3.100000
+v -1.545000 -6.835861 3.100000
+v -1.545000 9.769932 2.200000
+v -1.545000 10.469932 2.200000
+v -1.535000 9.769932 2.200000
+v -1.535000 10.469932 2.200000
+v -1.545000 10.469932 3.100000
+v -1.535000 10.469932 3.100000
+v -1.535000 9.769932 3.100000
+v -1.545000 9.769932 3.100000
+v -1.545000 11.046015 2.200000
+v -1.545000 11.546015 2.200000
+v -1.535000 11.046015 2.200000
+v -1.535000 11.546015 2.200000
+v -1.545000 11.546015 3.100000
+v -1.535000 11.546015 3.100000
+v -1.535000 11.046015 3.100000
+v -1.545000 11.046015 3.100000
+v -1.545000 -11.619958 3.100000
+v -1.545000 -11.619958 2.200000
+v -1.535000 -11.619958 3.100000
+v -1.535000 -11.619958 2.200000
+v -1.535000 -11.119958 2.200000
+v -1.545000 -11.119958 2.200000
+v -1.535000 -11.119958 3.100000
+v -1.545000 -11.119958 3.100000
+f 1048 1049 1050
+f 1050 1049 1051
+f 1049 1052 1051
+f 1051 1052 1053
+f 1052 1054 1053
+f 1053 1054 1055
+f 1054 1048 1055
+f 1055 1048 1050
+f 1054 1052 1049
+f 1054 1049 1048
+f 1053 1055 1051
+f 1051 1055 1050
+f 1056 1057 1058
+f 1058 1057 1059
+f 1057 1060 1059
+f 1059 1060 1061
+f 1060 1062 1061
+f 1061 1062 1063
+f 1062 1056 1063
+f 1063 1056 1058
+f 1062 1060 1057
+f 1062 1057 1056
+f 1061 1063 1059
+f 1059 1063 1058
+f 1064 1065 1066
+f 1064 1067 1065
+f 1067 1068 1065
+f 1065 1068 1069
+f 1068 1070 1069
+f 1069 1070 1071
+f 1070 1064 1071
+f 1071 1064 1066
+f 1064 1070 1067
+f 1067 1070 1068
+f 1071 1066 1065
+f 1071 1065 1069
+f 1072 1073 1074
+f 1074 1073 1075
+f 1073 1076 1075
+f 1073 1077 1076
+f 1077 1078 1076
+f 1077 1079 1078
+f 1079 1072 1078
+f 1078 1072 1074
+f 1072 1079 1073
+f 1073 1079 1077
+f 1078 1074 1075
+f 1078 1075 1076
+f 1080 1081 1082
+f 1082 1081 1083
+f 1081 1084 1083
+f 1081 1085 1084
+f 1085 1086 1084
+f 1084 1086 1087
+f 1086 1080 1087
+f 1087 1080 1082
+f 1080 1086 1081
+f 1081 1086 1085
+f 1087 1082 1083
+f 1087 1083 1084
+f 1088 1089 1090
+f 1088 1091 1089
+f 1091 1092 1089
+f 1089 1092 1093
+f 1092 1094 1093
+f 1093 1094 1095
+f 1094 1090 1095
+f 1094 1088 1090
+f 1088 1094 1091
+f 1091 1094 1092
+f 1095 1090 1089
+f 1095 1089 1093
+f 1096 1097 1098
+f 1096 1099 1097
+f 1099 1100 1097
+f 1097 1100 1101
+f 1100 1102 1101
+f 1101 1102 1103
+f 1102 1098 1103
+f 1102 1096 1098
+f 1096 1102 1099
+f 1099 1102 1100
+f 1103 1098 1097
+f 1103 1097 1101
+f 1104 1105 1106
+f 1104 1107 1105
+f 1107 1108 1105
+f 1105 1108 1109
+f 1108 1110 1109
+f 1109 1110 1111
+f 1110 1104 1111
+f 1111 1104 1106
+f 1104 1110 1107
+f 1107 1110 1108
+f 1111 1106 1105
+f 1111 1105 1109
+f 1112 1113 1114
+f 1112 1115 1113
+f 1115 1116 1113
+f 1113 1116 1117
+f 1116 1118 1117
+f 1117 1118 1119
+f 1118 1112 1119
+f 1119 1112 1114
+f 1112 1118 1115
+f 1115 1118 1116
+f 1119 1114 1113
+f 1119 1113 1117
+f 1120 1121 1122
+f 1120 1123 1121
+f 1123 1124 1121
+f 1123 1125 1124
+f 1125 1126 1124
+f 1124 1126 1127
+f 1126 1120 1127
+f 1127 1120 1122
+f 1120 1126 1123
+f 1123 1126 1125
+f 1127 1122 1121
+f 1127 1121 1124
+f 1128 1129 1130
+f 1130 1129 1131
+f 1129 1132 1131
+f 1129 1133 1132
+f 1133 1134 1132
+f 1132 1134 1135
+f 1134 1128 1135
+f 1135 1128 1130
+f 1128 1134 1129
+f 1129 1134 1133
+f 1135 1130 1131
+f 1135 1131 1132
+f 1136 1137 1138
+f 1138 1137 1139
+f 1137 1140 1139
+f 1137 1141 1140
+f 1141 1142 1140
+f 1141 1143 1142
+f 1143 1136 1142
+f 1142 1136 1138
+f 1136 1143 1137
+f 1137 1143 1141
+f 1142 1138 1139
+f 1142 1139 1140
+f 1144 1145 1146
+f 1146 1145 1147
+f 1145 1148 1147
+f 1145 1149 1148
+f 1149 1150 1148
+f 1149 1151 1150
+f 1151 1144 1150
+f 1150 1144 1146
+f 1145 1144 1149
+f 1144 1151 1149
+f 1146 1147 1148
+f 1150 1146 1148
+f 1152 1153 1154
+f 1154 1153 1155
+f 1153 1156 1155
+f 1155 1156 1157
+f 1156 1158 1157
+f 1156 1159 1158
+f 1159 1154 1158
+f 1159 1152 1154
+f 1152 1156 1153
+f 1159 1156 1152
+f 1157 1154 1155
+f 1157 1158 1154
+f 1160 1161 1162
+f 1162 1161 1163
+f 1161 1164 1163
+f 1163 1164 1165
+f 1164 1166 1165
+f 1164 1167 1166
+f 1167 1162 1166
+f 1167 1160 1162
+f 1160 1164 1161
+f 1167 1164 1160
+f 1165 1162 1163
+f 1165 1166 1162
+f 1168 1169 1170
+f 1170 1169 1171
+f 1169 1172 1171
+f 1169 1173 1172
+f 1173 1174 1172
+f 1173 1175 1174
+f 1175 1168 1174
+f 1174 1168 1170
+f 1168 1175 1169
+f 1169 1175 1173
+f 1174 1170 1171
+f 1174 1171 1172
+f 1176 1177 1178
+f 1176 1179 1177
+f 1179 1180 1177
+f 1177 1180 1181
+f 1180 1182 1181
+f 1181 1182 1183
+f 1182 1176 1183
+f 1183 1176 1178
+f 1176 1182 1179
+f 1179 1182 1180
+f 1183 1178 1177
+f 1183 1177 1181
+f 1184 1185 1186
+f 1186 1185 1187
+f 1185 1188 1187
+f 1185 1189 1188
+f 1189 1190 1188
+f 1189 1191 1190
+f 1191 1184 1190
+f 1190 1184 1186
+f 1184 1191 1185
+f 1185 1191 1189
+f 1190 1186 1187
+f 1190 1187 1188
+f 1192 1193 1194
+f 1194 1193 1195
+f 1193 1196 1195
+f 1193 1197 1196
+f 1197 1198 1196
+f 1196 1198 1199
+f 1198 1192 1199
+f 1199 1192 1194
+f 1192 1198 1193
+f 1193 1198 1197
+f 1199 1194 1195
+f 1199 1195 1196
+f 1200 1201 1202
+f 1200 1203 1201
+f 1203 1204 1201
+f 1201 1204 1205
+f 1204 1206 1205
+f 1205 1206 1207
+f 1206 1202 1207
+f 1206 1200 1202
+f 1200 1206 1203
+f 1203 1206 1204
+f 1207 1202 1201
+f 1207 1201 1205
+f 1208 1209 1210
+f 1208 1211 1209
+f 1211 1212 1209
+f 1209 1212 1213
+f 1212 1214 1213
+f 1213 1214 1215
+f 1214 1210 1215
+f 1214 1208 1210
+f 1208 1214 1211
+f 1211 1214 1212
+f 1215 1210 1209
+f 1215 1209 1213
+f 1216 1217 1218
+f 1216 1219 1217
+f 1219 1220 1217
+f 1217 1220 1221
+f 1220 1222 1221
+f 1221 1222 1223
+f 1222 1216 1223
+f 1223 1216 1218
+f 1216 1222 1219
+f 1219 1222 1220
+f 1223 1218 1217
+f 1223 1217 1221
+f 1224 1225 1226
+f 1224 1227 1225
+f 1227 1228 1225
+f 1225 1228 1229
+f 1228 1230 1229
+f 1229 1230 1231
+f 1230 1224 1231
+f 1231 1224 1226
+f 1224 1230 1227
+f 1227 1230 1228
+f 1231 1226 1225
+f 1231 1225 1229
+f 1232 1233 1234
+f 1232 1235 1233
+f 1235 1236 1233
+f 1235 1237 1236
+f 1237 1238 1236
+f 1236 1238 1239
+f 1238 1232 1239
+f 1239 1232 1234
+f 1232 1238 1235
+f 1235 1238 1237
+f 1239 1234 1233
+f 1239 1233 1236
+f 1240 1241 1242
+f 1242 1241 1243
+f 1241 1244 1243
+f 1241 1245 1244
+f 1245 1246 1244
+f 1244 1246 1247
+f 1246 1240 1247
+f 1247 1240 1242
+f 1240 1246 1241
+f 1241 1246 1245
+f 1247 1242 1243
+f 1247 1243 1244
+f 1248 1249 1250
+f 1250 1249 1251
+f 1249 1252 1251
+f 1249 1253 1252
+f 1253 1254 1252
+f 1253 1255 1254
+f 1255 1248 1254
+f 1254 1248 1250
+f 1248 1255 1249
+f 1249 1255 1253
+f 1254 1250 1251
+f 1254 1251 1252
+f 1256 1257 1258
+f 1258 1257 1259
+f 1257 1260 1259
+f 1257 1261 1260
+f 1261 1262 1260
+f 1261 1263 1262
+f 1263 1256 1262
+f 1262 1256 1258
+f 1257 1256 1261
+f 1256 1263 1261
+f 1258 1259 1260
+f 1262 1258 1260
+f 1264 1265 1266
+f 1266 1265 1267
+f 1265 1268 1267
+f 1267 1268 1269
+f 1268 1270 1269
+f 1268 1271 1270
+f 1271 1266 1270
+f 1271 1264 1266
+f 1264 1268 1265
+f 1271 1268 1264
+f 1269 1266 1267
+f 1269 1270 1266
+f 1272 1273 1274
+f 1274 1273 1275
+f 1273 1276 1275
+f 1275 1276 1277
+f 1276 1278 1277
+f 1276 1279 1278
+f 1279 1274 1278
+f 1279 1272 1274
+f 1272 1276 1273
+f 1279 1276 1272
+f 1277 1274 1275
+f 1277 1278 1274
+f 1280 1281 1282
+f 1282 1281 1283
+f 1281 1284 1283
+f 1281 1285 1284
+f 1285 1286 1284
+f 1285 1287 1286
+f 1287 1280 1286
+f 1286 1280 1282
+f 1280 1287 1281
+f 1281 1287 1285
+f 1286 1282 1283
+f 1286 1283 1284
+o Doors outside
+v -0.400000 -12.025000 3.407524
+v -0.400000 -12.025000 1.507524
+v -0.400000 -12.075000 3.407524
+v -0.400000 -12.075000 1.507524
+v 0.400000 -12.025000 3.407524
+v 0.400000 -12.075000 3.407524
+v 0.400000 -12.025000 1.507524
+v 0.400000 -12.075000 1.507524
+v -0.250000 -12.025000 3.200058
+v -0.250000 -12.025000 2.880463
+v 0.250000 -12.025000 2.880463
+v 0.250000 -12.025000 3.200058
+v -0.250000 -12.075000 3.200058
+v -0.250000 -12.075000 2.880463
+v 0.250000 -12.075000 2.880463
+v 0.250000 -12.075000 3.200058
+v -0.400000 12.025000 3.407524
+v -0.400000 12.025000 1.507524
+v -0.400000 11.975000 3.407524
+v -0.400000 11.975000 1.507524
+v 0.400000 12.025000 3.407524
+v 0.400000 11.975000 3.407524
+v 0.400000 12.025000 1.507524
+v 0.400000 11.975000 1.507524
+v -0.250000 12.025000 3.200058
+v -0.250000 12.025000 2.880463
+v 0.250000 12.025000 2.880463
+v 0.250000 12.025000 3.200058
+v -0.250000 11.975000 3.200058
+v -0.250000 11.975000 2.880463
+v 0.250000 11.975000 2.880463
+v 0.250000 11.975000 3.200058
+v 1.515000 10.902993 3.342651
+v 1.565000 10.902993 1.442807
+v 1.565000 10.902993 3.342651
+v 1.515000 10.902993 1.442807
+v 1.515000 11.682993 3.342651
+v 1.565000 11.682993 3.342651
+v 1.515000 11.682993 1.442807
+v 1.565000 11.682993 1.442807
+v 1.515000 11.046015 2.200000
+v 1.515000 11.546015 2.200000
+v 1.515000 11.046015 3.100000
+v 1.515000 11.546015 3.100000
+v 1.565000 11.046015 2.200000
+v 1.565000 11.546015 2.200000
+v 1.565000 11.046015 3.100000
+v 1.565000 11.546015 3.100000
+v 1.515000 -11.757270 3.342651
+v 1.515000 -11.757270 1.442807
+v 1.565000 -11.757270 3.342651
+v 1.565000 -11.757270 1.442807
+v 1.515000 -10.977270 3.342651
+v 1.565000 -10.977270 3.342651
+v 1.565000 -10.977270 1.442807
+v 1.515000 -10.977270 1.442807
+v 1.515000 -11.119958 2.200000
+v 1.515000 -11.619958 2.200000
+v 1.515000 -11.619958 3.100000
+v 1.515000 -11.119958 3.100000
+v 1.565000 -11.119958 2.200000
+v 1.565000 -11.619958 2.200000
+v 1.565000 -11.619958 3.100000
+v 1.565000 -11.119958 3.100000
+v -1.565000 10.902993 3.342651
+v -1.515000 10.902993 1.442807
+v -1.515000 10.902993 3.342651
+v -1.565000 10.902993 1.442807
+v -1.565000 11.682993 3.342651
+v -1.515000 11.682993 3.342651
+v -1.565000 11.682993 1.442807
+v -1.515000 11.682993 1.442807
+v -1.565000 11.046015 2.200000
+v -1.565000 11.546015 2.200000
+v -1.565000 11.046015 3.100000
+v -1.565000 11.546015 3.100000
+v -1.515000 11.046015 2.200000
+v -1.515000 11.546015 2.200000
+v -1.515000 11.046015 3.100000
+v -1.515000 11.546015 3.100000
+v -1.565000 -11.757270 3.342651
+v -1.565000 -11.757270 1.442807
+v -1.515000 -11.757270 3.342651
+v -1.515000 -11.757270 1.442807
+v -1.565000 -10.977270 3.342651
+v -1.515000 -10.977270 3.342651
+v -1.515000 -10.977270 1.442807
+v -1.565000 -10.977270 1.442807
+v -1.565000 -11.119958 2.200000
+v -1.565000 -11.619958 2.200000
+v -1.565000 -11.619958 3.100000
+v -1.565000 -11.119958 3.100000
+v -1.515000 -11.119958 2.200000
+v -1.515000 -11.619958 2.200000
+v -1.515000 -11.619958 3.100000
+v -1.515000 -11.119958 3.100000
+f 1288 1289 1290
+f 1290 1289 1291
+f 1292 1288 1293
+f 1293 1288 1290
+f 1289 1294 1291
+f 1291 1294 1295
+f 1288 1296 1297
+f 1288 1297 1289
+f 1298 1294 1289
+f 1298 1289 1297
+f 1292 1299 1296
+f 1292 1298 1299
+f 1292 1296 1288
+f 1292 1294 1298
+f 1300 1290 1301
+f 1301 1290 1291
+f 1295 1302 1291
+f 1291 1302 1301
+f 1303 1293 1300
+f 1302 1293 1303
+f 1300 1293 1290
+f 1295 1293 1302
+f 1294 1292 1295
+f 1295 1292 1293
+f 1296 1299 1303
+f 1296 1303 1300
+f 1303 1298 1302
+f 1299 1298 1303
+f 1298 1297 1301
+f 1298 1301 1302
+f 1301 1296 1300
+f 1297 1296 1301
+f 1304 1305 1306
+f 1306 1305 1307
+f 1308 1304 1309
+f 1309 1304 1306
+f 1305 1310 1307
+f 1307 1310 1311
+f 1304 1312 1313
+f 1304 1313 1305
+f 1314 1310 1305
+f 1314 1305 1313
+f 1308 1315 1312
+f 1308 1314 1315
+f 1308 1312 1304
+f 1308 1310 1314
+f 1316 1306 1317
+f 1317 1306 1307
+f 1311 1318 1307
+f 1307 1318 1317
+f 1319 1309 1316
+f 1318 1309 1319
+f 1316 1309 1306
+f 1311 1309 1318
+f 1310 1308 1311
+f 1311 1308 1309
+f 1312 1315 1319
+f 1312 1319 1316
+f 1319 1314 1318
+f 1315 1314 1319
+f 1314 1313 1317
+f 1314 1317 1318
+f 1317 1312 1316
+f 1313 1312 1317
+f 1320 1321 1322
+f 1320 1323 1321
+f 1324 1322 1325
+f 1324 1320 1322
+f 1323 1326 1321
+f 1321 1326 1327
+f 1323 1328 1326
+f 1328 1329 1326
+f 1328 1320 1330
+f 1331 1324 1329
+f 1330 1324 1331
+f 1320 1324 1330
+f 1323 1320 1328
+f 1324 1326 1329
+f 1332 1321 1327
+f 1333 1332 1327
+f 1322 1332 1334
+f 1325 1335 1333
+f 1325 1334 1335
+f 1325 1322 1334
+f 1322 1321 1332
+f 1327 1325 1333
+f 1326 1324 1327
+f 1327 1324 1325
+f 1331 1329 1333
+f 1331 1333 1335
+f 1334 1331 1335
+f 1330 1331 1334
+f 1328 1330 1334
+f 1328 1334 1332
+f 1329 1328 1332
+f 1329 1332 1333
+f 1336 1337 1338
+f 1338 1337 1339
+f 1340 1336 1341
+f 1341 1336 1338
+f 1337 1342 1339
+f 1337 1343 1342
+f 1337 1344 1343
+f 1345 1344 1337
+f 1345 1336 1346
+f 1336 1347 1346
+f 1347 1340 1344
+f 1336 1340 1347
+f 1337 1336 1345
+f 1340 1343 1344
+f 1348 1339 1342
+f 1348 1349 1339
+f 1338 1349 1350
+f 1351 1338 1350
+f 1341 1351 1348
+f 1341 1338 1351
+f 1338 1339 1349
+f 1342 1341 1348
+f 1343 1341 1342
+f 1343 1340 1341
+f 1344 1345 1349
+f 1344 1349 1348
+f 1351 1344 1348
+f 1347 1344 1351
+f 1350 1347 1351
+f 1346 1347 1350
+f 1345 1346 1350
+f 1345 1350 1349
+f 1352 1353 1354
+f 1352 1355 1353
+f 1356 1354 1357
+f 1356 1352 1354
+f 1355 1358 1353
+f 1353 1358 1359
+f 1355 1360 1358
+f 1360 1361 1358
+f 1360 1352 1362
+f 1363 1356 1361
+f 1362 1356 1363
+f 1352 1356 1362
+f 1355 1352 1360
+f 1356 1358 1361
+f 1364 1353 1359
+f 1365 1364 1359
+f 1354 1364 1366
+f 1357 1367 1365
+f 1357 1366 1367
+f 1357 1354 1366
+f 1354 1353 1364
+f 1359 1357 1365
+f 1358 1356 1359
+f 1359 1356 1357
+f 1367 1361 1365
+f 1363 1361 1367
+f 1362 1363 1367
+f 1362 1367 1366
+f 1364 1362 1366
+f 1360 1362 1364
+f 1365 1360 1364
+f 1361 1360 1365
+f 1368 1369 1370
+f 1370 1369 1371
+f 1372 1368 1373
+f 1373 1368 1370
+f 1369 1374 1371
+f 1369 1375 1374
+f 1369 1376 1375
+f 1377 1376 1369
+f 1377 1368 1378
+f 1368 1379 1378
+f 1379 1372 1376
+f 1368 1372 1379
+f 1369 1368 1377
+f 1372 1375 1376
+f 1380 1371 1374
+f 1380 1381 1371
+f 1370 1381 1382
+f 1383 1370 1382
+f 1373 1383 1380
+f 1373 1370 1383
+f 1370 1371 1381
+f 1374 1373 1380
+f 1375 1373 1374
+f 1375 1372 1373
+f 1380 1377 1381
+f 1376 1377 1380
+f 1383 1376 1380
+f 1379 1376 1383
+f 1382 1379 1383
+f 1378 1379 1382
+f 1381 1378 1382
+f 1377 1378 1381
+o Doors inside
+v 0.125138 -9.045800 4.397621
+v 0.125138 -9.045800 1.400000
+v 0.218545 -9.077109 4.394609
+v 0.218545 -9.077109 1.400000
+v 0.224550 -8.877043 4.394375
+v 0.408772 -8.508063 4.384477
+v 0.315828 -8.476909 4.390165
+v 0.315828 -8.476909 1.400000
+v 0.408772 -8.508063 1.400000
+v 0.650000 5.498548 1.400000
+v 0.550000 5.498548 1.400000
+v 0.650000 5.498548 4.361242
+v 0.550000 5.498548 4.372582
+v 0.650000 4.898548 1.400000
+v 0.650000 4.898548 4.361242
+v 0.550000 4.898548 1.400000
+v 0.550000 4.898548 4.372582
+v 0.584159 5.098548 4.369013
+v 0.584159 5.298548 4.369013
+v 0.650000 3.708548 1.400000
+v 0.550000 3.708548 1.400000
+v 0.650000 3.708548 4.361242
+v 0.550000 3.708548 4.372582
+v 0.650000 3.108548 1.400000
+v 0.650000 3.108548 4.361242
+v 0.550000 3.108548 1.400000
+v 0.550000 3.108548 4.372582
+v 0.584159 3.308548 4.369013
+v 0.584159 3.508548 4.369013
+v 0.650000 -3.451452 1.400000
+v 0.550000 -3.451452 1.400000
+v 0.650000 -3.451452 4.361242
+v 0.550000 -3.451452 4.372582
+v 0.650000 -4.051452 1.400000
+v 0.650000 -4.051452 4.361242
+v 0.550000 -4.051452 1.400000
+v 0.550000 -4.051452 4.372582
+v 0.584159 -3.851452 4.369013
+v 0.584159 -3.651452 4.369013
+v 0.650000 0.128548 1.400000
+v 0.550000 0.128548 1.400000
+v 0.650000 0.128548 4.361242
+v 0.550000 0.128548 4.372582
+v 0.650000 -0.471452 1.400000
+v 0.650000 -0.471452 4.361242
+v 0.550000 -0.471452 1.400000
+v 0.550000 -0.471452 4.372582
+v 0.584159 -0.271452 4.369013
+v 0.584159 -0.071452 4.369013
+v 0.650000 1.918548 1.400000
+v 0.550000 1.918548 1.400000
+v 0.650000 1.918548 4.361242
+v 0.550000 1.918548 4.372582
+v 0.650000 1.318548 1.400000
+v 0.650000 1.318548 4.361242
+v 0.550000 1.318548 1.400000
+v 0.550000 1.318548 4.372582
+v 0.584159 1.518548 4.369013
+v 0.584159 1.718548 4.369013
+v 0.650000 -1.661452 1.400000
+v 0.550000 -1.661452 1.400000
+v 0.650000 -1.661452 4.361242
+v 0.550000 -1.661452 4.372582
+v 0.650000 -2.261452 1.400000
+v 0.650000 -2.261452 4.361242
+v 0.550000 -2.261452 1.400000
+v 0.550000 -2.261452 4.372582
+v 0.584159 -2.061452 4.369013
+v 0.584159 -1.861452 4.369013
+v 0.650000 9.078548 1.400000
+v 0.550000 9.078548 1.400000
+v 0.650000 9.078548 4.361242
+v 0.550000 9.078548 4.372582
+v 0.650000 8.478548 1.400000
+v 0.650000 8.478548 4.361242
+v 0.550000 8.478548 1.400000
+v 0.550000 8.478548 4.372582
+v 0.584159 8.678548 4.369013
+v 0.584159 8.878548 4.369013
+v 0.650000 7.288548 1.400000
+v 0.550000 7.288548 1.400000
+v 0.650000 7.288548 4.361242
+v 0.550000 7.288548 4.372582
+v 0.650000 6.688548 1.400000
+v 0.650000 6.688548 4.361242
+v 0.550000 6.688548 1.400000
+v 0.550000 6.688548 4.372582
+v 0.584159 6.888548 4.369013
+v 0.584159 7.088548 4.369013
+v 0.650000 -5.241452 1.400000
+v 0.550000 -5.241452 1.400000
+v 0.650000 -5.241452 4.361242
+v 0.550000 -5.241452 4.372582
+v 0.650000 -5.841452 1.400000
+v 0.650000 -5.841452 4.361242
+v 0.550000 -5.841452 1.400000
+v 0.550000 -5.841452 4.372582
+v 0.584159 -5.641452 4.369013
+v 0.584159 -5.441452 4.369013
+v 0.650000 -7.048155 1.400000
+v 0.550000 -7.048155 1.400000
+v 0.650000 -7.048155 4.361242
+v 0.550000 -7.048155 4.372582
+v 0.650000 -7.648155 1.400000
+v 0.650000 -7.648155 4.361242
+v 0.550000 -7.648155 1.400000
+v 0.550000 -7.648155 4.372582
+v 0.584159 -7.448155 4.369013
+v 0.584159 -7.248155 4.369013
+f 1384 1385 1386
+f 1385 1387 1386
+f 1388 1386 1389
+f 1388 1389 1390
+f 1388 1390 1384
+f 1388 1384 1386
+f 1385 1384 1390
+f 1391 1385 1390
+f 1391 1392 1385
+f 1385 1392 1387
+f 1387 1392 1389
+f 1387 1389 1386
+f 1392 1391 1389
+f 1389 1391 1390
+f 1393 1394 1395
+f 1395 1394 1396
+f 1397 1393 1395
+f 1397 1395 1398
+f 1394 1393 1399
+f 1399 1393 1397
+f 1394 1399 1400
+f 1394 1400 1396
+f 1401 1396 1400
+f 1401 1400 1398
+f 1402 1398 1395
+f 1402 1395 1396
+f 1402 1401 1398
+f 1402 1396 1401
+f 1400 1399 1398
+f 1399 1397 1398
+f 1403 1404 1405
+f 1405 1404 1406
+f 1407 1403 1405
+f 1407 1405 1408
+f 1404 1403 1409
+f 1409 1403 1407
+f 1404 1409 1410
+f 1404 1410 1406
+f 1411 1406 1410
+f 1411 1410 1408
+f 1412 1408 1405
+f 1412 1405 1406
+f 1412 1411 1408
+f 1412 1406 1411
+f 1410 1409 1408
+f 1409 1407 1408
+f 1413 1414 1415
+f 1415 1414 1416
+f 1417 1413 1415
+f 1417 1415 1418
+f 1414 1413 1419
+f 1419 1413 1417
+f 1414 1419 1420
+f 1414 1420 1416
+f 1421 1416 1420
+f 1421 1420 1418
+f 1422 1418 1415
+f 1422 1415 1416
+f 1422 1421 1418
+f 1422 1416 1421
+f 1420 1419 1418
+f 1419 1417 1418
+f 1423 1424 1425
+f 1425 1424 1426
+f 1427 1423 1425
+f 1427 1425 1428
+f 1424 1423 1429
+f 1429 1423 1427
+f 1424 1429 1430
+f 1424 1430 1426
+f 1431 1426 1430
+f 1431 1430 1428
+f 1432 1428 1425
+f 1432 1425 1426
+f 1432 1431 1428
+f 1432 1426 1431
+f 1430 1429 1428
+f 1429 1427 1428
+f 1433 1434 1435
+f 1435 1434 1436
+f 1437 1433 1435
+f 1437 1435 1438
+f 1434 1433 1439
+f 1439 1433 1437
+f 1439 1440 1436
+f 1434 1439 1436
+f 1441 1436 1440
+f 1441 1440 1438
+f 1442 1438 1435
+f 1442 1435 1436
+f 1442 1441 1438
+f 1442 1436 1441
+f 1440 1439 1438
+f 1439 1437 1438
+f 1443 1444 1445
+f 1445 1444 1446
+f 1447 1443 1445
+f 1447 1445 1448
+f 1444 1443 1449
+f 1449 1443 1447
+f 1444 1449 1450
+f 1444 1450 1446
+f 1451 1446 1450
+f 1451 1450 1448
+f 1452 1448 1445
+f 1452 1445 1446
+f 1452 1451 1448
+f 1452 1446 1451
+f 1450 1449 1448
+f 1449 1447 1448
+f 1453 1454 1455
+f 1455 1454 1456
+f 1457 1453 1455
+f 1457 1455 1458
+f 1454 1453 1459
+f 1459 1453 1457
+f 1454 1459 1460
+f 1454 1460 1456
+f 1461 1456 1460
+f 1461 1460 1458
+f 1462 1455 1456
+f 1462 1458 1455
+f 1462 1456 1461
+f 1462 1461 1458
+f 1460 1459 1458
+f 1459 1457 1458
+f 1463 1464 1465
+f 1465 1464 1466
+f 1467 1463 1465
+f 1467 1465 1468
+f 1464 1463 1469
+f 1469 1463 1467
+f 1464 1469 1470
+f 1464 1470 1466
+f 1471 1466 1470
+f 1471 1470 1468
+f 1472 1468 1465
+f 1472 1465 1466
+f 1472 1471 1468
+f 1472 1466 1471
+f 1470 1469 1468
+f 1469 1467 1468
+f 1473 1474 1475
+f 1475 1474 1476
+f 1477 1473 1475
+f 1477 1475 1478
+f 1474 1473 1479
+f 1479 1473 1477
+f 1474 1479 1480
+f 1474 1480 1476
+f 1481 1476 1480
+f 1481 1480 1478
+f 1482 1478 1475
+f 1482 1475 1476
+f 1482 1481 1478
+f 1482 1476 1481
+f 1480 1479 1478
+f 1479 1477 1478
+f 1483 1484 1485
+f 1485 1484 1486
+f 1487 1483 1485
+f 1487 1485 1488
+f 1484 1483 1489
+f 1489 1483 1487
+f 1484 1489 1490
+f 1484 1490 1486
+f 1491 1488 1485
+f 1491 1486 1490
+f 1491 1490 1488
+f 1492 1485 1486
+f 1492 1491 1485
+f 1492 1486 1491
+f 1490 1489 1488
+f 1489 1487 1488
+o Bunks
+v 0.550000 7.833548 1.810000
+v -1.486620 7.833548 1.810000
+v 0.550000 7.833548 1.910000
+v -1.486620 7.833548 1.910000
+v -1.486620 7.333548 1.810000
+v 0.550000 7.333548 1.810000
+v -1.486620 7.333548 1.910000
+v 0.550000 7.333548 1.910000
+v 0.550000 7.933548 1.810000
+v 0.550000 8.433548 1.810000
+v 0.550000 7.933548 1.910000
+v 0.550000 8.433548 1.910000
+v -1.486620 7.933548 1.810000
+v -1.486620 7.933548 1.910000
+v -1.486620 8.433548 1.810000
+v -1.486620 8.433548 1.910000
+v 0.550000 0.673548 1.810000
+v -1.486620 0.673548 1.810000
+v 0.550000 0.673548 1.910000
+v -1.486620 0.673548 1.910000
+v -1.486620 0.173548 1.810000
+v 0.550000 0.173548 1.810000
+v -1.486620 0.173548 1.910000
+v 0.550000 0.173548 1.910000
+v 0.550000 6.143548 1.810000
+v 0.550000 6.643548 1.810000
+v 0.550000 6.143548 1.910000
+v 0.550000 6.643548 1.910000
+v -1.486620 6.143548 1.810000
+v -1.486620 6.143548 1.910000
+v -1.486620 6.643548 1.810000
+v -1.486620 6.643548 1.910000
+v 0.550000 -4.696452 1.810000
+v -1.486620 -4.696452 1.810000
+v 0.550000 -4.696452 1.910000
+v -1.486620 -4.696452 1.910000
+v -1.486620 -5.196452 1.810000
+v 0.550000 -5.196452 1.810000
+v -1.486620 -5.196452 1.910000
+v 0.550000 -5.196452 1.910000
+v 0.550000 -4.596452 1.810000
+v 0.550000 -4.096452 1.810000
+v 0.550000 -4.596452 1.910000
+v 0.550000 -4.096452 1.910000
+v -1.486620 -4.596452 1.810000
+v -1.486620 -4.596452 1.910000
+v -1.486620 -4.096452 1.810000
+v -1.486620 -4.096452 1.910000
+v 0.530506 -7.836452 1.810000
+v -1.486620 -7.836452 1.810000
+v 0.530506 -7.836452 1.910000
+v -1.486620 -7.836452 1.910000
+v 0.362908 -8.336452 1.810000
+v -1.486620 -8.336452 1.810000
+v -1.486620 -8.336452 1.910000
+v 0.362908 -8.336452 1.910000
+v 0.550000 6.043548 1.810000
+v -1.486620 6.043548 1.810000
+v 0.550000 6.043548 1.910000
+v -1.486620 6.043548 1.910000
+v -1.486620 5.543548 1.810000
+v 0.550000 5.543548 1.810000
+v -1.486620 5.543548 1.910000
+v 0.550000 5.543548 1.910000
+v 0.550000 -6.486452 1.810000
+v -1.486620 -6.486452 1.810000
+v 0.550000 -6.486452 1.910000
+v -1.486620 -6.486452 1.910000
+v -1.486620 -6.986452 1.810000
+v 0.550000 -6.986452 1.810000
+v -1.486620 -6.986452 1.910000
+v 0.550000 -6.986452 1.910000
+v 0.550000 2.463548 1.810000
+v -1.486620 2.463548 1.810000
+v 0.550000 2.463548 1.910000
+v -1.486620 2.463548 1.910000
+v -1.486620 1.963548 1.810000
+v 0.550000 1.963548 1.810000
+v -1.486620 1.963548 1.910000
+v 0.550000 1.963548 1.910000
+v 0.550000 9.470070 1.810000
+v -1.486620 9.470070 1.810000
+v 0.550000 9.470070 1.910000
+v -1.486620 9.470070 1.910000
+v -1.486620 8.970070 1.810000
+v 0.550000 8.970070 1.810000
+v -1.486620 8.970070 1.910000
+v 0.550000 8.970070 1.910000
+v 0.550000 0.773548 1.810000
+v 0.550000 1.273548 1.810000
+v 0.550000 0.773548 1.910000
+v 0.550000 1.273548 1.910000
+v -1.486620 0.773548 1.810000
+v -1.486620 0.773548 1.910000
+v -1.486620 1.273548 1.810000
+v -1.486620 1.273548 1.910000
+v 0.550000 4.353548 1.810000
+v 0.550000 4.853548 1.810000
+v 0.550000 4.353548 1.910000
+v 0.550000 4.853548 1.910000
+v -1.486620 4.353548 1.810000
+v -1.486620 4.353548 1.910000
+v -1.486620 4.853548 1.810000
+v -1.486620 4.853548 1.910000
+v 0.550000 -6.386452 1.810000
+v 0.550000 -5.886452 1.810000
+v 0.550000 -6.386452 1.910000
+v 0.550000 -5.886452 1.910000
+v -1.486620 -6.386452 1.810000
+v -1.486620 -6.386452 1.910000
+v -1.486620 -5.886452 1.810000
+v -1.486620 -5.886452 1.910000
+v 0.550000 2.563548 1.810000
+v 0.550000 3.063548 1.810000
+v 0.550000 2.563548 1.910000
+v 0.550000 3.063548 1.910000
+v -1.486620 2.563548 1.810000
+v -1.486620 2.563548 1.910000
+v -1.486620 3.063548 1.810000
+v -1.486620 3.063548 1.910000
+v 0.550000 -1.016452 1.810000
+v 0.550000 -0.516452 1.810000
+v 0.550000 -1.016452 1.910000
+v 0.550000 -0.516452 1.910000
+v -1.486620 -1.016452 1.810000
+v -1.486620 -1.016452 1.910000
+v -1.486620 -0.516452 1.810000
+v -1.486620 -0.516452 1.910000
+v 0.550000 -1.116452 1.810000
+v -1.486620 -1.116452 1.810000
+v 0.550000 -1.116452 1.910000
+v -1.486620 -1.116452 1.910000
+v -1.486620 -1.616452 1.810000
+v 0.550000 -1.616452 1.810000
+v -1.486620 -1.616452 1.910000
+v 0.550000 -1.616452 1.910000
+v 0.550000 4.253548 1.810000
+v -1.486620 4.253548 1.810000
+v 0.550000 4.253548 1.910000
+v -1.486620 4.253548 1.910000
+v -1.486620 3.753548 1.810000
+v 0.550000 3.753548 1.810000
+v -1.486620 3.753548 1.910000
+v 0.550000 3.753548 1.910000
+v 0.550000 -2.906452 1.810000
+v -1.486620 -2.906452 1.810000
+v 0.550000 -2.906452 1.910000
+v -1.486620 -2.906452 1.910000
+v -1.486620 -3.406452 1.810000
+v 0.550000 -3.406452 1.810000
+v -1.486620 -3.406452 1.910000
+v 0.550000 -3.406452 1.910000
+v 0.550000 -2.806452 1.810000
+v 0.550000 -2.306452 1.810000
+v 0.550000 -2.806452 1.910000
+v 0.550000 -2.306452 1.910000
+v -1.486620 -2.806452 1.810000
+v -1.486620 -2.806452 1.910000
+v -1.486620 -2.306452 1.810000
+v -1.486620 -2.306452 1.910000
+v -1.486620 -9.526452 1.810000
+v -0.035974 -9.526452 1.810000
+v -1.486620 -9.526452 1.910000
+v -0.035974 -9.526452 1.910000
+v -1.486620 -9.026452 1.810000
+v 0.131623 -9.026452 1.810000
+v 0.131623 -9.026452 1.910000
+v -1.486620 -9.026452 1.910000
+v 0.550000 7.833548 2.610000
+v -1.486620 7.833548 2.610000
+v 0.550000 7.833548 2.710000
+v -1.486620 7.833548 2.710000
+v -1.486620 7.333548 2.610000
+v 0.550000 7.333548 2.610000
+v -1.486620 7.333548 2.710000
+v 0.550000 7.333548 2.710000
+v 0.550000 7.933548 2.610000
+v 0.550000 8.433548 2.610000
+v 0.550000 7.933548 2.710000
+v 0.550000 8.433548 2.710000
+v -1.486620 7.933548 2.610000
+v -1.486620 7.933548 2.710000
+v -1.486620 8.433548 2.610000
+v -1.486620 8.433548 2.710000
+v 0.550000 0.673548 2.610000
+v -1.486620 0.673548 2.610000
+v 0.550000 0.673548 2.710000
+v -1.486620 0.673548 2.710000
+v -1.486620 0.173548 2.610000
+v 0.550000 0.173548 2.610000
+v -1.486620 0.173548 2.710000
+v 0.550000 0.173548 2.710000
+v 0.550000 6.143548 2.610000
+v 0.550000 6.643548 2.610000
+v 0.550000 6.143548 2.710000
+v 0.550000 6.643548 2.710000
+v -1.486620 6.143548 2.610000
+v -1.486620 6.143548 2.710000
+v -1.486620 6.643548 2.610000
+v -1.486620 6.643548 2.710000
+v 0.550000 -4.696452 2.610000
+v -1.486620 -4.696452 2.610000
+v 0.550000 -4.696452 2.710000
+v -1.486620 -4.696452 2.710000
+v -1.486620 -5.196452 2.610000
+v 0.550000 -5.196452 2.610000
+v -1.486620 -5.196452 2.710000
+v 0.550000 -5.196452 2.710000
+v 0.550000 -4.596452 2.610000
+v 0.550000 -4.096452 2.610000
+v 0.550000 -4.596452 2.710000
+v 0.550000 -4.096452 2.710000
+v -1.486620 -4.596452 2.610000
+v -1.486620 -4.596452 2.710000
+v -1.486620 -4.096452 2.610000
+v -1.486620 -4.096452 2.710000
+v 0.530506 -7.836452 2.610000
+v -1.486620 -7.836452 2.610000
+v 0.530506 -7.836452 2.710000
+v -1.486620 -7.836452 2.710000
+v 0.362908 -8.336452 2.610000
+v -1.486620 -8.336452 2.610000
+v -1.486620 -8.336452 2.710000
+v 0.362908 -8.336452 2.710000
+v 0.550000 6.043548 2.610000
+v -1.486620 6.043548 2.610000
+v 0.550000 6.043548 2.710000
+v -1.486620 6.043548 2.710000
+v -1.486620 5.543548 2.610000
+v 0.550000 5.543548 2.610000
+v -1.486620 5.543548 2.710000
+v 0.550000 5.543548 2.710000
+v 0.550000 -6.486452 2.610000
+v -1.486620 -6.486452 2.610000
+v 0.550000 -6.486452 2.710000
+v -1.486620 -6.486452 2.710000
+v -1.486620 -6.986452 2.610000
+v 0.550000 -6.986452 2.610000
+v -1.486620 -6.986452 2.710000
+v 0.550000 -6.986452 2.710000
+v 0.550000 2.463548 2.610000
+v -1.486620 2.463548 2.610000
+v 0.550000 2.463548 2.710000
+v -1.486620 2.463548 2.710000
+v -1.486620 1.963548 2.610000
+v 0.550000 1.963548 2.610000
+v -1.486620 1.963548 2.710000
+v 0.550000 1.963548 2.710000
+v 0.550000 9.470070 2.610000
+v -1.486620 9.470070 2.610000
+v 0.550000 9.470070 2.710000
+v -1.486620 9.470070 2.710000
+v -1.486620 8.970070 2.610000
+v 0.550000 8.970070 2.610000
+v -1.486620 8.970070 2.710000
+v 0.550000 8.970070 2.710000
+v 0.550000 0.773548 2.610000
+v 0.550000 1.273548 2.610000
+v 0.550000 0.773548 2.710000
+v 0.550000 1.273548 2.710000
+v -1.486620 0.773548 2.610000
+v -1.486620 0.773548 2.710000
+v -1.486620 1.273548 2.610000
+v -1.486620 1.273548 2.710000
+v 0.550000 4.353548 2.610000
+v 0.550000 4.853548 2.610000
+v 0.550000 4.353548 2.710000
+v 0.550000 4.853548 2.710000
+v -1.486620 4.353548 2.610000
+v -1.486620 4.353548 2.710000
+v -1.486620 4.853548 2.610000
+v -1.486620 4.853548 2.710000
+v 0.550000 -6.386452 2.610000
+v 0.550000 -5.886452 2.610000
+v 0.550000 -6.386452 2.710000
+v 0.550000 -5.886452 2.710000
+v -1.486620 -6.386452 2.610000
+v -1.486620 -6.386452 2.710000
+v -1.486620 -5.886452 2.610000
+v -1.486620 -5.886452 2.710000
+v 0.550000 2.563548 2.610000
+v 0.550000 3.063548 2.610000
+v 0.550000 2.563548 2.710000
+v 0.550000 3.063548 2.710000
+v -1.486620 2.563548 2.610000
+v -1.486620 2.563548 2.710000
+v -1.486620 3.063548 2.610000
+v -1.486620 3.063548 2.710000
+v 0.550000 -1.016452 2.610000
+v 0.550000 -0.516452 2.610000
+v 0.550000 -1.016452 2.710000
+v 0.550000 -0.516452 2.710000
+v -1.486620 -1.016452 2.610000
+v -1.486620 -1.016452 2.710000
+v -1.486620 -0.516452 2.610000
+v -1.486620 -0.516452 2.710000
+v 0.550000 -1.116452 2.610000
+v -1.486620 -1.116452 2.610000
+v 0.550000 -1.116452 2.710000
+v -1.486620 -1.116452 2.710000
+v -1.486620 -1.616452 2.610000
+v 0.550000 -1.616452 2.610000
+v -1.486620 -1.616452 2.710000
+v 0.550000 -1.616452 2.710000
+v 0.550000 4.253548 2.610000
+v -1.486620 4.253548 2.610000
+v 0.550000 4.253548 2.710000
+v -1.486620 4.253548 2.710000
+v -1.486620 3.753548 2.610000
+v 0.550000 3.753548 2.610000
+v -1.486620 3.753548 2.710000
+v 0.550000 3.753548 2.710000
+v 0.550000 -2.906452 2.610000
+v -1.486620 -2.906452 2.610000
+v 0.550000 -2.906452 2.710000
+v -1.486620 -2.906452 2.710000
+v -1.486620 -3.406452 2.610000
+v 0.550000 -3.406452 2.610000
+v -1.486620 -3.406452 2.710000
+v 0.550000 -3.406452 2.710000
+v 0.550000 -2.806452 2.610000
+v 0.550000 -2.306452 2.610000
+v 0.550000 -2.806452 2.710000
+v 0.550000 -2.306452 2.710000
+v -1.486620 -2.806452 2.610000
+v -1.486620 -2.806452 2.710000
+v -1.486620 -2.306452 2.610000
+v -1.486620 -2.306452 2.710000
+v -1.486620 -9.526452 2.610000
+v -0.035974 -9.526452 2.610000
+v -1.486620 -9.526452 2.710000
+v -0.035974 -9.526452 2.710000
+v -1.486620 -9.026452 2.610000
+v 0.131623 -9.026452 2.610000
+v 0.131623 -9.026452 2.710000
+v -1.486620 -9.026452 2.710000
+f 1493 1494 1495
+f 1495 1494 1496
+f 1494 1493 1497
+f 1497 1493 1498
+f 1496 1494 1499
+f 1499 1494 1497
+f 1495 1496 1499
+f 1495 1499 1500
+f 1498 1493 1500
+f 1500 1493 1495
+f 1497 1498 1499
+f 1499 1498 1500
+f 1501 1502 1503
+f 1503 1502 1504
+f 1505 1501 1506
+f 1506 1501 1503
+f 1502 1507 1504
+f 1504 1507 1508
+f 1505 1502 1501
+f 1507 1502 1505
+f 1504 1506 1503
+f 1504 1508 1506
+f 1506 1508 1505
+f 1508 1507 1505
+f 1509 1510 1511
+f 1511 1510 1512
+f 1510 1509 1513
+f 1513 1509 1514
+f 1515 1512 1513
+f 1512 1510 1513
+f 1511 1512 1515
+f 1511 1515 1516
+f 1514 1509 1516
+f 1516 1509 1511
+f 1513 1514 1515
+f 1515 1514 1516
+f 1517 1518 1519
+f 1519 1518 1520
+f 1521 1517 1522
+f 1522 1517 1519
+f 1518 1523 1520
+f 1520 1523 1524
+f 1521 1518 1517
+f 1523 1518 1521
+f 1520 1522 1519
+f 1520 1524 1522
+f 1524 1523 1522
+f 1522 1523 1521
+f 1525 1526 1527
+f 1527 1526 1528
+f 1526 1525 1529
+f 1529 1525 1530
+f 1528 1526 1531
+f 1531 1526 1529
+f 1527 1528 1531
+f 1527 1531 1532
+f 1530 1525 1532
+f 1532 1525 1527
+f 1529 1530 1531
+f 1531 1530 1532
+f 1533 1534 1535
+f 1535 1534 1536
+f 1537 1533 1538
+f 1538 1533 1535
+f 1534 1539 1536
+f 1536 1539 1540
+f 1537 1534 1533
+f 1539 1534 1537
+f 1536 1538 1535
+f 1536 1540 1538
+f 1540 1539 1538
+f 1538 1539 1537
+f 1541 1542 1543
+f 1543 1542 1544
+f 1542 1545 1546
+f 1542 1541 1545
+f 1544 1542 1547
+f 1547 1542 1546
+f 1548 1544 1547
+f 1543 1544 1548
+f 1545 1541 1548
+f 1548 1541 1543
+f 1546 1545 1547
+f 1547 1545 1548
+f 1549 1550 1551
+f 1551 1550 1552
+f 1550 1549 1553
+f 1553 1549 1554
+f 1552 1550 1555
+f 1555 1550 1553
+f 1551 1552 1555
+f 1551 1555 1556
+f 1554 1549 1556
+f 1556 1549 1551
+f 1553 1554 1555
+f 1555 1554 1556
+f 1557 1558 1559
+f 1559 1558 1560
+f 1558 1557 1561
+f 1561 1557 1562
+f 1560 1558 1563
+f 1563 1558 1561
+f 1559 1560 1563
+f 1559 1563 1564
+f 1562 1557 1564
+f 1564 1557 1559
+f 1561 1562 1563
+f 1563 1562 1564
+f 1565 1566 1567
+f 1567 1566 1568
+f 1566 1565 1569
+f 1569 1565 1570
+f 1571 1568 1569
+f 1568 1566 1569
+f 1567 1568 1571
+f 1567 1571 1572
+f 1570 1565 1572
+f 1572 1565 1567
+f 1569 1570 1571
+f 1571 1570 1572
+f 1573 1574 1575
+f 1575 1574 1576
+f 1574 1573 1577
+f 1577 1573 1578
+f 1579 1576 1577
+f 1576 1574 1577
+f 1575 1576 1579
+f 1575 1579 1580
+f 1578 1573 1580
+f 1580 1573 1575
+f 1577 1578 1579
+f 1579 1578 1580
+f 1581 1582 1583
+f 1583 1582 1584
+f 1585 1581 1586
+f 1586 1581 1583
+f 1582 1587 1584
+f 1584 1587 1588
+f 1585 1582 1581
+f 1587 1582 1585
+f 1584 1586 1583
+f 1584 1588 1586
+f 1588 1587 1586
+f 1586 1587 1585
+f 1589 1590 1591
+f 1591 1590 1592
+f 1593 1589 1594
+f 1594 1589 1591
+f 1590 1595 1592
+f 1592 1595 1596
+f 1593 1590 1589
+f 1595 1590 1593
+f 1592 1594 1591
+f 1592 1596 1594
+f 1596 1595 1594
+f 1594 1595 1593
+f 1597 1598 1599
+f 1599 1598 1600
+f 1601 1597 1602
+f 1602 1597 1599
+f 1598 1603 1600
+f 1600 1603 1604
+f 1601 1598 1597
+f 1603 1598 1601
+f 1600 1602 1599
+f 1600 1604 1602
+f 1604 1603 1602
+f 1602 1603 1601
+f 1605 1606 1607
+f 1607 1606 1608
+f 1609 1605 1610
+f 1610 1605 1607
+f 1606 1611 1608
+f 1608 1611 1612
+f 1609 1606 1605
+f 1611 1606 1609
+f 1608 1610 1607
+f 1608 1612 1610
+f 1612 1611 1610
+f 1610 1611 1609
+f 1613 1614 1615
+f 1615 1614 1616
+f 1617 1613 1618
+f 1618 1613 1615
+f 1614 1619 1616
+f 1616 1619 1620
+f 1617 1614 1613
+f 1619 1614 1617
+f 1616 1618 1615
+f 1616 1620 1618
+f 1620 1619 1618
+f 1618 1619 1617
+f 1621 1622 1623
+f 1623 1622 1624
+f 1622 1621 1625
+f 1625 1621 1626
+f 1624 1622 1627
+f 1627 1622 1625
+f 1623 1624 1627
+f 1623 1627 1628
+f 1626 1621 1628
+f 1628 1621 1623
+f 1625 1626 1627
+f 1627 1626 1628
+f 1629 1630 1631
+f 1631 1630 1632
+f 1630 1629 1633
+f 1633 1629 1634
+f 1632 1630 1635
+f 1635 1630 1633
+f 1631 1632 1635
+f 1631 1635 1636
+f 1634 1629 1636
+f 1636 1629 1631
+f 1633 1634 1635
+f 1635 1634 1636
+f 1637 1638 1639
+f 1639 1638 1640
+f 1638 1637 1641
+f 1641 1637 1642
+f 1640 1638 1643
+f 1643 1638 1641
+f 1639 1640 1643
+f 1639 1643 1644
+f 1642 1637 1644
+f 1644 1637 1639
+f 1641 1642 1643
+f 1643 1642 1644
+f 1645 1646 1647
+f 1647 1646 1648
+f 1649 1645 1650
+f 1650 1645 1647
+f 1646 1651 1648
+f 1648 1651 1652
+f 1649 1646 1645
+f 1651 1646 1649
+f 1648 1650 1647
+f 1648 1652 1650
+f 1652 1651 1650
+f 1650 1651 1649
+f 1653 1654 1655
+f 1655 1654 1656
+f 1657 1654 1653
+f 1657 1658 1654
+f 1654 1658 1656
+f 1656 1658 1659
+f 1656 1660 1655
+f 1659 1660 1656
+f 1660 1657 1655
+f 1655 1657 1653
+f 1658 1657 1659
+f 1659 1657 1660
+f 1661 1662 1663
+f 1663 1662 1664
+f 1662 1661 1665
+f 1665 1661 1666
+f 1664 1662 1667
+f 1667 1662 1665
+f 1663 1664 1667
+f 1663 1667 1668
+f 1666 1661 1668
+f 1668 1661 1663
+f 1665 1666 1667
+f 1667 1666 1668
+f 1669 1670 1671
+f 1671 1670 1672
+f 1673 1669 1674
+f 1674 1669 1671
+f 1670 1675 1672
+f 1672 1675 1676
+f 1673 1670 1669
+f 1675 1670 1673
+f 1672 1674 1671
+f 1672 1676 1674
+f 1674 1676 1673
+f 1676 1675 1673
+f 1677 1678 1679
+f 1679 1678 1680
+f 1678 1677 1681
+f 1681 1677 1682
+f 1683 1680 1681
+f 1680 1678 1681
+f 1679 1680 1683
+f 1679 1683 1684
+f 1682 1677 1684
+f 1684 1677 1679
+f 1681 1682 1683
+f 1683 1682 1684
+f 1685 1686 1687
+f 1687 1686 1688
+f 1689 1685 1690
+f 1690 1685 1687
+f 1686 1691 1688
+f 1688 1691 1692
+f 1689 1686 1685
+f 1691 1686 1689
+f 1688 1690 1687
+f 1688 1692 1690
+f 1692 1691 1690
+f 1690 1691 1689
+f 1693 1694 1695
+f 1695 1694 1696
+f 1694 1693 1697
+f 1697 1693 1698
+f 1696 1694 1699
+f 1699 1694 1697
+f 1695 1696 1699
+f 1695 1699 1700
+f 1698 1693 1700
+f 1700 1693 1695
+f 1697 1698 1699
+f 1699 1698 1700
+f 1701 1702 1703
+f 1703 1702 1704
+f 1705 1701 1706
+f 1706 1701 1703
+f 1702 1707 1704
+f 1704 1707 1708
+f 1705 1702 1701
+f 1707 1702 1705
+f 1704 1706 1703
+f 1704 1708 1706
+f 1708 1707 1706
+f 1706 1707 1705
+f 1709 1710 1711
+f 1711 1710 1712
+f 1710 1713 1714
+f 1710 1709 1713
+f 1712 1710 1715
+f 1715 1710 1714
+f 1716 1712 1715
+f 1711 1712 1716
+f 1713 1709 1716
+f 1716 1709 1711
+f 1714 1713 1715
+f 1715 1713 1716
+f 1717 1718 1719
+f 1719 1718 1720
+f 1718 1717 1721
+f 1721 1717 1722
+f 1720 1718 1723
+f 1723 1718 1721
+f 1719 1720 1723
+f 1719 1723 1724
+f 1722 1717 1724
+f 1724 1717 1719
+f 1721 1722 1723
+f 1723 1722 1724
+f 1725 1726 1727
+f 1727 1726 1728
+f 1726 1725 1729
+f 1729 1725 1730
+f 1728 1726 1731
+f 1731 1726 1729
+f 1727 1728 1731
+f 1727 1731 1732
+f 1730 1725 1732
+f 1732 1725 1727
+f 1729 1730 1731
+f 1731 1730 1732
+f 1733 1734 1735
+f 1735 1734 1736
+f 1734 1733 1737
+f 1737 1733 1738
+f 1739 1736 1737
+f 1736 1734 1737
+f 1735 1736 1739
+f 1735 1739 1740
+f 1738 1733 1740
+f 1740 1733 1735
+f 1737 1738 1739
+f 1739 1738 1740
+f 1741 1742 1743
+f 1743 1742 1744
+f 1742 1741 1745
+f 1745 1741 1746
+f 1747 1744 1745
+f 1744 1742 1745
+f 1743 1744 1747
+f 1743 1747 1748
+f 1746 1741 1748
+f 1748 1741 1743
+f 1745 1746 1747
+f 1747 1746 1748
+f 1749 1750 1751
+f 1751 1750 1752
+f 1753 1749 1754
+f 1754 1749 1751
+f 1750 1755 1752
+f 1752 1755 1756
+f 1753 1750 1749
+f 1755 1750 1753
+f 1752 1754 1751
+f 1752 1756 1754
+f 1756 1755 1754
+f 1754 1755 1753
+f 1757 1758 1759
+f 1759 1758 1760
+f 1761 1757 1762
+f 1762 1757 1759
+f 1758 1763 1760
+f 1760 1763 1764
+f 1761 1758 1757
+f 1763 1758 1761
+f 1760 1762 1759
+f 1760 1764 1762
+f 1764 1763 1762
+f 1762 1763 1761
+f 1765 1766 1767
+f 1767 1766 1768
+f 1769 1765 1770
+f 1770 1765 1767
+f 1766 1771 1768
+f 1768 1771 1772
+f 1769 1766 1765
+f 1771 1766 1769
+f 1768 1770 1767
+f 1768 1772 1770
+f 1772 1771 1770
+f 1770 1771 1769
+f 1773 1774 1775
+f 1775 1774 1776
+f 1777 1773 1778
+f 1778 1773 1775
+f 1774 1779 1776
+f 1776 1779 1780
+f 1777 1774 1773
+f 1779 1774 1777
+f 1776 1778 1775
+f 1776 1780 1778
+f 1780 1779 1778
+f 1778 1779 1777
+f 1781 1782 1783
+f 1783 1782 1784
+f 1785 1781 1786
+f 1786 1781 1783
+f 1782 1787 1784
+f 1784 1787 1788
+f 1785 1782 1781
+f 1787 1782 1785
+f 1784 1786 1783
+f 1784 1788 1786
+f 1788 1787 1786
+f 1786 1787 1785
+f 1789 1790 1791
+f 1791 1790 1792
+f 1790 1789 1793
+f 1793 1789 1794
+f 1792 1790 1795
+f 1795 1790 1793
+f 1791 1792 1795
+f 1791 1795 1796
+f 1794 1789 1796
+f 1796 1789 1791
+f 1793 1794 1795
+f 1795 1794 1796
+f 1797 1798 1799
+f 1799 1798 1800
+f 1798 1797 1801
+f 1801 1797 1802
+f 1800 1798 1803
+f 1803 1798 1801
+f 1799 1800 1803
+f 1799 1803 1804
+f 1802 1797 1804
+f 1804 1797 1799
+f 1801 1802 1803
+f 1803 1802 1804
+f 1805 1806 1807
+f 1807 1806 1808
+f 1806 1805 1809
+f 1809 1805 1810
+f 1808 1806 1811
+f 1811 1806 1809
+f 1807 1808 1811
+f 1807 1811 1812
+f 1810 1805 1812
+f 1812 1805 1807
+f 1809 1810 1811
+f 1811 1810 1812
+f 1813 1814 1815
+f 1815 1814 1816
+f 1817 1813 1818
+f 1818 1813 1815
+f 1814 1819 1816
+f 1816 1819 1820
+f 1817 1814 1813
+f 1819 1814 1817
+f 1816 1818 1815
+f 1816 1820 1818
+f 1820 1819 1818
+f 1818 1819 1817
+f 1821 1822 1823
+f 1823 1822 1824
+f 1825 1822 1821
+f 1825 1826 1822
+f 1822 1826 1824
+f 1824 1826 1827
+f 1824 1828 1823
+f 1827 1828 1824
+f 1828 1825 1823
+f 1823 1825 1821
+f 1826 1825 1827
+f 1827 1825 1828
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/tunnel.obj 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/tunnel.obj
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/models/3d/tunnel.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/models/3d/tunnel.obj	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,5267 @@
+# Tunnel
+# (C) Linux Studio Plugins Project
+o Road
+v -39.099998 -83.899948 1.357277
+v -43.335400 -83.899948 0.999997
+v -43.335400 -93.899948 0.999996
+v -39.099998 -93.899948 1.357276
+v -43.335400 -93.899948 -0.000004
+v -43.335400 -83.899948 -0.000003
+v -34.875164 -93.899948 -0.000004
+v -34.875164 -93.899948 0.999996
+v -34.875164 -83.899948 0.999997
+v -38.273834 -69.469070 1.357277
+v -42.314770 -67.645393 0.999997
+v -35.934418 -56.586098 1.357278
+v -39.791519 -54.567635 0.999998
+v -32.290371 -45.073463 1.357278
+v -36.392212 -43.938759 0.999998
+v -32.086796 -34.290203 0.999999
+v -27.550304 -34.753593 1.357279
+v -27.040771 -25.518631 0.999999
+v -21.922840 -25.448933 1.357279
+v -21.422840 -17.511364 1.000000
+v -15.616597 -16.981907 1.357280
+v -13.330364 -7.813436 1.000000
+v -6.512965 -6.688622 1.357280
+v 17.080997 23.456251 1.000001
+v 22.376526 23.147020 1.357281
+v 24.432735 32.900566 1.000002
+v 28.580629 31.487261 1.357282
+v 28.860849 40.401428 1.000002
+v 32.478096 38.169739 1.357282
+v 35.546139 45.219048 1.357282
+v 31.712219 47.076637 1.000003
+v 33.293617 52.420547 1.000003
+v 37.603481 52.253235 1.357283
+v 34.458080 58.976471 1.000003
+v 38.715031 58.927162 1.357283
+v 34.864601 66.100052 1.000003
+v 39.099998 66.100052 1.357283
+v -42.314770 -67.645393 -0.000003
+v -39.791519 -54.567635 -0.000002
+v -36.392212 -43.938759 -0.000002
+v -32.086796 -34.290203 -0.000001
+v -27.040771 -25.518631 -0.000001
+v -21.422838 -17.511364 0.000000
+v -13.330363 -7.813437 0.000000
+v 17.080997 23.456251 0.000001
+v 24.432735 32.900566 0.000002
+v 28.860849 40.401428 0.000002
+v 31.712219 47.076637 0.000002
+v 33.293617 52.420547 0.000003
+v 34.458080 58.976471 0.000003
+v 34.864601 66.100052 0.000003
+v -34.875164 -83.899948 -0.000003
+v -34.053341 -69.757607 0.999997
+v -31.741240 -57.234169 0.999998
+v -28.157213 -46.105286 0.999998
+v -23.501637 -36.145500 0.999999
+v -17.961752 -27.140450 0.999999
+v -11.721457 -18.891821 1.000000
+v -2.640233 -8.750490 1.000000
+v 17.660976 11.589363 1.000001
+v 26.762053 21.841171 1.000001
+v 33.171841 30.826391 1.000002
+v 37.177929 38.157074 1.000002
+v 39.618191 44.058075 1.000002
+v 41.818802 51.747261 1.000003
+v 42.939091 58.692276 1.000003
+v 43.324837 66.100052 1.000003
+v 39.099998 76.100052 1.357284
+v 34.864601 76.100052 1.000004
+v 34.864601 76.100052 0.000004
+v -34.053341 -69.757607 -0.000003
+v -31.741240 -57.234169 -0.000002
+v -28.157213 -46.105286 -0.000002
+v -23.501637 -36.145500 -0.000001
+v -17.961752 -27.140450 -0.000001
+v -11.721457 -18.891821 0.000000
+v -2.640233 -8.750490 0.000000
+v 17.660976 11.589363 0.000001
+v 26.762053 21.841171 0.000001
+v 33.171841 30.826391 0.000002
+v 37.177929 38.157074 0.000002
+v 39.618191 44.058075 0.000002
+v 41.818802 51.747261 0.000003
+v 42.939091 58.692276 0.000003
+v 43.324837 66.100052 0.000003
+v 43.324837 76.100052 1.000004
+v 43.324837 76.100052 0.000004
+f 1 2 3
+f 1 3 4
+f 5 3 2
+f 5 2 6
+f 5 4 3
+f 7 8 4
+f 5 7 4
+f 1 4 8
+f 9 1 8
+f 10 11 2
+f 10 2 1
+f 12 13 11
+f 12 11 10
+f 14 15 13
+f 14 13 12
+f 16 15 14
+f 17 16 14
+f 18 16 17
+f 19 18 17
+f 20 18 19
+f 21 20 19
+f 22 20 21
+f 23 22 21
+f 24 22 23
+f 25 24 23
+f 26 24 25
+f 27 26 25
+f 28 26 27
+f 29 28 27
+f 30 31 28
+f 30 28 29
+f 32 31 30
+f 33 32 30
+f 34 32 33
+f 35 34 33
+f 36 34 35
+f 37 36 35
+f 2 11 6
+f 11 38 6
+f 11 13 38
+f 13 39 38
+f 13 15 39
+f 15 40 39
+f 15 16 40
+f 16 41 40
+f 16 18 41
+f 18 42 41
+f 18 20 42
+f 20 43 42
+f 20 22 43
+f 22 44 43
+f 22 24 44
+f 24 45 44
+f 24 26 45
+f 26 46 45
+f 26 28 46
+f 28 47 46
+f 28 31 47
+f 31 48 47
+f 31 32 48
+f 32 49 48
+f 32 34 49
+f 34 50 49
+f 34 36 50
+f 36 51 50
+f 8 7 9
+f 9 7 52
+f 10 1 9
+f 53 10 9
+f 12 10 53
+f 54 12 53
+f 14 12 54
+f 55 14 54
+f 17 14 55
+f 56 17 55
+f 19 17 56
+f 57 19 56
+f 21 19 57
+f 58 21 57
+f 23 21 58
+f 59 23 58
+f 60 23 59
+f 25 23 60
+f 61 25 60
+f 27 25 61
+f 62 27 61
+f 29 27 62
+f 63 29 62
+f 30 29 63
+f 64 30 63
+f 33 30 64
+f 65 33 64
+f 35 33 65
+f 66 35 65
+f 37 35 66
+f 67 37 66
+f 68 69 36
+f 68 36 37
+f 36 69 51
+f 69 70 51
+f 71 53 52
+f 52 53 9
+f 72 54 71
+f 71 54 53
+f 73 55 72
+f 72 55 54
+f 74 56 73
+f 73 56 55
+f 75 57 74
+f 74 57 56
+f 76 58 75
+f 75 58 57
+f 77 59 76
+f 76 59 58
+f 78 60 77
+f 77 60 59
+f 79 61 78
+f 78 61 60
+f 80 62 79
+f 79 62 61
+f 81 63 80
+f 80 63 62
+f 82 64 81
+f 81 64 63
+f 83 65 82
+f 82 65 64
+f 84 66 83
+f 83 66 65
+f 85 67 84
+f 84 67 66
+f 86 68 37
+f 86 37 67
+f 68 70 69
+f 86 87 68
+f 87 70 68
+f 86 67 85
+f 87 86 85
+f 6 52 7
+f 6 7 5
+f 71 52 6
+f 38 72 71
+f 38 71 6
+f 39 72 38
+f 40 73 72
+f 40 72 39
+f 41 74 73
+f 41 73 40
+f 42 75 74
+f 42 74 41
+f 43 76 75
+f 43 75 42
+f 44 77 76
+f 44 78 77
+f 44 76 43
+f 45 79 78
+f 45 78 44
+f 46 80 79
+f 46 79 45
+f 47 81 80
+f 47 80 46
+f 48 82 81
+f 48 81 47
+f 49 83 82
+f 49 82 48
+f 50 84 83
+f 50 83 49
+f 51 84 50
+f 51 85 84
+f 87 85 51
+f 70 87 51
+o Base
+v -33.595264 -76.653801 2.769342
+v -33.240063 -69.813988 1.357277
+v -34.061005 -83.899948 1.357277
+v -33.912624 -83.899948 1.913199
+v -31.889658 -62.853821 2.992295
+v -30.933481 -57.361008 1.357278
+v -32.902901 -69.216080 2.992295
+v -30.452858 -56.297928 3.820573
+v -30.337324 -55.146904 4.628740
+v -30.391121 -56.314423 2.992296
+v -28.697746 -50.707108 2.992296
+v -27.361475 -46.307076 1.357278
+v -28.758287 -50.686653 3.820573
+v -30.845259 -51.657043 6.930243
+v -32.183640 -54.628967 7.280003
+v -33.602570 -54.230927 8.035876
+v -42.253777 -60.619209 3.026721
+v -43.352406 -67.371124 3.026720
+v -43.127869 -67.584854 1.390040
+v -40.599434 -54.439804 1.390041
+v -37.723911 -49.908165 6.953256
+v -36.752720 -53.347229 8.046501
+v -38.176346 -52.947861 7.300217
+v -39.308716 -52.630203 6.133935
+v -40.573463 -53.360733 3.026721
+v -40.039204 -52.425285 4.661465
+v -40.506569 -53.378769 3.854565
+v -38.383610 -48.104424 5.427536
+v -37.968513 -48.241730 6.133935
+v -38.688816 -48.003471 4.661465
+v -38.876617 -47.941353 3.854565
+v -38.942394 -47.919594 3.026721
+v -37.190456 -43.746635 1.390041
+v -21.558064 -34.737152 3.820574
+v -22.722570 -36.417068 1.357279
+v -23.624680 -38.435768 4.093196
+v -21.502619 -34.768921 2.992297
+v -20.700546 -32.896500 4.628741
+v -21.725136 -34.641407 4.628741
+v -21.999731 -34.484047 5.396884
+v -21.342510 -32.510437 6.106110
+v -18.769096 -30.285404 2.992297
+v -17.199526 -27.469343 1.357279
+v -18.822758 -30.250704 3.820574
+v -18.984459 -30.146143 4.628741
+v -19.250223 -29.974289 5.396884
+v -19.613506 -29.739374 6.106110
+v -30.857918 -30.976673 5.427536
+v -28.685570 -28.094538 6.133936
+v -30.475765 -31.189085 6.133936
+v -29.335745 -27.703541 4.661466
+v -31.138899 -30.820496 4.661466
+v -31.311794 -30.724398 3.854566
+v -31.372349 -30.690739 3.026722
+v -32.871346 -34.036346 1.390042
+v -27.810120 -25.210543 1.390042
+v -28.799198 -26.312412 3.026722
+v -28.740314 -26.348917 3.854566
+v -25.591206 -22.465111 5.427537
+v -25.230143 -22.711670 6.133937
+v -25.785740 -24.879105 6.953257
+v -8.930310 -17.145164 3.820574
+v -7.146720 -14.816024 4.628742
+v -8.881850 -17.186817 2.992297
+v -9.076340 -17.019644 4.628742
+v -9.316348 -16.813343 5.396885
+v -7.705909 -14.317560 6.106111
+v -9.644425 -16.531343 6.106110
+v -4.354001 -12.130222 2.992298
+v -1.892217 -9.146983 1.357280
+v -10.971220 -19.261620 1.357280
+v -4.400815 -12.086725 3.820575
+v -4.541883 -11.955653 4.628742
+v -4.773736 -11.740227 5.396885
+v -5.090665 -11.445754 6.106111
+v -7.171151 -11.292796 7.582979
+v -8.578147 -13.540041 7.280005
+v -9.678226 -12.559424 8.035878
+v -5.484874 -11.079476 6.738996
+v -16.071993 -12.008215 6.953258
+v -14.668476 -8.111085 4.661467
+v -14.102136 -8.615924 6.133937
+v -13.224225 -9.398499 7.300219
+v -12.120504 -10.382362 8.046503
+v -18.226530 -12.735443 5.427537
+v -17.890083 -13.014657 6.133937
+v -18.473909 -12.530147 4.661467
+v -18.626125 -12.403824 3.854567
+v -18.679438 -12.359579 3.026722
+v -22.178535 -17.159801 1.390043
+v -14.074649 -7.423165 1.390043
+v 3.339558 -4.111727 3.820575
+v 18.374805 11.157310 1.357281
+v -14.564511 -7.593918 3.026723
+v -14.512909 -7.640146 3.854567
+v 3.870987 -1.216410 6.930246
+v 7.007294 2.475274 7.280005
+v 7.826262 1.641830 6.106111
+v 13.550139 5.970161 3.820575
+v 10.687542 5.496162 6.930246
+v 12.060274 7.464479 7.280006
+v 10.059108 6.131608 7.582980
+v 12.505345 7.018079 6.738996
+v 8.905085 16.245148 3.026724
+v 1.288921 8.294733 4.661468
+v -6.573220 0.863807 3.026723
+v 16.272785 23.768663 1.390044
+v 30.531719 24.997469 2.992299
+v 34.070648 30.731798 1.357282
+v 27.620306 21.610939 1.357281
+v 30.480061 25.035086 3.820576
+v 32.861061 28.817465 4.628744
+v 29.972862 27.212751 6.930247
+v 30.068562 25.334745 5.396887
+v 29.718845 25.589418 6.106112
+v 33.690575 29.631147 2.992300
+v 33.636623 29.665396 3.820576
+v 35.805378 33.293617 3.820577
+v 34.984035 33.754196 6.106112
+v 35.361374 33.542603 5.396887
+v 33.464542 32.597610 6.930247
+v 23.793499 33.857468 3.026725
+v 24.428778 34.333809 4.661469
+v 23.851091 33.818954 3.854569
+v 39.921040 41.800308 2.992300
+v 40.537411 44.216873 1.357282
+v 38.095623 38.197311 1.357282
+v 39.387642 42.009483 5.396888
+v 40.338661 45.970192 6.106113
+v 41.052044 45.741623 4.628745
+v 39.682281 41.893936 4.628745
+v 26.578926 37.197533 5.427539
+v 25.063675 33.918465 6.133939
+v 41.044453 44.894196 2.992300
+v 39.861549 41.823639 3.820577
+v 26.301247 37.359512 4.661469
+v 26.130384 37.459183 3.854569
+v 26.070539 37.494095 3.026725
+v 23.581285 33.096291 1.390045
+v 27.982279 40.468826 1.390045
+v 42.210266 48.788757 2.992300
+v 42.719658 52.065811 1.357283
+v 42.148495 48.805122 3.820577
+v 41.962353 48.854424 4.628745
+v 41.656414 48.935455 5.396888
+v 41.238216 49.046227 6.106113
+v 42.729328 52.089806 4.628745
+v 30.184902 44.425392 5.427540
+v 31.850613 45.411140 6.953260
+v 30.588669 44.257668 6.133940
+v 41.998741 52.255852 6.106113
+v 30.902388 47.990959 3.026725
+v 29.705357 44.624596 3.854569
+v 30.823658 47.008583 1.390045
+v 31.456196 48.816109 4.661469
+v 30.967976 47.968643 3.854569
+v 44.302956 62.416214 2.769348
+v 44.138996 66.100052 1.357283
+v 43.776035 58.868240 1.357283
+v 44.287376 66.100052 1.913205
+v 44.374638 66.100052 2.482125
+v 44.399689 66.100052 3.057275
+v 44.307663 62.415977 3.057275
+v 44.296741 62.416527 3.345051
+v 44.362206 66.100052 3.631820
+v 31.967182 50.506706 4.661469
+v 32.178703 48.584618 6.133940
+v 44.270226 62.417862 3.631820
+v 44.228188 62.419983 3.916732
+v 44.262611 66.100052 4.198942
+v 44.170757 62.422882 4.198942
+v 31.776915 50.560791 3.854569
+v 44.098099 62.426552 4.477612
+v 44.102077 66.100052 4.751922
+v 44.010426 62.430977 4.751922
+v 31.710274 50.579735 3.026725
+v 32.410187 52.235428 1.390046
+v 43.908005 62.436142 5.021055
+v 43.882507 66.100052 5.284217
+v 43.791134 62.442047 5.284217
+v 43.660160 62.448654 5.540632
+v 43.606491 66.100052 5.789541
+v 33.896778 64.285088 4.133164
+v 34.072578 62.496025 4.958559
+v 33.973621 62.501732 4.688143
+v 33.889477 62.506584 4.412740
+v 33.820393 62.510574 4.133164
+v 34.044525 66.100052 4.591288
+v 34.246990 66.100052 5.130328
+v 33.901733 66.100052 4.033465
+v 33.842888 64.286629 3.850248
+v 33.820301 66.100052 3.463461
+v 33.804443 64.287727 3.564827
+v 33.781551 64.288383 3.277747
+v 33.801182 66.100052 2.888032
+v 33.774284 64.288589 2.989861
+v 33.948067 62.503204 1.390046
+v 34.050442 66.100052 1.390046
+v 33.844582 66.100052 2.314011
+v 33.926857 66.100052 1.847356
+v -33.956985 -80.214539 4.477607
+v -33.825363 -83.899948 2.482119
+v -33.800308 -83.899948 3.057268
+v -33.837795 -83.899948 3.631814
+v -33.937389 -83.899948 4.198936
+v -34.097923 -83.899948 4.751915
+v -34.044727 -80.211983 4.751915
+v -34.147236 -80.209000 5.021048
+v -34.317493 -83.899948 5.284210
+v -34.264206 -80.205597 5.284210
+v -34.395290 -80.201775 5.540625
+v -34.593506 -83.899948 5.789534
+v -34.540104 -80.197556 5.789534
+v -33.858639 -72.491753 5.425816
+v -33.818176 -68.457619 6.106108
+v -33.075642 -68.556595 4.628740
+v -33.538910 -72.522324 4.659629
+v -34.293613 -72.450157 6.132375
+v -33.156788 -65.557831 5.759989
+v -33.637341 -65.479698 6.433112
+v -32.285099 -58.671120 6.433112
+v -31.058590 -54.944572 6.106109
+v -31.811249 -58.782936 5.759989
+v -42.051792 -63.990761 5.789318
+v -41.567020 -64.070122 6.459266
+v -42.311623 -67.325462 6.133935
+v -30.461046 -53.445786 5.877357
+v -28.940718 -50.625015 4.628740
+v -29.650410 -50.385223 6.106109
+v -29.240553 -50.523705 5.396883
+v -27.930765 -48.530518 2.992296
+v -27.945499 -48.525108 3.407677
+v -27.990753 -48.508499 3.820573
+v -40.574932 -56.598030 5.789319
+v -40.096962 -56.711372 6.459267
+v -28.672350 -47.638062 6.106109
+v -31.969250 -49.809921 7.942623
+v -31.232576 -49.214546 7.715864
+v -33.299755 -47.849098 8.299969
+v -30.735100 -47.810394 7.715864
+v -32.244881 -45.003952 8.299970
+v -25.406061 -42.358170 2.715266
+v -25.645298 -42.868858 3.407677
+v -25.689301 -42.849174 3.820573
+v -35.631676 -48.797951 7.954945
+v -28.662006 -44.421196 7.280004
+v -27.233141 -44.034103 6.106109
+v -28.156618 -46.293686 6.106109
+v -35.876633 -47.937927 7.731475
+v -26.490898 -42.335312 6.106109
+v -35.356945 -46.456131 7.731476
+v -27.354204 -39.734043 7.715865
+v -24.923668 -39.027534 6.106109
+v -30.270491 -40.312160 8.299970
+v -28.620808 -36.858002 8.299970
+v -23.832689 -37.553825 5.640734
+v -24.536516 -39.220596 5.396884
+v -24.428955 -36.456978 6.930244
+v -38.185860 -45.773590 3.441990
+v -32.149986 -40.506050 8.046501
+v -33.161335 -42.885223 8.046501
+v -33.890358 -40.799896 7.300218
+v -26.538605 -38.063305 7.715865
+v -38.203190 -45.767418 3.026721
+v -31.339062 -38.717545 8.046501
+v -26.407434 -36.691414 7.942624
+v -24.653770 -33.458031 7.942624
+v -23.606789 -31.148767 8.035877
+v -22.343866 -31.908253 7.280004
+v -25.007973 -30.306135 8.299971
+v -17.885714 -28.942484 2.992297
+v -17.898760 -28.933756 3.407678
+v -21.478678 -30.496189 7.280004
+v -28.572924 -30.218010 7.300218
+v -27.677702 -28.700640 7.300218
+v -29.813761 -33.923946 7.731476
+v -20.394543 -27.511341 7.715865
+v -32.183418 -32.325573 3.854566
+v -32.228325 -32.301640 3.441991
+v -32.244560 -32.292988 3.026722
+v -25.534380 -27.538761 7.954946
+v -26.410597 -29.462639 8.046502
+v -23.774031 -24.829662 7.954947
+v -27.487123 -25.454046 5.549903
+v -25.856684 -22.283823 4.661466
+v -23.612247 -23.686966 7.731477
+v -21.567987 -24.958908 8.299971
+v -17.649233 -22.286991 8.035877
+v -18.559874 -23.528236 8.035877
+v -19.758226 -22.395578 8.299971
+v -22.696203 -22.368004 7.731477
+v -9.830961 -18.301908 2.992297
+v -9.842965 -18.291794 3.407678
+v -16.046478 -20.179508 8.035877
+v -15.680564 -22.121206 7.280005
+v -15.152190 -19.042150 8.035877
+v -16.511320 -18.124432 8.299971
+v -23.356562 -20.047688 6.133937
+v -24.194992 -19.574823 3.854566
+v -22.400312 -18.744444 6.133937
+v -26.020037 -22.172274 3.854566
+v -24.236240 -19.545025 3.441991
+v -24.251150 -19.534252 3.026722
+v -20.720964 -16.536499 6.133937
+v -20.629953 -18.347326 7.300219
+v -9.558574 -14.649549 7.280005
+v -17.421791 -15.416516 7.731477
+v -14.673399 -15.858471 8.299971
+v -19.786032 -15.347582 6.133937
+v -16.482260 -14.271585 7.731477
+v -15.477727 -13.859237 7.954947
+v -3.034441 -10.722901 2.992298
+v -3.045845 -10.712115 3.407679
+v -20.490999 -14.697372 3.854567
+v -20.530809 -14.665678 3.441992
+v -20.545200 -14.654221 3.026722
+v -9.601704 -10.855151 8.269210
+v -10.898738 -11.471453 8.299971
+v -10.217463 -10.298148 8.293625
+v -3.438532 -8.763641 6.835933
+v 0.828303 -6.726991 2.992298
+v 0.665391 -4.966663 6.537519
+v 2.674713 -3.444852 6.106111
+v 2.980155 -3.751226 5.396885
+v 2.294794 -3.063773 6.738996
+v 0.459909 -4.762918 6.835933
+v 3.791563 -2.853432 5.519673
+v 3.203604 -3.975358 4.628743
+v -2.315459 0.840152 7.792298
+v -2.358099 -1.259162 8.237566
+v -5.148631 -1.664670 7.667420
+v 3.496351 2.607165 8.269211
+v 5.974400 3.526426 8.035879
+v 4.828429 4.692656 8.299972
+v 2.913920 3.198931 8.293625
+v 12.306901 5.542161 5.519673
+v 12.885276 6.637013 6.106111
+v 13.414182 6.106525 4.628743
+v 13.190726 6.330649 5.396886
+v 16.096123 8.439835 2.992299
+v 5.938392 6.945514 8.237566
+v 3.681280 5.860083 8.046503
+v 6.519421 6.355159 8.299972
+v 16.084938 8.450848 3.407680
+v 16.050589 8.484671 3.820575
+v 5.371339 7.521667 8.046504
+v 15.575709 9.668465 6.397789
+v 12.985216 10.109665 7.942626
+v 17.244566 13.185810 7.487402
+v 19.231497 13.139297 6.106112
+v 16.896116 11.196751 6.537519
+v 20.185448 14.671608 6.537519
+v 20.906876 13.836157 4.628743
+v 10.508462 15.352833 6.953259
+v 12.599459 13.992739 8.188007
+v 10.038722 12.649153 7.921406
+v 12.857886 17.161428 7.300220
+v 22.014786 20.159147 8.035879
+v 21.939253 17.832695 7.280006
+v 19.758095 17.604609 8.035879
+v 26.124994 20.943987 6.106112
+v 25.533310 19.058992 4.628744
+v 24.773504 19.859606 6.537520
+v 29.196953 23.207769 2.992299
+v 29.184475 23.217295 3.407680
+v 29.146156 23.246542 3.820576
+v 30.324400 25.148439 4.628744
+v 12.591346 20.083912 3.026724
+v 25.733110 22.315123 7.280006
+v 27.352001 22.470928 6.106112
+v 28.154358 23.500448 6.106112
+v 17.751175 24.290567 6.133939
+v 17.509832 22.219860 7.300220
+v 15.595756 21.838343 6.133939
+v 21.402561 25.729052 7.731479
+v 24.294222 25.502375 8.299973
+v 21.919167 22.570917 8.299973
+v 18.931776 25.688833 6.133939
+v 20.852438 28.779207 5.427539
+v 21.198196 28.511606 6.133939
+v 31.545074 27.912024 5.877360
+v 31.256355 29.867250 7.280007
+v 32.234180 29.227564 6.106112
+v 22.544682 27.170340 7.731479
+v 23.644310 27.769228 7.954948
+v 18.344999 26.479658 3.854568
+v 20.598215 28.975962 4.661469
+v 20.441786 29.097029 3.854568
+v 18.305796 26.512102 3.441993
+v 18.291624 26.523829 3.026724
+v 29.445984 29.338121 7.942627
+v 30.023109 30.674032 8.035880
+v 28.654852 31.569139 8.299973
+v 33.792240 30.997381 5.519674
+v 35.637421 33.387802 4.628744
+v 21.580612 29.624495 5.549906
+v 25.797230 30.728254 7.954949
+v 26.047859 33.274612 7.300221
+v 27.285187 32.465164 8.046505
+v 31.162386 31.972525 7.942627
+v 37.138927 35.643326 2.992300
+v 23.310200 31.996901 5.549906
+v 23.142706 29.852564 6.953259
+v 29.614285 33.777626 8.288293
+v 36.027351 35.682808 6.106112
+v 27.635117 34.445831 7.731479
+v 30.065004 34.888275 8.272806
+v 39.152237 39.925552 2.992300
+v 27.031477 34.819550 7.300221
+v 26.956585 36.977234 6.133939
+v 30.055216 36.694641 8.099892
+v 31.898333 36.440369 8.291826
+v 38.038147 39.882698 6.106112
+v 38.984882 42.167427 6.106113
+v 27.994102 38.823975 6.133939
+v 38.588490 44.442162 7.280007
+v 39.225906 46.326714 7.280007
+v 26.937567 39.028191 3.026725
+v 37.922348 44.679459 7.715868
+v 37.822487 46.776367 8.035881
+v 35.598869 43.734406 8.269213
+v 35.823540 41.871994 8.090414
+v 33.951550 41.905640 8.293627
+v 29.807137 42.463982 6.133940
+v 35.844303 44.908195 8.285894
+v 36.265423 47.275246 8.299973
+v 39.684845 47.824409 7.280007
+v 42.977707 52.024666 2.992301
+v 39.006149 48.022964 7.715868
+v 28.739305 42.596863 3.026725
+v 33.943554 46.324997 7.954949
+v 33.298691 48.225777 7.300221
+v 34.706760 47.774635 8.046505
+v 43.591187 55.387413 2.992301
+v 37.261257 49.313789 8.285894
+v 37.733158 50.362175 8.269213
+v 39.341076 50.903862 7.908526
+v 31.173632 46.790398 5.549907
+v 29.888029 44.548714 4.661469
+v 42.488514 54.426903 6.002295
+v 34.978146 49.572357 7.954949
+v 38.100239 51.865738 8.269213
+v 44.188988 60.615639 2.769348
+v 44.193287 60.615311 2.913277
+v 44.193684 60.615280 3.057275
+v 37.147686 53.773125 8.244855
+v 38.929775 54.897957 8.242157
+v 32.765133 51.140114 5.906210
+v 38.567749 57.106209 8.299409
+v 39.955147 55.499588 8.022831
+v 33.877583 55.577492 6.081305
+v 33.527874 53.617485 6.133940
+v 33.100616 53.710281 5.427540
+v 32.351505 53.061890 3.026725
+v 42.669884 64.286858 6.896687
+v 43.277302 66.100052 6.261928
+v 42.898819 66.100052 6.695807
+v 42.475517 66.100052 7.086061
+v 43.515472 62.455956 5.789541
+v 42.452999 64.292290 7.086061
+v 42.226154 64.297966 7.263370
+v 42.012394 66.100052 7.428092
+v 41.990017 64.303886 7.428092
+v 41.071762 61.439514 7.854597
+v 40.805557 61.457458 7.962940
+v 40.533875 61.475777 8.056633
+v 39.876575 66.100052 8.242800
+v 41.514904 66.100052 7.717865
+v 40.988926 66.100052 7.951967
+v 40.440659 66.100052 8.127636
+v 33.021030 56.419731 3.026726
+v 33.648342 59.061768 1.390046
+v 32.786472 53.778511 4.661469
+v 34.583035 59.972939 6.208525
+v 34.455170 62.473961 5.731987
+v 34.610016 62.465027 5.974650
+v 36.427814 64.212715 7.592604
+v 38.156425 66.100052 8.215332
+v 38.727680 66.100052 8.286908
+v 37.596306 66.100052 8.082216
+v 37.053925 66.100052 7.889132
+v 36.535690 66.100052 7.638354
+v 36.182377 64.219734 7.442144
+v 36.047707 66.100052 7.332841
+v 35.945469 64.226509 7.278568
+v 35.717789 64.233017 7.102360
+v 35.595734 66.100052 6.976197
+v 35.185108 66.100052 6.572622
+v 33.578445 60.785110 2.752873
+v 33.703796 62.517296 2.752873
+v 33.572861 60.785591 3.040780
+v 33.573704 60.785522 2.896786
+v 33.575912 60.785332 3.184749
+v -33.891247 -78.414268 4.477607
+v -33.590561 -76.654083 3.057269
+v -35.494003 -82.021301 6.896680
+v -34.922699 -83.899948 6.261921
+v -35.301178 -83.899948 6.695800
+v -35.724480 -83.899948 7.086054
+v -35.710934 -82.018166 7.086054
+v -35.937828 -82.014877 7.263363
+v -36.187607 -83.899948 7.428085
+v -36.174011 -82.011467 7.428085
+v -36.685093 -83.899948 7.717859
+v -37.211075 -83.899948 7.951961
+v -33.720089 -74.560966 4.675050
+v -33.134979 -71.188065 3.008539
+v -36.225586 -77.963020 7.538318
+v -36.475845 -77.951294 7.680301
+v -36.733440 -77.939232 7.808465
+v -35.237068 -70.302376 7.289563
+v -34.976406 -68.303230 7.280003
+v -35.940956 -70.221901 7.723254
+v -36.437183 -68.108513 8.035875
+v -32.342846 -64.223907 4.429686
+v -31.952410 -62.841743 3.820572
+v -32.624565 -64.173920 5.209655
+v -34.934673 -66.783302 7.399290
+v -35.650578 -66.677444 7.807085
+v -38.057880 -67.892479 8.299969
+v -31.682350 -60.847282 4.429686
+v -31.962132 -60.787384 5.209655
+v -30.906002 -58.181610 3.614596
+v -35.059090 -63.107170 7.807085
+v -30.922476 -57.580833 4.429687
+v -40.027012 -65.970657 7.821481
+v -39.680244 -67.676216 8.046501
+v -41.145859 -67.480858 7.300217
+v -37.357876 -63.374458 8.299969
+v -40.745464 -65.864021 7.418395
+v -36.944973 -61.180435 8.299969
+v -32.859612 -56.484688 7.399290
+v -33.560337 -56.303818 7.807085
+v -42.902252 -65.635132 4.462804
+v -43.063656 -67.225220 4.661464
+v -36.185692 -57.694763 8.299969
+v -38.171341 -59.676437 8.087118
+v -35.864452 -56.377113 8.299969
+v -35.176834 -53.789299 8.299969
+v -42.065758 -62.318161 5.240898
+v -42.352375 -62.266815 4.462804
+v -42.185772 -60.632454 3.854565
+v -37.838688 -55.142754 7.821481
+v -41.332890 -58.603882 5.240898
+v -27.229269 -46.508774 3.820573
+v -38.541862 -54.960838 7.418395
+v -41.617516 -58.542458 4.462804
+v -26.777119 -45.385704 3.820573
+v -33.798782 -49.302338 8.299969
+v -40.770519 -54.928520 4.462805
+v -41.060097 -55.401260 3.648774
+v -30.376263 -44.724052 8.035877
+v -24.824732 -40.858566 4.093196
+v -29.412462 -42.412125 8.035877
+v -37.296947 -45.924171 5.963909
+v -36.436726 -41.878014 4.661465
+v -38.259945 -46.947395 4.857568
+v -36.205715 -44.066833 6.459267
+v -35.173904 -42.225967 6.763313
+v -35.356071 -41.245491 6.133936
+v -37.058159 -42.713249 3.026721
+v -23.120729 -34.084869 6.930244
+v -34.303093 -38.815357 6.133936
+v -33.189140 -37.686703 6.763313
+v -34.301666 -36.995049 4.661466
+v -28.135618 -35.305046 8.293624
+v -36.034199 -40.213352 3.026721
+v -27.245667 -33.644066 8.293624
+v -18.600500 -29.433439 4.825289
+v -26.690010 -31.806095 8.256981
+v -23.170231 -30.429625 8.035877
+v -18.679028 -28.533072 5.935308
+v -16.241899 -26.556353 2.992297
+v -31.410135 -32.908539 6.133936
+v -32.336445 -35.271694 6.459268
+v -33.828419 -35.390877 3.026721
+v -26.854355 -30.207586 8.046502
+v -17.793941 -26.569704 6.433114
+v -22.933979 -27.507584 8.291824
+v -22.065201 -26.187361 8.291824
+v -13.170741 -22.423668 2.992297
+v -15.695748 -25.355354 4.628742
+v -16.796299 -24.680290 6.738995
+v -15.531144 -23.866493 6.106110
+v -26.694731 -26.385000 6.999073
+v -11.578086 -20.416456 2.992297
+v -12.578676 -21.254642 4.628742
+v -13.962549 -21.803808 6.106110
+v -28.008902 -25.102386 3.511010
+v -13.546177 -20.403103 6.738995
+v -19.218988 -20.272930 8.237564
+v -20.272411 -20.331661 8.046503
+v -12.049995 -18.997196 6.433114
+v -11.949282 -16.344622 7.715866
+v -9.604538 -17.532906 4.825289
+v -18.401638 -19.198349 8.237564
+v -18.627377 -18.168705 8.046503
+v -13.692453 -15.116148 8.291824
+v -22.746313 -17.610142 3.854566
+v -21.900387 -16.498127 3.854567
+v -1.314621 -8.913653 3.269368
+v -1.240576 -8.193809 5.146478
+v -3.013975 -9.957374 5.272460
+v -11.771497 -9.795255 8.002436
+v -6.535537 -9.312889 7.990958
+v -7.469342 -9.338477 8.180857
+v -7.830752 -7.302644 8.272804
+v -5.515389 -8.133174 8.013845
+v -2.361561 -5.507452 7.835857
+v -1.624844 -7.025601 6.738996
+v 0.979223 -6.077909 4.890197
+v -9.210354 -5.449951 7.493418
+v -7.860194 -4.171725 7.553590
+v -10.164118 -3.989571 5.789320
+v -5.128339 -4.802743 8.291159
+v -12.476695 -5.359277 3.648776
+v -12.507664 -5.637554 4.462807
+v -3.771233 -3.574155 8.296570
+v -2.344746 -3.404751 8.252495
+v -0.834324 -3.126943 8.057050
+v 0.098776 -2.283494 8.035879
+v -7.493637 -1.388830 5.983033
+v 0.486510 -0.948558 8.208302
+v -8.511205 -1.413113 4.462807
+v -6.523898 0.815152 3.854567
+v 0.486197 0.118314 8.295220
+v 3.242541 -0.580973 7.582980
+v -6.153800 -0.114174 6.077785
+v 1.295842 1.148540 8.299621
+v 3.113417 1.272443 8.149870
+v -4.760105 1.177993 6.189555
+v -2.340618 2.603161 6.953258
+v -0.663255 2.888807 7.645358
+v -2.158843 4.159199 5.789321
+v -4.497069 2.661613 4.462807
+v 6.821329 4.358755 8.035879
+v 9.349072 6.849567 8.035879
+v 2.729714 5.109139 8.002437
+v 3.491220 7.746380 7.300220
+v 2.644967 6.914715 7.300220
+v 1.820673 7.753580 6.133938
+v 15.938498 8.954058 5.188640
+v 7.819166 8.801161 8.237566
+v 6.411715 10.625956 7.300220
+v 16.618664 9.703857 5.272460
+v 9.043741 9.434145 8.285022
+v 18.134396 10.695036 4.093199
+v 3.712619 9.613903 6.133938
+v 19.219019 11.755941 3.820576
+v 19.835844 12.314379 2.992299
+v 10.563632 11.342577 8.256983
+v 8.764935 11.966505 7.731478
+v 11.215159 11.672632 8.281351
+v 12.419864 10.669691 8.180859
+v 12.812353 12.042570 8.282324
+v 12.705861 10.386389 8.077356
+v 14.903401 12.437355 8.035879
+v 14.967447 13.533243 8.216661
+v 7.628570 13.497683 6.133938
+v 7.464015 13.661886 5.789321
+v 7.319081 13.806509 5.427538
+v 8.954535 16.196625 3.854568
+v 9.095721 16.058083 4.661468
+v 8.723583 14.231804 6.459270
+v 15.029860 15.192598 8.297351
+v 21.594240 15.695866 6.106112
+v 24.534689 17.496359 2.992299
+v 18.962656 15.967709 7.835858
+v 17.410414 15.317465 8.090412
+v 17.463032 17.515593 8.299973
+v 10.830396 16.750191 6.133938
+v 23.895498 18.294384 6.106112
+v 26.785856 20.163877 2.992299
+v 15.190872 18.960564 7.600173
+v 13.441733 19.936737 5.670528
+v 15.101881 17.380651 8.046504
+v 27.316034 20.916546 3.820576
+v 12.359041 18.978386 5.427539
+v 27.933054 21.687653 3.820576
+v 16.349277 19.860497 7.731479
+v 17.450176 19.930607 8.046505
+v 18.581739 19.981382 8.237566
+v 23.490873 21.096416 7.835858
+v 19.689537 21.237457 8.237566
+v 13.919244 21.122454 4.661468
+v 23.883709 22.377649 8.035879
+v 19.651777 22.429039 8.046505
+v 19.631273 23.588736 7.731479
+v 25.086664 23.866156 8.035879
+v 27.206501 25.350737 7.715868
+v 20.229181 24.299520 7.731479
+v 15.514321 23.182459 3.854568
+v 28.581085 25.825750 7.196813
+v 27.234289 26.230730 7.942626
+v 16.582830 24.400183 3.854568
+v 25.435669 26.991369 8.299973
+v 26.544079 28.497843 8.299973
+v 28.357361 27.773489 7.942626
+v 22.314228 28.215757 7.217748
+v 24.738356 29.240705 7.954948
+v 27.617720 30.023272 8.299973
+v 32.658867 31.366838 6.976400
+v 24.376316 31.482702 6.999075
+v 36.801498 35.548203 4.628744
+v 37.895981 37.760368 4.628745
+v 31.889322 33.673424 8.035880
+v 38.230461 37.868851 2.992300
+v 32.807076 34.480309 7.890915
+v 33.664268 34.987717 7.651014
+v 34.174538 35.927505 7.651014
+v 35.961567 38.158966 7.280007
+v 23.096926 32.790482 3.511013
+v 37.116928 37.866112 6.106112
+v 38.820915 39.804413 4.628745
+v 33.996754 37.222710 7.990960
+v 28.359236 36.904076 7.353572
+v 34.544895 38.614372 8.035880
+v 32.986763 39.149277 8.299973
+v 30.909098 38.371475 8.087123
+v 28.886545 37.846024 7.353572
+v 30.020939 40.178520 7.300221
+v 35.060814 40.019997 8.077356
+v 37.088924 40.820778 7.333848
+v 31.431059 39.694374 8.046505
+v 37.555305 41.939865 7.333848
+v 31.923641 41.027565 8.002439
+v 27.249441 39.042229 4.661469
+v 28.143438 40.749809 4.661469
+v 28.894556 40.555054 6.133940
+v 31.650841 42.264351 7.667422
+v 32.052494 43.189514 7.667422
+v 32.818638 43.726761 7.904075
+v 27.832264 40.726173 3.026725
+v 33.595882 44.626526 8.046505
+v 29.049475 42.631638 4.661469
+v 40.418510 49.953941 7.168441
+v 40.795944 51.530518 7.168442
+v 43.267284 54.864639 4.568179
+v 43.690147 57.713364 4.507389
+v 43.973454 58.263100 2.928789
+v 41.143829 53.869797 7.267776
+v 40.688744 53.559372 7.528776
+v 35.657551 51.084435 8.046505
+v 41.385403 54.942268 7.229808
+v 41.806351 56.812958 7.125302
+v 33.720013 50.408585 7.132391
+v 33.848907 51.725441 6.953260
+v 35.836506 51.806847 8.046506
+v 42.946960 57.228836 5.949734
+v 43.129284 59.533440 6.055616
+v 43.890682 60.049500 4.630135
+v 35.412819 52.727791 7.802730
+v 40.284206 56.944084 7.984377
+v 35.128807 53.724030 7.542472
+v 35.301640 54.732513 7.525650
+v 35.297699 57.420250 7.222975
+v 32.364151 52.154182 4.529294
+v 42.229553 60.487396 7.105752
+v 42.452091 61.926956 7.003032
+v 36.843231 57.273804 8.036030
+v 33.217415 56.041328 4.630585
+v 33.559444 58.368599 4.599638
+v 38.798256 61.514900 8.297972
+v 37.078804 61.557144 7.961057
+v 39.303326 66.100052 8.296101
+v 34.228840 57.926773 6.054811
+v 35.712452 60.753540 7.250936
+v 35.692322 62.027695 7.163373
+v 33.357960 58.744911 2.994239
+v 33.847374 60.403435 4.780250
+v 34.186054 62.489479 5.223191
+v 34.313709 62.482117 5.481254
+v 34.556507 64.266220 5.771767
+v 34.820671 66.100052 6.126876
+v 34.506725 66.100052 5.644212
+v -34.770390 -78.203285 6.229818
+v -34.729389 -76.246986 6.311181
+v -38.390743 -80.848160 8.256945
+v -37.759338 -83.899948 8.127630
+v -38.323425 -83.899948 8.242794
+v -38.677181 -80.841522 8.285801
+v -38.896675 -83.899948 8.296094
+v -38.964767 -80.834854 8.299053
+v -39.252647 -80.828186 8.296661
+v -39.472321 -83.899948 8.286901
+v -39.539970 -80.821526 8.278633
+v -40.043575 -83.899948 8.215326
+v -37.785488 -68.967201 8.282977
+v -38.290115 -72.791458 8.289886
+v -39.117371 -72.717552 8.276038
+v -33.615021 -63.685173 6.738993
+v -33.288574 -61.964432 6.738993
+v -34.420204 -59.921700 7.807085
+v -39.660995 -63.673538 7.821481
+v -34.036484 -58.230499 7.807085
+v -40.004234 -61.797935 7.456285
+v -40.425999 -60.901527 7.021724
+v -40.053059 -59.078835 7.021724
+v -39.258656 -58.176620 7.456285
+v -29.126736 -45.569038 7.280004
+v -27.809975 -42.425308 7.280004
+v -31.770609 -43.809799 8.299970
+v -31.283266 -42.629944 8.299970
+v -30.783133 -41.464142 8.299970
+v -34.785172 -43.417671 7.418396
+v -35.922771 -40.635109 4.661465
+v -31.950062 -36.954216 7.418396
+v -35.395393 -39.407101 4.661465
+v -30.657846 -35.972206 7.821482
+v -33.356277 -35.192757 4.857568
+v -17.655334 -27.888000 5.019027
+v -32.429729 -33.715858 5.240900
+v -22.153358 -29.048325 7.990957
+v -16.765991 -26.736662 4.825289
+v -18.095987 -25.118282 7.399292
+v -14.156414 -23.284870 4.628742
+v -13.372165 -22.264904 4.628742
+v -11.577682 -19.901638 4.825289
+v -10.761987 -18.791672 5.019027
+v -13.511860 -19.079582 7.399292
+v -21.932901 -20.091015 7.300219
+v -21.457741 -19.447807 7.300219
+v -19.793596 -17.259789 7.300219
+v -19.331343 -16.668583 7.300219
+v -11.565499 -14.914060 7.990958
+v -13.051206 -7.356727 6.049510
+v -11.061027 -5.344371 6.189555
+v 1.468999 -2.085180 7.683839
+v -0.120683 1.534736 8.160542
+v -3.542240 2.758888 5.818725
+v 0.156851 4.776755 7.132390
+v 2.176260 6.532586 7.259346
+v 10.614504 8.384878 8.096795
+v 4.435997 8.675686 7.300220
+v 7.679397 10.077595 7.979118
+v 15.325099 10.974520 7.386370
+v 18.442659 14.115671 7.333847
+v 16.180777 14.147297 8.115362
+v 18.875723 14.916203 7.487402
+v 23.252388 16.423162 4.628744
+v 13.889873 16.228209 8.017508
+v 16.253555 16.351080 8.299467
+v 20.789852 16.548382 7.280006
+v 24.401575 17.734392 4.628744
+v 23.071272 19.127697 7.280006
+v 26.337902 23.072264 7.280006
+v 32.457672 37.789055 8.297710
+v 33.484936 40.521355 8.298612
+v 32.944233 51.980911 5.848011
+v -38.113701 -79.356812 8.221673
+v -40.917149 -82.336380 7.975461
+v -40.603695 -83.899948 8.082210
+v -41.146072 -83.899948 7.889125
+v -41.184669 -82.333298 7.868935
+v -41.446011 -82.330284 7.748034
+v -41.664310 -83.899948 7.638348
+v -42.152294 -83.899948 7.332835
+v -42.604267 -83.899948 6.976190
+v -36.313023 -74.550339 7.703831
+v -37.921337 -75.333649 8.224062
+v -36.052563 -72.636269 7.650885
+v -41.342415 -78.107315 7.741772
+v -41.596222 -78.096191 7.606179
+v -41.842297 -78.085411 7.456987
+v -42.079914 -78.075005 7.294636
+v -40.223743 -70.095642 7.960778
+v -40.971344 -70.012558 7.608343
+v -41.655037 -69.936577 7.142699
+v -38.743649 -62.581291 8.087118
+v -38.534454 -61.468040 8.087118
+v -37.781216 -57.912491 8.087119
+v -33.577656 -44.190567 8.077290
+v -19.772892 -25.063795 8.067310
+v -14.048536 -17.516144 8.067310
+v -10.496632 -15.815666 7.238770
+v -12.527235 -8.475422 7.228214
+v -11.526891 -7.478708 7.279874
+v 1.471418 4.053845 7.954947
+v 0.599551 6.666224 6.021106
+v 22.753191 16.989311 6.106112
+v -39.767937 -78.736603 8.244008
+v -39.677608 -76.690353 8.242985
+v -43.191959 -80.935349 6.329178
+v -43.014893 -83.899948 6.572615
+v -43.379330 -83.899948 6.126869
+v -43.366665 -80.931557 6.100262
+v -43.528683 -80.928047 5.862188
+v -43.693272 -83.899948 5.644205
+v -43.677532 -80.924812 5.615660
+v -43.812778 -80.921883 5.361404
+v -43.953011 -83.899948 5.130321
+v -40.691593 -75.333374 7.959098
+v -43.934017 -80.919250 5.100173
+v -44.155472 -83.899948 4.591281
+v -40.476006 -71.327736 7.913403
+v -42.545990 -68.562363 6.027880
+v -42.973690 -68.602478 5.310937
+v -43.335667 -72.624397 5.423296
+v -43.663383 -72.690628 4.656936
+v -18.687824 -25.884104 7.428063
+v -10.930516 -8.840838 7.996686
+v -9.723557 -7.335631 7.948772
+v -39.324047 -75.331238 8.275811
+v -43.162582 -79.475166 6.316371
+v -44.340950 -82.397980 3.733282
+v -44.298264 -83.899948 4.033458
+v -44.379696 -83.899948 3.463454
+v -44.368492 -82.397682 3.497797
+v -44.385471 -82.397499 3.261323
+v -44.398819 -83.899948 2.888025
+v -44.355419 -83.899948 2.314004
+v -44.273144 -83.899948 1.847350
+v -44.149559 -83.899948 1.390040
+v -42.255722 -73.969620 6.955575
+v -43.107086 -75.364586 6.128166
+v -44.280388 -78.175095 3.024336
+v -42.130196 -71.944054 6.913510
+v -43.677528 -70.086098 3.024336
+v -8.608679 -8.325382 8.284363
+v -10.483935 -6.256654 7.233431
+v -44.001793 -78.816101 4.769130
+v -43.945930 -76.743774 4.656936
+v -44.795647 -83.899948 1.357277
+v -43.335400 -83.899948 1.357277
+v -44.999920 -83.899948 3.031053
+v -43.335400 -83.899948 1.390040
+v -44.965500 -83.899948 3.637107
+v -44.868977 -83.899948 4.236491
+v -44.711353 -83.899948 4.822824
+v -44.494301 -83.899948 5.389874
+v -44.220116 -83.899948 5.931620
+v -43.891705 -83.899948 6.442318
+v -43.512547 -83.899948 6.916554
+v -43.086662 -83.899948 7.349308
+v -42.618565 -83.899948 7.735996
+v -42.113209 -83.899948 8.072527
+v -41.575947 -83.899948 8.355337
+v -41.012466 -83.899948 8.581436
+v -33.401653 -83.899948 1.357277
+v -40.428734 -83.899948 8.748428
+v -39.830933 -83.899948 8.854544
+v -39.225388 -83.899948 8.898663
+v -33.200024 -83.899948 2.982908
+v -33.216103 -83.899948 3.435594
+v -38.618519 -83.899948 8.880317
+v -33.266869 -83.899948 3.885760
+v -38.016747 -83.899948 8.799700
+v -33.388779 -83.899948 4.480525
+v -37.426445 -83.899948 8.657665
+v -33.571178 -83.899948 5.059642
+v -36.853867 -83.899948 8.455715
+v -33.812138 -83.899948 5.616960
+v -36.305073 -83.899948 8.195992
+v -34.109097 -83.899948 6.146566
+v -35.785873 -83.899948 7.881242
+v -34.458916 -83.899948 6.642843
+v -35.301769 -83.899948 7.514797
+v -34.857880 -83.899948 7.100536
+v -42.314770 -67.645393 1.390040
+v -39.791519 -54.567635 1.390041
+v -36.392212 -43.938759 1.390041
+v -32.086796 -34.290203 1.390042
+v -27.040771 -25.518631 1.390042
+v -21.422838 -17.511364 1.390043
+v -13.330363 -7.813437 1.390043
+v 17.080997 23.456251 1.390044
+v 24.432735 32.900566 1.390045
+v 28.860849 40.401428 1.390045
+v 31.712219 47.076637 1.390045
+v 33.293617 52.420547 1.390046
+v 34.458080 58.976471 1.390046
+v 34.864601 66.100052 1.390046
+v 33.404354 66.100052 1.357283
+v 34.864601 66.100052 1.357283
+v 33.200081 66.100052 3.031060
+v 33.234501 66.100052 3.637114
+v 33.331024 66.100052 4.236498
+v 33.488647 66.100052 4.822831
+v 33.705700 66.100052 5.389881
+v 33.979885 66.100052 5.931627
+v 34.308296 66.100052 6.442325
+v 34.687454 66.100052 6.916561
+v 35.113335 66.100052 7.349314
+v 35.581436 66.100052 7.736002
+v 36.086792 66.100052 8.072534
+v 36.624054 66.100052 8.355345
+v 37.187534 66.100052 8.581442
+v 44.798344 66.100052 1.357283
+v 37.771267 66.100052 8.748434
+v 38.369068 66.100052 8.854550
+v 38.974609 66.100052 8.898669
+v 44.999977 66.100052 2.982915
+v 44.983898 66.100052 3.435601
+v 39.581482 66.100052 8.880323
+v 44.933132 66.100052 3.885767
+v 40.183254 66.100052 8.799706
+v 44.811218 66.100052 4.480532
+v 40.773556 66.100052 8.657671
+v 44.628822 66.100052 5.059649
+v 41.346134 66.100052 8.455723
+v 44.387863 66.100052 5.616967
+v 41.894928 66.100052 8.195998
+v 44.090900 66.100052 6.146573
+v 42.414127 66.100052 7.881248
+v 43.741085 66.100052 6.642850
+v 42.898232 66.100052 7.514803
+v 43.342117 66.100052 7.100543
+v -32.380100 -69.873940 2.982909
+v -32.749660 -69.848152 -0.000003
+v -33.570000 -83.899948 -0.000003
+v -30.446390 -57.437820 -0.000002
+v -30.079386 -57.495850 2.982910
+v -26.881653 -46.429222 -0.000002
+v -26.520199 -46.521515 2.982910
+v -22.252951 -36.581398 -0.000001
+v -21.899157 -36.705475 2.982911
+v -16.740030 -27.668158 -0.000001
+v -16.393869 -27.818188 2.982911
+v -10.518759 -19.484875 0.000000
+v -10.177887 -19.653242 2.982911
+v -1.440867 -9.385967 0.000000
+v -1.100572 -9.565933 2.982912
+v 18.807400 10.899035 0.000001
+v 19.134855 10.706036 2.982913
+v 28.140051 21.475674 0.000001
+v 28.532764 21.375568 2.982913
+v 34.614944 30.680208 0.000002
+v 35.026196 30.644106 2.982913
+v 38.650906 38.228653 0.000002
+v 39.070221 38.255844 2.982914
+v 41.092968 44.320885 0.000002
+v 41.512150 44.403427 2.982914
+v 43.262970 52.267357 0.000003
+v 43.672333 52.423981 2.982914
+v 44.280746 58.978912 0.000003
+v 44.661026 59.064575 2.982915
+v 44.630001 66.100052 0.000003
+v 46.619438 76.100052 0.000004
+v 46.619438 76.100052 1.357284
+v 46.619438 66.100052 0.000003
+v 46.619438 66.100052 1.357283
+v 43.324837 76.100052 0.000004
+v 43.324837 76.100052 1.357284
+v -31.580564 -93.899948 -0.000004
+v -31.580564 -83.899948 -0.000003
+v -31.580564 -83.899948 1.357277
+v -31.580564 -93.899948 1.357276
+v -34.875164 -93.899948 -0.000004
+v -34.875164 -93.899948 1.357276
+v -34.053341 -69.757607 -0.000003
+v -34.875164 -83.899948 -0.000003
+v -34.875164 -83.899948 1.357277
+v -34.053341 -69.757607 1.357277
+v -31.741240 -57.234169 -0.000002
+v -31.741240 -57.234169 1.357278
+v -28.157213 -46.105286 -0.000002
+v -28.157213 -46.105286 1.357278
+v -23.501637 -36.145500 -0.000001
+v -23.501637 -36.145500 1.357279
+v -17.961752 -27.140450 -0.000001
+v -17.961752 -27.140450 1.357279
+v -11.721457 -18.891821 0.000000
+v -11.721457 -18.891821 1.357280
+v -2.640233 -8.750490 0.000000
+v -2.640233 -8.750490 1.357280
+v 17.660976 11.589363 0.000001
+v 17.660976 11.589363 1.357281
+v 26.762053 21.841171 0.000001
+v 26.762053 21.841171 1.357281
+v 33.171841 30.826391 0.000002
+v 33.171841 30.826391 1.357282
+v 37.177929 38.157074 0.000002
+v 37.177929 38.157074 1.357282
+v 39.618191 44.058075 0.000002
+v 39.618191 44.058075 1.357282
+v 41.818802 51.747261 0.000003
+v 41.818802 51.747261 1.357283
+v 42.939091 58.692276 0.000003
+v 42.939091 58.692276 1.357283
+v 43.324837 66.100052 0.000003
+v 43.324837 66.100052 1.357283
+v -44.537373 -75.490585 4.531684
+v -43.977196 -67.521927 3.031054
+v -44.451187 -75.496025 4.822824
+v -44.350163 -75.502403 5.109143
+v -44.234566 -75.509697 5.389874
+v -44.104702 -75.517891 5.664277
+v -42.504005 -78.331451 7.735996
+v -43.960922 -75.526962 5.931621
+v -43.803604 -75.536888 6.191198
+v -43.633163 -75.547638 6.442318
+v -43.450054 -75.559189 6.684318
+v -43.254761 -75.571518 6.916554
+v -43.047798 -75.584572 7.138414
+v -42.171207 -78.345322 7.966154
+v -35.607864 -78.929123 7.824574
+v -35.946476 -78.915871 8.046124
+v -34.753349 -76.561821 7.210022
+v -34.542568 -76.574303 6.991759
+v -34.343277 -76.586105 6.762917
+v -34.156002 -76.597191 6.524105
+v -33.981243 -76.607544 6.275955
+v -33.819458 -76.617126 6.019124
+v -33.671082 -76.625908 5.754292
+v -33.536507 -76.633881 5.482166
+v -33.416084 -76.641014 5.203463
+v -33.310143 -76.647285 4.918923
+v -33.218952 -76.652687 4.629306
+v -40.386356 -53.453369 5.974758
+v -40.099216 -52.408447 5.974758
+v -41.443371 -54.306923 3.031055
+v -39.331642 -47.850533 4.555729
+v -38.024372 -43.546867 3.031055
+v -38.765671 -48.037384 5.974758
+v -37.870438 -48.332947 7.191350
+v -38.011730 -52.994041 8.122693
+v -30.555439 -56.229355 5.933081
+v -30.264391 -55.167366 5.933081
+v -32.334930 -54.586525 8.098637
+v -29.990887 -56.380447 4.509235
+v -29.734100 -50.295761 7.157326
+v -28.850571 -50.594917 5.933081
+v -28.297020 -50.782341 4.509235
+v -31.747091 -30.559633 4.555730
+v -28.614096 -24.889805 3.031056
+v -33.691139 -33.772270 3.031055
+v -30.267590 -40.322384 8.899948
+v -33.749348 -40.904854 8.122694
+v -32.235867 -44.999702 8.899948
+v -31.225950 -30.848858 5.974759
+v -29.389160 -27.671419 5.974759
+v -30.401630 -31.306341 7.191351
+v -27.531183 -28.788752 8.122694
+v -29.174610 -26.175459 4.555730
+v -28.667807 -26.489134 5.974759
+v -22.433361 -34.153595 7.157327
+v -20.635630 -32.935535 5.933082
+v -22.478523 -31.827272 8.098639
+v -21.624378 -34.617989 5.933082
+v -21.117531 -34.908939 4.509236
+v -19.656578 -29.607260 7.157327
+v -18.873707 -30.114439 5.933082
+v -19.038887 -12.180081 4.555730
+v -14.851917 -7.015784 3.031057
+v -22.968092 -16.793396 3.031056
+v -14.715004 -8.069611 5.974760
+v -18.383221 -30.432199 4.509236
+v -18.580006 -12.560434 5.974760
+v -17.854170 -13.162060 7.191352
+v -13.096600 -9.512265 8.122695
+v -15.763454 -21.970665 8.098639
+v -16.494886 -18.114765 8.899950
+v -19.752632 -22.399551 8.899950
+v -9.659528 -16.383369 7.157328
+v -7.090175 -14.866428 5.933082
+v -8.695441 -13.435484 8.098639
+v -8.952540 -16.991875 5.933082
+v -8.509596 -17.373119 4.509237
+v -7.573479 -10.809873 8.536442
+v -10.893617 -11.476018 8.899950
+v -5.085012 -11.281141 7.157328
+v -5.976556 -10.451772 8.098639
+v -4.402040 -11.916487 5.933083
+v -3.974141 -12.314545 4.509237
+v 10.912867 5.363491 7.506143
+v 6.897163 2.587352 8.098639
+v 8.404390 1.053481 5.933083
+v 12.020103 7.646330 8.098640
+v 9.668535 6.621475 8.536443
+v 12.880013 6.784210 7.157329
+v 13.951470 5.710000 4.509238
+v 3.756907 -4.355963 4.509238
+v 23.873079 33.608421 5.974761
+v 24.376617 34.367928 5.974761
+v 23.378326 33.940773 4.555733
+v 26.190933 33.181015 8.122697
+v 25.645557 37.542511 4.555733
+v 27.068651 40.551399 3.031059
+v 22.696268 33.309402 3.031059
+v 26.159595 37.240837 5.974761
+v 30.971067 24.915323 4.509239
+v 32.924450 28.775995 5.933084
+v 30.497948 25.258406 5.933084
+v 33.650604 29.905897 5.933084
+v 31.124863 29.953272 8.098640
+v 34.144829 29.593981 4.509239
+v 31.035845 47.748528 5.974762
+v 30.633066 44.047920 7.191354
+v 33.461510 48.173615 8.122698
+v 31.396839 48.835129 5.974762
+v 30.472263 47.942474 4.555733
+v 29.763573 44.412292 5.974762
+v 31.280218 50.499123 4.555733
+v 31.488750 52.059471 3.031059
+v 29.898403 46.952782 3.031059
+v 31.852913 50.334023 5.974762
+v 38.967514 42.419922 7.157331
+v 41.124180 45.718513 5.933085
+v 39.076267 46.374657 8.098641
+v 33.600590 53.380692 7.191355
+v 32.680107 53.584427 5.974762
+v 39.837135 42.082474 5.933085
+v 40.381973 41.871048 4.509240
+v 41.200130 49.326149 7.157331
+v 42.102825 49.091072 5.933085
+v 33.459579 64.180199 4.822831
+v 33.085522 62.324104 3.031060
+v 33.863853 62.276207 5.931627
+v 33.560760 64.177109 5.109149
+v 33.676533 64.173576 5.389881
+v 42.668385 48.943794 4.509240
+v 33.806591 64.169609 5.664283
+v 33.950592 64.165222 5.931627
+v 34.021187 62.266518 6.191204
+v 34.191647 62.256027 6.442325
+v 41.417984 56.624283 8.098642
+v 38.726318 58.810349 8.899953
+v 38.308262 55.760681 8.899953
+v 36.208805 63.437531 8.172932
+v 43.360893 62.607193 6.991765
+v 43.560299 62.597534 6.762923
+v 43.747684 62.588463 6.524111
+v 43.922546 62.579994 6.275961
+v 44.084423 62.572151 6.019130
+v 44.232883 62.564964 5.754299
+v 44.367542 62.558449 5.482172
+v 44.488029 62.552612 5.203469
+v 44.594036 62.547478 4.918930
+v 44.685276 62.543060 4.629312
+v -40.791389 -81.125633 8.643768
+v -44.176521 -71.466293 4.677809
+v -44.131676 -71.470596 4.822825
+v -44.083126 -71.475250 4.966635
+v -44.030910 -71.480263 5.109143
+v -43.975063 -71.485619 5.250254
+v -37.548820 -81.353119 8.699064
+v -41.059071 -74.543434 8.436829
+v -40.529636 -75.902069 8.658091
+v -38.711803 -73.577713 8.899940
+v -42.581478 -70.462738 7.173778
+v -40.826057 -72.021042 8.446455
+v -38.158539 -68.723595 8.899948
+v -43.179035 -63.546104 4.555728
+v -42.930897 -63.587311 5.284753
+v -40.954597 -59.970322 7.191350
+v -41.878445 -59.782425 5.974757
+v -36.574890 -75.097786 8.466049
+v -37.298420 -76.256355 8.685971
+v -41.892174 -65.249695 7.191350
+v -36.354130 -72.665886 8.456623
+v -41.881260 -56.982391 4.555728
+v -39.804367 -64.329765 8.460714
+v -37.377140 -63.523232 8.899948
+v -34.333721 -71.773003 7.174965
+v -39.345993 -61.734512 8.460714
+v -33.187420 -73.175827 5.274814
+v -33.130909 -73.180908 5.133956
+v -33.078022 -73.185669 4.991687
+v -33.028805 -73.190094 4.848098
+v -32.983280 -73.194191 4.703286
+v -32.941486 -73.197952 4.557346
+v -35.385426 -65.268539 8.442303
+v -33.710838 -66.920753 7.157326
+v -32.862576 -62.027740 7.157326
+v -38.264915 -56.710159 8.460714
+v -35.170231 -53.791153 8.899948
+v -34.950840 -62.778244 8.442303
+v -32.279202 -65.979271 5.240289
+v -31.947731 -62.209885 5.933080
+v -38.599918 -45.715248 4.555729
+v -32.036701 -66.018021 4.509235
+v -38.362904 -45.799469 5.284754
+v -33.925510 -57.964516 8.442303
+v -35.738731 -48.011139 8.460714
+v -33.291656 -47.846764 8.899948
+v -36.522861 -41.924629 5.974758
+v -30.849180 -59.855415 4.509235
+v -35.219757 -46.530197 8.460714
+v -31.354839 -49.138603 8.442303
+v -30.855803 -47.731613 8.442303
+v -32.637749 -32.198959 4.555730
+v -32.415657 -32.317043 5.284755
+v -28.752628 -47.544685 7.157326
+v -28.792915 -44.326546 8.098638
+v -28.235138 -46.198402 7.157327
+v -27.753155 -48.505653 5.240290
+v -27.522696 -48.590500 4.509236
+v -27.312201 -43.944160 7.157327
+v -27.470610 -39.652023 8.442304
+v -28.617065 -36.865833 8.899948
+v -26.567747 -42.243004 7.157327
+v -24.995972 -38.930679 7.157327
+v -26.652853 -37.977985 8.442304
+v -25.453178 -42.865166 5.240290
+v -27.841213 -30.678844 8.460715
+v -25.002094 -30.309671 8.899949
+v -29.694134 -34.027500 8.460715
+v -27.454756 -23.483936 4.555730
+v -24.991650 -42.440758 4.509236
+v -25.646343 -27.505043 8.552896
+v -24.650810 -19.419470 4.555730
+v -25.961411 -22.326727 5.974759
+v -23.582710 -32.333584 8.442305
+v -25.371597 -35.511692 8.442305
+v -24.446745 -19.566534 5.284755
+v -22.603876 -37.599747 4.509236
+v -23.884758 -24.792366 8.552896
+v -26.022030 -24.799082 7.537070
+v -25.182426 -22.857746 7.191351
+v -23.511011 -23.812025 8.460716
+v -21.562302 -24.962746 8.899950
+v -22.173927 -30.009485 8.442305
+v -23.312298 -20.194233 7.191351
+v -22.596581 -22.494272 8.460716
+v -22.357685 -18.891186 7.191351
+v -20.937416 -14.518797 4.555730
+v -20.486700 -27.396536 8.442305
+v -20.740477 -14.675273 5.284755
+v -20.526930 -18.494307 8.122694
+v -20.675407 -16.676296 7.191351
+v -19.743711 -15.489998 7.191351
+v -17.682350 -28.923027 5.240291
+v -17.478405 -29.059832 4.509236
+v -17.324694 -15.541506 8.460716
+v -14.660594 -15.853767 8.899950
+v -16.388273 -14.399767 8.460716
+v -10.761382 -3.263264 5.284756
+v -6.064308 -0.254702 7.191352
+v -6.501038 0.645391 5.974760
+v -10.826620 -2.966393 4.555731
+v -10.162046 -14.052273 8.442305
+v -12.019299 -16.209993 8.442305
+v -10.359427 -10.112257 8.879629
+v -9.611746 -18.287279 5.240291
+v -12.434524 -21.194969 5.933082
+v -4.728940 -2.323669 8.634524
+v -7.012222 -5.396734 8.765514
+v -3.105454 -4.664019 8.806274
+v -2.904949 5.087452 4.555731
+v 15.432161 24.100046 3.031058
+v -2.216420 -1.209515 8.852692
+v -2.792122 -10.696942 5.240292
+v 0.351089 -4.509542 7.820709
+v 1.826469 -2.418692 8.098639
+v -0.115905 -4.046241 8.223195
+v 2.685966 -3.281230 7.157329
+v 2.781912 3.391705 8.879629
+v 4.833238 4.687762 8.899950
+v 2.764798 6.792766 8.122696
+v 3.262794 -2.174667 7.506143
+v 2.863096 -0.080108 8.536443
+v 3.344389 -3.941985 5.933083
+v 5.796962 0.328166 7.506143
+v 6.187577 6.740006 8.879629
+v 9.009304 11.653229 8.552898
+v 12.145422 20.180361 4.555732
+v 8.938890 15.987312 5.974761
+v 12.389719 10.738724 8.806274
+v 12.629513 13.903601 8.814629
+v 12.921426 10.212111 8.620058
+v 12.594426 5.371317 6.153439
+v 13.538754 6.123776 5.933083
+v 12.904545 16.962755 8.122696
+v 10.557385 15.162617 7.848307
+v 15.542778 9.820099 7.393551
+v 16.314281 8.436071 5.240293
+v 16.489351 8.263851 4.509238
+v 17.846533 26.600035 4.555732
+v 17.751730 24.104300 7.191353
+v 15.561607 21.618538 7.191353
+v 17.561394 22.019758 8.122696
+v 18.039995 26.439280 5.284757
+v 20.457863 28.896643 5.974761
+v 19.198601 13.261843 7.157329
+v 17.154682 13.312656 8.262520
+v 16.850803 11.348619 7.506143
+v 18.933247 25.500269 7.191353
+v 21.202513 28.318468 7.191353
+v 21.058681 13.888750 5.933084
+v 20.132931 14.818333 7.506143
+v 21.462929 31.216177 4.555732
+v 21.481928 25.581945 8.460718
+v 21.940695 22.585930 8.899952
+v 24.309946 25.511354 8.899952
+v 22.624361 27.021723 8.460718
+v 25.698090 22.522209 8.098640
+v 26.169497 21.169197 7.157330
+v 24.772255 20.072859 7.506144
+v 25.741184 19.188393 5.933084
+v 27.389782 22.693331 7.157330
+v 27.155542 25.516226 8.442307
+v 28.187584 23.720945 7.157330
+v 29.742800 25.806002 7.157330
+v 26.470190 38.990173 4.555733
+v 26.690371 38.868553 5.284758
+v 26.972677 36.763664 7.191354
+v 27.718309 34.287445 8.460718
+v 28.660593 31.565382 8.899952
+v 29.496670 23.340490 5.240293
+v 29.393431 28.615004 8.442307
+v 29.692299 23.192038 4.509239
+v 28.323923 39.182030 7.191354
+v 29.174929 36.743263 8.460718
+v 28.275705 42.528168 4.555733
+v 28.503489 42.421463 5.284758
+v 29.863407 37.992149 8.460718
+v 31.690529 36.623695 8.899952
+v 28.958622 40.411163 7.191354
+v 29.543566 41.609009 7.191354
+v 29.665792 45.755074 4.555733
+v 31.728451 41.760513 8.460718
+v 33.043720 39.250374 8.899952
+v 34.236786 41.849960 8.899952
+v 34.222778 36.582291 8.442307
+v 33.502098 35.237892 8.442307
+v 34.998722 34.001785 7.157330
+v 32.283611 43.024948 8.460718
+v 35.602421 31.996248 4.509239
+v 36.464241 36.775833 7.157330
+v 35.813725 33.548027 5.933084
+v 37.435219 35.876465 5.240294
+v 37.153149 38.194458 7.157330
+v 37.654293 35.765488 4.509239
+v 36.756897 42.027496 8.442307
+v 36.175957 40.655884 8.442307
+v 31.900963 52.855972 4.555733
+v 37.787823 39.581947 7.157330
+v 37.827538 44.831871 8.442307
+v 36.271957 47.273155 8.899952
+v 39.433510 40.183060 5.240294
+v 32.581211 56.166695 4.555734
+v 32.750935 58.724945 3.031060
+v 39.659767 40.087585 4.509240
+v 32.829075 56.123863 5.284759
+v 35.512447 53.142418 8.460719
+v 37.758411 52.845192 8.899953
+v 38.906509 48.182716 8.442307
+v 34.127571 56.080208 7.191355
+v 35.796993 54.530861 8.460719
+v 34.344379 57.463623 7.191355
+v 33.187366 60.480850 4.677814
+v 33.232227 60.476677 4.822831
+v 33.280788 60.472153 4.966640
+v 33.333019 60.467293 5.109149
+v 33.388882 60.462090 5.250259
+v 33.448345 60.456551 5.389880
+v 39.670822 51.081169 8.442307
+v 35.641975 57.900848 8.122698
+v 34.531448 58.889923 7.191355
+v 34.704803 59.978600 7.244722
+v 34.777069 62.220001 7.138421
+v 34.570087 62.232742 6.916561
+v 34.374775 62.244759 6.684324
+v 34.995167 62.206581 7.349314
+v 36.737282 60.557739 8.503036
+v 39.097816 61.168991 8.897356
+v 42.857491 50.743889 5.240294
+v 34.926022 63.812126 7.209964
+v 43.096783 50.688675 4.509240
+v 36.897545 61.709740 8.530099
+v 37.614655 62.324753 8.736637
+v 43.729797 57.723541 5.933085
+v 43.252586 54.434837 5.933085
+v 41.425106 61.846825 8.365788
+v 44.557861 60.804146 4.703292
+v 44.599716 60.801086 4.557353
+v -39.174026 -81.240288 8.899139
+v -39.070534 -78.633987 8.899512
+v -40.686348 -78.487930 8.650979
+v -43.535648 -67.696396 5.284753
+v -42.273544 -67.974724 7.191350
+v -37.448757 -78.778275 8.692570
+v -38.916069 -76.080109 8.899779
+v -40.384796 -68.329865 8.460714
+v -41.596855 -58.442009 5.974757
+v -35.935246 -69.112488 8.442303
+v -34.055019 -69.454529 7.157325
+v -39.535854 -55.041893 7.453773
+v -32.805897 -69.715492 5.240289
+v -36.646740 -59.772163 8.899948
+v -36.094025 -57.339989 8.899948
+v -31.690376 -60.960327 5.933080
+v -37.087635 -46.055603 7.191350
+v -31.944860 -59.022400 6.874826
+v -32.041954 -57.122139 7.422048
+v -36.433411 -40.152370 4.555729
+v -36.087181 -44.165054 7.453773
+v -34.229763 -35.320930 4.555729
+v -34.396137 -37.049690 5.974758
+v -34.218761 -38.924763 7.191350
+v -32.695805 -38.535461 8.122694
+v -31.850100 -36.747593 8.122694
+v -32.233715 -35.392357 7.453774
+v -31.334660 -33.026031 7.191351
+v -26.991423 -46.511040 5.240290
+v -26.540916 -45.395088 5.240290
+v -27.527777 -34.762512 8.899949
+v -26.629553 -33.116928 8.899949
+v -24.852547 -40.761883 5.933081
+v -23.645891 -38.331100 5.933081
+v -27.347385 -26.871889 7.537069
+v -26.930786 -24.016611 6.194024
+v -25.706787 -31.499710 8.899949
+v -24.334362 -37.026226 7.422049
+v -23.902924 -28.765104 8.898022
+v -23.048664 -27.424253 8.898022
+v -22.997210 -17.596109 5.284755
+v -22.178667 -26.102379 8.898022
+v -19.619890 -26.116537 8.442305
+v -22.147934 -16.477268 5.284755
+v -18.394262 -27.704782 7.157327
+v -17.418861 -25.805952 7.422049
+v -15.828391 -26.671257 4.509237
+v -14.153096 -19.901060 8.098639
+v -14.310754 -24.587215 4.509237
+v -15.563816 -25.302717 5.933082
+v -12.090406 -18.838364 7.422050
+v -12.122677 -6.218318 6.911005
+v -10.572553 -17.454096 7.157328
+v -9.192287 -4.032972 7.537070
+v -7.297181 -8.116267 8.885764
+v -6.628447 -2.745695 8.185287
+v -6.460713 -7.972620 8.827726
+v -4.027246 -8.057447 8.223195
+v -5.484813 -6.759684 8.846411
+v -4.315733 0.538760 7.773863
+v -4.234633 -0.630597 8.303043
+v -3.969939 -0.038698 8.185287
+v -1.724355 0.001470 8.765514
+v -3.221768 -9.560050 6.970898
+v -1.350516 -7.857244 6.776917
+v -2.732599 2.960732 7.280876
+v -2.102360 -6.387172 8.098639
+v -1.132673 -2.662724 8.806274
+v -0.311060 6.203762 6.613934
+v -0.148341 -1.853868 8.782063
+v -0.986470 -8.944488 5.000251
+v 0.096407 -1.251420 8.827727
+v 0.584120 -0.044591 8.885765
+v 2.261864 -4.634899 6.367798
+v 4.385176 1.762657 8.620058
+v 4.882782 2.948153 8.755102
+v 4.935507 -2.176024 6.153439
+v 6.586035 4.622045 8.755102
+v 8.822698 13.985487 7.537071
+v 9.347474 9.140703 8.899951
+v 10.551820 9.615549 8.875437
+v 12.274518 18.819664 6.613935
+v 13.376409 19.754747 6.813780
+v 14.841208 12.521303 8.692989
+v 14.921103 13.568617 8.834264
+v 15.015621 15.148514 8.898158
+v 15.194942 23.137892 5.284757
+v 15.227602 18.761429 8.358158
+v 17.424948 17.464161 8.899951
+v 16.279131 24.369192 5.284757
+v 16.378428 19.663641 8.460718
+v 18.352760 10.677822 5.476076
+v 18.869566 16.058397 8.536444
+v 21.876369 17.998785 8.098640
+v 19.722399 20.008356 8.899952
+v 19.471926 11.699787 5.240293
+v 19.710714 23.444067 8.460718
+v 20.308525 24.154016 8.460718
+v 21.209192 29.877531 5.974761
+v 23.451103 21.251135 8.536444
+v 24.883316 26.252222 8.899952
+v 25.011751 17.430750 4.509239
+v 26.005816 27.746656 8.899952
+v 27.293558 20.146872 4.509239
+v 27.673075 21.005934 5.240293
+v 25.870197 34.421532 7.453777
+v 28.287931 21.778454 5.240293
+v 27.784756 30.942564 8.888912
+v 27.643845 40.663864 5.284758
+v 31.326157 28.561583 7.422051
+v 30.602959 34.697960 8.899952
+v 30.844286 39.893860 8.460718
+v 35.250050 38.635101 8.442307
+v 35.056507 43.847214 8.899952
+v 38.486938 38.044884 5.240294
+v 33.141129 58.155777 5.284759
+v 33.230671 58.854309 5.284759
+v 41.573105 50.834885 7.157331
+v 41.684181 52.653679 7.422053
+v 43.660622 53.395515 4.509240
+v 39.551258 62.087547 8.872566
+v 42.797623 59.789589 7.358317
+v 44.187115 56.685410 4.509240
+v -40.920692 -55.945114 6.139759
+v -34.282318 -44.528923 8.530834
+v -33.423294 -35.257568 6.139760
+v -23.277681 -37.412506 6.098894
+v -18.484928 -24.188999 8.513887
+v -16.447081 -26.362761 6.098895
+v -14.757460 -23.498005 6.575757
+v -13.746564 -6.372266 5.105680
+v -13.274994 -17.434731 8.513887
+v -10.986285 -4.691662 6.664555
+v -10.953011 -6.352845 7.773863
+v -10.719683 -8.184400 8.530835
+v -9.193428 -7.162984 8.671329
+v -2.950728 4.156870 6.030122
+v -1.880602 5.073111 6.194025
+v -0.535861 4.729847 7.537071
+v -2.301570 1.552580 8.215658
+v -1.192766 1.577985 8.552897
+v -0.069543 2.434714 8.615116
+v 1.051582 4.135610 8.460716
+v 23.709427 17.472763 6.575758
+v 23.285635 29.032393 8.122696
+v 23.459902 28.110155 8.460718
+v 24.668541 30.939844 8.122697
+v 32.943489 34.241768 8.442307
+v 39.851479 52.711830 8.513891
+v 40.146358 54.213615 8.513891
+v 42.884964 52.974258 6.098898
+v 40.905968 59.262299 8.496738
+v 43.858620 60.273811 6.143991
+v -41.395870 -55.074203 4.648569
+v -16.508488 -23.905247 7.726234
+v 1.401713 1.172928 8.898768
+v 22.773994 31.272589 6.613935
+v 22.825928 30.473040 7.191354
+v 33.505466 31.983110 7.422052
+v 32.176491 33.280922 8.513889
+v 34.738014 31.873098 6.098897
+v -43.607796 -67.549301 -0.000003
+v -44.630001 -83.899948 -0.000003
+v -41.076237 -54.364647 -0.000002
+v -37.661526 -43.633629 -0.000001
+v -33.334496 -33.887020 -0.000001
+v -28.264353 -25.029222 -0.000001
+v -22.624556 -16.952671 0.000000
+v -14.513800 -7.192964 0.000000
+v 15.797406 23.955263 0.000002
+v 23.080729 33.215622 0.000002
+v 27.465590 40.513969 0.000002
+v 30.300543 46.975159 0.000003
+v 31.889416 52.133850 0.000003
+v 33.141457 58.869049 0.000003
+v 33.460781 62.400871 0.000003
+v 33.570000 66.100052 0.000003
+v -46.630001 -83.899948 1.357277
+v -46.630001 -93.899948 1.357276
+v -43.335400 -93.899948 1.357276
+v -42.314770 -67.645393 -0.000003
+v -43.335400 -83.899948 -0.000003
+v -39.791519 -54.567635 -0.000002
+v -36.392212 -43.938759 -0.000001
+v -32.086796 -34.290203 -0.000001
+v -27.040771 -25.518631 -0.000001
+v -21.422838 -17.511364 0.000000
+v -13.330363 -7.813437 0.000000
+v 17.080997 23.456251 0.000002
+v 24.432735 32.900566 0.000002
+v 28.860849 40.401428 0.000002
+v 31.712219 47.076637 0.000003
+v 33.293617 52.420547 0.000003
+v 34.458080 58.976471 0.000003
+v 34.864601 66.100052 0.000003
+v 31.570000 76.100052 1.357284
+v 31.570000 66.100052 1.357283
+v 34.864601 76.100052 1.357284
+v -46.630001 -83.899948 -0.000003
+v 31.570000 66.100052 0.000003
+v -46.630001 -93.899948 -0.000004
+v -43.335400 -93.899948 -0.000004
+v 34.864601 76.100052 0.000004
+v 31.570000 76.100052 0.000004
+f 88 89 90
+f 88 90 91
+f 92 93 89
+f 92 89 94
+f 95 96 97
+f 98 99 93
+f 98 93 97
+f 98 97 96
+f 100 98 96
+f 101 102 103
+f 104 105 106
+f 104 106 107
+f 108 109 110
+f 108 110 111
+f 112 113 114
+f 115 108 111
+f 115 116 108
+f 115 111 113
+f 117 115 113
+f 118 117 113
+f 119 112 107
+f 119 113 112
+f 119 107 120
+f 119 118 113
+f 121 122 123
+f 121 124 122
+f 121 125 124
+f 126 125 121
+f 127 128 125
+f 127 125 126
+f 129 130 122
+f 129 122 124
+f 129 124 125
+f 131 129 125
+f 132 131 125
+f 133 125 128
+f 133 132 125
+f 134 133 128
+f 135 136 137
+f 135 138 136
+f 139 138 135
+f 140 138 139
+f 141 138 140
+f 141 142 143
+f 144 138 141
+f 144 141 143
+f 144 145 138
+f 146 147 148
+f 149 150 151
+f 152 150 149
+f 153 150 152
+f 153 154 150
+f 155 154 153
+f 156 157 158
+f 156 151 150
+f 156 158 151
+f 159 156 150
+f 160 159 150
+f 161 160 150
+f 161 150 154
+f 162 161 154
+f 163 164 165
+f 163 154 164
+f 163 162 154
+f 163 166 162
+f 167 168 169
+f 167 169 170
+f 167 170 171
+f 172 167 173
+f 174 168 167
+f 174 167 172
+f 175 168 174
+f 176 177 178
+f 176 168 175
+f 179 180 157
+f 181 176 178
+f 181 168 176
+f 181 182 168
+f 183 184 185
+f 186 180 179
+f 186 179 185
+f 187 185 184
+f 188 187 189
+f 188 190 187
+f 191 192 193
+f 191 193 178
+f 191 178 194
+f 195 196 197
+f 198 199 195
+f 200 201 202
+f 203 196 195
+f 203 195 199
+f 204 203 199
+f 205 203 204
+f 205 196 203
+f 206 207 208
+f 209 210 211
+f 212 213 214
+f 215 216 217
+f 215 217 218
+f 219 220 210
+f 221 212 222
+f 221 213 212
+f 221 218 217
+f 221 222 218
+f 223 219 210
+f 224 223 210
+f 225 209 226
+f 225 210 209
+f 225 226 227
+f 225 224 210
+f 228 229 213
+f 228 213 221
+f 228 221 217
+f 230 228 217
+f 231 230 217
+f 232 217 216
+f 232 231 217
+f 233 232 216
+f 234 230 231
+f 234 231 232
+f 235 236 237
+f 238 234 232
+f 238 232 233
+f 239 240 241
+f 239 242 243
+f 239 243 240
+f 244 245 246
+f 244 247 245
+f 244 248 247
+f 244 249 248
+f 250 249 244
+f 251 249 250
+f 251 252 249
+f 253 254 242
+f 255 252 251
+f 256 252 255
+f 256 257 252
+f 258 257 256
+f 259 253 242
+f 260 257 258
+f 260 261 257
+f 262 261 260
+f 263 239 241
+f 263 242 239
+f 263 241 264
+f 263 259 242
+f 265 261 262
+f 265 266 261
+f 267 266 265
+f 268 269 266
+f 268 266 267
+f 270 271 272
+f 270 272 273
+f 270 273 274
+f 270 275 276
+f 270 277 275
+f 278 270 274
+f 278 277 270
+f 278 279 277
+f 280 278 274
+f 280 279 278
+f 281 279 280
+f 281 282 279
+f 283 282 281
+f 283 284 285
+f 283 286 282
+f 283 287 286
+f 283 285 287
+f 288 88 91
+f 288 91 289
+f 288 289 290
+f 288 290 291
+f 288 291 292
+f 288 292 293
+f 294 288 293
+f 295 293 296
+f 295 294 293
+f 297 295 296
+f 298 297 296
+f 298 296 299
+f 300 298 299
+f 301 302 303
+f 301 303 304
+f 305 302 301
+f 306 303 302
+f 307 306 302
+f 308 309 310
+f 311 312 313
+f 314 100 96
+f 314 315 100
+f 314 102 101
+f 314 316 317
+f 314 309 102
+f 314 101 316
+f 314 96 309
+f 314 317 315
+f 318 99 98
+f 319 318 98
+f 319 98 100
+f 320 319 100
+f 320 100 315
+f 320 315 317
+f 321 111 322
+f 323 317 316
+f 323 320 317
+f 324 101 103
+f 325 101 324
+f 325 324 326
+f 325 316 101
+f 327 325 326
+f 327 316 325
+f 327 326 328
+f 327 323 316
+f 329 122 99
+f 329 123 122
+f 330 329 99
+f 331 329 330
+f 332 109 108
+f 333 334 335
+f 336 332 108
+f 336 326 332
+f 336 108 116
+f 337 331 334
+f 338 328 326
+f 338 326 336
+f 339 340 337
+f 339 341 342
+f 343 344 340
+f 343 121 123
+f 343 123 344
+f 343 340 345
+f 343 126 121
+f 343 127 126
+f 343 345 127
+f 346 118 119
+f 347 348 349
+f 350 340 339
+f 350 339 342
+f 350 345 340
+f 351 346 119
+f 351 119 120
+f 352 341 347
+f 352 342 341
+f 353 350 342
+f 353 345 350
+f 354 355 356
+f 354 357 355
+f 354 345 353
+f 358 130 129
+f 359 358 129
+f 359 129 131
+f 360 128 356
+f 360 134 128
+f 361 136 362
+f 361 363 137
+f 361 137 136
+f 364 134 360
+f 365 140 139
+f 365 139 135
+f 366 140 365
+f 366 141 140
+f 367 141 366
+f 367 142 141
+f 368 369 362
+f 368 357 369
+f 370 368 148
+f 371 138 145
+f 371 146 148
+f 371 372 146
+f 371 136 138
+f 373 370 148
+f 373 148 147
+f 373 374 370
+f 375 376 377
+f 378 373 147
+f 378 374 373
+f 378 377 374
+f 379 151 158
+f 380 151 379
+f 380 149 151
+f 381 382 375
+f 383 381 384
+f 385 147 146
+f 385 378 147
+f 386 385 146
+f 386 146 372
+f 386 387 385
+f 386 372 388
+f 389 386 388
+f 390 388 143
+f 390 143 177
+f 390 389 388
+f 391 392 387
+f 393 165 164
+f 393 164 154
+f 393 154 155
+f 394 395 384
+f 396 173 394
+f 396 172 173
+f 397 395 394
+f 397 394 173
+f 397 173 167
+f 398 395 397
+f 398 397 167
+f 398 167 171
+f 399 157 156
+f 400 156 159
+f 400 159 160
+f 400 399 156
+f 401 174 172
+f 401 175 174
+f 401 172 396
+f 401 396 391
+f 402 176 175
+f 402 175 401
+f 403 177 176
+f 403 176 402
+f 404 165 405
+f 404 163 165
+f 406 404 405
+f 407 162 166
+f 408 179 157
+f 409 410 411
+f 409 412 410
+f 413 412 409
+f 414 185 179
+f 414 179 415
+f 414 411 410
+f 414 183 185
+f 414 410 412
+f 414 412 183
+f 414 415 411
+f 416 417 418
+f 419 420 184
+f 419 421 420
+f 422 421 419
+f 423 190 424
+f 423 186 185
+f 423 425 186
+f 423 185 187
+f 423 426 425
+f 423 424 426
+f 423 187 190
+f 427 180 186
+f 428 421 429
+f 428 430 421
+f 431 427 186
+f 432 431 186
+f 432 186 425
+f 433 428 429
+f 434 424 190
+f 435 434 190
+f 435 190 188
+f 436 437 438
+f 439 440 437
+f 441 442 443
+f 444 442 441
+f 445 446 447
+f 448 449 450
+f 451 195 197
+f 452 198 195
+f 452 195 451
+f 453 198 452
+f 453 454 198
+f 453 201 454
+f 455 191 194
+f 456 448 450
+f 456 457 448
+f 458 201 453
+f 458 202 201
+f 459 460 461
+f 462 463 464
+f 465 466 467
+f 465 467 462
+f 468 200 469
+f 468 199 198
+f 468 470 199
+f 468 469 470
+f 468 201 200
+f 468 198 454
+f 468 454 201
+f 471 463 462
+f 471 462 467
+f 472 463 471
+f 473 474 466
+f 473 475 474
+f 473 466 465
+f 473 465 459
+f 476 475 473
+f 477 475 476
+f 477 226 475
+f 477 194 226
+f 478 469 200
+f 478 479 469
+f 478 480 479
+f 481 205 204
+f 481 204 199
+f 481 482 205
+f 481 199 470
+f 481 208 207
+f 481 207 482
+f 483 467 466
+f 483 466 474
+f 483 474 475
+f 484 485 486
+f 487 469 479
+f 487 479 480
+f 488 214 196
+f 488 196 205
+f 489 490 483
+f 489 211 210
+f 489 210 220
+f 491 487 480
+f 491 480 486
+f 492 207 206
+f 493 491 486
+f 493 494 491
+f 493 486 485
+f 495 222 212
+f 495 212 214
+f 496 493 485
+f 496 485 220
+f 496 220 219
+f 496 219 497
+f 498 499 494
+f 500 501 215
+f 502 497 219
+f 503 504 216
+f 503 216 215
+f 503 215 501
+f 505 225 227
+f 505 224 225
+f 506 504 503
+f 506 507 504
+f 508 509 510
+f 511 235 237
+f 512 507 506
+f 512 513 507
+f 512 506 508
+f 514 233 216
+f 514 216 504
+f 515 228 230
+f 515 229 228
+f 515 230 234
+f 516 504 507
+f 516 514 504
+f 517 241 240
+f 517 227 241
+f 518 236 519
+f 518 520 513
+f 518 513 512
+f 518 519 520
+f 521 246 229
+f 521 229 515
+f 522 507 513
+f 522 516 507
+f 523 524 516
+f 523 516 522
+f 525 519 236
+f 525 526 240
+f 525 243 242
+f 525 236 235
+f 525 254 519
+f 525 240 243
+f 525 242 254
+f 525 235 526
+f 527 234 238
+f 528 513 520
+f 528 522 513
+f 528 520 519
+f 529 524 523
+f 530 244 246
+f 531 250 244
+f 531 244 530
+f 532 251 250
+f 532 256 255
+f 532 250 531
+f 532 255 251
+f 532 258 256
+f 533 534 529
+f 535 254 253
+f 536 537 534
+f 538 539 540
+f 541 263 264
+f 542 269 268
+f 542 543 269
+f 542 544 543
+f 542 545 544
+f 542 268 546
+f 547 545 542
+f 548 549 545
+f 548 545 547
+f 550 551 552
+f 550 549 548
+f 550 553 554
+f 550 552 553
+f 550 555 549
+f 550 556 555
+f 550 557 556
+f 550 554 557
+f 558 264 559
+f 558 541 264
+f 558 560 541
+f 561 562 563
+f 564 565 566
+f 564 567 565
+f 564 568 567
+f 564 569 568
+f 570 569 564
+f 570 571 569
+f 572 571 570
+f 573 571 572
+f 573 574 571
+f 573 575 574
+f 576 559 284
+f 577 578 579
+f 577 579 576
+f 577 281 280
+f 577 280 274
+f 577 283 281
+f 577 284 283
+f 577 274 580
+f 577 576 284
+f 577 580 578
+f 581 582 88
+f 581 297 298
+f 581 288 294
+f 581 294 295
+f 581 295 297
+f 581 88 288
+f 583 299 584
+f 583 584 585
+f 583 585 586
+f 583 300 299
+f 587 300 583
+f 587 583 586
+f 588 586 589
+f 588 587 586
+f 590 588 589
+f 590 589 591
+f 590 591 592
+f 593 88 582
+f 593 301 304
+f 593 582 581
+f 593 305 301
+f 594 89 88
+f 594 593 304
+f 594 88 593
+f 594 304 303
+f 594 94 89
+f 594 303 94
+f 595 588 590
+f 595 587 588
+f 596 595 590
+f 597 596 590
+f 598 599 302
+f 598 302 305
+f 600 601 599
+f 600 599 598
+f 602 603 92
+f 602 303 306
+f 602 94 303
+f 602 92 94
+f 604 602 306
+f 604 603 602
+f 605 302 599
+f 605 307 302
+f 606 599 601
+f 606 601 607
+f 606 605 599
+f 608 92 603
+f 609 603 604
+f 609 310 608
+f 609 608 603
+f 609 308 310
+f 610 93 92
+f 610 92 608
+f 610 608 310
+f 610 97 93
+f 610 95 97
+f 611 307 605
+f 611 605 606
+f 612 309 96
+f 612 610 310
+f 612 95 610
+f 612 310 309
+f 612 96 95
+f 613 607 614
+f 613 614 615
+f 616 606 607
+f 616 607 613
+f 616 611 606
+f 617 615 313
+f 617 613 615
+f 617 313 312
+f 618 611 616
+f 619 102 309
+f 619 309 308
+f 620 102 619
+f 620 103 102
+f 621 311 313
+f 621 313 622
+f 621 105 104
+f 621 622 105
+f 623 618 624
+f 625 626 103
+f 625 109 626
+f 625 103 620
+f 627 312 311
+f 628 627 311
+f 628 104 629
+f 628 311 621
+f 628 621 104
+f 628 629 627
+f 630 110 109
+f 630 109 625
+f 631 627 629
+f 631 321 322
+f 632 320 323
+f 632 319 320
+f 632 318 319
+f 632 99 318
+f 632 323 335
+f 633 110 630
+f 633 322 111
+f 633 111 110
+f 634 321 631
+f 634 629 104
+f 634 631 629
+f 635 334 331
+f 635 99 632
+f 635 632 335
+f 635 330 99
+f 635 335 334
+f 635 331 330
+f 636 324 103
+f 636 326 324
+f 636 109 332
+f 636 332 326
+f 636 103 626
+f 636 626 109
+f 637 114 113
+f 637 113 111
+f 637 111 321
+f 638 321 634
+f 638 634 104
+f 638 114 637
+f 638 637 321
+f 638 107 112
+f 638 104 107
+f 638 112 114
+f 639 327 328
+f 640 123 329
+f 640 329 331
+f 640 331 337
+f 640 337 340
+f 640 340 344
+f 640 344 123
+f 641 333 639
+f 641 341 339
+f 642 336 116
+f 642 338 336
+f 642 346 643
+f 644 642 116
+f 644 115 117
+f 644 116 115
+f 644 118 346
+f 644 346 642
+f 644 117 118
+f 645 642 643
+f 645 338 642
+f 646 645 643
+f 647 349 646
+f 647 646 643
+f 648 643 346
+f 648 346 351
+f 648 351 120
+f 649 356 128
+f 649 354 356
+f 649 345 354
+f 649 128 127
+f 649 127 345
+f 650 349 647
+f 651 347 349
+f 651 352 347
+f 651 349 650
+f 651 650 652
+f 653 353 342
+f 654 648 120
+f 654 120 142
+f 654 643 648
+f 655 653 363
+f 655 354 353
+f 655 353 653
+f 656 132 133
+f 656 359 131
+f 656 131 132
+f 657 357 354
+f 657 354 655
+f 657 363 361
+f 657 655 363
+f 658 356 355
+f 658 360 356
+f 658 355 357
+f 659 656 133
+f 659 134 364
+f 659 133 134
+f 660 130 358
+f 660 358 359
+f 661 363 662
+f 661 135 137
+f 661 137 363
+f 661 365 135
+f 663 367 366
+f 663 142 367
+f 663 652 654
+f 663 654 142
+f 663 366 365
+f 664 361 362
+f 664 362 369
+f 664 357 657
+f 664 657 361
+f 664 369 357
+f 665 659 364
+f 666 357 368
+f 666 368 370
+f 666 658 357
+f 667 364 666
+f 667 666 370
+f 667 370 374
+f 668 158 130
+f 668 660 669
+f 668 130 660
+f 670 375 382
+f 670 376 375
+f 671 670 382
+f 671 669 670
+f 672 368 362
+f 672 136 371
+f 672 148 368
+f 672 362 136
+f 672 371 148
+f 673 668 674
+f 673 380 379
+f 673 379 158
+f 673 158 668
+f 675 671 382
+f 676 372 371
+f 676 371 145
+f 676 144 143
+f 676 145 144
+f 676 143 388
+f 676 388 372
+f 677 382 381
+f 677 674 675
+f 677 381 383
+f 677 675 382
+f 678 375 377
+f 678 381 375
+f 679 377 378
+f 679 392 678
+f 679 678 377
+f 680 681 155
+f 682 149 380
+f 682 152 149
+f 682 153 152
+f 682 155 153
+f 683 384 381
+f 683 678 392
+f 683 381 678
+f 684 384 683
+f 684 683 392
+f 684 394 384
+f 685 398 171
+f 685 171 405
+f 685 395 398
+f 686 387 386
+f 686 386 389
+f 686 390 177
+f 686 389 390
+f 686 391 387
+f 687 686 177
+f 687 391 686
+f 687 401 391
+f 687 402 401
+f 687 177 403
+f 687 403 402
+f 688 408 157
+f 688 689 408
+f 688 157 399
+f 688 399 400
+f 690 160 161
+f 690 400 160
+f 690 688 400
+f 690 689 688
+f 690 407 689
+f 690 161 162
+f 690 162 407
+f 691 406 405
+f 691 405 171
+f 691 171 170
+f 692 166 163
+f 693 694 692
+f 693 692 163
+f 693 163 404
+f 695 407 166
+f 695 166 692
+f 695 692 694
+f 695 696 407
+f 697 413 409
+f 697 696 413
+f 697 689 407
+f 697 407 696
+f 698 179 408
+f 698 697 409
+f 698 409 411
+f 698 408 689
+f 698 415 179
+f 698 689 697
+f 698 411 415
+f 699 700 694
+f 699 701 700
+f 702 694 700
+f 702 700 418
+f 702 695 694
+f 702 696 695
+f 703 181 178
+f 703 182 181
+f 703 178 193
+f 703 704 182
+f 703 701 704
+f 705 418 417
+f 705 702 418
+f 705 696 702
+f 706 705 417
+f 706 696 705
+f 707 696 706
+f 707 706 417
+f 707 413 696
+f 708 413 707
+f 708 707 417
+f 709 700 701
+f 709 418 700
+f 710 708 417
+f 711 712 709
+f 711 709 701
+f 711 193 712
+f 711 703 193
+f 711 701 703
+f 713 714 710
+f 713 417 416
+f 713 710 417
+f 715 418 709
+f 715 709 712
+f 716 714 713
+f 717 714 716
+f 717 716 422
+f 717 184 183
+f 717 419 184
+f 717 183 714
+f 717 422 419
+f 718 715 712
+f 718 416 418
+f 718 418 715
+f 719 720 416
+f 719 416 718
+f 719 721 720
+f 722 192 721
+f 722 718 712
+f 722 193 192
+f 722 712 193
+f 723 184 420
+f 723 187 184
+f 723 420 421
+f 723 430 724
+f 723 189 187
+f 723 724 189
+f 723 421 430
+f 725 429 421
+f 725 421 422
+f 726 429 727
+f 726 727 728
+f 726 433 429
+f 729 425 426
+f 729 432 425
+f 729 426 424
+f 729 424 434
+f 730 724 430
+f 730 430 428
+f 730 428 433
+f 730 433 731
+f 732 729 434
+f 732 434 438
+f 732 432 729
+f 733 724 730
+f 734 431 432
+f 734 732 438
+f 734 432 732
+f 734 427 431
+f 734 180 427
+f 734 438 437
+f 735 728 192
+f 735 726 728
+f 736 180 734
+f 736 734 437
+f 736 437 440
+f 737 180 736
+f 737 736 440
+f 738 733 739
+f 738 739 443
+f 740 741 738
+f 740 738 443
+f 740 443 442
+f 742 741 740
+f 742 435 743
+f 742 740 442
+f 742 743 741
+f 744 742 442
+f 744 436 438
+f 745 436 744
+f 745 744 442
+f 746 739 731
+f 747 746 731
+f 748 749 750
+f 748 735 192
+f 748 731 735
+f 748 747 731
+f 748 192 191
+f 748 191 749
+f 751 441 443
+f 751 750 441
+f 751 739 746
+f 751 748 750
+f 751 443 739
+f 751 746 747
+f 751 747 748
+f 752 745 442
+f 753 440 439
+f 754 197 180
+f 754 180 737
+f 754 737 440
+f 755 756 757
+f 755 757 447
+f 758 750 749
+f 758 444 441
+f 758 441 750
+f 759 450 449
+f 760 197 754
+f 760 754 449
+f 761 762 461
+f 761 763 444
+f 761 444 762
+f 761 757 763
+f 764 197 760
+f 764 449 448
+f 764 448 457
+f 764 760 449
+f 765 444 758
+f 765 455 762
+f 765 758 749
+f 765 191 455
+f 765 762 444
+f 765 749 191
+f 766 458 453
+f 766 197 764
+f 766 451 197
+f 766 452 451
+f 766 764 457
+f 766 453 452
+f 766 457 458
+f 767 761 461
+f 767 461 460
+f 767 757 761
+f 768 757 767
+f 768 767 460
+f 769 447 757
+f 769 757 768
+f 769 768 460
+f 769 445 447
+f 770 445 464
+f 770 456 450
+f 771 464 445
+f 771 445 769
+f 771 769 460
+f 772 461 762
+f 772 762 455
+f 773 464 463
+f 773 770 464
+f 773 456 770
+f 774 464 771
+f 774 771 460
+f 775 460 459
+f 775 774 460
+f 775 464 774
+f 775 459 465
+f 776 463 777
+f 776 773 463
+f 776 456 773
+f 778 462 464
+f 778 464 775
+f 778 775 465
+f 778 465 462
+f 779 459 461
+f 779 461 772
+f 779 772 455
+f 779 455 194
+f 780 200 202
+f 780 202 458
+f 780 777 781
+f 780 458 777
+f 782 459 779
+f 782 779 194
+f 782 473 459
+f 782 476 473
+f 782 477 476
+f 782 194 477
+f 783 777 463
+f 783 781 777
+f 783 463 472
+f 783 784 781
+f 785 200 780
+f 785 780 781
+f 785 781 784
+f 785 478 200
+f 786 483 490
+f 786 467 483
+f 786 471 467
+f 786 472 471
+f 786 490 472
+f 787 484 784
+f 787 472 490
+f 787 783 472
+f 787 784 783
+f 788 784 484
+f 788 478 785
+f 788 480 478
+f 788 486 480
+f 788 785 784
+f 788 484 486
+f 789 481 470
+f 789 470 469
+f 789 469 487
+f 789 208 481
+f 790 485 484
+f 790 489 220
+f 790 220 485
+f 790 490 489
+f 790 787 490
+f 790 484 787
+f 791 792 488
+f 791 488 205
+f 791 207 492
+f 791 205 482
+f 791 482 207
+f 793 789 487
+f 793 491 494
+f 793 487 491
+f 793 208 789
+f 794 488 792
+f 794 495 214
+f 794 214 488
+f 795 208 793
+f 795 494 499
+f 795 793 494
+f 796 208 795
+f 796 206 208
+f 796 795 499
+f 797 796 499
+f 797 492 206
+f 797 206 796
+f 797 798 492
+f 799 211 489
+f 799 489 483
+f 799 475 226
+f 799 209 211
+f 799 226 209
+f 799 483 475
+f 800 791 492
+f 800 792 791
+f 800 798 500
+f 800 500 792
+f 800 492 798
+f 801 794 792
+f 801 495 794
+f 801 222 495
+f 801 792 500
+f 801 500 215
+f 801 218 222
+f 801 215 218
+f 802 797 499
+f 802 798 797
+f 803 494 493
+f 803 498 494
+f 803 493 496
+f 803 496 497
+f 803 497 502
+f 804 798 802
+f 804 802 805
+f 806 499 498
+f 807 803 502
+f 807 806 498
+f 807 808 806
+f 807 498 803
+f 807 502 808
+f 809 798 804
+f 809 510 509
+f 810 500 798
+f 810 809 509
+f 810 798 809
+f 811 806 808
+f 812 500 810
+f 812 501 500
+f 812 810 509
+f 812 506 503
+f 812 503 501
+f 812 509 508
+f 812 508 506
+f 813 805 811
+f 813 811 808
+f 814 502 219
+f 814 224 505
+f 814 815 502
+f 814 219 223
+f 814 223 224
+f 816 502 815
+f 816 511 808
+f 816 808 502
+f 817 813 808
+f 817 511 237
+f 817 510 813
+f 817 808 511
+f 818 237 236
+f 818 510 817
+f 818 817 237
+f 819 818 236
+f 819 510 818
+f 819 508 510
+f 820 517 815
+f 820 505 227
+f 820 814 505
+f 820 815 814
+f 820 227 517
+f 821 819 236
+f 821 236 518
+f 821 512 508
+f 821 508 819
+f 821 518 512
+f 822 815 517
+f 822 240 526
+f 822 511 816
+f 822 816 815
+f 822 235 511
+f 822 517 240
+f 822 526 235
+f 823 514 516
+f 823 233 514
+f 823 516 524
+f 824 238 233
+f 824 823 524
+f 824 233 823
+f 825 234 527
+f 825 826 521
+f 825 521 515
+f 825 515 234
+f 827 246 521
+f 827 532 531
+f 827 521 826
+f 827 530 246
+f 827 531 530
+f 828 527 238
+f 829 524 529
+f 829 828 238
+f 829 529 534
+f 829 534 537
+f 829 824 524
+f 829 238 824
+f 829 537 828
+f 830 522 528
+f 830 523 522
+f 831 832 527
+f 831 527 828
+f 831 828 537
+f 833 834 830
+f 833 535 834
+f 833 519 254
+f 833 254 535
+f 833 528 519
+f 833 830 528
+f 835 830 834
+f 835 533 529
+f 835 529 523
+f 835 523 830
+f 836 832 837
+f 836 527 832
+f 836 837 826
+f 836 825 527
+f 836 826 825
+f 838 827 826
+f 838 258 532
+f 838 837 546
+f 838 826 837
+f 838 260 258
+f 838 268 267
+f 838 262 260
+f 838 267 265
+f 838 265 262
+f 838 546 268
+f 838 532 827
+f 839 533 835
+f 839 834 539
+f 839 835 834
+f 840 832 831
+f 840 537 536
+f 840 536 553
+f 840 553 552
+f 840 831 537
+f 841 533 839
+f 841 839 539
+f 842 533 841
+f 842 841 539
+f 842 539 538
+f 842 538 843
+f 844 535 253
+f 844 263 541
+f 844 253 259
+f 844 259 263
+f 844 541 560
+f 844 560 540
+f 845 840 552
+f 845 837 832
+f 845 552 551
+f 845 832 840
+f 846 837 845
+f 846 845 551
+f 846 546 837
+f 846 548 547
+f 846 542 546
+f 846 550 548
+f 846 551 550
+f 846 547 542
+f 847 536 534
+f 847 842 843
+f 847 533 842
+f 847 534 533
+f 848 538 540
+f 848 560 558
+f 848 558 849
+f 848 540 560
+f 850 536 847
+f 850 847 851
+f 850 554 553
+f 850 564 566
+f 850 553 536
+f 850 851 564
+f 850 852 554
+f 850 566 852
+f 853 848 849
+f 853 561 843
+f 853 538 848
+f 853 849 561
+f 853 843 538
+f 854 851 847
+f 854 847 843
+f 854 843 561
+f 854 561 563
+f 855 854 563
+f 855 564 851
+f 855 851 854
+f 855 570 564
+f 855 572 570
+f 855 563 573
+f 855 573 572
+f 856 579 578
+f 856 559 576
+f 856 576 579
+f 856 558 559
+f 856 849 558
+f 856 578 580
+f 857 849 856
+f 857 858 859
+f 857 562 561
+f 857 272 271
+f 857 273 272
+f 857 274 273
+f 857 271 858
+f 857 580 274
+f 857 561 849
+f 857 859 562
+f 857 856 580
+f 860 563 562
+f 860 859 858
+f 860 271 270
+f 860 573 563
+f 860 858 271
+f 860 575 573
+f 860 861 575
+f 860 862 861
+f 860 276 862
+f 860 270 276
+f 860 562 859
+f 863 300 587
+f 863 587 595
+f 863 581 298
+f 863 298 300
+f 864 581 863
+f 864 593 581
+f 864 305 593
+f 864 863 595
+f 865 590 592
+f 865 592 866
+f 865 866 867
+f 868 867 869
+f 868 865 867
+f 870 868 869
+f 871 869 872
+f 871 870 869
+f 873 872 874
+f 873 871 872
+f 875 614 607
+f 875 876 877
+f 875 601 600
+f 875 607 601
+f 875 600 876
+f 878 604 306
+f 878 307 611
+f 878 306 307
+f 879 308 609
+f 879 604 878
+f 879 878 611
+f 879 609 604
+f 880 611 618
+f 880 308 879
+f 880 618 623
+f 880 879 611
+f 881 616 613
+f 881 613 617
+f 881 617 312
+f 882 619 308
+f 882 308 880
+f 882 625 620
+f 882 623 625
+f 882 880 623
+f 882 620 619
+f 883 881 312
+f 884 627 631
+f 884 624 883
+f 884 312 627
+f 884 883 312
+f 885 624 884
+f 885 631 322
+f 885 884 631
+f 886 633 630
+f 886 322 633
+f 886 885 322
+f 886 624 885
+f 887 323 327
+f 887 333 335
+f 887 639 333
+f 887 327 639
+f 887 335 323
+f 888 337 334
+f 888 334 333
+f 888 333 641
+f 888 641 339
+f 888 339 337
+f 889 639 328
+f 890 889 348
+f 890 639 889
+f 890 641 639
+f 890 348 347
+f 891 641 890
+f 891 890 347
+f 891 341 641
+f 891 347 341
+f 892 349 348
+f 892 645 646
+f 892 646 349
+f 892 338 645
+f 893 647 643
+f 893 643 654
+f 894 352 651
+f 894 651 662
+f 895 893 654
+f 895 650 647
+f 895 647 893
+f 895 652 650
+f 895 654 652
+f 896 662 363
+f 896 352 894
+f 896 363 653
+f 896 894 662
+f 896 653 342
+f 896 342 352
+f 897 663 365
+f 897 651 652
+f 897 662 651
+f 897 652 663
+f 898 659 665
+f 898 359 656
+f 898 656 659
+f 898 660 359
+f 899 661 662
+f 899 662 897
+f 899 897 365
+f 899 365 661
+f 900 666 364
+f 900 658 666
+f 900 364 360
+f 900 360 658
+f 901 665 670
+f 901 670 669
+f 901 660 898
+f 901 669 660
+f 901 898 665
+f 902 376 670
+f 902 670 665
+f 903 668 669
+f 903 669 671
+f 903 671 675
+f 904 674 668
+f 904 675 674
+f 904 668 903
+f 904 903 675
+f 905 674 677
+f 905 677 680
+f 905 673 674
+f 906 380 673
+f 906 682 380
+f 906 680 155
+f 906 155 682
+f 906 673 905
+f 906 905 680
+f 907 677 383
+f 907 680 677
+f 907 681 680
+f 908 378 385
+f 908 679 378
+f 908 385 387
+f 909 392 679
+f 909 387 392
+f 909 679 908
+f 909 908 387
+f 910 684 392
+f 910 392 391
+f 911 394 684
+f 911 684 910
+f 911 391 396
+f 911 396 394
+f 911 910 391
+f 912 405 165
+f 912 165 393
+f 912 685 405
+f 912 681 685
+f 913 169 168
+f 913 168 182
+f 913 182 704
+f 914 701 699
+f 914 704 701
+f 914 913 704
+f 915 413 708
+f 915 708 710
+f 915 710 714
+f 915 412 413
+f 915 183 412
+f 915 714 183
+f 916 716 713
+f 916 416 720
+f 916 713 416
+f 917 722 721
+f 917 719 718
+f 917 721 719
+f 917 718 722
+f 918 720 721
+f 919 727 429
+f 919 728 727
+f 919 429 725
+f 920 738 741
+f 920 189 724
+f 920 188 189
+f 920 435 188
+f 920 743 435
+f 920 741 743
+f 920 724 733
+f 920 733 738
+f 921 433 726
+f 921 726 735
+f 921 735 731
+f 921 731 433
+f 922 730 731
+f 922 733 730
+f 922 739 733
+f 922 731 739
+f 923 438 434
+f 923 434 435
+f 923 742 744
+f 923 435 742
+f 923 744 438
+f 924 437 436
+f 924 436 756
+f 924 439 437
+f 925 745 752
+f 925 756 436
+f 925 436 745
+f 926 755 439
+f 926 756 755
+f 926 924 756
+f 926 439 924
+f 927 754 440
+f 927 440 753
+f 928 763 752
+f 928 444 763
+f 928 442 444
+f 928 752 442
+f 929 757 756
+f 929 752 763
+f 929 925 752
+f 929 756 925
+f 929 763 757
+f 930 753 439
+f 930 755 447
+f 930 447 446
+f 930 439 755
+f 931 449 754
+f 931 759 449
+f 931 754 927
+f 932 759 446
+f 932 446 445
+f 932 450 759
+f 932 770 450
+f 932 445 770
+f 933 457 456
+f 933 776 777
+f 933 458 457
+f 933 777 458
+f 933 456 776
+f 934 802 499
+f 934 805 802
+f 934 499 806
+f 934 811 805
+f 934 806 811
+f 935 804 805
+f 935 809 804
+f 935 510 809
+f 935 805 813
+f 935 813 510
+f 936 844 540
+f 936 539 834
+f 936 834 535
+f 936 540 539
+f 936 535 844
+f 937 865 868
+f 937 597 590
+f 937 590 865
+f 937 868 870
+f 938 874 939
+f 938 939 940
+f 938 873 874
+f 941 938 940
+f 942 941 940
+f 942 940 943
+f 942 943 944
+f 942 944 945
+f 946 305 864
+f 946 864 595
+f 946 596 597
+f 946 595 596
+f 947 876 946
+f 947 597 937
+f 947 946 597
+f 948 598 305
+f 948 305 946
+f 948 600 598
+f 948 946 876
+f 948 876 600
+f 949 938 941
+f 949 873 938
+f 949 941 942
+f 950 949 942
+f 951 950 942
+f 952 951 942
+f 953 614 875
+f 953 875 877
+f 954 614 953
+f 954 615 614
+f 955 615 954
+f 956 881 883
+f 956 616 881
+f 957 956 883
+f 957 616 956
+f 957 883 624
+f 957 618 616
+f 957 624 618
+f 958 630 625
+f 958 624 886
+f 958 623 624
+f 958 886 630
+f 958 625 623
+f 959 348 889
+f 959 328 338
+f 959 889 328
+f 959 892 348
+f 959 338 892
+f 960 364 667
+f 960 667 374
+f 960 377 376
+f 960 376 902
+f 960 374 377
+f 961 384 395
+f 961 383 384
+f 961 685 681
+f 961 907 383
+f 961 395 685
+f 961 681 907
+f 962 155 681
+f 962 393 155
+f 962 912 393
+f 962 681 912
+f 963 170 169
+f 963 169 913
+f 963 691 170
+f 964 963 913
+f 964 913 914
+f 965 916 720
+f 965 720 918
+f 965 422 716
+f 965 918 919
+f 965 716 916
+f 965 725 422
+f 965 919 725
+f 966 728 919
+f 966 721 192
+f 966 192 728
+f 966 919 918
+f 966 918 721
+f 967 927 753
+f 967 446 759
+f 967 930 446
+f 967 759 931
+f 967 931 927
+f 967 753 930
+f 968 873 949
+f 968 871 873
+f 968 937 870
+f 968 870 871
+f 969 968 949
+f 969 937 968
+f 969 947 937
+f 970 942 945
+f 970 945 971
+f 970 971 972
+f 970 952 942
+f 973 970 972
+f 974 972 975
+f 974 973 972
+f 976 974 975
+f 977 975 978
+f 977 976 975
+f 979 969 949
+f 979 949 950
+f 979 950 951
+f 979 951 952
+f 980 978 981
+f 980 977 978
+f 982 877 979
+f 982 953 877
+f 982 954 953
+f 983 313 615
+f 983 615 955
+f 984 985 986
+f 984 622 313
+f 984 983 985
+f 984 313 983
+f 987 665 364
+f 987 960 902
+f 987 902 665
+f 987 364 960
+f 988 691 963
+f 988 963 964
+f 988 406 691
+f 989 699 694
+f 989 988 964
+f 990 979 877
+f 990 877 876
+f 990 947 969
+f 990 969 979
+f 990 876 947
+f 991 952 970
+f 991 970 973
+f 991 973 974
+f 991 974 976
+f 992 981 993
+f 992 993 994
+f 992 980 981
+f 995 992 994
+f 996 994 997
+f 996 997 998
+f 996 998 999
+f 996 999 1000
+f 996 995 994
+f 1001 982 979
+f 1001 979 952
+f 1002 986 985
+f 1002 1001 952
+f 1002 952 991
+f 1002 985 1001
+f 1003 992 995
+f 1003 995 996
+f 1003 996 1000
+f 1003 1000 106
+f 1004 985 983
+f 1004 982 1001
+f 1004 954 982
+f 1004 955 954
+f 1004 983 955
+f 1004 1001 985
+f 1005 984 986
+f 1005 622 984
+f 1005 1003 106
+f 1005 986 1003
+f 1005 106 105
+f 1005 105 622
+f 1006 694 693
+f 1006 989 694
+f 1006 693 404
+f 1006 406 988
+f 1006 404 406
+f 1006 988 989
+f 1007 964 914
+f 1007 699 989
+f 1007 914 699
+f 1007 989 964
+f 1008 980 992
+f 1008 976 977
+f 1008 992 1003
+f 1008 977 980
+f 1008 991 976
+f 1009 991 1008
+f 1009 1002 991
+f 1009 1003 986
+f 1009 1008 1003
+f 1009 986 1002
+f 1000 999 1010
+f 999 998 1010
+f 1010 1011 1000
+f 998 1012 1010
+f 1011 1013 1000
+f 998 997 1012
+f 1012 994 1014
+f 997 994 1012
+f 1014 993 1015
+f 994 993 1014
+f 1015 981 1016
+f 993 981 1015
+f 981 978 1016
+f 1016 978 1017
+f 978 975 1017
+f 1017 975 1018
+f 975 1019 1018
+f 975 972 1019
+f 972 1020 1019
+f 972 971 1020
+f 971 1021 1020
+f 971 945 1021
+f 945 1022 1021
+f 945 944 1022
+f 944 1023 1022
+f 944 943 1023
+f 943 1024 1023
+f 940 1024 943
+f 940 1025 1024
+f 939 1025 940
+f 1026 91 90
+f 939 1027 1025
+f 874 1027 939
+f 1026 289 91
+f 874 1028 1027
+f 872 1028 874
+f 869 1029 872
+f 872 1029 1028
+f 289 1030 290
+f 1026 1030 289
+f 290 1031 291
+f 1030 1031 290
+f 867 1032 869
+f 869 1032 1029
+f 291 1033 292
+f 1031 1033 291
+f 866 1034 867
+f 867 1034 1032
+f 292 1035 293
+f 1033 1035 292
+f 592 1036 866
+f 866 1036 1034
+f 293 1037 296
+f 1035 1037 293
+f 591 1038 592
+f 592 1038 1036
+f 296 1039 299
+f 1037 1039 296
+f 589 1040 591
+f 591 1040 1038
+f 299 1041 584
+f 1039 1041 299
+f 589 1042 1040
+f 586 1042 589
+f 1041 1043 584
+f 586 1044 1042
+f 585 1044 586
+f 585 1045 1044
+f 584 1045 585
+f 1043 1045 584
+f 106 1000 1013
+f 1046 106 1013
+f 107 106 1046
+f 1047 107 1046
+f 120 107 1047
+f 1048 120 1047
+f 142 120 1048
+f 1049 142 1048
+f 143 142 1049
+f 1050 143 1049
+f 177 143 1050
+f 1051 177 1050
+f 178 177 1051
+f 1052 178 1051
+f 194 178 1052
+f 1053 194 1052
+f 226 194 1053
+f 1054 226 1053
+f 227 226 1054
+f 1055 227 1054
+f 241 227 1055
+f 1056 241 1055
+f 264 241 1056
+f 1057 264 1056
+f 559 264 1057
+f 1058 559 1057
+f 284 559 1058
+f 1059 285 284
+f 1059 284 1058
+f 287 285 1060
+f 286 287 1060
+f 1061 1060 285
+f 1062 286 1060
+f 1059 1061 285
+f 282 286 1062
+f 279 1062 1063
+f 279 282 1062
+f 277 1063 1064
+f 277 279 1063
+f 275 1064 1065
+f 275 277 1064
+f 276 275 1065
+f 276 1065 1066
+f 862 276 1066
+f 862 1066 1067
+f 1068 862 1067
+f 861 862 1068
+f 1069 861 1068
+f 575 861 1069
+f 1070 575 1069
+f 574 575 1070
+f 1071 574 1070
+f 571 574 1071
+f 1072 571 1071
+f 569 571 1072
+f 1073 569 1072
+f 1073 568 569
+f 1074 568 1073
+f 1074 567 568
+f 247 1075 245
+f 1076 567 1074
+f 1076 565 567
+f 248 1075 247
+f 1077 565 1076
+f 1077 566 565
+f 1078 852 566
+f 1078 566 1077
+f 1079 248 249
+f 1079 1075 248
+f 1080 249 252
+f 1080 1079 249
+f 1081 554 852
+f 1081 852 1078
+f 1082 252 257
+f 1082 1080 252
+f 1083 557 554
+f 1083 554 1081
+f 1084 257 261
+f 1084 1082 257
+f 1085 556 557
+f 1085 557 1083
+f 1086 261 266
+f 1086 1084 261
+f 1087 555 556
+f 1087 556 1085
+f 1088 266 269
+f 1088 1086 266
+f 1089 549 555
+f 1089 555 1087
+f 1090 269 543
+f 1090 1088 269
+f 1091 549 1089
+f 1091 545 549
+f 1092 1090 543
+f 1093 545 1091
+f 1093 544 545
+f 1094 544 1093
+f 1094 543 544
+f 1094 1092 543
+f 1095 1030 1026
+f 1096 1026 1097
+f 1096 1095 1026
+f 1098 1099 1095
+f 1098 1095 1096
+f 1100 1101 1099
+f 1100 1099 1098
+f 1102 1103 1101
+f 1102 1101 1100
+f 1104 1105 1103
+f 1104 1103 1102
+f 1106 1107 1105
+f 1106 1105 1104
+f 1108 1109 1107
+f 1108 1107 1106
+f 1110 1111 1109
+f 1110 1109 1108
+f 1112 1113 1111
+f 1112 1111 1110
+f 1114 1115 1113
+f 1114 1113 1112
+f 1116 1117 1115
+f 1116 1115 1114
+f 1118 1119 1117
+f 1118 1117 1116
+f 1120 1121 1119
+f 1120 1119 1118
+f 1122 1123 1121
+f 1122 1121 1120
+f 1075 1079 1123
+f 1075 1123 1122
+f 1124 1075 1122
+f 1125 1126 1127
+f 1127 1126 1128
+f 1125 1129 1130
+f 1126 1125 1130
+f 1131 1132 1133
+f 1134 1131 1133
+f 1135 1131 1136
+f 1131 1134 1136
+f 1137 1138 1139
+f 1140 1137 1139
+f 1141 1137 1140
+f 1142 1141 1140
+f 1143 1141 1142
+f 1144 1143 1142
+f 1145 1143 1144
+f 1146 1145 1144
+f 1147 1145 1146
+f 1148 1147 1146
+f 1149 1147 1148
+f 1150 1149 1148
+f 1151 1149 1150
+f 1152 1151 1150
+f 1153 1151 1152
+f 1154 1153 1152
+f 1155 1153 1154
+f 1156 1155 1154
+f 1157 1155 1156
+f 1158 1157 1156
+f 1159 1157 1158
+f 1160 1159 1158
+f 1161 1159 1160
+f 1162 1161 1160
+f 1163 1161 1162
+f 1164 1163 1162
+f 1165 1163 1164
+f 1166 1165 1164
+f 1167 1165 1166
+f 1168 1167 1166
+f 1135 1136 1139
+f 1135 1139 1138
+f 1168 1130 1167
+f 1130 1129 1167
+f 1132 1097 1026
+f 1133 1132 1026
+f 1124 1127 1075
+f 1127 1128 1075
+f 1169 1170 1012
+f 1169 1012 1014
+f 1169 1014 1015
+f 1169 1015 1016
+f 1171 1169 1016
+f 1172 1016 1017
+f 1172 1171 1016
+f 1173 1172 1017
+f 1174 1173 1017
+f 1174 1017 1018
+f 1175 1018 1019
+f 1175 1019 1020
+f 1175 1020 1021
+f 1175 1021 1022
+f 1175 1174 1018
+f 1175 1176 1174
+f 1175 1177 1176
+f 1178 1177 1175
+f 1179 1178 1175
+f 1180 1179 1175
+f 1181 1180 1175
+f 1181 1175 1182
+f 1183 1042 1044
+f 1183 1044 1045
+f 1183 1045 1043
+f 1183 1043 1041
+f 1183 1184 1042
+f 1185 1184 1183
+f 1186 1185 1183
+f 1187 1186 1183
+f 1188 1187 1183
+f 1189 1188 1183
+f 1190 1189 1183
+f 1190 1183 1041
+f 1191 1041 1039
+f 1191 1190 1041
+f 1192 1191 1039
+f 1193 1192 1039
+f 1193 1039 1037
+f 1194 1193 1037
+f 1195 1037 1035
+f 1195 1035 1033
+f 1195 1194 1037
+f 1195 1033 1031
+f 1195 1031 1030
+f 1195 1030 1095
+f 1196 1197 1198
+f 1199 1200 1198
+f 1199 1198 1197
+f 1201 1199 1197
+f 1202 1201 1197
+f 1202 1197 1203
+f 1204 1205 1206
+f 1207 1205 1204
+f 1208 1206 1205
+f 1209 1208 1205
+f 1210 1209 1205
+f 1210 1099 1101
+f 1210 1205 1207
+f 1210 1207 1099
+f 1211 1212 1213
+f 1214 1215 1216
+f 1217 1218 1211
+f 1219 1220 1218
+f 1219 1218 1217
+f 1221 1211 1218
+f 1221 1212 1211
+f 1222 1221 1218
+f 1223 1224 1225
+f 1226 1224 1223
+f 1227 1224 1226
+f 1228 1225 1224
+f 1229 1228 1224
+f 1230 1231 1232
+f 1230 1233 1231
+f 1234 1227 1103
+f 1234 1224 1227
+f 1234 1103 1105
+f 1234 1229 1224
+f 1235 1233 1230
+f 1236 1237 1233
+f 1236 1233 1235
+f 1238 1239 1240
+f 1241 1242 1243
+f 1244 1242 1241
+f 1245 1242 1244
+f 1246 1247 1243
+f 1248 1243 1242
+f 1248 1246 1243
+f 1248 1249 1246
+f 1250 1248 1242
+f 1251 1250 1242
+f 1251 1107 1109
+f 1251 1242 1245
+f 1251 1245 1107
+f 1252 1253 1254
+f 1255 1256 1252
+f 1257 1255 1252
+f 1258 1259 1109
+f 1258 1109 1111
+f 1258 1254 1259
+f 1260 1261 1262
+f 1260 1263 1261
+f 1264 1265 1266
+f 1264 1266 1262
+f 1264 1262 1261
+f 1267 1264 1261
+f 1268 1113 1115
+f 1268 1269 1270
+f 1271 1272 1269
+f 1273 1268 1115
+f 1273 1269 1268
+f 1273 1271 1269
+f 1274 1275 1276
+f 1274 1277 1278
+f 1274 1279 1275
+f 1274 1276 1277
+f 1280 1281 1282
+f 1280 1278 1277
+f 1280 1282 1278
+f 1283 1280 1277
+f 1283 1277 1276
+f 1284 1285 1286
+f 1287 1283 1276
+f 1287 1288 1283
+f 1289 1285 1284
+f 1290 1285 1289
+f 1290 1117 1119
+f 1290 1119 1285
+f 1291 1286 1285
+f 1292 1291 1285
+f 1293 1062 1294
+f 1293 1294 1295
+f 1293 1063 1062
+f 1293 1064 1063
+f 1293 1065 1064
+f 1296 1293 1295
+f 1296 1065 1293
+f 1296 1066 1065
+f 1297 1296 1295
+f 1297 1066 1296
+f 1298 1292 1285
+f 1298 1119 1121
+f 1298 1285 1119
+f 1299 1067 1066
+f 1299 1297 1295
+f 1299 1066 1297
+f 1300 1295 1301
+f 1300 1301 1302
+f 1300 1067 1299
+f 1300 1068 1067
+f 1300 1069 1068
+f 1300 1299 1295
+f 1303 1304 1305
+f 1306 1072 1071
+f 1306 1073 1072
+f 1306 1074 1073
+f 1306 1076 1074
+f 1307 1091 1089
+f 1307 1093 1091
+f 1307 1094 1093
+f 1308 1094 1307
+f 1308 1092 1094
+f 1309 1092 1308
+f 1310 1092 1309
+f 1310 1090 1092
+f 1311 1090 1310
+f 1312 1090 1311
+f 1312 1088 1090
+f 1313 1088 1312
+f 1314 1088 1313
+f 1314 1086 1088
+f 1315 1086 1314
+f 1316 1086 1315
+f 1316 1123 1079
+f 1316 1084 1086
+f 1316 1082 1084
+f 1316 1080 1082
+f 1316 1079 1080
+f 1317 1022 1023
+f 1317 1023 1024
+f 1317 1024 1025
+f 1317 1025 1027
+f 1317 1027 1028
+f 1317 1175 1022
+f 1317 1182 1175
+f 1318 1169 1171
+f 1318 1170 1169
+f 1319 1318 1171
+f 1320 1171 1172
+f 1320 1319 1171
+f 1321 1320 1172
+f 1322 1172 1173
+f 1322 1321 1172
+f 1322 1173 1174
+f 1322 1174 1176
+f 1322 1176 1177
+f 1322 1177 1178
+f 1322 1178 1179
+f 1323 1032 1034
+f 1323 1034 1036
+f 1323 1036 1038
+f 1323 1038 1040
+f 1323 1040 1042
+f 1323 1042 1184
+f 1324 1181 1182
+f 1324 1182 1325
+f 1324 1325 1326
+f 1327 1180 1181
+f 1327 1322 1179
+f 1327 1179 1180
+f 1328 1181 1324
+f 1328 1326 1329
+f 1328 1327 1181
+f 1328 1324 1326
+f 1330 1198 1170
+f 1331 1332 1333
+f 1331 1333 1330
+f 1334 1326 1335
+f 1334 1184 1185
+f 1334 1335 1184
+f 1336 1332 1331
+f 1337 1329 1326
+f 1337 1326 1334
+f 1338 1198 1330
+f 1338 1330 1333
+f 1339 1329 1340
+f 1341 1185 1186
+f 1341 1337 1334
+f 1341 1186 1187
+f 1341 1334 1185
+f 1342 1339 1340
+f 1342 1332 1336
+f 1342 1336 1339
+f 1343 1341 1187
+f 1343 1187 1188
+f 1343 1188 1189
+f 1343 1189 1190
+f 1343 1190 1191
+f 1343 1191 1192
+f 1343 1192 1193
+f 1344 1343 1193
+f 1345 1344 1193
+f 1345 1193 1194
+f 1346 1345 1194
+f 1347 1346 1194
+f 1347 1194 1195
+f 1348 1347 1195
+f 1348 1195 1095
+f 1349 1340 1329
+f 1350 1351 1349
+f 1352 1332 1342
+f 1352 1353 1203
+f 1354 1349 1351
+f 1354 1340 1349
+f 1355 1351 1350
+f 1355 1356 1351
+f 1357 1200 1199
+f 1358 1356 1355
+f 1358 1095 1099
+f 1359 1357 1199
+f 1359 1199 1201
+f 1359 1200 1357
+f 1360 1206 1353
+f 1360 1354 1351
+f 1361 1353 1362
+f 1361 1202 1203
+f 1361 1203 1353
+f 1363 1200 1359
+f 1364 1356 1358
+f 1364 1358 1099
+f 1364 1099 1207
+f 1364 1207 1204
+f 1365 1361 1362
+f 1366 1353 1206
+f 1366 1206 1208
+f 1366 1362 1353
+f 1367 1366 1208
+f 1367 1362 1366
+f 1367 1216 1362
+f 1368 1211 1213
+f 1369 1217 1211
+f 1369 1211 1368
+f 1370 1208 1209
+f 1370 1367 1208
+f 1371 1214 1216
+f 1371 1216 1367
+f 1372 1367 1370
+f 1372 1371 1367
+f 1373 1370 1209
+f 1373 1209 1210
+f 1374 1373 1210
+f 1374 1210 1101
+f 1375 1371 1372
+f 1376 1214 1371
+f 1376 1377 1214
+f 1378 1379 1376
+f 1378 1376 1371
+f 1378 1371 1375
+f 1380 1376 1379
+f 1380 1377 1376
+f 1381 1378 1375
+f 1382 1220 1219
+f 1382 1383 1220
+f 1382 1219 1384
+f 1385 1212 1221
+f 1385 1221 1222
+f 1386 1101 1103
+f 1387 1220 1383
+f 1388 1232 1212
+f 1388 1385 1389
+f 1388 1212 1385
+f 1390 1391 1223
+f 1390 1223 1225
+f 1392 1388 1389
+f 1393 1386 1103
+f 1393 1103 1227
+f 1393 1227 1226
+f 1394 1395 1387
+f 1394 1396 1395
+f 1397 1394 1398
+f 1397 1396 1394
+f 1399 1383 1390
+f 1399 1390 1225
+f 1399 1225 1228
+f 1400 1392 1389
+f 1400 1389 1396
+f 1401 1396 1397
+f 1401 1400 1396
+f 1401 1397 1398
+f 1401 1398 1240
+f 1402 1392 1400
+f 1402 1400 1401
+f 1403 1230 1232
+f 1404 1399 1228
+f 1405 1235 1230
+f 1405 1230 1403
+f 1406 1402 1401
+f 1406 1401 1240
+f 1406 1407 1402
+f 1406 1240 1239
+f 1408 1405 1407
+f 1408 1235 1405
+f 1408 1236 1235
+f 1408 1407 1406
+f 1409 1229 1234
+f 1410 1409 1234
+f 1410 1234 1105
+f 1411 1236 1408
+f 1411 1406 1239
+f 1411 1408 1406
+f 1411 1239 1412
+f 1413 1247 1237
+f 1413 1412 1247
+f 1413 1237 1236
+f 1413 1236 1411
+f 1413 1411 1412
+f 1414 1415 1416
+f 1414 1416 1417
+f 1418 1243 1247
+f 1418 1241 1243
+f 1418 1247 1412
+f 1418 1419 1241
+f 1418 1412 1419
+f 1420 1237 1247
+f 1420 1247 1246
+f 1421 1422 1107
+f 1421 1107 1245
+f 1421 1245 1244
+f 1423 1424 1425
+f 1426 1427 1231
+f 1426 1231 1417
+f 1426 1417 1416
+f 1428 1423 1425
+f 1429 1251 1109
+f 1429 1250 1251
+f 1430 1431 1432
+f 1430 1433 1431
+f 1434 1435 1436
+f 1437 1438 1431
+f 1437 1431 1433
+f 1437 1433 1439
+f 1440 1438 1437
+f 1440 1254 1253
+f 1441 1436 1435
+f 1442 1436 1441
+f 1443 1426 1444
+f 1443 1427 1426
+f 1445 1446 1442
+f 1447 1255 1257
+f 1448 1252 1254
+f 1448 1257 1252
+f 1448 1449 1257
+f 1448 1254 1258
+f 1448 1258 1449
+f 1450 1451 1446
+f 1452 1447 1257
+f 1453 1257 1449
+f 1453 1449 1258
+f 1453 1452 1257
+f 1454 1258 1111
+f 1454 1453 1258
+f 1455 1266 1427
+f 1456 1457 1458
+f 1459 1460 1455
+f 1461 1462 1463
+f 1464 1460 1459
+f 1464 1465 1460
+f 1464 1459 1456
+f 1466 1467 1461
+f 1468 1266 1455
+f 1468 1262 1266
+f 1468 1455 1460
+f 1469 1465 1464
+f 1469 1470 1471
+f 1472 1465 1469
+f 1472 1469 1471
+f 1473 1471 1470
+f 1474 1475 1476
+f 1474 1473 1475
+f 1477 1473 1474
+f 1478 1471 1473
+f 1478 1473 1477
+f 1479 1478 1477
+f 1479 1480 1478
+f 1479 1270 1480
+f 1481 1265 1264
+f 1482 1264 1267
+f 1482 1267 1483
+f 1482 1481 1264
+f 1484 1263 1485
+f 1486 1270 1479
+f 1486 1268 1270
+f 1487 1272 1485
+f 1487 1478 1480
+f 1488 1268 1486
+f 1488 1113 1268
+f 1489 1482 1483
+f 1490 1483 1484
+f 1490 1489 1483
+f 1491 1282 1265
+f 1492 1279 1491
+f 1493 1490 1494
+f 1493 1489 1490
+f 1493 1495 1489
+f 1496 1279 1492
+f 1496 1492 1495
+f 1496 1275 1279
+f 1497 1274 1278
+f 1497 1279 1274
+f 1497 1278 1282
+f 1497 1282 1491
+f 1497 1491 1279
+f 1498 1275 1496
+f 1498 1499 1500
+f 1501 1502 1503
+f 1501 1499 1494
+f 1501 1494 1502
+f 1504 1276 1275
+f 1504 1275 1498
+f 1504 1498 1500
+f 1505 1273 1115
+f 1506 1503 1507
+f 1506 1501 1503
+f 1508 1506 1507
+f 1508 1509 1506
+f 1510 1505 1115
+f 1510 1507 1505
+f 1510 1508 1507
+f 1510 1115 1117
+f 1511 1500 1512
+f 1513 1281 1280
+f 1513 1280 1283
+f 1513 1283 1288
+f 1514 1512 1509
+f 1514 1511 1512
+f 1514 1284 1511
+f 1515 1284 1286
+f 1515 1511 1284
+f 1515 1286 1516
+f 1517 1284 1514
+f 1517 1289 1284
+f 1517 1290 1289
+f 1518 1519 1281
+f 1518 1281 1513
+f 1518 1513 1288
+f 1520 1290 1517
+f 1520 1117 1290
+f 1521 1518 1288
+f 1522 1516 1523
+f 1522 1287 1276
+f 1522 1276 1516
+f 1524 1523 1516
+f 1524 1516 1286
+f 1524 1286 1291
+f 1525 1521 1288
+f 1525 1288 1287
+f 1526 1522 1523
+f 1526 1287 1522
+f 1526 1523 1305
+f 1526 1525 1287
+f 1527 1521 1525
+f 1528 1294 1519
+f 1528 1295 1294
+f 1529 1295 1528
+f 1530 1295 1529
+f 1531 1295 1530
+f 1532 1295 1531
+f 1533 1301 1295
+f 1533 1302 1301
+f 1533 1295 1532
+f 1534 1523 1524
+f 1534 1524 1291
+f 1535 1527 1525
+f 1535 1526 1305
+f 1535 1525 1526
+f 1535 1536 1527
+f 1535 1305 1304
+f 1537 1538 1539
+f 1537 1539 1540
+f 1537 1541 1538
+f 1537 1540 1302
+f 1537 1302 1533
+f 1537 1533 1536
+f 1537 1536 1535
+f 1542 1304 1543
+f 1542 1541 1537
+f 1542 1535 1304
+f 1542 1537 1535
+f 1544 1292 1298
+f 1545 1539 1538
+f 1545 1306 1071
+f 1545 1540 1539
+f 1545 1538 1541
+f 1545 1302 1540
+f 1545 1070 1069
+f 1545 1541 1306
+f 1545 1071 1070
+f 1545 1300 1302
+f 1545 1069 1300
+f 1546 1298 1121
+f 1546 1544 1298
+f 1547 1541 1542
+f 1547 1306 1541
+f 1547 1542 1543
+f 1548 1076 1306
+f 1548 1306 1547
+f 1548 1547 1543
+f 1548 1077 1076
+f 1548 1078 1077
+f 1549 1303 1550
+f 1551 1307 1089
+f 1551 1087 1085
+f 1551 1089 1087
+f 1552 1313 1312
+f 1552 1549 1123
+f 1552 1314 1313
+f 1552 1315 1314
+f 1552 1316 1315
+f 1553 1316 1552
+f 1553 1552 1123
+f 1553 1123 1316
+f 1554 1028 1029
+f 1554 1029 1032
+f 1554 1032 1323
+f 1554 1555 1317
+f 1554 1317 1028
+f 1556 1182 1317
+f 1556 1317 1555
+f 1556 1325 1182
+f 1557 1319 1320
+f 1557 1321 1322
+f 1557 1322 1327
+f 1557 1320 1321
+f 1557 1318 1319
+f 1557 1330 1170
+f 1557 1170 1318
+f 1557 1331 1330
+f 1557 1558 1336
+f 1557 1336 1331
+f 1557 1327 1558
+f 1559 1554 1323
+f 1559 1555 1554
+f 1559 1323 1184
+f 1559 1184 1335
+f 1559 1335 1555
+f 1560 1556 1555
+f 1560 1325 1556
+f 1560 1335 1326
+f 1560 1326 1325
+f 1560 1555 1335
+f 1561 1329 1339
+f 1561 1328 1329
+f 1561 1327 1328
+f 1561 1336 1558
+f 1561 1558 1327
+f 1561 1339 1336
+f 1562 1333 1332
+f 1562 1338 1333
+f 1563 1350 1349
+f 1563 1349 1329
+f 1563 1564 1350
+f 1563 1341 1564
+f 1563 1329 1337
+f 1563 1337 1341
+f 1565 1352 1203
+f 1565 1197 1196
+f 1565 1332 1352
+f 1565 1203 1197
+f 1566 1343 1344
+f 1566 1344 1345
+f 1566 1345 1346
+f 1566 1346 1347
+f 1566 1348 1095
+f 1566 1347 1348
+f 1566 1350 1564
+f 1566 1355 1350
+f 1566 1358 1355
+f 1566 1341 1343
+f 1566 1095 1358
+f 1566 1564 1341
+f 1567 1340 1354
+f 1567 1354 1360
+f 1567 1342 1340
+f 1567 1352 1342
+f 1568 1360 1353
+f 1568 1567 1360
+f 1568 1352 1567
+f 1568 1353 1352
+f 1569 1351 1356
+f 1569 1356 1364
+f 1570 1359 1201
+f 1570 1361 1365
+f 1570 1201 1202
+f 1570 1202 1361
+f 1571 1360 1351
+f 1571 1569 1364
+f 1571 1364 1204
+f 1571 1351 1569
+f 1572 1204 1206
+f 1572 1206 1360
+f 1572 1571 1204
+f 1572 1360 1571
+f 1573 1213 1200
+f 1573 1200 1363
+f 1574 1359 1570
+f 1574 1363 1359
+f 1574 1570 1365
+f 1574 1215 1363
+f 1575 1368 1213
+f 1575 1213 1573
+f 1575 1573 1576
+f 1575 1369 1368
+f 1577 1576 1573
+f 1577 1573 1363
+f 1577 1363 1215
+f 1578 1215 1214
+f 1578 1577 1215
+f 1578 1576 1577
+f 1579 1214 1377
+f 1579 1578 1214
+f 1579 1580 1576
+f 1579 1576 1578
+f 1579 1384 1580
+f 1579 1377 1384
+f 1581 1217 1369
+f 1581 1580 1384
+f 1581 1219 1217
+f 1581 1384 1219
+f 1582 1370 1373
+f 1582 1372 1370
+f 1582 1374 1101
+f 1582 1373 1374
+f 1583 1381 1375
+f 1583 1101 1386
+f 1583 1386 1381
+f 1583 1582 1101
+f 1583 1372 1582
+f 1583 1375 1372
+f 1584 1377 1380
+f 1584 1380 1391
+f 1584 1384 1377
+f 1585 1382 1384
+f 1585 1584 1391
+f 1585 1391 1390
+f 1585 1384 1584
+f 1586 1378 1381
+f 1586 1381 1386
+f 1586 1587 1379
+f 1586 1393 1587
+f 1586 1386 1393
+f 1586 1379 1378
+f 1588 1222 1218
+f 1588 1387 1395
+f 1588 1218 1220
+f 1588 1220 1387
+f 1589 1588 1395
+f 1589 1389 1385
+f 1589 1385 1222
+f 1589 1222 1588
+f 1589 1395 1396
+f 1589 1396 1389
+f 1590 1585 1390
+f 1590 1383 1382
+f 1590 1390 1383
+f 1590 1382 1585
+f 1591 1380 1379
+f 1591 1391 1380
+f 1591 1223 1391
+f 1591 1379 1587
+f 1592 1387 1383
+f 1592 1383 1399
+f 1593 1592 1399
+f 1593 1394 1387
+f 1593 1387 1592
+f 1593 1399 1404
+f 1594 1388 1392
+f 1594 1232 1388
+f 1594 1392 1402
+f 1595 1593 1404
+f 1595 1398 1394
+f 1595 1404 1596
+f 1595 1596 1398
+f 1595 1394 1593
+f 1597 1594 1402
+f 1597 1403 1232
+f 1597 1407 1405
+f 1597 1405 1403
+f 1597 1232 1594
+f 1597 1402 1407
+f 1598 1229 1409
+f 1598 1228 1229
+f 1598 1596 1404
+f 1598 1404 1228
+f 1599 1596 1598
+f 1600 1409 1410
+f 1600 1410 1105
+f 1601 1239 1238
+f 1601 1238 1422
+f 1602 1105 1107
+f 1602 1600 1105
+f 1602 1107 1422
+f 1602 1603 1600
+f 1604 1601 1422
+f 1604 1422 1421
+f 1605 1233 1237
+f 1606 1421 1244
+f 1606 1419 1604
+f 1606 1604 1421
+f 1606 1241 1419
+f 1606 1244 1241
+f 1607 1415 1414
+f 1608 1420 1246
+f 1608 1246 1249
+f 1609 1607 1424
+f 1609 1424 1423
+f 1609 1423 1415
+f 1609 1415 1607
+f 1610 1249 1611
+f 1610 1424 1608
+f 1610 1608 1249
+f 1612 1425 1424
+f 1612 1610 1611
+f 1612 1424 1610
+f 1613 1416 1415
+f 1614 1423 1428
+f 1614 1415 1423
+f 1614 1613 1415
+f 1615 1428 1616
+f 1615 1614 1428
+f 1615 1613 1614
+f 1617 1250 1429
+f 1617 1248 1250
+f 1617 1618 1611
+f 1617 1611 1249
+f 1617 1249 1248
+f 1619 1416 1613
+f 1620 1611 1618
+f 1620 1425 1612
+f 1620 1430 1432
+f 1620 1432 1425
+f 1620 1618 1430
+f 1620 1612 1611
+f 1621 1428 1425
+f 1621 1425 1432
+f 1622 1444 1426
+f 1622 1436 1444
+f 1623 1432 1431
+f 1623 1621 1432
+f 1623 1428 1621
+f 1624 1617 1429
+f 1624 1109 1259
+f 1624 1429 1109
+f 1624 1618 1617
+f 1625 1428 1623
+f 1625 1623 1431
+f 1625 1616 1428
+f 1626 1625 1431
+f 1626 1431 1438
+f 1626 1616 1625
+f 1627 1624 1259
+f 1627 1618 1624
+f 1627 1439 1433
+f 1627 1259 1439
+f 1627 1430 1618
+f 1627 1433 1430
+f 1628 1438 1440
+f 1628 1440 1253
+f 1629 1434 1628
+f 1629 1628 1253
+f 1629 1435 1434
+f 1630 1440 1437
+f 1630 1439 1259
+f 1630 1437 1439
+f 1630 1254 1440
+f 1630 1259 1254
+f 1631 1629 1253
+f 1631 1435 1629
+f 1631 1256 1441
+f 1631 1252 1256
+f 1631 1253 1252
+f 1631 1441 1435
+f 1632 1446 1451
+f 1632 1444 1436
+f 1632 1442 1446
+f 1632 1436 1442
+f 1632 1451 1444
+f 1633 1441 1256
+f 1633 1256 1255
+f 1633 1442 1441
+f 1634 1255 1447
+f 1634 1442 1633
+f 1634 1633 1255
+f 1634 1447 1445
+f 1634 1445 1442
+f 1635 1444 1451
+f 1635 1451 1450
+f 1635 1636 1443
+f 1635 1450 1636
+f 1635 1443 1444
+f 1637 1447 1452
+f 1637 1445 1447
+f 1637 1446 1445
+f 1637 1463 1462
+f 1637 1452 1463
+f 1638 1446 1637
+f 1638 1637 1462
+f 1639 1446 1638
+f 1639 1638 1462
+f 1639 1450 1446
+f 1640 1427 1443
+f 1640 1443 1636
+f 1640 1636 1457
+f 1640 1457 1456
+f 1641 1450 1639
+f 1641 1639 1642
+f 1641 1636 1450
+f 1641 1457 1636
+f 1643 1459 1455
+f 1643 1455 1427
+f 1643 1640 1456
+f 1643 1427 1640
+f 1643 1456 1459
+f 1644 1458 1457
+f 1644 1641 1642
+f 1644 1457 1641
+f 1645 1461 1463
+f 1645 1463 1452
+f 1645 1452 1453
+f 1645 1454 1111
+f 1645 1453 1454
+f 1646 1462 1461
+f 1646 1467 1647
+f 1646 1639 1462
+f 1646 1642 1639
+f 1646 1461 1467
+f 1648 1644 1642
+f 1648 1646 1647
+f 1648 1642 1646
+f 1648 1458 1644
+f 1649 1461 1645
+f 1649 1466 1461
+f 1649 1645 1111
+f 1649 1111 1466
+f 1650 1464 1456
+f 1650 1458 1648
+f 1650 1648 1470
+f 1650 1456 1458
+f 1651 1469 1464
+f 1651 1470 1469
+f 1651 1464 1650
+f 1651 1650 1470
+f 1652 1460 1465
+f 1652 1468 1460
+f 1653 1648 1647
+f 1653 1473 1470
+f 1653 1647 1475
+f 1653 1470 1648
+f 1653 1475 1473
+f 1654 1472 1471
+f 1654 1471 1478
+f 1655 1111 1113
+f 1655 1466 1111
+f 1656 1478 1487
+f 1656 1654 1478
+f 1657 1655 1113
+f 1657 1476 1655
+f 1658 1477 1474
+f 1658 1474 1476
+f 1658 1657 1113
+f 1658 1476 1657
+f 1659 1484 1483
+f 1659 1263 1484
+f 1659 1267 1261
+f 1659 1483 1267
+f 1659 1261 1263
+f 1660 1479 1477
+f 1660 1486 1479
+f 1660 1488 1486
+f 1660 1113 1488
+f 1660 1477 1658
+f 1660 1658 1113
+f 1661 1487 1485
+f 1661 1485 1263
+f 1661 1656 1487
+f 1662 1482 1489
+f 1662 1481 1482
+f 1662 1491 1265
+f 1662 1489 1495
+f 1662 1492 1491
+f 1662 1495 1492
+f 1662 1265 1481
+f 1663 1272 1487
+f 1663 1487 1480
+f 1663 1480 1270
+f 1663 1270 1269
+f 1663 1269 1272
+f 1664 1494 1490
+f 1664 1484 1485
+f 1664 1490 1484
+f 1665 1498 1496
+f 1665 1495 1493
+f 1665 1493 1494
+f 1665 1496 1495
+f 1665 1494 1499
+f 1665 1499 1498
+f 1666 1500 1499
+f 1666 1509 1512
+f 1666 1501 1506
+f 1666 1506 1509
+f 1666 1512 1500
+f 1666 1499 1501
+f 1667 1276 1504
+f 1667 1515 1516
+f 1667 1500 1511
+f 1667 1511 1515
+f 1667 1516 1276
+f 1667 1504 1500
+f 1668 1509 1508
+f 1668 1508 1510
+f 1668 1510 1117
+f 1668 1517 1514
+f 1668 1520 1517
+f 1668 1117 1520
+f 1668 1514 1509
+f 1669 1519 1518
+f 1669 1521 1527
+f 1669 1527 1536
+f 1669 1518 1521
+f 1670 1519 1669
+f 1670 1669 1536
+f 1670 1529 1528
+f 1670 1528 1519
+f 1670 1530 1529
+f 1670 1531 1530
+f 1670 1532 1531
+f 1670 1533 1532
+f 1670 1536 1533
+f 1671 1291 1292
+f 1671 1534 1291
+f 1671 1292 1544
+f 1672 1534 1671
+f 1672 1550 1303
+f 1673 1546 1121
+f 1673 1544 1546
+f 1674 1548 1543
+f 1674 1078 1548
+f 1674 1551 1085
+f 1674 1543 1551
+f 1674 1081 1078
+f 1674 1083 1081
+f 1674 1085 1083
+f 1675 1303 1549
+f 1675 1307 1551
+f 1676 1550 1673
+f 1676 1549 1550
+f 1676 1123 1549
+f 1676 1673 1121
+f 1676 1121 1123
+f 1677 1562 1332
+f 1677 1338 1562
+f 1677 1565 1196
+f 1677 1332 1565
+f 1678 1574 1365
+f 1678 1215 1574
+f 1678 1365 1362
+f 1678 1216 1215
+f 1678 1362 1216
+f 1679 1581 1369
+f 1679 1575 1576
+f 1679 1369 1575
+f 1679 1580 1581
+f 1679 1576 1580
+f 1680 1591 1587
+f 1680 1587 1393
+f 1680 1226 1223
+f 1680 1393 1226
+f 1680 1223 1591
+f 1681 1240 1398
+f 1681 1398 1596
+f 1681 1238 1240
+f 1681 1596 1599
+f 1682 1599 1598
+f 1682 1603 1599
+f 1682 1409 1600
+f 1682 1598 1409
+f 1682 1600 1603
+f 1683 1602 1422
+f 1683 1603 1602
+f 1683 1422 1238
+f 1684 1414 1417
+f 1684 1233 1605
+f 1684 1231 1233
+f 1684 1417 1231
+f 1685 1604 1419
+f 1685 1412 1239
+f 1685 1419 1412
+f 1685 1239 1601
+f 1685 1601 1604
+f 1686 1414 1684
+f 1686 1605 1687
+f 1686 1687 1607
+f 1686 1607 1414
+f 1686 1684 1605
+f 1688 1237 1420
+f 1688 1687 1605
+f 1688 1605 1237
+f 1689 1424 1607
+f 1689 1687 1688
+f 1689 1607 1687
+f 1689 1608 1424
+f 1689 1688 1420
+f 1689 1420 1608
+f 1690 1426 1416
+f 1690 1416 1619
+f 1691 1692 1622
+f 1691 1619 1692
+f 1691 1426 1690
+f 1691 1622 1426
+f 1691 1690 1619
+f 1693 1615 1616
+f 1693 1613 1615
+f 1693 1619 1613
+f 1694 1693 1616
+f 1694 1619 1693
+f 1694 1616 1626
+f 1695 1694 1626
+f 1695 1692 1619
+f 1695 1619 1694
+f 1696 1622 1692
+f 1696 1692 1695
+f 1696 1434 1436
+f 1696 1436 1622
+f 1697 1647 1467
+f 1697 1467 1466
+f 1697 1466 1655
+f 1697 1476 1475
+f 1697 1475 1647
+f 1697 1655 1476
+f 1698 1652 1465
+f 1699 1698 1465
+f 1699 1656 1698
+f 1699 1465 1472
+f 1699 1472 1654
+f 1699 1654 1656
+f 1700 1661 1263
+f 1700 1656 1661
+f 1700 1698 1656
+f 1700 1263 1260
+f 1701 1494 1664
+f 1701 1503 1502
+f 1701 1502 1494
+f 1702 1523 1534
+f 1702 1534 1672
+f 1703 1702 1672
+f 1703 1523 1702
+f 1703 1672 1303
+f 1703 1305 1523
+f 1703 1303 1305
+f 1704 1673 1550
+f 1704 1671 1544
+f 1704 1672 1671
+f 1704 1544 1673
+f 1704 1550 1672
+f 1705 1543 1304
+f 1705 1303 1675
+f 1705 1675 1551
+f 1705 1551 1543
+f 1705 1304 1303
+f 1706 1549 1552
+f 1706 1310 1309
+f 1706 1312 1311
+f 1706 1311 1310
+f 1706 1552 1312
+f 1706 1307 1675
+f 1706 1308 1307
+f 1706 1309 1308
+f 1706 1675 1549
+f 1707 1198 1338
+f 1707 1338 1677
+f 1707 1196 1198
+f 1707 1677 1196
+f 1708 1599 1603
+f 1708 1238 1681
+f 1708 1681 1599
+f 1708 1683 1238
+f 1708 1603 1683
+f 1709 1696 1695
+f 1709 1434 1696
+f 1709 1628 1434
+f 1709 1626 1438
+f 1709 1695 1626
+f 1709 1438 1628
+f 1710 1262 1468
+f 1710 1468 1652
+f 1710 1260 1262
+f 1710 1700 1260
+f 1711 1700 1710
+f 1711 1698 1700
+f 1711 1710 1652
+f 1711 1652 1698
+f 1712 1503 1701
+f 1712 1272 1271
+f 1713 1485 1272
+f 1713 1701 1664
+f 1713 1712 1701
+f 1713 1664 1485
+f 1713 1272 1712
+f 1714 1273 1505
+f 1714 1505 1507
+f 1714 1503 1712
+f 1714 1507 1503
+f 1714 1712 1271
+f 1714 1271 1273
+f 1715 1716 1010
+f 1170 1010 1012
+f 1170 1715 1010
+f 1198 1717 1715
+f 1198 1715 1170
+f 1200 1718 1717
+f 1200 1717 1198
+f 1213 1719 1718
+f 1213 1718 1200
+f 1212 1720 1719
+f 1212 1719 1213
+f 1232 1721 1720
+f 1232 1720 1212
+f 1231 1722 1721
+f 1231 1721 1232
+f 1427 1723 1722
+f 1427 1722 1231
+f 1266 1724 1723
+f 1266 1723 1427
+f 1265 1725 1724
+f 1265 1724 1266
+f 1282 1726 1725
+f 1282 1725 1265
+f 1281 1727 1726
+f 1281 1726 1282
+f 1519 1728 1727
+f 1519 1727 1281
+f 1294 1729 1728
+f 1294 1728 1519
+f 1060 1730 1729
+f 1060 1729 1294
+f 1062 1060 1294
+f 1731 1732 1010
+f 1010 1733 1011
+f 1732 1733 1010
+f 1046 1013 1011
+f 1734 1011 1735
+f 1734 1046 1011
+f 1047 1046 1734
+f 1736 1047 1734
+f 1048 1047 1736
+f 1737 1048 1736
+f 1049 1048 1737
+f 1738 1049 1737
+f 1050 1049 1738
+f 1739 1050 1738
+f 1051 1050 1739
+f 1740 1051 1739
+f 1052 1051 1740
+f 1741 1052 1740
+f 1053 1052 1741
+f 1742 1053 1741
+f 1054 1053 1742
+f 1743 1054 1742
+f 1055 1054 1743
+f 1744 1055 1743
+f 1056 1055 1744
+f 1745 1056 1744
+f 1057 1056 1745
+f 1746 1057 1745
+f 1058 1057 1746
+f 1747 1058 1746
+f 1061 1059 1058
+f 1061 1058 1747
+f 1748 1061 1747
+f 1749 1750 1060
+f 1751 1060 1061
+f 1751 1749 1060
+f 1010 1752 1731
+f 1010 1716 1752
+f 1753 1060 1750
+f 1730 1060 1753
+f 1754 1732 1731
+f 1754 1731 1752
+f 1733 1755 1011
+f 1011 1755 1735
+f 1754 1755 1732
+f 1755 1733 1732
+f 1751 1061 1748
+f 1756 1751 1748
+f 1750 1749 1753
+f 1749 1757 1753
+f 1756 1757 1749
+f 1751 1756 1749
+f 90 1139 1136
+f 1026 1136 1134
+f 1026 90 1136
+f 1133 1026 1134
+f 1140 1139 90
+f 89 1140 90
+f 1142 1140 89
+f 93 1142 89
+f 1144 1142 93
+f 99 1144 93
+f 1146 1144 99
+f 122 1146 99
+f 1148 1146 122
+f 130 1148 122
+f 1150 1148 130
+f 158 1150 130
+f 1152 1150 158
+f 157 1152 158
+f 1154 1152 157
+f 180 1154 157
+f 1156 1154 180
+f 197 1156 180
+f 1158 1156 197
+f 196 1158 197
+f 1160 1158 196
+f 214 1160 196
+f 1162 1160 214
+f 213 1162 214
+f 1164 1162 213
+f 229 1164 213
+f 1166 1164 229
+f 246 1166 229
+f 1168 1166 246
+f 245 1168 246
+f 1130 1168 245
+f 1130 245 1075
+f 1126 1130 1075
+f 1126 1075 1128
+f 1097 1132 1131
+f 1097 1131 1135
+f 1138 1097 1135
+f 1137 1096 1097
+f 1137 1097 1138
+f 1141 1098 1096
+f 1141 1096 1137
+f 1143 1100 1098
+f 1143 1098 1141
+f 1145 1102 1100
+f 1145 1100 1143
+f 1147 1104 1102
+f 1147 1102 1145
+f 1149 1106 1104
+f 1149 1104 1147
+f 1151 1108 1106
+f 1151 1106 1149
+f 1153 1110 1108
+f 1153 1108 1151
+f 1155 1112 1110
+f 1155 1110 1153
+f 1157 1114 1112
+f 1157 1112 1155
+f 1159 1116 1114
+f 1159 1114 1157
+f 1161 1118 1116
+f 1161 1116 1159
+f 1163 1120 1118
+f 1163 1118 1161
+f 1165 1120 1163
+f 1165 1122 1120
+f 1167 1124 1122
+f 1167 1122 1165
+f 1125 1127 1124
+f 1129 1124 1167
+f 1129 1125 1124
+f 1716 1735 1755
+f 1716 1755 1754
+f 1752 1716 1754
+f 1715 1734 1735
+f 1715 1735 1716
+f 1717 1736 1734
+f 1717 1734 1715
+f 1718 1737 1736
+f 1718 1736 1717
+f 1719 1738 1737
+f 1719 1737 1718
+f 1720 1739 1738
+f 1720 1738 1719
+f 1721 1740 1739
+f 1721 1739 1720
+f 1722 1741 1740
+f 1722 1740 1721
+f 1723 1742 1741
+f 1723 1741 1722
+f 1724 1743 1742
+f 1724 1742 1723
+f 1725 1744 1743
+f 1725 1743 1724
+f 1726 1745 1744
+f 1726 1744 1725
+f 1727 1746 1745
+f 1727 1745 1726
+f 1728 1747 1746
+f 1728 1746 1727
+f 1729 1747 1728
+f 1748 1747 1729
+f 1730 1748 1729
+f 1756 1748 1730
+f 1757 1756 1730
+f 1757 1730 1753
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Cinema.patch 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Cinema.patch
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Cinema.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Cinema.patch	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,136 @@
+ifn = "builtin://models/3d/cinema.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/4/material/sound_speed = f32:340.29001
+/scene/object/4/material/transparency/link = f32:1.00000
+/scene/object/4/material/diffusion/link = f32:1.00000
+/scene/object/4/material/dispersion/link = f32:1.00000
+/scene/object/4/material/absorption/link = f32:1.00000
+/scene/object/4/material/transparency/inner = f32:52.00000
+/scene/object/4/material/diffusion/inner = f32:1.00000
+/scene/object/4/material/dispersion/inner = f32:1.00000
+/scene/object/4/material/absorption/inner = f32:17.00000
+/scene/object/4/material/transparency/outer = f32:48.00000
+/scene/object/4/material/diffusion/outer = f32:1.00000
+/scene/object/4/material/dispersion/outer = f32:1.00000
+/scene/object/4/material/absorption/outer = f32:17.00000
+/scene/object/4/color/hue = f32:0.80000
+/scene/object/4/scale/z = f32:100.00000
+/scene/object/4/scale/y = f32:100.00000
+/scene/object/4/scale/x = f32:100.00000
+/scene/object/4/rotation/roll = f32:0.00000
+/scene/object/4/rotation/pitch = f32:0.00000
+/scene/object/4/rotation/yaw = f32:0.00000
+/scene/object/4/position/z = f32:0.00000
+/scene/object/4/position/y = f32:0.00000
+/scene/object/4/position/x = f32:0.00000
+/scene/object/4/enabled = f32:1.00000
+/scene/object/4/name = "Screen"
+
+/scene/object/3/material/sound_speed = f32:4050.00000
+/scene/object/3/material/transparency/link = f32:1.00000
+/scene/object/3/material/diffusion/link = f32:1.00000
+/scene/object/3/material/dispersion/link = f32:1.00000
+/scene/object/3/material/absorption/link = f32:1.00000
+/scene/object/3/material/transparency/inner = f32:52.00000
+/scene/object/3/material/diffusion/inner = f32:1.00000
+/scene/object/3/material/dispersion/inner = f32:1.00000
+/scene/object/3/material/absorption/inner = f32:7.00000
+/scene/object/3/material/transparency/outer = f32:48.00000
+/scene/object/3/material/diffusion/outer = f32:1.00000
+/scene/object/3/material/dispersion/outer = f32:1.00000
+/scene/object/3/material/absorption/outer = f32:7.00000
+/scene/object/3/color/hue = f32:0.60000
+/scene/object/3/scale/z = f32:100.00000
+/scene/object/3/scale/y = f32:100.00000
+/scene/object/3/scale/x = f32:100.00000
+/scene/object/3/rotation/roll = f32:0.00000
+/scene/object/3/rotation/pitch = f32:0.00000
+/scene/object/3/rotation/yaw = f32:0.00000
+/scene/object/3/position/z = f32:0.00000
+/scene/object/3/position/y = f32:0.00000
+/scene/object/3/position/x = f32:0.00000
+/scene/object/3/enabled = f32:1.00000
+/scene/object/3/name = "Scene"
+
+/scene/object/2/material/sound_speed = f32:340.29001
+/scene/object/2/material/transparency/link = f32:1.00000
+/scene/object/2/material/diffusion/link = f32:1.00000
+/scene/object/2/material/dispersion/link = f32:1.00000
+/scene/object/2/material/absorption/link = f32:1.00000
+/scene/object/2/material/transparency/inner = f32:52.00000
+/scene/object/2/material/diffusion/inner = f32:1.00000
+/scene/object/2/material/dispersion/inner = f32:1.00000
+/scene/object/2/material/absorption/inner = f32:45.00000
+/scene/object/2/material/transparency/outer = f32:48.00000
+/scene/object/2/material/diffusion/outer = f32:1.00000
+/scene/object/2/material/dispersion/outer = f32:1.00000
+/scene/object/2/material/absorption/outer = f32:45.00000
+/scene/object/2/color/hue = f32:0.40000
+/scene/object/2/scale/z = f32:100.00000
+/scene/object/2/scale/y = f32:100.00000
+/scene/object/2/scale/x = f32:100.00000
+/scene/object/2/rotation/roll = f32:0.00000
+/scene/object/2/rotation/pitch = f32:0.00000
+/scene/object/2/rotation/yaw = f32:0.00000
+/scene/object/2/position/z = f32:0.00000
+/scene/object/2/position/y = f32:0.00000
+/scene/object/2/position/x = f32:0.00000
+/scene/object/2/enabled = f32:1.00000
+/scene/object/2/name = "Soundproof"
+
+/scene/object/1/material/sound_speed = f32:5030.00000
+/scene/object/1/material/transparency/link = f32:1.00000
+/scene/object/1/material/diffusion/link = f32:1.00000
+/scene/object/1/material/dispersion/link = f32:1.00000
+/scene/object/1/material/absorption/link = f32:1.00000
+/scene/object/1/material/transparency/inner = f32:52.00000
+/scene/object/1/material/diffusion/inner = f32:1.00000
+/scene/object/1/material/dispersion/inner = f32:1.00000
+/scene/object/1/material/absorption/inner = f32:6.00000
+/scene/object/1/material/transparency/outer = f32:48.00000
+/scene/object/1/material/diffusion/outer = f32:1.00000
+/scene/object/1/material/dispersion/outer = f32:1.00000
+/scene/object/1/material/absorption/outer = f32:6.00000
+/scene/object/1/color/hue = f32:0.20000
+/scene/object/1/scale/z = f32:100.00000
+/scene/object/1/scale/y = f32:100.00000
+/scene/object/1/scale/x = f32:100.00000
+/scene/object/1/rotation/roll = f32:0.00000
+/scene/object/1/rotation/pitch = f32:0.00000
+/scene/object/1/rotation/yaw = f32:0.00000
+/scene/object/1/position/z = f32:0.00000
+/scene/object/1/position/y = f32:0.00000
+/scene/object/1/position/x = f32:0.00000
+/scene/object/1/enabled = f32:1.00000
+/scene/object/1/name = "Seats"
+
+/scene/object/0/material/sound_speed = f32:4250.00000
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:1.50000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:1.50000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Hall"
+
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Coliseum.patch 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Coliseum.patch
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Coliseum.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Coliseum.patch	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,32 @@
+ifn = "builtin://models/3d/coliseum.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/0/material/sound_speed = f32:4250.00000
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:1.50000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:1.50000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Coliseum"
+
diff -pruN "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Concert Hall.patch" "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Concert Hall.patch"
--- "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Concert Hall.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Concert Hall.patch"	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,135 @@
+ifn = "builtin://models/3d/concert-hall.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/4/material/sound_speed = f32:3600.00000
+/scene/object/4/material/transparency/link = f32:1.00000
+/scene/object/4/material/diffusion/link = f32:1.00000
+/scene/object/4/material/dispersion/link = f32:1.00000
+/scene/object/4/material/absorption/link = f32:1.00000
+/scene/object/4/material/transparency/inner = f32:52.00000
+/scene/object/4/material/diffusion/inner = f32:1.00000
+/scene/object/4/material/dispersion/inner = f32:1.00000
+/scene/object/4/material/absorption/inner = f32:3.20000
+/scene/object/4/material/transparency/outer = f32:48.00000
+/scene/object/4/material/diffusion/outer = f32:1.00000
+/scene/object/4/material/dispersion/outer = f32:1.00000
+/scene/object/4/material/absorption/outer = f32:3.20000
+/scene/object/4/color/hue = f32:0.80000
+/scene/object/4/scale/z = f32:100.00000
+/scene/object/4/scale/y = f32:100.00000
+/scene/object/4/scale/x = f32:100.00000
+/scene/object/4/rotation/roll = f32:0.00000
+/scene/object/4/rotation/pitch = f32:0.00000
+/scene/object/4/rotation/yaw = f32:0.00000
+/scene/object/4/position/z = f32:0.00000
+/scene/object/4/position/y = f32:0.00000
+/scene/object/4/position/x = f32:0.00000
+/scene/object/4/enabled = f32:1.00000
+/scene/object/4/name = "Hall"
+
+/scene/object/3/material/sound_speed = f32:5030.00000
+/scene/object/3/material/transparency/link = f32:1.00000
+/scene/object/3/material/diffusion/link = f32:1.00000
+/scene/object/3/material/dispersion/link = f32:1.00000
+/scene/object/3/material/absorption/link = f32:1.00000
+/scene/object/3/material/transparency/inner = f32:52.00000
+/scene/object/3/material/diffusion/inner = f32:1.00000
+/scene/object/3/material/dispersion/inner = f32:1.00000
+/scene/object/3/material/absorption/inner = f32:6.00000
+/scene/object/3/material/transparency/outer = f32:48.00000
+/scene/object/3/material/diffusion/outer = f32:1.00000
+/scene/object/3/material/dispersion/outer = f32:1.00000
+/scene/object/3/material/absorption/outer = f32:6.00000
+/scene/object/3/color/hue = f32:0.60000
+/scene/object/3/scale/z = f32:100.00000
+/scene/object/3/scale/y = f32:100.00000
+/scene/object/3/scale/x = f32:100.00000
+/scene/object/3/rotation/roll = f32:0.00000
+/scene/object/3/rotation/pitch = f32:0.00000
+/scene/object/3/rotation/yaw = f32:0.00000
+/scene/object/3/position/z = f32:0.00000
+/scene/object/3/position/y = f32:0.00000
+/scene/object/3/position/x = f32:0.00000
+/scene/object/3/enabled = f32:1.00000
+/scene/object/3/name = "Scene floor"
+
+/scene/object/2/material/sound_speed = f32:340.29001
+/scene/object/2/material/transparency/link = f32:1.00000
+/scene/object/2/material/diffusion/link = f32:1.00000
+/scene/object/2/material/dispersion/link = f32:1.00000
+/scene/object/2/material/absorption/link = f32:1.00000
+/scene/object/2/material/transparency/inner = f32:52.00000
+/scene/object/2/material/diffusion/inner = f32:1.00000
+/scene/object/2/material/dispersion/inner = f32:1.00000
+/scene/object/2/material/absorption/inner = f32:45.00000
+/scene/object/2/material/transparency/outer = f32:48.00000
+/scene/object/2/material/diffusion/outer = f32:1.00000
+/scene/object/2/material/dispersion/outer = f32:1.00000
+/scene/object/2/material/absorption/outer = f32:45.00000
+/scene/object/2/color/hue = f32:0.40000
+/scene/object/2/scale/z = f32:100.00000
+/scene/object/2/scale/y = f32:100.00000
+/scene/object/2/scale/x = f32:100.00000
+/scene/object/2/rotation/roll = f32:0.00000
+/scene/object/2/rotation/pitch = f32:0.00000
+/scene/object/2/rotation/yaw = f32:0.00000
+/scene/object/2/position/z = f32:0.00000
+/scene/object/2/position/y = f32:0.00000
+/scene/object/2/position/x = f32:0.00000
+/scene/object/2/enabled = f32:1.00000
+/scene/object/2/name = "Top cover"
+
+/scene/object/1/material/sound_speed = f32:4050.00000
+/scene/object/1/material/transparency/link = f32:1.00000
+/scene/object/1/material/diffusion/link = f32:1.00000
+/scene/object/1/material/dispersion/link = f32:1.00000
+/scene/object/1/material/absorption/link = f32:1.00000
+/scene/object/1/material/transparency/inner = f32:52.00000
+/scene/object/1/material/diffusion/inner = f32:1.00000
+/scene/object/1/material/dispersion/inner = f32:1.00000
+/scene/object/1/material/absorption/inner = f32:7.00000
+/scene/object/1/material/transparency/outer = f32:48.00000
+/scene/object/1/material/diffusion/outer = f32:1.00000
+/scene/object/1/material/dispersion/outer = f32:1.00000
+/scene/object/1/material/absorption/outer = f32:7.00000
+/scene/object/1/color/hue = f32:0.20000
+/scene/object/1/scale/z = f32:100.00000
+/scene/object/1/scale/y = f32:100.00000
+/scene/object/1/scale/x = f32:100.00000
+/scene/object/1/rotation/roll = f32:0.00000
+/scene/object/1/rotation/pitch = f32:0.00000
+/scene/object/1/rotation/yaw = f32:0.00000
+/scene/object/1/position/z = f32:0.00000
+/scene/object/1/position/y = f32:0.00000
+/scene/object/1/position/x = f32:0.00000
+/scene/object/1/enabled = f32:1.00000
+/scene/object/1/name = "Seats"
+
+/scene/object/0/material/sound_speed = f32:340.29001
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:17.00000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:17.00000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Curtains"
diff -pruN "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Cooling Tower.patch" "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Cooling Tower.patch"
--- "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Cooling Tower.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Cooling Tower.patch"	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,110 @@
+ifn = "builtin://models/3d/cooling-tower.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/3/material/sound_speed = f32:5170.00000
+/scene/object/3/material/transparency/link = f32:1.00000
+/scene/object/3/material/diffusion/link = f32:1.00000
+/scene/object/3/material/dispersion/link = f32:1.00000
+/scene/object/3/material/absorption/link = f32:1.00000
+/scene/object/3/material/transparency/inner = f32:52.00000
+/scene/object/3/material/diffusion/inner = f32:1.00000
+/scene/object/3/material/dispersion/inner = f32:1.00000
+/scene/object/3/material/absorption/inner = f32:0.00000
+/scene/object/3/material/transparency/outer = f32:48.00000
+/scene/object/3/material/diffusion/outer = f32:1.00000
+/scene/object/3/material/dispersion/outer = f32:1.00000
+/scene/object/3/material/absorption/outer = f32:0.00000
+/scene/object/3/color/hue = f32:0.75000
+/scene/object/3/scale/z = f32:100.00000
+/scene/object/3/scale/y = f32:100.00000
+/scene/object/3/scale/x = f32:100.00000
+/scene/object/3/rotation/roll = f32:0.00000
+/scene/object/3/rotation/pitch = f32:0.00000
+/scene/object/3/rotation/yaw = f32:0.00000
+/scene/object/3/position/z = f32:0.00000
+/scene/object/3/position/y = f32:0.00000
+/scene/object/3/position/x = f32:0.00000
+/scene/object/3/enabled = f32:0.00000
+/scene/object/3/name = "Supports"
+
+/scene/object/2/material/sound_speed = f32:4250.00000
+/scene/object/2/material/transparency/link = f32:1.00000
+/scene/object/2/material/diffusion/link = f32:1.00000
+/scene/object/2/material/dispersion/link = f32:1.00000
+/scene/object/2/material/absorption/link = f32:1.00000
+/scene/object/2/material/transparency/inner = f32:52.00000
+/scene/object/2/material/diffusion/inner = f32:1.00000
+/scene/object/2/material/dispersion/inner = f32:1.00000
+/scene/object/2/material/absorption/inner = f32:1.50000
+/scene/object/2/material/transparency/outer = f32:48.00000
+/scene/object/2/material/diffusion/outer = f32:1.00000
+/scene/object/2/material/dispersion/outer = f32:1.00000
+/scene/object/2/material/absorption/outer = f32:1.50000
+/scene/object/2/color/hue = f32:0.50000
+/scene/object/2/scale/z = f32:100.00000
+/scene/object/2/scale/y = f32:100.00000
+/scene/object/2/scale/x = f32:100.00000
+/scene/object/2/rotation/roll = f32:0.00000
+/scene/object/2/rotation/pitch = f32:0.00000
+/scene/object/2/rotation/yaw = f32:0.00000
+/scene/object/2/position/z = f32:0.00000
+/scene/object/2/position/y = f32:0.00000
+/scene/object/2/position/x = f32:0.00000
+/scene/object/2/enabled = f32:1.00000
+/scene/object/2/name = "Base"
+
+/scene/object/1/material/sound_speed = f32:5170.00000
+/scene/object/1/material/transparency/link = f32:1.00000
+/scene/object/1/material/diffusion/link = f32:1.00000
+/scene/object/1/material/dispersion/link = f32:1.00000
+/scene/object/1/material/absorption/link = f32:1.00000
+/scene/object/1/material/transparency/inner = f32:52.00000
+/scene/object/1/material/diffusion/inner = f32:1.00000
+/scene/object/1/material/dispersion/inner = f32:1.00000
+/scene/object/1/material/absorption/inner = f32:0.00000
+/scene/object/1/material/transparency/outer = f32:48.00000
+/scene/object/1/material/diffusion/outer = f32:1.00000
+/scene/object/1/material/dispersion/outer = f32:1.00000
+/scene/object/1/material/absorption/outer = f32:0.00000
+/scene/object/1/color/hue = f32:0.25000
+/scene/object/1/scale/z = f32:100.00000
+/scene/object/1/scale/y = f32:100.00000
+/scene/object/1/scale/x = f32:100.00000
+/scene/object/1/rotation/roll = f32:0.00000
+/scene/object/1/rotation/pitch = f32:0.00000
+/scene/object/1/rotation/yaw = f32:0.00000
+/scene/object/1/position/z = f32:0.00000
+/scene/object/1/position/y = f32:0.00000
+/scene/object/1/position/x = f32:0.00000
+/scene/object/1/enabled = f32:1.00000
+/scene/object/1/name = "Cooling systems"
+
+/scene/object/0/material/sound_speed = f32:4250.00000
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:1.50000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:1.50000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Body"
+
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Forest.patch 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Forest.patch
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Forest.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Forest.patch	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,110 @@
+ifn = "builtin://models/3d/forest.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/3/material/sound_speed = f32:4250.00000
+/scene/object/3/material/transparency/link = f32:1.00000
+/scene/object/3/material/diffusion/link = f32:1.00000
+/scene/object/3/material/dispersion/link = f32:1.00000
+/scene/object/3/material/absorption/link = f32:1.00000
+/scene/object/3/material/transparency/inner = f32:52.00000
+/scene/object/3/material/diffusion/inner = f32:1.00000
+/scene/object/3/material/dispersion/inner = f32:1.00000
+/scene/object/3/material/absorption/inner = f32:1.50000
+/scene/object/3/material/transparency/outer = f32:48.00000
+/scene/object/3/material/diffusion/outer = f32:1.00000
+/scene/object/3/material/dispersion/outer = f32:1.00000
+/scene/object/3/material/absorption/outer = f32:1.50000
+/scene/object/3/color/hue = f32:0.75000
+/scene/object/3/scale/z = f32:100.00000
+/scene/object/3/scale/y = f32:100.00000
+/scene/object/3/scale/x = f32:100.00000
+/scene/object/3/rotation/roll = f32:0.00000
+/scene/object/3/rotation/pitch = f32:0.00000
+/scene/object/3/rotation/yaw = f32:0.00000
+/scene/object/3/position/z = f32:0.00000
+/scene/object/3/position/y = f32:0.00000
+/scene/object/3/position/x = f32:0.00000
+/scene/object/3/enabled = f32:1.00000
+/scene/object/3/name = "Land"
+
+/scene/object/2/material/sound_speed = f32:5030.00000
+/scene/object/2/material/transparency/link = f32:1.00000
+/scene/object/2/material/diffusion/link = f32:1.00000
+/scene/object/2/material/dispersion/link = f32:1.00000
+/scene/object/2/material/absorption/link = f32:1.00000
+/scene/object/2/material/transparency/inner = f32:52.00000
+/scene/object/2/material/diffusion/inner = f32:1.00000
+/scene/object/2/material/dispersion/inner = f32:1.00000
+/scene/object/2/material/absorption/inner = f32:6.00000
+/scene/object/2/material/transparency/outer = f32:48.00000
+/scene/object/2/material/diffusion/outer = f32:1.00000
+/scene/object/2/material/dispersion/outer = f32:1.00000
+/scene/object/2/material/absorption/outer = f32:6.00000
+/scene/object/2/color/hue = f32:0.50000
+/scene/object/2/scale/z = f32:100.00000
+/scene/object/2/scale/y = f32:100.00000
+/scene/object/2/scale/x = f32:100.00000
+/scene/object/2/rotation/roll = f32:0.00000
+/scene/object/2/rotation/pitch = f32:0.00000
+/scene/object/2/rotation/yaw = f32:0.00000
+/scene/object/2/position/z = f32:0.00000
+/scene/object/2/position/y = f32:0.00000
+/scene/object/2/position/x = f32:0.00000
+/scene/object/2/enabled = f32:1.00000
+/scene/object/2/name = "Trunks"
+
+/scene/object/1/material/sound_speed = f32:4050.00000
+/scene/object/1/material/transparency/link = f32:1.00000
+/scene/object/1/material/diffusion/link = f32:1.00000
+/scene/object/1/material/dispersion/link = f32:1.00000
+/scene/object/1/material/absorption/link = f32:1.00000
+/scene/object/1/material/transparency/inner = f32:52.00000
+/scene/object/1/material/diffusion/inner = f32:1.00000
+/scene/object/1/material/dispersion/inner = f32:1.00000
+/scene/object/1/material/absorption/inner = f32:7.00000
+/scene/object/1/material/transparency/outer = f32:48.00000
+/scene/object/1/material/diffusion/outer = f32:1.00000
+/scene/object/1/material/dispersion/outer = f32:1.00000
+/scene/object/1/material/absorption/outer = f32:7.00000
+/scene/object/1/color/hue = f32:0.25000
+/scene/object/1/scale/z = f32:100.00000
+/scene/object/1/scale/y = f32:100.00000
+/scene/object/1/scale/x = f32:100.00000
+/scene/object/1/rotation/roll = f32:0.00000
+/scene/object/1/rotation/pitch = f32:0.00000
+/scene/object/1/rotation/yaw = f32:0.00000
+/scene/object/1/position/z = f32:0.00000
+/scene/object/1/position/y = f32:0.00000
+/scene/object/1/position/x = f32:0.00000
+/scene/object/1/enabled = f32:1.00000
+/scene/object/1/name = "Bushes"
+
+/scene/object/0/material/sound_speed = f32:5030.00000
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:6.00000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:6.00000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Crown"
+
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Parking.patch 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Parking.patch
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Parking.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Parking.patch	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,84 @@
+ifn = "builtin://models/3d/parking.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/2/material/sound_speed = f32:3600.00000
+/scene/object/2/material/transparency/link = f32:1.00000
+/scene/object/2/material/diffusion/link = f32:1.00000
+/scene/object/2/material/dispersion/link = f32:1.00000
+/scene/object/2/material/absorption/link = f32:1.00000
+/scene/object/2/material/transparency/inner = f32:52.00000
+/scene/object/2/material/diffusion/inner = f32:1.00000
+/scene/object/2/material/dispersion/inner = f32:1.00000
+/scene/object/2/material/absorption/inner = f32:3.20000
+/scene/object/2/material/transparency/outer = f32:48.00000
+/scene/object/2/material/diffusion/outer = f32:1.00000
+/scene/object/2/material/dispersion/outer = f32:1.00000
+/scene/object/2/material/absorption/outer = f32:3.20000
+/scene/object/2/color/hue = f32:0.66667
+/scene/object/2/scale/z = f32:100.00000
+/scene/object/2/scale/y = f32:100.00000
+/scene/object/2/scale/x = f32:100.00000
+/scene/object/2/rotation/roll = f32:0.00000
+/scene/object/2/rotation/pitch = f32:0.00000
+/scene/object/2/rotation/yaw = f32:0.00000
+/scene/object/2/position/z = f32:0.00000
+/scene/object/2/position/y = f32:0.00000
+/scene/object/2/position/x = f32:0.00000
+/scene/object/2/enabled = f32:1.00000
+/scene/object/2/name = "Base"
+
+/scene/object/1/material/sound_speed = f32:4250.00000
+/scene/object/1/material/transparency/link = f32:1.00000
+/scene/object/1/material/diffusion/link = f32:1.00000
+/scene/object/1/material/dispersion/link = f32:1.00000
+/scene/object/1/material/absorption/link = f32:1.00000
+/scene/object/1/material/transparency/inner = f32:52.00000
+/scene/object/1/material/diffusion/inner = f32:1.00000
+/scene/object/1/material/dispersion/inner = f32:1.00000
+/scene/object/1/material/absorption/inner = f32:1.50000
+/scene/object/1/material/transparency/outer = f32:48.00000
+/scene/object/1/material/diffusion/outer = f32:1.00000
+/scene/object/1/material/dispersion/outer = f32:1.00000
+/scene/object/1/material/absorption/outer = f32:1.50000
+/scene/object/1/color/hue = f32:0.33333
+/scene/object/1/scale/z = f32:100.00000
+/scene/object/1/scale/y = f32:100.00000
+/scene/object/1/scale/x = f32:100.00000
+/scene/object/1/rotation/roll = f32:0.00000
+/scene/object/1/rotation/pitch = f32:0.00000
+/scene/object/1/rotation/yaw = f32:0.00000
+/scene/object/1/position/z = f32:0.00000
+/scene/object/1/position/y = f32:0.00000
+/scene/object/1/position/x = f32:0.00000
+/scene/object/1/enabled = f32:1.00000
+/scene/object/1/name = "Floor"
+
+/scene/object/0/material/sound_speed = f32:5170.00000
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:0.00000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:0.00000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Cars"
+
diff -pruN "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Staircase Landing.patch" "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Staircase Landing.patch"
--- "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Staircase Landing.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Staircase Landing.patch"	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,84 @@
+ifn = "builtin://models/3d/staircase-landing.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/2/material/sound_speed = f32:4450.00000
+/scene/object/2/material/transparency/link = f32:1.00000
+/scene/object/2/material/diffusion/link = f32:1.00000
+/scene/object/2/material/dispersion/link = f32:1.00000
+/scene/object/2/material/absorption/link = f32:1.00000
+/scene/object/2/material/transparency/inner = f32:52.00000
+/scene/object/2/material/diffusion/inner = f32:1.00000
+/scene/object/2/material/dispersion/inner = f32:1.00000
+/scene/object/2/material/absorption/inner = f32:6.00000
+/scene/object/2/material/transparency/outer = f32:48.00000
+/scene/object/2/material/diffusion/outer = f32:1.00000
+/scene/object/2/material/dispersion/outer = f32:1.00000
+/scene/object/2/material/absorption/outer = f32:6.00000
+/scene/object/2/color/hue = f32:0.66667
+/scene/object/2/scale/z = f32:100.00000
+/scene/object/2/scale/y = f32:100.00000
+/scene/object/2/scale/x = f32:100.00000
+/scene/object/2/rotation/roll = f32:0.00000
+/scene/object/2/rotation/pitch = f32:0.00000
+/scene/object/2/rotation/yaw = f32:0.00000
+/scene/object/2/position/z = f32:0.00000
+/scene/object/2/position/y = f32:0.00000
+/scene/object/2/position/x = f32:0.00000
+/scene/object/2/enabled = f32:1.00000
+/scene/object/2/name = "Doors"
+
+/scene/object/1/material/sound_speed = f32:4250.00000
+/scene/object/1/material/transparency/link = f32:1.00000
+/scene/object/1/material/diffusion/link = f32:1.00000
+/scene/object/1/material/dispersion/link = f32:1.00000
+/scene/object/1/material/absorption/link = f32:1.00000
+/scene/object/1/material/transparency/inner = f32:52.00000
+/scene/object/1/material/diffusion/inner = f32:1.00000
+/scene/object/1/material/dispersion/inner = f32:1.00000
+/scene/object/1/material/absorption/inner = f32:1.50000
+/scene/object/1/material/transparency/outer = f32:48.00000
+/scene/object/1/material/diffusion/outer = f32:1.00000
+/scene/object/1/material/dispersion/outer = f32:1.00000
+/scene/object/1/material/absorption/outer = f32:1.50000
+/scene/object/1/color/hue = f32:0.33333
+/scene/object/1/scale/z = f32:100.00000
+/scene/object/1/scale/y = f32:100.00000
+/scene/object/1/scale/x = f32:100.00000
+/scene/object/1/rotation/roll = f32:0.00000
+/scene/object/1/rotation/pitch = f32:0.00000
+/scene/object/1/rotation/yaw = f32:0.00000
+/scene/object/1/position/z = f32:0.00000
+/scene/object/1/position/y = f32:0.00000
+/scene/object/1/position/x = f32:0.00000
+/scene/object/1/enabled = f32:1.00000
+/scene/object/1/name = "Base"
+
+/scene/object/0/material/sound_speed = f32:5370.00000
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:3.00000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:3.00000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Windows"
+
diff -pruN "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Subway Station.patch" "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Subway Station.patch"
--- "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Subway Station.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Subway Station.patch"	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,58 @@
+ifn = "builtin://models/3d/subway-station.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/1/material/sound_speed = f32:4250.00000
+/scene/object/1/material/transparency/link = f32:1.00000
+/scene/object/1/material/diffusion/link = f32:1.00000
+/scene/object/1/material/dispersion/link = f32:1.00000
+/scene/object/1/material/absorption/link = f32:1.00000
+/scene/object/1/material/transparency/inner = f32:52.00000
+/scene/object/1/material/diffusion/inner = f32:1.00000
+/scene/object/1/material/dispersion/inner = f32:1.00000
+/scene/object/1/material/absorption/inner = f32:1.50000
+/scene/object/1/material/transparency/outer = f32:48.00000
+/scene/object/1/material/diffusion/outer = f32:1.00000
+/scene/object/1/material/dispersion/outer = f32:1.00000
+/scene/object/1/material/absorption/outer = f32:1.50000
+/scene/object/1/color/hue = f32:0.50000
+/scene/object/1/scale/z = f32:100.00000
+/scene/object/1/scale/y = f32:100.00000
+/scene/object/1/scale/x = f32:100.00000
+/scene/object/1/rotation/roll = f32:0.00000
+/scene/object/1/rotation/pitch = f32:0.00000
+/scene/object/1/rotation/yaw = f32:0.00000
+/scene/object/1/position/z = f32:0.00000
+/scene/object/1/position/y = f32:0.00000
+/scene/object/1/position/x = f32:0.00000
+/scene/object/1/enabled = f32:1.00000
+/scene/object/1/name = "Station"
+
+/scene/object/0/material/sound_speed = f32:5170.00000
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:0.00000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:0.00000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Doors"
+
diff -pruN "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Suntory Hall Tokyo.patch" "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Suntory Hall Tokyo.patch"
--- "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Suntory Hall Tokyo.patch"	2025-03-01 12:43:13.468548288 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Suntory Hall Tokyo.patch"	2025-08-26 18:16:07.549772073 +0000
@@ -28,6 +28,6 @@ zscale = 100.00000
 /scene/object/0/position/y = f32:0.00000
 /scene/object/0/position/x = f32:0.00000
 /scene/object/0/enabled = f32:1.00000
-/scene/object/0/name = "Suntory_Hall_Tokyo"
+/scene/object/0/name = "Suntory Hall Tokyo"
 /scene/selected = f32:0.00000
 /scene/objects = i32:1
diff -pruN "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Train Carriage.patch" "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Train Carriage.patch"
--- "1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Train Carriage.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Train Carriage.patch"	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,136 @@
+ifn = "builtin://models/3d/train-carriage.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/4/material/sound_speed = f32:5050.00000
+/scene/object/4/material/transparency/link = f32:1.00000
+/scene/object/4/material/diffusion/link = f32:1.00000
+/scene/object/4/material/dispersion/link = f32:1.00000
+/scene/object/4/material/absorption/link = f32:1.00000
+/scene/object/4/material/transparency/inner = f32:52.00000
+/scene/object/4/material/diffusion/inner = f32:1.00000
+/scene/object/4/material/dispersion/inner = f32:1.00000
+/scene/object/4/material/absorption/inner = f32:0.00000
+/scene/object/4/material/transparency/outer = f32:48.00000
+/scene/object/4/material/diffusion/outer = f32:1.00000
+/scene/object/4/material/dispersion/outer = f32:1.00000
+/scene/object/4/material/absorption/outer = f32:0.00000
+/scene/object/4/color/hue = f32:0.80000
+/scene/object/4/scale/z = f32:100.00000
+/scene/object/4/scale/y = f32:100.00000
+/scene/object/4/scale/x = f32:100.00000
+/scene/object/4/rotation/roll = f32:0.00000
+/scene/object/4/rotation/pitch = f32:0.00000
+/scene/object/4/rotation/yaw = f32:0.00000
+/scene/object/4/position/z = f32:0.00000
+/scene/object/4/position/y = f32:0.00000
+/scene/object/4/position/x = f32:0.00000
+/scene/object/4/enabled = f32:1.00000
+/scene/object/4/name = "Bunks"
+
+/scene/object/3/material/sound_speed = f32:5030.00000
+/scene/object/3/material/transparency/link = f32:1.00000
+/scene/object/3/material/diffusion/link = f32:1.00000
+/scene/object/3/material/dispersion/link = f32:1.00000
+/scene/object/3/material/absorption/link = f32:1.00000
+/scene/object/3/material/transparency/inner = f32:52.00000
+/scene/object/3/material/diffusion/inner = f32:1.00000
+/scene/object/3/material/dispersion/inner = f32:1.00000
+/scene/object/3/material/absorption/inner = f32:6.00000
+/scene/object/3/material/transparency/outer = f32:48.00000
+/scene/object/3/material/diffusion/outer = f32:1.00000
+/scene/object/3/material/dispersion/outer = f32:1.00000
+/scene/object/3/material/absorption/outer = f32:6.00000
+/scene/object/3/color/hue = f32:0.60000
+/scene/object/3/scale/z = f32:100.00000
+/scene/object/3/scale/y = f32:100.00000
+/scene/object/3/scale/x = f32:100.00000
+/scene/object/3/rotation/roll = f32:0.00000
+/scene/object/3/rotation/pitch = f32:0.00000
+/scene/object/3/rotation/yaw = f32:0.00000
+/scene/object/3/position/z = f32:0.00000
+/scene/object/3/position/y = f32:0.00000
+/scene/object/3/position/x = f32:0.00000
+/scene/object/3/enabled = f32:1.00000
+/scene/object/3/name = "Doors inside"
+
+/scene/object/2/material/sound_speed = f32:5050.00000
+/scene/object/2/material/transparency/link = f32:1.00000
+/scene/object/2/material/diffusion/link = f32:1.00000
+/scene/object/2/material/dispersion/link = f32:1.00000
+/scene/object/2/material/absorption/link = f32:1.00000
+/scene/object/2/material/transparency/inner = f32:52.00000
+/scene/object/2/material/diffusion/inner = f32:1.00000
+/scene/object/2/material/dispersion/inner = f32:1.00000
+/scene/object/2/material/absorption/inner = f32:0.00000
+/scene/object/2/material/transparency/outer = f32:48.00000
+/scene/object/2/material/diffusion/outer = f32:1.00000
+/scene/object/2/material/dispersion/outer = f32:1.00000
+/scene/object/2/material/absorption/outer = f32:0.00000
+/scene/object/2/color/hue = f32:0.40000
+/scene/object/2/scale/z = f32:100.00000
+/scene/object/2/scale/y = f32:100.00000
+/scene/object/2/scale/x = f32:100.00000
+/scene/object/2/rotation/roll = f32:0.00000
+/scene/object/2/rotation/pitch = f32:0.00000
+/scene/object/2/rotation/yaw = f32:0.00000
+/scene/object/2/position/z = f32:0.00000
+/scene/object/2/position/y = f32:0.00000
+/scene/object/2/position/x = f32:0.00000
+/scene/object/2/enabled = f32:1.00000
+/scene/object/2/name = "Doors outside"
+
+/scene/object/1/material/sound_speed = f32:5370.00000
+/scene/object/1/material/transparency/link = f32:1.00000
+/scene/object/1/material/diffusion/link = f32:1.00000
+/scene/object/1/material/dispersion/link = f32:1.00000
+/scene/object/1/material/absorption/link = f32:1.00000
+/scene/object/1/material/transparency/inner = f32:52.00000
+/scene/object/1/material/diffusion/inner = f32:1.00000
+/scene/object/1/material/dispersion/inner = f32:1.00000
+/scene/object/1/material/absorption/inner = f32:3.00000
+/scene/object/1/material/transparency/outer = f32:48.00000
+/scene/object/1/material/diffusion/outer = f32:1.00000
+/scene/object/1/material/dispersion/outer = f32:1.00000
+/scene/object/1/material/absorption/outer = f32:3.00000
+/scene/object/1/color/hue = f32:0.20000
+/scene/object/1/scale/z = f32:100.00000
+/scene/object/1/scale/y = f32:100.00000
+/scene/object/1/scale/x = f32:100.00000
+/scene/object/1/rotation/roll = f32:0.00000
+/scene/object/1/rotation/pitch = f32:0.00000
+/scene/object/1/rotation/yaw = f32:0.00000
+/scene/object/1/position/z = f32:0.00000
+/scene/object/1/position/y = f32:0.00000
+/scene/object/1/position/x = f32:0.00000
+/scene/object/1/enabled = f32:1.00000
+/scene/object/1/name = "Windows"
+
+/scene/object/0/material/sound_speed = f32:5170.00000
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:0.00000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:0.00000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Base"
+
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Tunnel.patch 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Tunnel.patch
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Tunnel.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/presets/simulation/room_builder/Tunnel.patch	2025-08-26 18:16:07.549772073 +0000
@@ -0,0 +1,58 @@
+ifn = "builtin://models/3d/tunnel.obj"
+ifo = 9
+xscale = 100.00000
+yscale = 100.00000
+zscale = 100.00000
+
+/scene/object/1/material/sound_speed = f32:3950.00000
+/scene/object/1/material/transparency/link = f32:1.00000
+/scene/object/1/material/diffusion/link = f32:1.00000
+/scene/object/1/material/dispersion/link = f32:1.00000
+/scene/object/1/material/absorption/link = f32:1.00000
+/scene/object/1/material/transparency/inner = f32:52.00000
+/scene/object/1/material/diffusion/inner = f32:1.00000
+/scene/object/1/material/dispersion/inner = f32:1.00000
+/scene/object/1/material/absorption/inner = f32:1.50000
+/scene/object/1/material/transparency/outer = f32:48.00000
+/scene/object/1/material/diffusion/outer = f32:1.00000
+/scene/object/1/material/dispersion/outer = f32:1.00000
+/scene/object/1/material/absorption/outer = f32:1.50000
+/scene/object/1/color/hue = f32:0.50000
+/scene/object/1/scale/z = f32:100.00000
+/scene/object/1/scale/y = f32:100.00000
+/scene/object/1/scale/x = f32:100.00000
+/scene/object/1/rotation/roll = f32:0.00000
+/scene/object/1/rotation/pitch = f32:0.00000
+/scene/object/1/rotation/yaw = f32:0.00000
+/scene/object/1/position/z = f32:0.00000
+/scene/object/1/position/y = f32:0.00000
+/scene/object/1/position/x = f32:0.00000
+/scene/object/1/enabled = f32:1.00000
+/scene/object/1/name = "Base"
+
+/scene/object/0/material/sound_speed = f32:4250.00000
+/scene/object/0/material/transparency/link = f32:1.00000
+/scene/object/0/material/diffusion/link = f32:1.00000
+/scene/object/0/material/dispersion/link = f32:1.00000
+/scene/object/0/material/absorption/link = f32:1.00000
+/scene/object/0/material/transparency/inner = f32:52.00000
+/scene/object/0/material/diffusion/inner = f32:1.00000
+/scene/object/0/material/dispersion/inner = f32:1.00000
+/scene/object/0/material/absorption/inner = f32:1.50000
+/scene/object/0/material/transparency/outer = f32:48.00000
+/scene/object/0/material/diffusion/outer = f32:1.00000
+/scene/object/0/material/dispersion/outer = f32:1.00000
+/scene/object/0/material/absorption/outer = f32:1.50000
+/scene/object/0/color/hue = f32:0.00000
+/scene/object/0/scale/z = f32:100.00000
+/scene/object/0/scale/y = f32:100.00000
+/scene/object/0/scale/x = f32:100.00000
+/scene/object/0/rotation/roll = f32:0.00000
+/scene/object/0/rotation/pitch = f32:0.00000
+/scene/object/0/rotation/yaw = f32:0.00000
+/scene/object/0/position/z = f32:0.00000
+/scene/object/0/position/y = f32:0.00000
+/scene/object/0/position/x = f32:0.00000
+/scene/object/0/enabled = f32:1.00000
+/scene/object/0/name = "Road"
+
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/ui/simulation/room_builder/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/ui/simulation/room_builder/mono.xml
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/ui/simulation/room_builder/mono.xml	2025-03-01 12:43:13.468548288 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/ui/simulation/room_builder/mono.xml	2025-08-26 18:16:07.549772073 +0000
@@ -7,8 +7,8 @@
 			<align halign="-1" fill="true">
 				<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="false" bg.color="bg_schema">
 					<label text="labels.fft.frame"/>
-					<combo id="fft"/>
-					<button id="wpp" pad.l="10" ui:inject="Button_cyan" text="labels.ir_equalizer" size="16" width="64"/>
+					<combo id="fft" pad.r="10"/>
+					<button id="eqv" ui:id="eq_trigger" ui:inject="Button_yellow" text="labels.ir_equalizer" size="16"/>
 				</hbox>
 			</align>
 		</cell>
@@ -777,7 +777,7 @@
 		<!-- r9 -->
 		<cell cols="3">
 			<!-- IR routing -->
-			<cgroup id="signal">
+			<group text="lists.room_bld.convolvers" expand="true" spacing="0" ipadding="0">
 				<grid rows="7" cols="19" expand="true">
 					<!-- r1 -->
 					<ui:with pad.v="4" vreduce="true">
@@ -872,56 +872,70 @@
 					</ui:for>
 				</grid>
 
-				<!-- Equalizer -->
-				<grid rows="5" cols="12" height.min="194">
-
-					<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-
-					<cell rows="5"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
-
-					<ui:with pad.h="6" pad.v="4" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
-						<label text="50"/>
-						<label text="107"/>
-						<label text="227"/>
-						<label text="484"/>
-						<label text="labels.flt.1k"/>
-						<label text="labels.flt.2_2k"/>
-						<label text="labels.flt.4_7k"/>
-						<label text="labels.flt.10k"/>
-					</ui:with>
-
-					<cell rows="5">
-						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-					</cell>
-
-					<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+			</group>
+		</cell>
+	</grid>
+	<overlay id="eqv" trigger="eq_trigger" hpos="0" vpos="1" halign="1" valign="1" ipadding.t="4" padding.l="0" ipadding.l="0" padding.r="0" ipadding.r="0">
+		<group text="groups.wet_signal_eq" ipadding="0">
+			<grid rows="7" cols="12">
+
+				<cell cols="12">
+					<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" bg.color="bg_schema">
+						<void hfill="true" hexpand="true"/>
+						<button id="wpp" ui:inject="Button_green" text="labels.enable" size="16"/>
+					</hbox>
+				</cell>
 
-					<combo id="lcm" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+				<cell cols="12">
+					<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+				</cell>
+
+				<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<cell rows="5"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+
+				<ui:with pad.h="6" pad.v="4" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
+					<label text="50"/>
+					<label text="107"/>
+					<label text="227"/>
+					<label text="484"/>
+					<label text="labels.flt.1k"/>
+					<label text="labels.flt.2_2k"/>
+					<label text="labels.flt.4_7k"/>
+					<label text="labels.flt.10k"/>
+				</ui:with>
 
-					<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
-						<ui:for id="f" first="0" last="7">
-							<cell rows="3">
-								<fader id="eq_${f}" angle="1" scolor="(:wpp) ? 'fader' : 'fader_inactive'"/>
-							</cell>
-						</ui:for>
-					</ui:with>
+				<cell rows="5">
+					<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+				</cell>
+
+				<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<combo id="lcm" pad.h="6" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
+					<ui:for id="f" first="0" last="7">
+						<cell rows="3">
+							<fader id="eq_${f}" angle="1" scolor="(:wpp) ? 'fader' : 'fader_inactive'"/>
+						</cell>
+					</ui:for>
+				</ui:with>
 
-					<combo id="hcm" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				<combo id="hcm" pad.h="6" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
 
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.frequency" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="lcf" scolor="(:wpp) and (:lcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="hcf" scolor="(:wpp) and (:hcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-						<value id="lcf" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<ui:for id="f" first="0" last="7">
-							<value width.min="32" id="eq_${f}" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken"/>
-						</ui:for>
-						<value id="hcf" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</cgroup>
-		</cell>
+				<ui:with pad.h="6" pad.v="4">
+					<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<label text="labels.frequency" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="lcf" scolor="(:wpp) and (:lcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="hcf" scolor="(:wpp) and (:hcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+					<value id="lcf" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<ui:for id="f" first="0" last="7">
+						<value width.min="32" id="eq_${f}" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken"/>
+					</ui:for>
+					<value id="hcf" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				</ui:with>
+			</grid>
+		</group>
+	</overlay>
 
-	</grid>
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/res/main/ui/simulation/room_builder/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/ui/simulation/room_builder/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-room-builder/res/main/ui/simulation/room_builder/stereo.xml	2025-03-01 12:43:13.468548288 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/res/main/ui/simulation/room_builder/stereo.xml	2025-08-26 18:16:07.549772073 +0000
@@ -4,11 +4,11 @@
 		<!-- r1 -->
 		<cell cols="3">
 			<!-- Main settings -->
-			<align halign="-1" fill="true">
+			<align halign="-1" hfill="true"  vreduce="true">
 				<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="false" bg.color="bg_schema">
 					<label text="labels.fft.frame"/>
-					<combo id="fft"/>
-					<button id="wpp" pad.l="10" ui:inject="Button_cyan" text="labels.ir_equalizer" size="16" width="64"/>
+					<combo id="fft" pad.r="10"/>
+					<button id="eqv" ui:id="eq_trigger" ui:inject="Button_yellow" text="labels.ir_equalizer" size="16"/>
 				</hbox>
 			</align>
 		</cell>
@@ -793,7 +793,7 @@
 		<!-- r9 -->
 		<cell cols="3">
 			<!-- IR routing -->
-			<cgroup id="signal">
+			<group text="lists.room_bld.convolvers" expand="true" spacing="0" ipadding="0">
 
 				<grid rows="7" cols="21" expand="true">
 					<!-- r1 -->
@@ -895,57 +895,72 @@
 					</ui:for>
 				</grid>
 
-				<!-- Equalizer -->
-				<grid rows="5" cols="12" height.min="194">
+			</group>
+		</cell>
 
-					<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+	</grid>
 
-					<cell rows="5"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
+	<overlay id="eqv" trigger="eq_trigger" hpos="0" vpos="1" halign="1" valign="1" ipadding.t="4" padding.l="0" ipadding.l="0" padding.r="0" ipadding.r="0">
+		<group text="groups.wet_signal_eq" ipadding="0">
+			<grid rows="7" cols="12">
+
+				<cell cols="12">
+						<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="4" bg.color="bg_schema">
+							<void hfill="true" hexpand="true"/>
+							<button id="wpp" ui:inject="Button_green" text="labels.enable" size="16"/>
+						</hbox>
+				</cell>
 
-					<ui:with pad.h="6" pad.v="4" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
-						<label text="50"/>
-						<label text="107"/>
-						<label text="227"/>
-						<label text="484"/>
-						<label text="labels.flt.1k"/>
-						<label text="labels.flt.2_2k"/>
-						<label text="labels.flt.4_7k"/>
-						<label text="labels.flt.10k"/>
-					</ui:with>
+				<cell cols="12">
+					<hsep bg.color="bg" pad.v="2" vreduce="true"/>
+				</cell>
 
-					<cell rows="5">
-						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
-					</cell>
+				<label text="labels.flt.low_cut" pad.h="6" pad.v="4" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
 
-					<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				<cell rows="5"><vsep bg.color="bg" pad.h="2" hreduce="true"/></cell>
 
-					<combo id="lcm" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+				<ui:with pad.h="6" pad.v="4" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
+					<label text="50"/>
+					<label text="107"/>
+					<label text="227"/>
+					<label text="484"/>
+					<label text="labels.flt.1k"/>
+					<label text="labels.flt.2_2k"/>
+					<label text="labels.flt.4_7k"/>
+					<label text="labels.flt.10k"/>
+				</ui:with>
 
-					<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
-						<ui:for id="f" first="0" last="7">
-							<cell rows="3">
-								<fader id="eq_${f}" angle="1" scolor="(:wpp) ? 'fader' : 'fader_inactive'"/>
-							</cell>
-						</ui:for>
-					</ui:with>
+				<cell rows="5">
+					<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+				</cell>
 
-					<combo id="hcm" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				<label text="labels.flt.high_cut" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
 
-					<ui:with pad.h="6" pad.v="4">
-						<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<label text="labels.frequency" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="lcf" scolor="(:wpp) and (:lcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<knob id="hcf" scolor="(:wpp) and (:hcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-						<value id="lcf" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
-						<ui:for id="f" first="0" last="7">
-							<value width.min="32" id="eq_${f}" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken"/>
-						</ui:for>
-						<value id="hcf" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
-					</ui:with>
-				</grid>
-			</cgroup>
-		</cell>
+				<combo id="lcm" pad.h="6" fill="false" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
 
-	</grid>
+				<ui:with pad.h="6" pad.v="4" bright="(:wpp)? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken">
+					<ui:for id="f" first="0" last="7">
+						<cell rows="3">
+							<fader id="eq_${f}" angle="1" scolor="(:wpp) ? 'fader' : 'fader_inactive'"/>
+						</cell>
+					</ui:for>
+				</ui:with>
+
+				<combo id="hcm" pad.h="6" fill="false" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+
+				<ui:with pad.h="6" pad.v="4">
+					<label text="labels.frequency" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<label text="labels.frequency" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="lcf" scolor="(:wpp) and (:lcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<knob id="hcf" scolor="(:wpp) and (:hcm igt 0)? 'kscale' : 'cycle_inactive'" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+					<value id="lcf" bright="(:wpp) and (:lcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:lcm igt 0) ? 1 : :const_bg_darken"/>
+					<ui:for id="f" first="0" last="7">
+						<value width.min="32" id="eq_${f}" bright="(:wpp) ? 1 : 0.75" bg.bright="(:wpp) ? 1 : :const_bg_darken"/>
+					</ui:for>
+					<value id="hcf" bright="(:wpp) and (:hcm igt 0) ? 1 : 0.75" bg.bright="(:wpp) and (:hcm igt 0) ? 1 : :const_bg_darken"/>
+				</ui:with>
+			</grid>
+		</group>
+	</overlay>
 
 </plugin>
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/src/doc/manuals/plugins/room_builder.php 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/src/doc/manuals/plugins/room_builder.php
--- 1.2.21-5/modules/lsp-plugins-room-builder/src/doc/manuals/plugins/room_builder.php	2025-03-01 12:43:13.468548288 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/src/doc/manuals/plugins/room_builder.php	2025-08-26 18:16:07.549772073 +0000
@@ -11,18 +11,18 @@
 </p>
 <p>
 	So, in fact, this algorithm is a kind of raytracing algorithm but instead of single rays it
-	performs tracing of ray groups. This allows to simulate large spaces withous significantly loose
+	performs tracing of ray groups. This allows to simulate large spaces without significantly loose
 	in quality and precision.
 </p>
-<p>The typical simulation workflow is peformed in the following way:</p>
+<p>The typical simulation workflow is performed in the following way:</p>
 <ul>
 	<li>Prepare a room model in <a href="https://en.wikipedia.org/wiki/Wavefront_.obj_file">Wavefront OBJ file format</a>.</li>
 	<li>Load room model in the plugin's main window.</li>
-	<li>Edit environment settings like: audio sources, audio captures, objects' spacial parameters and material properties.</li>
+	<li>Edit environment settings like: audio sources, audio captures, objects' spatial parameters and material properties.</li>
 	<li>Launch the rendering process which will simulate physical processes and generate the impulse response of the room.</li>
 	<li>Obtain final samples after the rendeing is complete.</li>
 </ul>
-<p>Additionally, generated samples can be immediately applied to the input signal as a convolution. 
+<p>Additionally, generated samples can be immediately applied to the input signal as a convolution.
 This allows to understand the final result with minimum number of actions.</p>
 
 <p>The simulation algorithm relays on the following physical model.</p>
@@ -50,7 +50,7 @@ This allows to understand the final resu
 </p>
 <p>All these rules can be written using the following equations:</p>
 
-<?php out_image('graph/roombuilder-equations', 'The physical equations of Room Builder simulations') ?>     
+<?php out_image('graph/roombuilder-equations', 'The physical equations of Room Builder simulations') ?>
 
 <p>
 	To simulate sharpness of the surface, additional coefficients K<sub>diffusion</sub> and
@@ -65,7 +65,7 @@ This allows to understand the final resu
 <p><b>Controls</b>:</p>
 <ul>
     <li><b>FFT frame</b> - the maximum size of the FFT frame used for convolvers.</li>
-    <li><b>IR Eequalizer</b> - enables additional equalizer for processed (wet) signal.</li>
+	<li><b>IR equalizer</b> - shows wet signal equalization overlay.</li>
 </ul>
 
 <p><b>'Room browser' section:</b></p>
@@ -130,7 +130,7 @@ This allows to understand the final resu
 		<li><b>ORTF</b> - two capsules simulating the location of human ears.</li>
 		<li><b>MS</b> - mid/side configuration of microphones.</li>
 	</ul>
-	<li><b>Reflections</b> - sets the range of reflection orders that will be captured by this audio capture. 
+	<li><b>Reflections</b> - sets the range of reflection orders that will be captured by this audio capture.
 		This allows to eliminate early reflections or late reflections in the rendered result.
 	</li>
 	<li><b>Mic. direction</b> - specifies the microphone direction:</li>
@@ -220,10 +220,10 @@ This allows to understand the final resu
 	<li><b>Launch</b> - the button that starts the offline rendering process.</li>
 	<li><b>Stop</b> - the button that terminates the offline rendering process.</li>
 </ul>
-    
+
 <p><b>'Output' section:</b></p>
 <ul>
-	<?php if ($s) { ?>	
+	<?php if ($s) { ?>
 		<li><b>Dry Pan L/R</b> - the panning of the left and right channels of the dry (unprocessed) signal.</li>
 	<?php } else { ?>
 		<li><b>Dry Pan L/R</b> - the panning of the dry (unprocessed) signal.</li>
@@ -250,8 +250,9 @@ This allows to understand the final resu
 	<li><b>Out L/R</b> - the output balance of the processed signal between two channels in the stereo pair.</li>
 </ul>
 
-<p><b>'IR Equalizer' section:</b></p>
+<p><b>Wet Signal Equalization</b> overlay:</p>
 <ul>
+	<li><b>Enabled</b> - enables wet (processed) signal equalization.</li>
 	<li><b>Low-cut</b> - sets the slope of the high-pass butterworth filter, possible slopes are 6, 12 and 18 dB/octave.</li>
 	<li><b>Low-cut freq</b> - the cutoff frequency of the high-pass butterworth filter.</li>
 	<li><b>Faders</b> - faders that allow to change the loudness of eight corresponding frequency bands in range of -12..+12 dB</li>
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/src/main/meta/room_builder.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/src/main/meta/room_builder.cpp
--- 1.2.21-5/modules/lsp-plugins-room-builder/src/main/meta/room_builder.cpp	2025-03-01 12:43:13.468548288 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/src/main/meta/room_builder.cpp	2025-08-26 18:16:07.549772073 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-room-builder
  * Created on: 3 авг. 2021 г.
@@ -26,7 +26,7 @@
 
 #define LSP_PLUGINS_ROOM_BUILDER_VERSION_MAJOR       1
 #define LSP_PLUGINS_ROOM_BUILDER_VERSION_MINOR       0
-#define LSP_PLUGINS_ROOM_BUILDER_VERSION_MICRO       25
+#define LSP_PLUGINS_ROOM_BUILDER_VERSION_MICRO       27
 
 #define LSP_PLUGINS_ROOM_BUILDER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -105,13 +105,6 @@ namespace lsp
             { NULL, NULL }
         };
 
-        static const port_item_t rb_processors[] =
-        {
-            { "Convolvers",         "room_bld.convolvers" },
-            { "IR Equalizer",       "room_bld.ir_eq" },
-            { NULL, NULL }
-        };
-
         static const port_item_t rb_ssel[] =
         {
             { "0",                  NULL },
@@ -238,117 +231,116 @@ namespace lsp
         };
 
         #define RB_PAN_MONO \
-            PAN_CTL("p", "Panorama", 0.0f)
+            PAN_CTL("p", "Panorama", "Pan", 0.0f)
 
         #define RB_PAN_STEREO \
-            PAN_CTL("pl", "Left channel panorama", -100.0f), \
-            PAN_CTL("pr", "Right channel panorama", 100.0f)
+            PAN_CTL("pl", "Left channel panorama", "Pan L", -100.0f), \
+            PAN_CTL("pr", "Right channel panorama", "Pan R", 100.0f)
 
         #define RB_COMMON(pan) \
             BYPASS, \
-            COMBO("view", "Current view", 0, rb_view),              \
-            COMBO("editor", "Current editor", 0, rb_editor),        \
-            COMBO("signal", "Current signal processor", 0, rb_processors),  \
-            COMBO("fft", "FFT size", room_builder_metadata::FFT_RANK_DEFAULT, rb_fft_rank), \
-            CONTROL("pd", "Pre-delay", U_MSEC, room_builder_metadata::PREDELAY), \
+            COMBO("view", "Current view", "View", 0, rb_view),              \
+            COMBO("editor", "Current editor", "Editor", 0, rb_editor),        \
+            COMBO("fft", "FFT size", "FFT size", room_builder_metadata::FFT_RANK_DEFAULT, rb_fft_rank), \
+            CONTROL("pd", "Pre-delay", "Pre-delay", U_MSEC, room_builder_metadata::PREDELAY), \
             pan, \
-            AMP_GAIN1000("dry", "Dry amount", 1.0f), \
-            AMP_GAIN1000("wet", "Wet amount", 1.0f), \
+            AMP_GAIN1000("dry", "Dry amount", "Dry amount", 1.0f), \
+            AMP_GAIN1000("wet", "Wet amount", "Wet amount", 1.0f), \
             DRYWET(100.0f), \
             OUT_GAIN, \
-            CONTROL("threads", "Number of threads for processing", U_NONE, room_builder_metadata::THREADS), \
-            PERCENTS("quality", "Quality factor", 50.0f, 0.1f), \
+            CONTROL("threads", "Number of threads for processing", "Threads", U_NONE, room_builder_metadata::THREADS), \
+            PERCENTS("quality", "Quality factor", "Quality", 50.0f, 0.1f), \
             STATUS("status", "Render status"), \
             OUT_PERCENTS("prog", "Rendering progress"), \
-            SWITCH("normal", "Normalize rendered samples", 1.0f), \
-            TRIGGER("render", "Launch/Stop rendering process"), \
+            SWITCH("normal", "Normalize rendered samples", "Normalize", 1.0f), \
+            TRIGGER("render", "Launch/Stop rendering process", "Run/Stop"), \
             PATH("ifn", "Input 3D model file name"),    \
             STATUS("ifs", "Input 3D model load status"), \
             METER_PERCENT("ifp", "File loading progress"), \
-            COMBO("ifo", "Input 3D model orientation", 9, rb_orientation), \
-            CONTROL("xscale", "Scene X scale", U_PERCENT, room_builder_metadata::OSIZE), \
-            CONTROL("yscale", "Scene Y scale", U_PERCENT, room_builder_metadata::OSIZE), \
-            CONTROL("zscale", "Scene Z scale", U_PERCENT, room_builder_metadata::OSIZE), \
-            CONTROL_DFL("cposx", "Camera X position", U_M, room_builder_metadata::POSITION, 1.0f), \
-            CONTROL_DFL("cposy", "Camera Y position", U_M, room_builder_metadata::POSITION, -0.2f), \
-            CONTROL_DFL("cposz", "Camera Z position", U_M, room_builder_metadata::POSITION, 0.5f), \
-            { "cyaw", "Camera Yaw angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 80.0f, 0.1f, NULL, NULL }, \
-            { "cpitch", "Camera Pitch angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP, -89.0f, 89.0f, -25.0f, 0.1f, NULL, NULL }
+            COMBO("ifo", "Input 3D model orientation", "Orientation", 9, rb_orientation), \
+            CONTROL("xscale", "Scene X scale", "X scale", U_PERCENT, room_builder_metadata::OSIZE), \
+            CONTROL("yscale", "Scene Y scale", "Y scale", U_PERCENT, room_builder_metadata::OSIZE), \
+            CONTROL("zscale", "Scene Z scale", "Z scale", U_PERCENT, room_builder_metadata::OSIZE), \
+            CONTROL_DFL("cposx", "Camera X position", "X position", U_M, room_builder_metadata::POSITION, 1.0f), \
+            CONTROL_DFL("cposy", "Camera Y position", "Y position", U_M, room_builder_metadata::POSITION, -0.2f), \
+            CONTROL_DFL("cposz", "Camera Z position", "Z position", U_M, room_builder_metadata::POSITION, 0.5f), \
+            CYC_CONTROL_ALL("cyaw", "Camera Yaw angle", "Yaw", U_DEG, 0, 360, 80.0f, 0.1f), \
+            CONTROL_ALL("cpitch", "Camera Pitch angle", "Pitch", U_DEG, -89.0f, 89.0f, -25.0f, 0.1f)
 
 
         #define RB_SOURCE(id, label, x, total, ena) \
-            SWITCH("sse" id, "Source " label " enable", ena), \
-            COMBO("sscf" id, "Source " label " type", 4, rb_source_mode), \
-            SWITCH("ssph" id, "Source " label " phase invert", 0), \
-            CONTROL_DFL("sspx" id, "Source " label " X position", U_M, room_builder_metadata::POSITION, 0.0f), \
-            CONTROL_DFL("sspy" id, "Source " label " Y position", U_M, room_builder_metadata::POSITION, -1.0f), \
-            CONTROL_DFL("sspz" id, "Source " label " Z position", U_M, room_builder_metadata::POSITION, 0.0f), \
-            { "ssay" id , "Source " label " Yaw angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0.0f, 360, 90.0f, 0.1f, NULL, NULL }, \
-            { "ssap" id , "Source " label " Pitch angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP, -90.0f, 90.0f, 0, 0.1f, NULL, NULL }, \
-            { "ssar" id , "Source " label " Roll angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 0, 0.1f, NULL, NULL }, \
-            CONTROL("sss" id, "Source " label " size", U_CM, room_builder_metadata::SOURCE), \
-            CONTROL("shh" id, "Source " label " height", U_CM, room_builder_metadata::HEIGHT), \
-            PERCENTS("ssa" id, "Source " label " angle", 50.0f, 0.025f), \
-            PERCENTS("sscv" id, "Source " label " curvature", 100.0f, 0.05f), \
-            { "ssh" id, "Source " label " hue", U_NONE, R_CONTROL, F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, (float(x) / float(total)), 0.25f/360.0f, NULL     }
+            SWITCH("sse" id, "Source " label " enable", "Src on " label, ena), \
+            COMBO("sscf" id, "Source " label " type", "Src type " label, 4, rb_source_mode), \
+            SWITCH("ssph" id, "Source " label " phase invert", "Src phase " label, 0), \
+            CONTROL_DFL("sspx" id, "Source " label " X position", "Src X pos " label, U_M, room_builder_metadata::POSITION, 0.0f), \
+            CONTROL_DFL("sspy" id, "Source " label " Y position", "Src Y pos " label, U_M, room_builder_metadata::POSITION, -1.0f), \
+            CONTROL_DFL("sspz" id, "Source " label " Z position", "Src Z pos " label, U_M, room_builder_metadata::POSITION, 0.0f), \
+            CYC_CONTROL_ALL("ssay" id , "Source " label " Yaw angle", "Src yaw " label, U_DEG, 0.0f, 360, 90.0f, 0.1f), \
+            CONTROL_ALL("ssap" id , "Source " label " Pitch angle", "Src pitch " label, U_DEG, -90.0f, 90.0f, 0, 0.1f), \
+            CYC_CONTROL_ALL("ssar" id , "Source " label " Roll angle", "Src roll " label, U_DEG, 0, 360, 0, 0.1f), \
+            CONTROL("sss" id, "Source " label " size", "Src size " label, U_CM, room_builder_metadata::SOURCE), \
+            CONTROL("shh" id, "Source " label " height", "Src height " label, U_CM, room_builder_metadata::HEIGHT), \
+            PERCENTS("ssa" id, "Source " label " angle", "Src angle " label, 50.0f, 0.025f), \
+            PERCENTS("sscv" id, "Source " label " curvature", "Src curve " label, 100.0f, 0.05f), \
+            CYC_CONTROL_ALL("ssh" id, "Source " label " hue", "Src hue " label, U_NONE, 0.0f, 1.0f, (float(x) / float(total)), 0.25f/360.0f)
 
         #define RB_CAPTURE(id, label, x, total, ena) \
-            SWITCH("sce" id, "Capture " label " enable", ena), \
-            COMBO("scf" id, "Capture " label " first reflection order", 2, rb_reflection), \
-            COMBO("scl" id, "Capture " label " last reflection order", 0, rb_reflection), \
-            CONTROL_DFL("scpx" id, "Capture " label " X position", U_M, room_builder_metadata::POSITION, 0.0f), \
-            CONTROL_DFL("scpy" id, "Capture " label " Y position", U_M, room_builder_metadata::POSITION, 1.0f), \
-            CONTROL_DFL("scpz" id, "Capture " label " Z position", U_M, room_builder_metadata::POSITION, 0.0f), \
-            { "scay" id , "Capture " label " Yaw angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 270, 0.1f, NULL, NULL }, \
-            { "scap" id , "Capture " label " Pitch angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP, -90.0f, 90.0f, 0, 0.1f, NULL, NULL }, \
-            { "scar" id , "Capture " label " Roll angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 0, 0.1f, NULL, NULL }, \
-            CONTROL("sccs" id, "Capture " label " capsule size", U_CM, room_builder_metadata::CAPSULE), \
-            COMBO("sccf" id, "Capture " label " configuration", 1, rb_capture_config),      \
-            CONTROL("sca" id, "Capture " label " angle", U_DEG, room_builder_metadata::ANGLE),      \
-            CONTROL("scab" id, "Capture " label " AB distance", U_M, room_builder_metadata::DISTANCE),      \
-            COMBO("scmd" id, "Capture " label " microphone direction", 0, rb_capture_direction),      \
-            COMBO("scsd" id, "Capture " label " side microphone direction", 0, rb_capture_side_direction), \
+            SWITCH("sce" id, "Capture " label " enable", "Cap on " label, ena), \
+            COMBO("scf" id, "Capture " label " first reflection order", "Cap first " label, 2, rb_reflection), \
+            COMBO("scl" id, "Capture " label " last reflection order", "Cap last " label, 0, rb_reflection), \
+            CONTROL_DFL("scpx" id, "Capture " label " X position", "Capt X pos " label, U_M, room_builder_metadata::POSITION, 0.0f), \
+            CONTROL_DFL("scpy" id, "Capture " label " Y position", "Capt Y pos " label, U_M, room_builder_metadata::POSITION, 1.0f), \
+            CONTROL_DFL("scpz" id, "Capture " label " Z position", "Capt Z pos " label, U_M, room_builder_metadata::POSITION, 0.0f), \
+            CYC_CONTROL_ALL("scay" id , "Capture " label " Yaw angle", "Capt yaw " label, U_DEG, 0, 360, 270, 0.1f), \
+            CONTROL_ALL("scap" id , "Capture " label " Pitch angle", "Capt pitch " label, U_DEG, -90.0f, 90.0f, 0, 0.1f), \
+            CYC_CONTROL_ALL("scar" id , "Capture " label " Roll angle", "Capt roll " label, U_DEG, 0, 360, 0, 0.1f), \
+            CONTROL("sccs" id, "Capture " label " capsule size", "Capt size " label, U_CM, room_builder_metadata::CAPSULE), \
+            COMBO("sccf" id, "Capture " label " configuration", "Capt config " label, 1, rb_capture_config),      \
+            CONTROL("sca" id, "Capture " label " angle", "Capt angle " label, U_DEG, room_builder_metadata::ANGLE),      \
+            CONTROL("scab" id, "Capture " label " AB distance", "Capt dist " label, U_M, room_builder_metadata::DISTANCE),      \
+            COMBO("scmd" id, "Capture " label " microphone direction", "Cap dir " label, 0, rb_capture_direction),      \
+            COMBO("scsd" id, "Capture " label " side microphone direction", "Cap S dir " label, 0, rb_capture_side_direction), \
             \
-            CONTROL("ihc" id, "Head cut" label, U_MSEC, room_builder_metadata::CONV_LENGTH), \
-            CONTROL("itc" id, "Tail cut" label, U_MSEC, room_builder_metadata::CONV_LENGTH), \
-            CONTROL("ifi" id, "Fade in" label, U_MSEC, room_builder_metadata::CONV_LENGTH), \
-            CONTROL("ifo" id, "Fade out" label, U_MSEC, room_builder_metadata::CONV_LENGTH), \
-            TRIGGER("ils" id, "Impulse listen preview" label), \
-            TRIGGER("ilc" id, "Impulse stop preview" label), \
-            SWITCH("irv" id, "Impulse reverse" label, 0.0f), \
-            AMP_GAIN_RANGE("imkp" id, "Impulse makeup gain" label, 1.0f, 0.001f, 1000.0f), \
+            CONTROL("ihc" id, "Head cut" label, "Head cut " label, U_MSEC, room_builder_metadata::CONV_LENGTH), \
+            CONTROL("itc" id, "Tail cut" label, "Tail cut " label, U_MSEC, room_builder_metadata::CONV_LENGTH), \
+            CONTROL("ifi" id, "Fade in" label, "Fade in " label, U_MSEC, room_builder_metadata::CONV_LENGTH), \
+            CONTROL("ifo" id, "Fade out" label, "Fade out " label, U_MSEC, room_builder_metadata::CONV_LENGTH), \
+            TRIGGER("ils" id, "Impulse listen preview" label, "Play " label), \
+            TRIGGER("ilc" id, "Impulse stop preview" label, "Stop " label), \
+            SWITCH("irv" id, "Impulse reverse" label, "Reverse " label, 0.0f), \
+            AMP_GAIN_RANGE("imkp" id, "Impulse makeup gain" label, "Makeup " label, 1.0f, 0.001f, 1000.0f), \
             STATUS("ifs" id, "Impulse status" label), \
             METER("ifl" id, "Impulse length" label, U_MSEC, room_builder_metadata::CONV_LENGTH), \
             METER("sdur" id, "Impulse current duration" label, U_MSEC, room_builder_metadata::DURATION), \
             METER("smdur" id, "Impulse max duration" label, U_MSEC, room_builder_metadata::DURATION), \
             MESH("ifd" id, "Impulse file contents" label, room_builder_metadata::TRACKS_MAX, room_builder_metadata::MESH_SIZE), \
             PATH("ofn" id, "Sample file name" label), \
-            TRIGGER("ofc" id , "Sample save command" label), \
+            TRIGGER("ofc" id , "Sample save command" label, "Save " label), \
             STATUS("ofs" id, "Sample saving status" label), \
             METER_PERCENT("ofp" id, "Sample saving progress" label), \
-            \
-            { "sch" id, "Capture " label " hue", U_NONE, R_CONTROL, F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, (float(x) / float(total)), 0.25f/360.0f, NULL     }
+            CYC_CONTROL_ALL("sch" id, "Capture " label " hue", "Capt hue " label, U_NONE, 0.0f, 1.0f, (float(x) / float(total)), 0.25f/360.0f)
 
         #define RB_CONVOLVER_MONO(id, label, file, track, mix) \
-            COMBO("csf" id, "Channel source sample" label, file, rb_samples), \
-            COMBO("cst" id, "Channel source track" label, track, rb_tracks), \
-            AMP_GAIN100("mk" id, "Makeup gain" label, 1.0f), \
-            SWITCH("cam" id, "Channel mute" label, 0.0f), \
+            COMBO("csf" id, "Channel source sample" label, "Chan src " label, file, rb_samples), \
+            COMBO("cst" id, "Channel source track" label, "Chan track " label, track, rb_tracks), \
+            AMP_GAIN100("mk" id, "Makeup gain" label, "Chan makeup " label, 1.0f), \
+            SWITCH("cam" id, "Channel mute" label, "Chan mute " label, 0.0f), \
             BLINK("ca" id, "Channel activity" label), \
-            CONTROL("pd" id, "Channel pre-delay" label, U_MSEC, room_builder_metadata::PREDELAY), \
-            PAN_CTL("com" id, "Channel Left/Right output mix" label, mix)
+            CONTROL("pd" id, "Channel pre-delay" label, "Pre-delay " label, U_MSEC, room_builder_metadata::PREDELAY), \
+            PAN_CTL("com" id, "Channel Left/Right output mix" label, "Out pan " label, mix)
 
         #define RB_CONVOLVER_STEREO(id, label, file, track, in_mix, out_mix) \
-            PAN_CTL("cim" id, "Left/Right input mix" label, in_mix), \
+            PAN_CTL("cim" id, "Left/Right input mix" label, "In pan " label, in_mix), \
             RB_CONVOLVER_MONO(id, label, file, track, out_mix)
 
         #define RB_EQ_BAND(id, freq)    \
-            CONTROL("eq_" #id, "Band " freq "Hz gain", U_GAIN_AMP, room_builder_metadata::BA)
+            CONTROL("eq_" #id, "Band " freq "Hz gain", "Eq " freq, U_GAIN_AMP, room_builder_metadata::BA)
 
         #define RB_EQUALIZER    \
-            SWITCH("wpp", "Wet post-process", 0),    \
-            COMBO("lcm", "Low-cut mode", 0, filter_slope),      \
-            CONTROL("lcf", "Low-cut frequency", U_HZ, room_builder_metadata::LCF),   \
+            SWITCH("wpp", "Wet post-process", "Wet postproc", 0),    \
+            SWITCH("eqv", "Equalizer visibility", "Show Eq", 0),    \
+            COMBO("lcm", "Low-cut mode", "LC mode", 0, filter_slope),      \
+            LOG_CONTROL("lcf", "Low-cut frequency", "LC Freq", U_HZ, room_builder_metadata::LCF),   \
             RB_EQ_BAND(0, "50"), \
             RB_EQ_BAND(1, "107"), \
             RB_EQ_BAND(2, "227"), \
@@ -357,8 +349,8 @@ namespace lsp
             RB_EQ_BAND(5, "2.2 k"), \
             RB_EQ_BAND(6, "4.7 k"), \
             RB_EQ_BAND(7, "10 k"), \
-            COMBO("hcm", "High-cut mode", 0, filter_slope),      \
-            CONTROL("hcf", "High-cut frequency", U_HZ, room_builder_metadata::HCF)
+            COMBO("hcm", "High-cut mode", "HC mode", 0, filter_slope),      \
+            LOG_CONTROL("hcf", "High-cut frequency", "HC freq", U_HZ, room_builder_metadata::HCF)
 
         static const port_t room_builder_mono_ports[] =
         {
@@ -368,7 +360,7 @@ namespace lsp
             AUDIO_OUTPUT_RIGHT,
             RB_COMMON(RB_PAN_MONO),
 
-            COMBO("ssel", "Source selector", 0, rb_ssel),
+            COMBO("ssel", "Source selector", "Source", 0, rb_ssel),
             RB_SOURCE("_0", "0", 0, 8, 1),
             RB_SOURCE("_1", "1", 1, 8, 0),
             RB_SOURCE("_2", "2", 2, 8, 0),
@@ -378,7 +370,7 @@ namespace lsp
             RB_SOURCE("_6", "6", 6, 8, 0),
             RB_SOURCE("_7", "7", 7, 8, 0),
 
-            COMBO("csel", "Capture selector", 0, rb_csel),
+            COMBO("csel", "Capture selector", "Capture", 0, rb_csel),
             RB_CAPTURE("_0", "0", 0, 8, 1),
             RB_CAPTURE("_1", "1", 1, 8, 0),
             RB_CAPTURE("_2", "2", 2, 8, 0),
@@ -404,7 +396,7 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             RB_COMMON(RB_PAN_STEREO),
 
-            COMBO("ssel", "Source selector", 0, rb_ssel),
+            COMBO("ssel", "Source selector", "Sourec", 0, rb_ssel),
             RB_SOURCE("_0", "0", 0, 8, 1),
             RB_SOURCE("_1", "1", 1, 8, 0),
             RB_SOURCE("_2", "2", 2, 8, 0),
@@ -414,7 +406,7 @@ namespace lsp
             RB_SOURCE("_6", "6", 6, 8, 0),
             RB_SOURCE("_7", "7", 7, 8, 0),
 
-            COMBO("csel", "Capture selector", 0, rb_csel),
+            COMBO("csel", "Capture selector", "Capture", 0, rb_csel),
             RB_CAPTURE("_0", "0", 0, 8, 1),
             RB_CAPTURE("_1", "1", 1, 8, 0),
             RB_CAPTURE("_2", "2", 2, 8, 0),
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/src/main/plug/room_builder.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/src/main/plug/room_builder.cpp
--- 1.2.21-5/modules/lsp-plugins-room-builder/src/main/plug/room_builder.cpp	2025-03-01 12:43:13.468548288 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/src/main/plug/room_builder.cpp	2025-08-26 18:16:07.549772073 +0000
@@ -171,7 +171,7 @@ namespace lsp
                 }
                 const dsp::point3d_t *c  = obj->center();
 
-                sprintf(base, "/scene/object/%d", int(i));
+                snprintf(base, sizeof(base), "/scene/object/%d", int(i));
                 lsp_trace("Deploying KVT parameters for %s", base);
 
                 kvt_deploy(kvt, base, "name", obj->get_name(), core::KVT_TX); // Always overwrite name
@@ -587,7 +587,6 @@ namespace lsp
             BIND_PORT(pBypass);
             SKIP_PORT("View selector");
             SKIP_PORT("Editor selector");
-            SKIP_PORT("Processor selector");
             BIND_PORT(pRank);
             BIND_PORT(pPredelay);
 
@@ -717,6 +716,7 @@ namespace lsp
                 channel_t *c        = &vChannels[i];
 
                 BIND_PORT(c->pWetEq);
+                SKIP_PORT("Equalizer visibility"); // Skip equalizer visibility port
                 BIND_PORT(c->pLowCut);
                 BIND_PORT(c->pLowFreq);
 
@@ -1612,7 +1612,7 @@ namespace lsp
                     continue;
 
                 // Read object properties
-                sprintf(base, "/scene/object/%d", int(i));
+                snprintf(base, sizeof(base), "/scene/object/%d", int(i));
                 read_object_properties(&props, base, kvt);
 
                 // Update object matrix and visibility
@@ -1807,7 +1807,7 @@ namespace lsp
                 p.blob.data     = hdr;
 
                 // Deploy KVT parameter
-                sprintf(path, "/samples/%d", int(s->nID));
+                snprintf(path, sizeof(path), "/samples/%d", int(s->nID));
                 core::KVTStorage *kvt = kvt_lock();
                 if (kvt != NULL)
                 {
@@ -1988,7 +1988,7 @@ namespace lsp
             const dspu::sample_header_t *phdr;
             char path[0x40];
 
-            sprintf(path, "/samples/%d", int(sample_id));
+            snprintf(path, sizeof(path), "/samples/%d", int(sample_id));
 
             // Fetch parameter
             res = kvt->get(path, &p, core::KVT_BLOB);
diff -pruN 1.2.21-5/modules/lsp-plugins-room-builder/src/main/ui/room_builder.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/src/main/ui/room_builder.cpp
--- 1.2.21-5/modules/lsp-plugins-room-builder/src/main/ui/room_builder.cpp	2025-03-01 12:43:13.468548288 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-room-builder/src/main/ui/room_builder.cpp	2025-08-26 18:16:07.549772073 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-room-builder
  * Created on: 3 авг. 2021 г.
@@ -38,31 +38,31 @@ namespace lsp
 
         static const port_t room_builder_kvt_ports[] =
         {
-            COMBO(KVT_PORT("oid"), "Selected object index", 0, NULL),
-            SWITCH(KVT_PORT("enabled"), "Object enable", 0),
-            CONTROL_DFL(KVT_PORT("xpos"), "Object position X", U_M, room_builder_metadata::POSITION, 0.0f),
-            CONTROL_DFL(KVT_PORT("ypos"), "Object position Y", U_M, room_builder_metadata::POSITION, 0.0f),
-            CONTROL_DFL(KVT_PORT("zpos"), "Object position Z", U_M, room_builder_metadata::POSITION, 0.0f),
-            { KVT_PORT("yaw"), "Object Yaw angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0.0f, 360, 0.0f, 0.1f, NULL, NULL },
-            { KVT_PORT("pitch"), "Object Pitch angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP, -90.0f, 90.0f, 0, 0.1f, NULL, NULL },
-            { KVT_PORT("roll"), "Object Roll angle", U_DEG, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_CYCLIC, 0, 360, 0, 0.1f, NULL, NULL },
-            CONTROL(KVT_PORT("xscale"), "Object scaling X", U_PERCENT, room_builder_metadata::OSIZE),
-            CONTROL(KVT_PORT("yscale"), "Object scaling Y", U_PERCENT, room_builder_metadata::OSIZE),
-            CONTROL(KVT_PORT("zscale"), "Object scaling Z", U_PERCENT, room_builder_metadata::OSIZE),
-            { KVT_PORT("hue"), "Object hue", U_NONE, R_CONTROL, F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, 0.0f, 0.25f/360.0f, NULL     },
-            LOG_CONTROL(KVT_PORT("oabs"), "Outer absorption", U_PERCENT, room_builder_metadata::MAT_ABSORPTION),
-            LOG_CONTROL(KVT_PORT("iabs"), "Inner absorption", U_PERCENT, room_builder_metadata::MAT_ABSORPTION),
-            SWITCH(KVT_PORT("labs"), "Link absorption parameters", 1.0f),
-            LOG_CONTROL(KVT_PORT("odisp"), "Refracted wave outer dispersion", U_NONE, room_builder_metadata::MAT_DISPERSION),
-            LOG_CONTROL(KVT_PORT("idisp"), "Refracted wave inner dispersion", U_NONE, room_builder_metadata::MAT_DISPERSION),
-            SWITCH(KVT_PORT("ldisp"), "Link refracted wave dispersion parameters", 1.0f),
-            LOG_CONTROL(KVT_PORT("odiff"), "Reflected wave outer diffusion", U_NONE, room_builder_metadata::MAT_DISPERSION),
-            LOG_CONTROL(KVT_PORT("idiff"), "Reflected wave inner diffusion", U_NONE, room_builder_metadata::MAT_DISPERSION),
-            SWITCH(KVT_PORT("ldiff"), "Link reflected wave inner diffusion parameters", 1.0f),
-            CONTROL(KVT_PORT("otransp"), "Material outer transparency", U_NONE, room_builder_metadata::MAT_TRANSPARENCY),
-            CONTROL(KVT_PORT("itransp"), "Material inner transparency", U_NONE, room_builder_metadata::MAT_TRANSPARENCY),
-            SWITCH(KVT_PORT("ltransp"), "Link material transparency parameters", 1.0f),
-            CONTROL(KVT_PORT("speed"), "Sound speed in material", U_MPS, room_builder_metadata::MAT_SOUND_SPEED)
+            COMBO(KVT_PORT("oid"), "Selected object index", NULL, 0, NULL),
+            SWITCH(KVT_PORT("enabled"), "Object enable", NULL, 0),
+            CONTROL_DFL(KVT_PORT("xpos"), "Object position X", NULL, U_M, room_builder_metadata::POSITION, 0.0f),
+            CONTROL_DFL(KVT_PORT("ypos"), "Object position Y", NULL, U_M, room_builder_metadata::POSITION, 0.0f),
+            CONTROL_DFL(KVT_PORT("zpos"), "Object position Z", NULL, U_M, room_builder_metadata::POSITION, 0.0f),
+            CYC_CONTROL_ALL(KVT_PORT("yaw"), "Object Yaw angle", NULL, U_DEG, 0.0f, 360, 0.0f, 0.1f),
+            CONTROL_ALL(KVT_PORT("pitch"), "Object Pitch angle", NULL, U_DEG, -90.0f, 90.0f, 0, 0.1f),
+            CYC_CONTROL_ALL(KVT_PORT("roll"), "Object Roll angle", NULL, U_DEG, 0, 360, 0, 0.1f),
+            CONTROL(KVT_PORT("xscale"), "Object scaling X", NULL, U_PERCENT, room_builder_metadata::OSIZE),
+            CONTROL(KVT_PORT("yscale"), "Object scaling Y", NULL, U_PERCENT, room_builder_metadata::OSIZE),
+            CONTROL(KVT_PORT("zscale"), "Object scaling Z", NULL, U_PERCENT, room_builder_metadata::OSIZE),
+            CYC_CONTROL_ALL(KVT_PORT("hue"), "Object hue", NULL, U_NONE, 0.0f, 1.0f, 0.0f, 0.25f/360.0f),
+            LOG_CONTROL(KVT_PORT("oabs"), "Outer absorption", NULL, U_PERCENT, room_builder_metadata::MAT_ABSORPTION),
+            LOG_CONTROL(KVT_PORT("iabs"), "Inner absorption", NULL, U_PERCENT, room_builder_metadata::MAT_ABSORPTION),
+            SWITCH(KVT_PORT("labs"), "Link absorption parameters", NULL, 1.0f),
+            LOG_CONTROL(KVT_PORT("odisp"), "Refracted wave outer dispersion", NULL, U_NONE, room_builder_metadata::MAT_DISPERSION),
+            LOG_CONTROL(KVT_PORT("idisp"), "Refracted wave inner dispersion", NULL, U_NONE, room_builder_metadata::MAT_DISPERSION),
+            SWITCH(KVT_PORT("ldisp"), "Link refracted wave dispersion parameters", NULL, 1.0f),
+            LOG_CONTROL(KVT_PORT("odiff"), "Reflected wave outer diffusion", NULL, U_NONE, room_builder_metadata::MAT_DISPERSION),
+            LOG_CONTROL(KVT_PORT("idiff"), "Reflected wave inner diffusion", NULL, U_NONE, room_builder_metadata::MAT_DISPERSION),
+            SWITCH(KVT_PORT("ldiff"), "Link reflected wave inner diffusion parameters", NULL, 1.0f),
+            CONTROL(KVT_PORT("otransp"), "Material outer transparency", NULL, U_NONE, room_builder_metadata::MAT_TRANSPARENCY),
+            CONTROL(KVT_PORT("itransp"), "Material inner transparency", NULL, U_NONE, room_builder_metadata::MAT_TRANSPARENCY),
+            SWITCH(KVT_PORT("ltransp"), "Link material transparency parameters", NULL, 1.0f),
+            CONTROL(KVT_PORT("speed"), "Sound speed in material", NULL, U_MPS, room_builder_metadata::MAT_SOUND_SPEED)
         };
     }
 
@@ -104,7 +104,7 @@ namespace lsp
             // Prepare the value
             char name[0x100];
             float value = 0.0f;
-            ::sprintf(name, "/scene/object/%d/%s", int(pUI->nSelected), sPattern);
+            ::snprintf(name, sizeof(name), "/scene/object/%d/%s", int(pUI->nSelected), sPattern);
 
             // Fetch value
             core::KVTStorage *kvt = pUI->wrapper()->kvt_lock();
@@ -129,7 +129,7 @@ namespace lsp
 
             // Prepare the value
             char name[0x100];
-            sprintf(name, "/scene/object/%d/%s", int(pUI->nSelected), sPattern);
+            ::snprintf(name, sizeof(name), "/scene/object/%d/%s", int(pUI->nSelected), sPattern);
             value       = limit_value(pMetadata, value);
 
             // Obtain KVT storage
@@ -153,7 +153,7 @@ namespace lsp
         bool room_builder_ui::CtlFloatPort::changed(core::KVTStorage *storage, const char *id, const core::kvt_param_t *value)
         {
             char name[0x100];
-            ::sprintf(name, "/scene/object/%d/%s", int(pUI->nSelected), sPattern);
+            ::snprintf(name, sizeof(name), "/scene/object/%d/%s", int(pUI->nSelected), sPattern);
             if (::strcmp(name, id) != 0)
                 return false;
 
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-sampler/.github/workflows/build.yml	2025-03-01 12:43:19.948509393 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/.github/workflows/build.yml	2025-08-26 18:16:11.481733911 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-sampler/CHANGELOG	2025-03-01 12:43:19.948509393 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/CHANGELOG	2025-08-26 18:16:11.481733911 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.30 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.29 ===
+* Updated build scripts and dependencies.
+
 === 1.0.28 ===
 * Implemented possibility to Drag&Drop drumkits, SFZ files and LSPC files directly
   to the plugin's window for import purpose.
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-sampler/dependencies.mk	2025-03-01 12:43:19.948509393 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/dependencies.mk	2025-08-26 18:16:11.481733911 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/include/private/plugins/sampler.h 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/include/private/plugins/sampler.h
--- 1.2.21-5/modules/lsp-plugins-sampler/include/private/plugins/sampler.h	2025-03-01 12:43:19.948509393 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/include/private/plugins/sampler.h	2025-08-26 18:16:11.481733911 +0000
@@ -125,6 +125,8 @@ namespace lsp
                 plug::IPort        *pWet;               // Wet amount port
                 plug::IPort        *pDryWet;            // Dry/Wet balance
                 plug::IPort        *pGain;              // Output gain port
+                plug::IPort        *pEditMode;          // Edit mode
+                plug::IPort        *pInstSel;           // Instrument selector
                 plug::IPort        *pDOGain;            // Direct output gain flag
                 plug::IPort        *pDOPan;             // Direct output panning flag
 
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/include/private/plugins/sampler_kernel.h 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/include/private/plugins/sampler_kernel.h
--- 1.2.21-5/modules/lsp-plugins-sampler/include/private/plugins/sampler_kernel.h	2025-03-01 12:43:19.948509393 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/include/private/plugins/sampler_kernel.h	2025-08-26 18:16:11.481733911 +0000
@@ -140,9 +140,11 @@ namespace lsp
                     dspu::Sample       *pOriginal;                                      // Source sample (original, as from source file)
                     dspu::Sample       *pProcessed;                                     // Processed sample
                     float              *vThumbs[meta::sampler_metadata::TRACKS_MAX];    // List of thumbnails
+                    float              *vCutThumbs[meta::sampler_metadata::TRACKS_MAX]; // List of thumbnails with cut-off
 
                     uint32_t            nUpdateReq;                                     // Update request
                     uint32_t            nUpdateResp;                                    // Update response
+                    bool                bEnvEdit;                                       // Envelope editing
                     bool                bSync;                                          // Sync flag
                     float               fMinVelocity;                                   // Minimum velocity
                     float               fMaxVelocity;                                   // Maximum velocity
@@ -171,14 +173,33 @@ namespace lsp
                     uint32_t            nCompensateFadeType;                            // Compensate fade type
                     float               fPreDelay;                                      // Pre-delay
                     float               fMakeup;                                        // Makeup gain
+                    float               fEnvelopeAttackTime;                            // Attack time
+                    float               fEnvelopeHoldTime;                              // Hold time
+                    float               fEnvelopeDecayTime;                             // Decay time
+                    float               fEnvelopeSlopeTime;                             // Slope time
+                    float               fEnvelopeReleaseTime;                           // Release time
+                    float               fEnvelopeBreakLevel;                            // Break level
+                    float               fEnvelopeSustainLevel;                          // Sustain level
+                    float               fEnvelopeAttackCurve;                           // Attack curvature
+                    float               fEnvelopeDecayCurve;                            // Decay curvature
+                    float               fEnvelopeSlopeCurve;                            // Slope curvature
+                    float               fEnvelopeReleaseCurve;                          // Release curvature
+                    uint32_t            nEnvelopeAttackType;                            // Attack curve type
+                    uint32_t            nEnvelopeDecayType;                             // Decay curve type
+                    uint32_t            nEnvelopeSlopeType;                             // Slope curve type
+                    uint32_t            nEnvelopeReleaseType;                           // Release curve type
                     float               fGains[meta::sampler_metadata::TRACKS_MAX];     // List of gain values
                     float               fLength;                                        // Length of source sample in milliseconds
                     float               fActualLength;                                  // Length of processed sample in milliseconds
                     status_t            nStatus;                                        // Loading status
                     bool                bOn;                                            // On flag
+                    bool                bEnvelopeOn;                                    // Envelope is enabled
+                    bool                bEnvelopeHoldOn;                                // Enable Hold point
+                    bool                bEnvelopeBreakOn;                               // Enable Break point
 
                     plug::IPort        *pFile;                                          // Audio file port
                     plug::IPort        *pPitch;                                         // Pitch
+
                     plug::IPort        *pStretchOn;                                     // Stretch enabled
                     plug::IPort        *pStretch;                                       // Stretch amount
                     plug::IPort        *pStretchStart;                                  // Start of the stretch region
@@ -186,17 +207,39 @@ namespace lsp
                     plug::IPort        *pStretchChunk;                                  // Stretch chunk
                     plug::IPort        *pStretchFade;                                   // Stretch cross-fade length
                     plug::IPort        *pStretchFadeType;                               // Stretch cross-fade type
+
                     plug::IPort        *pLoopOn;                                        // Loop enabled
                     plug::IPort        *pLoopMode;                                      // Loop mode
                     plug::IPort        *pLoopStart;                                     // Start of the loop region
                     plug::IPort        *pLoopEnd;                                       // End of the loop region
                     plug::IPort        *pLoopFadeType;                                  // Loop cross-fade type
                     plug::IPort        *pLoopFade;                                      // Loop cross-fade length
+
                     plug::IPort        *pHeadCut;                                       // Head cut
                     plug::IPort        *pTailCut;                                       // Tail cut
                     plug::IPort        *pFadeIn;                                        // Fade in length
                     plug::IPort        *pFadeOut;                                       // Fade out length
                     plug::IPort        *pMakeup;                                        // Makup gain
+
+                    plug::IPort        *pEnvelopeOn;                                    // Enable envelope
+                    plug::IPort        *pEnvelopeHoldOn;                                // Enable Hold point
+                    plug::IPort        *pEnvelopeBreakOn;                               // Enable Break point
+                    plug::IPort        *pEnvelopeAttackTime;                            // Attack time
+                    plug::IPort        *pEnvelopeHoldTime;                              // Hold time
+                    plug::IPort        *pEnvelopeDecayTime;                             // Decay time
+                    plug::IPort        *pEnvelopeSlopeTime;                             // Slope time
+                    plug::IPort        *pEnvelopeReleaseTime;                           // Release time
+                    plug::IPort        *pEnvelopeBreakLevel;                            // Break level
+                    plug::IPort        *pEnvelopeSustainLevel;                          // Sustain level
+                    plug::IPort        *pEnvelopeAttackCurve;                           // Attack curvature
+                    plug::IPort        *pEnvelopeDecayCurve;                            // Decay curvature
+                    plug::IPort        *pEnvelopeSlopeCurve;                            // Slope curvature
+                    plug::IPort        *pEnvelopeReleaseCurve;                          // Release curvature
+                    plug::IPort        *pEnvelopeAttackType;                            // Attack curve type
+                    plug::IPort        *pEnvelopeDecayType;                             // Decay curve type
+                    plug::IPort        *pEnvelopeSlopeType;                             // Slope curve type
+                    plug::IPort        *pEnvelopeReleaseType;                           // Release curve type
+
                     plug::IPort        *pVelocity;                                      // Velocity range top
                     plug::IPort        *pPreDelay;                                      // Pre-delay
                     plug::IPort        *pOn;                                            // Sample on outputflag
@@ -239,6 +282,7 @@ namespace lsp
                 bool                bBypass;                                            // Bypass flag
                 bool                bReorder;                                           // Reorder flag
                 bool                bHandleVelocity;                                    // Velocity handling flag
+                bool                bEnvelopeEdit;                                      // Envelope edit
                 float               fFadeout;                                           // Fadeout in milliseconds
                 float               fDynamics;                                          // Dynamics
                 float               fDrift;                                             // Time drifting
@@ -247,6 +291,7 @@ namespace lsp
                 plug::IPort        *pDynamics;                                          // Dynamics port
                 plug::IPort        *pHandleVelocity;                                    // Velocity handling
                 plug::IPort        *pDrift;                                             // Time drifting port
+                plug::IPort        *pSampleSel;                                         // Sample selector
                 plug::IPort        *pActivity;                                          // Activity port
                 plug::IPort        *pListen;                                            // Listen sample preview
                 plug::IPort        *pStop;                                              // Stop listen sample preview
@@ -303,6 +348,7 @@ namespace lsp
 
             public:
                 void        set_fadeout(float length);
+                void        set_envelope_edit(bool edit);
 
             public:
                 bool        init(ipc::IExecutor *executor, size_t files, size_t channels);
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-sampler/make/tools.mk	2025-03-01 12:43:19.952509368 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/make/tools.mk	2025-08-26 18:16:11.485733873 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/modules.mk
--- 1.2.21-5/modules/lsp-plugins-sampler/modules.mk	2025-03-01 12:43:19.952509368 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/modules.mk	2025-08-26 18:16:11.485733873 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/project.mk
--- 1.2.21-5/modules/lsp-plugins-sampler/project.mk	2025-03-01 12:43:19.952509368 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/project.mk	2025-08-26 18:16:11.485733873 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Sampler Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.28
+ARTIFACT_VERSION            = 1.0.30
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x12.png and 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x12.png differ
Binary files 1.2.21-5/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x12_do.png and 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x12_do.png differ
Binary files 1.2.21-5/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x24.png and 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x24.png differ
Binary files 1.2.21-5/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x24_do.png and 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x24_do.png differ
Binary files 1.2.21-5/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x48.png and 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x48.png differ
Binary files 1.2.21-5/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x48_do.png and 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/doc/screenshots/multisampler_x48_do.png differ
Binary files 1.2.21-5/modules/lsp-plugins-sampler/res/doc/screenshots/sampler_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/doc/screenshots/sampler_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-sampler/res/doc/screenshots/sampler_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/doc/screenshots/sampler_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/de/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/de/lists.json
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/de/lists.json	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/de/lists.json	2025-08-26 18:16:11.497733757 +0000
@@ -1,71 +1,71 @@
 {
-  "sampler": {
-    "inst": {
-      "0": "Instrument 1",
-      "1": "Instrument 2",
-      "10": "Instrument 11",
-      "11": "Instrument 12",
-      "12": "Instrument 13",
-      "13": "Instrument 14",
-      "14": "Instrument 15",
-      "15": "Instrument 16",
-      "16": "Instrument 17",
-      "17": "Instrument 18",
-      "18": "Instrument 19",
-      "19": "Instrument 20",
-      "2": "Instrument 3",
-      "20": "Instrument 21",
-      "21": "Instrument 22",
-      "22": "Instrument 23",
-      "23": "Instrument 24",
-      "24": "Instrument 25",
-      "25": "Instrument 26",
-      "26": "Instrument 27",
-      "27": "Instrument 28",
-      "28": "Instrument 29",
-      "29": "Instrument 30",
-      "3": "Instrument 4",
-      "30": "Instrument 31",
-      "31": "Instrument 32",
-      "32": "Instrument 33",
-      "33": "Instrument 34",
-      "34": "Instrument 35",
-      "35": "Instrument 36",
-      "36": "Instrument 37",
-      "37": "Instrument 38",
-      "38": "Instrument 39",
-      "39": "Instrument 40",
-      "4": "Instrument 5",
-      "40": "Instrument 41",
-      "41": "Instrument 42",
-      "42": "Instrument 43",
-      "43": "Instrument 44",
-      "44": "Instrument 45",
-      "45": "Instrument 46",
-      "46": "Instrument 47",
-      "47": "Instrument 48",
-      "5": "Instrument 6",
-      "6": "Instrument 7",
-      "7": "Instrument 8",
-      "8": "Instrument 9",
-      "9": "Instrument 10"
-    },
-    "instruments": "Instruments",
-    "mixer": "Mixer",
-    "mixer_0:11": "Mixer 1-12",
-    "mixer_12:23": "Mixer 13-24",
-    "mixer_24:35": "Mixer 25-36",
-    "mixer_36:47": "Mixer 37-48",
-    "samp": {
-      "0": "Sample 1",
-      "1": "Sample 2",
-      "2": "Sample 3",
-      "3": "Sample 4",
-      "4": "Sample 5",
-      "5": "Sample 6",
-      "6": "Sample 7",
-      "7": "Sample 8",
-      "none": "Keines"
-    }
-  }
+	"sampler": {
+		"inst": {
+			"0": "Instrument 1",
+			"1": "Instrument 2",
+			"10": "Instrument 11",
+			"11": "Instrument 12",
+			"12": "Instrument 13",
+			"13": "Instrument 14",
+			"14": "Instrument 15",
+			"15": "Instrument 16",
+			"16": "Instrument 17",
+			"17": "Instrument 18",
+			"18": "Instrument 19",
+			"19": "Instrument 20",
+			"2": "Instrument 3",
+			"20": "Instrument 21",
+			"21": "Instrument 22",
+			"22": "Instrument 23",
+			"23": "Instrument 24",
+			"24": "Instrument 25",
+			"25": "Instrument 26",
+			"26": "Instrument 27",
+			"27": "Instrument 28",
+			"28": "Instrument 29",
+			"29": "Instrument 30",
+			"3": "Instrument 4",
+			"30": "Instrument 31",
+			"31": "Instrument 32",
+			"32": "Instrument 33",
+			"33": "Instrument 34",
+			"34": "Instrument 35",
+			"35": "Instrument 36",
+			"36": "Instrument 37",
+			"37": "Instrument 38",
+			"38": "Instrument 39",
+			"39": "Instrument 40",
+			"4": "Instrument 5",
+			"40": "Instrument 41",
+			"41": "Instrument 42",
+			"42": "Instrument 43",
+			"43": "Instrument 44",
+			"44": "Instrument 45",
+			"45": "Instrument 46",
+			"46": "Instrument 47",
+			"47": "Instrument 48",
+			"5": "Instrument 6",
+			"6": "Instrument 7",
+			"7": "Instrument 8",
+			"8": "Instrument 9",
+			"9": "Instrument 10"
+		},
+		"instruments": "Instruments",
+		"mixer": "Mixer",
+		"mixer_0:11": "Mixer 1-12",
+		"mixer_12:23": "Mixer 13-24",
+		"mixer_24:35": "Mixer 25-36",
+		"mixer_36:47": "Mixer 37-48",
+		"samp": {
+			"0": "Sample 1",
+			"1": "Sample 2",
+			"2": "Sample 3",
+			"3": "Sample 4",
+			"4": "Sample 5",
+			"5": "Sample 6",
+			"6": "Sample 7",
+			"7": "Sample 8",
+			"none": "Keines"
+		}
+	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/default/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/default/lists.json
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/default/lists.json	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/default/lists.json	2025-08-26 18:16:11.497733757 +0000
@@ -1,115 +1,114 @@
 {
-  "sampler": {
-    "edit": {
-      "loop": "Loop",
-      "main": "Main",
-      "pitch": "Pitch",
-      "stretch": "Stretch"
-    },
-    "inst": {
-      "0": "Instrument 1",
-      "1": "Instrument 2",
-      "10": "Instrument 11",
-      "11": "Instrument 12",
-      "12": "Instrument 13",
-      "13": "Instrument 14",
-      "14": "Instrument 15",
-      "15": "Instrument 16",
-      "16": "Instrument 17",
-      "17": "Instrument 18",
-      "18": "Instrument 19",
-      "19": "Instrument 20",
-      "2": "Instrument 3",
-      "20": "Instrument 21",
-      "21": "Instrument 22",
-      "22": "Instrument 23",
-      "23": "Instrument 24",
-      "24": "Instrument 25",
-      "25": "Instrument 26",
-      "26": "Instrument 27",
-      "27": "Instrument 28",
-      "28": "Instrument 29",
-      "29": "Instrument 30",
-      "3": "Instrument 4",
-      "30": "Instrument 31",
-      "31": "Instrument 32",
-      "32": "Instrument 33",
-      "33": "Instrument 34",
-      "34": "Instrument 35",
-      "35": "Instrument 36",
-      "36": "Instrument 37",
-      "37": "Instrument 38",
-      "38": "Instrument 39",
-      "39": "Instrument 40",
-      "4": "Instrument 5",
-      "40": "Instrument 41",
-      "41": "Instrument 42",
-      "42": "Instrument 43",
-      "43": "Instrument 44",
-      "44": "Instrument 45",
-      "45": "Instrument 46",
-      "46": "Instrument 47",
-      "47": "Instrument 48",
-      "5": "Instrument 6",
-      "6": "Instrument 7",
-      "7": "Instrument 8",
-      "8": "Instrument 9",
-      "9": "Instrument 10",
-      "id": "Instrument {@id}",
-      "id_name": "Instrument {@id}: {@name}"
-    },
-    "instruments": "Instruments",
-    "loop": {
-      "ping_pong": {
-        "direct_full": "PP: Full Direct",
-        "direct_half": "PP: Half Direct",
-        "direct_smart": "PP: Smart Direct",
-        "reverse_full": "PP: Full Reverse",
-        "reverse_half": "PP: Half Reverse",
-        "reverse_smart": "PP: Smart Reverse"
-      },
-      "simple": {
-        "direct": "Simple: Direct",
-        "reverse": "Simple: Reverse"
-      }
-    },
-
-    "midi_channels": {
-      "0": "00",
-      "1": "01",
-      "10": "10",
-      "11": "11",
-      "12": "12",
-      "13": "13",
-      "14": "14",
-      "15": "15",
-      "16": "16",
-      "2": "02",
-      "3": "03",
-      "4": "04",
-      "5": "05",
-      "6": "06",
-      "7": "07",
-      "8": "08",
-      "9": "09",
-      "all": "All"
-    },
-
-    "mixer": "Mixer",
-    "mixer_0:11": "Mixer 1-12",
-    "mixer_12:23": "Mixer 13-24",
-    "mixer_24:35": "Mixer 25-36",
-    "mixer_36:47": "Mixer 37-48",
-    "samp": {
-      "0": "Sample 1",
-      "1": "Sample 2",
-      "2": "Sample 3",
-      "3": "Sample 4",
-      "4": "Sample 5",
-      "5": "Sample 6",
-      "6": "Sample 7",
-      "7": "Sample 8",
-      "none": "None"
-    }
-  }
+	"sampler": {
+		"edit": {
+			"envelope": "Envelope",
+			"loop": "Loop",
+			"main": "Main",
+			"pitch": "Pitch",
+			"stretch": "Stretch"
+		},
+		"inst": {
+			"0": "Instrument 1",
+			"1": "Instrument 2",
+			"10": "Instrument 11",
+			"11": "Instrument 12",
+			"12": "Instrument 13",
+			"13": "Instrument 14",
+			"14": "Instrument 15",
+			"15": "Instrument 16",
+			"16": "Instrument 17",
+			"17": "Instrument 18",
+			"18": "Instrument 19",
+			"19": "Instrument 20",
+			"2": "Instrument 3",
+			"20": "Instrument 21",
+			"21": "Instrument 22",
+			"22": "Instrument 23",
+			"23": "Instrument 24",
+			"24": "Instrument 25",
+			"25": "Instrument 26",
+			"26": "Instrument 27",
+			"27": "Instrument 28",
+			"28": "Instrument 29",
+			"29": "Instrument 30",
+			"3": "Instrument 4",
+			"30": "Instrument 31",
+			"31": "Instrument 32",
+			"32": "Instrument 33",
+			"33": "Instrument 34",
+			"34": "Instrument 35",
+			"35": "Instrument 36",
+			"36": "Instrument 37",
+			"37": "Instrument 38",
+			"38": "Instrument 39",
+			"39": "Instrument 40",
+			"4": "Instrument 5",
+			"40": "Instrument 41",
+			"41": "Instrument 42",
+			"42": "Instrument 43",
+			"43": "Instrument 44",
+			"44": "Instrument 45",
+			"45": "Instrument 46",
+			"46": "Instrument 47",
+			"47": "Instrument 48",
+			"5": "Instrument 6",
+			"6": "Instrument 7",
+			"7": "Instrument 8",
+			"8": "Instrument 9",
+			"9": "Instrument 10",
+			"id": "Instrument {@id}",
+			"id_name": "Instrument {@id}: {@name}"
+		},
+		"instruments": "Instruments",
+		"loop": {
+			"ping_pong": {
+				"direct_full": "PP: Full Direct",
+				"direct_half": "PP: Half Direct",
+				"direct_smart": "PP: Smart Direct",
+				"reverse_full": "PP: Full Reverse",
+				"reverse_half": "PP: Half Reverse",
+				"reverse_smart": "PP: Smart Reverse"
+			},
+			"simple": {
+				"direct": "Simple: Direct",
+				"reverse": "Simple: Reverse"
+			}
+		},
+		"midi_channels": {
+			"0": "00",
+			"1": "01",
+			"10": "10",
+			"11": "11",
+			"12": "12",
+			"13": "13",
+			"14": "14",
+			"15": "15",
+			"16": "16",
+			"2": "02",
+			"3": "03",
+			"4": "04",
+			"5": "05",
+			"6": "06",
+			"7": "07",
+			"8": "08",
+			"9": "09",
+			"all": "All"
+		},
+		"mixer": "Mixer",
+		"mixer_0:11": "Mixer 1-12",
+		"mixer_12:23": "Mixer 13-24",
+		"mixer_24:35": "Mixer 25-36",
+		"mixer_36:47": "Mixer 37-48",
+		"samp": {
+			"0": "Sample 1",
+			"1": "Sample 2",
+			"2": "Sample 3",
+			"3": "Sample 4",
+			"4": "Sample 5",
+			"5": "Sample 6",
+			"6": "Sample 7",
+			"7": "Sample 8",
+			"none": "None"
+		}
+	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/es/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/es/lists.json
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/es/lists.json	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/es/lists.json	2025-08-26 18:16:11.497733757 +0000
@@ -1,71 +1,71 @@
 {
-  "sampler": {
-    "inst": {
-      "0": "Instrumento 1",
-      "1": "Instrumento 2",
-      "10": "Instrumento 11",
-      "11": "Instrumento 12",
-      "12": "Instrumento 13",
-      "13": "Instrumento 14",
-      "14": "Instrumento 15",
-      "15": "Instrumento 16",
-      "16": "Instrumento 17",
-      "17": "Instrumento 18",
-      "18": "Instrumento 19",
-      "19": "Instrumento 20",
-      "2": "Instrumento 3",
-      "20": "Instrumento 21",
-      "21": "Instrumento 22",
-      "22": "Instrumento 23",
-      "23": "Instrumento 24",
-      "24": "Instrumento 25",
-      "25": "Instrumento 26",
-      "26": "Instrumento 27",
-      "27": "Instrumento 28",
-      "28": "Instrumento 29",
-      "29": "Instrumento 30",
-      "3": "Instrumento 4",
-      "30": "Instrumento 31",
-      "31": "Instrumento 32",
-      "32": "Instrumento 33",
-      "33": "Instrumento 34",
-      "34": "Instrumento 35",
-      "35": "Instrumento 36",
-      "36": "Instrumento 37",
-      "37": "Instrumento 38",
-      "38": "Instrumento 39",
-      "39": "Instrumento 40",
-      "4": "Instrumento 5",
-      "40": "Instrumento 41",
-      "41": "Instrumento 42",
-      "42": "Instrumento 43",
-      "43": "Instrumento 44",
-      "44": "Instrumento 45",
-      "45": "Instrumento 46",
-      "46": "Instrumento 47",
-      "47": "Instrumento 48",
-      "5": "Instrumento 6",
-      "6": "Instrumento 7",
-      "7": "Instrumento 8",
-      "8": "Instrumento 9",
-      "9": "Instrumento 10"
-    },
-    "instruments": "Instrumentos",
-    "mixer": "Mezclador",
-    "mixer_0:11": "Mezclador 1-12",
-    "mixer_12:23": "Mezclador 13-24",
-    "mixer_24:35": "Mezclador 25-36",
-    "mixer_36:47": "Mezclador 37-48",
-    "samp": {
-      "0": "Muestra 1",
-      "1": "Muestra 2",
-      "2": "Muestra 3",
-      "3": "Muestra 4",
-      "4": "Muestra 5",
-      "5": "Muestra 6",
-      "6": "Muestra 7",
-      "7": "Muestra 8",
-      "none": "Ninguno"
-    }
-  }
+	"sampler": {
+		"inst": {
+			"0": "Instrumento 1",
+			"1": "Instrumento 2",
+			"10": "Instrumento 11",
+			"11": "Instrumento 12",
+			"12": "Instrumento 13",
+			"13": "Instrumento 14",
+			"14": "Instrumento 15",
+			"15": "Instrumento 16",
+			"16": "Instrumento 17",
+			"17": "Instrumento 18",
+			"18": "Instrumento 19",
+			"19": "Instrumento 20",
+			"2": "Instrumento 3",
+			"20": "Instrumento 21",
+			"21": "Instrumento 22",
+			"22": "Instrumento 23",
+			"23": "Instrumento 24",
+			"24": "Instrumento 25",
+			"25": "Instrumento 26",
+			"26": "Instrumento 27",
+			"27": "Instrumento 28",
+			"28": "Instrumento 29",
+			"29": "Instrumento 30",
+			"3": "Instrumento 4",
+			"30": "Instrumento 31",
+			"31": "Instrumento 32",
+			"32": "Instrumento 33",
+			"33": "Instrumento 34",
+			"34": "Instrumento 35",
+			"35": "Instrumento 36",
+			"36": "Instrumento 37",
+			"37": "Instrumento 38",
+			"38": "Instrumento 39",
+			"39": "Instrumento 40",
+			"4": "Instrumento 5",
+			"40": "Instrumento 41",
+			"41": "Instrumento 42",
+			"42": "Instrumento 43",
+			"43": "Instrumento 44",
+			"44": "Instrumento 45",
+			"45": "Instrumento 46",
+			"46": "Instrumento 47",
+			"47": "Instrumento 48",
+			"5": "Instrumento 6",
+			"6": "Instrumento 7",
+			"7": "Instrumento 8",
+			"8": "Instrumento 9",
+			"9": "Instrumento 10"
+		},
+		"instruments": "Instrumentos",
+		"mixer": "Mezclador",
+		"mixer_0:11": "Mezclador 1-12",
+		"mixer_12:23": "Mezclador 13-24",
+		"mixer_24:35": "Mezclador 25-36",
+		"mixer_36:47": "Mezclador 37-48",
+		"samp": {
+			"0": "Muestra 1",
+			"1": "Muestra 2",
+			"2": "Muestra 3",
+			"3": "Muestra 4",
+			"4": "Muestra 5",
+			"5": "Muestra 6",
+			"6": "Muestra 7",
+			"7": "Muestra 8",
+			"none": "Ninguno"
+		}
+	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/fr/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/fr/lists.json
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/fr/lists.json	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/fr/lists.json	2025-08-26 18:16:11.497733757 +0000
@@ -1,71 +1,71 @@
 {
-  "sampler": {
-    "inst": {
-      "0": "Instrument 1",
-      "1": "Instrument 2",
-      "10": "Instrument 11",
-      "11": "Instrument 12",
-      "12": "Instrument 13",
-      "13": "Instrument 14",
-      "14": "Instrument 15",
-      "15": "Instrument 16",
-      "16": "Instrument 17",
-      "17": "Instrument 18",
-      "18": "Instrument 19",
-      "19": "Instrument 20",
-      "2": "Instrument 3",
-      "20": "Instrument 21",
-      "21": "Instrument 22",
-      "22": "Instrument 23",
-      "23": "Instrument 24",
-      "24": "Instrument 25",
-      "25": "Instrument 26",
-      "26": "Instrument 27",
-      "27": "Instrument 28",
-      "28": "Instrument 29",
-      "29": "Instrument 30",
-      "3": "Instrument 4",
-      "30": "Instrument 31",
-      "31": "Instrument 32",
-      "32": "Instrument 33",
-      "33": "Instrument 34",
-      "34": "Instrument 35",
-      "35": "Instrument 36",
-      "36": "Instrument 37",
-      "37": "Instrument 38",
-      "38": "Instrument 39",
-      "39": "Instrument 40",
-      "4": "Instrument 5",
-      "40": "Instrument 41",
-      "41": "Instrument 42",
-      "42": "Instrument 43",
-      "43": "Instrument 44",
-      "44": "Instrument 45",
-      "45": "Instrument 46",
-      "46": "Instrument 47",
-      "47": "Instrument 48",
-      "5": "Instrument 6",
-      "6": "Instrument 7",
-      "7": "Instrument 8",
-      "8": "Instrument 9",
-      "9": "Instrument 10"
-    },
-    "instruments": "Instruments",
-    "mixer": "Mixeur",
-    "mixer_0:11": "Mixeur 1-12",
-    "mixer_12:23": "Mixeur 13-24",
-    "mixer_24:35": "Mixeur 25-36",
-    "mixer_36:47": "Mixeur 37-48",
-    "samp": {
-      "0": "Échantillon 1",
-      "1": "Échantillon 2",
-      "2": "Échantillon 3",
-      "3": "Échantillon 4",
-      "4": "Échantillon 5",
-      "5": "Échantillon 6",
-      "6": "Échantillon 7",
-      "7": "Échantillon 8",
-      "none": "Aucun"
-    }
-  }
+	"sampler": {
+		"inst": {
+			"0": "Instrument 1",
+			"1": "Instrument 2",
+			"10": "Instrument 11",
+			"11": "Instrument 12",
+			"12": "Instrument 13",
+			"13": "Instrument 14",
+			"14": "Instrument 15",
+			"15": "Instrument 16",
+			"16": "Instrument 17",
+			"17": "Instrument 18",
+			"18": "Instrument 19",
+			"19": "Instrument 20",
+			"2": "Instrument 3",
+			"20": "Instrument 21",
+			"21": "Instrument 22",
+			"22": "Instrument 23",
+			"23": "Instrument 24",
+			"24": "Instrument 25",
+			"25": "Instrument 26",
+			"26": "Instrument 27",
+			"27": "Instrument 28",
+			"28": "Instrument 29",
+			"29": "Instrument 30",
+			"3": "Instrument 4",
+			"30": "Instrument 31",
+			"31": "Instrument 32",
+			"32": "Instrument 33",
+			"33": "Instrument 34",
+			"34": "Instrument 35",
+			"35": "Instrument 36",
+			"36": "Instrument 37",
+			"37": "Instrument 38",
+			"38": "Instrument 39",
+			"39": "Instrument 40",
+			"4": "Instrument 5",
+			"40": "Instrument 41",
+			"41": "Instrument 42",
+			"42": "Instrument 43",
+			"43": "Instrument 44",
+			"44": "Instrument 45",
+			"45": "Instrument 46",
+			"46": "Instrument 47",
+			"47": "Instrument 48",
+			"5": "Instrument 6",
+			"6": "Instrument 7",
+			"7": "Instrument 8",
+			"8": "Instrument 9",
+			"9": "Instrument 10"
+		},
+		"instruments": "Instruments",
+		"mixer": "Mixeur",
+		"mixer_0:11": "Mixeur 1-12",
+		"mixer_12:23": "Mixeur 13-24",
+		"mixer_24:35": "Mixeur 25-36",
+		"mixer_36:47": "Mixeur 37-48",
+		"samp": {
+			"0": "Échantillon 1",
+			"1": "Échantillon 2",
+			"2": "Échantillon 3",
+			"3": "Échantillon 4",
+			"4": "Échantillon 5",
+			"5": "Échantillon 6",
+			"6": "Échantillon 7",
+			"7": "Échantillon 8",
+			"none": "Aucun"
+		}
+	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/it/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/it/lists.json
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/it/lists.json	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/it/lists.json	2025-08-26 18:16:11.497733757 +0000
@@ -1,71 +1,71 @@
 {
-  "sampler": {
-    "inst": {
-      "0": "Strumento 1",
-      "1": "Strumento 2",
-      "10": "Strumento 11",
-      "11": "Strumento 12",
-      "12": "Strumento 13",
-      "13": "Strumento 14",
-      "14": "Strumento 15",
-      "15": "Strumento 16",
-      "16": "Strumento 17",
-      "17": "Strumento 18",
-      "18": "Strumento 19",
-      "19": "Strumento 20",
-      "2": "Strumento 3",
-      "20": "Strumento 21",
-      "21": "Strumento 22",
-      "22": "Strumento 23",
-      "23": "Strumento 24",
-      "24": "Strumento 25",
-      "25": "Strumento 26",
-      "26": "Strumento 27",
-      "27": "Strumento 28",
-      "28": "Strumento 29",
-      "29": "Strumento 30",
-      "3": "Strumento 4",
-      "30": "Strumento 31",
-      "31": "Strumento 32",
-      "32": "Strumento 33",
-      "33": "Strumento 34",
-      "34": "Strumento 35",
-      "35": "Strumento 36",
-      "36": "Strumento 37",
-      "37": "Strumento 38",
-      "38": "Strumento 39",
-      "39": "Strumento 40",
-      "4": "Strumento 5",
-      "40": "Strumento 41",
-      "41": "Strumento 42",
-      "42": "Strumento 43",
-      "43": "Strumento 44",
-      "44": "Strumento 45",
-      "45": "Strumento 46",
-      "46": "Strumento 47",
-      "47": "Strumento 48",
-      "5": "Strumento 6",
-      "6": "Strumento 7",
-      "7": "Strumento 8",
-      "8": "Strumento 9",
-      "9": "Strumento 10"
-    },
-    "instruments": "Strumenti",
-    "mixer": "Mixer",
-    "mixer_0:11": "Mixer 1-12",
-    "mixer_12:23": "Mixer 13-24",
-    "mixer_24:35": "Mixer 25-36",
-    "mixer_36:47": "Mixer 37-48",
-    "samp": {
-      "0": "Campione 1",
-      "1": "Campione 2",
-      "2": "Campione 3",
-      "3": "Campione 4",
-      "4": "Campione 5",
-      "5": "Campione 6",
-      "6": "Campione 7",
-      "7": "Campione 8",
-      "none": "Nessuno"
-    }
-  }
+	"sampler": {
+		"inst": {
+			"0": "Strumento 1",
+			"1": "Strumento 2",
+			"10": "Strumento 11",
+			"11": "Strumento 12",
+			"12": "Strumento 13",
+			"13": "Strumento 14",
+			"14": "Strumento 15",
+			"15": "Strumento 16",
+			"16": "Strumento 17",
+			"17": "Strumento 18",
+			"18": "Strumento 19",
+			"19": "Strumento 20",
+			"2": "Strumento 3",
+			"20": "Strumento 21",
+			"21": "Strumento 22",
+			"22": "Strumento 23",
+			"23": "Strumento 24",
+			"24": "Strumento 25",
+			"25": "Strumento 26",
+			"26": "Strumento 27",
+			"27": "Strumento 28",
+			"28": "Strumento 29",
+			"29": "Strumento 30",
+			"3": "Strumento 4",
+			"30": "Strumento 31",
+			"31": "Strumento 32",
+			"32": "Strumento 33",
+			"33": "Strumento 34",
+			"34": "Strumento 35",
+			"35": "Strumento 36",
+			"36": "Strumento 37",
+			"37": "Strumento 38",
+			"38": "Strumento 39",
+			"39": "Strumento 40",
+			"4": "Strumento 5",
+			"40": "Strumento 41",
+			"41": "Strumento 42",
+			"42": "Strumento 43",
+			"43": "Strumento 44",
+			"44": "Strumento 45",
+			"45": "Strumento 46",
+			"46": "Strumento 47",
+			"47": "Strumento 48",
+			"5": "Strumento 6",
+			"6": "Strumento 7",
+			"7": "Strumento 8",
+			"8": "Strumento 9",
+			"9": "Strumento 10"
+		},
+		"instruments": "Strumenti",
+		"mixer": "Mixer",
+		"mixer_0:11": "Mixer 1-12",
+		"mixer_12:23": "Mixer 13-24",
+		"mixer_24:35": "Mixer 25-36",
+		"mixer_36:47": "Mixer 37-48",
+		"samp": {
+			"0": "Campione 1",
+			"1": "Campione 2",
+			"2": "Campione 3",
+			"3": "Campione 4",
+			"4": "Campione 5",
+			"5": "Campione 6",
+			"6": "Campione 7",
+			"7": "Campione 8",
+			"none": "Nessuno"
+		}
+	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/ru/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/ru/lists.json
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/ru/lists.json	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/ru/lists.json	2025-08-26 18:16:11.497733757 +0000
@@ -1,115 +1,114 @@
 {
-  "sampler": {
-    "edit": {
-      "loop": "Петля",
-      "main": "Главное",
-      "pitch": "Высота",
-      "stretch": "Растяжка"
-    },
-    "inst": {
-      "0": "Инструмент 1",
-      "1": "Инструмент 2",
-      "10": "Инструмент 11",
-      "11": "Инструмент 12",
-      "12": "Инструмент 13",
-      "13": "Инструмент 14",
-      "14": "Инструмент 15",
-      "15": "Инструмент 16",
-      "16": "Инструмент 17",
-      "17": "Инструмент 18",
-      "18": "Инструмент 19",
-      "19": "Инструмент 20",
-      "2": "Инструмент 3",
-      "20": "Инструмент 21",
-      "21": "Инструмент 22",
-      "22": "Инструмент 23",
-      "23": "Инструмент 24",
-      "24": "Инструмент 25",
-      "25": "Инструмент 26",
-      "26": "Инструмент 27",
-      "27": "Инструмент 28",
-      "28": "Инструмент 29",
-      "29": "Инструмент 30",
-      "3": "Инструмент 4",
-      "30": "Инструмент 31",
-      "31": "Инструмент 32",
-      "32": "Инструмент 33",
-      "33": "Инструмент 34",
-      "34": "Инструмент 35",
-      "35": "Инструмент 36",
-      "36": "Инструмент 37",
-      "37": "Инструмент 38",
-      "38": "Инструмент 39",
-      "39": "Инструмент 40",
-      "4": "Инструмент 5",
-      "40": "Инструмент 41",
-      "41": "Инструмент 42",
-      "42": "Инструмент 43",
-      "43": "Инструмент 44",
-      "44": "Инструмент 45",
-      "45": "Инструмент 46",
-      "46": "Инструмент 47",
-      "47": "Инструмент 48",
-      "5": "Инструмент 6",
-      "6": "Инструмент 7",
-      "7": "Инструмент 8",
-      "8": "Инструмент 9",
-      "9": "Инструмент 10",
-      "id": "Инструмент {@id}",
-      "id_name": "Инструмент {@id}: {@name}"
-    },
-    "instruments": "Инструменты",
-    "loop": {
-      "ping_pong": {
-        "direct_full": "ПП: Полный прямой",
-        "direct_half": "ПП: Полупрямой",
-        "direct_smart": "ПП: Умный прямой",
-        "reverse_full": "ПП: Полный реверс",
-        "reverse_half": "ПП: Полуреверс",
-        "reverse_smart": "ПП: Умный реверс"
-      },
-      "simple": {
-        "direct": "Простой: Прямой",
-        "reverse": "Простой: Реверс"
-      }
-    },
-
-    "midi_channels": {
-      "0": "00",
-      "1": "01",
-      "10": "10",
-      "11": "11",
-      "12": "12",
-      "13": "13",
-      "14": "14",
-      "15": "15",
-      "16": "16",
-      "2": "02",
-      "3": "03",
-      "4": "04",
-      "5": "05",
-      "6": "06",
-      "7": "07",
-      "8": "08",
-      "9": "09",
-      "all": "Все"
-    },
-
-    "mixer": "Микшер",
-    "mixer_0:11": "Микшер 1-12",
-    "mixer_12:23": "Микшер 13-24",
-    "mixer_24:35": "Микшер 25-36",
-    "mixer_36:47": "Микшер 37-48",
-    "samp": {
-      "0": "Сэмпл 1",
-      "1": "Сэмпл 2",
-      "2": "Сэмпл 3",
-      "3": "Сэмпл 4",
-      "4": "Сэмпл 5",
-      "5": "Сэмпл 6",
-      "6": "Сэмпл 7",
-      "7": "Сэмпл 8",
-      "none": "Нет"
-    }
-  }
+	"sampler": {
+		"edit": {
+			"envelope": "Огибающая",
+			"loop": "Петля",
+			"main": "Главное",
+			"pitch": "Высота",
+			"stretch": "Растяжка"
+		},
+		"inst": {
+			"0": "Инструмент 1",
+			"1": "Инструмент 2",
+			"10": "Инструмент 11",
+			"11": "Инструмент 12",
+			"12": "Инструмент 13",
+			"13": "Инструмент 14",
+			"14": "Инструмент 15",
+			"15": "Инструмент 16",
+			"16": "Инструмент 17",
+			"17": "Инструмент 18",
+			"18": "Инструмент 19",
+			"19": "Инструмент 20",
+			"2": "Инструмент 3",
+			"20": "Инструмент 21",
+			"21": "Инструмент 22",
+			"22": "Инструмент 23",
+			"23": "Инструмент 24",
+			"24": "Инструмент 25",
+			"25": "Инструмент 26",
+			"26": "Инструмент 27",
+			"27": "Инструмент 28",
+			"28": "Инструмент 29",
+			"29": "Инструмент 30",
+			"3": "Инструмент 4",
+			"30": "Инструмент 31",
+			"31": "Инструмент 32",
+			"32": "Инструмент 33",
+			"33": "Инструмент 34",
+			"34": "Инструмент 35",
+			"35": "Инструмент 36",
+			"36": "Инструмент 37",
+			"37": "Инструмент 38",
+			"38": "Инструмент 39",
+			"39": "Инструмент 40",
+			"4": "Инструмент 5",
+			"40": "Инструмент 41",
+			"41": "Инструмент 42",
+			"42": "Инструмент 43",
+			"43": "Инструмент 44",
+			"44": "Инструмент 45",
+			"45": "Инструмент 46",
+			"46": "Инструмент 47",
+			"47": "Инструмент 48",
+			"5": "Инструмент 6",
+			"6": "Инструмент 7",
+			"7": "Инструмент 8",
+			"8": "Инструмент 9",
+			"9": "Инструмент 10",
+			"id": "Инструмент {@id}",
+			"id_name": "Инструмент {@id}: {@name}"
+		},
+		"instruments": "Инструменты",
+		"loop": {
+			"ping_pong": {
+				"direct_full": "ПП: Полный прямой",
+				"direct_half": "ПП: Полупрямой",
+				"direct_smart": "ПП: Умный прямой",
+				"reverse_full": "ПП: Полный реверс",
+				"reverse_half": "ПП: Полуреверс",
+				"reverse_smart": "ПП: Умный реверс"
+			},
+			"simple": {
+				"direct": "Простой: Прямой",
+				"reverse": "Простой: Реверс"
+			}
+		},
+		"midi_channels": {
+			"0": "00",
+			"1": "01",
+			"10": "10",
+			"11": "11",
+			"12": "12",
+			"13": "13",
+			"14": "14",
+			"15": "15",
+			"16": "16",
+			"2": "02",
+			"3": "03",
+			"4": "04",
+			"5": "05",
+			"6": "06",
+			"7": "07",
+			"8": "08",
+			"9": "09",
+			"all": "Все"
+		},
+		"mixer": "Микшер",
+		"mixer_0:11": "Микшер 1-12",
+		"mixer_12:23": "Микшер 13-24",
+		"mixer_24:35": "Микшер 25-36",
+		"mixer_36:47": "Микшер 37-48",
+		"samp": {
+			"0": "Сэмпл 1",
+			"1": "Сэмпл 2",
+			"2": "Сэмпл 3",
+			"3": "Сэмпл 4",
+			"4": "Сэмпл 5",
+			"5": "Сэмпл 6",
+			"6": "Сэмпл 7",
+			"7": "Сэмпл 8",
+			"none": "Нет"
+		}
+	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/us/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/us/lists.json
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/i18n/us/lists.json	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/i18n/us/lists.json	2025-08-26 18:16:11.497733757 +0000
@@ -1,116 +1,114 @@
 {
-  "sampler": {
-    "edit": {
-      "loop": "Loop",
-      "main": "Main",
-      "pitch": "Pitch",
-      "stretch": "Stretch"
-    },
-    "inst": {
-      "0": "Instrument 1",
-      "1": "Instrument 2",
-      "10": "Instrument 11",
-      "11": "Instrument 12",
-      "12": "Instrument 13",
-      "13": "Instrument 14",
-      "14": "Instrument 15",
-      "15": "Instrument 16",
-      "16": "Instrument 17",
-      "17": "Instrument 18",
-      "18": "Instrument 19",
-      "19": "Instrument 20",
-      "2": "Instrument 3",
-      "20": "Instrument 21",
-      "21": "Instrument 22",
-      "22": "Instrument 23",
-      "23": "Instrument 24",
-      "24": "Instrument 25",
-      "25": "Instrument 26",
-      "26": "Instrument 27",
-      "27": "Instrument 28",
-      "28": "Instrument 29",
-      "29": "Instrument 30",
-      "3": "Instrument 4",
-      "30": "Instrument 31",
-      "31": "Instrument 32",
-      "32": "Instrument 33",
-      "33": "Instrument 34",
-      "34": "Instrument 35",
-      "35": "Instrument 36",
-      "36": "Instrument 37",
-      "37": "Instrument 38",
-      "38": "Instrument 39",
-      "39": "Instrument 40",
-      "4": "Instrument 5",
-      "40": "Instrument 41",
-      "41": "Instrument 42",
-      "42": "Instrument 43",
-      "43": "Instrument 44",
-      "44": "Instrument 45",
-      "45": "Instrument 46",
-      "46": "Instrument 47",
-      "47": "Instrument 48",
-      "5": "Instrument 6",
-      "6": "Instrument 7",
-      "7": "Instrument 8",
-      "8": "Instrument 9",
-      "9": "Instrument 10",
-      
-      "id": "Instrument {@id}",
-      "id_name": "Instrument {@id}: {@name}"
-    },
-    "instruments": "Instruments",
-    "loop": {
-      "ping_pong": {
-        "direct_full": "PP: Full Direct",
-        "direct_half": "PP: Half Direct",
-        "direct_smart": "PP: Smart Direct",
-        "reverse_full": "PP: Full Reverse",
-        "reverse_half": "PP: Half Reverse",
-        "reverse_smart": "PP: Smart Reverse"
-      },
-      "simple": {
-        "direct": "Simple: Direct",
-        "reverse": "Simple: Reverse"
-      }
-    },
-
-    "midi_channels": {
-      "0": "00",
-      "1": "01",
-      "10": "10",
-      "11": "11",
-      "12": "12",
-      "13": "13",
-      "14": "14",
-      "15": "15",
-      "16": "16",
-      "2": "02",
-      "3": "03",
-      "4": "04",
-      "5": "05",
-      "6": "06",
-      "7": "07",
-      "8": "08",
-      "9": "09",
-      "all": "All"
-    },
-
-    "mixer": "Mixer",
-    "mixer_0:11": "Mixer 1-12",
-    "mixer_12:23": "Mixer 13-24",
-    "mixer_24:35": "Mixer 25-36",
-    "mixer_36:47": "Mixer 37-48",
-    "samp": {
-      "0": "Sample 1",
-      "1": "Sample 2",
-      "2": "Sample 3",
-      "3": "Sample 4",
-      "4": "Sample 5",
-      "5": "Sample 6",
-      "6": "Sample 7",
-      "7": "Sample 8",
-      "none": "None"
-    }
-  }
+	"sampler": {
+		"edit": {
+			"envelope": "Envelope",
+			"loop": "Loop",
+			"main": "Main",
+			"pitch": "Pitch",
+			"stretch": "Stretch"
+		},
+		"inst": {
+			"0": "Instrument 1",
+			"1": "Instrument 2",
+			"10": "Instrument 11",
+			"11": "Instrument 12",
+			"12": "Instrument 13",
+			"13": "Instrument 14",
+			"14": "Instrument 15",
+			"15": "Instrument 16",
+			"16": "Instrument 17",
+			"17": "Instrument 18",
+			"18": "Instrument 19",
+			"19": "Instrument 20",
+			"2": "Instrument 3",
+			"20": "Instrument 21",
+			"21": "Instrument 22",
+			"22": "Instrument 23",
+			"23": "Instrument 24",
+			"24": "Instrument 25",
+			"25": "Instrument 26",
+			"26": "Instrument 27",
+			"27": "Instrument 28",
+			"28": "Instrument 29",
+			"29": "Instrument 30",
+			"3": "Instrument 4",
+			"30": "Instrument 31",
+			"31": "Instrument 32",
+			"32": "Instrument 33",
+			"33": "Instrument 34",
+			"34": "Instrument 35",
+			"35": "Instrument 36",
+			"36": "Instrument 37",
+			"37": "Instrument 38",
+			"38": "Instrument 39",
+			"39": "Instrument 40",
+			"4": "Instrument 5",
+			"40": "Instrument 41",
+			"41": "Instrument 42",
+			"42": "Instrument 43",
+			"43": "Instrument 44",
+			"44": "Instrument 45",
+			"45": "Instrument 46",
+			"46": "Instrument 47",
+			"47": "Instrument 48",
+			"5": "Instrument 6",
+			"6": "Instrument 7",
+			"7": "Instrument 8",
+			"8": "Instrument 9",
+			"9": "Instrument 10",
+			"id": "Instrument {@id}",
+			"id_name": "Instrument {@id}: {@name}"
+		},
+		"instruments": "Instruments",
+		"loop": {
+			"ping_pong": {
+				"direct_full": "PP: Full Direct",
+				"direct_half": "PP: Half Direct",
+				"direct_smart": "PP: Smart Direct",
+				"reverse_full": "PP: Full Reverse",
+				"reverse_half": "PP: Half Reverse",
+				"reverse_smart": "PP: Smart Reverse"
+			},
+			"simple": {
+				"direct": "Simple: Direct",
+				"reverse": "Simple: Reverse"
+			}
+		},
+		"midi_channels": {
+			"0": "00",
+			"1": "01",
+			"10": "10",
+			"11": "11",
+			"12": "12",
+			"13": "13",
+			"14": "14",
+			"15": "15",
+			"16": "16",
+			"2": "02",
+			"3": "03",
+			"4": "04",
+			"5": "05",
+			"6": "06",
+			"7": "07",
+			"8": "08",
+			"9": "09",
+			"all": "All"
+		},
+		"mixer": "Mixer",
+		"mixer_0:11": "Mixer 1-12",
+		"mixer_12:23": "Mixer 13-24",
+		"mixer_24:35": "Mixer 25-36",
+		"mixer_36:47": "Mixer 37-48",
+		"samp": {
+			"0": "Sample 1",
+			"1": "Sample 2",
+			"2": "Sample 3",
+			"3": "Sample 4",
+			"4": "Sample 5",
+			"5": "Sample 6",
+			"6": "Sample 7",
+			"7": "Sample 8",
+			"none": "None"
+		}
+	}
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/ui/sampling/multiple.xml 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/ui/sampling/multiple.xml
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/ui/sampling/multiple.xml	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/ui/sampling/multiple.xml	2025-08-26 18:16:11.497733757 +0000
@@ -2,6 +2,10 @@
 	<ui:eval id="num_blocks" value="(ex :imix_25) ? 4 : (ex :imix_13) ? 2 : 1"/>
 	<ui:alias id="ssel" value="ssel[inst]"/>
 
+	<ui:for id="i" first="0" count="8">
+		<ui:port id="sample_state_${i}" value="'fs_' scat int(:inst) scat '_' scat ${i}"/>
+	</ui:for>
+
 	<vbox spacing="4">
 		<!-- Area selector -->
 		<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="true" bg.color="bg_schema">
@@ -89,28 +93,29 @@
 						<asample
 							expand="true"
 							id="sf${idx}"
+							activity="(:sets ine 3) or (:fs${idx} ine 0)"
 							mesh_id="fd${idx}"
 							path.id="_ui_dlg_sample_path"
 							ftype.id="_ui_dlg_sample_ftype"
-							hcut=":hc${idx}"
-							tcut=":tc${idx}"
-							fadein=":fi${idx}"
-							fadeout=":fo${idx}"
-							stretch.enable="1"
+							hcut="(:sets ine 3) ? :hc${idx} : 0"
+							tcut="(:sets ine 3) ? :tc${idx} : 0"
+							fadein="(:sets ine 3) ? :fi${idx} : 0"
+							fadeout="(:sets ine 3) ? :fo${idx} : 0"
+							stretch.enable=":sets ine 3"
 							stretch.color="(:so${idx}) ? 'stretch_color' : 'stretch_color_off'"
 							stretch.border.color="(:so${idx}) ? 'stretch_border_color' : 'stretch_border_color_off'"
 							stretch.begin=":ss${idx}"
 							stretch.end=":se${idx}"
-							loop.enable="1"
+							loop.enable=":sets ine 3"
 							loop.color="(:lo${idx}) ? 'loop_color' : 'loop_color_off'"
 							loop.border.color="(:lo${idx}) ? 'loop_border_color' : 'loop_border_color_off'"
 							loop.begin=":lb${idx}"
 							loop.end=":le${idx}"
-							play.position=":pp${idx}"
-							length=":fl${idx}"
+							play.position="(:sets ine 3) ? :pp${idx} : :pp${idx} - :hc${idx}"
+							length="(:sets ine 3) ? :fl${idx} : (:al${idx} - :hc${idx} - :tc${idx})"
 							length.actual=":al${idx}"
 							status=":fs${idx}"
-							sample.full="true"
+							sample.full=":sets ine 3"
 							width.min="320"
 							height.min="160"
 							load.preview="true"
@@ -130,13 +135,41 @@
 							clipboard.fade_in="fi${idx}"
 							clipboard.fade_out="fo${idx}"
 							clipboard.makeup="mk${idx}"
-							clipboard.predelay="pd${idx}"/>
+							clipboard.predelay="pd${idx}">
+
+							<aenvelope
+								attack.time.id="ta${idx}"
+								hold.time.id="th${idx}"
+								decay.time.id="td${idx}"
+								slope.time.id="ts${idx}"
+								release.time.id="tr${idx}"
+								attack.curve.id="ca${idx}"
+								decay.curve.id="cd${idx}"
+								slope.curve.id="cs${idx}"
+								release.curve.id="cr${idx}"
+								break.level.id="bl${idx}"
+								sustain.level.id="sl${idx}"
+								attack.type.id="ea${idx}"
+								decay.type.id="ed${idx}"
+								slope.type.id="es${idx}"
+								release.type.id="er${idx}"
+								hold.enabled=":eh${idx}"
+								break.enabled=":eb${idx}"
+								visibility=":ee${idx}"
+								editable=":ee${idx} and (:sets eq 3)"
+								wire=":sets eq 3"/>
+
+						</asample>
 
-						<!-- Listen button -->
-						<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="true" bg.color="bg_schema">
+						<!-- Envelope, Listen, Stop buttons -->
+						<hbox pad.h="6" fill="true" bg.color="bg_schema">
 							<void hexpand="true"/>
-							<button id="ls${idx}" text="labels.sedit.listen" width.min="50" ui:inject="Button_cyan" toggle="false"/>
-							<button id="lc${idx}" text="labels.sedit.stop" width.min="50" ui:inject="Button_cyan" toggle="false"/>
+							<button id="ee${idx}" text="labels.adsr.envelope" width.min="50" ui:inject="Button_envelope" toggle="false" pad.r="6"/>
+							<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+							<ui:with pad.v="4">
+								<button id="ls${idx}" text="labels.sedit.listen" width.min="50" ui:inject="Button_cyan" toggle="false" pad.h="6"/>
+								<button id="lc${idx}" text="labels.sedit.stop" width.min="50" ui:inject="Button_cyan" toggle="false"/>
+							</ui:with>
 						</hbox>
 					</vbox>
 
@@ -168,44 +201,41 @@
 				</hbox>
 			</tgroup>
 
-			<tabs id="sets"
-				vreduce="true"
-				height.min="139" width.min="481"
-				hgap.brightness="((:sets ilt 2) or ((:sets ieq 2) and (:so${idx})) or ((:sets ieq 3) and (:lo${idx}))) ? 1.0 : :const_bg_darken">
+			<tabs id="sets" vreduce="true" height.min="139" width.min="481" hgap.brightness="((:sets ilt 2) or ((:sets ieq 2) and (:so${idx})) or ((:sets ieq 4) and (:lo${idx})) or ((:sets ieq 3) and (:ee${idx}))) ? 1.0 : :const_bg_darken">
 
 				<!-- main -->
-				<grid rows="3" cols="13" bg.color="bg" hspacing="2">
+				<grid rows="3" cols="13" bg.color="bg">
 					<ui:with width.min="50">
 						<label text="labels.sedit.reverse" bg.color="bg_schema" padding="6"/>
 						<cell rows="3">
-							<vsep bg.color="bg"/>
+							<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 						</cell>
 						<label text="labels.sedit.head_cut" bg.color="bg_schema" padding="6"/>
 						<cell rows="3">
-							<vsep bg.color="bg"/>
+							<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 						</cell>
 						<label text="labels.sedit.tail_cut" bg.color="bg_schema" padding="6"/>
 						<cell rows="3">
-							<vsep bg.color="bg"/>
+							<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 						</cell>
 						<label text="labels.sedit.fade_in" bg.color="bg_schema" padding="6"/>
 						<cell rows="3">
-							<vsep bg.color="bg"/>
+							<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 						</cell>
 						<label text="labels.sedit.fade_out" bg.color="bg_schema" padding="6"/>
 						<cell rows="3">
-							<vsep bg.color="bg"/>
+							<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 						</cell>
 						<label text="labels.sedit.makeup" bg.color="bg_schema" padding="6"/>
 						<cell rows="3">
-							<vsep bg.color="bg"/>
+							<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 						</cell>
 						<label text="labels.sedit.predelay" bg.color="bg_schema" padding="6"/>
 
 						<cell rows="2">
 							<vbox bg.color="bg_schema" fill="false">
-								<button id="rr${idx}" text="labels.processing.pre" width="48" pad.b="4" />
-								<button id="rs${idx}" text="labels.processing.post" width="48" />
+								<button id="rr${idx}" text="labels.processing.pre" width="48" pad.b="4"/>
+								<button id="rs${idx}" text="labels.processing.post" width="48"/>
 								<label pad.b="6"/>
 							</vbox>
 						</cell>
@@ -319,6 +349,85 @@
 
 				</grid>
 
+				<!-- envelope -->
+				<grid rows="4" cols="15" bg.color="bg">
+					<ui:with bright="(:ee${idx}) ? 1 : 0.75" bg.bright="(:ee${idx}) ? 1.0 : :const_bg_darken" scolor="(:ee${idx}) ? 'envelope' : 'kscale_inactive'">
+						<!-- Row 1 -->
+						<cell cols="3" bg.color="bg_schema">
+							<hbox>
+								<label text="labels.adsr.attack" pad.h="6"/>
+								<combo id="ea${idx}" hexpand="true" pad.r="6"/>
+							</hbox>
+						</cell>
+						<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+						<cell cols="3" bg.color="bg_schema">
+							<hbox>
+								<label text="labels.adsr.decay" pad.h="6"/>
+								<combo id="ed${idx}" hexpand="true" pad.r="6"/>
+							</hbox>
+						</cell>
+						<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+						<cell cols="2" bg.color="bg_schema">
+							<hbox>
+								<label text="labels.adsr.slope" pad.h="6" activity=":eb${idx}"/>
+								<combo id="es${idx}" hexpand="true" pad.r="6" activity=":eb${idx}"/>
+							</hbox>
+						</cell>
+						<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+						<label text="labels.adsr.sustain" bg.color="bg_schema" pad.h="6"/>
+						<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+						<cell cols="2" bg.color="bg_schema">
+							<hbox>
+								<label text="labels.adsr.release" pad.h="6"/>
+								<combo id="er${idx}" hexpand="true" pad.r="6"/>
+							</hbox>
+						</cell>
+
+						<!-- Row 2 -->
+						<ui:with bg.color="bg_schema">
+							<label text="labels.adsr.time"/>
+							<label text="labels.adsr.convex"/>
+							<button id="eh${idx}" text="labels.adsr.hold" ui:inject="Button_envelope" activity="(:ee${idx})"/>
+							<label text="labels.adsr.time"/>
+							<label text="labels.adsr.convex"/>
+							<button id="eb${idx}" text="labels.adsr.break" ui:inject="Button_envelope"/>
+							<label text="labels.adsr.time" activity=":eb${idx}"/>
+							<label text="labels.adsr.convex" activity=":eb${idx}"/>
+							<void/>
+							<label text="labels.adsr.time"/>
+							<label text="labels.adsr.convex"/>
+
+							<!-- Row 3 -->
+							<knob id="ta${idx}"/>
+							<knob id="ca${idx}"/>
+							<knob id="th${idx}" scolor="(:eh${idx}) and (:ee${idx}) ? 'envelope' : 'kscale_inactive'"/>
+							<knob id="td${idx}"/>
+							<knob id="cd${idx}"/>
+							<knob id="bl${idx}" scolor="(:eb${idx}) and (:ee${idx}) ? 'envelope' : 'kscale_inactive'"/>
+							<knob id="ts${idx}" activity=":eb${idx}"/>
+							<knob id="cs${idx}" activity=":eb${idx}"/>
+							<knob id="sl${idx}"/>
+							<knob id="tr${idx}"/>
+							<knob id="cr${idx}"/>
+
+							<!-- Row 4 -->
+							<ui:with sline="true">
+								<value id="ta${idx}"/>
+								<value id="ca${idx}"/>
+								<value id="th${idx}" bright="(:eh${idx}) and (:ee${idx})? 1 : 0.75"/>
+								<value id="td${idx}"/>
+								<value id="cd${idx}"/>
+								<value id="bl${idx}" bright="(:eb${idx}) and (:ee${idx})? 1 : 0.75"/>
+								<value id="ts${idx}" activity=":eb${idx}"/>
+								<value id="cs${idx}" activity=":eb${idx}"/>
+								<value id="sl${idx}"/>
+								<value id="tr${idx}"/>
+								<value id="cr${idx}"/>
+							</ui:with>
+						</ui:with>
+					</ui:with>
+				</grid>
+
 				<!-- loop -->
 				<grid rows="3" cols="7" bg.color="bg" hspacing="2">
 					<ui:with bright="(:lo${idx} igt 0) ? 1 : 0.75" bg.bright="(:lo${idx} igt 0) ? 1.0 : :const_bg_darken" scolor="(:lo${idx} igt 0) ? 'loop' : 'kscale_inactive'">
@@ -409,12 +518,12 @@
 					<grid rows="11" cols="17" transpose="true" hspacing="2" bg.color="bg">
 						<ui:with bg.color="bg_schema" fill="true" halign="0">
 							<label text="labels.sedit.sample" padding="6"/>
-							<label text="labels.sedit.enabled" />
-							<label text="labels.midi.velocity" />
-							<label text="labels.midi.code" />
-							<label text="labels.signal.pan_left" />
+							<label text="labels.sedit.enabled"/>
+							<label text="labels.midi.velocity"/>
+							<label text="labels.midi.code"/>
+							<label text="labels.signal.pan_left"/>
 							<label text="labels.units.:pc" pad.b="6"/>
-							<label text="labels.signal.pan_right" />
+							<label text="labels.signal.pan_right"/>
 							<label text="labels.units.:pc" pad.b="6"/>
 							<label text="labels.sedit.listen" pad.b="6"/>
 							<label text="labels.sedit.stop" pad.b="6"/>
@@ -425,9 +534,10 @@
 							<cell rows="11">
 								<vsep/>
 							</cell>
-							<ui:with bg.color="bg_schema">
+
+							<ui:set id="idx" value="[inst]_${i}"/>
+							<ui:with bg.color="bg_schema" activity=":sample_state_${i} ieq 0">
 								<label text="${:i+1}"/>
-								<ui:set id="idx" value="[inst]_${i}"/>
 
 								<button id="on${idx}" width="32" height="12" ui:inject="Button_yellow" led="true" padding="6"/>
 								<knob id="vl${idx}" size="20" scolor="velocity"/>
@@ -435,18 +545,12 @@
 									<value id="midivel${idx}" detailed="false"/>
 									<value id="vl${idx}" detailed="true" sline="true"/>
 								</vbox>
-								<knob id="pl${idx}" size="20" balance="0.5" scolor="balance_l"/>
+								<knob ui:tag="42" id="pl${idx}" size="20" balance="0.5" scolor="balance_l"/>
 								<value id="pl${idx}" detailed="false" pad.b="6"/>
 								<knob id="pr${idx}" size="20" balance="0.5" scolor="balance_r"/>
 								<value id="pr${idx}" detailed="false" pad.b="6"/>
-								<button id="ls${idx}"
-									font.name="lsp-icons" font.size="10"
-									text="icons.playback_big.play"
-									size="32" ui:inject="Button_cyan" toggle="false" />
-								<button id="lc${idx}"
-									font.name="lsp-icons" font.size="10"
-									text="icons.playback_big.stop"
-									size="32" ui:inject="Button_cyan" toggle="false" pad.b="6" />
+								<button id="ls${idx}" font.name="lsp-icons" font.size="10" text="icons.playback_big.play" size="32" ui:inject="Button_cyan" toggle="false"/>
+								<button id="lc${idx}" font.name="lsp-icons" font.size="10" text="icons.playback_big.stop" size="32" ui:inject="Button_cyan" toggle="false" pad.b="6"/>
 								<led id="no${idx}" pad.b="6"/>
 							</ui:with>
 						</ui:for>
@@ -463,18 +567,18 @@
 						<label text="labels.instrument" padding="6"/>
 						<label text="labels.name" padding="6"/>
 						<label text="labels.sedit.enabled" padding="6"/>
-						<label text="labels.mix_gain" />
+						<label text="labels.mix_gain"/>
 						<label text="labels.units.:db" pad.b="6"/>
 						<label text="labels.direct_out" visibility="ex :don_0" padding="6"/>
-						<label text="labels.signal.pan_left" />
+						<label text="labels.signal.pan_left"/>
 						<label text="labels.units.:pc" pad.b="6"/>
-						<label text="labels.signal.pan_right" />
+						<label text="labels.signal.pan_right"/>
 						<label text="labels.units.:pc" pad.b="6"/>
 						<label text="labels.group" pad.b="6"/>
 						<label text="labels.midi.midi_number" pad.b="6"/>
 						<label text="labels.midi.note_on" pad.b="6"/>
-						<label text="labels.listen" />
-						<label text="labels.stop" />
+						<label text="labels.listen"/>
+						<label text="labels.stop"/>
 					</ui:with>
 
 					<ui:for id="i" first=":m*12" count="12">
@@ -494,14 +598,8 @@
 						<combo id="mgrp_${i}" pad.b="6" pad.h="6"/>
 						<midinote id="mn_${i}" note_id="note_${i}" octave_id="oct_${i}" pad.b="6" pointer="hand"/>
 						<led id="iact_${i}" pad.b="6"/>
-						<button id="trg_${i}"
-							font.name="lsp-icons" font.size="10"
-							text="icons.playback_big.play"
-							size="32" ui:inject="Button_cyan" toggle="false" />
-						<button id="stop_${i}"
-							font.name="lsp-icons" font.size="10"
-							text="icons.playback_big.stop"
-							size="32" ui:inject="Button_cyan" toggle="false" />
+						<button id="trg_${i}" font.name="lsp-icons" font.size="10" text="icons.playback_big.play" size="32" ui:inject="Button_cyan" toggle="false"/>
+						<button id="stop_${i}" font.name="lsp-icons" font.size="10" text="icons.playback_big.stop" size="32" ui:inject="Button_cyan" toggle="false"/>
 					</ui:for>
 				</grid>
 			</group>
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/ui/sampling/single/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/ui/sampling/single/mono.xml
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/ui/sampling/single/mono.xml	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/ui/sampling/single/mono.xml	2025-08-26 18:16:11.497733757 +0000
@@ -1,4 +1,6 @@
 <plugin resizable="true">
+	<ui:set id="idx" value="[ssel]"/>
+
 	<grid rows="3" cols="2" spacing="4" transpose="true">
 		<!-- Midi settings -->
 		<group text="groups.midi_setup" bg.color="bg" spacing="4" ipadding="0">
@@ -51,79 +53,106 @@
 					<!-- File editor -->
 					<asample
 						expand="true"
-						id="sf[ssel]"
-						mesh_id="fd[ssel]"
+						id="sf${idx}"
+						activity="(:sets ine 3) or (:fs${idx} ine 0)"
+						mesh_id="fd${idx}"
 						path.id="_ui_dlg_sample_path"
 						ftype.id="_ui_dlg_sample_ftype"
-						hcut=":hc[ssel]"
-						tcut=":tc[ssel]"
-						fadein=":fi[ssel]"
-						fadeout=":fo[ssel]"
-						stretch.enable="1"
-						stretch.color="(:so[ssel]) ? 'stretch_color' : 'stretch_color_off'"
-						stretch.border.color="(:so[ssel]) ? 'stretch_border_color' : 'stretch_border_color_off'"
-						stretch.begin=":ss[ssel]"
-						stretch.end=":se[ssel]"
-						loop.enable="1"
-						loop.color="(:lo[ssel]) ? 'loop_color' : 'loop_color_off'"
-						loop.border.color="(:lo[ssel]) ? 'loop_border_color' : 'loop_border_color_off'"
-						loop.begin=":lb[ssel]"
-						loop.end=":le[ssel]"
-						play.position=":pp[ssel]"
-						length=":fl[ssel]"
-						length.actual=":al[ssel]"
-						status=":fs[ssel]"
-						sample.full="true"
+						hcut="(:sets ine 3) ? :hc${idx} : 0"
+						tcut="(:sets ine 3) ? :tc${idx} : 0"
+						fadein="(:sets ine 3) ? :fi${idx} : 0"
+						fadeout="(:sets ine 3) ? :fo${idx} : 0"
+						stretch.enable=":sets ine 3"
+						stretch.color="(:so${idx}) ? 'stretch_color' : 'stretch_color_off'"
+						stretch.border.color="(:so${idx}) ? 'stretch_border_color' : 'stretch_border_color_off'"
+						stretch.begin=":ss${idx}"
+						stretch.end=":se${idx}"
+						loop.enable=":sets ine 3"
+						loop.color="(:lo${idx}) ? 'loop_color' : 'loop_color_off'"
+						loop.border.color="(:lo${idx}) ? 'loop_border_color' : 'loop_border_color_off'"
+						loop.begin=":lb${idx}"
+						loop.end=":le${idx}"
+						play.position="(:sets ine 3) ? :pp${idx} : :pp${idx} - :hc${idx}"
+						length="(:sets ine 3) ? :fl${idx} : (:al${idx} - :hc${idx} - :tc${idx})"
+						length.actual=":al${idx}"
+						status=":fs${idx}"
+						sample.full=":sets ine 3"
 						width.min="320"
 						height.min="160"
 						load.preview="true"
-						clipboard.pitch="pi[ssel]"
-						clipboard.stretch_on="so[ssel]"
-						clipboard.stretch="st[ssel]"
-						clipboard.stretch_start="ss[ssel]"
-						clipboard.stretch_end="se[ssel]"
-						clipboard.stretch_chunk="sc[ssel]"
-						clipboard.stretch_fade="sx[ssel]"
-						clipboard.loop_on="lo[ssel]"
-						clipboard.loop_start="lb[ssel]"
-						clipboard.loop_end="le[ssel]"
-						clipboard.crossfade_type="xt[ssel]"
-						clipboard.head_cut="hc[ssel]"
-						clipboard.tail_cut="tc[ssel]"
-						clipboard.fade_in="fi[ssel]"
-						clipboard.fade_out="fo[ssel]"
-						clipboard.makeup="mk[ssel]"
-						clipboard.predelay="pd[ssel]"/>
+						clipboard.pitch="pi${idx}"
+						clipboard.stretch_on="so${idx}"
+						clipboard.stretch="st${idx}"
+						clipboard.stretch_start="ss${idx}"
+						clipboard.stretch_end="se${idx}"
+						clipboard.stretch_chunk="sc${idx}"
+						clipboard.stretch_fade="sx${idx}"
+						clipboard.loop_on="lo${idx}"
+						clipboard.loop_start="lb${idx}"
+						clipboard.loop_end="le${idx}"
+						clipboard.crossfade_type="xt${idx}"
+						clipboard.head_cut="hc${idx}"
+						clipboard.tail_cut="tc${idx}"
+						clipboard.fade_in="fi${idx}"
+						clipboard.fade_out="fo${idx}"
+						clipboard.makeup="mk${idx}"
+						clipboard.predelay="pd${idx}">
+						<aenvelope
+							attack.time.id="ta${idx}"
+							hold.time.id="th${idx}"
+							decay.time.id="td${idx}"
+							slope.time.id="ts${idx}"
+							release.time.id="tr${idx}"
+							attack.curve.id="ca${idx}"
+							decay.curve.id="cd${idx}"
+							slope.curve.id="cs${idx}"
+							release.curve.id="cr${idx}"
+							break.level.id="bl${idx}"
+							sustain.level.id="sl${idx}"
+							attack.type.id="ea${idx}"
+							decay.type.id="ed${idx}"
+							slope.type.id="es${idx}"
+							release.type.id="er${idx}"
+							hold.enabled=":eh${idx}"
+							break.enabled=":eb${idx}"
+							visibility=":ee${idx}"
+							editable=":ee${idx} and (:sets eq 3)"
+							wire=":sets eq 3"/>
+					</asample>
 
-					<!-- Listen button -->
-					<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="true" bg.color="bg_schema">
+					<!-- Envelope, Listen, Stop buttons -->
+					<hbox pad.h="6" fill="true" bg.color="bg_schema">
 						<void hexpand="true"/>
-						<button id="ls[ssel]" text="labels.sedit.listen" width.min="50" ui:inject="Button_cyan" toggle="false"/>
-						<button id="lc[ssel]" text="labels.sedit.stop" width.min="50" ui:inject="Button_cyan" toggle="false"/>
+						<button id="ee${idx}" text="labels.adsr.envelope" width.min="50" ui:inject="Button_envelope" toggle="false" pad.r="6"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+						<ui:with pad.v="4">
+							<button id="ls${idx}" text="labels.sedit.listen" width.min="50" ui:inject="Button_cyan" toggle="false" pad.h="6"/>
+							<button id="lc${idx}" text="labels.sedit.stop" width.min="50" ui:inject="Button_cyan" toggle="false"/>
+						</ui:with>
 					</hbox>
 				</vbox>
 
 				<!-- Sample list -->
-				<void bg.color="bg_graph" pad.h="2" hreduce="true" visibility="(:fs[ssel] ine 1)"/>
+				<void bg.color="bg_graph" pad.h="2" hreduce="true" visibility="(:fs${idx} ine 1)"/>
 
-				<vbox vexpand="true" visibility="(:fs[ssel] ine 1)">
+				<vbox vexpand="true" visibility="(:fs${idx} ine 1)">
 					<void bg.color="bg_graph" pad.v="2" vreduce="true"/>
-					<afolder id="sf[ssel]" expand="true" width.min="199"/>
+					<afolder id="sf${idx}" expand="true" width.min="199"/>
 					<void bg.color="bg_graph" pad.v="2" vreduce="true"/>
 
 					<ui:with fill="true">
 						<hbox pad.h="6" pad.v="4" spacing="4" bg.color="bg_schema">
 							<ui:with height="22">
-								<anavigator id="sf[ssel]" text="icons.navigation_big.first_alt" action="first"/>
-								<anavigator id="sf[ssel]" text="icons.navigation_big.last_alt" action="last"/>
+								<anavigator id="sf${idx}" text="icons.navigation_big.first_alt" action="first"/>
+								<anavigator id="sf${idx}" text="icons.navigation_big.last_alt" action="last"/>
 								<void hexpand="true"/>
-								<anavigator id="sf[ssel]" text="icons.navigation_big.previous" action="previous"/>
-								<anavigator id="sf[ssel]" text="icons.navigation_big.next" action="next"/>
+								<anavigator id="sf${idx}" text="icons.navigation_big.previous" action="previous"/>
+								<anavigator id="sf${idx}" text="icons.navigation_big.next" action="next"/>
 								<void hexpand="true"/>
 
-								<anavigator id="sf[ssel]" text="icons.random.dice_fill" action="random"/>
+								<anavigator id="sf${idx}" text="icons.random.dice_fill" action="random"/>
 								<void hexpand="true"/>
-								<anavigator id="sf[ssel]" text="icons.actions.cancel_alt" action="clear"/>
+								<anavigator id="sf${idx}" text="icons.actions.cancel_alt" action="clear"/>
 							</ui:with>
 						</hbox>
 					</ui:with>
@@ -131,69 +160,66 @@
 			</hbox>
 		</tgroup>
 
-		<tabs id="sets"
-		 	vreduce="true"
-			height.min="139" width.min="481"
-			hgap.brightness="((:sets ilt 2) or ((:sets ieq 2) and (:so[ssel])) or ((:sets ieq 3) and (:lo[ssel]))) ? 1.0 : :const_bg_darken">
+		<tabs id="sets" vreduce="true" height.min="139" width.min="481" hgap.brightness="((:sets ilt 2) or ((:sets ieq 2) and (:so${idx})) or ((:sets ieq 4) and (:lo${idx})) or ((:sets ieq 3) and (:ee${idx}))) ? 1.0 : :const_bg_darken">
 
 			<!-- main -->
-			<grid rows="3" cols="13" bg.color="bg" hspacing="2">
+			<grid rows="3" cols="13" bg.color="bg">
 				<ui:with width.min="50">
 					<label text="labels.sedit.reverse" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.head_cut" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.tail_cut" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.fade_in" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.fade_out" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.makeup" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.predelay" bg.color="bg_schema" padding="6"/>
 
 					<cell rows="2">
 						<vbox bg.color="bg_schema" fill="false">
-							<button id="rr[ssel]" text="labels.processing.pre" width="48" pad.b="4" />
-							<button id="rs[ssel]" text="labels.processing.post" width="48" />
+							<button id="rr${idx}" text="labels.processing.pre" width="48" pad.b="4"/>
+							<button id="rs${idx}" text="labels.processing.post" width="48"/>
 							<label pad.b="6"/>
 						</vbox>
 					</cell>
 				</ui:with>
 
 				<ui:with size="20" bg.color="bg_schema" pad="6" pad.t="0">
-					<knob id="hc[ssel]" max=":al[ssel]"/>
-					<knob id="tc[ssel]" max=":al[ssel]"/>
-					<knob id="fi[ssel]" max=":al[ssel]" scolor="fade_in"/>
-					<knob id="fo[ssel]" max=":al[ssel]" scolor="fade_out"/>
-					<knob id="mk[ssel]"/>
-					<knob id="pd[ssel]"/>
+					<knob id="hc${idx}" max=":al${idx}"/>
+					<knob id="tc${idx}" max=":al${idx}"/>
+					<knob id="fi${idx}" max=":al${idx}" scolor="fade_in"/>
+					<knob id="fo${idx}" max=":al${idx}" scolor="fade_out"/>
+					<knob id="mk${idx}"/>
+					<knob id="pd${idx}"/>
 				</ui:with>
 
-				<value id="hc[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="tc[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="fi[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="fo[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="mk[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="pd[ssel]" bg.color="bg_schema" pad.b="6"/>
+				<value id="hc${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="tc${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="fi${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="fo${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="mk${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="pd${idx}" bg.color="bg_schema" pad.b="6"/>
 
 			</grid>
 			<!-- pitch -->
 			<grid rows="3" cols="7" bg.color="bg" hspacing="2">
-				<ui:with bright="(:pc[ssel]) ? 1 : 0.75" bg.bright="(:pc[ssel]) ? 1.0 : :const_bg_darken" scolor="(:pc[ssel]) ? 'kscale' : 'kscale_inactive'">
+				<ui:with bright="(:pc${idx}) ? 1 : 0.75" bg.bright="(:pc${idx}) ? 1.0 : :const_bg_darken" scolor="(:pc${idx}) ? 'kscale' : 'kscale_inactive'">
 					<ui:with width.min="50">
 						<label text="labels.sedit.pitch" bg.color="bg_schema" padding="6" bg.bright="1.0" bright="1"/>
 						<cell rows="3" hreduce="true">
@@ -201,8 +227,8 @@
 						</cell>
 						<cell rows="3">
 							<vbox bg.color="bg">
-								<button id="pc[ssel]" text="labels.sedit.compensate" width.min="107" pad.t="8" pad.b="4" bg.color="bg_schema"/>
-								<combo id="xc[ssel]" fill="false" width.min="107" pad.b="8" bg.color="bg_schema"/>
+								<button id="pc${idx}" text="labels.sedit.compensate" width.min="107" pad.t="8" pad.b="4" bg.color="bg_schema"/>
+								<combo id="xc${idx}" fill="false" width.min="107" pad.b="8" bg.color="bg_schema"/>
 								<hsep bg.color="bg" vreduce="true" pad.v="2" bg.bright="1.0" bright="1"/>
 								<label vexpand="true" bg.color="bg_schema"/>
 							</vbox>
@@ -219,20 +245,20 @@
 					</ui:with>
 
 					<ui:with size="20" bg.color="bg_schema" pad="6" pad.t="0">
-						<knob id="pi[ssel]" bg.bright="1.0" bright="1" scolor="kscale"/>
-						<knob id="xx[ssel]"/>
-						<knob id="cc[ssel]"/>
-
-						<value id="pi[ssel]" bg.color="bg_schema" pad.b="6" bg.bright="1.0" bright="1"/>
-						<value id="xx[ssel]" bg.color="bg_schema" pad.b="6"/>
-						<value id="cc[ssel]" bg.color="bg_schema" pad.b="6"/>
+						<knob id="pi${idx}" bg.bright="1.0" bright="1" scolor="kscale"/>
+						<knob id="xx${idx}"/>
+						<knob id="cc${idx}"/>
+
+						<value id="pi${idx}" bg.color="bg_schema" pad.b="6" bg.bright="1.0" bright="1"/>
+						<value id="xx${idx}" bg.color="bg_schema" pad.b="6"/>
+						<value id="cc${idx}" bg.color="bg_schema" pad.b="6"/>
 					</ui:with>
 				</ui:with>
 
 			</grid>
 			<!-- stretch -->
 			<grid rows="3" cols="11" bg.color="bg" hspacing="2">
-				<ui:with bright="(:so[ssel]) ? 1 : 0.75" bg.bright="(:so[ssel]) ? 1.0 : :const_bg_darken" scolor="(:so[ssel]) ? 'stretch' : 'kscale_inactive'">
+				<ui:with bright="(:so${idx}) ? 1 : 0.75" bg.bright="(:so${idx}) ? 1.0 : :const_bg_darken" scolor="(:so${idx}) ? 'stretch' : 'kscale_inactive'">
 					<ui:with width.min="50">
 						<label text="labels.sedit.stretch" bg.color="bg_schema" padding="6"/>
 						<cell rows="3" hreduce="true">
@@ -240,8 +266,8 @@
 						</cell>
 						<cell rows="3">
 							<vbox bg.color="bg">
-								<button id="so[ssel]" ui:inject="Button_stretch" text="labels.sedit.stretch" width.min="107" pad.t="8" pad.b="4" bg.color="bg_schema" pad.h="6"/>
-								<combo id="xt[ssel]" fill="false" width.min="107" pad.b="8" bg.color="bg_schema" pad.h="6"/>
+								<button id="so${idx}" ui:inject="Button_stretch" text="labels.sedit.stretch" width.min="107" pad.t="8" pad.b="4" bg.color="bg_schema" pad.h="6"/>
+								<combo id="xt${idx}" fill="false" width.min="107" pad.b="8" bg.color="bg_schema" pad.h="6"/>
 								<hsep bg.color="bg" vreduce="true" pad.v="2" bg.bright="1.0" bright="1"/>
 								<label vexpand="true" bg.color="bg_schema"/>
 							</vbox>
@@ -266,33 +292,112 @@
 					</ui:with>
 
 					<ui:with size="20" bg.color="bg_schema" pad="6" pad.t="0">
-						<knob id="st[ssel]"/>
-						<knob id="ss[ssel]" max=":fl[ssel]"/>
-						<knob id="se[ssel]" max=":fl[ssel]"/>
-						<knob id="sx[ssel]"/>
-						<knob id="sc[ssel]"/>
+						<knob id="st${idx}"/>
+						<knob id="ss${idx}" max=":fl${idx}"/>
+						<knob id="se${idx}" max=":fl${idx}"/>
+						<knob id="sx${idx}"/>
+						<knob id="sc${idx}"/>
 
 					</ui:with>
 
-					<value id="st[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="ss[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="se[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="sx[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="sc[ssel]" bg.color="bg_schema" pad.b="6"/>
+					<value id="st${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="ss${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="se${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="sx${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="sc${idx}" bg.color="bg_schema" pad.b="6"/>
 
 				</ui:with>
 
 			</grid>
 
+			<!-- envelope -->
+			<grid rows="4" cols="15" bg.color="bg">
+				<ui:with bright="(:ee${idx}) ? 1 : 0.75" bg.bright="(:ee${idx}) ? 1.0 : :const_bg_darken" scolor="(:ee${idx}) ? 'envelope' : 'kscale_inactive'">
+					<!-- Row 1 -->
+					<cell cols="3" bg.color="bg_schema">
+						<hbox>
+							<label text="labels.adsr.attack" pad.h="6"/>
+							<combo id="ea${idx}" hexpand="true" pad.r="6"/>
+						</hbox>
+					</cell>
+					<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+					<cell cols="3" bg.color="bg_schema">
+						<hbox>
+							<label text="labels.adsr.decay" pad.h="6"/>
+							<combo id="ed${idx}" hexpand="true" pad.r="6"/>
+						</hbox>
+					</cell>
+					<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+					<cell cols="2" bg.color="bg_schema">
+						<hbox>
+							<label text="labels.adsr.slope" pad.h="6" activity=":eb${idx}"/>
+							<combo id="es${idx}" hexpand="true" pad.r="6" activity=":eb${idx}"/>
+						</hbox>
+					</cell>
+					<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+					<label text="labels.adsr.sustain" bg.color="bg_schema" pad.h="6"/>
+					<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+					<cell cols="2" bg.color="bg_schema">
+						<hbox>
+							<label text="labels.adsr.release" pad.h="6"/>
+							<combo id="er${idx}" hexpand="true" pad.r="6"/>
+						</hbox>
+					</cell>
+
+					<!-- Row 2 -->
+					<ui:with bg.color="bg_schema">
+						<label text="labels.adsr.time"/>
+						<label text="labels.adsr.convex"/>
+						<button id="eh${idx}" text="labels.adsr.hold" ui:inject="Button_envelope" activity="(:ee${idx})"/>
+						<label text="labels.adsr.time"/>
+						<label text="labels.adsr.convex"/>
+						<button id="eb${idx}" text="labels.adsr.break" ui:inject="Button_envelope"/>
+						<label text="labels.adsr.time" activity=":eb${idx}"/>
+						<label text="labels.adsr.convex" activity=":eb${idx}"/>
+						<void/>
+						<label text="labels.adsr.time"/>
+						<label text="labels.adsr.convex"/>
+
+						<!-- Row 3 -->
+						<knob id="ta${idx}"/>
+						<knob id="ca${idx}"/>
+						<knob id="th${idx}" scolor="(:eh${idx}) and (:ee${idx}) ? 'envelope' : 'kscale_inactive'"/>
+						<knob id="td${idx}"/>
+						<knob id="cd${idx}"/>
+						<knob id="bl${idx}" scolor="(:eb${idx}) and (:ee${idx}) ? 'envelope' : 'kscale_inactive'"/>
+						<knob id="ts${idx}" activity=":eb${idx}"/>
+						<knob id="cs${idx}" activity=":eb${idx}"/>
+						<knob id="sl${idx}"/>
+						<knob id="tr${idx}"/>
+						<knob id="cr${idx}"/>
+
+						<!-- Row 4 -->
+						<ui:with sline="true">
+							<value id="ta${idx}"/>
+							<value id="ca${idx}"/>
+							<value id="th${idx}" bright="(:eh${idx}) and (:ee${idx})? 1 : 0.75"/>
+							<value id="td${idx}"/>
+							<value id="cd${idx}"/>
+							<value id="bl${idx}" bright="(:eb${idx}) and (:ee${idx})? 1 : 0.75"/>
+							<value id="ts${idx}" activity=":eb${idx}"/>
+							<value id="cs${idx}" activity=":eb${idx}"/>
+							<value id="sl${idx}"/>
+							<value id="tr${idx}"/>
+							<value id="cr${idx}"/>
+						</ui:with>
+					</ui:with>
+				</ui:with>
+			</grid>
+
 			<!-- loop -->
 			<grid rows="3" cols="7" bg.color="bg" hspacing="2">
-				<ui:with bright="(:lo[ssel] igt 0) ? 1 : 0.75" bg.bright="(:lo[ssel] igt 0) ? 1.0 : :const_bg_darken" scolor="(:lo[ssel] igt 0) ? 'loop' : 'kscale_inactive'">
+				<ui:with bright="(:lo${idx} igt 0) ? 1 : 0.75" bg.bright="(:lo${idx} igt 0) ? 1.0 : :const_bg_darken" scolor="(:lo${idx} igt 0) ? 'loop' : 'kscale_inactive'">
 					<ui:with width.min="50">
 						<cell rows="3">
 							<vbox bg.color="bg">
-								<button id="lo[ssel]" ui:inject="Button_loop" text="labels.sedit.loop" width.min="118" pad.t="8" pad.b="4" bg.color="bg_schema" pad.h="6"/>
-								<combo id="lm[ssel]" fill="false" width.min="118" pad.b="4" bg.color="bg_schema" pad.h="6"/>
-								<combo id="lx[ssel]" fill="false" width.min="118" pad.b="8" bg.color="bg_schema" pad.h="6"/>
+								<button id="lo${idx}" ui:inject="Button_loop" text="labels.sedit.loop" width.min="118" pad.t="8" pad.b="4" bg.color="bg_schema" pad.h="6"/>
+								<combo id="lm${idx}" fill="false" width.min="118" pad.b="4" bg.color="bg_schema" pad.h="6"/>
+								<combo id="lx${idx}" fill="false" width.min="118" pad.b="8" bg.color="bg_schema" pad.h="6"/>
 							</vbox>
 						</cell>
 						<cell rows="3" hreduce="true">
@@ -311,14 +416,14 @@
 					</ui:with>
 
 					<ui:with size="20" bg.color="bg_schema" pad="6" pad.t="0">
-						<knob id="lb[ssel]" max=":al[ssel]"/>
-						<knob id="le[ssel]" max=":al[ssel]"/>
-						<knob id="ll[ssel]"/>
+						<knob id="lb${idx}" max=":al${idx}"/>
+						<knob id="le${idx}" max=":al${idx}"/>
+						<knob id="ll${idx}"/>
 					</ui:with>
 
-					<value id="lb[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="le[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="ll[ssel]" bg.color="bg_schema" pad.b="6"/>
+					<value id="lb${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="le${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="ll${idx}" bg.color="bg_schema" pad.b="6"/>
 				</ui:with>
 			</grid>
 		</tabs>
@@ -388,7 +493,7 @@
 						<cell rows="9">
 							<vsep/>
 						</cell>
-						<ui:with bg.color="bg_schema">
+						<ui:with bg.color="bg_schema" activity=":fs_${i} ieq 0">
 							<label text="${:i+1}"/>
 							<button id="on_${i}" width="32" height="12" ui:inject="Button_yellow" led="true" padding="6"/>
 							<knob id="vl_${i}" size="20" scolor="velocity"/>
@@ -398,14 +503,8 @@
 							</vbox>
 							<knob id="mx_${i}" size="20"/>
 							<value id="mx_${i}" detailed="false" pad.b="6"/>
-							<button id="ls_${i}"
-								font.name="lsp-icons" font.size="10"
-								text="icons.playback_big.play"
-								size="32" ui:inject="Button_cyan" toggle="false" />
-							<button id="lc_${i}"
-								font.name="lsp-icons" font.size="10"
-								text="icons.playback_big.stop"
-								size="32" ui:inject="Button_cyan" toggle="false" pad.b="6" />
+							<button id="ls_${i}" font.name="lsp-icons" font.size="10" text="icons.playback_big.play" size="32" ui:inject="Button_cyan" toggle="false"/>
+							<button id="lc_${i}" font.name="lsp-icons" font.size="10" text="icons.playback_big.stop" size="32" ui:inject="Button_cyan" toggle="false" pad.b="6"/>
 							<led id="no_${i}" pad.b="6" width="32" height="6"/>
 						</ui:with>
 					</ui:for>
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/res/main/ui/sampling/single/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/ui/sampling/single/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-sampler/res/main/ui/sampling/single/stereo.xml	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/res/main/ui/sampling/single/stereo.xml	2025-08-26 18:16:11.497733757 +0000
@@ -1,4 +1,5 @@
 <plugin resizable="true">
+	<ui:set id="idx" value="[ssel]"/>
 
 	<grid rows="3" cols="2" spacing="4" transpose="true">
 		<!-- Midi settings -->
@@ -52,79 +53,108 @@
 				<vbox hexpand="true">
 					<asample
 						expand="true"
-						id="sf[ssel]"
-						mesh_id="fd[ssel]"
+						id="sf${idx}"
+						activity="(:sets ine 3) or (:fs${idx} ine 0)"
+						mesh_id="fd${idx}"
 						path.id="_ui_dlg_sample_path"
 						ftype.id="_ui_dlg_sample_ftype"
-						hcut=":hc[ssel]"
-						tcut=":tc[ssel]"
-						fadein=":fi[ssel]"
-						fadeout=":fo[ssel]"
-						stretch.enable="1"
-						stretch.color="(:so[ssel]) ? 'stretch_color' : 'stretch_color_off'"
-						stretch.border.color="(:so[ssel]) ? 'stretch_border_color' : 'stretch_border_color_off'"
-						stretch.begin=":ss[ssel]"
-						stretch.end=":se[ssel]"
-						loop.enable="1"
-						loop.color="(:lo[ssel]) ? 'loop_color' : 'loop_color_off'"
-						loop.border.color="(:lo[ssel]) ? 'loop_border_color' : 'loop_border_color_off'"
-						loop.begin=":lb[ssel]"
-						loop.end=":le[ssel]"
-						play.position=":pp[ssel]"
-						length=":fl[ssel]"
-						length.actual=":al[ssel]"
-						status=":fs[ssel]"
-						sample.full="true"
+						hcut="(:sets ine 3) ? :hc${idx} : 0"
+						tcut="(:sets ine 3) ? :tc${idx} : 0"
+						fadein="(:sets ine 3) ? :fi${idx} : 0"
+						fadeout="(:sets ine 3) ? :fo${idx} : 0"
+						stretch.enable=":sets ine 3"
+						stretch.color="(:so${idx}) ? 'stretch_color' : 'stretch_color_off'"
+						stretch.border.color="(:so${idx}) ? 'stretch_border_color' : 'stretch_border_color_off'"
+						stretch.begin=":ss${idx}"
+						stretch.end=":se${idx}"
+						loop.enable=":sets ine 3"
+						loop.color="(:lo${idx}) ? 'loop_color' : 'loop_color_off'"
+						loop.border.color="(:lo${idx}) ? 'loop_border_color' : 'loop_border_color_off'"
+						loop.begin=":lb${idx}"
+						loop.end=":le${idx}"
+						play.position="(:sets ine 3) ? :pp${idx} : :pp${idx} - :hc${idx}"
+						length="(:sets ine 3) ? :fl${idx} : (:al${idx} - :hc${idx} - :tc${idx})"
+						length.actual=":al${idx}"
+						status=":fs${idx}"
+						sample.full=":sets ine 3"
 						width.min="320"
 						height.min="160"
 						load.preview="true"
-						clipboard.pitch="pi[ssel]"
-						clipboard.stretch_on="so[ssel]"
-						clipboard.stretch="st[ssel]"
-						clipboard.stretch_start="ss[ssel]"
-						clipboard.stretch_end="se[ssel]"
-						clipboard.stretch_chunk="sc[ssel]"
-						clipboard.stretch_fade="sx[ssel]"
-						clipboard.loop_on="lo[ssel]"
-						clipboard.loop_start="lb[ssel]"
-						clipboard.loop_end="le[ssel]"
-						clipboard.crossfade_type="xt[ssel]"
-						clipboard.head_cut="hc[ssel]"
-						clipboard.tail_cut="tc[ssel]"
-						clipboard.fade_in="fi[ssel]"
-						clipboard.fade_out="fo[ssel]"
-						clipboard.makeup="mk[ssel]"
-						clipboard.predelay="pd[ssel]"/>
+						clipboard.pitch="pi${idx}"
+						clipboard.stretch_on="so${idx}"
+						clipboard.stretch="st${idx}"
+						clipboard.stretch_start="ss${idx}"
+						clipboard.stretch_end="se${idx}"
+						clipboard.stretch_chunk="sc${idx}"
+						clipboard.stretch_fade="sx${idx}"
+						clipboard.loop_on="lo${idx}"
+						clipboard.loop_start="lb${idx}"
+						clipboard.loop_end="le${idx}"
+						clipboard.crossfade_type="xt${idx}"
+						clipboard.head_cut="hc${idx}"
+						clipboard.tail_cut="tc${idx}"
+						clipboard.fade_in="fi${idx}"
+						clipboard.fade_out="fo${idx}"
+						clipboard.makeup="mk${idx}"
+						clipboard.predelay="pd${idx}">
+
+						<aenvelope
+							attack.time.id="ta${idx}"
+							hold.time.id="th${idx}"
+							decay.time.id="td${idx}"
+							slope.time.id="ts${idx}"
+							release.time.id="tr${idx}"
+							attack.curve.id="ca${idx}"
+							decay.curve.id="cd${idx}"
+							slope.curve.id="cs${idx}"
+							release.curve.id="cr${idx}"
+							break.level.id="bl${idx}"
+							sustain.level.id="sl${idx}"
+							attack.type.id="ea${idx}"
+							decay.type.id="ed${idx}"
+							slope.type.id="es${idx}"
+							release.type.id="er${idx}"
+							hold.enabled=":eh${idx}"
+							break.enabled=":eb${idx}"
+							visibility=":ee${idx}"
+							editable=":ee${idx} and (:sets eq 3)"
+							wire=":sets eq 3"/>
 
-					<!-- Listen button -->
-					<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="true" bg.color="bg_schema">
+					</asample>
+
+					<!-- Envelope, Listen, Stop buttons -->
+					<hbox pad.h="6" fill="true" bg.color="bg_schema">
 						<void hexpand="true"/>
-						<button id="ls[ssel]" text="labels.sedit.listen" width.min="50" ui:inject="Button_cyan" toggle="false"/>
-						<button id="lc[ssel]" text="labels.sedit.stop" width.min="50" ui:inject="Button_cyan" toggle="false"/>
+						<button id="ee${idx}" text="labels.adsr.envelope" width.min="50" ui:inject="Button_envelope" toggle="false" pad.r="6"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
+						<ui:with pad.v="4">
+							<button id="ls${idx}" text="labels.sedit.listen" width.min="50" ui:inject="Button_cyan" toggle="false" pad.h="6"/>
+							<button id="lc${idx}" text="labels.sedit.stop" width.min="50" ui:inject="Button_cyan" toggle="false"/>
+						</ui:with>
 					</hbox>
 				</vbox>
 
 				<!-- Sample list -->
-				<void bg.color="bg_graph" pad.h="2" hreduce="true" visibility="(:fs[ssel] ine 1)"/>
+				<void bg.color="bg_graph" pad.h="2" hreduce="true" visibility="(:fs${idx} ine 1)"/>
 
-				<vbox vexpand="true" visibility="(:fs[ssel] ine 1)">
+				<vbox vexpand="true" visibility="(:fs${idx} ine 1)">
 					<void bg.color="bg_graph" pad.v="2" vreduce="true"/>
-					<afolder id="sf[ssel]" expand="true" width.min="199"/>
+					<afolder id="sf${idx}" expand="true" width.min="199"/>
 					<void bg.color="bg_graph" pad.v="2" vreduce="true"/>
 
 					<ui:with fill="true">
 						<hbox pad.h="6" pad.v="4" spacing="4" bg.color="bg_schema">
 							<ui:with height="22">
-								<anavigator id="sf[ssel]" text="icons.navigation_big.first_alt" action="first"/>
-								<anavigator id="sf[ssel]" text="icons.navigation_big.last_alt" action="last"/>
+								<anavigator id="sf${idx}" text="icons.navigation_big.first_alt" action="first"/>
+								<anavigator id="sf${idx}" text="icons.navigation_big.last_alt" action="last"/>
 								<void hexpand="true"/>
-								<anavigator id="sf[ssel]" text="icons.navigation_big.previous" action="previous"/>
-								<anavigator id="sf[ssel]" text="icons.navigation_big.next" action="next"/>
+								<anavigator id="sf${idx}" text="icons.navigation_big.previous" action="previous"/>
+								<anavigator id="sf${idx}" text="icons.navigation_big.next" action="next"/>
 								<void hexpand="true"/>
 
-								<anavigator id="sf[ssel]" text="icons.random.dice_fill" action="random"/>
+								<anavigator id="sf${idx}" text="icons.random.dice_fill" action="random"/>
 								<void hexpand="true"/>
-								<anavigator id="sf[ssel]" text="icons.actions.cancel_alt" action="clear"/>
+								<anavigator id="sf${idx}" text="icons.actions.cancel_alt" action="clear"/>
 							</ui:with>
 						</hbox>
 					</ui:with>
@@ -132,69 +162,66 @@
 			</hbox>
 		</tgroup>
 
-		<tabs id="sets"
-			vreduce="true"
-			height.min="139" width.min="481"
-			hgap.brightness="((:sets ilt 2) or ((:sets ieq 2) and (:so[ssel])) or ((:sets ieq 3) and (:lo[ssel]))) ? 1.0 : :const_bg_darken">
+		<tabs id="sets" vreduce="true" height.min="139" width.min="481" hgap.brightness="((:sets ilt 2) or ((:sets ieq 2) and (:so${idx})) or ((:sets ieq 4) and (:lo${idx})) or ((:sets ieq 3) and (:ee${idx}))) ? 1.0 : :const_bg_darken">
 
 			<!-- main -->
-			<grid rows="3" cols="13" bg.color="bg" hspacing="2">
+			<grid rows="3" cols="13" bg.color="bg">
 				<ui:with width.min="50">
 					<label text="labels.sedit.reverse" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.head_cut" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.tail_cut" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.fade_in" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.fade_out" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.makeup" bg.color="bg_schema" padding="6"/>
 					<cell rows="3">
-						<vsep bg.color="bg"/>
+						<vsep bg.color="bg" pad.h="2" hreduce="true"/>
 					</cell>
 					<label text="labels.sedit.predelay" bg.color="bg_schema" padding="6"/>
 
 					<cell rows="2">
 						<vbox bg.color="bg_schema" fill="false">
-							<button id="rr[ssel]" text="labels.processing.pre" width="48" pad.b="4" />
-							<button id="rs[ssel]" text="labels.processing.post" width="48" />
+							<button id="rr${idx}" text="labels.processing.pre" width="48" pad.b="4"/>
+							<button id="rs${idx}" text="labels.processing.post" width="48"/>
 							<label pad.b="6"/>
 						</vbox>
 					</cell>
 				</ui:with>
 
 				<ui:with size="20" bg.color="bg_schema" pad="6" pad.t="0">
-					<knob id="hc[ssel]" max=":al[ssel]"/>
-					<knob id="tc[ssel]" max=":al[ssel]"/>
-					<knob id="fi[ssel]" max=":al[ssel]" scolor="fade_in"/>
-					<knob id="fo[ssel]" max=":al[ssel]" scolor="fade_out"/>
-					<knob id="mk[ssel]"/>
-					<knob id="pd[ssel]"/>
+					<knob id="hc${idx}" max=":al${idx}"/>
+					<knob id="tc${idx}" max=":al${idx}"/>
+					<knob id="fi${idx}" max=":al${idx}" scolor="fade_in"/>
+					<knob id="fo${idx}" max=":al${idx}" scolor="fade_out"/>
+					<knob id="mk${idx}"/>
+					<knob id="pd${idx}"/>
 				</ui:with>
 
-				<value id="hc[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="tc[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="fi[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="fo[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="mk[ssel]" bg.color="bg_schema" pad.b="6"/>
-				<value id="pd[ssel]" bg.color="bg_schema" pad.b="6"/>
+				<value id="hc${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="tc${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="fi${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="fo${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="mk${idx}" bg.color="bg_schema" pad.b="6"/>
+				<value id="pd${idx}" bg.color="bg_schema" pad.b="6"/>
 
 			</grid>
 			<!-- pitch -->
 			<grid rows="3" cols="7" bg.color="bg" hspacing="2">
-				<ui:with bright="(:pc[ssel]) ? 1 : 0.75" bg.bright="(:pc[ssel]) ? 1.0 : :const_bg_darken" scolor="(:pc[ssel]) ? 'kscale' : 'kscale_inactive'">
+				<ui:with bright="(:pc${idx}) ? 1 : 0.75" bg.bright="(:pc${idx}) ? 1.0 : :const_bg_darken" scolor="(:pc${idx}) ? 'kscale' : 'kscale_inactive'">
 					<ui:with width.min="50">
 						<label text="labels.sedit.pitch" bg.color="bg_schema" padding="6" bg.bright="1.0" bright="1"/>
 						<cell rows="3" hreduce="true">
@@ -202,8 +229,8 @@
 						</cell>
 						<cell rows="3">
 							<vbox bg.color="bg">
-								<button id="pc[ssel]" text="labels.sedit.compensate" width.min="107" pad.t="8" pad.b="4" bg.color="bg_schema"/>
-								<combo id="xc[ssel]" fill="false" width.min="107" pad.b="8" bg.color="bg_schema"/>
+								<button id="pc${idx}" text="labels.sedit.compensate" width.min="107" pad.t="8" pad.b="4" bg.color="bg_schema"/>
+								<combo id="xc${idx}" fill="false" width.min="107" pad.b="8" bg.color="bg_schema"/>
 								<hsep bg.color="bg" vreduce="true" pad.v="2" bg.bright="1.0" bright="1"/>
 								<label vexpand="true" bg.color="bg_schema"/>
 							</vbox>
@@ -220,20 +247,20 @@
 					</ui:with>
 
 					<ui:with size="20" bg.color="bg_schema" pad="6" pad.t="0">
-						<knob id="pi[ssel]" bg.bright="1.0" bright="1" scolor="kscale"/>
-						<knob id="xx[ssel]"/>
-						<knob id="cc[ssel]"/>
-
-						<value id="pi[ssel]" bg.color="bg_schema" pad.b="6" bg.bright="1.0" bright="1"/>
-						<value id="xx[ssel]" bg.color="bg_schema" pad.b="6"/>
-						<value id="cc[ssel]" bg.color="bg_schema" pad.b="6"/>
+						<knob id="pi${idx}" bg.bright="1.0" bright="1" scolor="kscale"/>
+						<knob id="xx${idx}"/>
+						<knob id="cc${idx}"/>
+
+						<value id="pi${idx}" bg.color="bg_schema" pad.b="6" bg.bright="1.0" bright="1"/>
+						<value id="xx${idx}" bg.color="bg_schema" pad.b="6"/>
+						<value id="cc${idx}" bg.color="bg_schema" pad.b="6"/>
 					</ui:with>
 				</ui:with>
 
 			</grid>
 			<!-- stretch -->
 			<grid rows="3" cols="11" bg.color="bg" hspacing="2">
-				<ui:with bright="(:so[ssel]) ? 1 : 0.75" bg.bright="(:so[ssel]) ? 1.0 : :const_bg_darken" scolor="(:so[ssel]) ? 'stretch' : 'kscale_inactive'">
+				<ui:with bright="(:so${idx}) ? 1 : 0.75" bg.bright="(:so${idx}) ? 1.0 : :const_bg_darken" scolor="(:so${idx}) ? 'stretch' : 'kscale_inactive'">
 					<ui:with width.min="50">
 						<label text="labels.sedit.stretch" bg.color="bg_schema" padding="6"/>
 						<cell rows="3" hreduce="true">
@@ -241,8 +268,8 @@
 						</cell>
 						<cell rows="3">
 							<vbox bg.color="bg">
-								<button id="so[ssel]" ui:inject="Button_stretch" text="labels.sedit.stretch" width.min="107" pad.t="8" pad.b="4" bg.color="bg_schema" pad.h="6"/>
-								<combo id="xt[ssel]" fill="false" width.min="107" pad.b="8" bg.color="bg_schema" pad.h="6"/>
+								<button id="so${idx}" ui:inject="Button_stretch" text="labels.sedit.stretch" width.min="107" pad.t="8" pad.b="4" bg.color="bg_schema" pad.h="6"/>
+								<combo id="xt${idx}" fill="false" width.min="107" pad.b="8" bg.color="bg_schema" pad.h="6"/>
 								<hsep bg.color="bg" vreduce="true" pad.v="2" bg.bright="1.0" bright="1"/>
 								<label vexpand="true" bg.color="bg_schema"/>
 							</vbox>
@@ -267,33 +294,112 @@
 					</ui:with>
 
 					<ui:with size="20" bg.color="bg_schema" pad="6" pad.t="0">
-						<knob id="st[ssel]"/>
-						<knob id="ss[ssel]" max=":fl[ssel]"/>
-						<knob id="se[ssel]" max=":fl[ssel]"/>
-						<knob id="sx[ssel]"/>
-						<knob id="sc[ssel]"/>
+						<knob id="st${idx}"/>
+						<knob id="ss${idx}" max=":fl${idx}"/>
+						<knob id="se${idx}" max=":fl${idx}"/>
+						<knob id="sx${idx}"/>
+						<knob id="sc${idx}"/>
 
 					</ui:with>
 
-					<value id="st[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="ss[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="se[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="sx[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="sc[ssel]" bg.color="bg_schema" pad.b="6"/>
+					<value id="st${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="ss${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="se${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="sx${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="sc${idx}" bg.color="bg_schema" pad.b="6"/>
 
 				</ui:with>
 
 			</grid>
 
+			<!-- envelope -->
+			<grid rows="4" cols="15" bg.color="bg">
+				<ui:with bright="(:ee${idx}) ? 1 : 0.75" bg.bright="(:ee${idx}) ? 1.0 : :const_bg_darken" scolor="(:ee${idx}) ? 'envelope' : 'kscale_inactive'">
+					<!-- Row 1 -->
+					<cell cols="3" bg.color="bg_schema">
+						<hbox>
+							<label text="labels.adsr.attack" pad.h="6"/>
+							<combo id="ea${idx}" hexpand="true" pad.r="6"/>
+						</hbox>
+					</cell>
+					<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+					<cell cols="3" bg.color="bg_schema">
+						<hbox>
+							<label text="labels.adsr.decay" pad.h="6"/>
+							<combo id="ed${idx}" hexpand="true" pad.r="6"/>
+						</hbox>
+					</cell>
+					<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+					<cell cols="2" bg.color="bg_schema">
+						<hbox>
+							<label text="labels.adsr.slope" pad.h="6" activity=":eb${idx}"/>
+							<combo id="es${idx}" hexpand="true" pad.r="6" activity=":eb${idx}"/>
+						</hbox>
+					</cell>
+					<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+					<label text="labels.adsr.sustain" bg.color="bg_schema" pad.h="6"/>
+					<cell rows="4"><vsep bg.color="bg" bg.bright="1.0" bright="1" pad.h="2" hreduce="true"/></cell>
+					<cell cols="2" bg.color="bg_schema">
+						<hbox>
+							<label text="labels.adsr.release" pad.h="6"/>
+							<combo id="er${idx}" hexpand="true" pad.r="6"/>
+						</hbox>
+					</cell>
+
+					<!-- Row 2 -->
+					<ui:with bg.color="bg_schema">
+						<label text="labels.adsr.time"/>
+						<label text="labels.adsr.convex"/>
+						<button id="eh${idx}" text="labels.adsr.hold" ui:inject="Button_envelope" activity="(:ee${idx})"/>
+						<label text="labels.adsr.time"/>
+						<label text="labels.adsr.convex"/>
+						<button id="eb${idx}" text="labels.adsr.break" ui:inject="Button_envelope"/>
+						<label text="labels.adsr.time" activity=":eb${idx}"/>
+						<label text="labels.adsr.convex" activity=":eb${idx}"/>
+						<void/>
+						<label text="labels.adsr.time"/>
+						<label text="labels.adsr.convex"/>
+
+						<!-- Row 3 -->
+						<knob id="ta${idx}"/>
+						<knob id="ca${idx}"/>
+						<knob id="th${idx}" scolor="(:eh${idx}) and (:ee${idx}) ? 'envelope' : 'kscale_inactive'"/>
+						<knob id="td${idx}"/>
+						<knob id="cd${idx}"/>
+						<knob id="bl${idx}" scolor="(:eb${idx}) and (:ee${idx}) ? 'envelope' : 'kscale_inactive'"/>
+						<knob id="ts${idx}" activity=":eb${idx}"/>
+						<knob id="cs${idx}" activity=":eb${idx}"/>
+						<knob id="sl${idx}"/>
+						<knob id="tr${idx}"/>
+						<knob id="cr${idx}"/>
+
+						<!-- Row 4 -->
+						<ui:with sline="true">
+							<value id="ta${idx}"/>
+							<value id="ca${idx}"/>
+							<value id="th${idx}" bright="(:eh${idx}) and (:ee${idx})? 1 : 0.75"/>
+							<value id="td${idx}"/>
+							<value id="cd${idx}"/>
+							<value id="bl${idx}" bright="(:eb${idx}) and (:ee${idx})? 1 : 0.75"/>
+							<value id="ts${idx}" activity=":eb${idx}"/>
+							<value id="cs${idx}" activity=":eb${idx}"/>
+							<value id="sl${idx}"/>
+							<value id="tr${idx}"/>
+							<value id="cr${idx}"/>
+						</ui:with>
+					</ui:with>
+				</ui:with>
+			</grid>
+
 			<!-- loop -->
 			<grid rows="3" cols="7" bg.color="bg" hspacing="2">
-				<ui:with bright="(:lo[ssel] igt 0) ? 1 : 0.75" bg.bright="(:lo[ssel] igt 0) ? 1.0 : :const_bg_darken" scolor="(:lo[ssel] igt 0) ? 'loop' : 'kscale_inactive'">
+				<ui:with bright="(:lo${idx} igt 0) ? 1 : 0.75" bg.bright="(:lo${idx} igt 0) ? 1.0 : :const_bg_darken" scolor="(:lo${idx} igt 0) ? 'loop' : 'kscale_inactive'">
 					<ui:with width.min="50">
 						<cell rows="3">
 							<vbox bg.color="bg">
-								<button id="lo[ssel]" ui:inject="Button_loop" text="labels.sedit.loop" width.min="118" pad.t="8" pad.b="4" bg.color="bg_schema" pad.h="6"/>
-								<combo id="lm[ssel]" fill="false" width.min="118" pad.b="4" bg.color="bg_schema" pad.h="6"/>
-								<combo id="lx[ssel]" fill="false" width.min="118" pad.b="8" bg.color="bg_schema" pad.h="6"/>
+								<button id="lo${idx}" ui:inject="Button_loop" text="labels.sedit.loop" width.min="118" pad.t="8" pad.b="4" bg.color="bg_schema" pad.h="6"/>
+								<combo id="lm${idx}" fill="false" width.min="118" pad.b="4" bg.color="bg_schema" pad.h="6"/>
+								<combo id="lx${idx}" fill="false" width.min="118" pad.b="8" bg.color="bg_schema" pad.h="6"/>
 							</vbox>
 						</cell>
 						<cell rows="3" hreduce="true">
@@ -312,14 +418,14 @@
 					</ui:with>
 
 					<ui:with size="20" bg.color="bg_schema" pad="6" pad.t="0">
-						<knob id="lb[ssel]" max=":al[ssel]"/>
-						<knob id="le[ssel]" max=":al[ssel]"/>
-						<knob id="ll[ssel]"/>
+						<knob id="lb${idx}" max=":al${idx}"/>
+						<knob id="le${idx}" max=":al${idx}"/>
+						<knob id="ll${idx}"/>
 					</ui:with>
 
-					<value id="lb[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="le[ssel]" bg.color="bg_schema" pad.b="6"/>
-					<value id="ll[ssel]" bg.color="bg_schema" pad.b="6"/>
+					<value id="lb${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="le${idx}" bg.color="bg_schema" pad.b="6"/>
+					<value id="ll${idx}" bg.color="bg_schema" pad.b="6"/>
 				</ui:with>
 			</grid>
 		</tabs>
@@ -391,7 +497,7 @@
 						<cell rows="11">
 							<vsep/>
 						</cell>
-						<ui:with bg.color="bg_schema">
+						<ui:with bg.color="bg_schema" activity=":fs_${i} ieq 0">
 							<label text="${:i+1}"/>
 							<button id="on_${i}" width="32" height="12" ui:inject="Button_yellow" led="true" padding="6"/>
 							<knob id="vl_${i}" size="20" scolor="velocity"/>
@@ -403,14 +509,8 @@
 							<value id="pl_${i}" detailed="false" pad.b="6"/>
 							<knob id="pr_${i}" size="20" balance="0.5" scolor="balance_r"/>
 							<value id="pr_${i}" detailed="false" pad.b="6"/>
-							<button id="ls_${i}"
-								font.name="lsp-icons" font.size="10"
-								text="icons.playback_big.play"
-								size="32" ui:inject="Button_cyan" toggle="false" />
-							<button id="lc_${i}"
-								font.name="lsp-icons" font.size="10"
-								text="icons.playback_big.stop"
-								size="32" ui:inject="Button_cyan" toggle="false" pad.b="6" />
+							<button id="ls_${i}" font.name="lsp-icons" font.size="10" text="icons.playback_big.play" size="32" ui:inject="Button_cyan" toggle="false"/>
+							<button id="lc_${i}" font.name="lsp-icons" font.size="10" text="icons.playback_big.stop" size="32" ui:inject="Button_cyan" toggle="false" pad.b="6"/>
 							<led id="no_${i}" pad.b="6" width="32" height="6"/>
 						</ui:with>
 					</ui:for>
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/src/doc/manuals/plugins/multisampler.php 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/doc/manuals/plugins/multisampler.php
--- 1.2.21-5/modules/lsp-plugins-sampler/src/doc/manuals/plugins/multisampler.php	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/doc/manuals/plugins/multisampler.php	2025-08-26 18:16:11.497733757 +0000
@@ -134,6 +134,7 @@ for path substitutions. For example, the
 </ul>
 <p><b>'Samples' section:</b></p>
 <ul>
+	<li><b>Envelope</b> - the button that enables the additional AHDBSSR (Attack, Hold, Decay, Break, Slope, Sustain, Release) envelope control over the sample.</li>
 	<li><b>Listen</b> - the button that plays the preview of the selected sample for the selected instrument.</li>
 	<li><b>Stop</b> - the button that stops the preview of the selected sample for the selected instrument.</li>
 	<li><b>Main tab</b> - the main control of the sample</li>
@@ -174,6 +175,26 @@ for path substitutions. For example, the
 		<li><b>Fade length</b> - the relative to the chunk size cross-fade length between sample chunks.</li>
 		<li><b>Chunk size</b> - the maximum chunk size to use for stretching.</li>
 	</ul>
+	<li><b>Envelope tab:</b> - control over the AHDBSSR (Attack, Hold, Decay, Break, Slope, Sustain, Release) envelope of the sample:</li>
+	<ul>
+		<li><b>Attack Time</b> - the time of the point associated with end of attack segment.</li>
+		<li><b>Attack Type</b> - the attack segment curvature type.</li>
+		<li><b>Attack Convex</b> - the attack segment convex.</li>
+		<li><b>Hold</b> - the button that enables additional hold segment.</li>
+		<li><b>Hold Time</b> - the time of the point associated with end of hold segment.</li>
+		<li><b>Decay Time</b> - the time of the point associated with end of decay segment.</li>
+		<li><b>Decay Type</b> - the decay segment curvature type.</li>
+		<li><b>Decay Convex</b> - the decay segment convex.</li>
+		<li><b>Break</b> - the button that enables additional break point and slope segment.</li>
+		<li><b>Break Level</b> - the level of the break point.</li>
+		<li><b>Slope Time</b> - the time of the point associated with end of slope segment.</li>
+		<li><b>Slope Type</b> - the slope segment curvature type.</li>
+		<li><b>Slope Convex</b> - the slope segment convex.</li>
+		<li><b>Sustain</b> - the level of the sustain segment.</li>
+		<li><b>Release Time</b> - the time of the point associated with start of release segment.</li>
+		<li><b>Release Type</b> - the release segment curvature type.</li>
+		<li><b>Release Convex</b> - the release segment convex.</li>
+	</ul>
 	<li><b>Loop tab:</b> - control over loop over the sample</li>
 	<ul>
 		<li><b>Loop button</b> - enables the loop feature.</li>
@@ -207,7 +228,7 @@ for path substitutions. For example, the
 	<li><b>Pan Right</b> - the panorama of the right audio channel of the corresponding sample.</li>
 	<li><b>Listen</b> - the button that plays the preview of the corresponding sample.</li>
 	<li><b>Stop</b> - the button that stops the preview of the corresponding sample.</li>
-	<li><b>Note on</b> - indicates that the playback event of the correponding sample has triggered.</li>
+	<li><b>Note on</b> - indicates that the playback event of the corresponding sample has triggered.</li>
 </ul>
 <p><b>'Audio channel' section:</b></p>
 <ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/src/doc/manuals/plugins/sampler.php 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/doc/manuals/plugins/sampler.php
--- 1.2.21-5/modules/lsp-plugins-sampler/src/doc/manuals/plugins/sampler.php	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/doc/manuals/plugins/sampler.php	2025-08-26 18:16:11.497733757 +0000
@@ -29,8 +29,9 @@ There are up to eight samples available
 </ul>
 <p><b>'Samples' section:</b></p>
 <ul>
-	<li><b>Listen</b> - the button that plays the preivew of the selected sample.</li>
-	<li><b>Stop</b> - the button that stops the preivew of the selected sample.</li>
+	<li><b>Envelope</b> - the button that enables the additional AHDBSSR (Attack, Hold, Decay, Break, Slope, Sustain, Release) envelope control over the sample.</li>
+	<li><b>Listen</b> - the button that plays the preview of the selected sample.</li>
+	<li><b>Stop</b> - the button that stops the preview of the selected sample.</li>
 	<li><b>Main tab</b> - the main control of the sample</li>
 	<ul>
 		<li><b>Reverse</b> - apply reverse to the sample at different stages:</li>
@@ -69,6 +70,26 @@ There are up to eight samples available
 		<li><b>Fade length</b> - the relative to the chunk size cross-fade length between sample chunks.</li>
 		<li><b>Chunk size</b> - the maximum chunk size to use for stretching.</li>
 	</ul>
+	<li><b>Envelope tab:</b> - control over the AHDBSSR (Attack, Hold, Decay, Break, Slope, Sustain, Release) envelope of the sample:</li>
+	<ul>
+		<li><b>Attack Time</b> - the time of the point associated with end of attack segment.</li>
+		<li><b>Attack Type</b> - the attack segment curvature type.</li>
+		<li><b>Attack Convex</b> - the attack segment convex.</li>
+		<li><b>Hold</b> - the button that enables additional hold segment.</li>
+		<li><b>Hold Time</b> - the time of the point associated with end of hold segment.</li>
+		<li><b>Decay Time</b> - the time of the point associated with end of decay segment.</li>
+		<li><b>Decay Type</b> - the decay segment curvature type.</li>
+		<li><b>Decay Convex</b> - the decay segment convex.</li>
+		<li><b>Break</b> - the button that enables additional break point and slope segment.</li>
+		<li><b>Break Level</b> - the level of the break point.</li>
+		<li><b>Slope Time</b> - the time of the point associated with end of slope segment.</li>
+		<li><b>Slope Type</b> - the slope segment curvature type.</li>
+		<li><b>Slope Convex</b> - the slope segment convex.</li>
+		<li><b>Sustain</b> - the level of the sustain segment.</li>
+		<li><b>Release Time</b> - the time of the point associated with start of release segment.</li>
+		<li><b>Release Type</b> - the release segment curvature type.</li>
+		<li><b>Release Convex</b> - the release segment convex.</li>
+	</ul>
 	<li><b>Loop tab:</b> - control over loop over the sample</li>
 	<ul>
 		<li><b>Loop button</b> - enables the loop feature.</li>
@@ -106,7 +127,7 @@ There are up to eight samples available
 	<?php } ?>
 	<li><b>Listen</b> - the button that plays the preview of the corresponding sample.</li>
 	<li><b>Stop</b> - the button that stops the preview of the corresponding sample.</li>
-	<li><b>Note on</b> - indicates that the playback event of the correponding sample has triggered.</li>
+	<li><b>Note on</b> - indicates that the playback event of the corresponding sample has triggered.</li>
 </ul>
 <p><b>'Audio channel' section:</b></p>
 <ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/src/main/meta/sampler.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/main/meta/sampler.cpp
--- 1.2.21-5/modules/lsp-plugins-sampler/src/main/meta/sampler.cpp	2025-03-01 12:43:19.960509321 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/main/meta/sampler.cpp	2025-08-26 18:16:11.497733757 +0000
@@ -26,7 +26,7 @@
 
 #define LSP_PLUGINS_SAMPLER_VERSION_MAJOR                   1
 #define LSP_PLUGINS_SAMPLER_VERSION_MINOR                   0
-#define LSP_PLUGINS_SAMPLER_VERSION_MICRO                   28
+#define LSP_PLUGINS_SAMPLER_VERSION_MICRO                   30
 
 #define LSP_PLUGINS_SAMPLER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -174,11 +174,12 @@ namespace lsp
             { "Main",           "sampler.edit.main"      },
             { "Pitch",          "sampler.edit.pitch"     },
             { "Stretch",        "sampler.edit.stretch"   },
+            { "Envelope",       "sampler.edit.envelope"  },
             { "Loop",           "sampler.edit.loop"      },
             { NULL, NULL }
         };
 
-        const port_item_t sampler_midi_channels[] =
+        static const port_item_t sampler_midi_channels[] =
         {
             { "01",             "sampler.midi_channels.1" },
             { "02",             "sampler.midi_channels.2" },
@@ -200,6 +201,17 @@ namespace lsp
             { NULL,             NULL }
         };
 
+        static const port_item_t sampler_envelope_types[] =
+        {
+            { "Off",            "adsr.type.off"             },
+            { "VLines",         "adsr.type.vline"           },
+            { "DLines",         "adsr.type.dline"           },
+            { "Cubic",          "adsr.type.cubic"           },
+            { "Quad",           "adsr.type.quad"            },
+            { "Exp",            "adsr.type.exp"             },
+            { NULL,             NULL }
+        };
+
         #define S_DO_GROUP_PORTS(i) \
             STEREO_PORT_GROUP_PORTS(dout_ ## i, "dol_" #i, "dor_" #i)
 
@@ -207,114 +219,129 @@ namespace lsp
             { "direct_out_" #i, "Direct Output " #i,    GRP_STEREO,     PGF_OUT,    dout_ ## i ##_ports      }
 
         #define S_FILE_GAIN_MONO \
-            AMP_GAIN10("mx", "Sample mix gain", 1.0f)
+            AMP_GAIN10("mx", "Sample mix gain", NULL, 1.0f)
         #define S_FILE_GAIN_STEREO \
-            PAN_CTL("pl", "Sample left channel panorama", -100.0f), \
-            PAN_CTL("pr", "Sample right channel panorama", 100.0f)
+            PAN_CTL("pl", "Sample left channel panorama", NULL, -100.0f), \
+            PAN_CTL("pr", "Sample right channel panorama", NULL, 100.0f)
 
         #define S_PORTS_GLOBAL      \
             BYPASS,                 \
-            TRIGGER("mute", "Forced mute"), \
-            SWITCH("muting", "Mute on stop", 1.0f), \
-            SWITCH("noff", "Note-off handling", 0.0f), \
-            CONTROL("fout", "Note-off fadeout", U_MSEC, sampler_metadata::FADEOUT), \
+            TRIGGER("mute", "Forced mute", "Mute"), \
+            SWITCH("muting", "Mute on stop", "Muting", 1.0f), \
+            SWITCH("noff", "Note-off handling", "Note off", 0.0f), \
+            CONTROL("fout", "Note-off fadeout", "Note fade out", U_MSEC, sampler_metadata::FADEOUT), \
             DRY_GAIN(1.0f),         \
             WET_GAIN(1.0f),         \
             DRYWET(100.0f),         \
             OUT_GAIN, \
-            COMBO("sets", "Sample Editor Tab Selection", 0, sampler_sample_editor_tabs)
+            COMBO("sets", "Sample Editor Tab Selection", "Tab selector", 0, sampler_sample_editor_tabs)
 
         #define S_DO_CONTROL \
-            SWITCH("do_gain", "Apply gain to direct-out", 1.0f), \
-            SWITCH("do_pan", "Apply panning to direct-out", 1.0f)
+            SWITCH("do_gain", "Apply gain to direct-out", "DOut gain on", 1.0f), \
+            SWITCH("do_pan", "Apply panning to direct-out", "DOut pan on", 1.0f)
 
         #define S_SAMPLE_FILE(gain)        \
             PATH("sf", "Sample file"), \
-            CONTROL("pi", "Sample pitch", U_SEMITONES, sampler_metadata::SAMPLE_PITCH), \
-            SWITCH("so", "Sample stretch enabled", 0.0f), \
-            CONTROL("st", "Sample relative stretch time", U_MSEC, sampler_metadata::SAMPLE_STRETCH), \
-            CONTROL("ss", "Sample stretch region start", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
-            CONTROL("se", "Sample stretch region end", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
-            CONTROL("sc", "Sample stretch chunk", U_MSEC, sampler_metadata::SAMPLE_STRETCH_CHUNK), \
-            CONTROL("sx", "Sample stretch fade", U_PERCENT, sampler_metadata::SAMPLE_STRETCH_FADE), \
-            COMBO("xt", "Sample stretch crossfade type", 1, sampler_crossfade_type), \
-            SWITCH("lo", "Sample loop enabled", 0.0f), \
-            COMBO("lm", "Sample loop mode", 0, sampler_loop_mode), \
-            CONTROL("lb", "Sample loop region start", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
-            CONTROL("le", "Sample loop region end", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
-            CONTROL("ll", "Sample loop fade", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
-            COMBO("lx", "Sample loop crossfade type", 1, sampler_crossfade_type), \
-            CONTROL("hc", "Sample head cut", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
-            CONTROL("tc", "Sample tail cut", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
-            CONTROL("fi", "Sample fade in", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
-            CONTROL("fo", "Sample fade out", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
-            AMP_GAIN10("mk", "Sample makeup gain", 1.0f), \
-            { "vl", "Sample velocity max",  U_PERCENT, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_LOWERING, 0.0f, 100.0f, 0.0f, 0.05, NULL }, \
-            { "pd", "Sample pre-delay",  U_MSEC, R_CONTROL, F_LOWER | F_UPPER | F_STEP, \
-                    sampler_metadata::PREDELAY_MIN, sampler_metadata::PREDELAY_MAX, 0, sampler_metadata::PREDELAY_STEP, NULL }, \
-            SWITCH("on", "Sample enabled", 1.0f), \
-            TRIGGER("ls", "Sample listen preview"), \
-            TRIGGER("lc", "Sample stop listen preview"), \
-            SWITCH("rr", "Sample pre-reverse", 0.0f), \
-            SWITCH("rs", "Sample post-reverse", 0.0f), \
-            SWITCH("pc", "Sample auto-compensate", 0.0f), \
-            CONTROL("xx", "Sample auto-compensate fade", U_PERCENT, sampler_metadata::SAMPLE_COMPENSATE_FADE), \
-            CONTROL("cc", "Sample auto-compensate stretch chunk", U_MSEC, sampler_metadata::SAMPLE_COMPENSATE_CHUNK), \
-            COMBO("xc", "Sample auto-compensate crossfade type", 1, sampler_crossfade_type), \
+            CONTROL("pi", "Sample pitch", NULL, U_SEMITONES, sampler_metadata::SAMPLE_PITCH), \
+            SWITCH("so", "Sample stretch enabled", NULL, 0.0f), \
+            CONTROL("st", "Sample relative stretch time", NULL, U_MSEC, sampler_metadata::SAMPLE_STRETCH), \
+            CONTROL("ss", "Sample stretch region start", NULL, U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            CONTROL("se", "Sample stretch region end", NULL, U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            CONTROL("sc", "Sample stretch chunk", NULL, U_MSEC, sampler_metadata::SAMPLE_STRETCH_CHUNK), \
+            CONTROL("sx", "Sample stretch fade", NULL, U_PERCENT, sampler_metadata::SAMPLE_STRETCH_FADE), \
+            COMBO("xt", "Sample stretch crossfade type", NULL, 1, sampler_crossfade_type), \
+            SWITCH("lo", "Sample loop enabled", NULL, 0.0f), \
+            COMBO("lm", "Sample loop mode", NULL, 0, sampler_loop_mode), \
+            CONTROL("lb", "Sample loop region start", NULL, U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            CONTROL("le", "Sample loop region end", NULL, U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            CONTROL("ll", "Sample loop fade", NULL, U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            COMBO("lx", "Sample loop crossfade type", NULL, 1, sampler_crossfade_type), \
+            CONTROL("hc", "Sample head cut", NULL, U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            CONTROL("tc", "Sample tail cut", NULL, U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            CONTROL("fi", "Sample fade in", NULL, U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            CONTROL("fo", "Sample fade out", NULL, U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            AMP_GAIN10("mk", "Sample makeup gain", NULL, 1.0f), \
+            SWITCH("ee", "Sample envelope enable", NULL, 0.0f), \
+            SWITCH("eh", "Sample envelope hold enable", NULL, 0.0f), \
+            SWITCH("eb", "Sample envelope break enable", NULL, 0.0f), \
+            PERCENTS("ta", "Sample attack time", NULL, 5.0f, 0.01f), \
+            PERCENTS("th", "Sample hold time", NULL, 10.0f, 0.01f), \
+            PERCENTS("td", "Sample decay time", NULL, 30.0f, 0.01f), \
+            PERCENTS("ts", "Sample slope time", NULL, 50.0f, 0.01f), \
+            PERCENTS("tr", "Sample release time", NULL, 80.0f, 0.01f), \
+            PERCENTS("bl", "Sample break level", NULL, 40.0f, 0.05f), \
+            PERCENTS("sl", "Sample sustain level", NULL, 60.0f, 0.05f), \
+            PERCENTS("ca", "Sample attack curvature", NULL, 50.0f, 0.01f), \
+            PERCENTS("cd", "Sample decay curvature", NULL, 50.0f, 0.01f), \
+            PERCENTS("cs", "Sample slope curvature", NULL, 50.0f, 0.01f), \
+            PERCENTS("cr", "Sample release curvature", NULL, 50.0f, 0.01f), \
+            COMBO("ea", "Sample attack envelope", NULL, 5, sampler_envelope_types), \
+            COMBO("ed", "Sample decay envelope", NULL, 5, sampler_envelope_types), \
+            COMBO("es", "Sample slope envelope", NULL, 5, sampler_envelope_types), \
+            COMBO("er", "Sample release envelope", NULL, 5, sampler_envelope_types), \
+            LOW_CONTROL_ALL("vl", "Sample velocity max", NULL, U_PERCENT, 0.0f, 100.0f, 0.0f, 0.05), \
+            CONTROL("pd", "Sample pre-delay", NULL, U_MSEC, sampler_metadata::PREDELAY), \
+            SWITCH("on", "Sample enabled", NULL, 1.0f), \
+            TRIGGER("ls", "Sample listen preview", NULL), \
+            TRIGGER("lc", "Sample stop listen preview", NULL), \
+            SWITCH("rr", "Sample pre-reverse", NULL, 0.0f), \
+            SWITCH("rs", "Sample post-reverse", NULL, 0.0f), \
+            SWITCH("pc", "Sample auto-compensate", NULL, 0.0f), \
+            CONTROL("xx", "Sample auto-compensate fade", NULL, U_PERCENT, sampler_metadata::SAMPLE_COMPENSATE_FADE), \
+            CONTROL("cc", "Sample auto-compensate stretch chunk", NULL, U_MSEC, sampler_metadata::SAMPLE_COMPENSATE_CHUNK), \
+            COMBO("xc", "Sample auto-compensate crossfade type", NULL, 1, sampler_crossfade_type), \
             gain, \
             BLINK("ac", "Sample activity"), \
             METER("pp", "Sample play position", U_MSEC, sampler_metadata::SAMPLE_PLAYBACK), \
             BLINK("no", "Sample note on event"), \
-            { "fl", "Length of loaded sample", U_MSEC, R_METER, F_LOWER | F_UPPER | F_STEP, \
-                    sampler_metadata::SAMPLE_LENGTH_MIN, sampler_metadata::SAMPLE_LENGTH_MAX, 0, sampler_metadata::SAMPLE_LENGTH_STEP, NULL }, \
-            { "al", "Actual length of loaded sample", U_MSEC, R_METER, F_LOWER | F_UPPER | F_STEP, \
-                    sampler_metadata::SAMPLE_LENGTH_MIN, sampler_metadata::SAMPLE_LENGTH_MAX, 0, sampler_metadata::SAMPLE_LENGTH_STEP, NULL }, \
+            METER("fl", "Length of loaded sample", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
+            METER("al", "Actual length of loaded sample", U_MSEC, sampler_metadata::SAMPLE_LENGTH), \
             STATUS("fs", "Sample load status"), \
             MESH("fd", "Sample file contents", sampler_metadata::TRACKS_MAX, sampler_metadata::MESH_SIZE)
 
         #define S_INSTRUMENT(sample)    \
-            COMBO("chan", "Channel", sampler_metadata::CHANNEL_DFL, sampler_midi_channels), \
-            COMBO("note", "Note", sampler_metadata::NOTE_DFL, notes), \
-            COMBO("oct", "Octave", sampler_metadata::OCTAVE_DFL, octaves), \
-            { "mn", "MIDI Note #", U_NONE, R_METER, F_LOWER | F_UPPER | F_INT, 0, 127, 0, 0, NULL }, \
-            TRIGGER("trg", "Instrument listen preview"), \
-            TRIGGER("stop", "Stop instrument listen preview"), \
-            CONTROL("dyna", "Dynamics", U_PERCENT, sampler_metadata::DYNA), \
-            CONTROL("drft", "Time drifting", U_MSEC, sampler_metadata::DRIFT), \
-            SWITCH("hvel", "Velocity handling", 1.0f), \
+            COMBO("chan", "Channel", "Channel", sampler_metadata::CHANNEL_DFL, sampler_midi_channels), \
+            COMBO("note", "Note", "Note", sampler_metadata::NOTE_DFL, notes), \
+            COMBO("oct", "Octave", "Octave", sampler_metadata::OCTAVE_DFL, octaves), \
+            INT_METER_ALL("mn", "MIDI Note #", U_NONE, 0, 127, 0, 1), \
+            TRIGGER("trg", "Instrument listen preview", "Inst play"), \
+            TRIGGER("stop", "Stop instrument listen preview", "Inst stop"), \
+            CONTROL("dyna", "Dynamics", "Dynamics", U_PERCENT, sampler_metadata::DYNA), \
+            CONTROL("drft", "Time drifting", "Drifting", U_MSEC, sampler_metadata::DRIFT), \
+            SWITCH("hvel", "Velocity handling", "Velocity on", 1.0f), \
             PORT_SET("ssel", "Sample selector", sampler_sample_selectors, sample)
 
         #define S_MG_INSTRUMENT(sample)    \
-            COMBO("chan", "Channel", sampler_metadata::CHANNEL_DFL, sampler_midi_channels), \
-            COMBO("note", "Note", sampler_metadata::NOTE_DFL, notes), \
-            COMBO("oct", "Octave", sampler_metadata::OCTAVE_DFL, octaves), \
-            COMBO("mgrp", "Mute Group", 0, mute_groups), \
-            SWITCH("mtg", "Mute on stop", 0.0f), \
-            SWITCH("nto", "Note-off handling", 0.0f), \
-            { "mn", "MIDI Note #", U_NONE, R_METER, F_LOWER | F_UPPER | F_INT, 0, 127, 0, 0, NULL }, \
-            TRIGGER("trg", "Instrument listen preview"), \
-            TRIGGER("stop", "Stop instrument listen preview"), \
-            CONTROL("dyna", "Dynamics", U_PERCENT, sampler_metadata::DYNA), \
-            CONTROL("drft", "Time drifting", U_MSEC, sampler_metadata::DRIFT), \
-            SWITCH("hvel", "Velocity handling", 1.0f), \
+            COMBO("chan", "Channel", NULL, sampler_metadata::CHANNEL_DFL, sampler_midi_channels), \
+            COMBO("note", "Note", NULL, sampler_metadata::NOTE_DFL, notes), \
+            COMBO("oct", "Octave", NULL, sampler_metadata::OCTAVE_DFL, octaves), \
+            COMBO("mgrp", "Mute Group", NULL, 0, mute_groups), \
+            SWITCH("mtg", "Mute on stop", NULL, 0.0f), \
+            SWITCH("nto", "Note-off handling", NULL, 0.0f), \
+            INT_METER_ALL("mn", "MIDI Note #", U_NONE, 0, 127, 0, 1), \
+            TRIGGER("trg", "Instrument listen preview", NULL), \
+            TRIGGER("stop", "Stop instrument listen preview", NULL), \
+            CONTROL("dyna", "Dynamics", NULL, U_PERCENT, sampler_metadata::DYNA), \
+            CONTROL("drft", "Time drifting", NULL, U_MSEC, sampler_metadata::DRIFT), \
+            SWITCH("hvel", "Velocity handling", NULL, 1.0f), \
             PORT_SET("ssel", "Sample selector", sampler_sample_selectors, sample)
 
         #define S_AREA_SELECTOR(list)     \
-            COMBO("msel", "Area selector", 0, list)
+            COMBO("msel", "Area selector", "Area", 0, list)
 
         #define S_INSTRUMENT_SELECTOR(list)     \
             PORT_SET("inst", "Instrument selector", list, sampler_multiple_ports)
 
         #define S_MIXER(id)                      \
-            SWITCH("ion_" #id, "Instrument on " #id, 1.0f), \
-            AMP_GAIN10("imix_" #id, "Instrument mix gain " #id, 1.0f), \
-            PAN_CTL("panl_" #id, "Instrument panorama left " #id, -100.0f), \
-            PAN_CTL("panr_" #id, "Instrument manorama right " #id, 100.0f), \
+            SWITCH("ion_" #id, "Instrument on " #id, "Inst on " #id, 1.0f), \
+            AMP_GAIN10("imix_" #id, "Instrument mix gain " #id, "Inst gain" #id, 1.0f), \
+            PAN_CTL("panl_" #id, "Instrument panorama left " #id, "Inst pan L " #id, -100.0f), \
+            PAN_CTL("panr_" #id, "Instrument manorama right " #id, "Inst pan R " #id, 100.0f), \
             BLINK("iact_" #id, "Instrument activity " #id)
 
         #define S_DIRECT_OUT(id)                \
             S_MIXER(id),                        \
-            SWITCH("don_" #id, "Direct output on " #id, 1.0f), \
+            SWITCH("don_" #id, "Direct output on " #id, "DOut on " #id, 1.0f), \
             AUDIO_OUTPUT("dol_" #id, "Direct output left " #id), \
             AUDIO_OUTPUT("dor_" #id, "Direct output right " #id)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/src/main/plug/sampler.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/main/plug/sampler.cpp
--- 1.2.21-5/modules/lsp-plugins-sampler/src/main/plug/sampler.cpp	2025-03-01 12:43:19.964509296 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/main/plug/sampler.cpp	2025-08-26 18:16:11.497733757 +0000
@@ -118,6 +118,8 @@ namespace lsp
             pWet            = NULL;
             pDryWet         = NULL;
             pGain           = NULL;
+            pEditMode       = NULL;
+            pInstSel        = NULL;
             pDOGain         = NULL;
             pDOPan          = NULL;
         }
@@ -236,7 +238,7 @@ namespace lsp
             BIND_PORT(pWet);
             BIND_PORT(pDryWet);
             BIND_PORT(pGain);
-            SKIP_PORT("Sample editor tab selector"); // Skip sample editor tab selector
+            BIND_PORT(pEditMode);
             if (bDryPorts)
             {
                 BIND_PORT(pDOGain);
@@ -254,7 +256,7 @@ namespace lsp
             if (nSamplers > 1)
             {
                 lsp_trace("Skipping instrument selector...");
-                SKIP_PORT("Instrument selector");
+                BIND_PORT(pInstSel);
             }
 
             // Now process each instrument
@@ -387,10 +389,12 @@ namespace lsp
         void sampler::update_settings()
         {
             // Update dry & wet parameters
-            const float dry   = (pDry != NULL)    ? pDry->value()  : 1.0f;
-            const float wet   = (pWet != NULL)    ? pWet->value()  : 1.0f;
-            const float drywet= (pDryWet != NULL) ? pDryWet->value() * 0.01f : 1.0f;
-            const float gain  = (pGain != NULL)   ? pGain->value() : 1.0f;
+            const float dry     = (pDry != NULL)    ? pDry->value()  : 1.0f;
+            const float wet     = (pWet != NULL)    ? pWet->value()  : 1.0f;
+            const float drywet  = (pDryWet != NULL) ? pDryWet->value() * 0.01f : 1.0f;
+            const float gain    = (pGain != NULL)   ? pGain->value() : 1.0f;
+            const bool env_ed   = (pEditMode != NULL) ? (int(pEditMode->value()) == 3) : false;
+            const size_t inst   = (pInstSel != NULL) ? ssize_t(pInstSel->value()) : 0;
 
             fDry        = (dry * drywet + 1.0f - drywet) * gain;
             fWet        = (wet * drywet) * gain;
@@ -471,6 +475,7 @@ namespace lsp
 
                 // Additional parameters
                 s->sSampler.set_fadeout(pFadeout->value());
+                s->sSampler.set_envelope_edit((i == inst) && (env_ed));
                 s->sSampler.update_settings();
             }
         }
@@ -850,6 +855,7 @@ namespace lsp
             v->write("pWet", pWet);
             v->write("pDryWet", pDryWet);
             v->write("pGain", pGain);
+            v->write("pEditMode", pEditMode);
             v->write("pDOGain", pDOGain);
             v->write("pDOPan", pDOPan);
         }
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/src/main/plug/sampler_kernel.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/main/plug/sampler_kernel.cpp
--- 1.2.21-5/modules/lsp-plugins-sampler/src/main/plug/sampler_kernel.cpp	2025-03-01 12:43:19.964509296 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/main/plug/sampler_kernel.cpp	2025-08-26 18:16:11.497733757 +0000
@@ -25,6 +25,7 @@
 #include <lsp-plug.in/dsp-units/units.h>
 #include <lsp-plug.in/dsp-units/misc/fade.h>
 #include <lsp-plug.in/dsp-units/sampling/PlaySettings.h>
+#include <lsp-plug.in/dsp-units/util/ADSREnvelope.h>
 #include <lsp-plug.in/dsp/dsp.h>
 #include <lsp-plug.in/shared/debug.h>
 
@@ -120,6 +121,7 @@ namespace lsp
             bBypass         = false;
             bReorder        = false;
             bHandleVelocity = true;
+            bEnvelopeEdit   = false;
             fFadeout        = 10.0f;
             fDynamics       = meta::sampler_metadata::DYNA_DFL;
             fDrift          = meta::sampler_metadata::DRIFT_DFL;
@@ -128,6 +130,7 @@ namespace lsp
             pDynamics       = NULL;
             pHandleVelocity = NULL;
             pDrift          = NULL;
+            pSampleSel      = NULL;
             pActivity       = NULL;
             pListen         = NULL;
             pStop           = NULL;
@@ -145,6 +148,11 @@ namespace lsp
             fFadeout        = length;
         }
 
+        void sampler_kernel::set_envelope_edit(bool edit)
+        {
+            bEnvelopeEdit       = edit;
+        }
+
         bool sampler_kernel::init(ipc::IExecutor *executor, size_t files, size_t channels)
         {
             // Validate parameters
@@ -195,13 +203,17 @@ namespace lsp
                 af->pOriginal               = NULL;
                 af->pProcessed              = NULL;
                 for (size_t j=0; j<meta::sampler_metadata::TRACKS_MAX; ++j)
+                {
                     af->vThumbs[j]              = NULL;
+                    af->vCutThumbs[j]           = NULL;
+                }
 
                 af->sListen.init();
                 af->sStop.init();
 
                 af->nUpdateReq              = 0;
                 af->nUpdateResp             = 0;
+                af->bEnvEdit                = false;
                 af->bSync                   = false;
                 af->fMinVelocity            = 1.0f;
                 af->fMaxVelocity            = 1.0f;
@@ -230,15 +242,35 @@ namespace lsp
                 af->nCompensateFadeType     = XFADE_DFL;
                 af->fPreDelay               = meta::sampler_metadata::PREDELAY_DFL;
                 af->fMakeup                 = 1.0f;
+                af->fEnvelopeAttackTime     = 0.0f;
+                af->fEnvelopeHoldTime       = 0.0f;
+                af->fEnvelopeDecayTime      = 0.0f;
+                af->fEnvelopeSlopeTime      = 0.0f;
+                af->fEnvelopeReleaseTime    = 0.0f;
+                af->fEnvelopeBreakLevel     = 0.0f;
+                af->fEnvelopeSustainLevel   = 0.0f;
+                af->fEnvelopeAttackCurve    = 0.0f;
+                af->fEnvelopeDecayCurve     = 0.0f;
+                af->fEnvelopeSlopeCurve     = 0.0f;
+                af->fEnvelopeReleaseCurve   = 0.0f;
+                af->nEnvelopeAttackType     = 0.0f;
+                af->nEnvelopeDecayType      = 0.0f;
+                af->nEnvelopeSlopeType      = 0.0f;
+                af->nEnvelopeReleaseType    = 0.0f;
+
                 for (size_t j=0; j<meta::sampler_metadata::TRACKS_MAX; ++j)
                     af->fGains[j]               = 0;
                 af->fLength                 = 0.0f;
                 af->fActualLength           = 0.0f;
                 af->nStatus                 = STATUS_UNSPECIFIED;
                 af->bOn                     = true;
+                af->bEnvelopeOn             = false;
+                af->bEnvelopeHoldOn         = false;
+                af->bEnvelopeBreakOn        = false;
 
                 af->pFile                   = NULL;
                 af->pPitch                  = NULL;
+
                 af->pStretchOn              = NULL;
                 af->pStretch                = NULL;
                 af->pStretchStart           = NULL;
@@ -246,18 +278,40 @@ namespace lsp
                 af->pStretchChunk           = NULL;
                 af->pStretchFade            = NULL;
                 af->pStretchFadeType        = NULL;
+
                 af->pLoopOn                 = NULL;
                 af->pLoopMode               = NULL;
                 af->pLoopStart              = NULL;
                 af->pLoopEnd                = NULL;
                 af->pLoopFade               = NULL;
                 af->pLoopFadeType           = NULL;
+
                 af->pHeadCut                = NULL;
                 af->pTailCut                = NULL;
                 af->pFadeIn                 = NULL;
                 af->pFadeOut                = NULL;
                 af->pVelocity               = NULL;
                 af->pMakeup                 = NULL;
+
+                af->pEnvelopeOn             = NULL;
+                af->pEnvelopeHoldOn         = NULL;
+                af->pEnvelopeBreakOn        = NULL;
+                af->pEnvelopeAttackTime     = NULL;
+                af->pEnvelopeHoldTime       = NULL;
+                af->pEnvelopeDecayTime      = NULL;
+                af->pEnvelopeSlopeTime      = NULL;
+                af->pEnvelopeReleaseTime    = NULL;
+                af->pEnvelopeBreakLevel     = NULL;
+                af->pEnvelopeSustainLevel   = NULL;
+                af->pEnvelopeAttackCurve    = NULL;
+                af->pEnvelopeDecayCurve     = NULL;
+                af->pEnvelopeSlopeCurve     = NULL;
+                af->pEnvelopeReleaseCurve   = NULL;
+                af->pEnvelopeAttackType     = NULL;
+                af->pEnvelopeDecayType      = NULL;
+                af->pEnvelopeSlopeType      = NULL;
+                af->pEnvelopeReleaseType    = NULL;
+
                 af->pPreDelay               = NULL;
                 af->pOn                     = NULL;
                 af->pListen                 = NULL;
@@ -344,7 +398,7 @@ namespace lsp
             }
 
             lsp_trace("Skipping sample selector port...");
-            SKIP_PORT("Sample selector");
+            BIND_PORT(pSampleSel);
 
             // Iterate each file
             for (size_t i=0; i<nFiles; ++i)
@@ -355,6 +409,7 @@ namespace lsp
                 // Allocate files
                 BIND_PORT(af->pFile);
                 BIND_PORT(af->pPitch);
+
                 BIND_PORT(af->pStretchOn);
                 BIND_PORT(af->pStretch);
                 BIND_PORT(af->pStretchStart);
@@ -362,17 +417,39 @@ namespace lsp
                 BIND_PORT(af->pStretchChunk);
                 BIND_PORT(af->pStretchFade);
                 BIND_PORT(af->pStretchFadeType);
+
                 BIND_PORT(af->pLoopOn);
                 BIND_PORT(af->pLoopMode);
                 BIND_PORT(af->pLoopStart);
                 BIND_PORT(af->pLoopEnd);
                 BIND_PORT(af->pLoopFade);
                 BIND_PORT(af->pLoopFadeType);
+
                 BIND_PORT(af->pHeadCut);
                 BIND_PORT(af->pTailCut);
                 BIND_PORT(af->pFadeIn);
                 BIND_PORT(af->pFadeOut);
                 BIND_PORT(af->pMakeup);
+
+                BIND_PORT(af->pEnvelopeOn);
+                BIND_PORT(af->pEnvelopeHoldOn);
+                BIND_PORT(af->pEnvelopeBreakOn);
+                BIND_PORT(af->pEnvelopeAttackTime);
+                BIND_PORT(af->pEnvelopeHoldTime);
+                BIND_PORT(af->pEnvelopeDecayTime);
+                BIND_PORT(af->pEnvelopeSlopeTime);
+                BIND_PORT(af->pEnvelopeReleaseTime);
+                BIND_PORT(af->pEnvelopeBreakLevel);
+                BIND_PORT(af->pEnvelopeSustainLevel);
+                BIND_PORT(af->pEnvelopeAttackCurve);
+                BIND_PORT(af->pEnvelopeDecayCurve);
+                BIND_PORT(af->pEnvelopeSlopeCurve);
+                BIND_PORT(af->pEnvelopeReleaseCurve);
+                BIND_PORT(af->pEnvelopeAttackType);
+                BIND_PORT(af->pEnvelopeDecayType);
+                BIND_PORT(af->pEnvelopeSlopeType);
+                BIND_PORT(af->pEnvelopeReleaseType);
+
                 BIND_PORT(af->pVelocity);
                 BIND_PORT(af->pPreDelay);
                 BIND_PORT(af->pOn);
@@ -515,6 +592,7 @@ namespace lsp
             pDynamics       = NULL;
             pHandleVelocity = NULL;
             pDrift          = NULL;
+            pSampleSel      = NULL;
         }
 
         void sampler_kernel::destroy()
@@ -525,7 +603,7 @@ namespace lsp
         template <class T>
         void sampler_kernel::commit_value(uint32_t & counter, T & field, plug::IPort *port)
         {
-            const T temp = port->value();
+            const T temp = T(port->value());
             if (temp != field)
             {
                 field       = temp;
@@ -574,6 +652,8 @@ namespace lsp
             if (pStop != NULL)
                 sStop.submit(pStop->value());
 
+            const size_t active_file    = pSampleSel->value();
+
             // Update note and octave
 //            lsp_trace("Initializing samples...");
 
@@ -662,6 +742,43 @@ namespace lsp
 
                 if ((loop_update > 0) || (upd_req != af->nUpdateReq))
                     cancel_sample(af, 0);
+
+                // Update envelope settings
+                commit_value(af->nUpdateReq, af->bEnvelopeOn, af->pEnvelopeOn);
+                if (af->bEnvelopeOn)
+                {
+                    commit_value(af->nUpdateReq, af->bEnvelopeOn, af->pEnvelopeOn);
+                    commit_value(af->nUpdateReq, af->bEnvelopeHoldOn, af->pEnvelopeHoldOn);
+                    commit_value(af->nUpdateReq, af->bEnvelopeBreakOn, af->pEnvelopeBreakOn);
+                    commit_value(af->nUpdateReq, af->fEnvelopeAttackTime, af->pEnvelopeAttackTime);
+                    commit_value(af->nUpdateReq, af->fEnvelopeDecayTime, af->pEnvelopeDecayTime);
+                    commit_value(af->nUpdateReq, af->fEnvelopeReleaseTime, af->pEnvelopeReleaseTime);
+                    commit_value(af->nUpdateReq, af->fEnvelopeSustainLevel, af->pEnvelopeSustainLevel);
+                    commit_value(af->nUpdateReq, af->fEnvelopeAttackCurve, af->pEnvelopeAttackCurve);
+                    commit_value(af->nUpdateReq, af->fEnvelopeDecayCurve, af->pEnvelopeDecayCurve);
+                    commit_value(af->nUpdateReq, af->fEnvelopeReleaseCurve, af->pEnvelopeReleaseCurve);
+                    commit_value(af->nUpdateReq, af->nEnvelopeAttackType, af->pEnvelopeAttackType);
+                    commit_value(af->nUpdateReq, af->nEnvelopeDecayType, af->pEnvelopeDecayType);
+                    commit_value(af->nUpdateReq, af->nEnvelopeReleaseType, af->pEnvelopeReleaseType);
+
+                    if (af->bEnvelopeHoldOn)
+                        commit_value(af->nUpdateReq, af->fEnvelopeHoldTime, af->pEnvelopeHoldTime);
+                    if (af->bEnvelopeBreakOn)
+                    {
+                        commit_value(af->nUpdateReq, af->fEnvelopeBreakLevel, af->pEnvelopeBreakLevel);
+                        commit_value(af->nUpdateReq, af->fEnvelopeSlopeTime, af->pEnvelopeSlopeTime);
+                        commit_value(af->nUpdateReq, af->fEnvelopeSlopeCurve, af->pEnvelopeSlopeCurve);
+                        commit_value(af->nUpdateReq, af->nEnvelopeSlopeType, af->pEnvelopeSlopeType);
+                    }
+                }
+
+                // Update envelope view
+                const bool env_edit = (i == active_file) && bEnvelopeEdit;
+                if (env_edit != af->bEnvEdit)
+                {
+                    af->bEnvEdit        = env_edit;
+                    af->bSync           = true;
+                }
             }
 
             // Get humanisation parameters
@@ -700,10 +817,12 @@ namespace lsp
 
             // Destroy pointer to thumbnails
             if (af->vThumbs[0])
-            {
                 free(af->vThumbs[0]);
-                for (size_t i=0; i<meta::sampler_metadata::TRACKS_MAX; ++i)
-                    af->vThumbs[i]              = NULL;
+
+            for (size_t i=0; i<meta::sampler_metadata::TRACKS_MAX; ++i)
+            {
+                af->vThumbs[i]              = NULL;
+                af->vCutThumbs[i]           = NULL;
             }
         }
 
@@ -750,14 +869,15 @@ namespace lsp
             }
 
             // Initialize thumbnails
-            float *thumbs           = static_cast<float *>(malloc(sizeof(float) * channels * meta::sampler_metadata::MESH_SIZE));
+            float *thumbs           = static_cast<float *>(malloc(
+                sizeof(float) * channels * meta::sampler_metadata::MESH_SIZE * 2));
             if (thumbs == NULL)
                 return STATUS_NO_MEM;
 
             for (size_t i=0; i<channels; ++i)
             {
-                file->vThumbs[i]        = thumbs;
-                thumbs                 += meta::sampler_metadata::MESH_SIZE;
+                file->vThumbs[i]        = advance_ptr<float>(thumbs, meta::sampler_metadata::MESH_SIZE);
+                file->vCutThumbs[i]     = advance_ptr<float>(thumbs, meta::sampler_metadata::MESH_SIZE);
             }
 
             // Commit the result
@@ -809,15 +929,6 @@ namespace lsp
                     return res;
             }
 
-            // Determine the normalizing factor
-            float abs_max           = 0.0f;
-            for (size_t i=0; i<channels; ++i)
-            {
-                // Determine the maximum amplitude
-                float a_max             = dsp::abs_max(temp.channel(i), temp.length());
-                abs_max                 = lsp_max(abs_max, a_max);
-            }
-            float norming           = (abs_max != 0.0f) ? 1.0f / abs_max : 1.0f;
             af->fLength             = dspu::samples_to_millis(nSampleRate, temp.length());
 
             // Allocate target sample
@@ -875,6 +986,13 @@ namespace lsp
             af->fActualLength   = dspu::samples_to_millis(nSampleRate, rp->nLength);
             rp->nHeadCut        = lsp_limit(dspu::millis_to_samples(nSampleRate, af->fHeadCut), 0, rp->nLength);
             rp->nTailCut        = lsp_limit(dspu::millis_to_samples(nSampleRate, af->fTailCut), 0, rp->nLength);
+            rp->nCutLength      = lsp_max(rp->nLength - rp->nTailCut - rp->nHeadCut, 0);
+
+            // Determine the normalizing factor
+            float abs_max           = 0.0f;
+            for (size_t i=0; i<channels; ++i)
+                abs_max                 = lsp_max(abs_max, dsp::abs_max(temp.channel(i), rp->nLength));
+            const float norming     = (abs_max != 0.0f) ? 1.0f / abs_max : 1.0f;
 
             // Apply the fade-in and fade-out
             ssize_t fade_in     = dspu::millis_to_samples(nSampleRate, af->fFadeIn);
@@ -887,33 +1005,101 @@ namespace lsp
                 dspu::fade_out(dst, dst, fade_out, rp->nLength - rp->nTailCut);
             }
 
+            // Determine the normalizing factor for cut sample
+            abs_max                 = 0.0f;
+            for (size_t i=0; i<channels; ++i)
+                abs_max                 = lsp_max(abs_max, dsp::abs_max(temp.channel(i, rp->nHeadCut), rp->nCutLength));
+            const float cut_norming = (abs_max != 0.0f) ? 1.0f / abs_max : 1.0f;
+
+            // Apply envelope if it is enabled
+            if ((af->bEnvelopeOn) && (rp->nCutLength > 0))
+            {
+                dspu::ADSREnvelope e;
+                e.set_attack(
+                    af->fEnvelopeAttackTime * 0.01f,
+                    af->fEnvelopeAttackCurve * 0.01f,
+                    dspu::ADSREnvelope::function_t(af->nEnvelopeAttackType));
+                e.set_hold(
+                    af->fEnvelopeHoldTime * 0.01f,
+                    af->bEnvelopeHoldOn);
+                e.set_decay(
+                    af->fEnvelopeDecayTime * 0.01f,
+                    af->fEnvelopeDecayCurve * 0.01f,
+                    dspu::ADSREnvelope::function_t(af->nEnvelopeDecayType));
+                e.set_break(
+                    af->fEnvelopeBreakLevel * 0.01f,
+                    af->bEnvelopeBreakOn);
+                e.set_slope(
+                    af->fEnvelopeSlopeTime * 0.01f,
+                    af->fEnvelopeSlopeCurve * 0.01f,
+                    dspu::ADSREnvelope::function_t(af->nEnvelopeSlopeType));
+                e.set_sustain_level(af->fEnvelopeSustainLevel * 0.01f);
+                e.set_release(
+                    af->fEnvelopeReleaseTime * 0.01f,
+                    af->fEnvelopeReleaseCurve * 0.01f,
+                    dspu::ADSREnvelope::function_t(af->nEnvelopeReleaseType));
+
+                const float step    = 1.0f / rp->nCutLength;
+                for (size_t j=0; j<channels; ++j)
+                {
+                    float *dst          = temp.channel(j, rp->nHeadCut);
+                    e.generate_mul(dst, 0.0f, step, rp->nCutLength);
+                }
+            }
+
             // Render the thumbnails
-            for (size_t j=0; j<channels; ++j)
             {
-                const float *src    = temp.channel(j);
-                float *dst          = af->vThumbs[j];
-                size_t len          = temp.length();
-
-                for (size_t k=0; k<meta::sampler_metadata::MESH_SIZE; ++k)
-                {
-                    size_t first    = (k * len) / meta::sampler_metadata::MESH_SIZE;
-                    size_t last     = ((k + 1) * len) / meta::sampler_metadata::MESH_SIZE;
-                    if (first < last)
-                        dst[k]          = dsp::abs_max(&src[first], last - first);
-                    else if (first < len)
-                        dst[k]          = fabs(src[first]);
-                    else
-                        dst[k]          = 0.0f;
-                }
-
-                // Normalize graph if possible
-                if (norming != 1.0f)
-                    dsp::mul_k2(dst, norming, meta::sampler_metadata::MESH_SIZE);
+                const float scaling     = float(rp->nLength) / meta::sampler_metadata::MESH_SIZE;
+                for (size_t j=0; j<channels; ++j)
+                {
+                    const float *src    = temp.channel(j);
+                    float *dst          = af->vThumbs[j];
+
+                    for (size_t k=0; k<meta::sampler_metadata::MESH_SIZE; ++k)
+                    {
+                        const ssize_t first = k * scaling;
+                        const ssize_t last  = (k + 1) * scaling;
+                        if (first < last)
+                            dst[k]              = dsp::abs_max(&src[first], last - first);
+                        else if (first < rp->nLength)
+                            dst[k]              = fabs(src[first]);
+                        else
+                            dst[k]              = 0.0f;
+                    }
+
+                    // Normalize graph if possible
+                    if (norming != 1.0f)
+                        dsp::mul_k2(dst, norming, meta::sampler_metadata::MESH_SIZE);
+                }
             }
 
-            // Perform the head and tail cut operations
-            rp->nCutLength      = lsp_max(rp->nLength - rp->nTailCut - rp->nHeadCut, 0);
+            // Render the cut thumbnails
+            {
+                const float scaling     = float(rp->nCutLength) / meta::sampler_metadata::MESH_SIZE;
+                for (size_t j=0; j<channels; ++j)
+                {
+                    const float *src    = temp.channel(j, rp->nHeadCut);
+                    float *dst          = af->vCutThumbs[j];
 
+                    for (size_t k=0; k<meta::sampler_metadata::MESH_SIZE; ++k)
+                    {
+                        const ssize_t first = k * scaling;
+                        const ssize_t last  = (k + 1) * scaling;
+                        if (first < last)
+                            dst[k]              = dsp::abs_max(&src[first], last - first);
+                        else if (first < rp->nCutLength)
+                            dst[k]              = fabs(src[first]);
+                        else
+                            dst[k]              = 0.0f;
+                    }
+
+                    // Normalize graph if possible
+                    if (cut_norming != 1.0f)
+                        dsp::mul_k2(dst, cut_norming, meta::sampler_metadata::MESH_SIZE);
+                }
+            }
+
+            // Perform the head and tail cut operations
             // Initialize target sample
             if (!out->resize(channels, rp->nCutLength, rp->nCutLength))
             {
@@ -924,9 +1110,9 @@ namespace lsp
             // Apply head cut and tail cut
             for (size_t j=0; j<channels; ++j)
             {
-                const float *src    = temp.channel(j);
+                const float *src    = temp.channel(j, rp->nHeadCut);
                 float *dst          = out->channel(j);
-                dsp::copy(dst, &src[rp->nHeadCut], rp->nCutLength);
+                dsp::copy(dst, src, rp->nCutLength);
             }
 
             // Commit the new sample to the processed
@@ -1153,17 +1339,13 @@ namespace lsp
                 if (af->pFile == NULL)
                     continue;
 
-                // Do nothing if rendering is in progress
-                if (!af->pRenderer->idle())
-                    continue;
-
                 // Get path
                 plug::path_t *path = af->pFile->buffer<plug::path_t>();
                 if (path == NULL)
                     continue;
 
                 // If there is new load request and loader is idle, then wake up the loader
-                if ((path->pending()) && (af->pLoader->idle()))
+                if ((path->pending()) && (af->pLoader->idle()) && (af->pRenderer->idle()))
                 {
                     // Try to submit task
                     if (pExecutor->submit(af->pLoader))
@@ -1200,12 +1382,8 @@ namespace lsp
                 if (af->pFile == NULL)
                     continue;
 
-                // Do nothing if loader is in progress
-                if (!af->pLoader->idle())
-                    continue;
-
                 // Get path and check task state
-                if ((af->nUpdateReq != af->nUpdateResp) && (af->pRenderer->idle()))
+                if ((af->nUpdateReq != af->nUpdateResp) && (af->pRenderer->idle()) && (af->pLoader->idle()))
                 {
                     if (af->pOriginal == NULL)
                     {
@@ -1409,8 +1587,9 @@ namespace lsp
                 if ((channels > 0) && (af->vThumbs[0] != NULL))
                 {
                     // Copy thumbnails
+                    const float * const *thumbs = (af->bEnvEdit) ? af->vCutThumbs : af->vThumbs;
                     for (size_t j=0; j<channels; ++j)
-                        dsp::copy(mesh->pvData[j], af->vThumbs[j], meta::sampler_metadata::MESH_SIZE);
+                        dsp::copy(mesh->pvData[j], thumbs[j], meta::sampler_metadata::MESH_SIZE);
 
                     mesh->data(channels, meta::sampler_metadata::MESH_SIZE);
                 }
@@ -1479,6 +1658,7 @@ namespace lsp
             v->write("fMinVelocity", f->fMinVelocity);
             v->write("fMaxVelocity", f->fMaxVelocity);
             v->write("fPitch", f->fPitch);
+
             v->write("bStretchOn", f->bStretchOn);
             v->write("fStretch", f->fStretch);
             v->write("fStretchStart", f->fStretchStart);
@@ -1486,11 +1666,13 @@ namespace lsp
             v->write("fStretchChunk", f->fStretchChunk);
             v->write("fStretchFade", f->fStretchFade);
             v->write("nStretchFadeType", f->nStretchFadeType);
+
             v->write("enLoopMode", int(f->enLoopMode));
             v->write("fLoopStart", f->fLoopStart);
             v->write("fLoopEnd", f->fLoopEnd);
             v->write("fLoopFade", f->fLoopFade);
             v->write("nLoopFadeType", f->nLoopFadeType);
+
             v->write("fHeadCut", f->fHeadCut);
             v->write("fTailCut", f->fTailCut);
             v->write("fFadeIn", f->fFadeIn);
@@ -1503,14 +1685,35 @@ namespace lsp
             v->write("nCompensateFadeType", f->nCompensateFadeType);
             v->write("fPreDelay", f->fPreDelay);
             v->write("fMakeup", f->fMakeup);
+
+            v->write("fEnvelopeAttackTime", f->fEnvelopeAttackTime);
+            v->write("fEnvelopeHoldTime", f->fEnvelopeHoldTime);
+            v->write("fEnvelopeDecayTime", f->fEnvelopeDecayTime);
+            v->write("fEnvelopeSlopeTime", f->fEnvelopeSlopeTime);
+            v->write("fEnvelopeReleaseTime", f->fEnvelopeReleaseTime);
+            v->write("fEnvelopeBreakLevel", f->fEnvelopeBreakLevel);
+            v->write("fEnvelopeSustainLevel", f->fEnvelopeSustainLevel);
+            v->write("fEnvelopeAttackCurve", f->fEnvelopeAttackCurve);
+            v->write("fEnvelopeDecayCurve", f->fEnvelopeDecayCurve);
+            v->write("fEnvelopeSlopeCurve", f->fEnvelopeSlopeCurve);
+            v->write("fEnvelopeReleaseCurve", f->fEnvelopeReleaseCurve);
+            v->write("fEnvelopeAttackType", f->nEnvelopeAttackType);
+            v->write("fEnvelopeDecayType", f->nEnvelopeDecayType);
+            v->write("fEnvelopeSlopeType", f->nEnvelopeSlopeType);
+            v->write("fEnvelopeReleaseType", f->nEnvelopeReleaseType);
+
             v->writev("fGains", f->fGains, meta::sampler_metadata::TRACKS_MAX);
             v->write("fLength", f->fLength);
             v->write("fActualLength", f->fActualLength);
             v->write("nStatus", f->nStatus);
             v->write("bOn", f->bOn);
+            v->write("bEnvelopeOn", f->bEnvelopeOn);
+            v->write("bEnvelopeHoldOn", f->bEnvelopeHoldOn);
+            v->write("bEnvelopeBreakOn", f->bEnvelopeBreakOn);
 
             v->write("pFile", f->pFile);
             v->write("pPitch", f->pPitch);
+
             v->write("pStretchOn", f->pStretchOn);
             v->write("pStretch", f->pStretch);
             v->write("pStretchStart", f->pStretchStart);
@@ -1518,17 +1721,35 @@ namespace lsp
             v->write("pStretchChunk", f->pStretchChunk);
             v->write("pStretchFade", f->pStretchFade);
             v->write("pStretchFadeType", f->pStretchFadeType);
+
             v->write("pLoopOn", f->pLoopOn);
             v->write("pLoopMode", f->pLoopMode);
             v->write("pLoopStart", f->pLoopStart);
             v->write("pLoopEnd", f->pLoopEnd);
             v->write("pLoopFadeType", f->pLoopFadeType);
             v->write("pLoopFade", f->pLoopFade);
+
             v->write("pHeadCut", f->pHeadCut);
             v->write("pTailCut", f->pTailCut);
             v->write("pFadeIn", f->pFadeIn);
             v->write("pFadeOut", f->pFadeOut);
             v->write("pMakeup", f->pMakeup);
+
+            v->write("pEnvelopeOn", f->pEnvelopeOn);
+            v->write("pEnvelopeHoldOn", f->pEnvelopeHoldOn);
+            v->write("pEnvelopeBreakOn", f->pEnvelopeBreakOn);
+            v->write("pEnvelopeAttackTime", f->pEnvelopeAttackTime);
+            v->write("pEnvelopeHoldTime", f->pEnvelopeHoldTime);
+            v->write("pEnvelopeDecayTime", f->pEnvelopeDecayTime);
+            v->write("pEnvelopeSlopeTime", f->pEnvelopeSlopeTime);
+            v->write("pEnvelopeReleaseTime", f->pEnvelopeReleaseTime);
+            v->write("pEnvelopeBreakLevel", f->pEnvelopeBreakLevel);
+            v->write("pEnvelopeSustainLevel", f->pEnvelopeSustainLevel);
+            v->write("pEnvelopeAttackCurve", f->pEnvelopeAttackCurve);
+            v->write("pEnvelopeDecayCurve", f->pEnvelopeDecayCurve);
+            v->write("pEnvelopeSlopeCurve", f->pEnvelopeSlopeCurve);
+            v->write("pEnvelopeReleaseCurve", f->pEnvelopeReleaseCurve);
+
             v->write("pVelocity", f->pVelocity);
             v->write("pPreDelay", f->pPreDelay);
             v->write("pOn", f->pOn);
@@ -1591,6 +1812,7 @@ namespace lsp
             v->write("pDynamics", pDynamics);
             v->write("pHandleVelocity", pHandleVelocity);
             v->write("pDrift", pDrift);
+            v->write("pSampleSel", pSampleSel);
             v->write("pActivity", pActivity);
             v->write("pListen", pListen);
             v->write("pStop", pStop);
diff -pruN 1.2.21-5/modules/lsp-plugins-sampler/src/main/ui/sampler_midi.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/main/ui/sampler_midi.cpp
--- 1.2.21-5/modules/lsp-plugins-sampler/src/main/ui/sampler_midi.cpp	2025-03-01 12:43:19.964509296 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-sampler/src/main/ui/sampler_midi.cpp	2025-08-26 18:16:11.497733757 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-sampler
  * Created on: 18 февр. 2024 г.
@@ -39,11 +39,12 @@ namespace lsp
             {
                 "",
                 "MIDI velocity",
+                NULL,
                 meta::U_NONE,
                 meta::R_CONTROL,
                 meta::F_INT | meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
                 midi_velocity_min, midi_velocity_max, 0.0f, 0.05f,
-                NULL, NULL
+                NULL, NULL, NULL
             };
 
             MidiVelocityPort::MidiVelocityPort()
@@ -96,7 +97,7 @@ namespace lsp
                 return lsp_limit(value, meta->min, meta->max);
             }
 
-        } /* namespace sampler */
+        } /* namespace sampler_midi */
     } /* namespace plugui */
 } /* namespace lsp */
 
diff -pruN 1.2.21-5/modules/lsp-plugins-send/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-send/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-send/.github/workflows/build.yml	2025-03-01 12:43:15.612535419 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-send/.github/workflows/build.yml	2025-08-26 18:16:06.053786592 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-send/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-send/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-send/CHANGELOG	2025-03-01 12:43:15.612535419 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-send/CHANGELOG	2025-08-26 18:16:06.053786592 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.5 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.4 ===
+* Updated build scripts and dependencies.
+
 === 1.0.3 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-send/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-send/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-send/dependencies.mk	2025-03-01 12:43:15.612535419 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-send/dependencies.mk	2025-08-26 18:16:06.053786592 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-send/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-send/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-send/make/tools.mk	2025-03-01 12:43:15.616535396 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-send/make/tools.mk	2025-08-26 18:16:06.057786553 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-send/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-send/modules.mk
--- 1.2.21-5/modules/lsp-plugins-send/modules.mk	2025-03-01 12:43:15.616535396 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-send/modules.mk	2025-08-26 18:16:06.057786553 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-send/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-send/project.mk
--- 1.2.21-5/modules/lsp-plugins-send/project.mk	2025-03-01 12:43:15.616535396 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-send/project.mk	2025-08-26 18:16:06.057786553 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Audio Send Plugin
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.3
+ARTIFACT_VERSION            = 1.0.5
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-send/res/doc/screenshots/send_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-send/res/doc/screenshots/send_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-send/res/doc/screenshots/send_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-send/res/doc/screenshots/send_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-send/src/main/meta/send.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-send/src/main/meta/send.cpp
--- 1.2.21-5/modules/lsp-plugins-send/src/main/meta/send.cpp	2025-03-01 12:43:15.616535396 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-send/src/main/meta/send.cpp	2025-08-26 18:16:06.057786553 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-send
  * Created on: 05 авг 2024 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_SEND_VERSION_MAJOR       1
 #define LSP_PLUGINS_SEND_VERSION_MINOR       0
-#define LSP_PLUGINS_SEND_VERSION_MICRO       3
+#define LSP_PLUGINS_SEND_VERSION_MICRO       5
 
 #define LSP_PLUGINS_SEND_VERSION  \
     LSP_MODULE_VERSION( \
@@ -49,7 +49,7 @@ namespace lsp
             BYPASS,
             IN_GAIN,
             OUT_GAIN,
-            LOG_CONTROL("g_send", "Send gain", U_GAIN_AMP, send::SEND_GAIN),
+            LOG_CONTROL("g_send", "Send gain", "Send gain", U_GAIN_AMP, send::SEND_GAIN),
             SEND_NAME("send", "Audio send connection point name"),
             AUDIO_SEND("sout", "Audio send output", 0, "send"),
 
@@ -70,7 +70,7 @@ namespace lsp
             BYPASS,
             IN_GAIN,
             OUT_GAIN,
-            LOG_CONTROL("g_send", "Send gain", U_GAIN_AMP, send::SEND_GAIN),
+            LOG_CONTROL("g_send", "Send gain", "Send gain", U_GAIN_AMP, send::SEND_GAIN),
             SEND_NAME("send", "Audio send connection point name"),
             AUDIO_SEND("sout_l", "Audio send output left", 0, "send"),
             AUDIO_SEND("sout_r", "Audio send output right", 1, "send"),
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-shared/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-shared/CHANGELOG	2025-03-01 12:43:17.868521877 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/CHANGELOG	2025-08-26 18:16:37.325483088 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.30 ===
+* Updated module versions in dependencies.
+
+=== 1.0.29 ===
+* Updated module versions in dependencies.
+
 === 1.0.28 ===
 * Updated module versions in dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/include/lsp-plug.in/shared/meta/developers.h 1.2.23-0ubuntu1/modules/lsp-plugins-shared/include/lsp-plug.in/shared/meta/developers.h
--- 1.2.21-5/modules/lsp-plugins-shared/include/lsp-plug.in/shared/meta/developers.h	2025-03-01 12:43:17.868521877 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/include/lsp-plug.in/shared/meta/developers.h	2025-08-26 18:16:37.325483088 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-shared
  * Created on: 25 нояб. 2020 г.
@@ -76,6 +76,7 @@
 #define LSP_LADSPA_MB_CLIPPER_BASE          (LSP_LADSPA_BASE + 230)
 #define LSP_LADSPA_PARA_EQUALIZER_X8        (LSP_LADSPA_BASE + 240)
 #define LSP_LADSPA_CHORUS_BASE              (LSP_LADSPA_BASE + 250)
+#define LSP_LADSPA_PHASER_BASE              (LSP_LADSPA_BASE + 260)
 
 
 namespace lsp
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/include/lsp-plug.in/shared/version.h 1.2.23-0ubuntu1/modules/lsp-plugins-shared/include/lsp-plug.in/shared/version.h
--- 1.2.21-5/modules/lsp-plugins-shared/include/lsp-plug.in/shared/version.h	2025-03-01 12:43:17.868521877 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/include/lsp-plug.in/shared/version.h	2025-08-26 18:16:37.325483088 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_PLUGINS_SHARED_MAJOR        1
 #define LSP_PLUGINS_SHARED_MINOR        0
-#define LSP_PLUGINS_SHARED_MICRO        28
+#define LSP_PLUGINS_SHARED_MICRO        30
 
 #ifdef LSP_LLTL_LIB_BUILTIN
     #define LSP_PLUGINS_SHARED_EXPORT
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-shared/modules.mk
--- 1.2.21-5/modules/lsp-plugins-shared/modules.mk	2025-03-01 12:43:17.868521877 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/modules.mk	2025-08-26 18:16:37.325483088 +0000
@@ -19,19 +19,19 @@
 #
 
 # Variables that describe dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-shared/project.mk
--- 1.2.21-5/modules/lsp-plugins-shared/project.mk	2025-03-01 12:43:17.868521877 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/project.mk	2025-08-26 18:16:37.325483088 +0000
@@ -23,7 +23,7 @@ ARTIFACT_ID                 = LSP_PLUGIN
 ARTIFACT_NAME               = lsp-plugins-shared
 ARTIFACT_DESC               = Shared resources for LSP Plugins
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.28
+ARTIFACT_VERSION            = 1.0.30
 ARTIFACT_EXPORT_ALL         = 1
 
 # Weak property
Binary files 1.2.21-5/modules/lsp-plugins-shared/res/doc/img/overlay.png and 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/doc/img/overlay.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/de/actions.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/de/actions.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/de/actions.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/de/actions.json	2025-08-26 18:16:37.373482624 +0000
@@ -43,7 +43,7 @@
 	"import_installed_hydrogen_drumkit": "Installiertes Hydrogen drumkit",
 	"import_settings_from_clipboard": "Importiere Einstellungen aus der Zwischenablage",
 	"import_settings_from_file": "Importiere Einstellungen aus Datei...",
-	"import_rew_filter_file": "REW filter Datei...",
+	"import_rew_filter_file": "REW/APO filter Datei...",
 
 	"listen": "Anhören",
 	"link": {
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/de/labels.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/de/labels.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/de/labels.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/de/labels.json	2025-08-26 18:16:37.373482624 +0000
@@ -249,7 +249,11 @@
 		"treble": "Treble"
 	},
 
-	"frequency": "Frequenz",
+	"frequency": {
+		"": "Frequenz",
+		"max": "Max",
+		"min": "Min"
+	},
 	"freq_gain": "Freq, Gain",
 	"freq_gain:hz_db": "Freq, Gain\n(Hz, dB)",
 
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/actions.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/actions.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/actions.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/actions.json	2025-08-26 18:16:37.373482624 +0000
@@ -13,7 +13,7 @@
 	
 	"cancel": "Cancel",
 	"close": "Close",
-	
+
 	"confirm": {
 		"no": "No",
 		"yes": "Yes"
@@ -35,17 +35,17 @@
 		"move_up": "Move up",
 		"paste": "Paste"
 	},
-	
+
 	"export": "Export",
 	"export_settings_to_clipboard": "Export settings to clipboard",
 	"export_settings_to_file": "Export settings to file...",
-	
+
 	"file_preview": {
 		"pause": "Pause",
 		"play": "Play",
 		"stop": "Stop"
 	},
-	
+
 	"filters": {
 		"switch": {
 			"to_left": "Switch to Left",
@@ -54,64 +54,83 @@
 			"to_side": "Switch to Side"
 		}
 	},
-	
+
 	"font_scaling": {
 		"select": "Font scaling",
 		"value:pc": "{@value} %",
 		"zoom_in": "Zoom in",
 		"zoom_out": "Zoom out"
 	},
-	
+
 	"freeze": "Freeze",
-	
+
 	"import": "Import",
 	"import_hydrogen_drumkit_file": "Hydrogen drumkit file...",
 	"import_installed_hydrogen_drumkit": "Installed Hydrogen drumkit",
 	"import_settings_from_clipboard": "Import settings from clipboard",
 	"import_settings_from_file": "Import settings from file...",
 	"import_sfz_file": "Import SFZ file...",
-	"import_rew_filter_file": "REW filter file...",
+	"import_rew_filter_file": "REW/APO filter file...",
+	"reset_settings": "Reset settings",
 
 	"listen": "Listen",
+	"linear_frequency": "Linear frequency",
 	"link": {
 		"copy": "Copy link",
 		"follow": "Follow link"
 	},
-	
+
 	"load": "Load",
 	"load_preset": "Load preset",
-	
+
+	"manage_presets": "Manage presets...",
 	"measure": "Measure",
-	
+
 	"nav": {
 		"go": "Go",
 		"up": "Up"
 	},
-	
+
 	"ok": "OK",
 	"open": "Open",
 
 	"plugin_manual": "Plugin manual",
 	"postprocess": "Post-process",
+	"presets": {
+		"copy": "Copy",
+		"export": "Export...",
+		"favourite": "Favourite",
+		"import": "Import...",
+		"input_name": "Input name",
+		"load": "Load",
+		"paste": "Paste",
+		"new": "New",
+		"remove": "Remove",
+		"reset": "Reset",
+		"save": "Save",
+		"search": "Search...",
+		"select": "Select preset"
+	},
 	"profile": "Profile",
-	
+
 	"reset": "Reset",
 	"restart": "Restart",
 	"run_stop": "Run/Stop",
 
 	"save": "Save",
-	
-	"select_language": "Select language",
+
+	"select_language": "Language",
 
 	"tap": "Tap",
 	"to_bookmarks": "+Bookmarks",
 	"toggle_rack_mount": "Toggle rack mount",
-	
+
 	"ui_behavior": {
 		"": "UI behavior",
 		"ediable_knob_scale": "Editable knob scale",
 		"enable_zoomable_spectrum": "Automatic frequency graph scaling",
 		"file_list_navigation_autoload": "Automatically load files when navigating file list",
+		"file_list_navigation_autoplay": "Automatically play files when navigating file list",
 		"filter_point_thickness": "Filter point thickness",
 		"override_hydrogen_kits": "Override Hydrogen kits",
 		"take_instrument_name_from_file": "Take instrument name from file",
@@ -120,9 +139,9 @@
 			"invert_graph_dot": "Invert vertical mouse scroll for graph dots"
 		}
 	},
-	
+
 	"ui_manual": "UI manual",
-	
+
 	"ui_scaling": {
 		"prefer_host": "Prefer host",
 		"select": "UI scaling",
@@ -130,9 +149,9 @@
 		"zoom_in": "Zoom in",
 		"zoom_out": "Zoom out"
 	},
-	
+
 	"user_paths": "User paths...",
-	
+
 	"visual_schema": {
 		"select": "Visual Schema"
 	}
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/graph.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/graph.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/graph.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/graph.json	2025-08-26 18:16:37.373482624 +0000
@@ -40,6 +40,7 @@
 		"min": "min",
 		"x::2f": "{@value%.2f}",
 		"x::f": "{@value%.4f}",
+		"x:db:f;x::f": "{@db%.2f} dB\n{@value%.4f}",
 		"x:db": "{@value} dB",
 		"x:db:f": "{@value%.2f} dB",
 		"x:hz": "{@value} Hz",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/groups.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/groups.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/groups.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/groups.json	2025-08-26 18:16:37.373482624 +0000
@@ -44,6 +44,7 @@
 
 	"metering": "Metering",
 	"midi_setup": "MIDI Setup",
+	"mix": "Mix",
 	"monitoring": "Monitoring",
 
 	"oscillator_function": "Oscillator Function",
@@ -71,6 +72,7 @@
 	
 	"post_filter": "Post-filter",
 
+	"premix": "Pre-mix",
 	"processor": "Processor",
 	"processors": "Processors",
 
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/labels.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/labels.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/labels.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/labels.json	2025-08-26 18:16:37.373482624 +0000
@@ -38,6 +38,23 @@
 	"act_ive": "ACT",
 	"active": "Active",
 	"actual_duration": "Actual\nDuration (s)",
+	
+	"adsr": {
+		"adsr": "ADSR",
+		"ahdbssr": "AHDBSSR",
+		"attack": "Attack",
+		"break": "Break",
+		"convex": "Convex",
+		"curve": "Curve",
+		"decay": "Decay",
+		"envelope": "Envelope",
+		"hold": "Hold",
+		"release": "Release",
+		"shape": "Shape",
+		"slope": "Slope",
+		"sustain": "Sustain",
+		"time": "Time"
+	},
 
 	"alr": "ALR",
     "alr_": "Auto level regulation",
@@ -149,10 +166,12 @@
 		"left": "Left",
 		"left_on": "Left on",
 		"link": "Link",
+		"lr_link": "L/R link",
 		"mid": "Mid",
 		"mid_on": "Mid on",
 		"mid_side": "Mid/Side",
 		"middle": "Middle",
+		"ms_link": "M/S link",
 		"mute": "Mute",
 		"none": "None",
 		"num_id": "#{@id}",
@@ -326,7 +345,11 @@
 		"treble": "Treble"
 	},
 
-	"frequency": "Frequency",
+	"frequency": {
+		"": "Frequency",
+		"max": "Max",
+		"min": "Min"
+	},
 	"freq_gain": "Freq, Gain",
 	"freq_gain:hz_db": "Freq, Gain\n(Hz, dB)",
 	
@@ -425,6 +448,7 @@
 	},
 	"listen": "Listen",
 	"location": "Location",
+	"log_dots": "Log dots",
 	"log_scale": "Log scale",
 
 	"lookahead": "Lookahead",
@@ -596,6 +620,35 @@
 
 	"preamp": "Preamp",
 	"predelay": "Pre-delay",
+	"premix": {
+		"": "Pre-mix",
+		"in_to_link": "In -> Link",
+		"in_to_sc": "In -> SC",
+		"link_to_in": "Link -> In",
+		"link_to_sc": "Link -> SC",
+		"sc_to_in": "SC -> In",
+		"sc_to_link": "SC -> Link"
+	},
+	
+	"presets": {
+		"add_to_favourites": "Add to favourites",
+		"category": {
+			"all": "All",
+			"factory": "Factory",
+			"favourites": "Favourites",
+			"user": "User"
+		},
+		"configuration": "Configuration",
+		"name": {
+			"mod": "* {@name}",
+			"normal": "{@name}",
+			"factory": "{@name} [Factory]",
+			"user": "{@name} [User]",
+			"factory_mod": "* {@name} [Factory]",
+			"user_mod": "* {@name} [User]"
+		},
+		"preset_name": "Preset name"
+	},
 	
 	"processing": {
 		"post": "Post",
@@ -745,6 +798,9 @@
 		"clip": "Clip",
 		"clipping": "Clipping",
 		"curr_ent": "Curr",
+		"dc_compensate": "DC compensate",
+		"dc_offset": "DC offset",
+		"drive": "Drive",
 		"dry": "Dry",
 		"dry:db": "Dry\n(dB)",
 		"dry_pan": "Dry pan",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/lists.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/lists.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/lists.json	2025-08-26 18:16:37.373482624 +0000
@@ -1,4 +1,15 @@
 {
+	"adsr": {
+		"type": {
+			"cubic": "Cubic",
+			"dline": "DLine",
+			"exp": "Exp",
+			"quad": "Quadro",
+			"off": "Off",
+			"vline": "VLine"
+		}
+	},
+	
 	"bool": {
 		"off": "off",
 		"on": "on"
@@ -46,7 +57,7 @@
 			"apo_dr": "APO (DR)"
 		},
 		"pos": {
-		    "post_eq": "Post-eq",
+			"post_eq": "Post-eq",
 			"pre_eq": "Pre-eq"
 		},
 		"slope": {
@@ -70,8 +81,8 @@
 		"type": {
 			"fir": "FIR",
 			"fft": "FFT",
-			"iir": "IIR",
-			"spm": "SPM"
+			"iir": "Zero-latency (IIR)",
+			"spm": "Linear phase (SPM)"
 		}
 	},
 
@@ -185,7 +196,7 @@
 			"thinnest" : "Thinnest"
 		},
 		"pos": {
-		    "post_eq": "Post-eq",
+			"post_eq": "Post-eq",
 			"pre_eq": "Pre-eq"
 		},
 		"slope": {
@@ -208,8 +219,8 @@
 		"type": {
 			"fir": "FIR",
 			"fft": "FFT",
-			"iir": "IIR",
-			"spm": "SPM"
+			"iir": "Zero-latency (IIR)",
+			"spm": "Linear phase (SPM)"
 		}
 	},
 
@@ -227,7 +238,8 @@
 		"fft": {
 			"off": "Off",
 			"post_eq": "Post-eq",
-			"pre_eq": "Pre-eq"
+			"pre_eq": "Pre-eq",
+			"both": "Both"
 		}
 	},
 
@@ -332,7 +344,7 @@
 		"side_mid": "Side/Mid",
 		"sma": "SMA"
 	},
-	
+
 	"sigmoid": {
 		"arctangent": "Arctangent",
 		"circle": "Circle",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/messages.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/messages.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/messages.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/messages.json	2025-08-26 18:16:37.373482624 +0000
@@ -3,6 +3,7 @@
 		"copyright": "(C) {@meta_pkg_copyright} 2015-2025.",
 		"description": "This is a collection of open-source audio plugins.",
 		"info": {
+			"ui_graphics_library": "UI Graphics:",
 			"pkg_name": "Package name:",
 			"pkg_version": "Package version:",
 			"plug_format": "Plugin format:",
@@ -10,6 +11,7 @@
 			"plug_version": "Plugin version:"
 		},
 		"values": {
+			"ui_graphics_library": "{@meta_ui_graphics_library}",
 			"pkg_name": "{@meta_pkg_artifact_name}",
 			"pkg_version": "{@meta_pkg_version}",
 			"plug_format": "{@meta_plugin_format}",
@@ -44,5 +46,15 @@
 	},
 
 	"postscript": "{@meta_pkg_full_name}",
+	
+	"presets": {
+		"confirm_overwrite": "User preset '{@name}' already exists. Do you want to overwrite it?",
+		"confirm_remove_preset": "Do you want to remove user preset '{@name}'?",
+		"confirm_reset_state": "Do you want to reset settings to default?",
+		"factory_preset_changed": "Factory preset '{@name}' has been changed previously.\nDo you want to switch to selected preset without saving?",
+		"save_preset_failed": "Failed to save user preset '{@name}', error code: {@code}.\nPlease verify the name of the preset and write permissions on the file system.",
+		"user_preset_changed": "User preset '{@name}' has been changed previously.\nDo you want to switch to selected preset without saving?"
+	},
+	
 	"site": "{@meta_pkg_site}"
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/project.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/project.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/project.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/project.json	2025-08-26 18:16:37.373482624 +0000
@@ -2,9 +2,22 @@
 	"acronym": "LSP",
 
 	"donations": {
-		"0": "https://www.blockchain.com/btc/address/15X3AfDRF3EshSLBoK8UfHAsFr2TQsH8pk",
-		"1": "https://etherscan.io/address/0x079b24da78d78302cd3cfbb80c728cd554606cc6",
-		"2": "https://www.patreon.com/sadko4u"
+		"0": {
+			"url": "https://paypal.me/borTCreative",
+			"text": "PayPal (Boris Gotsulenko aka borT)"
+		},
+		"1": {
+			"url": "https://www.blockchain.com/btc/address/15X3AfDRF3EshSLBoK8UfHAsFr2TQsH8pk",
+			"text": "BTC wallet: 15X3AfDRF3EshSLBoK8UfHAsFr2TQsH8pk"
+		},
+		"2": {
+			"url": "https://etherscan.io/address/0x079b24da78d78302cd3cfbb80c728cd554606cc6",
+			"text": "ETH wallet: 0x079b24da78d78302cd3cfbb80c728cd554606cc6"
+		},
+		"3": {
+			"url": "https://www.patreon.com/sadko4u",
+			"text": "Patreon (Vladimir Sadovnikov aka sadko4u)"
+		}
 	},
 
 	"name": "Linux Studio Plugins Project",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/titles.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/titles.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/default/titles.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/default/titles.json	2025-08-26 18:16:37.373482624 +0000
@@ -11,9 +11,12 @@
 	"import_rew_filter_settings": "Import REW filter settings",
 	"import_settings": "Import settings",
 	
-	"load_audio_file": "Load Audio File",
+	"load_audio_file": "Load audio file",
 	"load_from_file": "Load from file",
 	
+	"preset_management": "Preset management",
+	
+	"save_preset": "Save preset",
 	"save_to_file": "Save to file",
 	
 	"update_notification": "Update notification"
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/es/actions.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/es/actions.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/es/actions.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/es/actions.json	2025-08-26 18:16:37.373482624 +0000
@@ -32,7 +32,7 @@
 	"import": "Importar",
 	"import_settings_from_clipboard": "Importar configuración del portapapeles",
 	"import_settings_from_file": "Imporar configuración de archivo...",
-	"import_rew_filter_file": "Archivo filtrado REW...",
+	"import_rew_filter_file": "Archivo filtrado REW/APO...",
 
 	"listen": "Escuchar",
 	"link": {
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/es/labels.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/es/labels.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/es/labels.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/es/labels.json	2025-08-26 18:16:37.373482624 +0000
@@ -209,7 +209,11 @@
 		"treble": "Agudos"
 	},
 	
-	"frequency": "Frecuencia",
+	"frequency": {
+		"": "Frecuencia",
+		"max": "Max",
+		"min": "Min"
+	},
 	"freq_gain:hz_db": "Frec, Ganancia\n(Hz, dB)",
 	
 	"gain": "Ganancia",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/fr/actions.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/fr/actions.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/fr/actions.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/fr/actions.json	2025-08-26 18:16:37.373482624 +0000
@@ -36,7 +36,7 @@
 	"import_installed_hydrogen_drumkit": "Kit de batterie Hydrogen installé",
 	"import_settings_from_clipboard": "Importer les paramètres depuis le presse-papiers",
 	"import_settings_from_file": "Importer les paramètres depuis un fichier...",
-	"import_rew_filter_file": "Fichier filtre REW...",
+	"import_rew_filter_file": "Fichier filtre REW/APO...",
 
 	"listen": "Écouter",
 	"link": {
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/fr/labels.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/fr/labels.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/fr/labels.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/fr/labels.json	2025-08-26 18:16:37.373482624 +0000
@@ -231,7 +231,11 @@
 		"treble": "Aigü"
 	},
 	
-	"frequency": "Fréquence",
+	"frequency": {
+		"": "Fréquence",
+		"max": "Max",
+		"min": "Min"
+	},
 	"freq_gain:hz_db": "Fréq, Gain\n(Hz, dB)",
 	
 	"gain": "Gain",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/it/actions.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/it/actions.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/it/actions.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/it/actions.json	2025-08-26 18:16:37.377482585 +0000
@@ -43,7 +43,7 @@
 	"import_installed_hydrogen_drumkit": "Drumkit di Hydrogen installato",
 	"import_settings_from_clipboard": "Importa i settaggi dagli appunti",
 	"import_settings_from_file": "Importa i settaggi da file...",
-	"import_rew_filter_file": "File filtro REW...",
+	"import_rew_filter_file": "File filtro REW/APO...",
 
 	"listen": "Audiziona",
 	"link": {
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/it/labels.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/it/labels.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/it/labels.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/it/labels.json	2025-08-26 18:16:37.377482585 +0000
@@ -244,7 +244,11 @@
 		"treble": "Alti"
 	},
 	
-	"frequency": "Frequenza",
+	"frequency": {
+		"": "Frequenza",
+		"max": "Max",
+		"min": "Min"
+	},
 	"freq_gain": "Freq, Guadagno",
 	"freq_gain:hz_db": "Freq, Guadagno\n(Hz, dB)",
 	
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/actions.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/actions.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/actions.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/actions.json	2025-08-26 18:16:37.377482585 +0000
@@ -13,7 +13,7 @@
 	
 	"cancel": "Отмена",
 	"close": "Закрыть",
-	
+
 	"confirm": {
 		"no": "Нет",
 		"yes": "Да"
@@ -36,17 +36,17 @@
 		"move_up": "Переместить вверх",
 		"paste": "Вставить"
 	},
-	
+
 	"export": "Экспорт",
 	"export_settings_to_clipboard": "Экпорт настроек в буфер обмена",
 	"export_settings_to_file": "Экспорт настроек в файл...",
-	
+
 	"file_preview": {
 		"pause": "Пауза",
 		"play": "Играть",
 		"stop": "Стоп"
 	},
-	
+
 	"filters": {
 		"switch": {
 			"to_left": "Переключить на Левый",
@@ -55,64 +55,83 @@
 			"to_side": "Переключить на Сторону"
 		}
 	},
-	
+
 	"font_scaling": {
 		"select": "Масштаб шрифтов",
 		"value:pc": "{@value} %",
 		"zoom_in": "Увеличить масштаб",
 		"zoom_out": "Уменьшить масштаб"
 	},
-	
+
 	"freeze": "Стоп-кадр",
-	
+
 	"import": "Импорт",
 	"import_hydrogen_drumkit_file": "Библиотека семплов Hydrogen...",
 	"import_installed_hydrogen_drumkit": "Установленная библиотека Hydrogen",
 	"import_settings_from_clipboard": "Импорт настроек из буфера обмена",
 	"import_settings_from_file": "Импорт настроек из файла...",
 	"import_sfz_file": "Импортировать файл SFZ...",
-	"import_rew_filter_file": "Файл фильтров REW...",
+	"import_rew_filter_file": "Файл фильтров REW/APO...",
+	"reset_settings": "Сбросить настройки",
 
 	"listen": "Слушать",
+	"linear_frequency": "Линейная частота",
 	"link": {
 		"copy": "Копировать ссылку",
 		"follow": "Перейти по ссылке"
 	},
-	
+
 	"load": "Загрузить",
 	"load_preset": "Загрузить пресет",
-	
+
+	"manage_presets": "Управление пресетами...",
 	"measure": "Измерить",
-	
+
 	"nav": {
 		"go": "Перейти",
 		"up": "Наверх"
 	},
-	
+
 	"ok": "Хорошо",
 	"open": "Открыть",
-	
+
 	"plugin_manual": "Руководство к плагину",
 	"postprocess": "Постобработка",
+	"presets": {
+		"copy": "Копировать",
+		"export": "Экспорт...",
+		"favourite": "Избранное",
+		"import": "Импорт...",
+		"input_name": "Введите название",
+		"load": "Загрузить",
+		"paste": "Вставить",
+		"new": "Новый",
+		"remove": "Удалить",
+		"reset": "Сбросить",
+		"save": "Сохранить",
+		"search": "Поиск...",
+		"select": "Выбрать пресет"
+	},
 	"profile": "Профилировать",
-	
-	"reset": "Сбросить",	
+
+	"reset": "Сбросить",
 	"restart": "Перезапуск",
 	"run_stop": "Пуск/Стоп",
 
 	"save": "Сохранить",
 
-	"select_language": "Выбрать язык",
-	
+	"select_language": "Язык",
+
 	"tap": "Тук",
 	"to_bookmarks": "В закладки",
 	"toggle_rack_mount": "Переключить стоечный монтаж",
-	
+
 	"ui_behavior": {
 		"": "Поведение интерфейса",
-		"ediable_knob_scale": "Редактируемые шкалы ручек",		
+		"ediable_knob_scale": "Редактируемые шкалы ручек",
 		"enable_zoomable_spectrum": "Автоматическое масштабирование графика частот",
 		"file_list_navigation_autoload": "Автоматически загружать файлы при навигации по списку файлов",
+		"file_list_navigation_autoplay": "Автоматически проигрывать файлы при навигации по списку файлов",
 		"filter_point_thickness": "Толщина точек фильтра",
 		"override_hydrogen_kits": "Замещать настройки Hydrogen",
 		"take_instrument_name_from_file": "Получать название инструмента из файла",
@@ -121,9 +140,9 @@
 			"invert_graph_dot": "Инвертировать вертикальное колесо мыши для точек на графе"
 		}
 	},
-	
+
 	"ui_manual": "Руководство по интерфейсу",
-	
+
 	"ui_scaling": {
 		"prefer_host": "Предпочитать масштаб хоста",
 		"select": "Масштаб интерфейса",
@@ -131,9 +150,9 @@
 		"zoom_in": "Увеличить масштаб",
 		"zoom_out": "Уменьшить масштаб"
 	},
-	
+
 	"user_paths": "Пользовательские пути...",
-	
+
 	"visual_schema": {
 		"select": "Визуальная схема"
 	}
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/graph.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/graph.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/graph.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/graph.json	2025-08-26 18:16:37.377482585 +0000
@@ -40,6 +40,7 @@
 		"min": "min",
 		"x::2f": "{@value%.2f}",
 		"x::f": "{@value%.4f}",
+		"x:db:f;x::f": "{@db%.2f} дБ\n{@value%.4f}",
 		"x:db": "{@value} дБ",
 		"x:db:f": "{@value%.2f} дБ",
 		"x:deg": "{@value}°",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/groups.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/groups.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/groups.json	2025-03-01 12:43:17.896521710 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/groups.json	2025-08-26 18:16:37.377482585 +0000
@@ -43,6 +43,7 @@
 	
 	"metering": "Измерения",
 	"midi_setup": "Настройка MIDI",
+	"mix": "Mix",
 	"monitoring": "Мониторинг",
 	
 	"oscillator_function": "Функция осциллятора",
@@ -69,7 +70,8 @@
 	},
 	
 	"post_filter": "Пост-фильтр",
-	
+
+	"premix": "Премикс",	
 	"processor": "Обработчик",
 	"processors": "Обработчики",
 	
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/labels.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/labels.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/labels.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/labels.json	2025-08-26 18:16:37.377482585 +0000
@@ -39,10 +39,26 @@
 	"active": "Активно",
 	"actual_duration": "Действительная\nдлительность (с)",
 
+	"adsr": {
+		"adsr": "ADSR",
+		"ahdbssr": "AHDBSSR",
+		"attack": "Подъём",
+		"break": "Разрыв",
+		"convex": "Выпукл",
+		"curve": "Кривая",
+		"decay": "Спад",
+		"envelope": "Огибающая",
+		"hold": "Удержание",
+		"release": "Затухание",
+		"shape": "Форма",
+		"slope": "Наклон",
+		"sustain": "Поддержка",
+		"time": "Время"
+	},
+
 	"alr": "АРУ",
     "alr_": "Авто регуляция уровней",
 
-
 	"amount": "Количество",
 	"amplitude": "Амплитуда",
 
@@ -151,10 +167,12 @@
 		"left": "Левый",
 		"left_on": "Левый вкл",		
 		"link": "Линк",
+		"lr_link": "Связь Л/П",
 		"mid": "Центр",
 		"mid_on": "Центр вкл",
 		"mid_side": "Центр/Сторона",
 		"middle": "Центр",
+		"ms_link": "Связь Ц/С",
 		"mute": "Глуш",
 		"none": "Ничего",
 		"num_id": "№{@id}",
@@ -328,7 +346,11 @@
 		"treble": "Верха"
 	},
 
-	"frequency": "Частота",
+	"frequency": {
+		"": "Частота",
+		"max": "Макс",
+		"min": "Мин"
+	},
 	"freq_gain": "Част, Усил",
 	"freq_gain:hz_db": "Част, Усил\n(Гц, дБ)",
 	
@@ -427,6 +449,7 @@
 	},
 	"listen": "Слушать",
 	"location": "Местоположение",
+	"log_dots": "Лог точки",
 	"log_scale": "Лог масштаб",
 
 	"lookahead": "Предсказание",
@@ -597,6 +620,35 @@
 
 	"preamp": "Предусиление",
 	"predelay": "П/задержка",
+	"premix": {
+		"": "Премикс",
+		"in_to_link": "Вх -> Связь",
+		"in_to_sc": "Вх -> БС",
+		"link_to_in": "Связь -> Вх",
+		"link_to_sc": "Связь -> БЦ",
+		"sc_to_in": "БЦ -> Вх",
+		"sc_to_link": "БЦ -> Связь"
+	},
+	
+	"presets": {
+		"add_to_favourites": "Добавить в избранное",
+		"category": {
+			"all": "Все",
+			"factory": "Фабричные",
+			"favourites": "Избранные",
+			"user": "Пользовательские"
+		},
+		"configuration": "Конфигурация",
+		"name": {
+			"mod": "* {@name}",
+			"normal": "{@name}",
+			"factory": "{@name} [Втроенный]",
+			"user": "{@name} [Пользовательский]",
+			"factory_mod": "* {@name} [Встроенный]",
+			"user_mod": "* {@name} [Пользовательский]"
+		},
+		"preset_name": "Название пресета"
+	},
 	
 	"processing": {
 		"post": "Пост",
@@ -746,6 +798,9 @@
 		"clip": "Срез",
 		"clipping": "Клиппинг",
 		"curr_ent": "Тек",
+		"dc_compensate": "Комп. смещения",
+		"dc_offset": "Смещение",
+		"drive": "Драйв",
 		"dry": "Необр",
 		"dry:db": "Необр\n(дБ)",
 		"dry_pan": "Пан необр",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/lists.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/lists.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/lists.json	2025-08-26 18:16:37.377482585 +0000
@@ -1,4 +1,15 @@
 {
+	"adsr": {
+		"type": {
+			"cubic": "Кубич",
+			"dline": "Д-линия",
+			"exp": "Эксп",
+			"quad": "Квадро",
+			"off": "Выкл",
+			"vline": "В-линия"
+		}
+	},
+	
 	"bool": {
 		"off": "выкл",
 		"on": "вкл"
@@ -68,10 +79,10 @@
 			"x4": "x4"
 		},
 		"type": {
-			"fir": "КИХ",
-			"fft": "БПФ",
-			"iir": "БИХ",
-			"spm": "МСО"
+			"fir": "FIR",
+			"fft": "FFT",
+			"iir": "Без задержки (IIR)",
+			"spm": "Линейно-фазовый (SPM)"
 		}
 	},
 
@@ -206,10 +217,10 @@
 			"x16": "x16"
 		},
 		"type": {
-			"fir": "КИХ",
-			"fft": "БПФ",
-			"iir": "БИХ",
-			"spm": "МСО"
+			"fir": "FIR",
+			"fft": "FFT",
+			"iir": "Без задержки (IIR)",
+			"spm": "Линейно-фазовый (SPM)"
 		}
 	},
 
@@ -332,7 +343,7 @@
 		"side_mid": "Сторона/Центр",
 		"sma": "ПСС"
 	},
-	
+
 	"sigmoid": {
 		"arctangent": "Арктангенс",
 		"circle": "Окружность",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/messages.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/messages.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/messages.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/messages.json	2025-08-26 18:16:37.377482585 +0000
@@ -3,6 +3,7 @@
 		"copyright": "(C) {@meta_pkg_copyright} 2015-2025.",
 		"description": "Коллекция аудио-плагинов с открытым исходным кодом.",
 		"info": {
+			"ui_graphics_library": "Графика интерфейса:",
 			"pkg_name": "Название пакета:",
 			"pkg_version": "Версия пакета:",
 			"plug_format": "Формат плагина:",
@@ -10,6 +11,7 @@
 			"plug_version": "Версия плагина:"
 		},
 		"values": {
+			"ui_graphics_library": "{@meta_ui_graphics_library}",
 			"pkg_name": "{@meta_pkg_artifact_name}",
 			"pkg_version": "{@meta_pkg_version}",
 			"plug_format": "{@meta_plugin_format}",
@@ -44,5 +46,15 @@
 	},
 	
 	"postscript": "{@meta_pkg_full_name}",
+	
+	"presets": {
+		"confirm_overwrite": "Пользовательский пресет \"{@name}\" уже существует. Хотите перезаписать его?",
+		"confirm_remove_preset": "Вы хотите удалить пользовательский пресет \"{@name}\"?",
+		"confirm_reset_state": "Вы хотите установить настройки по умолчанию?",
+		"factory_preset_changed": "Фабричный пресет \"{@name}\" был ранее изменён.\nВы хотите переключиться на выбранный пресет без сохранения?",
+		"save_preset_failed": "Не удалось сохранить пользовательский пресет \"{@name}\", код ошибки: {@code}.\nПроверьте корректность названия пресета и доступость файловой системы на запись.",
+		"user_preset_changed": "Пользовательский пресет \"{@name}\" был ранее изменён.\nВы хотите переключиться на выбранный пресет без сохранения?"
+	},
+	
 	"site": "{@meta_pkg_site}"
 }
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/titles.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/titles.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/ru/titles.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/ru/titles.json	2025-08-26 18:16:37.377482585 +0000
@@ -14,6 +14,9 @@
 	"load_audio_file": "Загрузить аудиофайл",
 	"load_from_file": "Загрузить файл",
 	
+	"preset_management": "Управление пресетами",
+	
+	"save_preset": "Сохранить пресет",
 	"save_to_file": "Сохранить файл",
 	
 	"update_notification": "Оповещение об обновлении"
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/actions.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/actions.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/actions.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/actions.json	2025-08-26 18:16:37.377482585 +0000
@@ -13,7 +13,7 @@
 	
 	"cancel": "Cancel",
 	"close": "Close",
-	
+
 	"confirm": {
 		"no": "No",
 		"yes": "Yes"
@@ -35,11 +35,11 @@
 		"move_up": "Move up",
 		"paste": "Paste"
 	},
-	
+
 	"export": "Export",
 	"export_settings_to_clipboard": "Export settings to clipboard",
 	"export_settings_to_file": "Export settings to file...",
-	
+
 	"file_preview": {
 		"pause": "Pause",
 		"play": "Play",
@@ -54,64 +54,82 @@
 			"to_side": "Switch to Side"
 		}
 	},
-	
+
 	"font_scaling": {
 		"select": "Font scaling",
 		"value:pc": "{@value} %",
 		"zoom_in": "Zoom in",
 		"zoom_out": "Zoom out"
 	},
-	
+
 	"freeze": "Freeze",
-	
+
 	"import": "Import",
 	"import_hydrogen_drumkit_file": "Hydrogen drumkit file...",
 	"import_installed_hydrogen_drumkit": "Installed Hydrogen drumkit",
 	"import_settings_from_clipboard": "Import settings from clipboard",
 	"import_settings_from_file": "Import settings from file...",
 	"import_sfz_file": "Import SFZ file...",
-	"import_rew_filter_file": "REW filter file...",
+	"import_rew_filter_file": "REW/APO filter file...",
 
 	"listen": "Listen",
+	"linear_frequency": "Linear frequency",
 	"link": {
 		"copy": "Copy link",
 		"follow": "Follow link"
 	},
-	
+
 	"load": "Load",
 	"load_preset": "Load preset",
-	
+
+	"manage_presets": "Manage presets...",
 	"measure": "Measure",
-	
+
 	"nav": {
 		"go": "Go",
 		"up": "Up"
 	},
-	
+
 	"ok": "OK",
 	"open": "Open",
 
 	"plugin_manual": "Plugin manual",
 	"postprocess": "Post-process",
+	"presets": {
+		"copy": "Copy",
+		"export": "Export...",
+		"favourite": "Favourite",
+		"import": "Import...",
+		"input_name": "Input name",
+		"load": "Load",
+		"paste": "Paste",
+		"new": "New",
+		"remove": "Remove",
+		"reset": "Reset",
+		"save": "Save",
+		"search": "Search...",
+		"select": "Select preset"
+	},
 	"profile": "Profile",
-	
-	"reset": "Reset",	
+
+	"reset": "Reset",
 	"restart": "Restart",
 	"run_stop": "Run/Stop",
 
 	"save": "Save",
-	
-	"select_language": "Select language",
+
+	"select_language": "Language",
 
 	"tap": "Tap",
 	"to_bookmarks": "+Bookmarks",
 	"toggle_rack_mount": "Toggle rack mount",
-	
+
 	"ui_behavior": {
 		"": "UI behavior",
-		"ediable_knob_scale": "Editable knob scale",		
+		"ediable_knob_scale": "Editable knob scale",
 		"enable_zoomable_spectrum": "Automatic frequency graph scaling",
 		"file_list_navigation_autoload": "Automatically load files when navigating file list",
+		"file_list_navigation_autoplay": "Automatically play files when navigating file list",
 		"filter_point_thickness": "Filter point thickness",
 		"override_hydrogen_kits": "Override Hydrogen kits",
 		"take_instrument_name_from_file": "Take instrument name from file",
@@ -120,9 +138,9 @@
 			"invert_graph_dot": "Invert vertical mouse scroll for graph dots"
 		}
 	},
-	
+
 	"ui_manual": "UI manual",
-	
+
 	"ui_scaling": {
 		"prefer_host": "Prefer host",
 		"select": "UI scaling",
@@ -130,9 +148,9 @@
 		"zoom_in": "Zoom in",
 		"zoom_out": "Zoom out"
 	},
-	
+
 	"user_paths": "User paths...",
-	
+
 	"visual_schema": {
 		"select": "Visual Schema"
 	}
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/graph.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/graph.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/graph.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/graph.json	2025-08-26 18:16:37.377482585 +0000
@@ -40,6 +40,7 @@
 		"min": "min",
 		"x::2f": "{@value%.2f}",
 		"x::f": "{@value%.4f}",
+		"x:db:f;x::f": "{@db%.2f} dB\n{@value%.4f}",
 		"x:db": "{@value} dB",
 		"x:db:f": "{@value%.2f} dB",
 		"x:deg": "{@value}°",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/groups.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/groups.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/groups.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/groups.json	2025-08-26 18:16:37.377482585 +0000
@@ -44,6 +44,7 @@
 
 	"metering": "Metering",
 	"midi_setup": "MIDI Setup",
+	"mix": "Mix",
 	"monitoring": "Monitoring",
 
 	"oscillator_function": "Oscillator Function",
@@ -71,6 +72,7 @@
 	
 	"post_filter": "Post-filter",
 
+	"premix": "Pre-mix",
 	"processor": "Processor",
 	"processors": "Processors",
 
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/labels.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/labels.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/labels.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/labels.json	2025-08-26 18:16:37.377482585 +0000
@@ -39,6 +39,23 @@
 	"active": "Active",
 	"actual_duration": "Actual\nDuration (s)",
 
+	"adsr": {
+		"adsr": "ADSR",
+		"ahdbssr": "AHDBSSR",
+		"attack": "Attack",
+		"break": "Break",
+		"convex": "Convex",
+		"curve": "Curve",
+		"decay": "Decay",
+		"envelope": "Envelope",
+		"hold": "Hold",
+		"release": "Release",
+		"shape": "Shape",
+		"slope": "Slope",
+		"sustain": "Sustain",
+		"time": "Time"
+	},
+
 	"alr": "ALR",
     "alr_": "Auto level regulation",
 
@@ -150,10 +167,12 @@
 		"left": "Left",
 		"left_on": "Left on",		
 		"link": "Link",
+		"lr_link": "L/R Link",
 		"mid": "Mid",
 		"mid_on": "Mid on",
 		"mid_side": "Mid/Side",
 		"middle": "Middle",
+		"ms_link": "M/S Link",
 		"mute": "Mute",
 		"none": "None",
 		"num_id": "#{@id}",
@@ -328,7 +347,11 @@
 		"treble": "Treble"
 	},
 
-	"frequency": "Frequency",
+	"frequency": {
+		"": "Frequency",
+		"max": "Max",
+		"min": "Min"
+	},
 	"freq_gain": "Freq, Gain",
 	"freq_gain:hz_db": "Freq, Gain\n(Hz, dB)",
 	
@@ -427,6 +450,7 @@
 	},
 	"listen": "Listen",
 	"location": "Location",
+	"log_dots": "Log dots",
 	"log_scale": "Log scale",
 
 	"lookahead": "Lookahead",
@@ -596,6 +620,35 @@
 
 	"preamp": "Preamp",
 	"predelay": "Pre-delay",
+	"premix": {
+		"": "Pre-mix",
+		"in_to_link": "In -> Link",
+		"in_to_sc": "In -> SC",
+		"link_to_in": "Link -> In",
+		"link_to_sc": "Link -> SC",
+		"sc_to_in": "SC -> In",
+		"sc_to_link": "SC -> Link"
+	},
+	
+	"presets": {
+		"add_to_favourites": "Add to favourites",
+		"category": {
+			"all": "All",
+			"factory": "Factory",
+			"favourites": "Favourites",
+			"user": "User"
+		},
+		"configuration": "Configuration",
+		"name": {
+			"mod": "* {@name}",
+			"normal": "{@name}",
+			"factory": "{@name} [Factory]",
+			"user": "{@name} [User]",
+			"factory_mod": "* {@name} [Factory]",
+			"user_mod": "* {@name} [User]"
+		},
+		"preset_name": "Preset name"
+	},
 	
 	"processing": {
 		"post": "Post",
@@ -746,6 +799,9 @@
 		"clip": "Clip",
 		"clipping": "Clipping",
 		"curr_ent": "Curr",
+		"dc_compensate": "DC compensate",
+		"dc_offset": "DC offset",
+		"drive": "Drive",
 		"dry": "Dry",
 		"dry:db": "Dry\n(dB)",
 		"dry_pan": "Dry pan",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/lists.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/lists.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/lists.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/lists.json	2025-08-26 18:16:37.377482585 +0000
@@ -1,4 +1,15 @@
 {
+	"adsr": {
+		"type": {
+			"cubic": "Cubic",
+			"dline": "DLine",
+			"exp": "Exp",
+			"quad": "Quadro",
+			"off": "Off",
+			"vline": "VLine"
+		}
+	},
+	
 	"bool": {
 		"off": "off",
 		"on": "on"
@@ -70,8 +81,8 @@
 		"type": {
 			"fir": "FIR",
 			"fft": "FFT",
-			"iir": "IIR",
-			"spm": "SPM"
+			"iir": "Zero-latency (IIR)",
+			"spm": "Linear phase (SPM)"
 		}
 	},
 
@@ -208,8 +219,8 @@
 		"type": {
 			"fir": "FIR",
 			"fft": "FFT",
-			"iir": "IIR",
-			"spm": "SPM"
+			"iir": "Zero-latency (IIR)",
+			"spm": "Linear phase (SPM)"
 		}
 	},
 
@@ -332,7 +343,7 @@
 		"side_mid": "Side/Mid",
 		"sma": "SMA"
 	},
-	
+
 	"sigmoid": {
 		"arctangent": "Arctangent",
 		"circle": "Circle",
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/messages.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/messages.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/messages.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/messages.json	2025-08-26 18:16:37.377482585 +0000
@@ -44,5 +44,15 @@
 	},
 
 	"postscript": "{@meta_pkg_full_name}",
+	
+	"presets": {
+		"confirm_overwrite": "User preset '{@name}' already exists. Do you want to overwrite it?",
+		"confirm_remove_preset": "Do you want to remove user preset '{@name}'?",
+		"confirm_reset_state": "Do you want to reset settings to default?",
+		"factory_preset_changed": "Factory preset '{@name}' has been changed previously.\nDo you want to switch to selected preset without saving?",
+		"save_preset_failed": "Failed to save user preset '{@name}', error code: {@code}.\nPlease verify the name of the preset and write permissions on the file system.",
+		"user_preset_changed": "User preset '{@name}' has been changed previously.\nDo you want to switch to selected preset without saving?"
+	},	
+	
 	"site": "{@meta_pkg_site}"
 }
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/titles.json 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/titles.json
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/i18n/us/titles.json	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/i18n/us/titles.json	2025-08-26 18:16:37.377482585 +0000
@@ -11,9 +11,12 @@
 	"import_rew_filter_settings": "Import REW filter settings",
 	"import_settings": "Import settings",
 	
-	"load_audio_file": "Load Audio File",
+	"load_audio_file": "Load audio file",
 	"load_from_file": "Load from file",
 	
+	"preset_management": "Preset management",
+	
+	"save_preset": "Save preset",
 	"save_to_file": "Save to file",
 	
 	"update_notification": "Update notification"
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/schema/legacy-dark.xml 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/schema/legacy-dark.xml
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/schema/legacy-dark.xml	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/schema/legacy-dark.xml	2025-08-26 18:16:37.377482585 +0000
@@ -94,6 +94,7 @@
 		<bg value="#1b1c22"/>
 		<bg_name value="#3b3d49"/>
 		<bg_light value="#25272e"/>
+		<bg_preset value="#1b1c22"/>
 		<bg_schema value="#1b1c22"/>
 		<bg_schema_name value="#1b1c22"/>
 		<border_color value="#373944"/>
@@ -121,7 +122,7 @@
 
 		<!-- Knob -->
 		<kscale value="#239db5"/>
-		<kscale_inactive value="#4b666d"/>
+		<kscale_inactive value="#6f7185"/>
 		<kcap value="#3b3d49"/>
 
 		<!-- Led -->
@@ -368,6 +369,9 @@
 		<LBI_hov value="#575869"/>
 		<LBI_sel value="#373944"/>
 		<LBI_sel_hov value="#606173"/>
+
+		<!-- Overlay -->
+		<overlay_shadow avalue="#88000000"/>
 	</colors>
 
 	<!-- Root style -->
@@ -386,6 +390,13 @@
 
 	<style class="FileDialog" parents="Window"></style>
 
+	<style class="SavePresetDialog" parents="Window">
+		<border.style value="dialog"/>
+		<actions value="move,stick,change_desk"/>
+		<layout.hscale value="1.0"/>
+		<layout.vscale value="1.0"/>
+	</style>
+
 	<style class="MessageBox" parents="Window"></style>
 
 	<style class="PopupWindow" parents="Window"></style>
@@ -437,11 +448,28 @@
 		<border value="1"/>
 	</style>
 
+	<style class="AudioEnvelope" parents="root">
+		<line.width value="2"/>
+		<line.color value="#7c5ba1"/>
+		<fill.color value="#7c5ba1"/>
+		<fill.color.a value="0.8"/>
+		<point.size value="6"/>
+		<point.color value="#7c5ba1"/>
+		<point.hover.color value="#c591ff"/>
+		<border.size value="4"/>
+		<border.radius value="12"/>
+		<border.flat value="false"/>
+		<border.color value="#0000000"/>
+		<glass value="false"/>
+		<glass.color value="#ffffff"/>
+		<ipadding value="0"/>
+	</style>
+
 	<style class="AudioFolder::Active" parents="ListBox">
 		<bg.color value="bg_graph"/>
 	</style>
 
-	<style class="AudioFolder::Inctive" parents="ListBox">
+	<style class="AudioFolder::Inactive" parents="ListBox">
 		<bg.color value="bg_graph"/>
 	</style>
 
@@ -568,6 +596,10 @@
 
 	<style class="Box" parents="root">
 		<bg.inherit value="true"/>
+		<bg.color value="bg_schema"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="Bevel_cycle" parents="root">
@@ -621,6 +653,27 @@
 		<text.padding.left value="4"/>
 		<text.padding.right value="4"/>
 
+		<bg.color value="bg_schema"/>
+
+		<inactive.border.color value="bg_name"/>
+		<inactive.border.hover.color value="bright_gray"/>
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
+
+		<inactive.color value="bg_light"/>
+		<inactive.hover.color value="bg_name"/>
+		<inactive.down.color value="dark_cyan"/>
+		<inactive.down.hover.color value="dark_cyan"/>
+
+		<inactive.text.color value="text_prim"/>
+		<inactive.text.hover.color value="text_sec"/>
+		<inactive.text.down.color value="bright_cyan"/>
+		<inactive.text.down.hover.color value="bright_cyan"/>
+
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
+		<inactive.bg.inherit value="true"/>
 	</style>
 
 	<style class="Button_gray" parents="Button">
@@ -633,6 +686,16 @@
 		<border.down.color value="bright_gray"/>
 		<border.down.hover.color value="gray"/>
 		<led.color value="gray"/>
+
+		<inactive.down.color value="dark_gray"/>
+		<inactive.down.hover.color value="dark_gray"/>
+
+		<inactive.text.down.color value="bright_gray"/>
+		<inactive.text.down.hover.color value="bright_gray"/>
+
+		<inactive.border.down.color value="bright_gray"/>
+		<inactive.border.down.hover.color value="gray"/>
+		<inactive.led.color value="gray"/>
 	</style>
 
 	<style class="Button_inactive" parents="Button">
@@ -645,6 +708,16 @@
 		<border.down.color value="gray"/>
 		<border.down.hover.color value="dark_gray"/>
 		<led.color value="dark_gray"/>
+
+		<inactive.down.color value="darker_gray"/>
+		<inactive.down.hover.color value="darker_gray"/>
+
+		<inactive.text.down.color value="gray"/>
+		<inactive.text.down.hover.color value="gray"/>
+
+		<inactive.border.down.color value="gray"/>
+		<inactive.border.down.hover.color value="dark_gray"/>
+		<inactive.led.color value="dark_gray"/>
 	</style>
 
 	<style class="Button_red" parents="Button">
@@ -657,6 +730,16 @@
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
 		<led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
+		<inactive.led.color value="red"/>
 	</style>
 
 	<style class="Button_orange" parents="Button">
@@ -669,6 +752,16 @@
 		<border.down.color value="bright_orange"/>
 		<border.down.hover.color value="orange"/>
 		<led.color value="orange"/>
+
+		<inactive.down.color value="dark_orange"/>
+		<inactive.down.hover.color value="dark_orange"/>
+
+		<inactive.text.down.color value="bright_orange"/>
+		<inactive.text.down.hover.color value="bright_orange"/>
+
+		<inactive.border.down.color value="bright_orange"/>
+		<inactive.border.down.hover.color value="orange"/>
+		<inactive.led.color value="orange"/>
 	</style>
 
 	<style class="Button_yellow" parents="Button">
@@ -681,6 +774,16 @@
 		<border.down.color value="bright_yellow"/>
 		<border.down.hover.color value="yellow"/>
 		<led.color value="yellow"/>
+
+		<inactive.down.color value="dark_yellow"/>
+		<inactive.down.hover.color value="dark_yellow"/>
+
+		<inactive.text.down.color value="bright_yellow"/>
+		<inactive.text.down.hover.color value="bright_yellow"/>
+
+		<inactive.border.down.color value="bright_yellow"/>
+		<inactive.border.down.hover.color value="yellow"/>
+		<inactive.led.color value="yellow"/>
 	</style>
 
 	<style class="Button_green" parents="Button">
@@ -693,6 +796,16 @@
 		<border.down.color value="bright_green"/>
 		<border.down.hover.color value="green"/>
 		<led.color value="green"/>
+
+		<inactive.down.color value="dark_green"/>
+		<inactive.down.hover.color value="dark_green"/>
+
+		<inactive.text.down.color value="bright_green"/>
+		<inactive.text.down.hover.color value="bright_green"/>
+
+		<inactive.border.down.color value="bright_green"/>
+		<inactive.border.down.hover.color value="green"/>
+		<inactive.led.color value="green"/>
 	</style>
 
 	<style class="Button_cyan" parents="Button">
@@ -704,9 +817,17 @@
 
 		<border.down.color value="bright_cyan"/>
 		<border.down.hover.color value="cyan"/>
-
 		<led.color value="cyan"/>
 
+		<inactive.down.color value="dark_cyan"/>
+		<inactive.down.hover.color value="dark_cyan"/>
+
+		<inactive.text.down.color value="bright_cyan"/>
+		<inactive.text.down.hover.color value="bright_cyan"/>
+
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
+		<inactive.led.color value="cyan"/>
 	</style>
 
 	<style class="Button_blue" parents="Button">
@@ -718,6 +839,17 @@
 
 		<border.down.color value="bright_blue"/>
 		<border.down.hover.color value="blue"/>
+		<led.color value="blue"/>
+
+		<inactive.down.color value="dark_blue"/>
+		<inactive.down.hover.color value="dark_blue"/>
+
+		<inactive.text.down.color value="bright_blue"/>
+		<inactive.text.down.hover.color value="bright_blue"/>
+
+		<inactive.border.down.color value="bright_blue"/>
+		<inactive.border.down.hover.color value="blue"/>
+		<inactive.led.color value="blue"/>
 	</style>
 
 	<style class="Button_violet" parents="Button">
@@ -730,6 +862,16 @@
 		<border.down.color value="bright_violet"/>
 		<border.down.hover.color value="violet"/>
 		<led.color value="violet"/>
+
+		<inactive.down.color value="dark_violet"/>
+		<inactive.down.hover.color value="dark_violet"/>
+
+		<inactive.text.down.color value="bright_violet"/>
+		<inactive.text.down.hover.color value="bright_violet"/>
+
+		<inactive.border.down.color value="bright_violet"/>
+		<inactive.border.down.hover.color value="violet"/>
+		<inactive.led.color value="violet"/>
 	</style>
 
 	<style class="Button_magenta" parents="Button">
@@ -742,6 +884,16 @@
 		<border.down.color value="bright_magenta"/>
 		<border.down.hover.color value="magenta"/>
 		<led.color value="magenta"/>
+
+		<inactive.down.color value="dark_magenta"/>
+		<inactive.down.hover.color value="dark_magenta"/>
+
+		<inactive.text.down.color value="bright_magenta"/>
+		<inactive.text.down.hover.color value="bright_magenta"/>
+
+		<inactive.border.down.color value="bright_magenta"/>
+		<inactive.border.down.hover.color value="magenta"/>
+		<inactive.led.color value="magenta"/>
 	</style>
 
 	<style class="Button_mono" parents="Button">
@@ -754,6 +906,16 @@
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
 		<led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
+		<inactive.led.color value="red"/>
 	</style>
 
 	<style class="Button_left" parents="Button">
@@ -766,6 +928,16 @@
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
 		<led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
+		<inactive.led.color value="red"/>
 	</style>
 
 	<style class="Button_right" parents="Button">
@@ -778,6 +950,16 @@
 		<border.down.color value="bright_blue"/>
 		<border.down.hover.color value="blue"/>
 		<led.color value="blue"/>
+
+		<inactive.down.color value="dark_blue"/>
+		<inactive.down.hover.color value="dark_blue"/>
+
+		<inactive.text.down.color value="bright_blue"/>
+		<inactive.text.down.hover.color value="bright_blue"/>
+
+		<inactive.border.down.color value="bright_blue"/>
+		<inactive.border.down.hover.color value="blue"/>
+		<inactive.led.color value="blue"/>
 	</style>
 
 	<style class="Button_side" parents="Button">
@@ -790,6 +972,16 @@
 		<border.down.color value="bright_green"/>
 		<border.down.hover.color value="green"/>
 		<led.color value="green"/>
+
+		<inactive.down.color value="dark_green"/>
+		<inactive.down.hover.color value="dark_green"/>
+
+		<inactive.text.down.color value="bright_green"/>
+		<inactive.text.down.hover.color value="bright_green"/>
+
+		<inactive.border.down.color value="bright_green"/>
+		<inactive.border.down.hover.color value="green"/>
+		<inactive.led.color value="green"/>
 	</style>
 
 	<style class="Button_mid" parents="Button">
@@ -802,6 +994,16 @@
 		<border.down.color value="bright_cyan"/>
 		<border.down.hover.color value="cyan"/>
 		<led.color value="cyan"/>
+
+		<inactive.down.color value="dark_cyan"/>
+		<inactive.down.hover.color value="dark_cyan"/>
+
+		<inactive.text.down.color value="bright_cyan"/>
+		<inactive.text.down.hover.color value="bright_cyan"/>
+
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
+		<inactive.led.color value="cyan"/>
 	</style>
 
 	<style class="Button_dry" parents="Button">
@@ -814,6 +1016,16 @@
 		<border.down.color value="bright_yellow"/>
 		<border.down.hover.color value="yellow"/>
 		<led.color value="yellow"/>
+
+		<inactive.down.color value="dark_yellow"/>
+		<inactive.down.hover.color value="dark_yellow"/>
+
+		<inactive.text.down.color value="bright_yellow"/>
+		<inactive.text.down.hover.color value="bright_yellow"/>
+
+		<inactive.border.down.color value="bright_yellow"/>
+		<inactive.border.down.hover.color value="yellow"/>
+		<inactive.led.color value="yellow"/>
 	</style>
 
 	<style class="Button_stretch" parents="Button">
@@ -826,6 +1038,16 @@
 		<border.down.color value="#a49851"/>
 		<border.down.hover.color value="#8b8144"/>
 		<led.color value="#8b8144"/>
+
+		<inactive.down.color value="#5e562b"/>
+		<inactive.down.hover.color value="#5e562b"/>
+
+		<inactive.text.down.color value="#a49851"/>
+		<inactive.text.down.hover.color value="#a49851"/>
+
+		<inactive.border.down.color value="#a49851"/>
+		<inactive.border.down.hover.color value="#8b8144"/>
+		<inactive.led.color value="#8b8144"/>
 	</style>
 
 	<style class="Button_loop" parents="Button">
@@ -838,6 +1060,38 @@
 		<border.down.color value="#23b270"/>
 		<border.down.hover.color value="#1b935c"/>
 		<led.color value="#1b935c"/>
+
+		<inactive.down.color value="#0f633c"/>
+		<inactive.down.hover.color value="#0f633c"/>
+
+		<inactive.text.down.color value="#23b270"/>
+		<inactive.text.down.hover.color value="#23b270"/>
+
+		<inactive.border.down.color value="#23b270"/>
+		<inactive.border.down.hover.color value="#1b935c"/>
+		<inactive.led.color value="#1b935c"/>
+	</style>
+
+	<style class="Button_envelope" parents="Button">
+		<down.color value="#68488c"/>
+		<down.hover.color value="#68488c"/>
+
+		<text.down.color value="#b28ed8"/>
+		<text.down.hover.color value="#b28ed8"/>
+
+		<border.down.color value="#b28ed8"/>
+		<border.down.hover.color value="#9572bb"/>
+		<led.color value="#9572bb"/>
+
+		<inactive.down.color value="#68488c"/>
+		<inactive.down.hover.color value="#68488c"/>
+
+		<inactive.text.down.color value="#b28ed8"/>
+		<inactive.text.down.hover.color value="#b28ed8"/>
+
+		<inactive.border.down.color value="#b28ed8"/>
+		<inactive.border.down.hover.color value="#9572bb"/>
+		<inactive.led.color value="#9572bb"/>
 	</style>
 
 	<style class="Button_lufs" parents="Button">
@@ -850,6 +1104,16 @@
 		<border.down.color value="#8ab252"/>
 		<border.down.hover.color value="#6c8b40"/>
 		<led.color value="#6c8b40"/>
+
+		<inactive.down.color value="#485d2b"/>
+		<inactive.down.hover.color value="#485d2b"/>
+
+		<inactive.text.down.color value="#8ab252"/>
+		<inactive.text.down.hover.color value="#8ab252"/>
+
+		<inactive.border.down.color value="#8ab252"/>
+		<inactive.border.down.hover.color value="#6c8b40"/>
+		<inactive.led.color value="#6c8b40"/>
 	</style>
 
 	<style class="Button_ref" parents="Button_cyan"></style>
@@ -864,13 +1128,22 @@
 		<border.down.color value="#ee6753"/>
 		<border.down.hover.color value="reference_mix_1"/>
 		<led.color value="reference_mix_1"/>
+
+		<inactive.down.color value="#b13025"/>
+		<inactive.down.hover.color value="#b13025"/>
+
+		<inactive.text.down.color value="#ee6753"/>
+		<inactive.text.down.hover.color value="#ee6753"/>
+
+		<inactive.border.down.color value="#ee6753"/>
+		<inactive.border.down.hover.color value="reference_mix_1"/>
+		<inactive.led.color value="reference_mix_1"/>
 	</style>
 
 	<style class="Button_both" parents="Button_green"></style>
 
 	<style class="Button_ne_left" parents="Button">
 		<color value="dark_red"/>
-
 		<text.color value="bright_red"/>
 
 		<border.color value="bright_red"/>
@@ -883,11 +1156,24 @@
 
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
+
+		<inactive.color value="dark_red"/>
+		<inactive.text.color value="bright_red"/>
+
+		<inactive.border.color value="bright_red"/>
+		<inactive.led.color value="red"/>
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
 	</style>
 
 	<style class="Button_ne_right" parents="Button">
 		<color value="dark_blue"/>
-
 		<text.color value="bright_blue"/>
 
 		<border.color value="bright_blue"/>
@@ -900,11 +1186,24 @@
 
 		<border.down.color value="bright_blue"/>
 		<border.down.hover.color value="blue"/>
+
+		<inactive.color value="dark_blue"/>
+		<inactive.text.color value="bright_blue"/>
+
+		<inactive.border.color value="bright_blue"/>
+		<inactive.led.color value="blue"/>
+		<inactive.down.color value="dark_blue"/>
+		<inactive.down.hover.color value="dark_blue"/>
+
+		<inactive.text.down.color value="bright_blue"/>
+		<inactive.text.down.hover.color value="bright_blue"/>
+
+		<inactive.border.down.color value="bright_blue"/>
+		<inactive.border.down.hover.color value="blue"/>
 	</style>
 
 	<style class="Button_ne_side" parents="Button">
 		<color value="dark_green"/>
-
 		<text.color value="bright_green"/>
 
 		<border.color value="bright_green"/>
@@ -918,11 +1217,24 @@
 		<border.down.color value="bright_green"/>
 		<border.down.hover.color value="green"/>
 
+		<inactive.color value="dark_green"/>
+		<inactive.text.color value="bright_green"/>
+
+		<inactive.border.color value="bright_green"/>
+		<inactive.led.color value="green"/>
+		<inactive.down.color value="dark_green"/>
+		<inactive.down.hover.color value="dark_green"/>
+
+		<inactive.text.down.color value="bright_green"/>
+		<inactive.text.down.hover.color value="bright_green"/>
+
+		<inactive.border.down.color value="bright_green"/>
+		<inactive.border.down.hover.color value="green"/>
+
 	</style>
 
 	<style class="Button_ne_mid" parents="Button">
 		<color value="dark_cyan"/>
-
 		<text.color value="bright_cyan"/>
 
 		<border.color value="bright_cyan"/>
@@ -935,11 +1247,24 @@
 
 		<border.down.color value="bright_cyan"/>
 		<border.down.hover.color value="cyan"/>
+
+		<inactive.color value="dark_cyan"/>
+		<inactive.text.color value="bright_cyan"/>
+
+		<inactive.border.color value="bright_cyan"/>
+		<inactive.led.color value="cyan"/>
+		<inactive.down.color value="dark_cyan"/>
+		<inactive.down.hover.color value="dark_cyan"/>
+
+		<inactive.text.down.color value="bright_cyan"/>
+		<inactive.text.down.hover.color value="bright_cyan"/>
+
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
 	</style>
 
 	<style class="Button_ne_dry" parents="Button">
 		<color value="dark_yellow"/>
-
 		<text.color value="bright_yellow"/>
 
 		<border.color value="bright_yellow"/>
@@ -952,6 +1277,20 @@
 
 		<border.down.color value="bright_yellow"/>
 		<border.down.hover.color value="yellow"/>
+
+		<inactive.color value="dark_yellow"/>
+		<inactive.text.color value="bright_yellow"/>
+
+		<inactive.border.color value="bright_yellow"/>
+		<inactive.led.color value="yellow"/>
+		<inactive.down.color value="dark_yellow"/>
+		<inactive.down.hover.color value="dark_yellow"/>
+
+		<inactive.text.down.color value="bright_yellow"/>
+		<inactive.text.down.hover.color value="bright_yellow"/>
+
+		<inactive.border.down.color value="bright_yellow"/>
+		<inactive.border.down.hover.color value="yellow"/>
 	</style>
 
 	<style class="Button_ne_Cycle" parents="Button_gray_8">
@@ -967,6 +1306,19 @@
 
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
+
+		<inactive.color value="dark_red"/>
+		<inactive.text.color value="bright_red"/>
+		<inactive.border.color value="bright_red"/>
+		<inactive.led.color value="red"/>
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
 	</style>
 
 	<style class="Button_gray_8" parents="Button_gray">
@@ -1220,6 +1572,15 @@
 		<border.gap.color value="bg_light"/>
 		<pointer value="hand"/>
 		<bg.inherit value="true"/>
+
+		<inactive.color value="bg_light"/>
+		<inactive.text.color value="text_prim"/>
+		<inactive.spin.color value="bg_light"/>
+		<inactive.spin.text.color value="text_sec"/>
+		<inactive.border.color value="bg"/>
+		<inactive.border.gap.color value="bg_light"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
 	</style>
 
 	<style class="ComboBox::List" parents="root">
@@ -1231,6 +1592,11 @@
 		<border.color value="border_color"/>
 		<pointer value="hand"/>
 		<hscroll.mode value="none"/>
+
+		<inactive.list.bg.color value="bg"/>
+		<inactive.border.color value="border_color"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
 	</style>
 
 	<style class="Edit" parents="root">
@@ -1538,6 +1904,15 @@
 		<hole.color value="black"/>
 		<scale.marks value="true"/>
 		<pointer value="hand"/>
+
+		<bg.color value="bg_schema"/>
+
+		<inactive.scale.color value="kscale_inactive"/>
+		<inactive.color value="kcap"/>
+		<inactive.tip.color value="bg"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="Knob_meter_threshold" parents="Knob">
@@ -1559,6 +1934,13 @@
 		<allocation.hfill value="false"/>
 		<allocation.vfill value="false"/>
 		<bg.inherit value="true"/>
+
+		<bg.color value="bg_schema"/>
+
+		<inactive.text.color value="text_sec"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="LedMeter" parents="root">
@@ -1605,6 +1987,16 @@
 		<round value="true"/>
 		<gradient value="false"/>
 		<hole value="false"/>
+
+		<bg.color value="bg_schema"/>
+
+		<inactive.color value="led_c"/>
+		<inactive.led.color value="led_l"/>
+		<inactive.border.color value="led_bc"/>
+		<inactive.led.border.color value="led_bl"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="Led_red" parents="root">
@@ -1690,6 +2082,17 @@
 		<text.hover.color value="text_icon"/>
 		<text.selected.color value="text_icon"/>
 		<text.selected.hover.color value="text_icon"/>
+
+		<inactive.bg.color value="bg"/>
+		<inactive.bg.hover.color value="LBI_hov"/>
+		<inactive.bg.selected.color value="LBI_sel"/>
+		<inactive.bg.selected.hover.color value="LBI_sel_hov"/>
+		<inactive.text.color value="text_prim"/>
+		<inactive.text.hover.color value="text_icon"/>
+		<inactive.text.selected.color value="text_icon"/>
+		<inactive.text.selected.hover.color value="text_icon"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
 	</style>
 
 	<style class="Menu" parents="root">
@@ -1796,6 +2199,23 @@
 		<z.color value="area3d_z"/>
 	</style>
 
+	<style class="Overlay" parents="root">
+		<visible value="false"/>
+		<transparency value="0"/>
+		<border.size value="0"/>
+		<border.radius value="11"/>
+		<border.rounding value="lb,rt,rb"/>
+		<border.color value="black"/>
+		<shadow.size value="24"/>
+		<shadow.radius value="8"/>
+		<shadow.rounding value="lt"/>
+		<shadow.start value="overlay_shadow"/>
+		<shadow.end value="overlay_shadow"/>
+		<padding value="24"/>
+		<ipadding value="0"/>
+		<close.auto value="true"/>
+	</style>
+
 	<style class="ProgressBar" parents="root">
 		<border.radius value="4"/>
 		<border.size value="2"/>
@@ -1954,6 +2374,8 @@
 		<border.gap.color value="bg_light"/>
 	</style>
 
+	<style class="FileDialog::Input" parents="FileDialog::Search"></style>
+
 	<style class="FileDialog::Warning" parents="root">
 		<text.color value="warn"/>
 	</style>
@@ -2261,4 +2683,23 @@
 		<layout.vscale value="1.0"/>
 	</style>
 
+	<!-- PresetsDialog widgets -->
+	<style class="PresetsDialog" parents="Window">
+		<padding value="4"/>
+		<border.style value="none"/>
+		<layout.hscale value="1.0"/>
+		<layout.vscale value="1.0"/>
+	</style>
+
+	<style class="PresetsTab" parents="TabControl">
+		<heading value="-1 1 0 0"/>
+		<heading.gap value="0"/>
+		<heading.spacing value="0"/>
+		<heading.spacing.fill value="false"/>
+	</style>
+
+	<style class="PresetsList" parents="ListBox">
+		<border.size value="0"/>
+	</style>
+
 </schema>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/schema/legacy.xml 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/schema/legacy.xml
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/schema/legacy.xml	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/schema/legacy.xml	2025-08-26 18:16:37.377482585 +0000
@@ -94,6 +94,7 @@
 		<bg value="#1b1c22"/>
 		<bg_name value="#ebecee"/>
 		<bg_light value="#25272e"/>
+		<bg_preset value="#1b1c22"/>
 		<bg_schema value="#1b1c22"/>
 		<bg_schema_name value="#1b1c22"/>
 		<border_color value="#373943"/>
@@ -302,7 +303,7 @@
 		<fade_in value="#ffff00"/>
 		<fade_out value="#ffff00"/>
 		<stretch value="#0088ff"/>
-		<loop value="#8800ff"/>
+		<loop value="#ff9900"/>
 
 		<!-- Cycle colors -->
 		<cycle value="#ff0000"/>
@@ -317,10 +318,10 @@
 		<stretch_border_color avalue="#000088ff"/>
 		<stretch_color_off avalue="#ee0088ff"/>
 		<stretch_border_color_off avalue="#880088ff"/>
-		<loop_color avalue="#888800ff"/>
-		<loop_border_color avalue="#008800ff"/>
-		<loop_color_off avalue="#ee8800ff"/>
-		<loop_border_color_off avalue="#888800ff"/>
+		<loop_color avalue="#88ff9900"/>
+		<loop_border_color avalue="#00ff9900"/>
+		<loop_color_off avalue="#eeff9900"/>
+		<loop_border_color_off avalue="#88ff9900"/>
 
 		<!-- Button colors -->
 		<button_cyan_rating_color value="#cccccc"/>
@@ -371,6 +372,9 @@
 		<LBI_hov value="#cccccc"/>
 		<LBI_sel value="#ebecee"/>
 		<LBI_sel_hov value="#ebecee"/>
+
+		<!-- Overlay -->
+		<overlay_shadow value="#000000"/>
 	</colors>
 
 	<!-- Root style -->
@@ -389,6 +393,13 @@
 
 	<style class="FileDialog" parents="Window"></style>
 
+	<style class="SavePresetDialog" parents="Window">
+		<border.style value="dialog"/>
+		<actions value="move,stick,change_desk"/>
+		<layout.hscale value="1.0"/>
+		<layout.vscale value="1.0"/>
+	</style>
+
 	<style class="MessageBox" parents="Window"></style>
 
 	<style class="PopupWindow" parents="Window"></style>
@@ -440,11 +451,28 @@
 		<border value="1"/>
 	</style>
 
+	<style class="AudioEnvelope" parents="root">
+		<line.width value="2"/>
+		<line.color value="#7c00e9"/>
+		<fill.color value="#7c00e9"/>
+		<fill.color.a value="0.6"/>
+		<point.size value="6"/>
+		<point.color value="#7c00e9"/>
+		<point.hover.color value="#8800ff"/>
+		<border.size value="4"/>
+		<border.radius value="12"/>
+		<border.flat value="true"/>
+		<border.color value="#ffffff"/>
+		<glass value="true"/>
+		<glass.color value="#ffffff"/>
+		<ipadding value="1"/>
+	</style>
+
 	<style class="AudioFolder::Active" parents="ListBox">
 		<bg.color value="bg_graph"/>
 	</style>
 
-	<style class="AudioFolder::Inctive" parents="ListBox">
+	<style class="AudioFolder::Inactive" parents="ListBox">
 		<bg.color value="bg_graph"/>
 	</style>
 
@@ -571,6 +599,10 @@
 
 	<style class="Box" parents="root">
 		<bg.inherit value="true"/>
+		<bg.color value="bg_schema"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="Bevel_cycle" parents="root">
@@ -602,8 +634,8 @@
 
 		<color value="button_face"/>
 		<hover.color value="button_hface"/>
-		<down.color value="bright_gray"/>
-		<down.hover.color value="dark_gray"/>
+		<down.color value="kscale"/>
+		<down.hover.color value="kscale"/>
 
 		<text.color value="bg"/>
 		<text.hover.color value="bg"/>
@@ -624,10 +656,30 @@
 		<text.padding.left value="4"/>
 		<text.padding.right value="4"/>
 
+		<bg.color value="bg_schema"/>
+
+		<inactive.border.color value="gray"/>
+		<inactive.border.hover.color value="gray"/>
+		<inactive.border.down.color value="bright_gray"/>
+		<inactive.border.down.hover.color value="gray"/>
+
+		<inactive.color value="button_face"/>
+		<inactive.hover.color value="button_hface"/>
+		<inactive.down.color value="bright_gray"/>
+		<inactive.down.hover.color value="dark_gray"/>
+
+		<inactive.text.color value="bg"/>
+		<inactive.text.hover.color value="bg"/>
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
+		<inactive.bg.inherit value="true"/>
 	</style>
 
 	<style class="Button_gray" parents="Button">
-
 		<down.color value="bright_gray"/>
 		<down.hover.color value="gray"/>
 
@@ -637,6 +689,16 @@
 		<border.down.color value="bright_gray"/>
 		<border.down.hover.color value="gray"/>
 		<led.color value="gray"/>
+
+		<inactive.down.color value="bright_gray"/>
+		<inactive.down.hover.color value="gray"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_gray"/>
+		<inactive.border.down.hover.color value="gray"/>
+		<inactive.led.color value="gray"/>
 	</style>
 
 	<style class="Button_inactive" parents="Button">
@@ -649,10 +711,19 @@
 		<border.down.color value="gray"/>
 		<border.down.hover.color value="dark_gray"/>
 		<led.color value="dark_gray"/>
+
+		<inactive.down.color value="darker_gray"/>
+		<inactive.down.hover.color value="darker_gray"/>
+
+		<inactive.text.down.color value="gray"/>
+		<inactive.text.down.hover.color value="gray"/>
+
+		<inactive.border.down.color value="gray"/>
+		<inactive.border.down.hover.color value="dark_gray"/>
+		<inactive.led.color value="dark_gray"/>
 	</style>
 
 	<style class="Button_red" parents="Button">
-
 		<down.color value="bright_red"/>
 		<down.hover.color value="red"/>
 
@@ -662,10 +733,19 @@
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
 		<led.color value="red"/>
+
+		<inactive.down.color value="bright_red"/>
+		<inactive.down.hover.color value="red"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
+		<inactive.led.color value="red"/>
 	</style>
 
 	<style class="Button_orange" parents="Button">
-
 		<down.color value="bright_orange"/>
 		<down.hover.color value="orange"/>
 
@@ -675,10 +755,19 @@
 		<border.down.color value="bright_orange"/>
 		<border.down.hover.color value="orange"/>
 		<led.color value="orange"/>
+
+		<inactive.down.color value="bright_orange"/>
+		<inactive.down.hover.color value="orange"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_orange"/>
+		<inactive.border.down.hover.color value="orange"/>
+		<inactive.led.color value="orange"/>
 	</style>
 
 	<style class="Button_yellow" parents="Button">
-
 		<down.color value="bright_yellow"/>
 		<down.hover.color value="yellow"/>
 
@@ -688,10 +777,19 @@
 		<border.down.color value="bright_yellow"/>
 		<border.down.hover.color value="yellow"/>
 		<led.color value="yellow"/>
+
+		<inactive.down.color value="bright_yellow"/>
+		<inactive.down.hover.color value="yellow"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_yellow"/>
+		<inactive.border.down.hover.color value="yellow"/>
+		<inactive.led.color value="yellow"/>
 	</style>
 
 	<style class="Button_green" parents="Button">
-
 		<down.color value="bright_green"/>
 		<down.hover.color value="green"/>
 
@@ -701,10 +799,19 @@
 		<border.down.color value="bright_green"/>
 		<border.down.hover.color value="green"/>
 		<led.color value="green"/>
+
+		<inactive.down.color value="bright_green"/>
+		<inactive.down.hover.color value="green"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_green"/>
+		<inactive.border.down.hover.color value="green"/>
+		<inactive.led.color value="green"/>
 	</style>
 
 	<style class="Button_cyan" parents="Button">
-
 		<down.color value="bright_cyan"/>
 		<down.hover.color value="cyan"/>
 
@@ -714,10 +821,19 @@
 		<border.down.color value="bright_cyan"/>
 		<border.down.hover.color value="cyan"/>
 		<led.color value="cyan"/>
+
+		<inactive.down.color value="bright_cyan"/>
+		<inactive.down.hover.color value="cyan"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
+		<inactive.led.color value="cyan"/>
 	</style>
 
 	<style class="Button_blue" parents="Button">
-
 		<down.color value="bright_blue"/>
 		<down.hover.color value="blue"/>
 
@@ -727,10 +843,19 @@
 		<border.down.color value="bright_blue"/>
 		<border.down.hover.color value="blue"/>
 		<led.color value="blue"/>
+
+		<inactive.down.color value="bright_blue"/>
+		<inactive.down.hover.color value="blue"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_blue"/>
+		<inactive.border.down.hover.color value="blue"/>
+		<inactive.led.color value="blue"/>
 	</style>
 
 	<style class="Button_violet" parents="Button">
-
 		<down.color value="bright_violet"/>
 		<down.hover.color value="violet"/>
 
@@ -740,10 +865,19 @@
 		<border.down.color value="bright_violet"/>
 		<border.down.hover.color value="violet"/>
 		<led.color value="violet"/>
+
+		<inactive.down.color value="bright_violet"/>
+		<inactive.down.hover.color value="violet"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_violet"/>
+		<inactive.border.down.hover.color value="violet"/>
+		<inactive.led.color value="violet"/>
 	</style>
 
 	<style class="Button_magenta" parents="Button">
-
 		<down.color value="bright_magenta"/>
 		<down.hover.color value="magenta"/>
 
@@ -753,6 +887,16 @@
 		<border.down.color value="bright_magenta"/>
 		<border.down.hover.color value="magenta"/>
 		<led.color value="magenta"/>
+
+		<inactive.down.color value="bright_magenta"/>
+		<inactive.down.hover.color value="magenta"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_magenta"/>
+		<inactive.border.down.hover.color value="magenta"/>
+		<inactive.led.color value="magenta"/>
 	</style>
 
 	<style class="Button_mono" parents="Button">
@@ -765,6 +909,16 @@
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
 		<led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
+		<inactive.led.color value="red"/>
 	</style>
 
 	<style class="Button_left" parents="Button">
@@ -777,6 +931,16 @@
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
 		<led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
+		<inactive.led.color value="red"/>
 	</style>
 
 	<style class="Button_right" parents="Button">
@@ -789,6 +953,16 @@
 		<border.down.color value="bright_blue"/>
 		<border.down.hover.color value="blue"/>
 		<led.color value="blue"/>
+
+		<inactive.down.color value="dark_blue"/>
+		<inactive.down.hover.color value="dark_blue"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_blue"/>
+		<inactive.border.down.hover.color value="blue"/>
+		<inactive.led.color value="blue"/>
 	</style>
 
 	<style class="Button_mid" parents="Button">
@@ -801,6 +975,16 @@
 		<border.down.color value="bright_cyan"/>
 		<border.down.hover.color value="cyan"/>
 		<led.color value="cyan"/>
+
+		<inactive.down.color value="dark_cyan"/>
+		<inactive.down.hover.color value="dark_cyan"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
+		<inactive.led.color value="cyan"/>
 	</style>
 
 	<style class="Button_side" parents="Button">
@@ -813,6 +997,16 @@
 		<border.down.color value="bright_green"/>
 		<border.down.hover.color value="green"/>
 		<led.color value="green"/>
+
+		<inactive.down.color value="dark_green"/>
+		<inactive.down.hover.color value="dark_green"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_green"/>
+		<inactive.border.down.hover.color value="green"/>
+		<inactive.led.color value="green"/>
 	</style>
 
 	<style class="Button_dry" parents="Button">
@@ -825,6 +1019,16 @@
 		<border.down.color value="bright_yellow"/>
 		<border.down.hover.color value="yellow"/>
 		<led.color value="yellow"/>
+
+		<inactive.down.color value="dark_yellow"/>
+		<inactive.down.hover.color value="dark_yellow"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="bright_yellow"/>
+		<inactive.border.down.hover.color value="yellow"/>
+		<inactive.led.color value="yellow"/>
 	</style>
 
 	<style class="Button_stretch" parents="Button">
@@ -837,9 +1041,41 @@
 		<border.down.color value="#0088ff"/>
 		<border.down.hover.color value="#007ce9"/>
 		<led.color value="#007ce9"/>
+
+		<inactive.down.color value="#0088ff"/>
+		<inactive.down.hover.color value="#007ce9"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="#0088ff"/>
+		<inactive.border.down.hover.color value="#007ce9"/>
+		<inactive.led.color value="#007ce9"/>
 	</style>
 
 	<style class="Button_loop" parents="Button">
+		<down.color value="#ff9900"/>
+		<down.hover.color value="#e88b00"/>
+
+		<text.down.color value="bg"/>
+		<text.down.hover.color value="bg"/>
+
+		<border.down.color value="#ff9900"/>
+		<border.down.hover.color value="#e88b00"/>
+		<led.color value="#e88b00"/>
+
+		<inactive.down.color value="#ff9900"/>
+		<inactive.down.hover.color value="#e88b00"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="#ff9900"/>
+		<inactive.border.down.hover.color value="#e88b00"/>
+		<inactive.led.color value="#e88b00"/>
+	</style>
+
+	<style class="Button_envelope" parents="Button">
 		<down.color value="#8800ff"/>
 		<down.hover.color value="#7c00e9"/>
 
@@ -849,6 +1085,16 @@
 		<border.down.color value="#8800ff"/>
 		<border.down.hover.color value="#7c00e9"/>
 		<led.color value="#7c00e9"/>
+
+		<inactive.down.color value="#8800ff"/>
+		<inactive.down.hover.color value="#7c00e9"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="#8800ff"/>
+		<inactive.border.down.hover.color value="#7c00e9"/>
+		<inactive.led.color value="#7c00e9"/>
 	</style>
 
 	<style class="Button_lufs" parents="Button">
@@ -861,6 +1107,16 @@
 		<border.down.color value="#91bc52"/>
 		<border.down.hover.color value="#7ca148"/>
 		<led.color value="#7ca148"/>
+
+		<inactive.down.color value="#91bc52"/>
+		<inactive.down.hover.color value="#7ca148"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="#91bc52"/>
+		<inactive.border.down.hover.color value="#7ca148"/>
+		<inactive.led.color value="#7ca148"/>
 	</style>
 
 	<style class="Button_ref" parents="Button_cyan"></style>
@@ -875,17 +1131,27 @@
 		<border.down.color value="#ff5b37"/>
 		<border.down.hover.color value="reference_mix_1"/>
 		<led.color value="reference_mix_1"/>
+
+		<inactive.down.color value="#ff5b37"/>
+		<inactive.down.hover.color value="reference_mix_1"/>
+
+		<inactive.text.down.color value="bg"/>
+		<inactive.text.down.hover.color value="bg"/>
+
+		<inactive.border.down.color value="#ff5b37"/>
+		<inactive.border.down.hover.color value="reference_mix_1"/>
+		<inactive.led.color value="reference_mix_1"/>
 	</style>
 
 	<style class="Button_both" parents="Button_green"></style>
 
 	<style class="Button_ne_left" parents="Button">
 		<color value="dark_red"/>
-
 		<text.color value="bright_red"/>
 
 		<border.color value="bright_red"/>
 		<led.color value="red"/>
+
 		<down.color value="dark_red"/>
 		<down.hover.color value="dark_red"/>
 
@@ -894,11 +1160,25 @@
 
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
+
+		<inactive.color value="dark_red"/>
+		<inactive.text.color value="bright_red"/>
+
+		<inactive.border.color value="bright_red"/>
+		<inactive.led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
 	</style>
 
 	<style class="Button_ne_right" parents="Button">
 		<color value="dark_blue"/>
-
 		<text.color value="bright_blue"/>
 
 		<border.color value="bright_blue"/>
@@ -911,11 +1191,24 @@
 
 		<border.down.color value="bright_blue"/>
 		<border.down.hover.color value="blue"/>
+
+		<inactive.color value="dark_blue"/>
+		<inactive.text.color value="bright_blue"/>
+
+		<inactive.border.color value="bright_blue"/>
+		<inactive.led.color value="blue"/>
+		<inactive.down.color value="dark_blue"/>
+		<inactive.down.hover.color value="dark_blue"/>
+
+		<inactive.text.down.color value="bright_blue"/>
+		<inactive.text.down.hover.color value="bright_blue"/>
+
+		<inactive.border.down.color value="bright_blue"/>
+		<inactive.border.down.hover.color value="blue"/>
 	</style>
 
 	<style class="Button_ne_side" parents="Button">
 		<color value="dark_green"/>
-
 		<text.color value="bright_green"/>
 
 		<border.color value="bright_green"/>
@@ -929,11 +1222,23 @@
 		<border.down.color value="bright_green"/>
 		<border.down.hover.color value="green"/>
 
+		<inactive.color value="dark_green"/>
+		<inactive.text.color value="bright_green"/>
+
+		<inactive.border.color value="bright_green"/>
+		<inactive.led.color value="green"/>
+		<inactive.down.color value="dark_green"/>
+		<inactive.down.hover.color value="dark_green"/>
+
+		<inactive.text.down.color value="bright_green"/>
+		<inactive.text.down.hover.color value="bright_green"/>
+
+		<inactive.border.down.color value="bright_green"/>
+		<inactive.border.down.hover.color value="green"/>
 	</style>
 
 	<style class="Button_ne_mid" parents="Button">
 		<color value="dark_cyan"/>
-
 		<text.color value="bright_cyan"/>
 
 		<border.color value="bright_cyan"/>
@@ -946,11 +1251,24 @@
 
 		<border.down.color value="bright_cyan"/>
 		<border.down.hover.color value="cyan"/>
+
+		<inactive.color value="dark_cyan"/>
+		<inactive.text.color value="bright_cyan"/>
+
+		<inactive.border.color value="bright_cyan"/>
+		<inactive.led.color value="cyan"/>
+		<inactive.down.color value="dark_cyan"/>
+		<inactive.down.hover.color value="dark_cyan"/>
+
+		<inactive.text.down.color value="bright_cyan"/>
+		<inactive.text.down.hover.color value="bright_cyan"/>
+
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
 	</style>
 
 	<style class="Button_ne_dry" parents="Button">
 		<color value="dark_yellow"/>
-
 		<text.color value="bright_yellow"/>
 
 		<border.color value="bright_yellow"/>
@@ -963,13 +1281,29 @@
 
 		<border.down.color value="bright_yellow"/>
 		<border.down.hover.color value="yellow"/>
+
+		<inactive.color value="dark_yellow"/>
+		<inactive.text.color value="bright_yellow"/>
+
+		<inactive.border.color value="bright_yellow"/>
+		<inactive.led.color value="yellow"/>
+		<inactive.down.color value="dark_yellow"/>
+		<inactive.down.hover.color value="dark_yellow"/>
+
+		<inactive.text.down.color value="bright_yellow"/>
+		<inactive.text.down.hover.color value="bright_yellow"/>
+
+		<inactive.border.down.color value="bright_yellow"/>
+		<inactive.border.down.hover.color value="yellow"/>
 	</style>
 
 	<style class="Button_ne_Cycle" parents="Button_gray_8">
 		<color value="dark_red"/>
 		<text.color value="bright_red"/>
+
 		<border.color value="bright_red"/>
 		<led.color value="red"/>
+
 		<down.color value="dark_red"/>
 		<down.hover.color value="dark_red"/>
 
@@ -978,6 +1312,21 @@
 
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
+
+		<inactive.color value="dark_red"/>
+		<inactive.text.color value="bright_red"/>
+
+		<inactive.border.color value="bright_red"/>
+		<inactive.led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
 	</style>
 
 	<style class="Button_gray_8" parents="Button_gray">
@@ -1231,6 +1580,15 @@
 		<border.gap.color value="bg_name"/>
 		<pointer value="hand"/>
 		<bg.inherit value="true"/>
+
+		<inactive.color value="bg_name"/>
+		<inactive.text.color value="bg"/>
+		<inactive.spin.color value="bg_name"/>
+		<inactive.spin.text.color value="bg"/>
+		<inactive.border.color value="bg"/>
+		<inactive.border.gap.color value="bg_name"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
 	</style>
 
 	<style class="ComboBox::List" parents="root">
@@ -1242,6 +1600,11 @@
 		<list.bg.color value="bg"/>
 		<border.color value="bg_name"/>
 		<pointer value="hand"/>
+
+		<inactive.list.bg.color value="bg"/>
+		<inactive.border.color value="bg_name"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
 	</style>
 
 	<style class="Edit" parents="root">
@@ -1544,6 +1907,15 @@
 		<hole.color value="black"/>
 		<scale.marks value="true"/>
 		<pointer value="hand"/>
+
+		<bg.color value="bg_schema"/>
+
+		<inactive.scale.color value="kscale_inactive"/>
+		<inactive.color value="kcap"/>
+		<inactive.tip.color value="bg_name"/>
+		<inactive.brighness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="Knob_meter_threshold" parents="Knob">
@@ -1565,6 +1937,13 @@
 		<allocation.hfill value="false"/>
 		<allocation.vfill value="false"/>
 		<bg.inherit value="true"/>
+
+		<bg.color value="bg_schema"/>
+
+		<inactive.text.color value="text_sec"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="LedMeter" parents="root">
@@ -1611,6 +1990,16 @@
 		<round value="true"/>
 		<gradient value="true"/>
 		<hole value="false"/>
+
+		<bg.color value="bg_schema"/>
+
+		<inactive.color value="led_c"/>
+		<inactive.led.color value="led_l"/>
+		<inactive.border.color value="led_bc"/>
+		<inactive.led.border.color value="led_bl"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="1.0"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="Led_red" parents="root">
@@ -1695,6 +2084,17 @@
 		<text.hover.color value="bg"/>
 		<text.selected.color value="bg"/>
 		<text.selected.hover.color value="bg"/>
+
+		<inactive.bg.color value="bg"/>
+		<inactive.bg.hover.color value="LBI_hov"/>
+		<inactive.bg.selected.color value="LBI_sel"/>
+		<inactive.bg.selected.hover.color value="LBI_sel_hov"/>
+		<inactive.text.color value="text_sec"/>
+		<inactive.text.hover.color value="bg"/>
+		<inactive.text.selected.color value="bg"/>
+		<inactive.text.selected.hover.color value="bg"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
 	</style>
 
 	<style class="Menu" parents="root">
@@ -1800,6 +2200,23 @@
 		<z.color value="area3d_z"/>
 	</style>
 
+	<style class="Overlay" parents="root">
+		<visible value="false"/>
+		<transparency value="0"/>
+		<border.size value="0"/>
+		<border.radius value="11"/>
+		<border.rounding value="lb,rt,rb"/>
+		<border.color value="black"/>
+		<shadow.size value="24"/>
+		<shadow.radius value="8"/>
+		<shadow.rounding value="lt"/>
+		<shadow.start value="overlay_shadow"/>
+		<shadow.end value="overlay_shadow"/>
+		<padding value="24"/>
+		<ipadding value="0"/>
+		<close.auto value="true"/>
+	</style>
+
 	<style class="ProgressBar" parents="root">
 		<border.radius value="4"/>
 		<border.size value="1"/>
@@ -1964,6 +2381,8 @@
 		<border.gap.color value="bg_name"/>
 	</style>
 
+	<style class="FileDialog::Input" parents="FileDialog::Search"></style>
+
 	<style class="FileDialog::Warning" parents="root">
 		<text.color value="warn"/>
 	</style>
@@ -2273,4 +2692,23 @@
 		<layout.vscale value="1.0"/>
 	</style>
 
+	<!-- PresetsDialog widgets -->
+	<style class="PresetsDialog" parents="Window">
+		<padding value="4"/>
+		<border.style value="none"/>
+		<layout.hscale value="1.0"/>
+		<layout.vscale value="1.0"/>
+	</style>
+
+	<style class="PresetsTab" parents="TabControl">
+		<heading value="-1 1 0 0"/>
+		<heading.gap value="0"/>
+		<heading.spacing value="0"/>
+		<heading.spacing.fill value="false"/>
+	</style>
+
+	<style class="PresetsList" parents="ListBox">
+		<border.size value="0"/>
+	</style>
+
 </schema>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/schema/modern.xml 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/schema/modern.xml
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/schema/modern.xml	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/schema/modern.xml	2025-08-26 18:16:37.377482585 +0000
@@ -94,6 +94,7 @@
 		<bg value="#1b1c22"/>
 		<bg_name value="#373944"/>
 		<bg_light value="#25272e"/>
+		<bg_preset value="#1f2027"/>
 		<bg_schema value="#25272e"/>
 		<bg_schema_name value="#373944"/>
 		<border_color value="#373944"/>
@@ -118,8 +119,8 @@
 
 		<!-- Knob -->
 		<kscale value="#3496ab"/>
-		<kscale_inactive value="#4b666d"/>
-		<kcap value="#797d81"/>
+		<kscale_inactive value="#6f7185"/>
+		<kcap value="#1b1c22"/>
 
 		<!-- Led -->
 		<led_c value="#2b2d35"/>
@@ -170,7 +171,7 @@
 
 		<!-- Knob and meshes colors -->
 		<mono_in value="#bf6455"/>
-		<mono value="#d8412a"/>
+		<mono value="#ce6e5f"/>
 
 		<left_in value="#bf6455"/>
 		<right_in value="#717eae"/>
@@ -354,13 +355,22 @@
 		<LBI_hov value="#575869"/>
 		<LBI_sel value="#373944"/>
 		<LBI_sel_hov value="#606173"/>
+
+		<!-- Overlay -->
+		<overlay_shadow avalue="#88000000"/>
 	</colors>
 
 	<!-- Root style -->
 	<root>
 		<size.scaling value="1.0"/>
 		<lang value="us"/>
+
 		<bg.color value="bg"/>
+
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.color value="bg"/>
+		<inactive.bg.brightness value="1.0"/>
+
 		<font.name value="noto-sans-display"/>
 		<font.antialiasing value="true"/>
 		<font.size value="12.0"/>
@@ -372,6 +382,13 @@
 
 	<style class="FileDialog" parents="Window"></style>
 
+	<style class="SavePresetDialog" parents="Window">
+		<border.style value="dialog"/>
+		<actions value="move,stick,change_desk"/>
+		<layout.hscale value="1.0"/>
+		<layout.vscale value="1.0"/>
+	</style>
+
 	<style class="MessageBox" parents="Window"></style>
 
 	<style class="PopupWindow" parents="Window"></style>
@@ -423,11 +440,28 @@
 		<border value="1"/>
 	</style>
 
+	<style class="AudioEnvelope" parents="root">
+		<line.width value="2"/>
+		<line.color value="#7c5ba1"/>
+		<fill.color value="#7c5ba1"/>
+		<fill.color.a value="0.8"/>
+		<point.size value="6"/>
+		<point.color value="#7c5ba1"/>
+		<point.hover.color value="#c591ff"/>
+		<border.size value="4"/>
+		<border.radius value="12"/>
+		<border.flat value="false"/>
+		<border.color value="#0000000"/>
+		<glass value="false"/>
+		<glass.color value="#ffffff"/>
+		<ipadding value="0"/>
+	</style>
+
 	<style class="AudioFolder::Active" parents="ListBox">
 		<bg.color value="bg_graph"/>
 	</style>
 
-	<style class="AudioFolder::Inctive" parents="ListBox">
+	<style class="AudioFolder::Inactive" parents="ListBox">
 		<bg.color value="bg_graph"/>
 	</style>
 
@@ -554,6 +588,10 @@
 
 	<style class="Box" parents="root">
 		<bg.inherit value="true"/>
+		<bg.color value="bg_schema"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="Bevel_cycle" parents="root">
@@ -606,6 +644,27 @@
 		<text.padding.left value="4"/>
 		<text.padding.right value="4"/>
 
+		<bg.color value="bg_schema"/>
+
+		<inactive.border.color value="bg_name"/>
+		<inactive.border.hover.color value="bright_gray"/>
+		<inactive.border.down.color value="bg_name"/>
+		<inactive.border.down.hover.color value="bright_gray"/>
+
+		<inactive.color value="bg_light"/>
+		<inactive.hover.color value="bg_name"/>
+		<inactive.down.color value="bg_light"/>
+		<inactive.down.hover.color value="bg_name"/>
+
+		<inactive.text.color value="text_prim"/>
+		<inactive.text.hover.color value="text_sec"/>
+		<inactive.text.down.color value="text_prim"/>
+		<inactive.text.down.hover.color value="text_sec"/>
+
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
+		<inactive.bg.color value="bg_schema"/>
+		<inactive.bg.inherit value="true"/>
 	</style>
 
 	<style class="Button_gray" parents="Button">
@@ -618,6 +677,16 @@
 		<border.down.color value="bright_gray"/>
 		<border.down.hover.color value="gray"/>
 		<led.color value="gray"/>
+
+		<inactive.down.color value="dark_gray"/>
+		<inactive.down.hover.color value="dark_gray"/>
+
+		<inactive.text.down.color value="bright_gray"/>
+		<inactive.text.down.hover.color value="bright_gray"/>
+
+		<inactive.border.down.color value="bright_gray"/>
+		<inactive.border.down.hover.color value="gray"/>
+		<inactive.led.color value="gray"/>
 	</style>
 
 	<style class="Button_inactive" parents="Button">
@@ -630,6 +699,16 @@
 		<border.down.color value="gray"/>
 		<border.down.hover.color value="dark_gray"/>
 		<led.color value="dark_gray"/>
+
+		<inactive.down.color value="darker_gray"/>
+		<inactive.down.hover.color value="darker_gray"/>
+
+		<inactive.text.down.color value="gray"/>
+		<inactive.text.down.hover.color value="gray"/>
+
+		<inactive.border.down.color value="gray"/>
+		<inactive.border.down.hover.color value="dark_gray"/>
+		<inactive.led.color value="dark_gray"/>
 	</style>
 
 	<style class="Button_red" parents="Button">
@@ -642,6 +721,16 @@
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
 		<led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
+		<inactive.led.color value="red"/>
 	</style>
 
 	<style class="Button_orange" parents="Button">
@@ -654,6 +743,16 @@
 		<border.down.color value="bright_orange"/>
 		<border.down.hover.color value="orange"/>
 		<led.color value="orange"/>
+
+		<inactive.down.color value="dark_orange"/>
+		<inactive.down.hover.color value="dark_orange"/>
+
+		<inactive.text.down.color value="bright_orange"/>
+		<inactive.text.down.hover.color value="bright_orange"/>
+
+		<inactive.border.down.color value="bright_orange"/>
+		<inactive.border.down.hover.color value="orange"/>
+		<inactive.led.color value="orange"/>
 	</style>
 
 	<style class="Button_yellow" parents="Button">
@@ -666,6 +765,16 @@
 		<border.down.color value="bright_yellow"/>
 		<border.down.hover.color value="yellow"/>
 		<led.color value="yellow"/>
+
+		<inactive.down.color value="dark_yellow"/>
+		<inactive.down.hover.color value="dark_yellow"/>
+
+		<inactive.text.down.color value="bright_yellow"/>
+		<inactive.text.down.hover.color value="bright_yellow"/>
+
+		<inactive.border.down.color value="bright_yellow"/>
+		<inactive.border.down.hover.color value="yellow"/>
+		<inactive.led.color value="yellow"/>
 	</style>
 
 	<style class="Button_green" parents="Button">
@@ -678,6 +787,16 @@
 		<border.down.color value="bright_green"/>
 		<border.down.hover.color value="green"/>
 		<led.color value="green"/>
+
+		<inactive.down.color value="dark_green"/>
+		<inactive.down.hover.color value="dark_green"/>
+
+		<inactive.text.down.color value="bright_green"/>
+		<inactive.text.down.hover.color value="bright_green"/>
+
+		<inactive.border.down.color value="bright_green"/>
+		<inactive.border.down.hover.color value="green"/>
+		<inactive.led.color value="green"/>
 	</style>
 
 	<style class="Button_cyan" parents="Button">
@@ -689,9 +808,17 @@
 
 		<border.down.color value="bright_cyan"/>
 		<border.down.hover.color value="cyan"/>
-
 		<led.color value="cyan"/>
 
+		<inactive.down.color value="dark_cyan"/>
+		<inactive.down.hover.color value="dark_cyan"/>
+
+		<inactive.text.down.color value="bright_cyan"/>
+		<inactive.text.down.hover.color value="bright_cyan"/>
+
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
+		<inactive.led.color value="cyan"/>
 	</style>
 
 	<style class="Button_blue" parents="Button">
@@ -703,6 +830,17 @@
 
 		<border.down.color value="bright_blue"/>
 		<border.down.hover.color value="blue"/>
+		<led.color value="blue"/>
+
+		<inactive.down.color value="dark_blue"/>
+		<inactive.down.hover.color value="dark_blue"/>
+
+		<inactive.text.down.color value="bright_blue"/>
+		<inactive.text.down.hover.color value="bright_blue"/>
+
+		<inactive.border.down.color value="bright_blue"/>
+		<inactive.border.down.hover.color value="blue"/>
+		<inactive.led.color value="blue"/>
 	</style>
 
 	<style class="Button_violet" parents="Button">
@@ -715,6 +853,16 @@
 		<border.down.color value="bright_violet"/>
 		<border.down.hover.color value="violet"/>
 		<led.color value="violet"/>
+
+		<inactive.down.color value="dark_violet"/>
+		<inactive.down.hover.color value="dark_violet"/>
+
+		<inactive.text.down.color value="bright_violet"/>
+		<inactive.text.down.hover.color value="bright_violet"/>
+
+		<inactive.border.down.color value="bright_violet"/>
+		<inactive.border.down.hover.color value="violet"/>
+		<inactive.led.color value="violet"/>
 	</style>
 
 	<style class="Button_magenta" parents="Button">
@@ -727,6 +875,16 @@
 		<border.down.color value="bright_magenta"/>
 		<border.down.hover.color value="magenta"/>
 		<led.color value="magenta"/>
+
+		<inactive.down.color value="dark_magenta"/>
+		<inactive.down.hover.color value="dark_magenta"/>
+
+		<inactive.text.down.color value="bright_magenta"/>
+		<inactive.text.down.hover.color value="bright_magenta"/>
+
+		<inactive.border.down.color value="bright_magenta"/>
+		<inactive.border.down.hover.color value="magenta"/>
+		<inactive.led.color value="magenta"/>
 	</style>
 
 	<style class="Button_mono" parents="Button">
@@ -739,6 +897,16 @@
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
 		<led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
+		<inactive.led.color value="red"/>
 	</style>
 
 	<style class="Button_left" parents="Button">
@@ -751,6 +919,16 @@
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
 		<led.color value="red"/>
+
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
+		<inactive.led.color value="red"/>
 	</style>
 
 	<style class="Button_right" parents="Button">
@@ -763,6 +941,16 @@
 		<border.down.color value="bright_blue"/>
 		<border.down.hover.color value="blue"/>
 		<led.color value="blue"/>
+
+		<inactive.down.color value="dark_blue"/>
+		<inactive.down.hover.color value="dark_blue"/>
+
+		<inactive.text.down.color value="bright_blue"/>
+		<inactive.text.down.hover.color value="bright_blue"/>
+
+		<inactive.border.down.color value="bright_blue"/>
+		<inactive.border.down.hover.color value="blue"/>
+		<inactive.led.color value="blue"/>
 	</style>
 
 	<style class="Button_side" parents="Button">
@@ -775,6 +963,16 @@
 		<border.down.color value="bright_green"/>
 		<border.down.hover.color value="green"/>
 		<led.color value="green"/>
+
+		<inactive.down.color value="dark_green"/>
+		<inactive.down.hover.color value="dark_green"/>
+
+		<inactive.text.down.color value="bright_green"/>
+		<inactive.text.down.hover.color value="bright_green"/>
+
+		<inactive.border.down.color value="bright_green"/>
+		<inactive.border.down.hover.color value="green"/>
+		<inactive.led.color value="green"/>
 	</style>
 
 	<style class="Button_mid" parents="Button">
@@ -787,6 +985,16 @@
 		<border.down.color value="bright_cyan"/>
 		<border.down.hover.color value="cyan"/>
 		<led.color value="cyan"/>
+
+		<inactive.down.color value="dark_cyan"/>
+		<inactive.down.hover.color value="dark_cyan"/>
+
+		<inactive.text.down.color value="bright_cyan"/>
+		<inactive.text.down.hover.color value="bright_cyan"/>
+
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
+		<inactive.led.color value="cyan"/>
 	</style>
 
 	<style class="Button_dry" parents="Button">
@@ -799,6 +1007,16 @@
 		<border.down.color value="bright_yellow"/>
 		<border.down.hover.color value="yellow"/>
 		<led.color value="yellow"/>
+
+		<inactive.down.color value="dark_yellow"/>
+		<inactive.down.hover.color value="dark_yellow"/>
+
+		<inactive.text.down.color value="bright_yellow"/>
+		<inactive.text.down.hover.color value="bright_yellow"/>
+
+		<inactive.border.down.color value="bright_yellow"/>
+		<inactive.border.down.hover.color value="yellow"/>
+		<inactive.led.color value="yellow"/>
 	</style>
 
 	<style class="Button_stretch" parents="Button">
@@ -811,6 +1029,16 @@
 		<border.down.color value="#a49851"/>
 		<border.down.hover.color value="#8b8144"/>
 		<led.color value="#8b8144"/>
+
+		<inactive.down.color value="#5e562b"/>
+		<inactive.down.hover.color value="#5e562b"/>
+
+		<inactive.text.down.color value="#a49851"/>
+		<inactive.text.down.hover.color value="#a49851"/>
+
+		<inactive.border.down.color value="#a49851"/>
+		<inactive.border.down.hover.color value="#8b8144"/>
+		<inactive.led.color value="#8b8144"/>
 	</style>
 
 	<style class="Button_loop" parents="Button">
@@ -823,6 +1051,38 @@
 		<border.down.color value="#23b270"/>
 		<border.down.hover.color value="#1b935c"/>
 		<led.color value="#1b935c"/>
+
+		<inactive.down.color value="#0f633c"/>
+		<inactive.down.hover.color value="#0f633c"/>
+
+		<inactive.text.down.color value="#23b270"/>
+		<inactive.text.down.hover.color value="#23b270"/>
+
+		<inactive.border.down.color value="#23b270"/>
+		<inactive.border.down.hover.color value="#1b935c"/>
+		<inactive.led.color value="#1b935c"/>
+	</style>
+
+	<style class="Button_envelope" parents="Button">
+		<down.color value="#68488c"/>
+		<down.hover.color value="#68488c"/>
+
+		<text.down.color value="#b28ed8"/>
+		<text.down.hover.color value="#b28ed8"/>
+
+		<border.down.color value="#b28ed8"/>
+		<border.down.hover.color value="#9572bb"/>
+		<led.color value="#9572bb"/>
+
+		<inactive.down.color value="#68488c"/>
+		<inactive.down.hover.color value="#68488c"/>
+
+		<inactive.text.down.color value="#b28ed8"/>
+		<inactive.text.down.hover.color value="#b28ed8"/>
+
+		<inactive.border.down.color value="#b28ed8"/>
+		<inactive.border.down.hover.color value="#9572bb"/>
+		<inactive.led.color value="#9572bb"/>
 	</style>
 
 	<style class="Button_lufs" parents="Button">
@@ -835,6 +1095,16 @@
 		<border.down.color value="#8ab252"/>
 		<border.down.hover.color value="#6c8b40"/>
 		<led.color value="#6c8b40"/>
+
+		<inactive.down.color value="#485d2b"/>
+		<inactive.down.hover.color value="#485d2b"/>
+
+		<inactive.text.down.color value="#8ab252"/>
+		<inactive.text.down.hover.color value="#8ab252"/>
+
+		<inactive.border.down.color value="#8ab252"/>
+		<inactive.border.down.hover.color value="#6c8b40"/>
+		<inactive.led.color value="#6c8b40"/>
 	</style>
 
 	<style class="Button_ref" parents="Button_cyan"></style>
@@ -849,13 +1119,22 @@
 		<border.down.color value="#ee6753"/>
 		<border.down.hover.color value="reference_mix_1"/>
 		<led.color value="reference_mix_1"/>
+
+		<inactive.down.color value="#b13025"/>
+		<inactive.down.hover.color value="#b13025"/>
+
+		<inactive.text.down.color value="#ee6753"/>
+		<inactive.text.down.hover.color value="#ee6753"/>
+
+		<inactive.border.down.color value="#ee6753"/>
+		<inactive.border.down.hover.color value="reference_mix_1"/>
+		<inactive.led.color value="reference_mix_1"/>
 	</style>
 
 	<style class="Button_both" parents="Button_green"></style>
 
 	<style class="Button_ne_left" parents="Button">
 		<color value="dark_red"/>
-
 		<text.color value="bright_red"/>
 
 		<border.color value="bright_red"/>
@@ -868,11 +1147,24 @@
 
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
+
+		<inactive.color value="dark_red"/>
+		<inactive.text.color value="bright_red"/>
+
+		<inactive.border.color value="bright_red"/>
+		<inactive.led.color value="red"/>
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
 	</style>
 
 	<style class="Button_ne_right" parents="Button">
 		<color value="dark_blue"/>
-
 		<text.color value="bright_blue"/>
 
 		<border.color value="bright_blue"/>
@@ -885,11 +1177,24 @@
 
 		<border.down.color value="bright_blue"/>
 		<border.down.hover.color value="blue"/>
+
+		<inactive.color value="dark_blue"/>
+		<inactive.text.color value="bright_blue"/>
+
+		<inactive.border.color value="bright_blue"/>
+		<inactive.led.color value="blue"/>
+		<inactive.down.color value="dark_blue"/>
+		<inactive.down.hover.color value="dark_blue"/>
+
+		<inactive.text.down.color value="bright_blue"/>
+		<inactive.text.down.hover.color value="bright_blue"/>
+
+		<inactive.border.down.color value="bright_blue"/>
+		<inactive.border.down.hover.color value="blue"/>
 	</style>
 
 	<style class="Button_ne_side" parents="Button">
 		<color value="dark_green"/>
-
 		<text.color value="bright_green"/>
 
 		<border.color value="bright_green"/>
@@ -903,11 +1208,24 @@
 		<border.down.color value="bright_green"/>
 		<border.down.hover.color value="green"/>
 
+		<inactive.color value="dark_green"/>
+		<inactive.text.color value="bright_green"/>
+
+		<inactive.border.color value="bright_green"/>
+		<inactive.led.color value="green"/>
+		<inactive.down.color value="dark_green"/>
+		<inactive.down.hover.color value="dark_green"/>
+
+		<inactive.text.down.color value="bright_green"/>
+		<inactive.text.down.hover.color value="bright_green"/>
+
+		<inactive.border.down.color value="bright_green"/>
+		<inactive.border.down.hover.color value="green"/>
+
 	</style>
 
 	<style class="Button_ne_mid" parents="Button">
 		<color value="dark_cyan"/>
-
 		<text.color value="bright_cyan"/>
 
 		<border.color value="bright_cyan"/>
@@ -920,11 +1238,24 @@
 
 		<border.down.color value="bright_cyan"/>
 		<border.down.hover.color value="cyan"/>
+
+		<inactive.color value="dark_cyan"/>
+		<inactive.text.color value="bright_cyan"/>
+
+		<inactive.border.color value="bright_cyan"/>
+		<inactive.led.color value="cyan"/>
+		<inactive.down.color value="dark_cyan"/>
+		<inactive.down.hover.color value="dark_cyan"/>
+
+		<inactive.text.down.color value="bright_cyan"/>
+		<inactive.text.down.hover.color value="bright_cyan"/>
+
+		<inactive.border.down.color value="bright_cyan"/>
+		<inactive.border.down.hover.color value="cyan"/>
 	</style>
 
 	<style class="Button_ne_dry" parents="Button">
 		<color value="dark_yellow"/>
-
 		<text.color value="bright_yellow"/>
 
 		<border.color value="bright_yellow"/>
@@ -937,6 +1268,20 @@
 
 		<border.down.color value="bright_yellow"/>
 		<border.down.hover.color value="yellow"/>
+
+		<inactive.color value="dark_yellow"/>
+		<inactive.text.color value="bright_yellow"/>
+
+		<inactive.border.color value="bright_yellow"/>
+		<inactive.led.color value="yellow"/>
+		<inactive.down.color value="dark_yellow"/>
+		<inactive.down.hover.color value="dark_yellow"/>
+
+		<inactive.text.down.color value="bright_yellow"/>
+		<inactive.text.down.hover.color value="bright_yellow"/>
+
+		<inactive.border.down.color value="bright_yellow"/>
+		<inactive.border.down.hover.color value="yellow"/>
 	</style>
 
 	<style class="Button_ne_Cycle" parents="Button_gray_8">
@@ -952,6 +1297,19 @@
 
 		<border.down.color value="bright_red"/>
 		<border.down.hover.color value="red"/>
+
+		<inactive.color value="dark_red"/>
+		<inactive.text.color value="bright_red"/>
+		<inactive.border.color value="bright_red"/>
+		<inactive.led.color value="red"/>
+		<inactive.down.color value="dark_red"/>
+		<inactive.down.hover.color value="dark_red"/>
+
+		<inactive.text.down.color value="bright_red"/>
+		<inactive.text.down.hover.color value="bright_red"/>
+
+		<inactive.border.down.color value="bright_red"/>
+		<inactive.border.down.hover.color value="red"/>
 	</style>
 
 	<style class="Button_gray_8" parents="Button_gray">
@@ -1002,6 +1360,17 @@
 		<font.size value="8"/>
 	</style>
 
+	<style class="Button_left_8_dimmed" parents="Button_left_8">
+		<down.color.hue value="90"/>
+		<border.color.hue value="90"/>
+		<led.color.hue value="90"/>
+	</style>
+	<style class="Button_right_8_dimmed" parents="Button_right_8">
+		<down.color.hue value="90"/>
+		<border.color.hue value="90"/>
+		<led.color.hue value="90"/>
+	</style>
+
 	<style class="Button_right_8" parents="Button_right">
 		<font.size value="8"/>
 	</style>
@@ -1205,6 +1574,16 @@
 		<border.gap.color value="bg"/>
 		<pointer value="hand"/>
 		<bg.inherit value="true"/>
+
+		<inactive.color value="bg"/>
+		<inactive.text.color value="text_sec"/>
+		<inactive.spin.color value="bg"/>
+		<inactive.spin.text.color value="text_prim"/>
+		<inactive.border.color value="bg_light"/>
+		<inactive.border.gap.color value="bg"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
+
 	</style>
 
 	<style class="ComboBox::List" parents="root">
@@ -1215,6 +1594,11 @@
 		<border.color value="bg_light"/>
 		<pointer value="hand"/>
 		<hscroll.mode value="none"/>
+
+		<inactive.list.bg.color value="bg"/>
+		<inactive.border.color value="bg_light"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
 	</style>
 
 	<style class="Edit" parents="root">
@@ -1259,6 +1643,66 @@
 		<button.width value="8"/>
 	</style>
 
+	<style class="Fader_prophessor" parents="root">
+		<scale.color value="gray_inactive"/>
+		<scale.border.gradient value="false"/>
+		<scale.border.size value="0"/>
+		<scale.border.radius value="0"/>
+		<scale.width value="4"/>
+		<scale.border.color value="bg"/>
+		<scale.brightness value="0.6"/>
+		<bg.inherit value="true"/>
+
+		<button.color value="gray"/>
+		<button.aspect value="0.6"/>
+		<button.border.gradient value="false"/>
+		<button.border.color value="gray"/>
+		<button.border.size value="6"/>
+		<button.border.radius value="4"/>
+		<button.width value="16"/>
+	</style>
+
+	<style class="Fader_prophessor_thin" parents="Fader_prophessor">
+		<scale.width value="2"/>
+
+		<button.aspect value="2.75"/>
+		<button.border.size value="1"/>
+		<button.width value="1,1"/>
+		<button.width.x value="1"/>
+		<button.width.y value="1"/>
+	</style>
+
+	<style class="Fader_prophessor_water" parents="Fader_prophessor">
+		<scale.width value="16"/>
+		<button.aspect value="0"/>
+		<!-- <button.border.size value="1"/> -->
+		<button.width value="0"/>
+		<scale.border.radius value="10"/>
+		<angle value="0"/>
+	</style>
+
+	<style class="Fader_prophessor_ratio" parents="root">
+		<!-- Track -->
+		<scale.color value="bg"/>
+		<scale.border.gradient value="false"/>
+		<scale.border.size value="0"/>
+		<scale.border.radius value="0"/>
+		<scale.width value="4"/>
+		<scale.border.color value="bg"/>
+		<scale.brightness value="0.6"/>
+		<bg.inherit value="true"/>
+		<width value="64"/>
+
+		<!-- Thumb -->
+		<button.color value="cyan"/>
+		<button.border.gradient value="false"/>
+		<button.border.size value="1"/>
+		<button.border.radius value="5"/>
+		<button.width value="0"/>
+		<!-- Should be a circle -->
+		<button.aspect value="0.99"/>
+	</style>
+
 	<style class="Fader_play" parents="Fader">
 		<button.border.size value="0"/>
 		<button.border.radius value="0"/>
@@ -1292,13 +1736,13 @@
 
 	<style class="GraphDot" parents="root">
 		<smooth value="true"/>
-		<border.size value="5"/>
+		<border.size value="3"/>
 		<size value="3"/>
 		<color value="cyan"/>
 		<step.accel value="1.0"/>
 		<border.color value="cyan"/>
 		<hover.size value="3"/>
-		<hover.border.size value="10"/>
+		<hover.border.size value="5"/>
 		<hover.color value="cyan"/>
 		<hover.border.color value="cyan"/>
 	</style>
@@ -1314,6 +1758,22 @@
 		<color value="cyan"/>
 	</style>
 
+	<!-- Multilayer Graph Meshes -->
+	<style class="GraphMesh_in" parents="GraphMesh">
+		<width value="2"/>
+		<color value="#444444"/>
+		<fill.color value="#444444"/>
+		<color.a value="0.1"/>
+		<fill.color.a value="0.3"/>
+	</style>
+	<style class="GraphMesh_out" parents="GraphMesh">
+		<width value="2"/>
+		<color value="#777777"/>
+		<fill.color value="#777777"/>
+		<color.a value="0.3"/>
+		<fill.color.a value="0.5"/>
+	</style>
+
 	<style class="GraphOrigin" parents="root">
 		<radius value="2"/>
 		<smooth value="true"/>
@@ -1506,7 +1966,7 @@
 	</style>
 
 	<style class="Knob" parents="root">
-		<color value="bg"/>
+		<color value="kcap"/>
 		<scale.color value="kscale"/>
 		<tip.color value="text_group"/>
 		<size.range.min value="21"/>
@@ -1521,6 +1981,15 @@
 		<scale.brightness value="0.6"/>
 		<balance.tip.size value="2"/>
 		<pointer value="hand"/>
+
+		<bg.color value="bg_schema"/>
+
+		<inactive.scale.color value="kscale_inactive"/>
+		<inactive.color value="kcap"/>
+		<inactive.tip.color value="text_group"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="Knob_meter_threshold" parents="Knob">
@@ -1542,6 +2011,13 @@
 		<allocation.hfill value="false"/>
 		<allocation.vfill value="false"/>
 		<bg.inherit value="true"/>
+
+		<bg.color value="bg_schema"/>
+
+		<inactive.text.color value="text_sec"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="LedMeter" parents="root">
@@ -1588,6 +2064,16 @@
 		<round value="false"/>
 		<gradient value="false"/>
 		<hole value="false"/>
+
+		<bg.color value="bg_schema"/>
+
+		<inactive.color value="led_c"/>
+		<inactive.led.color value="led_l"/>
+		<inactive.border.color value="led_bc"/>
+		<inactive.led.border.color value="led_bl"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
+		<inactive.bg.color value="bg_schema"/>
 	</style>
 
 	<style class="Led_red" parents="root">
@@ -1672,6 +2158,17 @@
 		<text.hover.color value="text_sec"/>
 		<text.selected.color value="text_sec"/>
 		<text.selected.hover.color value="text_sec"/>
+
+		<inactive.bg.color value="bg_light"/>
+		<inactive.bg.hover.color value="LBI_hov"/>
+		<inactive.bg.selected.color value="LBI_sel"/>
+		<inactive.bg.selected.hover.color value="LBI_sel_hov"/>
+		<inactive.text.color value="text_prim"/>
+		<inactive.text.hover.color value="text_sec"/>
+		<inactive.text.selected.color value="text_sec"/>
+		<inactive.text.selected.hover.color value="text_sec"/>
+		<inactive.brightness value="0.75"/>
+		<inactive.bg.brightness value="0.75"/>
 	</style>
 
 	<style class="Menu" parents="root">
@@ -1784,6 +2281,23 @@
 		<z.color value="area3d_z"/>
 	</style>
 
+	<style class="Overlay" parents="root">
+		<visible value="false"/>
+		<transparency value="0"/>
+		<border.size value="0"/>
+		<border.radius value="0"/>
+		<border.rounding value=""/>
+		<border.color value="black"/>
+		<shadow.size value="24"/>
+		<shadow.radius value="8"/>
+		<shadow.rounding value="lt,rt,lb,rb"/>
+		<shadow.start value="overlay_shadow"/>
+		<shadow.end value="overlay_shadow"/>
+		<padding value="24"/>
+		<ipadding value="0"/>
+		<close.auto value="true"/>
+	</style>
+
 	<style class="ProgressBar" parents="root">
 		<border.radius value="0"/>
 		<border.size value="0"/>
@@ -1947,6 +2461,8 @@
 		<border.gap.color value="bg_light"/>
 	</style>
 
+	<style class="FileDialog::Input" parents="FileDialog::Search"></style>
+
 	<style class="FileDialog::Warning" parents="root">
 		<text.color value="warn"/>
 	</style>
@@ -2260,4 +2776,23 @@
 		<layout.vscale value="1.0"/>
 	</style>
 
+	<!-- PresetsDialog widgets -->
+	<style class="PresetsDialog" parents="Window">
+		<padding value="4"/>
+		<border.style value="none"/>
+		<layout.hscale value="1.0"/>
+		<layout.vscale value="1.0"/>
+	</style>
+
+	<style class="PresetsTab" parents="TabControl">
+		<heading value="-1 1 0 0"/>
+		<heading.gap value="0"/>
+		<heading.spacing value="0"/>
+		<heading.spacing.fill value="false"/>
+	</style>
+
+	<style class="PresetsList" parents="ListBox">
+		<border.size value="1"/>
+	</style>
+
 </schema>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/about.xml 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/about.xml
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/about.xml	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/about.xml	2025-08-26 18:16:37.377482585 +0000
@@ -10,7 +10,7 @@
 			</multilabel>
 		</align>
 		<align fill="true" valign="-1" hexpand="true">
-			<grid rows="18" cols="2" hspacing="4" vspacing="4">
+			<grid rows="19" cols="2" hspacing="4" vspacing="4">
 				<cell cols="2">
 					<label ui:inject="AboutDialog::Heading" text="headings.about" text.meta="true" />
 				</cell>
@@ -46,6 +46,9 @@
 					<label ui:inject="AboutDialog::Text" text="messages.about.info.plug_format" />
 					<label ui:inject="AboutDialog::Text" text="messages.about.values.plug_format" />
 					
+					<label ui:inject="AboutDialog::Text" text="messages.about.info.ui_graphics_library" />
+					<label ui:inject="AboutDialog::Text" text="messages.about.values.ui_graphics_library" />
+					
 					<cell cols="2">
 						<label ui:inject="AboutDialog::Text" text="bundles.${bundle_id}.description" />
 					</cell>
@@ -65,11 +68,11 @@
 						<label ui:inject="AboutDialog::Text" text="messages.about.support" />
 					</cell>
 					
-					<ui:for id="i" first="0" count="3">
+					<ui:for id="i" first="0" count="4">
 						<cell cols="2">
 							<hlink ui:inject="AboutDialog::Hlink"
-								text="project.donations.${i}"
-								url="project.donations.${i}"
+								text="project.donations.${i}.text"
+								url="project.donations.${i}.url"
 								text.meta="true"
 								url.meta="true"
 							/>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/greeting.xml 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/greeting.xml
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/greeting.xml	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/greeting.xml	2025-08-26 18:16:37.377482585 +0000
@@ -7,10 +7,10 @@
 		<label ui:tag="42" ui:inject="GreetingDialog::Text" text="messages.greetings.1" text.meta="true" />
 		<label ui:tag="43" ui:inject="GreetingDialog::Text" text="messages.greetings.2" text.meta="true" />
 
-		<ui:for id="i" first="0" count="3">
+		<ui:for id="i" first="0" count="4">
 			<hlink ui:inject="GreetingDialog::Hlink"
-				text="project.donations.${i}"
-				url="project.donations.${i}"
+				text="project.donations.${i}.text"
+				url="project.donations.${i}.url"
 				text.meta="true"
 				url.meta="true"
 			/>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/presets.xml 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/presets.xml
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/presets.xml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/presets.xml	2025-08-26 18:16:37.377482585 +0000
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+
+<window ui:inject="PresetsDialog" title="titles.preset_management" fill="true">
+	<hbox spacing="4" width="600" height="256" >
+		<!-- Presets -->
+		<vbox expand="true" fill="true">
+			<hbox hexpand="true" spacing="4" pad.b="4">
+				<edit ui:inject="FileDialog::Search" ui:id="preset_filter" etext="actions.presets.search" hexpand="true"/>
+				<button ui:id="btn_refresh" ui:inject="Button_cyan" font.name="lsp-icons" font.size="11" size="22" font.antialias="true" text="icons.actions.refresh"/>
+			</hbox>
+			<tabs ui:inject="PresetsTab" ui:id="preset_category" expand="true" fill="true">
+				<tab text="labels.presets.category.all">
+					<list ui:inject="PresetsList" ui:id="all_presets_list" expand="true" fill="true" />
+				</tab>
+				<tab text="labels.presets.category.factory">
+					<list ui:inject="PresetsList" ui:id="factory_presets_list" expand="true" fill="true" />
+				</tab>
+				<tab text="labels.presets.category.user">
+					<list ui:inject="PresetsList" ui:id="user_presets_list" expand="true" fill="true"/>
+				</tab>
+				<tab text="labels.presets.category.favourites">
+					<list ui:inject="PresetsList" ui:id="favourites_presets_list" expand="true" fill="true"/>
+				</tab>
+			</tabs>
+		</vbox>
+		<!-- Actions -->
+		<vbox spacing="4" width.min="192">
+			<vbox spacing="4" hexpand="true">
+				<button ui:id="btn_save" fill="true" text="actions.presets.save"/>
+				<button ui:id="btn_favourite" fill="true" text="actions.presets.favourite"/>
+				<button ui:id="btn_remove" fill="true" text="actions.presets.remove" text.color="dark_red"/>
+				<button ui:id="btn_reset" fill="true" text="actions.presets.reset"/>
+			</vbox>
+
+			<label text="labels.presets.configuration" hfill="true" text.halign="-1"/>
+			<grid rows="2" cols="2" spacing="4">
+				<button ui:id="btn_copy" fill="true" text="actions.presets.copy"/>
+				<button ui:id="btn_paste" fill="true" text="actions.presets.paste"/>
+
+				<button ui:id="btn_import" fill="true" text="actions.presets.import"/>
+				<button ui:id="btn_export" fill="true" text="actions.presets.export"/>
+			</grid>
+		</vbox>
+	</hbox>
+</window>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/save_preset.xml 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/save_preset.xml
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/save_preset.xml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/save_preset.xml	2025-08-26 18:16:37.377482585 +0000
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+
+<window ui:inject="SavePresetDialog" title="titles.save_preset" fill="true" width.min="400" heigh.min="200">
+	<vbox spacing="8" padding="5" fill="true" expand="true">
+		<label text="labels.presets.preset_name" fill="true" text.halign="-1" />
+
+		<edit ui:inject="FileDialog::Input" ui:id="preset_name" etext="actions.presets.input_name" hexpand="true" />
+
+		<hbox spacing="4">
+			<check ui:id="favourites_check" />
+			<label ui:id="favourites_label" text="labels.presets.add_to_favourites" />
+			<void hexpand="true" />
+		</hbox>
+
+		<void height.min="16" />
+
+		<hbox spacing="4">
+			<button ui:id="btn_save" width.min="96" fill="true" text="actions.presets.save" />
+			<button ui:id="btn_cancel" width.min="96" fill="true" text="actions.cancel" />
+			<void hexpand="true" />
+		</hbox>
+	</vbox>
+</window>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/window.xml 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/window.xml
--- 1.2.21-5/modules/lsp-plugins-shared/res/main/ui/window.xml	2025-03-01 12:43:17.900521685 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/res/main/ui/window.xml	2025-08-26 18:16:37.377482585 +0000
@@ -1,64 +1,64 @@
 <?xml version="1.0"?>
 
 <window ui:inject="PluginWindow">
-	<!-- header new -->
-	<vbox spacing="4">
-		<grid rows="3" cols="9" height="44" expand="false" bg.color="bg_schema" >
-			<cell width.min="106" rows="2" cols="1">
+	<!-- header -->
+	<vbox spacing="4" ui:id="plugin_window">
+		<grid rows="2" cols="4" height="44" expand="false" bg.color="bg_schema">
+			<cell rows="2" width.min="106">
 				<hbox>
-					<multilabel padding.left="6" padding.bottom="3" font.scaling="1" >
+					<multilabel padding.left="6" padding.bottom="3" font.scaling="1">
 						<label font.name="lsp-logo" font.size="34" font.antialias="true" text="A" color="lsp_logo"/>
 						<label font.name="lsp-logo" font.size="34" font.antialias="true" text="B" color="lsp_logo_cover"/>
 					</multilabel>
 					<void expand="true"/>
 				</hbox>
 			</cell>
-			<cell width.min="37" rows="2" cols="1"><void expand="true"/></cell>
-			<void/>
-			<cell rows="1" cols="6">
+			<cell rows="2" width.min="37"><void expand="true"/></cell>
+			<void expand="true"/>
+			<cell >
 				<hbox>
-					<void expand="true"/>
+					<void hexpand="true"/>
 					<!-- plugin name -->
 					<label color="plug_name" font.bold="true" font.size="14" halign="1" padding.top="2" padding.bottom="-1" padding.right="6" text="labels.rack.description" text.meta="true" text.adjust="toupper"/>
 					<label color="plug_name_sep" text="|"/>
 					<label color="plug_name_acr" font.bold="true" font.size="14" halign="1" padding.top="2" padding.bottom="-1" padding.left="6" padding.right="12" text="labels.rack.acronym" text.meta="true" text.adjust="toupper"/>
 					<!-- bypass icon -->
-					<button id="bypass" ui:inject="PluginWindow::Bypass::Button" text="5" halign="1" />
+					<button id="bypass" ui:inject="PluginWindow::Bypass::Button" text="5" halign="1"/>
 				</hbox>
 			</cell>
-			<label/>
+			<void expand="true"/>
+
+			<!-- Preset and Menu box -->
+			<hbox bg.color="bg">
 
-			<!-- Menu box -->
-			<hbox bg.color="bg" halign="1">
-				<bevel expand="true" color="bg_schema" width.min="24" height.min="20" halign="-1"/>
+				<!-- Presets-->
+				<ui:with bg.color="bg_preset">
+					<hbox ui:id="trg_presets_menu_area">
+						<bevel hexpand="false" color="bg_schema" width.min="24" height.min="20"/>
+						<label ui:id="trg_prev_preset" hover="true" color="menu_icon" font.size="10" hover.color="menu_icon_hover" font.name="lsp-icons" padding.top="1" font.antialias="true" text="icons.shapes.left" width="22"/>
+						<label ui:id="trg_presets_menu" hover="true" color="menu_text" hover.color="menu_text_hover" pad.h="5" font.size="14" padding.top="3" text="labels.header.menu" width="200" hfill="true" text.clip="true" text.halign="0" text.clip.halign="-1"/>
+						<label ui:id="trg_next_preset" hover="true" color="menu_icon" font.size="10" hover.color="menu_icon_hover" font.name="lsp-icons" padding.top="1" font.antialias="true" text="icons.shapes.right" width="22"/>
+					</hbox>
+				</ui:with>
+
+				<!-- Menu and About -->
+				<bevel hexpand="false" color="bg_preset" width.min="24" height.min="20"/>
 				<hbox ui:id="trg_main_menu" solid="true" padding.right="10" padding.left="2" pointer="hand">
-					<label  hover="true" color="menu_icon" font.size="12" hover.color="menu_icon_hover" font.name="lsp-icons" padding.top="1" font.antialias="true" text="icons.main.menu" halign="1" />
-					<label  hover="true" color="menu_text" hover.color="menu_text_hover" padding.left="5" font.size="14" padding.top="3" halign="1" text="labels.header.menu"/>
-				</hbox>
-				<hbox ui:id="trg_export_settings" solid="true" padding.right="10" pointer="hand">
-					<label  hover="true" color="menu_icon" font.size="12" hover.color="menu_icon_hover" font.name="lsp-icons" padding.top="1" font.antialias="true" text="icons.main.import" halign="1" />
-					<label  hover="true" color="menu_text" hover.color="menu_text_hover" padding.left="5" font.size="14" padding.top="3" halign="1" text="labels.header.save"/>
-				</hbox>
-				<hbox ui:id="trg_import_settings" solid="true" padding.right="10" pointer="hand">
-					<label  hover="true" color="menu_icon" font.size="12" hover.color="menu_icon_hover" font.name="lsp-icons" padding.top="1" font.antialias="true" text="icons.main.export" halign="1" />
-					<label  hover="true" color="menu_text" hover.color="menu_text_hover" padding.left="5" font.size="14" padding.top="3" halign="1" text="labels.header.load"/>
-				</hbox>
-				<hbox ui:id="trg_reset_settings" solid="true" padding.right="10" pointer="hand">
-					<label  hover="true" color="menu_icon" font.size="12" hover.color="menu_icon_hover" font.name="lsp-icons" padding.top="1" font.antialias="true" text="icons.main.reset" halign="1" />
-					<label  hover="true" color="menu_text" hover.color="menu_text_hover" padding.left="5" font.size="14" padding.top="3" halign="1" text="labels.header.reset"/>
+					<label hover="true" color="menu_icon" font.size="10" hover.color="menu_icon_hover" font.name="lsp-icons" padding.top="1" font.antialias="true" text="0"/>
+					<label hover="true" color="menu_text" hover.color="menu_text_hover" padding.left="5" font.size="14" padding.top="3" text="labels.header.menu"/>
 				</hbox>
 				<hbox ui:id="trg_about" solid="true" padding.right="6" pointer="hand">
-					<label  hover="true" color="menu_icon" font.size="12" hover.color="menu_icon_hover" font.name="lsp-icons" padding.top="1" font.antialias="true" text="icons.main.about" halign="1" />
-					<label  hover="true" color="menu_text" hover.color="menu_text_hover" padding.left="5" font.size="14" padding.top="3" halign="1" text="labels.header.about"/>
+					<label hover="true" color="menu_icon" font.size="10" hover.color="menu_icon_hover" font.name="lsp-icons" padding.top="1" font.antialias="true" text="4"/>
+					<label hover="true" color="menu_text" hover.color="menu_text_hover" padding.left="5" font.size="14" padding.top="3" text="labels.header.about"/>
 				</hbox>
 			</hbox>
 		</grid>
-		<hsep ui:inject="PluginWindow::Hsep_header" />
+		<hsep ui:inject="PluginWindow::Hsep_header"/>
 
 		<!-- plugin-content -->
 		<hbox ui:inject="PluginWindow::Content" ui:id="plugin_content"></hbox>
 
-		<hsep ui:inject="PluginWindow::Hsep_header" />
+		<hsep ui:inject="PluginWindow::Hsep_header"/>
 		<!-- Footer -->
 		<hbox height="20" bg.color="bg_schema" spacing="6">
 			<!-- UI Scale icons + and - -->
@@ -67,44 +67,35 @@
 				<label ui:id="trg_ui_zoom_in" font.name="lsp-icons" hover="true" color="footer_icon_rsz" hover.color="footer_icon_rsz_hover" padding.right="5" expand="false" font.size="10" font.antialias="true" text="icons.main.plus_nb" pointer="hand"/>
 				<label ui:id="trg_ui_zoom_out" font.name="lsp-icons" hover="true" color="footer_icon_rsz" hover.color="footer_icon_rsz_hover" padding.right="5" expand="false" font.size="10" font.antialias="true" text="icons.main.minus_nb" pointer="hand"/>
 			</hbox>
-			
+
 			<!-- Bundle Scale icons + and - -->
 			<hbox padding.left="6">
 				<label ui:id="trg_bundle_scaling" font.name="lsp-icons" hover="true" color="footer_icon" hover.color="footer_icon_hover" padding.right="10" font.size="12" font.antialias="true" text="icons.main.bundle_scale" pointer="hand"/>
 				<label ui:id="trg_bundle_zoom_in" font.name="lsp-icons" hover="true" color="footer_icon_rsz" hover.color="footer_icon_rsz_hover" padding.right="5" expand="false" font.size="10" font.antialias="true" text="icons.main.plus_nb" pointer="hand"/>
 				<label ui:id="trg_bundle_zoom_out" font.name="lsp-icons" hover="true" color="footer_icon_rsz" hover.color="footer_icon_rsz_hover" padding.right="5" expand="false" font.size="10" font.antialias="true" text="icons.main.minus_nb" pointer="hand"/>
 			</hbox>
-			
+
 			<!-- Text scale icons + and - -->
 			<hbox padding.left="3">
 				<label ui:id="trg_font_scaling" font.name="lsp-icons" hover="true" color="footer_icon" hover.color="footer_icon_hover" padding.right="10" font.size="12" font.antialias="true" text="icons.main.font" pointer="hand"/>
 				<label ui:id="trg_font_zoom_in" font.name="lsp-icons" hover="true" color="footer_icon_rsz" hover.color="footer_icon_rsz_hover" padding.right="5" expand="false" font.size="10" font.antialias="true" text="icons.main.plus_nb" pointer="hand"/>
 				<label ui:id="trg_font_zoom_out" font.name="lsp-icons" hover="true" color="footer_icon_rsz" hover.color="footer_icon_rsz_hover" padding.right="5" expand="false" font.size="10" font.antialias="true" text="icons.main.minus_nb" pointer="hand"/>
 			</hbox>
-			
+
 			<!-- Empty filler -->
 			<void expand="true"/>
-			
+
 			<!-- Jack status -->
 			<hbox ui:id="jack_indicator" visibility="false" spacing="6" padding.right="6">
-				<label text="statuses.jack.label" ui:inject="PluginWindow::StatusBar::Label" />
-				<label ui:id="jack_status" text="statuses.jack.off" ui:inject="PluginWindow::StatusBar::Label" />
+				<label text="statuses.jack.label" ui:inject="PluginWindow::StatusBar::Label"/>
+				<label ui:id="jack_status" text="statuses.jack.off" ui:inject="PluginWindow::StatusBar::Label"/>
 			</hbox>
 
 			<!-- Help icon -->
-			<label ui:id="trg_plugin_manual"
-				font.name="lsp-icons" font.size="12" font.antialias="true"
-				text="icons.main.help"
-				hover="true" color="footer_icon_rsz" hover.color="menu_icon_hover"
-				halign="1" pointer="hand" />
-			
+			<label ui:id="trg_plugin_manual" font.name="lsp-icons" font.size="12" font.antialias="true" text="icons.main.help" hover="true" color="footer_icon_rsz" hover.color="menu_icon_hover" halign="1" pointer="hand"/>
+
 			<!-- sizing icon -->
-			<label ui:id="trg_window_scale"
-				font.name="lsp-icons" font.size="12" font.antialias="true"
-				text="icons.main.size"
-				hover="true" color="footer_icon_rsz" hover.color="menu_icon_hover"
-				halign="1" pointer="size_nwse"
-				fill="true" ipadding.right="6" />
+			<label ui:id="trg_window_scale" font.name="lsp-icons" font.size="12" font.antialias="true" text="icons.main.size" hover="true" color="footer_icon_rsz" hover.color="menu_icon_hover" halign="1" pointer="size_nwse" fill="true" ipadding.right="6"/>
 		</hbox>
 	</vbox>
 </window>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/common/filters.php 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/common/filters.php
--- 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/common/filters.php	2025-03-01 12:43:17.944521421 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/common/filters.php	2025-08-26 18:16:37.433482041 +0000
@@ -33,7 +33,7 @@
 
 <p>
 	All filters are build by using well-known methods of analog filter design (complex polynomials in top and bottom) or directly as digital filters.
-    When the filters are build from analog designs, plugins first of all calculate parameters of ideal analog filter by using Laplace transform and then digitalize
+    When the filters are build from analog designs, plugins first of all calculate parameters of ideal analog filter by using Laplace transform and then digitize
     it by applying analog-to-digital transform also known as Z Transform. Each filter implements it's own set of poles and zeros, the configuration of poles and zeros
     can be controlled by using <b>quality factor</b> and <b>slope parameters</b>.
 </p>
@@ -53,7 +53,7 @@
 	Nyquist Frequency.
 </p>
 <p>
-    Digital filters can also be generated directly in the digital domain, without needing to convert an analog prototype or by using design equations availble in
+    Digital filters can also be generated directly in the digital domain, without needing to convert an analog prototype or by using design equations available in
     literature, often coming from digitalization of canonic analog filter prototypes, but with the advantage of not having to perform digitalization in real-time.
     This is the case of Direct design IIR filters.
 </p>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/controls.php 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/controls.php
--- 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/controls.php	2025-03-01 12:43:17.944521421 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/controls.php	2025-08-26 18:16:37.433482041 +0000
@@ -26,6 +26,7 @@
 	<li><a href="#Label"><b>Label</b></a> &ndash; label with text information.</li>
 	<li><a href="#Led"><b>Led</b></a> &ndash; LED.</li>
 	<li><a href="#Meter"><b>Meter</b></a> &ndash; metering control.</li>
+	<li><a href="#Overlay"><b>Overlay</b></a> &ndash; widget container.</li>
 	<li><a href="#Parameter"><b>Parameter</b></a> &ndash; the value of controllable parameter.</li>
 	<li><a href="#ProgressBar"><b>Progress Bar</b></a> &ndash; progress control.</li>
 	<li><a href="#SampleEditor"><b>Sample Editor</b></a> &ndash; sample editor.</li>
@@ -295,7 +296,7 @@
 		<li><b>LSP Logo</b> at the left</li>
 		<li><b>Plugin name</b> at the top</li>
 		<li><b>Plugin model</b> code near to the plugin name.</li>
-		<li><b>Bypass button</b> at ther right of the plugin name.</li>
+		<li><b>Bypass button</b> at the right of the plugin name.</li>
 		<li><b>Main menu bar</b> that consists of the following elements:</li>
 		<ul>
 			<li><b>Menu</b> &ndash; triggers the main plugin menu.</li>
@@ -305,7 +306,7 @@
 			<li><b>About</b> &ndash; shows the dialog which displays all necessary information about the plugin</li>
 		</ul>
 	</ul>
-	<p>The main menu allows to peform the following actions on plugin instance:</p>
+	<p>The main menu allows to perform the following actions on plugin instance:</p>
 	<ul>
 		<li>Show manual for the plugin and for the controls.</li>
 		<li>Export plugin settings to file and clipboard.</li>
@@ -319,7 +320,7 @@
 		<li>Apply different built-in presets if they are present and supported by the plugin.</li>
 	</ul>
 	
-	<p>Plugins typically use the folowing model code format: <b>XXXX&nbsp;MM&nbsp;NN&nbsp;CC</b>, where:</p>
+	<p>Plugins typically use the following model code format: <b>XXXX&nbsp;MM&nbsp;NN&nbsp;CC</b>, where:</p>
 	<ul>
 		<li><b>XXXX</b> &ndash; arconym from the full name of plugin, for example <b>GE</b> for <b>Grafischer Entzerrer</b>.</li>
 		<li><b>MM</b> &ndash; modifiers that show additional facilities of plugin like <b>M</b> (MIDI) or <b>SC</b> (Side chain)</li>
@@ -413,7 +414,7 @@
 	LV2 format.</p>
 	<p>So they're available in the Ardour's mixer strip even if UI is not shown. Inline displays also are
 	available in <a href="https://harrisonconsoles.com/">Mixbus DAW</a> as the relative to Ardour product.</p>
-	<p>Because inline display is an LV2-specific exension, it is available only for LV2 version of LSP plugins.
+	<p>Because inline display is an LV2-specific extension, it is available only for LV2 version of LSP plugins.
 	But standalone JACK versions of plugins that support inline displays in LV2, draw them on window's icon.</p>
 	
 	<p style="text-align:center">Example of inline displays:</p>
@@ -426,14 +427,14 @@
 <section id="Knob">
 	<h2>Knob</h2>
 	<p>Knobs are the mostly used controls by plugin GUIs. They allow to adjust value for continuous parameters
-	in the pre-defined range. Higlighted part of the knob's scale shows deviation from it's zero position.
+	in the pre-defined range. Highlighted part of the knob's scale shows deviation from it's zero position.
 	There are many ways to adjust the controlled parameter.<p>
 	<p>The first way to change the parameter is performing left mouse click on the knob's cap, holding mouse
 	button and moving cursor up and down. To apply more accurate adjustment, right button of mouse may be pressed
 	while moving cursor.</p>
 	<p>The second way to change parameter's value may be reached by using mouse scroll. To perform more accurate
 	adjustment, shift key may be pressed on keyboard. To accelerate the adjustment, control key may be pressed on keyboard.</p>
-	<p>For all knobs (especially when they are stiff) quick adjustment of parameter may be achived by left-clicking
+	<p>For all knobs (especially when they are stiff) quick adjustment of parameter may be achieved by left-clicking
 	knob's scale. Also, additionally mouse button may be hold and parameter will be adjusted by moving mouse
 	clockwise/counter-clockwise.</p>
 	<p>Note, that knob scale actions can be enabled or disabled by the additional 'UI behavior' &rarr; 'Editable knob scale' option.</p>
@@ -476,7 +477,7 @@
 <section id="Meter">
 	<h2>Meter</h2>
 	<p>Meters are used for metering some values (mostly, levels of the audio signal). They may contain yellow
-	and red zones. They respectivelly show that signal exceeds -6dB and 0dB levels.<p>
+	and red zones. They respectively show that signal exceeds -6dB and 0dB levels.<p>
 	<p style="text-align:center">Example of meters:</p>
 	<div class="images">
 		<img style="margin-right:10px;" src="<?= $CTL ?>meter_mono.png">
@@ -484,6 +485,17 @@
 	</div>
 </section>
 
+<section id="Overlay">
+	<h2>Overlay</h2>
+	<p>Overlays are special widget containers designed to hide rarely used controls from regular user while
+	keeping the power, functionality and flexibility of the plugin. These widget allow to show on demand set
+	of additional controls laying on the top of plugin's window. Usually it is done by special button.<p>
+	<p style="text-align:center">Example of overlay:</p>
+	<div class="images">
+		<img style="margin-right:10px;" src="<?= $CTL ?>overlay.png">
+	</div>
+</section>
+
 <section id="Parameter">
 	<h2>Parameter</h2>
 	<p>Parameters are widgets that display the actual value and measuring units of some controlled parameter.
@@ -509,7 +521,7 @@
 <section id="SampleEditor">
 	<h2>Sample Editor</h2>
 	
-	<p>Sampe Editor widget is used for viewing and editing audio samples. It is similar to AudioFile wiget but
+	<p>Sample Editor widget is used for viewing and editing audio samples. It is similar to AudioFile wiget but
 	unlike AudioFile widget, it does not allow to load files from file system.</p>
 	
 	<p>By default if there is no sample data, the file widget displays
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/development/eclipse.php 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/development/eclipse.php
--- 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/development/eclipse.php	2025-03-01 12:43:17.944521421 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/development/eclipse.php	2025-08-26 18:16:37.433482041 +0000
@@ -58,7 +58,7 @@ to <b>[ All Configurations ]</b>, this w
 
 <p>Select <b>GCC C++ Compiler</b> &rarr; <b>Preprocessor</b> section and add following macros to <b>Defined Symbols</b>:</p>
 <ul>
-	<li><b>LSP_TRACE</b> - this macro will enable output of trace information to the console while running code in debug envirionment.</li>
+	<li><b>LSP_TRACE</b> - this macro will enable output of trace information to the console while running code in debug environment.</li>
 	<li><b>LSP_IDE_DEBUG</b> - makes invisible set of main() functions that are defined in source code of different tools.</li>
 	<li><b>LSP_TESTING</b> - enables unit testing subsystem in build.</li>
 </ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/development/ui_guidelines.php 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/development/ui_guidelines.php
--- 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/development/ui_guidelines.php	2025-03-01 12:43:17.944521421 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/development/ui_guidelines.php	2025-08-26 18:16:37.433482041 +0000
@@ -27,7 +27,7 @@
 
 <ul>
 	<li>The plugin’s window becomes split into separate blocks, each of them can contain it’s own properties: the color of the background, the padding, the minimal width, etc. The size of paddings, minimal size, etc is counted in nominal pixels.</li>
-	<li>Also block can be built-in into another block. This allows to create more complicated strutures.</li>
+	<li>Also block can be built-in into another block. This allows to create more complicated structures.</li>
 	<li>Blocks can inherit some features of parent blocks. For example, the color of the background.</li>
 	<li>We use tags for the definition of the window structure and location of the blocks.</li>
 </ul>
@@ -61,7 +61,7 @@
 	</div>
 </div>
 <ul>
-	<li>If the structure is more complicated than set of several blocks placed into one single horisontal or vertical line, it is recommended to use grid and place blocks and widgets into separate cells of the grid.</li>
+	<li>If the structure is more complicated than set of several blocks placed into one single horizontal or vertical line, it is recommended to use grid and place blocks and widgets into separate cells of the grid.</li>
 </ul>
 <div class="grid-2col-man">
 	<div class="thc-descr">
@@ -151,12 +151,12 @@
 <div class="images" style="margin: -10px auto 15px auto;">
 	<img class="border" style="max-width: 100%;" src="<?= $CTL ?>/scheme_legacy_dark.png">
 </div>
-<p>One important rule: if some color was added to one shema, it should also be added to other schemas. It is also imporant to check how new added color affects the look of related widgets for these schemas.</p>
+<p>One important rule: if some color was added to one schema, it should also be added to other schemas. It is also important to check how new added color affects the look of related widgets for these schemas.</p>
 
 <h2>Basic color rules and solutions</h2>
 
 <p>In the &quot;MODERN&quot; schema all colors are organized according to the LCH (or HCL) color space which is based on LAB color space. In such color space all colors have perceptual uniformity. That means, that in LCH color space all colors that
-	have the same lighness are perceived as colors that have the same lightness, and all colors that have the same chromaticity are percieved as colors with the same chromaticity.</p>
+	have the same lighness are perceived as colors that have the same lightness, and all colors that have the same chromaticity are perceived as colors with the same chromaticity.</p>
 
 <p>Such decision was made for the purpose of making the interface soft and not too motely, and also to make the individual elements not changing the brightness depending on the color tone (as a counterversive part to HSL color space in the
 	&quot;Legacy&quot; schema).</p>
@@ -227,7 +227,7 @@
 
 <p>That&rsquo;s why before adding new color to the widget&rsquo;s property it is important to ensure that it is not already defined in the schema.<br />
 	The color in color schema should reflect the meaning of the entity it is operating or the process it is responsible for. In other words, &quot;button_green&quot; is a bad name for the color because even if it is green in current schema, it can
-	suprisingly become of another color in another schema. By the other side, &quot;button_threshold&quot; is a good color name because it tells about the function of the element it is associated with.</p>
+	surprisingly become of another color in another schema. By the other side, &quot;button_threshold&quot; is a good color name because it tells about the function of the element it is associated with.</p>
 
 <p>The value of the color can be defined in multiple ways (capital letters mean hexadecimal digits while lower-case letters mean floating-point values often normalized to range 0.0 to 1.0):</p>
 
@@ -248,13 +248,13 @@
 	colors.</p>
 
 <p>It is strongly not recommended to explicitly define the value of the color in plugin&rsquo;s UI markup file. Otherwise switching schemas will yield to unexpected results caused by hard-coded colors not blending together with other elements. To
-	prevent such problem, it is strongly recommented to define all colors in schema files.</p>
+	prevent such problem, it is strongly recommended to define all colors in schema files.</p>
 
 <p>If widgets are of the different kind but carry the same meaning, it is important to make them of the same color. It helps to preserve the common style and provide the consistency of the interface.</p>
 
 <p>Gray tones are used only for inactive (disabled) elements and we don&rsquo;t use it for any plugin&rsquo;s parameter.</p>
 
-<p style="text-align:center">In the example below the selected filter does not provide band width nor gain controls, that&rsquo;s why corresponsing widgets were of the gray color.</p>
+<p style="text-align:center">In the example below the selected filter does not provide band width nor gain controls, that&rsquo;s why corresponding widgets were of the gray color.</p>
 <div class="images" style="margin: -10px auto 15px auto;">
 	<img class="border" style="max-width: 100%;" src="<?= $CTL ?>/inactive.png">
 </div>
@@ -278,10 +278,10 @@
 	<img class="border" style="max-width: 100%;" src="<?= $CTL ?>/cycles.png">
 </div>
 
-<p>There are three colors defined for the background in &quot;Modern&quot; schema. Usually, the first color is used by separators and paddings, the second color is used for primary background, the third one is the primary backround for widgets in
+<p>There are three colors defined for the background in &quot;Modern&quot; schema. Usually, the first color is used by separators and paddings, the second color is used for primary background, the third one is the primary background for widgets in
 	inactive state.</p>
 
-<p>Instead of higlighting some active element, it is decided in LSP to darken inactive elements. In other words, the block containing widget and all widgets in this block become darken. Scales, buttons, meters and other colored widgets become
+<p>Instead of highlighting some active element, it is decided in LSP to darken inactive elements. In other words, the block containing widget and all widgets in this block become darken. Scales, buttons, meters and other colored widgets become
 	grayscale (excluding the active ones).</p>
 
 <div class="images">
@@ -338,7 +338,7 @@
 <p>While designing the user interface, it is generally accepted to always show all possible elements like knobs, combo boxes, buttons, etc. If under certain conditions widget is useless, we don&rsquo;t hide it from the UI but make inactive (gray
 	color and dark background if necessary). This allows to make the UI look more stable, no window resize nor content flickering happens.</p>
 
-<p>It is strongly recommended to verify the maximum and minimum values of the <strong><em>&lt;value&gt;</em></strong> widget. For this pupose just put the corresponding control element into the minimum and maximum positions. If the values are
+<p>It is strongly recommended to verify the maximum and minimum values of the <strong><em>&lt;value&gt;</em></strong> widget. For this purpose just put the corresponding control element into the minimum and maximum positions. If the values are
 	flickering and force to flicker the neighbor widgets, it is required to explicitly specify the minimum widget width that allows to fully fit the minimum and maximum value text.</p>
 
 <pre>
@@ -372,7 +372,7 @@
 	<img class="border" style="max-width: 100%;" src="<?= $CTL ?>/shake.gif">
 </div>
 
-<p>On the picture above we observe the flickering of the UI when adjusting the value of the &quot;Dry&quot; knob. To solve this, we alterate the tag <strong><em>&lt;value id=&quot;dry&quot; pad.b=&quot;4&quot;
+<p>On the picture above we observe the flickering of the UI when adjusting the value of the &quot;Dry&quot; knob. To solve this, we alternate the tag <strong><em>&lt;value id=&quot;dry&quot; pad.b=&quot;4&quot;
 			same.line=&quot;true&quot;/&gt;</em></strong> and append additional property <strong><em>width.min=&quot;48&quot;</em></strong>. Finally the tag now looks like this: <strong><em>&lt;value id=&quot;dry&quot; pad.b=&quot;4&quot;
 			same.line=&quot;true&quot; width.min=&quot;48&quot;/&gt;</em></strong>. The result is on the picture below:</p>
 
@@ -419,7 +419,7 @@
 	<img class="border" style="max-width: 100%;" src="<?= $CTL ?>/middle.png">
 </div>
 
-<p>In the body of the plugin there can be such elemens as:</p>
+<p>In the body of the plugin there can be such elements as:</p>
 
 <p>&nbsp;</p>
 
@@ -442,7 +442,7 @@
 </div>
 
 <p>There are also widgets of the same to<strong><em> &lt;group&gt; </em></strong>meaning: <strong><em>&lt;tabs&gt; and &lt;cgroup&gt;</em></strong>. They are designed for paging purpose and paginized access to the huge amount of control elements such
-	as filter parameters in the equalizer or differens sample manipulations in sampler.</p>
+	as filter parameters in the equalizer or different sample manipulations in sampler.</p>
 
 <div class="images">
 	<img class="border" style="max-width: 100%;" src="<?= $CTL ?>/tabs.png">
diff -pruN 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/overview.php 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/overview.php
--- 1.2.21-5/modules/lsp-plugins-shared/src/doc/manuals/overview.php	2025-03-01 12:43:17.944521421 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-shared/src/doc/manuals/overview.php	2025-08-26 18:16:37.433482041 +0000
@@ -15,4 +15,4 @@
 
 <p>Currently project is developed and maintained by LSP Project Team with the main founder and developer at the head &ndash; Vladimir Sadovnikov.</p>
 
-<p>The official site ot the project is located here: <a href="https://lsp-plug.in/">https://lsp-plug.in/</a></p>
+<p>The official site for the project is located here: <a href="https://lsp-plug.in/">https://lsp-plug.in/</a></p>
diff -pruN 1.2.21-5/modules/lsp-plugins-slap-delay/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-slap-delay/.github/workflows/build.yml	2025-03-01 12:43:16.576529632 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/.github/workflows/build.yml	2025-08-26 18:16:07.169775761 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-slap-delay/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-slap-delay/CHANGELOG	2025-03-01 12:43:16.576529632 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/CHANGELOG	2025-08-26 18:16:07.169775761 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.27 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
 === 1.0.25 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-slap-delay/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-slap-delay/dependencies.mk	2025-03-01 12:43:16.576529632 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/dependencies.mk	2025-08-26 18:16:07.169775761 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-slap-delay/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-slap-delay/make/tools.mk	2025-03-01 12:43:16.576529632 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/make/tools.mk	2025-08-26 18:16:07.173775722 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-slap-delay/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/modules.mk
--- 1.2.21-5/modules/lsp-plugins-slap-delay/modules.mk	2025-03-01 12:43:16.576529632 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/modules.mk	2025-08-26 18:16:07.173775722 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-slap-delay/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/project.mk
--- 1.2.21-5/modules/lsp-plugins-slap-delay/project.mk	2025-03-01 12:43:16.576529632 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/project.mk	2025-08-26 18:16:07.173775722 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Slap-back Delay Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.25
+ARTIFACT_VERSION            = 1.0.27
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-slap-delay/res/doc/screenshots/slap_delay_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/res/doc/screenshots/slap_delay_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-slap-delay/res/doc/screenshots/slap_delay_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/res/doc/screenshots/slap_delay_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-slap-delay/src/main/meta/slap_delay.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/src/main/meta/slap_delay.cpp
--- 1.2.21-5/modules/lsp-plugins-slap-delay/src/main/meta/slap_delay.cpp	2025-03-01 12:43:16.580529609 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-slap-delay/src/main/meta/slap_delay.cpp	2025-08-26 18:16:07.177775683 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-slap-delay
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_SLAP_DELAY_VERSION_MAJOR       1
 #define LSP_PLUGINS_SLAP_DELAY_VERSION_MINOR       0
-#define LSP_PLUGINS_SLAP_DELAY_VERSION_MICRO       25
+#define LSP_PLUGINS_SLAP_DELAY_VERSION_MICRO       27
 
 #define LSP_PLUGINS_SLAP_DELAY_VERSION  \
     LSP_MODULE_VERSION( \
@@ -58,54 +58,54 @@ namespace lsp
             { NULL, NULL }
         };
 
-        #define SLAP_PAN_MONO(id, label) \
-            PAN_CTL("p" id, label " panorama", 0.0f)
+        #define SLAP_PAN_MONO(id, label, alias) \
+            PAN_CTL("p" id, label " panorama", "Pan" alias, 0.0f)
 
-        #define SLAP_PAN_STEREO(id, label) \
-            PAN_CTL("pl" id, label " left channel panorama", -100.0f), \
-            PAN_CTL("pr" id, label " right channel panorama", 100.0f), \
-            PAN_CTL("bal" id, label " balance", 0.0f)
+        #define SLAP_PAN_STEREO(id, label, alias) \
+            PAN_CTL("pl" id, label " left channel panorama", "Pan L" alias, -100.0f), \
+            PAN_CTL("pr" id, label " right channel panorama", "Pan R" alias, 100.0f), \
+            PAN_CTL("bal" id, label " balance", "Balance" alias, 0.0f)
 
         #define SLAP_DELAY_COMMON(pan)  \
             BYPASS, \
-            COMBO("lsel", "Delay line selector", 0, slap_delay_lines), \
-            CONTROL("temp", "Temperature", U_DEG_CEL, slap_delay_metadata::TEMPERATURE), \
-            CONTROL("pred", "Pre-delay", U_MSEC, slap_delay_metadata::PRED_TIME), \
-            CONTROL("strch", "Stretch time", U_PERCENT, slap_delay_metadata::STRETCH), \
-            CONTROL("tempo", "Tempo", U_BPM, slap_delay_metadata::TEMPO), \
-            SWITCH("sync", "Tempo sync", 0.0f), \
-            SWITCH("ramp", "Ramping delay", 0.0f), \
-            pan("_in", "Input"), \
+            COMBO("lsel", "Delay line selector", "Delay line", 0, slap_delay_lines), \
+            CONTROL("temp", "Temperature", "Temperature", U_DEG_CEL, slap_delay_metadata::TEMPERATURE), \
+            CONTROL("pred", "Pre-delay", "Pre-delay", U_MSEC, slap_delay_metadata::PRED_TIME), \
+            CONTROL("strch", "Stretch time", "Stretch", U_PERCENT, slap_delay_metadata::STRETCH), \
+            CONTROL("tempo", "Tempo", "Tempo", U_BPM, slap_delay_metadata::TEMPO), \
+            SWITCH("sync", "Tempo sync", "Tempo sync", 0.0f), \
+            SWITCH("ramp", "Ramping delay", "Delay ramp", 0.0f), \
+            pan("_in", "Input", " In"), \
             DRY_GAIN(GAIN_AMP_0_DB), \
-            SWITCH("dm", "Dry mute", 0.0f), \
+            SWITCH("dm", "Dry mute", "Mute dry", 0.0f), \
             WET_GAIN(GAIN_AMP_0_DB), \
-            SWITCH("wm", "Wet mute", 0.0f), \
+            SWITCH("wm", "Wet mute", "Mute wet", 0.0f), \
             DRYWET(100.0f), \
-            SWITCH("mono", "Mono output", 0.0f), \
+            SWITCH("mono", "Mono output", "Mono", 0.0f), \
             OUT_GAIN
 
         #define SLAP_DELAY_PROCESSOR(id, pan) \
-            COMBO("dm" #id, "Delay " #id " mode", 0, slap_delay_modes), \
-            pan(#id, "Delay " #id), \
-            SWITCH("s" #id, "Delay " #id " solo", 0.0f), \
-            SWITCH("m" #id, "Delay " #id " mute", 0.0f), \
-            SWITCH("ph" #id, "Delay " #id " phase", 0.0f), \
-            CONTROL("dt" #id, "Delay " #id " time", U_MSEC, slap_delay_metadata::TIME), \
-            CONTROL("dd" #id, "Delay " #id " distance", U_M, slap_delay_metadata::DISTANCE), \
-            CONTROL("df" #id, "Delay " #id " fraction", U_BAR, slap_delay_metadata::FRACTION), \
-            INT_CONTROL("ds" #id, "Delay " #id " denominator", U_BEAT, slap_delay_metadata::DENOMINATOR), \
-            SWITCH("eq" #id, "Equalizer " #id " on", 0.0f), \
-            SWITCH("lfc" #id, "Delay " #id " low-cut", 0.0f), \
-            LOG_CONTROL("flc" #id, "Delay " #id " low-cut frequency", U_HZ, slap_delay_metadata::LOW_CUT), \
-            SWITCH("hfc" #id, "Delay " #id " high-cut", 0.0f), \
-            LOG_CONTROL("fhc" #id, "Delay " #id " high-cut frequency", U_HZ, slap_delay_metadata::HIGH_CUT), \
-            LOG_CONTROL("fbs" #id, "Delay " #id " sub-bass", U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
-            LOG_CONTROL("fbb" #id, "Delay " #id " bass", U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
-            LOG_CONTROL("fbm" #id, "Delay " #id " middle", U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
-            LOG_CONTROL("fbp" #id, "Delay " #id " presence", U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
-            LOG_CONTROL("fbt" #id, "Delay " #id " treble", U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
-            AMP_GAIN1("dfb" #id, "Delay " #id " feedback", GAIN_AMP_M_INF_DB), \
-            AMP_GAIN10("dg" #id, "Delay " #id " gain", GAIN_AMP_0_DB)
+            COMBO("dm" #id, "Delay " #id " mode", "Mode " #id, 0, slap_delay_modes), \
+            pan(#id, "Delay " #id, " " #id), \
+            SWITCH("s" #id, "Delay " #id " solo", "Solo " #id, 0.0f), \
+            SWITCH("m" #id, "Delay " #id " mute", "Mute " #id, 0.0f), \
+            SWITCH("ph" #id, "Delay " #id " phase", "Phase " #id, 0.0f), \
+            CONTROL("dt" #id, "Delay " #id " time", "Delay " #id, U_MSEC, slap_delay_metadata::TIME), \
+            CONTROL("dd" #id, "Delay " #id " distance", "Distance " #id, U_M, slap_delay_metadata::DISTANCE), \
+            CONTROL("df" #id, "Delay " #id " fraction", "Frac " #id, U_BAR, slap_delay_metadata::FRACTION), \
+            INT_CONTROL("ds" #id, "Delay " #id " denominator", "Denom " #id, U_BEAT, slap_delay_metadata::DENOMINATOR), \
+            SWITCH("eq" #id, "Equalizer " #id " on", "Eq " #id, 0.0f), \
+            SWITCH("lfc" #id, "Delay " #id " low-cut", "LC On " #id, 0.0f), \
+            LOG_CONTROL("flc" #id, "Delay " #id " low-cut frequency", "LC freq " #id, U_HZ, slap_delay_metadata::LOW_CUT), \
+            SWITCH("hfc" #id, "Delay " #id " high-cut", "HC On " #id, 0.0f), \
+            LOG_CONTROL("fhc" #id, "Delay " #id " high-cut frequency", "HC freq " #id, U_HZ, slap_delay_metadata::HIGH_CUT), \
+            LOG_CONTROL("fbs" #id, "Delay " #id " sub-bass", "Sub lvl " #id, U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
+            LOG_CONTROL("fbb" #id, "Delay " #id " bass", "Bass lvl " #id, U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
+            LOG_CONTROL("fbm" #id, "Delay " #id " middle", "Mid lvl " #id, U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
+            LOG_CONTROL("fbp" #id, "Delay " #id " presence", "Presence lvl " #id, U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
+            LOG_CONTROL("fbt" #id, "Delay " #id " treble", "Treble lvl " #id, U_GAIN_AMP, slap_delay_metadata::BAND_GAIN), \
+            AMP_GAIN1("dfb" #id, "Delay " #id " feedback", "Feed " #id, GAIN_AMP_M_INF_DB), \
+            AMP_GAIN10("dg" #id, "Delay " #id " gain", "Gain " #id, GAIN_AMP_0_DB)
 
         #define SLAP_DELAY_PROCESSORS(pan) \
             SLAP_DELAY_PROCESSOR(0, pan), \
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/.github/workflows/build.yml	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/.github/workflows/build.yml	2025-08-26 18:16:16.941680922 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/CHANGELOG	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/CHANGELOG	2025-08-26 18:16:16.941680922 +0000
@@ -2,6 +2,14 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.32 ===
+* Added frequency inspection mode.
+* Added support of linear frequency scale.
+* Updated build scripts and dependencies.
+
+=== 1.0.31 ===
+* Updated build scripts and dependencies.
+
 === 1.0.30 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/dependencies.mk	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/dependencies.mk	2025-08-26 18:16:16.941680922 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/include/private/meta/spectrum_analyzer.h 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/include/private/meta/spectrum_analyzer.h
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/include/private/meta/spectrum_analyzer.h	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/include/private/meta/spectrum_analyzer.h	2025-08-26 18:16:16.941680922 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-spectrum-analyzer
  * Created on: 22 июн. 2021 г.
@@ -36,8 +36,9 @@ namespace lsp
         struct spectrum_analyzer
         {
             static constexpr float          FREQ_MIN            = SPEC_FREQ_MIN;
-            static constexpr float          FREQ_DFL            = 1000.0f;
             static constexpr float          FREQ_MAX            = SPEC_FREQ_MAX;
+            static constexpr float          FREQ_DFL            = 1000.0f;
+            static constexpr float          FREQ_STEP           = 0.0f;
             static constexpr float          CORR_PERIOD         = 100.0f;
 
             static constexpr size_t         PORTS_PER_INPUT     = 6;
@@ -81,6 +82,16 @@ namespace lsp
             static constexpr float          ZOOM_DFL            = GAIN_AMP_0_DB;
             static constexpr float          ZOOM_STEP           = 0.025f;
 
+            static constexpr float          INSPECT_MIN         = 0.0f;
+            static constexpr float          INSPECT_MAX         = 5.0f;
+            static constexpr float          INSPECT_DFL         = 1.0f;
+            static constexpr float          INSPECT_STEP        = 0.005f;
+
+            static constexpr float          WIDTH_MIN           = 0.0f;
+            static constexpr float          WIDTH_MAX           = 12.0f;
+            static constexpr float          WIDTH_DFL           = 4.0f;
+            static constexpr float          WIDTH_STEP          = 0.002f;
+
             static constexpr float          PREAMP_DFL          = 1.0;
 
             static constexpr size_t         REFRESH_RATE        = 20;
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/include/private/plugins/spectrum_analyzer.h 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/include/private/plugins/spectrum_analyzer.h
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/include/private/plugins/spectrum_analyzer.h	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/include/private/plugins/spectrum_analyzer.h	2025-08-26 18:16:16.941680922 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-spectrum-analyzer
  * Created on: 22 июн. 2021 г.
@@ -23,6 +23,7 @@
 #define PRIVATE_PLUGINS_SPECTRUM_ANALYZER_H_
 
 #include <lsp-plug.in/dsp-units/ctl/Counter.h>
+#include <lsp-plug.in/dsp-units/filters/Equalizer.h>
 #include <lsp-plug.in/dsp-units/meters/Correlometer.h>
 #include <lsp-plug.in/dsp-units/util/Analyzer.h>
 #include <lsp-plug.in/plug-fw/plug.h>
@@ -39,44 +40,47 @@ namespace lsp
             protected:
                 typedef struct sa_channel_t
                 {
-                    bool            bOn;                // Enabled flag
-                    bool            bFreeze;            // Freeze flag
-                    bool            bSolo;              // Soloing flag
-                    bool            bSend;              // Send to UI flag
-                    bool            bMSSwitch;          // Mid/side switch
-                    float           fGain;              // Makeup gain
-                    float          *vIn;                // Input buffer pointer
-                    float          *vOut;               // Output buffer pointer
-                    float          *vRet;               // Return buffer
-                    float          *vBuffer;            // Temporary buffer
-                    float          *vSpc[2];            // Spectrum data
-                    float          *vMax[2];            // Maximum data
+                    dspu::Equalizer     sInspEq;            // Inspection equalizer
+
+                    bool                bOn;                // Enabled flag
+                    bool                bFreeze;            // Freeze flag
+                    bool                bSolo;              // Soloing flag
+                    bool                bSend;              // Send to UI flag
+                    bool                bMSSwitch;          // Mid/side switch
+                    float               fGain;              // Makeup gain
+                    float              *vIn;                // Input buffer pointer
+                    float              *vOut;               // Output buffer pointer
+                    float              *vRet;               // Return buffer
+                    float              *vBuffer;            // Temporary buffer
+                    float              *vSpc[4];            // Spectrum data
+                    float              *vMax[4];            // Maximum data
 
                     // Port references
-                    plug::IPort    *pIn;                // Input samples
-                    plug::IPort    *pOut;               // Output samples
-                    plug::IPort    *pRet;               // Return
-                    plug::IPort    *pMSSwitch;          // Mid/Side switch
-                    plug::IPort    *pOn;                // FFT on
-                    plug::IPort    *pSolo;              // Soloing flag
-                    plug::IPort    *pFreeze;            // Freeze flag
-                    plug::IPort    *pShift;             // Shift gain
+                    plug::IPort        *pIn;                // Input samples
+                    plug::IPort        *pOut;               // Output samples
+                    plug::IPort        *pRet;               // Return
+                    plug::IPort        *pMSSwitch;          // Mid/Side switch
+                    plug::IPort        *pOn;                // FFT on
+                    plug::IPort        *pSolo;              // Soloing flag
+                    plug::IPort        *pFreeze;            // Freeze flag
+                    plug::IPort        *pShift;             // Shift gain
                 } sa_channel_t;
 
                 typedef struct sa_spectralizer_t
                 {
-                    int32_t         nPortId;            // Last port identifier
-                    int32_t         nChannelId;         // Channel identifier
+                    int32_t             nPortId;            // Last port identifier
+                    int32_t             nChannelId;         // Channel identifier
+                    bool                bLinFreq;           // Linear frequency
 
-                    plug::IPort    *pPortId;            // Port identifier
-                    plug::IPort    *pFBuffer;           // Frame buffer port
+                    plug::IPort        *pPortId;            // Port identifier
+                    plug::IPort        *pFBuffer;           // Frame buffer port
                 } sa_spectralizer_t;
 
                 typedef struct sa_correlometer_t
                 {
-                    dspu::Correlometer  sCorr;          // Correlometer
-                    float           fCorrelation;       // Measured correlation value
-                    plug::IPort    *pCorrelometer;      // Correlometer output value
+                    dspu::Correlometer  sCorr;              // Correlometer
+                    float               fCorrelation;       // Measured correlation value
+                    plug::IPort        *pCorrelometer;      // Correlometer output value
                 } sa_correlometer_t;
 
                 enum mode_t
@@ -91,97 +95,111 @@ namespace lsp
 
                 enum flags_t
                 {
-                    F_MASTERING     = 1 << 0,
-                    F_SMOOTH_LOG    = 1 << 1,
-                    F_LOG_SCALE     = 1 << 2,
-                    F_BOOST         = 1 << 3
+                    F_MASTERING         = 1 << 0,
+                    F_SMOOTH_LOG        = 1 << 1,
+                    F_LOG_SCALE         = 1 << 2,
+                    F_BOOST             = 1 << 3,
+                    F_LIN_FREQ          = 1 << 4,
                 };
 
             protected:
-                dspu::Analyzer      sAnalyzer;
-                dspu::Counter       sCounter;
-                uint32_t            nChannels;
-                uint32_t            nCorrelometers;
-                sa_channel_t       *vChannels;
-                sa_correlometer_t  *vCorrelometers;     // Available correlometers
-                float             **vAnalyze;           // Analysis buffers
-                float              *vFrequences;
-                float              *vMaxValues[2];      // Maximum value tracking
-                float              *vMFrequences;
-                uint32_t           *vIndexes;
-                uint8_t            *pData;
-
-                bool                bBypass;
-                size_t              nChannel;
-                float               fSelector;
-                float               fMinFreq;
-                float               fMaxFreq;
-                float               fReactivity;        // Reactivity
-                float               fTau;               // Time constant (dependent on reactivity)
-                float               fPreamp;            // Preamplification level
-                float               fZoom;              // Zoom
-                mode_t              enMode;
-                bool                bLogScale;
-                bool                bMSSwitch;          // Mid/Side switch for stereo mode
-
-                float               fWndState;          // Variable to save the state of WINDOW
-                float               fEnvState;          // Variable to save the state of ENVELOPE
-
-                plug::IPort        *pBypass;
-                plug::IPort        *pMode;
-                plug::IPort        *pTolerance;
-                plug::IPort        *pWindow;
-                plug::IPort        *pEnvelope;
-                plug::IPort        *pPreamp;
-                plug::IPort        *pZoom;
-                plug::IPort        *pReactivity;
-                plug::IPort        *pChannel;
-                plug::IPort        *pSelector;
-                plug::IPort        *pFrequency;
-                plug::IPort        *pLevel;
-                plug::IPort        *pLogScale;
-                plug::IPort        *pFftData;
-                plug::IPort        *pMSSwitch;
-
-                plug::IPort        *pFreeze;
-                plug::IPort        *pMaxReset;          // Reset maximum values
-                plug::IPort        *pSpp;
-                sa_spectralizer_t   vSpc[2];
+                dspu::Analyzer          sAnalyzer;
+                dspu::Counter           sCounter;
+                uint32_t                nChannels;
+                uint32_t                nCorrelometers;
+                sa_channel_t           *vChannels;
+                sa_correlometer_t      *vCorrelometers;     // Available correlometers
+                dspu::filter_params_t   vFP[2];             // Filter parameters (current, new)
+                float                 **vAnalyze;           // Analysis buffers
+                float                  *vFrequences[2];     // Logarithmic frequencies, linear frequencies
+                float                  *vMaxValues[4];      // Maximum value tracking
+                float                  *vMFrequences;
+                uint32_t               *vIndexes[2];        // Logarithimic indexes, linear indexes
+                uint8_t                *pData;
+
+                bool                    bBypass;
+                uint32_t                nChannel;
+                float                   fSelector;
+                float                   fMinFreq;
+                float                   fMaxFreq;
+                float                   fReactivity;        // Reactivity
+                float                   fTau;               // Time constant (dependent on reactivity)
+                float                   fPreamp;            // Preamplification level
+                float                   fZoom;              // Zoom
+                mode_t                  enMode;
+                bool                    bLogScale;
+                bool                    bLinFreq;           // Linear frequency
+                bool                    bMSSwitch;          // Mid/Side switch for stereo mode
+                bool                    bInspOn;            // Frequency inspection is active
+                bool                    bSyncInspFilter;    // Sync inspect filter characteristics
+                bool                    bSmoothInspFilter;  // Smooth inspect filter
+
+                float                   fWndState;          // Variable to save the state of WINDOW
+                float                   fEnvState;          // Variable to save the state of ENVELOPE
+
+                plug::IPort            *pBypass;
+                plug::IPort            *pMode;
+                plug::IPort            *pTolerance;
+                plug::IPort            *pWindow;
+                plug::IPort            *pEnvelope;
+                plug::IPort            *pPreamp;
+                plug::IPort            *pZoom;
+                plug::IPort            *pReactivity;
+                plug::IPort            *pChannel;
+                plug::IPort            *pSelector;
+                plug::IPort            *pInspSwitch;
+                plug::IPort            *pInspRange;
+                plug::IPort            *pFrequency;
+                plug::IPort            *pLevel;
+                plug::IPort            *pLogScale;
+                plug::IPort            *pLinFreq;
+                plug::IPort            *pFftData;
+                plug::IPort            *pInspMesh;
+                plug::IPort            *pMSSwitch;
+
+                plug::IPort            *pFreeze;
+                plug::IPort            *pMaxReset;          // Reset maximum values
+                plug::IPort            *pSpp;
+                sa_spectralizer_t       vSpc[2];
 
-                core::IDBuffer     *pIDisplay;          // Inline display buffer
+                core::IDBuffer         *pIDisplay;          // Inline display buffer
 
             protected:
-                bool                create_channels(size_t channels);
-                mode_t              decode_mode(size_t mode);
-                void                do_destroy();
-
-                void                update_multiple_settings();
-                void                update_x2_settings(ssize_t ch1, ssize_t ch2);
-                void                update_spectralizer_x2_settings(ssize_t ch1, ssize_t ch2);
-
-                void                process_multiple();
-                void                process_spectralizer();
-                void                get_spectrum(float *dst, size_t channel, size_t flags);
-                void                measure_correlation(size_t count);
-                void                prepare_buffers(size_t count);
+                bool                    create_channels(size_t channels);
+                mode_t                  decode_mode(size_t mode);
+                void                    do_destroy();
+
+                void                    update_multiple_settings();
+                void                    update_x2_settings(ssize_t ch1, ssize_t ch2);
+                void                    update_spectralizer_x2_settings(ssize_t ch1, ssize_t ch2);
+
+                void                    analyze_data(size_t samples);
+                void                    pass_signal(size_t samples);
+                void                    process_multiple();
+                void                    process_spectralizer();
+                void                    get_spectrum(float *dst, size_t channel, size_t flags);
+                void                    measure_correlation(size_t count);
+                void                    prepare_buffers(size_t count);
 
-                void                output_spectrum();
+                void                    output_spectrum();
+                void                    output_inpect_filter();
 
             public:
                 explicit spectrum_analyzer(const meta::plugin_t *metadata);
                 virtual ~spectrum_analyzer() override;
 
             public:
-                virtual void        init(plug::IWrapper *wrapper, plug::IPort **ports) override;
-                virtual void        destroy() override;
+                virtual void            init(plug::IWrapper *wrapper, plug::IPort **ports) override;
+                virtual void            destroy() override;
 
-                virtual void        update_settings() override;
-                virtual void        update_sample_rate(long sr) override;
+                virtual void            update_settings() override;
+                virtual void            update_sample_rate(long sr) override;
 
-                virtual void        process(size_t samples) override;
-                virtual bool        inline_display(plug::ICanvas *cv, size_t width, size_t height) override;
+                virtual void            process(size_t samples) override;
+                virtual bool            inline_display(plug::ICanvas *cv, size_t width, size_t height) override;
+                virtual void            ui_activated() override;
 
-                virtual void        dump(dspu::IStateDumper *v) const override;
+                virtual void            dump(dspu::IStateDumper *v) const override;
         };
 
     } /* namespace plugins */
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/include/private/ui/spectrum_analyzer.h 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/include/private/ui/spectrum_analyzer.h
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/include/private/ui/spectrum_analyzer.h	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/include/private/ui/spectrum_analyzer.h	2025-08-26 18:16:16.941680922 +0000
@@ -35,6 +35,12 @@ namespace lsp
         class spectrum_analyzer_ui: public ui::Module, public ui::IPortListener
         {
             protected:
+                enum key_flags_t
+                {
+                    K_LEFT_CTRL     = 1 << 0,
+                    K_RIGHT_CTRL    = 1 << 1,
+                };
+
                 typedef struct channel_t
                 {
                     spectrum_analyzer_ui   *pUI;
@@ -64,6 +70,8 @@ namespace lsp
                 ui::IPort                  *pSelChannel;        // Selected channel
                 ui::IPort                  *pFftFreq;           // Actual FFT frequency
                 ui::IPort                  *pLevel;             // Actual level
+                ui::IPort                  *pInspIndex;         // Inspection index
+                ui::IPort                  *pInspOn;            // Inspection enable flag
                 lltl::darray<channel_t>     vChannels;
 
             protected:
@@ -72,6 +80,8 @@ namespace lsp
                 ui::IPort      *find_port(const char *prefix, size_t id);
 
             protected:
+                static status_t slot_graph_key_down(tk::Widget *sender, void *ptr, void *data);
+                static status_t slot_graph_key_up(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_graph_mouse_down(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_graph_mouse_move(tk::Widget *sender, void *ptr, void *data);
                 static status_t slot_graph_mouse_up(tk::Widget *sender, void *ptr, void *data);
@@ -83,14 +93,20 @@ namespace lsp
                 void            on_graph_mouse_down(tk::Widget *sender, const ws::event_t *ev);
                 void            on_graph_mouse_move(tk::Widget *sender, const ws::event_t *ev);
                 void            on_graph_mouse_up(tk::Widget *sender, const ws::event_t *ev);
+                void            on_graph_key_down(tk::Widget *sender, const ws::event_t *ev);
+                void            on_graph_key_up(tk::Widget *sender, const ws::event_t *ev);
                 void            set_selector_text(tk::GraphText *fWidget, bool no_gain);
                 bool            channels_selector_visible();
+                void            enable_inspect(bool enable);
+                size_t          get_keys(tk::Widget *sender);
+
             public:
                 explicit spectrum_analyzer_ui(const meta::plugin_t *meta);
                 virtual ~spectrum_analyzer_ui() override;
 
+            public:
                 virtual status_t    post_init() override;
-
+                virtual status_t    pre_destroy() override;
                 virtual void        notify(ui::IPort *port, size_t flags) override;
         };
 
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/make/tools.mk	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/make/tools.mk	2025-08-26 18:16:16.941680922 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/modules.mk
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/modules.mk	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/modules.mk	2025-08-26 18:16:16.941680922 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/project.mk
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/project.mk	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/project.mk	2025-08-26 18:16:16.945680883 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Spectrum Analyzer Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.30
+ARTIFACT_VERSION            = 1.0.32
 
 
 
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x1.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x1.cfg
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x1.cfg	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x1.cfg	2025-08-26 18:16:16.945680883 +0000
@@ -1,14 +1,17 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             test (Test Case)
-#   Package version:     0.0.0-devel
-#   Plugin name:         Spektrumanalysator x1 (Spectrum Analyzer x1)
-#   Plugin version:      1.0.22
-#   UID:                 spectrum_analyzer_x1
-#   LV2 URI:             http://lsp-plug.in/plugins/lv2/spectrum_analyzer_x1
-#   VST identifier:      qtez
-#   LADSPA identifier:   5002068
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/spectrum_analyzer_x1
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Spektrumanalysator x1 (Spectrum Analyzer x1)
+#   Plugin version:          1.0.32
+#   UID:                     spectrum_analyzer_x1
+#   CLAP URI:                in.lsp-plug.spectrum_analyzer_x1
+#   GStreamer identifier:    lsp-plugins-spectrum-analyzer-x1
+#   LADSPA identifier:       5002068
+#   LADSPA label:            http://lsp-plug.in/plugins/ladspa/spectrum_analyzer_x1
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/spectrum_analyzer_x1
+#   VST 2.x identifier:      qtez
+#   VST 3.x identifier:      6473702073613120202020207174657A
 # 
 # (C) Test Case
 #   https://lsp-plug.in/
@@ -24,12 +27,12 @@ solo_0 = false
 # Freeze 0 [boolean]: true/false
 frz_0 = false
 
-# Hue 0: 0.00000000..1.00000000
-hue_0 = 0.00000
-
 # Shift gain 0 [G]: 0.00000000..1000.00000000
 sh_0 = 15.00 db
 
+# Audio return group 0 [string]
+ret_0 = ""
+
 # Bypass [boolean]: true/false
 bypass = false
 
@@ -61,21 +64,25 @@ splog = true
 # Analyzer freeze [boolean]: true/false
 freeze = false
 
+# Linear frequency scale [boolean]: true/false
+linfreq = true
+
 # Horizontal measuring line [boolean]: true/false
 mline = false
 
-# Track maximum values [boolean]: true/false
+# Show maximum values for all channels [boolean]: true/false
 mtrack = true
 
 # Reset maximum values [boolean]: true/false
 mreset = false
 
-# FFT Tolerance: 0..4
+# FFT Tolerance: 0..5
 #   0: 1024
 #   1: 2048
 #   2: 4096
 #   3: 8192
 #   4: 16384
+#   5: 32768
 tol = 3
 
 # FFT Window: 0..20
@@ -127,6 +134,15 @@ sel = 2598.52686
 # Horizontal measuring line level value [dB]: 0.00025119..15.84893036
 mlval = 1.00000
 
+# Inspected filter switch [boolean]: true/false
+insp_id = false
+
+# Inspect frequency range [oct]: 0.00000000..5.00000000
+insp_r = 1.00000
+
+# Automatically inspect frequency range [boolean]: true/false
+insp_on = false
+
 
 # -------------------------------------------------------------------------------
 # KVT parameters
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x2.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x2.cfg
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x2.cfg	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x2.cfg	2025-08-26 18:16:16.945680883 +0000
@@ -1,16 +1,19 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             lsp-plugin-fw ((null))
-#   Package version:     0.5.0
-#   Plugin name:         Spektrumanalysator x2 (Spectrum Analyzer x2)
-#   Plugin version:      1.0.5
-#   UID:                 spectrum_analyzer_x2
-#   LV2 URID:            http://lsp-plug.in/plugins/lv2/spectrum_analyzer_x2
-#   VST identifier:      aw7r
-#   LADSPA identifier:   5002069
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/spectrum_analyzer_x2
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Spektrumanalysator x2 (Spectrum Analyzer x2)
+#   Plugin version:          1.0.32
+#   UID:                     spectrum_analyzer_x2
+#   CLAP URI:                in.lsp-plug.spectrum_analyzer_x2
+#   GStreamer identifier:    lsp-plugins-spectrum-analyzer-x2
+#   LADSPA identifier:       5002069
+#   LADSPA label:            http://lsp-plug.in/plugins/ladspa/spectrum_analyzer_x2
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/spectrum_analyzer_x2
+#   VST 2.x identifier:      aw7r
+#   VST 3.x identifier:      64737020736132202020202061773772
 # 
-# (C) LSP Plugin Framework
+# (C) Test Case
 #   https://lsp-plug.in/
 # 
 # -------------------------------------------------------------------------------
@@ -24,11 +27,8 @@ solo_0 = false
 # Freeze 0 [boolean]: true/false
 frz_0 = false
 
-# Hue 0: 0.00000000..1.00000000
-hue_0 = 0.00000
-
 # Shift gain 0 [G]: 0.00000000..1000.00000000
-sh_0 = 31.08 db
+sh_0 = 25.50 db
 
 # Analyse 1 [boolean]: true/false
 on_1 = false
@@ -39,12 +39,15 @@ solo_1 = false
 # Freeze 1 [boolean]: true/false
 frz_1 = false
 
-# Hue 1: 0.00000000..1.00000000
-hue_1 = 0.50000
-
 # Shift gain 1 [G]: 0.00000000..1000.00000000
 sh_1 = 0.00 db
 
+# Audio return group 0 [string]
+ret_0 = ""
+
+# Mid/Side switch for channel pair 0 [boolean]: true/false
+ms_0 = false
+
 # Bypass [boolean]: true/false
 bypass = false
 
@@ -55,6 +58,14 @@ bypass = false
 #   3: Spectralizer Stereo
 mode = 3
 
+# Mesh thickness: 0..4
+#   0: Thinnest
+#   1: Thin
+#   2: Normal
+#   3: Semibold
+#   4: Bold
+lthick = 2
+
 # Spectralizer mode: 0..4
 #   0: Rainbow
 #   1: Fog
@@ -69,12 +80,28 @@ splog = false
 # Analyzer freeze [boolean]: true/false
 freeze = false
 
-# FFT Tolerance: 0..4
+# Linear frequency scale [boolean]: true/false
+linfreq = false
+
+# Horizontal measuring line [boolean]: true/false
+mline = false
+
+# Show maximum values for all channels [boolean]: true/false
+mtrack = true
+
+# Track maximum values for individual channels [boolean]: true/false
+ctrack = false
+
+# Reset maximum values [boolean]: true/false
+mreset = false
+
+# FFT Tolerance: 0..5
 #   0: 1024
 #   1: 2048
 #   2: 4096
 #   3: 8192
 #   4: 16384
+#   5: 32768
 tol = 2
 
 # FFT Window: 0..20
@@ -121,17 +148,32 @@ zoom = 0.00 db
 react = 0.00444
 
 # Channel: 0..1
-#   0: 0
-#   1: 1
+#   0: 1
+#   1: 2
 chn = 0
 
-# Selector [%]: 0.01000000..100.00000000
-sel = 0.01000
+# Selector [Hz]: 10.00000000..24000.00000000
+sel = 491.75781
+
+# Horizontal measuring line level value [dB]: 0.00025119..15.84893036
+mlval = 1.00000
+
+# Inspected filter switch [boolean]: true/false
+insp_id = false
+
+# Inspect frequency range [oct]: 0.00000000..5.00000000
+insp_r = 1.00000
+
+# Automatically inspect frequency range [boolean]: true/false
+insp_on = true
+
+# Stereo analysis Mid/Side mode [boolean]: true/false
+ms = false
 
 # Spectralizer channel: 0..1
-#   0: 0
-#   1: 1
-spc = 0
+#   0: 1
+#   1: 2
+spc = 1
 
 
 # -------------------------------------------------------------------------------
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x4.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x4.cfg
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x4.cfg	2025-03-01 12:43:19.732510689 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/configs/spectrum_analyzer_x4.cfg	2025-08-26 18:16:16.945680883 +0000
@@ -1,15 +1,17 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             test (Test Case)
-#   Package version:     0.0.0-devel
-#   Plugin name:         Spektrumanalysator x4 (Spectrum Analyzer x4)
-#   Plugin version:      1.0.24
-#   UID:                 spectrum_analyzer_x4
-#   LV2 URI:             http://lsp-plug.in/plugins/lv2/spectrum_analyzer_x4
-#   VST 2.x identifier:  xzgo
-#   VST 3.x identifier:  647370207361342020202020787A676F
-#   LADSPA identifier:   5002070
-#   LADSPA label:        http://lsp-plug.in/plugins/ladspa/spectrum_analyzer_x4
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Spektrumanalysator x4 (Spectrum Analyzer x4)
+#   Plugin version:          1.0.32
+#   UID:                     spectrum_analyzer_x4
+#   CLAP URI:                in.lsp-plug.spectrum_analyzer_x4
+#   GStreamer identifier:    lsp-plugins-spectrum-analyzer-x4
+#   LADSPA identifier:       5002070
+#   LADSPA label:            http://lsp-plug.in/plugins/ladspa/spectrum_analyzer_x4
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/spectrum_analyzer_x4
+#   VST 2.x identifier:      xzgo
+#   VST 3.x identifier:      647370207361342020202020787A676F
 # 
 # (C) Test Case
 #   https://lsp-plug.in/
@@ -25,9 +27,6 @@ solo_0 = false
 # Freeze 0 [boolean]: true/false
 frz_0 = true
 
-# Hue 0: 0.00000000..1.00000000
-hue_0 = 0.00000
-
 # Shift gain 0 [G]: 0.00000000..1000.00000000
 sh_0 = 0.00 db
 
@@ -40,9 +39,6 @@ solo_1 = false
 # Freeze 1 [boolean]: true/false
 frz_1 = false
 
-# Hue 1: 0.00000000..1.00000000
-hue_1 = 0.25000
-
 # Shift gain 1 [G]: 0.00000000..1000.00000000
 sh_1 = 0.00 db
 
@@ -55,9 +51,6 @@ solo_2 = false
 # Freeze 2 [boolean]: true/false
 frz_2 = false
 
-# Hue 2: 0.00000000..1.00000000
-hue_2 = 0.50000
-
 # Shift gain 2 [G]: 0.00000000..1000.00000000
 sh_2 = 0.00 db
 
@@ -70,15 +63,18 @@ solo_3 = false
 # Freeze 3 [boolean]: true/false
 frz_3 = false
 
-# Hue 3: 0.00000000..1.00000000
-hue_3 = 0.75000
-
 # Shift gain 3 [G]: 0.00000000..1000.00000000
 sh_3 = 0.00 db
 
+# Audio return group 0 [string]
+ret_0 = ""
+
 # Mid/Side switch for channel pair 0 [boolean]: true/false
 ms_0 = false
 
+# Audio return group 1 [string]
+ret_1 = ""
+
 # Mid/Side switch for channel pair 1 [boolean]: true/false
 ms_1 = false
 
@@ -116,12 +112,18 @@ splog = true
 # Analyzer freeze [boolean]: true/false
 freeze = false
 
+# Linear frequency scale [boolean]: true/false
+linfreq = false
+
 # Horizontal measuring line [boolean]: true/false
 mline = false
 
-# Track maximum values [boolean]: true/false
+# Show maximum values for all channels [boolean]: true/false
 mtrack = true
 
+# Track maximum values for individual channels [boolean]: true/false
+ctrack = false
+
 # Reset maximum values [boolean]: true/false
 mreset = false
 
@@ -178,33 +180,42 @@ zoom = 0.00 db
 react = 0.20000
 
 # Channel: 0..3
-#   0: 0
-#   1: 1
-#   2: 2
-#   3: 3
+#   0: 1
+#   1: 2
+#   2: 3
+#   3: 4
 chn = 0
 
 # Selector [Hz]: 10.00000000..24000.00000000
-sel = 10.00000
+sel = 2802.46948
 
 # Horizontal measuring line level value [dB]: 0.00025119..15.84893036
 mlval = 1.00000
 
+# Inspected filter switch [boolean]: true/false
+insp_id = false
+
+# Inspect frequency range [oct]: 0.00000000..5.00000000
+insp_r = 1.00000
+
+# Automatically inspect frequency range [boolean]: true/false
+insp_on = true
+
 # Stereo analysis Mid/Side mode [boolean]: true/false
 ms = false
 
 # Spectralizer channel 0: 0..3
-#   0: 0
-#   1: 1
-#   2: 2
-#   3: 3
+#   0: 1
+#   1: 2
+#   2: 3
+#   3: 4
 spc0 = 0
 
 # Spectralizer channel 1: 0..3
-#   0: 0
-#   1: 1
-#   2: 2
-#   3: 3
+#   0: 1
+#   1: 2
+#   2: 3
+#   3: 4
 spc1 = 1
 
 
Binary files 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x1.png and 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x1.png differ
Binary files 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x12.png and 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x12.png differ
Binary files 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x16.png and 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x16.png differ
Binary files 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x2.png and 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x2.png differ
Binary files 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x4.png and 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x4.png differ
Binary files 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x8.png and 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/doc/screenshots/spectrum_analyzer_x8.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x1.xml 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x1.xml
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x1.xml	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x1.xml	2025-08-26 18:16:16.949680844 +0000
@@ -1,13 +1,19 @@
 <plugin resizable="true">
 	<vbox spacing="4">
 		<!-- Head settings -->
-		<align halign="-1" fill="true">
-			<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="false" bg.color="bg_schema">
-				<label text="labels.mode"/>
-				<combo id="mode"/>
-				<button pad.l="10" ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze"/>
-			</hbox>
-		</align>
+		<hbox fill="true" bg.color="bg_schema">
+			<label text="labels.mode" pad.l="6" pad.v="4"/>
+			<combo id="mode" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze" pad.h="6"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_magenta" text="actions.linear_frequency" size="16" width="64" id="linfreq" pad.h="6"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_orange" text="labels.chan.inspect" size="16" width="64" id="insp_on" pad.h="6"/>
+			<knob id="insp_r" scale.size="3" scolor="orange" size="10" pad.h="6"/>
+			<value id="insp_r" width.min="48" same_line="true" fill="true" halign="1" pad.r="6"/>
+			<void hexpand="true" hfill="true"/>
+		</hbox>
 
 		<hbox expand="true" spacing="4">
 			<vbox spacing="4" expand="true">
@@ -19,12 +25,18 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_sec">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}" />
+									<marker v="${:f * 10}" />
+									<marker v="${:f * 100}" />
+								</ui:for>
+								<marker v="20000"/>
+							</ui:with>
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000"/>
+
 							<ui:for id="g" first="-60" last="12" step="24">
 								<marker v="${g} db" ox="1" oy="0"/>
 							</ui:for>
@@ -39,9 +51,9 @@
 
 						<!-- Primary Grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 
 							<marker v="0 db" ox="1" oy="0"/>
 							<marker v="-24 db" ox="1" oy="0"/>
@@ -54,9 +66,10 @@
 						<!-- Meshes -->
 						<mesh xi="0" yi="3" id="spd" width="1" color="cyan" fill.color="cyan" fill.color.a="0.9" color.a="0.5" fill="true" visibility=":mtrack"/>
 						<mesh xi="0" yi="1" id="spd" width=":lthick+1" color="mono" visibility_id="on_0"/>
+						<mesh id="ifmesh" width="3" color="cyan" fill.color="cyan" fill.color.a="0.8" fill="true" visibility=":insp_id > 0.5" />
 
 						<!-- Axis -->
-						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" log="true" visibility="false"/>
+						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" log="!:linfreq" visibility="false"/>
 						<axis angle="0.5" min="-72 db / :zoom" max="24 db * :zoom" log="true" visibility="false"/>
 						<axis angle="0.5" min="-1" max="1" visibility="false"/>
 
@@ -67,7 +80,7 @@
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" pointer="hsize" editable="true" color="graph_marker_mono" hcolor="graph_marker_mono"/>
 
 						<!-- Text -->
-						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -83,6 +96,13 @@
 							<text x="10000" text="graph.values.x_k" text:value="10"/>
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1" visibility=":linfreq">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}"/>
+							</ui:for>
+						</ui:with>
+
 						<ui:for id="t" first="-60" last="12" step="12">
 							<text x="10" y="${t} db" text="${t}" halign="1" valign="1"/>
 						</ui:for>
@@ -104,7 +124,7 @@
 						<text ui:id="mline_level" visibility=":mline" valign="(:mlval lt 0 db) ? 1 : -1" text.valign="(:mlval lt 0 db) ? -1 : 1" ox="0" oy="1" x="24000" y=":mlval" halign="-1" color="graph_marker_line" font.bold="true"/>
 
 						<!-- Selector text -->
-						<text ui:id="selector_freq_0" x=":sel" color="graph_marker_mono" visibility="((:mode ieq 0) or (:mode ieq 1))" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1" ox="0" oy="2" y="1" valign="-1" pad.h="4" font.bold="true"/>
+						<text ui:id="selector_freq_0" x=":sel" color="graph_marker_mono" visibility="((:mode ieq 0) or (:mode ieq 1))" halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1" text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1" ox="0" oy="2" y="1" valign="-1" pad.h="4" font.bold="true"/>
 					</graph>
 				</group>
 
@@ -118,12 +138,18 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_prim" color.a="0.5">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}" />
+									<marker v="${:f * 10}" />
+									<marker v="${:f * 100}" />
+								</ui:for>
+								<marker v="20000"/>
+							</ui:with>
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000" color="graph_sec"/>
+
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -131,9 +157,9 @@
 
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -142,14 +168,14 @@
 						</ui:with>
 
 						<!-- Axis -->
-						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="true" visibility="false"/>
+						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
 
 						<!-- Text -->
-						<ui:with y="8" halign="1" valign="1">
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -164,10 +190,18 @@
 							<text x="5000" text="graph.values.x_k" text:value="5"/>
 							<text x="10000" text="graph.values.x_k" text:value="10"/>
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
-							<ui:for id="t" first="1" last="7">
-								<text x="10" y="${t}" text="${t}"/>
+						</ui:with>
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility=":linfreq">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}"/>
 							</ui:for>
 						</ui:with>
+
+						<text x="10" y="0" text="graph.axis.time" halign="1" valign="-1" color="graph_prim"/>
+						<ui:for id="t" first="1" last="7">
+							<text x="10" y="${t}" text="${t}" halign="1" valign="1" color="graph_prim"/>
+						</ui:for>
 					</graph>
 				</group>
 
@@ -260,7 +294,7 @@
 						<hsep bg.color="bg" pad.v="2" vreduce="true" vexpand="false" visibility=":mode ige 2"/>
 
 						<vbox visibility=":mode ige 2" padding="6">
-							<button ui:inject="Button_yellow" text="labels.log_scale" id="splog" height="16" font.size="12" hfill="true"/>
+							<button ui:inject="Button_yellow" text="labels.log_dots" id="splog" height="16" font.size="12" hfill="true"/>
 						</vbox>
 
 						<hsep bg.color="bg" pad.v="2" vreduce="true" vexpand="false" visibility=":mode ige 2"/>
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x12.xml 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x12.xml
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x12.xml	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x12.xml	2025-08-26 18:16:16.949680844 +0000
@@ -1,13 +1,19 @@
 <plugin resizable="true">
 	<vbox spacing="4" width.min="1055" height.min="716">
 		<!-- Head settings -->
-		<align halign="-1" fill="true">
-			<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="false" bg.color="bg_schema">
-				<label text="labels.mode"/>
-				<combo id="mode"/>
-				<button pad.l="10" ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze"/>
-			</hbox>
-		</align>
+		<hbox fill="true" bg.color="bg_schema">
+			<label text="labels.mode" pad.l="6" pad.v="4"/>
+			<combo id="mode" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_magenta" text="actions.linear_frequency" size="16" width="64" id="linfreq" pad.h="6"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_orange" text="labels.chan.inspect" size="16" width="64" id="insp_on" pad.h="6"/>
+			<knob id="insp_r" scale.size="3" scolor="orange" size="10" pad.h="6"/>
+			<value id="insp_r" width.min="48" same_line="true" fill="true" halign="1" pad.r="6"/>
+			<void hexpand="true" hfill="true"/>
+		</hbox>
 
 		<hbox expand="true" spacing="4">
 			<vbox spacing="4" expand="true">
@@ -19,12 +25,19 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_sec">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000"/>
+							</ui:with>
+
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000"/>
+
 							<ui:for id="g" first="-60" last="12" step="24">
 								<marker v="${g} db" ox="1" oy="0"/>
 							</ui:for>
@@ -39,9 +52,9 @@
 
 						<!-- Primary Grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 
 							<marker v="0 db" ox="1" oy="0"/>
 							<marker v="-24 db" ox="1" oy="0"/>
@@ -79,9 +92,10 @@
 								color.a="0.2"
 								visibility="(((:mode ieq 0) or (:mode ieq 2)) and (:on_${i})) or ((:mode ieq 1) or (:mode ieq 3) and ((:spc0 ieq ${i}) or (:spc1 ieq ${i})))"/>
 						</ui:for>
+						<mesh id="ifmesh" width="3" color="cyan" fill.color="cyan" fill.color.a="0.8" fill="true" visibility=":insp_id > 0.5"/>
 
 						<!-- Axis -->
-						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="true" visibility="false"/>
+						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="!:linfreq" visibility="false"/>
 						<axis angle="0.5" min="-72 db / :zoom" max="24 db * :zoom" color="graph_prim" log="true" visibility="false"/>
 						<axis angle="0.5" min="-1" max="1" visibility="false"/>
 
@@ -108,7 +122,7 @@
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" visibility="((:mode ieq 1) or (:mode ieq 3))" editable="true"/>
 
 						<!-- Text -->
-						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -124,6 +138,14 @@
 							<text x="10000" text="graph.values.x_k" text:value="10"/>
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
+
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}" visibility=":linfreq"/>
+							</ui:for>
+						</ui:with>
+
 						<ui:for id="t" first="-60" last="12" step="12">
 							<text x="10" y="${t} db" text="${t}" halign="1" valign="1"/>
 						</ui:for>
@@ -165,12 +187,19 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_prim" color.a="0.5">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000" color="graph_sec"/>
+							</ui:with>
+
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000" color="graph_sec"/>
+
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -178,9 +207,9 @@
 
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -189,13 +218,13 @@
 						</ui:with>
 
 						<!-- Axis -->
-						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="true" visibility="false"/>
+						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 
 						<!-- Text -->
-						<ui:with y="8" halign="1" valign="1" color="graph_prim">
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -212,7 +241,26 @@
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
 
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
+
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility=":linfreq">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}"/>
+							</ui:for>
+						</ui:with>
 
 						<text x="10" y="0" text="graph.axis.time" halign="1" valign="-1" color="graph_prim"/>
 						<ui:for id="t" first="1" last="7">
@@ -232,7 +280,7 @@
 						<fbuffer id="fb1" x="0" y="1" width="0.5" height="1" transparency="0.25" angle="0" mode=":spm" color="red" color.hue=":spc1 / 12.0"/>
 
 						<!-- Secondary grid -->
-						<ui:with color="graph_prim" color.a="0.5">
+						<ui:with color="graph_prim" color.a="0.6" visibility="!:linfreq">
 							<ui:for id="f" first="20" last="90" step="10">
 								<marker v="${:f}"/>
 								<marker v="${:f * 10}"/>
@@ -244,6 +292,15 @@
 							</ui:for>
 							<marker v="20000"/>
 							<marker v="20000" o="1" ox="2" oy="1"/>
+						</ui:with>
+						<ui:with color="graph_prim" color.a="0.6" visibility=":linfreq">
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}"/>
+								<marker v="${:f}" o="1" ox="2" oy="1"/>
+							</ui:for>
+						</ui:with>
+
+						<ui:with color="graph_prim" color.a="0.6">
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -252,9 +309,9 @@
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
 							<ui:for id="c" first="0" last="1">
-								<marker v="100" o="${c}"/>
-								<marker v="1000" o="${c}"/>
-								<marker v="10000" o="${c}"/>
+								<marker v="100" o="${c}" visibility="!:linfreq"/>
+								<marker v="1000" o="${c}" visibility="!:linfreq"/>
+								<marker v="10000" o="${c}" visibility="!:linfreq"/>
 							</ui:for>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
@@ -265,25 +322,58 @@
 						</ui:with>
 
 						<!-- Axis -->
-						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
-						<axis ui:id="spc_dual_graph_ox_2" zero="10" o="1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_2" zero="10" o="1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 						<marker id="sel" ox="2" oy="1" o="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d1" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
-
-						<text ox="2" oy="1" y="0" o="1" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d2" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d1"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
+
+						<text
+							ox="2"
+							oy="1"
+							y="0"
+							o="1"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d2"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
 
 						<!-- Text -->
 						<ui:for id="c" first="0" last="1">
-							<ui:with y="8" halign="1" valign="1">
+							<ui:with y="8" halign="1" valign="1" visibility="!:linfreq">
 								<text x="10" o="${c}" text="graph.units.hz"/>
 								<text x="100" o="${c}" text="100"/>
 								<text x="1000" o="${c}" text="graph.values.1k"/>
 								<text x="10000" o="${c}" text="graph.values.10k"/>
 							</ui:with>
+
+							<ui:with y="8" halign="1" valign="1" visibility=":linfreq">
+								<text x="10" o="${c}" text="graph.units.hz"/>
+								<ui:for id="f" first="1" last="23">
+									<text x="${:f * 1000}" o="${c}" text="graph.values.x_k" text:value="${f}"/>
+								</ui:for>
+							</ui:with>
+
 							<ui:for id="t" first="1" last="7">
 								<text o="${c}" text="${t}" x="10" y="${t}" halign="1" valign="1"/>
 							</ui:for>
@@ -450,6 +540,9 @@
 									bg.color="bg_schema"
 									balance.color="bright_cyan"
 									value.color="cyan"
+									inactive.brightness="1.0"
+									inactive.bg.brightness="1.0"
+									inactive.bg.color="bg_schema"
 									activity=":on_${:i} and :on_${:i + 1}"/>
 								<label text="+1" font.size="8" hfill="true" text.halign="1" pad.t="2"/>
 							</hbox>
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x16.xml 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x16.xml
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x16.xml	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x16.xml	2025-08-26 18:16:16.949680844 +0000
@@ -1,13 +1,19 @@
 <plugin resizable="true">
 	<vbox spacing="4" width.min="1065" height.min="716">
 		<!-- Head settings -->
-		<align halign="-1" fill="true">
-			<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="false" bg.color="bg_schema">
-				<label text="labels.mode"/>
-				<combo id="mode"/>
-				<button pad.l="10" ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze"/>
-			</hbox>
-		</align>
+		<hbox fill="true" bg.color="bg_schema">
+			<label text="labels.mode" pad.l="6" pad.v="4"/>
+			<combo id="mode" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_magenta" text="actions.linear_frequency" size="16" width="64" id="linfreq" pad.h="6"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_orange" text="labels.chan.inspect" size="16" width="64" id="insp_on" pad.h="6"/>
+			<knob id="insp_r" scale.size="3" scolor="orange" size="10" pad.h="6"/>
+			<value id="insp_r" width.min="48" same_line="true" fill="true" halign="1" pad.r="6"/>
+			<void hexpand="true" hfill="true"/>
+		</hbox>
 
 		<hbox expand="true" spacing="4">
 			<vbox spacing="4" expand="true">
@@ -19,12 +25,19 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_sec">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000"/>
+							</ui:with>
+
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000"/>
+
 							<ui:for id="g" first="-60" last="12" step="24">
 								<marker v="${g} db" ox="1" oy="0"/>
 							</ui:for>
@@ -39,9 +52,9 @@
 
 						<!-- Primary Grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 
 							<marker v="0 db" ox="1" oy="0"/>
 							<marker v="-24 db" ox="1" oy="0"/>
@@ -52,27 +65,37 @@
 						</ui:with>
 
 						<!-- Meshes -->
-						<mesh xi="0" yi="33"
-							id="spd" width="1"
-							color="cyan" fill.color="cyan" fill.color.a="0.9" color.a="0.5"
-							fill="true" visibility=":mtrack" />
+						<mesh xi="0" yi="33" id="spd" width="1" color="cyan" fill.color="cyan" fill.color.a="0.9" color.a="0.5" fill="true" visibility=":mtrack"/>
 						<ui:for id="i" first="0" count="16">
-							<mesh xi="0" yi="${:i + 17}"
-								id="spd" width="1"
-								color="graph_mesh_cycle" color.hue="${i} / 16.0" color.a="0.5"
-								fill.color="graph_mesh_cycle" fill.color.hue="${i} / 16.0" fill.color.a="0.9"
+							<mesh
+								xi="0"
+								yi="${:i + 17}"
+								id="spd"
+								width="1"
+								color="graph_mesh_cycle"
+								color.hue="${i} / 16.0"
+								color.a="0.5"
+								fill.color="graph_mesh_cycle"
+								fill.color.hue="${i} / 16.0"
+								fill.color.a="0.9"
 								fill="true"
-								visibility=":ctrack and (((:mode ieq 0) or (:mode ieq 2)) and (:on_${i})) or ((:mode ieq 1) or (:mode ieq 3) and ((:spc0 ieq ${i}) or (:spc1 ieq ${i})))" />
+								visibility=":ctrack and (((:mode ieq 0) or (:mode ieq 2)) and (:on_${i})) or ((:mode ieq 1) or (:mode ieq 3) and ((:spc0 ieq ${i}) or (:spc1 ieq ${i})))"/>
 						</ui:for>
 						<ui:for id="i" first="0" count="16">
-							<mesh xi="0" yi="${:i + 1}"
-								id="spd" width=":lthick+1"
-								color="graph_mesh_cycle" color.hue="${i} / 16.0" color.a="0.2"
-								visibility="(((:mode ieq 0) or (:mode ieq 2)) and (:on_${i})) or ((:mode ieq 1) or (:mode ieq 3) and ((:spc0 ieq ${i}) or (:spc1 ieq ${i})))" />
+							<mesh
+								xi="0"
+								yi="${:i + 1}"
+								id="spd"
+								width=":lthick+1"
+								color="graph_mesh_cycle"
+								color.hue="${i} / 16.0"
+								color.a="0.2"
+								visibility="(((:mode ieq 0) or (:mode ieq 2)) and (:on_${i})) or ((:mode ieq 1) or (:mode ieq 3) and ((:spc0 ieq ${i}) or (:spc1 ieq ${i})))"/>
 						</ui:for>
+						<mesh id="ifmesh" width="3" color="cyan" fill.color="cyan" fill.color.a="0.8" fill="true" visibility=":insp_id > 0.5"/>
 
 						<!-- Axis -->
-						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="true" visibility="false"/>
+						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="!:linfreq" visibility="false"/>
 						<axis angle="0.5" min="-72 db / :zoom" max="24 db * :zoom" color="graph_prim" log="true" visibility="false"/>
 						<axis angle="0.5" min="-1" max="1" visibility="false"/>
 
@@ -99,7 +122,7 @@
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" visibility="((:mode ieq 1) or (:mode ieq 3))" editable="true"/>
 
 						<!-- Text -->
-						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -115,6 +138,14 @@
 							<text x="10000" text="graph.values.x_k" text:value="10"/>
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
+
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}" visibility=":linfreq"/>
+							</ui:for>
+						</ui:with>
+
 						<ui:for id="t" first="-60" last="12" step="12">
 							<text x="10" y="${t} db" text="${t}" halign="1" valign="1"/>
 						</ui:for>
@@ -156,12 +187,19 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_prim" color.a="0.5">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000" color="graph_sec"/>
+							</ui:with>
+
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000" color="graph_sec"/>
+
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -169,9 +207,9 @@
 
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -180,13 +218,13 @@
 						</ui:with>
 
 						<!-- Axis -->
-						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="true" visibility="false"/>
+						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 
 						<!-- Text -->
-						<ui:with y="8" halign="1" valign="1" color="graph_prim">
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -203,7 +241,26 @@
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
 
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
+
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility=":linfreq">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}"/>
+							</ui:for>
+						</ui:with>
 
 						<text x="10" y="0" text="graph.axis.time" halign="1" valign="-1" color="graph_prim"/>
 						<ui:for id="t" first="1" last="7">
@@ -223,7 +280,7 @@
 						<fbuffer id="fb1" x="0" y="1" width="0.5" height="1" transparency="0.25" angle="0" mode=":spm" color="red" color.hue=":spc1 / 16.0"/>
 
 						<!-- Secondary grid -->
-						<ui:with color="graph_prim" color.a="0.5">
+						<ui:with color="graph_prim" color.a="0.6" visibility="!:linfreq">
 							<ui:for id="f" first="20" last="90" step="10">
 								<marker v="${:f}"/>
 								<marker v="${:f * 10}"/>
@@ -235,6 +292,15 @@
 							</ui:for>
 							<marker v="20000"/>
 							<marker v="20000" o="1" ox="2" oy="1"/>
+						</ui:with>
+						<ui:with color="graph_prim" color.a="0.6" visibility=":linfreq">
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}"/>
+								<marker v="${:f}" o="1" ox="2" oy="1"/>
+							</ui:for>
+						</ui:with>
+
+						<ui:with color="graph_prim" color.a="0.6">
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -243,9 +309,9 @@
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
 							<ui:for id="c" first="0" last="1">
-								<marker v="100" o="${c}"/>
-								<marker v="1000" o="${c}"/>
-								<marker v="10000" o="${c}"/>
+								<marker v="100" o="${c}" visibility="!:linfreq"/>
+								<marker v="1000" o="${c}" visibility="!:linfreq"/>
+								<marker v="10000" o="${c}" visibility="!:linfreq"/>
 							</ui:for>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
@@ -256,25 +322,58 @@
 						</ui:with>
 
 						<!-- Axis -->
-						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
-						<axis ui:id="spc_dual_graph_ox_2" zero="10" o="1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_2" zero="10" o="1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 						<marker id="sel" ox="2" oy="1" o="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d1" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
-
-						<text ox="2" oy="1" y="0" o="1" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d2" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d1"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
+
+						<text
+							ox="2"
+							oy="1"
+							y="0"
+							o="1"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d2"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
 
 						<!-- Text -->
 						<ui:for id="c" first="0" last="1">
-							<ui:with y="8" halign="1" valign="1">
+							<ui:with y="8" halign="1" valign="1" visibility="!:linfreq">
 								<text x="10" o="${c}" text="graph.units.hz"/>
 								<text x="100" o="${c}" text="100"/>
 								<text x="1000" o="${c}" text="graph.values.1k"/>
 								<text x="10000" o="${c}" text="graph.values.10k"/>
 							</ui:with>
+
+							<ui:with y="8" halign="1" valign="1" visibility=":linfreq">
+								<text x="10" o="${c}" text="graph.units.hz"/>
+								<ui:for id="f" first="1" last="23">
+									<text x="${:f * 1000}" o="${c}" text="graph.values.x_k" text:value="${f}"/>
+								</ui:for>
+							</ui:with>
+
 							<ui:for id="t" first="1" last="7">
 								<text o="${c}" text="${t}" x="10" y="${t}" halign="1" valign="1"/>
 							</ui:for>
@@ -440,6 +539,9 @@
 									bg.color="bg_schema"
 									balance.color="bright_cyan"
 									value.color="cyan"
+									inactive.brightness="1.0"
+									inactive.bg.brightness="1.0"
+									inactive.bg.color="bg_schema"
 									activity=":on_${:i} and :on_${:i + 1}"/>
 								<label text="+1" font.size="8" hfill="true" text.halign="1" pad.t="2"/>
 							</hbox>
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x2.xml 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x2.xml
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x2.xml	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x2.xml	2025-08-26 18:16:16.949680844 +0000
@@ -1,16 +1,21 @@
 <plugin resizable="true">
 	<vbox spacing="4">
 		<!-- Head settings -->
-		<!-- <align halign="-1" fill="true"> -->
 		<hbox fill="true" bg.color="bg_schema">
 			<label text="labels.mode" pad.l="6" pad.v="4"/>
 			<combo id="mode" pad.h="6" pad.v="4"/>
-			<button ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze" pad.r="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_magenta" text="actions.linear_frequency" size="16" width="64" id="linfreq" pad.h="6"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_orange" text="labels.chan.inspect" size="16" width="64" id="insp_on" pad.h="6"/>
+			<knob id="insp_r" scale.size="3" scolor="orange" size="10" pad.h="6"/>
+			<value id="insp_r" width.min="48" same_line="true" fill="true" halign="1" pad.r="6"/>
 			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
 			<shmlink id="ret_0" value.maxlen="6" text.clip="true" pad.h="6" font.size="10" pad.v="4"/>
 			<void hexpand="true" hfill="true"/>
 		</hbox>
-		<!-- </align> -->
 
 		<hbox expand="true" spacing="4">
 			<vbox spacing="4" expand="true">
@@ -21,12 +26,18 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_sec">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000"/>
+							</ui:with>
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000"/>
+
 							<ui:for id="g" first="-60" last="12" step="24">
 								<marker v="${g} db" ox="1" oy="0"/>
 							</ui:for>
@@ -41,9 +52,9 @@
 
 						<!-- Primary Grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 
 							<marker v="0 db" ox="1" oy="0"/>
 							<marker v="-24 db" ox="1" oy="0"/>
@@ -59,9 +70,10 @@
 						<mesh xi="0" yi="4" id="spd" width="1" color="right" color.a="0.5" fill.color="right" fill.color.a="0.9" fill="true" visibility=":ctrack and :on_1"/>
 						<mesh xi="0" yi="1" id="spd" width=":lthick+1" color="left" color.a="0.2" visibility="on_0"/>
 						<mesh xi="0" yi="2" id="spd" width=":lthick+1" color="right" color.a="0.2" visibility="on_1"/>
+						<mesh id="ifmesh" width="3" color="cyan" fill.color="cyan" fill.color.a="0.8" fill="true" visibility=":insp_id > 0.5"/>
 
 						<!-- Axis -->
-						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="true" visibility="false"/>
+						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="!:linfreq" visibility="false"/>
 						<axis angle="0.5" min="-72 db / :zoom" max="24 db * :zoom" color="graph_prim" log="true" visibility="false"/>
 						<axis angle="0.5" min="-1" max="1" visibility="false"/>
 
@@ -73,7 +85,7 @@
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" editable="true" color="graph_marker_right" hcolor="graph_marker_right" pointer="hsize" visibility="(((:mode ieq 0) or (:mode ieq 1)) and ((:on_1) and (:chn ieq 1)))"/>
 
 						<!-- Text -->
-						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -89,6 +101,13 @@
 							<text x="10000" text="graph.values.x_k" text:value="10"/>
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}" visibility=":linfreq"/>
+							</ui:for>
+						</ui:with>
+
 						<ui:for id="t" first="-60" last="12" step="12">
 							<text x="10" y="${t} db" text="${t}" halign="1" valign="1"/>
 						</ui:for>
@@ -110,9 +129,9 @@
 						<text ui:id="mline_level" visibility=":mline" valign="(:mlval lt 0 db) ? 1 : -1" text.valign="(:mlval lt 0 db) ? -1 : 1" ox="0" oy="1" x="24000" y=":mlval" halign="-1" color="graph_marker_line" font.bold="true"/>
 
 						<!-- Selector text -->
-						<ui:with ox="0" oy="2" y="1" valign="-1" visibility="false" pad.h="4" font.bold="true">
-							<text ui:id="selector_freq_0" x=":sel" color="graph_marker_left" visibility="(((:mode ieq 0) or (:mode ieq 1)) and ((:on_0) and (:chn ieq 0)))" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
-							<text ui:id="selector_freq_1" x=":sel" color="graph_marker_right" visibility="(((:mode ieq 0) or (:mode ieq 1)) and ((:on_1) and (:chn ieq 1)))" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<ui:with ox="0" oy="2" y="1" valign="-1" visibility="false" pad.h="4" font.bold="true" halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1" text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1">
+							<text ui:id="selector_freq_0" x=":sel" color="graph_marker_left" visibility="(((:mode ieq 0) or (:mode ieq 1)) and ((:on_0) and (:chn ieq 0)))"/>
+							<text ui:id="selector_freq_1" x=":sel" color="graph_marker_right" visibility="(((:mode ieq 0) or (:mode ieq 1)) and ((:on_1) and (:chn ieq 1)))"/>
 						</ui:with>
 					</graph>
 				</group>
@@ -127,12 +146,19 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_prim" color.a="0.5">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000"/>
+							</ui:with>
+
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000" color="graph_sec"/>
+
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -140,9 +166,9 @@
 
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -151,14 +177,26 @@
 						</ui:with>
 
 						<!-- Axis -->
-						<axis angle="0.0" min="10" ui:id="spc_single_graph_ox" max="24000" log="true" visibility="false"/>
+						<axis angle="0.0" min="10" ui:id="spc_single_graph_ox" max="24000" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
 
 						<!-- Text -->
-						<ui:with y="8" halign="1" valign="1" color="graph_prim">
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -175,6 +213,13 @@
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
 
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility=":linfreq">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}"/>
+							</ui:for>
+						</ui:with>
+
 						<text x="10" y="0" text="graph.axis.time" halign="1" valign="-1" color="graph_prim"/>
 						<ui:for id="t" first="1" last="7">
 							<text x="10" y="${t}" text="${t}" halign="1" valign="1" color="graph_prim"/>
@@ -193,7 +238,7 @@
 						<fbuffer id="fb1" x="0" y="1" width="0.5" height="1" transparency="0.25" angle="0" mode=":spm" color="right"/>
 
 						<!-- Secondary grid -->
-						<ui:with color="graph_prim" color.a="0.6">
+						<ui:with color="graph_prim" color.a="0.6" visibility="!:linfreq">
 							<ui:for id="f" first="20" last="90" step="10">
 								<marker v="${:f}"/>
 								<marker v="${:f * 10}"/>
@@ -205,6 +250,15 @@
 							</ui:for>
 							<marker v="20000"/>
 							<marker v="20000" o="1" ox="2" oy="1"/>
+						</ui:with>
+						<ui:with color="graph_prim" color.a="0.6" visibility=":linfreq">
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}"/>
+								<marker v="${:f}" o="1" ox="2" oy="1"/>
+							</ui:for>
+						</ui:with>
+
+						<ui:with color="graph_prim" color.a="0.6">
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -213,38 +267,69 @@
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
 							<ui:for id="c" first="0" last="1">
-								<marker v="100" o="${c}"/>
-								<marker v="1000" o="${c}"/>
-								<marker v="10000" o="${c}"/>
+								<marker v="100" o="${c}" visibility="!:linfreq"/>
+								<marker v="1000" o="${c}" visibility="!:linfreq"/>
+								<marker v="10000" o="${c}" visibility="!:linfreq"/>
 							</ui:for>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
-							<marker v="8" ox="1" oy="0" visibility="false"/>
 							<marker v="24000"/>
-							<marker v="24000" o="1" ox="2" oy="1" visibility="false"/>
 						</ui:with>
 
 						<!-- Axis -->
-						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
-						<axis ui:id="spc_dual_graph_ox_2" o="1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_2" o="1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 						<marker id="sel" ox="2" oy="1" o="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d1" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
-
-						<text ox="2" oy="1" y="0" o="1" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d2" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d1"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
+
+						<text
+							ox="2"
+							oy="1"
+							y="0"
+							o="1"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d2"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
 
 						<!-- Text -->
 						<ui:for id="c" first="0" last="1">
-							<ui:with y="8" halign="1" valign="1">
+							<ui:with y="8" halign="1" valign="1" visibility="!:linfreq">
 								<text x="10" o="${c}" text="graph.units.hz"/>
 								<text x="100" o="${c}" text="100"/>
 								<text x="1000" o="${c}" text="graph.values.1k"/>
 								<text x="10000" o="${c}" text="graph.values.10k"/>
 							</ui:with>
+
+							<ui:with y="8" halign="1" valign="1" visibility=":linfreq">
+								<text x="10" o="${c}" text="graph.units.hz"/>
+								<ui:for id="f" first="1" last="23">
+									<text x="${:f * 1000}" o="${c}" text="graph.values.x_k" text:value="${f}"/>
+								</ui:for>
+							</ui:with>
+
 							<ui:for id="t" first="1" last="7">
 								<text o="${c}" text="${t}" x="10" y="${t}" halign="1" valign="1"/>
 							</ui:for>
@@ -276,7 +361,7 @@
 						<button ui:inject="Button_cyan" text="labels.metering.measure_line" id="mline" size="16" visibility=":mode ilt 2" pad.l="15"/>
 						<label text="labels.spectrogram" visibility=":mode ige 2"/>
 						<combo id="spm" visibility=":mode ige 2"/>
-						<button ui:inject="Button_yellow" text="labels.log_scale" id="splog" size="16" visibility=":mode ige 2" pad.l="15"/>
+						<button ui:inject="Button_yellow" text="labels.log_dots" id="splog" size="16" visibility=":mode ige 2" pad.l="15"/>
 					</hbox>
 				</hbox>
 			</vbox>
@@ -384,6 +469,9 @@
 							bg.color="bg_schema"
 							balance.color="bright_cyan"
 							value.color="cyan"
+							inactive.brightness="1.0"
+							inactive.bg.brightness="1.0"
+							inactive.bg.color="bg_schema"
 							activity=":on_0 and :on_1"/>
 						<label text="+1" font.size="8" hfill="true" text.halign="1" pad.t="2"/>
 					</hbox>
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x4.xml 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x4.xml
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x4.xml	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x4.xml	2025-08-26 18:16:16.949680844 +0000
@@ -1,13 +1,19 @@
 <plugin resizable="true">
 	<vbox spacing="4">
 		<!-- Head settings -->
-		<align halign="-1" fill="true">
-			<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="false" bg.color="bg_schema">
-				<label text="labels.mode"/>
-				<combo id="mode"/>
-				<button pad.l="10" ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze"/>
-			</hbox>
-		</align>
+		<hbox fill="true" bg.color="bg_schema">
+			<label text="labels.mode" pad.l="6" pad.v="4"/>
+			<combo id="mode" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_magenta" text="actions.linear_frequency" size="16" width="64" id="linfreq" pad.h="6"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_orange" text="labels.chan.inspect" size="16" width="64" id="insp_on" pad.h="6"/>
+			<knob id="insp_r" scale.size="3" scolor="orange" size="10" pad.h="6"/>
+			<value id="insp_r" width.min="48" same_line="true" fill="true" halign="1" pad.r="6"/>
+			<void hexpand="true" hfill="true"/>
+		</hbox>
 
 		<hbox expand="true" spacing="4">
 			<vbox spacing="4" expand="true">
@@ -19,12 +25,19 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_sec">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000"/>
+							</ui:with>
+
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000"/>
+
 							<ui:for id="g" first="-60" last="12" step="24">
 								<marker v="${g} db" ox="1" oy="0"/>
 							</ui:for>
@@ -39,9 +52,9 @@
 
 						<!-- Primary Grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 
 							<marker v="0 db" ox="1" oy="0"/>
 							<marker v="-24 db" ox="1" oy="0"/>
@@ -79,9 +92,10 @@
 								color.a="0.2"
 								visibility="(((:mode ieq 0) or (:mode ieq 2)) and (:on_${i})) or ((:mode ieq 1) or (:mode ieq 3) and ((:spc0 ieq ${i}) or (:spc1 ieq ${i})))"/>
 						</ui:for>
+						<mesh id="ifmesh" width="3" color="cyan" fill.color="cyan" fill.color.a="0.8" fill="true" visibility=":insp_id > 0.5"/>
 
 						<!-- Axis -->
-						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="true" visibility="false"/>
+						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="!:linfreq" visibility="false"/>
 						<axis angle="0.5" min="-72 db / :zoom" max="24 db * :zoom" color="graph_prim" log="true" visibility="false"/>
 						<axis angle="0.5" min="-1" max="1" visibility="false"/>
 
@@ -108,7 +122,7 @@
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" visibility="((:mode ieq 1) or (:mode ieq 3))" editable="true"/>
 
 						<!-- Text -->
-						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -124,6 +138,14 @@
 							<text x="10000" text="graph.values.x_k" text:value="10"/>
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
+
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}" visibility=":linfreq"/>
+							</ui:for>
+						</ui:with>
+
 						<ui:for id="t" first="-60" last="12" step="12">
 							<text x="10" y="${t} db" text="${t}" halign="1" valign="1"/>
 						</ui:for>
@@ -165,12 +187,19 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_prim" color.a="0.5">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000" color="graph_sec"/>
+							</ui:with>
+
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000" color="graph_sec"/>
+
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -178,9 +207,9 @@
 
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -193,13 +222,13 @@
 						<marker v="24000" color="graph_prim" visibility="false"/>
 
 						<!-- Axis -->
-						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="true" visibility="false"/>
+						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 
 						<!-- Text -->
-						<ui:with y="8" halign="1" valign="1" color="graph_prim">
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -216,7 +245,26 @@
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
 
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
+
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility=":linfreq">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}"/>
+							</ui:for>
+						</ui:with>
 
 						<text x="10" y="0" text="graph.axis.time" halign="1" valign="-1" color="graph_prim"/>
 						<ui:for id="t" first="1" last="7">
@@ -236,7 +284,7 @@
 						<fbuffer id="fb1" x="0" y="1" width="0.5" height="1" transparency="0.25" angle="0" mode=":spm" color="red" color.hue=":spc1 / 4.0"/>
 
 						<!-- Secondary grid -->
-						<ui:with color="graph_prim" color.a="0.5">
+						<ui:with color="graph_prim" color.a="0.6" visibility="!:linfreq">
 							<ui:for id="f" first="20" last="90" step="10">
 								<marker v="${:f}"/>
 								<marker v="${:f * 10}"/>
@@ -248,6 +296,15 @@
 							</ui:for>
 							<marker v="20000"/>
 							<marker v="20000" o="1" ox="2" oy="1"/>
+						</ui:with>
+						<ui:with color="graph_prim" color.a="0.6" visibility=":linfreq">
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}"/>
+								<marker v="${:f}" o="1" ox="2" oy="1"/>
+							</ui:for>
+						</ui:with>
+
+						<ui:with color="graph_prim" color.a="0.6">
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -256,9 +313,9 @@
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
 							<ui:for id="c" first="0" last="1">
-								<marker v="100" o="${c}"/>
-								<marker v="1000" o="${c}"/>
-								<marker v="10000" o="${c}"/>
+								<marker v="100" o="${c}" visibility="!:linfreq"/>
+								<marker v="1000" o="${c}" visibility="!:linfreq"/>
+								<marker v="10000" o="${c}" visibility="!:linfreq"/>
 							</ui:for>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
@@ -269,25 +326,58 @@
 						</ui:with>
 
 						<!-- Axis -->
-						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
-						<axis ui:id="spc_dual_graph_ox_2" o="1" zero="10" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_2" o="1" zero="10" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 						<marker id="sel" ox="2" oy="1" o="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d1" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
-
-						<text ox="2" oy="1" y="0" o="1" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d2" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d1"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
+
+						<text
+							ox="2"
+							oy="1"
+							y="0"
+							o="1"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d2"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
 
 						<!-- Text -->
 						<ui:for id="c" first="0" last="1">
-							<ui:with y="8" halign="1" valign="1">
+							<ui:with y="8" halign="1" valign="1" visibility="!:linfreq">
 								<text x="10" o="${c}" text="graph.units.hz"/>
 								<text x="100" o="${c}" text="100"/>
 								<text x="1000" o="${c}" text="graph.values.1k"/>
 								<text x="10000" o="${c}" text="graph.values.10k"/>
 							</ui:with>
+
+							<ui:with y="8" halign="1" valign="1" visibility=":linfreq">
+								<text x="10" o="${c}" text="graph.units.hz"/>
+								<ui:for id="f" first="1" last="23">
+									<text x="${:f * 1000}" o="${c}" text="graph.values.x_k" text:value="${f}"/>
+								</ui:for>
+							</ui:with>
+
 							<ui:for id="t" first="1" last="7">
 								<text o="${c}" text="${t}" x="10" y="${t}" halign="1" valign="1"/>
 							</ui:for>
@@ -383,6 +473,9 @@
 										bg.color="bg_schema"
 										balance.color="bright_cyan"
 										value.color="cyan"
+										inactive.brightness="1.0"
+										inactive.bg.brightness="1.0"
+										inactive.bg.color="bg_schema"
 										activity=":on_${:i} and :on_${:i + 1}"/>
 									<label text="+1" font.size="8" hfill="true" text.halign="1" pad.t="2"/>
 								</hbox>
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x8.xml 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x8.xml
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x8.xml	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/res/main/ui/analyzer/spectrum/x8.xml	2025-08-26 18:16:16.949680844 +0000
@@ -1,13 +1,19 @@
 <plugin resizable="true">
-	<vbox spacing="4"  width.min="931" height.min="696">
+	<vbox spacing="4" width.min="931" height.min="696">
 		<!-- Head settings -->
-		<align halign="-1" fill="true">
-			<hbox pad.l="6" pad.r="6" pad.t="4" pad.b="4" spacing="8" fill="false" bg.color="bg_schema">
-				<label text="labels.mode"/>
-				<combo id="mode"/>
-				<button pad.l="10" ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze"/>
-			</hbox>
-		</align>
+		<hbox fill="true" bg.color="bg_schema">
+			<label text="labels.mode" pad.l="6" pad.v="4"/>
+			<combo id="mode" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_cyan" text="actions.freeze" size="16" width="64" id="freeze" pad.h="6" pad.v="4"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_magenta" text="actions.linear_frequency" size="16" width="64" id="linfreq" pad.h="6"/>
+			<vsep bg.color="bg" pad.h="2" hreduce="true" hexpand="false"/>
+			<button ui:inject="Button_orange" text="labels.chan.inspect" size="16" width="64" id="insp_on" pad.h="6"/>
+			<knob id="insp_r" scale.size="3" scolor="orange" size="10" pad.h="6"/>
+			<value id="insp_r" width.min="48" same_line="true" fill="true" halign="1" pad.r="6"/>
+			<void hexpand="true" hfill="true"/>
+		</hbox>
 
 		<hbox expand="true" spacing="4">
 			<vbox spacing="4" expand="true">
@@ -19,12 +25,19 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_sec">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000"/>
+							</ui:with>
+
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000"/>
+
 							<ui:for id="g" first="-60" last="12" step="24">
 								<marker v="${g} db" ox="1" oy="0"/>
 							</ui:for>
@@ -39,9 +52,9 @@
 
 						<!-- Primary Grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 
 							<marker v="0 db" ox="1" oy="0"/>
 							<marker v="-24 db" ox="1" oy="0"/>
@@ -79,22 +92,10 @@
 								color.a="0.2"
 								visibility="(((:mode ieq 0) or (:mode ieq 2)) and (:on_${i})) or ((:mode ieq 1) or (:mode ieq 3) and ((:spc0 ieq ${i}) or (:spc1 ieq ${i})))"/>
 						</ui:for>
-
-						<mesh xi="0" yi="1" id="spd" width="1" color="cyan" fill.color="cyan" fill.color.a="0.9" color.a="0.5" fill="true" visibility=":mtrack"/>
-						<ui:for id="i" first="0" count="8">
-							<mesh
-								xi="0"
-								yi="${:i + 2}"
-								id="spd"
-								width=":lthick+1"
-								color="graph_mesh_cycle"
-								color.a="0.2"
-								color.hue="${i} / 8.0"
-								visibility="(((:mode ieq 0) or (:mode ieq 2)) and (:on_${i})) or ((:mode ieq 1) or (:mode ieq 3) and ((:spc0 ieq ${i}) or (:spc1 ieq ${i})))"/>
-						</ui:for>
+						<mesh id="ifmesh" width="3" color="cyan" fill.color="cyan" fill.color.a="0.8" fill="true" visibility=":insp_id > 0.5"/>
 
 						<!-- Axis -->
-						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="true" visibility="false"/>
+						<axis ui:id="main_graph_ox" angle="0.0" min="10" max="24000" color="graph_prim" log="!:linfreq" visibility="false"/>
 						<axis angle="0.5" min="-72 db / :zoom" max="24 db * :zoom" color="graph_prim" log="true" visibility="false"/>
 						<axis angle="0.5" min="-1" max="1" visibility="false"/>
 
@@ -121,7 +122,7 @@
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" visibility="((:mode ieq 1) or (:mode ieq 3))" editable="true"/>
 
 						<!-- Text -->
-						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -137,6 +138,14 @@
 							<text x="10000" text="graph.values.x_k" text:value="10"/>
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
+
+						<ui:with ox="0" oy="2" y="0" halign="1" valign="1">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}" visibility=":linfreq"/>
+							</ui:for>
+						</ui:with>
+
 						<ui:for id="t" first="-60" last="12" step="12">
 							<text x="10" y="${t} db" text="${t}" halign="1" valign="1"/>
 						</ui:for>
@@ -178,12 +187,19 @@
 
 						<!-- Secondary grid -->
 						<ui:with color="graph_prim" color.a="0.5">
-							<ui:for id="f" first="20" last="90" step="10">
-								<marker v="${:f}"/>
-								<marker v="${:f * 10}"/>
-								<marker v="${:f * 100}"/>
+							<ui:with visibility="!:linfreq">
+								<ui:for id="f" first="20" last="90" step="10">
+									<marker v="${:f}"/>
+									<marker v="${:f * 10}"/>
+									<marker v="${:f * 100}"/>
+								</ui:for>
+								<marker v="20000" color="graph_sec"/>
+							</ui:with>
+
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}" visibility=":linfreq"/>
 							</ui:for>
-							<marker v="20000" color="graph_sec"/>
+
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -191,9 +207,9 @@
 
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
-							<marker v="100"/>
-							<marker v="1000"/>
-							<marker v="10000"/>
+							<marker v="100" visibility="!:linfreq"/>
+							<marker v="1000" visibility="!:linfreq"/>
+							<marker v="10000" visibility="!:linfreq"/>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -202,13 +218,13 @@
 						</ui:with>
 
 						<!-- Axis -->
-						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="true" visibility="false"/>
+						<axis angle="0.0" ui:id="spc_single_graph_ox" min="10" max="24000" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 
 						<!-- Text -->
-						<ui:with y="8" halign="1" valign="1" color="graph_prim">
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility="!:linfreq">
 							<text x="10" text="graph.units.hz"/>
 							<text x="20" text="20"/>
 							<text x="30" text="30"/>
@@ -225,7 +241,26 @@
 							<text x="20000" text="graph.values.x_k" text:value="20"/>
 						</ui:with>
 
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
+
+						<ui:with y="8" halign="1" valign="1" color="graph_prim" visibility=":linfreq">
+							<text x="10" text="graph.units.hz"/>
+							<ui:for id="f" first="1" last="23">
+								<text x="${:f * 1000}" text="graph.values.x_k" text:value="${f}"/>
+							</ui:for>
+						</ui:with>
 
 						<text x="10" y="0" text="graph.axis.time" halign="1" valign="-1" color="graph_prim"/>
 						<ui:for id="t" first="1" last="7">
@@ -245,7 +280,7 @@
 						<fbuffer id="fb1" x="0" y="1" width="0.5" height="1" transparency="0.25" angle="0" mode=":spm" color="red" color.hue=":spc1 / 8.0"/>
 
 						<!-- Secondary grid -->
-						<ui:with color="graph_prim" color.a="0.5">
+						<ui:with color="graph_prim" color.a="0.6" visibility="!:linfreq">
 							<ui:for id="f" first="20" last="90" step="10">
 								<marker v="${:f}"/>
 								<marker v="${:f * 10}"/>
@@ -257,6 +292,15 @@
 							</ui:for>
 							<marker v="20000"/>
 							<marker v="20000" o="1" ox="2" oy="1"/>
+						</ui:with>
+						<ui:with color="graph_prim" color.a="0.6" visibility=":linfreq">
+							<ui:for id="f" first="1000" last="23000" step="1000">
+								<marker v="${:f}"/>
+								<marker v="${:f}" o="1" ox="2" oy="1"/>
+							</ui:for>
+						</ui:with>
+
+						<ui:with color="graph_prim" color.a="0.6">
 							<ui:for id="t" first="1" last="7" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
 							</ui:for>
@@ -265,9 +309,9 @@
 						<!-- Primary grid -->
 						<ui:with color="graph_prim">
 							<ui:for id="c" first="0" last="1">
-								<marker v="100" o="${c}"/>
-								<marker v="1000" o="${c}"/>
-								<marker v="10000" o="${c}"/>
+								<marker v="100" o="${c}" visibility="!:linfreq"/>
+								<marker v="1000" o="${c}" visibility="!:linfreq"/>
+								<marker v="10000" o="${c}" visibility="!:linfreq"/>
 							</ui:for>
 							<ui:for id="t" first="2" last="6" step="2">
 								<marker v="${t}" ox="1" oy="0"/>
@@ -278,25 +322,58 @@
 						</ui:with>
 
 						<!-- Axis -->
-						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 						<axis angle="1.5" min="0" max="8" log="false" visibility="false"/>
-						<axis ui:id="spc_dual_graph_ox_2" zero="10" o="1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="true" visibility="false"/>
+						<axis ui:id="spc_dual_graph_ox_2" zero="10" o="1" angle="0.0" min="10" max="24000" length=":_a_width idiv 2" log="!:linfreq" visibility="false"/>
 
 						<marker id="sel" ox="0" oy="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 						<marker id="sel" ox="2" oy="1" o="1" width="2" hwidth="2" color="graph_marker_line" hcolor="graph_marker_line" pointer="hsize" editable="true"/>
 
-						<text ox="0" oy="1" y="0" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d1" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+						<text
+							ox="0"
+							oy="1"
+							y="0"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d1"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
+
+						<text
+							ox="2"
+							oy="1"
+							y="0"
+							o="1"
+							valign="-1"
+							color="graph_marker_line"
+							pad.h="4"
+							font.bold="true"
+							ui:id="global_selector_spc_d2"
+							text="xxx"
+							x=":sel"
+							halign="(:sel lt (:linfreq ? 12000 : 500)) ? 1 : -1"
+							text.halign="(:sel lt (:linfreq ? 12000 : 500)) ? -1 : 1"/>
 
-						<text ox="2" oy="1" y="0" o="1" valign="-1" color="graph_marker_line" pad.h="4" font.bold="true" ui:id="global_selector_spc_d2" text="xxx" x=":sel" halign="(:sel lt 500) ? 1 : -1" text.halign="(:sel lt 500) ? -1 : 1"/>
+							<!-- Text -->
+							<ui:for id="c" first="0" last="1">
+								<ui:with y="8" halign="1" valign="1" visibility="!:linfreq">
+									<text x="10" o="${c}" text="graph.units.hz"/>
+									<text x="100" o="${c}" text="100"/>
+									<text x="1000" o="${c}" text="graph.values.1k"/>
+									<text x="10000" o="${c}" text="graph.values.10k"/>
+								</ui:with>
+
+								<ui:with y="8" halign="1" valign="1" visibility=":linfreq">
+									<text x="10" o="${c}" text="graph.units.hz"/>
+									<ui:for id="f" first="1" last="23">
+										<text x="${:f * 1000}" o="${c}" text="graph.values.x_k" text:value="${f}"/>
+									</ui:for>
+								</ui:with>
 
-						<!-- Text -->
-						<ui:for id="c" first="0" last="1">
-							<ui:with y="8" halign="1" valign="1">
-								<text x="10" o="${c}" text="graph.units.hz"/>
-								<text x="100" o="${c}" text="100"/>
-								<text x="1000" o="${c}" text="graph.values.1k"/>
-								<text x="10000" o="${c}" text="graph.values.10k"/>
-							</ui:with>
 							<ui:for id="t" first="1" last="7">
 								<text o="${c}" text="${t}" x="10" y="${t}" halign="1" valign="1"/>
 							</ui:for>
@@ -392,6 +469,9 @@
 										bg.color="bg_schema"
 										balance.color="bright_cyan"
 										value.color="cyan"
+										inactive.brightness="1.0"
+										inactive.bg.brightness="1.0"
+										inactive.bg.color="bg_schema"
 										activity=":on_${:i} and :on_${:i + 1}"/>
 									<label text="+1" font.size="8" hfill="true" text.halign="1" pad.t="2"/>
 								</hbox>
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/src/doc/manuals/plugins/spectrum_analyzer.php 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/src/doc/manuals/plugins/spectrum_analyzer.php
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/src/doc/manuals/plugins/spectrum_analyzer.php	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/src/doc/manuals/plugins/spectrum_analyzer.php	2025-08-26 18:16:16.949680844 +0000
@@ -17,7 +17,7 @@
 <p>
 	This plugin performs spectral analysis of <?= $cd ?>.
 	<?php if ($nc > 1) { ?>
-		Stereo channels also are possible to analyze by utilizing special modes and selecting corresponsing channels.
+		Stereo channels also are possible to analyze by utilizing special modes and selecting corresponding channels.
 	<?php } ?>
 	It does not affect any changes to the input signal, so can be placed anywhere where the metering is needed.
 </p>
@@ -47,6 +47,9 @@
     	<?php }?>
     </ul>
     <li><b>Freeze</b> - immediately freezes all frequency graphs.</li>
+    <li><b>Linear frequency</b> - enables linear scale of the frequency on the horizontal axis instead of logarithmic one.</li>
+    <li><b>Inspect</b> - enables band-pass filter applied to audio signal when moving vertical frequency slider on the graph.</li>
+    <li><b>Inspect range</b> - the frequency range in octaves of the band-pass filter.</li>
 	<li><b>Spectrogram</b> - the rendering mechanism of the spectrogram in the <b>Spectralizer</b> mode:</li>
 	<ul>
 		<li><b>Rainbow</b> - each dot on a spectrogram changes it's color's hue component depending on the amplitude of the signal starting with <b>Hue</b> of the selected channel.</li>
@@ -60,7 +63,7 @@
 		<li><b>Mid/Side</b> - allows to switch selected channels from stereo analysis to the Mid/Side analysis.</li>
 	<?php } ?>
 	<li><b>Measure</b> - Additional button that enables horizontal measuring line.</li>
-	<li><b>Log scale</b> - the way how dots on the spectrogram are rendered. When button is down, logarithmic scale is used to translate amplitude into dot's color.</li>
+	<li><b>Log dots</b> - the way how dots on the spectrogram are rendered. When button is down, logarithmic scale is used to translate amplitude into dot's color.</li>
 	<li><b>Line size</b> - the combo box that allows to change the thickness of the lines on the spectrum graph.</li>
 </ul>
 
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/src/main/meta/spectrum_analyzer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/src/main/meta/spectrum_analyzer.cpp
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/src/main/meta/spectrum_analyzer.cpp	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/src/main/meta/spectrum_analyzer.cpp	2025-08-26 18:16:16.953680805 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-spectrum-analyzer
  * Created on: 22 июн. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_SPECTRUM_ANALYZER_VERSION_MAJOR         1
 #define LSP_PLUGINS_SPECTRUM_ANALYZER_VERSION_MINOR         0
-#define LSP_PLUGINS_SPECTRUM_ANALYZER_VERSION_MICRO         30
+#define LSP_PLUGINS_SPECTRUM_ANALYZER_VERSION_MICRO         32
 
 #define LSP_PLUGINS_SPECTRUM_ANALYZER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -153,46 +153,49 @@ namespace lsp
         #define SA_INPUT(x, active) \
             AUDIO_INPUT_N(x), \
             AUDIO_OUTPUT_N(x), \
-            SWITCH("on_" #x, "Analyse " #x, active), \
-            SWITCH("solo_" #x, "Solo " #x, 0.0f), \
-            SWITCH("frz_" #x, "Freeze " #x, 0.0f), \
-            AMP_GAIN("sh_" #x, "Shift gain " #x, 1.0f, 1000.0f)
+            SWITCH("on_" #x, "Analyse " #x, "On " #x, active), \
+            SWITCH("solo_" #x, "Solo " #x, "Solo " #x, 0.0f), \
+            SWITCH("frz_" #x, "Freeze " #x, "Freeze " #x, 0.0f), \
+            AMP_GAIN("sh_" #x, "Shift gain " #x, "Shift " #x, 1.0f, 1000.0f)
 
         #define SA_MULTI_CHANNEL(...)         __VA_ARGS__
         #define SA_SINGLE_CHANNEL(...)
 
         #define SA_COMMON(c, channel) \
             BYPASS, \
-            COMBO("mode", "Analyzer mode", 0, spectrum_analyzer_x ## c ## _modes), \
-            COMBO("lthick", "Mesh thickness", 2, line_thick_modes), \
-            COMBO("spm", "Spectralizer mode", 1, spectralizer_modes), \
-            SWITCH("splog", "Spectralizer logarithmic scale", 1), \
-            SWITCH("freeze", "Analyzer freeze", 0), \
-            SWITCH("mline", "Horizontal measuring line", 0), \
-            SWITCH("mtrack", "Show maximum values for all channels", 1), \
-            channel(SWITCH("ctrack", "Track maximum values for individual channels", 0), ) \
-            TRIGGER("mreset", "Reset maximum values"), \
-            { "tol", "FFT Tolerance", U_ENUM, R_CONTROL, 0, 0, 0, spectrum_analyzer::RANK_DFL - spectrum_analyzer::RANK_MIN, 0, fft_tolerance }, \
-            { "wnd", "FFT Window", U_ENUM, R_CONTROL, 0, 0, 0, spectrum_analyzer::WND_DFL, 0, fft_windows }, \
-            { "env", "FFT Envelope", U_ENUM, R_CONTROL, 0, 0, 0, spectrum_analyzer::ENV_DFL, 0, fft_envelopes }, \
-            AMP_GAIN("pamp", "Preamp gain", spectrum_analyzer::PREAMP_DFL, 1000.0f), \
-            LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, spectrum_analyzer::ZOOM), \
-            { "react",          "Reactivity",       U_SEC,          R_CONTROL, F_UPPER | F_LOWER | F_STEP | F_LOG, \
-                 spectrum_analyzer::REACT_TIME_MIN, spectrum_analyzer::REACT_TIME_MAX, spectrum_analyzer::REACT_TIME_DFL, spectrum_analyzer::REACT_TIME_STEP, NULL }, \
-            channel({ "chn", "Channel", U_ENUM, R_CONTROL, 0, 0, 0, 0, 0, spectrum_analyzer_x ## c ## _channels }, ) \
-            LOG_CONTROL("sel", "Selector", U_HZ, spectrum_analyzer::SELECTOR), \
-            LOG_CONTROL("mlval", "Horizontal measuring line level value", U_DB, spectrum_analyzer::HLINE), \
-            { "freq", "Frequency", U_HZ, R_METER, F_UPPER | F_LOWER, \
-                spectrum_analyzer::FREQ_MIN, spectrum_analyzer::FREQ_MAX, spectrum_analyzer::FREQ_DFL, 0, NULL }, \
-            { "lvl", "Level", U_GAIN_AMP, R_METER, F_UPPER | F_LOWER, 0, 10000, 0, 0, NULL }, \
-            MESH("spd", "Spectrum Data", c*2 + 2, spectrum_analyzer::MESH_POINTS + 4)
+            COMBO("mode", "Analyzer mode", "Mode", 0, spectrum_analyzer_x ## c ## _modes), \
+            COMBO("lthick", "Mesh thickness", "Thickness", 2, line_thick_modes), \
+            COMBO("spm", "Spectralizer mode", "SPC mode", 1, spectralizer_modes), \
+            SWITCH("splog", "Spectralizer logarithmic scale", "SPC log dots", 1), \
+            SWITCH("freeze", "Analyzer freeze", "Freeze", 0), \
+            SWITCH("linfreq", "Linear frequency scale", "Linear Freq", 0), \
+            SWITCH("mline", "Horizontal measuring line", "Show HMarker", 0), \
+            SWITCH("mtrack", "Show maximum values for all channels", "Show max", 1), \
+            channel(SWITCH("ctrack", "Track maximum values for individual channels", "Track max", 0), ) \
+            TRIGGER("mreset", "Reset maximum values", "Reset max"), \
+            COMBO("tol", "FFT Tolerance", "FFT tol", spectrum_analyzer::RANK_DFL - spectrum_analyzer::RANK_MIN, fft_tolerance), \
+            COMBO("wnd", "FFT Window", "FFT wnd", spectrum_analyzer::WND_DFL, fft_windows), \
+            COMBO("env", "FFT Envelope", "FFT env", spectrum_analyzer::ENV_DFL, fft_envelopes), \
+            AMP_GAIN("pamp", "Preamp gain", "Preamp", spectrum_analyzer::PREAMP_DFL, 1000.0f), \
+            LOG_CONTROL("zoom", "Graph zoom", "Zoom", U_GAIN_AMP, spectrum_analyzer::ZOOM), \
+            LOG_CONTROL("react", "Reactivity", "Reactivity", U_SEC, spectrum_analyzer::REACT_TIME), \
+            channel(COMBO("chn", "Channel", "Channel", 0, spectrum_analyzer_x ## c ## _channels), ) \
+            LOG_CONTROL("sel", "Selector", "Selector", U_HZ, spectrum_analyzer::SELECTOR), \
+            LOG_CONTROL("mlval", "Horizontal measuring line level value", "HLine lvl", U_DB, spectrum_analyzer::HLINE), \
+            SWITCH("insp_id", "Inspected filter switch", "Inspect switch", 0), \
+            CONTROL("insp_r", "Inspect frequency range", "Inspect range", U_OCTAVES, spectrum_analyzer::INSPECT), \
+            SWITCH("insp_on", "Automatically inspect frequency range", "Auto inspect", 0), \
+            METER("freq", "Frequency", U_HZ, spectrum_analyzer::FREQ), \
+            METER_MINMAX("lvl", "Level", U_GAIN_AMP, 0.0f, 10000.0f), \
+            MESH("spd", "Spectrum Data", c*2 + 2, spectrum_analyzer::MESH_POINTS + 4), \
+            MESH("ifmesh", "Inspect filter mesh", 2, spectrum_analyzer::MESH_POINTS + 4)
 
         #define SA_MGROUP(id) \
             OPT_RETURN_MONO("ret_" #id, "rin_" #id, "Audio return group " #id)
 
         #define SA_SGROUP(id) \
             OPT_RETURN_STEREO("ret_" #id, "rin_" #id, "Audio return group " #id), \
-            SWITCH("ms_" #id, "Mid/Side switch for channel pair " #id, 0), \
+            SWITCH("ms_" #id, "Mid/Side switch for channel pair " #id, "M/S switch " #id, 0), \
             SA_CORRMETER("cm_" #id, "Correlometer for stereo channel pair " #id)
 
         static const port_t spectrum_analyzer_x1_ports[] =
@@ -210,8 +213,8 @@ namespace lsp
             SA_INPUT(1, 1),
             SA_SGROUP(0),
             SA_COMMON(2, SA_MULTI_CHANNEL),
-            SWITCH("ms", "Stereo analysis Mid/Side mode", 0),
-            COMBO("spc", "Spectralizer channel", 0, spectrum_analyzer_x2_channels),
+            SWITCH("ms", "Stereo analysis Mid/Side mode", "M/S mode", 0),
+            COMBO("spc", "Spectralizer channel", "SPC channel", 0, spectrum_analyzer_x2_channels),
             FBUFFER("fb0", "Spectralizer buffer 0", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
             FBUFFER("fb1", "Spectralizer buffer 1", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
             PORTS_END
@@ -227,10 +230,10 @@ namespace lsp
             SA_SGROUP(1),
             SA_COMMON(4, SA_MULTI_CHANNEL),
             SA_CORRMETER("cccm", "Correlometer for selected channels"),
-            SWITCH("ms", "Stereo analysis Mid/Side mode", 0),
-            COMBO("spc0", "Spectralizer channel 0", 0, spectrum_analyzer_x4_channels),
+            SWITCH("ms", "Stereo analysis Mid/Side mode", "M/S mode", 0),
+            COMBO("spc0", "Spectralizer channel 0", "SPC 0 channel", 0, spectrum_analyzer_x4_channels),
             FBUFFER("fb0", "Spectralizer buffer 0", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
-            COMBO("spc1", "Spectralizer channel 1", 1, spectrum_analyzer_x4_channels),
+            COMBO("spc1", "Spectralizer channel 1", "SPC 1 channel", 1, spectrum_analyzer_x4_channels),
             FBUFFER("fb1", "Spectralizer buffer 1", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
             PORTS_END
         };
@@ -251,10 +254,10 @@ namespace lsp
             SA_SGROUP(3),
             SA_COMMON(8, SA_MULTI_CHANNEL),
             SA_CORRMETER("cccm", "Correlometer for selected channels"),
-            SWITCH("ms", "Stereo analysis Mid/Side mode", 0),
-            COMBO("spc0", "Spectralizer channel 0", 0, spectrum_analyzer_x8_channels),
+            SWITCH("ms", "Stereo analysis Mid/Side mode", "M/S mode", 0),
+            COMBO("spc0", "Spectralizer channel 0", "SPC 0 channel", 0, spectrum_analyzer_x8_channels),
             FBUFFER("fb0", "Spectralizer buffer 0", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
-            COMBO("spc1", "Spectralizer channel 1", 1, spectrum_analyzer_x8_channels),
+            COMBO("spc1", "Spectralizer channel 1", "SPC 1 channel", 1, spectrum_analyzer_x8_channels),
             FBUFFER("fb1", "Spectralizer buffer 1", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
             PORTS_END
         };
@@ -281,10 +284,10 @@ namespace lsp
             SA_SGROUP(5),
             SA_COMMON(12, SA_MULTI_CHANNEL),
             SA_CORRMETER("cccm", "Correlometer for selected channels"),
-            SWITCH("ms", "Stereo analysis Mid/Side mode", 0),
-            COMBO("spc0", "Spectralizer channel 0", 0, spectrum_analyzer_x12_channels),
+            SWITCH("ms", "Stereo analysis Mid/Side mode", "M/S mode", 0),
+            COMBO("spc0", "Spectralizer channel 0", "SPC 0 channel", 0, spectrum_analyzer_x12_channels),
             FBUFFER("fb0", "Spectralizer buffer 0", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
-            COMBO("spc1", "Spectralizer channel 1", 1, spectrum_analyzer_x12_channels),
+            COMBO("spc1", "Spectralizer channel 1", "SPC 1 channel", 1, spectrum_analyzer_x12_channels),
             FBUFFER("fb1", "Spectralizer buffer 1", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
             PORTS_END
         };
@@ -317,10 +320,10 @@ namespace lsp
             SA_SGROUP(7),
             SA_COMMON(16, SA_MULTI_CHANNEL),
             SA_CORRMETER("cccm", "Correlometer for selected channels"),
-            SWITCH("ms", "Stereo analysis Mid/Side mode", 0),
-            COMBO("spc0", "Spectralizer channel 0", 0, spectrum_analyzer_x16_channels),
+            SWITCH("ms", "Stereo analysis Mid/Side mode", "M/S mode", 0),
+            COMBO("spc0", "Spectralizer channel 0", "SPC 0 channel", 0, spectrum_analyzer_x16_channels),
             FBUFFER("fb0", "Spectralizer buffer 0", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
-            COMBO("spc1", "Spectralizer channel 1", 1, spectrum_analyzer_x16_channels),
+            COMBO("spc1", "Spectralizer channel 1", "SPC 1 channel", 1, spectrum_analyzer_x16_channels),
             FBUFFER("fb1", "Spectralizer buffer 1", spectrum_analyzer::FB_ROWS, spectrum_analyzer::MESH_POINTS),
             PORTS_END
         };
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/src/main/plug/spectrum_analyzer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/src/main/plug/spectrum_analyzer.cpp
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/src/main/plug/spectrum_analyzer.cpp	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/src/main/plug/spectrum_analyzer.cpp	2025-08-26 18:16:16.953680805 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-spectrum-analyzer
  * Created on: 22 июн. 2021 г.
@@ -40,6 +40,8 @@ namespace lsp
 {
     namespace plugins
     {
+        static constexpr size_t EQ_SMOOTH_STEP      = 32;
+
         //---------------------------------------------------------------------
         // Plugin factory
         static const meta::plugin_t *plugins[] =
@@ -62,63 +64,89 @@ namespace lsp
         //-------------------------------------------------------------------------
         spectrum_analyzer::spectrum_analyzer(const meta::plugin_t *metadata): plug::Module(metadata)
         {
-            nChannels       = 0;
-            nCorrelometers  = 0;
-            vChannels       = NULL;
-            vCorrelometers  = NULL;
-            vAnalyze        = NULL;
-            pData           = NULL;
-            vFrequences     = NULL;
-            vMaxValues[0]   = NULL;
-            vMaxValues[1]   = NULL;
-            vMFrequences    = NULL;
-            vIndexes        = NULL;
+            nChannels           = 0;
+            nCorrelometers      = 0;
+            vChannels           = NULL;
+            vCorrelometers      = NULL;
 
-            bBypass         = false;
-            nChannel        = 0;
-            fSelector       = 0;
-            fMinFreq        = 0;
-            fMaxFreq        = 0;
-            fReactivity     = 0.0f;
-            fTau            = 0.0f;
-            fPreamp         = 0.0f;
-            fZoom           = 0.0f;
-            enMode          = SA_ANALYZER;
-            bLogScale       = false;
-            bMSSwitch       = false;
-
-            fWndState       = 0.0f;
-            fEnvState       = 0.0f;
-
-            pBypass         = NULL;
-            pMode           = NULL;
-            pTolerance      = NULL;
-            pWindow         = NULL;
-            pEnvelope       = NULL;
-            pPreamp         = NULL;
-            pZoom           = NULL;
-            pReactivity     = NULL;
-            pChannel        = NULL;
-            pSelector       = NULL;
-            pFrequency      = NULL;
-            pLevel          = NULL;
-            pLogScale       = NULL;
-            pFftData        = NULL;
-            pMSSwitch       = NULL;
-
-            pFreeze         = NULL;
-            pMaxReset       = NULL;
-            pSpp            = NULL;
+            for (size_t i=0; i<2; ++i)
+            {
+                dspu::filter_params_t *fp = &vFP[i];
+                fp->nType           = dspu::FLT_NONE;
+                fp->nSlope          = 0;
+                fp->fFreq           = 1000.0f;
+                fp->fFreq2          = 1000.0f;
+                fp->fGain           = 1.0f;
+                fp->fQuality        = 1.0f;
+            }
+
+            vAnalyze            = NULL;
+            pData               = NULL;
+            vFrequences[0]      = NULL;
+            vFrequences[1]      = NULL;
+            vMaxValues[0]       = NULL;
+            vMaxValues[1]       = NULL;
+            vMaxValues[2]       = NULL;
+            vMaxValues[3]       = NULL;
+            vMFrequences        = NULL;
+            vIndexes[0]         = NULL;
+            vIndexes[1]         = NULL;
+
+            bBypass             = false;
+            nChannel            = 0;
+            fSelector           = 0;
+            fMinFreq            = 0;
+            fMaxFreq            = 0;
+            fReactivity         = 0.0f;
+            fTau                = 0.0f;
+            fPreamp             = 0.0f;
+            fZoom               = 0.0f;
+            enMode              = SA_ANALYZER;
+            bLogScale           = false;
+            bLinFreq            = false;
+            bMSSwitch           = false;
+            bInspOn             = false;
+            bSyncInspFilter     = false;
+            bSmoothInspFilter   = false;
+
+            fWndState           = 0.0f;
+            fEnvState           = 0.0f;
+
+            pBypass             = NULL;
+            pMode               = NULL;
+            pTolerance          = NULL;
+            pWindow             = NULL;
+            pEnvelope           = NULL;
+            pPreamp             = NULL;
+            pZoom               = NULL;
+            pReactivity         = NULL;
+            pChannel            = NULL;
+            pSelector           = NULL;
+            pFrequency          = NULL;
+            pInspSwitch         = NULL;
+            pInspRange          = NULL;
+            pLevel              = NULL;
+            pLogScale           = NULL;
+            pLinFreq            = NULL;
+            pFftData            = NULL;
+            pInspMesh           = NULL;
+            pMSSwitch           = NULL;
+
+            pFreeze             = NULL;
+            pMaxReset           = NULL;
+            pSpp                = NULL;
 
             for (size_t i=0; i<2; ++i)
             {
                 vSpc[i].nPortId     = -1;
+                vSpc[i].nChannelId  = 0;
+                vSpc[i].bLinFreq    = false;
 
                 vSpc[i].pPortId     = NULL;
                 vSpc[i].pFBuffer    = NULL;
             }
 
-            pIDisplay       = NULL;
+            pIDisplay           = NULL;
         }
 
         spectrum_analyzer::~spectrum_analyzer()
@@ -140,13 +168,13 @@ namespace lsp
             size_t buffers          = BUFFER_SIZE * sizeof(float) * channels;
             size_t szof_corrs       = align_size(sizeof(sa_correlometer_t) * n_correlometers, 64);
             size_t alloc            = hdr_size +
-                                      freq_buf_size +                   // vFrequences
-                                      freq_buf_size * 2 +               // vMaxValues
+                                      freq_buf_size * 2 +               // vFrequences[2]
+                                      freq_buf_size * 4 +               // vMaxValues[4]
                                       mfreq_buf_size +
-                                      ind_buf_size +
+                                      ind_buf_size * 2 +                // vIndexes[2]
                                       analyze_size +
                                       buffers +
-                                      freq_buf_size * channels * 4 +    // vSpc[2], vMax[2]
+                                      freq_buf_size * channels * 8 +    // vSpc[4], vMax[4]
                                       szof_corrs;
 
             lsp_trace("header_size      = %d", int(hdr_size));
@@ -177,24 +205,34 @@ namespace lsp
             // Initialize pointers and cleanup buffers
             vChannels       = advance_ptr_bytes<sa_channel_t>(ptr, hdr_size);
             vCorrelometers  = (n_correlometers > 0) ? advance_ptr_bytes<sa_correlometer_t>(ptr, szof_corrs) : NULL;
-            vFrequences     = advance_ptr_bytes<float>(ptr, freq_buf_size);
-            vMaxValues[0]   = advance_ptr_bytes<float>(ptr, freq_buf_size);
-            vMaxValues[1]   = advance_ptr_bytes<float>(ptr, freq_buf_size);
+            vFrequences[0]  = advance_ptr_bytes<float>(ptr, freq_buf_size);
+            vFrequences[1]  = advance_ptr_bytes<float>(ptr, freq_buf_size);
+            for (size_t j=0; j<4; ++j)
+                vMaxValues[j]   = advance_ptr_bytes<float>(ptr, freq_buf_size);
             vMFrequences    = advance_ptr_bytes<float>(ptr, mfreq_buf_size);
-            vIndexes        = advance_ptr_bytes<uint32_t>(ptr, ind_buf_size);
+            vIndexes[0]     = advance_ptr_bytes<uint32_t>(ptr, ind_buf_size);
+            vIndexes[1]     = advance_ptr_bytes<uint32_t>(ptr, ind_buf_size);
             vAnalyze        = advance_ptr_bytes<float *>(ptr, analyze_size);
 
-            dsp::fill_zero(vFrequences, meta::spectrum_analyzer::MESH_POINTS);
+            dsp::fill_zero(vFrequences[0], meta::spectrum_analyzer::MESH_POINTS);
+            dsp::fill_zero(vFrequences[1], meta::spectrum_analyzer::MESH_POINTS);
             dsp::fill_zero(vMFrequences, meta::spectrum_analyzer::MESH_POINTS);
-            dsp::fill_zero(vMaxValues[0], meta::spectrum_analyzer::MESH_POINTS);
-            dsp::fill_zero(vMaxValues[1], meta::spectrum_analyzer::MESH_POINTS);
-            memset(vIndexes, 0, ind_buf_size);
+            for (size_t j=0; j<4; ++j)
+                dsp::fill_zero(vMaxValues[j], meta::spectrum_analyzer::MESH_POINTS);
+            memset(vIndexes[0], 0, ind_buf_size);
+            memset(vIndexes[1], 0, ind_buf_size);
 
             // Initialize channels
             for (size_t i=0; i<channels; ++i)
             {
                 sa_channel_t *c     = &vChannels[i];
 
+                // Construct inspection equalizer
+                c->sInspEq.construct();
+                if (!c->sInspEq.init(1, 0))
+                    return false;
+                c->sInspEq.set_mode(dspu::EQM_IIR);
+
                 // Initialize fields
                 c->bOn              = false;
                 c->bFreeze          = false;
@@ -206,10 +244,11 @@ namespace lsp
                 c->vOut             = NULL;
                 c->vRet             = NULL;
                 c->vBuffer          = advance_ptr_bytes<float>(ptr, BUFFER_SIZE * sizeof(float));
-                c->vSpc[0]          = advance_ptr_bytes<float>(ptr, freq_buf_size);
-                c->vSpc[1]          = advance_ptr_bytes<float>(ptr, freq_buf_size);
-                c->vMax[0]          = advance_ptr_bytes<float>(ptr, freq_buf_size);
-                c->vMax[1]          = advance_ptr_bytes<float>(ptr, freq_buf_size);
+                for (size_t j=0; j<4; ++j)
+                {
+                    c->vSpc[j]          = advance_ptr_bytes<float>(ptr, freq_buf_size);
+                    c->vMax[j]          = advance_ptr_bytes<float>(ptr, freq_buf_size);
+                }
 
                 // Port references
                 c->pIn              = NULL;
@@ -222,10 +261,11 @@ namespace lsp
 
                 // Clear the buffer
                 dsp::fill_zero(c->vBuffer, BUFFER_SIZE);
-                dsp::fill_zero(c->vSpc[0], meta::spectrum_analyzer::MESH_POINTS);
-                dsp::fill_zero(c->vSpc[1], meta::spectrum_analyzer::MESH_POINTS);
-                dsp::fill_zero(c->vMax[0], meta::spectrum_analyzer::MESH_POINTS);
-                dsp::fill_zero(c->vMax[1], meta::spectrum_analyzer::MESH_POINTS);
+                for (size_t j=0; j<4; ++j)
+                {
+                    dsp::fill_zero(c->vSpc[j], meta::spectrum_analyzer::MESH_POINTS);
+                    dsp::fill_zero(c->vMax[j], meta::spectrum_analyzer::MESH_POINTS);
+                }
             }
 
             // Initialize correlometers
@@ -336,6 +376,7 @@ namespace lsp
             SKIP_PORT("Spectralizer mode");
             BIND_PORT(pLogScale);
             BIND_PORT(pFreeze);
+            BIND_PORT(pLinFreq);
             SKIP_PORT("Horizontal line switch button");
             SKIP_PORT("All maximum tracking");
             if (nChannels > 1)
@@ -351,9 +392,13 @@ namespace lsp
                 BIND_PORT(pChannel);
             BIND_PORT(pSelector);
             SKIP_PORT("Horizontal line value");
+            BIND_PORT(pInspSwitch);
+            BIND_PORT(pInspRange);
+            SKIP_PORT("Automatic frequency range inspect");
             BIND_PORT(pFrequency);
             BIND_PORT(pLevel);
             BIND_PORT(pFftData);
+            BIND_PORT(pInspMesh);
 
             // Bind global correlometer ports
             if (nChannels >= 4)
@@ -393,6 +438,16 @@ namespace lsp
 
         void spectrum_analyzer::do_destroy()
         {
+            if (vChannels != NULL)
+            {
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    sa_channel_t *c     = &vChannels[i];
+                    c->sInspEq.destroy();
+                }
+                vChannels       = NULL;
+            }
+
             if (vCorrelometers != NULL)
             {
                 for (size_t i=0; i<nCorrelometers; ++i)
@@ -410,8 +465,10 @@ namespace lsp
                 free_aligned(pData);
                 pData           = NULL;
             }
-            vFrequences     = NULL;
-            vIndexes        = NULL;
+            vFrequences[0]  = NULL;
+            vFrequences[1]  = NULL;
+            vIndexes[0]     = NULL;
+            vIndexes[1]     = NULL;
 
             if (pIDisplay != NULL)
             {
@@ -559,9 +616,10 @@ namespace lsp
         void spectrum_analyzer::update_settings()
         {
             // Update global settings
+            const float freq        = pSelector->value();
             bBypass                 = pBypass->value();
             nChannel                = (pChannel != NULL) ? pChannel->value() : 0;
-            fSelector               = lsp_limit((pSelector->value() * 2.0f) / fSampleRate, 0.0f, 1.0f);
+            fSelector               = lsp_limit((freq * 2.0f) / fSampleRate, 0.0f, 1.0f);
             fPreamp                 = pPreamp->value();
             fZoom                   = pZoom->value();
             bLogScale               = (pLogScale != NULL) && (pLogScale->value() >= 0.5f);
@@ -631,6 +689,10 @@ namespace lsp
                 res_state    = true;
                 sAnalyzer.set_rank(rank);
             }
+            const bool lin_freq     = pLinFreq->value() >= 0.5f;
+            if (lin_freq != bLinFreq)
+                bSyncInspFilter         = true;
+            bLinFreq                = lin_freq;
 
             sAnalyzer.set_reactivity(pReactivity->value());
             sAnalyzer.set_window(pWindow->value());
@@ -650,10 +712,15 @@ namespace lsp
             if (sync_freqs)
             {
                 sAnalyzer.get_frequencies(
-                    vFrequences, vIndexes,
+                    vFrequences[0], vIndexes[0],
                     fMinFreq, fMaxFreq,
-                    meta::spectrum_analyzer::MESH_POINTS
-                );
+                    meta::spectrum_analyzer::MESH_POINTS,
+                    false);
+                sAnalyzer.get_frequencies(
+                    vFrequences[1], vIndexes[1],
+                    fMinFreq, fMaxFreq,
+                    meta::spectrum_analyzer::MESH_POINTS,
+                    true);
             }
 
             // Check if the state of the switches has not changed
@@ -668,19 +735,67 @@ namespace lsp
                 fEnvState    = pEnvelope->value();
             }
 
+            // Check inspection enabled
+            const float insp_on     = pInspSwitch->value() >= 0.5f;
+            dspu::filter_params_t *old_fp = &vFP[0];
+            dspu::filter_params_t *fp = &vFP[1];
+            fp->nType               = (insp_on) ? dspu::FLT_BT_BWC_BANDPASS : dspu::FLT_NONE;
+
+            if (insp_on)
+            {
+                const float f_range = expf(M_LN2 * 0.5f * pInspRange->value());
+
+                fp->nSlope          = 4;
+                fp->fFreq           = freq / f_range;
+                fp->fFreq2          = freq * f_range;
+                fp->fGain           = 1.0f;
+                fp->fQuality        = 0.707f;
+
+                if (!bInspOn)
+                {
+                    bSyncInspFilter     = true;
+                    bSmoothInspFilter   = false;
+                    *old_fp             = *fp;
+
+                    for (size_t i=0; i<nChannels; ++i)
+                    {
+                        sa_channel_t *c = & vChannels[i];
+                        c->sInspEq.set_params(0, fp);
+                        c->sInspEq.reset();
+                    }
+                }
+                else if ((old_fp->nType != fp->nType) ||
+                    (old_fp->nSlope != fp->nSlope) ||
+                    (old_fp->fFreq != fp->fFreq) ||
+                    (old_fp->fGain != fp->fGain) ||
+                    (old_fp->fQuality != fp->fQuality))
+                {
+                    bSmoothInspFilter   = true;
+                    bSyncInspFilter     = true;
+                }
+            }
+
+            if (insp_on != bInspOn)
+                bSyncInspFilter     = true;
+            bInspOn             = insp_on;
+
+            lsp_trace("insp_on = %s, sync = %s, smooth = %s",
+                (bInspOn) ? "true" : "false",
+                (bSyncInspFilter) ? "true" : "false",
+                (bSmoothInspFilter) ? "true" : "false");
+
             // if the state has changed
             if (res_state)
             {
                 // Reset Tracking Mesh and channel meshes
-                dsp::fill_zero(vMaxValues[0], meta::spectrum_analyzer::MESH_POINTS);
-                dsp::fill_zero(vMaxValues[1], meta::spectrum_analyzer::MESH_POINTS);
+                for (size_t j=0; j<4; ++j)
+                    dsp::fill_zero(vMaxValues[j], meta::spectrum_analyzer::MESH_POINTS);
 
                 for (size_t i=0; i<nChannels; ++i)
                 {
                     sa_channel_t *c     = &vChannels[i];
-
-                    dsp::fill_zero(c->vMax[0], meta::spectrum_analyzer::MESH_POINTS);
-                    dsp::fill_zero(c->vMax[1], meta::spectrum_analyzer::MESH_POINTS);
+                    for (size_t j=0; j<4; ++j)
+                        dsp::fill_zero(c->vMax[j], meta::spectrum_analyzer::MESH_POINTS);
                 }
             }
         }
@@ -698,32 +813,47 @@ namespace lsp
                 cm->sCorr.clear();
             }
 
+            for (size_t i=0; i<nChannels; ++i)
+                vChannels[i].sInspEq.set_sample_rate(sr);
+            bSyncInspFilter = true;
+
             sAnalyzer.set_sample_rate(sr);
             if (sAnalyzer.needs_reconfiguration())
                 sAnalyzer.reconfigure();
 
             sAnalyzer.get_frequencies(
-                vFrequences, vIndexes,
+                vFrequences[0], vIndexes[0],
                 fMinFreq, fMaxFreq,
-                meta::spectrum_analyzer::MESH_POINTS
-            );
+                meta::spectrum_analyzer::MESH_POINTS,
+                false);
+            sAnalyzer.get_frequencies(
+                vFrequences[1], vIndexes[1],
+                fMinFreq, fMaxFreq,
+                meta::spectrum_analyzer::MESH_POINTS,
+                true);
             sCounter.set_sample_rate(sr, true);
         }
 
+        void spectrum_analyzer::ui_activated()
+        {
+            bSyncInspFilter = true;
+        }
+
         void spectrum_analyzer::get_spectrum(float *dst, size_t channel, size_t flags)
         {
             float *v        = dst;
             size_t off      = 0;
 
             // Fetch original data
-            if (flags & F_SMOOTH_LOG)
+            const uint32_t *indexes = (flags & F_LIN_FREQ) ? vIndexes[1] : vIndexes[0];
+            if (flags & F_MASTERING)
             {
-                sAnalyzer.get_spectrum(channel, vMFrequences, vIndexes, meta::spectrum_analyzer::MESH_POINTS);
+                sAnalyzer.get_spectrum(channel, vMFrequences, indexes, meta::spectrum_analyzer::MESH_POINTS);
                 size_t pi = 0, ni = meta::spectrum_analyzer::MMESH_STEP;
 
                 for (; ni < meta::spectrum_analyzer::MESH_POINTS; ni += meta::spectrum_analyzer::MMESH_STEP)
                 {
-                    if (vIndexes[ni] == vIndexes[pi])
+                    if (indexes[ni] == indexes[pi])
                         continue;
 
                     if (flags & F_SMOOTH_LOG)
@@ -752,7 +882,7 @@ namespace lsp
                 }
             }
             else
-                sAnalyzer.get_spectrum(channel, v, vIndexes, meta::spectrum_analyzer::MESH_POINTS);
+                sAnalyzer.get_spectrum(channel, v, indexes, meta::spectrum_analyzer::MESH_POINTS);
 
             // Apply gain
             float gain = (flags & F_BOOST) ?
@@ -871,38 +1001,15 @@ namespace lsp
             }
         }
 
-        void spectrum_analyzer::process(size_t samples)
+        void spectrum_analyzer::analyze_data(size_t samples)
         {
-            // Always query for drawing
-            pWrapper->query_display_draw();
-
-            // Now process the channels
-            size_t fft_size     = 1 << sAnalyzer.get_rank();
-
-            for (size_t i=0; i<nChannels; ++i)
-            {
-                // Get channel pointers
-                sa_channel_t *c     = &vChannels[i];
-                c->vIn              = c->pIn->buffer<float>();
-                c->vOut             = c->pOut->buffer<float>();
-
-                core::AudioBuffer *ret  = c->pRet->buffer<core::AudioBuffer>();
-                c->vRet             = ((ret!= NULL) && (ret->active())) ? ret->buffer() : NULL;
-            }
-
-            // Cleanup correlometers
-            for (size_t i=0; i<nCorrelometers; ++i)
-                vCorrelometers[i].fCorrelation      = 0.0f;
+            const size_t fft_size   = 1 << sAnalyzer.get_rank();
 
             for (size_t n=samples; n > 0;)
             {
                 // Get number of samples to process
-                size_t count = lsp_min(sCounter.pending(), n, BUFFER_SIZE);
-                bool fired  = sCounter.submit(count);
-
-                // Always bypass signal
-                for (size_t i=0; i<nChannels; ++i)
-                    dsp::copy(vChannels[i].vOut, vChannels[i].vIn, count);
+                const size_t count  = lsp_min(sCounter.pending(), n, BUFFER_SIZE);
+                const bool fired    = sCounter.submit(count);
 
                 // Measure correlation
                 measure_correlation(count);
@@ -924,7 +1031,7 @@ namespace lsp
                     // Report values
                     sa_channel_t *c     = &vChannels[nChannel];
 
-                    size_t idx  = fSelector * ((fft_size - 1) >> 1);
+                    size_t idx          = fSelector * ((fft_size - 1) >> 1);
                     pFrequency->set_value(float(idx * fSampleRate) / float(fft_size));
                     float lvl = sAnalyzer.get_level(nChannel, idx) * meta::spectrum_analyzer::ANALYZER_BOOST;
                     pLevel->set_value(lvl * c->fGain * fPreamp);
@@ -936,9 +1043,13 @@ namespace lsp
                         {
                             c           = &vChannels[i];
 
-                            get_spectrum(c->vSpc[1], i, F_SMOOTH_LOG | F_MASTERING);
+                            get_spectrum(c->vSpc[1], i, F_MASTERING | F_SMOOTH_LOG);
                             dsp::pmax2(c->vMax[1], c->vSpc[1], meta::spectrum_analyzer::MESH_POINTS);
                             dsp::pmax2(vMaxValues[1], c->vSpc[1], meta::spectrum_analyzer::MESH_POINTS);
+
+                            get_spectrum(c->vSpc[3], i, F_MASTERING | F_LIN_FREQ);
+                            dsp::pmax2(c->vMax[3], c->vSpc[3], meta::spectrum_analyzer::MESH_POINTS);
+                            dsp::pmax2(vMaxValues[3], c->vSpc[3], meta::spectrum_analyzer::MESH_POINTS);
                         }
                     }
                     else
@@ -950,6 +1061,10 @@ namespace lsp
                             get_spectrum(c->vSpc[0], i, 0);
                             dsp::pmax2(c->vMax[0], c->vSpc[0], meta::spectrum_analyzer::MESH_POINTS);
                             dsp::pmax2(vMaxValues[0], c->vSpc[0], meta::spectrum_analyzer::MESH_POINTS);
+
+                            get_spectrum(c->vSpc[2], i, F_LIN_FREQ);
+                            dsp::pmax2(c->vMax[2], c->vSpc[2], meta::spectrum_analyzer::MESH_POINTS);
+                            dsp::pmax2(vMaxValues[2], c->vSpc[2], meta::spectrum_analyzer::MESH_POINTS);
                         }
                     }
                 }
@@ -971,7 +1086,7 @@ namespace lsp
                     // Update frame buffers if counter has fired
                     if ((fired) && (!bBypass))
                     {
-                        size_t flags = 0;
+                        size_t flags = (bLinFreq) ? F_LIN_FREQ : 0;
                         if (bLogScale)
                             flags      |= F_LOG_SCALE;
                         else
@@ -989,6 +1104,13 @@ namespace lsp
                             if (fb == NULL)
                                 continue;
 
+                            // Check that frequency presentation has changed
+                            if (vSpc[i].bLinFreq != bLinFreq)
+                            {
+                                fb->clear();
+                                vSpc[i].bLinFreq    = bLinFreq;
+                            }
+
                             // Get row and commit it
                             sa_channel_t *c     = &vChannels[cid];
                             if (c->bFreeze) // Do not report new data in 'Hold' state
@@ -1007,8 +1129,99 @@ namespace lsp
                 if (fired)
                     sCounter.commit();
             } // for n
+        }
 
+        void spectrum_analyzer::pass_signal(size_t samples)
+        {
+            // Just copy data to output if inspection is disabled
+            if ((bBypass) || (!bInspOn))
+            {
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    sa_channel_t *c = &vChannels[i];
+                    dsp::copy(c->vOut, c->vIn, samples);
+                }
+                return;
+            }
+
+            // Apply inspection filter
+            if (!bSmoothInspFilter)
+            {
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    sa_channel_t *c = &vChannels[i];
+                    c->sInspEq.process(c->vOut, c->vIn, samples);
+                }
+                return;
+            }
+
+            // Smooth inspection filter
+            dspu::filter_params_t fp;
+            const float den                 = 1.0f / samples;
+            dspu::filter_params_t *old_fp   = &vFP[0];
+            dspu::filter_params_t *new_fp   = &vFP[1];
+
+            fp.nType                        = new_fp->nType;
+            fp.nSlope                       = new_fp->nSlope;
+
+            // In smooth mode, we need to update filter parameters for each sample
+            for (size_t offset=0; offset<samples; )
+            {
+                const size_t count          = lsp_min(samples - offset, EQ_SMOOTH_STEP);
+                const float k               = offset * den;
+
+                // Tune filter parameters
+                fp.fFreq                    = old_fp->fFreq * expf(logf(new_fp->fFreq / old_fp-> fFreq)*k);
+                fp.fFreq2                   = old_fp->fFreq2 * expf(logf(new_fp->fFreq2 / old_fp->fFreq2)*k);
+                fp.fGain                    = old_fp->fGain * expf(logf(new_fp->fGain / old_fp->fGain)*k);
+                fp.fQuality                 = old_fp->fQuality + (new_fp->fQuality - old_fp->fQuality)*k;
+
+                for (size_t i=0; i<nChannels; ++i)
+                {
+                    sa_channel_t *c             = &vChannels[i];
+                    c->sInspEq.set_params(0, &fp);
+                    c->sInspEq.process(&c->vOut[offset], &c->vIn[offset], count);
+                }
+
+                // Update position
+                offset                     += count;
+            }
+
+            // Store new filter parameters
+            *old_fp                 = *new_fp;
+            bSyncInspFilter         = true;
+        }
+
+        void spectrum_analyzer::process(size_t samples)
+        {
+            // Always query for drawing
+            pWrapper->query_display_draw();
+
+            // Now process the channels
+            for (size_t i=0; i<nChannels; ++i)
+            {
+                // Get channel pointers
+                sa_channel_t *c     = &vChannels[i];
+                c->vIn              = c->pIn->buffer<float>();
+                c->vOut             = c->pOut->buffer<float>();
+
+                core::AudioBuffer *ret  = c->pRet->buffer<core::AudioBuffer>();
+                c->vRet             = ((ret!= NULL) && (ret->active())) ? ret->buffer() : NULL;
+            }
+
+            // Cleanup correlometers
+            for (size_t i=0; i<nCorrelometers; ++i)
+                vCorrelometers[i].fCorrelation      = 0.0f;
+
+            // Pass the sigal to the output
+            pass_signal(samples);
+
+            // Analyze data
+            analyze_data(samples);
+
+            // Output spectrum
             output_spectrum();
+            output_inpect_filter();
 
             // Report correlometers
             for (size_t i=0; i<nCorrelometers; ++i)
@@ -1032,8 +1245,10 @@ namespace lsp
             // Frequencies
             size_t rows = 0;
             float *v    = mesh->pvData[rows++];
-            dsp::copy(&v[2], vFrequences, meta::spectrum_analyzer::MESH_POINTS);
-            const size_t sub = ((enMode == SA_MASTERING) || (enMode == SA_MASTERING_STEREO)) ? 1 : 0;
+            const bool linear   = bLinFreq;
+            const bool mastering= (enMode == SA_MASTERING) || (enMode == SA_MASTERING_STEREO);
+            dsp::copy(&v[2], (linear) ? vFrequences[1] : vFrequences[0], meta::spectrum_analyzer::MESH_POINTS);
+            const size_t sub    = ((linear) ? 2 : 0) + ((mastering) ? 1 : 0);
 
             v[0]    = SPEC_FREQ_MIN * 0.5f;
             v[1]    = SPEC_FREQ_MIN * 0.5f;
@@ -1103,8 +1318,51 @@ namespace lsp
             v[1]    = GAIN_AMP_M_INF_DB;
 
             // Commit mesh data
-            if (mesh_request)
-                mesh->data(rows, meta::spectrum_analyzer::MESH_POINTS + 4);
+            mesh->data(rows, meta::spectrum_analyzer::MESH_POINTS + 4);
+        }
+
+        void spectrum_analyzer::output_inpect_filter()
+        {
+            if (!bSyncInspFilter)
+                return;
+
+            plug::mesh_t *mesh  = (pInspMesh != NULL) ? pInspMesh->buffer<plug::mesh_t>() : NULL;
+            if ((mesh == NULL) || (!mesh->isEmpty()))
+                return;
+
+            float *v            = mesh->pvData[0];
+            const bool linear   = bLinFreq;
+            float *vf           = &v[2];
+            dsp::copy(vf, (linear) ? vFrequences[1] : vFrequences[0], meta::spectrum_analyzer::MESH_POINTS);
+            v[0]                = SPEC_FREQ_MIN * 0.5f;
+            v[1]                = SPEC_FREQ_MIN * 0.5f;
+            v                  += meta::spectrum_analyzer::MESH_POINTS + 2;
+            v[0]                = SPEC_FREQ_MAX * 2.0f;
+            v[1]                = SPEC_FREQ_MAX * 2.0f;
+
+            v                   = mesh->pvData[1];
+            float *vm           = &v[2];
+            if (bInspOn)
+            {
+                for (size_t i=0, samples=meta::spectrum_analyzer::MESH_POINTS; i<samples; ++i)
+                {
+                    const size_t count  = lsp_min(samples - i, meta::spectrum_analyzer::MESH_POINTS / 2);
+                    vChannels[0].sInspEq.freq_chart(vMFrequences, &vf[i], count);
+                    dsp::pcomplex_mod(&vm[i], vMFrequences, count);
+                }
+            }
+            else
+                dsp::fill_zero(vm, meta::spectrum_analyzer::MESH_POINTS);
+
+            v[0]                = 0.0f;
+            v[1]                = v[2];
+            v                  += meta::spectrum_analyzer::MESH_POINTS + 2;
+            v[0]                = v[-1];
+            v[1]                = 0.0f;
+
+            // Commit mesh data
+            mesh->data(2, meta::spectrum_analyzer::MESH_POINTS + 4);
+            bSyncInspFilter     = false;
         }
 
         bool spectrum_analyzer::inline_display(plug::ICanvas *cv, size_t width, size_t height)
@@ -1163,11 +1421,15 @@ namespace lsp
             float ni        = float(meta::spectrum_analyzer::MESH_POINTS) / width; // Normalizing index
             uint32_t *idx   = reinterpret_cast<uint32_t *>(alloca(width * sizeof(uint32_t))); //vIndexes;
 
+            const bool linear           = bLinFreq;
+            const uint32_t *vindexes    = (linear) ? vIndexes[1] : vIndexes[0];
+            const float *vfrequences    = (linear) ? vFrequences[1] : vFrequences[0];
+
             for (size_t j=0; j<width; ++j)
             {
                 size_t k        = j*ni;
-                idx[j]          = vIndexes[k];
-                b->v[0][j]      = vFrequences[k];
+                idx[j]          = vindexes[k];
+                b->v[0][j]      = vfrequences[k];
             }
 
             for (size_t i=0; i<nChannels; ++i)
@@ -1219,7 +1481,10 @@ namespace lsp
                         v->write("fGain", c->fGain);
                         v->write("vIn", c->vIn);
                         v->write("vOut", c->vOut);
+                        v->write("vRet", c->vRet);
                         v->write("vBuffer", c->vBuffer);
+                        v->writev("vSpc", c->vSpc, 4);
+                        v->writev("vMax", c->vMax, 4);
 
                         v->write("pIn", c->pIn);
                         v->write("pOut", c->pOut);
@@ -1251,10 +1516,27 @@ namespace lsp
             }
             v->end_array();
 
-            v->write("vAnalyze", vAnalyze);
-            v->write("vFrequences", vFrequences);
+            v->begin_array("vFP", vFP, 2);
+            {
+                for (size_t i=0; i<2; ++i)
+                {
+                    const dspu::filter_params_t *fp = &vFP[i];
+
+                    v->write("nType", fp->nType);
+                    v->write("nSlope", fp->nSlope);
+                    v->write("fFreq", fp->fFreq);
+                    v->write("fFreq2", fp->fFreq2);
+                    v->write("fGain", fp->fGain);
+                    v->write("fQuality", fp->fQuality);
+                }
+            }
+            v->end_array();
+
+            v->writev("vAnalyze", vAnalyze, nChannels);
+            v->writev("vFrequences", vFrequences, 2);
+            v->writev("vMaxValues", vMaxValues, 4);
             v->write("vMFrequences", vMFrequences);
-            v->write("vIndexes", vIndexes);
+            v->writev("vIndexes", vIndexes, 2);
             v->write("pData", pData);
 
             v->write("bBypass", bBypass);
@@ -1268,7 +1550,11 @@ namespace lsp
             v->write("fZoom", fZoom);
             v->write("enMode", enMode);
             v->write("bLogScale", bLogScale);
+            v->write("bLinFreq", bLinFreq);
             v->write("bMSSwitch", bMSSwitch);
+            v->write("bInspOn", bInspOn);
+            v->write("bSyncInspFilter", bSyncInspFilter);
+            v->write("bSmoothInspFilter", bSmoothInspFilter);
 
             v->write("fWndState", fWndState);
             v->write("fEnvState", fEnvState);
@@ -1283,10 +1569,14 @@ namespace lsp
             v->write("pReactivity", pReactivity);
             v->write("pChannel", pChannel);
             v->write("pSelector", pSelector);
+            v->write("pInspSwitch", pInspSwitch);
+            v->write("pInspRange", pInspRange);
             v->write("pFrequency", pFrequency);
             v->write("pLevel", pLevel);
             v->write("pLogScale", pLogScale);
+            v->write("pLinFreq", pLinFreq);
             v->write("pFftData", pFftData);
+            v->write("pInspMesh", pInspMesh);
             v->write("pMSSwitch", pMSSwitch);
 
             v->write("pFreeze", pFreeze);
diff -pruN 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/src/main/ui/spectrum_analyzer.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/src/main/ui/spectrum_analyzer.cpp
--- 1.2.21-5/modules/lsp-plugins-spectrum-analyzer/src/main/ui/spectrum_analyzer.cpp	2025-03-01 12:43:19.740510640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-spectrum-analyzer/src/main/ui/spectrum_analyzer.cpp	2025-08-26 18:16:16.953680805 +0000
@@ -86,7 +86,7 @@ namespace lsp
             nXAxisIndexSpcS = -1;
             nXAxisIndexSpcD1= -1;
             nXAxisIndexSpcD2= -1;
-            nGraphBtn   = 0;
+            nGraphBtn       = 0;
 
             pMode           = NULL;
             pSelector       = NULL;
@@ -94,6 +94,8 @@ namespace lsp
             pSelChannel     = NULL;
             pFftFreq        = NULL;
             pLevel          = NULL;
+            pInspIndex      = NULL;
+            pInspOn         = NULL;
         }
 
         spectrum_analyzer_ui::~spectrum_analyzer_ui()
@@ -122,29 +124,22 @@ namespace lsp
                 return res;
 
             // Bind ports
-            pMode   = pWrapper->port("mode");
-            if (pMode != NULL)
+            if ((pMode = pWrapper->port("mode")) != NULL)
                 pMode->bind(this);
-
-            pSelector   = pWrapper->port("sel");
-            if (pSelector != NULL)
+            if ((pSelector = pWrapper->port("sel")) != NULL)
                 pSelector->bind(this);
-
-            pMlValue   = pWrapper->port("mlval");
-            if (pMlValue != NULL)
+            if ((pMlValue = pWrapper->port("mlval")) != NULL)
                 pMlValue->bind(this);
-
-            pSelChannel = pWrapper->port("chn");
-            if (pSelChannel != NULL)
+            if ((pSelChannel = pWrapper->port("chn")) != NULL)
                 pSelChannel->bind(this);
-
-            pFftFreq = pWrapper->port("freq");
-            if (pFftFreq != NULL)
+            if ((pFftFreq = pWrapper->port("freq")) != NULL)
                 pFftFreq->bind(this);
-
-            pLevel = pWrapper->port("lvl");
-            if (pLevel != NULL)
+            if ((pLevel = pWrapper->port("lvl")) != NULL)
                 pLevel->bind(this);
+            if ((pInspIndex = pWrapper->port("insp_id")) != NULL)
+                pInspIndex->bind(this);
+            if ((pInspOn = pWrapper->port("insp_on")) != NULL)
+                pInspOn->bind(this);
 
             // Initialize channels
             for (size_t i=0; i<nChannels; ++i)
@@ -164,6 +159,8 @@ namespace lsp
                 wMainGraph->slots()->bind(tk::SLOT_MOUSE_DOWN, slot_graph_mouse_down, this);
                 wMainGraph->slots()->bind(tk::SLOT_MOUSE_MOVE, slot_graph_mouse_move, this);
                 wMainGraph->slots()->bind(tk::SLOT_MOUSE_UP, slot_graph_mouse_up, this);
+                wMainGraph->slots()->bind(tk::SLOT_KEY_DOWN, slot_graph_key_down, this);
+                wMainGraph->slots()->bind(tk::SLOT_KEY_UP, slot_graph_key_up, this);
                 nXAxisIndex         = find_axis(wMainGraph, "main_graph_ox");
             }
 
@@ -208,6 +205,18 @@ namespace lsp
             return res;
         }
 
+        status_t spectrum_analyzer_ui::pre_destroy()
+        {
+            // Force the inspect mode to be turned off
+            if (pInspIndex != NULL)
+            {
+                pInspIndex->set_value(0.0f);
+                pInspIndex->notify_all(ui::PORT_USER_EDIT);
+            }
+
+            return ui::Module::pre_destroy();
+        }
+
         void spectrum_analyzer_ui::notify(ui::IPort *port, size_t flags)
         {
             if ((pMode == port) ||
@@ -362,40 +371,75 @@ namespace lsp
 
         status_t spectrum_analyzer_ui::slot_graph_mouse_down(tk::Widget *sender, void *ptr, void *data)
         {
-            spectrum_analyzer_ui *_this = static_cast<spectrum_analyzer_ui *>(ptr);
-            if (_this == NULL)
+            spectrum_analyzer_ui *self = static_cast<spectrum_analyzer_ui *>(ptr);
+            if (self == NULL)
                 return STATUS_BAD_STATE;
 
             ws::event_t *ev = static_cast<ws::event_t *>(data);
-            _this->on_graph_mouse_down(sender, ev);
+            self->on_graph_mouse_down(sender, ev);
 
             return STATUS_OK;
         }
 
         status_t spectrum_analyzer_ui::slot_graph_mouse_move(tk::Widget *sender, void *ptr, void *data)
         {
-            spectrum_analyzer_ui *_this = static_cast<spectrum_analyzer_ui *>(ptr);
-            if (_this == NULL)
+            spectrum_analyzer_ui *self = static_cast<spectrum_analyzer_ui *>(ptr);
+            if (self == NULL)
                 return STATUS_BAD_STATE;
 
             ws::event_t *ev = static_cast<ws::event_t *>(data);
-            _this->on_graph_mouse_move(sender, ev);
+            self->on_graph_mouse_move(sender, ev);
 
             return STATUS_OK;
         }
 
         status_t spectrum_analyzer_ui::slot_graph_mouse_up(tk::Widget *sender, void *ptr, void *data)
         {
-            spectrum_analyzer_ui *_this = static_cast<spectrum_analyzer_ui *>(ptr);
-            if (_this == NULL)
+            spectrum_analyzer_ui *self = static_cast<spectrum_analyzer_ui *>(ptr);
+            if (self == NULL)
                 return STATUS_BAD_STATE;
 
             ws::event_t *ev = static_cast<ws::event_t *>(data);
-            _this->on_graph_mouse_up(sender, ev);
+            self->on_graph_mouse_up(sender, ev);
 
             return STATUS_OK;
         }
 
+        status_t spectrum_analyzer_ui::slot_graph_key_up(tk::Widget *sender, void *ptr, void *data)
+        {
+            spectrum_analyzer_ui *self = static_cast<spectrum_analyzer_ui *>(ptr);
+            if (self == NULL)
+                return STATUS_BAD_STATE;
+
+            ws::event_t *ev = static_cast<ws::event_t *>(data);
+            self->on_graph_key_up(sender, ev);
+
+            return STATUS_OK;
+        }
+
+        status_t spectrum_analyzer_ui::slot_graph_key_down(tk::Widget *sender, void *ptr, void *data)
+        {
+            spectrum_analyzer_ui *self = static_cast<spectrum_analyzer_ui *>(ptr);
+            if (self == NULL)
+                return STATUS_BAD_STATE;
+
+            ws::event_t *ev = static_cast<ws::event_t *>(data);
+            self->on_graph_key_down(sender, ev);
+
+            return STATUS_OK;
+        }
+
+        void spectrum_analyzer_ui::enable_inspect(bool enable)
+        {
+            if (pInspIndex == NULL)
+                return;
+
+            lsp_trace("enable = %s", (enable) ? "true" : "false");
+
+            pInspIndex->set_value(enable ? 1.0f : 0.0f);
+            pInspIndex->notify_all(ui::PORT_USER_EDIT);
+        }
+
         void spectrum_analyzer_ui::on_graph_mouse_down(tk::Widget *sender, const ws::event_t *ev)
         {
             nGraphBtn |= (size_t(1) << ev->nCode);
@@ -405,15 +449,60 @@ namespace lsp
         void spectrum_analyzer_ui::on_graph_mouse_up(tk::Widget *sender, const ws::event_t *ev)
         {
             nGraphBtn &= ~(size_t(1) << ev->nCode);
+
+            const bool enable1 = (pInspOn != NULL) && (pInspOn->value() >= 0.5f);
+            const bool enable2 = (nGraphBtn & (K_LEFT_CTRL | K_RIGHT_CTRL));
+
+            enable_inspect((nGraphBtn == ws::MCF_LEFT) && (enable1 ^ enable2));
+        }
+
+        size_t spectrum_analyzer_ui::get_keys(tk::Widget *sender)
+        {
+            tk::Window *wnd = tk::widget_cast<tk::Window>(sender->toplevel());
+            if (wnd == NULL)
+                return 0;
+
+            size_t mask = 0;
+            const lltl::darray<ws::code_t> * keys = wnd->active_keys();
+            for (size_t i=0, n=keys->size(); i<n; ++i)
+            {
+                const ws::code_t *code = keys->uget(i);
+                switch (*code)
+                {
+                    case ws::WSK_CONTROL_L:
+                        mask       |= K_LEFT_CTRL;
+                        break;
+                    case ws::WSK_CONTROL_R:
+                        mask       |= K_RIGHT_CTRL;
+                        break;
+                    default:
+                        break;
+                }
+            }
+
+            return mask;
+        }
+
+        void spectrum_analyzer_ui::on_graph_key_down(tk::Widget *sender, const ws::event_t *ev)
+        {
+            on_graph_mouse_move(sender, ev);
+        }
+
+        void spectrum_analyzer_ui::on_graph_key_up(tk::Widget *sender, const ws::event_t *ev)
+        {
+            on_graph_mouse_move(sender, ev);
         }
 
         void spectrum_analyzer_ui::on_graph_mouse_move(tk::Widget *sender, const ws::event_t *ev)
         {
-            if ((wMainGraph == NULL) || (nXAxisIndex < 0))
-                return;
-            if (nGraphBtn != (size_t(1) << ws::MCB_LEFT))
+            if (nGraphBtn != ws::MCF_LEFT)
                 return;
 
+            const size_t keys  = get_keys(sender);
+            const bool enable1 = (pInspOn != NULL) && (pInspOn->value() >= 0.5f);
+            const bool enable2 = (keys & (K_LEFT_CTRL | K_RIGHT_CTRL));
+            enable_inspect(enable1 ^ enable2);
+
             if (sender == wMainGraph)
             {
                 if (nXAxisIndex < 0)
@@ -457,7 +546,6 @@ namespace lsp
                     pSelector->set_value(freq);
                     pSelector->notify_all(ui::PORT_USER_EDIT);
                 }
-
             }
             else if (sender == wSpcGraphDual)
             {
@@ -470,7 +558,6 @@ namespace lsp
                 ssize_t xcenter = r.nLeft + r.nWidth/2;
                 ssize_t xaxis = xcenter > ev->nLeft ? nXAxisIndexSpcD1 : nXAxisIndexSpcD2;
 
-
                 // Translate coordinates
                 float freq = 0.0f;
                 if (wSpcGraphDual->xy_to_axis(xaxis, &freq, ev->nLeft, ev->nTop) != STATUS_OK)
@@ -483,7 +570,6 @@ namespace lsp
                     pSelector->set_value(freq);
                     pSelector->notify_all(ui::PORT_USER_EDIT);
                 }
-
             }
         }
 
diff -pruN 1.2.21-5/modules/lsp-plugins-surge-filter/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-surge-filter/.github/workflows/build.yml	2025-03-01 12:43:16.856527953 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/.github/workflows/build.yml	2025-08-26 18:16:08.053767182 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-surge-filter/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-surge-filter/CHANGELOG	2025-03-01 12:43:16.856527953 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/CHANGELOG	2025-08-26 18:16:08.053767182 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.26 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.25 ===
+* Updated build scripts and dependencies.
+
 === 1.0.24 ===
 * Updated build scripts and dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-plugins-surge-filter/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-surge-filter/dependencies.mk	2025-03-01 12:43:16.856527953 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/dependencies.mk	2025-08-26 18:16:08.053767182 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-surge-filter/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-surge-filter/make/tools.mk	2025-03-01 12:43:16.856527953 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/make/tools.mk	2025-08-26 18:16:08.053767182 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-surge-filter/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/modules.mk
--- 1.2.21-5/modules/lsp-plugins-surge-filter/modules.mk	2025-03-01 12:43:16.856527953 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/modules.mk	2025-08-26 18:16:08.053767182 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-surge-filter/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/project.mk
--- 1.2.21-5/modules/lsp-plugins-surge-filter/project.mk	2025-03-01 12:43:16.856527953 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/project.mk	2025-08-26 18:16:08.053767182 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Surge Filter Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.24
+ARTIFACT_VERSION            = 1.0.26
 
 
 
Binary files 1.2.21-5/modules/lsp-plugins-surge-filter/res/doc/screenshots/surge_filter_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/res/doc/screenshots/surge_filter_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-surge-filter/res/doc/screenshots/surge_filter_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/res/doc/screenshots/surge_filter_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-surge-filter/src/doc/manuals/plugins/surge_filter.php 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/src/doc/manuals/plugins/surge_filter.php
--- 1.2.21-5/modules/lsp-plugins-surge-filter/src/doc/manuals/plugins/surge_filter.php	2025-03-01 12:43:16.860527927 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/src/doc/manuals/plugins/surge_filter.php	2025-08-26 18:16:08.057767143 +0000
@@ -64,7 +64,7 @@
     		<li><b>Cubic</b> - Cubic spline is used to raise the gain value</li>
     		<li><b>Sine</b> - Sine form is used to raise the gain value</li>
     		<li><b>Gaussian</b> - Gaussian function (form of the bell) is used to raise the gain value</li>
-    		<li><b>Parabolic</b> - The parabolic funcion is used to raise the gain value</li>
+    		<li><b>Parabolic</b> - The parabolic function is used to raise the gain value</li>
 		</ul>
     	<li><b>Thresh</b> - The threshold of the RMS envelope for detecting fade-in event</li>
     	<li><b>Time</b> - The overall transition time</li>
@@ -77,7 +77,7 @@
     		<li><b>Cubic</b> - Cubic spline is used to lower the gain value</li>
     		<li><b>Sine</b> - Sine form is used to lower the gain value</li>
     		<li><b>Gaussian</b> - Gaussian function (form of the bell) is used to lower the gain value</li>
-    		<li><b>Parabolic</b> - The parabolic funcion is used to lower the gain value</li>
+    		<li><b>Parabolic</b> - The parabolic function is used to lower the gain value</li>
 		</ul>
     	<li><b>Thresh</b> - The threshold of the RMS envelope for detecting fade-out event</li>
     	<li><b>Time</b> - The overall transition time, <b>impacts the latency of plugin</b></li>
diff -pruN 1.2.21-5/modules/lsp-plugins-surge-filter/src/main/meta/surge_filter.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/src/main/meta/surge_filter.cpp
--- 1.2.21-5/modules/lsp-plugins-surge-filter/src/main/meta/surge_filter.cpp	2025-03-01 12:43:16.860527927 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-surge-filter/src/main/meta/surge_filter.cpp	2025-08-26 18:16:08.057767143 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-surge-filter
  * Created on: 3 авг. 2021 г.
@@ -25,7 +25,7 @@
 
 #define LSP_PLUGINS_SURGE_FILTER_VERSION_MAJOR       1
 #define LSP_PLUGINS_SURGE_FILTER_VERSION_MINOR       0
-#define LSP_PLUGINS_SURGE_FILTER_VERSION_MICRO       24
+#define LSP_PLUGINS_SURGE_FILTER_VERSION_MICRO       26
 
 #define LSP_PLUGINS_SURGE_FILTER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -53,24 +53,24 @@ namespace lsp
         };
 
         #define SURGE_FILTER_COMMON(channels)    \
-            COMBO("modein", "Fade in mode", 3, surge_modes),      \
-            COMBO("modeout", "Fade out mode", 3, surge_modes),      \
-            AMP_GAIN("input", "Input gain", 1.0f, GAIN_AMP_P_24_DB), \
-            EXT_LOG_CONTROL("thr_on", "Threshold for switching on", U_GAIN_AMP, surge_filter_metadata::THRESH), \
-            EXT_LOG_CONTROL("thr_off", "Threshold for switching off", U_GAIN_AMP, surge_filter_metadata::THRESH), \
-            LOG_CONTROL("rms", "RMS estimation time", U_MSEC, surge_filter_metadata::RMS), \
-            CONTROL("fadein", "Fade in time", U_MSEC, surge_filter_metadata::FADEIN), \
-            CONTROL("fadeout", "Fade out time", U_MSEC, surge_filter_metadata::FADEOUT), \
-            CONTROL("fidelay", "Fade in cancel delay time", U_MSEC, surge_filter_metadata::PAUSE), \
-            CONTROL("fodelay", "Fade out cancel delay time", U_MSEC, surge_filter_metadata::PAUSE), \
+            COMBO("modein", "Fade in mode", "Fadein mode", 3, surge_modes),      \
+            COMBO("modeout", "Fade out mode", "Fadeout mode", 3, surge_modes),      \
+            AMP_GAIN("input", "Input gain", "Input gain", 1.0f, GAIN_AMP_P_24_DB), \
+            EXT_LOG_CONTROL("thr_on", "Threshold for switching on", "On threshold", U_GAIN_AMP, surge_filter_metadata::THRESH), \
+            EXT_LOG_CONTROL("thr_off", "Threshold for switching off", "Off threshold", U_GAIN_AMP, surge_filter_metadata::THRESH), \
+            LOG_CONTROL("rms", "RMS estimation time", "RMS time", U_MSEC, surge_filter_metadata::RMS), \
+            CONTROL("fadein", "Fade in time", "Fade in", U_MSEC, surge_filter_metadata::FADEIN), \
+            CONTROL("fadeout", "Fade out time", "Fade out", U_MSEC, surge_filter_metadata::FADEOUT), \
+            CONTROL("fidelay", "Fade in cancel delay time", "Fade in cancel", U_MSEC, surge_filter_metadata::PAUSE), \
+            CONTROL("fodelay", "Fade out cancel delay time", "Fade out cancel", U_MSEC, surge_filter_metadata::PAUSE), \
             BLINK("active", "Activity indicator"), \
-            AMP_GAIN("output", "Output gain", 1.0f, GAIN_AMP_P_24_DB), \
+            AMP_GAIN("output", "Output gain", "Output gain", 1.0f, GAIN_AMP_P_24_DB), \
             MESH("ig", "Input signal graph", channels+1, surge_filter_metadata::MESH_POINTS + 2), \
             MESH("og", "Output signal graph", channels+1, surge_filter_metadata::MESH_POINTS), \
             MESH("grg", "Gain reduction graph", 2, surge_filter_metadata::MESH_POINTS + 4), \
             MESH("eg", "Envelope graph", 2, surge_filter_metadata::MESH_POINTS), \
-            SWITCH("grv", "Gain reduction visibility", 1.0f), \
-            SWITCH("ev", "Envelope visibility", 1.0f), \
+            SWITCH("grv", "Gain reduction visibility", "Show reduct", 1.0f), \
+            SWITCH("ev", "Envelope visibility", "Show env", 1.0f), \
             METER_GAIN("grm", "Gain reduction meter", GAIN_AMP_P_24_DB), \
             METER_GAIN("em", "Envelope meter", GAIN_AMP_P_24_DB)
 
@@ -79,8 +79,8 @@ namespace lsp
             PORTS_MONO_PLUGIN,
             BYPASS,
             SURGE_FILTER_COMMON(1),
-            SWITCH("igv", "Input graph visibility", 1.0f),
-            SWITCH("ogv", "Output graph visibility", 1.0f),
+            SWITCH("igv", "Input graph visibility", "Show in", 1.0f),
+            SWITCH("ogv", "Output graph visibility", "Show out", 1.0f),
             METER_GAIN("ilm", "Input level meter", GAIN_AMP_P_24_DB),
             METER_GAIN("olm", "Output level meter", GAIN_AMP_P_24_DB),
 
@@ -92,12 +92,12 @@ namespace lsp
             PORTS_STEREO_PLUGIN,
             BYPASS,
             SURGE_FILTER_COMMON(2),
-            SWITCH("igv_l", "Input graph visibility left", 1.0f),
-            SWITCH("ogv_l", "Output graph visibility left", 1.0f),
+            SWITCH("igv_l", "Input graph visibility left", "Show in L", 1.0f),
+            SWITCH("ogv_l", "Output graph visibility left", "Show out L", 1.0f),
             METER_GAIN("ilm_l", "Input level meter left", GAIN_AMP_P_24_DB),
             METER_GAIN("olm_l", "Output level meter left", GAIN_AMP_P_24_DB),
-            SWITCH("igv_r", "Input graph visibility right", 1.0f),
-            SWITCH("ogv_r", "Output graph visibility right", 1.0f),
+            SWITCH("igv_r", "Input graph visibility right", "Show in R", 1.0f),
+            SWITCH("ogv_r", "Output graph visibility right", "Show out R", 1.0f),
             METER_GAIN("ilm_r", "Input level meter right", GAIN_AMP_P_24_DB),
             METER_GAIN("olm_r", "Output level meter right", GAIN_AMP_P_24_DB),
 
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-plugins-trigger/.github/workflows/build.yml	2025-03-01 12:43:17.268525478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/.github/workflows/build.yml	2025-08-26 18:16:09.385754254 +0000
@@ -147,7 +147,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale git make php valgrind libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -164,7 +164,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip gcc gcc-c++ glibc-locale glibc-gconv-modules-extra clang lld git make php8-cli valgrind libstdc++-devel libX11-devel libXrandr-devel Mesa-libGL-devel libjack-devel cairo-devel freetype2-devel libsndfile-devel gstreamer-devel gstreamer-plugins-base-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config CC=clang CXX=clang++ STRICT=1 VERBOSE=1 FEATURES='clap doc jack gst ladspa lv2 ui vst2 vst3 xdg' PREFIX=/usr
@@ -221,3 +221,17 @@ jobs:
         shell: msys2 {0}
         run: make VERBOSE=1
 
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config STRICT=1 VERBOSE=1 FEATURES='lv2 ui'
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/CHANGELOG
--- 1.2.21-5/modules/lsp-plugins-trigger/CHANGELOG	2025-03-01 12:43:17.268525478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/CHANGELOG	2025-08-26 18:16:09.385754254 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.28 ===
+* Updated build scripts and dependencies.
+
+=== 1.0.27 ===
+* Updated build scripts and dependencies.
+
 === 1.0.26 ===
 * Several updates of text labels.
 * Updated build scripts and dependencies.
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/dependencies.mk
--- 1.2.21-5/modules/lsp-plugins-trigger/dependencies.mk	2025-03-01 12:43:17.268525478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/dependencies.mk	2025-08-26 18:16:09.385754254 +0000
@@ -114,14 +114,35 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCAIRO \
+  LIBCOCOA \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBICONV \
+  LIBJACK  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/include/private/meta/trigger.h 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/include/private/meta/trigger.h
--- 1.2.21-5/modules/lsp-plugins-trigger/include/private/meta/trigger.h	2025-03-01 12:43:17.268525478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/include/private/meta/trigger.h	2025-08-26 18:16:09.385754254 +0000
@@ -82,6 +82,16 @@ namespace lsp
             static constexpr float  REACTIVITY_DFL          = 20;       // Default reactivity [ms]
             static constexpr float  REACTIVITY_STEP         = 0.01;     // Reactivity step
 
+            static constexpr float  MAXVEL_MIN              = 0.0f;     // Minimum sample velocity [%]
+            static constexpr float  MAXVEL_MAX              = 100.0f;   // Maximum sample velocity [%]
+            static constexpr float  MAXVEL_DFL              = 0.0f;     // Default sample velocity [%]
+            static constexpr float  MAXVEL_STEP             = 0.25f;    // Sample velocity step [%]
+
+            static constexpr float  MIDINOTE_MIN            = 0.0f;     // MIDI note meter minimum value
+            static constexpr float  MIDINOTE_MAX            = 127.0f;   // MIDI note meter maximum value
+            static constexpr float  MIDINOTE_DFL            = 0.0f;     // MIDI note meter default value
+            static constexpr float  MIDINOTE_STEP           = 1.0f;     // MIDI note meter step
+
             static constexpr float  HISTORY_TIME            = 5.0f;     // Amount of time to display history [s]
             static constexpr size_t HISTORY_MESH_SIZE       = 640;      // 640 dots for history
 
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/make/tools.mk
--- 1.2.21-5/modules/lsp-plugins-trigger/make/tools.mk	2025-03-01 12:43:17.268525478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/make/tools.mk	2025-08-26 18:16:09.385754254 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/modules.mk 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/modules.mk
--- 1.2.21-5/modules/lsp-plugins-trigger/modules.mk	2025-03-01 12:43:17.268525478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/modules.mk	2025-08-26 18:16:09.385754254 +0000
@@ -19,99 +19,114 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/project.mk 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/project.mk
--- 1.2.21-5/modules/lsp-plugins-trigger/project.mk	2025-03-01 12:43:17.268525478 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/project.mk	2025-08-26 18:16:09.385754254 +0000
@@ -25,7 +25,7 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = LSP Trigger Plugin Series
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.0.26
+ARTIFACT_VERSION            = 1.0.28
 
 
 
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/res/doc/configs/trigger_midi_mono.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/configs/trigger_midi_mono.cfg
--- 1.2.21-5/modules/lsp-plugins-trigger/res/doc/configs/trigger_midi_mono.cfg	2025-03-01 12:43:17.272525455 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/configs/trigger_midi_mono.cfg	2025-08-26 18:16:09.385754254 +0000
@@ -1,14 +1,17 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             lsp-plugin-fw ((null))
-#   Package version:     0.5.0
-#   Plugin name:         Triggersensor MIDI Mono (Trigger MIDI Mono)
-#   Plugin version:      1.0.3
-#   UID:                 trigger_midi_mono
-#   LV2 URID:            http://lsp-plug.in/plugins/lv2/trigger_midi_mono
-#   VST identifier:      t4yz
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Triggersensor MIDI Mono (Trigger MIDI Mono)
+#   Plugin version:          1.0.27
+#   UID:                     trigger_midi_mono
+#   CLAP URI:                in.lsp-plug.trigger_midi_mono
+#   GStreamer identifier:    lsp-plugins-trigger-midi-mono
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/trigger_midi_mono
+#   VST 2.x identifier:      t4yz
+#   VST 3.x identifier:      6473702074736D316D2020207434797A
 # 
-# (C) LSP Plugin Framework
+# (C) Test Case
 #   https://lsp-plug.in/
 # 
 # -------------------------------------------------------------------------------
@@ -78,14 +81,17 @@ dry = 0.00 db
 # Wet amount [G]: 0.00000000..10.00000000
 wet = 0.00 db
 
+# Dry/Wet balance [%]: 0.00000000..100.00000000
+drywet = 100.00000
+
 # Output gain [G]: 0.00000000..1000.00000000
 g_out = 0.00 db
 
 # Detection mode: 0..3
 #   0: Peak
 #   1: RMS
-#   2: Low-Pass
-#   3: Uniform
+#   2: LPf
+#   3: SMA
 mode = 1
 
 # Pause graph analysis [boolean]: true/false
@@ -118,7 +124,7 @@ slpm = 1
 slpf = 7184.99609
 
 # Detect level [G]: 0.00000000..10.00000000
-dl = -11.00 db
+dl = -21.67 db
 
 # Detect time [ms]: 0.00000000..20.00000000
 dt = 5.50001
@@ -147,9 +153,6 @@ tfv = true
 # Trigger level display [boolean]: true/false
 tlv = true
 
-# Trigger listen [boolean]: true/false
-lstn = false
-
 # Sample selector: 0..7
 #   0: 0
 #   1: 1
@@ -164,6 +167,9 @@ ssel = 0
 # Sample file [pathname]
 sf_0 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_0 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_0 = 0.00000
 
@@ -191,6 +197,9 @@ on_0 = true
 # Sample listen [boolean]: true/false
 ls_0 = false
 
+# Sample listen stop [boolean]: true/false
+lc_0 = false
+
 # Sample reverse [boolean]: true/false
 rs_0 = false
 
@@ -200,6 +209,9 @@ mx_0 = 0.00 db
 # Sample file [pathname]
 sf_1 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_1 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_1 = 0.00000
 
@@ -227,6 +239,9 @@ on_1 = true
 # Sample listen [boolean]: true/false
 ls_1 = false
 
+# Sample listen stop [boolean]: true/false
+lc_1 = false
+
 # Sample reverse [boolean]: true/false
 rs_1 = false
 
@@ -236,6 +251,9 @@ mx_1 = 0.00 db
 # Sample file [pathname]
 sf_2 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_2 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_2 = 0.00000
 
@@ -263,6 +281,9 @@ on_2 = true
 # Sample listen [boolean]: true/false
 ls_2 = false
 
+# Sample listen stop [boolean]: true/false
+lc_2 = false
+
 # Sample reverse [boolean]: true/false
 rs_2 = false
 
@@ -272,6 +293,9 @@ mx_2 = 0.00 db
 # Sample file [pathname]
 sf_3 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_3 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_3 = 0.00000
 
@@ -299,6 +323,9 @@ on_3 = true
 # Sample listen [boolean]: true/false
 ls_3 = false
 
+# Sample listen stop [boolean]: true/false
+lc_3 = false
+
 # Sample reverse [boolean]: true/false
 rs_3 = false
 
@@ -308,6 +335,9 @@ mx_3 = 0.00 db
 # Sample file [pathname]
 sf_4 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_4 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_4 = 0.00000
 
@@ -335,6 +365,9 @@ on_4 = true
 # Sample listen [boolean]: true/false
 ls_4 = false
 
+# Sample listen stop [boolean]: true/false
+lc_4 = false
+
 # Sample reverse [boolean]: true/false
 rs_4 = false
 
@@ -344,6 +377,9 @@ mx_4 = 0.00 db
 # Sample file [pathname]
 sf_5 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_5 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_5 = 0.00000
 
@@ -371,6 +407,9 @@ on_5 = true
 # Sample listen [boolean]: true/false
 ls_5 = false
 
+# Sample listen stop [boolean]: true/false
+lc_5 = false
+
 # Sample reverse [boolean]: true/false
 rs_5 = false
 
@@ -380,6 +419,9 @@ mx_5 = 0.00 db
 # Sample file [pathname]
 sf_6 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_6 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_6 = 0.00000
 
@@ -407,6 +449,9 @@ on_6 = true
 # Sample listen [boolean]: true/false
 ls_6 = false
 
+# Sample listen stop [boolean]: true/false
+lc_6 = false
+
 # Sample reverse [boolean]: true/false
 rs_6 = false
 
@@ -416,6 +461,9 @@ mx_6 = 0.00 db
 # Sample file [pathname]
 sf_7 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_7 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_7 = 0.00000
 
@@ -443,6 +491,9 @@ on_7 = true
 # Sample listen [boolean]: true/false
 ls_7 = false
 
+# Sample listen stop [boolean]: true/false
+lc_7 = false
+
 # Sample reverse [boolean]: true/false
 rs_7 = false
 
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/res/doc/configs/trigger_midi_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/configs/trigger_midi_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-trigger/res/doc/configs/trigger_midi_stereo.cfg	2025-03-01 12:43:17.272525455 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/configs/trigger_midi_stereo.cfg	2025-08-26 18:16:09.385754254 +0000
@@ -1,14 +1,17 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             lsp-plugin-fw ((null))
-#   Package version:     0.5.0
-#   Plugin name:         Triggersensor MIDI Stereo (Trigger MIDI Stereo)
-#   Plugin version:      1.0.3
-#   UID:                 trigger_midi_stereo
-#   LV2 URID:            http://lsp-plug.in/plugins/lv2/trigger_midi_stereo
-#   VST identifier:      9cqf
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Triggersensor MIDI Stereo (Trigger MIDI Stereo)
+#   Plugin version:          1.0.27
+#   UID:                     trigger_midi_stereo
+#   CLAP URI:                in.lsp-plug.trigger_midi_stereo
+#   GStreamer identifier:    lsp-plugins-trigger-midi-stereo
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/trigger_midi_stereo
+#   VST 2.x identifier:      9cqf
+#   VST 3.x identifier:      6473702074736D317320202039637166
 # 
-# (C) LSP Plugin Framework
+# (C) Test Case
 #   https://lsp-plug.in/
 # 
 # -------------------------------------------------------------------------------
@@ -88,14 +91,17 @@ dry = 0.00 db
 # Wet amount [G]: 0.00000000..10.00000000
 wet = 0.00 db
 
+# Dry/Wet balance [%]: 0.00000000..100.00000000
+drywet = 100.00000
+
 # Output gain [G]: 0.00000000..1000.00000000
 g_out = 0.00 db
 
 # Detection mode: 0..3
 #   0: Peak
 #   1: RMS
-#   2: Low-Pass
-#   3: Uniform
+#   2: LPf
+#   3: SMA
 mode = 1
 
 # Pause graph analysis [boolean]: true/false
@@ -128,7 +134,7 @@ slpm = 0
 slpf = 20000.00000
 
 # Detect level [G]: 0.00000000..10.00000000
-dl = -11.00 db
+dl = -17.43 db
 
 # Detect time [ms]: 0.00000000..20.00000000
 dt = 5.50001
@@ -157,9 +163,6 @@ tfv = true
 # Trigger level display [boolean]: true/false
 tlv = true
 
-# Trigger listen [boolean]: true/false
-lstn = false
-
 # Sample selector: 0..7
 #   0: 0
 #   1: 1
@@ -174,6 +177,9 @@ ssel = 0
 # Sample file [pathname]
 sf_0 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_0 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_0 = 0.00000
 
@@ -201,6 +207,9 @@ on_0 = true
 # Sample listen [boolean]: true/false
 ls_0 = false
 
+# Sample listen stop [boolean]: true/false
+lc_0 = false
+
 # Sample reverse [boolean]: true/false
 rs_0 = false
 
@@ -213,6 +222,9 @@ pr_0 = 100.00000
 # Sample file [pathname]
 sf_1 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_1 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_1 = 0.00000
 
@@ -240,6 +252,9 @@ on_1 = true
 # Sample listen [boolean]: true/false
 ls_1 = false
 
+# Sample listen stop [boolean]: true/false
+lc_1 = false
+
 # Sample reverse [boolean]: true/false
 rs_1 = false
 
@@ -252,6 +267,9 @@ pr_1 = 100.00000
 # Sample file [pathname]
 sf_2 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_2 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_2 = 0.00000
 
@@ -279,6 +297,9 @@ on_2 = true
 # Sample listen [boolean]: true/false
 ls_2 = false
 
+# Sample listen stop [boolean]: true/false
+lc_2 = false
+
 # Sample reverse [boolean]: true/false
 rs_2 = false
 
@@ -291,6 +312,9 @@ pr_2 = 100.00000
 # Sample file [pathname]
 sf_3 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_3 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_3 = 0.00000
 
@@ -318,6 +342,9 @@ on_3 = true
 # Sample listen [boolean]: true/false
 ls_3 = false
 
+# Sample listen stop [boolean]: true/false
+lc_3 = false
+
 # Sample reverse [boolean]: true/false
 rs_3 = false
 
@@ -330,6 +357,9 @@ pr_3 = 100.00000
 # Sample file [pathname]
 sf_4 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_4 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_4 = 0.00000
 
@@ -357,6 +387,9 @@ on_4 = true
 # Sample listen [boolean]: true/false
 ls_4 = false
 
+# Sample listen stop [boolean]: true/false
+lc_4 = false
+
 # Sample reverse [boolean]: true/false
 rs_4 = false
 
@@ -369,6 +402,9 @@ pr_4 = 100.00000
 # Sample file [pathname]
 sf_5 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_5 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_5 = 0.00000
 
@@ -396,6 +432,9 @@ on_5 = true
 # Sample listen [boolean]: true/false
 ls_5 = false
 
+# Sample listen stop [boolean]: true/false
+lc_5 = false
+
 # Sample reverse [boolean]: true/false
 rs_5 = false
 
@@ -408,6 +447,9 @@ pr_5 = 100.00000
 # Sample file [pathname]
 sf_6 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_6 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_6 = 0.00000
 
@@ -435,6 +477,9 @@ on_6 = true
 # Sample listen [boolean]: true/false
 ls_6 = false
 
+# Sample listen stop [boolean]: true/false
+lc_6 = false
+
 # Sample reverse [boolean]: true/false
 rs_6 = false
 
@@ -447,6 +492,9 @@ pr_6 = 100.00000
 # Sample file [pathname]
 sf_7 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_7 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_7 = 0.00000
 
@@ -474,6 +522,9 @@ on_7 = true
 # Sample listen [boolean]: true/false
 ls_7 = false
 
+# Sample listen stop [boolean]: true/false
+lc_7 = false
+
 # Sample reverse [boolean]: true/false
 rs_7 = false
 
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/res/doc/configs/trigger_mono.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/configs/trigger_mono.cfg
--- 1.2.21-5/modules/lsp-plugins-trigger/res/doc/configs/trigger_mono.cfg	2025-03-01 12:43:17.272525455 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/configs/trigger_mono.cfg	2025-08-26 18:16:09.385754254 +0000
@@ -1,14 +1,17 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             lsp-plugin-fw ((null))
-#   Package version:     0.5.0
-#   Plugin name:         Triggersensor Mono (Trigger Mono)
-#   Plugin version:      1.0.3
-#   UID:                 trigger_mono
-#   LV2 URID:            http://lsp-plug.in/plugins/lv2/trigger_mono
-#   VST identifier:      zghv
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Triggersensor Mono (Trigger Mono)
+#   Plugin version:          1.0.27
+#   UID:                     trigger_mono
+#   CLAP URI:                in.lsp-plug.trigger_mono
+#   GStreamer identifier:    lsp-plugins-trigger-mono
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/trigger_mono
+#   VST 2.x identifier:      zghv
+#   VST 3.x identifier:      647370207473316D202020207A676876
 # 
-# (C) LSP Plugin Framework
+# (C) Test Case
 #   https://lsp-plug.in/
 # 
 # -------------------------------------------------------------------------------
@@ -30,14 +33,17 @@ dry = 0.00 db
 # Wet amount [G]: 0.00000000..10.00000000
 wet = 0.00 db
 
+# Dry/Wet balance [%]: 0.00000000..100.00000000
+drywet = 100.00000
+
 # Output gain [G]: 0.00000000..1000.00000000
 g_out = 0.00 db
 
 # Detection mode: 0..3
 #   0: Peak
 #   1: RMS
-#   2: Low-Pass
-#   3: Uniform
+#   2: LPf
+#   3: SMA
 mode = 0
 
 # Pause graph analysis [boolean]: true/false
@@ -70,7 +76,7 @@ slpm = 0
 slpf = 7184.99609
 
 # Detect level [G]: 0.00000000..10.00000000
-dl = -1.00 db
+dl = -9.51 db
 
 # Detect time [ms]: 0.00000000..20.00000000
 dt = 0.00000
@@ -99,9 +105,6 @@ tfv = true
 # Trigger level display [boolean]: true/false
 tlv = true
 
-# Trigger listen [boolean]: true/false
-lstn = false
-
 # Sample selector: 0..7
 #   0: 0
 #   1: 1
@@ -116,6 +119,9 @@ ssel = 0
 # Sample file [pathname]
 sf_0 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_0 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_0 = 0.00000
 
@@ -143,6 +149,9 @@ on_0 = true
 # Sample listen [boolean]: true/false
 ls_0 = false
 
+# Sample listen stop [boolean]: true/false
+lc_0 = false
+
 # Sample reverse [boolean]: true/false
 rs_0 = false
 
@@ -152,6 +161,9 @@ mx_0 = 0.00 db
 # Sample file [pathname]
 sf_1 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_1 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_1 = 0.00000
 
@@ -179,6 +191,9 @@ on_1 = true
 # Sample listen [boolean]: true/false
 ls_1 = false
 
+# Sample listen stop [boolean]: true/false
+lc_1 = false
+
 # Sample reverse [boolean]: true/false
 rs_1 = false
 
@@ -188,6 +203,9 @@ mx_1 = 0.00 db
 # Sample file [pathname]
 sf_2 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_2 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_2 = 0.00000
 
@@ -215,6 +233,9 @@ on_2 = true
 # Sample listen [boolean]: true/false
 ls_2 = false
 
+# Sample listen stop [boolean]: true/false
+lc_2 = false
+
 # Sample reverse [boolean]: true/false
 rs_2 = false
 
@@ -224,6 +245,9 @@ mx_2 = 0.00 db
 # Sample file [pathname]
 sf_3 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_3 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_3 = 0.00000
 
@@ -251,6 +275,9 @@ on_3 = true
 # Sample listen [boolean]: true/false
 ls_3 = false
 
+# Sample listen stop [boolean]: true/false
+lc_3 = false
+
 # Sample reverse [boolean]: true/false
 rs_3 = false
 
@@ -260,6 +287,9 @@ mx_3 = 0.00 db
 # Sample file [pathname]
 sf_4 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_4 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_4 = 0.00000
 
@@ -287,6 +317,9 @@ on_4 = true
 # Sample listen [boolean]: true/false
 ls_4 = false
 
+# Sample listen stop [boolean]: true/false
+lc_4 = false
+
 # Sample reverse [boolean]: true/false
 rs_4 = false
 
@@ -296,6 +329,9 @@ mx_4 = 0.00 db
 # Sample file [pathname]
 sf_5 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_5 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_5 = 0.00000
 
@@ -323,6 +359,9 @@ on_5 = true
 # Sample listen [boolean]: true/false
 ls_5 = false
 
+# Sample listen stop [boolean]: true/false
+lc_5 = false
+
 # Sample reverse [boolean]: true/false
 rs_5 = false
 
@@ -332,6 +371,9 @@ mx_5 = 0.00 db
 # Sample file [pathname]
 sf_6 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_6 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_6 = 0.00000
 
@@ -359,6 +401,9 @@ on_6 = true
 # Sample listen [boolean]: true/false
 ls_6 = false
 
+# Sample listen stop [boolean]: true/false
+lc_6 = false
+
 # Sample reverse [boolean]: true/false
 rs_6 = false
 
@@ -368,6 +413,9 @@ mx_6 = 0.00 db
 # Sample file [pathname]
 sf_7 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_7 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_7 = 0.00000
 
@@ -395,6 +443,9 @@ on_7 = true
 # Sample listen [boolean]: true/false
 ls_7 = false
 
+# Sample listen stop [boolean]: true/false
+lc_7 = false
+
 # Sample reverse [boolean]: true/false
 rs_7 = false
 
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/res/doc/configs/trigger_stereo.cfg 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/configs/trigger_stereo.cfg
--- 1.2.21-5/modules/lsp-plugins-trigger/res/doc/configs/trigger_stereo.cfg	2025-03-01 12:43:17.272525455 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/configs/trigger_stereo.cfg	2025-08-26 18:16:09.385754254 +0000
@@ -1,14 +1,17 @@
 # -------------------------------------------------------------------------------
 # This file contains configuration of the audio plugin.
-#   Package:             lsp-plugin-fw ((null))
-#   Package version:     0.5.0
-#   Plugin name:         Triggersensor Stereo (Trigger Stereo)
-#   Plugin version:      1.0.3
-#   UID:                 trigger_stereo
-#   LV2 URID:            http://lsp-plug.in/plugins/lv2/trigger_stereo
-#   VST identifier:      zika
+#   Package:                 test (Test Case)
+#   Package version:         0.0.0-devel
+#   Plugin name:             Triggersensor Stereo (Trigger Stereo)
+#   Plugin version:          1.0.27
+#   UID:                     trigger_stereo
+#   CLAP URI:                in.lsp-plug.trigger_stereo
+#   GStreamer identifier:    lsp-plugins-trigger-stereo
+#   LV2 URI:                 http://lsp-plug.in/plugins/lv2/trigger_stereo
+#   VST 2.x identifier:      zika
+#   VST 3.x identifier:      6473702074733173202020207A696B61
 # 
-# (C) LSP Plugin Framework
+# (C) Test Case
 #   https://lsp-plug.in/
 # 
 # -------------------------------------------------------------------------------
@@ -40,14 +43,17 @@ dry = 0.00 db
 # Wet amount [G]: 0.00000000..10.00000000
 wet = 0.00 db
 
+# Dry/Wet balance [%]: 0.00000000..100.00000000
+drywet = 100.00000
+
 # Output gain [G]: 0.00000000..1000.00000000
 g_out = 0.00 db
 
 # Detection mode: 0..3
 #   0: Peak
 #   1: RMS
-#   2: Low-Pass
-#   3: Uniform
+#   2: LPf
+#   3: SMA
 mode = 1
 
 # Pause graph analysis [boolean]: true/false
@@ -80,7 +86,7 @@ slpm = 0
 slpf = 20000.00000
 
 # Detect level [G]: 0.00000000..10.00000000
-dl = -7.50 db
+dl = -14.88 db
 
 # Detect time [ms]: 0.00000000..20.00000000
 dt = 3.30000
@@ -109,9 +115,6 @@ tfv = true
 # Trigger level display [boolean]: true/false
 tlv = true
 
-# Trigger listen [boolean]: true/false
-lstn = false
-
 # Sample selector: 0..7
 #   0: 0
 #   1: 1
@@ -126,6 +129,9 @@ ssel = 0
 # Sample file [pathname]
 sf_0 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_0 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_0 = 0.00000
 
@@ -153,6 +159,9 @@ on_0 = true
 # Sample listen [boolean]: true/false
 ls_0 = false
 
+# Sample listen stop [boolean]: true/false
+lc_0 = false
+
 # Sample reverse [boolean]: true/false
 rs_0 = false
 
@@ -165,6 +174,9 @@ pr_0 = 100.00000
 # Sample file [pathname]
 sf_1 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_1 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_1 = 0.00000
 
@@ -192,6 +204,9 @@ on_1 = true
 # Sample listen [boolean]: true/false
 ls_1 = false
 
+# Sample listen stop [boolean]: true/false
+lc_1 = false
+
 # Sample reverse [boolean]: true/false
 rs_1 = false
 
@@ -204,6 +219,9 @@ pr_1 = 100.00000
 # Sample file [pathname]
 sf_2 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_2 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_2 = 0.00000
 
@@ -231,6 +249,9 @@ on_2 = true
 # Sample listen [boolean]: true/false
 ls_2 = false
 
+# Sample listen stop [boolean]: true/false
+lc_2 = false
+
 # Sample reverse [boolean]: true/false
 rs_2 = false
 
@@ -243,6 +264,9 @@ pr_2 = 100.00000
 # Sample file [pathname]
 sf_3 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_3 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_3 = 0.00000
 
@@ -270,6 +294,9 @@ on_3 = true
 # Sample listen [boolean]: true/false
 ls_3 = false
 
+# Sample listen stop [boolean]: true/false
+lc_3 = false
+
 # Sample reverse [boolean]: true/false
 rs_3 = false
 
@@ -282,6 +309,9 @@ pr_3 = 100.00000
 # Sample file [pathname]
 sf_4 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_4 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_4 = 0.00000
 
@@ -309,6 +339,9 @@ on_4 = true
 # Sample listen [boolean]: true/false
 ls_4 = false
 
+# Sample listen stop [boolean]: true/false
+lc_4 = false
+
 # Sample reverse [boolean]: true/false
 rs_4 = false
 
@@ -321,6 +354,9 @@ pr_4 = 100.00000
 # Sample file [pathname]
 sf_5 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_5 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_5 = 0.00000
 
@@ -348,6 +384,9 @@ on_5 = true
 # Sample listen [boolean]: true/false
 ls_5 = false
 
+# Sample listen stop [boolean]: true/false
+lc_5 = false
+
 # Sample reverse [boolean]: true/false
 rs_5 = false
 
@@ -360,6 +399,9 @@ pr_5 = 100.00000
 # Sample file [pathname]
 sf_6 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_6 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_6 = 0.00000
 
@@ -387,6 +429,9 @@ on_6 = true
 # Sample listen [boolean]: true/false
 ls_6 = false
 
+# Sample listen stop [boolean]: true/false
+lc_6 = false
+
 # Sample reverse [boolean]: true/false
 rs_6 = false
 
@@ -399,6 +444,9 @@ pr_6 = 100.00000
 # Sample file [pathname]
 sf_7 = ""
 
+# Sample pitch [st]: -24.00000000..24.00000000
+pi_7 = 0.00000
+
 # Sample head cut [ms]: 0.00000000..64000.00000000
 hc_7 = 0.00000
 
@@ -426,6 +474,9 @@ on_7 = true
 # Sample listen [boolean]: true/false
 ls_7 = false
 
+# Sample listen stop [boolean]: true/false
+lc_7 = false
+
 # Sample reverse [boolean]: true/false
 rs_7 = false
 
Binary files 1.2.21-5/modules/lsp-plugins-trigger/res/doc/screenshots/trigger_midi_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/screenshots/trigger_midi_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-trigger/res/doc/screenshots/trigger_midi_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/screenshots/trigger_midi_stereo.png differ
Binary files 1.2.21-5/modules/lsp-plugins-trigger/res/doc/screenshots/trigger_mono.png and 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/screenshots/trigger_mono.png differ
Binary files 1.2.21-5/modules/lsp-plugins-trigger/res/doc/screenshots/trigger_stereo.png and 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/doc/screenshots/trigger_stereo.png differ
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/res/main/ui/trigger/single/mono.xml 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/main/ui/trigger/single/mono.xml
--- 1.2.21-5/modules/lsp-plugins-trigger/res/main/ui/trigger/single/mono.xml	2025-03-01 12:43:17.276525432 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/main/ui/trigger/single/mono.xml	2025-08-26 18:16:09.389754215 +0000
@@ -285,7 +285,7 @@
 					</cell>
 
 					<ui:for id="i" first="0" last="7">
-						<ui:with bg.color="bg_schema" expand="true">
+						<ui:with bg.color="bg_schema" expand="true" activity=":fs_${i} ieq 0">
 							<label text="${:i+1}"/>
 							<button id="on_${i}" width="32" height="12" ui:inject="Button_yellow" led="true" padding="6"/>
 							<knob id="vl_${i}" size="20" scolor="velocity"/>
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/res/main/ui/trigger/single/stereo.xml 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/main/ui/trigger/single/stereo.xml
--- 1.2.21-5/modules/lsp-plugins-trigger/res/main/ui/trigger/single/stereo.xml	2025-03-01 12:43:17.276525432 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/res/main/ui/trigger/single/stereo.xml	2025-08-26 18:16:09.389754215 +0000
@@ -294,7 +294,7 @@
 					</cell>
 
 					<ui:for id="i" first="0" last="7">
-						<ui:with bg.color="bg_schema" expand="true">
+						<ui:with bg.color="bg_schema" expand="true" activity=":fs_${i} ieq 0">
 							<label text="${:i+1}"/>
 							<button id="on_${i}" width="32" height="12" ui:inject="Button_yellow" led="true" padding="6"/>
 							<knob id="vl_${i}" size="20" scolor="velocity"/>
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/src/doc/manuals/plugins/trigger.php 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/src/doc/manuals/plugins/trigger.php
--- 1.2.21-5/modules/lsp-plugins-trigger/src/doc/manuals/plugins/trigger.php	2025-03-01 12:43:17.276525432 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/src/doc/manuals/plugins/trigger.php	2025-08-26 18:16:09.389754215 +0000
@@ -81,7 +81,7 @@ There are up to eight samples available
 	<?php } ?>
 	<li><b>Listen</b> - the button that plays preview of the corresponding sample.</li>
 	<li><b>Stop</b> - the button that stops preview of the sample preview.</li>
-	<li><b>Note on</b> - indicates that the playback event of the correponding sample has triggered.</li>
+	<li><b>Note on</b> - indicates that the playback event of the corresponding sample has triggered.</li>
 </ul>
 <p><b>'Audio channel' section:</b></p>
 <ul>
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/src/main/meta/trigger.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/src/main/meta/trigger.cpp
--- 1.2.21-5/modules/lsp-plugins-trigger/src/main/meta/trigger.cpp	2025-03-01 12:43:17.276525432 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/src/main/meta/trigger.cpp	2025-08-26 18:16:09.389754215 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-trigger
  * Created on: 31 июл. 2021 г.
@@ -26,7 +26,7 @@
 
 #define LSP_PLUGINS_TRIGGER_VERSION_MAJOR                   1
 #define LSP_PLUGINS_TRIGGER_VERSION_MINOR                   0
-#define LSP_PLUGINS_TRIGGER_VERSION_MICRO                   26
+#define LSP_PLUGINS_TRIGGER_VERSION_MICRO                   28
 
 #define LSP_PLUGINS_TRIGGER_VERSION  \
     LSP_MODULE_VERSION( \
@@ -89,85 +89,84 @@ namespace lsp
         //-------------------------------------------------------------------------
         // Trigger
         #define T_FILE_GAIN_MONO \
-            AMP_GAIN10("mx", "Sample mix gain", 1.0f)
+            AMP_GAIN10("mx", "Sample mix gain", NULL, 1.0f)
         #define T_FILE_GAIN_STEREO \
-            PAN_CTL("pl", "Sample left channel panorama", -100.0f), \
-            PAN_CTL("pr", "Sample right channel panorama", 100.0f)
+            PAN_CTL("pl", "Sample left channel panorama", NULL, -100.0f), \
+            PAN_CTL("pr", "Sample right channel panorama", NULL, 100.0f)
 
         #define T_SAMPLE_FILE(gain)         \
             PATH("sf", "Sample file"),      \
-            CONTROL("pi", "Sample pitch", U_SEMITONES, trigger_metadata::SAMPLE_PITCH), \
-            CONTROL("hc", "Sample head cut", U_MSEC, trigger_metadata::SAMPLE_LENGTH), \
-            CONTROL("tc", "Sample tail cut", U_MSEC, trigger_metadata::SAMPLE_LENGTH), \
-            CONTROL("fi", "Sample fade in", U_MSEC, trigger_metadata::SAMPLE_LENGTH), \
-            CONTROL("fo", "Sample fade out", U_MSEC, trigger_metadata::SAMPLE_LENGTH), \
-            AMP_GAIN10("mk", "Sample makeup gain", 1.0f), \
-            { "vl", "Sample velocity max",  U_PERCENT, R_CONTROL, F_LOWER | F_UPPER | F_STEP | F_LOWERING, 0.0f, 100.0f, 0.0f, 0.25, NULL }, \
-            CONTROL("pd", "Sample pre-delay", U_MSEC, trigger_metadata::PREDELAY), \
-            SWITCH("on", "Sample enabled", 1.0f), \
-            TRIGGER("ls", "Sample listen"), \
-            TRIGGER("lc", "Sample listen stop"), \
-            SWITCH("rs", "Sample reverse", 0.0f), \
+            CONTROL("pi", "Sample pitch", NULL, U_SEMITONES, trigger_metadata::SAMPLE_PITCH), \
+            CONTROL("hc", "Sample head cut", NULL, U_MSEC, trigger_metadata::SAMPLE_LENGTH), \
+            CONTROL("tc", "Sample tail cut", NULL, U_MSEC, trigger_metadata::SAMPLE_LENGTH), \
+            CONTROL("fi", "Sample fade in", NULL, U_MSEC, trigger_metadata::SAMPLE_LENGTH), \
+            CONTROL("fo", "Sample fade out", NULL, U_MSEC, trigger_metadata::SAMPLE_LENGTH), \
+            AMP_GAIN10("mk", "Sample makeup gain", NULL, 1.0f), \
+            LOW_CONTROL("vl", "Sample velocity max", NULL, U_PERCENT, trigger_metadata::MAXVEL), \
+            CONTROL("pd", "Sample pre-delay", NULL, U_MSEC, trigger_metadata::PREDELAY), \
+            SWITCH("on", "Sample enabled", NULL, 1.0f), \
+            TRIGGER("ls", "Sample listen", NULL), \
+            TRIGGER("lc", "Sample listen stop", NULL), \
+            SWITCH("rs", "Sample reverse", NULL, 0.0f), \
             gain, \
             BLINK("ac", "Sample activity"), \
             BLINK("no", "Sample note on event"), \
-            { "fl", "Sample length", U_MSEC, R_METER, F_LOWER | F_UPPER | F_STEP, \
-                    trigger_metadata::SAMPLE_LENGTH_MIN, trigger_metadata::SAMPLE_LENGTH_MAX, 0, trigger_metadata::SAMPLE_LENGTH_STEP, NULL }, \
+            METER("fl", "Sample length", U_MSEC, trigger_metadata::SAMPLE_LENGTH), \
             STATUS("fs", "Sample load status"), \
             MESH("fd", "Sample file contents", trigger_metadata::TRACKS_MAX, trigger_metadata::MESH_SIZE)
 
         #define T_METERS_MONO                   \
             MESH("isg", "Input signal graph", trigger_metadata::TRACKS_MAX, trigger_metadata::HISTORY_MESH_SIZE + 2), \
             METER_GAIN20("ism", "Input signal meter"), \
-            SWITCH("isv", "Input signal display", 1.0f)
+            SWITCH("isv", "Input signal display", "Show in", 1.0f)
 
         #define T_METERS_STEREO                 \
-            COMBO("ssrc", "Signal source", 0, trigger_sources), \
+            COMBO("ssrc", "Signal source", "Source", 0, trigger_sources), \
             MESH("isgl", "Input signal graph left", trigger_metadata::TRACKS_MAX, trigger_metadata::HISTORY_MESH_SIZE + 2), \
             MESH("isgr", "Input signal graph right", trigger_metadata::TRACKS_MAX, trigger_metadata::HISTORY_MESH_SIZE + 2), \
             METER_GAIN20("isml", "Input signal meter left"), \
             METER_GAIN20("ismr", "Input signal meter right"), \
-            SWITCH("isvl", "Input signal left display", 1.0f), \
-            SWITCH("isvr", "Input signal right display", 1.0f)
+            SWITCH("isvl", "Input signal left display", "Show in L", 1.0f), \
+            SWITCH("isvr", "Input signal right display", "Show in R", 1.0f)
 
         #define T_PORTS_GLOBAL(sample)  \
-            COMBO("asel", "Area selector", 0, trigger_areas), \
+            COMBO("asel", "Area selector", "Area", 0, trigger_areas), \
             BYPASS,                 \
             DRY_GAIN(1.0f),         \
             WET_GAIN(1.0f),         \
-            PERCENTS("drywet", "Dry/Wet balance", 100.0f, 0.1f), \
+            DRYWET(100.0f), \
             OUT_GAIN, \
-            COMBO("mode", "Detection mode", trigger_metadata::MODE_DFL, trigger_modes), \
-            SWITCH("pause", "Pause graph analysis", 0.0f), \
-            TRIGGER("clear", "Clear graph analysis"), \
-            AMP_GAIN100("preamp", "Signal pre-amplification", 1.0f), \
-            COMBO("shpm", "High-pass filter mode", 0, trigger_filter_slope),      \
-            LOG_CONTROL("shpf", "High-pass filter frequency", U_HZ, trigger_metadata::HPF),   \
-            COMBO("slpm", "Low-pass filter mode", 0, trigger_filter_slope),      \
-            LOG_CONTROL("slpf", "Low-pass filter frequency", U_HZ, trigger_metadata::LPF), \
-            AMP_GAIN10("dl", "Detect level", trigger_metadata::DETECT_LEVEL_DFL), \
-            CONTROL("dt", "Detect time", U_MSEC, trigger_metadata::DETECT_TIME), \
-            AMP_GAIN1("rrl", "Relative release level", trigger_metadata::RELEASE_LEVEL_DFL), \
-            CONTROL("rt", "Release time", U_MSEC, trigger_metadata::RELEASE_TIME), \
-            CONTROL("dyna", "Dynamics", U_PERCENT, trigger_metadata::DYNAMICS), \
-            AMP_GAIN("dtr1", "Dynamics range 1", GAIN_AMP_P_6_DB, 20.0f), \
-            AMP_GAIN("dtr2", "Dynamics range 2", GAIN_AMP_M_36_DB, 20.0f), \
-            CONTROL("react", "Reactivity", U_MSEC, trigger_metadata::REACTIVITY), \
+            COMBO("mode", "Detection mode", "Mode", trigger_metadata::MODE_DFL, trigger_modes), \
+            SWITCH("pause", "Pause graph analysis", "Pause", 0.0f), \
+            TRIGGER("clear", "Clear graph analysis", "Clear"), \
+            AMP_GAIN100("preamp", "Signal pre-amplification", "Preamp", 1.0f), \
+            COMBO("shpm", "High-pass filter mode", "HPF mode", 0, trigger_filter_slope),      \
+            LOG_CONTROL("shpf", "High-pass filter frequency", "HPF freq", U_HZ, trigger_metadata::HPF),   \
+            COMBO("slpm", "Low-pass filter mode", "LPF mode", 0, trigger_filter_slope),      \
+            LOG_CONTROL("slpf", "Low-pass filter frequency", "LPF freq", U_HZ, trigger_metadata::LPF), \
+            AMP_GAIN10("dl", "Detect level", "Detect", trigger_metadata::DETECT_LEVEL_DFL), \
+            CONTROL("dt", "Detect time", "Det time", U_MSEC, trigger_metadata::DETECT_TIME), \
+            AMP_GAIN1("rrl", "Relative release level", "Rel level", trigger_metadata::RELEASE_LEVEL_DFL), \
+            CONTROL("rt", "Release time", "Rel time", U_MSEC, trigger_metadata::RELEASE_TIME), \
+            CONTROL("dyna", "Dynamics", "Dynamics", U_PERCENT, trigger_metadata::DYNAMICS), \
+            AMP_GAIN("dtr1", "Dynamics range 1", "Dynamics 1", GAIN_AMP_P_6_DB, 20.0f), \
+            AMP_GAIN("dtr2", "Dynamics range 2", "Dynamics 2", GAIN_AMP_M_36_DB, 20.0f), \
+            CONTROL("react", "Reactivity", "Reactivity", U_MSEC, trigger_metadata::REACTIVITY), \
             METER_OUT_GAIN("rl", "Release level", 20.0f), \
             MESH("tfg", "Trigger function graph", trigger_metadata::TRACKS_MAX, trigger_metadata::HISTORY_MESH_SIZE), \
             METER_GAIN20("tfm", "Trigger function meter"), \
-            SWITCH("tfv", "Trigger function display", 1.0f), \
+            SWITCH("tfv", "Trigger function display", "Show func", 1.0f), \
             BLINK("tla", "Trigger activity"), \
             MESH("tlg", "Trigger level graph", trigger_metadata::TRACKS_MAX, trigger_metadata::HISTORY_MESH_SIZE + 4), \
             METER_GAIN20("tlm", "Trigger level meter"), \
-            SWITCH("tlv", "Trigger level display", 1.0f), \
+            SWITCH("tlv", "Trigger level display", "Show lvl", 1.0f), \
             PORT_SET("ssel", "Sample selector", trigger_sample_selectors, sample)
 
         #define T_MIDI_PORTS                    \
-            COMBO("chan", "Channel", trigger_metadata::MIDI_CHANNEL_DFL, midi_channels), \
-            COMBO("note", "Note", trigger_metadata::MIDI_NOTE_DFL, notes), \
-            COMBO("oct", "Octave", trigger_metadata::MIDI_OCTAVE_DFL, octaves), \
-            { "mn", "MIDI Note #", U_NONE, R_METER, F_LOWER | F_UPPER | F_INT, 0, 127, 0, 0, NULL }
+            COMBO("chan", "Channel", "MIDI channel", trigger_metadata::MIDI_CHANNEL_DFL, midi_channels), \
+            COMBO("note", "Note", "Note", trigger_metadata::MIDI_NOTE_DFL, notes), \
+            COMBO("oct", "Octave", "Octave", trigger_metadata::MIDI_OCTAVE_DFL, octaves), \
+            INT_METER("mn", "MIDI Note #", U_NONE, trigger_metadata::MIDINOTE)
 
         static const port_t sample_file_mono_ports[] =
         {
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/src/main/plug/trigger_kernel.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/src/main/plug/trigger_kernel.cpp
--- 1.2.21-5/modules/lsp-plugins-trigger/src/main/plug/trigger_kernel.cpp	2025-03-01 12:43:17.276525432 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/src/main/plug/trigger_kernel.cpp	2025-08-26 18:16:09.389754215 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-trigger
  * Created on: 31 июл. 2021 г.
@@ -861,17 +861,13 @@ namespace lsp
                 if (af->pFile == NULL)
                     continue;
 
-                // Do nothing if rendering is in progress
-                if (!af->pRenderer->idle())
-                    continue;
-
                 // Get path
                 plug::path_t *path = af->pFile->buffer<plug::path_t>();
                 if (path == NULL)
                     continue;
 
                 // If there is new load request and loader is idle, then wake up the loader
-                if ((path->pending()) && (af->pLoader->idle()))
+                if ((path->pending()) && (af->pLoader->idle()) && (af->pRenderer->idle()))
                 {
                     // Try to submit task
                     if (pExecutor->submit(af->pLoader))
@@ -908,12 +904,8 @@ namespace lsp
                 if (af->pFile == NULL)
                     continue;
 
-                // Do nothing if loader is in progress
-                if (!af->pLoader->idle())
-                    continue;
-
                 // Get path and check task state
-                if ((af->nUpdateReq != af->nUpdateResp) && (af->pRenderer->idle()))
+                if ((af->nUpdateReq != af->nUpdateResp) && (af->pRenderer->idle()) && (af->pLoader->idle()))
                 {
                     if (af->pOriginal == NULL)
                     {
diff -pruN 1.2.21-5/modules/lsp-plugins-trigger/src/main/ui/trigger_midi.cpp 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/src/main/ui/trigger_midi.cpp
--- 1.2.21-5/modules/lsp-plugins-trigger/src/main/ui/trigger_midi.cpp	2025-03-01 12:43:17.276525432 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-plugins-trigger/src/main/ui/trigger_midi.cpp	2025-08-26 18:16:09.389754215 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-plugins-trigger
  * Created on: 18 февр. 2024 г.
@@ -39,11 +39,12 @@ namespace lsp
             {
                 "",
                 "MIDI velocity",
+                NULL,
                 meta::U_NONE,
                 meta::R_CONTROL,
                 meta::F_INT | meta::F_LOWER | meta::F_UPPER | meta::F_STEP,
                 midi_velocity_min, midi_velocity_max, 0.0f, 0.05f,
-                NULL, NULL
+                NULL, NULL, NULL
             };
 
             MidiVelocityPort::MidiVelocityPort()
diff -pruN 1.2.21-5/modules/lsp-r3d-base-lib/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-r3d-base-lib/.github/workflows/build.yml	2025-03-01 12:42:54.732660751 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/.github/workflows/build.yml	2025-08-26 18:15:40.162037881 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
@@ -188,3 +188,25 @@ jobs:
       - name: Run unit tests
         shell: msys2 {0}
         run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test.exe utest --verbose --jobs 1
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config TEST=1 STRICT=1 DEBUG=1 ASAN=1
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
+      - name: Run unit tests
+        run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1
+      - name: Run unit tests with memcheck
+        run: |
+          for test in $(.build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --list --suppress); do \
+            echo "***** MEMCHECK $test *****"; \
+            .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1 --nofork --debug $test; \
+          done
diff -pruN 1.2.21-5/modules/lsp-r3d-base-lib/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/CHANGELOG
--- 1.2.21-5/modules/lsp-r3d-base-lib/CHANGELOG	2025-03-01 12:42:54.732660751 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/CHANGELOG	2025-08-26 18:15:40.162037881 +0000
@@ -2,6 +2,15 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.25 ===
+* Added MacOS CI builds.
+* Updated module versions in dependencies.
+
+=== 1.0.24 ===
+* Added MacOS dependencies.
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.23 ===
 * Updated module versions in dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-r3d-base-lib/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/dependencies.mk
--- 1.2.21-5/modules/lsp-r3d-base-lib/dependencies.mk	2025-03-01 12:42:54.732660751 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/dependencies.mk	2025-08-26 18:15:40.162037881 +0000
@@ -1,6 +1,6 @@
 #
-# Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
-#           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
 #
 # This file is part of lsp-r3d-base-lib
 #
@@ -62,13 +62,27 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = 
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+
+#------------------------------------------------------------------------------
 # Overall system dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
diff -pruN 1.2.21-5/modules/lsp-r3d-base-lib/include/lsp-plug.in/r3d/base/version.h 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/include/lsp-plug.in/r3d/base/version.h
--- 1.2.21-5/modules/lsp-r3d-base-lib/include/lsp-plug.in/r3d/base/version.h	2025-03-01 12:42:54.732660751 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/include/lsp-plug.in/r3d/base/version.h	2025-08-26 18:15:40.166037842 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_R3D_BASE_LIB_MAJOR          1
 #define LSP_R3D_BASE_LIB_MINOR          0
-#define LSP_R3D_BASE_LIB_MICRO          23
+#define LSP_R3D_BASE_LIB_MICRO          25
 
 #if defined(LSP_R3D_BASE_LIB_PUBLISHER)
     #define LSP_R3D_BASE_LIB_PUBLIC         LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-r3d-base-lib/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/make/tools.mk
--- 1.2.21-5/modules/lsp-r3d-base-lib/make/tools.mk	2025-03-01 12:42:54.732660751 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/make/tools.mk	2025-08-26 18:15:40.166037842 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-r3d-base-lib/modules.mk 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/modules.mk
--- 1.2.21-5/modules/lsp-r3d-base-lib/modules.mk	2025-03-01 12:42:54.732660751 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/modules.mk	2025-08-26 18:15:40.166037842 +0000
@@ -20,19 +20,19 @@
 
 #------------------------------------------------------------------------------
 # Variables that describe source code dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
diff -pruN 1.2.21-5/modules/lsp-r3d-base-lib/project.mk 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/project.mk
--- 1.2.21-5/modules/lsp-r3d-base-lib/project.mk	2025-03-01 12:42:54.732660751 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-base-lib/project.mk	2025-08-26 18:15:40.166037842 +0000
@@ -23,5 +23,5 @@ ARTIFACT_ID                 = LSP_R3D_BA
 ARTIFACT_NAME               = lsp-r3d-base-lib
 ARTIFACT_DESC               = Base library for implementing and loading 3D rendering backend
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.23
+ARTIFACT_VERSION            = 1.0.25
 ARTIFACT_EXPORT_SYMBOLS     = 0
diff -pruN 1.2.21-5/modules/lsp-r3d-glx-lib/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-r3d-glx-lib/.github/workflows/build.yml	2025-03-01 12:42:54.780660464 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/.github/workflows/build.yml	2025-08-26 18:15:40.910030622 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libX11-devel libglvnd-devel Mesa-libGL-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale libX11-devel libglvnd-devel Mesa-libGL-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang libX11-devel libglvnd-devel Mesa-libGL-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang libX11-devel libglvnd-devel Mesa-libGL-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
diff -pruN 1.2.21-5/modules/lsp-r3d-glx-lib/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/CHANGELOG
--- 1.2.21-5/modules/lsp-r3d-glx-lib/CHANGELOG	2025-03-01 12:42:54.780660464 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/CHANGELOG	2025-08-26 18:15:40.910030622 +0000
@@ -2,6 +2,13 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.25 ===
+* Updated module versions in dependencies.
+
+=== 1.0.24 ===
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.23 ===
 * Updated module versions in dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-r3d-glx-lib/include/lsp-plug.in/r3d/glx/version.h 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/include/lsp-plug.in/r3d/glx/version.h
--- 1.2.21-5/modules/lsp-r3d-glx-lib/include/lsp-plug.in/r3d/glx/version.h	2025-03-01 12:42:54.780660464 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/include/lsp-plug.in/r3d/glx/version.h	2025-08-26 18:15:40.910030622 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_R3D_GLX_LIB_MAJOR           1
 #define LSP_R3D_GLX_LIB_MINOR           0
-#define LSP_R3D_GLX_LIB_MICRO           23
+#define LSP_R3D_GLX_LIB_MICRO           25
 
 #if defined(LSP_R3D_GLX_LIB_PUBLISHER)
     #define LSP_R3D_GLX_LIB_PUBLIC          LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-r3d-glx-lib/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/make/tools.mk
--- 1.2.21-5/modules/lsp-r3d-glx-lib/make/tools.mk	2025-03-01 12:42:54.780660464 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/make/tools.mk	2025-08-26 18:15:40.914030583 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-r3d-glx-lib/modules.mk 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/modules.mk
--- 1.2.21-5/modules/lsp-r3d-glx-lib/modules.mk	2025-03-01 12:42:54.780660464 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/modules.mk	2025-08-26 18:15:40.914030583 +0000
@@ -20,25 +20,25 @@
 
 #------------------------------------------------------------------------------
 # Variables that describe source code dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
diff -pruN 1.2.21-5/modules/lsp-r3d-glx-lib/project.mk 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/project.mk
--- 1.2.21-5/modules/lsp-r3d-glx-lib/project.mk	2025-03-01 12:42:54.780660464 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-glx-lib/project.mk	2025-08-26 18:15:40.914030583 +0000
@@ -23,5 +23,5 @@ ARTIFACT_ID                 = LSP_R3D_GL
 ARTIFACT_NAME               = lsp-r3d-glx-lib
 ARTIFACT_DESC               = GLX-based 3D backend library for rendering scenes
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.23
+ARTIFACT_VERSION            = 1.0.25
 ARTIFACT_EXPORT_HEADERS     = 0
diff -pruN 1.2.21-5/modules/lsp-r3d-iface/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-r3d-iface/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-r3d-iface/.github/workflows/build.yml	2025-03-01 12:42:54.612661473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-iface/.github/workflows/build.yml	2025-08-26 18:15:40.186037648 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
@@ -188,3 +188,25 @@ jobs:
       - name: Run unit tests
         shell: msys2 {0}
         run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test.exe utest --verbose --jobs 1
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config TEST=1 STRICT=1 DEBUG=1 ASAN=1
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
+      - name: Run unit tests
+        run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1
+      - name: Run unit tests with memcheck
+        run: |
+          for test in $(.build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --list --suppress); do \
+            echo "***** MEMCHECK $test *****"; \
+            .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1 --nofork --debug $test; \
+          done
diff -pruN 1.2.21-5/modules/lsp-r3d-iface/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-r3d-iface/CHANGELOG
--- 1.2.21-5/modules/lsp-r3d-iface/CHANGELOG	2025-03-01 12:42:54.612661473 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-iface/CHANGELOG	2025-08-26 18:15:40.186037648 +0000
@@ -2,6 +2,15 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.25 ===
+* Added MacOS CI builds.
+* Updated module versions in dependencies.
+
+=== 1.0.24 ===
+* Added dependencies for MacOS.
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.23 ===
 * Updated module versions in dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-r3d-iface/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-r3d-iface/dependencies.mk
--- 1.2.21-5/modules/lsp-r3d-iface/dependencies.mk	2025-03-01 12:42:54.616661447 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-iface/dependencies.mk	2025-08-26 18:15:40.190037609 +0000
@@ -1,6 +1,6 @@
 #
-# Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
-#           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+# Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+#           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
 #
 # This file is part of lsp-r3d-iface
 #
@@ -61,13 +61,26 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = 
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # Overall system dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
diff -pruN 1.2.21-5/modules/lsp-r3d-iface/include/lsp-plug.in/r3d/iface/version.h 1.2.23-0ubuntu1/modules/lsp-r3d-iface/include/lsp-plug.in/r3d/iface/version.h
--- 1.2.21-5/modules/lsp-r3d-iface/include/lsp-plug.in/r3d/iface/version.h	2025-03-01 12:42:54.616661447 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-iface/include/lsp-plug.in/r3d/iface/version.h	2025-08-26 18:15:40.190037609 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_R3D_IFACE_MAJOR             1
 #define LSP_R3D_IFACE_MINOR             0
-#define LSP_R3D_IFACE_MICRO             23
+#define LSP_R3D_IFACE_MICRO             25
 
 #if defined(LSP_R3D_IFACE_PUBLISHER)
     #define LSP_R3D_IFACE_PUBLIC        LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-r3d-iface/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-r3d-iface/make/tools.mk
--- 1.2.21-5/modules/lsp-r3d-iface/make/tools.mk	2025-03-01 12:42:54.616661447 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-iface/make/tools.mk	2025-08-26 18:15:40.190037609 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-r3d-iface/modules.mk 1.2.23-0ubuntu1/modules/lsp-r3d-iface/modules.mk
--- 1.2.21-5/modules/lsp-r3d-iface/modules.mk	2025-03-01 12:42:54.616661447 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-iface/modules.mk	2025-08-26 18:15:40.190037609 +0000
@@ -20,13 +20,13 @@
 
 #------------------------------------------------------------------------------
 # Variables that describe source code dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
diff -pruN 1.2.21-5/modules/lsp-r3d-iface/project.mk 1.2.23-0ubuntu1/modules/lsp-r3d-iface/project.mk
--- 1.2.21-5/modules/lsp-r3d-iface/project.mk	2025-03-01 12:42:54.616661447 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-iface/project.mk	2025-08-26 18:15:40.190037609 +0000
@@ -23,4 +23,4 @@ ARTIFACT_ID                 = LSP_R3D_IF
 ARTIFACT_NAME               = lsp-r3d-iface
 ARTIFACT_DESC               = 3D rendering backend interfaces
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.23
+ARTIFACT_VERSION            = 1.0.25
diff -pruN 1.2.21-5/modules/lsp-r3d-wgl-lib/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/CHANGELOG
--- 1.2.21-5/modules/lsp-r3d-wgl-lib/CHANGELOG	2025-03-01 12:42:54.636661327 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/CHANGELOG	2025-08-26 18:15:41.270027128 +0000
@@ -2,6 +2,13 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.20 ===
+* Updated module versions in dependencies.
+
+=== 1.0.19 ===
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.18 ===
 * Updated module versions in dependencies.
 
diff -pruN 1.2.21-5/modules/lsp-r3d-wgl-lib/include/lsp-plug.in/r3d/wgl/version.h 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/include/lsp-plug.in/r3d/wgl/version.h
--- 1.2.21-5/modules/lsp-r3d-wgl-lib/include/lsp-plug.in/r3d/wgl/version.h	2025-03-01 12:42:54.640661304 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/include/lsp-plug.in/r3d/wgl/version.h	2025-08-26 18:15:41.270027128 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_R3D_WGL_LIB_MAJOR           1
 #define LSP_R3D_WGL_LIB_MINOR           0
-#define LSP_R3D_WGL_LIB_MICRO           18
+#define LSP_R3D_WGL_LIB_MICRO           20
 
 #if defined(LSP_R3D_WGL_LIB_PUBLISHER)
     #define LSP_R3D_WGL_LIB_PUBLIC          LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-r3d-wgl-lib/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/make/tools.mk
--- 1.2.21-5/modules/lsp-r3d-wgl-lib/make/tools.mk	2025-03-01 12:42:54.640661304 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/make/tools.mk	2025-08-26 18:15:41.270027128 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-r3d-wgl-lib/modules.mk 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/modules.mk
--- 1.2.21-5/modules/lsp-r3d-wgl-lib/modules.mk	2025-03-01 12:42:54.640661304 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/modules.mk	2025-08-26 18:15:41.270027128 +0000
@@ -20,25 +20,25 @@
 
 #------------------------------------------------------------------------------
 # Variables that describe source code dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
diff -pruN 1.2.21-5/modules/lsp-r3d-wgl-lib/project.mk 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/project.mk
--- 1.2.21-5/modules/lsp-r3d-wgl-lib/project.mk	2025-03-01 12:42:54.640661304 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-r3d-wgl-lib/project.mk	2025-08-26 18:15:41.274027089 +0000
@@ -23,5 +23,5 @@ ARTIFACT_ID                 = LSP_R3D_WG
 ARTIFACT_NAME               = lsp-r3d-wgl-lib
 ARTIFACT_DESC               = Windows-based OpenGL 3D backend library for rendering scenes
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.18
+ARTIFACT_VERSION            = 1.0.20
 ARTIFACT_EXPORT_HEADERS     = 0
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-runtime-lib/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-runtime-lib/.github/workflows/build.yml	2025-03-01 12:42:57.160646177 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/.github/workflows/build.yml	2025-08-26 18:15:43.630004223 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libsndfile-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale libsndfile-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel libsndfile-devel clang
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel libsndfile-devel clang
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
@@ -188,3 +188,25 @@ jobs:
       - name: Run unit tests
         shell: msys2 {0}
         run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test.exe utest --verbose --jobs 1
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config TEST=1 STRICT=1 DEBUG=1 ASAN=1
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
+      - name: Run unit tests
+        run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1
+      - name: Run unit tests with memcheck
+        run: |
+          for test in $(.build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --list --suppress); do \
+            echo "***** MEMCHECK $test *****"; \
+            .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1 --nofork --debug $test; \
+          done
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-runtime-lib/CHANGELOG
--- 1.2.21-5/modules/lsp-runtime-lib/CHANGELOG	2025-03-01 12:42:57.160646177 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/CHANGELOG	2025-08-26 18:15:43.630004223 +0000
@@ -2,6 +2,21 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.29 ===
+* Implemented simple compressor for Wavefront OBJ files.
+* Fixed bug in determining file size for Unix-like systems.
+* Several optimizations of standard compression algorithm.
+* Fixed bug in associativity of add, sub, mul, div and bit-and expressions.
+* Added MacOS CI builds.
+* Updated module versions in dependencies.
+
+=== 1.0.28 ===
+* Reduced poll interval for ipc::NativeExecutor to 20 milliseconds.
+* Fixed invalid access to missing built-in resources.
+* Fixed some command line options that caused JACK version to crash.
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.27 ===
 * Better support of MacOS.
 * Added possibility to modify configuration parameters.
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/Compressor.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/Compressor.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/Compressor.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/Compressor.h	2025-08-26 18:15:43.638004145 +0000
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-runtime-lib
+ * Created on: 23 июл. 2025 г.
+ *
+ * lsp-runtime-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-runtime-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-runtime-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_FMT_OBJ_COMPRESSOR_H_
+#define LSP_PLUG_IN_FMT_OBJ_COMPRESSOR_H_
+
+#include <lsp-plug.in/runtime/version.h>
+#include <lsp-plug.in/io/File.h>
+#include <lsp-plug.in/io/IOutStream.h>
+#include <lsp-plug.in/io/OutBitStream.h>
+
+#include <lsp-plug.in/fmt/obj/const.h>
+#include <lsp-plug.in/fmt/obj/IObjHandler.h>
+
+namespace lsp
+{
+    namespace obj
+    {
+        /**
+         * OBJ format compressor
+         */
+        class Compressor: public IObjHandler
+        {
+            protected:
+                io::OutBitStream   *pOut;
+
+                union
+                {
+                    float              *vFloatBuf;
+                    uint32_t           *vIntBuf;
+                };
+
+                uint32_t            nFloatHead;
+                uint32_t            nFloatSize;
+                uint32_t            nFloatCap;
+                uint32_t            nFloatBits;
+
+                uint32_t            nLastEvent;
+
+                size_t              nWFlags;
+
+            protected:
+                status_t            do_wrap(io::OutBitStream * & obs, size_t flags = WRAP_CLOSE | WRAP_DELETE);
+                status_t            write_varint(size_t value);
+                status_t            write_varint_icount(size_t value);
+                status_t            write_float(float value);
+                inline status_t     write_indices(const index_t *value, size_t count);
+                inline status_t     write_event(uint32_t event);
+                inline status_t     write_utf8(const char *text);
+                static bool         has_nonempty_index(const index_t *v, size_t count);
+                static bool         has_equal_indices(const index_t *v, size_t count);
+
+            public:
+                Compressor();
+                Compressor(const Compressor &) = delete;
+                Compressor(Compressor &&) = delete;
+                virtual ~Compressor() override;
+
+                Compressor & operator = (const Compressor &) = delete;
+                Compressor & operator = (Compressor &&) = delete;
+
+            public:
+                status_t            open(const char *path, size_t mode);
+                status_t            open(const LSPString *path, size_t mode);
+                status_t            open(const io::Path *path, size_t mode);
+
+                status_t            wrap(FILE *fd, bool close);
+                status_t            wrap_native(fhandle_t fd, bool close);
+                status_t            wrap(io::File *fd, size_t flags = 0);
+                status_t            wrap(io::IOutStream *os, size_t flags = 0);
+                status_t            wrap(io::OutBitStream *obs, size_t flags = 0);
+
+                status_t            close();
+
+            public:
+                /**
+                 * Set buffer size
+                 * @param float_bits
+                 * @return status of operation
+                 */
+                status_t            set_buffer_size(size_t float_bits);
+
+            public:
+                virtual status_t    begin_object(const char *name) override;
+                virtual status_t    begin_object(const LSPString *name) override;
+                virtual status_t    end_object() override;
+                virtual status_t    end_of_data() override;
+                virtual ssize_t     add_vertex(float x, float y, float z, float w) override;
+                virtual ssize_t     add_param_vertex(float x, float y, float z, float w) override;
+                virtual ssize_t     add_normal(float nx, float ny, float nz, float nw) override;
+                virtual ssize_t     add_texture_vertex(float u, float v, float w) override;
+                virtual ssize_t     add_face(const index_t *vv, const index_t *vn, const index_t *vt, size_t n) override;
+                virtual ssize_t     add_points(const index_t *vv, size_t n) override;
+                virtual ssize_t     add_line(const index_t *vv, const index_t *vt, size_t n) override;
+        };
+
+    } /* namespace obj */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PL;UG_IN_FMT_OBJ_COMPRESSOR_H_ */
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/Decompressor.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/Decompressor.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/Decompressor.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/Decompressor.h	2025-08-26 18:15:43.638004145 +0000
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-runtime-lib
+ * Created on: 26 июл. 2025 г.
+ *
+ * lsp-runtime-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-runtime-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-runtime-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_FMT_OBJ_DECOMPRESSOR_H_
+#define LSP_PLUG_IN_FMT_OBJ_DECOMPRESSOR_H_
+
+#include <lsp-plug.in/runtime/version.h>
+#include <lsp-plug.in/fmt/obj/const.h>
+#include <lsp-plug.in/fmt/obj/PullParser.h>
+#include <lsp-plug.in/fmt/obj/IObjHandler.h>
+#include <lsp-plug.in/io/InBitStream.h>
+
+namespace lsp
+{
+    namespace obj
+    {
+
+        class Decompressor
+        {
+            protected:
+                io::InBitStream     sStream;
+                union
+                {
+                    float              *vFloatBuf;
+                    uint32_t           *vIntBuf;
+                };
+
+                uint32_t            nFloatHead;
+                uint32_t            nFloatSize;
+                uint32_t            nFloatCap;
+                uint32_t            nFloatBits;
+
+                compressed_event_type_t nLastEvent;
+
+            protected:
+                status_t            parse_data(IObjHandler *handler);
+                status_t            parse_header();
+                void                clear_state();
+                status_t            read_event(compressed_event_type_t *event);
+                status_t            parse_vertex(IObjHandler *handler, size_t coords);
+                status_t            parse_pvertex(IObjHandler *handler, size_t coords);
+                status_t            parse_normal(IObjHandler *handler, size_t coords);
+                status_t            parse_texcoord(IObjHandler *handler, size_t coords);
+                status_t            parse_face(IObjHandler *handler, bool texcoords, bool normals, bool fill);
+                status_t            parse_line(IObjHandler *handler, bool texcoords);
+                status_t            parse_points(IObjHandler *handler);
+                status_t            parse_object(IObjHandler *handler);
+                status_t            read_float(float *dst);
+                status_t            read_varint(size_t *dst);
+                status_t            read_varint_icount(size_t *dst);
+                status_t            read_indices(index_t *dst, size_t count, bool read);
+                status_t            read_utf8(LSPString *dst);
+
+            public:
+                explicit Decompressor();
+                Decompressor(const Decompressor &) = delete;
+                Decompressor(Decompressor &&) = delete;
+                virtual ~Decompressor();
+
+                Decompressor & operator = (const Decompressor &) = delete;
+                Decompressor & operator = (Decompressor &&) = delete;
+
+            public:
+                /**
+                 * Parse compressed OBJ file
+                 * @param handler Wavefront Object file handler
+                 * @param path UTF-8 path to the file
+                 * @param charset character set encoding of the file
+                 * @return status of operation
+                 */
+                status_t            parse_file(IObjHandler *handler, const char *path);
+
+                /**
+                 * Parse compressed OBJ file
+                 * @param handler Wavefront Object file handler
+                 * @param path path to the file
+                 * @param charset character set encoding of the file
+                 * @return status of operation
+                 */
+                status_t            parse_file(IObjHandler *handler, const LSPString *path);
+
+                /**
+                 * Parse compressed OBJ file
+                 * @param handler Wavefront Object file handler
+                 * @param path path to the file
+                 * @param charset character set encoding of the file
+                 * @return status of operation
+                 */
+                status_t            parse_file(IObjHandler *handler, const io::Path *path);
+
+                /**
+                 * Parse compressed OBJ data from input stream
+                 * @param handler Wavefront Object file handler
+                 * @param is input stream
+                 * @param flags wrap flags
+                 * @param charset character set
+                 * @return status of operation
+                 */
+                status_t            parse_data(IObjHandler *handler, io::IInStream *is, size_t flags = WRAP_NONE);
+
+                /**
+                 * Parse compressed OBJ data from memory
+                 * @param handler Wavefront Object file handler
+                 * @param data byte buffer
+                 * @param size size of byte buffer
+                 * @return status of operation
+                 */
+                status_t            parse_data(IObjHandler *handler, const void *data, size_t size);
+        };
+
+    } /* namespace obj */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_FMT_OBJ_DECOMPRESSOR_H_ */
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/PullParser.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/PullParser.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/PullParser.h	2025-03-01 12:42:57.168646130 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/PullParser.h	2025-08-26 18:15:43.638004145 +0000
@@ -49,7 +49,6 @@ namespace lsp
                 lsp_wchar_t        *pBuffer;        // Buffer for character data
                 size_t              nBufOff;        // Buffer offset
                 size_t              nBufLen;        // Buffer length
-                bool                bSkipLF;        // Skip line-feed character
                 size_t              nLines;         // Number of lines read
 
                 event_t             sEvent;
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/PushParser.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/PushParser.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/PushParser.h	2025-03-01 12:42:57.168646130 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/PushParser.h	2025-08-26 18:15:43.638004145 +0000
@@ -36,7 +36,7 @@ namespace lsp
             protected:
                 PullParser      sParser;
 
-            public:
+            protected:
                 status_t parse_document(IObjHandler *handler);
 
             public:
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/const.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/const.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/const.h	2025-03-01 12:42:57.168646130 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/fmt/obj/const.h	2025-08-26 18:15:43.638004145 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 21 апр. 2020 г.
@@ -23,6 +23,8 @@
 #define LSP_PLUG_IN_FMT_OBJ_CONST_H_
 
 #include <lsp-plug.in/runtime/version.h>
+#include <lsp-plug.in/runtime/LSPString.h>
+#include <lsp-plug.in/common/endian.h>
 #include <lsp-plug.in/common/types.h>
 #include <lsp-plug.in/common/status.h>
 
@@ -45,6 +47,35 @@ namespace lsp
             EV_POINT,       ///< Point event
         };
 
+        enum compressed_event_type_t
+        {
+            CEV_OBJECT,
+            CEV_VERTEX2,
+            CEV_VERTEX3,
+            CEV_VERTEX4,
+            CEV_PVERTEX2,
+            CEV_PVERTEX3,
+            CEV_PVERTEX4,
+            CEV_NORMAL2,
+            CEV_NORMAL3,
+            CEV_NORMAL4,
+            CEV_TEXCOORD1,
+            CEV_TEXCOORD2,
+            CEV_TEXCOORD3,
+            CEV_FACE,
+            CEV_FACE_T,
+            CEV_FACE_N,
+            CEV_FACE_NF,
+            CEV_FACE_TN,
+            CEV_FACE_TNF,
+            CEV_LINE,
+            CEV_LINE_T,
+            CEV_POINT,
+            CEV_EOF,
+
+            CEV_BITS = 5,
+        };
+
         typedef ssize_t     index_t;
 
         typedef struct event_t
@@ -63,8 +94,22 @@ namespace lsp
             lltl::darray<index_t>   inormal;        // Indexes of normals
             lltl::darray<index_t>   itexcoord;      // Indexes of texture coordinates
         } event_t;
-    }
-}
+
+    #pragma pack(push, 1)
+        typedef struct compressed_header_t
+        {
+            uint32_t    signature;
+            uint8_t     version;
+            uint8_t     float_bits;
+            uint8_t     pad[2];
+        } compressed_header_t;
+    #pragma pack(pop)
+
+        constexpr uint32_t COMPRESSED_SIGNATURE     = __IF_LEBE(0x4a424f43, 0x434f424a); /* COBJ */
+        constexpr size_t MIN_FLOAT_BUF_BITS         = 4;
+        constexpr size_t MAX_FLOAT_BUF_BITS         = 16;
+    } /* namesoace obj */
+} /* namespace lsp */
 
 
 #endif /* LSP_PLUG_IN_FMT_OBJ_CONST_H_ */
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/io/OutBitStream.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/io/OutBitStream.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/io/OutBitStream.h	2025-03-01 12:42:57.168646130 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/io/OutBitStream.h	2025-08-26 18:15:43.638004145 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 3 мар. 2021 г.
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/ipc/NativeExecutor.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/ipc/NativeExecutor.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/ipc/NativeExecutor.h	2025-03-01 12:42:57.168646130 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/ipc/NativeExecutor.h	2025-08-26 18:15:43.642004106 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 27 янв. 2016 г.
@@ -19,8 +19,8 @@
  * along with lsp-runtime-lib. If not, see <https://www.gnu.org/licenses/>.
  */
 
-#ifndef IPC_NATIVEEXECUTOR_H_
-#define IPC_NATIVEEXECUTOR_H_
+#ifndef LSP_PLUG_IN_IPC_NATIVEEXECUTOR_H_
+#define LSP_PLUG_IN_IPC_NATIVEEXECUTOR_H_
 
 #include <lsp-plug.in/runtime/version.h>
 #include <lsp-plug.in/common/atomic.h>
@@ -81,4 +81,4 @@ namespace lsp
     } /* namespace ipc */
 } /* namespace lsp */
 
-#endif /* IPC_NATIVEEXECUTOR_H_ */
+#endif /* LSP_PLUG_IN_IPC_NATIVEEXECUTOR_H_ */
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/resource/Compressor.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/resource/Compressor.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/resource/Compressor.h	2025-03-01 12:42:57.172646105 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/resource/Compressor.h	2025-08-26 18:15:43.642004106 +0000
@@ -50,6 +50,7 @@ namespace lsp
                 size_t                          nSegment;       // Start of data segment
                 size_t                          nOffset;        // Current offset in segment
                 cbuffer_t                       sBuffer;        // Buffer for caching
+//                FILE                           *hFD;
 
             protected:
                 status_t            alloc_entry(raw_resource_t **r, io::Path *path, resource_type_t type);
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/resource/buffer.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/resource/buffer.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/resource/buffer.h	2025-03-01 12:42:57.172646105 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/resource/buffer.h	2025-08-26 18:15:43.642004106 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 13 мар. 2021 г.
@@ -54,9 +54,10 @@ namespace lsp
             public:
                 uint8_t    *data;       // Buffer data (2 x capacity)
                 uint32_t   *index;      // Index
-                ssize_t     head;       // Head of the buffer
-                ssize_t     tail;       // Buffer tail
-                ssize_t     cap;        // Buffer capacity
+                uint32_t   *root;       // Root index
+                uint32_t    head;       // Head of the buffer
+                uint32_t    length;     // Buffer length
+                uint32_t    cap;        // Buffer capacity
 
             public:
                 explicit cbuffer_t();
@@ -66,11 +67,45 @@ namespace lsp
                 void            destroy();
 
             public:
-                void            append(const void *src, ssize_t count);
+                /**
+                 * Append buffer to compression buffer
+                 * @param src buffer to append
+                 * @param count the length of the buffer to append
+                 */
+                void            append(const void *src, size_t count);
+
+                /**
+                 * Append single byte to compression buffer
+                 * @param v byte to append
+                 */
                 void            append(uint8_t v);
-                size_t          lookup(ssize_t *out, const void *src, size_t avail);
+
+                /**
+                 * Lookup for byte sequence inside of the buffer
+                 * @param out relative offset of the sub-sequence in the buffer to the last byte stored in the buffer
+                 * @param src byte sequence to search inside of the buffer
+                 * @param avail number of bytes available in the sequence
+                 * @return the length of sub-sequence found in the buffer
+                 */
+                size_t          lookup(size_t *out, const void *src, size_t avail);
+
+                /**
+                 * Get byte relative to the last written byte
+                 * @param offset offset relative to the last written byte
+                 * @return byte
+                 */
+                uint8_t         byte_at(size_t offset);
+
+                /**
+                 * Cleanup state of the buffer
+                 */
                 void            clear();
-                inline size_t   size() const { return tail - head; }
+
+                /**
+                 * Get size of data currently stored in the buffer
+                 * @return size of data currently stored in the buffer
+                 */
+                inline size_t   size() const { return lsp_min(length, cap); }
 
         } cbuffer_t;
 
@@ -81,9 +116,9 @@ namespace lsp
         {
             public:
                 uint8_t    *data;       // Buffer data (2 x capacity)
-                ssize_t     head;       // Head of the buffer
-                ssize_t     tail;       // Buffer tail
-                ssize_t     cap;        // Buffer capacity
+                uint32_t    length;     // Actual size of buffer
+                uint32_t    head;       // Head of the buffer
+                uint32_t    cap;        // Buffer capacity
 
             public:
                 explicit dbuffer_t();
@@ -93,14 +128,43 @@ namespace lsp
                 void            destroy();
 
             public:
-                void            append(const void *src, ssize_t count);
+                /**
+                 * Extract data from buffer
+                 * @param dst destination pointer to store result
+                 * @param offset relative offset of the subsequence in the buffer to the last byte store in the buffer
+                 * @param count number of bytes to extract
+                 * @return status of operation (error on buffer underflow)
+                 */
+                status_t        extract(void *dst, size_t offset, size_t count);
+
+                /**
+                 * Append multiple bytes to the buffer
+                 * @param src data to append to the buffer
+                 * @param count number of bytes to append
+                 */
+                void            append(const void *src, size_t count);
+
+                /**
+                 * Append single byte to the buffer
+                 * @param v byt to append
+                 */
                 void            append(uint8_t v);
+
+                /**
+                 * Clear buffer state
+                 */
                 void            clear();
-                inline size_t   size() const { return tail - head; }
+
+                /**
+                 * Get size of data currently stored in the buffer
+                 * @return size of data currently stored in the buffer
+                 */
+                inline size_t   size() const { return length; }
 
         } duffer_t;
-    }
-}
+
+    } /* namespace resource */
+} /* namespace lsp */
 
 
 
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/runtime/version.h 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/runtime/version.h
--- 1.2.21-5/modules/lsp-runtime-lib/include/lsp-plug.in/runtime/version.h	2025-03-01 12:42:57.172646105 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/include/lsp-plug.in/runtime/version.h	2025-08-26 18:15:43.642004106 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_RUNTIME_LIB_MAJOR       1
 #define LSP_RUNTIME_LIB_MINOR       0
-#define LSP_RUNTIME_LIB_MICRO       27
+#define LSP_RUNTIME_LIB_MICRO       29
 
 #if defined(LSP_RUNTIME_LIB_PUBLISHER)
     #define LSP_RUNTIME_LIB_PUBLIC          LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-runtime-lib/make/tools.mk
--- 1.2.21-5/modules/lsp-runtime-lib/make/tools.mk	2025-03-01 12:42:57.172646105 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/make/tools.mk	2025-08-26 18:15:43.646004068 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/modules.mk 1.2.23-0ubuntu1/modules/lsp-runtime-lib/modules.mk
--- 1.2.21-5/modules/lsp-runtime-lib/modules.mk	2025-03-01 12:42:57.172646105 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/modules.mk	2025-08-26 18:15:43.646004068 +0000
@@ -19,19 +19,19 @@
 #
 
 # Variables that describe dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/project.mk 1.2.23-0ubuntu1/modules/lsp-runtime-lib/project.mk
--- 1.2.21-5/modules/lsp-runtime-lib/project.mk	2025-03-01 12:42:57.172646105 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/project.mk	2025-08-26 18:15:43.646004068 +0000
@@ -23,5 +23,5 @@ ARTIFACT_ID                 = LSP_RUNTIM
 ARTIFACT_NAME               = lsp-runtime-lib
 ARTIFACT_DESC               = Runtime library used by LSP Project for plugin development
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.27
+ARTIFACT_VERSION            = 1.0.29
 ARTIFACT_EXPORT_SYMBOLS     = 1
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/res/test/compressor/3d/coliseum.obj 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/compressor/3d/coliseum.obj
--- 1.2.21-5/modules/lsp-runtime-lib/res/test/compressor/3d/coliseum.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/compressor/3d/coliseum.obj	2025-08-26 18:15:43.646004068 +0000
@@ -0,0 +1,17578 @@
+# Coliseum
+# (C) Linux Studio Plugins Project
+o Coliseum
+v 82.374229 -1.000001 29.739475
+v 82.383362 -0.000001 25.724554
+v 82.374229 -1.000001 25.724554
+v 82.383362 -0.000001 29.739475
+v 82.374229 0.999999 25.724554
+v 82.374229 0.999999 29.739475
+v 79.964790 -0.401509 29.739475
+v 79.957542 -1.000001 29.739475
+v 79.965813 -0.000001 29.739475
+v 64.004601 -1.000001 15.686283
+v 64.004601 -1.000001 17.595785
+v 64.445457 -1.000001 17.595785
+v 78.985733 -1.000001 25.736622
+v 79.957542 -1.000001 25.736622
+v 79.948410 -1.000001 25.724554
+v 79.957970 -0.000001 25.724554
+v 79.948410 0.999999 25.724554
+v 79.954964 0.999999 25.736622
+v 79.954964 0.999999 29.739475
+v 78.983101 0.999999 25.736622
+v 64.000900 0.999999 15.683977
+v 64.441788 0.999999 17.595785
+v 64.000885 0.999999 17.595785
+v 79.964790 -0.401509 32.582039
+v 78.742325 11.192636 25.736622
+v 78.487259 12.298221 32.582039
+v 75.727638 20.637951 25.736622
+v 74.286400 23.762178 32.582039
+v 71.350693 28.932697 29.723917
+v 71.350693 28.932697 25.736624
+v 64.483055 37.716869 25.736624
+v 70.244370 30.598848 25.736624
+v 70.244370 30.598848 29.723028
+v 68.229103 33.348446 32.582039
+v 61.106724 41.042332 32.582039
+v 58.178036 43.568798 25.736624
+v 51.546734 48.349045 29.718903
+v 51.546734 48.349045 25.736624
+v 50.762253 48.842773 32.582043
+v 49.845821 49.402679 29.719164
+v 38.511002 55.047115 32.582043
+v 49.845821 49.402679 25.736624
+v 30.591658 57.848106 25.736624
+v 30.591658 57.848106 29.726017
+v 21.555859 60.130001 32.582043
+v 28.671888 58.409340 25.736624
+v 28.671888 58.409340 29.726980
+v 15.082416 61.239292 25.736624
+v 1.000000 62.283123 29.739477
+v 1.000000 62.283123 25.736624
+v 1.982464 62.268902 32.582043
+v -1.000000 62.285275 29.739477
+v -15.091408 61.270271 25.736624
+v -1.000000 62.285275 25.736624
+v -14.422338 61.360184 32.582043
+v -28.688749 58.464714 29.739477
+v -28.688749 58.464714 25.736624
+v -28.953821 58.390255 32.582043
+v -30.609467 57.906597 29.739477
+v -43.102142 53.108765 32.582043
+v -30.609467 57.906597 25.736624
+v -49.892338 49.473202 25.736624
+v -49.892338 49.473202 29.739477
+v -56.659760 44.877636 32.582043
+v -60.376137 41.814751 25.736624
+v -51.593704 48.420258 25.736624
+v -51.593704 48.420258 29.739477
+v -67.842796 33.962769 32.582039
+v -65.546158 36.680145 25.736624
+v -70.303787 30.638414 29.739477
+v -70.303787 30.638414 25.736624
+v -71.407608 28.970598 29.739477
+v -75.779388 20.646854 25.736622
+v -71.407608 28.970598 25.736624
+v -75.201881 21.969065 32.582039
+v -78.773483 11.183832 25.736622
+v -79.227577 8.830652 32.582039
+v -79.957542 0.999999 29.739475
+v -79.957542 0.999999 25.736622
+v -78.742325 -11.192638 25.736622
+v -79.954964 -1.000001 25.736622
+v -79.954964 -1.000001 29.739475
+v -79.809990 -3.968591 32.582039
+v -77.714043 -15.145662 32.582039
+v -75.727638 -20.637955 25.736622
+v -73.571671 -25.143974 32.582039
+v -71.350693 -28.932701 29.723913
+v -71.350693 -28.932701 25.736620
+v -64.483055 -37.716869 25.736620
+v -70.244370 -30.598852 25.736620
+v -70.244370 -30.598852 29.723024
+v -68.033501 -33.598423 32.582039
+v -61.658138 -40.531960 32.582039
+v -58.178036 -43.568798 25.736620
+v -51.546734 -48.349045 29.718899
+v -51.546734 -48.349045 25.736620
+v -52.446781 -47.765553 32.582035
+v -49.845821 -49.402679 29.719160
+v -41.547756 -53.743702 32.582035
+v -49.845821 -49.402679 25.736620
+v -30.591658 -57.848106 25.736620
+v -30.591658 -57.848106 29.726013
+v -26.469210 -59.001091 32.582035
+v -28.671888 -58.409340 25.736620
+v -28.671888 -58.409340 29.726976
+v -15.213863 -61.220856 25.736620
+v -9.019151 -61.912159 32.582035
+v -1.000000 -62.283123 25.736620
+v -1.000000 -62.283123 29.739473
+v 7.405601 -62.049629 32.582035
+v 1.000000 -62.285275 25.736620
+v 1.000000 -62.285275 29.739473
+v 15.248192 -61.248581 25.736620
+v 28.688749 -58.464714 29.739473
+v 28.688749 -58.464714 25.736620
+v 27.576012 -58.768497 32.582035
+v 30.609467 -57.906597 29.739473
+v 43.341114 -52.994713 32.582035
+v 30.609467 -57.906597 25.736620
+v 49.892338 -49.473202 25.736620
+v 49.892338 -49.473202 29.739473
+v 51.593704 -48.420258 29.739473
+v 58.358475 -43.532707 32.582039
+v 60.376137 -41.814751 25.736620
+v 51.593704 -48.420258 25.736620
+v 65.546158 -36.680145 25.736620
+v 70.303787 -30.638418 29.739473
+v 70.303787 -30.638418 25.736620
+v 68.874962 -32.627438 32.582039
+v 71.407608 -28.970602 29.739473
+v 75.779388 -20.646858 25.736622
+v 71.407608 -28.970602 25.736620
+v 75.848709 -20.481495 32.582039
+v 78.773483 -11.183834 25.736622
+v 78.854210 -10.804428 32.582039
+v 74.887146 -20.262028 25.736622
+v 70.598671 -28.431976 25.736620
+v 77.822960 -10.982240 25.736622
+v 64.840141 -16.791273 19.799999
+v 61.536156 -14.509326 17.595785
+v 58.495178 -20.372959 17.595785
+v 65.603142 -14.942526 19.799999
+v 63.601284 -7.970113 17.595785
+v 70.115913 -18.988890 23.000000
+v 70.879631 -17.140442 23.000000
+v 58.128204 -20.128613 17.595785
+v 61.131332 -14.335052 17.595785
+v 63.170067 -7.879021 17.595785
+v -1.000000 -46.332970 15.684329
+v -24.025030 -43.147472 15.683993
+v -24.025030 -43.147472 17.595783
+v -1.000000 -46.332970 17.595783
+v 22.762934 -43.542110 15.683993
+v 1.000000 -46.335480 15.685910
+v 1.000000 -46.335480 17.595783
+v 24.041683 -43.202168 17.595783
+v 24.041683 -43.202168 15.703124
+v 35.788834 -38.923447 15.683993
+v 25.963871 -42.648880 15.704364
+v 25.963871 -42.648880 17.595783
+v 41.100574 -36.144379 17.595783
+v 41.100574 -36.144379 15.711573
+v 47.668396 -31.664364 15.683994
+v 42.810513 -35.104427 15.711974
+v 42.810513 -35.104427 17.595783
+v 49.617649 -30.037235 17.595783
+v 53.513515 -26.207851 17.595783
+v 55.580910 -23.755255 15.683994
+v 57.026207 -21.797644 17.595785
+v 57.026207 -21.797644 15.707766
+v 60.729580 -15.263779 15.683994
+v 58.128204 -20.128613 15.706448
+v 63.133755 -8.043282 15.683995
+v 64.015945 -0.279105 15.685441
+v 64.015945 -0.279105 15.683995
+v -0.662511 -46.336334 15.683993
+v 64.016495 -0.000001 15.685115
+v 63.140995 7.876788 15.683995
+v 63.140995 7.876788 17.595785
+v 61.083679 14.317352 15.683996
+v 61.083679 14.317353 17.595785
+v 58.071842 20.091084 15.683996
+v 58.071842 20.091084 17.595785
+v 63.572159 7.968172 17.595785
+v 61.488392 14.491858 17.595785
+v 58.438789 20.335413 17.595785
+v 65.559143 14.924196 19.799999
+v 64.791237 16.770905 19.799999
+v 77.791946 10.990335 25.736622
+v 70.835320 17.121979 23.000000
+v 70.067268 18.968626 23.000000
+v 74.835655 20.252550 25.736622
+v 70.541771 28.394087 25.736624
+v 55.284401 18.235088 15.683996
+v 46.884941 12.642374 9.179747
+v 46.884941 12.642374 9.967792
+v 58.090046 20.103207 15.677586
+v 71.372620 28.947300 25.724556
+v 71.372620 28.947300 29.739477
+v 73.391800 30.291756 29.739477
+v 73.391800 30.291756 25.724556
+v 70.267548 30.614283 29.739477
+v 72.286591 31.958647 25.724556
+v 72.286591 31.958647 29.739477
+v 70.267548 30.614283 25.724556
+v 69.435486 30.060263 25.736624
+v 56.986320 21.771084 15.677586
+v 57.333290 22.002111 17.595787
+v 56.966381 21.757809 15.683996
+v 56.966381 21.757809 17.595785
+v 54.179218 19.901999 15.683996
+v 45.783604 14.311845 9.179747
+v 45.783604 14.311845 9.969533
+v 63.765499 37.061539 25.736624
+v 57.553310 42.824448 25.736624
+v 51.011665 47.537853 25.736624
+v 40.920010 32.238316 15.683996
+v 35.370396 23.824778 9.179747
+v 35.370396 23.824778 9.973003
+v 42.780453 35.058853 15.677587
+v 42.763599 35.033306 15.683997
+v 42.763599 35.033306 17.595787
+v 43.006294 35.401245 17.595787
+v 51.565914 48.378124 25.724556
+v 51.565914 48.378124 29.739477
+v 52.901516 50.402973 25.724556
+v 52.901516 50.402973 29.739477
+v 49.864773 49.431408 29.739477
+v 51.201363 51.457760 25.724556
+v 51.201363 51.457760 29.739477
+v 49.864773 49.431408 25.724556
+v 49.310341 48.590862 25.736624
+v 41.070816 36.099262 15.677587
+v 41.297276 36.442589 17.595787
+v 41.054279 36.074196 17.595787
+v 41.054279 36.074196 15.683997
+v 39.208340 33.275642 15.683997
+v 33.649197 24.847656 9.179747
+v 33.649197 24.847656 9.972508
+v 30.308641 56.918587 25.736624
+v 24.971016 39.388004 15.683997
+v 22.032545 29.737062 9.179747
+v 22.032545 29.737062 9.966209
+v 25.946077 42.590435 15.683997
+v 25.946077 42.590435 17.595787
+v 26.074444 43.012035 17.595787
+v 25.951485 42.608196 15.677587
+v 30.598295 57.869907 25.724556
+v 30.598295 57.869907 29.739477
+v 31.304747 60.190136 25.724556
+v 31.304747 60.190136 29.739477
+v 28.678051 58.429585 29.739477
+v 28.678051 58.429585 25.724556
+v 29.384674 60.750374 25.724556
+v 29.384674 60.750374 29.739477
+v 28.388805 57.479603 25.736624
+v 24.029867 43.163357 15.677587
+v 24.153439 43.569210 17.595787
+v 24.025030 43.147472 15.683997
+v 24.025030 43.147472 17.595787
+v 23.049635 39.943943 15.683997
+v 20.109266 30.286772 9.179747
+v 20.109266 30.286772 9.964865
+v 1.000000 61.311420 25.736624
+v 1.000000 46.332970 15.684333
+v 1.000000 46.332970 17.595787
+v 1.000000 46.773708 17.595787
+v 1.000000 64.701927 29.739477
+v 1.000000 62.276440 25.724556
+v 1.000000 64.701927 25.724556
+v -1.000000 64.701927 29.739477
+v -1.000000 64.701927 25.724556
+v -1.000000 62.276440 25.724556
+v -1.000000 61.313591 25.736624
+v -1.000000 46.335480 15.685914
+v -1.000000 46.776207 17.595787
+v -1.000000 46.335480 17.595787
+v -14.948990 60.309059 25.736624
+v -28.405657 57.534943 25.736624
+v -29.384674 60.750374 25.724556
+v -29.384674 60.750374 29.739477
+v -28.678051 58.429585 25.724556
+v -24.041683 43.202168 15.703128
+v -24.170099 43.623928 17.595787
+v -24.041683 43.202168 17.595787
+v -31.304747 60.190136 29.739477
+v -25.963871 42.648880 17.595787
+v -25.963871 42.648880 15.704368
+v -26.092237 43.070480 17.595787
+v -30.326448 56.977074 25.736624
+v -30.598295 57.869907 25.724556
+v -31.304747 60.190136 25.724556
+v -49.356850 48.661369 25.736624
+v -51.201363 51.457760 25.724556
+v -51.201363 51.457760 29.739477
+v -49.864773 49.431408 25.724556
+v -41.100574 36.144379 15.711576
+v -41.343575 36.512783 17.595787
+v -41.100574 36.144379 17.595787
+v -52.901516 50.402973 29.739477
+v -42.810513 35.104427 17.595787
+v -42.810513 35.104427 15.711978
+v -43.053204 35.472363 17.595787
+v -51.058636 47.609058 25.736624
+v -51.565914 48.378124 25.724556
+v -52.901516 50.402973 25.724556
+v -59.720680 41.097324 25.736624
+v -64.813087 36.042236 25.736624
+v -69.494926 30.099840 25.736624
+v -72.286591 31.958647 25.724556
+v -72.286591 31.958647 29.739477
+v -70.267548 30.614283 25.724556
+v -57.026207 21.797644 15.707767
+v -57.393101 22.041937 17.595787
+v -57.026207 21.797644 17.595785
+v -73.391800 30.291756 29.739477
+v -58.128204 20.128613 17.595785
+v -58.128204 20.128613 15.706450
+v -58.495178 20.372959 17.595785
+v -70.598671 28.431973 25.736624
+v -71.372620 28.947300 25.724556
+v -73.391800 30.291756 25.724556
+v -74.887146 20.262024 25.736622
+v -77.822960 10.982238 25.736622
+v -78.985733 0.999999 25.736622
+v -82.374229 0.999999 25.724554
+v -82.374229 0.999999 29.739475
+v -79.948410 0.999999 25.724554
+v -64.004601 0.999999 15.686283
+v -64.445457 0.999999 17.595785
+v -64.004601 0.999999 17.595785
+v -82.374229 -1.000001 29.739475
+v -64.000885 -1.000001 17.595785
+v -64.000900 -1.000001 15.683977
+v -64.441788 -1.000001 17.595785
+v -78.983101 -1.000001 25.736622
+v -79.948410 -1.000001 25.724554
+v -82.374229 -1.000001 25.724554
+v -77.791946 -10.990336 25.736622
+v -74.835655 -20.252554 25.736622
+v -70.541771 -28.394091 25.736620
+v -55.284401 -18.235088 15.683994
+v -46.884941 -12.642374 9.179745
+v -46.884941 -12.642374 9.967790
+v -58.071842 -20.091084 15.683994
+v -58.071842 -20.091084 17.595785
+v -58.438789 -20.335413 17.595785
+v -58.090046 -20.103207 15.677584
+v -71.372620 -28.947304 25.724552
+v -71.372620 -28.947304 29.739473
+v -73.391800 -30.291759 29.739473
+v -73.391800 -30.291759 25.724552
+v -70.267548 -30.614286 29.739473
+v -70.267548 -30.614286 25.724552
+v -72.286591 -31.958651 25.724552
+v -72.286591 -31.958651 29.739473
+v -69.435486 -30.060266 25.736620
+v -56.986320 -21.771084 15.677584
+v -57.333290 -22.002111 17.595783
+v -56.966381 -21.757809 15.683994
+v -56.966381 -21.757809 17.595785
+v -54.179218 -19.901999 15.683994
+v -45.783604 -14.311845 9.179745
+v -45.783604 -14.311845 9.969531
+v -63.765499 -37.061539 25.736620
+v -57.553310 -42.824448 25.736620
+v -51.011665 -47.537853 25.736620
+v -40.920010 -32.238316 15.683994
+v -35.370396 -23.824778 9.179745
+v -35.370396 -23.824778 9.973001
+v -42.780453 -35.058853 15.677583
+v -42.763599 -35.033306 15.683993
+v -42.763599 -35.033306 17.595783
+v -43.006294 -35.401245 17.595783
+v -51.565914 -48.378124 25.724552
+v -51.565914 -48.378124 29.739473
+v -52.901516 -50.402973 25.724552
+v -52.901516 -50.402973 29.739473
+v -49.864773 -49.431408 29.739473
+v -51.201363 -51.457760 25.724552
+v -51.201363 -51.457760 29.739473
+v -49.864773 -49.431408 25.724552
+v -49.310341 -48.590862 25.736620
+v -41.070816 -36.099262 15.677583
+v -41.297276 -36.442589 17.595783
+v -41.054279 -36.074196 17.595783
+v -41.054279 -36.074196 15.683993
+v -39.208340 -33.275642 15.683993
+v -33.649197 -24.847656 9.179745
+v -33.649197 -24.847656 9.972507
+v -30.308641 -56.918587 25.736620
+v -24.971016 -39.388004 15.683993
+v -22.032545 -29.737062 9.179745
+v -22.032545 -29.737062 9.966208
+v -25.946077 -42.590435 15.683993
+v -25.946077 -42.590435 17.595783
+v -26.074444 -43.012035 17.595783
+v -25.951485 -42.608196 15.677583
+v -30.598295 -57.869907 25.724552
+v -30.598295 -57.869907 29.739473
+v -31.304747 -60.190136 29.739473
+v -31.304747 -60.190136 25.724552
+v -28.678051 -58.429585 29.739473
+v -28.678051 -58.429585 25.724552
+v -29.384674 -60.750374 25.724552
+v -29.384674 -60.750374 29.739473
+v -28.388805 -57.479603 25.736620
+v -24.029867 -43.163357 15.677583
+v -24.153439 -43.569210 17.595783
+v -23.049635 -39.943943 15.683993
+v -20.109266 -30.286772 9.179745
+v -20.109266 -30.286772 9.964863
+v -1.000000 -61.311420 25.736620
+v -1.000000 -64.701927 25.724552
+v -1.000000 -64.701927 29.739473
+v -1.000000 -62.276440 25.724552
+v -1.000000 -46.773708 17.595783
+v 1.000000 -64.701927 29.739473
+v 1.000000 -46.776207 17.595783
+v 1.000000 -61.313591 25.736620
+v 1.000000 -62.276440 25.724552
+v 1.000000 -64.701927 25.724552
+v 15.107149 -60.287189 25.736620
+v 28.405657 -57.534943 25.736620
+v 29.384674 -60.750374 25.724552
+v 29.384674 -60.750374 29.739473
+v 28.678051 -58.429585 25.724552
+v 24.170099 -43.623928 17.595783
+v 31.304747 -60.190136 29.739473
+v 26.092237 -43.070480 17.595783
+v 30.326448 -56.977074 25.736620
+v 30.598295 -57.869907 25.724552
+v 31.304747 -60.190136 25.724552
+v 49.356850 -48.661369 25.736620
+v 51.201363 -51.457760 25.724552
+v 51.201363 -51.457760 29.739473
+v 49.864773 -49.431408 25.724552
+v 41.343575 -36.512783 17.595783
+v 52.901516 -50.402973 29.739473
+v 43.053204 -35.472363 17.595783
+v 51.058636 -47.609058 25.736620
+v 51.565914 -48.378124 25.724552
+v 52.901516 -50.402973 25.724552
+v 59.720680 -41.097324 25.736620
+v 64.813087 -36.042236 25.736620
+v 69.494926 -30.099844 25.736620
+v 72.286591 -31.958651 25.724552
+v 72.286591 -31.958651 29.739473
+v 70.267548 -30.614286 25.724552
+v 57.393101 -22.041937 17.595783
+v 73.391800 -30.291759 29.739473
+v 71.372620 -28.947304 25.724552
+v 73.391800 -30.291759 25.724552
+v 78.999191 12.357826 32.582039
+v 80.476402 -0.405435 32.582039
+v 74.796082 23.886509 32.582039
+v 68.731689 33.535332 32.582039
+v 61.598881 41.285088 32.582039
+v 51.241322 49.147095 32.582043
+v 38.982700 55.406998 32.582043
+v 22.030628 60.554649 32.582043
+v 2.466806 62.770454 32.582043
+v -14.017264 61.928276 32.582043
+v -33.334686 57.578072 32.582043
+v -48.977470 50.605335 32.582043
+v -62.354191 40.694855 32.582039
+v -71.898109 29.152704 32.582039
+v -77.676933 17.077860 32.582039
+v -80.289703 4.518545 32.582039
+v -79.778465 -8.503142 32.582039
+v -76.292152 -20.615774 32.582039
+v -70.634094 -30.934900 32.582039
+v -63.682091 -39.280312 32.582039
+v -56.033443 -45.882370 32.582035
+v -45.261665 -52.527096 32.582035
+v -32.672810 -57.728386 32.582035
+v -15.371929 -61.715229 32.582035
+v 1.099217 -62.796089 32.582035
+v 20.863731 -60.834099 32.582035
+v 42.482929 -53.963871 32.582035
+v 57.671482 -44.739731 32.582035
+v 69.022781 -33.280212 32.582039
+v 75.879036 -21.707813 32.582039
+v 79.231567 -11.484066 32.582039
+v 77.077438 -19.722128 23.000000
+v 76.311165 -21.569515 23.000000
+v 71.801460 -17.524426 19.799999
+v 71.035507 -19.371946 19.799999
+v 49.914875 -30.362774 17.595783
+v 53.845966 -26.497295 17.595783
+v -1.000000 -46.332436 15.683993
+v -1.000000 -42.985149 15.683993
+v 23.066235 -39.998459 15.683993
+v 1.000000 -42.987751 15.683993
+v 1.000000 -46.332436 15.683993
+v 24.032831 -43.173100 15.683993
+v 24.988806 -39.446434 15.683993
+v 25.954449 -42.617935 15.683993
+v 39.254566 -33.345722 15.683993
+v 41.076427 -36.107769 15.683993
+v 47.359585 -27.564960 15.683994
+v 40.966904 -32.309410 15.683994
+v 42.786045 -35.067333 15.683993
+v 50.987991 -24.009480 15.683994
+v 54.239170 -19.941916 15.683994
+v 56.994781 -21.776718 15.683994
+v 58.055904 -13.012317 15.683994
+v 55.340588 -18.272499 15.683994
+v 58.098518 -20.108847 15.683994
+v 59.894676 -7.187027 15.683995
+v 64.000969 -1.000001 15.683995
+v 60.655788 -1.000001 15.683995
+v 64.013649 -0.279087 15.683995
+v 59.865952 7.182704 15.683995
+v 60.651699 0.999999 15.683995
+v 58.009041 12.993005 15.683996
+v 76.311165 21.569511 23.000000
+v 77.077438 19.722124 23.000000
+v 71.035507 19.371946 19.799999
+v 71.801460 17.524426 19.799999
+v 50.550041 0.000000 9.948984
+v 47.442719 -0.151908 8.187897
+v 50.549366 -0.175751 9.948690
+v 50.528202 1.000000 9.950654
+v 47.324127 2.099144 8.187897
+v 46.929474 7.164032 8.630000
+v 45.275734 6.945769 7.708742
+v 46.473400 2.099144 7.708741
+v 46.162800 9.011250 8.630000
+v 42.940704 11.410934 7.708742
+v 52.911724 9.655929 12.300000
+v 52.144428 11.502889 12.300001
+v 39.662056 15.387015 7.708742
+v 38.975094 18.249390 8.630001
+v 35.599216 18.855045 7.708742
+v 37.423893 19.517763 8.630001
+v 43.374645 23.004610 12.300001
+v 41.836136 24.286695 12.300001
+v 50.231861 24.701380 15.683996
+v 29.164558 22.697313 7.708742
+v 28.334963 24.880903 8.630001
+v 45.770397 28.785690 15.683996
+v 26.494911 25.666452 8.630001
+v 20.804350 25.947315 7.708742
+v 31.036251 30.766054 12.300001
+v 29.198563 31.556749 12.300001
+v 13.758842 27.655338 7.708743
+v 6.374107 28.648712 7.708743
+v 9.208792 29.993793 8.630001
+v 7.219922 30.205467 8.630001
+v 6.374107 29.497082 8.187898
+v 9.959172 36.425472 12.300002
+v 1.000000 32.866898 9.949746
+v 7.970483 36.638699 12.300002
+v -7.222428 30.226952 8.630001
+v -6.374107 28.668283 7.708743
+v -6.374107 29.516443 8.187898
+v -1.000000 32.866898 9.948089
+v -9.211977 30.021097 8.630001
+v 1.000000 42.985149 15.683997
+v -7.973040 36.660610 12.300002
+v -1.000000 42.987751 15.683997
+v -9.962355 36.452751 12.300002
+v -20.109266 30.286772 9.932963
+v -23.357828 25.185738 7.708742
+v -22.032545 29.737062 9.931618
+v -26.525383 25.732840 8.630001
+v -28.366938 24.950567 8.630001
+v -31.042089 21.821156 7.708742
+v -23.066235 39.998459 15.683997
+v -29.229242 31.623592 12.300001
+v -24.988806 39.446434 15.683997
+v -33.649197 24.847656 9.925321
+v -31.068266 30.835802 12.300001
+v -35.370396 23.824778 9.924828
+v -37.482746 19.581373 8.630001
+v -37.566841 17.426657 7.708742
+v -39.033222 18.312220 8.630001
+v -39.254566 33.345722 15.683997
+v -41.894859 24.350168 12.300001
+v -42.521404 12.141399 7.708742
+v -40.966904 32.309410 15.683996
+v -45.783604 14.311845 9.928354
+v -43.432686 23.067341 12.300001
+v -46.884941 12.642374 9.930110
+v -46.213615 9.032418 8.630000
+v -45.247829 7.149982 7.708742
+v -47.359585 27.564960 15.683996
+v -46.971027 7.181341 8.630000
+v -46.035576 4.663168 7.708741
+v -50.987991 24.009480 15.683996
+v -52.194347 11.523685 12.300001
+v -47.338470 2.099144 8.187897
+v -46.488384 2.099144 7.708741
+v -54.239170 19.941916 15.683996
+v -50.528202 1.000000 9.947313
+v -52.954441 9.673723 12.300000
+v -47.324127 -2.099144 8.187897
+v -50.528202 -1.000000 9.950654
+v -58.055904 13.012315 15.683996
+v -55.340588 18.272499 15.683996
+v -59.894676 7.187027 15.683995
+v -46.929474 -7.164032 8.630000
+v -45.275734 -6.945770 7.708741
+v -46.473400 -2.099144 7.708741
+v -46.162800 -9.011250 8.630000
+v -60.655788 0.999999 15.683995
+v -42.940704 -11.410934 7.708741
+v -52.911724 -9.655931 12.300000
+v -52.144428 -11.502891 12.299999
+v -59.865952 -7.182705 15.683995
+v -60.651699 -1.000001 15.683995
+v -39.662056 -15.387015 7.708741
+v -58.009041 -12.993007 15.683994
+v -38.975094 -18.249390 8.629999
+v -35.599216 -18.855045 7.708740
+v -37.423893 -19.517763 8.629999
+v -43.374645 -23.004610 12.299999
+v -41.836136 -24.286695 12.299999
+v -50.231861 -24.701380 15.683994
+v -29.164558 -22.697313 7.708740
+v -28.334963 -24.880903 8.629999
+v -45.770397 -28.785690 15.683994
+v -26.494911 -25.666452 8.629999
+v -20.804350 -25.947315 7.708740
+v -31.036251 -30.766054 12.299999
+v -29.198563 -31.556749 12.299999
+v -13.758842 -27.655338 7.708740
+v -6.374107 -28.648712 7.708740
+v -9.208792 -29.993793 8.629999
+v -7.219922 -30.205467 8.629999
+v -6.374107 -29.497082 8.187896
+v -9.959172 -36.425472 12.299998
+v -1.000000 -32.866898 9.949742
+v -7.970483 -36.638699 12.299998
+v 7.222428 -30.226952 8.629999
+v 6.374107 -28.668283 7.708740
+v 6.374107 -29.516443 8.187896
+v 1.000000 -32.866898 9.948085
+v 9.211977 -30.021097 8.629999
+v 7.973040 -36.660610 12.299998
+v 9.962355 -36.452751 12.299998
+v 20.109266 -30.286772 9.932961
+v 23.357828 -25.185738 7.708740
+v 22.032545 -29.737062 9.931616
+v 26.525383 -25.732840 8.629999
+v 28.366938 -24.950567 8.629999
+v 31.042089 -21.821156 7.708740
+v 29.229242 -31.623592 12.299999
+v 33.649197 -24.847656 9.925319
+v 31.068266 -30.835802 12.299999
+v 35.370396 -23.824778 9.924826
+v 37.482746 -19.581373 8.629999
+v 37.566841 -17.426657 7.708740
+v 39.033222 -18.312220 8.629999
+v 41.894859 -24.350168 12.299999
+v 42.521404 -12.141399 7.708741
+v 45.783604 -14.311845 9.928352
+v 43.432686 -23.067341 12.299999
+v 46.884941 -12.642374 9.930108
+v 46.213615 -9.032418 8.630000
+v 45.247829 -7.149983 7.708741
+v 46.971027 -7.181342 8.630000
+v 46.035576 -4.663169 7.708741
+v 52.194347 -11.523686 12.299999
+v 47.338470 -2.099144 8.187897
+v 46.488384 -2.099144 7.708741
+v 50.528202 -1.000000 9.947313
+v 52.954441 -9.673725 12.300000
+v 52.704353 26.959343 15.683996
+v 47.923073 31.350286 15.683996
+v 52.704353 26.959343 17.595787
+v 47.923073 31.350286 17.595787
+v 53.029804 27.256676 17.595787
+v 48.206440 31.687916 17.595787
+v 52.677967 33.060020 19.800001
+v 51.156792 34.360844 19.800001
+v 56.559361 37.255188 23.000002
+v 55.043163 38.561394 23.000002
+v 34.915302 44.011501 19.800001
+v 36.749325 43.212811 19.800001
+v 39.133057 48.406124 23.000002
+v 37.300201 49.207352 23.000002
+v 1.000000 46.332436 15.683997
+v -23.208813 43.426075 15.683997
+v -1.000000 46.332436 15.683997
+v -24.032831 43.173100 15.683997
+v -25.954449 42.617935 15.683997
+v -36.203659 38.728451 15.683997
+v -41.076427 36.107769 15.683997
+v -48.036201 31.369669 15.683996
+v -42.786045 35.067333 15.683997
+v -55.955837 23.269285 15.683996
+v -56.994781 21.776718 15.683996
+v -58.098518 20.108847 15.683996
+v -61.031708 14.571653 15.683996
+v -63.343071 7.041553 15.683995
+v -64.000969 0.999999 15.683995
+v 0.429030 46.337963 15.683997
+v -49.617649 30.037235 17.595787
+v -53.513515 26.207851 17.595787
+v -61.131332 14.335051 17.595785
+v -63.170067 7.879019 17.595785
+v 11.546195 50.028210 19.800001
+v 9.557811 50.244038 19.800001
+v 12.208372 55.703873 23.000002
+v 10.220090 55.920589 23.000002
+v -11.549373 50.055447 19.800001
+v -9.560451 50.266670 19.800001
+v -10.222758 55.943462 23.000002
+v -12.211548 55.731098 23.000002
+v -34.946301 44.079037 19.800001
+v -36.781395 43.282684 19.800001
+v -37.331303 49.275105 23.000002
+v -39.165150 48.476036 23.000002
+v -51.215298 34.424080 19.800001
+v -49.914875 30.362774 17.595787
+v -52.735878 33.122612 19.800001
+v -53.845966 26.497295 17.595787
+v -55.101597 38.624554 23.000002
+v -56.617233 37.317741 23.000002
+v -64.840141 16.791273 19.799999
+v -61.536156 14.509324 17.595785
+v -65.603142 14.942524 19.799999
+v -63.601284 7.970111 17.595785
+v -70.115913 18.988886 23.000000
+v -70.879631 17.140438 23.000000
+v -65.559143 -14.924198 19.799999
+v -61.488392 -14.491860 17.595785
+v -63.572159 -7.968174 17.595785
+v -64.791237 -16.770905 19.799999
+v -70.835320 -17.121983 23.000000
+v -70.067268 -18.968630 23.000000
+v -63.140995 -7.876790 17.595785
+v -61.083679 -14.317355 17.595785
+v -63.140995 -7.876789 15.683995
+v -61.083679 -14.317354 15.683994
+v -52.704353 -26.959343 15.683994
+v -47.923073 -31.350286 15.683994
+v -52.704353 -26.959343 17.595783
+v -47.923073 -31.350286 17.595783
+v -53.029804 -27.256676 17.595783
+v -48.206440 -31.687916 17.595783
+v -52.677967 -33.060020 19.799997
+v -51.156792 -34.360844 19.799997
+v -56.559361 -37.255188 22.999998
+v -55.043163 -38.561394 22.999998
+v -34.915302 -44.011501 19.799997
+v -36.749325 -43.212811 19.799997
+v -39.133057 -48.406124 22.999998
+v -37.300201 -49.207352 22.999998
+v -11.546195 -50.028210 19.799997
+v -9.557811 -50.244038 19.799997
+v -12.208372 -55.703873 22.999998
+v -10.220090 -55.920589 22.999998
+v 11.549373 -50.055447 19.799997
+v 9.560451 -50.266670 19.799997
+v 10.222758 -55.943462 22.999998
+v 12.211548 -55.731098 22.999998
+v 34.946301 -44.079037 19.799997
+v 36.781395 -43.282684 19.799997
+v 37.331303 -49.275105 22.999998
+v 39.165150 -48.476036 22.999998
+v 51.215298 -34.424080 19.799997
+v 52.735878 -33.122612 19.799997
+v 55.101597 -38.624554 22.999998
+v 56.617233 -37.317741 22.999998
+v 78.999191 12.357826 31.659950
+v 80.476402 -0.405435 31.659950
+v 74.796082 23.886509 31.659952
+v 68.731689 33.535332 31.659952
+v 61.598881 41.285088 31.659952
+v 51.241322 49.147095 31.659952
+v 38.982700 55.406998 31.659952
+v 22.030628 60.554649 31.659952
+v 2.466806 62.770454 31.659952
+v -14.017264 61.928276 31.659952
+v -33.334686 57.578072 31.659952
+v -48.977470 50.605335 31.659952
+v -62.354191 40.694855 31.659952
+v -71.898109 29.152704 31.659952
+v -77.676933 17.077860 31.659950
+v -80.289703 4.518545 31.659950
+v -79.778465 -8.503142 31.659950
+v -76.292152 -20.615774 31.659950
+v -70.634094 -30.934900 31.659948
+v -63.682091 -39.280312 31.659948
+v -56.033443 -45.882370 31.659948
+v -45.261665 -52.527096 31.659948
+v -32.672810 -57.728386 31.659948
+v -15.371929 -61.715229 31.659948
+v 1.099217 -62.796089 31.659948
+v 20.863731 -60.834099 31.659948
+v 42.482929 -53.963871 31.659948
+v 57.671482 -44.739731 31.659948
+v 69.022781 -33.280212 31.659948
+v 75.879036 -21.707813 31.659950
+v 79.231567 -11.484066 31.659950
+v 64.014717 -0.000001 15.683995
+v 50.528202 -1.000000 9.179746
+v 63.990784 -1.000001 15.677585
+v 64.004539 -0.000001 15.677585
+v -1.000000 -46.322258 15.677583
+v -1.000000 -32.866898 9.179744
+v 1.000000 -46.322258 15.677583
+v 1.000000 -32.866898 9.179744
+v 24.029867 -43.163357 15.677583
+v 20.109266 -30.286772 9.179745
+v 25.951485 -42.608196 15.677583
+v 22.032545 -29.737062 9.179745
+v 41.070816 -36.099262 15.677583
+v 33.649197 -24.847656 9.179745
+v 42.780453 -35.058853 15.677583
+v 35.370396 -23.824778 9.179745
+v 56.986320 -21.771084 15.677584
+v 45.783604 -14.311845 9.179745
+v 58.090046 -20.103207 15.677584
+v 46.884941 -12.642374 9.179745
+v 63.990784 0.999999 15.677585
+v 50.528202 1.000000 9.179746
+v 45.275734 6.945769 7.103746
+v 46.473400 2.099144 7.103746
+v 42.940704 11.410934 7.103746
+v 39.662056 15.387015 7.103746
+v 35.599216 18.855045 7.103747
+v 29.164558 22.697313 7.103747
+v 20.804350 25.947315 7.103747
+v 13.758842 27.655338 7.103747
+v 6.374107 28.648712 7.103747
+v 6.374107 36.212177 8.187899
+v 6.374107 31.083874 5.290061
+v 6.374107 27.514692 5.786510
+v 6.374107 27.514692 7.103747
+v 6.374107 31.083874 1.000001
+v 6.374107 22.718256 6.630103
+v 6.374107 22.718237 5.786509
+v 6.374107 22.142164 6.384269
+v 6.374107 24.506704 1.000001
+v 6.374107 21.906952 1.000001
+v -6.374107 36.212177 8.187899
+v -6.374107 31.083874 5.290061
+v -6.374107 28.668283 7.103747
+v -6.374107 27.534555 5.786510
+v -6.374107 27.534555 7.103747
+v -6.374107 31.083874 1.000001
+v -6.374107 22.739426 5.786509
+v -6.374107 22.739445 6.630103
+v -6.374107 22.163525 6.384269
+v -6.374107 24.444582 1.000001
+v -6.374107 21.928383 1.000001
+v -23.357828 25.185738 7.103747
+v -31.042089 21.821156 7.103747
+v -37.566841 17.426657 7.103747
+v -42.521404 12.141399 7.103746
+v -45.247829 7.149982 7.103746
+v -46.035576 4.663168 7.103746
+v -46.488384 2.099144 7.103746
+v -54.044556 2.099144 8.187897
+v -48.911640 2.099144 5.290060
+v -45.351452 2.099144 5.786508
+v -45.351452 2.099144 7.103746
+v -48.911640 2.099144 1.000000
+v -40.531025 2.099144 6.630102
+v -40.531021 2.099144 5.786508
+v -39.950077 2.099144 6.384268
+v -42.427719 2.099144 1.000000
+v -39.712696 2.099144 1.000000
+v -54.044556 -2.099144 8.187897
+v -48.911640 -2.099144 5.290060
+v -46.473400 -2.099144 7.103746
+v -45.335510 -2.099144 5.786508
+v -45.335510 -2.099144 7.103746
+v -48.911640 -2.099144 1.000000
+v -40.509274 -2.099144 5.786508
+v -40.509281 -2.099144 6.630102
+v -39.927341 -2.099144 6.384268
+v -42.488342 -2.099144 1.000000
+v -39.689533 -2.099144 1.000000
+v -45.275734 -6.945770 7.103745
+v -42.940704 -11.410934 7.103745
+v -39.662056 -15.387015 7.103745
+v -35.599216 -18.855045 7.103745
+v -29.164558 -22.697313 7.103745
+v -20.804350 -25.947315 7.103745
+v -13.758842 -27.655338 7.103745
+v -6.374107 -28.648712 7.103745
+v -6.374107 -36.212177 8.187895
+v -6.374107 -31.083874 5.290059
+v -6.374107 -27.514692 5.786507
+v -6.374107 -27.514692 7.103745
+v -6.374107 -31.083874 0.999999
+v -6.374107 -22.718256 6.630101
+v -6.374107 -22.718237 5.786507
+v -6.374107 -22.142164 6.384267
+v -6.374107 -24.506704 0.999999
+v -6.374107 -21.906952 0.999999
+v 6.374107 -36.212177 8.187895
+v 6.374107 -22.163525 6.384267
+v 6.374107 -22.739426 5.786507
+v 6.374107 -22.739445 6.630101
+v 6.374107 -21.928383 0.999999
+v 6.374107 -28.668283 7.103745
+v 6.374107 -27.534555 7.103745
+v 6.374107 -27.534555 5.786507
+v 6.374107 -24.444582 0.999999
+v 6.374107 -31.083874 5.290059
+v 6.374107 -31.083874 0.999999
+v 23.357828 -25.185738 7.103745
+v 31.042089 -21.821156 7.103745
+v 37.566841 -17.426657 7.103745
+v 42.521404 -12.141399 7.103745
+v 45.247829 -7.149983 7.103745
+v 46.035576 -4.663169 7.103746
+v 46.488384 -2.099144 7.103746
+v 54.044556 -2.099144 8.187897
+v 48.911640 -2.099144 5.290060
+v 45.351452 -2.099144 5.786508
+v 45.351452 -2.099144 7.103746
+v 48.911640 -2.099144 1.000000
+v 40.531025 -2.099144 6.630102
+v 40.531021 -2.099144 5.786508
+v 39.950077 -2.099144 6.384268
+v 42.427719 -2.099144 1.000000
+v 39.712696 -2.099144 1.000000
+v 54.127850 0.000000 8.187897
+v 54.044556 2.099144 8.187897
+v 50.550041 0.000000 9.179746
+v -50.528202 -1.000000 9.179746
+v -63.990784 -1.000001 15.677585
+v -50.528202 1.000000 9.179746
+v -63.990784 0.999999 15.677585
+v -46.884941 12.642374 9.179747
+v -58.090046 20.103207 15.677586
+v -45.783604 14.311845 9.179747
+v -56.986320 21.771084 15.677586
+v -35.370396 23.824778 9.179747
+v -42.780453 35.058853 15.677587
+v -33.649197 24.847656 9.179747
+v -41.070816 36.099262 15.677587
+v -22.032545 29.737062 9.179747
+v -25.951485 42.608196 15.677587
+v -20.109266 30.286772 9.179747
+v -24.029867 43.163357 15.677587
+v -1.000000 46.322258 15.677587
+v -1.000000 32.866898 9.179748
+v 1.000000 32.866898 9.179748
+v 1.000000 46.322258 15.677587
+v 48.911640 2.099144 5.290060
+v 45.335510 2.099144 5.786508
+v 45.335510 2.099144 7.103746
+v 48.911640 2.099144 1.000000
+v 40.509274 2.099144 5.786508
+v 40.509281 2.099144 6.630102
+v 39.927341 2.099144 6.384268
+v 42.488342 2.099144 1.000000
+v 39.689533 2.099144 1.000000
+v 32.004711 37.670349 12.300002
+v 33.841022 36.876652 12.300002
+v 29.301424 31.780851 8.630001
+v 31.139711 30.991455 8.630001
+v 58.342892 14.084851 12.300001
+v 59.107624 12.236825 12.300001
+v 52.363052 11.593959 8.630001
+v 53.126793 9.745517 8.630000
+v 46.416553 29.237398 12.300001
+v 47.945076 27.944519 12.300001
+v 42.008270 24.472746 8.630001
+v 43.546093 23.189917 8.630001
+v 8.746624 43.291180 12.300002
+v 10.735443 43.079067 12.300002
+v 7.996061 36.857937 8.630002
+v 9.985057 36.647339 8.630002
+v -10.735443 43.079067 12.300002
+v -8.746624 43.291180 12.300002
+v -9.985057 36.647339 8.630002
+v -7.996061 36.857937 8.630002
+v -33.841022 36.876652 12.300002
+v -32.004711 37.670349 12.300002
+v -31.139711 30.991455 8.630001
+v -29.301424 31.780851 8.630001
+v -47.945076 27.944519 12.300001
+v -46.416553 29.237398 12.300001
+v -43.546093 23.189917 8.630001
+v -42.008270 24.472746 8.630001
+v -59.107624 12.236825 12.300001
+v -58.342892 14.084851 12.300001
+v -53.126793 9.745517 8.630000
+v -52.363052 11.593959 8.630001
+v 8.746624 -43.291180 12.299998
+v 10.735443 -43.079067 12.299998
+v 9.985057 -36.647339 8.629998
+v 7.996061 -36.857937 8.629998
+v -59.107624 -12.236827 12.299999
+v -58.342892 -14.084853 12.299999
+v -52.363052 -11.593959 8.629999
+v -53.126793 -9.745517 8.630000
+v -46.416553 -29.237398 12.299999
+v -47.945076 -27.944519 12.299999
+v -42.008270 -24.472746 8.629999
+v -43.546093 -23.189917 8.629999
+v -32.004711 -37.670349 12.299998
+v -33.841022 -36.876652 12.299998
+v -29.301424 -31.780851 8.629999
+v -31.139711 -30.991455 8.629999
+v -8.746624 -43.291180 12.299998
+v -10.735443 -43.079067 12.299998
+v -7.996061 -36.857937 8.629998
+v -9.985057 -36.647339 8.629998
+v 32.004711 -37.670349 12.299998
+v 33.841022 -36.876652 12.299998
+v 31.139711 -30.991455 8.629999
+v 29.301424 -31.780851 8.629999
+v 46.416553 -29.237398 12.299999
+v 47.945076 -27.944519 12.299999
+v 43.546093 -23.189917 8.629999
+v 42.008270 -24.472746 8.629999
+v 59.107624 -12.236827 12.299999
+v 58.342892 -14.084853 12.299999
+v 53.126793 -9.745517 8.630000
+v 52.363052 -11.593959 8.629999
+v 59.652828 43.543709 23.000002
+v 61.163960 42.232029 23.000002
+v 55.767601 39.344398 19.800001
+v 57.282722 38.037029 19.800001
+v 40.127220 55.366425 23.000002
+v 41.959351 54.563618 23.000002
+v 37.742451 50.170856 19.800001
+v 39.575603 49.370277 19.800001
+v 11.002208 62.624298 23.000002
+v 12.990620 62.408703 23.000002
+v 10.339925 56.947720 19.800001
+v 12.328441 56.733009 19.800001
+v -12.990620 62.408703 23.000002
+v -11.002208 62.624298 23.000002
+v -12.328441 56.733009 19.800001
+v -10.339925 56.947720 19.800001
+v -41.959351 54.563618 23.000002
+v -40.127220 55.366425 23.000002
+v -39.575603 49.370277 19.800001
+v -37.742451 50.170856 19.800001
+v -61.163960 42.232029 23.000002
+v -59.652828 43.543709 23.000002
+v -57.282722 38.037029 19.800001
+v -55.767601 39.344398 19.800001
+v -77.077438 19.722124 23.000000
+v -76.311165 21.569511 23.000000
+v -71.801460 17.524426 19.799999
+v -71.035507 19.371946 19.799999
+v -77.077438 -19.722128 23.000000
+v -76.311165 -21.569515 23.000000
+v -71.035507 -19.371946 19.799999
+v -71.801460 -17.524426 19.799999
+v -59.652828 -43.543709 22.999998
+v -61.163960 -42.232029 22.999998
+v -55.767601 -39.344398 19.799997
+v -57.282722 -38.037029 19.799997
+v -40.127220 -55.366425 22.999998
+v -41.959351 -54.563618 22.999998
+v -37.742451 -50.170856 19.799997
+v -39.575603 -49.370277 19.799997
+v -11.002208 -62.624298 22.999998
+v -12.990620 -62.408703 22.999998
+v -10.339925 -56.947720 19.799997
+v -12.328441 -56.733009 19.799997
+v 11.002208 -62.624298 22.999998
+v 12.990620 -62.408703 22.999998
+v 12.328441 -56.733009 19.799997
+v 10.339925 -56.947720 19.799997
+v 40.127220 -55.366425 22.999998
+v 41.959351 -54.563618 22.999998
+v 39.575603 -49.370277 19.799997
+v 37.742451 -50.170856 19.799997
+v 59.652828 -43.543709 22.999998
+v 61.163960 -42.232029 22.999998
+v 57.282722 -38.037029 19.799997
+v 55.767601 -39.344398 19.799997
+v 79.503716 12.416275 31.659950
+v 80.980614 -0.409305 31.659950
+v 75.298401 24.008486 31.659952
+v 69.227028 33.718807 31.659952
+v 62.083855 41.523605 31.659952
+v 51.713078 49.446342 31.659952
+v 39.446594 55.761002 31.659952
+v 22.496660 60.972164 31.659952
+v 2.941637 63.262867 31.659952
+v -13.620163 62.485855 31.659952
+v -32.955814 58.234081 31.659952
+v -48.712666 51.337513 31.659952
+v -63.580975 40.210079 31.659952
+v -73.002693 28.326180 31.659952
+v -78.683571 15.582288 31.659950
+v -80.944695 2.054209 31.659950
+v -79.671638 -11.693501 31.659950
+v -75.247223 -24.111717 31.659948
+v -68.703247 -34.389473 31.659948
+v -60.989304 -42.514771 31.659948
+v -52.672276 -48.832161 31.659948
+v -41.076935 -55.065468 31.659948
+v -27.590693 -59.758179 31.659948
+v -9.132391 -62.922104 31.659948
+v 7.442807 -63.065224 31.659948
+v 23.082085 -60.895008 31.659948
+v 38.386791 -56.270523 31.659948
+v 53.155712 -48.617519 31.659948
+v 65.589973 -38.139751 31.659948
+v 74.195602 -26.254148 31.659948
+v 79.084923 -14.185026 31.659950
+v 80.474358 -7.409305 31.659950
+v 44.181484 6.642398 7.103746
+v 41.952591 10.855276 7.103746
+v 38.811039 14.640248 7.103746
+v 34.894848 17.970165 7.103747
+v 28.653446 21.689413 7.103747
+v 20.501358 24.858446 7.103747
+v 13.609652 26.533669 7.103747
+v -3.196056 24.668844 1.000001
+v 0.000000 24.754141 1.000001
+v 3.196056 24.699993 1.000001
+v 38.972836 5.236902 6.384268
+v 38.659599 5.363924 1.000000
+v 37.222637 8.283062 6.384268
+v 36.912582 8.311285 1.000000
+v 34.703949 11.174221 6.384268
+v 34.656689 10.893427 1.000000
+v 31.463432 13.845942 6.384268
+v 31.125479 13.797391 1.000001
+v 26.134790 16.963388 6.384269
+v 25.152277 17.165751 1.000001
+v 18.992676 19.723808 6.384269
+v 17.897518 19.800514 1.000001
+v 12.862669 21.228418 6.384269
+v 12.184310 21.116661 1.000001
+v 39.534222 5.384144 6.630102
+v 37.735363 8.552365 6.630103
+v 35.152782 11.538116 6.630103
+v 31.841761 14.280818 6.630103
+v 26.415630 17.464825 6.630103
+v 19.162550 20.271753 6.630103
+v 12.947220 21.796318 6.630103
+v 39.534206 5.384128 5.786508
+v 37.735359 8.552373 5.786509
+v 35.152790 11.538136 5.786509
+v 31.841755 14.280814 5.786509
+v 26.415625 17.464813 5.786509
+v 19.162565 20.271770 5.786509
+v 12.947221 21.796307 5.786509
+v 44.181484 6.642398 5.786509
+v 41.952591 10.855276 5.786509
+v 38.811039 14.640248 5.786509
+v 34.894848 17.970165 5.786509
+v 28.653446 21.689413 5.786509
+v 20.501358 24.858446 5.786509
+v 13.609652 26.533669 5.786509
+v -19.852297 19.276220 1.000001
+v -21.218451 19.067507 6.384269
+v -29.971397 14.667997 1.000001
+v -30.896194 14.343083 6.384268
+v -34.079540 11.555571 1.000000
+v -36.102840 9.820512 6.384268
+v -36.701973 8.716331 1.000000
+v -38.646347 6.065288 6.384268
+v -38.615208 5.590904 1.000000
+v -39.459591 4.096210 6.384268
+v -39.282566 3.882123 1.000000
+v -21.418491 19.605312 6.630103
+v -31.259190 14.790142 6.630103
+v -36.141037 10.639594 6.630103
+v -38.920113 6.782767 6.630103
+v -39.940399 4.466063 6.630102
+v -21.418503 19.605328 5.786509
+v -31.259182 14.790133 5.786509
+v -36.141045 10.639614 5.786509
+v -38.920101 6.782755 5.786509
+v -39.940384 4.466045 5.786508
+v -22.999201 24.114107 5.786509
+v -30.492594 20.833721 5.786509
+v -36.814110 16.583220 5.786509
+v -41.566475 11.533975 5.786509
+v -44.163933 6.819064 5.786509
+v -44.913494 4.492453 5.786508
+v -22.999201 24.114107 7.103747
+v -30.492594 20.833721 7.103747
+v -36.814110 16.583220 7.103747
+v -41.566475 11.533975 7.103746
+v -44.163933 6.819064 7.103746
+v -44.913494 4.492453 7.103746
+v -42.588291 -1.050518 1.000000
+v -42.611507 0.000000 1.000000
+v -42.557953 1.050518 1.000000
+v -39.840469 -0.937382 1.000000
+v -39.880630 0.233429 1.000000
+v -38.972836 -5.236903 6.384268
+v -38.659824 -5.363429 1.000000
+v -37.222637 -8.283062 6.384267
+v -36.912907 -8.310843 1.000000
+v -34.703949 -11.174221 6.384267
+v -34.657043 -10.893082 1.000000
+v -31.463432 -13.845942 6.384267
+v -31.125824 -13.797151 0.999999
+v -26.134790 -16.963388 6.384267
+v -25.152561 -17.165621 0.999999
+v -18.992676 -19.723808 6.384267
+v -17.897699 -19.800463 0.999999
+v -12.862669 -21.228418 6.384267
+v -12.184402 -21.116644 0.999999
+v -39.534222 -5.384145 6.630102
+v -37.735363 -8.552365 6.630102
+v -35.152782 -11.538116 6.630102
+v -31.841761 -14.280818 6.630102
+v -26.415630 -17.464825 6.630101
+v -19.162550 -20.271753 6.630101
+v -12.947220 -21.796318 6.630101
+v -39.534206 -5.384129 5.786508
+v -37.735359 -8.552373 5.786508
+v -35.152790 -11.538136 5.786508
+v -31.841755 -14.280814 5.786508
+v -26.415625 -17.464813 5.786507
+v -19.162565 -20.271770 5.786507
+v -12.947221 -21.796307 5.786507
+v -44.181484 -6.642399 5.786508
+v -41.952591 -10.855276 5.786508
+v -38.811039 -14.640248 5.786508
+v -34.894848 -17.970165 5.786507
+v -28.653446 -21.689413 5.786507
+v -20.501358 -24.858446 5.786507
+v -13.609652 -26.533669 5.786507
+v -44.181484 -6.642399 7.103745
+v -41.952591 -10.855276 7.103745
+v -38.811039 -14.640248 7.103745
+v -34.894848 -17.970165 7.103745
+v -28.653446 -21.689413 7.103745
+v -20.501358 -24.858446 7.103745
+v -13.609652 -26.533669 7.103745
+v -3.196056 -24.699993 0.999999
+v 0.000000 -24.754141 0.999999
+v 3.196056 -24.668844 0.999999
+v 22.999201 -24.114107 7.103745
+v 30.492594 -20.833721 7.103745
+v 36.814110 -16.583220 7.103745
+v 41.566475 -11.533975 7.103745
+v 44.163933 -6.819065 7.103745
+v 44.913494 -4.492454 7.103746
+v 22.999201 -24.114107 5.786507
+v 30.492594 -20.833721 5.786507
+v 36.814110 -16.583220 5.786507
+v 41.566475 -11.533975 5.786508
+v 44.163933 -6.819065 5.786508
+v 44.913494 -4.492454 5.786508
+v 21.418503 -19.605328 5.786507
+v 31.259182 -14.790133 5.786508
+v 36.141045 -10.639614 5.786508
+v 38.920101 -6.782756 5.786508
+v 39.940384 -4.466046 5.786508
+v 21.418491 -19.605312 6.630101
+v 31.259190 -14.790142 6.630102
+v 36.141037 -10.639594 6.630102
+v 38.920113 -6.782768 6.630102
+v 39.940399 -4.466064 6.630102
+v 21.218451 -19.067507 6.384267
+v 30.896194 -14.343083 6.384267
+v 36.102840 -9.820512 6.384267
+v 38.646347 -6.065289 6.384267
+v 39.459591 -4.096210 6.384268
+v 19.851954 -19.276331 0.999999
+v 29.970846 -14.668347 0.999999
+v 34.078960 -11.556103 1.000000
+v 36.701431 -8.717036 1.000000
+v 38.614883 -5.591603 1.000000
+v 39.282478 -3.882398 1.000000
+v 42.511906 -1.496981 1.000000
+v 42.570805 -0.893927 1.000000
+v 49.014908 0.000000 1.000000
+v 42.602379 0.760366 1.000000
+v 42.612617 0.313417 1.000000
+v 42.604382 -0.290341 1.000000
+v 42.578251 1.207068 1.000000
+v 42.540234 1.653376 1.000000
+v 39.881729 -0.093879 1.000000
+v 49.014908 0.000000 5.290060
+v 80.980614 -0.409305 32.013752
+v 79.503716 12.416275 32.013752
+v 75.298401 24.008486 32.013752
+v 69.227028 33.718807 32.013752
+v 62.083855 41.523605 32.013752
+v 51.713078 49.446342 32.013756
+v 39.446594 55.761002 32.013756
+v 22.496660 60.972164 32.013756
+v 2.941637 63.262867 32.013756
+v -13.620163 62.485855 32.013756
+v -32.955814 58.234081 32.013756
+v -48.712666 51.337513 32.013756
+v -63.580975 40.210079 32.013752
+v -73.002693 28.326180 32.013752
+v -78.683571 15.582288 32.013752
+v -80.944695 2.054209 32.013752
+v -79.671638 -11.693501 32.013752
+v -75.247223 -24.111717 32.013752
+v -68.703247 -34.389473 32.013752
+v -60.989304 -42.514771 32.013752
+v -52.672276 -48.832161 32.013748
+v -41.076935 -55.065468 32.013748
+v -27.590693 -59.758179 32.013748
+v -9.132391 -62.922104 32.013748
+v 7.442808 -63.065224 32.013748
+v 23.082085 -60.895008 32.013748
+v 38.386791 -56.270523 32.013748
+v 53.155712 -48.617519 32.013748
+v 65.589973 -38.139751 32.013752
+v 74.195602 -26.254148 32.013752
+v 79.084923 -14.185026 32.013752
+v 80.474358 -7.409305 32.013752
+v 85.514915 -0.444106 35.989189
+v 81.303871 5.316545 32.532322
+v 81.196152 6.310760 32.533405
+v 85.220757 5.773274 35.989189
+v 85.111336 6.767291 35.989189
+v 78.872772 16.865162 32.544567
+v 79.175064 15.909566 32.543591
+v 82.999649 16.841753 35.989189
+v 79.427979 25.886688 35.989189
+v 82.700714 17.798168 35.989189
+v 71.790161 31.237309 32.557575
+v 71.221146 32.059830 32.558186
+v 74.969559 33.522331 35.989189
+v 74.399117 34.343826 35.989189
+v 64.526802 40.034149 32.562885
+v 63.817417 40.739010 32.563171
+v 67.261566 42.826488 35.989189
+v 66.551689 43.530838 35.989189
+v 57.196243 51.251328 35.989193
+v 47.439533 57.072323 35.989193
+v 45.643959 53.599693 32.561836
+v 44.749184 54.046436 32.561459
+v 46.545238 57.519997 35.989193
+v 33.998997 58.469311 32.555405
+v 34.944683 58.143780 32.556034
+v 36.282829 61.824188 35.989193
+v 35.337612 62.151005 35.989193
+v 17.017822 62.589306 32.542072
+v 18.005383 62.431606 32.542927
+v 18.671667 66.305641 35.989193
+v 6.153144 63.721516 32.532291
+v 5.154394 63.771675 32.531368
+v 6.367396 67.658653 35.989193
+v 17.684340 66.464676 35.989193
+v 5.368709 67.709976 35.989193
+v -5.369306 67.720940 35.989193
+v -5.154394 63.771675 32.521801
+v -6.153144 63.721516 32.520878
+v -6.368104 67.671654 35.989193
+v -18.005383 62.431606 32.510227
+v -17.017822 62.589306 32.511086
+v -17.690351 66.499641 35.989193
+v -18.677999 66.342453 35.989193
+v -34.944683 58.143780 32.497082
+v -33.998997 58.469311 32.497715
+v -35.360146 62.212982 35.989193
+v -44.749184 54.046436 32.491627
+v -36.305828 61.887440 35.989193
+v -45.643959 53.599693 32.491245
+v -46.581860 57.590820 35.989193
+v -47.476528 57.143871 35.989193
+v -57.790462 50.938869 35.989193
+v -63.817417 40.739010 32.489845
+v -64.526802 40.034149 32.490128
+v -66.610207 43.590588 35.989189
+v -71.221146 32.059830 32.494816
+v -71.790161 31.237309 32.495426
+v -74.457855 34.386044 35.989189
+v -67.319664 42.885811 35.989189
+v -75.027252 33.563797 35.989189
+v -79.468597 25.934086 35.989189
+v -78.872772 16.865162 32.508430
+v -79.175064 15.909566 32.509407
+v -82.740257 17.807806 35.989189
+v -81.196152 6.310760 32.519592
+v -83.037125 16.850887 35.989189
+v -81.303871 5.316545 32.520676
+v -85.126976 6.769114 35.989189
+v -85.234108 5.774832 35.989189
+v -81.303871 -5.316548 32.532322
+v -81.196152 -6.310762 32.533405
+v -85.220757 -5.773277 35.989189
+v -85.111336 -6.767293 35.989189
+v -78.872772 -16.865166 32.544567
+v -79.175064 -15.909568 32.543591
+v -82.999649 -16.841757 35.989189
+v -79.437210 -25.867905 35.989189
+v -82.700714 -17.798172 35.989189
+v -71.790161 -31.237312 32.557575
+v -71.221146 -32.059830 32.558186
+v -74.969559 -33.522331 35.989189
+v -74.399117 -34.343826 35.989189
+v -64.526802 -40.034149 32.562885
+v -63.817417 -40.739010 32.563171
+v -67.261566 -42.826488 35.989189
+v -66.551689 -43.530838 35.989189
+v -57.196243 -51.251328 35.989185
+v -45.643959 -53.599693 32.561829
+v -44.749184 -54.046436 32.561451
+v -47.439533 -57.072323 35.989185
+v -46.545238 -57.519997 35.989185
+v -36.282829 -61.824188 35.989185
+v -34.944683 -58.143780 32.556026
+v -33.998997 -58.469311 32.555397
+v -35.337612 -62.151005 35.989185
+v -18.671667 -66.305641 35.989185
+v -18.005383 -62.431606 32.542919
+v -17.017822 -62.589306 32.542065
+v -17.684340 -66.464676 35.989185
+v -5.154394 -63.771675 32.531361
+v -6.153144 -63.721516 32.532284
+v -6.367396 -67.658653 35.989185
+v 5.154394 -63.771675 32.521793
+v -5.368709 -67.709976 35.989185
+v 6.153144 -63.721516 32.520870
+v 5.369306 -67.720940 35.989185
+v 6.368104 -67.671654 35.989185
+v 17.690351 -66.499641 35.989185
+v 17.017822 -62.589306 32.511078
+v 18.005383 -62.431606 32.510220
+v 18.677999 -66.342453 35.989185
+v 33.998997 -58.469311 32.497707
+v 34.944683 -58.143780 32.497074
+v 35.360146 -62.212982 35.989185
+v 36.305828 -61.887440 35.989185
+v 45.643959 -53.599693 32.491238
+v 44.749184 -54.046436 32.491619
+v 46.581860 -57.590820 35.989185
+v 47.476528 -57.143871 35.989185
+v 57.639774 -51.045513 35.989185
+v 63.817417 -40.739010 32.489845
+v 64.526802 -40.034149 32.490128
+v 66.610207 -43.590588 35.989189
+v 67.319664 -42.885811 35.989189
+v 71.221146 -32.059830 32.494816
+v 71.790161 -31.237312 32.495426
+v 74.457855 -34.386044 35.989189
+v 75.027252 -33.563797 35.989189
+v 79.597923 -25.668455 35.989189
+v 78.872772 -16.865166 32.508430
+v 79.175064 -15.909568 32.509407
+v 82.740257 -17.807810 35.989189
+v 83.037125 -16.850891 35.989189
+v 81.303871 -5.316548 32.520676
+v 81.196152 -6.310762 32.519592
+v 85.126976 -6.769117 35.989189
+v 85.234108 -5.774835 35.989189
+v 85.970749 -0.447604 35.989189
+v 85.686958 -5.827640 35.989189
+v 87.879311 -6.083279 39.613861
+v 87.879311 -6.083279 39.069618
+v 92.659142 -6.640633 44.320713
+v 93.346268 -6.720755 44.320713
+v 81.303871 -5.316548 32.013756
+v 86.124702 -5.878683 35.989189
+v 85.686958 -5.827640 39.069618
+v 81.196152 -6.310762 32.013756
+v 93.237061 -7.714797 44.320713
+v 87.771790 -7.077518 39.069618
+v 92.551018 -7.634800 44.320713
+v 87.771790 -7.077518 39.613861
+v 86.016312 -6.872818 35.989189
+v 85.579758 -6.821915 39.069618
+v 85.579758 -6.821914 35.989189
+v 83.480629 -16.958990 35.989189
+v 85.627632 -17.482292 39.069618
+v 90.969124 -18.784203 44.320713
+v 90.308022 -18.623068 44.320713
+v 85.627632 -17.482292 39.613861
+v 83.897202 -17.060524 35.989189
+v 83.480629 -16.958990 39.069618
+v 79.175064 -15.909568 32.013756
+v 78.872772 -16.865166 32.013756
+v 85.333366 -18.439844 39.069618
+v 85.333366 -18.439844 39.613861
+v 90.017921 -19.581636 44.320713
+v 90.678673 -19.742685 44.320713
+v 83.184227 -17.916021 35.989189
+v 83.600227 -18.017414 35.989189
+v 83.184227 -17.916021 39.069618
+v 80.012268 -25.858723 35.989189
+v 75.397537 -33.829918 35.989189
+v 77.190155 -35.118267 39.613861
+v 77.190155 -35.118267 39.069618
+v 81.098427 -37.927135 44.320713
+v 81.636894 -38.314125 44.320713
+v 71.790161 -31.237312 32.013756
+v 75.732086 -34.070358 35.989189
+v 75.397537 -33.829918 39.069618
+v 71.221146 -32.059830 32.013756
+v 81.065414 -39.134876 44.320713
+v 76.620186 -35.940102 39.069618
+v 80.527534 -38.748306 44.320713
+v 76.620186 -35.940102 39.613861
+v 75.161972 -34.892090 35.989189
+v 74.828033 -34.652092 39.069618
+v 74.828033 -34.652092 35.989189
+v 67.638657 -43.211517 35.989189
+v 69.182976 -44.788342 39.069614
+v 73.009735 -48.695667 44.320709
+v 72.549973 -48.226219 44.320709
+v 69.182976 -44.788342 39.613857
+v 67.922684 -43.501518 35.989189
+v 67.638657 -43.211517 39.069618
+v 64.526802 -40.034149 32.013756
+v 63.817417 -40.739010 32.013756
+v 68.473328 -45.492931 39.069614
+v 68.473328 -45.492931 39.613857
+v 71.840019 -48.930504 44.320709
+v 72.299561 -49.399719 44.320709
+v 66.929161 -43.916260 35.989185
+v 67.212952 -44.206020 35.989185
+v 66.929161 -43.916260 39.069614
+v 47.685905 -57.548809 35.989185
+v 57.905888 -51.415642 35.989185
+v 48.699554 -59.509201 39.613857
+v 48.699554 -59.509201 39.069614
+v 50.909580 -63.783382 44.320709
+v 51.211960 -64.368179 44.320709
+v 45.643959 -53.599693 32.013752
+v 47.872921 -57.910492 35.989185
+v 47.685905 -57.548809 39.069614
+v 44.749184 -54.046436 32.013752
+v 50.318012 -64.816521 44.320709
+v 47.805077 -59.956516 39.069614
+v 50.015419 -64.231300 44.320709
+v 47.805077 -59.956516 39.613857
+v 46.978504 -58.357929 35.989185
+v 46.791271 -57.995819 39.069614
+v 46.791271 -57.995819 35.989185
+v 36.461605 -62.315880 35.989185
+v 37.215752 -64.390068 39.613857
+v 37.215752 -64.390068 39.069614
+v 38.859989 -68.912338 44.320709
+v 39.087219 -69.537308 44.320709
+v 34.944683 -58.143780 32.013752
+v 36.603012 -62.704803 35.989185
+v 36.461605 -62.315880 39.069614
+v 33.998997 -58.469311 32.013752
+v 38.142200 -69.864685 44.320709
+v 36.270222 -64.716042 39.069614
+v 37.914722 -69.239029 44.320709
+v 36.270222 -64.716042 39.613857
+v 35.657612 -63.031128 35.989185
+v 35.515945 -62.641495 39.069614
+v 35.515945 -62.641495 35.989185
+v 18.755268 -66.791718 35.989185
+v 19.129341 -68.966728 39.069614
+v 20.060181 -74.378967 44.320709
+v 19.944925 -73.708832 44.320709
+v 19.129341 -68.966728 39.613857
+v 18.827951 -67.214325 35.989185
+v 18.755268 -66.791718 39.069614
+v 18.005383 -62.431606 32.013752
+v 17.017822 -62.589306 32.013752
+v 18.141743 -69.124199 39.069614
+v 18.141743 -69.124199 39.613857
+v 18.957411 -73.866791 44.320709
+v 19.072826 -74.537865 44.320709
+v 17.767628 -66.948952 35.989185
+v 17.840479 -67.372536 35.989185
+v 17.767628 -66.948952 39.069614
+v 6.392873 -68.126823 35.989185
+v 6.512790 -70.330444 39.069614
+v 6.811853 -75.826088 44.320709
+v 6.774241 -75.134918 44.320709
+v 6.512790 -70.330444 39.613857
+v 6.416835 -68.567162 35.989185
+v 6.392873 -68.126823 39.069614
+v 6.153144 -63.721516 32.013752
+v 5.154394 -63.771675 32.013752
+v 5.513999 -70.379845 39.069614
+v 5.513999 -70.379845 39.613857
+v 5.775460 -75.184517 44.320709
+v 5.813126 -75.876656 44.320709
+v 5.394077 -68.176132 35.989185
+v 5.418095 -68.617493 35.989185
+v 5.394077 -68.176132 39.069614
+v -5.393479 -68.165161 35.989185
+v -5.513400 -70.368835 39.613857
+v -5.513400 -70.368835 39.069614
+v -5.774857 -75.173424 44.320709
+v -5.812816 -75.870964 44.320709
+v -5.813126 -75.876656 44.320709
+v -5.154394 -63.771675 32.013752
+v -5.418095 -68.617493 35.989185
+v -5.393479 -68.165161 39.069614
+v -6.153144 -63.721516 32.013752
+v -6.811853 -75.826088 44.320709
+v -6.512083 -70.317444 39.069614
+v -6.811491 -75.819450 44.320709
+v -6.773534 -75.121925 44.320709
+v -6.512083 -70.317444 39.613857
+v -6.416835 -68.567162 35.989185
+v -6.392166 -68.113831 39.069614
+v -6.392166 -68.113831 35.989185
+v -17.761614 -66.913979 35.989185
+v -18.135717 -69.089165 39.613857
+v -18.135717 -69.089165 39.069614
+v -18.951361 -73.831627 44.320709
+v -19.069777 -74.520134 44.320709
+v -19.072826 -74.537865 44.320709
+v -17.017822 -62.589306 32.013752
+v -17.840479 -67.372536 35.989185
+v -17.761614 -66.913979 39.069614
+v -18.005383 -62.431606 32.013752
+v -20.060181 -74.378967 44.320709
+v -19.123005 -68.929878 39.069614
+v -20.056984 -74.360382 44.320709
+v -19.938578 -73.671928 44.320709
+v -19.123005 -68.929878 39.613857
+v -18.827951 -67.214325 35.989185
+v -18.748936 -66.754898 39.069614
+v -18.748936 -66.754898 35.989185
+v -35.493408 -62.579510 35.989185
+v -36.247662 -64.653992 39.069614
+v -38.142200 -69.864685 44.320709
+v -38.130859 -69.833488 44.320709
+v -37.892117 -69.176857 44.320709
+v -36.247662 -64.653992 39.613857
+v -35.657612 -63.031128 35.989185
+v -35.493408 -62.579510 39.069614
+v -33.998997 -58.469311 32.013752
+v -34.944683 -58.143780 32.013752
+v -37.192738 -64.326775 39.069614
+v -37.192738 -64.326775 39.613857
+v -38.836952 -68.848984 44.320709
+v -39.075661 -69.505524 44.320709
+v -39.087219 -69.537308 44.320709
+v -36.438602 -62.252621 35.989185
+v -36.603012 -62.704803 35.989185
+v -36.438602 -62.252621 39.069614
+v -46.754646 -57.924988 35.989185
+v -47.768436 -59.885654 39.069614
+v -50.318012 -64.816521 44.320709
+v -50.299641 -64.780983 44.320709
+v -49.978745 -64.160385 44.320709
+v -47.768436 -59.885654 39.613857
+v -46.978504 -58.357929 35.989185
+v -46.754646 -57.924988 39.069614
+v -44.749184 -54.046436 32.013752
+v -45.643959 -53.599693 32.013752
+v -48.662552 -59.437637 39.069614
+v -48.662552 -59.437637 39.613857
+v -50.872566 -63.711796 44.320709
+v -51.193417 -64.332321 44.320709
+v -51.211960 -64.368179 44.320709
+v -47.648911 -57.477257 35.989185
+v -47.872921 -57.910492 35.989185
+v -47.648911 -57.477257 39.069614
+v -57.458439 -51.624229 35.989185
+v -66.870644 -43.856510 35.989185
+v -68.414810 -45.433182 39.613857
+v -68.414810 -45.433182 39.069614
+v -71.781502 -48.870754 44.320709
+v -72.270287 -49.369823 44.320709
+v -72.299561 -49.399719 44.320709
+v -63.817417 -40.739010 32.013756
+v -67.212952 -44.206020 35.989185
+v -66.870644 -43.856510 39.069614
+v -64.526802 -40.034149 32.013756
+v -73.009735 -48.695667 44.320709
+v -69.124863 -44.729004 39.069614
+v -72.980644 -48.665966 44.320709
+v -72.491829 -48.166859 44.320709
+v -69.124863 -44.729004 39.613857
+v -67.922684 -43.501518 35.989189
+v -67.580559 -43.152191 39.069618
+v -67.580559 -43.152191 35.989189
+v -74.769295 -34.609875 35.989189
+v -76.561417 -35.897869 39.069618
+v -81.065414 -39.134876 44.320713
+v -81.035995 -39.113739 44.320713
+v -80.468735 -38.706047 44.320713
+v -76.561417 -35.897869 39.613861
+v -75.161972 -34.892090 35.989189
+v -74.769295 -34.609875 39.069618
+v -71.221146 -32.059830 32.013756
+v -71.790161 -31.237312 32.013756
+v -77.132393 -35.076756 39.069618
+v -77.132393 -35.076756 39.613861
+v -81.040558 -37.885544 44.320713
+v -81.607941 -38.293320 44.320713
+v -81.636894 -38.314125 44.320713
+v -75.339828 -33.788445 35.989189
+v -75.732086 -34.070358 35.989189
+v -75.339828 -33.788445 39.069618
+v -79.850731 -26.059986 35.989189
+v -83.144753 -17.906399 35.989189
+v -85.294205 -18.430298 39.613861
+v -85.294205 -18.430298 39.069618
+v -89.979355 -19.572237 44.320713
+v -90.659431 -19.737995 44.320713
+v -90.678673 -19.742685 44.320713
+v -78.872772 -16.865166 32.013756
+v -83.600227 -18.017414 35.989189
+v -83.144753 -17.906399 39.069618
+v -79.175064 -15.909568 32.013756
+v -90.969124 -18.784203 44.320713
+v -85.590446 -17.473228 39.069618
+v -90.950790 -18.779734 44.320713
+v -90.271294 -18.614117 44.320713
+v -85.590446 -17.473228 39.613861
+v -83.897202 -17.060524 35.989189
+v -83.443207 -16.949869 39.069618
+v -83.443207 -16.949869 35.989189
+v -85.564117 -6.820090 35.989189
+v -87.756157 -7.075695 39.069618
+v -93.237061 -7.714797 44.320713
+v -93.229248 -7.713886 44.320713
+v -92.535393 -7.632979 44.320713
+v -87.756157 -7.075695 39.613861
+v -86.016312 -6.872818 35.989189
+v -85.564117 -6.820091 39.069618
+v -81.196152 -6.310762 32.013756
+v -81.303871 -5.316548 32.013756
+v -87.865860 -6.081711 39.069618
+v -87.865860 -6.081711 39.613861
+v -92.645546 -6.639047 44.320713
+v -93.339462 -6.719961 44.320713
+v -93.346268 -6.720755 44.320713
+v -85.673592 -5.826080 35.989189
+v -86.124702 -5.878683 35.989189
+v -85.673592 -5.826081 39.069618
+v -85.686958 5.827637 35.989189
+v -87.879311 6.083275 39.613861
+v -87.879311 6.083275 39.069618
+v -92.659142 6.640629 44.320713
+v -93.346268 6.720751 44.320713
+v -81.303871 5.316545 32.013756
+v -86.124702 5.878680 35.989189
+v -85.686958 5.827636 39.069618
+v -81.196152 6.310760 32.013756
+v -93.237061 7.714793 44.320713
+v -87.771790 7.077514 39.069618
+v -92.551018 7.634796 44.320713
+v -87.771790 7.077514 39.613861
+v -86.016312 6.872816 35.989189
+v -85.579758 6.821911 39.069618
+v -85.579758 6.821911 35.989189
+v -83.480629 16.958986 35.989189
+v -85.627632 17.482288 39.069618
+v -90.969124 18.784199 44.320713
+v -90.308022 18.623064 44.320713
+v -85.627632 17.482288 39.613861
+v -83.897202 17.060520 35.989189
+v -83.480629 16.958986 39.069618
+v -79.175064 15.909566 32.013756
+v -78.872772 16.865162 32.013756
+v -85.333366 18.439840 39.069618
+v -85.333366 18.439840 39.613861
+v -90.017921 19.581633 44.320713
+v -90.678673 19.742682 44.320713
+v -83.184227 17.916018 35.989189
+v -83.600227 18.017410 35.989189
+v -83.184227 17.916018 39.069618
+v -79.882004 26.126379 35.989189
+v -75.397537 33.829918 35.989189
+v -77.190155 35.118267 39.613861
+v -77.190155 35.118267 39.069618
+v -81.098427 37.927128 44.320713
+v -81.636894 38.314117 44.320713
+v -71.790161 31.237309 32.013756
+v -75.732086 34.070358 35.989189
+v -75.397537 33.829918 39.069618
+v -71.221146 32.059830 32.013756
+v -81.065414 39.134869 44.320713
+v -76.620186 35.940102 39.069618
+v -80.527534 38.748299 44.320713
+v -76.620186 35.940102 39.613861
+v -75.161972 34.892090 35.989189
+v -74.828033 34.652092 39.069618
+v -74.828033 34.652092 35.989189
+v -67.638657 43.211517 35.989189
+v -69.182976 44.788342 39.069622
+v -73.009735 48.695660 44.320717
+v -72.549973 48.226212 44.320717
+v -69.182976 44.788342 39.613865
+v -67.922684 43.501518 35.989189
+v -67.638657 43.211517 39.069618
+v -64.526802 40.034149 32.013756
+v -63.817417 40.739010 32.013756
+v -68.473328 45.492931 39.069622
+v -68.473328 45.492931 39.613865
+v -71.840019 48.930496 44.320717
+v -72.299561 49.399712 44.320717
+v -66.929161 43.916260 35.989193
+v -67.212952 44.206020 35.989193
+v -66.929161 43.916260 39.069622
+v -47.685905 57.548809 35.989193
+v -58.057472 51.308353 35.989193
+v -48.699554 59.509201 39.613865
+v -48.699554 59.509201 39.069622
+v -50.909580 63.783375 44.320717
+v -51.211960 64.368179 44.320717
+v -45.643959 53.599693 32.013760
+v -47.872921 57.910492 35.989193
+v -47.685905 57.548809 39.069622
+v -44.749184 54.046436 32.013760
+v -50.318012 64.816521 44.320717
+v -47.805077 59.956516 39.069622
+v -50.015419 64.231300 44.320717
+v -47.805077 59.956516 39.613865
+v -46.978504 58.357929 35.989193
+v -46.791271 57.995819 39.069622
+v -46.791271 57.995819 35.989193
+v -36.461605 62.315880 35.989193
+v -37.215752 64.390068 39.613865
+v -37.215752 64.390068 39.069622
+v -38.859989 68.912338 44.320717
+v -39.087219 69.537308 44.320717
+v -34.944683 58.143780 32.013760
+v -36.603012 62.704803 35.989193
+v -36.461605 62.315880 39.069622
+v -33.998997 58.469311 32.013760
+v -38.142200 69.864685 44.320717
+v -36.270222 64.716042 39.069622
+v -37.914722 69.239029 44.320717
+v -36.270222 64.716042 39.613865
+v -35.657612 63.031128 35.989193
+v -35.515945 62.641495 39.069622
+v -35.515945 62.641495 35.989193
+v -18.755268 66.791718 35.989193
+v -19.129341 68.966728 39.069622
+v -20.060181 74.378967 44.320717
+v -19.944925 73.708832 44.320717
+v -19.129341 68.966728 39.613865
+v -18.827951 67.214325 35.989193
+v -18.755268 66.791718 39.069622
+v -18.005383 62.431606 32.013760
+v -17.017822 62.589306 32.013760
+v -18.141743 69.124199 39.069622
+v -18.141743 69.124199 39.613865
+v -18.957411 73.866791 44.320717
+v -19.072826 74.537865 44.320717
+v -17.767628 66.948952 35.989193
+v -17.840479 67.372536 35.989193
+v -17.767628 66.948952 39.069622
+v -6.392873 68.126823 35.989193
+v -6.512790 70.330444 39.069622
+v -6.811853 75.826088 44.320717
+v -6.774241 75.134918 44.320717
+v -6.512790 70.330444 39.613865
+v -6.416835 68.567162 35.989193
+v -6.392873 68.126823 39.069622
+v -6.153144 63.721516 32.013760
+v -5.154394 63.771675 32.013760
+v -5.513999 70.379845 39.069622
+v -5.513999 70.379845 39.613865
+v -5.775460 75.184517 44.320717
+v -5.813126 75.876656 44.320717
+v -5.394077 68.176132 35.989193
+v -5.418095 68.617493 35.989193
+v -5.394077 68.176132 39.069622
+v 5.393479 68.165161 35.989193
+v 5.513400 70.368835 39.613865
+v 5.513400 70.368835 39.069622
+v 5.774857 75.173424 44.320717
+v 5.812816 75.870964 44.320717
+v 5.813126 75.876656 44.320717
+v 5.154394 63.771675 32.013760
+v 5.418095 68.617493 35.989193
+v 5.393479 68.165161 39.069622
+v 6.153144 63.721516 32.013760
+v 6.811853 75.826088 44.320717
+v 6.512083 70.317444 39.069622
+v 6.811491 75.819450 44.320717
+v 6.773534 75.121925 44.320717
+v 6.512083 70.317444 39.613865
+v 6.416835 68.567162 35.989193
+v 6.392166 68.113831 39.069622
+v 6.392166 68.113831 35.989193
+v 17.761614 66.913979 35.989193
+v 18.135717 69.089165 39.613865
+v 18.135717 69.089165 39.069622
+v 18.951361 73.831627 44.320717
+v 19.069777 74.520134 44.320717
+v 19.072826 74.537865 44.320717
+v 17.017822 62.589306 32.013760
+v 17.840479 67.372536 35.989193
+v 17.761614 66.913979 39.069622
+v 18.005383 62.431606 32.013760
+v 20.060181 74.378967 44.320717
+v 19.123005 68.929878 39.069622
+v 20.056984 74.360382 44.320717
+v 19.938578 73.671928 44.320717
+v 19.123005 68.929878 39.613865
+v 18.827951 67.214325 35.989193
+v 18.748936 66.754898 39.069622
+v 18.748936 66.754898 35.989193
+v 35.493408 62.579510 35.989193
+v 36.247662 64.653992 39.069622
+v 38.142200 69.864685 44.320717
+v 38.130859 69.833488 44.320717
+v 37.892117 69.176857 44.320717
+v 36.247662 64.653992 39.613865
+v 35.657612 63.031128 35.989193
+v 35.493408 62.579510 39.069622
+v 33.998997 58.469311 32.013760
+v 34.944683 58.143780 32.013760
+v 37.192738 64.326775 39.069622
+v 37.192738 64.326775 39.613865
+v 38.836952 68.848984 44.320717
+v 39.075661 69.505524 44.320717
+v 39.087219 69.537308 44.320717
+v 36.438602 62.252621 35.989193
+v 36.603012 62.704803 35.989193
+v 36.438602 62.252621 39.069622
+v 46.754646 57.924988 35.989193
+v 47.768436 59.885654 39.069622
+v 50.318012 64.816521 44.320717
+v 50.299641 64.780983 44.320717
+v 49.978745 64.160385 44.320717
+v 47.768436 59.885654 39.613865
+v 46.978504 58.357929 35.989193
+v 46.754646 57.924988 39.069622
+v 44.749184 54.046436 32.013760
+v 45.643959 53.599693 32.013760
+v 48.662552 59.437637 39.069622
+v 48.662552 59.437637 39.613865
+v 50.872566 63.711788 44.320717
+v 51.193417 64.332321 44.320717
+v 51.211960 64.368179 44.320717
+v 47.648911 57.477257 35.989193
+v 47.872921 57.910492 35.989193
+v 47.648911 57.477257 39.069622
+v 57.458439 51.624229 35.989193
+v 66.870644 43.856510 35.989193
+v 68.414810 45.433182 39.613865
+v 68.414810 45.433182 39.069622
+v 71.781502 48.870747 44.320717
+v 72.270287 49.369816 44.320717
+v 72.299561 49.399712 44.320717
+v 63.817417 40.739010 32.013756
+v 67.212952 44.206020 35.989193
+v 66.870644 43.856510 39.069622
+v 64.526802 40.034149 32.013756
+v 73.009735 48.695660 44.320717
+v 69.124863 44.729004 39.069622
+v 72.980644 48.665958 44.320717
+v 72.491829 48.166851 44.320717
+v 69.124863 44.729004 39.613865
+v 67.922684 43.501518 35.989189
+v 67.580559 43.152191 39.069618
+v 67.580559 43.152191 35.989189
+v 74.769295 34.609875 35.989189
+v 76.561417 35.897869 39.069618
+v 81.065414 39.134869 44.320713
+v 81.035995 39.113731 44.320713
+v 80.468735 38.706039 44.320713
+v 76.561417 35.897869 39.613861
+v 75.161972 34.892090 35.989189
+v 74.769295 34.609875 39.069618
+v 71.221146 32.059830 32.013756
+v 71.790161 31.237309 32.013756
+v 77.132393 35.076756 39.069618
+v 77.132393 35.076756 39.613861
+v 81.040558 37.885536 44.320713
+v 81.607941 38.293312 44.320713
+v 81.636894 38.314117 44.320713
+v 75.339828 33.788445 35.989189
+v 75.732086 34.070358 35.989189
+v 75.339828 33.788445 39.069618
+v 79.842392 26.076963 35.989189
+v 83.144753 17.906395 35.989189
+v 85.294205 18.430294 39.613861
+v 85.294205 18.430294 39.069618
+v 89.979355 19.572233 44.320713
+v 90.659431 19.737991 44.320713
+v 90.678673 19.742682 44.320713
+v 78.872772 16.865162 32.013756
+v 83.600227 18.017410 35.989189
+v 83.144753 17.906395 39.069618
+v 79.175064 15.909566 32.013756
+v 90.969124 18.784199 44.320713
+v 85.590446 17.473225 39.069618
+v 90.950790 18.779730 44.320713
+v 90.271294 18.614113 44.320713
+v 85.590446 17.473225 39.613861
+v 83.897202 17.060520 35.989189
+v 83.443207 16.949865 39.069618
+v 83.443207 16.949865 35.989189
+v 85.564117 6.820087 35.989189
+v 87.756157 7.075691 39.069618
+v 93.237061 7.714793 44.320713
+v 93.229248 7.713882 44.320713
+v 92.535393 7.632975 44.320713
+v 87.756157 7.075691 39.613861
+v 86.016312 6.872816 35.989189
+v 85.564117 6.820087 39.069618
+v 81.196152 6.310760 32.013756
+v 81.303871 5.316545 32.013756
+v 87.865860 6.081707 39.069618
+v 87.865860 6.081707 39.613861
+v 92.645546 6.639043 44.320713
+v 93.339462 6.719957 44.320713
+v 93.346268 6.720751 44.320713
+v 85.673592 5.826077 35.989189
+v 86.124702 5.878680 35.989189
+v 85.673592 5.826077 39.069618
+v 85.970749 -0.447604 39.069618
+v 25.484203 -73.375977 44.320709
+v 43.720016 -67.822227 44.320709
+v 61.669674 -58.199821 44.320709
+v 62.003246 -57.114243 44.320709
+v 76.378479 -45.146999 44.320709
+v 86.542221 -30.066467 44.320713
+v 86.390961 -28.789391 44.320713
+v 91.724869 -16.069696 44.320713
+v 93.687569 -0.506829 44.320713
+v 92.989037 -0.501468 44.320713
+v 88.177567 -0.464541 39.613861
+v 88.177567 -0.464541 39.069618
+v 86.554886 -3.408113 39.069618
+v 87.747459 -3.541437 39.069618
+v 86.688210 -2.215542 39.069618
+v 87.880783 -2.348866 39.069618
+v 85.592918 -15.814242 39.069618
+v 84.456985 -15.427389 39.069618
+v 84.843842 -14.291456 39.069618
+v 85.979774 -14.678308 39.069618
+v 87.007095 -9.737949 39.069618
+v 85.836327 -9.474686 39.069618
+v 86.099586 -8.303920 39.069618
+v 87.270355 -8.567183 39.069618
+v 82.018127 -26.779999 39.613861
+v 82.018127 -26.779999 39.069618
+v 77.707352 -32.699673 39.069618
+v 76.733490 -31.998528 39.069618
+v 78.408493 -31.725819 39.069618
+v 80.012268 -25.858723 39.069618
+v 77.434639 -31.024672 39.069618
+v 79.858154 -26.739319 39.069618
+v 80.893417 -27.346136 39.069618
+v 80.464973 -25.704054 39.069618
+v 81.500237 -26.310871 39.069618
+v 82.449623 -21.200796 39.069618
+v 83.539650 -21.702639 39.069618
+v 82.951462 -20.110771 39.069618
+v 84.041489 -20.612614 39.069618
+v 69.166100 -41.622269 39.046009
+v 69.166100 -41.622269 39.069618
+v 69.977112 -40.735226 39.046009
+v 73.133705 -36.948513 39.046009
+v 69.977112 -40.735226 39.069618
+v 73.133705 -36.948513 39.069618
+v 73.192482 -36.872288 39.046009
+v 73.192482 -36.872288 39.069618
+v 69.939125 -42.413418 39.069618
+v 70.797432 -41.574772 39.069618
+v 74.037392 -37.729816 39.069618
+v 73.914452 -36.037220 39.069618
+v 74.822220 -36.822048 39.069618
+v 59.194225 -53.207527 39.613857
+v 59.194225 -53.207527 39.069614
+v 50.262779 -57.475101 39.069614
+v 49.742214 -56.471565 39.069614
+v 51.327995 -56.922546 39.069614
+v 55.584789 -54.268444 39.069614
+v 55.027576 -53.353485 39.069614
+v 50.793781 -55.892696 39.069614
+v 56.033031 -52.697395 39.069614
+v 56.609688 -53.644279 39.069614
+v 60.060116 -49.837914 39.069614
+v 60.665844 -50.688587 39.069614
+v 61.643353 -49.992546 39.069614
+v 65.465553 -46.735748 39.069614
+v 64.790451 -45.924782 39.069614
+v 61.010540 -49.103828 39.069614
+v 65.676186 -45.113159 39.069614
+v 66.387810 -45.967995 39.069614
+v 49.742214 -56.471565 39.046005
+v 50.793781 -55.892696 39.046005
+v 55.027576 -53.353485 39.046005
+v 56.033031 -52.697395 39.046005
+v 60.060116 -49.837914 39.046005
+v 61.010540 -49.103828 39.046005
+v 64.790451 -45.924782 39.046005
+v 65.676186 -45.113159 39.046005
+v 39.037083 -62.777531 39.069614
+v 38.626053 -61.650124 39.069614
+v 40.164494 -62.366501 39.069614
+v 44.736046 -60.310436 39.069614
+v 39.753460 -61.239090 39.069614
+v 44.254574 -59.211262 39.069614
+v 45.353752 -58.729790 39.069614
+v 45.835220 -59.828964 39.069614
+v 21.186155 -68.005852 39.069614
+v 20.982563 -66.823250 39.069614
+v 22.165165 -66.619659 39.069614
+v 22.368757 -67.802261 39.069614
+v 27.236742 -66.621651 39.069614
+v 26.964590 -65.452919 39.069614
+v 33.195145 -64.880028 39.069614
+v 28.133322 -65.180763 39.069614
+v 28.405474 -66.349495 39.069614
+v 32.853870 -63.729580 39.069614
+v 34.004322 -63.388309 39.069614
+v 34.345592 -64.538757 39.069614
+v 8.829425 -68.515175 39.069614
+v 8.897084 -69.713264 39.069614
+v 15.065881 -69.035614 39.069614
+v 10.027516 -68.447517 39.069614
+v 10.095175 -69.645607 39.069614
+v 14.930408 -67.843285 39.069614
+v 16.122736 -67.707817 39.069614
+v 16.258209 -68.900146 39.069614
+v -3.438015 -68.819641 39.069614
+v -3.505674 -70.017731 39.069614
+v -2.239924 -68.887299 39.069614
+v -2.307583 -70.085388 39.069614
+v 2.700000 -70.040382 39.069614
+v 2.700000 -68.840378 39.069614
+v 3.900000 -68.840378 39.069614
+v 3.900000 -70.040382 39.069614
+v -15.864440 -68.922012 39.069614
+v -15.660848 -67.739410 39.069614
+v -14.681837 -69.125610 39.069614
+v -9.700402 -69.645241 39.069614
+v -14.478245 -67.943001 39.069614
+v -9.564930 -68.452911 39.069614
+v -8.372602 -68.588387 39.069614
+v -8.508074 -69.780716 39.069614
+v -33.963741 -64.627174 39.069614
+v -33.552708 -63.499767 39.069614
+v -32.836330 -65.038208 39.069614
+v -28.018122 -66.415749 39.069614
+v -32.425297 -63.910797 39.069614
+v -27.676849 -65.265305 39.069614
+v -21.977451 -67.846336 39.069614
+v -26.526402 -65.606575 39.069614
+v -26.867672 -66.757027 39.069614
+v -21.705299 -66.677605 39.069614
+v -20.536568 -66.949760 39.069614
+v -20.808720 -68.118492 39.069614
+v -45.469318 -59.961613 39.069614
+v -44.916759 -58.896397 39.069614
+v -44.404106 -60.514168 39.069614
+v -39.789761 -62.477055 39.069614
+v -43.851547 -59.448956 39.069614
+v -39.308289 -61.377880 39.069614
+v -38.209114 -61.859352 39.069614
+v -38.690582 -62.958527 39.069614
+v -61.897316 -57.936905 44.320709
+v -61.495491 -57.365486 44.320709
+v -58.727814 -53.429523 39.613857
+v -58.727814 -53.429523 39.069614
+v -66.076782 -46.187305 39.069614
+v -65.276215 -45.367981 39.069614
+v -65.218475 -47.025948 39.069614
+v -61.315403 -50.190636 39.069614
+v -60.591621 -49.321194 39.069614
+v -64.385178 -46.173119 39.069614
+v -59.636501 -50.049473 39.069614
+v -60.393147 -50.958385 39.069614
+v -55.598209 -52.881470 39.069614
+v -56.267044 -53.820770 39.069614
+v -55.289536 -54.516811 39.069614
+v -50.972744 -57.077190 39.069614
+v -54.593494 -53.539303 39.069614
+v -50.348579 -56.052292 39.069614
+v -49.323681 -56.676460 39.069614
+v -49.947845 -57.701359 39.069614
+v -54.724884 -53.445744 39.069614
+v -65.276215 -45.367981 39.046005
+v -64.385178 -46.173119 39.046005
+v -60.591621 -49.321194 39.046005
+v -59.636501 -50.049473 39.046005
+v -55.598209 -52.881470 39.046005
+v -54.724884 -53.445744 39.046005
+v -69.599876 -41.031662 39.046009
+v -69.599876 -41.031662 39.069618
+v -69.535286 -41.102360 39.046009
+v -69.535286 -41.102360 39.069618
+v -74.552193 -37.082020 39.069618
+v -73.578339 -36.380875 39.069618
+v -73.851044 -38.055874 39.069618
+v -70.505661 -41.814777 39.069618
+v -72.877190 -37.354729 39.069618
+v -68.813065 -41.937717 39.069618
+v -69.720833 -42.722546 39.069618
+v -86.850204 -29.313307 44.320713
+v -86.216675 -29.018703 44.320713
+v -81.852592 -26.990068 39.613861
+v -81.852592 -26.990068 39.069618
+v -83.852081 -20.925943 39.069618
+v -82.716148 -20.539089 39.069618
+v -83.465233 -22.061876 39.069618
+v -80.191330 -26.105907 39.069618
+v -79.850731 -26.059986 39.069618
+v -82.329292 -21.675024 39.069618
+v -81.281357 -26.607750 39.069618
+v -79.689491 -27.195932 39.069618
+v -80.779510 -27.697775 39.069618
+v -77.127480 -31.398010 39.069618
+v -78.162743 -32.004826 39.069618
+v -76.520660 -32.433273 39.069618
+v -77.555923 -33.040089 39.069618
+v -85.954933 -8.774680 39.069618
+v -87.147499 -8.908004 39.069618
+v -85.821609 -9.967251 39.069618
+v -87.014175 -10.100574 39.069618
+v -85.822403 -15.006393 39.069618
+v -84.651642 -14.743131 39.069618
+v -84.388374 -15.913897 39.069618
+v -85.559143 -16.177160 39.069618
+v -23.423742 73.795265 44.320717
+v -49.415874 65.300964 44.320717
+v -62.168686 56.996964 44.320717
+v -67.195091 54.033649 44.320717
+v -80.092865 40.540497 44.320713
+v -86.246254 29.088274 44.320713
+v -88.750114 25.191818 44.320713
+v -92.972054 9.775893 44.320713
+v -86.554886 3.408109 39.069618
+v -87.747459 3.541433 39.069618
+v -87.794739 -2.700002 39.069618
+v -86.688210 2.215538 39.069618
+v -87.880783 2.348862 39.069618
+v -86.594734 -2.700002 39.069618
+v -86.594734 -3.900002 39.069618
+v -87.794739 -3.900002 39.069618
+v -85.592918 15.814239 39.069618
+v -84.456985 15.427385 39.069618
+v -84.843842 14.291452 39.069618
+v -85.979774 14.678305 39.069618
+v -87.007095 9.737946 39.069618
+v -85.836327 9.474682 39.069618
+v -86.099586 8.303916 39.069618
+v -87.270355 8.567180 39.069618
+v -81.883316 27.057474 39.613861
+v -81.883316 27.057474 39.069618
+v -77.707352 32.699673 39.069618
+v -76.733490 31.998524 39.069618
+v -78.408493 31.725815 39.069618
+v -79.882004 26.126379 39.069618
+v -77.434639 31.024668 39.069618
+v -79.858154 26.739315 39.069618
+v -80.893417 27.346132 39.069618
+v -80.464973 25.704050 39.069618
+v -81.500237 26.310867 39.069618
+v -82.449623 21.200792 39.069618
+v -83.539650 21.702635 39.069618
+v -82.951462 20.110767 39.069618
+v -84.041489 20.612610 39.069618
+v -69.166100 41.622269 39.046009
+v -69.166100 41.622269 39.069618
+v -69.977112 40.735226 39.046009
+v -73.133705 36.948513 39.046009
+v -69.977112 40.735226 39.069618
+v -73.133705 36.948513 39.069618
+v -73.192482 36.872288 39.046009
+v -73.192482 36.872288 39.069618
+v -69.939125 42.413418 39.069618
+v -70.797432 41.574772 39.069618
+v -74.037392 37.729816 39.069618
+v -73.914452 36.037220 39.069618
+v -74.822220 36.822048 39.069618
+v -59.350166 53.097099 39.613865
+v -59.350166 53.097099 39.069622
+v -50.262779 57.475101 39.069622
+v -49.742214 56.471565 39.069622
+v -51.327995 56.922546 39.069622
+v -55.584789 54.268444 39.069622
+v -55.027576 53.353485 39.069622
+v -50.793781 55.892696 39.069622
+v -56.033031 52.697395 39.069622
+v -56.609688 53.644279 39.069622
+v -60.060116 49.837914 39.069622
+v -60.665844 50.688587 39.069622
+v -61.643353 49.992546 39.069622
+v -65.465553 46.735748 39.069622
+v -64.790451 45.924782 39.069622
+v -61.010540 49.103828 39.069622
+v -65.676186 45.113159 39.069622
+v -66.387810 45.967995 39.069622
+v -49.742214 56.471565 39.046013
+v -50.793781 55.892696 39.046013
+v -55.027576 53.353485 39.046013
+v -56.033031 52.697395 39.046013
+v -60.060116 49.837914 39.046013
+v -61.010540 49.103828 39.046013
+v -64.790451 45.924782 39.046013
+v -65.676186 45.113159 39.046013
+v -39.037083 62.777531 39.069622
+v -38.626053 61.650124 39.069622
+v -40.164494 62.366501 39.069622
+v -44.736046 60.310436 39.069622
+v -39.753460 61.239090 39.069622
+v -44.254574 59.211262 39.069622
+v -45.353752 58.729790 39.069622
+v -45.835220 59.828964 39.069622
+v -21.186155 68.005852 39.069622
+v -20.982563 66.823250 39.069622
+v -22.165165 66.619659 39.069622
+v -22.368757 67.802261 39.069622
+v -27.236742 66.621651 39.069622
+v -26.964590 65.452919 39.069622
+v -33.195145 64.880028 39.069622
+v -28.133322 65.180763 39.069622
+v -28.405474 66.349495 39.069622
+v -32.853870 63.729580 39.069622
+v -34.004322 63.388309 39.069622
+v -34.345592 64.538757 39.069622
+v -8.829425 68.515175 39.069622
+v -8.897084 69.713264 39.069622
+v -15.065881 69.035614 39.069622
+v -10.027516 68.447517 39.069622
+v -10.095175 69.645607 39.069622
+v -14.930408 67.843285 39.069622
+v -16.122736 67.707817 39.069622
+v -16.258209 68.900146 39.069622
+v 3.438015 68.819641 39.069622
+v 3.505674 70.017731 39.069622
+v 2.239924 68.887299 39.069622
+v 2.307583 70.085388 39.069622
+v -2.700000 70.040382 39.069622
+v -2.700000 68.840378 39.069622
+v -3.900000 68.840378 39.069622
+v -3.900000 70.040382 39.069622
+v 15.864440 68.922012 39.069622
+v 15.660848 67.739410 39.069622
+v 14.681837 69.125610 39.069622
+v 9.700402 69.645241 39.069622
+v 14.478245 67.943001 39.069622
+v 9.564930 68.452911 39.069622
+v 8.372602 68.588387 39.069622
+v 8.508074 69.780716 39.069622
+v 33.963741 64.627174 39.069622
+v 33.552708 63.499767 39.069622
+v 32.836330 65.038208 39.069622
+v 28.018122 66.415749 39.069622
+v 32.425297 63.910797 39.069622
+v 27.676849 65.265305 39.069622
+v 21.977451 67.846336 39.069622
+v 26.526402 65.606575 39.069622
+v 26.867672 66.757027 39.069622
+v 21.705299 66.677605 39.069622
+v 20.536568 66.949760 39.069622
+v 20.808720 68.118492 39.069622
+v 45.469318 59.961613 39.069622
+v 44.916759 58.896397 39.069622
+v 44.404106 60.514168 39.069622
+v 39.789761 62.477055 39.069622
+v 43.851547 59.448956 39.069622
+v 39.308289 61.377880 39.069622
+v 38.209114 61.859352 39.069622
+v 38.690582 62.958527 39.069622
+v 61.897316 57.936897 44.320717
+v 61.495491 57.365479 44.320717
+v 58.727814 53.429523 39.613865
+v 58.727814 53.429523 39.069622
+v 66.076782 46.187305 39.069622
+v 65.276215 45.367981 39.069622
+v 65.218475 47.025948 39.069622
+v 61.315403 50.190636 39.069622
+v 60.591621 49.321194 39.069622
+v 64.385178 46.173119 39.069622
+v 59.636501 50.049473 39.069622
+v 60.393147 50.958385 39.069622
+v 55.598209 52.881470 39.069622
+v 56.267044 53.820770 39.069622
+v 55.289536 54.516811 39.069622
+v 50.972744 57.077190 39.069622
+v 54.593494 53.539303 39.069622
+v 50.348579 56.052292 39.069622
+v 49.323681 56.676460 39.069622
+v 49.947845 57.701359 39.069622
+v 54.724884 53.445744 39.069622
+v 65.276215 45.367981 39.046013
+v 64.385178 46.173119 39.046013
+v 60.591621 49.321194 39.046013
+v 59.636501 50.049473 39.046013
+v 55.598209 52.881470 39.046013
+v 54.724884 53.445744 39.046013
+v 69.599876 41.031662 39.046009
+v 69.599876 41.031662 39.069618
+v 69.535286 41.102360 39.046009
+v 69.535286 41.102360 39.069618
+v 74.552193 37.082020 39.069618
+v 73.578339 36.380875 39.069618
+v 73.851044 38.055874 39.069618
+v 70.505661 41.814777 39.069618
+v 72.877190 37.354729 39.069618
+v 68.813065 41.937717 39.069618
+v 69.720833 42.722546 39.069618
+v 86.857437 29.298464 44.320713
+v 86.222466 29.006826 44.320713
+v 81.848618 26.998167 39.613861
+v 81.848618 26.998167 39.069618
+v 83.852081 20.925940 39.069618
+v 82.716148 20.539085 39.069618
+v 83.465233 22.061872 39.069618
+v 80.191330 26.105904 39.069618
+v 79.842392 26.076963 39.069618
+v 82.329292 21.675020 39.069618
+v 81.281357 26.607746 39.069618
+v 79.689491 27.195929 39.069618
+v 80.779510 27.697771 39.069618
+v 77.127480 31.398006 39.069618
+v 78.162743 32.004826 39.069618
+v 76.520660 32.433273 39.069618
+v 77.555923 33.040089 39.069618
+v 85.954933 8.774676 39.069618
+v 87.147499 8.908000 39.069618
+v 85.821609 9.967247 39.069618
+v 87.014175 10.100571 39.069618
+v 85.822403 15.006390 39.069618
+v 84.651642 14.743127 39.069618
+v 84.388374 15.913893 39.069618
+v 85.559143 16.177156 39.069618
+v 86.594734 2.699998 39.069618
+v 87.794739 2.699998 39.069618
+v 86.594734 3.899998 39.069618
+v 87.794739 3.899998 39.069618
+v 93.687569 -0.506829 48.274822
+v 91.870766 15.337479 48.274822
+v 86.716644 29.585478 48.274822
+v 79.346558 41.404915 48.274822
+v 70.789864 50.780453 48.274826
+v 58.585163 60.135674 48.274826
+v 44.445290 67.444565 48.274826
+v 25.292433 73.369110 48.274826
+v 3.491938 75.959686 48.274826
+v -14.961328 75.123627 48.274826
+v -36.674446 70.387154 48.274826
+v -54.760918 62.515484 48.274826
+v -72.279327 49.477966 48.274826
+v -83.688477 35.211178 48.274822
+v -90.723671 19.664148 48.274822
+v -93.623985 2.998073 48.274822
+v -92.173828 -14.009275 48.274822
+v -86.837280 -29.339775 48.274822
+v -78.946976 -41.920464 48.274822
+v -69.744423 -51.733669 48.274818
+v -59.967720 -59.244274 48.274818
+v -46.577915 -66.527481 48.274818
+v -31.285460 -71.923645 48.274818
+v -10.652063 -75.546036 48.274818
+v 7.805005 -75.775131 48.274818
+v 25.269001 -73.421585 48.274818
+v 42.580093 -68.276733 48.274818
+v 59.648121 -59.555695 48.274818
+v 74.418396 -47.302799 48.274818
+v 84.934570 -33.088963 48.274822
+v 91.253586 -17.858418 48.274822
+v 93.035736 -9.336655 48.274822
+v 86.554886 -3.408113 39.346008
+v 87.747459 -3.541437 39.346008
+v 87.880783 -2.348866 39.346008
+v 86.688210 -2.215542 39.346008
+v 84.456985 -15.427389 39.346008
+v 85.592918 -15.814242 39.346008
+v 85.979774 -14.678308 39.346008
+v 84.843842 -14.291456 39.346008
+v 85.836327 -9.474686 39.346008
+v 87.007095 -9.737949 39.346008
+v 87.270355 -8.567183 39.346008
+v 86.099586 -8.303920 39.346008
+v 76.733490 -31.998528 39.346008
+v 77.707352 -32.699673 39.346008
+v 78.408493 -31.725819 39.346008
+v 77.434639 -31.024672 39.346008
+v 79.858154 -26.739319 39.346008
+v 80.893417 -27.346136 39.346008
+v 81.500237 -26.310871 39.346008
+v 80.464973 -25.704054 39.346008
+v 82.449623 -21.200796 39.346008
+v 83.539650 -21.702639 39.346008
+v 84.041489 -20.612614 39.346008
+v 82.951462 -20.110771 39.346008
+v 73.914452 -36.037220 39.346008
+v 73.129623 -36.944988 39.346008
+v 73.129623 -36.944988 39.046009
+v 74.037392 -37.729816 39.346008
+v 70.797432 -41.574772 39.346008
+v 69.958786 -40.716473 39.346008
+v 69.958786 -40.716473 39.046009
+v 69.100487 -41.555115 39.046009
+v 69.100487 -41.555115 39.346008
+v 69.939125 -42.413418 39.346008
+v 74.822220 -36.822048 39.346008
+v 49.710224 -56.409889 39.046005
+v 49.710224 -56.409889 39.346004
+v 50.262779 -57.475101 39.346004
+v 51.327995 -56.922546 39.346004
+v 50.775436 -55.857330 39.346004
+v 50.775436 -55.857330 39.046005
+v 54.960621 -53.243546 39.046005
+v 54.960621 -53.243546 39.346004
+v 55.584789 -54.268444 39.346004
+v 56.609688 -53.644279 39.346004
+v 55.985519 -52.619381 39.346004
+v 55.985519 -52.619381 39.046005
+v 59.969803 -49.711075 39.046005
+v 59.969803 -49.711075 39.346004
+v 60.665844 -50.688587 39.346004
+v 61.643353 -49.992546 39.346004
+v 60.947311 -49.015034 39.346004
+v 60.947311 -49.015034 39.046005
+v 64.697800 -45.813492 39.046005
+v 64.697800 -45.813492 39.346004
+v 65.465553 -46.735748 39.346004
+v 66.387810 -45.967995 39.346004
+v 65.620056 -45.045738 39.346004
+v 65.620056 -45.045738 39.046005
+v 38.626053 -61.650124 39.346004
+v 39.037083 -62.777531 39.346004
+v 40.164494 -62.366501 39.346004
+v 39.753460 -61.239090 39.346004
+v 44.254574 -59.211262 39.346004
+v 44.736046 -60.310436 39.346004
+v 45.835220 -59.828964 39.346004
+v 45.353752 -58.729790 39.346004
+v 20.982563 -66.823250 39.346004
+v 21.186155 -68.005852 39.346004
+v 22.368757 -67.802261 39.346004
+v 22.165165 -66.619659 39.346004
+v 32.853870 -63.729580 39.346004
+v 33.195145 -64.880028 39.346004
+v 34.345592 -64.538757 39.346004
+v 34.004322 -63.388309 39.346004
+v 26.964590 -65.452919 39.346004
+v 27.236742 -66.621651 39.346004
+v 28.405474 -66.349495 39.346004
+v 28.133322 -65.180763 39.346004
+v 8.829425 -68.515175 39.346004
+v 8.897084 -69.713264 39.346004
+v 10.095175 -69.645607 39.346004
+v 10.027516 -68.447517 39.346004
+v 14.930408 -67.843285 39.346004
+v 15.065881 -69.035614 39.346004
+v 16.258209 -68.900146 39.346004
+v 16.122736 -67.707817 39.346004
+v -3.438015 -68.819641 39.346004
+v -3.505674 -70.017731 39.346004
+v -2.307583 -70.085388 39.346004
+v -2.239924 -68.887299 39.346004
+v 2.700000 -68.840378 39.346004
+v 2.700000 -70.040382 39.346004
+v 3.900000 -70.040382 39.346004
+v 3.900000 -68.840378 39.346004
+v -15.660848 -67.739410 39.346004
+v -15.864440 -68.922012 39.346004
+v -14.681837 -69.125610 39.346004
+v -14.478245 -67.943001 39.346004
+v -9.564930 -68.452911 39.346004
+v -9.700402 -69.645241 39.346004
+v -8.508074 -69.780716 39.346004
+v -8.372602 -68.588387 39.346004
+v -33.552708 -63.499767 39.346004
+v -33.963741 -64.627174 39.346004
+v -32.836330 -65.038208 39.346004
+v -32.425297 -63.910797 39.346004
+v -27.676849 -65.265305 39.346004
+v -28.018122 -66.415749 39.346004
+v -26.867672 -66.757027 39.346004
+v -26.526402 -65.606575 39.346004
+v -21.705299 -66.677605 39.346004
+v -21.977451 -67.846336 39.346004
+v -20.808720 -68.118492 39.346004
+v -20.536568 -66.949760 39.346004
+v -44.916759 -58.896397 39.346004
+v -45.469318 -59.961613 39.346004
+v -44.404106 -60.514168 39.346004
+v -43.851547 -59.448956 39.346004
+v -39.308289 -61.377880 39.346004
+v -39.789761 -62.477055 39.346004
+v -38.690582 -62.958527 39.346004
+v -38.209114 -61.859352 39.346004
+v -65.238136 -45.329006 39.046005
+v -65.238136 -45.329006 39.346004
+v -66.076782 -46.187305 39.346004
+v -65.218475 -47.025948 39.346004
+v -64.379837 -46.167648 39.346004
+v -64.379837 -46.167648 39.046005
+v -60.547653 -49.268379 39.046005
+v -60.547653 -49.268379 39.346004
+v -61.315403 -50.190636 39.346004
+v -60.393147 -50.958385 39.346004
+v -59.625397 -50.036133 39.346004
+v -59.625397 -50.036133 39.046005
+v -55.571003 -52.843262 39.046005
+v -55.571003 -52.843262 39.346004
+v -56.267044 -53.820770 39.346004
+v -55.289536 -54.516811 39.346004
+v -54.593494 -53.539303 39.346004
+v -50.348579 -56.052292 39.346004
+v -49.323681 -56.676460 39.346004
+v -50.972744 -57.077190 39.346004
+v -49.947845 -57.701359 39.346004
+v -68.813065 -41.937717 39.346008
+v -69.597893 -41.029945 39.346008
+v -69.597893 -41.029945 39.046009
+v -70.505661 -41.814777 39.346008
+v -69.720833 -42.722546 39.346008
+v -73.578339 -36.380875 39.346008
+v -74.552193 -37.082020 39.346008
+v -73.851044 -38.055874 39.346008
+v -72.877190 -37.354729 39.346008
+v -80.191330 -26.105907 39.346008
+v -81.281357 -26.607750 39.346008
+v -80.779510 -27.697775 39.346008
+v -79.689491 -27.195932 39.346008
+v -82.716148 -20.539089 39.346008
+v -83.852081 -20.925943 39.346008
+v -83.465233 -22.061876 39.346008
+v -82.329292 -21.675024 39.346008
+v -77.127480 -31.398010 39.346008
+v -78.162743 -32.004826 39.346008
+v -77.555923 -33.040089 39.346008
+v -76.520660 -32.433273 39.346008
+v -85.954933 -8.774680 39.346008
+v -87.147499 -8.908004 39.346008
+v -87.014175 -10.100574 39.346008
+v -85.821609 -9.967251 39.346008
+v -84.651642 -14.743131 39.346008
+v -85.822403 -15.006393 39.346008
+v -85.559143 -16.177160 39.346008
+v -84.388374 -15.913897 39.346008
+v -86.554886 3.408109 39.346008
+v -87.747459 3.541433 39.346008
+v -87.880783 2.348862 39.346008
+v -86.688210 2.215538 39.346008
+v -86.594734 -2.700002 39.346008
+v -87.794739 -2.700002 39.346008
+v -87.794739 -3.900002 39.346008
+v -86.594734 -3.900002 39.346008
+v -84.456985 15.427385 39.346008
+v -85.592918 15.814239 39.346008
+v -85.979774 14.678305 39.346008
+v -84.843842 14.291452 39.346008
+v -85.836327 9.474682 39.346008
+v -87.007095 9.737946 39.346008
+v -87.270355 8.567180 39.346008
+v -86.099586 8.303916 39.346008
+v -76.733490 31.998524 39.346008
+v -77.707352 32.699673 39.346008
+v -78.408493 31.725815 39.346008
+v -77.434639 31.024668 39.346008
+v -79.858154 26.739315 39.346008
+v -80.893417 27.346132 39.346008
+v -81.500237 26.310867 39.346008
+v -80.464973 25.704050 39.346008
+v -82.449623 21.200792 39.346008
+v -83.539650 21.702635 39.346008
+v -84.041489 20.612610 39.346008
+v -82.951462 20.110767 39.346008
+v -73.914452 36.037220 39.346008
+v -73.129623 36.944988 39.346008
+v -73.129623 36.944988 39.046009
+v -74.037392 37.729816 39.346008
+v -70.797432 41.574772 39.346008
+v -69.958786 40.716473 39.346008
+v -69.958786 40.716473 39.046009
+v -69.100487 41.555115 39.046009
+v -69.100487 41.555115 39.346008
+v -69.939125 42.413418 39.346008
+v -74.822220 36.822048 39.346008
+v -49.710224 56.409889 39.046013
+v -49.710224 56.409889 39.346012
+v -50.262779 57.475101 39.346012
+v -51.327995 56.922546 39.346012
+v -50.775436 55.857330 39.346012
+v -50.775436 55.857330 39.046013
+v -54.960621 53.243546 39.046013
+v -54.960621 53.243546 39.346012
+v -55.584789 54.268444 39.346012
+v -56.609688 53.644279 39.346012
+v -55.985519 52.619381 39.346012
+v -55.985519 52.619381 39.046013
+v -59.969803 49.711075 39.046013
+v -59.969803 49.711075 39.346012
+v -60.665844 50.688587 39.346012
+v -61.643353 49.992546 39.346012
+v -60.947311 49.015034 39.346012
+v -60.947311 49.015034 39.046013
+v -64.697800 45.813492 39.046013
+v -64.697800 45.813492 39.346012
+v -65.465553 46.735748 39.346012
+v -66.387810 45.967995 39.346012
+v -65.620056 45.045738 39.346012
+v -65.620056 45.045738 39.046013
+v -38.626053 61.650124 39.346012
+v -39.037083 62.777531 39.346012
+v -40.164494 62.366501 39.346012
+v -39.753460 61.239090 39.346012
+v -44.254574 59.211262 39.346012
+v -44.736046 60.310436 39.346012
+v -45.835220 59.828964 39.346012
+v -45.353752 58.729790 39.346012
+v -20.982563 66.823250 39.346012
+v -21.186155 68.005852 39.346012
+v -22.368757 67.802261 39.346012
+v -22.165165 66.619659 39.346012
+v -32.853870 63.729580 39.346012
+v -33.195145 64.880028 39.346012
+v -34.345592 64.538757 39.346012
+v -34.004322 63.388309 39.346012
+v -26.964590 65.452919 39.346012
+v -27.236742 66.621651 39.346012
+v -28.405474 66.349495 39.346012
+v -28.133322 65.180763 39.346012
+v -8.829425 68.515175 39.346012
+v -8.897084 69.713264 39.346012
+v -10.095175 69.645607 39.346012
+v -10.027516 68.447517 39.346012
+v -14.930408 67.843285 39.346012
+v -15.065881 69.035614 39.346012
+v -16.258209 68.900146 39.346012
+v -16.122736 67.707817 39.346012
+v 3.438015 68.819641 39.346012
+v 3.505674 70.017731 39.346012
+v 2.307583 70.085388 39.346012
+v 2.239924 68.887299 39.346012
+v -2.700000 68.840378 39.346012
+v -2.700000 70.040382 39.346012
+v -3.900000 70.040382 39.346012
+v -3.900000 68.840378 39.346012
+v 15.660848 67.739410 39.346012
+v 15.864440 68.922012 39.346012
+v 14.681837 69.125610 39.346012
+v 14.478245 67.943001 39.346012
+v 9.564930 68.452911 39.346012
+v 9.700402 69.645241 39.346012
+v 8.508074 69.780716 39.346012
+v 8.372602 68.588387 39.346012
+v 33.552708 63.499767 39.346012
+v 33.963741 64.627174 39.346012
+v 32.836330 65.038208 39.346012
+v 32.425297 63.910797 39.346012
+v 27.676849 65.265305 39.346012
+v 28.018122 66.415749 39.346012
+v 26.867672 66.757027 39.346012
+v 26.526402 65.606575 39.346012
+v 21.705299 66.677605 39.346012
+v 21.977451 67.846336 39.346012
+v 20.808720 68.118492 39.346012
+v 20.536568 66.949760 39.346012
+v 44.916759 58.896397 39.346012
+v 45.469318 59.961613 39.346012
+v 44.404106 60.514168 39.346012
+v 43.851547 59.448956 39.346012
+v 39.308289 61.377880 39.346012
+v 39.789761 62.477055 39.346012
+v 38.690582 62.958527 39.346012
+v 38.209114 61.859352 39.346012
+v 65.238136 45.329006 39.046013
+v 65.238136 45.329006 39.346012
+v 66.076782 46.187305 39.346012
+v 65.218475 47.025948 39.346012
+v 64.379837 46.167648 39.346012
+v 64.379837 46.167648 39.046013
+v 60.547653 49.268379 39.046013
+v 60.547653 49.268379 39.346012
+v 61.315403 50.190636 39.346012
+v 60.393147 50.958385 39.346012
+v 59.625397 50.036133 39.346012
+v 59.625397 50.036133 39.046013
+v 55.571003 52.843262 39.046013
+v 55.571003 52.843262 39.346012
+v 56.267044 53.820770 39.346012
+v 55.289536 54.516811 39.346012
+v 54.593494 53.539303 39.346012
+v 49.323681 56.676460 39.346012
+v 50.348579 56.052292 39.346012
+v 50.972744 57.077190 39.346012
+v 49.947845 57.701359 39.346012
+v 68.813065 41.937717 39.346008
+v 69.597893 41.029945 39.346008
+v 69.597893 41.029945 39.046009
+v 70.505661 41.814777 39.346008
+v 69.720833 42.722546 39.346008
+v 73.578339 36.380875 39.346008
+v 74.552193 37.082020 39.346008
+v 73.851044 38.055874 39.346008
+v 72.877190 37.354729 39.346008
+v 80.191330 26.105904 39.346008
+v 81.281357 26.607746 39.346008
+v 80.779510 27.697771 39.346008
+v 79.689491 27.195929 39.346008
+v 82.716148 20.539085 39.346008
+v 83.852081 20.925940 39.346008
+v 83.465233 22.061872 39.346008
+v 82.329292 21.675020 39.346008
+v 77.127480 31.398006 39.346008
+v 78.162743 32.004826 39.346008
+v 77.555923 33.040089 39.346008
+v 76.520660 32.433273 39.346008
+v 85.954933 8.774676 39.346008
+v 87.147499 8.908000 39.346008
+v 87.014175 10.100571 39.346008
+v 85.821609 9.967247 39.346008
+v 84.651642 14.743127 39.346008
+v 85.822403 15.006390 39.346008
+v 85.559143 16.177156 39.346008
+v 84.388374 15.913893 39.346008
+v 86.594734 2.699998 39.346008
+v 87.794739 2.699998 39.346008
+v 87.794739 3.899998 39.346008
+v 86.594734 3.899998 39.346008
+v 93.274063 -0.503655 48.274822
+v 91.457047 15.289531 48.274822
+v 86.305145 29.484779 48.274822
+v 78.942131 41.252430 48.274822
+v 70.396507 50.581177 48.274826
+v 58.207840 59.884666 48.274826
+v 44.081921 67.147667 48.274826
+v 24.938196 73.021431 48.274826
+v 3.140965 75.555679 48.274826
+v -15.249976 74.671791 48.274826
+v -36.948601 69.862679 48.274826
+v -54.952732 61.931622 48.274826
+v -70.727165 50.389290 48.274826
+v -82.309273 36.625053 48.274822
+v -89.528076 21.969513 48.274822
+v -92.956276 6.533831 48.274822
+v -92.559654 -9.603173 48.274822
+v -88.467232 -24.656588 48.274822
+v -81.693405 -37.431389 48.274822
+v -73.390442 -47.659477 48.274818
+v -64.353806 -55.639553 48.274818
+v -51.833572 -63.537663 48.274818
+v -37.474033 -69.619499 48.274818
+v -18.066238 -74.255798 48.274818
+v 0.307383 -75.598206 48.274818
+v 22.333014 -73.581161 48.274818
+v 46.832596 -66.044899 48.274818
+v 64.611435 -55.552139 48.274818
+v 78.303215 -42.192638 48.274822
+v 87.683479 -26.656624 48.274822
+v 91.755058 -14.122890 48.274822
+v 86.774185 -2.828891 39.346008
+v 86.953056 -3.237905 39.346008
+v 87.396706 -3.287504 39.346008
+v 87.038963 -2.469475 39.346008
+v 87.661491 -2.928088 39.346008
+v 87.482613 -2.519073 39.346008
+v 84.795799 -14.908935 39.346008
+v 84.882454 -15.346860 39.346008
+v 85.305038 -15.490774 39.346008
+v 85.131721 -14.614923 39.346008
+v 85.640961 -15.196764 39.346008
+v 85.554306 -14.758839 39.346008
+v 86.117798 -8.922997 39.346008
+v 86.250755 -9.349156 39.346008
+v 86.686295 -9.447094 39.346008
+v 86.420387 -8.594775 39.346008
+v 86.988884 -9.118873 39.346008
+v 86.855927 -8.692714 39.346008
+v 77.208702 -31.601337 39.346008
+v 77.163956 -32.045506 39.346008
+v 77.526245 -32.306339 39.346008
+v 77.615738 -31.418005 39.346008
+v 77.933281 -32.123009 39.346008
+v 77.978027 -31.678841 39.346008
+v 80.294060 -26.299351 39.346008
+v 80.291130 -26.745758 39.346008
+v 80.676262 -26.971502 39.346008
+v 80.682129 -26.078688 39.346008
+v 81.064331 -26.750839 39.346008
+v 81.067261 -26.304432 39.346008
+v 82.840050 -20.720011 39.346008
+v 82.881126 -21.164536 39.346008
+v 83.286629 -21.351229 39.346008
+v 83.204483 -20.462181 39.346008
+v 83.651062 -21.093397 39.346008
+v 83.609985 -20.648872 39.346008
+v 73.638222 -36.591549 39.346008
+v 73.554222 -37.029995 39.346008
+v 73.891922 -37.321960 39.346008
+v 74.059921 -36.445076 39.346008
+v 74.313629 -37.175484 39.346008
+v 74.397629 -36.737041 39.346008
+v 69.636971 -41.245644 39.346008
+v 69.516441 -41.675484 39.346008
+v 69.828430 -41.994785 39.346008
+v 70.069489 -41.135105 39.346008
+v 70.260948 -41.884243 39.346008
+v 70.381470 -41.454407 39.346008
+v 50.313549 -56.269943 39.346004
+v 50.073143 -56.646099 39.346004
+v 50.278706 -57.042374 39.346004
+v 50.759514 -56.290062 39.346004
+v 50.724667 -57.062492 39.346004
+v 50.965073 -56.686337 39.346004
+v 55.552956 -53.062637 39.346004
+v 55.338860 -53.454365 39.346004
+v 55.571060 -53.835640 39.346004
+v 55.999252 -53.052185 39.346004
+v 56.017353 -53.825191 39.346004
+v 56.231449 -53.433460 39.346004
+v 60.547642 -49.488163 39.346004
+v 60.362179 -49.894234 39.346004
+v 60.621117 -50.257881 39.346004
+v 60.992039 -49.445740 39.346004
+v 61.065514 -50.215458 39.346004
+v 61.250973 -49.809387 39.346004
+v 65.257195 -45.547649 39.346004
+v 65.102875 -45.966549 39.346004
+v 65.388489 -46.309639 39.346004
+v 65.697128 -45.471848 39.346004
+v 65.828423 -46.233837 39.346004
+v 65.982742 -45.814941 39.346004
+v 39.242363 -61.588898 39.346004
+v 38.955597 -61.931030 39.346004
+v 39.108505 -62.350441 39.346004
+v 39.682041 -61.666180 39.346004
+v 39.548183 -62.427723 39.346004
+v 39.834949 -62.085594 39.346004
+v 44.865784 -59.111206 39.346004
+v 44.601215 -59.470776 39.346004
+v 44.780331 -59.879684 39.346004
+v 45.309467 -59.160542 39.346004
+v 45.224014 -59.929024 39.346004
+v 45.488583 -59.569450 39.346004
+v 21.599920 -66.872810 39.346004
+v 21.256786 -67.158379 39.346004
+v 21.332525 -67.598320 39.346004
+v 22.018795 -67.027191 39.346004
+v 21.751400 -67.752701 39.346004
+v 22.094534 -67.467133 39.346004
+v 33.472775 -63.706184 39.346004
+v 33.165607 -64.030128 39.346004
+v 33.292568 -64.458107 39.346004
+v 33.906898 -63.810230 39.346004
+v 33.726692 -64.562149 39.346004
+v 34.033855 -64.238213 39.346004
+v 27.583786 -65.466423 39.346004
+v 27.257875 -65.771492 39.346004
+v 27.359119 -66.206284 39.346004
+v 28.010944 -65.596130 39.346004
+v 27.786276 -66.335991 39.346004
+v 28.112188 -66.030922 39.346004
+v 9.437130 -68.634682 39.346004
+v 9.063722 -68.879333 39.346004
+v 9.088891 -69.325043 39.346004
+v 9.835709 -68.835739 39.346004
+v 9.487470 -69.526100 39.346004
+v 9.860879 -69.281448 39.346004
+v 15.543911 -67.928154 39.346004
+v 15.184973 -68.193581 39.346004
+v 15.235371 -68.637146 39.346004
+v 15.953247 -68.106285 39.346004
+v 15.644706 -68.815277 39.346004
+v 16.003645 -68.549850 39.346004
+v -2.847629 -69.006805 39.346004
+v -3.246208 -69.207863 39.346004
+v -3.271378 -69.653572 39.346004
+v -2.474221 -69.251457 39.346004
+v -2.897969 -69.898224 39.346004
+v -2.499390 -69.697166 39.346004
+v 3.300000 -68.993965 39.346004
+v 2.913391 -69.217171 39.346004
+v 2.913391 -69.663589 39.346004
+v 3.686609 -69.217171 39.346004
+v 3.300000 -69.886795 39.346004
+v 3.686609 -69.663589 39.346004
+v -15.095603 -67.992561 39.346004
+v -15.514477 -68.146942 39.346004
+v -15.590216 -68.586891 39.346004
+v -14.752469 -68.278130 39.346004
+v -15.247082 -68.872452 39.346004
+v -14.828208 -68.718079 39.346004
+v -8.986104 -68.673256 39.346004
+v -9.395440 -68.851387 39.346004
+v -9.445838 -69.294952 39.346004
+v -8.627166 -68.938683 39.346004
+v -9.086900 -69.560379 39.346004
+v -8.677564 -69.382240 39.346004
+v -33.041611 -63.849575 39.346004
+v -33.481285 -63.926857 39.346004
+v -33.634197 -64.346268 39.346004
+v -32.754841 -64.191704 39.346004
+v -33.347427 -64.688400 39.346004
+v -32.907753 -64.611115 39.346004
+v -27.145304 -65.583176 39.346004
+v -27.579428 -65.687225 39.346004
+v -27.706385 -66.115204 39.346004
+v -26.838137 -65.907120 39.346004
+v -27.399220 -66.439148 39.346004
+v -26.965096 -66.335106 39.346004
+v -21.155766 -66.963264 39.346004
+v -21.582922 -67.092972 39.346004
+v -21.684166 -67.527756 39.346004
+v -20.829853 -67.268333 39.346004
+v -21.358253 -67.832832 39.346004
+v -20.931097 -67.703117 39.346004
+v -44.454872 -59.309010 39.346004
+v -44.900837 -59.329124 39.346004
+v -45.106396 -59.725399 39.346004
+v -44.214470 -59.685165 39.346004
+v -44.865993 -60.101559 39.346004
+v -44.420029 -60.081440 39.346004
+v -38.820320 -61.759293 39.346004
+v -39.264004 -61.808632 39.346004
+v -39.443119 -62.217541 39.346004
+v -38.555752 -62.118866 39.346004
+v -39.178551 -62.577110 39.346004
+v -38.734867 -62.527775 39.346004
+v -64.916321 -45.858177 39.346004
+v -65.348839 -45.747639 39.346004
+v -65.660820 -46.066940 39.346004
+v -64.795792 -46.288017 39.346004
+v -65.540291 -46.496777 39.346004
+v -65.107780 -46.607315 39.346004
+v -60.184784 -49.770290 39.346004
+v -60.624718 -49.694485 39.346004
+v -60.910336 -50.037579 39.346004
+v -60.030464 -50.189186 39.346004
+v -60.756016 -50.456474 39.346004
+v -60.316082 -50.532280 39.346004
+v -55.171333 -53.316387 39.346004
+v -55.615730 -53.273968 39.346004
+v -55.874668 -53.637615 39.346004
+v -54.985874 -53.722458 39.346004
+v -55.689209 -54.043686 39.346004
+v -55.244812 -54.086105 39.346004
+v -49.916016 -56.495548 39.346004
+v -50.362309 -56.485096 39.346004
+v -50.594509 -56.866375 39.346004
+v -49.701920 -56.887276 39.346004
+v -50.380413 -57.258102 39.346004
+v -49.934116 -57.268555 39.346004
+v -69.321663 -41.584278 39.346008
+v -69.743362 -41.437801 39.346008
+v -70.081070 -41.729771 39.346008
+v -69.237663 -42.022720 39.346008
+v -69.997070 -42.168213 39.346008
+v -69.575363 -42.314690 39.346008
+v -73.352402 -36.957539 39.346008
+v -73.759438 -36.774204 39.346008
+v -74.121727 -37.035042 39.346008
+v -73.307655 -37.401707 39.346008
+v -74.076981 -37.479210 39.346008
+v -73.669945 -37.662544 39.346008
+v -80.079918 -26.715149 39.346008
+v -80.444351 -26.457317 39.346008
+v -80.849854 -26.644011 39.346008
+v -80.120987 -27.159672 39.346008
+v -80.890930 -27.088533 39.346008
+v -80.526497 -27.346365 39.346008
+v -82.668106 -21.156569 39.346008
+v -83.004028 -20.862558 39.346008
+v -83.426613 -21.006472 39.346008
+v -82.754761 -21.594494 39.346008
+v -83.513275 -21.444397 39.346008
+v -83.177345 -21.738409 39.346008
+v -76.956566 -31.993307 39.346008
+v -77.344635 -31.772644 39.346008
+v -77.729767 -31.998388 39.346008
+v -76.953636 -32.439713 39.346008
+v -77.726837 -32.444794 39.346008
+v -77.338768 -32.665459 39.346008
+v -86.040901 -9.388029 39.346008
+v -86.305679 -9.028613 39.346008
+v -86.749336 -9.078212 39.346008
+v -86.219772 -9.797044 39.346008
+v -86.928207 -9.487226 39.346008
+v -86.663429 -9.846642 39.346008
+v -84.669846 -15.362208 39.346008
+v -84.972435 -15.033987 39.346008
+v -85.407974 -15.131925 39.346008
+v -84.802803 -15.788367 39.346008
+v -85.540932 -15.558084 39.346008
+v -85.238342 -15.886305 39.346008
+v -86.774185 2.828887 39.346008
+v -86.953056 3.237901 39.346008
+v -87.396706 3.287500 39.346008
+v -87.038963 2.469471 39.346008
+v -87.661491 2.928084 39.346008
+v -87.482613 2.519069 39.346008
+v -86.748322 -3.300002 39.346008
+v -86.971527 -2.913393 39.346008
+v -87.417946 -2.913393 39.346008
+v -86.971527 -3.686611 39.346008
+v -87.641151 -3.300002 39.346008
+v -87.417946 -3.686611 39.346008
+v -84.795799 14.908931 39.346008
+v -84.882454 15.346856 39.346008
+v -85.305038 15.490770 39.346008
+v -85.131721 14.614920 39.346008
+v -85.640961 15.196760 39.346008
+v -85.554306 14.758835 39.346008
+v -86.117798 8.922993 39.346008
+v -86.250755 9.349153 39.346008
+v -86.686295 9.447090 39.346008
+v -86.420387 8.594771 39.346008
+v -86.988884 9.118869 39.346008
+v -86.855927 8.692710 39.346008
+v -77.208702 31.601334 39.346008
+v -77.163956 32.045506 39.346008
+v -77.526245 32.306339 39.346008
+v -77.615738 31.418001 39.346008
+v -77.933281 32.123009 39.346008
+v -77.978027 31.678837 39.346008
+v -80.294060 26.299347 39.346008
+v -80.291130 26.745754 39.346008
+v -80.676262 26.971498 39.346008
+v -80.682129 26.078684 39.346008
+v -81.064331 26.750835 39.346008
+v -81.067261 26.304428 39.346008
+v -82.840050 20.720007 39.346008
+v -82.881126 21.164532 39.346008
+v -83.286629 21.351225 39.346008
+v -83.204483 20.462177 39.346008
+v -83.651062 21.093393 39.346008
+v -83.609985 20.648869 39.346008
+v -73.638222 36.591549 39.346008
+v -73.554222 37.029995 39.346008
+v -73.891922 37.321960 39.346008
+v -74.059921 36.445076 39.346008
+v -74.313629 37.175484 39.346008
+v -74.397629 36.737041 39.346008
+v -69.636971 41.245644 39.346008
+v -69.516441 41.675484 39.346008
+v -69.828430 41.994785 39.346008
+v -70.069489 41.135105 39.346008
+v -70.260948 41.884243 39.346008
+v -70.381470 41.454407 39.346008
+v -50.313549 56.269943 39.346012
+v -50.073143 56.646099 39.346012
+v -50.278706 57.042374 39.346012
+v -50.759514 56.290062 39.346012
+v -50.724667 57.062492 39.346012
+v -50.965073 56.686337 39.346012
+v -55.552956 53.062637 39.346012
+v -55.338860 53.454365 39.346012
+v -55.571060 53.835640 39.346012
+v -55.999252 53.052185 39.346012
+v -56.017353 53.825191 39.346012
+v -56.231449 53.433460 39.346012
+v -60.547642 49.488163 39.346012
+v -60.362179 49.894234 39.346012
+v -60.621117 50.257881 39.346012
+v -60.992039 49.445740 39.346012
+v -61.065514 50.215458 39.346012
+v -61.250973 49.809387 39.346012
+v -65.257195 45.547649 39.346012
+v -65.102875 45.966549 39.346012
+v -65.388489 46.309639 39.346012
+v -65.697128 45.471848 39.346012
+v -65.828423 46.233837 39.346012
+v -65.982742 45.814941 39.346012
+v -39.242363 61.588898 39.346012
+v -38.955597 61.931030 39.346012
+v -39.108505 62.350441 39.346012
+v -39.682041 61.666180 39.346012
+v -39.548183 62.427723 39.346012
+v -39.834949 62.085594 39.346012
+v -44.865784 59.111206 39.346012
+v -44.601215 59.470776 39.346012
+v -44.780331 59.879684 39.346012
+v -45.309467 59.160542 39.346012
+v -45.224014 59.929024 39.346012
+v -45.488583 59.569450 39.346012
+v -21.599920 66.872810 39.346012
+v -21.256786 67.158379 39.346012
+v -21.332525 67.598320 39.346012
+v -22.018795 67.027191 39.346012
+v -21.751400 67.752701 39.346012
+v -22.094534 67.467133 39.346012
+v -33.472775 63.706184 39.346012
+v -33.165607 64.030128 39.346012
+v -33.292568 64.458107 39.346012
+v -33.906898 63.810230 39.346012
+v -33.726692 64.562149 39.346012
+v -34.033855 64.238213 39.346012
+v -27.583786 65.466423 39.346012
+v -27.257875 65.771492 39.346012
+v -27.359119 66.206284 39.346012
+v -28.010944 65.596130 39.346012
+v -27.786276 66.335991 39.346012
+v -28.112188 66.030922 39.346012
+v -9.437130 68.634682 39.346012
+v -9.063722 68.879333 39.346012
+v -9.088891 69.325043 39.346012
+v -9.835709 68.835739 39.346012
+v -9.487470 69.526100 39.346012
+v -9.860879 69.281448 39.346012
+v -15.543911 67.928154 39.346012
+v -15.184973 68.193581 39.346012
+v -15.235371 68.637146 39.346012
+v -15.953247 68.106285 39.346012
+v -15.644706 68.815277 39.346012
+v -16.003645 68.549850 39.346012
+v 2.847629 69.006805 39.346012
+v 3.246208 69.207863 39.346012
+v 3.271378 69.653572 39.346012
+v 2.474221 69.251457 39.346012
+v 2.897969 69.898224 39.346012
+v 2.499390 69.697166 39.346012
+v -3.300000 68.993965 39.346012
+v -2.913391 69.217171 39.346012
+v -2.913391 69.663589 39.346012
+v -3.686609 69.217171 39.346012
+v -3.300000 69.886795 39.346012
+v -3.686609 69.663589 39.346012
+v 15.095603 67.992561 39.346012
+v 15.514477 68.146942 39.346012
+v 15.590216 68.586891 39.346012
+v 14.752469 68.278130 39.346012
+v 15.247082 68.872452 39.346012
+v 14.828208 68.718079 39.346012
+v 8.986104 68.673256 39.346012
+v 9.395440 68.851387 39.346012
+v 9.445838 69.294952 39.346012
+v 8.627166 68.938683 39.346012
+v 9.086900 69.560379 39.346012
+v 8.677564 69.382240 39.346012
+v 33.041611 63.849575 39.346012
+v 33.481285 63.926857 39.346012
+v 33.634197 64.346268 39.346012
+v 32.754841 64.191704 39.346012
+v 33.347427 64.688400 39.346012
+v 32.907753 64.611115 39.346012
+v 27.145304 65.583176 39.346012
+v 27.579428 65.687225 39.346012
+v 27.706385 66.115204 39.346012
+v 26.838137 65.907120 39.346012
+v 27.399220 66.439148 39.346012
+v 26.965096 66.335106 39.346012
+v 21.155766 66.963264 39.346012
+v 21.582922 67.092972 39.346012
+v 21.684166 67.527756 39.346012
+v 20.829853 67.268333 39.346012
+v 21.358253 67.832832 39.346012
+v 20.931097 67.703117 39.346012
+v 44.454872 59.309010 39.346012
+v 44.900837 59.329124 39.346012
+v 45.106396 59.725399 39.346012
+v 44.214470 59.685165 39.346012
+v 44.865993 60.101559 39.346012
+v 44.420029 60.081440 39.346012
+v 38.820320 61.759293 39.346012
+v 39.264004 61.808632 39.346012
+v 39.443119 62.217541 39.346012
+v 38.555752 62.118866 39.346012
+v 39.178551 62.577110 39.346012
+v 38.734867 62.527775 39.346012
+v 64.916321 45.858177 39.346012
+v 65.348839 45.747639 39.346012
+v 65.660820 46.066940 39.346012
+v 64.795792 46.288017 39.346012
+v 65.540291 46.496777 39.346012
+v 65.107780 46.607315 39.346012
+v 60.184784 49.770290 39.346012
+v 60.624718 49.694485 39.346012
+v 60.910336 50.037579 39.346012
+v 60.030464 50.189186 39.346012
+v 60.756016 50.456474 39.346012
+v 60.316082 50.532280 39.346012
+v 55.171333 53.316387 39.346012
+v 55.615730 53.273968 39.346012
+v 55.874668 53.637615 39.346012
+v 54.985874 53.722458 39.346012
+v 55.689209 54.043686 39.346012
+v 55.244812 54.086105 39.346012
+v 49.916016 56.495548 39.346012
+v 50.362309 56.485096 39.346012
+v 50.594509 56.866375 39.346012
+v 49.701920 56.887276 39.346012
+v 50.380413 57.258102 39.346012
+v 49.934116 57.268555 39.346012
+v 69.321663 41.584278 39.346008
+v 69.743362 41.437801 39.346008
+v 70.081070 41.729771 39.346008
+v 69.237663 42.022720 39.346008
+v 69.997070 42.168213 39.346008
+v 69.575363 42.314690 39.346008
+v 73.352402 36.957539 39.346008
+v 73.759438 36.774204 39.346008
+v 74.121727 37.035042 39.346008
+v 73.307655 37.401707 39.346008
+v 74.076981 37.479210 39.346008
+v 73.669945 37.662544 39.346008
+v 80.079918 26.715145 39.346008
+v 80.444351 26.457314 39.346008
+v 80.849854 26.644007 39.346008
+v 80.120987 27.159668 39.346008
+v 80.890930 27.088530 39.346008
+v 80.526497 27.346361 39.346008
+v 82.668106 21.156565 39.346008
+v 83.004028 20.862555 39.346008
+v 83.426613 21.006468 39.346008
+v 82.754761 21.594490 39.346008
+v 83.513275 21.444393 39.346008
+v 83.177345 21.738405 39.346008
+v 76.956566 31.993303 39.346008
+v 77.344635 31.772640 39.346008
+v 77.729767 31.998384 39.346008
+v 76.953636 32.439713 39.346008
+v 77.726837 32.444794 39.346008
+v 77.338768 32.665459 39.346008
+v 86.040901 9.388025 39.346008
+v 86.305679 9.028609 39.346008
+v 86.749336 9.078208 39.346008
+v 86.219772 9.797040 39.346008
+v 86.928207 9.487223 39.346008
+v 86.663429 9.846638 39.346008
+v 84.669846 15.362205 39.346008
+v 84.972435 15.033983 39.346008
+v 85.407974 15.131921 39.346008
+v 84.802803 15.788363 39.346008
+v 85.540932 15.558080 39.346008
+v 85.238342 15.886301 39.346008
+v 86.748322 3.299998 39.346008
+v 86.971527 2.913389 39.346008
+v 87.417946 2.913389 39.346008
+v 86.971527 3.686607 39.346008
+v 87.641151 3.299998 39.346008
+v 87.417946 3.686607 39.346008
+v 93.274063 -0.503655 48.832260
+v 91.457047 15.289531 48.832260
+v 86.305145 29.484779 48.832260
+v 78.942131 41.252430 48.832260
+v 70.396507 50.581177 48.832264
+v 58.207840 59.884666 48.832264
+v 44.081921 67.147667 48.832264
+v 24.938196 73.021431 48.832264
+v 3.140965 75.555679 48.832264
+v -15.249976 74.671791 48.832264
+v -36.948601 69.862679 48.832264
+v -54.952732 61.931622 48.832264
+v -70.727165 50.389290 48.832264
+v -82.309273 36.625053 48.832260
+v -89.528076 21.969513 48.832260
+v -92.956276 6.533831 48.832260
+v -92.559654 -9.603173 48.832260
+v -88.467232 -24.656588 48.832260
+v -81.693405 -37.431389 48.832260
+v -73.390442 -47.659477 48.832256
+v -64.353806 -55.639553 48.832256
+v -51.833572 -63.537663 48.832256
+v -37.474033 -69.619499 48.832256
+v -18.066238 -74.255798 48.832256
+v 0.307383 -75.598206 48.832256
+v 22.333014 -73.581161 48.832256
+v 46.832596 -66.044899 48.832256
+v 64.611435 -55.552139 48.832256
+v 78.303215 -42.192638 48.832260
+v 87.683479 -26.656624 48.832260
+v 91.755058 -14.122890 48.832260
+v 87.008118 -3.163163 47.119339
+v 87.359512 -3.202447 47.119339
+v 87.569229 -2.917773 47.119339
+v 87.427551 -2.593815 47.119339
+v 87.076157 -2.554531 47.119339
+v 86.866440 -2.839205 47.119339
+v 84.952309 -15.285719 47.119339
+v 85.287018 -15.399706 47.119339
+v 85.553085 -15.166836 47.119339
+v 85.484451 -14.819980 47.119339
+v 85.149742 -14.705992 47.119339
+v 84.883675 -14.938862 47.119339
+v 86.313675 -9.280901 47.119339
+v 86.658646 -9.358472 47.119339
+v 86.898308 -9.098506 47.119339
+v 86.793007 -8.760968 47.119339
+v 86.448036 -8.683397 47.119339
+v 86.208374 -8.943363 47.119339
+v 77.248604 -32.007381 47.119339
+v 77.535553 -32.213978 47.119339
+v 77.857941 -32.068768 47.119339
+v 77.893387 -31.716965 47.119339
+v 77.606438 -31.510370 47.119339
+v 77.284042 -31.655579 47.119339
+v 80.371826 -26.699871 47.119339
+v 80.676872 -26.878670 47.119339
+v 80.984238 -26.703896 47.119339
+v 80.986565 -26.350321 47.119339
+v 80.681519 -26.171520 47.119339
+v 80.374153 -26.346294 47.119339
+v 82.956909 -21.110918 47.119339
+v 83.278084 -21.258787 47.119339
+v 83.566734 -21.054573 47.119339
+v 83.534203 -20.702490 47.119339
+v 83.213028 -20.554621 47.119339
+v 82.924377 -20.758835 47.119339
+v 73.641914 -36.999538 47.119339
+v 73.909393 -37.230789 47.119339
+v 74.243401 -37.114773 47.119339
+v 74.309929 -36.767506 47.119339
+v 74.042458 -36.536255 47.119339
+v 73.708450 -36.652271 47.119339
+v 69.606384 -41.652500 47.119339
+v 69.853493 -41.905399 47.119339
+v 70.196068 -41.817848 47.119339
+v 70.291527 -41.477398 47.119339
+v 70.044418 -41.224499 47.119339
+v 69.701851 -41.312050 47.119339
+v 50.165886 -56.650288 47.119335
+v 50.328697 -56.964153 47.119335
+v 50.681919 -56.980087 47.119335
+v 50.872334 -56.682156 47.119335
+v 50.709518 -56.368286 47.119335
+v 50.356297 -56.352352 47.119335
+v 55.431667 -53.452194 47.119335
+v 55.615582 -53.754185 47.119335
+v 55.969067 -53.745907 47.119335
+v 56.138641 -53.435638 47.119335
+v 55.954727 -53.133652 47.119335
+v 55.601242 -53.141930 47.119335
+v 60.454594 -49.885414 47.119335
+v 60.659683 -50.173439 47.119335
+v 61.011669 -50.139839 47.119335
+v 61.158562 -49.818214 47.119335
+v 60.953468 -49.530190 47.119335
+v 60.601486 -49.563789 47.119335
+v 65.194359 -45.950787 47.119335
+v 65.420578 -46.222530 47.119335
+v 65.769028 -46.162491 47.119335
+v 65.891258 -45.830708 47.119335
+v 65.665039 -45.558964 47.119335
+v 65.316589 -45.619003 47.119335
+v 39.047028 -61.947102 47.119335
+v 39.168140 -62.279297 47.119335
+v 39.516384 -62.340508 47.119335
+v 39.743519 -62.069527 47.119335
+v 39.622406 -61.737331 47.119335
+v 39.274162 -61.676121 47.119335
+v 44.693481 -59.481041 47.119335
+v 44.835350 -59.804913 47.119335
+v 45.186764 -59.843990 47.119335
+v 45.396317 -59.559193 47.119335
+v 45.254448 -59.235321 47.119335
+v 44.903030 -59.196243 47.119335
+v 21.343893 -67.190475 47.119335
+v 21.403883 -67.538933 47.119335
+v 21.735649 -67.661209 47.119335
+v 22.007427 -67.435036 47.119335
+v 21.947437 -67.086578 47.119335
+v 21.615671 -66.964302 47.119335
+v 33.255886 -64.051765 47.119335
+v 33.356441 -64.390747 47.119335
+v 33.700291 -64.473152 47.119335
+v 33.943577 -64.216576 47.119335
+v 33.843021 -63.877598 47.119335
+v 33.499176 -63.795189 47.119335
+v 27.346704 -65.798470 47.119335
+v 27.426893 -66.142838 47.119335
+v 27.765223 -66.245575 47.119335
+v 28.023359 -66.003944 47.119335
+v 27.943169 -65.659576 47.119335
+v 27.604841 -65.556839 47.119335
+v 9.146607 -68.921143 47.119335
+v 9.166543 -69.274170 47.119335
+v 9.482236 -69.433411 47.119335
+v 9.777992 -69.239639 47.119335
+v 9.758057 -68.886620 47.119335
+v 9.442365 -68.727371 47.119335
+v 15.270096 -68.230621 47.119335
+v 15.310013 -68.581947 47.119335
+v 15.634226 -68.723038 47.119335
+v 15.918521 -68.512810 47.119335
+v 15.878604 -68.161484 47.119335
+v 15.554391 -68.020393 47.119335
+v -3.168556 -69.258736 47.119335
+v -3.188492 -69.611755 47.119335
+v -2.892735 -69.805534 47.119335
+v -2.577042 -69.646286 47.119335
+v -2.557106 -69.293266 47.119335
+v -2.852863 -69.099495 47.119335
+v 2.993788 -69.263588 47.119335
+v 2.993788 -69.617172 47.119335
+v 3.300000 -69.793961 47.119335
+v 3.606212 -69.617172 47.119335
+v 3.606212 -69.263588 47.119335
+v 3.300000 -69.086800 47.119335
+v -15.443120 -68.206329 47.119335
+v -15.503109 -68.554787 47.119335
+v -15.231331 -68.780968 47.119335
+v -14.899565 -68.658691 47.119335
+v -14.839576 -68.310234 47.119335
+v -15.111354 -68.084053 47.119335
+v -9.320797 -68.906586 47.119335
+v -9.360715 -69.257904 47.119335
+v -9.076419 -69.468140 47.119335
+v -8.752207 -69.327049 47.119335
+v -8.712289 -68.975723 47.119335
+v -8.996585 -68.765495 47.119335
+v -33.421654 -63.998009 47.119335
+v -33.542763 -64.330200 47.119335
+v -33.315632 -64.601181 47.119335
+v -32.967388 -64.539970 47.119335
+v -32.846275 -64.207779 47.119335
+v -33.073406 -63.936798 47.119335
+v -27.515551 -65.754585 47.119335
+v -27.616106 -66.093567 47.119335
+v -27.372818 -66.350143 47.119335
+v -27.028973 -66.267738 47.119335
+v -26.928415 -65.928757 47.119335
+v -27.171705 -65.672180 47.119335
+v -21.515146 -67.156418 47.119335
+v -21.595337 -67.500786 47.119335
+v -21.337200 -67.742416 47.119335
+v -20.998873 -67.639679 47.119335
+v -20.918682 -67.295311 47.119335
+v -21.176819 -67.053680 47.119335
+v -44.850845 -59.407352 47.119335
+v -45.013657 -59.721222 47.119335
+v -44.823246 -60.019154 47.119335
+v -44.470020 -60.003220 47.119335
+v -44.307209 -59.689354 47.119335
+v -44.497620 -59.391418 47.119335
+v -39.208984 -61.883411 47.119335
+v -39.350853 -62.207283 47.119335
+v -39.141304 -62.492081 47.119335
+v -38.789886 -62.453003 47.119335
+v -38.648018 -62.129131 47.119335
+v -38.857571 -61.844334 47.119335
+v -65.323769 -45.837029 47.119335
+v -65.570877 -46.089931 47.119335
+v -65.475418 -46.430382 47.119335
+v -65.132843 -46.517933 47.119335
+v -64.885735 -46.265034 47.119335
+v -64.981201 -45.924583 47.119335
+v -60.592628 -49.781601 47.119335
+v -60.818848 -50.053345 47.119335
+v -60.696621 -50.385132 47.119335
+v -60.348171 -50.445171 47.119335
+v -60.121952 -50.173428 47.119335
+v -60.244179 -49.841640 47.119335
+v -55.577164 -53.358414 47.119335
+v -55.782253 -53.646439 47.119335
+v -55.635361 -53.968067 47.119335
+v -55.283379 -54.001667 47.119335
+v -55.078289 -53.713642 47.119335
+v -55.225182 -53.392014 47.119335
+v -50.317787 -56.566563 47.119335
+v -50.501698 -56.868553 47.119335
+v -50.332127 -57.178818 47.119335
+v -49.978642 -57.187096 47.119335
+v -49.794727 -56.885109 47.119335
+v -49.964302 -56.574841 47.119335
+v -69.725899 -41.528984 47.119339
+v -69.993370 -41.760235 47.119339
+v -69.926842 -42.107502 47.119339
+v -69.592834 -42.223518 47.119339
+v -69.325356 -41.992264 47.119339
+v -69.391891 -41.644997 47.119339
+v -73.750130 -36.866577 47.119339
+v -74.037079 -37.073170 47.119339
+v -74.001640 -37.424973 47.119339
+v -73.679245 -37.570179 47.119339
+v -73.392296 -37.363586 47.119339
+v -73.427742 -37.011784 47.119339
+v -80.452888 -26.549757 47.119339
+v -80.774071 -26.697626 47.119339
+v -80.806602 -27.049709 47.119339
+v -80.517952 -27.253923 47.119339
+v -80.196777 -27.106054 47.119339
+v -80.164246 -26.753971 47.119339
+v -83.022049 -20.953627 47.119339
+v -83.356758 -21.067614 47.119339
+v -83.425392 -21.414471 47.119339
+v -83.159325 -21.647341 47.119339
+v -82.824623 -21.533354 47.119339
+v -82.755981 -21.186497 47.119339
+v -77.344025 -31.865477 47.119339
+v -77.649071 -32.044277 47.119339
+v -77.646744 -32.397854 47.119339
+v -77.339378 -32.572628 47.119339
+v -77.034332 -32.393829 47.119339
+v -77.036659 -32.040253 47.119339
+v -86.342880 -9.113668 47.119339
+v -86.694275 -9.152954 47.119339
+v -86.835945 -9.476912 47.119339
+v -86.626228 -9.761585 47.119339
+v -86.274834 -9.722301 47.119339
+v -86.133163 -9.398343 47.119339
+v -85.000084 -15.122608 47.119339
+v -85.345055 -15.200180 47.119339
+v -85.450363 -15.537717 47.119339
+v -85.210693 -15.797683 47.119339
+v -84.865730 -15.720112 47.119339
+v -84.760422 -15.382574 47.119339
+v -87.008118 3.163159 47.119339
+v -87.359512 3.202443 47.119339
+v -87.569229 2.917769 47.119339
+v -87.427551 2.593811 47.119339
+v -87.076157 2.554527 47.119339
+v -86.866440 2.839201 47.119339
+v -87.017944 -2.993790 47.119339
+v -87.371529 -2.993790 47.119339
+v -87.548317 -3.300002 47.119339
+v -87.371529 -3.606214 47.119339
+v -87.017944 -3.606214 47.119339
+v -86.841156 -3.300002 47.119339
+v -84.952309 15.285715 47.119339
+v -85.287018 15.399702 47.119339
+v -85.553085 15.166832 47.119339
+v -85.484451 14.819976 47.119339
+v -85.149742 14.705988 47.119339
+v -84.883675 14.938858 47.119339
+v -86.313675 9.280897 47.119339
+v -86.658646 9.358468 47.119339
+v -86.898308 9.098502 47.119339
+v -86.793007 8.760964 47.119339
+v -86.448036 8.683393 47.119339
+v -86.208374 8.943359 47.119339
+v -77.248604 32.007374 47.119339
+v -77.535553 32.213970 47.119339
+v -77.857941 32.068760 47.119339
+v -77.893387 31.716961 47.119339
+v -77.606438 31.510366 47.119339
+v -77.284042 31.655575 47.119339
+v -80.371826 26.699867 47.119339
+v -80.676872 26.878666 47.119339
+v -80.984238 26.703892 47.119339
+v -80.986565 26.350317 47.119339
+v -80.681519 26.171516 47.119339
+v -80.374153 26.346291 47.119339
+v -82.956909 21.110914 47.119339
+v -83.278084 21.258783 47.119339
+v -83.566734 21.054569 47.119339
+v -83.534203 20.702486 47.119339
+v -83.213028 20.554617 47.119339
+v -82.924377 20.758831 47.119339
+v -73.641914 36.999531 47.119339
+v -73.909393 37.230782 47.119339
+v -74.243401 37.114765 47.119339
+v -74.309929 36.767498 47.119339
+v -74.042458 36.536247 47.119339
+v -73.708450 36.652264 47.119339
+v -69.606384 41.652493 47.119339
+v -69.853493 41.905392 47.119339
+v -70.196068 41.817841 47.119339
+v -70.291527 41.477390 47.119339
+v -70.044418 41.224491 47.119339
+v -69.701851 41.312042 47.119339
+v -50.165886 56.650280 47.119343
+v -50.328697 56.964146 47.119343
+v -50.681919 56.980080 47.119343
+v -50.872334 56.682148 47.119343
+v -50.709518 56.368279 47.119343
+v -50.356297 56.352345 47.119343
+v -55.431667 53.452187 47.119343
+v -55.615582 53.754177 47.119343
+v -55.969067 53.745899 47.119343
+v -56.138641 53.435631 47.119343
+v -55.954727 53.133644 47.119343
+v -55.601242 53.141922 47.119343
+v -60.454594 49.885406 47.119343
+v -60.659683 50.173431 47.119343
+v -61.011669 50.139832 47.119343
+v -61.158562 49.818207 47.119343
+v -60.953468 49.530182 47.119343
+v -60.601486 49.563782 47.119343
+v -65.194359 45.950779 47.119343
+v -65.420578 46.222523 47.119343
+v -65.769028 46.162483 47.119343
+v -65.891258 45.830700 47.119343
+v -65.665039 45.558956 47.119343
+v -65.316589 45.618996 47.119343
+v -39.047028 61.947094 47.119343
+v -39.168140 62.279289 47.119343
+v -39.516384 62.340500 47.119343
+v -39.743519 62.069519 47.119343
+v -39.622406 61.737324 47.119343
+v -39.274162 61.676113 47.119343
+v -44.693481 59.481033 47.119343
+v -44.835350 59.804905 47.119343
+v -45.186764 59.843983 47.119343
+v -45.396317 59.559185 47.119343
+v -45.254448 59.235313 47.119343
+v -44.903030 59.196236 47.119343
+v -21.343893 67.190475 47.119343
+v -21.403883 67.538933 47.119343
+v -21.735649 67.661209 47.119343
+v -22.007427 67.435036 47.119343
+v -21.947437 67.086578 47.119343
+v -21.615671 66.964302 47.119343
+v -33.255886 64.051765 47.119343
+v -33.356441 64.390747 47.119343
+v -33.700291 64.473152 47.119343
+v -33.943577 64.216576 47.119343
+v -33.843021 63.877590 47.119343
+v -33.499176 63.795181 47.119343
+v -27.346704 65.798470 47.119343
+v -27.426893 66.142838 47.119343
+v -27.765223 66.245575 47.119343
+v -28.023359 66.003944 47.119343
+v -27.943169 65.659576 47.119343
+v -27.604841 65.556839 47.119343
+v -9.146607 68.921143 47.119343
+v -9.166543 69.274170 47.119343
+v -9.482236 69.433411 47.119343
+v -9.777992 69.239639 47.119343
+v -9.758057 68.886620 47.119343
+v -9.442365 68.727371 47.119343
+v -15.270096 68.230621 47.119343
+v -15.310013 68.581947 47.119343
+v -15.634226 68.723038 47.119343
+v -15.918521 68.512810 47.119343
+v -15.878604 68.161484 47.119343
+v -15.554391 68.020393 47.119343
+v 3.168556 69.258736 47.119343
+v 3.188492 69.611755 47.119343
+v 2.892735 69.805534 47.119343
+v 2.577042 69.646286 47.119343
+v 2.557106 69.293266 47.119343
+v 2.852863 69.099495 47.119343
+v -2.993788 69.263588 47.119343
+v -2.993788 69.617172 47.119343
+v -3.300000 69.793961 47.119343
+v -3.606212 69.617172 47.119343
+v -3.606212 69.263588 47.119343
+v -3.300000 69.086800 47.119343
+v 15.443120 68.206329 47.119343
+v 15.503109 68.554787 47.119343
+v 15.231331 68.780968 47.119343
+v 14.899565 68.658691 47.119343
+v 14.839576 68.310234 47.119343
+v 15.111354 68.084053 47.119343
+v 9.320797 68.906586 47.119343
+v 9.360715 69.257904 47.119343
+v 9.076419 69.468140 47.119343
+v 8.752207 69.327049 47.119343
+v 8.712289 68.975723 47.119343
+v 8.996585 68.765495 47.119343
+v 33.421654 63.998001 47.119343
+v 33.542763 64.330200 47.119343
+v 33.315632 64.601181 47.119343
+v 32.967388 64.539970 47.119343
+v 32.846275 64.207779 47.119343
+v 33.073406 63.936790 47.119343
+v 27.515551 65.754585 47.119343
+v 27.616106 66.093567 47.119343
+v 27.372818 66.350143 47.119343
+v 27.028973 66.267738 47.119343
+v 26.928415 65.928757 47.119343
+v 27.171705 65.672180 47.119343
+v 21.515146 67.156418 47.119343
+v 21.595337 67.500786 47.119343
+v 21.337200 67.742416 47.119343
+v 20.998873 67.639679 47.119343
+v 20.918682 67.295311 47.119343
+v 21.176819 67.053680 47.119343
+v 44.850845 59.407345 47.119343
+v 45.013657 59.721214 47.119343
+v 44.823246 60.019146 47.119343
+v 44.470020 60.003212 47.119343
+v 44.307209 59.689346 47.119343
+v 44.497620 59.391411 47.119343
+v 39.208984 61.883404 47.119343
+v 39.350853 62.207275 47.119343
+v 39.141304 62.492073 47.119343
+v 38.789886 62.452995 47.119343
+v 38.648018 62.129124 47.119343
+v 38.857571 61.844326 47.119343
+v 65.323769 45.837021 47.119343
+v 65.570877 46.089924 47.119343
+v 65.475418 46.430374 47.119343
+v 65.132843 46.517925 47.119343
+v 64.885735 46.265026 47.119343
+v 64.981201 45.924576 47.119343
+v 60.592628 49.781593 47.119343
+v 60.818848 50.053337 47.119343
+v 60.696621 50.385124 47.119343
+v 60.348171 50.445164 47.119343
+v 60.121952 50.173420 47.119343
+v 60.244179 49.841633 47.119343
+v 55.577164 53.358406 47.119343
+v 55.782253 53.646431 47.119343
+v 55.635361 53.968060 47.119343
+v 55.283379 54.001659 47.119343
+v 55.078289 53.713634 47.119343
+v 55.225182 53.392006 47.119343
+v 50.317787 56.566555 47.119343
+v 50.501698 56.868546 47.119343
+v 50.332127 57.178810 47.119343
+v 49.978642 57.187088 47.119343
+v 49.794727 56.885101 47.119343
+v 49.964302 56.574833 47.119343
+v 69.725899 41.528976 47.119339
+v 69.993370 41.760227 47.119339
+v 69.926842 42.107494 47.119339
+v 69.592834 42.223511 47.119339
+v 69.325356 41.992256 47.119339
+v 69.391891 41.644989 47.119339
+v 73.750130 36.866570 47.119339
+v 74.037079 37.073162 47.119339
+v 74.001640 37.424965 47.119339
+v 73.679245 37.570171 47.119339
+v 73.392296 37.363579 47.119339
+v 73.427742 37.011776 47.119339
+v 80.452888 26.549753 47.119339
+v 80.774071 26.697622 47.119339
+v 80.806602 27.049706 47.119339
+v 80.517952 27.253920 47.119339
+v 80.196777 27.106050 47.119339
+v 80.164246 26.753967 47.119339
+v 83.022049 20.953623 47.119339
+v 83.356758 21.067610 47.119339
+v 83.425392 21.414467 47.119339
+v 83.159325 21.647337 47.119339
+v 82.824623 21.533350 47.119339
+v 82.755981 21.186493 47.119339
+v 77.344025 31.865473 47.119339
+v 77.649071 32.044270 47.119339
+v 77.646744 32.397846 47.119339
+v 77.339378 32.572620 47.119339
+v 77.034332 32.393822 47.119339
+v 77.036659 32.040245 47.119339
+v 86.342880 9.113665 47.119339
+v 86.694275 9.152950 47.119339
+v 86.835945 9.476908 47.119339
+v 86.626228 9.761581 47.119339
+v 86.274834 9.722298 47.119339
+v 86.133163 9.398339 47.119339
+v 85.000084 15.122604 47.119339
+v 85.345055 15.200176 47.119339
+v 85.450363 15.537713 47.119339
+v 85.210693 15.797679 47.119339
+v 84.865730 15.720108 47.119339
+v 84.760422 15.382570 47.119339
+v 87.017944 2.993786 47.119339
+v 87.371529 2.993786 47.119339
+v 87.548317 3.299998 47.119339
+v 87.371529 3.606210 47.119339
+v 87.017944 3.606210 47.119339
+v 86.841156 3.299998 47.119339
+v 92.983047 -0.501422 49.286438
+v 91.165878 15.255690 49.286438
+v 86.015556 29.413723 49.286438
+v 78.657532 41.144871 49.286438
+v 70.119690 50.440666 49.286442
+v 57.942253 59.707764 49.286442
+v 43.826012 66.938477 49.286442
+v 24.688494 72.776421 49.286442
+v 2.893382 75.270805 49.286442
+v -15.453626 74.353157 49.286442
+v -37.141876 69.492386 49.286442
+v -55.087662 61.519173 49.286442
+v -70.826370 49.896843 49.286442
+v -82.339622 36.040405 49.286438
+v -89.448013 21.310961 49.286438
+v -92.728256 5.849030 49.286438
+v -92.166862 -10.241255 49.286438
+v -87.939598 -25.179745 49.286438
+v -81.084557 -37.810783 49.286438
+v -72.745399 -47.902561 49.286434
+v -63.697880 -55.768806 49.286434
+v -51.177448 -63.549324 49.286434
+v -36.819752 -69.530617 49.286434
+v -17.410839 -74.057861 49.286434
+v 0.922249 -75.304733 49.286434
+v 22.940304 -73.170876 49.286434
+v 47.416260 -65.461182 49.286434
+v 65.114349 -54.796791 49.286434
+v 78.708359 -41.202892 49.286438
+v 87.121864 -27.205042 49.286438
+v 91.387421 -14.436687 49.286438
+v 86.665382 -3.319842 47.119339
+v 86.776482 -2.326033 47.119339
+v 87.659187 -3.430945 47.119339
+v 87.770294 -2.437137 47.119339
+v 84.583885 -15.364965 47.119339
+v 84.906265 -14.418355 47.119339
+v 85.530495 -15.687344 47.119339
+v 85.852875 -14.740732 47.119339
+v 85.955826 -9.399060 47.119339
+v 86.175217 -8.423423 47.119339
+v 86.931465 -9.618447 47.119339
+v 87.150856 -8.642809 47.119339
+v 76.873077 -31.975801 47.119339
+v 77.457367 -31.164255 47.119339
+v 77.684624 -32.560093 47.119339
+v 78.268913 -31.748545 47.119339
+v 79.994995 -26.703615 47.119339
+v 80.500679 -25.840895 47.119339
+v 80.857712 -27.209295 47.119339
+v 81.363396 -26.346575 47.119339
+v 82.582275 -21.151781 47.119339
+v 83.000481 -20.243425 47.119339
+v 83.490631 -21.569983 47.119339
+v 83.908836 -20.661629 47.119339
+v 73.270676 -36.934746 47.119339
+v 73.924698 -36.178272 47.119339
+v 74.027145 -37.588772 47.119339
+v 74.681175 -36.832298 47.119339
+v 69.241898 -41.556759 47.119339
+v 69.957146 -40.857891 47.119339
+v 69.940765 -42.272007 47.119339
+v 70.656013 -41.573139 47.119339
+v 49.845036 -56.452614 47.119335
+v 50.732716 -55.992149 47.119335
+v 50.305500 -57.340294 47.119335
+v 51.193180 -56.879829 47.119335
+v 55.098045 -53.276943 47.119335
+v 55.952126 -52.756805 47.119335
+v 55.618183 -54.131027 47.119335
+v 56.472263 -53.610889 47.119335
+v 60.109264 -49.734535 47.119335
+v 60.923855 -49.154503 47.119335
+v 60.689297 -50.549126 47.119335
+v 61.503891 -49.969093 47.119335
+v 64.838638 -45.826370 47.119335
+v 65.607185 -45.186577 47.119335
+v 65.478432 -46.594917 47.119335
+v 66.246979 -45.955124 47.119335
+v 38.754257 -61.709824 47.119335
+v 39.693764 -61.367298 47.119335
+v 39.096783 -62.649334 47.119335
+v 40.036289 -62.306805 47.119335
+v 44.386295 -59.262741 47.119335
+v 45.302277 -58.861515 47.119335
+v 44.787521 -60.178719 47.119335
+v 45.703503 -59.777493 47.119335
+v 21.098080 -66.904831 47.119335
+v 22.083582 -66.735176 47.119335
+v 21.267738 -67.890335 47.119335
+v 22.253241 -67.720680 47.119335
+v 32.978184 -63.797016 47.119335
+v 33.936890 -63.512623 47.119335
+v 33.262577 -64.755722 47.119335
+v 34.221283 -64.471329 47.119335
+v 27.084663 -65.527634 47.119335
+v 28.058605 -65.300842 47.119335
+v 27.311457 -66.501572 47.119335
+v 28.285400 -66.274780 47.119335
+v 8.934904 -68.609375 47.119335
+v 9.933313 -68.552994 47.119335
+v 8.991286 -69.607788 47.119335
+v 9.989696 -69.551407 47.119335
+v 15.041058 -67.931358 47.119335
+v 16.034664 -67.818466 47.119335
+v 15.153952 -68.924965 47.119335
+v 16.147558 -68.812073 47.119335
+v -3.343812 -68.925117 47.119335
+v -2.345403 -68.981499 47.119335
+v -3.400195 -69.923531 47.119335
+v -2.401786 -69.979912 47.119335
+v 2.800000 -68.940384 47.119335
+v 3.800000 -68.940384 47.119335
+v 2.800000 -69.940384 47.119335
+v 3.800000 -69.940384 47.119335
+v -15.579264 -67.854927 47.119335
+v -14.593761 -68.024590 47.119335
+v -15.748923 -68.840431 47.119335
+v -14.763421 -69.010094 47.119335
+v -9.476858 -68.563568 47.119335
+v -8.483252 -68.676460 47.119335
+v -9.589752 -69.557175 47.119335
+v -8.596146 -69.670067 47.119335
+v -33.493011 -63.627975 47.119335
+v -32.553501 -63.970501 47.119335
+v -33.835537 -64.567474 47.119335
+v -32.896030 -64.910004 47.119335
+v -27.609419 -65.389610 47.119335
+v -26.650711 -65.674004 47.119335
+v -27.893812 -66.348320 47.119335
+v -26.935104 -66.632713 47.119335
+v -21.630583 -66.797676 47.119335
+v -20.656641 -67.024475 47.119335
+v -21.857378 -67.771622 47.119335
+v -20.883434 -67.998413 47.119335
+v -44.874039 -59.031216 47.119335
+v -43.986362 -59.491680 47.119335
+v -45.334503 -59.918892 47.119335
+v -44.446827 -60.379356 47.119335
+v -39.256813 -61.509605 47.119335
+v -38.340832 -61.910831 47.119335
+v -39.658039 -62.425583 47.119335
+v -38.742058 -62.826809 47.119335
+v -65.236496 -45.470421 47.119335
+v -64.521248 -46.169292 47.119335
+v -65.935364 -46.185673 47.119335
+v -65.220116 -46.884541 47.119335
+v -60.534775 -49.409218 47.119335
+v -59.766232 -50.049011 47.119335
+v -61.174572 -50.177761 47.119335
+v -60.406025 -50.817558 47.119335
+v -55.547550 -52.982727 47.119335
+v -54.732956 -53.562763 47.119335
+v -56.127583 -53.797321 47.119335
+v -55.312992 -54.377354 47.119335
+v -50.315186 -56.189720 47.119335
+v -49.461102 -56.709858 47.119335
+v -50.835323 -57.043800 47.119335
+v -49.981243 -57.563938 47.119335
+v -69.608139 -41.171001 47.119339
+v -68.954117 -41.927475 47.119339
+v -70.364616 -41.825024 47.119339
+v -69.710594 -42.581497 47.119339
+v -73.601059 -36.520462 47.119339
+v -73.016769 -37.332008 47.119339
+v -74.412605 -37.104748 47.119339
+v -73.828316 -37.916294 47.119339
+v -80.240349 -26.238564 47.119339
+v -79.822144 -27.146917 47.119339
+v -81.148697 -26.656765 47.119339
+v -80.730499 -27.565119 47.119339
+v -82.778572 -20.665989 47.119339
+v -82.456192 -21.612600 47.119339
+v -83.725182 -20.988367 47.119339
+v -83.402809 -21.934977 47.119339
+v -77.163185 -31.534851 47.119339
+v -76.657501 -32.397572 47.119339
+v -78.025902 -32.040535 47.119339
+v -77.520218 -32.903255 47.119339
+v -86.043198 -8.885172 47.119339
+v -85.932098 -9.878981 47.119339
+v -87.037010 -8.996275 47.119339
+v -86.925903 -9.990084 47.119339
+v -84.727264 -14.862634 47.119339
+v -84.507881 -15.838272 47.119339
+v -85.702904 -15.082020 47.119339
+v -85.483513 -16.057657 47.119339
+v -86.665382 3.319838 47.119339
+v -86.776482 2.326029 47.119339
+v -87.659187 3.430941 47.119339
+v -87.770294 2.437133 47.119339
+v -86.694740 -2.800002 47.119339
+v -86.694740 -3.800002 47.119339
+v -87.694740 -2.800002 47.119339
+v -87.694740 -3.800002 47.119339
+v -84.583885 15.364962 47.119339
+v -84.906265 14.418351 47.119339
+v -85.530495 15.687340 47.119339
+v -85.852875 14.740728 47.119339
+v -85.955826 9.399056 47.119339
+v -86.175217 8.423419 47.119339
+v -86.931465 9.618443 47.119339
+v -87.150856 8.642805 47.119339
+v -76.873077 31.975798 47.119339
+v -77.457367 31.164251 47.119339
+v -77.684624 32.560085 47.119339
+v -78.268913 31.748541 47.119339
+v -79.994995 26.703611 47.119339
+v -80.500679 25.840891 47.119339
+v -80.857712 27.209291 47.119339
+v -81.363396 26.346571 47.119339
+v -82.582275 21.151777 47.119339
+v -83.000481 20.243422 47.119339
+v -83.490631 21.569979 47.119339
+v -83.908836 20.661625 47.119339
+v -73.270676 36.934738 47.119339
+v -73.924698 36.178265 47.119339
+v -74.027145 37.588764 47.119339
+v -74.681175 36.832291 47.119339
+v -69.241898 41.556751 47.119339
+v -69.957146 40.857883 47.119339
+v -69.940765 42.271999 47.119339
+v -70.656013 41.573132 47.119339
+v -49.845036 56.452606 47.119343
+v -50.732716 55.992142 47.119343
+v -50.305500 57.340286 47.119343
+v -51.193180 56.879822 47.119343
+v -55.098045 53.276936 47.119343
+v -55.952126 52.756798 47.119343
+v -55.618183 54.131020 47.119343
+v -56.472263 53.610882 47.119343
+v -60.109264 49.734528 47.119343
+v -60.923855 49.154495 47.119343
+v -60.689297 50.549118 47.119343
+v -61.503891 49.969086 47.119343
+v -64.838638 45.826363 47.119343
+v -65.607185 45.186569 47.119343
+v -65.478432 46.594910 47.119343
+v -66.246979 45.955116 47.119343
+v -38.754257 61.709816 47.119343
+v -39.693764 61.367290 47.119343
+v -39.096783 62.649326 47.119343
+v -40.036289 62.306797 47.119343
+v -44.386295 59.262733 47.119343
+v -45.302277 58.861507 47.119343
+v -44.787521 60.178711 47.119343
+v -45.703503 59.777485 47.119343
+v -21.098080 66.904831 47.119343
+v -22.083582 66.735176 47.119343
+v -21.267738 67.890335 47.119343
+v -22.253241 67.720680 47.119343
+v -32.978184 63.797009 47.119343
+v -33.936890 63.512615 47.119343
+v -33.262577 64.755722 47.119343
+v -34.221283 64.471329 47.119343
+v -27.084663 65.527634 47.119343
+v -28.058605 65.300842 47.119343
+v -27.311457 66.501572 47.119343
+v -28.285400 66.274780 47.119343
+v -8.934904 68.609375 47.119343
+v -9.933313 68.552994 47.119343
+v -8.991286 69.607788 47.119343
+v -9.989696 69.551407 47.119343
+v -15.041058 67.931358 47.119343
+v -16.034664 67.818466 47.119343
+v -15.153952 68.924965 47.119343
+v -16.147558 68.812073 47.119343
+v 3.343812 68.925117 47.119343
+v 2.345403 68.981499 47.119343
+v 3.400195 69.923531 47.119343
+v 2.401786 69.979912 47.119343
+v -2.800000 68.940384 47.119343
+v -3.800000 68.940384 47.119343
+v -2.800000 69.940384 47.119343
+v -3.800000 69.940384 47.119343
+v 15.579264 67.854927 47.119343
+v 14.593761 68.024590 47.119343
+v 15.748923 68.840431 47.119343
+v 14.763421 69.010094 47.119343
+v 9.476858 68.563568 47.119343
+v 8.483252 68.676460 47.119343
+v 9.589752 69.557175 47.119343
+v 8.596146 69.670067 47.119343
+v 33.493011 63.627968 47.119343
+v 32.553501 63.970493 47.119343
+v 33.835537 64.567474 47.119343
+v 32.896030 64.910004 47.119343
+v 27.609419 65.389610 47.119343
+v 26.650711 65.674004 47.119343
+v 27.893812 66.348320 47.119343
+v 26.935104 66.632713 47.119343
+v 21.630583 66.797676 47.119343
+v 20.656641 67.024475 47.119343
+v 21.857378 67.771622 47.119343
+v 20.883434 67.998413 47.119343
+v 44.874039 59.031208 47.119343
+v 43.986362 59.491673 47.119343
+v 45.334503 59.918884 47.119343
+v 44.446827 60.379349 47.119343
+v 39.256813 61.509598 47.119343
+v 38.340832 61.910824 47.119343
+v 39.658039 62.425575 47.119343
+v 38.742058 62.826801 47.119343
+v 65.236496 45.470413 47.119343
+v 64.521248 46.169285 47.119343
+v 65.935364 46.185665 47.119343
+v 65.220116 46.884533 47.119343
+v 60.534775 49.409210 47.119343
+v 59.766232 50.049004 47.119343
+v 61.174572 50.177753 47.119343
+v 60.406025 50.817551 47.119343
+v 55.547550 52.982719 47.119343
+v 54.732956 53.562756 47.119343
+v 56.127583 53.797314 47.119343
+v 55.312992 54.377346 47.119343
+v 50.315186 56.189713 47.119343
+v 49.461102 56.709850 47.119343
+v 50.835323 57.043793 47.119343
+v 49.981243 57.563931 47.119343
+v 69.608139 41.170994 47.119339
+v 68.954117 41.927467 47.119339
+v 70.364616 41.825016 47.119339
+v 69.710594 42.581490 47.119339
+v 73.601059 36.520454 47.119339
+v 73.016769 37.332001 47.119339
+v 74.412605 37.104740 47.119339
+v 73.828316 37.916286 47.119339
+v 80.240349 26.238560 47.119339
+v 79.822144 27.146914 47.119339
+v 81.148697 26.656761 47.119339
+v 80.730499 27.565115 47.119339
+v 82.778572 20.665985 47.119339
+v 82.456192 21.612597 47.119339
+v 83.725182 20.988363 47.119339
+v 83.402809 21.934973 47.119339
+v 77.163185 31.534847 47.119339
+v 76.657501 32.397564 47.119339
+v 78.025902 32.040527 47.119339
+v 77.520218 32.903248 47.119339
+v 86.043198 8.885168 47.119339
+v 85.932098 9.878977 47.119339
+v 87.037010 8.996271 47.119339
+v 86.925903 9.990080 47.119339
+v 84.727264 14.862630 47.119339
+v 84.507881 15.838268 47.119339
+v 85.702904 15.082016 47.119339
+v 85.483513 16.057653 47.119339
+v 86.694740 2.799998 47.119339
+v 86.694740 3.799998 47.119339
+v 87.694740 2.799998 47.119339
+v 87.694740 3.799998 47.119339
+v 87.921043 -0.462572 49.286438
+v 86.101273 14.653769 49.286438
+v 80.979561 28.152256 49.286438
+v 73.710190 39.240643 49.286438
+v 65.306656 47.961121 49.286442
+v 53.314751 56.597141 49.286442
+v 39.346409 63.266785 49.286442
+v 20.285006 68.470474 49.286442
+v 2.732554 70.211082 49.286442
+v -19.067137 68.716972 49.286442
+v -43.194633 61.794147 49.286442
+v -59.969681 52.335716 49.286442
+v -73.275826 39.894463 49.286438
+v -81.644333 26.962234 49.286438
+v -86.695076 12.177416 49.286438
+v -87.868279 -2.484934 49.286438
+v -85.891045 -15.468655 49.286438
+v -81.476402 -27.172853 49.286438
+v -75.387634 -37.079479 49.286438
+v -68.320839 -45.166119 49.286434
+v -58.137810 -53.525875 49.286434
+v -46.200912 -60.358025 49.286434
+v -29.879826 -66.329941 49.286434
+v -11.163266 -69.708878 49.286434
+v 6.437806 -70.077553 49.286434
+v 28.193104 -66.827789 49.286434
+v 45.381126 -60.825470 49.286434
+v 62.066853 -50.753868 49.286434
+v 74.051140 -38.938984 49.286438
+v 82.317551 -25.541594 49.286438
+v 86.395691 -13.559460 49.286438
+v 86.776482 -2.326033 47.419338
+v 86.665382 -3.319842 47.419338
+v 87.770294 -2.437137 47.419338
+v 87.659187 -3.430945 47.419338
+v 84.906265 -14.418355 47.419338
+v 84.583885 -15.364965 47.419338
+v 85.852875 -14.740732 47.419338
+v 85.530495 -15.687344 47.419338
+v 86.175217 -8.423423 47.419338
+v 85.955826 -9.399060 47.419338
+v 87.150856 -8.642809 47.419338
+v 86.931465 -9.618447 47.419338
+v 77.457367 -31.164255 47.419338
+v 76.873077 -31.975801 47.419338
+v 78.268913 -31.748545 47.419338
+v 77.684624 -32.560093 47.419338
+v 80.500679 -25.840895 47.419338
+v 79.994995 -26.703615 47.419338
+v 81.363396 -26.346575 47.419338
+v 80.857712 -27.209295 47.419338
+v 83.000481 -20.243425 47.419338
+v 82.582275 -21.151781 47.419338
+v 83.908836 -20.661629 47.419338
+v 83.490631 -21.569983 47.419338
+v 73.924698 -36.178272 47.419338
+v 73.270676 -36.934746 47.419338
+v 74.681175 -36.832298 47.419338
+v 74.027145 -37.588772 47.419338
+v 69.957146 -40.857891 47.419338
+v 69.241898 -41.556759 47.419338
+v 70.656013 -41.573139 47.419338
+v 69.940765 -42.272007 47.419338
+v 50.732716 -55.992149 47.419334
+v 49.845036 -56.452614 47.419334
+v 51.193180 -56.879829 47.419334
+v 50.305500 -57.340294 47.419334
+v 55.952126 -52.756805 47.419334
+v 55.098045 -53.276943 47.419334
+v 56.472263 -53.610889 47.419334
+v 55.618183 -54.131027 47.419334
+v 60.923855 -49.154503 47.419334
+v 60.109264 -49.734535 47.419334
+v 61.503891 -49.969093 47.419334
+v 60.689297 -50.549126 47.419334
+v 65.607185 -45.186577 47.419334
+v 64.838638 -45.826370 47.419334
+v 66.246979 -45.955124 47.419334
+v 65.478432 -46.594917 47.419334
+v 39.693764 -61.367298 47.419334
+v 38.754257 -61.709824 47.419334
+v 40.036289 -62.306805 47.419334
+v 39.096783 -62.649334 47.419334
+v 45.302277 -58.861515 47.419334
+v 44.386295 -59.262741 47.419334
+v 45.703503 -59.777493 47.419334
+v 44.787521 -60.178719 47.419334
+v 22.083582 -66.735176 47.419334
+v 21.098080 -66.904831 47.419334
+v 22.253241 -67.720680 47.419334
+v 21.267738 -67.890335 47.419334
+v 33.936890 -63.512623 47.419334
+v 32.978184 -63.797016 47.419334
+v 34.221283 -64.471329 47.419334
+v 33.262577 -64.755722 47.419334
+v 28.058605 -65.300842 47.419334
+v 27.084663 -65.527634 47.419334
+v 28.285400 -66.274780 47.419334
+v 27.311457 -66.501572 47.419334
+v 9.933313 -68.552994 47.419334
+v 8.934904 -68.609375 47.419334
+v 9.989696 -69.551407 47.419334
+v 8.991286 -69.607788 47.419334
+v 16.034664 -67.818466 47.419334
+v 15.041058 -67.931358 47.419334
+v 16.147558 -68.812073 47.419334
+v 15.153952 -68.924965 47.419334
+v -2.345403 -68.981499 47.419334
+v -3.343812 -68.925117 47.419334
+v -2.401786 -69.979912 47.419334
+v -3.400195 -69.923531 47.419334
+v 3.800000 -68.940384 47.419334
+v 2.800000 -68.940384 47.419334
+v 3.800000 -69.940384 47.419334
+v 2.800000 -69.940384 47.419334
+v -14.593761 -68.024590 47.419334
+v -15.579264 -67.854927 47.419334
+v -14.763421 -69.010094 47.419334
+v -15.748923 -68.840431 47.419334
+v -8.483252 -68.676460 47.419334
+v -9.476858 -68.563568 47.419334
+v -8.596146 -69.670067 47.419334
+v -9.589752 -69.557175 47.419334
+v -32.553501 -63.970501 47.419334
+v -33.493011 -63.627975 47.419334
+v -32.896030 -64.910004 47.419334
+v -33.835537 -64.567474 47.419334
+v -26.650711 -65.674004 47.419334
+v -27.609419 -65.389610 47.419334
+v -26.935104 -66.632713 47.419334
+v -27.893812 -66.348320 47.419334
+v -20.656641 -67.024475 47.419334
+v -21.630583 -66.797676 47.419334
+v -20.883434 -67.998413 47.419334
+v -21.857378 -67.771622 47.419334
+v -43.986362 -59.491680 47.419334
+v -44.874039 -59.031216 47.419334
+v -44.446827 -60.379356 47.419334
+v -45.334503 -59.918892 47.419334
+v -38.340832 -61.910831 47.419334
+v -39.256813 -61.509605 47.419334
+v -38.742058 -62.826809 47.419334
+v -39.658039 -62.425583 47.419334
+v -64.521248 -46.169292 47.419334
+v -65.236496 -45.470421 47.419334
+v -65.220116 -46.884541 47.419334
+v -65.935364 -46.185673 47.419334
+v -59.766232 -50.049011 47.419334
+v -60.534775 -49.409218 47.419334
+v -60.406025 -50.817558 47.419334
+v -61.174572 -50.177761 47.419334
+v -54.732956 -53.562763 47.419334
+v -55.547550 -52.982727 47.419334
+v -55.312992 -54.377354 47.419334
+v -56.127583 -53.797321 47.419334
+v -49.461102 -56.709858 47.419334
+v -50.315186 -56.189720 47.419334
+v -49.981243 -57.563938 47.419334
+v -50.835323 -57.043800 47.419334
+v -68.954117 -41.927475 47.419338
+v -69.608139 -41.171001 47.419338
+v -69.710594 -42.581497 47.419338
+v -70.364616 -41.825024 47.419338
+v -73.016769 -37.332008 47.419338
+v -73.601059 -36.520462 47.419338
+v -73.828316 -37.916294 47.419338
+v -74.412605 -37.104748 47.419338
+v -79.822144 -27.146917 47.419338
+v -80.240349 -26.238564 47.419338
+v -80.730499 -27.565119 47.419338
+v -81.148697 -26.656765 47.419338
+v -82.456192 -21.612600 47.419338
+v -82.778572 -20.665989 47.419338
+v -83.402809 -21.934977 47.419338
+v -83.725182 -20.988367 47.419338
+v -76.657501 -32.397572 47.419338
+v -77.163185 -31.534851 47.419338
+v -77.520218 -32.903255 47.419338
+v -78.025902 -32.040535 47.419338
+v -85.932098 -9.878981 47.419338
+v -86.043198 -8.885172 47.419338
+v -86.925903 -9.990084 47.419338
+v -87.037010 -8.996275 47.419338
+v -84.507881 -15.838272 47.419338
+v -84.727264 -14.862634 47.419338
+v -85.483513 -16.057657 47.419338
+v -85.702904 -15.082020 47.419338
+v -86.776482 2.326029 47.419338
+v -86.665382 3.319838 47.419338
+v -87.770294 2.437133 47.419338
+v -87.659187 3.430941 47.419338
+v -86.694740 -3.800002 47.419338
+v -86.694740 -2.800002 47.419338
+v -87.694740 -3.800002 47.419338
+v -87.694740 -2.800002 47.419338
+v -84.906265 14.418351 47.419338
+v -84.583885 15.364962 47.419338
+v -85.852875 14.740728 47.419338
+v -85.530495 15.687340 47.419338
+v -86.175217 8.423419 47.419338
+v -85.955826 9.399056 47.419338
+v -87.150856 8.642805 47.419338
+v -86.931465 9.618443 47.419338
+v -77.457367 31.164251 47.419338
+v -76.873077 31.975798 47.419338
+v -78.268913 31.748541 47.419338
+v -77.684624 32.560085 47.419338
+v -80.500679 25.840891 47.419338
+v -79.994995 26.703611 47.419338
+v -81.363396 26.346571 47.419338
+v -80.857712 27.209291 47.419338
+v -83.000481 20.243422 47.419338
+v -82.582275 21.151777 47.419338
+v -83.908836 20.661625 47.419338
+v -83.490631 21.569979 47.419338
+v -73.924698 36.178265 47.419338
+v -73.270676 36.934738 47.419338
+v -74.681175 36.832291 47.419338
+v -74.027145 37.588764 47.419338
+v -69.957146 40.857883 47.419338
+v -69.241898 41.556751 47.419338
+v -70.656013 41.573132 47.419338
+v -69.940765 42.271999 47.419338
+v -50.732716 55.992142 47.419342
+v -49.845036 56.452606 47.419342
+v -51.193180 56.879822 47.419342
+v -50.305500 57.340286 47.419342
+v -55.952126 52.756798 47.419342
+v -55.098045 53.276936 47.419342
+v -56.472263 53.610882 47.419342
+v -55.618183 54.131020 47.419342
+v -60.923855 49.154495 47.419342
+v -60.109264 49.734528 47.419342
+v -61.503891 49.969086 47.419342
+v -60.689297 50.549118 47.419342
+v -65.607185 45.186569 47.419342
+v -64.838638 45.826363 47.419342
+v -66.246979 45.955116 47.419342
+v -65.478432 46.594910 47.419342
+v -39.693764 61.367290 47.419342
+v -38.754257 61.709816 47.419342
+v -40.036289 62.306797 47.419342
+v -39.096783 62.649326 47.419342
+v -45.302277 58.861507 47.419342
+v -44.386295 59.262733 47.419342
+v -45.703503 59.777485 47.419342
+v -44.787521 60.178711 47.419342
+v -22.083582 66.735176 47.419342
+v -21.098080 66.904831 47.419342
+v -22.253241 67.720680 47.419342
+v -21.267738 67.890335 47.419342
+v -33.936890 63.512615 47.419342
+v -32.978184 63.797009 47.419342
+v -34.221283 64.471329 47.419342
+v -33.262577 64.755722 47.419342
+v -28.058605 65.300842 47.419342
+v -27.084663 65.527634 47.419342
+v -28.285400 66.274780 47.419342
+v -27.311457 66.501572 47.419342
+v -9.933313 68.552994 47.419342
+v -8.934904 68.609375 47.419342
+v -9.989696 69.551407 47.419342
+v -8.991286 69.607788 47.419342
+v -16.034664 67.818466 47.419342
+v -15.041058 67.931358 47.419342
+v -16.147558 68.812073 47.419342
+v -15.153952 68.924965 47.419342
+v 2.345403 68.981499 47.419342
+v 3.343812 68.925117 47.419342
+v 2.401786 69.979912 47.419342
+v 3.400195 69.923531 47.419342
+v -3.800000 68.940384 47.419342
+v -2.800000 68.940384 47.419342
+v -3.800000 69.940384 47.419342
+v -2.800000 69.940384 47.419342
+v 14.593761 68.024590 47.419342
+v 15.579264 67.854927 47.419342
+v 14.763421 69.010094 47.419342
+v 15.748923 68.840431 47.419342
+v 8.483252 68.676460 47.419342
+v 9.476858 68.563568 47.419342
+v 8.596146 69.670067 47.419342
+v 9.589752 69.557175 47.419342
+v 32.553501 63.970493 47.419342
+v 33.493011 63.627968 47.419342
+v 32.896030 64.910004 47.419342
+v 33.835537 64.567474 47.419342
+v 26.650711 65.674004 47.419342
+v 27.609419 65.389610 47.419342
+v 26.935104 66.632713 47.419342
+v 27.893812 66.348320 47.419342
+v 20.656641 67.024475 47.419342
+v 21.630583 66.797676 47.419342
+v 20.883434 67.998413 47.419342
+v 21.857378 67.771622 47.419342
+v 43.986362 59.491673 47.419342
+v 44.874039 59.031208 47.419342
+v 44.446827 60.379349 47.419342
+v 45.334503 59.918884 47.419342
+v 38.340832 61.910824 47.419342
+v 39.256813 61.509598 47.419342
+v 38.742058 62.826801 47.419342
+v 39.658039 62.425575 47.419342
+v 64.521248 46.169285 47.419342
+v 65.236496 45.470413 47.419342
+v 65.220116 46.884533 47.419342
+v 65.935364 46.185665 47.419342
+v 59.766232 50.049004 47.419342
+v 60.534775 49.409210 47.419342
+v 60.406025 50.817551 47.419342
+v 61.174572 50.177753 47.419342
+v 54.732956 53.562756 47.419342
+v 55.547550 52.982719 47.419342
+v 55.312992 54.377346 47.419342
+v 56.127583 53.797314 47.419342
+v 49.461102 56.709850 47.419342
+v 50.315186 56.189713 47.419342
+v 49.981243 57.563931 47.419342
+v 50.835323 57.043793 47.419342
+v 68.954117 41.927467 47.419338
+v 69.608139 41.170994 47.419338
+v 69.710594 42.581490 47.419338
+v 70.364616 41.825016 47.419338
+v 73.016769 37.332001 47.419338
+v 73.601059 36.520454 47.419338
+v 73.828316 37.916286 47.419338
+v 74.412605 37.104740 47.419338
+v 79.822144 27.146914 47.419338
+v 80.240349 26.238560 47.419338
+v 80.730499 27.565115 47.419338
+v 81.148697 26.656761 47.419338
+v 82.456192 21.612597 47.419338
+v 82.778572 20.665985 47.419338
+v 83.402809 21.934973 47.419338
+v 83.725182 20.988363 47.419338
+v 76.657501 32.397564 47.419338
+v 77.163185 31.534847 47.419338
+v 77.520218 32.903248 47.419338
+v 78.025902 32.040527 47.419338
+v 85.932098 9.878977 47.419338
+v 86.043198 8.885168 47.419338
+v 86.925903 9.990080 47.419338
+v 87.037010 8.996271 47.419338
+v 84.507881 15.838268 47.419338
+v 84.727264 14.862630 47.419338
+v 85.483513 16.057653 47.419338
+v 85.702904 15.082016 47.419338
+v 86.694740 3.799998 47.419338
+v 86.694740 2.799998 47.419338
+v 87.694740 3.799998 47.419338
+v 87.694740 2.799998 47.419338
+v 87.603249 -0.460133 48.832268
+v 85.783318 14.615106 48.832268
+v 80.663483 28.071392 48.832268
+v 73.399765 39.118938 48.832268
+v 65.004555 47.803185 48.832272
+v 53.023567 56.399723 48.832272
+v 39.063068 63.034153 48.832272
+v 20.004288 68.197174 48.832272
+v 2.497623 69.898598 48.832272
+v -19.298763 68.356636 48.832272
+v -43.407795 61.356514 48.832272
+v -60.107311 51.841091 48.832272
+v -73.352875 39.299427 48.832268
+v -81.622917 26.276159 48.832268
+v -86.518860 11.432999 48.832268
+v -87.514679 -3.214102 48.832268
+v -85.386032 -16.114588 48.832268
+v -80.859581 -27.690897 48.832268
+v -74.704948 -37.458206 48.832268
+v -67.606567 -45.417202 48.832264
+v -57.409115 -53.637634 48.832264
+v -45.468143 -60.349945 48.832264
+v -29.141951 -66.198509 48.832264
+v -10.418418 -69.458588 48.832264
+v 7.136874 -69.719963 48.832264
+v 28.764334 -66.354027 48.832264
+v 45.883278 -60.242630 48.832264
+v 62.476810 -50.025314 48.832264
+v 74.368538 -38.020405 48.832268
+v 82.463196 -24.440210 48.832268
+v 86.208633 -12.940502 48.832268
+v 87.168144 -2.872934 47.419338
+v 87.188179 -2.918745 47.419338
+v 87.237869 -2.924300 47.419338
+v 87.197800 -2.832678 47.419338
+v 87.267525 -2.884045 47.419338
+v 87.247490 -2.838234 47.419338
+v 85.171051 -15.036730 47.419338
+v 85.180756 -15.085779 47.419338
+v 85.228088 -15.101898 47.419338
+v 85.208672 -15.003799 47.419338
+v 85.265709 -15.068968 47.419338
+v 85.256004 -15.019918 47.419338
+v 86.504562 -9.009965 47.419338
+v 86.519447 -9.057696 47.419338
+v 86.568230 -9.068666 47.419338
+v 86.538452 -8.973204 47.419338
+v 86.602119 -9.031904 47.419338
+v 86.587234 -8.984173 47.419338
+v 77.530418 -31.832958 47.419338
+v 77.525406 -31.882708 47.419338
+v 77.565979 -31.911921 47.419338
+v 77.576004 -31.812426 47.419338
+v 77.611572 -31.891388 47.419338
+v 77.616585 -31.841639 47.419338
+v 80.636063 -26.499811 47.419338
+v 80.635735 -26.549810 47.419338
+v 80.678864 -26.575094 47.419338
+v 80.679527 -26.475096 47.419338
+v 80.722328 -26.550379 47.419338
+v 80.722664 -26.500380 47.419338
+v 83.200142 -20.885794 47.419338
+v 83.204735 -20.935581 47.419338
+v 83.250153 -20.956491 47.419338
+v 83.240959 -20.856916 47.419338
+v 83.290977 -20.927614 47.419338
+v 83.286377 -20.877827 47.419338
+v 73.938103 -36.850819 47.419338
+v 73.928688 -36.899929 47.419338
+v 73.966515 -36.932629 47.419338
+v 73.985329 -36.834415 47.419338
+v 74.013748 -36.916222 47.419338
+v 74.023155 -36.867115 47.419338
+v 69.914017 -41.529186 47.419338
+v 69.900513 -41.577328 47.419338
+v 69.935455 -41.613091 47.419338
+v 69.962456 -41.516804 47.419338
+v 69.983902 -41.600712 47.419338
+v 69.997398 -41.552567 47.419338
+v 50.496086 -56.621838 47.419334
+v 50.469158 -56.663967 47.419334
+v 50.492184 -56.708351 47.419334
+v 50.546036 -56.624092 47.419334
+v 50.542130 -56.710606 47.419334
+v 50.569057 -56.668476 47.419334
+v 55.759148 -53.401211 47.419334
+v 55.735168 -53.445087 47.419334
+v 55.761177 -53.487793 47.419334
+v 55.809135 -53.400043 47.419334
+v 55.811161 -53.486622 47.419334
+v 55.835140 -53.442745 47.419334
+v 60.777576 -49.811085 47.419334
+v 60.756805 -49.856567 47.419334
+v 60.785805 -49.897297 47.419334
+v 60.827351 -49.806332 47.419334
+v 60.835579 -49.892544 47.419334
+v 60.856350 -49.847061 47.419334
+v 65.510818 -45.852322 47.419334
+v 65.493530 -45.899239 47.419334
+v 65.525520 -45.937664 47.419334
+v 65.560089 -45.843830 47.419334
+v 65.574799 -45.929176 47.419334
+v 65.592079 -45.882256 47.419334
+v 39.378147 -61.961338 47.419334
+v 39.346027 -61.999660 47.419334
+v 39.363155 -62.046635 47.419334
+v 39.427391 -61.969994 47.419334
+v 39.412399 -62.055290 47.419334
+v 39.444519 -62.016972 47.419334
+v 45.024837 -59.474319 47.419334
+v 44.995205 -59.514591 47.419334
+v 45.015266 -59.560390 47.419334
+v 45.074532 -59.479843 47.419334
+v 45.064960 -59.565914 47.419334
+v 45.094593 -59.525642 47.419334
+v 21.667177 -67.263481 47.419334
+v 21.628746 -67.295464 47.419334
+v 21.637228 -67.344742 47.419334
+v 21.714092 -67.280769 47.419334
+v 21.684143 -67.362030 47.419334
+v 21.722574 -67.330048 47.419334
+v 33.585514 -64.086235 47.419334
+v 33.551109 -64.122513 47.419334
+v 33.565331 -64.170448 47.419334
+v 33.634136 -64.097885 47.419334
+v 33.613953 -64.182106 47.419334
+v 33.648357 -64.145821 47.419334
+v 27.673693 -65.852509 47.419334
+v 27.637188 -65.886681 47.419334
+v 27.648529 -65.935379 47.419334
+v 27.721535 -65.867035 47.419334
+v 27.696371 -65.949905 47.419334
+v 27.732874 -65.915733 47.419334
+v 9.459481 -69.030472 47.419334
+v 9.417658 -69.057869 47.419334
+v 9.420477 -69.107796 47.419334
+v 9.504123 -69.052986 47.419334
+v 9.465119 -69.130310 47.419334
+v 9.506942 -69.102913 47.419334
+v 15.588664 -68.322037 47.419334
+v 15.548462 -68.351761 47.419334
+v 15.554107 -68.401443 47.419334
+v 15.634511 -68.341988 47.419334
+v 15.599953 -68.421394 47.419334
+v 15.640155 -68.391670 47.419334
+v -2.869980 -69.402596 47.419334
+v -2.914622 -69.425110 47.419334
+v -2.917441 -69.475029 47.419334
+v -2.828157 -69.429993 47.419334
+v -2.875618 -69.502434 47.419334
+v -2.830976 -69.479912 47.419334
+v 3.300000 -69.390381 47.419334
+v 3.256699 -69.415382 47.419334
+v 3.256699 -69.465378 47.419334
+v 3.343301 -69.415382 47.419334
+v 3.300000 -69.490379 47.419334
+v 3.343301 -69.465378 47.419334
+v -15.162859 -68.383232 47.419334
+v -15.209774 -68.400528 47.419334
+v -15.218257 -68.449799 47.419334
+v -15.124428 -68.415222 47.419334
+v -15.179826 -68.481789 47.419334
+v -15.132911 -68.464493 47.419334
+v -9.030857 -69.067139 47.419334
+v -9.076704 -69.087090 47.419334
+v -9.082349 -69.136765 47.419334
+v -8.990655 -69.096863 47.419334
+v -9.042147 -69.166496 47.419334
+v -8.996300 -69.146545 47.419334
+v -33.177395 -64.222015 47.419334
+v -33.226639 -64.230667 47.419334
+v -33.243763 -64.277641 47.419334
+v -33.145275 -64.260330 47.419334
+v -33.211647 -64.315964 47.419334
+v -33.162399 -64.307304 47.419334
+v -27.258041 -65.963226 47.419334
+v -27.306665 -65.974884 47.419334
+v -27.320885 -66.022820 47.419334
+v -27.223639 -65.999512 47.419334
+v -27.286480 -66.059097 47.419334
+v -27.237858 -66.047447 47.419334
+v -21.245670 -67.349350 47.419334
+v -21.293512 -67.363876 47.419334
+v -21.304852 -67.412575 47.419334
+v -21.209166 -67.383522 47.419334
+v -21.268349 -67.446747 47.419334
+v -21.220507 -67.432213 47.419334
+v -44.637409 -59.660904 47.419334
+v -44.687359 -59.663155 47.419334
+v -44.710381 -59.707539 47.419334
+v -44.610485 -59.703033 47.419334
+v -44.683456 -59.749672 47.419334
+v -44.633507 -59.747417 47.419334
+v -38.979374 -62.122410 47.419334
+v -39.029068 -62.127934 47.419334
+v -39.049129 -62.173733 47.419334
+v -38.949741 -62.162682 47.419334
+v -39.019497 -62.214005 47.419334
+v -38.969803 -62.208481 47.419334
+v -65.193367 -46.141720 47.419334
+v -65.241806 -46.129337 47.419334
+v -65.276749 -46.165100 47.419334
+v -65.179863 -46.189861 47.419334
+v -65.263252 -46.213245 47.419334
+v -65.214806 -46.225624 47.419334
+v -60.438412 -50.074959 47.419334
+v -60.487682 -50.066467 47.419334
+v -60.519672 -50.104897 47.419334
+v -60.421127 -50.121876 47.419334
+v -60.502388 -50.151814 47.419334
+v -60.453117 -50.160305 47.419334
+v -55.401268 -53.639313 47.419334
+v -55.451042 -53.634560 47.419334
+v -55.480045 -53.675289 47.419334
+v -55.380497 -53.684792 47.419334
+v -55.459270 -53.720772 47.419334
+v -55.409496 -53.725521 47.419334
+v -50.122208 -56.834126 47.419334
+v -50.172192 -56.832954 47.419334
+v -50.198200 -56.875660 47.419334
+v -50.098228 -56.877998 47.419334
+v -50.174221 -56.919533 47.419334
+v -50.124233 -56.920704 47.419334
+v -69.621544 -41.843548 47.419338
+v -69.668777 -41.827145 47.419338
+v -69.706596 -41.859844 47.419338
+v -69.612137 -41.892654 47.419338
+v -69.697189 -41.908951 47.419338
+v -69.649956 -41.925358 47.419338
+v -73.674110 -37.189163 47.419338
+v -73.719704 -37.168629 47.419338
+v -73.760277 -37.197845 47.419338
+v -73.669098 -37.238911 47.419338
+v -73.755264 -37.247593 47.419338
+v -73.709679 -37.268127 47.419338
+v -80.440002 -26.880930 47.419338
+v -80.480820 -26.852053 47.419338
+v -80.526237 -26.872963 47.419338
+v -80.444603 -26.930719 47.419338
+v -80.530838 -26.922750 47.419338
+v -80.490021 -26.951630 47.419338
+v -83.043358 -21.284365 47.419338
+v -83.080986 -21.251434 47.419338
+v -83.128311 -21.267553 47.419338
+v -83.053062 -21.333412 47.419338
+v -83.138023 -21.316603 47.419338
+v -83.100395 -21.349531 47.419338
+v -77.298569 -32.193768 47.419338
+v -77.342033 -32.169056 47.419338
+v -77.385162 -32.194340 47.419338
+v -77.298233 -32.243767 47.419338
+v -77.384834 -32.244339 47.419338
+v -77.341370 -32.269051 47.419338
+v -86.434860 -9.432073 47.419338
+v -86.464523 -9.391817 47.419338
+v -86.514214 -9.397372 47.419338
+v -86.454895 -9.477883 47.419338
+v -86.534241 -9.443183 47.419338
+v -86.504585 -9.483438 47.419338
+v -85.056610 -15.449177 47.419338
+v -85.090500 -15.412415 47.419338
+v -85.139282 -15.423384 47.419338
+v -85.071503 -15.496907 47.419338
+v -85.154175 -15.471115 47.419338
+v -85.120285 -15.507875 47.419338
+v -87.168144 2.872930 47.419338
+v -87.188179 2.918741 47.419338
+v -87.237869 2.924296 47.419338
+v -87.197800 2.832674 47.419338
+v -87.267525 2.884041 47.419338
+v -87.247490 2.838230 47.419338
+v -87.144737 -3.300002 47.419338
+v -87.169739 -3.256701 47.419338
+v -87.219734 -3.256701 47.419338
+v -87.169739 -3.343303 47.419338
+v -87.244736 -3.300002 47.419338
+v -87.219734 -3.343303 47.419338
+v -85.171051 15.036726 47.419338
+v -85.180756 15.085775 47.419338
+v -85.228088 15.101894 47.419338
+v -85.208672 15.003796 47.419338
+v -85.265709 15.068964 47.419338
+v -85.256004 15.019915 47.419338
+v -86.504562 9.009961 47.419338
+v -86.519447 9.057693 47.419338
+v -86.568230 9.068662 47.419338
+v -86.538452 8.973200 47.419338
+v -86.602119 9.031900 47.419338
+v -86.587234 8.984169 47.419338
+v -77.530418 31.832954 47.419338
+v -77.525406 31.882704 47.419338
+v -77.565979 31.911917 47.419338
+v -77.576004 31.812422 47.419338
+v -77.611572 31.891384 47.419338
+v -77.616585 31.841635 47.419338
+v -80.636063 26.499807 47.419338
+v -80.635735 26.549807 47.419338
+v -80.678864 26.575090 47.419338
+v -80.679527 26.475092 47.419338
+v -80.722328 26.550375 47.419338
+v -80.722664 26.500376 47.419338
+v -83.200142 20.885790 47.419338
+v -83.204735 20.935577 47.419338
+v -83.250153 20.956488 47.419338
+v -83.240959 20.856913 47.419338
+v -83.290977 20.927610 47.419338
+v -83.286377 20.877823 47.419338
+v -73.938103 36.850811 47.419338
+v -73.928688 36.899921 47.419338
+v -73.966515 36.932621 47.419338
+v -73.985329 36.834408 47.419338
+v -74.013748 36.916214 47.419338
+v -74.023155 36.867107 47.419338
+v -69.914017 41.529179 47.419338
+v -69.900513 41.577320 47.419338
+v -69.935455 41.613083 47.419338
+v -69.962456 41.516796 47.419338
+v -69.983902 41.600704 47.419338
+v -69.997398 41.552559 47.419338
+v -50.496086 56.621830 47.419342
+v -50.469158 56.663960 47.419342
+v -50.492184 56.708344 47.419342
+v -50.546036 56.624084 47.419342
+v -50.542130 56.710598 47.419342
+v -50.569057 56.668468 47.419342
+v -55.759148 53.401203 47.419342
+v -55.735168 53.445080 47.419342
+v -55.761177 53.487785 47.419342
+v -55.809135 53.400036 47.419342
+v -55.811161 53.486614 47.419342
+v -55.835140 53.442738 47.419342
+v -60.777576 49.811077 47.419342
+v -60.756805 49.856560 47.419342
+v -60.785805 49.897289 47.419342
+v -60.827351 49.806324 47.419342
+v -60.835579 49.892536 47.419342
+v -60.856350 49.847054 47.419342
+v -65.510818 45.852314 47.419342
+v -65.493530 45.899231 47.419342
+v -65.525520 45.937656 47.419342
+v -65.560089 45.843822 47.419342
+v -65.574799 45.929169 47.419342
+v -65.592079 45.882248 47.419342
+v -39.378147 61.961330 47.419342
+v -39.346027 61.999653 47.419342
+v -39.363155 62.046627 47.419342
+v -39.427391 61.969986 47.419342
+v -39.412399 62.055283 47.419342
+v -39.444519 62.016964 47.419342
+v -45.024837 59.474312 47.419342
+v -44.995205 59.514584 47.419342
+v -45.015266 59.560383 47.419342
+v -45.074532 59.479836 47.419342
+v -45.064960 59.565907 47.419342
+v -45.094593 59.525635 47.419342
+v -21.667177 67.263481 47.419342
+v -21.628746 67.295464 47.419342
+v -21.637228 67.344742 47.419342
+v -21.714092 67.280769 47.419342
+v -21.684143 67.362030 47.419342
+v -21.722574 67.330048 47.419342
+v -33.585514 64.086235 47.419342
+v -33.551109 64.122513 47.419342
+v -33.565331 64.170448 47.419342
+v -33.634136 64.097885 47.419342
+v -33.613953 64.182106 47.419342
+v -33.648357 64.145821 47.419342
+v -27.673693 65.852509 47.419342
+v -27.637188 65.886681 47.419342
+v -27.648529 65.935379 47.419342
+v -27.721535 65.867035 47.419342
+v -27.696371 65.949905 47.419342
+v -27.732874 65.915733 47.419342
+v -9.459481 69.030472 47.419342
+v -9.417658 69.057869 47.419342
+v -9.420477 69.107796 47.419342
+v -9.504123 69.052986 47.419342
+v -9.465119 69.130310 47.419342
+v -9.506942 69.102913 47.419342
+v -15.588664 68.322037 47.419342
+v -15.548462 68.351761 47.419342
+v -15.554107 68.401443 47.419342
+v -15.634511 68.341988 47.419342
+v -15.599953 68.421394 47.419342
+v -15.640155 68.391670 47.419342
+v 2.869980 69.402596 47.419342
+v 2.914622 69.425110 47.419342
+v 2.917441 69.475029 47.419342
+v 2.828157 69.429993 47.419342
+v 2.875618 69.502434 47.419342
+v 2.830976 69.479912 47.419342
+v -3.300000 69.390381 47.419342
+v -3.256699 69.415382 47.419342
+v -3.256699 69.465378 47.419342
+v -3.343301 69.415382 47.419342
+v -3.300000 69.490379 47.419342
+v -3.343301 69.465378 47.419342
+v 15.162859 68.383232 47.419342
+v 15.209774 68.400528 47.419342
+v 15.218257 68.449799 47.419342
+v 15.124428 68.415222 47.419342
+v 15.179826 68.481789 47.419342
+v 15.132911 68.464493 47.419342
+v 9.030857 69.067139 47.419342
+v 9.076704 69.087090 47.419342
+v 9.082349 69.136765 47.419342
+v 8.990655 69.096863 47.419342
+v 9.042147 69.166496 47.419342
+v 8.996300 69.146545 47.419342
+v 33.177395 64.222015 47.419342
+v 33.226639 64.230667 47.419342
+v 33.243763 64.277641 47.419342
+v 33.145275 64.260330 47.419342
+v 33.211647 64.315964 47.419342
+v 33.162399 64.307304 47.419342
+v 27.258041 65.963226 47.419342
+v 27.306665 65.974884 47.419342
+v 27.320885 66.022820 47.419342
+v 27.223639 65.999512 47.419342
+v 27.286480 66.059097 47.419342
+v 27.237858 66.047447 47.419342
+v 21.245670 67.349350 47.419342
+v 21.293512 67.363876 47.419342
+v 21.304852 67.412575 47.419342
+v 21.209166 67.383522 47.419342
+v 21.268349 67.446747 47.419342
+v 21.220507 67.432213 47.419342
+v 44.637409 59.660896 47.419342
+v 44.687359 59.663147 47.419342
+v 44.710381 59.707531 47.419342
+v 44.610485 59.703026 47.419342
+v 44.683456 59.749664 47.419342
+v 44.633507 59.747410 47.419342
+v 38.979374 62.122402 47.419342
+v 39.029068 62.127926 47.419342
+v 39.049129 62.173725 47.419342
+v 38.949741 62.162674 47.419342
+v 39.019497 62.213997 47.419342
+v 38.969803 62.208473 47.419342
+v 65.193367 46.141712 47.419342
+v 65.241806 46.129330 47.419342
+v 65.276749 46.165092 47.419342
+v 65.179863 46.189854 47.419342
+v 65.263252 46.213238 47.419342
+v 65.214806 46.225616 47.419342
+v 60.438412 50.074951 47.419342
+v 60.487682 50.066460 47.419342
+v 60.519672 50.104889 47.419342
+v 60.421127 50.121868 47.419342
+v 60.502388 50.151806 47.419342
+v 60.453117 50.160297 47.419342
+v 55.401268 53.639305 47.419342
+v 55.451042 53.634552 47.419342
+v 55.480045 53.675282 47.419342
+v 55.380497 53.684784 47.419342
+v 55.459270 53.720764 47.419342
+v 55.409496 53.725513 47.419342
+v 50.122208 56.834118 47.419342
+v 50.172192 56.832947 47.419342
+v 50.198200 56.875652 47.419342
+v 50.098228 56.877991 47.419342
+v 50.174221 56.919525 47.419342
+v 50.124233 56.920696 47.419342
+v 69.621544 41.843540 47.419338
+v 69.668777 41.827137 47.419338
+v 69.706596 41.859837 47.419338
+v 69.612137 41.892647 47.419338
+v 69.697189 41.908943 47.419338
+v 69.649956 41.925350 47.419338
+v 73.674110 37.189156 47.419338
+v 73.719704 37.168621 47.419338
+v 73.760277 37.197838 47.419338
+v 73.669098 37.238903 47.419338
+v 73.755264 37.247585 47.419338
+v 73.709679 37.268120 47.419338
+v 80.440002 26.880926 47.419338
+v 80.480820 26.852049 47.419338
+v 80.526237 26.872959 47.419338
+v 80.444603 26.930716 47.419338
+v 80.530838 26.922747 47.419338
+v 80.490021 26.951626 47.419338
+v 83.043358 21.284361 47.419338
+v 83.080986 21.251431 47.419338
+v 83.128311 21.267550 47.419338
+v 83.053062 21.333408 47.419338
+v 83.138023 21.316599 47.419338
+v 83.100395 21.349527 47.419338
+v 77.298569 32.193760 47.419338
+v 77.342033 32.169048 47.419338
+v 77.385162 32.194332 47.419338
+v 77.298233 32.243759 47.419338
+v 77.384834 32.244331 47.419338
+v 77.341370 32.269043 47.419338
+v 86.434860 9.432069 47.419338
+v 86.464523 9.391813 47.419338
+v 86.514214 9.397368 47.419338
+v 86.454895 9.477880 47.419338
+v 86.534241 9.443179 47.419338
+v 86.504585 9.483435 47.419338
+v 85.056610 15.449173 47.419338
+v 85.090500 15.412411 47.419338
+v 85.139282 15.423380 47.419338
+v 85.071503 15.496903 47.419338
+v 85.154175 15.471111 47.419338
+v 85.120285 15.507872 47.419338
+v 87.144737 3.299998 47.419338
+v 87.169739 3.256697 47.419338
+v 87.219734 3.256697 47.419338
+v 87.169739 3.343299 47.419338
+v 87.244736 3.299998 47.419338
+v 87.219734 3.343299 47.419338
+v 87.603249 -0.460133 47.440170
+v 85.783318 14.615106 47.440170
+v 80.663483 28.071392 47.440170
+v 73.399765 39.118938 47.440170
+v 65.004555 47.803185 47.440174
+v 53.023567 56.399723 47.440174
+v 39.063068 63.034153 47.440174
+v 20.004288 68.197174 47.440174
+v 2.497623 69.898598 47.440174
+v -19.298763 68.356636 47.440174
+v -43.407795 61.356514 47.440174
+v -60.107311 51.841091 47.440174
+v -73.352875 39.299427 47.440170
+v -81.622917 26.276159 47.440170
+v -86.518860 11.432999 47.440170
+v -87.514679 -3.214102 47.440170
+v -85.386032 -16.114588 47.440170
+v -80.859581 -27.690897 47.440170
+v -74.704948 -37.458206 47.440170
+v -67.606567 -45.417202 47.440166
+v -57.409115 -53.637634 47.440166
+v -45.468143 -60.349945 47.440166
+v -29.141951 -66.198509 47.440166
+v -10.418418 -69.458588 47.440166
+v 7.136874 -69.719963 47.440166
+v 28.764334 -66.354027 47.440166
+v 45.883278 -60.242630 47.440166
+v 62.476810 -50.025314 47.440166
+v 74.368538 -38.020405 47.440170
+v 82.463196 -24.440210 47.440170
+v 86.208633 -12.940502 47.440170
+v 87.168144 -2.872934 47.440170
+v 87.188179 -2.918745 47.440170
+v 87.197800 -2.832678 47.440170
+v 87.247490 -2.838234 47.440170
+v 87.267525 -2.884045 47.440170
+v 87.237869 -2.924300 47.440170
+v 85.171051 -15.036730 47.440170
+v 85.180756 -15.085779 47.440170
+v 85.208672 -15.003799 47.440170
+v 85.256004 -15.019918 47.440170
+v 85.265709 -15.068968 47.440170
+v 85.228088 -15.101898 47.440170
+v 86.504562 -9.009965 47.440170
+v 86.519447 -9.057696 47.440170
+v 86.538452 -8.973204 47.440170
+v 86.587234 -8.984173 47.440170
+v 86.602119 -9.031904 47.440170
+v 86.568230 -9.068666 47.440170
+v 77.530418 -31.832958 47.719337
+v 77.525406 -31.882708 47.719337
+v 77.576004 -31.812426 47.719337
+v 77.616585 -31.841639 47.719337
+v 77.615845 -31.848957 47.719337
+v 77.611572 -31.891388 47.541565
+v 77.565979 -31.911921 47.719337
+v 77.581154 -31.905087 47.719337
+v 80.636063 -26.499811 47.440170
+v 80.635735 -26.549810 47.440170
+v 80.679527 -26.475096 47.440170
+v 80.722664 -26.500380 47.440170
+v 80.722328 -26.550379 47.440170
+v 80.678864 -26.575094 47.440170
+v 83.200142 -20.885794 47.440170
+v 83.204735 -20.935581 47.440170
+v 83.240959 -20.856916 47.440170
+v 83.286377 -20.877827 47.440170
+v 83.290977 -20.927614 47.440170
+v 83.250153 -20.956491 47.440170
+v 73.938103 -36.850819 47.719337
+v 73.928688 -36.899929 47.719337
+v 73.985329 -36.834415 47.719337
+v 74.023155 -36.867115 47.719337
+v 74.013748 -36.916222 47.719337
+v 73.966515 -36.932629 47.719337
+v 69.914017 -41.529186 47.719337
+v 69.900513 -41.577328 47.719337
+v 69.962456 -41.516804 47.719337
+v 69.997398 -41.552567 47.719337
+v 69.983902 -41.600712 47.719337
+v 69.935455 -41.613091 47.719337
+v 50.496086 -56.621838 47.719334
+v 50.469158 -56.663967 47.719334
+v 50.546036 -56.624092 47.719334
+v 50.569057 -56.668476 47.719334
+v 50.542130 -56.710606 47.719334
+v 50.492184 -56.708351 47.719334
+v 55.759148 -53.401211 47.719334
+v 55.735168 -53.445087 47.719334
+v 55.809135 -53.400043 47.719334
+v 55.835140 -53.442745 47.719334
+v 55.811161 -53.486622 47.719334
+v 55.761177 -53.487793 47.719334
+v 60.777576 -49.811085 47.719334
+v 60.756805 -49.856567 47.719334
+v 60.827351 -49.806332 47.719334
+v 60.856350 -49.847061 47.719334
+v 60.835579 -49.892544 47.719334
+v 60.785805 -49.897297 47.719334
+v 65.510818 -45.852322 47.719334
+v 65.493530 -45.899239 47.719334
+v 65.560089 -45.843830 47.719334
+v 65.592079 -45.882256 47.719334
+v 65.574799 -45.929176 47.719334
+v 65.525520 -45.937664 47.719334
+v 39.378147 -61.961338 47.719334
+v 39.346027 -61.999660 47.719334
+v 39.427391 -61.969994 47.719334
+v 39.444519 -62.016972 47.719334
+v 39.412399 -62.055290 47.719334
+v 39.363155 -62.046635 47.719334
+v 45.024837 -59.474319 47.719334
+v 44.995205 -59.514591 47.719334
+v 45.074532 -59.479843 47.719334
+v 45.094593 -59.525642 47.719334
+v 45.064960 -59.565914 47.719334
+v 45.015266 -59.560390 47.719334
+v 21.667177 -67.263481 47.440166
+v 21.628746 -67.295464 47.440166
+v 21.714092 -67.280769 47.440166
+v 21.722574 -67.330048 47.440166
+v 21.684143 -67.362030 47.440166
+v 21.637228 -67.344742 47.440166
+v 33.585514 -64.086235 47.719334
+v 33.551109 -64.122513 47.556953
+v 33.575199 -64.097115 47.719334
+v 33.599339 -64.089546 47.719334
+v 33.634136 -64.097885 47.544342
+v 33.637245 -64.108376 47.440166
+v 33.648357 -64.145821 47.440166
+v 33.613953 -64.182106 47.440166
+v 33.565331 -64.170448 47.440166
+v 33.554596 -64.134270 47.440166
+v 27.673693 -65.852509 47.440166
+v 27.637188 -65.886681 47.440166
+v 27.721535 -65.867035 47.440166
+v 27.732874 -65.915733 47.440166
+v 27.696371 -65.949905 47.440166
+v 27.648529 -65.935379 47.440166
+v 9.459481 -69.030472 47.440166
+v 9.417658 -69.057869 47.440166
+v 9.504123 -69.052986 47.440166
+v 9.506942 -69.102913 47.440166
+v 9.465119 -69.130310 47.440166
+v 9.420477 -69.107796 47.440166
+v 15.588664 -68.322037 47.440166
+v 15.548462 -68.351761 47.440166
+v 15.634511 -68.341988 47.440166
+v 15.640155 -68.391670 47.440166
+v 15.599953 -68.421394 47.440166
+v 15.554107 -68.401443 47.440166
+v -2.869980 -69.402596 47.440166
+v -2.914622 -69.425110 47.440166
+v -2.828157 -69.429993 47.440166
+v -2.830976 -69.479912 47.440166
+v -2.875618 -69.502434 47.440166
+v -2.917441 -69.475029 47.440166
+v 3.300000 -69.390381 47.440166
+v 3.256699 -69.415382 47.440166
+v 3.343301 -69.415382 47.440166
+v 3.343301 -69.465378 47.440166
+v 3.300000 -69.490379 47.440166
+v 3.256699 -69.465378 47.440166
+v -15.162859 -68.383232 47.440166
+v -15.209774 -68.400528 47.440166
+v -15.124428 -68.415222 47.440166
+v -15.132911 -68.464493 47.440166
+v -15.179826 -68.481789 47.440166
+v -15.218257 -68.449799 47.440166
+v -9.030857 -69.067139 47.440166
+v -9.076704 -69.087090 47.440166
+v -8.990655 -69.096863 47.440166
+v -8.996300 -69.146545 47.440166
+v -9.042147 -69.166496 47.440166
+v -9.082349 -69.136765 47.440166
+v -33.177395 -64.222015 47.440166
+v -33.226639 -64.230667 47.440166
+v -33.145275 -64.260330 47.440166
+v -33.162399 -64.307304 47.440166
+v -33.211647 -64.315964 47.440166
+v -33.243763 -64.277641 47.440166
+v -27.258041 -65.963226 47.440166
+v -27.306665 -65.974884 47.440166
+v -27.223639 -65.999512 47.440166
+v -27.237858 -66.047447 47.440166
+v -27.286480 -66.059097 47.440166
+v -27.320885 -66.022820 47.440166
+v -21.245670 -67.349350 47.440166
+v -21.293512 -67.363876 47.440166
+v -21.209166 -67.383522 47.440166
+v -21.220507 -67.432213 47.440166
+v -21.268349 -67.446747 47.440166
+v -21.304852 -67.412575 47.440166
+v -44.637409 -59.660904 47.719334
+v -44.687359 -59.663155 47.719334
+v -44.610485 -59.703033 47.719334
+v -44.633507 -59.747417 47.719334
+v -44.683456 -59.749672 47.719334
+v -44.710381 -59.707539 47.719334
+v -38.979374 -62.122410 47.719334
+v -39.029068 -62.127934 47.719334
+v -38.949741 -62.162682 47.719334
+v -38.951939 -62.167694 47.719334
+v -38.963711 -62.194572 47.440166
+v -38.969803 -62.208481 47.440166
+v -39.019497 -62.214005 47.440166
+v -39.049129 -62.173733 47.440166
+v -39.044769 -62.163776 47.440166
+v -39.032997 -62.136902 47.719334
+v -65.193367 -46.141720 47.719334
+v -65.241806 -46.129337 47.719334
+v -65.179863 -46.189861 47.719334
+v -65.214806 -46.225624 47.719334
+v -65.263252 -46.213245 47.719334
+v -65.276749 -46.165100 47.719334
+v -60.438412 -50.074959 47.719334
+v -60.487682 -50.066467 47.719334
+v -60.421127 -50.121876 47.719334
+v -60.453117 -50.160305 47.719334
+v -60.502388 -50.151814 47.719334
+v -60.519672 -50.104897 47.719334
+v -55.401268 -53.639313 47.719334
+v -55.451042 -53.634560 47.719334
+v -55.380497 -53.684792 47.719334
+v -55.409496 -53.725521 47.719334
+v -55.459270 -53.720772 47.719334
+v -55.480045 -53.675289 47.719334
+v -50.122208 -56.834126 47.719334
+v -50.172192 -56.832954 47.719334
+v -50.098228 -56.877998 47.719334
+v -50.124233 -56.920704 47.719334
+v -50.174221 -56.919533 47.719334
+v -50.198200 -56.875660 47.719334
+v -69.621544 -41.843548 47.719337
+v -69.668777 -41.827145 47.719337
+v -69.612137 -41.892654 47.719337
+v -69.649956 -41.925358 47.719337
+v -69.697189 -41.908951 47.719337
+v -69.706596 -41.859844 47.719337
+v -73.674110 -37.189163 47.719337
+v -73.719704 -37.168629 47.719337
+v -73.669098 -37.238911 47.719337
+v -73.709679 -37.268127 47.719337
+v -73.755264 -37.247593 47.719337
+v -73.760277 -37.197845 47.719337
+v -80.440002 -26.880930 47.440170
+v -80.480820 -26.852053 47.440170
+v -80.444603 -26.930719 47.440170
+v -80.490021 -26.951630 47.440170
+v -80.530838 -26.922750 47.440170
+v -80.526237 -26.872963 47.440170
+v -83.043358 -21.284365 47.440170
+v -83.080986 -21.251434 47.440170
+v -83.053062 -21.333412 47.440170
+v -83.100395 -21.349531 47.440170
+v -83.138023 -21.316603 47.440170
+v -83.128311 -21.267553 47.440170
+v -77.298569 -32.193768 47.719337
+v -77.342033 -32.169056 47.679527
+v -77.334351 -32.173420 47.719337
+v -77.298325 -32.230675 47.719337
+v -77.298233 -32.243767 47.653534
+v -77.317574 -32.255100 47.440170
+v -77.341370 -32.269051 47.440170
+v -77.384834 -32.244339 47.440170
+v -77.385162 -32.194340 47.440170
+v -77.363716 -32.181767 47.440170
+v -86.434860 -9.432073 47.440170
+v -86.464523 -9.391817 47.440170
+v -86.454895 -9.477883 47.440170
+v -86.504585 -9.483438 47.440170
+v -86.534241 -9.443183 47.440170
+v -86.514214 -9.397372 47.440170
+v -85.056610 -15.449177 47.440170
+v -85.090500 -15.412415 47.440170
+v -85.071503 -15.496907 47.440170
+v -85.120285 -15.507875 47.440170
+v -85.154175 -15.471115 47.440170
+v -85.139282 -15.423384 47.440170
+v -87.168144 2.872930 47.440170
+v -87.188179 2.918741 47.440170
+v -87.197800 2.832674 47.440170
+v -87.247490 2.838230 47.440170
+v -87.267525 2.884041 47.440170
+v -87.237869 2.924296 47.440170
+v -87.144737 -3.300002 47.440170
+v -87.169739 -3.256701 47.440170
+v -87.169739 -3.343303 47.440170
+v -87.219734 -3.343303 47.440170
+v -87.244736 -3.300002 47.440170
+v -87.219734 -3.256701 47.440170
+v -85.171051 15.036726 47.440170
+v -85.180756 15.085775 47.440170
+v -85.208672 15.003796 47.440170
+v -85.256004 15.019915 47.440170
+v -85.265709 15.068964 47.440170
+v -85.228088 15.101894 47.440170
+v -86.504562 9.009961 47.440170
+v -86.519447 9.057693 47.440170
+v -86.538452 8.973200 47.440170
+v -86.587234 8.984169 47.440170
+v -86.602119 9.031900 47.440170
+v -86.568230 9.068662 47.440170
+v -77.530418 31.832954 47.719337
+v -77.525406 31.882704 47.719337
+v -77.576004 31.812422 47.719337
+v -77.616585 31.841635 47.719337
+v -77.615845 31.848953 47.719337
+v -77.611572 31.891384 47.541565
+v -77.565979 31.911917 47.719337
+v -77.581154 31.905083 47.719337
+v -80.636063 26.499807 47.440170
+v -80.635735 26.549807 47.440170
+v -80.679527 26.475092 47.440170
+v -80.722664 26.500376 47.440170
+v -80.722328 26.550375 47.440170
+v -80.678864 26.575090 47.440170
+v -83.200142 20.885790 47.440170
+v -83.204735 20.935577 47.440170
+v -83.240959 20.856913 47.440170
+v -83.286377 20.877823 47.440170
+v -83.290977 20.927610 47.440170
+v -83.250153 20.956488 47.440170
+v -73.938103 36.850811 47.719337
+v -73.928688 36.899921 47.719337
+v -73.985329 36.834408 47.719337
+v -74.023155 36.867107 47.719337
+v -74.013748 36.916214 47.719337
+v -73.966515 36.932621 47.719337
+v -69.914017 41.529179 47.719337
+v -69.900513 41.577320 47.719337
+v -69.962456 41.516796 47.719337
+v -69.997398 41.552559 47.719337
+v -69.983902 41.600704 47.719337
+v -69.935455 41.613083 47.719337
+v -50.496086 56.621830 47.719341
+v -50.469158 56.663960 47.719341
+v -50.546036 56.624084 47.719341
+v -50.569057 56.668468 47.719341
+v -50.542130 56.710598 47.719341
+v -50.492184 56.708344 47.719341
+v -55.759148 53.401203 47.719341
+v -55.735168 53.445080 47.719341
+v -55.809135 53.400036 47.719341
+v -55.835140 53.442738 47.719341
+v -55.811161 53.486614 47.719341
+v -55.761177 53.487785 47.719341
+v -60.777576 49.811077 47.719341
+v -60.756805 49.856560 47.719341
+v -60.827351 49.806324 47.719341
+v -60.856350 49.847054 47.719341
+v -60.835579 49.892536 47.719341
+v -60.785805 49.897289 47.719341
+v -65.510818 45.852314 47.719341
+v -65.493530 45.899231 47.719341
+v -65.560089 45.843822 47.719341
+v -65.592079 45.882248 47.719341
+v -65.574799 45.929169 47.719341
+v -65.525520 45.937656 47.719341
+v -39.378147 61.961330 47.719341
+v -39.346027 61.999653 47.719341
+v -39.427391 61.969986 47.719341
+v -39.444519 62.016964 47.719341
+v -39.412399 62.055283 47.719341
+v -39.363155 62.046627 47.719341
+v -45.024837 59.474312 47.719341
+v -44.995205 59.514584 47.719341
+v -45.074532 59.479836 47.719341
+v -45.094593 59.525635 47.719341
+v -45.064960 59.565907 47.719341
+v -45.015266 59.560383 47.719341
+v -21.667177 67.263481 47.440174
+v -21.628746 67.295464 47.440174
+v -21.714092 67.280769 47.440174
+v -21.722574 67.330048 47.440174
+v -21.684143 67.362030 47.440174
+v -21.637228 67.344742 47.440174
+v -33.585514 64.086235 47.719341
+v -33.551109 64.122513 47.556961
+v -33.575199 64.097115 47.719341
+v -33.599339 64.089546 47.719341
+v -33.634136 64.097885 47.544350
+v -33.637245 64.108376 47.440174
+v -33.648357 64.145821 47.440174
+v -33.613953 64.182106 47.440174
+v -33.565331 64.170448 47.440174
+v -33.554596 64.134270 47.440174
+v -27.673693 65.852509 47.440174
+v -27.637188 65.886681 47.440174
+v -27.721535 65.867035 47.440174
+v -27.732874 65.915733 47.440174
+v -27.696371 65.949905 47.440174
+v -27.648529 65.935379 47.440174
+v -9.459481 69.030472 47.440174
+v -9.417658 69.057869 47.440174
+v -9.504123 69.052986 47.440174
+v -9.506942 69.102913 47.440174
+v -9.465119 69.130310 47.440174
+v -9.420477 69.107796 47.440174
+v -15.588664 68.322037 47.440174
+v -15.548462 68.351761 47.440174
+v -15.634511 68.341988 47.440174
+v -15.640155 68.391670 47.440174
+v -15.599953 68.421394 47.440174
+v -15.554107 68.401443 47.440174
+v 2.869980 69.402596 47.440174
+v 2.914622 69.425110 47.440174
+v 2.828157 69.429993 47.440174
+v 2.830976 69.479912 47.440174
+v 2.875618 69.502434 47.440174
+v 2.917441 69.475029 47.440174
+v -3.300000 69.390381 47.440174
+v -3.256699 69.415382 47.440174
+v -3.343301 69.415382 47.440174
+v -3.343301 69.465378 47.440174
+v -3.300000 69.490379 47.440174
+v -3.256699 69.465378 47.440174
+v 15.162859 68.383232 47.440174
+v 15.209774 68.400528 47.440174
+v 15.124428 68.415222 47.440174
+v 15.132911 68.464493 47.440174
+v 15.179826 68.481789 47.440174
+v 15.218257 68.449799 47.440174
+v 9.030857 69.067139 47.440174
+v 9.076704 69.087090 47.440174
+v 8.990655 69.096863 47.440174
+v 8.996300 69.146545 47.440174
+v 9.042147 69.166496 47.440174
+v 9.082349 69.136765 47.440174
+v 33.177395 64.222015 47.440174
+v 33.226639 64.230667 47.440174
+v 33.145275 64.260330 47.440174
+v 33.162399 64.307304 47.440174
+v 33.211647 64.315964 47.440174
+v 33.243763 64.277641 47.440174
+v 27.258041 65.963226 47.440174
+v 27.306665 65.974884 47.440174
+v 27.223639 65.999512 47.440174
+v 27.237858 66.047447 47.440174
+v 27.286480 66.059097 47.440174
+v 27.320885 66.022820 47.440174
+v 21.245670 67.349350 47.440174
+v 21.293512 67.363876 47.440174
+v 21.209166 67.383522 47.440174
+v 21.220507 67.432213 47.440174
+v 21.268349 67.446747 47.440174
+v 21.304852 67.412575 47.440174
+v 44.637409 59.660896 47.719341
+v 44.687359 59.663147 47.719341
+v 44.610485 59.703026 47.719341
+v 44.633507 59.747410 47.719341
+v 44.683456 59.749664 47.719341
+v 44.710381 59.707531 47.719341
+v 38.979374 62.122402 47.719341
+v 39.029068 62.127926 47.719341
+v 38.949741 62.162674 47.719341
+v 38.951939 62.167686 47.719341
+v 38.963711 62.194565 47.440174
+v 38.969803 62.208473 47.440174
+v 39.019497 62.213997 47.440174
+v 39.049129 62.173725 47.440174
+v 39.044769 62.163769 47.440174
+v 39.032997 62.136894 47.719341
+v 65.193367 46.141712 47.719341
+v 65.241806 46.129330 47.719341
+v 65.179863 46.189854 47.719341
+v 65.214806 46.225616 47.719341
+v 65.263252 46.213238 47.719341
+v 65.276749 46.165092 47.719341
+v 60.438412 50.074951 47.719341
+v 60.487682 50.066460 47.719341
+v 60.421127 50.121868 47.719341
+v 60.453117 50.160297 47.719341
+v 60.502388 50.151806 47.719341
+v 60.519672 50.104889 47.719341
+v 55.401268 53.639305 47.719341
+v 55.451042 53.634552 47.719341
+v 55.380497 53.684784 47.719341
+v 55.409496 53.725513 47.719341
+v 55.459270 53.720764 47.719341
+v 55.480045 53.675282 47.719341
+v 50.122208 56.834118 47.719341
+v 50.172192 56.832947 47.719341
+v 50.098228 56.877991 47.719341
+v 50.124233 56.920696 47.719341
+v 50.174221 56.919525 47.719341
+v 50.198200 56.875652 47.719341
+v 69.621544 41.843540 47.719337
+v 69.668777 41.827137 47.719337
+v 69.612137 41.892647 47.719337
+v 69.649956 41.925350 47.719337
+v 69.697189 41.908943 47.719337
+v 69.706596 41.859837 47.719337
+v 73.674110 37.189156 47.719337
+v 73.719704 37.168621 47.719337
+v 73.669098 37.238903 47.719337
+v 73.709679 37.268120 47.719337
+v 73.755264 37.247585 47.719337
+v 73.760277 37.197838 47.719337
+v 80.440002 26.880926 47.440170
+v 80.480820 26.852049 47.440170
+v 80.444603 26.930716 47.440170
+v 80.490021 26.951626 47.440170
+v 80.530838 26.922747 47.440170
+v 80.526237 26.872959 47.440170
+v 83.043358 21.284361 47.440170
+v 83.080986 21.251431 47.440170
+v 83.053062 21.333408 47.440170
+v 83.100395 21.349527 47.440170
+v 83.138023 21.316599 47.440170
+v 83.128311 21.267550 47.440170
+v 77.298569 32.193760 47.719337
+v 77.342033 32.169048 47.679527
+v 77.334351 32.173412 47.719337
+v 77.298325 32.230667 47.719337
+v 77.298233 32.243759 47.653534
+v 77.317574 32.255093 47.440170
+v 77.341370 32.269043 47.440170
+v 77.384834 32.244331 47.440170
+v 77.385162 32.194332 47.440170
+v 77.363716 32.181759 47.440170
+v 86.434860 9.432069 47.440170
+v 86.464523 9.391813 47.440170
+v 86.454895 9.477880 47.440170
+v 86.504585 9.483435 47.440170
+v 86.534241 9.443179 47.440170
+v 86.514214 9.397368 47.440170
+v 85.056610 15.449173 47.440170
+v 85.090500 15.412411 47.440170
+v 85.071503 15.496903 47.440170
+v 85.120285 15.507872 47.440170
+v 85.154175 15.471111 47.440170
+v 85.139282 15.423380 47.440170
+v 87.144737 3.299998 47.440170
+v 87.169739 3.256697 47.440170
+v 87.169739 3.343299 47.440170
+v 87.219734 3.343299 47.440170
+v 87.244736 3.299998 47.440170
+v 87.219734 3.256697 47.440170
+v 86.782829 -0.453837 47.440170
+v 85.652962 11.452106 47.440170
+v 82.332146 22.512367 47.440170
+v 66.901260 44.956993 47.440174
+v 55.271545 54.060265 47.440174
+v 47.226982 58.597389 47.440174
+v 14.970764 68.134209 47.440174
+v -9.400998 68.740936 47.440174
+v -53.304955 55.376934 47.440174
+v -68.445038 43.550758 47.440170
+v -78.382797 30.631401 47.440170
+v -84.371376 16.812122 47.440170
+v -86.729553 2.606747 47.440170
+v -85.570694 -11.860113 47.440170
+v -82.257141 -22.695541 47.440170
+v -66.901260 -44.957001 47.440166
+v -55.271545 -54.060272 47.440166
+v -47.226982 -58.597397 47.440166
+v -14.970764 -68.134209 47.440166
+v 9.400998 -68.740936 47.440166
+v 53.959118 -54.981121 47.440166
+v 68.047150 -43.952225 47.440166
+v 78.358078 -30.673525 47.440170
+v 84.504669 -16.350958 47.440170
+v 86.173538 -8.546471 47.440170
+v 86.400230 -0.450900 51.084740
+v 84.579681 14.467759 51.084740
+v 79.467026 27.763409 51.084740
+v 72.224831 38.655842 51.084740
+v 63.860889 47.202835 51.084743
+v 54.957058 53.807079 51.084743
+v 42.673187 60.281162 51.084743
+v 28.516993 65.118805 51.084743
+v 9.277218 68.348076 51.084743
+v -8.101107 68.453056 51.084743
+v -24.383680 66.158562 51.084743
+v -40.410969 61.298134 51.084743
+v -56.032085 53.212811 51.084743
+v -69.355042 42.049316 51.084740
+v -78.712090 29.285980 51.084740
+v -84.564552 14.660898 51.084740
+v -86.400772 -0.221952 51.084740
+v -84.788475 -13.619887 51.084740
+v -80.472687 -25.762300 51.084740
+v -74.289986 -36.006439 51.084740
+v -67.028519 -44.302479 51.084736
+v -56.520214 -52.785652 51.084736
+v -44.173359 -59.619423 51.084736
+v -27.251673 -65.440712 51.084736
+v -7.819139 -68.456062 51.084736
+v 9.559530 -68.344421 51.084736
+v 29.958801 -64.790779 51.084736
+v 46.832165 -58.454273 51.084736
+v 63.089245 -47.971123 51.084736
+v 75.075752 -35.045830 51.084740
+v 82.168251 -22.026911 51.084740
+v 85.258774 -11.606925 51.084740
+v 85.171761 14.540437 51.084740
+v 86.992012 -0.455442 51.084740
+v 80.055565 27.915281 51.084740
+v 72.802765 38.884117 51.084740
+v 64.423477 47.498642 51.084743
+v 55.504360 54.159569 51.084743
+v 43.205936 60.695488 51.084743
+v 29.043320 65.592308 51.084743
+v 9.804994 68.898361 51.084743
+v -7.660517 69.075264 51.084743
+v -23.952185 66.856262 51.084743
+v -40.003860 62.094658 51.084743
+v -55.674446 54.151756 51.084743
+v -70.504120 41.675549 51.084740
+v -79.756981 28.608986 51.084740
+v -85.110207 14.915622 51.084740
+v -86.990021 0.689133 51.084740
+v -85.404839 -13.585333 51.084740
+v -80.786736 -26.470850 51.084740
+v -74.119286 -37.218132 51.084740
+v -66.313789 -45.799435 51.084736
+v -55.075180 -54.433098 51.084736
+v -41.918068 -61.243866 51.084736
+v -23.918188 -66.815895 51.084736
+v -3.290156 -69.266998 51.084736
+v 14.166913 -68.475189 51.084736
+v 34.641628 -64.007362 51.084736
+v 51.503632 -56.665352 51.084736
+v 67.641533 -44.648094 51.084736
+v 78.019806 -31.646408 51.084740
+v 84.359482 -17.579777 51.084740
+v 86.287483 -9.196812 51.084740
+v 93.582611 15.534201 51.084740
+v 95.398521 -0.519960 51.084740
+v 88.419456 29.998890 51.084740
+v 81.020370 42.031540 51.084740
+v 72.417854 51.600353 51.084743
+v 60.145805 61.169800 51.084743
+v 45.945858 68.668732 51.084743
+v 26.751375 74.802246 51.084743
+v 4.934265 77.622017 51.084743
+v -13.775722 76.982132 51.084743
+v -35.546089 72.537209 51.084743
+v -53.966518 64.905052 51.084743
+v -71.707359 52.377522 51.084743
+v -83.518639 38.650410 51.084740
+v -91.220398 23.544176 51.084740
+v -95.042671 7.018288 51.084740
+v -94.598587 -10.327083 51.084740
+v -90.043747 -26.410324 51.084740
+v -82.587440 -39.882488 51.084740
+v -73.554726 -50.506748 51.084736
+v -63.814392 -58.676659 51.084736
+v -50.410267 -66.632675 51.084736
+v -35.103149 -72.608162 51.084736
+v -14.471948 -76.876930 51.084736
+v 4.231803 -77.656113 51.084736
+v 27.550045 -74.672089 51.084736
+v 53.497108 -65.155518 51.084736
+v 71.487961 -52.578518 51.084736
+v 84.057625 -37.833607 51.084740
+v 91.974419 -21.373732 51.084740
+v 94.479424 -11.203293 51.084740
+v 93.582611 15.534203 0.000001
+v 95.398521 -0.519958 0.000000
+v 88.419456 29.998892 0.000001
+v 81.020370 42.031544 0.000002
+v 72.417854 51.600357 0.000002
+v 60.145805 61.169804 0.000003
+v 45.945858 68.668732 0.000003
+v 26.751375 74.802246 0.000003
+v 4.934265 77.622017 0.000003
+v -13.775722 76.982132 0.000003
+v -35.546089 72.537209 0.000003
+v -53.966518 64.905052 0.000003
+v -71.707359 52.377525 0.000002
+v -83.518639 38.650414 0.000002
+v -91.220398 23.544178 0.000001
+v -95.042671 7.018290 0.000000
+v -94.598587 -10.327081 0.000000
+v -90.043747 -26.410322 -0.000001
+v -82.587440 -39.882484 -0.000002
+v -73.554726 -50.506744 -0.000002
+v -63.814392 -58.676655 -0.000003
+v -50.410267 -66.632675 -0.000003
+v -35.103149 -72.608162 -0.000003
+v -14.471948 -76.876930 -0.000003
+v 4.231803 -77.656113 -0.000003
+v 27.550045 -74.672089 -0.000003
+v 53.497108 -65.155518 -0.000003
+v 71.487961 -52.578514 -0.000002
+v 84.057625 -37.833603 -0.000002
+v 91.974419 -21.373730 -0.000001
+v 94.479424 -11.203291 0.000000
+v 42.611393 -0.007754 0.000000
+v 42.609390 -0.114814 0.000000
+v 42.612598 0.099305 0.000000
+v 42.613007 0.206363 0.000000
+v 42.612617 0.313417 0.000000
+v 42.226364 3.532824 0.000000
+v 41.121574 6.692115 0.000000
+v 39.317043 9.737532 0.000000
+v 36.843483 12.617250 0.000001
+v 32.578991 16.114941 0.000001
+v 26.612295 19.463064 0.000001
+v 17.119766 22.752020 0.000001
+v 5.089171 24.601774 0.000001
+v -7.377306 24.344406 0.000001
+v -19.211924 22.001961 0.000001
+v -29.401056 17.775066 0.000001
+v -36.438938 12.656002 0.000001
+v -39.995457 8.347209 0.000000
+v -41.832134 4.513335 0.000000
+v -42.565536 0.960662 0.000000
+v -42.411350 -2.612044 0.000000
+v -41.372791 -6.130282 0.000000
+v -39.471516 -9.520689 0.000000
+v -36.747166 -12.712568 -0.000001
+v -33.256550 -15.639361 -0.000001
+v -27.538357 -19.024868 -0.000001
+v -19.898857 -21.986435 -0.000001
+v -8.332186 -24.316927 -0.000001
+v 5.456104 -24.523806 -0.000001
+v 18.672485 -22.160097 -0.000001
+v 29.931612 -17.473566 -0.000001
+v 36.796482 -12.305256 -0.000001
+v 40.298946 -7.850019 0.000000
+v 42.024128 -3.896291 0.000000
+v 42.441559 -2.011467 0.000000
+v 39.838230 -0.093545 0.000000
+v 39.516113 2.730202 0.000000
+v 38.537918 5.522617 0.000000
+v 36.908577 8.243221 0.000000
+v 34.645119 10.843855 0.000000
+v 30.698856 14.037565 0.000001
+v 25.127754 17.129145 0.000001
+v 16.206894 20.206079 0.000001
+v 4.856043 21.986824 0.000001
+v -5.624547 21.947376 0.000001
+v -17.482336 19.929909 0.000001
+v -26.203007 16.709764 0.000001
+v -33.097588 12.352708 0.000001
+v -37.015251 8.220969 0.000000
+v -38.866879 4.904790 0.000000
+v -39.721897 1.750426 0.000000
+v -39.746258 -1.429409 0.000000
+v -38.939983 -4.589345 0.000000
+v -37.306488 -7.676668 0.000000
+v -34.864738 -10.625438 0.000000
+v -31.657534 -13.363870 -0.000001
+v -26.307478 -16.570164 -0.000001
+v -19.064821 -19.411480 -0.000001
+v -8.004031 -21.693142 -0.000001
+v 2.450935 -22.123152 -0.000001
+v 15.346885 -20.466660 -0.000001
+v 26.660564 -16.484013 -0.000001
+v 33.432499 -12.070296 -0.000001
+v 37.124111 -8.067621 0.000000
+v 38.983471 -4.608403 0.000000
+v 39.622131 -2.359672 0.000000
+f 1 2 3
+f 4 2 1
+f 4 5 2
+f 6 5 4
+f 7 4 1
+f 7 1 8
+f 9 4 7
+f 10 11 12
+f 13 10 12
+f 14 8 1
+f 15 13 14
+f 3 14 1
+f 3 15 14
+f 15 10 13
+f 3 16 15
+f 2 16 3
+f 5 17 16
+f 5 16 2
+f 18 5 6
+f 18 6 19
+f 17 5 18
+f 20 17 18
+f 21 20 22
+f 21 22 23
+f 21 17 20
+f 9 6 4
+f 19 6 9
+f 24 19 9
+f 24 9 7
+f 25 18 19
+f 26 25 19
+f 26 19 24
+f 27 25 26
+f 28 27 26
+f 29 30 27
+f 29 27 28
+f 31 32 33
+f 34 33 29
+f 34 31 33
+f 34 29 28
+f 35 36 31
+f 35 31 34
+f 37 38 36
+f 37 36 35
+f 39 40 37
+f 39 37 35
+f 41 42 40
+f 41 40 39
+f 43 42 41
+f 44 43 41
+f 45 46 47
+f 45 47 44
+f 45 44 41
+f 48 46 45
+f 49 50 48
+f 51 48 45
+f 51 49 48
+f 52 49 51
+f 53 54 52
+f 55 53 52
+f 55 52 51
+f 56 57 53
+f 56 53 55
+f 58 56 55
+f 58 59 56
+f 60 61 59
+f 60 59 58
+f 62 61 60
+f 63 62 60
+f 64 63 60
+f 64 65 66
+f 64 66 67
+f 64 67 63
+f 68 65 64
+f 68 69 65
+f 70 69 68
+f 70 71 69
+f 72 70 68
+f 73 74 72
+f 75 72 68
+f 75 73 72
+f 76 73 75
+f 77 76 75
+f 78 76 77
+f 78 79 76
+f 80 81 82
+f 83 78 77
+f 83 80 82
+f 83 82 78
+f 84 80 83
+f 84 85 80
+f 86 85 84
+f 87 85 86
+f 87 88 85
+f 89 90 91
+f 92 87 86
+f 92 89 91
+f 92 91 87
+f 93 89 92
+f 93 94 89
+f 95 96 94
+f 97 94 93
+f 97 95 94
+f 98 95 97
+f 99 100 98
+f 99 98 97
+f 101 100 99
+f 102 101 99
+f 103 104 105
+f 103 105 102
+f 103 102 99
+f 106 104 103
+f 107 106 103
+f 108 106 107
+f 109 108 107
+f 110 109 107
+f 110 111 112
+f 110 112 109
+f 113 111 110
+f 114 115 113
+f 116 113 110
+f 116 114 113
+f 117 114 116
+f 118 117 116
+f 118 119 117
+f 120 119 118
+f 121 120 118
+f 122 121 118
+f 123 122 118
+f 123 124 125
+f 123 125 122
+f 126 124 123
+f 127 128 126
+f 129 126 123
+f 129 127 126
+f 130 127 129
+f 131 132 130
+f 133 130 129
+f 133 131 130
+f 134 131 133
+f 135 134 133
+f 8 14 134
+f 8 134 135
+f 24 7 8
+f 24 8 135
+f 131 136 137
+f 131 137 132
+f 134 138 136
+f 134 136 131
+f 13 138 134
+f 14 13 134
+f 139 140 141
+f 142 140 139
+f 143 140 142
+f 144 141 137
+f 144 139 141
+f 145 143 142
+f 136 145 144
+f 136 144 137
+f 138 12 143
+f 138 145 136
+f 138 143 145
+f 13 12 138
+f 140 146 141
+f 140 147 146
+f 143 148 147
+f 143 147 140
+f 11 148 143
+f 12 11 143
+f 149 150 151
+f 152 149 151
+f 153 154 155
+f 156 153 155
+f 156 157 153
+f 158 159 160
+f 161 158 160
+f 161 162 158
+f 163 164 165
+f 166 163 165
+f 167 163 166
+f 168 163 167
+f 169 168 167
+f 169 170 168
+f 171 172 146
+f 147 171 146
+f 173 171 147
+f 148 173 147
+f 10 173 148
+f 174 175 10
+f 11 10 148
+f 176 150 149
+f 153 176 154
+f 158 153 157
+f 158 157 159
+f 163 158 162
+f 163 162 164
+f 171 168 172
+f 172 168 170
+f 175 173 10
+f 149 154 176
+f 15 174 10
+f 16 177 174
+f 16 174 15
+f 17 21 177
+f 17 177 16
+f 178 21 23
+f 179 178 23
+f 180 178 179
+f 181 180 179
+f 182 180 181
+f 183 182 181
+f 184 179 23
+f 184 23 22
+f 181 179 184
+f 185 181 184
+f 183 181 185
+f 186 183 185
+f 187 185 184
+f 188 185 187
+f 186 185 188
+f 189 184 22
+f 189 22 20
+f 190 184 189
+f 190 187 184
+f 191 186 188
+f 192 191 190
+f 192 190 189
+f 193 186 191
+f 193 191 192
+f 25 189 20
+f 25 20 18
+f 192 189 25
+f 27 192 25
+f 193 192 27
+f 30 193 27
+f 194 195 196
+f 182 183 186
+f 197 194 182
+f 197 195 194
+f 197 182 186
+f 193 197 186
+f 198 193 30
+f 198 30 29
+f 198 29 199
+f 198 199 200
+f 198 197 193
+f 201 198 200
+f 33 202 199
+f 33 199 29
+f 203 204 202
+f 205 202 33
+f 205 203 202
+f 32 205 33
+f 206 205 32
+f 207 206 208
+f 207 205 206
+f 209 208 210
+f 209 207 208
+f 211 207 209
+f 212 211 213
+f 212 207 211
+f 31 214 206
+f 31 206 32
+f 36 215 214
+f 36 214 31
+f 38 216 215
+f 38 215 36
+f 217 218 219
+f 220 217 221
+f 220 221 222
+f 220 222 223
+f 220 218 217
+f 216 220 223
+f 224 216 38
+f 224 38 37
+f 224 37 225
+f 224 220 216
+f 226 225 227
+f 226 224 225
+f 228 225 37
+f 40 228 37
+f 229 230 228
+f 231 228 40
+f 231 229 228
+f 42 231 40
+f 232 231 42
+f 233 232 234
+f 233 234 235
+f 233 231 232
+f 236 233 235
+f 237 233 236
+f 238 237 239
+f 238 233 237
+f 43 240 232
+f 43 232 42
+f 241 242 243
+f 244 245 246
+f 247 241 244
+f 247 242 241
+f 247 244 246
+f 240 247 246
+f 248 44 249
+f 248 240 43
+f 248 43 44
+f 248 247 240
+f 250 249 251
+f 250 248 249
+f 252 249 44
+f 47 252 44
+f 253 254 255
+f 253 255 252
+f 253 252 47
+f 46 253 47
+f 256 253 46
+f 257 256 258
+f 257 253 256
+f 259 258 260
+f 259 257 258
+f 261 257 259
+f 262 261 263
+f 262 257 261
+f 48 256 46
+f 50 264 48
+f 264 256 48
+f 265 266 267
+f 264 265 267
+f 50 49 268
+f 269 264 50
+f 270 50 268
+f 270 269 50
+f 269 265 264
+f 52 271 268
+f 52 268 49
+f 54 272 271
+f 54 271 52
+f 273 272 54
+f 274 273 54
+f 275 274 276
+f 275 276 277
+f 275 273 274
+f 278 274 54
+f 53 278 54
+f 279 278 53
+f 57 279 53
+f 280 57 281
+f 281 57 56
+f 280 282 57
+f 282 279 57
+f 279 283 284
+f 284 283 285
+f 282 283 279
+f 59 286 281
+f 59 281 56
+f 287 288 289
+f 288 290 289
+f 59 61 286
+f 291 61 290
+f 61 292 286
+f 291 292 61
+f 288 291 290
+f 293 290 61
+f 62 293 61
+f 294 62 295
+f 295 62 63
+f 294 296 62
+f 296 293 62
+f 293 297 298
+f 298 297 299
+f 296 297 293
+f 67 300 295
+f 67 295 63
+f 301 302 303
+f 302 304 303
+f 67 66 300
+f 305 66 304
+f 66 306 300
+f 305 306 66
+f 302 305 304
+f 307 304 66
+f 65 307 66
+f 308 307 65
+f 69 308 65
+f 309 308 69
+f 71 309 69
+f 310 71 311
+f 311 71 70
+f 310 312 71
+f 312 309 71
+f 309 313 314
+f 314 313 315
+f 312 313 309
+f 70 316 311
+f 72 316 70
+f 317 318 319
+f 318 320 319
+f 72 74 316
+f 321 74 320
+f 74 322 316
+f 321 322 74
+f 318 321 320
+f 73 323 320
+f 73 320 74
+f 76 324 323
+f 76 323 73
+f 325 324 76
+f 79 325 76
+f 326 79 327
+f 327 79 78
+f 326 328 79
+f 328 325 79
+f 325 329 330
+f 330 329 331
+f 328 329 325
+f 78 332 327
+f 82 332 78
+f 333 334 335
+f 334 336 335
+f 82 81 332
+f 336 337 81
+f 81 338 332
+f 337 338 81
+f 334 337 336
+f 80 339 336
+f 80 336 81
+f 340 339 80
+f 85 340 80
+f 341 340 85
+f 88 341 85
+f 342 343 344
+f 345 346 347
+f 348 342 345
+f 348 343 342
+f 348 345 347
+f 341 348 347
+f 349 341 88
+f 349 88 87
+f 349 87 350
+f 349 350 351
+f 349 348 341
+f 352 349 351
+f 91 353 350
+f 91 350 87
+f 354 355 356
+f 354 356 353
+f 354 353 91
+f 90 354 91
+f 357 354 90
+f 358 357 359
+f 358 354 357
+f 360 359 361
+f 360 358 359
+f 362 358 360
+f 363 362 364
+f 363 358 362
+f 89 365 357
+f 89 357 90
+f 94 366 365
+f 94 365 89
+f 96 367 366
+f 96 366 94
+f 368 369 370
+f 371 368 372
+f 371 372 373
+f 371 373 374
+f 371 369 368
+f 367 371 374
+f 375 367 96
+f 375 96 95
+f 375 95 376
+f 375 371 367
+f 377 376 378
+f 377 375 376
+f 379 376 95
+f 98 379 95
+f 380 381 379
+f 382 379 98
+f 382 380 379
+f 100 382 98
+f 383 382 100
+f 384 383 385
+f 384 385 386
+f 384 382 383
+f 387 384 386
+f 388 384 387
+f 389 388 390
+f 389 384 388
+f 101 391 383
+f 101 383 100
+f 392 393 394
+f 395 396 397
+f 398 392 395
+f 398 393 392
+f 398 395 397
+f 391 398 397
+f 399 102 400
+f 399 400 401
+f 399 391 101
+f 399 101 102
+f 399 398 391
+f 402 399 401
+f 403 400 102
+f 105 403 102
+f 404 405 406
+f 404 406 403
+f 404 403 105
+f 104 404 105
+f 407 404 104
+f 408 407 409
+f 408 404 407
+f 150 409 151
+f 150 408 409
+f 410 408 150
+f 411 410 412
+f 411 408 410
+f 106 407 104
+f 108 413 106
+f 413 407 106
+f 414 108 415
+f 415 108 109
+f 414 416 108
+f 416 413 108
+f 413 149 417
+f 417 149 152
+f 416 149 413
+f 112 415 109
+f 112 418 415
+f 155 154 419
+f 154 420 419
+f 112 111 418
+f 420 421 111
+f 111 422 418
+f 421 422 111
+f 154 421 420
+f 423 420 111
+f 113 423 111
+f 424 423 113
+f 115 424 113
+f 425 115 426
+f 426 115 114
+f 425 427 115
+f 427 424 115
+f 424 157 428
+f 428 157 156
+f 427 157 424
+f 117 426 114
+f 117 429 426
+f 160 159 430
+f 159 431 430
+f 117 119 429
+f 432 119 431
+f 119 433 429
+f 432 433 119
+f 159 432 431
+f 434 431 119
+f 120 434 119
+f 435 120 436
+f 436 120 121
+f 435 437 120
+f 437 434 120
+f 434 162 438
+f 438 162 161
+f 437 162 434
+f 122 436 121
+f 122 439 436
+f 165 164 440
+f 164 441 440
+f 122 125 439
+f 442 125 441
+f 125 443 439
+f 442 443 125
+f 164 442 441
+f 444 441 125
+f 124 444 125
+f 445 444 124
+f 126 445 124
+f 446 445 126
+f 128 446 126
+f 447 128 448
+f 448 128 127
+f 447 449 128
+f 449 446 128
+f 446 170 450
+f 450 170 169
+f 449 170 446
+f 127 451 448
+f 130 451 127
+f 146 172 141
+f 172 137 141
+f 130 132 451
+f 452 132 137
+f 132 453 451
+f 452 453 132
+f 172 452 137
+f 454 26 24
+f 454 24 455
+f 456 28 26
+f 456 26 454
+f 457 34 28
+f 457 28 456
+f 458 35 34
+f 458 34 457
+f 459 39 35
+f 459 35 458
+f 460 41 39
+f 460 39 459
+f 461 45 41
+f 461 41 460
+f 462 45 461
+f 51 45 462
+f 463 51 462
+f 55 51 463
+f 58 55 463
+f 464 58 463
+f 60 58 464
+f 465 60 464
+f 64 60 465
+f 466 64 465
+f 68 64 466
+f 467 68 466
+f 75 68 467
+f 468 75 467
+f 77 75 468
+f 469 77 468
+f 83 77 469
+f 470 83 469
+f 84 83 470
+f 471 84 470
+f 86 84 471
+f 472 86 471
+f 92 86 472
+f 473 92 472
+f 93 92 473
+f 474 93 473
+f 97 93 474
+f 475 97 474
+f 99 97 475
+f 476 99 475
+f 103 99 476
+f 477 103 476
+f 107 103 477
+f 478 107 477
+f 110 107 478
+f 479 110 478
+f 116 110 479
+f 480 116 479
+f 118 116 480
+f 481 118 480
+f 123 118 481
+f 482 129 123
+f 482 123 481
+f 483 129 482
+f 133 129 483
+f 484 135 133
+f 484 133 483
+f 455 24 135
+f 455 135 484
+f 144 485 486
+f 145 485 144
+f 142 487 145
+f 487 485 145
+f 487 139 488
+f 487 142 139
+f 486 488 144
+f 488 139 144
+f 177 175 174
+f 21 175 177
+f 452 172 170
+f 452 170 449
+f 166 165 440
+f 489 166 440
+f 167 166 489
+f 490 167 489
+f 169 167 490
+f 450 169 490
+f 437 164 162
+f 442 164 437
+f 161 160 430
+f 438 161 430
+f 427 159 157
+f 432 159 427
+f 156 155 419
+f 428 156 419
+f 416 154 149
+f 421 154 416
+f 417 152 151
+f 417 151 409
+f 491 492 410
+f 491 410 150
+f 153 493 494
+f 153 494 495
+f 496 493 153
+f 158 497 498
+f 499 497 158
+f 500 499 158
+f 163 501 502
+f 163 502 503
+f 504 501 163
+f 168 505 504
+f 168 504 163
+f 506 505 168
+f 171 507 508
+f 171 508 509
+f 173 510 507
+f 173 507 171
+f 511 512 510
+f 511 510 173
+f 175 513 511
+f 495 491 176
+f 150 176 491
+f 176 153 495
+f 153 158 496
+f 496 158 498
+f 158 163 500
+f 500 163 503
+f 168 171 509
+f 168 509 506
+f 173 175 511
+f 178 514 515
+f 178 515 21
+f 516 514 178
+f 180 516 178
+f 194 516 180
+f 182 194 180
+f 191 517 518
+f 191 518 190
+f 519 517 191
+f 188 519 191
+f 520 188 187
+f 519 188 520
+f 520 187 190
+f 518 520 190
+f 521 522 523
+f 524 522 521
+f 524 525 522
+f 526 527 528
+f 526 528 525
+f 526 525 524
+f 529 527 526
+f 530 527 529
+f 531 526 524
+f 196 530 529
+f 532 196 529
+f 514 531 524
+f 514 524 515
+f 213 530 196
+f 533 530 213
+f 516 531 514
+f 516 532 531
+f 534 533 213
+f 535 533 534
+f 536 535 534
+f 194 532 516
+f 537 213 211
+f 537 534 213
+f 219 535 536
+f 219 536 538
+f 539 537 211
+f 540 535 219
+f 239 540 219
+f 541 540 239
+f 542 538 537
+f 542 537 539
+f 543 540 541
+f 544 540 543
+f 217 219 538
+f 217 538 542
+f 545 541 239
+f 237 545 239
+f 546 545 237
+f 243 543 546
+f 243 544 543
+f 263 544 243
+f 547 544 263
+f 548 547 549
+f 241 546 237
+f 241 243 546
+f 550 551 548
+f 550 548 549
+f 552 263 261
+f 552 547 263
+f 552 549 547
+f 553 550 554
+f 553 551 550
+f 555 556 557
+f 555 557 558
+f 559 556 555
+f 560 554 552
+f 560 553 554
+f 560 552 261
+f 561 555 558
+f 562 561 558
+f 563 561 562
+f 564 559 563
+f 565 556 559
+f 565 559 564
+f 566 565 564
+f 567 565 566
+f 568 565 567
+f 569 565 568
+f 570 563 562
+f 570 564 563
+f 571 567 566
+f 572 571 566
+f 573 569 568
+f 573 568 574
+f 575 569 573
+f 576 569 575
+f 576 577 569
+f 578 577 576
+f 579 571 572
+f 579 573 574
+f 579 574 571
+f 580 576 575
+f 581 577 578
+f 582 580 575
+f 583 581 578
+f 583 578 584
+f 585 581 583
+f 586 587 581
+f 586 581 585
+f 588 580 582
+f 588 584 580
+f 589 587 586
+f 590 587 589
+f 591 584 588
+f 591 583 584
+f 592 586 585
+f 593 594 590
+f 593 590 589
+f 595 583 591
+f 596 589 597
+f 596 593 589
+f 598 593 596
+f 599 598 596
+f 600 597 592
+f 600 592 601
+f 602 596 597
+f 602 597 600
+f 603 604 605
+f 603 598 599
+f 603 605 598
+f 606 604 603
+f 607 596 602
+f 608 604 606
+f 609 603 599
+f 344 608 606
+f 610 344 606
+f 611 609 599
+f 611 599 612
+f 364 608 344
+f 613 608 364
+f 614 609 611
+f 614 610 609
+f 615 613 364
+f 616 613 615
+f 617 616 615
+f 342 610 614
+f 618 615 364
+f 618 364 362
+f 370 616 617
+f 370 617 619
+f 620 618 362
+f 621 616 370
+f 390 621 370
+f 622 621 390
+f 623 618 620
+f 623 619 618
+f 624 621 622
+f 625 621 624
+f 368 370 619
+f 368 619 623
+f 626 622 390
+f 388 626 390
+f 627 626 388
+f 394 625 624
+f 394 624 627
+f 412 625 394
+f 628 625 412
+f 629 628 630
+f 392 627 388
+f 392 394 627
+f 631 629 630
+f 631 632 629
+f 633 412 410
+f 633 630 628
+f 633 628 412
+f 634 632 631
+f 634 631 635
+f 636 637 638
+f 636 638 639
+f 640 637 636
+f 492 633 410
+f 492 635 633
+f 492 634 635
+f 641 636 639
+f 494 641 639
+f 642 641 494
+f 643 640 642
+f 644 637 640
+f 644 640 643
+f 645 644 643
+f 646 644 645
+f 647 644 646
+f 648 644 647
+f 493 643 642
+f 493 642 494
+f 649 646 645
+f 497 649 645
+f 650 648 647
+f 650 647 651
+f 652 648 650
+f 653 648 652
+f 653 654 648
+f 655 654 653
+f 499 649 497
+f 499 650 651
+f 499 651 649
+f 656 653 652
+f 657 654 655
+f 502 656 652
+f 658 657 655
+f 658 655 659
+f 660 657 658
+f 661 657 660
+f 661 662 657
+f 501 656 502
+f 501 659 656
+f 663 662 661
+f 664 662 663
+f 504 658 659
+f 504 659 501
+f 665 661 660
+f 666 664 663
+f 666 667 664
+f 505 658 504
+f 668 663 669
+f 668 666 663
+f 668 522 666
+f 523 522 668
+f 507 669 665
+f 507 665 508
+f 510 668 669
+f 510 669 507
+f 512 668 510
+f 585 601 592
+f 342 344 610
+f 660 508 665
+f 638 632 639
+f 639 632 634
+f 557 551 558
+f 558 551 553
+f 194 196 532
+f 212 213 196
+f 212 196 195
+f 197 212 195
+f 207 212 197
+f 198 207 197
+f 205 207 198
+f 201 205 198
+f 203 205 201
+f 204 201 200
+f 204 203 201
+f 202 204 200
+f 202 200 199
+f 670 539 211
+f 670 211 209
+f 671 542 539
+f 671 539 670
+f 221 217 542
+f 221 542 671
+f 672 670 209
+f 672 209 210
+f 673 671 670
+f 673 670 672
+f 222 221 671
+f 222 671 673
+f 674 210 208
+f 674 672 210
+f 675 673 672
+f 675 672 674
+f 223 222 673
+f 223 673 675
+f 676 675 674
+f 677 675 676
+f 223 675 677
+f 678 674 208
+f 678 208 206
+f 678 676 674
+f 214 678 206
+f 679 223 677
+f 215 679 678
+f 215 678 214
+f 216 223 679
+f 216 679 215
+f 239 219 218
+f 238 239 218
+f 233 238 218
+f 233 218 220
+f 231 220 224
+f 231 233 220
+f 229 231 224
+f 229 224 226
+f 227 229 226
+f 230 229 227
+f 225 230 227
+f 228 230 225
+f 244 241 237
+f 244 237 236
+f 244 236 235
+f 245 244 235
+f 246 245 235
+f 246 235 234
+f 680 234 681
+f 246 234 680
+f 682 234 232
+f 682 681 234
+f 683 682 232
+f 683 246 680
+f 240 246 683
+f 240 683 232
+f 263 243 242
+f 262 263 242
+f 257 262 242
+f 257 242 247
+f 253 257 247
+f 253 247 248
+f 254 253 248
+f 254 248 250
+f 255 250 251
+f 255 254 250
+f 249 255 251
+f 252 255 249
+f 684 560 261
+f 684 261 259
+f 685 570 562
+f 685 562 686
+f 687 570 685
+f 688 687 685
+f 689 572 688
+f 579 572 689
+f 690 579 689
+f 691 588 582
+f 691 582 692
+f 591 588 691
+f 693 595 591
+f 693 591 691
+f 694 595 693
+f 695 694 693
+f 696 600 601
+f 696 601 695
+f 602 600 696
+f 697 602 696
+f 607 602 697
+f 698 607 697
+f 686 684 699
+f 259 699 684
+f 699 685 686
+f 685 689 688
+f 689 691 690
+f 690 691 692
+f 693 696 695
+f 697 334 698
+f 265 259 260
+f 266 265 260
+f 685 275 277
+f 285 685 277
+f 285 283 685
+f 689 288 287
+f 299 689 287
+f 299 297 689
+f 691 302 301
+f 700 691 301
+f 701 691 700
+f 693 691 701
+f 315 693 701
+f 315 313 693
+f 696 318 317
+f 702 696 317
+f 703 697 696
+f 703 696 702
+f 331 329 697
+f 331 697 703
+f 699 259 265
+f 685 699 275
+f 689 685 283
+f 689 283 288
+f 691 689 297
+f 691 297 302
+f 696 693 318
+f 318 693 313
+f 334 697 329
+f 265 275 699
+f 267 266 260
+f 267 260 258
+f 267 704 705
+f 267 258 704
+f 706 258 256
+f 706 704 258
+f 707 267 705
+f 264 707 706
+f 264 706 256
+f 264 267 707
+f 269 275 265
+f 273 275 269
+f 272 273 269
+f 272 269 270
+f 268 272 270
+f 271 272 268
+f 285 277 276
+f 284 285 276
+f 708 276 709
+f 710 276 274
+f 710 709 276
+f 284 708 711
+f 284 276 708
+f 278 711 710
+f 278 710 274
+f 279 284 711
+f 279 711 278
+f 280 291 282
+f 292 291 280
+f 282 288 283
+f 291 288 282
+f 281 292 280
+f 286 292 281
+f 298 712 713
+f 298 289 712
+f 714 289 290
+f 714 712 289
+f 715 298 713
+f 293 715 714
+f 293 714 290
+f 293 298 715
+f 299 287 289
+f 298 299 289
+f 294 305 296
+f 306 305 294
+f 296 302 297
+f 305 302 296
+f 295 306 294
+f 300 306 295
+f 716 717 303
+f 718 717 716
+f 719 717 718
+f 720 303 304
+f 720 716 303
+f 721 719 718
+f 307 721 720
+f 307 720 304
+f 308 314 719
+f 308 719 721
+f 308 721 307
+f 309 314 308
+f 700 301 303
+f 717 700 303
+f 701 700 717
+f 719 701 717
+f 315 701 719
+f 314 315 719
+f 322 321 312
+f 322 312 310
+f 321 318 313
+f 321 313 312
+f 316 310 311
+f 316 322 310
+f 722 723 319
+f 724 723 722
+f 725 723 724
+f 726 319 320
+f 726 722 319
+f 727 725 724
+f 323 727 726
+f 323 726 320
+f 324 330 725
+f 324 727 323
+f 324 725 727
+f 325 330 324
+f 723 317 319
+f 723 702 317
+f 725 703 702
+f 725 702 723
+f 331 703 725
+f 330 331 725
+f 338 337 328
+f 338 328 326
+f 337 334 329
+f 337 329 328
+f 327 338 326
+f 332 338 327
+f 728 729 730
+f 731 729 728
+f 347 729 731
+f 339 730 335
+f 339 335 336
+f 732 730 339
+f 732 728 730
+f 733 347 731
+f 340 733 732
+f 340 732 339
+f 341 347 733
+f 341 733 340
+f 730 734 333
+f 730 333 335
+f 735 734 730
+f 729 735 730
+f 346 735 729
+f 347 346 729
+f 736 334 333
+f 734 736 333
+f 737 736 734
+f 735 737 734
+f 345 737 735
+f 346 345 735
+f 736 611 612
+f 736 612 334
+f 614 611 736
+f 737 614 736
+f 342 614 737
+f 345 342 737
+f 363 364 344
+f 363 344 343
+f 348 363 343
+f 358 363 348
+f 349 358 348
+f 354 358 349
+f 352 354 349
+f 355 354 352
+f 356 352 351
+f 356 355 352
+f 353 356 351
+f 353 351 350
+f 738 620 362
+f 738 362 360
+f 739 623 620
+f 739 620 738
+f 372 368 623
+f 372 623 739
+f 740 738 360
+f 740 360 361
+f 741 739 738
+f 741 738 740
+f 373 372 739
+f 373 739 741
+f 742 361 359
+f 742 740 361
+f 743 741 740
+f 743 740 742
+f 374 373 741
+f 374 741 743
+f 744 743 742
+f 745 743 744
+f 374 743 745
+f 746 742 359
+f 746 359 357
+f 746 744 742
+f 365 746 357
+f 747 374 745
+f 366 747 746
+f 366 746 365
+f 367 374 747
+f 367 747 366
+f 390 370 369
+f 389 390 369
+f 384 389 369
+f 384 369 371
+f 382 371 375
+f 382 384 371
+f 380 382 375
+f 380 375 377
+f 378 380 377
+f 381 380 378
+f 376 381 378
+f 379 381 376
+f 395 392 388
+f 395 388 387
+f 395 387 386
+f 396 395 386
+f 397 396 386
+f 397 386 385
+f 748 385 749
+f 397 385 748
+f 750 385 383
+f 750 749 385
+f 751 750 383
+f 751 397 748
+f 391 397 751
+f 391 751 383
+f 412 394 393
+f 411 412 393
+f 408 411 393
+f 408 393 398
+f 404 408 398
+f 404 398 399
+f 405 404 399
+f 405 399 402
+f 401 405 402
+f 406 405 401
+f 400 406 401
+f 403 406 400
+f 417 752 753
+f 417 409 752
+f 754 409 407
+f 754 752 409
+f 755 417 753
+f 413 755 754
+f 413 754 407
+f 413 417 755
+f 414 421 416
+f 422 421 414
+f 415 422 414
+f 418 422 415
+f 756 419 757
+f 758 419 420
+f 758 757 419
+f 428 756 759
+f 428 419 756
+f 423 759 758
+f 423 758 420
+f 424 428 759
+f 424 759 423
+f 425 432 427
+f 433 432 425
+f 426 433 425
+f 429 433 426
+f 438 760 761
+f 438 430 760
+f 762 430 431
+f 762 760 430
+f 763 438 761
+f 434 763 762
+f 434 762 431
+f 434 438 763
+f 435 442 437
+f 443 442 435
+f 436 443 435
+f 439 443 436
+f 764 489 440
+f 765 489 764
+f 490 489 765
+f 766 440 441
+f 766 764 440
+f 767 490 765
+f 444 767 766
+f 444 766 441
+f 445 450 490
+f 445 490 767
+f 445 767 444
+f 446 450 445
+f 453 452 449
+f 453 449 447
+f 448 453 447
+f 451 453 448
+f 768 454 455
+f 768 455 769
+f 770 456 454
+f 770 454 768
+f 771 457 456
+f 771 456 770
+f 772 458 457
+f 772 457 771
+f 773 459 458
+f 773 458 772
+f 774 460 459
+f 774 459 773
+f 775 461 460
+f 775 460 774
+f 776 462 461
+f 776 461 775
+f 777 462 776
+f 777 463 462
+f 778 463 777
+f 778 464 463
+f 779 464 778
+f 779 465 464
+f 780 465 779
+f 780 466 465
+f 781 466 780
+f 781 467 466
+f 782 468 467
+f 782 467 781
+f 783 469 468
+f 783 468 782
+f 784 470 469
+f 784 469 783
+f 785 471 470
+f 785 470 784
+f 786 472 471
+f 786 471 785
+f 787 473 472
+f 787 472 786
+f 788 474 473
+f 788 473 787
+f 789 475 474
+f 789 474 788
+f 790 476 475
+f 790 475 789
+f 791 477 476
+f 791 476 790
+f 792 478 477
+f 792 477 791
+f 793 479 478
+f 793 478 792
+f 794 480 479
+f 794 479 793
+f 795 481 480
+f 795 480 794
+f 796 482 481
+f 796 481 795
+f 797 483 482
+f 797 482 796
+f 798 484 483
+f 798 483 797
+f 769 455 484
+f 769 484 798
+f 485 487 488
+f 485 488 486
+f 799 513 175
+f 175 21 799
+f 512 800 668
+f 511 801 512
+f 801 800 512
+f 513 801 511
+f 799 802 513
+f 802 801 513
+f 803 492 491
+f 492 804 634
+f 803 804 492
+f 805 803 491
+f 495 805 491
+f 806 494 639
+f 805 495 494
+f 806 805 494
+f 807 493 496
+f 493 808 643
+f 807 808 493
+f 809 807 496
+f 498 809 496
+f 810 497 645
+f 809 498 497
+f 810 809 497
+f 811 499 500
+f 499 812 650
+f 811 812 499
+f 813 811 500
+f 503 813 500
+f 814 502 652
+f 813 503 502
+f 814 813 502
+f 815 505 506
+f 505 816 658
+f 815 816 505
+f 509 815 506
+f 509 817 815
+f 818 508 660
+f 817 509 508
+f 818 817 508
+f 515 819 21
+f 820 515 524
+f 820 819 515
+f 518 519 520
+f 517 519 518
+f 821 822 528
+f 527 821 528
+f 530 823 821
+f 530 821 527
+f 533 824 823
+f 533 823 530
+f 535 825 824
+f 535 824 533
+f 540 826 825
+f 540 825 535
+f 544 827 826
+f 544 826 540
+f 828 827 544
+f 547 828 544
+f 548 829 828
+f 548 828 547
+f 830 831 551
+f 551 829 548
+f 831 829 551
+f 829 832 833
+f 831 832 829
+f 831 834 832
+f 835 836 837
+f 832 838 836
+f 834 838 832
+f 836 839 837
+f 838 839 836
+f 840 830 557
+f 557 830 551
+f 841 840 557
+f 842 557 556
+f 842 841 557
+f 843 842 844
+f 843 841 842
+f 845 841 843
+f 846 847 848
+f 849 843 846
+f 849 845 843
+f 850 846 848
+f 850 849 846
+f 851 842 556
+f 565 851 556
+f 569 852 851
+f 569 851 565
+f 577 853 852
+f 577 852 569
+f 581 854 853
+f 581 853 577
+f 855 854 581
+f 587 855 581
+f 590 856 855
+f 590 855 587
+f 594 857 856
+f 594 856 590
+f 858 859 593
+f 593 857 594
+f 859 857 593
+f 857 860 861
+f 859 860 857
+f 859 862 860
+f 863 864 865
+f 860 866 864
+f 862 866 860
+f 864 867 865
+f 866 867 864
+f 858 593 868
+f 868 593 598
+f 869 868 598
+f 870 598 605
+f 870 869 598
+f 871 870 872
+f 871 869 870
+f 873 869 871
+f 874 875 876
+f 877 871 874
+f 877 873 871
+f 878 874 876
+f 878 877 874
+f 604 879 870
+f 604 870 605
+f 608 880 879
+f 608 879 604
+f 613 881 880
+f 613 880 608
+f 616 882 881
+f 616 881 613
+f 621 883 882
+f 621 882 616
+f 625 884 883
+f 625 883 621
+f 628 885 884
+f 628 884 625
+f 886 885 628
+f 629 886 628
+f 887 888 632
+f 632 886 629
+f 888 886 632
+f 886 889 890
+f 888 889 886
+f 888 891 889
+f 892 893 894
+f 889 895 893
+f 891 895 889
+f 893 896 894
+f 895 896 893
+f 632 638 887
+f 887 638 897
+f 898 899 900
+f 898 901 899
+f 637 902 638
+f 903 904 902
+f 899 905 904
+f 901 905 899
+f 904 906 902
+f 902 906 638
+f 906 897 638
+f 905 907 904
+f 904 907 906
+f 644 908 902
+f 644 902 637
+f 648 909 908
+f 648 908 644
+f 654 910 909
+f 654 909 648
+f 657 911 910
+f 657 910 654
+f 662 912 911
+f 662 911 657
+f 913 912 662
+f 664 913 662
+f 914 913 664
+f 667 914 664
+f 915 916 666
+f 666 914 667
+f 916 914 666
+f 914 917 918
+f 916 917 914
+f 916 919 917
+f 920 921 922
+f 917 923 921
+f 919 923 917
+f 921 924 922
+f 923 924 921
+f 522 915 666
+f 522 925 915
+f 525 926 522
+f 522 926 925
+f 523 668 800
+f 927 521 523
+f 927 523 800
+f 818 660 658
+f 818 658 816
+f 652 650 812
+f 814 652 812
+f 645 643 808
+f 810 645 808
+f 639 634 804
+f 806 639 804
+f 928 612 599
+f 929 334 612
+f 928 929 612
+f 928 599 596
+f 928 596 930
+f 931 607 698
+f 607 930 596
+f 931 930 607
+f 932 601 585
+f 933 695 601
+f 932 933 601
+f 932 585 583
+f 932 583 934
+f 935 595 694
+f 595 934 583
+f 935 934 595
+f 936 582 575
+f 937 692 582
+f 936 937 582
+f 575 573 938
+f 936 575 938
+f 939 579 690
+f 579 938 573
+f 939 938 579
+f 940 572 566
+f 941 688 572
+f 940 941 572
+f 566 564 942
+f 940 566 942
+f 943 570 687
+f 570 942 564
+f 943 942 570
+f 562 944 686
+f 945 562 558
+f 945 944 562
+f 558 553 946
+f 945 558 946
+f 560 946 553
+f 684 947 560
+f 947 946 560
+f 820 524 521
+f 820 521 927
+f 948 926 525
+f 822 525 528
+f 822 948 525
+f 949 822 950
+f 949 948 822
+f 951 948 949
+f 952 953 954
+f 955 949 952
+f 955 951 949
+f 956 952 954
+f 956 955 952
+f 545 957 958
+f 546 957 545
+f 959 957 546
+f 543 959 546
+f 959 543 541
+f 959 541 960
+f 960 541 545
+f 958 960 545
+f 532 961 962
+f 532 962 531
+f 963 961 532
+f 529 963 532
+f 964 529 526
+f 963 529 964
+f 964 526 531
+f 962 964 531
+f 537 965 966
+f 538 965 537
+f 967 965 538
+f 536 967 538
+f 967 536 534
+f 967 534 968
+f 968 534 537
+f 966 968 537
+f 552 969 970
+f 554 969 552
+f 971 969 554
+f 550 971 554
+f 971 550 549
+f 971 549 972
+f 972 549 552
+f 970 972 552
+f 563 973 974
+f 563 974 561
+f 559 975 563
+f 975 973 563
+f 976 559 555
+f 975 559 976
+f 974 976 561
+f 976 555 561
+f 574 977 978
+f 574 978 571
+f 568 979 574
+f 979 977 574
+f 980 568 567
+f 979 568 980
+f 978 980 571
+f 980 567 571
+f 584 981 982
+f 584 982 580
+f 578 983 584
+f 983 981 584
+f 984 578 576
+f 983 578 984
+f 982 984 580
+f 984 576 580
+f 592 985 986
+f 597 985 592
+f 589 987 597
+f 987 985 597
+f 987 589 586
+f 987 586 988
+f 986 988 592
+f 988 586 592
+f 642 989 641
+f 642 990 989
+f 640 991 642
+f 991 990 642
+f 992 640 636
+f 991 640 992
+f 989 992 641
+f 992 636 641
+f 610 993 609
+f 610 994 993
+f 995 994 610
+f 606 995 610
+f 996 606 603
+f 995 606 996
+f 996 603 609
+f 993 996 609
+f 618 997 998
+f 619 997 618
+f 999 997 619
+f 617 999 619
+f 999 615 1000
+f 999 617 615
+f 1000 615 618
+f 998 1000 618
+f 626 1001 1002
+f 627 1001 626
+f 1003 1001 627
+f 624 1003 627
+f 1003 622 1004
+f 1003 624 622
+f 1004 622 626
+f 1002 1004 626
+f 633 1005 1006
+f 635 1005 633
+f 1007 1005 635
+f 631 1007 635
+f 1007 630 1008
+f 1007 631 630
+f 1008 630 633
+f 1006 1008 633
+f 651 1009 649
+f 651 1010 1009
+f 647 1011 651
+f 1011 1010 651
+f 1012 647 646
+f 1011 647 1012
+f 1009 1012 649
+f 1012 646 649
+f 659 1013 656
+f 659 1014 1013
+f 655 1015 659
+f 1015 1014 659
+f 1016 655 653
+f 1015 655 1016
+f 1013 1016 656
+f 1016 653 656
+f 665 1017 1018
+f 669 1017 665
+f 663 1019 669
+f 1019 1017 669
+f 1019 661 1020
+f 1019 663 661
+f 1018 1020 665
+f 1020 661 665
+f 678 1021 1022
+f 679 1021 678
+f 1023 1021 679
+f 677 1023 679
+f 1023 677 676
+f 1023 676 1024
+f 1024 676 678
+f 1022 1024 678
+f 682 1025 1026
+f 683 1025 682
+f 1027 1025 683
+f 680 1027 683
+f 1027 680 681
+f 1027 681 1028
+f 1028 681 682
+f 1026 1028 682
+f 686 944 947
+f 686 947 684
+f 941 943 687
+f 688 941 687
+f 937 939 690
+f 692 937 690
+f 695 935 694
+f 695 933 935
+f 334 931 698
+f 929 931 334
+f 706 1029 1030
+f 707 1029 706
+f 1031 1029 707
+f 705 1031 707
+f 1031 705 704
+f 1031 704 1032
+f 1032 704 706
+f 1030 1032 706
+f 711 1033 1034
+f 711 1034 710
+f 708 1035 711
+f 1035 1033 711
+f 1036 708 709
+f 1035 708 1036
+f 1034 1036 710
+f 1036 709 710
+f 715 1037 1038
+f 715 1038 714
+f 713 1039 715
+f 1039 1037 715
+f 1040 713 712
+f 1039 713 1040
+f 1038 1040 714
+f 1040 712 714
+f 721 1041 1042
+f 721 1042 720
+f 718 1043 721
+f 1043 1041 721
+f 1044 718 716
+f 1043 718 1044
+f 1042 1044 720
+f 1044 716 720
+f 726 1045 1046
+f 727 1045 726
+f 724 1047 727
+f 1047 1045 727
+f 1047 724 722
+f 1047 722 1048
+f 1046 1048 726
+f 1048 722 726
+f 733 1049 732
+f 733 1050 1049
+f 1051 1050 733
+f 731 1051 733
+f 1052 731 728
+f 1051 731 1052
+f 1052 728 732
+f 1049 1052 732
+f 746 1053 1054
+f 747 1053 746
+f 1055 1053 747
+f 745 1055 747
+f 1055 744 1056
+f 1055 745 744
+f 1056 744 746
+f 1054 1056 746
+f 750 1057 1058
+f 751 1057 750
+f 1059 1057 751
+f 748 1059 751
+f 1059 749 1060
+f 1059 748 749
+f 1060 749 750
+f 1058 1060 750
+f 754 1061 1062
+f 755 1061 754
+f 1063 1061 755
+f 753 1063 755
+f 1063 752 1064
+f 1063 753 752
+f 1064 752 754
+f 1062 1064 754
+f 759 1065 758
+f 759 1066 1065
+f 756 1067 759
+f 1067 1066 759
+f 1068 756 757
+f 1067 756 1068
+f 1065 1068 758
+f 1068 757 758
+f 763 1069 762
+f 763 1070 1069
+f 761 1071 763
+f 1071 1070 763
+f 1072 761 760
+f 1071 761 1072
+f 1069 1072 762
+f 1072 760 762
+f 767 1073 766
+f 767 1074 1073
+f 765 1075 767
+f 1075 1074 767
+f 1076 765 764
+f 1075 765 1076
+f 1073 1076 766
+f 1076 764 766
+f 1077 768 769
+f 1077 769 1078
+f 1079 770 768
+f 1079 768 1077
+f 1080 771 770
+f 1080 770 1079
+f 1081 772 771
+f 1081 771 1080
+f 1082 773 772
+f 1082 772 1081
+f 1083 774 773
+f 1083 773 1082
+f 1084 775 774
+f 1084 774 1083
+f 1085 775 1084
+f 776 775 1085
+f 1086 776 1085
+f 777 776 1086
+f 1087 777 1086
+f 778 777 1087
+f 1088 778 1087
+f 779 778 1088
+f 780 779 1088
+f 1089 780 1088
+f 781 780 1089
+f 1090 781 1089
+f 782 781 1090
+f 1091 782 1090
+f 783 782 1091
+f 1092 783 1091
+f 784 783 1092
+f 1093 784 1092
+f 785 784 1093
+f 1094 785 1093
+f 786 785 1094
+f 1095 786 1094
+f 787 786 1095
+f 1096 787 1095
+f 788 787 1096
+f 1097 788 1096
+f 789 788 1097
+f 1098 789 1097
+f 790 789 1098
+f 1099 790 1098
+f 791 790 1099
+f 1100 791 1099
+f 792 791 1100
+f 1101 792 1100
+f 793 792 1101
+f 1102 793 1101
+f 1103 793 1102
+f 794 793 1103
+f 1104 794 1103
+f 795 794 1104
+f 1105 795 1104
+f 796 795 1105
+f 1106 796 1105
+f 797 796 1106
+f 1107 797 1106
+f 798 797 1107
+f 1108 798 1107
+f 769 798 1108
+f 1078 769 1108
+f 21 802 799
+f 819 802 21
+f 801 927 800
+f 802 927 801
+f 805 806 804
+f 805 804 803
+f 807 810 808
+f 809 810 807
+f 811 814 812
+f 813 814 811
+f 817 818 816
+f 817 816 815
+f 819 820 927
+f 819 927 802
+f 821 950 822
+f 821 1109 950
+f 823 1110 1109
+f 823 1109 821
+f 824 1111 1110
+f 824 1110 823
+f 825 1112 1111
+f 825 1111 824
+f 826 1113 1112
+f 826 1112 825
+f 1114 1113 826
+f 827 1114 826
+f 1115 1114 827
+f 828 1115 827
+f 833 1115 828
+f 829 833 828
+f 845 849 1116
+f 1117 845 1116
+f 834 1118 838
+f 834 1117 1118
+f 834 845 1117
+f 1116 849 850
+f 1117 1116 850
+f 839 1118 1117
+f 839 1117 850
+f 838 1118 839
+f 1119 1120 956
+f 1119 956 954
+f 1121 1122 1120
+f 1121 1120 1119
+f 1123 1124 1122
+f 1123 1122 1121
+f 1125 1126 1124
+f 1125 1124 1123
+f 1127 1128 1126
+f 1127 1126 1125
+f 1129 1130 1128
+f 1129 1128 1127
+f 1131 1132 1130
+f 1131 1130 1129
+f 837 839 1132
+f 837 1132 1131
+f 1133 1119 954
+f 1133 954 953
+f 1134 1121 1119
+f 1134 1119 1133
+f 1135 1123 1121
+f 1135 1121 1134
+f 1136 1125 1123
+f 1136 1123 1135
+f 1137 1127 1125
+f 1137 1125 1136
+f 1138 1129 1127
+f 1138 1127 1137
+f 1131 1129 1138
+f 1139 1131 1138
+f 837 1131 1139
+f 835 837 1139
+f 1133 953 952
+f 1140 1133 952
+f 1134 1133 1140
+f 1141 1134 1140
+f 1135 1134 1141
+f 1142 1135 1141
+f 1136 1135 1142
+f 1143 1136 1142
+f 1137 1136 1143
+f 1144 1137 1143
+f 1145 1138 1137
+f 1145 1137 1144
+f 1146 1139 1138
+f 1146 1138 1145
+f 836 835 1139
+f 836 1139 1146
+f 1147 952 949
+f 1147 1140 952
+f 1148 1141 1140
+f 1148 1140 1147
+f 1149 1142 1141
+f 1149 1141 1148
+f 1150 1143 1142
+f 1150 1142 1149
+f 1151 1144 1143
+f 1151 1143 1150
+f 1152 1145 1144
+f 1152 1144 1151
+f 1146 1145 1152
+f 1153 1146 1152
+f 836 1146 1153
+f 832 836 1153
+f 1109 1147 949
+f 1109 949 950
+f 1110 1148 1147
+f 1110 1147 1109
+f 1111 1149 1148
+f 1111 1148 1110
+f 1112 1150 1149
+f 1112 1149 1111
+f 1113 1151 1150
+f 1113 1150 1112
+f 1152 1151 1113
+f 1114 1152 1113
+f 1115 1153 1152
+f 1115 1152 1114
+f 832 1153 1115
+f 833 832 1115
+f 841 831 830
+f 840 841 830
+f 841 834 831
+f 841 845 834
+f 1154 850 848
+f 1155 1154 848
+f 1156 1154 1155
+f 1157 1158 1156
+f 1157 1156 1155
+f 1159 1160 1158
+f 1159 1158 1157
+f 1161 1162 1160
+f 1161 1160 1159
+f 1163 1164 1162
+f 1163 1162 1161
+f 865 867 1164
+f 865 1164 1163
+f 1165 1155 848
+f 1165 848 847
+f 1157 1155 1165
+f 1166 1157 1165
+f 1167 1157 1166
+f 1159 1157 1167
+f 1168 1159 1167
+f 1161 1159 1168
+f 1169 1163 1161
+f 1169 1161 1168
+f 863 865 1163
+f 863 1163 1169
+f 1165 847 846
+f 1170 1165 846
+f 1166 1165 1170
+f 1171 1166 1170
+f 1172 1167 1166
+f 1172 1166 1171
+f 1173 1168 1167
+f 1173 1167 1172
+f 1174 1169 1168
+f 1174 1168 1173
+f 864 863 1169
+f 864 1169 1174
+f 1175 1170 846
+f 1175 846 843
+f 1176 1171 1170
+f 1176 1170 1175
+f 1177 1172 1171
+f 1177 1171 1176
+f 1178 1173 1172
+f 1178 1172 1177
+f 1179 1174 1173
+f 1179 1173 1178
+f 1180 864 1174
+f 1180 1174 1179
+f 860 864 1180
+f 1175 843 844
+f 1181 1175 844
+f 1176 1175 1181
+f 1182 1176 1181
+f 1177 1176 1182
+f 1183 1177 1182
+f 1178 1177 1183
+f 1184 1178 1183
+f 1179 1178 1184
+f 1185 1179 1184
+f 1186 1180 1179
+f 1186 1179 1185
+f 861 860 1180
+f 861 1180 1186
+f 851 1181 844
+f 851 844 842
+f 1182 1181 851
+f 852 1182 851
+f 1183 1182 852
+f 853 1183 852
+f 1184 1183 853
+f 854 1184 853
+f 1185 1184 854
+f 855 1185 854
+f 1186 1185 855
+f 856 1186 855
+f 861 1186 856
+f 857 861 856
+f 1187 873 877
+f 1188 862 873
+f 1188 873 1187
+f 1189 862 1188
+f 866 862 1189
+f 1190 1188 1187
+f 1190 1187 877
+f 1190 877 878
+f 1191 1189 1188
+f 1191 1188 1190
+f 867 866 1189
+f 867 1189 1191
+f 868 869 859
+f 868 859 858
+f 859 873 862
+f 869 873 859
+f 1192 1193 878
+f 1192 878 876
+f 1194 1195 1193
+f 1194 1193 1192
+f 1196 1197 1195
+f 1196 1195 1194
+f 1198 1199 1197
+f 1198 1197 1196
+f 1200 1201 1199
+f 1200 1199 1198
+f 1202 1203 1201
+f 1202 1201 1200
+f 1204 1205 1203
+f 1204 1203 1202
+f 894 896 1205
+f 894 1205 1204
+f 1206 1192 876
+f 1206 876 875
+f 1207 1194 1192
+f 1207 1192 1206
+f 1208 1196 1194
+f 1208 1194 1207
+f 1209 1198 1196
+f 1209 1196 1208
+f 1210 1200 1198
+f 1210 1198 1209
+f 1211 1202 1200
+f 1211 1200 1210
+f 1204 1202 1211
+f 1212 1204 1211
+f 894 1204 1212
+f 892 894 1212
+f 1206 875 874
+f 1213 1206 874
+f 1207 1206 1213
+f 1214 1207 1213
+f 1208 1207 1214
+f 1215 1208 1214
+f 1209 1208 1215
+f 1216 1209 1215
+f 1210 1209 1216
+f 1217 1210 1216
+f 1218 1211 1210
+f 1218 1210 1217
+f 1219 1212 1211
+f 1219 1211 1218
+f 893 892 1212
+f 893 1212 1219
+f 1220 874 871
+f 1220 1213 874
+f 1221 1214 1213
+f 1221 1213 1220
+f 1222 1215 1214
+f 1222 1214 1221
+f 1223 1216 1215
+f 1223 1215 1222
+f 1224 1217 1216
+f 1224 1216 1223
+f 1225 1218 1217
+f 1225 1217 1224
+f 1219 1218 1225
+f 1226 1219 1225
+f 893 1219 1226
+f 889 893 1226
+f 1227 1220 871
+f 1227 871 872
+f 1228 1221 1220
+f 1228 1220 1227
+f 1229 1222 1221
+f 1229 1221 1228
+f 1230 1223 1222
+f 1230 1222 1229
+f 1231 1224 1223
+f 1231 1223 1230
+f 1232 1225 1224
+f 1232 1224 1231
+f 1226 1225 1232
+f 1233 1226 1232
+f 890 889 1226
+f 890 1226 1233
+f 879 872 870
+f 879 1227 872
+f 880 1228 1227
+f 880 1227 879
+f 881 1229 1228
+f 881 1228 880
+f 882 1230 1229
+f 882 1229 881
+f 883 1231 1230
+f 883 1230 882
+f 1232 1231 883
+f 884 1232 883
+f 1233 1232 884
+f 885 1233 884
+f 890 1233 885
+f 886 890 885
+f 1234 895 891
+f 1235 1234 891
+f 907 1235 891
+f 1236 1235 907
+f 905 1236 907
+f 1234 896 895
+f 1235 896 1234
+f 901 1235 1236
+f 901 1236 905
+f 901 896 1235
+f 906 888 887
+f 897 906 887
+f 906 891 888
+f 906 907 891
+f 908 1237 903
+f 908 903 902
+f 1238 1237 908
+f 909 1238 908
+f 1239 1238 909
+f 910 1239 909
+f 1240 1239 910
+f 911 1240 910
+f 1241 1240 911
+f 912 1241 911
+f 1242 1241 912
+f 913 1242 912
+f 918 1242 913
+f 914 918 913
+f 1237 1243 904
+f 1237 904 903
+f 1238 1244 1243
+f 1238 1243 1237
+f 1239 1245 1244
+f 1239 1244 1238
+f 1246 1245 1239
+f 1240 1246 1239
+f 1241 1247 1246
+f 1241 1246 1240
+f 1242 1248 1247
+f 1242 1247 1241
+f 918 917 1248
+f 918 1248 1242
+f 1243 1249 899
+f 1243 899 904
+f 1244 1250 1249
+f 1244 1249 1243
+f 1245 1251 1250
+f 1245 1250 1244
+f 1246 1252 1251
+f 1246 1251 1245
+f 1247 1253 1252
+f 1247 1252 1246
+f 1248 921 1253
+f 1248 1253 1247
+f 917 921 1248
+f 1254 900 899
+f 1249 1254 899
+f 1255 1254 1249
+f 1250 1255 1249
+f 1251 1256 1255
+f 1251 1255 1250
+f 1252 1257 1256
+f 1252 1256 1251
+f 1253 1258 1257
+f 1253 1257 1252
+f 921 920 1258
+f 921 1258 1253
+f 1254 1259 898
+f 1254 898 900
+f 1260 1259 1254
+f 1255 1260 1254
+f 1256 1260 1255
+f 1261 1260 1256
+f 1257 1261 1256
+f 1262 1261 1257
+f 1258 1263 1262
+f 1258 1262 1257
+f 920 922 1263
+f 920 1263 1258
+f 1264 901 898
+f 1259 1264 898
+f 1265 1264 1259
+f 1260 1266 1265
+f 1260 1265 1259
+f 1261 1267 1266
+f 1261 1266 1260
+f 1262 1268 1267
+f 1262 1267 1261
+f 1263 1269 1268
+f 1263 1268 1262
+f 922 924 1269
+f 922 1269 1263
+f 919 1270 923
+f 919 1271 1270
+f 1272 1273 1274
+f 1272 1275 1271
+f 1272 1274 1275
+f 1272 1271 919
+f 951 1276 1273
+f 951 1277 1276
+f 951 955 1277
+f 951 1273 1272
+f 1270 1278 924
+f 1270 924 923
+f 1271 1278 1270
+f 1275 1278 1271
+f 1274 1278 1275
+f 1273 1278 1274
+f 1276 956 1278
+f 1276 1278 1273
+f 1277 956 1276
+f 955 956 1277
+f 915 1279 916
+f 925 1279 915
+f 916 1272 919
+f 1279 1272 916
+f 926 948 1279
+f 926 1279 925
+f 929 928 930
+f 929 930 931
+f 933 932 934
+f 933 934 935
+f 939 936 938
+f 937 936 939
+f 943 940 942
+f 941 940 943
+f 944 945 946
+f 944 946 947
+f 948 951 1272
+f 948 1272 1279
+f 957 959 960
+f 957 960 958
+f 962 963 964
+f 961 963 962
+f 965 967 968
+f 965 968 966
+f 969 971 972
+f 969 972 970
+f 974 975 976
+f 973 975 974
+f 978 979 980
+f 977 979 978
+f 982 983 984
+f 981 983 982
+f 985 987 988
+f 985 988 986
+f 989 991 992
+f 990 991 989
+f 993 995 996
+f 994 995 993
+f 997 999 1000
+f 997 1000 998
+f 1001 1003 1004
+f 1001 1004 1002
+f 1005 1007 1008
+f 1005 1008 1006
+f 1009 1011 1012
+f 1010 1011 1009
+f 1013 1015 1016
+f 1014 1015 1013
+f 1017 1019 1020
+f 1017 1020 1018
+f 1021 1023 1024
+f 1021 1024 1022
+f 1025 1027 1028
+f 1025 1028 1026
+f 1029 1031 1032
+f 1029 1032 1030
+f 1034 1035 1036
+f 1033 1035 1034
+f 1038 1039 1040
+f 1037 1039 1038
+f 1042 1043 1044
+f 1041 1043 1042
+f 1045 1047 1048
+f 1045 1048 1046
+f 1049 1051 1052
+f 1050 1051 1049
+f 1053 1055 1056
+f 1053 1056 1054
+f 1057 1059 1060
+f 1057 1060 1058
+f 1061 1063 1064
+f 1061 1064 1062
+f 1065 1067 1068
+f 1066 1067 1065
+f 1069 1071 1072
+f 1070 1071 1069
+f 1073 1075 1076
+f 1074 1075 1073
+f 1077 1078 1280
+f 1281 1077 1280
+f 1079 1077 1281
+f 1282 1079 1281
+f 1080 1079 1282
+f 1283 1080 1282
+f 1081 1080 1283
+f 1284 1081 1283
+f 1082 1081 1284
+f 1285 1082 1284
+f 1083 1082 1285
+f 1286 1083 1285
+f 1084 1083 1286
+f 1287 1084 1286
+f 1085 1084 1287
+f 1288 1085 1287
+f 1086 1085 1288
+f 1289 1086 1288
+f 1087 1086 1289
+f 1290 1087 1289
+f 1088 1087 1290
+f 1291 1088 1290
+f 1089 1088 1291
+f 1292 1089 1291
+f 1090 1089 1292
+f 1293 1090 1292
+f 1091 1090 1293
+f 1294 1091 1293
+f 1092 1091 1294
+f 1295 1092 1294
+f 1093 1092 1295
+f 1296 1093 1295
+f 1094 1093 1296
+f 1297 1094 1296
+f 1095 1094 1297
+f 1298 1095 1297
+f 1096 1095 1298
+f 1299 1096 1298
+f 1097 1096 1299
+f 1300 1097 1299
+f 1098 1097 1300
+f 1301 1098 1300
+f 1099 1098 1301
+f 1302 1099 1301
+f 1100 1099 1302
+f 1303 1100 1302
+f 1101 1100 1303
+f 1304 1101 1303
+f 1102 1101 1304
+f 1305 1102 1304
+f 1103 1102 1305
+f 1306 1103 1305
+f 1104 1103 1306
+f 1307 1104 1306
+f 1105 1104 1307
+f 1308 1105 1307
+f 1106 1105 1308
+f 1309 1106 1308
+f 1107 1106 1309
+f 1310 1107 1309
+f 1108 1107 1310
+f 1311 1108 1310
+f 1078 1108 1311
+f 1280 1078 1311
+f 867 1191 1190
+f 867 1190 878
+f 1164 878 1193
+f 1164 867 878
+f 1162 1193 1195
+f 1162 1164 1193
+f 1160 1195 1197
+f 1160 1162 1195
+f 1158 1197 1199
+f 1158 1160 1197
+f 1156 1199 1201
+f 1156 1158 1199
+f 1154 1201 1203
+f 1154 1203 1205
+f 1154 1156 1201
+f 850 1205 896
+f 850 1154 1205
+f 839 896 901
+f 839 850 896
+f 1132 901 1264
+f 1132 839 901
+f 1130 1132 1264
+f 956 1269 924
+f 956 924 1278
+f 1128 1264 1265
+f 1128 1130 1264
+f 1120 1269 956
+f 1120 1268 1269
+f 1126 1128 1265
+f 1126 1265 1266
+f 1122 1267 1268
+f 1122 1268 1120
+f 1124 1126 1266
+f 1124 1267 1122
+f 1124 1266 1267
+f 1312 1313 1280
+f 1314 1280 1313
+f 1281 1280 1314
+f 1315 1313 1312
+f 1316 1281 1314
+f 1317 1281 1318
+f 1319 1281 1316
+f 1319 1318 1281
+f 1282 1281 1317
+f 1320 1317 1321
+f 1320 1282 1317
+f 1322 1282 1320
+f 1283 1282 1322
+f 1283 1322 1323
+f 1324 1322 1320
+f 1325 1283 1323
+f 1284 1283 1326
+f 1284 1326 1327
+f 1328 1326 1283
+f 1328 1283 1325
+f 1329 1284 1327
+f 1330 1285 1284
+f 1330 1284 1329
+f 1331 1285 1330
+f 1331 1332 1285
+f 1286 1285 1332
+f 1286 1332 1333
+f 1286 1333 1334
+f 1335 1286 1336
+f 1337 1286 1334
+f 1337 1336 1286
+f 1287 1286 1335
+f 1287 1335 1338
+f 1339 1287 1340
+f 1341 1287 1338
+f 1341 1340 1287
+f 1288 1287 1339
+f 1288 1339 1342
+f 1288 1342 1343
+f 1344 1342 1339
+f 1344 1339 1345
+f 1346 1288 1343
+f 1347 1288 1346
+f 1347 1348 1288
+f 1289 1288 1348
+f 1289 1348 1349
+f 1289 1349 1350
+f 1351 1289 1352
+f 1353 1289 1350
+f 1353 1352 1289
+f 1290 1289 1351
+f 1290 1351 1354
+f 1355 1290 1356
+f 1357 1290 1354
+f 1357 1356 1290
+f 1358 1355 1359
+f 1358 1290 1355
+f 1291 1358 1360
+f 1291 1290 1358
+f 1361 1358 1359
+f 1362 1291 1360
+f 1363 1291 1362
+f 1292 1291 1363
+f 1364 1292 1363
+f 1365 1292 1364
+f 1366 1364 1363
+f 1367 1292 1365
+f 1293 1292 1367
+f 1293 1367 1368
+f 1369 1365 1370
+f 1369 1367 1365
+f 1371 1293 1368
+f 1372 1293 1371
+f 1373 1293 1372
+f 1294 1293 1373
+f 1374 1294 1373
+f 1375 1373 1372
+f 1376 1294 1374
+f 1376 1374 1377
+f 1295 1376 1378
+f 1295 1294 1376
+f 1379 1376 1377
+f 1380 1295 1378
+f 1296 1381 1382
+f 1296 1295 1381
+f 1383 1381 1295
+f 1383 1295 1380
+f 1384 1296 1382
+f 1385 1296 1386
+f 1387 1296 1384
+f 1387 1386 1296
+f 1297 1296 1385
+f 1388 1385 1389
+f 1388 1297 1385
+f 1390 1297 1388
+f 1298 1390 1391
+f 1298 1297 1390
+f 1392 1390 1388
+f 1393 1298 1391
+f 1299 1394 1395
+f 1299 1298 1394
+f 1396 1298 1393
+f 1396 1394 1298
+f 1397 1299 1395
+f 1398 1300 1299
+f 1398 1299 1397
+f 1301 1399 1400
+f 1301 1300 1399
+f 1401 1300 1398
+f 1401 1399 1300
+f 1402 1301 1400
+f 1403 1301 1402
+f 1403 1404 1301
+f 1302 1404 1405
+f 1302 1405 1406
+f 1302 1301 1404
+f 1407 1408 1302
+f 1407 1302 1406
+f 1303 1302 1408
+f 1303 1408 1409
+f 1303 1409 1410
+f 1411 1303 1412
+f 1413 1303 1410
+f 1413 1412 1303
+f 1414 1411 1415
+f 1304 1303 1411
+f 1304 1411 1414
+f 1304 1414 1416
+f 1417 1414 1415
+f 1418 1304 1416
+f 1419 1420 1304
+f 1419 1304 1418
+f 1305 1304 1420
+f 1305 1420 1421
+f 1305 1421 1422
+f 1306 1305 1423
+f 1306 1423 1424
+f 1425 1423 1305
+f 1425 1305 1422
+f 1426 1306 1424
+f 1427 1306 1428
+f 1429 1306 1426
+f 1429 1428 1306
+f 1307 1427 1430
+f 1307 1306 1427
+f 1431 1307 1430
+f 1432 1307 1431
+f 1308 1432 1433
+f 1308 1307 1432
+f 1434 1432 1431
+f 1435 1308 1433
+f 1309 1436 1437
+f 1309 1308 1436
+f 1438 1308 1435
+f 1438 1436 1308
+f 1439 1309 1437
+f 1440 1309 1439
+f 1441 1309 1440
+f 1310 1441 1442
+f 1310 1309 1441
+f 1443 1441 1440
+f 1444 1310 1442
+f 1445 1311 1446
+f 1280 1311 1445
+f 1447 1446 1311
+f 1447 1311 1310
+f 1447 1310 1444
+f 1312 1445 1448
+f 1312 1280 1445
+f 1449 1312 1448
+f 1449 1448 1450
+f 1451 1452 1453
+f 1452 1454 1453
+f 1445 1455 1448
+f 1455 1450 1448
+f 1450 1456 1457
+f 1457 1456 1452
+f 1455 1456 1450
+f 1456 1454 1452
+f 1455 1445 1446
+f 1455 1446 1458
+f 1459 1460 1461
+f 1461 1460 1462
+f 1460 1463 1464
+f 1463 1465 1464
+f 1465 1458 1447
+f 1447 1458 1446
+f 1463 1458 1465
+f 1459 1463 1460
+f 1447 1444 1466
+f 1465 1447 1466
+f 1467 1468 1469
+f 1467 1469 1470
+f 1471 1467 1472
+f 1466 1471 1472
+f 1473 1466 1444
+f 1473 1444 1442
+f 1473 1471 1466
+f 1471 1468 1467
+f 1473 1442 1441
+f 1473 1441 1474
+f 1475 1476 1477
+f 1478 1475 1477
+f 1443 1474 1441
+f 1479 1474 1443
+f 1480 1479 1481
+f 1480 1481 1475
+f 1480 1474 1479
+f 1478 1480 1475
+f 1482 1440 1439
+f 1482 1439 1483
+f 1443 1440 1482
+f 1479 1443 1482
+f 1484 1485 1486
+f 1485 1487 1486
+f 1488 1439 1437
+f 1488 1483 1439
+f 1483 1489 1490
+f 1490 1489 1485
+f 1488 1489 1483
+f 1489 1487 1485
+f 1488 1437 1436
+f 1488 1436 1491
+f 1492 1493 1494
+f 1494 1493 1495
+f 1493 1496 1497
+f 1496 1498 1497
+f 1498 1491 1438
+f 1438 1491 1436
+f 1496 1491 1498
+f 1492 1496 1493
+f 1498 1438 1435
+f 1498 1435 1499
+f 1500 1501 1502
+f 1500 1502 1503
+f 1504 1500 1505
+f 1499 1504 1505
+f 1506 1499 1435
+f 1506 1435 1433
+f 1506 1504 1499
+f 1504 1501 1500
+f 1506 1433 1432
+f 1506 1432 1507
+f 1508 1509 1510
+f 1511 1508 1510
+f 1434 1507 1432
+f 1512 1507 1434
+f 1513 1512 1514
+f 1513 1514 1508
+f 1513 1507 1512
+f 1511 1513 1508
+f 1431 1430 1515
+f 1516 1431 1515
+f 1434 1431 1516
+f 1512 1434 1516
+f 1517 1518 1519
+f 1518 1520 1519
+f 1521 1430 1427
+f 1521 1515 1430
+f 1515 1522 1523
+f 1523 1522 1518
+f 1521 1522 1515
+f 1522 1520 1518
+f 1427 1428 1524
+f 1521 1427 1524
+f 1525 1526 1527
+f 1527 1526 1528
+f 1526 1529 1530
+f 1529 1531 1530
+f 1531 1524 1429
+f 1429 1524 1428
+f 1529 1524 1531
+f 1525 1529 1526
+f 1429 1426 1532
+f 1531 1429 1532
+f 1533 1534 1535
+f 1534 1536 1535
+f 1537 1426 1424
+f 1537 1532 1426
+f 1532 1538 1539
+f 1539 1538 1534
+f 1537 1538 1532
+f 1538 1536 1534
+f 1424 1423 1540
+f 1537 1424 1540
+f 1541 1542 1543
+f 1543 1542 1544
+f 1542 1545 1546
+f 1545 1547 1546
+f 1547 1540 1425
+f 1425 1540 1423
+f 1545 1540 1547
+f 1541 1545 1542
+f 1425 1422 1548
+f 1547 1425 1548
+f 1549 1550 1551
+f 1549 1551 1552
+f 1553 1549 1554
+f 1548 1553 1554
+f 1555 1548 1422
+f 1555 1422 1421
+f 1555 1553 1548
+f 1553 1550 1549
+f 1421 1420 1556
+f 1555 1421 1556
+f 1557 1558 1559
+f 1560 1557 1559
+f 1556 1420 1419
+f 1561 1556 1419
+f 1562 1561 1563
+f 1562 1563 1557
+f 1562 1556 1561
+f 1560 1562 1557
+f 1419 1418 1564
+f 1561 1419 1564
+f 1565 1566 1567
+f 1565 1567 1568
+f 1569 1565 1570
+f 1564 1569 1570
+f 1571 1564 1418
+f 1571 1418 1416
+f 1571 1569 1564
+f 1569 1566 1565
+f 1416 1414 1572
+f 1571 1416 1572
+f 1573 1574 1575
+f 1576 1573 1575
+f 1572 1414 1417
+f 1577 1572 1417
+f 1578 1577 1579
+f 1578 1579 1573
+f 1578 1572 1577
+f 1576 1578 1573
+f 1417 1415 1580
+f 1577 1417 1580
+f 1581 1582 1583
+f 1582 1584 1583
+f 1582 1585 1584
+f 1411 1586 1415
+f 1586 1580 1415
+f 1580 1587 1588
+f 1588 1587 1582
+f 1586 1587 1580
+f 1587 1585 1582
+f 1411 1412 1589
+f 1586 1411 1589
+f 1590 1591 1592
+f 1592 1591 1593
+f 1593 1591 1594
+f 1591 1595 1596
+f 1595 1597 1596
+f 1597 1589 1413
+f 1413 1589 1412
+f 1595 1589 1597
+f 1590 1595 1591
+f 1597 1413 1410
+f 1597 1410 1598
+f 1599 1600 1601
+f 1600 1602 1601
+f 1600 1603 1602
+f 1409 1604 1410
+f 1604 1598 1410
+f 1598 1605 1606
+f 1606 1605 1600
+f 1604 1605 1598
+f 1605 1603 1600
+f 1409 1408 1607
+f 1604 1409 1607
+f 1608 1609 1610
+f 1610 1609 1611
+f 1611 1609 1612
+f 1609 1613 1614
+f 1613 1615 1614
+f 1615 1607 1407
+f 1407 1607 1408
+f 1613 1607 1615
+f 1608 1613 1609
+f 1615 1407 1406
+f 1615 1406 1616
+f 1617 1618 1619
+f 1617 1619 1620
+f 1617 1620 1621
+f 1622 1617 1623
+f 1616 1622 1623
+f 1624 1616 1406
+f 1624 1406 1405
+f 1624 1622 1616
+f 1622 1618 1617
+f 1405 1404 1625
+f 1624 1405 1625
+f 1626 1627 1628
+f 1629 1626 1628
+f 1630 1626 1629
+f 1625 1404 1403
+f 1631 1625 1403
+f 1632 1631 1633
+f 1632 1633 1626
+f 1632 1625 1631
+f 1630 1632 1626
+f 1631 1403 1402
+f 1631 1402 1634
+f 1635 1636 1637
+f 1635 1637 1638
+f 1635 1638 1639
+f 1640 1635 1641
+f 1634 1640 1641
+f 1642 1634 1402
+f 1642 1402 1400
+f 1642 1640 1634
+f 1640 1636 1635
+f 1400 1399 1643
+f 1642 1400 1643
+f 1644 1645 1646
+f 1647 1644 1646
+f 1648 1644 1647
+f 1643 1399 1401
+f 1649 1643 1401
+f 1650 1649 1651
+f 1650 1651 1644
+f 1650 1643 1649
+f 1648 1650 1644
+f 1652 1398 1397
+f 1652 1397 1653
+f 1649 1401 1398
+f 1649 1398 1652
+f 1654 1655 1656
+f 1655 1657 1656
+f 1655 1658 1657
+f 1395 1659 1397
+f 1659 1653 1397
+f 1653 1660 1661
+f 1661 1660 1655
+f 1659 1660 1653
+f 1660 1658 1655
+f 1659 1395 1394
+f 1659 1394 1662
+f 1663 1664 1665
+f 1665 1664 1666
+f 1666 1664 1667
+f 1664 1668 1669
+f 1668 1670 1669
+f 1670 1662 1396
+f 1396 1662 1394
+f 1668 1662 1670
+f 1663 1668 1664
+f 1396 1393 1671
+f 1670 1396 1671
+f 1672 1673 1674
+f 1672 1674 1675
+f 1672 1675 1676
+f 1677 1672 1678
+f 1671 1677 1678
+f 1679 1671 1393
+f 1679 1393 1391
+f 1679 1677 1671
+f 1677 1673 1672
+f 1679 1391 1390
+f 1679 1390 1680
+f 1681 1682 1683
+f 1684 1681 1683
+f 1685 1681 1684
+f 1680 1390 1392
+f 1686 1680 1392
+f 1687 1686 1688
+f 1687 1688 1681
+f 1687 1680 1686
+f 1685 1687 1681
+f 1689 1388 1389
+f 1689 1389 1690
+f 1392 1388 1689
+f 1686 1392 1689
+f 1691 1692 1693
+f 1692 1694 1693
+f 1692 1695 1694
+f 1385 1696 1389
+f 1696 1690 1389
+f 1690 1697 1698
+f 1698 1697 1692
+f 1696 1697 1690
+f 1697 1695 1692
+f 1696 1385 1386
+f 1696 1386 1699
+f 1700 1701 1702
+f 1702 1701 1703
+f 1703 1701 1704
+f 1701 1705 1706
+f 1705 1707 1706
+f 1707 1699 1387
+f 1387 1699 1386
+f 1705 1699 1707
+f 1700 1705 1701
+f 1707 1387 1384
+f 1707 1384 1708
+f 1709 1710 1711
+f 1709 1711 1712
+f 1709 1712 1713
+f 1714 1709 1715
+f 1708 1714 1715
+f 1716 1708 1384
+f 1716 1384 1382
+f 1716 1714 1708
+f 1714 1710 1709
+f 1716 1382 1381
+f 1716 1381 1717
+f 1718 1719 1720
+f 1721 1718 1720
+f 1722 1718 1721
+f 1717 1381 1383
+f 1723 1717 1383
+f 1724 1723 1725
+f 1724 1725 1718
+f 1724 1717 1723
+f 1722 1724 1718
+f 1383 1380 1726
+f 1723 1383 1726
+f 1727 1728 1729
+f 1728 1730 1729
+f 1378 1731 1380
+f 1731 1726 1380
+f 1726 1732 1733
+f 1733 1732 1728
+f 1731 1732 1726
+f 1732 1730 1728
+f 1731 1378 1376
+f 1731 1376 1734
+f 1735 1736 1737
+f 1737 1736 1738
+f 1736 1739 1740
+f 1739 1741 1740
+f 1741 1734 1379
+f 1379 1734 1376
+f 1739 1734 1741
+f 1735 1739 1736
+f 1379 1377 1742
+f 1741 1379 1742
+f 1743 1744 1745
+f 1743 1745 1746
+f 1747 1743 1748
+f 1742 1747 1748
+f 1749 1742 1377
+f 1749 1377 1374
+f 1749 1747 1742
+f 1747 1744 1743
+f 1749 1374 1373
+f 1749 1373 1750
+f 1751 1752 1753
+f 1754 1751 1753
+f 1375 1750 1373
+f 1755 1750 1375
+f 1756 1755 1757
+f 1756 1757 1751
+f 1756 1750 1755
+f 1754 1756 1751
+f 1758 1372 1371
+f 1758 1371 1759
+f 1375 1372 1758
+f 1755 1375 1758
+f 1760 1761 1762
+f 1761 1763 1762
+f 1764 1371 1368
+f 1764 1759 1371
+f 1759 1765 1766
+f 1766 1765 1761
+f 1764 1765 1759
+f 1765 1763 1761
+f 1764 1368 1367
+f 1764 1367 1767
+f 1768 1769 1770
+f 1770 1769 1771
+f 1769 1772 1773
+f 1772 1774 1773
+f 1774 1767 1369
+f 1369 1767 1367
+f 1772 1767 1774
+f 1768 1772 1769
+f 1774 1369 1370
+f 1774 1370 1775
+f 1776 1777 1778
+f 1776 1778 1779
+f 1780 1776 1781
+f 1775 1780 1781
+f 1782 1775 1370
+f 1782 1370 1365
+f 1782 1780 1775
+f 1780 1777 1776
+f 1782 1365 1364
+f 1782 1364 1783
+f 1784 1785 1786
+f 1787 1784 1786
+f 1366 1783 1364
+f 1788 1783 1366
+f 1789 1788 1790
+f 1789 1790 1784
+f 1789 1783 1788
+f 1787 1789 1784
+f 1363 1362 1791
+f 1792 1363 1791
+f 1366 1363 1792
+f 1788 1366 1792
+f 1793 1794 1795
+f 1794 1796 1795
+f 1797 1362 1360
+f 1797 1791 1362
+f 1791 1798 1799
+f 1799 1798 1794
+f 1797 1798 1791
+f 1798 1796 1794
+f 1360 1358 1800
+f 1797 1360 1800
+f 1801 1802 1803
+f 1803 1802 1804
+f 1802 1805 1806
+f 1805 1807 1806
+f 1807 1800 1361
+f 1361 1800 1358
+f 1805 1800 1807
+f 1801 1805 1802
+f 1361 1359 1808
+f 1807 1361 1808
+f 1809 1810 1811
+f 1810 1812 1811
+f 1813 1359 1355
+f 1813 1808 1359
+f 1808 1814 1815
+f 1815 1814 1810
+f 1813 1814 1808
+f 1814 1812 1810
+f 1355 1356 1816
+f 1813 1355 1816
+f 1817 1818 1819
+f 1819 1818 1820
+f 1818 1821 1822
+f 1821 1823 1822
+f 1823 1816 1357
+f 1357 1816 1356
+f 1821 1816 1823
+f 1817 1821 1818
+f 1357 1354 1824
+f 1823 1357 1824
+f 1825 1826 1827
+f 1825 1827 1828
+f 1829 1825 1830
+f 1824 1829 1830
+f 1831 1824 1354
+f 1831 1354 1351
+f 1831 1829 1824
+f 1829 1826 1825
+f 1351 1352 1832
+f 1831 1351 1832
+f 1833 1834 1835
+f 1836 1833 1835
+f 1832 1352 1353
+f 1837 1832 1353
+f 1838 1837 1839
+f 1838 1839 1833
+f 1838 1832 1837
+f 1836 1838 1833
+f 1353 1350 1840
+f 1837 1353 1840
+f 1841 1842 1843
+f 1841 1843 1844
+f 1845 1841 1846
+f 1840 1845 1846
+f 1847 1840 1350
+f 1847 1350 1349
+f 1847 1845 1840
+f 1845 1842 1841
+f 1349 1348 1848
+f 1847 1349 1848
+f 1849 1850 1851
+f 1852 1849 1851
+f 1848 1348 1347
+f 1853 1848 1347
+f 1854 1853 1855
+f 1854 1855 1849
+f 1854 1848 1853
+f 1852 1854 1849
+f 1347 1346 1856
+f 1853 1347 1856
+f 1857 1858 1859
+f 1858 1860 1859
+f 1858 1861 1860
+f 1343 1862 1346
+f 1862 1856 1346
+f 1856 1863 1864
+f 1864 1863 1858
+f 1862 1863 1856
+f 1863 1861 1858
+f 1343 1342 1865
+f 1862 1343 1865
+f 1866 1867 1868
+f 1868 1867 1869
+f 1869 1867 1870
+f 1867 1871 1872
+f 1871 1873 1872
+f 1873 1865 1344
+f 1344 1865 1342
+f 1871 1865 1873
+f 1866 1871 1867
+f 1873 1344 1345
+f 1873 1345 1874
+f 1875 1876 1877
+f 1876 1878 1877
+f 1876 1879 1878
+f 1339 1880 1345
+f 1880 1874 1345
+f 1874 1881 1882
+f 1882 1881 1876
+f 1880 1881 1874
+f 1881 1879 1876
+f 1339 1340 1883
+f 1880 1339 1883
+f 1884 1885 1886
+f 1886 1885 1887
+f 1887 1885 1888
+f 1885 1889 1890
+f 1889 1891 1890
+f 1891 1883 1341
+f 1341 1883 1340
+f 1889 1883 1891
+f 1884 1889 1885
+f 1891 1341 1338
+f 1891 1338 1892
+f 1893 1894 1895
+f 1893 1895 1896
+f 1893 1896 1897
+f 1898 1893 1899
+f 1892 1898 1899
+f 1900 1892 1338
+f 1900 1338 1335
+f 1900 1898 1892
+f 1898 1894 1893
+f 1335 1336 1901
+f 1900 1335 1901
+f 1902 1903 1904
+f 1905 1902 1904
+f 1906 1902 1905
+f 1901 1336 1337
+f 1907 1901 1337
+f 1908 1907 1909
+f 1908 1909 1902
+f 1908 1901 1907
+f 1906 1908 1902
+f 1907 1337 1334
+f 1907 1334 1910
+f 1911 1912 1913
+f 1911 1913 1914
+f 1911 1914 1915
+f 1916 1911 1917
+f 1910 1916 1917
+f 1918 1910 1334
+f 1918 1334 1333
+f 1918 1916 1910
+f 1916 1912 1911
+f 1333 1332 1919
+f 1918 1333 1919
+f 1920 1921 1922
+f 1923 1920 1922
+f 1924 1920 1923
+f 1919 1332 1331
+f 1925 1919 1331
+f 1926 1925 1927
+f 1926 1927 1920
+f 1926 1919 1925
+f 1924 1926 1920
+f 1928 1330 1329
+f 1928 1329 1929
+f 1925 1331 1330
+f 1925 1330 1928
+f 1930 1931 1932
+f 1931 1933 1932
+f 1931 1934 1933
+f 1327 1935 1329
+f 1935 1929 1329
+f 1929 1936 1937
+f 1937 1936 1931
+f 1935 1936 1929
+f 1936 1934 1931
+f 1935 1327 1326
+f 1935 1326 1938
+f 1939 1940 1941
+f 1941 1940 1942
+f 1942 1940 1943
+f 1940 1944 1945
+f 1944 1946 1945
+f 1946 1938 1328
+f 1328 1938 1326
+f 1944 1938 1946
+f 1939 1944 1940
+f 1328 1325 1947
+f 1946 1328 1947
+f 1948 1949 1950
+f 1948 1950 1951
+f 1948 1951 1952
+f 1953 1948 1954
+f 1947 1953 1954
+f 1955 1947 1325
+f 1955 1325 1323
+f 1955 1953 1947
+f 1953 1949 1948
+f 1955 1323 1322
+f 1955 1322 1956
+f 1957 1958 1959
+f 1960 1957 1959
+f 1961 1957 1960
+f 1956 1322 1324
+f 1962 1956 1324
+f 1963 1962 1964
+f 1963 1964 1957
+f 1963 1956 1962
+f 1961 1963 1957
+f 1965 1320 1321
+f 1965 1321 1966
+f 1324 1320 1965
+f 1962 1324 1965
+f 1967 1968 1969
+f 1968 1970 1969
+f 1968 1971 1970
+f 1317 1972 1321
+f 1972 1966 1321
+f 1966 1973 1974
+f 1974 1973 1968
+f 1972 1973 1966
+f 1973 1971 1968
+f 1972 1317 1318
+f 1972 1318 1975
+f 1976 1977 1978
+f 1978 1977 1979
+f 1979 1977 1980
+f 1977 1981 1982
+f 1981 1983 1982
+f 1983 1975 1319
+f 1319 1975 1318
+f 1981 1975 1983
+f 1976 1981 1977
+f 1983 1319 1316
+f 1983 1316 1984
+f 1985 1986 1987
+f 1985 1987 1988
+f 1985 1988 1989
+f 1990 1985 1991
+f 1984 1990 1991
+f 1992 1984 1316
+f 1992 1316 1314
+f 1992 1990 1984
+f 1990 1986 1985
+f 1992 1314 1313
+f 1992 1313 1993
+f 1994 1995 1996
+f 1997 1994 1996
+f 1998 1994 1997
+f 1993 1313 1315
+f 1999 1993 1315
+f 2000 1999 2001
+f 2000 2001 1994
+f 2000 1993 1999
+f 1998 2000 1994
+f 1315 1312 1449
+f 1999 1315 1449
+f 2002 1449 1450
+f 2002 1450 1457
+f 1575 1583 1584
+f 1576 1575 1584
+f 1559 1567 1566
+f 1560 1559 1566
+f 2003 1551 1550
+f 1543 1551 2003
+f 1541 1543 2003
+f 2004 1535 1536
+f 1527 1535 2004
+f 1525 1527 2004
+f 2005 1519 1520
+f 2006 1519 2005
+f 1511 1510 2006
+f 1511 2006 2005
+f 2007 1502 1501
+f 1494 1502 2007
+f 1492 1494 2007
+f 2008 1486 1487
+f 2009 1486 2008
+f 1478 1477 2009
+f 1478 2009 2008
+f 2010 1469 1468
+f 1461 1469 2010
+f 1459 1461 2010
+f 2011 2012 1453
+f 2011 1453 1454
+f 1584 2003 1576
+f 1576 2003 1566
+f 1566 2003 1560
+f 1560 2003 1550
+f 2003 2004 1541
+f 1541 2004 1536
+f 2004 2005 1525
+f 1525 2005 1520
+f 2005 2007 1501
+f 2005 1501 1511
+f 2007 2008 1487
+f 2007 1487 1492
+f 2008 2010 1468
+f 2008 1468 1478
+f 2010 2011 1454
+f 2010 1454 1459
+f 2012 2013 1451
+f 2012 1451 1453
+f 2013 2014 1452
+f 2013 1452 1451
+f 2015 1457 1452
+f 2016 2015 1452
+f 2002 2015 2017
+f 2014 2017 2018
+f 2014 2002 2017
+f 2002 1457 2015
+f 1452 2014 2018
+f 1452 2018 2016
+f 1456 1455 1458
+f 1456 1458 1463
+f 1454 1456 1463
+f 1454 1463 1459
+f 1464 1465 1466
+f 1464 1466 1472
+f 2019 1472 1467
+f 2019 2020 1472
+f 2021 1472 2020
+f 2022 2019 1467
+f 2023 2021 2022
+f 2023 2024 2021
+f 1464 2024 2025
+f 1460 2025 2026
+f 1460 1464 2025
+f 1464 1472 2021
+f 1464 2021 2024
+f 1467 1460 2026
+f 1467 2026 2023
+f 1467 2023 2022
+f 1462 1460 1467
+f 1462 1467 1470
+f 1462 1470 1469
+f 1461 1462 1469
+f 1480 1473 1474
+f 1471 1473 1480
+f 1478 1471 1480
+f 1468 1471 1478
+f 2009 2027 1484
+f 2009 1484 1486
+f 1476 2027 2009
+f 1477 1476 2009
+f 2027 2028 1485
+f 2027 1485 1484
+f 1476 1475 2028
+f 1476 2028 2027
+f 2029 1490 1485
+f 2029 2030 1490
+f 2031 2029 1485
+f 2032 2033 2034
+f 2035 2033 2031
+f 2035 2034 2033
+f 2036 2032 2034
+f 2028 2037 2035
+f 2028 2035 2031
+f 2038 2032 2036
+f 2039 2036 2037
+f 2039 2037 2028
+f 2039 2038 2036
+f 1481 2038 2040
+f 1475 2040 2041
+f 1475 2041 2039
+f 1475 2039 2028
+f 1475 1481 2040
+f 2032 1490 2030
+f 2032 2030 2033
+f 1481 2032 2038
+f 1485 2028 2031
+f 2032 1482 1483
+f 2032 1483 1490
+f 1481 1479 1482
+f 1481 1482 2032
+f 1489 1488 1491
+f 1489 1491 1496
+f 1487 1489 1496
+f 1487 1496 1492
+f 2042 1499 1505
+f 2043 2042 1505
+f 2044 1499 2042
+f 1498 1499 2044
+f 2045 2044 2046
+f 2045 1498 2044
+f 2047 2045 2046
+f 2048 1498 2045
+f 1497 2048 2049
+f 1497 1498 2048
+f 2050 2043 1505
+f 2050 1505 1500
+f 2051 2050 1500
+f 2052 2047 2046
+f 2052 2046 2051
+f 1497 2053 2054
+f 1493 2054 2052
+f 1493 1497 2054
+f 1500 1493 2052
+f 1500 2052 2051
+f 1497 2049 2053
+f 1495 1493 1500
+f 1495 1500 1503
+f 1494 1495 1503
+f 1494 1503 1502
+f 1504 1506 1507
+f 1504 1507 1513
+f 1501 1504 1513
+f 1501 1513 1511
+f 2055 1517 1519
+f 2006 2055 1519
+f 1509 2055 2006
+f 1510 1509 2006
+f 2055 2056 1518
+f 2055 1518 1517
+f 1509 1508 2056
+f 1509 2056 2055
+f 2057 2058 1523
+f 2057 1523 1518
+f 2059 2057 1518
+f 2060 2061 2062
+f 2060 2062 2059
+f 2056 2063 2064
+f 2056 2064 2060
+f 2056 2060 2059
+f 2065 2063 2056
+f 2066 2065 2056
+f 2067 2066 2056
+f 2068 2069 2070
+f 2068 2070 2067
+f 1514 2071 2072
+f 1508 2072 2068
+f 1508 2068 2067
+f 1508 2067 2056
+f 1508 1514 2072
+f 1518 2056 2059
+f 2073 1515 1523
+f 2058 2073 1523
+f 2074 1515 2073
+f 2075 2074 2062
+f 2061 2075 2062
+f 1516 1515 2074
+f 1516 2074 2075
+f 2076 1516 2075
+f 2077 2076 2063
+f 2077 1516 2076
+f 2065 2077 2063
+f 2078 1516 2077
+f 1512 1516 2078
+f 2079 2078 2070
+f 2079 1512 2078
+f 2069 2079 2070
+f 2080 1512 2079
+f 1514 2080 2071
+f 1514 1512 2080
+f 1529 1521 1524
+f 1522 1521 1529
+f 1525 1522 1529
+f 1520 1522 1525
+f 1531 1532 1539
+f 1530 1531 1539
+f 2081 1539 1534
+f 2081 2082 1539
+f 2083 2081 1534
+f 2084 2085 2083
+f 2084 2086 2085
+f 1530 2087 2088
+f 1526 2088 2084
+f 1526 1530 2088
+f 1530 1539 2086
+f 2086 1539 2082
+f 2086 2082 2085
+f 1530 2086 2087
+f 1534 1526 2083
+f 2083 1526 2084
+f 1528 1526 1534
+f 1528 1534 1533
+f 1528 1533 1535
+f 1527 1528 1535
+f 1545 1537 1540
+f 1538 1537 1545
+f 1541 1538 1545
+f 1536 1538 1541
+f 1547 1548 1554
+f 1546 1547 1554
+f 2089 1554 1549
+f 2089 2090 1554
+f 2091 1554 2090
+f 2092 2089 1549
+f 2093 2091 2092
+f 2093 2094 2091
+f 2095 2096 2097
+f 2095 2098 2096
+f 1546 2098 2099
+f 1546 2099 2100
+f 1542 2100 2095
+f 1542 2095 2097
+f 1542 1546 2100
+f 1546 1554 2098
+f 2098 1554 2094
+f 2094 1554 2091
+f 2098 2094 2096
+f 1549 1542 2092
+f 2092 1542 2093
+f 2093 1542 2097
+f 1544 1542 1549
+f 1544 1549 1552
+f 1544 1552 1551
+f 1543 1544 1551
+f 1562 1555 1556
+f 1553 1555 1562
+f 1560 1553 1562
+f 1550 1553 1560
+f 1558 1568 1567
+f 1559 1558 1567
+f 1558 1557 1565
+f 1558 1565 1568
+f 2101 1570 1565
+f 2102 2101 1565
+f 2103 2104 2105
+f 2103 2106 2104
+f 1563 2106 2107
+f 1557 2107 2108
+f 1557 2108 2103
+f 1557 1563 2107
+f 1563 1570 2106
+f 2106 1570 2104
+f 2104 1570 2101
+f 1565 1557 2105
+f 2105 1557 2103
+f 1565 2105 2102
+f 1563 1561 1564
+f 1563 1564 1570
+f 1578 1571 1572
+f 1569 1571 1578
+f 1576 1569 1578
+f 1566 1569 1576
+f 1574 1581 1583
+f 1575 1574 1583
+f 1573 1582 1581
+f 1574 1573 1581
+f 2109 1588 1582
+f 2110 2109 1582
+f 2111 1588 2109
+f 2112 2110 1582
+f 2113 2111 2112
+f 2113 2114 2111
+f 1579 2114 2115
+f 1573 2116 2113
+f 1573 2115 2116
+f 1573 1579 2115
+f 1579 1588 2114
+f 2114 1588 2111
+f 1582 1573 2112
+f 2112 1573 2113
+f 1579 1577 1580
+f 1579 1580 1588
+f 1585 1590 1592
+f 1584 1585 1592
+f 1587 1586 1589
+f 1587 1589 1595
+f 1585 1587 1595
+f 1585 1595 1590
+f 1596 1597 1598
+f 1596 1598 1606
+f 2117 1606 1600
+f 2117 2118 1606
+f 2119 2117 1600
+f 2120 2121 2119
+f 2120 2122 2121
+f 1596 2122 2123
+f 1591 2124 2120
+f 1591 2123 2124
+f 1591 1596 2123
+f 1596 1606 2118
+f 1596 2118 2121
+f 1596 2121 2122
+f 1600 1591 2119
+f 2119 1591 2120
+f 1591 1600 1599
+f 1594 1591 1599
+f 1593 1594 1599
+f 1593 1599 1601
+f 1592 1593 1601
+f 1592 1601 1602
+f 1603 1608 1610
+f 1602 1603 1610
+f 1605 1604 1607
+f 1605 1607 1613
+f 1603 1605 1613
+f 1603 1613 1608
+f 1615 1616 1623
+f 1614 1615 1623
+f 2125 1623 1617
+f 2125 2126 1623
+f 2127 2125 1617
+f 2128 2129 2127
+f 2128 2130 2129
+f 2131 2132 2133
+f 2131 2134 2132
+f 1614 2134 2135
+f 1609 2135 2136
+f 1609 2136 2131
+f 1609 1614 2135
+f 1614 1623 2126
+f 1614 2126 2129
+f 1614 2129 2130
+f 1614 2130 2132
+f 1614 2132 2134
+f 1617 1609 2131
+f 1617 2131 2133
+f 1617 2133 2128
+f 1617 2128 2127
+f 1612 1609 1617
+f 1612 1617 1621
+f 1611 1612 1621
+f 1611 1621 1620
+f 1610 1611 1620
+f 1610 1620 1619
+f 1622 1624 1625
+f 1622 1625 1632
+f 1618 1630 1629
+f 1619 1618 1629
+f 1618 1622 1632
+f 1618 1632 1630
+f 1629 1628 1638
+f 1629 1638 1637
+f 1628 1627 1639
+f 1628 1639 1638
+f 1626 1635 1639
+f 1627 1626 1639
+f 2137 1641 1635
+f 2137 2138 1641
+f 2139 2137 1635
+f 2140 2141 2139
+f 2140 2142 2141
+f 1633 2142 2143
+f 1633 2143 2144
+f 1626 2144 2140
+f 1626 1633 2144
+f 1633 1641 2138
+f 1633 2138 2141
+f 1633 2141 2142
+f 1635 1626 2140
+f 1635 2140 2139
+f 1633 1631 1634
+f 1633 1634 1641
+f 1640 1642 1643
+f 1640 1643 1650
+f 1636 1648 1647
+f 1637 1636 1647
+f 1636 1640 1650
+f 1636 1650 1648
+f 2145 2146 1656
+f 2145 1656 1657
+f 1647 1646 2146
+f 1647 2146 2145
+f 2146 2147 1654
+f 2146 1654 1656
+f 1646 1645 2147
+f 1646 2147 2146
+f 2147 2148 1655
+f 2147 1655 1654
+f 1644 2148 2147
+f 1645 1644 2147
+f 2149 2150 1661
+f 2149 1661 1655
+f 2151 2149 1655
+f 2152 2153 2154
+f 2152 2154 2151
+f 2152 2151 1655
+f 2148 2155 2156
+f 2148 2156 2152
+f 2157 2155 2148
+f 2158 2157 2148
+f 2159 2158 2148
+f 2160 2161 2159
+f 2160 2162 2161
+f 1651 2162 2163
+f 1651 2163 2164
+f 1644 2164 2160
+f 1644 2160 2159
+f 1644 2159 2148
+f 1644 1651 2164
+f 1655 2148 2152
+f 1651 2165 2162
+f 2162 2165 2161
+f 2166 1653 1661
+f 2150 2166 1661
+f 2167 1653 2166
+f 2168 1653 2167
+f 2153 2167 2154
+f 2153 2168 2167
+f 1652 1653 2168
+f 2169 1652 2168
+f 2170 1652 2169
+f 2157 2169 2155
+f 2157 2170 2169
+f 2171 1652 2170
+f 1649 1652 2171
+f 1651 2171 2165
+f 1651 1649 2171
+f 1657 1658 1663
+f 1657 1663 1665
+f 1668 1659 1662
+f 1660 1659 1668
+f 1663 1660 1668
+f 1658 1660 1663
+f 2172 1670 1671
+f 2172 1671 1678
+f 2173 2172 1678
+f 2174 1670 2172
+f 1669 2174 2175
+f 1669 1670 2174
+f 2176 1678 1672
+f 2176 2177 1678
+f 2178 2176 1672
+f 2179 2180 2178
+f 2179 2173 2180
+f 1669 2181 2182
+f 1664 2182 2179
+f 1664 1669 2182
+f 2173 1678 2177
+f 2173 2177 2180
+f 1672 1664 2178
+f 2178 1664 2179
+f 1669 2175 2181
+f 1667 1664 1672
+f 1667 1672 1676
+f 1667 1676 1675
+f 1666 1667 1675
+f 1666 1675 1674
+f 1665 1666 1674
+f 1687 1679 1680
+f 1677 1679 1687
+f 1674 1673 1685
+f 1674 1685 1684
+f 1685 1677 1687
+f 1673 1677 1685
+f 2183 2184 1693
+f 2183 1693 1694
+f 1683 2184 2183
+f 1684 1683 2183
+f 2184 2185 1691
+f 2184 1691 1693
+f 1682 2185 2184
+f 1683 1682 2184
+f 2185 2186 1692
+f 2185 1692 1691
+f 1682 1681 2186
+f 1682 2186 2185
+f 2187 1698 1692
+f 2187 2188 1698
+f 2189 2187 1692
+f 2190 2191 2192
+f 2193 2192 2189
+f 2193 2190 2192
+f 2194 2191 2190
+f 2186 2193 2189
+f 2195 2193 2186
+f 2196 2191 2194
+f 2197 2194 2195
+f 2197 2196 2194
+f 2197 2195 2186
+f 1688 2196 2198
+f 1688 2198 2199
+f 1681 2199 2197
+f 1681 2197 2186
+f 1681 1688 2199
+f 2191 1698 2188
+f 2191 2188 2192
+f 1688 2191 2196
+f 1692 2186 2189
+f 2191 1689 1690
+f 2191 1690 1698
+f 1688 1686 1689
+f 1688 1689 2191
+f 1695 1700 1702
+f 1694 1695 1702
+f 1697 1696 1699
+f 1697 1699 1705
+f 1695 1697 1705
+f 1695 1705 1700
+f 1706 1707 1708
+f 1706 1708 1715
+f 2200 1715 1709
+f 2201 2200 1709
+f 2202 1715 2200
+f 2203 2201 1709
+f 2204 2202 2203
+f 2204 2205 2202
+f 1706 2205 2206
+f 1701 2207 2204
+f 1701 2206 2207
+f 1701 1706 2206
+f 1706 1715 2205
+f 2205 1715 2202
+f 1709 1701 2203
+f 2203 1701 2204
+f 1704 1701 1709
+f 1704 1709 1713
+f 1703 1704 1713
+f 1703 1713 1712
+f 1702 1703 1712
+f 1702 1712 1711
+f 1724 1716 1717
+f 1714 1716 1724
+f 1711 1710 1722
+f 1711 1722 1721
+f 1722 1714 1724
+f 1710 1714 1722
+f 1851 1859 1860
+f 1852 1851 1860
+f 1835 1843 1842
+f 1836 1835 1842
+f 2208 1827 1826
+f 1819 1827 2208
+f 1817 1819 2208
+f 2209 1811 1812
+f 1803 1811 2209
+f 1801 1803 2209
+f 1796 1801 2209
+f 2210 1795 1796
+f 2211 2210 1796
+f 1786 2210 2211
+f 1787 1786 2211
+f 2212 1778 1777
+f 1770 1778 2212
+f 1768 1770 2212
+f 1763 1768 2212
+f 2213 1762 1763
+f 2214 2213 1763
+f 1753 2213 2214
+f 1754 1753 2214
+f 2215 1745 1744
+f 1737 1745 2215
+f 1735 1737 2215
+f 1720 1729 1730
+f 1721 1720 1730
+f 1860 2208 1852
+f 1852 2208 1842
+f 1842 2208 1836
+f 1836 2208 1826
+f 2208 2209 1817
+f 1817 2209 1812
+f 2209 2211 1796
+f 2211 2212 1777
+f 2211 1777 1787
+f 2212 2214 1763
+f 2214 2215 1744
+f 2214 1744 1754
+f 2215 1721 1730
+f 2215 1730 1735
+f 1719 1727 1729
+f 1720 1719 1729
+f 1718 1728 1727
+f 1719 1718 1727
+f 2216 1733 1728
+f 2217 2216 1728
+f 2218 2219 2220
+f 2218 2221 2219
+f 1725 2221 2222
+f 1718 2222 2223
+f 1718 1725 2222
+f 1725 1733 2216
+f 1725 2216 2219
+f 1725 2219 2221
+f 1728 1718 2223
+f 1728 2223 2218
+f 1728 2218 2220
+f 1728 2220 2217
+f 1725 1723 1726
+f 1725 1726 1733
+f 1732 1731 1734
+f 1732 1734 1739
+f 1730 1732 1739
+f 1730 1739 1735
+f 1740 1741 1742
+f 1740 1742 1748
+f 2224 1748 1743
+f 2224 2225 1748
+f 2226 1748 2225
+f 2227 2224 1743
+f 2228 2226 2227
+f 2228 2229 2226
+f 1740 2229 2230
+f 1736 2230 2231
+f 1736 1740 2230
+f 1740 1748 2226
+f 1740 2226 2229
+f 1743 1736 2231
+f 1743 2231 2228
+f 1743 2228 2227
+f 1736 1743 1746
+f 1738 1736 1746
+f 1738 1746 1745
+f 1737 1738 1745
+f 1756 1749 1750
+f 1747 1749 1756
+f 1754 1747 1756
+f 1744 1747 1754
+f 2213 2232 1760
+f 2213 1760 1762
+f 1752 2232 2213
+f 1753 1752 2213
+f 2232 2233 1761
+f 2232 1761 1760
+f 1751 2233 2232
+f 1752 1751 2232
+f 2234 1766 1761
+f 2234 2235 1766
+f 2236 2234 1761
+f 2237 2238 2239
+f 2240 2238 2236
+f 2240 2239 2238
+f 2241 2237 2239
+f 2233 2242 2240
+f 2233 2240 2236
+f 2243 2237 2241
+f 2244 2241 2242
+f 2244 2243 2241
+f 2244 2242 2233
+f 1757 2243 2245
+f 1751 2245 2246
+f 1751 2246 2244
+f 1751 2244 2233
+f 1751 1757 2245
+f 2237 1766 2235
+f 2237 2235 2238
+f 1757 2237 2243
+f 1761 2233 2236
+f 1758 1759 1766
+f 2237 1758 1766
+f 1755 1758 2237
+f 1757 1755 2237
+f 1765 1764 1767
+f 1765 1767 1772
+f 1763 1765 1772
+f 1763 1772 1768
+f 2247 1775 1781
+f 2248 2247 1781
+f 2249 1775 2247
+f 1774 1775 2249
+f 2250 2249 2251
+f 2250 1774 2249
+f 2252 2250 2251
+f 2253 1774 2250
+f 1773 2253 2254
+f 1773 1774 2253
+f 2255 2248 1781
+f 2255 1781 1776
+f 2256 2255 1776
+f 2257 2252 2251
+f 2257 2251 2256
+f 1773 2258 2259
+f 1769 2259 2257
+f 1769 1773 2259
+f 1776 1769 2257
+f 1776 2257 2256
+f 1773 2254 2258
+f 1771 1769 1776
+f 1771 1776 1779
+f 1770 1771 1779
+f 1770 1779 1778
+f 1780 1782 1783
+f 1780 1783 1789
+f 1777 1780 1789
+f 1777 1789 1787
+f 2260 1793 1795
+f 2210 2260 1795
+f 1785 2260 2210
+f 1786 1785 2210
+f 2260 2261 1794
+f 2260 1794 1793
+f 1785 1784 2261
+f 1785 2261 2260
+f 2262 2263 1799
+f 2262 1799 1794
+f 2264 2262 1794
+f 2265 2266 2267
+f 2265 2267 2264
+f 2261 2268 2269
+f 2261 2269 2265
+f 2261 2265 2264
+f 2270 2268 2261
+f 2271 2270 2261
+f 2272 2271 2261
+f 2273 2274 2275
+f 2273 2275 2272
+f 1790 2276 2277
+f 1784 2277 2273
+f 1784 2273 2272
+f 1784 2272 2261
+f 1784 1790 2277
+f 1794 2261 2264
+f 2278 1791 1799
+f 2263 2278 1799
+f 2279 1791 2278
+f 2280 2279 2267
+f 2266 2280 2267
+f 1792 1791 2279
+f 1792 2279 2280
+f 2281 1792 2280
+f 2282 2281 2268
+f 2282 1792 2281
+f 2270 2282 2268
+f 2283 1792 2282
+f 1788 1792 2283
+f 2284 2283 2275
+f 2284 1788 2283
+f 2274 2284 2275
+f 2285 1788 2284
+f 1790 2285 2276
+f 1790 1788 2285
+f 1805 1797 1800
+f 1798 1797 1805
+f 1801 1798 1805
+f 1796 1798 1801
+f 1806 1807 1808
+f 1806 1808 1815
+f 2286 1815 1810
+f 2286 2287 1815
+f 2288 2286 1810
+f 2289 2290 2288
+f 2289 2291 2290
+f 1806 2292 2293
+f 1802 2293 2289
+f 1802 1806 2293
+f 1806 1815 2291
+f 2291 1815 2287
+f 2291 2287 2290
+f 1806 2291 2292
+f 1810 1802 2288
+f 2288 1802 2289
+f 1804 1802 1810
+f 1804 1810 1809
+f 1804 1809 1811
+f 1803 1804 1811
+f 1821 1813 1816
+f 1814 1813 1821
+f 1817 1814 1821
+f 1812 1814 1817
+f 1822 1823 1824
+f 1822 1824 1830
+f 2294 1830 1825
+f 2294 2295 1830
+f 2296 1830 2295
+f 2297 2294 1825
+f 2298 2296 2297
+f 2298 2299 2296
+f 2300 2301 2302
+f 2300 2303 2301
+f 1822 2303 2304
+f 1822 2304 2305
+f 1818 2305 2300
+f 1818 2300 2302
+f 1818 1822 2305
+f 1822 1830 2303
+f 2303 1830 2299
+f 2299 1830 2296
+f 2303 2299 2301
+f 1825 1818 2297
+f 2297 1818 2298
+f 2298 1818 2302
+f 1820 1818 1825
+f 1820 1825 1828
+f 1820 1828 1827
+f 1819 1820 1827
+f 1838 1831 1832
+f 1829 1831 1838
+f 1836 1829 1838
+f 1826 1829 1836
+f 1834 1844 1843
+f 1835 1834 1843
+f 1834 1833 1841
+f 1834 1841 1844
+f 2306 1846 1841
+f 2307 2306 1841
+f 2308 2309 2310
+f 2308 2311 2309
+f 1839 2311 2312
+f 1833 2312 2313
+f 1833 2313 2308
+f 1833 1839 2312
+f 1839 1846 2311
+f 2311 1846 2309
+f 2309 1846 2306
+f 1841 1833 2310
+f 2310 1833 2308
+f 1841 2310 2307
+f 1837 1840 1846
+f 1839 1837 1846
+f 1854 1847 1848
+f 1845 1847 1854
+f 1852 1845 1854
+f 1842 1845 1852
+f 1850 1857 1859
+f 1851 1850 1859
+f 1850 1849 1858
+f 1850 1858 1857
+f 2314 1864 1858
+f 2315 2314 1858
+f 2316 1864 2314
+f 2317 2315 1858
+f 2318 2316 2317
+f 2318 2319 2316
+f 1855 2319 2320
+f 1849 2321 2318
+f 1849 2320 2321
+f 1849 1855 2320
+f 1855 1864 2319
+f 2319 1864 2316
+f 1858 1849 2317
+f 2317 1849 2318
+f 1853 1856 1864
+f 1855 1853 1864
+f 1861 1866 1868
+f 1860 1861 1868
+f 1863 1862 1865
+f 1863 1865 1871
+f 1861 1863 1871
+f 1861 1871 1866
+f 1873 1874 1882
+f 1872 1873 1882
+f 2322 1882 1876
+f 2322 2323 1882
+f 2324 2322 1876
+f 2325 2326 2324
+f 2325 2327 2326
+f 1872 2327 2328
+f 1867 2329 2325
+f 1867 2328 2329
+f 1867 1872 2328
+f 1872 1882 2323
+f 1872 2323 2326
+f 1872 2326 2327
+f 1876 1867 2324
+f 2324 1867 2325
+f 1870 1867 1876
+f 1870 1876 1875
+f 1869 1870 1875
+f 1869 1875 1877
+f 1868 1869 1877
+f 1868 1877 1878
+f 1879 1884 1886
+f 1878 1879 1886
+f 1881 1880 1883
+f 1881 1883 1889
+f 1879 1881 1889
+f 1879 1889 1884
+f 1891 1892 1899
+f 1890 1891 1899
+f 2330 1899 1893
+f 2330 2331 1899
+f 2332 2330 1893
+f 2333 2334 2332
+f 2333 2335 2334
+f 2336 2337 2338
+f 2336 2339 2337
+f 1890 2339 2340
+f 1885 2340 2341
+f 1885 2341 2336
+f 1885 1890 2340
+f 1890 1899 2331
+f 1890 2331 2334
+f 1890 2334 2335
+f 1890 2335 2337
+f 1890 2337 2339
+f 1893 1885 2336
+f 1893 2336 2338
+f 1893 2338 2333
+f 1893 2333 2332
+f 1888 1885 1893
+f 1888 1893 1897
+f 1887 1888 1897
+f 1887 1897 1896
+f 1886 1887 1896
+f 1886 1896 1895
+f 1898 1900 1901
+f 1898 1901 1908
+f 1894 1906 1905
+f 1895 1894 1905
+f 1894 1898 1908
+f 1894 1908 1906
+f 1905 1904 1914
+f 1905 1914 1913
+f 1904 1903 1915
+f 1904 1915 1914
+f 1903 1902 1911
+f 1903 1911 1915
+f 2342 1917 1911
+f 2342 2343 1917
+f 2344 2342 1911
+f 2345 2346 2344
+f 2345 2347 2346
+f 1909 2347 2348
+f 1909 2348 2349
+f 1902 2349 2345
+f 1902 1909 2349
+f 1909 1917 2343
+f 1909 2343 2346
+f 1909 2346 2347
+f 1911 1902 2345
+f 1911 2345 2344
+f 1907 1910 1917
+f 1909 1907 1917
+f 1916 1918 1919
+f 1916 1919 1926
+f 1912 1924 1923
+f 1913 1912 1923
+f 1912 1916 1926
+f 1912 1926 1924
+f 2350 2351 1932
+f 2350 1932 1933
+f 1923 1922 2351
+f 1923 2351 2350
+f 2351 2352 1930
+f 2351 1930 1932
+f 1922 1921 2352
+f 1922 2352 2351
+f 2352 2353 1931
+f 2352 1931 1930
+f 1921 1920 2353
+f 1921 2353 2352
+f 2354 2355 1937
+f 2354 1937 1931
+f 2356 2354 1931
+f 2357 2358 2359
+f 2357 2359 2356
+f 2357 2356 1931
+f 2353 2360 2361
+f 2353 2361 2357
+f 2362 2360 2353
+f 2363 2362 2353
+f 2364 2363 2353
+f 2365 2366 2364
+f 2365 2367 2366
+f 1927 2367 2368
+f 1927 2368 2369
+f 1920 2369 2365
+f 1920 2365 2364
+f 1920 2364 2353
+f 1920 1927 2369
+f 1931 2353 2357
+f 1927 2370 2367
+f 2367 2370 2366
+f 2371 1929 1937
+f 2355 2371 1937
+f 2372 1929 2371
+f 2373 1929 2372
+f 2358 2372 2359
+f 2358 2373 2372
+f 1928 1929 2373
+f 2374 1928 2373
+f 2375 1928 2374
+f 2362 2374 2360
+f 2362 2375 2374
+f 2376 1928 2375
+f 1925 1928 2376
+f 1927 2376 2370
+f 1927 1925 2376
+f 1933 1934 1939
+f 1933 1939 1941
+f 1944 1935 1938
+f 1936 1935 1944
+f 1939 1936 1944
+f 1934 1936 1939
+f 2377 1946 1947
+f 2377 1947 1954
+f 2378 2377 1954
+f 2379 1946 2377
+f 1945 2379 2380
+f 1945 1946 2379
+f 2381 1954 1948
+f 2381 2382 1954
+f 2383 2381 1948
+f 2384 2385 2383
+f 2384 2378 2385
+f 1945 2386 2387
+f 1940 2387 2384
+f 1940 1945 2387
+f 2378 1954 2382
+f 2378 2382 2385
+f 1948 1940 2383
+f 2383 1940 2384
+f 1945 2380 2386
+f 1943 1940 1948
+f 1943 1948 1952
+f 1943 1952 1951
+f 1942 1943 1951
+f 1942 1951 1950
+f 1941 1942 1950
+f 1963 1955 1956
+f 1953 1955 1963
+f 1950 1949 1961
+f 1950 1961 1960
+f 1961 1953 1963
+f 1949 1953 1961
+f 2388 2389 1969
+f 2388 1969 1970
+f 1959 2389 2388
+f 1960 1959 2388
+f 2389 2390 1967
+f 2389 1967 1969
+f 1958 2390 2389
+f 1959 1958 2389
+f 2390 2391 1968
+f 2390 1968 1967
+f 1958 1957 2391
+f 1958 2391 2390
+f 2392 1974 1968
+f 2392 2393 1974
+f 2394 2392 1968
+f 2395 2396 2397
+f 2398 2397 2394
+f 2398 2395 2397
+f 2399 2396 2395
+f 2391 2398 2394
+f 2400 2398 2391
+f 2401 2396 2399
+f 2402 2399 2400
+f 2402 2401 2399
+f 2402 2400 2391
+f 1964 2401 2403
+f 1964 2403 2404
+f 1957 2404 2402
+f 1957 2402 2391
+f 1957 1964 2404
+f 2396 1974 2393
+f 2396 2393 2397
+f 1964 2396 2401
+f 1968 2391 2394
+f 1965 1966 1974
+f 2396 1965 1974
+f 1962 1965 2396
+f 1964 1962 2396
+f 1971 1976 1978
+f 1970 1971 1978
+f 1973 1972 1975
+f 1973 1975 1981
+f 1971 1973 1981
+f 1971 1981 1976
+f 1983 1984 1991
+f 1982 1983 1991
+f 2405 1991 1985
+f 2406 2405 1985
+f 2407 1991 2405
+f 2408 2406 1985
+f 2409 2407 2408
+f 2409 2410 2407
+f 1982 2410 2411
+f 1977 2412 2409
+f 1977 2411 2412
+f 1977 1982 2411
+f 1982 1991 2410
+f 2410 1991 2407
+f 1985 1977 2408
+f 2408 1977 2409
+f 1977 1985 1989
+f 1980 1977 1989
+f 1979 1980 1989
+f 1979 1989 1988
+f 1978 1979 1988
+f 1978 1988 1987
+f 2000 1992 1993
+f 1990 1992 2000
+f 1987 1986 1998
+f 1987 1998 1997
+f 1998 1990 2000
+f 1986 1990 1998
+f 1996 2012 2011
+f 1997 1996 2011
+f 1995 2013 2012
+f 1996 1995 2012
+f 1995 1994 2014
+f 1995 2014 2013
+f 2413 2002 2014
+f 2414 2413 2014
+f 2001 2413 2415
+f 1994 2415 2416
+f 1994 2001 2415
+f 2001 2002 2413
+f 2014 1994 2416
+f 2014 2416 2414
+f 2001 1999 1449
+f 2001 1449 2002
+f 1997 2011 2417
+f 1987 1997 2417
+f 2418 1970 1978
+f 2418 1978 1987
+f 2418 1987 2417
+f 2419 2388 1970
+f 2419 1970 2418
+f 1960 2388 2419
+f 2420 1950 1960
+f 2420 1960 2419
+f 1941 1950 2420
+f 2421 1941 2420
+f 2421 1933 1941
+f 2350 1933 2421
+f 2422 2350 2421
+f 1923 2350 2422
+f 2423 1923 2422
+f 2423 1913 1923
+f 1905 1913 2423
+f 1895 1905 2423
+f 2424 1895 2423
+f 1886 1895 2424
+f 1878 1886 2424
+f 2425 1860 1868
+f 2425 1878 2424
+f 2425 1868 1878
+f 2426 1860 2425
+f 2208 1860 2426
+f 2427 2208 2426
+f 2209 2208 2427
+f 2428 2209 2427
+f 2211 2209 2428
+f 2429 2211 2428
+f 2212 2211 2429
+f 2430 2212 2429
+f 2214 2212 2430
+f 2431 2214 2430
+f 2215 2214 2431
+f 2432 2215 2431
+f 1721 2215 2432
+f 2433 1702 1711
+f 2433 1711 1721
+f 2433 1721 2432
+f 1694 1702 2433
+f 2434 2183 1694
+f 2434 1694 2433
+f 1684 2183 2434
+f 2435 1674 1684
+f 2435 1684 2434
+f 1665 1674 2435
+f 2436 1657 1665
+f 2436 1665 2435
+f 2145 1657 2436
+f 2437 2145 2436
+f 1647 2145 2437
+f 2438 1637 1647
+f 2438 1647 2437
+f 1629 1637 2438
+f 2439 1619 1629
+f 2439 1629 2438
+f 1610 1619 2439
+f 2440 1610 2439
+f 2440 1602 1610
+f 1592 1602 2440
+f 1584 1592 2440
+f 2441 1584 2440
+f 2003 1584 2441
+f 2442 2003 2441
+f 2443 2004 2003
+f 2443 2003 2442
+f 2444 2005 2004
+f 2444 2004 2443
+f 2445 2007 2005
+f 2445 2005 2444
+f 2446 2008 2007
+f 2446 2007 2445
+f 2447 2010 2008
+f 2447 2008 2446
+f 2448 2010 2447
+f 2011 2010 2448
+f 2417 2011 2448
+f 2015 2016 2449
+f 2449 2016 2450
+f 2016 2451 2450
+f 2016 2018 2451
+f 2018 2017 2451
+f 2451 2017 2452
+f 2017 2015 2452
+f 2452 2015 2449
+f 2020 2019 2453
+f 2453 2019 2454
+f 2019 2022 2454
+f 2454 2022 2455
+f 2022 2021 2455
+f 2455 2021 2456
+f 2021 2020 2456
+f 2456 2020 2453
+f 2024 2023 2457
+f 2457 2023 2458
+f 2023 2026 2458
+f 2458 2026 2459
+f 2026 2025 2459
+f 2459 2025 2460
+f 2025 2024 2460
+f 2460 2024 2457
+f 2030 2029 2461
+f 2461 2029 2462
+f 2029 2031 2462
+f 2462 2031 2463
+f 2031 2033 2463
+f 2463 2033 2464
+f 2033 2030 2464
+f 2464 2030 2461
+f 2034 2035 2465
+f 2465 2035 2466
+f 2035 2037 2466
+f 2466 2037 2467
+f 2037 2036 2467
+f 2467 2036 2468
+f 2036 2034 2468
+f 2468 2034 2465
+f 2038 2039 2469
+f 2469 2039 2470
+f 2039 2041 2470
+f 2470 2041 2471
+f 2041 2040 2471
+f 2471 2040 2472
+f 2040 2038 2472
+f 2472 2038 2469
+f 2053 2049 2473
+f 2473 2049 2474
+f 2048 2475 2049
+f 2049 2475 2474
+f 2475 2048 2045
+f 2474 2475 2047
+f 2475 2045 2047
+f 2047 2476 2474
+f 2047 2052 2476
+f 2051 2046 2477
+f 2477 2046 2478
+f 2044 2479 2046
+f 2046 2479 2478
+f 2479 2044 2480
+f 2480 2044 2042
+f 2480 2043 2481
+f 2480 2042 2043
+f 2043 2482 2481
+f 2043 2050 2482
+f 2050 2051 2482
+f 2482 2051 2477
+f 2052 2054 2476
+f 2476 2054 2483
+f 2054 2053 2483
+f 2483 2053 2473
+f 2484 2058 2485
+f 2484 2073 2058
+f 2058 2486 2485
+f 2058 2057 2486
+f 2057 2487 2486
+f 2057 2059 2487
+f 2059 2062 2487
+f 2487 2062 2488
+f 2074 2489 2062
+f 2062 2489 2488
+f 2490 2061 2491
+f 2490 2075 2061
+f 2061 2492 2491
+f 2061 2060 2492
+f 2060 2493 2492
+f 2060 2064 2493
+f 2064 2063 2493
+f 2493 2063 2494
+f 2076 2495 2063
+f 2063 2495 2494
+f 2496 2065 2497
+f 2496 2077 2065
+f 2065 2498 2497
+f 2065 2066 2498
+f 2066 2067 2498
+f 2498 2067 2499
+f 2067 2070 2499
+f 2499 2070 2500
+f 2078 2501 2070
+f 2070 2501 2500
+f 2502 2069 2503
+f 2502 2079 2069
+f 2069 2504 2503
+f 2069 2068 2504
+f 2068 2072 2504
+f 2504 2072 2505
+f 2072 2071 2505
+f 2505 2071 2506
+f 2080 2507 2071
+f 2071 2507 2506
+f 2507 2080 2502
+f 2502 2080 2079
+f 2501 2078 2496
+f 2496 2078 2077
+f 2495 2076 2490
+f 2490 2076 2075
+f 2489 2074 2484
+f 2484 2074 2073
+f 2082 2081 2508
+f 2508 2081 2509
+f 2081 2083 2509
+f 2509 2083 2510
+f 2083 2085 2510
+f 2510 2085 2511
+f 2085 2082 2511
+f 2511 2082 2508
+f 2086 2084 2512
+f 2512 2084 2513
+f 2084 2514 2513
+f 2084 2088 2514
+f 2088 2087 2514
+f 2514 2087 2515
+f 2087 2086 2515
+f 2515 2086 2512
+f 2090 2089 2516
+f 2516 2089 2517
+f 2089 2092 2517
+f 2517 2092 2518
+f 2092 2091 2518
+f 2518 2091 2519
+f 2091 2090 2519
+f 2519 2090 2516
+f 2098 2095 2520
+f 2520 2095 2521
+f 2095 2100 2521
+f 2521 2100 2522
+f 2100 2099 2522
+f 2522 2099 2523
+f 2099 2098 2523
+f 2523 2098 2520
+f 2094 2093 2524
+f 2524 2093 2525
+f 2093 2526 2525
+f 2093 2097 2526
+f 2097 2096 2526
+f 2526 2096 2527
+f 2096 2094 2527
+f 2527 2094 2524
+f 2101 2102 2528
+f 2528 2102 2529
+f 2102 2105 2529
+f 2529 2105 2530
+f 2105 2104 2530
+f 2530 2104 2531
+f 2104 2101 2531
+f 2531 2101 2528
+f 2106 2103 2532
+f 2532 2103 2533
+f 2103 2108 2533
+f 2533 2108 2534
+f 2108 2107 2534
+f 2534 2107 2535
+f 2107 2532 2535
+f 2107 2106 2532
+f 2109 2110 2536
+f 2536 2110 2537
+f 2110 2112 2537
+f 2537 2112 2538
+f 2112 2111 2538
+f 2538 2111 2539
+f 2111 2536 2539
+f 2111 2109 2536
+f 2114 2113 2540
+f 2540 2113 2541
+f 2113 2542 2541
+f 2113 2116 2542
+f 2116 2115 2542
+f 2542 2115 2543
+f 2115 2114 2543
+f 2543 2114 2540
+f 2118 2117 2544
+f 2544 2117 2545
+f 2117 2119 2545
+f 2545 2119 2546
+f 2119 2121 2546
+f 2546 2121 2547
+f 2121 2118 2547
+f 2547 2118 2544
+f 2122 2120 2548
+f 2548 2120 2549
+f 2120 2124 2549
+f 2549 2124 2550
+f 2124 2123 2550
+f 2550 2123 2551
+f 2123 2122 2551
+f 2551 2122 2548
+f 2126 2125 2552
+f 2552 2125 2553
+f 2125 2127 2553
+f 2553 2127 2554
+f 2127 2129 2554
+f 2554 2129 2555
+f 2129 2552 2555
+f 2129 2126 2552
+f 2130 2128 2556
+f 2556 2128 2557
+f 2128 2133 2557
+f 2557 2133 2558
+f 2133 2132 2558
+f 2558 2132 2559
+f 2132 2130 2559
+f 2559 2130 2556
+f 2134 2131 2560
+f 2560 2131 2561
+f 2131 2136 2561
+f 2561 2136 2562
+f 2136 2135 2562
+f 2562 2135 2563
+f 2135 2134 2563
+f 2563 2134 2560
+f 2138 2137 2564
+f 2564 2137 2565
+f 2137 2566 2565
+f 2137 2139 2566
+f 2139 2141 2566
+f 2566 2141 2567
+f 2141 2138 2567
+f 2567 2138 2564
+f 2142 2140 2568
+f 2568 2140 2569
+f 2140 2144 2569
+f 2569 2144 2570
+f 2144 2143 2570
+f 2570 2143 2571
+f 2143 2142 2571
+f 2571 2142 2568
+f 2572 2150 2573
+f 2572 2166 2150
+f 2150 2574 2573
+f 2150 2149 2574
+f 2149 2151 2574
+f 2574 2151 2575
+f 2151 2154 2575
+f 2575 2154 2576
+f 2167 2577 2154
+f 2154 2577 2576
+f 2578 2153 2579
+f 2578 2168 2153
+f 2153 2580 2579
+f 2153 2152 2580
+f 2152 2581 2580
+f 2152 2156 2581
+f 2156 2155 2581
+f 2581 2155 2582
+f 2169 2583 2155
+f 2155 2583 2582
+f 2584 2157 2585
+f 2584 2170 2157
+f 2157 2586 2585
+f 2157 2158 2586
+f 2158 2159 2586
+f 2586 2159 2587
+f 2159 2161 2587
+f 2587 2161 2588
+f 2161 2165 2588
+f 2165 2585 2588
+f 2171 2584 2165
+f 2165 2584 2585
+f 2163 2589 2590
+f 2163 2162 2589
+f 2162 2160 2589
+f 2589 2160 2591
+f 2160 2164 2591
+f 2591 2164 2592
+f 2164 2163 2592
+f 2592 2163 2590
+f 2584 2171 2170
+f 2583 2169 2578
+f 2578 2169 2168
+f 2577 2167 2572
+f 2572 2167 2166
+f 2181 2175 2593
+f 2593 2175 2594
+f 2174 2595 2175
+f 2175 2595 2594
+f 2595 2174 2172
+f 2595 2172 2173
+f 2173 2596 2594
+f 2173 2179 2596
+f 2594 2595 2173
+f 2179 2182 2596
+f 2596 2182 2597
+f 2182 2181 2597
+f 2597 2181 2593
+f 2177 2176 2598
+f 2598 2176 2599
+f 2176 2178 2599
+f 2599 2178 2600
+f 2178 2180 2600
+f 2600 2180 2601
+f 2180 2177 2601
+f 2601 2177 2598
+f 2190 2193 2602
+f 2602 2193 2603
+f 2193 2604 2603
+f 2193 2195 2604
+f 2195 2194 2604
+f 2604 2194 2605
+f 2194 2190 2605
+f 2605 2190 2602
+f 2188 2187 2606
+f 2606 2187 2607
+f 2187 2189 2607
+f 2607 2189 2608
+f 2189 2609 2608
+f 2189 2192 2609
+f 2192 2188 2609
+f 2609 2188 2606
+f 2196 2197 2610
+f 2610 2197 2611
+f 2197 2199 2611
+f 2611 2199 2612
+f 2199 2198 2612
+f 2612 2198 2613
+f 2198 2196 2613
+f 2613 2196 2610
+f 2200 2201 2614
+f 2614 2201 2615
+f 2201 2203 2615
+f 2615 2203 2616
+f 2203 2202 2616
+f 2616 2202 2617
+f 2202 2614 2617
+f 2202 2200 2614
+f 2205 2204 2618
+f 2618 2204 2619
+f 2204 2207 2619
+f 2619 2207 2620
+f 2207 2206 2620
+f 2620 2206 2621
+f 2206 2618 2621
+f 2206 2205 2618
+f 2216 2217 2622
+f 2622 2217 2623
+f 2217 2220 2623
+f 2623 2220 2624
+f 2220 2219 2624
+f 2624 2219 2625
+f 2219 2622 2625
+f 2219 2216 2622
+f 2221 2218 2626
+f 2626 2218 2627
+f 2218 2628 2627
+f 2218 2223 2628
+f 2223 2222 2628
+f 2628 2222 2629
+f 2222 2221 2629
+f 2629 2221 2626
+f 2225 2224 2630
+f 2630 2224 2631
+f 2224 2632 2631
+f 2224 2227 2632
+f 2227 2226 2632
+f 2632 2226 2633
+f 2226 2225 2633
+f 2633 2225 2630
+f 2229 2228 2634
+f 2634 2228 2635
+f 2228 2636 2635
+f 2228 2231 2636
+f 2231 2230 2636
+f 2636 2230 2637
+f 2230 2229 2637
+f 2637 2229 2634
+f 2235 2234 2638
+f 2638 2234 2639
+f 2234 2236 2639
+f 2639 2236 2640
+f 2236 2238 2640
+f 2640 2238 2641
+f 2238 2235 2641
+f 2641 2235 2638
+f 2239 2240 2642
+f 2642 2240 2643
+f 2240 2242 2643
+f 2643 2242 2644
+f 2242 2241 2644
+f 2644 2241 2645
+f 2241 2239 2645
+f 2645 2239 2642
+f 2243 2244 2646
+f 2646 2244 2647
+f 2244 2246 2647
+f 2647 2246 2648
+f 2246 2245 2648
+f 2648 2245 2649
+f 2245 2243 2649
+f 2649 2243 2646
+f 2258 2254 2650
+f 2650 2254 2651
+f 2253 2652 2254
+f 2254 2652 2651
+f 2652 2253 2250
+f 2651 2652 2252
+f 2652 2250 2252
+f 2252 2653 2651
+f 2252 2257 2653
+f 2256 2251 2654
+f 2654 2251 2655
+f 2249 2656 2251
+f 2251 2656 2655
+f 2656 2249 2657
+f 2657 2249 2247
+f 2657 2248 2658
+f 2657 2247 2248
+f 2248 2659 2658
+f 2248 2255 2659
+f 2255 2256 2659
+f 2659 2256 2654
+f 2257 2259 2653
+f 2653 2259 2660
+f 2259 2258 2660
+f 2660 2258 2650
+f 2661 2263 2662
+f 2661 2278 2263
+f 2263 2663 2662
+f 2263 2262 2663
+f 2262 2264 2663
+f 2663 2264 2664
+f 2264 2267 2664
+f 2664 2267 2665
+f 2279 2666 2267
+f 2267 2666 2665
+f 2667 2266 2668
+f 2667 2280 2266
+f 2266 2669 2668
+f 2266 2265 2669
+f 2265 2269 2669
+f 2669 2269 2670
+f 2269 2268 2670
+f 2670 2268 2671
+f 2281 2672 2268
+f 2268 2672 2671
+f 2673 2270 2674
+f 2673 2282 2270
+f 2270 2675 2674
+f 2270 2271 2675
+f 2271 2272 2675
+f 2675 2272 2676
+f 2272 2275 2676
+f 2676 2275 2677
+f 2283 2678 2275
+f 2275 2678 2677
+f 2679 2274 2680
+f 2679 2284 2274
+f 2274 2681 2680
+f 2274 2273 2681
+f 2273 2277 2681
+f 2681 2277 2682
+f 2277 2276 2682
+f 2682 2276 2683
+f 2285 2684 2276
+f 2276 2684 2683
+f 2684 2285 2679
+f 2679 2285 2284
+f 2678 2283 2673
+f 2673 2283 2282
+f 2672 2281 2667
+f 2667 2281 2280
+f 2666 2279 2661
+f 2661 2279 2278
+f 2287 2286 2685
+f 2685 2286 2686
+f 2286 2288 2686
+f 2686 2288 2687
+f 2288 2290 2687
+f 2687 2290 2688
+f 2290 2287 2688
+f 2688 2287 2685
+f 2291 2289 2689
+f 2689 2289 2690
+f 2289 2691 2690
+f 2289 2293 2691
+f 2293 2292 2691
+f 2691 2292 2692
+f 2292 2291 2692
+f 2692 2291 2689
+f 2295 2294 2693
+f 2693 2294 2694
+f 2294 2297 2694
+f 2694 2297 2695
+f 2297 2296 2695
+f 2695 2296 2696
+f 2296 2693 2696
+f 2296 2295 2693
+f 2303 2300 2697
+f 2697 2300 2698
+f 2300 2305 2698
+f 2698 2305 2699
+f 2305 2304 2699
+f 2699 2304 2700
+f 2304 2303 2700
+f 2700 2303 2697
+f 2299 2298 2701
+f 2701 2298 2702
+f 2298 2703 2702
+f 2298 2302 2703
+f 2302 2301 2703
+f 2703 2301 2704
+f 2301 2299 2704
+f 2704 2299 2701
+f 2306 2307 2705
+f 2705 2307 2706
+f 2307 2310 2706
+f 2706 2310 2707
+f 2310 2309 2707
+f 2707 2309 2708
+f 2309 2705 2708
+f 2309 2306 2705
+f 2311 2308 2709
+f 2709 2308 2710
+f 2308 2711 2710
+f 2308 2313 2711
+f 2313 2312 2711
+f 2711 2312 2712
+f 2312 2311 2712
+f 2712 2311 2709
+f 2314 2315 2713
+f 2713 2315 2714
+f 2315 2715 2714
+f 2315 2317 2715
+f 2317 2316 2715
+f 2715 2316 2716
+f 2316 2314 2716
+f 2716 2314 2713
+f 2319 2318 2717
+f 2717 2318 2718
+f 2318 2719 2718
+f 2318 2321 2719
+f 2321 2320 2719
+f 2719 2320 2720
+f 2320 2319 2720
+f 2720 2319 2717
+f 2323 2322 2721
+f 2721 2322 2722
+f 2322 2324 2722
+f 2722 2324 2723
+f 2324 2326 2723
+f 2723 2326 2724
+f 2326 2323 2724
+f 2724 2323 2721
+f 2327 2325 2725
+f 2725 2325 2726
+f 2325 2329 2726
+f 2726 2329 2727
+f 2329 2328 2727
+f 2727 2328 2728
+f 2328 2725 2728
+f 2328 2327 2725
+f 2331 2330 2729
+f 2729 2330 2730
+f 2330 2731 2730
+f 2330 2332 2731
+f 2332 2334 2731
+f 2731 2334 2732
+f 2334 2331 2732
+f 2732 2331 2729
+f 2335 2333 2733
+f 2733 2333 2734
+f 2333 2338 2734
+f 2734 2338 2735
+f 2338 2337 2735
+f 2735 2337 2736
+f 2337 2335 2736
+f 2736 2335 2733
+f 2339 2336 2737
+f 2737 2336 2738
+f 2336 2341 2738
+f 2738 2341 2739
+f 2341 2340 2739
+f 2739 2340 2740
+f 2340 2339 2740
+f 2740 2339 2737
+f 2343 2342 2741
+f 2741 2342 2742
+f 2342 2344 2742
+f 2742 2344 2743
+f 2344 2346 2743
+f 2743 2346 2744
+f 2346 2741 2744
+f 2346 2343 2741
+f 2347 2345 2745
+f 2745 2345 2746
+f 2345 2349 2746
+f 2746 2349 2747
+f 2349 2348 2747
+f 2747 2348 2748
+f 2348 2745 2748
+f 2348 2347 2745
+f 2749 2355 2750
+f 2749 2371 2355
+f 2355 2751 2750
+f 2355 2354 2751
+f 2354 2356 2751
+f 2751 2356 2752
+f 2356 2359 2752
+f 2752 2359 2753
+f 2372 2754 2359
+f 2359 2754 2753
+f 2755 2358 2756
+f 2755 2373 2358
+f 2358 2757 2756
+f 2358 2357 2757
+f 2357 2361 2757
+f 2757 2361 2758
+f 2361 2360 2758
+f 2758 2360 2759
+f 2374 2760 2360
+f 2360 2760 2759
+f 2761 2362 2762
+f 2761 2375 2362
+f 2362 2763 2762
+f 2362 2363 2763
+f 2363 2364 2763
+f 2763 2364 2764
+f 2364 2366 2764
+f 2764 2366 2765
+f 2366 2370 2765
+f 2370 2762 2765
+f 2376 2761 2370
+f 2370 2761 2762
+f 2368 2367 2766
+f 2766 2367 2767
+f 2367 2365 2767
+f 2767 2365 2768
+f 2365 2769 2768
+f 2365 2369 2769
+f 2369 2368 2769
+f 2769 2368 2766
+f 2761 2376 2375
+f 2760 2374 2755
+f 2755 2374 2373
+f 2754 2372 2749
+f 2749 2372 2371
+f 2386 2380 2770
+f 2770 2380 2771
+f 2379 2772 2380
+f 2380 2772 2771
+f 2772 2379 2377
+f 2772 2377 2378
+f 2378 2773 2771
+f 2378 2384 2773
+f 2771 2772 2378
+f 2384 2387 2773
+f 2773 2387 2774
+f 2387 2386 2774
+f 2774 2386 2770
+f 2382 2381 2775
+f 2775 2381 2776
+f 2381 2383 2776
+f 2776 2383 2777
+f 2383 2385 2777
+f 2777 2385 2778
+f 2385 2382 2778
+f 2778 2382 2775
+f 2395 2398 2779
+f 2779 2398 2780
+f 2398 2400 2780
+f 2780 2400 2781
+f 2400 2399 2781
+f 2781 2399 2782
+f 2399 2395 2782
+f 2782 2395 2779
+f 2393 2392 2783
+f 2783 2392 2784
+f 2392 2394 2784
+f 2784 2394 2785
+f 2394 2397 2785
+f 2785 2397 2786
+f 2397 2783 2786
+f 2397 2393 2783
+f 2401 2402 2787
+f 2787 2402 2788
+f 2402 2404 2788
+f 2788 2404 2789
+f 2404 2403 2789
+f 2789 2403 2790
+f 2403 2401 2790
+f 2790 2401 2787
+f 2405 2406 2791
+f 2791 2406 2792
+f 2406 2793 2792
+f 2406 2408 2793
+f 2408 2407 2793
+f 2793 2407 2794
+f 2407 2405 2794
+f 2794 2405 2791
+f 2410 2409 2795
+f 2795 2409 2796
+f 2409 2412 2796
+f 2796 2412 2797
+f 2412 2411 2797
+f 2797 2411 2798
+f 2411 2795 2798
+f 2411 2410 2795
+f 2413 2414 2799
+f 2799 2414 2800
+f 2414 2801 2800
+f 2414 2416 2801
+f 2416 2415 2801
+f 2801 2415 2802
+f 2415 2413 2802
+f 2802 2413 2799
+f 2418 2417 2803
+f 2804 2418 2803
+f 2419 2418 2804
+f 2805 2419 2804
+f 2420 2419 2805
+f 2806 2420 2805
+f 2421 2420 2806
+f 2807 2421 2806
+f 2422 2421 2807
+f 2808 2422 2807
+f 2423 2422 2808
+f 2809 2423 2808
+f 2424 2423 2809
+f 2810 2424 2809
+f 2425 2424 2810
+f 2811 2425 2810
+f 2426 2425 2811
+f 2812 2426 2811
+f 2427 2426 2812
+f 2813 2427 2812
+f 2428 2427 2813
+f 2814 2428 2813
+f 2815 2428 2814
+f 2429 2428 2815
+f 2816 2429 2815
+f 2430 2429 2816
+f 2817 2430 2816
+f 2431 2430 2817
+f 2818 2431 2817
+f 2432 2431 2818
+f 2819 2432 2818
+f 2433 2432 2819
+f 2820 2433 2819
+f 2434 2433 2820
+f 2821 2434 2820
+f 2435 2434 2821
+f 2822 2435 2821
+f 2436 2435 2822
+f 2823 2436 2822
+f 2437 2436 2823
+f 2824 2437 2823
+f 2438 2437 2824
+f 2825 2438 2824
+f 2439 2438 2825
+f 2826 2439 2825
+f 2440 2439 2826
+f 2827 2440 2826
+f 2441 2440 2827
+f 2828 2441 2827
+f 2442 2441 2828
+f 2443 2442 2828
+f 2829 2443 2828
+f 2444 2443 2829
+f 2830 2444 2829
+f 2445 2444 2830
+f 2831 2445 2830
+f 2446 2445 2831
+f 2832 2446 2831
+f 2447 2446 2832
+f 2833 2447 2832
+f 2448 2447 2833
+f 2803 2417 2448
+f 2803 2448 2833
+f 2834 2449 2835
+f 2836 2835 2449
+f 2450 2836 2449
+f 2452 2449 2834
+f 2837 2452 2834
+f 2838 2836 2450
+f 2451 2839 2838
+f 2451 2838 2450
+f 2451 2452 2837
+f 2451 2837 2839
+f 2840 2453 2841
+f 2842 2841 2453
+f 2454 2842 2453
+f 2456 2453 2840
+f 2843 2456 2840
+f 2844 2842 2454
+f 2455 2845 2844
+f 2455 2844 2454
+f 2455 2456 2843
+f 2455 2843 2845
+f 2846 2457 2847
+f 2848 2847 2457
+f 2458 2848 2457
+f 2460 2457 2846
+f 2849 2460 2846
+f 2850 2848 2458
+f 2459 2851 2850
+f 2459 2850 2458
+f 2459 2460 2849
+f 2459 2849 2851
+f 2852 2461 2853
+f 2854 2853 2461
+f 2462 2854 2461
+f 2464 2461 2852
+f 2855 2464 2852
+f 2856 2854 2462
+f 2463 2857 2856
+f 2463 2856 2462
+f 2463 2464 2855
+f 2463 2855 2857
+f 2858 2465 2859
+f 2860 2859 2465
+f 2466 2860 2465
+f 2468 2465 2858
+f 2861 2468 2858
+f 2862 2860 2466
+f 2467 2863 2862
+f 2467 2862 2466
+f 2467 2468 2861
+f 2467 2861 2863
+f 2864 2469 2865
+f 2866 2865 2469
+f 2470 2866 2469
+f 2472 2469 2864
+f 2867 2472 2864
+f 2868 2866 2470
+f 2471 2869 2868
+f 2471 2868 2470
+f 2471 2472 2867
+f 2471 2867 2869
+f 2870 2474 2871
+f 2872 2871 2474
+f 2476 2872 2474
+f 2473 2474 2870
+f 2873 2473 2870
+f 2874 2872 2476
+f 2483 2875 2874
+f 2483 2874 2476
+f 2483 2473 2873
+f 2483 2873 2875
+f 2479 2480 2478
+f 2478 2480 2481
+f 2876 2481 2877
+f 2878 2877 2481
+f 2482 2878 2481
+f 2478 2481 2876
+f 2879 2478 2876
+f 2880 2878 2482
+f 2477 2881 2880
+f 2477 2880 2482
+f 2477 2478 2879
+f 2477 2879 2881
+f 2882 2485 2883
+f 2884 2883 2485
+f 2486 2884 2485
+f 2488 2485 2882
+f 2885 2488 2882
+f 2886 2884 2486
+f 2487 2887 2886
+f 2487 2886 2486
+f 2487 2488 2885
+f 2487 2885 2887
+f 2489 2484 2488
+f 2488 2484 2485
+f 2888 2491 2889
+f 2890 2889 2491
+f 2492 2890 2491
+f 2494 2491 2888
+f 2891 2494 2888
+f 2892 2890 2492
+f 2493 2893 2892
+f 2493 2892 2492
+f 2493 2494 2891
+f 2493 2891 2893
+f 2495 2490 2494
+f 2494 2490 2491
+f 2894 2497 2895
+f 2896 2895 2497
+f 2498 2896 2497
+f 2500 2497 2894
+f 2897 2500 2894
+f 2898 2896 2498
+f 2499 2899 2898
+f 2499 2898 2498
+f 2499 2500 2897
+f 2499 2897 2899
+f 2501 2496 2500
+f 2500 2496 2497
+f 2900 2503 2901
+f 2902 2901 2503
+f 2504 2902 2503
+f 2506 2503 2900
+f 2903 2506 2900
+f 2904 2902 2504
+f 2505 2905 2904
+f 2505 2904 2504
+f 2505 2506 2903
+f 2505 2903 2905
+f 2507 2502 2506
+f 2506 2502 2503
+f 2906 2508 2907
+f 2908 2907 2508
+f 2509 2908 2508
+f 2511 2508 2906
+f 2909 2511 2906
+f 2910 2908 2509
+f 2510 2911 2910
+f 2510 2910 2509
+f 2510 2511 2909
+f 2510 2909 2911
+f 2912 2512 2913
+f 2914 2913 2512
+f 2513 2914 2512
+f 2515 2512 2912
+f 2915 2515 2912
+f 2916 2914 2513
+f 2514 2917 2916
+f 2514 2916 2513
+f 2514 2515 2915
+f 2514 2915 2917
+f 2918 2516 2919
+f 2920 2919 2516
+f 2517 2920 2516
+f 2519 2516 2918
+f 2921 2519 2918
+f 2922 2920 2517
+f 2518 2923 2922
+f 2518 2922 2517
+f 2518 2519 2921
+f 2518 2921 2923
+f 2924 2520 2925
+f 2926 2925 2520
+f 2521 2926 2520
+f 2523 2520 2924
+f 2927 2523 2924
+f 2928 2926 2521
+f 2522 2929 2928
+f 2522 2928 2521
+f 2522 2523 2927
+f 2522 2927 2929
+f 2930 2524 2931
+f 2932 2931 2524
+f 2525 2932 2524
+f 2527 2524 2930
+f 2933 2527 2930
+f 2934 2932 2525
+f 2526 2935 2934
+f 2526 2934 2525
+f 2526 2527 2933
+f 2526 2933 2935
+f 2936 2528 2937
+f 2938 2937 2528
+f 2529 2938 2528
+f 2531 2528 2936
+f 2939 2531 2936
+f 2940 2938 2529
+f 2530 2941 2940
+f 2530 2940 2529
+f 2530 2531 2939
+f 2530 2939 2941
+f 2942 2532 2943
+f 2944 2943 2532
+f 2533 2944 2532
+f 2535 2532 2942
+f 2945 2535 2942
+f 2946 2944 2533
+f 2534 2947 2946
+f 2534 2946 2533
+f 2534 2535 2945
+f 2534 2945 2947
+f 2948 2536 2949
+f 2950 2949 2536
+f 2537 2950 2536
+f 2539 2536 2948
+f 2951 2539 2948
+f 2952 2950 2537
+f 2538 2953 2952
+f 2538 2952 2537
+f 2538 2539 2951
+f 2538 2951 2953
+f 2954 2540 2955
+f 2956 2955 2540
+f 2541 2956 2540
+f 2543 2540 2954
+f 2957 2543 2954
+f 2958 2956 2541
+f 2542 2959 2958
+f 2542 2958 2541
+f 2542 2543 2957
+f 2542 2957 2959
+f 2960 2544 2961
+f 2962 2961 2544
+f 2545 2962 2544
+f 2547 2544 2960
+f 2963 2547 2960
+f 2964 2962 2545
+f 2546 2965 2964
+f 2546 2964 2545
+f 2546 2547 2963
+f 2546 2963 2965
+f 2966 2548 2967
+f 2968 2967 2548
+f 2549 2968 2548
+f 2551 2548 2966
+f 2969 2551 2966
+f 2970 2968 2549
+f 2550 2971 2970
+f 2550 2970 2549
+f 2550 2551 2969
+f 2550 2969 2971
+f 2972 2552 2973
+f 2974 2973 2552
+f 2553 2974 2552
+f 2555 2552 2972
+f 2975 2555 2972
+f 2976 2974 2553
+f 2554 2977 2976
+f 2554 2976 2553
+f 2554 2555 2975
+f 2554 2975 2977
+f 2978 2556 2979
+f 2980 2979 2556
+f 2557 2980 2556
+f 2559 2556 2978
+f 2981 2559 2978
+f 2982 2980 2557
+f 2558 2983 2982
+f 2558 2982 2557
+f 2558 2559 2981
+f 2558 2981 2983
+f 2984 2560 2985
+f 2986 2985 2560
+f 2561 2986 2560
+f 2563 2560 2984
+f 2987 2563 2984
+f 2988 2986 2561
+f 2562 2989 2988
+f 2562 2988 2561
+f 2562 2563 2987
+f 2562 2987 2989
+f 2990 2564 2991
+f 2992 2991 2564
+f 2565 2992 2564
+f 2567 2564 2990
+f 2993 2567 2990
+f 2994 2992 2565
+f 2566 2995 2994
+f 2566 2994 2565
+f 2566 2567 2993
+f 2566 2993 2995
+f 2996 2568 2997
+f 2998 2997 2568
+f 2569 2998 2568
+f 2571 2568 2996
+f 2999 2571 2996
+f 3000 2998 2569
+f 2570 3001 3000
+f 2570 3000 2569
+f 2570 2571 2999
+f 2570 2999 3001
+f 3002 2573 3003
+f 3004 3003 2573
+f 2574 3004 2573
+f 2576 2573 3002
+f 3005 2576 3002
+f 3006 3004 2574
+f 2575 3007 3006
+f 2575 3006 2574
+f 2575 2576 3005
+f 2575 3005 3007
+f 2577 2572 2576
+f 2576 2572 2573
+f 3008 2579 3009
+f 3010 3009 2579
+f 2580 3010 2579
+f 2582 2579 3008
+f 3011 2582 3008
+f 3012 3010 2580
+f 2581 3013 3012
+f 2581 3012 2580
+f 2581 2582 3011
+f 2581 3011 3013
+f 2583 2578 2582
+f 2582 2578 2579
+f 3014 2585 3015
+f 3016 3015 2585
+f 2586 3016 2585
+f 2588 2585 3014
+f 3017 2588 3014
+f 3018 3016 2586
+f 2587 3019 3018
+f 2587 3018 2586
+f 2587 2588 3017
+f 2587 3017 3019
+f 3020 2589 3021
+f 3022 3021 2589
+f 2591 3022 2589
+f 2590 2589 3020
+f 3023 2590 3020
+f 3024 3022 2591
+f 2592 3025 3024
+f 2592 3024 2591
+f 2592 2590 3023
+f 2592 3023 3025
+f 3026 2594 3027
+f 3028 3027 2594
+f 2596 3028 2594
+f 2593 2594 3026
+f 3029 2593 3026
+f 3030 3028 2596
+f 2597 3031 3030
+f 2597 3030 2596
+f 2597 2593 3029
+f 2597 3029 3031
+f 3032 2598 3033
+f 3034 3033 2598
+f 2599 3034 2598
+f 2601 2598 3032
+f 3035 2601 3032
+f 3036 3034 2599
+f 2600 3037 3036
+f 2600 3036 2599
+f 2600 2601 3035
+f 2600 3035 3037
+f 3038 2602 3039
+f 3040 3039 2602
+f 2603 3040 2602
+f 2605 2602 3038
+f 3041 2605 3038
+f 3042 3040 2603
+f 2604 3043 3042
+f 2604 3042 2603
+f 2604 2605 3041
+f 2604 3041 3043
+f 3044 2606 3045
+f 3046 3045 2606
+f 2607 3046 2606
+f 2609 2606 3044
+f 3047 2609 3044
+f 3048 3046 2607
+f 2608 3049 3048
+f 2608 3048 2607
+f 2608 2609 3047
+f 2608 3047 3049
+f 3050 2610 3051
+f 3052 3051 2610
+f 2611 3052 2610
+f 2613 2610 3050
+f 3053 2613 3050
+f 3054 3052 2611
+f 2612 3055 3054
+f 2612 3054 2611
+f 2612 2613 3053
+f 2612 3053 3055
+f 3056 2614 3057
+f 3058 3057 2614
+f 2615 3058 2614
+f 2617 2614 3056
+f 3059 2617 3056
+f 3060 3058 2615
+f 2616 3061 3060
+f 2616 3060 2615
+f 2616 2617 3059
+f 2616 3059 3061
+f 3062 2618 3063
+f 3064 3063 2618
+f 2619 3064 2618
+f 2621 2618 3062
+f 3065 2621 3062
+f 3066 3064 2619
+f 2620 3067 3066
+f 2620 3066 2619
+f 2620 2621 3065
+f 2620 3065 3067
+f 3068 2622 3069
+f 3070 3069 2622
+f 2623 3070 2622
+f 2625 2622 3068
+f 3071 2625 3068
+f 3072 3070 2623
+f 2624 3073 3072
+f 2624 3072 2623
+f 2624 2625 3071
+f 2624 3071 3073
+f 3074 2626 3075
+f 3076 3075 2626
+f 2627 3076 2626
+f 2629 2626 3074
+f 3077 2629 3074
+f 3078 3076 2627
+f 2628 3079 3078
+f 2628 3078 2627
+f 2628 2629 3077
+f 2628 3077 3079
+f 3080 2630 3081
+f 3082 3081 2630
+f 2631 3082 2630
+f 2633 2630 3080
+f 3083 2633 3080
+f 3084 3082 2631
+f 2632 3085 3084
+f 2632 3084 2631
+f 2632 2633 3083
+f 2632 3083 3085
+f 3086 2634 3087
+f 3088 3087 2634
+f 2635 3088 2634
+f 2637 2634 3086
+f 3089 2637 3086
+f 3090 3088 2635
+f 2636 3091 3090
+f 2636 3090 2635
+f 2636 2637 3089
+f 2636 3089 3091
+f 3092 2638 3093
+f 3094 3093 2638
+f 2639 3094 2638
+f 2641 2638 3092
+f 3095 2641 3092
+f 3096 3094 2639
+f 2640 3097 3096
+f 2640 3096 2639
+f 2640 2641 3095
+f 2640 3095 3097
+f 3098 2642 3099
+f 3100 3099 2642
+f 2643 3100 2642
+f 2645 2642 3098
+f 3101 2645 3098
+f 3102 3100 2643
+f 2644 3103 3102
+f 2644 3102 2643
+f 2644 2645 3101
+f 2644 3101 3103
+f 3104 2646 3105
+f 3106 3105 2646
+f 2647 3106 2646
+f 2649 2646 3104
+f 3107 2649 3104
+f 3108 3106 2647
+f 2648 3109 3108
+f 2648 3108 2647
+f 2648 2649 3107
+f 2648 3107 3109
+f 3110 2651 3111
+f 3112 3111 2651
+f 2653 3112 2651
+f 2650 2651 3110
+f 3113 2650 3110
+f 3114 3112 2653
+f 2660 3115 3114
+f 2660 3114 2653
+f 2660 2650 3113
+f 2660 3113 3115
+f 2656 2657 2655
+f 2655 2657 2658
+f 3116 2658 3117
+f 3118 3117 2658
+f 2659 3118 2658
+f 2655 2658 3116
+f 3119 2655 3116
+f 3120 3118 2659
+f 2654 3121 3120
+f 2654 3120 2659
+f 2654 2655 3119
+f 2654 3119 3121
+f 3122 2662 3123
+f 3124 3123 2662
+f 2663 3124 2662
+f 2665 2662 3122
+f 3125 2665 3122
+f 3126 3124 2663
+f 2664 3127 3126
+f 2664 3126 2663
+f 2664 2665 3125
+f 2664 3125 3127
+f 2666 2661 2665
+f 2665 2661 2662
+f 3128 2668 3129
+f 3130 3129 2668
+f 2669 3130 2668
+f 2671 2668 3128
+f 3131 2671 3128
+f 3132 3130 2669
+f 2670 3133 3132
+f 2670 3132 2669
+f 2670 2671 3131
+f 2670 3131 3133
+f 2672 2667 2671
+f 2671 2667 2668
+f 3134 2674 3135
+f 3136 3135 2674
+f 2675 3136 2674
+f 2677 2674 3134
+f 3137 2677 3134
+f 3138 3136 2675
+f 2676 3139 3138
+f 2676 3138 2675
+f 2676 2677 3137
+f 2676 3137 3139
+f 2678 2673 2677
+f 2677 2673 2674
+f 3140 2680 3141
+f 3142 3141 2680
+f 2681 3142 2680
+f 2683 2680 3140
+f 3143 2683 3140
+f 3144 3142 2681
+f 2682 3145 3144
+f 2682 3144 2681
+f 2682 2683 3143
+f 2682 3143 3145
+f 2684 2679 2683
+f 2683 2679 2680
+f 3146 2685 3147
+f 3148 3147 2685
+f 2686 3148 2685
+f 2688 2685 3146
+f 3149 2688 3146
+f 3150 3148 2686
+f 2687 3151 3150
+f 2687 3150 2686
+f 2687 2688 3149
+f 2687 3149 3151
+f 3152 2689 3153
+f 3154 3153 2689
+f 2690 3154 2689
+f 2692 2689 3152
+f 3155 2692 3152
+f 3156 3154 2690
+f 2691 3157 3156
+f 2691 3156 2690
+f 2691 2692 3155
+f 2691 3155 3157
+f 3158 2693 3159
+f 3160 3159 2693
+f 2694 3160 2693
+f 2696 2693 3158
+f 3161 2696 3158
+f 3162 3160 2694
+f 2695 3163 3162
+f 2695 3162 2694
+f 2695 2696 3161
+f 2695 3161 3163
+f 3164 2697 3165
+f 3166 3165 2697
+f 2698 3166 2697
+f 2700 2697 3164
+f 3167 2700 3164
+f 3168 3166 2698
+f 2699 3169 3168
+f 2699 3168 2698
+f 2699 2700 3167
+f 2699 3167 3169
+f 3170 2701 3171
+f 3172 3171 2701
+f 2702 3172 2701
+f 2704 2701 3170
+f 3173 2704 3170
+f 3174 3172 2702
+f 2703 3175 3174
+f 2703 3174 2702
+f 2703 2704 3173
+f 2703 3173 3175
+f 3176 2705 3177
+f 3178 3177 2705
+f 2706 3178 2705
+f 2708 2705 3176
+f 3179 2708 3176
+f 3180 3178 2706
+f 2707 3181 3180
+f 2707 3180 2706
+f 2707 2708 3179
+f 2707 3179 3181
+f 3182 2709 3183
+f 3184 3183 2709
+f 2710 3184 2709
+f 2712 2709 3182
+f 3185 2712 3182
+f 3186 3184 2710
+f 2711 3187 3186
+f 2711 3186 2710
+f 2711 2712 3185
+f 2711 3185 3187
+f 3188 2713 3189
+f 3190 3189 2713
+f 2714 3190 2713
+f 2716 2713 3188
+f 3191 2716 3188
+f 3192 3190 2714
+f 2715 3193 3192
+f 2715 3192 2714
+f 2715 2716 3191
+f 2715 3191 3193
+f 3194 2717 3195
+f 3196 3195 2717
+f 2718 3196 2717
+f 2720 2717 3194
+f 3197 2720 3194
+f 3198 3196 2718
+f 2719 3199 3198
+f 2719 3198 2718
+f 2719 2720 3197
+f 2719 3197 3199
+f 3200 2721 3201
+f 3202 3201 2721
+f 2722 3202 2721
+f 2724 2721 3200
+f 3203 2724 3200
+f 3204 3202 2722
+f 2723 3205 3204
+f 2723 3204 2722
+f 2723 2724 3203
+f 2723 3203 3205
+f 3206 2725 3207
+f 3208 3207 2725
+f 2726 3208 2725
+f 2728 2725 3206
+f 3209 2728 3206
+f 3210 3208 2726
+f 2727 3211 3210
+f 2727 3210 2726
+f 2727 2728 3209
+f 2727 3209 3211
+f 3212 2729 3213
+f 3214 3213 2729
+f 2730 3214 2729
+f 2732 2729 3212
+f 3215 2732 3212
+f 3216 3214 2730
+f 2731 3217 3216
+f 2731 3216 2730
+f 2731 2732 3215
+f 2731 3215 3217
+f 3218 2733 3219
+f 3220 3219 2733
+f 2734 3220 2733
+f 2736 2733 3218
+f 3221 2736 3218
+f 3222 3220 2734
+f 2735 3223 3222
+f 2735 3222 2734
+f 2735 2736 3221
+f 2735 3221 3223
+f 3224 2737 3225
+f 3226 3225 2737
+f 2738 3226 2737
+f 2740 2737 3224
+f 3227 2740 3224
+f 3228 3226 2738
+f 2739 3229 3228
+f 2739 3228 2738
+f 2739 2740 3227
+f 2739 3227 3229
+f 3230 2741 3231
+f 3232 3231 2741
+f 2742 3232 2741
+f 2744 2741 3230
+f 3233 2744 3230
+f 3234 3232 2742
+f 2743 3235 3234
+f 2743 3234 2742
+f 2743 2744 3233
+f 2743 3233 3235
+f 3236 2745 3237
+f 3238 3237 2745
+f 2746 3238 2745
+f 2748 2745 3236
+f 3239 2748 3236
+f 3240 3238 2746
+f 2747 3241 3240
+f 2747 3240 2746
+f 2747 2748 3239
+f 2747 3239 3241
+f 3242 2750 3243
+f 3244 3243 2750
+f 2751 3244 2750
+f 2753 2750 3242
+f 3245 2753 3242
+f 3246 3244 2751
+f 2752 3247 3246
+f 2752 3246 2751
+f 2752 2753 3245
+f 2752 3245 3247
+f 2754 2749 2753
+f 2753 2749 2750
+f 3248 2756 3249
+f 3250 3249 2756
+f 2757 3250 2756
+f 2759 2756 3248
+f 3251 2759 3248
+f 3252 3250 2757
+f 2758 3253 3252
+f 2758 3252 2757
+f 2758 2759 3251
+f 2758 3251 3253
+f 2760 2755 2759
+f 2759 2755 2756
+f 3254 2762 3255
+f 3256 3255 2762
+f 2763 3256 2762
+f 2765 2762 3254
+f 3257 2765 3254
+f 3258 3256 2763
+f 2764 3259 3258
+f 2764 3258 2763
+f 2764 2765 3257
+f 2764 3257 3259
+f 3260 2767 3261
+f 3262 3261 2767
+f 2768 3262 2767
+f 2766 2767 3260
+f 3263 2766 3260
+f 3264 3262 2768
+f 2769 3265 3264
+f 2769 3264 2768
+f 2769 2766 3263
+f 2769 3263 3265
+f 3266 2771 3267
+f 3268 3267 2771
+f 2773 3268 2771
+f 2770 2771 3266
+f 3269 2770 3266
+f 3270 3268 2773
+f 2774 3271 3270
+f 2774 3270 2773
+f 2774 2770 3269
+f 2774 3269 3271
+f 3272 2775 3273
+f 3274 3273 2775
+f 2776 3274 2775
+f 2778 2775 3272
+f 3275 2778 3272
+f 3276 3274 2776
+f 2777 3277 3276
+f 2777 3276 2776
+f 2777 2778 3275
+f 2777 3275 3277
+f 3278 2779 3279
+f 3280 3279 2779
+f 2780 3280 2779
+f 2782 2779 3278
+f 3281 2782 3278
+f 3282 3280 2780
+f 2781 3283 3282
+f 2781 3282 2780
+f 2781 2782 3281
+f 2781 3281 3283
+f 3284 2783 3285
+f 3286 3285 2783
+f 2784 3286 2783
+f 2786 2783 3284
+f 3287 2786 3284
+f 3288 3286 2784
+f 2785 3289 3288
+f 2785 3288 2784
+f 2785 2786 3287
+f 2785 3287 3289
+f 3290 2787 3291
+f 3292 3291 2787
+f 2788 3292 2787
+f 2790 2787 3290
+f 3293 2790 3290
+f 3294 3292 2788
+f 2789 3295 3294
+f 2789 3294 2788
+f 2789 2790 3293
+f 2789 3293 3295
+f 3296 2791 3297
+f 3298 3297 2791
+f 2792 3298 2791
+f 2794 2791 3296
+f 3299 2794 3296
+f 3300 3298 2792
+f 2793 3301 3300
+f 2793 3300 2792
+f 2793 2794 3299
+f 2793 3299 3301
+f 3302 2795 3303
+f 3304 3303 2795
+f 2796 3304 2795
+f 2798 2795 3302
+f 3305 2798 3302
+f 3306 3304 2796
+f 2797 3307 3306
+f 2797 3306 2796
+f 2797 2798 3305
+f 2797 3305 3307
+f 3308 2799 3309
+f 3310 3309 2799
+f 2800 3310 2799
+f 2802 2799 3308
+f 3311 2802 3308
+f 3312 3310 2800
+f 2801 3313 3312
+f 2801 3312 2800
+f 2801 2802 3311
+f 2801 3311 3313
+f 2804 2803 3314
+f 3315 2804 3314
+f 3316 2805 2804
+f 3316 2804 3315
+f 3317 2806 2805
+f 3317 2805 3316
+f 3318 2807 2806
+f 3318 2806 3317
+f 3319 2808 2807
+f 3319 2807 3318
+f 2809 2808 3319
+f 3320 2809 3319
+f 3321 2810 2809
+f 3321 2809 3320
+f 3322 2811 2810
+f 3322 2810 3321
+f 3323 2811 3322
+f 3323 2812 2811
+f 3324 2812 3323
+f 3324 2813 2812
+f 3325 2813 3324
+f 3325 2814 2813
+f 2815 2814 3325
+f 3326 2815 3325
+f 3327 2816 2815
+f 3327 2815 3326
+f 3328 2817 2816
+f 3328 2816 3327
+f 3329 2818 2817
+f 3329 2817 3328
+f 3330 2819 2818
+f 3330 2818 3329
+f 3331 2820 2819
+f 3331 2819 3330
+f 3332 2821 2820
+f 3332 2820 3331
+f 3333 2822 2821
+f 3333 2821 3332
+f 3334 2823 2822
+f 3334 2822 3333
+f 3335 2824 2823
+f 3335 2823 3334
+f 3336 2825 2824
+f 3336 2824 3335
+f 3337 2826 2825
+f 3337 2825 3336
+f 3338 2827 2826
+f 3338 2826 3337
+f 2828 2827 3338
+f 3339 2828 3338
+f 3340 2829 2828
+f 3340 2828 3339
+f 3341 2830 2829
+f 3341 2829 3340
+f 3342 2831 2830
+f 3342 2830 3341
+f 2832 2831 3342
+f 3343 2832 3342
+f 3344 2833 2832
+f 3344 2832 3343
+f 2803 2833 3344
+f 3314 2803 3344
+f 3345 2835 2836
+f 3346 3345 2836
+f 3346 2836 2838
+f 3347 3346 2838
+f 3347 2838 2839
+f 3348 3347 2839
+f 3348 2839 2837
+f 3349 3348 2837
+f 3349 2837 2834
+f 3350 3349 2834
+f 3350 2834 2835
+f 3345 3350 2835
+f 3351 2841 2842
+f 3352 3351 2842
+f 3352 2842 2844
+f 3353 3352 2844
+f 3353 2844 2845
+f 3354 3353 2845
+f 3354 2845 2843
+f 3355 3354 2843
+f 3355 2843 2840
+f 3356 3355 2840
+f 3356 2840 2841
+f 3351 3356 2841
+f 3357 2847 2848
+f 3358 3357 2848
+f 3358 2848 2850
+f 3359 3358 2850
+f 3359 2850 2851
+f 3360 3359 2851
+f 3360 2851 2849
+f 3361 3360 2849
+f 3361 2849 2846
+f 3362 3361 2846
+f 3362 2846 2847
+f 3357 3362 2847
+f 3363 2853 2854
+f 3364 3363 2854
+f 3364 2854 2856
+f 3365 3364 2856
+f 3365 2856 2857
+f 3366 3365 2857
+f 3366 2857 2855
+f 3367 3366 2855
+f 3367 2855 2852
+f 3368 3367 2852
+f 3368 2852 2853
+f 3363 3368 2853
+f 3369 2859 2860
+f 3370 3369 2860
+f 3370 2860 2862
+f 3371 3370 2862
+f 3371 2862 2863
+f 3372 3371 2863
+f 3372 2863 2861
+f 3373 3372 2861
+f 3373 2861 2858
+f 3374 3373 2858
+f 3374 2858 2859
+f 3369 3374 2859
+f 3375 2865 2866
+f 3376 3375 2866
+f 3376 2866 2868
+f 3377 3376 2868
+f 3377 2868 2869
+f 3378 3377 2869
+f 3378 2869 2867
+f 3379 3378 2867
+f 3379 2867 2864
+f 3380 3379 2864
+f 3380 2864 2865
+f 3375 3380 2865
+f 3381 2871 2872
+f 3382 3381 2872
+f 3382 2872 2874
+f 3383 3382 2874
+f 3383 2874 2875
+f 3384 3383 2875
+f 3384 2875 2873
+f 3385 3384 2873
+f 3385 2873 2870
+f 3386 3385 2870
+f 3386 2870 2871
+f 3381 3386 2871
+f 3387 2877 2878
+f 3388 3387 2878
+f 3388 2878 2880
+f 3389 3388 2880
+f 3389 2880 2881
+f 3390 3389 2881
+f 3390 2881 2879
+f 3391 3390 2879
+f 3391 2879 2876
+f 3392 3391 2876
+f 3392 2876 2877
+f 3387 3392 2877
+f 3393 2883 2884
+f 3394 3393 2884
+f 3394 2884 2886
+f 3395 3394 2886
+f 3395 2886 2887
+f 3396 3395 2887
+f 3396 2887 2885
+f 3397 3396 2885
+f 3397 2885 2882
+f 3398 3397 2882
+f 3398 2882 2883
+f 3393 3398 2883
+f 3399 2889 2890
+f 3400 3399 2890
+f 3400 2890 2892
+f 3401 3400 2892
+f 3401 2892 2893
+f 3402 3401 2893
+f 3402 2893 2891
+f 3403 3402 2891
+f 3403 2891 2888
+f 3404 3403 2888
+f 3404 2888 2889
+f 3399 3404 2889
+f 3405 2895 2896
+f 3406 3405 2896
+f 3406 2896 2898
+f 3407 3406 2898
+f 3407 2898 2899
+f 3408 3407 2899
+f 3408 2899 2897
+f 3409 3408 2897
+f 3409 2897 2894
+f 3410 3409 2894
+f 3410 2894 2895
+f 3405 3410 2895
+f 3411 2901 2902
+f 3412 3411 2902
+f 3412 2902 2904
+f 3413 3412 2904
+f 3413 2904 2905
+f 3414 3413 2905
+f 3414 2905 2903
+f 3415 3414 2903
+f 3415 2903 2900
+f 3416 3415 2900
+f 3416 2900 2901
+f 3411 3416 2901
+f 3417 2907 2908
+f 3418 3417 2908
+f 3418 2908 2910
+f 3419 3418 2910
+f 3419 2910 2911
+f 3420 3419 2911
+f 3420 2911 2909
+f 3421 3420 2909
+f 3421 2909 2906
+f 3422 3421 2906
+f 3422 2906 2907
+f 3417 3422 2907
+f 3423 2913 2914
+f 3424 3423 2914
+f 3424 2914 2916
+f 3425 3424 2916
+f 3425 2916 2917
+f 3426 3425 2917
+f 3426 2917 2915
+f 3427 3426 2915
+f 3427 2915 2912
+f 3428 3427 2912
+f 3428 2912 2913
+f 3423 3428 2913
+f 3429 2919 2920
+f 3430 3429 2920
+f 3430 2920 2922
+f 3431 3430 2922
+f 3431 2922 2923
+f 3432 3431 2923
+f 3432 2923 2921
+f 3433 3432 2921
+f 3433 2921 2918
+f 3434 3433 2918
+f 3434 2918 2919
+f 3429 3434 2919
+f 3435 2925 2926
+f 3436 3435 2926
+f 3436 2926 2928
+f 3437 3436 2928
+f 3437 2928 2929
+f 3438 3437 2929
+f 3438 2929 2927
+f 3439 3438 2927
+f 3439 2927 2924
+f 3440 3439 2924
+f 3440 2924 2925
+f 3435 3440 2925
+f 3441 2931 2932
+f 3442 3441 2932
+f 3442 2932 2934
+f 3443 3442 2934
+f 3443 2934 2935
+f 3444 3443 2935
+f 3444 2935 2933
+f 3445 3444 2933
+f 3445 2933 2930
+f 3446 3445 2930
+f 3446 2930 2931
+f 3441 3446 2931
+f 3447 2937 2938
+f 3448 3447 2938
+f 3448 2938 2940
+f 3449 3448 2940
+f 3449 2940 2941
+f 3450 3449 2941
+f 3450 2941 2939
+f 3451 3450 2939
+f 3451 2939 2936
+f 3452 3451 2936
+f 3452 2936 2937
+f 3447 3452 2937
+f 3453 2943 2944
+f 3454 3453 2944
+f 3454 2944 2946
+f 3455 3454 2946
+f 3455 2946 2947
+f 3456 3455 2947
+f 3456 2947 2945
+f 3457 3456 2945
+f 3457 2945 2942
+f 3458 3457 2942
+f 3458 2942 2943
+f 3453 3458 2943
+f 3459 2949 2950
+f 3460 3459 2950
+f 3460 2950 2952
+f 3461 3460 2952
+f 3461 2952 2953
+f 3462 3461 2953
+f 3462 2953 2951
+f 3463 3462 2951
+f 3463 2951 2948
+f 3464 3463 2948
+f 3464 2948 2949
+f 3459 3464 2949
+f 3465 2955 2956
+f 3466 3465 2956
+f 3466 2956 2958
+f 3467 3466 2958
+f 3467 2958 2959
+f 3468 3467 2959
+f 3468 2959 2957
+f 3469 3468 2957
+f 3469 2957 2954
+f 3470 3469 2954
+f 3470 2954 2955
+f 3465 3470 2955
+f 3471 2961 2962
+f 3472 3471 2962
+f 3472 2962 2964
+f 3473 3472 2964
+f 3473 2964 2965
+f 3474 3473 2965
+f 3474 2965 2963
+f 3475 3474 2963
+f 3475 2963 2960
+f 3476 3475 2960
+f 3476 2960 2961
+f 3471 3476 2961
+f 3477 2967 2968
+f 3478 3477 2968
+f 3478 2968 2970
+f 3479 3478 2970
+f 3479 2970 2971
+f 3480 3479 2971
+f 3480 2971 2969
+f 3481 3480 2969
+f 3481 2969 2966
+f 3482 3481 2966
+f 3482 2966 2967
+f 3477 3482 2967
+f 3483 2973 2974
+f 3484 3483 2974
+f 3484 2974 2976
+f 3485 3484 2976
+f 3485 2976 2977
+f 3486 3485 2977
+f 3486 2977 2975
+f 3487 3486 2975
+f 3487 2975 2972
+f 3488 3487 2972
+f 3488 2972 2973
+f 3483 3488 2973
+f 3489 2979 2980
+f 3490 3489 2980
+f 3490 2980 2982
+f 3491 3490 2982
+f 3491 2982 2983
+f 3492 3491 2983
+f 3492 2983 2981
+f 3493 3492 2981
+f 3493 2981 2978
+f 3494 3493 2978
+f 3494 2978 2979
+f 3489 3494 2979
+f 3495 2985 2986
+f 3496 3495 2986
+f 3496 2986 2988
+f 3497 3496 2988
+f 3497 2988 2989
+f 3498 3497 2989
+f 3498 2989 2987
+f 3499 3498 2987
+f 3499 2987 2984
+f 3500 3499 2984
+f 3500 2984 2985
+f 3495 3500 2985
+f 3501 2991 2992
+f 3502 3501 2992
+f 3502 2992 2994
+f 3503 3502 2994
+f 3503 2994 2995
+f 3504 3503 2995
+f 3504 2995 2993
+f 3505 3504 2993
+f 3505 2993 2990
+f 3506 3505 2990
+f 3506 2990 2991
+f 3501 3506 2991
+f 3507 2997 2998
+f 3508 3507 2998
+f 3508 2998 3000
+f 3509 3508 3000
+f 3509 3000 3001
+f 3510 3509 3001
+f 3510 3001 2999
+f 3511 3510 2999
+f 3511 2999 2996
+f 3512 3511 2996
+f 3512 2996 2997
+f 3507 3512 2997
+f 3513 3003 3004
+f 3514 3513 3004
+f 3514 3004 3006
+f 3515 3514 3006
+f 3515 3006 3007
+f 3516 3515 3007
+f 3516 3007 3005
+f 3517 3516 3005
+f 3517 3005 3002
+f 3518 3517 3002
+f 3518 3002 3003
+f 3513 3518 3003
+f 3519 3009 3010
+f 3520 3519 3010
+f 3520 3010 3012
+f 3521 3520 3012
+f 3521 3012 3013
+f 3522 3521 3013
+f 3522 3013 3011
+f 3523 3522 3011
+f 3523 3011 3008
+f 3524 3523 3008
+f 3524 3008 3009
+f 3519 3524 3009
+f 3525 3015 3016
+f 3526 3525 3016
+f 3526 3016 3018
+f 3527 3526 3018
+f 3527 3018 3019
+f 3528 3527 3019
+f 3528 3019 3017
+f 3529 3528 3017
+f 3529 3017 3014
+f 3530 3529 3014
+f 3530 3014 3015
+f 3525 3530 3015
+f 3531 3021 3022
+f 3532 3531 3022
+f 3532 3022 3024
+f 3533 3532 3024
+f 3533 3024 3025
+f 3534 3533 3025
+f 3534 3025 3023
+f 3535 3534 3023
+f 3535 3023 3020
+f 3536 3535 3020
+f 3536 3020 3021
+f 3531 3536 3021
+f 3537 3027 3028
+f 3538 3537 3028
+f 3538 3028 3030
+f 3539 3538 3030
+f 3539 3030 3031
+f 3540 3539 3031
+f 3540 3031 3029
+f 3541 3540 3029
+f 3541 3029 3026
+f 3542 3541 3026
+f 3542 3026 3027
+f 3537 3542 3027
+f 3543 3033 3034
+f 3544 3543 3034
+f 3544 3034 3036
+f 3545 3544 3036
+f 3545 3036 3037
+f 3546 3545 3037
+f 3546 3037 3035
+f 3547 3546 3035
+f 3547 3035 3032
+f 3548 3547 3032
+f 3548 3032 3033
+f 3543 3548 3033
+f 3549 3039 3040
+f 3550 3549 3040
+f 3550 3040 3042
+f 3551 3550 3042
+f 3551 3042 3043
+f 3552 3551 3043
+f 3552 3043 3041
+f 3553 3552 3041
+f 3553 3041 3038
+f 3554 3553 3038
+f 3554 3038 3039
+f 3549 3554 3039
+f 3555 3045 3046
+f 3556 3555 3046
+f 3556 3046 3048
+f 3557 3556 3048
+f 3557 3048 3049
+f 3558 3557 3049
+f 3558 3049 3047
+f 3559 3558 3047
+f 3559 3047 3044
+f 3560 3559 3044
+f 3560 3044 3045
+f 3555 3560 3045
+f 3561 3051 3052
+f 3562 3561 3052
+f 3562 3052 3054
+f 3563 3562 3054
+f 3563 3054 3055
+f 3564 3563 3055
+f 3564 3055 3053
+f 3565 3564 3053
+f 3565 3053 3050
+f 3566 3565 3050
+f 3566 3050 3051
+f 3561 3566 3051
+f 3567 3057 3058
+f 3568 3567 3058
+f 3568 3058 3060
+f 3569 3568 3060
+f 3569 3060 3061
+f 3570 3569 3061
+f 3570 3061 3059
+f 3571 3570 3059
+f 3571 3059 3056
+f 3572 3571 3056
+f 3572 3056 3057
+f 3567 3572 3057
+f 3573 3063 3064
+f 3574 3573 3064
+f 3574 3064 3066
+f 3575 3574 3066
+f 3575 3066 3067
+f 3576 3575 3067
+f 3576 3067 3065
+f 3577 3576 3065
+f 3577 3065 3062
+f 3578 3577 3062
+f 3578 3062 3063
+f 3573 3578 3063
+f 3579 3069 3070
+f 3580 3579 3070
+f 3580 3070 3072
+f 3581 3580 3072
+f 3581 3072 3073
+f 3582 3581 3073
+f 3582 3073 3071
+f 3583 3582 3071
+f 3583 3071 3068
+f 3584 3583 3068
+f 3584 3068 3069
+f 3579 3584 3069
+f 3585 3075 3076
+f 3586 3585 3076
+f 3586 3076 3078
+f 3587 3586 3078
+f 3587 3078 3079
+f 3588 3587 3079
+f 3588 3079 3077
+f 3589 3588 3077
+f 3589 3077 3074
+f 3590 3589 3074
+f 3590 3074 3075
+f 3585 3590 3075
+f 3591 3081 3082
+f 3592 3591 3082
+f 3592 3082 3084
+f 3593 3592 3084
+f 3593 3084 3085
+f 3594 3593 3085
+f 3594 3085 3083
+f 3595 3594 3083
+f 3595 3083 3080
+f 3596 3595 3080
+f 3596 3080 3081
+f 3591 3596 3081
+f 3597 3087 3088
+f 3598 3597 3088
+f 3598 3088 3090
+f 3599 3598 3090
+f 3599 3090 3091
+f 3600 3599 3091
+f 3600 3091 3089
+f 3601 3600 3089
+f 3601 3089 3086
+f 3602 3601 3086
+f 3602 3086 3087
+f 3597 3602 3087
+f 3603 3093 3094
+f 3604 3603 3094
+f 3604 3094 3096
+f 3605 3604 3096
+f 3605 3096 3097
+f 3606 3605 3097
+f 3606 3097 3095
+f 3607 3606 3095
+f 3607 3095 3092
+f 3608 3607 3092
+f 3608 3092 3093
+f 3603 3608 3093
+f 3609 3099 3100
+f 3610 3609 3100
+f 3610 3100 3102
+f 3611 3610 3102
+f 3611 3102 3103
+f 3612 3611 3103
+f 3612 3103 3101
+f 3613 3612 3101
+f 3613 3101 3098
+f 3614 3613 3098
+f 3614 3098 3099
+f 3609 3614 3099
+f 3615 3105 3106
+f 3616 3615 3106
+f 3616 3106 3108
+f 3617 3616 3108
+f 3617 3108 3109
+f 3618 3617 3109
+f 3618 3109 3107
+f 3619 3618 3107
+f 3619 3107 3104
+f 3620 3619 3104
+f 3620 3104 3105
+f 3615 3620 3105
+f 3621 3111 3112
+f 3622 3621 3112
+f 3622 3112 3114
+f 3623 3622 3114
+f 3623 3114 3115
+f 3624 3623 3115
+f 3624 3115 3113
+f 3625 3624 3113
+f 3625 3113 3110
+f 3626 3625 3110
+f 3626 3110 3111
+f 3621 3626 3111
+f 3627 3117 3118
+f 3628 3627 3118
+f 3628 3118 3120
+f 3629 3628 3120
+f 3629 3120 3121
+f 3630 3629 3121
+f 3630 3121 3119
+f 3631 3630 3119
+f 3631 3119 3116
+f 3632 3631 3116
+f 3632 3116 3117
+f 3627 3632 3117
+f 3633 3123 3124
+f 3634 3633 3124
+f 3634 3124 3126
+f 3635 3634 3126
+f 3635 3126 3127
+f 3636 3635 3127
+f 3636 3127 3125
+f 3637 3636 3125
+f 3637 3125 3122
+f 3638 3637 3122
+f 3638 3122 3123
+f 3633 3638 3123
+f 3639 3129 3130
+f 3640 3639 3130
+f 3640 3130 3132
+f 3641 3640 3132
+f 3641 3132 3133
+f 3642 3641 3133
+f 3642 3133 3131
+f 3643 3642 3131
+f 3643 3131 3128
+f 3644 3643 3128
+f 3644 3128 3129
+f 3639 3644 3129
+f 3645 3135 3136
+f 3646 3645 3136
+f 3646 3136 3138
+f 3647 3646 3138
+f 3647 3138 3139
+f 3648 3647 3139
+f 3648 3139 3137
+f 3649 3648 3137
+f 3649 3137 3134
+f 3650 3649 3134
+f 3650 3134 3135
+f 3645 3650 3135
+f 3651 3141 3142
+f 3652 3651 3142
+f 3652 3142 3144
+f 3653 3652 3144
+f 3653 3144 3145
+f 3654 3653 3145
+f 3654 3145 3143
+f 3655 3654 3143
+f 3655 3143 3140
+f 3656 3655 3140
+f 3656 3140 3141
+f 3651 3656 3141
+f 3657 3147 3148
+f 3658 3657 3148
+f 3658 3148 3150
+f 3659 3658 3150
+f 3659 3150 3151
+f 3660 3659 3151
+f 3660 3151 3149
+f 3661 3660 3149
+f 3661 3149 3146
+f 3662 3661 3146
+f 3662 3146 3147
+f 3657 3662 3147
+f 3663 3153 3154
+f 3664 3663 3154
+f 3664 3154 3156
+f 3665 3664 3156
+f 3665 3156 3157
+f 3666 3665 3157
+f 3666 3157 3155
+f 3667 3666 3155
+f 3667 3155 3152
+f 3668 3667 3152
+f 3668 3152 3153
+f 3663 3668 3153
+f 3669 3159 3160
+f 3670 3669 3160
+f 3670 3160 3162
+f 3671 3670 3162
+f 3671 3162 3163
+f 3672 3671 3163
+f 3672 3163 3161
+f 3673 3672 3161
+f 3673 3161 3158
+f 3674 3673 3158
+f 3674 3158 3159
+f 3669 3674 3159
+f 3675 3165 3166
+f 3676 3675 3166
+f 3676 3166 3168
+f 3677 3676 3168
+f 3677 3168 3169
+f 3678 3677 3169
+f 3678 3169 3167
+f 3679 3678 3167
+f 3679 3167 3164
+f 3680 3679 3164
+f 3680 3164 3165
+f 3675 3680 3165
+f 3681 3171 3172
+f 3682 3681 3172
+f 3682 3172 3174
+f 3683 3682 3174
+f 3683 3174 3175
+f 3684 3683 3175
+f 3684 3175 3173
+f 3685 3684 3173
+f 3685 3173 3170
+f 3686 3685 3170
+f 3686 3170 3171
+f 3681 3686 3171
+f 3687 3177 3178
+f 3688 3687 3178
+f 3688 3178 3180
+f 3689 3688 3180
+f 3689 3180 3181
+f 3690 3689 3181
+f 3690 3181 3179
+f 3691 3690 3179
+f 3691 3179 3176
+f 3692 3691 3176
+f 3692 3176 3177
+f 3687 3692 3177
+f 3693 3183 3184
+f 3694 3693 3184
+f 3694 3184 3186
+f 3695 3694 3186
+f 3695 3186 3187
+f 3696 3695 3187
+f 3696 3187 3185
+f 3697 3696 3185
+f 3697 3185 3182
+f 3698 3697 3182
+f 3698 3182 3183
+f 3693 3698 3183
+f 3699 3189 3190
+f 3700 3699 3190
+f 3700 3190 3192
+f 3701 3700 3192
+f 3701 3192 3193
+f 3702 3701 3193
+f 3702 3193 3191
+f 3703 3702 3191
+f 3703 3191 3188
+f 3704 3703 3188
+f 3704 3188 3189
+f 3699 3704 3189
+f 3705 3195 3196
+f 3706 3705 3196
+f 3706 3196 3198
+f 3707 3706 3198
+f 3707 3198 3199
+f 3708 3707 3199
+f 3708 3199 3197
+f 3709 3708 3197
+f 3709 3197 3194
+f 3710 3709 3194
+f 3710 3194 3195
+f 3705 3710 3195
+f 3711 3201 3202
+f 3712 3711 3202
+f 3712 3202 3204
+f 3713 3712 3204
+f 3713 3204 3205
+f 3714 3713 3205
+f 3714 3205 3203
+f 3715 3714 3203
+f 3715 3203 3200
+f 3716 3715 3200
+f 3716 3200 3201
+f 3711 3716 3201
+f 3717 3207 3208
+f 3718 3717 3208
+f 3718 3208 3210
+f 3719 3718 3210
+f 3719 3210 3211
+f 3720 3719 3211
+f 3720 3211 3209
+f 3721 3720 3209
+f 3721 3209 3206
+f 3722 3721 3206
+f 3722 3206 3207
+f 3717 3722 3207
+f 3723 3213 3214
+f 3724 3723 3214
+f 3724 3214 3216
+f 3725 3724 3216
+f 3725 3216 3217
+f 3726 3725 3217
+f 3726 3217 3215
+f 3727 3726 3215
+f 3727 3215 3212
+f 3728 3727 3212
+f 3728 3212 3213
+f 3723 3728 3213
+f 3729 3219 3220
+f 3730 3729 3220
+f 3730 3220 3222
+f 3731 3730 3222
+f 3731 3222 3223
+f 3732 3731 3223
+f 3732 3223 3221
+f 3733 3732 3221
+f 3733 3221 3218
+f 3734 3733 3218
+f 3734 3218 3219
+f 3729 3734 3219
+f 3735 3225 3226
+f 3736 3735 3226
+f 3736 3226 3228
+f 3737 3736 3228
+f 3737 3228 3229
+f 3738 3737 3229
+f 3738 3229 3227
+f 3739 3738 3227
+f 3739 3227 3224
+f 3740 3739 3224
+f 3740 3224 3225
+f 3735 3740 3225
+f 3741 3231 3232
+f 3742 3741 3232
+f 3742 3232 3234
+f 3743 3742 3234
+f 3743 3234 3235
+f 3744 3743 3235
+f 3744 3235 3233
+f 3745 3744 3233
+f 3745 3233 3230
+f 3746 3745 3230
+f 3746 3230 3231
+f 3741 3746 3231
+f 3747 3237 3238
+f 3748 3747 3238
+f 3748 3238 3240
+f 3749 3748 3240
+f 3749 3240 3241
+f 3750 3749 3241
+f 3750 3241 3239
+f 3751 3750 3239
+f 3751 3239 3236
+f 3752 3751 3236
+f 3752 3236 3237
+f 3747 3752 3237
+f 3753 3243 3244
+f 3754 3753 3244
+f 3754 3244 3246
+f 3755 3754 3246
+f 3755 3246 3247
+f 3756 3755 3247
+f 3756 3247 3245
+f 3757 3756 3245
+f 3757 3245 3242
+f 3758 3757 3242
+f 3758 3242 3243
+f 3753 3758 3243
+f 3759 3249 3250
+f 3760 3759 3250
+f 3760 3250 3252
+f 3761 3760 3252
+f 3761 3252 3253
+f 3762 3761 3253
+f 3762 3253 3251
+f 3763 3762 3251
+f 3763 3251 3248
+f 3764 3763 3248
+f 3764 3248 3249
+f 3759 3764 3249
+f 3765 3255 3256
+f 3766 3765 3256
+f 3766 3256 3258
+f 3767 3766 3258
+f 3767 3258 3259
+f 3768 3767 3259
+f 3768 3259 3257
+f 3769 3768 3257
+f 3769 3257 3254
+f 3770 3769 3254
+f 3770 3254 3255
+f 3765 3770 3255
+f 3771 3261 3262
+f 3772 3771 3262
+f 3772 3262 3264
+f 3773 3772 3264
+f 3773 3264 3265
+f 3774 3773 3265
+f 3774 3265 3263
+f 3775 3774 3263
+f 3775 3263 3260
+f 3776 3775 3260
+f 3776 3260 3261
+f 3771 3776 3261
+f 3777 3267 3268
+f 3778 3777 3268
+f 3778 3268 3270
+f 3779 3778 3270
+f 3779 3270 3271
+f 3780 3779 3271
+f 3780 3271 3269
+f 3781 3780 3269
+f 3781 3269 3266
+f 3782 3781 3266
+f 3782 3266 3267
+f 3777 3782 3267
+f 3783 3273 3274
+f 3784 3783 3274
+f 3784 3274 3276
+f 3785 3784 3276
+f 3785 3276 3277
+f 3786 3785 3277
+f 3786 3277 3275
+f 3787 3786 3275
+f 3787 3275 3272
+f 3788 3787 3272
+f 3788 3272 3273
+f 3783 3788 3273
+f 3789 3279 3280
+f 3790 3789 3280
+f 3790 3280 3282
+f 3791 3790 3282
+f 3791 3282 3283
+f 3792 3791 3283
+f 3792 3283 3281
+f 3793 3792 3281
+f 3793 3281 3278
+f 3794 3793 3278
+f 3794 3278 3279
+f 3789 3794 3279
+f 3795 3285 3286
+f 3796 3795 3286
+f 3796 3286 3288
+f 3797 3796 3288
+f 3797 3288 3289
+f 3798 3797 3289
+f 3798 3289 3287
+f 3799 3798 3287
+f 3799 3287 3284
+f 3800 3799 3284
+f 3800 3284 3285
+f 3795 3800 3285
+f 3801 3291 3292
+f 3802 3801 3292
+f 3802 3292 3294
+f 3803 3802 3294
+f 3803 3294 3295
+f 3804 3803 3295
+f 3804 3295 3293
+f 3805 3804 3293
+f 3805 3293 3290
+f 3806 3805 3290
+f 3806 3290 3291
+f 3801 3806 3291
+f 3807 3297 3298
+f 3808 3807 3298
+f 3808 3298 3300
+f 3809 3808 3300
+f 3809 3300 3301
+f 3810 3809 3301
+f 3810 3301 3299
+f 3811 3810 3299
+f 3811 3299 3296
+f 3812 3811 3296
+f 3812 3296 3297
+f 3807 3812 3297
+f 3813 3303 3304
+f 3814 3813 3304
+f 3814 3304 3306
+f 3815 3814 3306
+f 3815 3306 3307
+f 3816 3815 3307
+f 3816 3307 3305
+f 3817 3816 3305
+f 3817 3305 3302
+f 3818 3817 3302
+f 3818 3302 3303
+f 3813 3818 3303
+f 3819 3309 3310
+f 3820 3819 3310
+f 3820 3310 3312
+f 3821 3820 3312
+f 3821 3312 3313
+f 3822 3821 3313
+f 3822 3313 3311
+f 3823 3822 3311
+f 3823 3311 3308
+f 3824 3823 3308
+f 3824 3308 3309
+f 3819 3824 3309
+f 3315 3314 3825
+f 3826 3315 3825
+f 3316 3315 3826
+f 3827 3316 3826
+f 3317 3316 3827
+f 3828 3317 3827
+f 3318 3317 3828
+f 3829 3318 3828
+f 3319 3318 3829
+f 3830 3319 3829
+f 3320 3319 3830
+f 3831 3320 3830
+f 3321 3320 3831
+f 3832 3321 3831
+f 3322 3321 3832
+f 3833 3322 3832
+f 3323 3322 3833
+f 3834 3323 3833
+f 3324 3323 3834
+f 3835 3324 3834
+f 3325 3324 3835
+f 3836 3325 3835
+f 3326 3325 3836
+f 3837 3326 3836
+f 3327 3326 3837
+f 3838 3327 3837
+f 3328 3327 3838
+f 3839 3328 3838
+f 3329 3328 3839
+f 3840 3329 3839
+f 3330 3329 3840
+f 3841 3330 3840
+f 3331 3330 3841
+f 3842 3331 3841
+f 3332 3331 3842
+f 3843 3332 3842
+f 3333 3332 3843
+f 3844 3333 3843
+f 3334 3333 3844
+f 3845 3334 3844
+f 3335 3334 3845
+f 3846 3335 3845
+f 3336 3335 3846
+f 3847 3336 3846
+f 3337 3336 3847
+f 3848 3337 3847
+f 3338 3337 3848
+f 3849 3338 3848
+f 3339 3338 3849
+f 3850 3339 3849
+f 3340 3339 3850
+f 3851 3340 3850
+f 3341 3340 3851
+f 3852 3341 3851
+f 3342 3341 3852
+f 3853 3342 3852
+f 3343 3853 3854
+f 3343 3342 3853
+f 3855 3344 3343
+f 3855 3343 3854
+f 3825 3314 3344
+f 3825 3344 3855
+f 3856 3350 3345
+f 3345 3346 3856
+f 3856 3857 3350
+f 3346 3858 3856
+f 3857 3349 3350
+f 3346 3347 3858
+f 3348 3859 3347
+f 3347 3859 3858
+f 3857 3859 3349
+f 3349 3859 3348
+f 3860 3356 3351
+f 3351 3352 3860
+f 3860 3861 3356
+f 3352 3862 3860
+f 3861 3355 3356
+f 3352 3353 3862
+f 3354 3863 3353
+f 3353 3863 3862
+f 3861 3863 3355
+f 3355 3863 3354
+f 3864 3362 3357
+f 3357 3358 3864
+f 3864 3865 3362
+f 3358 3866 3864
+f 3865 3361 3362
+f 3358 3359 3866
+f 3360 3867 3359
+f 3359 3867 3866
+f 3865 3867 3361
+f 3361 3867 3360
+f 3868 3368 3363
+f 3363 3364 3868
+f 3868 3869 3368
+f 3364 3870 3868
+f 3869 3367 3368
+f 3364 3365 3870
+f 3366 3871 3365
+f 3365 3871 3870
+f 3869 3871 3367
+f 3367 3871 3366
+f 3872 3374 3369
+f 3369 3370 3872
+f 3872 3873 3374
+f 3370 3874 3872
+f 3873 3373 3374
+f 3370 3371 3874
+f 3372 3875 3371
+f 3371 3875 3874
+f 3873 3875 3373
+f 3373 3875 3372
+f 3876 3380 3375
+f 3375 3376 3876
+f 3876 3877 3380
+f 3376 3878 3876
+f 3877 3379 3380
+f 3376 3377 3878
+f 3378 3879 3377
+f 3377 3879 3878
+f 3877 3879 3379
+f 3379 3879 3378
+f 3880 3386 3381
+f 3381 3382 3880
+f 3880 3881 3386
+f 3382 3882 3880
+f 3881 3385 3386
+f 3382 3383 3882
+f 3384 3883 3383
+f 3383 3883 3882
+f 3881 3883 3385
+f 3385 3883 3384
+f 3884 3392 3387
+f 3387 3388 3884
+f 3884 3885 3392
+f 3388 3886 3884
+f 3885 3391 3392
+f 3388 3389 3886
+f 3390 3887 3389
+f 3389 3887 3886
+f 3885 3887 3391
+f 3391 3887 3390
+f 3888 3398 3393
+f 3393 3394 3888
+f 3888 3889 3398
+f 3394 3890 3888
+f 3889 3397 3398
+f 3394 3395 3890
+f 3396 3891 3395
+f 3395 3891 3890
+f 3889 3891 3397
+f 3397 3891 3396
+f 3892 3404 3399
+f 3399 3400 3892
+f 3892 3893 3404
+f 3400 3894 3892
+f 3893 3403 3404
+f 3400 3401 3894
+f 3402 3895 3401
+f 3401 3895 3894
+f 3893 3895 3403
+f 3403 3895 3402
+f 3896 3410 3405
+f 3405 3406 3896
+f 3896 3897 3410
+f 3406 3898 3896
+f 3897 3409 3410
+f 3406 3407 3898
+f 3408 3899 3407
+f 3407 3899 3898
+f 3897 3899 3409
+f 3409 3899 3408
+f 3900 3416 3411
+f 3411 3412 3900
+f 3900 3901 3416
+f 3412 3902 3900
+f 3901 3415 3416
+f 3412 3413 3902
+f 3414 3903 3413
+f 3413 3903 3902
+f 3901 3903 3415
+f 3415 3903 3414
+f 3904 3422 3417
+f 3417 3418 3904
+f 3904 3905 3422
+f 3418 3906 3904
+f 3905 3421 3422
+f 3418 3419 3906
+f 3420 3907 3419
+f 3419 3907 3906
+f 3905 3907 3421
+f 3421 3907 3420
+f 3908 3428 3423
+f 3423 3424 3908
+f 3908 3909 3428
+f 3424 3910 3908
+f 3909 3427 3428
+f 3424 3425 3910
+f 3426 3911 3425
+f 3425 3911 3910
+f 3909 3911 3427
+f 3427 3911 3426
+f 3912 3434 3429
+f 3429 3430 3912
+f 3912 3913 3434
+f 3430 3914 3912
+f 3913 3433 3434
+f 3430 3431 3914
+f 3432 3915 3431
+f 3431 3915 3914
+f 3913 3915 3433
+f 3433 3915 3432
+f 3916 3440 3435
+f 3435 3436 3916
+f 3916 3917 3440
+f 3436 3918 3916
+f 3917 3439 3440
+f 3436 3437 3918
+f 3438 3919 3437
+f 3437 3919 3918
+f 3917 3919 3439
+f 3439 3919 3438
+f 3920 3446 3441
+f 3441 3442 3920
+f 3920 3921 3446
+f 3442 3922 3920
+f 3921 3445 3446
+f 3442 3443 3922
+f 3444 3923 3443
+f 3443 3923 3922
+f 3921 3923 3445
+f 3445 3923 3444
+f 3924 3452 3447
+f 3447 3448 3924
+f 3924 3925 3452
+f 3448 3926 3924
+f 3925 3451 3452
+f 3448 3449 3926
+f 3450 3927 3449
+f 3449 3927 3926
+f 3925 3927 3451
+f 3451 3927 3450
+f 3928 3458 3453
+f 3453 3454 3928
+f 3928 3929 3458
+f 3454 3930 3928
+f 3929 3457 3458
+f 3454 3455 3930
+f 3456 3931 3455
+f 3455 3931 3930
+f 3929 3931 3457
+f 3457 3931 3456
+f 3932 3464 3459
+f 3459 3460 3932
+f 3932 3933 3464
+f 3460 3934 3932
+f 3933 3463 3464
+f 3460 3461 3934
+f 3462 3935 3461
+f 3461 3935 3934
+f 3933 3935 3463
+f 3463 3935 3462
+f 3936 3470 3465
+f 3465 3466 3936
+f 3936 3937 3470
+f 3466 3938 3936
+f 3937 3469 3470
+f 3466 3467 3938
+f 3468 3939 3467
+f 3467 3939 3938
+f 3937 3939 3469
+f 3469 3939 3468
+f 3940 3476 3471
+f 3471 3472 3940
+f 3940 3941 3476
+f 3472 3942 3940
+f 3941 3475 3476
+f 3472 3473 3942
+f 3474 3943 3473
+f 3473 3943 3942
+f 3941 3943 3475
+f 3475 3943 3474
+f 3944 3482 3477
+f 3477 3478 3944
+f 3944 3945 3482
+f 3478 3946 3944
+f 3945 3481 3482
+f 3478 3479 3946
+f 3480 3947 3479
+f 3479 3947 3946
+f 3945 3947 3481
+f 3481 3947 3480
+f 3948 3488 3483
+f 3483 3484 3948
+f 3948 3949 3488
+f 3484 3950 3948
+f 3949 3487 3488
+f 3484 3485 3950
+f 3486 3951 3485
+f 3485 3951 3950
+f 3949 3951 3487
+f 3487 3951 3486
+f 3952 3494 3489
+f 3489 3490 3952
+f 3952 3953 3494
+f 3490 3954 3952
+f 3953 3493 3494
+f 3490 3491 3954
+f 3492 3955 3491
+f 3491 3955 3954
+f 3953 3955 3493
+f 3493 3955 3492
+f 3956 3500 3495
+f 3495 3496 3956
+f 3956 3957 3500
+f 3496 3958 3956
+f 3957 3499 3500
+f 3496 3497 3958
+f 3498 3959 3497
+f 3497 3959 3958
+f 3957 3959 3499
+f 3499 3959 3498
+f 3960 3506 3501
+f 3501 3502 3960
+f 3960 3961 3506
+f 3502 3962 3960
+f 3961 3505 3506
+f 3502 3503 3962
+f 3504 3963 3503
+f 3503 3963 3962
+f 3961 3963 3505
+f 3505 3963 3504
+f 3964 3512 3507
+f 3507 3508 3964
+f 3964 3965 3512
+f 3508 3966 3964
+f 3965 3511 3512
+f 3508 3509 3966
+f 3510 3967 3509
+f 3509 3967 3966
+f 3965 3967 3511
+f 3511 3967 3510
+f 3968 3518 3513
+f 3513 3514 3968
+f 3968 3969 3518
+f 3514 3970 3968
+f 3969 3517 3518
+f 3514 3515 3970
+f 3516 3971 3515
+f 3515 3971 3970
+f 3969 3971 3517
+f 3517 3971 3516
+f 3972 3524 3519
+f 3519 3520 3972
+f 3972 3973 3524
+f 3520 3974 3972
+f 3973 3523 3524
+f 3520 3521 3974
+f 3522 3975 3521
+f 3521 3975 3974
+f 3973 3975 3523
+f 3523 3975 3522
+f 3976 3530 3525
+f 3525 3526 3976
+f 3976 3977 3530
+f 3526 3978 3976
+f 3977 3529 3530
+f 3526 3527 3978
+f 3528 3979 3527
+f 3527 3979 3978
+f 3977 3979 3529
+f 3529 3979 3528
+f 3980 3536 3531
+f 3531 3532 3980
+f 3980 3981 3536
+f 3532 3982 3980
+f 3981 3535 3536
+f 3532 3533 3982
+f 3534 3983 3533
+f 3533 3983 3982
+f 3981 3983 3535
+f 3535 3983 3534
+f 3984 3542 3537
+f 3537 3538 3984
+f 3984 3985 3542
+f 3538 3986 3984
+f 3985 3541 3542
+f 3538 3539 3986
+f 3540 3987 3539
+f 3539 3987 3986
+f 3985 3987 3541
+f 3541 3987 3540
+f 3988 3548 3543
+f 3543 3544 3988
+f 3988 3989 3548
+f 3544 3990 3988
+f 3989 3547 3548
+f 3544 3545 3990
+f 3546 3991 3545
+f 3545 3991 3990
+f 3989 3991 3547
+f 3547 3991 3546
+f 3992 3554 3549
+f 3549 3550 3992
+f 3992 3993 3554
+f 3550 3994 3992
+f 3993 3553 3554
+f 3550 3551 3994
+f 3552 3995 3551
+f 3551 3995 3994
+f 3993 3995 3553
+f 3553 3995 3552
+f 3996 3560 3555
+f 3555 3556 3996
+f 3996 3997 3560
+f 3556 3998 3996
+f 3997 3559 3560
+f 3556 3557 3998
+f 3558 3999 3557
+f 3557 3999 3998
+f 3997 3999 3559
+f 3559 3999 3558
+f 4000 3566 3561
+f 3561 3562 4000
+f 4000 4001 3566
+f 3562 4002 4000
+f 4001 3565 3566
+f 3562 3563 4002
+f 3564 4003 3563
+f 3563 4003 4002
+f 4001 4003 3565
+f 3565 4003 3564
+f 4004 3572 3567
+f 3567 3568 4004
+f 4004 4005 3572
+f 3568 4006 4004
+f 4005 3571 3572
+f 3568 3569 4006
+f 3570 4007 3569
+f 3569 4007 4006
+f 4005 4007 3571
+f 3571 4007 3570
+f 4008 3578 3573
+f 3573 3574 4008
+f 4008 4009 3578
+f 3574 4010 4008
+f 4009 3577 3578
+f 3574 3575 4010
+f 3576 4011 3575
+f 3575 4011 4010
+f 4009 4011 3577
+f 3577 4011 3576
+f 4012 3584 3579
+f 3579 3580 4012
+f 4012 4013 3584
+f 3580 4014 4012
+f 4013 3583 3584
+f 3580 3581 4014
+f 3582 4015 3581
+f 3581 4015 4014
+f 4013 4015 3583
+f 3583 4015 3582
+f 4016 3590 3585
+f 3585 3586 4016
+f 4016 4017 3590
+f 3586 4018 4016
+f 4017 3589 3590
+f 3586 3587 4018
+f 3588 4019 3587
+f 3587 4019 4018
+f 4017 4019 3589
+f 3589 4019 3588
+f 4020 3596 3591
+f 3591 3592 4020
+f 4020 4021 3596
+f 3592 4022 4020
+f 4021 3595 3596
+f 3592 3593 4022
+f 3594 4023 3593
+f 3593 4023 4022
+f 4021 4023 3595
+f 3595 4023 3594
+f 4024 3602 3597
+f 3597 3598 4024
+f 4024 4025 3602
+f 3598 4026 4024
+f 4025 3601 3602
+f 3598 3599 4026
+f 3600 4027 3599
+f 3599 4027 4026
+f 4025 4027 3601
+f 3601 4027 3600
+f 4028 3608 3603
+f 3603 3604 4028
+f 4028 4029 3608
+f 3604 4030 4028
+f 4029 3607 3608
+f 3604 3605 4030
+f 3606 4031 3605
+f 3605 4031 4030
+f 4029 4031 3607
+f 3607 4031 3606
+f 4032 3614 3609
+f 3609 3610 4032
+f 4032 4033 3614
+f 3610 4034 4032
+f 4033 3613 3614
+f 3610 3611 4034
+f 3612 4035 3611
+f 3611 4035 4034
+f 4033 4035 3613
+f 3613 4035 3612
+f 4036 3620 3615
+f 3615 3616 4036
+f 4036 4037 3620
+f 3616 4038 4036
+f 4037 3619 3620
+f 3616 3617 4038
+f 3618 4039 3617
+f 3617 4039 4038
+f 4037 4039 3619
+f 3619 4039 3618
+f 4040 3626 3621
+f 3621 3622 4040
+f 4040 4041 3626
+f 3622 4042 4040
+f 4041 3625 3626
+f 3622 3623 4042
+f 3624 4043 3623
+f 3623 4043 4042
+f 4041 4043 3625
+f 3625 4043 3624
+f 4044 3632 3627
+f 3627 3628 4044
+f 4044 4045 3632
+f 3628 4046 4044
+f 4045 3631 3632
+f 3628 3629 4046
+f 3630 4047 3629
+f 3629 4047 4046
+f 4045 4047 3631
+f 3631 4047 3630
+f 4048 3638 3633
+f 3633 3634 4048
+f 4048 4049 3638
+f 3634 4050 4048
+f 4049 3637 3638
+f 3634 3635 4050
+f 3636 4051 3635
+f 3635 4051 4050
+f 4049 4051 3637
+f 3637 4051 3636
+f 4052 3644 3639
+f 3639 3640 4052
+f 4052 4053 3644
+f 3640 4054 4052
+f 4053 3643 3644
+f 3640 3641 4054
+f 3642 4055 3641
+f 3641 4055 4054
+f 4053 4055 3643
+f 3643 4055 3642
+f 4056 3650 3645
+f 3645 3646 4056
+f 4056 4057 3650
+f 3646 4058 4056
+f 4057 3649 3650
+f 3646 3647 4058
+f 3648 4059 3647
+f 3647 4059 4058
+f 4057 4059 3649
+f 3649 4059 3648
+f 4060 3656 3651
+f 3651 3652 4060
+f 4060 4061 3656
+f 3652 4062 4060
+f 4061 3655 3656
+f 3652 3653 4062
+f 3654 4063 3653
+f 3653 4063 4062
+f 4061 4063 3655
+f 3655 4063 3654
+f 4064 3662 3657
+f 3657 3658 4064
+f 4064 4065 3662
+f 3658 4066 4064
+f 4065 3661 3662
+f 3658 3659 4066
+f 3660 4067 3659
+f 3659 4067 4066
+f 4065 4067 3661
+f 3661 4067 3660
+f 4068 3668 3663
+f 3663 3664 4068
+f 4068 4069 3668
+f 3664 4070 4068
+f 4069 3667 3668
+f 3664 3665 4070
+f 3666 4071 3665
+f 3665 4071 4070
+f 4069 4071 3667
+f 3667 4071 3666
+f 4072 3674 3669
+f 3669 3670 4072
+f 4072 4073 3674
+f 3670 4074 4072
+f 4073 3673 3674
+f 3670 3671 4074
+f 3672 4075 3671
+f 3671 4075 4074
+f 4073 4075 3673
+f 3673 4075 3672
+f 4076 3680 3675
+f 3675 3676 4076
+f 4076 4077 3680
+f 3676 4078 4076
+f 4077 3679 3680
+f 3676 3677 4078
+f 3678 4079 3677
+f 3677 4079 4078
+f 4077 4079 3679
+f 3679 4079 3678
+f 4080 3686 3681
+f 3681 3682 4080
+f 4080 4081 3686
+f 3682 4082 4080
+f 4081 3685 3686
+f 3682 3683 4082
+f 3684 4083 3683
+f 3683 4083 4082
+f 4081 4083 3685
+f 3685 4083 3684
+f 4084 3692 3687
+f 3687 3688 4084
+f 4084 4085 3692
+f 3688 4086 4084
+f 4085 3691 3692
+f 3688 3689 4086
+f 3690 4087 3689
+f 3689 4087 4086
+f 4085 4087 3691
+f 3691 4087 3690
+f 4088 3698 3693
+f 3693 3694 4088
+f 4088 4089 3698
+f 3694 4090 4088
+f 4089 3697 3698
+f 3694 3695 4090
+f 3696 4091 3695
+f 3695 4091 4090
+f 4089 4091 3697
+f 3697 4091 3696
+f 4092 3704 3699
+f 3699 3700 4092
+f 4092 4093 3704
+f 3700 4094 4092
+f 4093 3703 3704
+f 3700 3701 4094
+f 3702 4095 3701
+f 3701 4095 4094
+f 4093 4095 3703
+f 3703 4095 3702
+f 4096 3710 3705
+f 3705 3706 4096
+f 4096 4097 3710
+f 3706 4098 4096
+f 4097 3709 3710
+f 3706 3707 4098
+f 3708 4099 3707
+f 3707 4099 4098
+f 4097 4099 3709
+f 3709 4099 3708
+f 4100 3716 3711
+f 3711 3712 4100
+f 4100 4101 3716
+f 3712 4102 4100
+f 4101 3715 3716
+f 3712 3713 4102
+f 3714 4103 3713
+f 3713 4103 4102
+f 4101 4103 3715
+f 3715 4103 3714
+f 4104 3722 3717
+f 3717 3718 4104
+f 4104 4105 3722
+f 3718 4106 4104
+f 4105 3721 3722
+f 3718 3719 4106
+f 3720 4107 3719
+f 3719 4107 4106
+f 4105 4107 3721
+f 3721 4107 3720
+f 4108 3728 3723
+f 3723 3724 4108
+f 4108 4109 3728
+f 3724 4110 4108
+f 4109 3727 3728
+f 3724 3725 4110
+f 3726 4111 3725
+f 3725 4111 4110
+f 4109 4111 3727
+f 3727 4111 3726
+f 4112 3734 3729
+f 3729 3730 4112
+f 4112 4113 3734
+f 3730 4114 4112
+f 4113 3733 3734
+f 3730 3731 4114
+f 3732 4115 3731
+f 3731 4115 4114
+f 4113 4115 3733
+f 3733 4115 3732
+f 4116 3740 3735
+f 3735 3736 4116
+f 4116 4117 3740
+f 3736 4118 4116
+f 4117 3739 3740
+f 3736 3737 4118
+f 3738 4119 3737
+f 3737 4119 4118
+f 4117 4119 3739
+f 3739 4119 3738
+f 4120 3746 3741
+f 3741 3742 4120
+f 4120 4121 3746
+f 3742 4122 4120
+f 4121 3745 3746
+f 3742 3743 4122
+f 3744 4123 3743
+f 3743 4123 4122
+f 4121 4123 3745
+f 3745 4123 3744
+f 4124 3752 3747
+f 3747 3748 4124
+f 4124 4125 3752
+f 3748 4126 4124
+f 4125 3751 3752
+f 3748 3749 4126
+f 3750 4127 3749
+f 3749 4127 4126
+f 4125 4127 3751
+f 3751 4127 3750
+f 4128 3758 3753
+f 3753 3754 4128
+f 4128 4129 3758
+f 3754 4130 4128
+f 4129 3757 3758
+f 3754 3755 4130
+f 3756 4131 3755
+f 3755 4131 4130
+f 4129 4131 3757
+f 3757 4131 3756
+f 4132 3764 3759
+f 3759 3760 4132
+f 4132 4133 3764
+f 3760 4134 4132
+f 4133 3763 3764
+f 3760 3761 4134
+f 3762 4135 3761
+f 3761 4135 4134
+f 4133 4135 3763
+f 3763 4135 3762
+f 4136 3770 3765
+f 3765 3766 4136
+f 4136 4137 3770
+f 3766 4138 4136
+f 4137 3769 3770
+f 3766 3767 4138
+f 3768 4139 3767
+f 3767 4139 4138
+f 4137 4139 3769
+f 3769 4139 3768
+f 4140 3776 3771
+f 3771 3772 4140
+f 4140 4141 3776
+f 3772 4142 4140
+f 4141 3775 3776
+f 3772 3773 4142
+f 3774 4143 3773
+f 3773 4143 4142
+f 4141 4143 3775
+f 3775 4143 3774
+f 4144 3782 3777
+f 3777 3778 4144
+f 4144 4145 3782
+f 3778 4146 4144
+f 4145 3781 3782
+f 3778 3779 4146
+f 3780 4147 3779
+f 3779 4147 4146
+f 4145 4147 3781
+f 3781 4147 3780
+f 4148 3788 3783
+f 3783 3784 4148
+f 4148 4149 3788
+f 3784 4150 4148
+f 4149 3787 3788
+f 3784 3785 4150
+f 3786 4151 3785
+f 3785 4151 4150
+f 4149 4151 3787
+f 3787 4151 3786
+f 4152 3794 3789
+f 3789 3790 4152
+f 4152 4153 3794
+f 3790 4154 4152
+f 4153 3793 3794
+f 3790 3791 4154
+f 3792 4155 3791
+f 3791 4155 4154
+f 4153 4155 3793
+f 3793 4155 3792
+f 4156 3800 3795
+f 3795 3796 4156
+f 4156 4157 3800
+f 3796 4158 4156
+f 4157 3799 3800
+f 3796 3797 4158
+f 3798 4159 3797
+f 3797 4159 4158
+f 4157 4159 3799
+f 3799 4159 3798
+f 4160 3806 3801
+f 3801 3802 4160
+f 4160 4161 3806
+f 3802 4162 4160
+f 4161 3805 3806
+f 3802 3803 4162
+f 3804 4163 3803
+f 3803 4163 4162
+f 4161 4163 3805
+f 3805 4163 3804
+f 4164 3812 3807
+f 3807 3808 4164
+f 4164 4165 3812
+f 3808 4166 4164
+f 4165 3811 3812
+f 3808 3809 4166
+f 3810 4167 3809
+f 3809 4167 4166
+f 4165 4167 3811
+f 3811 4167 3810
+f 4168 3818 3813
+f 3813 3814 4168
+f 4168 4169 3818
+f 3814 4170 4168
+f 4169 3817 3818
+f 3814 3815 4170
+f 3816 4171 3815
+f 3815 4171 4170
+f 4169 4171 3817
+f 3817 4171 3816
+f 4172 3824 3819
+f 3819 3820 4172
+f 4172 4173 3824
+f 3820 4174 4172
+f 4173 3823 3824
+f 3820 3821 4174
+f 3822 4175 3821
+f 3821 4175 4174
+f 4173 4175 3823
+f 3823 4175 3822
+f 3826 3825 4176
+f 4177 3826 4176
+f 3827 3826 4177
+f 4178 3827 4177
+f 3828 3827 4178
+f 4179 3828 4178
+f 3829 3828 4179
+f 4180 3829 4179
+f 3830 3829 4180
+f 4181 3830 4180
+f 3831 3830 4181
+f 4182 3831 4181
+f 3832 3831 4182
+f 4183 3832 4182
+f 3833 3832 4183
+f 4184 3833 4183
+f 3834 3833 4184
+f 4185 3834 4184
+f 3835 3834 4185
+f 4186 3835 4185
+f 3836 3835 4186
+f 4187 3836 4186
+f 3837 3836 4187
+f 4188 3837 4187
+f 3838 3837 4188
+f 4189 3838 4188
+f 3839 3838 4189
+f 4190 3839 4189
+f 3840 3839 4190
+f 4191 3840 4190
+f 3841 3840 4191
+f 4192 3841 4191
+f 3842 3841 4192
+f 4193 3842 4192
+f 3843 3842 4193
+f 4194 3843 4193
+f 3844 3843 4194
+f 4195 3844 4194
+f 3845 3844 4195
+f 4196 3845 4195
+f 3846 3845 4196
+f 4197 3846 4196
+f 3847 3846 4197
+f 4198 3847 4197
+f 3848 3847 4198
+f 4199 3848 4198
+f 3849 3848 4199
+f 4200 3849 4199
+f 3850 3849 4200
+f 4201 3850 4200
+f 3851 3850 4201
+f 4202 3851 4201
+f 3852 3851 4202
+f 4203 3852 4202
+f 4204 3853 3852
+f 4204 3852 4203
+f 4205 3854 3853
+f 4205 3853 4204
+f 4206 3855 3854
+f 4206 3854 4205
+f 4176 3825 3855
+f 4176 3855 4206
+f 3857 3856 4207
+f 4207 3856 4208
+f 3859 3857 4209
+f 4209 3857 4207
+f 3856 3858 4208
+f 4208 3858 4210
+f 3858 3859 4210
+f 4210 3859 4209
+f 3861 3860 4211
+f 4211 3860 4212
+f 3863 3861 4213
+f 4213 3861 4211
+f 3860 3862 4212
+f 4212 3862 4214
+f 3862 3863 4214
+f 4214 3863 4213
+f 3865 3864 4215
+f 4215 3864 4216
+f 3867 3865 4217
+f 4217 3865 4215
+f 3864 3866 4216
+f 4216 3866 4218
+f 3866 3867 4218
+f 4218 3867 4217
+f 3869 3868 4219
+f 4219 3868 4220
+f 3871 3869 4221
+f 4221 3869 4219
+f 3868 3870 4220
+f 4220 3870 4222
+f 3870 3871 4222
+f 4222 3871 4221
+f 3873 3872 4223
+f 4223 3872 4224
+f 3875 3873 4225
+f 4225 3873 4223
+f 3872 3874 4224
+f 4224 3874 4226
+f 3874 3875 4226
+f 4226 3875 4225
+f 3877 3876 4227
+f 4227 3876 4228
+f 3879 3877 4229
+f 4229 3877 4227
+f 3876 3878 4228
+f 4228 3878 4230
+f 3878 3879 4230
+f 4230 3879 4229
+f 3881 3880 4231
+f 4231 3880 4232
+f 3883 3881 4233
+f 4233 3881 4231
+f 3880 3882 4232
+f 4232 3882 4234
+f 3882 3883 4234
+f 4234 3883 4233
+f 3885 3884 4235
+f 4235 3884 4236
+f 3887 3885 4237
+f 4237 3885 4235
+f 3884 3886 4236
+f 4236 3886 4238
+f 3886 3887 4238
+f 4238 3887 4237
+f 3889 3888 4239
+f 4239 3888 4240
+f 3891 3889 4241
+f 4241 3889 4239
+f 3888 3890 4240
+f 4240 3890 4242
+f 3890 3891 4242
+f 4242 3891 4241
+f 3893 3892 4243
+f 4243 3892 4244
+f 3895 3893 4245
+f 4245 3893 4243
+f 3892 3894 4244
+f 4244 3894 4246
+f 3894 3895 4246
+f 4246 3895 4245
+f 3897 3896 4247
+f 4247 3896 4248
+f 3899 3897 4249
+f 4249 3897 4247
+f 3896 3898 4248
+f 4248 3898 4250
+f 3898 3899 4250
+f 4250 3899 4249
+f 3901 3900 4251
+f 4251 3900 4252
+f 3903 3901 4253
+f 4253 3901 4251
+f 3900 3902 4252
+f 4252 3902 4254
+f 3902 3903 4254
+f 4254 3903 4253
+f 3905 3904 4255
+f 4255 3904 4256
+f 3907 3905 4257
+f 4257 3905 4255
+f 3904 3906 4256
+f 4256 3906 4258
+f 3906 3907 4258
+f 4258 3907 4257
+f 3909 3908 4259
+f 4259 3908 4260
+f 3911 3909 4261
+f 4261 3909 4259
+f 3908 3910 4260
+f 4260 3910 4262
+f 3910 3911 4262
+f 4262 3911 4261
+f 3913 3912 4263
+f 4263 3912 4264
+f 3915 3913 4265
+f 4265 3913 4263
+f 3912 3914 4264
+f 4264 3914 4266
+f 3914 3915 4266
+f 4266 3915 4265
+f 3917 3916 4267
+f 4267 3916 4268
+f 3919 3917 4269
+f 4269 3917 4267
+f 3916 3918 4268
+f 4268 3918 4270
+f 3918 3919 4270
+f 4270 3919 4269
+f 3921 3920 4271
+f 4271 3920 4272
+f 3923 3921 4273
+f 4273 3921 4271
+f 3920 3922 4272
+f 4272 3922 4274
+f 3922 3923 4274
+f 4274 3923 4273
+f 3925 3924 4275
+f 4275 3924 4276
+f 3927 3925 4277
+f 4277 3925 4275
+f 3924 3926 4276
+f 4276 3926 4278
+f 3926 3927 4278
+f 4278 3927 4277
+f 3929 3928 4279
+f 4279 3928 4280
+f 3931 3929 4281
+f 4281 3929 4279
+f 3928 3930 4280
+f 4280 3930 4282
+f 3930 3931 4282
+f 4282 3931 4281
+f 3933 3932 4283
+f 4283 3932 4284
+f 3935 3933 4285
+f 4285 3933 4283
+f 3932 3934 4284
+f 4284 3934 4286
+f 3934 3935 4286
+f 4286 3935 4285
+f 3937 3936 4287
+f 4287 3936 4288
+f 3939 3937 4289
+f 4289 3937 4287
+f 3936 3938 4288
+f 4288 3938 4290
+f 3938 3939 4290
+f 4290 3939 4289
+f 3941 3940 4291
+f 4291 3940 4292
+f 3943 3941 4293
+f 4293 3941 4291
+f 3940 3942 4292
+f 4292 3942 4294
+f 3942 3943 4294
+f 4294 3943 4293
+f 3945 3944 4295
+f 4295 3944 4296
+f 3947 3945 4297
+f 4297 3945 4295
+f 3944 3946 4296
+f 4296 3946 4298
+f 3946 3947 4298
+f 4298 3947 4297
+f 3949 3948 4299
+f 4299 3948 4300
+f 3951 3949 4301
+f 4301 3949 4299
+f 3948 3950 4300
+f 4300 3950 4302
+f 3950 3951 4302
+f 4302 3951 4301
+f 3953 3952 4303
+f 4303 3952 4304
+f 3955 3953 4305
+f 4305 3953 4303
+f 3952 3954 4304
+f 4304 3954 4306
+f 3954 3955 4306
+f 4306 3955 4305
+f 3957 3956 4307
+f 4307 3956 4308
+f 3959 3957 4309
+f 4309 3957 4307
+f 3956 3958 4308
+f 4308 3958 4310
+f 3958 3959 4310
+f 4310 3959 4309
+f 3961 3960 4311
+f 4311 3960 4312
+f 3963 3961 4313
+f 4313 3961 4311
+f 3960 3962 4312
+f 4312 3962 4314
+f 3962 3963 4314
+f 4314 3963 4313
+f 3965 3964 4315
+f 4315 3964 4316
+f 3967 3965 4317
+f 4317 3965 4315
+f 3964 3966 4316
+f 4316 3966 4318
+f 3966 3967 4318
+f 4318 3967 4317
+f 3969 3968 4319
+f 4319 3968 4320
+f 3971 3969 4321
+f 4321 3969 4319
+f 3968 3970 4320
+f 4320 3970 4322
+f 3970 3971 4322
+f 4322 3971 4321
+f 3973 3972 4323
+f 4323 3972 4324
+f 3975 3973 4325
+f 4325 3973 4323
+f 3972 3974 4324
+f 4324 3974 4326
+f 3974 3975 4326
+f 4326 3975 4325
+f 3977 3976 4327
+f 4327 3976 4328
+f 3979 3977 4329
+f 4329 3977 4327
+f 3976 3978 4328
+f 4328 3978 4330
+f 3978 3979 4330
+f 4330 3979 4329
+f 3981 3980 4331
+f 4331 3980 4332
+f 3983 3981 4333
+f 4333 3981 4331
+f 3980 3982 4332
+f 4332 3982 4334
+f 3982 3983 4334
+f 4334 3983 4333
+f 3985 3984 4335
+f 4335 3984 4336
+f 3987 3985 4337
+f 4337 3985 4335
+f 3984 3986 4336
+f 4336 3986 4338
+f 3986 3987 4338
+f 4338 3987 4337
+f 3989 3988 4339
+f 4339 3988 4340
+f 3991 3989 4341
+f 4341 3989 4339
+f 3988 3990 4340
+f 4340 3990 4342
+f 3990 3991 4342
+f 4342 3991 4341
+f 3993 3992 4343
+f 4343 3992 4344
+f 3995 3993 4345
+f 4345 3993 4343
+f 3992 3994 4344
+f 4344 3994 4346
+f 3994 3995 4346
+f 4346 3995 4345
+f 3997 3996 4347
+f 4347 3996 4348
+f 3999 3997 4349
+f 4349 3997 4347
+f 3996 3998 4348
+f 4348 3998 4350
+f 3998 3999 4350
+f 4350 3999 4349
+f 4001 4000 4351
+f 4351 4000 4352
+f 4003 4001 4353
+f 4353 4001 4351
+f 4000 4002 4352
+f 4352 4002 4354
+f 4002 4003 4354
+f 4354 4003 4353
+f 4005 4004 4355
+f 4355 4004 4356
+f 4007 4005 4357
+f 4357 4005 4355
+f 4004 4006 4356
+f 4356 4006 4358
+f 4006 4007 4358
+f 4358 4007 4357
+f 4009 4008 4359
+f 4359 4008 4360
+f 4011 4009 4361
+f 4361 4009 4359
+f 4008 4010 4360
+f 4360 4010 4362
+f 4010 4011 4362
+f 4362 4011 4361
+f 4013 4012 4363
+f 4363 4012 4364
+f 4015 4013 4365
+f 4365 4013 4363
+f 4012 4014 4364
+f 4364 4014 4366
+f 4014 4015 4366
+f 4366 4015 4365
+f 4017 4016 4367
+f 4367 4016 4368
+f 4019 4017 4369
+f 4369 4017 4367
+f 4016 4018 4368
+f 4368 4018 4370
+f 4018 4019 4370
+f 4370 4019 4369
+f 4021 4020 4371
+f 4371 4020 4372
+f 4023 4021 4373
+f 4373 4021 4371
+f 4020 4022 4372
+f 4372 4022 4374
+f 4022 4023 4374
+f 4374 4023 4373
+f 4025 4024 4375
+f 4375 4024 4376
+f 4027 4025 4377
+f 4377 4025 4375
+f 4024 4026 4376
+f 4376 4026 4378
+f 4026 4027 4378
+f 4378 4027 4377
+f 4029 4028 4379
+f 4379 4028 4380
+f 4031 4029 4381
+f 4381 4029 4379
+f 4028 4030 4380
+f 4380 4030 4382
+f 4030 4031 4382
+f 4382 4031 4381
+f 4033 4032 4383
+f 4383 4032 4384
+f 4035 4033 4385
+f 4385 4033 4383
+f 4032 4034 4384
+f 4384 4034 4386
+f 4034 4035 4386
+f 4386 4035 4385
+f 4037 4036 4387
+f 4387 4036 4388
+f 4039 4037 4389
+f 4389 4037 4387
+f 4036 4038 4388
+f 4388 4038 4390
+f 4038 4039 4390
+f 4390 4039 4389
+f 4041 4040 4391
+f 4391 4040 4392
+f 4043 4041 4393
+f 4393 4041 4391
+f 4040 4042 4392
+f 4392 4042 4394
+f 4042 4043 4394
+f 4394 4043 4393
+f 4045 4044 4395
+f 4395 4044 4396
+f 4047 4045 4397
+f 4397 4045 4395
+f 4044 4046 4396
+f 4396 4046 4398
+f 4046 4047 4398
+f 4398 4047 4397
+f 4049 4048 4399
+f 4399 4048 4400
+f 4051 4049 4401
+f 4401 4049 4399
+f 4048 4050 4400
+f 4400 4050 4402
+f 4050 4051 4402
+f 4402 4051 4401
+f 4053 4052 4403
+f 4403 4052 4404
+f 4055 4053 4405
+f 4405 4053 4403
+f 4052 4054 4404
+f 4404 4054 4406
+f 4054 4055 4406
+f 4406 4055 4405
+f 4057 4056 4407
+f 4407 4056 4408
+f 4059 4057 4409
+f 4409 4057 4407
+f 4056 4058 4408
+f 4408 4058 4410
+f 4058 4059 4410
+f 4410 4059 4409
+f 4061 4060 4411
+f 4411 4060 4412
+f 4063 4061 4413
+f 4413 4061 4411
+f 4060 4062 4412
+f 4412 4062 4414
+f 4062 4063 4414
+f 4414 4063 4413
+f 4065 4064 4415
+f 4415 4064 4416
+f 4067 4065 4417
+f 4417 4065 4415
+f 4064 4066 4416
+f 4416 4066 4418
+f 4066 4067 4418
+f 4418 4067 4417
+f 4069 4068 4419
+f 4419 4068 4420
+f 4071 4069 4421
+f 4421 4069 4419
+f 4068 4070 4420
+f 4420 4070 4422
+f 4070 4071 4422
+f 4422 4071 4421
+f 4073 4072 4423
+f 4423 4072 4424
+f 4075 4073 4425
+f 4425 4073 4423
+f 4072 4074 4424
+f 4424 4074 4426
+f 4074 4075 4426
+f 4426 4075 4425
+f 4077 4076 4427
+f 4427 4076 4428
+f 4079 4077 4429
+f 4429 4077 4427
+f 4076 4078 4428
+f 4428 4078 4430
+f 4078 4079 4430
+f 4430 4079 4429
+f 4081 4080 4431
+f 4431 4080 4432
+f 4083 4081 4433
+f 4433 4081 4431
+f 4080 4082 4432
+f 4432 4082 4434
+f 4082 4083 4434
+f 4434 4083 4433
+f 4085 4084 4435
+f 4435 4084 4436
+f 4087 4085 4437
+f 4437 4085 4435
+f 4084 4086 4436
+f 4436 4086 4438
+f 4086 4087 4438
+f 4438 4087 4437
+f 4089 4088 4439
+f 4439 4088 4440
+f 4091 4089 4441
+f 4441 4089 4439
+f 4088 4090 4440
+f 4440 4090 4442
+f 4090 4091 4442
+f 4442 4091 4441
+f 4093 4092 4443
+f 4443 4092 4444
+f 4095 4093 4445
+f 4445 4093 4443
+f 4092 4094 4444
+f 4444 4094 4446
+f 4094 4095 4446
+f 4446 4095 4445
+f 4097 4096 4447
+f 4447 4096 4448
+f 4099 4097 4449
+f 4449 4097 4447
+f 4096 4098 4448
+f 4448 4098 4450
+f 4098 4099 4450
+f 4450 4099 4449
+f 4101 4100 4451
+f 4451 4100 4452
+f 4103 4101 4453
+f 4453 4101 4451
+f 4100 4102 4452
+f 4452 4102 4454
+f 4102 4103 4454
+f 4454 4103 4453
+f 4105 4104 4455
+f 4455 4104 4456
+f 4107 4105 4457
+f 4457 4105 4455
+f 4104 4106 4456
+f 4456 4106 4458
+f 4106 4107 4458
+f 4458 4107 4457
+f 4109 4108 4459
+f 4459 4108 4460
+f 4111 4109 4461
+f 4461 4109 4459
+f 4108 4110 4460
+f 4460 4110 4462
+f 4110 4111 4462
+f 4462 4111 4461
+f 4113 4112 4463
+f 4463 4112 4464
+f 4115 4113 4465
+f 4465 4113 4463
+f 4112 4114 4464
+f 4464 4114 4466
+f 4114 4115 4466
+f 4466 4115 4465
+f 4117 4116 4467
+f 4467 4116 4468
+f 4119 4117 4469
+f 4469 4117 4467
+f 4116 4118 4468
+f 4468 4118 4470
+f 4118 4119 4470
+f 4470 4119 4469
+f 4121 4120 4471
+f 4471 4120 4472
+f 4123 4121 4473
+f 4473 4121 4471
+f 4120 4122 4472
+f 4472 4122 4474
+f 4122 4123 4474
+f 4474 4123 4473
+f 4125 4124 4475
+f 4475 4124 4476
+f 4127 4125 4477
+f 4477 4125 4475
+f 4124 4126 4476
+f 4476 4126 4478
+f 4126 4127 4478
+f 4478 4127 4477
+f 4129 4128 4479
+f 4479 4128 4480
+f 4131 4129 4481
+f 4481 4129 4479
+f 4128 4130 4480
+f 4480 4130 4482
+f 4130 4131 4482
+f 4482 4131 4481
+f 4133 4132 4483
+f 4483 4132 4484
+f 4135 4133 4485
+f 4485 4133 4483
+f 4132 4134 4484
+f 4484 4134 4486
+f 4134 4135 4486
+f 4486 4135 4485
+f 4137 4136 4487
+f 4487 4136 4488
+f 4139 4137 4489
+f 4489 4137 4487
+f 4136 4138 4488
+f 4488 4138 4490
+f 4138 4139 4490
+f 4490 4139 4489
+f 4141 4140 4491
+f 4491 4140 4492
+f 4143 4141 4493
+f 4493 4141 4491
+f 4140 4142 4492
+f 4492 4142 4494
+f 4142 4143 4494
+f 4494 4143 4493
+f 4145 4144 4495
+f 4495 4144 4496
+f 4147 4145 4497
+f 4497 4145 4495
+f 4144 4146 4496
+f 4496 4146 4498
+f 4146 4147 4498
+f 4498 4147 4497
+f 4149 4148 4499
+f 4499 4148 4500
+f 4151 4149 4501
+f 4501 4149 4499
+f 4148 4150 4500
+f 4500 4150 4502
+f 4150 4151 4502
+f 4502 4151 4501
+f 4153 4152 4503
+f 4503 4152 4504
+f 4155 4153 4505
+f 4505 4153 4503
+f 4152 4154 4504
+f 4504 4154 4506
+f 4154 4155 4506
+f 4506 4155 4505
+f 4157 4156 4507
+f 4507 4156 4508
+f 4159 4157 4509
+f 4509 4157 4507
+f 4156 4158 4508
+f 4508 4158 4510
+f 4158 4159 4510
+f 4510 4159 4509
+f 4161 4160 4511
+f 4511 4160 4512
+f 4163 4161 4513
+f 4513 4161 4511
+f 4160 4162 4512
+f 4512 4162 4514
+f 4162 4163 4514
+f 4514 4163 4513
+f 4165 4164 4515
+f 4515 4164 4516
+f 4167 4165 4517
+f 4517 4165 4515
+f 4164 4166 4516
+f 4516 4166 4518
+f 4166 4167 4518
+f 4518 4167 4517
+f 4169 4168 4519
+f 4519 4168 4520
+f 4171 4169 4521
+f 4521 4169 4519
+f 4168 4170 4520
+f 4520 4170 4522
+f 4170 4171 4522
+f 4522 4171 4521
+f 4173 4172 4523
+f 4523 4172 4524
+f 4175 4173 4525
+f 4525 4173 4523
+f 4172 4174 4524
+f 4524 4174 4526
+f 4174 4175 4526
+f 4526 4175 4525
+f 4177 4176 4527
+f 4528 4177 4527
+f 4178 4177 4528
+f 4529 4178 4528
+f 4179 4178 4529
+f 4530 4179 4529
+f 4180 4179 4530
+f 4531 4180 4530
+f 4181 4180 4531
+f 4532 4181 4531
+f 4182 4181 4532
+f 4533 4182 4532
+f 4183 4182 4533
+f 4534 4183 4533
+f 4184 4183 4534
+f 4535 4184 4534
+f 4185 4184 4535
+f 4536 4185 4535
+f 4186 4185 4536
+f 4537 4186 4536
+f 4187 4186 4537
+f 4538 4187 4537
+f 4188 4187 4538
+f 4539 4188 4538
+f 4189 4188 4539
+f 4540 4189 4539
+f 4190 4189 4540
+f 4541 4190 4540
+f 4191 4190 4541
+f 4542 4191 4541
+f 4192 4191 4542
+f 4543 4192 4542
+f 4193 4192 4543
+f 4544 4193 4543
+f 4194 4193 4544
+f 4545 4194 4544
+f 4195 4194 4545
+f 4546 4195 4545
+f 4196 4195 4546
+f 4547 4196 4546
+f 4197 4196 4547
+f 4548 4197 4547
+f 4198 4197 4548
+f 4549 4198 4548
+f 4199 4198 4549
+f 4550 4199 4549
+f 4200 4199 4550
+f 4551 4200 4550
+f 4201 4200 4551
+f 4552 4201 4551
+f 4202 4201 4552
+f 4553 4202 4552
+f 4203 4202 4553
+f 4554 4203 4553
+f 4204 4203 4554
+f 4555 4204 4554
+f 4205 4204 4555
+f 4556 4205 4555
+f 4206 4205 4556
+f 4557 4206 4556
+f 4176 4206 4557
+f 4527 4176 4557
+f 4558 4208 4559
+f 4560 4559 4208
+f 4207 4208 4558
+f 4210 4560 4208
+f 4561 4207 4558
+f 4562 4560 4210
+f 4209 4561 4563
+f 4209 4563 4562
+f 4209 4207 4561
+f 4209 4562 4210
+f 4564 4212 4565
+f 4566 4565 4212
+f 4211 4212 4564
+f 4214 4566 4212
+f 4567 4211 4564
+f 4568 4566 4214
+f 4213 4567 4569
+f 4213 4569 4568
+f 4213 4211 4567
+f 4213 4568 4214
+f 4570 4216 4571
+f 4572 4571 4216
+f 4218 4572 4216
+f 4215 4216 4570
+f 4573 4215 4570
+f 4574 4572 4218
+f 4217 4573 4575
+f 4217 4575 4574
+f 4217 4215 4573
+f 4217 4574 4218
+f 4576 4220 4577
+f 4578 4577 4220
+f 4222 4578 4220
+f 4219 4220 4576
+f 4579 4219 4576
+f 4580 4578 4222
+f 4221 4579 4581
+f 4221 4581 4580
+f 4221 4219 4579
+f 4221 4580 4222
+f 4582 4224 4583
+f 4584 4583 4224
+f 4223 4224 4582
+f 4226 4584 4224
+f 4585 4223 4582
+f 4586 4584 4226
+f 4225 4585 4587
+f 4225 4587 4586
+f 4225 4223 4585
+f 4225 4586 4226
+f 4588 4228 4589
+f 4590 4589 4228
+f 4230 4590 4228
+f 4227 4228 4588
+f 4591 4227 4588
+f 4592 4590 4230
+f 4229 4591 4593
+f 4229 4593 4592
+f 4229 4227 4591
+f 4229 4592 4230
+f 4594 4232 4595
+f 4596 4595 4232
+f 4231 4232 4594
+f 4234 4596 4232
+f 4597 4231 4594
+f 4598 4596 4234
+f 4233 4597 4599
+f 4233 4599 4598
+f 4233 4231 4597
+f 4233 4598 4234
+f 4600 4236 4601
+f 4602 4601 4236
+f 4238 4602 4236
+f 4235 4236 4600
+f 4603 4235 4600
+f 4604 4602 4238
+f 4237 4603 4605
+f 4237 4605 4604
+f 4237 4235 4603
+f 4237 4604 4238
+f 4606 4240 4607
+f 4608 4607 4240
+f 4239 4240 4606
+f 4242 4608 4240
+f 4609 4239 4606
+f 4610 4608 4242
+f 4241 4609 4611
+f 4241 4611 4610
+f 4241 4239 4609
+f 4241 4610 4242
+f 4612 4244 4613
+f 4614 4613 4244
+f 4243 4244 4612
+f 4246 4614 4244
+f 4615 4243 4612
+f 4616 4614 4246
+f 4245 4615 4617
+f 4245 4617 4616
+f 4245 4243 4615
+f 4245 4616 4246
+f 4618 4248 4619
+f 4620 4619 4248
+f 4247 4248 4618
+f 4250 4620 4248
+f 4621 4247 4618
+f 4622 4620 4250
+f 4249 4621 4623
+f 4249 4623 4622
+f 4249 4247 4621
+f 4249 4622 4250
+f 4624 4252 4625
+f 4626 4625 4252
+f 4251 4252 4624
+f 4254 4626 4252
+f 4627 4251 4624
+f 4628 4626 4254
+f 4253 4627 4629
+f 4253 4629 4628
+f 4253 4251 4627
+f 4253 4628 4254
+f 4630 4256 4631
+f 4632 4631 4256
+f 4255 4256 4630
+f 4258 4632 4256
+f 4633 4255 4630
+f 4634 4632 4258
+f 4257 4633 4635
+f 4257 4635 4634
+f 4257 4255 4633
+f 4257 4634 4258
+f 4636 4260 4637
+f 4638 4637 4260
+f 4259 4260 4636
+f 4262 4638 4260
+f 4639 4259 4636
+f 4640 4638 4262
+f 4261 4639 4641
+f 4261 4641 4640
+f 4261 4259 4639
+f 4261 4640 4262
+f 4642 4264 4643
+f 4644 4643 4264
+f 4266 4644 4264
+f 4263 4264 4642
+f 4645 4263 4642
+f 4646 4644 4266
+f 4265 4645 4647
+f 4265 4647 4646
+f 4265 4263 4645
+f 4265 4646 4266
+f 4648 4268 4649
+f 4650 4649 4268
+f 4267 4268 4648
+f 4270 4650 4268
+f 4651 4267 4648
+f 4652 4650 4270
+f 4269 4651 4653
+f 4269 4653 4652
+f 4269 4267 4651
+f 4269 4652 4270
+f 4654 4272 4655
+f 4656 4655 4272
+f 4274 4656 4272
+f 4271 4272 4654
+f 4657 4271 4654
+f 4658 4656 4274
+f 4273 4657 4659
+f 4273 4659 4658
+f 4273 4271 4657
+f 4273 4658 4274
+f 4660 4276 4661
+f 4662 4661 4276
+f 4278 4662 4276
+f 4275 4276 4660
+f 4663 4275 4660
+f 4664 4662 4278
+f 4277 4663 4665
+f 4277 4665 4664
+f 4277 4275 4663
+f 4277 4664 4278
+f 4666 4280 4667
+f 4668 4667 4280
+f 4282 4668 4280
+f 4279 4280 4666
+f 4669 4279 4666
+f 4670 4668 4282
+f 4281 4669 4671
+f 4281 4671 4670
+f 4281 4279 4669
+f 4281 4670 4282
+f 4672 4284 4673
+f 4674 4673 4284
+f 4283 4284 4672
+f 4286 4674 4284
+f 4675 4283 4672
+f 4676 4674 4286
+f 4285 4675 4677
+f 4285 4677 4676
+f 4285 4283 4675
+f 4285 4676 4286
+f 4678 4288 4679
+f 4680 4679 4288
+f 4287 4288 4678
+f 4290 4680 4288
+f 4681 4287 4678
+f 4682 4680 4290
+f 4289 4681 4683
+f 4289 4683 4682
+f 4289 4287 4681
+f 4289 4682 4290
+f 4684 4292 4685
+f 4686 4685 4292
+f 4294 4686 4292
+f 4291 4292 4684
+f 4687 4291 4684
+f 4688 4686 4294
+f 4293 4687 4689
+f 4293 4689 4688
+f 4293 4291 4687
+f 4293 4688 4294
+f 4690 4296 4691
+f 4692 4691 4296
+f 4295 4296 4690
+f 4298 4692 4296
+f 4693 4295 4690
+f 4694 4692 4298
+f 4297 4693 4695
+f 4297 4695 4694
+f 4297 4295 4693
+f 4297 4694 4298
+f 4696 4300 4697
+f 4698 4697 4300
+f 4299 4300 4696
+f 4302 4698 4300
+f 4699 4299 4696
+f 4700 4698 4302
+f 4301 4699 4701
+f 4301 4701 4700
+f 4301 4299 4699
+f 4301 4700 4302
+f 4702 4304 4703
+f 4704 4703 4304
+f 4303 4304 4702
+f 4306 4704 4304
+f 4705 4303 4702
+f 4706 4704 4306
+f 4305 4705 4707
+f 4305 4707 4706
+f 4305 4303 4705
+f 4305 4706 4306
+f 4708 4308 4709
+f 4710 4709 4308
+f 4310 4710 4308
+f 4307 4308 4708
+f 4711 4307 4708
+f 4712 4710 4310
+f 4309 4711 4713
+f 4309 4713 4712
+f 4309 4307 4711
+f 4309 4712 4310
+f 4714 4312 4715
+f 4716 4715 4312
+f 4311 4312 4714
+f 4314 4716 4312
+f 4717 4311 4714
+f 4718 4716 4314
+f 4313 4717 4719
+f 4313 4719 4718
+f 4313 4311 4717
+f 4313 4718 4314
+f 4720 4316 4721
+f 4722 4721 4316
+f 4315 4316 4720
+f 4318 4722 4316
+f 4723 4315 4720
+f 4724 4722 4318
+f 4317 4723 4725
+f 4317 4725 4724
+f 4317 4315 4723
+f 4317 4724 4318
+f 4726 4320 4727
+f 4728 4727 4320
+f 4322 4728 4320
+f 4319 4320 4726
+f 4729 4319 4726
+f 4730 4728 4322
+f 4321 4729 4731
+f 4321 4731 4730
+f 4321 4319 4729
+f 4321 4730 4322
+f 4732 4324 4733
+f 4734 4733 4324
+f 4323 4324 4732
+f 4326 4734 4324
+f 4735 4323 4732
+f 4736 4734 4326
+f 4325 4735 4737
+f 4325 4737 4736
+f 4325 4323 4735
+f 4325 4736 4326
+f 4738 4328 4739
+f 4740 4739 4328
+f 4327 4328 4738
+f 4330 4740 4328
+f 4741 4327 4738
+f 4742 4740 4330
+f 4329 4741 4743
+f 4329 4743 4742
+f 4329 4327 4741
+f 4329 4742 4330
+f 4744 4332 4745
+f 4746 4745 4332
+f 4331 4332 4744
+f 4334 4746 4332
+f 4747 4331 4744
+f 4748 4746 4334
+f 4333 4747 4749
+f 4333 4749 4748
+f 4333 4331 4747
+f 4333 4748 4334
+f 4750 4336 4751
+f 4752 4751 4336
+f 4335 4336 4750
+f 4338 4752 4336
+f 4753 4335 4750
+f 4754 4752 4338
+f 4337 4753 4755
+f 4337 4755 4754
+f 4337 4335 4753
+f 4337 4754 4338
+f 4756 4340 4757
+f 4758 4757 4340
+f 4342 4758 4340
+f 4339 4340 4756
+f 4759 4339 4756
+f 4760 4758 4342
+f 4341 4759 4761
+f 4341 4761 4760
+f 4341 4339 4759
+f 4341 4760 4342
+f 4762 4344 4763
+f 4764 4763 4344
+f 4346 4764 4344
+f 4343 4344 4762
+f 4765 4343 4762
+f 4766 4764 4346
+f 4345 4765 4767
+f 4345 4767 4766
+f 4345 4343 4765
+f 4345 4766 4346
+f 4768 4348 4769
+f 4770 4769 4348
+f 4347 4348 4768
+f 4350 4770 4348
+f 4771 4347 4768
+f 4772 4770 4350
+f 4349 4771 4773
+f 4349 4773 4772
+f 4349 4347 4771
+f 4349 4772 4350
+f 4774 4352 4775
+f 4776 4775 4352
+f 4351 4352 4774
+f 4354 4776 4352
+f 4777 4351 4774
+f 4778 4776 4354
+f 4353 4777 4779
+f 4353 4779 4778
+f 4353 4351 4777
+f 4353 4778 4354
+f 4780 4356 4781
+f 4782 4781 4356
+f 4355 4356 4780
+f 4358 4782 4356
+f 4783 4355 4780
+f 4784 4782 4358
+f 4357 4783 4785
+f 4357 4785 4784
+f 4357 4355 4783
+f 4357 4784 4358
+f 4786 4360 4787
+f 4788 4787 4360
+f 4362 4788 4360
+f 4359 4360 4786
+f 4789 4359 4786
+f 4790 4788 4362
+f 4361 4789 4791
+f 4361 4791 4790
+f 4361 4359 4789
+f 4361 4790 4362
+f 4792 4364 4793
+f 4794 4793 4364
+f 4363 4364 4792
+f 4366 4794 4364
+f 4795 4363 4792
+f 4796 4794 4366
+f 4365 4795 4797
+f 4365 4797 4796
+f 4365 4363 4795
+f 4365 4796 4366
+f 4798 4368 4799
+f 4800 4799 4368
+f 4367 4368 4798
+f 4370 4800 4368
+f 4801 4367 4798
+f 4802 4800 4370
+f 4369 4801 4803
+f 4369 4803 4802
+f 4369 4367 4801
+f 4369 4802 4370
+f 4804 4372 4805
+f 4806 4805 4372
+f 4371 4372 4804
+f 4374 4806 4372
+f 4807 4371 4804
+f 4808 4806 4374
+f 4373 4807 4809
+f 4373 4809 4808
+f 4373 4371 4807
+f 4373 4808 4374
+f 4810 4376 4811
+f 4812 4811 4376
+f 4378 4812 4376
+f 4375 4376 4810
+f 4813 4375 4810
+f 4814 4812 4378
+f 4377 4813 4815
+f 4377 4815 4814
+f 4377 4375 4813
+f 4377 4814 4378
+f 4816 4380 4817
+f 4818 4817 4380
+f 4379 4380 4816
+f 4382 4818 4380
+f 4819 4379 4816
+f 4820 4818 4382
+f 4381 4819 4821
+f 4381 4821 4820
+f 4381 4379 4819
+f 4381 4820 4382
+f 4822 4384 4823
+f 4824 4823 4384
+f 4383 4384 4822
+f 4386 4824 4384
+f 4825 4383 4822
+f 4826 4824 4386
+f 4385 4825 4827
+f 4385 4827 4826
+f 4385 4383 4825
+f 4385 4826 4386
+f 4828 4388 4829
+f 4830 4829 4388
+f 4387 4388 4828
+f 4390 4830 4388
+f 4831 4387 4828
+f 4832 4830 4390
+f 4389 4831 4833
+f 4389 4833 4832
+f 4389 4387 4831
+f 4389 4832 4390
+f 4834 4392 4835
+f 4836 4835 4392
+f 4394 4836 4392
+f 4391 4392 4834
+f 4837 4391 4834
+f 4838 4836 4394
+f 4393 4837 4839
+f 4393 4839 4838
+f 4393 4391 4837
+f 4393 4838 4394
+f 4840 4396 4841
+f 4842 4841 4396
+f 4395 4396 4840
+f 4398 4842 4396
+f 4843 4395 4840
+f 4844 4842 4398
+f 4397 4843 4845
+f 4397 4845 4844
+f 4397 4395 4843
+f 4397 4844 4398
+f 4846 4400 4847
+f 4848 4847 4400
+f 4399 4400 4846
+f 4402 4848 4400
+f 4849 4399 4846
+f 4850 4848 4402
+f 4401 4849 4851
+f 4401 4851 4850
+f 4401 4399 4849
+f 4401 4850 4402
+f 4852 4404 4853
+f 4854 4853 4404
+f 4403 4404 4852
+f 4406 4854 4404
+f 4855 4403 4852
+f 4856 4854 4406
+f 4405 4855 4857
+f 4405 4857 4856
+f 4405 4403 4855
+f 4405 4856 4406
+f 4858 4408 4859
+f 4860 4859 4408
+f 4410 4860 4408
+f 4407 4408 4858
+f 4861 4407 4858
+f 4862 4860 4410
+f 4409 4861 4863
+f 4409 4863 4862
+f 4409 4407 4861
+f 4409 4862 4410
+f 4864 4412 4865
+f 4866 4865 4412
+f 4411 4412 4864
+f 4414 4866 4412
+f 4867 4411 4864
+f 4868 4866 4414
+f 4413 4867 4869
+f 4413 4869 4868
+f 4413 4411 4867
+f 4413 4868 4414
+f 4870 4416 4871
+f 4872 4871 4416
+f 4415 4416 4870
+f 4418 4872 4416
+f 4873 4415 4870
+f 4874 4872 4418
+f 4417 4873 4875
+f 4417 4875 4874
+f 4417 4415 4873
+f 4417 4874 4418
+f 4876 4420 4877
+f 4878 4877 4420
+f 4419 4420 4876
+f 4422 4878 4420
+f 4879 4419 4876
+f 4880 4878 4422
+f 4421 4879 4881
+f 4421 4881 4880
+f 4421 4419 4879
+f 4421 4880 4422
+f 4882 4424 4883
+f 4884 4883 4424
+f 4426 4884 4424
+f 4423 4424 4882
+f 4885 4423 4882
+f 4886 4884 4426
+f 4425 4885 4887
+f 4425 4887 4886
+f 4425 4423 4885
+f 4425 4886 4426
+f 4888 4428 4889
+f 4890 4889 4428
+f 4427 4428 4888
+f 4430 4890 4428
+f 4891 4427 4888
+f 4892 4890 4430
+f 4429 4891 4893
+f 4429 4893 4892
+f 4429 4427 4891
+f 4429 4892 4430
+f 4894 4432 4895
+f 4896 4895 4432
+f 4434 4896 4432
+f 4431 4432 4894
+f 4897 4431 4894
+f 4898 4896 4434
+f 4433 4897 4899
+f 4433 4899 4898
+f 4433 4431 4897
+f 4433 4898 4434
+f 4900 4436 4901
+f 4902 4901 4436
+f 4438 4902 4436
+f 4435 4436 4900
+f 4903 4435 4900
+f 4904 4902 4438
+f 4437 4903 4905
+f 4437 4905 4904
+f 4437 4435 4903
+f 4437 4904 4438
+f 4906 4440 4907
+f 4908 4907 4440
+f 4442 4908 4440
+f 4439 4440 4906
+f 4909 4439 4906
+f 4910 4908 4442
+f 4441 4909 4911
+f 4441 4911 4910
+f 4441 4439 4909
+f 4441 4910 4442
+f 4912 4444 4913
+f 4914 4913 4444
+f 4446 4914 4444
+f 4443 4444 4912
+f 4915 4443 4912
+f 4916 4914 4446
+f 4445 4915 4917
+f 4445 4917 4916
+f 4445 4443 4915
+f 4445 4916 4446
+f 4918 4448 4919
+f 4920 4919 4448
+f 4447 4448 4918
+f 4450 4920 4448
+f 4921 4447 4918
+f 4922 4920 4450
+f 4449 4921 4923
+f 4449 4923 4922
+f 4449 4447 4921
+f 4449 4922 4450
+f 4924 4452 4925
+f 4926 4925 4452
+f 4454 4926 4452
+f 4451 4452 4924
+f 4927 4451 4924
+f 4928 4926 4454
+f 4453 4927 4929
+f 4453 4929 4928
+f 4453 4451 4927
+f 4453 4928 4454
+f 4930 4456 4931
+f 4932 4931 4456
+f 4458 4932 4456
+f 4455 4456 4930
+f 4933 4455 4930
+f 4934 4932 4458
+f 4457 4933 4935
+f 4457 4935 4934
+f 4457 4455 4933
+f 4457 4934 4458
+f 4936 4460 4937
+f 4938 4937 4460
+f 4459 4460 4936
+f 4462 4938 4460
+f 4939 4459 4936
+f 4940 4938 4462
+f 4461 4939 4941
+f 4461 4941 4940
+f 4461 4459 4939
+f 4461 4940 4462
+f 4942 4464 4943
+f 4944 4943 4464
+f 4463 4464 4942
+f 4466 4944 4464
+f 4945 4463 4942
+f 4946 4944 4466
+f 4465 4945 4947
+f 4465 4947 4946
+f 4465 4463 4945
+f 4465 4946 4466
+f 4948 4468 4949
+f 4950 4949 4468
+f 4470 4950 4468
+f 4467 4468 4948
+f 4951 4467 4948
+f 4952 4950 4470
+f 4469 4951 4953
+f 4469 4953 4952
+f 4469 4467 4951
+f 4469 4952 4470
+f 4954 4472 4955
+f 4956 4955 4472
+f 4471 4472 4954
+f 4474 4956 4472
+f 4957 4471 4954
+f 4958 4956 4474
+f 4473 4957 4959
+f 4473 4959 4958
+f 4473 4471 4957
+f 4473 4958 4474
+f 4960 4476 4961
+f 4962 4961 4476
+f 4475 4476 4960
+f 4478 4962 4476
+f 4963 4475 4960
+f 4964 4962 4478
+f 4477 4963 4965
+f 4477 4965 4964
+f 4477 4475 4963
+f 4477 4964 4478
+f 4966 4480 4967
+f 4968 4967 4480
+f 4482 4968 4480
+f 4479 4480 4966
+f 4969 4479 4966
+f 4970 4968 4482
+f 4481 4969 4971
+f 4481 4971 4970
+f 4481 4479 4969
+f 4481 4970 4482
+f 4972 4484 4973
+f 4974 4973 4484
+f 4483 4484 4972
+f 4486 4974 4484
+f 4975 4483 4972
+f 4976 4974 4486
+f 4485 4975 4977
+f 4485 4977 4976
+f 4485 4483 4975
+f 4485 4976 4486
+f 4978 4488 4979
+f 4980 4979 4488
+f 4487 4488 4978
+f 4490 4980 4488
+f 4981 4487 4978
+f 4982 4980 4490
+f 4489 4981 4983
+f 4489 4983 4982
+f 4489 4487 4981
+f 4489 4982 4490
+f 4984 4492 4985
+f 4986 4985 4492
+f 4491 4492 4984
+f 4494 4986 4492
+f 4987 4491 4984
+f 4988 4986 4494
+f 4493 4987 4989
+f 4493 4989 4988
+f 4493 4491 4987
+f 4493 4988 4494
+f 4990 4496 4991
+f 4992 4991 4496
+f 4495 4496 4990
+f 4498 4992 4496
+f 4993 4495 4990
+f 4994 4992 4498
+f 4497 4993 4995
+f 4497 4995 4994
+f 4497 4495 4993
+f 4497 4994 4498
+f 4996 4500 4997
+f 4998 4997 4500
+f 4499 4500 4996
+f 4502 4998 4500
+f 4999 4499 4996
+f 5000 4998 4502
+f 4501 4999 5001
+f 4501 5001 5000
+f 4501 4499 4999
+f 4501 5000 4502
+f 5002 4504 5003
+f 5004 5003 4504
+f 4503 4504 5002
+f 4506 5004 4504
+f 5005 4503 5002
+f 5006 5004 4506
+f 4505 5005 5007
+f 4505 5007 5006
+f 4505 4503 5005
+f 4505 5006 4506
+f 5008 4508 5009
+f 5010 5009 4508
+f 4507 4508 5008
+f 4510 5010 4508
+f 5011 4507 5008
+f 5012 5010 4510
+f 4509 5011 5013
+f 4509 5013 5012
+f 4509 4507 5011
+f 4509 5012 4510
+f 5014 4512 5015
+f 5016 5015 4512
+f 4511 4512 5014
+f 4514 5016 4512
+f 5017 4511 5014
+f 5018 5016 4514
+f 4513 5017 5019
+f 4513 5019 5018
+f 4513 4511 5017
+f 4513 5018 4514
+f 5020 4516 5021
+f 5022 5021 4516
+f 4518 5022 4516
+f 4515 4516 5020
+f 5023 4515 5020
+f 5024 5022 4518
+f 4517 5023 5025
+f 4517 5025 5024
+f 4517 4515 5023
+f 4517 5024 4518
+f 5026 4520 5027
+f 5028 5027 4520
+f 4522 5028 4520
+f 4519 4520 5026
+f 5029 4519 5026
+f 5030 5028 4522
+f 4521 5029 5031
+f 4521 5031 5030
+f 4521 4519 5029
+f 4521 5030 4522
+f 5032 4524 5033
+f 5034 5033 4524
+f 4523 4524 5032
+f 4526 5034 4524
+f 5035 4523 5032
+f 5036 5034 4526
+f 4525 5035 5037
+f 4525 5037 5036
+f 4525 4523 5035
+f 4525 5036 4526
+f 4528 4527 5038
+f 5039 4528 5038
+f 4529 4528 5039
+f 5040 4529 5039
+f 4530 4529 5040
+f 5041 4530 5040
+f 4531 4530 5041
+f 5042 4531 5041
+f 4532 4531 5042
+f 5043 4532 5042
+f 4533 4532 5043
+f 5044 4533 5043
+f 4534 4533 5044
+f 5045 4534 5044
+f 4535 4534 5045
+f 5046 4535 5045
+f 4536 4535 5046
+f 5047 4536 5046
+f 4537 4536 5047
+f 5048 4537 5047
+f 4538 4537 5048
+f 5049 4538 5048
+f 4539 4538 5049
+f 5050 4539 5049
+f 4540 4539 5050
+f 5051 4540 5050
+f 4541 4540 5051
+f 5052 4541 5051
+f 4542 4541 5052
+f 5053 4542 5052
+f 4543 4542 5053
+f 5054 4543 5053
+f 4544 4543 5054
+f 5055 4544 5054
+f 4545 4544 5055
+f 5056 4545 5055
+f 4546 4545 5056
+f 5057 4546 5056
+f 4547 4546 5057
+f 5058 4547 5057
+f 4548 4547 5058
+f 5059 4548 5058
+f 4549 4548 5059
+f 5060 4549 5059
+f 4550 4549 5060
+f 5061 4550 5060
+f 4551 4550 5061
+f 5062 4551 5061
+f 4552 4551 5062
+f 5063 4552 5062
+f 4553 4552 5063
+f 5064 4553 5063
+f 4554 4553 5064
+f 5065 4554 5064
+f 4555 4554 5065
+f 5066 4555 5065
+f 4556 4555 5066
+f 5067 4556 5066
+f 4557 4556 5067
+f 5068 4557 5067
+f 4527 4557 5068
+f 5038 4527 5068
+f 4558 4559 5069
+f 5069 4559 5070
+f 4561 4558 5071
+f 5071 4558 5069
+f 4563 4561 5072
+f 5072 4561 5071
+f 4562 4563 5073
+f 5073 4563 5072
+f 4560 4562 5074
+f 5074 4562 5073
+f 4559 4560 5070
+f 5070 4560 5074
+f 4564 4565 5075
+f 5075 4565 5076
+f 4567 4564 5077
+f 5077 4564 5075
+f 4569 4567 5078
+f 5078 4567 5077
+f 4568 4569 5079
+f 5079 4569 5078
+f 4566 4568 5080
+f 5080 4568 5079
+f 4565 4566 5076
+f 5076 4566 5080
+f 4570 4571 5081
+f 5081 4571 5082
+f 4573 4570 5083
+f 5083 4570 5081
+f 4575 4573 5084
+f 5084 4573 5083
+f 4574 4575 5085
+f 5085 4575 5084
+f 4572 4574 5086
+f 5086 4574 5085
+f 4571 4572 5082
+f 5082 4572 5086
+f 4576 4577 5087
+f 5087 4577 5088
+f 4579 4576 5089
+f 5089 4576 5087
+f 4581 4579 5090
+f 5090 4579 5089
+f 5091 5092 5090
+f 4580 4581 5092
+f 5092 4581 5090
+f 5093 5092 5094
+f 5093 4578 5092
+f 4578 4580 5092
+f 4577 4578 5088
+f 5088 4578 5093
+f 4582 4583 5095
+f 5095 4583 5096
+f 4585 4582 5097
+f 5097 4582 5095
+f 4587 4585 5098
+f 5098 4585 5097
+f 4586 4587 5099
+f 5099 4587 5098
+f 4584 4586 5100
+f 5100 4586 5099
+f 4583 4584 5096
+f 5096 4584 5100
+f 4588 4589 5101
+f 5101 4589 5102
+f 4591 4588 5103
+f 5103 4588 5101
+f 4593 4591 5104
+f 5104 4591 5103
+f 4592 4593 5105
+f 5105 4593 5104
+f 4590 4592 5106
+f 5106 4592 5105
+f 4589 4590 5102
+f 5102 4590 5106
+f 4594 4595 5107
+f 5107 4595 5108
+f 4597 4594 5109
+f 5109 4594 5107
+f 4599 4597 5110
+f 5110 4597 5109
+f 4598 4599 5111
+f 5111 4599 5110
+f 4596 4598 5112
+f 5112 4598 5111
+f 4595 4596 5108
+f 5108 4596 5112
+f 4600 4601 5113
+f 5113 4601 5114
+f 4603 4600 5115
+f 5115 4600 5113
+f 4605 4603 5116
+f 5116 4603 5115
+f 4604 4605 5117
+f 5117 4605 5116
+f 4602 4604 5118
+f 5118 4604 5117
+f 4601 4602 5114
+f 5114 4602 5118
+f 4606 4607 5119
+f 5119 4607 5120
+f 4609 4606 5121
+f 5121 4606 5119
+f 4611 4609 5122
+f 5122 4609 5121
+f 4610 4611 5123
+f 5123 4611 5122
+f 4608 4610 5124
+f 5124 4610 5123
+f 4607 4608 5120
+f 5120 4608 5124
+f 4612 4613 5125
+f 5125 4613 5126
+f 4615 4612 5127
+f 5127 4612 5125
+f 4617 4615 5128
+f 5128 4615 5127
+f 4616 4617 5129
+f 5129 4617 5128
+f 4614 4616 5130
+f 5130 4616 5129
+f 4613 4614 5126
+f 5126 4614 5130
+f 4618 4619 5131
+f 5131 4619 5132
+f 4621 4618 5133
+f 5133 4618 5131
+f 4623 4621 5134
+f 5134 4621 5133
+f 4622 4623 5135
+f 5135 4623 5134
+f 4620 4622 5136
+f 5136 4622 5135
+f 4619 4620 5132
+f 5132 4620 5136
+f 4624 4625 5137
+f 5137 4625 5138
+f 4627 4624 5139
+f 5139 4624 5137
+f 4629 4627 5140
+f 5140 4627 5139
+f 4628 4629 5141
+f 5141 4629 5140
+f 4626 4628 5142
+f 5142 4628 5141
+f 4625 4626 5138
+f 5138 4626 5142
+f 4630 4631 5143
+f 5143 4631 5144
+f 4633 4630 5145
+f 5145 4630 5143
+f 4635 4633 5146
+f 5146 4633 5145
+f 4634 4635 5147
+f 5147 4635 5146
+f 4632 4634 5148
+f 5148 4634 5147
+f 4631 4632 5144
+f 5144 4632 5148
+f 4636 4637 5149
+f 5149 4637 5150
+f 4639 4636 5151
+f 5151 4636 5149
+f 4641 4639 5152
+f 5152 4639 5151
+f 4640 4641 5153
+f 5153 4641 5152
+f 4638 4640 5154
+f 5154 4640 5153
+f 4637 4638 5150
+f 5150 4638 5154
+f 4642 4643 5155
+f 5155 4643 5156
+f 4645 4642 5157
+f 5157 4642 5155
+f 4647 4645 5158
+f 5158 4645 5157
+f 4646 4647 5159
+f 5159 4647 5158
+f 4644 4646 5160
+f 5160 4646 5159
+f 4643 4644 5156
+f 5156 4644 5160
+f 5161 5162 5163
+f 5161 4648 5162
+f 4648 4649 5162
+f 5164 5165 5161
+f 4651 4648 5165
+f 5165 4648 5161
+f 4653 5166 5167
+f 5166 4651 5165
+f 4653 4651 5166
+f 4652 4653 5168
+f 5168 4653 5167
+f 4650 4652 5169
+f 5169 4652 5168
+f 5162 4649 5170
+f 5170 4650 5169
+f 4649 4650 5170
+f 4654 4655 5171
+f 5171 4655 5172
+f 4657 4654 5173
+f 5173 4654 5171
+f 4659 4657 5174
+f 5174 4657 5173
+f 4658 4659 5175
+f 5175 4659 5174
+f 4656 4658 5176
+f 5176 4658 5175
+f 4655 4656 5172
+f 5172 4656 5176
+f 4660 4661 5177
+f 5177 4661 5178
+f 4663 4660 5179
+f 5179 4660 5177
+f 4665 4663 5180
+f 5180 4663 5179
+f 4664 4665 5181
+f 5181 4665 5180
+f 4662 4664 5182
+f 5182 4664 5181
+f 4661 4662 5178
+f 5178 4662 5182
+f 4666 4667 5183
+f 5183 4667 5184
+f 4669 4666 5185
+f 5185 4666 5183
+f 4671 4669 5186
+f 5186 4669 5185
+f 4670 4671 5187
+f 5187 4671 5186
+f 4668 4670 5188
+f 5188 4670 5187
+f 4667 4668 5184
+f 5184 4668 5188
+f 4672 4673 5189
+f 5189 4673 5190
+f 4675 4672 5191
+f 5191 4672 5189
+f 4677 4675 5192
+f 5192 4675 5191
+f 4676 4677 5193
+f 5193 4677 5192
+f 4674 4676 5194
+f 5194 4676 5193
+f 4673 4674 5190
+f 5190 4674 5194
+f 4678 4679 5195
+f 5195 4679 5196
+f 4681 4678 5197
+f 5197 4678 5195
+f 4683 4681 5198
+f 5198 4681 5197
+f 4682 4683 5199
+f 5199 4683 5198
+f 4680 4682 5200
+f 5200 4682 5199
+f 4679 4680 5196
+f 5196 4680 5200
+f 4684 4685 5201
+f 5201 4685 5202
+f 4687 4684 5203
+f 5203 4684 5201
+f 4689 4687 5204
+f 5204 4687 5203
+f 4688 4689 5205
+f 5205 4689 5204
+f 4686 4688 5206
+f 5206 4688 5205
+f 4685 4686 5202
+f 5202 4686 5206
+f 4690 4691 5207
+f 5207 4691 5208
+f 4693 4690 5209
+f 5209 4690 5207
+f 4695 4693 5210
+f 5210 4693 5209
+f 4694 4695 5211
+f 5211 4695 5210
+f 4692 4694 5212
+f 5212 4694 5211
+f 4691 4692 5208
+f 5208 4692 5212
+f 4696 4697 5213
+f 5213 4697 5214
+f 4699 4696 5215
+f 5215 4696 5213
+f 4701 4699 5216
+f 5216 4699 5215
+f 4700 4701 5217
+f 5217 4701 5216
+f 4698 4700 5218
+f 5218 4700 5217
+f 4697 4698 5214
+f 5214 4698 5218
+f 4702 4703 5219
+f 5219 4703 5220
+f 4705 4702 5221
+f 5221 4702 5219
+f 4707 4705 5222
+f 5222 4705 5221
+f 4706 4707 5223
+f 5223 4707 5222
+f 4704 4706 5224
+f 5224 4706 5223
+f 4703 4704 5220
+f 5220 4704 5224
+f 4708 4709 5225
+f 5225 4709 5226
+f 4711 4708 5227
+f 5227 4708 5225
+f 4713 4711 5228
+f 5228 4711 5227
+f 4712 4713 5229
+f 5229 4713 5228
+f 4710 4712 5230
+f 5230 4712 5229
+f 4709 4710 5226
+f 5226 4710 5230
+f 4714 4715 5231
+f 5231 4715 5232
+f 4717 4714 5233
+f 5233 4714 5231
+f 4719 4717 5234
+f 5234 4717 5233
+f 4718 4719 5235
+f 5235 4719 5234
+f 4716 4718 5236
+f 5236 4718 5235
+f 4715 4716 5232
+f 5232 4716 5236
+f 4720 4721 5237
+f 5237 4721 5238
+f 4723 4720 5239
+f 5239 4720 5237
+f 5240 5241 5239
+f 5242 4725 5241
+f 4725 4723 5241
+f 5241 4723 5239
+f 4724 4725 5243
+f 5243 4725 5242
+f 4722 4724 5244
+f 5244 4724 5243
+f 4721 5245 5238
+f 5238 5245 5246
+f 5245 4722 5244
+f 4721 4722 5245
+f 4726 4727 5247
+f 5247 4727 5248
+f 4729 4726 5249
+f 5249 4726 5247
+f 4731 4729 5250
+f 5250 4729 5249
+f 4730 4731 5251
+f 5251 4731 5250
+f 4728 4730 5252
+f 5252 4730 5251
+f 4727 4728 5248
+f 5248 4728 5252
+f 4732 4733 5253
+f 5253 4733 5254
+f 4735 4732 5255
+f 5255 4732 5253
+f 4737 4735 5256
+f 5256 4735 5255
+f 4736 4737 5257
+f 5257 4737 5256
+f 4734 4736 5258
+f 5258 4736 5257
+f 4733 4734 5254
+f 5254 4734 5258
+f 4738 4739 5259
+f 5259 4739 5260
+f 4741 4738 5261
+f 5261 4738 5259
+f 4743 4741 5262
+f 5262 4741 5261
+f 4742 4743 5263
+f 5263 4743 5262
+f 4740 4742 5264
+f 5264 4742 5263
+f 4739 4740 5260
+f 5260 4740 5264
+f 4744 4745 5265
+f 5265 4745 5266
+f 4747 4744 5267
+f 5267 4744 5265
+f 4749 4747 5268
+f 5268 4747 5267
+f 4748 4749 5269
+f 5269 4749 5268
+f 4746 4748 5270
+f 5270 4748 5269
+f 4745 4746 5266
+f 5266 4746 5270
+f 4750 4751 5271
+f 5271 4751 5272
+f 4753 4750 5273
+f 5273 4750 5271
+f 4755 4753 5274
+f 5274 4753 5273
+f 4754 4755 5275
+f 5275 4755 5274
+f 4752 4754 5276
+f 5276 4754 5275
+f 4751 4752 5272
+f 5272 4752 5276
+f 4756 4757 5277
+f 5277 4757 5278
+f 4759 4756 5279
+f 5279 4756 5277
+f 4761 4759 5280
+f 5280 4759 5279
+f 4760 4761 5281
+f 5281 4761 5280
+f 4758 4760 5282
+f 5282 4760 5281
+f 4757 4758 5278
+f 5278 4758 5282
+f 4762 4763 5283
+f 5283 4763 5284
+f 4765 4762 5285
+f 5285 4762 5283
+f 4767 4765 5286
+f 5286 4765 5285
+f 4766 4767 5287
+f 5287 4767 5286
+f 4764 4766 5288
+f 5288 4766 5287
+f 4763 4764 5284
+f 5284 4764 5288
+f 4768 4769 5289
+f 5289 4769 5290
+f 4771 4768 5291
+f 5291 4768 5289
+f 4773 4771 5292
+f 5292 4771 5291
+f 4772 4773 5293
+f 5293 4773 5292
+f 4770 4772 5294
+f 5294 4772 5293
+f 4769 4770 5290
+f 5290 4770 5294
+f 5295 5296 5297
+f 5295 4774 5296
+f 4774 4775 5296
+f 5298 5299 5295
+f 4777 4774 5299
+f 5299 4774 5295
+f 4779 5300 5301
+f 5300 4777 5299
+f 4779 4777 5300
+f 4778 4779 5302
+f 5302 4779 5301
+f 4776 4778 5303
+f 5303 4778 5302
+f 4775 5304 5296
+f 5304 4776 5303
+f 4775 4776 5304
+f 4780 4781 5305
+f 5305 4781 5306
+f 4783 4780 5307
+f 5307 4780 5305
+f 4785 4783 5308
+f 5308 4783 5307
+f 4784 4785 5309
+f 5309 4785 5308
+f 4782 4784 5310
+f 5310 4784 5309
+f 4781 4782 5306
+f 5306 4782 5310
+f 4786 4787 5311
+f 5311 4787 5312
+f 4789 4786 5313
+f 5313 4786 5311
+f 4791 4789 5314
+f 5314 4789 5313
+f 4790 4791 5315
+f 5315 4791 5314
+f 4788 4790 5316
+f 5316 4790 5315
+f 4787 4788 5312
+f 5312 4788 5316
+f 4792 4793 5317
+f 5317 4793 5318
+f 4795 5317 5319
+f 4795 4792 5317
+f 4797 4795 5320
+f 5320 4795 5319
+f 4796 4797 5321
+f 5321 4797 5320
+f 4794 4796 5322
+f 5322 4796 5321
+f 4793 4794 5318
+f 5318 4794 5322
+f 4798 4799 5323
+f 5323 4799 5324
+f 4801 4798 5325
+f 5325 4798 5323
+f 4803 4801 5326
+f 5326 4801 5325
+f 4802 4803 5327
+f 5327 4803 5326
+f 4800 4802 5328
+f 5328 4802 5327
+f 4799 4800 5324
+f 5324 4800 5328
+f 4804 4805 5329
+f 5329 4805 5330
+f 4807 4804 5331
+f 5331 4804 5329
+f 4809 4807 5332
+f 5332 4807 5331
+f 4808 4809 5333
+f 5333 4809 5332
+f 4806 4808 5334
+f 5334 4808 5333
+f 4805 4806 5330
+f 5330 4806 5334
+f 4810 4811 5335
+f 5335 4811 5336
+f 4813 4810 5337
+f 5337 4810 5335
+f 4815 4813 5338
+f 5338 4813 5337
+f 4814 4815 5339
+f 5339 4815 5338
+f 4812 4814 5340
+f 5340 4814 5339
+f 4811 4812 5336
+f 5336 4812 5340
+f 4816 4817 5341
+f 5341 4817 5342
+f 4819 4816 5343
+f 5343 4816 5341
+f 4821 4819 5344
+f 5344 4819 5343
+f 5345 5346 5344
+f 4820 4821 5346
+f 5346 4821 5344
+f 5347 5346 5348
+f 5347 4818 5346
+f 4818 4820 5346
+f 4817 4818 5342
+f 5342 4818 5347
+f 4822 4823 5349
+f 5349 4823 5350
+f 4825 4822 5351
+f 5351 4822 5349
+f 4827 4825 5352
+f 5352 4825 5351
+f 4826 4827 5353
+f 5353 4827 5352
+f 4824 4826 5354
+f 5354 4826 5353
+f 4823 4824 5350
+f 5350 4824 5354
+f 4828 4829 5355
+f 5355 4829 5356
+f 4831 4828 5357
+f 5357 4828 5355
+f 4833 4831 5358
+f 5358 4831 5357
+f 4832 4833 5359
+f 5359 4833 5358
+f 4830 4832 5360
+f 5360 4832 5359
+f 4829 4830 5356
+f 5356 4830 5360
+f 4834 4835 5361
+f 5361 4835 5362
+f 4837 4834 5363
+f 5363 4834 5361
+f 4839 4837 5364
+f 5364 4837 5363
+f 4838 4839 5365
+f 5365 4839 5364
+f 4836 4838 5366
+f 5366 4838 5365
+f 4835 4836 5362
+f 5362 4836 5366
+f 4840 4841 5367
+f 5367 4841 5368
+f 4843 4840 5369
+f 5369 4840 5367
+f 4845 4843 5370
+f 5370 4843 5369
+f 4844 4845 5371
+f 5371 4845 5370
+f 4842 4844 5372
+f 5372 4844 5371
+f 4841 4842 5368
+f 5368 4842 5372
+f 4846 4847 5373
+f 5373 4847 5374
+f 4849 4846 5375
+f 5375 4846 5373
+f 4851 4849 5376
+f 5376 4849 5375
+f 4850 4851 5377
+f 5377 4851 5376
+f 4848 4850 5378
+f 5378 4850 5377
+f 4847 4848 5374
+f 5374 4848 5378
+f 4852 4853 5379
+f 5379 4853 5380
+f 4855 4852 5381
+f 5381 4852 5379
+f 4857 4855 5382
+f 5382 4855 5381
+f 4856 4857 5383
+f 5383 4857 5382
+f 4854 4856 5384
+f 5384 4856 5383
+f 4853 4854 5380
+f 5380 4854 5384
+f 4858 4859 5385
+f 5385 4859 5386
+f 4861 4858 5387
+f 5387 4858 5385
+f 4863 4861 5388
+f 5388 4861 5387
+f 4862 4863 5389
+f 5389 4863 5388
+f 4860 4862 5390
+f 5390 4862 5389
+f 4859 4860 5386
+f 5386 4860 5390
+f 4864 4865 5391
+f 5391 4865 5392
+f 4867 4864 5393
+f 5393 4864 5391
+f 4869 4867 5394
+f 5394 4867 5393
+f 4868 4869 5395
+f 5395 4869 5394
+f 4866 4868 5396
+f 5396 4868 5395
+f 4865 4866 5392
+f 5392 4866 5396
+f 4870 4871 5397
+f 5397 4871 5398
+f 4873 4870 5399
+f 5399 4870 5397
+f 4875 4873 5400
+f 5400 4873 5399
+f 4874 4875 5401
+f 5401 4875 5400
+f 4872 4874 5402
+f 5402 4874 5401
+f 4871 4872 5398
+f 5398 4872 5402
+f 4876 4877 5403
+f 5403 4877 5404
+f 4879 4876 5405
+f 5405 4876 5403
+f 4881 4879 5406
+f 5406 4879 5405
+f 4880 4881 5407
+f 5407 4881 5406
+f 4878 4880 5408
+f 5408 4880 5407
+f 4877 4878 5404
+f 5404 4878 5408
+f 4882 4883 5409
+f 5409 4883 5410
+f 4885 4882 5411
+f 5411 4882 5409
+f 4887 4885 5412
+f 5412 4885 5411
+f 4886 4887 5413
+f 5413 4887 5412
+f 4884 4886 5414
+f 5414 4886 5413
+f 4883 4884 5410
+f 5410 4884 5414
+f 5415 5416 5417
+f 5415 4888 5416
+f 4888 4889 5416
+f 5418 5419 5415
+f 4891 4888 5419
+f 5419 4888 5415
+f 4893 5420 5421
+f 5420 4891 5419
+f 4893 4891 5420
+f 4892 4893 5422
+f 5422 4893 5421
+f 4890 4892 5423
+f 5423 4892 5422
+f 5416 4889 5424
+f 5424 4890 5423
+f 4889 4890 5424
+f 4894 4895 5425
+f 5425 4895 5426
+f 4897 4894 5427
+f 5427 4894 5425
+f 4899 4897 5428
+f 5428 4897 5427
+f 4898 5428 5429
+f 4898 4899 5428
+f 4896 4898 5430
+f 5430 4898 5429
+f 4895 4896 5426
+f 5426 4896 5430
+f 4900 4901 5431
+f 5431 4901 5432
+f 4903 5431 5433
+f 4903 4900 5431
+f 4905 4903 5434
+f 5434 4903 5433
+f 4904 4905 5435
+f 5435 4905 5434
+f 4902 4904 5436
+f 5436 4904 5435
+f 4901 4902 5432
+f 5432 4902 5436
+f 4906 4907 5437
+f 5437 4907 5438
+f 4909 4906 5439
+f 5439 4906 5437
+f 4911 4909 5440
+f 5440 4909 5439
+f 4910 4911 5441
+f 5441 4911 5440
+f 4908 4910 5442
+f 5442 4910 5441
+f 4907 4908 5438
+f 5438 4908 5442
+f 4912 4913 5443
+f 5443 4913 5444
+f 4915 4912 5445
+f 5445 4912 5443
+f 4917 4915 5446
+f 5446 4915 5445
+f 4916 4917 5447
+f 5447 4917 5446
+f 4914 4916 5448
+f 5448 4916 5447
+f 4913 4914 5444
+f 5444 4914 5448
+f 4918 4919 5449
+f 5449 4919 5450
+f 4921 4918 5451
+f 5451 4918 5449
+f 4923 4921 5452
+f 5452 4921 5451
+f 4922 4923 5453
+f 5453 4923 5452
+f 4920 4922 5454
+f 5454 4922 5453
+f 4919 4920 5450
+f 5450 4920 5454
+f 4924 4925 5455
+f 5455 4925 5456
+f 4927 4924 5457
+f 5457 4924 5455
+f 4929 4927 5458
+f 5458 4927 5457
+f 4928 4929 5459
+f 5459 4929 5458
+f 4926 4928 5460
+f 5460 4928 5459
+f 4925 4926 5456
+f 5456 4926 5460
+f 4930 4931 5461
+f 5461 4931 5462
+f 4933 4930 5463
+f 5463 4930 5461
+f 4935 4933 5464
+f 5464 4933 5463
+f 4934 4935 5465
+f 5465 4935 5464
+f 4932 4934 5466
+f 5466 4934 5465
+f 4931 4932 5462
+f 5462 4932 5466
+f 4936 4937 5467
+f 5467 4937 5468
+f 4939 4936 5469
+f 5469 4936 5467
+f 4941 4939 5470
+f 5470 4939 5469
+f 4940 4941 5471
+f 5471 4941 5470
+f 4938 4940 5472
+f 5472 4940 5471
+f 4937 4938 5468
+f 5468 4938 5472
+f 4942 4943 5473
+f 5473 4943 5474
+f 4945 4942 5475
+f 5475 4942 5473
+f 4947 4945 5476
+f 5476 4945 5475
+f 4946 4947 5477
+f 5477 4947 5476
+f 4944 4946 5478
+f 5478 4946 5477
+f 4943 4944 5474
+f 5474 4944 5478
+f 4948 4949 5479
+f 5479 4949 5480
+f 4951 4948 5481
+f 5481 4948 5479
+f 4953 4951 5482
+f 5482 4951 5481
+f 4952 4953 5483
+f 5483 4953 5482
+f 4950 4952 5484
+f 5484 4952 5483
+f 4949 4950 5480
+f 5480 4950 5484
+f 4954 4955 5485
+f 5485 4955 5486
+f 4957 4954 5487
+f 5487 4954 5485
+f 4959 4957 5488
+f 5488 4957 5487
+f 4958 4959 5489
+f 5489 4959 5488
+f 4956 4958 5490
+f 5490 4958 5489
+f 4955 4956 5486
+f 5486 4956 5490
+f 4960 4961 5491
+f 5491 4961 5492
+f 4963 4960 5493
+f 5493 4960 5491
+f 5494 5495 5493
+f 5496 4965 5495
+f 4965 4963 5495
+f 5495 4963 5493
+f 4964 4965 5497
+f 5497 4965 5496
+f 4962 4964 5498
+f 5498 4964 5497
+f 4961 5499 5492
+f 5492 5499 5500
+f 5499 4962 5498
+f 4961 4962 5499
+f 4966 4967 5501
+f 5501 4967 5502
+f 4969 4966 5503
+f 5503 4966 5501
+f 4971 4969 5504
+f 5504 4969 5503
+f 4970 4971 5505
+f 5505 4971 5504
+f 4968 4970 5506
+f 5506 4970 5505
+f 4967 4968 5502
+f 5502 4968 5506
+f 4972 4973 5507
+f 5507 4973 5508
+f 4975 4972 5509
+f 5509 4972 5507
+f 4977 4975 5510
+f 5510 4975 5509
+f 4976 4977 5511
+f 5511 4977 5510
+f 4974 4976 5512
+f 5512 4976 5511
+f 4973 4974 5508
+f 5508 4974 5512
+f 4978 4979 5513
+f 5513 4979 5514
+f 4981 4978 5515
+f 5515 4978 5513
+f 4983 4981 5516
+f 5516 4981 5515
+f 4982 4983 5517
+f 5517 4983 5516
+f 4980 4982 5518
+f 5518 4982 5517
+f 4979 4980 5514
+f 5514 4980 5518
+f 4984 4985 5519
+f 5519 4985 5520
+f 4987 4984 5521
+f 5521 4984 5519
+f 4989 4987 5522
+f 5522 4987 5521
+f 4988 4989 5523
+f 5523 4989 5522
+f 4986 4988 5524
+f 5524 4988 5523
+f 4985 4986 5520
+f 5520 4986 5524
+f 4990 4991 5525
+f 5525 4991 5526
+f 4993 4990 5527
+f 5527 4990 5525
+f 4995 4993 5528
+f 5528 4993 5527
+f 4994 4995 5529
+f 5529 4995 5528
+f 4992 4994 5530
+f 5530 4994 5529
+f 4991 4992 5526
+f 5526 4992 5530
+f 4996 4997 5531
+f 5531 4997 5532
+f 4999 4996 5533
+f 5533 4996 5531
+f 5001 4999 5534
+f 5534 4999 5533
+f 5000 5001 5535
+f 5535 5001 5534
+f 4998 5000 5536
+f 5536 5000 5535
+f 4997 4998 5532
+f 5532 4998 5536
+f 5002 5003 5537
+f 5537 5003 5538
+f 5005 5002 5539
+f 5539 5002 5537
+f 5007 5005 5540
+f 5540 5005 5539
+f 5006 5007 5541
+f 5541 5007 5540
+f 5004 5006 5542
+f 5542 5006 5541
+f 5003 5004 5538
+f 5538 5004 5542
+f 5008 5009 5543
+f 5543 5009 5544
+f 5011 5008 5545
+f 5545 5008 5543
+f 5013 5011 5546
+f 5546 5011 5545
+f 5012 5013 5547
+f 5547 5013 5546
+f 5010 5012 5548
+f 5548 5012 5547
+f 5009 5010 5544
+f 5544 5010 5548
+f 5549 5550 5551
+f 5549 5014 5550
+f 5014 5015 5550
+f 5552 5553 5549
+f 5017 5014 5553
+f 5553 5014 5549
+f 5019 5554 5555
+f 5554 5017 5553
+f 5019 5017 5554
+f 5018 5019 5556
+f 5556 5019 5555
+f 5016 5018 5557
+f 5557 5018 5556
+f 5015 5558 5550
+f 5558 5016 5557
+f 5015 5016 5558
+f 5020 5021 5559
+f 5559 5021 5560
+f 5023 5020 5561
+f 5561 5020 5559
+f 5025 5023 5562
+f 5562 5023 5561
+f 5024 5025 5563
+f 5563 5025 5562
+f 5022 5024 5564
+f 5564 5024 5563
+f 5021 5022 5560
+f 5560 5022 5564
+f 5026 5027 5565
+f 5565 5027 5566
+f 5029 5026 5567
+f 5567 5026 5565
+f 5031 5029 5568
+f 5568 5029 5567
+f 5030 5031 5569
+f 5569 5031 5568
+f 5028 5030 5570
+f 5570 5030 5569
+f 5027 5028 5566
+f 5566 5028 5570
+f 5032 5033 5571
+f 5571 5033 5572
+f 5035 5032 5573
+f 5573 5032 5571
+f 5037 5035 5574
+f 5574 5035 5573
+f 5036 5037 5575
+f 5575 5037 5574
+f 5034 5036 5576
+f 5576 5036 5575
+f 5033 5034 5572
+f 5572 5034 5576
+f 5575 5038 5576
+f 5572 5038 5577
+f 5572 5576 5038
+f 5571 5572 5577
+f 5564 5574 5573
+f 5563 5038 5575
+f 5563 5574 5564
+f 5563 5575 5574
+f 5560 5564 5573
+f 5560 5573 5571
+f 5559 5560 5571
+f 5578 5571 5577
+f 5578 5559 5571
+f 5578 5561 5559
+f 5578 5563 5562
+f 5578 5562 5561
+f 5039 5038 5563
+f 5039 5563 5578
+f 5569 5039 5570
+f 5566 5039 5578
+f 5566 5570 5039
+f 5565 5566 5578
+f 5548 5568 5567
+f 5547 5569 5568
+f 5547 5568 5548
+f 5547 5039 5569
+f 5544 5567 5565
+f 5544 5548 5567
+f 5543 5544 5565
+f 5579 5545 5543
+f 5579 5547 5546
+f 5579 5546 5545
+f 5579 5565 5578
+f 5579 5543 5565
+f 5541 5579 5542
+f 5538 5542 5579
+f 5537 5538 5579
+f 5040 5541 5540
+f 5040 5540 5539
+f 5040 5547 5579
+f 5040 5579 5541
+f 5040 5039 5547
+f 5556 5040 5557
+f 5558 5040 5539
+f 5558 5537 5579
+f 5558 5539 5537
+f 5558 5557 5040
+f 5041 5040 5556
+f 5041 5556 5555
+f 5041 5555 5554
+f 5580 5041 5554
+f 5042 5041 5580
+f 5581 5042 5580
+f 5043 5042 5581
+f 5582 5043 5581
+f 5044 5043 5582
+f 5498 5044 5582
+f 5499 5498 5582
+f 5497 5044 5498
+f 5496 5044 5497
+f 5495 5044 5496
+f 5471 5044 5472
+f 5468 5472 5044
+f 5468 5044 5495
+f 5467 5468 5495
+f 5478 5470 5469
+f 5477 5044 5471
+f 5477 5470 5478
+f 5477 5471 5470
+f 5474 5478 5469
+f 5474 5469 5467
+f 5473 5474 5467
+f 5484 5476 5475
+f 5483 5477 5476
+f 5483 5476 5484
+f 5480 5475 5473
+f 5480 5484 5475
+f 5479 5480 5473
+f 5045 5044 5477
+f 5045 5481 5479
+f 5045 5483 5482
+f 5045 5482 5481
+f 5045 5477 5483
+f 5459 5045 5460
+f 5456 5460 5045
+f 5583 5457 5455
+f 5583 5455 5456
+f 5583 5458 5457
+f 5583 5045 5479
+f 5583 5479 5473
+f 5583 5456 5045
+f 5466 5458 5583
+f 5465 5459 5458
+f 5465 5458 5466
+f 5465 5045 5459
+f 5462 5466 5583
+f 5461 5462 5583
+f 5448 5464 5463
+f 5444 5448 5463
+f 5444 5463 5461
+f 5046 5045 5465
+f 5046 5464 5448
+f 5046 5448 5447
+f 5046 5465 5464
+f 5446 5046 5447
+f 5443 5461 5583
+f 5443 5444 5461
+f 5445 5046 5446
+f 5453 5046 5454
+f 5450 5445 5443
+f 5450 5046 5445
+f 5450 5454 5046
+f 5449 5450 5443
+f 5436 5452 5451
+f 5435 5046 5453
+f 5435 5452 5436
+f 5435 5453 5452
+f 5432 5436 5451
+f 5584 5432 5451
+f 5584 5449 5443
+f 5584 5451 5449
+f 5584 5433 5431
+f 5584 5431 5432
+f 5442 5434 5433
+f 5441 5435 5434
+f 5441 5434 5442
+f 5438 5433 5584
+f 5438 5442 5433
+f 5437 5438 5584
+f 5047 5046 5435
+f 5047 5435 5441
+f 5047 5439 5437
+f 5047 5441 5440
+f 5047 5440 5439
+f 5413 5047 5414
+f 5410 5414 5047
+f 5409 5047 5437
+f 5409 5437 5584
+f 5409 5410 5047
+f 5430 5412 5411
+f 5429 5047 5413
+f 5429 5412 5430
+f 5429 5413 5412
+f 5426 5430 5411
+f 5426 5411 5409
+f 5425 5426 5409
+f 5423 5428 5427
+f 5422 5429 5428
+f 5422 5428 5423
+f 5424 5427 5425
+f 5424 5423 5427
+f 5048 5422 5421
+f 5048 5421 5420
+f 5048 5047 5429
+f 5048 5429 5422
+f 5585 5048 5420
+f 5049 5048 5585
+f 5586 5049 5585
+f 5050 5049 5586
+f 5587 5050 5586
+f 5051 5050 5587
+f 5354 5051 5587
+f 5353 5051 5354
+f 5350 5354 5587
+f 5352 5051 5353
+f 5349 5350 5587
+f 5351 5051 5352
+f 5359 5051 5360
+f 5356 5351 5349
+f 5356 5051 5351
+f 5356 5360 5051
+f 5355 5356 5349
+f 5588 5358 5357
+f 5588 5355 5349
+f 5588 5357 5355
+f 5588 5359 5358
+f 5333 5051 5359
+f 5333 5588 5334
+f 5333 5359 5588
+f 5330 5334 5588
+f 5329 5330 5588
+f 5052 5051 5333
+f 5052 5331 5329
+f 5052 5333 5332
+f 5052 5332 5331
+f 5339 5052 5340
+f 5336 5340 5052
+f 5335 5052 5329
+f 5335 5329 5588
+f 5335 5336 5052
+f 5322 5338 5337
+f 5321 5339 5338
+f 5321 5338 5322
+f 5321 5052 5339
+f 5318 5322 5337
+f 5589 5319 5317
+f 5589 5317 5318
+f 5589 5320 5319
+f 5589 5337 5335
+f 5589 5318 5337
+f 5589 5335 5588
+f 5053 5321 5320
+f 5053 5052 5321
+f 5053 5320 5589
+f 5327 5053 5328
+f 5324 5053 5589
+f 5324 5328 5053
+f 5326 5053 5327
+f 5323 5324 5589
+f 5310 5326 5325
+f 5310 5053 5326
+f 5309 5053 5310
+f 5306 5325 5323
+f 5306 5310 5325
+f 5305 5306 5323
+f 5590 5305 5323
+f 5590 5307 5305
+f 5590 5309 5308
+f 5590 5308 5307
+f 5590 5323 5589
+f 5315 5590 5316
+f 5054 5309 5590
+f 5054 5590 5315
+f 5054 5053 5309
+f 5312 5316 5590
+f 5314 5054 5315
+f 5311 5312 5590
+f 5313 5054 5314
+f 5293 5054 5294
+f 5290 5294 5054
+f 5290 5054 5313
+f 5290 5313 5311
+f 5289 5290 5311
+f 5591 5311 5590
+f 5591 5289 5311
+f 5591 5291 5289
+f 5591 5293 5292
+f 5591 5292 5291
+f 5055 5054 5293
+f 5055 5293 5591
+f 5288 5055 5591
+f 5287 5055 5288
+f 5284 5288 5591
+f 5286 5055 5287
+f 5283 5284 5591
+f 5285 5055 5286
+f 5302 5055 5303
+f 5304 5283 5591
+f 5304 5303 5055
+f 5304 5055 5285
+f 5304 5285 5283
+f 5056 5055 5302
+f 5056 5302 5301
+f 5056 5301 5300
+f 5592 5057 5056
+f 5592 5056 5300
+f 5058 5057 5592
+f 5593 5058 5592
+f 5594 5058 5593
+f 5059 5058 5594
+f 5245 5059 5594
+f 5245 5244 5059
+f 5243 5059 5244
+f 5218 5242 5241
+f 5217 5243 5242
+f 5217 5242 5218
+f 5214 5218 5241
+f 5213 5214 5241
+f 5060 5215 5213
+f 5060 5217 5216
+f 5060 5216 5215
+f 5060 5059 5243
+f 5060 5243 5217
+f 5223 5060 5224
+f 5220 5060 5213
+f 5220 5224 5060
+f 5219 5220 5213
+f 5230 5222 5221
+f 5229 5060 5223
+f 5229 5222 5230
+f 5229 5223 5222
+f 5226 5230 5221
+f 5226 5221 5219
+f 5225 5226 5219
+f 5206 5228 5227
+f 5205 5228 5206
+f 5205 5229 5228
+f 5202 5206 5227
+f 5595 5225 5219
+f 5595 5202 5227
+f 5595 5203 5201
+f 5595 5201 5202
+f 5595 5204 5203
+f 5595 5227 5225
+f 5061 5060 5229
+f 5061 5229 5205
+f 5061 5204 5595
+f 5061 5205 5204
+f 5211 5061 5212
+f 5208 5212 5061
+f 5207 5061 5595
+f 5207 5208 5061
+f 5194 5210 5209
+f 5193 5061 5211
+f 5193 5211 5210
+f 5193 5210 5194
+f 5190 5209 5207
+f 5190 5194 5209
+f 5189 5207 5595
+f 5189 5190 5207
+f 5200 5192 5191
+f 5199 5193 5192
+f 5199 5192 5200
+f 5196 5191 5189
+f 5196 5200 5191
+f 5195 5196 5189
+f 5062 5061 5193
+f 5062 5193 5199
+f 5062 5197 5195
+f 5062 5199 5198
+f 5062 5198 5197
+f 5181 5062 5182
+f 5178 5182 5062
+f 5596 5195 5189
+f 5596 5189 5595
+f 5596 5179 5177
+f 5596 5177 5178
+f 5596 5062 5195
+f 5596 5178 5062
+f 5188 5180 5179
+f 5187 5181 5180
+f 5187 5062 5181
+f 5187 5180 5188
+f 5184 5179 5596
+f 5184 5188 5179
+f 5183 5184 5596
+f 5160 5186 5185
+f 5159 5187 5186
+f 5159 5186 5160
+f 5156 5185 5183
+f 5156 5160 5185
+f 5155 5156 5183
+f 5155 5183 5596
+f 5176 5158 5157
+f 5175 5158 5176
+f 5172 5176 5157
+f 5172 5157 5155
+f 5171 5172 5155
+f 5063 5158 5175
+f 5063 5159 5158
+f 5063 5175 5174
+f 5063 5174 5173
+f 5063 5187 5159
+f 5063 5062 5187
+f 5168 5063 5169
+f 5170 5063 5173
+f 5170 5169 5063
+f 5170 5173 5171
+f 5064 5063 5168
+f 5064 5168 5167
+f 5064 5167 5166
+f 5597 5064 5166
+f 5065 5064 5597
+f 5598 5065 5597
+f 5066 5065 5598
+f 5599 5066 5598
+f 5099 5599 5100
+f 5096 5100 5599
+f 5095 5096 5599
+f 5067 5097 5095
+f 5067 5099 5098
+f 5067 5098 5097
+f 5067 5066 5599
+f 5067 5599 5099
+f 5105 5067 5106
+f 5102 5067 5095
+f 5102 5106 5067
+f 5101 5102 5095
+f 5600 5103 5101
+f 5600 5105 5104
+f 5600 5104 5103
+f 5600 5101 5095
+f 5079 5105 5600
+f 5079 5600 5080
+f 5076 5080 5600
+f 5075 5076 5600
+f 5068 5067 5105
+f 5068 5077 5075
+f 5068 5079 5078
+f 5068 5078 5077
+f 5068 5105 5079
+f 5085 5068 5086
+f 5082 5086 5068
+f 5601 5083 5081
+f 5601 5081 5082
+f 5601 5084 5083
+f 5601 5068 5075
+f 5601 5075 5600
+f 5601 5082 5068
+f 5074 5084 5601
+f 5073 5084 5074
+f 5073 5085 5084
+f 5070 5074 5601
+f 5069 5070 5601
+f 5038 5085 5073
+f 5038 5073 5072
+f 5038 5072 5071
+f 5038 5068 5085
+f 5577 5069 5601
+f 5577 5038 5071
+f 5577 5071 5069
+f 5495 5583 5467
+f 5467 5583 5473
+f 5583 5584 5443
+f 5584 5424 5425
+f 5584 5425 5409
+f 5587 5588 5349
+f 5241 5595 5213
+f 5213 5595 5219
+f 5596 5170 5171
+f 5596 5171 5155
+f 5599 5600 5095
+f 5094 5087 5088
+f 5094 5088 5093
+f 5089 5087 5094
+f 5091 5089 5094
+f 5090 5089 5091
+f 5578 5577 5602
+f 5603 5578 5602
+f 5579 5578 5603
+f 5604 5579 5603
+f 5558 5579 5604
+f 5550 5558 5604
+f 5551 5550 5604
+f 5552 5551 5604
+f 5605 5552 5604
+f 5605 5554 5553
+f 5605 5553 5552
+f 5580 5554 5605
+f 5606 5580 5605
+f 5581 5580 5606
+f 5607 5581 5606
+f 5582 5581 5607
+f 5608 5582 5607
+f 5499 5582 5608
+f 5500 5499 5608
+f 5494 5500 5608
+f 5609 5494 5608
+f 5609 5495 5494
+f 5583 5495 5609
+f 5610 5583 5609
+f 5584 5583 5610
+f 5611 5584 5610
+f 5612 5584 5611
+f 5424 5584 5612
+f 5416 5424 5612
+f 5417 5416 5612
+f 5613 5417 5612
+f 5613 5420 5419
+f 5613 5419 5418
+f 5613 5418 5417
+f 5585 5420 5613
+f 5614 5585 5613
+f 5586 5585 5614
+f 5615 5586 5614
+f 5346 5586 5615
+f 5348 5346 5615
+f 5587 5586 5346
+f 5587 5346 5345
+f 5616 5348 5615
+f 5616 5587 5345
+f 5616 5345 5348
+f 5588 5587 5616
+f 5617 5588 5616
+f 5589 5588 5617
+f 5618 5589 5617
+f 5590 5589 5618
+f 5619 5590 5618
+f 5591 5590 5619
+f 5620 5591 5619
+f 5304 5591 5620
+f 5296 5304 5620
+f 5297 5296 5620
+f 5621 5297 5620
+f 5621 5300 5299
+f 5621 5299 5298
+f 5621 5298 5297
+f 5592 5300 5621
+f 5622 5592 5621
+f 5623 5592 5622
+f 5623 5593 5592
+f 5594 5593 5623
+f 5624 5594 5623
+f 5245 5594 5624
+f 5246 5245 5624
+f 5240 5246 5624
+f 5625 5240 5624
+f 5625 5241 5240
+f 5595 5241 5625
+f 5626 5595 5625
+f 5596 5595 5626
+f 5627 5596 5626
+f 5628 5596 5627
+f 5170 5596 5628
+f 5162 5170 5628
+f 5163 5162 5628
+f 5164 5163 5628
+f 5629 5166 5165
+f 5629 5165 5164
+f 5629 5164 5628
+f 5597 5166 5629
+f 5630 5597 5629
+f 5598 5597 5630
+f 5631 5598 5630
+f 5631 5092 5598
+f 5094 5092 5631
+f 5091 5094 5631
+f 5599 5598 5092
+f 5599 5091 5631
+f 5599 5092 5091
+f 5632 5599 5631
+f 5600 5599 5632
+f 5633 5601 5600
+f 5633 5600 5632
+f 5602 5577 5601
+f 5602 5601 5633
+f 5111 5108 5112
+f 5110 5107 5108
+f 5110 5109 5107
+f 5110 5108 5111
+f 5117 5114 5118
+f 5116 5113 5114
+f 5116 5115 5113
+f 5116 5114 5117
+f 5123 5120 5124
+f 5122 5119 5120
+f 5122 5121 5119
+f 5122 5120 5123
+f 5129 5126 5130
+f 5128 5125 5126
+f 5128 5127 5125
+f 5128 5126 5129
+f 5135 5132 5136
+f 5134 5131 5132
+f 5134 5133 5131
+f 5134 5132 5135
+f 5141 5138 5142
+f 5140 5137 5138
+f 5140 5139 5137
+f 5140 5138 5141
+f 5147 5144 5148
+f 5146 5143 5144
+f 5146 5145 5143
+f 5146 5144 5147
+f 5153 5150 5154
+f 5152 5149 5150
+f 5152 5151 5149
+f 5152 5150 5153
+f 5164 5161 5163
+f 5235 5232 5236
+f 5234 5231 5232
+f 5234 5233 5231
+f 5234 5232 5235
+f 5237 5238 5246
+f 5240 5239 5237
+f 5240 5237 5246
+f 5251 5248 5252
+f 5250 5247 5248
+f 5250 5249 5247
+f 5250 5248 5251
+f 5257 5254 5258
+f 5256 5253 5254
+f 5256 5255 5253
+f 5256 5254 5257
+f 5263 5260 5264
+f 5262 5259 5260
+f 5262 5261 5259
+f 5262 5260 5263
+f 5269 5266 5270
+f 5268 5265 5266
+f 5268 5267 5265
+f 5268 5266 5269
+f 5275 5272 5276
+f 5274 5271 5272
+f 5274 5273 5271
+f 5274 5272 5275
+f 5281 5278 5282
+f 5280 5277 5278
+f 5280 5279 5277
+f 5280 5278 5281
+f 5298 5295 5297
+f 5348 5341 5342
+f 5348 5342 5347
+f 5343 5341 5348
+f 5345 5343 5348
+f 5344 5343 5345
+f 5365 5362 5366
+f 5364 5361 5362
+f 5364 5363 5361
+f 5364 5362 5365
+f 5371 5368 5372
+f 5370 5367 5368
+f 5370 5369 5367
+f 5370 5368 5371
+f 5377 5374 5378
+f 5376 5373 5374
+f 5376 5375 5373
+f 5376 5374 5377
+f 5383 5380 5384
+f 5382 5379 5380
+f 5382 5381 5379
+f 5382 5380 5383
+f 5389 5386 5390
+f 5388 5385 5386
+f 5388 5387 5385
+f 5388 5386 5389
+f 5395 5392 5396
+f 5394 5391 5392
+f 5394 5393 5391
+f 5394 5392 5395
+f 5401 5398 5402
+f 5400 5397 5398
+f 5400 5399 5397
+f 5400 5398 5401
+f 5407 5404 5408
+f 5406 5403 5404
+f 5406 5405 5403
+f 5406 5404 5407
+f 5418 5415 5417
+f 5489 5486 5490
+f 5488 5485 5486
+f 5488 5487 5485
+f 5488 5486 5489
+f 5491 5492 5500
+f 5494 5493 5491
+f 5494 5491 5500
+f 5505 5502 5506
+f 5504 5501 5502
+f 5504 5503 5501
+f 5504 5502 5505
+f 5511 5508 5512
+f 5510 5507 5508
+f 5510 5509 5507
+f 5510 5508 5511
+f 5517 5514 5518
+f 5516 5513 5514
+f 5516 5515 5513
+f 5516 5514 5517
+f 5523 5520 5524
+f 5522 5519 5520
+f 5522 5521 5519
+f 5522 5520 5523
+f 5529 5526 5530
+f 5528 5525 5526
+f 5528 5527 5525
+f 5528 5526 5529
+f 5535 5532 5536
+f 5534 5531 5532
+f 5534 5533 5531
+f 5534 5532 5535
+f 5552 5549 5551
+f 5634 5603 5602
+f 5634 5602 5635
+f 5636 5604 5603
+f 5636 5603 5634
+f 5637 5605 5604
+f 5637 5604 5636
+f 5638 5606 5605
+f 5638 5605 5637
+f 5639 5607 5606
+f 5639 5606 5638
+f 5640 5608 5607
+f 5640 5607 5639
+f 5641 5609 5608
+f 5641 5608 5640
+f 5642 5610 5609
+f 5642 5609 5641
+f 5643 5610 5642
+f 5643 5611 5610
+f 5644 5611 5643
+f 5612 5611 5644
+f 5645 5612 5644
+f 5613 5612 5645
+f 5646 5613 5645
+f 5614 5613 5646
+f 5615 5614 5646
+f 5647 5615 5646
+f 5616 5615 5647
+f 5648 5616 5647
+f 5617 5616 5648
+f 5649 5617 5648
+f 5650 5617 5649
+f 5618 5617 5650
+f 5651 5619 5618
+f 5651 5618 5650
+f 5620 5619 5651
+f 5652 5620 5651
+f 5621 5620 5652
+f 5653 5621 5652
+f 5622 5621 5653
+f 5654 5622 5653
+f 5623 5622 5654
+f 5655 5623 5654
+f 5624 5623 5655
+f 5656 5624 5655
+f 5625 5624 5656
+f 5657 5625 5656
+f 5626 5625 5657
+f 5658 5626 5657
+f 5627 5626 5658
+f 5659 5627 5658
+f 5628 5627 5659
+f 5660 5628 5659
+f 5629 5628 5660
+f 5661 5629 5660
+f 5630 5629 5661
+f 5662 5630 5661
+f 5631 5630 5662
+f 5663 5631 5662
+f 5632 5631 5663
+f 5664 5632 5663
+f 5633 5632 5664
+f 5665 5633 5664
+f 5602 5633 5665
+f 5635 5602 5665
+f 5666 5634 5635
+f 5666 5635 5667
+f 5668 5636 5634
+f 5668 5634 5666
+f 5669 5637 5636
+f 5669 5636 5668
+f 5670 5638 5637
+f 5670 5637 5669
+f 5671 5639 5638
+f 5671 5638 5670
+f 5640 5639 5671
+f 5672 5640 5671
+f 5641 5640 5672
+f 5673 5641 5672
+f 5642 5641 5673
+f 5674 5642 5673
+f 5643 5642 5674
+f 5675 5643 5674
+f 5644 5643 5675
+f 5676 5644 5675
+f 5645 5644 5676
+f 5677 5645 5676
+f 5677 5646 5645
+f 5678 5647 5646
+f 5678 5646 5677
+f 5679 5648 5647
+f 5679 5647 5678
+f 5680 5649 5648
+f 5680 5648 5679
+f 5681 5650 5649
+f 5681 5649 5680
+f 5682 5651 5650
+f 5682 5650 5681
+f 5683 5652 5651
+f 5683 5651 5682
+f 5684 5653 5652
+f 5684 5652 5683
+f 5685 5654 5653
+f 5685 5653 5684
+f 5686 5655 5654
+f 5686 5654 5685
+f 5687 5656 5655
+f 5687 5655 5686
+f 5688 5656 5687
+f 5657 5656 5688
+f 5689 5657 5688
+f 5658 5657 5689
+f 5690 5658 5689
+f 5659 5658 5690
+f 5691 5659 5690
+f 5660 5659 5691
+f 5692 5661 5660
+f 5692 5660 5691
+f 5693 5662 5661
+f 5693 5661 5692
+f 5694 5663 5662
+f 5694 5662 5693
+f 5695 5664 5663
+f 5695 5663 5694
+f 5696 5665 5664
+f 5696 5664 5695
+f 5667 5635 5665
+f 5667 5665 5696
+f 5697 5666 5667
+f 5697 5667 5698
+f 5699 5668 5666
+f 5699 5666 5697
+f 5700 5669 5668
+f 5700 5668 5699
+f 5701 5670 5669
+f 5701 5669 5700
+f 5702 5671 5670
+f 5702 5670 5701
+f 5703 5672 5671
+f 5703 5671 5702
+f 5704 5673 5672
+f 5704 5672 5703
+f 5705 5673 5704
+f 5705 5674 5673
+f 5706 5674 5705
+f 5706 5675 5674
+f 5707 5676 5675
+f 5707 5675 5706
+f 5708 5676 5707
+f 5708 5677 5676
+f 5709 5678 5677
+f 5709 5677 5708
+f 5710 5679 5678
+f 5710 5678 5709
+f 5711 5680 5679
+f 5711 5679 5710
+f 5712 5681 5680
+f 5712 5680 5711
+f 5713 5682 5681
+f 5713 5681 5712
+f 5714 5683 5682
+f 5714 5682 5713
+f 5715 5684 5683
+f 5715 5683 5714
+f 5716 5685 5684
+f 5716 5684 5715
+f 5717 5686 5685
+f 5717 5685 5716
+f 5718 5687 5686
+f 5718 5686 5717
+f 5719 5688 5687
+f 5719 5687 5718
+f 5720 5689 5688
+f 5720 5688 5719
+f 5721 5690 5689
+f 5721 5689 5720
+f 5722 5691 5690
+f 5722 5690 5721
+f 5723 5692 5691
+f 5723 5691 5722
+f 5724 5693 5692
+f 5724 5692 5723
+f 5725 5694 5693
+f 5725 5693 5724
+f 5726 5695 5694
+f 5726 5694 5725
+f 5727 5696 5695
+f 5727 5695 5726
+f 5698 5667 5696
+f 5698 5696 5727
+f 5728 5698 5729
+f 5730 5698 5728
+f 5731 5698 5730
+f 5732 5697 5698
+f 5732 5698 5731
+f 5733 5697 5732
+f 5734 5699 5697
+f 5734 5697 5733
+f 5735 5700 5699
+f 5735 5699 5734
+f 5736 5701 5700
+f 5736 5700 5735
+f 5737 5701 5736
+f 5737 5702 5701
+f 5738 5702 5737
+f 5738 5703 5702
+f 5739 5704 5703
+f 5739 5703 5738
+f 5740 5704 5739
+f 5740 5705 5704
+f 5741 5706 5705
+f 5741 5705 5740
+f 5742 5707 5706
+f 5742 5706 5741
+f 5743 5708 5707
+f 5743 5709 5708
+f 5743 5707 5742
+f 5744 5710 5709
+f 5744 5709 5743
+f 5745 5711 5710
+f 5745 5710 5744
+f 5746 5712 5711
+f 5746 5711 5745
+f 5747 5713 5712
+f 5747 5712 5746
+f 5748 5714 5713
+f 5748 5713 5747
+f 5749 5714 5748
+f 5750 5715 5714
+f 5750 5714 5749
+f 5751 5716 5715
+f 5751 5715 5750
+f 5752 5717 5716
+f 5752 5716 5751
+f 5753 5718 5717
+f 5753 5717 5752
+f 5754 5719 5718
+f 5754 5718 5753
+f 5755 5720 5719
+f 5755 5721 5720
+f 5755 5719 5754
+f 5756 5722 5721
+f 5756 5721 5755
+f 5757 5723 5722
+f 5757 5722 5756
+f 5758 5724 5723
+f 5758 5723 5757
+f 5759 5725 5724
+f 5759 5724 5758
+f 5760 5726 5725
+f 5760 5725 5759
+f 5761 5727 5726
+f 5761 5726 5760
+f 5762 5727 5761
+f 5762 5698 5727
+f 5729 5698 5762
+f 5763 5728 5729
+f 5763 5730 5728
+f 5763 5731 5730
+f 5763 5732 5731
+f 5764 5733 5732
+f 5764 5732 5763
+f 5765 5734 5733
+f 5765 5733 5764
+f 5735 5734 5765
+f 5766 5735 5765
+f 5736 5735 5766
+f 5767 5736 5766
+f 5737 5736 5767
+f 5768 5737 5767
+f 5738 5737 5768
+f 5769 5738 5768
+f 5739 5738 5769
+f 5770 5739 5769
+f 5740 5739 5770
+f 5771 5740 5770
+f 5772 5740 5771
+f 5772 5741 5740
+f 5773 5741 5772
+f 5773 5742 5741
+f 5774 5742 5773
+f 5774 5743 5742
+f 5775 5743 5774
+f 5744 5743 5775
+f 5776 5744 5775
+f 5776 5745 5744
+f 5777 5745 5776
+f 5777 5746 5745
+f 5778 5746 5777
+f 5778 5747 5746
+f 5779 5747 5778
+f 5779 5748 5747
+f 5780 5748 5779
+f 5780 5749 5748
+f 5781 5749 5780
+f 5781 5750 5749
+f 5782 5750 5781
+f 5782 5751 5750
+f 5783 5752 5751
+f 5783 5751 5782
+f 5784 5752 5783
+f 5784 5753 5752
+f 5754 5753 5784
+f 5785 5754 5784
+f 5755 5754 5785
+f 5786 5755 5785
+f 5787 5756 5755
+f 5787 5755 5786
+f 5788 5757 5756
+f 5788 5756 5787
+f 5789 5758 5757
+f 5789 5757 5788
+f 5790 5758 5789
+f 5759 5758 5790
+f 5791 5760 5759
+f 5791 5759 5790
+f 5792 5761 5760
+f 5792 5760 5791
+f 5793 5762 5761
+f 5793 5761 5792
+f 5763 5729 5762
+f 5763 5762 5793
+f 5779 5778 5780
+f 5780 5777 5781
+f 5778 5777 5780
+f 5781 5776 5782
+f 5777 5776 5781
+f 5782 5775 5783
+f 5776 5775 5782
+f 5783 5774 5784
+f 5784 5774 5785
+f 5775 5774 5783
+f 5785 5773 5786
+f 5774 5773 5785
+f 5786 5772 5787
+f 5773 5772 5786
+f 5787 5771 5788
+f 5772 5771 5787
+f 5771 5770 5788
+f 5792 5764 5793
+f 5793 5764 5763
+f 5788 5769 5789
+f 5770 5769 5788
+f 5791 5765 5792
+f 5792 5765 5764
+f 5789 5768 5790
+f 5769 5768 5789
+f 5791 5766 5765
+f 5790 5767 5791
+f 5768 5767 5790
+f 5791 5767 5766
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/res/test/compressor/3d/cooling-tower.obj 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/compressor/3d/cooling-tower.obj
--- 1.2.21-5/modules/lsp-runtime-lib/res/test/compressor/3d/cooling-tower.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/compressor/3d/cooling-tower.obj	2025-08-26 18:15:43.650004029 +0000
@@ -0,0 +1,7514 @@
+# Cooling Tower
+# (C) Linux Studio Plugins Project
+o Body
+v 21.132799 -0.000004 81.847198
+v 20.811745 3.669668 80.847198
+v 20.811745 3.669668 81.847198
+v 21.132799 -0.000004 80.847198
+v 19.858335 7.227839 80.847198
+v 19.858335 7.227839 81.847198
+v 18.301542 10.566396 80.847198
+v 18.301542 10.566396 81.847198
+v 16.188663 13.583899 80.847198
+v 16.188663 13.583899 81.847198
+v 13.583902 16.188660 80.847198
+v 13.583902 16.188660 81.847198
+v 10.566400 18.301538 80.847198
+v 10.566400 18.301538 81.847198
+v 7.227843 19.858332 80.847198
+v 7.227843 19.858332 81.847198
+v 3.669672 20.811741 80.847198
+v 3.669672 20.811741 81.847198
+v 0.000000 21.132795 80.847198
+v 0.000000 21.132795 81.847198
+v -3.669672 20.811741 80.847198
+v -3.669672 20.811741 81.847198
+v -7.227843 19.858332 81.847198
+v -7.227843 19.858332 80.847198
+v -10.566400 18.301538 80.847198
+v 30.730791 8.234291 7.138781
+v -10.566400 18.301538 81.847198
+v 31.814856 -0.000000 7.138780
+v -13.583902 16.188660 80.847198
+v 27.552473 15.907428 7.138781
+v -13.583902 16.188660 81.847198
+v 22.496500 22.496500 7.138781
+v -16.188663 13.583899 80.847198
+v 15.907428 27.552473 7.138782
+v -16.188663 13.583899 81.847198
+v 8.234291 30.730791 7.138782
+v 0.000000 31.814856 7.138782
+v -18.301542 10.566396 80.847198
+v -18.301542 10.566396 81.847198
+v -8.234291 30.730791 7.138782
+v -19.858335 7.227839 80.847198
+v -15.907428 27.552473 7.138782
+v -19.858335 7.227839 81.847198
+v -22.496500 22.496500 7.138781
+v -20.811745 3.669668 80.847198
+v -27.552473 15.907428 7.138781
+v -20.811745 3.669668 81.847198
+v -30.730791 8.234291 7.138781
+v -21.132799 -0.000004 81.847198
+v -31.814856 -0.000000 7.138780
+v -21.132799 -0.000004 80.847198
+v -30.730791 -8.234291 7.138780
+v -20.811745 -3.669676 80.847198
+v -27.552473 -15.907428 7.138780
+v -22.496500 -22.496500 7.138779
+v -20.811745 -3.669676 81.847198
+v -15.907428 -27.552473 7.138779
+v -19.858335 -7.227846 80.847198
+v -8.234291 -30.730791 7.138779
+v -19.858335 -7.227847 81.847198
+v 0.000000 -31.814856 7.138779
+v -18.301542 -10.566403 80.847198
+v -18.301542 -10.566403 81.847198
+v 8.234291 -30.730791 7.138779
+v 15.907428 -27.552473 7.138779
+v -16.188663 -13.583906 80.847198
+v 22.496500 -22.496500 7.138779
+v -16.188663 -13.583906 81.847198
+v 27.552473 -15.907428 7.138780
+v -13.583902 -16.188667 80.847198
+v 30.730791 -8.234291 7.138780
+v -13.583902 -16.188667 81.847198
+v -10.566400 -18.301546 80.847198
+v 30.504807 8.173738 8.146670
+v -10.566400 -18.301546 81.847198
+v -7.227843 -19.858339 80.847198
+v -7.227843 -19.858339 81.847198
+v 22.331068 22.331068 8.146671
+v -3.669672 -20.811749 80.847198
+v 8.173738 30.504807 8.146671
+v -3.669672 -20.811749 81.847198
+v 0.000000 -21.132803 81.847198
+v -8.173738 30.504807 8.146671
+v 0.000000 -21.132803 80.847198
+v 3.669672 -20.811749 80.847198
+v -22.331068 22.331068 8.146671
+v 3.669672 -20.811749 81.847198
+v 7.227843 -19.858339 80.847198
+v 7.227843 -19.858339 81.847198
+v -30.504807 8.173738 8.146670
+v 10.566400 -18.301546 81.847198
+v -30.504807 -8.173738 8.146670
+v 10.566400 -18.301546 80.847198
+v 13.583902 -16.188667 80.847198
+v -22.331068 -22.331068 8.146669
+v 13.583902 -16.188667 81.847198
+v 16.188663 -13.583906 80.847198
+v -8.173738 -30.504807 8.146669
+v 16.188663 -13.583906 81.847198
+v 18.301542 -10.566403 80.847198
+v 18.301542 -10.566403 81.847198
+v 8.173738 -30.504807 8.146669
+v 19.858335 -7.227846 80.847198
+v 19.858335 -7.227847 81.847198
+v 22.331068 -22.331068 8.146669
+v 20.811745 -3.669676 81.847198
+v 30.504807 -8.173738 8.146670
+v 20.811745 -3.669676 80.847198
+v 19.466776 -0.000003 74.852875
+v 32.580898 -0.000000 8.146670
+v 32.085922 5.657614 8.146670
+v 24.883451 -0.000001 31.504997
+v 30.616032 11.143324 8.146671
+v 30.616032 -11.143324 8.146669
+v 32.085922 -5.657615 8.146670
+v 16.858721 9.733385 74.852875
+v 16.179596 9.341291 68.331696
+v 18.682589 -0.000003 68.331696
+v 9.733388 16.858717 74.852875
+v 16.249046 9.381389 61.159252
+v 18.762783 -0.000003 61.159252
+v 9.341294 16.179592 68.331696
+v 0.000000 19.466772 74.852875
+v 20.184128 -0.000002 50.367893
+v 17.479967 10.092062 50.367893
+v 9.381392 16.249044 61.159252
+v 0.000000 18.682585 68.331696
+v -9.733388 16.858717 74.852875
+v 10.092064 17.479965 50.367893
+v 0.000000 18.762781 61.159252
+v -9.341294 16.179592 68.331696
+v 21.549702 12.441725 31.504997
+v 28.215887 16.290449 8.146671
+v 24.958418 20.942598 8.146671
+v -16.858721 9.733385 74.852875
+v 0.000000 20.184126 50.367893
+v -9.381392 16.249044 61.159252
+v -16.179596 9.341291 68.331696
+v 20.942598 24.958418 8.146671
+v 12.441726 21.549700 31.504997
+v 16.290449 28.215887 8.146671
+v 11.143324 30.616032 8.146671
+v 5.657614 32.085922 8.146671
+v -19.466776 -0.000003 74.852875
+v -10.092064 17.479965 50.367893
+v -16.249046 9.381389 61.159252
+v -18.682589 -0.000003 68.331696
+v 0.000000 24.883450 31.504999
+v 0.000000 32.580898 8.146671
+v -5.657614 32.085922 8.146671
+v -11.143324 30.616032 8.146671
+v -16.858721 -9.733391 74.852875
+v -17.479967 10.092062 50.367893
+v -18.762783 -0.000003 61.159252
+v -16.179596 -9.341297 68.331696
+v -12.441726 21.549700 31.504997
+v -16.290449 28.215887 8.146671
+v -20.942598 24.958418 8.146671
+v -24.958418 20.942598 8.146671
+v -9.733388 -16.858725 74.852875
+v -20.184128 -0.000002 50.367893
+v -16.249046 -9.381394 61.159252
+v -9.341294 -16.179600 68.331696
+v -21.549702 12.441725 31.504997
+v -28.215887 16.290449 8.146671
+v -30.616032 11.143324 8.146671
+v 0.000000 -19.466780 74.852875
+v -17.479967 -10.092066 50.367893
+v -9.381392 -16.249048 61.159252
+v 0.000000 -18.682592 68.331696
+v -24.883451 -0.000001 31.504997
+v -32.085922 5.657614 8.146670
+v -32.580898 -0.000000 8.146670
+v -32.085922 -5.657615 8.146670
+v 9.733388 -16.858725 74.852875
+v -10.092064 -17.479969 50.367893
+v 0.000000 -18.762785 61.159252
+v 9.341294 -16.179600 68.331696
+v -21.549702 -12.441727 31.504997
+v -30.616032 -11.143324 8.146669
+v -28.215887 -16.290449 8.146669
+v -24.958418 -20.942598 8.146669
+v -20.942598 -24.958418 8.146669
+v 16.858721 -9.733391 74.852875
+v 0.000000 -20.184130 50.367893
+v 9.381392 -16.249048 61.159252
+v 16.179596 -9.341297 68.331696
+v -12.441726 -21.549704 31.504997
+v -16.290449 -28.215887 8.146669
+v -11.143324 -30.616032 8.146669
+v 10.092064 -17.479969 50.367893
+v 16.249046 -9.381394 61.159252
+v 0.000000 -24.883453 31.504995
+v -5.657614 -32.085922 8.146669
+v 0.000000 -32.580898 8.146669
+v 5.657614 -32.085922 8.146669
+v 11.143324 -30.616032 8.146669
+v 17.479967 -10.092066 50.367893
+v 12.441726 -21.549704 31.504997
+v 16.290449 -28.215887 8.146669
+v 20.942598 -24.958418 8.146669
+v 21.549702 -12.441727 31.504997
+v 24.958418 -20.942598 8.146669
+v 28.215887 -16.290449 8.146669
+v 33.277927 5.867795 7.308438
+v 33.791294 -0.000000 7.308438
+v 31.753429 11.557303 7.308438
+v 29.264118 16.895647 7.308439
+v 25.885633 21.720625 7.308439
+v 21.720625 25.885633 7.308439
+v 16.895647 29.264118 7.308439
+v 11.557303 31.753429 7.308439
+v 5.867796 33.277927 7.308439
+v 0.000000 33.791294 7.308439
+v -5.867796 33.277927 7.308439
+v -11.557303 31.753429 7.308439
+v -16.895647 29.264118 7.308439
+v -21.720625 25.885633 7.308439
+v -25.885633 21.720625 7.308439
+v -29.264118 16.895647 7.308439
+v -31.753429 11.557303 7.308438
+v -33.277927 5.867795 7.308438
+v -33.791294 -0.000000 7.308438
+v -33.277927 -5.867796 7.308437
+v -31.753429 -11.557303 7.308437
+v -29.264118 -16.895647 7.308437
+v -25.885633 -21.720625 7.308437
+v -21.720625 -25.885633 7.308437
+v -16.895647 -29.264118 7.308436
+v -11.557303 -31.753429 7.308436
+v -5.867796 -33.277927 7.308436
+v 0.000000 -33.791294 7.308436
+v 5.867796 -33.277927 7.308436
+v 11.557303 -31.753429 7.308436
+v 16.895647 -29.264118 7.308436
+v 21.720625 -25.885633 7.308437
+v 25.885633 -21.720625 7.308437
+v 29.264118 -16.895647 7.308437
+v 31.753429 -11.557303 7.308437
+v 33.277927 -5.867796 7.308437
+v 32.638531 5.755054 6.000000
+v 33.142033 -0.000000 6.000000
+v 31.143324 11.335243 6.000000
+v 28.701843 16.571016 6.000001
+v 25.388269 21.303288 6.000001
+v 21.303288 25.388269 6.000001
+v 16.571016 28.701843 6.000001
+v 11.335243 31.143324 6.000001
+v 5.755054 32.638531 6.000001
+v 0.000000 33.142033 6.000001
+v -5.755054 32.638531 6.000001
+v -11.335243 31.143324 6.000001
+v -16.571016 28.701843 6.000001
+v -21.303288 25.388269 6.000001
+v -25.388269 21.303288 6.000001
+v -28.701843 16.571016 6.000001
+v -31.143324 11.335243 6.000000
+v -32.638531 5.755054 6.000000
+v -33.142033 -0.000000 6.000000
+v -32.638531 -5.755054 6.000000
+v -31.143324 -11.335243 6.000000
+v -28.701843 -16.571016 5.999999
+v -25.388269 -21.303288 5.999999
+v -21.303288 -25.388269 5.999999
+v -16.571016 -28.701843 5.999999
+v -11.335243 -31.143324 5.999999
+v -5.755054 -32.638531 5.999999
+v 0.000000 -33.142033 5.999999
+v 5.755054 -32.638531 5.999999
+v 11.335243 -31.143324 5.999999
+v 16.571016 -28.701843 5.999999
+v 21.303288 -25.388269 5.999999
+v 25.388269 -21.303288 5.999999
+v 28.701843 -16.571016 5.999999
+v 31.143324 -11.335243 6.000000
+v 32.638531 -5.755054 6.000000
+v 31.101114 5.483965 8.146670
+v 31.580900 -0.000000 8.146670
+v 29.676338 10.801304 8.146670
+v 27.349861 15.790450 8.146671
+v 24.192373 20.299810 8.146671
+v 20.299810 24.192373 8.146671
+v 15.790450 27.349861 8.146671
+v 10.801304 29.676338 8.146671
+v 5.483966 31.101114 8.146671
+v 0.000000 31.580900 8.146671
+v -5.483966 31.101114 8.146671
+v -10.801304 29.676338 8.146671
+v -15.790450 27.349861 8.146671
+v -20.299810 24.192373 8.146671
+v -24.192373 20.299810 8.146671
+v -27.349861 15.790450 8.146671
+v -29.676338 10.801304 8.146670
+v -31.101114 5.483965 8.146670
+v -31.580900 -0.000000 8.146670
+v -31.101114 -5.483966 8.146670
+v -29.676338 -10.801304 8.146670
+v -27.349861 -15.790450 8.146669
+v -24.192373 -20.299810 8.146669
+v -20.299810 -24.192373 8.146669
+v -15.790450 -27.349861 8.146669
+v -10.801304 -29.676338 8.146669
+v -5.483966 -31.101114 8.146669
+v 0.000000 -31.580900 8.146669
+v 5.483966 -31.101114 8.146669
+v 10.801304 -29.676338 8.146669
+v 15.790450 -27.349861 8.146669
+v 20.299810 -24.192373 8.146669
+v 24.192373 -20.299810 8.146669
+v 27.349861 -15.790450 8.146669
+v 29.676338 -10.801304 8.146670
+v 31.101114 -5.483966 8.146670
+v 19.595106 -0.000002 48.263905
+v 20.132799 -0.000004 80.847198
+v 19.826937 3.496020 80.847198
+v 18.793509 -0.000003 76.368752
+v 18.918644 6.885819 80.847198
+v 18.918644 -6.885826 80.847198
+v 19.826937 -3.496027 80.847198
+v 16.969858 9.797551 48.263905
+v 9.797553 16.969856 48.263905
+v 15.294666 8.830376 63.068100
+v 17.660759 -0.000003 63.068100
+v 0.000000 19.595104 48.263905
+v 15.552605 8.979297 71.607796
+v 17.435516 10.066396 80.847198
+v 15.422620 12.941111 80.847198
+v 17.958601 -0.000003 71.607796
+v 8.830379 15.294663 63.068100
+v -9.797553 16.969856 48.263905
+v 8.979300 15.552602 71.607796
+v 12.941114 15.422616 80.847198
+v 10.066400 17.435513 80.847198
+v 6.885823 18.918640 80.847198
+v 0.000000 17.660757 63.068100
+v -16.969858 9.797551 48.263905
+v 0.000000 17.958597 71.607796
+v 3.496024 19.826933 80.847198
+v 0.000000 20.132795 80.847198
+v -3.496024 19.826933 80.847198
+v -8.830379 15.294663 63.068100
+v -19.595106 -0.000002 48.263905
+v -6.885823 18.918640 80.847198
+v -8.979300 15.552602 71.607796
+v -10.066400 17.435513 80.847198
+v -12.941114 15.422616 80.847198
+v -15.294666 8.830376 63.068100
+v -16.969858 -9.797555 48.263905
+v -15.552605 8.979297 71.607796
+v -15.422620 12.941111 80.847198
+v -17.435516 10.066396 80.847198
+v -18.918644 6.885819 80.847198
+v -19.826937 3.496020 80.847198
+v -17.660759 -0.000003 63.068100
+v -9.797553 -16.969860 48.263905
+v -17.958601 -0.000003 71.607796
+v -20.132799 -0.000004 80.847198
+v -19.826937 -3.496027 80.847198
+v -15.294666 -8.830381 63.068100
+v 0.000000 -19.595108 48.263905
+v -15.552605 -8.979302 71.607796
+v -18.918644 -6.885826 80.847198
+v -17.435516 -10.066403 80.847198
+v -15.422620 -12.941118 80.847198
+v -8.830379 -15.294669 63.068100
+v 9.797553 -16.969860 48.263905
+v -8.979300 -15.552608 71.607796
+v -12.941114 -15.422624 80.847198
+v -10.066400 -17.435520 80.847198
+v -6.885823 -18.918648 80.847198
+v -3.496024 -19.826941 80.847198
+v 0.000000 -17.660761 63.068100
+v 16.969858 -9.797555 48.263905
+v 0.000000 -17.958605 71.607796
+v 0.000000 -20.132803 80.847198
+v 3.496024 -19.826941 80.847198
+v 8.830379 -15.294669 63.068100
+v 8.979300 -15.552608 71.607796
+v 6.885823 -18.918648 80.847198
+v 10.066400 -17.435520 80.847198
+v 12.941114 -15.422624 80.847198
+v 15.422620 -12.941118 80.847198
+v 15.294666 -8.830381 63.068100
+v 15.552605 -8.979302 71.607796
+v 17.435516 -10.066403 80.847198
+v 18.842131 3.322372 81.347198
+v 19.132799 -0.000004 81.347198
+v 17.978951 6.543800 81.347198
+v 16.569490 9.566396 81.347198
+v 14.656575 12.298322 81.347198
+v 12.298326 14.656571 81.347198
+v 9.566400 16.569487 81.347198
+v 6.543803 17.978947 81.347198
+v 3.322376 18.842127 81.347198
+v 0.000000 19.132795 81.347198
+v -3.322376 18.842127 81.347198
+v -6.543803 17.978947 81.347198
+v -9.566400 16.569487 81.347198
+v -12.298326 14.656571 81.347198
+v -14.656575 12.298322 81.347198
+v -16.569490 9.566396 81.347198
+v -17.978951 6.543800 81.347198
+v -18.842131 3.322372 81.347198
+v -19.132799 -0.000004 81.347198
+v -18.842131 -3.322380 81.347198
+v -17.978951 -6.543807 81.347198
+v -16.569490 -9.566403 81.347198
+v -14.656575 -12.298329 81.347198
+v -12.298326 -14.656579 81.347198
+v -9.566400 -16.569494 81.347198
+v -6.543803 -17.978954 81.347198
+v -3.322376 -18.842134 81.347198
+v 0.000000 -19.132803 81.347198
+v 3.322376 -18.842134 81.347198
+v 6.543803 -17.978954 81.347198
+v 9.566400 -16.569494 81.347198
+v 12.298326 -14.656579 81.347198
+v 14.656575 -12.298329 81.347198
+v 16.569490 -9.566403 81.347198
+v 17.978951 -6.543807 81.347198
+v 18.842131 -3.322380 81.347198
+v 18.842131 3.322372 81.847198
+v 19.132799 -0.000004 81.847198
+v 17.978951 6.543799 81.847198
+v 16.569490 9.566396 81.847198
+v 14.656575 12.298322 81.847198
+v 12.298326 14.656571 81.847198
+v 9.566400 16.569487 81.847198
+v 6.543803 17.978947 81.847198
+v 3.322376 18.842127 81.847198
+v 0.000000 19.132795 81.847198
+v -3.322376 18.842127 81.847198
+v -6.543803 17.978947 81.847198
+v -9.566400 16.569487 81.847198
+v -12.298326 14.656571 81.847198
+v -14.656575 12.298322 81.847198
+v -16.569490 9.566396 81.847198
+v -17.978951 6.543799 81.847198
+v -18.842131 3.322372 81.847198
+v -19.132799 -0.000004 81.847198
+v -18.842131 -3.322380 81.847198
+v -17.978951 -6.543807 81.847198
+v -16.569490 -9.566403 81.847198
+v -14.656575 -12.298329 81.847198
+v -12.298326 -14.656579 81.847198
+v -9.566400 -16.569494 81.847198
+v -6.543803 -17.978954 81.847198
+v -3.322376 -18.842134 81.847198
+v 0.000000 -19.132803 81.847198
+v 3.322376 -18.842134 81.847198
+v 6.543803 -17.978954 81.847198
+v 9.566400 -16.569494 81.847198
+v 12.298326 -14.656579 81.847198
+v 14.656575 -12.298329 81.847198
+v 16.569490 -9.566403 81.847198
+v 17.978951 -6.543807 81.847198
+v 18.842131 -3.322380 81.847198
+v 31.674082 3.944398 6.000000
+v 31.462994 5.547774 6.000000
+v 32.193371 -0.000000 6.000000
+v 31.026218 8.501712 6.000000
+v 30.021639 10.926983 6.000000
+v 31.282236 6.920754 6.000000
+v 31.096409 8.332258 6.000000
+v 27.880278 16.096685 6.000000
+v 28.425097 14.781374 6.000000
+v 28.629753 14.287289 6.000000
+v 25.458357 19.252993 6.000001
+v 24.473864 20.536009 6.000001
+v 27.880278 16.096685 6.000000
+v 22.618635 22.875809 6.000001
+v 20.536009 24.473864 6.000001
+v 23.630835 21.634666 6.000001
+v 22.764151 22.764151 6.000001
+v 19.252993 25.458359 6.000001
+v 16.096685 27.880278 6.000001
+v 16.096685 27.880278 6.000001
+v 17.226170 27.013594 6.000001
+v 12.421089 29.402760 6.000001
+v 10.926983 30.021639 6.000001
+v 8.150412 31.120350 6.000001
+v 6.920755 31.282236 6.000001
+v 5.547775 31.462994 6.000001
+v 9.647570 30.551588 6.000001
+v 8.332258 31.096409 6.000001
+v 3.944399 31.674082 6.000001
+v 0.000000 32.193371 6.000001
+v -3.944399 31.674082 6.000001
+v -5.547775 31.462994 6.000001
+v -1.411503 32.007542 6.000001
+v -8.150412 31.120350 6.000001
+v -8.332258 31.096409 6.000001
+v -9.647570 30.551588 6.000001
+v -10.926983 30.021639 6.000001
+v -14.287289 28.629753 6.000001
+v -16.096685 27.880278 6.000001
+v -16.096685 27.880278 6.000001
+v -17.226170 27.013594 6.000001
+v -17.650452 26.688030 6.000001
+v -20.536009 24.473864 6.000001
+v -22.875809 22.618635 6.000001
+v -23.630835 21.634666 6.000001
+v -24.473864 20.536009 6.000001
+v -22.764151 22.764151 6.000001
+v -27.880278 16.096685 6.000000
+v -27.880278 16.096685 6.000000
+v -26.688030 17.650450 6.000001
+v -28.629753 14.287289 6.000000
+v -28.425097 14.781374 6.000000
+v -30.021639 10.926983 6.000000
+v -31.026218 8.501712 6.000000
+v -31.462994 5.547774 6.000000
+v -31.282236 6.920754 6.000000
+v -31.096409 8.332258 6.000000
+v -31.937738 1.941721 6.000000
+v -32.193371 -0.000000 6.000000
+v -31.674082 -3.944399 6.000000
+v -31.462994 -5.547775 6.000000
+v -32.007542 -1.411504 6.000000
+v -31.120350 -8.150412 6.000000
+v -31.096409 -8.332258 6.000000
+v -30.021639 -10.926983 6.000000
+v -28.629753 -14.287289 6.000000
+v -28.425097 -14.781374 6.000000
+v -27.880278 -16.096685 6.000000
+v -27.880278 -16.096685 6.000000
+v -27.013594 -17.226170 5.999999
+v -26.688030 -17.650452 5.999999
+v -24.473864 -20.536009 5.999999
+v -22.618635 -22.875809 5.999999
+v -21.634666 -23.630835 5.999999
+v -20.536009 -24.473864 5.999999
+v -22.764151 -22.764151 5.999999
+v -17.650450 -26.688030 5.999999
+v -16.096685 -27.880278 5.999999
+v -16.096685 -27.880278 5.999999
+v -12.421089 -29.402760 5.999999
+v -10.926983 -30.021639 5.999999
+v -14.781374 -28.425097 5.999999
+v -8.150412 -31.120350 5.999999
+v -6.920755 -31.282236 5.999999
+v -5.547775 -31.462994 5.999999
+v -8.332258 -31.096409 5.999999
+v -1.941721 -31.937738 5.999999
+v 0.000000 -32.193371 5.999999
+v 3.944399 -31.674082 5.999999
+v 5.547775 -31.462994 5.999999
+v 1.411503 -32.007542 5.999999
+v 8.150412 -31.120350 5.999999
+v 10.926983 -30.021639 5.999999
+v 9.647570 -30.551588 5.999999
+v 8.332258 -31.096409 5.999999
+v 14.287289 -28.629753 5.999999
+v 16.096685 -27.880278 5.999999
+v 16.096685 -27.880278 5.999999
+v 17.650452 -26.688030 5.999999
+v 17.226170 -27.013594 5.999999
+v 20.536009 -24.473864 5.999999
+v 22.875809 -22.618635 5.999999
+v 22.764151 -22.764151 5.999999
+v 23.630835 -21.634666 5.999999
+v 24.473864 -20.536009 5.999999
+v 26.688030 -17.650450 5.999999
+v 27.880278 -16.096685 6.000000
+v 27.880278 -16.096685 6.000000
+v 28.425097 -14.781374 6.000000
+v 29.402760 -12.421089 6.000000
+v 30.021639 -10.926983 6.000000
+v 31.096409 -8.332258 6.000000
+v 31.120350 -8.150412 6.000000
+v 31.462994 -5.547775 6.000000
+v 31.282236 -6.920755 6.000000
+v 31.674082 -3.944399 6.000000
+v 31.258039 3.690317 7.444556
+v 31.117430 5.297473 7.138780
+v 31.101114 5.483965 7.114002
+v 29.958483 9.748328 7.721572
+v 29.692530 10.740873 7.138781
+v 29.676338 10.801304 7.114001
+v 31.084923 5.544394 7.138781
+v 30.960592 6.008401 7.411233
+v 30.087452 9.267003 8.004190
+v 30.152472 9.024349 8.146670
+v 30.624981 7.260917 8.146670
+v 28.713457 12.866208 7.535126
+v 29.597219 10.970975 7.138781
+v 25.225101 18.824923 7.444554
+v 24.299763 20.146442 7.138781
+v 24.192373 20.299810 7.113999
+v 21.070644 23.421539 7.721572
+v 20.344053 24.148130 7.138781
+v 20.299810 24.192373 7.113999
+v 21.600634 22.891550 8.146671
+v 21.422998 23.069185 8.004192
+v 22.891550 21.600634 8.146671
+v 24.148130 20.344053 7.138781
+v 23.808455 20.683729 7.411232
+v 18.433477 25.499193 7.535127
+v 20.146442 24.299763 7.138781
+v 12.866208 28.713457 7.535127
+v 10.970975 29.597219 7.138782
+v 10.801304 29.676338 7.114002
+v 7.260918 30.624981 8.146671
+v 7.018263 30.690001 8.004191
+v 9.024349 30.152472 8.146671
+v 6.536940 30.818972 7.721574
+v 10.740873 29.692530 7.138782
+v 9.267003 30.087452 8.004191
+v 5.544394 31.084923 7.138782
+v 5.483966 31.101114 7.114003
+v 3.214267 31.299688 7.535128
+v 5.297473 31.117430 7.138782
+v -3.690317 31.258039 7.444557
+v -5.297473 31.117430 7.138782
+v -5.483966 31.101114 7.114003
+v -9.748328 29.958483 7.721573
+v -10.740873 29.692530 7.138782
+v -10.801304 29.676338 7.114002
+v -9.024349 30.152472 8.146671
+v -9.267003 30.087452 8.004191
+v -7.260918 30.624981 8.146671
+v -5.544394 31.084923 7.138782
+v -6.008402 30.960592 7.411234
+v -12.866208 28.713457 7.535127
+v -10.970975 29.597219 7.138782
+v -18.824923 25.225101 7.444554
+v -20.146442 24.299763 7.138781
+v -20.299810 24.192373 7.113999
+v -23.421539 21.070644 7.721572
+v -23.808455 20.683729 7.411232
+v -24.148130 20.344053 7.138781
+v -24.192373 20.299810 7.113999
+v -21.600634 22.891550 8.146671
+v -22.891550 21.600634 8.146671
+v -20.344053 24.148130 7.138781
+v -20.683729 23.808455 7.411232
+v -24.299763 20.146442 7.138781
+v -28.915413 12.433113 7.444555
+v -29.597219 10.970975 7.138781
+v -29.676338 10.801304 7.114001
+v -30.818972 6.536940 7.721573
+v -31.084923 5.544394 7.138781
+v -31.101114 5.483965 7.114002
+v -30.624981 7.260917 8.146670
+v -30.690001 7.018263 8.004190
+v -30.152472 9.024349 8.146670
+v -29.692530 10.740873 7.138781
+v -29.816860 10.276866 7.411232
+v -31.299688 3.214267 7.535126
+v -31.117430 5.297473 7.138780
+v -31.258039 -3.690317 7.444556
+v -31.117430 -5.297474 7.138780
+v -31.101114 -5.483966 7.114001
+v -29.958483 -9.748328 7.721571
+v -29.692530 -10.740873 7.138780
+v -29.676338 -10.801304 7.114000
+v -30.152472 -9.024349 8.146670
+v -30.087452 -9.267003 8.004190
+v -30.624981 -7.260918 8.146670
+v -31.084923 -5.544394 7.138780
+v -30.960592 -6.008402 7.411232
+v -28.713457 -12.866208 7.535125
+v -29.597219 -10.970975 7.138780
+v -25.225101 -18.824923 7.444552
+v -24.299763 -20.146442 7.138779
+v -24.192373 -20.299810 7.113997
+v -23.421539 -21.070644 7.721570
+v -23.808455 -20.683729 7.411231
+v -24.148130 -20.344053 7.138779
+v -22.891550 -21.600634 8.146669
+v -20.344053 -24.148130 7.138779
+v -21.422998 -23.069185 8.004190
+v -20.299810 -24.192373 7.113997
+v -21.600634 -22.891550 8.146669
+v -18.824923 -25.225101 7.444552
+v -20.146442 -24.299763 7.138779
+v -18.433477 -25.499193 7.535125
+v -12.866208 -28.713457 7.535124
+v -10.970975 -29.597219 7.138779
+v -10.801304 -29.676338 7.113999
+v -6.536940 -30.818972 7.721571
+v -5.544394 -31.084923 7.138779
+v -5.483966 -31.101114 7.114000
+v -10.740873 -29.692530 7.138779
+v -9.267003 -30.087452 8.004189
+v -7.018263 -30.690001 8.004189
+v -7.260918 -30.624981 8.146669
+v -9.024349 -30.152472 8.146669
+v -3.214267 -31.299688 7.535125
+v -5.297473 -31.117430 7.138779
+v 6.536940 -30.818972 7.721571
+v 5.544394 -31.084923 7.138779
+v 5.483966 -31.101114 7.114000
+v 3.214267 -31.299688 7.535125
+v 5.297473 -31.117430 7.138779
+v 7.260918 -30.624981 8.146669
+v 7.018263 -30.690001 8.004189
+v 9.024349 -30.152472 8.146669
+v 10.740873 -29.692530 7.138779
+v 9.267003 -30.087452 8.004189
+v 10.801304 -29.676338 7.113999
+v 12.866208 -28.713457 7.535124
+v 10.970975 -29.597219 7.138779
+v 18.824923 -25.225101 7.444552
+v 20.146442 -24.299763 7.138779
+v 20.299810 -24.192373 7.113997
+v 20.344053 -24.148130 7.138779
+v 22.891550 -21.600634 8.146669
+v 23.421539 -21.070644 7.721570
+v 21.600634 -22.891550 8.146669
+v 20.683729 -23.808455 7.411231
+v 24.148130 -20.344053 7.138779
+v 24.192373 -20.299810 7.113997
+v 23.808455 -20.683729 7.411231
+v 24.299763 -20.146442 7.138779
+v 28.915413 -12.433113 7.444554
+v 29.597219 -10.970975 7.138780
+v 29.676338 -10.801304 7.114000
+v 29.692530 -10.740873 7.138780
+v 29.816860 -10.276866 7.411232
+v 30.690001 -7.018264 8.004190
+v 30.818972 -6.536941 7.721572
+v 30.624981 -7.260918 8.146670
+v 30.152472 -9.024349 8.146670
+v 31.084923 -5.544394 7.138780
+v 31.101114 -5.483966 7.114001
+v 31.299688 -3.214267 7.535126
+v 31.117430 -5.297474 7.138780
+v 30.051992 -8.867484 8.587282
+v 29.422388 -7.883415 11.349128
+v 30.171564 6.895060 9.851628
+v 29.430515 8.965883 10.427240
+v 21.014034 22.395657 10.596725
+v 22.760193 21.428247 8.834147
+v 7.071633 29.828588 10.765758
+v 8.977996 29.956787 8.790085
+v -8.671090 29.347916 10.926836
+v -7.228393 30.438637 8.749757
+v -22.057669 21.141844 11.072430
+v -21.503084 22.738945 8.712857
+v -29.596914 7.418790 11.194446
+v -30.007456 8.922930 8.679046
+v -29.358049 -8.201040 11.284917
+v -30.452654 -7.298895 8.648010
+v -22.715351 -21.567936 8.619473
+v -21.442453 -21.640022 11.337319
+v -8.871375 -30.049038 8.593196
+v -7.346556 -30.459536 8.587247
+v -7.885026 -29.421959 11.349119
+v 7.884682 -29.422047 11.349134
+v 7.346619 -30.459543 8.587172
+v 21.539225 -21.538036 11.349121
+v 21.591993 -22.705486 8.587354
+vn -0.9416 -0.1240 -0.3130
+vn -0.8775 -0.3635 -0.3130
+vn -0.7535 -0.5782 -0.3130
+vn -0.5782 -0.7535 -0.3130
+vn -0.3635 -0.8775 -0.3130
+vn -0.1240 -0.9416 -0.3130
+vn 0.1240 -0.9416 -0.3130
+vn 0.3635 -0.8775 -0.3130
+vn 0.5782 -0.7535 -0.3130
+vn 0.7535 -0.5782 -0.3130
+vn 0.8775 -0.3635 -0.3130
+vn 0.9416 -0.1240 -0.3130
+vn 0.9416 0.1240 -0.3130
+vn 0.8775 0.3635 -0.3130
+vn 0.7535 0.5782 -0.3130
+vn 0.5782 0.7535 -0.3130
+vn 0.3635 0.8775 -0.3130
+vn 0.1240 0.9416 -0.3130
+vn -0.1240 0.9416 -0.3130
+vn -0.3635 0.8775 -0.3130
+vn -0.5782 0.7535 -0.3130
+vn -0.7535 0.5782 -0.3130
+vn -0.8775 0.3635 -0.3130
+vn -0.9416 0.1240 -0.3130
+vn -0.9662 -0.1272 -0.2243
+vn -0.9003 -0.3729 -0.2243
+vn -0.7731 -0.5933 -0.2243
+vn -0.5933 -0.7731 -0.2243
+vn -0.5933 -0.7731 -0.2242
+vn -0.3729 -0.9003 -0.2243
+vn -0.1272 -0.9662 -0.2243
+vn 0.1272 -0.9662 -0.2243
+vn 0.3729 -0.9003 -0.2243
+vn 0.5933 -0.7731 -0.2243
+vn 0.7731 -0.5933 -0.2243
+vn 0.9003 -0.3729 -0.2243
+vn 0.9662 -0.1272 -0.2243
+vn 0.9662 0.1272 -0.2243
+vn 0.9003 0.3729 -0.2243
+vn 0.7731 0.5933 -0.2243
+vn 0.5933 0.7731 -0.2242
+vn 0.5933 0.7731 -0.2243
+vn 0.3729 0.9003 -0.2243
+vn 0.1272 0.9662 -0.2243
+vn -0.1272 0.9662 -0.2243
+vn -0.3729 0.9003 -0.2243
+vn -0.5933 0.7731 -0.2243
+vn -0.7731 0.5933 -0.2243
+vn -0.9003 0.3729 -0.2243
+vn -0.9662 0.1272 -0.2243
+vn -0.9089 -0.2283 -0.3489
+vn -0.9518 -0.1253 -0.2800
+vn -0.8844 -0.3663 -0.2894
+vn -0.7041 -0.6106 -0.3624
+vn -0.7590 -0.5824 -0.2911
+vn -0.5821 -0.7586 -0.2929
+vn -0.3125 -0.8796 -0.3586
+vn -0.3657 -0.8828 -0.2948
+vn -0.1246 -0.9467 -0.2969
+vn 0.1616 -0.9210 -0.3544
+vn 0.1246 -0.9461 -0.2990
+vn 0.3649 -0.8809 -0.3013
+vn 0.5954 -0.7233 -0.3497
+vn 0.5800 -0.7559 -0.3037
+vn 0.7553 -0.5795 -0.3061
+vn 0.8763 -0.3369 -0.3445
+vn 0.8788 -0.3640 -0.3087
+vn 0.9422 -0.1240 -0.3114
+vn 0.9413 0.1239 -0.3142
+vn 0.9306 0.1387 -0.3388
+vn 0.8762 0.3629 -0.3170
+vn 0.7433 0.5804 -0.3327
+vn 0.7516 0.5768 -0.3200
+vn 0.5761 0.7508 -0.3231
+vn 0.3607 0.8732 -0.3278
+vn 0.3617 0.8733 -0.3262
+vn 0.1233 0.9366 -0.3278
+vn 0.1233 0.9367 -0.3278
+vn -0.1233 0.9367 -0.3278
+vn -0.3615 0.8728 -0.3277
+vn -0.5752 0.7495 -0.3278
+vn -0.5751 0.7495 -0.3277
+vn -0.7495 0.5751 -0.3278
+vn -0.8728 0.3615 -0.3278
+vn -0.9367 0.1233 -0.3278
+vn 0.9962 0.0872 0.0000
+vn 0.9659 0.2588 0.0000
+vn 0.9063 0.4226 0.0000
+vn 0.8192 0.5736 0.0000
+vn 0.7071 0.7071 0.0000
+vn 0.5736 0.8192 0.0000
+vn 0.4226 0.9063 0.0000
+vn 0.2588 0.9659 0.0000
+vn 0.0872 0.9962 0.0000
+vn -0.0872 0.9962 0.0000
+vn -0.2588 0.9659 0.0000
+vn -0.4226 0.9063 0.0000
+vn -0.5736 0.8192 0.0000
+vn -0.7071 0.7071 0.0000
+vn -0.8192 0.5736 0.0000
+vn -0.9063 0.4226 0.0000
+vn -0.9659 0.2588 0.0000
+vn -0.9962 0.0872 0.0000
+vn -0.9962 -0.0872 0.0000
+vn -0.9659 -0.2588 0.0000
+vn -0.9063 -0.4226 0.0000
+vn -0.8192 -0.5736 0.0000
+vn -0.7071 -0.7071 0.0000
+vn -0.5736 -0.8192 0.0000
+vn -0.4226 -0.9063 0.0000
+vn -0.2588 -0.9659 0.0000
+vn -0.0872 -0.9962 0.0000
+vn 0.0872 -0.9962 0.0000
+vn 0.2588 -0.9659 0.0000
+vn 0.4226 -0.9063 0.0000
+vn 0.5736 -0.8192 0.0000
+vn 0.7071 -0.7071 0.0000
+vn 0.8192 -0.5736 0.0000
+vn 0.9063 -0.4226 0.0000
+vn 0.9659 -0.2588 0.0000
+vn 0.9962 -0.0872 0.0000
+vn 0.9601 0.0840 -0.2668
+vn 0.9465 0.0828 0.3119
+vn 0.9087 0.2435 0.3392
+vn 0.9601 -0.0840 -0.2668
+vn 0.9087 -0.2435 0.3392
+vn 0.9465 -0.0828 0.3119
+vn 0.9044 0.2423 -0.3513
+vn 0.8734 0.4073 -0.2668
+vn 0.7895 0.5528 -0.2668
+vn 0.9595 0.2571 -0.1154
+vn 0.6620 0.6620 -0.3513
+vn 0.5528 0.7895 -0.2668
+vn 0.4073 0.8734 -0.2668
+vn 0.9659 0.2588 0.0108
+vn 0.7024 0.7024 -0.1154
+vn 0.7071 0.7071 0.0108
+vn 0.2423 0.9044 -0.3513
+vn 0.0840 0.9601 -0.2668
+vn -0.0840 0.9601 -0.2668
+vn 0.9582 0.2567 0.1262
+vn 0.2571 0.9595 -0.1154
+vn -0.2423 0.9044 -0.3513
+vn -0.4073 0.8734 -0.2668
+vn -0.5528 0.7895 -0.2668
+vn -0.2571 0.9595 -0.1154
+vn 0.7015 0.7015 0.1262
+vn 0.2588 0.9659 0.0108
+vn -0.2588 0.9659 0.0108
+vn 0.8611 0.4015 0.3119
+vn 0.7783 0.5450 0.3119
+vn 0.6875 0.6875 0.2340
+vn 0.9391 0.2516 0.2340
+vn -0.6620 0.6620 -0.3513
+vn -0.7895 0.5528 -0.2668
+vn -0.8734 0.4073 -0.2668
+vn 0.2567 0.9582 0.1262
+vn -0.2567 0.9582 0.1262
+vn -0.7024 0.7024 -0.1154
+vn 0.6652 0.6652 0.3392
+vn 0.5450 0.7783 0.3119
+vn 0.4015 0.8611 0.3119
+vn 0.2435 0.9087 0.3392
+vn 0.2516 0.9391 0.2340
+vn -0.9044 0.2423 -0.3513
+vn -0.9601 0.0840 -0.2668
+vn -0.9601 -0.0840 -0.2668
+vn -0.9595 0.2571 -0.1154
+vn -0.7071 0.7071 0.0108
+vn -0.7015 0.7015 0.1262
+vn 0.0828 0.9465 0.3119
+vn -0.0828 0.9465 0.3119
+vn -0.2435 0.9087 0.3392
+vn -0.9044 -0.2423 -0.3513
+vn -0.8734 -0.4073 -0.2668
+vn -0.7895 -0.5528 -0.2668
+vn -0.9659 0.2588 0.0108
+vn -0.9595 -0.2571 -0.1154
+vn -0.2516 0.9391 0.2340
+vn -0.4015 0.8611 0.3119
+vn -0.5450 0.7783 0.3119
+vn -0.6652 0.6652 0.3392
+vn -0.6620 -0.6620 -0.3513
+vn -0.5528 -0.7895 -0.2668
+vn -0.4073 -0.8734 -0.2668
+vn -0.7024 -0.7024 -0.1154
+vn -0.9582 0.2567 0.1262
+vn -0.9659 -0.2588 0.0108
+vn -0.6875 0.6875 0.2340
+vn -0.7783 0.5450 0.3119
+vn -0.8611 0.4015 0.3119
+vn -0.2423 -0.9044 -0.3513
+vn -0.0840 -0.9601 -0.2668
+vn 0.0840 -0.9601 -0.2668
+vn -0.9582 -0.2567 0.1262
+vn -0.7071 -0.7071 0.0108
+vn -0.2571 -0.9595 -0.1154
+vn -0.9391 0.2516 0.2340
+vn -0.9087 0.2435 0.3392
+vn -0.9465 0.0828 0.3119
+vn -0.9465 -0.0828 0.3119
+vn 0.2423 -0.9044 -0.3513
+vn 0.4073 -0.8734 -0.2668
+vn 0.5528 -0.7895 -0.2668
+vn 0.6620 -0.6620 -0.3513
+vn -0.7015 -0.7015 0.1262
+vn -0.2588 -0.9659 0.0108
+vn -0.2567 -0.9582 0.1262
+vn 0.2571 -0.9595 -0.1154
+vn -0.9391 -0.2516 0.2340
+vn -0.6875 -0.6875 0.2340
+vn -0.9087 -0.2435 0.3392
+vn -0.8611 -0.4015 0.3119
+vn -0.7783 -0.5450 0.3119
+vn -0.6652 -0.6652 0.3392
+vn 0.9044 -0.2423 -0.3513
+vn 0.7895 -0.5528 -0.2668
+vn 0.8734 -0.4073 -0.2668
+vn 0.2588 -0.9659 0.0108
+vn 0.7071 -0.7071 0.0108
+vn 0.7024 -0.7024 -0.1154
+vn 0.9595 -0.2571 -0.1154
+vn 0.9659 -0.2588 0.0108
+vn -0.5450 -0.7783 0.3119
+vn -0.4015 -0.8611 0.3119
+vn 0.2567 -0.9582 0.1262
+vn 0.7015 -0.7015 0.1262
+vn -0.2435 -0.9087 0.3392
+vn -0.0828 -0.9465 0.3119
+vn 0.0828 -0.9465 0.3119
+vn 0.2435 -0.9087 0.3392
+vn -0.2516 -0.9391 0.2340
+vn 0.9582 -0.2567 0.1262
+vn 0.2516 -0.9391 0.2340
+vn 0.4015 -0.8611 0.3119
+vn 0.5450 -0.7783 0.3119
+vn 0.6875 -0.6875 0.2340
+vn 0.9391 -0.2516 0.2340
+vn 0.6652 -0.6652 0.3392
+vn 0.7783 -0.5450 0.3119
+vn 0.8611 -0.4015 0.3119
+vn 0.5686 0.0497 0.8211
+vn 0.5514 0.1477 0.8211
+vn 0.5173 0.2412 0.8211
+vn 0.4676 0.3274 0.8211
+vn 0.4036 0.4036 0.8211
+vn 0.3274 0.4676 0.8211
+vn 0.2412 0.5173 0.8211
+vn 0.1477 0.5514 0.8211
+vn 0.1477 0.5513 0.8211
+vn 0.0497 0.5686 0.8211
+vn -0.0497 0.5686 0.8211
+vn -0.1477 0.5514 0.8211
+vn -0.1477 0.5513 0.8211
+vn -0.2412 0.5173 0.8211
+vn -0.3274 0.4676 0.8211
+vn -0.4036 0.4036 0.8211
+vn -0.4676 0.3274 0.8211
+vn -0.5173 0.2412 0.8211
+vn -0.5514 0.1477 0.8211
+vn -0.5686 0.0497 0.8211
+vn -0.5686 -0.0497 0.8211
+vn -0.5513 -0.1477 0.8211
+vn -0.5514 -0.1477 0.8211
+vn -0.5173 -0.2412 0.8211
+vn -0.4676 -0.3274 0.8211
+vn -0.4036 -0.4036 0.8211
+vn -0.3274 -0.4676 0.8211
+vn -0.2412 -0.5173 0.8211
+vn -0.1477 -0.5514 0.8211
+vn -0.1477 -0.5513 0.8211
+vn -0.0497 -0.5686 0.8211
+vn 0.0497 -0.5686 0.8211
+vn 0.1477 -0.5514 0.8211
+vn 0.2412 -0.5173 0.8211
+vn 0.3274 -0.4676 0.8211
+vn 0.4036 -0.4036 0.8211
+vn 0.4676 -0.3274 0.8211
+vn 0.5173 -0.2412 0.8211
+vn 0.5514 -0.1477 0.8211
+vn 0.5513 -0.1477 0.8211
+vn 0.5686 -0.0497 0.8211
+vn 0.8930 0.0781 -0.4431
+vn 0.8659 0.2320 -0.4431
+vn 0.8125 0.3789 -0.4431
+vn 0.7343 0.5142 -0.4431
+vn 0.6339 0.6339 -0.4431
+vn 0.5142 0.7343 -0.4431
+vn 0.3789 0.8125 -0.4431
+vn 0.2320 0.8659 -0.4431
+vn 0.0781 0.8930 -0.4431
+vn -0.0781 0.8930 -0.4431
+vn -0.2320 0.8659 -0.4431
+vn -0.3789 0.8125 -0.4431
+vn -0.5142 0.7343 -0.4431
+vn -0.6339 0.6339 -0.4431
+vn -0.7343 0.5142 -0.4431
+vn -0.8125 0.3789 -0.4431
+vn -0.8659 0.2320 -0.4431
+vn -0.8930 0.0781 -0.4431
+vn -0.8930 -0.0781 -0.4431
+vn -0.8659 -0.2320 -0.4431
+vn -0.8125 -0.3789 -0.4431
+vn -0.7343 -0.5142 -0.4431
+vn -0.6339 -0.6339 -0.4431
+vn -0.5142 -0.7343 -0.4431
+vn -0.3789 -0.8125 -0.4431
+vn -0.2320 -0.8659 -0.4431
+vn -0.0781 -0.8930 -0.4431
+vn 0.0781 -0.8930 -0.4431
+vn 0.2320 -0.8659 -0.4431
+vn 0.3789 -0.8125 -0.4431
+vn 0.5142 -0.7343 -0.4431
+vn 0.6339 -0.6339 -0.4431
+vn 0.7343 -0.5142 -0.4431
+vn 0.8125 -0.3789 -0.4431
+vn 0.8659 -0.2320 -0.4431
+vn 0.8930 -0.0781 -0.4431
+vn 0.0000 0.0000 -1.0000
+vn -0.9548 -0.0835 -0.2853
+vn -0.9547 -0.0835 0.2855
+vn -0.8890 -0.2382 0.3911
+vn -0.9220 0.2470 -0.2982
+vn -0.9548 0.0835 -0.2853
+vn -0.8890 0.2382 0.3911
+vn -0.9547 0.0835 0.2855
+vn -0.9220 -0.2470 -0.2982
+vn -0.8686 -0.4051 -0.2853
+vn -0.7851 -0.5497 -0.2853
+vn -0.6749 -0.6749 -0.2982
+vn -0.5497 -0.7851 -0.2853
+vn -0.4051 -0.8686 -0.2853
+vn -0.7015 -0.7015 -0.1252
+vn -0.9583 -0.2568 -0.1252
+vn -0.2470 -0.9220 -0.2982
+vn -0.0835 -0.9548 -0.2853
+vn 0.0835 -0.9548 -0.2853
+vn 0.2470 -0.9220 -0.2982
+vn -0.9654 -0.2587 0.0337
+vn -0.9368 -0.1786 0.3008
+vn -0.8824 -0.4115 0.2282
+vn -0.7975 -0.5584 0.2282
+vn -0.9524 -0.2552 0.1670
+vn 0.4051 -0.8686 -0.2853
+vn 0.5497 -0.7851 -0.2853
+vn -0.7067 -0.7067 0.0337
+vn -0.6785 -0.6785 0.2814
+vn -0.5584 -0.7975 0.2282
+vn -0.4115 -0.8824 0.2282
+vn -0.2568 -0.9583 -0.1252
+vn 0.2568 -0.9583 -0.1252
+vn 0.6749 -0.6749 -0.2982
+vn 0.7851 -0.5497 -0.2853
+vn 0.8686 -0.4051 -0.2853
+vn 0.9220 -0.2470 -0.2982
+vn -0.2484 -0.9269 0.2814
+vn -0.0849 -0.9699 0.2282
+vn 0.0849 -0.9699 0.2282
+vn -0.2587 -0.9654 0.0337
+vn 0.2587 -0.9654 0.0337
+vn 0.9548 -0.0835 -0.2853
+vn 0.9548 0.0835 -0.2853
+vn 0.9220 0.2470 -0.2982
+vn 0.2484 -0.9269 0.2814
+vn 0.4115 -0.8824 0.2282
+vn 0.5584 -0.7975 0.2282
+vn 0.7015 -0.7015 -0.1252
+vn 0.9583 -0.2568 -0.1252
+vn 0.8686 0.4051 -0.2853
+vn 0.7851 0.5497 -0.2853
+vn 0.6749 0.6749 -0.2982
+vn 0.7067 -0.7067 0.0337
+vn 0.6785 -0.6785 0.2814
+vn 0.7975 -0.5584 0.2282
+vn 0.8824 -0.4115 0.2282
+vn 0.9269 -0.2484 0.2814
+vn 0.9654 -0.2587 0.0337
+vn 0.5497 0.7851 -0.2853
+vn 0.4051 0.8686 -0.2853
+vn 0.2470 0.9220 -0.2982
+vn 0.9699 -0.0849 0.2282
+vn 0.9699 0.0849 0.2282
+vn 0.9583 0.2568 -0.1252
+vn 0.0835 0.9548 -0.2853
+vn -0.0835 0.9548 -0.2853
+vn -0.2470 0.9220 -0.2982
+vn 0.9654 0.2587 0.0337
+vn 0.9269 0.2484 0.2814
+vn 0.8824 0.4115 0.2282
+vn 0.7975 0.5584 0.2282
+vn 0.7015 0.7015 -0.1252
+vn -0.4051 0.8686 -0.2853
+vn -0.5497 0.7851 -0.2853
+vn 0.6785 0.6785 0.2814
+vn 0.7067 0.7067 0.0337
+vn 0.5584 0.7975 0.2282
+vn 0.4115 0.8824 0.2282
+vn 0.2484 0.9269 0.2814
+vn 0.2568 0.9583 -0.1252
+vn -0.2568 0.9583 -0.1252
+vn -0.6749 0.6749 -0.2982
+vn -0.7851 0.5497 -0.2853
+vn -0.8686 0.4051 -0.2853
+vn 0.2587 0.9654 0.0337
+vn 0.0849 0.9699 0.2282
+vn -0.0849 0.9699 0.2282
+vn -0.2587 0.9654 0.0337
+vn -0.2484 0.9269 0.2814
+vn -0.4115 0.8824 0.2282
+vn -0.5584 0.7975 0.2282
+vn -0.6785 0.6785 0.2814
+vn -0.7015 0.7015 -0.1252
+vn -0.9583 0.2568 -0.1252
+vn -0.9654 0.2587 0.0337
+vn -0.9524 0.2552 0.1670
+vn -0.9368 0.1786 0.3008
+vn -0.7067 0.7067 0.0337
+vn -0.7975 0.5584 0.2282
+vn -0.8824 0.4115 0.2282
+vn -0.4469 -0.0391 -0.8937
+vn -0.4333 -0.1161 -0.8937
+vn -0.4066 -0.1896 -0.8937
+vn -0.4065 -0.1896 -0.8937
+vn -0.3675 -0.2573 -0.8937
+vn -0.3172 -0.3172 -0.8937
+vn -0.2573 -0.3675 -0.8937
+vn -0.1896 -0.4066 -0.8937
+vn -0.1161 -0.4333 -0.8937
+vn -0.0391 -0.4469 -0.8937
+vn 0.0391 -0.4469 -0.8937
+vn 0.1161 -0.4333 -0.8937
+vn 0.1896 -0.4065 -0.8937
+vn 0.1896 -0.4066 -0.8937
+vn 0.2573 -0.3675 -0.8937
+vn 0.3172 -0.3172 -0.8937
+vn 0.3675 -0.2573 -0.8937
+vn 0.4066 -0.1896 -0.8937
+vn 0.4065 -0.1896 -0.8937
+vn 0.4333 -0.1161 -0.8937
+vn 0.4469 -0.0391 -0.8937
+vn 0.4469 0.0391 -0.8937
+vn 0.4333 0.1161 -0.8937
+vn 0.4065 0.1896 -0.8937
+vn 0.3675 0.2573 -0.8937
+vn 0.3172 0.3172 -0.8937
+vn 0.2573 0.3675 -0.8937
+vn 0.1896 0.4065 -0.8937
+vn 0.1896 0.4066 -0.8937
+vn 0.1161 0.4333 -0.8937
+vn 0.0391 0.4469 -0.8937
+vn -0.0391 0.4469 -0.8937
+vn -0.1161 0.4333 -0.8937
+vn -0.1896 0.4065 -0.8937
+vn -0.1896 0.4066 -0.8937
+vn -0.2573 0.3675 -0.8937
+vn -0.3172 0.3172 -0.8937
+vn -0.3675 0.2573 -0.8937
+vn -0.4066 0.1896 -0.8937
+vn -0.4065 0.1896 -0.8937
+vn -0.4333 0.1161 -0.8937
+vn -0.4469 0.0391 -0.8937
+vn -0.8191 -0.5736 0.0000
+vn -0.5736 -0.8191 0.0000
+vn 0.5736 -0.8191 0.0000
+vn 0.8191 -0.5736 0.0000
+vn 0.8191 0.5736 0.0000
+vn 0.5736 0.8191 0.0000
+vn -0.5736 0.8191 0.0000
+vn -0.8191 0.5736 0.0000
+vn -0.0000 0.0000 1.0000
+s off
+f 463//1 459//1 458//1 460//1 28//1 575//1 576//1 580//1 26//1
+f 464//1 463//1 26//1
+f 467//2 462//2 461//2 464//2 26//2 578//2 579//2 586//2 30//2 466//2
+f 30//2 470//2 465//2 466//2
+f 473//3 469//3 468//3 470//3 30//3 588//3 589//3 596//3 32//3
+f 474//3 473//3 32//3
+f 34//4 478//4 475//4 472//4 471//4 474//4 32//4 591//4 592//4 599//4
+f 34//4 477//4 478//4
+f 36//5 484//5 480//5 479//5 476//5 477//5 34//5 601//5 602//5 607//5
+f 36//5 485//5 484//5
+f 37//6 487//6 486//6 483//6 482//6 36//6 609//6 610//6 612//6
+f 485//6 36//6 482//6 481//6
+f 40//7 492//7 491//7 489//7 488//7 490//7 37//7 614//7 615//7 622//7
+f 487//7 37//7 490//7
+f 42//8 497//8 496//8 495//8 494//8 493//8 40//8 617//8 618//8 625//8
+f 492//8 40//8 493//8
+f 44//9 504//9 500//9 499//9 498//9 42//9 627//9 628//9 635//9
+f 497//9 42//9 498//9
+f 507//10 503//10 502//10 44//10 631//10 632//10 637//10 46//10 506//10
+f 501//10 504//10 44//10 502//10
+f 511//11 510//11 508//11 509//11 46//11 639//11 640//11 647//11 48//11 514//11
+f 505//11 506//11 46//11 509//11
+f 50//12 516//12 515//12 512//12 513//12 48//12 642//12 643//12 650//12
+f 514//12 48//12 513//12
+f 516//13 50//13 519//13
+f 52//13 521//13 520//13 518//13 517//13 519//13 50//13 652//13 653//13 660//13
+f 523//14 522//14 521//14 52//14 655//14 656//14 663//14 54//14 524//14
+f 524//14 54//14 526//14 525//14
+f 526//15 54//15 527//15
+f 55//15 533//15 529//15 528//15 527//15 54//15 665//15 666//15 669//15
+f 533//16 55//16 531//16 530//16
+f 676//16 57//16 535//16 534//16 532//16 531//16 55//16 671//16 673//16
+f 543//17 538//17 537//17 539//17 57//17 679//17 680//17 684//17 59//17
+f 535//17 57//17 539//17 536//17
+f 690//18 61//18 545//18 544//18 542//18 541//18 59//18 682//18 683//18
+f 59//18 541//18 540//18 543//18
+f 692//19 64//19 552//19 549//19 547//19 546//19 548//19 61//19 695//19 693//19
+f 548//19 545//19 61//19
+f 703//20 65//20 555//20 554//20 553//20 550//20 551//20 64//20 699//20 701//20
+f 64//20 551//20 552//20
+f 707//21 67//21 560//21 558//21 556//21 557//21 65//21 705//21 706//21
+f 65//21 557//21 555//21
+f 715//22 69//22 565//22 563//22 562//22 561//22 67//22 712//22 713//22
+f 560//22 67//22 561//22 559//22
+f 569//23 568//23 567//23 566//23 69//23 717//23 718//23 719//23 71//23
+f 565//23 69//23 566//23 564//23
+f 728//24 28//24 460//24 573//24 571//24 572//24 71//24 725//24 726//24
+f 71//24 572//24 570//24 569//24
+f 74//25 26//25 581//25 584//25
+f 26//25 580//25 581//25
+f 574//25 575//25 28//25 278//25
+f 583//26 582//26 74//26
+f 280//26 30//26 585//26
+f 30//26 586//26 585//26
+f 577//26 578//26 26//26 74//26 582//26
+f 78//27 32//27 597//27 595//27
+f 32//27 596//27 597//27
+f 587//27 588//27 30//27 280//27
+f 283//28 34//28 598//28
+f 593//29 594//29 78//29
+f 598//28 34//28 599//28
+f 32//28 78//28 594//28 590//28 591//28
+f 605//30 80//30 608//30
+f 283//30 600//30 34//30
+f 80//30 36//30 607//30 608//30
+f 34//30 600//30 601//30
+f 286//31 37//31 611//31
+f 603//31 604//31 80//31
+f 611//31 37//31 612//31
+f 36//31 80//31 604//31 606//31 609//31
+f 83//32 40//32 623//32 621//32
+f 623//32 40//32 622//32
+f 613//32 614//32 37//32 286//32
+f 289//33 42//33 624//33
+f 619//33 620//33 83//33
+f 624//33 42//33 625//33
+f 40//33 83//33 620//33 616//33 617//33
+f 86//34 44//34 636//34 633//34
+f 636//34 44//34 635//34
+f 626//34 627//34 42//34 289//34
+f 629//35 630//35 44//35 86//35 634//35
+f 292//35 46//35 637//35
+f 630//35 631//35 44//35
+f 90//36 48//36 648//36 646//36
+f 648//36 48//36 647//36
+f 638//36 639//36 46//36 292//36
+f 295//37 50//37 649//37
+f 644//37 645//37 90//37
+f 649//37 50//37 650//37
+f 48//37 90//37 645//37 641//37 642//37
+f 92//38 52//38 661//38 659//38
+f 661//38 52//38 660//38
+f 651//38 652//38 50//38 295//38
+f 662//39 54//39 663//39
+f 52//39 92//39 658//39 654//39 655//39
+f 298//39 54//39 662//39
+f 657//39 658//39 92//39
+f 668//40 55//40 669//40
+f 664//40 665//40 54//40 298//40
+f 95//40 55//40 668//40 667//40 670//40
+f 674//41 672//41 95//41
+f 677//42 301//42 57//42
+f 671//42 55//42 95//42 672//42
+f 57//42 676//42 675//42 677//42
+f 301//43 678//43 57//43
+f 688//43 98//43 685//43
+f 678//43 679//43 57//43
+f 59//43 684//43 685//43 98//43
+f 687//44 686//44 98//44
+f 689//44 304//44 61//44
+f 61//44 690//44 689//44
+f 681//44 682//44 59//44 98//44 686//44
+f 304//45 694//45 61//45
+f 696//45 102//45 697//45
+f 694//45 695//45 61//45
+f 64//45 692//45 691//45 697//45 102//45
+f 698//46 700//46 102//46
+f 307//46 65//46 702//46
+f 65//46 703//46 702//46
+f 700//46 699//46 64//46 102//46
+f 105//47 67//47 711//47 710//47
+f 67//47 707//47 711//47
+f 704//47 705//47 65//47 307//47
+f 714//48 67//48 105//48 708//48 709//48
+f 714//48 712//48 67//48
+f 715//48 310//48 69//48
+f 724//49 107//49 71//49 720//49
+f 71//49 719//49 720//49
+f 716//49 717//49 69//49 310//49
+f 723//50 721//50 107//50
+f 727//50 278//50 28//50
+f 28//50 728//50 727//50
+f 722//50 725//50 71//50 107//50 721//50
+f 74//51 731//51 732//51
+f 731//52 74//52 584//52
+f 732//53 583//53 74//53
+f 78//54 734//54 733//54
+f 734//55 78//55 595//55
+f 733//56 593//56 78//56
+f 80//57 736//57 735//57
+f 736//58 80//58 605//58
+f 735//59 603//59 80//59
+f 83//60 738//60 737//60
+f 83//61 621//61 738//61
+f 83//62 737//62 619//62
+f 739//63 86//63 740//63
+f 86//64 633//64 740//64
+f 739//65 634//65 86//65
+f 90//66 742//66 741//66
+f 742//67 90//67 646//67
+f 741//68 644//68 90//68
+f 744//69 92//69 659//69
+f 92//70 744//70 743//70
+f 92//71 743//71 657//71
+f 746//72 95//72 745//72
+f 95//73 670//73 745//73
+f 95//74 746//74 674//74
+f 98//75 747//75 749//75
+f 747//76 98//76 688//76
+f 749//77 748//77 98//77
+f 748//78 687//78 98//78
+f 102//79 751//79 750//79
+f 751//79 102//79 696//79
+f 102//80 750//80 698//80
+f 752//81 105//81 753//81
+f 753//82 105//82 710//82
+f 105//83 752//83 708//83
+f 107//84 729//84 730//84
+f 729//84 107//84 724//84
+f 730//85 723//85 107//85
+s 1
+f 1//86 2//86 3//86
+f 4//86 2//86 1//86
+f 3//87 5//87 6//87
+f 2//87 5//87 3//87
+f 6//88 7//88 8//88
+f 5//88 7//88 6//88
+f 8//89 9//89 10//89
+f 7//89 9//89 8//89
+f 10//90 11//90 12//90
+f 9//90 11//90 10//90
+f 12//91 13//91 14//91
+f 11//91 13//91 12//91
+f 13//92 15//92 14//92
+f 14//92 15//92 16//92
+f 16//93 17//93 18//93
+f 15//93 17//93 16//93
+f 18//94 19//94 20//94
+f 17//94 19//94 18//94
+f 19//95 21//95 20//95
+f 20//95 21//95 22//95
+f 22//96 21//96 23//96
+f 21//96 24//96 23//96
+f 23//97 25//97 27//97
+f 24//97 25//97 23//97
+f 27//98 29//98 31//98
+f 25//98 29//98 27//98
+f 31//99 33//99 35//99
+f 29//99 33//99 31//99
+f 35//100 38//100 39//100
+f 33//100 38//100 35//100
+f 39//101 41//101 43//101
+f 38//101 41//101 39//101
+f 43//102 45//102 47//102
+f 47//103 45//103 49//103
+f 41//102 45//102 43//102
+f 45//103 51//103 49//103
+f 49//104 53//104 56//104
+f 51//104 53//104 49//104
+f 56//105 58//105 60//105
+f 53//105 58//105 56//105
+f 60//106 62//106 63//106
+f 58//106 62//106 60//106
+f 63//107 66//107 68//107
+f 62//107 66//107 63//107
+f 68//108 70//108 72//108
+f 66//108 70//108 68//108
+f 72//109 73//109 75//109
+f 70//109 73//109 72//109
+f 75//110 76//110 77//110
+f 73//110 76//110 75//110
+f 77//111 79//111 81//111
+f 81//112 79//112 82//112
+f 76//111 79//111 77//111
+f 79//112 84//112 82//112
+f 82//113 85//113 87//113
+f 84//113 85//113 82//113
+f 87//114 88//114 89//114
+f 89//115 88//115 91//115
+f 85//114 88//114 87//114
+f 88//115 93//115 91//115
+f 93//116 94//116 91//116
+f 91//116 94//116 96//116
+f 94//117 97//117 96//117
+f 96//117 97//117 99//117
+f 97//118 100//118 99//118
+f 99//118 100//118 101//118
+f 100//119 103//119 101//119
+f 101//119 103//119 104//119
+f 104//120 103//120 106//120
+f 103//120 108//120 106//120
+f 108//121 4//121 106//121
+f 106//121 4//121 1//121
+f 4//122 109//122 2//122
+f 112//123 110//123 111//123
+f 112//124 111//124 113//124
+f 108//125 109//125 4//125
+f 114//126 115//126 112//126
+f 115//127 110//127 112//127
+f 2//128 116//128 5//128
+f 5//129 116//129 7//129
+f 7//130 116//130 9//130
+f 109//128 116//128 2//128
+f 109//131 117//131 116//131
+f 118//131 117//131 109//131
+f 9//132 119//132 11//132
+f 11//133 119//133 13//133
+f 13//134 119//134 15//134
+f 116//132 119//132 9//132
+f 118//135 120//135 117//135
+f 121//135 120//135 118//135
+f 117//136 122//136 116//136
+f 116//136 122//136 119//136
+f 120//137 122//137 117//137
+f 15//138 123//138 17//138
+f 17//139 123//139 19//139
+f 19//140 123//140 21//140
+f 119//138 123//138 15//138
+f 124//141 125//141 121//141
+f 121//141 125//141 120//141
+f 120//137 126//137 122//137
+f 122//142 127//142 119//142
+f 119//142 127//142 123//142
+f 123//143 128//143 21//143
+f 21//143 128//143 24//143
+f 24//144 128//144 25//144
+f 25//145 128//145 29//145
+f 127//146 128//146 123//146
+f 125//147 129//147 120//147
+f 120//147 129//147 126//147
+f 126//148 130//148 122//148
+f 122//148 130//148 127//148
+f 127//146 131//146 128//146
+f 130//149 131//149 127//149
+f 112//124 113//124 132//124
+f 132//150 113//150 133//150
+f 132//151 133//151 134//151
+f 125//152 132//152 129//152
+f 112//153 132//153 124//153
+f 124//153 132//153 125//153
+f 29//154 135//154 33//154
+f 33//155 135//155 38//155
+f 38//156 135//156 41//156
+f 128//154 135//154 29//154
+f 129//157 136//157 126//157
+f 126//157 136//157 130//157
+f 136//158 137//158 130//158
+f 130//149 137//149 131//149
+f 128//159 138//159 135//159
+f 131//159 138//159 128//159
+f 140//160 134//160 139//160
+f 140//161 139//161 141//161
+f 140//162 141//162 142//162
+f 143//163 140//163 142//163
+f 132//152 140//152 129//152
+f 132//160 134//160 140//160
+f 129//164 140//164 136//164
+f 41//165 144//165 45//165
+f 45//166 144//166 51//166
+f 51//167 144//167 53//167
+f 135//165 144//165 41//165
+f 138//168 144//168 135//168
+f 136//158 145//158 137//158
+f 137//169 146//169 131//169
+f 131//169 146//169 138//169
+f 145//170 146//170 137//170
+f 138//168 147//168 144//168
+f 140//164 148//164 136//164
+f 148//171 143//171 149//171
+f 150//172 148//172 149//172
+f 151//173 148//173 150//173
+f 148//163 140//163 143//163
+f 53//174 152//174 58//174
+f 58//175 152//175 62//175
+f 62//176 152//176 66//176
+f 144//174 152//174 53//174
+f 145//170 153//170 146//170
+f 138//177 154//177 147//177
+f 146//177 154//177 138//177
+f 147//178 155//178 144//178
+f 144//178 155//178 152//178
+f 136//179 156//179 145//179
+f 156//173 148//173 151//173
+f 156//180 151//180 157//180
+f 158//181 156//181 157//181
+f 159//182 156//182 158//182
+f 148//179 156//179 136//179
+f 66//183 160//183 70//183
+f 70//184 160//184 73//184
+f 73//185 160//185 76//185
+f 155//186 160//186 152//186
+f 152//183 160//183 66//183
+f 153//187 161//187 146//187
+f 146//187 161//187 154//187
+f 147//188 162//188 155//188
+f 154//188 162//188 147//188
+f 155//186 163//186 160//186
+f 156//189 164//189 145//189
+f 145//189 164//189 153//189
+f 164//190 159//190 165//190
+f 164//191 165//191 166//191
+f 164//182 156//182 159//182
+f 76//192 167//192 79//192
+f 79//193 167//193 84//193
+f 84//194 167//194 85//194
+f 160//192 167//192 76//192
+f 154//195 168//195 162//195
+f 161//195 168//195 154//195
+f 155//196 169//196 163//196
+f 162//196 169//196 155//196
+f 163//197 170//197 160//197
+f 160//197 170//197 167//197
+f 153//198 171//198 161//198
+f 171//199 166//199 172//199
+f 171//200 172//200 173//200
+f 174//201 171//201 173//201
+f 171//199 164//199 166//199
+f 164//198 171//198 153//198
+f 85//202 175//202 88//202
+f 88//203 175//203 93//203
+f 93//204 175//204 94//204
+f 94//205 175//205 97//205
+f 167//202 175//202 85//202
+f 162//206 176//206 169//206
+f 168//206 176//206 162//206
+f 169//207 177//207 163//207
+f 176//208 177//208 169//208
+f 163//207 177//207 170//207
+f 170//209 178//209 167//209
+f 167//209 178//209 175//209
+f 171//210 179//210 161//210
+f 161//210 179//210 168//210
+f 168//211 179//211 176//211
+f 179//212 171//212 174//212
+f 179//212 174//212 180//212
+f 179//213 180//213 181//213
+f 182//214 179//214 181//214
+f 179//215 182//215 183//215
+f 108//216 184//216 109//216
+f 175//205 184//205 97//205
+f 97//217 184//217 100//217
+f 100//218 184//218 103//218
+f 103//216 184//216 108//216
+f 176//208 185//208 177//208
+f 177//219 186//219 170//219
+f 170//219 186//219 178//219
+f 186//220 187//220 178//220
+f 175//221 187//221 184//221
+f 184//222 187//222 109//222
+f 109//222 187//222 118//222
+f 118//223 187//223 121//223
+f 178//221 187//221 175//221
+f 179//211 188//211 176//211
+f 183//224 189//224 188//224
+f 188//225 189//225 190//225
+f 179//215 183//215 188//215
+f 177//226 191//226 186//226
+f 185//226 191//226 177//226
+f 187//223 192//223 121//223
+f 186//220 192//220 187//220
+f 191//227 192//227 186//227
+f 188//228 190//228 193//228
+f 190//228 194//228 193//228
+f 194//229 195//229 193//229
+f 193//230 195//230 196//230
+f 193//231 196//231 197//231
+f 176//232 193//232 185//232
+f 188//232 193//232 176//232
+f 191//227 198//227 192//227
+f 121//233 198//233 124//233
+f 192//233 198//233 121//233
+f 193//231 197//231 199//231
+f 185//234 199//234 191//234
+f 193//234 199//234 185//234
+f 199//235 197//235 200//235
+f 199//236 200//236 201//236
+f 199//237 202//237 191//237
+f 198//238 202//238 124//238
+f 199//239 201//239 202//239
+f 124//238 202//238 112//238
+f 202//126 114//126 112//126
+f 202//239 201//239 203//239
+f 203//240 204//240 202//240
+f 202//241 204//241 114//241
+f 191//237 202//237 198//237
+f 110//242 205//242 111//242
+f 206//242 205//242 110//242
+f 207//243 113//243 111//243
+f 207//243 111//243 205//243
+f 208//244 133//244 113//244
+f 208//244 113//244 207//244
+f 134//245 133//245 208//245
+f 209//245 134//245 208//245
+f 210//246 139//246 134//246
+f 210//246 134//246 209//246
+f 211//247 141//247 139//247
+f 211//247 139//247 210//247
+f 212//248 141//248 211//248
+f 212//248 142//248 141//248
+f 213//249 142//249 212//250
+f 213//249 143//249 142//249
+f 213//251 214//251 143//251
+f 143//251 214//251 149//251
+f 149//252 215//252 150//252
+f 214//252 215//252 149//252
+f 216//253 151//253 150//254
+f 215//254 216//253 150//254
+f 217//255 157//255 151//255
+f 216//255 217//255 151//255
+f 218//256 158//256 157//256
+f 217//256 218//256 157//256
+f 219//257 159//257 158//257
+f 218//257 219//257 158//257
+f 220//258 165//258 159//258
+f 219//258 220//258 159//258
+f 220//259 166//259 165//259
+f 221//259 166//259 220//259
+f 222//260 172//260 166//260
+f 221//260 222//260 166//260
+f 222//261 173//261 172//261
+f 222//261 223//261 173//261
+f 173//262 224//262 174//262
+f 223//262 224//262 173//262
+f 174//263 224//263 180//264
+f 224//263 225//264 180//264
+f 180//265 225//265 181//265
+f 225//265 226//265 181//265
+f 181//266 227//266 182//266
+f 181//266 226//266 227//266
+f 182//267 228//267 183//267
+f 182//267 227//267 228//267
+f 183//268 229//268 189//268
+f 183//268 228//268 229//268
+f 189//269 230//269 190//269
+f 189//269 229//269 230//269
+f 190//270 231//270 194//270
+f 190//270 230//271 231//270
+f 194//272 232//272 195//272
+f 231//272 232//272 194//272
+f 195//273 233//273 196//273
+f 232//273 233//273 195//273
+f 197//274 196//274 234//274
+f 196//274 233//274 234//274
+f 200//275 197//275 235//275
+f 197//275 234//275 235//275
+f 201//276 200//276 236//276
+f 200//276 235//276 236//276
+f 201//277 236//277 237//277
+f 203//277 201//277 237//277
+f 203//278 237//278 238//278
+f 204//278 203//278 238//278
+f 204//279 238//279 114//279
+f 114//279 238//279 239//279
+f 114//280 239//280 240//281
+f 115//281 114//280 240//281
+f 240//282 206//282 115//282
+f 115//282 206//282 110//282
+f 206//283 241//283 205//283
+f 206//283 242//283 241//283
+f 205//284 243//284 207//284
+f 205//284 241//284 243//284
+f 207//285 244//285 208//285
+f 207//285 243//285 244//285
+f 208//286 245//286 209//286
+f 208//286 244//286 245//286
+f 210//287 209//287 246//287
+f 246//287 209//287 245//287
+f 211//288 210//288 247//288
+f 247//288 210//288 246//288
+f 248//289 211//289 247//289
+f 212//289 211//289 248//289
+f 249//290 212//290 248//290
+f 213//290 212//290 249//290
+f 214//291 213//291 249//291
+f 214//291 249//291 250//291
+f 215//292 214//292 251//292
+f 251//292 214//292 250//292
+f 215//293 251//293 216//293
+f 216//293 251//293 252//293
+f 217//294 216//294 253//294
+f 216//294 252//294 253//294
+f 218//295 217//295 254//295
+f 217//295 253//295 254//295
+f 219//296 218//296 255//296
+f 218//296 254//296 255//296
+f 220//297 219//297 256//297
+f 256//297 219//297 255//297
+f 221//298 220//298 257//298
+f 257//298 220//298 256//298
+f 222//299 221//299 257//299
+f 222//299 257//299 258//299
+f 223//300 222//300 259//300
+f 259//300 222//300 258//300
+f 224//301 223//301 259//301
+f 224//301 259//301 260//301
+f 225//302 224//302 261//302
+f 224//302 260//302 261//302
+f 226//303 225//303 262//303
+f 225//303 261//303 262//303
+f 227//304 226//304 263//304
+f 226//304 262//304 263//304
+f 228//305 227//305 264//305
+f 227//305 263//305 264//305
+f 229//306 228//306 265//306
+f 228//306 264//306 265//306
+f 230//307 229//307 266//307
+f 229//307 265//307 266//307
+f 231//308 230//308 267//308
+f 230//308 266//308 267//308
+f 231//309 268//309 232//309
+f 231//309 267//309 268//309
+f 232//310 268//310 233//310
+f 268//310 269//310 233//310
+f 233//311 270//311 234//311
+f 233//311 269//311 270//311
+f 234//312 271//312 235//312
+f 234//312 270//312 271//312
+f 235//313 272//313 236//313
+f 235//313 271//313 272//313
+f 236//314 272//314 273//314
+f 236//314 273//314 237//314
+f 237//315 273//315 274//315
+f 238//315 237//315 274//315
+f 238//316 274//316 239//316
+f 239//316 274//316 275//316
+f 239//317 275//317 276//317
+f 240//317 239//317 276//317
+f 240//318 276//318 242//318
+f 240//318 242//318 206//318
+f 458//319 459//319 241//319 242//319
+f 458//319 242//319 460//319
+f 461//319 462//319 243//319 241//319
+f 461//319 241//319 459//319 463//319 464//319
+f 465//319 244//319 243//319 467//319 466//319
+f 462//319 467//319 243//319
+f 468//319 469//319 245//319 244//319
+f 470//319 468//319 244//319 465//319
+f 471//319 472//319 246//319 245//319
+f 471//319 245//319 469//319 473//319 474//319
+f 247//319 246//319 472//319 475//319
+f 476//319 247//319 475//319 478//319 477//319
+f 476//319 479//319 247//319
+f 479//319 480//319 248//319 247//319
+f 249//319 248//319 481//319 482//319 483//319
+f 481//319 248//319 480//319 484//319 485//319
+f 250//319 249//319 483//319 486//319
+f 486//319 487//319 250//319
+f 251//319 250//319 488//319 489//319
+f 488//319 250//319 487//319 490//319
+f 252//319 251//319 489//319 491//319
+f 252//319 491//319 492//319 493//319 494//319
+f 253//319 252//319 495//319 496//319
+f 494//319 495//319 252//319
+f 254//319 253//319 496//319 497//319 498//319 499//319
+f 254//319 499//319 500//319
+f 255//319 254//319 501//319 502//319 503//319
+f 501//319 254//319 500//319 504//319
+f 256//319 255//319 507//319 506//319 505//319
+f 503//319 507//319 255//319
+f 256//319 505//319 509//319 508//319 257//319
+f 257//319 508//319 510//319
+f 257//319 510//319 511//319 258//319
+f 258//319 511//319 514//319 513//319 512//319
+f 516//319 259//319 258//319 515//319
+f 258//319 512//319 515//319
+f 518//319 260//319 259//319 517//319
+f 519//319 517//319 259//319 516//319
+f 261//319 260//319 518//319 520//319
+f 522//319 261//319 520//319 521//319
+f 525//319 262//319 261//319 523//319 524//319
+f 522//319 523//319 261//319
+f 263//319 262//319 525//319 526//319 527//319 528//319
+f 263//319 528//319 529//319
+f 264//319 263//319 530//319 531//319 532//319
+f 530//319 263//319 529//319 533//319
+f 536//319 265//319 264//319 534//319 535//319
+f 532//319 534//319 264//319
+f 266//319 265//319 537//319 538//319
+f 537//319 265//319 536//319 539//319
+f 267//319 266//319 540//319 541//319 542//319
+f 540//319 266//319 538//319 543//319
+f 268//319 267//319 544//319 545//319
+f 542//319 544//319 267//319
+f 269//319 268//319 546//319 547//319
+f 546//319 268//319 545//319 548//319
+f 549//319 270//319 269//319 547//319
+f 270//319 549//319 552//319 551//319 550//319
+f 271//319 270//319 553//319 554//319
+f 270//319 550//319 553//319
+f 272//319 271//319 554//319 555//319 557//319 556//319
+f 272//319 556//319 558//319
+f 559//319 272//319 558//319 560//319
+f 273//319 272//319 559//319 561//319 562//319
+f 273//319 562//319 563//319
+f 564//319 274//319 273//319 563//319 565//319
+f 274//319 564//319 566//319 567//319
+f 275//319 274//319 567//319 568//319
+f 275//319 568//319 569//319 570//319
+f 571//319 276//319 275//319 570//319 572//319
+f 573//319 242//319 276//319 571//319
+f 460//319 242//319 573//319
+f 574//104 277//104 576//104 575//104
+f 574//104 278//104 277//104
+f 577//105 279//105 579//105 578//105
+f 580//105 576//105 277//105 584//105 581//105
+f 582//105 583//105 279//105 577//105
+f 279//106 280//106 585//106 586//106 579//106
+f 587//107 281//107 589//107 588//107
+f 587//107 280//107 281//107
+f 591//108 590//108 282//108 592//108
+f 594//108 593//108 282//108 590//108
+f 589//108 281//108 595//108 597//108 596//108
+f 592//109 282//109 283//109 598//109 599//109
+f 600//110 283//110 284//110 602//110 601//110
+f 604//111 603//111 285//111 606//111
+f 602//111 284//111 605//111 608//111 607//111
+f 609//111 606//111 285//111 610//111
+f 610//112 285//112 286//112 611//112 612//112
+f 614//113 613//113 287//113 615//113
+f 287//113 613//113 286//113
+f 617//114 616//114 288//114 618//114
+f 620//114 619//114 288//114 616//114
+f 615//114 287//114 621//114 623//114 622//114
+f 618//115 288//115 289//115 624//115 625//115
+f 627//116 626//116 290//116 628//116
+f 290//116 626//116 289//116
+f 630//117 629//117 291//117 632//117 631//117
+f 291//117 629//117 634//117
+f 628//117 290//117 633//117 636//117 635//117
+f 632//118 291//118 292//118 637//118
+f 639//119 638//119 293//119 640//119
+f 293//119 638//119 292//119
+f 642//120 641//120 294//120 643//120
+f 645//120 644//120 294//120 641//120
+f 640//120 293//120 646//120 648//120 647//120
+f 643//121 294//121 295//121 649//121 650//121
+f 652//86 651//86 296//86 653//86
+f 296//86 651//86 295//86
+f 655//87 654//87 297//87 656//87
+f 658//87 657//87 297//87 654//87
+f 653//87 296//87 659//87 661//87 660//87
+f 656//88 297//88 298//88 662//88 663//88
+f 665//89 664//89 299//89 666//89
+f 299//90 667//90 668//90 669//90 666//90
+f 299//89 664//89 298//89
+f 299//90 670//90 667//90
+f 672//90 674//90 300//90 673//90 671//90
+f 300//91 675//91 676//91 673//91
+f 300//91 301//91 677//91 675//91
+f 301//92 302//92 680//92 679//92 678//92
+f 681//93 303//93 683//93 682//93
+f 684//93 680//93 302//93 688//93 685//93
+f 686//93 687//93 303//93 681//93
+f 303//94 304//94 689//94 690//94 683//94
+f 305//96 691//96 692//96 693//96
+f 304//95 305//95 693//95 695//95 694//95
+f 305//96 696//96 697//96 691//96
+f 700//96 698//96 306//96 701//96 699//96
+f 306//97 307//97 702//97 703//97 701//97
+f 704//98 307//98 308//98
+f 704//98 308//98 706//98 705//98
+f 707//99 706//99 308//99 710//99 711//99
+f 708//99 309//99 709//99
+f 709//99 309//99 713//99 712//99 714//99
+f 715//100 713//100 309//100 310//100
+f 716//101 310//101 311//101
+f 716//101 311//101 718//101 717//101
+f 719//102 718//102 311//102 724//102 720//102
+f 721//102 723//102 312//102 722//102
+f 722//102 312//102 726//102 725//102
+f 312//103 278//103 727//103 728//103 726//103
+f 313//320 277//320 278//320
+f 314//321 315//321 316//321
+f 315//322 317//322 316//322
+f 311//323 313//323 312//323 723//323 730//323 729//323 724//323
+f 312//324 313//324 278//324
+f 318//325 319//325 316//325
+f 319//326 314//326 316//326
+f 731//327 584//327 277//327 320//327 279//327 583//327 732//327
+f 320//328 280//328 279//328
+f 320//329 281//329 280//329
+f 595//330 281//330 320//330 282//330 593//330 733//330 734//330
+f 313//327 320//327 277//327
+f 321//331 283//331 282//331
+f 321//332 284//332 283//332
+f 320//330 321//330 282//330
+f 320//333 322//333 321//333
+f 313//334 322//334 320//334
+f 323//334 322//334 313//334
+f 605//335 284//335 324//335 285//335 603//335 735//335 736//335
+f 324//336 286//336 285//336
+f 287//337 286//337 324//337
+f 738//338 621//338 287//338 324//338 288//338 619//338 737//338
+f 321//335 324//335 284//335
+f 323//339 325//339 322//339
+f 317//340 325//340 316//340
+f 326//341 325//341 317//341
+f 327//342 325//342 326//342
+f 328//339 325//339 323//339
+f 316//343 325//343 328//343
+f 322//333 329//333 321//333
+f 289//344 288//344 330//344
+f 330//338 288//338 324//338
+f 290//345 289//345 330//345
+f 325//346 331//346 322//346
+f 332//347 331//347 327//347
+f 333//348 331//348 332//348
+f 334//349 331//349 333//349
+f 322//346 331//346 329//346
+f 327//347 331//347 325//347
+f 321//350 335//350 324//350
+f 324//351 335//351 330//351
+f 329//350 335//350 321//350
+f 740//352 633//352 290//352 336//352 291//352 634//352 739//352
+f 336//353 292//353 291//353
+f 336//354 293//354 292//354
+f 742//355 646//355 293//355 336//355 294//355 644//355 741//355
+f 336//352 290//352 330//352
+f 334//356 337//356 331//356
+f 338//356 337//356 334//356
+f 339//357 337//357 338//357
+f 340//358 337//358 339//358
+f 331//359 337//359 329//359
+f 329//359 337//359 335//359
+f 337//360 341//360 335//360
+f 335//351 341//351 330//351
+f 342//361 295//361 294//361
+f 296//362 295//362 342//362
+f 744//363 659//363 296//363 342//363 297//363 657//363 743//363
+f 342//355 294//355 336//355
+f 343//364 344//364 340//364
+f 345//365 344//365 343//365
+f 346//366 344//366 345//366
+f 340//364 344//364 337//364
+f 337//360 344//360 341//360
+f 341//367 347//367 330//367
+f 336//368 347//368 342//368
+f 330//367 347//367 336//367
+f 298//369 297//369 348//369
+f 299//370 298//370 348//370
+f 299//371 348//371 300//371 674//371 746//371 745//371 670//371
+f 348//363 297//363 342//363
+f 341//372 349//372 347//372
+f 344//372 349//372 341//372
+f 346//373 349//373 344//373
+f 350//373 349//373 346//373
+f 351//374 349//374 350//374
+f 352//375 349//375 351//375
+f 353//376 349//376 352//376
+f 349//377 354//377 347//377
+f 347//368 354//368 342//368
+f 300//378 355//378 301//378
+f 301//379 355//379 302//379
+f 688//380 302//380 355//380 303//380 687//380 748//380 749//380 747//380
+f 348//371 355//371 300//371
+f 349//377 356//377 354//377
+f 353//376 356//376 349//376
+f 357//381 356//381 353//381
+f 358//382 356//382 357//382
+f 354//383 359//383 342//383
+f 342//383 359//383 348//383
+f 303//384 360//384 304//384
+f 360//385 305//385 304//385
+f 305//386 360//386 306//386 698//386 750//386 751//386 696//386
+f 355//380 360//380 303//380
+f 356//387 361//387 354//387
+f 362//388 361//388 358//388
+f 363//389 361//389 362//389
+f 364//390 361//390 363//390
+f 358//388 361//388 356//388
+f 354//387 361//387 359//387
+f 348//391 365//391 355//391
+f 359//391 365//391 348//391
+f 366//392 307//392 306//392
+f 366//393 308//393 307//393
+f 366//386 306//386 360//386
+f 364//394 367//394 361//394
+f 359//395 367//395 365//395
+f 368//394 367//394 364//394
+f 369//396 367//396 368//396
+f 370//397 367//397 369//397
+f 371//398 367//398 370//398
+f 361//395 367//395 359//395
+f 365//399 372//399 355//399
+f 360//400 372//400 366//400
+f 355//399 372//399 360//399
+f 373//323 313//323 311//323
+f 710//401 308//401 373//401 309//401 708//401 752//401 753//401
+f 309//402 373//402 310//402
+f 310//403 373//403 311//403
+f 373//401 308//401 366//401
+f 365//404 374//404 372//404
+f 367//404 374//404 365//404
+f 375//405 374//405 371//405
+f 376//406 374//406 375//406
+f 371//398 374//398 367//398
+f 372//400 377//400 366//400
+f 372//407 378//407 377//407
+f 379//408 378//408 376//408
+f 380//409 378//409 379//409
+f 374//407 378//407 372//407
+f 381//410 378//410 380//410
+f 382//411 378//411 381//411
+f 376//408 378//408 374//408
+f 377//412 383//412 366//412
+f 366//412 383//412 373//412
+f 313//413 383//413 323//413
+f 323//414 383//414 328//414
+f 373//413 383//413 313//413
+f 328//415 384//415 316//415
+f 316//416 384//416 318//416
+f 377//417 384//417 383//417
+f 378//417 384//417 377//417
+f 382//411 384//411 378//411
+f 385//418 384//418 382//418
+f 318//419 384//419 385//419
+f 383//414 384//414 328//414
+f 314//420 386//420 315//420
+f 387//420 386//420 314//420
+f 315//421 388//421 317//421
+f 386//421 388//421 315//421
+f 388//422 326//423 317//422
+f 388//422 389//423 326//423
+f 326//424 390//424 327//424
+f 389//424 390//424 326//424
+f 327//425 391//425 332//425
+f 390//425 391//425 327//425
+f 391//426 333//426 332//426
+f 391//426 392//426 333//426
+f 392//427 393//427 333//427
+f 333//427 393//427 334//427
+f 334//428 394//428 338//428
+f 393//428 394//428 334//428
+f 394//429 339//429 338//429
+f 394//429 395//429 339//429
+f 339//430 396//430 340//430
+f 395//430 396//430 339//430
+f 396//431 343//431 340//431
+f 396//431 397//431 343//431
+f 343//432 398//433 345//433
+f 397//432 398//433 343//432
+f 398//434 346//434 345//434
+f 398//434 399//434 346//434
+f 399//435 350//435 346//435
+f 399//435 400//435 350//435
+f 350//436 401//436 351//436
+f 400//436 401//436 350//436
+f 401//437 352//438 351//437
+f 401//437 402//438 352//438
+f 352//439 403//439 353//439
+f 402//439 403//439 352//439
+f 353//440 404//440 357//440
+f 403//440 404//440 353//440
+f 404//441 358//441 357//441
+f 404//441 405//441 358//441
+f 405//442 362//442 358//442
+f 405//442 406//442 362//442
+f 362//443 407//443 363//443
+f 406//443 407//443 362//443
+f 407//444 364//444 363//444
+f 407//444 408//444 364//444
+f 364//445 409//445 368//445
+f 408//445 409//445 364//445
+f 368//446 410//446 369//446
+f 409//446 410//446 368//446
+f 369//447 411//448 370//448
+f 410//447 411//448 369//447
+f 370//449 412//449 371//449
+f 411//449 412//449 370//449
+f 371//450 413//450 375//450
+f 412//450 413//450 371//450
+f 375//451 414//451 376//451
+f 413//451 414//451 375//451
+f 376//452 415//452 379//452
+f 414//452 415//452 376//452
+f 379//453 416//454 380//454
+f 415//453 416//454 379//453
+f 380//455 417//455 381//455
+f 416//455 417//455 380//455
+f 417//456 418//456 381//456
+f 381//456 418//456 382//456
+f 418//457 419//457 382//457
+f 382//457 419//457 385//457
+f 419//458 420//459 385//458
+f 385//458 420//459 318//459
+f 420//460 421//460 318//460
+f 318//460 421//460 319//460
+f 421//461 314//461 319//461
+f 421//461 387//461 314//461
+f 387//104 422//104 386//104
+f 423//104 422//104 387//104
+f 386//105 424//105 388//105
+f 422//105 424//105 386//105
+f 388//106 425//106 389//106
+f 424//106 425//106 388//106
+f 389//462 426//107 390//107
+f 425//462 426//107 389//462
+f 390//108 427//108 391//108
+f 426//108 427//108 390//108
+f 391//463 428//109 392//109
+f 427//463 428//109 391//463
+f 428//110 429//110 392//110
+f 392//110 429//110 393//110
+f 393//111 430//111 394//111
+f 429//111 430//111 393//111
+f 394//112 431//112 395//112
+f 430//112 431//112 394//112
+f 431//113 432//113 395//113
+f 395//113 432//113 396//113
+f 396//114 432//114 397//114
+f 432//114 433//114 397//114
+f 397//115 434//115 398//115
+f 433//115 434//115 397//115
+f 398//464 435//116 399//116
+f 434//464 435//116 398//464
+f 399//117 436//117 400//117
+f 435//117 436//117 399//117
+f 400//465 437//118 401//118
+f 436//465 437//118 400//465
+f 401//119 438//119 402//119
+f 437//119 438//119 401//119
+f 402//120 439//120 403//120
+f 403//121 439//121 404//121
+f 438//120 439//120 402//120
+f 439//121 440//121 404//121
+f 404//86 441//86 405//86
+f 440//86 441//86 404//86
+f 405//87 442//87 406//87
+f 441//87 442//87 405//87
+f 406//88 443//88 407//88
+f 442//88 443//88 406//88
+f 407//466 444//89 408//89
+f 443//466 444//89 407//466
+f 408//90 445//90 409//90
+f 444//90 445//90 408//90
+f 409//467 446//91 410//91
+f 445//467 446//91 409//467
+f 410//92 447//92 411//92
+f 446//92 447//92 410//92
+f 411//93 448//93 412//93
+f 412//94 448//94 413//94
+f 447//93 448//93 411//93
+f 448//94 449//94 413//94
+f 413//95 450//95 414//95
+f 449//95 450//95 413//95
+f 414//96 451//96 415//96
+f 415//97 451//97 416//97
+f 450//96 451//96 414//96
+f 451//97 452//97 416//97
+f 452//468 453//98 416//468
+f 416//468 453//98 417//98
+f 453//99 454//99 417//99
+f 417//99 454//99 418//99
+f 454//469 455//100 418//469
+f 418//469 455//100 419//100
+f 455//101 456//101 419//101
+f 419//101 456//101 420//101
+f 420//102 456//102 421//102
+f 456//102 457//102 421//102
+f 457//103 423//103 421//103
+f 421//103 423//103 387//103
+f 423//470 3//470 422//470
+f 1//470 3//470 423//470
+f 422//470 6//470 424//470
+f 3//470 6//470 422//470
+f 424//470 8//470 425//470
+f 6//470 8//470 424//470
+f 425//470 10//470 426//470
+f 8//470 10//470 425//470
+f 426//470 12//470 427//470
+f 10//470 12//470 426//470
+f 427//470 14//470 428//470
+f 12//470 14//470 427//470
+f 14//470 16//470 428//470
+f 428//470 16//470 429//470
+f 16//470 18//470 429//470
+f 429//470 18//470 430//470
+f 18//470 20//470 430//470
+f 430//470 20//470 431//470
+f 431//470 22//470 432//470
+f 20//470 22//470 431//470
+f 432//470 23//470 433//470
+f 22//470 23//470 432//470
+f 23//470 434//470 433//470
+f 23//470 27//470 434//470
+f 434//470 31//470 435//470
+f 27//470 31//470 434//470
+f 435//470 35//470 436//470
+f 31//470 35//470 435//470
+f 35//470 437//470 436//470
+f 35//470 39//470 437//470
+f 437//470 43//470 438//470
+f 39//470 43//470 437//470
+f 43//470 439//470 438//470
+f 43//470 47//470 439//470
+f 439//470 49//470 440//470
+f 47//470 49//470 439//470
+f 440//470 56//470 441//470
+f 49//470 56//470 440//470
+f 441//470 60//470 442//470
+f 56//470 60//470 441//470
+f 442//470 63//470 443//470
+f 60//470 63//470 442//470
+f 443//470 68//470 444//470
+f 63//470 68//470 443//470
+f 68//470 445//470 444//470
+f 68//470 72//470 445//470
+f 445//470 75//470 446//470
+f 72//470 75//470 445//470
+f 446//470 77//470 447//470
+f 75//470 77//470 446//470
+f 447//470 81//470 448//470
+f 77//470 81//470 447//470
+f 448//470 82//470 449//470
+f 81//470 82//470 448//470
+f 82//470 450//470 449//470
+f 82//470 87//470 450//470
+f 450//470 89//470 451//470
+f 87//470 89//470 450//470
+f 451//470 91//470 452//470
+f 89//470 91//470 451//470
+f 91//470 453//470 452//470
+f 91//470 96//470 453//470
+f 96//470 99//470 453//470
+f 453//470 99//470 454//470
+f 99//470 455//470 454//470
+f 99//470 101//470 455//470
+f 101//470 104//470 455//470
+f 455//470 104//470 456//470
+f 104//470 106//470 456//470
+f 456//470 106//470 457//470
+f 106//470 1//470 457//470
+f 457//470 1//470 423//470
+o Cooling_systems
+v -24.174349 -24.174349 -0.000001
+v -29.607409 -17.093845 -0.000001
+v -17.093845 -29.607409 -0.000001
+v -8.848426 -33.022774 -0.000001
+v 8.848426 -33.022774 -0.000001
+v 0.000000 -34.187691 -0.000001
+v -33.022774 -8.848426 -0.000000
+v -33.022774 8.848426 0.000000
+v -34.187691 0.000000 0.000000
+v -29.607409 17.093845 0.000001
+v -24.174349 24.174349 0.000001
+v 17.093845 -29.607409 -0.000001
+v 29.607409 -17.093845 -0.000001
+v 24.174349 -24.174349 -0.000001
+v -17.093845 29.607409 0.000001
+v -8.848426 33.022774 0.000001
+v 0.000000 34.187691 0.000001
+v 34.187691 0.000000 0.000000
+v 33.022774 -8.848426 -0.000000
+v 33.022774 8.848426 0.000000
+v 8.848426 33.022774 0.000001
+v 17.093845 29.607409 0.000001
+v 24.174349 24.174349 0.000001
+v 29.607409 17.093845 0.000001
+v 30.730791 8.234291 7.138781
+v 31.814856 -0.000000 7.138780
+v 27.552473 15.907428 7.138781
+v 22.496500 22.496500 7.138781
+v 15.907428 27.552473 7.138782
+v 8.234291 30.730791 7.138782
+v 0.000000 31.814856 7.138782
+v -8.234291 30.730791 7.138782
+v -15.907428 27.552473 7.138782
+v -22.496500 22.496500 7.138781
+v -27.552473 15.907428 7.138781
+v -30.730791 8.234291 7.138781
+v -31.814856 -0.000000 7.138780
+v -30.730791 -8.234291 7.138780
+v -27.552473 -15.907428 7.138780
+v -22.496500 -22.496500 7.138779
+v -15.907428 -27.552473 7.138779
+v -8.234291 -30.730791 7.138779
+v 0.000000 -31.814856 7.138779
+v 8.234291 -30.730791 7.138779
+v 15.907428 -27.552473 7.138779
+v 22.496500 -22.496500 7.138779
+v 27.552473 -15.907428 7.138780
+v 30.730791 -8.234291 7.138780
+v 31.580900 -0.000000 8.146670
+v 30.504807 8.173738 8.146670
+v 27.349861 15.790450 8.146671
+v 22.331068 22.331068 8.146671
+v 15.790450 27.349861 8.146671
+v 8.173738 30.504807 8.146671
+v 0.000000 31.580900 8.146671
+v -8.173738 30.504807 8.146671
+v -15.790450 27.349861 8.146671
+v -22.331068 22.331068 8.146671
+v -27.349861 15.790450 8.146671
+v -30.504807 8.173738 8.146670
+v -31.580900 -0.000000 8.146670
+v -30.504807 -8.173738 8.146670
+v -27.349861 -15.790450 8.146669
+v -22.331068 -22.331068 8.146669
+v -15.790450 -27.349861 8.146669
+v -8.173738 -30.504807 8.146669
+v 0.000000 -31.580900 8.146669
+v 8.173738 -30.504807 8.146669
+v 15.790450 -27.349861 8.146669
+v 22.331068 -22.331068 8.146669
+v 27.349861 -15.790450 8.146669
+v 30.504807 -8.173738 8.146670
+v 29.653929 4.908844 12.500000
+v 30.057484 -0.000001 12.500000
+v 28.454115 9.685845 12.500000
+v 25.048429 16.614103 12.500001
+v 19.990923 22.445829 12.500001
+v 13.615341 26.796917 12.500001
+v 6.341868 29.380827 12.500001
+v -1.349834 30.027159 12.500001
+v -8.952518 28.693287 12.500001
+v -15.964809 25.467178 12.500001
+v -21.924269 20.561583 12.500001
+v -26.437887 14.300013 12.500001
+v -29.208006 7.095398 12.500000
+v -30.051941 -0.577136 12.500000
+v -28.914042 -8.211611 12.500000
+v -25.869345 -15.304553 12.499999
+v -21.118641 -21.388205 12.499999
+v -14.975224 -26.061369 12.499999
+v -7.781271 -29.032810 12.499999
+v -0.000394 -30.057484 12.499999
+v 7.780805 -29.032936 12.499999
+v 15.030061 -26.029781 12.499999
+v 21.254658 -21.253042 12.499999
+v 26.030924 -15.028083 12.499999
+v 29.033398 -7.779081 12.500000
+v 31.176914 13.304724 0.000001
+v 32.083069 11.117073 0.000000
+v 25.669205 22.226215 0.000001
+v 27.110687 20.347637 0.000001
+v 14.825201 30.547112 0.000001
+v 4.066229 33.652363 0.000001
+v 1.132411 34.038605 0.000001
+v -1.546903 33.984035 0.000001
+v -2.087078 33.912922 0.000001
+v -11.505137 31.922327 0.000001
+v -14.825201 30.547112 0.000001
+v -25.669205 22.226215 0.000001
+v -33.812351 2.851002 0.000000
+v -33.912922 2.087078 0.000000
+v -33.226429 -7.301522 -0.000000
+v -32.716309 -9.588298 -0.000000
+v -22.936518 -25.124168 -0.000001
+v -15.148998 -30.412991 -0.000001
+v -5.997423 -33.398117 -0.000001
+v -2.434556 -33.867176 -0.000001
+v 11.117073 -32.083069 -0.000001
+v 27.856853 -19.375214 -0.000001
+v 28.325912 -18.763924 -0.000001
+v 28.657589 -18.331676 -0.000001
+v 29.119894 -17.729189 -0.000001
+v 31.176914 -13.304724 -0.000001
+v 30.044502 -16.038607 -0.000001
+v 33.867176 -2.434556 -0.000000
+v -21.735237 -24.966017 -0.000001
+v -12.294713 30.893332 0.000001
+v 1.237830 33.856014 0.000001
+v 1.375215 33.618057 0.000001
+v -2.475661 33.524338 0.000001
+v -1.750556 33.718632 0.000001
+v -15.489672 30.037245 0.000001
+v -16.202736 29.490091 0.000001
+v -7.637538 28.362463 0.000001
+v -13.631232 29.151546 0.000001
+v -14.200917 28.409119 0.000001
+v -15.757326 26.380766 0.000001
+v -9.526917 26.473083 0.000001
+v -16.415842 29.326571 0.000001
+v -16.842052 28.999527 0.000001
+v -25.004732 22.736082 0.000001
+v -18.588697 27.659279 0.000001
+v -13.959520 22.040480 0.000001
+v -32.464458 4.607606 0.000000
+v -31.686255 5.621783 0.000000
+v -17.093845 28.806320 0.000001
+v -17.093845 24.638981 0.000001
+v -17.093845 18.906155 0.000001
+v -31.303139 4.696861 0.000000
+v -33.022774 2.977226 0.000000
+v -32.339737 3.660261 0.000000
+v -33.022774 3.879997 0.000000
+v -30.558126 -9.872428 -0.000000
+v -33.022774 -7.036116 -0.000000
+v 24.349371 -6.174348 -0.000000
+v 18.486427 -16.329266 -0.000001
+v 26.539352 -9.967508 -0.000000
+v 28.989264 -17.711990 -0.000001
+v 29.939085 -15.856015 -0.000001
+v 27.486151 -11.607409 -0.000001
+v 24.316818 -17.096851 -0.000001
+v 15.489672 30.037245 0.000001
+v 21.905699 25.114054 0.000001
+v 22.914127 24.340260 0.000001
+v 25.004732 22.736082 0.000001
+v 5.857476 32.618183 0.000001
+v 11.109140 29.586134 0.000001
+v 19.392149 24.803938 0.000001
+v 26.020208 20.977224 0.000001
+v 31.176914 12.045548 0.000001
+v 32.192390 10.286692 0.000000
+v 32.344769 9.129265 0.000000
+v 31.176914 9.613006 0.000000
+v 32.500774 7.944295 0.000000
+v 33.640537 -0.713065 -0.000000
+v 33.665691 -0.904130 -0.000000
+v 33.757854 -1.604174 -0.000000
+v 31.176914 -11.236371 -0.000000
+v 31.176914 -5.214818 -0.000000
+v 31.176914 -3.923720 -0.000000
+v 31.176914 5.651303 0.000000
+v 5.400555 26.645966 0.000001
+v -6.023536 28.149975 0.000001
+v 10.223639 18.292135 0.000001
+v -7.844875 25.776360 0.000001
+v 21.366825 -16.708477 -0.000001
+v 9.395580 -32.309708 -0.000001
+v 9.248971 -32.329010 -0.000001
+v 8.596633 -32.414890 -0.000001
+v 6.413867 -32.702259 -0.000001
+v 3.979310 -33.022774 -0.000001
+v -5.091268 -33.022774 -0.000001
+v -1.729279 -31.630192 -0.000001
+v 26.950697 -19.750557 -0.000001
+v 28.325912 -18.375341 -0.000001
+v 21.475275 -22.018551 -0.000001
+v 15.343289 -24.558502 -0.000001
+v 13.229855 -25.433916 -0.000001
+v 6.807005 -28.094347 -0.000001
+v -12.820866 19.291523 0.000001
+v 0.979031 -14.024373 -0.000001
+v -17.093845 -24.354967 -0.000001
+v 4.102232 -21.564449 -0.000001
+v -19.156971 -24.626583 -0.000001
+v -13.773784 -30.044502 -0.000001
+v 5.478059 -24.885988 -0.000001
+v 16.398529 -19.945612 -0.000001
+v 15.022774 -22.328489 -0.000001
+v 19.162058 -19.581785 -0.000001
+v 17.580273 -21.643209 -0.000001
+v 23.188164 -19.051739 -0.000001
+v 22.444473 -20.339851 -0.000001
+v 27.795099 -18.906155 -0.000001
+v -17.093845 -11.645034 -0.000001
+v -17.093845 13.722868 0.000001
+v -24.963240 -10.609009 -0.000000
+v -28.749794 -1.467460 -0.000000
+v -31.237789 -4.709878 -0.000000
+vn 0.0000 0.0000 -1.0000
+vn 0.9416 0.1240 0.3130
+vn 0.8775 0.3635 0.3130
+vn 0.7535 0.5782 0.3130
+vn 0.5782 0.7535 0.3130
+vn 0.3635 0.8775 0.3130
+vn 0.1240 0.9416 0.3130
+vn -0.1240 0.9416 0.3130
+vn -0.3635 0.8775 0.3130
+vn -0.5782 0.7535 0.3130
+vn -0.7535 0.5782 0.3130
+vn -0.8775 0.3635 0.3130
+vn -0.9416 0.1240 0.3130
+vn -0.9416 -0.1240 0.3130
+vn -0.8775 -0.3635 0.3130
+vn -0.7535 -0.5782 0.3130
+vn -0.5782 -0.7535 0.3130
+vn -0.3635 -0.8775 0.3130
+vn -0.1240 -0.9416 0.3130
+vn 0.1240 -0.9416 0.3130
+vn 0.3635 -0.8775 0.3130
+vn 0.5782 -0.7535 0.3130
+vn 0.7535 -0.5782 0.3130
+vn 0.8775 -0.3635 0.3130
+vn 0.9416 -0.1240 0.3130
+vn 0.9662 0.1272 0.2243
+vn 0.9003 0.3729 0.2243
+vn 0.7731 0.5933 0.2243
+vn 0.5933 0.7731 0.2243
+vn 0.3729 0.9003 0.2243
+vn 0.1272 0.9662 0.2243
+vn -0.1272 0.9662 0.2243
+vn -0.3729 0.9003 0.2243
+vn -0.5933 0.7731 0.2243
+vn -0.7731 0.5933 0.2243
+vn -0.9003 0.3729 0.2243
+vn -0.9662 0.1272 0.2243
+vn -0.9662 -0.1272 0.2243
+vn -0.9003 -0.3729 0.2243
+vn -0.7731 -0.5933 0.2243
+vn -0.5933 -0.7731 0.2243
+vn -0.3729 -0.9003 0.2243
+vn -0.1272 -0.9662 0.2243
+vn 0.1272 -0.9662 0.2243
+vn 0.3729 -0.9003 0.2243
+vn 0.5933 -0.7731 0.2243
+vn 0.7731 -0.5933 0.2243
+vn 0.9003 -0.3729 0.2243
+vn 0.9662 -0.1272 0.2243
+vn 0.9410 0.0774 0.3293
+vn 0.9089 0.2283 0.3489
+vn 0.9518 0.1253 0.2800
+vn 0.8358 0.4109 0.3641
+vn 0.8844 0.3663 0.2894
+vn 0.7041 0.6106 0.3624
+vn 0.7590 0.5824 0.2911
+vn 0.5258 0.7704 0.3606
+vn 0.5821 0.7586 0.2929
+vn 0.3125 0.8796 0.3586
+vn 0.3657 0.8828 0.2948
+vn 0.0782 0.9310 0.3565
+vn 0.1246 0.9467 0.2969
+vn -0.1616 0.9210 0.3544
+vn -0.1246 0.9461 0.2990
+vn -0.3912 0.8503 0.3521
+vn -0.3649 0.8809 0.3013
+vn -0.5954 0.7233 0.3497
+vn -0.5800 0.7559 0.3037
+vn -0.7608 0.5484 0.3471
+vn -0.7553 0.5795 0.3061
+vn -0.8763 0.3369 0.3445
+vn -0.8788 0.3640 0.3087
+vn -0.9342 0.1028 0.3417
+vn -0.9422 0.1240 0.3114
+vn -0.9413 -0.1239 0.3142
+vn -0.9306 -0.1387 0.3388
+vn -0.8762 -0.3629 0.3170
+vn -0.8655 -0.3715 0.3358
+vn -0.7433 -0.5804 0.3327
+vn -0.7516 -0.5768 0.3200
+vn -0.5699 -0.7511 0.3332
+vn -0.5747 -0.7501 0.3272
+vn -0.5716 -0.7515 0.3295
+vn -0.5761 -0.7508 0.3231
+vn -0.5779 -0.7510 0.3194
+vn -0.5730 -0.7522 0.3254
+vn -0.3603 -0.8730 0.3287
+vn -0.3615 -0.8731 0.3272
+vn -0.3607 -0.8732 0.3278
+vn -0.3617 -0.8733 0.3262
+vn -0.3621 -0.8735 0.3254
+vn -0.3609 -0.8735 0.3268
+vn -0.1233 -0.9366 0.3278
+vn -0.1233 -0.9367 0.3278
+vn 0.1233 -0.9367 0.3278
+vn 0.3616 -0.8728 0.3278
+vn 0.3615 -0.8728 0.3277
+vn 0.5752 -0.7495 0.3278
+vn 0.5751 -0.7495 0.3277
+vn 0.7495 -0.5751 0.3278
+vn 0.8728 -0.3615 0.3278
+vn 0.9367 -0.1233 0.3278
+vn 0.0000 0.0000 1.0000
+s off
+f 755//471 879//471 867//471 754//471
+f 867//471 879//471 756//471
+f 870//471 944//471 758//471 759//471
+f 869//471 945//471 944//471 870//471
+f 757//471 945//471 869//471
+f 758//471 944//471 943//471
+f 943//471 944//471 945//471 946//471
+f 756//471 958//471 868//471
+f 946//471 945//471 757//471 868//471 958//471
+f 897//471 905//471 761//471
+f 904//471 903//471 905//471 897//471
+f 760//471 907//471 971//471 906//471 866//471
+f 866//471 906//471 755//471
+f 903//471 904//471 971//471 907//471
+f 865//471 762//471 864//471 903//471 907//471
+f 863//471 905//471 903//471 864//471
+f 761//471 905//471 863//471
+f 865//471 907//471 760//471
+f 897//471 761//471 898//471
+f 904//471 897//471 898//471 902//471
+f 756//471 879//471 957//471
+f 755//471 906//471 969//471 957//471 879//471
+f 904//471 902//471 970//471 971//471
+f 969//471 906//471 971//471 970//471
+f 764//471 894//471 862//471
+f 862//471 894//471 761//471 763//471
+f 765//471 947//471 872//471 767//471
+f 875//471 911//471 766//471
+f 873//471 966//471 948//471 874//471
+f 872//471 947//471 966//471 873//471
+f 948//471 911//471 875//471 874//471
+f 893//471 899//471 768//471
+f 896//471 901//471 900//471 890//471
+f 758//471 943//471 942//471
+f 956//471 959//471 958//471 756//471 955//471
+f 943//471 946//471 952//471 942//471
+f 952//471 946//471 958//471 959//471
+f 967//471 954//471 956//471 955//471
+f 890//471 900//471 899//471 893//471
+f 901//471 896//471 953//471 968//471
+f 954//471 967//471 968//471 953//471
+f 768//471 899//471 895//471
+f 900//471 898//471 761//471 895//471 899//471
+f 902//471 898//471 900//471 901//471
+f 756//471 957//471 955//471
+f 957//471 969//471 967//471 955//471
+f 902//471 901//471 968//471 970//471
+f 967//471 969//471 970//471 968//471
+f 761//471 894//471 895//471
+f 764//471 768//471 895//471 894//471
+f 858//471 884//471 883//471 859//471
+f 770//471 884//471 858//471
+f 860//471 769//471 859//471 883//471 880//471
+f 861//471 885//471 768//471
+f 880//471 885//471 861//471 860//471
+f 766//471 912//471 877//471
+f 878//471 930//471 771//471
+f 877//471 912//471 931//471 876//471
+f 931//471 930//471 878//471 772//471 876//471
+f 771//471 929//471 928//471
+f 928//471 929//471 932//471 933//471
+f 913//471 910//471 933//471 932//471
+f 910//471 913//471 914//471 939//471
+f 758//471 940//471 871//471
+f 962//471 964//471 965//471 963//471
+f 965//471 949//471 950//471 963//471
+f 765//471 871//471 940//471 950//471 949//471
+f 962//471 939//471 914//471 964//471
+f 771//471 930//471 929//471
+f 929//471 930//471 931//471 932//471
+f 912//471 913//471 932//471 931//471
+f 766//471 911//471 914//471 913//471 912//471
+f 765//471 949//471 947//471
+f 964//471 948//471 966//471 965//471
+f 966//471 947//471 949//471 965//471
+f 964//471 914//471 911//471 948//471
+f 892//471 893//471 768//471
+f 896//471 890//471 889//471 891//471
+f 773//471 927//471 925//471
+f 926//471 925//471 927//471 934//471
+f 934//471 908//471 937//471 926//471
+f 758//471 942//471 941//471
+f 956//471 960//471 961//471 959//471
+f 961//471 951//471 952//471 959//471
+f 941//471 942//471 952//471 951//471
+f 956//471 954//471 909//471 960//471
+f 889//471 890//471 893//471 892//471
+f 896//471 891//471 938//471 953//471
+f 937//471 908//471 909//471 954//471 953//471 938//471
+f 771//471 928//471 927//471 773//471
+f 927//471 928//471 933//471 934//471
+f 910//471 908//471 934//471 933//471
+f 758//471 941//471 940//471
+f 960//471 962//471 963//471 961//471
+f 963//471 950//471 951//471 961//471
+f 940//471 941//471 951//471 950//471
+f 960//471 909//471 939//471 962//471
+f 939//471 909//471 908//471 910//471
+f 855//471 915//471 919//471 856//471 774//471
+f 857//471 881//471 770//471
+f 775//471 915//471 855//471
+f 919//471 881//471 857//471 856//471
+f 851//471 923//471 922//471 854//471 777//471
+f 853//471 918//471 776//471
+f 853//471 854//471 922//471 918//471
+f 773//471 924//471 852//471
+f 852//471 924//471 923//471 851//471
+f 881//471 882//471 770//471
+f 775//471 776//471 916//471 915//471
+f 915//471 916//471 920//471 919//471
+f 920//471 882//471 881//471 919//471
+f 885//471 886//471 768//471
+f 880//471 883//471 887//471 888//471
+f 776//471 917//471 916//471
+f 916//471 917//471 921//471 920//471
+f 920//471 921//471 935//471 882//471
+f 886//471 885//471 880//471 888//471
+f 883//471 884//471 936//471 887//471
+f 882//471 935//471 936//471 884//471 770//471
+f 886//471 892//471 768//471
+f 888//471 887//471 891//471 889//471
+f 776//471 918//471 917//471
+f 918//471 922//471 921//471 917//471
+f 773//471 925//471 924//471
+f 923//471 924//471 925//471 926//471
+f 921//471 922//471 923//471 926//471 937//471 935//471
+f 892//471 886//471 888//471 889//471
+f 887//471 936//471 938//471 891//471
+f 935//471 937//471 938//471 936//471
+f 779//472 771//472 778//472
+f 778//472 771//472 773//472
+f 778//473 773//473 780//473
+f 780//473 773//473 852//473 851//473 777//473
+f 780//474 777//474 781//474
+f 781//474 777//474 854//474 853//474 776//474
+f 781//475 776//475 782//475
+f 782//475 776//475 775//475
+f 782//476 775//476 783//476
+f 783//476 775//476 855//476 774//476
+f 784//477 783//477 770//477
+f 770//477 783//477 774//477 856//477 857//477
+f 785//478 784//478 769//478
+f 769//478 784//478 770//478 858//478 859//478
+f 786//479 785//479 768//479
+f 768//479 785//479 769//479 860//479 861//479
+f 787//480 786//480 764//480
+f 764//480 786//480 768//480
+f 788//481 787//481 763//481
+f 763//481 787//481 764//481 862//481
+f 789//482 788//482 761//482
+f 788//482 763//482 761//482
+f 790//483 789//483 762//483
+f 762//483 789//483 761//483 863//483 864//483
+f 760//484 790//484 762//484 865//484
+f 791//484 790//484 760//484
+f 792//485 791//485 760//485
+f 792//485 760//485 866//485 755//485
+f 754//486 792//486 755//486
+f 793//486 792//486 754//486
+f 756//487 793//487 754//487 867//487
+f 793//487 756//487 794//487
+f 794//488 757//488 795//488
+f 868//488 757//488 794//488 756//488
+f 795//489 759//489 796//489
+f 870//489 759//489 795//489 757//489 869//489
+f 797//490 796//490 758//490
+f 796//490 759//490 758//490
+f 798//491 797//491 765//491
+f 871//491 765//491 797//491 758//491
+f 799//492 798//492 767//492
+f 798//492 765//492 767//492
+f 799//493 766//493 800//493
+f 875//493 766//493 799//493 767//493 872//493 873//493 874//493
+f 800//494 772//494 801//494
+f 800//494 766//494 877//494 876//494 772//494
+f 801//495 771//495 779//495
+f 878//495 771//495 801//495 772//495
+f 802//496 778//496 803//496
+f 779//496 778//496 802//496
+f 803//497 780//497 804//497
+f 778//497 780//497 803//497
+f 804//498 781//498 805//498
+f 780//498 781//498 804//498
+f 805//499 782//499 806//499
+f 781//499 782//499 805//499
+f 782//500 807//500 806//500
+f 782//500 783//500 807//500
+f 807//501 784//501 808//501
+f 783//501 784//501 807//501
+f 808//502 785//502 809//502
+f 784//502 785//502 808//502
+f 809//503 786//503 810//503
+f 785//503 786//503 809//503
+f 810//504 787//504 811//504
+f 786//504 787//504 810//504
+f 787//505 812//505 811//505
+f 787//505 788//505 812//505
+f 812//506 789//506 813//506
+f 788//506 789//506 812//506
+f 813//507 790//507 814//507
+f 789//507 790//507 813//507
+f 814//508 791//508 815//508
+f 790//508 791//508 814//508
+f 791//509 792//509 815//509
+f 815//509 792//509 816//509
+f 792//510 793//510 816//510
+f 816//510 793//510 817//510
+f 817//511 794//511 818//511
+f 793//511 794//511 817//511
+f 794//512 819//512 818//512
+f 794//512 795//512 819//512
+f 819//513 796//513 820//513
+f 795//513 796//513 819//513
+f 796//514 821//514 820//514
+f 796//514 797//514 821//514
+f 821//515 798//515 822//515
+f 797//515 798//515 821//515
+f 822//516 799//516 823//516
+f 798//516 799//516 822//516
+f 799//517 824//517 823//517
+f 799//517 800//517 824//517
+f 824//518 801//518 825//518
+f 800//518 801//518 824//518
+f 825//519 779//519 802//519
+f 801//519 779//519 825//519
+f 802//520 826//520 827//520
+f 826//521 803//521 828//521
+f 802//522 803//522 826//522
+f 828//523 804//523 829//523
+f 803//524 804//524 828//524
+f 829//525 805//525 830//525
+f 804//526 805//526 829//526
+f 830//527 806//527 831//527
+f 805//528 806//528 830//528
+f 831//529 807//529 832//529
+f 806//530 807//530 831//530
+f 832//531 808//531 833//531
+f 807//532 808//532 832//532
+f 833//533 809//533 834//533
+f 808//534 809//534 833//534
+f 834//535 810//535 835//535
+f 809//536 810//536 834//536
+f 835//537 811//537 836//537
+f 810//538 811//538 835//538
+f 836//539 812//539 837//539
+f 811//540 812//540 836//540
+f 837//541 813//541 838//541
+f 812//542 813//542 837//542
+f 838//543 814//543 839//543
+f 813//544 814//544 838//544
+f 814//545 815//545 839//545
+f 839//546 815//546 840//546
+f 815//547 816//547 840//547
+f 840//548 816//548 841//548
+f 841//549 817//549 842//549
+f 816//550 817//550 841//550
+f 842//551 818//552 843//553
+f 817//554 818//555 842//556
+f 843//557 819//558 844//559
+f 818//560 819//561 843//562
+f 819//563 845//563 844//563
+f 819//564 820//564 845//564
+f 845//565 821//565 846//565
+f 820//565 821//565 845//565
+f 846//566 822//566 847//566
+f 821//567 822//567 846//567
+f 847//568 823//568 848//568
+f 822//569 823//569 847//569
+f 848//570 824//570 849//570
+f 823//570 824//570 848//570
+f 849//571 825//571 850//571
+f 824//571 825//571 849//571
+f 850//572 802//572 827//572
+f 825//572 802//572 850//572
+f 843//573 841//573 842//573
+f 840//573 841//573 843//573
+f 845//573 843//573 844//573
+f 845//573 840//573 843//573
+f 836//573 839//573 840//573
+f 836//573 838//573 839//573
+f 836//573 837//573 838//573
+f 848//573 846//573 847//573
+f 848//573 845//573 846//573
+f 848//573 840//573 845//573
+f 834//573 835//573 836//573
+f 850//573 848//573 849//573
+f 827//573 840//573 848//573
+f 827//573 848//573 850//573
+f 832//573 833//573 834//573
+f 832//573 834//573 836//573
+f 828//573 827//573 826//573
+f 831//573 836//573 840//573
+f 831//573 840//573 827//573
+f 831//573 827//573 828//573
+f 831//573 832//573 836//573
+f 830//573 828//573 829//573
+f 830//573 831//573 828//573
+o Base
+v 36.000000 0.000000 -2.000000
+v 34.773331 9.317486 -2.000000
+v 36.000000 0.000000 0.000000
+v 34.773331 9.317486 0.000000
+v 31.176914 18.000000 -1.999999
+v 31.176914 18.000000 0.000001
+v 25.455845 25.455845 -1.999999
+v 25.455845 25.455845 0.000001
+v 18.000000 31.176914 -1.999999
+v 18.000000 31.176914 0.000001
+v 9.317486 34.773331 -1.999998
+v 9.317486 34.773331 0.000002
+v 0.000000 36.000000 -1.999998
+v 0.000000 36.000000 0.000002
+v -9.317486 34.773331 0.000002
+v -9.317486 34.773331 -1.999998
+v -18.000000 31.176914 -1.999999
+v -18.000000 31.176914 0.000001
+v -25.455845 25.455845 -1.999999
+v -25.455845 25.455845 0.000001
+v -31.176914 18.000000 -1.999999
+v -31.176914 18.000000 0.000001
+v -34.773331 9.317486 0.000000
+v -34.773331 9.317486 -2.000000
+v -36.000000 0.000000 -2.000000
+v -36.000000 0.000000 0.000000
+v -34.773331 -9.317486 -2.000000
+v -34.773331 -9.317486 -0.000000
+v -31.176914 -18.000000 -0.000001
+v -31.176914 -18.000000 -2.000001
+v -25.455845 -25.455845 -2.000001
+v -25.455845 -25.455845 -0.000001
+v -18.000000 -31.176914 -2.000001
+v -18.000000 -31.176914 -0.000001
+v -9.317486 -34.773331 -2.000001
+v -9.317486 -34.773331 -0.000002
+v 0.000000 -36.000000 -2.000002
+v 0.000000 -36.000000 -0.000002
+v 9.317486 -34.773331 -2.000001
+v 9.317486 -34.773331 -0.000002
+v 18.000000 -31.176914 -2.000001
+v 18.000000 -31.176914 -0.000001
+v 25.455845 -25.455845 -2.000001
+v 25.455845 -25.455845 -0.000001
+v 31.176914 -18.000000 -2.000001
+v 31.176914 -18.000000 -0.000001
+v 34.773331 -9.317486 -2.000000
+v 34.773331 -9.317486 -0.000000
+vn 0.9914 0.1305 0.0000
+vn 0.9239 0.3827 0.0000
+vn 0.7934 0.6088 0.0000
+vn 0.6088 0.7934 0.0000
+vn 0.3827 0.9239 0.0000
+vn 0.1305 0.9914 0.0000
+vn -0.1305 0.9914 0.0000
+vn -0.3827 0.9239 0.0000
+vn -0.6088 0.7934 0.0000
+vn -0.7934 0.6088 0.0000
+vn -0.9239 0.3827 0.0000
+vn -0.9914 0.1305 0.0000
+vn -0.9914 -0.1305 0.0000
+vn -0.9239 -0.3827 0.0000
+vn -0.7934 -0.6088 0.0000
+vn -0.6088 -0.7934 0.0000
+vn -0.3827 -0.9239 0.0000
+vn -0.1305 -0.9914 0.0000
+vn 0.1305 -0.9914 0.0000
+vn 0.3827 -0.9239 0.0000
+vn 0.6088 -0.7934 0.0000
+vn 0.7934 -0.6088 0.0000
+vn 0.9239 -0.3827 0.0000
+vn 0.9914 -0.1305 0.0000
+vn -0.0000 -0.0000 -1.0000
+vn -0.0000 -0.0000 1.0000
+s 1
+f 972//574 973//574 974//574
+f 974//574 973//574 975//574
+f 975//575 976//575 977//575
+f 973//575 976//575 975//575
+f 977//576 978//576 979//576
+f 976//576 978//576 977//576
+f 979//577 980//577 981//577
+f 978//577 980//577 979//577
+f 981//578 982//578 983//578
+f 980//578 982//578 981//578
+f 983//579 984//579 985//579
+f 985//580 984//580 986//580
+f 982//579 984//579 983//579
+f 984//580 987//580 986//580
+f 986//581 988//581 989//581
+f 987//581 988//581 986//581
+f 989//582 990//582 991//582
+f 988//582 990//582 989//582
+f 991//583 992//583 993//583
+f 993//584 992//584 994//584
+f 990//583 992//583 991//583
+f 992//584 995//584 994//584
+f 995//585 996//585 994//585
+f 994//585 996//585 997//585
+f 996//586 998//586 997//586
+f 997//586 998//586 999//586
+f 999//587 998//587 1000//587
+f 998//587 1001//587 1000//587
+f 1000//588 1002//588 1003//588
+f 1001//588 1002//588 1000//588
+f 1003//589 1004//589 1005//589
+f 1002//589 1004//589 1003//589
+f 1005//590 1006//590 1007//590
+f 1004//590 1006//590 1005//590
+f 1007//591 1008//591 1009//591
+f 1006//591 1008//591 1007//591
+f 1008//592 1010//592 1009//592
+f 1009//592 1010//592 1011//592
+f 1011//593 1012//593 1013//593
+f 1010//593 1012//593 1011//593
+f 1013//594 1014//594 1015//594
+f 1012//594 1014//594 1013//594
+f 1015//595 1016//595 1017//595
+f 1014//595 1016//595 1015//595
+f 1017//596 1018//596 1019//596
+f 1016//596 1018//596 1017//596
+f 1019//597 972//597 974//597
+f 1018//597 972//597 1019//597
+f 1001//598 998//598 1002//598
+f 1006//598 1012//598 1008//598
+f 1008//598 1012//598 1010//598
+f 995//598 992//598 996//598
+f 1002//598 1016//598 1004//598
+f 1004//598 1016//598 1006//598
+f 1012//598 1016//598 1014//598
+f 998//598 1016//598 1002//598
+f 1006//598 1016//598 1012//598
+f 990//598 988//598 992//598
+f 992//598 987//598 996//598
+f 988//598 987//598 992//598
+f 996//598 984//598 998//598
+f 998//598 984//598 1016//598
+f 987//598 984//598 996//598
+f 972//598 976//598 973//598
+f 980//598 976//598 982//598
+f 982//598 976//598 984//598
+f 1016//598 976//598 1018//598
+f 1018//598 976//598 972//598
+f 984//598 976//598 1016//598
+f 980//598 978//598 976//598
+f 999//599 1000//599 1003//599
+f 1013//599 1007//599 1009//599
+f 1013//599 1009//599 1011//599
+f 993//599 994//599 997//599
+f 1017//599 1003//599 1005//599
+f 1017//599 1005//599 1007//599
+f 1017//599 1013//599 1015//599
+f 1017//599 999//599 1003//599
+f 1017//599 1007//599 1013//599
+f 989//599 991//599 993//599
+f 986//599 993//599 997//599
+f 986//599 989//599 993//599
+f 985//599 997//599 999//599
+f 985//599 999//599 1017//599
+f 985//599 986//599 997//599
+f 977//599 974//599 975//599
+f 977//599 981//599 983//599
+f 977//599 983//599 985//599
+f 977//599 1017//599 1019//599
+f 977//599 1019//599 974//599
+f 977//599 985//599 1017//599
+f 979//599 981//599 977//599
+o Supports
+v 33.120998 -1.572073 6.105556
+v 33.134087 -2.813651 5.819593
+v 33.362934 -2.332964 5.244755
+v -17.093845 -29.607409 -0.000001
+v 33.202461 -1.822765 5.822238
+v 8.848426 -33.022774 -0.000001
+v 33.017456 -3.052778 6.105556
+v 32.164112 -2.744152 5.736480
+v 32.232033 -1.755914 5.739894
+v -33.022774 -8.848426 -0.000000
+v 32.392284 -2.265089 5.163587
+v 35.092388 -1.953260 0.123309
+v -29.607409 17.093845 0.000001
+v 34.694439 -1.949548 1.319314
+v 34.858009 -2.437509 0.735778
+v 34.169331 -0.500000 3.052778
+v 34.288998 -7.901784 -0.000000
+v 29.607409 -17.093845 -0.000001
+v 34.500210 -6.921640 -0.000000
+v 35.022591 -2.949284 0.123765
+v -8.848426 33.022774 0.000001
+v 34.006023 -4.771636 2.552835
+v 33.767212 -5.250586 3.052778
+v 33.906384 -4.260318 3.052778
+v 33.678757 -4.713014 3.552377
+v 33.022774 8.848426 0.000000
+v 32.393688 -7.079615 6.105556
+v 32.369400 -7.473064 5.917337
+v 32.731140 -6.926498 5.209875
+v 17.093845 29.607409 0.000001
+v 32.486916 -6.638690 6.105556
+v 31.776731 -6.728268 5.133968
+v 31.427654 -7.255647 5.816602
+v 32.688488 -4.573841 3.552377
+v 32.776833 -5.111397 3.052778
+v 32.916004 -4.121129 3.052778
+v 33.015755 -4.632463 2.552835
+v 33.282124 -7.683784 0.090585
+v 33.170918 -7.036911 0.838120
+v 33.450432 -7.061650 -0.000000
+v 33.508202 -6.782223 -0.000000
+v 33.610657 -2.809137 1.383469
+v 33.831997 -2.365764 0.821577
+v 33.995972 -2.875952 0.211461
+v 32.998730 -0.000000 3.577049
+v 33.169220 -0.500000 3.052778
+v 33.342262 -0.000000 2.543511
+v 34.065674 -1.882745 0.210681
+v 33.006924 0.020030 3.552377
+v 34.006924 0.020030 3.552377
+v 35.111080 -2.320672 -0.000000
+v 35.127762 2.052778 0.000000
+v 35.055016 3.052778 0.000000
+v 34.339161 0.007525 2.552835
+v 34.169331 0.500000 3.052778
+v 33.094681 2.052778 6.105556
+v 33.094433 2.895388 5.917338
+v 33.339161 0.007525 2.552835
+v 34.128967 -7.879293 -0.000000
+v 34.096497 -2.495442 -0.000000
+v 32.131592 2.811150 5.816602
+v 33.169220 0.500000 3.052778
+v 34.126007 2.052778 0.000000
+v 34.027603 2.977029 0.090585
+v 35.055016 -3.052778 -0.000000
+v 35.138729 -1.855647 -0.000000
+v 34.893414 3.052778 0.000000
+v 34.144600 -1.715931 -0.000000
+v 34.051121 -3.052778 -0.000000
+v 31.700312 -9.774324 3.052778
+v 32.651474 -10.083376 3.052778
+v 34.282661 -7.929231 -0.000000
+v 32.771252 -12.701804 0.123308
+v 32.398705 -13.089926 0.735777
+v 32.660809 -10.604228 2.552835
+v 32.342457 -11.034432 3.052778
+v 34.042831 -8.902768 -0.000000
+v 31.009111 -12.528495 5.244754
+v 32.348694 -10.489667 3.552377
+v 31.014151 -11.993677 5.822237
+v 32.109257 -8.274511 6.105556
+v 30.111877 -11.630219 5.739893
+v 30.106943 -12.163995 5.163587
+v 31.397638 -10.180651 3.552377
+v 31.391294 -10.725381 3.052778
+v 31.445078 -12.704637 0.821576
+v 31.709753 -10.295211 2.552835
+v 31.816582 -12.317470 0.210680
+v 33.090103 -8.593208 -0.000000
+v 35.052563 3.080840 0.000000
+v 34.950554 4.078280 0.000000
+v 33.820526 5.963471 2.543511
+v 33.737045 5.441038 3.052778
+v 33.482212 5.903817 3.577049
+v 32.995949 3.277087 6.105556
+v 33.269569 3.526987 5.209875
+v 32.948360 3.725240 6.105556
+v 32.300617 3.420587 5.133969
+v 32.752129 5.267371 3.052778
+v 33.721943 3.557876 0.838120
+v 30.642923 -12.914937 5.819592
+v 32.397083 -13.627512 0.123764
+v 29.741899 -12.549101 5.736480
+v 31.443375 -13.240525 0.211460
+v 33.995419 3.620723 0.000000
+v 33.964016 3.904327 0.000000
+v 32.501995 5.751318 3.552377
+v 33.486801 5.924966 3.552377
+v 34.219841 8.017640 0.123765
+v 33.905167 8.453507 0.735778
+v 33.816166 5.970344 2.552835
+v 33.563396 6.425846 3.052778
+v 32.450962 8.090934 5.244755
+v 32.381855 7.563055 5.819593
+v 32.831360 5.796695 2.552835
+v 30.168989 -18.110926 -0.000001
+v 30.672745 -17.244022 -0.000001
+v 30.867134 -15.046535 2.552834
+v 30.492004 -15.428246 3.052777
+v 30.930376 -14.529451 3.052777
+v 30.573999 -14.889650 3.552376
+v 28.475824 -17.110001 5.917337
+v 28.988758 -16.701969 5.209874
+v 30.458107 -13.106319 6.105556
+v 31.943193 -12.183209 -0.000001
+v 32.845490 -12.623289 -0.000001
+v 32.395943 -13.735960 -0.000001
+v 30.031483 -14.091032 3.052777
+v 27.647358 -16.612207 5.816601
+v 29.675205 -14.451280 3.552376
+v 29.593111 -14.989826 3.052777
+v 29.968340 -14.608163 2.552834
+v 29.278763 -17.592455 0.090584
+v 29.772373 -16.804882 -0.000001
+v 31.441179 -13.425739 -0.000001
+v 31.437878 7.329413 5.736481
+v 31.506845 7.855539 5.163588
+v 32.578480 6.252179 3.052778
+v 32.907200 8.204687 0.821577
+v 33.220810 7.770141 0.211461
+v 32.140682 8.526572 5.822238
+v 34.109749 8.642831 0.000000
+v 33.978436 8.986484 0.123309
+v 30.023741 -18.040083 -0.000001
+v 32.980183 8.736276 0.210681
+v 31.197092 8.290273 5.739894
+v 32.344830 7.299591 6.105556
+v 31.985739 8.739820 6.105556
+v 33.598816 8.867040 1.319314
+v 32.656158 10.618542 2.552835
+v 32.651474 10.083376 3.052778
+v 32.774143 12.807384 0.000001
+v 32.395943 13.735960 0.000001
+v 32.342457 11.034432 3.052778
+v 32.336315 10.527766 3.552377
+v 30.840570 12.179128 6.105556
+v 30.579950 12.980419 5.917338
+v 31.563553 8.333787 4.640615
+v 31.700312 9.774324 3.052778
+v 33.992344 9.093639 0.000000
+v 34.282661 7.929231 0.000000
+v 33.327900 7.619010 0.000000
+v 27.128355 -19.091869 3.052777
+v 27.937462 -19.679720 3.052777
+v 28.749411 -17.980524 0.838119
+v 30.154482 -18.135073 -0.000001
+v 27.532114 -17.234060 5.133968
+v 27.242241 -22.207008 0.123308
+v 26.767988 -22.461010 0.735777
+v 27.785389 -20.177965 2.552834
+v 27.349676 -20.488737 3.052777
+v 29.625549 -18.986849 -0.000001
+v 25.619900 -21.497648 5.244754
+v 27.523952 -19.972563 3.552376
+v 25.789961 -20.990564 5.822237
+v 27.980753 -17.791834 6.105555
+v 25.044163 -20.366079 5.739893
+v 24.874523 -20.872204 5.163586
+v 26.714935 -19.384777 3.552376
+v 26.540569 -19.900887 3.052777
+v 25.980099 -21.799891 0.821576
+v 26.976372 -19.590179 2.552834
+v 26.453060 -21.546474 0.210680
+v 28.815111 -18.398031 -0.000001
+v 28.967661 -18.156895 -0.000001
+v 33.003696 8.919314 0.000000
+v 31.385260 10.218750 3.552377
+v 30.125620 12.144022 5.133969
+v 29.690268 12.602771 5.816603
+v 31.391294 10.725381 3.052778
+v 31.705101 10.309525 2.552835
+v 31.445028 12.690074 0.838121
+v 31.821417 12.497824 0.000001
+v 31.716002 12.762974 0.000001
+v 31.442221 13.346431 0.090586
+v 32.242249 13.686022 0.000001
+v 25.152216 -21.752020 5.819592
+v 26.600327 -22.971783 0.123764
+v 24.408342 -21.125656 5.736479
+v 25.812878 -22.309025 0.211460
+v 32.384933 13.761890 0.000001
+v 31.979694 14.678990 0.000001
+v 30.067417 18.199741 0.123766
+v 30.316147 16.127905 2.552836
+v 30.404465 15.600055 3.052779
+v 29.633453 18.517036 0.735779
+v 29.934992 16.483004 3.052779
+v 30.016928 15.982968 3.552378
+v 30.368336 13.313004 6.105556
+v 30.551342 13.635226 5.209876
+v 30.184591 13.724517 6.105556
+v 28.362463 17.722834 5.244756
+v 28.459862 17.199436 5.819594
+v 29.521420 15.130531 3.052779
+v 25.871408 -20.739868 6.105555
+v 23.095831 -26.547245 -0.000001
+v 23.842817 -25.878439 -0.000001
+v 24.706753 -23.848574 2.552834
+v 24.232031 -24.095682 3.052777
+v 24.926689 -23.376341 3.052777
+v 24.476446 -23.608786 3.552376
+v 22.045752 -24.768061 6.105555
+v 21.794836 -25.072092 5.917337
+v 22.408754 -24.842535 5.209874
+v 22.380342 -24.466143 6.105555
+v 24.917305 -21.876925 6.105555
+v 26.614964 -21.457911 -0.000001
+v 27.337107 -22.155275 -0.000001
+v 26.565725 -23.074572 -0.000001
+v 24.207270 -22.681606 3.052777
+v 25.388269 21.303288 6.000001
+v 21.303288 25.388269 6.000001
+v 21.753139 -24.121176 5.133968
+v 16.571016 28.701843 6.000001
+v 21.160746 -24.342651 5.816601
+v 23.757107 -22.914127 3.552376
+v 23.512611 -23.400946 3.052777
+v 23.987413 -23.153915 2.552834
+v 22.409389 -25.779055 0.090584
+v 22.699642 -25.190357 0.838119
+v -21.303288 25.388269 6.000001
+v 22.911234 -25.374664 -0.000001
+v -25.388269 21.303288 6.000001
+v -28.701843 16.571016 6.000001
+v 23.122215 -25.182562 -0.000001
+v 25.753557 -22.484495 -0.000001
+v 27.634285 16.685526 5.736481
+v 29.133980 15.513497 3.552378
+v 27.537294 17.207212 5.163588
+v 29.051947 16.013479 3.052779
+v -25.388269 -21.303288 5.999999
+v 29.433201 15.658433 2.552836
+v 31.095196 14.208694 0.000001
+v -21.303288 -25.388269 5.999999
+v 28.761221 17.972006 0.821578
+v -16.571016 -28.701843 5.999999
+v 29.193762 17.655638 0.211462
+v 27.932751 18.041269 5.822239
+v 29.538435 19.046568 0.123310
+v 22.979582 -26.434986 -0.000001
+v 28.666361 18.500130 0.210682
+v 27.108364 17.524950 5.739895
+v 21.303288 -25.388269 5.999999
+v 25.388269 -21.303288 5.999999
+v 28.701843 -16.571016 5.999999
+v 27.719492 18.196199 6.105557
+v 27.776543 20.190142 2.552836
+v 27.937462 19.679720 3.052779
+v 27.212364 22.308313 0.000001
+v 26.565725 23.074572 0.000001
+v 27.349676 20.488737 3.052779
+v 27.500404 20.004972 3.552378
+v 25.072092 21.794836 5.917339
+v 27.128355 19.091869 3.052779
+v 29.518549 19.152777 0.000001
+v 30.154482 18.135073 0.000001
+v 29.342312 17.544996 0.000001
+v 19.900887 -26.540569 3.052777
+v 20.488737 -27.349676 3.052777
+v 23.074572 -26.565725 -0.000001
+v 19.046568 -29.538435 0.123308
+v 18.517036 -29.633453 0.735777
+v 20.190142 -27.776543 2.552834
+v 19.679720 -27.937462 3.052777
+v 22.308313 -27.212364 -0.000001
+v 17.722834 -28.362463 5.244753
+v 20.004972 -27.500404 3.552376
+v 18.041269 -27.932751 5.822237
+v 17.524950 -27.108364 5.739893
+v 17.207212 -27.537294 5.163586
+v 19.417187 -26.691387 3.552376
+v 19.091869 -27.128355 3.052777
+v 17.972006 -28.761221 0.821576
+v 19.602356 -26.967525 2.552834
+v 18.500130 -28.666361 0.210680
+v 21.719496 -26.401926 -0.000001
+v 28.632162 18.681475 0.000001
+v 26.691387 19.417187 3.552378
+v 24.342651 21.160746 5.816603
+v 26.540569 19.900887 3.052779
+v 26.967525 19.602356 2.552836
+v 26.401926 21.719496 0.000001
+v 25.779055 22.409389 0.090586
+v 26.434986 22.979582 0.000001
+v 17.199436 -28.459862 5.819592
+v 18.199741 -30.067417 0.123764
+v 16.685526 -27.634285 5.736479
+v 17.655638 -29.193762 0.211460
+v 26.547245 23.095831 0.000001
+v 25.878439 23.842817 0.000001
+v 22.971783 26.600327 0.123766
+v 23.848574 24.706753 2.552836
+v 24.095682 24.232031 3.052779
+v 22.461010 26.767988 0.735779
+v 23.376341 24.926689 3.052779
+v 23.608786 24.476446 3.552378
+v 24.768061 22.045752 6.105557
+v 24.842535 22.408754 5.209876
+v 24.466143 22.380342 6.105557
+v 21.497648 25.619900 5.244756
+v 21.752020 25.152216 5.819594
+v 24.121176 21.753139 5.133970
+v 23.400946 23.512611 3.052779
+v 25.190357 22.699642 0.838121
+v 18.196199 -27.719492 6.105555
+v 13.761890 -32.384933 -0.000001
+v 14.678990 -31.979694 -0.000001
+v 16.127905 -30.316147 2.552834
+v 15.600055 -30.404465 3.052777
+v 16.483004 -29.934992 3.052777
+v 15.982968 -30.016928 3.552376
+v 13.313004 -30.368336 6.105555
+v 12.980419 -30.579950 5.917336
+v 13.635226 -30.551342 5.209874
+v 13.724517 -30.184591 6.105555
+v 18.681475 -28.632162 -0.000001
+v 19.152777 -29.518549 -0.000001
+v 18.135073 -30.154482 -0.000001
+v 16.013479 -29.051947 3.052777
+v 13.234611 -29.662691 5.133967
+v 12.602771 -29.690268 5.816601
+v 15.513497 -29.133980 3.552376
+v 15.130531 -29.521420 3.052777
+v 15.658433 -29.433201 2.552834
+v 13.346431 -31.442221 0.090584
+v 13.804395 -30.972029 0.838119
+v 13.948675 -31.212700 -0.000001
+v 14.208694 -31.095196 -0.000001
+v 17.544996 -29.342312 -0.000001
+v 21.125656 24.408342 5.736481
+v 22.914127 23.757107 3.552378
+v 20.872204 24.874523 5.163588
+v 22.681606 24.207270 3.052779
+v 23.153915 23.987413 2.552836
+v 25.374664 22.911234 0.000001
+v 25.182562 23.122215 0.000001
+v 21.799891 25.980099 0.821578
+v 22.309025 25.812878 0.211462
+v 20.990564 25.789961 5.822239
+v 22.207008 27.242241 0.123310
+v 13.686022 -32.242249 -0.000001
+v 21.546474 26.453060 0.210682
+v 20.366079 25.044163 5.739895
+v 21.876925 24.917305 6.105557
+v 20.739868 25.871408 6.105557
+v 20.177965 27.785389 2.552836
+v 20.488737 27.349676 3.052779
+v 18.986849 29.625549 0.000001
+v 18.135073 30.154482 0.000001
+v 19.679720 27.937462 3.052779
+v 19.972563 27.523952 3.552378
+v 17.791834 27.980753 6.105557
+v 17.110001 28.475824 5.917339
+v 19.900887 26.540569 3.052779
+v 22.155275 27.337107 0.000001
+v 23.074572 26.565725 0.000001
+v 22.484495 25.753557 0.000001
+v 10.725381 -31.391294 3.052777
+v 11.034432 -32.342457 3.052777
+v 13.735960 -32.395943 -0.000001
+v 8.986484 -33.978436 0.123308
+v 8.453507 -33.905167 0.735776
+v 10.618542 -32.656158 2.552834
+v 10.083376 -32.651474 3.052777
+v 12.807384 -32.774143 -0.000001
+v 8.090934 -32.450962 5.244753
+v 10.527766 -32.336315 3.552376
+v 8.526572 -32.140682 5.822237
+v 12.179128 -30.840570 6.105555
+v 8.290273 -31.197092 5.739892
+v 7.855539 -31.506845 5.163586
+v 10.218750 -31.385260 3.552376
+v 9.774324 -31.700312 3.052777
+v 8.204687 -32.907200 0.821576
+v 10.309525 -31.705101 2.552834
+v 8.736276 -32.980183 0.210680
+v 12.497824 -31.821417 -0.000001
+v 21.457911 26.614964 0.000001
+v 19.384777 26.714935 3.552378
+v 16.612207 27.647358 5.816604
+v 19.091869 27.128355 3.052779
+v 19.590179 26.976372 2.552836
+v 18.398031 28.815111 0.000001
+v 17.592455 29.278763 0.090586
+v 18.040083 30.023741 0.000001
+v 7.563055 -32.381855 5.819592
+v 8.017640 -34.219841 0.123764
+v 7.329414 -31.437878 5.736479
+v 7.770141 -33.220810 0.211460
+v 18.110926 30.168989 0.000001
+v 17.244022 30.672745 0.000001
+v 13.627512 32.397083 0.123766
+v 15.046535 30.867134 2.552836
+v 15.428246 30.492004 3.052779
+v 13.089926 32.398705 0.735779
+v 14.529451 30.930376 3.052779
+v 14.889650 30.573999 3.552378
+v 16.701969 28.988758 5.209877
+v 12.528495 31.009111 5.244756
+v 12.914937 30.642923 5.819594
+v 16.218513 28.142317 5.133970
+v 14.989826 29.593111 3.052779
+v 16.942877 29.372890 0.838121
+v 8.739820 -31.985739 6.105555
+v 3.080840 -35.052563 -0.000002
+v 4.078280 -34.950554 -0.000002
+v 5.970344 -33.816166 2.552834
+v 5.441038 -33.737045 3.052777
+v 6.425846 -33.563396 3.052777
+v 5.924966 -33.486801 3.552376
+v 3.277087 -32.995949 6.105555
+v 2.895388 -33.094433 5.917336
+v 3.526987 -33.269569 5.209874
+v 3.725240 -32.948360 6.105555
+v 7.299591 -32.344830 6.105555
+v 8.919314 -33.003696 -0.000001
+v 9.093639 -33.992344 -0.000001
+v 31.096409 8.332258 6.000000
+v 7.929231 -34.282661 -0.000001
+v 6.252179 -32.578480 3.052777
+v 3.420587 -32.300617 5.133967
+v 2.811150 -32.131592 5.816601
+v 5.751318 -32.501995 3.552376
+v 5.267371 -32.752129 3.052777
+v 5.796695 -32.831360 2.552834
+v 2.977029 -34.027603 0.090584
+v 3.557876 -33.721943 0.838118
+v 16.096685 27.880278 6.000001
+v 3.620723 -33.995419 -0.000001
+v 3.904327 -33.964016 -0.000001
+v 7.619010 -33.327900 -0.000001
+v 12.549101 29.741899 5.736482
+v 14.451280 29.675205 3.552378
+v 12.163995 30.106943 5.163589
+v 14.091032 30.031483 3.052779
+v 14.608163 29.968340 2.552836
+v 17.052780 29.631081 0.000001
+v 16.804882 29.772373 0.000001
+v 12.704637 31.445078 0.821578
+v 13.240525 31.443375 0.211462
+v 11.993677 31.014151 5.822239
+v -8.332258 31.096409 6.000001
+v 12.701804 32.771252 0.123310
+v 3.052778 -34.893414 -0.000002
+v 12.317470 31.816582 0.210682
+v 11.630219 30.111877 5.739895
+v 13.106319 30.458107 6.105557
+v 10.604228 32.660809 2.552836
+v 11.034432 32.342457 3.052779
+v 8.902768 34.042831 0.000001
+v 7.929231 34.282661 0.000001
+v 10.083376 32.651474 3.052779
+v 10.489667 32.348694 3.552378
+v -27.880278 16.096685 6.000000
+v 8.274511 32.109257 6.105557
+v 7.473064 32.369400 5.917339
+v 10.725381 31.391294 3.052779
+v 12.623289 32.845490 0.000001
+v 13.735960 32.395943 0.000001
+v 13.425739 31.441179 0.000001
+v 0.500000 -33.169220 3.052777
+v 0.500000 -34.169331 3.052777
+v 3.052778 -35.055016 -0.000002
+v -1.953260 -35.092388 0.123307
+v -2.437509 -34.858009 0.735776
+v 0.007525 -34.339161 2.552834
+v -0.500000 -34.169331 3.052777
+v 2.052778 -35.127762 -0.000002
+v -2.332964 -33.362934 5.244753
+v 0.020030 -34.006924 3.552376
+v -31.096409 -8.332258 6.000000
+v -1.822765 -33.202461 5.822237
+v 2.052778 -33.094681 6.105555
+v -1.755914 -32.232033 5.739892
+v -2.265089 -32.392284 5.163586
+v 0.020030 -33.006924 3.552376
+v -0.500000 -33.169220 3.052777
+v -2.365764 -33.831997 0.821576
+v 0.007525 -33.339161 2.552834
+v -1.882745 -34.065674 0.210680
+v 2.052778 -34.126007 -0.000001
+v 12.183209 31.943193 0.000001
+v 10.180651 31.397638 3.552378
+v -16.096685 -27.880278 5.999999
+v 7.255646 31.427654 5.816604
+v 9.774324 31.700312 3.052779
+v 10.295211 31.709753 2.552836
+v 8.593208 33.090103 0.000001
+v 7.683784 33.282124 0.090586
+v 7.879293 34.128967 0.000001
+v -2.813651 -33.134087 5.819592
+v -2.949284 -35.022591 0.123763
+v -2.744152 -32.164112 5.736479
+v -2.875952 -33.995972 0.211460
+v 7.901784 34.288998 0.000001
+v 6.921640 34.500210 0.000002
+v 2.949284 35.022591 0.123767
+v 4.771636 34.006023 2.552836
+v 5.250586 33.767212 3.052779
+v 2.437509 34.858009 0.735780
+v 8.332258 -31.096409 5.999999
+v 4.260318 33.906384 3.052779
+v 4.713014 33.678757 3.552378
+v 7.079614 32.393688 6.105557
+v 6.926498 32.731140 5.209877
+v 6.638690 32.486916 6.105557
+v 2.332964 33.362934 5.244756
+v 2.813651 33.134087 5.819594
+v 6.728268 31.776731 5.133970
+v 5.111397 32.776833 3.052779
+v 7.036911 33.170918 0.838121
+v -1.572073 -33.120998 6.105555
+v -7.901784 -34.288998 -0.000001
+v -6.921640 -34.500210 -0.000002
+v 27.880278 -16.096685 6.000000
+v -4.771636 -34.006023 2.552834
+v -5.250586 -33.767212 3.052777
+v -4.260318 -33.906384 3.052777
+v -4.713014 -33.678757 3.552376
+v -7.079614 -32.393688 6.105555
+v -7.473064 -32.369400 5.917336
+v -6.926498 -32.731140 5.209874
+v -6.638690 -32.486916 6.105555
+v -3.052778 -33.017456 6.105555
+v -1.715931 -34.144600 -0.000001
+v -1.855647 -35.138729 -0.000002
+v -3.052778 -35.055016 -0.000002
+v -4.121129 -32.916004 3.052777
+v -6.728268 -31.776731 5.133967
+v -7.255646 -31.427654 5.816601
+v -4.573841 -32.688488 3.552376
+v -5.111397 -32.776833 3.052777
+v -4.632463 -33.015755 2.552834
+v -7.683784 -33.282124 0.090584
+v -7.036911 -33.170918 0.838119
+v -7.061650 -33.450432 -0.000001
+v -6.782223 -33.508202 -0.000001
+v -3.052778 -34.051121 -0.000001
+v 2.744152 32.164112 5.736482
+v 4.573841 32.688488 3.552378
+v 2.265089 32.392284 5.163589
+v 4.121129 32.916004 3.052779
+v 4.632463 33.015755 2.552836
+v 7.061650 33.450432 0.000001
+v 6.782223 33.508202 0.000001
+v 2.365764 33.831997 0.821579
+v 2.875952 33.995972 0.211462
+v 1.822765 33.202461 5.822239
+v 1.953260 35.092388 0.123311
+v -7.879293 -34.128967 -0.000001
+v 1.882745 34.065674 0.210682
+v 1.755914 32.232033 5.739895
+v 3.052778 33.017456 6.105557
+v 1.572073 33.120998 6.105557
+v -0.007525 34.339161 2.552836
+v 0.500000 34.169331 3.052779
+v -2.052778 35.127762 0.000002
+v -3.052778 35.055016 0.000002
+v -0.500000 34.169331 3.052779
+v -0.020030 34.006924 3.552378
+v -2.052778 33.094681 6.105557
+v -2.895388 33.094433 5.917339
+v 0.500000 33.169220 3.052779
+v 1.855647 35.138729 0.000002
+v 3.052778 35.055016 0.000002
+v 3.052778 34.051121 0.000001
+v -9.774324 -31.700312 3.052777
+v -10.083376 -32.651474 3.052777
+v -7.929231 -34.282661 -0.000001
+v -12.701804 -32.771252 0.123308
+v -13.089926 -32.398705 0.735777
+v -10.604228 -32.660809 2.552834
+v -11.034432 -32.342457 3.052777
+v -8.902768 -34.042831 -0.000001
+v -12.528495 -31.009111 5.244753
+v -10.489667 -32.348694 3.552376
+v -11.993677 -31.014151 5.822237
+v -8.274511 -32.109257 6.105555
+v -11.630219 -30.111877 5.739892
+v -12.163995 -30.106943 5.163586
+v -10.180651 -31.397638 3.552376
+v -10.725381 -31.391294 3.052777
+v -12.704637 -31.445078 0.821576
+v -10.295211 -31.709753 2.552834
+v -12.317470 -31.816582 0.210680
+v -8.593208 -33.090103 -0.000001
+v 1.715931 34.144600 0.000001
+v -0.020030 33.006924 3.552378
+v -2.811150 32.131592 5.816604
+v -0.500000 33.169220 3.052779
+v -0.007525 33.339161 2.552836
+v -2.052778 34.126007 0.000001
+v -2.977029 34.027603 0.090586
+v -3.052778 34.893414 0.000002
+v -12.914937 -30.642923 5.819592
+v -13.627512 -32.397083 0.123764
+v -12.549101 -29.741899 5.736479
+v -13.240525 -31.443375 0.211460
+v -3.080840 35.052563 0.000002
+v -4.078280 34.950554 0.000002
+v -8.017640 34.219841 0.123766
+v -5.970344 33.816166 2.552836
+v -5.441038 33.737045 3.052779
+v -8.453507 33.905167 0.735779
+v -6.425846 33.563396 3.052779
+v -5.924966 33.486801 3.552378
+v -3.277087 32.995949 6.105557
+v -3.526987 33.269569 5.209877
+v -3.725240 32.948360 6.105557
+v -8.090934 32.450962 5.244756
+v -7.563055 32.381855 5.819594
+v -3.420587 32.300617 5.133970
+v -5.267371 32.752129 3.052779
+v -3.557876 33.721943 0.838121
+v -18.110926 -30.168989 -0.000001
+v -17.244022 -30.672745 -0.000001
+v -15.046535 -30.867134 2.552834
+v -15.428246 -30.492004 3.052777
+v -14.529451 -30.930376 3.052777
+v -14.889650 -30.573999 3.552376
+v -17.110001 -28.475824 5.917336
+v -16.701969 -28.988758 5.209874
+v -13.106319 -30.458107 6.105555
+v -12.183209 -31.943193 -0.000001
+v -12.623289 -32.845490 -0.000001
+v -13.735960 -32.395943 -0.000001
+v -14.091032 -30.031483 3.052777
+v -16.218513 -28.142317 5.133967
+v -16.612207 -27.647358 5.816601
+v -14.451280 -29.675205 3.552376
+v -14.989826 -29.593111 3.052777
+v -14.608163 -29.968340 2.552834
+v -17.592455 -29.278763 0.090584
+v -16.942877 -29.372890 0.838119
+v -17.052780 -29.631081 -0.000001
+v -16.804882 -29.772373 -0.000001
+v -13.425739 -31.441179 -0.000001
+v -7.329414 31.437878 5.736482
+v -5.751318 32.501995 3.552378
+v -7.855539 31.506845 5.163589
+v -6.252179 32.578480 3.052779
+v -5.796695 32.831360 2.552836
+v -3.620723 33.995419 0.000001
+v -3.904327 33.964016 0.000001
+v -8.204687 32.907200 0.821578
+v -7.770141 33.220810 0.211462
+v -8.526572 32.140682 5.822239
+v -8.986484 33.978436 0.123310
+v -18.040083 -30.023741 -0.000001
+v -8.736276 32.980183 0.210682
+v -8.290273 31.197092 5.739895
+v -7.299591 32.344830 6.105557
+v -8.739820 31.985739 6.105557
+v -10.618542 32.656158 2.552836
+v -10.083376 32.651474 3.052779
+v -12.807384 32.774143 0.000001
+v -13.735960 32.395943 0.000001
+v -11.034432 32.342457 3.052779
+v -10.527766 32.336315 3.552378
+v -12.179128 30.840570 6.105557
+v -12.980419 30.579950 5.917339
+v -9.774324 31.700312 3.052779
+v -9.093639 33.992344 0.000001
+v -7.929231 34.282661 0.000001
+v -7.619010 33.327900 0.000001
+v -19.091869 -27.128355 3.052777
+v -19.679720 -27.937462 3.052777
+v -18.135073 -30.154482 -0.000001
+v -22.207008 -27.242241 0.123308
+v -22.461010 -26.767988 0.735777
+v -20.177965 -27.785389 2.552834
+v -20.488737 -27.349676 3.052777
+v -18.986849 -29.625549 -0.000001
+v -21.497648 -25.619900 5.244754
+v -19.972563 -27.523952 3.552376
+v -20.990564 -25.789961 5.822237
+v -17.791834 -27.980753 6.105555
+v -20.366079 -25.044163 5.739893
+v -20.872204 -24.874523 5.163586
+v -19.384777 -26.714935 3.552376
+v -19.900887 -26.540569 3.052777
+v -21.799891 -25.980099 0.821576
+v -19.590179 -26.976372 2.552834
+v -21.546474 -26.453060 0.210680
+v -18.398031 -28.815111 -0.000001
+v -8.919314 33.003696 0.000001
+v -10.218750 31.385260 3.552378
+v -12.144022 30.125620 5.133970
+v -12.602771 29.690268 5.816604
+v -10.725381 31.391294 3.052779
+v -10.309525 31.705101 2.552836
+v -12.690074 31.445028 0.838121
+v -12.497824 31.821417 0.000001
+v -12.762974 31.716002 0.000001
+v -13.346431 31.442221 0.090586
+v -13.686022 32.242249 0.000001
+v -21.752020 -25.152216 5.819592
+v -22.971783 -26.600327 0.123764
+v -21.125656 -24.408342 5.736479
+v -22.309025 -25.812878 0.211460
+v -13.761890 32.384933 0.000001
+v -14.678990 31.979694 0.000001
+v -18.199741 30.067417 0.123766
+v -16.127905 30.316147 2.552836
+v -15.600055 30.404465 3.052779
+v -18.517036 29.633453 0.735779
+v -16.483004 29.934992 3.052779
+v -15.982968 30.016928 3.552378
+v -13.313004 30.368336 6.105557
+v -13.635226 30.551342 5.209877
+v -13.724517 30.184591 6.105557
+v -17.722834 28.362463 5.244756
+v -17.199436 28.459862 5.819594
+v -15.130531 29.521420 3.052779
+v -20.739868 -25.871408 6.105555
+v -26.547245 -23.095831 -0.000001
+v -25.878439 -23.842817 -0.000001
+v -23.848574 -24.706753 2.552834
+v -24.095682 -24.232031 3.052777
+v -23.376341 -24.926689 3.052777
+v -23.608786 -24.476446 3.552376
+v -24.768061 -22.045752 6.105555
+v -25.072092 -21.794836 5.917337
+v -24.842535 -22.408754 5.209874
+v -24.466143 -22.380342 6.105555
+v -21.876925 -24.917305 6.105555
+v -21.457911 -26.614964 -0.000001
+v -22.155275 -27.337107 -0.000001
+v -23.074572 -26.565725 -0.000001
+v -22.681606 -24.207270 3.052777
+v -24.121176 -21.753139 5.133968
+v -24.342651 -21.160746 5.816601
+v -22.914127 -23.757107 3.552376
+v -23.400946 -23.512611 3.052777
+v -23.153915 -23.987413 2.552834
+v -25.779055 -22.409389 0.090584
+v -25.190357 -22.699642 0.838119
+v -25.374664 -22.911234 -0.000001
+v -25.182562 -23.122215 -0.000001
+v -22.484495 -25.753557 -0.000001
+v -16.685526 27.634285 5.736482
+v -15.513497 29.133980 3.552378
+v -17.207212 27.537294 5.163589
+v -16.013479 29.051947 3.052779
+v -15.658433 29.433201 2.552836
+v -14.208694 31.095196 0.000001
+v -17.972006 28.761221 0.821578
+v -17.655638 29.193762 0.211462
+v -18.041269 27.932751 5.822239
+v -19.046568 29.538435 0.123310
+v -26.434986 -22.979582 -0.000001
+v -18.500130 28.666361 0.210682
+v -17.524950 27.108364 5.739895
+v -18.196199 27.719492 6.105557
+v -20.190142 27.776543 2.552836
+v -19.679720 27.937462 3.052779
+v -22.308313 27.212364 0.000001
+v -23.074572 26.565725 0.000001
+v -20.488737 27.349676 3.052779
+v -20.004972 27.500404 3.552378
+v -21.794836 25.072092 5.917339
+v -19.091869 27.128355 3.052779
+v -19.152777 29.518549 0.000001
+v -18.135073 30.154482 0.000001
+v -17.544996 29.342312 0.000001
+v -26.540569 -19.900887 3.052777
+v -27.349676 -20.488737 3.052777
+v -26.565725 -23.074572 -0.000001
+v -29.538435 -19.046568 0.123308
+v -29.633453 -18.517036 0.735777
+v -27.776543 -20.190142 2.552834
+v -27.937462 -19.679720 3.052777
+v -27.212364 -22.308313 -0.000001
+v -28.362463 -17.722834 5.244754
+v -27.500404 -20.004972 3.552376
+v -27.932751 -18.041269 5.822237
+v -27.108364 -17.524950 5.739893
+v -27.537294 -17.207212 5.163586
+v -26.691387 -19.417187 3.552376
+v -27.128355 -19.091869 3.052777
+v -28.761221 -17.972006 0.821576
+v -26.967525 -19.602356 2.552834
+v -28.666361 -18.500130 0.210680
+v -26.401926 -21.719496 -0.000001
+v -18.681475 28.632162 0.000001
+v -19.417187 26.691387 3.552378
+v -21.160746 24.342651 5.816603
+v -19.900887 26.540569 3.052779
+v -19.602356 26.967525 2.552836
+v -21.719496 26.401926 0.000001
+v -22.409389 25.779055 0.090586
+v -22.979582 26.434986 0.000001
+v -28.459862 -17.199436 5.819592
+v -30.067417 -18.199741 0.123764
+v -27.634285 -16.685526 5.736479
+v -29.193762 -17.655638 0.211460
+v -23.095831 26.547245 0.000001
+v -23.842817 25.878439 0.000001
+v -26.600327 22.971783 0.123766
+v -24.706753 23.848574 2.552836
+v -24.232031 24.095682 3.052779
+v -26.767988 22.461010 0.735779
+v -24.926689 23.376341 3.052779
+v -24.476446 23.608786 3.552378
+v -22.045752 24.768061 6.105557
+v -22.408754 24.842535 5.209876
+v -22.380342 24.466143 6.105557
+v -25.619900 21.497648 5.244756
+v -25.152216 21.752020 5.819594
+v -21.753139 24.121176 5.133970
+v -23.512611 23.400946 3.052779
+v -22.699642 25.190357 0.838121
+v -27.719492 -18.196199 6.105555
+v -32.384933 -13.761890 -0.000001
+v -31.979694 -14.678990 -0.000001
+v -30.316147 -16.127905 2.552834
+v -30.404465 -15.600055 3.052777
+v -29.934992 -16.483004 3.052777
+v -30.016928 -15.982968 3.552376
+v -30.368336 -13.313004 6.105556
+v -30.579950 -12.980419 5.917337
+v -30.551342 -13.635226 5.209875
+v -30.184591 -13.724517 6.105556
+v -28.632162 -18.681475 -0.000001
+v -29.518549 -19.152777 -0.000001
+v -30.154482 -18.135073 -0.000001
+v -29.051947 -16.013479 3.052777
+v -29.690268 -12.602771 5.816602
+v -29.133980 -15.513497 3.552376
+v -29.521420 -15.130531 3.052777
+v -29.433201 -15.658433 2.552834
+v -31.442221 -13.346431 0.090584
+v -31.095196 -14.208694 -0.000001
+v -29.342312 -17.544996 -0.000001
+v -24.408342 21.125656 5.736481
+v -23.757107 22.914127 3.552378
+v -24.874523 20.872204 5.163588
+v -24.207270 22.681606 3.052779
+v -23.987413 23.153915 2.552836
+v -22.911234 25.374664 0.000001
+v -23.122215 25.182562 0.000001
+v -25.980099 21.799891 0.821578
+v -25.812878 22.309025 0.211462
+v -25.789961 20.990564 5.822239
+v -27.242241 22.207008 0.123310
+v -32.242249 -13.686022 -0.000001
+v -26.453060 21.546474 0.210682
+v -25.044163 20.366079 5.739895
+v -24.917305 21.876925 6.105557
+v -25.871408 20.739868 6.105557
+v -27.785389 20.177965 2.552836
+v -27.349676 20.488737 3.052779
+v -29.625549 18.986849 0.000001
+v -30.154482 18.135073 0.000001
+v -27.937462 19.679720 3.052779
+v -27.523952 19.972563 3.552378
+v -27.980753 17.791834 6.105557
+v -28.475824 17.110001 5.917339
+v -26.540569 19.900887 3.052779
+v -27.337107 22.155275 0.000001
+v -26.565725 23.074572 0.000001
+v -25.753557 22.484495 0.000001
+v -31.391294 -10.725381 3.052778
+v -32.342457 -11.034432 3.052778
+v -31.445028 -12.690074 0.838119
+v -32.395943 -13.735960 -0.000001
+v -30.125620 -12.144022 5.133968
+v -33.978436 -8.986484 0.123309
+v -33.905167 -8.453507 0.735778
+v -32.656158 -10.618542 2.552835
+v -32.651474 -10.083376 3.052778
+v -32.774143 -12.807384 -0.000001
+v -32.450962 -8.090934 5.244754
+v -32.336315 -10.527766 3.552377
+v -32.140682 -8.526572 5.822237
+v -30.840570 -12.179128 6.105556
+v -31.197092 -8.290273 5.739893
+v -31.506845 -7.855539 5.163587
+v -31.385260 -10.218750 3.552377
+v -31.700312 -9.774324 3.052778
+v -32.907200 -8.204687 0.821577
+v -31.705101 -10.309525 2.552835
+v -32.980183 -8.736276 0.210681
+v -31.821417 -12.497824 -0.000001
+v -31.716002 -12.762974 -0.000001
+v -26.614964 21.457911 0.000001
+v -26.714935 19.384777 3.552378
+v -27.532114 17.234060 5.133970
+v -27.647358 16.612207 5.816603
+v -27.128355 19.091869 3.052779
+v -26.976372 19.590179 2.552836
+v -28.749411 17.980524 0.838121
+v -28.815111 18.398031 0.000001
+v -28.967661 18.156895 0.000001
+v -29.278763 17.592455 0.090586
+v -30.023741 18.040083 0.000001
+v -32.381855 -7.563056 5.819592
+v -34.219841 -8.017640 0.123765
+v -31.437878 -7.329414 5.736480
+v -33.220810 -7.770141 0.211461
+v -30.168989 18.110926 0.000001
+v -30.672745 17.244022 0.000001
+v -32.397083 13.627512 0.123766
+v -30.867134 15.046535 2.552836
+v -30.492004 15.428246 3.052779
+v -32.398705 13.089926 0.735779
+v -30.930376 14.529451 3.052779
+v -30.573999 14.889650 3.552378
+v -28.988758 16.701969 5.209876
+v -31.009111 12.528495 5.244755
+v -30.642923 12.914937 5.819593
+v -29.593111 14.989826 3.052779
+v -31.985739 -8.739820 6.105556
+v -35.052563 -3.080840 -0.000000
+v -34.950554 -4.078280 -0.000000
+v -33.816166 -5.970344 2.552835
+v -33.737045 -5.441038 3.052778
+v -33.563396 -6.425846 3.052778
+v -33.486801 -5.924966 3.552377
+v -32.995949 -3.277087 6.105556
+v -33.094433 -2.895388 5.917338
+v -33.269569 -3.526987 5.209875
+v -32.948360 -3.725240 6.105556
+v -32.344830 -7.299592 6.105556
+v -33.003696 -8.919314 -0.000000
+v -33.992344 -9.093639 -0.000000
+v -34.282661 -7.929231 -0.000000
+v -32.578480 -6.252179 3.052778
+v -32.300617 -3.420587 5.133969
+v -32.131592 -2.811150 5.816602
+v -32.501995 -5.751318 3.552377
+v -32.752129 -5.267371 3.052778
+v -32.831360 -5.796695 2.552835
+v -34.027603 -2.977029 0.090585
+v -33.721943 -3.557876 0.838120
+v -33.995419 -3.620723 -0.000000
+v -33.964016 -3.904327 -0.000000
+v -33.327900 -7.619010 -0.000000
+v -29.741899 12.549101 5.736481
+v -29.675205 14.451280 3.552378
+v -30.106943 12.163995 5.163588
+v -30.031483 14.091032 3.052779
+v -29.968340 14.608163 2.552836
+v -29.772373 16.804882 0.000001
+v -31.445078 12.704637 0.821578
+v -31.443375 13.240525 0.211462
+v -31.014151 11.993677 5.822238
+v -32.771252 12.701804 0.123310
+v -34.893414 -3.052778 -0.000000
+v -31.816582 12.317470 0.210682
+v -30.111877 11.630219 5.739894
+v -30.458107 13.106319 6.105556
+v -32.660809 10.604228 2.552835
+v -32.342457 11.034432 3.052778
+v -34.042831 8.902768 0.000000
+v -34.282661 7.929231 0.000000
+v -32.651474 10.083376 3.052778
+v -32.348694 10.489667 3.552377
+v -32.109257 8.274511 6.105556
+v -32.369400 7.473063 5.917338
+v -31.391294 10.725381 3.052778
+v -32.845490 12.623289 0.000001
+v -32.395943 13.735960 0.000001
+v -31.441179 13.425739 0.000001
+v -33.169220 -0.500000 3.052778
+v -34.169331 -0.500000 3.052778
+v -35.055016 -3.052778 -0.000000
+v -35.092388 1.953260 0.123309
+v -34.858009 2.437509 0.735778
+v -34.339161 -0.007525 2.552835
+v -34.169331 0.500000 3.052778
+v -35.127762 -2.052778 -0.000000
+v -33.362934 2.332964 5.244755
+v -34.006924 -0.020030 3.552377
+v -33.202461 1.822765 5.822238
+v -33.094681 -2.052778 6.105556
+v -32.232033 1.755914 5.739894
+v -32.392284 2.265089 5.163587
+v -33.006924 -0.020030 3.552377
+v -33.169220 0.500000 3.052778
+v -33.831997 2.365764 0.821577
+v -33.339161 -0.007525 2.552835
+v -34.065674 1.882745 0.210681
+v -34.126007 -2.052778 -0.000000
+v -31.943193 12.183209 0.000001
+v -31.397638 10.180651 3.552377
+v -31.427654 7.255646 5.816603
+v -31.700312 9.774324 3.052778
+v -31.709753 10.295211 2.552835
+v -33.090103 8.593208 0.000000
+v -33.282124 7.683784 0.090585
+v -34.128967 7.879293 0.000000
+v -33.134087 2.813651 5.819593
+v -35.022591 2.949284 0.123765
+v -32.164112 2.744152 5.736480
+v -33.995972 2.875952 0.211461
+v -34.288998 7.901784 0.000000
+v -34.500210 6.921640 0.000000
+v -34.006023 4.771636 2.552835
+v -33.767212 5.250586 3.052778
+v -33.906384 4.260318 3.052778
+v -33.678757 4.713014 3.552377
+v -32.393688 7.079614 6.105556
+v -32.731140 6.926498 5.209876
+v -32.486916 6.638690 6.105556
+v -31.776731 6.728268 5.133969
+v -32.776833 5.111397 3.052778
+v -33.170918 7.036911 0.838120
+v -33.120998 1.572073 6.105556
+v -33.017456 3.052778 6.105556
+v -34.144600 1.715931 0.000000
+v -35.138729 1.855647 0.000000
+v -35.055016 3.052778 0.000000
+v -32.916004 4.121129 3.052778
+v -32.688488 4.573841 3.552377
+v -33.015755 4.632463 2.552835
+v -33.450432 7.061650 0.000000
+v -33.508202 6.782223 0.000000
+v -34.051121 3.052778 0.000000
+v 33.057652 -1.563170 6.105556
+v 32.927326 -3.052778 6.105556
+v 32.553478 -1.581449 6.000000
+v 32.156876 -1.525710 6.000000
+v 32.998207 -1.643951 6.000000
+v 32.882671 -2.964511 6.000000
+v 32.056259 -2.964511 6.000000
+v 6.815447 31.463631 6.000001
+v 6.732959 31.477686 6.000001
+v 6.419639 31.544041 6.000001
+v 31.236841 7.783137 6.000000
+v 31.403399 7.086511 6.000000
+v 31.211948 7.873366 6.000000
+v 31.185658 7.991463 6.000000
+v 31.195595 7.952629 6.000000
+v 32.130497 1.968738 6.000000
+v 32.409344 1.968738 6.000000
+v 32.969791 1.968738 6.000000
+v 33.014816 2.052778 6.105556
+v 16.204672 27.817602 6.000001
+v 17.273815 27.164377 6.000001
+v 17.293091 27.151314 6.000001
+v 17.268200 27.168690 6.000001
+v -31.896978 -8.724169 6.105556
+v -32.283989 -7.279823 6.105556
+v -31.062519 -8.323177 6.105556
+v -31.068701 -8.276226 6.105556
+v 24.655115 -20.688097 5.999999
+v 24.191565 -21.240536 5.999999
+v 25.118670 -20.135662 5.999999
+v -6.815447 -31.463631 5.999999
+v -8.056488 -31.166292 5.999999
+v -8.034119 -31.172758 5.999999
+v -8.027447 -31.175125 5.999999
+v 29.571230 -12.725347 6.000000
+v 30.373547 -12.986034 6.000000
+v 30.385962 -13.082878 6.105556
+v -28.481865 -16.976149 6.105555
+v -28.505627 -16.939892 6.102862
+v -3.711371 32.869709 6.105557
+v -3.787972 32.810627 6.000001
+v -3.642204 31.983942 6.000001
+v -21.770527 -24.921030 5.999999
+v -21.864771 -24.900578 6.105555
+v -21.240536 -24.191565 5.999999
+v -3.240921 32.029781 6.000001
+v -2.909521 32.059223 6.000001
+v -1.992011 32.129734 6.000001
+v -1.968738 32.130497 6.000001
+v -1.999088 32.129925 6.000001
+v 32.869709 3.711371 6.105556
+v 32.810627 3.787972 6.000000
+v 31.983942 3.642204 6.000000
+v 27.934332 -17.758106 6.105555
+v 27.843901 -17.796284 5.999999
+v 27.151314 -17.293091 5.999999
+v -33.057652 1.563170 6.105556
+v -32.156876 1.525709 6.000000
+v -32.998207 1.643950 6.000000
+v 32.029781 3.240921 6.000000
+v 32.017658 3.323715 6.000000
+v 30.997032 -11.772431 6.105556
+v 8.247075 32.024815 6.105557
+v 6.634473 32.456909 6.105557
+v 32.211418 7.349053 6.000000
+v 32.283989 7.279822 6.105556
+v 31.784304 7.210275 6.000000
+v -13.082878 -30.385962 6.105555
+v -11.783819 -30.991722 6.105555
+v -11.772430 -30.997032 6.105555
+v 16.976149 -28.481865 6.105555
+v 16.939892 -28.505627 6.102862
+v 27.857691 -16.060316 6.105556
+v 27.834940 -16.098629 6.105556
+v 27.849894 -16.079144 6.105556
+v 28.455252 -17.014158 6.105555
+v -8.276226 31.068701 6.105557
+v -7.086512 31.403399 6.000001
+v -8.354133 31.087349 6.000001
+v -8.485985 31.054476 6.000001
+v -8.219755 31.120850 6.000001
+v -30.997032 11.772430 6.105556
+v -31.014143 11.732588 6.102863
+v 27.676554 16.443857 6.000001
+v 26.912249 17.667011 6.000001
+v 31.063986 8.312038 6.105556
+v 31.062519 8.323177 6.105556
+v 31.896978 8.724169 6.105556
+v 21.705841 -25.059507 6.105555
+v 22.339066 -24.426283 6.105555
+v 25.767275 -20.762012 5.999999
+v 25.856535 -20.725506 6.105555
+v 25.628538 -20.628036 5.999999
+v -25.720798 20.919359 6.105557
+v -25.067919 21.697432 6.105557
+v -25.111076 21.649612 6.098890
+v -25.408401 21.320179 6.052961
+v -13.397630 29.387268 6.000001
+v -13.736077 30.023796 6.000001
+v -13.682834 30.106197 6.105557
+v -13.347525 29.293036 6.000001
+v 31.166292 -8.056488 6.000000
+v 31.953341 -8.312216 6.000000
+v 32.024815 -8.247075 6.105556
+v -32.029781 -3.240922 6.000000
+v -32.059223 -2.909521 6.000000
+v -32.129734 -1.992011 6.000000
+v -32.130497 -1.968738 6.000000
+v -32.129925 -1.999088 6.000000
+v -22.339066 24.426283 6.105557
+v -22.362131 24.329426 6.000001
+v -21.746296 23.734718 6.000001
+v -22.066540 24.043976 6.000001
+v -12.175508 29.802137 6.000001
+v -13.318996 29.307554 6.000001
+v -21.448591 24.007669 6.000001
+v -21.508448 23.949198 6.000001
+v 21.448591 -24.007669 5.999999
+v 20.478577 -24.836924 5.999999
+v 20.496956 -24.822628 5.999999
+v 20.692097 -24.659882 5.999999
+v 20.502792 -24.818621 5.999999
+v 30.106197 13.682834 6.105556
+v 30.811752 12.169765 6.105556
+v 21.746296 -23.734718 5.999999
+v 22.362131 -24.329426 5.999999
+v 22.066540 -24.043976 5.999999
+v 28.481865 16.976149 6.105557
+v 27.652512 18.160585 6.105557
+v -24.007669 -21.448591 5.999999
+v -23.949198 -21.508448 5.999999
+v -23.734718 -21.746296 5.999999
+v 11.801251 -29.949545 5.999999
+v 12.004091 -30.573822 5.999999
+v 12.076781 -30.797539 5.999999
+v 12.169765 -30.811752 6.105555
+v -16.343327 -28.856592 6.089059
+v -16.258484 -28.847580 5.999999
+v -15.853085 -28.016388 5.999999
+v -16.216600 -28.761703 5.999999
+v 25.580059 21.106136 6.089058
+v 25.577957 21.108957 6.088848
+v 25.410637 21.322056 6.058843
+v 25.059507 21.705841 6.105557
+v -12.725347 -29.571230 5.999999
+v -11.388057 -30.111536 5.999999
+v 27.321232 -17.021612 5.999999
+v 27.339806 -16.994806 5.999999
+v 27.367449 -16.953852 5.999999
+v 27.336357 -16.999043 5.999999
+v -2.690797 -32.075397 5.999999
+v -2.964511 -32.056259 5.999999
+v -1.525709 -32.156876 5.999999
+v 27.194736 17.817213 6.000001
+v 27.657104 18.063059 6.000001
+v -32.427197 6.543758 6.000000
+v -32.456909 6.634472 6.105556
+v -31.544041 6.419639 6.000000
+v -32.194733 6.511087 6.000000
+v 20.919359 25.720798 6.105557
+v 21.697432 25.067919 6.105557
+v 21.649612 25.111076 6.098890
+v 21.320179 25.408401 6.052961
+v -17.758106 -27.934332 6.105555
+v -17.014158 -28.455252 6.105555
+v -16.076118 -27.851145 6.105555
+v -16.079144 -27.849894 6.105555
+v -16.081711 -27.847923 6.105555
+v 32.059223 2.909520 6.000000
+v 32.106907 2.329814 6.000000
+v -16.976149 28.481865 6.105557
+v -16.939892 28.505627 6.102865
+v 18.160585 -27.652512 6.105555
+v 17.667011 -26.912249 5.999999
+v 18.063059 -27.657104 5.999999
+v 16.980471 -28.415140 5.999999
+v 16.443857 -27.676554 5.999999
+v -31.463631 6.815447 6.000000
+v -31.172758 8.034119 6.000000
+v -31.166292 8.056488 6.000000
+v -31.175125 8.027447 6.000000
+v 15.853085 28.016388 6.000001
+v 16.119156 27.863035 6.000001
+v 16.130566 27.856461 6.000001
+v 16.081711 27.847923 6.105557
+v 16.076118 27.851145 6.105557
+v -24.822628 -20.496956 5.999999
+v -24.836924 -20.478577 5.999999
+v -24.659882 -20.692097 5.999999
+v -24.818621 -20.502792 5.999999
+v 12.980045 -29.460630 5.999999
+v 13.347525 -29.293036 5.999999
+v 13.055040 -29.423515 5.999999
+v 23.734718 21.746296 6.000001
+v 24.329426 22.362131 6.000001
+v 24.043976 22.066540 6.000001
+v 24.426283 22.339066 6.105557
+v 31.054476 8.485985 6.000000
+v 31.868328 8.629489 6.000000
+v 30.111536 -11.388057 6.000000
+v 31.014143 -11.732588 6.102862
+v 30.932077 -11.788262 6.000000
+v -28.630716 16.742167 6.080725
+v -28.604868 16.782949 6.085212
+v -28.482677 16.971773 6.101828
+v -28.455252 17.014158 6.105557
+v 3.240921 -32.029781 5.999999
+v 2.909521 -32.059223 5.999999
+v 1.968738 -32.130497 5.999999
+v 1.992011 -32.129734 5.999999
+v 1.999088 -32.129925 5.999999
+v 32.060310 -2.906603 6.000000
+v -27.676554 -16.443857 5.999999
+v -28.415140 -16.980471 5.999999
+v 28.630716 -16.742167 6.080723
+v 28.604868 -16.782949 6.085210
+v 28.482677 -16.971773 6.101826
+v 20.688097 24.655115 6.000001
+v 21.240536 24.191565 6.000001
+v 20.135662 25.118670 6.000001
+v 31.463631 -6.815448 6.000000
+v 31.544041 -6.419640 6.000000
+v 31.477686 -6.732960 6.000000
+v 31.172758 -8.034119 6.000000
+v 31.175125 -8.027447 6.000000
+v -24.426283 -22.339066 6.105555
+v -25.059507 -21.705841 6.105555
+v 21.864771 24.900578 6.105557
+v 20.725506 25.856535 6.105557
+v 20.762012 25.767275 6.000001
+v 25.067919 -21.697432 6.105555
+v 25.111076 -21.649612 6.098888
+v 25.720798 -20.919359 6.105555
+v 25.408401 -21.320179 6.052959
+v 21.508448 -23.949198 5.999999
+v 17.758106 27.934332 6.105557
+v 17.014158 28.455252 6.105557
+v 16.079144 27.849894 6.105557
+v -21.697432 -25.067919 6.105555
+v -21.649612 -25.111076 6.098888
+v -20.919359 -25.720798 6.105555
+v -21.320179 -25.408401 6.052959
+v 32.427197 -6.543759 6.000000
+v 32.456909 -6.634473 6.105556
+v 7.279823 -32.283989 6.105555
+v 8.323177 -31.062519 6.105555
+v 8.724169 -31.896978 6.105555
+v 7.086512 -31.403399 5.999999
+v 7.349054 -32.211418 5.999999
+v 24.836924 20.478577 6.000001
+v 25.585114 21.022167 6.000001
+v 25.581411 21.083645 6.065204
+v 12.725347 29.571230 6.000001
+v 12.986034 30.373547 6.000001
+v 13.082878 30.385962 6.105557
+v 11.772430 30.997032 6.105557
+v 11.783819 30.991722 6.105557
+v -26.912249 -17.667011 5.999999
+v -29.571230 12.725347 6.000000
+v -30.111536 11.388057 6.000000
+v 24.007669 21.448591 6.000001
+v 24.822628 20.496956 6.000001
+v 24.659882 20.692097 6.000001
+v 24.818621 20.502792 6.000001
+v 11.388057 30.111536 6.000001
+v 11.732588 31.014143 6.102864
+v 11.737082 31.007517 6.094560
+v 11.788262 30.932077 6.000001
+v 8.056488 31.166292 6.000001
+v 8.312216 31.953341 6.000001
+v -8.247075 -32.024815 6.105555
+v -6.634473 -32.456909 6.105555
+v 13.682834 -30.106197 6.105555
+v 13.736077 -30.023796 5.999999
+v 13.397630 -29.387268 5.999999
+v 28.642202 -16.722727 6.077199
+v 28.727320 -16.585726 6.059285
+v 28.856592 -16.343327 6.089060
+v -31.007517 11.737082 6.094559
+v -30.808792 11.728131 6.000000
+v -30.932077 11.788262 6.000000
+v 23.949198 21.508448 6.000001
+v -31.953341 8.312216 6.000000
+v -32.024815 8.247075 6.105556
+v -31.268143 8.089581 6.000000
+v -3.052778 -32.927326 6.105555
+v -1.563170 -33.057652 6.105555
+v -27.934332 17.758106 6.105557
+v -27.843901 17.796284 6.000001
+v -27.151314 17.293091 6.000001
+v 6.543759 32.427197 6.000001
+v 16.343327 28.856592 6.089062
+v 16.216600 28.761703 6.000001
+v 16.258484 28.847580 6.000001
+v -2.964511 -32.125702 5.999999
+v -2.964510 -32.882671 5.999999
+v -29.949545 -11.801251 6.000000
+v -29.829792 -12.098289 6.000000
+v -29.819021 -12.129071 6.000000
+v -29.802137 -12.175508 6.000000
+v -29.820421 -12.123791 6.000000
+v 2.964511 32.056259 6.000001
+v 2.964510 32.882671 6.000001
+v 3.052778 32.927326 6.105557
+v -27.321232 17.021612 6.000001
+v -27.339806 16.994806 6.000001
+v -27.367449 16.953852 6.000001
+v -27.336357 16.999043 6.000001
+v 8.034119 31.172758 6.000001
+v 8.027447 31.175125 6.000001
+v 1.563170 33.057652 6.105557
+v 1.581448 32.553478 6.000001
+v 1.525709 32.156876 6.000001
+v 1.643951 32.998207 6.000001
+v -1.968738 32.409344 6.000001
+v -1.968738 32.969791 6.000001
+v -2.052778 33.014816 6.105557
+v 17.555017 27.511827 6.000001
+v 17.796284 27.843901 6.000001
+v -16.443857 27.676554 6.000001
+v -16.980471 28.415140 6.000001
+v -17.293091 -27.151314 5.999999
+v -17.796284 -27.843901 5.999999
+v -6.419639 -31.544041 5.999999
+v -6.543759 -32.427197 5.999999
+v 21.022167 -25.585114 5.999999
+v 21.083645 -25.581411 6.065202
+v 21.106136 -25.580059 6.089056
+v 20.966276 -25.508186 5.999999
+v 1.968738 -32.409344 5.999999
+v 1.968738 -32.969791 5.999999
+v 2.052778 -33.014816 6.105555
+v 31.097437 8.324454 6.000000
+v 31.070236 8.426724 6.000000
+v 31.093481 8.339328 6.000000
+v 29.829792 12.098289 6.000000
+v 29.949545 11.801251 6.000000
+v 29.802137 12.175508 6.000000
+v -11.737082 -31.007517 6.094557
+v -11.788262 -30.932077 5.999999
+v -11.732588 -31.014143 6.102861
+v -11.801251 29.949545 6.000001
+v -12.098289 29.829792 6.000001
+v -12.129071 29.819021 6.000001
+v -12.123791 29.820421 6.000001
+v -12.986034 -30.373547 5.999999
+v -7.349054 32.211418 6.000001
+v -7.279823 32.283989 6.105557
+v 16.742167 28.630716 6.080725
+v 16.782949 28.604868 6.085212
+v 16.971773 28.482677 6.101828
+v -31.403399 -7.086512 6.000000
+v -31.087349 -8.354133 6.000000
+v -31.054476 -8.485985 6.000000
+v -31.120850 -8.219755 6.000000
+v -24.655115 20.688097 6.000001
+v -24.191565 21.240536 6.000001
+v -25.118670 20.135662 6.000001
+v -8.724169 31.896978 6.105557
+v -8.323177 31.062519 6.105557
+v -12.004091 30.573822 6.000001
+v -12.076781 30.797539 6.000001
+v -12.169765 30.811752 6.105557
+v 21.770527 24.921030 6.000001
+v 16.585726 28.727320 6.059287
+v 16.722727 28.642202 6.077201
+v -20.725506 -25.856535 6.105555
+v -20.135662 -25.118670 5.999999
+v -20.628038 -25.628538 5.999999
+v -20.762012 -25.767275 5.999999
+v -21.705841 25.059507 6.105557
+v -16.204672 -27.817602 5.999999
+v -16.119156 -27.863035 5.999999
+v -16.130566 -27.856461 5.999999
+v -16.070221 -27.891239 5.999999
+v -27.857691 16.060316 6.105556
+v -27.874302 16.079222 6.037034
+v -27.834940 16.098629 6.105556
+v -27.864285 16.102749 6.027304
+v -28.001841 15.881599 6.000000
+v -27.870123 16.109921 6.000000
+v -27.886694 16.081194 6.000000
+v -28.016388 15.853085 6.000000
+v -6.732959 -31.477686 5.999999
+v 11.823150 -29.941628 5.999999
+v 11.829938 -29.939621 5.999999
+v 28.505627 16.939892 6.102864
+v 28.415140 16.980471 6.000001
+v 28.304169 16.899847 6.000001
+v -32.017658 -3.323716 6.000000
+v -31.983942 -3.642205 6.000000
+v 3.711371 -32.869709 6.105555
+v 3.787972 -32.810627 5.999999
+v 3.642204 -31.983942 5.999999
+v -24.329426 -22.362131 5.999999
+v -24.043976 -22.066540 5.999999
+v -18.160585 27.652512 6.105557
+v -25.577957 -21.108957 6.088846
+v -25.580059 -21.106136 6.089056
+v -25.410637 -21.322056 6.058841
+v 28.854191 -16.320713 6.065322
+v 28.847580 -16.258484 6.000000
+v 28.761703 -16.216600 6.000000
+v 28.016388 -15.853085 6.000000
+v 21.108957 -25.577957 6.088846
+v 21.322056 -25.410637 6.058841
+v 2.906603 32.060310 6.000001
+v -17.667011 26.912249 6.000001
+v -18.063059 27.657104 6.000001
+v -25.585114 -21.022167 5.999999
+v -25.581411 -21.083645 6.065202
+v -25.508186 -20.966276 5.999999
+v -16.722727 -28.642202 6.077199
+v -16.585726 -28.727320 6.059284
+v -16.742167 -28.630716 6.080722
+v -27.652512 -18.160585 6.105555
+v -27.657104 -18.063059 5.999999
+v 3.323716 -32.017658 5.999999
+v 27.874302 -16.079222 6.037033
+v 27.864285 -16.102749 6.027303
+v 27.870123 -16.109921 6.000000
+v 27.886694 -16.081194 6.000000
+v 28.001841 -15.881599 6.000000
+v -31.477686 6.732959 6.000000
+v -29.307554 -13.318996 6.000000
+v -29.293036 -13.347525 6.000000
+v -30.811752 -12.169765 6.105556
+v -30.106197 -13.682834 6.105556
+v -30.023796 -13.736077 6.000000
+v -29.387268 -13.397630 6.000000
+v -21.108957 25.577957 6.088848
+v -21.106136 25.580059 6.089058
+v -21.322056 25.410637 6.058843
+v 30.573822 12.004091 6.000000
+v 30.797539 12.076781 6.000000
+v -20.688097 -24.655115 5.999999
+v 8.219755 -31.120850 5.999999
+v 8.485985 -31.054476 5.999999
+v 8.354133 -31.087349 5.999999
+v -17.273815 -27.164377 5.999999
+v -17.268200 -27.168690 5.999999
+v -24.900578 21.864771 6.105557
+v -25.856535 20.725506 6.105557
+v -25.628538 20.628036 6.000001
+v -25.767275 20.762012 6.000001
+v -1.643951 -32.998207 5.999999
+v -30.573822 -12.004091 6.000000
+v -30.797539 -12.076781 6.000000
+v 8.629489 -31.868328 5.999999
+v 8.498042 -31.122858 5.999999
+v 24.921030 -21.770527 5.999999
+v 24.900578 -21.864771 6.105555
+v -27.849894 16.079144 6.105556
+v -31.122858 -8.498042 6.000000
+v -31.868328 -8.629488 6.000000
+v -32.869709 -3.711372 6.105556
+v -32.810627 -3.787972 6.000000
+v -32.211418 -7.349054 6.000000
+v -29.875513 12.824214 6.000000
+v -30.373547 12.986034 6.000000
+v -30.385962 13.082878 6.105556
+v -8.312216 -31.953341 5.999999
+v -16.782949 -28.604868 6.085209
+v -16.971773 -28.482677 6.101825
+v -20.496956 24.822628 6.000001
+v -20.478577 24.836924 6.000001
+v -20.692097 24.659882 6.000001
+v -20.502792 24.818621 6.000001
+v -32.075397 2.690797 6.000000
+v -32.056259 2.964510 6.000000
+v 29.307554 13.318996 6.000000
+v 29.293036 13.347525 6.000000
+v -30.991722 11.783819 6.105556
+v 29.387268 13.397630 6.000000
+v 30.023796 13.736077 6.000000
+v -33.014816 -2.052778 6.105556
+v -20.966276 25.508186 6.000001
+v -21.022167 25.585114 6.000001
+v -21.083645 25.581411 6.065204
+v -32.969791 -1.968738 6.000000
+v -32.409344 -1.968738 6.000000
+v -28.856592 16.343327 6.089061
+v -28.847580 16.258484 6.000000
+v -8.498042 31.122858 6.000001
+v -8.629488 31.868328 6.000001
+v -24.921030 21.770527 6.000001
+v -28.727320 16.585726 6.059287
+v -28.642202 16.722727 6.077201
+v -3.323716 32.017658 6.000001
+v -32.927326 3.052778 6.105556
+v -32.125702 2.964510 6.000000
+v -32.882671 2.964510 6.000000
+v 0.000000 32.998726 3.577050
+v 0.005188 32.995922 3.583441
+v -0.003427 32.999680 3.572829
+v -0.002721 -33.341290 2.545359
+v 0.001583 -33.340393 2.548499
+v 0.000413 -33.336781 2.559839
+v -0.000462 -33.336487 2.560701
+v 0.001310 -33.341549 2.545133
+v -0.002002 -33.342823 2.541029
+v 32.993473 8.839745 0.091586
+v 33.024342 8.836506 0.000000
+v 32.993694 8.841460 0.089612
+v 33.017162 8.855669 0.007325
+v 33.019249 8.856934 0.000000
+v 32.898495 8.802530 0.392080
+v 32.924362 8.805147 0.313214
+v 32.871643 8.824306 0.451704
+v 32.896606 8.839395 0.364198
+v 32.457184 8.789964 1.653533
+v 32.567665 8.646273 1.449280
+v -16.958265 -29.370661 0.820410
+v -16.957306 -29.370914 0.821574
+v -16.956348 -29.370939 0.822617
+v 16.234520 28.122192 5.161725
+v 16.216204 28.088137 5.278471
+v 16.236792 28.119339 5.165662
+v 16.216125 28.086281 5.283422
+v 16.956348 29.370939 0.822619
+v 17.090052 29.606749 0.006257
+v 17.095329 29.603302 0.007143
+v 16.958265 29.370661 0.820412
+v 17.089046 29.608017 0.003868
+v 17.087418 29.610071 0.000001
+v 17.101534 29.601509 0.000001
+v -28.418062 -16.513060 3.936155
+v -28.505337 -16.457563 3.828560
+v -28.564894 -16.397337 3.731531
+v -31.068699 -8.276232 6.105556
+v -31.056959 -8.336598 6.105556
+v 29.375141 -16.794493 0.998788
+v 29.342411 -17.065477 0.690367
+v 29.370914 -16.957304 0.821575
+v 32.613373 -8.567614 1.342927
+v 32.527340 -8.715674 1.543116
+v 32.396549 -8.854167 1.748959
+v 31.576435 -8.630017 4.308462
+v 31.577707 -8.461222 4.500909
+v 31.539131 -8.285417 4.686602
+v -8.452016 -31.209370 5.544241
+v -8.292224 -31.191967 5.728365
+v -8.630017 -31.576435 4.308461
+v -8.447924 -31.301538 5.290596
+v -8.327768 -31.265415 5.493316
+v -8.285417 -31.539131 4.686602
+v -8.922299 -32.347366 1.807728
+v -8.522811 -32.648876 1.253856
+v -8.567613 -32.613373 1.342925
+v -8.854167 -32.396549 1.748958
+v -8.770087 -32.901524 0.395819
+v -8.779748 -32.938816 0.279790
+v -8.870949 -32.864853 0.416582
+v -8.855641 -32.810307 0.587271
+v 32.938816 -8.779748 0.279791
+v 32.914822 -8.819500 0.336235
+v 32.864853 -8.870949 0.416583
+v 28.418062 16.513060 3.936157
+v 28.564894 16.397337 3.731532
+v 28.505337 16.457563 3.828562
+v -0.001075 33.012840 3.534168
+v 0.001201 33.013550 3.531982
+v 0.000462 33.336487 2.560704
+v -0.000413 33.336781 2.559842
+v -16.206669 28.247019 4.844119
+v -16.270582 28.181475 4.953648
+v -16.317417 28.105307 5.050501
+v -32.924362 -8.805147 0.313213
+v -32.915627 -8.819716 0.333726
+v -32.896606 -8.839395 0.364197
+v 31.577557 8.481297 4.478021
+v 31.577707 8.461222 4.500909
+v 31.574081 8.444697 4.518363
+v 27.857689 -16.060318 6.105556
+v 27.834940 -16.098627 6.105556
+v 27.849892 -16.079144 6.105556
+v -32.613373 8.567613 1.342928
+v -32.396549 8.854167 1.748960
+v -32.527340 8.715674 1.543116
+v -8.356006 31.058943 6.077459
+v -8.346292 31.156271 5.814347
+v -8.349722 31.153770 5.818905
+v -8.331332 31.482367 4.839198
+v -8.378650 31.559589 4.588127
+v -8.551594 31.577026 4.397876
+v -8.569499 31.470112 4.676818
+v -8.378779 31.205729 5.639500
+v -8.349133 31.202835 5.673129
+v -8.301598 31.100445 6.000001
+v -8.276232 31.068699 6.105557
+v -8.294640 31.091738 6.028954
+v 28.231052 16.471296 4.463519
+v 28.440899 16.248695 4.251762
+v 28.247019 16.206669 4.844118
+v 28.105307 16.317417 5.050500
+v 31.063984 8.312042 6.105556
+v 31.061243 8.326260 6.105556
+v -32.938816 8.779748 0.279792
+v -32.914822 8.819500 0.336236
+v -32.864853 8.870949 0.416584
+v 32.915627 8.819716 0.333726
+v 32.993690 8.840633 0.090585
+v 31.202835 8.349133 5.673128
+v 31.205673 8.361535 5.659679
+v 31.205729 8.378779 5.639499
+v 31.209370 -8.452016 5.544242
+v 31.208433 -8.362275 5.651079
+v 31.191967 -8.292224 5.728366
+v 23.464962 23.483528 2.973550
+v 23.479191 23.479191 2.957707
+v 23.496426 23.469233 2.934608
+v -33.012840 -0.001076 3.534167
+v -33.013550 0.001200 3.531981
+v -33.336487 0.000462 2.560703
+v -33.336781 -0.000413 2.559841
+v -23.253141 23.119791 4.165822
+v -23.168081 23.168081 4.281390
+v -23.041174 23.206291 4.423834
+v -23.446449 23.428028 3.131038
+v -23.441616 23.421814 3.154153
+v -23.403141 23.433125 3.209091
+v -23.414307 23.441185 3.169058
+v -23.488697 23.510084 2.865770
+v -23.469233 23.496426 2.934608
+v -23.495363 23.479656 2.917910
+v -23.483528 23.464962 2.973550
+v -23.775299 23.651264 1.926975
+v -23.693260 23.843620 1.684916
+v -23.440800 23.420591 3.158383
+v -23.400635 23.431578 3.217447
+v -23.287868 23.130121 4.063136
+v -23.034935 23.246546 4.338448
+v -33.342823 0.002002 2.541030
+v -33.342262 -0.000000 2.543511
+v -33.341549 -0.001310 2.545135
+v 29.115606 16.750626 1.777343
+v 29.126413 16.875767 1.560819
+v 29.295916 16.803562 1.210373
+v 29.272404 16.999676 0.980462
+v 28.961197 16.624832 2.356310
+v 28.933344 16.812471 2.142547
+v 28.958246 16.719051 2.255169
+v 29.294006 16.912903 1.088752
+v 23.041174 -23.206291 4.423832
+v 23.253139 -23.119791 4.165820
+v 23.168081 -23.168081 4.281388
+v 23.693260 -23.843620 1.684914
+v 23.747229 -23.747229 1.817279
+v 23.775299 -23.651266 1.926972
+v -23.130121 -23.287867 4.063135
+v -23.119791 -23.253139 4.165821
+v -23.206291 -23.041174 4.423832
+v -23.246546 -23.034935 4.338446
+v -23.651266 -23.775299 1.926972
+v -23.618338 -23.762354 2.018964
+v -23.843620 -23.693260 1.684914
+v -23.840755 -23.654570 1.763284
+v -23.472525 -23.490801 2.942064
+v -23.464962 -23.483528 2.973548
+v -23.506895 -23.480330 2.888903
+v -23.496426 -23.469233 2.934606
+v -23.428028 -23.446449 3.131036
+v -23.421814 -23.441616 3.154151
+v -23.433125 -23.403141 3.209089
+v -23.441185 -23.414307 3.169056
+v -23.134768 -23.291327 4.046223
+v -23.252325 -23.043154 4.309350
+v -23.681803 -23.493198 2.444052
+v -23.432680 -23.578840 2.803721
+v -8.461222 31.577707 4.500911
+v -0.005188 -32.995922 3.583438
+v 0.003427 -32.999680 3.572826
+v 0.001075 -33.012840 3.534166
+v -0.001201 -33.013550 3.531979
+v -8.819500 -32.914822 0.336234
+v -16.081701 -27.847929 6.105555
+v -16.079144 -27.849892 6.105555
+v 23.428028 23.446449 3.131038
+v 23.434809 23.434809 3.146541
+v 23.441185 23.414307 3.169058
+v 16.513060 -28.418062 3.936155
+v 16.457563 -28.505337 3.828560
+v 16.397337 -28.564894 3.731530
+v -31.191967 8.292224 5.728367
+v -31.209370 8.452016 5.544243
+v -31.576435 8.630017 4.308463
+v -31.301538 8.447924 5.290598
+v -31.539131 8.285417 4.686604
+v -31.265415 8.327768 5.493317
+v -32.648876 8.522811 1.253858
+v -32.347366 8.922299 1.807730
+v -32.901524 8.770088 0.395821
+v -32.810307 8.855641 0.587273
+v 16.081701 27.847929 6.105557
+v 16.070215 27.891241 6.000001
+v 16.075785 27.853416 6.099576
+v 16.065851 27.920950 5.921777
+v 16.119154 27.863037 5.999999
+v 16.076696 27.928080 5.889195
+v 16.119154 27.863037 5.999998
+v 16.119154 27.863037 5.999998
+v 16.071173 27.929892 5.890532
+v -23.479191 23.479191 2.957707
+v 23.119791 23.253139 4.165822
+v 23.168081 23.168081 4.281390
+v 23.206291 23.041174 4.423834
+v -8.839395 32.896606 0.364199
+v -8.819716 32.915627 0.333727
+v -8.805147 32.924362 0.313215
+v 23.843620 23.693260 1.684916
+v 23.747229 23.747229 1.817281
+v 23.651264 23.775299 1.926975
+v 31.155291 8.348036 5.816602
+v 31.153770 8.349722 5.818904
+v 31.156271 8.346292 5.814346
+v 16.803560 -29.295916 1.210371
+v 16.999676 -29.272404 0.980460
+v 16.912903 -29.294006 1.088750
+v 16.957306 29.370914 0.821577
+v -16.999676 29.272404 0.980463
+v -16.875769 29.126413 1.560819
+v -16.750626 29.115606 1.777344
+v -16.803560 29.295916 1.210373
+v -16.624832 28.961197 2.356310
+v -16.812471 28.933344 2.142547
+v 31.301538 -8.447924 5.290597
+v 31.265415 -8.327768 5.493316
+v 32.347366 -8.922299 1.807729
+v 32.648876 -8.522812 1.253858
+v 32.901520 -8.770088 0.395820
+v 32.810307 -8.855641 0.587272
+v 32.527340 8.715674 1.543116
+v 8.551594 -31.577026 4.397873
+v 8.461222 -31.577707 4.500908
+v 8.378650 -31.559589 4.588124
+v -28.220474 16.134340 5.002526
+v -28.121042 16.235691 5.163588
+v -28.023624 16.298473 5.282138
+v 8.378779 -31.205729 5.639497
+v 8.361535 -31.205673 5.659677
+v 8.349133 -31.202835 5.673126
+v 16.235691 28.121044 5.163587
+v 0.000000 -33.342262 2.543510
+v 8.805147 -32.924362 0.313212
+v 8.819716 -32.915627 0.333724
+v 8.839395 -32.896606 0.364196
+v 23.762354 -23.618336 2.018964
+v 23.654570 -23.840755 1.763284
+v 23.490801 -23.472525 2.942065
+v 23.483528 -23.464962 2.973548
+v 23.480330 -23.506895 2.888903
+v 23.469233 -23.496426 2.934606
+v 23.403141 -23.433125 3.209089
+v 23.441616 -23.421814 3.154151
+v 23.414307 -23.441185 3.169056
+v 23.446449 -23.428028 3.131036
+v 23.195976 -23.359022 3.770179
+v 23.429825 -23.298418 3.410486
+v 23.398354 -23.422537 3.243425
+v 23.433105 -23.415970 3.185438
+v 16.079144 27.849892 6.105557
+v 8.336682 -31.056925 6.105555
+v 8.646273 -32.567665 1.449279
+v 8.789963 -32.457184 1.653531
+v 8.715674 -32.527340 1.543115
+v -33.340393 -0.001583 2.548500
+v -33.341290 0.002721 2.545361
+v -29.272404 -16.999676 0.980461
+v -29.126413 -16.875769 1.560817
+v -29.115606 -16.750626 1.777342
+v -29.295916 -16.803562 1.210371
+v -28.961197 -16.624832 2.356308
+v -28.933344 -16.812471 2.142545
+v -28.231052 -16.471296 4.463518
+v -28.440899 -16.248695 4.251761
+v -28.247019 -16.206669 4.844117
+v -28.105307 -16.317417 5.050499
+v 16.471296 -28.231052 4.463517
+v 16.248695 -28.440899 4.251760
+v 16.206669 -28.247019 4.844116
+v 16.317417 -28.105307 5.050498
+v 8.452016 31.209370 5.544244
+v 8.362275 31.208433 5.651081
+v 8.292224 31.191967 5.728368
+v 8.630017 31.576435 4.308464
+v 8.461222 31.577707 4.500911
+v 8.285417 31.539131 4.686604
+v 8.567613 32.613373 1.342929
+v 8.715674 32.527340 1.543117
+v 8.854167 32.396549 1.748961
+v -23.747229 23.747229 1.817281
+v 0.000000 -32.998726 3.577048
+v 23.433125 23.403141 3.209091
+v 23.421814 23.441616 3.154153
+v 23.479656 23.495363 2.917910
+v 23.510084 23.488697 2.865770
+v 23.431578 23.400635 3.217447
+v 23.420591 23.440800 3.158383
+v 23.130121 23.287868 4.063136
+v 23.246548 23.034935 4.338448
+v 16.270582 -28.181475 4.953645
+v 23.479191 -23.479191 2.957705
+v -31.208433 8.362275 5.651080
+v -32.993473 -8.839745 0.091586
+v -32.993690 -8.840633 0.090584
+v -32.993694 -8.841460 0.089611
+v -8.715674 -32.527340 1.543115
+v -8.461222 -31.577707 4.500908
+v 8.447924 31.301538 5.290599
+v 8.327768 31.265415 5.493318
+v 8.522811 32.648876 1.253860
+v 8.922299 32.347366 1.807731
+v 8.770088 32.901524 0.395822
+v 8.779748 32.938816 0.279793
+v 8.855641 32.810307 0.587274
+v 8.870949 32.864853 0.416585
+v -32.656982 -8.642808 1.181937
+v -32.567665 -8.646273 1.449280
+v -32.534092 -8.857985 1.358923
+v -32.457184 -8.789964 1.653532
+v -33.017162 -8.855669 0.007325
+v -33.019249 -8.856934 -0.000000
+v -33.024342 -8.836506 -0.000000
+v -33.021191 -8.836836 0.009351
+v 31.571060 8.438583 4.529875
+v 31.574804 8.490840 4.474655
+v 31.202734 8.338906 5.677482
+v 31.212276 8.421155 5.571931
+v 31.566483 8.418887 4.551452
+v 31.571413 8.562171 4.401329
+v 31.073523 8.335887 6.059946
+v -0.001310 33.341549 2.545136
+v 0.000000 33.342262 2.543513
+v 0.002002 33.342823 2.541032
+v -23.434809 23.434809 3.146541
+v -8.361535 31.205673 5.659680
+v -16.236792 -28.119339 5.165659
+v -16.235691 -28.121044 5.163584
+v -16.234520 -28.122192 5.161722
+v -8.642808 32.656982 1.181939
+v -8.646273 32.567665 1.449281
+v -8.857985 32.534092 1.358925
+v -8.789963 32.457184 1.653534
+v -8.856934 33.019249 0.000001
+v -8.836506 33.024342 0.000001
+v -8.836836 33.021191 0.009352
+v -8.841460 32.993694 0.089613
+v -8.839745 32.993473 0.091587
+v -8.715674 32.527340 1.543117
+v -31.059111 -8.355994 6.077002
+v -31.156271 -8.346292 5.814345
+v -31.153770 -8.349722 5.818903
+v -31.482367 -8.331332 4.839196
+v -31.559589 -8.378650 4.588125
+v -31.577026 -8.551594 4.397874
+v -31.470112 -8.569500 4.676816
+v -31.205729 -8.378779 5.639498
+v -31.202835 -8.349133 5.673127
+v -31.100445 -8.301598 6.000000
+v -31.091738 -8.294640 6.028952
+v -8.336741 31.056900 6.105557
+v -8.840633 32.993690 0.090586
+v -23.747229 -23.747229 1.817279
+v -16.216204 -28.088137 5.278469
+v -16.216125 -28.086281 5.283420
+v -16.119154 -27.863037 5.999999
+v -16.070223 -27.891237 5.999999
+v -16.076696 -27.928080 5.889193
+v -16.119154 -27.863037 5.999995
+v -29.623487 17.055029 0.000001
+v -29.606934 17.068846 0.030361
+v -29.576092 17.134659 0.000001
+v -29.581617 17.113441 0.025893
+v -29.583488 17.106255 0.034664
+v -27.834942 16.098627 6.105553
+v -27.834940 16.098627 6.105556
+v -27.874298 16.079224 6.037041
+v -27.857689 16.060318 6.105556
+v -27.834942 16.098629 6.105552
+v -27.886692 16.081194 6.000004
+v -27.886692 16.081196 6.000002
+v -27.864290 16.102743 6.027297
+v -29.386606 16.737972 1.032286
+v -29.341803 17.092960 0.641063
+v -29.342411 17.065477 0.690368
+v -29.375141 16.794493 0.998791
+v -27.892050 16.077429 5.989359
+v -27.904545 16.078291 5.953326
+v -27.870129 16.109915 5.999992
+v -27.954571 16.284834 5.473579
+v -28.176268 16.048588 5.226041
+v 8.839745 -32.993473 0.091584
+v 8.840633 -32.993690 0.090583
+v 8.841460 -32.993694 0.089610
+v -16.397337 28.564894 3.731532
+v -16.457563 28.505337 3.828562
+v -16.513060 28.418062 3.936157
+v -16.719051 28.958246 2.255170
+v 23.434809 -23.434809 3.146539
+v -16.912903 29.294006 1.088753
+v -23.168081 -23.168081 4.281388
+v -23.479191 -23.479191 2.957705
+v -23.434809 -23.434809 3.146539
+v -16.471296 28.231052 4.463520
+v -16.248695 28.440899 4.251763
+v -28.958246 -16.719051 2.255168
+v 27.864288 -16.102741 6.027306
+v 27.874300 -16.079227 6.037031
+v 28.220474 -16.134340 5.002526
+v 28.023624 -16.298473 5.282137
+v 29.581617 -17.113441 0.025892
+v 29.576092 -17.134659 -0.000001
+v 29.606934 -17.068846 0.030360
+v 29.623487 -17.055029 -0.000001
+v 29.583488 -17.106255 0.034662
+v 29.341803 -17.092960 0.641062
+v 29.386606 -16.737972 1.032283
+v 29.388098 -17.119282 0.480985
+v 29.465448 -16.784531 0.757178
+v -29.294006 -16.912903 1.088751
+v -32.995922 0.005188 3.583439
+v -32.998726 -0.000000 3.577049
+v -32.999680 -0.003427 3.572828
+v 8.346292 -31.156271 5.814344
+v 8.349722 -31.153770 5.818902
+v 8.356001 -31.059011 6.077270
+v 8.331332 -31.482367 4.839195
+v 8.569499 -31.470112 4.676816
+v 8.301598 -31.100445 5.999999
+v -17.090052 -29.606749 0.006255
+v -17.095329 -29.603302 0.007141
+v -17.101534 -29.601509 -0.000001
+v -17.097425 -29.602697 0.004729
+v -17.087418 -29.610071 -0.000001
+v 28.181475 16.270582 4.953647
+v 8.348036 -31.155291 5.816600
+v -32.527340 -8.715674 1.543116
+v -31.577707 -8.461222 4.500909
+v -27.849892 16.079144 6.105556
+v -28.181475 -16.270582 4.953646
+v -29.370914 16.957304 0.821577
+v 8.642808 -32.656982 1.181936
+v 8.857985 -32.534092 1.358922
+v 8.836506 -33.024342 -0.000001
+v 8.836836 -33.021191 0.009349
+v 8.856934 -33.019249 -0.000001
+v -0.001583 33.340393 2.548502
+v 0.002721 33.341290 2.545362
+v 16.624832 -28.961197 2.356308
+v 16.812471 -28.933344 2.142545
+v 16.719051 -28.958246 2.255167
+v -31.155291 -8.348036 5.816601
+v -8.362275 -31.208433 5.651078
+v 28.121042 -16.235691 5.163587
+v -31.577707 8.461222 4.500910
+v -31.205673 -8.361535 5.659678
+v -8.348036 31.155291 5.816603
+v 16.750626 -29.115606 1.777341
+v 16.875769 -29.126413 1.560817
+v 8.819500 32.914822 0.336237
+v 16.081253 27.886669 6.000001
+v -8.324093 31.097485 6.000001
+v -31.097485 -8.324093 6.000000
+v 8.324093 -31.097485 5.999999
+v -8.339724 31.081808 6.032264
+v -31.081987 -8.339632 6.031866
+v 8.313496 -31.079536 6.058191
+v 8.339686 -31.081882 6.032098
+v 29.709480 18.847223 0.000001
+v 14.178293 -32.200939 -0.000001
+v 4.070985 -34.909184 -0.000002
+v 26.297338 -22.879576 -0.000001
+v 1.828337 34.944408 0.000002
+v 34.977299 3.816775 0.000000
+v 30.153938 -18.134678 -0.000001
+v 34.909184 4.070985 0.000000
+v 27.176619 -22.000296 -0.000001
+v -32.760918 -12.803086 -0.000001
+v -26.514599 21.577520 0.000001
+v -12.630868 32.230885 0.000001
+v -33.648815 8.774744 0.000000
+v 32.325584 13.713099 0.000001
+v 33.582722 9.021412 0.000000
+v 29.051224 -18.569576 -0.000001
+v 29.323774 -18.767595 -0.000001
+v 13.728185 -32.321545 -0.000001
+v 32.321545 13.728185 0.000001
+v -13.986683 31.190529 0.000001
+v 12.522712 -31.898014 -0.000001
+v 12.745849 -32.584759 -0.000001
+v 31.176914 14.252145 0.000001
+v 31.638048 14.497334 0.000001
+v 23.565895 -25.611019 -0.000001
+v 34.473953 -7.043487 -0.000000
+v 28.875216 -18.303024 -0.000001
+v 22.163654 -27.013260 -0.000001
+v 32.200939 14.178293 0.000001
+v 25.611019 23.565895 0.000001
+v 13.472495 31.585079 0.000001
+v 22.879576 26.297338 0.000001
+v 13.713099 -32.325584 -0.000001
+v 29.913349 -18.523386 -0.000001
+v 30.051022 -18.301682 -0.000001
+v 22.000296 27.176619 0.000001
+v 3.816775 -34.977299 -0.000002
+v 27.013260 22.163654 0.000001
+v -34.090584 2.488398 0.000000
+v -34.134113 1.865886 0.000000
+v -23.565895 25.611019 0.000001
+v -7.043487 -34.473953 -0.000002
+v 30.300497 -17.884617 -0.000001
+v -6.814305 -33.736481 -0.000001
+v -6.915583 -34.457115 -0.000002
+v 3.052778 34.237476 0.000001
+v -7.897556 -34.185177 -0.000001
+v -22.163654 27.013260 0.000001
+v 32.584759 12.745849 0.000001
+v 31.898014 12.522712 0.000001
+v -34.158230 6.873578 0.000000
+v -32.249062 -13.689646 -0.000001
+v 12.407224 32.402493 0.000001
+v -32.325584 13.713099 0.000001
+v 34.457115 -6.915583 -0.000000
+v 7.807492 -33.907990 -0.000001
+v 9.021412 -33.582722 -0.000001
+v -29.194424 -18.980436 -0.000001
+v 29.214794 -17.741682 -0.000001
+v -7.886552 -34.180618 -0.000001
+v -31.748758 -14.556199 -0.000001
+v 14.497334 -31.638048 -0.000001
+v -29.821972 -17.893490 -0.000001
+v -26.297338 22.879576 0.000001
+v -32.249748 -13.688458 -0.000001
+v -34.141750 -8.494395 -0.000000
+v -26.639544 21.481647 0.000001
+v -27.176619 22.000296 0.000001
+v 33.907990 7.807492 0.000000
+v -33.517254 -7.680535 -0.000000
+v -8.056948 -34.251198 -0.000001
+v 31.176914 14.018390 0.000001
+v -32.643940 12.524986 0.000001
+v 29.342438 19.059135 0.000001
+v -34.630878 1.784273 0.000000
+v -34.266884 1.733117 0.000000
+vn 0.9416 0.1242 0.3130
+vn 0.8775 0.3632 0.3130
+vn 0.5782 0.7535 0.3129
+vn 0.3633 0.8775 0.3130
+vn -0.1240 0.9416 0.3130
+vn -0.3635 0.8775 0.3130
+vn -0.7535 0.5782 0.3130
+vn -0.8775 0.3635 0.3129
+vn -0.9416 -0.1240 0.3130
+vn -0.8775 -0.3634 0.3130
+vn -0.5782 -0.7535 0.3129
+vn -0.3634 -0.8775 0.3130
+vn 0.1240 -0.9416 0.3130
+vn 0.3634 -0.8775 0.3130
+vn 0.7535 -0.5782 0.3130
+vn 0.8775 -0.3635 0.3129
+vn -0.9417 -0.1238 -0.3130
+vn -0.9416 -0.1241 -0.3130
+vn -0.9416 -0.1240 -0.3130
+vn -0.8775 -0.3634 -0.3130
+vn -0.8776 -0.3632 -0.3130
+vn -0.8775 -0.3635 -0.3130
+vn -0.8776 -0.3631 -0.3129
+vn -0.8774 -0.3635 -0.3130
+vn -0.7535 -0.5782 -0.3130
+vn -0.5782 -0.7535 -0.3130
+vn -0.5782 -0.7536 -0.3127
+vn -0.3634 -0.8775 -0.3130
+vn -0.3636 -0.8774 -0.3131
+vn -0.3633 -0.8774 -0.3134
+vn -0.3635 -0.8775 -0.3130
+vn -0.1232 -0.9417 -0.3130
+vn -0.1240 -0.9416 -0.3130
+vn 0.1238 -0.9417 -0.3130
+vn 0.1240 -0.9416 -0.3130
+vn 0.1238 -0.9414 -0.3137
+vn 0.1223 -0.9418 -0.3131
+vn 0.3635 -0.8775 -0.3130
+vn 0.3635 -0.8774 -0.3130
+vn 0.5782 -0.7535 -0.3130
+vn 0.7535 -0.5782 -0.3130
+vn 0.8775 -0.3635 -0.3130
+vn 0.8775 -0.3634 -0.3130
+vn 0.9416 -0.1243 -0.3130
+vn 0.9416 -0.1239 -0.3130
+vn 0.9416 -0.1240 -0.3130
+vn 0.9419 0.1217 -0.3131
+vn 0.9416 0.1247 -0.3129
+vn 0.9417 0.1236 -0.3130
+vn 0.9416 0.1240 -0.3130
+vn 0.9416 0.1239 -0.3130
+vn 0.8774 0.3636 -0.3129
+vn 0.8775 0.3635 -0.3130
+vn 0.8775 0.3634 -0.3130
+vn 0.8774 0.3637 -0.3128
+vn 0.8774 0.3635 -0.3130
+vn 0.7535 0.5782 -0.3130
+vn 0.7535 0.5781 -0.3130
+vn 0.5781 0.7538 -0.3124
+vn 0.5782 0.7535 -0.3130
+vn 0.5785 0.7532 -0.3131
+vn 0.5782 0.7535 -0.3129
+vn 0.3635 0.8775 -0.3130
+vn 0.3636 0.8774 -0.3130
+vn 0.3634 0.8775 -0.3130
+vn 0.1232 0.9417 -0.3130
+vn 0.1240 0.9416 -0.3130
+vn -0.1240 0.9416 -0.3130
+vn -0.1238 0.9417 -0.3129
+vn -0.1238 0.9414 -0.3137
+vn -0.1224 0.9418 -0.3131
+vn -0.3635 0.8775 -0.3130
+vn -0.3636 0.8774 -0.3129
+vn -0.5782 0.7535 -0.3130
+vn -0.7535 0.5782 -0.3130
+vn -0.8775 0.3635 -0.3130
+vn -0.8775 0.3634 -0.3130
+vn -0.9416 0.1240 -0.3130
+vn -0.9416 0.1239 -0.3130
+vn 0.0676 0.9463 0.3161
+vn 0.1335 0.9398 0.3144
+vn 0.1233 0.9388 0.3218
+vn 0.0654 0.9462 0.3168
+vn 0.0652 0.9444 0.3222
+vn 0.0658 0.9470 0.3146
+vn -0.7764 -0.0000 0.6303
+vn -0.4834 -0.7806 0.3962
+vn 0.0000 0.0000 1.0000
+vn -0.3550 0.8461 0.3977
+vn 0.1068 0.7597 -0.6415
+vn -0.5434 0.7784 0.3143
+vn 0.1261 0.8971 0.4234
+vn -0.6382 0.5864 0.4988
+vn 0.8048 0.5032 0.3149
+vn 0.0266 0.9514 -0.3069
+vn 0.0659 0.9470 -0.3145
+vn 0.4126 -0.8532 0.3190
+vn 0.4549 -0.8316 0.3184
+vn 0.4463 -0.8362 0.3186
+vn 0.3667 -0.8742 0.3183
+vn 0.4028 -0.8590 0.3160
+vn 0.3553 0.8802 -0.3145
+vn 0.3627 0.8770 -0.3151
+vn 0.3556 0.8820 -0.3093
+vn 0.3525 0.8816 -0.3139
+vn 0.3500 0.8840 -0.3099
+vn -0.7159 -0.4664 0.5196
+vn -0.6398 -0.7030 0.3105
+vn 0.0000 -0.7671 -0.6415
+vn -0.1608 -0.9349 -0.3163
+vn -0.1701 -0.8031 0.5711
+vn -0.1375 -0.7995 0.5847
+vn -0.4599 -0.6623 0.5914
+vn -0.9245 -0.2306 -0.3035
+vn -0.9264 -0.2057 -0.3152
+vn -0.4037 -0.8603 0.3112
+vn -0.7916 -0.1758 0.5851
+vn -0.7886 -0.1952 0.5831
+vn -0.9116 -0.2663 -0.3132
+vn 0.0000 0.7764 0.6303
+vn -0.6895 0.3363 0.6415
+vn 0.1068 0.7597 0.6415
+vn 0.0000 -0.7671 0.6415
+vn 0.2405 0.7401 -0.6280
+vn 0.7664 0.1351 -0.6280
+vn -0.4509 -0.6206 0.6415
+vn 0.4509 0.6206 0.6415
+vn -0.1089 -0.7747 0.6229
+vn -0.0000 -0.4342 0.9008
+vn -0.7151 -0.3790 0.5874
+vn -0.0000 -0.7823 0.6229
+vn -0.4234 -0.3611 0.8309
+vn -0.2438 -0.4359 0.8663
+vn 0.4509 0.6206 -0.6415
+vn -0.1086 -0.7728 -0.6253
+vn -0.1068 -0.7597 0.6415
+vn -0.1068 -0.7597 -0.6415
+vn -0.6206 0.4509 0.6415
+vn -0.4829 -0.8174 -0.3142
+vn -0.5202 -0.7936 -0.3156
+vn -0.1144 -0.8048 0.5824
+vn -0.4446 -0.6783 0.5850
+vn -0.4222 -0.7059 0.5687
+vn -0.4813 -0.8181 -0.3146
+vn 0.7401 -0.2405 -0.6280
+vn 0.3601 -0.6773 -0.6415
+vn 0.2027 0.8949 0.3977
+vn 0.6116 -0.6848 0.3962
+vn 0.7071 0.0000 0.7071
+vn -0.3363 -0.6895 0.6415
+vn 0.0000 -0.7804 -0.6253
+vn -0.6296 -0.4574 -0.6280
+vn 0.2371 0.7296 0.6415
+vn 0.2371 0.7296 -0.6415
+vn -0.9469 0.0659 0.3148
+vn -0.9450 0.0664 0.3202
+vn -0.9454 0.0632 0.3197
+vn -0.9451 0.0653 0.3201
+vn -0.9465 0.0677 0.3156
+vn -0.9470 0.0652 0.3145
+vn 0.6561 -0.6839 0.3190
+vn 0.6531 -0.6870 0.3186
+vn 0.6870 -0.6515 0.3218
+vn 0.6824 -0.6576 0.3193
+vn 0.6191 -0.7186 0.3168
+vn 0.6472 -0.6925 0.3188
+vn -0.6220 0.5211 0.5844
+vn 0.0228 0.9498 0.3121
+vn -0.7271 0.6091 -0.3169
+vn -0.9313 -0.1881 0.3119
+vn 0.1701 0.8031 0.5711
+vn 0.1717 0.9333 -0.3153
+vn 0.2261 0.9236 -0.3096
+vn -0.1560 0.7987 0.5811
+vn 0.1924 0.7860 0.5876
+vn 0.2644 0.9112 -0.3159
+vn 0.2256 0.9202 -0.3199
+vn 0.1752 0.9320 -0.3172
+vn 0.1924 0.9283 -0.3182
+vn 0.0000 0.0000 -1.0000
+vn -0.7728 0.1086 -0.6252
+vn -0.8180 -0.1973 0.5404
+vn -0.8276 -0.4666 0.3119
+vn -0.2371 -0.7296 -0.6415
+vn -0.7118 -0.5811 0.3946
+vn -0.7597 0.1068 0.6415
+vn -0.8039 -0.5033 0.3168
+vn -0.8363 -0.4457 0.3193
+vn -0.8319 -0.4521 0.3218
+vn -0.0904 0.0132 0.9958
+vn -0.5109 0.6928 0.5089
+vn -0.2399 -0.7384 0.6303
+vn -0.2412 -0.7422 -0.6253
+vn -0.3601 0.6773 -0.6415
+vn -0.3835 -0.3129 0.8689
+vn -0.2782 -0.4797 0.8322
+vn -0.7646 -0.1348 0.6303
+vn -0.2328 -0.7720 0.5914
+vn 0.0865 0.8231 0.5612
+vn -0.1881 0.9313 0.3119
+vn -0.6206 0.4509 -0.6415
+vn -0.3177 0.8629 0.3930
+vn -0.2371 -0.7296 0.6415
+vn -0.8802 0.3553 -0.3145
+vn -0.8770 0.3627 -0.3150
+vn -0.8807 0.3533 -0.3154
+vn -0.8828 0.3497 -0.3136
+vn 0.0409 -0.8071 0.5890
+vn 0.0758 -0.8169 0.5718
+vn 0.0480 -0.9478 -0.3154
+vn 0.3819 -0.7178 0.5822
+vn 0.0410 -0.8099 0.5851
+vn -0.0070 -0.9489 -0.3155
+vn 0.9452 0.0789 0.3168
+vn 0.9416 0.1161 0.3161
+vn 0.9392 0.1266 0.3191
+vn 0.7555 0.1332 0.6415
+vn -0.3129 0.3835 0.8689
+vn -0.4797 0.2782 0.8322
+vn -0.1348 0.7646 0.6303
+vn -0.7719 0.2340 0.5911
+vn -0.7555 -0.1332 -0.6415
+vn -0.1351 0.7664 -0.6280
+vn 0.6773 0.3601 -0.6415
+vn -0.4126 0.8532 0.3190
+vn -0.4521 0.8319 0.3218
+vn -0.4457 0.8363 0.3193
+vn -0.3664 0.8738 0.3198
+vn -0.4028 0.8590 0.3160
+vn 0.3363 0.6895 0.6415
+vn -0.4381 -0.2012 0.8761
+vn -0.7972 0.1259 0.5905
+vn -0.4598 -0.6329 0.6229
+vn -0.5525 -0.0217 0.8332
+vn 0.6382 -0.5864 0.4988
+vn 0.3551 -0.8461 0.3977
+vn 0.5398 -0.7818 0.3121
+vn 0.3363 0.6895 -0.6415
+vn -0.8170 -0.0751 0.5718
+vn -0.8031 -0.1148 0.5847
+vn -0.9391 -0.1343 -0.3163
+vn -0.6773 -0.3601 -0.6415
+vn 0.5329 0.5518 0.6415
+vn 0.6908 0.3673 0.6229
+vn 0.0874 0.0306 0.9957
+vn -0.2412 0.7422 -0.6253
+vn 0.2021 -0.5167 0.8320
+vn -0.4210 -0.3632 0.8312
+vn -0.1359 0.7704 0.6229
+vn 0.2405 -0.7401 -0.6280
+vn 0.7274 -0.6099 -0.3145
+vn 0.2800 -0.8616 0.4234
+vn 0.2371 -0.7296 -0.6415
+vn -0.2027 -0.8949 0.3977
+vn -0.5267 -0.6883 0.4988
+vn -0.5811 0.7118 0.3946
+vn 0.0304 -0.0877 0.9957
+vn 0.2230 0.4782 0.8495
+vn 0.0632 0.9454 0.3197
+vn 0.0659 0.9469 0.3148
+vn 0.0652 0.9451 0.3201
+vn 0.0678 0.9465 0.3156
+vn 0.0653 0.9470 0.3145
+vn 0.0640 0.9466 0.3158
+vn 0.0663 0.9450 0.3203
+vn 0.5033 -0.8039 0.3168
+vn -0.0132 -0.0904 0.9958
+vn -0.6928 -0.5109 0.5089
+vn -0.3366 0.8877 0.3141
+vn -0.3310 0.8894 0.3153
+vn -0.3348 0.8876 0.3163
+vn -0.3372 0.8879 0.3129
+vn -0.3304 0.8885 0.3185
+vn -0.3343 0.8873 0.3177
+vn -0.3385 0.8869 0.3145
+vn 0.7422 0.2412 -0.6252
+vn 0.0049 0.0000 1.0000
+vn 0.0757 -0.0100 0.9971
+vn 0.8801 -0.3553 0.3148
+vn 0.8783 -0.3549 0.3202
+vn 0.8796 -0.3523 0.3197
+vn 0.8791 -0.3539 0.3192
+vn 0.8793 -0.3570 0.3154
+vn 0.8814 -0.3543 0.3123
+vn -0.0676 -0.9463 0.3161
+vn -0.1322 -0.9399 0.3148
+vn -0.1208 -0.9402 0.3184
+vn -0.0654 -0.9462 0.3168
+vn -0.0662 -0.9478 0.3120
+vn 0.0458 -0.9483 0.3141
+vn 0.1177 -0.9414 0.3160
+vn 0.0801 -0.9446 0.3185
+vn 0.0399 -0.9481 0.3153
+vn 0.0441 -0.9476 0.3163
+vn 0.0397 -0.9471 0.3185
+vn 0.1168 -0.4684 0.8758
+vn -0.5804 -0.7553 0.3043
+vn 0.2283 -0.9158 -0.3303
+vn 0.1217 -0.5358 0.8355
+vn 0.2101 -0.9250 -0.3166
+vn 0.8593 -0.4028 0.3153
+vn 0.1797 -0.7912 0.5845
+vn 0.2633 -0.9110 -0.3174
+vn 0.3419 -0.9117 -0.2279
+vn 0.9481 0.0480 0.3142
+vn 0.9480 0.0423 0.3153
+vn 0.9498 0.0458 0.3096
+vn 0.9475 0.0463 0.3163
+vn 0.9470 0.0419 0.3185
+vn -0.8797 0.3546 0.3168
+vn -0.8526 0.4141 0.3187
+vn -0.8569 0.4054 0.3185
+vn -0.3830 -0.7717 0.5078
+vn -0.0875 -0.0306 0.9957
+vn -0.8223 -0.4702 -0.3205
+vn -0.7980 -0.5132 -0.3160
+vn -0.1043 -0.9448 0.3105
+vn -0.8972 0.3101 0.3145
+vn -0.6116 0.6848 0.3962
+vn 0.2412 0.7422 -0.6253
+vn -0.0777 0.5454 0.8345
+vn -0.0509 -0.1362 0.9894
+vn -0.2371 0.7296 -0.6415
+vn -0.2371 0.7296 0.6415
+vn 0.5329 0.5518 -0.6415
+vn 0.6293 0.6516 0.4235
+vn -0.2282 0.7956 0.5612
+vn 0.1630 0.9050 0.3930
+vn -0.2405 0.7401 -0.6280
+vn -0.1332 0.7555 0.6415
+vn -0.6895 0.3363 -0.6415
+vn -0.2399 0.7384 0.6303
+vn -0.1217 -0.0324 0.9920
+vn -0.1190 -0.0297 0.9925
+vn -0.7271 0.6091 0.3167
+vn -0.6824 0.6576 0.3193
+vn -0.6870 0.6515 0.3218
+vn 0.0073 0.1208 0.9926
+vn 0.0536 -0.0462 0.9975
+vn 0.4563 0.6281 0.6303
+vn -0.2628 -0.4091 0.8738
+vn -0.1055 -0.5427 0.8333
+vn -0.6855 -0.3645 0.6303
+vn 0.0041 -0.8138 0.5811
+vn -0.3796 -0.2018 0.9029
+vn -0.4587 -0.6314 -0.6253
+vn 0.4574 0.6296 -0.6280
+vn -0.4509 -0.6206 -0.6415
+vn -0.2418 -0.7440 0.6229
+vn -0.5167 -0.2020 0.8320
+vn -0.3606 -0.3328 0.8713
+vn -0.7987 -0.1560 0.5811
+vn -0.6773 -0.3601 0.6415
+vn 0.1677 0.9328 0.3190
+vn 0.2171 0.9223 0.3198
+vn 0.1790 0.9317 0.3160
+vn -0.7664 -0.1351 -0.6280
+vn 0.3601 -0.6773 0.6415
+vn 0.5518 -0.5329 0.6415
+vn 0.8802 -0.3553 -0.3145
+vn 0.8820 -0.3557 -0.3093
+vn 0.8796 -0.3561 -0.3156
+vn 0.8816 -0.3525 -0.3140
+vn -0.6839 -0.6561 0.3190
+vn -0.6515 -0.6870 0.3218
+vn -0.6576 -0.6824 0.3193
+vn -0.7186 -0.6191 0.3168
+vn -0.6924 -0.6475 0.3184
+vn 0.8071 0.0409 0.5890
+vn 0.8169 0.0758 0.5718
+vn 0.9408 0.1215 -0.3163
+vn 0.9478 0.0480 -0.3154
+vn 0.9415 0.1166 -0.3163
+vn 0.9441 0.0933 -0.3162
+vn 0.7178 0.3819 0.5822
+vn 0.8099 0.0410 0.5851
+vn 0.9489 -0.0070 -0.3155
+vn -0.5393 -0.5585 0.6303
+vn 0.2629 -0.7633 0.5901
+vn -0.2987 -0.3093 0.9029
+vn -0.1211 -0.4621 0.8785
+vn 0.0777 -0.5454 0.8345
+vn 0.4050 -0.8581 -0.3157
+vn 0.3353 -0.8875 -0.3163
+vn 0.3182 -0.7567 0.5711
+vn 0.3462 -0.7335 0.5849
+vn 0.6568 -0.6850 -0.3150
+vn 0.6585 -0.6821 -0.3180
+vn 0.5402 -0.6190 0.5701
+vn 0.5638 -0.5841 0.5840
+vn 0.6748 -0.6671 -0.3156
+vn -0.5403 0.6189 0.5701
+vn -0.6483 0.6920 -0.3177
+vn -0.5942 0.7399 -0.3154
+vn -0.6440 0.6970 -0.3153
+vn -0.6274 0.7120 -0.3155
+vn -0.7300 0.3574 0.5825
+vn -0.5078 0.6323 0.5851
+vn -0.5056 0.6295 0.5900
+vn -0.2826 -0.4810 0.8299
+vn -0.5427 0.1055 0.8333
+vn 0.0000 -0.7782 -0.6280
+vn 0.6206 -0.4509 0.6415
+vn -0.7422 -0.2412 -0.6252
+vn -0.8292 -0.4651 -0.3102
+vn -0.7976 -0.5141 -0.3155
+vn -0.7296 0.2371 -0.6415
+vn -0.3601 0.6773 0.6415
+vn 0.3664 -0.6891 -0.6253
+vn -0.3653 0.6871 -0.6280
+vn 0.6895 -0.3363 0.6415
+vn 0.4509 -0.6206 0.6415
+vn 0.1211 0.4621 0.8785
+vn 0.5393 0.5585 0.6303
+vn -0.2630 0.7632 0.5902
+vn 0.2987 0.3093 0.9029
+vn -0.5435 -0.5628 0.6229
+vn 0.5406 0.5598 -0.6280
+vn -0.3363 -0.6895 -0.6415
+vn -0.7296 -0.2371 0.6415
+vn -0.7671 -0.0000 0.6415
+vn 0.1359 -0.7704 0.6229
+vn -0.8019 0.4486 0.3946
+vn 0.0904 -0.0132 0.9958
+vn 0.5032 -0.8048 0.3149
+vn 0.5018 -0.8035 0.3202
+vn 0.5045 -0.8021 0.3196
+vn -0.9160 0.2495 0.3142
+vn -0.9317 0.1790 0.3160
+vn -0.9239 0.2178 0.3145
+vn -0.9141 0.2550 0.3153
+vn -0.9149 0.2509 0.3163
+vn -0.9165 0.2475 0.3145
+vn 0.6827 0.6593 -0.3151
+vn 0.7112 0.6282 -0.3155
+vn 0.6958 0.6453 -0.3153
+vn 0.6709 0.6710 -0.3157
+vn 0.6821 0.6585 -0.3180
+vn 0.6920 0.6482 -0.3177
+vn 0.6190 0.5403 0.5701
+vn 0.5840 0.5638 0.5840
+vn 0.7633 0.2629 0.5901
+vn -0.5839 0.5655 0.5824
+vn -0.7440 -0.2418 0.6229
+vn -0.4810 0.2826 0.8299
+vn -0.4987 0.0978 0.8612
+vn -0.4130 -0.1342 0.9008
+vn 0.1394 -0.1497 0.9789
+vn 0.6978 -0.3403 0.6303
+vn 0.6421 0.4878 0.5915
+vn 0.3864 -0.1885 0.9029
+vn 0.4684 0.0269 0.8831
+vn 0.7296 0.2371 -0.6415
+vn 0.6206 0.4509 0.6415
+vn 0.9372 -0.1436 0.3180
+vn 0.9403 -0.1190 0.3187
+vn 0.9430 -0.1119 0.3135
+vn 0.9255 -0.2056 0.3182
+vn 0.9357 -0.1585 0.3152
+vn -0.0338 -0.0630 0.9974
+vn 0.0085 0.1027 0.9947
+vn 0.1627 -0.1090 0.9806
+vn 0.7408 0.5926 0.3162
+vn 0.6925 0.6472 0.3188
+vn 0.7186 0.6191 0.3168
+vn 0.1362 -0.0509 0.9894
+vn 0.3546 0.8797 -0.3169
+vn -0.4666 0.8276 0.3119
+vn 0.9103 0.2718 0.3121
+vn 0.3537 0.8779 -0.3227
+vn 0.3548 0.8813 -0.3120
+vn -0.6708 0.4561 0.5847
+vn -0.6933 0.4383 0.5720
+vn -0.7899 0.5256 -0.3158
+vn -0.7845 0.5335 -0.3162
+vn -0.7921 0.5229 -0.3149
+vn -0.8010 0.5102 -0.3133
+vn 0.0150 0.9463 -0.3228
+vn 0.0559 0.8095 0.5845
+vn 0.7818 0.5398 0.3121
+vn 0.0654 0.9462 -0.3169
+vn -0.6996 0.6429 0.3119
+vn -0.5518 0.5329 -0.6415
+vn -0.4253 0.7999 0.4234
+vn -0.8398 0.0522 0.5404
+vn -0.7555 -0.1332 0.6415
+vn -0.4509 0.6206 -0.6415
+vn -0.4574 0.6296 -0.6280
+vn -0.7422 0.2412 -0.6253
+vn 0.1812 -0.4699 0.8639
+vn 0.3632 -0.4210 0.8312
+vn -0.1080 -0.7688 0.6303
+vn 0.6623 -0.4599 0.5914
+vn -0.0598 -0.4257 0.9029
+vn -0.0324 0.1217 0.9920
+vn -0.0297 0.1190 0.9925
+vn 0.6091 0.7271 0.3167
+vn 0.6576 0.6824 0.3193
+vn 0.6515 0.6870 0.3218
+vn 0.1208 -0.0073 0.9926
+vn -0.0462 -0.0536 0.9975
+vn 0.6281 0.4563 0.6303
+vn 0.6281 -0.4563 0.6303
+vn -0.6314 -0.4587 -0.6253
+vn -0.0217 0.5525 0.8332
+vn -0.0100 -0.0757 0.9971
+vn -0.1332 0.7555 -0.6415
+vn -0.6206 -0.4509 -0.6415
+vn -0.5329 -0.5518 -0.6415
+vn 0.5628 -0.5435 0.6229
+vn -0.8082 -0.0409 0.5875
+vn -0.9478 -0.0480 -0.3152
+vn -0.8099 -0.0410 0.5851
+vn -0.6561 0.6839 0.3190
+vn -0.6531 0.6870 0.3186
+vn -0.6191 0.7186 0.3168
+vn -0.6477 0.6924 0.3181
+vn 0.5518 -0.5329 -0.6415
+vn -0.5033 0.8039 0.3168
+vn 0.0132 0.0904 0.9958
+vn 0.6928 0.5109 0.5089
+vn -0.9462 0.0654 0.3168
+vn -0.9399 0.1334 0.3144
+vn -0.9388 0.1233 0.3218
+vn -0.9477 0.0662 0.3121
+vn -0.9466 0.0629 0.3161
+vn -0.9457 0.0674 0.3180
+vn 0.8532 0.4126 0.3190
+vn 0.8316 0.4549 0.3184
+vn 0.8362 0.4463 0.3186
+vn 0.8791 0.3567 0.3163
+vn 0.8602 0.4003 0.3159
+vn -0.0000 0.7671 0.6415
+vn 0.4486 0.8019 0.3946
+vn 0.3101 0.8972 0.3145
+vn 0.0522 0.8398 0.5404
+vn -0.9448 0.1043 0.3105
+vn -0.8355 0.2707 0.4782
+vn 0.9112 -0.2644 -0.3159
+vn 0.9236 -0.2261 -0.3096
+vn 0.7987 0.1560 0.5811
+vn 0.7860 -0.1924 0.5876
+vn 0.8031 -0.1701 0.5711
+vn 0.9202 -0.2256 -0.3199
+vn -0.4418 -0.8395 -0.3163
+vn -0.2063 -0.3920 0.8965
+vn -0.6421 -0.4878 0.5915
+vn -0.3813 -0.7178 0.5826
+vn -0.2684 -0.5053 0.8201
+vn -0.4443 -0.8363 -0.3213
+vn 0.7399 0.5942 -0.3154
+vn 0.3574 0.7300 0.5825
+vn 0.6323 0.5078 0.5851
+vn 0.6295 0.5056 0.5900
+vn -0.3241 0.7552 0.5697
+vn -0.3587 0.7276 0.5847
+vn -0.0172 0.8062 0.5914
+vn -0.4195 0.8509 -0.3163
+vn -0.3795 0.8695 -0.3163
+vn -0.4014 0.8595 -0.3164
+vn -0.4059 0.8574 -0.3164
+vn -0.4621 0.1211 0.8785
+vn -0.5454 -0.0777 0.8345
+vn -0.5585 0.5393 0.6303
+vn -0.7633 -0.2629 0.5901
+vn -0.3093 0.2987 0.9029
+vn -0.7401 -0.2405 -0.6280
+vn 0.5614 -0.5421 -0.6253
+vn -0.5598 0.5406 -0.6280
+vn -0.7587 0.5762 0.3041
+vn -0.7860 0.3350 0.5196
+vn -0.6891 -0.3664 -0.6253
+vn 0.6206 0.4509 -0.6415
+vn -0.6206 -0.4509 0.6415
+vn 0.4651 -0.8292 -0.3102
+vn 0.5140 -0.7976 -0.3155
+vn -0.4117 0.7758 0.4782
+vn 0.3830 0.7717 0.5078
+vn -0.2718 0.9103 0.3121
+vn -0.7273 0.6099 0.3149
+vn -0.7259 0.6112 0.3155
+vn -0.7255 0.6092 0.3202
+vn -0.0764 0.0094 0.9970
+vn -0.0757 0.0100 0.9971
+vn -0.7926 0.5214 0.3163
+vn -0.8295 0.4585 0.3188
+vn -0.1045 -0.0234 0.9943
+vn -0.0409 0.8071 0.5890
+vn -0.0758 0.8169 0.5718
+vn -0.1215 0.9408 -0.3163
+vn -0.0480 0.9478 -0.3154
+vn -0.1166 0.9415 -0.3163
+vn -0.0933 0.9441 -0.3162
+vn -0.3819 0.7178 0.5822
+vn -0.0410 0.8099 0.5851
+vn 0.0070 0.9489 -0.3155
+vn -0.9471 0.0543 -0.3162
+vn -0.8099 0.0465 0.5847
+vn 0.6206 -0.4509 -0.6415
+vn 0.2708 0.8355 0.4782
+vn 0.1043 0.9448 0.3105
+vn 0.7296 -0.2371 0.6415
+vn -0.5614 0.5421 -0.6253
+vn 0.7296 0.2371 0.6415
+vn -0.6099 -0.7273 0.3148
+vn -0.6092 -0.7255 0.3202
+vn -0.6069 -0.7277 0.3195
+vn -0.6082 -0.7267 0.3192
+vn -0.6096 -0.7272 0.3156
+vn 0.7926 -0.5214 0.3163
+vn 0.8295 -0.4585 0.3188
+vn 0.1045 0.0234 0.9943
+vn 0.0764 -0.0094 0.9970
+vn -0.5211 -0.6220 0.5844
+vn -0.9498 0.0228 0.3121
+vn -0.6091 -0.7271 -0.3169
+vn 0.1881 -0.9313 0.3119
+vn -0.6112 -0.7260 -0.3153
+vn -0.6099 -0.7274 -0.3145
+vn -0.6107 -0.7290 -0.3093
+vn -0.9380 0.1442 -0.3151
+vn -0.9302 0.1840 -0.3177
+vn -0.9346 0.1624 -0.3164
+vn -0.9361 0.1579 -0.3143
+vn -0.8042 0.1637 0.5714
+vn -0.8015 0.1232 0.5852
+vn -0.6671 0.4490 0.5945
+vn -0.9236 0.2261 -0.3096
+vn -0.7860 0.1924 0.5876
+vn -0.9112 0.2644 -0.3159
+vn -0.9202 0.2256 -0.3199
+vn 0.2371 -0.7296 0.6415
+vn -0.7296 -0.2371 -0.6415
+vn -0.6281 0.4563 0.6303
+vn 0.5454 0.0777 0.8345
+vn -0.1362 0.0509 0.9894
+vn 0.6314 -0.4587 -0.6253
+vn -0.6296 0.4574 -0.6280
+vn 0.3177 -0.8629 0.3930
+vn -0.9050 0.1630 0.3930
+vn -0.5518 0.5329 0.6415
+vn -0.7956 -0.2282 0.5612
+vn 0.1217 0.0324 0.9920
+vn 0.1190 0.0297 0.9925
+vn 0.7271 -0.6091 0.3167
+vn -0.0073 -0.1208 0.9926
+vn -0.0536 0.0462 0.9975
+vn 0.7384 0.2399 0.6303
+vn 0.7597 -0.1068 0.6415
+vn 0.1288 -0.9390 0.3190
+vn 0.1729 -0.9309 0.3218
+vn 0.1647 -0.9348 0.3148
+vn 0.6895 -0.3363 -0.6415
+vn 0.7782 0.0000 -0.6280
+vn -0.9390 -0.1288 0.3190
+vn -0.9309 -0.1729 0.3218
+vn -0.9351 -0.1634 0.3145
+vn -0.9452 -0.0786 0.3168
+vn -0.9414 -0.1177 0.3160
+vn -0.4563 0.6281 0.6303
+vn 0.7401 0.2405 -0.6280
+vn -0.7706 0.1083 -0.6280
+vn -0.6577 0.6842 -0.3151
+vn -0.6727 0.6692 -0.3157
+vn -0.6586 0.6820 -0.3180
+vn -0.5639 0.5839 0.5840
+vn 0.0100 0.0757 0.9971
+vn 0.0217 -0.5525 0.8332
+vn -0.0420 0.0000 -0.9991
+vn 0.7032 -0.3430 0.6229
+vn 0.0324 -0.1217 0.9920
+vn 0.0297 -0.1190 0.9925
+vn -0.6091 -0.7271 0.3167
+vn -0.1208 0.0073 0.9926
+vn 0.0462 0.0536 0.9975
+vn 0.4587 -0.6314 -0.6253
+vn -0.1812 0.4699 0.8639
+vn -0.3632 0.4210 0.8312
+vn 0.1080 0.7688 0.6303
+vn 0.1351 -0.7664 -0.6280
+vn 0.7014 -0.3421 -0.6253
+vn 0.0000 0.7782 -0.6280
+vn 0.6848 0.6116 0.3962
+vn -0.8948 0.2027 0.3977
+vn -0.7704 -0.1359 0.6229
+vn -0.7686 -0.1355 -0.6253
+vn -0.6883 0.5266 0.4989
+vn -0.8593 0.4028 0.3153
+vn 0.4598 -0.6329 0.6229
+vn -0.1727 -0.7215 0.6705
+vn 0.0552 -0.4703 0.8808
+vn -0.3574 -0.7300 0.5825
+vn 0.9514 -0.0267 -0.3069
+vn 0.9470 -0.0659 -0.3145
+vn 0.1973 -0.8180 0.5404
+vn 0.4666 -0.8276 0.3119
+vn 0.7296 -0.2371 -0.6415
+vn 0.5811 -0.7118 0.3946
+vn -0.8048 -0.5032 0.3148
+vn -0.8035 -0.5018 0.3202
+vn -0.8020 -0.5046 0.3197
+vn -0.8030 -0.5027 0.3201
+vn -0.8056 -0.5015 0.3155
+vn -0.8047 -0.5048 0.3123
+vn 0.9160 -0.2495 0.3142
+vn 0.9141 -0.2550 0.3153
+vn 0.9149 -0.2509 0.3163
+vn 0.9130 -0.2549 0.3185
+vn 0.8292 0.4651 -0.3102
+vn 0.7976 0.5140 -0.3155
+vn 0.6773 0.3601 0.6415
+vn -0.0304 0.0877 0.9957
+vn -0.2230 -0.4782 0.8495
+vn 0.1355 -0.7686 -0.6253
+vn 0.7671 0.0000 0.6415
+vn -0.3553 -0.8801 0.3148
+vn -0.3551 -0.8783 0.3202
+vn -0.3523 -0.8796 0.3197
+vn -0.3541 -0.8787 0.3201
+vn -0.3566 -0.8792 0.3160
+vn -0.3541 -0.8815 0.3125
+vn -0.0458 0.9483 0.3141
+vn -0.1175 0.9418 0.3151
+vn -0.0783 0.9460 0.3145
+vn -0.0399 0.9481 0.3153
+vn -0.0441 0.9476 0.3163
+vn -0.0479 0.9481 0.3145
+vn 0.8972 -0.3101 0.3145
+vn 0.7980 0.5132 -0.3160
+vn 0.8223 0.4702 -0.3205
+vn 0.8797 -0.3546 -0.3169
+vn 0.8276 0.4666 0.3119
+vn 0.2718 -0.9103 0.3121
+vn 0.8809 -0.3522 -0.3162
+vn 0.8780 -0.3537 -0.3227
+vn -0.5046 0.8020 0.3197
+vn -0.5032 0.8048 0.3149
+vn -0.5027 0.8030 0.3201
+vn -0.5015 0.8057 0.3153
+vn -0.5039 0.8045 0.3144
+vn -0.5048 0.8035 0.3156
+vn -0.5018 0.8035 0.3202
+vn -0.6190 -0.5402 0.5701
+vn -0.7399 -0.5942 -0.3154
+vn -0.6323 -0.5078 0.5851
+vn -0.6295 -0.5056 0.5900
+vn 0.4509 -0.6206 -0.6415
+vn -0.4702 0.8223 -0.3205
+vn -0.5132 0.7980 -0.3160
+vn -0.9006 -0.4013 -0.1668
+vn -0.7711 0.3832 0.5085
+vn -0.9103 -0.2718 0.3121
+vn -0.7758 -0.4117 0.4782
+vn -0.7384 0.2399 0.6303
+vn 0.7728 -0.1086 -0.6253
+vn 0.7440 -0.2418 0.6229
+vn 0.3328 -0.3606 0.8713
+vn 0.1560 -0.7987 0.5811
+vn 0.4210 0.3632 0.8312
+vn -0.2020 0.5167 0.8320
+vn -0.7296 0.2371 0.6415
+vn -0.5406 -0.5598 -0.6280
+vn 0.7764 0.0000 0.6303
+vn -0.5628 0.5435 0.6229
+vn -0.7671 0.0000 -0.6415
+vn -0.8797 0.3546 -0.3169
+vn -0.8780 0.3537 -0.3227
+vn -0.8813 0.3548 -0.3120
+vn 0.2628 0.4091 0.8738
+vn 0.1055 0.5427 0.8333
+vn 0.6855 0.3645 0.6303
+vn 0.3796 0.2018 0.9029
+vn -0.1677 -0.9328 0.3190
+vn -0.2156 -0.9233 0.3177
+vn -0.1798 -0.9306 0.3188
+vn 0.7597 -0.1068 -0.6415
+vn 0.8353 -0.4476 0.3191
+vn 0.8569 -0.4054 0.3185
+vn 0.8526 -0.4141 0.3187
+vn 0.1497 0.1394 0.9789
+vn -0.0519 0.0720 0.9961
+vn 0.1309 0.0862 0.9876
+vn -0.4509 0.6206 0.6415
+vn 0.4563 -0.6281 0.6303
+vn -0.3971 -0.8142 0.4235
+vn 0.4117 -0.7758 0.4782
+vn 0.4014 -0.9005 -0.1671
+vn -0.6851 -0.6568 -0.3150
+vn -0.6821 -0.6585 -0.3180
+vn -0.5841 -0.5638 0.5840
+vn -0.6671 -0.6748 -0.3156
+vn -0.6908 -0.3673 0.6229
+vn 0.7747 -0.1089 0.6229
+vn -0.7597 0.1068 -0.6415
+vn -0.5329 -0.5518 0.6415
+vn -0.7014 0.3421 -0.6253
+vn 0.2418 0.7440 0.6229
+vn 0.5167 0.2020 0.8320
+vn 0.3606 0.3328 0.8713
+vn 0.1342 0.4130 0.9008
+vn -0.7806 0.4834 0.3961
+vn 0.8461 0.3551 0.3977
+vn 0.4381 0.2012 0.8761
+vn 0.7972 -0.1259 0.5905
+vn 0.4598 0.6329 0.6229
+vn 0.5525 0.0217 0.8332
+vn -0.7688 0.1080 0.6303
+vn -0.4699 -0.1812 0.8639
+vn -0.6978 0.3403 0.6303
+vn -0.3864 0.1885 0.9029
+vn -0.4684 -0.0269 0.8831
+vn -0.1394 0.1497 0.9789
+vn -0.7747 0.1089 0.6229
+vn 0.7706 -0.1083 -0.6280
+vn -0.9059 -0.0000 0.4234
+vn -0.4664 0.7159 0.5196
+vn 0.7633 0.2746 0.5847
+vn 0.7567 0.3182 0.5711
+vn 0.8875 0.3353 -0.3163
+vn 0.8927 0.3211 -0.3162
+vn 0.8856 0.3400 -0.3163
+vn 0.8767 0.3623 -0.3163
+vn 0.5704 0.5709 0.5905
+vn 0.6099 0.7274 -0.3145
+vn 0.6160 0.7220 -0.3150
+vn 0.6129 0.7270 -0.3096
+vn 0.6069 0.7299 -0.3145
+vn 0.6060 0.7326 -0.3099
+vn 0.4664 -0.7159 0.5196
+vn 0.6996 -0.6429 0.3118
+vn 0.7671 0.0000 -0.6415
+vn 0.7806 -0.4834 0.3962
+vn -0.3421 -0.7014 -0.6253
+vn 0.1332 -0.7555 0.6415
+vn 0.7273 -0.6099 0.3148
+vn 0.7255 -0.6092 0.3202
+vn 0.7277 -0.6068 0.3197
+vn 0.7263 -0.6083 0.3201
+vn 0.7259 -0.6112 0.3155
+vn 0.7288 -0.6094 0.3122
+vn -0.9483 -0.0458 0.3142
+vn -0.9481 -0.0400 0.3153
+vn -0.9476 -0.0441 0.3163
+vn -0.9484 -0.0467 0.3136
+vn 0.3524 0.8796 0.3196
+vn 0.3553 0.8801 0.3149
+vn 0.3566 0.8792 0.3160
+vn 0.3547 0.8805 0.3145
+vn 0.3551 0.8783 0.3202
+vn 0.2495 0.9160 0.3142
+vn 0.2550 0.9141 0.3153
+vn 0.2509 0.9149 0.3163
+vn 0.2491 0.9165 0.3129
+vn 0.2549 0.9130 0.3185
+vn 0.2511 0.9143 0.3178
+vn 0.2475 0.9165 0.3145
+vn 0.9476 -0.0519 0.3152
+vn 0.9458 -0.0524 0.3205
+vn 0.9471 -0.0537 0.3166
+vn 0.9477 -0.0541 0.3146
+vn 0.9482 -0.0555 0.3127
+vn 0.9477 -0.0512 0.3149
+vn 0.7845 -0.5335 -0.3162
+vn 0.6708 -0.4561 0.5847
+vn 0.6943 -0.4367 0.5721
+vn 0.7903 -0.5250 -0.3158
+vn -0.3546 -0.8797 -0.3169
+vn -0.3539 -0.8780 -0.3222
+vn -0.3537 -0.8779 -0.3227
+vn -0.2644 -0.9112 -0.3159
+vn -0.2261 -0.9236 -0.3096
+vn -0.1924 -0.7860 0.5876
+vn -0.2256 -0.9202 -0.3199
+vn -0.8461 -0.3550 0.3977
+vn -0.7818 -0.5398 0.3121
+vn -0.8971 0.1261 0.4234
+vn -0.5864 -0.6382 0.4988
+vn 0.4342 0.0000 0.9008
+vn 0.7823 0.0000 0.6229
+vn 0.3611 -0.4234 0.8309
+vn 0.4359 -0.2438 0.8663
+vn 0.3513 -0.2552 0.9008
+vn 0.6329 -0.4598 0.6229
+vn 0.2012 -0.4381 0.8761
+vn 0.7804 0.0000 -0.6253
+vn 0.8355 -0.2707 0.4782
+vn 0.9448 -0.1043 0.3105
+vn -0.2012 0.4381 0.8761
+vn 0.1144 0.8048 0.5824
+vn -0.6329 0.4598 0.6229
+vn 0.7384 -0.2399 0.6303
+vn 0.4699 0.1812 0.8639
+vn 0.7688 -0.1080 0.6303
+vn 0.4599 0.6623 0.5914
+vn 0.6314 0.4587 -0.6253
+vn -0.6329 -0.4598 0.6229
+vn -0.1090 -0.1627 0.9806
+vn -0.7215 0.1727 0.6705
+vn -0.4703 -0.0552 0.8808
+vn -0.3513 -0.2552 0.9008
+vn -0.7823 0.0000 0.6229
+vn -0.3611 0.4234 0.8309
+vn -0.4359 0.2438 0.8663
+vn -0.4342 0.0000 0.9008
+vn 0.9124 0.2635 -0.3132
+vn 0.9257 0.2098 -0.3148
+vn 0.9245 0.2305 -0.3035
+vn -0.3411 -0.6994 -0.6280
+vn -0.9209 -0.2282 0.3161
+vn -0.9201 -0.2302 0.3168
+vn -0.9218 -0.2300 0.3120
+vn -0.9195 -0.2287 0.3196
+vn -0.9138 -0.2552 -0.3159
+vn -0.4821 -0.1346 0.8657
+vn -0.8969 -0.3083 -0.3172
+vn -0.5760 -0.5635 0.5922
+vn -0.7674 -0.2638 0.5843
+vn -0.7595 -0.3137 0.5698
+vn -0.8911 -0.3246 -0.3172
+vn -0.5601 -0.1490 0.8150
+vn -0.9159 -0.2436 -0.3189
+vn 0.0242 -0.6342 0.7728
+vn 0.3724 0.0990 0.9228
+vn -0.9328 0.1677 0.3190
+vn -0.9322 0.1719 0.3185
+vn -0.3553 -0.8802 -0.3145
+vn -0.3533 -0.8808 -0.3153
+vn -0.3525 -0.8816 -0.3139
+vn 0.9006 0.4013 -0.1668
+vn 0.7711 -0.3832 0.5084
+vn 0.7758 0.4117 0.4782
+vn -0.7782 -0.0000 -0.6280
+vn 0.2412 -0.7422 -0.6253
+vn 0.7704 0.1359 0.6229
+vn 0.7686 0.1355 -0.6253
+vn 0.3211 -0.8927 -0.3162
+vn 0.5709 -0.5704 0.5905
+vn 0.2746 -0.7633 0.5847
+vn -0.7032 0.3430 0.6229
+vn -0.7384 -0.2399 0.6303
+vn -0.1973 0.8180 0.5404
+vn -0.1083 -0.7706 -0.6280
+vn 0.0000 0.7804 -0.6253
+vn 0.6883 -0.5266 0.4988
+vn 0.8948 -0.2027 0.3977
+vn -0.7274 0.6099 -0.3145
+vn -0.7220 0.6160 -0.3150
+vn -0.7289 0.6108 -0.3093
+vn -0.7264 0.6105 -0.3156
+vn -0.7284 0.6087 -0.3144
+vn -0.7326 0.6060 -0.3099
+vn -0.8877 -0.3366 0.3141
+vn -0.8594 -0.4028 0.3151
+vn -0.8738 -0.3664 0.3197
+vn -0.8894 -0.3310 0.3153
+vn -0.8876 -0.3348 0.3163
+vn -0.8885 -0.3304 0.3185
+vn 0.2098 -0.9257 -0.3148
+vn 0.2635 -0.9124 -0.3132
+vn 0.2305 -0.9245 -0.3035
+vn 0.0094 0.0764 0.9970
+vn 0.5214 0.7926 0.3163
+vn 0.4585 0.8295 0.3188
+vn -0.0234 0.1045 0.9943
+vn 0.4684 0.1168 0.8758
+vn 0.7553 -0.5804 0.3043
+vn 0.9158 0.2284 -0.3303
+vn 0.5358 0.1217 0.8355
+vn 0.9250 0.2101 -0.3166
+vn 0.4028 0.8593 0.3153
+vn 0.7912 0.1797 0.5846
+vn 0.9110 0.2633 -0.3174
+vn 0.9285 0.0000 -0.3714
+vn -0.3430 -0.7032 0.6229
+vn 0.6220 -0.5211 0.5844
+vn -0.0228 -0.9498 0.3121
+vn 0.7271 -0.6091 -0.3169
+vn 0.9313 0.1881 0.3119
+vn -0.6848 -0.6116 0.3962
+vn 0.3430 0.7032 0.6229
+vn 0.4130 0.1342 0.9008
+vn 0.7440 0.2418 0.6229
+vn 0.4810 -0.2826 0.8299
+vn 0.4987 -0.0978 0.8612
+vn -0.4587 0.6314 -0.6253
+vn -0.8796 0.3523 0.3197
+vn -0.8801 0.3553 0.3148
+vn -0.8788 0.3540 0.3201
+vn -0.8793 0.3570 0.3154
+vn -0.8805 0.3546 0.3147
+vn -0.8806 0.3534 0.3157
+vn -0.8783 0.3549 0.3202
+vn -0.6314 0.4587 -0.6253
+vn -0.0865 -0.8231 0.5612
+vn 0.2399 0.7384 0.6303
+vn 0.5598 -0.5406 -0.6280
+vn 0.4476 0.8353 0.3191
+vn 0.4054 0.8569 0.3185
+vn 0.4141 0.8526 0.3187
+vn -0.0720 -0.0518 0.9961
+vn -0.0862 0.1309 0.9876
+vn 0.6296 -0.4574 -0.6280
+vn 0.6839 0.6561 0.3190
+vn 0.7956 0.2282 0.5612
+vn 0.9050 -0.1630 0.3930
+vn 0.9498 -0.0228 0.3121
+vn 0.6516 -0.6293 0.4235
+vn 0.0509 0.1362 0.9894
+vn 0.3411 0.6994 -0.6280
+vn 0.4443 0.8363 -0.3213
+vn 0.5171 0.7955 -0.3159
+vn 0.4222 0.7059 0.5687
+vn 0.3813 0.7178 0.5826
+vn 0.2684 0.5053 0.8202
+vn 0.4418 0.8395 -0.3163
+vn 0.2662 0.5059 0.8205
+vn 0.4611 0.8293 -0.3156
+vn 0.4506 0.8349 -0.3160
+vn 0.4487 0.8360 -0.3160
+vn 0.4438 0.8385 -0.3162
+vn 0.8166 -0.4869 -0.3100
+vn 0.8351 -0.4502 -0.3162
+vn 0.4773 -0.2573 0.8402
+vn 0.7141 -0.3850 0.5847
+vn 0.4850 -0.6528 0.5819
+vn 0.8181 -0.4820 -0.3136
+vn 0.4641 -0.2734 0.8426
+vn 0.1083 0.7706 -0.6280
+vn 0.1375 0.7995 0.5847
+vn 0.1608 0.9349 -0.3163
+vn -0.3365 0.8872 -0.3156
+vn -0.2876 0.7584 0.5850
+vn 0.5109 -0.6928 0.5089
+vn -0.2708 -0.8355 0.4782
+vn 0.5325 -0.7329 0.4234
+vn 0.8029 0.1163 0.5847
+vn 0.7720 -0.2328 0.5914
+vn 0.9389 0.1360 -0.3163
+vn 0.3835 0.3129 0.8689
+vn 0.2782 0.4797 0.8322
+vn 0.7646 0.1348 0.6303
+vn 0.2328 0.7720 0.5914
+vn 0.6891 0.3664 -0.6253
+vn -0.6871 -0.3653 -0.6280
+vn 0.4621 -0.1211 0.8785
+vn 0.5585 -0.5393 0.6303
+vn 0.3093 -0.2987 0.9029
+vn -0.4486 -0.8019 0.3946
+vn -0.2319 0.9188 0.3195
+vn -0.2299 0.9209 0.3149
+vn -0.2279 0.9212 0.3153
+vn -0.2304 0.9210 0.3142
+vn -0.2290 0.9193 0.3202
+vn 0.0338 0.0630 0.9974
+vn -0.0085 -0.1027 0.9947
+vn -0.1627 0.1090 0.9806
+vn -0.7408 -0.5926 0.3162
+vn 0.3546 0.8797 0.3168
+vn 0.3403 0.6978 0.6303
+vn -0.4851 0.6527 0.5820
+vn 0.1885 0.3864 0.9029
+vn -0.0269 0.4684 0.8831
+vn -0.2966 0.6763 0.6743
+vn 0.8947 0.3187 0.3130
+vn 0.8963 0.3131 0.3142
+vn 0.8946 0.3168 0.3152
+vn 0.8968 0.3143 0.3113
+vn 0.8944 0.3175 0.3149
+vn 0.8937 0.3185 0.3159
+vn 0.8939 0.3206 0.3133
+vn -0.0630 0.0338 0.9974
+vn 0.1027 -0.0085 0.9947
+vn 0.5926 -0.7408 0.3162
+vn -0.0150 -0.9464 -0.3228
+vn -0.0654 -0.9462 -0.3169
+vn -0.0559 -0.8095 0.5844
+vn 0.4702 -0.8223 -0.3205
+vn 0.5132 -0.7980 -0.3160
+vn -0.3101 -0.8972 0.3145
+vn -0.0522 -0.8398 0.5404
+vn -0.6281 -0.4563 0.6303
+vn 0.7555 0.1332 -0.6415
+vn 0.8039 0.5033 0.3168
+vn -0.4598 0.6329 0.6229
+vn 0.1727 0.7215 0.6705
+vn -0.0552 0.4703 0.8808
+vn -0.2552 0.3513 0.9008
+vn 0.4574 -0.6296 -0.6280
+vn -0.4476 -0.8353 0.3191
+vn -0.4054 -0.8569 0.3185
+vn -0.4141 -0.8526 0.3187
+vn 0.0720 0.0518 0.9961
+vn 0.0862 -0.1309 0.9876
+vn 0.0234 -0.1045 0.9943
+vn -0.4585 -0.8295 0.3188
+vn -0.3546 -0.8797 0.3168
+vn 0.8019 -0.4486 0.3946
+vn 0.8398 -0.0522 0.5404
+vn -0.1163 0.8029 0.5847
+vn -0.1360 0.9389 -0.3163
+vn -0.8352 0.4499 -0.3162
+vn -0.4774 0.2572 0.8402
+vn -0.7142 0.3848 0.5847
+vn -0.8161 0.4854 -0.3137
+vn -0.4629 0.2753 0.8425
+vn -0.8176 0.4852 -0.3099
+vn 0.7995 -0.1375 0.5847
+vn 0.9349 -0.1608 -0.3163
+vn 0.8581 0.4050 -0.3157
+vn 0.7335 0.3462 0.5849
+vn 0.8138 0.0041 0.5811
+vn 0.5435 0.5628 0.6229
+vn 0.1332 -0.7555 -0.6415
+vn 0.6296 0.4574 -0.6280
+vn 0.5421 0.5614 -0.6253
+vn -0.4563 -0.6281 0.6303
+vn 0.5427 -0.1055 0.8333
+vn 0.2826 0.4810 0.8299
+vn 0.4091 -0.2628 0.8738
+vn 0.3645 -0.6855 0.6303
+vn 0.2018 -0.3796 0.9029
+vn -0.3664 0.6891 -0.6253
+vn 0.3653 -0.6871 -0.6280
+vn 0.6871 0.3653 -0.6280
+vn 0.0000 -0.7764 0.6303
+vn 0.6068 0.7277 0.3197
+vn 0.6099 0.7273 0.3148
+vn 0.6083 0.7263 0.3201
+vn 0.6112 0.7258 0.3156
+vn 0.6081 0.7284 0.3156
+vn 0.6092 0.7255 0.3202
+vn 0.0630 -0.0338 0.9974
+vn -0.1027 0.0085 0.9947
+vn 0.1090 0.1627 0.9806
+vn -0.5926 0.7408 0.3162
+vn 0.1342 -0.4130 0.9008
+vn 0.2418 -0.7440 0.6229
+vn -0.0978 -0.4987 0.8612
+vn -0.9209 -0.2299 0.3148
+vn 0.3366 -0.8877 0.3141
+vn 0.3310 -0.8894 0.3153
+vn 0.3348 -0.8876 0.3163
+vn 0.3375 -0.8876 0.3136
+vn 0.5211 0.6220 0.5844
+vn 0.6091 0.7271 -0.3169
+vn -0.1217 0.5358 0.8355
+vn -0.2101 0.9250 -0.3166
+vn -0.1797 0.7912 0.5845
+vn -0.1168 0.4684 0.8758
+vn 0.5805 0.7553 0.3043
+vn -0.2283 0.9158 -0.3303
+vn -0.2633 0.9110 -0.3174
+vn 0.4829 0.8174 -0.3142
+vn 0.5202 0.7936 -0.3156
+vn 0.5202 0.7935 -0.3158
+vn 0.4446 0.6783 0.5850
+vn 0.1705 -0.4407 -0.8813
+vn 0.4813 0.8181 -0.3147
+vn 0.8629 0.3177 0.3930
+vn -0.1631 -0.9050 0.3930
+vn -0.6293 -0.6516 0.4235
+vn 0.2282 -0.7956 0.5612
+vn 0.3673 -0.6908 0.6229
+vn 0.5864 0.6382 0.4988
+vn 0.4587 0.6314 -0.6252
+vn -0.4574 -0.6296 -0.6280
+vn 0.2281 -0.9208 0.3165
+vn 0.2302 -0.9201 0.3168
+vn 0.2300 -0.9218 0.3120
+vn 0.2301 -0.9209 0.3146
+vn -0.2418 0.7440 0.6229
+vn 0.0978 0.4987 0.8612
+vn -0.1342 0.4130 0.9008
+vn 0.3350 0.7860 0.5196
+vn 0.8922 0.1573 0.4234
+vn -0.8629 -0.3177 0.3930
+vn -0.8231 0.0865 0.5612
+vn -0.2189 0.0000 0.9758
+vn -0.8532 -0.4126 0.3190
+vn -0.8552 -0.4089 0.3186
+vn -0.3673 0.6908 0.6229
+vn -0.2635 0.9124 -0.3132
+vn -0.2098 0.9257 -0.3148
+vn -0.2305 0.9245 -0.3035
+vn -0.1288 0.9390 0.3190
+vn -0.1246 0.9397 0.3186
+vn -0.1729 0.9309 0.3218
+vn -0.1635 0.9351 0.3144
+vn -0.6994 0.3411 -0.6280
+vn -0.0659 -0.9470 -0.3145
+vn -0.0266 -0.9513 -0.3070
+vn 0.8797 -0.3546 0.3168
+vn 0.7860 -0.3350 0.5196
+vn 0.1573 -0.8922 0.4234
+vn -0.0000 0.7671 -0.6415
+vn 0.3129 -0.3835 0.8689
+vn 0.4797 -0.2782 0.8322
+vn 0.1348 -0.7646 0.6303
+vn -0.1355 0.7686 -0.6253
+vn 0.5267 0.6883 0.4988
+vn -0.7401 0.2405 -0.6280
+vn 0.6994 -0.3411 -0.6280
+vn 0.7118 0.5811 0.3946
+vn 0.8180 0.1973 0.5404
+vn 0.2800 0.8616 0.4234
+vn 0.2299 -0.9209 0.3149
+vn 0.2290 -0.9193 0.3202
+vn 0.2320 -0.9187 0.3197
+vn 0.2300 -0.9190 0.3201
+vn 0.2279 -0.9212 0.3153
+vn 0.2314 -0.9214 0.3123
+vn -0.2281 0.9208 0.3165
+vn -0.2302 0.9201 0.3168
+vn -0.2300 0.9218 0.3120
+vn -0.2282 0.9202 0.3180
+vn -0.2509 -0.9149 0.3163
+vn -0.7440 0.2418 0.6229
+vn -0.3328 0.3606 0.8713
+vn 0.3421 0.7014 -0.6253
+vn -0.7804 0.0000 -0.6253
+vn -0.0659 -0.9469 0.3148
+vn -0.0663 -0.9450 0.3203
+vn -0.0633 -0.9455 0.3195
+vn -0.0649 -0.9455 0.3192
+vn -0.0659 -0.9466 0.3156
+vn -0.5214 -0.7926 0.3163
+vn -0.0094 -0.0765 0.9970
+vn -0.0094 -0.0764 0.9970
+vn 0.9225 0.2174 0.3190
+vn 0.9230 0.2206 0.3154
+vn 0.9208 0.2247 0.3187
+vn 0.9228 0.2191 0.3169
+vn 0.9228 0.2201 0.3161
+vn 0.9225 0.2191 0.3178
+vn 0.9231 0.2189 0.3163
+vn 0.9232 0.2171 0.3172
+vn 0.9223 0.2201 0.3178
+vn 0.9239 0.2165 0.3156
+vn 0.9214 0.2182 0.3215
+vn 0.5942 -0.7399 -0.3154
+vn 0.7300 -0.3574 0.5825
+vn 0.5078 -0.6323 0.5851
+vn 0.5056 -0.6295 0.5900
+vn 0.9463 -0.0149 -0.3230
+vn 0.8095 -0.0559 0.5845
+vn 0.9462 -0.0654 -0.3169
+vn 0.6429 0.6996 0.3119
+vn -0.8581 -0.4050 -0.3157
+vn -0.7335 -0.3462 0.5849
+vn -0.8138 -0.0041 0.5811
+vn 0.4782 -0.2230 0.8495
+vn -0.4091 0.2628 0.8738
+vn -0.3645 0.6855 0.6303
+vn -0.2018 0.3796 0.9029
+vn -0.2405 -0.7401 -0.6280
+vn 0.4234 0.3611 0.8309
+vn -0.5421 -0.5614 -0.6253
+vn 0.3513 0.2552 0.9008
+vn 0.6329 0.4598 0.6229
+vn 0.7215 -0.1727 0.6705
+vn 0.4703 0.0552 0.8808
+vn 0.2399 -0.7384 0.6303
+vn 0.0000 0.7823 0.6229
+vn 0.2438 0.4359 0.8663
+vn -0.0000 0.4342 0.9008
+vn 0.0269 -0.4684 0.8831
+vn -0.1497 -0.1394 0.9789
+vn -0.3403 -0.6978 0.6303
+vn -0.8922 -0.1573 0.4234
+vn -0.3350 -0.7860 0.5196
+vn -0.4651 0.8292 -0.3102
+vn -0.5140 0.7976 -0.3155
+vn 0.7422 -0.2412 -0.6253
+vn 0.8231 -0.0865 0.5612
+vn -0.8353 0.4476 0.3191
+vn 0.0518 -0.0720 0.9961
+vn -0.1309 -0.0862 0.9876
+vn 0.1163 -0.8029 0.5847
+vn 0.1360 -0.9389 -0.3163
+vn 0.1089 0.7747 0.6229
+vn 0.1086 0.7728 -0.6253
+vn 0.4834 0.7806 0.3961
+vn -0.0000 0.9059 0.4234
+vn 0.7159 0.4664 0.5196
+vn -0.7343 -0.5142 0.4431
+vn -0.6339 -0.6339 0.4431
+vn -0.5142 -0.7343 0.4431
+vn -0.3789 -0.8125 0.4431
+vn 0.5142 -0.7343 0.4431
+vn 0.6339 -0.6339 0.4431
+vn 0.7343 -0.5142 0.4431
+vn 0.8125 -0.3789 0.4431
+vn 0.7343 0.5142 0.4431
+vn 0.6339 0.6339 0.4431
+vn 0.5142 0.7343 0.4432
+vn 0.5142 0.7343 0.4431
+vn 0.3789 0.8125 0.4431
+vn -0.5142 0.7343 0.4432
+vn -0.6339 0.6339 0.4432
+vn -0.6339 0.6339 0.4431
+vn -0.7343 0.5142 0.4431
+vn -0.8125 0.3789 0.4431
+s off
+f 2145//600 2144//600 2391//600 1457//600
+f 2889//601 2655//601 2145//601 1457//601 2393//601
+f 1467//602 2296//602 2243//602 2241//602
+f 2244//603 2296//603 1467//603 3019//603 2754//603
+f 3020//604 1481//604 2418//604 2135//604 2649//604
+f 2919//605 2418//605 1481//605 2137//605 2638//605 3023//605
+f 2437//606 2439//606 1493//606 2511//606 2436//606
+f 2434//607 2511//607 1493//607 2440//607 2435//607
+f 3021//608 1510//608 2084//608 2085//608 2918//608
+f 2589//609 2084//609 1510//609 2411//609 2908//609 3024//609
+f 2431//610 1523//610 2225//610 2226//610
+f 2224//611 2225//611 1523//611 2433//611
+f 3025//612 3022//612 1540//612 2304//612
+f 3026//613 2820//613 2304//613 1540//613 2497//613 2984//613
+f 2478//614 2479//614 1554//614 2133//614 2132//614
+f 2131//615 2133//615 1554//615 2480//615 2477//615
+f 2654//616 2145//616 2771//616 2773//616
+f 2661//617 2662//617 2630//617 2631//617 2883//617 2887//617 2885//617
+f 2659//618 2566//618 2565//618 2570//618 2790//618
+f 1045//616 2561//616 2560//616 2660//616
+f 2889//619 2772//619 2771//619 2145//619 2655//619
+f 2562//620 2563//620 1045//620 2660//620
+f 2790//619 2569//619 2567//619 2568//619 2659//619
+f 2884//621 2629//621 2630//621 2662//621 2663//621 2886//621 2888//621
+f 2563//622 2564//622 1045//622
+f 2700//623 2701//623 2696//623 2694//623 2698//623
+f 2652//621 2993//621 2618//621 2617//621 2651//621
+f 2993//624 2653//624 2650//624 2616//624 2618//624
+f 2700//624 2699//624 2695//624 2697//624 2701//624
+f 2855//624 2858//624 2764//624 2763//624 2737//624 2738//624 2851//624
+f 2854//624 2669//624 2668//624 2769//624 2768//624
+f 2853//625 2770//625 2769//625 2668//625 2667//625
+f 2852//625 2736//625 2737//625 2763//625 2762//625 2857//625 2856//625
+f 2800//625 2576//625 2577//625 2758//625 2759//625 2756//625 2752//625 2819//625
+f 2777//626 1049//626 2584//626 2580//626 2581//626
+f 3019//627 2753//627 2755//627 2760//627 2757//627 2575//627 2574//627 2800//627 2819//627 2244//627 2754//627
+f 2579//628 2582//628 1049//628 2777//628 2578//628
+f 2582//629 2583//629 1049//629
+f 2867//630 2840//630 2841//630 2844//630 2843//630
+f 3018//630 2874//630 2873//630 2870//630 2848//630 2847//630
+f 2891//631 2892//631 3006//631 2621//631 2620//631 2552//631 2551//631
+f 3018//632 2847//632 2846//632 2869//632 2871//632 2872//632
+f 2868//632 2845//632 2844//632 2841//632 2842//632
+f 2920//633 1040//633 2904//633 2906//633
+f 2899//634 2907//634 2766//634 2767//634 2898//634
+f 3020//634 2649//634 2648//634 2418//634 3015//634 2639//634 2647//634
+f 2894//634 2728//634 2642//634 2641//634 2646//634
+f 2904//635 1040//635 2903//635
+f 2891//636 2551//636 2553//636 2619//636 2622//636 3005//636 2890//636
+f 2956//637 2958//637 2781//637 2780//637 2782//637
+f 2953//637 2963//637 2623//637 2624//637 2954//637
+f 1040//638 2920//638 2905//638 2902//638
+f 2901//637 2900//637 2765//637 2766//637 2907//637
+f 2894//637 2645//637 2644//637 2643//637 2728//637
+f 3023//638 2638//638 2640//638 3015//638 2418//638 2919//638
+f 2761//639 2849//639 2686//639 2681//639 2682//639
+f 2893//639 2680//639 2679//639 2688//639 2690//639 2676//639 2675//639
+f 2955//639 2954//639 2624//639 2625//639 2962//639
+f 2956//639 2783//639 2779//639 2778//639 2958//639
+f 2795//640 2796//640 2948//640 2947//640 2940//640 2937//640 2933//640 2934//640 2997//640
+f 2943//640 2999//640 1032//640 2931//640 2932//640 2942//640
+f 2761//640 2684//640 2683//640 2685//640 2849//640
+f 2893//640 2675//640 2674//640 2689//640 2687//640 2678//640 2677//640
+f 2931//640 1032//640 2930//640
+f 2861//641 3013//641 2744//641 2745//641 2743//641
+f 2749//641 2636//641 2637//641 2657//641 2658//641 2751//641
+f 2997//641 2936//641 2935//641 2938//641 2939//641 2945//641 2946//641 2949//641 2794//641 2795//641
+f 2929//642 2928//642 1032//642 2999//642 2944//642 2941//642
+f 2692//643 2691//643 2825//643 2672//643 2671//643 2979//643 2980//643
+f 2861//644 2742//644 2747//644 2746//644 3013//644
+f 2750//645 2656//645 2657//645 2637//645 2635//645 2748//645
+f 2980//646 2981//646 2670//646 2673//646 2824//646 2693//646 2692//646
+f 2882//647 1029//647 2881//647
+f 2862//648 2863//648 1029//648 2882//648
+f 2876//649 2995//649 2627//649 2626//649 2875//649
+f 3021//650 2918//650 2588//650 2084//650 3010//650 2909//650 2917//650
+f 3014//650 2996//650 2912//650 2911//650 2916//650
+f 1029//651 2863//651 2864//651 2879//651
+f 2878//652 2877//652 2628//652 2627//652 2995//652
+f 3014//653 2915//653 2914//653 2913//653 2996//653
+f 3024//653 2908//653 2910//653 3010//653 2084//653 2589//653
+f 2879//654 2880//654 1029//654
+f 2964//655 2978//655 2829//655 2828//655 2830//655
+f 2834//652 2998//652 2586//652 2587//652 2833//652
+f 2835//656 2832//656 2585//656 2586//656 2998//656
+f 2964//657 2831//657 2827//657 2826//657 2978//657
+f 2921//656 2714//656 2715//656 2726//656 2718//656 2719//656 2960//656
+f 2959//657 2961//657 2723//657 2722//657 2725//657 2711//657 2710//657
+f 2991//658 1023//658 2990//658
+f 2716//659 2727//659 2713//659 2712//659 2921//659 2960//659 2717//659
+f 2961//659 2959//659 2709//659 2708//659 2724//659 2721//659 2720//659
+f 2571//660 2572//660 1023//660 2991//660 2989//660
+f 2735//661 2896//661 2895//661 2923//661 2927//661 2924//661 2734//661
+f 2865//662 2733//662 2611//662 2612//662 2605//662 2608//662
+f 2866//662 2601//662 2602//662 2599//662 3011//662
+f 2988//663 2992//663 1023//663 2572//663 2573//663
+f 2896//664 2735//664 2224//664 2925//664 2926//664 2922//664 2897//664
+f 2559//665 2554//665 2557//665 2732//665 2729//665 2850//665 2801//665
+f 2733//666 2865//666 2607//666 2606//666 2609//666 2610//666
+f 3011//666 2600//666 2603//666 2604//666 2866//666
+f 2304//667 2994//667 2982//667 2987//667 3022//667 3025//667
+f 2821//667 2823//667 2803//667 2802//667 3000//667
+f 2950//668 2951//668 1025//668 3003//668
+f 2799//667 2798//667 2792//667 2793//667 2985//667
+f 3003//669 1025//669 3002//669
+f 2850//670 2730//670 2731//670 2556//670 2555//670 2558//670 2801//670
+f 3007//671 3009//671 2776//671 2774//671 3016//671
+f 2838//671 2859//671 2740//671 2741//671 2837//671
+f 3026//671 2984//671 2983//671 2994//671 2304//671 2820//671
+f 3004//672 1025//672 2951//672 2952//672
+f 2822//671 3001//671 2804//671 2803//671 2823//671
+f 2986//671 2791//671 2792//671 2798//671 2797//671
+f 2810//673 2860//673 2706//673 2705//673 2806//673 2809//673
+f 2957//673 2813//673 2811//673 2817//673 2815//673 2702//673 2704//673
+f 2859//673 2839//673 2836//673 2739//673 2740//673
+f 3009//673 3008//673 3017//673 2775//673 2776//673
+f 2974//674 2591//674 2592//674 1037//674 2969//674 2973//674 2976//674
+f 2965//674 2633//674 2634//674 3012//674 2968//674
+f 2807//674 2805//674 2707//674 2706//674 2860//674 2808//674
+f 2957//674 2704//674 2703//674 2816//674 2818//674 2812//674 2814//674
+f 2969//674 1037//674 2970//674
+f 2784//675 2664//675 2665//675 2597//675 2596//675
+f 2786//675 2595//675 2594//675 2614//675 2615//675 2789//675
+f 2971//676 2972//676 1037//676 2592//676 2590//676 2975//676 2977//676
+f 3012//675 2634//675 2632//675 2966//675 2967//675
+f 2613//677 2614//677 2594//677 2593//677 2787//677 2788//677
+f 2785//678 2598//678 2597//678 2665//678 2666//678
+s 1
+f 1547//679 1542//680 1541//681 1546//682 1595//682 1599//683 1587//682 1593//684 1592//682
+f 2552//685 1591//685 1587//685 1599//685 1627//685 2553//685 2551//685
+f 2060//686 1026//687 1020//687 2059//688
+f 2059//688 1020//689 1024//689 1028//689 2062//690 2061//691 2063//692
+f 1225//693 1226//693 1223//693 1222//693 1295//693 3027//693 1294//693 1278//693 1286//693 1287//693
+f 2555//694 2556//694 1518//694 2558//694
+f 1572//695 1567//695 1517//695 1516//695 2557//695 2554//695 2559//695 1519//695 1564//695 1577//695 1533//695
+f 1346//696 1347//696 1349//697 1350//698 1354//696 1351//699 1353//700 1348//696 1345//696 3028//696
+f 1671//701 1666//702 1622//701 1621//701 1623//703 1624//701 1663//704 1676//701 1637//705
+f 2064//706 2065//707 1027//708 1021//708 1026//708 2060//686
+f 1550//709 1549//709 1548//709 2066//710 2067//711 2068//712 1579//709 1581//709 1582//709 1584//709 1583//709
+f 2563//713 2562//713 1205//713 2564//713
+f 1159//714 1134//714 1126//714 1155//714 2070//715 2069//716 2071//716 2073//716 2072//717 1177//714 1156//714 1157//714 1158//714 2570//714 2565//714 2566//714 1164//714 2560//714 2561//714 1181//714
+f 2569//718 1178//718 1210//718 2568//718 2567//718
+f 1064//719 1028//719 1024//719 1069//719 1068//719
+f 2572//720 2571//720 1672//720 1688//720 1654//720 1657//720 1670//720 1673//720 2573//720
+f 1061//721 1055//721 1043//721 1034//721 1062//721
+f 1035//722 1065//722 1062//722 1034//722 1033//722
+f 1107//723 1106//723 1094//723 1092//723
+f 1065//708 1035//708 1022//708 1030//708
+f 1446//724 1445//724 3029//724 1469//724 1464//724
+f 1248//725 1217//725 1219//725 1265//725 3030//725
+f 1841//726 1891//726 1898//726 1881//726
+f 1053//727 1044//727 1021//727 1027//727
+f 2075//728 2074//729 1068//730 1069//730 1075//730 2077//731 2076//732
+f 1891//733 1847//733 1876//733 1898//733
+f 1039//734 1041//734 1056//734 1063//734
+f 1042//735 1054//735 1058//735 1057//735 1078//735 1036//735
+f 1051//736 1054//736 1042//736 1048//736 1047//736 1052//736
+f 1739//737 1779//737 1768//737 1737//737
+f 1440//738 2574//738 2575//738
+f 2577//739 2576//739 1419//739 1420//739 1423//739 2581//739 2580//739 2584//739 1422//739 1421//739 1393//739 1418//739 2080//740 2079//741 2081//741 2078//742
+f 2583//743 2582//743 2579//743 2578//743 1442//743 1476//743
+f 1624//744 1623//744 1611//744 1609//744
+f 2586//745 2585//745 1817//745 1813//745 1857//745 1866//745 2587//745
+f 2083//746 1963//687 1952//687 2082//747
+f 2588//748 2085//748 2084//748
+f 1200//725 1188//725 1190//725 1199//725
+f 2591//749 1152//749 1163//749 1135//749 1138//749 1150//749 2590//749 2592//749
+f 1077//750 1082//750 1071//750 1073//750
+f 1828//751 1794//751 1789//751 1791//751
+f 1088//722 1084//722 1039//722 1063//722
+f 1057//752 2593//752 2594//752 2595//752 1089//752 1090//752 1091//752 1078//752
+f 2598//753 1052//753 1047//753 1090//753 1089//753 2596//753 2597//753
+f 2007//754 2009//755 2010//754 2008//756 2040//754 2038//757 2033//758 2052//759 2051//754
+f 1235//760 1236//761 1237//760 1239//762 1240//763 1244//760 1241//764 1243//765 1238//760
+f 2086//766 2088//767 1196//768 1198//768 1199//768 1197//768 1249//768 1255//768 1218//768 2087//769
+f 2089//770 1568//771 1569//772 2604//772 2603//772 2600//772 2090//773 2091//774 2092//774
+f 1623//775 1621//775 1620//775 2599//775 2602//775 2601//775 1606//775 2608//775 2605//775 2612//775 2611//775
+f 2606//776 2607//776 1573//776 1574//777 1575//778 1625//776 2610//776 2609//776
+f 1079//779 1087//779 1085//779 1070//779 1084//779 1088//779
+f 1533//780 1531//780 1555//780 1572//780
+f 2094//781 2093//782 1122//783 1120//783 1143//783 2095//784
+f 1154//779 1144//779 1145//779 1146//779
+f 2001//779 2002//779 3080//779 3099//779
+f 2003//779 2024//779 3099//779 3080//779
+f 1038//779 3052//779 3081//779
+f 1036//779 1078//779 1091//779 1096//779 1108//779 1059//779 1060//779 3081//779 3052//779
+f 1590//785 1588//785 1603//785 3031//785 1626//785
+f 1832//786 1858//787 1857//788 1813//786 1811//786 1814//786 1815//786 1852//786 2096//789 2097//790
+f 1986//791 1997//791 2025//791 1990//791
+f 2614//792 2613//792 1108//792 1096//792 1094//792 1106//792 2615//792
+f 2618//793 2616//793 1268//793 1231//793 1226//793 1269//793 2617//793
+f 2099//794 2098//795 1648//796 1645//796 1678//796 2100//797
+f 2101//798 2103//799 1738//800 1736//800 1765//800 2102//801
+f 1093//802 1095//802 1104//802 1105//802
+f 1721//737 1709//737 1711//737 1720//737
+f 1151//803 1147//804 1105//803 1104//803 1106//803 1107//805 1144//803 1154//803 1123//806
+f 2105//807 2104//808 1651//809 1628//809 1629//809 1632//809 1653//809 1682//809 1631//809 1630//809 2622//809 2619//809 1627//809 2107//810 2106//811 2108//811
+f 1602//812 2620//812 2621//812
+f 1114//813 1115//814 1112//815 1109//815 3032//815 1110//815 1111//815 1113//815 1116//815
+f 1459//816 1448//816 1401//816 1413//816
+f 1110//779 3032//779 3034//779
+f 1109//779 1086//779 1072//779 1071//779 1082//779 1124//779 1125//779 3034//779 3032//779
+f 1184//726 1182//726 1183//726 1185//726 3033//726 1163//726 1152//726
+f 2110//817 2109//818 1116//819 1113//819 1127//819 1126//819 2111//820
+f 1649//821 1644//821 1680//821 1679//821
+f 1134//822 1130//822 1111//822 1110//822 3034//822 1125//822
+f 1749//823 1700//823 1728//823 1753//823 1744//823
+f 1744//824 1740//824 1741//824 1743//824 1746//825 1747//826 1750//824 1748//827 1749//828
+f 2053//736 2017//736 2012//736 2040//736
+f 1144//829 1107//829 1092//829 1145//829
+f 2113//830 2114//831 1198//832 1193//832 1195//832 2112//833
+f 1105//829 1147//829 1139//829 1093//829
+f 2117//834 2115//835 2048//736 2014//736 2016//736 2116//836
+f 1097//837 1139//837 1147//837 1102//837
+f 2118//838 2119//839 2111//820 1126//840 1134//840 1125//840 1124//840 1119//840 1118//840 1117//840
+f 1359//841 1362//841 1348//841 1353//841 1352//841 1360//841
+f 1246//842 1202//842 1187//842 1247//842 3035//842
+f 2624//843 2623//843 1781//843 1747//843 1752//843 1780//843 2625//843
+f 2095//784 1143//687 2120//844
+f 1911//845 1909//845 1921//845 1923//845 3036//845
+f 2121//846 1494//687 1543//687 1545//687 2122//847
+f 1938//848 1970//848 1958//848 1936//848
+f 2627//849 2628//849 1921//849 1909//849 1907//849 1922//849 2626//849
+f 1882//850 1878//850 1877//850 1881//850 1898//850 1930//850 1886//850 1925//850 3037//850 1901//850
+f 2125//851 2070//715 1155//852 1133//852 1166//852 2124//853 2123//854
+f 2126//855 1662//687 2128//856 2127//857
+f 3071//779 3068//779 1552//779 3086//779 3070//779
+f 1553//779 3068//779 3071//779
+f 1589//779 3073//779 3097//779 1613//779 1625//779 1575//779 1576//779 3070//779 3086//779
+f 1608//779 3097//779 3073//779
+f 1539//858 1541//859 1537//860 1536//861 1604//862 1603//859 1588//863 1594//864 1595//859
+f 1324//865 1350//698 1349//697 1305//865 1303//865 1306//865 1307//865 1344//865 2129//866 2130//867
+f 1700//868 1749//828 1748//827 1699//869 1698//870 1694//870 1693//871 1695//872 1696//873 1697//874
+f 2629//852 1178//852 1170//852 1132//852 1156//852 1177//852 2631//852 2630//852
+f 1695//875 1693//875 1730//875 1732//875 3038//875
+f 2634//876 2633//876 2132//876 2133//876 2131//876 2632//876
+f 2112//833 1195//687 2134//877
+f 2637//802 2636//802 2027//802 1996//802 1995//802 2031//802 2030//802 2635//802
+f 1092//878 1094//879 1095//878 1093//880 1139//878 1137//881 1121//882 1146//883 1145//878
+f 1530//884 1558//885 1557//886 1508//887 1506//887 1509//888 1511//887 1551//887 1563//887
+f 1451//889 1452//890 1450//891 1512//892 1509//893 1506//893 1505//893 1507//894 1502//893 1501//893
+f 2137//895 2138//896 2640//897 2638//897
+f 2647//898 2639//899 1690//899 2646//899 2641//899 2642//899 1679//899 1680//899 1678//899 1677//899 2136//900 2139//901
+f 2645//902 1726//902 1701//902 2643//902 2644//902
+f 2648//903 2649//903 2135//903
+f 1076//904 1115//814 1114//813 1075//905 1069//906 1073//907 1071//908 1072//907 1074//907
+f 1950//909 1947//910 1946//911 1949//909 1993//909 1997//909 1986//909 2141//912 2140//913 1991//909
+f 2651//914 2617//914 1269//914 1267//914 2652//914
+f 2650//915 2653//915 1266//915 2142//916 2143//917 1281//915 1317//915 1293//915 1268//915 2616//915
+f 2124//853 1166//687 1167//687 2146//918
+f 2654//687 2144//687 2145//687
+f 1994//919 1992//919 2028//919 2658//919 2657//919 2656//919 2029//919 3039//919
+f 1241//687 1244//687 2148//920 2147//921
+f 1207//922 1208//922 1176//922 1173//922 1209//922
+f 1211//923 1209//923 1173//923 1172//923 3040//923 1215//923 1214//923
+f 1234//924 1194//924 1196//924 2088//767 2151//925 2149//926 2150//927
+f 2659//928 2568//928 1210//928 1169//928 1162//928 1164//928 2566//928
+f 2560//929 1164//929 1162//929 1179//929 3041//929 1205//929 2562//929 2660//929
+f 1474//930 1473//930 1438//930 1435//930
+f 3061//779 3042//779 1203//779 3053//779 3033//779 1185//779
+f 3060//779 3043//779 3042//779 3061//779
+f 1191//779 3043//779 3060//779
+f 1204//779 3085//779 3069//779 1135//779 1163//779 3033//779 3053//779
+f 2970//779 1037//779 2972//779 1153//779 1136//779 3069//779 3085//779
+f 2661//931 1165//931 1160//931 1174//931 1206//931 2663//931 2662//931
+f 2154//932 2153//933 1888//934 1848//934 1843//935 1842//936 1847//934 1891//934 1895//934 1883//934 1889//934 2152//937 2155//938
+f 1196//939 1194//939 1193//939 1198//939
+f 2046//689 2039//689 2043//689 1999//689 2026//689 2045//689
+f 2157//940 2158//941 1750//942 1747//942 1781//942 2159//943 2156//944
+f 3043//945 1191//945 1189//945 1201//945 1203//945 3042//945
+f 1202//946 1201//946 1189//946 1187//946
+f 1197//947 1199//947 1190//947 1192//947
+f 2665//948 2664//948 1103//948 1098//948 1100//948 2162//949 2161//950 2160//951 2666//948
+f 1345//952 1348//952 1362//952 1365//952 1364//952 1380//952 3044//952
+f 1538//953 1534//953 1535//953 1537//953 1541//681 1542//680 1545//953 1543//954 1544//955
+f 1683//956 1681//956 1641//956 1639//956
+f 1233//745 1224//745 1229//745 1176//745 1208//745
+f 1224//957 1233//957 1214//957 1215//957 3045//957 1220//957
+f 1343//958 1322//958 1323//958 1328//958 1332//958 1342//958 2667//958 2668//958 2669//958
+f 1985//959 1982//959 1981//959 1984//959 2000//959 2028//960 1989//961 2024//962 2003//959
+f 1758//963 1755//963 1756//963 1757//963 1759//964 1760//965 1764//963 1761//966 1763//967
+f 2164//968 2163//969 1968//970 1969//971 2004//971 1973//971 1974//972 1975//973 2023//971 2021//971 2673//971 2670//971 2018//971 2166//974 2165//975 2167//975
+f 2019//976 2671//976 2672//976
+f 1894//725 1893//725 1935//725 1934//725 1931//725 1929//725
+f 1846//977 1843//977 1875//977 2674//977 2675//977 2676//977 2170//978 2171//979 2169//980 2168//981
+f 1192//924 1239//924 1249//924 1197//924
+f 1733//982 1731//982 1734//982 1753//982 1728//982 1727//983 2172//984 2173//985 2159//943 1781//982 1783//982 1784//982 1785//982 3046//982
+f 2686//986 1880//986 1879//986 1851//986 2682//986 2681//986
+f 2688//987 2679//987 2680//987 1849//987 2174//988 2175//989 2170//978 2676//987 2690//987
+f 2683//990 2684//990 1850//990 2677//990 2678//990 2687//990 2689//990 2674//990 1875//990 1877//990 1878//990 2685//990
+f 2176//991 1252//992 1254//993 1297//993 1258//993 1259//994 1261//995 1315//993 1313//993 1311//993 1310//993 2177//996 2178//997 2180//997 2179//998
+f 2182//999 1175//687 1228//687 1230//687 2181//1000
+f 2692//1001 2693//1001 2021//1001 2009//1001 2007//1001 2022//1001 2691//1001
+f 1706//1002 1707//1002 1688//1002 1672//1002 1705//1002
+f 1404//1003 1402//1003 1414//1003 1416//1003 3047//1003 3048//1003
+f 2698//1004 2694//1004 2696//1004 1271//1004 1269//1004
+f 2695//1005 2699//1005 1274//1005 1293//1005 1320//1005 1280//1005 1316//1005 1296//1005 1276//1005 2697//1005
+f 1619//1006 1621//1006 1612//1006 1614//1006
+f 2698//1007 1269//1007 1226//1007 1225//1007 1274//1007 2699//1007 2700//1007
+f 2701//1008 2697//1008 1276//1008 1222//1008 1223//1008 1271//1008 2696//1008
+f 1271//1009 1223//1009 1221//1009 3050//1009 3049//1009 1272//1009
+f 1172//779 1171//779 3075//779 3040//779
+f 1213//779 3098//779 3049//779 3050//779 3076//779 1212//779
+f 1272//779 3049//779 3098//779
+f 3055//779 3045//779 1215//779 3040//779 3075//779 3076//779 3050//779 1221//779
+f 3055//779 1220//779 3045//779
+f 1609//1010 1664//1010 1663//1010 1624//1010
+f 1296//1011 1295//1011 1222//1011 1276//1011
+f 2184//1012 2148//920 1244//1013 1240//1013 1255//1013 2703//1013 2704//1013 2702//1013 2183//1014 2185//1015
+f 1255//1016 1240//1016 1216//1016 1218//1016
+f 2707//1017 1257//1017 1237//1017 1236//1017 3051//1017 1264//1017 2705//1017 2706//1017
+f 1980//1018 1949//1018 1946//1018 1981//1018
+f 1731//1019 1729//1019 1697//1019 1696//1019 1735//1019 1734//1019
+f 1265//779 1246//779 3035//779 3030//779
+f 1247//779 1248//779 3030//779 3035//779
+f 1504//1020 1506//1020 1516//1020 1517//1020
+f 1126//1021 1127//1021 1133//1021 1155//1021
+f 1285//687 2187//1022 2186//1023
+f 1300//1024 1302//1025 1303//1024 1301//1026 1349//1024 1347//1024 1325//1024 1357//1024 1356//1024
+f 1999//1027 2043//1028 2042//1029 1998//1030 1997//1031 1993//1031 1992//1031 1994//1031 1995//1031 1996//1032
+f 2714//1033 1778//1033 1777//1034 1776//1035 2719//1033 2718//1033 2726//1033 2715//1033
+f 2716//1036 2717//1036 1773//1036 2720//1036 2721//1036 2724//1036 2708//1036 2709//1036 1772//1036 1769//1036 1774//1036 2712//1036 2713//1036 2727//1036
+f 2725//1037 2722//1037 2723//1037 1770//1038 2188//1039 2189//1040 2190//1041 2710//1037 2711//1037
+f 2191//1042 1411//1043 1406//1043 1408//1043 2194//1044 2193//1045 2192//1046
+f 2195//1047 1659//1048 1669//1048 2197//1049 2198//1050 2196//1051
+f 2643//1052 1701//1052 1694//1052 1649//1052 1679//1052 2642//1052 2728//1052
+f 1279//1053 1258//1053 1297//1053 1298//1053 1299//1053
+f 1038//1054 1041//1054 1039//1054 1084//1054 1070//1054 1033//1054 1034//1054 1043//1055 1044//1056 1050//1054 1046//1057 1048//1058 1042//1054 1036//1054 3052//1054
+f 2201//1059 2200//1060 2199//1061 1291//1062 1287//1062 1286//1062 1288//1062 1289//1062 1290//1062 1292//1062 1337//1063 1336//1064 2202//1065
+f 1636//1066 2203//1067 2204//1068 1618//1066 1620//1069 1621//1066 1619//1066 1666//1066 1669//1070
+f 2206//1071 2207//1072 1186//1073 1182//1074 1184//1075 1204//1076 3053//1074 1203//1074 1201//1074 1199//1074 1198//1074 2114//831 2205//1071 2208//1071
+f 1515//1077 2731//1077 2730//1077
+f 2209//1078 2211//1079 1513//1080 2729//1080 2732//1080 1516//1080 1514//1080 1567//1080 1570//1080 1532//1080 2210//1081
+f 1102//783 1104//783 1095//783 1097//783
+f 1339//1082 1334//1082 1372//1082 1371//1082
+f 2187//1022 1285//793 1277//793 1281//793 2143//917 2212//1083 2213//1084
+f 1444//1085 1447//1085 1463//1085 1466//1085 1465//1085 1483//1085
+f 1292//1086 1290//1086 1319//1086 1318//1086
+f 1321//779 1374//779 1375//779 3056//779 3064//779
+f 1329//779 1328//779 1323//779 1289//779 1288//779 3064//779 3056//779
+f 1280//1087 1320//1087 1286//1087 1278//1087
+f 1294//779 3027//779 3100//779
+f 3027//779 1295//779 1296//779 1316//779 3100//779
+f 1625//1088 1613//1088 1611//1088 1623//1088 2611//1088 2733//1088 2610//1088
+f 2214//1089 2215//1090 2044//1091 2041//1091 2054//1091 2216//1092 2217//1093
+f 2220//1094 2219//1095 1383//1096 1340//1096 1335//1097 1334//1098 1339//1096 1386//1096 1390//1096 1378//1096 1384//1096 2218//1099 2221//1100
+f 1310//1101 1308//1101 1307//1101 1306//1101
+f 1719//1102 1717//1102 1715//1102 1714//1102
+f 1304//1103 1302//1103 1313//1103 1315//1103 3054//1103
+f 2222//1104 1716//687 2223//1105
+f 2734//687 2226//687 2225//687 2224//687 2735//687
+f 1971//1106 1956//1106 1961//1106 1960//1106 1969//1106 1968//1106
+f 1309//1107 1311//1107 1303//1107 1305//1107
+f 1847//1108 1842//1108 1877//1108 1876//1108
+f 1369//1109 1370//1109 1335//1109 1340//1109
+f 2227//1110 2118//838 1117//1111 1080//1111 1081//1111 1083//1111 1119//1111 1124//1111 1082//1111 1077//1111 1066//1111 1064//1111 1068//1111 2074//729 2228//1112
+f 1840//1113 1836//1113 1837//1114 1839//1113 1842//936 1843//935 1846//1113 1844//1115 1845//1116
+f 2736//1117 1342//1117 1332//1117 1337//1117 1292//1117 1318//1117 1341//1117 2738//1117 2737//1117
+f 1752//1118 1747//826 1746//825 1751//1118 1795//1118 1799//1118 1788//1118 1793//1118 2229//1119 2230//1120
+f 2032//1121 2041//1122 2040//1123 2012//1121 2010//1121 2013//1124 2014//1125 2048//1126 2049//1121
+f 1221//1127 1223//1127 1226//1128 1227//1129 1230//1127 1228//1130 1229//1131 1224//1127 1220//1127 3055//1127
+f 2008//1132 2010//1132 2019//1132 2020//1132
+f 2231//1133 1344//823 1307//823 1308//823 2232//1134 2233//1135
+f 1357//779 1368//779 1355//779 1356//779
+f 2235//1136 1326//1107 1324//1107 2130//867 2234//1137
+f 2740//823 2739//823 1309//823 1305//823 1349//823 1358//823 2741//823
+f 2028//1138 2000//1138 2025//1138 2743//1138 2745//1138 2744//1138 2027//1138 2636//1138 2749//1138 2751//1138 2658//1138
+f 2742//1139 2238//1140 2237//1141 2239//1141 2236//1142 2045//1139 2026//1139 2746//1139 2747//1139
+f 2030//1143 2047//1143 2056//1143 2029//1143 2656//1143 2750//1143 2748//1143 2635//1143
+f 2755//1144 2753//1145 2240//1146 1472//1144 1474//1144 1475//1144 1477//1144 1476//1144 1442//1144 1441//1144 1440//1144 2575//1144 2757//1144 2760//1144
+f 2078//742 2242//1147 2241//1148 2243//1149 2752//1149 2756//1149 2759//1149 2758//1149 2577//1149
+f 2188//1039 1770//1038 1771//1150 1805//1150 1775//1150 1776//1035 1777//1034 1823//1150 1821//1150 1819//1150 1818//1150 2246//1151 2245//1152 2248//1152 2247//1153
+f 1836//842 1840//842 1850//842 2684//842 2761//842 2682//842 1851//842 1830//842 1831//842
+f 1603//779 1604//779 3072//779 3031//779
+f 1605//779 1626//779 3031//779 3072//779
+f 2249//1154 2251//1155 2250//1156 1361//1157 1358//1157 1363//1157 1367//1157 1366//1158 1365//1159 1362//1157 1359//1160
+f 2253//1161 2255//1162 1338//1163 1335//1163 1370//1163 2762//1163 2763//1163 2764//1163 2252//1164 2254//1165
+f 2766//1166 2765//1166 1730//1166 1693//1166 1687//1166 1689//1166 2767//1166
+f 1373//1167 1377//1167 1330//1167 1331//1167
+f 2770//1168 1373//1168 1331//1168 1329//1168 3056//1168 1375//1168 2768//1168 2769//1168
+f 2231//1133 2129//866 1344//687
+f 2771//1106 2772//1106 2256//1169 2257//1170 2146//918 1167//1106 1160//1106 1165//1106 2773//1106
+f 2775//1171 1327//1171 1325//1171 1347//1171 1363//1171 2774//1171 2776//1171
+f 1928//947 1897//947 1894//947 1929//947 1927//947
+f 1346//779 3028//779 3044//779 1380//779 3059//779 3048//779 3047//779 3088//779
+f 1345//779 3044//779 3028//779
+f 1399//779 1404//779 3048//779 3059//779
+f 1416//779 1366//779 1367//779 3088//779 3047//779
+f 2777//1010 2581//1010 1423//1010 1424//1010 1429//1010 1433//1010 1441//1010 1442//1010 2578//1010
+f 1254//1172 1242//1172 1298//1172 1297//1172
+f 1327//1173 1368//1173 1357//1173 1325//1173
+f 2782//1174 2780//1174 2781//1174 1784//1174 1783//1174
+f 1787//1175 2778//1175 2779//1175 2783//1175 1786//1175 1801//1175 1828//1175 1791//1175 1824//1175 1804//1175
+f 2260//1176 2259//1177 1099//837 1101//837 2258//1178
+f 1841//1179 1842//1179 1839//1179 1838//1180 1900//1179 1899//1179 1884//1179 1890//1181 1891//1179
+f 2263//1182 2264//1183 1896//1184 1895//1184 1891//1184 1890//1184 1892//1184 1893//1184 1894//1184 1897//1184 1948//1185 2261//1186 2262//1182
+f 2266//1187 2265//1188 1460//1189 1461//1190 1500//1190 1465//1190 1466//1191 1468//1192 1520//1190 1518//1190 2556//1190 2731//1190 1515//1190 2267//1193 2268//1194 2269//1194
+f 2732//1195 2557//1195 1516//1195
+f 1055//1196 1053//1196 1027//1196 2065//707 2270//1197 2062//690 1028//1196 1064//1196 1066//1196 1067//1196 1087//1196 1079//1196 1061//1196 1062//1196 1065//1196 1030//1196
+f 1371//1198 1393//1198 1386//1198 1339//1198
+f 2272//1199 2271//1200 1834//1086 1832//1086 2097//790
+f 1394//779 1395//779 3058//779 3062//779
+f 1396//779 1417//779 3062//779 3058//779
+f 1684//1085 1680//1085 1644//1085 1643//1085
+f 1498//1201 1431//1201 1479//1201 1499//1201 3057//1201
+f 1757//1202 1774//1202 1739//1202 1737//1202
+f 1330//1002 1377//1002 1396//1002 3058//1002 1395//1002
+f 3059//1203 1380//1203 1364//1203 1397//1203 1398//1203 1399//1203
+f 1397//1052 1360//1052 1352//1052 1398//1052
+f 1708//1204 1710//1205 1711//1204 1709//1206 1759//1204 1757//1207 1737//1204 1768//1208 1767//1204
+f 3061//1209 1185//1209 1183//1209 1141//1209 1142//1210 2273//1211 2274//1212 2275//1212 2134//877 1195//1209 1193//1209 1190//1209 1189//1209 1191//1209 3060//1209
+f 2276//1213 2278//1214 1382//1215 1418//1215 1393//1215 1371//1215 1372//1215 1370//1215 1369//1215 2277//1216
+f 1377//1217 1373//1218 1372//1218 1376//1218 1393//1218 1421//1219 1381//1218 1417//1218 1396//1218
+f 1063//1220 1056//1220 1060//1220 1059//1221 1058//1222 1054//1220 1051//1223 2279//1224 2281//1225 2280//1226 1053//1220 1055//1220 1061//1220 1079//1220 1088//1220
+f 2279//1224 1051//1223 1052//1227 2598//1227 2785//1227 2666//1227 2160//951 2282//1228 2283//1228
+f 1106//1229 1104//1229 1103//1229 2664//1229 2784//1229 2596//1229 1089//1229 2595//1229 2786//1229 2789//1229 2615//1229
+f 2787//1230 2593//1230 1057//1230 1058//1222 1059//1221 1108//1230 2613//1230 2788//1230
+f 2790//1231 2570//1231 1158//1231 1129//1231 1168//1231 1170//1231 1178//1231 2569//1231
+f 2792//1232 2791//1232 1412//1232 1403//1232 1405//1232 1410//1232 2793//1232
+f 1378//1233 1390//1233 1418//1233 1382//1233
+f 1420//800 1419//800 1392//800 1389//800
+f 1761//687 1764//687 2284//1234 2285//1235
+f 1422//1236 1387//1236 1385//1236 1421//1236
+f 1381//1237 1421//1237 1385//1237 1379//1237
+f 2219//1095 2286//1238 1383//687
+f 1384//687 2287//1239 2218//1099
+f 1417//1240 1381//1240 1379//1240 1394//1240 3062//1240
+f 2287//1239 1384//1082 1378//1082 1382//1082 2278//1214 2288//1241
+f 2290//1242 2289//1243 1245//1244 1216//1244 1240//763 1239//762 1192//1244 1190//1244 1193//1244 1194//1244 1234//1244 2291//1245 2292//1246
+f 1951//837 1944//837 1948//837 1897//837 1928//837 2796//837 2795//837 2794//837
+f 2798//1247 2799//1247 1409//1247 1407//1247 1406//1247 1411//1247 2797//1247
+f 1564//1248 1519//1248 1503//1248 1565//1248
+f 1445//1249 1446//1249 1448//1250 1449//1251 1453//1249 1450//891 1452//890 1447//1249 1444//1249 3063//1249
+f 2800//1252 2574//1252 1440//1252 1441//1252 1433//1252 1437//1252 1392//1252 1419//1252 2576//1252
+f 2801//1253 2558//1253 1518//1253 1505//1253 1503//1253 1519//1253 2559//1253
+f 1430//779 1429//779 1424//779 1388//779 1387//779 1422//779 2584//779 1049//779 2583//779 1476//779 1477//779
+f 1956//1254 1953//1254 1954//1254 1955//1254 1957//1255 1958//1256 1962//1254 1959//1257 1961//1258
+f 1317//1259 1281//1259 1277//1259 1291//1259
+f 2803//1260 2804//1260 1414//1260 1402//1260 1400//1260 1415//1260 2802//1260
+f 1535//1261 1584//1261 1582//1261 1537//1261
+f 1259//994 2810//1262 2809//1262 2806//1262 2705//1262 1264//1262 1261//995
+f 2816//1263 2703//1263 1255//1263 1249//1263 1257//1263 2707//1263 2805//1263 2807//1263 2808//1263 1256//1263 2814//1263 2812//1263 2818//1263
+f 2815//1264 2817//1264 2811//1264 2813//1264 1252//992 2176//991 2293//1265 2183//1014 2702//1264
+f 2295//1266 2294//1267 1391//687
+f 2296//1268 2244//1268 2819//1268 2752//1268 2243//1268
+f 1471//1269 1472//1269 1436//1269 1439//1269
+f 2298//1270 2297//1271 1765//1272 1736//1272 1760//965 1759//964 1713//1272 1711//1272 1714//1272 1715//1272 1754//1272 2299//1273 2300//1274
+f 1288//1275 1286//1275 1320//1275 1321//1275 3064//1275
+f 2301//1276 2302//1277 1050//1278 1044//1278 1053//1278 2280//1226
+f 1972//1279 1955//1279 1954//1279 1976//1279
+f 1432//1280 1475//1280 1479//1280 1431//1280
+f 1077//1281 1073//1281 1031//1281 1067//1281 1066//1281
+f 1454//687 1443//687 2305//1282 2303//1283
+f 1462//1284 1449//1284 1425//1284 1427//1284
+f 1428//1285 1426//1285 1446//1285 1464//1285
+f 1807//1011 1790//1011 1775//1011 1805//1011 1806//1011
+f 2823//1019 2821//1019 1413//1019 1401//1019 1403//1019 1412//1019 2822//1019
+f 1463//821 1447//821 1452//821 1451//821 1461//821 1460//821
+f 2307//1286 2306//1287 1427//1232 1425//1232 1454//1232 2303//1283
+f 1317//1288 1291//1288 2199//1061 2310//1289 2309//1290 2308//1291
+f 2302//1277 2162//949 1100//687 1046//687 1050//687
+f 2021//1292 2693//1292 2824//1292 2673//1292
+f 2035//1293 2055//1293 2053//1293 2020//1293 2019//1293 2672//1293 2825//1293 2691//1293 2022//1293 2050//1293 3066//1293 3065//1293 2058//1293
+f 2312//1294 2311//1295 1471//1296 1439//1296 1486//1296 2313//1297
+f 1808//1298 1810//1299 1811//1298 1809//1300 1857//1298 1855//1301 1833//1302 1865//1303 1864//1298
+f 1047//1304 1048//1058 1046//1057 1100//1305 1098//1306 1095//1306 1094//1306 1096//1307 1091//1306 1090//1306
+f 2830//1308 2828//1308 2829//1308 1870//1308 1866//1308
+f 2827//1309 2831//1309 1820//1309 1819//1309 1821//1309 1822//1309 1863//1309 1873//1309 1835//1309 2826//1309
+f 1496//1296 1488//1296 1438//1296 1473//1296
+f 1355//1310 1314//1310 1300//1310 1356//1310
+f 1434//1201 1488//1201 1496//1201 1478//1201
+f 2313//1297 1486//687 2314//1311 2315//1312
+f 1499//779 1521//779 3079//779 3057//779
+f 1497//779 1498//779 3057//779 3079//779
+f 1134//1313 1159//1313 1128//1313 1130//1313
+f 1502//1314 1483//1314 1465//1314 1500//1314 1501//1314
+f 1609//1315 1611//1316 1612//1315 1610//1317 1658//1315 1656//1318 1635//1319 1665//1320 1664//1315
+f 1601//1321 1647//1322 1646//1323 1600//1324 1599//1325 1595//1325 1594//1325 1596//1325 1597//1325 1598//1326
+f 2271//1200 2316//1327 1816//1328 1818//1328 1819//1328 1817//1328 2585//1328 2832//1328 2835//1328 1834//1328
+f 2587//1329 1866//1329 1868//1329 2834//1329 2833//1329
+f 1980//1330 1981//1330 1979//1330 1978//1330 2317//1331 2318//1332 1990//1333 2025//1334 2000//1330
+f 1745//1335 1746//1336 1743//1337 1742//1338 1803//1339 1802//1336 1789//1340 1794//1341 1795//1336
+f 2319//1342 1341//1343 1318//1343 1319//1343 1322//1343 1343//1343 1374//1343 1321//1343 1320//1343 1293//1343 1317//1343 2308//1291 2320//1344 2322//1344 2321//1345
+f 1293//1346 1287//1346 1231//1346 1268//1346
+f 2837//1347 2741//1347 1358//1347 1361//1347 2838//1347
+f 1326//1348 2235//1136 2232//1134 1308//1348 1310//1348 1311//1348 1309//1348 2739//1348 2836//1348 2839//1348
+f 2325//1349 2324//1350 1480//930 1485//930 2323//1351 2326//1352
+f 1522//1353 1485//1353 1480//1353 1492//1353
+f 1586//1354 1536//1354 1537//1354 1582//1354
+f 2841//1355 2840//1355 1522//1355 1492//1355 1494//1355 2121//846 2328//1356 2327//1357 2842//1355
+f 2330//1358 2329//1359 1617//687 1559//687 1562//687
+f 2845//1006 1524//1006 1495//1006 1491//1006 1525//1006 2843//1006 2844//1006
+f 2848//1360 1525//1360 1491//1360 1490//1360 1529//1360 1528//1360 2846//1360 2847//1360
+f 2685//1361 1878//1361 1839//1361 1837//1361 3067//1361 1880//1361 2686//1361 2849//1361
+f 1445//779 3063//779 3029//779
+f 1520//779 1468//779 1469//779 3029//779 3063//779 1444//779 1483//779 1502//779 1507//779
+f 2850//1362 2729//1362 1513//1362 1511//1362 1509//1362 1515//1362 2730//1362
+f 1738//1363 1772//1363 1760//1363 1736//1363
+f 1506//1364 1508//1364 1514//1364 1516//1364
+f 1122//1365 2093//782 2258//1178 1101//1365 1103//1366 1104//1365 1102//1365 1147//1365 1149//1367
+f 1154//802 1146//802 1121//802 1123//802
+f 2332//1368 2331//1369 1354//1370 1350//1370 1361//1370 2250//1156 2333//1371
+f 1553//1372 1555//1372 1557//886 1558//885 1562//1372 1559//1373 1561//1374 1556//1372 1552//1372 3068//1372
+f 1548//1375 1549//1375 1538//1375 1544//1375 1495//1375 1524//1375
+f 1550//1248 1528//1248 1529//1248 1534//1248 1538//1248 1549//1248
+f 1529//779 1490//779 1489//779 1527//779 1583//779 1584//779 1535//779 1534//779
+f 1136//1376 1137//1376 1139//1377 1140//1378 2336//1379 2335//1380 2334//1381 2273//1211 1142//1210 1138//1376 1135//1376 3069//1376
+f 1322//1382 1319//1382 1290//1382 1289//1382 1323//1382
+f 1816//1383 1815//1383 1814//1383 1818//1383
+f 2141//912 1986//1018 1990//1018 2318//1332 2338//1384 2339//1385 2337//1386
+f 1567//1248 1557//1248 1504//1248 1517//1248
+f 1374//1387 1343//1387 2669//1387 2854//1387 2768//1387 1375//1387
+f 2855//1388 2851//1388 2738//1388 1341//1388 2319//1342 2340//1389 2252//1164 2764//1388 2858//1388
+f 2857//1390 2762//1390 1370//1390 1372//1390 1373//1390 2770//1390 2853//1390 2667//1390 1342//1390 2736//1390 2852//1390 2856//1390
+f 2859//1391 2838//1391 1361//1391 1350//1391 1324//1391 1326//1391 2839//1391
+f 1578//1392 1579//1392 1542//1392 1547//1392
+f 1580//1393 1546//1393 1541//1393 1581//1393
+f 1581//785 1541//785 1539//785 1585//785
+f 2860//1394 2810//1394 1259//1394 1258//1394 1279//1394 1235//1394 1238//1394 1256//1394 2808//1394
+f 1637//1395 1635//1395 1656//1395 1671//1395
+f 2861//1396 2743//1396 2025//1396 1997//1396 1998//1396 2342//1397 2341//1398 2343//1399 2238//1140 2742//1396
+f 2344//1400 1563//687 1551//687 2345//1401
+f 2347//1402 2348//1403 1926//1404 1895//1404 1896//1404 2346//1405
+f 2122//847 1545//1406 1542//1406 1579//1406 2068//712 2349//1407
+f 1436//1408 1472//1408 2240//1146 2351//1409 2352//1410 2350//1411
+f 1532//1412 1570//1412 1558//1412 1530//1412
+f 1555//1413 1553//1413 3071//1413 3070//1413 1576//1413 1572//1413
+f 1727//1232 1728//1232 1700//1232 1697//1232 1729//1232
+f 2353//1414 2210//1081 1532//1364 1530//1364 1563//1364 2344//1400 2354//1415
+f 1564//779 1565//779 1566//779 1577//779
+f 1577//1020 1566//1020 1531//1020 1533//1020
+f 2357//1416 2358//1417 1906//1418 1902//1419 1904//1420 1924//1421 1923//1419 1921//1419 1919//1419 1918//1419 2355//1422 2356//1416 2359//1416
+f 1774//1423 1769//1424 1721//1425 1720//1423 1722//1423 1723//1423 1766//1426 1779//1423 1739//1427
+f 2361//1428 2360//1429 1578//1430 1547//1430 1592//1430 2362//1431
+f 1123//1432 1121//1432 1137//1432 1151//1432
+f 2863//1433 2862//1433 1922//1433 1907//1433 1965//1433 1964//1433 2864//1433
+f 1187//1434 1189//1435 1190//1434 1188//1436 1239//1434 1237//1437 1217//1438 1248//1439 1247//1434
+f 1960//1440 1961//1258 1959//1257 2015//1441 2013//1442 2010//1442 2009//1442 2011//1442 2006//1443 2005//1442
+f 1536//1314 1586//1314 1605//1314 3072//1314 1604//1314
+f 2865//1201 2608//1201 1606//1201 1607//1201 1608//1201 3073//1201 1589//1201 1573//1201 2607//1201
+f 2866//1296 2604//1296 1569//1296 1560//1296 1607//1296 1606//1296 2601//1296
+f 1434//1444 1435//1445 1432//1445 1431//1446 1498//1447 1497//1445 1482//1445 1487//1448 1488//1445
+f 1495//1449 1544//955 1543//954 1494//1450 1492//1451 1488//1451 1487//1452 1489//1453 1490//1454 1491//1455
+f 1031//1456 1073//1456 1069//1457 1024//1456 1020//1458 1026//1456 1021//1459 1044//1056 1043//1055 1022//1456 1035//1456 1033//1460 1070//1461 1085//1456
+f 1930//1462 1898//1462 1926//1462 2348//1403 2363//1463 2366//1463 2364//1463 2365//1464 1927//1465 1929//1462 1931//1462 1933//1462 1932//1462
+f 1473//1466 1474//1466 1472//1467 1471//1466 2311//1295 2323//1351 1485//1466 1522//1468 1496//1466
+f 1526//1469 1496//1469 1522//1469 2840//1469 2867//1469 2843//1469 1525//1469 2848//1469 2870//1469 2873//1469 2874//1469
+f 2842//1470 2327//1357 2367//1471 2368//1471 2066//710 1548//1470 1524//1470 2845//1470 2868//1470
+f 1528//1472 1550//1472 1583//1472 1527//1472 2872//1472 2871//1472 2869//1472 2846//1472
+f 2362//1431 1592//687 1593//687 2369//1473
+f 1274//1011 1225//1011 1287//1011 1293//1011
+f 2369//1473 1593//1393 1587//1393 1591//1393 2371//1474 2370//1475 2372//1476
+f 2373//1477 2107//810 1627//1478 1599//1478 1600//1478 2375//1479 2374//1480
+f 2376//1481 2080//740 1418//1482 1390//1482 1391//1482 2294//1267 2377//1483
+f 1461//1430 1451//1430 1501//1430 1500//1430
+f 1631//1484 1596//1484 1594//1484 1630//1484
+f 1186//733 1148//733 1141//733 1183//733 1182//733
+f 2379//1485 2378//1486 1780//1172 1752//1172 2230//1120
+f 2381//1487 2380//1488 1719//1489 1714//1489 1716//1489 2222//1104
+f 1620//1490 1618//1490 1616//1490 1615//1490
+f 2383//1491 2330//1358 1562//1492 1558//1492 1570//1492 2382//1493
+f 2006//722 1988//722 1973//722 2004//722 2005//722
+f 1621//1360 1622//1360 1610//1360 1612//1360
+f 1796//1494 1794//1494 1828//1494 1829//1494 3074//1494
+f 1023//779 2992//779 1674//779 1675//779 1655//779 1654//779 1688//779 1707//779 1712//779 1724//779 2990//779
+f 1753//1310 1734//1310 1735//1310 1740//1310 1744//1310
+f 2177//996 1310//1495 1306//1495 2386//1496 2385//1497 2384//1498 2387//1499
+f 2267//1193 1515//1500 1509//1500 1512//1500 2390//1501 2389//1502 2388//1503
+f 1791//952 1789//952 1802//952 1824//952
+f 2878//1504 1919//1504 1921//1504 2628//1504 2877//1504
+f 1939//1505 1972//1505 1967//1505 1920//1505 2876//1505 2875//1505 2626//1505 1922//1505 2862//1505 2882//1505 2881//1505 1977//1505
+f 1964//1506 2880//1506 2879//1506 2864//1506
+f 1983//1507 1982//1507 1943//1507 1941//1507
+f 1653//816 1632//816 1633//816 1638//816 1642//816 1652//816
+f 2331//1369 2194//1044 1408//687 1351//687 1354//687
+f 1936//1508 1958//1256 1957//1255 1912//1509 1910//1509 1913//1510 1914//1509 1952//1511 1963//1509
+f 2883//1512 2631//1512 1177//1512 2072//717 2391//1513 2144//1512 2654//1512 2773//1512 1165//1512 2661//1512 2885//1512 2887//1512
+f 2886//1514 2663//1514 1206//1514 2395//1515 2394//1516 2396//1517 1207//1518 1209//1514 1211//1514 1213//1514 1212//1514 1210//1514 1178//1514 2629//1514 2884//1514 2888//1514
+f 2392//1519 2256//1169 2772//1520 2889//1521
+f 2889//1521 2393//1522 2392//1519
+f 2039//1523 2036//1523 2037//1524 2038//1523 2040//1123 2041//1122 2044//1523 2042//1029 2043//1028
+f 1479//1525 1475//1525 1474//1525 1478//1525 1496//1525 1526//1525 1484//1526 1521//1527 1499//1525
+f 2397//1528 2399//1529 1616//1252 1618//1252 2204//1068 2398//1530
+f 2890//1531 1630//1531 1594//1531 1588//1531 1590//1531 2892//1531 2891//1531
+f 1622//1010 1666//1010 1658//1010 1610//1010
+f 1953//929 1956//929 1971//929 1974//929 1973//929 1988//929
+f 1619//1252 1614//1252 1658//1252 1666//1252
+f 1169//1532 1210//1532 1212//1532 3076//1532 3075//1532 1171//1532
+f 1678//1533 1645//1533 1650//1533 1677//1533
+f 2004//708 1969//708 1960//708 2005//708
+f 1685//1534 1640//1534 1641//1534 1681//1534
+f 1596//779 1631//779 1682//779 1683//779 1639//779 1638//779 1633//779 1597//779
+f 1730//1535 1701//1535 1726//1535 2400//1536 2401//1537 2403//1537 2402//1537 2172//984 1727//983 1729//1535 1731//1535 1733//1535 1732//1535
+f 1669//1538 1659//1538 1634//1538 1636//1538
+f 1827//1107 1826//1107 1800//1107 1798//1107
+f 2677//924 1850//924 1840//924 1845//924 1800//924 1826//924 1849//924 2680//924 2893//924
+f 2646//1539 1690//1539 1686//1539 1698//1539 1726//1539 2645//1539 2894//1539
+f 2896//930 2897//930 1667//930 1670//930 1657//930 1661//930 1660//930 1668//930 2895//930
+f 2404//1540 2203//1067 1636//1006 1634//1006 1662//1006 2126//855
+f 2057//1541 2055//1541 2038//1541 2037//1541 3077//1541
+f 1663//779 1664//779 1665//779 1676//779
+f 2021//1542 2023//1542 2011//1542 2009//1542
+f 1157//929 1131//929 1129//929 1158//929
+f 2405//1543 2136//900 1677//1052 1650//1052 1691//1052 2406//1544
+f 1580//1430 1602//1430 1595//1430 1546//1430
+f 1257//1545 1249//1546 1200//1545 1199//1545 1201//1547 1202//1548 1246//1549 1265//1545 1219//1550
+f 1860//1551 1861//1552 1859//1553 1915//1554 1913//1555 1910//1555 1909//1555 1911//1556 1905//1555 1903//1555
+f 1685//1557 1681//1557 1680//1557 1684//1557 2899//1557 2898//1557 2767//1557 1689//1557 2906//1557 2904//1557 2903//1557 1704//1557
+f 2901//1558 1701//1558 1730//1558 2765//1558 2900//1558
+f 1725//1559 2902//1559 2905//1559
+f 2907//1203 2899//1203 1684//1203 1643//1203 1694//1203 1701//1203 2901//1203
+f 1703//1203 1640//1203 1685//1203 1704//1203
+f 1632//1020 1629//1020 1598//1020 1597//1020 1633//1020
+f 1853//1007 1856//1007 1869//1007 1871//1007 1885//1007 3078//1007
+f 2409//1560 2295//1266 1391//1561 1390//1561 1386//1561 1385//1561 1387//1561 1388//1561 1389//1561 1392//1561 1437//1562 2407//1563 2408//1560
+f 2411//1564 2412//1565 2910//1566 2908//1566
+f 2917//1567 2909//1568 1916//1568 2916//1568 2911//1568 2912//1568 1917//1568 1967//1568 1970//1568 1938//1568 2410//1569 2413//1570
+f 2915//1571 1918//1571 1919//1571 2913//1571 2914//1571
+f 2588//1572 2918//1572 2085//1572
+f 1122//1573 1149//1573 1140//1573 1120//1573
+f 2414//1574 2416//1575 1887//1576 1926//1576 1898//1576 1876//1576 1877//1576 1875//1576 1874//1576 2415//1577
+f 1925//779 3093//779 3037//779
+f 1899//779 1900//779 3090//779 3094//779
+f 1901//779 3037//779 3093//779 3094//779 3090//779
+f 2406//1544 1691//687 1692//687 2417//1578
+f 2648//687 2135//687 2418//687
+f 1978//1579 1979//1579 1947//1579 1950//1579
+f 1236//779 1235//779 1279//779 1299//779 1304//779 3054//779 3051//779
+f 1315//779 1261//779 1264//779 3051//779 3054//779
+f 2419//1580 2400//1536 1726//1581 1698//1581 1699//1581 2421//1582 2420//1583
+f 1484//720 1482//720 1497//720 3079//720 1521//720
+f 2906//1085 1689//1085 1687//1085 1702//1085 1725//1085 2905//1085 2920//1085
+f 1821//1584 1823//1584 1812//1584 1810//1584
+f 1040//779 2902//779 1725//779 1702//779 1703//779 1704//779 2903//779
+f 1456//779 1458//779 3082//779 3083//779
+f 1470//779 3002//779 1025//779 3004//779 1455//779 3083//779 3082//779
+f 1945//1585 1946//1586 1943//1587 1942//1588 2002//1589 2001//1586 1987//1590 1992//1591 1993//1586
+f 1724//1592 1712//1592 1710//1592 1722//1592
+f 2277//1216 1369//1198 1340//1198 1383//1198 2286//1238 2422//1593
+f 1976//779 1954//779 1953//779 1988//779 2006//779 2011//779 2023//779 1975//779
+f 1942//752 1985//752 2003//752 3080//752 2002//752
+f 1103//1594 1101//1594 1099//1594 1098//1594
+f 2712//1595 1774//1595 1757//1595 1756//1595 1778//1595 2714//1595 2921//1595
+f 1718//800 1720//800 1711//800 1713//800
+f 1433//1596 1429//1596 1430//1596 1432//1596 1435//1597 1436//1598 2350//1411 2423//1599 2424//1600 2407//1563 1437//1562
+f 1334//1240 1333//1240 1376//1240 1372//1240
+f 1022//689 1043//689 1055//689 1030//689
+f 1723//1601 1722//1601 1710//1601 1708//1601
+f 1328//1602 1329//1602 1331//1602 1334//1098 1335//1097 1338//1602 1336//1064 1337//1063 1332//1602
+f 1312//1173 1301//1173 1303//1173 1311//1173
+f 2428//1603 2425//1604 1754//1117 1715//1117 1717//1117 2426//1605 2427//1606
+f 1766//958 1723//958 1708//958 1767//958
+f 1705//1198 1668//1198 1660//1198 1706//1198
+f 1087//721 1067//721 1031//721 1085//721
+f 2429//1607 1844//687 1846//687 2168//981
+f 1153//1608 1151//1608 1137//1608 1136//1608
+f 1759//958 1709//958 1721//958 1769//958
+f 1769//1117 1718//1117 1713//1117 1759//1117
+f 2927//1609 2923//1610 2430//1611 2432//1612 2431//1613 2226//1609 2734//1609 2924//1609
+f 2925//1614 2224//1614 2433//1615 2197//1049 1669//1614 1666//1614 1671//1614 1675//1614 1674//1616 1673//1617 1670//1614 1667//1618 2922//1619 2926//1614
+f 2931//1620 2930//1620 1933//1620 1931//1620 1934//1620 2943//1620 2942//1620 2932//1620
+f 2935//1621 2936//1621 2434//1621 2435//1621 2440//1622 2438//1623 2441//1624 1979//1621 1981//1621 1982//1621 1983//1621 2928//1621 2929//1621 2941//1621 2944//1621 1951//1621 2794//1621 2949//1621 2946//1621 2945//1621 2939//1621 2938//1621
+f 2796//1625 1928//1625 1927//1465 2365//1464 2439//1626 2437//1625 2436//1625 2934//1625 2933//1625 2937//1625 2940//1625 2947//1625 2948//1625
+f 1056//1627 1041//1627 1038//1627 3081//1627 1060//1627
+f 1426//1019 1428//1019 1470//1019 3082//1019 1458//1019
+f 2089//770 2442//1628 2382//1493 1570//1629 1567//1629 1572//1629 1576//1629 1575//778 1574//777 1571//1629 1568//771
+f 2249//1154 1359//1160 1360//1630 1397//1630 1364//1630 1365//1159 1366//1158 1416//1630 1414//1630 1412//1630 1411//1630 2191//1042 2443//1631 2444//1631
+f 2421//1582 1699//687 1748//687 1750//687 2158//941
+f 2951//816 2950//816 1415//816 1400//816 1456//816 3083//816 1455//816 2952//816
+f 2142//916 1266//1346 1232//1346 2445//1632 2446//1633 2447//1634
+f 2448//1635 2449//1636 1970//1637 1967//1637 1972//1637 1976//1637 1975//973 1974//972 1971//1637 1968//970 2163//969
+f 2954//841 2955//841 1782//841 1751//841 1746//841 1783//841 2953//841
+f 2782//952 1783//952 1746//952 1745//952 1786//952 2783//952 2956//952
+f 2814//1108 1256//1108 1238//1108 1243//1108 1242//1108 1254//1108 1252//1108 2813//1108 2957//1108
+f 2451//1638 2450//1639 1453//1640 1449//1640 1462//1640 2452//1641
+f 2778//1642 1787//1642 1742//1642 1743//1642 1784//1642 2781//1642 2958//1642
+f 1743//1643 1741//1643 1785//1643 1784//1643
+f 1732//779 1733//779 3046//779 3038//779
+f 1735//779 1696//779 1695//779 3038//779 3046//779 1785//779 1741//779 1740//779
+f 2102//801 1765//687 2297//1271
+f 2299//1273 1754//687 2425//1604
+f 2453//1644 2284//1234 1764//1645 1760//1645 1772//1645 2709//1645 2959//1645 2710//1645 2190//1041 2454//1646
+f 1790//1240 1755//1240 1758//1240 1773//1240 2717//1240 2960//1240 2719//1240 1776//1240 1775//1240
+f 2961//1082 2720//1082 1773//1082 1758//1082 1763//1082 1762//1082 1771//1082 1770//1082 2723//1082
+f 1793//687 2455//1647 2229//1119
+f 1643//1648 1644//1649 1641//1649 1640//1650 1703//1651 1702//1649 1687//1649 1693//1652 1694//1649
+f 2458//1653 2456//1654 2457//1655 1814//1656 1811//1656 1810//1656 1812//1656 1807//1656 1806//1656 1762//1656 1763//967 1761//966 2285//1235
+f 1439//1657 1436//1598 1435//1597 1438//1657 1488//1657 1492//1657 1480//1657 2324//1350 2314//1311 1486//1657
+f 1801//1053 1786//1053 1745//1053 1795//1053
+f 1787//1053 1804//1053 1803//1053 1742//1053
+f 1778//779 1756//779 1755//779 1790//779 1807//779 1812//779 1823//779 1777//779
+f 2336//1379 1140//1658 1149//1658 2462//1659 2461//1660 2460//1661 2459//1662
+f 1805//1346 1771//1346 1762//1346 1806//1346
+f 1176//1663 1229//1131 1228//1130 1175//1664 1174//1665 1170//1665 1168//1666 1161//1667 1179//1665 1162//1668 1169//1665 1171//1665 1172//1665 1173//1669
+f 2464//1670 2463//1671 2386//1496 1306//1672 1303//1672 1302//1672 1304//1672 1299//1672 1298//1672 1242//1672 1243//765 1241//764 2147//921
+f 2553//1673 1627//1673 2619//1673
+f 1580//1674 1581//1674 1579//1674 1578//1674 2360//1429 2465//1675 2371//1474 1591//1674 2552//1674 2620//1674 1602//1674
+f 2953//1676 1783//1676 1781//1676 2623//1676 2963//1676
+f 1792//1677 1825//1677 1801//1677 1782//1677 2955//1677 2962//1677 2625//1677 1780//1677 2378//1486 2466//1678
+f 1393//1002 1376//1002 1333//1002 1386//1002
+f 2467//1679 2455//1647 1793//841 1788//841 1792//841 2466//1678
+f 1825//1680 1792//1680 1788//1680 1799//1680
+f 1651//1681 1652//1681 1642//1681 1647//1681 1601//1681 1628//1681
+f 1829//779 1879//779 1880//779 3067//779 3074//779
+f 1837//779 1836//779 1831//779 1797//779 1796//779 3074//779 3067//779
+f 1782//1172 1801//1172 1795//1172 1751//1172
+f 1804//779 1824//779 1802//779 1803//779
+f 2450//1639 2390//1501 1512//687 1450//687 1453//687
+f 1232//1682 1227//1129 1226//1128 1231//1682 1287//1682 1291//1682 1277//1682 1285//1682 2186//1023 2445//1632
+f 2246//1151 1818//1683 1814//1683 2457//1655 2469//1684 2468//1685 2470//1686
+f 1822//1687 1821//1687 1810//1687 1808//1687
+f 1820//1382 1809//1382 1811//1382 1819//1382
+f 1629//1364 1628//1364 1601//1364 1598//1364
+f 1903//852 1902//852 1906//852 1867//852 1860//852
+f 1654//1688 1655//1688 1656//1688 1658//1689 1659//1690 2195//1047 2472//1691 2471//1692 2473//1693 1661//1694 1657//1688
+f 1478//720 1474//720 1435//720 1434//720
+f 1634//1695 1659//1690 1658//1689 1614//1695 1612//1695 1615//1695 1616//1695 2399//1529 2128//856 1662//1695
+f 1822//957 1808//957 1864//957 3084//957 1863//957
+f 1864//779 1865//779 3089//779 3084//779
+f 1873//779 1863//779 3084//779 3089//779
+f 2830//957 1866//957 1857//957 1809//957 1820//957 2831//957 2964//957
+f 2056//779 2057//779 3077//779 3039//779 2029//779
+f 2037//779 2036//779 2031//779 1995//779 1994//779 3039//779 3077//779
+f 2474//1696 1852//745 1815//745 1816//745 2316//1327 2475//1697
+f 1119//1433 1083//1433 1086//1433 1109//1433 1112//1433 1118//1433
+f 2265//1188 2476//1698 2452//1641 1462//1699 1459//1699 1464//1699 1469//1699 1468//1192 1466//1191 1463//1699 1460//1189
+f 2632//1700 2131//1700 2477//1700 2480//1701 2481//1702 2462//1659 1149//1700 1147//1700 1151//1700 1153//1700 2972//1700 2971//1700 2977//1700 2975//1700 2590//1700 1150//1700 2967//1700 2966//1700
+f 1148//1703 1186//1073 2207//1072 2479//1704 2478//1703 2132//1703 2633//1703 2965//1703 2968//1703
+f 1184//1075 1152//1705 2591//1705 2974//1705 2976//1705 2973//1705 2969//1705 2970//1705 3085//1705 1204//1076
+f 1552//785 1556//785 1571//785 1574//785 1573//785 1589//785 3086//785
+f 2236//1142 2482//1706 2216//1092 2054//1707 2053//1707 2055//1707 2057//1707 2056//1707 2047//1707 2046//1707 2045//1707
+f 1871//1708 1869//1708 1867//1708 1906//1418 2358//1417 2483//1709 2484//1710 1868//1708 1866//1708 1870//1708 1872//1708 1924//1421 1904//1420
+f 1875//1711 1843//1711 1848//1711 1874//1711
+f 1117//1712 1118//1712 1112//1712 1115//1712 1076//1712 1080//1712
+f 1314//1713 1313//1713 1302//1713 1300//1713
+f 1882//1714 1838//1714 1839//1714 1878//1714
+f 1887//1715 1883//1715 1895//1715 1926//1715
+f 2096//789 1852//687 2474//1696
+f 2486//1716 2485//1717 1915//687 1859//687 1862//687
+f 2487//1718 2486//1716 1862//1719 1858//1719 1868//1719 2484//1710 2488//1720
+f 2375//1479 1600//687 1646//687 1648//687 2098//795
+f 2826//1721 1835//1721 1833//1721 1855//1721 1870//1721 2829//1721 2978//1721
+f 1855//1722 1854//1722 3087//1722 1872//1722 1870//1722
+f 1347//1723 1346//1723 3088//1723 1367//1723 1363//1723
+f 1854//779 1853//779 3078//779 3087//779
+f 1905//779 1911//779 3036//779 3091//779
+f 1885//779 3091//779 3036//779 1923//779 1924//779 1872//779 3087//779 3078//779
+f 1869//793 1856//793 1861//793 1860//793 1867//793
+f 2202//1065 1336//687 1338//687 2255//1162
+f 1865//1382 1833//1382 1835//1382 1873//1382 3089//1382
+f 2980//1724 2979//1724 2016//1724 2014//1724 2013//1724 2018//1724 2981//1724
+f 1424//737 1423//737 1420//737 1389//737 1388//737
+f 1333//1725 1334//1726 1331//1727 1330//1728 1395//1726 1394//1726 1379//1729 1385//1730 1386//1726
+f 2491//1731 2489//1732 2490//1733 1799//1734 1795//1734 1794//1734 1796//1734 1797//1734 1798//1734 1800//1734 1845//1116 1844//1115 2429//1607
+f 2492//1735 2395//1515 1206//1736 1174//1736 1175//1736 2182//999 2493//1737
+f 1900//726 1838//726 1882//726 1901//726 3090//726
+f 1885//1231 1871//1231 1904//1231 1902//1231 1903//1231 1905//1231 3091//1231
+f 1907//1738 1909//1738 1910//1738 1908//1738 1957//1738 1955//1738 1937//1738 1966//1738 3092//1738 1965//1738
+f 1352//1739 1353//700 1351//699 1408//1740 1406//1741 1403//1741 1402//1741 1404//1741 1399//1742 1398//1741
+f 2494//1743 2426//1605 1717//1744 1719//1744 1720//1744 1718//1744 1769//1744 1772//1744 1738//1744 2103//799
+f 2987//1745 2982//1746 1409//1746 2799//1746 2985//1746 2793//1746 1410//1746 1459//1746 1462//1746 1427//1746 2306//1287 2495//1747
+f 2497//1748 2496//1749 2983//1750 2984//1750
+f 2986//1751 2797//1751 1411//1751 1412//1751 2791//1751
+f 1667//1618 2897//1752 2922//1619
+f 2430//1611 2923//1610 2895//1753 1668//1753 1705//1753 1672//1753 2571//1753 2989//1754 2990//1754 1724//1753 1722//1753 1720//1753 1719//1753 2380//1488 2498//1755 2499//1755
+f 2991//1756 2990//1754 2989//1754
+f 2573//1757 1673//1617 1674//1616 2992//1757 2988//1757
+f 1888//687 2153//933 2500//1758
+f 1889//687 2501//1759 2152//937
+f 1889//1108 1883//1108 1887//1108 2416//1575 2502//1760 2503//1761 2501//1759
+f 1676//1360 1665//1360 1635//1360 1637//1360
+f 1817//1086 1819//1086 1811//1086 1813//1086
+f 2993//1762 2652//1762 1267//1762 1227//1762 1232//1762 1266//1762 2653//1762
+f 2077//731 1075//687 1114//687 1116//687 2109//818
+f 1410//1681 1405//1681 1448//1681 1459//1681
+f 2504//1763 2345//1401 1551//1375 1511//1375 1513//1375 2211//1079
+f 1932//1764 1892//1764 1890//1764 1930//1764
+f 1886//1765 1930//1765 1890//1765 1884//1765
+f 1768//779 1779//779 1766//779 1767//779
+f 1602//1314 1585//1314 1539//1314 1595//1314
+f 1425//1766 1449//1251 1448//1250 1405//1767 1403//1767 1406//1768 1407//1767 1443//1769 1454//1767
+f 2355//1422 1918//1770 1913//1770 1915//1770 2485//1717 2506//1771 2505//1772
+f 1571//1393 1556//1393 1561//1393 1560//1393 1569//1393 1568//1393
+f 2507//1773 2305//1282 1443//1681 1407//1681 1409//1681 2982//1681 2994//1681 2983//1681 2496//1749 2508//1774
+f 2995//923 2876//923 1920//923 1908//923 1910//923 1919//923 2878//923
+f 1083//1132 1081//1132 1074//1132 1072//1132 1086//1132
+f 2996//922 2913//922 1919//922 1910//922 1912//922 1917//922 2912//922
+f 2087//769 1218//947 1216//947 1245//947 2510//1775 2509//1776
+f 2997//1777 2934//1777 2436//1777 2511//1777 2434//1777 2936//1777
+f 1896//687 2264//1183 2346//1405
+f 1856//1778 1853//1778 1854//1779 1855//1778 1857//788 1858//787 1862//1778 1859//1553 1861//1552
+f 2998//1780 2834//1780 1868//1780 1858//1780 1832//1780 1834//1780 2835//1780
+f 2999//829 2943//829 1934//829 1935//829 1940//829 1944//829 1951//829 2944//829
+f 3001//1781 2822//1781 1412//1781 1414//1781 2804//1781
+f 1464//1782 1459//1782 1413//1782 2821//1782 3000//1782 2802//1782 1415//1782 2950//1782 3003//1782 3002//1782 1470//1782 1428//1782
+f 2952//1783 1455//1783 3004//1783
+f 1642//1784 1638//1784 1639//1785 1641//1784 1644//1786 1645//1787 1648//1784 1646//1323 1647//1322
+f 1966//779 3096//779 3092//779
+f 1029//779 2880//779 1964//779 1965//779 3092//779 3096//779 1977//779 2881//779
+f 1967//1433 1957//1433 1908//1433 1920//1433
+f 1967//1712 1917//1712 1912//1712 1957//1712
+f 1477//1788 1475//1788 1432//1788 1430//1788
+f 1586//1789 1582//1789 1581//1789 1585//1789 1602//1789 2621//1789 3006//1789 2892//1789 1590//1789 1626//1789 1605//1789
+f 1630//1790 2890//1790 3005//1790 2622//1790
+f 1980//753 2000//753 1993//753 1949//753
+f 1120//1791 1140//1378 1139//1377 1097//1791 1095//1791 1098//1791 1099//1791 2259//1177 2120//844 1143//1791
+f 3009//1310 3007//1310 1358//1310 1349//1310 1301//1310 1312//1310 3008//1310
+f 3093//1394 1925//1394 1886//1394 1884//1394 1899//1394 3094//1394
+f 2513//1792 2082//747 1952//1712 1914//1712 1916//1712 2909//1712 3010//1712 2910//1712 2412//1565 2512//1793
+f 1080//1794 1076//1794 1074//1794 1081//1794
+f 2515//1795 2514//1796 1962//1797 1958//1797 1970//1797 2449//1636
+f 1939//1798 1937//1798 1955//1798 1972//1798
+f 1128//1231 1159//1231 1181//1231 3095//1231 1180//1231
+f 1132//1106 1131//1106 1157//1106 1156//1106
+f 1881//1394 1877//1394 1842//1394 1841//1394
+f 2516//1799 2410//1569 1938//922 1936//922 1963//922 2083//746
+f 1484//1800 1526//1800 1487//1800 1482//1800
+f 1937//923 1939//923 1977//923 3096//923 1966//923
+f 1984//749 1981//749 1946//749 1945//749
+f 1675//1801 1671//1801 1656//1801 1655//1801
+f 1978//753 1950//753 1991//753 2519//1802 2518//1803 2517//1804 2317//1331
+f 1400//1805 1402//1806 1403//1805 1401//1807 1448//1805 1446//1808 1426//1809 1458//1810 1456//1805
+f 1650//1811 1645//1787 1644//1786 1649//1812 1694//1812 1698//1813 1686//1812 1692//1814 1691//1812
+f 1560//1815 1561//1374 1559//1373 1617//1815 1615//1815 1612//1815 1611//1815 1613//1815 3097//1815 1608//1815 1607//1815
+f 3011//1816 2599//1816 1620//1816 1615//1816 1617//1816 2329//1359 2520//1817 2090//773 2600//1816
+f 1985//1818 1942//1818 1943//1818 1982//1818
+f 2000//752 1984//752 1945//752 1993//752
+f 1507//1819 1505//1819 1518//1819 1520//1819
+f 1503//1820 1505//1821 1506//1820 1504//1822 1557//1820 1555//1823 1531//1820 1566//1824 1565//1820
+f 1706//1825 1660//1825 1661//1694 2473//1693 2521//1826 2522//1827 2223//1105 1716//1825 1714//1825 1711//1825 1710//1825 1712//1825 1707//1825
+f 1167//1828 1166//1829 1133//1830 1127//1831 1113//1832 1111//1833 1130//1834 1128//1835 1180//1836 1161//1837 1168//1834 1129//1834 1131//1834 1132//1834 1170//1834 1174//1838 1160//1834
+f 2174//988 1849//1839 1826//1839 1827//1839 1830//1839 1851//1839 1879//1839 1829//1839 1828//1839 1801//1839 1825//1839 2524//1840 2523//1841 2526//1841 2525//1842
+f 2981//1843 2018//1843 2670//1843
+f 2527//1844 2116//836 2016//1845 2979//1845 2671//1845 2019//1845 2017//1845 2053//1845 2054//1845 2034//1845 2528//1846
+f 1214//1847 1233//1847 1208//1847 1207//1518 2396//1517 2529//1848 2530//1849 1267//1847 1269//1847 1271//1847 1272//1847 3098//1847 1213//1847 1211//1847
+f 1991//687 2140//913 2531//1850 2519//1802
+f 2510//1775 1245//687 2289//1243
+f 2150//927 2291//1245 1234//687
+f 2342//1397 1998//687 2042//687 2044//687 2215//1090
+f 1150//1018 1138//1018 1142//1018 1141//1018 1148//1018 2968//1018 3012//1018 2967//1018
+f 3013//783 2746//783 2026//783 1999//783 1996//783 2027//783 2744//783
+f 2533//1851 2181//1000 1230//1852 1227//1852 1267//1852 2530//1849 2532//1853
+f 1567//1375 1514//1375 1508//1375 1557//1375
+f 1989//1854 2028//1854 1992//1854 1987//1854
+f 2024//749 1989//749 1987//749 2001//749 3099//749
+f 2514//1796 2534//1855 2015//687 1959//687 1962//687
+f 1219//1856 1217//1856 1237//1856 1257//1856
+f 2535//1857 2524//1840 1825//1858 1799//1858 2490//1733 2537//1859 2536//1860
+f 3014//1861 2916//1861 1916//1861 1914//1861 1913//1861 1918//1861 2915//1861
+f 2166//974 2018//1862 2013//1862 2015//1862 2534//1855 2538//1863 2539//1864
+f 1830//1173 1827//1173 1798//1173 1797//1173 1831//1173
+f 2541//1865 2540//1866 1947//1867 1979//1867 2441//1624
+f 1692//821 1686//821 1690//821 2639//821 3015//821 2640//821 2138//896 2542//1868 2543//1869 2417//1578
+f 2012//1794 2017//1794 2019//1794 2010//1794
+f 3007//1870 3016//1870 2774//1870 1363//1870 1358//1870
+f 3017//1871 3008//1871 1312//1871 1311//1871 1313//1871 1314//1871 1355//1871 1368//1871 1327//1871 2775//1871
+f 3018//1872 2872//1872 1527//1872 1489//1872 1487//1872 1526//1872 2874//1872
+f 2544//1873 2415//1577 1874//733 1848//733 1888//733 2500//1758
+f 1280//1007 1278//1007 1294//1007 3100//1007 1316//1007
+f 1944//1874 1940//1874 1941//1874 1943//1874 1946//911 1947//910 2540//1866 2545//1875 2546//1876 2261//1186 1948//1185
+f 2036//721 2039//721 2046//721 2047//721 2030//721 2031//721
+f 2007//735 2051//735 3101//735 3102//735 2050//735 2022//735
+f 2104//808 2547//1877 2100//797 1678//1878 1680//1878 1681//1878 1683//1878 1682//1878 1653//1878 1652//1878 1651//1878
+f 2020//735 2053//735 2040//735 2008//735
+f 2034//1879 2054//1879 2041//1879 2032//1879
+f 1935//779 1893//779 1892//779 1932//779 1933//779 2930//779 1032//779 2928//779 1983//779 1941//779 1940//779
+f 1249//842 1239//842 1188//842 1200//842
+f 2035//1880 2033//1880 2038//1880 2055//1880
+f 2049//687 2048//687 2115//835 2548//1881
+f 2549//1882 2528//1846 2034//1794 2032//1794 2049//1794 2548//1881 2550//1883
+f 1179//779 1161//779 1180//779 3095//779 3041//779
+f 1181//779 2561//779 1045//779 2564//779 1205//779 3041//779 3095//779
+f 2050//779 3102//779 3066//779
+f 3101//779 3065//779 3066//779 3102//779
+f 2051//779 2052//779 2058//779 3065//779 3101//779
+f 2052//1132 2033//1132 2035//1132 2058//1132
+f 2110//817 2076//732 2077//731 2109//818
+f 2257//1170 2123//854 2124//853 2146//918
+f 2182//999 2181//1000 2533//1851 2493//1737
+f 2310//1289 2199//1061 2200//1060 2201//1059 1250//1884
+f 2445//1632 2186//1023 2187//1022 2213//1084 2446//1633
+f 2310//1289 1250//1884 2309//1290
+f 2221//1100 1251//1885 2220//1094
+f 2422//1593 2286//1238 2219//1095 2220//1094 1251//1885
+f 2255//1162 2253//1161 1250//1885 2201//1059 2202//1065
+f 2424//1600 2423//1599 1253//1886 2409//1560 2408//1560 2407//1563
+f 2295//1266 2409//1560 1253//1886 2377//1483 2294//1267
+f 2287//1239 2288//1241 1251//1886 2221//1100 2218//1099
+f 2326//1352 2312//1294 2313//1297 2315//1312 2325//1349
+f 2352//1410 1253//1887 2423//1599 2350//1411
+f 2314//1311 2324//1350 2325//1349 2315//1312
+f 2121//846 2122//847 2349//1407 2328//1356
+f 2369//1473 2372//1476 2361//1428 2362//1431
+f 2098//795 2099//794 2374//1480 2375//1479
+f 2405//1543 2406//1544 2417//1578 2543//1869
+f 2158//941 2157//940 2420//1583 2421//1582
+f 2537//1859 2490//1733 2489//1732 2491//1731 1260//1888
+f 2537//1859 1260//1888 2536//1860
+f 2467//1679 2379//1485 2230//1120 2229//1119 2455//1647
+f 2155//938 1262//1889 2154//932
+f 2500//1758 2153//933 2154//932 1262//1889 2544//1873
+f 2429//1607 2168//981 2169//980 1260//1889 2491//1731
+f 2546//1876 2545//1875 1263//1890 2263//1182 2262//1182 2261//1186
+f 2346//1405 2264//1183 2263//1182 1263//1890 2347//1402
+f 2501//1759 2503//1761 1262//1890 2155//938 2152//937
+f 2140//913 2141//912 2337//1386 2531//1850
+f 2519//1802 2531//1850 2337//1386 2339//1385 2518//1803
+f 2541//1865 1263//1891 2545//1875 2540//1866
+f 2215//1090 2214//1089 2341//1398 2342//1397
+f 2115//835 2117//834 2550//1883 2548//1881
+f 2514//1796 2515//1795 2538//1863 2534//1855
+f 2083//746 2082//747 2513//1792 2516//1799
+f 2485//1717 2486//1716 2487//1718 2506//1771
+f 2469//1684 2457//1655 2456//1654 2458//1653 1270//1892
+f 2469//1684 1270//1892 2468//1685
+f 2475//1697 2272//1199 2097//790 2096//789 2474//1696
+f 2300//1274 1273//1893 2298//1270
+f 2297//1271 2298//1270 1273//1893 2101//798 2102//801
+f 2458//1653 2285//1235 2284//1234 2453//1644 1270//1893
+f 2521//1826 2473//1693 2471//1692 2472//1691 1275//1894 2522//1827
+f 2223//1105 2522//1827 1275//1894 2381//1487 2222//1104
+f 2299//1273 2425//1604 2428//1603 1273//1895 2300//1274
+f 2128//856 2399//1529 2397//1528 2127//857
+f 2196//1051 1275//1896 2472//1691 2195//1047
+f 2404//1540 2126//855 2127//857 2397//1528 2398//1530
+f 2329//1359 2330//1358 2383//1491 2520//1817
+f 2344//1400 2345//1401 2504//1763 2354//1415
+f 2450//1639 2451//1638 2389//1502 2390//1501
+f 2303//1283 2305//1282 2507//1773 2307//1286
+f 2332//1368 2193//1045 2194//1044 2331//1369
+f 2464//1670 1282//1897 2385//1497 2386//1496 2463//1671
+f 2234//1137 2130//867 2129//866 2231//1133 2233//1135
+f 2385//1497 1282//1897 2384//1498
+f 2510//1775 2289//1243 2290//1242 1283//1898 2509//1776
+f 2464//1670 2147//921 2148//920 2184//1012 1282//1899
+f 2292//1246 1283//1898 2290//1242
+f 2292//1246 2291//1245 2150//927 2149//926 1283//1900
+f 2134//877 2275//1212 1284//1900 2113//830 2112//833
+f 2334//1381 2335//1380 1284//1900 2275//1212 2274//1212 2273//1211
+f 2459//1662 1284//1901 2335//1380 2336//1379
+f 2459//1662 2460//1661 1284//1901
+f 2260//1176 2094//781 2095//784 2120//844 2259//1177
+f 2301//1276 2161//950 2162//949 2302//1277
+f 2060//686 2059//688 2063//692 2064//706
+f 2118//838 2227//1110 2075//728 2076//732 2110//817 2111//820 2119//839
+f 2074//729 2075//728 2227//1110 2228//1112
+f 2256//1169 2392//1519 2125//851 2123//854 2257//1170
+f 2073//716 2071//716 2069//716 2070//715 2125//851 2392//1519 2393//1522 1457//687 2391//1513 2072//717
+f 2492//1735 2493//1737 2533//1851 2532//1853
+f 2532//1853 2530//1849 2529//1848 2396//1517 2394//1516 2395//1515 2492//1735
+f 2322//1344 2320//1344 2308//1291 2309//1290 1250//687 2321//1345
+f 2447//1634 2446//1633 2213//1084 2212//1083
+f 2142//916 2447//1634 2212//1083 2143//917
+f 2422//1593 1251//687 2276//1213 2277//1216
+f 2253//1161 2254//1165 1250//687
+f 2319//1342 2321//1345 1250//687 2254//1165 2252//1164 2340//1389
+f 1253//687 2376//1481 2377//1483
+f 2278//1214 2276//1213 1251//687 2288//1241
+f 2376//1481 1253//687 1467//687 2241//1148 2242//1147 2078//742 2081//741 2079//741 2080//740
+f 1467//687 1253//687 2351//1409 2240//1146 2753//1145 3019//687
+f 2352//1410 2351//1409 1253//687
+f 2311//1295 2312//1294 2326//1352 2323//1351
+f 2368//1471 2367//1471 2327//1357 2328//1356 2349//1407 2068//712 2067//711 2066//710
+f 2372//1476 2370//1475 2465//1675 2360//1429 2361//1428
+f 2370//1475 2371//1474 2465//1675
+f 2373//1477 2374//1480 2099//794 2100//797 2547//1877 2104//808 2105//807
+f 2108//811 2106//811 2107//810 2373//1477 2105//807
+f 2542//1868 2139//901 2136//900 2405//1543 2543//1869
+f 3020//687 2647//898 2139//901 2542//1868 2138//896 2137//895 1481//687
+f 2419//1580 2420//1583 2157//940 2156//944
+f 2402//1537 2403//1537 2401//1537 2400//1536 2419//1580 2156//944 2159//943 2173//985 2172//984
+f 2536//1860 1260//687 2535//1857
+f 2466//1678 2378//1486 2379//1485 2467//1679
+f 2526//1841 2523//1841 2524//1840 2535//1857 1260//687 2525//1842
+f 2544//1873 1262//687 2414//1574 2415//1577
+f 2169//980 2171//979 1260//687
+f 2525//1842 1260//687 2171//979 2170//978 2175//989 2174//988
+f 2364//1463 2366//1463 2363//1463 2348//1403 2347//1402 1263//687 1493//687 2439//1626 2365//1464
+f 2503//1761 2502//1760 1262//687
+f 2416//1575 2414//1574 1262//687 2502//1760
+f 2338//1384 2517//1804 2518//1803 2339//1385
+f 2438//1623 2440//1622 1493//687 1263//687 2541//1865 2441//1624
+f 2318//1332 2317//1331 2517//1804 2338//1384
+f 2214//1089 2217//1093 2343//1399 2341//1398
+f 2239//1141 2237//1141 2238//1140 2343//1399 2217//1093 2216//1092 2482//1706 2236//1142
+f 2549//1882 2550//1883 2117//834 2116//836 2527//1844
+f 2549//1882 2527//1844 2528//1846
+f 2449//1636 2448//1635 2163//969 2164//968 2539//1864 2538//1863 2515//1795
+f 2539//1864 2164//968 2167//975 2165//975 2166//974
+f 2512//1793 2413//1570 2410//1569 2516//1799 2513//1792
+f 3021//687 2917//1567 2413//1570 2512//1793 2412//1565 2411//1564 1510//687
+f 2505//1772 2506//1771 2487//1718 2488//1720
+f 2357//1416 2359//1416 2356//1416 2355//1422 2505//1772 2488//1720 2484//1710 2483//1709 2358//1417
+f 2470//1686 2468//1685 1270//687
+f 2316//1327 2271//1200 2272//1199 2475//1697
+f 2248//1152 2245//1152 2246//1151 2470//1686 1270//687 2247//1153
+f 1273//687 2494//1743 2103//799 2101//798
+f 1270//687 2453//1644 2454//1646
+f 2190//1041 2189//1040 2188//1039 2247//1153 1270//687 2454//1646
+f 1273//687 2428//1603 2427//1606
+f 2499//1755 2498//1755 2380//1488 2381//1487 1275//687 1523//687 2431//1613 2432//1612 2430//1611
+f 2494//1743 1273//687 2427//1606 2426//1605
+f 1275//687 2196//1051 2198//1050
+f 2204//1068 2203//1067 2404//1540 2398//1530
+f 2433//1615 1523//687 1275//687 2198//1050 2197//1049
+f 2092//774 2091//774 2090//773 2520//1817 2383//1491 2382//1493 2442//1628 2089//770
+f 2354//1415 2504//1763 2211//1079 2209//1078 2353//1414
+f 2210//1081 2353//1414 2209//1078
+f 2452//1641 2476//1698 2265//1188 2266//1187 2388//1503 2389//1502 2451//1638
+f 2269//1194 2268//1194 2267//1193 2388//1503 2266//1187
+f 2507//1773 2508//1774 2495//1747 2306//1287 2307//1286
+f 3022//687 2987//1745 2495//1747 2508//1774 2496//1749 2497//1748 1540//687
+f 2332//1368 2333//1371 2192//1046 2193//1045
+f 2444//1631 2443//1631 2191//1042 2192//1046 2333//1371 2250//1156 2251//1155 2249//1154
+f 2387//1499 2384//1498 1282//687
+f 2234//1137 2233//1135 2232//1134 2235//1136
+f 2180//997 2178//997 2177//996 2387//1499 1282//687 2179//998
+f 2183//1014 2293//1265 2176//991 2179//998 1282//687 2185//1015
+f 2509//1776 1283//687 2086//766 2087//769
+f 2185//1015 1282//687 2184//1012
+f 2088//767 2086//766 1283//687 2151//925
+f 2151//925 1283//687 2149//926
+f 2206//1071 2208//1071 2205//1071 2114//831 2113//830 1284//687 1554//687 2479//1704 2207//1072
+f 2481//1702 2480//1701 1554//687 1284//687 2461//1660 2462//1659
+f 2461//1660 1284//687 2460//1661
+f 2094//781 2260//1176 2258//1178 2093//782
+f 2283//1228 2282//1228 2160//951 2161//950 2301//1276 2280//1226 2281//1225 2279//1224
+f 2270//1197 2065//707 2064//706 2063//692 2061//691
+f 2062//690 2270//1197 2061//691
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/res/test/compressor/3d/forest.obj 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/compressor/3d/forest.obj
--- 1.2.21-5/modules/lsp-runtime-lib/res/test/compressor/3d/forest.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/compressor/3d/forest.obj	2025-08-26 18:15:43.654003990 +0000
@@ -0,0 +1,16998 @@
+# Forest
+# (C) Linux Studio Plugins Project
+o Crown
+v -9.895969 35.479290 14.013926
+v -5.380883 35.666012 14.227640
+v -7.404320 23.177568 11.895271
+v -14.647302 28.641973 24.711975
+v -7.428742 22.615034 24.835541
+v -5.686970 31.226931 26.467739
+v -16.076418 24.250683 20.892681
+v -1.790244 24.072596 23.693195
+v -5.978638 35.671055 23.447992
+v -8.310428 36.718529 24.392963
+v -3.108002 28.703119 11.544284
+v -1.123244 22.278435 17.270899
+v -39.657166 22.814989 8.848895
+v -33.749100 15.949165 11.649615
+v -46.603741 19.476385 9.387616
+v -40.634018 13.318188 7.144238
+v -46.883488 14.116743 10.321175
+v -42.672493 23.833834 26.330425
+v -47.029388 19.361547 27.707066
+v -38.501438 20.527016 30.676020
+v -48.670013 14.355245 26.795237
+v -40.413631 13.001769 30.778492
+v -34.946953 11.185138 14.506185
+v -22.847408 23.541864 12.564294
+v -16.926674 16.507963 14.882776
+v -26.631554 16.023252 13.978514
+v -19.652924 24.101402 15.103592
+v -20.606571 13.344411 18.033724
+v -18.440197 14.622607 18.314457
+v -17.104591 15.141989 22.103821
+v -18.521372 14.566157 19.343166
+v -18.071518 14.799095 19.861532
+v -16.688404 13.070149 23.118416
+v -17.537802 15.633451 18.999987
+v -16.840054 23.664583 22.178608
+v -25.148102 14.494662 16.108213
+v -27.073273 -18.908781 22.562195
+v -28.648336 -24.263647 21.915804
+v -21.156857 -30.177658 24.556507
+v -51.818203 10.548554 21.932489
+v -55.252663 21.654184 22.945597
+v -55.813107 16.988625 15.187379
+v -41.682373 -45.441078 25.841000
+v -32.428368 -48.612671 25.483934
+v -33.728878 -41.580402 29.684542
+v -38.746525 -32.665714 27.285780
+v -41.569859 -47.305611 20.447071
+v -32.984081 -49.091175 19.027372
+v -39.186592 -40.233845 8.305207
+v -34.654587 -48.859863 13.548094
+v -42.064159 -46.166122 15.211730
+v -34.429230 -40.413372 6.560294
+v -9.865637 -6.499537 21.445642
+v -10.441173 -14.979115 20.932722
+v -11.068961 -7.137710 13.893541
+v -24.252350 -15.642059 16.038332
+v -25.355597 -8.256391 13.809445
+v -20.992397 -8.979524 10.474286
+v -31.931261 -32.985214 25.038759
+v -33.079006 -27.707705 30.120039
+v -36.257172 -25.034061 6.734976
+v -29.835154 -24.067047 13.663328
+v -31.933687 -29.429136 8.587285
+v -32.550236 -36.104744 31.768322
+v -24.566648 -39.388500 22.460848
+v -29.535976 -48.485096 13.366223
+v -25.926025 -36.687244 11.992317
+v -31.939625 -33.659809 12.720390
+v -56.387730 -20.436485 18.646128
+v -55.361774 -13.907925 19.633511
+v -50.262123 -12.663896 14.278434
+v -51.513729 -15.794893 25.423538
+v -52.920334 -23.358677 22.348352
+v -53.042297 -24.374872 16.335270
+v -51.342937 -23.799046 12.870684
+v -26.416439 8.310908 11.311706
+v -28.917997 10.299225 18.765276
+v -26.879524 13.542326 18.711792
+v -28.531401 12.018619 21.875906
+v -28.534714 7.110866 22.529676
+v -21.897049 9.677612 25.903620
+v -21.262657 5.537391 22.751749
+v -23.530899 13.151744 23.310141
+v -19.069868 8.088080 16.329256
+v -22.617908 5.004672 14.750255
+v -54.669422 -26.508944 18.966293
+v -3.366998 1.837570 20.233490
+v -6.614962 0.424046 15.960486
+v 0.183549 9.501696 14.522128
+v -5.956057 10.337846 26.521885
+v 1.787302 9.063901 19.360081
+v -2.367474 11.218024 24.743721
+v -5.661831 14.090223 23.349506
+v -7.019094 9.154321 11.005136
+v -2.607183 15.474751 15.002557
+v -42.111328 -28.118114 10.270661
+v -38.150051 -21.351961 11.027141
+v -34.413578 -20.127150 24.830158
+v -42.016479 -25.643583 28.305817
+v -34.459698 -20.462624 14.252443
+v -9.378195 11.325799 10.253020
+v -14.369601 2.473120 10.766763
+v -15.987492 5.346167 25.624794
+v -11.092683 -1.489885 25.649822
+v -17.984217 8.312402 18.769857
+v -16.626694 10.694278 14.015684
+v -12.616532 13.516092 14.548169
+v 2.112165 48.669716 24.103308
+v 8.467217 47.843548 24.398701
+v 7.958755 50.908497 17.386124
+v -1.400168 50.255417 16.941250
+v 5.281566 40.774647 11.295982
+v 4.185067 48.020458 12.433568
+v 9.412293 46.283161 12.746543
+v 3.743878 26.847904 26.957762
+v 6.579345 21.586445 20.462740
+v 9.896100 28.585203 23.893988
+v 0.965423 30.825830 7.896383
+v 10.153297 28.049286 14.714079
+v 6.552656 32.432453 10.630872
+v -6.788886 17.488861 12.065185
+v -15.380396 24.915234 15.999951
+v -1.121172 14.760348 20.191927
+v -10.656146 14.391703 24.740520
+v -14.078320 16.739277 24.362341
+v -17.130117 15.246751 15.719363
+v -18.630856 14.440638 19.217348
+v -25.418104 -23.590103 15.412292
+v -24.771202 -19.180321 14.829666
+v -18.077417 -23.661953 3.271728
+v -18.518377 -21.994989 34.252022
+v -16.628391 -13.586509 26.141644
+v -23.276466 -16.741055 22.673346
+v -13.540224 -32.552528 19.752583
+v -7.771930 -22.281815 28.930004
+v -21.726034 -29.796326 12.354136
+v -8.533779 -20.341612 7.669467
+v -14.421008 -14.290253 12.159369
+v -49.325005 25.558474 13.482531
+v 19.387854 59.252129 22.267399
+v 22.491163 57.569500 16.040350
+v 13.234011 57.436790 15.635386
+v 9.638877 51.399784 22.671759
+v 16.955034 47.250950 26.015110
+v 28.675983 49.396381 17.181528
+v 25.059080 42.021248 19.456224
+v 13.291681 47.026306 24.624399
+v 11.793038 42.360619 21.921587
+v 13.142259 40.551575 18.504881
+v 12.225047 42.004711 16.066782
+v 14.000075 49.079582 14.970160
+v 18.359221 49.962238 10.338776
+v -52.862358 -34.264717 9.620932
+v -43.621674 -32.095604 6.878080
+v -46.618427 -41.083172 3.671414
+v -46.390720 -39.512814 35.001308
+v -50.296890 -45.051258 26.829195
+v -55.418591 -35.786549 20.051340
+v -46.246613 -32.224361 30.956097
+v -49.229710 -45.559502 11.025587
+v -37.415291 -34.811852 13.605999
+v -53.787132 -39.886898 11.345936
+v -25.318718 38.962429 21.081280
+v -27.204136 45.697887 22.652021
+v -30.547461 35.193336 23.523487
+v -30.064581 51.126778 24.591257
+v -34.835617 43.907993 33.920719
+v -41.979126 40.632305 29.658566
+v -37.940464 36.157837 29.336056
+v -39.806156 34.757633 15.013452
+v -41.776482 39.405231 8.149786
+v -34.408009 43.599689 3.600887
+v -31.987431 34.953194 13.596235
+v -27.357553 36.828373 14.729976
+v -30.751001 48.831043 12.556555
+v -40.512836 48.832851 10.373843
+v -43.582924 45.773106 11.788169
+v -32.273361 11.228068 21.188597
+v -33.748505 15.410755 24.695457
+v -34.636520 11.083464 22.411613
+v -53.226860 39.069622 14.631045
+v -46.796467 50.906189 14.736220
+v -49.898144 42.298828 9.762142
+v -54.209095 43.072975 20.585543
+v -43.407139 46.011845 25.555250
+v -47.200302 49.853748 23.916466
+v -49.256340 44.763550 26.406349
+v -45.723469 52.313808 20.774521
+v -51.632874 4.044853 22.230829
+v -46.510475 -7.462652 21.607405
+v -43.456871 -1.158317 25.040287
+v -50.385246 -5.742570 17.853115
+v -51.049553 3.265749 14.996106
+v -42.923450 -0.679802 12.168762
+v -45.876484 -6.425848 15.019959
+v -23.437487 34.993896 10.700077
+v -19.843262 30.795164 10.336315
+v -27.816593 29.315857 7.033534
+v -26.269381 27.770073 29.903175
+v -20.754969 24.443159 23.753378
+v -22.023731 32.911613 27.407383
+v -25.864132 37.018246 23.215330
+v -1.844899 43.074276 5.002682
+v -1.146232 37.413094 8.478641
+v -0.281424 39.419250 30.363539
+v -4.690264 49.029530 29.151699
+v 7.597122 42.056717 25.822943
+v -8.502994 40.438461 13.781722
+v -4.774222 46.248508 9.021049
+v -31.918242 -4.319633 11.480845
+v -35.171280 -15.436777 13.428601
+v -40.704792 -11.967947 11.301149
+v -44.985775 -9.229341 23.566895
+v -38.416271 -13.535175 26.325489
+v -31.327335 -5.171664 26.053547
+v -46.936703 -10.629478 17.359179
+v -39.620586 -3.531641 11.134545
+v -47.711578 39.079773 30.503895
+v -50.137951 34.425533 23.087048
+v -42.184765 33.009602 22.050295
+v -45.943676 32.698765 14.462934
+v -26.602791 51.445286 22.595451
+v -29.269453 54.818874 16.074282
+v -26.262545 51.475792 16.034393
+v -17.565493 -9.089666 28.202396
+v -25.992033 -9.914518 23.431479
+v -26.621880 -15.469988 22.325060
+v -36.685898 28.106234 4.026008
+v -33.180382 23.140228 6.570333
+v -32.906857 23.951517 31.203979
+v -42.073078 31.315683 23.885067
+v -42.498482 31.435339 15.824010
+v -29.576429 17.385733 14.490797
+v -29.716820 17.190155 22.342150
+v -21.269781 19.180876 25.861032
+v -27.906006 23.105791 24.494249
+v -26.690504 14.633672 21.333874
+v -28.126110 23.763937 13.049232
+v -41.221352 58.124882 14.597529
+v -36.980564 58.958801 21.687395
+v -41.223595 49.640896 26.714741
+v -49.516834 6.902267 6.133211
+v -38.190441 5.056540 6.282091
+v -44.800316 5.944230 33.654053
+v -36.892063 5.002528 31.348896
+v -11.200670 52.841805 23.807169
+v -8.532572 52.940174 15.360593
+v -11.005611 50.520481 12.718217
+v -19.491615 -36.777016 17.623058
+v -18.050842 46.934547 27.599676
+v -12.130248 45.114960 24.553143
+v -17.915726 51.818001 26.222578
+v -18.218269 54.194241 15.652226
+v -16.953917 49.449566 9.530991
+v -10.973335 45.279762 12.677428
+v -30.435791 8.604504 15.500196
+v -49.623135 -52.713230 20.935244
+v -58.902790 -47.080486 19.494463
+v -52.076813 -27.704601 6.085051
+v -47.516048 -25.790674 33.000961
+v -54.043770 -35.562145 26.338427
+v -52.207699 -23.252588 26.587193
+v -28.333250 4.948416 24.728697
+v -39.055199 -3.615182 26.536812
+v -28.721029 0.198779 27.872005
+v -28.175322 6.115002 13.597713
+v -34.505619 -0.100839 4.777629
+v -49.200527 31.657768 20.566143
+v -48.293800 25.995926 24.063643
+v -52.307907 26.019478 20.583181
+v -43.070473 28.956566 12.757126
+v -52.579803 21.813358 11.453225
+v -31.326757 18.660608 28.124039
+v -12.012721 8.750047 25.704016
+v -13.841231 28.619030 13.585730
+v 11.514491 35.425179 9.775723
+v 5.630617 36.387905 8.028480
+v 12.422758 31.699057 18.915659
+v 13.902237 36.586124 27.121403
+v 4.631190 40.448215 27.973349
+v 8.138681 34.150703 28.187872
+v -21.595133 -3.853446 13.393011
+v -29.192629 0.009586 10.549155
+v -21.826885 -4.296218 24.195898
+v -33.332829 -14.469148 23.773960
+v -28.068357 -16.930752 15.096349
+v -30.070562 -11.308423 12.275679
+v -20.092710 44.521152 9.290308
+v -23.646534 43.179173 23.967453
+v -27.078768 45.857090 15.082612
+v -16.151651 -5.275211 11.947135
+v -31.474691 -17.973907 11.331980
+v -45.845596 -18.539948 4.231117
+v -43.533085 -13.407528 33.673676
+v -23.384087 43.178341 14.168326
+v -15.447248 42.499531 34.205780
+v -13.799445 37.581593 4.484079
+v -1.485334 -4.768677 16.441084
+v 0.990863 3.773858 18.210627
+v 6.563632 -0.912908 9.850243
+v 11.402965 -5.592093 11.603754
+v 5.537499 -9.253227 13.180626
+v 4.516082 1.721025 26.215675
+v 6.013690 -8.535444 25.300470
+v 10.858533 -3.847974 27.103037
+v -0.287629 -5.038112 23.010605
+v 37.171562 39.057941 9.635967
+v 43.883453 42.290691 11.913845
+v 42.673752 32.244225 5.969173
+v 36.053696 36.531803 28.016653
+v 42.701332 32.048080 31.020395
+v 40.998718 37.155308 31.645117
+v 48.220886 35.431629 27.995396
+v 46.421406 41.008530 25.854618
+v 40.209576 42.777225 23.977547
+v 52.896511 35.087864 19.908916
+v 48.391911 37.592152 12.257603
+v 29.647915 33.310364 13.540412
+v 34.076965 32.131840 10.952720
+v 27.393103 25.738691 10.959026
+v 30.000772 21.253088 14.618254
+v 29.330910 27.972450 26.005974
+v 28.000101 22.218475 24.543472
+v 38.600613 24.689884 24.907940
+v 33.084686 20.198334 23.147635
+v 36.127934 31.922668 26.492624
+v 46.822708 -9.669147 15.778248
+v 47.838448 -4.723413 13.665525
+v 52.999279 -7.089017 17.457773
+v 48.786335 -7.725429 22.526346
+v 49.846275 -12.027504 19.452547
+v 8.613027 19.542593 15.392542
+v 13.379941 26.063862 10.294264
+v 19.137705 31.291744 15.210695
+v 16.568653 23.338900 28.841660
+v 22.274111 24.514984 25.045977
+v 18.718618 30.751129 23.285555
+v 8.706417 20.179546 23.776596
+v 20.776112 25.007637 11.814616
+v 14.611459 -8.989391 10.584811
+v 15.600273 -12.889729 15.745891
+v 9.245645 -10.518223 14.408474
+v 15.438982 -10.486468 22.742517
+v 14.946573 -3.880591 23.439877
+v 15.753674 -4.041759 15.382051
+v 34.050961 16.204947 22.473043
+v 39.742748 10.021585 24.862040
+v 43.197193 14.084881 22.450399
+v 33.306458 8.812641 22.539850
+v 43.154327 19.963009 25.168192
+v 43.629879 19.959751 12.282477
+v 43.232925 13.601892 14.924575
+v 38.149174 15.736522 12.774162
+v -18.371254 -45.935623 13.539957
+v -13.955760 -40.780773 15.931536
+v -11.848386 -47.525585 12.572204
+v -12.442296 -49.179916 23.843197
+v -15.552944 -46.948574 26.203268
+v -16.526066 -50.458138 18.226341
+v -16.452782 -42.089096 23.640570
+v 28.842489 6.216216 23.116192
+v 32.676346 3.171885 24.915176
+v 6.854543 -13.993800 24.004509
+v -0.586581 -14.562154 19.469290
+v 2.897735 -16.863050 16.109083
+v 9.003305 -13.685594 11.248670
+v 54.669838 -51.265110 16.759251
+v 55.613960 -40.383442 14.756228
+v 56.150078 -38.344955 19.151777
+v 43.744640 -46.793381 26.688042
+v 46.982037 -52.432190 22.295914
+v 53.071053 -44.555691 26.233637
+v -7.738588 -52.672237 24.043783
+v -9.670598 -57.607391 17.088793
+v -3.421839 -54.212276 15.366936
+v -0.150195 -51.188038 21.384148
+v 10.419623 2.592220 7.218241
+v 4.721716 5.161764 15.572896
+v 11.519389 1.488911 30.244236
+v 15.299103 5.748399 22.217640
+v 10.921441 7.521700 22.474010
+v 16.454771 1.426673 23.449594
+v 5.786369 6.282103 22.072739
+v 16.519609 -0.322135 15.162696
+v 15.043739 5.659193 15.636939
+v 11.031728 7.869153 14.937606
+v 18.211880 -3.436537 23.969414
+v 24.692303 -11.008053 19.712708
+v 21.098881 -13.082272 20.094118
+v 24.661165 -6.375411 21.134802
+v 26.236216 -6.092238 15.336308
+v 21.509342 -12.401914 15.370428
+v 18.963205 -3.483418 12.304599
+v 21.800573 -4.939500 15.745810
+v 1.920824 -29.876616 15.664814
+v 6.503211 -22.519501 16.914911
+v 7.756294 -26.548792 12.504924
+v 12.373317 -30.331326 13.897794
+v 6.961779 -31.440474 12.794598
+v 6.653064 -24.537306 23.416155
+v 7.047717 -30.885683 24.353041
+v 11.213727 -29.932859 25.052618
+v 1.481550 -28.946180 20.623463
+v 13.032862 -24.780552 15.023675
+v 18.512293 -19.128895 19.659231
+v 14.878583 -18.994576 9.368382
+v 16.297819 -21.089434 21.421986
+v 12.863385 -14.312878 27.956732
+v 12.849613 -24.918884 23.950907
+v 19.052221 -18.128923 23.528669
+v 17.840883 -16.959543 20.954525
+v 7.721829 -20.685816 12.375637
+v 2.692099 -35.607121 13.021980
+v 13.810658 -34.493698 11.373639
+v 12.986875 -41.732285 10.040227
+v 3.184423 -41.658894 25.635220
+v 5.125894 -45.547562 23.724890
+v 8.980864 -43.054161 27.022717
+v 15.423323 -43.972950 26.255270
+v 12.117069 -47.304020 23.635054
+v 15.377462 -36.897743 26.000687
+v 2.953060 -40.166664 10.811060
+v 7.494678 -47.185505 14.545302
+v 2.590407 -43.739830 14.077184
+v 51.648987 -32.096954 12.447517
+v 54.149975 -33.345398 19.593710
+v 39.163303 -34.490200 23.470026
+v 43.952961 -37.913185 33.311733
+v 42.212021 -30.621904 22.970434
+v 39.066399 -42.491398 26.281698
+v 53.753803 -38.317574 30.712576
+v 49.845421 -30.871805 26.485779
+v 51.399380 -45.699734 10.188414
+v 47.700748 -38.817028 2.614275
+v 38.286346 -35.291550 13.221107
+v 37.845669 -42.342354 10.963897
+v 42.038383 -30.425079 14.298316
+v 13.245769 -46.732723 14.205633
+v 9.736148 -50.520622 13.528756
+v 7.384904 -49.586498 23.197527
+v 14.800404 -52.139919 18.903181
+v -7.811834 -35.470352 17.615807
+v -4.456628 -29.150898 17.851286
+v -2.798553 -35.285934 12.466820
+v -3.746229 -33.168358 24.304583
+v 1.984330 -35.948078 24.157682
+v -7.404144 -35.999741 20.923605
+v 28.157717 -53.608944 22.400635
+v 26.977524 -52.598415 13.049956
+v 33.552643 -51.894318 16.162474
+v 32.504086 -48.823231 23.956696
+v 31.877079 -44.802273 26.086206
+v 29.367491 -43.694912 29.450382
+v 28.566246 -48.574947 11.502800
+v 33.115898 -47.055805 12.686707
+v 24.206554 -39.593639 4.270044
+v 27.548977 -45.541843 6.612158
+v 15.393753 -43.690216 11.271212
+v 30.908010 -38.156868 26.637539
+v 27.162384 -34.275162 21.994907
+v 25.159807 -51.111664 26.578672
+v 20.757282 -44.062077 33.331715
+v 22.252340 -35.465645 28.516508
+v 31.252834 -40.715645 10.509001
+v 26.927588 -34.082474 15.359171
+v 19.656054 -36.053593 9.639797
+v 45.765636 -13.973154 27.862347
+v 46.415920 -8.703913 23.003519
+v 36.929607 -14.307747 25.120790
+v 42.108009 -17.975418 26.418495
+v 37.027626 -17.187891 11.322680
+v 41.904827 -7.746933 12.069323
+v 43.418411 -12.615541 10.889720
+v 31.705950 -0.889089 21.311972
+v 31.596783 0.173674 16.887688
+v 32.879227 -3.863622 16.099096
+v 56.598171 44.222664 14.135714
+v 56.126579 41.685612 24.097790
+v 46.016529 51.054924 17.982958
+v 41.457779 43.755310 17.495853
+v 45.744934 7.004910 8.486133
+v 47.950413 2.914732 9.144629
+v 39.484081 -0.296449 3.515921
+v 39.492188 6.289592 31.046570
+v 34.259609 -5.722099 24.223930
+v 40.802071 -0.616874 34.230507
+v 48.363464 -3.229798 24.156942
+v 43.601437 -6.735396 25.488052
+v 47.918850 3.330933 28.374479
+v 31.612331 2.911034 12.928380
+v 36.470207 8.474887 12.911393
+v 21.732849 29.642706 10.338936
+v 25.993967 33.840034 11.623634
+v 26.784376 30.821098 30.164936
+v 23.366001 37.263168 21.464516
+v 29.125948 32.332874 23.209608
+v 24.842190 22.159437 12.758190
+v 37.656689 27.913548 13.499913
+v 33.509411 16.934435 15.837155
+v 32.151718 -22.648123 15.113968
+v 37.990620 -22.384092 10.205639
+v 25.069052 18.695292 9.179921
+v 30.055744 7.532913 13.873595
+v 20.188122 11.596370 9.113315
+v 29.900843 16.979473 30.097618
+v 32.693932 10.153449 14.913280
+v 34.166367 -15.722364 23.131659
+v 36.833443 -11.025159 22.317991
+v 35.003426 -14.101405 14.965216
+v 34.727409 -31.472963 23.933300
+v 34.842621 -32.087627 13.601885
+v 15.901428 18.893017 3.795186
+v 15.133305 15.761583 32.886993
+v 11.565284 11.158407 25.684263
+v 19.438553 8.925119 23.790083
+v 21.500917 10.431974 27.603918
+v 24.985023 19.122496 25.926376
+v 12.856858 10.261971 11.739075
+v 20.020798 8.643314 13.859782
+v 19.576733 -57.512779 21.695282
+v 13.490202 -51.342026 16.888437
+v 17.947104 -50.731331 11.141426
+v 57.236275 20.636795 21.096426
+v 54.446712 17.739677 12.818709
+v 51.168236 23.226536 5.362507
+v 47.641693 25.705559 31.127163
+v 51.583134 16.009533 26.750132
+v 50.932129 26.958969 30.104025
+v 54.485348 28.484575 16.122448
+v 48.724552 25.160673 7.357959
+v 33.818760 45.855556 19.719469
+v 31.911919 39.998985 11.155024
+v 27.664740 37.545280 22.970465
+v 27.974972 37.779976 14.921725
+v 2.926424 -52.042320 19.256142
+v 2.453739 -49.965088 15.737546
+v -10.847728 -40.711979 11.410068
+v -5.625197 -38.576065 9.028985
+v -4.954663 -45.298546 4.473378
+v -2.641075 -38.065506 30.121859
+v -12.297677 -43.304993 25.197155
+v -1.691778 -52.475380 28.042377
+v 53.963322 -0.367301 20.987150
+v 51.374592 11.624549 23.695490
+v 54.537560 10.690503 17.452641
+v 52.286762 -1.178828 14.588678
+v 50.660282 12.274777 13.607096
+v 42.872883 -22.189606 23.315578
+v 51.633175 -18.263119 18.256735
+v 46.704170 -17.113817 9.401239
+v 42.408493 -19.533556 12.798364
+v 28.367151 -15.548941 12.962204
+v 23.669218 -21.325438 12.904368
+v 31.624334 -14.397182 18.918894
+v 22.248281 -22.053343 23.715767
+v 28.701342 -22.244793 24.238064
+v 30.156694 -15.058847 24.720676
+v 19.564251 -20.750628 16.027233
+v 32.131397 -28.941681 14.425417
+v 36.059933 -21.842176 26.676575
+v 32.015545 -23.098236 22.494310
+v 40.431133 -22.674383 25.921864
+v 42.732422 -22.421053 14.295007
+v 39.461468 -57.058651 21.282156
+v 44.349010 -49.528809 11.572008
+v 17.582390 -29.486710 5.123083
+v 21.060499 -24.410078 10.117791
+v 25.538137 -27.084028 9.732551
+v 19.692909 -24.665619 32.741123
+v 27.650806 -28.533953 26.707747
+v 24.159296 2.704016 5.113870
+v 26.568132 -0.679316 29.290709
+v 23.797688 6.485804 31.892443
+v 37.843567 28.449272 23.734009
+v 31.025274 -32.650818 21.600431
+v 30.326784 -32.667740 18.699930
+v 48.608345 -24.857819 9.821372
+v 57.765800 -26.176018 19.778214
+v 1.403341 -17.219044 21.724312
+v 13.439794 -10.748627 24.901556
+v 8.840998 -11.417746 22.630836
+v 7.738081 8.749319 17.479738
+v -37.185631 -34.144539 24.161514
+v -29.856485 -30.552607 12.633641
+v -25.021296 38.902241 17.149893
+v -8.743529 41.291073 22.740833
+v -50.564018 12.432913 12.260192
+v -16.160103 45.476627 11.656381
+v 10.870459 -24.197359 22.217205
+v 30.336288 -32.664650 18.699944
+vn 0.0392 0.1773 -0.9834
+vn -0.1466 -0.1555 0.9769
+vn -0.4352 -0.5060 0.7447
+vn 0.2498 -0.2288 0.9409
+vn 0.5094 0.5063 0.6958
+vn -0.2517 0.2345 0.9390
+vn 0.5373 -0.4626 -0.7052
+vn 0.0792 -0.3173 -0.9450
+vn 0.2907 0.5635 -0.7733
+vn -0.4624 -0.1287 -0.8773
+vn -0.3393 0.5626 0.7539
+vn -0.4372 -0.0205 0.8992
+vn 0.5982 -0.5174 -0.6120
+vn 0.1018 -0.2331 -0.9671
+vn 0.8068 0.3044 -0.5063
+vn 0.5166 -0.8259 -0.2259
+vn 0.5580 -0.8218 -0.1150
+vn 0.9789 -0.0041 -0.2045
+vn 0.0969 -0.7754 -0.6240
+vn 0.0867 -0.7518 -0.6536
+vn 0.5803 0.2311 -0.7809
+vn -0.3415 -0.0130 0.9398
+vn -0.9181 -0.3068 0.2508
+vn -0.1484 -0.5272 0.8367
+vn -0.4343 -0.0021 0.9008
+vn -0.1887 -0.9780 0.0887
+vn -0.3793 -0.6179 -0.6887
+vn -0.2943 -0.6045 -0.7402
+vn 0.9866 -0.0578 -0.1523
+vn -0.6092 -0.3111 -0.7295
+vn 0.8949 -0.1928 0.4024
+vn 0.6560 0.3674 -0.6593
+vn 0.6808 0.6386 0.3587
+vn 0.4364 -0.4005 0.8057
+vn 0.6537 -0.3347 0.6788
+vn 0.2519 -0.9665 0.0499
+vn 0.7770 -0.6035 0.1791
+vn 0.9301 -0.3079 -0.2002
+vn 0.5998 -0.2712 -0.7528
+vn 0.2167 0.6131 -0.7597
+vn -0.7318 0.2129 -0.6474
+vn -0.8405 -0.0625 0.5382
+vn -0.7259 0.0101 0.6878
+vn 0.0555 0.9596 0.2758
+vn -0.7923 -0.4054 -0.4560
+vn -0.6971 0.1561 -0.6998
+vn -0.7939 0.4659 -0.3907
+vn -0.7961 0.4947 -0.3485
+vn -0.4853 0.1158 0.8667
+vn -0.1564 -0.6133 0.7742
+vn -0.3393 0.4551 0.8233
+vn 0.9525 -0.0780 0.2942
+vn 0.9487 0.1971 0.2474
+vn 0.6787 0.6168 0.3987
+vn -0.2895 0.9127 0.2884
+vn 0.5465 -0.2142 -0.8096
+vn 0.5257 0.3976 -0.7521
+vn 0.4425 0.4912 -0.7503
+vn -0.7267 -0.2396 -0.6438
+vn 0.7218 -0.5963 -0.3514
+vn 0.4610 -0.6420 0.6127
+vn 0.2213 0.6194 0.7532
+vn 0.7580 -0.5773 -0.3035
+vn 0.4191 -0.4334 -0.7978
+vn 0.4119 -0.4353 -0.8005
+vn 0.4125 -0.4352 -0.8003
+vn 0.4130 0.2631 -0.8719
+vn -0.6224 0.4370 -0.6494
+vn -0.2047 -0.5442 -0.8136
+vn -0.2046 -0.5443 -0.8135
+vn -0.2047 -0.5445 -0.8134
+vn 0.6502 0.5084 0.5646
+vn -0.2480 -0.2514 0.9356
+vn -0.0359 0.5676 0.8225
+vn 0.4748 0.6970 -0.5374
+vn 0.1701 -0.1524 -0.9736
+vn -0.0671 -0.0444 0.9968
+vn 0.6328 -0.3266 0.7020
+vn -0.4581 0.2365 0.8569
+vn 0.3968 -0.9179 0.0020
+vn -0.8054 0.5042 -0.3117
+vn 0.4197 -0.4333 -0.7976
+vn -0.7250 0.0716 -0.6850
+vn -0.4647 0.2121 -0.8597
+vn -0.3872 0.6698 -0.6335
+vn 0.1006 0.9143 0.3923
+vn -0.0793 0.9644 0.2524
+vn 0.1154 0.1711 -0.9785
+vn -0.2619 -0.4696 0.8431
+vn 0.0145 -0.7738 0.6332
+vn 0.4906 -0.5599 0.6677
+vn -0.1874 -0.9509 0.2462
+vn -0.2532 -0.6861 -0.6820
+vn 0.1967 -0.7459 -0.6363
+vn 0.2615 -0.7182 -0.6449
+vn 0.4907 -0.3431 -0.8010
+vn 0.5870 0.0393 -0.8086
+vn -0.9745 0.1942 -0.1123
+vn 0.6553 0.1064 -0.7479
+vn 0.9512 -0.1115 -0.2877
+vn 0.2592 0.5100 0.8202
+vn 0.0690 -0.1574 0.9851
+vn 0.5731 -0.0240 0.8191
+vn 0.7510 0.2393 0.6154
+vn -0.3431 0.3171 0.8841
+vn 0.1131 -0.9850 0.1302
+vn -0.3492 0.0903 -0.9327
+vn -0.0608 -0.6797 0.7310
+vn -0.8542 0.0570 -0.5168
+vn -0.5724 0.6323 0.5221
+vn 0.1459 -0.7752 0.6146
+vn -0.8008 -0.3322 0.4983
+vn 0.2909 -0.7231 0.6264
+vn 0.3673 0.6016 0.7093
+vn -0.4365 0.7382 0.5143
+vn -0.3065 -0.9517 -0.0154
+vn 0.8958 -0.4386 -0.0721
+vn 0.9401 0.3408 -0.0026
+vn 0.1701 -0.8470 -0.5037
+vn 0.4835 -0.7078 -0.5150
+vn -0.8298 -0.2471 -0.5003
+vn 0.1124 0.6603 -0.7425
+vn -0.4692 0.6971 -0.5421
+vn -0.2805 0.4465 -0.8497
+vn -0.0024 0.9651 -0.2620
+vn -0.2297 0.3322 0.9148
+vn 0.5809 0.1330 0.8030
+vn 0.6072 -0.0533 0.7927
+vn -0.3587 0.1140 0.9265
+vn 0.6603 -0.5238 0.5381
+vn 0.0411 -0.7559 0.6534
+vn 0.7638 0.6082 0.2163
+vn -0.5820 0.7399 0.3375
+vn -0.7421 0.6468 0.1758
+vn 0.1453 -0.8249 -0.5463
+vn -0.7334 0.0794 -0.6752
+vn 0.1912 -0.6662 -0.7208
+vn 0.4722 -0.4629 -0.7502
+vn 0.5389 0.2978 -0.7879
+vn -0.7270 -0.0120 -0.6865
+vn 0.0268 0.5901 -0.8068
+vn -0.3471 0.4157 -0.8407
+vn 0.5137 0.1312 -0.8479
+vn 0.0257 -0.8332 0.5524
+vn -0.8628 -0.1172 0.4918
+vn 0.4163 0.4349 0.7984
+vn -0.0053 -0.9451 0.3266
+vn 0.1946 -0.8670 -0.4587
+vn 0.7578 0.3125 -0.5729
+vn -0.7347 -0.0856 -0.6729
+vn 0.4660 -0.0752 0.8816
+vn 0.2459 0.6145 0.7496
+vn 0.7927 0.2138 0.5708
+vn 0.8237 -0.2188 0.5231
+vn -0.3437 -0.3723 0.8621
+vn 0.1040 -0.8094 -0.5779
+vn -0.0965 -0.7642 -0.6377
+vn 0.4165 -0.6352 -0.6504
+vn 0.8755 0.1653 -0.4541
+vn -0.6050 0.2586 -0.7530
+vn -0.6057 0.2587 -0.7525
+vn -0.6048 0.2587 -0.7531
+vn -0.6097 0.2585 -0.7493
+vn 0.4243 -0.4892 0.7620
+vn -0.8447 0.4613 -0.2715
+vn -0.7943 0.4353 -0.4237
+vn 0.0407 0.4257 0.9039
+vn -0.7201 0.5171 0.4626
+vn -0.7066 0.7059 0.0498
+vn -0.8430 0.5374 0.0245
+vn -0.4521 -0.2477 0.8569
+vn -0.7270 -0.3554 0.5875
+vn -0.9930 -0.0954 -0.0698
+vn -0.5417 -0.1334 -0.8299
+vn -0.4404 -0.3008 -0.8459
+vn 0.3057 0.3388 -0.8898
+vn 0.6700 -0.2072 0.7129
+vn -0.2378 0.5760 0.7821
+vn -0.1745 0.5820 0.7942
+vn 0.6312 -0.1795 -0.7545
+vn 0.4073 -0.5221 -0.7494
+vn -0.3441 0.6821 -0.6452
+vn 0.5339 -0.3936 -0.7484
+vn -0.1407 -0.8173 0.5588
+vn 0.4016 0.2936 0.8674
+vn 0.5037 0.5834 0.6371
+vn -0.5563 -0.1522 0.8169
+vn 0.1557 0.9778 0.1401
+vn -0.6349 -0.4725 -0.6113
+vn 0.6845 0.2130 -0.6972
+vn -0.7997 0.0216 -0.6000
+vn 0.2200 -0.2304 -0.9479
+vn -0.2413 0.2351 0.9415
+vn -0.7047 -0.2009 -0.6805
+vn -0.5446 0.0535 -0.8370
+vn 0.0423 -0.0252 -0.9988
+vn 0.0032 0.4993 -0.8664
+vn 0.0047 0.4973 -0.8675
+vn 0.0049 0.4971 -0.8677
+vn -0.0769 -0.8330 0.5479
+vn -0.8516 -0.2711 0.4487
+vn 0.2840 -0.6812 0.6748
+vn -0.0363 0.5779 0.8153
+vn -0.4862 -0.5376 -0.6889
+vn -0.3414 -0.5230 -0.7810
+vn 0.3035 -0.7463 -0.5924
+vn 0.5020 -0.0440 0.8637
+vn 0.1505 0.9018 0.4050
+vn 0.4144 0.3826 -0.8258
+vn -0.4065 -0.4493 0.7956
+vn -0.3561 -0.2419 0.9026
+vn -0.1672 -0.1743 0.9704
+vn 0.3404 -0.2272 -0.9124
+vn 0.0854 0.1850 0.9790
+vn 0.4883 0.7134 0.5027
+vn -0.4456 -0.0469 0.8940
+vn -0.8613 0.2189 0.4586
+vn -0.8699 0.3348 0.3621
+vn -0.1437 0.7037 -0.6958
+vn 0.0541 0.8609 -0.5058
+vn -0.7308 0.4719 -0.4932
+vn -0.2064 -0.0795 -0.9752
+vn -0.3266 -0.2332 0.9159
+vn -0.5931 -0.7902 -0.1540
+vn -0.0979 -0.1982 -0.9753
+vn -0.7915 0.6112 -0.0018
+vn 0.2879 0.9158 -0.2799
+vn -0.5052 0.5765 0.6421
+vn 0.1129 0.4315 0.8950
+vn 0.6303 0.6891 0.3576
+vn -0.6003 0.7526 0.2705
+vn 0.1937 0.4609 -0.8661
+vn 0.2243 0.4174 -0.8806
+vn 0.0315 0.1129 -0.9931
+vn -0.9798 0.1746 -0.0978
+vn -0.5838 -0.6688 0.4604
+vn 0.2959 0.1969 0.9347
+vn -0.3026 0.5149 0.8021
+vn -0.8595 0.0209 0.5106
+vn -0.9901 -0.0345 -0.1363
+vn -0.9901 -0.0365 -0.1358
+vn -0.9901 -0.0347 -0.1362
+vn -0.0997 -0.6713 -0.7344
+vn 0.7961 0.2908 -0.5307
+vn -0.3174 0.5601 -0.7652
+vn -0.5906 0.4459 -0.6726
+vn -0.6198 0.2140 -0.7550
+vn -0.5860 0.7910 -0.1759
+vn -0.0719 0.0959 -0.9928
+vn 0.1105 -0.2592 0.9595
+vn -0.0503 0.3534 0.9341
+vn 0.7320 -0.3970 0.5537
+vn 0.6169 -0.3387 -0.7104
+vn 0.2569 0.5458 -0.7976
+vn 0.4645 0.0296 0.8851
+vn 0.2933 0.2519 0.9222
+vn -0.0690 0.9729 0.2207
+vn 0.3863 0.9041 -0.1825
+vn 0.4709 0.0098 -0.8821
+vn 0.1685 0.7956 -0.5819
+vn -0.9216 0.2449 0.3013
+vn 0.5333 -0.8147 -0.2277
+vn -0.4518 -0.5686 0.6874
+vn -0.6621 0.1682 0.7303
+vn -0.3675 -0.7471 -0.5539
+vn 0.2596 -0.7879 -0.5585
+vn -0.5628 -0.4117 -0.7168
+vn -0.1537 -0.4545 -0.8774
+vn -0.9772 0.1569 -0.1430
+vn -0.3637 -0.3466 0.8646
+vn -0.7826 0.1043 0.6137
+vn -0.9683 0.1403 0.2067
+vn -0.9586 0.1082 0.2634
+vn -0.9707 -0.0130 -0.2398
+vn -0.8655 -0.3561 0.3523
+vn 0.4507 0.6810 0.5771
+vn 0.0731 -0.5002 0.8628
+vn 0.4605 0.5355 -0.7079
+vn 0.4014 0.6515 -0.6438
+vn -0.6319 -0.2361 -0.7382
+vn -0.3596 0.4480 0.8185
+vn -0.6147 0.3409 0.7113
+vn 0.4737 0.6396 -0.6053
+vn -0.2411 0.2432 -0.9395
+vn -0.2213 0.8156 0.5346
+vn -0.8783 0.4351 -0.1982
+vn -0.4998 0.0060 0.8661
+vn -0.5987 -0.6730 -0.4343
+vn -0.0249 -0.6778 0.7349
+vn -0.9107 -0.3969 0.1146
+vn -0.9112 -0.3955 0.1156
+vn -0.9081 -0.4040 0.1098
+vn -0.9074 -0.4061 0.1084
+vn -0.2539 -0.5446 -0.7994
+vn 0.8589 -0.3856 0.3372
+vn 0.1931 -0.4499 0.8719
+vn 0.0456 -0.7409 0.6701
+vn 0.5992 -0.4930 -0.6308
+vn -0.5748 0.1469 0.8050
+vn 0.3119 0.9333 0.1778
+vn 0.4118 0.9004 0.1406
+vn 0.2512 0.8164 -0.5200
+vn 0.3613 0.4942 -0.7907
+vn -0.5084 0.0036 -0.8611
+vn -0.1843 0.2084 0.9605
+vn 0.2722 -0.6023 -0.7505
+vn -0.1332 -0.9794 -0.1520
+vn 0.3175 0.5826 -0.7482
+vn 0.1655 -0.5148 -0.8412
+vn 0.9882 -0.0859 -0.1270
+vn 0.9873 -0.0864 -0.1333
+vn 0.9877 -0.0863 -0.1301
+vn 0.5913 0.7511 0.2935
+vn 0.1360 0.1093 0.9847
+vn 0.2928 0.5269 0.7979
+vn 0.4184 -0.8115 0.4079
+vn 0.9882 -0.0862 -0.1268
+vn 0.2070 -0.5704 -0.7949
+vn 0.4862 0.7109 -0.5082
+vn 0.4732 0.3292 -0.8171
+vn 0.2135 -0.2711 -0.9386
+vn 0.1543 -0.2997 -0.9415
+vn 0.2113 -0.4039 0.8901
+vn 0.1760 -0.2114 0.9614
+vn 0.3291 -0.3272 -0.8858
+vn 0.4198 -0.2042 -0.8843
+vn -0.4848 0.3480 -0.8024
+vn -0.3197 0.0428 0.9465
+vn -0.5223 -0.0454 0.8516
+vn -0.3815 0.2606 0.8869
+vn -0.1337 0.9661 0.2210
+vn -0.3206 0.9471 -0.0122
+vn -0.5980 0.2175 -0.7714
+vn -0.2767 0.7310 -0.6238
+vn 0.7489 0.6597 -0.0624
+vn 0.5201 0.8270 -0.2134
+vn -0.4474 -0.2023 -0.8711
+vn -0.1203 -0.4684 0.8753
+vn 0.5450 -0.2603 -0.7970
+vn 0.1201 -0.2380 0.9638
+vn 0.2660 -0.5440 -0.7958
+vn 0.2121 0.7106 -0.6708
+vn -0.0555 0.0702 -0.9960
+vn -0.1941 -0.3139 0.9294
+vn 0.1076 -0.2277 0.9678
+vn 0.4930 -0.3951 -0.7752
+vn -0.7622 -0.1896 -0.6190
+vn -0.1138 -0.0779 0.9904
+vn 0.9103 -0.1116 0.3986
+vn 0.2825 -0.2076 -0.9365
+vn 0.5382 -0.0879 -0.8382
+vn -0.2249 0.1222 -0.9667
+vn -0.1857 0.6087 -0.7714
+vn 0.2909 0.0278 0.9564
+vn 0.2284 0.1363 0.9640
+vn -0.5879 -0.2112 -0.7809
+vn -0.8722 0.1438 -0.4675
+vn 0.6891 0.2079 -0.6943
+vn 0.5854 -0.2567 -0.7691
+vn -0.6011 0.7044 0.3776
+vn 0.5574 -0.2746 0.7835
+vn 0.4368 0.8518 0.2893
+vn -0.2451 -0.4148 0.8763
+vn -0.7324 0.1710 0.6590
+vn -0.9799 0.1164 0.1618
+vn -0.6858 0.7171 0.1244
+vn -0.1877 0.9006 -0.3921
+vn 0.4323 0.1437 -0.8902
+vn -0.2337 0.7910 -0.5654
+vn -0.8357 0.2189 -0.5036
+vn -0.0265 -0.5660 0.8240
+vn 0.5875 -0.4340 0.6830
+vn 0.8407 0.3750 0.3905
+vn -0.7747 0.0874 0.6262
+vn -0.6547 0.1451 0.7419
+vn 0.1204 -0.7076 -0.6963
+vn 0.7971 -0.4321 -0.4218
+vn 0.8707 -0.2640 -0.4149
+vn 0.7938 0.2821 -0.5389
+vn 0.2063 0.6766 -0.7069
+vn -0.5541 0.0718 -0.8293
+vn -0.2004 -0.9795 0.0198
+vn 0.1306 0.3033 -0.9439
+vn -0.0738 0.0782 0.9942
+vn -0.6877 0.3330 -0.6451
+vn -0.0197 -0.3687 -0.9293
+vn -0.2411 -0.1211 0.9629
+vn -0.4058 -0.1399 0.9032
+vn -0.8142 0.3643 0.4520
+vn -0.5364 -0.2552 -0.8044
+vn 0.0498 0.5042 -0.8622
+vn -0.5447 -0.2778 0.7913
+vn -0.5425 -0.2722 0.7947
+vn -0.5451 -0.2785 0.7908
+vn 0.4862 0.4455 0.7518
+vn 0.0527 0.8079 0.5869
+vn 0.0525 0.8075 0.5875
+vn 0.0512 0.8058 0.5900
+vn 0.7916 0.4242 0.4397
+vn 0.4797 0.4033 -0.7792
+vn -0.3815 0.3980 -0.8343
+vn 0.4054 -0.4247 -0.8095
+vn 0.0254 -0.2518 0.9674
+vn 0.0715 -0.4389 0.8957
+vn 0.0455 -0.1989 0.9790
+vn 0.3993 -0.4283 -0.8106
+vn 0.7608 -0.2426 0.6019
+vn 0.4269 -0.5595 -0.7104
+vn -0.7838 0.0930 -0.6140
+vn -0.9010 0.1301 -0.4139
+vn -0.2615 0.7945 -0.5481
+vn -0.2612 0.7945 -0.5482
+vn -0.2545 0.7963 -0.5487
+vn 0.2102 0.7989 0.5636
+vn -0.0003 0.2715 0.9624
+vn -0.5594 0.0676 0.8261
+vn 0.2425 0.5094 -0.8257
+vn -0.1788 -0.8011 -0.5712
+vn 0.6669 -0.0289 0.7446
+vn 0.9781 -0.0255 -0.2066
+vn 0.4002 0.5886 -0.7024
+vn 0.1043 0.4405 0.8917
+vn -0.3463 0.0433 0.9371
+vn -0.2196 -0.1585 0.9626
+vn 0.2171 -0.3861 -0.8965
+vn -0.0262 0.4391 -0.8981
+vn -0.3014 -0.8587 0.4145
+vn -0.9749 -0.0690 0.2115
+vn -0.9621 -0.1861 0.1992
+vn -0.7258 0.6774 -0.1201
+vn -0.2719 -0.7437 -0.6107
+vn -0.1129 0.3963 0.9112
+vn -0.4583 -0.2715 0.8463
+vn -0.4814 -0.2922 0.8264
+vn -0.9834 -0.0353 0.1778
+vn -0.7533 -0.2564 -0.6056
+vn -0.5847 -0.1067 -0.8042
+vn -0.4963 -0.1564 -0.8539
+vn 0.9922 -0.0998 -0.0747
+vn 0.1703 -0.5428 0.8224
+vn 0.5006 -0.6644 0.5550
+vn 0.9488 -0.1592 0.2729
+vn -0.5198 -0.6697 0.5304
+vn -0.5387 -0.6092 0.5819
+vn 0.5202 -0.7580 0.3934
+vn 0.2841 -0.9097 0.3028
+vn -0.5697 -0.4354 -0.6971
+vn -0.0262 -0.4134 -0.9102
+vn -0.7226 0.3452 -0.5990
+vn -0.1522 -0.4810 -0.8634
+vn 0.3389 0.7556 0.5606
+vn 0.7874 -0.2248 0.5740
+vn -0.4659 -0.4053 0.7866
+vn 0.5896 -0.4627 0.6621
+vn 0.7570 0.3582 0.5465
+vn -0.2309 0.7598 0.6077
+vn -0.3477 0.6816 0.6438
+vn 0.6844 -0.2788 -0.6737
+vn 0.7435 -0.1909 -0.6409
+vn 0.8104 0.2423 -0.5334
+vn -0.3835 0.7763 -0.5003
+vn -0.1659 0.0453 0.9851
+vn 0.2779 -0.2788 0.9193
+vn 0.2855 -0.2722 0.9189
+vn 0.2763 -0.2797 0.9195
+vn 0.2790 -0.3166 0.9066
+vn 0.2763 -0.2803 0.9193
+vn 0.9634 -0.0728 0.2581
+vn 0.0729 -0.9880 -0.1360
+vn -0.0324 -0.3332 -0.9423
+vn 0.7719 0.0019 -0.6357
+vn -0.0781 0.0531 -0.9955
+vn -0.6141 0.4879 -0.6203
+vn 0.2171 -0.0928 -0.9717
+vn -0.1933 0.1315 0.9723
+vn -0.5322 0.0911 0.8417
+vn -0.6998 0.6775 0.2264
+vn 0.0664 0.7459 -0.6627
+vn 0.9192 0.2273 -0.3216
+vn 0.5520 -0.8082 -0.2054
+vn 0.4111 -0.3226 0.8526
+vn 0.5730 0.8134 0.0999
+vn -0.1020 -0.3514 0.9307
+vn 0.8714 -0.4557 -0.1818
+vn -0.1495 -0.6663 -0.7305
+vn 0.3792 0.6391 -0.6691
+vn 0.3787 0.6399 -0.6687
+vn 0.3738 0.6485 -0.6631
+vn -0.3697 -0.0813 -0.9256
+vn -0.1630 0.1967 -0.9668
+vn -0.3167 -0.5409 0.7792
+vn 0.0048 -0.6212 0.7837
+vn 0.1233 0.0365 0.9917
+vn -0.0436 0.2075 0.9773
+vn -0.1872 0.1820 0.9653
+vn -0.3605 -0.6091 -0.7064
+vn -0.1476 -0.5373 -0.8304
+vn -0.0011 0.4363 -0.8998
+vn 0.0627 0.5332 -0.8436
+vn 0.8985 0.3598 -0.2516
+vn -0.6417 0.5718 0.5112
+vn -0.5217 -0.5022 0.6897
+vn 0.1840 -0.5905 0.7858
+vn 0.1794 -0.5871 0.7894
+vn 0.1791 -0.5871 0.7894
+vn 0.1792 -0.5867 0.7898
+vn 0.2326 0.5696 0.7883
+vn -0.2445 0.7726 0.5859
+vn 0.9491 -0.2455 0.1973
+vn 0.8155 -0.1715 -0.5528
+vn 0.8152 -0.1708 -0.5534
+vn 0.8155 -0.1717 -0.5527
+vn 0.8250 0.2541 -0.5049
+vn -0.6767 0.2625 -0.6879
+vn -0.5260 0.5493 -0.6494
+vn -0.0763 0.2435 -0.9669
+vn -0.4592 -0.3627 0.8109
+vn -0.4768 -0.7355 0.4813
+vn -0.6697 0.3793 -0.6384
+vn 0.1157 0.4288 -0.8960
+vn 0.0501 0.9824 -0.1799
+vn 0.2408 0.4511 0.8594
+vn -0.2750 0.8023 0.5298
+vn -0.8303 0.4275 0.3575
+vn -0.7070 0.6795 0.1959
+vn -0.1912 0.6178 -0.7628
+vn 0.1646 -0.9782 -0.1265
+vn 0.7471 -0.2164 0.6285
+vn 0.3624 -0.5691 0.7381
+vn 0.6311 -0.6890 0.3564
+vn 0.4189 -0.4653 -0.7798
+vn 0.3733 -0.5188 -0.7691
+vn -0.3741 -0.5141 -0.7718
+vn -0.4191 0.5011 0.7571
+vn -0.5494 -0.7309 0.4049
+vn 0.3609 0.4072 0.8390
+vn 0.5970 0.5791 0.5552
+vn 0.6680 0.0843 -0.7393
+vn 0.5341 0.6975 -0.4777
+vn -0.6675 0.2206 -0.7111
+vn 0.1299 0.8748 -0.4667
+vn 0.8147 0.3356 0.4729
+vn 0.0073 0.3426 0.9394
+vn -0.1905 0.1748 -0.9660
+vn -0.9546 -0.2940 -0.0471
+vn 0.1596 0.0812 -0.9838
+vn 0.0508 0.8052 0.5908
+vn 0.0330 0.5709 0.8203
+vn 0.5851 0.7788 0.2260
+vn -0.8429 0.5319 -0.0821
+vn 0.9112 -0.4076 -0.0607
+vn 0.0597 0.5584 -0.8274
+vn 0.5111 0.1391 -0.8482
+vn -0.6434 0.6667 0.3762
+vn -0.7766 -0.1851 0.6022
+vn 0.5809 -0.5677 0.5833
+vn 0.4223 0.7684 0.4808
+vn -0.5181 -0.7117 -0.4744
+vn -0.5180 -0.7122 -0.4738
+vn -0.5189 -0.7062 -0.4817
+vn 0.6077 -0.4111 -0.6795
+vn -0.7686 -0.3834 -0.5121
+vn -0.2284 0.6740 -0.7025
+vn -0.5736 0.4988 -0.6497
+vn -0.8781 0.0292 -0.4776
+vn 0.1842 0.1119 -0.9765
+vn -0.5401 0.5609 0.6275
+vn 0.5460 0.7615 0.3493
+vn -0.6406 -0.1528 0.7526
+vn -0.0729 -0.4059 -0.9110
+vn 0.4764 0.1533 -0.8658
+vn -0.0919 -0.2848 -0.9542
+vn -0.5210 0.6849 -0.5094
+vn 0.0566 -0.2283 -0.9719
+vn -0.6440 0.0448 -0.7637
+vn 0.3450 -0.2287 -0.9103
+vn 0.4025 -0.5257 0.7494
+vn 0.9099 -0.0044 0.4148
+vn 0.4605 -0.0384 0.8868
+vn 0.4849 -0.1460 -0.8623
+vn 0.6230 0.0316 -0.7816
+vn 0.3508 0.6838 -0.6398
+vn -0.8689 0.4949 0.0092
+vn 0.1378 0.2942 -0.9458
+vn -0.0005 -0.0828 0.9966
+vn -0.3890 0.5278 0.7551
+vn 0.1525 0.2767 -0.9488
+vn -0.2975 0.4295 -0.8527
+vn 0.4749 -0.3188 -0.8202
+vn -0.0948 -0.8169 0.5690
+vn -0.8413 -0.1572 0.5172
+vn -0.2903 -0.8259 0.4833
+vn 0.5939 -0.0836 0.8002
+vn 0.4582 0.3495 0.8173
+vn -0.6040 0.4614 0.6498
+vn -0.1535 -0.6393 -0.7535
+vn -0.0351 -0.8480 -0.5288
+vn 0.3843 0.6754 -0.6295
+vn 0.5135 0.5027 -0.6954
+vn -0.8374 -0.1797 -0.5162
+vn -0.3079 -0.3804 0.8721
+vn -0.3098 -0.3902 0.8671
+vn -0.3083 -0.3823 0.8711
+vn -0.3098 -0.3910 0.8667
+vn -0.7791 -0.6023 0.1737
+vn -0.7102 -0.3819 -0.5914
+vn 0.9342 0.0884 -0.3457
+vn -0.3820 -0.5048 0.7741
+vn -0.3846 -0.5132 0.7672
+vn -0.3824 -0.5062 0.7730
+vn 0.7577 -0.1495 0.6352
+vn 0.8449 0.4644 0.2654
+vn 0.9333 0.1106 -0.3417
+vn 0.2612 0.8331 -0.4876
+vn 0.0583 0.8180 -0.5723
+vn -0.3742 0.5648 0.7355
+vn -0.2029 0.6234 0.7551
+vn -0.6739 0.6712 -0.3089
+vn -0.6357 -0.1555 -0.7561
+vn 0.0047 0.8573 -0.5149
+vn 0.5330 -0.6953 -0.4821
+vn -0.5190 -0.7056 -0.4825
+vn 0.0131 -0.3326 0.9430
+vn -0.8949 -0.4434 0.0506
+vn -0.8919 -0.4497 0.0485
+vn -0.8916 -0.4502 0.0485
+vn -0.5158 0.4448 -0.7322
+vn 0.2667 0.5588 -0.7853
+vn -0.5928 0.6638 0.4560
+vn -0.4447 -0.5588 0.7000
+vn 0.5884 -0.0774 0.8049
+vn -0.4006 -0.1567 0.9027
+vn -0.3560 -0.2015 0.9125
+vn -0.4028 -0.7353 -0.5450
+vn 0.4970 -0.6360 -0.5903
+vn 0.7129 -0.3437 -0.6113
+vn 0.9925 0.0107 0.1219
+vn 0.7803 0.0273 0.6248
+vn 0.5983 -0.4042 0.6919
+vn 0.8937 0.0938 0.4388
+vn 0.9635 -0.1256 -0.2365
+vn 0.8402 0.3929 -0.3738
+vn 0.7059 0.0368 -0.7073
+vn 0.7084 0.0262 -0.7053
+vn 0.7086 0.0254 -0.7052
+vn -0.0023 0.6980 -0.7161
+vn 0.2734 -0.5376 0.7976
+vn 0.5891 -0.5400 0.6011
+vn 0.8726 0.1617 0.4608
+vn 0.8378 0.3475 -0.4212
+vn 0.4737 0.5686 -0.6726
+vn -0.5634 -0.1423 -0.8138
+vn -0.2395 0.2043 -0.9491
+vn 0.2370 0.8609 -0.4501
+vn -0.9186 0.3946 -0.0230
+vn 0.3738 0.8510 -0.3689
+vn -0.0812 -0.0186 0.9965
+vn -0.0935 -0.0478 0.9945
+vn -0.2497 0.6120 0.7504
+vn -0.5771 0.6064 0.5470
+vn -0.6892 -0.7147 0.1195
+vn 0.4487 0.8680 0.2125
+vn -0.2606 0.5917 0.7629
+vn -0.7988 -0.0273 -0.6010
+vn -0.6403 0.6562 -0.3992
+vn -0.2650 0.7806 -0.5661
+vn -0.4345 0.5164 0.7380
+vn -0.4959 0.7705 -0.4005
+vn 0.6932 0.3136 0.6489
+vn 0.2596 0.4333 -0.8630
+vn 0.1134 0.6696 -0.7340
+vn -0.6434 0.0853 -0.7608
+vn -0.6990 -0.1048 0.7074
+vn 0.1545 -0.2904 0.9444
+vn 0.1001 -0.3266 0.9398
+vn 0.7350 -0.0851 0.6727
+vn 0.1748 -0.3753 -0.9103
+vn 0.6518 -0.0568 -0.7563
+vn -0.4524 -0.1603 -0.8773
+vn 0.8172 0.2836 -0.5017
+vn 0.1489 -0.9060 0.3962
+vn -0.3821 -0.9170 -0.1146
+vn 0.0089 -0.9690 -0.2469
+vn 0.5256 -0.7798 -0.3402
+vn -0.0213 -0.3251 0.9455
+vn -0.3626 -0.3113 0.8784
+vn -0.7263 -0.6672 0.1652
+vn -0.2063 -0.5831 -0.7858
+vn -0.1068 -0.7590 -0.6423
+vn -0.1423 -0.2107 -0.9671
+vn -0.8509 0.1997 -0.4859
+vn 0.2750 0.5719 -0.7728
+vn 0.5465 -0.3505 -0.7606
+vn -0.5366 0.7449 0.3963
+vn 0.5296 -0.1972 0.8250
+vn 0.0435 0.9563 0.2891
+vn -0.2395 -0.4024 0.8836
+vn -0.7868 -0.0609 0.6143
+vn 0.0885 0.1861 0.9785
+vn -0.3705 -0.6029 -0.7065
+vn 0.6304 -0.4065 -0.6613
+vn -0.3199 0.7671 -0.5561
+vn -0.3163 0.7686 -0.5561
+vn -0.3207 0.7668 -0.5560
+vn -0.3829 0.7537 -0.5342
+vn 0.9509 -0.1613 -0.2640
+vn 0.7909 -0.3880 0.4733
+vn -0.3853 -0.5151 0.7657
+vn 0.8088 -0.3616 0.4639
+vn -0.2251 -0.3619 -0.9046
+vn -0.6397 0.7647 -0.0774
+vn -0.8240 0.0245 -0.5660
+vn -0.8065 0.2362 -0.5420
+vn -0.1083 -0.8030 0.5861
+vn -0.6891 -0.1738 0.7035
+vn -0.3741 -0.4409 0.8159
+vn 0.6042 -0.0551 0.7950
+vn 0.5168 0.8117 0.2722
+vn 0.8126 -0.5496 0.1939
+vn -0.0000 -0.7580 -0.6522
+vn 0.7001 -0.4647 -0.5421
+vn 0.5254 -0.7009 -0.4825
+vn 0.6707 0.3587 -0.6492
+vn 0.0941 0.8437 -0.5285
+vn -0.8332 0.0049 0.5530
+vn -0.4968 -0.3738 0.7833
+vn -0.4814 -0.4214 0.7686
+vn 0.1810 0.2917 0.9393
+vn 0.3291 0.2716 0.9044
+vn 0.9633 0.0860 0.2542
+vn 0.8103 0.3720 0.4527
+vn -0.6490 -0.3871 -0.6550
+vn -0.3382 -0.4508 -0.8260
+vn 0.6277 0.4954 -0.6005
+vn 0.6699 0.4576 -0.5846
+vn 0.2655 0.5579 -0.7863
+vn 0.5936 0.0856 -0.8002
+vn 0.7715 -0.1381 0.6211
+vn 0.3787 -0.9215 -0.0858
+vn 0.6281 -0.6982 -0.3434
+vn 0.3878 -0.5296 -0.7544
+vn -0.2414 -0.4190 -0.8753
+vn 0.3982 0.4611 0.7930
+vn 0.7185 -0.3774 0.5842
+vn 0.2515 0.5037 0.8265
+vn -0.4184 -0.0044 0.9082
+vn 0.8353 -0.4119 -0.3643
+vn 0.7388 0.0670 -0.6706
+vn 0.6934 0.4256 -0.5814
+vn -0.8144 -0.4282 -0.3916
+vn 0.6298 0.4443 0.6371
+vn -0.3627 -0.0450 0.9308
+vn -0.4157 0.6297 0.6562
+vn -0.7822 -0.6000 -0.1682
+vn 0.9223 0.3716 -0.1064
+vn -0.7077 -0.6678 -0.2307
+vn -0.6185 -0.0133 -0.7856
+vn 0.8817 0.3777 -0.2827
+vn 0.3589 0.2593 -0.8966
+vn -0.0938 0.2117 0.9728
+vn 0.6206 -0.3048 -0.7224
+vn -0.4829 0.8423 -0.2395
+vn -0.3324 -0.0072 -0.9431
+vn 0.9675 -0.0061 -0.2527
+vn 0.5666 -0.2333 0.7903
+vn 0.7297 -0.3970 0.5567
+vn 0.4472 -0.3464 -0.8246
+vn 0.4196 -0.8953 -0.1497
+vn 0.2774 -0.7239 0.6317
+vn -0.5907 -0.7172 -0.3696
+vn -0.0619 -0.8440 -0.5328
+vn -0.9547 -0.2956 0.0331
+vn -0.5273 -0.0248 0.8493
+vn -0.8411 -0.2665 0.4706
+vn -0.9122 0.1478 0.3821
+vn -0.6245 -0.0992 -0.7747
+vn 0.0916 -0.6178 -0.7810
+vn -0.8086 -0.1453 -0.5701
+vn -0.2536 -0.9515 -0.1742
+vn -0.3668 0.2279 -0.9020
+vn 0.2937 -0.9123 0.2854
+vn -0.4878 -0.3253 -0.8101
+vn -0.1384 0.1408 -0.9803
+vn 0.6862 -0.4447 0.5757
+vn -0.3392 0.0989 0.9355
+vn 0.6969 -0.1676 0.6973
+vn 0.4070 0.3050 0.8610
+vn 0.5882 0.0798 0.8048
+vn -0.5689 -0.1302 0.8120
+vn -0.7957 -0.3877 -0.4653
+vn 0.3003 -0.4650 0.8328
+vn -0.3779 -0.9218 -0.0870
+vn 0.4040 -0.8945 0.1913
+vn 0.3029 -0.9520 0.0431
+vn 0.3235 -0.7720 -0.5472
+vn 0.6655 -0.6982 -0.2638
+vn 0.7548 -0.6554 -0.0272
+vn -0.3619 0.9105 0.2001
+vn -0.0842 0.5303 -0.8436
+vn -0.6942 -0.2754 0.6650
+vn 0.8376 0.5181 0.1733
+vn -0.2980 -0.9041 0.3063
+vn -0.2157 0.7177 -0.6621
+vn -0.2398 -0.5505 -0.7997
+vn 0.2089 -0.6543 0.7268
+vn 0.7119 -0.4913 -0.5019
+vn 0.0497 -0.0606 -0.9969
+vn 0.8951 0.0671 -0.4409
+vn -0.2598 0.8850 0.3864
+vn -0.8554 -0.0130 0.5179
+vn 0.0706 -0.9955 -0.0636
+vn 0.0193 -0.6376 -0.7701
+vn -0.2552 0.7013 -0.6657
+vn 0.3224 -0.0224 -0.9464
+vn 0.2151 -0.2766 0.9366
+vn 0.2096 -0.2822 0.9362
+vn 0.2150 -0.2761 0.9368
+vn -0.1927 0.9559 0.2215
+vn -0.0004 -0.7210 -0.6929
+vn -0.7873 -0.1919 0.5859
+vn 0.6059 -0.3456 0.7166
+vn 0.3382 0.6956 0.6339
+vn 0.8054 0.3403 0.4854
+vn -0.5239 -0.3298 0.7854
+vn -0.4704 -0.3764 -0.7981
+vn 0.1143 -0.8746 0.4711
+vn -0.2047 -0.5478 -0.8112
+vn 0.0313 -0.6985 -0.7149
+vn 0.2886 0.7859 -0.5469
+vn -0.6169 0.7600 0.2046
+vn -0.1795 0.1871 0.9658
+vn -0.2559 0.2773 0.9261
+vn 0.5562 -0.6233 0.5497
+vn 0.6758 0.0788 0.7329
+vn -0.0138 0.2409 0.9704
+vn -0.0382 0.8756 -0.4815
+vn 0.5785 -0.2275 -0.7833
+vn 0.2780 0.7224 -0.6331
+vn 0.4968 -0.4263 0.7559
+vn -0.4694 -0.0771 -0.8796
+vn -0.3010 -0.1474 -0.9422
+vn 0.6610 0.4524 0.5987
+vn -0.8165 -0.1498 0.5576
+vn -0.9887 0.0723 -0.1314
+vn 0.9838 -0.1772 -0.0279
+vn 0.7386 -0.6738 0.0213
+vn 0.7423 -0.6697 0.0216
+vn 0.7416 -0.6705 0.0217
+vn 0.7425 -0.6695 0.0218
+vn 0.5445 0.7019 0.4592
+vn 0.6134 0.7589 -0.2186
+vn -0.3851 0.3484 -0.8546
+vn -0.3088 0.3825 -0.8708
+vn -0.1815 0.4466 0.8761
+vn -0.2287 -0.6659 0.7101
+vn -0.3602 0.0412 -0.9320
+vn -0.9702 0.0907 -0.2245
+vn 0.7886 -0.2450 0.5639
+vn -0.5878 0.4014 0.7024
+vn -0.5873 -0.7940 0.1568
+vn 0.3979 -0.7713 -0.4967
+vn 0.7598 0.2301 -0.6080
+vn -0.6682 -0.5061 -0.5453
+vn -0.2504 0.7467 0.6163
+vn 0.7173 0.0051 -0.6968
+vn 0.5745 0.0142 -0.8184
+vn -0.6668 0.1693 0.7258
+vn 0.4547 -0.5813 0.6748
+vn 0.0123 0.7878 0.6158
+vn -0.5963 0.3808 0.7067
+vn -0.5814 -0.5669 0.5836
+vn 0.1202 0.8351 -0.5369
+vn 0.5864 -0.3889 0.7105
+vn 0.0031 0.4995 -0.8663
+vn 0.2066 -0.7710 0.6024
+vn -0.0930 -0.7293 -0.6779
+vn -0.1203 0.7140 -0.6898
+vn -0.0054 0.8932 -0.4496
+vn 0.2638 0.5618 0.7841
+vn -0.8843 0.0823 0.4597
+vn -0.6359 -0.4593 -0.6202
+vn 0.0650 0.8056 -0.5889
+vn 0.3842 -0.2972 0.8741
+vn -0.0326 -0.4403 0.8973
+vn -0.6246 0.2726 0.7318
+vn -0.1086 -0.1406 -0.9841
+vn -0.0130 0.6042 0.7967
+vn -0.7736 0.2185 0.5948
+vn 0.5932 0.0499 -0.8035
+vn -0.5232 0.3744 -0.7656
+vn 0.3359 -0.0653 -0.9396
+vn 0.3107 0.0840 -0.9468
+vn 0.2764 0.7490 0.6021
+vn 0.6296 -0.0894 0.7718
+vn 0.6824 -0.1822 0.7079
+vn -0.4952 0.2541 0.8308
+vn 0.8589 -0.3023 -0.4134
+vn -0.1049 0.4827 -0.8695
+vn -0.5422 0.7000 -0.4647
+vn -0.2460 -0.5739 -0.7811
+vn 0.5076 -0.7225 0.4694
+vn 0.6807 -0.5554 -0.4776
+vn -0.8084 -0.0779 -0.5835
+vn -0.2035 -0.5582 0.8044
+vn 0.0272 0.3694 0.9289
+vn -0.4587 0.3385 -0.8216
+vn -0.9901 -0.0372 -0.1356
+vn -0.5092 -0.7617 -0.4006
+vn 0.0966 -0.7605 0.6421
+vn 0.7985 0.3846 0.4632
+vn -0.8398 0.0010 0.5429
+vn -0.5720 0.5579 -0.6013
+vn 0.4586 0.0777 0.8852
+vn 0.6618 -0.0291 -0.7492
+vn -0.1132 0.3372 -0.9346
+vn 0.3890 0.1057 -0.9152
+vn 0.8695 0.4263 -0.2496
+vn -0.5031 0.8630 -0.0465
+vn -0.2215 -0.1681 0.9606
+vn -0.2994 0.2301 0.9260
+vn -0.5129 0.8561 0.0632
+vn -0.6676 0.7231 0.1773
+vn -0.5741 0.8176 0.0435
+vn 0.5320 0.8204 0.2096
+vn -0.4306 0.9025 -0.0003
+vn -0.8291 0.5210 0.2028
+vn -0.7804 0.1415 0.6090
+vn 0.8645 0.4681 -0.1831
+vn -0.7604 -0.3130 0.5691
+vn -0.7632 -0.4636 -0.4502
+vn 0.5997 0.0846 -0.7957
+vn 0.2238 -0.9363 -0.2707
+vn 0.9594 0.2799 -0.0360
+vn -0.0339 -0.0052 -0.9994
+vn -0.0485 0.1568 -0.9864
+vn 0.1572 -0.4412 -0.8835
+vn -0.2832 0.8987 -0.3348
+vn -0.9933 0.0159 0.1146
+vn -0.7198 -0.1328 -0.6814
+vn -0.9047 0.2943 -0.3082
+vn 0.4043 -0.5351 0.7418
+vn 0.4214 -0.1981 0.8850
+vn 0.6350 0.1868 0.7496
+vn 0.1824 0.9526 0.2435
+vn -0.9232 0.3555 0.1463
+vn -0.7499 0.6052 -0.2672
+vn 0.3472 0.5288 -0.7745
+vn 0.2458 0.8284 -0.5034
+vn -0.9753 0.2124 -0.0604
+vn -0.4669 -0.3389 0.8168
+vn -0.0049 -0.3186 0.9479
+vn 0.5549 0.4271 0.7139
+vn 0.4214 0.6656 0.6159
+vn 0.5209 0.7640 -0.3807
+vn -0.0644 -0.8556 -0.5136
+vn 0.6327 -0.5215 -0.5725
+vn 0.7170 0.2121 -0.6641
+vn -0.5818 -0.4215 -0.6956
+vn -0.2464 0.3189 0.9152
+vn -0.2744 0.6982 0.6613
+vn -0.8140 0.4472 -0.3708
+vn -0.8178 0.4432 -0.3672
+vn -0.8216 0.4390 -0.3636
+vn -0.8138 0.4474 -0.3709
+vn -0.4248 -0.0335 0.9047
+vn -0.5309 0.1469 -0.8346
+vn -0.4126 -0.1354 -0.9008
+vn -0.7068 -0.6715 -0.2225
+vn -0.8587 0.4747 -0.1931
+vn -0.2728 0.5937 0.7570
+vn -0.6281 0.2792 0.7263
+vn -0.6280 0.7138 -0.3101
+vn -0.6018 -0.1959 -0.7742
+vn -0.3777 -0.1596 -0.9121
+vn 0.2112 -0.3898 -0.8964
+vn 0.7431 0.6679 0.0416
+vn -0.3876 0.5154 0.7643
+vn 0.5403 -0.7672 0.3456
+vn 0.7894 -0.1152 0.6029
+vn 0.7654 -0.3024 -0.5680
+vn -0.2021 -0.5598 0.8036
+vn -0.4186 -0.3996 -0.8155
+vn -0.3717 0.2064 -0.9051
+vn 0.7477 -0.0525 -0.6619
+vn 0.7488 -0.0638 -0.6597
+vn 0.7488 -0.0643 -0.6597
+vn 0.7476 -0.0521 -0.6621
+vn -0.4300 -0.4212 -0.7985
+vn 0.3199 -0.2057 0.9248
+vn 0.3572 0.0981 -0.9289
+vn -0.1527 -0.1074 -0.9824
+vn 0.2144 -0.9659 -0.1449
+vn 0.1163 -0.3788 0.9182
+vn 0.3640 -0.6759 0.6409
+vn 0.2861 0.9238 0.2546
+vn 0.2278 -0.5606 -0.7962
+vn -0.1707 0.8235 -0.5410
+vn 0.9218 -0.3183 -0.2214
+vn 0.9021 -0.0461 0.4290
+vn 0.5081 -0.6422 -0.5739
+vn 0.2091 -0.2824 0.9362
+vn 0.8427 -0.3433 -0.4148
+vn 0.2331 0.1735 -0.9568
+vn -0.5743 -0.6032 -0.5535
+vn 0.5443 -0.3086 -0.7801
+vn -0.8533 0.0079 -0.5213
+vn 0.3523 0.5633 0.7473
+vn -0.4369 -0.2577 0.8618
+vn 0.0303 0.4285 0.9030
+vn -0.8805 0.4076 0.2420
+vn -0.0761 0.6941 -0.7158
+vn 0.3543 -0.6791 -0.6428
+vn -0.2058 -0.9746 0.0886
+vn 0.0984 -0.8761 0.4720
+vn -0.2412 0.3568 0.9025
+vn 0.8222 -0.5441 0.1672
+vn 0.9912 -0.1312 -0.0168
+vn 0.8223 -0.5206 -0.2298
+vn -0.8098 0.2925 0.5086
+vn 0.3826 0.2435 0.8912
+vn 0.0375 0.5989 -0.8000
+vn -0.6826 0.0579 -0.7285
+vn -0.4432 -0.0345 -0.8958
+vn 0.0609 -0.6329 0.7719
+vn -0.4682 0.1546 0.8700
+vn 0.8690 -0.4852 -0.0975
+vn -0.5218 0.8389 0.1550
+vn 0.1071 0.6062 0.7881
+vn 0.5161 0.0954 0.8512
+vn 0.7721 0.3482 0.5316
+vn -0.4937 0.8687 -0.0408
+vn -0.4633 -0.5948 -0.6569
+vn -0.9387 0.1397 -0.3151
+vn -0.6793 0.4567 0.5744
+vn 0.4426 0.8155 0.3730
+vn 0.6921 0.3024 0.6554
+vn -0.9415 0.3314 0.0613
+vn -0.4530 -0.3156 -0.8338
+vn 0.1420 0.8132 -0.5644
+vn -0.3694 -0.9147 -0.1642
+vn 0.2187 -0.5389 0.8135
+vn -0.6700 0.5927 0.4470
+vn -0.9536 0.2384 0.1836
+vn 0.1006 -0.5252 -0.8450
+vn -0.6225 0.4283 -0.6550
+vn -0.3017 0.8818 -0.3625
+vn -0.5424 -0.2716 0.7950
+vn -0.4055 -0.6829 0.6076
+vn 0.4590 0.0445 0.8873
+vn -0.4879 0.6792 0.5482
+vn -0.7326 -0.2512 -0.6326
+vn 0.9323 0.2647 0.2465
+vn -0.3449 0.4952 0.7974
+vn 0.1973 -0.3786 -0.9043
+vn 0.3600 -0.4828 0.7983
+vn 0.3598 -0.4821 0.7988
+vn 0.3610 -0.4863 0.7957
+vn -0.8153 0.1074 0.5690
+vn -0.6202 -0.7816 0.0663
+vn -0.1830 0.8726 0.4529
+vn -0.2623 0.7942 -0.5482
+vn 0.7293 0.0552 0.6820
+vn -0.3575 -0.4026 0.8427
+vn -0.5166 -0.2415 -0.8215
+vn -0.5103 0.1761 -0.8418
+vn 0.3521 -0.0990 -0.9307
+vn -0.4373 0.0842 -0.8954
+vn -0.1302 0.0537 -0.9900
+vn -0.1470 -0.1992 0.9689
+vn -0.0947 -0.4184 0.9033
+vn -0.5457 0.0278 -0.8375
+vn 0.4928 -0.2069 0.8452
+vn -0.2052 0.4266 0.8809
+vn -0.1673 0.1431 -0.9755
+vn -0.3765 0.3949 0.8380
+vn -0.2014 0.5296 -0.8240
+vn 0.4291 0.6213 -0.6557
+vn -0.1859 -0.8899 0.4166
+vn 0.6378 -0.0835 0.7657
+vn 0.4939 -0.5431 0.6790
+vn 0.7576 -0.4724 -0.4505
+vn -0.0355 -0.9668 -0.2530
+vn 0.2339 -0.6814 -0.6935
+vn 0.8158 -0.1724 -0.5521
+vn 0.4797 0.7062 -0.5208
+vn -0.1438 -0.1145 0.9830
+vn -0.2745 -0.9114 0.3067
+vn 0.7439 -0.5593 -0.3658
+vn -0.6904 -0.0178 -0.7232
+vn -0.6977 0.1018 -0.7091
+vn -0.8222 0.5418 -0.1745
+vn 0.2119 0.4433 0.8710
+vn 0.3884 0.1386 -0.9110
+vn -0.4881 0.0276 -0.8723
+vn -0.4044 -0.8051 -0.4338
+vn -0.3932 0.6500 0.6503
+vn 0.7377 -0.6749 -0.0161
+vn -0.0266 -0.9333 -0.3581
+vn -0.5505 -0.0360 0.8341
+vn 0.6980 -0.7108 0.0863
+vn 0.9262 0.3577 -0.1190
+vn -0.1724 0.0309 0.9845
+vn -0.2339 0.1972 0.9521
+vn 0.0050 -0.6399 -0.7685
+vn -0.1316 -0.6385 -0.7583
+vn -0.1562 0.1065 -0.9820
+vn -0.8587 0.1791 0.4802
+vn 0.7750 0.5662 0.2808
+vn 0.9173 0.3502 0.1893
+vn -0.4607 -0.4801 -0.7465
+vn 0.2215 -0.6654 -0.7128
+vn 0.0322 0.8191 -0.5727
+vn 0.2778 -0.5351 0.7978
+vn -0.2816 0.1015 -0.9541
+vn 0.5641 -0.3928 -0.7263
+vn 0.3149 -0.2243 -0.9223
+vn 0.3713 -0.5109 0.7753
+vn 0.8105 0.0699 0.5816
+vn -0.3875 0.5009 0.7739
+vn -0.7983 0.0165 0.6020
+vn -0.3626 -0.6119 -0.7029
+vn 0.8552 -0.3416 -0.3898
+vn 0.1375 -0.2820 -0.9495
+vn -0.7336 0.5074 0.4520
+vn -0.2065 0.6318 0.7471
+vn -0.6612 0.4759 0.5800
+vn -0.6993 0.7045 -0.1207
+vn -0.6331 0.3804 -0.6741
+vn 0.6473 0.3636 -0.6699
+vn -0.7426 0.4939 -0.4523
+vn 0.1835 -0.5894 0.7867
+vn 0.5989 -0.5870 -0.5447
+vn 0.7033 -0.3501 0.6187
+vn -0.1620 -0.8321 0.5305
+vn 0.4089 0.4449 0.7968
+vn -0.7025 0.1837 0.6875
+vn -0.8728 -0.1903 0.4495
+vn -0.9463 -0.2642 -0.1864
+vn 0.4764 -0.5917 -0.6503
+vn -0.5439 0.3455 0.7647
+vn -0.1511 -0.5556 0.8176
+vn 0.6917 -0.3240 0.6454
+vn 0.8924 0.2726 0.3597
+vn -0.7478 0.2387 -0.6195
+vn -0.7477 0.2387 -0.6196
+vn -0.7486 0.2390 -0.6185
+vn 0.4347 0.7246 0.5347
+vn 0.1845 -0.5475 0.8162
+vn -0.5097 0.3556 0.7834
+vn -0.3238 0.6304 0.7055
+vn -0.0927 -0.8440 -0.5283
+vn 0.6279 0.3085 -0.7145
+vn -0.0160 -0.3290 -0.9442
+vn 0.1205 -0.4499 0.8849
+vn 0.2112 0.3218 0.9230
+vn 0.2564 0.2330 0.9381
+vn -0.3089 0.9501 0.0426
+vn -0.3677 0.9248 0.0980
+vn -0.2694 0.9542 -0.1300
+vn -0.3047 0.9382 -0.1640
+vn 0.4625 0.3645 0.8082
+vn 0.2385 0.6969 -0.6764
+vn -0.8265 0.1898 -0.5300
+vn 0.2254 0.0996 -0.9692
+vn -0.1928 -0.9488 -0.2503
+vn -0.6595 -0.2259 -0.7170
+vn 0.3734 -0.2513 0.8930
+vn -0.4393 -0.5272 -0.7274
+vn 0.5929 -0.5017 -0.6299
+vn -0.6602 -0.0620 -0.7485
+vn 0.2900 -0.3022 -0.9081
+vn -0.5220 -0.1075 0.8462
+vn -0.4201 -0.2910 0.8596
+vn 0.3135 0.9282 0.2004
+vn -0.8061 0.5916 -0.0138
+vn -0.4851 0.0873 -0.8701
+vn -0.2860 -0.0541 -0.9567
+vn 0.0459 -0.9023 0.4286
+vn 0.4383 -0.2698 0.8574
+vn 0.3612 -0.4872 0.7951
+vn -0.1597 -0.8538 0.4956
+vn -0.8954 -0.4424 0.0509
+vn 0.4316 -0.4279 -0.7941
+vn 0.7228 -0.6902 0.0339
+vn 0.5550 -0.1268 0.8221
+vn 0.1361 -0.9781 -0.1576
+vn -0.7617 0.0013 -0.6480
+vn 0.0209 0.4846 0.8745
+vn 0.0182 0.4988 0.8665
+vn 0.5074 -0.4444 -0.7383
+vn 0.7089 0.0238 -0.7049
+vn -0.2535 0.6245 -0.7388
+vn 0.8219 0.3252 -0.4676
+vn -0.3773 -0.4592 -0.8042
+vn 0.5267 -0.7548 -0.3911
+vn -0.2215 0.8649 -0.4504
+vn -0.7546 -0.6021 0.2609
+vn -0.5547 0.2933 -0.7787
+vn -0.0746 0.9969 0.0262
+vn -0.3274 -0.0485 0.9436
+vn 0.4690 0.4163 -0.7790
+vn -0.7697 0.4088 0.4904
+vn 0.3747 0.7431 0.5544
+vn -0.4429 0.8011 -0.4025
+vn 0.1826 0.2472 0.9516
+vn -0.7470 0.2384 -0.6206
+vn -0.8132 0.1896 0.5503
+vn 0.1587 0.9652 0.2079
+vn 0.2231 -0.1719 -0.9595
+vn 0.4307 -0.1470 0.8905
+vn 0.9544 0.1491 0.2584
+vn -0.4887 -0.3761 0.7872
+vn -0.2095 -0.8541 -0.4761
+vn 0.2102 -0.5228 0.8261
+vn 0.6195 0.6896 0.3750
+vn 0.7485 -0.4577 0.4800
+vn -0.8603 0.0119 -0.5096
+vn 0.5208 -0.4642 -0.7164
+vn -0.2560 -0.4072 0.8767
+vn -0.1381 0.5674 0.8118
+vn -0.5060 0.8398 0.1968
+vn -0.4981 0.7671 -0.4043
+vn -0.5491 0.7514 -0.3660
+vn -0.8014 0.2953 0.5201
+vn 0.6138 0.7168 0.3308
+vn -0.8802 0.0035 0.4746
+vn 0.6849 -0.5683 0.4560
+vn -0.2631 -0.9471 -0.1838
+vn 0.4523 -0.8351 0.3132
+vn 0.7692 -0.6167 -0.1671
+vn -0.7872 -0.0530 -0.6144
+vn 0.8075 -0.2198 -0.5474
+vn 0.2145 -0.3171 -0.9238
+vn -0.2287 0.2015 -0.9524
+vn -0.5656 0.7039 -0.4296
+vn -0.5697 0.8001 0.1877
+vn -0.3472 0.6508 -0.6752
+vn 0.4999 0.2429 0.8313
+vn 0.3317 -0.6153 0.7151
+vn -0.0638 0.3740 0.9252
+vn 0.7841 -0.5924 -0.1854
+vn 0.2905 0.4944 -0.8192
+vn -0.5915 0.0510 -0.8047
+vn -0.1137 0.8021 -0.5863
+vn -0.4172 0.3855 0.8230
+vn -0.3816 0.3443 -0.8578
+vn 0.8322 0.1623 0.5302
+vn -0.4848 0.8715 -0.0738
+vn 0.3793 0.6388 -0.6694
+vn 0.7201 -0.3219 0.6147
+vn -0.7331 0.1566 0.6619
+vn 0.1397 -0.1533 0.9783
+vn -0.6426 0.2254 0.7323
+vn -0.0872 -0.2549 -0.9630
+vn 0.3302 -0.6084 0.7217
+vn 0.1966 -0.5486 -0.8126
+vn 0.1101 0.9856 0.1286
+vn -0.3153 0.7690 -0.5561
+vn -0.4408 0.1351 0.8874
+vn -0.2451 0.8937 0.3759
+vn 0.0546 0.1755 -0.9830
+vn -0.7861 0.5902 0.1839
+vn -0.6618 -0.4052 -0.6308
+vn 0.1242 0.0302 0.9918
+vn 0.3465 -0.9348 -0.0778
+vn -0.2096 -0.6260 0.7512
+vn 0.0629 -0.5073 0.8595
+vn -0.2651 -0.6934 -0.6700
+s 1
+f 1//1 2//1 3//1
+f 4//2 5//2 6//2
+f 4//3 7//3 5//3
+f 6//4 5//4 8//4
+f 9//5 10//5 6//5
+f 4//6 6//6 10//6
+f 3//7 11//7 12//7
+f 13//8 14//8 15//8
+f 15//9 14//9 16//9
+f 15//10 16//10 17//10
+f 18//11 19//11 20//11
+f 21//12 22//12 19//12
+f 14//13 23//13 16//13
+f 24//14 25//14 26//14
+f 27//15 7//15 25//15
+f 28//16 25//16 29//16
+f 30//17 31//17 32//17
+f 33//18 34//18 35//18
+f 36//19 26//19 25//19
+f 36//20 25//20 28//20
+f 24//21 27//21 25//21
+f 37//22 38//22 39//22
+f 40//23 41//23 42//23
+f 43//24 44//24 45//24
+f 46//25 43//25 45//25
+f 44//26 47//26 48//26
+f 49//27 50//27 51//27
+f 49//28 52//28 50//28
+f 53//29 54//29 55//29
+f 56//30 57//30 58//30
+f 59//31 38//31 60//31
+f 61//32 62//32 63//32
+f 64//33 65//33 59//33
+f 45//34 44//34 64//34
+f 64//35 44//35 65//35
+f 66//36 44//36 48//36
+f 44//37 66//37 65//37
+f 65//38 66//38 67//38
+f 52//39 67//39 66//39
+f 68//40 67//40 52//40
+f 69//41 70//41 71//41
+f 72//42 70//42 73//42
+f 73//43 70//43 69//43
+f 72//44 71//44 70//44
+f 74//45 69//45 75//45
+f 69//46 71//46 75//46
+f 76//47 77//47 36//47
+f 36//48 77//48 78//48
+f 79//49 80//49 81//49
+f 80//50 82//50 81//50
+f 81//51 83//51 79//51
+f 82//52 84//52 81//52
+f 81//53 84//53 28//53
+f 81//54 28//54 83//54
+f 83//55 78//55 79//55
+f 85//56 76//56 84//56
+f 84//57 76//57 28//57
+f 36//58 28//58 76//58
+f 86//59 69//59 74//59
+f 87//60 88//60 89//60
+f 90//61 91//61 92//61
+f 92//62 93//62 90//62
+f 87//63 89//63 91//63
+f 94//64 89//65 88//66
+f 89//67 94//67 95//67
+f 61//68 96//68 97//68
+f 61//69 63//70 96//71
+f 60//72 38//72 98//72
+f 99//73 46//73 60//73
+f 99//74 60//74 98//74
+f 100//75 62//75 61//75
+f 101//76 94//76 102//76
+f 103//77 104//77 90//77
+f 90//78 104//78 87//78
+f 33//79 82//79 103//79
+f 104//80 88//80 87//80
+f 33//81 105//81 82//81
+f 94//64 88//66 102//82
+f 106//83 102//83 84//83
+f 106//84 101//84 102//84
+f 107//85 101//85 106//85
+f 108//86 109//86 110//86
+f 110//87 111//87 108//87
+f 112//88 113//88 114//88
+f 115//89 6//89 8//89
+f 8//90 116//90 115//90
+f 116//91 117//91 115//91
+f 8//92 12//92 116//92
+f 11//93 118//93 12//93
+f 12//94 118//94 116//94
+f 118//95 119//95 116//95
+f 120//96 119//96 118//96
+f 121//97 3//97 95//97
+f 122//98 25//98 7//98
+f 95//99 3//99 12//99
+f 123//100 95//100 12//100
+f 124//101 93//101 125//101
+f 125//102 93//102 5//102
+f 5//103 93//103 123//103
+f 123//104 12//104 5//104
+f 7//105 125//105 5//105
+f 125//106 34//106 126//106
+f 122//107 121//107 126//107
+f 31//108 28//108 127//108
+f 128//109 129//109 130//109
+f 131//110 132//110 133//110
+f 131//111 39//111 134//111
+f 39//112 131//112 37//112
+f 131//113 134//113 135//113
+f 131//114 135//114 132//114
+f 131//115 133//115 37//115
+f 39//116 136//116 134//116
+f 134//117 137//117 135//117
+f 135//118 137//118 54//118
+f 136//119 130//119 134//119
+f 134//120 130//120 137//120
+f 136//121 128//121 130//121
+f 138//122 137//122 130//122
+f 129//123 138//123 130//123
+f 139//124 13//124 15//124
+f 140//125 141//125 142//125
+f 140//126 143//126 144//126
+f 140//127 144//127 145//127
+f 144//128 146//128 145//128
+f 143//129 147//129 144//129
+f 148//130 149//130 147//130
+f 144//131 149//131 146//131
+f 145//132 141//132 140//132
+f 143//133 140//133 142//133
+f 143//134 142//134 110//134
+f 149//135 150//135 146//135
+f 151//136 152//136 150//136
+f 150//137 152//137 146//137
+f 146//138 152//138 145//138
+f 141//139 145//139 152//139
+f 151//140 142//140 152//140
+f 142//141 141//141 152//141
+f 153//142 154//142 155//142
+f 154//143 49//143 155//143
+f 156//144 157//144 43//144
+f 157//145 156//145 158//145
+f 159//146 156//146 46//146
+f 43//147 157//147 47//147
+f 160//148 155//148 51//148
+f 154//149 161//149 49//149
+f 162//150 153//150 155//150
+f 163//151 164//151 165//151
+f 124//152 90//152 93//152
+f 166//153 167//153 164//153
+f 167//154 165//154 164//154
+f 168//155 169//155 167//155
+f 170//156 171//156 172//156
+f 170//157 172//157 173//157
+f 173//158 172//158 174//158
+f 174//159 172//159 175//159
+f 176//160 171//161 177//162
+f 176//160 172//163 171//161
+f 178//164 179//164 180//164
+f 181//165 182//165 183//165
+f 184//166 182//166 181//166
+f 185//167 186//167 187//167
+f 187//168 186//168 184//168
+f 186//169 182//169 184//169
+f 186//170 188//170 182//170
+f 189//171 190//171 191//171
+f 190//172 189//172 192//172
+f 192//173 189//173 193//173
+f 194//174 195//174 192//174
+f 193//175 194//175 192//175
+f 196//176 197//176 198//176
+f 199//177 200//177 201//177
+f 202//178 199//178 201//178
+f 202//179 165//179 199//179
+f 24//180 198//180 27//180
+f 197//181 27//181 198//181
+f 174//182 196//182 198//182
+f 203//183 112//183 204//183
+f 205//184 10//184 9//184
+f 206//185 205//185 207//185
+f 206//186 207//186 108//186
+f 206//187 10//187 205//187
+f 206//188 108//188 111//188
+f 208//189 204//189 2//189
+f 203//190 113//190 112//190
+f 208//191 209//191 203//191
+f 210//192 211//192 212//192
+f 213//193 214//193 215//193
+f 212//194 216//194 195//194
+f 195//195 217//195 212//195
+f 217//196 210//196 212//196
+f 183//197 177//198 171//199
+f 218//200 219//200 220//200
+f 219//201 218//201 184//201
+f 218//202 220//202 168//202
+f 187//203 218//203 168//203
+f 181//204 183//204 221//204
+f 221//205 183//205 171//205
+f 170//206 221//206 171//206
+f 164//207 222//207 166//207
+f 166//208 222//208 223//208
+f 223//209 224//209 175//209
+f 225//210 226//210 132//210
+f 133//211 132//211 226//211
+f 226//212 227//212 133//212
+f 228//213 198//213 229//213
+f 169//214 230//214 199//214
+f 169//215 199//215 165//215
+f 169//216 18//216 230//216
+f 18//217 169//217 231//217
+f 220//218 231//218 169//218
+f 170//219 173//219 198//219
+f 170//220 198//220 228//220
+f 232//221 170//221 228//221
+f 24//222 26//222 233//222
+f 234//223 235//223 236//223
+f 26//224 36//224 237//224
+f 238//225 24//225 233//225
+f 182//226 188//226 239//226
+f 240//227 223//227 239//227
+f 240//228 188//228 241//228
+f 240//229 241//229 166//229
+f 240//230 166//230 223//230
+f 188//231 240//231 239//231
+f 176//232 223//232 175//232
+f 239//233 223//233 176//233
+f 242//234 16//234 243//234
+f 189//235 242//235 193//235
+f 189//236 191//236 244//236
+f 244//237 245//237 22//237
+f 21//238 244//238 22//238
+f 244//239 21//239 189//239
+f 189//240 40//241 242//242
+f 194//243 242//243 243//243
+f 16//244 23//244 243//244
+f 242//245 17//245 16//245
+f 121//246 101//246 107//246
+f 126//247 106//247 28//247
+f 246//248 247//248 248//248
+f 136//249 67//249 68//249
+f 59//250 65//250 39//250
+f 38//251 59//251 39//251
+f 65//252 249//252 39//252
+f 136//253 249//253 67//253
+f 136//254 62//254 128//254
+f 250//255 251//255 246//255
+f 252//256 250//256 246//256
+f 252//257 246//257 253//257
+f 246//258 248//258 253//258
+f 254//259 248//259 255//259
+f 253//260 248//260 254//260
+f 80//261 77//261 256//261
+f 47//262 257//262 51//262
+f 258//263 257//263 157//263
+f 158//264 258//264 157//264
+f 258//265 160//265 257//265
+f 257//266 160//266 51//266
+f 162//267 160//267 258//267
+f 259//268 154//268 153//268
+f 259//269 158//269 74//269
+f 260//270 261//270 159//270
+f 261//271 260//271 262//271
+f 261//272 262//272 158//272
+f 262//273 86//273 158//273
+f 158//274 259//274 153//274
+f 190//275 216//275 213//275
+f 245//276 263//276 180//276
+f 245//277 264//277 265//277
+f 243//278 266//278 267//278
+f 23//279 266//279 243//279
+f 267//280 194//280 243//280
+f 231//281 268//281 269//281
+f 268//282 270//282 269//282
+f 271//283 221//283 232//283
+f 139//284 221//284 271//284
+f 241//285 188//285 186//285
+f 272//286 42//286 41//286
+f 41//287 21//287 19//287
+f 268//288 181//288 221//288
+f 268//289 220//289 219//289
+f 219//290 184//291 181//292
+f 219//290 181//292 268//293
+f 13//294 229//294 14//294
+f 273//295 234//295 236//295
+f 230//296 20//296 273//296
+f 20//297 179//297 273//297
+f 229//298 233//298 14//298
+f 246//299 251//299 206//299
+f 206//300 111//300 247//300
+f 246//301 206//301 247//301
+f 248//302 111//302 209//302
+f 247//303 111//303 248//303
+f 248//304 209//304 255//304
+f 274//305 90//305 124//305
+f 27//306 275//306 122//306
+f 122//307 7//307 200//307
+f 112//308 276//308 277//308
+f 277//309 276//309 120//309
+f 278//310 276//311 149//312
+f 279//313 149//313 207//313
+f 280//314 281//314 279//314
+f 280//315 279//315 207//315
+f 281//316 278//316 279//316
+f 279//317 278//310 149//312
+f 119//318 120//318 276//318
+f 112//319 149//319 276//319
+f 266//320 282//320 283//320
+f 283//321 282//321 57//321
+f 283//322 57//322 210//322
+f 215//323 284//323 265//323
+f 227//324 226//324 285//324
+f 56//325 286//325 287//325
+f 287//326 57//326 56//326
+f 224//327 254//327 288//327
+f 289//328 222//328 164//328
+f 222//329 289//329 250//329
+f 222//330 250//330 252//330
+f 222//331 252//331 253//331
+f 222//332 253//332 224//332
+f 290//333 224//333 288//333
+f 224//334 253//334 254//334
+f 80//335 256//335 178//335
+f 256//336 23//336 178//336
+f 194//337 217//337 195//337
+f 148//338 147//338 109//338
+f 114//339 151//339 150//339
+f 237//340 234//340 178//340
+f 23//341 14//341 26//341
+f 26//342 14//342 233//342
+f 204//343 277//343 118//343
+f 6//344 115//344 205//344
+f 205//345 115//345 281//345
+f 277//346 120//346 118//346
+f 2//347 204//347 118//347
+f 103//348 284//348 104//348
+f 104//349 53//349 88//349
+f 102//350 55//350 291//350
+f 102//351 88//351 55//351
+f 85//352 291//352 282//352
+f 85//353 84//353 102//353
+f 98//354 37//354 227//354
+f 285//355 98//355 227//355
+f 211//356 292//356 100//356
+f 75//357 71//357 293//357
+f 212//358 97//358 293//358
+f 293//359 97//359 96//359
+f 294//360 213//360 72//360
+f 294//361 99//361 98//361
+f 294//362 214//362 213//362
+f 294//363 262//363 99//363
+f 262//364 294//364 72//364
+f 72//365 73//365 262//365
+f 72//366 213//366 71//366
+f 216//367 212//367 71//367
+f 212//368 211//368 97//368
+f 71//369 212//369 293//369
+f 196//370 295//370 288//370
+f 201//371 4//371 296//371
+f 4//372 10//372 296//372
+f 296//373 10//373 251//373
+f 201//374 296//374 289//374
+f 201//375 289//375 202//375
+f 197//376 297//376 275//376
+f 275//377 297//377 1//377
+f 1//378 297//378 208//378
+f 208//379 297//379 255//379
+f 288//380 255//380 297//380
+f 288//381 297//381 196//381
+f 47//382 50//382 48//382
+f 286//383 56//383 129//383
+f 227//384 37//384 133//384
+f 298//385 299//385 300//385
+f 300//386 301//386 302//386
+f 303//387 304//387 305//387
+f 303//388 306//388 304//388
+f 306//389 303//389 299//389
+f 298//390 300//390 302//390
+f 307//391 308//391 309//391
+f 310//392 311//393 312//394
+f 312//395 313//395 314//395
+f 312//396 314//397 315//398
+f 313//399 316//399 314//399
+f 308//400 317//400 309//400
+f 318//401 319//401 320//401
+f 319//402 321//402 320//402
+f 322//403 323//403 324//403
+f 323//404 325//404 324//404
+f 322//405 324//405 326//405
+f 327//406 328//406 329//406
+f 330//407 331//407 329//407
+f 331//408 327//408 329//408
+f 332//409 119//409 333//409
+f 332//410 116//410 119//410
+f 333//411 278//412 334//413
+f 117//414 335//414 336//414
+f 336//415 337//415 117//415
+f 335//416 117//416 338//416
+f 334//417 339//417 333//417
+f 340//418 341//418 342//418
+f 305//419 343//419 344//419
+f 341//420 340//420 345//420
+f 301//421 345//421 340//421
+f 346//422 347//422 348//422
+f 346//423 349//423 347//423
+f 346//424 350//424 324//424
+f 351//425 352//425 353//425
+f 354//426 355//426 356//426
+f 357//427 358//427 359//427
+f 358//428 360//428 354//428
+f 358//429 354//429 359//429
+f 360//430 355//430 354//430
+f 359//431 354//431 356//431
+f 349//432 361//432 362//432
+f 306//433 363//433 304//433
+f 306//434 364//434 363//434
+f 364//435 306//435 298//435
+f 364//436 298//436 365//436
+f 302//437 366//437 365//437
+f 298//438 302//438 365//438
+f 367//439 368//439 369//439
+f 370//440 371//440 372//440
+f 372//441 371//441 367//441
+f 372//442 367//442 369//442
+f 357//443 359//443 373//443
+f 359//444 374//444 373//444
+f 373//445 374//445 375//445
+f 373//446 375//446 376//446
+f 356//447 374//447 359//447
+f 356//448 375//448 374//448
+f 377//449 300//449 378//449
+f 377//450 301//450 300//450
+f 379//451 380//451 381//451
+f 379//452 344//452 382//452
+f 303//453 305//453 379//453
+f 379//454 305//454 344//454
+f 379//455 382//455 380//455
+f 379//456 381//456 383//456
+f 383//457 303//457 379//457
+f 377//458 345//458 301//458
+f 345//459 377//459 384//459
+f 384//460 377//460 385//460
+f 378//461 386//461 377//461
+f 387//462 382//462 344//462
+f 387//463 343//464 388//465
+f 343//466 389//466 388//466
+f 388//465 390//467 387//463
+f 390//468 388//468 391//468
+f 389//469 341//469 392//469
+f 341//470 393//470 392//470
+f 394//471 392//471 393//471
+f 392//472 394//472 391//472
+f 395//473 396//473 397//473
+f 398//474 399//474 397//474
+f 400//475 401//475 402//475
+f 400//476 403//476 401//476
+f 400//477 396//477 403//477
+f 396//478 404//478 397//478
+f 405//479 406//479 341//479
+f 407//480 406//480 405//480
+f 408//481 409//481 410//481
+f 408//482 410//482 411//482
+f 408//483 400//483 409//483
+f 407//484 404//484 406//484
+f 412//485 406//485 404//485
+f 366//486 341//487 406//488
+f 366//489 406//489 412//489
+f 413//490 414//490 415//490
+f 416//491 417//491 418//491
+f 419//492 418//492 420//492
+f 418//493 419//493 421//493
+f 401//494 418//494 421//494
+f 401//495 416//495 418//495
+f 422//496 423//496 424//496
+f 422//497 415//497 423//497
+f 413//498 415//498 422//498
+f 398//499 414//499 399//499
+f 368//500 425//500 426//500
+f 427//501 428//501 429//501
+f 428//502 430//502 370//502
+f 428//503 370//504 431//505
+f 431//505 370//504 372//506
+f 428//507 431//507 432//507
+f 428//508 432//508 429//508
+f 372//509 369//509 431//509
+f 433//510 434//511 368//512
+f 368//513 434//513 425//513
+f 435//514 434//514 436//514
+f 435//515 437//515 434//515
+f 423//516 438//516 439//516
+f 417//517 440//517 418//517
+f 420//518 418//518 441//518
+f 442//519 443//519 444//519
+f 395//520 413//520 444//520
+f 403//521 395//521 443//521
+f 403//522 445//522 446//522
+f 445//523 403//523 443//523
+f 445//524 443//524 442//524
+f 447//525 445//525 442//525
+f 443//526 395//526 444//526
+f 448//527 449//527 450//527
+f 451//528 452//528 453//528
+f 451//529 453//529 448//529
+f 448//530 450//530 451//530
+f 454//531 450//531 449//531
+f 454//532 455//532 450//532
+f 456//533 457//533 458//533
+f 453//534 459//534 460//534
+f 461//535 462//535 419//535
+f 463//536 462//536 453//536
+f 463//537 453//537 460//537
+f 456//538 464//538 457//538
+f 465//539 464//539 456//539
+f 466//540 456//540 458//540
+f 465//541 456//541 466//541
+f 467//542 331//542 468//542
+f 468//543 469//543 470//543
+f 471//544 472//544 473//544
+f 474//545 475//545 476//545
+f 308//546 477//546 317//546
+f 315//398 314//397 478//547
+f 479//548 315//548 478//548
+f 479//549 478//549 477//549
+f 315//550 479//550 480//550
+f 316//551 477//551 478//551
+f 479//552 477//552 308//552
+f 481//553 482//553 483//553
+f 362//554 484//554 347//554
+f 485//555 486//555 362//555
+f 487//556 486//556 488//556
+f 347//557 484//557 489//557
+f 476//558 483//559 472//560
+f 482//561 328//561 483//561
+f 476//562 490//562 483//562
+f 491//563 481//563 483//563
+f 490//564 491//564 483//564
+f 492//565 339//565 334//565
+f 492//566 493//566 320//566
+f 494//567 495//567 337//567
+f 494//568 496//568 495//568
+f 336//569 494//569 337//569
+f 497//570 339//570 320//570
+f 493//571 318//571 320//571
+f 492//572 320//572 339//572
+f 334//573 493//573 492//573
+f 321//574 498//574 499//574
+f 500//575 471//575 501//575
+f 502//576 503//576 504//576
+f 361//577 349//577 505//577
+f 505//578 349//578 325//578
+f 349//579 346//579 325//579
+f 502//580 506//580 503//580
+f 506//581 502//581 499//581
+f 502//582 497//582 321//582
+f 507//583 508//583 509//583
+f 464//584 435//584 436//584
+f 430//585 459//585 452//585
+f 459//586 510//586 460//586
+f 435//587 464//587 511//587
+f 511//588 464//588 465//588
+f 512//589 502//589 504//589
+f 513//590 514//590 515//590
+f 514//591 513//591 338//591
+f 513//592 515//592 516//592
+f 513//593 516//593 517//593
+f 335//594 513//594 517//594
+f 338//595 513//595 335//595
+f 518//596 512//596 504//596
+f 518//597 504//597 519//597
+f 512//598 497//598 502//598
+f 339//599 497//599 512//599
+f 518//600 332//600 512//600
+f 419//601 420//602 461//603
+f 420//602 520//604 461//603
+f 520//605 420//605 441//605
+f 521//606 438//606 522//606
+f 523//607 524//607 525//607
+f 526//608 350//609 527//610
+f 528//611 527//611 523//611
+f 528//612 523//612 529//612
+f 523//613 525//613 529//613
+f 525//614 530//614 529//614
+f 531//615 480//615 532//615
+f 531//616 533//616 310//616
+f 310//617 315//617 531//617
+f 531//618 532//618 534//618
+f 319//619 534//619 532//619
+f 532//620 480//620 307//620
+f 535//621 375//621 536//621
+f 508//622 476//558 472//560
+f 485//623 508//623 468//623
+f 485//624 476//625 508//626
+f 537//627 538//627 539//627
+f 538//628 422//628 539//628
+f 540//629 447//629 541//629
+f 357//630 373//630 542//630
+f 540//631 542//631 417//631
+f 540//632 357//632 542//632
+f 357//633 540//633 541//633
+f 539//634 375//634 356//634
+f 375//635 539//635 536//635
+f 539//636 422//636 536//636
+f 536//637 422//637 424//637
+f 489//638 543//638 544//638
+f 489//639 487//639 543//639
+f 544//640 543//640 545//640
+f 543//641 546//641 545//641
+f 546//642 482//642 481//642
+f 546//643 481//644 545//645
+f 352//646 547//646 481//646
+f 470//647 548//647 467//647
+f 467//648 548//648 549//648
+f 467//649 549//649 331//649
+f 549//650 550//650 327//650
+f 473//651 327//651 550//651
+f 473//652 550//652 551//652
+f 392//653 552//653 553//653
+f 388//654 552//654 392//654
+f 389//655 392//655 405//655
+f 388//656 554//656 552//656
+f 410//657 555//657 556//657
+f 410//658 556//658 557//658
+f 389//659 410//659 557//659
+f 389//660 411//660 410//660
+f 558//661 555//661 405//661
+f 557//662 554//662 388//662
+f 389//663 557//663 388//663
+f 405//664 392//664 553//664
+f 495//665 534//665 493//665
+f 278//666 495//666 334//666
+f 337//667 495//667 278//667
+f 495//668 493//668 334//668
+f 540//669 416//669 446//669
+f 538//670 413//670 422//670
+f 538//671 444//671 413//671
+f 559//672 500//672 501//672
+f 560//673 561//673 510//673
+f 560//674 510//674 429//674
+f 560//675 429//675 562//675
+f 429//676 548//676 562//676
+f 501//677 437//677 511//677
+f 501//678 563//678 437//678
+f 559//679 501//679 511//679
+f 552//680 554//680 500//680
+f 440//681 535//681 521//681
+f 521//682 441//682 440//682
+f 535//683 439//683 521//683
+f 564//684 565//684 371//684
+f 451//685 564//685 430//685
+f 430//686 564//686 370//686
+f 451//687 450//687 564//687
+f 450//688 455//688 565//688
+f 450//689 565//689 564//689
+f 436//690 565//690 455//690
+f 398//691 404//691 566//691
+f 567//692 568//692 566//692
+f 566//693 568//693 466//693
+f 569//694 407//694 409//694
+f 569//695 463//695 570//695
+f 569//696 555//696 407//696
+f 569//697 421//697 463//697
+f 421//698 569//698 409//698
+f 421//699 409//699 402//699
+f 566//700 466//700 414//700
+f 466//701 568//701 465//701
+f 558//702 567//703 566//704
+f 404//705 558//705 566//705
+f 545//706 524//706 523//706
+f 527//707 545//707 523//707
+f 544//708 527//610 350//609
+f 527//709 544//709 545//709
+f 352//710 351//710 547//710
+f 360//711 442//711 355//711
+f 537//712 356//712 355//712
+f 519//713 571//713 384//713
+f 572//714 387//714 390//714
+f 387//715 573//715 382//715
+f 573//716 387//716 572//716
+f 573//717 572//717 362//717
+f 573//718 362//718 361//718
+f 390//719 391//719 572//719
+f 571//720 391//720 393//720
+f 391//721 571//721 475//721
+f 475//722 571//722 490//722
+f 490//723 571//723 503//723
+f 571//724 519//724 503//724
+f 324//725 311//725 574//725
+f 311//726 324//726 526//726
+f 324//727 350//727 526//727
+f 526//728 528//728 313//728
+f 311//729 526//729 313//729
+f 316//730 528//730 529//730
+f 528//731 316//731 313//731
+f 498//732 309//732 351//732
+f 351//733 309//733 530//733
+f 529//734 530//734 316//734
+f 309//735 316//735 530//735
+f 568//736 567//736 500//736
+f 500//737 559//737 568//737
+f 561//738 570//738 575//738
+f 460//739 576//739 575//739
+f 576//740 465//740 559//740
+f 465//741 568//741 559//741
+f 577//742 425//742 437//742
+f 549//743 432//743 578//743
+f 432//744 426//744 578//744
+f 549//745 548//745 432//745
+f 548//746 429//746 432//746
+f 578//747 426//747 425//747
+f 425//748 577//748 578//748
+f 578//749 577//749 549//749
+f 396//750 579//750 412//750
+f 343//751 580//751 408//751
+f 363//752 579//752 400//752
+f 581//753 408//753 580//753
+f 400//754 579//754 396//754
+f 343//755 411//755 341//755
+f 579//756 365//756 412//756
+f 365//757 366//757 412//757
+f 369//758 368//758 426//758
+f 551//759 501//759 471//759
+f 469//760 560//760 470//760
+f 501//761 551//761 563//761
+f 407//762 558//762 404//762
+f 385//763 519//763 384//763
+f 329//764 546//764 543//764
+f 330//765 543//765 487//765
+f 330//766 329//766 543//766
+f 546//767 329//767 328//767
+f 448//768 520//768 449//768
+f 461//769 520//769 448//769
+f 441//770 522//770 520//770
+f 520//771 522//771 449//771
+f 514//772 338//772 332//772
+f 510//773 561//773 575//773
+f 381//774 514//774 582//774
+f 514//775 332//775 582//775
+f 582//776 332//776 386//776
+f 518//777 519//777 385//777
+f 332//778 518//778 386//778
+f 192//779 195//779 190//779
+f 3//780 2//780 11//780
+f 8//781 5//781 12//781
+f 3//782 122//782 275//782
+f 1//783 3//783 275//783
+f 22//784 180//784 179//784
+f 20//785 19//785 22//785
+f 22//786 179//786 20//786
+f 235//787 35//787 200//787
+f 235//788 33//788 35//788
+f 83//789 235//789 237//789
+f 30//790 33//790 235//790
+f 235//791 83//791 30//791
+f 36//792 83//792 237//792
+f 83//793 28//793 31//793
+f 83//794 31//794 30//794
+f 34//795 33//795 32//795
+f 31//796 34//796 32//796
+f 25//797 34//797 29//797
+f 27//798 35//798 7//798
+f 139//799 15//799 272//799
+f 41//800 40//800 21//800
+f 46//801 45//801 583//801
+f 44//802 43//802 47//802
+f 52//803 49//803 161//803
+f 58//804 138//804 56//804
+f 60//805 46//805 59//805
+f 63//806 584//806 68//806
+f 2//807 1//807 208//807
+f 62//808 584//808 63//808
+f 64//809 59//809 583//809
+f 64//810 583//810 45//810
+f 48//811 50//811 66//811
+f 50//812 52//812 66//812
+f 52//813 161//813 68//813
+f 210//814 57//814 287//814
+f 226//815 215//816 285//817
+f 83//818 36//818 78//818
+f 76//819 85//819 266//819
+f 69//820 86//820 73//820
+f 91//821 90//821 87//821
+f 123//822 93//822 92//822
+f 91//823 123//823 92//823
+f 164//824 163//824 289//824
+f 585//825 290//825 295//825
+f 59//826 46//826 583//826
+f 161//827 96//71 63//70
+f 161//828 63//828 68//828
+f 97//829 100//829 61//829
+f 84//830 105//830 106//830
+f 103//831 90//831 274//831
+f 274//832 33//832 103//832
+f 207//833 149//833 148//833
+f 148//834 109//834 207//834
+f 108//835 207//835 109//835
+f 110//836 113//836 111//836
+f 112//837 114//837 150//837
+f 110//838 114//838 113//838
+f 281//839 115//839 117//839
+f 121//840 122//840 3//840
+f 107//841 126//841 121//841
+f 125//842 7//842 35//842
+f 125//843 35//843 34//843
+f 126//844 34//844 25//844
+f 25//845 122//845 126//845
+f 34//846 31//847 29//848
+f 31//847 127//849 29//848
+f 54//850 132//850 135//850
+f 138//851 54//851 137//851
+f 138//852 129//852 56//852
+f 13//853 139//853 271//853
+f 19//854 18//854 269//854
+f 144//855 147//855 149//855
+f 151//856 110//856 142//856
+f 162//857 158//857 153//857
+f 43//858 46//858 156//858
+f 156//859 159//859 261//859
+f 158//860 156//860 261//860
+f 49//861 51//861 155//861
+f 96//862 161//862 154//862
+f 155//863 160//863 162//863
+f 202//864 163//864 165//864
+f 174//865 290//865 585//865
+f 174//866 175//866 290//866
+f 241//867 185//867 167//867
+f 167//868 169//868 165//868
+f 167//869 166//869 241//869
+f 168//870 167//870 185//870
+f 169//871 168//871 220//871
+f 176//872 175//872 172//872
+f 178//873 234//873 179//873
+f 183//197 182//874 177//198
+f 236//875 200//875 199//875
+f 24//876 238//876 198//876
+f 198//877 173//877 174//877
+f 113//878 209//878 111//878
+f 207//879 205//879 280//879
+f 586//880 10//880 206//880
+f 208//881 203//881 204//881
+f 113//882 203//882 209//882
+f 285//883 215//883 214//883
+f 213//884 215//884 264//884
+f 264//885 190//885 213//885
+f 211//886 210//886 287//886
+f 185//887 187//887 168//887
+f 184//888 218//888 187//888
+f 290//889 175//889 224//889
+f 282//890 58//890 57//890
+f 291//891 55//891 58//891
+f 138//892 58//892 55//892
+f 53//893 284//893 225//893
+f 54//894 53//894 132//894
+f 53//895 225//895 132//895
+f 226//896 225//896 284//896
+f 54//897 138//897 55//897
+f 291//898 58//898 282//898
+f 232//899 228//899 271//899
+f 229//900 13//900 228//900
+f 236//901 199//901 230//901
+f 198//902 238//902 229//902
+f 228//903 13//903 271//903
+f 237//904 235//904 234//904
+f 200//905 236//905 235//905
+f 239//906 176//906 182//906
+f 242//242 40//241 587//907
+f 242//908 194//908 193//908
+f 244//909 191//909 245//909
+f 245//910 180//910 22//910
+f 21//911 40//911 189//911
+f 242//912 587//912 17//912
+f 285//913 214//913 98//913
+f 211//914 100//914 97//914
+f 107//915 106//915 126//915
+f 121//916 94//916 101//916
+f 95//917 91//917 89//917
+f 126//918 28//918 29//918
+f 33//919 124//919 125//919
+f 33//920 274//920 124//920
+f 28//921 30//921 127//921
+f 30//922 32//922 127//922
+f 127//923 32//923 29//923
+f 32//924 33//924 126//924
+f 32//925 126//925 29//925
+f 125//926 126//926 33//926
+f 30//927 28//927 33//927
+f 91//928 95//928 123//928
+f 105//929 33//929 28//929
+f 28//930 106//930 105//930
+f 121//931 95//931 94//931
+f 67//932 249//932 65//932
+f 249//933 136//933 39//933
+f 136//934 68//934 584//934
+f 584//935 62//935 136//935
+f 588//936 254//936 255//936
+f 77//937 76//937 256//937
+f 79//938 77//938 80//938
+f 76//939 266//939 256//939
+f 258//940 158//940 162//940
+f 257//941 47//941 157//941
+f 46//942 260//942 159//942
+f 260//943 46//943 99//943
+f 260//944 99//944 262//944
+f 262//945 73//945 86//945
+f 74//946 75//946 259//946
+f 154//947 259//947 96//947
+f 259//948 75//948 96//948
+f 216//949 190//949 195//949
+f 264//950 245//950 191//950
+f 265//951 264//951 215//951
+f 245//952 265//952 263//952
+f 263//953 80//953 180//953
+f 266//954 23//954 256//954
+f 210//955 217//955 267//955
+f 267//956 283//956 210//956
+f 267//957 266//957 283//957
+f 194//958 267//958 217//958
+f 231//959 269//959 18//959
+f 231//960 220//960 268//960
+f 139//961 268//962 221//963
+f 268//962 139//961 270//964
+f 186//965 185//965 241//965
+f 177//966 182//966 176//966
+f 587//967 15//967 17//967
+f 40//968 42//968 587//968
+f 272//969 41//969 270//969
+f 19//970 270//970 41//970
+f 270//971 19//971 269//971
+f 272//972 270//972 139//972
+f 587//973 42//973 272//973
+f 587//974 272//974 15//974
+f 170//975 232//975 221//975
+f 223//976 222//976 224//976
+f 230//977 18//977 20//977
+f 273//978 179//978 234//978
+f 236//979 230//979 273//979
+f 238//980 233//980 229//980
+f 251//981 586//981 206//981
+f 209//982 208//982 255//982
+f 287//983 292//983 211//983
+f 286//984 292//985 287//986
+f 62//987 292//985 286//984
+f 62//988 100//988 292//988
+f 37//989 98//989 38//989
+f 128//990 62//990 286//990
+f 129//991 128//991 286//991
+f 27//992 122//992 35//992
+f 4//993 201//993 200//993
+f 4//994 200//994 7//994
+f 122//995 200//995 35//995
+f 275//996 27//996 197//996
+f 174//997 585//997 196//997
+f 276//998 278//998 119//998
+f 117//999 278//999 281//999
+f 149//1000 112//1000 150//1000
+f 215//816 226//815 284//1001
+f 265//1002 80//1002 263//1002
+f 266//1003 85//1003 282//1003
+f 290//1004 288//1004 295//1004
+f 288//1005 254//1005 588//1005
+f 74//1006 158//1006 86//1006
+f 80//1007 178//1007 180//1007
+f 190//1008 264//1008 191//1008
+f 147//1009 143//1009 109//1009
+f 110//1010 109//1010 143//1010
+f 114//1011 110//1011 151//1011
+f 23//1012 26//1012 77//1012
+f 23//1013 77//1013 178//1013
+f 77//1014 79//1014 178//1014
+f 79//1015 237//1015 178//1015
+f 237//1016 79//1016 78//1016
+f 26//1017 237//1017 78//1017
+f 78//1018 77//1018 26//1018
+f 205//1019 9//1019 6//1019
+f 281//1020 280//1020 205//1020
+f 204//1021 112//1021 277//1021
+f 11//1022 2//1022 118//1022
+f 291//1023 85//1023 102//1023
+f 284//1024 53//1024 104//1024
+f 284//1025 103//1025 82//1025
+f 55//1026 88//1026 53//1026
+f 84//1027 82//1027 105//1027
+f 80//1028 265//1028 82//1028
+f 265//1029 284//1029 82//1029
+f 294//1030 98//1030 214//1030
+f 213//1031 216//1031 71//1031
+f 293//1032 96//1032 75//1032
+f 196//1033 585//1033 295//1033
+f 296//1034 250//1034 289//1034
+f 296//1035 251//1035 250//1035
+f 251//1036 10//1036 586//1036
+f 163//1037 202//1037 289//1037
+f 197//1038 196//1038 297//1038
+f 255//1039 288//1039 588//1039
+f 51//1040 50//1040 47//1040
+f 581//1041 305//1041 304//1041
+f 383//1042 299//1042 303//1042
+f 306//1043 299//1043 298//1043
+f 301//1044 342//1044 302//1044
+f 300//1045 299//1045 378//1045
+f 307//1046 480//1046 308//1046
+f 311//393 310//392 326//1047
+f 574//1048 311//1048 326//1048
+f 313//1049 312//1049 311//1049
+f 312//1050 315//1050 310//1050
+f 498//1051 307//1051 309//1051
+f 326//1052 324//1052 574//1052
+f 326//1053 496//1053 322//1053
+f 321//1054 319//1054 498//1054
+f 468//1055 331//1056 330//1057
+f 117//1058 116//1058 338//1058
+f 116//1059 332//1059 338//1059
+f 117//1060 337//1060 278//1060
+f 119//1061 278//412 333//411
+f 343//1062 305//1062 580//1062
+f 305//1063 581//1063 580//1063
+f 340//1064 342//1064 301//1064
+f 353//1065 506//1065 499//1065
+f 353//1066 352//1066 491//1066
+f 506//1067 353//1067 491//1067
+f 353//1068 498//1068 351//1068
+f 324//1069 325//1069 346//1069
+f 346//1070 348//1070 350//1070
+f 499//1071 498//1071 353//1071
+f 358//1072 357//1072 541//1072
+f 358//1073 541//1073 360//1073
+f 503//1074 491//1074 490//1074
+f 362//1075 347//1075 349//1075
+f 491//1076 503//1076 506//1076
+f 342//1077 366//1077 302//1077
+f 364//1078 365//1078 363//1078
+f 304//1079 363//1079 581//1079
+f 461//1080 448//1080 453//1080
+f 449//1081 457//1081 454//1081
+f 367//1082 371//1082 565//1082
+f 433//1083 367//1083 565//1083
+f 433//510 368//512 367//1084
+f 385//1085 377//1085 386//1085
+f 387//1086 344//1086 343//1086
+f 389//1087 343//1087 341//1087
+f 392//1088 391//1088 388//1088
+f 345//1089 393//1089 341//1089
+f 345//1090 384//1090 393//1090
+f 396//1091 395//1091 403//1091
+f 400//1092 402//1092 589//1092
+f 404//1093 398//1093 397//1093
+f 399//1094 395//1094 397//1094
+f 404//1095 396//1095 412//1095
+f 408//1096 581//1096 363//1096
+f 410//1097 409//1097 407//1097
+f 409//1098 400//1098 589//1098
+f 400//1099 408//1099 363//1099
+f 405//1100 410//1100 407//1100
+f 341//1101 411//1101 405//1101
+f 402//1102 401//1102 421//1102
+f 416//1103 401//1103 446//1103
+f 423//1104 415//1104 438//1104
+f 415//1105 458//1105 438//1105
+f 414//1106 413//1106 399//1106
+f 428//1107 427//1107 430//1107
+f 432//1108 431//1108 426//1108
+f 426//1109 431//1109 369//1109
+f 436//1110 434//1110 565//1110
+f 433//1111 565//1111 434//1111
+f 434//1112 437//1112 425//1112
+f 440//1113 441//1113 418//1113
+f 423//1114 439//1114 536//1114
+f 438//1115 521//1115 439//1115
+f 454//1116 464//1116 455//1116
+f 461//1117 453//1117 462//1117
+f 452//1118 459//1118 453//1118
+f 421//1119 462//1119 463//1119
+f 421//1120 419//1120 462//1120
+f 449//1121 458//1121 457//1121
+f 464//1122 454//1122 457//1122
+f 473//1123 551//1123 471//1123
+f 468//1124 470//1124 467//1124
+f 468//1125 508//1125 469//1125
+f 507//1126 469//1126 508//1126
+f 509//1127 508//1127 472//1127
+f 471//1128 509//1128 472//1128
+f 473//1129 472//1129 327//1129
+f 479//1130 308//1130 480//1130
+f 314//1131 316//1131 478//1131
+f 316//1132 317//1132 477//1132
+f 486//1133 487//1133 489//1133
+f 486//1134 485//1134 488//1134
+f 486//1135 489//1135 484//1135
+f 484//1136 362//1136 486//1136
+f 474//1137 485//1137 362//1137
+f 475//1138 490//1138 476//1138
+f 472//1139 483//1139 328//1139
+f 409//1140 589//1140 402//1140
+f 323//1141 494//1141 336//1141
+f 494//1142 323//1142 322//1142
+f 322//1143 496//1143 494//1143
+f 500//1144 509//1145 471//1146
+f 505//1147 325//1147 323//1147
+f 516//1148 361//1148 505//1148
+f 516//1149 505//1149 517//1149
+f 517//1150 505//1150 323//1150
+f 504//1151 503//1151 519//1151
+f 499//1152 502//1152 321//1152
+f 436//1153 455//1153 464//1153
+f 451//1154 430//1154 452//1154
+f 459//1155 430//1155 427//1155
+f 459//1156 427//1156 510//1156
+f 510//1157 590//1157 576//1157
+f 510//1158 576//1158 460//1158
+f 465//1159 576//1159 511//1159
+f 576//1160 590//1160 511//1160
+f 336//1161 335//1161 517//1161
+f 333//1162 339//1162 512//1162
+f 512//1163 332//1163 333//1163
+f 522//1164 458//1164 449//1164
+f 522//1165 441//1165 521//1165
+f 522//1166 438//1166 458//1166
+f 528//1167 526//1167 527//1167
+f 547//1168 351//1168 525//1168
+f 524//1169 547//1169 525//1169
+f 351//1170 530//1170 525//1170
+f 307//1171 498//1171 319//1171
+f 310//1172 533//1172 496//1172
+f 326//1173 310//1173 496//1173
+f 480//1174 531//1174 315//1174
+f 531//1175 534//1175 533//1175
+f 534//1176 319//1176 318//1176
+f 307//1177 319//1177 532//1177
+f 376//1178 375//1178 535//1178
+f 330//1179 487//1179 488//1179
+f 488//1180 468//1055 330//1057
+f 488//1181 485//1181 468//1181
+f 476//625 485//624 474//1182
+f 472//1183 328//1183 327//1183
+f 417//1184 542//1184 376//1184
+f 540//1185 417//1185 416//1185
+f 373//1186 376//1186 542//1186
+f 537//1187 539//1187 356//1187
+f 544//1188 347//1188 489//1188
+f 347//1189 544//1189 348//1189
+f 328//1190 482//1190 546//1190
+f 547//1191 545//645 481//644
+f 481//1192 491//1192 352//1192
+f 549//1193 327//1193 331//1193
+f 551//1194 550//1194 563//1194
+f 550//1195 549//1195 563//1195
+f 553//1196 558//1196 405//1196
+f 555//1197 410//1197 405//1197
+f 389//1198 405//1198 411//1198
+f 533//1199 534//1199 495//1199
+f 495//1200 496//1200 533//1200
+f 318//1201 493//1201 534//1201
+f 540//1202 445//1202 447//1202
+f 446//1203 445//1203 540//1203
+f 442//1204 444//1204 538//1204
+f 336//1205 517//1205 323//1205
+f 500//1144 554//1206 509//1145
+f 507//1207 554//1207 561//1207
+f 507//1208 509//1208 554//1208
+f 500//1209 553//1209 552//1209
+f 557//1210 556//1210 561//1210
+f 557//1211 561//1211 554//1211
+f 440//1212 417//1212 535//1212
+f 535//1213 536//1213 439//1213
+f 371//1214 370//1214 564//1214
+f 555//1215 569//1215 570//1215
+f 570//1216 463//1216 460//1216
+f 398//1217 566//1217 414//1217
+f 524//1218 545//1218 547//1218
+f 348//1219 544//1219 350//1219
+f 541//1220 447//1220 360//1220
+f 447//1221 442//1221 360//1221
+f 442//1222 538//1222 537//1222
+f 355//1223 442//1223 537//1223
+f 382//1224 573//1224 515//1224
+f 361//1225 516//1225 573//1225
+f 516//1226 515//1226 573//1226
+f 474//1227 362//1227 572//1227
+f 393//1228 391//1228 394//1228
+f 572//1229 391//1229 474//1229
+f 475//1230 474//1230 391//1230
+f 571//1231 393//1231 384//1231
+f 316//1232 309//1232 317//1232
+f 415//1233 466//1233 458//1233
+f 415//1234 414//1234 466//1234
+f 582//1235 378//1235 299//1235
+f 383//1236 582//1236 299//1236
+f 386//1237 378//1237 582//1237
+f 561//1238 556//1238 570//1238
+f 570//1239 460//1239 575//1239
+f 555//1240 570//1240 556//1240
+f 559//1241 575//1241 576//1241
+f 553//1242 500//1242 567//1242
+f 577//1243 437//1243 563//1243
+f 563//1244 549//1244 577//1244
+f 401//1245 403//1245 446//1245
+f 399//1246 413//1246 395//1246
+f 408//1247 411//1247 343//1247
+f 579//1248 363//1248 365//1248
+f 342//1249 341//487 366//486
+f 548//1250 470//1250 562//1250
+f 561//1251 560//1251 507//1251
+f 470//1252 560//1252 562//1252
+f 469//1253 507//1253 560//1253
+f 536//1254 424//1254 423//1254
+f 376//1255 535//1255 417//1255
+f 321//1256 497//1256 320//1256
+f 555//1257 558//1257 407//1257
+f 567//703 558//702 553//1258
+f 515//1259 380//1259 382//1259
+f 383//1260 381//1260 582//1260
+f 511//1261 437//1261 435//1261
+f 575//1262 559//1262 590//1262
+f 559//1263 511//1263 590//1263
+f 427//1264 429//1264 510//1264
+f 590//1265 510//1265 575//1265
+f 514//1266 381//1266 380//1266
+f 515//1267 514//1267 380//1267
+f 518//1268 385//1268 386//1268
+o Bushes
+v -46.048153 48.493900 -0.162104
+v -46.020687 48.271935 0.234227
+v -46.460934 48.726425 -0.152020
+v -45.604572 48.761742 -0.116517
+v -14.282016 43.670837 0.507489
+v -13.428384 44.611076 0.404463
+v -13.628428 44.203674 -0.183545
+v -14.047506 43.701405 -0.266079
+v -13.281260 42.809280 0.008802
+v -13.327815 42.882565 -0.061801
+v -13.220044 42.904797 -0.036599
+v -10.513710 35.867149 0.475031
+v -10.659616 35.840050 0.703708
+v -10.832087 35.872200 0.479231
+v -2.437887 32.167847 -0.385411
+v -1.349668 33.315483 -0.433816
+v -1.569551 31.704491 -0.600477
+v 10.720780 27.216072 0.442719
+v 10.889452 27.907187 0.123714
+v 10.793886 27.324097 0.145597
+v 10.936001 27.027933 0.151717
+v -28.658382 22.541470 0.313782
+v -29.493099 23.388779 -0.341548
+v -29.143248 23.711203 -0.667158
+v -29.026203 23.691374 -0.662960
+v -28.619881 23.731672 -0.636904
+v -27.638336 23.600929 -0.390712
+v -16.061211 19.988518 0.205743
+v -15.217360 20.573883 0.197425
+v -15.706903 19.937929 -0.647790
+v -16.020525 19.714993 -0.660141
+v -14.292231 20.343296 -0.526212
+v -14.919891 20.207392 -0.584976
+v -12.865344 17.844353 -0.084499
+v -12.801692 17.656548 0.435085
+v -13.863767 17.112911 -0.121435
+v -2.304313 19.471958 0.207943
+v -2.082650 19.029007 0.269561
+v -2.340850 19.305183 0.781630
+v 4.765948 10.802735 -0.287746
+v 4.809255 10.186260 -0.284036
+v 4.572511 10.537376 -0.017409
+v 8.241728 9.799220 -0.067509
+v 8.414794 9.865959 0.140895
+v 7.672386 9.243249 -0.114245
+v 1.032569 2.774450 -0.087621
+v 0.978852 2.465832 -0.061687
+v 0.870375 2.719734 0.344656
+v 2.560249 2.903452 -0.049468
+v 2.834798 2.916172 0.068690
+v 2.806951 2.809706 -0.033029
+v 11.235162 3.502860 -0.123902
+v 11.496614 3.658741 -0.017291
+v 11.486065 3.595131 -0.118287
+v 12.139195 2.623425 0.381729
+v 11.880086 2.800529 -0.060804
+v -4.481278 -6.688349 -0.230814
+v -4.067972 -6.478770 -0.339947
+v -4.091962 -6.500000 -0.342775
+v -4.390104 -6.754502 -0.368490
+v -3.301657 -9.483603 0.216354
+v -3.262963 -9.471476 0.283695
+v -3.273957 -9.501930 0.212372
+v -3.066192 -9.601604 0.184689
+v 0.173972 -7.168903 0.075381
+v -0.025005 -7.065258 0.093787
+v 0.113124 -7.026592 0.383842
+v -0.754925 -10.708063 -0.123128
+v -0.837231 -10.820528 0.011134
+v -0.890478 -10.724224 -0.109763
+v 0.898152 -9.041588 -0.157471
+v 1.205749 -8.848026 0.359885
+v 0.591794 -9.810929 -0.213308
+v 0.680344 -9.573793 -0.208933
+v -2.950556 -9.062698 0.203660
+v -40.857033 -12.286329 0.062055
+v -41.074120 -12.636900 0.596954
+v -41.116768 -12.520878 0.075489
+v -2.839747 -11.375002 0.058230
+v -2.677922 -10.570785 0.087673
+v -2.833055 -12.071712 0.387078
+v -2.949491 -12.099548 0.118674
+v 6.764110 -14.578514 -0.555462
+v 7.366266 -15.270069 -0.320239
+v 6.504242 -15.132395 0.029327
+v 6.412953 -14.352794 -0.549655
+v -43.312748 -21.917259 0.060501
+v -43.637775 -21.804529 0.055437
+v -43.275059 -21.736366 0.647112
+v -43.213943 -22.096842 0.066296
+v -42.411968 -23.567186 0.083477
+v -42.485928 -23.479033 -0.029288
+v -35.543907 -20.435356 -0.431687
+v -35.724022 -20.726858 -0.430210
+v -35.940540 -20.244026 0.558516
+v -35.048630 -19.289825 -0.028325
+v -35.456448 -20.282217 -0.418674
+v -34.439430 -21.154354 0.322031
+v -35.472706 -20.880478 -0.473088
+v -35.381237 -20.807173 -0.479281
+v -34.469433 -20.191294 -0.450842
+v -8.146599 -21.354469 0.625088
+v -8.104762 -21.234589 0.622382
+v -8.098817 -21.224007 0.641553
+v 2.007942 -20.116312 -0.197944
+v 1.868427 -21.192137 -0.297738
+v 1.488731 -20.712793 0.527007
+v 3.083215 -20.983561 -0.306023
+v 2.658585 -21.652416 0.433103
+v 2.238363 -21.490921 -0.334961
+v -46.083481 -23.602070 0.033284
+v -46.103539 -22.807997 0.512848
+v -46.040489 -22.688761 0.063311
+v -46.058365 -23.029186 0.066745
+v -47.633499 -24.857170 -0.012557
+v -47.631020 -24.831406 0.014254
+v -46.900181 -25.700535 0.250516
+v -47.138374 -25.686970 -0.070790
+v -48.419506 -26.613045 0.262035
+v -48.481068 -26.139635 -0.072925
+v -48.047935 -26.604227 -0.108393
+v -29.250002 -25.880384 -0.103663
+v -29.882317 -26.106157 -0.267388
+v -28.913647 -25.594170 0.533584
+v -29.080801 -25.831394 -0.097687
+v -8.795738 -25.881618 -0.167532
+v -8.798409 -26.037584 -0.174557
+v -8.841323 -25.962894 -0.102147
+v -40.145557 -28.686874 -0.028034
+v -38.044170 -27.751143 -0.285567
+v -38.111832 -27.788639 -0.335294
+v -38.495701 -27.961201 -0.301069
+v -39.225811 -28.302431 -0.338538
+v -39.985298 -28.656740 -0.372364
+v -40.001045 -29.200314 -0.429601
+v -37.437614 -28.551022 -0.372584
+v -38.058876 -27.775131 -0.339795
+v -2.361691 -28.915958 0.680676
+v -1.318866 -28.481728 0.152143
+v -1.865979 -28.738729 0.244749
+v -2.163352 -28.876905 0.304654
+v -0.145357 -28.765987 0.030433
+v -0.739769 -28.365223 0.068442
+v -0.072444 -28.611616 0.612771
+v -2.382004 -29.085733 0.354115
+v 0.817244 -30.314692 0.088357
+v 0.793497 -30.292589 0.052671
+v -2.521921 -30.655153 0.501407
+v -2.386303 -30.948446 0.506544
+v -2.528716 -30.783381 0.820241
+v -37.589481 -31.140732 -0.624925
+v -37.569786 -31.369530 -0.310724
+v -39.734344 -31.063082 -0.454330
+v -39.465431 -30.973051 -0.613838
+v -18.201223 -31.044554 0.105794
+v -17.995747 -31.235371 0.255126
+v -18.208467 -31.377075 0.028275
+v -18.133377 -31.962622 0.198001
+v -18.374886 -31.923597 -0.087748
+v -15.096738 -32.261463 -0.004636
+v -15.736505 -31.735151 -0.237903
+v -14.807117 -31.823006 -0.327000
+v 0.618883 -30.683691 0.110683
+v 0.797623 -30.325687 0.055199
+v 0.293565 -31.391123 0.289116
+v 0.272013 -31.369345 0.205741
+v 2.961316 -34.710091 0.160651
+v 2.706100 -34.654411 0.630072
+v 2.664299 -34.555294 0.146579
+v 2.679535 -34.562904 0.145246
+v 35.850368 49.467285 0.746176
+v 36.469242 50.699169 0.043239
+v 36.151600 49.992012 -0.011739
+v 35.870205 49.356892 -0.108442
+v 34.147224 49.191692 -0.195526
+v 34.183353 49.194408 -0.199394
+v 38.765568 50.827812 -0.112790
+v 38.746464 50.838795 -0.110153
+v 39.249443 50.708611 0.208807
+v 39.112225 50.670212 -0.058767
+v 39.461334 48.065926 0.361369
+v 39.406311 48.430740 -0.138514
+v 39.598282 49.465446 -0.041687
+v 21.904758 44.515869 0.298766
+v 21.881311 44.515991 0.253854
+v 21.901876 44.593407 0.238084
+v 34.282524 46.485966 -0.327633
+v 34.050949 46.334373 0.459038
+v 33.885006 46.830505 -0.268863
+v 35.988010 46.186646 -0.528722
+v 36.190990 46.180672 -0.521201
+v 35.280819 45.897430 0.009279
+v 35.077629 46.140816 -0.430286
+v 37.127136 47.503014 -0.360520
+v 37.350872 47.541672 0.447478
+v 36.341942 46.294159 -0.499793
+v 36.763577 46.932129 -0.396958
+v 43.113934 47.367607 -0.124710
+v 43.152939 47.384846 -0.146435
+v 43.115814 47.356583 -0.140385
+v 42.627613 45.932316 0.010941
+v 43.024269 45.064602 0.026064
+v 42.572021 45.901718 0.148459
+v 25.341122 44.169556 0.151069
+v 25.750723 43.882645 0.136042
+v 25.199474 44.049965 0.440383
+v 25.138027 44.331791 0.132585
+v 30.786510 40.554970 -0.173228
+v 30.141064 40.358292 0.350325
+v 30.081928 40.611919 -0.139214
+v 41.273148 40.586601 0.342626
+v 41.008934 40.980717 0.234226
+v 41.022121 41.156059 0.502226
+v 12.316309 26.126165 0.132117
+v 12.263103 26.120262 0.153622
+v 12.253578 26.124054 0.134233
+v 41.553654 22.069359 -0.318383
+v 43.327927 22.974995 0.030793
+v 43.033119 22.549446 -0.781773
+v 42.012310 22.102770 -0.778657
+v 43.662052 22.572174 -0.811317
+v 44.609329 22.378342 -0.284218
+v 44.265232 22.325548 -0.854386
+v 44.189995 22.351990 -0.862295
+v 44.472778 21.958107 -0.815040
+v 13.597102 17.112164 0.201272
+v 13.975605 16.900486 -0.002742
+v 13.705148 17.002371 -0.007929
+v 38.563850 16.763268 0.220517
+v 39.876202 16.312656 -0.085850
+v 39.431541 16.350861 -0.500986
+v 38.584698 16.582085 -0.573249
+v 18.817669 14.568222 0.195689
+v 19.641657 14.915763 -0.292245
+v 18.879387 14.403723 -0.260082
+v 18.418081 13.463850 -0.238984
+v 18.441614 12.647950 -0.231796
+v 18.164865 13.223824 0.203125
+v 21.140669 14.420852 -0.398260
+v 21.188091 14.691593 0.286014
+v 21.542822 12.539665 0.480407
+v 21.329155 13.210557 -0.373788
+v 39.902924 16.085302 -0.437383
+v 20.755747 11.745976 -0.350895
+v 20.147249 11.400326 0.527725
+v 19.861631 11.812120 -0.301939
+v 31.067524 10.200344 -0.103199
+v 31.018433 9.661509 -0.130582
+v 30.882320 10.001553 0.490579
+v 26.184422 3.739693 0.062758
+v 27.051592 4.896641 -0.061195
+v 27.038956 4.866495 -0.093576
+v 26.235262 3.769149 -0.043237
+v 27.743885 3.552985 -0.210170
+v 27.114681 3.125690 0.379695
+v 26.961061 3.453023 -0.114806
+v 17.161774 0.129710 0.029406
+v 16.900324 0.154999 0.267444
+v 16.793772 0.567133 0.003967
+v 17.069445 0.266793 -0.001502
+v 33.905884 -2.483424 -0.338672
+v 33.913212 -2.824025 -0.244440
+v 33.685646 -2.520966 -0.214410
+v 35.296703 -2.411847 -0.119677
+v 35.079552 -1.905564 -0.295122
+v 35.086494 -1.555096 0.353447
+v 35.505043 -2.823887 0.177892
+v 35.395821 -2.687866 -0.118374
+v 44.224453 -4.665334 -0.261786
+v 44.324409 -4.614046 -0.258061
+v 44.374100 -4.831938 0.103234
+v 43.884148 -4.841936 -0.271518
+v 44.327305 -4.603621 -0.258323
+v 44.517830 -3.978070 -0.219924
+v 44.791061 -3.852428 0.546353
+v 45.391884 -19.447773 0.136923
+v 45.821568 -18.886665 -0.476913
+v 46.125530 -20.015907 -0.763154
+v 41.049839 -28.315659 -0.180659
+v 41.137020 -29.444511 -0.301278
+v 40.766636 -28.762663 0.394702
+v 43.341644 -27.082958 0.944967
+v 44.444736 -28.087774 -0.303167
+v 44.299587 -27.981234 -0.285891
+v 42.967281 -27.020811 -0.227536
+v 42.872982 -30.557455 -0.298779
+v 43.103279 -30.712730 0.727805
+v 42.290031 -30.493752 -0.311643
+v 43.776981 -30.343361 -0.290166
+v 44.160419 -30.317696 0.031542
+v 27.407207 -32.353252 0.138996
+v 28.675171 -31.739656 0.272078
+v 28.467396 -32.208096 -0.829142
+v 27.941326 -32.424843 -0.773371
+v 45.729435 -32.741589 -0.159901
+v 45.755512 -32.793373 -0.157367
+v 45.717777 -32.781490 -0.115243
+v -19.209841 -37.102264 -0.290785
+v -18.479387 -37.805428 -0.275550
+v -19.238655 -37.812634 0.380929
+v -12.395703 -38.108387 -0.048551
+v -12.409625 -38.105946 -0.049135
+v -12.409602 -38.094536 -0.037500
+v -10.881505 -38.767197 0.308676
+v -10.851476 -38.964260 -0.022071
+v -11.375002 -38.660347 -0.005794
+v -3.819831 -41.866947 0.675166
+v -2.695623 -42.016094 -0.055432
+v -3.016663 -42.016666 -0.131106
+v -3.676662 -42.003948 -0.195169
+v -39.136658 -42.637676 -0.166486
+v -39.588573 -42.693855 -0.140593
+v -39.230488 -42.570293 0.032378
+v -38.917309 -46.256687 -0.283834
+v -38.492477 -46.297531 -0.197320
+v -39.262741 -46.472958 0.993027
+v -40.068298 -46.202694 -0.212224
+v -26.859821 -44.921078 -0.087545
+v -27.081266 -45.015488 -0.062858
+v -26.888241 -44.894398 -0.015109
+v -3.911665 -43.052849 -0.236247
+v -4.308084 -42.810097 0.267928
+v -3.966721 -42.482174 -0.240670
+v -3.914815 -42.914818 -0.251109
+v -46.436588 -50.792782 -0.093619
+v -46.684700 -50.481106 -0.489585
+v -46.594276 -49.765617 -0.428032
+v -27.944706 -47.928143 0.096078
+v -27.512300 -48.408012 0.064233
+v -27.904774 -48.185535 0.908739
+v -48.768547 -50.632614 -0.378022
+v -49.276196 -49.972214 0.145651
+v -48.998566 -49.992493 -0.364441
+v -48.876694 -50.311653 -0.384763
+v 29.642069 -34.744072 -0.945103
+v 28.852663 -35.298546 0.061508
+v 27.822437 -34.866737 -0.650276
+v 28.097601 -34.822300 -0.740243
+v 37.962132 -35.874710 -0.441738
+v 37.041199 -35.030964 0.201877
+v 37.321697 -34.745850 -0.498145
+v 37.727783 -35.443523 -0.479218
+v 39.446224 -41.381336 0.037376
+v 40.517948 -40.564129 0.008093
+v 40.510525 -40.575684 -0.007053
+v 39.476170 -41.373108 -0.001487
+v -46.808983 49.034073 0.658075
+v -45.604332 49.506706 0.911391
+v -46.108952 50.061291 0.006469
+v -46.469257 49.879738 -0.026636
+v -46.873600 49.134323 -0.122819
+v 0.417241 45.600670 0.380386
+v 0.191413 45.545670 0.379173
+v 0.241139 45.564583 0.561628
+v 0.177596 44.546341 0.457979
+v 1.090565 44.854164 1.036982
+v 0.112613 44.814060 0.435173
+v 0.855600 44.539719 0.475224
+v 5.109244 42.469540 0.257672
+v 4.456158 41.756001 0.158950
+v 5.365124 41.732498 0.905465
+v 5.220273 42.572826 0.285254
+v -11.413655 39.192562 0.517201
+v -12.576738 38.137695 0.498760
+v -12.524884 38.149498 0.998557
+v -11.561364 38.481232 1.640858
+v -10.007159 38.351379 1.515421
+v -10.844505 39.400711 0.513180
+v -11.072183 39.433548 0.516463
+v -10.007731 37.003296 1.731494
+v -12.083671 36.464882 1.304675
+v -10.093171 38.994705 0.499497
+v -9.277373 37.753548 0.476975
+v -9.238283 37.397602 0.473057
+v -1.811079 32.564034 0.831268
+v -0.858095 32.608292 0.390189
+v -2.262839 33.002487 0.079389
+v -1.517735 31.616852 0.596383
+v 12.186872 27.042995 1.645107
+v 13.969719 26.423126 0.821934
+v -28.403423 24.357716 -0.084514
+v -28.951122 23.882511 -0.638818
+v -29.036016 23.793579 -0.652733
+v -28.699944 23.848957 0.800807
+v -19.015223 22.556486 0.120619
+v -18.766846 22.360283 0.818764
+v -18.404985 21.794140 0.049376
+v -19.500801 21.126156 0.538709
+v -20.178835 22.004486 -0.190808
+v -19.430927 21.261477 -0.235458
+v -18.541470 21.526085 -0.032492
+v -13.599502 20.338215 0.682087
+v -13.589358 20.229841 -0.431255
+v -1.189548 21.539869 0.029013
+v -2.288719 20.443802 0.098140
+v -1.346479 21.245560 1.265125
+v 0.082942 21.509396 1.257199
+v -0.598671 21.644361 0.047010
+v 4.734308 21.125002 -0.071074
+v 4.651875 21.309765 -0.059905
+v 4.199280 21.830379 0.586384
+v 4.622496 20.153564 1.391638
+v 4.876074 20.832893 -0.120663
+v 3.713348 21.425587 1.269483
+v -14.583490 16.930313 -0.185882
+v -15.532544 17.503288 1.098573
+v -15.660314 17.682238 -0.394796
+v -12.847701 19.592255 -0.130842
+v -12.979508 19.695154 -0.300995
+v -13.237729 19.227463 1.315438
+v -14.679109 19.294315 1.855344
+v -13.694718 17.588985 1.355082
+v 0.665983 18.755035 0.027292
+v 0.863830 18.861782 0.786974
+v -0.403592 18.132431 0.346770
+v -0.244703 18.227381 0.060212
+v -0.470658 19.431690 1.942273
+v 2.724153 19.313629 1.139340
+v 2.617039 19.134216 -0.121774
+v 3.481354 18.807796 -0.242948
+v 3.981172 18.699471 0.153848
+v -42.757748 14.577305 0.259754
+v -43.371098 14.183261 0.286712
+v -42.816483 14.578133 0.838336
+v -42.836658 13.402283 0.237256
+v -42.605377 13.396313 0.628918
+v -43.216103 13.742682 0.267425
+v -41.980782 14.224249 0.205923
+v -41.968422 14.599248 0.213856
+v -6.260275 14.720208 0.909263
+v -5.503238 14.835125 1.497625
+v -5.367782 15.176113 0.815857
+v -6.077750 14.804124 0.913059
+v -3.867957 14.547398 1.278942
+v -4.402967 14.962236 0.767088
+v -4.469005 12.594004 0.967740
+v -3.872245 12.932043 0.804502
+v -4.744275 13.245667 1.936493
+v -4.949481 12.170251 0.931471
+v -6.299415 12.860691 1.457743
+v 2.504410 15.392799 0.714143
+v 3.615024 14.666122 0.758797
+v 2.983177 15.517661 -0.477634
+v 2.894252 15.577906 -0.486904
+v 2.608961 14.744020 -0.500632
+v 3.000318 13.970882 0.023679
+v -32.324890 11.668102 1.036577
+v -30.723934 12.799660 0.731626
+v -31.719902 12.560161 -0.221062
+v -32.045124 12.367887 -0.251584
+v -32.259483 12.045390 -0.289097
+v -32.979008 10.826225 0.240178
+v -31.894489 9.860863 1.498212
+v -29.637154 12.316433 1.122205
+v -31.036270 11.671501 1.985139
+v 5.399837 9.003159 0.422825
+v 5.398211 9.151582 -0.227446
+v 5.103509 10.634319 1.310607
+v 5.186887 11.880531 -0.117149
+v 6.564617 12.199112 1.040800
+v 6.063149 12.041329 -0.160168
+v 5.222853 11.880512 -0.242274
+v 5.652322 9.074188 -0.202721
+v 6.695337 8.773008 -0.173698
+v 7.210735 12.171638 -0.048110
+v 8.148048 11.264072 0.920814
+v 7.725395 11.838345 -0.000821
+v 7.693770 11.857982 -0.001251
+v 6.517717 11.250809 1.929505
+v 7.541064 9.851498 1.469319
+v 6.519415 9.105164 1.301945
+v 6.985228 8.752634 -0.162915
+v -16.671600 6.753195 0.509877
+v -17.403223 6.466816 0.568063
+v -16.491013 6.649357 0.793996
+v -16.341780 6.323468 0.479188
+v -16.998781 5.701751 0.528531
+v 1.576249 1.060359 0.073846
+v 1.633433 0.915723 0.078939
+v 1.100784 1.860714 1.096713
+v 2.653825 1.997902 0.915135
+v 1.706317 0.945605 0.092998
+v 10.385793 3.021460 -0.134152
+v 10.637048 3.230656 0.766751
+v 11.198324 2.025372 0.515213
+v 10.649290 2.568271 -0.099761
+v 11.246436 1.970290 -0.044048
+v 11.772142 2.316609 -0.040209
+v -1.221432 -6.839672 0.160359
+v -42.790394 -9.416056 1.068863
+v -40.990128 -9.772612 1.265903
+v -41.899109 -9.420728 0.036768
+v -42.675331 -9.282463 0.053506
+v -42.874321 -10.540810 1.653926
+v -6.049393 -10.376470 -0.069352
+v -5.665490 -9.690098 0.669514
+v -5.571163 -9.743481 -0.148632
+v -5.776414 -10.022882 -0.149412
+v -3.147384 -8.783578 0.240568
+v -2.899584 -8.953979 0.204571
+v -3.840358 -8.037998 1.159280
+v -4.612453 -7.898006 0.082765
+v -3.426646 -8.633554 0.153395
+v -2.691024 -7.065792 1.468784
+v -3.476079 -6.442570 1.033915
+v -2.868889 -8.952149 0.201439
+v -2.000072 -7.554323 1.301811
+v -5.010669 -10.168653 1.565336
+v -3.277944 -10.849691 1.377984
+v -2.799149 -10.005516 0.415393
+v -4.891494 -11.796387 2.071682
+v -6.124501 -11.231720 1.275123
+v 0.216010 -10.238315 -0.198385
+v -0.306683 -10.077333 1.528216
+v -0.467044 -10.640034 -0.149563
+v -1.647852 -6.848189 0.194320
+v -1.700507 -6.806514 0.202285
+v 0.036338 -8.457640 1.803116
+v -1.968257 -9.056311 1.456844
+v -2.539768 -9.812366 0.116965
+v -2.401872 -9.919552 0.096219
+v -1.626775 -10.412080 -0.014035
+v -42.848408 -12.341636 0.098608
+v -42.660099 -11.932514 1.339898
+v -43.739204 -11.599016 0.870942
+v -43.334145 -12.107987 0.094765
+v -40.322422 -11.203217 0.019139
+v -40.227592 -10.885132 0.741913
+v -40.406963 -11.375000 0.022999
+v -42.442684 -12.449236 0.104417
+v -41.846916 -12.613685 0.095552
+v -41.273354 -11.171387 1.621781
+v -11.271428 -12.001448 -0.167299
+v -11.286660 -11.861620 0.716767
+v -10.637385 -12.566477 -0.004124
+v -10.679281 -12.535704 -0.061059
+v -10.923249 -12.313598 -0.090841
+v -11.435054 -13.182936 0.606207
+v -12.416383 -11.951817 0.210817
+v -12.264283 -12.734695 -0.234392
+v -12.009851 -13.094139 -0.166309
+v -11.312559 -13.211800 -0.094268
+v -11.918195 -13.109554 -0.152389
+v -10.692469 -12.628794 -0.058969
+v -5.893506 -12.484818 0.272776
+v -6.279191 -11.088815 0.111062
+v -6.195117 -11.375001 0.194080
+v -3.597338 -12.652664 0.224322
+v -3.570776 -12.635871 0.220387
+v -3.512521 -12.196970 1.347040
+v -4.299179 -13.112340 0.283283
+v -2.678969 -9.941325 0.124191
+v 7.679485 -14.184532 0.643340
+v 7.843889 -14.293285 -0.442363
+v 7.737830 -14.183033 -0.434982
+v 7.044463 -13.481876 -0.047581
+v 6.816033 -14.224434 0.833860
+v -44.409210 -21.561367 0.545010
+v -45.153954 -22.032236 0.053878
+v -45.465221 -22.263029 0.058947
+v -45.768162 -22.487938 0.065661
+v -45.269371 -22.637461 1.625517
+v -43.816750 -22.871986 1.836941
+v -34.429020 -20.128508 0.779528
+v -12.244397 -20.432989 0.971663
+v -11.125396 -20.088915 0.602153
+v -11.713340 -20.222765 0.584222
+v -12.327191 -20.376402 0.628267
+v -12.812591 -20.754332 0.683684
+v -13.027474 -21.153397 1.383760
+v -12.537673 -20.543667 0.662166
+v -13.264850 -22.288424 1.272119
+v -13.300975 -21.915831 0.802480
+v -13.286656 -22.144552 0.825890
+v -13.275161 -22.356104 0.788583
+v -11.081165 -20.156836 0.613640
+v -11.688272 -22.954041 0.902214
+v -11.345572 -21.635937 1.656113
+v -10.783319 -20.208441 0.638246
+v -9.769782 -20.891766 1.933689
+v -10.573763 -20.064741 0.632159
+v -8.899233 -20.066622 0.633051
+v -8.896131 -20.057755 0.690460
+v -8.107628 -21.215738 0.622247
+v -10.006614 -20.072399 0.667235
+v -9.253096 -20.036777 0.643600
+v -9.601626 -22.327156 1.845762
+v -9.102428 -23.092453 0.457485
+v -8.838828 -23.061504 0.491605
+v 2.562676 -19.793171 0.511685
+v 2.349481 -19.829023 -0.178375
+v 3.038462 -20.455700 -0.254425
+v 3.345410 -20.941971 0.488837
+v 3.268405 -20.791716 -0.291957
+v -47.227085 -26.098942 -0.093555
+v -42.796455 -23.770947 1.224532
+v -44.535824 -25.257011 0.638985
+v -45.250648 -24.397547 1.490029
+v -28.439772 -26.243608 -0.163615
+v -28.408905 -26.699684 0.806412
+v -28.255318 -26.585758 -0.215704
+v -30.004292 -26.793514 0.710954
+v -30.072149 -26.261253 -0.329477
+v -11.581655 -22.871170 0.457410
+v -11.899499 -23.122536 0.460919
+v -12.879328 -22.719683 0.670196
+v -10.672321 -23.233038 0.265212
+v -10.462264 -23.328930 0.262266
+v -7.232169 -26.464785 1.417577
+v -6.566989 -25.138163 0.936168
+v -8.172126 -25.369274 1.032060
+v -6.429365 -25.337492 0.256184
+v -6.115030 -26.772793 0.248939
+v -6.962615 -27.538963 0.788238
+v -6.138119 -26.920603 0.238799
+v -38.552994 -29.545467 1.941752
+v -39.213249 -28.517479 1.459949
+v -39.537094 -30.172810 1.493618
+v -37.430840 -28.683065 1.255126
+v -37.846699 -30.716419 1.472452
+v -37.036491 -29.933544 1.184426
+v -29.115318 -27.581392 -0.356695
+v -29.250002 -27.405361 -0.329594
+v -29.098516 -27.581236 -0.356799
+v -1.532353 -29.832813 1.747798
+v 0.126928 -29.437239 1.272371
+v -0.356405 -31.158754 1.380563
+v -39.004589 -31.233109 0.712082
+v -15.386066 -30.609488 0.000503
+v -15.839530 -31.261000 -0.119015
+v -15.007781 -30.476009 0.774563
+v -18.774298 -31.048594 0.147068
+v -19.005386 -30.987642 0.110289
+v -19.343891 -31.544384 0.607905
+v -15.339795 -31.476593 1.016605
+v -15.956919 -31.470127 -0.159455
+v -14.661137 -30.917089 -0.125111
+v -14.370183 -31.615093 0.504040
+v -14.397198 -31.384552 -0.254284
+v -0.881690 -31.712328 0.375900
+v 0.076178 -31.476797 0.238334
+v 2.120370 -32.191456 0.036486
+v 1.805395 -32.929203 0.131480
+v 1.879633 -32.293182 0.910400
+v 2.930748 -31.423309 0.604036
+v 4.093686 -31.643730 1.238892
+v 4.379894 -31.466591 -0.237469
+v 3.947956 -31.417786 -0.239974
+v 5.707622 -33.297832 0.251229
+v 5.211892 -32.547737 -0.114796
+v 2.117703 -33.455509 1.279612
+v 1.877043 -33.405624 0.158420
+v 4.486671 -34.398941 1.481155
+v 4.846344 -32.852295 1.481436
+v 3.561647 -32.737152 1.956389
+v 5.591735 -33.094357 -0.052460
+v 12.500594 -34.083477 -0.020016
+v 12.209620 -34.520432 0.060060
+v 12.501115 -33.938992 0.408170
+v 24.545317 49.876297 0.058261
+v 23.597660 48.488415 0.096273
+v 24.592966 49.711655 1.277310
+v 23.576166 48.375191 0.098275
+v 24.706200 48.677689 1.783420
+v 25.101826 49.817337 0.048117
+v 26.141857 49.537514 1.325850
+v 26.412533 49.820221 0.084271
+v 25.728178 49.825428 0.035662
+v 37.755493 50.984077 -0.020519
+v 36.638119 50.849258 0.047382
+v 37.886955 50.750572 1.350828
+v 39.460625 50.384739 -0.012050
+v 38.396965 49.504761 2.068531
+v 39.547298 50.030392 -0.017324
+v 36.670231 48.167549 1.455575
+v 38.127781 47.969933 1.275973
+v 47.090111 47.995682 0.962931
+v 47.355789 48.245468 -0.398181
+v 44.479694 47.390221 1.487126
+v 19.512964 46.677994 0.280290
+v 19.135416 45.972237 0.454213
+v 19.219305 46.340363 0.746815
+v 19.805119 44.408310 0.600640
+v 19.520945 44.642403 1.257364
+v 19.270321 44.840050 0.615732
+v 20.113010 44.104378 0.926891
+v 21.399784 44.901390 1.316198
+v 21.868574 44.991344 0.179074
+v 21.771673 46.025814 0.166569
+v 21.720207 46.177246 0.673134
+v 20.371056 46.200485 1.552369
+v 21.582232 46.409473 0.164955
+v 20.997429 46.562397 0.174347
+v 21.857742 44.495449 0.260912
+v 20.173471 44.063747 0.597870
+v 26.811960 47.995750 0.121742
+v 26.876045 48.357498 0.861706
+v 26.122095 46.850143 0.691726
+v 26.331339 47.073368 0.132988
+v 25.154846 46.510460 0.093153
+v 24.406023 47.017136 0.880841
+v 24.336157 47.044033 0.101849
+v 26.156567 46.965370 0.138231
+v 25.393669 46.505047 0.095814
+v 25.548056 44.940193 0.146267
+v 26.155672 45.012291 0.846466
+v 26.201168 45.037193 0.126974
+v 25.566685 44.942917 0.147517
+v 26.704033 44.603588 0.108114
+v 26.042912 47.807846 1.692442
+v 35.036781 46.617050 1.409007
+v 35.698402 47.055779 1.799981
+v 36.256844 46.224937 -0.512565
+v 43.398220 46.097122 1.665702
+v 43.384758 44.496769 0.028870
+v 43.473042 44.409534 0.027447
+v 44.550610 44.538635 1.221280
+v 44.511791 46.346230 2.094193
+v 48.189407 47.212036 0.517915
+v 45.103745 44.591496 -0.125062
+v 44.510338 44.352272 -0.057386
+v 45.859051 44.968395 -0.216299
+v 46.280025 45.373367 0.850409
+v 45.883854 46.788010 1.455327
+v 47.184170 46.763046 1.581502
+v 47.764446 45.756966 0.960353
+v 26.268147 44.087090 0.119936
+v 31.179688 41.649155 -0.026205
+v 30.099102 41.652489 0.455628
+v 31.185947 40.763298 0.601202
+v 30.059305 41.226490 -0.116238
+v 38.920944 41.220592 -0.082084
+v 38.537689 40.540905 -0.004111
+v 39.016953 41.384460 0.630497
+v 40.830349 41.223438 0.165405
+v 39.563755 41.404171 -0.033092
+v 38.287605 39.861767 0.099008
+v 38.618076 39.976135 1.385788
+v 38.341061 40.010765 0.069995
+v 40.453007 40.075813 1.916447
+v 19.092670 39.255856 0.171385
+v 18.106400 39.780922 0.266320
+v 18.320263 39.198654 1.511828
+v 17.083204 39.800812 0.506895
+v 16.321095 38.675262 0.326190
+v 19.133036 39.000004 0.125925
+v 18.747829 37.737038 0.911673
+v 19.138121 38.892429 0.127353
+v 17.529676 37.610840 1.304421
+v 31.523888 35.511780 1.397294
+v 32.599300 36.684608 1.232004
+v 32.054691 36.789330 0.059157
+v 31.728325 36.444393 0.089542
+v 33.990005 35.823853 1.572970
+v 33.469620 36.772923 0.160378
+v 33.077305 36.990921 0.115061
+v 38.177467 39.095886 0.360426
+v 38.169399 39.192841 0.234408
+v 39.008293 38.799255 1.438867
+v 40.928143 38.449249 0.646384
+v 40.876213 38.425343 0.607537
+v 40.923897 38.449028 0.606802
+v 41.304321 40.370621 0.387272
+v 41.435932 39.677242 0.478818
+v 16.050274 33.212635 0.142534
+v 15.763187 32.519821 0.122217
+v 16.154018 33.582420 0.544263
+v 16.147718 33.443424 0.135004
+v 15.475960 31.695784 0.098954
+v 15.663455 32.077728 1.151880
+v 16.623011 31.817001 1.725912
+v 17.485851 32.961006 1.621037
+v 18.290035 32.291054 1.498527
+v 18.469410 33.228584 0.512068
+v 30.969273 35.196239 0.199136
+v 33.384651 33.416718 0.557262
+v 33.409534 33.463203 0.348373
+v 33.643326 33.645485 0.332265
+v 32.691219 34.721169 1.997621
+v 32.211109 33.809181 1.226271
+v 33.894611 34.114807 1.411452
+v 42.153812 33.046211 0.639020
+v 42.017868 33.088352 0.489123
+v 42.206772 33.060135 0.474370
+v 42.517731 33.367554 0.443277
+v 42.495335 33.385258 0.610732
+v 42.906986 33.752373 0.404355
+v 41.871796 33.741741 0.488380
+v 42.274200 34.184822 0.447273
+v 42.152843 33.585766 0.542690
+v 42.140572 34.037685 0.460924
+v 14.180994 26.521294 0.083543
+v 14.315802 26.683542 0.074619
+v 14.617854 27.311871 1.283275
+v 14.060756 26.374413 0.081447
+v 14.998894 28.521700 0.019809
+v 14.104497 29.184776 1.068911
+v 15.052348 28.371988 0.017338
+v 42.226242 21.372364 1.419997
+v 43.081257 22.665955 1.088595
+v 44.659245 21.352329 1.383294
+v 43.665508 21.573299 1.870789
+v 42.337048 19.925758 1.264197
+v 12.226491 16.276943 -0.008568
+v 11.957667 15.886051 0.836643
+v 13.358703 17.012857 -0.014666
+v 12.914332 16.726912 -0.023536
+v 14.917947 16.049667 1.157981
+v 13.462982 16.547352 1.493972
+v 42.236435 19.592308 -0.091125
+v 44.038567 19.378693 0.411963
+v 43.960018 20.158466 1.413091
+v 44.485447 19.820648 -0.614848
+v 45.295765 21.076893 -0.010857
+v 15.087651 14.484416 0.268406
+v 15.108392 14.979394 0.011431
+v 15.102519 15.146297 0.017856
+v 15.071966 16.168638 0.018043
+v 15.036650 14.475152 0.639367
+v 12.701392 14.137196 1.456454
+v 12.631650 13.697256 0.014247
+v 13.405336 13.757473 0.002370
+v 14.292521 13.910066 0.266240
+v 14.371013 14.071232 0.780073
+v 14.026544 15.017467 1.896937
+v 14.764301 14.328404 0.906527
+v 14.373935 14.090220 0.798909
+v 19.174726 14.205597 1.358223
+v 19.397570 12.295612 1.453364
+v 20.985889 13.430962 1.461536
+v 37.053997 15.596107 1.020313
+v 37.553230 16.376835 -0.147134
+v 39.685741 15.751305 1.300313
+v 39.998543 13.648791 -0.017453
+v 39.744915 13.768089 1.658799
+v 38.726307 12.861294 0.067856
+v 38.587448 15.561260 2.048320
+v 40.733624 14.891819 -0.050134
+v 37.998451 14.786560 1.974623
+v 37.330215 13.500870 0.928443
+v 18.706907 12.304288 -0.242948
+v 18.962500 12.096242 -0.254974
+v 21.204460 12.111585 -0.370200
+v 21.125000 12.045479 -0.374516
+v 32.181358 9.589087 -0.123690
+v 32.135098 9.523197 0.490189
+v 31.547777 9.456938 -0.136025
+v 31.892403 10.633762 1.025578
+v 32.261066 10.951286 -0.054864
+v 32.110790 10.852243 -0.061175
+v 18.435953 1.116942 0.012992
+v 17.629868 1.222931 0.827354
+v 18.291553 0.222824 0.527971
+v 18.512897 0.923130 0.009509
+v 27.721682 3.751637 -0.159306
+v 26.870457 4.347439 0.803739
+v 34.031410 -2.350285 0.885874
+v 34.148144 -1.561226 -0.475388
+v 34.074287 -2.987100 -0.172299
+v 34.270939 -3.231736 -0.166930
+v 43.130035 -3.428064 -0.180596
+v 42.982533 -3.480469 -0.183394
+v 43.418083 -3.511703 0.859317
+v 44.596893 -2.990217 0.310558
+v 43.682625 -4.698522 -0.261883
+v 43.875008 -4.835425 -0.271075
+v 20.082073 -11.083014 0.837898
+v 19.702145 -10.969568 -0.070304
+v 19.777401 -12.264538 -0.203686
+v 46.323753 -18.913883 0.577737
+v 46.789661 -18.889870 -0.304576
+v 45.983665 -20.109085 0.533623
+v 47.174858 -19.949217 0.378974
+v 42.549568 -27.121000 -0.207143
+v 41.444725 -27.766499 -0.151216
+v 41.743057 -27.426262 0.708557
+v 41.378391 -27.859516 -0.147575
+v 41.671894 -30.227133 -0.332495
+v 41.806984 -30.054716 1.443399
+v 41.393837 -29.827698 -0.352000
+v 43.775597 -29.877245 1.633385
+v 44.366413 -28.884956 1.225731
+v 42.320679 -28.133575 1.863430
+v 44.603844 -28.423319 -0.344753
+v 44.609528 -28.330875 -0.335427
+v 44.539631 -29.235840 -0.316480
+v 44.321815 -29.965624 -0.293985
+v 46.054249 -31.125452 0.823668
+v 47.965046 -30.436071 0.822625
+v 47.149773 -30.340658 -0.218899
+v 46.660995 -30.515299 -0.223181
+v 27.314941 -33.081356 1.246216
+v 27.003748 -33.903790 -0.690444
+v 27.965378 -34.709335 1.379907
+v 29.230011 -32.651249 1.643683
+v 28.783419 -34.097126 1.852955
+v 30.368885 -32.799519 0.784088
+v 29.897020 -32.633278 -0.962237
+v 29.643644 -32.466675 -0.938775
+v 29.782791 -34.708160 0.919059
+v 30.567463 -33.907249 -0.049981
+v 38.068298 -34.150742 -0.039860
+v 37.571808 -34.536900 -0.480576
+v 39.008671 -34.976223 0.753146
+v 46.041786 -31.411427 -0.203142
+v 47.545856 -31.379971 1.880871
+v 45.998581 -32.445641 1.142334
+v 46.978729 -33.908123 0.447039
+v 47.215778 -33.357452 1.379933
+v 48.285572 -33.559887 -0.072173
+v 48.532879 -33.446766 -0.070940
+v 48.696022 -33.320419 -0.072079
+v 48.890747 -32.110695 1.302745
+v 48.552662 -30.986158 0.000895
+v 48.992233 -31.675198 -0.004271
+v 49.082096 -32.614807 -0.090116
+v -18.679218 -36.662727 0.506768
+v -19.083967 -36.786472 -0.321903
+v -17.982113 -36.769115 -0.321178
+v -18.028763 -37.598225 0.649215
+v -18.143061 -37.760651 -0.296994
+v -18.140587 -37.744869 -0.298345
+v -18.139719 -36.564644 -0.331402
+v -12.058383 -38.788410 1.290471
+v -6.238769 -35.565910 -0.171804
+v -6.201318 -35.686127 0.704680
+v -4.674218 -36.056065 0.101772
+v -5.172754 -35.885166 -0.103389
+v -5.525721 -35.778767 -0.131593
+v -5.214892 -36.829876 0.549732
+v -5.598798 -36.950386 -0.201871
+v -5.002488 -36.327393 -0.121242
+v -6.488072 -36.731468 0.404894
+v 4.573635 -34.863274 0.464942
+v 12.931271 -35.450726 0.226458
+v 12.620256 -35.140785 0.894004
+v 12.193023 -35.003902 0.147731
+v -21.374964 -40.311230 -0.140813
+v -21.594318 -40.087002 0.688473
+v -21.972900 -41.379131 0.696003
+v -21.493977 -40.717777 -0.138742
+v -22.972874 -40.137852 0.174900
+v -18.405159 -42.454681 -0.268598
+v -18.875999 -42.973698 -0.253711
+v -18.630234 -42.593571 0.730427
+v -17.927582 -41.884621 0.112448
+v -17.779564 -43.002087 1.651425
+v -16.675896 -42.550545 1.290811
+v -13.592040 -39.793617 -0.098886
+v -13.708773 -39.961323 -0.112789
+v -13.718469 -39.980968 1.188225
+v -12.422700 -38.113308 -0.049684
+v -12.368197 -41.952675 -0.120041
+v -12.654885 -41.495281 1.370793
+v -13.514888 -41.374531 -0.096255
+v -13.340425 -41.474304 -0.155934
+v -11.374585 -41.688568 1.004297
+v -10.357015 -41.315079 0.363646
+v -11.362285 -40.175903 1.948316
+v -10.630906 -40.040359 -0.029017
+v -10.446838 -40.941662 -0.056265
+v -2.644303 -42.110897 -0.033628
+v -2.753721 -42.897350 0.539544
+v -40.241936 -43.000561 -0.109638
+v -39.553658 -43.006088 1.259386
+v -39.569824 -44.645519 2.198484
+v -38.273960 -44.022755 1.671069
+v -40.889641 -43.962837 0.911682
+v -40.536865 -45.676868 1.125974
+v -37.957424 -45.563210 1.266057
+v -37.508629 -44.908066 0.008246
+v -37.994678 -45.950954 -0.094562
+v -37.997776 -43.090199 0.693554
+v -25.149879 -46.194633 0.395822
+v -25.619184 -45.873360 -0.149310
+v -26.000000 -45.582954 -0.158068
+v -27.391598 -45.622803 1.612063
+v -25.903980 -45.843948 1.354384
+v -26.404850 -47.096458 2.032061
+v -18.872890 -44.497753 1.093208
+v -18.964462 -43.518593 -0.251763
+v -16.259462 -42.391491 -0.340816
+v -15.784360 -43.678230 0.565201
+v -16.006569 -43.689102 -0.351807
+v -16.343571 -42.250435 -0.337713
+v -16.873600 -46.150909 -0.385709
+v -16.820885 -45.963379 0.545236
+v -18.569038 -45.174576 0.669686
+v -16.945850 -46.118752 -0.382532
+v -16.574566 -43.871021 1.676147
+v -16.017551 -45.963005 0.398889
+v -3.194802 -43.526276 -0.018712
+v -48.452091 -48.741486 -0.330771
+v -47.517567 -48.730709 0.982044
+v -46.866959 -48.946350 -0.359005
+v -48.065865 -48.792675 -0.350494
+v -46.455044 -49.837284 0.920005
+v -46.663601 -49.156265 -0.376175
+v -48.046017 -49.374760 1.549513
+v -48.512562 -48.783920 -0.330030
+v -48.701412 -49.005302 -0.331851
+v -47.529148 -50.802299 1.379947
+v -48.460667 -51.079056 -0.383540
+v -48.700695 -50.885696 0.672163
+v 13.580340 -34.176220 -0.006500
+v 13.641071 -34.058861 0.418913
+v 13.581631 -35.259220 0.424235
+v 13.558537 -34.992455 0.141493
+v 18.071030 -35.439938 0.560794
+v 19.454317 -34.904388 0.900659
+v 19.407690 -35.079285 0.178723
+v 18.260489 -35.442192 0.264872
+v 18.664841 -37.923687 1.284690
+v 18.375635 -37.964046 0.361321
+v 19.504669 -38.290291 0.304611
+v 17.711092 -36.450787 0.340423
+v 17.620724 -36.999352 0.368570
+v 18.748833 -36.564503 1.833288
+v 20.532759 -35.667637 1.350565
+v 20.597322 -37.387486 1.302716
+v 29.932795 -34.549103 -1.015944
+v 32.599476 -38.357376 0.571684
+v 31.388969 -37.935120 0.967853
+v 31.824699 -39.357826 1.852738
+v 38.236427 -35.816505 0.673408
+v 38.209290 -36.056583 -0.426303
+v 38.308167 -35.952763 -0.435719
+v 30.730968 -41.538452 0.198911
+v 30.005936 -40.912418 1.312001
+v 29.087740 -40.074581 0.157172
+v 29.704302 -40.625004 0.238995
+v 32.438774 -41.170731 0.692250
+v 31.463833 -41.530617 0.157039
+v 32.477165 -41.070686 0.090119
+v 29.860710 -38.317711 -0.260006
+v 29.067047 -39.980919 0.138456
+v 30.030167 -38.867222 1.544553
+v 31.009272 -41.619118 0.184691
+v 31.237022 -41.257980 1.278259
+v 32.474281 -40.213951 1.368560
+v 32.660870 -38.648258 -0.349179
+v 33.072006 -39.659946 -0.157686
+v 32.672359 -40.625008 0.070053
+v 33.056667 -39.744007 -0.138957
+v 33.072941 -39.693943 -0.150517
+v 40.160084 -42.027550 0.111893
+v 40.084030 -41.311554 0.871911
+v 39.525032 -41.480473 0.012617
+v 41.245377 -41.346214 0.505037
+v -13.016768 44.276962 -0.038542
+v 4.023682 21.826681 0.008383
+v -16.150404 19.178896 -0.616559
+v -16.079121 18.175919 -0.498131
+v -16.404995 18.543583 0.271076
+v -12.866178 19.465038 -0.262440
+v -0.669740 18.213842 0.104562
+v -0.470713 18.206329 0.082070
+v 1.724227 20.278450 0.103911
+v 1.726621 20.237085 0.098536
+v 1.713832 20.256279 0.115538
+v 4.228837 19.070076 -0.279918
+v -31.667349 12.563521 -0.218593
+v -30.249460 12.611813 -0.370423
+v -30.654913 12.585475 -0.391565
+v 2.734310 14.446919 -0.484257
+v 3.539941 14.580626 -0.410864
+v 11.738733 14.987214 0.012838
+v -32.631218 11.216563 -0.358864
+v -32.660198 10.688362 -0.342846
+v -32.393902 9.991748 -0.309141
+v -32.555950 11.374999 -0.360918
+v -30.154226 9.298780 -0.223736
+v -30.253315 9.091179 0.414187
+v -31.221762 9.219121 -0.267959
+v -30.875000 9.247074 -0.260258
+v 8.333844 10.010232 -0.054756
+v 8.016871 11.093180 -0.021059
+v 1.508900 1.218783 0.067426
+v -40.487495 -10.206208 0.012150
+v -4.432814 -7.794209 -0.209223
+v -3.403609 -9.490414 0.226715
+v 1.000458 -8.568749 -0.108581
+v -43.438145 -11.702641 0.104487
+v -43.697247 -10.640081 0.092328
+v -43.516369 -11.375000 0.096088
+v -11.910935 -12.020673 -0.252637
+v 7.772232 -14.459226 -0.469528
+v 6.613532 -13.919527 -0.477792
+v -44.411327 -21.671503 0.047345
+v -34.780396 -19.542805 -0.366669
+v -47.677151 -24.864830 -0.012209
+v -42.473713 -23.593731 -0.036268
+v -43.195637 -24.701811 -0.087138
+v -43.182518 -24.843208 0.186990
+v -43.381866 -24.898439 -0.095018
+v -44.376442 -25.197130 -0.092947
+v -45.492306 -24.723452 -0.043979
+v -44.735012 -25.044968 -0.076931
+v -7.436517 -25.134005 0.113891
+v -7.266963 -25.172323 0.121283
+v -39.722244 -30.947529 -0.612057
+v -39.846760 -30.165279 -0.532057
+v -36.704227 -29.710764 -0.475036
+v -7.001129 -27.453526 0.070176
+v -7.470443 -27.343296 -0.004666
+v -8.261710 -27.246807 -0.111582
+v -8.302003 -27.401817 0.749056
+v -8.401482 -26.927111 -0.144815
+v -2.412062 -29.421333 0.376408
+v -2.508958 -30.509924 0.488841
+v -19.143915 -31.677271 0.012337
+v 2.278814 -34.083141 0.159219
+v 5.533544 -33.489056 -0.004893
+v 39.184929 48.076557 -0.200138
+v 33.610889 47.387184 1.040613
+v 34.035034 49.094849 -0.187345
+v 33.648170 47.424450 -0.217015
+v 37.960049 47.710014 -0.399307
+v 38.155083 47.775414 -0.406510
+v 46.824169 48.146248 -0.522680
+v 47.371593 48.082832 -0.535703
+v 47.189705 48.082634 -0.549517
+v 47.773403 47.176880 -0.535762
+v 47.559483 47.645622 -0.550432
+v 47.810574 46.052559 -0.459802
+v 46.382923 45.452091 -0.295228
+v 47.313454 45.566418 -0.382993
+v 30.934217 41.480782 -0.150768
+v 30.875000 41.466270 -0.144698
+v 31.176460 41.313351 -0.183698
+v 16.370142 38.684250 0.135159
+v 17.020794 39.630196 0.241553
+v 16.596291 39.000004 0.130530
+v 16.515354 38.240856 0.140820
+v 17.287628 39.874645 0.284433
+v 38.255322 39.042439 0.269604
+v 38.355095 38.959480 0.291229
+v 16.887205 33.762730 0.158432
+v 33.202297 33.424503 0.351926
+v 12.185062 29.197012 0.046902
+v 14.050189 29.111502 0.017268
+v 13.644570 29.129177 0.010920
+v 18.810608 32.078606 0.171047
+v 18.883280 31.919624 0.444404
+v 18.475687 31.324060 0.147229
+v 41.841717 21.233217 -0.865110
+v 44.883797 21.070179 -0.727584
+v 37.943222 16.393627 -0.565872
+v 42.070019 20.450003 -0.927632
+v 42.895699 19.837872 -0.821669
+v 42.023376 20.618700 -0.941599
+v 43.769009 19.793682 -0.745496
+v 44.410049 19.843071 -0.694451
+v 44.467716 19.892635 -0.692544
+v 14.974559 14.160714 -0.009271
+v 15.018213 14.427757 -0.002518
+v 13.920957 13.850840 -0.006138
+v 14.620990 13.976867 0.007588
+v 14.252192 13.910472 0.000357
+v 18.712196 14.057281 -0.261493
+v 20.903137 14.572797 -0.388510
+v 20.277733 14.986396 -0.331979
+v 21.125000 14.430118 -0.399343
+v 36.934914 15.038935 -0.373458
+v 36.962650 14.656228 -0.307007
+v 36.725010 14.883663 -0.010844
+v 37.544781 16.099516 -0.531044
+v 40.641788 14.958629 -0.218407
+v 40.631058 14.677586 -0.169482
+v 40.625004 14.985195 -0.221515
+v 37.606384 13.560031 -0.097438
+v 37.522324 13.702007 -0.122344
+v 38.544777 12.868705 0.057377
+v 27.184875 4.694152 -0.105369
+v 26.858955 3.490157 -0.090375
+v 18.123962 0.160238 0.085988
+v 34.225529 -1.621818 -0.519047
+v 34.667698 -3.182148 -0.151110
+v 44.460014 -3.391099 -0.182977
+v 43.875008 -3.407189 -0.181719
+v 20.191063 -11.517307 -0.510080
+v 21.286873 -11.049013 -0.502580
+v 21.224876 -11.159925 -0.552441
+v 21.125002 -11.225340 -0.566438
+v 20.206629 -12.184557 -0.559341
+v 20.706915 -12.204695 -0.602222
+v 20.715525 -12.531378 0.466954
+v 21.125002 -11.396137 -0.578717
+v 21.417942 -11.701515 0.436134
+v 20.891321 -11.989442 -0.602019
+v 12.939177 -34.109966 -0.016552
+v 27.063993 -33.839905 -0.725249
+v 27.051798 -33.895313 -0.726103
+v 27.862967 -34.799923 -0.715256
+v 27.331470 -34.125000 -0.770450
+v 29.273478 -32.400288 -0.936938
+v 29.957598 -32.825035 -0.995688
+v 30.091805 -34.387302 -1.064569
+v 30.042013 -34.125004 -1.105391
+v 29.961933 -33.141701 -1.053600
+v 38.414276 -34.420887 -0.426840
+v 46.965801 -33.697479 -0.096335
+v -6.225410 -36.578892 -0.165415
+v -6.154101 -36.888397 -0.175153
+v -6.347136 -35.995800 -0.171432
+v -6.327345 -36.110546 -0.162207
+v -4.825863 -36.040176 -0.080113
+v -4.972845 -36.275360 -0.116478
+v 4.662270 -34.689415 0.145105
+v 4.347963 -34.857304 0.167565
+v -22.904392 -40.071327 -0.071598
+v -22.792749 -40.543175 -0.080193
+v -17.807106 -42.103466 -0.288093
+v -16.686073 -42.150307 -0.325976
+v -13.512487 -41.337723 -0.160074
+v -10.507712 -41.058651 -0.055805
+v -10.700027 -41.390858 -0.083148
+v -13.525084 -41.295921 -0.159023
+v -25.263214 -46.433521 -0.134013
+v -18.741356 -44.340755 -0.260846
+v -16.314568 -44.276928 -0.342540
+v -15.902347 -45.434086 -0.370847
+v -15.993184 -45.157959 -0.355048
+v -18.593296 -44.743305 -0.277945
+v -15.928147 -45.682285 -0.382720
+v -16.833096 -46.149582 -0.386520
+v -28.557859 -46.786381 0.129872
+v -28.571541 -46.977238 0.135954
+v -28.600441 -46.950928 0.210402
+v -25.484310 -47.861172 -0.099779
+v -25.463593 -48.152668 0.369270
+v -26.051828 -48.640888 -0.077511
+v -25.999998 -48.566246 -0.084584
+v -46.696632 -50.504211 -0.491608
+v -47.011730 -51.193859 -0.509548
+v 20.099186 -35.199238 0.124692
+v 19.753048 -35.137199 0.159656
+v 31.812376 -38.150978 -0.406512
+v 29.998812 -38.234730 -0.285493
+v 38.791473 -34.737297 -0.406190
+v 38.344250 -35.854500 -0.444486
+v 40.530079 -40.580593 -0.005179
+v 41.211094 -41.366543 0.121023
+v 40.685993 -41.861847 0.132812
+v -45.338005 49.286854 -0.049436
+v -12.543975 43.691917 0.637985
+v -12.557268 43.798141 0.090248
+v 1.143944 45.228344 0.427795
+v 1.203551 44.644482 0.475507
+v 5.369804 40.956085 -0.139996
+v 5.360238 40.963581 -0.138055
+v 6.074288 41.914703 0.114876
+v -12.632571 37.573952 0.492413
+v -12.449850 36.564373 0.482800
+v -12.498304 36.832096 0.485349
+v -12.367048 36.730316 0.751040
+v -12.367330 36.541954 0.668014
+v -11.343286 39.241623 0.518160
+v -10.007461 36.363708 0.473186
+v -12.079214 36.342861 0.482740
+v -12.367261 36.515015 0.482787
+v -11.163072 35.997784 0.484748
+v 11.284101 29.152710 0.816255
+v 12.427355 28.394527 1.766442
+v 11.238946 29.181847 0.072193
+v 12.043346 26.269806 0.147904
+v -20.091175 22.122053 -0.150402
+v 0.361805 21.361115 0.127826
+v 1.379067 20.429022 0.158545
+v 1.037895 20.733601 0.233432
+v 3.470852 21.814714 0.059659
+v 2.577262 21.494028 0.136848
+v 2.806662 21.016094 1.461310
+v 2.329330 21.125004 0.152974
+v -15.753514 18.897247 1.523173
+v -14.312183 16.939884 -0.155085
+v -2.408523 20.071741 0.134419
+v -1.765247 18.864838 0.304297
+v 1.468174 20.097986 0.107665
+v 0.675946 19.823475 1.621930
+v 1.493986 20.247559 0.123498
+v 4.596481 19.766037 -0.227489
+v -42.258663 13.512590 0.205824
+v -29.911324 12.463062 -0.336868
+v -6.509511 14.003248 0.927661
+v -6.462943 12.800079 0.976568
+v -3.708615 14.578543 0.657858
+v -4.250514 14.873464 0.765750
+v -3.672309 13.452271 0.720749
+v -3.735248 13.284938 0.746055
+v -5.267449 12.215103 0.947168
+v -5.451294 12.233995 0.949772
+v 3.696082 14.757130 -0.398987
+v 11.814435 14.675370 0.015209
+v -31.911926 9.425551 -0.287130
+v -32.331280 9.918720 -0.304174
+v -30.777225 10.445789 1.978740
+v -28.862879 10.995473 -0.187240
+v -29.590944 12.017027 -0.276619
+v -28.874352 10.874836 -0.180659
+v -28.855438 10.902409 -0.181499
+v -29.436317 10.588020 1.098562
+v -28.982122 10.714340 -0.183879
+v -6.152813 12.634911 0.995066
+v -16.409685 6.611679 0.487100
+v 2.603675 1.909917 0.041066
+v 1.725348 0.966259 0.097122
+v -3.067156 -6.046673 -0.167122
+v -2.275036 -6.102049 0.450775
+v -1.793735 -6.600407 0.190407
+v -1.925009 -6.500000 0.144575
+v -2.567445 -6.002648 -0.060061
+v -1.762152 -6.705728 0.214617
+v -1.371201 -6.838398 0.165701
+v -43.323433 -9.673471 0.073003
+v -40.810692 -9.661939 0.013813
+v -3.633256 -9.512385 0.249671
+v -2.870720 -8.972875 0.200433
+v -5.654514 -12.721002 0.299965
+v -4.556156 -13.128812 0.300655
+v -5.194858 -12.867671 0.335441
+v 6.439098 -14.156654 -0.521611
+v -34.469727 -19.890305 -0.417919
+v -13.164388 -21.082628 0.717230
+v -8.692956 -22.466024 0.655060
+v -48.346096 -25.490231 0.889592
+v -48.488537 -25.501184 -0.034983
+v -45.881683 -24.403324 -0.017869
+v -8.287076 -25.232704 0.004086
+v -8.590857 -25.613623 -0.121539
+v -37.262253 -28.783501 -0.381551
+v -36.655758 -29.583809 -0.461828
+v -36.650024 -29.601254 -0.463602
+v -7.870111 -27.292427 -0.070213
+v -19.095545 -31.691086 0.019925
+v -1.950826 -31.249840 0.474784
+v 3.850390 -31.440626 -0.236497
+v 2.746077 -31.665813 -0.081392
+v 26.713139 48.873615 0.129468
+v 26.663904 49.288715 0.115499
+v 34.068810 49.161190 -0.188198
+v 34.436478 48.732445 1.404270
+v 45.284725 47.794567 -0.366041
+v 19.999683 46.858234 0.189885
+v 19.911320 46.833469 0.191971
+v 23.623144 48.152020 0.100459
+v 25.312992 46.503929 0.090128
+v 44.520042 47.841152 -0.303811
+v 43.483414 47.496689 -0.190756
+v 43.241913 44.719467 0.025430
+v 47.693718 45.660877 -0.422219
+v 31.174318 40.695396 -0.205530
+v 30.875000 40.587368 -0.176087
+v 18.530443 37.547722 0.146423
+v 17.868830 37.437122 0.149102
+v 16.959660 37.579330 0.148852
+v 32.354935 36.852634 0.053379
+v 34.711803 35.650879 0.321277
+v 38.650440 38.773243 0.342792
+v 39.401485 38.312565 0.526941
+v 39.749878 38.349842 0.565189
+v 40.992149 38.538349 0.598917
+v 18.473774 33.133930 0.185886
+v 17.913847 33.576000 0.182494
+v 17.422607 33.734055 0.177050
+v 17.119400 33.747200 0.172303
+v 17.790186 33.616104 0.180515
+v 31.001869 35.132717 0.204654
+v 32.183201 33.661968 0.332051
+v 34.266129 34.299805 0.334259
+v 34.660641 35.252930 0.332560
+v 33.851185 33.860134 0.313353
+v 16.948961 30.677925 0.100608
+v 16.981815 30.606491 1.056273
+v 15.834099 31.309002 0.096230
+v 17.308498 30.725988 0.107664
+v 17.939318 30.810005 0.123932
+v 14.985595 28.097620 0.010073
+v 14.769190 27.240046 0.044245
+v 19.815985 14.984978 1.015923
+v 19.986647 15.060702 -0.309940
+v 40.625004 14.667965 -0.167323
+v 38.637653 12.865512 0.063705
+v 32.271248 10.794315 -0.062620
+v 17.663107 1.381200 0.018047
+v 16.922560 1.038667 0.012294
+v 27.700655 3.780398 -0.149229
+v 18.389284 0.696509 0.005536
+v 48.117031 -30.634987 -0.062763
+v 47.556198 -30.472982 -0.204867
+v 49.052246 -32.249538 -0.104561
+v -18.760771 -36.711227 -0.344997
+v -6.288369 -35.755672 -0.194469
+v -5.603951 -36.949966 -0.202360
+v -22.236431 -41.400955 -0.111376
+v -22.374329 -39.999950 -0.094382
+v -11.387417 -41.718971 -0.103868
+v -12.052925 -41.973213 -0.118244
+v -12.263629 -41.957947 -0.114213
+v -38.263557 -43.055130 -0.139236
+v -38.597786 -42.901711 -0.206873
+v -40.605049 -43.305771 -0.096307
+v -41.195107 -44.371944 -0.091030
+v -41.140663 -44.745636 -0.105082
+v -40.463200 -45.957787 -0.181150
+v -37.612713 -43.917164 -0.009504
+v -28.103594 -45.744953 0.058347
+v -18.689255 -44.483944 -0.262875
+v -2.997148 -43.521599 0.027436
+v -26.104700 -48.646763 -0.072028
+v -26.072191 -48.644184 -0.075374
+v -47.525517 -51.292217 -0.460738
+v -47.303146 -51.317360 -0.480445
+v -47.064705 -51.217648 -0.508276
+v 13.459702 -35.386745 0.213252
+v 18.038418 -35.525192 0.282072
+v 20.689116 -35.571686 0.079290
+v 17.674852 -37.178555 0.372570
+v 21.359343 -36.813839 0.071272
+v 20.182089 -38.135555 0.256187
+v 20.431787 -37.852154 0.229039
+v 21.359489 -36.803589 0.070711
+v 32.250225 -38.295490 -0.400738
+v -12.366836 36.755501 0.485349
+v 42.139812 33.591511 0.469569
+v 14.252414 13.972651 0.000409
+v 14.707758 14.243871 0.009481
+v 14.738463 14.262160 0.010093
+v 14.752579 14.270516 0.009456
+v 14.624116 13.977437 0.007400
+v 14.645535 13.981342 0.006118
+v 14.661258 13.997806 0.005667
+v 14.700274 14.169413 0.009278
+v 42.606083 34.061588 0.422771
+v 42.554100 34.097633 0.426286
+v 42.502697 34.157497 0.429297
+v -11.375002 -40.625008 -0.005980
+v -5.687500 -36.156250 -0.182069
+v -11.375000 -21.125004 0.721835
+v -45.500004 -22.750004 0.073018
+v -4.875000 -11.375002 0.272932
+v -30.875000 11.374998 -0.291476
+v -4.875001 13.000000 1.030346
+vn -0.4551 -0.7900 -0.4109
+vn 0.4950 -0.7430 -0.4505
+vn -0.7365 0.6470 -0.1977
+vn 0.2964 -0.5583 -0.7749
+vn -0.0174 -0.9915 -0.1286
+vn -0.1752 0.1249 -0.9766
+vn -0.9711 0.1523 -0.1836
+vn -0.8397 -0.4103 -0.3558
+vn -0.0852 -0.6607 -0.7458
+vn 0.1114 -0.6224 -0.7747
+vn -0.5498 0.7887 -0.2750
+vn -0.1456 0.8735 -0.4645
+vn 0.5637 -0.7523 -0.3410
+vn -0.8674 -0.4604 -0.1891
+vn -0.7836 -0.0588 -0.6184
+vn 0.6699 -0.6569 -0.3459
+vn -0.9332 0.1344 -0.3331
+vn 0.2850 0.6221 -0.7292
+vn -0.2917 0.8228 -0.4878
+vn 0.8522 0.3980 -0.3397
+vn -0.4793 0.6239 -0.6172
+vn 0.4624 0.7874 -0.4075
+vn 0.3486 0.8414 -0.4130
+vn 0.4161 0.8541 -0.3120
+vn 0.0302 -0.7753 -0.6309
+vn 0.8629 -0.3149 -0.3952
+vn -0.3849 0.1148 -0.9158
+vn 0.6483 -0.7303 -0.2155
+vn 0.9104 -0.1694 -0.3774
+vn -0.3841 -0.5791 -0.7191
+vn 0.3169 0.9004 -0.2980
+vn 0.8612 0.4674 -0.1995
+vn -0.7789 0.4792 -0.4046
+vn 0.4040 -0.5649 -0.7195
+vn 0.9378 -0.3297 -0.1089
+vn -0.8594 0.1566 -0.4867
+vn 0.4771 -0.7703 -0.4230
+vn -0.9908 0.0508 -0.1255
+vn 0.7202 0.4658 -0.5142
+vn -0.6001 -0.5126 -0.6141
+vn -0.2579 0.9249 -0.2793
+vn -0.8416 0.0387 -0.5387
+vn -0.4158 0.9022 -0.1146
+vn -0.9067 0.0701 -0.4159
+vn 0.6915 0.5723 -0.4407
+vn -0.4403 0.8868 -0.1401
+vn 0.5245 0.8044 -0.2789
+vn -0.6937 0.6558 -0.2978
+vn 0.8289 0.5063 -0.2380
+vn -0.8906 -0.4151 -0.1859
+vn -0.0757 -0.8083 -0.5839
+vn 0.6707 0.1545 -0.7254
+vn 0.7543 -0.0917 -0.6501
+vn -0.1304 -0.5299 -0.8380
+vn 0.8219 -0.4620 -0.3331
+vn -0.4522 -0.8806 -0.1414
+vn -0.9075 0.4134 -0.0745
+vn -0.0881 0.9876 -0.1296
+vn 0.4326 0.8344 -0.3416
+vn 0.9624 -0.1579 -0.2211
+vn 0.8415 -0.3132 -0.4402
+vn -0.6466 -0.6909 -0.3235
+vn -0.0080 -0.8764 -0.4816
+vn 0.8314 -0.5163 -0.2055
+vn -0.5700 0.6381 -0.5175
+vn -0.8234 -0.3837 -0.4182
+vn -0.9102 0.2795 -0.3058
+vn -0.5000 -0.6861 -0.5284
+vn -0.0935 -0.8886 -0.4491
+vn 0.8218 0.4575 -0.3397
+vn 0.0261 -0.9786 -0.2042
+vn -0.3811 0.8686 -0.3167
+vn 0.3443 0.8928 -0.2905
+vn 0.7745 0.3836 -0.5029
+vn 0.3421 0.8931 -0.2921
+vn 0.2741 0.9391 -0.2072
+vn -0.5324 0.7706 -0.3502
+vn -0.8604 -0.0293 -0.5087
+vn 0.9804 0.1501 -0.1273
+vn 0.4838 0.7512 -0.4491
+vn -0.0898 -0.9041 -0.4178
+vn -0.9589 0.1008 -0.2653
+vn -0.7916 0.5696 -0.2214
+vn 0.0375 -0.8279 -0.5597
+vn -0.5960 -0.5362 -0.5977
+vn -0.4437 -0.2478 -0.8612
+vn 0.9245 0.3311 -0.1888
+vn 0.4071 -0.7563 -0.5121
+vn 0.9216 -0.2632 -0.2855
+vn -0.7917 -0.0590 -0.6081
+vn -0.8907 -0.0203 -0.4542
+vn 0.5749 0.8060 -0.1408
+vn -0.1050 -0.9865 -0.1256
+vn 0.2278 -0.9539 -0.1954
+vn -0.3905 0.8714 -0.2970
+vn -0.7364 -0.3976 -0.5475
+vn -0.5347 -0.5690 -0.6247
+vn 0.1528 0.7056 -0.6920
+vn 0.4436 0.7871 -0.4287
+vn 0.0336 0.9881 -0.1500
+vn -0.1355 0.9172 -0.3747
+vn -0.0574 -0.9817 -0.1818
+vn -0.3922 0.8025 -0.4496
+vn -0.8023 -0.0820 -0.5913
+vn 0.8256 -0.0560 -0.5614
+vn -0.7376 -0.6533 -0.1707
+vn -0.8444 -0.2939 -0.4479
+vn -0.0217 -0.8684 -0.4954
+vn -0.7505 -0.4500 -0.4840
+vn -0.5852 0.7570 -0.2906
+vn -0.3948 0.6687 0.6300
+vn -0.8784 0.4595 0.1317
+vn -0.2363 0.9710 -0.0362
+vn -0.5217 -0.0541 0.8514
+vn -0.0211 -0.8686 0.4950
+vn -0.6991 -0.6740 -0.2386
+vn -0.5686 0.4228 0.7056
+vn -0.6713 0.7393 0.0522
+vn 0.1153 0.7327 0.6707
+vn -0.1703 -0.1190 0.9782
+vn 0.4293 0.7790 0.4570
+vn 0.8378 0.0861 0.5392
+vn 0.2203 0.8013 0.5563
+vn -0.8748 -0.0825 0.4775
+vn 0.8227 -0.5633 -0.0769
+vn -0.7725 -0.3676 0.5177
+vn -0.4596 -0.7656 0.4502
+vn -0.0540 -0.8504 0.5234
+vn -0.7270 0.6717 0.1425
+vn 0.7027 -0.2286 0.6737
+vn 0.7724 0.6275 -0.0984
+vn -0.6983 -0.6918 -0.1839
+vn 0.5875 -0.4947 0.6404
+vn 0.1710 0.9808 -0.0939
+vn -0.7013 0.7084 0.0796
+vn -0.1765 0.9624 0.2067
+vn 0.8742 0.3711 0.3133
+vn 0.5646 0.4687 0.6794
+vn -0.5652 -0.8234 -0.0503
+vn 0.6658 0.7432 -0.0663
+vn 0.8213 0.4599 0.3375
+vn 0.9531 0.1056 0.2837
+vn -0.0737 0.7778 0.6242
+vn 0.7122 -0.1822 0.6779
+vn 0.3468 -0.0741 0.9350
+vn 0.5011 -0.8654 -0.0089
+vn -0.3165 -0.7420 0.5909
+vn -0.3290 -0.9306 0.1603
+vn -0.5414 0.8389 -0.0562
+vn -0.6101 -0.7111 0.3494
+vn -0.5922 -0.2420 0.7686
+vn 0.5931 -0.0366 0.8043
+vn -0.3979 0.8497 0.3459
+vn 0.2136 0.8561 0.4706
+vn 0.5168 -0.6351 0.5741
+vn -0.3170 0.1088 0.9422
+vn 0.5155 0.8058 0.2915
+vn -0.9153 0.3172 -0.2482
+vn -0.3628 -0.5064 0.7823
+vn -0.5037 0.8003 0.3254
+vn -0.8335 0.5409 0.1128
+vn -0.7637 -0.0170 0.6453
+vn 0.0813 0.7307 0.6779
+vn -0.8611 -0.4962 -0.1111
+vn -0.8551 0.4143 0.3117
+vn -0.8581 -0.3568 0.3692
+vn -0.1827 0.9817 -0.0527
+vn -0.2655 -0.9401 -0.2139
+vn 0.5039 0.8177 0.2784
+vn -0.5237 0.6567 0.5426
+vn 0.8274 -0.1448 0.5426
+vn -0.5142 -0.4802 0.7106
+vn 0.5199 -0.7865 0.3334
+vn -0.0763 -0.9747 0.2103
+vn 0.5227 0.1040 0.8462
+vn -0.2852 -0.2693 0.9199
+vn 0.0477 -0.2804 0.9587
+vn -0.2854 0.8274 0.4838
+vn 0.5009 -0.4717 0.7257
+vn -0.9192 -0.3683 -0.1391
+vn -0.0861 0.9919 0.0933
+vn 0.0364 0.6734 0.7384
+vn 0.1440 -0.6865 0.7127
+vn -0.4915 0.8685 -0.0646
+vn -0.7080 -0.7062 0.0086
+vn 0.5449 -0.8286 0.1285
+vn 0.1699 0.9630 -0.2093
+vn 0.1765 0.9731 0.1480
+vn -0.0056 0.4618 0.8870
+vn -0.7989 0.5872 -0.1304
+vn -0.5194 -0.8117 0.2670
+vn -0.3794 0.1582 0.9116
+vn 0.1152 -0.6576 0.7445
+vn -0.0041 0.8808 0.4735
+vn 0.4394 0.5557 0.7058
+vn -0.4491 0.2352 0.8619
+vn 0.2199 0.3044 0.9268
+vn 0.5055 -0.8315 0.2305
+vn 0.5632 0.6038 0.5641
+vn 0.1338 0.6942 0.7072
+vn -0.4456 -0.6849 0.5765
+vn -0.4073 -0.7558 0.5127
+vn -0.1973 0.0965 0.9756
+vn 0.7141 -0.2615 0.6494
+vn -0.4097 -0.8461 0.3410
+vn -0.4516 -0.2620 0.8529
+vn 0.8953 -0.4389 0.0757
+vn -0.2459 -0.9089 0.3369
+vn 0.6552 -0.3711 0.6580
+vn -0.0711 -0.2300 0.9706
+vn 0.6765 0.7291 -0.1037
+vn -0.7464 -0.4326 0.5057
+vn -0.1675 -0.9858 0.0113
+vn 0.6730 -0.7248 0.1476
+vn -0.4065 -0.0308 0.9131
+vn 0.6662 -0.1362 0.7332
+vn -0.9622 -0.2546 0.0966
+vn 0.5423 -0.7920 0.2805
+vn 0.9258 -0.0204 0.3776
+vn 0.7214 0.6913 0.0400
+vn 0.1105 0.7458 0.6569
+vn 0.1706 -0.6872 0.7061
+vn 0.1766 -0.6860 0.7058
+vn 0.1806 -0.6825 0.7082
+vn -0.5893 0.7976 0.1289
+vn 0.0417 0.6911 0.7215
+vn 0.0152 0.7198 0.6940
+vn -0.1597 0.6211 0.7673
+vn -0.2231 0.9518 0.2106
+vn -0.5731 0.7751 0.2659
+vn -0.9978 -0.0594 0.0296
+vn 0.2156 0.2977 0.9300
+vn -0.0054 -0.4954 0.8686
+vn -0.4136 0.6309 0.6564
+vn -0.1763 -0.0598 0.9825
+vn 0.8158 0.5632 -0.1311
+vn -0.0225 0.8375 0.5460
+vn 0.6108 0.3886 0.6899
+vn 0.6145 0.0237 0.7886
+vn 0.0382 -0.8692 0.4929
+vn -0.6408 0.7510 0.1590
+vn 0.8264 0.5625 0.0267
+vn -0.6087 -0.7749 0.1701
+vn 0.0097 -0.0875 0.9961
+vn 0.4632 -0.7656 0.4464
+vn 0.8836 0.3080 0.3527
+vn 0.2325 -0.5798 0.7809
+vn -0.1558 -0.0775 0.9847
+vn 0.1968 -0.3896 0.8997
+vn 0.8769 0.4451 0.1814
+vn -0.6568 0.6531 0.3769
+vn 0.6203 -0.7843 0.0026
+vn -0.2559 -0.8559 0.4493
+vn -0.4040 -0.8770 -0.2602
+vn 0.0076 0.3377 0.9412
+vn 0.9682 0.2114 0.1340
+vn 0.6237 -0.1501 0.7671
+vn -0.4689 0.1096 0.8764
+vn 0.1352 0.8707 0.4728
+vn 0.4224 -0.1060 0.9002
+vn -0.7887 -0.5667 -0.2385
+vn 0.7595 -0.6492 0.0418
+vn -0.0987 0.8556 0.5082
+vn -0.7337 0.1157 0.6696
+vn 0.0700 0.6329 0.7710
+vn 0.2794 -0.0181 0.9600
+vn -0.1361 -0.9889 -0.0590
+vn -0.1979 -0.6440 0.7390
+vn 0.1711 -0.9163 0.3622
+vn -0.8066 0.5051 0.3071
+vn 0.0501 0.6485 0.7596
+vn -0.8195 0.3765 0.4321
+vn 0.8782 0.4654 0.1102
+vn 0.2709 -0.8959 0.3520
+vn -0.9089 0.3612 -0.2083
+vn 0.1104 0.9841 0.1395
+vn 0.7607 0.6104 0.2207
+vn -0.9701 -0.1344 0.2022
+vn -0.2897 -0.5619 0.7748
+vn 0.3394 -0.0791 0.9373
+vn 0.8150 0.5748 0.0741
+vn 0.7665 0.5454 0.3391
+vn -0.8340 0.5232 -0.1755
+vn -0.8196 0.5626 0.1080
+vn -0.8325 0.1674 0.5282
+vn 0.1068 0.9859 0.1290
+vn -0.0082 0.9754 0.2203
+vn 0.0215 0.4414 0.8970
+vn -0.1073 0.9784 0.1769
+vn 0.1568 0.9760 0.1512
+vn -0.5516 0.6049 0.5743
+vn 0.8367 0.1970 0.5111
+vn 0.8681 0.0571 0.4931
+vn -0.4548 0.1882 0.8705
+vn 0.5241 -0.4615 0.7158
+vn -0.1970 0.9704 0.1396
+vn -0.8768 0.4053 -0.2586
+vn -0.6280 -0.7782 0.0056
+vn 0.0403 -0.4904 0.8706
+vn 0.9929 0.0939 0.0728
+vn 0.2424 0.9056 0.3480
+vn 0.2761 -0.9464 0.1676
+vn 0.8780 -0.4557 0.1467
+vn -0.5458 -0.8377 0.0200
+vn 0.5171 -0.8438 -0.1434
+vn -0.1461 0.9889 0.0250
+vn 0.6530 0.7544 0.0674
+vn -0.6949 0.4558 0.5561
+vn -0.2231 -0.4341 0.8728
+vn -0.1588 -0.8890 0.4294
+vn 0.4756 -0.7850 0.3969
+vn 0.6517 -0.3635 0.6657
+vn -0.5693 -0.5855 0.5771
+vn -0.4066 0.4499 0.7952
+vn 0.6278 0.7346 0.2574
+vn 0.3830 -0.9157 0.1214
+vn 0.4560 -0.8768 0.1529
+vn 0.1323 0.2580 0.9570
+vn -0.0782 0.4424 0.8934
+vn 0.0313 -0.3856 0.9222
+vn 0.3717 -0.3972 0.8391
+vn 0.5685 -0.4642 0.6792
+vn 0.3430 0.5445 0.7654
+vn -0.9942 -0.0403 0.0992
+vn -0.2010 -0.0859 0.9758
+vn -0.8708 0.4915 0.0043
+vn 0.1203 0.9844 0.1284
+vn -0.9090 0.3652 0.2010
+vn -0.2641 0.5129 0.8168
+vn 0.4702 0.8278 0.3062
+vn -0.5407 0.2365 0.8073
+vn 0.8646 0.0475 0.5002
+vn 0.3207 -0.2780 0.9055
+vn -0.6600 0.6566 0.3651
+vn 0.4094 0.8200 0.4001
+vn -0.9506 0.2136 0.2252
+vn -0.7998 -0.2404 0.5500
+vn -0.2751 -0.0479 0.9602
+vn 0.2281 -0.5569 0.7986
+vn 0.4439 -0.8950 -0.0428
+vn 0.8323 0.2249 0.5067
+vn -0.9164 0.3831 -0.1160
+vn -0.9436 0.3275 0.0492
+vn -0.3659 0.4486 0.8154
+vn 0.5540 0.5508 0.6242
+vn -0.8193 0.5196 0.2424
+vn 0.6072 -0.7879 -0.1030
+vn -0.0037 0.3631 0.9317
+vn 0.0363 -0.6564 0.7535
+vn 0.0779 -0.7942 0.6026
+vn -0.1566 -0.9787 -0.1331
+vn 0.7016 -0.6927 0.1671
+vn -0.7533 -0.1677 0.6360
+vn -0.0924 0.1748 0.9803
+vn 0.7657 -0.6287 0.1355
+vn 0.1428 -0.9863 0.0824
+vn 0.8107 0.2810 0.5136
+vn -0.6673 0.5653 0.4849
+vn 0.5272 0.7307 0.4338
+vn -0.3240 0.4300 0.8427
+vn -0.2808 -0.1240 0.9517
+vn -0.5320 0.8202 0.2101
+vn 0.3782 0.8333 0.4033
+vn -0.1819 -0.9516 0.2476
+vn -0.9585 -0.2520 0.1332
+vn -0.0418 -0.3154 0.9480
+vn 0.8116 -0.5745 0.1060
+vn 0.7898 -0.4523 0.4142
+vn 0.9901 0.0296 0.1369
+vn 0.0787 -0.9546 0.2874
+vn 0.7341 -0.1619 0.6595
+vn 0.3229 0.3505 0.8791
+vn -0.4003 0.1502 0.9040
+vn 0.2435 -0.7017 0.6696
+vn -0.8307 0.4055 0.3816
+vn -0.0375 0.0453 0.9983
+vn 0.9171 0.1832 0.3542
+vn -0.4444 0.8208 0.3589
+vn 0.3793 0.8383 0.3916
+vn 0.5279 -0.8378 0.1395
+vn -0.3316 0.7863 0.5213
+vn 0.2223 0.8159 0.5337
+vn 0.8098 0.4966 0.3124
+vn -0.7570 -0.1279 0.6407
+vn 0.0854 -0.1585 0.9837
+vn -0.7498 -0.5886 0.3023
+vn -0.6055 -0.7579 0.2427
+vn 0.6294 -0.7653 0.1348
+vn 0.4489 -0.5197 0.7269
+vn 0.2050 -0.9747 -0.0892
+vn -0.5511 0.8325 0.0566
+vn 0.7021 0.2669 0.6602
+vn 0.7151 -0.0973 0.6922
+vn -0.3907 0.8105 0.4363
+vn 0.4382 0.0202 0.8986
+vn -0.7408 -0.5884 0.3241
+vn -0.3329 0.9281 0.1669
+vn -0.8110 -0.4870 0.3242
+vn -0.4449 -0.6654 0.5994
+vn -0.9227 -0.0922 0.3745
+vn -0.0014 0.9996 0.0265
+vn -0.5760 0.7627 0.2940
+vn 0.1255 -0.9904 -0.0574
+vn 0.7425 0.5323 0.4066
+vn 0.1384 -0.0758 0.9875
+vn -0.5039 0.8486 -0.1610
+vn -0.8121 0.5812 0.0518
+vn -0.8178 -0.5636 0.1169
+vn -0.3966 -0.9103 0.1185
+vn 0.8668 -0.3869 0.3146
+vn -0.7118 0.3816 0.5897
+vn 0.3949 0.3565 0.8467
+vn -0.0770 -0.1933 0.9781
+vn 0.3497 0.1703 0.9213
+vn 0.9891 -0.0737 0.1279
+vn 0.9458 -0.2771 0.1693
+vn -0.3200 0.8874 0.3318
+vn -0.9736 0.2195 0.0632
+vn -0.8976 -0.3351 0.2865
+vn -0.2920 0.7379 0.6085
+vn -0.4395 -0.1023 0.8924
+vn -0.2441 0.2123 0.9462
+vn 0.5438 0.8365 -0.0673
+vn 0.8395 -0.2227 0.4957
+vn 0.4014 0.8293 0.3888
+vn 0.6495 -0.0914 0.7548
+vn -0.6424 0.7644 0.0539
+vn -0.2449 0.5119 0.8234
+vn -0.9726 0.2267 -0.0513
+vn -0.2771 0.7690 0.5761
+vn -0.5750 -0.6322 0.5193
+vn 0.3802 -0.8356 0.3966
+vn 0.5257 -0.6742 0.5188
+vn -0.3183 -0.1825 0.9302
+vn 0.8198 0.5212 0.2373
+vn 0.8450 -0.4551 0.2808
+vn 0.5565 0.4982 0.6649
+vn -0.8536 0.3758 0.3608
+vn 0.9826 -0.1617 -0.0909
+vn 0.6746 0.5449 0.4980
+vn 0.2998 0.8758 0.3783
+vn 0.2779 0.9532 0.1189
+vn 0.7141 -0.6498 -0.2606
+vn -0.1281 -0.2408 0.9621
+vn -0.0655 -0.9097 0.4101
+vn -0.5236 -0.8394 0.1458
+vn 0.9119 -0.2654 0.3130
+vn -0.3506 0.1081 0.9303
+vn -0.7397 0.6689 -0.0736
+vn -0.2625 0.7686 0.5834
+vn -0.1326 0.7959 0.5907
+vn -0.8208 0.5712 0.0025
+vn -0.4393 -0.8790 0.1852
+vn -0.5257 0.6890 0.4990
+vn 0.5887 -0.4314 0.6836
+vn -0.2706 0.2982 0.9153
+vn 0.9791 0.2009 -0.0308
+vn 0.5276 0.4512 0.7198
+vn -0.4075 0.8891 0.2085
+vn 0.1141 0.4930 0.8625
+vn -0.7124 -0.0592 0.6993
+vn 0.4321 -0.1452 0.8901
+vn 0.1871 -0.5188 0.8342
+vn 0.8984 -0.4283 0.0975
+vn 0.9295 0.0975 0.3556
+vn 0.6063 0.7934 -0.0544
+vn 0.2073 0.8674 0.4524
+vn 0.2137 0.3974 0.8924
+vn -0.9706 0.1582 0.1813
+vn 0.9540 0.1879 -0.2334
+vn 0.8318 0.4903 0.2601
+vn -0.3907 -0.8979 0.2030
+vn -0.6658 0.2206 0.7128
+vn 0.1571 -0.4838 0.8610
+vn -0.2078 -0.5842 0.7846
+vn -0.1816 -0.2246 0.9574
+vn 0.7733 0.2316 0.5902
+vn -0.5455 -0.8377 -0.0256
+vn -0.1805 -0.3096 0.9336
+vn 0.1259 0.9872 -0.0977
+vn 0.7075 0.6661 0.2361
+vn -0.7096 0.6023 0.3655
+vn 0.4328 0.3694 0.8223
+vn 0.3742 0.0254 0.9270
+vn 0.7888 0.0170 0.6144
+vn -0.8209 -0.5651 -0.0831
+vn 0.6863 -0.5230 0.5055
+vn 0.9906 -0.0496 -0.1277
+vn -0.3092 0.9287 -0.2050
+vn -0.2695 -0.9547 0.1261
+vn -0.8045 0.1618 0.5715
+vn -0.0131 0.4940 0.8694
+vn 0.0962 -0.3777 0.9209
+vn -0.7599 -0.6418 0.1033
+vn -0.4427 -0.8910 0.1003
+vn 0.5525 -0.8331 -0.0257
+vn 0.1201 -0.8738 0.4713
+vn 0.4282 0.5682 0.7027
+vn 0.7239 -0.6776 0.1301
+vn -0.2705 0.1585 0.9496
+vn -0.6649 -0.7468 -0.0131
+vn 0.4032 -0.9065 -0.1249
+vn -0.8584 0.4627 0.2215
+vn -0.2443 -0.9045 0.3496
+vn 0.1998 -0.9420 0.2695
+vn 0.7509 0.2171 0.6237
+vn -0.8015 -0.0582 0.5951
+vn -0.1970 -0.1085 0.9744
+vn 0.9286 0.3671 -0.0541
+vn 0.9158 -0.4015 -0.0083
+vn 0.9116 0.1087 0.3965
+vn 0.9289 -0.2361 0.2853
+vn -0.6048 -0.6090 0.5132
+vn 0.2416 0.6705 0.7015
+vn 0.0394 0.8150 -0.5781
+vn -0.5486 0.4917 -0.6763
+vn 0.8350 -0.0573 -0.5473
+vn 0.2699 0.5829 -0.7664
+vn 0.3109 -0.9406 -0.1363
+vn 0.6113 0.7681 -0.1906
+vn -0.2480 0.8377 -0.4867
+vn -0.9328 -0.1069 -0.3441
+vn 0.8321 0.3358 -0.4415
+vn -0.0650 -0.9653 -0.2530
+vn 0.0618 -0.9572 -0.2829
+vn -0.7785 0.0364 -0.6266
+vn 0.2548 -0.8022 -0.5399
+vn -0.0538 0.9803 -0.1902
+vn 0.1769 -0.6702 -0.7208
+vn -0.9277 0.3486 -0.1338
+vn -0.8736 0.0332 -0.4855
+vn -0.8553 -0.3456 -0.3860
+vn -0.8781 0.4140 -0.2400
+vn 0.0833 -0.9513 -0.2967
+vn 0.7782 -0.3066 -0.5481
+vn -0.8864 0.3865 -0.2548
+vn 0.9120 0.3620 -0.1927
+vn -0.9203 -0.3913 -0.0012
+vn 0.8072 -0.2036 -0.5541
+vn 0.9675 0.1588 -0.1968
+vn -0.4261 -0.7373 -0.5243
+vn -0.8432 -0.0474 -0.5356
+vn -0.0794 0.9880 -0.1323
+vn -0.3967 -0.7951 -0.4587
+vn 0.1349 -0.7987 -0.5864
+vn 0.8732 -0.1407 -0.4665
+vn -0.9165 -0.2272 -0.3293
+vn -0.6248 0.2907 -0.7246
+vn 0.7665 -0.1227 -0.6304
+vn 0.6232 -0.7582 -0.1917
+vn 0.1099 -0.2329 -0.9663
+vn 0.1704 0.6003 -0.7814
+vn 0.1677 0.9624 -0.2137
+vn -0.4726 0.4839 -0.7365
+vn 0.9220 0.1375 -0.3619
+vn 0.7123 -0.6729 -0.1997
+vn -0.1319 0.7207 -0.6806
+vn 0.7929 -0.1379 -0.5936
+vn 0.8709 0.1217 -0.4761
+vn 0.6846 -0.6339 -0.3598
+vn -0.3917 -0.9062 -0.1594
+vn 0.8050 -0.5106 -0.3019
+vn 0.4610 0.7836 -0.4165
+vn 0.2240 0.9465 -0.2321
+vn -0.2595 0.9073 -0.3310
+vn -0.9749 -0.1373 -0.1754
+vn 0.8028 -0.4569 -0.3830
+vn -0.2116 -0.9718 -0.1043
+vn -0.9056 -0.4080 -0.1159
+vn 0.5391 -0.8325 -0.1280
+vn 0.8490 0.0658 -0.5242
+vn -0.9958 0.0902 0.0151
+vn -0.0837 -0.8008 -0.5931
+vn -0.9052 0.2324 -0.3558
+vn 0.4117 -0.8500 -0.3285
+vn -0.7739 -0.6302 -0.0623
+vn 0.8713 -0.1833 -0.4553
+vn 0.6103 0.6777 -0.4102
+vn 0.8054 -0.4330 -0.4047
+vn 0.5735 -0.7617 -0.3014
+vn -0.9739 0.2259 -0.0222
+vn -0.4124 -0.8643 -0.2880
+vn 0.3077 -0.9363 -0.1692
+vn 0.0570 0.6479 -0.7596
+vn 0.8561 0.3797 -0.3507
+vn 0.9300 0.0059 -0.3674
+vn 0.1164 -0.9915 -0.0577
+vn -0.2504 0.7847 -0.5671
+vn 0.1670 0.4173 -0.8933
+vn -0.2570 0.9488 -0.1836
+vn 0.7978 0.4857 -0.3571
+vn -0.8011 0.5712 -0.1788
+vn -0.9191 -0.3042 -0.2503
+vn -0.6111 0.7234 -0.3214
+vn -0.7738 -0.5250 -0.3544
+vn -0.6267 -0.7750 -0.0812
+vn -0.3711 0.8810 -0.2935
+vn 0.1769 -0.9650 -0.1937
+vn 0.0445 0.9964 -0.0717
+vn 0.8311 -0.3554 -0.4277
+vn -0.7007 0.2054 -0.6833
+vn -0.0533 0.8924 -0.4480
+vn 0.8166 0.3315 -0.4725
+vn 0.0358 0.8924 -0.4499
+vn -0.2773 0.9351 -0.2207
+vn -0.4216 -0.6737 -0.6069
+vn -0.9582 -0.2722 -0.0885
+vn -0.0186 -0.9425 -0.3336
+vn 0.0999 -0.9290 -0.3564
+vn 0.5107 -0.5695 -0.6441
+vn 0.8266 -0.3061 -0.4723
+vn 0.9646 -0.1522 -0.2154
+vn 0.1777 -0.9837 -0.0285
+vn -0.8670 0.4195 -0.2688
+vn 0.4947 0.7958 -0.3492
+vn 0.9412 -0.1078 -0.3201
+vn -0.8251 -0.1542 -0.5436
+vn -0.5472 0.6842 -0.4822
+vn 0.8502 -0.1216 -0.5123
+vn -0.8455 0.4415 -0.3003
+vn 0.8303 0.4946 -0.2568
+vn -0.8135 -0.5254 -0.2493
+vn -0.5602 -0.8045 -0.1972
+vn -0.2995 -0.8917 -0.3395
+vn 0.5380 0.5019 -0.6772
+vn -0.3971 -0.8172 -0.4176
+vn 0.0237 -0.9911 0.1313
+vn -0.4914 -0.0000 -0.8709
+vn 0.4997 -0.7025 -0.5068
+vn 0.3851 0.8102 -0.4419
+vn -0.0228 0.7791 -0.6265
+vn -0.2056 0.4945 -0.8445
+vn -0.6421 0.0415 -0.7655
+vn -0.0634 -0.9546 -0.2912
+vn 0.8754 -0.3310 -0.3523
+vn 0.1689 0.2847 -0.9436
+vn 0.7314 -0.1616 -0.6625
+vn -0.7001 -0.7027 -0.1271
+vn 0.4840 -0.7033 -0.5207
+vn 0.0596 0.9458 -0.3192
+vn -0.6061 0.1455 -0.7820
+vn -0.4830 -0.4421 -0.7558
+vn -0.7542 0.4514 -0.4769
+vn -0.1415 -0.6447 -0.7512
+vn 0.1589 0.8974 -0.4117
+vn 0.8830 0.0961 -0.4594
+vn -0.0694 0.7878 -0.6120
+vn -0.5640 -0.7744 -0.2868
+vn 0.1032 -0.9266 -0.3617
+vn -0.8724 -0.1868 -0.4518
+vn 0.7057 -0.3454 -0.6186
+vn 0.4243 -0.8397 -0.3389
+vn -0.9250 -0.2131 -0.3145
+vn -0.4426 0.7242 -0.5288
+vn 0.0207 0.8800 -0.4746
+vn -0.3494 0.6693 -0.6557
+vn -0.5546 -0.7117 -0.4312
+vn 0.7593 -0.3971 -0.5155
+vn -0.9403 -0.2784 -0.1960
+vn -0.8252 0.5212 -0.2178
+vn 0.7830 0.4870 -0.3871
+vn -0.9581 -0.2586 -0.1231
+vn 0.8658 -0.4568 -0.2044
+vn 0.7382 0.2780 -0.6146
+vn -0.6206 -0.7196 -0.3116
+vn 0.4442 -0.8581 -0.2574
+vn -0.8415 0.2688 -0.4687
+vn -0.9242 0.0542 -0.3779
+vn -0.8303 -0.5418 -0.1308
+vn 0.7440 -0.5523 -0.3761
+vn 0.6867 -0.2965 -0.6637
+vn 0.1475 0.9590 -0.2419
+vn -0.0569 0.9835 -0.1720
+vn 0.9036 -0.3534 -0.2421
+vn -0.6864 -0.3928 -0.6121
+vn 0.2417 0.7107 -0.6607
+vn 0.6857 -0.7275 -0.0227
+vn -0.7038 -0.7097 -0.0329
+vn 0.0049 -0.4821 0.8761
+vn 0.7095 0.7038 0.0356
+vn 0.8228 -0.4603 0.3334
+vn 0.7001 0.7040 0.1195
+vn -0.9607 0.1225 0.2491
+vn 0.3656 0.7785 0.5102
+vn 0.9814 0.1129 0.1553
+vn 0.2659 -0.8843 0.3838
+vn 0.8050 -0.5785 -0.1317
+vn -0.0758 0.1764 0.9814
+vn -0.0560 -0.5481 0.8345
+vn -0.4538 -0.7164 0.5300
+vn 0.5517 0.5547 0.6228
+vn 0.6578 -0.6033 0.4510
+vn -0.9902 0.0969 0.1004
+vn -0.9079 -0.1680 0.3842
+vn -0.5268 0.7478 0.4041
+vn -0.5560 0.0054 0.8312
+vn 0.0205 -0.6684 0.7435
+vn 0.8080 0.5263 0.2649
+vn 0.7677 -0.5711 0.2905
+vn 0.0925 0.1575 0.9832
+vn -0.5091 -0.8518 0.1237
+vn -0.3495 -0.9271 0.1357
+vn 0.6589 -0.6705 0.3410
+vn -0.0097 0.8613 0.5081
+vn -0.4787 -0.8769 -0.0435
+vn 0.4218 -0.0930 0.9019
+vn -0.0685 0.7380 0.6713
+vn -0.9614 0.2664 0.0688
+vn -0.5609 -0.8198 0.1152
+vn -0.6314 0.0342 0.7747
+vn -0.6290 0.0400 0.7764
+vn -0.6263 0.0347 0.7788
+vn -0.6178 0.0428 0.7852
+vn -0.6226 0.0406 0.7815
+vn -0.6186 0.0448 0.7844
+vn -0.6148 0.7806 0.1124
+vn 0.6973 0.4953 0.5182
+vn -0.7435 -0.2540 0.6186
+vn -0.4271 0.8194 0.3822
+vn -0.6018 0.1814 0.7778
+vn 0.2867 0.9565 -0.0548
+vn 0.6728 0.7366 0.0694
+vn -0.0549 0.3258 0.9438
+vn -0.0216 0.9998 0.0002
+vn -0.2856 0.8846 0.3687
+vn -0.7774 0.5366 0.3283
+vn -0.3436 0.8946 0.2857
+vn 0.1240 0.1823 0.9754
+vn -0.9674 0.2249 -0.1165
+vn -0.7612 -0.6484 -0.0126
+vn -0.8885 0.2294 0.3975
+vn -0.4400 0.6388 0.6312
+vn -0.4356 0.6391 0.6339
+vn -0.4375 0.6397 0.6320
+vn -0.8158 -0.2830 0.5044
+vn -0.4349 0.6408 0.6327
+vn -0.4328 0.6402 0.6346
+vn -0.4308 0.6409 0.6354
+vn -0.1735 -0.3120 0.9341
+vn 0.9919 -0.0134 -0.1263
+vn -0.0130 -0.9167 0.3993
+vn 0.3314 -0.9084 0.2550
+vn 0.3161 0.5455 0.7762
+vn -0.1144 -0.3399 0.9335
+vn -0.9761 -0.1838 -0.1156
+vn -0.4669 -0.8550 0.2257
+vn 0.8525 -0.5002 -0.1517
+vn -0.8325 0.3127 0.4574
+vn 0.7618 0.3813 0.5238
+vn 0.8829 -0.1975 0.4261
+vn 0.3945 -0.5573 0.7306
+vn 0.2170 -0.7525 0.6219
+vn -0.5293 0.0604 0.8463
+vn 0.1739 0.2663 0.9481
+vn 0.9652 -0.2576 0.0461
+vn -0.7533 -0.6391 0.1549
+vn 0.8768 -0.4706 0.0985
+vn -0.7484 -0.0881 0.6574
+vn 0.2109 -0.6859 0.6965
+vn -0.0494 -0.1833 0.9818
+vn -0.0280 0.9996 -0.0043
+vn 0.1797 -0.9762 -0.1210
+vn 0.7762 -0.3032 0.5528
+vn 0.4012 0.9158 0.0166
+vn -0.9457 -0.0234 0.3243
+vn 0.4970 0.8509 0.1702
+vn 0.9671 0.0452 0.2504
+vn -0.6185 0.2343 0.7501
+vn 0.7524 -0.1875 0.6315
+vn 0.1834 0.3421 0.9216
+vn -0.0590 -0.6756 0.7349
+vn 0.7202 0.6859 0.1043
+vn -0.9167 -0.3799 0.1240
+vn 0.7490 -0.6626 0.0004
+vn -0.8658 -0.2067 0.4556
+vn -0.7473 -0.6246 0.2267
+vn -0.7545 -0.6359 0.1624
+vn -0.2847 -0.9307 0.2297
+vn -0.4085 0.7267 0.5523
+vn -0.5917 0.0644 0.8036
+vn 0.0973 -0.7361 0.6699
+vn -0.3580 -0.0805 0.9303
+vn 0.4890 0.0988 0.8667
+vn 0.8145 0.5722 -0.0956
+vn 0.8055 -0.5455 0.2315
+vn 0.7685 -0.6339 -0.0869
+vn 0.8969 0.0983 0.4312
+vn 0.5442 0.0518 0.8374
+vn 0.4924 -0.5696 0.6581
+vn -0.4656 -0.8445 0.2646
+vn -0.1040 0.9908 -0.0867
+vn 0.9421 0.2814 -0.1823
+vn 0.5268 -0.7730 0.3535
+vn -0.6051 0.5602 0.5658
+vn 0.4125 0.6120 0.6748
+vn 0.4765 0.8790 0.0184
+vn 0.9498 0.2176 0.2250
+vn -0.2072 -0.1594 0.9652
+vn 0.9743 -0.2229 -0.0335
+vn 0.7325 -0.6802 0.0264
+vn 0.0289 0.6628 0.7482
+vn -0.8252 -0.4543 0.3356
+vn 0.4066 0.5372 0.7390
+vn 0.2060 -0.1070 0.9727
+vn -0.4140 0.8970 0.1547
+vn 0.6402 0.7350 -0.2234
+vn -0.1411 0.9535 0.2663
+vn 0.1508 0.6864 0.7114
+vn 0.7007 0.3527 0.6202
+vn 0.0265 0.8390 0.5434
+vn -0.5146 0.8557 0.0543
+vn -0.8626 0.3411 0.3736
+vn -0.8185 0.3120 0.4824
+vn 0.2172 0.9691 0.1168
+vn 0.8481 0.5031 0.1660
+vn 0.1079 0.2246 0.9685
+vn 0.6312 0.0687 0.7726
+vn -0.1025 0.9918 -0.0765
+vn -0.9257 0.3404 0.1648
+vn -0.7827 0.2343 0.5766
+vn -0.5788 -0.3175 0.7511
+vn -0.7780 0.2238 0.5871
+vn 0.0086 -0.3125 0.9499
+vn 0.3120 0.5887 0.7457
+vn -0.5958 0.4411 0.6712
+vn 0.8551 0.5139 -0.0684
+vn -0.6392 0.5860 0.4980
+vn 0.6780 -0.7252 0.1200
+vn 0.7261 -0.6287 0.2784
+vn 0.9023 -0.0207 0.4306
+vn 0.7511 0.4441 0.4885
+vn -0.8101 0.0432 0.5847
+vn -0.1279 -0.1396 0.9819
+vn 0.1168 -0.9674 -0.2248
+vn 0.1378 -0.5550 0.8204
+vn -0.0088 0.9877 -0.1564
+vn 0.8158 -0.1548 0.5572
+vn -0.6152 -0.5585 0.5564
+vn -0.2936 -0.7898 0.5386
+vn 0.0917 -0.7873 0.6097
+vn 0.4407 -0.0972 0.8924
+vn -0.8014 0.5433 0.2500
+vn -0.9585 0.0890 0.2710
+vn 0.1834 -0.6855 0.7046
+vn 0.1933 -0.6802 0.7071
+vn 0.1875 -0.6818 0.7071
+vn 0.8928 -0.4144 0.1767
+vn -0.4301 0.8819 -0.1933
+vn -0.5675 0.7634 0.3085
+vn -0.4576 -0.8344 0.3073
+vn -0.1020 -0.4043 0.9089
+vn 0.7490 0.6542 0.1047
+vn 0.9994 0.0046 -0.0331
+vn -0.6559 0.7245 0.2117
+vn -0.9597 0.1794 0.2162
+vn 0.0314 0.5721 0.8196
+vn -0.2632 -0.4265 0.8653
+vn 0.0784 0.9846 -0.1563
+vn 0.7275 -0.3415 0.5950
+vn -0.1378 -0.0766 0.9875
+vn 0.6396 0.7317 -0.2356
+vn 0.0198 -0.0064 0.9998
+vn -0.9881 -0.0206 0.1525
+vn -0.6163 0.7828 0.0857
+vn 0.4046 0.5407 0.7375
+vn 0.2950 -0.4808 0.8257
+vn 0.2876 -0.9576 -0.0157
+vn -0.8931 -0.2489 0.3747
+vn -0.6037 -0.7551 0.2555
+vn 0.8463 -0.4951 0.1967
+vn 0.4090 -0.7063 0.5778
+vn 0.6870 0.3434 0.6405
+vn -0.7948 -0.0550 0.6043
+vn -0.0706 0.2085 0.9755
+vn -0.6522 -0.7487 0.1187
+vn 0.0570 -0.8099 0.5837
+vn -0.1325 0.9805 0.1451
+vn -0.7969 0.5807 0.1663
+vn -0.8573 -0.0169 0.5146
+vn -0.4682 -0.0924 0.8788
+vn 0.7728 -0.1651 0.6128
+vn -0.3885 0.9108 0.1397
+vn -0.9614 -0.2003 0.1889
+vn -0.8431 0.1753 0.5083
+vn -0.1287 -0.4348 0.8913
+vn 0.7984 0.6005 0.0454
+vn 0.9221 0.2754 0.2718
+vn 0.8852 -0.4503 0.1168
+vn 0.7135 -0.6148 0.3360
+vn 0.1444 0.4945 0.8571
+vn 0.4644 0.0967 0.8803
+vn 0.0112 -0.8001 0.5998
+vn 0.3246 0.8927 -0.3126
+vn -0.0949 -0.9789 -0.1808
+vn -0.0780 -0.5185 0.8515
+vn 0.8902 0.3955 0.2259
+vn 0.7843 -0.1829 0.5928
+vn -0.0763 0.7262 0.6832
+vn -0.7061 -0.6143 0.3522
+vn -0.2894 -0.9503 0.1149
+vn -0.6680 -0.6583 0.3469
+vn 0.2783 -0.1275 0.9520
+vn 0.2248 -0.7460 0.6268
+vn 0.7303 -0.6459 -0.2224
+vn 0.4728 0.0558 0.8794
+vn -0.5511 -0.8151 0.1787
+vn -0.2807 -0.7710 0.5716
+vn -0.2961 -0.4898 0.8200
+vn 0.7949 -0.2870 0.5345
+vn -0.2286 0.9355 -0.2694
+vn -0.6506 0.7539 -0.0915
+vn -0.8492 -0.5034 0.1599
+vn -0.2882 0.6086 0.7393
+vn 0.7896 -0.5297 0.3096
+vn -0.2900 0.6197 0.7293
+vn -0.4870 0.1722 0.8562
+vn 0.3499 0.3890 0.8522
+vn 0.7740 -0.1801 0.6071
+vn -0.2288 -0.3833 0.8949
+vn 0.7991 -0.5926 -0.1007
+vn 0.9838 0.1120 -0.1399
+vn 0.8602 0.4235 0.2840
+vn 0.1911 0.1930 0.9624
+vn 0.6605 0.1193 0.7413
+vn -0.3185 0.8943 0.3143
+vn -0.8450 0.4342 0.3120
+vn 0.1149 0.5308 0.8397
+vn 0.5357 0.5754 0.6180
+vn -0.4424 0.3048 0.8434
+vn 0.0460 -0.4647 0.8843
+vn -0.2094 0.9703 0.1208
+vn -0.6828 -0.7297 -0.0354
+vn -0.2274 0.8513 0.4729
+vn -0.9360 -0.0621 0.3465
+vn -0.5548 0.1477 0.8188
+vn -0.0055 -0.1831 0.9831
+vn -0.8396 -0.5402 0.0567
+vn 0.8960 0.4422 -0.0412
+vn 0.2706 0.8938 0.3577
+vn 0.8956 -0.0007 0.4448
+vn 0.3526 -0.8036 0.4795
+vn -0.8054 -0.1640 0.5695
+vn 0.5286 0.2725 0.8039
+vn -0.0251 -0.8515 0.5238
+vn 0.7632 -0.4356 0.4772
+vn 0.0059 -0.7222 0.6916
+vn -0.9293 -0.3672 -0.0384
+vn 0.2722 -0.8356 0.4771
+vn -0.4799 -0.5693 0.6675
+vn -0.3472 -0.0402 0.9369
+vn 0.0437 0.2605 0.9645
+vn -0.3657 -0.2480 0.8971
+vn 0.2403 -0.9705 -0.0201
+vn 0.2429 -0.9357 0.2559
+vn 0.5426 -0.7403 0.3970
+vn -0.0557 -0.8647 0.4992
+vn -0.2845 0.9311 0.2280
+vn -0.0427 -0.9885 0.1454
+vn -0.8313 0.3825 0.4034
+vn -0.6201 0.5900 0.5171
+vn -0.7473 -0.4721 0.4677
+vn -0.2402 -0.4263 0.8721
+vn 0.9571 -0.2883 -0.0289
+vn 0.2460 -0.9677 0.0547
+vn 0.6792 -0.7339 0.0106
+vn 0.0788 0.9663 0.2451
+vn 0.5749 0.4016 0.7129
+vn 0.7276 -0.0039 0.6860
+vn -0.0906 -0.5605 0.8232
+vn 0.2310 0.4944 0.8380
+vn 0.4710 -0.2320 0.8511
+vn 0.2527 -0.5784 0.7756
+vn 0.9999 -0.0030 -0.0142
+vn 0.3450 -0.9357 0.0738
+vn 0.1274 0.7628 0.6339
+vn 0.8995 -0.4087 -0.1544
+vn -0.1537 -0.9828 0.1026
+vn -0.7660 -0.5097 0.3917
+vn 0.1625 -0.9676 0.1932
+vn 0.1128 0.9074 0.4048
+vn -0.5339 0.1573 0.8308
+vn -0.1997 0.9634 0.1787
+vn 0.6282 0.7329 0.2610
+vn -0.5473 -0.8132 0.1980
+vn 0.0404 -0.8742 0.4840
+vn 0.7885 -0.6096 -0.0813
+vn 0.7699 -0.2376 0.5923
+vn -0.4492 0.4115 0.7930
+vn 0.6061 0.7660 -0.2142
+vn 0.9496 0.3042 -0.0756
+vn 0.8781 0.2568 0.4037
+vn 0.0309 0.8818 0.4707
+vn 0.2698 0.8538 0.4453
+vn -0.7788 -0.6146 0.1255
+vn -0.8018 -0.3707 0.4688
+vn -0.2349 0.3436 0.9093
+vn -0.5937 -0.3141 0.7409
+vn 0.8959 -0.3704 0.2454
+vn 0.7180 -0.6838 0.1302
+vn -0.2269 -0.9598 0.1651
+vn 0.8565 -0.0957 0.5071
+vn 0.3907 -0.1082 0.9141
+vn -0.4919 -0.8693 -0.0481
+vn -0.0149 0.9991 0.0400
+vn 0.5262 0.8460 -0.0861
+vn -0.6853 -0.6370 0.3531
+vn -0.5375 -0.5246 0.6602
+vn 0.1336 -0.9879 -0.0784
+vn 0.5986 -0.6460 0.4737
+vn 0.2379 -0.4152 0.8781
+vn 0.5885 -0.5995 0.5425
+vn 0.1391 -0.0141 0.9902
+vn 0.9624 -0.2376 0.1313
+vn 0.7721 -0.6219 0.1304
+vn 0.1822 -0.5544 0.8121
+vn 0.2998 0.1892 0.9351
+vn 0.1588 -0.1163 0.9804
+vn -0.4722 0.8696 0.1440
+vn 0.4646 0.8149 0.3464
+vn -0.9410 -0.1067 0.3213
+vn 0.4426 0.6663 0.6002
+vn 0.3932 -0.2079 0.8957
+vn 0.8240 0.4932 0.2788
+vn 0.5460 0.8225 0.1596
+vn -0.4916 0.8155 0.3053
+vn 0.0561 -0.7855 0.6163
+vn 0.7700 -0.4599 0.4424
+vn -0.4280 0.0795 0.9003
+vn -0.3872 0.9220 0.0028
+vn 0.2526 0.9636 0.0876
+vn -0.6133 0.6806 0.4007
+vn -0.7299 -0.0512 0.6816
+vn 0.4799 0.5559 0.6787
+vn 0.0907 0.3370 0.9371
+vn -0.8753 0.4807 -0.0528
+vn -0.9123 -0.1372 0.3859
+vn 0.8509 -0.4989 0.1643
+vn 0.8209 0.1252 0.5572
+vn -0.0650 -0.8485 0.5252
+vn -0.5222 0.3219 0.7898
+vn 0.5354 0.1657 0.8282
+vn -0.1819 -0.5620 0.8069
+vn 0.3593 -0.5083 0.7826
+vn -0.5297 0.8402 0.1161
+vn 0.9948 -0.0776 0.0666
+vn -0.3272 -0.8572 0.3976
+vn -0.1747 -0.4583 0.8715
+vn 0.9414 0.0446 0.3343
+vn -0.4155 0.8957 0.1581
+vn 0.3185 0.9278 0.1945
+vn -0.7691 0.6001 0.2199
+vn 0.7923 0.4263 0.4366
+vn -0.5095 -0.3713 0.7762
+vn 0.8502 -0.4593 -0.2574
+vn -0.7621 0.1973 0.6167
+vn -0.1529 -0.3749 0.9144
+vn -0.8609 0.4687 0.1978
+vn 0.0687 -0.7572 0.6496
+vn 0.2841 0.3119 0.9066
+vn 0.0933 -0.4431 0.8916
+vn 0.9298 0.1136 -0.3502
+vn 0.0750 0.9929 0.0926
+vn -0.6023 -0.4349 0.6695
+vn 0.7441 -0.6373 -0.2007
+vn 0.4831 0.7491 0.4532
+vn 0.2202 -0.1505 0.9638
+vn -0.4726 0.1022 0.8753
+vn -0.2258 0.9663 0.1233
+vn -0.2519 0.7640 0.5939
+vn -0.6925 0.0275 0.7209
+vn 0.5175 -0.7852 0.3402
+vn 0.0009 -0.7353 0.6777
+vn 0.3106 0.9374 -0.1573
+vn 0.8066 0.5062 0.3053
+vn 0.1030 0.9550 -0.2782
+vn 0.0309 0.3772 0.9256
+vn -0.4235 0.7727 0.4728
+vn 0.9193 0.3283 -0.2171
+vn 0.5875 -0.1238 0.7997
+vn 0.6410 0.7666 0.0379
+vn -0.8154 0.5602 -0.1461
+vn -0.9769 0.0882 0.1946
+vn -0.7066 -0.6283 0.3256
+vn -0.5391 0.2190 0.8133
+vn 0.2487 -0.2767 0.9282
+vn 0.6320 0.7722 -0.0650
+vn 0.9908 0.0851 0.1053
+vn -0.2162 -0.0017 0.9763
+vn -0.2289 0.9729 -0.0335
+vn 0.1399 -0.9786 0.1511
+vn 0.4082 0.8739 -0.2640
+vn -0.9669 0.2438 0.0748
+vn -0.0987 -0.9734 0.2065
+vn 0.4050 0.2294 0.8851
+vn -0.1057 -0.9926 0.0603
+vn -0.8516 0.1217 0.5099
+vn -0.8018 -0.5300 0.2760
+vn 0.2850 0.9416 -0.1792
+vn 0.6601 -0.7252 -0.1959
+vn -0.1203 0.9663 0.2274
+vn 0.2804 0.9322 0.2290
+vn -0.9907 -0.1360 -0.0094
+vn 0.4282 -0.8859 -0.1785
+vn -0.7688 -0.4905 0.4103
+vn 0.3564 -0.9341 0.0215
+vn 0.5226 0.5649 0.6386
+vn 0.8852 0.1914 0.4240
+vn -0.0640 -0.9574 0.2814
+vn -0.3132 -0.1062 0.9437
+vn 0.1605 -0.5235 0.8368
+vn 0.4317 0.8964 -0.1000
+vn -0.6056 0.7340 0.3074
+vn -0.8727 0.4833 0.0687
+vn -0.8700 -0.4898 0.0562
+vn -0.5122 -0.8452 0.1528
+vn 0.1844 0.9099 0.3717
+vn -0.9276 -0.1480 0.3430
+vn 0.5265 -0.8213 0.2196
+vn 0.2905 0.6500 0.7022
+vn -0.5045 0.4329 0.7471
+vn -0.2691 -0.5614 0.7825
+vn 0.7931 0.5643 -0.2293
+vn 0.9186 0.1033 0.3816
+vn -0.5551 0.8096 0.1907
+vn -0.8469 0.3939 0.3571
+vn 0.5688 0.8084 0.1517
+vn -0.9324 -0.3374 -0.1297
+vn 0.9915 -0.1067 0.0751
+vn 0.0360 -0.9801 0.1954
+vn -0.0966 -0.4644 0.8803
+vn 0.8186 -0.1244 0.5607
+vn 0.1887 0.2884 0.9387
+vn -0.1714 -0.5840 0.7934
+vn 0.9568 -0.2460 -0.1549
+vn 0.9881 0.1206 -0.0956
+vn -0.5303 0.7622 0.3712
+vn -0.7343 -0.0737 0.6748
+vn -0.1466 -0.9712 0.1878
+vn -0.7394 -0.0364 0.6722
+vn 0.1244 -0.7903 0.6000
+vn -0.5369 -0.1216 0.8348
+vn 0.9781 -0.1548 -0.1394
+vn 0.8213 -0.1391 0.5533
+vn 0.1888 -0.7770 0.6005
+vn -0.2102 -0.9690 0.1297
+vn -0.0862 -0.9628 0.2561
+vn 0.3979 -0.8706 0.2894
+vn -0.4830 -0.2737 0.8317
+vn 0.8943 -0.2867 -0.3435
+vn 0.4372 -0.0177 0.8992
+vn 0.1179 -0.8786 0.4629
+vn -0.3562 0.9044 -0.2350
+vn 0.5365 0.8340 0.1289
+vn -0.9426 0.3339 0.0082
+vn -0.7200 -0.6460 0.2537
+vn 0.7480 -0.6434 0.1631
+vn -0.7434 -0.2104 0.6350
+vn 0.2263 -0.8327 0.5054
+vn -0.3977 0.5720 0.7174
+vn 0.2690 -0.0167 0.9630
+vn 0.8698 0.4723 0.1426
+vn 0.8467 0.0170 0.5318
+vn 0.7129 -0.7013 -0.0024
+vn 0.3136 0.9481 -0.0523
+vn 0.6535 0.7332 -0.1880
+vn 0.1676 -0.7332 0.6591
+vn -0.4505 0.8414 0.2985
+vn -0.5899 -0.7858 0.1861
+vn -0.0016 0.5278 0.8494
+vn -0.0508 -0.2746 0.9602
+vn 0.2246 -0.3450 0.9113
+vn 0.4005 -0.5388 0.7412
+vn -0.5583 0.7453 0.3644
+vn 0.7599 0.6421 -0.1018
+vn 0.1947 -0.7041 0.6828
+vn -0.5017 -0.8611 -0.0821
+vn -1.0000 0.0018 -0.0006
+vn 0.5085 0.8608 -0.0230
+vn 0.9844 -0.0051 -0.1758
+vn 0.9887 -0.0034 -0.1500
+vn 0.5104 -0.8585 0.0487
+vn 0.0663 -0.0360 0.9971
+vn -0.0195 -0.0008 0.9998
+vn 0.0807 0.0192 0.9966
+vn -0.0062 -0.0106 0.9999
+vn -0.0448 0.0464 -0.9979
+vn 0.0042 -0.0246 -0.9997
+vn -0.0216 0.0500 -0.9985
+vn 0.1999 0.0034 -0.9798
+vn -0.0126 0.0893 -0.9959
+vn -0.0440 0.0078 -0.9990
+vn -0.0337 0.0019 -0.9994
+vn 0.0577 0.0425 -0.9974
+vn 0.0972 0.0357 -0.9946
+vn -0.0532 -0.0769 -0.9956
+vn -0.0310 0.0001 -0.9995
+vn -0.1207 -0.1750 -0.9771
+vn -0.0025 -0.0880 -0.9961
+vn -0.0371 -0.0864 -0.9956
+vn 0.1055 0.0873 -0.9906
+vn -0.0076 -0.1185 -0.9929
+vn 0.0033 0.1023 -0.9948
+vn 0.0021 0.1026 -0.9947
+vn 0.0012 0.1029 -0.9947
+vn -0.1225 0.0422 -0.9916
+vn 0.0274 0.1802 -0.9832
+vn 0.0222 -0.0377 -0.9990
+vn -0.0075 0.1466 -0.9892
+vn 0.0979 -0.0605 -0.9934
+vn -0.1245 -0.0910 -0.9880
+vn -0.0428 0.1029 -0.9938
+vn -0.1409 0.1645 -0.9763
+vn 0.0966 0.2414 -0.9656
+vn -0.0475 -0.0052 -0.9989
+vn 0.0167 -0.0110 -0.9998
+vn 0.0001 -0.1018 -0.9948
+vn -0.0232 0.0953 -0.9952
+vn -0.1248 0.0721 -0.9896
+vn -0.0424 0.1086 -0.9932
+vn 0.0595 -0.1287 -0.9899
+vn 0.0222 0.0297 -0.9993
+vn 0.0595 -0.0545 -0.9967
+vn -0.0657 -0.0277 -0.9975
+vn 0.1344 -0.0917 -0.9867
+vn 0.0924 0.0714 -0.9932
+vn -0.0235 -0.0109 -0.9997
+vn 0.2179 -0.1172 -0.9689
+vn 0.1632 -0.2598 -0.9518
+vn -0.0039 0.0624 -0.9980
+vn -0.0037 0.0624 -0.9980
+vn -0.0036 0.0624 -0.9980
+vn 0.0413 -0.0517 -0.9978
+vn 0.0413 -0.0325 -0.9986
+vn 0.0516 -0.0146 -0.9986
+vn -0.0722 0.0071 -0.9974
+vn 0.0629 -0.0104 -0.9980
+vn 0.0579 -0.0927 -0.9940
+vn 0.0387 -0.0391 -0.9985
+vn -0.0755 -0.1147 -0.9905
+vn -0.2261 -0.0653 -0.9719
+vn -0.2254 -0.0679 -0.9719
+vn -0.2270 -0.0616 -0.9719
+vn -0.0663 0.0361 -0.9971
+vn 0.0627 -0.1363 -0.9887
+vn -0.0837 -0.1678 -0.9823
+vn -0.0921 0.1231 -0.9881
+vn -0.0145 -0.0111 -0.9998
+vn 0.0195 0.0008 -0.9998
+vn 0.1560 0.2150 -0.9641
+vn 0.0502 -0.1129 -0.9923
+vn 0.0533 0.1045 -0.9931
+vn -0.0927 0.0188 -0.9955
+vn 0.0229 0.0214 -0.9995
+vn 0.0192 0.0220 -0.9996
+vn 0.0195 0.0219 -0.9996
+vn 0.0558 -0.0561 -0.9969
+vn -0.0807 -0.0192 -0.9966
+vn -0.0130 0.0096 -0.9999
+vn -0.0008 -0.0870 -0.9962
+vn 0.0926 -0.0401 -0.9949
+vn 0.0455 -0.1223 -0.9915
+vn 0.0033 0.2547 -0.9670
+vn -0.0018 0.1747 -0.9846
+vn 0.1266 -0.1832 -0.9749
+vn -0.1105 0.0355 -0.9932
+vn -0.1547 -0.1576 -0.9753
+vn -0.0331 0.0051 -0.9994
+vn -0.1095 0.0430 -0.9931
+vn -0.0735 0.1101 -0.9912
+vn 0.1797 0.0586 -0.9820
+vn -0.0851 -0.0700 -0.9939
+vn -0.0941 -0.0526 -0.9942
+vn 0.2933 0.1941 -0.9361
+vn 0.0039 0.0852 -0.9964
+vn -0.1004 -0.0245 -0.9946
+vn -0.0607 0.0287 -0.9977
+vn -0.0568 -0.0201 -0.9982
+vn -0.0471 0.0206 -0.9987
+vn 0.2285 -0.0991 -0.9685
+vn 0.0705 -0.0983 -0.9927
+vn 0.0419 0.0001 -0.9991
+vn -0.0619 -0.0410 -0.9972
+vn -0.1097 -0.0528 -0.9926
+vn -0.0556 -0.2075 -0.9767
+vn 0.0285 -0.0280 -0.9992
+vn -0.1238 -0.0746 -0.9895
+vn -0.0030 -0.1783 -0.9840
+vn 0.0624 0.0092 -0.9980
+vn -0.0046 0.1049 -0.9945
+vn 0.1826 0.1022 -0.9779
+vn -0.0715 0.2279 -0.9710
+vn 0.0847 0.0963 -0.9917
+vn 0.0181 -0.0362 -0.9992
+vn -0.0793 -0.0213 -0.9966
+vn 0.1997 0.1436 -0.9693
+vn 0.1668 0.0415 -0.9851
+vn -0.1750 -0.0496 -0.9833
+vn -0.0183 0.0591 -0.9981
+vn -0.0190 0.0589 -0.9981
+vn -0.0193 0.0588 -0.9981
+vn -0.0197 0.0586 -0.9981
+vn 0.0029 -0.0291 -0.9996
+vn -0.0008 -0.0288 -0.9996
+vn 0.0037 -0.0291 -0.9996
+vn 0.0054 -0.0293 -0.9996
+vn -0.0308 -0.0118 -0.9995
+vn -0.0303 -0.1618 -0.9864
+vn -0.0235 -0.0312 -0.9992
+vn 0.0896 -0.0350 -0.9954
+vn -0.1047 -0.0669 -0.9923
+vn 0.0686 0.1322 -0.9888
+vn -0.0823 0.0715 -0.9940
+vn 0.0575 -0.2625 -0.9632
+vn 0.2167 -0.1565 -0.9636
+vn -0.1047 0.0574 -0.9928
+vn -0.0345 0.1102 -0.9933
+vn 0.0387 0.0092 -0.9992
+vn 0.0584 -0.0413 -0.9974
+vn 0.0634 -0.1787 -0.9819
+vn -0.0033 0.0624 -0.9980
+vn 0.1755 0.0347 -0.9839
+vn 0.0324 -0.0893 -0.9955
+vn -0.0005 0.0178 -0.9998
+vn -0.1466 0.2300 -0.9621
+vn -0.0824 0.0080 -0.9966
+vn 0.0234 -0.0147 -0.9996
+vn 0.0401 0.0428 -0.9983
+vn 0.0090 0.0499 -0.9987
+vn 0.0407 -0.0583 -0.9975
+vn -0.0031 0.1069 -0.9943
+vn -0.0319 0.1211 -0.9921
+vn -0.2239 -0.0740 -0.9718
+vn 0.0971 0.0008 -0.9953
+vn -0.0554 -0.0104 -0.9984
+vn -0.0587 0.0230 -0.9980
+vn 0.0411 0.0884 -0.9952
+vn -0.1671 -0.0510 -0.9846
+vn 0.0381 -0.1683 -0.9850
+vn 0.1159 -0.1083 -0.9873
+vn -0.1069 0.1229 -0.9867
+vn 0.0933 -0.0155 -0.9955
+vn 0.0838 -0.0592 -0.9947
+vn -0.0351 0.0430 -0.9985
+vn -0.0506 0.1086 -0.9928
+vn -0.0262 -0.0332 -0.9991
+vn 0.0166 0.0224 -0.9996
+vn 0.0062 0.0106 -0.9999
+vn -0.0018 -0.0134 -0.9999
+vn -0.1110 0.2352 -0.9656
+vn -0.0453 0.0357 -0.9983
+vn 0.0413 -0.2052 -0.9778
+vn 0.2346 -0.0361 -0.9714
+vn 0.0246 -0.0789 -0.9966
+vn -0.0197 -0.0139 -0.9997
+vn 0.0706 -0.0252 -0.9972
+vn 0.0406 0.1328 -0.9903
+vn -0.1101 -0.0676 -0.9916
+vn 0.0755 0.0660 -0.9950
+vn 0.0367 0.1083 -0.9934
+s off
+f 591//1269 592//1269 593//1269
+f 594//1270 592//1270 591//1270
+f 595//1271 596//1271 597//1271 598//1271
+f 599//1272 600//1272 601//1272
+f 602//1273 603//1273 604//1273
+f 605//1274 606//1274 607//1274
+f 608//1275 609//1275 610//1275
+f 610//1276 611//1276 608//1276
+f 612//1277 613//1277 614//1277 615//1277
+f 616//1278 617//1278 612//1278 615//1278
+f 618//1279 619//1279 620//1279 621//1279
+f 619//1280 622//1280 623//1280
+f 624//1281 625//1281 626//1281
+f 627//1282 628//1282 629//1282
+f 630//1283 631//1283 632//1283
+f 633//1284 634//1284 635//1284
+f 636//1285 637//1285 638//1285
+f 639//1286 640//1286 641//1286
+f 642//1287 643//1287 644//1287
+f 644//1288 643//1288 645//1288 646//1288
+f 647//1289 648//1289 649//1289 650//1289
+f 651//1290 652//1290 653//1290
+f 654//1291 653//1291 652//1291
+f 655//1292 656//1292 657//1292
+f 658//1293 659//1293 660//1293
+f 661//1294 662//1294 663//1294 664//1294
+f 652//1295 665//1295 654//1295
+f 666//1296 667//1296 668//1296
+f 669//1297 670//1297 671//1297 672//1297
+f 673//1298 674//1298 675//1298 676//1298
+f 677//1299 678//1299 679//1299
+f 680//1300 677//1300 679//1300 681//1300 682//1300
+f 683//1301 684//1301 685//1301 686//1301 687//1301
+f 688//1302 689//1302 690//1302 691//1302
+f 692//1303 693//1303 694//1303
+f 695//1304 696//1304 697//1304
+f 698//1305 699//1305 700//1305
+f 701//1306 702//1306 703//1306 704//1306
+f 705//1307 706//1307 707//1307 708//1307
+f 709//1308 710//1308 711//1308
+f 712//1309 713//1309 714//1309 715//1309
+f 716//1310 717//1310 718//1310
+f 719//1311 720//1311 721//1311 722//1311 723//1311 724//1311
+f 724//1312 725//1312 719//1312
+f 726//1313 727//1313 720//1313
+f 728//1314 729//1314 730//1314 731//1314
+f 732//1315 733//1315 734//1315
+f 731//1316 735//1316 728//1316
+f 732//1317 734//1317 736//1317 737//1317
+f 738//1318 739//1318 740//1318
+f 741//1319 742//1319 743//1319 744//1319
+f 745//1320 746//1320 747//1320
+f 747//1321 746//1321 748//1321 749//1321
+f 750//1322 751//1322 752//1322
+f 753//1323 754//1323 736//1323 755//1323 756//1323
+f 757//1324 758//1324 759//1324 760//1324
+f 761//1325 762//1325 763//1325 764//1325
+f 765//1326 761//1326 764//1326 766//1326
+f 767//1327 768//1327 769//1327 770//1327
+f 771//1328 772//1328 773//1328
+f 774//1329 775//1329 776//1329
+f 777//1330 778//1330 779//1330
+f 780//1331 781//1331 782//1331 783//1331
+f 784//1332 785//1332 786//1332 787//1332
+f 788//1333 789//1333 790//1333
+f 791//1334 792//1334 793//1334
+f 793//1335 788//1335 790//1335 791//1335
+f 794//1336 795//1336 796//1336 797//1336
+f 798//1337 799//1337 800//1337
+f 801//1338 802//1338 803//1338
+f 804//1339 805//1339 806//1339
+f 807//1340 808//1340 809//1340 810//1340
+f 811//1341 808//1341 812//1341 813//1341 814//1341
+f 813//1342 812//1342 815//1342
+f 816//1343 817//1343 818//1343
+f 819//1344 820//1344 821//1344 822//1344
+f 823//1345 824//1345 825//1345
+f 826//1346 827//1346 828//1346
+f 829//1347 830//1347 831//1347 832//1347
+f 833//1348 821//1348 820//1348
+f 834//1349 835//1349 836//1349
+f 837//1350 838//1350 839//1350
+f 840//1351 841//1351 842//1351 843//1351
+f 844//1352 845//1352 846//1352
+f 847//1353 848//1353 849//1353 850//1353
+f 851//1354 852//1354 853//1354
+f 854//1355 855//1355 856//1355 857//1355 858//1355
+f 859//1356 860//1356 861//1356 862//1356
+f 863//1357 864//1357 865//1357 861//1357 860//1357
+f 866//1358 867//1358 868//1358
+f 869//1359 870//1359 871//1359
+f 872//1360 873//1360 874//1360 875//1360
+f 876//1361 877//1361 878//1361
+f 877//1362 876//1362 879//1362 880//1362
+f 881//1363 882//1363 883//1363 884//1363
+f 885//1364 886//1364 887//1364
+f 888//1365 889//1365 890//1365
+f 891//1366 892//1366 893//1366
+f 891//1367 893//1367 894//1367 895//1367 896//1367
+f 897//1368 898//1368 899//1368 900//1368
+f 901//1369 902//1369 903//1369
+f 904//1370 905//1370 906//1370 907//1370
+f 908//1371 909//1371 910//1371
+f 911//1372 912//1372 913//1372 914//1372
+f 915//1373 916//1373 917//1373
+f 918//1374 919//1374 920//1374
+f 921//1375 922//1375 923//1375 924//1375
+f 925//1376 926//1376 927//1376 928//1376
+f 929//1377 930//1377 931//1377 932//1377
+f 933//1378 934//1378 935//1378 936//1378
+f 937//1379 938//1379 939//1379 940//1379
+f 937//1380 940//1380 941//1380
+f 942//1381 943//1381 944//1381
+f 945//1382 946//1382 944//1382 947//1382
+f 948//1383 946//1383 945//1383
+f 599//1384 595//1384 598//1384 600//1384
+f 949//1385 950//1385 951//1385 952//1385
+f 953//1386 954//1386 955//1386
+f 956//1387 957//1387 958//1387 959//1387
+f 960//1388 956//1388 961//1388
+f 962//1389 958//1389 957//1389
+f 963//1390 957//1390 960//1390 964//1390
+f 965//1391 966//1391 606//1391
+f 965//1392 967//1392 605//1392
+f 968//1393 607//1393 966//1393
+f 968//1394 965//1394 605//1394
+f 969//1395 608//1395 805//1395
+f 969//1396 805//1396 970//1396
+f 971//1397 972//1397 973//1397 974//1397
+f 612//1398 617//1398 974//1398
+f 975//1399 976//1399 977//1399
+f 978//1400 979//1400 980//1400
+f 981//1401 977//1401 976//1401 978//1401
+f 619//1402 982//1402 983//1402 622//1402
+f 984//1403 985//1403 986//1403
+f 986//1404 987//1404 988//1404 984//1404
+f 989//1405 990//1405 991//1405 992//1405 993//1405
+f 991//1406 994//1406 992//1406
+f 995//1407 996//1407 997//1407
+f 982//1408 998//1408 999//1408 983//1408
+f 1000//1409 998//1409 982//1409
+f 1000//1410 625//1410 998//1410
+f 1001//1411 982//1411 619//1411
+f 1002//1412 625//1412 1000//1412
+f 1002//1413 1000//1413 1001//1413
+f 1003//1414 1004//1414 1005//1414 1006//1414
+f 1005//1415 1007//1415 629//1415
+f 1008//1416 1009//1416 1010//1416 1011//1416
+f 1012//1417 1013//1417 1014//1417
+f 1015//1418 1016//1418 1017//1418
+f 1014//1419 1013//1419 1017//1419 1016//1419
+f 1018//1420 1019//1420 1014//1420 1016//1420
+f 1020//1421 1021//1421 1022//1421 1023//1421
+f 1021//1422 1024//1422 1025//1422 1022//1422
+f 1026//1423 1027//1423 1028//1423 1029//1423
+f 1028//1424 1021//1424 1030//1424
+f 1031//1425 1032//1425 1033//1425 1034//1425
+f 1034//1426 1035//1426 1031//1426
+f 1031//1427 1036//1427 1032//1427
+f 1037//1428 1038//1428 1039//1428 1040//1428
+f 1037//1429 1040//1429 1041//1429 1042//1429
+f 1043//1430 1037//1430 1042//1430
+f 1044//1431 1038//1431 1045//1431
+f 1046//1432 632//1432 631//1432 1047//1432
+f 1048//1433 1049//1433 632//1433
+f 1046//1434 1048//1434 632//1434
+f 1049//1435 1050//1435 1051//1435 1052//1435
+f 1053//1436 1054//1436 1046//1436 1047//1436
+f 1055//1437 1050//1437 1056//1437 1057//1437 1058//1437
+f 1048//1438 1059//1438 1049//1438
+f 1060//1439 634//1439 1056//1439
+f 1061//1440 1048//1440 1046//1440
+f 1060//1441 1061//1441 634//1441
+f 1054//1442 1062//1442 1061//1442 1046//1442
+f 1060//1443 1056//1443 1059//1443
+f 1061//1444 1059//1444 1048//1444
+f 1060//1445 1059//1445 1061//1445
+f 1063//1446 1064//1446 1065//1446
+f 1066//1447 1065//1447 1067//1447
+f 1068//1448 1069//1448 1070//1448 638//1448
+f 638//1449 640//1449 639//1449 636//1449
+f 638//1450 1071//1450 640//1450
+f 1072//1451 1071//1451 1070//1451 1069//1451
+f 642//1452 1073//1452 1074//1452 643//1452
+f 1075//1453 1076//1453 1077//1453
+f 1078//1454 645//1454 1075//1454 1077//1454
+f 656//1455 1079//1455 657//1455
+f 1080//1456 1081//1456 1082//1456 1083//1456
+f 1084//1457 1081//1457 1080//1457
+f 1085//1458 1086//1458 1087//1458 1088//1458
+f 1089//1459 1090//1459 1091//1459 1092//1459 1093//1459
+f 1091//1460 1094//1460 1095//1460
+f 1096//1461 1097//1461 1091//1461 1090//1461
+f 652//1462 1086//1462 1098//1462
+f 1099//1463 1100//1463 652//1463
+f 1101//1464 1098//1464 1102//1464
+f 1099//1465 1098//1465 1101//1465
+f 1103//1466 1104//1466 659//1466 1105//1466
+f 1097//1467 1106//1467 1107//1467 1094//1467
+f 1097//1468 1108//1468 657//1468
+f 1109//1469 1110//1469 1111//1469 1104//1469
+f 1112//1470 659//1470 1104//1470 1111//1470
+f 1109//1471 1108//1471 1097//1471
+f 1104//1472 662//1472 1108//1472
+f 1113//1473 1114//1473 1115//1473 1116//1473
+f 1114//1474 1084//1474 1115//1474
+f 1117//1475 1118//1475 667//1475 666//1475 1119//1475
+f 1120//1476 1121//1476 667//1476 1114//1476 1113//1476
+f 667//1477 1118//1477 1122//1477
+f 1114//1478 1122//1478 1084//1478
+f 1123//1479 1124//1479 1125//1479 1126//1479 1127//1479
+f 1128//1480 1129//1480 1130//1480 1131//1480
+f 1132//1481 1128//1481 1131//1481 1133//1481
+f 1134//1482 1125//1482 1128//1482 1132//1482
+f 1129//1483 1128//1483 1124//1483
+f 1124//1484 1128//1484 1125//1484
+f 1135//1485 1102//1485 1136//1485 1137//1485
+f 1138//1486 1139//1486 671//1486 1140//1486 1141//1486
+f 1142//1487 1100//1487 671//1487 670//1487
+f 1143//1488 1144//1488 1145//1488 1146//1488
+f 1147//1489 1143//1489 1146//1489
+f 1147//1490 675//1491 674//1492
+f 703//1493 702//1493 1148//1493 1149//1493 1150//1493 1151//1493
+f 679//1494 1148//1494 1152//1494
+f 679//1495 1152//1495 1153//1495
+f 686//1496 685//1496 1154//1496
+f 1155//1497 1156//1497 1157//1497 1158//1497
+f 1159//1498 1160//1498 1155//1498 1158//1498 1161//1498
+f 1162//1499 1163//1499 1164//1499 1165//1499
+f 1166//1500 1156//1500 1155//1500 1160//1500
+f 1162//1501 1167//1501 1168//1501
+f 1169//1502 1168//1502 1170//1502 1171//1502
+f 1168//1503 1160//1503 1162//1503
+f 1172//1504 1173//1504 694//1504 1174//1504
+f 1175//1505 1171//1505 1170//1505 1173//1505 1176//1505
+f 1173//1506 1170//1506 694//1506
+f 1170//1507 1177//1507 694//1507
+f 1178//1508 1179//1508 1177//1508 1167//1508
+f 697//1509 1180//1509 1181//1509 695//1509
+f 1182//1510 1180//1510 1183//1510 1184//1510
+f 700//1511 699//1511 697//1511 696//1511
+f 697//1512 699//1512 1183//1512
+f 1185//1513 707//1513 709//1513 711//1513
+f 681//1514 679//1514 1186//1514
+f 1187//1515 1186//1515 1188//1515
+f 1188//1516 1153//1516 1152//1516
+f 1186//1517 1153//1517 1188//1517
+f 1189//1518 714//1518 1190//1518 1191//1518
+f 1192//1519 714//1519 713//1519 1193//1519
+f 1194//1520 1167//1520 1195//1520
+f 1195//1521 1167//1521 1162//1521 1196//1521
+f 1197//1522 1198//1522 1167//1522 1194//1522
+f 1199//1523 1200//1523 1201//1523
+f 1202//1524 1200//1524 1203//1524
+f 1200//1525 1204//1525 1205//1525 1203//1525
+f 1206//1526 1207//1526 1208//1526
+f 1207//1527 1209//1527 720//1527
+f 1210//1528 1211//1528 1206//1528
+f 1212//1529 1192//1529 1193//1529 1213//1529
+f 1191//1530 1190//1530 1214//1530
+f 728//1531 734//1531 733//1531 729//1531
+f 740//1532 1215//1532 728//1532
+f 734//1533 1215//1533 1216//1533
+f 1217//1534 1216//1534 1215//1534
+f 1218//1535 743//1535 742//1535
+f 1210//1536 1208//1536 1218//1536
+f 1210//1537 1218//1537 742//1537
+f 1219//1538 1220//1538 1221//1538
+f 1222//1539 1223//1539 1224//1539 746//1539 745//1539
+f 1225//1540 1221//1540 1220//1540 1226//1540
+f 1227//1541 1221//1541 1228//1541 1229//1541
+f 1217//1542 1230//1542 1231//1542 755//1542
+f 1232//1543 1233//1543 1234//1543
+f 1235//1544 1236//1544 1237//1544 1238//1544
+f 1237//1545 1236//1545 1239//1545 1240//1545
+f 1241//1546 1234//1546 1233//1546 1242//1546
+f 758//1547 1243//1547 1241//1547
+f 1243//1548 1244//1548 1245//1548
+f 1239//1549 1246//1549 1240//1549
+f 1244//1550 1239//1550 1236//1550
+f 1247//1551 1248//1551 1249//1551
+f 1250//1552 1251//1552 1252//1552
+f 1251//1553 1253//1553 1254//1553 1252//1553
+f 1255//1554 1250//1554 1252//1554 1256//1554
+f 1255//1555 1256//1555 1257//1555 1258//1555
+f 1256//1556 1252//1556 1254//1556
+f 1259//1557 1260//1557 1261//1557
+f 768//1558 1259//1558 1261//1558 769//1558
+f 761//1559 1261//1559 1260//1559 762//1559
+f 1262//1560 769//1560 1263//1560 1264//1560
+f 1264//1561 1263//1561 771//1561 773//1561
+f 1263//1562 761//1562 1265//1562
+f 1263//1563 1266//1563 771//1563
+f 1267//1564 1268//1564 1269//1564
+f 1270//1565 1271//1565 1272//1565
+f 1273//1566 1274//1566 1275//1566
+f 1274//1567 1276//1567 1277//1567
+f 1278//1568 1279//1568 1280//1568 774//1568 776//1568
+f 1281//1569 1280//1569 1282//1569 1283//1569
+f 1284//1570 774//1570 1276//1570 1285//1570
+f 1286//1571 1287//1571 1288//1571 1289//1571
+f 1290//1572 1291//1572 1292//1572
+f 1293//1573 1289//1573 1288//1573 1294//1573
+f 1295//1574 1296//1574 1297//1574 1298//1574
+f 1296//1575 1299//1575 1297//1575
+f 796//1576 1296//1576 1295//1576 797//1576
+f 1254//1577 1291//1577 1300//1577
+f 1301//1578 778//1578 782//1578
+f 1302//1579 782//1579 781//1579 1303//1579
+f 1265//1580 1302//1580 785//1580
+f 1304//1581 1305//1581 1306//1581 1307//1581
+f 1308//1582 1269//1582 1304//1582
+f 1267//1583 1309//1583 1268//1583
+f 1310//1584 1307//1584 1311//1584
+f 1312//1585 1313//1585 1307//1585 1310//1585
+f 1314//1586 1267//1586 1269//1586
+f 1315//1587 1267//1587 1314//1587
+f 1316//1588 1314//1588 1313//1588
+f 1313//1589 1308//1589 1307//1589
+f 1296//1590 1317//1590 1299//1590
+f 1318//1591 1319//1591 1320//1591
+f 799//1592 1319//1592 1321//1592 800//1592
+f 1319//1593 799//1593 1320//1593
+f 1322//1594 1323//1594 1324//1594
+f 1324//1595 803//1595 1325//1595 1326//1595
+f 1327//1596 1328//1596 1324//1596 1323//1596 1329//1596
+f 1324//1597 1328//1597 1330//1597
+f 1331//1598 1332//1598 1333//1598
+f 1334//1599 1335//1599 1333//1599
+f 1336//1600 1331//1600 1333//1600 1337//1600 1338//1600
+f 1333//1601 1339//1601 1337//1601
+f 1340//1602 1341//1602 1342//1602 1343//1602
+f 1341//1603 1344//1603 1345//1603 1346//1603
+f 1347//1604 1328//1604 1327//1604 1348//1604
+f 1349//1605 1328//1605 1347//1605
+f 1330//1606 1328//1606 1349//1606
+f 1330//1607 1349//1607 1350//1607
+f 1351//1608 1352//1608 1350//1608
+f 1353//1609 801//1609 803//1609 1330//1609 1354//1609
+f 1355//1610 1356//1610 1357//1610 1358//1610
+f 1356//1611 1359//1611 1360//1611 1357//1611
+f 1361//1612 1357//1612 1360//1612
+f 1362//1613 1363//1613 1364//1613
+f 1343//1614 1365//1614 1340//1614
+f 1366//1615 1367//1615 1368//1615
+f 1341//1616 1369//1616 1344//1616
+f 1370//1617 1371//1617 1369//1617
+f 1370//1618 1366//1618 1371//1618
+f 1372//1619 1373//1619 1374//1619
+f 1375//1620 1376//1620 1372//1620 1374//1620 1377//1620
+f 1372//1621 1378//1621 1373//1621
+f 1379//1622 1378//1622 1372//1622 1376//1622 1380//1622 1381//1622
+f 1382//1623 1383//1623 1384//1623 970//1623 1385//1623
+f 1385//1624 970//1624 805//1624 804//1624
+f 1386//1625 1387//1625 1384//1625 1388//1625
+f 1389//1626 1390//1626 807//1626
+f 1390//1627 1391//1627 812//1627
+f 1390//1628 1389//1628 1392//1628
+f 1389//1629 1393//1629 1392//1629
+f 1394//1630 1395//1630 816//1630 1396//1630 1397//1630
+f 1398//1631 816//1631 1399//1631
+f 1393//1632 1400//1632 1401//1632
+f 1393//1633 807//1633 1400//1633
+f 1392//1634 1393//1634 1402//1634
+f 1401//1635 1403//1635 1404//1635
+f 1391//1636 1402//1636 1401//1636
+f 1405//1637 1406//1637 1407//1637 1408//1637 1398//1637 1409//1637
+f 1410//1638 1411//1638 1412//1638 1413//1638 1414//1638
+f 1415//1639 1416//1639 1409//1639 1398//1639
+f 1399//1640 1415//1640 1398//1640
+f 1415//1641 1395//1641 1410//1641
+f 1417//1642 1416//1642 1415//1642 1410//1642 1414//1642
+f 828//1643 1418//1643 823//1643
+f 1419//1644 1420//1644 1418//1644
+f 831//1645 830//1645 1420//1645
+f 1421//1646 819//1646 1422//1646
+f 1423//1647 820//1647 819//1647
+f 1424//1648 1425//1648 1426//1648
+f 1421//1649 1427//1649 819//1649
+f 1427//1650 1423//1650 819//1650
+f 1423//1651 1428//1651 820//1651
+f 1429//1652 1421//1652 1430//1652
+f 1425//1653 1427//1653 1429//1653
+f 1419//1654 828//1654 827//1654 1431//1654
+f 1419//1655 1431//1655 1432//1655 835//1655
+f 1433//1656 831//1656 835//1656 834//1656 1434//1656
+f 831//1657 1420//1657 835//1657
+f 1435//1658 1436//1658 1437//1658
+f 1438//1659 1439//1659 1440//1659 839//1659
+f 1441//1660 1442//1660 1443//1660 1444//1660
+f 1445//1661 1446//1661 845//1661 844//1661
+f 1447//1662 856//1662 1448//1662
+f 856//1663 1447//1663 857//1663
+f 1449//1664 1450//1664 1447//1664 853//1664 852//1664
+f 1451//1665 1452//1665 1453//1665 1454//1665
+f 1452//1666 1455//1666 1453//1666
+f 1456//1667 862//1667 861//1667 1453//1667 1455//1667
+f 1457//1668 1458//1668 1459//1668
+f 1460//1669 1461//1669 867//1669
+f 866//1670 1460//1670 867//1670
+f 1462//1671 868//1671 1463//1671
+f 1460//1672 1463//1672 1461//1672
+f 1462//1673 1463//1673 1460//1673
+f 1464//1674 1465//1674 1466//1674
+f 869//1675 871//1675 1466//1675 1465//1675 1467//1675
+f 1468//1676 1469//1676 871//1676 870//1676 1470//1676
+f 1469//1677 1468//1677 878//1677 877//1677
+f 1471//1678 880//1678 1472//1678
+f 871//1679 1473//1679 1466//1679
+f 1473//1680 1472//1680 872//1680
+f 1471//1681 1473//1681 1469//1681
+f 1471//1682 1472//1682 1473//1682
+f 1474//1683 1475//1683 1472//1683 1476//1683
+f 1476//1684 1472//1684 880//1684 1477//1684
+f 1478//1685 1479//1685 1480//1685 1481//1685
+f 1482//1686 881//1686 1483//1686
+f 1484//1687 1482//1687 1483//1687
+f 1485//1688 882//1688 1482//1688
+f 1486//1689 1482//1689 1484//1689
+f 1486//1690 1485//1690 1482//1690
+f 882//1691 1487//1691 1488//1691 1489//1691
+f 1490//1692 1491//1692 1487//1692
+f 1487//1693 882//1693 1485//1693
+f 1490//1694 1485//1694 1486//1694
+f 930//1695 1492//1695 1493//1695 931//1695
+f 1492//1696 930//1696 1494//1696
+f 887//1697 1478//1697 1495//1697 885//1697
+f 1496//1698 1479//1698 1478//1698
+f 1497//1699 1498//1699 1499//1699
+f 1500//1700 1501//1700 1499//1700 1498//1700
+f 1502//1701 1503//1701 1499//1701 1501//1701
+f 1499//1702 1496//1702 1497//1702
+f 1504//1703 1479//1703 1503//1703 1505//1703
+f 1506//1704 1503//1704 1502//1704
+f 1496//1705 1503//1705 1479//1705
+f 890//1706 1507//1706 1508//1706 888//1706
+f 1509//1707 1510//1707 1511//1707 1512//1707
+f 1513//1708 1507//1708 1510//1708 1509//1708
+f 1514//1709 894//1709 893//1709
+f 1515//1710 1516//1710 1517//1710 1518//1710 1519//1710
+f 1520//1711 1521//1711 1522//1711 1517//1711
+f 1516//1712 1523//1712 1520//1712
+f 1243//1713 758//1713 1524//1713
+f 1525//1714 1526//1714 1527//1714
+f 1528//1715 1529//1715 1530//1715 1531//1715
+f 1530//1716 1529//1716 1532//1716
+f 1533//1717 1534//1717 1535//1717 1536//1717
+f 1536//1718 1535//1718 1537//1718
+f 1538//1719 1536//1719 1537//1719
+f 1539//1720 1540//1720 1541//1720 893//1720 1542//1720
+f 1543//1721 1544//1721 1545//1721 1546//1721
+f 1541//1722 1514//1722 893//1722
+f 1547//1723 1548//1723 1549//1723
+f 1549//1724 1514//1724 1541//1724
+f 1550//1725 895//1725 894//1725 1548//1725 1551//1725
+f 1552//1726 898//1726 897//1726 1553//1726
+f 902//1727 1554//1727 1555//1727 903//1727
+f 1555//1728 1556//1728 1557//1728
+f 1556//1729 1558//1729 1559//1729
+f 1560//1730 1557//1730 1556//1730
+f 1560//1731 1556//1731 906//1731
+f 1561//1732 1560//1732 1562//1732
+f 1557//1733 1560//1733 1563//1733
+f 908//1734 910//1734 1564//1734 1565//1734 1566//1734
+f 1567//1735 1568//1735 910//1735
+f 1569//1736 1568//1736 1567//1736
+f 1570//1737 1535//1737 1534//1737 1571//1737
+f 1572//1738 1573//1738 1574//1738
+f 1572//1739 1575//1739 1538//1739 1573//1739
+f 1576//1740 1577//1740 1578//1740 1579//1740
+f 1570//1741 1537//1741 1535//1741
+f 1580//1742 1577//1742 1581//1742
+f 1578//1743 1577//1743 1570//1743
+f 1580//1744 1537//1744 1570//1744
+f 1580//1745 1573//1745 1538//1745
+f 912//1746 911//1746 1582//1746
+f 897//1747 912//1747 1553//1747
+f 1583//1748 1584//1748 1585//1748 1586//1748
+f 1585//1749 1584//1749 1587//1749 1588//1749
+f 1589//1750 1590//1750 1591//1750 922//1750
+f 1589//1751 1587//1751 1584//1751
+f 1587//1752 1589//1752 1592//1752
+f 1569//1753 1564//1753 1568//1753
+f 921//1754 1593//1754 1594//1754 922//1754
+f 1592//1755 915//1755 1587//1755
+f 1595//1756 1596//1756 1597//1756 1598//1756
+f 1599//1757 1600//1757 1601//1757 1602//1757
+f 1603//1758 1604//1758 1605//1758
+f 1606//1759 1607//1759 1608//1759 1599//1759
+f 1609//1760 1600//1760 1608//1760
+f 1608//1761 1603//1761 1610//1761
+f 1484//1762 1483//1762 927//1762
+f 1484//1763 927//1763 926//1763
+f 1611//1764 1490//1764 926//1764 925//1764
+f 1484//1765 926//1765 1490//1765
+f 1612//1766 1613//1766 1614//1766
+f 1615//1767 1616//1767 1617//1767 1494//1767
+f 1615//1768 1494//1768 930//1768
+f 1618//1769 1619//1769 1620//1769 1621//1769
+f 1622//1770 1623//1770 1624//1770
+f 1625//1771 1626//1771 1627//1771
+f 1628//1772 1629//1772 1619//1772 1618//1772
+f 1629//1773 1628//1773 1623//1773 1622//1773
+f 1614//1774 1630//1774 1612//1774
+f 1619//1775 1627//1775 1626//1775 1620//1775
+f 1614//1776 1627//1776 1619//1776
+f 1631//1777 1612//1777 1632//1777
+f 1633//1778 1634//1778 1622//1778 1624//1778
+f 1632//1779 1612//1779 1630//1779 1635//1779
+f 1634//1780 1635//1780 1630//1780 1622//1780
+f 1636//1781 1637//1781 933//1781 1638//1781
+f 934//1782 1637//1782 1639//1782
+f 1640//1783 597//1783 596//1783
+f 967//1784 606//1784 605//1784
+f 966//1785 607//1785 606//1785
+f 616//1786 972//1786 971//1786 617//1786
+f 978//1787 980//1787 981//1787
+f 990//1788 1641//1788 991//1788
+f 623//1789 620//1789 619//1789
+f 1642//1790 1643//1790 1644//1790
+f 999//1791 998//1791 1645//1791
+f 1646//1792 1647//1792 1005//1792
+f 1006//1793 1005//1793 1647//1793
+f 1648//1794 1649//1794 1650//1794
+f 1651//1795 1011//1795 1010//1795
+f 1652//1796 1039//1796 1038//1796 1653//1796 1654//1796
+f 1036//1797 1655//1797 1656//1797
+f 1394//1798 1657//1798 1395//1798
+f 1658//1799 1659//1799 1042//1799
+f 1659//1800 1660//1800 1042//1800
+f 1042//1801 1041//1801 1661//1801 1658//1801
+f 1662//1802 1663//1802 1664//1802 1665//1802
+f 1666//1803 634//1803 633//1803
+f 632//1804 1049//1804 1052//1804 630//1804
+f 1057//1805 1056//1805 1667//1805
+f 1068//1806 638//1806 637//1806 1668//1806
+f 646//1807 645//1807 1078//1807
+f 1669//1808 1118//1808 1117//1808
+f 1092//1809 1670//1809 1093//1809
+f 1092//1810 647//1810 650//1810 1670//1810
+f 1671//1811 652//1811 651//1811
+f 1112//1812 660//1812 659//1812
+f 659//1813 658//1813 1105//1813
+f 1672//1814 662//1814 661//1814
+f 1673//1815 1116//1815 1115//1815 1674//1815 1675//1815
+f 1129//1816 1676//1816 1130//1816
+f 1126//1817 1125//1817 1134//1817
+f 1139//1818 672//1818 671//1818
+f 673//1819 1677//1819 674//1819
+f 1145//1820 1678//1820 1146//1820
+f 678//1821 1679//1821 1148//1821 679//1821
+f 1680//1822 687//1822 686//1822
+f 1174//1823 694//1823 693//1823
+f 1184//1824 1183//1824 699//1824 698//1824
+f 1681//1825 706//1825 705//1825
+f 708//1826 707//1826 1185//1826
+f 682//1827 681//1827 1682//1827
+f 1683//1828 1684//1828 1685//1828
+f 1686//1829 1187//1829 1687//1829 1688//1829
+f 1682//1830 681//1830 1684//1830 1683//1830
+f 1189//1831 715//1831 714//1831
+f 1689//1832 1200//1832 1202//1832 1690//1832
+f 721//1833 720//1833 727//1833
+f 1691//1834 743//1834 719//1834 725//1834 1692//1834
+f 742//1835 741//1835 1693//1835
+f 1694//1836 1204//1836 1695//1836
+f 1696//1837 1697//1837 718//1837 717//1837 1698//1837
+f 1205//1838 1204//1838 1694//1838
+f 737//1839 736//1839 754//1839
+f 738//1840 740//1840 728//1840 735//1840 1699//1840 1700//1840
+f 743//1841 1691//1841 744//1841
+f 1223//1842 1701//1842 1224//1842
+f 1231//1843 756//1843 755//1843
+f 758//1844 1702//1844 759//1844
+f 1246//1845 1239//1845 1703//1845
+f 1262//1846 770//1846 769//1846
+f 771//1847 1704//1847 772//1847
+f 1284//1848 775//1848 774//1848
+f 1705//1849 1706//1849 1707//1849
+f 783//1850 782//1850 778//1850 777//1850
+f 1704//1851 771//1851 1708//1851 1709//1851
+f 1710//1852 1268//1852 1711//1852 1712//1852
+f 1713//1853 1714//1853 1711//1853 1268//1853 1309//1853
+f 1713//1854 1309//1854 1715//1854
+f 1313//1855 1716//1855 1717//1855
+f 1321//1856 1319//1856 1318//1856 1718//1856 1719//1856
+f 1720//1857 1718//1857 1318//1857
+f 1326//1858 1322//1858 1324//1858
+f 1325//1859 803//1859 802//1859
+f 1721//1860 1335//1860 1334//1860 1722//1860 1723//1860
+f 1721//1861 1724//1861 1335//1861
+f 1725//1862 1722//1862 1334//1862
+f 1348//1863 1726//1863 1347//1863
+f 1347//1864 1726//1864 1727//1864
+f 1728//1865 1358//1865 1357//1865
+f 1367//1866 1366//1866 1729//1866
+f 1730//1867 1387//1867 1731//1867 1732//1867
+f 1733//1868 1734//1868 1735//1868
+f 807//1869 810//1869 1736//1869
+f 811//1870 809//1870 808//1870
+f 1404//1871 1737//1871 815//1871 812//1871
+f 818//1872 1396//1872 816//1872
+f 1422//1873 819//1873 822//1873 1738//1873
+f 1400//1874 1739//1874 1740//1874
+f 1400//1875 807//1875 1736//1875 1741//1875 1739//1875
+f 1742//1876 1401//1876 1400//1876 1740//1876
+f 1743//1877 1403//1877 1401//1877 1742//1877
+f 1744//1878 1403//1878 1743//1878
+f 1737//1879 1404//1879 1403//1879 1744//1879
+f 1745//1880 1406//1880 1405//1880 1746//1880
+f 1412//1881 1747//1881 1748//1881 1749//1881 1413//1881
+f 826//1882 828//1882 823//1882 825//1882 1750//1882
+f 1751//1883 1752//1883 830//1883 829//1883 1753//1883
+f 832//1884 831//1884 1433//1884
+f 1754//1885 1755//1885 1756//1885
+f 1738//1886 1757//1886 1422//1886
+f 1758//1887 1428//1887 1759//1887
+f 1756//1888 1422//1888 1757//1888 1754//1888
+f 1760//1889 833//1889 820//1889 1428//1889 1758//1889
+f 1761//1890 1430//1890 1756//1890 1755//1890 1762//1890
+f 1430//1891 1761//1891 1763//1891
+f 836//1892 835//1892 1432//1892
+f 1764//1893 842//1893 841//1893
+f 1765//1894 846//1894 845//1894 840//1894 843//1894
+f 1766//1895 1443//1895 848//1895 847//1895
+f 853//1896 1448//1896 1767//1896 851//1896
+f 858//1897 857//1897 1768//1897
+f 1448//1898 856//1898 855//1898 1767//1898
+f 1451//1899 1454//1899 1769//1899 1770//1899
+f 1771//1900 1458//1900 1772//1900 1773//1900 1774//1900
+f 1775//1901 1459//1901 1458//1901 1771//1901
+f 1776//1902 1777//1902 1459//1902 1775//1902
+f 1778//1903 1773//1903 1772//1903 1779//1903 1780//1903
+f 867//1904 1461//1904 868//1904
+f 1463//1905 868//1905 1461//1905
+f 1462//1906 866//1906 868//1906
+f 1477//1907 880//1907 879//1907
+f 1781//1908 1247//1908 1249//1908
+f 1483//1909 1782//1909 1783//1909
+f 1784//1910 927//1910 1483//1910 1783//1910 1785//1910
+f 1483//1911 881//1911 884//1911 1782//1911
+f 1784//1912 928//1912 927//1912
+f 882//1913 1489//1913 1786//1913 883//1913
+f 1787//1914 1491//1914 1788//1914 1789//1914 1790//1914
+f 1791//1915 1493//1915 1492//1915
+f 1792//1916 1498//1916 887//1916 886//1916
+f 1500//1917 1498//1917 1792//1917
+f 1793//1918 1794//1918 1523//1918 1795//1918 1796//1918
+f 1797//1919 1517//1919 1522//1919 1798//1919
+f 1799//1920 1524//1920 1800//1920
+f 1801//1921 1802//1921 1532//1921
+f 1803//1922 1533//1922 1536//1922
+f 1536//1923 1804//1923 1803//1923
+f 892//1924 1542//1924 893//1924
+f 1545//1925 1805//1925 1546//1925
+f 1806//1926 1551//1926 1548//1926 1807//1926
+f 1545//1927 1808//1927 1805//1927
+f 912//1928 897//1928 900//1928 913//1928
+f 1565//1929 1564//1929 1809//1929
+f 1570//1930 1571//1930 1810//1930
+f 1574//1931 1573//1931 1811//1931
+f 1811//1932 1573//1932 1812//1932 1813//1932
+f 1579//1933 1578//1933 1814//1933
+f 1815//1934 1581//1934 1816//1934
+f 1591//1935 923//1935 922//1935
+f 1817//1936 1818//1936 1819//1936
+f 920//1937 1819//1937 1818//1937 918//1937
+f 1820//1938 1821//1938 1822//1938 1823//1938
+f 1824//1939 916//1939 915//1939 1825//1939
+f 1600//1940 1826//1940 1827//1940 1601//1940
+f 1828//1941 1829//1941 1613//1941
+f 1830//1942 1494//1942 1617//1942 1831//1942
+f 936//1943 1638//1943 933//1943
+f 1832//1944 935//1944 934//1944
+f 1833//1945 1639//1945 1834//1945
+f 937//1946 941//1946 593//1946 592//1946
+f 937//1947 592//1947 938//1947
+f 939//1948 938//1948 1835//1948
+f 1835//1949 938//1949 592//1949 594//1949
+f 596//1950 1836//1950 1837//1950 1640//1950
+f 943//1951 947//1951 944//1951
+f 944//1952 946//1952 1838//1952 942//1952
+f 1838//1953 946//1953 1839//1953
+f 1839//1954 946//1954 948//1954
+f 1837//1955 1836//1955 599//1955 601//1955
+f 596//1956 595//1956 1836//1956
+f 595//1957 599//1957 1836//1957
+f 1840//1958 951//1958 950//1958 1841//1958
+f 951//1959 1842//1959 952//1959
+f 951//1960 1840//1960 1842//1960
+f 954//1961 1843//1961 955//1961
+f 961//1962 955//1962 1843//1962 1844//1962 1845//1962 1846//1962 1847//1962
+f 1848//1963 953//1963 955//1963 956//1963 959//1963
+f 955//1964 961//1964 956//1964
+f 603//1965 960//1965 961//1965
+f 962//1966 957//1966 963//1966
+f 964//1967 960//1967 1849//1967
+f 960//1968 957//1968 956//1968
+f 1844//1969 1850//1969 961//1969 1847//1969 1851//1969
+f 1852//1970 604//1970 603//1970 961//1970 1850//1970
+f 1849//1971 960//1971 603//1971 602//1971
+f 965//1972 606//1972 967//1972
+f 605//1973 607//1973 968//1973
+f 968//1974 966//1974 965//1974
+f 1387//1975 1853//1975 1854//1975
+f 608//1976 1853//1976 1855//1976 609//1976
+f 1856//1977 806//1977 805//1977 608//1977 611//1977
+f 608//1978 969//1979 1853//1980
+f 969//1981 1854//1982 1853//1983
+f 613//1984 974//1984 973//1984 614//1984
+f 974//1985 617//1985 971//1985
+f 612//1986 974//1986 613//1986
+f 1857//1987 976//1987 975//1987
+f 978//1988 976//1988 1857//1988 979//1988
+f 1858//1989 988//1989 987//1989
+f 987//1990 1859//1990 1860//1990 1858//1990
+f 1007//1991 987//1991 986//1991
+f 1641//1992 1861//1992 991//1992
+f 1861//1993 1862//1993 1863//1993 991//1993
+f 1648//1994 1650//1994 1863//1994 1862//1994 1864//1994
+f 991//1995 1863//1995 994//1995
+f 1863//1996 992//1996 994//1996
+f 1644//1997 618//1997 621//1997 1642//1997
+f 996//1998 1644//1998 1643//1998 997//1998
+f 1865//1999 618//1999 1644//1999
+f 1865//2000 619//2001 618//2002
+f 996//2003 1865//2003 1644//2003
+f 1865//2004 1001//2005 619//2006
+f 1865//2007 996//2007 1001//2007
+f 1645//2008 998//2008 625//2008 624//2008
+f 1866//2009 1002//2009 996//2009 995//2009
+f 1002//2010 1866//2010 626//2010 625//2010
+f 982//2011 1001//2011 1000//2011
+f 996//2012 1002//2012 1001//2012
+f 629//2013 1867//2013 627//2013
+f 1868//2014 1646//2014 1005//2014 629//2014 628//2014
+f 1869//2015 1004//2015 1003//2015
+f 629//2016 986//2016 985//2016 1867//2016
+f 1859//2017 987//2017 1870//2017 1871//2017
+f 1869//2018 1871//2018 1870//2018 1004//2018
+f 1004//2019 1870//2019 1007//2019
+f 1004//2020 1007//2020 1005//2020
+f 629//2021 1007//2021 986//2021
+f 1007//2022 1870//2022 987//2022
+f 993//2023 992//2023 1872//2023
+f 1649//2024 1009//2024 1008//2024 1650//2024
+f 1872//2025 992//2025 1011//2025 1651//2025
+f 1008//2026 1863//2026 1650//2026
+f 1008//2027 1011//2027 992//2027
+f 1008//2028 992//2028 1863//2028
+f 1014//2029 1019//2029 1012//2029
+f 1873//2030 1016//2030 1015//2030
+f 1016//2031 1873//2031 1018//2031
+f 1038//2032 1044//2032 1874//2032 1653//2032
+f 1875//2033 1876//2033 1030//2033
+f 1025//2034 1024//2034 1877//2034 1878//2034
+f 1877//2035 1024//2035 1879//2035
+f 1030//2036 1021//2036 1020//2036 1875//2036
+f 1880//2037 1879//2037 1024//2037 1028//2037 1027//2037
+f 1028//2038 1024//2038 1021//2038
+f 1881//2039 1029//2039 1028//2039 1030//2039 1882//2039
+f 1032//2040 1883//2040 1033//2040
+f 1036//2041 1031//2041 1035//2041 1655//2041
+f 1883//2042 1032//2042 1036//2042 1656//2042
+f 1410//2043 1395//2043 1657//2043 1884//2043
+f 1884//2044 1411//2044 1410//2044
+f 1885//2045 1043//2045 1042//2045 1660//2045 1886//2045
+f 1043//2046 1885//2046 1664//2046 1663//2046
+f 1038//2047 1037//2047 1045//2047
+f 1043//2048 1045//2048 1037//2048
+f 1887//2049 1043//2049 1663//2049
+f 1043//2050 1887//2050 1045//2050
+f 1887//2051 1044//2051 1045//2051
+f 1874//2052 1044//2052 1888//2052 1889//2052
+f 1890//2053 1891//2053 1892//2053 1663//2053 1893//2053
+f 1663//2054 1662//2054 1893//2054
+f 1888//2055 1044//2055 1892//2055 1891//2055
+f 1887//2056 1892//2056 1044//2056
+f 1887//2057 1663//2057 1892//2057
+f 1894//2058 1882//2058 1030//2058 1876//2058
+f 1055//2059 1051//2059 1050//2059
+f 1667//2060 1056//2060 634//2060 1666//2060
+f 635//2061 634//2061 1061//2061 1062//2061
+f 1059//2062 1050//2062 1049//2062
+f 1059//2063 1056//2063 1050//2063
+f 1895//2064 1063//2064 1065//2064
+f 1895//2065 1065//2065 1066//2065
+f 1067//2066 1065//2066 1064//2066
+f 1071//2067 1896//2067 641//2067 640//2067
+f 1896//2068 1071//2068 1072//2068 1897//2068
+f 638//2069 1070//2069 1071//2069
+f 1075//2070 1074//2070 1073//2070 1076//2070
+f 643//2071 1074//2071 645//2071
+f 1074//2072 1075//2072 645//2072
+f 647//2073 1095//2073 1898//2073 648//2073
+f 1899//2074 1900//2074 1901//2074 1902//2074
+f 1095//2075 1899//2075 1902//2075 1898//2075
+f 1095//2076 1094//2076 1899//2076
+f 1903//2077 1900//2077 1899//2077 1094//2077 1107//2077
+f 1106//2078 1097//2078 657//2078 1079//2078 1904//2078
+f 1083//2079 1905//2079 1080//2079
+f 1115//2080 1080//2080 1905//2080 1674//2080
+f 1115//2081 1084//2081 1080//2081
+f 1906//2082 1082//2082 1081//2082
+f 1906//2083 1081//2083 1118//2083 1669//2083
+f 1122//2084 1081//2084 1084//2084
+f 1081//2085 1122//2085 1118//2085
+f 1907//2086 1087//2086 1086//2086 652//2086 1671//2086
+f 1102//2087 1086//2087 1085//2087 1136//2087
+f 1092//2088 1095//2088 647//2088
+f 652//2089 1100//2089 1109//2089
+f 1091//2090 1095//2090 1092//2090
+f 1097//2091 1094//2091 1091//2091
+f 1098//2092 1099//2092 652//2092
+f 1102//2093 1098//2093 1086//2093
+f 655//2094 657//2094 662//2094 1672//2094
+f 652//2095 1109//2095 1908//2095 665//2095
+f 1110//2096 1109//2096 1100//2096 1142//2096
+f 1104//2097 1103//2097 663//2097 662//2097
+f 1099//2098 671//2098 1100//2098
+f 1108//2099 662//2099 657//2099
+f 1109//2100 1097//2100 1096//2100 1908//2100
+f 1104//2101 1108//2101 1109//2101
+f 668//2102 667//2102 1121//2102
+f 667//2103 1122//2103 1114//2103
+f 1129//2104 1124//2104 1123//2104 1676//2104
+f 1140//2105 671//2105 1099//2105
+f 1135//2106 1909//2106 1101//2106 1102//2106
+f 1910//2107 1101//2107 1909//2107 1911//2107
+f 1141//2108 1140//2108 1101//2108 1910//2108
+f 1101//2109 1140//2109 1099//2109
+f 1147//2110 1146//2110 1678//2110 1912//2110
+f 675//2111 1147//2111 1912//2111 676//2111
+f 1147//2112 674//2113 1143//2114
+f 1144//2115 1143//2115 674//2115 1677//2115
+f 1679//2116 1149//2116 1148//2116
+f 1148//2117 702//2117 1152//2117
+f 689//2118 688//2118 685//2118 684//2118
+f 685//2119 688//2119 1154//2119
+f 1680//2120 686//2120 1154//2120 1913//2120
+f 1913//2121 1154//2121 688//2121 691//2121
+f 1159//2122 1914//2122 1160//2122
+f 1162//2123 1160//2123 1914//2123 1163//2123
+f 1160//2124 1168//2124 1169//2124 1166//2124
+f 1168//2125 1167//2125 1177//2125
+f 1172//2126 1176//2126 1173//2126
+f 1915//2127 692//2127 694//2127 1177//2127 1179//2127
+f 1177//2128 1170//2128 1168//2128
+f 1182//2129 1181//2129 1180//2129
+f 1180//2130 697//2130 1183//2130
+f 709//2131 1916//2131 1917//2131 710//2131
+f 1681//2132 1917//2132 1916//2132 706//2132
+f 706//2133 1916//2133 707//2133
+f 709//2134 707//2134 1916//2134
+f 1685//2135 1684//2135 1187//2135 1686//2135
+f 701//2136 1918//2136 1188//2136 702//2136
+f 1188//2137 1918//2137 1687//2137 1187//2137
+f 1186//2138 1684//2138 681//2138
+f 1684//2139 1186//2139 1187//2139
+f 1153//2140 1186//2140 679//2140
+f 702//2141 1188//2141 1152//2141
+f 1190//2142 714//2142 1192//2142
+f 1196//2143 1162//2143 1165//2143
+f 1167//2144 1198//2144 1178//2144
+f 1689//2145 1919//2145 1201//2145 1200//2145
+f 716//2146 718//2146 1201//2146 1919//2146 1920//2146
+f 1697//2147 1201//2147 718//2147
+f 1697//2148 1199//2148 1201//2148
+f 1199//2149 1204//2149 1200//2149
+f 1207//2150 720//2150 719//2150
+f 1208//2151 719//2151 743//2151
+f 719//2152 1208//2152 1207//2152
+f 1208//2153 1210//2153 1206//2153
+f 1921//2154 726//2154 720//2154 1209//2154 1922//2154
+f 1922//2155 1209//2155 1211//2155 1923//2155
+f 1693//2156 1923//2156 1211//2156 742//2156
+f 1210//2157 742//2157 1211//2157
+f 1207//2158 1206//2158 1209//2158
+f 1206//2159 1211//2159 1209//2159
+f 1214//2160 1190//2160 1192//2160 1212//2160
+f 1227//2161 1219//2161 1221//2161
+f 1924//2162 1695//2162 1204//2162 1697//2162 1696//2162
+f 1697//2163 1204//2163 1199//2163
+f 1216//2164 736//2164 734//2164
+f 1217//2165 736//2165 1216//2165
+f 734//2166 728//2166 1215//2166
+f 1218//2167 1208//2167 743//2167
+f 1925//2168 749//2168 748//2168 1224//2168 1701//2168
+f 750//2169 1225//2169 1226//2169 751//2169
+f 1224//2170 748//2170 746//2170
+f 1225//2171 750//2171 1228//2171
+f 1229//2172 1228//2172 750//2172 752//2172
+f 1221//2173 1225//2173 1228//2173
+f 740//2174 739//2174 1926//2174
+f 1230//2175 1217//2175 740//2175 1926//2175
+f 740//2176 1217//2176 1215//2176
+f 1217//2177 755//2177 736//2177
+f 1235//2178 1238//2178 1927//2178 1928//2178
+f 1234//2179 1235//2179 1928//2179 1232//2179
+f 758//2180 1241//2180 1242//2180 1702//2180
+f 1235//2181 1234//2181 1236//2181
+f 1243//2182 1524//2182 1239//2182
+f 1236//2183 1234//2183 1245//2183
+f 1245//2184 1234//2184 1241//2184
+f 1245//2185 1244//2185 1236//2185
+f 1243//2186 1239//2186 1244//2186
+f 1241//2187 1243//2187 1245//2187
+f 1703//2188 1239//2188 1524//2188 1799//2188
+f 1929//2189 1930//2189 1287//2189 1286//2189
+f 1257//2190 1256//2190 1287//2190 1930//2190
+f 1300//2191 1256//2191 1254//2191
+f 1300//2192 1287//2192 1256//2192
+f 765//2193 1931//2193 1932//2193 761//2193
+f 1932//2194 1931//2194 1706//2194 1705//2194
+f 1932//2195 1265//2195 761//2195
+f 1261//2196 1263//2196 769//2196
+f 1263//2197 1261//2197 761//2197
+f 1266//2198 1263//2198 1265//2198
+f 1269//2199 1268//2199 1710//2199 1933//2199
+f 1285//2200 1276//2200 1274//2200 1273//2200
+f 1270//2201 1272//2201 1281//2201 1934//2201 1935//2201
+f 1274//2202 1272//2202 1271//2202 1275//2202
+f 1272//2203 1274//2203 1281//2203
+f 1274//2204 1277//2204 1281//2204
+f 1291//2205 1936//2205 1292//2205
+f 1282//2206 1280//2206 1279//2206
+f 1283//2207 1934//2207 1281//2207
+f 1277//2208 774//2208 1280//2208
+f 1277//2209 1276//2209 774//2209
+f 1291//2210 1254//2210 1253//2210 1936//2210
+f 1281//2211 1277//2211 1280//2211
+f 1294//2212 1288//2212 1291//2212 1290//2212 1937//2212
+f 1300//2213 1288//2213 1287//2213
+f 1300//2214 1291//2214 1288//2214
+f 778//2215 1705//2215 1707//2215 779//2215
+f 1301//2216 782//2216 1302//2216
+f 778//2217 1301//2217 1705//2217
+f 1302//2218 1932//2218 1705//2218
+f 1302//2219 1265//2219 1932//2219
+f 1705//2220 1301//2220 1302//2220
+f 785//2221 784//2221 1708//2221 771//2221
+f 771//2222 1266//2222 785//2222
+f 786//2223 785//2223 1302//2223 1303//2223
+f 785//2224 1266//2224 1265//2224
+f 789//2225 788//2225 1269//2225 1938//2225 1939//2225
+f 1311//2226 1307//2226 1306//2226
+f 1304//2227 788//2227 793//2227
+f 1304//2228 1269//2228 788//2228
+f 1940//2229 1305//2229 1304//2229 793//2229 792//2229
+f 1307//2230 1308//2230 1304//2230
+f 1316//2231 1941//2231 1715//2231 1309//2231
+f 1941//2232 1316//2232 1313//2232 1717//2232
+f 1716//2233 1313//2233 1312//2233
+f 1269//2234 1933//2234 1938//2234
+f 1315//2235 1309//2235 1267//2235
+f 1316//2236 1309//2236 1315//2236
+f 1316//2237 1315//2237 1314//2237
+f 1308//2238 1314//2238 1269//2238
+f 1313//2239 1314//2239 1308//2239
+f 1317//2240 1296//2240 796//2240 795//2240
+f 1320//2241 1942//2241 1720//2241 1318//2241
+f 1943//2242 1942//2242 1320//2242 799//2242 798//2242
+f 1330//2243 803//2243 1324//2243
+f 1338//2244 1337//2244 1944//2244
+f 1945//2245 1339//2245 1946//2245
+f 1724//2246 1946//2246 1339//2246 1335//2246
+f 1944//2247 1337//2247 1339//2247 1945//2247
+f 1334//2248 1333//2248 1332//2248 1725//2248
+f 1335//2249 1339//2249 1333//2249
+f 1342//2250 1341//2250 1346//2250 1947//2250
+f 1344//2251 1948//2251 1345//2251
+f 1949//2252 1950//2252 1349//2252 1347//2252 1727//2252
+f 1951//2253 1351//2253 1350//2253 1349//2253 1950//2253
+f 1952//2254 1350//2254 1352//2254
+f 1354//2255 1330//2255 1350//2255 1952//2255
+f 1361//2256 1362//2256 1357//2256
+f 1953//2257 1954//2257 1364//2257
+f 1953//2258 1364//2258 1734//2258 1733//2258
+f 1363//2259 1734//2259 1364//2259
+f 1728//2260 1357//2260 1362//2260 1955//2260 1956//2260
+f 1955//2261 1362//2261 1364//2261 1954//2261 1957//2261
+f 1958//2262 1959//2262 1370//2262
+f 1370//2263 1340//2263 1365//2263 1958//2263
+f 1369//2264 1341//2264 1340//2264
+f 1370//2265 1369//2265 1340//2265
+f 1371//2266 1960//2266 1961//2266
+f 1962//2267 1960//2267 1371//2267 1366//2267 1368//2267
+f 1370//2268 1959//2268 1729//2268 1366//2268
+f 1948//2269 1344//2269 1371//2269 1961//2269
+f 1369//2270 1371//2270 1344//2270
+f 1963//2271 1964//2271 1965//2271
+f 1730//2272 1855//2272 1853//2272 1387//2272
+f 1386//2273 1731//2273 1387//2273
+f 1964//2274 1360//2274 1359//2274 1965//2274
+f 1964//2275 1361//2275 1360//2275
+f 1966//2276 1967//2276 1964//2276 1963//2276
+f 1735//2277 1734//2277 1964//2277 1967//2277
+f 1964//2278 1363//2278 1361//2278
+f 1363//2279 1964//2279 1734//2279
+f 1361//2280 1363//2280 1362//2280
+f 1968//2281 1388//2281 1384//2281 1969//2281
+f 1969//2282 1384//2282 1383//2282
+f 970//2283 1384//2283 969//2283
+f 1384//2284 1387//2284 1854//2284
+f 969//2285 1384//2285 1854//2285
+f 1390//2286 808//2286 807//2286
+f 1390//2287 812//2287 808//2287
+f 1389//2288 807//2288 1393//2288
+f 1392//2289 1391//2289 1390//2289
+f 1402//2290 1391//2290 1392//2290
+f 1404//2291 812//2291 1391//2291
+f 816//2292 1398//2292 1408//2292 817//2292
+f 816//2293 1395//2293 1399//2293
+f 1402//2294 1393//2294 1401//2294
+f 1401//2295 1404//2295 1391//2295
+f 1415//2296 1399//2296 1395//2296
+f 823//2297 1970//2297 1971//2297 824//2297
+f 1970//2298 830//2298 1752//2298 1971//2298
+f 1970//2299 823//2299 1418//2299
+f 828//2300 1419//2300 1418//2300
+f 1420//2301 830//2301 1970//2301
+f 1418//2302 1420//2302 1970//2302
+f 1421//2303 1422//2303 1756//2303
+f 1430//2304 1421//2304 1756//2304
+f 1972//2305 1759//2305 1428//2305 1425//2305 1424//2305
+f 1425//2306 1428//2306 1423//2306
+f 1973//2307 1426//2307 1425//2307 1430//2307 1763//2307
+f 1427//2308 1421//2308 1429//2308
+f 1425//2309 1423//2309 1427//2309
+f 1430//2310 1425//2310 1429//2310
+f 835//2311 1420//2311 1419//2311
+f 839//2312 1440//2312 837//2312
+f 1436//2313 1435//2313 1974//2313
+f 1437//2314 1436//2314 839//2314 838//2314
+f 839//2315 1436//2315 1438//2315
+f 1974//2316 1439//2316 1438//2316 1436//2316
+f 1975//2317 1976//2317 1442//2317
+f 1442//2318 1441//2318 1975//2318
+f 1446//2319 841//2319 840//2319
+f 1977//2320 1764//2320 841//2320 1446//2320 1445//2320
+f 845//2321 1446//2321 840//2321
+f 1978//2322 1444//2322 1443//2322 1766//2322
+f 848//2323 1442//2323 1976//2323 849//2323
+f 1442//2324 848//2324 1443//2324
+f 1447//2325 1448//2325 853//2325
+f 1768//2326 857//2326 1447//2326 1450//2326
+f 1454//2327 1453//2327 865//2327
+f 1453//2328 861//2328 865//2328
+f 865//2329 864//2329 1769//2329 1454//2329
+f 1457//2330 1772//2330 1458//2330
+f 1457//2331 1459//2331 1777//2331
+f 1780//2332 1779//2332 1777//2332 1776//2332
+f 1457//2333 1779//2333 1772//2333
+f 1457//2334 1777//2334 1779//2334
+f 1462//2335 1460//2335 866//2335
+f 1466//2336 872//2336 875//2336 1464//2336
+f 1466//2337 1473//2337 872//2337
+f 1469//2338 1473//2338 871//2338
+f 1471//2339 877//2339 880//2339
+f 877//2340 1471//2340 1469//2340
+f 1480//2341 1479//2341 1979//2341 1980//2341
+f 873//2342 872//2342 1472//2342 1475//2342
+f 1249//2343 1596//2343 1595//2343 1781//2343
+f 1249//2344 1526//2344 1596//2344
+f 881//2345 1482//2345 882//2345
+f 1488//2346 1487//2346 1491//2346 1787//2346
+f 1490//2347 1487//2347 1485//2347
+f 1492//2348 1494//2348 1830//2348 1791//2348
+f 1481//2349 1495//2349 1478//2349
+f 1497//2350 1478//2350 887//2350
+f 1498//2351 1497//2351 887//2351
+f 1497//2352 1496//2352 1478//2352
+f 1499//2353 1503//2353 1496//2353
+f 1479//2354 1504//2354 1979//2354
+f 1505//2355 1503//2355 1506//2355 1981//2355
+f 1510//2356 1507//2356 890//2356
+f 1508//2357 1507//2357 1513//2357 1982//2357
+f 1511//2358 1510//2358 890//2358 889//2358
+f 1518//2359 1517//2359 1797//2359
+f 1795//2360 1523//2360 1516//2360 1515//2360 1983//2360
+f 1794//2361 1984//2361 1521//2361 1520//2361 1523//2361
+f 1516//2362 1520//2362 1517//2362
+f 1800//2363 1524//2363 758//2363 757//2363
+f 1526//2364 1249//2364 1248//2364 1527//2364
+f 1802//2365 1985//2365 1530//2365 1532//2365
+f 1528//2366 1986//2366 1529//2366
+f 1531//2367 1530//2367 1985//2367
+f 1532//2368 1529//2368 1986//2368 1801//2368
+f 1536//2369 1538//2369 1575//2369 1804//2369
+f 1545//2370 1541//2370 1540//2370 1808//2370
+f 1987//2371 1807//2371 1548//2371
+f 1544//2372 1541//2372 1545//2372
+f 1547//2373 1988//2373 1987//2373 1548//2373
+f 1549//2374 894//2374 1514//2374
+f 1549//2375 1548//2375 894//2375
+f 1989//2376 1988//2376 1547//2376 1544//2376 1543//2376
+f 1541//2377 1544//2377 1549//2377
+f 1544//2378 1547//2378 1549//2378
+f 903//2379 1563//2379 1990//2379 1991//2379 901//2379
+f 1558//2380 1555//2380 1554//2380 1992//2380
+f 1992//2381 1993//2381 1558//2381
+f 1994//2382 1995//2382 1559//2382
+f 907//2383 906//2383 1559//2383 1995//2383
+f 1555//2384 1563//2384 903//2384
+f 1559//2385 1558//2385 1993//2385 1994//2385
+f 1562//2386 1560//2386 906//2386 905//2386
+f 1555//2387 1557//2387 1563//2387
+f 1555//2388 1558//2388 1556//2388
+f 1559//2389 906//2389 1556//2389
+f 1563//2390 1996//2390 1990//2390
+f 1996//2391 1563//2391 1560//2391 1561//2391
+f 909//2392 1997//2392 1567//2392 910//2392
+f 1819//2393 1567//2393 1997//2393 1817//2393
+f 1568//2394 1564//2394 910//2394
+f 1814//2395 1578//2395 1570//2395 1810//2395 1998//2395
+f 1812//2396 1573//2396 1581//2396 1815//2396
+f 1577//2397 1576//2397 1816//2397 1581//2397
+f 1570//2398 1577//2398 1580//2398
+f 1580//2399 1581//2399 1573//2399
+f 1537//2400 1580//2400 1538//2400
+f 1999//2401 1553//2401 912//2401 1582//2401
+f 1552//2402 1553//2402 1999//2402
+f 917//2403 1588//2403 1587//2403 915//2403
+f 1583//2404 1590//2404 1589//2404 1584//2404
+f 1594//2405 1589//2405 922//2405
+f 920//2406 919//2406 2000//2406
+f 920//2407 1567//2407 1819//2407
+f 2000//2408 2001//2408 1569//2408 920//2408
+f 920//2409 1569//2409 1567//2409
+f 1809//2410 1564//2410 1821//2410 1820//2410
+f 1569//2411 1821//2411 1564//2411
+f 1822//2412 1821//2412 1569//2412 2001//2412
+f 1594//2413 1593//2413 2002//2413
+f 2002//2414 2003//2414 1592//2414 1594//2414
+f 2003//2415 2004//2415 1825//2415 915//2415 1592//2415
+f 1594//2416 1592//2416 1589//2416
+f 1598//2417 1597//2417 2005//2417
+f 1526//2418 1597//2418 1596//2418
+f 2005//2419 1597//2419 1526//2419 1525//2419
+f 1602//2420 2006//2420 1599//2420
+f 1600//2421 1609//2421 2007//2421 1826//2421
+f 2006//2422 1606//2422 1599//2422
+f 1603//2423 2008//2423 1604//2423
+f 2009//2424 1610//2424 2010//2424 2011//2424
+f 1603//2425 1608//2425 1607//2425 2008//2425
+f 2010//2426 1610//2426 1603//2426 1605//2426
+f 1599//2427 1608//2427 1600//2427
+f 1608//2428 1610//2428 1609//2428
+f 2007//2429 1609//2429 2012//2429
+f 2012//2430 1609//2430 1610//2430 2009//2430
+f 1788//2431 1491//2431 1490//2431 1611//2431
+f 1613//2432 1612//2432 2013//2432 1828//2432
+f 1631//2433 2013//2433 1612//2433
+f 1484//2434 1490//2434 1486//2434
+f 1829//2435 1625//2435 1627//2435 1613//2435
+f 1616//2436 1615//2436 930//2436 929//2436
+f 1627//2437 1614//2437 1613//2437
+f 1619//2438 1629//2438 1614//2438
+f 1614//2439 1629//2439 1630//2439
+f 1629//2440 1622//2440 1630//2440
+f 1637//2441 934//2441 933//2441
+f 1639//2442 1833//2442 1832//2442 934//2442
+f 1834//2443 1639//2443 1637//2443 1636//2443
+f 1845//2444 2014//2444 1846//2444
+f 1846//2445 2014//2445 1851//2445 1847//2445
+f 1376//2446 1375//2446 2015//2446 1380//2446
+f 2015//2447 1381//2447 1380//2447
+f 1749//2448 2016//2448 1417//2448 1414//2448 1413//2448
+f 1746//2449 1405//2449 1409//2449 1416//2449 1417//2449 2016//2449 2017//2449 2018//2449 2019//2449
+f 2020//2450 2021//2450 1745//2450 1746//2450 2019//2450 2022//2450
+f 2023//2451 2017//2451 2016//2451 1749//2451 1748//2451
+f 1379//2452 1381//2452 2015//2452 1375//2452 1377//2452 2024//2452 2025//2452 2026//2452
+f 1851//2453 2014//2453 1845//2453 1844//2453
+s 1
+f 2004//2454 924//2454 923//2454 1591//2454 1590//2454 1583//2454 1586//2454 1824//2454 1825//2454
+f 1823//2455 1566//2455 1565//2455 1809//2455 1820//2455
+f 1816//2456 1576//2456 1579//2456 1814//2456 1998//2456 1813//2456 1812//2456 1815//2456
+f 1996//2457 1561//2457 1562//2457 905//2457 904//2457 1991//2457 1990//2457
+f 1988//2458 1989//2458 2027//2458 1806//2458 1807//2458 1987//2458
+f 1985//2459 1802//2459 1801//2459 1986//2459 1528//2459 1531//2459
+f 1804//2460 1575//2460 1572//2460 1574//2460 1811//2460 1813//2460 1998//2460 1810//2460 1571//2460 1534//2460 1533//2460 1803//2460
+f 1805//2461 1808//2461 1540//2461 1539//2461 2027//2461 1989//2461 1543//2461 1546//2461
+f 1798//2462 1522//2462 1521//2462 1984//2462 2028//2462
+f 899//2462 914//2462 913//2462 900//2462
+f 1512//2463 1511//2463 889//2463 888//2463 1508//2463 1982//2463
+f 895//2464 1550//2464 2027//2464 896//2464
+f 1793//2464 1796//2464 2028//2464
+f 1789//2465 1788//2465 1611//2465 925//2465 928//2465 1784//2465 1785//2465
+f 1617//2466 1616//2466 929//2466 932//2466 1831//2466
+f 2028//2467 1796//2467 1795//2467 1983//2467
+f 1797//2468 1798//2468 2028//2468 1519//2468 1518//2468
+f 1927//2469 1238//2469 1237//2469 1240//2469 1246//2469 1703//2469 1799//2469 1800//2469 757//2469 760//2469
+f 1923//2470 1693//2470 741//2470 744//2470 1691//2470 1692//2471 723//2472 722//2470 1921//2470 1922//2470
+f 1783//2473 1782//2473 884//2473 883//2473 1786//2473 1790//2473 1789//2473 1785//2473
+f 1786//2474 1489//2474 1488//2474 1787//2474 1790//2474
+f 1506//2475 1502//2475 1501//2475 1500//2475 1792//2475 886//2475 885//2475 1495//2475 1481//2475 1480//2475 1980//2475 1981//2475
+f 1212//2476 1213//2476 712//2476 715//2476 1189//2476 1191//2476 1214//2476
+f 1696//2477 1698//2477 1924//2477
+f 1699//2478 730//2478 729//2478 733//2478 732//2478 737//2478 754//2478 753//2478 1700//2478
+f 1470//2479 870//2479 869//2479 1467//2479 874//2479 873//2479 1475//2479 1474//2479
+f 1196//2480 1165//2480 1164//2480 2029//2480 1197//2480 1194//2480 1195//2480
+f 1919//2481 1689//2481 1690//2481 1920//2481
+f 1915//2481 1179//2481 1178//2481 1198//2481 1197//2481 2029//2481
+f 1467//2482 1465//2482 1464//2482 875//2482 874//2482
+f 1151//2483 2030//2483 704//2483 703//2483
+f 1914//2484 1159//2484 1161//2484 2029//2484 1164//2484 1163//2484
+f 1184//2485 698//2485 700//2485 696//2485 695//2485 1181//2485 1182//2485
+f 689//2486 684//2486 683//2486 690//2486
+f 1680//2487 1913//2487 691//2487 690//2487 683//2487 687//2487
+f 1171//2488 1175//2488 2029//2488 1157//2488 1156//2488 1166//2488 1169//2488
+f 1673//2489 1120//2489 1113//2489 1116//2489
+f 1909//2490 1135//2490 1137//2490 2031//2490 1911//2490
+f 1911//2491 2031//2491 1138//2491 1141//2491 1910//2491
+f 1676//2492 1123//2492 1127//2492 1133//2492 1131//2492 1130//2492
+f 1774//2493 1773//2493 1778//2493
+f 1905//2494 1083//2494 1082//2494 1906//2494 1669//2494 1117//2494 1119//2494 1675//2494 1674//2494
+f 1898//2495 1902//2495 1901//2495 649//2495 648//2495
+f 1767//2496 855//2496 854//2496 1449//2496 852//2496 851//2496
+f 863//2497 859//2497 862//2497 1456//2498 1770//2499 1769//2497 864//2497
+f 642//2500 644//2500 646//2500 1078//2500 1077//2500 1076//2500 1073//2500
+f 1886//2501 1660//2501 1659//2501 1658//2501 1661//2501 2032//2501
+f 1890//2502 1893//2502 1662//2502 1665//2502 2032//2502
+f 1765//2503 843//2503 842//2503 1764//2503 1977//2503
+f 1433//2504 1434//2504 1753//2504 829//2504 832//2504
+f 1874//2505 1889//2505 2032//2505 1654//2505 1653//2505
+f 1876//2506 1875//2506 1020//2506 1023//2506 2033//2506 1894//2506
+f 1878//2507 2033//2507 1023//2507 1022//2507 1025//2507
+f 1880//2508 2033//2509 1878//2510 1877//2510 1879//2510
+f 1750//2511 825//2511 824//2511 1971//2511 1752//2511 1751//2511
+f 2018//2511 1407//2511 1406//2511 1745//2511 2021//2511 2020//2511 2022//2511 2019//2511
+f 1761//2512 1762//2512 1973//2512 1763//2512
+f 1759//2513 1972//2513 1760//2513 1758//2513
+f 1651//2514 1010//2514 1009//2514 1649//2514 1648//2514 1864//2514 989//2514 993//2514 1872//2514
+f 1657//2515 1394//2515 1397//2515 1747//2515 1412//2515 1411//2515 1884//2515
+f 2023//2516 1748//2516 1747//2516 1397//2516 1396//2516 818//2516 817//2516 1408//2516 1407//2516 2018//2516 2017//2516
+f 1857//2517 975//2517 977//2517 981//2517 980//2517 979//2517
+f 1868//2518 628//2518 627//2518 1867//2518 985//2518 984//2518 988//2518 1858//2518 1860//2518
+f 973//2519 972//2519 616//2519 615//2519 614//2519
+f 1641//2520 990//2520 989//2520 1864//2520 1862//2520 1861//2520
+f 1954//2521 1953//2521 1733//2521 1735//2521 1967//2521 1966//2522 1957//2523
+f 1956//2524 1355//2524 1358//2524 1728//2524
+f 2024//2525 1377//2525 1374//2525 1373//2525 1378//2525 1379//2525 2026//2525 2025//2525
+f 964//2526 1849//2526 602//2526 604//2526 1852//2526 1848//2526 959//2526 958//2526 962//2526 963//2526
+f 1962//2527 1368//2527 1367//2527 1729//2527 1959//2527 1958//2527 1365//2527 1343//2527 1342//2527 1947//2527
+f 1947//2528 1346//2528 1345//2528 1948//2528 1961//2528 1960//2528 1962//2528
+f 1354//2529 1952//2529 1352//2529 1351//2529 1951//2529 1353//2529
+f 1841//2530 949//2530 952//2530 1842//2530 1840//2530
+f 1722//2531 1725//2531 1332//2531 1331//2531 1336//2531 1723//2531
+f 1325//2532 802//2532 801//2532 1353//2532 1951//2532 1950//2532 1949//2532 1329//2532 1323//2532 1322//2532 1326//2532
+f 1943//2533 1719//2533 1718//2533 1720//2533 1942//2533
+f 1273//2534 1275//2534 1271//2534 1270//2534 1935//2534 1278//2534 776//2534 775//2534 1284//2534 1285//2534
+f 1299//2535 1317//2535 795//2535 794//2535 1298//2535 1297//2535
+f 1286//2535 1289//2535 1293//2535 1929//2535
+f 1931//2536 765//2536 766//2536 780//2536 783//2536 777//2536 779//2536 1707//2536 1706//2536
+f 1709//2537 1708//2537 784//2537 787//2537 763//2537 762//2537 1260//2537 1259//2537 768//2537 767//2537
+f 1264//2538 773//2538 772//2538 1704//2538 1709//2538 767//2538 770//2538 1262//2538
+f 1941//2539 1717//2539 1716//2539 1312//2539 1310//2539 1311//2539 1306//2539 1305//2539 1940//2539 1939//2539 1938//2539 1933//2539 1710//2539 1712//2539 1714//2539 1713//2539 1715//2539
+f 2004//2540 2003//2540 2002//2540 1593//2540 921//2540 924//2540
+f 1979//2541 1504//2541 1505//2541 1981//2541 1980//2541
+f 1588//2542 917//2542 916//2542 1824//2542 1586//2542 1585//2542
+f 2001//2543 2000//2543 919//2543 918//2543 1818//2543 1817//2543 1997//2543 909//2543 908//2543 1566//2543 1823//2543 1822//2543
+f 1992//2544 1554//2544 902//2544 901//2544 1991//2544 904//2544 907//2544 1995//2544 1994//2544 1993//2544
+f 1623//2545 1628//2545 1618//2545 1621//2545 1633//2545 1624//2545
+f 1806//2546 2027//2546 1550//2546 1551//2546
+f 1793//2546 2028//2546 1984//2546 1794//2546
+f 914//2547 899//2547 898//2547 1552//2547 1999//2547 1582//2547 911//2547
+f 1636//2548 1638//2548 936//2548 935//2548 1832//2548 1833//2548 1834//2548
+f 1542//2549 892//2549 891//2549 896//2549 2027//2549 1539//2549
+f 2008//2550 1607//2550 1606//2550 2006//2550 1602//2550 1601//2550 1827//2550 2011//2550 2010//2550 1605//2550 1604//2550
+f 2012//2551 2009//2551 2011//2551 1827//2551 1826//2551 2007//2551
+f 1828//2552 2013//2552 1631//2552 1632//2552 1635//2552 1634//2552 1633//2552 1621//2552 1620//2552 1626//2552 1625//2552 1829//2552
+f 1509//2553 1512//2553 1982//2553 1513//2553
+f 1702//2554 1242//2554 1233//2554 1232//2554 1928//2554 1927//2554 760//2554 759//2554
+f 1926//2554 739//2554 738//2554 1700//2554 753//2554 756//2554 1231//2554 1230//2554
+f 1598//2555 2005//2555 1525//2555 1527//2555 1248//2555 1247//2555 1781//2555 1595//2555
+f 1830//2556 1831//2556 932//2556 931//2556 1493//2556 1791//2556
+f 723//2472 1692//2471 725//2557 724//2557
+f 1925//2558 1701//2558 1223//2558 1222//2558
+f 749//2559 1925//2559 1222//2559 745//2559 747//2559
+f 1229//2559 752//2559 751//2559 1226//2559 1220//2559 1219//2559 1227//2559
+f 1515//2560 1519//2560 2028//2560 1983//2560
+f 1477//2561 879//2561 876//2561 878//2561 1468//2561 1470//2561 1474//2561 1476//2561
+f 726//2562 1921//2562 722//2562 721//2562 727//2562
+f 713//2563 712//2563 1213//2563 1193//2563
+f 1695//2564 1924//2564 1698//2564 717//2564 716//2564 1920//2564 1690//2564 1202//2564 1203//2564 1205//2564 1694//2564
+f 731//2565 730//2565 1699//2565 735//2565
+f 701//2566 704//2566 2030//2567 1688//2568 1687//2566 1918//2566
+f 1681//2566 705//2566 708//2566 1185//2566 711//2566 710//2566 1917//2566
+f 1688//2568 2030//2567 680//2569 682//2569 1682//2569 1683//2569 1685//2569 1686//2569
+f 2030//2570 1151//2571 1150//2572
+f 1149//2573 1679//2573 678//2573 677//2573 680//2573 2030//2570 1150//2572
+f 1175//2574 1176//2574 1172//2574 1174//2574 693//2574 692//2574 1915//2574 2029//2574
+f 1157//2575 2029//2575 1161//2575 1158//2575
+f 1119//2576 666//2576 668//2576 1121//2576 1120//2576 1673//2576 1675//2576
+f 1134//2577 1132//2577 1133//2577 1127//2577 1126//2577
+f 1138//2578 2031//2578 669//2578 672//2578 1139//2578
+f 1144//2579 1677//2579 673//2579 676//2579 1912//2579 1678//2579 1145//2579
+f 1776//2580 1775//2580 1771//2580 1774//2580 1778//2580 1780//2580
+f 1137//2581 1136//2581 1085//2581 1088//2581 2031//2581
+f 1087//2582 1907//2582 2031//2582 1088//2582
+f 1093//2582 1670//2582 650//2582 649//2582 1901//2582 1900//2582 1903//2582 1089//2582
+f 1671//2583 651//2583 653//2583 654//2583 665//2583 1908//2583 1096//2583 1090//2583 1089//2583 1903//2583 1107//2583 1106//2583 1904//2583 664//2583 663//2583 1103//2583 1105//2583 658//2583 660//2583 1112//2583 1111//2583 1110//2583 1142//2583 670//2583 669//2583 2031//2583 1907//2583
+f 1079//2584 656//2584 655//2584 1672//2584 661//2584 664//2584 1904//2584
+f 1768//2585 1450//2585 1449//2585 854//2585 858//2585
+f 860//2586 859//2586 863//2586
+f 850//2587 1978//2587 1766//2587 847//2587
+f 1770//2499 1456//2498 1455//2588 1452//2588 1451//2588
+f 1072//2589 1069//2589 1068//2589 1668//2589 1897//2589
+f 1897//2590 1668//2590 637//2590 636//2590 639//2590 641//2590 1896//2590
+f 1976//2591 1975//2591 1441//2591 1444//2591 1978//2591 850//2591 849//2591
+f 1445//2592 844//2592 846//2592 1765//2592 1977//2592
+f 1066//2593 1067//2593 1064//2593 1063//2593 1895//2593
+f 1885//2594 1886//2594 2032//2594 1665//2594 1664//2594
+f 1666//2595 633//2595 635//2595 1062//2595 1054//2595 1053//2595 1058//2595 1057//2595 1667//2595
+f 1974//2596 1435//2596 1437//2596 838//2596 837//2596 1440//2596 1439//2596
+f 1888//2597 1891//2597 1890//2597 2032//2597 1889//2597
+f 1882//2598 1894//2598 2033//2598 1881//2598
+f 1881//2599 2033//2599 1026//2599 1029//2599
+f 2033//2509 1880//2508 1027//2600 1026//2600
+f 1053//2601 1047//2601 631//2601 630//2601 1052//2601 1051//2601 1055//2601 1058//2601
+f 1432//2602 1431//2602 827//2602 826//2602 1750//2602 1751//2602 1753//2602 1434//2602 834//2602 836//2602
+f 1017//2603 1013//2603 1012//2603 1019//2603 1018//2603 1873//2603 1015//2603
+f 1661//2604 1041//2604 1040//2604 1039//2604 1652//2604 2032//2604
+f 2032//2605 1652//2605 1654//2605
+f 1757//2606 1738//2606 822//2606 821//2606 833//2606 1760//2606 1972//2606 1424//2606 1426//2606 1973//2606 1762//2606 1755//2606 1754//2606
+f 1642//2607 621//2607 620//2607 623//2607 622//2607 983//2607 999//2607 1645//2607 624//2607 626//2607 1866//2607 995//2607 997//2607 1643//2607
+f 1871//2608 1869//2608 1003//2608 1006//2608 1647//2608 1646//2608 1868//2608 1860//2608 1859//2608
+f 1035//2609 1034//2609 1033//2609 1883//2609 1656//2609 1655//2609
+f 1744//2610 1743//2610 1742//2610 1740//2610 1739//2610 1741//2610 814//2610 813//2610 815//2610 1737//2610
+f 1385//2611 804//2611 806//2611 1856//2611 1382//2611
+f 810//2612 809//2612 811//2612 814//2612 1741//2612 1736//2612
+f 1969//2613 1383//2613 1382//2613 1856//2613 611//2613 610//2613 609//2613 1855//2613 1730//2613 1732//2613 1968//2613
+f 1966//2522 1963//2614 1965//2614 1359//2614 1356//2614 1355//2614 1956//2614 1955//2614 1957//2523
+f 1732//2614 1731//2614 1386//2614 1388//2614 1968//2614
+f 1843//2615 954//2615 953//2615 1848//2615 1852//2615 1850//2615 1844//2615
+f 1946//2616 1724//2616 1721//2616 1723//2616 1336//2616 1338//2616 1944//2616 1945//2616
+f 949//2617 1841//2617 950//2617
+f 1719//2618 1943//2618 798//2618 800//2618 1321//2618
+f 1949//2619 1727//2619 1726//2619 1348//2619 1327//2619 1329//2619
+f 1837//2620 601//2620 600//2620 598//2620 597//2620 1640//2620
+f 1838//2621 1839//2621 948//2621 945//2621 947//2621 943//2621 942//2621
+f 1282//2622 1279//2622 1278//2622 1935//2622 1934//2622 1283//2622
+f 1937//2622 1290//2622 1292//2622 1936//2622 1253//2622 1251//2622 1250//2622 1255//2622 1258//2622
+f 1298//2623 794//2623 797//2623 1295//2623
+f 1929//2623 1293//2623 1294//2623 1937//2623 1258//2623 1257//2623 1930//2623
+f 1303//2624 781//2624 780//2624 766//2624 764//2624 763//2624 787//2624 786//2624
+f 792//2625 791//2625 790//2625 789//2625 1939//2625 1940//2625
+f 1711//2626 1714//2626 1712//2626
+f 594//2627 591//2627 593//2627 941//2627 940//2627 939//2627 1835//2627
+o Trunks
+v -23.579279 27.080400 9.894612
+v -23.453920 27.002068 11.016746
+v -23.652891 27.118038 10.827804
+v -23.088253 28.951912 6.271603
+v -22.955896 29.015137 3.746106
+v -23.056793 28.953346 3.082325
+v -23.235294 28.861229 5.183768
+v -22.544960 28.628765 6.464015
+v -22.516716 28.386406 10.561586
+v -22.481543 28.364267 10.596128
+v -22.173687 28.416300 6.443893
+v -22.493223 28.129063 10.753654
+v -22.493622 28.005239 10.759019
+v -22.500225 27.988096 10.848068
+v -22.528864 27.411318 11.234368
+v -22.324291 27.376741 8.475177
+v -22.029253 27.832743 4.495832
+v -22.824718 27.238886 11.193714
+v -45.876446 -5.684017 14.900688
+v -46.509045 -4.650781 0.074624
+v -45.442249 -5.268806 0.078199
+v -45.138878 -6.095925 14.561125
+v -45.150074 -6.089786 14.568802
+v -45.579700 -5.848361 14.733410
+v -45.883793 -4.807612 14.764601
+v -46.513264 -3.409381 0.027216
+v -45.442993 -2.792502 0.042765
+v -46.414082 -3.351553 0.023138
+v -45.146362 -4.314254 14.203953
+v -44.374367 -3.415545 0.047439
+v -44.867130 -4.461836 14.045414
+v -44.385399 -4.724748 13.859031
+v -44.376549 -4.651096 0.034525
+v -44.376408 -4.574157 0.031579
+v -44.387131 -5.628327 14.069757
+v -45.066509 -6.051126 14.516901
+v -6.220116 30.486355 13.260275
+v -6.245219 30.500782 13.261875
+v -7.237264 29.372709 6.747080
+v -6.853880 29.153313 6.726305
+v -6.627611 28.239119 3.674496
+v -5.441856 29.934158 12.804305
+v -7.143304 27.547411 -0.119969
+v -7.120660 27.534306 -0.121763
+v -7.060029 27.620977 0.345066
+v -8.244748 29.561346 0.100776
+v -8.248126 29.374361 0.082725
+v -7.637046 29.748592 4.102947
+v -6.213461 31.526571 13.448093
+v -5.376981 32.015671 13.303810
+v -7.086539 30.252188 0.140953
+v -6.034048 31.634745 13.474751
+v -4.573460 31.469391 12.839063
+v -5.950641 29.597202 0.051165
+v -5.960218 28.241644 -0.080038
+v -4.597463 30.422054 12.584218
+v -6.349817 28.006498 -0.072262
+v -42.071896 17.544733 9.683618
+v -42.455814 16.902033 0.300833
+v -42.206600 16.757387 0.292692
+v -41.216347 16.696556 5.838950
+v -41.143383 17.004499 9.638993
+v -42.055550 18.634573 10.051561
+v -42.452065 18.213650 0.353861
+v -42.050438 18.226994 10.188848
+v -41.320709 18.868479 0.403667
+v -42.033108 18.455896 0.359813
+v -41.137390 19.163218 9.951020
+v -40.192257 18.216364 0.373025
+v -40.216511 18.642673 10.203009
+v -40.216259 18.008705 10.415907
+v -40.205708 17.864830 6.119074
+v -40.204655 17.963205 5.633871
+v -40.192062 18.076311 0.362290
+v -40.781693 17.118120 8.260449
+v -40.411316 17.329935 8.214794
+v -40.581184 17.363941 10.112260
+v -23.279104 16.867805 14.127663
+v -23.316969 18.491802 -0.863498
+v -22.208580 17.841879 -0.782265
+v -22.499252 16.395702 14.323514
+v -23.281607 17.811163 13.900002
+v -23.291702 18.334473 9.985667
+v -23.295774 18.170370 8.064279
+v -23.317167 18.572483 -0.876525
+v -22.378977 19.119802 8.128695
+v -22.643177 18.702551 10.071011
+v -22.489613 18.278732 13.870624
+v -21.370445 19.095461 4.566310
+v -21.903854 19.400803 4.595573
+v -21.705564 17.791615 14.070538
+v -21.302155 19.104061 4.260099
+v -21.093477 18.500620 -0.912548
+v -21.092388 18.612997 -0.930723
+v -21.092510 18.676498 -0.922855
+v -21.717649 16.852057 14.295747
+v -21.356445 -23.735336 8.746932
+v -22.903564 -23.053246 0.064800
+v -21.730579 -23.739481 0.315887
+v -20.579145 -24.222532 7.698297
+v -21.344507 -22.655766 8.782574
+v -22.602076 -21.920187 1.720109
+v -22.607342 -22.522211 1.708029
+v -22.906252 -22.828768 0.043271
+v -21.363209 -23.629791 8.706011
+v -20.580021 -21.997513 7.591665
+v -21.750988 -21.121304 0.066524
+v -22.366753 -21.444534 -0.001036
+v -20.476818 -22.055504 7.414693
+v -19.787977 -22.444508 6.318135
+v -20.588963 -21.825621 0.317568
+v -20.584177 -23.125257 0.440499
+v -19.798584 -22.509596 6.243608
+v -19.819286 -23.569862 6.160837
+v -19.913164 -23.643986 6.307820
+v -48.837872 17.848213 0.088072
+v -48.610264 17.714155 0.076306
+v -48.568710 17.689402 0.080579
+v -48.550323 17.343775 7.765417
+v -48.875988 17.408913 10.690351
+v -49.814358 17.950924 10.984059
+v -48.837902 19.165255 0.253509
+v -49.784988 19.000208 10.788262
+v -48.807278 19.532391 10.290268
+v -47.695972 19.810816 0.360055
+v -48.477524 19.349014 10.185814
+v -47.642666 19.779846 0.357353
+v -48.545258 17.547913 10.155554
+v -48.419720 17.619164 10.172074
+v -48.443401 17.631273 10.472308
+v -37.838993 -40.914848 4.934037
+v -37.719978 -40.909248 5.407894
+v -36.862408 -41.415955 5.461104
+v -37.030655 -40.902596 7.994168
+v -37.971195 -40.349960 7.916796
+v -38.025402 -39.031116 9.230691
+v -37.673409 -40.327454 1.306312
+v -37.968300 -40.279819 7.858359
+v -36.499687 -39.902485 0.000137
+v -37.262432 -40.330017 0.048119
+v -37.640976 -40.308640 1.307606
+v -37.134708 -38.458870 9.560814
+v -36.128662 -39.178547 8.452769
+v -35.385288 -40.556885 0.051634
+v -36.019024 -40.498158 7.261641
+v -35.761108 -41.051178 4.350071
+v -35.641300 -40.707817 2.971752
+v -35.386379 -40.794731 0.074257
+v -36.008854 -40.353764 7.139670
+v -36.744251 -41.430603 5.118556
+v -36.671227 -41.827965 3.294260
+v -36.472916 -41.449356 4.393691
+v -18.095806 -14.467531 -0.069907
+v -17.042664 -15.076263 -0.040447
+v -17.750517 -14.738133 13.466195
+v -18.509375 -14.299224 13.391636
+v -18.090641 -13.249253 -0.238060
+v -18.490437 -13.411957 12.775174
+v -17.684956 -12.949441 12.215223
+v -17.025290 -12.634325 -0.371967
+v -17.576117 -12.952281 -0.305575
+v -15.963722 -13.246540 -0.343933
+v -16.900698 -13.404904 12.293560
+v -16.947737 -14.306033 12.927991
+v -15.975945 -14.470281 -0.179084
+v -15.967708 -13.667130 -0.290189
+v -33.741245 -33.375137 12.363320
+v -34.293232 -32.473568 -0.573456
+v -33.144352 -33.132191 -0.724254
+v -32.860748 -33.905407 12.814800
+v -32.930099 -33.868198 12.880585
+v -33.789593 -32.261723 11.273399
+v -34.295525 -31.137913 -0.571613
+v -34.295185 -31.198360 -0.566222
+v -33.461952 -30.653990 -0.588517
+v -34.036850 -30.985195 -0.598152
+v -34.249310 -31.111195 -0.571622
+v -32.903980 -31.687271 10.750966
+v -33.141560 -30.468472 -0.590974
+v -31.989384 -31.325914 1.363417
+v -32.179703 -31.022385 -0.659011
+v -33.055729 -30.518581 -0.589903
+v -31.997370 -32.273849 11.363779
+v -31.994308 -32.856033 4.871351
+v -31.992836 -32.031731 4.855771
+v -32.000019 -33.383564 12.447850
+v -32.713558 -33.822639 12.845563
+v -32.790310 -32.924923 -0.768478
+v -32.609894 -32.972839 1.428022
+v -17.142887 -8.281096 11.799264
+v -17.896688 -9.138254 6.849019
+v -17.508389 -9.360464 6.827979
+v -17.354683 -9.981482 4.754874
+v -17.164465 -10.090364 4.744435
+v -16.213799 -8.731387 12.064164
+v -18.503490 -8.669046 2.837960
+v -18.396187 -8.798380 3.548307
+v -18.312611 -8.747198 4.098137
+v -17.142601 -8.264994 11.800786
+v -17.150196 -7.256321 11.727936
+v -19.004524 -9.050340 -0.456602
+v -19.004818 -9.065743 -0.458186
+v -16.219400 -6.686323 12.021034
+v -17.856234 -8.374788 -0.581889
+v -16.723387 -9.063054 -0.840916
+v -16.756069 -9.044903 -0.841691
+v -15.299515 -7.127393 12.380532
+v -16.700718 -10.389120 -0.673126
+v -15.290490 -7.921237 12.438956
+v -15.291862 -8.134953 12.419552
+v -17.125288 -10.085432 4.568770
+v -16.914320 -10.515698 -0.646963
+v -35.962852 -27.673372 8.426420
+v -36.133854 -28.395084 -0.479611
+v -35.242973 -28.914986 -0.539326
+v -35.068645 -28.179235 8.539850
+v -35.092110 -26.068266 7.317799
+v -35.244041 -26.312544 -0.594982
+v -35.531769 -26.478308 -0.568549
+v -35.380344 -26.234852 7.317629
+v -35.184746 -26.124245 7.194435
+v -34.117867 -26.964540 -0.653984
+v -34.326534 -26.844297 -0.656561
+v -34.139156 -26.590315 7.974997
+v -34.137829 -27.678656 7.970841
+v -34.116344 -28.267399 -0.631410
+v -34.137630 -27.188700 7.643051
+v -34.251461 -28.345764 -0.630371
+v -9.193234 35.887550 14.024123
+v -9.227463 37.355602 0.472514
+v -8.171875 36.746998 0.452924
+v -8.433821 35.443748 14.065824
+v -8.590410 35.533283 14.075722
+v -9.195232 36.780479 13.969711
+v -9.230011 38.583347 0.484304
+v -8.171091 39.204258 0.476443
+v -8.431291 37.226177 13.980683
+v -7.111074 38.591408 0.456755
+v -7.669878 36.773403 14.046179
+v -7.114415 37.361908 0.445025
+v -7.674844 35.881706 14.100169
+v -8.251799 35.547283 14.091750
+v -30.617990 -33.851028 12.606201
+v -32.208443 -33.270699 -0.844918
+v -31.841557 -33.488224 -0.874404
+v -29.756437 -34.362972 12.494333
+v -30.601265 -32.845688 12.670797
+v -30.602562 -33.154041 12.672443
+v -31.787966 -30.809196 -0.653484
+v -29.719652 -32.356869 12.638378
+v -29.246393 -32.641045 12.623814
+v -28.854208 -32.875641 12.572739
+v -30.632189 -31.501869 -0.746986
+v -30.659061 -32.837803 -0.857146
+v -28.875988 -33.874241 12.477807
+v -18.844215 -19.156713 0.350742
+v -18.656050 -19.269737 0.391425
+v -18.637611 -19.616282 8.096703
+v -18.747423 -19.594318 9.082966
+v -19.767557 -19.059593 10.653704
+v -18.820410 -17.920029 0.240420
+v -19.875471 -18.103893 11.976213
+v -19.034054 -17.635340 11.850462
+v -17.741840 -17.311590 0.303728
+v -18.066259 -17.492483 0.345422
+v -18.654713 -17.826269 0.258404
+v -18.617878 -17.822834 11.249084
+v -17.688286 -17.343111 0.305304
+v -18.635561 -19.533653 9.064155
+v -33.608570 -41.162102 0.092085
+v -32.588512 -41.767345 0.139815
+v -32.483326 -41.830612 0.139473
+v -32.983669 -40.303936 7.672508
+v -33.576847 -40.039856 7.104813
+v -33.922916 -39.818932 7.184402
+v -33.973515 -38.482635 8.419521
+v -33.598125 -39.865143 -0.031621
+v -33.598164 -39.868572 -0.030993
+v -33.945965 -39.102417 7.756051
+v -32.461853 -39.243504 -0.183865
+v -33.640965 -38.275043 8.510718
+v -33.072624 -37.855015 9.011766
+v -32.124950 -38.438824 8.810907
+v -31.336298 -39.901112 -0.101912
+v -32.064182 -39.655838 8.171579
+v -31.345922 -41.195927 0.063240
+v -31.345650 -40.938770 0.049088
+v -31.343615 -40.494835 0.006863
+v -32.056831 -39.373779 8.075830
+v -50.781063 -19.329819 -0.052771
+v -49.679180 -19.966694 -0.027367
+v -50.322025 -19.659618 12.238853
+v -50.908848 -19.326796 13.436084
+v -51.205723 -19.156994 13.769691
+v -50.780632 -18.057505 -0.066716
+v -51.212254 -18.233158 13.982315
+v -50.356239 -17.744223 12.891719
+v -49.676548 -17.419546 -0.077577
+v -50.479630 -17.883547 -0.063591
+v -50.778561 -17.984520 13.605780
+v -49.387611 -18.194065 10.946128
+v -48.571587 -18.056143 -0.060047
+v -49.361050 -19.197920 10.587859
+v -48.574314 -19.330894 -0.023281
+v -48.841572 -19.484379 -0.018653
+v -14.209597 35.081184 6.954392
+v -14.486732 35.533836 0.459200
+v -13.427380 34.920284 0.459238
+v -13.254261 34.448292 8.723848
+v -13.812243 34.836784 7.271484
+v -14.263078 36.260551 5.746524
+v -14.488356 36.760956 0.472252
+v -13.426832 37.373074 0.485350
+v -13.804247 36.551704 5.529951
+v -13.305723 36.751774 6.267077
+v -12.366836 36.755501 0.485349
+v -12.373505 35.963978 8.835650
+v -12.369001 35.529839 0.472289
+v -12.376149 34.869835 9.951415
+v -32.121597 -7.899036 0.067664
+v -31.553186 -8.210142 0.091753
+v -30.963129 -8.523740 0.153001
+v -29.373377 -6.251190 12.393419
+v -30.293983 -5.820827 12.069649
+v -30.294077 -5.293928 12.057142
+v -30.315493 -4.828393 11.905423
+v -32.120426 -6.574622 0.045452
+v -29.439598 -4.308910 11.883551
+v -30.965149 -5.882584 0.137460
+v -31.118826 -5.974244 0.132193
+v -31.928198 -6.460089 0.049907
+v -28.534039 -4.756165 12.174314
+v -29.816380 -6.499418 0.267071
+v -30.397102 -6.186515 0.206785
+v -28.497252 -5.710804 12.484266
+v -29.811581 -7.813731 0.270040
+v -29.046900 -6.042076 12.499674
+v -24.698376 9.923915 13.381031
+v -25.243994 9.010536 0.046541
+v -24.375002 8.527964 0.254750
+v -24.178600 8.416474 0.275530
+v -23.921101 9.503238 13.686275
+v -24.610867 9.875204 13.400753
+v -24.672089 10.842036 13.997622
+v -25.244217 10.234688 0.004793
+v -25.243902 9.967224 0.020433
+v -25.244434 9.097927 0.033158
+v -24.183849 10.847454 0.002146
+v -24.375004 10.737153 0.010884
+v -23.900593 11.302872 14.754352
+v -23.124311 10.237333 0.025089
+v -23.334118 10.981343 14.877954
+v -23.161129 10.884499 14.947678
+v -23.123276 9.024055 0.203347
+v -23.124237 10.166923 0.029202
+v -23.158939 10.001316 14.482334
+v -20.527100 29.598452 7.778286
+v -20.646795 29.785299 6.677860
+v -21.476799 30.260324 6.726173
+v -21.493187 30.963240 0.237541
+v -20.380424 30.328203 0.155788
+v -21.475456 30.408188 7.445020
+v -21.470592 30.537897 9.679230
+v -21.470951 30.830542 9.790533
+v -21.474159 30.701290 8.277206
+v -21.493378 31.062513 0.245579
+v -20.192799 31.203489 10.371691
+v -19.707378 30.947744 10.204739
+v -19.676228 30.925179 10.233060
+v -19.428360 31.731585 4.205224
+v -19.518579 31.720222 4.609772
+v -19.661203 31.801865 4.617595
+v -19.974003 31.318415 8.836484
+v -20.255276 31.240931 10.364480
+v -19.266771 30.973244 0.177592
+v -19.266851 31.402193 0.212304
+v -19.684511 30.737606 10.422260
+v -19.714220 29.791443 11.079917
+v -20.174009 29.527777 11.039598
+v -19.813057 29.732941 11.092828
+v -48.481853 -24.518824 11.504538
+v -48.767319 -24.392969 9.902568
+v -49.579010 -24.177383 0.020481
+v -49.440334 -24.259222 0.023697
+v -47.670712 -25.001616 11.369621
+v -48.614403 -24.363951 10.757917
+v -48.612999 -23.575718 10.743023
+v -49.552086 -21.828974 -0.004821
+v -48.612083 -23.328127 9.984043
+v -48.612728 -23.460369 10.638380
+v -47.927490 -22.882652 9.631938
+v -49.426834 -21.760727 -0.003475
+v -47.076412 -23.391090 9.492077
+v -48.340542 -22.414349 0.021852
+v -48.349968 -23.658829 0.035341
+v -46.966053 -24.463245 10.385112
+v -19.856728 1.415240 0.496602
+v -18.809835 0.771739 0.408384
+v -19.669653 3.395261 13.353561
+v -20.442629 3.918747 13.715834
+v -20.457045 4.858169 14.114417
+v -19.856045 2.644778 0.584177
+v -20.440281 4.336318 13.698577
+v -18.821533 3.237011 0.584504
+v -19.732126 5.307095 14.294151
+v -18.942848 4.771098 13.681164
+v -17.776279 2.608091 0.497391
+v -17.763838 1.372420 0.408848
+v -18.874479 3.855747 12.942379
+v -18.874439 3.753767 12.946289
+v -7.743777 7.958952 11.273180
+v -7.412193 7.824009 0.480200
+v -7.305485 7.762404 0.469250
+v -7.286319 7.707808 8.757800
+v -6.928601 7.484284 11.959842
+v -6.942152 7.492174 11.948580
+v -7.734649 8.540994 10.976127
+v -7.598323 8.341953 6.538731
+v -7.464473 9.076225 2.181921
+v -7.416440 9.095774 0.618440
+v -7.412571 7.924857 0.492520
+v -7.734827 8.503759 10.981925
+v -7.164510 9.249308 2.132933
+v -6.609575 9.591541 6.238400
+v -6.478792 9.654013 3.742928
+v -6.949529 9.365729 0.646014
+v -6.038031 9.239599 6.658109
+v -5.978842 8.967461 10.972714
+v -5.657419 9.021790 6.637485
+v -5.796120 7.923162 8.508221
+v -5.499117 8.382202 4.502380
+v -5.980150 8.560881 10.990325
+v -6.049416 8.381028 11.924560
+v -6.065429 7.968682 12.140550
+v -6.450862 7.742795 12.065072
+v -24.626234 42.441174 15.248079
+v -25.266644 43.487167 0.238892
+v -24.190447 42.867229 0.163986
+v -23.879534 42.019550 15.006823
+v -24.645651 43.352554 14.829714
+v -25.259527 44.716145 0.457419
+v -24.121386 43.712906 14.350779
+v -23.902082 43.889961 13.930318
+v -24.181305 45.322388 0.600376
+v -23.110106 44.705395 0.525830
+v -23.120531 43.468067 13.579183
+v -23.112144 43.479218 0.307967
+v -23.120979 43.285683 13.778386
+v -23.122065 42.563053 13.466141
+v -23.811007 42.063301 14.945803
+v -23.389271 42.383648 13.831565
+v 5.908811 37.672142 -1.002958
+v 6.239537 37.474354 -1.053907
+v 8.034115 40.039711 12.763598
+v 7.536100 40.324871 12.791243
+v 7.536190 40.338005 12.842314
+v 7.256919 40.474079 12.765476
+v 5.189653 38.123352 -0.810340
+v 7.240388 41.121658 12.641870
+v 7.230174 41.344833 12.569496
+v 5.241125 39.420475 -0.500270
+v 7.318154 40.716850 13.163700
+v 8.069597 41.870396 13.036780
+v 7.820040 41.612968 11.115313
+v 7.529940 41.441284 11.129137
+v 7.524965 41.308582 8.843351
+v 6.328501 40.074379 -0.368894
+v 5.583409 39.624550 -0.489916
+v 8.798752 41.395061 12.713658
+v 8.305508 41.677235 12.741811
+v 8.910554 41.547050 13.751802
+v 7.521660 40.944366 7.072695
+v 8.187078 40.563534 7.033963
+v 7.372696 39.456436 -0.528036
+v 8.965080 41.057682 14.240376
+v 8.915424 41.418400 13.792771
+v 7.340181 38.160755 -0.869361
+v 8.380266 40.261963 8.810040
+v 8.623058 40.213364 11.052600
+v 8.336397 40.043709 11.089760
+v -37.208935 -27.303049 8.492176
+v -37.571785 -27.910475 -0.375634
+v -36.440098 -28.570896 -0.451490
+v -36.266075 -27.836439 8.611779
+v -37.571350 -26.602362 -0.403687
+v -37.236233 -26.246618 7.792376
+v -36.441174 -25.951252 -0.507514
+v -36.293213 -25.713362 7.198440
+v -12.344372 4.247906 10.868314
+v -12.370937 5.387306 0.350476
+v -11.245410 4.738165 0.331607
+v -11.463290 3.654149 11.654504
+v -12.347060 5.317863 10.674811
+v -12.373627 6.695070 0.373345
+v -12.344593 4.313741 10.832433
+v -11.245276 7.352883 0.393131
+v -11.445529 7.237896 0.376624
+v -11.444860 5.835618 10.751391
+v -10.115261 6.701734 0.358360
+v -10.790554 7.092346 0.369701
+v -10.985577 5.549011 10.876505
+v -10.563744 5.242650 11.264908
+v -10.118398 5.392481 0.335503
+v -10.590854 4.144630 11.847136
+v 2.159099 42.947269 8.894552
+v 2.913747 42.867889 0.473933
+v 3.513968 42.513969 0.451945
+v 4.049571 42.203278 0.314666
+v 3.018624 42.409481 9.574013
+v 2.920862 44.158207 0.556370
+v 2.915676 43.875004 0.578672
+v 2.143118 44.022671 9.207459
+v 4.054475 44.794598 0.533924
+v 2.975239 44.524208 10.177590
+v 5.166184 44.135948 0.613743
+v 5.067327 44.195549 0.595628
+v 4.356565 44.615627 0.555549
+v 3.800913 43.980267 10.821941
+v 3.827928 42.940426 10.530731
+v 5.185894 42.839039 0.355242
+v 5.164741 43.730133 0.589836
+v 5.161359 43.982388 0.636734
+v 5.059642 42.767151 0.335877
+v -15.090939 7.875531 0.412143
+v -14.034905 7.237935 0.393940
+v -14.860917 9.758302 12.830141
+v -15.666969 10.336861 13.408661
+v -15.670290 10.777603 13.519219
+v -15.696062 11.349132 14.139258
+v -15.696107 11.352648 14.140532
+v -15.085541 9.104025 0.394914
+v -15.090887 8.356075 0.451135
+v -15.090425 8.047873 0.415152
+v -14.041833 9.720986 0.498226
+v -15.664968 11.371012 14.143388
+v -14.947788 11.780523 14.138021
+v -12.996952 9.110184 0.571400
+v -13.504287 9.413809 0.599053
+v -14.091018 11.138759 12.935803
+v -12.979310 7.851414 0.424678
+v -14.068379 10.917169 12.687676
+v -14.047667 10.142181 12.485231
+v -13.313147 7.652922 0.396365
+v 1.100424 30.291967 -0.679764
+v 2.269699 29.616135 -0.652132
+v 1.748954 29.864887 9.284302
+v 1.439661 30.045330 8.957931
+v 0.857628 30.384703 8.380198
+v 0.822311 30.405151 8.372739
+v 1.110478 31.646042 -1.007009
+v 0.833311 30.756985 8.014694
+v 0.832883 30.926916 8.028608
+v 0.835848 31.230038 7.932112
+v 0.835188 31.534008 7.953584
+v 2.302082 32.333248 -1.270033
+v 2.142702 32.241150 -1.269603
+v 1.819468 32.102711 7.938806
+v 3.487823 31.650801 -1.263656
+v 1.966242 32.019058 7.924722
+v 2.750950 31.526257 8.674945
+v 3.464700 30.287025 -0.951786
+v 3.487780 31.568611 -1.263080
+v 2.744131 31.337303 8.766913
+v 2.716069 30.413557 9.145403
+v 2.585922 30.336121 9.098845
+v -9.905503 17.176996 13.201682
+v -10.456272 18.076580 0.293381
+v -9.310213 17.400265 0.572210
+v -9.051728 16.695530 12.912127
+v -9.437050 16.914705 13.000940
+v -9.903226 18.165024 13.296437
+v -10.465852 19.414772 0.124056
+v -9.317937 20.068907 0.203424
+v -9.511752 19.955128 0.217906
+v -9.049308 18.690823 13.027660
+v -8.174612 19.384190 0.398680
+v -8.184403 18.222078 12.658533
+v -8.177158 18.046654 0.675444
+v -8.186122 17.219021 12.562115
+v -8.222029 18.020544 0.678749
+v -8.272795 17.167131 12.589539
+v -22.048010 19.768019 5.706248
+v -20.179678 20.797665 13.734714
+v -20.716904 21.010801 13.398571
+v -21.035492 21.170092 13.326653
+v -22.194157 19.852554 5.717665
+v -21.003523 22.126917 13.515811
+v -23.187807 20.013674 -0.836821
+v -23.188087 20.001106 -0.838389
+v -22.662474 20.417021 2.617436
+v -21.043180 21.398422 13.270805
+v -20.098209 22.713158 14.361979
+v -22.055637 20.693983 -0.709390
+v -19.271311 22.354988 14.870458
+v -20.952997 20.068848 -0.744928
+v -20.966204 18.754551 -0.908371
+v -19.300400 21.419840 14.572164
+v -17.431618 -22.788326 4.146405
+v -17.563953 -23.009861 0.912217
+v -17.553715 -23.015574 0.914390
+v -17.470163 -23.063364 0.919294
+v -17.334875 -22.847698 4.108254
+v -17.376759 -21.495371 5.451606
+v -17.567785 -21.698158 0.779563
+v -17.564379 -22.844940 0.896926
+v -17.398947 -21.922972 4.920889
+v -16.427612 -21.040548 0.712434
+v -17.190241 -21.388041 5.428190
+v -16.325825 -20.876894 6.013625
+v -15.285811 -21.696253 0.779710
+v -15.297773 -21.486008 5.627618
+v -15.293844 -22.752081 4.634906
+v -15.284551 -23.006754 0.913828
+v -15.293721 -22.693474 4.554464
+v -15.368766 -23.055298 0.918784
+v -15.370646 -22.797358 4.625024
+v -42.800224 19.749321 9.614819
+v -42.823772 20.759256 0.292076
+v -42.787434 20.738754 0.287217
+v -41.681293 20.079544 0.467494
+v -41.862514 19.177917 9.885297
+v -42.803524 20.899492 9.228331
+v -42.826649 22.098198 0.262045
+v -41.672424 22.798851 0.076953
+v -41.846577 21.474922 9.115331
+v -40.900558 20.881271 9.393975
+v -40.525036 22.102995 0.261684
+v -41.658630 22.791126 0.075107
+v -40.919727 19.734674 9.777379
+v -40.537251 20.744871 0.458149
+v 18.916365 48.205315 12.110548
+v 16.787193 49.144016 0.162044
+v 17.875002 48.503616 0.245196
+v 17.961243 48.452526 0.239769
+v 19.939014 47.622807 12.920272
+v 16.799894 50.478439 0.194638
+v 16.786213 49.185524 0.155356
+v 18.723656 49.353195 10.998408
+v 19.694983 49.831833 11.260002
+v 17.985100 51.111298 0.271589
+v 17.875000 51.050610 0.273877
+v 18.822491 49.413151 10.969213
+v 20.748730 49.173882 12.329276
+v 19.130791 50.423996 0.208525
+v 19.114464 49.099049 0.176102
+v 19.115515 49.246212 0.174030
+v 20.835550 48.098648 13.047456
+v 18.102446 48.535942 0.203890
+v 20.201260 47.778965 12.845500
+v -36.442352 22.218996 0.384072
+v -36.285542 22.120274 0.356506
+v -35.993362 23.104425 7.482482
+v -36.753162 23.547050 7.396578
+v -36.716442 24.529482 6.663275
+v -36.431984 23.481857 0.259252
+v -36.437351 23.000299 0.338237
+v -35.717216 24.979492 6.018006
+v -35.320145 24.076820 0.039845
+v -36.106041 23.662916 0.230071
+v -34.753300 24.420444 6.125158
+v -34.197273 23.389484 -0.158664
+v -34.784115 23.927433 6.497054
+v -34.197376 23.310049 -0.154090
+v -18.916821 -10.749866 10.373567
+v -18.837812 -10.799236 11.080793
+v -18.971571 -10.721872 11.067651
+v -19.037842 -9.129511 11.102279
+v -18.686666 -8.925879 11.235560
+v -17.852236 -9.418583 11.465641
+v -17.845963 -10.395747 11.381035
+v -17.644726 -10.429758 8.666828
+v -18.124798 -10.562012 11.274802
+v -35.449238 26.034275 5.158723
+v -35.678722 26.409101 -0.219726
+v -34.946575 25.981852 -0.148475
+v -34.595753 25.781488 -0.211320
+v -34.475891 25.454702 5.510714
+v -35.064674 25.809568 5.202700
+v -35.680531 26.615559 -0.253596
+v -35.460175 26.369841 4.915646
+v -35.467529 26.955103 4.767166
+v -34.585972 25.787296 -0.213725
+v -34.108742 25.660542 5.596425
+v -46.325676 -15.133960 9.195091
+v -47.740276 -16.742529 -0.094655
+v -47.600071 -16.821251 -0.096392
+v -46.673672 -17.334789 -0.082278
+v -45.636200 -15.851724 7.905797
+v -46.076130 -13.904241 10.812496
+v -47.730209 -15.504522 -0.056223
+v -47.730267 -15.511608 -0.056458
+v -45.207409 -13.365371 11.207329
+v -46.666698 -14.870698 -0.028605
+v -44.532932 -13.992011 10.004154
+v -44.570457 -13.970542 10.006300
+v -45.297050 -14.411970 5.902041
+v -45.225510 -14.933523 3.573215
+v -45.614803 -15.462748 -0.041629
+v -44.526829 -13.983716 10.060814
+v -44.528660 -13.996639 10.043489
+v -45.615017 -16.693575 -0.082364
+v -45.225060 -15.527151 3.558660
+v -44.981384 -15.679758 5.806084
+v -45.667076 -16.725252 -0.083737
+v -45.201553 -15.564719 8.127676
+v -46.067444 -16.968777 -0.093289
+v -46.747360 -38.012020 5.243215
+v -46.962193 -38.371658 -0.007156
+v -45.798992 -39.042187 0.004755
+v -45.710861 -38.670231 4.594731
+v -45.798424 -38.623898 4.548856
+v -46.721302 -36.773865 5.844674
+v -46.957527 -37.024632 0.067233
+v -46.961994 -37.992401 -0.013461
+v -45.798965 -36.356270 0.006363
+v -46.615673 -36.826870 0.077120
+v -45.689407 -36.180122 5.712194
+v -44.638844 -37.025917 -0.006954
+v -45.102337 -36.536266 5.293702
+v -44.652500 -36.785896 5.527581
+v -44.650574 -38.002609 5.340413
+v -44.637218 -38.368500 -0.005686
+v -44.638206 -37.527641 -0.019667
+v -44.638638 -37.222275 0.005830
+v -18.636196 -20.273237 8.113546
+v -18.655661 -19.438391 0.407055
+v -17.742970 -19.987511 0.604467
+v -17.573725 -20.086510 0.614624
+v -17.692320 -20.676552 6.777821
+v -16.787516 -19.174681 7.926125
+v -16.477760 -18.166927 0.393246
+v -16.570810 -18.111889 0.387074
+v -17.167559 -19.034203 8.435761
+v -16.739544 -20.114500 6.675924
+v -16.488113 -19.450422 0.549689
+v -16.481724 -18.571640 0.459755
+v 9.223336 40.308823 14.415722
+v 9.046709 40.386696 13.424521
+v 9.079351 40.345913 12.619499
+v 8.437096 40.544712 5.856650
+v 7.685904 40.986641 5.787953
+v 6.653155 41.441959 -0.007630
+v 7.733500 40.799324 -0.173151
+v 10.025872 39.837627 14.524380
+v 9.199362 41.230087 14.254871
+v 8.846815 41.436298 12.274979
+v 9.049332 41.138477 13.417475
+v 9.331266 40.659725 15.009890
+v 7.515997 41.187225 4.830835
+v 7.513741 42.216042 4.788475
+v 6.717896 42.681545 0.319034
+v 9.997943 41.610172 14.536560
+v 10.045051 41.630096 14.565563
+v 8.566204 42.736679 5.061888
+v 6.984882 42.820065 0.356430
+v 7.510754 42.435841 3.689891
+v 8.283319 42.948357 3.243946
+v 7.842481 43.278229 0.410933
+v 11.033287 41.000053 16.135902
+v 9.430765 42.238255 4.130630
+v 9.387880 42.239914 5.184322
+v 10.059535 41.621082 14.578880
+v 8.012805 43.176403 0.386001
+v 11.095940 40.609646 16.628239
+v 10.994980 40.163242 15.907133
+v 9.074432 41.279583 1.544101
+v 9.426394 41.262516 4.163661
+v 8.442183 41.175323 -0.071696
+v 8.515486 40.934731 1.782744
+v -34.956196 40.177422 -0.500987
+v -33.809776 39.498280 -0.470717
+v -34.790619 39.694462 8.338611
+v -35.700451 40.255703 7.803688
+v -34.935963 41.506577 -0.559948
+v -34.936932 41.439209 -0.557588
+v -35.602982 41.065266 6.818802
+v -35.389992 40.875412 4.421213
+v -35.117443 41.474949 1.458728
+v -33.766228 42.162987 -0.590251
+v -34.909542 41.521378 -0.561278
+v -34.738991 41.686970 1.438806
+v -34.330711 42.021564 4.453750
+v -34.191238 41.841629 5.503449
+v -33.777115 42.055340 0.628071
+v -32.733521 41.470757 0.342842
+v -32.612770 41.484524 -0.560012
+v -32.645111 41.456490 -0.320291
+v -32.630775 40.450821 -0.513642
+v -32.635071 40.204189 -0.502579
+v -32.867825 40.166275 1.236745
+v -32.636032 40.148972 -0.500102
+v -33.778183 39.610130 0.648453
+v -34.359524 39.907375 8.018247
+v -10.099925 10.095138 0.730973
+v -9.912470 9.980782 0.720502
+v -9.782884 10.401482 3.783983
+v -9.767262 10.402712 3.849226
+v -9.570204 11.066467 8.655301
+v -9.698644 11.458367 10.589050
+v -10.194798 11.878119 11.336118
+v -10.595366 12.212112 11.909214
+v -10.624267 13.276039 12.639870
+v -10.101428 11.350504 0.869246
+v -10.100456 10.450912 0.772511
+v -9.803802 13.657302 12.172260
+v -9.055697 11.956612 0.909003
+v -9.577125 11.656535 0.900522
+v -8.890929 12.976670 10.919583
+v -8.000815 11.326255 0.860099
+v -8.882266 11.855066 0.919706
+v -8.854154 11.932837 10.545860
+v -8.804845 11.827109 9.989220
+v -8.681523 11.870590 8.583839
+v -7.998509 11.151904 0.841344
+v -8.862477 12.553307 10.613953
+v -9.631263 11.496964 10.588675
+v -9.515807 11.415980 9.977074
+v -9.234293 11.668313 10.353732
+v -45.114437 -15.572170 -0.042126
+v -44.811863 -15.746995 -0.046022
+v -44.043842 -16.190826 -0.042152
+v -44.422478 -16.009956 7.182649
+v -45.115688 -14.338161 -0.001295
+v -44.047680 -13.720819 0.031067
+v -44.424335 -13.938557 0.016248
+v -43.644447 -14.450100 9.043489
+v -42.976650 -14.337231 0.036538
+v -43.534412 -15.478311 7.559373
+v -42.973934 -15.573041 -0.000078
+v -9.354712 47.628826 11.731418
+v -9.877417 48.482574 -0.519166
+v -9.217359 48.098652 -0.482848
+v -8.812337 47.863968 -0.480599
+v -8.566321 47.193230 11.264091
+v -9.356153 48.553902 11.736105
+v -9.698664 49.314716 3.717127
+v -9.879851 48.726494 -0.566216
+v -8.890349 48.855927 11.462314
+v -8.927985 48.852962 11.305131
+v -8.782489 49.318726 8.113261
+v -8.632264 49.405243 8.116037
+v -8.690195 49.702431 5.350441
+v -9.309213 49.345383 5.343640
+v -8.225121 49.583961 3.749555
+v -7.751694 49.233025 4.538152
+v -7.747362 49.747208 -0.886330
+v -7.818208 49.788864 -0.890314
+v -7.758368 47.692112 10.789084
+v -7.756632 47.852394 8.487059
+v -7.757159 48.475754 11.077021
+v -7.757302 48.293579 10.790951
+v -7.750429 48.425194 0.260418
+v -7.749749 48.488068 -0.642589
+v -8.135651 48.260906 -0.576448
+v -8.433160 48.032204 0.248859
+v -8.636108 47.605793 4.719729
+v -7.894418 47.773003 8.485889
+v -19.811914 32.410782 6.650311
+v -18.926586 32.566479 9.167872
+v -19.773796 33.105610 9.424143
+v -20.193039 32.628883 6.670962
+v -20.811497 33.102665 2.582956
+v -20.717377 32.989223 3.206015
+v -20.631939 33.041546 3.768109
+v -19.822111 34.074348 9.083756
+v -20.893665 33.037643 2.042714
+v -20.065210 33.436977 0.400941
+v -20.544579 33.151440 0.391252
+v -20.722700 33.124912 1.789496
+v -19.016235 34.519039 8.477599
+v -18.151806 33.979805 8.212011
+v -19.001713 32.824413 0.320150
+v -19.571852 33.152557 0.362262
+v -19.008459 31.559305 0.217965
+v -18.110588 32.995899 8.561995
+v -37.235146 42.442329 5.502128
+v -37.480709 42.031242 -0.499348
+v -37.315258 41.935547 -0.501158
+v -36.207508 41.867493 5.703167
+v -36.871536 42.197342 5.121737
+v -37.217216 43.653313 5.905301
+v -37.477146 43.377380 -0.451925
+v -37.480759 42.277023 -0.507849
+v -36.317520 44.046597 -0.500788
+v -36.614864 43.875000 -0.488372
+v -36.206520 44.225060 5.280115
+v -35.156574 43.372124 -0.617662
+v -35.167633 43.378510 -0.617540
+v -36.022182 43.875000 -0.530888
+v -35.168495 43.581642 4.213486
+v -35.167648 43.167271 4.069848
+v -35.167652 43.165943 4.071707
+v -35.156456 43.266476 -0.614010
+v -44.086067 -42.170631 7.388274
+v -44.104614 -41.375092 0.044653
+v -43.875004 -41.508183 0.047016
+v -43.050091 -41.984623 0.039475
+v -43.225246 -42.856075 9.142080
+v -44.093540 -40.854416 5.338541
+v -44.107246 -40.143936 0.024181
+v -43.161282 -40.381172 5.874472
+v -43.048061 -39.520462 -0.001534
+v -43.875004 -40.007706 0.022068
+v -43.971397 -40.780663 5.321852
+v -42.283085 -41.094372 7.161233
+v -41.988152 -40.134842 -0.011187
+v -42.765152 -40.642811 6.073954
+v -41.992817 -41.367947 0.009404
+v -42.363525 -42.347057 9.041908
+v -29.372665 -13.523045 13.283715
+v -29.878136 -13.300193 10.447119
+v -30.734276 -13.072797 0.023901
+v -30.667723 -13.112301 0.016904
+v -28.509138 -14.017876 13.856653
+v -29.259340 -13.586392 13.418515
+v -29.419422 -12.601646 12.995301
+v -29.786243 -12.387085 10.935246
+v -29.787844 -13.283062 10.952179
+v -29.376760 -13.256665 13.253094
+v -30.623047 -10.679424 0.192021
+v -30.687183 -10.713195 0.185491
+v -29.785093 -12.151885 9.771497
+v -28.775402 -12.273110 13.113262
+v -28.602575 -12.191298 13.176421
+v -27.760284 -12.709546 13.695940
+v -29.563858 -11.315996 0.184486
+v -30.194927 -10.937811 0.236517
+v -29.598751 -12.520277 0.005837
+v -27.752638 -13.034904 13.774685
+v -27.728157 -13.607585 13.995309
+v -29.633427 -12.538976 0.002847
+v -40.543003 16.734833 9.607931
+v -40.532715 16.726231 9.665777
+v -40.548260 16.735386 9.666605
+v -39.005424 16.233725 0.242101
+v -38.978764 16.218145 0.237903
+v -38.569141 15.978060 0.189634
+v -39.207840 16.105808 5.926066
+v -39.354095 16.259733 4.377624
+v -39.784756 16.655079 1.147144
+v -39.705719 16.646765 0.265244
+v -40.540771 16.977203 9.613427
+v -39.699673 17.948509 0.360937
+v -39.704838 16.762609 0.269922
+v -39.772835 17.806059 1.158506
+v -40.022591 17.892235 3.952872
+v -38.566315 18.587923 0.429403
+v -40.129906 17.907270 6.114257
+v -39.677673 18.309484 10.360060
+v -38.798298 17.770559 10.614741
+v -37.423027 17.927382 0.331794
+v -38.276943 18.419170 0.421428
+v -38.794582 17.003635 10.521320
+v -38.659100 16.945522 9.502024
+v -38.661503 16.710859 9.499928
+v -37.420753 16.618221 0.202764
+v -38.822193 17.341187 10.756916
+v -39.147194 16.139465 5.924980
+v -38.081791 16.250000 0.198402
+v -30.144171 2.693278 -0.286728
+v -29.893408 2.545890 -0.266381
+v -29.306913 2.727013 3.012204
+v -29.853165 4.393761 11.236402
+v -29.904709 4.416883 11.188135
+v -30.645424 4.835093 11.022664
+v -30.677668 5.908268 11.828277
+v -30.144283 3.943897 -0.179743
+v -30.675329 5.850784 11.771564
+v -29.109606 4.577996 0.041592
+v -29.795736 4.155491 -0.115830
+v -29.963064 6.518197 12.891045
+v -28.069826 3.971857 0.129467
+v -29.200863 6.068985 12.911714
+v -29.136007 5.041818 12.217695
+v -28.417753 3.501740 4.109410
+v -28.293694 3.857273 2.682222
+v -28.067101 3.780013 0.106696
+v -29.195433 6.007190 12.852565
+v -29.139679 5.168079 12.254062
+v -29.101444 3.119282 4.151307
+v -47.924206 43.384777 10.395414
+v -48.201637 43.544621 10.486574
+v -47.883549 43.415169 0.132880
+v -46.759087 42.765827 0.046667
+v -47.290668 43.019753 10.189825
+v -47.883175 44.706745 0.120736
+v -48.219795 44.569752 11.077585
+v -46.959206 45.260338 3.865185
+v -47.533024 44.908928 0.090097
+v -47.352547 45.072445 11.370563
+v -46.453102 44.570820 11.084583
+v -46.132439 44.625019 6.759600
+v -46.518421 44.845901 6.780518
+v -45.627388 43.411381 -0.052286
+v -45.627300 43.537525 -0.053476
+v -45.924973 43.786793 3.961387
+v -46.437374 44.202751 10.872415
+v -46.409382 43.543549 10.494880
+v -36.409412 29.862761 7.045321
+v -36.722145 30.373556 -0.284186
+v -35.650925 29.754396 -0.312426
+v -35.527943 29.419102 5.558598
+v -35.714813 29.485968 6.478286
+v -36.447517 31.001450 6.197041
+v -36.722065 30.563799 -0.274417
+v -36.344795 30.773275 8.601998
+v -35.939644 30.963589 8.969259
+v -34.584511 30.754898 8.758998
+v -34.577988 31.529297 0.589382
+v -34.590717 31.009800 6.120977
+v -35.011417 30.972664 9.083989
+v -34.579494 30.369949 -0.277265
+v -34.579147 30.570057 -0.266988
+v -34.580265 30.723391 1.936214
+v -34.585144 29.848236 7.215722
+v -34.906139 29.684723 6.903077
+v -35.113007 29.657944 5.565620
+v -46.255291 -0.112464 0.069368
+v -45.127811 -0.740520 0.074700
+v -43.766102 1.206043 10.559285
+v -44.701069 1.654868 10.275986
+v -44.822731 2.573029 9.453181
+v -46.249485 1.192679 0.078181
+v -46.248337 1.150335 0.086713
+v -43.980412 3.042916 8.909233
+v -45.136486 1.850373 0.007944
+v -43.028084 2.571667 9.210672
+v -44.007568 1.240122 0.115597
+v -44.479534 1.504095 0.113380
+v -42.935493 1.653324 10.037592
+v -44.005070 -0.057998 0.097886
+v -26.436939 29.138550 -0.014061
+v -26.254827 29.035069 0.004060
+v -25.210941 28.970942 5.850704
+v -25.158823 29.190907 8.565081
+v -26.066313 29.640591 7.758549
+v -26.119181 29.670490 7.751770
+v -26.435936 30.424467 -0.027554
+v -26.100311 30.780754 8.180990
+v -25.321667 31.070646 0.084110
+v -25.514181 30.958771 0.052985
+v -25.155901 31.337166 8.717334
+v -24.213245 30.437542 0.231200
+v -24.234470 30.810606 8.833434
+v -24.232822 29.737038 8.687845
+v -24.231325 29.696022 8.088546
+v -24.225634 30.227812 5.465657
+v -24.213121 30.340174 0.228770
+v -24.232706 29.980782 8.518081
+v -24.796738 29.372665 8.158241
+v -23.750944 25.824520 11.265359
+v -23.779568 27.052217 -0.067546
+v -22.699564 26.436565 -0.153359
+v -22.934984 25.265289 12.081013
+v -23.756571 26.979776 9.871283
+v -23.760666 26.814783 7.939450
+v -23.779795 27.174313 -0.054547
+v -23.753317 26.720484 11.050216
+v -23.753733 26.832642 10.971845
+v -22.111732 26.704809 11.953333
+v -21.792259 27.744177 4.184135
+v -21.859697 27.735683 4.486529
+v -21.619701 27.059929 -0.107298
+v -21.620110 27.393085 -0.071832
+v -22.142916 25.691858 12.642152
+v -22.143093 25.677549 12.645408
+v -35.169609 0.399258 -0.297678
+v -35.106590 0.362070 -0.296214
+v -34.269966 0.011089 5.067807
+v -34.347107 0.054808 4.998487
+v -34.741325 0.285503 4.916562
+v -33.989651 2.083431 6.765633
+v -34.168758 2.217453 5.614612
+v -34.170891 2.018020 6.598252
+v -33.017654 1.494820 6.952651
+v -33.981693 2.239693 -0.269437
+v -34.154690 2.343786 -0.273458
+v -33.090527 0.448273 6.480856
+v -33.996002 0.974592 -0.290863
+v -33.987926 1.554547 -0.269752
+v -33.036194 1.342018 6.824998
+v -35.105110 0.362883 -0.296179
+v -47.346672 26.871286 0.456704
+v -47.145515 26.752274 0.458591
+v -47.127525 26.414139 7.976804
+v -47.722855 26.533213 13.323705
+v -48.529068 26.995655 13.650266
+v -47.325089 28.093050 0.369285
+v -48.531979 27.233095 13.712466
+v -48.609455 27.869226 14.655686
+v -47.755123 28.319387 13.794281
+v -46.231953 28.701004 0.183758
+v -47.032852 28.256571 0.348148
+v -48.111847 28.120281 13.834282
+v -46.941177 27.872982 13.469886
+v -45.175400 28.074333 0.267097
+v -46.919594 26.972425 13.231267
+v -46.481651 26.939728 9.949678
+v -46.218452 27.355404 8.014700
+v -45.180107 27.969503 0.293362
+v -47.123528 26.575424 9.865208
+v -2.404335 41.662792 0.389171
+v -1.263480 40.953098 0.241187
+v -1.625627 42.058102 5.693570
+v -1.724965 42.102467 5.599371
+v -2.656647 42.740906 6.081911
+v -2.653516 43.919044 6.110789
+v -2.401898 42.992371 0.446112
+v -2.403518 42.707226 0.458268
+v -2.656173 42.753109 6.072388
+v -1.723971 44.652126 7.174198
+v -1.277385 43.636887 0.450515
+v -1.501628 43.504887 0.431263
+v -2.093956 43.171570 0.461619
+v -2.631151 43.926262 6.081241
+v -0.677232 43.947376 6.415749
+v -0.145657 42.961750 0.408243
+v -0.741393 43.979446 6.362562
+v -0.642462 42.713959 6.073003
+v -0.128265 41.611420 0.268303
+v -0.747634 41.242905 0.214720
+v -0.665589 42.693726 6.044117
+v -37.962086 -8.510085 -0.012099
+v -36.807014 -9.177528 -0.019279
+v -37.403564 -8.892568 11.363581
+v -38.309990 -8.368503 11.311959
+v -37.962612 -7.178793 0.005043
+v -38.309177 -7.319836 11.285572
+v -37.019077 -6.612441 4.027143
+v -37.630005 -6.986575 0.007925
+v -37.400799 -6.794782 11.310843
+v -36.493408 -7.319610 11.362524
+v -36.169823 -7.264917 6.998151
+v -36.566620 -7.037846 7.019653
+v -35.650276 -8.511562 -0.009287
+v -35.650398 -8.384149 -0.007647
+v -35.956184 -8.128088 4.116668
+v -36.495243 -8.303717 11.387241
+v -36.496391 -8.368556 11.402738
+v -36.716385 -8.496212 11.382718
+v -17.348364 -23.521353 3.763063
+v -17.468559 -23.325037 0.946074
+v -16.527143 -23.872810 1.002275
+v -16.417809 -23.934952 0.976026
+v -16.319572 -24.202784 5.665763
+v -17.355309 -23.410723 3.604479
+v -15.369252 -23.326784 0.927198
+v -15.369133 -23.255205 0.939242
+v -15.372941 -23.667364 5.818717
+v -7.425514 16.851871 0.778607
+v -6.344806 16.245415 0.766476
+v -4.670369 18.639025 13.658923
+v -5.560013 18.973166 13.029415
+v -5.548564 19.915983 13.083603
+v -7.443644 18.082539 0.631289
+v -7.439819 17.875000 0.661193
+v -4.633417 20.508848 13.943443
+v -6.384562 18.702463 0.460365
+v -5.422949 19.996059 13.178680
+v -3.777964 20.174692 14.645452
+v -5.305019 18.098764 0.465915
+v -3.790044 19.262770 14.505113
+v -5.284898 16.871000 0.613228
+v -5.300770 17.875002 0.498148
+v -4.605549 18.683552 13.708140
+v -46.305664 40.213982 9.588017
+v -46.424507 40.015030 6.683517
+v -45.895966 39.975628 9.568556
+v -46.321053 41.248680 9.180513
+v -46.694096 40.852673 0.056860
+v -46.695736 40.654682 0.022495
+v -46.326527 41.026329 9.053085
+v -45.579723 41.494823 -0.038222
+v -46.678402 40.861763 0.057903
+v -45.396671 41.789135 9.495357
+v -44.462181 40.846691 -0.123879
+v -44.485165 41.250702 9.191970
+v -44.482967 40.164127 8.824638
+v -44.477783 40.022060 6.748877
+v -44.461967 40.667355 -0.122214
+v -44.482883 40.369473 8.687076
+v -44.809036 39.992821 9.081903
+v -32.830956 47.443672 9.932950
+v -32.856422 48.535965 -0.150032
+v -31.778620 47.891045 0.049961
+v -31.961414 46.981598 9.549428
+v -32.015377 47.022350 9.460217
+v -32.858902 49.787472 -0.085557
+v -32.829727 48.275158 11.226525
+v -31.864716 49.738125 4.583817
+v -31.966621 49.718529 4.287549
+v -32.620384 49.919178 -0.027043
+v -32.007553 48.652233 11.997111
+v -30.869219 49.209930 4.264987
+v -30.928873 49.202415 4.532479
+v -31.168324 48.236828 11.538869
+v -30.710520 48.538048 0.314965
+v -30.710178 48.885571 0.333092
+v -31.168173 48.234280 11.534943
+v -31.158104 47.307217 11.216859
+v -30.808786 48.229832 2.705584
+v -30.807560 48.616013 2.704943
+v -31.189678 48.220905 0.194685
+v -34.375622 20.951336 8.441044
+v -35.056408 21.132154 0.152721
+v -34.919750 21.050777 0.128431
+v -33.613327 20.502707 8.504555
+v -33.827091 22.758682 7.035641
+v -34.052345 22.927235 5.588063
+v -34.055885 22.596624 7.218701
+v -32.797905 22.124130 7.727705
+v -33.856823 22.942312 -0.205167
+v -34.038586 23.050840 -0.172878
+v -33.238636 22.403664 7.090592
+v -33.858463 21.676397 -0.132273
+v -32.672775 20.987202 8.735037
+v -33.376431 20.661316 8.321271
+v -19.310198 -10.563519 -0.528201
+v -19.140032 -10.664337 -0.523365
+v -19.119362 -11.052839 8.114693
+v -19.485054 -10.979697 11.399125
+v -20.370352 -10.452008 11.301372
+v -20.301332 -9.406744 10.663136
+v -19.304539 -9.233034 -0.424525
+v -19.306593 -10.405182 -0.548532
+v -20.301750 -9.537677 10.651386
+v -19.416750 -8.897856 10.998504
+v -19.114628 -10.862136 10.347538
+v -35.891575 26.749344 -0.275877
+v -35.681129 26.626217 -0.255345
+v -35.478966 27.307167 4.675232
+v -36.097252 27.628183 4.364643
+v -36.155273 29.101126 5.776144
+v -35.881096 28.091375 -0.396358
+v -35.881813 27.625000 -0.419502
+v -36.089012 28.187639 4.228407
+v -34.719414 28.763170 -0.360233
+v -35.063854 28.563856 -0.371610
+v -33.551373 28.069529 -0.375569
+v -34.125000 28.409239 -0.376436
+v -34.117802 29.119776 6.025815
+v -34.020752 28.375051 4.953313
+v -33.549805 27.879503 -0.385276
+v -34.019089 28.469940 4.930305
+v -25.822939 20.210167 10.033135
+v -25.599579 20.070597 12.032500
+v -25.673487 20.105902 13.442753
+v -26.097401 20.350500 13.512543
+v -25.658680 21.998407 13.160189
+v -24.936775 22.343248 -0.614572
+v -24.974249 22.321571 -0.618686
+v -26.153814 21.712849 13.267927
+v -24.833261 21.524189 13.149222
+v -23.810019 21.697134 -0.651792
+v -24.968908 21.600983 13.171675
+v -24.839098 20.574032 13.227945
+v -24.488760 20.514820 8.502763
+v -23.808815 21.565720 -0.668039
+v -25.142971 20.334599 12.056735
+v -34.723328 16.966238 11.226427
+v -35.193581 17.734312 0.205200
+v -35.065483 17.660723 0.191772
+v -34.112461 17.117443 -0.001427
+v -33.875000 16.470030 11.334781
+v -34.521496 16.846775 11.283462
+v -34.753338 18.010067 10.564642
+v -35.195652 18.992573 0.209026
+v -35.193298 17.852446 0.216819
+v -34.725220 17.083527 11.186885
+v -34.112843 19.645908 -0.019711
+v -33.904896 18.579136 9.907522
+v -33.029804 17.995441 10.682834
+v -34.038391 19.603970 -0.034808
+v -33.557339 18.373835 9.936993
+v -33.029850 17.990227 10.737857
+v -33.029865 17.983217 10.743319
+v -33.032009 16.960642 11.271380
+v -33.031380 17.314190 11.264698
+v -33.032223 16.940849 11.555647
+v -34.064148 17.146015 -0.011628
+v -33.226955 16.923649 10.180936
+v -33.699169 16.580519 11.203671
+v -35.871391 51.303978 12.727075
+v -35.930000 51.336868 12.727738
+v -37.893810 49.103783 -0.168665
+v -36.729198 48.431740 -0.253417
+v -35.052372 50.828762 12.657408
+v -35.843307 52.443447 13.274298
+v -37.881119 50.471912 -0.115878
+v -34.905079 53.030590 13.791515
+v -36.715435 51.163128 -0.147449
+v -34.051544 52.550240 13.781206
+v -35.560623 50.498749 -0.231409
+v -34.110405 51.457657 13.202776
+v -35.562386 49.134487 -0.290654
+v -35.561352 49.606083 -0.266230
+v -34.065567 52.265404 13.642633
+v -36.003452 48.869244 -0.272793
+v -43.621487 7.701591 6.410860
+v -43.885513 7.259602 -0.041760
+v -43.794228 7.206046 -0.050951
+v -43.520241 7.642810 6.407382
+v -43.879971 8.606343 0.054078
+v -43.614532 8.888123 6.546019
+v -42.722145 9.275085 0.033760
+v -42.595192 9.479198 6.645527
+v -41.564236 8.603641 -0.052716
+v -42.219589 8.983125 -0.016632
+v -41.580677 8.892632 6.610957
+v -41.578922 7.708759 6.476377
+v -41.562450 7.257320 -0.119705
+v -41.648335 7.207443 -0.119929
+v -41.651680 7.666021 6.469213
+v -42.277027 -18.994503 7.636885
+v -42.296356 -18.165432 -0.016294
+v -41.168564 -18.821201 0.014590
+v -41.329708 -19.622934 8.388960
+v -42.299122 -16.850317 -0.020331
+v -42.278545 -17.916945 7.958005
+v -41.340580 -17.510225 9.010728
+v -41.258659 -16.887449 4.759080
+v -41.329514 -16.901075 4.553081
+v -42.021240 -16.688774 -0.012052
+v -42.127193 -16.750229 -0.016227
+v -40.434223 -18.148600 9.719167
+v -40.212540 -17.427378 4.328082
+v -40.296890 -17.438002 4.706313
+v -40.040359 -18.168140 0.041536
+v -40.039108 -17.781084 0.040400
+v -40.425182 -19.184536 9.417976
+v -7.833880 8.598909 10.949723
+v -7.953710 8.651740 10.277265
+v -8.748779 8.862915 0.597548
+v -8.527277 8.731668 0.582746
+v -7.835651 8.674141 10.937636
+v -6.993415 10.084025 11.123383
+v -6.850600 10.139273 11.236894
+v -7.782331 10.836468 5.249193
+v -7.788237 10.284637 7.970922
+v -8.017061 10.153774 7.999129
+v -7.754840 9.735573 10.785594
+v -7.688601 9.770581 10.791687
+v -5.880864 9.546551 11.662723
+v -7.332572 10.668229 0.787262
+v -7.771743 10.931563 0.816947
+v -6.487795 9.915451 11.486521
+v -7.363173 9.364784 0.647200
+v -5.898777 9.208352 11.552177
+v -5.848972 8.484631 11.971354
+v -17.305239 -0.810958 0.228242
+v -17.059046 -0.955597 0.207066
+v -17.041195 -1.291138 7.667659
+v -17.578733 -1.183625 12.495514
+v -18.441160 -0.691478 12.903254
+v -17.299562 0.449444 0.322948
+v -18.426628 0.253030 12.859657
+v -17.547035 0.731608 12.406009
+v -16.478001 0.999445 2.853502
+v -16.862846 0.694919 0.323201
+v -16.658756 0.250698 11.985045
+v -15.854557 0.342403 5.972002
+v -16.005144 0.429508 5.983765
+v -16.675989 -0.720391 12.031002
+v -16.395901 -0.741303 9.932241
+v -16.171280 -0.386559 8.280899
+v -15.681992 -0.097181 4.642444
+v -17.036573 -1.104926 9.847929
+v -9.987133 48.789970 -0.572327
+v -9.854227 51.008362 13.549235
+v -10.262409 51.247650 13.512308
+v -10.470299 52.134037 18.191031
+v -10.816189 52.332458 18.132994
+v -10.807470 53.078506 18.001734
+v -9.971981 50.001514 -0.807594
+v -10.148491 53.451527 17.979584
+v -8.888971 50.588219 -0.983385
+v -9.498229 53.078506 18.088692
+v -7.815941 49.959267 -0.923412
+v -9.501032 52.838730 18.130878
+v -9.152866 51.573235 14.222766
+v -9.193509 52.293495 14.654400
+v -21.331375 32.672367 10.434389
+v -20.966772 32.881603 10.157102
+v -20.049295 32.370659 9.851983
+v -20.079538 31.336252 10.259907
+v -20.235252 31.253084 10.375987
+v -50.208626 -24.470377 12.319769
+v -50.734497 -23.611458 -0.005041
+v -49.669395 -24.229452 0.019541
+v -49.418903 -24.912395 11.977969
+v -50.231834 -23.498451 11.814823
+v -50.737270 -22.375734 -0.018638
+v -50.199135 -24.334181 12.548539
+v -49.669964 -21.760036 -0.007547
+v -49.445030 -22.913952 10.730605
+v -48.612549 -23.383545 10.568686
+v -48.614967 -24.415989 11.505301
+v -49.195759 -24.803617 12.265945
+v -25.468103 -29.954908 12.512896
+v -26.645540 -31.293795 4.780623
+v -26.555826 -31.345472 4.774445
+v -26.555239 -32.225456 1.367127
+v -27.216854 -32.448338 -0.926911
+v -27.048286 -32.545803 -0.939922
+v -26.336451 -32.906208 -0.796639
+v -24.615305 -30.445827 12.455441
+v -25.192831 -30.118801 12.473316
+v -25.440254 -28.935820 12.673489
+v -27.192104 -30.630693 1.162316
+v -24.581888 -28.423290 12.712746
+v -26.332945 -30.229584 -0.769641
+v -26.941051 -30.591787 -0.781667
+v -23.747171 -28.915625 12.593465
+v -25.195734 -30.884846 -0.857233
+v -25.181583 -32.203640 -0.767955
+v -25.198517 -31.389698 -0.898854
+v -23.761097 -29.930861 12.432800
+v -23.866858 -29.995461 12.427732
+v -16.334902 49.142693 9.858041
+v -16.720800 48.496681 0.426917
+v -15.801808 47.951527 0.269152
+v -15.648480 47.860035 0.237021
+v -15.454825 48.677345 10.322698
+v -16.717009 49.742371 0.482848
+v -16.334190 49.561138 9.863053
+v -16.298054 50.187119 10.729429
+v -15.646281 50.358585 0.351541
+v -15.915442 50.203743 0.387719
+v -15.428485 50.708759 11.694550
+v -14.570616 49.730312 0.163556
+v -14.597981 50.211327 11.254963
+v -14.595640 49.208576 10.787236
+v -14.568984 48.478130 0.114544
+v -14.569633 48.970081 0.136943
+v -14.596461 49.873997 10.794165
+v -15.554204 47.914387 0.231621
+v -7.274852 6.272435 12.436129
+v -7.305138 7.571339 0.445920
+v -6.685665 7.219667 0.383081
+v -6.231509 6.964939 0.308061
+v -6.478467 5.736260 13.141999
+v -6.873158 6.001735 12.794561
+v -7.278263 7.290208 11.881432
+v -6.941455 7.477129 11.957120
+v -5.381540 8.314898 4.495932
+v -5.664932 7.173536 12.779004
+v -5.311392 8.323732 4.181390
+v -5.159634 7.982682 0.427139
+v -5.159692 8.014348 0.431006
+v -5.689477 6.180665 13.306287
+v -5.157902 7.584658 0.354224
+v -29.898825 2.287143 -0.289230
+v -28.760002 1.616849 -0.196904
+v -26.819767 0.802879 12.242919
+v -27.721037 1.327005 11.932092
+v -27.640396 2.264683 12.356512
+v -26.677505 2.647914 13.068529
+v -25.815395 2.123055 13.356381
+v -27.578674 3.485470 0.146788
+v -27.608999 2.221728 0.006125
+v -27.599186 2.691124 0.047575
+v -25.877588 1.215321 12.954708
+v -50.586842 -43.931725 0.055571
+v -49.446671 -44.603535 0.002512
+v -50.727417 -44.347366 11.505379
+v -51.650780 -43.819817 11.927397
+v -50.571274 -42.621288 0.046347
+v -50.586636 -43.875008 0.060424
+v -51.581726 -42.797382 11.285927
+v -50.476662 -42.239479 9.472506
+v -49.421448 -41.975105 0.043506
+v -51.488209 -42.748360 11.184340
+v -49.438641 -42.774960 8.697432
+v -48.282837 -42.643162 0.055440
+v -49.614532 -43.861500 9.921333
+v -48.298763 -43.959736 0.062020
+v -48.298763 -43.875008 0.069268
+v -50.346634 -44.169270 11.104097
+v -49.082680 -31.176085 -0.128940
+v -48.721394 -31.395145 -0.140866
+v -48.147808 -31.218004 3.065550
+v -48.399982 -30.448565 6.862182
+v -49.387051 -29.875538 6.738307
+v -49.376114 -28.737896 6.590449
+v -49.076767 -29.840340 -0.148688
+v -49.366211 -29.112297 6.339285
+v -47.932995 -29.189413 -0.168697
+v -49.059322 -29.830521 -0.149562
+v -48.441727 -28.032887 7.490682
+v -47.468605 -28.604179 7.536948
+v -46.783794 -29.873934 -0.202349
+v -47.388409 -29.911549 6.680363
+v -47.185295 -30.347063 4.387443
+v -47.070713 -30.018686 3.069296
+v -46.782650 -30.116907 -0.204940
+v -47.901451 -30.747683 4.431323
+v -47.559021 -30.050823 6.508787
+v -36.312359 5.069048 7.513262
+v -35.695332 4.753560 -0.308897
+v -35.673775 4.741099 -0.308396
+v -36.086208 4.938111 7.561323
+v -35.671333 7.243601 -0.354970
+v -35.685627 7.235339 -0.355292
+v -36.490990 6.819726 9.125946
+v -36.187523 6.997024 9.494574
+v -35.317291 6.494536 9.528689
+v -34.587936 6.617812 -0.308532
+v -35.250107 6.999892 -0.329626
+v -35.244297 5.476657 8.544174
+v -34.589294 5.365951 -0.290199
+v -35.441525 4.875001 -0.302930
+v -35.445675 5.346623 8.287026
+v -40.350494 -9.269688 11.248183
+v -40.830368 -8.485897 0.001454
+v -39.703716 -9.137558 -0.017924
+v -39.466667 -9.783847 11.298596
+v -40.349777 -8.251707 11.307518
+v -40.674076 -7.531355 3.715016
+v -40.831360 -8.041989 -0.003362
+v -40.350658 -9.212409 11.246733
+v -39.586205 -7.126881 5.592071
+v -40.226318 -7.496098 5.585037
+v -40.216003 -8.164626 11.226041
+v -39.467751 -7.734546 11.246918
+v -38.574963 -7.183770 0.004229
+v -38.797325 -7.054355 0.005623
+v -39.157978 -7.235960 4.118024
+v -38.583981 -8.254260 11.297468
+v -38.577263 -8.488231 -0.012228
+v -38.576000 -7.772009 -0.003347
+v -38.585812 -9.277482 11.323172
+v -39.645905 -9.104095 -0.019648
+v -21.970802 29.281651 10.234532
+v -21.015062 28.943092 10.989861
+v -23.135317 29.047993 2.562497
+v -22.070307 30.174503 9.558364
+v -23.507977 28.783590 0.111626
+v -23.508581 28.752630 0.108342
+v -22.424366 29.429346 0.138834
+v -23.317301 28.897434 0.120161
+v -21.571613 30.474501 9.620382
+v -21.359480 28.816450 0.060179
+v -21.362522 28.245840 0.014090
+v -20.168829 29.465889 11.085534
+v -21.368179 27.546925 -0.060191
+v -36.192722 1.590655 5.680729
+v -36.438553 1.179128 -0.327166
+v -36.430943 1.174751 -0.326989
+v -36.176521 1.580327 5.670162
+v -36.436939 2.500065 -0.326801
+v -36.200520 2.271391 5.469633
+v -36.184128 2.768439 5.856303
+v -35.294853 3.160641 -0.299924
+v -35.154823 3.385778 6.992882
+v -34.154884 2.504279 -0.273422
+v -34.173347 2.828823 7.210012
+v -47.114567 25.272840 12.573171
+v -47.145138 26.583923 0.470527
+v -46.074520 25.963560 0.479640
+v -46.298092 24.851217 12.098419
+v -47.115536 26.161182 12.963729
+v -46.312386 26.641306 12.889806
+v -44.991482 27.857546 0.308260
+v -45.489544 26.237167 12.420477
+v -44.999126 26.594975 0.399753
+v -44.991604 27.848320 0.310551
+v -45.476025 25.335400 12.019569
+v -42.208286 16.621185 0.287197
+v -41.061356 15.942622 0.249210
+v -39.697781 15.370575 8.991773
+v -40.647751 15.933179 9.044635
+v -38.525238 16.842093 10.504855
+v -39.880318 17.889109 0.353284
+v -38.637772 15.843356 9.734768
+v -39.899410 16.904116 0.277434
+v -39.904102 16.579430 0.264342
+v -24.527740 18.659174 13.564475
+v -24.574085 18.744291 12.239517
+v -23.398098 18.620596 -0.882562
+v -23.924976 18.296219 13.715386
+v -23.385874 19.889189 -0.859792
+v -23.385971 19.090828 -0.958773
+v -24.135405 19.405521 7.433229
+v -24.136694 19.758347 7.491819
+v -23.856129 20.117964 13.283496
+v -24.334755 19.816816 12.362057
+v -24.493172 19.760567 13.302621
+v -23.087332 19.649504 13.477308
+v -23.126514 18.738638 13.692751
+v -43.972157 46.987492 -0.221700
+v -43.838409 46.905453 -0.231909
+v -42.893459 46.334869 -0.248549
+v -43.736042 48.905800 12.437132
+v -44.561157 49.504234 13.067392
+v -43.972363 48.262772 -0.110565
+v -43.971130 47.182678 -0.228232
+v -43.971825 47.066906 -0.222472
+v -44.564011 50.169571 13.186349
+v -44.568382 50.457817 13.307542
+v -42.905621 48.881916 -0.065458
+v -43.433647 48.581470 -0.055919
+v -43.775436 50.859299 13.030235
+v -41.824444 48.229687 -0.170749
+v -42.417820 48.582180 -0.161926
+v -42.929585 50.278801 12.318834
+v -41.815304 46.960720 -0.220225
+v -42.901939 49.621155 12.032466
+v -42.894894 49.275578 11.967139
+v -42.783703 46.397469 -0.250286
+v -48.388115 17.599415 10.454988
+v -48.091049 19.571301 9.986876
+v -47.586666 19.812235 0.362670
+v -47.139267 19.040411 9.685670
+v -46.443832 19.157951 0.305958
+v -47.152664 17.963364 9.866436
+v -47.036606 17.943747 8.301072
+v -46.479149 18.805336 0.782318
+v -46.485722 17.850637 0.870966
+v -46.439228 17.842779 0.243906
+v -46.437424 18.468864 0.219542
+v -47.146347 18.511341 9.781195
+v -47.343754 17.859135 9.969632
+v -46.460213 17.830645 0.242713
+v -46.273594 38.554169 10.685622
+v -46.738453 39.313435 -0.209221
+v -45.583576 38.651508 -0.363897
+v -45.353100 38.023136 10.638886
+v -46.307453 39.693653 9.937280
+v -46.731037 40.634548 0.020205
+v -44.420956 40.643761 -0.125360
+v -44.428291 39.772812 9.062811
+v -44.423206 39.315559 -0.288235
+v -44.421616 40.273033 -0.121828
+v -44.430843 38.610180 9.842575
+v -29.688423 50.975643 14.083416
+v -30.163170 51.206821 13.952276
+v -30.490677 51.396854 13.980136
+v -30.404150 52.390343 14.528158
+v -32.616516 50.249924 -0.009024
+v -29.563288 52.919682 15.046908
+v -31.496599 50.925385 0.161232
+v -31.962103 50.648197 0.153438
+v -29.772480 52.785835 14.879915
+v -28.783182 52.525814 15.255917
+v -30.388447 50.343559 0.350128
+v -28.830353 51.570953 14.789847
+v -30.377048 49.096237 0.416205
+v -30.375778 49.656746 0.445597
+v -36.285343 21.940720 0.366754
+v -36.232216 21.909172 0.357306
+v -35.966637 22.332527 6.617380
+v -35.724190 22.314453 7.940768
+v -35.976166 22.458292 7.922811
+v -35.990372 22.999121 7.558901
+v -34.038761 23.217381 -0.182384
+v -34.055431 23.510391 6.573958
+v -34.055664 23.096275 6.878263
+v -19.108246 -12.061023 12.030490
+v -19.139942 -10.701571 -0.518628
+v -18.031389 -11.346110 -0.488688
+v -18.273993 -12.553136 12.119063
+v -19.112188 -10.988593 11.293427
+v -17.409071 -11.008686 11.470017
+v -16.915737 -10.686525 -0.625144
+v -17.408638 -11.875773 11.393257
+v -17.412510 -11.998602 11.478972
+v -34.404568 25.679270 -0.245968
+v -33.439384 25.274357 5.942294
+v -33.522377 27.728111 5.300327
+v -33.532887 27.735975 5.232798
+v -33.533028 27.722822 5.297671
+v -32.397369 27.038256 5.891796
+v -33.235252 27.685654 -0.385189
+v -33.519466 27.856518 -0.385488
+v -32.366211 25.827209 6.204982
+v -33.265892 26.350163 -0.523416
+v -33.236225 27.625000 -0.388335
+v -33.272675 26.346510 -0.524017
+v -26.605347 20.078762 13.642230
+v -26.622095 20.088545 13.644978
+v -27.403543 20.551250 13.629434
+v -26.101604 20.414307 -0.898045
+v -25.994364 20.351065 -0.901805
+v -25.973148 19.952314 7.964209
+v -26.101448 21.700069 -0.738636
+v -27.375978 21.477959 13.438376
+v -26.541651 21.940710 13.260575
+v -24.988455 22.329847 -0.618200
+v -25.968805 20.127378 10.013939
+v -8.936156 48.887878 11.489494
+v -7.307878 45.983322 -0.344882
+v -8.411240 46.644943 -0.353824
+v -9.002772 50.130001 13.072501
+v -8.935373 49.101215 11.489916
+v -8.399275 47.907406 -0.514003
+v -8.657674 50.455688 13.750487
+v -8.268003 50.746788 14.110481
+v -7.285995 48.514359 -0.674345
+v -7.607650 48.340107 -0.622135
+v -7.477534 50.269299 14.027843
+v -6.178044 47.859833 -0.658139
+v -7.114830 48.414028 -0.664779
+v -7.723530 50.429913 14.161184
+v -6.188935 46.593285 -0.479801
+v -6.185968 46.783550 -0.521735
+v -7.302345 48.980659 12.089357
+v -6.387098 46.481853 -0.470055
+v -18.205822 -17.584982 11.198298
+v -17.634575 -17.312109 0.298256
+v -17.268167 -18.046810 9.792706
+v -16.568575 -17.928566 0.356934
+v -17.365435 -17.467346 0.305739
+v -43.523327 6.636935 6.292892
+v -43.794388 7.079669 -0.059965
+v -43.573273 6.952597 -0.082038
+v -42.722454 6.461918 -0.128785
+v -42.588604 6.096992 6.261096
+v -41.648556 7.081151 -0.126203
+v -41.653442 6.630136 6.351351
+v -39.450573 -16.228188 11.222596
+v -39.558201 -16.179571 11.178172
+v -40.440910 -15.890628 10.388582
+v -40.378979 -14.813472 10.772555
+v -42.018948 -16.400101 -0.003434
+v -39.404942 -14.188917 11.573928
+v -40.902794 -15.734018 0.041100
+v -39.998669 -14.561669 11.225414
+v -38.518669 -14.610564 11.936291
+v -39.799046 -16.351152 0.047275
+v -39.794800 -17.632483 0.046214
+v -39.799015 -16.505157 0.042705
+v -38.533566 -15.614515 11.767001
+v -9.500967 10.446535 10.369212
+v -9.667579 10.167622 6.297331
+v -8.892467 10.109838 10.528238
+v -9.504388 11.101984 10.266008
+v -9.502036 11.315008 10.317306
+v -9.498058 11.406869 10.412001
+v -9.497272 11.435657 10.430393
+v -9.280249 11.558929 10.321568
+v -8.642118 11.933946 10.636120
+v -7.771873 11.020571 0.826517
+v -7.796829 11.459201 10.940628
+v -7.795373 10.480192 10.828221
+v -8.193465 10.235292 10.630728
+v -8.388412 10.120995 10.614560
+v -17.028427 -2.336446 12.267670
+v -17.058905 -1.029315 0.201507
+v -16.015127 -1.623732 0.113143
+v -16.241829 -2.751637 11.894483
+v -17.030420 -1.423851 12.233480
+v -16.239513 -0.905281 11.822170
+v -15.153664 -0.399614 4.613462
+v -15.431556 -1.314222 11.438174
+v -15.150301 -0.399189 4.598377
+v -14.969730 -1.016671 0.115215
+v -14.969721 -0.767474 0.133986
+v -15.435598 -2.161824 11.472845
+v -15.436654 -2.249909 11.492058
+v -15.458732 -2.262404 11.488168
+v -33.003708 -18.648148 -0.344647
+v -31.932003 -19.284340 -0.459932
+v -31.855583 -19.329138 -0.446927
+v -29.673254 -20.244671 13.545076
+v -30.754728 -19.639673 12.276190
+v -30.766188 -18.612583 12.182349
+v -31.526438 -18.167898 7.912811
+v -31.902420 -18.532549 5.818200
+v -32.999226 -18.465174 -0.324832
+v -29.685820 -18.261900 13.374712
+v -30.969547 -17.301317 5.124928
+v -30.975449 -17.852789 7.844900
+v -31.808205 -16.684919 -0.209306
+v -31.777653 -16.696627 -0.068306
+v -31.799603 -16.680202 -0.209360
+v -28.670986 -18.899366 14.570905
+v -30.659042 -17.363277 -0.322603
+v -30.875000 -17.233971 -0.299809
+v -30.956608 -17.185095 -0.291826
+v -31.264181 -17.000879 -0.261738
+v -30.666922 -18.696224 -0.291644
+v -30.668819 -17.862114 -0.361819
+v -28.670139 -19.361418 14.608254
+v -28.682104 -19.849926 14.552068
+v -28.805996 -19.910160 14.498063
+v -30.669350 -18.697599 -0.291412
+v -21.723862 31.198034 0.262835
+v -21.632343 30.732929 9.697914
+v -22.559738 31.285955 9.589841
+v -21.718918 32.515575 0.372870
+v -21.723036 31.404722 0.279537
+v -22.583725 32.364868 9.992401
+v -21.696791 32.880863 10.493610
+v -20.566412 33.164070 0.392968
+v -21.557570 32.797798 10.509817
+v 6.185346 35.354652 -1.218035
+v 7.304761 34.722481 -0.968856
+v 6.662908 36.680935 8.694697
+v 5.743962 37.240646 8.740544
+v 5.706420 38.462868 9.676264
+v 6.192426 36.672985 -1.265107
+v 6.192704 36.638618 -1.274157
+v 6.192568 36.550873 -1.278466
+v 6.191845 36.456860 -1.270268
+v 6.541151 39.101643 10.527851
+v 7.310219 37.353294 -1.051015
+v 6.400562 36.798508 -1.231335
+v 7.419394 38.577423 10.492367
+v 8.426950 36.709248 -0.894376
+v 8.426803 35.398609 -0.836381
+v 8.430303 36.287613 -0.914408
+v 7.502726 37.380009 9.595394
+v 7.621664 34.917053 -0.916445
+v -28.952854 -1.746807 11.147616
+v -28.074163 -2.196086 0.008296
+v -28.030260 -2.221498 0.016235
+v -28.619715 -1.939927 11.263683
+v -28.018764 0.405481 -0.203125
+v -28.050920 0.386869 -0.208943
+v -28.972227 -0.088577 10.637256
+v -28.602644 0.126570 10.937960
+v -26.882902 -0.253056 -0.110181
+v -27.724174 -0.395245 11.236513
+v -26.894955 -1.566420 0.052370
+v -26.882742 -0.278502 -0.112337
+v -27.714241 -0.742117 11.102538
+v -27.728634 -1.425514 11.296658
+v -28.357552 -1.789392 11.258714
+v -31.485598 -13.380294 12.384183
+v -32.008358 -12.526458 0.132342
+v -30.895748 -13.166058 0.025636
+v -30.646318 -13.846107 11.933302
+v -31.478582 -12.415627 12.589305
+v -32.010864 -11.233281 0.127356
+v -32.010509 -11.375000 0.129749
+v -32.007870 -12.224652 0.156386
+v -31.478331 -12.447824 12.593879
+v -30.892847 -10.591335 0.164120
+v -31.026695 -10.667088 0.150503
+v -31.322639 -12.321814 12.558687
+v -30.637115 -11.903258 12.372653
+v -30.240332 -12.114326 12.161579
+v -29.787437 -12.430085 12.706389
+v -29.789238 -13.411725 12.800065
+v -30.875000 -13.154084 0.025552
+v -30.599234 -13.818054 11.920365
+v -5.196743 10.196240 12.182876
+v -4.346627 9.794304 12.464314
+v -5.144319 11.185246 12.506167
+v -6.948061 9.440168 0.654014
+v -4.265328 11.740966 13.090279
+v -5.873727 10.081833 0.706298
+v -6.529886 9.690228 0.679601
+v -3.451222 11.339526 13.354809
+v -4.825040 9.471913 0.598140
+v -4.837353 8.211047 0.444649
+v -3.480748 10.381615 13.051747
+v -21.259438 48.199863 11.590630
+v -21.696545 47.468132 0.908033
+v -21.125002 47.134285 0.866315
+v -20.622217 46.834270 0.760953
+v -20.428480 47.651928 10.850906
+v -21.241072 49.194683 12.010951
+v -21.689072 48.719101 1.053987
+v -21.688658 48.679550 1.065290
+v -20.617472 49.337502 1.007995
+v -21.311493 48.936497 1.012641
+v -20.411882 49.668045 11.715199
+v -19.544487 48.711845 0.845475
+v -20.566427 49.308582 1.020483
+v -19.569498 49.151459 10.982164
+v -19.567190 48.130032 10.537811
+v -19.542616 47.456665 0.699112
+v -19.544224 48.512890 0.836416
+v -38.695324 -41.987068 -0.174653
+v -38.520191 -42.086945 -0.188183
+v -37.616932 -42.628998 -0.005840
+v -37.821285 -43.645725 10.614221
+v -38.667999 -43.159042 10.643870
+v -38.672649 -42.039333 9.641924
+v -38.697872 -40.731796 -0.138426
+v -37.783249 -41.390251 8.691668
+v -37.615845 -40.117573 0.003204
+v -38.372826 -40.539600 -0.152688
+v -38.360970 -41.805302 9.260337
+v -36.894409 -41.919121 8.770186
+v -37.432278 -40.230083 0.040252
+v -36.673084 -42.360222 3.299250
+v -36.936401 -43.055695 9.715117
+v -37.151646 -42.366829 0.089990
+v -37.043968 -42.400154 1.223792
+v -37.506367 -43.431911 10.248990
+v -46.389629 -32.745338 7.699675
+v -47.347191 -32.182961 7.576147
+v -48.721855 -31.576906 -0.138193
+v -47.594143 -32.244099 -0.175660
+v -46.368214 -32.758400 7.684377
+v -47.446213 -31.013960 6.987938
+v -46.672825 -30.511051 6.591906
+v -46.503540 -30.443090 6.714200
+v -45.521954 -31.034023 6.750853
+v -46.451744 -30.315615 -0.214646
+v -45.465054 -32.194103 7.252117
+v -46.465256 -31.612724 -0.228025
+v -45.529545 -31.104790 6.699137
+v -46.314590 -32.727726 7.677401
+v -46.590439 -31.682182 -0.225879
+v -37.537354 5.432134 7.069375
+v -36.873013 5.362257 -0.343561
+v -36.050842 4.875001 -0.317182
+v -35.772770 4.710311 -0.310719
+v -36.606434 4.877055 7.176723
+v -37.098129 5.171981 7.079980
+v -36.855022 6.638106 -0.384137
+v -36.872826 5.377174 -0.343776
+v -37.593964 6.183589 7.794502
+v -37.604790 6.507444 7.955748
+v -35.738461 7.266588 -0.358493
+v -37.332211 6.678172 8.458193
+v -36.798912 7.000903 9.117293
+v -40.914333 -7.991897 -0.001957
+v -40.626762 -6.274239 11.614029
+v -41.454727 -5.682844 12.190496
+v -41.453876 -4.751402 12.249433
+v -40.910202 -6.753671 0.009756
+v -40.913673 -7.836329 -0.003669
+v -40.710548 -4.465284 11.512039
+v -40.620117 -4.413157 11.513955
+v -39.856171 -6.149860 0.012215
+v -39.928562 -6.190480 0.016540
+v -40.762508 -4.436875 11.819695
+v -39.785648 -4.946649 11.163201
+v -38.798687 -6.776637 0.009197
+v -38.934677 -6.695980 0.010069
+v -39.604958 -6.298349 0.015136
+v -40.610004 -4.395800 11.723096
+v -39.801262 -4.937499 11.162309
+v -39.784176 -5.893263 11.187115
+v -39.935383 -5.981090 11.182919
+v -41.126034 -4.228117 12.069550
+v -41.601990 -3.954030 12.250370
+v -41.223167 -4.108195 -0.080113
+v -40.103664 -4.755184 -0.068005
+v -41.222591 -2.816312 -0.098873
+v -41.222252 -3.626647 -0.109969
+v -41.594841 -2.967807 12.017670
+v -40.098946 -2.167306 -0.158067
+v -40.801453 -2.512029 11.504307
+v -40.704109 -2.456384 11.389175
+v -38.970230 -2.813368 -0.216627
+v -39.205788 -2.677723 -0.219144
+v -39.796764 -2.953068 10.931290
+v -39.819355 -3.967857 11.236009
+v -38.976196 -4.110364 -0.136126
+v -39.816380 -3.362586 11.195853
+v -39.821064 -3.624389 11.259058
+v -36.161213 0.549086 5.986954
+v -36.430614 0.989110 -0.327028
+v -35.292355 0.328663 -0.300567
+v -35.174713 0.007923 5.315599
+v -34.770954 0.270531 4.885962
+v -48.190189 14.558874 10.853311
+v -48.624989 13.831007 0.227136
+v -47.553429 13.222333 0.336170
+v -47.357346 14.049891 10.548285
+v -48.194851 15.521792 10.710745
+v -48.625473 15.064661 0.178807
+v -47.555279 15.684359 0.239649
+v -47.362907 15.993658 10.258738
+v -46.802834 15.661968 10.052023
+v -46.512363 15.489083 9.924273
+v -46.488739 15.073792 0.348358
+v -46.511524 14.507319 10.067828
+v -46.487370 13.845412 0.396550
+v -46.873260 14.312649 10.287051
+v -9.435281 33.204788 13.622202
+v -9.708565 33.363693 13.683614
+v -8.503062 33.236893 0.232214
+v -7.435857 32.609348 0.153244
+v -8.931795 32.908558 13.588868
+v -8.500730 34.457573 0.359190
+v -8.501019 33.397358 0.229545
+v -9.710033 34.246830 13.810660
+v -8.947280 34.678925 13.907450
+v -7.423257 35.060757 0.289348
+v -9.652829 34.278862 13.807183
+v -8.175437 34.231487 13.857554
+v -6.329955 34.441933 0.058809
+v -6.384361 34.471924 0.078844
+v -6.337424 33.637264 0.045899
+v -6.326266 34.125000 0.004078
+v -8.164274 33.344872 13.698143
+v -6.343274 33.208908 0.053056
+v 9.367020 46.458164 0.642698
+v 10.316065 45.915401 0.812111
+v 10.394545 45.866302 0.800219
+v 9.440670 48.776814 15.161510
+v 8.696528 49.323101 15.770367
+v 8.657347 50.300213 16.721996
+v 9.379538 47.640499 0.463431
+v 9.328665 50.708260 16.847761
+v 10.416652 48.234905 0.467362
+v 9.062655 50.574306 16.944668
+v 11.446232 47.638542 0.588695
+v 10.905734 47.954933 0.554707
+v 9.967090 50.300507 16.582977
+v 10.035603 50.254078 16.530674
+v 11.430695 46.464996 0.815924
+v 10.124340 49.266083 15.563217
+v 10.756358 46.080509 0.827091
+v 11.344637 46.418770 0.829153
+v -42.818310 -28.720354 -0.365903
+v -41.674660 -29.380842 -0.440856
+v -42.209614 -29.125301 9.766695
+v -42.442257 -28.989611 9.527324
+v -43.121132 -28.597115 9.490912
+v -43.151596 -27.541752 10.482451
+v -42.822189 -27.407698 -0.239679
+v -42.821861 -27.625000 -0.250401
+v -43.131920 -28.075766 9.842001
+v -43.154114 -27.630241 10.564355
+v -42.212475 -27.002535 9.821287
+v -41.686623 -26.751345 -0.212575
+v -42.484631 -27.160616 9.666907
+v -41.296154 -27.533056 9.883047
+v -40.544849 -27.406076 -0.250183
+v -41.661171 -27.349213 10.356627
+v -41.333824 -28.587048 10.391116
+v -40.535469 -28.721981 -0.376685
+v -40.544048 -27.625000 -0.260988
+v -41.288025 -27.684387 9.773418
+v -41.315128 -28.220676 10.138970
+v -41.658920 -28.762976 10.591981
+v -35.870708 21.091541 8.820369
+v -36.231258 21.680435 0.370212
+v -35.161739 21.069611 0.178622
+v -34.979237 20.572037 8.891134
+v -35.904160 22.193745 8.080154
+v -31.203835 47.009544 0.128691
+v -30.116476 46.455891 0.335496
+v -28.291544 49.064632 14.386686
+v -29.123240 49.375427 13.792031
+v -29.117186 49.793743 13.822501
+v -29.077623 50.289688 14.072132
+v -28.246197 50.821644 14.735838
+v -30.099440 48.909946 0.466669
+v -27.483950 50.463623 15.069819
+v -29.034891 48.355221 0.668476
+v -27.775785 50.584141 14.861874
+v -29.037651 47.138130 0.604654
+v -27.486996 49.619179 15.015085
+v -35.475803 26.959496 4.762985
+v -35.681072 26.615868 -0.253647
+v -33.519474 27.862015 -0.385206
+v -33.533260 28.104347 5.202581
+v -25.957603 18.732965 13.614861
+v -25.994282 20.306162 -0.907368
+v -24.893764 19.673382 -0.943934
+v -25.173384 18.282202 13.587413
+v -25.419598 18.431253 13.525578
+v -25.959711 19.655973 13.540036
+v -25.167547 20.147764 13.332237
+v -23.798939 21.560034 -0.668368
+v -24.689240 19.882380 13.252627
+v -23.796497 20.300640 -0.824409
+v -32.948273 16.800783 11.744851
+v -33.894363 17.044794 -0.046014
+v -31.935516 16.223019 12.513144
+v -32.307022 16.445646 12.631531
+v -32.107647 18.372444 11.315207
+v -33.879028 19.697931 -0.068456
+v -30.994583 17.666475 12.924242
+v -32.759186 19.029911 -0.295257
+v -32.769592 17.701946 -0.283459
+v -30.913038 16.925566 13.580697
+v -30.956888 16.648287 13.273089
+v -25.289307 -22.712114 15.296290
+v -25.874340 -22.368542 15.349685
+v -24.479332 -22.515274 -0.216305
+v -24.375002 -22.577057 -0.214015
+v -23.446951 -23.134480 -0.013996
+v -25.119242 -22.799999 15.005511
+v -24.455240 -21.294842 -0.331841
+v -25.856628 -21.539059 15.256259
+v -23.394644 -20.695333 -0.234963
+v -24.375002 -21.249985 -0.338763
+v -25.110239 -21.125158 15.094975
+v -22.363827 -21.319973 -0.012280
+v -25.060698 -21.153749 15.090400
+v -24.184498 -21.527586 13.600972
+v -24.180769 -22.404732 13.498027
+v -0.303760 34.785023 8.246343
+v -0.500025 34.934830 8.442104
+v -0.071708 33.104668 -1.221658
+v 1.084580 32.415066 -1.189210
+v 0.462927 34.311886 8.170229
+v -0.491517 36.021767 8.344023
+v -0.063674 34.446079 -1.288018
+v -0.068156 33.346577 -1.280325
+v -0.491901 35.371922 8.298219
+v 1.088725 35.112610 -1.251602
+v 0.607771 34.830086 -1.289804
+v 0.452362 36.559273 8.329296
+v 2.249036 34.421558 -1.284730
+v 1.227818 35.025890 -1.290338
+v 1.406638 35.983501 8.235486
+v 2.253320 33.065392 -1.275227
+v 1.417929 34.856632 8.155394
+v 1.433998 32.595501 -1.273040
+v -34.169830 39.797215 8.121559
+v -34.170559 41.854385 5.656455
+v -34.034668 41.932312 5.542511
+v -33.156715 41.370018 6.580015
+v -33.922096 41.863976 5.607370
+v -32.631588 40.206188 -0.502669
+v -33.230179 40.307358 7.570870
+v -33.450577 40.179668 7.554432
+v -9.488353 8.744871 10.637803
+v -9.914196 9.440413 0.657374
+v -9.465912 9.181824 0.634072
+v -8.830887 8.815889 0.592747
+v -8.615587 8.228892 10.871067
+v -9.497036 9.766532 10.476350
+v -15.207047 1.337039 11.224901
+v -14.304169 0.814741 11.154211
+v -14.708736 0.998565 10.991395
+v -16.861467 0.788311 0.330179
+v -15.209412 2.386637 11.185615
+v -14.595517 2.743001 11.034121
+v -14.463223 2.814125 10.901524
+v -14.343215 2.882749 10.853582
+v -15.709613 1.473246 0.332893
+v -16.393764 1.066443 0.331598
+v -14.814691 2.609726 10.981717
+v -13.383076 2.438110 11.304903
+v -14.575454 0.817150 0.233010
+v -14.625003 0.846599 0.241174
+v -15.495986 1.349952 0.315463
+v -14.197017 2.779215 10.749000
+v -14.091682 2.725734 10.775776
+v -14.581775 -0.532700 0.132089
+v -13.367932 2.208441 11.437637
+v -13.355581 1.429211 11.527261
+v -14.625003 -0.558536 0.135329
+v -13.888935 1.073513 11.222110
+v -33.086205 -18.414095 -0.315536
+v -31.791500 -18.064419 11.594971
+v -32.580070 -17.566809 12.054031
+v -32.577560 -16.643955 12.088195
+v -33.079372 -17.176659 -0.184884
+v -33.080032 -17.323742 -0.196580
+v -32.583450 -17.212917 11.960843
+v -32.017765 -16.563211 -0.189109
+v -31.786285 -16.191036 11.866573
+v -30.956615 -17.179510 -0.291380
+v -31.176191 -16.556911 11.532597
+v -30.986343 -16.656960 11.757826
+v -30.985449 -17.578764 11.848725
+v -31.456482 -17.887463 11.344218
+v -31.535820 -17.931952 11.366651
+v 7.536171 40.321796 12.819620
+v 8.301222 39.868706 12.917739
+v 8.551476 41.113785 -0.087526
+v 8.542851 43.481564 0.423765
+v 9.011903 41.016708 14.327679
+v 9.589628 42.896278 0.278053
+v 8.995586 40.669250 14.702044
+v 9.020409 40.190235 14.055658
+v 9.594918 41.707626 0.057444
+v 9.415750 41.604630 0.044708
+v -37.315201 41.881321 -0.499283
+v -36.159332 41.198166 -0.511419
+v -35.863594 41.215469 6.678233
+v -36.072311 41.333359 6.475575
+v -34.284554 42.619366 4.756982
+v -35.001709 43.173485 -0.615582
+v -34.809536 42.941998 4.449778
+v -35.007515 41.843052 -0.569375
+v -29.271069 -1.564492 -0.200224
+v -28.148075 -2.237430 0.005776
+v -29.389254 -1.989179 11.153276
+v -30.157520 -1.522996 10.878982
+v -30.249815 -1.461545 10.720986
+v -29.241098 -0.238100 -0.368004
+v -30.159857 -0.398210 9.851658
+v -28.093695 0.412247 -0.212394
+v -28.892948 -0.042008 -0.356305
+v -29.469189 0.003837 10.248728
+v -29.289957 0.112535 10.476958
+v -29.186924 0.043827 10.566253
+v -45.342693 -19.474735 -0.021561
+v -45.269199 -19.518703 -0.020348
+v -44.187553 -20.164694 0.004437
+v -44.545788 -19.071629 5.397925
+v -45.197052 -18.776930 4.803853
+v -45.543449 -18.616919 4.507956
+v -45.335888 -18.130655 -0.060330
+v -45.547710 -18.159128 4.640794
+v -45.610481 -17.119375 6.121520
+v -44.628223 -16.459299 6.639004
+v -44.182831 -17.471832 -0.066736
+v -44.399284 -17.596712 -0.071907
+v -45.163025 -18.032265 -0.063297
+v -43.640930 -17.017807 6.875024
+v -43.029484 -18.151527 -0.035126
+v -44.370575 -16.654278 6.259684
+v -43.026714 -19.501347 -0.008689
+v -43.027733 -18.651751 -0.033572
+v -43.606621 -18.257917 6.537781
+v -44.492603 -19.034342 5.425959
+v -28.155643 -32.998989 12.510229
+v -28.725742 -32.067833 -0.851079
+v -27.640911 -32.692394 -0.934593
+v -27.361408 -33.454433 12.408697
+v -28.723570 -30.817698 -0.747875
+v -28.153849 -32.227768 12.584636
+v -28.154137 -32.082569 12.583891
+v -27.636585 -30.191656 -0.728147
+v -27.358353 -31.618999 12.554510
+v -26.561983 -32.076260 12.483999
+v -27.036980 -31.805290 12.544585
+v -26.563553 -32.993324 12.395482
+v -45.763073 45.704823 11.740923
+v -44.953888 45.174961 11.438336
+v -47.532982 44.930214 0.089893
+v -45.665504 46.777779 12.359926
+v -47.533146 44.970879 0.087894
+v -44.793640 47.313831 12.672155
+v -46.440426 45.615097 -0.007390
+v -44.384953 47.054211 12.523938
+v -44.019905 46.792126 12.245568
+v -45.348370 44.986172 -0.089960
+v -46.415264 45.600845 -0.008147
+v -45.342766 43.707199 -0.078424
+v -44.024498 46.478443 12.193261
+v -44.067627 45.747421 11.771609
+v -36.731514 30.569277 -0.274167
+v -36.336430 31.230661 9.381396
+v -36.727383 31.818638 -0.210001
+v -36.259384 32.315449 11.236026
+v -35.469734 32.789436 12.127251
+v -35.414146 32.821983 12.148687
+v -35.650764 32.441551 -0.174445
+v -34.576424 31.820744 -0.202759
+v -35.047230 32.597672 11.846042
+v -34.605125 32.325222 11.429599
+v -34.599396 31.247639 9.596086
+v -34.574764 30.572613 -0.266842
+v -25.971365 28.717878 0.033915
+v -25.090923 28.197561 0.026522
+v -24.362663 27.892042 4.695767
+v -24.714268 28.205456 8.653731
+v -26.255327 28.884874 0.005600
+v -24.694487 29.312857 8.732476
+v -24.712715 28.373880 8.657550
+v -24.583374 28.471729 9.378916
+v -23.687704 29.825291 8.922626
+v -22.585320 29.137897 10.000705
+v -23.888454 30.144775 0.238284
+v -24.045391 30.238832 0.250889
+v -22.481264 27.998056 10.851433
+v -23.340260 28.996647 4.393780
+v -23.696693 28.704540 1.761689
+v -23.915621 28.831795 0.124414
+v -23.909496 29.094831 0.152295
+v -23.898743 29.636961 0.195869
+v -24.375002 28.580837 0.106334
+v -24.094652 28.481590 1.782637
+v -23.944626 27.271185 -0.041140
+v -24.073084 26.877270 10.745407
+v -24.843157 27.365696 9.984984
+v -24.775013 28.363024 9.350500
+v -23.942524 28.508101 0.090468
+v -24.841642 27.415640 9.974369
+v -24.035217 26.900545 10.771548
+v -17.732927 38.060841 0.056982
+v -17.202894 37.723751 -0.057045
+v -16.583721 37.378937 0.110598
+v -17.023874 38.721954 6.737414
+v -18.062653 39.469727 7.496293
+v -18.062819 40.640072 7.597776
+v -17.722208 39.385647 -0.070385
+v -16.551563 39.998440 -0.373554
+v -16.748156 39.883762 -0.384893
+v -17.038218 41.104771 6.953388
+v -16.007057 40.453201 6.588626
+v -15.418256 39.361469 -0.065618
+v -16.925901 41.029125 6.871786
+v -15.956034 39.172642 6.062921
+v -15.434546 38.054470 0.175908
+v -15.965680 39.970291 6.138455
+v -8.485228 28.008303 -0.039725
+v -7.415339 27.390509 -0.127467
+v -8.086838 27.711271 12.685486
+v -8.353829 27.865469 12.702641
+v -8.880325 28.169094 12.820593
+v -8.488746 29.235273 0.074808
+v -8.488620 29.193159 0.070722
+v -8.884336 29.074280 12.951165
+v -8.628586 29.221992 12.936266
+v -8.103946 29.525562 13.011922
+v -7.316219 29.075169 12.962128
+v -7.304125 28.167793 12.799009
+v -7.220778 27.502705 -0.122511
+v -35.008728 -6.773695 11.411694
+v -35.905476 -6.286048 11.361401
+v -35.905888 -5.259748 11.335525
+v -37.629684 -6.927482 0.008686
+v -35.015453 -4.729001 11.359892
+v -36.488400 -6.248409 0.018828
+v -34.128384 -5.215702 11.409751
+v -35.355854 -6.884359 0.012026
+v -35.353195 -8.203847 -0.004961
+v -34.122108 -6.234108 11.435676
+v -48.541813 16.512625 10.708834
+v -48.568657 17.663877 0.081582
+v -47.514240 17.042297 0.189758
+v -47.710854 16.064083 10.407543
+v -48.333824 16.399380 10.642528
+v -48.544273 17.496836 10.537604
+v -46.849213 17.601377 9.781826
+v -46.461063 17.648981 0.249756
+v -46.858631 16.598917 9.936785
+v -35.628101 -43.024380 9.169362
+v -36.184898 -42.932724 0.285199
+v -36.077042 -42.996307 0.290206
+v -34.679878 -43.582443 9.248114
+v -35.781921 -41.853535 8.274297
+v -34.947433 -41.227020 7.430835
+v -33.933826 -41.843830 7.757102
+v -34.956638 -41.053547 0.094730
+v -34.458805 -41.521828 7.477322
+v -34.951733 -42.364090 0.219278
+v -33.812500 -43.026287 8.739186
+v -34.510624 -43.464127 9.084188
+v -26.556158 -18.485102 -0.504884
+v -25.523483 -19.095768 -0.502543
+v -25.493052 -19.113791 -0.501875
+v -27.237724 -18.764833 15.167708
+v -27.369158 -18.687647 15.179704
+v -27.945242 -18.338993 14.994986
+v -26.538088 -17.255882 -0.552215
+v -26.539520 -17.604034 -0.579896
+v -27.943808 -17.500851 15.084044
+v -25.457932 -16.649244 -0.566266
+v -27.860600 -17.452791 15.121118
+v -27.553122 -17.282286 15.054677
+v -27.218185 -17.090261 15.162711
+v -24.392025 -17.264444 -0.664047
+v -24.916403 -16.961185 -0.622441
+v -26.486721 -17.515400 15.127301
+v -24.374218 -17.274506 -0.667994
+v -24.372982 -17.468878 -0.693874
+v -24.372921 -17.464855 -0.693983
+v -26.471104 -18.020519 14.967160
+v -26.480043 -18.356876 15.005319
+v -24.398066 -18.512323 -0.595334
+v -24.375000 -17.554836 -0.686118
+v -24.373024 -17.470728 -0.693710
+v 8.807338 -42.019909 0.659818
+v 9.135812 -42.211491 0.695578
+v 9.878892 -42.665379 0.650544
+v 9.220268 -40.655758 10.566581
+v 8.356087 -40.091755 10.841042
+v 8.368156 -39.474838 10.624569
+v 8.368193 -39.713692 10.603899
+v 8.613365 -40.038094 5.132642
+v 8.821688 -40.805321 0.442664
+v 8.344742 -39.464043 11.145390
+v 8.951073 -40.733574 0.430422
+v 9.015238 -39.819603 5.071543
+v 9.595366 -40.136803 1.636503
+v 9.813101 -40.011299 1.641121
+v 9.892259 -40.191257 0.449314
+v 9.073839 -40.663956 0.426946
+v 9.007112 -40.704559 0.414222
+v 10.172533 -39.394394 9.073626
+v 10.023862 -39.082447 11.078823
+v 10.025739 -39.083622 11.078268
+v 10.952393 -40.801792 0.605837
+v 10.045481 -39.982220 10.892165
+v 10.051666 -40.115578 10.827502
+v 10.959612 -42.062389 0.577814
+v 10.950262 -41.200077 0.647194
+v 10.464142 -42.369736 0.482854
+v 6.268466 -3.311996 10.808226
+v 6.030889 -3.175313 10.923291
+v 6.349209 -3.304858 0.562049
+v 7.484565 -3.961220 0.614614
+v 6.942973 -3.702509 10.948825
+v 6.353408 -1.990772 0.425386
+v 6.348256 -2.953010 0.593084
+v 6.041413 -2.117744 10.580743
+v 6.987281 -1.573665 10.103372
+v 7.500712 -1.328405 0.306503
+v 6.443784 -1.887020 10.239216
+v 8.638680 -1.989188 0.418225
+v 7.648176 -1.961561 10.243222
+v 7.907372 -2.112792 10.281780
+v 7.874777 -3.179039 10.721386
+v 8.621671 -3.305276 0.647622
+v 7.903374 -2.208314 10.335692
+v 8.078602 -3.614612 0.703164
+v 36.585995 -27.140490 11.896968
+v 36.084442 -26.321299 0.142227
+v 36.534508 -26.578993 0.076143
+v 37.158703 -26.939262 0.048334
+v 37.414513 -27.636711 12.260674
+v 36.346107 -25.659521 6.320168
+v 36.084511 -26.076517 0.154073
+v 36.578152 -26.737944 11.729490
+v 36.572784 -26.163034 11.627231
+v 36.816345 -26.003729 11.472515
+v 37.285831 -25.729576 11.449643
+v 38.229919 -26.051512 10.416049
+v 37.991714 -25.671614 7.884783
+v 37.480991 -25.716698 11.481812
+v 38.228798 -26.184429 11.818273
+v 38.227676 -27.085321 11.070251
+v 38.229286 -26.180277 11.053148
+v 38.226807 -27.165543 12.222406
+v 37.224987 -26.900799 0.044980
+v 38.048050 -27.119410 10.065519
+v 9.735956 -37.588966 11.431141
+v 9.461515 -37.901039 9.628881
+v 10.134066 -38.285912 9.592430
+v 10.216658 -38.619598 8.478503
+v 10.567956 -38.117413 11.183364
+v 8.048145 -38.225220 0.318260
+v 8.048404 -38.285439 0.321321
+v 8.408539 -38.000465 2.689150
+v 8.527815 -38.144226 3.478757
+v 9.249865 -37.702042 8.229032
+v 9.770379 -36.558990 11.634832
+v 10.621256 -36.055473 11.593773
+v 9.154783 -37.568211 0.302555
+v 8.552131 -37.927414 0.286276
+v 11.447286 -36.568657 11.350107
+v 10.397188 -37.996201 1.599369
+v 9.594904 -37.537216 1.645231
+v 9.359801 -37.680050 0.317227
+v 11.428436 -37.600498 11.143411
+v 10.594011 -38.935585 3.388955
+v 10.593004 -38.208344 3.402534
+v 40.967636 35.071964 7.524249
+v 40.683014 34.595493 0.568214
+v 41.802094 33.942150 0.490169
+v 41.931679 34.489056 7.239038
+v 40.683620 35.889286 0.544821
+v 40.683552 35.878510 0.543488
+v 40.996544 36.221474 8.198111
+v 41.805676 36.540363 0.676660
+v 41.957478 36.784435 8.582786
+v 42.921471 35.895638 0.648243
+v 42.902565 36.228001 8.311961
+v 42.905567 35.082596 7.642341
+v 42.916946 34.770798 3.086602
+v 42.922401 35.280560 0.572353
+v 42.140739 34.136559 0.459008
+v 42.618980 34.600395 3.123330
+v 30.654263 25.716129 12.604204
+v 30.622112 27.094900 -0.123286
+v 31.748800 26.450211 -0.190091
+v 31.489067 25.157948 13.308024
+v 31.468704 25.170776 13.298210
+v 30.619461 28.400858 -0.084826
+v 30.621452 27.396425 -0.135306
+v 30.650745 26.779255 12.044718
+v 31.748915 29.067728 -0.127276
+v 31.510923 27.258512 12.224114
+v 32.344715 26.673742 12.860054
+v 32.883217 28.425695 -0.235659
+v 32.093807 26.839087 12.736083
+v 32.881821 27.117729 -0.301125
+v 32.324165 25.644861 13.286358
+v 32.751236 27.041460 -0.296176
+v 46.970654 -7.641132 -0.036902
+v 48.066246 -8.285910 0.054689
+v 50.872986 -9.463393 18.050066
+v 50.038380 -8.993626 17.178560
+v 46.978485 -6.396965 -0.029014
+v 46.979252 -6.737550 -0.014874
+v 49.943062 -8.365686 16.626730
+v 49.918713 -8.116764 16.483217
+v 50.666763 -7.741900 16.653666
+v 48.076996 -5.804032 0.010709
+v 51.481457 -8.250130 17.460161
+v 49.164337 -6.459781 0.101455
+v 50.976566 -7.933961 16.907761
+v 49.160007 -7.696679 0.152391
+v 51.570766 -9.097966 18.181570
+v 48.855404 -7.863242 0.141465
+v 14.741309 22.584236 7.189221
+v 15.384423 22.516590 0.013134
+v 16.537319 21.833857 0.038125
+v 15.769199 21.987490 6.936907
+v 15.400162 23.851746 0.005038
+v 14.651806 23.721331 8.329248
+v 16.569456 24.509560 0.021910
+v 15.543335 24.252476 9.190948
+v 17.726271 23.828838 0.055272
+v 16.799677 24.374243 0.026894
+v 16.534775 23.692970 8.964148
+v 16.670586 22.566084 7.850973
+v 17.709991 22.488480 0.062507
+v 16.936031 22.056217 0.043890
+v 11.523290 -8.718661 0.476047
+v 12.590288 -9.384946 0.322048
+v 11.830034 -7.065217 11.768243
+v 11.007058 -6.512845 12.123385
+v 11.032123 -5.659082 11.638201
+v 11.521748 -7.462301 0.615302
+v 11.007362 -6.495430 12.118074
+v 11.028513 -5.825819 11.704422
+v 12.571652 -6.863709 0.602672
+v 11.316652 -5.508636 11.572479
+v 11.388714 -5.473487 11.540200
+v 11.824278 -5.164681 11.854902
+v 12.589034 -5.568049 12.299724
+v 13.635253 -7.507909 0.476063
+v 13.113935 -7.193581 0.525375
+v 12.164850 -5.320601 12.265401
+v 13.654685 -8.776865 0.309380
+v 13.642748 -7.898664 0.407537
+v 12.669926 -6.665345 11.426218
+v 12.532359 -6.787947 11.245085
+v 37.836296 10.325006 0.232487
+v 37.942715 10.263472 0.240057
+v 37.274445 10.582692 12.991449
+v 36.995033 10.744800 12.868496
+v 36.832596 10.838204 12.956601
+v 37.953709 12.793331 0.030302
+v 37.470753 12.514288 0.038165
+v 37.839722 12.728538 0.234983
+v 36.744892 12.163541 13.124027
+v 37.279667 12.471351 12.891814
+v 39.042591 12.158311 0.186893
+v 37.381401 12.415857 12.836917
+v 38.081730 11.995907 13.146545
+v 38.074524 11.056859 13.243709
+v 39.034145 10.894670 0.300797
+v 39.034618 11.375000 0.294399
+v 39.567669 19.634295 12.799148
+v 38.988094 20.580925 -0.784243
+v 40.152679 19.912607 -0.921772
+v 40.437130 19.137077 12.657791
+v 39.175919 21.512096 3.669505
+v 38.995697 20.927002 -0.591073
+v 38.996597 21.910425 -0.528895
+v 38.991840 21.920990 -0.640248
+v 39.568199 20.640732 12.853707
+v 40.290115 21.920700 5.639315
+v 39.645882 21.549103 5.632242
+v 40.439419 21.154762 12.767010
+v 39.001671 21.926666 -0.640191
+v 41.315842 20.918291 9.889006
+v 40.739571 21.837353 3.765287
+v 40.698502 21.816673 4.233567
+v 41.313656 20.658936 12.625101
+v 41.095840 22.016754 -0.297177
+v 41.323929 21.878296 -0.238709
+v 41.324348 21.927969 -0.762745
+v 41.134785 22.036364 -0.741231
+v 41.312927 19.742956 11.201997
+v 41.314560 20.656418 11.184736
+v 41.311897 19.647676 12.570441
+v 41.324284 21.890175 -0.766877
+v 40.433510 20.074474 -0.920175
+v 41.307755 20.577999 -0.909606
+v 40.302635 19.977547 -0.610300
+v 41.238815 19.728893 10.787420
+v -7.902826 -43.306145 4.534101
+v -7.818056 -43.289848 4.780551
+v -6.853104 -43.842216 4.727623
+v -6.592010 -43.468983 6.737934
+v -7.412601 -42.748703 7.753422
+v -7.309120 -41.550083 8.408591
+v -8.624978 -42.823147 -0.237738
+v -8.629395 -43.083149 -0.260984
+v -6.416254 -41.037292 8.091183
+v -7.495728 -42.150818 -0.220315
+v -7.874509 -42.375252 -0.207080
+v -5.587096 -41.706646 7.100594
+v -6.382581 -42.788055 -0.285926
+v -5.636468 -42.559383 6.617407
+v -5.973892 -43.346703 3.473890
+v -5.974054 -43.444412 3.469318
+v -6.388383 -44.107342 -0.381097
+v -6.382191 -43.121410 -0.292812
+v -6.584763 -44.226379 -0.381956
+v -6.433237 -44.134708 -0.382983
+v -6.112555 -43.197041 6.565414
+v -6.777779 -43.832733 4.389862
+v -14.634329 -45.228046 13.776871
+v -15.214746 -46.199688 -0.408127
+v -14.850952 -46.403812 -0.343764
+v -14.145154 -46.814476 -0.377757
+v -13.878108 -45.687416 13.530198
+v -14.615330 -44.329739 14.215539
+v -15.212144 -44.963291 -0.381009
+v -15.212645 -45.353092 -0.381733
+v -15.215040 -46.090042 -0.418594
+v -14.144137 -44.344944 -0.324772
+v -14.934719 -44.803135 -0.390058
+v -13.861244 -43.890110 14.408485
+v -13.079198 -44.961170 -0.373065
+v -13.935128 -44.465199 -0.317798
+v -13.115083 -44.330402 14.171434
+v -13.077694 -46.194855 -0.378533
+v -13.078797 -45.242302 -0.398267
+v -13.112936 -45.229122 13.731948
+v -14.007294 -46.735420 -0.391654
+v -13.471146 -46.423084 -0.376069
+v 32.824265 3.243701 12.113815
+v 32.793175 4.576918 -0.193143
+v 33.880318 3.939368 -0.112669
+v 33.664886 2.867547 11.082842
+v 32.823975 4.110874 12.779883
+v 32.790562 5.842928 -0.175839
+v 32.792580 4.875001 -0.180205
+v 33.880653 6.465947 -0.064331
+v 33.639343 4.631443 12.459706
+v 34.966431 5.818461 0.040751
+v 34.497593 4.293161 11.442251
+v 34.523781 3.396241 10.730478
+v 34.963268 4.557018 0.022119
+v 34.963688 4.875001 0.036026
+v 5.144089 -9.420095 -0.061663
+v 6.291608 -10.097512 -0.043640
+v 8.390466 -10.978027 13.413186
+v 7.530373 -10.472157 13.329707
+v 7.582215 -9.524232 13.592583
+v 5.170690 -8.113680 0.049526
+v 5.150895 -9.106169 -0.032627
+v 7.630108 -9.967099 13.873534
+v 8.400023 -9.035223 13.386058
+v 6.346738 -7.498790 0.190766
+v 6.293567 -7.526342 0.183148
+v 9.302103 -9.587844 13.836956
+v 7.485132 -8.183945 0.225137
+v 6.920791 -7.844473 0.216122
+v 9.353844 -10.271156 14.267805
+v 9.359873 -10.485677 14.327076
+v 9.373711 -10.566016 14.435427
+v 9.370401 -10.588284 14.412302
+v 7.455809 -9.475402 0.093782
+v 7.470901 -8.772267 0.158806
+v 9.236097 -10.643007 14.283987
+v 8.873934 -7.285206 0.439376
+v 9.926373 -7.908236 0.457301
+v 8.581076 -7.639162 12.539950
+v 8.350162 -7.497604 12.424470
+v 7.810344 -7.173335 12.307290
+v 8.876451 -6.069086 0.563761
+v 8.874901 -6.541733 0.521794
+v 7.853802 -6.247300 11.939010
+v 8.691693 -5.783382 11.737188
+v 9.924809 -5.474439 0.718527
+v 9.987001 -5.511128 0.721341
+v 9.044711 -5.997405 11.814598
+v 10.007289 -7.862216 0.469080
+v 10.007294 -7.862213 0.469081
+v 9.063320 -7.379556 12.436036
+v 9.063291 -7.379570 12.436042
+v 23.414700 -45.093758 0.399279
+v 24.087194 -45.500000 0.386384
+v 24.305820 -45.638359 0.343528
+v 24.427109 -45.708431 0.360839
+v 24.536457 -45.774708 0.357393
+v 24.062445 -44.328381 7.493979
+v 23.096991 -43.736206 7.567526
+v 23.421852 -43.795795 0.348929
+v 23.420713 -44.068573 0.351390
+v 23.131807 -42.727589 6.878752
+v 23.620279 -43.164680 3.087016
+v 24.351858 -42.736519 3.136694
+v 24.536753 -43.156845 0.352993
+v 23.312473 -42.650444 6.739779
+v 25.154760 -42.891640 6.007362
+v 25.653944 -43.817211 0.365909
+v 25.541405 -43.750393 0.367250
+v 24.456150 -42.471249 6.065983
+v 25.095879 -43.921009 6.721624
+v 25.659288 -45.129070 0.361365
+v 24.817690 -45.610672 0.368037
+v 46.001457 -44.247780 7.155744
+v 45.866940 -44.170219 7.188885
+v 46.081093 -44.257374 0.218218
+v 46.183670 -44.316570 0.202721
+v 46.200138 -44.363483 7.325487
+v 46.082558 -42.927570 0.170500
+v 46.081184 -43.875004 0.215147
+v 45.890388 -43.005775 6.425518
+v 47.052498 -42.348656 3.677610
+v 46.566483 -42.646301 0.480121
+v 47.231323 -42.263229 0.265362
+v 47.247452 -42.255524 -0.042377
+v 46.499172 -42.657131 5.825564
+v 46.945248 -42.399887 5.724042
+v 47.427006 -42.700779 6.154615
+v 47.260941 -42.263187 -0.044118
+v 48.066414 -43.659447 4.570695
+v 47.914024 -43.043739 6.626092
+v 47.849712 -43.994377 7.493510
+v -8.951090 -51.409969 14.253173
+v -9.571753 -50.396229 -0.293201
+v -8.445842 -51.049519 -0.266862
+v -8.137614 -51.889866 14.447744
+v -9.574290 -49.090836 -0.298404
+v -9.573093 -49.541523 -0.289063
+v -8.971758 -50.429230 13.808307
+v -8.446650 -48.438087 -0.305437
+v -8.530883 -50.158112 13.672480
+v -8.167634 -49.869453 13.014600
+v -7.319750 -49.096554 -0.285318
+v -7.330409 -50.361542 13.059846
+v -7.322084 -50.401939 -0.258296
+v -7.332371 -51.109165 14.069977
+v -7.332989 -51.409058 14.206209
+v -8.004901 -50.796074 -0.254061
+v 41.350357 -2.351577 6.652679
+v 41.558060 -3.190788 3.851178
+v 42.019871 -2.530630 7.406921
+v 41.273300 -2.307481 6.656855
+v 40.358040 -1.663019 2.632302
+v 40.455994 -1.781075 3.280702
+v 40.539856 -1.729713 3.832451
+v 40.890316 -2.059219 6.150331
+v 40.764721 -1.229915 5.303667
+v 40.133003 -1.841089 1.152723
+v 41.052094 -1.362654 -0.044601
+v 40.667091 -1.592283 -0.057712
+v 40.601234 -1.602091 0.459255
+v 40.989315 -1.094071 5.344611
+v 41.806915 -0.584021 5.767213
+v 42.142593 -1.982391 -0.086930
+v 42.902370 -0.949526 6.968008
+v 42.976925 -1.927473 7.626335
+v 42.138271 -3.269327 -0.167431
+v 41.856735 -3.440897 -0.177247
+v 42.791981 -2.049300 7.534644
+v 9.209692 0.567681 0.091561
+v 9.426846 0.442534 0.094130
+v 10.421888 0.381411 5.667188
+v 10.472836 0.596431 8.320556
+v 9.541132 1.122524 8.191715
+v 9.207124 1.840278 -0.009077
+v 9.527057 1.780869 7.827485
+v 9.536708 2.190152 8.051694
+v 10.455322 2.708331 7.408575
+v 10.311213 2.476634 -0.096746
+v 10.327898 2.633584 7.352736
+v 10.431392 2.693672 7.366651
+v 11.417800 1.841203 -0.030262
+v 10.517669 2.357662 -0.094304
+v 10.530239 2.665586 7.419630
+v 11.396680 2.212457 8.530266
+v 11.397290 1.166687 8.801300
+v 11.399439 1.107798 7.940858
+v 11.404886 1.616932 5.429713
+v 11.417916 1.733962 -0.024703
+v 11.396880 2.125322 8.490993
+v 11.397245 1.376347 8.714501
+v 10.842337 0.789194 8.009533
+v 10.647912 0.692181 8.236365
+v 16.959761 19.656740 0.057463
+v 17.131924 19.558739 0.042474
+v 17.074080 19.270958 3.048438
+v 16.959623 19.337952 3.041183
+v 16.547924 19.404987 4.642638
+v 16.387590 19.502840 4.594979
+v 16.084133 19.671289 4.661511
+v 16.072462 20.171915 0.040206
+v 16.218452 20.087118 0.043360
+v 16.069853 21.407284 0.032406
+v 16.084402 20.653156 5.673261
+v 17.133030 22.027321 0.049425
+v 16.944197 21.917397 0.044908
+v 17.009712 21.089838 6.449549
+v 18.195097 21.405048 0.081935
+v 17.457325 20.844677 6.354821
+v 17.931580 20.547726 6.490360
+v 18.195820 20.182777 -0.029164
+v 18.193781 21.010595 0.084159
+v 17.954687 19.643154 5.853553
+v 17.958172 19.555107 5.761211
+v 17.268423 19.638550 0.036285
+v 17.791353 19.946743 -0.016230
+v 17.427336 19.297533 5.160777
+v 19.771460 -7.580162 13.725311
+v 19.067690 -7.269886 9.775902
+v 18.303251 -7.066846 0.469135
+v 18.523846 -7.198665 0.412889
+v 20.706705 -8.114422 14.408266
+v 20.205395 -7.834507 13.800333
+v 19.714375 -6.589711 13.377081
+v 19.277552 -6.334206 10.923908
+v 19.275957 -7.230364 10.940855
+v 18.382967 -4.816706 0.967305
+v 19.277998 -6.244133 10.478236
+v 19.830282 -6.520575 13.348655
+v 20.724102 -6.250538 14.434820
+v 18.625383 -4.680114 0.947562
+v 21.689537 -6.857722 15.605389
+v 19.714705 -5.331850 0.810964
+v 18.949148 -4.875000 0.958433
+v 19.656708 -6.580693 0.463402
+v 21.679413 -7.756422 15.590477
+v 19.181253 -6.834379 0.404777
+v 7.434209 -29.806290 -0.452355
+v 7.582436 -29.893946 -0.451941
+v 7.602612 -30.273214 7.980874
+v 7.068823 -30.166451 12.775044
+v 6.204025 -29.676895 13.274449
+v 7.454511 -28.526039 -0.518179
+v 6.212295 -28.742517 13.299410
+v 7.084614 -28.268707 12.826302
+v 8.232653 -27.981077 2.567861
+v 7.847673 -28.285711 0.036680
+v 8.252388 -28.079132 -0.562785
+v 7.917688 -28.749647 12.751185
+v 8.857824 -28.642443 5.721736
+v 8.710810 -28.557405 5.733222
+v 7.445749 -28.460760 12.618146
+v 8.507307 -29.334688 8.286768
+v 9.012325 -29.036009 4.531368
+v 7.895342 -29.701284 12.837082
+v 8.258038 -29.728365 10.119335
+v 7.606962 -30.097891 10.033653
+v 7.177743 -30.110823 12.715858
+v 10.901415 -18.593739 -0.691933
+v 11.131221 -18.738338 -0.731846
+v 12.003068 -19.235065 -0.564615
+v 11.259139 -16.965149 10.635785
+v 10.386126 -16.391951 10.934130
+v 10.903561 -17.287827 -0.630407
+v 10.905014 -17.933872 -0.716698
+v 10.901608 -18.241802 -0.666787
+v 10.393842 -15.410612 10.844818
+v 11.211123 -14.845659 11.358693
+v 12.002689 -16.645155 -0.558924
+v 11.375000 -17.004623 -0.559809
+v 10.730316 -15.246144 10.695968
+v 13.104696 -17.293531 -0.519179
+v 12.371232 -16.869923 -0.616684
+v 12.054991 -15.347211 11.343869
+v 13.105470 -18.579988 -0.472718
+v 13.107159 -18.136904 -0.510970
+v 12.156510 -16.534872 10.239536
+v 12.156468 -16.545139 10.240456
+v 12.054926 -19.204008 -0.559289
+v 9.658630 -40.167027 0.429323
+v 9.383008 -40.007652 0.409245
+v 8.297248 -39.436665 11.158718
+v 8.347548 -38.237259 5.600968
+v 8.167131 -38.681190 11.473519
+v 8.164808 -38.311626 11.549080
+v 9.078317 -37.783985 11.502366
+v 9.664059 -37.504181 0.325660
+v 10.012012 -38.306541 11.238640
+v 10.814910 -38.170841 0.409541
+v 10.811070 -39.502316 0.461318
+v 41.601791 -50.476868 13.149088
+v 41.055935 -49.585300 0.355848
+v 41.489925 -49.837708 0.379132
+v 42.120766 -50.202988 0.377145
+v 42.397423 -50.957256 13.584416
+v 41.562565 -49.481342 12.268505
+v 41.054108 -48.351925 0.364388
+v 41.584106 -50.134605 12.747607
+v 42.199207 -49.055523 11.785340
+v 42.358799 -48.957909 11.740588
+v 42.121883 -47.742512 0.430303
+v 43.185860 -48.362976 0.436349
+v 42.288769 -47.840591 0.439250
+v 42.727051 -49.171730 11.732961
+v 43.176769 -49.441570 11.815101
+v 43.183697 -49.591831 0.405033
+v 43.176003 -49.785816 12.070755
+v 43.174305 -50.459526 12.867105
+v 21.124771 25.179611 11.729699
+v 20.907034 24.932018 10.299815
+v 20.907415 24.360594 8.087247
+v 20.192808 24.119862 5.609481
+v 19.747892 23.613934 2.687677
+v 20.776583 23.678162 5.160941
+v 21.096361 23.487038 5.112141
+v 21.970156 24.736130 11.839991
+v 21.329485 25.068775 11.743064
+v 21.086754 26.101297 11.458247
+v 20.577185 25.608299 8.109930
+v 20.907526 25.207523 10.296825
+v 19.904707 24.085054 3.710865
+v 19.431490 24.499870 0.581751
+v 19.357611 24.428392 0.096298
+v 19.356312 23.921469 0.099167
+v 21.892408 26.567949 11.241352
+v 20.912306 25.556931 3.694990
+v 20.911337 25.660086 5.522467
+v 19.473333 24.497347 0.099057
+v 21.532412 24.477692 0.155287
+v 20.830505 24.866541 0.133930
+v 20.913153 24.890646 0.474505
+v 22.732357 26.108940 11.297454
+v 22.765446 25.189411 11.574329
+v 21.521200 23.198616 0.011397
+v 21.533247 24.270552 0.156497
+v 22.763512 25.227207 11.557642
+v 21.417597 23.362251 2.127297
+v 21.131123 22.963575 0.022859
+v 45.818897 -39.526512 4.232010
+v 45.649487 -39.810112 0.091718
+v 45.717724 -39.850319 0.082979
+v 45.893013 -39.570892 4.214809
+v 45.648552 -38.477772 0.029377
+v 45.818016 -39.490513 4.209401
+v 45.837608 -38.277077 4.653200
+v 46.802834 -37.811558 -0.015433
+v 46.254665 -38.129665 -0.081313
+v 46.005928 -38.182358 4.523760
+v 46.884480 -37.680286 4.236855
+v 47.958115 -38.480183 -0.070603
+v 46.970493 -37.734745 4.121129
+v 47.949749 -38.333122 3.320373
+v 47.958302 -38.596325 -0.087424
+v 47.950027 -38.392742 3.235116
+v 47.950687 -38.664700 3.099335
+v 34.819675 -47.734207 12.742710
+v 34.788044 -46.377445 0.218432
+v 35.876087 -47.003277 0.184377
+v 35.631603 -48.219646 12.889722
+v 34.816719 -46.734703 12.366429
+v 34.785347 -45.108337 0.201238
+v 34.786560 -45.658169 0.227571
+v 34.818523 -47.430641 12.517750
+v 35.877659 -44.464581 0.168970
+v 35.647167 -46.216820 12.131397
+v 36.479168 -46.697475 12.113632
+v 36.969799 -45.101280 0.182177
+v 36.694523 -44.942684 0.190797
+v 36.966507 -46.368359 0.166220
+v 36.467251 -47.687000 12.330918
+v 36.337955 -47.765152 12.366971
+v 44.089649 32.638081 7.899891
+v 43.461346 32.980824 6.835314
+v 43.263058 33.096298 6.773005
+v 42.139812 33.591511 0.469569
+v 43.244125 32.937088 0.392741
+v 44.454765 32.429199 8.154761
+v 43.379230 34.155712 7.392863
+v 43.296741 35.476997 0.613772
+v 44.492630 34.582142 8.299049
+v 45.610130 33.879536 9.644524
+v 44.400497 34.814171 0.582568
+v 44.905251 34.331242 8.423222
+v 44.367973 33.552799 0.425356
+v 45.655319 33.073601 10.034837
+v 45.621624 32.824097 9.800932
+v 43.701393 33.195984 0.350734
+v 23.584230 14.138809 -0.266943
+v 23.610222 14.123345 -0.264743
+v 23.582472 14.100407 0.638487
+v 23.640471 14.066996 0.618232
+v 23.659685 13.705940 8.646131
+v 23.526545 13.732569 9.841915
+v 22.716978 14.230029 9.410153
+v 23.606405 15.373823 -0.359314
+v 22.749470 15.224485 9.172672
+v 24.348352 15.897423 2.697475
+v 24.078848 15.684162 0.925508
+v 23.581800 15.395543 0.660364
+v 23.613129 15.377601 -0.359332
+v 23.601234 15.710238 9.373456
+v 24.374876 15.865455 2.873054
+v 23.813025 15.575505 9.487563
+v 23.662289 13.810784 9.873712
+v 43.365746 29.604624 0.242601
+v 44.424961 28.938766 0.062508
+v 43.996204 30.247017 6.517786
+v 43.084599 30.805952 6.585959
+v 43.109688 31.787081 6.110872
+v 43.362465 30.856146 0.420160
+v 43.111340 31.731949 6.069611
+v 43.922268 32.539536 7.630955
+v 44.407368 31.436739 0.327416
+v 43.395401 30.875000 0.420163
+v 45.458656 30.804562 0.243119
+v 45.343391 30.875000 0.262431
+v 44.750183 32.118187 8.249825
+v 44.827770 30.941080 7.417358
+v 45.129013 30.295158 4.016677
+v 45.465042 30.413637 0.187223
+v 44.597240 29.037697 0.062573
+v 44.759712 30.081608 4.010373
+v 44.278439 30.365648 6.337482
+v 26.695551 -20.028831 -0.143745
+v 26.732185 -20.049984 -0.147120
+v 26.751703 -20.105574 8.293436
+v 27.138693 -20.347391 11.757498
+v 27.047012 -20.303596 13.506866
+v 26.284060 -19.861366 13.250221
+v 26.694569 -18.799017 -0.111699
+v 26.288963 -18.964088 13.090638
+v 27.757938 -18.184250 -0.058426
+v 27.135048 -18.544622 -0.139050
+v 27.063591 -18.515928 13.190509
+v 28.815237 -18.800005 0.078190
+v 27.823950 -18.967548 13.448232
+v 27.812325 -19.857937 13.605018
+v 28.191240 -19.921980 8.494377
+v 28.815239 -18.957550 0.078160
+v 27.586195 -20.088655 11.781253
+v 13.358495 -44.589355 12.381381
+v 13.127701 -44.452293 12.306017
+v 12.541581 -44.099442 12.008399
+v 12.056099 -43.306492 0.630203
+v 13.114405 -43.923862 0.728598
+v 12.503674 -43.080753 11.159922
+v 12.058191 -42.091213 0.730131
+v 13.038922 -42.737564 10.877633
+v 13.322631 -42.548641 10.669339
+v 13.117319 -41.495369 0.867774
+v 12.740962 -41.711704 0.857380
+v 14.169486 -42.123333 1.024769
+v 14.158101 -42.116600 1.023718
+v 14.161551 -43.064957 10.958526
+v 14.167410 -43.330132 0.925538
+v 14.159193 -44.088745 11.820957
+v 40.717049 -45.299313 11.093454
+v 39.934669 -46.188965 5.955569
+v 40.086555 -46.276817 5.943705
+v 40.497025 -47.322426 2.781176
+v 41.552574 -45.813511 10.908483
+v 39.434608 -45.586220 2.645116
+v 40.638290 -44.384193 10.553520
+v 39.221802 -45.754616 1.245951
+v 40.179413 -45.236969 0.335728
+v 39.700764 -45.523216 0.306089
+v 39.664589 -45.528603 0.590062
+v 41.409840 -43.967735 9.809494
+v 42.268650 -44.489159 9.614800
+v 41.275707 -45.838993 0.394797
+v 42.332321 -45.419807 10.174034
+v 41.279076 -47.105000 0.386116
+v 40.820004 -47.386105 0.357644
+v 18.149242 -30.526030 0.344032
+v 18.344246 -30.637068 0.360951
+v 19.334688 -30.697908 5.908278
+v 19.354052 -30.616186 6.916730
+v 18.380558 -30.138803 5.997174
+v 18.372448 -29.691854 5.785353
+v 18.149744 -30.441988 0.353833
+v 20.304342 -29.282970 0.227866
+v 20.194159 -29.218822 0.242201
+v 19.643562 -28.639469 6.483628
+v 19.898439 -28.787251 6.464973
+v 20.288025 -28.996161 6.841208
+v 20.292307 -29.446283 5.294296
+v 20.304415 -29.337536 0.225816
+v 20.288103 -29.838659 7.229566
+v 19.529467 -30.509003 6.993380
+v 48.121372 15.794014 12.589523
+v 48.088676 17.196373 -0.355682
+v 49.159031 16.566990 -0.260737
+v 48.914814 15.351944 12.430799
+v 48.117546 16.813278 11.853072
+v 48.109795 17.215057 8.847769
+v 48.088509 17.275679 -0.355890
+v 48.408485 17.028418 11.521447
+v 49.604515 17.444277 8.358458
+v 49.142353 17.316959 10.869150
+v 49.782299 16.965908 10.737146
+v 50.218388 18.384661 0.132074
+v 50.214485 18.387022 0.131489
+v 50.222084 17.166809 -0.051722
+v 50.221573 17.336563 -0.026101
+v 50.216011 17.340923 0.110911
+v 50.219860 17.900309 0.058977
+v 49.747078 15.912212 11.522135
+v 49.730324 16.894686 -0.211680
+v 11.333445 -45.621639 13.268044
+v 9.171412 -44.668449 1.135148
+v 9.464465 -44.840714 1.167291
+v 10.295841 -45.333275 1.113817
+v 12.262156 -46.158184 13.720842
+v 11.177949 -44.539715 12.366149
+v 9.135949 -43.345310 0.898353
+v 11.996459 -44.002930 11.924499
+v 10.232566 -42.683048 0.588953
+v 9.268175 -43.270397 0.885558
+v 11.358996 -43.358814 0.527760
+v 11.296711 -43.321243 0.522071
+v 12.945791 -44.584869 12.415227
+v 11.381244 -44.683613 0.782299
+v 11.358325 -43.391659 0.524973
+v 13.056223 -45.657219 13.308859
+v 36.775829 10.928100 0.157192
+v 37.812756 10.311796 0.231172
+v 36.373425 10.599680 13.158407
+v 35.571754 11.054748 13.592673
+v 36.799252 12.137184 0.047597
+v 36.781357 11.375001 0.151561
+v 35.574303 11.923715 13.673120
+v 36.374992 12.361562 13.323277
+v 39.153923 23.050182 13.038985
+v 38.385944 23.532404 13.166179
+v 39.001404 22.164640 -0.614568
+v 38.387131 24.426929 13.214578
+v 39.147381 24.847523 13.137405
+v 40.060219 22.772345 -0.605979
+v 39.618782 22.518661 -0.611253
+v 41.133629 22.122427 -0.731756
+v 39.917641 24.377071 13.010550
+v 39.925442 23.474262 12.960521
+v 40.833389 22.106239 2.685918
+v -2.236051 -35.805351 0.216285
+v -1.151811 -36.432213 0.276494
+v -1.758149 -36.142574 11.846118
+v -2.602972 -35.656029 12.159437
+v -2.239429 -34.552826 0.326259
+v -2.612992 -35.296791 12.485581
+v -2.616212 -35.076935 12.590380
+v -2.625415 -34.709908 12.889946
+v -1.823374 -34.245384 13.090688
+v -1.163298 -33.930077 0.495682
+v -1.959713 -34.324463 13.035243
+v -0.079052 -34.553452 0.489598
+v -0.560734 -34.278545 0.529135
+v -1.004683 -34.709900 12.974086
+v -0.980701 -35.392273 12.650623
+v -0.963207 -35.653908 12.414666
+v -0.075849 -35.803886 0.446390
+v -0.081332 -34.957699 0.520346
+v 36.266697 -44.347462 11.633039
+v 35.775677 -43.545471 0.125082
+v 36.888115 -44.191093 0.154544
+v 37.128170 -44.845585 11.614741
+v 36.262009 -43.920547 11.540741
+v 36.252041 -43.319496 11.331463
+v 35.770508 -42.249886 0.057749
+v 35.772392 -42.684242 0.083836
+v 36.955025 -42.893932 11.171229
+v 36.082268 -42.828873 6.407326
+v 35.823608 -42.218864 0.055002
+v 38.000664 -42.250809 0.020772
+v 37.941376 -42.216167 0.019674
+v 37.926529 -42.822067 6.471326
+v 37.260597 -42.880844 11.161480
+v 37.288490 -42.897610 11.166847
+v 37.991772 -43.305965 11.152280
+v 37.998310 -43.547592 0.109008
+v 37.998795 -43.283974 0.082928
+v 37.989815 -44.332081 11.376071
+v 36.949467 -44.155582 0.152763
+v 37.841499 -43.637890 0.106821
+v 27.829121 -44.713459 6.959716
+v 26.822222 -45.858421 0.347370
+v 27.636139 -46.315289 0.337759
+v 27.969381 -46.503834 0.328042
+v 29.160467 -44.801174 9.498904
+v 28.112020 -44.808186 7.204539
+v 27.857508 -43.530880 7.120164
+v 26.827461 -44.527424 0.351875
+v 28.996099 -42.790798 8.233328
+v 27.971310 -43.847912 0.342891
+v 30.168726 -43.046700 10.173426
+v 29.108589 -44.487885 0.329456
+v 29.509544 -42.987186 8.674879
+v 30.257324 -43.980179 10.962911
+v 29.112606 -45.811729 0.324885
+v 30.247355 -43.657063 10.880939
+v 28.091761 -46.429192 0.332864
+v 30.104120 -44.076073 10.933923
+v 22.591106 -42.824162 0.332783
+v 23.567659 -43.386761 0.346512
+v 22.682510 -42.281231 6.799215
+v 22.418066 -42.723927 0.336301
+v 22.418934 -41.396595 0.318328
+v 22.417957 -42.564438 0.328900
+v 22.653614 -41.147469 6.057959
+v 23.567196 -40.732899 0.322463
+v 23.660723 -40.582527 5.193401
+v 24.714296 -41.393806 0.338589
+v 24.702568 -41.187683 5.091471
+v 24.702106 -42.342781 5.861170
+v 24.715870 -42.719925 0.350618
+v 41.103508 -16.845196 11.810930
+v 41.072495 -15.515312 -0.465264
+v 42.201485 -16.156952 -0.573000
+v 41.957813 -17.369291 12.090275
+v 41.100597 -15.802196 11.500709
+v 41.069912 -14.211711 -0.396052
+v 41.071400 -14.950531 -0.425681
+v 41.072258 -15.387808 -0.451983
+v 42.102821 -14.284674 4.615623
+v 42.059746 -14.292955 4.490407
+v 41.319859 -14.065871 -0.392594
+v 41.970673 -15.289329 11.474328
+v 43.143677 -14.810427 4.114188
+v 43.043350 -14.823061 4.564030
+v 42.829269 -15.833318 11.760202
+v 43.331219 -15.503011 -0.545902
+v 43.330860 -15.192183 -0.513534
+v 42.815495 -16.745560 12.029170
+v 42.814201 -16.868565 12.051570
+v 42.795795 -16.880510 12.066402
+v 35.407242 -0.470625 9.764803
+v 33.555267 0.345868 -0.628106
+v 34.672626 -0.309202 -0.440492
+v 36.144943 -0.926867 8.999250
+v 35.300564 0.581605 9.137119
+v 33.617062 1.566317 -0.317363
+v 35.887630 1.168988 7.816293
+v 35.969978 1.220689 7.783286
+v 34.742455 2.139217 -0.105296
+v 33.868031 1.682433 -0.212302
+v 36.491558 0.922907 7.094162
+v 36.739559 0.779887 6.829042
+v 35.824516 1.486901 -0.025971
+v 35.806038 0.262277 -0.081209
+v 36.824127 -0.329502 7.532701
+v 35.401707 0.046512 -0.130887
+v 47.155464 41.583584 0.001415
+v 48.281425 40.917404 0.011944
+v 46.911663 41.191376 12.314382
+v 46.060608 41.698746 12.218181
+v 46.060665 42.692307 12.342087
+v 47.186741 42.888546 -0.183633
+v 47.180523 42.537140 -0.158364
+v 46.064106 42.622036 12.294909
+v 48.349155 43.536842 -0.328852
+v 46.888302 43.170841 12.724809
+v 47.763393 42.672302 12.574703
+v 49.496010 42.869873 -0.380151
+v 47.485504 42.838017 12.543295
+v 49.456524 41.553711 -0.197090
+v 49.487591 42.470406 -0.351310
+v 47.763000 41.680153 12.492799
+v -4.744161 -47.122581 -0.289407
+v -4.500773 -47.266884 -0.277351
+v -3.902449 -47.082108 3.067374
+v -4.122066 -46.412003 6.373868
+v -4.809880 -46.140491 5.502327
+v -5.000363 -46.027843 5.491106
+v -4.959794 -45.419975 4.641001
+v -4.738638 -46.004570 -0.318673
+v -2.638450 -45.861904 -0.040245
+v -3.410528 -45.420189 -0.180484
+v -3.426136 -44.728111 5.935418
+v -3.195944 -44.828217 6.260177
+v -3.236556 -45.809513 6.764511
+v -3.006367 -46.303085 4.165924
+v -2.880281 -45.941750 2.715454
+v -2.636517 -46.024868 -0.055246
+v -3.696663 -46.689240 4.208223
+v -3.649633 -46.120583 6.457622
+v 40.085178 -3.838577 8.183453
+v 40.744461 -4.175674 -0.174443
+v 40.749859 -4.178792 -0.174622
+v 40.314552 -3.970853 8.131534
+v 40.265038 -1.879620 5.528764
+v 40.448971 -1.773127 5.566627
+v 41.343193 -2.352787 6.749292
+v 41.857204 -3.542281 -0.183592
+v 41.273384 -3.443604 7.690756
+v 41.061558 -3.999973 -0.183441
+v 41.748199 -3.580500 0.260191
+v 41.807800 -3.570792 -0.185215
+v 40.629311 -3.821191 7.562442
+v 45.541927 8.298302 0.065998
+v 46.673626 7.638451 0.163720
+v 46.852608 7.150473 8.708243
+v 46.833061 7.151649 8.933700
+v 46.861229 7.126957 9.119959
+v 46.871605 7.098663 9.615386
+v 46.508274 7.324878 9.264569
+v 46.214321 7.508149 8.975153
+v 45.928688 7.666591 9.130511
+v 45.533871 9.620890 -0.068051
+v 45.967983 8.656617 10.095407
+v 46.668011 10.280830 -0.103806
+v 46.891365 9.135036 10.558772
+v 47.802570 9.610402 -0.004936
+v 47.452755 8.835908 10.265393
+v 47.794106 8.605078 10.600863
+v 47.792725 7.815159 10.571914
+v 47.793571 7.724679 8.968961
+v 47.793625 7.687599 8.789732
+v 47.800152 8.290653 0.128539
+v 47.792809 7.863314 10.574504
+v 46.948334 7.137482 9.693976
+v 47.743446 7.672964 8.582938
+v 46.935310 6.161702 9.630196
+v 46.547356 5.720551 7.082479
+v 46.946869 5.491928 7.060829
+v 47.164513 4.612602 4.125415
+v 48.017494 5.831940 10.693006
+v 45.488678 5.850993 0.099961
+v 45.487473 5.771332 0.093818
+v 46.096596 6.144364 4.101168
+v 47.998432 7.949505 10.784197
+v 48.034088 7.972784 10.820839
+v 46.643787 6.538623 0.116080
+v 48.044853 7.968965 10.831535
+v 49.049900 7.609350 11.815814
+v 47.780483 5.883665 0.028594
+v 47.773758 4.532091 -0.076086
+v 49.047302 6.569760 11.759114
+v 47.476345 4.351473 -0.080513
+v 40.127064 1.023513 4.573366
+v 39.943081 0.715515 0.076885
+v 40.838787 0.196191 0.053622
+v 41.097168 0.046061 0.043387
+v 41.185791 0.420090 4.658933
+v 40.438194 0.816229 4.273349
+v 40.148647 1.564953 5.085841
+v 39.943596 0.874266 0.084769
+v 42.249786 2.054873 0.149882
+v 42.067577 2.160161 0.154597
+v 41.579777 2.673436 5.684184
+v 41.875008 2.491830 5.413971
+v 42.236340 2.291185 5.598828
+v 42.238277 1.082996 5.401900
+v 42.251564 0.718879 0.081717
+v 42.251369 0.860935 0.090605
+v 7.616220 -31.410372 12.862255
+v 7.582602 -29.968451 -0.448147
+v 8.674290 -30.600288 -0.445793
+v 8.422444 -31.853289 12.642205
+v 7.614221 -30.474154 12.848084
+v 7.616152 -31.306353 12.927998
+v 8.416796 -30.022776 12.984298
+v 9.510801 -29.321356 4.504019
+v 9.209987 -30.519102 13.208928
+v 9.580851 -29.312532 4.189917
+v 9.770096 -29.958466 -0.508485
+v 9.771428 -29.701208 -0.521637
+v 9.206788 -30.980337 13.252265
+v 9.216707 -31.420065 12.975058
+v 20.403894 21.580891 9.062744
+v 18.805620 22.285534 0.093530
+v 19.238323 22.030268 0.106785
+v 19.949728 21.606337 -0.030598
+v 21.418245 20.990263 9.384807
+v 18.811192 23.625916 0.086003
+v 20.561808 22.601944 9.917417
+v 21.690546 22.994263 11.034466
+v 22.644636 22.414169 11.319647
+v 21.111984 22.254457 -0.071881
+v 22.528717 21.430962 10.523340
+v 24.048903 -18.201099 0.107850
+v 24.173248 -18.274117 0.096363
+v 24.192438 -18.634867 8.117432
+v 23.589848 -18.514339 13.529540
+v 22.891666 -18.112982 13.792146
+v 22.795389 -18.061531 13.917781
+v 24.033321 -18.191742 0.104548
+v 24.064640 -16.974228 -0.091981
+v 22.801010 -17.738438 13.895654
+v 22.796524 -17.195219 14.013723
+v 23.567024 -16.765699 13.911727
+v 24.845293 -16.445444 2.489576
+v 24.453878 -16.755167 -0.083910
+v 24.361576 -17.203518 13.616950
+v 25.445753 -17.079889 5.510516
+v 25.303312 -16.997499 5.521640
+v 25.119135 -17.677038 7.904713
+v 25.574457 -17.407755 4.518860
+v 24.377378 -18.085052 13.423195
+v 24.838964 -18.119516 9.964446
+v 24.196173 -18.484339 9.879853
+v 23.680073 28.448412 0.205129
+v 23.893513 28.320498 0.207290
+v 24.232100 29.460985 8.465256
+v 24.076056 29.937113 10.814607
+v 23.214500 30.437771 10.709496
+v 23.683529 29.738308 0.236141
+v 23.683550 29.692160 0.231805
+v 23.213579 31.101269 10.785365
+v 23.185535 31.572346 11.447427
+v 24.053606 32.013523 11.152648
+v 24.768978 30.387243 0.382209
+v 24.911144 31.505440 11.151848
+v 25.870354 29.726908 0.311496
+v 25.201057 30.132391 0.392110
+v 24.100292 31.974709 11.052703
+v 24.925135 30.478107 11.036745
+v 25.011831 30.292212 10.058029
+v 25.114096 30.328266 8.892666
+v 25.872152 29.530613 0.299479
+v 24.297152 29.878933 10.045827
+v 8.575022 -17.123682 10.016502
+v 8.758474 -17.238319 11.658638
+v 8.436632 -17.052923 11.770902
+v 9.470765 -15.052689 -0.430978
+v 9.303474 -15.149492 -0.455536
+v 9.403975 -15.091135 -0.401914
+v 8.369154 -15.625161 11.780644
+v 8.680993 -15.446263 11.532120
+v 8.847740 -15.350299 11.457084
+v 9.711719 -15.830589 11.154184
+v 10.571280 -15.685308 -0.439178
+v 9.705160 -16.807444 11.242639
+v 9.882963 -16.837496 8.844515
+v 10.572138 -15.772331 -0.450755
+v 9.417831 -16.965630 11.371307
+v 45.914978 -40.344223 4.698610
+v 45.718380 -40.023117 0.090981
+v 46.805141 -40.646255 -0.048989
+v 46.899395 -40.903225 4.450558
+v 46.833939 -40.629280 -0.054268
+v 47.186111 -40.722820 4.233379
+v 47.085785 -40.782379 4.257800
+v 34.733292 25.370264 13.926950
+v 34.641113 25.412018 13.889357
+v 32.486507 22.961975 -0.260032
+v 33.579327 22.320253 -0.382567
+v 35.454540 25.000868 14.055751
+v 34.587593 26.273428 13.517012
+v 32.492584 24.246559 -0.248987
+v 35.381474 26.744041 13.493176
+v 33.582321 24.888138 -0.359510
+v 35.984013 26.458361 13.744250
+v 36.205833 26.342384 13.784419
+v 34.676311 24.263107 -0.418003
+v 34.125000 24.571510 -0.420341
+v 34.679413 22.981535 -0.429641
+v 36.231285 25.464531 13.992105
+v 34.125000 22.644848 -0.437880
+v 37.729053 -20.046120 10.776979
+v 37.556000 -20.335825 6.547570
+v 38.358475 -20.395647 10.927867
+v 37.701004 -19.100367 10.062094
+v 37.643295 -19.471151 8.659885
+v 37.456360 -20.100836 4.100520
+v 37.742146 -19.056692 11.068322
+v 38.535072 -18.644701 8.728809
+v 38.417000 -18.686331 10.074331
+v 38.589275 -18.557554 11.551756
+v 39.444538 -19.536903 -0.036715
+v 39.306717 -19.456654 -0.018411
+v 39.415462 -19.025864 11.747063
+v 39.417309 -19.996664 11.467086
+v 39.429436 -20.328901 6.612718
+v 39.444721 -19.705235 -0.028043
+v 38.791702 -20.385193 11.104311
+v 23.665083 12.764341 10.137623
+v 23.638859 13.889195 -0.245925
+v 24.342056 13.476050 -0.186788
+v 24.799330 13.208126 -0.155197
+v 24.591661 12.174934 10.636826
+v 23.638439 14.072780 -0.259803
+v 25.196444 14.206325 9.208177
+v 24.996592 14.151270 10.293856
+v 25.523895 13.799419 10.582072
+v 25.779444 14.630816 4.367443
+v 25.681044 14.618423 4.808659
+v 25.521986 14.709474 4.817386
+v 25.961132 13.882807 -0.153166
+v 25.963432 14.255579 -0.181221
+v 25.509325 12.689495 10.855348
+v 24.911432 13.272702 -0.148809
+v 38.449642 -27.296461 12.319179
+v 37.389011 -26.997892 0.037685
+v 39.366146 -27.827341 12.714072
+v 38.376602 -26.266445 11.880472
+v 39.245285 -25.784832 11.848727
+v 38.229744 -25.024923 5.322409
+v 38.224243 -25.538630 7.856113
+v 39.905785 -26.188618 12.142056
+v 40.178913 -26.358492 12.390207
+v 38.521503 -25.077887 -0.026217
+v 38.242493 -24.910439 -0.013820
+v 38.510818 -26.369785 -0.018958
+v 40.179363 -26.732090 12.418670
+v 40.209122 -27.356945 12.682014
+v 7.561162 -39.788651 0.414196
+v 8.635327 -40.423595 0.410751
+v 7.479321 -40.192375 10.793284
+v 6.609012 -39.688496 11.038603
+v 7.580859 -38.547222 0.350254
+v 6.577834 -38.722019 11.507219
+v 7.401264 -38.252827 11.689789
+v 7.266092 -38.328545 11.697180
+v 8.311804 -39.709480 11.026431
+v 8.888767 -40.283867 0.395178
+v 36.582710 -16.122732 0.417233
+v 37.579918 -16.769730 0.124002
+v 37.644108 -16.809671 0.115610
+v 36.769432 -14.140827 13.284447
+v 35.962048 -13.470681 14.420821
+v 35.812309 -12.053005 17.864296
+v 36.581795 -14.886908 0.540908
+v 35.956470 -13.223889 14.565310
+v 35.803715 -12.788167 17.993639
+v 36.466698 -11.682579 17.842300
+v 37.628044 -14.322700 0.357441
+v 37.521439 -12.811366 13.328351
+v 38.696754 -14.990587 0.045732
+v 36.763504 -11.852840 17.892101
+v 36.903717 -12.351710 14.167835
+v 38.712803 -16.243937 -0.083163
+v 37.579765 -13.814479 12.707573
+v 38.392872 -16.414061 -0.026821
+v 24.327946 23.769732 -0.224103
+v 24.357529 23.752666 -0.229739
+v 24.377253 23.696487 8.299364
+v 24.767450 23.452667 11.792144
+v 24.746853 23.462507 12.185179
+v 23.951054 23.923115 12.043653
+v 24.322763 25.000587 -0.055367
+v 23.963835 24.854515 11.627601
+v 25.388258 25.616310 -0.053612
+v 25.171694 25.491011 -0.083195
+v 24.790665 25.330851 11.349141
+v 25.599955 24.857235 11.495381
+v 26.455284 25.001801 -0.040935
+v 25.568821 23.920454 11.915302
+v 25.819033 23.878164 8.540558
+v 26.456387 24.863241 -0.055822
+v 25.216101 23.712069 11.815957
+v 18.742720 24.921509 0.076715
+v 20.043427 23.706844 10.333322
+v 19.836798 23.829395 10.269333
+v 19.184111 24.200573 10.421569
+v 18.740173 26.181299 0.069428
+v 19.222902 25.109022 11.371261
+v 19.828976 26.807631 0.095514
+v 19.417147 25.201706 11.535268
+v 20.076975 25.535378 11.934911
+v 20.801086 25.128628 11.776096
+v 20.906338 25.066507 11.784500
+v 20.915644 26.171354 0.128775
+v 20.737892 25.154230 11.893839
+v 20.906250 25.022015 11.797789
+v 20.906034 24.916630 11.844766
+v 20.905008 24.138201 11.281321
+v 20.913408 24.914221 0.135916
+v 35.109749 -39.363102 11.491786
+v 34.261047 -40.328178 5.918332
+v 34.409653 -40.414146 5.906721
+v 34.851089 -41.538628 2.505637
+v 34.468052 -41.958542 0.050790
+v 34.539474 -41.997955 0.052584
+v 36.021580 -39.879292 11.464129
+v 33.349407 -40.010433 -0.099027
+v 33.352901 -40.132786 -0.073237
+v 33.803261 -39.776413 2.887855
+v 35.167255 -38.251705 11.845842
+v 36.112473 -37.671711 12.163991
+v 34.515900 -39.318649 -0.128961
+v 34.440430 -39.363281 -0.124830
+v 33.711842 -39.798691 -0.164634
+v 37.001270 -38.175289 12.136900
+v 35.685768 -39.963634 -0.078317
+v 35.573151 -39.900928 -0.080217
+v 35.698994 -41.301067 0.001884
+v 36.967594 -39.271313 11.791101
+v 35.000946 -41.719936 0.038662
+v 17.197332 16.649923 5.434513
+v 17.184320 16.485258 3.565514
+v 16.308149 16.999393 3.654930
+v 16.158825 16.749424 0.005594
+v 17.308773 16.076162 -0.095198
+v 17.417915 16.536797 5.589068
+v 17.229750 16.632000 5.443118
+v 16.159409 16.967619 0.013444
+v 16.242441 17.108475 2.042639
+v 16.243052 17.249361 2.053470
+v 18.454187 18.184868 2.370131
+v 18.274618 18.345398 3.728239
+v 17.904959 18.559628 3.752786
+v 17.796877 18.673355 4.977997
+v 18.446487 18.320230 5.491369
+v 18.462013 16.741953 -0.147794
+v 18.461828 16.883833 -0.142652
+v 18.455778 17.083174 2.263985
+v 18.446802 17.158810 5.942996
+v 20.028183 -48.460381 11.858881
+v 19.998688 -47.195301 0.180857
+v 21.146204 -47.837250 -0.024271
+v 20.914619 -48.989437 12.010685
+v 19.996674 -45.903652 0.484649
+v 20.026276 -47.438259 11.963490
+v 21.137182 -45.239960 0.513621
+v 20.700485 -45.500008 0.546319
+v 20.167320 -47.361202 12.004216
+v 20.932928 -46.792744 11.114370
+v 21.842432 -47.319565 11.103767
+v 22.283358 -45.885071 0.381031
+v 21.587194 -45.500004 0.504445
+v 21.796410 -48.488609 12.145203
+v 22.291750 -47.180332 0.076088
+v 21.709513 -48.547188 12.241028
+v 41.550407 19.591518 12.536019
+v 42.333061 19.125740 12.407788
+v 41.563744 20.510664 12.584157
+v 42.361137 20.963066 12.503826
+v 43.143646 20.495586 12.375521
+v 41.388336 21.851839 -0.774334
+v 41.358974 20.606211 -0.909128
+v 43.128918 19.577408 12.327620
+v 19.723057 -32.383224 7.996304
+v 20.431133 -32.457703 0.095331
+v 20.956669 -32.765446 0.026893
+v 21.526674 -33.099136 -0.049404
+v 20.538977 -32.901585 8.821514
+v 19.766697 -31.500050 7.620615
+v 20.082869 -31.781874 4.061528
+v 20.333666 -31.230188 1.335481
+v 20.441061 -31.211473 0.140891
+v 20.796835 -30.970705 1.311091
+v 21.128633 -30.698786 3.761301
+v 21.544592 -30.594572 0.044452
+v 21.629389 -31.344824 7.530107
+v 22.649736 -31.228472 -0.099071
+v 22.621046 -31.212027 -0.095245
+v 21.628271 -31.453993 7.529134
+v 21.435280 -31.775408 8.946536
+v 21.394106 -32.393681 9.201907
+v 22.641935 -32.486851 -0.148312
+v 48.190704 21.782642 -0.294138
+v 48.567047 21.572849 -0.193567
+v 49.113533 21.741619 2.861390
+v 48.806004 22.679968 7.491463
+v 47.809357 23.412127 8.309993
+v 47.815762 24.232931 8.236396
+v 47.822830 24.477697 8.099911
+v 48.198475 23.094254 -0.356953
+v 48.197815 23.009716 -0.349379
+v 49.316502 23.764950 -0.194414
+v 48.238045 24.664021 7.828217
+v 48.818951 24.896053 7.296598
+v 49.858086 24.184721 6.438865
+v 50.420464 23.141979 0.083234
+v 49.853786 23.051594 6.536458
+v 50.059875 22.609697 4.209939
+v 50.165352 22.911966 2.996564
+v 50.419147 22.825428 0.111826
+v 49.364464 22.220688 4.252556
+v 36.005527 35.194546 0.460132
+v 36.072723 35.155670 0.467956
+v 35.555546 35.402718 10.336354
+v 35.541931 35.410622 10.329377
+v 35.220264 35.596054 10.415047
+v 35.562534 37.536892 10.202974
+v 36.078251 37.783241 0.362522
+v 36.016518 37.747547 0.358213
+v 35.169205 37.310284 10.333368
+v 36.497749 37.004356 10.104228
+v 37.210243 37.124779 0.494468
+v 36.305813 37.120281 10.004345
+v 36.472008 35.936264 10.451482
+v 36.639763 35.907909 8.188875
+v 36.640480 36.837639 8.179106
+v 37.209915 37.014858 0.498870
+v 36.324463 35.301449 0.485516
+v 23.243420 0.581679 7.580333
+v 22.929642 1.094179 0.226381
+v 23.217388 0.925306 0.275693
+v 24.033768 0.451322 0.301385
+v 24.200478 -0.003198 8.260027
+v 23.192430 1.783867 6.431954
+v 23.091566 2.007915 4.070478
+v 22.926050 1.470576 0.157655
+v 23.193617 1.554097 6.450249
+v 23.698277 2.157651 5.751637
+v 23.493559 2.039570 5.749388
+v 25.136150 2.385110 0.048454
+v 24.997986 2.463546 0.070078
+v 24.651171 2.288908 4.024665
+v 24.230757 2.396000 5.471827
+v 24.232254 2.395019 5.472966
+v 25.130419 1.704899 7.224439
+v 25.133797 1.095726 0.158005
+v 25.127714 0.534072 8.224599
+v 24.832220 0.916464 0.234851
+v 24.721365 0.323516 7.880333
+v 43.850044 -13.669897 10.775205
+v 43.319145 -13.295517 11.077321
+v 43.050999 -13.165789 10.999970
+v 43.059654 -12.202198 11.035280
+v 41.321590 -13.883735 -0.385310
+v 43.039127 -12.886906 10.915416
+v 44.012497 -11.579495 12.026037
+v 42.402550 -13.240224 -0.369843
+v 43.254253 -12.087510 11.017655
+v 44.422916 -11.746151 12.332176
+v 44.856022 -11.963781 12.453244
+v 43.468048 -13.850625 -0.434791
+v 42.558258 -13.328502 -0.374869
+v 43.464169 -15.111103 -0.510410
+v 44.752510 -13.049765 11.462277
+v 43.442081 -15.124494 -0.510522
+v 44.095139 -13.541995 10.583157
+v 36.735363 35.957069 10.528667
+v 36.324471 35.269222 0.486817
+v 36.814922 34.991280 0.543688
+v 37.394333 34.658424 0.562077
+v 37.586685 35.470242 10.579965
+v 37.320080 35.646187 10.818879
+v 36.723213 36.925461 10.202492
+v 37.251053 37.231838 10.269109
+v 37.572224 37.408703 9.826883
+v 37.393360 37.121132 0.511665
+v 38.458588 36.511379 0.621575
+v 38.294762 36.605648 0.616377
+v 38.437828 36.876289 9.035761
+v 38.438076 35.884075 9.429518
+v 38.460106 35.280380 0.608783
+v 46.204327 -45.349529 8.247242
+v 46.184013 -44.478199 0.203959
+v 47.301590 -45.106701 0.034990
+v 47.126793 -45.976372 9.119027
+v 48.107914 -44.185139 7.751812
+v 48.257805 -43.697487 4.106654
+v 48.155403 -43.710381 4.565813
+v 48.428604 -44.436756 -0.145825
+v 48.429943 -44.048561 -0.149136
+v 48.057968 -45.415691 8.884986
+v -4.500895 -47.532425 -0.270359
+v -3.354598 -48.208088 -0.213680
+v -1.563040 -48.959682 11.272890
+v -2.747131 -48.305618 9.571424
+v -3.015566 -47.087627 8.033247
+v -1.942371 -46.643566 8.742864
+v -2.505067 -46.841541 8.197888
+v -0.771397 -47.388363 10.527331
+v -2.172965 -46.305435 0.027496
+v -0.660286 -48.392117 11.421402
+v -0.659657 -48.484947 11.432324
+v -2.201829 -47.588539 -0.101010
+v -0.726123 -47.962097 10.902699
+v -2.542731 -47.762123 -0.197892
+v -0.655017 -48.498825 11.540800
+v 39.494961 -3.556143 -0.133448
+v 40.641804 -4.232553 -0.171531
+v 39.623505 -4.028881 8.974258
+v 38.659843 -3.468303 9.185107
+v 39.506287 -2.236830 -0.094252
+v 39.503010 -2.817593 -0.130576
+v 38.840569 -2.352841 7.310713
+v 40.064884 -1.736467 5.251848
+v 40.659054 -1.587605 -0.057393
+v 39.969593 -1.790739 5.231415
+v 41.807758 -3.584947 -0.186100
+v 41.499691 -3.757205 -0.195873
+v -5.808918 -45.325104 -0.354738
+v -5.654744 -45.417301 -0.351942
+v -5.427116 -44.650570 5.199736
+v -6.089965 -44.124207 5.986330
+v -5.802850 -43.976624 -0.376781
+v -5.802836 -44.029644 -0.381533
+v -4.651784 -43.310276 -0.337330
+v -4.917787 -43.468529 -0.369007
+v -5.279127 -43.672939 -0.356182
+v -5.247152 -42.366177 6.460549
+v -5.111098 -42.266102 6.577971
+v -3.652030 -43.875004 -0.090901
+v -4.436158 -43.436161 -0.320765
+v -4.099546 -42.875374 6.488050
+v -3.519537 -43.950806 -0.066835
+v -4.056793 -43.539539 6.029986
+v -3.517687 -44.106804 -0.081194
+v 45.153008 4.246583 0.075123
+v 46.312618 3.576984 -0.020800
+v 45.889931 3.778894 8.044576
+v 44.923237 4.340092 7.554016
+v 45.152428 5.577720 0.094076
+v 44.917591 5.482150 7.737865
+v 45.871124 6.036660 8.403426
+v 45.209225 5.610521 0.090310
+v 46.457798 5.682868 8.698974
+v 46.787457 5.464983 9.210909
+v 47.476967 4.243015 -0.088951
+v 46.817451 5.015868 8.806357
+v 46.825157 4.353181 8.702347
+v 47.360825 4.176123 -0.090397
+v 17.769127 -7.422966 13.738516
+v 17.212414 -6.513676 0.690980
+v 17.433537 -6.640851 0.671144
+v 18.243879 -7.101121 0.469577
+v 18.524567 -7.866385 13.869345
+v 17.758644 -6.530330 13.529309
+v 17.219151 -5.331969 0.898547
+v 17.759510 -6.850223 13.536343
+v 18.026905 -4.875000 0.982257
+v 17.916424 -4.937136 0.967743
+v 17.849827 -4.975693 0.968217
+v 17.911926 -6.423906 13.380375
+v 18.511196 -6.059597 13.230980
+v 18.254223 -4.741305 0.963189
+v 19.275690 -6.517935 13.366773
+v 19.273888 -7.421525 13.686315
+v 10.690988 -27.634277 13.590951
+v 9.862519 -27.247776 13.296549
+v 9.889074 -26.310701 13.450469
+v 10.729656 -25.786097 13.888683
+v 8.848292 -27.726810 -0.597045
+v 11.529500 -26.175999 14.170364
+v 9.939275 -28.337799 -0.595735
+v 9.950451 -29.593884 -0.532004
+v 11.517024 -27.087368 14.026359
+v 44.620888 -15.584996 10.576319
+v 44.160938 -16.354977 -0.664677
+v 45.259636 -16.999218 -0.771584
+v 45.468056 -16.119574 10.083241
+v 44.167896 -15.077314 -0.531934
+v 44.615219 -14.602451 10.408471
+v 45.264332 -14.443544 -0.526783
+v 44.239517 -15.035889 -0.530220
+v 44.795643 -14.501000 10.265821
+v 45.487679 -14.084446 11.105384
+v 46.359867 -15.078944 -0.611601
+v 45.957142 -14.845041 -0.572647
+v 46.330482 -14.562584 11.294785
+v 46.333828 -15.593032 10.426029
+v 46.361732 -16.357567 -0.744763
+v 45.836460 -15.925906 9.794320
+v 24.206421 -19.858707 13.084530
+v 24.173603 -18.451195 0.091733
+v 25.270330 -19.074919 -0.009050
+v 25.019255 -20.324095 13.038966
+v 24.662222 -20.104458 12.916595
+v 24.204950 -18.939283 13.282825
+v 25.017431 -18.450201 13.183054
+v 26.113348 -17.716234 4.489304
+v 25.711912 -18.813776 12.929516
+v 25.838995 -18.894564 12.973541
+v 26.204718 -17.704729 4.079606
+v 26.371666 -18.429428 -0.077192
+v 26.372452 -18.046822 -0.067306
+v 25.829021 -19.862661 13.144630
+v 25.942616 27.082890 10.839521
+v 24.047430 27.918434 0.204120
+v 24.809544 27.468840 0.227466
+v 25.195421 27.238892 0.152947
+v 26.879932 26.532206 10.953186
+v 25.970352 28.128660 10.964606
+v 25.429487 28.445023 7.927123
+v 25.055552 28.082354 5.843925
+v 24.049126 28.144178 0.207090
+v 24.047722 27.988417 0.203727
+v 26.900427 28.591408 11.193053
+v 26.935631 28.606234 11.215050
+v 25.987196 29.315926 5.120003
+v 25.981253 28.760574 7.859107
+v 27.899511 28.017031 11.641091
+v 26.377619 29.192936 0.239840
+v 26.239912 29.275414 0.253226
+v 25.998755 29.419727 0.282164
+v 26.359804 27.875425 0.195852
+v 26.360640 28.106560 0.186528
+v 27.876255 27.361120 11.512155
+v 27.851923 27.008112 11.354859
+v 25.463606 27.388441 0.143421
+v 26.082870 27.718082 0.224919
+v 27.754274 26.951511 11.372509
+v 27.225353 26.710003 11.038710
+v 8.320375 -16.927223 -0.495656
+v 8.386475 -16.966152 -0.499193
+v 8.407522 -17.361750 8.296699
+v 7.982633 -17.276768 12.112805
+v 7.131051 -16.802128 12.775235
+v 8.343157 -15.694118 -0.595030
+v 8.343418 -16.040518 -0.641333
+v 7.143393 -15.903203 12.750356
+v 8.009242 -15.440572 12.060884
+v 8.411121 -17.216711 9.994936
+v 8.381650 -17.081461 11.795371
+v -3.387315 -40.849045 -0.125474
+v -2.418925 -41.418926 -0.051243
+v -2.286110 -41.492420 -0.012394
+v -2.898655 -39.623394 9.209912
+v -3.805072 -39.064003 9.300055
+v -3.828275 -37.912899 9.911483
+v -3.384529 -39.547150 -0.078523
+v -3.809284 -38.912777 9.406229
+v -3.827480 -37.934353 9.892039
+v -2.290372 -38.896206 0.051776
+v -2.990735 -37.304050 10.596243
+v -2.107782 -37.842831 10.455359
+v -1.194668 -39.535892 0.135951
+v -2.658226 -37.516975 10.453379
+v -1.193392 -40.819530 0.176548
+v -1.190176 -40.190178 0.112930
+v -2.055103 -38.971851 9.904306
+v -2.344138 -39.184444 9.710603
+v 23.453936 18.189659 8.441339
+v 24.161026 17.828119 -0.522593
+v 24.199848 17.805670 -0.519355
+v 23.719049 18.035339 8.654819
+v 24.207846 20.393291 -0.671970
+v 24.181395 20.378012 -0.671103
+v 23.322256 19.934649 9.443231
+v 23.656080 20.129723 9.856333
+v 24.380331 20.295626 -0.700193
+v 24.369083 20.302147 -0.701132
+v 24.353035 20.311283 -0.699392
+v 24.552614 19.614305 9.850666
+v 25.334120 19.746393 -0.689949
+v 24.618086 18.569771 8.967611
+v 25.324142 18.450434 -0.555354
+v 24.621822 18.704937 8.917234
+v 25.018051 18.276176 -0.522370
+v 37.684113 -21.786236 10.499197
+v 37.247143 -21.072517 0.257933
+v 38.372448 -21.716841 0.092701
+v 38.594608 -22.322542 10.698568
+v 38.337227 -22.160452 10.409053
+v 37.901577 -21.903627 10.308926
+v 37.684841 -20.741093 10.559923
+v 37.398651 -20.105383 3.859523
+v 37.247276 -20.596815 0.280955
+v 37.685986 -20.740322 10.559005
+v 39.506210 -19.740278 -0.036248
+v 39.497181 -20.811380 11.263477
+v 39.503853 -21.057146 -0.010108
+v 39.504593 -20.634821 0.010257
+v 39.496223 -21.412634 11.089235
+v 39.495350 -21.842539 11.269878
+v 25.371023 15.319406 6.853490
+v 26.413790 15.665885 10.450491
+v 25.453995 16.080891 9.982507
+v 24.980742 15.542747 6.874640
+v 23.882769 15.597601 -0.365230
+v 23.883038 15.564247 -0.362700
+v 24.533922 15.962855 3.919408
+v 25.417162 17.082092 9.717061
+v 26.379080 17.680416 10.183248
+v 25.008320 16.266417 -0.371006
+v 25.710218 17.260082 9.783414
+v 26.122082 17.515625 9.971725
+v 27.346369 17.294661 10.938757
+v 26.135479 15.648533 -0.305044
+v 25.786247 15.843555 -0.308165
+v 27.345297 16.277853 10.896846
+v 26.153105 14.370342 -0.182350
+v 26.149345 14.693742 -0.206919
+v 27.272238 16.227152 10.836559
+v 26.420519 15.670120 10.451977
+v 36.070915 -26.068483 0.156082
+v 36.961945 -25.554924 11.315434
+v 36.534584 -25.292280 11.487854
+v 36.074909 -24.810156 0.216545
+v 36.528683 -24.328442 11.314816
+v 37.156914 -24.186777 0.117862
+v 37.362000 -23.857040 10.798929
+v 38.242382 -24.818363 -0.014296
+v 37.972221 -24.662045 -0.002262
+v 37.488415 -23.932110 10.747447
+v 38.215076 -24.338329 11.054483
+v 38.215275 -25.292795 11.448050
+v 26.732573 -20.237373 -0.152021
+v 26.910784 -20.338726 -0.168398
+v 27.673140 -20.790306 -0.069894
+v 27.812860 -20.873459 -0.048190
+v 27.547260 -22.194906 13.754775
+v 26.921566 -21.832581 13.751570
+v 26.767551 -21.737837 13.698782
+v 26.765213 -20.805826 13.531293
+v 27.550495 -20.360054 13.634068
+v 28.892727 -19.004150 0.088172
+v 28.324684 -20.852209 13.902268
+v 28.888857 -20.259918 0.087430
+v 28.315178 -21.775108 14.065372
+v 28.570627 -20.441284 0.046240
+v 27.936577 -21.990850 14.015969
+v 7.118249 -48.658920 0.833136
+v 8.220407 -49.306076 0.980709
+v 10.201551 -50.137211 13.682819
+v 10.129108 -50.096504 13.604544
+v 9.422899 -49.674988 13.766383
+v 7.153731 -47.433426 0.996393
+v 9.466826 -48.786404 13.986650
+v 10.268754 -48.356766 14.031567
+v 8.288257 -46.874802 1.304065
+v 11.027700 -48.809032 13.857823
+v 9.371002 -47.528973 1.446697
+v 9.315137 -48.721279 1.111183
+v 9.366394 -47.700417 1.423932
+v 11.013578 -49.141903 13.775126
+v 11.055595 -49.732941 14.127423
+v 8.334960 -49.247562 1.012043
+v 37.469715 -47.372868 12.114947
+v 38.535137 -47.484932 0.226608
+v 38.648067 -47.551899 0.231096
+v 39.668743 -48.157749 0.285772
+v 38.353493 -47.894684 12.098527
+v 38.549187 -46.167915 0.235089
+v 38.537205 -47.302456 0.226444
+v 37.501614 -46.350475 11.887561
+v 38.428017 -45.838413 11.639674
+v 39.696396 -45.520634 0.305855
+v 39.327168 -46.363411 11.621683
+v 40.818691 -47.511856 0.356686
+v 39.284435 -47.397305 11.853169
+v 17.782555 -29.426258 5.239056
+v 17.695414 -29.372458 5.247857
+v 17.913214 -30.303101 0.333797
+v 17.911266 -28.950451 0.490014
+v 17.693998 -29.323807 5.283356
+v 17.678404 -29.063477 5.651351
+v 17.600800 -27.807045 7.479542
+v 18.561684 -27.217773 7.687163
+v 19.045675 -28.318052 0.400302
+v 17.941973 -28.931576 0.496885
+v 18.020113 -27.557215 7.531428
+v 19.594585 -27.905313 7.009497
+v 20.192701 -29.014313 0.250012
+v 18.937174 -27.509272 7.068609
+v 47.983444 17.336441 -0.365207
+v 47.613728 17.486904 11.669067
+v 47.983536 18.642550 -0.368219
+v 47.983543 18.641468 -0.368382
+v 47.636745 18.501415 10.919847
+v 48.574753 19.038441 9.964174
+v 49.097034 19.287928 -0.001595
+v 49.498802 18.516809 9.784247
+v 50.211712 18.637304 0.168776
+v 49.440029 17.472078 10.576962
+v 50.226059 17.339226 -0.024615
+v 13.571002 -38.696117 10.542213
+v 13.143370 -37.997654 0.519846
+v 13.337498 -38.110725 0.534020
+v 14.238369 -38.638512 0.667964
+v 14.438676 -39.184631 10.230488
+v 13.578109 -37.702229 10.750754
+v 13.138430 -36.725578 0.456869
+v 13.139305 -36.817871 0.473592
+v 14.231417 -36.079304 0.336412
+v 14.447474 -37.187683 10.650810
+v 15.328441 -36.731831 0.476868
+v 14.288502 -36.113129 0.342368
+v 15.320566 -37.666737 10.339785
+v 15.326124 -38.004326 0.569971
+v 15.326637 -37.725826 0.540874
+v 15.328112 -36.906269 0.507115
+v 15.318918 -38.669823 10.127987
+v 14.625002 -38.416245 0.678640
+v 22.020704 4.959549 9.278831
+v 21.608709 4.491062 6.573238
+v 21.985628 4.275364 6.552813
+v 22.182108 3.481525 3.902774
+v 22.514872 3.957211 6.464926
+v 22.615953 4.327472 8.117702
+v 22.156996 6.082833 10.152029
+v 20.615709 4.591672 0.024430
+v 20.615908 4.569255 0.026240
+v 21.166750 4.906599 3.650181
+v 22.063375 5.711943 9.543192
+v 23.154301 6.745907 11.388269
+v 21.667946 5.212665 -0.056045
+v 23.875780 6.182144 10.616614
+v 22.728273 4.622184 -0.038632
+v 23.646833 4.856167 8.458782
+v 22.742189 3.408732 0.051778
+v 22.742077 3.484406 0.053124
+v 23.426731 4.690331 8.154817
+v 23.421595 4.545780 6.832851
+v 22.467840 3.242257 0.048943
+v 17.598635 -41.693878 9.820987
+v 17.225758 -42.318089 0.708095
+v 18.293789 -42.953377 0.506184
+v 18.453932 -42.277493 8.846624
+v 18.444626 -42.272038 8.847502
+v 17.472391 -40.819290 6.703445
+v 17.227436 -41.079327 0.712536
+v 17.229013 -41.598999 0.766592
+v 17.604658 -41.243320 9.955128
+v 17.896708 -40.650688 2.828679
+v 18.338621 -40.395042 2.841099
+v 18.294601 -40.465816 0.548538
+v 19.341253 -41.070942 0.513572
+v 18.804380 -40.484894 7.103165
+v 18.720036 -40.348896 9.185684
+v 19.348024 -40.740917 8.474582
+v 19.367680 -41.086391 0.508598
+v 19.350115 -41.806492 8.142001
+v 19.369438 -42.335953 0.405907
+v 18.624115 -42.188602 8.704910
+v -8.828794 -45.537846 9.026850
+v -8.852570 -44.518066 -0.386766
+v -8.825664 -44.533447 -0.388485
+v -7.720165 -45.175117 -0.368837
+v -7.879471 -45.967709 7.910048
+v -8.831048 -44.457565 9.031737
+v -8.855036 -43.214031 -0.269863
+v -7.878420 -43.748745 7.913410
+v -6.874090 -44.146069 6.732016
+v -6.585905 -44.515659 -0.375971
+v -6.877706 -45.286362 6.733904
+v 48.567501 21.434092 -0.187016
+v 49.699677 20.773373 0.116913
+v 50.878357 20.278894 7.674013
+v 49.995422 20.804554 7.826192
+v 49.869690 21.925171 7.089892
+v 50.658504 22.542950 6.165782
+v 51.697971 21.900858 6.917020
+v 50.802658 22.592630 0.209773
+v 51.123646 22.265144 6.086252
+v 51.825890 20.761066 7.945238
+v 50.806759 21.353447 0.323551
+v 50.288979 21.079414 0.244940
+v 51.036839 20.393513 7.495235
+v 33.869556 35.918011 10.800609
+v 34.808506 35.819248 0.323492
+v 35.928600 35.151279 0.454714
+v 34.804375 35.376141 10.551805
+v 34.827835 37.130848 0.272405
+v 33.887142 36.966915 10.736033
+v 34.843018 37.493187 10.420532
+v 35.969719 37.775471 0.352730
+v 22.740887 1.576761 0.126375
+v 23.473989 2.099282 6.044025
+v 23.194952 2.322030 6.382317
+v 22.397003 3.046150 7.885157
+v 22.376509 4.251496 8.440879
+v 22.749563 2.877591 0.042328
+v 22.747309 2.115401 0.028772
+v 23.874233 3.516777 0.018030
+v 23.452698 3.281372 0.049186
+v 24.358120 4.041432 7.284608
+v 24.999186 2.852790 0.039693
+v 24.987398 2.859874 0.040596
+v 24.966406 2.872123 0.038917
+v 24.507374 2.597238 5.647977
+v 24.999317 2.821038 0.039565
+v 24.999516 2.836440 0.036647
+v 24.999203 2.848862 0.039663
+v 24.507387 2.989085 5.630992
+v 24.520578 2.714051 5.492675
+v 24.495243 2.589722 5.645686
+v 24.231901 2.396513 5.471230
+v 10.069651 -7.898253 0.470240
+v 9.433249 -7.594254 12.613533
+v 9.480832 -5.745957 11.705592
+v 10.055955 -5.471228 0.731590
+v 11.104754 -6.075987 0.757545
+v 10.283468 -5.602688 0.742130
+v 10.280495 -6.215302 11.874806
+v 10.239504 -7.140710 12.427673
+v 11.114652 -7.288624 0.624065
+v 10.278172 -6.294170 11.906143
+v 4.232985 -7.647857 13.541226
+v 3.657259 -6.707506 0.047997
+v 4.753454 -7.343847 0.080155
+v 5.027270 -8.090382 13.151947
+v 4.218752 -6.689445 13.246647
+v 3.659386 -5.446937 0.150580
+v 4.757744 -4.828021 0.284892
+v 5.014524 -6.145308 12.543343
+v 5.849342 -5.467538 0.322005
+v 5.516209 -5.272006 0.306842
+v 5.839909 -6.587110 12.133094
+v 5.847185 -6.722281 0.214328
+v 5.848025 -6.234272 0.254043
+v 5.839491 -6.798663 12.200491
+v 5.837914 -7.578383 12.509840
+v 5.736113 -7.638913 12.536012
+v 48.471523 -43.258492 6.999789
+v 47.314217 -41.922882 5.393416
+v 47.549805 -42.094456 -0.097004
+v 48.235149 -41.387501 5.179811
+v 49.260361 -41.813782 5.896301
+v 48.600414 -42.710934 -0.231658
+v 49.360630 -42.741989 6.793922
+v 48.610401 -43.942360 -0.178080
+v 48.610119 -43.875004 -0.178575
+v 44.872868 29.050369 6.811976
+v 44.594078 28.583662 -0.001491
+v 45.736134 27.906885 -0.189838
+v 45.868862 28.467045 6.722566
+v 44.859707 29.685169 6.470896
+v 44.877869 30.207039 6.900198
+v 45.743389 30.574505 0.187474
+v 45.904270 30.833174 8.566416
+v 46.882675 29.913017 0.082416
+v 46.353539 30.218414 0.087625
+v 46.860050 30.310717 9.252660
+v 46.863605 29.158590 8.354915
+v 46.884769 28.578583 -0.119688
+v 46.471333 28.333740 -0.188900
+v 45.890438 28.478514 6.707470
+v 16.809553 -39.785339 0.616727
+v 17.940006 -40.435272 0.578582
+v 16.932985 -40.932423 10.682063
+v 16.834866 -40.870968 10.638183
+v 16.806437 -38.450764 0.478761
+v 16.806469 -38.465740 0.479374
+v 16.831648 -39.757797 10.255347
+v 17.945156 -37.770870 0.380117
+v 17.754295 -39.221817 10.285636
+v 18.713028 -39.641144 9.411859
+v 19.086222 -38.427002 0.336212
+v 17.852097 -39.285683 10.330270
+v 19.079441 -39.758411 0.401203
+v 19.080589 -39.602802 0.384865
+v 9.428013 0.311700 0.104446
+v 10.458300 -0.296582 0.117783
+v 10.561498 -0.357272 0.128048
+v 12.180561 -1.036502 10.508660
+v 11.025407 -0.392554 9.068704
+v 10.930496 0.737628 8.504632
+v 12.043729 1.138899 9.535191
+v 11.684433 1.019171 9.154043
+v 13.160676 0.432954 11.041195
+v 11.686148 1.572263 -0.005215
+v 11.683443 0.272337 0.062009
+v 13.198932 -0.608561 11.395790
+v 10.946782 -0.138544 0.088771
+v 11.343912 0.085495 0.057621
+v 13.042725 -0.670141 11.232921
+v 22.782866 -27.916136 8.136178
+v 22.584530 -27.799555 8.151866
+v 23.319220 -27.876833 -0.046058
+v 24.470898 -28.551226 -0.196033
+v 23.466228 -28.350279 8.827323
+v 23.333105 -26.565863 -0.036472
+v 23.319929 -27.787836 -0.042804
+v 22.526112 -26.706495 8.939974
+v 24.495718 -25.916376 -0.150770
+v 24.165924 -26.101057 -0.131050
+v 23.400805 -26.190695 9.632980
+v 24.339270 -26.734030 9.564890
+v 25.653368 -26.584181 -0.260684
+v 24.371668 -27.812494 9.230092
+v 25.643612 -27.907461 -0.300849
+v 24.397234 -27.428587 9.071525
+v 24.991428 -28.265408 -0.241716
+v 25.364046 -28.061619 -0.284059
+v 39.808243 0.956209 0.088457
+v 39.558815 2.021990 5.716085
+v 39.502747 3.422468 7.078017
+v 39.810276 2.289891 0.154682
+v 40.459824 4.019846 7.340070
+v 40.934719 2.940247 0.190139
+v 41.525753 3.269325 6.273479
+v 42.066715 2.266290 0.159864
+v 47.506771 -27.593033 -0.211440
+v 47.995079 -27.875309 -0.192357
+v 48.636501 -28.246485 -0.093132
+v 48.030811 -27.957157 11.464124
+v 47.148087 -27.447060 11.463467
+v 47.508762 -26.282351 -0.276332
+v 47.506069 -26.902836 -0.188651
+v 47.163277 -26.422955 10.969108
+v 48.083324 -25.893953 10.462122
+v 48.641674 -25.627237 -0.191853
+v 48.989891 -26.415424 10.461646
+v 49.768250 -26.283865 -0.036518
+v 49.194950 -25.952841 -0.058935
+v 48.952251 -27.454409 10.969319
+v 49.771446 -27.592869 -0.079630
+v 49.439892 -27.785009 -0.105282
+v 6.572913 -36.832699 12.118317
+v 6.067422 -36.007065 0.271222
+v 7.208903 -36.667999 0.266858
+v 7.451931 -37.330589 11.868827
+v 6.579782 -35.826687 12.321780
+v 6.059127 -34.670170 0.132068
+v 6.066250 -35.709530 0.256094
+v 7.204203 -33.997471 0.042499
+v 7.192123 -34.004623 0.043905
+v 7.460497 -35.312286 12.277904
+v 8.352009 -34.671955 0.102903
+v 8.342484 -35.802479 12.029478
+v 8.351350 -35.022381 0.162793
+v 8.351831 -34.767376 0.116576
+v 8.340819 -36.814774 11.823858
+v 8.349584 -36.005508 0.201077
+v 8.283037 -36.043766 0.199225
+v 26.505203 -15.630812 13.414497
+v 27.235132 -16.112644 13.126554
+v 26.537025 -14.715068 13.603597
+v 24.453348 -16.730968 -0.087947
+v 27.584997 -13.966211 15.820384
+v 25.521002 -16.095316 -0.071527
+v 26.542728 -14.711719 13.602878
+v 27.274687 -14.199018 14.969005
+v 28.253187 -14.414299 15.463843
+v 26.582638 -16.685295 -0.048119
+v 25.938108 -16.311893 0.011288
+v 26.583361 -17.920462 -0.080284
+v 28.048399 -15.155069 13.547735
+v 27.999773 -15.380352 13.091214
+v 27.994303 -15.662960 13.031758
+v 23.893330 28.233984 0.205436
+v 25.151701 28.488144 10.851409
+v 24.324751 28.956200 10.749089
+v 24.330439 29.914270 10.859965
+v 25.155916 30.395508 11.070804
+v 25.998703 29.456995 0.284421
+v 25.971842 29.929138 11.171237
+v 25.973251 28.979832 11.062705
+v 8.418139 -18.471401 11.902929
+v 8.386882 -17.130728 -0.472848
+v 9.515528 -17.776920 -0.536221
+v 9.282018 -18.938696 11.598927
+v 8.415815 -17.460033 11.814989
+v 10.646543 -15.815472 -0.451359
+v 10.171335 -17.361502 11.105118
+v 10.649559 -17.110750 -0.624360
+v 10.164332 -18.392336 11.198493
+v 10.164502 -17.386536 -0.694911
+v 47.019093 -40.739292 -0.077935
+v 47.767853 -41.053413 4.722744
+v 48.798748 -39.203182 4.351155
+v 48.204594 -38.744102 -0.099944
+v 48.416374 -38.958687 3.712324
+v 48.167316 -40.073357 -0.287930
+v 48.167397 -40.042397 -0.289395
+v 48.850040 -40.470200 4.817916
+v 48.629948 -40.546154 4.517108
+v 23.001305 18.461092 -0.570927
+v 23.237793 18.322388 -0.596599
+v 24.113255 17.801544 -0.522484
+v 23.127958 17.998617 8.326863
+v 22.267347 18.538294 7.618814
+v 23.015146 19.751728 -0.563453
+v 22.276871 18.755512 7.539894
+v 22.207907 19.611052 8.415721
+v 24.158716 20.390894 -0.666810
+v 23.979799 20.290548 -0.660533
+v 23.026745 20.107290 9.448050
+v 37.117443 -20.515631 0.300350
+v 37.488976 -19.000280 10.983290
+v 37.348915 -18.921528 10.949996
+v 36.616642 -18.375744 11.599539
+v 36.617485 -17.647182 11.641588
+v 36.613640 -17.380747 11.749197
+v 37.121002 -19.249296 0.326940
+v 37.118912 -19.591085 0.344950
+v 37.466454 -16.973246 11.322452
+v 38.210579 -18.664875 0.119229
+v 36.975056 -17.246761 11.363557
+v 37.033978 -17.222153 11.315315
+v 37.062057 -17.202902 11.332124
+v 38.280384 -17.427198 11.575115
+v 39.306816 -19.330372 -0.024955
+v 38.293121 -18.420712 11.472775
+v 38.273685 -17.731081 11.664408
+v 23.610140 14.089146 -0.262163
+v 23.613199 15.408321 -0.361649
+v 24.236921 15.820982 9.586550
+v 25.133116 15.279194 10.062277
+v 25.113935 14.220270 10.320995
+v -0.652712 -48.545471 11.592995
+v -1.141643 -47.746895 0.134068
+v -0.092320 -48.363144 0.323155
+v 0.170308 -49.079170 12.860823
+v -0.680088 -47.991096 10.972693
+v -0.692349 -47.537537 10.703392
+v -1.138901 -46.545624 0.248650
+v -0.087550 -45.973965 0.550883
+v 0.140856 -47.145702 11.454879
+v 0.949945 -46.578693 0.553748
+v 0.000000 -46.026466 0.566557
+v 0.940231 -47.731613 12.716615
+v 0.947900 -47.771282 0.440551
+v 0.938253 -48.662296 13.237556
+v 0.000000 -48.311741 0.349809
+v 0.634441 -48.819115 12.971379
+v 2.617133 -46.005238 0.677581
+v 3.350050 -46.416592 0.669094
+v 3.694665 -46.609848 0.665723
+v 5.317383 -44.290173 13.159965
+v 4.520775 -43.840572 13.178851
+v 4.423012 -43.013592 12.515664
+v 2.639833 -44.738777 0.798645
+v 4.698936 -42.864830 12.246568
+v 5.165852 -42.601624 11.993243
+v 3.725831 -44.087067 0.905691
+v 5.998145 -43.039902 12.128867
+v 4.788191 -44.684753 0.893778
+v 4.489823 -44.516972 0.896739
+v 6.059596 -43.893040 12.669984
+v 4.779646 -45.940960 0.775255
+v 5.546441 -44.174603 12.943409
+v 24.357857 23.570749 -0.254628
+v 24.835255 23.304150 -0.344378
+v 25.448992 22.948328 -0.337342
+v 25.202229 21.720610 12.486582
+v 24.858038 21.917425 12.508206
+v 24.595230 22.069214 12.510616
+v 24.389948 22.194498 12.449597
+v 24.387703 23.154818 12.351043
+v 24.389822 22.476311 12.653214
+v 25.211550 23.677465 12.052184
+v 26.534227 24.817875 -0.054955
+v 25.707827 23.374035 12.147655
+v 26.023245 23.155451 12.371542
+v 26.535839 23.567179 -0.189953
+v 25.992224 22.131397 13.055385
+v 25.766235 21.997086 13.091379
+v 18.556208 -30.979025 0.353739
+v 19.485638 -31.531326 0.232404
+v 19.609325 -31.411196 7.466578
+v 18.338566 -30.850945 0.335336
+v 20.620007 -29.691494 7.400238
+v 21.776812 -30.413572 8.564296
+v 20.657591 -29.548798 0.179658
+v 21.845140 -31.580051 9.151015
+v 20.639156 -30.879053 0.131875
+v 33.024456 -41.536514 0.068327
+v 33.522499 -41.830006 0.045876
+v 34.091591 -42.167149 0.061276
+v 32.884460 -41.925709 10.902962
+v 32.067516 -41.435863 10.746138
+v 33.046207 -40.303295 -0.019561
+v 33.036407 -40.625008 0.049332
+v 32.089394 -40.922058 10.566722
+v 32.081982 -40.471329 10.705830
+v 32.898720 -40.003036 10.970513
+v 33.736378 -40.490917 10.940850
+v 33.754211 -41.456730 10.724766
+v 33.761307 -41.334583 10.682081
+v 15.879624 17.890409 4.650366
+v 16.084848 17.013504 0.020060
+v 16.013191 17.815987 4.686305
+v 15.920706 18.860203 3.819102
+v 15.921294 18.888609 3.808401
+v 16.088707 18.272051 0.039446
+v 16.085962 17.534658 0.038829
+v 17.160553 18.881174 0.016073
+v 16.483187 18.499346 0.047300
+v 15.927354 18.892458 3.810414
+v 15.947518 18.909855 3.841390
+v 17.780142 19.087416 5.150725
+v 18.031855 18.620703 2.306057
+v 17.356020 19.018614 2.284197
+v 17.204906 18.854464 0.012159
+v 17.802048 18.852024 4.911542
+v 20.245710 3.075619 0.046999
+v 21.356213 2.433959 0.035076
+v 20.830936 2.684874 10.057961
+v 19.887857 3.221251 11.694939
+v 20.245489 4.355348 0.054189
+v 20.245098 4.197830 0.066959
+v 19.874067 4.204192 12.143770
+v 20.780476 4.722082 11.020750
+v 21.780210 4.240645 9.323413
+v 22.468063 3.074152 0.045953
+v 21.818584 3.183924 8.805850
+v 47.122025 -3.113548 -0.156502
+v 48.243881 -3.716457 -0.065923
+v 49.946426 -1.282673 13.042930
+v 49.005024 -0.972359 12.209212
+v 48.918934 -0.094822 11.621811
+v 47.135780 -1.819977 -0.095038
+v 47.121490 -2.927109 -0.164249
+v 49.798214 0.443805 11.901814
+v 48.244915 -1.158492 -0.057946
+v 49.339539 -1.776786 -0.082102
+v 49.181690 -1.690989 -0.094887
+v 50.720646 0.100732 12.742216
+v 50.783520 -0.748499 13.296622
+v 49.349586 -3.042795 -0.029120
+v 36.272209 -42.510902 11.049352
+v 36.270370 -41.564522 10.976237
+v 35.823383 -42.039021 0.044192
+v 36.264938 -41.952328 10.854829
+v 36.881638 -41.428493 -0.010092
+v 37.097794 -41.080963 11.247226
+v 37.941189 -42.038784 0.009011
+v 37.895672 -41.542286 11.220027
+v 37.913578 -41.553532 11.198120
+v 37.915241 -42.512753 10.990772
+v 37.915211 -42.317478 10.904978
+v 37.915176 -42.419163 10.970396
+v 37.363987 -42.822372 11.139349
+v 21.167526 -50.674129 -0.692295
+v 21.652334 -50.945347 -0.778959
+v 22.286856 -51.321999 -0.689495
+v 22.007975 -52.709499 13.803386
+v 21.202175 -52.160351 13.027057
+v 21.165558 -49.409798 -0.394928
+v 21.197834 -51.403435 11.828450
+v 21.197174 -51.048798 11.864746
+v 22.280609 -48.770298 -0.297224
+v 22.041573 -50.587486 12.108562
+v 23.393974 -49.423836 -0.255527
+v 22.640360 -48.969288 -0.361001
+v 22.879698 -51.096985 12.251140
+v 22.880396 -51.751312 12.184051
+v 22.854536 -52.132095 12.790290
+v 23.395651 -50.702904 -0.394268
+v 9.969192 4.307878 -0.218046
+v 11.062577 3.664061 -0.139401
+v 12.798149 2.935952 10.988212
+v 11.786958 3.499111 9.707621
+v 11.736787 3.528584 9.701364
+v 9.971164 4.890972 -0.223856
+v 9.968484 4.479674 -0.226975
+v 11.987610 4.375803 11.081252
+v 9.978683 5.550863 -0.200821
+v 13.040089 4.674491 12.455855
+v 11.075065 6.144872 -0.172194
+v 10.452305 5.809513 -0.198611
+v 13.943552 4.112884 13.263041
+v 12.155060 5.494777 -0.135413
+v 13.311828 4.510490 12.483809
+v 12.145251 4.259855 -0.125411
+v 12.145935 4.588547 -0.142409
+v 13.868291 3.258315 12.760560
+v 16.959520 16.530220 5.584530
+v 15.952931 17.138927 5.273085
+v 17.612396 19.082846 -0.006674
+v 18.790810 18.404259 -0.131332
+v 17.762638 18.996071 -0.019800
+v 18.778921 17.059046 -0.157398
+v 18.782986 17.669619 -0.135593
+v 37.188965 -31.649506 13.810407
+v 36.589264 -30.669987 -0.244867
+v 37.716896 -31.318012 -0.357780
+v 38.012859 -32.124928 13.771280
+v 37.172333 -30.660042 13.460694
+v 36.592972 -29.373129 -0.103434
+v 37.189575 -31.545374 13.829032
+v 37.722721 -28.722847 -0.079630
+v 37.167648 -29.042643 -0.088849
+v 38.005501 -30.173519 13.420105
+v 38.850513 -29.368927 -0.195052
+v 38.839344 -30.695066 13.795276
+v 38.848301 -30.667397 -0.329384
+v 38.838390 -31.164423 13.988610
+v 38.837570 -31.658178 13.900411
+v 38.812824 -30.687819 -0.329971
+v 15.467054 14.033843 8.006809
+v 14.247435 12.646991 -0.002475
+v 14.420353 12.551993 0.003480
+v 15.387180 11.999726 -0.045001
+v 16.461535 13.535516 8.227062
+v 14.249222 13.074002 -0.000341
+v 14.248631 13.007030 -0.002723
+v 14.248586 12.982450 -0.002464
+v 14.248742 12.933352 -0.000325
+v 15.345922 15.030597 7.185713
+v 14.252414 13.972651 0.000409
+v 16.247200 15.531847 6.576786
+v 15.390517 14.648141 -0.019301
+v 14.738463 14.262160 0.010093
+v 16.514578 13.998044 -0.117534
+v 17.260750 15.012412 6.811066
+v 16.518242 12.676214 -0.125297
+v 16.514347 13.540141 -0.134075
+v 17.353836 14.013166 7.639987
+v 15.651708 12.157084 -0.071778
+v -5.093294 -45.343330 4.636244
+v -5.434294 -45.109467 5.037567
+v -5.654767 -45.478546 -0.350673
+v -5.243112 -45.715565 -0.343397
+v -5.434066 -44.925426 5.037681
+v -3.412332 -44.166763 -0.062028
+v -3.427249 -43.904552 5.984106
+v -3.426074 -44.306538 5.698473
+v -14.625000 -45.500004 -0.401823
+v 24.375000 -45.500000 0.372793
+v -4.875000 -43.875004 -0.379399
+v 34.125000 -40.625008 -0.012631
+v 14.625003 -37.375008 0.570033
+v 8.124999 -34.937500 0.148099
+v -30.875000 -17.875000 -0.350930
+v -24.375000 -17.468752 -0.694210
+v -17.875002 -17.875000 0.388251
+v 11.375000 -18.281252 -0.730525
+v -30.875000 -11.375000 0.167431
+v 6.500001 -8.125000 0.150300
+v 24.984375 2.843749 0.040700
+v -24.375004 9.750000 0.068561
+v -39.000000 16.250000 0.242710
+v 17.062500 19.906250 0.059654
+v -34.125000 27.625000 -0.416705
+v 25.593750 28.234375 0.244453
+v -24.375002 29.250000 0.177554
+v -6.500003 34.125000 0.051823
+v 4.875000 43.875004 0.626991
+v -43.875000 47.125000 -0.230965
+v -21.125004 48.750008 1.076026
+v 17.875002 48.750008 0.205388
+v -7.019094 9.154321 11.005136
+v -42.111328 -28.118114 10.270661
+v -14.369601 2.473120 10.766763
+v -9.378195 11.325798 10.253020
+v 0.965423 30.825830 7.896383
+v -19.843262 30.795164 10.336315
+v -1.844899 43.074276 5.002682
+v -29.192629 0.009585 10.549155
+v -23.384087 43.178341 14.168326
+v 11.402965 -5.592093 11.603754
+v 20.776112 25.007637 11.814616
+v 9.245645 -10.518223 14.408474
+v 10.419623 2.592220 7.218242
+v 47.700748 -38.817028 2.614275
+v 37.845669 -42.342354 10.963897
+v 43.418411 -12.615542 10.889720
+v 24.842190 22.159437 12.758190
+v -4.954663 -45.298546 4.473378
+v 24.159296 2.704016 5.113871
+vn -0.5003 -0.8658 -0.0045
+vn -0.5003 0.8658 -0.0045
+vn 0.4981 0.8658 0.0478
+vn 0.9973 -0.0000 0.0739
+vn 0.4981 -0.8658 0.0478
+vn -0.5008 -0.8647 -0.0389
+vn -0.9991 -0.0018 0.0425
+vn -0.4978 0.8611 0.1030
+vn 0.5017 0.8611 0.0820
+vn 1.0000 -0.0018 0.0006
+vn 0.4987 -0.8647 -0.0598
+vn -0.4755 -0.8518 0.2199
+vn -0.9887 0.0034 0.1500
+vn -0.5104 0.8585 -0.0487
+vn 0.4810 0.8585 -0.1775
+vn 0.9942 0.0034 -0.1076
+vn 0.5159 -0.8518 0.0911
+vn -0.4984 -0.8633 0.0795
+vn -0.9992 0.0012 0.0408
+vn -0.5003 0.8657 -0.0171
+vn 0.4993 0.8657 -0.0363
+vn 1.0000 0.0012 0.0024
+vn 0.5011 -0.8633 0.0603
+vn -0.4986 -0.8619 -0.0921
+vn -1.0000 -0.0021 0.0023
+vn -0.5018 0.8572 0.1159
+vn 0.4978 0.8567 0.1351
+vn 0.9992 -0.0031 0.0407
+vn 0.5009 -0.8624 -0.0729
+vn -0.5085 -0.8608 0.0230
+vn -0.9844 0.0051 0.1758
+vn -0.4726 0.8639 0.1741
+vn 0.5151 0.8569 0.0196
+vn 0.9910 -0.0090 -0.1332
+vn 0.4792 -0.8678 -0.1315
+vn -0.5086 -0.8602 -0.0375
+vn -0.9959 0.0112 -0.0894
+vn -0.4898 0.8713 -0.0304
+vn 0.5038 0.8601 0.0805
+vn 0.4849 -0.8715 0.0734
+vn -0.5102 -0.8489 0.1382
+vn -0.9990 0.0038 -0.0450
+vn -0.4902 0.8564 -0.1619
+vn 0.5073 0.8564 -0.0956
+vn 0.9962 0.0038 0.0875
+vn 0.4874 -0.8489 0.2044
+vn -0.9995 -0.0000 -0.0307
+vn 0.4850 -0.8715 0.0734
+vn -0.5104 0.8586 -0.0487
+vn -0.4985 -0.8633 0.0795
+vn 0.9911 -0.0113 0.1324
+vn 0.5012 -0.8633 0.0603
+vn 0.4988 -0.8647 -0.0598
+vn 0.9942 0.0032 -0.1076
+vn -0.4897 0.8713 -0.0304
+vn -0.5085 -0.8603 -0.0374
+vn 0.4810 0.8586 -0.1775
+vn 1.0000 -0.0020 0.0007
+vn -0.0653 0.1736 0.9826
+vn 1.0000 -0.0017 0.0006
+vn -0.4986 -0.8632 0.0796
+vn -0.4727 0.8639 0.1741
+vn 0.9910 -0.0089 -0.1332
+vn 0.4980 -0.8659 0.0478
+vn -0.4978 0.8612 0.1030
+vn -0.4985 -0.8632 0.0795
+vn -0.4724 0.8640 0.1741
+vn -0.5102 -0.8489 0.1381
+vn -0.4728 0.8638 0.1742
+vn 0.5039 0.8600 0.0805
+vn -1.0000 -0.0020 0.0023
+vn 0.5006 -0.8636 0.0602
+vn 0.4791 -0.8678 -0.1315
+vn -0.4977 0.8612 0.1029
+vn 1.0000 -0.0019 0.0006
+vn 0.4982 0.8657 0.0478
+vn -0.5004 -0.8658 -0.0046
+vn 0.5010 -0.8624 -0.0729
+vn 0.5036 0.8602 0.0805
+vn 0.9911 -0.0121 0.1324
+vn 0.5039 0.8600 0.0804
+vn 0.9962 0.0037 0.0875
+vn -0.5004 -0.8658 -0.0045
+vn -0.0216 0.0500 -0.9985
+vn 0.0414 0.0943 -0.9947
+vn 0.0427 0.0936 -0.9947
+vn 0.2026 0.1235 -0.9714
+vn 0.2002 0.1059 -0.9740
+vn 0.0038 0.0582 -0.9983
+vn 0.0389 -0.0013 -0.9992
+vn 0.0576 0.0070 -0.9983
+vn -0.1538 -0.0079 -0.9881
+vn 0.1999 0.0034 -0.9798
+vn -0.0126 0.0893 -0.9959
+vn -0.1777 -0.1953 -0.9645
+vn -0.1385 0.0809 -0.9871
+vn -0.0471 -0.0463 -0.9978
+vn -0.0013 -0.0478 -0.9989
+vn 0.0039 -0.0113 -0.9999
+vn -0.0187 -0.0166 -0.9997
+vn -0.0096 -0.0946 -0.9955
+vn -0.0337 0.0019 -0.9994
+vn 0.0577 0.0425 -0.9974
+vn 0.0972 0.0357 -0.9946
+vn -0.0928 -0.1033 -0.9903
+vn -0.1537 -0.0463 -0.9870
+vn -0.0193 0.0832 -0.9963
+vn 0.0502 -0.0390 -0.9980
+vn -0.0025 -0.0880 -0.9961
+vn 0.1055 0.0873 -0.9906
+vn -0.0076 -0.1185 -0.9929
+vn 0.0258 -0.1708 -0.9850
+vn -0.0418 -0.0146 -0.9990
+vn -0.0293 0.0823 -0.9962
+vn -0.0312 -0.1417 -0.9894
+vn 0.1499 0.1136 -0.9821
+vn -0.1076 0.0372 -0.9935
+vn -0.0372 0.1084 -0.9934
+vn 0.0024 -0.0173 -0.9998
+vn -0.0428 0.1029 -0.9938
+vn -0.1409 0.1645 -0.9763
+vn -0.1164 0.0064 -0.9932
+vn -0.0475 -0.0052 -0.9989
+vn 0.1533 -0.1389 -0.9784
+vn 0.0167 -0.0110 -0.9998
+vn 0.1480 -0.0345 -0.9884
+vn -0.0473 -0.0838 -0.9954
+vn 0.1563 -0.0920 -0.9834
+vn 0.1564 -0.0924 -0.9834
+vn 0.0001 -0.1018 -0.9948
+vn -0.1273 0.0708 -0.9893
+vn 0.1383 -0.0261 -0.9901
+vn -0.0424 0.1086 -0.9932
+vn 0.1110 -0.1612 -0.9807
+vn 0.1283 0.0002 -0.9917
+vn 0.0222 0.0297 -0.9993
+vn 0.0332 -0.0312 -0.9990
+vn -0.0575 0.0794 -0.9952
+vn 0.1625 -0.0292 -0.9863
+vn 0.1624 -0.0292 -0.9863
+vn -0.0511 -0.1363 -0.9893
+vn -0.1446 -0.1568 -0.9770
+vn -0.0743 0.1322 -0.9884
+vn -0.2224 0.0969 -0.9701
+vn -0.1423 0.1330 -0.9809
+vn 0.0690 0.0904 -0.9935
+vn -0.0095 0.0400 -0.9992
+vn -0.0235 -0.0109 -0.9997
+vn 0.0332 -0.0168 -0.9993
+vn 0.1023 -0.0019 -0.9948
+vn -0.1681 0.1040 -0.9803
+vn 0.0760 0.0807 -0.9938
+vn -0.0745 0.1098 -0.9912
+vn 0.0969 0.0233 -0.9950
+vn -0.0188 -0.0382 -0.9991
+vn 0.0966 0.0877 -0.9914
+vn -0.0307 0.0042 -0.9995
+vn -0.0605 0.0136 -0.9981
+vn 0.1048 -0.1271 -0.9863
+vn -0.1188 0.0746 -0.9901
+vn -0.1997 -0.0826 -0.9764
+vn -0.0039 0.0624 -0.9980
+vn 0.0539 -0.1958 -0.9792
+vn -0.0154 0.0366 -0.9992
+vn 0.1298 0.0845 -0.9879
+vn -0.0403 0.0710 -0.9967
+vn 0.0413 -0.0517 -0.9978
+vn 0.2870 0.2227 -0.9317
+vn 0.0028 0.0496 -0.9988
+vn -0.0067 0.0175 -0.9998
+vn -0.0743 0.0142 -0.9971
+vn 0.0413 -0.0325 -0.9986
+vn 0.0516 -0.0146 -0.9986
+vn 0.0191 -0.1506 -0.9884
+vn 0.0153 0.1160 -0.9931
+vn -0.0749 -0.0436 -0.9962
+vn -0.0722 0.0071 -0.9974
+vn 0.0991 0.0047 -0.9951
+vn 0.0633 -0.0134 -0.9979
+vn 0.0272 -0.1006 -0.9946
+vn -0.0120 -0.0583 -0.9982
+vn 0.0629 -0.0104 -0.9980
+vn -0.0092 0.0404 -0.9991
+vn -0.1124 0.0746 -0.9909
+vn 0.0387 -0.0391 -0.9985
+vn -0.0755 -0.1147 -0.9905
+vn -0.0663 0.0361 -0.9971
+vn 0.0627 -0.1363 -0.9887
+vn -0.2026 -0.0071 -0.9792
+vn -0.0211 -0.1594 -0.9870
+vn 0.1657 -0.1226 -0.9785
+vn 0.0195 0.0008 -0.9998
+vn 0.0396 -0.0752 -0.9964
+vn -0.0485 -0.1028 -0.9935
+vn 0.0458 -0.2025 -0.9782
+vn -0.1450 -0.0225 -0.9892
+vn 0.0317 0.1046 -0.9940
+vn 0.0180 -0.0063 -0.9998
+vn 0.0272 -0.0057 -0.9996
+vn 0.0735 0.1071 -0.9915
+vn 0.0093 0.0091 -0.9999
+vn -0.0187 0.1058 -0.9942
+vn -0.0281 0.0927 -0.9953
+vn -0.0819 -0.0399 -0.9958
+vn -0.0799 0.1398 -0.9869
+vn -0.0658 -0.2397 -0.9686
+vn 0.0016 0.0496 -0.9988
+vn 0.0319 0.0513 -0.9982
+vn 0.0931 -0.0105 -0.9956
+vn -0.0298 0.0838 -0.9960
+vn -0.2642 -0.0764 -0.9614
+vn -0.1116 -0.2327 -0.9661
+vn 0.0229 0.0214 -0.9995
+vn -0.0834 0.0601 -0.9947
+vn -0.0669 0.0499 -0.9965
+vn 0.1500 -0.0870 -0.9849
+vn -0.0807 -0.0192 -0.9966
+vn -0.0338 0.1712 -0.9847
+vn -0.0130 0.0096 -0.9999
+vn -0.0900 0.2823 -0.9551
+vn 0.1659 0.0481 -0.9850
+vn 0.0926 -0.0401 -0.9949
+vn -0.0715 0.0509 -0.9961
+vn -0.0002 -0.0448 -0.9990
+vn 0.1617 -0.1813 -0.9700
+vn -0.0880 0.0658 -0.9939
+vn 0.0245 0.1034 -0.9943
+vn 0.0033 0.2547 -0.9670
+vn -0.0167 0.0015 -0.9999
+vn -0.0579 -0.0493 -0.9971
+vn -0.0501 0.0390 -0.9980
+vn 0.2115 0.0507 -0.9761
+vn 0.0322 0.1748 -0.9841
+vn -0.1299 0.1276 -0.9833
+vn -0.0669 -0.1250 -0.9899
+vn 0.0734 -0.2157 -0.9737
+vn 0.0898 -0.1502 -0.9846
+vn -0.0491 -0.1892 -0.9807
+vn -0.1547 -0.1576 -0.9753
+vn -0.0851 -0.0700 -0.9939
+vn 0.0581 0.0330 -0.9978
+vn 0.0869 -0.0024 -0.9962
+vn 0.2344 -0.0451 -0.9711
+vn 0.0765 0.1494 -0.9858
+vn -0.0371 0.0297 -0.9989
+vn 0.0525 -0.2739 -0.9603
+vn -0.1027 0.1493 -0.9834
+vn 0.0050 0.0310 -0.9995
+vn 0.0039 0.0852 -0.9964
+vn 0.0058 -0.0207 -0.9998
+vn 0.0339 -0.0263 -0.9991
+vn 0.2286 0.0919 -0.9692
+vn -0.0459 0.2286 -0.9724
+vn -0.0240 0.0127 -0.9996
+vn 0.0116 0.0255 -0.9996
+vn -0.0607 0.0287 -0.9977
+vn -0.0363 -0.0549 -0.9978
+vn 0.0045 -0.1760 -0.9844
+vn 0.1390 0.0809 -0.9870
+vn 0.1389 0.0809 -0.9870
+vn 0.0088 -0.0091 -0.9999
+vn -0.0099 0.0034 -0.9999
+vn -0.0568 -0.0201 -0.9982
+vn 0.0007 -0.0166 -0.9999
+vn -0.0471 0.0206 -0.9987
+vn 0.2285 -0.0991 -0.9685
+vn 0.0868 -0.1034 -0.9909
+vn -0.0166 -0.0600 -0.9981
+vn 0.0705 -0.0983 -0.9927
+vn 0.0357 0.1433 -0.9890
+vn -0.0334 -0.1797 -0.9832
+vn -0.0333 -0.0509 -0.9982
+vn -0.0619 -0.0410 -0.9972
+vn -0.0556 -0.2075 -0.9767
+vn 0.1248 -0.1188 -0.9850
+vn -0.0489 -0.0649 -0.9967
+vn 0.0509 -0.0884 -0.9948
+vn -0.1271 0.0054 -0.9919
+vn 0.1188 -0.1552 -0.9807
+vn -0.1238 -0.0746 -0.9895
+vn -0.0030 -0.1783 -0.9840
+vn -0.0230 0.0106 -0.9997
+vn -0.0046 0.1049 -0.9945
+vn -0.0310 0.0828 -0.9961
+vn -0.1098 0.0395 -0.9932
+vn -0.0793 -0.0213 -0.9966
+vn -0.0273 -0.0509 -0.9983
+vn -0.0046 0.0493 -0.9988
+vn 0.1464 -0.0752 -0.9864
+vn -0.0768 0.0308 -0.9966
+vn -0.1181 0.0480 -0.9918
+vn -0.0008 -0.0288 -0.9996
+vn -0.0007 -0.0288 -0.9996
+vn 0.0054 -0.0293 -0.9996
+vn -0.0336 -0.0935 -0.9951
+vn -0.0335 -0.0935 -0.9951
+vn 0.1580 -0.0907 -0.9833
+vn 0.1581 -0.0909 -0.9832
+vn 0.1581 -0.0908 -0.9832
+vn 0.1323 -0.0858 -0.9875
+vn 0.0256 -0.0030 -0.9997
+vn -0.0303 -0.1618 -0.9864
+vn -0.0769 0.0259 -0.9967
+vn -0.1606 -0.0509 -0.9857
+vn -0.1606 -0.0510 -0.9857
+vn -0.0360 0.1035 -0.9940
+vn 0.0062 0.0331 -0.9994
+vn -0.0498 0.0794 -0.9956
+vn 0.0686 0.1322 -0.9888
+vn 0.1265 -0.0093 -0.9919
+vn -0.0313 0.0600 -0.9977
+vn 0.0063 0.1466 -0.9892
+vn -0.0466 -0.1262 -0.9909
+vn -0.0002 0.0124 -0.9999
+vn 0.0012 0.0129 -0.9999
+vn 0.0818 0.1097 -0.9906
+vn 0.0111 0.1729 -0.9849
+vn -0.1253 0.2045 -0.9708
+vn -0.0249 0.2691 -0.9628
+vn -0.0249 -0.0618 -0.9978
+vn 0.0583 -0.0413 -0.9974
+vn 0.0123 0.0137 -0.9998
+vn 0.0800 -0.0771 -0.9938
+vn -0.0416 0.0750 -0.9963
+vn -0.0030 -0.1717 -0.9851
+vn 0.0634 -0.1787 -0.9819
+vn -0.0257 -0.0982 -0.9948
+vn -0.3312 -0.1715 -0.9278
+vn -0.0033 0.0624 -0.9980
+vn 0.0234 0.0002 -0.9997
+vn 0.0234 0.0003 -0.9997
+vn 0.1521 0.1186 -0.9812
+vn -0.0337 -0.0789 -0.9963
+vn -0.0005 0.0178 -0.9998
+vn -0.1466 0.2299 -0.9621
+vn 0.0990 0.0433 -0.9941
+vn -0.0286 -0.0807 -0.9963
+vn -0.0321 0.0773 -0.9965
+vn -0.0585 0.0711 -0.9957
+vn -0.0262 0.0496 -0.9984
+vn 0.0234 -0.0147 -0.9996
+vn 0.1515 -0.1489 -0.9772
+vn -0.0615 0.1796 -0.9818
+vn -0.0145 0.0350 -0.9993
+vn 0.0384 0.0073 -0.9992
+vn 0.0685 -0.0193 -0.9975
+vn 0.0407 -0.0583 -0.9975
+vn 0.1422 -0.0752 -0.9870
+vn -0.0031 0.1069 -0.9943
+vn -0.0319 0.1211 -0.9921
+vn -0.0554 -0.0104 -0.9984
+vn 0.0792 -0.0390 -0.9961
+vn -0.0479 0.1178 -0.9919
+vn 0.0171 0.0764 -0.9969
+vn -0.0480 0.0979 -0.9940
+vn -0.1039 0.0069 -0.9946
+vn 0.0221 0.1246 -0.9920
+vn 0.0377 0.1229 -0.9917
+vn -0.0752 -0.1436 -0.9868
+vn -0.1100 0.1345 -0.9848
+vn -0.0559 0.1068 -0.9927
+vn -0.0325 -0.0708 -0.9970
+vn 0.0753 -0.1434 -0.9868
+vn 0.0016 -0.1619 -0.9868
+vn -0.2069 -0.0560 -0.9768
+vn -0.1062 0.0091 -0.9943
+vn -0.0506 0.1086 -0.9928
+vn 0.0541 0.1057 -0.9929
+vn -0.0230 0.0965 -0.9951
+vn 0.0033 0.0513 -0.9987
+vn 0.1455 0.0249 -0.9891
+vn -0.0272 0.0806 -0.9964
+vn -0.0829 -0.0155 -0.9964
+vn 0.0778 0.0933 -0.9926
+vn 0.0013 -0.0070 -1.0000
+vn 0.1914 -0.0476 -0.9804
+vn 0.0377 0.0104 -0.9992
+vn 0.0455 0.1224 -0.9914
+vn 0.0062 0.0106 -0.9999
+vn -0.1312 0.1204 -0.9840
+vn -0.2615 0.1613 -0.9516
+vn -0.0309 -0.0346 -0.9989
+vn -0.0309 -0.0345 -0.9989
+vn -0.2640 -0.0902 -0.9603
+vn 0.0751 -0.0429 -0.9963
+vn -0.1110 0.2352 -0.9656
+vn -0.0869 -0.1624 -0.9829
+vn -0.0818 -0.0093 -0.9966
+vn -0.0349 0.1822 -0.9826
+vn 0.0083 0.0390 -0.9992
+vn -0.0715 0.0517 -0.9961
+vn 0.0028 0.1287 -0.9917
+vn 0.0246 -0.0789 -0.9966
+vn -0.0011 -0.0968 -0.9953
+vn -0.0184 -0.1595 -0.9870
+vn -0.0197 -0.0139 -0.9997
+vn 0.1221 -0.0940 -0.9881
+vn -0.0744 -0.0454 -0.9962
+vn 0.0262 0.0049 -0.9996
+vn -0.0621 0.2952 -0.9534
+vn 0.0686 -0.1454 -0.9870
+vn 0.2321 0.1458 -0.9617
+vn 0.1954 -0.0890 -0.9767
+vn 0.0577 0.0297 -0.9979
+vn -0.0564 -0.1896 -0.9802
+vn -0.1525 0.0344 -0.9877
+vn -0.1431 0.0448 -0.9887
+vn 0.1166 -0.2131 -0.9701
+vn 0.0971 -0.1353 -0.9860
+vn 0.0367 0.1083 -0.9934
+vn -0.0392 -0.1773 0.9834
+vn -0.0792 0.3173 0.9450
+vn -0.2907 -0.5635 0.7733
+vn 0.4624 0.1287 0.8773
+vn -0.1018 0.2331 0.9671
+vn -0.5803 -0.2311 0.7809
+vn 0.3793 0.6179 0.6887
+vn 0.2943 0.6045 0.7402
+vn -0.6560 -0.3674 0.6593
+vn -0.5998 0.2712 0.7528
+vn -0.2167 -0.6131 0.7597
+vn 0.6971 -0.1561 0.6998
+vn -0.5257 -0.3976 0.7521
+vn -0.4425 -0.4912 0.7503
+vn -0.4119 0.4353 0.8005
+vn -0.4152 0.4345 0.7993
+vn -0.4140 0.4348 0.7998
+vn -0.4151 0.4345 0.7993
+vn -0.4138 0.4348 0.7998
+vn -0.4130 -0.2631 0.8719
+vn 0.6224 -0.4370 0.6494
+vn 0.2047 0.5464 0.8121
+vn 0.2047 0.5460 0.8124
+vn 0.2047 0.5442 0.8136
+vn -0.1701 0.1524 0.9736
+vn -0.4197 0.4333 0.7976
+vn 0.7251 -0.0716 0.6850
+vn 0.4647 -0.2121 0.8597
+vn 0.3872 -0.6698 0.6335
+vn 0.3872 -0.6699 0.6335
+vn 0.2532 0.6861 0.6820
+vn -0.1967 0.7459 0.6363
+vn -0.2615 0.7182 0.6449
+vn -0.4907 0.3431 0.8010
+vn -0.5870 -0.0393 0.8086
+vn -0.6553 -0.1064 0.7479
+vn 0.3492 -0.0903 0.9327
+vn 0.8542 -0.0570 0.5168
+vn -0.4835 0.7078 0.5150
+vn 0.8298 0.2471 0.5003
+vn -0.1124 -0.6603 0.7425
+vn 0.4692 -0.6971 0.5421
+vn -0.1912 0.6663 0.7208
+vn -0.4722 0.4629 0.7502
+vn 0.3471 -0.4157 0.8407
+vn 0.3471 -0.4156 0.8407
+vn -0.5137 -0.1312 0.8479
+vn -0.1040 0.8094 0.5779
+vn 0.0965 0.7642 0.6377
+vn -0.4165 0.6352 0.6504
+vn -0.8755 -0.1653 0.4541
+vn 0.6097 -0.2585 0.7493
+vn 0.5417 0.1334 0.8299
+vn -0.3057 -0.3388 0.8898
+vn -0.6312 0.1795 0.7546
+vn -0.6312 0.1795 0.7545
+vn -0.4073 0.5221 0.7494
+vn -0.5339 0.3936 0.7484
+vn -0.6845 -0.2130 0.6972
+vn 0.7997 -0.0216 0.6000
+vn -0.2200 0.2304 0.9479
+vn 0.5446 -0.0532 0.8370
+vn 0.5446 -0.0535 0.8370
+vn -0.0423 0.0252 0.9988
+vn -0.0049 -0.4971 0.8677
+vn -0.0037 -0.4987 0.8668
+vn -0.0038 -0.4986 0.8668
+vn 0.3414 0.5230 0.7810
+vn -0.4144 -0.3826 0.8258
+vn -0.3404 0.2272 0.9124
+vn 0.1437 -0.7037 0.6958
+vn -0.0541 -0.8609 0.5058
+vn 0.2064 0.0795 0.9752
+vn 0.0979 0.1982 0.9753
+vn -0.1937 -0.4609 0.8661
+vn -0.2243 -0.4174 0.8806
+vn -0.0315 -0.1129 0.9931
+vn 0.0997 0.6713 0.7344
+vn -0.7961 -0.2908 0.5307
+vn 0.5906 -0.4459 0.6726
+vn 0.5860 -0.7910 0.1759
+vn 0.0719 -0.0959 0.9928
+vn -0.4709 -0.0098 0.8821
+vn -0.1685 -0.7956 0.5819
+vn 0.5628 0.4117 0.7168
+vn 0.1537 0.4545 0.8774
+vn -0.4605 -0.5355 0.7079
+vn -0.4014 -0.6515 0.6438
+vn 0.6319 0.2361 0.7382
+vn 0.2411 -0.2432 0.9395
+vn 0.2539 0.5446 0.7994
+vn 0.2539 0.5445 0.7994
+vn -0.5992 0.4930 0.6308
+vn -0.2512 -0.8164 0.5200
+vn -0.3613 -0.4942 0.7907
+vn 0.5084 -0.0036 0.8611
+vn -0.3175 -0.5826 0.7482
+vn -0.4862 -0.7109 0.5082
+vn -0.4732 -0.3292 0.8171
+vn -0.2135 0.2711 0.9386
+vn -0.1543 0.2997 0.9415
+vn -0.3291 0.3272 0.8858
+vn -0.4198 0.2042 0.8843
+vn 0.4848 -0.3480 0.8024
+vn 0.4474 0.2023 0.8711
+vn -0.2121 -0.7107 0.6708
+vn 0.0555 -0.0702 0.9960
+vn -0.4930 0.3951 0.7752
+vn 0.7621 0.1896 0.6190
+vn -0.2825 0.2076 0.9365
+vn -0.5382 0.0879 0.8382
+vn 0.1857 -0.6087 0.7714
+vn 0.5879 0.2112 0.7809
+vn 0.8722 -0.1438 0.4675
+vn -0.6891 -0.2079 0.6943
+vn -0.5854 0.2568 0.7691
+vn -0.5854 0.2567 0.7691
+vn -0.4323 -0.1437 0.8902
+vn 0.2337 -0.7910 0.5654
+vn 0.8357 -0.2189 0.5036
+vn -0.1204 0.7076 0.6963
+vn -0.7971 0.4321 0.4218
+vn -0.2063 -0.6766 0.7069
+vn 0.5541 -0.0718 0.8293
+vn -0.1306 -0.3033 0.9439
+vn 0.0197 0.3687 0.9293
+vn 0.0197 0.3687 0.9294
+vn 0.5364 0.2552 0.8044
+vn -0.0498 -0.5042 0.8622
+vn -0.4797 -0.4033 0.7792
+vn 0.3815 -0.3980 0.8343
+vn -0.4054 0.4247 0.8095
+vn -0.3993 0.4283 0.8106
+vn -0.4269 0.5595 0.7104
+vn -0.2425 -0.5094 0.8257
+vn 0.1788 0.8011 0.5712
+vn -0.4002 -0.5886 0.7024
+vn 0.0262 -0.4391 0.8981
+vn 0.0262 0.4134 0.9102
+vn 0.7226 -0.3452 0.5990
+vn 0.1522 0.4810 0.8634
+vn -0.6844 0.2788 0.6737
+vn -0.7435 0.1909 0.6409
+vn -0.8104 -0.2423 0.5334
+vn 0.3835 -0.7763 0.5003
+vn 0.0324 0.3332 0.9423
+vn -0.7719 -0.0019 0.6357
+vn -0.2171 0.0928 0.9717
+vn -0.3738 -0.6485 0.6631
+vn 0.3697 0.0813 0.9256
+vn 0.1630 -0.1967 0.9668
+vn 0.3605 0.6091 0.7064
+vn 0.1476 0.5373 0.8304
+vn 0.0011 -0.4363 0.8998
+vn -0.0627 -0.5332 0.8436
+vn -0.8152 0.1708 0.5534
+vn -0.8250 -0.2541 0.5049
+vn 0.6767 -0.2625 0.6879
+vn 0.5260 -0.5492 0.6494
+vn 0.0763 -0.2435 0.9669
+vn -0.1157 -0.4288 0.8960
+vn 0.1912 -0.6178 0.7628
+vn 0.3741 0.5142 0.7718
+vn 0.3741 0.5141 0.7718
+vn -0.6680 -0.0843 0.7393
+vn 0.6675 -0.2206 0.7111
+vn 0.1905 -0.1748 0.9660
+vn -0.1596 -0.0812 0.9838
+vn -0.0597 -0.5584 0.8274
+vn -0.5111 -0.1391 0.8482
+vn 0.5180 0.7122 0.4738
+vn -0.6077 0.4111 0.6795
+vn 0.7686 0.3834 0.5121
+vn 0.2284 -0.6740 0.7025
+vn 0.5736 -0.4988 0.6497
+vn 0.8781 -0.0292 0.4776
+vn -0.1842 -0.1119 0.9765
+vn 0.0729 0.4059 0.9110
+vn -0.4764 -0.1533 0.8658
+vn 0.0919 0.2848 0.9542
+vn 0.5210 -0.6849 0.5094
+vn -0.0566 0.2283 0.9719
+vn 0.6440 -0.0448 0.7637
+vn -0.3450 0.2287 0.9103
+vn -0.4849 0.1460 0.8623
+vn -0.6230 -0.0316 0.7816
+vn -0.3508 -0.6838 0.6398
+vn -0.1378 -0.2942 0.9458
+vn -0.4749 0.3188 0.8202
+vn 0.1535 0.6393 0.7535
+vn -0.3843 -0.6754 0.6295
+vn -0.5135 -0.5027 0.6954
+vn 0.5158 -0.4448 0.7322
+vn -0.2667 -0.5588 0.7853
+vn 0.4028 0.7353 0.5450
+vn -0.4970 0.6360 0.5903
+vn -0.7129 0.3437 0.6113
+vn -0.8402 -0.3929 0.3738
+vn -0.7064 -0.0348 0.7069
+vn -0.7060 -0.0363 0.7072
+vn -0.7059 -0.0368 0.7073
+vn -0.7077 -0.0290 0.7059
+vn -0.7082 -0.0267 0.7055
+vn 0.0023 -0.6980 0.7161
+vn -0.4737 -0.5686 0.6726
+vn 0.5635 0.1424 0.8138
+vn 0.5634 0.1423 0.8138
+vn 0.2395 -0.2043 0.9491
+vn -0.2370 -0.8609 0.4501
+vn -0.3738 -0.8510 0.3689
+vn 0.7988 0.0273 0.6010
+vn -0.2596 -0.4333 0.8630
+vn -0.1134 -0.6696 0.7340
+vn -0.1748 0.3753 0.9103
+vn -0.6518 0.0568 0.7563
+vn 0.4524 0.1603 0.8773
+vn 0.2063 0.5831 0.7858
+vn 0.1068 0.7590 0.6423
+vn 0.1423 0.2107 0.9671
+vn 0.1424 0.2107 0.9671
+vn -0.2750 -0.5719 0.7728
+vn -0.5465 0.3505 0.7606
+vn 0.3207 -0.7668 0.5560
+vn 0.3829 -0.7537 0.5342
+vn 0.8065 -0.2362 0.5420
+vn 0.0000 0.7580 0.6522
+vn -0.7001 0.4647 0.5421
+vn -0.5254 0.7009 0.4825
+vn -0.6707 -0.3587 0.6492
+vn -0.0941 -0.8437 0.5285
+vn 0.3382 0.4508 0.8260
+vn 0.3382 0.4509 0.8260
+vn 0.3382 0.4508 0.8261
+vn -0.6699 -0.4576 0.5846
+vn 0.2414 0.4190 0.8753
+vn 0.6185 0.0133 0.7856
+vn -0.3589 -0.2593 0.8966
+vn -0.6206 0.3048 0.7224
+vn 0.0619 0.8440 0.5328
+vn 0.3668 -0.2279 0.9020
+vn 0.1384 -0.1408 0.9803
+vn 0.2157 -0.7177 0.6621
+vn 0.2398 0.5505 0.7997
+vn -0.0497 0.0606 0.9969
+vn -0.0193 0.6376 0.7701
+vn 0.2552 -0.7013 0.6656
+vn 0.2552 -0.7012 0.6657
+vn -0.3223 0.0224 0.9464
+vn 0.4704 0.3764 0.7981
+vn 0.2047 0.5478 0.8112
+vn -0.0313 0.6985 0.7149
+vn -0.5785 0.2275 0.7833
+vn -0.5787 0.2277 0.7831
+vn 0.3010 0.1474 0.9422
+vn 0.3088 -0.3825 0.8708
+vn 0.3602 -0.0412 0.9320
+vn -0.3979 0.7713 0.4967
+vn -0.7598 -0.2301 0.6080
+vn 0.6682 0.5061 0.5453
+vn -0.1202 -0.8351 0.5369
+vn -0.0031 -0.4995 0.8663
+vn 0.6359 0.4593 0.6202
+vn -0.0650 -0.8056 0.5889
+vn 0.1086 0.1406 0.9841
+vn -0.5932 -0.0499 0.8035
+vn -0.3359 0.0653 0.9396
+vn -0.3106 -0.0840 0.9468
+vn 0.2460 0.5739 0.7811
+vn 0.4587 -0.3385 0.8216
+vn 0.1131 -0.3371 0.9346
+vn -0.3890 -0.1057 0.9152
+vn -0.5997 -0.0846 0.7957
+vn 0.0339 0.0052 0.9994
+vn 0.0485 -0.1568 0.9864
+vn -0.3472 -0.5288 0.7745
+vn -0.3472 -0.5287 0.7745
+vn -0.2458 -0.8284 0.5034
+vn -0.6327 0.5215 0.5725
+vn -0.7170 -0.2121 0.6641
+vn 0.5818 0.4215 0.6956
+vn 0.8216 -0.4390 0.3636
+vn 0.5309 -0.1469 0.8346
+vn 0.4126 0.1354 0.9008
+vn 0.3777 0.1596 0.9121
+vn 0.3717 -0.2064 0.9051
+vn -0.7488 0.0643 0.6597
+vn -0.7476 0.0521 0.6621
+vn -0.3572 -0.0981 0.9289
+vn 0.1527 0.1074 0.9824
+vn -0.2278 0.5606 0.7962
+vn -0.5081 0.6422 0.5739
+vn 0.5743 0.6032 0.5535
+vn 0.0761 -0.6941 0.7158
+vn 0.6826 -0.0579 0.7285
+vn 0.4432 0.0345 0.8958
+vn 0.4633 0.5948 0.6569
+vn 0.9387 -0.1397 0.3151
+vn 0.4530 0.3156 0.8338
+vn -0.1006 0.5252 0.8450
+vn 0.7326 0.2512 0.6326
+vn -0.1973 0.3786 0.9043
+vn 0.5166 0.2415 0.8215
+vn -0.3521 0.0990 0.9307
+vn 0.4373 -0.0842 0.8954
+vn 0.1302 -0.0537 0.9900
+vn -0.4291 -0.6213 0.6557
+vn -0.4797 -0.7062 0.5208
+vn -0.4797 -0.7061 0.5208
+vn 0.6904 0.0178 0.7232
+vn -0.3884 -0.1386 0.9110
+vn 0.4881 -0.0276 0.8723
+vn -0.0050 0.6399 0.7685
+vn 0.1316 0.6385 0.7583
+vn 0.4607 0.4801 0.7465
+vn -0.2215 0.6654 0.7128
+vn -0.0322 -0.8191 0.5727
+vn -0.5641 0.3928 0.7263
+vn -0.3149 0.2243 0.9223
+vn 0.3626 0.6119 0.7029
+vn -0.8552 0.3416 0.3898
+vn -0.1375 0.2820 0.9495
+vn 0.6993 -0.7045 0.1207
+vn 0.6331 -0.3804 0.6741
+vn -0.6473 -0.3636 0.6699
+vn -0.4765 0.5917 0.6503
+vn 0.7486 -0.2390 0.6185
+vn 0.0160 0.3290 0.9442
+vn -0.2386 -0.6969 0.6764
+vn -0.2385 -0.6969 0.6764
+vn -0.2254 -0.0996 0.9692
+vn 0.4393 0.5272 0.7274
+vn -0.5929 0.5017 0.6299
+vn 0.6602 0.0620 0.7485
+vn -0.2900 0.3022 0.9081
+vn 0.2860 0.0541 0.9567
+vn 0.7617 -0.0013 0.6480
+vn -0.5074 0.4444 0.7383
+vn -0.7089 -0.0238 0.7049
+vn -0.7089 -0.0252 0.7049
+vn -0.2231 0.1719 0.9595
+vn 0.7872 0.0530 0.6144
+vn -0.8075 0.2198 0.5474
+vn -0.2145 0.3171 0.9238
+vn 0.2287 -0.2015 0.9524
+vn -0.2905 -0.4944 0.8193
+vn -0.3793 -0.6388 0.6694
+vn -0.1966 0.5486 0.8126
+vn -0.0546 -0.1755 0.9830
+s off
+f 2034//2628 2035//2628 2036//2628
+f 2037//2629 2038//2629 2039//2629 2040//2629
+f 2041//2630 2038//2630 2037//2630 2042//2630 2043//2630 2044//2630
+f 2045//2631 2046//2631 2047//2631 2048//2631 2049//2631 2050//2631 2044//2631 2043//2631
+f 2049//2632 2048//2632 2051//2632
+f 2052//2633 2053//2633 2054//2633 2055//2633 2056//2633 2057//2633
+f 2058//2634 2059//2634 2053//2634 2052//2634
+f 2060//2635 2061//2635 2059//2635 2058//2635 2062//2635
+f 2063//2636 2060//2636 2062//2636 2064//2636 2065//2636
+f 2066//2637 2067//2637 2063//2637 2065//2637 2068//2637
+f 2069//2638 2055//2638 2054//2638 2066//2638 2068//2638
+f 2070//2639 2071//2639 2072//2639 2073//2639 2074//2639 2075//2639
+f 2076//2639 2077//2639 2078//2639
+f 2079//2640 2080//2640 2081//2640 2072//2640 2071//2640 2082//2640
+f 2083//2641 2084//2641 2079//2641 2082//2641 2085//2641
+f 2084//2642 2083//2642 2086//2642 2087//2642
+f 2088//2643 2087//2643 2086//2643 2089//2643
+f 2075//2644 2074//2644 2090//2644 2078//2644 2077//2644 2088//2644 2089//2644
+f 2091//2645 2092//2645 2093//2645 2094//2645 2095//2645
+f 2096//2646 2097//2646 2092//2646 2091//2646 2098//2646
+f 2099//2647 2100//2647 2097//2647 2096//2647 2101//2647
+f 2102//2648 2099//2648 2101//2648 2103//2648
+f 2104//2649 2105//2649 2106//2649 2107//2649 2102//2649 2103//2649
+f 2095//2650 2094//2650 2108//2650 2109//2650 2110//2650
+f 2111//2651 2112//2651 2113//2651 2114//2651
+f 2115//2652 2116//2652 2117//2652 2118//2652 2112//2652 2111//2652
+f 2119//2653 2120//2653 2116//2653 2115//2653 2121//2653
+f 2122//2654 2123//2654 2119//2654 2121//2654 2124//2654 2125//2654
+f 2126//2655 2127//2655 2128//2655 2125//2655 2124//2655 2129//2655
+f 2113//2656 2126//2656 2129//2656 2114//2656
+f 2130//2657 2131//2657 2132//2657 2133//2657
+f 2134//2658 2135//2658 2136//2658 2137//2658 2131//2658 2130//2658 2138//2658
+f 2139//2659 2140//2659 2141//2659 2135//2659 2134//2659
+f 2140//2660 2139//2660 2142//2660 2143//2660 2144//2660
+f 2145//2661 2144//2661 2143//2661 2146//2661 2147//2661
+f 2133//2662 2132//2662 2145//2662 2147//2662 2148//2662
+f 2149//2663 2150//2663 2151//2663 2152//2663 2153//2663 2154//2663
+f 2155//2664 2149//2664 2154//2664 2156//2664
+f 2157//2665 2158//2665 2155//2665 2156//2665
+f 2159//2666 2160//2666 2158//2666 2157//2666
+f 2153//2667 2152//2667 2161//2667 2162//2667 2163//2667
+f 2164//2668 2165//2668 2166//2668 2167//2668 2168//2668
+f 2169//2669 2170//2669 2164//2669 2168//2669 2171//2669
+f 2172//2670 2173//2670 2174//2670 2170//2670 2169//2670 2175//2670
+f 2176//2671 2177//2671 2172//2671 2175//2671
+f 2178//2672 2179//2672 2180//2672 2181//2672 2177//2672 2176//2672 2182//2672
+f 2183//2673 2184//2673 2185//2673 2179//2673 2178//2673 2167//2673 2166//2673
+f 2186//2628 2187//2628 2188//2628 2189//2628
+f 2190//2674 2186//2674 2189//2674 2191//2674
+f 2192//2629 2193//2629 2194//2629 2190//2629 2191//2629
+f 2195//2630 2193//2630 2192//2630 2196//2630
+f 2197//2631 2198//2631 2199//2631 2195//2631 2196//2631
+f 2187//2632 2198//2632 2197//2632 2188//2632
+f 2200//2633 2201//2633 2202//2633 2203//2633 2204//2633
+f 2205//2634 2206//2634 2207//2634 2201//2634 2200//2634
+f 2208//2635 2209//2635 2210//2635 2206//2635 2205//2635 2211//2635 2212//2635
+f 2213//2636 2214//2636 2215//2636 2212//2636 2211//2636 2216//2636
+f 2217//2637 2218//2637 2213//2637 2216//2637 2219//2637
+f 2220//2638 2203//2638 2202//2638 2221//2638 2222//2638 2217//2638 2219//2638
+f 2223//2639 2224//2639 2225//2639 2226//2639 2227//2639 2228//2639
+f 2229//2640 2230//2640 2231//2640 2224//2640 2223//2640 2232//2640 2233//2640 2234//2640 2235//2640
+f 2236//2641 2237//2641 2234//2641 2233//2641
+f 2238//2642 2239//2642 2237//2642 2236//2642 2240//2642
+f 2241//2643 2238//2643 2240//2643 2242//2643 2243//2643
+f 2228//2644 2227//2644 2244//2644 2245//2644 2241//2644 2243//2644
+f 2246//2645 2247//2645 2248//2645 2249//2645
+f 2250//2647 2251//2647 2252//2647 2253//2647 2254//2647
+f 2255//2648 2256//2648 2251//2648 2250//2648 2257//2648
+f 2258//2649 2259//2649 2255//2649 2257//2649 2260//2649
+f 2249//2650 2248//2650 2261//2650 2259//2650 2258//2650
+f 2262//2651 2263//2651 2264//2651 2265//2651 2266//2651
+f 2267//2652 2268//2652 2263//2652 2262//2652
+f 2269//2653 2268//2653 2267//2653 2270//2653
+f 2271//2654 2269//2654 2270//2654 2272//2654
+f 2273//2655 2271//2655 2272//2655 2274//2655
+f 2275//2656 2265//2656 2264//2656 2273//2656 2274//2656
+f 2276//2657 2222//2657 2221//2657 2277//2657 2278//2657 2279//2657
+f 2280//2658 2218//2658 2217//2658 2222//2658 2276//2658 2281//2658
+f 2282//2659 2214//2659 2213//2659 2218//2659 2280//2659 2283//2659
+f 2284//2660 2285//2660 2286//2660 2282//2660 2283//2660
+f 2287//2661 2286//2661 2285//2661 2288//2661
+f 2278//2662 2287//2662 2288//2662 2279//2662
+f 2289//2663 2290//2663 2291//2663 2292//2663 2293//2663
+f 2294//2664 2289//2664 2293//2664 2295//2664
+f 2296//2665 2297//2665 2298//2665 2299//2665 2294//2665 2295//2665
+f 2300//2666 2301//2666 2297//2666 2296//2666
+f 2292//2675 2291//2675 2302//2675
+f 2303//2668 2304//2668 2305//2668 2306//2668 2307//2668 2308//2668
+f 2309//2669 2310//2669 2311//2669 2303//2669 2308//2669 2312//2669
+f 2313//2670 2310//2670 2309//2670 2314//2670 2315//2670
+f 2316//2671 2317//2671 2313//2671 2315//2671
+f 2318//2672 2319//2672 2320//2672 2321//2672 2317//2672 2316//2672 2322//2672
+f 2305//2673 2319//2673 2318//2673 2306//2673
+f 2323//2628 2324//2628 2325//2628 2326//2628 2327//2628
+f 2328//2674 2323//2674 2327//2674 2329//2674
+f 2330//2629 2331//2629 2332//2629 2328//2629 2329//2629 2333//2629
+f 2334//2630 2335//2630 2331//2630 2330//2630
+f 2336//2631 2337//2631 2335//2631 2334//2631
+f 2324//2632 2338//2632 2337//2632 2336//2632 2325//2632
+f 2339//2633 2340//2633 2341//2633 2342//2633 2343//2633
+f 2344//2634 2345//2634 2340//2634 2339//2634
+f 2346//2635 2345//2635 2344//2635 2347//2635 2348//2635
+f 2349//2636 2346//2636 2348//2636 2350//2636
+f 2351//2637 2349//2637 2350//2637 2352//2637
+f 2342//2638 2341//2638 2351//2638 2352//2638
+f 2353//2639 2354//2639 2355//2639 2356//2639 2357//2639
+f 2358//2640 2359//2640 2360//2640 2353//2640 2357//2640
+f 2361//2641 2362//2641 2363//2641 2364//2641 2360//2641 2359//2641
+f 2365//2642 2366//2642 2367//2642 2362//2642 2361//2642
+f 2368//2643 2369//2643 2366//2643 2365//2643
+f 2370//2644 2356//2644 2355//2644 2369//2644 2368//2644
+f 2371//2645 2372//2645 2373//2645 2374//2645 2375//2645 2376//2645
+f 2377//2646 2378//2646 2379//2646 2380//2646 2372//2646 2371//2646
+f 2381//2647 2382//2647 2378//2647 2377//2647 2383//2647
+f 2384//2648 2381//2648 2383//2648 2385//2648 2386//2648
+f 2387//2649 2388//2649 2384//2649 2386//2649 2389//2649
+f 2375//2650 2374//2650 2387//2650 2389//2650
+f 2390//2651 2391//2651 2392//2651 2393//2651 2394//2651
+f 2392//2652 2395//2652 2396//2652 2397//2652 2398//2652 2399//2652 2393//2652
+f 2400//2654 2401//2654 2402//2654 2403//2654 2404//2654 2405//2654 2406//2654 2407//2654
+f 2408//2655 2409//2655 2403//2655 2402//2655 2410//2655 2411//2655
+f 2412//2656 2390//2656 2394//2656 2408//2656 2411//2656 2413//2656
+f 2414//2657 2415//2657 2416//2657 2417//2657 2418//2657
+f 2419//2658 2415//2658 2414//2658 2420//2658
+f 2421//2659 2422//2659 2423//2659 2424//2659 2425//2659
+f 2426//2660 2427//2660 2425//2660 2424//2660
+f 2428//2661 2427//2661 2426//2661 2429//2661
+f 2418//2662 2417//2662 2428//2662 2429//2662
+f 2430//2668 2431//2668 2432//2668 2433//2668
+f 2434//2669 2435//2669 2430//2669 2433//2669 2436//2669
+f 2437//2670 2435//2670 2434//2670 2438//2670
+f 2439//2671 2440//2671 2437//2671 2438//2671
+f 2441//2672 2440//2672 2439//2672 2442//2672 2443//2672
+f 2431//2673 2441//2673 2443//2673 2432//2673
+f 2444//2628 2445//2628 2446//2628 2447//2628 2448//2628 2449//2628
+f 2450//2674 2451//2674 2452//2674 2453//2674 2454//2674 2445//2674 2444//2674 2455//2674
+f 2453//2629 2452//2629 2456//2629 2457//2629 2458//2629 2459//2629
+f 2460//2630 2458//2630 2457//2630 2461//2630 2462//2630
+f 2463//2631 2464//2631 2462//2631 2461//2631 2465//2631 2466//2631 2467//2631
+f 2463//2632 2467//2632 2468//2632
+f 2469//2633 2470//2633 2471//2633 2472//2633
+f 2473//2634 2474//2634 2470//2634 2469//2634
+f 2474//2635 2473//2635 2475//2635 2476//2635 2477//2635
+f 2478//2636 2477//2636 2476//2636 2479//2636
+f 2480//2637 2478//2637 2479//2637 2481//2637 2482//2637
+f 2483//2638 2472//2638 2471//2638 2480//2638 2482//2638 2484//2638
+f 2485//2639 2486//2639 2487//2639 2488//2639 2489//2639 2490//2639 2491//2639
+f 2492//2640 2493//2640 2494//2640 2491//2640 2490//2640 2495//2640
+f 2496//2676 2497//2676 2498//2676 2499//2676 2500//2676 2501//2676 2494//2676 2493//2676
+f 2502//2642 2503//2642 2497//2642 2496//2642 2504//2642
+f 2500//2642 2499//2642 2505//2642 2506//2642 2507//2642
+f 2508//2643 2502//2643 2504//2643 2509//2643
+f 2510//2643 2507//2643 2506//2643 2511//2643 2512//2643
+f 2486//2644 2510//2644 2512//2644 2513//2644 2487//2644
+f 2514//2677 2515//2677 2516//2677 2517//2677
+f 2518//2646 2515//2646 2514//2646 2519//2646
+f 2520//2647 2518//2647 2519//2647 2521//2647
+f 2252//2648 2520//2648 2521//2648 2253//2648
+f 2517//2650 2516//2650 2247//2650 2246//2650
+f 2522//2651 2523//2651 2524//2651 2525//2651
+f 2526//2652 2527//2652 2523//2652 2522//2652 2528//2652
+f 2529//2653 2530//2653 2527//2653 2526//2653 2531//2653
+f 2532//2654 2533//2654 2529//2654 2531//2654 2534//2654 2535//2654
+f 2536//2655 2532//2655 2535//2655 2537//2655
+f 2524//2656 2536//2656 2537//2656 2525//2656
+f 2538//2663 2539//2663 2540//2663 2541//2663 2542//2663
+f 2543//2664 2544//2664 2539//2664 2538//2664 2545//2664
+f 2546//2665 2543//2665 2545//2665 2547//2665
+f 2548//2666 2549//2666 2550//2666 2546//2666 2547//2666 2551//2666
+f 2552//2678 2553//2678 2554//2678 2555//2678 2548//2678 2551//2678
+f 2542//2667 2541//2667 2556//2667 2553//2667 2552//2667
+f 2557//2668 2558//2668 2559//2668 2560//2668
+f 2561//2669 2562//2669 2563//2669 2564//2669 2565//2669 2566//2669 2557//2669 2560//2669
+f 2567//2670 2564//2670 2563//2670 2568//2670 2569//2670
+f 2570//2671 2571//2671 2567//2671 2569//2671 2572//2671
+f 2573//2672 2570//2672 2572//2672 2574//2672 2575//2672
+f 2558//2673 2576//2673 2573//2673 2575//2673 2559//2673
+f 2577//2628 2578//2628 2579//2628 2580//2628 2581//2628 2582//2628
+f 2583//2674 2577//2674 2582//2674 2584//2674 2585//2674 2586//2674 2587//2674
+f 2588//2629 2589//2629 2583//2629 2587//2629 2590//2629
+f 2591//2630 2588//2630 2590//2630 2592//2630 2593//2630
+f 2594//2631 2595//2631 2591//2631 2593//2631 2596//2631 2597//2631
+f 2578//2632 2594//2632 2597//2632 2598//2632 2579//2632
+f 2599//2633 2600//2633 2601//2633 2602//2633 2603//2633
+f 2604//2634 2605//2634 2600//2634 2599//2634
+f 2606//2635 2607//2635 2605//2635 2604//2635 2608//2635
+f 2609//2636 2606//2636 2608//2636 2610//2636
+f 2611//2637 2609//2637 2610//2637 2612//2637
+f 2602//2638 2601//2638 2613//2638 2611//2638 2612//2638 2614//2638
+f 2615//2639 2123//2639 2122//2639 2616//2639 2617//2639 2618//2639 2619//2639
+f 2620//2640 2621//2640 2622//2640 2623//2640 2619//2640 2618//2640 2624//2640
+f 2625//2641 2626//2641 2621//2641 2620//2641
+f 2627//2642 2628//2642 2626//2642 2625//2642
+f 2629//2643 2628//2643 2627//2643 2630//2643
+f 2616//2644 2122//2644 2125//2644 2128//2644 2629//2644 2630//2644
+f 2631//2645 2632//2645 2633//2645 2634//2645 2635//2645
+f 2636//2646 2637//2646 2638//2646 2632//2646 2631//2646 2639//2646
+f 2640//2647 2637//2647 2636//2647 2641//2647 2642//2647
+f 2643//2648 2640//2648 2642//2648 2644//2648
+f 2645//2649 2646//2649 2643//2649 2644//2649 2647//2649
+f 2648//2679 2646//2679 2645//2679 2649//2679
+f 2650//2651 2651//2651 2652//2651 2653//2651 2654//2651
+f 2655//2652 2656//2652 2651//2652 2650//2652
+f 2657//2653 2656//2653 2655//2653 2658//2653
+f 2659//2654 2660//2654 2661//2654 2657//2654 2658//2654
+f 2662//2655 2663//2655 2660//2655 2659//2655
+f 2654//2656 2653//2656 2663//2656 2662//2656
+f 2664//2657 2665//2657 2666//2657 2667//2657 2668//2657
+f 2669//2658 2670//2658 2665//2658 2664//2658 2671//2658
+f 2672//2659 2673//2659 2674//2659 2669//2659 2671//2659 2675//2659
+f 2676//2660 2677//2660 2673//2660 2672//2660
+f 2678//2661 2679//2661 2677//2661 2676//2661 2680//2661
+f 2668//2662 2667//2662 2681//2662 2678//2662 2680//2662 2682//2662
+f 2683//2668 2684//2668 2685//2668 2686//2668
+f 2687//2669 2688//2669 2689//2669 2683//2669 2686//2669
+f 2690//2670 2691//2670 2692//2670 2688//2670 2687//2670
+f 2693//2671 2694//2671 2691//2671 2690//2671
+f 2695//2672 2696//2672 2694//2672 2693//2672
+f 2697//2628 2698//2628 2699//2628
+f 2231//2629 2230//2629 2700//2629 2701//2629
+f 2225//2630 2224//2630 2231//2630 2701//2630 2702//2630
+f 2703//2631 2704//2631 2226//2631 2225//2631 2702//2631
+f 2703//2632 2705//2632 2704//2632
+f 2706//2633 2707//2633 2708//2633 2709//2633 2710//2633 2711//2633
+f 2712//2634 2707//2634 2706//2634 2713//2634 2714//2634
+f 2710//2680 2709//2680 2715//2680 2716//2680
+f 2717//2639 2718//2639 2719//2639 2720//2639 2721//2639
+f 2722//2640 2723//2640 2724//2640 2718//2640 2717//2640
+f 2725//2641 2726//2641 2723//2641 2722//2641
+f 2727//2642 2728//2642 2729//2642 2730//2642 2731//2642 2726//2642 2725//2642 2732//2642
+f 2727//2681 2732//2681 2733//2681
+f 2734//2643 2731//2643 2730//2643 2735//2643 2736//2643
+f 2737//2644 2734//2644 2736//2644 2738//2644 2721//2644 2720//2644 2739//2644
+f 2740//2645 2741//2645 2742//2645 2743//2645 2744//2645
+f 2745//2646 2746//2646 2747//2646 2741//2646 2740//2646
+f 2748//2647 2749//2647 2746//2647 2745//2647 2750//2647
+f 2751//2648 2748//2648 2750//2648 2752//2648 2753//2648
+f 2754//2649 2755//2649 2756//2649 2757//2649 2751//2649 2753//2649
+f 2743//2650 2742//2650 2755//2650 2754//2650
+f 2758//2651 2759//2651 2760//2651 2761//2651 2762//2651
+f 2291//2652 2290//2652 2759//2652 2758//2652 2302//2652
+f 2763//2654 2764//2654 2765//2654 2766//2654
+f 2767//2655 2768//2655 2769//2655 2764//2655 2763//2655
+f 2761//2656 2768//2656 2767//2656 2762//2656
+f 2770//2657 2771//2657 2772//2657 2773//2657 2774//2657 2775//2657 2776//2657 2777//2657
+f 2778//2658 2779//2658 2780//2658 2771//2658 2770//2658 2781//2658
+f 2775//2658 2774//2658 2782//2658 2783//2658 2784//2658
+f 2785//2659 2786//2659 2787//2659 2779//2659 2778//2659
+f 2788//2659 2784//2659 2783//2659 2789//2659 2790//2659 2791//2659
+f 2792//2660 2793//2660 2794//2660 2787//2660 2786//2660 2795//2660
+f 2791//2660 2790//2660 2796//2660
+f 2797//2661 2798//2661 2799//2661 2800//2661 2793//2661 2792//2661
+f 2776//2662 2801//2662 2802//2662 2799//2662 2798//2662 2777//2662
+f 2803//2663 2804//2663 2805//2663 2806//2663
+f 2807//2664 2808//2664 2803//2664 2806//2664 2809//2664 2810//2664 2811//2664
+f 2812//2682 2813//2682 2807//2682 2811//2682 2814//2682 2815//2682
+f 2816//2666 2817//2666 2818//2666 2819//2666 2812//2666 2815//2666
+f 2819//2678 2818//2678 2820//2678 2821//2678
+f 2822//2678 2823//2678 2824//2678
+f 2804//2675 2824//2675 2823//2675 2825//2675 2826//2675 2805//2675
+f 2827//2668 2828//2668 2829//2668 2830//2668 2831//2668 2832//2668 2833//2668 2834//2668
+f 2835//2669 2836//2669 2837//2669 2827//2669 2834//2669
+f 2838//2670 2839//2670 2840//2670 2836//2670 2835//2670
+f 2841//2671 2842//2671 2843//2671 2839//2671 2838//2671
+f 2844//2672 2845//2672 2846//2672 2847//2672 2842//2672 2841//2672 2848//2672
+f 2849//2673 2832//2673 2831//2673 2850//2673 2845//2673 2844//2673 2851//2673
+f 2736//2628 2735//2628 2852//2628 2853//2628 2854//2628 2855//2628 2738//2628
+f 2856//2674 2852//2674 2735//2674 2730//2674 2729//2674
+f 2729//2629 2728//2629 2857//2629 2858//2629 2856//2629
+f 2859//2630 2860//2630 2857//2630 2728//2630 2727//2630 2733//2630
+f 2861//2631 2862//2631 2860//2631 2859//2631
+f 2855//2632 2854//2632 2862//2632 2861//2632
+f 2863//2633 2864//2633 2865//2633 2866//2633 2867//2633
+f 2868//2634 2869//2634 2870//2634 2864//2634 2863//2634
+f 2871//2635 2872//2635 2873//2635 2874//2635 2875//2635 2876//2635 2869//2635 2868//2635
+f 2877//2636 2875//2636 2874//2636 2878//2636 2879//2636 2880//2636
+f 2881//2637 2882//2637 2883//2637 2884//2637
+f 2879//2637 2878//2637 2885//2637 2886//2637
+f 2887//2638 2886//2638 2885//2638 2888//2638 2889//2638 2890//2638 2882//2638 2881//2638 2867//2638 2866//2638
+f 2891//2639 2405//2639 2404//2639 2892//2639 2893//2639 2894//2639
+f 2895//2640 2896//2640 2897//2640 2894//2640 2893//2640 2898//2640 2899//2640
+f 2900//2641 2901//2641 2902//2641 2899//2641 2898//2641 2903//2641
+f 2904//2642 2905//2642 2906//2642 2900//2642 2903//2642
+f 2907//2643 2905//2643 2904//2643 2908//2643
+f 2892//2644 2404//2644 2403//2644 2409//2644 2907//2644 2908//2644
+f 2909//2645 2910//2645 2911//2645 2912//2645 2913//2645
+f 2914//2646 2915//2646 2916//2646 2910//2646 2909//2646
+f 2917//2647 2918//2647 2915//2647 2914//2647 2919//2647
+f 2920//2648 2921//2648 2922//2648 2917//2648 2919//2648 2923//2648
+f 2924//2649 2925//2649 2926//2649 2920//2649 2923//2649
+f 2927//2651 2928//2651 2929//2651 2930//2651 2931//2651
+f 2932//2652 2933//2652 2928//2652 2927//2652
+f 2934//2653 2935//2653 2936//2653 2933//2653 2932//2653 2937//2653
+f 2938//2654 2939//2654 2935//2654 2934//2654 2940//2654
+f 2941//2655 2939//2655 2938//2655 2942//2655
+f 2930//2656 2941//2656 2942//2656 2931//2656
+f 2943//2657 2944//2657 2945//2657 2946//2657 2947//2657 2948//2657
+f 2949//2658 2950//2658 2951//2658 2944//2658 2943//2658 2952//2658
+f 2953//2659 2954//2659 2955//2659 2950//2659 2949//2659 2956//2659 2957//2659
+f 2958//2660 2959//2660 2960//2660 2953//2660 2957//2660
+f 2961//2661 2959//2661 2958//2661 2962//2661 2963//2661
+f 2946//2662 2964//2662 2961//2662 2963//2662 2947//2662
+f 2965//2683 2966//2683 2967//2683
+f 2968//2663 2969//2663 2970//2663 2971//2663 2972//2663 2973//2663 2974//2663
+f 2109//2664 2975//2664 2965//2664 2967//2664 2110//2664
+f 2976//2664 2977//2664 2974//2664 2973//2664 2978//2664 2979//2664
+f 2980//2665 2976//2665 2979//2665 2981//2665 2105//2665 2104//2665 2982//2665
+f 2983//2666 2984//2666 2985//2666 2980//2666 2982//2666
+f 2986//2678 2987//2678 2988//2678 2989//2678 2984//2678 2983//2678 2990//2678
+f 2988//2675 2991//2675 2971//2675 2970//2675 2992//2675 2989//2675
+f 2993//2668 2994//2668 2995//2668 2996//2668 2997//2668 2998//2668
+f 2999//2669 3000//2669 2993//2669 2998//2669 3001//2669
+f 3002//2670 3003//2670 3000//2670 2999//2670 3004//2670
+f 3005//2671 3002//2671 3004//2671 3006//2671
+f 3007//2672 3008//2672 3009//2672 3010//2672 3005//2672 3006//2672 3011//2672 3012//2672
+f 2995//2673 3013//2673 3008//2673 3007//2673 2996//2673
+f 3014//2628 3015//2628 3016//2628 3017//2628 3018//2628
+f 3019//2674 3016//2674 3015//2674 3020//2674
+f 3021//2629 3022//2629 3019//2629 3020//2629 3023//2629
+f 3024//2630 3025//2630 3026//2630 3021//2630 3023//2630
+f 3027//2631 3028//2631 3029//2631 3025//2631 3024//2631 3030//2631 3031//2631
+f 3017//2632 3027//2632 3031//2632 3018//2632
+f 3032//2633 3033//2633 3034//2633 3035//2633 3036//2633
+f 3037//2634 3038//2634 3033//2634 3032//2634 3039//2634
+f 3039//2635 3040//2635 3037//2635
+f 3041//2636 3042//2636 3043//2636 3044//2636
+f 3045//2637 3046//2637 3047//2637 3042//2637 3041//2637 3048//2637
+f 3049//2638 3050//2638 3035//2638 3034//2638 3045//2638 3048//2638
+f 3051//2639 3052//2639 3053//2639 3054//2639
+f 3055//2640 3056//2640 3057//2640 3051//2640 3054//2640
+f 3056//2641 3055//2641 3058//2641 3059//2641
+f 3060//2684 3061//2684 3062//2684 3059//2684 3058//2684
+f 3063//2643 3064//2643 3061//2643 3060//2643
+f 3053//2644 3052//2644 3064//2644 3063//2644
+f 3065//2645 3066//2645 3067//2645 3068//2645 3069//2645 3070//2645
+f 3071//2646 3065//2646 3070//2646 3072//2646
+f 3073//2647 3074//2647 3071//2647 3072//2647 3075//2647
+f 3076//2648 3073//2648 3075//2648 3077//2648
+f 3078//2649 3079//2649 3080//2649 3081//2649 3076//2649 3077//2649 3082//2649
+f 3068//2650 3067//2650 3083//2650 3079//2650 3078//2650
+f 3084//2651 3085//2651 3086//2651 3087//2651
+f 3088//2652 3089//2652 3090//2652 3085//2652 3084//2652 3091//2652 3092//2652
+f 2035//2653 2034//2653 3088//2653 3092//2653
+f 2049//2654 2051//2654 3093//2654 3094//2654 3095//2654 2050//2654
+f 3096//2655 3097//2655 3094//2655 3093//2655 3098//2655 3099//2655
+f 3086//2656 3096//2656 3099//2656 3087//2656
+f 3100//2657 3101//2657 3102//2657 3103//2657 3104//2657
+f 3105//2659 3106//2659 3107//2659
+f 3108//2660 3109//2660 3110//2660 3106//2660 3105//2660
+f 3111//2661 3112//2661 3113//2661 3109//2661 3108//2661 3114//2661
+f 3102//2662 3101//2662 3115//2662 3112//2662 3111//2662
+f 3116//2663 3117//2663 3118//2663 3119//2663 3120//2663
+f 3121//2664 3116//2664 3120//2664 3122//2664 3123//2664
+f 3124//2665 3125//2665 3126//2665 3121//2665 3123//2665 3127//2665
+f 3128//2666 3129//2666 3125//2666 3124//2666
+f 3130//2678 3131//2678 3132//2678 3133//2678 3129//2678 3128//2678
+f 3118//2667 3134//2667 3131//2667 3130//2667 3119//2667
+f 3135//2668 3136//2668 3137//2668 3138//2668 3139//2668
+f 3140//2669 3141//2669 3142//2669 3135//2669 3139//2669 3143//2669
+f 3144//2670 3145//2670 3146//2670 3147//2670 3141//2670 3140//2670 3148//2670
+f 3149//2671 3150//2671 3145//2671 3144//2671 3151//2671
+f 3152//2672 3153//2672 3150//2672 3149//2672
+f 3137//2673 3136//2673 3154//2673 3153//2673 3152//2673 3155//2673
+f 3156//2628 3157//2628 3158//2628 3159//2628
+f 3160//2674 3156//2674 3159//2674 3161//2674
+f 3162//2629 3163//2629 3160//2629 3161//2629 3164//2629
+f 3165//2630 3166//2630 3167//2630 3162//2630 3164//2630
+f 3168//2631 3169//2631 3170//2631 3166//2631 3165//2631 3171//2631 3172//2631
+f 3157//2632 3168//2632 3172//2632 3173//2632 3158//2632
+f 3174//2633 3175//2633 3176//2633 3177//2633 3178//2633
+f 2635//2634 2634//2634 3175//2634 3174//2634 3179//2634
+f 3180//2637 3181//2637 2648//2637 2649//2637 3182//2637
+f 3178//2638 3177//2638 3180//2638 3182//2638
+f 3183//2639 3184//2639 3185//2639 3186//2639
+f 3187//2640 3188//2640 3189//2640 3183//2640 3186//2640
+f 3190//2641 3191//2641 3188//2641 3187//2641 3192//2641
+f 3193//2642 3194//2642 3191//2642 3190//2642
+f 3195//2643 3196//2643 3197//2643 3194//2643 3193//2643
+f 3184//2644 3196//2644 3195//2644 3198//2644 3185//2644
+f 3199//2645 3200//2645 3201//2645
+f 3202//2646 3203//2646 3204//2646 3200//2646 3199//2646 3205//2646
+f 3206//2647 3207//2647 3203//2647 3202//2647 3208//2647
+f 3209//2648 3206//2648 3208//2648 3210//2648
+f 3211//2649 3212//2649 3213//2649 3209//2649 3210//2649 3214//2649
+f 3212//2650 3211//2650 3215//2650
+f 3216//2651 3217//2651 3218//2651 3219//2651 3220//2651
+f 3221//2652 3217//2652 3216//2652 3222//2652
+f 3223//2653 3224//2653 3225//2653 3221//2653 3222//2653 3226//2653
+f 3227//2654 3228//2654 3223//2654 3226//2654 3229//2654
+f 3230//2655 3231//2655 3227//2655 3229//2655 3232//2655 3233//2655 3234//2655 3235//2655
+f 3218//2656 3236//2656 3234//2656 3233//2656 3219//2656
+f 3237//2657 3238//2657 3239//2657 3240//2657
+f 3241//2659 3242//2659 3243//2659
+f 3244//2660 3245//2660 3246//2660 3242//2660 3241//2660 3247//2660
+f 3248//2661 3245//2661 3244//2661 3249//2661
+f 3240//2662 3239//2662 3248//2662 3249//2662 3250//2662
+f 3251//2663 3252//2663 3253//2663 3254//2663 3255//2663
+f 3256//2664 3257//2664 3258//2664 3251//2664 3255//2664 3259//2664
+f 3260//2665 2229//2665 2235//2665 3257//2665 3256//2665
+f 2230//2666 2229//2666 3260//2666 2700//2666
+f 3254//2667 3253//2667 3261//2667 2697//2667 2699//2667
+f 3262//2668 3263//2668 3264//2668 3265//2668
+f 3266//2669 3267//2669 3268//2669 3262//2669 3265//2669 3269//2669
+f 3035//2670 3050//2670 3270//2670 3271//2670 3267//2670 3266//2670 3036//2670
+f 3272//2671 3273//2671 3270//2671 3050//2671 3049//2671 3274//2671
+f 3275//2672 3276//2672 3272//2672 3274//2672 3277//2672
+f 3278//2628 3279//2628 3280//2628 3281//2628
+f 3282//2629 3283//2629 3284//2629 3285//2629
+f 3286//2630 3287//2630 3283//2630 3282//2630 3288//2630
+f 3289//2631 3290//2631 3291//2631 3287//2631 3286//2631
+f 3279//2632 3292//2632 3290//2632 3289//2632 3280//2632
+f 3293//2633 3294//2633 3295//2633 3296//2633 3297//2633 3298//2633
+f 3299//2634 3300//2634 3301//2634 3294//2634 3293//2634 3302//2634
+f 3303//2635 3300//2635 3299//2635 3304//2635
+f 3305//2636 3306//2636 3303//2636 3304//2636 3307//2636 3308//2636
+f 3308//2685 3309//2685 3305//2685
+f 3310//2637 3311//2637 3312//2637
+f 3296//2638 3313//2638 3314//2638 3310//2638 3312//2638 3315//2638 3297//2638
+f 3316//2639 3317//2639 3318//2639 3319//2639 3320//2639
+f 3321//2640 3322//2640 3318//2640 3317//2640
+f 3323//2641 3324//2641 3322//2641 3321//2641
+f 3325//2642 3326//2642 3324//2642 3323//2642
+f 3327//2643 3328//2643 3329//2643 3326//2643 3325//2643 3330//2643
+f 3320//2644 3319//2644 3331//2644 3328//2644 3327//2644
+f 3332//2645 3333//2645 3334//2645 3335//2645
+f 3336//2646 3333//2646 3332//2646 3337//2646
+f 3338//2647 3336//2647 3337//2647 3339//2647
+f 3340//2648 3341//2648 3338//2648 3339//2648 3342//2648
+f 3343//2649 3344//2649 3340//2649 3342//2649
+f 3345//2650 3344//2650 3343//2650 3346//2650
+f 3347//2651 3348//2651 3349//2651 3350//2651
+f 3351//2652 3348//2652 3347//2652 3352//2652
+f 3353//2653 3354//2653 3355//2653 3356//2653 3357//2653 3351//2653 3352//2653
+f 3358//2654 3359//2654 3360//2654 3354//2654 3353//2654
+f 3361//2655 3362//2655 3359//2655 3358//2655 3363//2655
+f 3349//2656 3361//2656 3363//2656 3350//2656
+f 3364//2657 3365//2657 3366//2657 3367//2657 2451//2657 2450//2657
+f 3365//2658 3364//2658 3368//2658
+f 3369//2659 3370//2659 3371//2659 3372//2659 3373//2659 3374//2659 3375//2659
+f 3376//2660 3377//2660 3378//2660 3371//2660 3370//2660 3379//2660
+f 2465//2661 2461//2661 2457//2661 2456//2661 3380//2661 3377//2661 3376//2661 3381//2661 3382//2661
+f 2465//2662 3382//2662 2466//2662
+f 3367//2662 3380//2662 2456//2662 2452//2662 2451//2662
+f 3383//2663 3384//2663 3385//2663 3386//2663 3387//2663
+f 3388//2664 3383//2664 3387//2664 3389//2664
+f 3390//2665 3391//2665 3392//2665 3388//2665 3389//2665
+f 3393//2666 3394//2666 3395//2666 3391//2666 3390//2666
+f 3396//2678 3397//2678 3398//2678 3399//2678 3394//2678 3393//2678
+f 3386//2667 3385//2667 3400//2667 3397//2667 3396//2667
+f 3401//2668 2870//2668 2869//2668 2876//2668 3402//2668 3403//2668 3404//2668 3405//2668
+f 3401//2669 3405//2669 3406//2669 3407//2669
+f 3408//2670 3409//2670 3407//2670 3406//2670
+f 3409//2671 3408//2671 3410//2671 3411//2671
+f 3412//2686 3410//2686 3408//2686 3406//2686 3405//2686 3404//2686
+f 3413//2672 2877//2672 2880//2672 3411//2672 3410//2672 3412//2672 3414//2672
+f 2876//2673 2875//2673 2877//2673 3413//2673 3402//2673
+f 2897//2629 2896//2629 3415//2629 3416//2629
+f 3417//2630 2891//2630 2894//2630 2897//2630 3416//2630
+f 3418//2631 2406//2631 2405//2631 2891//2631 3417//2631
+f 3418//2632 3419//2632 2407//2632 2406//2632
+f 3420//2633 3421//2633 3422//2633 3423//2633
+f 3424//2634 3425//2634 3421//2634 3420//2634 3426//2634
+f 3427//2635 3425//2635 3424//2635 3428//2635
+f 2422//2636 2421//2636 3427//2636 3428//2636 3429//2636
+f 2419//2637 2420//2637 3430//2637
+f 2423//2687 2422//2687 3429//2687
+f 3431//2638 3423//2638 3422//2638 2416//2638 2415//2638 2419//2638 3430//2638
+f 3432//2639 3433//2639 3434//2639 3435//2639 3436//2639 3437//2639 3438//2639 3439//2639 3440//2639
+f 3441//2640 3442//2640 3433//2640 3432//2640
+f 3443//2641 3444//2641 3445//2641 3442//2641 3441//2641
+f 3446//2684 3447//2684 3444//2684 3443//2684
+f 3448//2643 3449//2643 3447//2643 3446//2643 3450//2643
+f 3438//2644 3448//2644 3450//2644 3451//2644 3439//2644
+f 3452//2645 3453//2645 3454//2645 3455//2645 3456//2645
+f 3457//2646 3453//2646 3452//2646 3458//2646 3459//2646
+f 3460//2647 3461//2647 3457//2647 3459//2647 3462//2647
+f 3463//2648 3460//2648 3462//2648 3464//2648
+f 3465//2649 3466//2649 3467//2649 3463//2649 3464//2649 3468//2649
+f 3456//2650 3455//2650 3469//2650 3466//2650 3465//2650
+f 3470//2651 3471//2651 3472//2651 3473//2651 3474//2651 3475//2651
+f 2447//2652 2446//2652 3471//2652 3470//2652 3476//2652
+f 3477//2653 2448//2653 2447//2653 3476//2653
+f 3478//2654 2464//2654 2463//2654 2468//2654 3479//2654 3480//2654
+f 3481//2655 3482//2655 3480//2655 3479//2655 3483//2655 3484//2655
+f 3473//2656 3484//2656 3483//2656 3474//2656
+f 3485//2657 3486//2657 3487//2657 3488//2657
+f 3489//2658 3013//2658 2995//2658 2994//2658 3485//2658 3488//2658
+f 3490//2659 3009//2659 3008//2659 3013//2659 3489//2659
+f 3491//2660 3492//2660 3010//2660 3009//2660 3490//2660
+f 3493//2661 3494//2661 3492//2661 3491//2661 3495//2661
+f 3486//2662 3493//2662 3495//2662 3487//2662
+f 3496//2663 3497//2663 3498//2663 3499//2663
+f 3500//2664 3501//2664 3496//2664 3499//2664 3502//2664
+f 3503//2682 3504//2682 3500//2682 3502//2682 3505//2682
+f 3506//2666 3507//2666 3504//2666 3503//2666
+f 3508//2678 3509//2678 3510//2678 3507//2678 3506//2678
+f 3511//2667 3498//2667 3497//2667 3509//2667 3508//2667
+f 3512//2668 3513//2668 3514//2668 3515//2668 3516//2668
+f 3517//2669 3518//2669 3512//2669 3516//2669 3519//2669
+f 3520//2670 3521//2670 3518//2670 3517//2670 3522//2670
+f 3523//2671 3524//2671 3520//2671 3522//2671
+f 3525//2672 3526//2672 3527//2672 3528//2672 3524//2672 3523//2672
+f 3515//2673 3514//2673 3529//2673 3526//2673 3525//2673 3530//2673
+f 3531//2628 3532//2628 3533//2628 3534//2628
+f 3535//2629 3536//2629 3537//2629 3538//2629
+f 3539//2630 3540//2630 3541//2630 3535//2630 3538//2630
+f 3542//2631 3543//2631 3540//2631 3539//2631
+f 3533//2632 3544//2632 3543//2632 3542//2632 3545//2632 3534//2632
+f 3546//2633 3547//2633 3548//2633 3549//2633
+f 3550//2634 3551//2634 3552//2634 3547//2634 3546//2634 3553//2634
+f 3554//2635 3555//2635 3551//2635 3550//2635 3556//2635 3557//2635
+f 3558//2636 3559//2636 3560//2636 3554//2636 3557//2636 3561//2636
+f 3562//2637 3563//2637 3558//2637 3561//2637 3564//2637
+f 3549//2638 3548//2638 3565//2638 3562//2638 3564//2638
+f 3566//2639 2041//2639 2044//2639 2050//2639 3095//2639 3567//2639
+f 3568//2640 2039//2640 2038//2640 2041//2640 3566//2640 3569//2640 3570//2640 3571//2640
+f 2395//2641 3572//2641 3573//2641 3570//2641 3569//2641 3574//2641 2396//2641
+f 3572//2642 2395//2642 2392//2642 2391//2642 3575//2642
+f 3576//2643 3575//2643 2391//2643 2390//2643 2412//2643 3577//2643 3578//2643
+f 3567//2644 3095//2644 3094//2644 3097//2644 3578//2644 3577//2644
+f 3579//2688 3580//2688 3581//2688 3582//2688
+f 3583//2646 3580//2646 3579//2646 3584//2646 3585//2646
+f 3586//2647 3583//2647 3585//2647 3587//2647
+f 3588//2648 3586//2648 3587//2648 3589//2648
+f 3106//2649 3110//2649 3588//2649 3589//2649 3107//2649
+f 3590//2651 3591//2651 3592//2651 3593//2651
+f 3594//2652 3134//2652 3118//2652 3117//2652 3591//2652 3590//2652
+f 3132//2653 3131//2653 3134//2653 3594//2653 3595//2653
+f 3596//2654 3133//2654 3132//2654 3595//2654 3597//2654
+f 3598//2655 3599//2655 3596//2655 3597//2655 3600//2655
+f 3592//2656 3598//2656 3600//2656 3593//2656
+f 3601//2657 3602//2657 3603//2657 3604//2657
+f 2965//2658 2975//2658 2108//2658 2094//2658 2093//2658 3601//2658 3604//2658 2966//2658
+f 2975//2659 2109//2659 2108//2659
+f 2981//2689 2106//2689 2105//2689
+f 3605//2660 2987//2660 2986//2660
+f 2107//2660 2106//2660 2981//2660 2979//2660 2978//2660 3606//2660
+f 2991//2690 2988//2690 2987//2690 3605//2690 3607//2690
+f 3608//2690 3606//2690 2978//2690 2973//2690 2972//2690 3609//2690
+f 3602//2662 3609//2662 2972//2662 2971//2662 2991//2662 3607//2662 3603//2662
+f 3610//2663 3611//2663 3612//2663 2118//2663 2117//2663 3613//2663
+f 3614//2664 3615//2664 3612//2664 3611//2664 3616//2664 3617//2664
+f 3618//2665 2623//2665 2622//2665 3614//2665 3617//2665 3619//2665 3620//2665
+f 3621//2666 2615//2666 2619//2666 2623//2666 3618//2666
+f 3622//2678 2120//2678 2119//2678 2123//2678 2615//2678 3621//2678
+f 2117//2667 2116//2667 2120//2667 3622//2667 3613//2667
+f 3623//2668 3624//2668 3625//2668 3626//2668 3627//2668
+f 3628//2669 3629//2669 3630//2669 3623//2669 3627//2669 3631//2669 3632//2669
+f 3633//2670 3634//2670 3628//2670 3632//2670 3635//2670
+f 3636//2671 3637//2671 3633//2671 3635//2671 3638//2671
+f 3639//2672 3636//2672 3638//2672 3640//2672 3641//2672
+f 3625//2673 3642//2673 3639//2673 3641//2673 3626//2673
+f 2163//2628 2162//2628 3643//2628
+f 3644//2629 3645//2629 2160//2629 2159//2629
+f 3646//2630 3647//2630 3645//2630 3644//2630
+f 3648//2631 3649//2631 3650//2631 3651//2631 3652//2631 3653//2631 3647//2631 3646//2631 3654//2631
+f 3648//2632 3655//2632 3649//2632
+f 3651//2691 3656//2691 3652//2691
+f 3657//2633 3658//2633 3659//2633 3660//2633
+f 3661//2634 3662//2634 3658//2634 3657//2634
+f 3201//2692 3200//2692 3204//2692 3662//2692 3661//2692
+f 3663//2636 3213//2636 3212//2636 3215//2636 3664//2636
+f 3665//2637 3666//2637 3663//2637 3664//2637 3667//2637
+f 3660//2638 3659//2638 3665//2638 3667//2638
+f 3224//2639 3223//2639 3228//2639 3668//2639 3669//2639 3670//2639
+f 3671//2640 3672//2640 3225//2640 3224//2640 3670//2640
+f 3673//2641 3674//2641 3675//2641 3672//2641 3671//2641 3676//2641
+f 3677//2642 3678//2642 3674//2642 3673//2642
+f 3679//2643 3680//2643 3681//2643 3678//2643 3677//2643
+f 3668//2644 3228//2644 3227//2644 3231//2644 3680//2644 3679//2644
+f 3682//2693 3683//2693 3684//2693 3685//2693 3686//2693
+f 3682//2646 3686//2646 3687//2646 2685//2646 2684//2646
+f 3688//2648 2696//2648 2695//2648 3689//2648
+f 3242//2649 3246//2649 3688//2649 3689//2649 3690//2649 3243//2649
+f 3691//2651 3692//2651 3693//2651 3694//2651
+f 3261//2652 3253//2652 3252//2652 3692//2652 3691//2652 3695//2652
+f 2697//2653 3261//2653 3695//2653 2698//2653
+f 3696//2654 2244//2654 2227//2654 2226//2654 2704//2654 2705//2654
+f 3697//2655 2245//2655 2244//2655 3696//2655 3698//2655 3699//2655
+f 3693//2656 3697//2656 3699//2656 3694//2656
+f 2716//2657 2715//2657 3700//2657 3701//2657
+f 3702//2694 3703//2694 3704//2694
+f 3705//2660 3706//2660 3707//2660 3703//2660 3702//2660
+f 3708//2661 3709//2661 3710//2661 3706//2661 3705//2661
+f 3701//2662 3700//2662 3711//2662 3709//2662 3708//2662
+f 3712//2663 3713//2663 3714//2663 3715//2663 3716//2663 3717//2663
+f 3718//2664 3715//2664 3714//2664 3719//2664
+f 3720//2665 3721//2665 3718//2665 3719//2665
+f 3285//2666 3284//2666 3721//2666 3720//2666
+f 3717//2667 3722//2667 3278//2667 3281//2667 3712//2667
+f 2872//2695 2871//2695 3723//2695
+f 3724//2668 2890//2668 2889//2668 3725//2668
+f 3726//2669 2873//2669 2872//2669 3723//2669 3727//2669
+f 3725//2669 2889//2669 2888//2669 3728//2669
+f 3728//2670 2888//2670 2885//2670 2878//2670 2874//2670 2873//2670 3726//2670 3729//2670 3730//2670 3731//2670 3732//2670
+f 3733//2671 3734//2671 3735//2671 3731//2671 3730//2671 3736//2671
+f 3737//2672 3738//2672 3734//2672 3733//2672 3739//2672
+f 2882//2673 2890//2673 3724//2673 3740//2673 3737//2673 3739//2673 2883//2673
+f 3741//2629 3742//2629 2301//2629 2300//2629
+f 3743//2630 3744//2630 3745//2630 3742//2630 3741//2630
+f 2765//2631 3744//2631 3743//2631 2766//2631
+f 3746//2633 3747//2633 3748//2633 3749//2633 3750//2633
+f 3334//2634 3747//2634 3746//2634 3335//2634
+f 3751//2637 3345//2637 3346//2637 3752//2637
+f 3750//2638 3749//2638 3751//2638 3752//2638
+f 3355//2639 3354//2639 3360//2639 3753//2639 3754//2639 3755//2639
+f 3756//2640 3757//2640 3356//2640 3355//2640 3755//2640
+f 3758//2641 3759//2641 3757//2641 3756//2641 3760//2641
+f 3761//2642 3762//2642 3759//2642 3758//2642
+f 3763//2643 3764//2643 3762//2643 3761//2643 3765//2643
+f 3753//2644 3360//2644 3359//2644 3362//2644 3763//2644 3765//2644
+f 3766//2645 3767//2645 3768//2645
+f 2850//2646 2831//2646 2830//2646 3767//2646 3766//2646 3769//2646 3770//2646 3771//2646 3772//2646
+f 2846//2647 2845//2647 2850//2647 3772//2647 3773//2647 3774//2647
+f 3775//2648 2847//2648 2846//2648 3774//2648 3776//2648
+f 3777//2649 3372//2649 3371//2649 3378//2649 3775//2649 3776//2649
+f 3373//2650 3372//2650 3777//2650 3778//2650 3779//2650
+f 3780//2651 3781//2651 3782//2651 3783//2651
+f 3784//2652 3400//2652 3385//2652 3384//2652 3781//2652 3780//2652
+f 3398//2653 3397//2653 3400//2653 3784//2653 3785//2653
+f 3786//2654 3399//2654 3398//2654 3785//2654 3787//2654 3788//2654
+f 3789//2655 3790//2655 3788//2655 3787//2655 3791//2655 3792//2655
+f 3782//2656 3789//2656 3792//2656 3793//2656 3783//2656
+f 3794//2657 3795//2657 3796//2657 3797//2657 3798//2657
+f 3799//2658 3800//2658 3801//2658 3802//2658 3794//2658 3798//2658
+f 3803//2659 3804//2659 3805//2659 3800//2659 3799//2659
+f 3806//2696 3807//2696 3808//2696
+f 3809//2660 3810//2660 3811//2660 3812//2660 3804//2660 3803//2660
+f 3808//2660 3807//2660 3813//2660
+f 3814//2661 3815//2661 3810//2661 3809//2661 3816//2661 3817//2661
+f 3818//2662 3797//2662 3796//2662 3819//2662 3814//2662 3817//2662
+f 3820//2663 2399//2663 2398//2663 3821//2663 3822//2663
+f 3823//2664 3824//2664 3820//2664 3822//2664 3825//2664
+f 3826//2665 2895//2665 2899//2665 2902//2665 3827//2665 3823//2665 3825//2665
+f 2902//2697 2901//2697 3827//2697
+f 2896//2666 2895//2666 3826//2666 3828//2666 3415//2666
+f 2398//2667 2397//2667 3821//2667
+f 3829//2668 3830//2668 3831//2668 3832//2668
+f 3833//2669 3834//2669 3835//2669 3836//2669 3837//2669 3829//2669 3832//2669
+f 3838//2670 3839//2670 3840//2670 3834//2670 3833//2670
+f 3841//2671 3842//2671 3839//2671 3838//2671
+f 3843//2672 3844//2672 3842//2672 3841//2672 3845//2672
+f 3831//2673 3830//2673 3846//2673 3843//2673 3845//2673
+f 3847//2628 3848//2628 3849//2628 3850//2628
+f 3851//2629 3852//2629 3853//2629 3854//2629
+f 3855//2630 3851//2630 3854//2630 3856//2630
+f 3857//2631 3858//2631 3855//2631 3856//2631 3859//2631 3860//2631
+f 3849//2632 3857//2632 3860//2632 3861//2632 3850//2632
+f 3862//2633 3863//2633 3864//2633 3865//2633
+f 3866//2634 3867//2634 3868//2634 3869//2634 3863//2634 3862//2634 3870//2634
+f 3871//2635 3872//2635 3867//2635 3866//2635 3873//2635 3874//2635
+f 2955//2636 2954//2636 3871//2636 3874//2636 3875//2636 3876//2636
+f 2951//2637 2950//2637 2955//2637 3876//2637 3877//2637
+f 3878//2638 2945//2638 2944//2638 2951//2638 3877//2638 3879//2638 3865//2638 3864//2638
+f 3880//2639 2460//2639 2462//2639 2464//2639 3478//2639 3881//2639
+f 3882//2640 3883//2640 2459//2640 2458//2640 2460//2640 3880//2640
+f 3884//2641 3885//2641 3886//2641 3883//2641 3882//2641
+f 3887//2642 3888//2642 3885//2642 3884//2642
+f 3889//2643 3888//2643 3887//2643 3890//2643
+f 3881//2644 3478//2644 3480//2644 3482//2644 3889//2644 3890//2644
+f 3891//2645 3892//2645 3893//2645 3894//2645 3895//2645
+f 3896//2646 3897//2646 3898//2646 3892//2646 3891//2646
+f 3899//2647 3900//2647 3897//2647 3896//2647 3901//2647
+f 3902//2648 3903//2648 3899//2648 3901//2648 3904//2648
+f 3905//2649 3906//2649 3907//2649 3902//2649 3904//2649
+f 3895//2650 3894//2650 3906//2650 3905//2650
+f 3908//2651 3909//2651 3910//2651 3911//2651 3912//2651
+f 3913//2652 3914//2652 3908//2652 3912//2652
+f 3915//2653 2165//2653 2164//2653 2170//2653 2174//2653 3916//2653 3917//2653 3914//2653 3913//2653 3918//2653
+f 3919//2654 2183//2654 2166//2654 2165//2654 3915//2654
+f 2174//2654 2173//2654 3920//2654 3916//2654
+f 3921//2655 2184//2655 2183//2655 3919//2655 3922//2655
+f 3910//2656 3923//2656 3924//2656 3921//2656 3922//2656 3925//2656 3911//2656
+f 3926//2657 3927//2657 3928//2657 3929//2657 3930//2657
+f 3529//2658 3514//2658 3513//2658 3928//2658 3927//2658 3931//2658
+f 3526//2659 3529//2659 3931//2659 3932//2659 3933//2659 3527//2659
+f 3934//2660 3935//2660 3528//2660 3527//2660 3933//2660
+f 3936//2661 3937//2661 3935//2661 3934//2661 3938//2661
+f 3939//2662 3930//2662 3929//2662 3940//2662 3937//2662 3936//2662
+f 3941//2663 3942//2663 3943//2663 3944//2663 3945//2663 3946//2663
+f 3947//2664 3948//2664 3942//2664 3941//2664 3949//2664 3950//2664
+f 3951//2665 3947//2665 3950//2665 3952//2665 3953//2665
+f 3537//2666 3536//2666 3951//2666 3953//2666
+f 3945//2675 3944//2675 3532//2675 3531//2675
+f 3954//2668 3552//2668 3551//2668 3555//2668 3955//2668 3956//2668
+f 3957//2669 3958//2669 3959//2669 3954//2669 3956//2669
+f 3960//2670 3961//2670 3962//2670 3963//2670 3958//2670 3957//2670 3964//2670
+f 3965//2671 3966//2671 3967//2671 3968//2671 3962//2671 3961//2671 3969//2671 3970//2671
+f 3971//2672 3560//2672 3559//2672 3966//2672 3965//2672
+f 3555//2673 3554//2673 3560//2673 3971//2673 3972//2673 3955//2673
+f 3960//2628 3964//2628 3973//2628 3974//2628 3975//2628 3976//2628
+f 3977//2674 3978//2674 3975//2674 3974//2674 3979//2674
+f 3980//2629 3977//2629 3979//2629 3981//2629 3982//2629
+f 3983//2630 3984//2630 3980//2630 3982//2630 3985//2630
+f 3986//2631 3987//2631 3983//2631 3985//2631 3988//2631 3989//2631
+f 3969//2632 3961//2632 3960//2632 3976//2632 3987//2632 3986//2632
+f 3990//2633 3991//2633 3992//2633 3993//2633
+f 3991//2634 3990//2634 3582//2634 3581//2634
+f 3993//2638 3992//2638 3100//2638 3104//2638 3994//2638
+f 3995//2645 3996//2645 3997//2645 3998//2645
+f 3999//2646 4000//2646 3996//2646 3995//2646
+f 4001//2647 4000//2647 3999//2647 4002//2647
+f 4003//2648 4004//2648 4005//2648 4001//2648 4002//2648
+f 4006//2649 4007//2649 4005//2649 4004//2649
+f 4008//2650 3998//2650 3997//2650 4007//2650 4006//2650
+f 4009//2663 4010//2663 4011//2663 4012//2663 4013//2663
+f 4014//2664 4015//2664 4011//2664 4010//2664 4016//2664
+f 4017//2665 4018//2665 4014//2665 4016//2665 4019//2665
+f 4020//2666 4021//2666 4022//2666 4018//2666 4017//2666
+f 4023//2678 4024//2678 4021//2678 4020//2678 4025//2678 4026//2678
+f 4012//2667 4026//2667 4025//2667 4013//2667
+f 4027//2668 4028//2668 4029//2668 4030//2668 4031//2668
+f 4032//2669 4033//2669 4027//2669 4031//2669
+f 4034//2670 4035//2670 4033//2670 4032//2670 4036//2670
+f 4037//2671 4038//2671 4035//2671 4034//2671 4039//2671 4040//2671
+f 4041//2672 4037//2672 4040//2672 4042//2672
+f 4029//2673 4043//2673 4044//2673 4041//2673 4042//2673 4030//2673
+f 4045//2628 4046//2628 4047//2628 4048//2628 4049//2628
+f 4050//2674 4051//2674 4052//2674 4045//2674 4049//2674 4053//2674 4054//2674
+f 4055//2629 4056//2629 4051//2629 4050//2629 4057//2629
+f 4058//2630 4059//2630 4056//2630 4055//2630 4060//2630
+f 4061//2631 4062//2631 4063//2631 4059//2631 4058//2631 4064//2631 4065//2631
+f 4046//2632 4062//2632 4061//2632 4066//2632 4047//2632
+f 4067//2633 4068//2633 4069//2633 4070//2633
+f 4071//2634 3684//2634 3683//2634 4068//2634 4067//2634
+f 4071//2635 3685//2635 3684//2635
+f 4070//2638 4069//2638 3238//2638 3237//2638
+f 4072//2639 4073//2639 4074//2639 4075//2639
+f 4076//2640 4077//2640 3235//2640 3234//2640 3236//2640 4072//2640 4075//2640
+f 4078//2676 4079//2676 3230//2676 3235//2676 4077//2676
+f 4080//2642 4081//2642 4079//2642 4078//2642 4082//2642
+f 4083//2643 4081//2643 4080//2643 4084//2643
+f 4073//2644 4083//2644 4084//2644 4074//2644
+f 4085//2693 4086//2693 2712//2693 2714//2693
+f 4086//2646 4085//2646 3264//2646 3263//2646
+f 4087//2648 3276//2648 3275//2648 4088//2648
+f 3703//2649 3707//2649 4087//2649 4088//2649 3704//2649
+f 4089//2651 4090//2651 4091//2651 4092//2651 4093//2651
+f 3722//2652 3717//2652 3716//2652 4090//2652 4089//2652 4094//2652
+f 3292//2653 3279//2653 3278//2653 3722//2653 4094//2653 4095//2653
+f 3619//2654 4096//2654 3291//2654 3290//2654 3292//2654 4095//2654 4097//2654 3620//2654
+f 4096//2655 3619//2655 3617//2655 3616//2655 4098//2655
+f 4091//2656 4098//2656 3616//2656 3611//2656 3610//2656 4092//2656
+f 4099//2657 3314//2657 3313//2657 4100//2657 4101//2657 4102//2657
+f 3311//2658 3310//2658 3314//2658 4099//2658
+f 3306//2659 3305//2659 3309//2659 4103//2659 4104//2659
+f 4105//2660 4106//2660 4104//2660 4103//2660
+f 4107//2661 4106//2661 4105//2661 4108//2661 4109//2661
+f 4100//2662 4107//2662 4109//2662 4101//2662
+f 4110//2663 4111//2663 4112//2663 4113//2663 4114//2663 4115//2663
+f 4116//2664 4112//2664 4111//2664 4117//2664
+f 4118//2665 4119//2665 4116//2665 4117//2665 4120//2665
+f 4121//2666 4118//2666 4120//2666 4122//2666 4123//2666
+f 4124//2678 2136//2678 2135//2678 2141//2678 4121//2678 4123//2678
+f 4114//2667 2137//2667 2136//2667 4124//2667 4115//2667
+f 4125//2668 4126//2668 4127//2668 4128//2668 4129//2668
+f 4130//2669 4131//2669 4132//2669 4127//2669 4126//2669 4133//2669
+f 4134//2670 4135//2670 4131//2670 4130//2670 4136//2670
+f 4137//2671 4138//2671 4134//2671 4136//2671 4139//2671
+f 4140//2672 4137//2672 4139//2672 4141//2672
+f 4129//2673 4128//2673 4142//2673 4140//2673 4141//2673
+f 4143//2628 2826//2628 2825//2628
+f 2817//2629 2816//2629 4144//2629 4145//2629
+f 4146//2630 2820//2630 2818//2630 2817//2630 4145//2630 4147//2630
+f 4148//2631 2821//2631 2820//2631 4146//2631 4149//2631
+f 2825//2632 2823//2632 2822//2632 4148//2632 4149//2632 4150//2632 4143//2632
+f 4151//2633 4152//2633 4153//2633 4154//2633 4155//2633
+f 4156//2634 2829//2634 2828//2634 4152//2634 4151//2634
+f 3767//2635 2830//2635 2829//2635 4156//2635 3768//2635
+f 3373//2636 3779//2636 3374//2636
+f 4154//2638 3366//2638 3365//2638 3368//2638 4155//2638
+f 4157//2639 3395//2639 3394//2639 3399//2639 3786//2639 4158//2639 4159//2639
+f 4160//2640 3392//2640 3391//2640 3395//2640 4157//2640 4161//2640
+f 4162//2641 4163//2641 4164//2641 4165//2641 4166//2641 4160//2641 4161//2641 4167//2641
+f 4168//2642 4169//2642 4170//2642 4171//2642 4165//2642 4164//2642 4172//2642 4173//2642
+f 4174//2643 4169//2643 4168//2643 4175//2643 4176//2643
+f 4158//2644 3786//2644 3788//2644 3790//2644 4177//2644 4174//2644 4176//2644 4178//2644
+f 4179//2645 3802//2645 3801//2645 4180//2645 4181//2645
+f 4182//2646 4183//2646 4184//2646 4179//2646 4181//2646 4185//2646
+f 4186//2647 4183//2647 4182//2647 4187//2647
+f 4188//2648 3813//2648 3807//2648 3806//2648 4186//2648 4187//2648 4189//2648 4190//2648
+f 4191//2649 3805//2649 3804//2649 3812//2649 4188//2649 4190//2649
+f 4180//2650 3801//2650 3800//2650 3805//2650 4191//2650 4192//2650 4193//2650
+f 4194//2651 2488//2651 2487//2651 2513//2651 4195//2651
+f 2511//2651 2506//2651 2505//2651 2782//2651 2774//2651 2773//2651
+f 4196//2651 2802//2651 2801//2651
+f 2489//2698 2488//2698 4194//2698
+f 2783//2652 2782//2652 2505//2652 2499//2652 2498//2652 2789//2652
+f 4197//2653 2796//2653 2790//2653 2789//2653 2498//2653 2497//2653 2503//2653
+f 2503//2654 2502//2654 2508//2654 4198//2654 2780//2654 2779//2654 2787//2654 2794//2654 4199//2654 4197//2654
+f 2772//2655 2771//2655 2780//2655 4198//2655 4200//2655 4201//2655
+f 4199//2655 2794//2655 2793//2655 2800//2655 4202//2655
+f 2513//2656 2512//2656 2511//2656 2773//2656 2772//2656 4201//2656 4195//2656
+f 4203//2656 4202//2656 2800//2656 2799//2656 2802//2656 4196//2656
+f 4204//2657 4205//2657 2810//2657 2809//2657 4206//2657 4207//2657
+f 2912//2658 2911//2658 4204//2658 4207//2658
+f 4208//2660 4209//2660 2926//2660 2925//2660 4210//2660
+f 4144//2661 2816//2661 2815//2661 2814//2661 4211//2661 4209//2661 4208//2661
+f 4205//2662 4211//2662 2814//2662 2811//2662 2810//2662
+f 4212//2663 4213//2663 4214//2663 4215//2663 4216//2663
+f 4217//2664 4212//2664 4216//2664 4218//2664
+f 4219//2682 4220//2682 4217//2682 4218//2682 4221//2682 4222//2682
+f 3852//2666 4219//2666 4222//2666 4223//2666 3853//2666
+f 4214//2667 4213//2667 3848//2667 3847//2667
+f 4224//2668 4225//2668 4226//2668 4227//2668 4228//2668 4229//2668
+f 4230//2669 4224//2669 4229//2669 4231//2669 4232//2669
+f 4233//2670 4234//2670 4235//2670 4236//2670 4230//2670 4232//2670
+f 4237//2671 4238//2671 4234//2671 4233//2671 4239//2671
+f 4240//2672 4241//2672 4238//2672 4237//2672 4242//2672
+f 4226//2673 4240//2673 4242//2673 4243//2673 4227//2673
+f 4244//2633 4245//2633 4246//2633 4247//2633
+f 4248//2634 4245//2634 4244//2634 4249//2634 4250//2634
+f 4251//2635 4248//2635 4250//2635 4252//2635
+f 4253//2636 3434//2636 3433//2636 3442//2636 3445//2636 4251//2636 4252//2636 4254//2636
+f 3435//2637 3434//2637 4253//2637 4255//2637
+f 4246//2638 3436//2638 3435//2638 4255//2638 4247//2638
+f 4256//2639 3026//2639 3025//2639 3029//2639 4257//2639
+f 4258//2640 3022//2640 3021//2640 3026//2640 4256//2640 4259//2640 4260//2640
+f 4261//2641 4262//2641 4260//2641 4259//2641
+f 4263//2684 4264//2684 4265//2684 4266//2684 4262//2684 4261//2684
+f 4267//2643 4265//2643 4264//2643 4268//2643 4269//2643
+f 4257//2644 3029//2644 3028//2644 4267//2644 4269//2644
+f 4270//2645 3038//2645 3037//2645 3040//2645 4271//2645
+f 4272//2646 4270//2646 4271//2646 4273//2646
+f 4274//2647 4275//2647 4276//2647 4272//2647 4273//2647
+f 4277//2648 4276//2648 4275//2648 4278//2648 4279//2648
+f 4280//2649 3043//2649 3042//2649 3047//2649 4281//2649 4277//2649 4279//2649
+f 3043//2650 4280//2650 3044//2650
+f 3047//2699 3046//2699 4281//2699
+f 4282//2657 4283//2657 4284//2657 4285//2657 4286//2657
+f 4287//2658 3083//2658 3067//2658 3066//2658 4286//2658 4285//2658 4288//2658 4289//2658
+f 3079//2659 3083//2659 4287//2659 4290//2659 3080//2659
+f 4291//2660 4292//2660 4293//2660 3081//2660 3080//2660 4290//2660
+f 2046//2661 2045//2661 4294//2661
+f 2042//2661 2037//2661 2040//2661 4295//2661 4296//2661 4297//2661 4298//2661 4299//2661 4292//2661 4291//2661
+f 2046//2700 4294//2700 2047//2700
+f 4300//2662 4297//2662 4296//2662 4301//2662 4284//2662 4283//2662
+f 4302//2663 3090//2663 3089//2663 4303//2663 4304//2663
+f 4305//2664 4288//2664 4285//2664 4284//2664 4301//2664 4306//2664 4302//2664 4304//2664 4307//2664
+f 4288//2665 4305//2665 4289//2665
+f 4296//2665 4295//2665 3568//2665 3571//2665 4306//2665 4301//2665
+f 2040//2666 2039//2666 3568//2666 4295//2666
+f 4308//2667 4303//2667 3089//2667 3088//2667 2034//2667 2036//2667
+f 4309//2668 4310//2668 4311//2668 4312//2668 4313//2668
+f 4314//2669 4315//2669 4309//2669 4313//2669
+f 4316//2670 4317//2670 4315//2670 4314//2670 4318//2670
+f 4319//2671 4320//2671 4316//2671 4318//2671 4321//2671
+f 4322//2672 4323//2672 4320//2672 4319//2672 4324//2672
+f 4311//2673 4323//2673 4322//2673 4312//2673
+f 4325//2628 4326//2628 4327//2628 4328//2628 4329//2628
+f 4330//2674 4331//2674 4325//2674 4329//2674 4332//2674
+f 2081//2629 2080//2629 4330//2629 4332//2629 4333//2629 4334//2629
+f 4335//2630 2073//2630 2072//2630 2081//2630 4334//2630
+f 4336//2631 2090//2631 2074//2631 2073//2631 4335//2631
+f 4326//2632 4337//2632 2076//2632 2078//2632 2090//2632 4336//2632 4327//2632
+f 3167//2639 3166//2639 3170//2639 4338//2639 4339//2639
+f 4340//2640 4341//2640 3163//2640 3162//2640 3167//2640 4339//2640
+f 4342//2641 4343//2641 4341//2641 4340//2641
+f 4344//2642 4345//2642 4343//2642 4342//2642
+f 4346//2643 4345//2643 4344//2643 4347//2643
+f 4338//2644 3170//2644 3169//2644 4346//2644 4347//2644
+f 4348//2651 4349//2651 4350//2651 4351//2651 4352//2651
+f 4353//2652 2161//2652 2152//2652 2151//2652 4349//2652 4348//2652
+f 2162//2653 2161//2653 4353//2653 3643//2653
+f 4354//2654 3650//2654 3649//2654 3655//2654
+f 4355//2655 3656//2655 3651//2655 3650//2655 4354//2655 4356//2655
+f 4350//2656 4355//2656 4356//2656 4351//2656
+f 4357//2657 3924//2657 3923//2657 4358//2657 4359//2657 4360//2657
+f 2185//2658 2184//2658 3921//2658 3924//2658 4357//2658 4361//2658
+f 4362//2659 2180//2659 2179//2659 2185//2659 4361//2659
+f 4363//2660 4364//2660 2181//2660 2180//2660 4362//2660 4365//2660
+f 4366//2661 4364//2661 4363//2661 4367//2661
+f 4360//2662 4359//2662 4366//2662 4367//2662 4368//2662
+f 4369//2663 4370//2663 4371//2663 4372//2663 4373//2663 4374//2663
+f 4375//2664 4376//2664 4369//2664 4374//2664 4377//2664
+f 4378//2665 4375//2665 4377//2665 4379//2665 4380//2665 4381//2665
+f 4382//2666 4383//2666 4378//2666 4381//2666 4384//2666 4385//2666
+f 4386//2678 4387//2678 4385//2678 4384//2678 4388//2678 4389//2678 4390//2678 4391//2678 4392//2678
+f 4371//2667 4390//2667 4389//2667 4372//2667
+f 4393//2668 4394//2668 4395//2668 4396//2668 4397//2668
+f 4398//2669 4399//2669 4400//2669 4401//2669 4393//2669 4397//2669 4402//2669
+f 4403//2670 4401//2670 4400//2670 4404//2670 4405//2670 4406//2670 4407//2670 4408//2670 4409//2670
+f 4407//2671 4406//2671 4410//2671 4411//2671 4412//2671 4413//2671
+f 4414//2672 4415//2672 4416//2672 4417//2672 4413//2672 4412//2672
+f 4395//2673 4418//2673 4416//2673 4415//2673 4396//2673
+f 4419//2628 4420//2628 4421//2628 4422//2628 4423//2628
+f 4424//2674 4425//2674 4421//2674 4420//2674 4426//2674
+f 4427//2629 4428//2629 4424//2629 4426//2629 4429//2629
+f 4430//2630 4428//2630 4427//2630 4431//2630 4432//2630
+f 4433//2631 4434//2631 4430//2631 4432//2631 4435//2631
+f 4422//2632 4436//2632 4434//2632 4433//2632 4423//2632
+f 4437//2633 4438//2633 4439//2633 4440//2633 4441//2633
+f 4442//2634 4443//2634 4438//2634 4437//2634 4444//2634 4445//2634
+f 4446//2635 4447//2635 4442//2635 4445//2635
+f 4448//2636 4449//2636 4450//2636 4451//2636
+f 4452//2637 4453//2637 4448//2637 4451//2637 4454//2637
+f 4440//2638 4455//2638 4456//2638 4452//2638 4454//2638 4441//2638
+f 4457//2639 4458//2639 4459//2639 4460//2639 4461//2639
+f 4462//2640 4463//2640 4464//2640 4465//2640 4466//2640 4458//2640 4457//2640 4467//2640
+f 4468//2641 4469//2641 4470//2641 4462//2641 4467//2641
+f 4471//2642 4472//2642 4473//2642 4474//2642 4469//2642 4468//2642
+f 4475//2643 4476//2643 4477//2643 4472//2643 4471//2643
+f 4461//2644 4460//2644 4476//2644 4475//2644
+f 4478//2645 4479//2645 4480//2645 4481//2645
+f 4482//2646 4483//2646 4479//2646 4478//2646 4484//2646
+f 4485//2647 4482//2647 4484//2647 4486//2647
+f 4487//2648 4485//2648 4486//2648 4488//2648
+f 4489//2649 4490//2649 4491//2649 4487//2649 4488//2649
+f 4480//2650 4492//2650 4493//2650 4490//2650 4489//2650 4481//2650
+f 4494//2651 4495//2651 4496//2651 4497//2651 4498//2651
+f 4499//2652 4500//2652 4495//2652 4494//2652 4501//2652
+f 4502//2653 4499//2653 4501//2653 4503//2653
+f 4504//2654 4505//2654 4502//2654 4503//2654 4506//2654
+f 4507//2655 4505//2655 4504//2655 4508//2655
+f 4496//2656 4509//2656 4507//2656 4508//2656 4497//2656
+f 4510//2657 4511//2657 4512//2657 4513//2657
+f 4514//2658 4515//2658 4510//2658 4513//2658 4516//2658 4517//2658
+f 4518//2659 4519//2659 4514//2659 4517//2659
+f 4520//2660 4521//2660 4519//2660 4518//2660 4522//2660
+f 4523//2661 4521//2661 4520//2661 4524//2661
+f 4512//2662 4511//2662 4525//2662 4523//2662 4524//2662
+f 4526//2663 4527//2663 4528//2663 4529//2663
+f 4530//2664 4527//2664 4526//2664 4531//2664
+f 4532//2682 4530//2682 4531//2682 4533//2682
+f 4534//2666 4535//2666 4532//2666 4533//2666 4536//2666
+f 4537//2678 4538//2678 4534//2678 4536//2678
+f 4529//2667 4528//2667 4539//2667 4538//2667 4537//2667
+f 4540//2668 4541//2668 4542//2668 4543//2668
+f 4544//2669 4545//2669 4540//2669 4543//2669 4546//2669 4547//2669
+f 4548//2670 4545//2670 4544//2670 4549//2670 4550//2670 4551//2670
+f 4552//2671 4553//2671 4554//2671 4548//2671 4551//2671 4555//2671
+f 4556//2672 4557//2672 4553//2672 4552//2672 4558//2672
+f 4541//2673 4556//2673 4558//2673 4559//2673 4542//2673
+f 4560//2628 4561//2628 4562//2628 4563//2628 4564//2628
+f 4565//2629 4566//2629 4567//2629 4568//2629 4569//2629
+f 4570//2630 4565//2630 4569//2630 4571//2630 4572//2630
+f 4573//2631 4574//2631 4575//2631 4570//2631 4572//2631
+f 4561//2632 4574//2632 4573//2632 4562//2632
+f 4576//2633 4577//2633 4578//2633 4579//2633
+f 4580//2634 4581//2634 4582//2634 4583//2634 4577//2634 4576//2634 4584//2634
+f 4585//2635 4586//2635 4580//2635 4584//2635 4587//2635
+f 4588//2701 4583//2701 4582//2701
+f 4589//2636 4590//2636 4591//2636 4585//2636 4587//2636 4592//2636
+f 4593//2636 4594//2636 4595//2636 4596//2636
+f 4597//2637 4598//2637 4589//2637 4592//2637 4599//2637
+f 4594//2702 4600//2702 4595//2702
+f 4578//2638 4601//2638 4602//2638 4603//2638 4604//2638 4597//2638 4599//2638 4579//2638
+f 4605//2639 4606//2639 4607//2639 4608//2639 4609//2639
+f 4610//2640 4611//2640 4612//2640 4605//2640 4609//2640
+f 4613//2676 4614//2676 4615//2676 4611//2676 4610//2676
+f 4614//2642 4613//2642 4616//2642 4617//2642
+f 4618//2643 4619//2643 4620//2643 4621//2643 4622//2643 4617//2643 4616//2643
+f 4623//2644 4624//2644 4621//2644 4620//2644 4625//2644 4608//2644 4607//2644 4626//2644
+f 4627//2677 4628//2677 4629//2677 4630//2677 4631//2677
+f 4632//2646 4633//2646 4634//2646 4635//2646 4628//2646 4627//2646
+f 4636//2647 4637//2647 4633//2647 4632//2647 4638//2647
+f 4639//2648 4640//2648 4636//2648 4638//2648 4641//2648
+f 4642//2649 4643//2649 4639//2649 4641//2649 4644//2649
+f 4631//2650 4630//2650 4645//2650 4646//2650 4642//2650 4644//2650
+f 4647//2651 4648//2651 4649//2651 4650//2651
+f 4651//2652 4652//2652 4653//2652 4648//2652 4647//2652
+f 4654//2653 4652//2653 4651//2653 4655//2653
+f 4656//2654 4654//2654 4655//2654 4657//2654
+f 4658//2655 4659//2655 4660//2655 4656//2655 4657//2655
+f 4649//2656 4659//2656 4658//2656 4650//2656
+f 4661//2657 4662//2657 4663//2657 4664//2657
+f 4665//2658 4666//2658 4667//2658 4661//2658 4664//2658 4668//2658
+f 4669//2659 4670//2659 4671//2659 4666//2659 4665//2659
+f 4672//2660 4673//2660 4674//2660 4670//2660 4669//2660
+f 4675//2661 4676//2661 4677//2661 4678//2661 4679//2661 4680//2661 4673//2661 4672//2661
+f 4662//2662 4679//2662 4678//2662 4681//2662 4663//2662
+f 4682//2663 4683//2663 4684//2663 4685//2663 4686//2663
+f 4687//2664 4688//2664 4682//2664 4686//2664 4689//2664
+f 4690//2665 4691//2665 4687//2665 4689//2665
+f 4692//2666 4691//2666 4690//2666 4693//2666
+f 4684//2667 4683//2667 4694//2667 4695//2667 4696//2667 4697//2667
+f 4698//2668 4699//2668 4700//2668 4701//2668 4702//2668 4703//2668 4704//2668
+f 4705//2669 4706//2669 4698//2669 4704//2669 4707//2669
+f 4708//2670 4709//2670 4710//2670 4705//2670 4707//2670 4711//2670
+f 4712//2671 4713//2671 4714//2671 4710//2671 4709//2671 4715//2671
+f 4716//2672 4717//2672 4713//2672 4712//2672
+f 4702//2673 4718//2673 4717//2673 4716//2673 4703//2673
+f 4719//2628 4720//2628 4721//2628 4722//2628 4723//2628
+f 4724//2674 4725//2674 4721//2674 4720//2674 4726//2674
+f 4727//2629 4728//2629 4729//2629 4730//2629 4724//2629 4726//2629 4731//2629 4732//2629
+f 4727//2630 4732//2630 4733//2630
+f 4729//2703 4734//2703 4730//2703
+f 4735//2631 4736//2631 4737//2631
+f 4738//2633 4739//2633 4740//2633 4741//2633
+f 4742//2634 4743//2634 4739//2634 4738//2634 4744//2634
+f 4745//2635 4742//2635 4744//2635 4746//2635 4747//2635
+f 4748//2636 4745//2636 4747//2636 4749//2636
+f 4750//2637 4748//2637 4749//2637 4751//2637 4752//2637
+f 4741//2638 4740//2638 4753//2638 4750//2638 4752//2638
+f 4754//2639 4755//2639 4756//2639 4757//2639
+f 4758//2640 4759//2640 4760//2640 4761//2640 4762//2640 4763//2640
+f 4764//2676 4765//2676 4766//2676 4763//2676 4762//2676 4767//2676 4768//2676
+f 4769//2684 4764//2684 4768//2684 4770//2684
+f 4771//2643 4772//2643 4769//2643 4770//2643
+f 4756//2644 4755//2644 4773//2644 4772//2644 4771//2644 4774//2644
+f 4775//2645 4776//2645 4777//2645 4778//2645 4779//2645
+f 4780//2646 4775//2646 4779//2646 4781//2646 4782//2646
+f 4783//2647 4784//2647 4780//2647 4782//2647 4785//2647 4786//2647
+f 4787//2648 4788//2648 4784//2648 4783//2648 4789//2648 4790//2648
+f 4791//2649 4792//2649 4793//2649 4794//2649 4787//2649 4790//2649 4795//2649 4796//2649
+f 4778//2650 4777//2650 4797//2650 4792//2650 4791//2650 4798//2650
+f 4799//2651 4800//2651 4801//2651 4802//2651 4803//2651 4804//2651 4805//2651 4806//2651 4807//2651
+f 4808//2652 4806//2652 4805//2652 4809//2652
+f 4810//2653 4811//2653 4808//2653 4809//2653 4812//2653
+f 4813//2654 4810//2654 4812//2654 4814//2654 4815//2654
+f 4816//2655 4817//2655 4813//2655 4815//2655 4818//2655 4819//2655
+f 4820//2656 4821//2656 4816//2656 4819//2656 4822//2656 4801//2656 4800//2656
+f 4823//2657 4824//2657 4825//2657 4826//2657 4827//2657 4828//2657
+f 4829//2658 4830//2658 4831//2658 4824//2658 4823//2658
+f 4832//2659 4833//2659 4830//2659 4829//2659 4834//2659 4835//2659 4836//2659
+f 4837//2660 4838//2660 4839//2660 4836//2660 4835//2660
+f 4840//2661 4838//2661 4837//2661 4841//2661
+f 4827//2662 4826//2662 4842//2662 4840//2662 4841//2662
+f 4843//2663 4844//2663 4845//2663 4846//2663 4847//2663
+f 4848//2664 4843//2664 4847//2664 4849//2664
+f 4850//2665 4851//2665 4852//2665 4853//2665 4848//2665 4849//2665
+f 4854//2666 4855//2666 4856//2666 4851//2666 4850//2666 4857//2666
+f 4858//2678 4859//2678 4855//2678 4854//2678 4860//2678 4861//2678
+f 4845//2667 4862//2667 4861//2667 4860//2667 4863//2667 4846//2667
+f 4864//2668 4865//2668 4866//2668 4867//2668 4868//2668
+f 4869//2669 4870//2669 4871//2669 4864//2669 4868//2669 4872//2669
+f 4873//2670 4874//2670 4875//2670 4869//2670 4872//2670 4876//2670
+f 4877//2671 4878//2671 4874//2671 4873//2671 4879//2671
+f 4880//2672 4881//2672 4877//2672 4879//2672 4882//2672 4883//2672
+f 4866//2673 4884//2673 4880//2673 4883//2673 4867//2673
+f 4885//2628 4405//2628 4404//2628 4886//2628
+f 4887//2704 4398//2704 4402//2704
+f 4888//2674 4889//2674 4890//2674
+f 4466//2629 4465//2629 4888//2629 4890//2629 4891//2629
+f 4892//2629 4474//2629 4473//2629
+f 4893//2630 4459//2630 4458//2630 4466//2630 4891//2630
+f 4892//2630 4473//2630 4472//2630 4477//2630 4894//2630
+f 4411//2631 4410//2631 4895//2631 4894//2631 4477//2631 4476//2631 4460//2631 4459//2631 4893//2631
+f 4895//2632 4410//2632 4406//2632 4405//2632 4885//2632
+f 4896//2633 4897//2633 4898//2633 4899//2633 4900//2633
+f 4901//2634 4902//2634 4897//2634 4896//2634 4903//2634
+f 4902//2635 4901//2635 4904//2635 4905//2635 4906//2635
+f 4907//2636 4908//2636 4906//2636 4905//2636 4909//2636 4910//2636
+f 4911//2637 4907//2637 4910//2637 4912//2637 4913//2637
+f 4900//2638 4899//2638 4911//2638 4913//2638
+f 4914//2639 4915//2639 4916//2639 4917//2639 4918//2639 4919//2639 4920//2639 4921//2639 4922//2639
+f 4923//2640 4924//2640 4925//2640 4915//2640 4914//2640
+f 4918//2640 4917//2640 4926//2640 4927//2640 4928//2640 4929//2640
+f 4930//2641 4931//2641 4932//2641 4924//2641 4923//2641
+f 4933//2641 4928//2641 4927//2641
+f 4934//2642 4935//2642 4936//2642 4931//2642 4930//2642 4937//2642
+f 4938//2643 4939//2643 4940//2643 4934//2643 4937//2643 4941//2643
+f 4921//2644 4920//2644 4942//2644 4943//2644 4939//2644 4938//2644
+f 4944//2677 4945//2677 4946//2677 4947//2677
+f 4948//2646 4945//2646 4944//2646 4949//2646 4950//2646
+f 4951//2647 4952//2647 4948//2647 4950//2647 4953//2647 4954//2647
+f 4955//2648 4951//2648 4954//2648 4956//2648 4957//2648
+f 4958//2649 4955//2649 4957//2649 4959//2649 4960//2649
+f 4961//2651 4962//2651 4963//2651 4964//2651
+f 4965//2652 4966//2652 4967//2652 4962//2652 4961//2652 4968//2652
+f 4969//2653 4966//2653 4965//2653 4970//2653
+f 4971//2654 4972//2654 4973//2654 4969//2654 4970//2654
+f 4974//2655 4972//2655 4971//2655 4975//2655
+f 4963//2656 4974//2656 4975//2656 4976//2656 4964//2656
+f 4977//2657 4978//2657 4979//2657 4980//2657 4981//2657 4982//2657
+f 4983//2658 4493//2658 4492//2658 4980//2658 4979//2658
+f 4984//2659 4491//2659 4490//2659 4493//2659 4983//2659 4985//2659
+f 4986//2660 4987//2660 4984//2660 4985//2660 4988//2660
+f 4989//2661 4987//2661 4986//2661 4990//2661 4991//2661
+f 4982//2662 4981//2662 4992//2662 4989//2662 4991//2662
+f 4993//2663 4994//2663 4995//2663 4996//2663 4997//2663 4998//2663 4999//2663
+f 5000//2664 4993//2664 4999//2664 5001//2664
+f 5002//2665 5003//2665 5004//2665 5005//2665 5000//2665 5001//2665 5006//2665
+f 5007//2666 5002//2666 5006//2666 5008//2666
+f 4998//2667 4997//2667 5009//2667
+f 5010//2668 5011//2668 5012//2668 5013//2668
+f 5014//2669 5015//2669 5010//2669 5013//2669 5016//2669
+f 5017//2670 5018//2670 5019//2670 5015//2670 5014//2670
+f 5020//2671 5021//2671 5018//2671 5017//2671 5022//2671
+f 5023//2672 5024//2672 5025//2672 5020//2672 5022//2672
+f 5011//2673 5026//2673 5027//2673 5024//2673 5023//2673 5028//2673 5012//2673
+f 5029//2628 5030//2628 5031//2628 5032//2628 5033//2628 5034//2628
+f 5035//2674 5029//2674 5034//2674 5036//2674
+f 5037//2629 5038//2629 5035//2629 5036//2629 5039//2629
+f 5040//2630 5037//2630 5039//2630 5041//2630
+f 5042//2631 5043//2631 5044//2631 5040//2631 5041//2631
+f 5032//2632 5045//2632 5043//2632 5042//2632 5033//2632
+f 5046//2633 5047//2633 5048//2633 5049//2633 5050//2633
+f 5051//2634 5052//2634 5049//2634 5048//2634
+f 5053//2635 5054//2635 5055//2635 5056//2635 5052//2635 5051//2635
+f 5057//2636 5058//2636 5055//2636 5054//2636 5059//2636
+f 5060//2637 5057//2637 5059//2637 5061//2637
+f 5046//2638 5050//2638 5060//2638 5061//2638
+f 5062//2639 5063//2639 5064//2639 5065//2639 5066//2639
+f 5067//2640 5063//2640 5062//2640 5068//2640 5069//2640
+f 5070//2641 5071//2641 5072//2641 5069//2641 5068//2641 5073//2641
+f 5074//2642 5075//2642 5070//2642 5073//2642
+f 5076//2643 5077//2643 5075//2643 5074//2643
+f 5066//2644 5065//2644 5078//2644 5077//2644 5076//2644
+f 5079//2645 5080//2645 5081//2645 5082//2645 5083//2645
+f 5084//2646 5085//2646 5079//2646 5083//2646
+f 5086//2648 5087//2648 5088//2648 5089//2648 5090//2648
+f 5091//2649 5092//2649 5086//2649 5090//2649 5093//2649
+f 5082//2650 5081//2650 5094//2650
+f 5095//2651 5096//2651 5097//2651 5098//2651
+f 5099//2652 5100//2652 5101//2652 5096//2652 5095//2652
+f 5099//2653 5102//2653 5100//2653
+f 5103//2654 5104//2654 5105//2654 5106//2654 5107//2654
+f 5108//2655 5109//2655 5110//2655 5111//2655 5106//2655 5105//2655 5112//2655
+f 5097//2656 5113//2656 5108//2656 5112//2656 5098//2656
+f 5114//2657 5115//2657 5116//2657 5117//2657 5118//2657
+f 5119//2658 5120//2658 5115//2658 5114//2658
+f 5121//2659 5122//2659 5123//2659 5120//2659 5119//2659
+f 5124//2660 5125//2660 5122//2660 5121//2660 5126//2660
+f 5127//2661 5128//2661 5124//2661 5126//2661 5129//2661
+f 5118//2662 5117//2662 5127//2662 5129//2662
+f 5130//2663 5131//2663 5132//2663 5133//2663
+f 5134//2664 5135//2664 5130//2664 5133//2664 5136//2664
+f 5137//2665 4567//2665 4566//2665 5134//2665 5136//2665
+f 4568//2666 4567//2666 5137//2666
+f 5131//2667 4560//2667 4564//2667 5132//2667
+f 4581//2668 4580//2668 4586//2668 5138//2668 5139//2668
+f 5140//2669 4588//2669 4582//2669 4581//2669 5139//2669 5141//2669
+f 5142//2670 5143//2670 5144//2670 5140//2670 5141//2670
+f 5145//2671 5143//2671 5142//2671 5146//2671
+f 5147//2672 4591//2672 4590//2672 5148//2672 4593//2672 4596//2672 5145//2672 5146//2672
+f 4586//2673 4585//2673 4591//2673 5147//2673 5138//2673
+f 5149//2628 5150//2628 5151//2628 5152//2628
+f 5153//2674 5149//2674 5152//2674 5154//2674 5155//2674 5156//2674
+f 5157//2629 5158//2629 5153//2629 5156//2629 5159//2629
+f 5160//2630 5161//2630 5158//2630 5157//2630 5162//2630
+f 5163//2631 5164//2631 5165//2631 5166//2631 5160//2631 5162//2631
+f 5150//2632 5165//2632 5164//2632 5151//2632
+f 5167//2633 5168//2633 5169//2633 5170//2633
+f 5171//2634 5172//2634 5173//2634 5174//2634 5168//2634 5167//2634
+f 5175//2635 5176//2635 5177//2635 5173//2635 5172//2635
+f 5178//2636 5179//2636 5180//2636 5181//2636 5182//2636 5183//2636
+f 5184//2637 5185//2637 5178//2637 5183//2637 5186//2637
+f 5187//2638 5188//2638 5184//2638 5186//2638 5170//2638 5169//2638
+f 5189//2639 5190//2639 5191//2639 5192//2639 5193//2639 5194//2639
+f 5195//2640 5196//2640 5190//2640 5189//2640
+f 5197//2641 5198//2641 5196//2641 5195//2641
+f 5199//2642 5200//2642 5198//2642 5197//2642 5201//2642
+f 5202//2643 5203//2643 5200//2643 5199//2643 5204//2643
+f 5193//2644 5192//2644 5205//2644 5203//2644 5202//2644 5206//2644
+f 5207//2645 5208//2645 4708//2645 4711//2645 5209//2645 5210//2645
+f 5211//2646 5212//2646 5210//2646 5209//2646 5213//2646
+f 5214//2647 5211//2647 5213//2647 5215//2647
+f 5216//2648 5214//2648 5215//2648 5217//2648
+f 5218//2649 5219//2649 5216//2649 5217//2649
+f 4715//2650 4709//2650 4708//2650 5208//2650 5219//2650 5218//2650
+f 5220//2651 5221//2651 5222//2651 5223//2651
+f 5224//2652 5225//2652 5226//2652 5227//2652 5221//2652 5220//2652
+f 5228//2653 5229//2653 5230//2653 5225//2653 5224//2653 5231//2653
+f 5232//2654 5233//2654 5228//2654 5231//2654 5234//2654
+f 5235//2655 5236//2655 5232//2655 5234//2655 5237//2655 5238//2655
+f 5222//2705 5235//2705 5238//2705 5239//2705 5223//2705
+f 5240//2657 5241//2657 5242//2657 5243//2657
+f 5244//2658 5245//2658 5241//2658 5240//2658
+f 5246//2659 5247//2659 5248//2659 5249//2659 5245//2659 5244//2659
+f 5248//2660 5247//2660 5250//2660 5251//2660 5252//2660
+f 5253//2690 5252//2690 5251//2690 5254//2690
+f 5243//2662 5242//2662 5255//2662 5253//2662 5254//2662
+f 5256//2663 5257//2663 5258//2663 5259//2663
+f 5260//2664 5261//2664 5262//2664 5256//2664 5259//2664 5263//2664
+f 5264//2665 5261//2665 5260//2665 5265//2665
+f 5266//2666 5267//2666 5264//2666 5265//2666 5268//2666
+f 5269//2678 5270//2678 5267//2678 5266//2678 5271//2678
+f 5257//2667 5269//2667 5271//2667 5258//2667
+f 5272//2668 5273//2668 5274//2668 5275//2668 5276//2668 5277//2668
+f 5272//2669 5277//2669 5278//2669 5279//2669
+f 5280//2671 5281//2671 5282//2671 5283//2671
+f 5284//2672 5285//2672 5286//2672 5287//2672 5280//2672 5283//2672
+f 5275//2673 5274//2673 5288//2673 5285//2673 5284//2673 5289//2673
+f 5290//2628 5291//2628 5292//2628 5293//2628
+f 4760//2629 4759//2629 5294//2629 5295//2629
+f 5296//2630 4754//2630 4757//2630
+f 4760//2630 5295//2630 4761//2630
+f 5297//2631 4773//2631 4755//2631 4754//2631 5296//2631 5298//2631
+f 5292//2632 5299//2632 5300//2632 5301//2632 5297//2632 5298//2632 5302//2632 5293//2632
+f 5303//2633 5304//2633 5305//2633 5306//2633 5307//2633 5308//2633 5309//2633 5310//2633 5311//2633
+f 5312//2634 5303//2634 5311//2634 5313//2634
+f 5314//2635 5312//2635 5313//2635 5315//2635
+f 5316//2636 5314//2636 5315//2636 5317//2636 5318//2636
+f 5319//2637 5320//2637 5321//2637 5322//2637 5316//2637 5318//2637 5323//2637
+f 5308//2638 5307//2638 5324//2638
+f 5321//2638 5325//2638 5305//2638 5304//2638 5322//2638
+f 5326//2639 5327//2639 5328//2639 5329//2639 5330//2639
+f 5307//2640 5306//2640 5331//2640 5332//2640 5333//2640 5327//2640 5326//2640 5324//2640
+f 5334//2641 5335//2641 5320//2641 5319//2641
+f 5331//2676 5306//2676 5305//2676 5325//2676 5336//2676
+f 5325//2642 5321//2642 5320//2642 5335//2642 5337//2642 5338//2642 5339//2642 5336//2642
+f 5340//2643 5339//2643 5338//2643 5341//2643
+f 5330//2644 5329//2644 5342//2644 5340//2644 5341//2644
+f 5343//2645 5344//2645 5345//2645 5346//2645 5347//2645 5348//2645
+f 5349//2646 5350//2646 5344//2646 5343//2646
+f 5351//2648 5352//2648 5353//2648 5354//2648 5355//2648
+f 5356//2649 5357//2649 5358//2649 5351//2649 5355//2649
+f 5347//2650 5346//2650 5357//2650 5356//2650
+f 5359//2651 5360//2651 5361//2651 5362//2651
+f 5363//2652 4862//2652 4845//2652 4844//2652 5360//2652 5359//2652 5364//2652
+f 4858//2653 4861//2653 4862//2653 5363//2653 5365//2653
+f 5366//2654 4859//2654 4858//2654 5365//2654 5367//2654 5368//2654
+f 5369//2655 5370//2655 5368//2655 5367//2655 5371//2655 5372//2655
+f 5361//2656 5369//2656 5372//2656 5362//2656
+f 5373//2657 5374//2657 5375//2657 5376//2657 5377//2657
+f 5378//2658 5374//2658 5373//2658 5379//2658
+f 5380//2659 4919//2659 4918//2659 4929//2659 5378//2659 5379//2659
+f 5381//2660 4942//2660 4920//2660 4919//2660 5380//2660
+f 5382//2661 4943//2661 4942//2661 5381//2661 5383//2661
+f 5376//2662 5382//2662 5383//2662 5377//2662
+f 5384//2663 5385//2663 5386//2663 5387//2663 5388//2663 5389//2663 5390//2663
+f 5391//2664 5390//2664 5389//2664 5392//2664 5393//2664
+f 5394//2682 5395//2682 5396//2682 5391//2682 5393//2682
+f 5397//2666 5398//2666 5399//2666 5395//2666 5394//2666
+f 5400//2678 5401//2678 5398//2678 5397//2678 5402//2678 5403//2678
+f 5386//2667 5404//2667 5403//2667 5402//2667 5387//2667
+f 5405//2668 5406//2668 5407//2668 5408//2668 5409//2668
+f 5410//2669 5411//2669 5405//2669 5409//2669 5412//2669 5413//2669
+f 5414//2670 5415//2670 5410//2670 5413//2670
+f 5416//2671 5417//2671 5418//2671 5415//2671 5414//2671 5419//2671
+f 5420//2672 5421//2672 5422//2672 5423//2672 5417//2672 5416//2672
+f 5407//2673 5424//2673 5421//2673 5420//2673 5408//2673
+f 5425//2628 5426//2628 5427//2628
+f 5428//2629 5429//2629 5430//2629 5431//2629 5432//2629 5433//2629
+f 5434//2630 5435//2630 5428//2630 5433//2630
+f 5436//2631 5437//2631 5438//2631 5435//2631 5434//2631
+f 5436//2632 5439//2632 5437//2632
+f 5440//2633 5441//2633 5442//2633 5443//2633
+f 4946//2634 5441//2634 5440//2634 4947//2634
+f 5443//2638 5442//2638 5444//2638 5445//2638 5446//2638
+f 5447//2639 5448//2639 5449//2639 5450//2639 5451//2639
+f 5449//2640 5448//2640 5452//2640 5453//2640
+f 5454//2641 5455//2641 5453//2641 5452//2641
+f 5456//2684 5457//2684 5458//2684 5459//2684 5455//2684 5454//2684
+f 5460//2643 5458//2643 5457//2643 5461//2643
+f 5451//2644 5450//2644 5462//2644 5460//2644 5461//2644
+f 5463//2645 5464//2645 5465//2645
+f 5466//2646 5467//2646 5468//2646 5464//2646 5463//2646 5469//2646
+f 5470//2647 5471//2647 5466//2647 5469//2647 5472//2647
+f 5473//2648 5474//2648 5470//2648 5472//2648 5475//2648
+f 5476//2649 5477//2649 5478//2649 5473//2649 5475//2649
+f 5477//2650 5476//2650 5479//2650
+f 5480//2651 5481//2651 5482//2651 5483//2651 5484//2651
+f 4997//2652 4996//2652 5485//2652 5481//2652 5480//2652 5009//2652
+f 5486//2654 5487//2654 5488//2654 5489//2654 5490//2654 5491//2654
+f 5492//2655 5493//2655 5489//2655 5488//2655 5494//2655
+f 5483//2656 5495//2656 5492//2656 5494//2656 5484//2656
+f 5496//2657 4456//2657 4455//2657 5497//2657 5498//2657
+f 4453//2658 4452//2658 4456//2658 5496//2658 5499//2658
+f 4449//2659 4448//2659 4453//2659 5499//2659 5500//2659 5501//2659 5502//2659
+f 5503//2660 5504//2660 5505//2660 5506//2660 5501//2660 5500//2660
+f 5507//2690 5505//2690 5504//2690 5508//2690 5509//2690
+f 5497//2662 5507//2662 5509//2662 5498//2662
+f 5510//2663 5511//2663 5512//2663 5513//2663
+f 5514//2664 5510//2664 5513//2664 5515//2664
+f 5516//2665 4464//2665 4463//2665 5514//2665 5515//2665 5517//2665
+f 4888//2666 4465//2666 4464//2666 5516//2666 4889//2666
+f 5518//2678 4399//2678 4398//2678 4887//2678
+f 5511//2667 5519//2667 4886//2667 4404//2667 4400//2667 4399//2667 5518//2667 5512//2667
+f 5520//2668 5521//2668 5522//2668 5523//2668 5524//2668
+f 5525//2669 5526//2669 5520//2669 5524//2669 5527//2669 5528//2669
+f 5529//2670 5530//2670 5526//2670 5525//2670
+f 5531//2671 5532//2671 5530//2671 5529//2671 5533//2671 5534//2671
+f 5533//2686 5529//2686 5525//2686 5528//2686
+f 5535//2672 5532//2672 5531//2672 5536//2672
+f 5522//2673 5537//2673 5535//2673 5536//2673 5523//2673
+f 5538//2628 5539//2628 5540//2628 5541//2628 5542//2628 5543//2628
+f 5544//2674 5538//2674 5543//2674 5545//2674
+f 5546//2629 5547//2629 5544//2629 5545//2629 5548//2629
+f 5549//2630 5550//2630 5546//2630 5548//2630
+f 5551//2631 5552//2631 5553//2631 5550//2631 5549//2631
+f 5541//2632 5554//2632 5552//2632 5551//2632 5542//2632
+f 5555//2633 4933//2633 4927//2633 4926//2633 5556//2633 5557//2633 5558//2633
+f 5559//2634 5555//2634 5558//2634 5560//2634
+f 5561//2635 5559//2635 5560//2635 5562//2635 5563//2635
+f 5564//2636 5565//2636 4925//2636 4924//2636 4932//2636 5566//2636 5561//2636 5563//2636 5567//2636
+f 4916//2637 4915//2637 4925//2637 5565//2637 5568//2637 5569//2637 5570//2637
+f 5566//2637 4932//2637 4931//2637 4936//2637 5571//2637
+f 5556//2638 4926//2638 4917//2638 4916//2638 5570//2638
+f 5571//2680 4936//2680 4935//2680
+f 5572//2639 5573//2639 5574//2639 5575//2639 5576//2639 5577//2639 5578//2639
+f 5579//2640 5580//2640 5581//2640 5573//2640 5572//2640 5582//2640
+f 5583//2641 5584//2641 5585//2641 5586//2641 5579//2641 5582//2641
+f 5587//2642 5588//2642 5589//2642 5584//2642 5583//2642
+f 5590//2643 5588//2643 5587//2643 5591//2643
+f 5578//2644 5577//2644 5592//2644 5590//2644 5591//2644
+f 5593//2645 5594//2645 5595//2645 5596//2645 5597//2645 5598//2645 5599//2645
+f 5600//2646 5596//2646 5595//2646 5601//2646 5602//2646
+f 5603//2648 5604//2648 5605//2648 5606//2648 5607//2648
+f 5608//2649 5609//2649 5610//2649 5603//2649 5607//2649 5611//2649
+f 5598//2650 5597//2650 5608//2650 5611//2650
+f 5612//2651 5613//2651 5614//2651 5615//2651
+f 5616//2652 5613//2652 5612//2652 5617//2652
+f 5618//2653 5619//2653 5616//2653 5617//2653 5620//2653 5621//2653
+f 5622//2654 5623//2654 5624//2654 5618//2654 5621//2654
+f 5625//2655 5626//2655 5623//2655 5622//2655
+f 5614//2656 5626//2656 5625//2656 5627//2656 5615//2656
+f 5628//2657 4604//2657 4603//2657 5629//2657
+f 4598//2658 4597//2658 4604//2658 5628//2658 5630//2658
+f 4590//2659 4589//2659 4598//2659 5630//2659 5631//2659 5148//2659
+f 4600//2660 4594//2660 4593//2660 5148//2660 5631//2660 5632//2660 5633//2660
+f 5634//2690 5633//2690 5632//2690 5635//2690
+f 5629//2662 4603//2662 4602//2662 5634//2662 5635//2662
+f 5636//2663 5637//2663 5638//2663 5639//2663 5640//2663
+f 5641//2664 5642//2664 5643//2664 5644//2664 5637//2664 5636//2664
+f 5644//2665 5643//2665 5645//2665 5646//2665 5647//2665
+f 5646//2666 5648//2666 5649//2666 5650//2666 5647//2666
+f 5648//2678 5651//2678 5652//2678 5653//2678 5654//2678 5649//2678
+f 5639//2667 5654//2667 5653//2667 5640//2667
+f 5655//2668 5656//2668 5657//2668 5658//2668 5659//2668
+f 5660//2669 5661//2669 5662//2669 5663//2669 5655//2669 5659//2669
+f 5664//2670 5662//2670 5661//2670 5665//2670 5666//2670
+f 5667//2671 5668//2671 5664//2671 5666//2671
+f 5669//2672 5670//2672 5671//2672 5672//2672 5668//2672 5667//2672
+f 5658//2673 5657//2673 5673//2673 5670//2673 5669//2673
+f 5674//2628 5675//2628 5676//2628 5677//2628 5678//2628
+f 5679//2629 5680//2629 5681//2629 5682//2629
+f 5683//2630 5684//2630 5680//2630 5679//2630 5685//2630
+f 5686//2631 5687//2631 5688//2631 5689//2631 5684//2631 5683//2631
+f 5675//2632 5690//2632 5687//2632 5686//2632 5676//2632
+f 5691//2633 5692//2633 5693//2633 5694//2633 5695//2633
+f 5696//2634 5697//2634 5698//2634 5692//2634 5691//2634 5699//2634
+f 5700//2635 5701//2635 5697//2635 5696//2635
+f 5702//2636 5703//2636 5704//2636 5705//2636 5706//2636 5707//2636
+f 5708//2637 5702//2637 5707//2637 5709//2637
+f 5695//2638 5694//2638 5710//2638 5708//2638 5709//2638 5711//2638
+f 5229//2639 5228//2639 5233//2639 5712//2639 5713//2639 5714//2639
+f 5715//2640 5716//2640 5230//2640 5229//2640 5714//2640 5717//2640
+f 5718//2676 5719//2676 5716//2676 5715//2676 5720//2676
+f 5721//2642 5722//2642 5723//2642 5724//2642 5719//2642 5718//2642
+f 5725//2643 5723//2643 5722//2643 5726//2643
+f 5712//2644 5233//2644 5232//2644 5236//2644 5727//2644 5725//2644 5726//2644 5728//2644
+f 5729//2645 5730//2645 5731//2645 5732//2645 5733//2645 5734//2645
+f 5688//2646 5687//2646 5690//2646 5730//2646 5729//2646 5735//2646
+f 5688//2647 5735//2647 5736//2647 5737//2647 5738//2647 5689//2647
+f 5739//2648 5740//2648 5738//2648 5737//2648 5741//2648
+f 5742//2649 5743//2649 5739//2649 5741//2649
+f 5733//2650 5732//2650 5743//2650 5742//2650
+f 5744//2651 5745//2651 5746//2651 5747//2651
+f 4722//2652 5745//2652 5744//2652 4723//2652
+f 5748//2654 5749//2654 5750//2654 4735//2654 4737//2654
+f 5751//2655 5752//2655 5749//2655 5748//2655 5753//2655
+f 5746//2656 5751//2656 5753//2656 5747//2656
+f 5754//2657 5755//2657 5756//2657 5757//2657
+f 5758//2658 5288//2658 5274//2658 5273//2658 5754//2658 5757//2658
+f 5759//2659 5286//2659 5285//2659 5288//2659 5758//2659 5760//2659
+f 5761//2660 5762//2660 5287//2660 5286//2660 5759//2660
+f 5763//2661 5764//2661 5765//2661 5762//2661 5761//2661 5766//2661
+f 5755//2662 5767//2662 5765//2662 5764//2662 5768//2662 5756//2662
+f 5769//2663 5770//2663 5771//2663 5772//2663
+f 5773//2664 5774//2664 5769//2664 5772//2664 5775//2664
+f 5776//2665 4758//2665 4763//2665 4766//2665 5777//2665 5773//2665 5775//2665 5778//2665
+f 4766//2706 4765//2706 5777//2706
+f 4759//2666 4758//2666 5776//2666 5294//2666
+f 5301//2707 5300//2707 5779//2707
+f 5779//2675 5300//2675 5299//2675 5780//2675
+f 5771//2667 5770//2667 5291//2667 5290//2667
+f 5781//2668 5782//2668 5783//2668 5784//2668
+f 5785//2669 5786//2669 5781//2669 5784//2669 4625//2669 4620//2669 4619//2669
+f 5787//2670 5788//2670 5789//2670 5785//2670 4619//2670 4618//2670 5790//2670 5791//2670
+f 5792//2671 5793//2671 5787//2671 5791//2671 5794//2671 5795//2671
+f 5796//2672 5797//2672 5795//2672 5794//2672
+f 5798//2628 5799//2628 5800//2628 5801//2628
+f 5802//2674 5798//2674 5801//2674 5803//2674
+f 5804//2629 5333//2629 5332//2629 5805//2629 5802//2629 5803//2629
+f 5328//2630 5327//2630 5333//2630 5804//2630 5806//2630 5807//2630
+f 5808//2631 5342//2631 5329//2631 5328//2631 5807//2631 5809//2631 5810//2631
+f 5799//2632 5811//2632 5808//2632 5810//2632 5800//2632
+f 5812//2633 5813//2633 5814//2633 5815//2633 5816//2633
+f 5817//2634 5818//2634 5813//2634 5812//2634 5819//2634
+f 5820//2635 5821//2635 5822//2635 5818//2635 5817//2635 5823//2635 5824//2635 5825//2635
+f 4833//2636 4832//2636 5825//2636 5824//2636 5826//2636
+f 4831//2637 4830//2637 4833//2637 5826//2637 5827//2637
+f 5815//2638 4825//2638 4824//2638 4831//2638 5827//2638 5816//2638
+f 4856//2639 4855//2639 4859//2639 5366//2639 5828//2639 5829//2639
+f 4851//2640 4856//2640 5829//2640 5830//2640 4852//2640
+f 5831//2641 5832//2641 4853//2641 4852//2641 5830//2641
+f 5833//2642 5834//2642 5832//2642 5831//2642
+f 5835//2643 5834//2643 5833//2643 5836//2643
+f 5828//2644 5366//2644 5368//2644 5370//2644 5835//2644 5836//2644
+f 5837//2677 5838//2677 5839//2677 5840//2677
+f 5841//2646 5838//2646 5837//2646 5842//2646
+f 5843//2647 5844//2647 5841//2647 5842//2647 5845//2647 5846//2647
+f 5847//2648 5848//2648 5843//2648 5846//2648 5849//2648
+f 5850//2649 5851//2649 5847//2649 5849//2649
+f 5840//2650 5839//2650 5851//2650 5850//2650 5852//2650
+f 5853//2651 5854//2651 5855//2651 5856//2651 5857//2651
+f 5858//2652 5404//2652 5386//2652 5385//2652 5854//2652 5853//2652
+f 5400//2653 5403//2653 5404//2653 5858//2653 5859//2653
+f 5860//2654 5401//2654 5400//2654 5859//2654 5861//2654 5862//2654 5863//2654
+f 5864//2655 5865//2655 5863//2655 5862//2655 5866//2655
+f 5855//2656 5864//2656 5866//2656 5856//2656
+f 5867//2657 5868//2657 5869//2657 5870//2657 5871//2657
+f 5872//2658 5873//2658 5874//2658 5875//2658 5876//2658 5868//2658 5867//2658
+f 5877//2659 5878//2659 5879//2659 5880//2659 5873//2659 5872//2659
+f 5881//2660 5882//2660 5883//2660 5884//2660 5879//2660 5878//2660
+f 5885//2661 5886//2661 5882//2661 5881//2661 5887//2661 5888//2661
+f 5871//2662 5870//2662 5889//2662 5890//2662 5885//2662 5888//2662 5891//2662 5892//2662
+f 5893//2663 5894//2663 5895//2663 5896//2663 5897//2663
+f 5898//2664 5899//2664 5893//2664 5897//2664 5900//2664
+f 5901//2682 5430//2682 5429//2682 5898//2682 5900//2682
+f 5431//2666 5430//2666 5901//2666
+f 5896//2667 5895//2667 5902//2667 5425//2667 5427//2667 5903//2667
+f 5904//2668 5905//2668 5906//2668 5907//2668 5908//2668
+f 5909//2669 5910//2669 5904//2669 5908//2669 5911//2669 5912//2669
+f 5913//2670 5910//2670 5909//2670 5914//2670
+f 5915//2671 5916//2671 5913//2671 5914//2671 5917//2671
+f 5918//2672 5919//2672 5916//2672 5915//2672 5920//2672
+f 5906//2673 5918//2673 5920//2673 5921//2673 5907//2673
+f 5922//2628 5923//2628 5924//2628 5925//2628
+f 5926//2629 5927//2629 5928//2629 5929//2629
+f 5930//2630 5931//2630 5932//2630 5926//2630 5929//2630 5933//2630 5934//2630
+f 5935//2631 5936//2631 5934//2631 5933//2631 5937//2631
+f 5924//2632 5938//2632 5936//2632 5935//2632 5925//2632
+f 5939//2633 5940//2633 5941//2633 5942//2633 5943//2633 5944//2633
+f 5945//2634 5946//2634 5947//2634 5940//2634 5939//2634
+f 5465//2635 5464//2635 5468//2635 5946//2635 5945//2635 5948//2635
+f 5949//2636 5478//2636 5477//2636 5479//2636 5950//2636
+f 5951//2637 5952//2637 5949//2637 5950//2637 5953//2637 5954//2637
+f 5942//2638 5941//2638 5951//2638 5954//2638
+f 5955//2639 5491//2639 5490//2639 5956//2639 5957//2639 5958//2639
+f 5959//2640 5960//2640 5003//2640 5002//2640 5007//2640 5961//2640 5958//2640 5957//2640 5962//2640
+f 5963//2641 5964//2641 5959//2641 5962//2641 5965//2641 5966//2641
+f 5967//2684 5968//2684 5969//2684 5964//2684 5963//2684
+f 5970//2643 5971//2643 5972//2643 5968//2643 5967//2643
+f 5956//2644 5490//2644 5489//2644 5493//2644 5971//2644 5970//2644 5973//2644 5974//2644
+f 5975//2645 4443//2645 4442//2645 4447//2645 5976//2645 5977//2645
+f 5978//2646 5975//2646 5977//2646 5979//2646
+f 5980//2647 5978//2647 5979//2647 5981//2647
+f 5982//2648 5983//2648 5980//2648 5981//2648 5984//2648 5985//2648
+f 5986//2649 5502//2649 5501//2649 5506//2649 5982//2649 5985//2649
+f 4449//2650 5502//2650 5986//2650 4450//2650
+f 5987//2651 5988//2651 5989//2651 5990//2651 5991//2651 5992//2651 5993//2651
+f 5994//2652 5031//2652 5030//2652 5987//2652 5993//2652
+f 5045//2653 5032//2653 5031//2653 5994//2653 5995//2653
+f 5996//2654 5044//2654 5043//2654 5045//2654 5995//2654 5997//2654
+f 5998//2655 5996//2655 5997//2655 5999//2655
+f 5990//2656 6000//2656 5998//2656 5999//2656 6001//2656 5991//2656
+f 6002//2657 6003//2657 6004//2657 6005//2657 6006//2657
+f 6007//2658 6002//2658 6006//2658 6008//2658
+f 6009//2659 6010//2659 6007//2659 6008//2659
+f 6011//2660 6012//2660 6010//2660 6009//2660
+f 6013//2690 6014//2690 6012//2690 6011//2690 6015//2690 6016//2690
+f 6004//2662 6003//2662 6017//2662 6013//2662 6016//2662
+f 6018//2663 6019//2663 6020//2663 6021//2663 6022//2663
+f 6023//2664 6024//2664 6019//2664 6018//2664 6025//2664
+f 6026//2665 5067//2665 5069//2665 5072//2665 6027//2665 6023//2665 6025//2665
+f 6028//2666 5064//2666 5063//2666 5067//2666 6026//2666
+f 5072//2708 5071//2708 6027//2708
+f 6029//2678 5078//2678 5065//2678 5064//2678 6028//2678 6030//2678
+f 6021//2667 6029//2667 6030//2667 6022//2667
+f 6031//2668 6032//2668 6033//2668 5085//2668 5084//2668
+f 6034//2669 6033//2669 6032//2669 6035//2669 6036//2669 6037//2669
+f 6038//2670 6039//2670 6040//2670 6034//2670 6037//2670 6041//2670
+f 6042//2671 6043//2671 6039//2671 6038//2671 6044//2671
+f 5087//2672 6043//2672 6042//2672 5088//2672
+f 6045//2628 5101//2628 5100//2628 5102//2628 6046//2628
+f 6047//2674 6048//2674 6045//2674 6046//2674 6049//2674
+f 6050//2629 6051//2629 6047//2629 6049//2629
+f 6052//2630 6053//2630 6051//2630 6050//2630
+f 6054//2631 5103//2631 5107//2631 6053//2631 6052//2631
+f 5110//2631 6055//2631 5111//2631
+f 5104//2632 5103//2632 6054//2632
+f 5110//2632 5109//2632 6055//2632
+f 6056//2633 6057//2633 6058//2633 6059//2633 6060//2633
+f 6061//2634 6062//2634 6063//2634 6057//2634 6056//2634
+f 6064//2635 6062//2635 6061//2635 6065//2635
+f 6066//2636 6067//2636 6064//2636 6065//2636 6068//2636
+f 6069//2637 6070//2637 6071//2637 6066//2637 6068//2637 6072//2637
+f 6060//2638 6059//2638 6073//2638 6069//2638 6072//2638
+f 6074//2639 6075//2639 6076//2639 6077//2639 6078//2639 6079//2639
+f 6080//2640 6081//2640 6082//2640 6083//2640 6075//2640 6074//2640 6084//2640
+f 6085//2641 6086//2641 6081//2641 6080//2641
+f 6086//2642 6085//2642 6087//2642 6088//2642
+f 6089//2643 6090//2643 6091//2643 6088//2643 6087//2643
+f 6092//2644 6093//2644 6078//2644 6077//2644 6094//2644 6090//2644 6089//2644
+f 6095//2677 6096//2677 6097//2677 6098//2677 6099//2677
+f 6100//2646 6101//2646 6102//2646 6096//2646 6095//2646 6103//2646
+f 6100//2647 6104//2647 6105//2647 6106//2647 6101//2647
+f 6107//2648 6106//2648 6105//2648 6108//2648 6109//2648 6110//2648 6111//2648
+f 6112//2649 6113//2649 6111//2649 6110//2649
+f 6098//2650 6097//2650 6113//2650 6112//2650 6114//2650
+f 6115//2651 6116//2651 6117//2651 6118//2651 6119//2651
+f 6120//2652 6121//2652 6116//2652 6115//2652
+f 6122//2653 4606//2653 4605//2653 4612//2653 6121//2653 6120//2653
+f 6123//2654 4626//2654 4607//2654 4606//2654 6122//2654
+f 6124//2655 4623//2655 4626//2655 6123//2655 6125//2655
+f 6118//2656 6124//2656 6125//2656 6119//2656
+f 6126//2657 6127//2657 6128//2657 6129//2657
+f 5673//2658 5657//2658 5656//2658 6126//2658 6129//2658 6130//2658
+f 5670//2659 5673//2659 6130//2659 6131//2659 5671//2659
+f 6132//2660 6133//2660 5672//2660 5671//2660 6131//2660 6134//2660
+f 6135//2690 6136//2690 6133//2690 6132//2690
+f 6128//2662 6127//2662 6137//2662 6136//2662 6135//2662 6138//2662
+f 6139//2663 6140//2663 6141//2663 6142//2663
+f 6143//2664 6140//2664 6139//2664 6144//2664
+f 6145//2665 6146//2665 6143//2665 6144//2665
+f 5682//2666 5681//2666 6146//2666 6145//2666
+f 6142//2667 6141//2667 5674//2667 5678//2667
+f 6147//2668 5698//2668 5697//2668 5701//2668 6148//2668 6149//2668 6150//2668
+f 6151//2669 6152//2669 6153//2669 6147//2669 6150//2669
+f 6078//2670 6093//2670 6154//2670 6155//2670 6152//2670 6151//2670 6079//2670
+f 6093//2671 6092//2671 6156//2671 6157//2671 6158//2671 6159//2671 6154//2671
+f 6160//2672 5704//2672 5703//2672 6161//2672 6162//2672 6163//2672 6157//2672 6156//2672 6164//2672 6165//2672
+f 5701//2673 5700//2673 6148//2673
+f 5704//2673 6160//2673 6166//2673 6167//2673 5705//2673
+f 4695//2628 6168//2628 6169//2628 4696//2628
+f 6170//2629 6171//2629 4692//2629 4693//2629
+f 6172//2630 6173//2630 6171//2630 6170//2630 6174//2630
+f 6175//2631 6176//2631 6172//2631 6174//2631 6177//2631
+f 6168//2632 6176//2632 6175//2632 6169//2632
+f 6178//2633 6179//2633 6180//2633 6181//2633
+f 6182//2634 6183//2634 6179//2634 6178//2634
+f 6184//2635 6183//2635 6182//2635 6185//2635
+f 6186//2636 6187//2636 6184//2636 6185//2636 6188//2636
+f 6189//2637 6190//2637 6186//2637 6188//2637 6191//2637 6192//2637
+f 6181//2638 6180//2638 6189//2638 6192//2638 6193//2638
+f 4735//2639 5750//2639 6194//2639 4736//2639
+f 4727//2640 4733//2640 6195//2640 4728//2640
+f 6196//2641 4734//2641 4729//2641 4728//2641 6195//2641 6197//2641
+f 6198//2642 6199//2642 6196//2642 6197//2642
+f 6200//2643 6201//2643 6202//2643 6199//2643 6198//2643
+f 6194//2644 5750//2644 5749//2644 5752//2644 6201//2644 6200//2644
+f 6203//2677 6204//2677 6205//2677 6206//2677
+f 5027//2646 5026//2646 6204//2646 6203//2646 6207//2646 6208//2646
+f 6209//2647 5025//2647 5024//2647 5027//2647 6208//2647 6210//2647
+f 6211//2648 6212//2648 6209//2648 6210//2648 6213//2648
+f 6214//2649 6215//2649 6211//2649 6213//2649
+f 6206//2650 6205//2650 6216//2650 6215//2650 6214//2650 6217//2650
+f 6218//2651 6219//2651 6104//2651 6100//2651 6103//2651 6220//2651 6221//2651
+f 6222//2652 6223//2652 6218//2652 6221//2652 6224//2652
+f 6225//2653 6222//2653 6224//2653 6226//2653
+f 6227//2654 6228//2654 6225//2654 6226//2654 6229//2654
+f 6109//2655 6108//2655 6230//2655 6231//2655 6228//2655 6227//2655
+f 6108//2656 6105//2656 6104//2656 6219//2656 6230//2656
+f 6232//2657 6233//2657 6234//2657 6235//2657 6236//2657
+f 6237//2658 4797//2658 4777//2658 4776//2658 6232//2658 6236//2658
+f 6238//2659 4793//2659 4792//2659 4797//2659 6237//2659 6239//2659
+f 6240//2660 6241//2660 4794//2660 4793//2660 6238//2660
+f 6242//2661 6241//2661 6240//2661 6243//2661
+f 6244//2662 6245//2662 6242//2662 6243//2662 6246//2662 6235//2662 6234//2662
+f 6247//2663 6248//2663 6249//2663 6250//2663 6251//2663
+f 6252//2664 6253//2664 6249//2664 6248//2664 6254//2664
+f 6255//2665 6256//2665 6252//2665 6254//2665 6257//2665
+f 6258//2666 6259//2666 6255//2666 6257//2666
+f 6260//2678 6261//2678 6259//2678 6258//2678 6262//2678
+f 6263//2667 6264//2667 6261//2667 6260//2667 6251//2667 6250//2667
+f 6265//2668 5350//2668 5349//2668 6266//2668
+f 6267//2669 6268//2669 6265//2669 6266//2669
+f 6269//2670 6270//2670 6268//2670 6267//2670
+f 6271//2671 6272//2671 6270//2671 6269//2671
+f 5352//2709 6272//2709 6271//2709 5353//2709
+f 6273//2628 6274//2628 6275//2628 6276//2628 6277//2628
+f 6278//2674 6279//2674 6273//2674 6277//2674 6280//2674
+f 6281//2629 6282//2629 6278//2629 6280//2629
+f 6283//2630 6284//2630 6285//2630 6282//2630 6281//2630
+f 6286//2631 6287//2631 6284//2631 6283//2631
+f 6275//2632 6288//2632 6287//2632 6286//2632 6276//2632
+f 6289//2633 6290//2633 6291//2633 6292//2633
+f 6293//2634 6294//2634 6295//2634 6290//2634 6289//2634
+f 6296//2635 6297//2635 6294//2635 6293//2635 6298//2635
+f 6299//2636 6296//2636 6298//2636 6300//2636
+f 6301//2637 6302//2637 6299//2637 6300//2637 6303//2637 6304//2637
+f 6292//2638 6291//2638 6305//2638 6304//2638 6303//2638
+f 6306//2639 5399//2639 5398//2639 5401//2639 5860//2639 6307//2639
+f 6308//2640 6309//2640 5396//2640 5395//2640 5399//2640 6306//2640
+f 6310//2641 6311//2641 6309//2641 6308//2641 6312//2641 6313//2641
+f 6314//2642 6315//2642 6316//2642 6311//2642 6310//2642
+f 6317//2643 6315//2643 6314//2643 6318//2643 6319//2643 6320//2643
+f 6307//2644 5860//2644 5863//2644 5865//2644 6317//2644 6320//2644
+f 6321//2677 5875//2677 5874//2677 6322//2677 6323//2677
+f 5424//2646 5407//2646 5406//2646 6321//2646 6323//2646 6324//2646
+f 5422//2647 5421//2647 5424//2647 6324//2647 6325//2647
+f 6326//2648 5423//2648 5422//2648 6325//2648 6327//2648
+f 6328//2649 5880//2649 5879//2649 5884//2649 6326//2649 6327//2649
+f 6322//2650 5874//2650 5873//2650 5880//2650 6328//2650
+f 6329//2651 6330//2651 6331//2651 6332//2651
+f 6333//2652 5902//2652 5895//2652 5894//2652 6330//2652 6329//2652
+f 5902//2653 6333//2653 5426//2653 5425//2653
+f 6334//2654 5438//2654 5437//2654 5439//2654 6335//2654
+f 6336//2655 6334//2655 6335//2655 6337//2655
+f 6331//2656 6338//2656 6336//2656 6337//2656 6332//2656
+f 5444//2657 6339//2657 6340//2657 5445//2657
+f 6341//2660 6342//2660 4958//2660 4960//2660 6343//2660
+f 6344//2661 6345//2661 6342//2661 6341//2661 6346//2661
+f 6340//2662 6339//2662 6344//2662 6346//2662 6347//2662
+f 6348//2663 6349//2663 6350//2663 6351//2663 6352//2663
+f 6353//2664 6348//2664 6352//2664 6354//2664 6355//2664
+f 6356//2665 6357//2665 6353//2665 6355//2665 6358//2665
+f 5928//2666 5927//2666 6356//2666 6358//2666
+f 6350//2667 5923//2667 5922//2667 6351//2667
+f 6359//2668 5947//2668 5946//2668 5468//2668 5467//2668 6360//2668 6361//2668 6362//2668
+f 6363//2669 6364//2669 6365//2669 6366//2669 6359//2669 6362//2669
+f 6367//2670 6368//2670 6365//2670 6364//2670 6369//2670 6370//2670 6371//2670
+f 6372//2671 6373//2671 6368//2671 6367//2671
+f 6374//2672 5471//2672 5470//2672 5474//2672 6373//2672 6372//2672 6375//2672
+f 5467//2673 5466//2673 5471//2673 6374//2673 6360//2673
+f 5485//2710 4996//2710 4995//2710 6376//2710
+f 4994//2674 6376//2674 4995//2674
+f 6377//2674 5005//2674 5004//2674
+f 5961//2629 5007//2629 5008//2629 6378//2629
+f 5004//2629 5003//2629 5960//2629 6377//2629
+f 5955//2630 5958//2630 5961//2630 6378//2630 6379//2630
+f 6380//2631 5486//2631 5491//2631 5955//2631 6379//2631
+f 5487//2632 5486//2632 6380//2632
+f 6381//2633 6382//2633 6383//2633 6384//2633
+f 5764//2634 5763//2634 6385//2634 6386//2634 6387//2634 6382//2634 6381//2634 5768//2634
+f 6388//2635 6387//2635 6386//2635 6389//2635
+f 6390//2636 6391//2636 6388//2636 6389//2636 6392//2636
+f 6393//2637 6390//2637 6392//2637 6394//2637
+f 6384//2638 6383//2638 6395//2638 6393//2638 6394//2638 6396//2638
+f 6397//2639 6398//2639 6399//2639 6400//2639 6401//2639
+f 6397//2640 6401//2640 6402//2640 6403//2640
+f 6403//2641 6402//2641 6404//2641 6405//2641 6406//2641
+f 6407//2642 6408//2642 6409//2642 6406//2642 6405//2642
+f 6410//2643 6411//2643 6408//2643 6407//2643
+f 6400//2644 6399//2644 6411//2644 6410//2644 6412//2644
+f 6413//2651 6414//2651 6415//2651 6416//2651 6417//2651 6418//2651 6419//2651
+f 6420//2652 5540//2652 5539//2652 6413//2652 6419//2652 6421//2652
+f 5554//2653 5541//2653 5540//2653 6420//2653 6422//2653
+f 6423//2654 5553//2654 5552//2654 5554//2654 6422//2654 6424//2654 6425//2654
+f 6426//2655 6423//2655 6425//2655 6427//2655
+f 6415//2656 6426//2656 6427//2656 6428//2656 6416//2656
+f 6429//2657 6430//2657 5642//2657 5641//2657 6431//2657 6432//2657
+f 5081//2658 5080//2658 6432//2658 6431//2658 5094//2658
+f 5091//2659 5093//2659 6433//2659
+f 6434//2660 6435//2660 5092//2660 5091//2660 6433//2660
+f 6436//2661 5651//2661 5648//2661 5646//2661 5645//2661 6437//2661 6435//2661 6434//2661
+f 5651//2662 6436//2662 5652//2662
+f 6430//2662 6437//2662 5645//2662 5643//2662 5642//2662
+f 6438//2663 6439//2663 6440//2663 6441//2663 6442//2663
+f 6443//2664 6444//2664 6438//2664 6442//2664 6445//2664 6446//2664
+f 6447//2665 5581//2665 5580//2665 6443//2665 6446//2665
+f 6448//2666 5574//2666 5573//2666 5581//2666 6447//2666
+f 6449//2678 5575//2678 5574//2678 6448//2678 6450//2678
+f 6440//2667 5576//2667 5575//2667 6449//2667 6441//2667
+f 6451//2668 6452//2668 5600//2668 5602//2668 6453//2668
+f 6454//2669 6455//2669 6456//2669 6457//2669 6452//2669 6451//2669
+f 4802//2670 6458//2670 6459//2670 6456//2670 6455//2670 6460//2670 6461//2670 4803//2670
+f 6458//2671 4802//2671 4801//2671 4822//2671 6462//2671 6463//2671 6464//2671 6465//2671
+f 5606//2709 5605//2709 6463//2709 6462//2709 6466//2709
+f 6467//2628 6468//2628 6469//2628 6470//2628
+f 6471//2674 6472//2674 6467//2674 6470//2674 6473//2674
+f 6083//2629 6082//2629 6471//2629 6473//2629 6474//2629
+f 6475//2630 6076//2630 6075//2630 6083//2630 6474//2630
+f 6476//2631 6094//2631 6077//2631 6076//2631 6475//2631 6477//2631
+f 6468//2632 6476//2632 6477//2632 6469//2632
+f 6478//2639 6479//2639 6480//2639 6481//2639
+f 6482//2640 6483//2640 6484//2640 6478//2640 6481//2640
+f 6485//2676 6486//2676 6483//2676 6482//2676
+f 6487//2642 6488//2642 6486//2642 6485//2642 6489//2642
+f 6490//2643 6491//2643 6487//2643 6489//2643
+f 6479//2644 6491//2644 6490//2644 6480//2644
+f 6492//2645 5176//2645 5175//2645
+f 6493//2646 6494//2646 5177//2646 5176//2646 6492//2646 6495//2646
+f 6496//2647 6494//2647 6493//2647 6497//2647
+f 6498//2648 6496//2648 6497//2648 6499//2648 6500//2648
+f 6501//2649 5180//2649 5179//2649 6498//2649 6500//2649 6502//2649 6503//2649
+f 6504//2650 5181//2650 5180//2650 6501//2650
+f 6505//2651 6506//2651 6507//2651 6508//2651 6509//2651
+f 6510//2652 6505//2652 6509//2652 6511//2652 6512//2652
+f 6513//2653 6510//2653 6512//2653 6514//2653
+f 6515//2654 6516//2654 6513//2654 6514//2654 6517//2654
+f 6518//2655 6519//2655 6520//2655 6515//2655 6517//2655
+f 6507//2656 6520//2656 6519//2656 6508//2656
+f 6521//2657 6522//2657 6523//2657 6524//2657 6525//2657
+f 6526//2658 6527//2658 6521//2658 6525//2658 6528//2658 6529//2658
+f 6530//2659 6531//2659 6532//2659 6529//2659 6528//2659
+f 6533//2660 6534//2660 6531//2660 6530//2660 6535//2660
+f 6536//2661 6537//2661 6534//2661 6533//2661 6538//2661
+f 6522//2662 6536//2662 6538//2662 6523//2662
+f 5601//2663 5595//2663 5594//2663 6539//2663 6540//2663
+f 6453//2664 5602//2664 5601//2664 6540//2664
+f 6541//2665 6465//2665 6464//2665
+f 6463//2666 5605//2666 5604//2666 6542//2666 6543//2666 6541//2666 6464//2666
+f 6542//2678 5604//2678 5603//2678 5610//2678 6544//2678 6545//2678
+f 5594//2675 5593//2675 6539//2675
+f 5610//2667 5609//2667 6544//2667
+f 6546//2633 6547//2633 6548//2633 6549//2633
+f 6550//2634 6551//2634 6547//2634 6546//2634 6552//2634
+f 6553//2635 6554//2635 6551//2635 6550//2635 6555//2635
+f 6556//2636 6553//2636 6555//2636 6557//2636
+f 6558//2637 6556//2637 6557//2637 6559//2637 6560//2637
+f 6549//2638 6548//2638 6561//2638 6558//2638 6560//2638
+f 6562//2639 6563//2639 6564//2639 6565//2639 6566//2639
+f 6567//2640 6568//2640 6569//2640 6570//2640 6563//2640 6562//2640 6571//2640 6572//2640
+f 6573//2641 6574//2641 6575//2641 6572//2641 6571//2641
+f 6576//2642 6574//2642 6573//2642 6577//2642
+f 6578//2643 6579//2643 6576//2643 6577//2643 6580//2643
+f 6566//2644 6565//2644 6581//2644 6578//2644 6580//2644
+f 5279//2645 5278//2645 6582//2645 6583//2645 6584//2645 6585//2645
+f 5783//2646 5782//2646 6584//2646 6583//2646 6586//2646
+f 6587//2648 5797//2648 5796//2648 6588//2648
+f 5282//2649 5281//2649 6587//2649 6588//2649 6589//2649
+f 4634//2711 6590//2711 4635//2711
+f 6391//2712 6390//2712 6393//2712 6395//2712
+f 6409//2712 6398//2712 6397//2712 6403//2712 6406//2712
+f 6409//2713 6408//2713 6411//2713 6399//2713 6398//2713
+f 6017//2714 6003//2714 6002//2714 6007//2714 6010//2714 6012//2714 6014//2714
+f 6520//2715 6507//2715 6506//2715 6516//2715 6515//2715
+f 6591//2715 4701//2715 4700//2715
+f 4702//2716 4701//2716 6591//2716 4718//2716
+f 5191//2716 5205//2716 5192//2716
+f 6024//2717 6020//2717 6019//2717
+f 6024//2718 6023//2718 6027//2718 5071//2718 5070//2718 5075//2718 5077//2718 5078//2718 6029//2718 6021//2718 6020//2718
+f 4908//2718 4898//2718 4897//2718 4902//2718 4906//2718
+f 5746//2719 5745//2719 4722//2719 4721//2719 4725//2719 6202//2719 6201//2719 5752//2719 5751//2719
+f 3923//2720 3910//2720 3909//2720 3917//2720 3916//2720 3920//2720 4358//2720
+f 4640//2721 4639//2721 4643//2721 6590//2721
+f 6117//2721 6116//2721 6121//2721 4612//2721 4611//2721 4615//2721 4622//2721 4621//2721 4624//2721
+f 6592//2721 5786//2721 5785//2721 5789//2721
+f 4418//2722 4395//2722 4394//2722 4403//2722 4409//2722
+f 5127//2722 5117//2722 5116//2722 5123//2722 5122//2722 5125//2722 5128//2722
+f 6113//2723 6097//2723 6096//2723 6102//2723 6107//2723 6111//2723
+f 4699//2724 4698//2724 4706//2724 6591//2724
+f 5624//2724 5619//2724 5618//2724
+f 5212//2724 5207//2724 5210//2724
+f 5592//2725 5577//2725 5576//2725 6440//2725 6439//2725 6593//2725
+f 4973//2725 4967//2725 4966//2725 4969//2725
+f 5169//2725 5168//2725 5174//2725 5187//2725
+f 3504//2726 3507//2726 3510//2726 3501//2726 3500//2726
+f 2939//2727 2941//2727 2930//2727 2929//2727 2936//2727 2935//2727
+f 4364//2728 4366//2728 4359//2728 4358//2728 3920//2728 2173//2728 2172//2728 2177//2728 2181//2728
+f 2320//2728 2304//2728 2303//2728 2311//2728 2321//2728
+f 6590//2729 4634//2729 4633//2729 4637//2729
+f 4640//2730 6590//2730 4637//2730 4636//2730
+f 5788//2731 5787//2731 5793//2731 6592//2731
+f 5919//2731 5905//2731 5904//2731 5910//2731 5913//2731 5916//2731
+f 6107//2732 6102//2732 6101//2732 6106//2732
+f 6594//2732 6070//2732 6069//2732 6073//2732
+f 6230//2732 6219//2732 6218//2732 6223//2732 6231//2732
+f 6199//2733 6202//2733 4725//2733 4724//2733 4730//2733 4734//2733 6196//2733
+f 5444//2733 5442//2733 5441//2733 4946//2733 4945//2733 4948//2733 4952//2733 6345//2733 6344//2733 6339//2733
+f 2757//2734 2756//2734 2747//2734 2746//2734 2749//2734
+f 6063//2735 6594//2735 6058//2735 6057//2735
+f 6595//2735 6301//2735 6304//2735 6305//2735
+f 4895//2735 4885//2735 4886//2735 5519//2735 4470//2735 4469//2735 4474//2735 4892//2735 4894//2735
+f 5589//2736 6593//2736 5585//2736 5584//2736
+f 5165//2737 5150//2737 5149//2737 5153//2737 5158//2737 5161//2737 5166//2737
+f 6595//2738 6295//2738 6294//2738 6297//2738
+f 6071//2739 6594//2739 6067//2739 6066//2739
+f 3929//2740 3928//2740 3513//2740 3512//2740 3518//2740 3521//2740 3940//2740
+f 4248//2741 4251//2741 3445//2741 3444//2741 3447//2741 3449//2741 3437//2741 3436//2741 4246//2741 4245//2741
+f 6302//2742 6595//2742 6297//2742 6296//2742 6299//2742
+f 6429//2743 6432//2743 5080//2743 5079//2743 5085//2743 6033//2743 6034//2743 6040//2743
+f 6040//2744 6039//2744 6043//2744 5087//2744 5086//2744 5092//2744 6435//2744 6437//2744 6430//2744 6429//2744
+f 5647//2744 5650//2744 5638//2744 5637//2744 5644//2744
+f 6250//2744 6249//2744 6253//2744 6263//2744
+f 6551//2745 6554//2745 6561//2745 6548//2745 6547//2745
+f 2215//2746 2208//2746 2212//2746
+f 2256//2746 2255//2746 2259//2746 2261//2746
+f 6561//2747 6554//2747 6553//2747 6556//2747 6558//2747
+f 3176//2748 3181//2748 3180//2748 3177//2748
+f 6264//2749 6263//2749 6253//2749 6252//2749 6256//2749
+f 4455//2750 4440//2750 4439//2750 5983//2750 5982//2750 5506//2750 5505//2750 5507//2750 5497//2750
+f 6285//2751 6279//2751 6278//2751 6282//2751
+f 2428//2752 2417//2752 2416//2752 3422//2752 3421//2752 3425//2752 3427//2752 2421//2752 2425//2752 2427//2752
+f 2328//2752 2332//2752 2338//2752 2324//2752 2323//2752
+f 3795//2753 6596//2753 3819//2753 3796//2753
+f 6596//2754 3815//2754 3814//2754 3819//2754
+f 4369//2754 4376//2754 6597//2754 4370//2754
+f 6597//2755 4392//2755 4391//2755
+f 4118//2756 4121//2756 2141//2756 2140//2756 2144//2756 2145//2756 2132//2756 2131//2756 2137//2756 4114//2756 4113//2756 4119//2756
+f 3176//2757 3175//2757 2634//2757 2633//2757 2638//2757 2637//2757 2640//2757 2643//2757 2646//2757 2648//2757 3181//2757
+f 2761//2757 2760//2757 6598//2757 2769//2757 2768//2757
+f 4871//2758 6599//2758 4865//2758 4864//2758
+f 5990//2759 5989//2759 6000//2759
+f 4184//2760 6596//2760 3795//2760 3794//2760 3802//2760 4179//2760
+f 6311//2761 6316//2761 5384//2761 5390//2761 5391//2761 5396//2761 6309//2761
+f 6000//2762 5989//2762 5988//2762 5038//2762 5037//2762 5040//2762 5044//2762 5996//2762 5998//2762
+f 2860//2763 2862//2763 2854//2763 2853//2763 2858//2763 2857//2763
+f 3764//2763 3357//2763 3356//2763 3757//2763 3759//2763 3762//2763
+f 3868//2764 6600//2764 3869//2764
+f 3815//2765 6596//2765 3811//2765 3810//2765
+f 4383//2765 6597//2765 4376//2765 4375//2765 4378//2765
+f 2945//2765 3878//2765 6600//2765 2964//2765 2946//2765
+f 6597//2766 4387//2766 4386//2766
+f 6598//2767 2299//2767 2298//2767
+f 3745//2768 6598//2768 2298//2768 2297//2768 2301//2768 3742//2768
+f 2198//2768 2187//2768 2186//2768 2190//2768 2194//2768 2199//2768
+f 4870//2769 6599//2769 4871//2769
+f 6338//2769 6331//2769 6330//2769 5894//2769 5893//2769 5899//2769
+f 4875//2770 4874//2770 4878//2770 6599//2770
+f 5535//2771 5537//2771 5521//2771 5520//2771 5526//2771 5530//2771 5532//2771
+f 4387//2772 6597//2772 4382//2772 4385//2772
+f 4661//2773 4667//2773 6601//2773 4680//2773 4679//2773 4662//2773
+f 5719//2774 5724//2774 5226//2774 5225//2774 5230//2774 5716//2774
+f 3959//2775 3565//2775 3548//2775 3547//2775 3552//2775 3954//2775
+f 6600//2776 3868//2776 3867//2776 3872//2776
+f 2354//2776 2353//2776 2360//2776 2364//2776
+f 2953//2777 2960//2777 6600//2777 3872//2777 3871//2777 2954//2777
+f 2369//2777 2355//2777 2354//2777 2364//2777 2363//2777 2367//2777 2366//2777
+f 3258//2778 3257//2778 2235//2778 2234//2778 2237//2778 2239//2778
+f 6601//2779 4667//2779 4666//2779 4671//2779
+f 6189//2779 6180//2779 6179//2779 6183//2779 6184//2779 6187//2779 6190//2779
+f 4556//2780 4541//2780 4540//2780 4545//2780 4548//2780 4554//2780 4557//2780
+f 4511//2781 4510//2781 4515//2781 4525//2781
+f 2067//2782 2066//2782 2054//2782 2053//2782 2059//2782 2061//2782
+f 4674//2783 6601//2783 4671//2783 4670//2783
+f 6187//2783 6186//2783 6190//2783
+f 4422//2783 4421//2783 4425//2783 4436//2783
+f 6171//2783 6173//2783 4688//2783 4687//2783 4691//2783 4692//2783
+f 5299//2784 5292//2784 5291//2784 5770//2784 5769//2784 5774//2784 5780//2784
+f 3984//2785 3978//2785 3977//2785 3980//2785
+f 3857//2786 3849//2786 3848//2786 4213//2786 4212//2786 4217//2786 4220//2786 3858//2786
+f 4170//2787 4169//2787 4174//2787 4177//2787
+f 5710//2788 6602//2788 6161//2788 5703//2788 5702//2788 5708//2788
+f 6488//2789 6484//2789 6483//2789 6486//2789
+f 3062//2790 3057//2790 3056//2790 3059//2790
+f 3115//2791 3113//2791 3112//2791
+f 4220//2792 4219//2792 3852//2792 3851//2792 3855//2792 3858//2792
+f 3486//2792 3485//2792 2994//2792 2993//2792 3000//2792 3003//2792 3494//2792 3493//2792
+f 4171//2793 4166//2793 4165//2793
+f 2440//2793 2441//2793 2431//2793 2430//2793 2435//2793 2437//2793
+f 6527//2794 6537//2794 6536//2794 6522//2794 6521//2794
+f 6245//2794 4788//2794 4787//2794 4794//2794 6241//2794 6242//2794
+f 5255//2795 5242//2795 5241//2795 5245//2795 5249//2795
+f 6270//2796 6272//2796 5352//2796 5351//2796 5358//2796 5345//2796 5344//2796 5350//2796 6265//2796 6268//2796
+f 2557//2797 2566//2797 2576//2797 2558//2797
+f 2536//2797 2524//2797 2523//2797 2527//2797 2530//2797 2533//2797 2532//2797
+f 5811//2798 5799//2798 5798//2798 5802//2798 5805//2798
+f 3947//2799 3951//2799 3536//2799 3535//2799 3541//2799 3948//2799
+f 2379//2800 6603//2800 2380//2800
+f 2387//2801 2374//2801 2373//2801 6603//2801 2388//2801
+f 2573//2802 2576//2802 2566//2802 2565//2802 2571//2802 2570//2802
+f 2533//2802 2530//2802 2529//2802
+f 4153//2802 4152//2802 2828//2802 2827//2802 2837//2802
+f 6570//2803 6569//2803 6581//2803 6565//2803 6564//2803
+f 6157//2804 6163//2804 6602//2804 6158//2804
+f 4656//2805 4660//2805 4653//2805 4652//2805 4654//2805
+f 4575//2806 4574//2806 4561//2806 4560//2806 5131//2806 5130//2806 5135//2806
+f 5322//2807 5304//2807 5303//2807 5312//2807 5314//2807 5316//2807
+f 2384//2808 2388//2808 6603//2808 2382//2808 2381//2808
+f 5482//2809 5495//2809 5483//2809
+f 3602//2810 3601//2810 2093//2810 2092//2810 2097//2810 2100//2810 3608//2810 3609//2810
+f 2974//2810 2977//2810 6604//2810 2968//2810
+f 2969//2811 2968//2811 6604//2811
+f 2839//2812 2843//2812 2840//2812
+f 3196//2813 3184//2813 3183//2813 3189//2813 3197//2813
+f 6576//2814 6579//2814 6568//2814 6567//2814 6575//2814 6574//2814
+f 6545//2814 6544//2814 5609//2814 5608//2814 5597//2814 5596//2814 5600//2814 6452//2814 6457//2814 6459//2814 6458//2814 6465//2814 6541//2814 6543//2814
+f 4799//2814 6605//2814 4820//2814 4800//2814
+f 5135//2815 5134//2815 4566//2815 4565//2815 4570//2815 4575//2815
+f 3313//2816 3296//2816 3295//2816 3301//2816 3300//2816 3303//2816 3306//2816 4104//2816 4106//2816 4107//2816 4100//2816
+f 2126//2817 2113//2817 2112//2817 2118//2817 3612//2817 3615//2817 2127//2817
+f 2605//2818 2607//2818 2613//2818 2601//2818 2600//2818
+f 6575//2819 6567//2819 6572//2819
+f 6459//2819 6457//2819 6456//2819
+f 4807//2819 6605//2819 4799//2819
+f 5485//2820 6376//2820 4994//2820 4993//2820 5000//2820 5005//2820 6377//2820 5960//2820 5959//2820 5964//2820 5969//2820 5972//2820 5971//2820 5493//2820 5492//2820 5495//2820 5482//2820 5481//2820
+f 6349//2820 5931//2820 5930//2820 5938//2820 5924//2820 5923//2820 6350//2820
+f 5972//2821 5969//2821 5968//2821
+f 5938//2821 5930//2821 5934//2821 5936//2821
+f 2613//2822 2607//2822 2606//2822 2609//2822 2611//2822
+f 2661//2823 2652//2823 2651//2823 2656//2823 2657//2823
+f 6606//2824 3710//2824 3709//2824 3711//2824
+f 4811//2825 6605//2825 4807//2825 4806//2825 4808//2825
+f 4535//2825 4539//2825 4528//2825 4527//2825 4530//2825 4532//2825
+f 4817//2826 6605//2826 4811//2826 4810//2826 4813//2826
+f 4535//2826 4534//2826 4538//2826 4539//2826
+f 5566//2826 5571//2826 4935//2826 4934//2826 4940//2826 5375//2826 5374//2826 5378//2826 4929//2826 4928//2826 4933//2826 5555//2826 5559//2826 5561//2826
+f 5869//2826 5868//2826 5876//2826 6607//2826
+f 6607//2827 5890//2827 5889//2827
+f 6415//2827 6414//2827 5547//2827 5546//2827 5550//2827 5553//2827 6423//2827 6426//2827
+f 5459//2828 5458//2828 5460//2828 5462//2828
+f 3576//2829 3578//2829 3097//2829 3096//2829 3086//2829 3085//2829 3090//2829 4302//2829 4306//2829 3571//2829 3570//2829 3573//2829
+f 6608//2829 4298//2829 4297//2829 4300//2829
+f 4325//2830 4331//2830 4337//2830 4326//2830
+f 6607//2831 5886//2831 5885//2831 5890//2831
+f 4495//2831 4500//2831 4509//2831 4496//2831
+f 5026//2832 5011//2832 5010//2832 5015//2832 5019//2832 5021//2832 5020//2832 5025//2832 6209//2832 6212//2832 6216//2832 6205//2832 6204//2832
+f 3596//2833 3599//2833 3126//2833 3125//2833 3129//2833 3133//2833
+f 6606//2834 3268//2834 3267//2834 3271//2834
+f 3707//2835 3706//2835 3710//2835 6606//2835 3273//2835 3272//2835 3276//2835 4087//2835
+f 3071//2836 3074//2836 6608//2836 4282//2836 4286//2836 3066//2836 3065//2836
+f 4299//2837 6608//2837 4293//2837 4292//2837
+f 3823//2837 3827//2837 2901//2837 2900//2837 2906//2837 3824//2837
+f 6609//2838 4024//2838 4023//2838
+f 4127//2839 4132//2839 4142//2839 4128//2839
+f 2594//2839 2578//2839 2577//2839 2583//2839 2589//2839 2595//2839
+f 5875//2840 6321//2840 5406//2840 5405//2840 5411//2840 6607//2840 5876//2840
+f 5884//2841 5883//2841 6607//2841 5418//2841 5417//2841 5423//2841 6326//2841
+f 5886//2842 6607//2842 5883//2842 5882//2842
+f 4507//2842 4509//2842 4500//2842 4499//2842 4502//2842 4505//2842
+f 3846//2843 3837//2843 3836//2843 3844//2843 3843//2843
+f 5018//2844 5021//2844 5019//2844
+f 4981//2844 4980//2844 4492//2844 4480//2844 4479//2844 4483//2844 4992//2844
+f 3658//2845 3662//2845 3204//2845 3203//2845 3207//2845 3666//2845 3665//2845 3659//2845
+f 2273//2846 2264//2846 2263//2846 2268//2846 2269//2846 2271//2846
+f 4138//2847 4135//2847 4134//2847
+f 3844//2848 3836//2848 3835//2848 3840//2848 3839//2848 3842//2848
+f 5690//2849 5675//2849 5674//2849 6141//2849 6140//2849 6143//2849 6146//2849 5681//2849 5680//2849 5684//2849 5689//2849 5738//2849 5740//2849 5731//2849 5730//2849
+f 2922//2850 2921//2850 2916//2850 2915//2850 2918//2850
+f 4148//2851 2822//2851 2824//2851 2804//2851 2803//2851 2808//2851 2813//2851 2812//2851 2819//2851 2821//2851
+f 4320//2852 4323//2852 4311//2852 4310//2852 4317//2852 4316//2852
+f 3154//2853 3136//2853 3135//2853 3142//2853 3147//2853 3146//2853
+f 3154//2854 3146//2854 3145//2854 3150//2854 3153//2854
+f 2540//2854 2539//2854 2544//2854 6610//2854
+f 3840//2855 3835//2855 3834//2855
+f 6610//2855 2554//2855 2553//2855 2556//2855
+f 2510//2855 2486//2855 2485//2855 2501//2855 2500//2855 2507//2855
+f 2801//2855 2776//2855 2775//2855 2784//2855 2788//2855 4203//2855 4196//2855
+f 3625//2856 3624//2856 6611//2856 3642//2856
+f 3629//2857 6611//2857 3630//2857
+f 4266//2857 4258//2857 4260//2857 4262//2857
+f 3331//2858 3319//2858 3318//2858 3322//2858 3324//2858 3326//2858 3329//2858
+f 3681//2859 3680//2859 3231//2859 3230//2859 4079//2859 4081//2859 4083//2859 4073//2859 4072//2859 3236//2859 3218//2859 3217//2859 3221//2859 3225//2859 3672//2859 3675//2859
+f 2480//2860 2471//2860 2470//2860 2474//2860 2477//2860 2478//2860
+f 3894//2861 3893//2861 6612//2861 3907//2861 3906//2861
+f 3454//2861 3469//2861 3455//2861
+f 2866//2862 2865//2862 2887//2862
+f 3740//2862 3724//2862 3725//2862 3728//2862 3732//2862 3735//2862 3734//2862 3738//2862
+f 3740//2863 3738//2863 3737//2863
+f 2555//2864 6610//2864 2549//2864 2548//2864
+f 4043//2864 4028//2864 4027//2864 4033//2864 4035//2864 4038//2864 4044//2864
+f 4038//2865 4037//2865 4041//2865 4044//2865
+f 2666//2866 6613//2866 2681//2866 2667//2866
+f 5267//2867 5270//2867 5262//2867 5261//2867 5264//2867
+f 6288//2868 6274//2868 6273//2868 6279//2868 6285//2868 6284//2868 6287//2868
+f 5113//2869 5097//2869 5096//2869 5101//2869 6045//2869 6048//2869
+f 6127//2870 6126//2870 5656//2870 5655//2870 5663//2870 6137//2870
+f 6212//2871 6211//2871 6215//2871 6216//2871
+f 2677//2872 2679//2872 6613//2872 2674//2872 2673//2872
+f 6612//2873 3898//2873 3897//2873 3900//2873
+f 3634//2874 3633//2874 3637//2874 6611//2874
+f 2739//2875 2719//2875 2718//2875 2724//2875 2737//2875
+f 3501//2876 3510//2876 3509//2876 3497//2876 3496//2876
+f 6590//2877 4643//2877 4642//2877 4646//2877
+f 6117//2877 4624//2877 4623//2877 6124//2877 6118//2877
+f 5782//2877 5781//2877 5786//2877 6592//2877 6585//2877 6584//2877
+f 4750//2877 4753//2877 4743//2877 4742//2877 4745//2877 4748//2877
+f 5755//2878 5754//2878 5273//2878 5272//2878 5279//2878 6585//2878 6592//2878 5767//2878
+f 6391//2879 6395//2879 6383//2879 6382//2879 6387//2879 6388//2879
+f 5797//2879 6587//2879 5281//2879 5280//2879 5287//2879 5762//2879 5765//2879 5767//2879 6592//2879 5792//2879 5795//2879
+f 6516//2880 6506//2880 6505//2880 6510//2880 6513//2880
+f 4700//2880 4699//2880 6591//2880
+f 5626//2880 5614//2880 5613//2880 5616//2880 5619//2880 5624//2880 5623//2880
+f 4974//2881 4963//2881 4962//2881 4967//2881 4973//2881 4972//2881
+f 4908//2882 4907//2882 4911//2882 4899//2882 4898//2882
+f 3917//2883 3909//2883 3908//2883 3914//2883
+f 2304//2884 2320//2884 2319//2884 2305//2884
+f 4403//2885 4394//2885 4393//2885 4401//2885
+f 5116//2885 5115//2885 5120//2885 5123//2885
+f 4417//2886 4416//2886 4418//2886 4409//2886 4408//2886
+f 5128//2887 5125//2887 5124//2887
+f 5060//2886 5050//2886 5049//2886 5052//2886 5056//2886 5058//2886 5057//2886
+f 4714//2888 6591//2888 4706//2888 4705//2888 4710//2888
+f 5219//2888 5208//2888 5207//2888 5212//2888 5211//2888 5214//2888 5216//2888
+f 4718//2889 6591//2889 4714//2889 4713//2889 4717//2889
+f 5205//2889 5191//2889 5190//2889 5196//2889 5198//2889 5200//2889 5203//2889
+f 6438//2890 6444//2890 6593//2890 6439//2890
+f 2929//2891 2928//2891 2933//2891 2936//2891
+f 2747//2891 2756//2891 2755//2891 2742//2891 2741//2891
+f 4617//2892 4622//2892 4615//2892 4614//2892
+f 6592//2892 5789//2892 5788//2892
+f 5792//2893 6592//2893 5793//2893
+f 5906//2893 5905//2893 5919//2893 5918//2893
+f 4407//2894 4413//2894 4417//2894 4408//2894
+f 6059//2894 6058//2894 6594//2894 6073//2894
+f 5058//2894 5056//2894 5055//2894
+f 5592//2895 6593//2895 5589//2895 5588//2895 5590//2895
+f 6496//2895 6498//2895 5179//2895 5178//2895 5185//2895 5188//2895 5187//2895 5174//2895 5173//2895 5177//2895 6494//2895
+f 5188//2896 5185//2896 5184//2896
+f 6342//2897 6345//2897 4952//2897 4951//2897 4955//2897 4958//2897
+f 2317//2898 2321//2898 2311//2898 2310//2898 2313//2898
+f 6295//2899 6595//2899 6305//2899 6291//2899 6290//2899
+f 5511//2899 5510//2899 5514//2899 4463//2899 4462//2899 4470//2899 5519//2899
+f 6594//2900 6071//2900 6070//2900
+f 6228//2900 6231//2900 6223//2900 6222//2900 6225//2900
+f 6444//2901 6443//2901 5580//2901 5579//2901 5586//2901 6593//2901
+f 6593//2902 5586//2902 5585//2902
+f 2751//2903 2757//2903 2749//2903 2748//2903
+f 2210//2904 2207//2904 2206//2904
+f 2221//2905 2202//2905 2201//2905 2207//2905 2210//2905 2209//2905 2277//2905
+f 3438//2906 3437//2906 3449//2906 3448//2906
+f 5161//2907 5160//2907 5166//2907
+f 6067//2908 6594//2908 6063//2908 6062//2908 6064//2908
+f 6595//2908 6302//2908 6301//2908
+f 3937//2909 3940//2909 3521//2909 3520//2909 3524//2909 3528//2909 3935//2909
+f 4062//2910 4046//2910 4045//2910 4052//2910 4063//2910
+f 2278//2911 2277//2911 2209//2911 2208//2911 2215//2911 2214//2911 2282//2911 2286//2911 2287//2911
+f 5654//2912 5639//2912 5638//2912 5650//2912 5649//2912
+f 2518//2913 2520//2913 2252//2913 2251//2913 2256//2913 2261//2913 2248//2913 2247//2913 2516//2913 2515//2913
+f 5361//2914 5360//2914 4844//2914 4843//2914 4848//2914 4853//2914 5832//2914 5834//2914 5835//2914 5370//2914 5369//2914
+f 4059//2915 4063//2915 4052//2915 4051//2915 4056//2915
+f 4865//2916 6599//2916 4884//2916 4866//2916
+f 6264//2917 6256//2917 6255//2917 6259//2917 6261//2917
+f 5983//2918 4439//2918 4438//2918 4443//2918 5975//2918 5978//2918 5980//2918
+f 5951//2918 5941//2918 5940//2918 5947//2918 6359//2918 6366//2918 5952//2918
+f 2337//2919 2338//2919 2332//2919 2331//2919 2335//2919
+f 2719//2919 2739//2919 2720//2919
+f 4225//2920 4224//2920 4230//2920 4236//2920
+f 4241//2921 4240//2921 4226//2921 4225//2921 4236//2921 4235//2921
+f 4371//2922 4370//2922 6597//2922 4391//2922 4390//2922
+f 4113//2923 4112//2923 4116//2923 4119//2923
+f 2638//2924 2633//2924 2632//2924
+f 6597//2925 4386//2925 4392//2925
+f 2760//2926 2759//2926 2290//2926 2289//2926 2294//2926 2299//2926 6598//2926
+f 6599//2927 4881//2927 4880//2927 4884//2927
+f 3764//2928 3763//2928 3362//2928 3361//2928 3349//2928 3348//2928 3351//2928 3357//2928
+f 4238//2928 4241//2928 4235//2928 4234//2928
+f 3745//2929 3744//2929 2765//2929 2764//2929 2769//2929 6598//2929
+f 5988//2930 5987//2930 5030//2930 5029//2930 5035//2930 5038//2930
+f 5855//2930 5854//2930 5385//2930 5384//2930 6316//2930 6315//2930 6317//2930 5865//2930 5864//2930
+f 5522//2931 5521//2931 5537//2931
+f 6368//2932 6373//2932 5474//2932 5473//2932 5478//2932 5949//2932 5952//2932 6366//2932 6365//2932
+f 5236//2933 5235//2933 5222//2933 5221//2933 5227//2933 5727//2933
+f 5851//2933 5839//2933 5838//2933 5841//2933 5844//2933 5848//2933 5847//2933
+f 2853//2934 2852//2934 2856//2934 2858//2934
+f 2737//2934 2724//2934 2723//2934 2726//2934 2731//2934 2734//2934
+f 3813//2935 4188//2935 3812//2935 3811//2935 6596//2935 4184//2935 4183//2935 4186//2935 3806//2935 3808//2935
+f 3878//2935 3864//2935 3863//2935 3869//2935 6600//2935
+f 6599//2936 4870//2936 4869//2936 4875//2936
+f 5899//2936 5898//2936 5429//2936 5428//2936 5435//2936 5438//2936 6334//2936 6336//2936 6338//2936
+f 4878//2937 4877//2937 4881//2937 6599//2937
+f 5725//2938 5727//2938 5227//2938 5226//2938 5724//2938 5723//2938
+f 5848//2938 5844//2938 5843//2938
+f 6597//2939 4383//2939 4382//2939
+f 2964//2939 6600//2939 2960//2939 2959//2939 2961//2939
+f 2195//2940 2199//2940 2194//2940 2193//2940
+f 3693//2940 3692//2940 3252//2940 3251//2940 3258//2940 2239//2940 2238//2940 2241//2940 2245//2940 3697//2940
+f 3967//2941 3563//2941 3562//2941 3565//2941 3959//2941 3958//2941 3963//2941 3968//2941
+f 3967//2942 3966//2942 3559//2942 3558//2942 3563//2942
+f 3169//2942 3168//2942 3157//2942 3156//2942 3160//2942 3163//2942 4341//2942 4343//2942 4345//2942 4346//2942
+f 6601//2943 4674//2943 4673//2943 4680//2943
+f 4695//2943 4694//2943 4683//2943 4682//2943 4688//2943 6173//2943 6172//2943 6176//2943 6168//2943
+f 4557//2944 4554//2944 4553//2944
+f 5822//2944 5814//2944 5813//2944 5818//2944
+f 4842//2945 4826//2945 4825//2945 5815//2945 5814//2945 5822//2945 5821//2945
+f 5820//2946 4839//2946 4838//2946 4840//2946 4842//2946 5821//2946
+f 3968//2947 3963//2947 3962//2947
+f 3987//2947 3976//2947 3975//2947 3978//2947 3984//2947 3983//2947
+f 4523//2948 4525//2948 4515//2948 4514//2948 4519//2948 4521//2948
+f 6487//2948 6491//2948 6479//2948 6478//2948 6484//2948 6488//2948
+f 2067//2949 2061//2949 2060//2949 2063//2949
+f 3061//2949 3064//2949 3052//2949 3051//2949 3057//2949 3062//2949
+f 2367//2950 2363//2950 2362//2950
+f 4170//2951 4177//2951 3790//2951 3789//2951 3782//2951 3781//2951 3384//2951 3383//2951 3388//2951 3392//2951 4160//2951 4166//2951 4171//2951
+f 4434//2952 4436//2952 4425//2952 4424//2952 4428//2952 4430//2952
+f 6233//2952 6244//2952 6234//2952
+f 6153//2953 6602//2953 5693//2953 5692//2953 5698//2953 6147//2953
+f 5694//2954 5693//2954 6602//2954 5710//2954
+f 5820//2954 5825//2954 4832//2954 4836//2954 4839//2954
+f 6602//2955 6162//2955 6161//2955
+f 5773//2956 5777//2956 4765//2956 4764//2956 4769//2956 4772//2956 4773//2956 5297//2956 5301//2956 5779//2956 5780//2956 5774//2956
+f 5345//2956 5358//2956 5357//2956 5346//2956
+f 3115//2957 3101//2957 3100//2957 3992//2957 3991//2957 3581//2957 3580//2957 3583//2957 3586//2957 3588//2957 3110//2957 3109//2957 3113//2957
+f 3544//2958 3533//2958 3532//2958 3944//2958 3943//2958
+f 3492//2959 3494//2959 3003//2959 3002//2959 3005//2959 3010//2959
+f 6244//2960 6233//2960 6232//2960 4776//2960 4775//2960 4780//2960 4784//2960 4788//2960 6245//2960
+f 6602//2961 6153//2961 6152//2961 6155//2961
+f 6476//2961 6468//2961 6467//2961 6472//2961 6091//2961 6090//2961 6094//2961
+f 6163//2962 6162//2962 6602//2962
+f 5253//2963 5255//2963 5249//2963 5248//2963 5252//2963
+f 4653//2963 4660//2963 4659//2963 4649//2963 4648//2963
+f 6602//2964 6155//2964 6154//2964 6159//2964
+f 6082//2964 6081//2964 6086//2964 6088//2964 6091//2964 6472//2964 6471//2964
+f 5811//2965 5805//2965 5332//2965 5331//2965 5336//2965 5339//2965 5340//2965 5342//2965 5808//2965
+f 3334//2966 3333//2966 3336//2966 3338//2966 3341//2966 3748//2966 3747//2966
+f 3751//2967 3749//2967 3748//2967 3341//2967 3340//2967 3344//2967 3345//2967
+f 3942//2968 3948//2968 3541//2968 3540//2968 3543//2968 3544//2968 3943//2968
+f 2373//2969 2372//2969 2380//2969 6603//2969
+f 3472//2970 3481//2970 3484//2970 3473//2970
+f 6532//2971 6526//2971 6529//2971
+f 6534//2972 6537//2972 6527//2972 6526//2972 6532//2972 6531//2972
+f 6570//2972 6564//2972 6563//2972
+f 6602//2973 6159//2973 6158//2973
+f 2382//2974 6603//2974 2379//2974 2378//2974
+f 2567//2975 2571//2975 2565//2975 2564//2975
+f 3380//2976 3367//2976 3366//2976 4154//2976 4153//2976 2837//2976 2836//2976 2840//2976 2843//2976 2842//2976 2847//2976 3775//2976 3378//2976 3377//2976
+f 2459//2976 3883//2976 3886//2976 2454//2976 2453//2976
+f 3472//2977 3471//2977 2446//2977 2445//2977 2454//2977 3886//2977 3885//2977 3888//2977 3889//2977 3482//2977 3481//2977
+f 6578//2978 6581//2978 6569//2978 6568//2978 6579//2978
+f 4005//2979 4007//2979 3997//2979 3996//2979 4000//2979 4001//2979
+f 4350//2979 4349//2979 2151//2979 2150//2979 3653//2979 3652//2979 3656//2979 4355//2979
+f 2970//2980 2969//2980 6604//2980 2992//2980
+f 3608//2981 2100//2981 2099//2981 2102//2981 2107//2981 3606//2981
+f 2985//2981 6604//2981 2977//2981 2976//2981 2980//2981
+f 2984//2982 2989//2982 2992//2982 6604//2982 2985//2982
+f 3294//2982 3301//2982 3295//2982
+f 6542//2983 6545//2983 6543//2983
+f 6605//2983 4821//2983 4820//2983
+f 6357//2983 5932//2983 5931//2983 6349//2983 6348//2983 6353//2983
+f 3647//2984 3653//2984 2150//2984 2149//2984 2155//2984 2158//2984 2160//2984 3645//2984
+f 3615//2985 3614//2985 2622//2985 2621//2985 2626//2985 2628//2985 2629//2985 2128//2985 2127//2985
+f 3718//2985 3721//2985 3284//2985 3283//2985 3287//2985 3291//2985 4096//2985 4098//2985 4091//2985 4090//2985 3716//2985 3715//2985
+f 3194//2986 3197//2986 3189//2986 3188//2986 3191//2986
+f 6605//2987 4817//2987 4816//2987 4821//2987
+f 6357//2987 6356//2987 5927//2987 5926//2987 5932//2987
+f 5376//2987 5375//2987 4940//2987 4939//2987 4943//2987 5382//2987
+f 5870//2987 5869//2987 6607//2987 5889//2987
+f 6414//2987 6413//2987 5539//2987 5538//2987 5544//2987 5547//2987
+f 4601//2988 4578//2988 4577//2988 4583//2988 4588//2988 5140//2988 5144//2988
+f 3592//2989 3591//2989 3117//2989 3116//2989 3121//2989 3126//2989 3599//2989 3598//2989
+f 2663//2990 2653//2990 2652//2990 2661//2990 2660//2990
+f 3268//2991 6606//2991 2708//2991 2707//2991 2712//2991 4086//2991 3263//2991 3262//2991
+f 2692//2991 2689//2991 2688//2991
+f 2715//2992 2709//2992 2708//2992 6606//2992 3711//2992 3700//2992
+f 3683//2992 3682//2992 2684//2992 2683//2992 2689//2992 2692//2992 2691//2992 2694//2992 2696//2992 3688//2992 3246//2992 3245//2992 3248//2992 3239//2992 3238//2992 4069//2992 4068//2992
+f 5462//2993 5450//2993 5449//2993 5453//2993 5455//2993 5459//2993
+f 5143//2994 5145//2994 4596//2994 4595//2994 4600//2994 5633//2994 5634//2994 4602//2994 4601//2994 5144//2994
+f 4283//2995 4282//2995 6608//2995 4300//2995
+f 4331//2996 4330//2996 2080//2996 2079//2996 2084//2996 2087//2996 2088//2996 2077//2996 2076//2996 4337//2996
+f 6606//2997 3271//2997 3270//2997 3273//2997
+f 4277//2997 4281//2997 3046//2997 3045//2997 3034//2997 3033//2997 3038//2997 4270//2997 4272//2997 4276//2997
+f 3081//2998 4293//2998 6608//2998 3074//2998 3073//2998 3076//2998
+f 3572//2999 3575//2999 3576//2999 3573//2999
+f 6608//2999 4299//2999 4298//2999
+f 2905//2999 2907//2999 2409//2999 2408//2999 2394//2999 2393//2999 2399//2999 3820//2999 3824//2999 2906//2999
+f 4026//3000 4012//3000 4011//3000 4015//3000 6609//3000 4023//3000
+f 5418//3001 6607//3001 5411//3001 5410//3001 5415//3001
+f 4140//3002 4142//3002 4132//3002 4131//3002 4135//3002 4138//3002 4137//3002
+f 2595//3002 2589//3002 2588//3002 2591//3002
+f 3830//3003 3829//3003 3837//3003 3846//3003
+f 5740//3004 5739//3004 5743//3004 5732//3004 5731//3004
+f 4992//3005 4483//3005 4482//3005 4485//3005 4487//3005 4491//3005 4984//3005 4987//3005 4989//3005
+f 2349//3006 2351//3006 2341//3006 2340//3006 2345//3006 2346//3006
+f 4022//3007 6609//3007 4015//3007 4014//3007 4018//3007
+f 4024//3008 6609//3008 4022//3008 4021//3008
+f 4205//3009 4204//3009 2911//3009 2910//3009 2916//3009 2921//3009 2920//3009 2926//3009 4209//3009 4211//3009
+f 2813//3010 2808//3010 2807//3010
+f 4310//3011 4309//3011 4315//3011 4317//3011
+f 3147//3012 3142//3012 3141//3012
+f 2541//3013 2540//3013 6610//3013 2556//3013
+f 2485//3013 2491//3013 2494//3013 2501//3013
+f 5269//3014 5257//3014 5256//3014 5262//3014 5270//3014
+f 3213//3015 3663//3015 3666//3015 3207//3015 3206//3015 3209//3015
+f 3630//3015 6611//3015 3624//3015 3623//3015
+f 4266//3015 4265//3015 4267//3015 3028//3015 3027//3015 3017//3015 3016//3015 3019//3015 3022//3015 4258//3015
+f 2555//3016 2554//3016 6610//3016
+f 4203//3016 2788//3016 2791//3016 2796//3016 4197//3016 4199//3016 4202//3016
+f 4028//3016 4043//3016 4029//3016
+f 3642//3017 6611//3017 3637//3017 3636//3017 3639//3017
+f 2922//3018 2918//3018 2917//3018
+f 3331//3018 3329//3018 3328//3018
+f 6612//3019 3893//3019 3892//3019 3898//3019
+f 2550//3020 6610//3020 2544//3020 2543//3020 2546//3020
+f 6610//3021 2550//3021 2549//3021
+f 2670//3022 6613//3022 2666//3022 2665//3022
+f 6613//3023 2679//3023 2678//3023 2681//3023
+f 4629//3024 4628//3024 4635//3024 6590//3024
+f 4629//3025 6590//3025 4645//3025 4630//3025
+f 6590//3026 4646//3026 4645//3026
+f 4740//3026 4739//3026 4743//3026 4753//3026
+f 6017//3027 6014//3027 6013//3027
+f 6275//3028 6274//3028 6288//3028
+f 6047//3029 6051//3029 6053//3029 5107//3029 5106//3029 5111//3029 6055//3029 5109//3029 5108//3029 5113//3029 6048//3029
+f 6136//3030 6137//3030 5663//3030 5662//3030 5664//3030 5668//3030 5672//3030 6133//3030
+f 6613//3031 2670//3031 2669//3031 2674//3031
+f 2886//3032 2887//3032 2865//3032 2864//3032 2870//3032 3401//3032 3407//3032 3409//3032 3411//3032 2880//3032 2879//3032
+f 3731//3032 3735//3032 3732//3032
+f 3467//3033 3461//3033 3460//3033 3463//3033
+f 3902//3034 3907//3034 6612//3034 3903//3034
+f 3466//3034 3469//3034 3454//3034 3453//3034 3457//3034 3461//3034 3467//3034
+f 3903//3035 6612//3035 3900//3035 3899//3035
+f 3678//3036 3681//3036 3675//3036 3674//3036
+f 3634//3037 6611//3037 3629//3037 3628//3037
+s 1
+f 4017//3038 4019//3038 4009//3038 4013//3038 4025//3038 4020//3038
+f 2266//3038 2265//3038 2275//3038
+f 2071//3038 2070//3038 2085//3038 2082//3038
+f 4335//3038 4334//3038 4333//3038 4328//3038 4327//3038 4336//3038
+f 2650//3039 2654//3039 2662//3039 2659//3039 2658//3039 2655//3039
+f 3293//3039 3298//3039 3302//3039
+f 2101//3039 2096//3039 2098//3039 2990//3039 2983//3039 2982//3039 2104//3039 2103//3039
+f 3605//3040 2986//3040 2990//3040 2098//3040 2091//3040 2095//3040 2110//3040 2967//3040 2966//3040 3604//3040 3603//3040 3607//3040
+f 4004//3041 4003//3041 4008//3041 4006//3041
+f 2624//3042 2618//3042 2617//3042
+f 2121//3042 2115//3042 2111//3042 2114//3042 2129//3042 2124//3042
+f 3621//3042 3618//3042 3620//3042 4097//3042 4093//3042 4092//3042 3610//3042 3613//3042 3622//3042
+f 2624//3043 2617//3043 2616//3043 2630//3043 2627//3043 2625//3043 2620//3043
+f 3912//3044 3911//3044 3925//3044 3918//3044 3913//3044
+f 2171//3045 2168//3045 2167//3045 2178//3045 2182//3045
+f 3915//3045 3918//3045 3925//3045 3922//3045 3919//3045
+f 4362//3045 4361//3045 4357//3045 4360//3045 4368//3045 4365//3045
+f 2257//3046 2250//3046 2254//3046 2260//3046
+f 2318//3047 2322//3047 2307//3047 2306//3047
+f 2315//3048 2314//3048 2312//3048 2308//3048 2307//3048 2322//3048 2316//3048
+f 2329//3049 2327//3049 2326//3049 2333//3049
+f 2386//3050 2385//3050 2376//3050 2375//3050 2389//3050
+f 2371//3051 2376//3051 2385//3051 2383//3051 2377//3051
+f 2467//3052 2466//3052 3382//3052 3381//3052 6614//3053 2449//3054 2448//3052 3477//3055 3475//3056 3474//3052 3483//3052 3479//3052 2468//3052
+f 3376//3057 3379//3057 6614//3057 3381//3057
+f 3882//3057 3880//3057 3881//3057 3890//3057 3887//3057 3884//3057
+f 4058//3058 4060//3058 6615//3058 4064//3058
+f 6615//3059 4065//3060 4064//3061
+f 2246//3061 2249//3061 2258//3061 2260//3061 2254//3061 2253//3061 2521//3061 2519//3061 2514//3061 2517//3061
+f 4172//3062 6616//3062 4173//3062
+f 2526//3062 2528//3062 2534//3062 2531//3062
+f 3368//3062 3364//3062 2450//3062 2455//3062 6614//3062 3375//3062 3374//3062 3779//3062 3778//3062 6617//3062 3769//3062 3766//3062 3768//3062 4156//3062 4151//3062 4155//3062
+f 4173//3063 6616//3063 4175//3063 4168//3063
+f 2528//3063 2522//3063 2525//3063 2537//3063 2535//3063 2534//3063
+f 2444//3063 2449//3054 6614//3053 2455//3063
+f 3470//3063 3475//3056 3477//3055 3476//3063
+f 4162//3064 6616//3064 4163//3064
+f 2560//3065 2559//3065 2575//3065 2574//3065 2561//3065
+f 3770//3065 3769//3065 6617//3065
+f 4164//3065 4163//3065 6616//3065 4172//3065
+f 2569//3066 2568//3066 2562//3066 2561//3066 2574//3066 2572//3066
+f 6617//3067 3771//3067 3770//3067
+f 2833//3066 2832//3066 2849//3066
+f 2582//3068 2581//3068 6618//3068 2584//3068
+f 2580//3069 6618//3069 2581//3069
+f 2598//3070 6618//3070 2580//3070 2579//3070
+f 2598//3071 2597//3071 2596//3071 6618//3071
+f 3186//3072 3185//3072 3198//3072 3192//3072 3187//3072
+f 3193//3073 3190//3073 3192//3073 3198//3073 3195//3073
+f 2612//3074 2610//3074 2608//3074 2604//3074 2599//3074 2603//3074 2614//3074
+f 2142//3075 2139//3075 2134//3075 2138//3075 2148//3075 2147//3075 2146//3075
+f 4124//3075 4123//3075 4122//3075 4110//3075 4115//3075
+f 2647//3076 3179//3076 3174//3076 3178//3076 3182//3076 2649//3076 2645//3076
+f 2130//3077 2133//3077 2148//3077 2138//3077
+f 2635//3078 3179//3078 2647//3078 2644//3078 2642//3078 2641//3078 2639//3078 2631//3078
+f 2146//3079 2143//3079 2142//3079
+f 2767//3079 2763//3079 2766//3079 3743//3079 3741//3079 2300//3079 2296//3079 2295//3079 2293//3079 2292//3079 2302//3079 2758//3079 2762//3079
+f 2636//3079 2639//3079 2641//3079
+f 2675//3080 2671//3080 2664//3080 2668//3080 2682//3080
+f 2680//3081 2676//3081 2672//3081 2675//3081 2682//3081
+f 2750//3082 2745//3082 2740//3082 2744//3082 2752//3082
+f 3930//3083 3939//3083 3926//3083
+f 2934//3084 2937//3084 2940//3084
+f 2753//3084 2752//3084 2744//3084 2743//3084 2754//3084
+f 4207//3085 4206//3085 4210//3085 2925//3085 2924//3085 2913//3085 2912//3085
+f 4145//3086 4144//3086 4208//3086 4210//3086 4206//3086 2809//3086 2806//3086 2805//3086 2826//3086 4143//3086 4150//3086 4147//3086
+f 4146//3087 4147//3087 4150//3087 4149//3087
+f 3232//3088 3220//3088 3219//3088 3233//3088
+f 2923//3089 2919//3089 2914//3089 2909//3089 2913//3089 2924//3089
+f 2058//3090 2052//3090 2057//3090 2064//3090 2062//3090
+f 3070//3091 3069//3091 3082//3091 3077//3091 3075//3091 3072//3091
+f 3821//3091 2397//3091 2396//3091 3574//3091 6619//3091 2400//3091 2407//3091 3419//3091 3828//3091 3826//3091 3825//3091 3822//3091
+f 4303//3092 4308//3092 4307//3092 4304//3092
+f 3099//3093 3098//3093 3091//3093 3084//3093 3087//3093
+f 3078//3094 3082//3094 3069//3094 3068//3094
+f 4305//3094 4307//3094 4308//3094 2036//3094 2035//3094 3092//3094 3091//3094 3098//3094 3093//3094 2051//3094 2048//3094 2047//3094 4294//3094 2045//3094 2043//3094 2042//3094 4291//3094 4290//3094 4287//3094 4289//3094
+f 3577//3094 2412//3094 2413//3094 6619//3094 3574//3094 3569//3094 3566//3094 3567//3094
+f 3155//3095 6620//3095 3138//3095 3137//3095
+f 3149//3096 3151//3096 6620//3096 3155//3096 3152//3096
+f 2552//3096 2551//3096 2547//3096 2545//3096 2538//3096 2542//3096
+f 3140//3097 3143//3097 6620//3097 3148//3097
+f 3173//3098 3172//3098 3171//3098
+f 2056//3099 2055//3099 2069//3099
+f 3550//3100 3553//3100 3556//3100
+f 3986//3100 3989//3100 3973//3100 3964//3100 3957//3100 3956//3100 3955//3100 3972//3100 3970//3100 3969//3100
+f 3965//3101 3970//3101 3972//3101 3971//3101
+f 3557//3101 3556//3101 3553//3101 3546//3101 3549//3101 3564//3101 3561//3101
+f 3173//3101 3171//3101 3165//3101 3164//3101 3161//3101 3159//3101 3158//3101
+f 4340//3101 4339//3101 4338//3101 4347//3101 4344//3101 4342//3101
+f 3031//3102 3030//3103 3014//3104 3018//3102
+f 3202//3102 3205//3102 3214//3102 3210//3102 3208//3102
+f 3664//3105 3215//3105 3211//3105 3214//3105 3205//3105 3199//3105 3201//3105 3661//3105 3657//3105 3660//3105 3667//3105
+f 3677//3106 3673//3106 3676//3106 3669//3106 3668//3106 3679//3106
+f 4077//3106 4076//3106 4082//3106 4078//3106
+f 4085//3107 2714//3107 2713//3107 2711//3107 2710//3107 2716//3107 3701//3107 3708//3107 3705//3107 3702//3107 3704//3107 4088//3107 3275//3107 3277//3107 3269//3107 3265//3107 3264//3107
+f 4275//3108 4274//3108 4278//3108
+f 3274//3109 3049//3109 3048//3109 3041//3109 3044//3109 4280//3109 4279//3109 4278//3109 4274//3109 4273//3109 4271//3109 3040//3109 3039//3109 3032//3109 3036//3109 3266//3109 3269//3109 3277//3109
+f 4095//3110 4094//3110 4089//3110 4093//3110 4097//3110
+f 3286//3110 3288//3110 3713//3110 3712//3110 3281//3110 3280//3110 3289//3110
+f 3282//3111 3285//3111 3720//3111 3719//3111 3714//3111 3713//3111 3288//3111
+f 3327//3112 3330//3112 3316//3112 3320//3112
+f 3669//3112 3676//3112 3671//3112 3670//3112
+f 3330//3113 3325//3113 3323//3113 3321//3113 3317//3113 3316//3113
+f 3750//3114 3752//3114 3346//3114 3343//3114 3342//3114 3339//3114 3337//3114 3332//3114 3335//3114 3746//3114
+f 3060//3115 3058//3115 3055//3115 3054//3115 3053//3115 3063//3115
+f 3949//3116 3952//3116 3950//3116
+f 2834//3117 2833//3117 2849//3117 2851//3117 2848//3117 2841//3117 2838//3117 2835//3117
+f 3772//3117 3771//3117 6617//3117 3773//3117
+f 3412//3118 3404//3118 3403//3118 3414//3118
+f 2285//3119 2284//3119 2281//3119 2276//3119 2279//3119 2288//3119
+f 4253//3119 4254//3119 4249//3119 4244//3119 4247//3119 4255//3119
+f 3452//3120 3456//3120 3465//3120 3468//3120 3458//3120
+f 3462//3121 3459//3121 3458//3121 3468//3121 3464//3121
+f 3499//3122 3498//3122 3511//3122 3505//3122 3502//3122
+f 3515//3123 3530//3123 3519//3123 3516//3123
+f 3931//3123 3927//3123 3926//3123 3939//3123 3936//3123 3938//3123 3932//3123
+f 3531//3124 3534//3124 3545//3124 3946//3124 3945//3124
+f 2998//3124 2997//3124 3012//3124 3011//3124 3001//3124
+f 3105//3124 3107//3124 3589//3124 3587//3124 3585//3124 3584//3124 3994//3124 3104//3124 3103//3124 3114//3124 3108//3124
+f 3941//3125 3946//3125 3545//3125 3542//3125 3539//3125 3538//3125 3537//3125 3953//3125 3952//3125 3949//3125
+f 3001//3125 3011//3125 3006//3125 3004//3125 2999//3125
+f 3579//3126 3582//3126 3990//3126 3993//3126 3994//3126 3584//3126
+f 3130//3127 3128//3127 3124//3127 3127//3127 3122//3127 3120//3127 3119//3127
+f 3686//3128 3685//3128 4071//3128 4067//3128 4070//3128 3237//3128 3240//3128 3250//3128 3247//3128 3241//3128 3243//3128 3690//3128 3687//3128
+f 3302//3129 3298//3129 3297//3129 3315//3129 3307//3129 3304//3129 3299//3129
+f 3312//3130 3311//3130 4099//3130 4102//3130 4108//3130 4105//3130 4103//3130 3309//3130 3308//3130 3307//3130 3315//3130
+f 3249//3130 3244//3130 3247//3130 3250//3130
+f 3733//3131 3736//3131 3729//3131 3726//3131 3727//3131 2884//3131 2883//3131 3739//3131
+f 3730//3132 3729//3132 3736//3132
+f 3414//3132 3403//3132 3402//3132 3413//3132
+f 3727//3133 3723//3133 2871//3133 2868//3133 2863//3133 2867//3133 2881//3133 2884//3133
+f 3833//3134 3832//3134 3831//3134 3845//3134 3841//3134 3838//3134
+f 4194//3135 4195//3135 4201//3135 4200//3135 2495//3135 2490//3135 2489//3135
+f 2777//3135 2798//3135 2797//3135 2781//3135 2770//3135
+f 4223//3136 6621//3136 3859//3136 3856//3136 3854//3136 3853//3136
+f 3488//3136 3487//3136 3495//3136 3491//3136 3490//3136 3489//3136
+f 3860//3137 3859//3137 6621//3137 3861//3137
+f 2359//3138 2358//3138 2370//3138 2368//3138 2365//3138 2361//3138
+f 3847//3138 3850//3138 3861//3138 6621//3138 4215//3138 4214//3138
+f 2949//3139 2952//3139 2948//3139 2947//3139 2963//3139 2962//3139 2956//3139
+f 2957//3140 2956//3140 2962//3140 2958//3140
+f 3901//3141 3896//3141 3891//3141 3895//3141 3905//3141 3904//3141
+f 2065//3142 2064//3142 2057//3142 2056//3142 2069//3142 2068//3142
+f 3974//3142 3973//3142 3989//3142 3988//3142 3981//3142 3979//3142
+f 4109//3143 4108//3143 4102//3143 4101//3143
+f 4130//3144 4133//3144 4125//3144 4129//3144 4141//3144 4139//3144 4136//3144
+f 2587//3144 2586//3144 6618//3144 2592//3144 2590//3144
+f 2596//3145 2593//3145 2592//3145 6618//3145
+f 2585//3146 6618//3146 2586//3146
+f 4126//3146 4125//3146 4133//3146
+f 3793//3147 3792//3147 3791//3147
+f 4178//3147 6616//3147 4159//3147 4158//3147
+f 4176//3148 4175//3148 6616//3148 4178//3148
+f 2438//3149 2434//3149 2436//3149 2442//3149 2439//3149
+f 4167//3149 6616//3149 4162//3149
+f 4185//3150 4181//3150 4180//3150 4193//3150
+f 2336//3151 2334//3151 2330//3151 2333//3151 2326//3151 2325//3151
+f 4229//3152 4228//3152 4243//3152 4242//3152 4237//3152 4239//3152 4231//3152
+f 3358//3152 3353//3152 3352//3152 3347//3152 3350//3152 3363//3152
+f 3754//3152 3760//3152 3756//3152 3755//3152
+f 4227//3153 4243//3153 4228//3153
+f 4055//3154 4057//3154 6615//3154 4060//3154
+f 3761//3155 3758//3155 3760//3155 3754//3155 3753//3155 3765//3155
+f 2733//3156 2732//3156 2725//3156 2722//3156 2717//3156 2721//3156 2738//3156 2855//3156 2861//3156 2859//3156
+f 4233//3156 4232//3156 4231//3156 4239//3156
+f 6622//3157 2484//3157 2482//3157 2481//3157
+f 6619//3158 2410//3158 2402//3158 2401//3158
+f 2343//3158 2347//3158 2344//3158 2339//3158
+f 2352//3159 2350//3159 2348//3159 2347//3159 2343//3159 2342//3159
+f 4319//3160 4321//3160 4324//3160
+f 4324//3161 4321//3161 4318//3161 4314//3161 4313//3161 4312//3161 4322//3161
+f 4381//3162 4380//3162 4388//3162 4384//3162
+f 6192//3163 6191//3163 6193//3163
+f 6623//3164 4549//3164 4544//3164 4547//3164
+f 6170//3163 4693//3163 4690//3163 4689//3163 4686//3163 4685//3163 6177//3163 6174//3163
+f 4435//3163 4431//3163 4427//3163 4429//3163 4419//3163 4423//3163 4433//3163
+f 4419//3165 4429//3165 4426//3165 4420//3165
+f 6191//3165 6188//3165 6185//3165 6182//3165 6178//3165 6181//3165 6193//3165
+f 4489//3166 4488//3166 4486//3166 4484//3166 4478//3166 4481//3166
+f 4979//3167 4978//3167 4988//3167 4985//3167 4983//3167
+f 5891//3168 5888//3168 5887//3168
+f 4501//3169 4494//3169 4498//3169 4506//3169 4503//3169
+f 4518//3170 4517//3170 4516//3170 4522//3170
+f 4520//3171 4522//3171 4516//3171 4513//3171 4512//3171 4524//3171
+f 5563//3172 5562//3172 6624//3172 5567//3172
+f 6625//3173 4677//3173 4676//3173
+f 4552//3174 4555//3174 6623//3174 4559//3174 4558//3174
+f 4644//3175 4641//3175 4638//3175 4632//3175 4627//3175 4631//3175
+f 4752//3176 4751//3176 4746//3176 4744//3176 4738//3176 4741//3176
+f 4782//3177 4781//3177 6626//3177 4785//3177
+f 4431//3178 4435//3178 4432//3178
+f 6623//3178 4550//3178 4549//3178
+f 4779//3178 4778//3178 4798//3178 6626//3178 4781//3178
+f 6623//3179 4555//3179 4551//3179 4550//3179
+f 4796//3179 6626//3179 4798//3179 4791//3179
+f 6236//3179 6235//3179 6246//3179 6239//3179 6237//3179
+f 6243//3180 6240//3180 6238//3180 6239//3180 6246//3180
+f 6626//3180 4796//3180 4795//3180
+f 4789//3181 6626//3181 4795//3181 4790//3181
+f 6533//3181 6535//3181 6524//3181 6523//3181 6538//3181
+f 6626//3182 4786//3182 4785//3182
+f 5823//3183 5819//3183 5812//3183 5816//3183 5827//3183 5826//3183 5824//3183
+f 4823//3183 4828//3183 4834//3183 4829//3183
+f 4837//3184 4835//3184 4834//3184 4828//3184 4827//3184 4841//3184
+f 5363//3185 5364//3185 5371//3185 5367//3185 5365//3185
+f 4860//3185 4854//3185 4857//3185 4863//3185
+f 4879//3186 4873//3186 4876//3186 4882//3186
+f 6333//3187 6329//3187 6332//3187 6337//3187 6335//3187 5439//3187 5436//3187 5434//3187 5433//3187 5432//3187 5903//3187 5427//3187 5426//3187
+f 4883//3187 4882//3187 4876//3187 4872//3187 4868//3187 4867//3187
+f 6303//3188 6300//3188 6298//3188 6293//3188 6289//3188 6292//3188
+f 4412//3188 4411//3188 4893//3188 4891//3188 4890//3188 4889//3188 5516//3188 5517//3188 4414//3188
+f 4457//3188 4461//3188 4475//3188 4471//3188 4468//3188 4467//3188
+f 6402//3189 6401//3189 6400//3189 6412//3189 6404//3189
+f 6405//3190 6404//3190 6412//3190 6410//3190 6407//3190
+f 4887//3191 4402//3191 4397//3191 4396//3191 4415//3191 4414//3191 5517//3191 5515//3191 5513//3191 5512//3191 5518//3191
+f 5359//3192 5362//3192 5372//3192 5371//3192 5364//3192
+f 6341//3193 6343//3193 6627//3193 6347//3193 6346//3193
+f 4959//3194 6627//3194 6343//3194 4960//3194
+f 6500//3195 6499//3195 6628//3195 6502//3195
+f 4953//3195 4950//3195 4949//3195 6627//3195
+f 4954//3196 4953//3196 6627//3196 4956//3196
+f 6011//3197 6009//3197 6008//3197 6006//3197 6005//3197 6015//3197
+f 5157//3198 5159//3198 5155//3198 5154//3198 5163//3198 5162//3198
+f 5155//3199 5159//3199 5156//3199
+f 6098//3200 6114//3200 6099//3200
+f 5209//3201 4711//3201 4707//3201 4704//3201 4703//3201 4716//3201 4712//3201 4715//3201 5218//3201 5217//3201 5215//3201 5213//3201
+f 5189//3202 5194//3202 5201//3202 5197//3202 5195//3202
+f 6095//3203 6099//3203 6114//3203 6112//3203 6110//3203 6109//3203 6227//3203 6229//3203 6220//3203 6103//3203
+f 5717//3204 6629//3204 5720//3204 5715//3204
+f 5259//3205 5258//3205 5271//3205 5266//3205 5268//3205 5263//3205
+f 5260//3206 5263//3206 5268//3206 5265//3206
+f 5355//3207 5354//3207 5348//3207 5347//3207 5356//3207
+f 5810//3207 5809//3207 5806//3207 5804//3207 5803//3207 5801//3207 5800//3207
+f 5772//3208 5771//3208 5290//3208 5293//3208 5302//3208 5778//3208 5775//3208
+f 4768//3209 4767//3209 4774//3209 4771//3209 4770//3209
+f 5251//3210 5250//3210 5246//3210 5244//3210 5240//3210 5243//3210 5254//3210
+f 5343//3211 5348//3211 5354//3211 5353//3211 6271//3211 6269//3211 6267//3211 6266//3211 5349//3211
+f 4647//3212 4650//3212 4658//3212 4657//3212 4655//3212 4651//3212
+f 5247//3212 5246//3212 5250//3212
+f 6624//3213 5564//3213 5567//3213
+f 6324//3214 6323//3214 6322//3214 6328//3214 6327//3214 6325//3214
+f 5420//3214 5416//3214 5419//3214 5412//3214 5409//3214 5408//3214
+f 5867//3214 5871//3214 5892//3214 5877//3214 5872//3214
+f 5568//3215 6624//3215 5569//3215
+f 4938//3215 4941//3215 4922//3215 4921//3215
+f 5551//3215 5549//3215 5548//3215 5545//3215 5543//3215 5542//3215
+f 6421//3215 6630//3215 6424//3215 6422//3215 6420//3215
+f 5891//3216 5887//3216 5881//3216 5878//3216 5877//3216 5892//3216
+f 5564//3217 6624//3217 5568//3217 5565//3217
+f 4914//3217 4922//3217 4941//3217 4937//3217 4930//3217 4923//3217
+f 5414//3218 5413//3218 5412//3218 5419//3218
+f 5461//3219 5457//3219 5456//3219 5447//3219 5451//3219
+f 6362//3220 6361//3220 6370//3220 6369//3220 6363//3220
+f 5945//3220 5939//3220 5944//3220 5948//3220
+f 4999//3221 4998//3221 5009//3221 5480//3221 5484//3221 5494//3221 5488//3221 5487//3221 6380//3221 6379//3221 6378//3221 5008//3221 5006//3221 5001//3221
+f 5957//3221 5956//3221 5974//3221 5965//3221 5962//3221
+f 5973//3222 5966//3222 5965//3222 5974//3222
+f 5970//3223 5967//3223 5963//3223 5966//3223 5973//3223
+f 6428//3224 6630//3224 6417//3224 6416//3224
+f 5582//3225 5572//3225 5578//3225 5591//3225 5587//3225 5583//3225
+f 6448//3225 6447//3225 6446//3225 6445//3225 6450//3225
+f 6493//3225 6495//3225 6628//3225 6499//3225 6497//3225
+f 6460//3226 6455//3226 6454//3226 5599//3226 5598//3226 5611//3226 5607//3226 5606//3226 6466//3226
+f 5935//3226 5937//3226 6354//3226 6352//3226 6351//3226 5922//3226 5925//3226
+f 6562//3227 6566//3227 6580//3227 6577//3227 6573//3227 6571//3227
+f 6539//3227 5593//3227 5599//3227 6454//3227 6451//3227 6453//3227 6540//3227
+f 4819//3228 4818//3228 6461//3228 6460//3228 6466//3228 6462//3228 4822//3228
+f 5929//3228 5928//3228 6358//3228 6355//3228 6354//3228 5937//3228 5933//3228
+f 6630//3228 6418//3228 6417//3228
+f 4815//3229 4814//3229 4804//3229 4803//3229 6461//3229 4818//3229
+f 6624//3229 5557//3229 5556//3229 5570//3229 5569//3229
+f 6419//3229 6418//3229 6630//3229 6421//3229
+f 5380//3229 5379//3229 5373//3229 5377//3229 5383//3229 5381//3229
+f 4610//3230 4609//3230 4608//3230 4625//3230 5784//3230 5783//3230 6586//3230 6631//3230 5790//3230 4618//3230 4616//3230 4613//3230
+f 5794//3231 5791//3231 5790//3231 6631//3231 6589//3231 6588//3231 5796//3231
+f 5911//3231 5908//3231 5907//3231 5921//3231
+f 4746//3232 4751//3232 4749//3232 4747//3232
+f 5277//3232 5276//3232 6631//3232 6582//3232 5278//3232
+f 5275//3233 5289//3233 6631//3233 5276//3233
+f 6384//3233 6396//3233 6385//3233 5763//3233 5766//3233 5760//3233 5758//3233 5757//3233 5756//3233 5768//3233 6381//3233
+f 5759//3234 5760//3234 5766//3234 5761//3234
+f 5282//3234 6589//3234 6631//3234 5289//3234 5284//3234 5283//3234
+f 6386//3234 6385//3234 6396//3234 6394//3234 6392//3234 6389//3234
+f 5806//3235 5809//3235 5807//3235
+f 5337//3236 5334//3237 5319//3238 5323//3239 5309//3240 5308//3238 5324//3238 5326//3238 5330//3238 5341//3238 5338//3238
+f 5311//3241 5310//3241 5317//3241 5315//3241 5313//3241
+f 5722//3242 5721//3242 6629//3242 5728//3242 5726//3242
+f 5846//3242 5845//3242 5852//3242 5850//3242 5849//3242
+f 5238//3243 5237//3243 5239//3243
+f 5837//3244 5840//3244 5852//3244 5845//3244 5842//3244
+f 6629//3244 5713//3244 5712//3244 5728//3244
+f 5393//3245 5392//3245 5388//3245 5387//3245 5402//3245 5397//3245 5394//3245
+f 5859//3245 5858//3245 5853//3245 5857//3245 5861//3245
+f 6308//3245 6306//3245 6307//3245 6320//3245 6319//3245 6312//3245
+f 6313//3246 6312//3246 6319//3246 6318//3246
+f 6310//3247 6313//3247 6318//3247 6314//3247
+f 5389//3248 5388//3248 5392//3248
+f 5920//3249 5915//3249 5917//3249 5912//3249 5911//3249 5921//3249
+f 5909//3250 5912//3250 5917//3250 5914//3250
+f 5163//3250 5154//3250 5152//3250 5151//3250 5164//3250
+f 6550//3251 6552//3251 6559//3251 6557//3251 6555//3251
+f 5496//3251 5498//3251 5509//3251 5508//3251 5503//3251 5500//3251 5499//3251
+f 4451//3251 4450//3251 5986//3251 5985//3251 5984//3251 5976//3251 4447//3251 4446//3251 4444//3251 4437//3251 4441//3251 4454//3251
+f 5504//3252 5503//3252 5508//3252
+f 5977//3253 5976//3253 5984//3253 5981//3253 5979//3253
+f 4445//3253 4444//3253 4446//3253
+f 4961//3254 4964//3254 4976//3254 4968//3254
+f 4912//3254 4910//3254 4909//3254 4904//3254 4901//3254 4903//3254
+f 4900//3255 4913//3255 4912//3255 4903//3255 4896//3255
+f 4976//3256 4975//3256 4971//3256 4970//3256 4965//3256 4968//3256
+f 6501//3256 6503//3256 6628//3256 6504//3256
+f 5183//3256 5182//3256 5171//3256 5167//3256 5170//3256 5186//3256
+f 4905//3257 4904//3257 4909//3257
+f 6018//3256 6022//3256 6030//3256 6028//3256 6026//3256 6025//3256
+f 6035//3258 6032//3258 6031//3258 5089//3258 5088//3258 6042//3258 6044//3258
+f 6248//3258 6247//3258 6262//3258 6258//3258 6257//3258 6254//3258
+f 6431//3259 5641//3259 5636//3259 5640//3259 5653//3259 5652//3259 6436//3259 6434//3259 6433//3259 5093//3259 5090//3259 5089//3259 6031//3259 5084//3259 5083//3259 5082//3259 5094//3259
+f 6260//3259 6262//3259 6247//3259 6251//3259
+f 6038//3260 6041//3260 6036//3260 6035//3260 6044//3260
+f 6037//3261 6036//3261 6041//3261
+f 6477//3262 6475//3262 6474//3262 6473//3262 6470//3262 6469//3262
+f 6151//3262 6150//3262 6149//3262 6632//3262 6084//3262 6074//3262 6079//3262
+f 6167//3263 6632//3263 5699//3263 5691//3263 5695//3263 5711//3263 5706//3263 5705//3263
+f 5709//3264 5707//3264 5706//3264 5711//3264
+f 6632//3264 6167//3264 6166//3264
+f 6160//3265 6165//3265 6632//3265 6166//3265
+f 6165//3266 6164//3266 6632//3266
+f 6156//3267 6092//3267 6089//3267 6087//3267 6085//3267 6080//3267 6084//3267 6632//3267 6164//3267
+f 5013//3268 5012//3268 5028//3268 5016//3268
+f 6203//3269 6206//3269 6217//3269 6207//3269
+f 5661//3270 5660//3270 5665//3270
+f 6210//3271 6208//3271 6207//3271 6217//3271 6214//3271 6213//3271
+f 5014//3271 5016//3271 5028//3271 5023//3271 5022//3271 5017//3271
+f 4990//3271 4977//3271 4982//3271 4991//3271
+f 6281//3272 6280//3272 6277//3272 6276//3272 6286//3272 6283//3272
+f 5900//3273 5897//3273 5896//3273 5903//3273 5432//3273 5431//3273 5901//3273
+f 5472//3274 5469//3274 5463//3274 5465//3274 5948//3274 5944//3274 5943//3274 5953//3274 5950//3274 5479//3274 5476//3274 5475//3274
+f 6374//3274 6375//3274 6371//3274 6370//3274 6361//3274 6360//3274
+f 5954//3275 5953//3275 5943//3275 5942//3275
+f 6518//3276 6511//3276 6509//3276 6508//3276 6519//3276
+f 2083//3277 2085//3277 2070//3277 2075//3277 2089//3277 2086//3277
+f 4010//3278 4009//3278 4019//3278 4016//3278
+f 4329//3278 4328//3278 4333//3278 4332//3278
+f 2169//3279 2171//3279 2182//3279 2176//3279 2175//3279
+f 3695//3280 3691//3280 3694//3280 3699//3280 3698//3280 3259//3280 3255//3280 3254//3280 2699//3280 2698//3280
+f 2196//3280 2192//3280 2191//3280 2189//3280 2188//3280 2197//3280
+f 2270//3281 2267//3281 2262//3281 2266//3281 2275//3281 2274//3281 2272//3281
+f 4363//3282 4365//3282 4368//3282 4367//3282
+f 2203//3283 2220//3283 2204//3283
+f 2309//3284 2312//3284 2314//3284
+f 2357//3285 2356//3285 2370//3285 2358//3285
+f 2469//3286 2472//3286 2483//3286 6622//3286 2475//3286 2473//3286
+f 4066//3287 4061//3287 4065//3060 6615//3059
+f 2211//3288 2205//3288 2200//3288 2204//3288 2220//3288 2219//3288 2216//3288
+f 2509//3289 2504//3289 2496//3289 2493//3289 2492//3289
+f 2795//3290 2786//3290 2785//3290
+f 2614//3291 2603//3291 2602//3291
+f 3595//3292 3594//3292 3590//3292 3593//3292 3600//3292 3597//3292
+f 4034//3293 4036//3293 4039//3293
+f 2942//3294 2938//3294 2940//3294 2937//3294 2932//3294 2927//3294 2931//3294
+f 6615//3295 4048//3295 4047//3295 4066//3295
+f 3506//3296 3503//3296 3505//3296 3511//3296 3508//3296
+f 3229//3297 3226//3297 3222//3297 3216//3297 3220//3297 3232//3297
+f 3030//3103 3024//3298 3023//3298 3020//3298 3015//3298 3014//3104
+f 4261//3298 4259//3298 4256//3298 4257//3298 4269//3298 4268//3298 4263//3298
+f 3139//3299 3138//3299 6620//3299 3143//3299
+f 3144//3300 3148//3300 6620//3300 3151//3300
+f 3870//3301 3873//3301 3866//3301
+f 4075//3302 4074//3302 4084//3302 4080//3302 4082//3302 4076//3302
+f 2233//3303 2232//3303 2242//3303 2240//3303 2236//3303
+f 3696//3304 2705//3304 2703//3304 2702//3304 2701//3304 2700//3304 3260//3304 3256//3304 3259//3304 3698//3304
+f 2243//3304 2242//3304 2232//3304 2223//3304 2228//3304
+f 2706//3305 2711//3305 2713//3305
+f 2693//3305 2690//3305 2687//3305 2686//3305 2685//3305 3687//3305 3690//3305 3689//3305 2695//3305
+f 3632//3306 3631//3306 3640//3306 3638//3306 3635//3306
+f 2562//3307 2568//3307 2563//3307
+f 3774//3308 3773//3308 6617//3308 3778//3308 3777//3308 3776//3308
+f 2844//3308 2848//3308 2851//3308
+f 3375//3308 6614//3308 3369//3308
+f 3370//3309 3369//3309 6614//3309 3379//3309
+f 2280//3310 2281//3310 2284//3310 2283//3310
+f 4252//3310 4250//3310 4249//3310 4254//3310
+f 3451//3310 3440//3310 3439//3310
+f 3451//3311 3450//3311 3446//3311 3443//3311 3441//3311 3432//3311 3440//3311
+f 3525//3312 3523//3312 3522//3312 3517//3312 3519//3312 3530//3312
+f 3933//3313 3932//3313 3938//3313 3934//3313
+f 4048//3313 6615//3313 4053//3313 4049//3313
+f 3423//3314 3431//3314 3426//3314 3420//3314
+f 4053//3314 6615//3314 4054//3314
+f 4216//3315 4215//3315 6621//3315 4221//3315 4218//3315
+f 6621//3316 4223//3316 4222//3316 4221//3316
+f 3012//3316 2997//3316 2996//3316 3007//3316
+f 3111//3316 3114//3316 3103//3316 3102//3316
+f 3982//3317 3981//3317 3988//3317 3985//3317
+f 3123//3318 3122//3318 3127//3318
+f 3627//3319 3626//3319 3641//3319 3640//3319 3631//3319
+f 4263//3319 4268//3319 4264//3319
+f 3999//3320 3995//3320 3998//3320 4008//3320 4003//3320 4002//3320
+f 4356//3320 4354//3320 3655//3320 3648//3320 3654//3320 4352//3320 4351//3320
+f 4353//3321 4348//3321 4352//3321 3654//3321 3646//3321 3644//3321 2159//3321 2157//3321 2156//3321 2154//3321 2153//3321 2163//3321 3643//3321
+f 3874//3322 3873//3322 3870//3322 3862//3322 3865//3322 3879//3322 3875//3322
+f 4187//3322 4182//3322 4185//3322 4193//3322 4192//3322 4189//3322
+f 4189//3323 4192//3323 4191//3323 4190//3323
+f 2948//3323 2952//3323 2943//3323
+f 3876//3323 3875//3323 3879//3323 3877//3323
+f 3799//3324 3798//3324 3797//3324 3818//3324 3816//3324 3809//3324 3803//3324
+f 3817//3325 3816//3325 3818//3325
+f 4373//3325 4379//3325 4377//3325 4374//3325
+f 4389//3326 4388//3326 4380//3326 4379//3326 4373//3326 4372//3326
+f 4117//3326 4111//3326 4110//3326 4122//3326 4120//3326
+f 2410//3327 6619//3327 2413//3327 2411//3327
+f 4198//3328 2508//3328 2509//3328 2492//3328 2495//3328 4200//3328
+f 2781//3328 2797//3328 2792//3328 2795//3328 2785//3328 2778//3328
+f 2479//3329 2476//3329 2475//3329 6622//3329 2481//3329
+f 4042//3330 4040//3330 4039//3330 4036//3330 4032//3330 4031//3330 4030//3330
+f 2585//3331 2584//3331 6618//3331
+f 2443//3332 2442//3332 2436//3332 2433//3332 2432//3332
+f 3785//3332 3784//3332 3780//3332 3783//3332 3793//3332 3791//3332 3787//3332
+f 4161//3332 4157//3332 4159//3332 6616//3332 4167//3332
+f 3393//3332 3390//3332 3389//3332 3387//3332 3386//3332 3396//3332
+f 3429//3333 3428//3333 3424//3333 3426//3333 3431//3333 3430//3333 2420//3333 2414//3333 2418//3333 2429//3333 2426//3333 2424//3333 2423//3333
+f 4050//3333 4054//3333 6615//3333 4057//3333
+f 2484//3334 6622//3334 2483//3334
+f 6619//3335 2401//3335 2400//3335
+f 3418//3335 3417//3335 3416//3335 3415//3335 3828//3335 3419//3335
+f 2893//3335 2892//3335 2908//3335 2904//3335 2903//3335 2898//3335
+f 4669//3336 4665//3336 4668//3336 6625//3336 4675//3336 4672//3336
+f 4546//3336 6623//3336 4547//3336
+f 6175//3336 6177//3336 4685//3336 4684//3336 4697//3336 4696//3336 6169//3336
+f 5741//3337 5737//3337 5736//3337 5734//3337 5733//3337 5742//3337
+f 4508//3338 4504//3338 4506//3338 4498//3338 4497//3338
+f 5454//3338 5452//3338 5448//3338 5447//3338 5456//3338
+f 4675//3339 6625//3339 4676//3339
+f 4546//3339 4543//3339 4542//3339 4559//3339 6623//3339
+f 4572//3340 4571//3340 4563//3340 4562//3340 4573//3340
+f 5136//3341 5133//3341 5132//3341 4564//3341 4563//3341 4571//3341 4569//3341 4568//3341 5137//3341
+f 5138//3342 5147//3342 5146//3342 5142//3342 5141//3342 5139//3342
+f 4599//3342 4592//3342 4587//3342 4584//3342 4576//3342 4579//3342
+f 5628//3342 5629//3342 5635//3342 5632//3342 5631//3342 5630//3342
+f 4664//3343 4663//3343 4681//3343 6625//3343 4668//3343
+f 4783//3344 4786//3344 6626//3344 4789//3344
+f 6525//3345 6524//3345 6535//3345 6530//3345 6528//3345
+f 5819//3346 5823//3346 5817//3346
+f 5830//3347 5829//3347 5828//3347 5836//3347 5833//3347 5831//3347
+f 4849//3348 4847//3348 4846//3348 4863//3348 4857//3348 4850//3348
+f 5119//3349 5114//3349 5118//3349 5129//3349 5126//3349 5121//3349
+f 5048//3349 5047//3349 5053//3349 5051//3349
+f 5054//3350 5053//3350 5047//3350 5046//3350 5061//3350 5059//3350
+f 6628//3351 6503//3351 6502//3351
+f 5068//3351 5062//3351 5066//3351 5076//3351 5074//3351 5073//3351
+f 4949//3351 4944//3351 4947//3351 5440//3351 5443//3351 5446//3351 6627//3351
+f 4720//3351 4719//3351 4731//3351 4726//3351
+f 6198//3352 6197//3352 6195//3352 4733//3352 4732//3352 4731//3352 4719//3352 4723//3352 5744//3352 5747//3352 5753//3352 5748//3352 4737//3352 4736//3352 6194//3352 6200//3352
+f 6347//3352 6627//3352 5446//3352 5445//3352 6340//3352
+f 4959//3353 4957//3353 4956//3353 6627//3353
+f 6015//3354 6005//3354 6004//3354 6016//3354
+f 5204//3355 5206//3355 5202//3355
+f 5627//3356 5625//3356 5622//3356 5621//3356 5620//3356
+f 5206//3357 5204//3357 5199//3357 5201//3357 5194//3357 5193//3357
+f 6367//3358 6371//3358 6375//3358 6372//3358
+f 5220//3358 5223//3358 5239//3358 5237//3358 5234//3358 5231//3358 5224//3358
+f 5714//3358 5713//3358 6629//3358 5717//3358
+f 5527//3359 5534//3359 5533//3359 5528//3359
+f 5536//3360 5531//3360 5534//3360 5527//3360 5524//3360 5523//3360
+f 6629//3361 5721//3361 5718//3361 5720//3361
+f 5295//3362 5294//3362 5776//3362 5778//3362 5302//3362 5298//3362 5296//3362 4757//3362 4756//3362 4774//3362 4767//3362 4762//3362 4761//3362
+f 6364//3363 6363//3363 6369//3363
+f 6449//3364 6450//3364 6445//3364 6442//3364 6441//3364
+f 6492//3364 5175//3364 5172//3364 5171//3364 5182//3364 5181//3364 6504//3364 6628//3364 6495//3364
+f 4526//3365 4529//3365 4537//3365 4536//3365 4533//3365 4531//3365
+f 4812//3366 4809//3366 4805//3366 4804//3366 4814//3366
+f 5558//3365 5557//3365 6624//3365 5562//3365 5560//3365
+f 5617//3367 5612//3367 5615//3367 5627//3367 5620//3367
+f 6511//3367 6518//3367 6517//3367 6514//3367 6512//3367
+f 5105//3368 5104//3368 6054//3368 6052//3368 6050//3368 6049//3368 6046//3368 5102//3368 5099//3368 5095//3368 5098//3368 5112//3368
+f 6130//3368 6129//3368 6128//3368 6138//3368 6134//3368 6131//3368
+f 6135//3369 6132//3369 6134//3369 6138//3369
+f 5665//3370 5660//3370 5659//3370 5658//3370 5669//3370 5667//3370 5666//3370
+f 5686//3371 5683//3371 5685//3371 5677//3371 5676//3371
+f 5735//3371 5729//3371 5734//3371 5736//3371
+f 5679//3372 5682//3372 6145//3372 6144//3372 6139//3372 6142//3372 5678//3372 5677//3372 5685//3372
+f 6123//3373 6122//3373 6120//3373 6115//3373 6119//3373 6125//3373
+f 6583//3373 6582//3373 6631//3373 6586//3373
+f 6481//3374 6480//3374 6490//3374 6489//3374 6485//3374 6482//3374
+f 5317//3375 5310//3375 5309//3240 5323//3239 5318//3375
+f 5335//3376 5334//3237 5337//3236
+f 5862//3377 5861//3377 5857//3377 5856//3377 5866//3377
+f 5995//3377 5994//3377 5993//3377 5992//3377 6001//3377 5999//3377 5997//3377
+f 5041//3377 5039//3377 5036//3377 5034//3377 5033//3377 5042//3377
+f 5696//3378 5699//3378 6632//3378 6149//3378 6148//3378 5700//3378
+f 4977//3379 4990//3379 4986//3379 4988//3379 4978//3379
+f 6221//3380 6220//3380 6229//3380 6226//3380 6224//3380
+f 6068//3381 6065//3381 6061//3381 6056//3381 6060//3381 6072//3381
+f 5992//3382 5991//3382 6001//3382
+f 4678//3383 4677//3383 6625//3383 4681//3383
+f 6428//3384 6427//3384 6425//3384 6424//3384 6630//3384
+f 6560//3385 6559//3385 6552//3385 6546//3385 6549//3385
+o Land
+v -45.500000 -51.999996 -0.614933
+v -52.000008 -43.875008 0.054960
+v -51.999996 -48.750008 -0.171865
+v -39.000004 -47.125004 -0.303752
+v -43.875004 -43.875004 0.086369
+v -30.875000 -47.125000 0.372201
+v -35.750000 -43.875000 0.370599
+v -35.750000 -51.999996 0.791199
+v -25.999998 -51.999996 -0.000004
+v -21.125004 -43.875008 -0.179602
+v -26.000000 -43.875000 -0.200138
+v -21.125006 -52.000008 -0.586572
+v -14.625000 -45.500004 -0.401823
+v 0.000000 -52.000008 -0.000006
+v 4.875001 -43.875008 0.973670
+v 0.000000 -43.875004 0.770613
+v 6.499997 -51.999996 0.279277
+v 9.750002 -47.125008 1.577121
+v 25.999998 -51.999996 -0.000005
+v 24.375000 -45.500000 0.372793
+v 21.125006 -52.000008 -1.002032
+v 30.875000 -47.125004 0.302964
+v 40.625008 -52.000008 0.314043
+v 37.375004 -44.687504 0.177681
+v 35.750000 -51.999996 0.124166
+v 43.875000 -43.875000 0.558622
+v 45.500000 -51.999996 0.370568
+v 52.000008 -43.875008 -0.706337
+v -38.187508 -38.593758 -0.108052
+v -30.875000 -40.625004 0.014731
+v -4.875000 -43.875004 -0.379399
+v -11.375002 -40.625008 -0.005980
+v 14.625000 -47.125000 0.678846
+v 8.937501 -40.625004 0.410943
+v 21.125002 -40.625008 0.299901
+v 14.625000 -42.250000 1.078521
+v 19.500002 -45.500008 0.603011
+v 34.125000 -40.625008 -0.012631
+v -51.999996 -39.000008 -0.000007
+v -43.875004 -37.375000 -0.021706
+v -17.875004 -38.187508 -0.278367
+v -25.187502 -37.375000 0.049952
+v 1.625000 -37.375000 0.489066
+v -5.687500 -36.156250 -0.182069
+v 14.625003 -37.375008 0.570033
+v 45.500004 -37.375004 0.000785
+v -52.000008 -35.750008 0.271274
+v -30.875000 -34.937500 -1.024884
+v -20.312504 -34.125004 -0.461722
+v -11.375002 -35.750008 -0.005520
+v 8.124999 -34.937500 0.148099
+v 27.625000 -40.625004 0.357348
+v 30.875000 -34.125004 -1.208324
+v 24.375000 -34.125000 -0.405117
+v 40.625000 -37.375000 -0.315991
+v 35.750000 -34.125000 -0.590644
+v -45.500008 -32.500008 -0.259586
+v -51.999996 -32.500000 0.012509
+v -13.000000 -31.281254 -0.332978
+v -3.250000 -30.468756 0.578434
+v 4.062500 -30.875000 -0.305653
+v 19.500000 -34.125004 0.133790
+v 13.000000 -31.281254 -0.529387
+v 43.875004 -32.500000 -0.210261
+v 52.000008 -35.750004 0.093076
+v -52.000008 -27.625004 -0.058660
+v -40.625004 -32.500000 -0.774595
+v -43.875000 -27.625000 -0.245506
+v -34.125000 -30.875006 -0.586255
+v -39.000000 -27.625000 -0.268164
+v -24.375002 -30.875000 -0.880570
+v -29.250004 -29.250004 -0.602885
+v 17.062500 -26.000000 0.701845
+v 25.593752 -28.437500 -0.313394
+v 35.750000 -27.625000 0.118925
+v 39.000008 -30.875000 -0.357405
+v 45.500000 -28.031250 -0.342729
+v -52.000000 -26.000006 -0.000004
+v -34.531250 -22.750004 -0.727975
+v -29.250000 -24.375000 0.119365
+v -17.875002 -29.250004 0.502991
+v -24.375004 -24.375000 -0.045003
+v -17.468750 -24.375000 1.053528
+v -9.749999 -26.000004 -0.334142
+v 1.625001 -24.375002 -0.596920
+v 8.125001 -24.375004 -0.748141
+v -39.812508 -21.125000 0.056294
+v -11.375000 -21.125004 0.721835
+v -4.875000 -24.375002 0.560003
+v 21.125000 -21.125002 0.257298
+v 30.875000 -24.375000 0.471752
+v 26.812500 -21.125000 -0.181260
+v 40.625008 -21.125002 -0.146929
+v 47.125008 -20.312504 -1.184124
+v 52.000000 -24.374998 0.156510
+v -45.500004 -22.750004 0.073018
+v -52.000000 -16.397728 -0.105301
+v -30.875000 -17.875000 -0.350930
+v -24.375000 -17.468752 -0.694210
+v -17.875002 -17.875000 0.388251
+v 1.625000 -17.875004 0.025630
+v -6.093750 -17.062502 0.511108
+v 11.375000 -18.281252 -0.730525
+v 6.500001 -17.875000 -0.074157
+v 16.250000 -17.875000 -0.112608
+v 34.125004 -18.281252 0.764972
+v -37.375000 -16.249998 0.104063
+v -13.812502 -14.625000 -0.269572
+v 27.625000 -14.625002 -0.074934
+v 21.125000 -14.625000 -0.810850
+v 40.625008 -15.437503 -0.440936
+v -43.875000 -11.375000 0.104519
+v -45.093758 -17.062500 -0.091318
+v -30.875000 -11.375000 0.167431
+v -37.375000 -11.375000 -0.048270
+v -21.125000 -11.374999 -0.339523
+v -4.875000 -11.375002 0.272932
+v -9.750000 -11.374998 -0.018262
+v 2.031250 -11.375002 -0.455625
+v 16.250000 -11.375002 -0.173453
+v 11.375000 -11.375002 0.193009
+v 34.125000 -11.375000 1.454944
+v -25.187500 -7.718750 0.745207
+v -15.031250 -8.125000 -1.039942
+v 6.500001 -8.125000 0.150300
+v 27.625000 -9.750001 0.144455
+v 21.125002 -9.750000 -0.460371
+v 45.093754 -10.562501 -0.288220
+v 37.375000 -7.312500 -0.084199
+v -48.750000 -6.500000 0.187513
+v -51.999996 -12.999997 -0.000004
+v -43.875004 -4.875000 0.033656
+v -32.093754 -5.687501 0.031433
+v 4.468750 -2.234375 0.473515
+v 11.375000 -4.875000 0.912873
+v 30.062500 -4.875001 -0.344996
+v 24.375000 -4.875000 0.818270
+v 52.000000 -9.750002 0.403505
+v 43.875008 -4.875000 -0.273551
+v -52.000000 0.000000 0.000000
+v -36.968750 -1.625000 -0.340262
+v -39.000004 -6.500000 0.012513
+v -14.625003 -3.250001 -0.067411
+v -22.343754 -0.812500 0.438535
+v -8.125002 -6.500000 -1.249810
+v -1.625000 -6.500000 0.212048
+v -4.874999 -1.218750 -1.157613
+v 36.968750 -1.625001 -0.047700
+v -43.875008 1.625001 0.122494
+v -29.250006 -0.000001 -0.399639
+v -9.750001 -1.624999 -0.529982
+v -14.625003 1.624999 0.299809
+v 16.250002 -0.000002 -0.005871
+v 11.375002 -0.000002 0.063338
+v 24.984375 2.843749 0.040700
+v 30.875006 -0.000001 -1.536395
+v 52.000000 0.000000 0.000000
+v 43.875008 1.624999 0.133114
+v -51.999996 3.249997 -0.649985
+v -30.875000 4.875000 -0.196118
+v -19.500000 4.874999 0.728666
+v -8.124999 6.500001 0.341525
+v 17.875004 4.875000 0.080090
+v 9.750000 4.468750 -0.235460
+v 30.875000 4.875001 -0.371187
+v 37.375000 4.875001 0.276180
+v -52.000008 8.125002 0.153064
+v -37.375000 4.875002 -0.348155
+v -43.875004 6.500001 -0.096617
+v -15.437500 8.125000 0.418820
+v -1.625001 4.874999 -0.362543
+v 48.750008 3.250001 -0.207071
+v 43.875004 6.500000 0.202367
+v -35.750004 11.375002 -0.492869
+v -40.625004 11.375001 0.060413
+v -30.875000 11.374998 -0.291476
+v -24.375004 9.750000 0.068561
+v -24.375000 4.875001 0.811312
+v -19.500004 11.375002 -0.084847
+v -10.562500 11.374999 0.873314
+v 4.062500 6.906250 -0.359620
+v -1.624998 9.749998 0.529188
+v 21.125002 8.937501 -0.342159
+v 14.218750 13.000000 -0.000990
+v 26.812500 12.593749 -0.022003
+v 34.125000 11.375002 -0.016830
+v 40.625004 11.375000 0.395216
+v 45.500004 14.625000 -0.575324
+v 48.750008 8.125002 0.171281
+v -24.375000 14.625000 -0.216276
+v 1.625001 14.625000 -0.590961
+v 21.125000 14.625000 -0.401372
+v -39.000000 16.250000 0.242710
+v -43.468750 19.500000 0.415241
+v -29.250000 20.312500 -1.030489
+v -13.812502 14.625000 0.157591
+v -19.500000 18.281250 -0.911248
+v -4.875001 13.000000 1.030346
+v -8.125000 17.875000 0.713420
+v -3.250001 17.875002 0.341833
+v 17.062500 19.906250 0.059654
+v 34.125000 16.249996 -0.689055
+v 29.250000 17.875002 -0.687578
+v 40.625000 19.499998 -0.992783
+v -34.125000 16.250000 0.007468
+v -37.375000 21.125000 0.644363
+v -11.375001 22.750002 -0.447870
+v 6.500000 21.125000 -0.235567
+v 1.625000 21.125004 0.218590
+v 11.375001 21.125004 -0.050142
+v 8.531251 13.000000 0.081400
+v 24.375002 20.312504 -0.701679
+v 34.125000 21.125002 -0.451716
+v 47.125008 19.500002 -0.445400
+v -17.875004 22.750000 0.348315
+v -24.375002 24.375002 -0.341304
+v -4.875001 24.375002 -0.480032
+v 29.250000 24.375000 0.098432
+v -43.875008 27.625000 0.289985
+v -47.125008 22.750004 0.741983
+v -39.000000 27.625000 -0.424467
+v -29.250000 27.625000 -0.261093
+v -34.125000 27.625000 -0.416705
+v -14.625000 27.625000 0.060656
+v 4.875001 26.000000 0.007910
+v 9.750002 26.000000 0.216953
+v 16.656250 26.812500 0.009017
+v 25.593750 28.234375 0.244453
+v 39.000004 24.374998 -0.376630
+v 34.125000 26.812500 -0.399941
+v -19.500000 27.625000 -0.086975
+v -24.375002 29.250000 0.177554
+v -10.968750 32.500000 0.448720
+v -0.000001 27.625000 0.089650
+v -4.875000 29.250004 -0.007388
+v 11.375000 30.875000 0.012354
+v 4.875001 30.875000 -1.256353
+v 34.531250 32.500000 0.431515
+v 46.718758 24.375000 -0.769736
+v 40.625008 30.875000 0.644487
+v 46.312500 30.875000 0.183960
+v -47.125000 34.125000 -1.097996
+v -52.000000 29.250004 0.439636
+v -40.625000 34.125000 -0.104502
+v -34.125000 34.125000 -0.082943
+v -27.625000 34.125000 -0.177832
+v -17.875000 34.531250 0.427517
+v -22.750000 34.125000 0.539100
+v -1.625000 34.125000 -1.287874
+v -6.500003 34.125000 0.051822
+v 17.875002 34.125000 0.193342
+v 29.250000 34.125000 0.294090
+v 24.375000 34.125000 0.702717
+v 12.999998 35.750000 -0.170961
+v 6.093751 36.562500 -1.294542
+v 39.000000 37.375000 0.651018
+v 52.000008 34.124996 0.271071
+v 45.500004 37.375004 0.949136
+v -42.656254 39.812504 -0.262422
+v -52.000000 42.250008 0.481716
+v -35.750000 39.000000 -0.448039
+v -28.843750 40.015633 -0.494760
+v -4.875001 39.000004 0.431514
+v -11.375001 39.812508 0.524040
+v 0.000000 39.000000 0.000004
+v 11.375002 40.625004 -0.206536
+v 24.781250 42.250000 0.159883
+v 30.875000 39.812504 -0.203761
+v 43.062504 42.656254 0.186037
+v -34.125000 43.875000 -0.666983
+v -39.000000 43.875000 -0.317274
+v -21.125000 43.875004 0.443280
+v -21.125004 39.000008 0.277590
+v -16.250000 42.250008 -0.744044
+v -1.625000 43.875004 0.466695
+v 4.875000 43.875004 0.626991
+v 21.125000 39.000004 0.122309
+v 17.875000 43.875008 0.993016
+v 16.250004 39.000004 0.131159
+v 37.375000 43.875000 -0.781830
+v 51.999996 39.000004 0.000004
+v -43.875000 47.125000 -0.230965
+v -8.124999 43.875000 -0.023499
+v -13.000002 47.531254 -0.155538
+v 11.375000 46.312500 0.848139
+v 30.875000 44.687504 -0.029653
+v -52.000000 52.000000 0.000004
+v -34.124996 52.000008 -0.244909
+v -39.000004 51.999996 0.000004
+v -27.625000 47.937508 0.952216
+v -21.125004 48.750008 1.076026
+v -4.875001 48.750004 -0.858590
+v -0.812499 52.000008 -0.156766
+v 9.750002 52.000000 -0.167972
+v 17.875002 48.750008 0.205388
+v 27.625004 52.000008 0.115112
+v 32.500000 51.999996 0.107797
+v 39.000004 51.999996 0.000004
+v 35.750004 52.000008 0.241054
+v 52.000000 42.397736 -0.561429
+v 43.875008 52.000008 -0.541308
+v -52.000000 -52.000008 -0.000003
+v -40.625008 -52.000008 -0.603481
+v -30.875010 -52.000008 0.811088
+v 16.249996 -52.000000 -0.484148
+v 11.375006 -52.000008 -0.038105
+v 30.875010 -52.000008 0.592932
+v 52.000000 -32.500000 0.766970
+v 52.000008 -27.625004 0.049010
+v 52.000000 -16.249996 -1.031921
+v 47.937500 -14.625000 -0.621566
+v 52.000008 8.125001 -0.412910
+v 52.000008 14.625002 -0.008068
+v 52.000008 19.500002 0.731225
+v 52.000008 29.250000 0.379227
+v 26.000000 52.000000 0.000004
+v 17.875000 52.000000 0.302140
+v -24.375000 52.000008 -0.028592
+v -42.397736 52.000000 0.354935
+v -52.000000 16.536768 -0.147150
+v -47.125004 11.375000 0.442549
+v -52.000000 12.999997 0.000002
+v -52.000000 -3.249997 0.541167
+v -52.000008 -8.125002 0.618414
+v -6.499997 -51.999996 -0.220471
+v 51.999996 -48.750004 -1.002168
+v 51.999996 -39.000004 -0.000004
+v 17.875000 -4.875000 0.986181
+v 48.750004 51.999996 -0.171443
+v -16.249996 -52.000000 0.015721
+v -11.375006 -52.000008 -0.348321
+v 52.000000 -52.000008 -0.000001
+v 52.000008 3.250001 0.041274
+v 52.000008 24.375000 0.286849
+v 52.000000 52.000000 0.000004
+v -8.125001 52.000008 -1.300457
+v -13.000002 52.000008 0.000004
+v -17.875002 52.000008 0.752858
+v -29.250000 52.000008 0.234945
+v 52.000000 -52.000008 -10.000001
+v 52.000000 52.000000 -9.999996
+v -52.000000 52.000000 -9.999996
+v -52.000000 -52.000008 -10.000003
+vn 0.0448 -0.0464 0.9979
+vn 0.0198 -0.0899 0.9958
+vn 0.0361 0.0547 0.9979
+vn 0.0343 0.0520 0.9981
+vn 0.0341 0.0517 0.9981
+vn -0.0042 0.0246 0.9997
+vn 0.1193 -0.0497 0.9916
+vn 0.0216 -0.0500 0.9985
+vn -0.0417 -0.0941 0.9947
+vn -0.0420 -0.0940 0.9947
+vn -0.0414 -0.0943 0.9947
+vn -0.0427 -0.0936 0.9947
+vn -0.2026 -0.1235 0.9714
+vn -0.2002 -0.1059 0.9740
+vn -0.0038 -0.0582 0.9983
+vn -0.0389 0.0013 0.9992
+vn -0.0576 -0.0070 0.9983
+vn 0.1538 0.0079 0.9881
+vn -0.1999 -0.0034 0.9798
+vn 0.0804 0.0547 0.9953
+vn 0.0126 -0.0893 0.9959
+vn 0.1777 0.1953 0.9645
+vn 0.1385 -0.0809 0.9871
+vn 0.0471 0.0463 0.9978
+vn 0.0013 0.0478 0.9989
+vn -0.0035 0.0120 0.9999
+vn -0.0011 0.0163 0.9999
+vn -0.0039 0.0113 0.9999
+vn 0.0187 0.0166 0.9997
+vn 0.0096 0.0946 0.9955
+vn 0.0435 -0.0076 0.9990
+vn 0.0342 -0.0022 0.9994
+vn 0.0440 -0.0078 0.9990
+vn 0.0337 -0.0019 0.9994
+vn -0.0577 -0.0425 0.9974
+vn -0.0972 -0.0357 0.9946
+vn -0.0416 0.0536 0.9977
+vn 0.0560 0.1020 0.9932
+vn 0.0928 0.1033 0.9903
+vn 0.1537 0.0463 0.9870
+vn 0.0193 -0.0832 0.9963
+vn -0.1082 0.1788 0.9779
+vn 0.0532 0.0769 0.9956
+vn 0.0310 -0.0001 0.9995
+vn -0.0502 0.0390 0.9980
+vn 0.1207 0.1750 0.9771
+vn 0.0025 0.0880 0.9961
+vn 0.0417 0.0793 0.9960
+vn -0.0609 0.0509 0.9968
+vn 0.0371 0.0864 0.9956
+vn -0.1055 -0.0873 0.9906
+vn 0.0076 0.1185 0.9929
+vn -0.0258 0.1708 0.9850
+vn -0.0648 0.0216 0.9977
+vn -0.0231 0.0356 0.9991
+vn -0.0223 0.0376 0.9990
+vn -0.0230 0.0357 0.9991
+vn 0.0418 0.0146 0.9990
+vn 0.1050 -0.0379 0.9938
+vn -0.0033 -0.1023 0.9948
+vn 0.0006 -0.1035 0.9946
+vn 0.0040 -0.1057 0.9944
+vn 0.0293 -0.0823 0.9962
+vn 0.0308 -0.0828 0.9961
+vn 0.0293 -0.0825 0.9962
+vn 0.0312 0.1417 0.9894
+vn -0.1499 -0.1136 0.9821
+vn 0.1096 -0.0393 0.9932
+vn 0.1095 -0.0387 0.9932
+vn 0.1076 -0.0372 0.9935
+vn 0.1225 -0.0422 0.9916
+vn 0.1218 -0.0417 0.9917
+vn -0.0274 -0.1802 0.9832
+vn -0.1250 -0.1077 0.9863
+vn 0.0372 -0.1084 0.9934
+vn 0.0376 -0.1083 0.9934
+vn 0.0430 -0.1033 0.9937
+vn -0.0183 0.0363 0.9992
+vn 0.0230 -0.0361 0.9991
+vn -0.0024 0.0173 0.9998
+vn 0.0075 -0.1466 0.9892
+vn -0.1764 -0.1255 0.9763
+vn 0.1185 -0.1212 0.9855
+vn 0.1565 -0.0961 0.9830
+vn -0.0979 0.0605 0.9934
+vn 0.1245 0.0910 0.9880
+vn 0.0232 0.0531 0.9983
+vn 0.0232 0.0534 0.9983
+vn 0.0428 -0.1029 0.9938
+vn 0.1371 -0.0323 0.9900
+vn 0.1409 -0.1645 0.9763
+vn -0.0966 -0.2414 0.9656
+vn 0.1164 -0.0064 0.9932
+vn -0.1528 0.0076 0.9882
+vn 0.0475 0.0052 0.9989
+vn 0.1478 0.0764 0.9861
+vn -0.1533 0.1389 0.9784
+vn -0.1500 0.1428 0.9783
+vn -0.1531 0.1392 0.9784
+vn -0.0167 0.0110 0.9998
+vn -0.1480 0.0345 0.9884
+vn 0.0473 0.0838 0.9954
+vn -0.1572 0.0916 0.9833
+vn -0.1564 0.0924 0.9834
+vn -0.0001 0.1018 0.9948
+vn 0.0646 0.0174 0.9978
+vn 0.0658 0.0270 0.9975
+vn 0.0651 0.0177 0.9977
+vn 0.0208 -0.0979 0.9950
+vn 0.0218 -0.0967 0.9951
+vn 0.0232 -0.0953 0.9952
+vn 0.1273 -0.0708 0.9893
+vn -0.0096 0.0988 0.9951
+vn -0.1383 0.0261 0.9901
+vn 0.1248 -0.0721 0.9896
+vn 0.0424 -0.1086 0.9932
+vn -0.0595 0.1287 0.9899
+vn -0.1110 0.1612 0.9807
+vn -0.1283 -0.0002 0.9917
+vn 0.1511 0.0510 0.9872
+vn 0.1516 0.0511 0.9871
+vn 0.1601 0.0510 0.9858
+vn -0.0222 -0.0297 0.9993
+vn -0.0332 0.0312 0.9990
+vn 0.0575 -0.0794 0.9952
+vn 0.0572 -0.0797 0.9952
+vn 0.0501 -0.0797 0.9956
+vn -0.1624 0.0292 0.9863
+vn 0.0511 0.1363 0.9893
+vn 0.0466 0.1266 0.9909
+vn 0.0507 0.1357 0.9895
+vn -0.0595 0.0545 0.9967
+vn 0.0657 0.0277 0.9975
+vn 0.0204 0.0726 0.9972
+vn 0.1446 0.1568 0.9770
+vn 0.0743 -0.1322 0.9884
+vn 0.1357 0.0093 0.9907
+vn 0.2224 -0.0969 0.9701
+vn 0.1422 -0.1330 0.9809
+vn -0.1344 0.0917 0.9867
+vn -0.0690 -0.0904 0.9935
+vn -0.0725 -0.0856 0.9937
+vn -0.0689 -0.0900 0.9936
+vn -0.0924 -0.0714 0.9932
+vn -0.2080 -0.0440 0.9771
+vn 0.0095 -0.0401 0.9992
+vn -0.0077 -0.0252 0.9997
+vn -0.0079 -0.0249 0.9997
+vn -0.0072 -0.0330 0.9994
+vn 0.0235 0.0109 0.9997
+vn 0.0240 0.0109 0.9997
+vn 0.0273 0.0109 0.9996
+vn -0.0332 0.0168 0.9993
+vn -0.1023 0.0019 0.9948
+vn 0.1681 -0.1040 0.9803
+vn -0.0760 -0.0807 0.9938
+vn 0.0745 -0.1098 0.9912
+vn 0.2004 -0.0018 0.9797
+vn -0.1526 0.1740 0.9728
+vn 0.0680 0.3055 0.9498
+vn -0.0969 -0.0233 0.9950
+vn 0.0188 0.0382 0.9991
+vn -0.0115 0.0774 0.9969
+vn -0.0094 0.0799 0.9968
+vn -0.0118 0.0771 0.9970
+vn 0.0024 -0.1958 0.9806
+vn 0.0770 -0.2012 0.9765
+vn -0.2179 0.1172 0.9689
+vn -0.1530 0.1588 0.9754
+vn -0.0966 -0.0877 0.9914
+vn 0.0281 0.0025 0.9996
+vn 0.0303 -0.0033 0.9995
+vn 0.0307 -0.0042 0.9995
+vn 0.0605 -0.0136 0.9981
+vn -0.0092 0.0801 0.9967
+vn -0.1047 0.1271 0.9863
+vn 0.1188 -0.0746 0.9901
+vn 0.0129 0.1718 0.9850
+vn 0.0140 0.1717 0.9851
+vn 0.0036 0.1720 0.9851
+vn 0.1997 0.0826 0.9764
+vn -0.1632 0.2598 0.9518
+vn 0.0035 -0.0624 0.9980
+vn 0.0039 -0.0624 0.9980
+vn 0.0036 -0.0624 0.9980
+vn -0.0539 0.1958 0.9792
+vn 0.0154 -0.0366 0.9992
+vn -0.1298 -0.0845 0.9879
+vn 0.0414 -0.0748 0.9963
+vn 0.0404 -0.0714 0.9966
+vn 0.0403 -0.0710 0.9967
+vn 0.1374 -0.1328 0.9816
+vn -0.0413 0.0517 0.9978
+vn -0.2870 -0.2227 0.9317
+vn -0.0028 -0.0496 0.9988
+vn -0.1253 -0.1613 0.9789
+vn 0.0401 0.0448 0.9982
+vn 0.0498 0.0448 0.9978
+vn 0.0491 0.0448 0.9978
+vn 0.0067 -0.0175 0.9998
+vn 0.0657 -0.1635 0.9844
+vn 0.0743 -0.0142 0.9971
+vn 0.1128 -0.0061 0.9936
+vn -0.0413 0.0325 0.9986
+vn -0.0516 0.0146 0.9986
+vn -0.0191 0.1506 0.9884
+vn -0.0237 0.1242 0.9920
+vn -0.0153 -0.1160 0.9931
+vn 0.0625 -0.1796 0.9818
+vn 0.0636 -0.1796 0.9817
+vn 0.0749 0.0436 0.9962
+vn 0.0722 -0.0071 0.9974
+vn -0.0991 -0.0047 0.9951
+vn -0.0633 0.0134 0.9979
+vn 0.1539 0.0636 0.9860
+vn -0.0272 0.1006 0.9946
+vn 0.0120 0.0583 0.9982
+vn 0.1984 0.0919 0.9758
+vn -0.0683 0.0191 0.9975
+vn -0.0629 0.0104 0.9980
+vn -0.0634 0.0113 0.9979
+vn 0.0092 -0.0404 0.9991
+vn 0.1125 -0.0745 0.9909
+vn -0.0579 0.0927 0.9940
+vn -0.1100 0.1178 0.9869
+vn -0.1100 0.1181 0.9869
+vn -0.1096 0.1181 0.9869
+vn -0.0387 0.0391 0.9985
+vn 0.0755 0.1147 0.9905
+vn 0.2265 0.0616 0.9721
+vn 0.2238 0.0736 0.9718
+vn 0.2270 0.0616 0.9719
+vn 0.0663 -0.0361 0.9971
+vn 0.0366 0.1081 0.9935
+vn 0.0364 0.1084 0.9934
+vn 0.0482 0.1026 0.9936
+vn -0.0627 0.1363 0.9887
+vn 0.0837 0.1678 0.9823
+vn 0.2026 0.0071 0.9792
+vn 0.0211 0.1594 0.9870
+vn -0.1657 0.1226 0.9785
+vn 0.0921 -0.1231 0.9881
+vn 0.0145 0.0111 0.9998
+vn -0.0195 -0.0008 0.9998
+vn -0.0256 0.0055 0.9997
+vn -0.0187 0.0028 0.9998
+vn -0.0396 0.0752 0.9964
+vn 0.0485 0.1028 0.9935
+vn 0.0708 -0.0485 0.9963
+vn -0.0841 0.0013 0.9965
+vn -0.0853 0.0019 0.9964
+vn -0.0839 0.0014 0.9965
+vn -0.1560 -0.2150 0.9641
+vn 0.1157 -0.3082 0.9443
+vn -0.0458 0.2025 0.9782
+vn -0.0502 0.1129 0.9923
+vn 0.0320 -0.1200 0.9923
+vn 0.1072 0.0207 0.9940
+vn 0.1450 0.0225 0.9892
+vn -0.0317 -0.1046 0.9940
+vn -0.0533 -0.1045 0.9931
+vn -0.0537 -0.1050 0.9930
+vn -0.0537 -0.1051 0.9930
+vn 0.1216 -0.0225 0.9923
+vn 0.0927 -0.0188 0.9955
+vn -0.0427 -0.0642 0.9970
+vn -0.0404 -0.0656 0.9970
+vn -0.0428 -0.0640 0.9970
+vn -0.0193 0.0062 0.9998
+vn -0.0272 0.0057 0.9996
+vn -0.0735 -0.1071 0.9915
+vn -0.0093 -0.0091 0.9999
+vn 0.0187 -0.1058 0.9942
+vn 0.0237 -0.0960 0.9951
+vn 0.0203 -0.0974 0.9950
+vn 0.0189 -0.0924 0.9955
+vn -0.0519 -0.0964 0.9940
+vn -0.1857 0.2467 0.9512
+vn 0.0819 0.0399 0.9958
+vn -0.0741 -0.1389 0.9875
+vn -0.0730 -0.1383 0.9877
+vn -0.0697 -0.1395 0.9878
+vn 0.0501 -0.1672 0.9846
+vn 0.0799 -0.1398 0.9869
+vn 0.0658 0.2397 0.9686
+vn 0.1450 -0.0125 0.9894
+vn -0.0025 -0.0504 0.9987
+vn -0.0017 -0.0498 0.9988
+vn -0.0016 -0.0496 0.9988
+vn -0.0319 -0.0513 0.9982
+vn -0.0931 0.0105 0.9956
+vn 0.0296 -0.0834 0.9961
+vn 0.0284 -0.0821 0.9962
+vn 0.0298 -0.0838 0.9960
+vn -0.0215 -0.0639 0.9977
+vn -0.0296 -0.0671 0.9973
+vn -0.0302 -0.0672 0.9973
+vn 0.2642 0.0764 0.9614
+vn 0.0539 0.2199 0.9740
+vn 0.1116 0.2327 0.9661
+vn -0.0229 -0.0214 0.9995
+vn -0.0169 -0.0223 0.9996
+vn 0.0834 -0.0601 0.9947
+vn 0.0669 -0.0499 0.9965
+vn -0.1500 0.0870 0.9849
+vn -0.0558 0.0561 0.9969
+vn 0.0807 0.0192 0.9966
+vn 0.0481 -0.1108 0.9927
+vn 0.0338 -0.1712 0.9847
+vn 0.0314 0.0390 0.9987
+vn 0.0313 0.0384 0.9988
+vn 0.0309 0.0352 0.9989
+vn -0.1455 0.0231 0.9891
+vn 0.0130 -0.0096 0.9999
+vn 0.0847 -0.2811 0.9559
+vn 0.0847 -0.2810 0.9560
+vn 0.0846 -0.2808 0.9560
+vn 0.0900 -0.2823 0.9551
+vn -0.1659 -0.0481 0.9850
+vn -0.0770 -0.0157 0.9969
+vn -0.0811 -0.0197 0.9965
+vn 0.0846 0.0630 0.9944
+vn 0.0840 0.0626 0.9945
+vn 0.0834 0.0623 0.9946
+vn 0.0008 0.0870 0.9962
+vn -0.0926 0.0401 0.9949
+vn -0.0455 0.1223 0.9915
+vn 0.0715 -0.0509 0.9961
+vn 0.0715 -0.0516 0.9961
+vn 0.0002 0.0448 0.9990
+vn -0.0924 -0.0338 0.9951
+vn -0.0947 -0.0338 0.9949
+vn -0.1025 -0.0338 0.9942
+vn -0.1617 0.1813 0.9700
+vn 0.0880 -0.0658 0.9939
+vn -0.0245 -0.1034 0.9943
+vn -0.0033 -0.2547 0.9670
+vn 0.0018 -0.1747 0.9846
+vn 0.0922 -0.1152 0.9891
+vn -0.1266 0.1832 0.9749
+vn 0.0963 0.1858 0.9779
+vn 0.0167 -0.0015 0.9999
+vn 0.0460 0.0972 0.9942
+vn -0.0899 -0.1816 0.9793
+vn 0.1103 -0.0360 0.9932
+vn 0.1100 -0.0393 0.9932
+vn 0.1105 -0.0355 0.9932
+vn 0.0579 0.0493 0.9971
+vn 0.0501 -0.0390 0.9980
+vn -0.2115 -0.0507 0.9761
+vn -0.0322 -0.1748 0.9841
+vn 0.1299 -0.1276 0.9833
+vn 0.0669 0.1250 0.9899
+vn -0.0734 0.2157 0.9737
+vn -0.2454 0.0985 0.9644
+vn -0.0898 0.1502 0.9846
+vn 0.0491 0.1892 0.9807
+vn 0.1547 0.1576 0.9753
+vn 0.0331 -0.0051 0.9994
+vn 0.1095 -0.0430 0.9931
+vn 0.0735 -0.1101 0.9912
+vn -0.1797 -0.0586 0.9820
+vn 0.0851 0.0700 0.9939
+vn 0.0941 0.0526 0.9942
+vn -0.2749 0.0326 0.9609
+vn 0.1635 0.0885 0.9826
+vn 0.0892 -0.2029 0.9751
+vn 0.1035 -0.1980 0.9747
+vn 0.0955 0.0591 0.9937
+vn -0.2933 -0.1941 0.9361
+vn -0.0581 -0.0330 0.9978
+vn 0.0577 -0.1064 0.9926
+vn -0.0825 -0.1387 0.9869
+vn 0.1764 -0.0762 0.9814
+vn -0.0867 0.0708 0.9937
+vn -0.0869 0.0024 0.9962
+vn -0.2344 0.0451 0.9711
+vn -0.0765 -0.1494 0.9858
+vn -0.0280 0.0222 0.9994
+vn 0.0371 -0.0297 0.9989
+vn -0.0525 0.2739 0.9603
+vn 0.1027 -0.1493 0.9834
+vn -0.1225 -0.0458 0.9914
+vn -0.0761 0.0403 0.9963
+vn -0.0796 0.0322 0.9963
+vn -0.0800 0.0313 0.9963
+vn 0.1237 0.0157 0.9922
+vn -0.0052 -0.0314 0.9995
+vn -0.0050 -0.0310 0.9995
+vn -0.0039 -0.0852 0.9964
+vn -0.2506 0.0500 0.9668
+vn 0.1004 0.0245 0.9946
+vn -0.0058 0.0207 0.9998
+vn -0.0339 0.0263 0.9991
+vn -0.2286 -0.0919 0.9692
+vn 0.0878 -0.2181 0.9720
+vn 0.0459 -0.2286 0.9724
+vn 0.0240 -0.0127 0.9996
+vn -0.0116 -0.0255 0.9996
+vn 0.2344 -0.0589 0.9704
+vn 0.0607 -0.0287 0.9977
+vn 0.0363 0.0549 0.9978
+vn -0.0045 0.1760 0.9844
+vn -0.1390 -0.0809 0.9870
+vn -0.0058 0.0640 0.9979
+vn -0.0088 0.0091 0.9999
+vn 0.0099 -0.0034 0.9999
+vn 0.0568 0.0201 0.9982
+vn -0.0007 0.0166 0.9999
+vn 0.0170 -0.0406 0.9990
+vn -0.0042 -0.0379 0.9993
+vn 0.0471 -0.0206 0.9987
+vn -0.2285 0.0991 0.9685
+vn -0.0868 0.1034 0.9909
+vn 0.0166 0.0600 0.9981
+vn -0.0705 0.0983 0.9927
+vn -0.0652 0.1009 0.9928
+vn -0.0700 0.0983 0.9927
+vn -0.0645 0.1013 0.9928
+vn -0.0357 -0.1433 0.9890
+vn 0.0334 0.1797 0.9832
+vn -0.0419 -0.0001 0.9991
+vn 0.0333 0.0509 0.9982
+vn 0.0619 0.0410 0.9972
+vn 0.1097 0.0528 0.9926
+vn -0.0088 0.1122 0.9937
+vn 0.0556 0.2075 0.9767
+vn -0.1248 0.1188 0.9850
+vn -0.0070 -0.0286 0.9996
+vn 0.0489 0.0649 0.9967
+vn 0.1047 0.0833 0.9910
+vn 0.0419 0.1252 0.9913
+vn -0.0509 0.0884 0.9948
+vn 0.1271 -0.0054 0.9919
+vn -0.1188 0.1552 0.9807
+vn 0.0103 0.1404 0.9900
+vn -0.0285 0.0280 0.9992
+vn 0.1238 0.0746 0.9895
+vn 0.0030 0.1783 0.9840
+vn -0.0624 -0.0092 0.9980
+vn -0.0306 -0.0013 0.9995
+vn 0.0230 -0.0106 0.9997
+vn 0.0046 -0.1049 0.9945
+vn 0.0310 -0.0828 0.9961
+vn -0.1826 -0.1022 0.9779
+vn 0.0715 -0.2279 0.9710
+vn -0.0847 -0.0963 0.9917
+vn -0.0181 0.0362 0.9992
+vn 0.0793 0.0213 0.9966
+vn -0.1997 -0.1436 0.9693
+vn 0.0334 -0.1274 0.9913
+vn -0.1563 -0.0980 0.9828
+vn -0.1668 -0.0415 0.9851
+vn 0.1750 0.0496 0.9833
+vn 0.0273 0.0509 0.9983
+vn -0.1759 -0.0931 0.9800
+vn -0.0299 -0.1521 0.9879
+vn 0.0183 -0.0591 0.9981
+vn 0.0190 -0.0589 0.9981
+vn 0.0197 -0.0586 0.9981
+vn 0.0046 -0.0493 0.9988
+vn -0.1464 0.0752 0.9864
+vn 0.0768 -0.0308 0.9966
+vn 0.0768 -0.0306 0.9966
+vn 0.0768 -0.0262 0.9967
+vn 0.0297 -0.0638 0.9975
+vn 0.1181 -0.0480 0.9918
+vn 0.0003 0.0289 0.9996
+vn -0.0048 0.0292 0.9996
+vn 0.0008 0.0288 0.9996
+vn -0.0054 0.0293 0.9996
+vn 0.0335 0.0935 0.9951
+vn -0.1581 0.0908 0.9832
+vn 0.0308 0.0118 0.9995
+vn 0.1745 -0.0939 0.9802
+vn 0.0204 -0.0981 0.9950
+vn -0.1323 0.0858 0.9875
+vn -0.0256 0.0030 0.9997
+vn 0.0303 0.1618 0.9864
+vn 0.0332 0.1621 0.9862
+vn 0.0769 -0.0259 0.9967
+vn 0.1606 0.0510 0.9857
+vn 0.0360 -0.1035 0.9940
+vn 0.0235 0.0312 0.9992
+vn 0.0498 -0.0794 0.9956
+vn -0.0896 0.0350 0.9954
+vn 0.1047 0.0669 0.9923
+vn -0.0686 -0.1322 0.9888
+vn -0.1265 0.0093 0.9919
+vn -0.1814 -0.0978 0.9785
+vn 0.0313 -0.0600 0.9977
+vn -0.0063 -0.1466 0.9892
+vn 0.0466 0.1262 0.9909
+vn 0.0823 -0.0715 0.9940
+vn -0.1124 -0.0447 0.9927
+vn 0.3309 0.0911 0.9393
+vn 0.0279 0.0109 0.9996
+vn -0.0002 -0.0125 0.9999
+vn -0.0008 -0.0127 0.9999
+vn 0.0002 -0.0124 0.9999
+vn -0.0012 -0.0129 0.9999
+vn -0.0305 0.2544 0.9666
+vn -0.0575 0.2625 0.9632
+vn -0.2167 0.1565 0.9636
+vn 0.1047 -0.0574 0.9928
+vn 0.0345 -0.1102 0.9933
+vn -0.0818 -0.1097 0.9906
+vn -0.0111 -0.1729 0.9849
+vn 0.1253 -0.2045 0.9708
+vn 0.0249 -0.2691 0.9628
+vn -0.0909 -0.1955 0.9765
+vn 0.0278 0.0034 0.9996
+vn 0.0249 0.0618 0.9978
+vn 0.1720 -0.0271 0.9847
+vn 0.1282 -0.1032 0.9864
+vn 0.1350 -0.1008 0.9857
+vn 0.1279 -0.1030 0.9864
+vn 0.1353 -0.1005 0.9857
+vn -0.0387 -0.0092 0.9992
+vn -0.0583 0.0413 0.9974
+vn -0.0123 -0.0137 0.9998
+vn -0.0800 0.0771 0.9938
+vn 0.0416 -0.0750 0.9963
+vn 0.0030 0.1717 0.9851
+vn -0.0111 0.1959 0.9806
+vn -0.0634 0.1787 0.9819
+vn 0.0257 0.0982 0.9948
+vn 0.3312 0.1715 0.9278
+vn 0.0033 -0.0624 0.9980
+vn 0.0695 0.0056 0.9976
+vn -0.0234 -0.0002 0.9997
+vn -0.1521 -0.1186 0.9812
+vn 0.0169 -0.0594 0.9981
+vn 0.0861 -0.1233 0.9886
+vn -0.1755 -0.0348 0.9839
+vn -0.0324 0.0893 0.9955
+vn 0.0175 0.0915 0.9956
+vn 0.0337 0.0789 0.9963
+vn 0.0142 -0.0224 0.9996
+vn 0.0005 -0.0178 0.9998
+vn 0.1466 -0.2300 0.9621
+vn -0.0990 -0.0433 0.9941
+vn 0.0362 0.0996 0.9944
+vn 0.0396 0.0449 0.9982
+vn 0.0824 -0.0080 0.9966
+vn 0.0286 0.0807 0.9963
+vn 0.0149 -0.0142 0.9998
+vn 0.0181 -0.0271 0.9995
+vn 0.0150 -0.0148 0.9998
+vn 0.0321 -0.0773 0.9965
+vn 0.0099 -0.1034 0.9946
+vn 0.0585 -0.0711 0.9957
+vn 0.0262 -0.0496 0.9984
+vn -0.0234 0.0147 0.9996
+vn -0.1515 0.1489 0.9772
+vn 0.0168 0.1242 0.9921
+vn 0.0615 -0.1796 0.9818
+vn -0.0401 -0.0428 0.9983
+vn 0.0145 -0.0350 0.9993
+vn -0.0384 -0.0073 0.9992
+vn -0.0685 0.0193 0.9975
+vn -0.0090 -0.0499 0.9987
+vn 0.0182 -0.0274 0.9995
+vn -0.0407 0.0583 0.9975
+vn -0.0762 0.0590 0.9953
+vn -0.1422 0.0752 0.9870
+vn -0.1414 0.0760 0.9870
+vn -0.1420 0.0752 0.9870
+vn 0.0031 -0.1069 0.9943
+vn 0.0319 -0.1211 0.9921
+vn 0.2239 0.0740 0.9718
+vn -0.0971 -0.0008 0.9953
+vn 0.0554 0.0104 0.9984
+vn -0.0792 0.0390 0.9961
+vn -0.0768 0.0411 0.9962
+vn 0.0587 -0.0230 0.9980
+vn 0.0479 -0.1178 0.9919
+vn -0.0411 -0.0884 0.9952
+vn 0.1671 0.0510 0.9846
+vn 0.0524 0.1186 0.9916
+vn -0.1404 0.0769 0.9871
+vn 0.0221 0.1366 0.9904
+vn -0.0381 0.1683 0.9850
+vn -0.0171 -0.0764 0.9969
+vn 0.0480 -0.0979 0.9940
+vn -0.1159 0.1083 0.9873
+vn 0.1069 -0.1229 0.9867
+vn -0.0933 0.0155 0.9955
+vn -0.0380 0.0295 0.9988
+vn 0.1039 -0.0069 0.9946
+vn -0.0159 -0.0486 0.9987
+vn -0.0221 -0.1246 0.9920
+vn -0.0377 -0.1229 0.9917
+vn 0.0752 0.1436 0.9868
+vn 0.1100 -0.1345 0.9848
+vn -0.0628 -0.1198 0.9908
+vn 0.0559 -0.1068 0.9927
+vn 0.0556 -0.1067 0.9927
+vn 0.0533 -0.1077 0.9928
+vn -0.0838 0.0592 0.9947
+vn 0.0325 0.0708 0.9970
+vn -0.0753 0.1434 0.9868
+vn -0.0016 0.1619 0.9868
+vn 0.2069 0.0560 0.9768
+vn -0.0909 0.0585 0.9941
+vn -0.0302 0.0789 0.9964
+vn -0.1108 -0.0080 0.9938
+vn 0.0255 0.0262 0.9993
+vn -0.0379 -0.0673 0.9970
+vn 0.0351 -0.0430 0.9985
+vn 0.1062 -0.0091 0.9943
+vn 0.0506 -0.1086 0.9928
+vn -0.0541 -0.1057 0.9929
+vn 0.0174 -0.0923 0.9956
+vn 0.0230 -0.0965 0.9951
+vn 0.0994 0.2498 0.9632
+vn -0.0428 0.0561 0.9975
+vn 0.0262 0.0332 0.9991
+vn -0.0712 -0.1374 0.9880
+vn -0.1497 0.1343 0.9796
+vn -0.0033 -0.0513 0.9987
+vn 0.0146 -0.0165 0.9998
+vn -0.1455 -0.0249 0.9891
+vn 0.0272 -0.0806 0.9964
+vn -0.0216 -0.0632 0.9978
+vn 0.0829 0.0155 0.9964
+vn -0.0166 -0.0224 0.9996
+vn -0.0778 -0.0933 0.9926
+vn -0.0686 -0.1395 0.9878
+vn -0.0013 0.0070 1.0000
+vn -0.1914 0.0476 0.9804
+vn -0.0377 -0.0104 0.9992
+vn -0.0455 -0.1224 0.9914
+vn -0.1510 -0.0265 0.9882
+vn -0.0033 0.0736 0.9973
+vn -0.0036 0.0735 0.9973
+vn -0.0037 0.0735 0.9973
+vn -0.0040 0.0733 0.9973
+vn 0.0146 0.0567 0.9983
+vn -0.0884 0.0827 0.9926
+vn 0.0189 0.0473 0.9987
+vn -0.0062 -0.0106 0.9999
+vn 0.1312 -0.1204 0.9840
+vn 0.2615 -0.1613 0.9516
+vn -0.0729 -0.0116 0.9973
+vn 0.0018 0.0134 0.9999
+vn -0.0780 0.0665 0.9947
+vn -0.0731 0.0699 0.9949
+vn -0.0776 0.0669 0.9947
+vn -0.0725 0.0701 0.9949
+vn 0.0845 0.0629 0.9944
+vn 0.1308 0.0550 0.9899
+vn 0.0309 0.0346 0.9989
+vn -0.1039 -0.0338 0.9940
+vn 0.2639 0.0902 0.9603
+vn 0.0281 0.1114 0.9934
+vn -0.0751 0.0429 0.9963
+vn 0.1110 -0.2352 0.9656
+vn -0.1136 -0.1361 0.9842
+vn 0.0453 -0.0357 0.9983
+vn -0.0413 0.2052 0.9778
+vn 0.0869 0.1624 0.9829
+vn 0.0818 0.0093 0.9966
+vn -0.1459 -0.1560 0.9769
+vn 0.1651 -0.2090 0.9639
+vn -0.2346 0.0361 0.9714
+vn 0.0349 -0.1822 0.9826
+vn -0.0083 -0.0390 0.9992
+vn 0.0715 -0.0517 0.9961
+vn -0.0028 -0.1287 0.9917
+vn -0.0246 0.0789 0.9966
+vn 0.0011 0.0967 0.9953
+vn 0.0184 0.1595 0.9870
+vn 0.0197 0.0139 0.9997
+vn -0.0706 0.0252 0.9972
+vn 0.0015 -0.0191 0.9998
+vn -0.0406 -0.1328 0.9903
+vn 0.1101 0.0676 0.9916
+vn -0.0755 -0.0660 0.9950
+vn -0.0023 -0.0606 0.9982
+vn -0.0041 0.0897 0.9960
+vn -0.1221 0.0940 0.9881
+vn 0.0744 0.0454 0.9962
+vn -0.0262 -0.0049 0.9996
+vn 0.0621 -0.2952 0.9534
+vn 0.1751 -0.2566 0.9505
+vn -0.1205 0.0589 0.9910
+vn 0.0544 0.2942 0.9542
+vn -0.0686 0.1454 0.9870
+vn -0.1498 0.1431 0.9783
+vn 0.0124 -0.2156 0.9764
+vn -0.0762 -0.0127 0.9970
+vn -0.0759 0.0925 0.9928
+vn 0.1766 -0.0612 0.9824
+vn -0.2321 -0.1458 0.9617
+vn -0.1954 0.0890 0.9767
+vn -0.1961 -0.0186 0.9804
+vn -0.0526 -0.0583 0.9969
+vn -0.0577 -0.0297 0.9979
+vn -0.1545 -0.0202 0.9878
+vn 0.0564 0.1896 0.9802
+vn 0.2576 -0.0336 0.9657
+vn 0.1438 -0.0439 0.9886
+vn 0.1525 -0.0344 0.9877
+vn 0.1510 -0.0360 0.9879
+vn 0.1431 -0.0448 0.9887
+vn -0.1166 0.2131 0.9700
+vn 0.0530 0.1941 0.9795
+vn -0.0971 0.1353 0.9860
+vn -0.0367 -0.1083 0.9934
+vn 0.3036 -0.0031 0.9528
+vn 0.2621 0.1585 0.9519
+vn 0.1909 -0.1235 0.9738
+vn -0.0000 -0.0000 1.0000
+vn -0.0000 1.0000 -0.0000
+vn -0.0000 1.0000 0.0002
+vn -1.0000 0.0000 0.0000
+vn -1.0000 0.0000 -0.0001
+vn 0.0000 -1.0000 0.0001
+vn 0.0000 -1.0000 -0.0000
+vn -1.0000 0.0000 0.0001
+vn -0.0000 -1.0000 -0.0002
+vn -0.0000 -1.0000 -0.0001
+vn 1.0000 0.0000 0.0000
+vn 1.0000 -0.0000 -0.0001
+s 1
+f 6633//3386 6634//3386 6635//3386
+f 6636//3387 6637//3387 6633//3387
+f 6638//3388 6639//3389 6640//3390
+f 6641//3391 6642//3391 6643//3391
+f 6644//3392 6642//3392 6641//3392
+f 6645//3393 6642//3393 6644//3393
+f 6646//3394 6647//3395 6648//3396
+f 6649//3397 6647//3395 6646//3394
+f 6649//3398 6650//3398 6647//3398
+f 6651//3399 6652//3399 6653//3399
+f 6654//3400 6652//3400 6651//3400
+f 6655//3401 6656//3401 6657//3401
+f 6655//3402 6658//3402 6656//3402
+f 6659//3403 6660//3403 6658//3403
+f 6639//3404 6661//3404 6636//3404
+f 6643//3405 6662//3405 6638//3405
+f 6663//3406 6664//3406 6645//3406
+f 6665//3407 6666//3407 6650//3407
+f 6665//3408 6667//3408 6668//3408
+f 6652//3409 6667//3409 6669//3409
+f 6656//3410 6670//3410 6654//3410
+f 6637//3411 6671//3412 6634//3413
+f 6661//3414 6672//3414 6637//3414
+f 6639//3415 6662//3415 6661//3415
+f 6642//3416 6673//3417 6674//3418
+f 6645//3419 6673//3417 6642//3416
+f 6664//3420 6673//3420 6645//3420
+f 6663//3421 6675//3421 6676//3421
+f 6647//3422 6675//3422 6648//3422
+f 6647//3423 6666//3423 6675//3423
+f 6668//3424 6667//3424 6677//3424
+f 6660//3425 6678//3425 6658//3425
+f 6672//3426 6679//3426 6671//3426
+f 6662//3427 6674//3427 6680//3427
+f 6673//3428 6681//3428 6674//3428
+f 6676//3429 6682//3429 6664//3429
+f 6666//3430 6677//3430 6683//3430
+f 6684//3431 6685//3431 6686//3431
+f 6670//3432 6687//3432 6688//3432
+f 6679//3433 6689//3433 6690//3433
+f 6682//3434 6691//3434 6673//3434
+f 6676//3435 6691//3435 6682//3435
+f 6675//3436 6692//3436 6676//3436
+f 6675//3437 6683//3437 6693//3437
+f 6694//3438 6695//3438 6677//3438
+f 6678//3439 6696//3439 6687//3439
+f 6678//3440 6697//3441 6696//3442
+f 6689//3443 6698//3443 6690//3443
+f 6699//3444 6700//3444 6689//3444
+f 6701//3445 6702//3446 6699//3447
+f 6703//3448 6704//3449 6680//3450
+f 6695//3451 6693//3451 6683//3451
+f 6694//3452 6705//3452 6695//3452
+f 6694//3453 6706//3454 6705//3455
+f 6685//3456 6706//3454 6686//3457
+f 6685//3458 6707//3458 6706//3458
+f 6688//3459 6707//3459 6685//3459
+f 6688//3460 6708//3461 6707//3462
+f 6697//3441 6709//3463 6696//3442
+f 6698//3464 6700//3464 6710//3464
+f 6704//3465 6711//3465 6701//3465
+f 6703//3466 6712//3466 6704//3466
+f 6713//3467 6714//3467 6703//3467
+f 6691//3468 6715//3468 6713//3468
+f 6691//3469 6716//3469 6715//3469
+f 6692//3470 6716//3470 6691//3470
+f 6693//3471 6717//3471 6692//3471
+f 6693//3472 6718//3472 6717//3473
+f 6708//3461 6709//3474 6707//3462
+f 6702//3475 6711//3475 6719//3475
+f 6716//3476 6720//3476 6715//3476
+f 6721//3477 6720//3477 6716//3477
+f 6706//3478 6722//3478 6705//3478
+f 6723//3479 6724//3479 6706//3479
+f 6709//3480 6725//3480 6707//3480
+f 6709//3481 6726//3481 6725//3481
+f 6709//3482 6727//3483 6726//3484
+f 6728//3485 6729//3485 6710//3485
+f 6712//3486 6730//3486 6711//3486
+f 6712//3487 6731//3487 6730//3487
+f 6715//3488 6731//3488 6714//3489
+f 6715//3490 6720//3490 6732//3490
+f 6721//3491 6733//3492 6734//3493
+f 6718//3494 6733//3495 6717//3496
+f 6718//3497 6735//3497 6736//3497
+f 6722//3498 6737//3498 6705//3498
+f 6723//3499 6738//3499 6724//3499
+f 6711//3500 6739//3500 6719//3500
+f 6730//3501 6739//3501 6711//3501
+f 6720//3502 6734//3502 6740//3502
+f 6722//3503 6741//3503 6742//3503
+f 6738//3504 6741//3504 6724//3504
+f 6726//3505 6743//3506 6725//3507
+f 6739//3508 6744//3508 6745//3508
+f 6739//3509 6746//3509 6747//3509
+f 6731//3510 6746//3511 6730//3512
+f 6732//3513 6748//3513 6731//3513
+f 6732//3514 6740//3515 6748//3516
+f 6734//3517 6749//3517 6750//3517
+f 6733//3492 6749//3518 6734//3493
+f 6736//3519 6751//3519 6733//3519
+f 6735//3520 6751//3520 6736//3520
+f 6735//3521 6752//3521 6753//3521
+f 6742//3522 6752//3522 6737//3522
+f 6738//3523 6743//3523 6754//3523
+f 6748//3524 6755//3524 6731//3524
+f 6750//3525 6756//3525 6740//3525
+f 6753//3526 6757//3527 6751//3528
+f 6742//3529 6758//3529 6759//3529
+f 6754//3530 6758//3530 6741//3530
+f 6743//3531 6760//3531 6761//3531
+f 6744//3532 6762//3533 6763//3534
+f 6747//3535 6764//3536 6744//3537
+f 6746//3538 6765//3538 6747//3538
+f 6755//3539 6765//3539 6746//3539
+f 6748//3540 6756//3540 6755//3540
+f 6751//3528 6757//3527 6766//3541
+f 6752//3542 6767//3542 6753//3542
+f 6758//3543 6768//3543 6769//3543
+f 6754//3544 6768//3544 6758//3544
+f 6754//3545 6761//3545 6768//3545
+f 6760//3546 6770//3546 6771//3546
+f 6762//3547 6764//3547 6772//3547
+f 6765//3548 6773//3549 6774//3550
+f 6756//3551 6775//3551 6776//3551
+f 6777//3552 6775//3552 6756//3552
+f 6778//3553 6779//3553 6777//3553
+f 6778//3554 6766//3554 6779//3554
+f 6767//3555 6766//3555 6757//3555
+f 6761//3556 6771//3557 6780//3558
+f 6764//3559 6773//3559 6781//3559
+f 6765//3548 6782//3560 6773//3549
+f 6765//3561 6776//3561 6782//3561
+f 6783//3562 6784//3562 6775//3562
+f 6767//3563 6785//3564 6786//3565
+f 6768//3566 6787//3566 6769//3566
+f 6780//3567 6788//3567 6768//3567
+f 6771//3568 6789//3569 6790//3570
+f 6781//3571 6791//3571 6772//3571
+f 6782//3572 6792//3572 6773//3572
+f 6776//3573 6792//3573 6782//3573
+f 6776//3574 6784//3575 6793//3576
+f 6779//3577 6794//3577 6783//3577
+f 6786//3578 6795//3578 6796//3578
+f 6780//3579 6797//3579 6788//3579
+f 6780//3580 6790//3580 6798//3580
+f 6781//3581 6799//3581 6791//3581
+f 6781//3582 6800//3583 6801//3584
+f 6794//3585 6802//3585 6784//3585
+f 6779//3586 6803//3586 6794//3586
+f 6804//3587 6805//3587 6790//3587
+f 6800//3588 6806//3588 6807//3588
+f 6800//3589 6808//3589 6806//3589
+f 6792//3590 6809//3590 6808//3590
+f 6810//3591 6811//3591 6809//3591
+f 6793//3592 6802//3592 6811//3592
+f 6794//3593 6812//3593 6802//3593
+f 6803//3594 6813//3595 6814//3594
+f 6795//3596 6815//3596 6816//3596
+f 6797//3597 6817//3597 6787//3597
+f 6798//3598 6818//3598 6797//3598
+f 6798//3599 6819//3599 6818//3599
+f 6805//3600 6820//3600 6819//3600
+f 6821//3601 6820//3601 6805//3601
+f 6811//3602 6822//3602 6809//3602
+f 6813//3603 6823//3603 6814//3603
+f 6817//3604 6824//3605 6815//3606
+f 6807//3607 6825//3607 6826//3607
+f 6806//3608 6825//3608 6807//3608
+f 6822//3609 6827//3609 6808//3609
+f 6828//3610 6829//3611 6811//3612
+f 6830//3613 6831//3613 6812//3613
+f 6830//3614 6832//3614 6831//3614
+f 6830//3615 6823//3616 6832//3617
+f 6816//3618 6824//3618 6833//3618
+f 6817//3619 6834//3620 6835//3621
+f 6819//3622 6834//3622 6818//3622
+f 6819//3623 6820//3623 6836//3623
+f 6837//3624 6827//3624 6838//3624
+f 6822//3625 6829//3625 6827//3625
+f 6828//3626 6831//3626 6839//3626
+f 6823//3627 6840//3627 6841//3627
+f 6816//3628 6842//3628 6843//3628
+f 6816//3629 6833//3630 6842//3631
+f 6817//3632 6844//3632 6824//3632
+f 6835//3621 6844//3633 6817//3619
+f 6834//3634 6836//3634 6845//3634
+f 6820//3635 6846//3636 6836//3637
+f 6829//3638 6847//3638 6848//3638
+f 6839//3639 6847//3639 6829//3639
+f 6831//3640 6849//3640 6839//3640
+f 6841//3641 6849//3641 6832//3641
+f 6845//3642 6850//3642 6835//3642
+f 6826//3643 6851//3643 6852//3643
+f 6826//3644 6853//3644 6851//3644
+f 6827//3645 6854//3645 6855//3645
+f 6827//3646 6848//3647 6854//3648
+f 6839//3649 6856//3649 6847//3649
+f 6840//3650 6857//3650 6841//3650
+f 6840//3651 6858//3652 6857//3653
+f 6833//3630 6859//3654 6842//3631
+f 6833//3630 6860//3655 6859//3654
+f 6844//3656 6850//3656 6860//3656
+f 6845//3657 6861//3657 6862//3657
+f 6848//3658 6863//3658 6864//3658
+f 6849//3659 6865//3660 6839//3661
+f 6866//3662 6867//3662 6849//3662
+f 6857//3663 6868//3663 6869//3663
+f 6862//3664 6860//3664 6850//3664
+f 6861//3665 6870//3666 6862//3667
+f 6871//3668 6872//3668 6861//3668
+f 6871//3669 6873//3669 6872//3669
+f 6851//3670 6874//3670 6875//3670
+f 6853//3671 6876//3671 6851//3671
+f 6855//3672 6876//3673 6853//3674
+f 6854//3675 6877//3675 6855//3675
+f 6864//3676 6878//3676 6854//3676
+f 6864//3677 6879//3678 6880//3679
+f 6856//3680 6879//3681 6863//3682
+f 6867//3683 6881//3683 6882//3683
+f 6866//3684 6881//3684 6867//3684
+f 6866//3685 6869//3685 6881//3685
+f 6860//3686 6883//3687 6859//3687
+f 6860//3688 6884//3688 6885//3688
+f 6862//3689 6884//3689 6860//3689
+f 6868//3690 6886//3690 6887//3690
+f 6883//3691 6886//3691 6868//3691
+f 6873//3692 6888//3692 6872//3692
+f 6889//3693 6890//3693 6873//3693
+f 6874//3694 6891//3694 6892//3694
+f 6876//3695 6893//3696 6891//3697
+f 6880//3698 6894//3698 6878//3698
+f 6865//3699 6895//3699 6896//3699
+f 6881//3700 6897//3701 6895//3702
+f 6887//3703 6897//3701 6881//3700
+f 6886//3704 6898//3704 6887//3704
+f 6883//3705 6898//3705 6886//3706
+f 6884//3707 6899//3708 6885//3709
+f 6870//3710 6900//3710 6884//3710
+f 6870//3711 6888//3711 6900//3711
+f 6890//3712 6901//3712 6888//3712
+f 6891//3713 6902//3714 6903//3714
+f 6894//3715 6902//3715 6893//3715
+f 6879//3716 6904//3717 6905//3718
+f 6896//3719 6906//3719 6879//3719
+f 6897//3720 6907//3720 6895//3720
+f 6897//3721 6908//3721 6907//3721
+f 6898//3722 6908//3722 6887//3722
+f 6909//3723 6910//3723 6911//3723
+f 6909//3724 6899//3724 6910//3724
+f 6901//3725 6912//3725 6888//3725
+f 6913//3726 6901//3726 6890//3726
+f 6891//3727 6903//3727 6914//3727
+f 6915//3728 6916//3728 6896//3728
+f 6910//3729 6917//3729 6898//3729
+f 6912//3730 6918//3731 6900//3732
+f 6892//3733 6914//3733 6919//3733
+f 6903//3734 6920//3734 6921//3734
+f 6922//3735 6920//3735 6902//3735
+f 6904//3736 6922//3736 6894//3736
+f 6904//3737 6916//3737 6923//3737
+f 6915//3738 6924//3738 6916//3738
+f 6907//3739 6924//3739 6915//3739
+f 6907//3740 6925//3740 6924//3740
+f 6917//3741 6926//3741 6908//3741
+f 6910//3742 6926//3742 6917//3742
+f 6899//3743 6927//3743 6910//3743
+f 6918//3744 6928//3744 6899//3744
+f 6912//3730 6929//3745 6918//3731
+f 6912//3746 6930//3746 6931//3746
+f 6901//3747 6930//3747 6912//3747
+f 6932//3748 6933//3748 6901//3748
+f 6633//3749 6635//3749 6934//3749
+f 6640//3750 6636//3750 6935//3750
+f 6641//3751 6638//3751 6936//3751
+f 6937//3752 6665//3752 6938//3752
+f 6937//3753 6653//3753 6665//3753
+f 6657//3754 6654//3754 6939//3754
+f 6940//3755 6709//3755 6697//3755
+f 6941//3756 6727//3756 6709//3756
+f 6726//3757 6942//3757 6943//3757
+f 6770//3758 6760//3758 6943//3758
+f 6804//3759 6944//3759 6821//3759
+f 6821//3760 6945//3760 6820//3760
+f 6945//3761 6846//3636 6820//3635
+f 6946//3762 6871//3762 6846//3762
+f 6871//3763 6947//3763 6873//3763
+f 6947//3764 6889//3764 6873//3764
+f 6927//3765 6948//3765 6949//3765
+f 6923//3766 6950//3766 6922//3766
+f 6914//3767 6921//3767 6951//3767
+f 6852//3768 6875//3768 6952//3768
+f 6953//3769 6954//3770 6799//3771
+f 6762//3772 6955//3772 6956//3772
+f 6745//3773 6763//3534 6729//3774
+f 6633//3775 6637//3775 6634//3775
+f 6636//3776 6640//3776 6639//3776
+f 6641//3777 6643//3777 6638//3777
+f 6957//3778 6663//3778 6645//3778
+f 6957//3779 6646//3779 6663//3779
+f 6646//3780 6648//3780 6663//3780
+f 6665//3781 6653//3781 6669//3781
+f 6653//3782 6652//3782 6669//3782
+f 6657//3783 6656//3783 6654//3783
+f 6655//3784 6659//3784 6658//3784
+f 6659//3785 6958//3785 6660//3785
+f 6636//3786 6661//3786 6637//3786
+f 6638//3388 6662//3787 6639//3389
+f 6650//3788 6666//3788 6647//3788
+f 6665//3789 6668//3789 6666//3789
+f 6665//3790 6669//3790 6667//3790
+f 6652//3791 6684//3791 6667//3791
+f 6652//3792 6654//3792 6684//3792
+f 6654//3793 6670//3793 6684//3793
+f 6637//3411 6672//3794 6671//3412
+f 6643//3795 6674//3795 6662//3795
+f 6643//3796 6642//3796 6674//3796
+f 6663//3797 6676//3797 6664//3797
+f 6663//3798 6648//3798 6675//3798
+f 6666//3799 6668//3799 6677//3799
+f 6656//3800 6687//3800 6670//3800
+f 6656//3801 6658//3802 6687//3803
+f 6658//3802 6678//3804 6687//3803
+f 6660//3805 6959//3805 6678//3805
+f 6661//3806 6662//3806 6680//3806
+f 6673//3807 6664//3807 6682//3807
+f 6675//3808 6666//3808 6683//3808
+f 6667//3809 6694//3809 6677//3809
+f 6667//3810 6686//3810 6694//3810
+f 6667//3811 6684//3811 6686//3811
+f 6684//3812 6670//3812 6685//3812
+f 6670//3813 6688//3813 6685//3813
+f 6959//3814 6697//3814 6678//3814
+f 6679//3815 6672//3815 6689//3815
+f 6672//3816 6699//3816 6689//3816
+f 6672//3817 6661//3817 6699//3817
+f 6661//3818 6701//3818 6699//3818
+f 6661//3819 6680//3819 6701//3819
+f 6674//3820 6703//3820 6680//3820
+f 6674//3821 6681//3821 6703//3821
+f 6673//3822 6691//3822 6681//3822
+f 6675//3823 6693//3823 6692//3823
+f 6683//3824 6677//3824 6695//3824
+f 6687//3825 6708//3825 6688//3825
+f 6687//3826 6696//3826 6708//3826
+f 6689//3827 6700//3827 6698//3827
+f 6699//3447 6702//3446 6700//3828
+f 6680//3450 6704//3449 6701//3829
+f 6681//3830 6713//3830 6703//3830
+f 6681//3831 6691//3831 6713//3831
+f 6691//3832 6676//3832 6692//3832
+f 6694//3453 6686//3457 6706//3454
+f 6696//3442 6709//3463 6708//3833
+f 6702//3834 6701//3834 6711//3834
+f 6704//3835 6712//3835 6711//3835
+f 6703//3836 6714//3836 6712//3836
+f 6713//3837 6715//3837 6714//3837
+f 6692//3838 6721//3838 6716//3838
+f 6692//3839 6717//3839 6721//3839
+f 6693//3472 6695//3840 6718//3472
+f 6695//3841 6705//3841 6718//3841
+f 6706//3842 6707//3842 6723//3842
+f 6710//3843 6700//3844 6728//3844
+f 6700//3844 6719//3845 6728//3844
+f 6700//3846 6702//3846 6719//3846
+f 6705//3847 6735//3847 6718//3847
+f 6706//3848 6724//3849 6722//3850
+f 6707//3851 6738//3851 6723//3851
+f 6707//3852 6725//3852 6738//3852
+f 6728//3853 6745//3854 6729//3855
+f 6728//3853 6719//3856 6745//3854
+f 6712//3857 6714//3857 6731//3857
+f 6715//3488 6732//3858 6731//3488
+f 6721//3859 6734//3859 6720//3859
+f 6721//3860 6717//3860 6733//3860
+f 6718//3494 6736//3861 6733//3495
+f 6705//3862 6737//3862 6735//3862
+f 6719//3863 6739//3863 6745//3863
+f 6732//3864 6720//3864 6740//3864
+f 6737//3865 6722//3865 6742//3865
+f 6722//3850 6724//3849 6741//3866
+f 6738//3867 6725//3507 6743//3506
+f 6726//3868 6943//3868 6743//3868
+f 6745//3773 6744//3532 6763//3534
+f 6739//3869 6747//3869 6744//3869
+f 6739//3870 6730//3512 6746//3511
+f 6734//3871 6750//3871 6740//3871
+f 6733//3872 6751//3872 6749//3872
+f 6735//3873 6753//3873 6751//3873
+f 6735//3874 6737//3874 6752//3874
+f 6741//3875 6738//3875 6754//3875
+f 6743//3876 6943//3876 6760//3876
+f 6746//3877 6731//3877 6755//3877
+f 6748//3516 6740//3515 6756//3878
+f 6752//3879 6742//3879 6759//3879
+f 6742//3880 6741//3880 6758//3880
+f 6743//3881 6761//3881 6754//3881
+f 6744//3537 6764//3536 6762//3882
+f 6747//3883 6774//3884 6764//3885
+f 6747//3883 6765//3886 6774//3884
+f 6756//3887 6750//3887 6777//3887
+f 6750//3888 6749//3888 6777//3888
+f 6749//3889 6778//3889 6777//3889
+f 6749//3890 6751//3890 6778//3890
+f 6751//3891 6766//3891 6778//3891
+f 6757//3892 6753//3892 6767//3892
+f 6752//3893 6960//3893 6767//3893
+f 6752//3894 6759//3894 6960//3894
+f 6759//3895 6769//3895 6960//3895
+f 6759//3896 6758//3896 6769//3896
+f 6761//3556 6760//3897 6771//3557
+f 6774//3898 6773//3898 6764//3898
+f 6755//3899 6756//3899 6776//3899
+f 6777//3900 6783//3901 6775//3902
+f 6777//3900 6779//3903 6783//3901
+f 6768//3904 6761//3904 6780//3904
+f 6770//3905 6789//3905 6771//3905
+f 6772//3906 6764//3906 6781//3906
+f 6765//3907 6755//3907 6776//3907
+f 6775//3908 6784//3575 6776//3574
+f 6767//3563 6786//3565 6766//3909
+f 6767//3910 6960//3910 6785//3910
+f 6960//3911 6787//3911 6785//3911
+f 6960//3912 6769//3912 6787//3912
+f 6768//3913 6788//3913 6787//3913
+f 6771//3568 6790//3570 6780//3914
+f 6773//3915 6800//3915 6781//3915
+f 6773//3916 6792//3916 6800//3916
+f 6776//3917 6810//3917 6792//3917
+f 6776//3918 6793//3918 6810//3918
+f 6783//3919 6794//3919 6784//3919
+f 6779//3920 6766//3920 6803//3920
+f 6766//3921 6813//3921 6803//3921
+f 6766//3922 6796//3922 6813//3922
+f 6766//3923 6786//3923 6796//3923
+f 6786//3924 6785//3924 6795//3924
+f 6785//3925 6787//3925 6795//3925
+f 6787//3926 6788//3926 6797//3926
+f 6780//3927 6798//3927 6797//3927
+f 6789//3928 6804//3928 6790//3928
+f 6781//3582 6801//3584 6799//3929
+f 6784//3930 6802//3930 6793//3930
+f 6795//3931 6787//3931 6815//3931
+f 6790//3932 6805//3933 6798//3934
+f 6804//3935 6821//3935 6805//3935
+f 6799//3936 6801//3936 6953//3936
+f 6801//3937 6807//3937 6953//3937
+f 6801//3938 6800//3938 6807//3938
+f 6800//3939 6792//3939 6808//3939
+f 6792//3940 6810//3940 6809//3940
+f 6810//3941 6793//3941 6811//3941
+f 6803//3594 6814//3594 6794//3942
+f 6796//3943 6843//3943 6813//3943
+f 6796//3944 6816//3944 6843//3944
+f 6796//3945 6795//3945 6816//3945
+f 6787//3946 6817//3604 6815//3606
+f 6797//3947 6818//3947 6817//3947
+f 6798//3934 6805//3933 6819//3948
+f 6809//3949 6822//3949 6808//3949
+f 6802//3950 6828//3950 6811//3950
+f 6802//3951 6812//3952 6828//3953
+f 6794//3954 6830//3954 6812//3954
+f 6794//3955 6814//3955 6830//3955
+f 6814//3956 6823//3616 6830//3615
+f 6813//3957 6843//3957 6823//3957
+f 6815//3958 6824//3958 6816//3958
+f 6953//3769 6826//3959 6952//3960
+f 6953//3961 6807//3961 6826//3961
+f 6806//3962 6837//3962 6825//3962
+f 6806//3963 6808//3963 6837//3963
+f 6808//3964 6827//3964 6837//3964
+f 6811//3965 6829//3965 6822//3965
+f 6812//3952 6831//3966 6828//3953
+f 6817//3967 6818//3967 6834//3967
+f 6819//3968 6836//3968 6834//3968
+f 6825//3969 6838//3969 6826//3969
+f 6825//3970 6837//3970 6838//3970
+f 6828//3610 6839//3971 6829//3611
+f 6823//3972 6841//3972 6832//3972
+f 6823//3973 6843//3973 6840//3973
+f 6843//3974 6842//3974 6840//3974
+f 6824//3975 6844//3975 6833//3975
+f 6835//3976 6834//3976 6845//3976
+f 6952//3977 6826//3977 6852//3977
+f 6827//3978 6829//3978 6848//3978
+f 6831//3979 6832//3979 6849//3979
+f 6833//3980 6844//3980 6860//3980
+f 6844//3981 6835//3981 6850//3981
+f 6845//3982 6836//3983 6861//3984
+f 6846//3985 6871//3985 6836//3985
+f 6852//3986 6851//3986 6875//3986
+f 6826//3987 6838//3987 6853//3987
+f 6838//3988 6855//3988 6853//3988
+f 6838//3989 6827//3989 6855//3989
+f 6847//3990 6863//3990 6848//3990
+f 6847//3991 6856//3991 6863//3991
+f 6849//3992 6841//3992 6866//3992
+f 6841//3993 6857//3993 6866//3993
+f 6840//3651 6842//3994 6858//3652
+f 6842//3995 6859//3995 6858//3995
+f 6845//3996 6862//3996 6850//3996
+f 6836//3983 6871//3997 6861//3984
+f 6848//3647 6864//3998 6854//3648
+f 6839//3661 6865//3660 6856//3999
+f 6849//3659 6867//4000 6865//3660
+f 6866//4001 6857//4001 6869//4001
+f 6857//4002 6858//4002 6868//4002
+f 6858//4003 6859//4003 6868//4003
+f 6861//3665 6872//4004 6870//3666
+f 6851//4005 6876//4005 6874//4005
+f 6855//3672 6877//4006 6876//3673
+f 6854//4007 6878//4007 6877//4007
+f 6864//4008 6880//4008 6878//4008
+f 6864//3677 6863//4009 6879//3678
+f 6856//3680 6865//4010 6879//3681
+f 6865//4011 6867//4011 6882//4011
+f 6868//4012 6859//3687 6883//3687
+f 6860//4013 6885//4013 6883//4013
+f 6862//3667 6870//3666 6884//4014
+f 6881//4015 6869//4015 6887//4015
+f 6869//4016 6868//4016 6887//4016
+f 6870//4017 6872//4017 6888//4017
+f 6873//4018 6890//4018 6888//4018
+f 6874//4019 6876//4019 6891//4019
+f 6876//4020 6877//4021 6893//4022
+f 6877//4021 6894//4023 6893//4022
+f 6877//4024 6878//4024 6894//4024
+f 6880//4025 6905//4025 6894//4025
+f 6880//4026 6879//4026 6905//4026
+f 6865//4027 6896//4027 6879//4027
+f 6865//4028 6882//4028 6895//4028
+f 6882//4029 6881//4029 6895//4029
+f 6883//3705 6911//4030 6898//3705
+f 6883//4031 6909//4031 6911//4031
+f 6883//4032 6885//4033 6909//4034
+f 6885//4033 6899//4035 6909//4034
+f 6884//3707 6900//4036 6899//3708
+f 6890//4037 6889//4037 6913//4037
+f 6891//3697 6893//3696 6902//4038
+f 6905//3718 6904//3717 6894//4039
+f 6879//4040 6906//4040 6904//4040
+f 6896//4041 6895//4041 6915//4041
+f 6895//4042 6907//4042 6915//4042
+f 6897//4043 6887//4043 6908//4043
+f 6911//4044 6910//4044 6898//4044
+f 6900//4045 6918//4045 6899//4045
+f 6888//4046 6912//4046 6900//4046
+f 6913//4047 6932//4047 6901//4047
+f 6892//4048 6891//4048 6914//4048
+f 6894//4049 6922//4049 6902//4049
+f 6906//4050 6916//4050 6904//4050
+f 6906//4051 6896//4051 6916//4051
+f 6908//4052 6898//4052 6917//4052
+f 6914//4053 6903//4053 6921//4053
+f 6903//3714 6902//3714 6920//4054
+f 6904//4055 6923//4055 6922//4055
+f 6907//4056 6908//4056 6925//4056
+f 6908//4057 6926//4057 6925//4057
+f 6910//4058 6927//4058 6926//4058
+f 6899//4059 6948//4059 6927//4059
+f 6899//4060 6928//4060 6948//4060
+f 6918//4061 6929//4061 6928//4061
+f 6912//4062 6931//4062 6929//4062
+f 6901//4063 6933//4063 6930//4063
+f 6932//4064 6961//4064 6933//4064
+f 6935//4065 6636//4065 6633//4065
+f 6936//4066 6638//4066 6640//4066
+f 6962//4067 6645//4067 6644//4067
+f 6962//4068 6963//4068 6645//4068
+f 6963//4069 6957//4069 6645//4069
+f 6649//4070 6938//4070 6650//4070
+f 6938//4071 6665//4071 6650//4071
+f 6651//4072 6939//4072 6654//4072
+f 6659//4073 6964//4073 6958//4073
+f 6940//4074 6941//4074 6709//4074
+f 6726//3484 6727//3483 6942//4075
+f 6942//4076 6770//4076 6943//4076
+f 6789//4077 6965//4077 6804//4077
+f 6804//4078 6965//4078 6944//4078
+f 6821//4079 6944//4079 6945//4079
+f 6945//4080 6946//4080 6846//4080
+f 6946//4081 6966//4081 6871//4081
+f 6871//4082 6966//4082 6947//4082
+f 6932//4083 6967//4083 6961//4083
+f 6926//4084 6927//4084 6949//4084
+f 6924//4085 6925//4085 6968//4085
+f 6916//4086 6924//4086 6968//4086
+f 6916//4087 6968//4087 6969//4087
+f 6916//4088 6969//4089 6970//4090
+f 6923//4091 6916//4088 6970//4090
+f 6923//4092 6970//4092 6950//4092
+f 6922//4093 6950//4093 6971//4093
+f 6920//4094 6922//4094 6971//4094
+f 6919//4095 6914//4095 6951//4095
+f 6875//4096 6874//4096 6892//4096
+f 6954//3770 6953//3769 6952//3960
+f 6762//4097 6772//4097 6955//4097
+f 6763//4098 6762//4098 6956//4098
+f 6972//4099 6973//4099 6974//4099
+f 6972//4099 6974//4099 6975//4099
+f 6926//4100 6933//4100 6968//4100
+f 6973//4100 6974//4100 6968//4100
+f 6933//4100 6973//4100 6968//4100
+f 6968//4100 6974//4100 6919//4100
+f 6925//4100 6926//4100 6968//4100
+f 6969//4100 6968//4100 6920//4100
+f 6920//4100 6968//4100 6919//4100
+f 6967//4100 6933//4100 6961//4101
+f 6926//4100 6948//4100 6933//4100
+f 6948//4100 6930//4100 6933//4100
+f 6969//4100 6920//4100 6950//4100
+f 6950//4100 6920//4100 6971//4100
+f 6921//4100 6920//4100 6919//4100
+f 6948//4100 6926//4100 6949//4100
+f 6969//4100 6950//4100 6970//4100
+f 6931//4100 6930//4100 6929//4100
+f 6929//4100 6930//4100 6948//4100
+f 6951//4100 6921//4100 6919//4100
+f 6929//4100 6948//4100 6928//4100
+f 6933//4100 6967//4100 6973//4100
+f 6975//4102 6791//4102 6974//4102
+f 6934//4102 6635//4102 6975//4102
+f 6635//4102 6791//4102 6975//4102
+f 6955//4102 6772//4102 6763//4102
+f 6635//4102 6698//4102 6791//4102
+f 6729//4102 6772//4102 6791//4102
+f 6799//4102 6954//4102 6791//4102
+f 6952//4102 6919//4102 6791//4102
+f 6634//4103 6671//4102 6635//4102
+f 6671//4102 6698//4102 6635//4102
+f 6957//4104 6963//4105 6937//4105
+f 6698//4102 6729//4102 6791//4102
+f 6875//4102 6919//4102 6952//4102
+f 6698//4102 6710//4106 6729//4102
+f 6763//4102 6772//4102 6729//4102
+f 6671//4102 6690//4106 6698//4102
+f 6679//4102 6690//4106 6671//4102
+f 6956//4102 6955//4102 6763//4102
+f 6954//4102 6952//4102 6791//4102
+f 6875//4102 6892//4102 6919//4102
+f 6791//4102 6919//4102 6974//4102
+f 6975//4105 6972//4105 6653//4105
+f 6633//4105 6975//4105 6653//4105
+f 6653//4105 6972//4105 6964//4105
+f 6644//4105 6935//4107 6653//4105
+f 6644//4105 6653//4105 6937//4105
+f 6651//4105 6653//4105 6964//4105
+f 6644//4105 6641//4105 6935//4107
+f 6633//4105 6934//4105 6975//4105
+f 6962//4105 6644//4105 6963//4105
+f 6963//4105 6644//4105 6937//4105
+f 6938//4105 6957//4104 6937//4105
+f 6655//4108 6657//4104 6964//4105
+f 6646//4105 6957//4104 6938//4105
+f 6646//4105 6938//4105 6649//4105
+f 6939//4105 6651//4105 6657//4104
+f 6657//4104 6651//4105 6964//4105
+f 6640//4105 6641//4105 6936//4105
+f 6659//4104 6655//4108 6964//4105
+f 6935//4107 6633//4105 6653//4105
+f 6641//4105 6640//4105 6935//4107
+f 6967//4109 6932//4109 6973//4109
+f 6964//4109 6972//4109 6958//4109
+f 6958//4109 6972//4109 6942//4109
+f 6972//4109 6973//4109 6942//4109
+f 6973//4109 6932//4109 6942//4109
+f 6944//4109 6789//4109 6942//4109
+f 6944//4109 6942//4109 6932//4109
+f 6789//4109 6770//4109 6942//4109
+f 6959//4109 6660//4109 6941//4109
+f 6660//4109 6942//4109 6941//4109
+f 6944//4109 6932//4109 6913//4109
+f 6942//4109 6727//4109 6941//4109
+f 6789//4109 6944//4109 6965//4109
+f 6945//4109 6944//4109 6913//4109
+f 6946//4109 6945//4109 6966//4109
+f 6966//4109 6945//4109 6913//4109
+f 6697//4110 6959//4109 6941//4109
+f 6966//4109 6913//4109 6889//4109
+f 6697//4110 6941//4109 6940//4109
+f 6966//4109 6889//4109 6947//4109
+f 6660//4109 6958//4109 6942//4109
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/res/test/compressor/3d/parking.obj 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/compressor/3d/parking.obj
--- 1.2.21-5/modules/lsp-runtime-lib/res/test/compressor/3d/parking.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/compressor/3d/parking.obj	2025-08-26 18:15:43.654003990 +0000
@@ -0,0 +1,5550 @@
+# Parking
+# (C) Linux Studio Plugins Project
+o Cars
+v 12.648240 4.022533 0.250001
+v 12.648240 4.290485 0.250001
+v 12.946774 4.290485 0.250001
+v 12.946774 4.995182 0.250001
+v 12.648240 4.995182 0.250001
+v 12.648240 7.260300 0.250001
+v 12.946774 7.260300 0.250001
+v 12.946774 7.964998 0.250001
+v 12.648240 7.964998 0.250001
+v 12.648240 8.451532 0.250001
+v 14.551760 8.451532 0.250001
+v 14.551760 7.964998 0.250001
+v 14.253226 7.964998 0.250001
+v 14.253226 7.260300 0.250001
+v 14.551760 7.260300 0.250001
+v 14.551760 4.995182 0.250001
+v 14.253226 4.995182 0.250001
+v 14.253226 4.290485 0.250001
+v 14.551760 4.290485 0.250001
+v 14.551760 4.022533 0.250001
+v 8.246774 -23.209517 0.249998
+v 8.246774 -23.006443 0.031144
+v 8.246774 -22.707890 0.031144
+v 8.246774 -22.504818 0.249998
+v 12.648240 7.761927 0.031147
+v 12.648240 7.463371 0.031147
+v 12.648240 4.792110 0.031147
+v 12.648240 4.493555 0.031147
+v 12.648240 3.894726 0.393658
+v 12.648240 3.947720 0.858133
+v 12.648240 3.999435 0.873730
+v 12.648240 8.475908 0.873730
+v 12.648240 8.573107 0.458998
+v 14.551760 3.894726 0.393658
+v 27.462790 2.160160 0.250001
+v 27.714581 2.251804 0.250001
+v 28.365623 0.463081 0.250001
+v 28.113832 0.371437 0.250001
+v 28.011728 0.651966 0.250001
+v 27.349529 0.410946 0.250001
+v 27.451633 0.130417 0.250001
+v 25.323118 -0.644300 0.250001
+v 25.221014 -0.363770 0.250001
+v 24.558815 -0.604792 0.250001
+v 24.660919 -0.885321 0.250001
+v 24.203728 -1.051725 0.250001
+v 23.552685 0.736998 0.250001
+v 24.009878 0.903402 0.250001
+v 24.111982 0.622873 0.250001
+v 24.774181 0.863894 0.250001
+v 24.672075 1.144423 0.250001
+v 26.800592 1.919140 0.250001
+v 26.902697 1.638609 0.250001
+v 27.564896 1.879629 0.250001
+v 12.748240 -12.500565 0.873727
+v 13.142460 -9.110181 1.407337
+v 12.986664 -8.544116 1.141684
+v 12.986664 -8.145103 1.141684
+v 12.748240 -8.024093 0.873730
+v 2.848240 -23.605274 0.393655
+v 4.751760 -23.605274 0.393655
+v 4.751760 -23.552280 0.858130
+v 2.848240 -23.552280 0.858130
+v 25.348240 -22.707890 0.031144
+v 25.646774 -22.707890 0.031144
+v 25.646774 -23.006443 0.031144
+v 25.348240 -23.006443 0.031144
+v 17.351761 -3.539700 0.250001
+v 17.351761 -5.804819 0.250001
+v 17.053226 -5.804819 0.250001
+v 17.053226 -6.509516 0.250001
+v 17.351761 -6.509516 0.250001
+v 17.351761 -6.777466 0.250001
+v 15.448240 -6.777466 0.250001
+v 15.448240 -6.509516 0.250001
+v 15.746774 -6.509516 0.250001
+v 15.746774 -5.804819 0.250001
+v 15.448240 -5.804819 0.250001
+v 15.448240 -3.539700 0.250001
+v 15.746774 -3.539700 0.250001
+v 15.746774 -2.835003 0.250001
+v 15.448240 -2.835003 0.250001
+v 15.448240 -2.348469 0.250001
+v 17.351761 -2.348469 0.250001
+v 17.351761 -2.835003 0.250001
+v 17.053226 -2.835003 0.250001
+v 17.053226 -3.539700 0.250001
+v 7.948240 4.493555 0.031147
+v 7.948240 4.792110 0.031147
+v 8.246774 4.792110 0.031147
+v 8.246774 4.493555 0.031147
+v 14.253226 7.761927 0.031147
+v 14.253226 7.463371 0.031147
+v 9.553226 4.995182 0.250001
+v 9.553226 4.792110 0.031147
+v 9.553226 4.493555 0.031147
+v 9.553226 4.290485 0.250001
+v 10.248240 3.999435 0.873730
+v 10.248240 3.947720 0.858133
+v 12.151760 3.947720 0.858133
+v 12.151760 3.999435 0.873730
+v 11.757540 7.389818 1.407337
+v 10.642460 7.389818 1.407337
+v 14.257540 -9.110181 1.407337
+v 14.413336 -8.544116 1.141684
+v -24.951759 8.475908 0.873730
+v -24.713337 8.354895 1.141684
+v -23.286663 8.354895 1.141684
+v -23.048241 8.475908 0.873730
+v -23.048241 8.573107 0.458998
+v -24.951759 8.573107 0.458998
+v 4.751760 -20.036629 0.031144
+v 4.751760 -20.239700 0.249998
+v 4.453226 -20.239700 0.249998
+v 4.453226 -20.036629 0.031144
+v -32.748241 8.475908 0.873730
+v -32.748241 8.573107 0.458998
+v -34.651760 8.573107 0.458998
+v -34.651760 8.475908 0.873730
+v -34.413338 8.354895 1.141684
+v -32.986664 8.354895 1.141684
+v 25.348240 -23.500565 0.873727
+v 25.348240 -23.552280 0.858130
+v 27.251760 -23.552280 0.858130
+v 27.251760 -23.500565 0.873727
+v 26.857540 -20.110180 1.407334
+v 25.742460 -20.110180 1.407334
+v 4.453226 4.493555 0.031147
+v 4.453226 4.792110 0.031147
+v 4.751760 4.792110 0.031147
+v 4.751760 4.493555 0.031147
+v -2.453226 -3.539700 0.250001
+v -2.453226 -3.336628 0.031147
+v -2.453226 -3.038074 0.031147
+v -2.453226 -2.835003 0.250001
+v -32.748241 -19.738073 0.031144
+v -32.748241 -19.535002 0.249998
+v -32.748241 -19.048468 0.249998
+v -32.748241 -18.926893 0.458995
+v -32.748241 -19.024092 0.873727
+v -32.748241 -23.500565 0.873727
+v -32.748241 -23.552280 0.858130
+v -32.748241 -23.605274 0.393655
+v -32.748241 -23.477467 0.249998
+v -32.748241 -23.209517 0.249998
+v -32.748241 -23.006443 0.031144
+v -32.748241 -22.707890 0.031144
+v -32.748241 -22.504818 0.249998
+v -32.748241 -20.239700 0.249998
+v -32.748241 -20.036629 0.031144
+v 9.553226 7.463371 0.031147
+v 9.851760 7.463371 0.031147
+v 9.851760 7.260300 0.250001
+v 9.553226 7.260300 0.250001
+v -24.951759 4.792110 0.031147
+v -24.951759 4.995182 0.250001
+v -24.653227 4.995182 0.250001
+v -24.653227 4.792110 0.031147
+v 12.946774 4.792110 0.031147
+v 12.946774 4.493555 0.031147
+v 27.748240 -23.209517 0.249998
+v 27.748240 -23.477467 0.249998
+v 27.748240 -23.605274 0.393655
+v 27.748240 -23.552280 0.858130
+v 27.748240 -23.500565 0.873727
+v 27.748240 -19.024092 0.873727
+v 27.748240 -18.926893 0.458995
+v 27.748240 -19.048468 0.249998
+v 27.748240 -19.535002 0.249998
+v 27.748240 -19.738073 0.031144
+v 27.748240 -20.036629 0.031144
+v 27.748240 -20.239700 0.249998
+v 27.748240 -22.504818 0.249998
+v 27.748240 -22.707890 0.031144
+v 27.748240 -23.006443 0.031144
+v -19.448240 -19.024092 0.873727
+v -19.448240 -23.500565 0.873727
+v -19.448240 -23.552280 0.858130
+v -19.448240 -23.605274 0.393655
+v -19.448240 -23.477467 0.249998
+v -19.448240 -23.209517 0.249998
+v -19.448240 -23.006443 0.031144
+v -19.448240 -22.707890 0.031144
+v -19.448240 -22.504818 0.249998
+v -19.448240 -20.239700 0.249998
+v -19.448240 -20.036629 0.031144
+v -19.448240 -19.738073 0.031144
+v -19.448240 -19.535002 0.249998
+v -19.448240 -19.048468 0.249998
+v -19.448240 -18.926893 0.458995
+v -23.346773 7.463371 0.031147
+v -23.346773 7.761927 0.031147
+v -23.048241 7.761927 0.031147
+v -23.048241 7.463371 0.031147
+v -19.746775 -23.209517 0.249998
+v -19.746775 -23.006443 0.031144
+v 21.748983 8.796865 1.407337
+v 21.367605 9.844698 1.407337
+v 20.782393 9.797495 1.141685
+v 21.270342 8.456858 1.141684
+v -21.313335 7.955885 1.141684
+v -21.157539 7.389818 1.407337
+v -20.042459 7.389818 1.407337
+v -19.886663 7.955885 1.141684
+v 14.253226 4.792110 0.031147
+v 14.253226 4.493555 0.031147
+v 10.248240 7.964998 0.250001
+v 10.248240 7.761927 0.031147
+v 10.248240 7.463371 0.031147
+v 10.248240 7.260300 0.250001
+v 10.248240 4.995182 0.250001
+v 10.248240 4.792110 0.031147
+v 10.248240 4.493555 0.031147
+v 10.248240 4.290485 0.250001
+v 10.248240 4.022533 0.250001
+v 10.248240 3.894726 0.393658
+v 10.248240 8.475908 0.873730
+v 10.248240 8.573107 0.458998
+v 10.248240 8.451532 0.250001
+v 12.886663 7.955885 1.141684
+v 14.313336 7.955885 1.141684
+v 14.313336 8.354895 1.141684
+v 12.886663 8.354895 1.141684
+v 13.042460 7.389818 1.407337
+v 14.157540 7.389818 1.407337
+v 12.748240 -11.707890 0.031145
+v 12.748240 -11.504818 0.250001
+v 13.046774 -11.504818 0.250001
+v 13.046774 -11.707890 0.031145
+v 3.146774 -20.036629 0.031144
+v 3.146774 -20.239700 0.249998
+v 2.848240 -20.239700 0.249998
+v 2.848240 -20.036629 0.031144
+v 4.651760 -2.835003 0.250001
+v 4.651760 -2.348469 0.250001
+v 4.651760 -2.226894 0.458998
+v 4.651760 -2.324093 0.873730
+v 4.651760 -6.800564 0.873730
+v 4.651760 -6.852282 0.858133
+v 4.651760 -6.905273 0.393658
+v 4.651760 -6.777466 0.250001
+v 4.651760 -6.509516 0.250001
+v 4.651760 -6.306444 0.031147
+v 4.651760 -6.007889 0.031147
+v 4.651760 -5.804819 0.250001
+v 4.651760 -3.539700 0.250001
+v 4.651760 -3.336628 0.031147
+v 4.651760 -3.038074 0.031147
+v 11.853226 7.964998 0.250001
+v 11.853226 7.761927 0.031147
+v 11.853226 7.463371 0.031147
+v 11.853226 7.260300 0.250001
+v -21.253225 7.463371 0.031147
+v -21.253225 7.761927 0.031147
+v -21.253225 7.964998 0.250001
+v -21.253225 7.260300 0.250001
+v -28.046774 -23.209517 0.249998
+v -27.748240 -23.209517 0.249998
+v -27.748240 -23.477467 0.249998
+v -29.651760 -23.477467 0.249998
+v -29.651760 -23.209517 0.249998
+v -29.353226 -23.209517 0.249998
+v -29.353226 -22.504818 0.249998
+v -29.651760 -22.504818 0.249998
+v -29.651760 -20.239700 0.249998
+v -29.353226 -20.239700 0.249998
+v -29.353226 -19.535002 0.249998
+v -29.651760 -19.535002 0.249998
+v -29.651760 -19.048468 0.249998
+v -27.748240 -19.048468 0.249998
+v -27.748240 -19.535002 0.249998
+v -28.046774 -19.535002 0.249998
+v -28.046774 -20.239700 0.249998
+v -27.748240 -20.239700 0.249998
+v -27.748240 -22.504818 0.249998
+v -28.046774 -22.504818 0.249998
+v 36.727528 -1.929033 1.141684
+v 37.206169 -1.589027 1.407337
+v 36.824787 -0.541195 1.407337
+v 36.239574 -0.588400 1.141684
+v -28.046774 -22.707890 0.031144
+v -27.748240 -22.707890 0.031144
+v -21.351761 -18.926893 0.458995
+v -21.351761 -19.048468 0.249998
+v 32.468010 11.807646 0.250004
+v 32.570114 11.527117 0.250004
+v 32.379288 11.457659 0.031150
+v 32.277184 11.738192 0.031150
+v 12.151760 4.022533 0.250001
+v 12.151760 3.894726 0.393658
+v -33.046776 -19.738073 0.031144
+v -33.046776 -19.535002 0.249998
+v -21.351761 -6.800564 0.873730
+v -21.351761 -6.852282 0.858133
+v -19.448240 -6.852282 0.858133
+v -19.448240 -6.800564 0.873730
+v -19.842461 -3.410181 1.407337
+v -20.957541 -3.410181 1.407337
+v -34.651760 -12.209516 0.249999
+v -34.651760 -12.006444 0.031145
+v -34.353226 -12.006444 0.031145
+v -34.353226 -12.209516 0.249999
+v -19.448240 -6.306444 0.031147
+v -19.448240 -6.509516 0.250001
+v -19.746775 -6.509516 0.250001
+v -19.746775 -6.306444 0.031147
+v -27.251760 -22.707890 0.031144
+v -26.953226 -22.707890 0.031144
+v -26.953226 -23.006443 0.031144
+v -27.251760 -23.006443 0.031144
+v -19.448240 -3.539700 0.250001
+v -19.746775 -3.539700 0.250001
+v -19.746775 -3.336628 0.031147
+v -19.448240 -3.336628 0.031147
+v -2.751760 -6.852282 0.858133
+v -0.848240 -6.852282 0.858133
+v -0.848240 -6.800564 0.873730
+v -1.242460 -3.410181 1.407337
+v -2.357540 -3.410181 1.407337
+v -2.751760 -6.800564 0.873730
+v 29.353226 -22.707890 0.031144
+v 29.353226 -22.504818 0.249998
+v 29.651760 -22.504818 0.249998
+v 29.651760 -22.707890 0.031144
+v 29.651760 -23.605274 0.393655
+v 29.651760 -23.477467 0.249998
+v 19.751760 -6.777466 0.250001
+v 17.848240 -6.777466 0.250001
+v 17.848240 -6.509516 0.250001
+v 18.146774 -6.509516 0.250001
+v 18.146774 -5.804819 0.250001
+v 17.848240 -5.804819 0.250001
+v 17.848240 -3.539700 0.250001
+v 18.146774 -3.539700 0.250001
+v 18.146774 -2.835003 0.250001
+v 17.848240 -2.835003 0.250001
+v 17.848240 -2.348469 0.250001
+v 19.751760 -2.348469 0.250001
+v 19.751760 -2.835003 0.250001
+v 19.453226 -2.835003 0.250001
+v 19.453226 -3.539700 0.250001
+v 19.751760 -3.539700 0.250001
+v 19.751760 -5.804819 0.250001
+v 19.453226 -5.804819 0.250001
+v 19.453226 -6.509516 0.250001
+v 19.751760 -6.509516 0.250001
+v 32.383869 10.005064 1.141685
+v 31.895920 11.345697 1.141685
+v 31.520971 11.209227 1.141685
+v 32.008923 9.868593 1.141685
+v -15.951760 -19.535002 0.249998
+v -15.951760 -19.738073 0.031144
+v -15.951760 -20.036629 0.031144
+v -15.951760 -20.239700 0.249998
+v -15.951760 -22.504818 0.249998
+v -15.951760 -22.707890 0.031144
+v -15.951760 -23.006443 0.031144
+v -15.951760 -23.209517 0.249998
+v -15.951760 -23.477467 0.249998
+v -15.951760 -23.605274 0.393655
+v -15.951760 -23.552280 0.858130
+v -15.951760 -23.500565 0.873727
+v -15.951760 -19.024092 0.873727
+v -15.951760 -18.926893 0.458995
+v -15.951760 -19.048468 0.249998
+v -19.746775 -19.535002 0.249998
+v -19.746775 -20.239700 0.249998
+v -19.746775 -22.504818 0.249998
+v -21.351761 -23.477467 0.249998
+v -21.351761 -23.209517 0.249998
+v -21.053226 -23.209517 0.249998
+v -21.053226 -22.504818 0.249998
+v -21.351761 -22.504818 0.249998
+v -21.351761 -20.239700 0.249998
+v -21.053226 -20.239700 0.249998
+v -21.053226 -19.535002 0.249998
+v -21.351761 -19.535002 0.249998
+v 22.948240 -18.926893 0.458995
+v 24.851761 -18.926893 0.458995
+v 24.851761 -19.048468 0.249998
+v 22.948240 -19.048468 0.249998
+v 0.548240 -12.605274 0.393655
+v 2.451760 -12.605274 0.393655
+v 2.451760 -12.552280 0.858130
+v 0.548240 -12.552280 0.858130
+v -15.653226 -22.707890 0.031144
+v -15.653226 -23.006443 0.031144
+v -34.651760 -19.048468 0.249998
+v -34.651760 -18.926893 0.458995
+v 10.486664 7.955885 1.141684
+v 11.913336 7.955885 1.141684
+v 11.913336 8.354895 1.141684
+v 10.486664 8.354895 1.141684
+v -33.046776 -20.239700 0.249998
+v -33.046776 -22.504818 0.249998
+v -33.046776 -23.209517 0.249998
+v -34.651760 -23.477467 0.249998
+v -34.651760 -23.209517 0.249998
+v -34.353226 -23.209517 0.249998
+v -34.353226 -22.504818 0.249998
+v -34.651760 -22.504818 0.249998
+v -34.651760 -20.239700 0.249998
+v -34.353226 -20.239700 0.249998
+v -34.353226 -19.535002 0.249998
+v -34.651760 -19.535002 0.249998
+v -21.113337 -19.544117 1.141681
+v -19.686665 -19.544117 1.141681
+v -19.686665 -19.145103 1.141681
+v -21.113337 -19.145103 1.141681
+v 34.596523 12.582361 0.250004
+v 31.996634 11.636080 0.031150
+v 31.805809 11.566626 0.250004
+v 31.348618 11.400221 0.250004
+v 31.234375 11.358641 0.459000
+v 31.325710 11.391882 0.873731
+v 35.532219 12.922926 0.873733
+v 35.580818 12.940615 0.858136
+v 35.630615 12.958738 0.393661
+v 35.510513 12.915026 0.250004
+v 35.258724 12.823381 0.250004
+v 35.067898 12.753927 0.031150
+v 34.787350 12.651815 0.031150
+v 40.164665 -9.338746 0.250001
+v 39.973843 -9.408201 0.031147
+v 39.871735 -9.127670 0.031147
+v 40.062561 -9.058216 0.250001
+v 29.257540 -20.110180 1.407334
+v 29.413336 -19.544117 1.141681
+v 27.986664 -19.544117 1.141681
+v 28.142460 -20.110180 1.407334
+v -33.046776 -20.036629 0.031144
+v -28.046774 -19.738073 0.031144
+v -27.748240 -19.738073 0.031144
+v -27.748240 -20.036629 0.031144
+v -28.046774 -20.036629 0.031144
+v -34.353226 -20.036629 0.031144
+v -34.353226 -19.738073 0.031144
+v 18.242460 -3.410181 1.407337
+v 19.357540 -3.410181 1.407337
+v 19.513336 -2.844116 1.141684
+v 18.086664 -2.844116 1.141684
+v 10.546774 7.463371 0.031147
+v 10.546774 7.260300 0.250001
+v -13.551760 -19.535002 0.249998
+v -13.253226 -19.535002 0.249998
+v -13.253226 -19.738073 0.031144
+v -13.551760 -19.738073 0.031144
+v -29.413336 -19.145103 1.141681
+v -27.986664 -19.145103 1.141681
+v -27.748240 -19.024092 0.873727
+v -27.748240 -18.926893 0.458995
+v -29.651760 -18.926893 0.458995
+v -29.651760 -19.024092 0.873727
+v 19.751760 -6.905273 0.393658
+v 17.848240 -6.905273 0.393658
+v -14.346774 -22.707890 0.031144
+v -14.346774 -22.504818 0.249998
+v -14.048240 -22.504818 0.249998
+v -14.048240 -22.707890 0.031144
+v 2.848240 4.290485 0.250001
+v 2.848240 4.493555 0.031147
+v 3.146774 4.493555 0.031147
+v 3.146774 4.290485 0.250001
+v 24.605413 9.417002 0.031147
+v 24.503307 9.697531 0.031147
+v 24.694132 9.766985 0.250001
+v 24.796238 9.486456 0.250001
+v 5.446774 -6.007889 0.031147
+v 5.446774 -5.804819 0.250001
+v 5.446774 -6.509516 0.250001
+v 5.446774 -6.306444 0.031147
+v 2.451760 -12.209516 0.249999
+v 2.153226 -12.209516 0.249999
+v 2.153226 -12.006444 0.031145
+v 2.451760 -12.006444 0.031145
+v -13.253226 -20.036629 0.031144
+v -13.551760 -20.036629 0.031144
+v -33.046776 -12.209516 0.249999
+v -33.046776 -12.006444 0.031145
+v -32.748241 -12.006444 0.031145
+v -32.748241 -12.209516 0.249999
+v 41.347767 -3.055155 0.873730
+v 41.396362 -3.037468 0.858133
+v 40.745319 -1.248743 0.858133
+v 40.696724 -1.266432 0.873730
+v 37.645638 -2.796457 1.407337
+v 38.027016 -3.844290 1.407337
+v 24.418692 11.374723 0.873731
+v 20.212183 9.843679 0.873730
+v 20.407444 9.661024 1.141685
+v -19.946774 7.964998 0.250001
+v -19.946774 7.761927 0.031147
+v -19.946774 7.463371 0.031147
+v -19.946774 7.260300 0.250001
+v -34.651760 -22.707890 0.031144
+v -34.353226 -22.707890 0.031144
+v 20.985210 9.807344 0.031147
+v 20.883106 10.087877 0.031147
+v 21.163656 10.189989 0.031147
+v 21.265760 9.909456 0.031147
+v 35.966309 8.818907 0.250001
+v 36.068413 8.538374 0.250001
+v 33.939899 7.763659 0.250001
+v 33.837795 8.044189 0.250001
+v 33.175594 7.803169 0.250001
+v 33.277699 7.522638 0.250001
+v 32.820507 7.356234 0.250001
+v 32.169464 9.144957 0.250001
+v 32.626659 9.311361 0.250001
+v 32.728764 9.030832 0.250001
+v 33.390961 9.271852 0.250001
+v 33.288857 9.552382 0.250001
+v 35.417374 10.327101 0.250001
+v 35.519478 10.046568 0.250001
+v 36.181675 10.287588 0.250001
+v 36.079571 10.568121 0.250001
+v 36.331364 10.659765 0.250002
+v 36.982403 8.871042 0.250001
+v 36.730614 8.779398 0.250001
+v 36.628510 9.059927 0.250001
+v 12.151760 8.475908 0.873730
+v -34.651760 -23.500565 0.873727
+v -34.651760 -23.552280 0.858130
+v -33.142460 -20.110180 1.407334
+v -34.257542 -20.110180 1.407334
+v 8.186664 -19.544117 1.141681
+v 9.613337 -19.544117 1.141681
+v 9.613337 -19.145103 1.141681
+v 8.186664 -19.145103 1.141681
+v -34.353226 -23.006443 0.031144
+v 10.546774 4.995182 0.250001
+v 10.546774 4.792110 0.031147
+v 11.953226 -19.738073 0.031144
+v 12.251760 -19.738073 0.031144
+v 12.251760 -20.036629 0.031144
+v 11.953226 -20.036629 0.031144
+v 21.712593 8.681795 0.031147
+v 21.903418 8.751249 0.250001
+v 22.005524 8.470716 0.250001
+v 21.814699 8.401262 0.031147
+v 24.324863 9.314890 0.031147
+v 24.134039 9.245436 0.250001
+v 24.031935 9.525965 0.250001
+v 24.222759 9.595419 0.031147
+v 4.751760 7.463371 0.031147
+v 4.751760 7.761927 0.031147
+v 4.751760 7.964998 0.250001
+v 4.751760 8.451532 0.250001
+v 4.751760 8.573107 0.458998
+v 4.751760 8.475908 0.873730
+v 4.751760 3.999435 0.873730
+v 4.751760 3.947720 0.858133
+v 4.751760 3.894726 0.393658
+v 4.751760 4.022533 0.250001
+v 4.751760 4.290485 0.250001
+v 4.751760 4.995182 0.250001
+v 4.751760 7.260300 0.250001
+v -25.646774 -20.036629 0.031144
+v -25.646774 -20.239700 0.249998
+v -25.646774 -19.535002 0.249998
+v -25.646774 -19.738073 0.031144
+v 42.626431 -6.417053 0.858133
+v 43.277473 -8.205777 0.858133
+v 43.327271 -8.187653 0.393658
+v 42.676228 -6.398928 0.393658
+v -26.953226 -20.036629 0.031144
+v -26.953226 -19.738073 0.031144
+v -26.953226 -19.535002 0.249998
+v -26.953226 -20.239700 0.249998
+v 12.151760 7.260300 0.250001
+v 12.151760 4.995182 0.250001
+v 11.853226 4.995182 0.250001
+v 11.853226 4.290485 0.250001
+v 12.151760 4.290485 0.250001
+v 10.546774 4.290485 0.250001
+v 10.546774 7.964998 0.250001
+v 12.151760 8.451532 0.250001
+v 12.151760 7.964998 0.250001
+v 11.853226 4.493555 0.031147
+v 11.853226 4.792110 0.031147
+v 12.151760 4.792110 0.031147
+v 12.151760 4.493555 0.031147
+v -19.746775 -22.707890 0.031144
+v -21.551760 4.493555 0.031147
+v -21.551760 4.792110 0.031147
+v -21.253225 4.792110 0.031147
+v -21.253225 4.493555 0.031147
+v -34.651760 -19.024092 0.873727
+v -34.413338 -19.544117 1.141681
+v -34.413338 -19.145103 1.141681
+v 40.423225 -1.365976 0.250001
+v 40.525330 -1.646507 0.250001
+v 40.334507 -1.715961 0.031147
+v 40.232403 -1.435431 0.031147
+v -19.746775 -6.007889 0.031147
+v -19.746775 -5.804819 0.250001
+v -19.448240 -5.804819 0.250001
+v -19.448240 -6.007889 0.031147
+v -34.651760 3.999435 0.873730
+v -34.651760 3.947720 0.858133
+v -32.748241 3.947720 0.858133
+v -32.748241 3.999435 0.873730
+v -33.142460 7.389818 1.407337
+v -34.257542 7.389818 1.407337
+v 15.448240 -6.007889 0.031147
+v 15.746774 -6.007889 0.031147
+v -19.648239 4.493555 0.031147
+v -19.648239 4.290485 0.250001
+v -19.946774 4.290485 0.250001
+v -19.946774 4.493555 0.031147
+v 10.546774 4.493555 0.031147
+v 11.953226 -22.504818 0.249998
+v 11.953226 -22.707890 0.031144
+v 11.953226 -23.006443 0.031144
+v 11.953226 -23.209517 0.249998
+v 5.148240 -6.777466 0.250001
+v 7.051760 -6.777466 0.250001
+v 7.051760 -6.905273 0.393658
+v 5.148240 -6.905273 0.393658
+v 39.693291 -9.510312 0.031147
+v 39.502468 -9.579767 0.250001
+v 39.400364 -9.299237 0.250001
+v 39.591187 -9.229782 0.031147
+v -32.748241 3.894726 0.393658
+v -34.651760 3.894726 0.393658
+v -34.651760 4.022533 0.250001
+v -32.748241 4.022533 0.250001
+v 10.348240 -19.024092 0.873727
+v 10.348240 -18.926893 0.458995
+v 10.348240 -19.048468 0.249998
+v 10.348240 -19.535002 0.249998
+v 10.348240 -19.738073 0.031144
+v 10.348240 -20.036629 0.031144
+v 10.348240 -20.239700 0.249998
+v 10.348240 -22.504818 0.249998
+v 10.348240 -22.707890 0.031144
+v 10.348240 -23.006443 0.031144
+v 10.348240 -23.209517 0.249998
+v 10.348240 -23.477467 0.249998
+v 10.348240 -23.605274 0.393655
+v 10.348240 -23.552280 0.858130
+v 10.348240 -23.500565 0.873727
+v -26.857540 -20.110180 1.407334
+v -27.251760 -23.500565 0.873727
+v -27.251760 -23.552280 0.858130
+v -25.348240 -23.552280 0.858130
+v -25.348240 -23.500565 0.873727
+v -25.742460 -20.110180 1.407334
+v -26.953226 -22.504818 0.249998
+v -26.953226 -23.209517 0.249998
+v -25.646774 -22.504818 0.249998
+v -25.646774 -22.707890 0.031144
+v -25.646774 -23.006443 0.031144
+v -25.646774 -23.209517 0.249998
+v 17.848240 -2.324093 0.873730
+v 17.848240 -6.800564 0.873730
+v 18.086664 -2.445105 1.141684
+v -15.713336 -19.145103 1.141681
+v -14.286664 -19.145103 1.141681
+v -14.048240 -19.024092 0.873727
+v -14.048240 -18.926893 0.458995
+v -23.346773 7.964998 0.250001
+v -23.048241 7.964998 0.250001
+v 4.353226 -3.038074 0.031147
+v 4.353226 -2.835003 0.250001
+v -23.048241 7.260300 0.250001
+v -23.048241 8.451532 0.250001
+v -23.048241 3.999435 0.873730
+v -23.048241 3.947720 0.858133
+v -23.048241 3.894726 0.393658
+v -23.048241 4.022533 0.250001
+v -23.048241 4.290485 0.250001
+v -23.048241 4.493555 0.031147
+v -23.048241 4.792110 0.031147
+v -23.048241 4.995182 0.250001
+v 18.146774 -6.007889 0.031147
+v 18.146774 -6.306444 0.031147
+v -25.348240 -23.605274 0.393655
+v -27.251760 -23.605274 0.393655
+v -27.251760 -23.477467 0.249998
+v -25.348240 -23.477467 0.249998
+v -29.353226 -20.036629 0.031144
+v -29.353226 -19.738073 0.031144
+v 25.132294 -0.713755 0.031147
+v 25.030190 -0.433224 0.031147
+v -27.251760 -19.738073 0.031144
+v -27.251760 -19.535002 0.249998
+v -19.946774 4.995182 0.250001
+v -19.946774 4.792110 0.031147
+v 9.553226 -19.535002 0.249998
+v 9.851760 -19.535002 0.249998
+v 9.851760 -19.738073 0.031144
+v 9.553226 -19.738073 0.031144
+v 5.148240 -6.007889 0.031147
+v 5.148240 -5.804819 0.250001
+v 3.146774 -23.209517 0.249998
+v 2.848240 -23.209517 0.249998
+v 2.848240 -23.006443 0.031144
+v 3.146774 -23.006443 0.031144
+v -14.048240 -23.605274 0.393655
+v -14.048240 -23.552280 0.858130
+v 9.613337 8.354895 1.141684
+v 9.613337 7.955885 1.141684
+v 9.457540 7.389818 1.407337
+v 9.851760 3.999435 0.873730
+v 9.851760 8.475908 0.873730
+v 12.748240 -8.738072 0.031147
+v 13.046774 -8.738072 0.031147
+v 13.046774 -9.036628 0.031147
+v 12.748240 -9.036628 0.031147
+v -29.651760 -23.500565 0.873727
+v -29.651760 -23.552280 0.858130
+v -27.748240 -23.552280 0.858130
+v -27.748240 -23.500565 0.873727
+v -28.142460 -20.110180 1.407334
+v -29.257540 -20.110180 1.407334
+v -29.353226 -23.006443 0.031144
+v -29.353226 -22.707890 0.031144
+v 10.546774 7.761927 0.031147
+v -14.048240 -20.239700 0.249998
+v -14.048240 -20.036629 0.031144
+v -14.048240 -19.738073 0.031144
+v -14.048240 -19.535002 0.249998
+v -14.048240 -19.048468 0.249998
+v -14.048240 -23.500565 0.873727
+v -14.048240 -23.477467 0.249998
+v -14.048240 -23.209517 0.249998
+v -14.048240 -23.006443 0.031144
+v -27.986664 -19.544117 1.141681
+v -29.413336 -19.544117 1.141681
+v 5.386664 -2.844116 1.141684
+v 6.813336 -2.844116 1.141684
+v 6.813336 -2.445105 1.141684
+v 5.386664 -2.445105 1.141684
+v 39.875874 0.988831 0.873730
+v 35.669369 -0.542213 0.873730
+v 35.864628 -0.724871 1.141684
+v -13.551760 -18.926893 0.458995
+v -11.648240 -18.926893 0.458995
+v -11.648240 -19.048468 0.249998
+v -13.551760 -19.048468 0.249998
+v 37.632511 -2.381714 0.250001
+v 37.734615 -2.662243 0.250001
+v 37.543793 -2.731697 0.031147
+v 37.441689 -2.451168 0.031147
+v 36.259239 8.607832 0.031147
+v 36.157135 8.888361 0.031147
+v -19.746775 -2.835003 0.250001
+v -19.448240 -2.835003 0.250001
+v -19.448240 -3.038074 0.031147
+v -19.746775 -3.038074 0.031147
+v 14.551760 7.761927 0.031147
+v 14.551760 7.463371 0.031147
+v 14.413336 -8.145103 1.141684
+v 14.651760 -12.500565 0.873727
+v 14.651760 -8.024093 0.873730
+v -13.551760 -19.024092 0.873727
+v -13.551760 -23.500565 0.873727
+v -13.157540 -20.110180 1.407334
+v -13.313336 -19.544117 1.141681
+v -13.313336 -19.145103 1.141681
+v -11.946774 -23.209517 0.249998
+v -11.946774 -23.006443 0.031144
+v -11.648240 -23.006443 0.031144
+v -11.648240 -23.209517 0.249998
+v -19.842461 -20.110180 1.407334
+v -20.957541 -20.110180 1.407334
+v -11.946774 -19.535002 0.249998
+v -11.946774 -19.738073 0.031144
+v -11.946774 -20.036629 0.031144
+v -11.946774 -20.239700 0.249998
+v -24.951759 3.894726 0.393658
+v -24.951759 3.947720 0.858133
+v -13.253226 -20.239700 0.249998
+v 32.098740 11.355551 0.031148
+v 31.907915 11.286093 0.250004
+v 39.045273 -9.746172 0.250001
+v 38.394230 -7.957448 0.250001
+v 38.851425 -7.791044 0.250001
+v 38.953529 -8.071573 0.250001
+v 39.615726 -7.830553 0.250001
+v 39.513622 -7.550022 0.250001
+v 41.642139 -6.775307 0.250001
+v 41.744244 -7.055836 0.250001
+v 42.406441 -6.814816 0.250001
+v 42.304337 -6.534286 0.250001
+v 42.556129 -6.442642 0.250001
+v 43.207172 -8.231365 0.250001
+v 42.955379 -8.323009 0.250001
+v 42.853275 -8.042480 0.250001
+v 42.191074 -8.283500 0.250001
+v 42.293182 -8.564030 0.250001
+v 35.807659 11.315187 0.250004
+v 35.909763 11.034658 0.250002
+v 35.718941 10.965204 0.031148
+v 35.616837 11.245733 0.031148
+v 15.448240 -6.306444 0.031147
+v 15.746774 -6.306444 0.031147
+v -11.648240 -23.477467 0.249998
+v -11.648240 -23.605274 0.393655
+v -13.551760 -23.605274 0.393655
+v -13.551760 -23.477467 0.249998
+v 12.251760 -23.605274 0.393655
+v 12.251760 -23.552280 0.858130
+v -34.651760 -9.036628 0.031147
+v -34.651760 -9.239700 0.250001
+v -34.651760 -11.504818 0.250001
+v -34.651760 -11.707890 0.031145
+v -34.651760 -12.477466 0.249999
+v -34.651760 -12.605274 0.393655
+v -34.651760 -12.552280 0.858130
+v -34.651760 -12.500565 0.873727
+v -34.651760 -8.024093 0.873730
+v -34.651760 -7.926894 0.458998
+v -34.651760 -8.048468 0.250001
+v -34.651760 -8.535003 0.250001
+v -34.651760 -8.738072 0.031147
+v -13.551760 -23.209517 0.249998
+v -13.253226 -23.209517 0.249998
+v -13.253226 -22.504818 0.249998
+v -13.551760 -22.504818 0.249998
+v -13.551760 -20.239700 0.249998
+v -11.648240 -19.535002 0.249998
+v -11.648240 -20.239700 0.249998
+v -11.648240 -22.504818 0.249998
+v -11.946774 -22.504818 0.249998
+v -34.353226 -8.535003 0.250001
+v -34.353226 -8.738072 0.031147
+v -33.046776 -22.707890 0.031144
+v -21.351761 -19.024092 0.873727
+v -21.351761 -23.500565 0.873727
+v -11.946774 -22.707890 0.031144
+v -11.648240 -22.707890 0.031144
+v 9.553226 -23.006443 0.031144
+v 9.553226 -22.707890 0.031144
+v 9.851760 -22.707890 0.031144
+v 9.851760 -23.006443 0.031144
+v 38.181450 -3.889906 0.250001
+v 37.990627 -3.959362 0.031147
+v 37.710075 -4.061474 0.031147
+v 37.519253 -4.130928 0.250001
+v 10.646774 -19.535002 0.249998
+v 10.646774 -19.738073 0.031144
+v -13.551760 -23.552280 0.858130
+v -11.648240 -23.552280 0.858130
+v -11.648240 -23.500565 0.873727
+v -12.042460 -20.110180 1.407334
+v 37.621357 -4.411457 0.250001
+v 37.812180 -4.342003 0.031147
+v -34.353226 -11.707890 0.031145
+v -13.253226 -22.707890 0.031144
+v -13.253226 -23.006443 0.031144
+v 2.848240 -19.048468 0.249998
+v 2.848240 -18.926893 0.458995
+v 4.751760 -18.926893 0.458995
+v 4.751760 -19.048468 0.249998
+v 2.451760 -8.738072 0.031147
+v 2.451760 -8.535003 0.250001
+v 2.451760 -8.048468 0.250001
+v 2.451760 -7.926894 0.458998
+v 2.451760 -8.024093 0.873730
+v 2.451760 -12.500565 0.873727
+v 2.451760 -12.477466 0.249999
+v 2.451760 -11.707890 0.031145
+v 2.451760 -11.504818 0.250001
+v 2.451760 -9.239700 0.250001
+v 2.451760 -9.036628 0.031147
+v 12.251760 -19.024092 0.873727
+v 12.013336 -19.145103 1.141681
+v 12.013336 -19.544117 1.141681
+v 11.857540 -20.110180 1.407334
+v 12.251760 -23.500565 0.873727
+v 27.251760 -22.707890 0.031144
+v 27.251760 -22.504818 0.249998
+v 27.251760 -20.239700 0.249998
+v 27.251760 -20.036629 0.031144
+v 27.251760 -19.738073 0.031144
+v 27.251760 -19.535002 0.249998
+v 27.251760 -19.048468 0.249998
+v 27.251760 -18.926893 0.458995
+v 27.251760 -19.024092 0.873727
+v 27.251760 -23.605274 0.393655
+v 27.251760 -23.477467 0.249998
+v 27.251760 -23.209517 0.249998
+v 27.251760 -23.006443 0.031144
+v 39.022369 -9.754509 0.873730
+v 43.228878 -8.223465 0.873730
+v 39.908127 -9.012599 1.407337
+v 39.429485 -9.352605 1.141684
+v 39.054535 -9.489075 1.141684
+v 27.820904 0.582512 0.031147
+v 27.540354 0.480400 0.031147
+v 7.948240 4.022533 0.250001
+v 9.851760 4.022533 0.250001
+v 9.851760 3.894726 0.393658
+v 7.948240 3.894726 0.393658
+v 15.448240 -3.038074 0.031147
+v 15.746774 -3.038074 0.031147
+v 15.746774 -3.336628 0.031147
+v 15.448240 -3.336628 0.031147
+v -21.351761 -6.007889 0.031147
+v -21.053226 -6.007889 0.031147
+v -21.053226 -6.306444 0.031147
+v -21.351761 -6.306444 0.031147
+v -15.653226 -23.209517 0.249998
+v -15.653226 -22.504818 0.249998
+v -15.653226 -20.239700 0.249998
+v -15.653226 -19.535002 0.249998
+v -14.346774 -19.535002 0.249998
+v -14.346774 -20.239700 0.249998
+v -14.346774 -23.209517 0.249998
+v 32.797604 7.347897 0.873730
+v 32.829769 7.613331 1.141684
+v 32.341820 8.953962 1.141684
+v 32.146561 9.136621 0.873730
+v 32.055222 9.103376 0.458998
+v 32.706264 7.314653 0.458998
+v -14.346774 -20.036629 0.031144
+v -14.346774 -19.738073 0.031144
+v 17.848240 -6.852282 0.858133
+v 17.848240 -2.226894 0.458998
+v 17.848240 -3.038074 0.031147
+v 17.848240 -3.336628 0.031147
+v 17.848240 -6.007889 0.031147
+v 17.848240 -6.306444 0.031147
+v -15.653226 -20.036629 0.031144
+v -15.653226 -19.738073 0.031144
+v -21.351761 -5.804819 0.250001
+v -21.053226 -5.804819 0.250001
+v 14.353226 -11.707890 0.031145
+v 14.353226 -11.504818 0.250001
+v 14.651760 -11.504818 0.250001
+v 14.651760 -11.707890 0.031145
+v 17.053226 -6.007889 0.031147
+v 17.351761 -6.007889 0.031147
+v 17.351761 -6.306444 0.031147
+v 17.053226 -6.306444 0.031147
+v 24.247299 10.994650 0.250002
+v 24.056475 10.925196 0.031148
+v 23.954370 11.205725 0.031148
+v 24.145195 11.275179 0.250004
+v 25.348240 -22.504818 0.249998
+v 25.646774 -22.504818 0.249998
+v 4.453226 4.290485 0.250001
+v 6.753226 -2.835003 0.250001
+v 7.051760 -2.835003 0.250001
+v 7.051760 -3.038074 0.031147
+v 6.753226 -3.038074 0.031147
+v -29.651760 -19.738073 0.031144
+v -2.751760 -5.804819 0.250001
+v -2.453226 -5.804819 0.250001
+v -2.453226 -6.007889 0.031147
+v -2.751760 -6.007889 0.031147
+v 21.534149 8.299150 0.031147
+v 21.343325 8.229696 0.250001
+v 21.241220 8.510229 0.250001
+v 21.432045 8.579683 0.031147
+v -21.351761 -23.006443 0.031144
+v -21.351761 -22.707890 0.031144
+v -21.053226 -22.707890 0.031144
+v -21.053226 -23.006443 0.031144
+v -2.453226 -6.509516 0.250001
+v -2.751760 -6.509516 0.250001
+v -2.751760 -6.306444 0.031147
+v -2.453226 -6.306444 0.031147
+v -15.557540 -20.110180 1.407334
+v -14.442460 -20.110180 1.407334
+v -15.713336 -19.544117 1.141681
+v -14.286664 -19.544117 1.141681
+v 27.271965 2.090706 0.031147
+v 27.374071 1.810175 0.031147
+v 7.948240 -19.535002 0.249998
+v 8.246774 -19.535002 0.249998
+v 8.246774 -19.738073 0.031144
+v 7.948240 -19.738073 0.031144
+v -14.346774 -23.006443 0.031144
+v 2.153226 -9.036628 0.031147
+v 2.153226 -8.738072 0.031147
+v 5.148240 -2.324093 0.873730
+v 7.051760 -2.324093 0.873730
+v 7.051760 -2.226894 0.458998
+v 5.148240 -2.226894 0.458998
+v 4.453226 -19.535002 0.249998
+v 4.453226 -19.738073 0.031144
+v -32.748241 -8.048468 0.250001
+v -32.748241 -8.535003 0.250001
+v -33.046776 -8.535003 0.250001
+v -33.046776 -9.239700 0.250001
+v -32.748241 -9.239700 0.250001
+v -32.748241 -11.504818 0.250001
+v -33.046776 -11.504818 0.250001
+v -32.748241 -12.477466 0.249999
+v -34.353226 -11.504818 0.250001
+v -34.353226 -9.239700 0.250001
+v 3.146774 -19.738073 0.031144
+v 3.146774 -19.535002 0.249998
+v 19.751760 -3.038074 0.031147
+v 19.453226 -3.038074 0.031147
+v 18.146774 -3.038074 0.031147
+v 18.146774 -3.336628 0.031147
+v -25.348240 -19.535002 0.249998
+v -25.348240 -19.738073 0.031144
+v 2.848240 7.761927 0.031147
+v 2.848240 7.964998 0.250001
+v 3.146774 7.964998 0.250001
+v 3.146774 7.761927 0.031147
+v 2.848240 -23.477467 0.249998
+v 4.751760 -23.477467 0.249998
+v 27.642458 0.199871 0.031147
+v 9.851760 4.493555 0.031147
+v 9.851760 4.290485 0.250001
+v 22.948240 -23.605274 0.393655
+v 22.948240 -23.477467 0.249998
+v 24.851761 -23.477467 0.249998
+v 24.851761 -23.605274 0.393655
+v -34.651760 8.451532 0.250001
+v -32.748241 8.451532 0.250001
+v 3.146774 -22.504818 0.249998
+v 2.848240 -22.504818 0.249998
+v 2.848240 -19.535002 0.249998
+v 4.751760 -19.535002 0.249998
+v 4.751760 -22.504818 0.249998
+v 4.453226 -22.504818 0.249998
+v 4.453226 -23.209517 0.249998
+v 4.751760 -23.209517 0.249998
+v 40.972164 -2.874170 0.250001
+v 41.074268 -3.154699 0.250001
+v 40.883446 -3.224155 0.031147
+v 40.781338 -2.943624 0.031147
+v 3.242460 -20.110180 1.407334
+v 4.357540 -20.110180 1.407334
+v 4.513336 -19.544117 1.141681
+v 3.086664 -19.544117 1.141681
+v -13.551760 -22.707890 0.031144
+v -13.551760 -23.006443 0.031144
+v 12.251760 -18.926893 0.458995
+v 12.251760 -19.048468 0.249998
+v -21.551760 3.894726 0.393658
+v -19.648239 3.894726 0.393658
+v -19.648239 3.947720 0.858133
+v -21.551760 3.947720 0.858133
+v 36.183262 11.134203 0.873731
+v 36.231857 11.151892 0.858134
+v 32.481133 11.392900 1.407339
+v 32.862511 10.345068 1.407339
+v 33.646969 7.974735 0.031147
+v 33.749073 7.694204 0.031147
+v 2.848240 3.894726 0.393658
+v 2.848240 3.947720 0.858133
+v 2.848240 3.999435 0.873730
+v 2.848240 8.475908 0.873730
+v 2.848240 8.573107 0.458998
+v 2.848240 8.451532 0.250001
+v 2.848240 7.463371 0.031147
+v 2.848240 7.260300 0.250001
+v 2.848240 4.995182 0.250001
+v 2.848240 4.792110 0.031147
+v 2.848240 4.022533 0.250001
+v 5.148240 -6.852282 0.858133
+v 5.148240 -6.800564 0.873730
+v 5.148240 -2.348469 0.250001
+v 5.148240 -2.835003 0.250001
+v 5.148240 -3.038074 0.031147
+v 5.148240 -3.336628 0.031147
+v 5.148240 -3.539700 0.250001
+v 5.148240 -6.306444 0.031147
+v 5.148240 -6.509516 0.250001
+v 11.953226 -19.535002 0.249998
+v 11.953226 -20.239700 0.249998
+v 10.646774 -20.036629 0.031144
+v 10.646774 -20.239700 0.249998
+v 7.948240 -23.552280 0.858130
+v 9.851760 -23.552280 0.858130
+v 9.851760 -23.500565 0.873727
+v 9.457540 -20.110180 1.407334
+v 8.342460 -20.110180 1.407334
+v 7.948240 -23.500565 0.873727
+v 37.102505 8.914755 0.393658
+v 36.451462 10.703478 0.393659
+v 36.401665 10.685354 0.858133
+v 37.052708 8.896627 0.858133
+v -24.653227 4.493555 0.031147
+v -24.951759 4.493555 0.031147
+v 39.974270 1.024643 0.393658
+v 39.854168 0.980930 0.250001
+v 39.602379 0.889286 0.250001
+v 39.411552 0.819832 0.031147
+v 39.131004 0.717720 0.031147
+v 38.940178 0.648266 0.250001
+v 36.811665 -0.126451 0.250001
+v 36.620838 -0.195906 0.031147
+v 36.340290 -0.298018 0.031147
+v 36.149464 -0.367472 0.250001
+v 35.692272 -0.533876 0.250001
+v 35.578030 -0.575457 0.458998
+v 39.924473 1.006519 0.858133
+v -33.046776 4.493555 0.031147
+v -33.046776 4.792110 0.031147
+v -32.748241 4.792110 0.031147
+v -32.748241 4.493555 0.031147
+v 12.251760 -23.209517 0.249998
+v 12.251760 -23.477467 0.249998
+v 10.646774 -23.209517 0.249998
+v 10.646774 -22.504818 0.249998
+v 12.251760 -19.535002 0.249998
+v 12.251760 -20.239700 0.249998
+v 12.251760 -22.504818 0.249998
+v 12.748240 -12.552280 0.858130
+v 14.651760 -12.552280 0.858130
+v 12.151760 7.761927 0.031147
+v 12.151760 7.463371 0.031147
+v 4.751760 -19.738073 0.031144
+v 13.046774 -12.006444 0.031145
+v 12.748240 -12.006444 0.031145
+v 42.764557 -8.392464 0.031147
+v 42.484005 -8.494576 0.031147
+v 42.381901 -8.214046 0.031147
+v 42.662449 -8.111934 0.031147
+v -29.651760 -22.707890 0.031144
+v -29.651760 -23.006443 0.031144
+v -29.651760 -23.605274 0.393655
+v -29.651760 -20.036629 0.031144
+v 23.725039 0.546005 1.141684
+v 23.529779 0.728661 0.873730
+v 23.438442 0.695417 0.458998
+v 24.089485 -1.093306 0.458998
+v 24.180820 -1.060062 0.873730
+v 24.212990 -0.794628 1.141684
+v 28.387329 0.470982 0.873730
+v 28.435926 0.488668 0.858133
+v 27.784885 2.277393 0.858133
+v 27.736286 2.259705 0.873730
+v 24.685200 0.729679 1.407337
+v 25.066580 -0.318153 1.407337
+v 10.742460 -20.110180 1.407334
+v 12.151760 8.573107 0.458998
+v 24.851744 -0.815866 0.031147
+v 24.749640 -0.535336 0.031147
+v 12.946774 7.761927 0.031147
+v 12.946774 7.463371 0.031147
+v 10.586664 -19.544117 1.141681
+v 40.575516 -0.782206 0.858133
+v 40.625313 -0.764080 0.393658
+v 38.092731 -4.239891 0.031147
+v 38.283554 -4.170437 0.250001
+v -34.353226 -9.036628 0.031147
+v 4.353226 -6.509516 0.250001
+v 4.353226 -6.306444 0.031147
+v 39.144352 -8.002119 0.031147
+v 39.042248 -7.721588 0.031147
+v 39.322800 -7.619476 0.031147
+v 39.424904 -7.900007 0.031147
+v -33.046776 -9.036628 0.031147
+v -32.748241 -9.036628 0.031147
+v -1.086664 -2.844116 1.141684
+v -2.513336 -2.844116 1.141684
+v 27.923008 0.301983 0.031147
+v 9.553226 -22.504818 0.249998
+v 9.851760 -22.504818 0.249998
+v 9.553226 -20.036629 0.031144
+v 9.553226 -20.239700 0.249998
+v 25.348240 -18.926893 0.458995
+v 25.348240 -19.048468 0.249998
+v -0.848240 -3.336628 0.031147
+v -0.848240 -3.539700 0.250001
+v -1.146774 -3.539700 0.250001
+v -1.146774 -3.336628 0.031147
+v 8.246774 -20.036629 0.031144
+v 8.246774 -20.239700 0.249998
+v -32.748241 -12.605274 0.393655
+v 33.204720 7.749802 1.141684
+v 32.716766 9.090433 1.141684
+v -1.146774 -2.835003 0.250001
+v -1.146774 -3.038074 0.031147
+v 28.046774 -19.535002 0.249998
+v 28.046774 -19.738073 0.031144
+v -34.651760 7.964998 0.250001
+v -34.353226 7.964998 0.250001
+v -34.353226 7.761927 0.031147
+v -34.651760 7.761927 0.031147
+v -19.746775 -19.738073 0.031144
+v 32.456852 9.777903 0.250001
+v 32.354748 10.058432 0.250001
+v 32.545570 10.127886 0.031147
+v 32.647675 9.847357 0.031147
+v 17.351761 -3.336628 0.031147
+v 17.053226 -3.336628 0.031147
+v 9.851760 -23.477467 0.249998
+v 9.851760 -23.605274 0.393655
+v 7.948240 -23.605274 0.393655
+v 7.948240 -23.477467 0.249998
+v -1.146774 -6.306444 0.031147
+v -1.146774 -6.007889 0.031147
+v -0.848240 -6.007889 0.031147
+v -0.848240 -6.306444 0.031147
+v 8.246774 7.463371 0.031147
+v 8.246774 7.761927 0.031147
+v 8.246774 7.964998 0.250001
+v 8.246774 7.260300 0.250001
+v 23.775925 10.823084 0.031148
+v 23.673820 11.103613 0.031148
+v -11.648240 -19.024092 0.873727
+v -11.886663 -19.145103 1.141681
+v -11.886663 -19.544117 1.141681
+v 12.251760 -23.006443 0.031144
+v 29.353226 -23.209517 0.249998
+v 29.353226 -23.006443 0.031144
+v 29.651760 -23.006443 0.031144
+v 29.651760 -23.209517 0.249998
+v 31.999659 9.611498 0.250001
+v 31.885416 9.569914 0.458998
+v 9.553226 -23.209517 0.249998
+v 38.566586 -8.148441 1.141684
+v 38.371326 -7.965785 0.873730
+v 38.279991 -7.999028 0.458998
+v 38.931030 -9.787752 0.458998
+v 15.448240 -6.800564 0.873730
+v 15.842460 -3.410181 1.407337
+v 15.686664 -2.844116 1.141684
+v 15.686664 -2.445105 1.141684
+v 15.448240 -2.324093 0.873730
+v 2.748240 -6.007889 0.031147
+v 3.046774 -6.007889 0.031147
+v 3.046774 -6.306444 0.031147
+v 2.748240 -6.306444 0.031147
+v 29.651760 -18.926893 0.458995
+v 29.651760 -19.048468 0.249998
+v -21.351761 -23.605274 0.393655
+v -21.351761 -23.552280 0.858130
+v 15.448240 -6.905273 0.393658
+v 17.351761 -6.905273 0.393658
+v 17.351761 -6.852282 0.858133
+v 15.448240 -6.852282 0.858133
+v 27.093521 1.708063 0.031147
+v 26.991417 1.988594 0.031147
+v 29.353226 -20.036629 0.031144
+v 29.353226 -20.239700 0.249998
+v 29.353226 -19.535002 0.249998
+v 29.353226 -19.738073 0.031144
+v 28.046774 -20.239700 0.249998
+v 28.046774 -20.036629 0.031144
+v -21.351761 -19.738073 0.031144
+v -21.053226 -19.738073 0.031144
+v 26.953226 -22.504818 0.249998
+v 26.953226 -22.707890 0.031144
+v 26.953226 -23.006443 0.031144
+v 26.953226 -23.209517 0.249998
+v 33.366421 7.872623 0.031147
+v 33.468525 7.592093 0.031147
+v 39.526749 -7.964767 1.407337
+v 38.941536 -8.011971 1.141684
+v -33.046776 4.995182 0.250001
+v -33.046776 4.290485 0.250001
+v 28.046774 -23.209517 0.249998
+v 28.046774 -22.504818 0.249998
+v 29.651760 -19.535002 0.249998
+v 29.651760 -20.239700 0.249998
+v 35.710300 10.116022 0.031147
+v 35.608196 10.396555 0.031147
+v 28.046774 -22.707890 0.031144
+v -27.748240 -23.605274 0.393655
+v 29.651760 -23.552280 0.858130
+v 29.651760 -23.500565 0.873727
+v 28.046774 -23.006443 0.031144
+v 36.442394 -0.578547 0.031147
+v 36.251572 -0.648003 0.250001
+v 26.953226 -19.535002 0.249998
+v 26.953226 -20.239700 0.249998
+v 25.348240 -23.477467 0.249998
+v 25.348240 -23.209517 0.249998
+v 25.646774 -23.209517 0.249998
+v 25.348240 -20.239700 0.249998
+v 25.646774 -20.239700 0.249998
+v 25.646774 -19.535002 0.249998
+v 25.348240 -19.535002 0.249998
+v 25.348240 -23.605274 0.393655
+v 25.348240 -19.024092 0.873727
+v 25.348240 -19.738073 0.031144
+v 25.348240 -20.036629 0.031144
+v -32.986664 -19.544117 1.141681
+v 0.548240 -11.707890 0.031145
+v 0.846774 -11.707890 0.031145
+v 0.846774 -12.006444 0.031145
+v 0.548240 -12.006444 0.031145
+v -19.746775 -20.036629 0.031144
+v 0.548240 -9.239700 0.250001
+v 0.548240 -11.504818 0.250001
+v 0.548240 -12.209516 0.249999
+v 0.548240 -12.477466 0.249999
+v 0.548240 -12.500565 0.873727
+v 0.548240 -8.024093 0.873730
+v 0.548240 -7.926894 0.458998
+v 0.548240 -8.048468 0.250001
+v 0.548240 -8.535003 0.250001
+v 0.548240 -8.738072 0.031147
+v 0.548240 -9.036628 0.031147
+v -23.346773 4.792110 0.031147
+v -23.346773 4.493555 0.031147
+v 26.953226 -20.036629 0.031144
+v 26.953226 -19.738073 0.031144
+v 25.646774 -20.036629 0.031144
+v 25.646774 -19.738073 0.031144
+v 0.846774 -8.738072 0.031147
+v 0.846774 -9.036628 0.031147
+v 2.848240 -19.738073 0.031144
+v 24.553226 -22.707890 0.031144
+v 24.553226 -22.504818 0.249998
+v 24.851761 -22.504818 0.249998
+v 24.851761 -22.707890 0.031144
+v 29.651760 -19.738073 0.031144
+v 15.448240 -2.226894 0.458998
+v 2.748240 -5.804819 0.250001
+v 3.046774 -5.804819 0.250001
+v -24.951759 7.260300 0.250001
+v -24.951759 7.463371 0.031147
+v -24.653227 7.463371 0.031147
+v -24.653227 7.260300 0.250001
+v 27.013336 -19.544117 1.141681
+v 25.586664 -19.544117 1.141681
+v 35.438389 10.863092 0.031148
+v 35.336285 11.143621 0.031148
+v -21.053226 -20.036629 0.031144
+v -21.351761 -20.036629 0.031144
+v 9.851760 3.947720 0.858133
+v 7.948240 3.947720 0.858133
+v 27.986664 -19.145103 1.141681
+v 32.928226 9.949469 0.031147
+v 32.826122 10.229998 0.031147
+v -34.353226 4.290485 0.250001
+v -34.651760 4.290485 0.250001
+v -34.651760 4.493555 0.031147
+v -34.353226 4.493555 0.031147
+v -21.113337 -2.844116 1.141684
+v -19.686665 -2.844116 1.141684
+v -19.686665 -2.445105 1.141684
+v -21.113337 -2.445105 1.141684
+v 35.990852 10.218134 0.031147
+v 35.888744 10.498667 0.031148
+v 19.453226 -6.007889 0.031147
+v 19.453226 -6.306444 0.031147
+v -25.348240 -19.048468 0.249998
+v -25.348240 -18.926893 0.458995
+v -25.348240 -19.024092 0.873727
+v -25.348240 -23.209517 0.249998
+v -25.348240 -23.006443 0.031144
+v -25.348240 -22.707890 0.031144
+v -25.348240 -22.504818 0.249998
+v -25.348240 -20.239700 0.249998
+v -25.348240 -20.036629 0.031144
+v 23.186665 -19.544117 1.141681
+v 24.613337 -19.544117 1.141681
+v 24.613337 -19.145103 1.141681
+v 23.186665 -19.145103 1.141681
+v 4.453226 -22.707890 0.031144
+v 4.751760 -22.707890 0.031144
+v 4.751760 -23.006443 0.031144
+v 4.453226 -23.006443 0.031144
+v 36.437683 8.990473 0.031147
+v -2.751760 -3.336628 0.031147
+v -2.751760 -3.038074 0.031147
+v -33.046776 7.463371 0.031147
+v -33.046776 7.761927 0.031147
+v -32.748241 7.761927 0.031147
+v -32.748241 7.463371 0.031147
+v 35.360828 12.542852 0.250004
+v 35.170002 12.473398 0.031150
+v 24.587938 -0.658159 1.141684
+v 24.099987 0.682474 1.141684
+v -1.146774 -5.804819 0.250001
+v -1.146774 -6.509516 0.250001
+v -0.848240 -6.509516 0.250001
+v -0.848240 -6.777466 0.250001
+v -2.751760 -6.777466 0.250001
+v -2.751760 -3.539700 0.250001
+v -2.751760 -2.835003 0.250001
+v -2.751760 -2.348469 0.250001
+v -0.848240 -2.348469 0.250001
+v -0.848240 -2.835003 0.250001
+v -0.848240 -5.804819 0.250001
+v 37.141258 -4.586199 0.873730
+v 37.548374 -4.184296 1.141684
+v 37.173424 -4.320766 1.141684
+v 4.513336 8.354895 1.141684
+v 4.513336 7.955885 1.141684
+v 4.357540 7.389818 1.407337
+v 40.795116 -1.230619 0.393658
+v 40.675018 -1.274332 0.250001
+v 39.951851 -1.537542 0.031147
+v 39.761028 -1.606997 0.250001
+v 37.161137 -2.553280 0.031147
+v 36.970314 -2.622734 0.250001
+v 36.513123 -2.789139 0.250001
+v 36.398880 -2.830719 0.458998
+v 36.490215 -2.797476 0.873730
+v 36.320408 -2.330936 0.873730
+v 36.352577 -2.065504 1.141684
+v 36.229073 -2.364182 0.458998
+v -23.346773 4.995182 0.250001
+v -23.346773 4.290485 0.250001
+v 3.086664 7.955885 1.141684
+v 3.086664 8.354895 1.141684
+v -33.046776 -23.006443 0.031144
+v 5.446774 -3.539700 0.250001
+v 5.446774 -3.336628 0.031147
+v 5.446774 -3.038074 0.031147
+v 5.446774 -2.835003 0.250001
+v 31.976753 9.603159 0.873730
+v -33.046776 -8.738072 0.031147
+v -32.748241 -8.738072 0.031147
+v -32.986664 7.955885 1.141684
+v 14.551760 4.493555 0.031147
+v -34.651760 -20.036629 0.031144
+v 14.551760 8.475908 0.873730
+v 14.551760 8.573107 0.458998
+v 2.748240 -6.509516 0.250001
+v 3.046774 -6.509516 0.250001
+v 3.146774 7.463371 0.031147
+v 3.146774 7.260300 0.250001
+v -25.586664 -19.145103 1.141681
+v -25.586664 -19.544117 1.141681
+v -24.713337 7.955885 1.141684
+v -23.286663 7.955885 1.141684
+v 0.846774 -9.239700 0.250001
+v 12.748240 -8.535003 0.250001
+v 13.046774 -8.535003 0.250001
+v 17.351761 -2.324093 0.873730
+v 17.351761 -2.226894 0.458998
+v 17.113337 -2.445105 1.141684
+v 5.542460 -3.410181 1.407337
+v 6.657540 -3.410181 1.407337
+v -19.648239 7.260300 0.250001
+v -19.648239 7.463371 0.031147
+v 7.948240 -22.707890 0.031144
+v 7.948240 -22.504818 0.249998
+v 19.513336 -2.445105 1.141684
+v -32.986664 -19.145103 1.141681
+v 3.146774 4.792110 0.031147
+v 3.146774 4.995182 0.250001
+v -21.551760 3.999435 0.873730
+v -21.313335 8.354895 1.141684
+v -21.551760 8.475908 0.873730
+v 2.748240 -6.800564 0.873730
+v 2.748240 -2.324093 0.873730
+v 2.748240 -2.226894 0.458998
+v 2.748240 -2.348469 0.250001
+v 2.748240 -2.835003 0.250001
+v 2.748240 -3.038074 0.031147
+v 2.748240 -3.336628 0.031147
+v 2.748240 -3.539700 0.250001
+v 2.748240 -6.777466 0.250001
+v 2.748240 -6.905273 0.393658
+v 2.748240 -6.852282 0.858133
+v -23.346773 7.260300 0.250001
+v 19.751760 -6.007889 0.031147
+v 0.786664 -8.145103 1.141684
+v 2.213336 -8.145103 1.141684
+v 17.113337 -2.844116 1.141684
+v 3.146774 -22.707890 0.031144
+v 2.848240 -22.707890 0.031144
+v 40.151318 -0.618908 0.250001
+v 40.253422 -0.899437 0.250001
+v 40.062595 -0.968893 0.031147
+v 39.960491 -0.688362 0.031147
+v 7.948240 -19.024092 0.873727
+v -0.848240 -2.324093 0.873730
+v -1.086664 -2.445105 1.141684
+v 3.046774 -3.539700 0.250001
+v 3.046774 -2.835003 0.250001
+v 4.353226 -3.539700 0.250001
+v 4.353226 -5.804819 0.250001
+v -24.951759 8.451532 0.250001
+v 3.046774 -3.038074 0.031147
+v -28.046774 -23.006443 0.031144
+v 3.142460 -3.410181 1.407337
+v 4.257540 -3.410181 1.407337
+v 4.413336 -2.844116 1.141684
+v 2.986664 -2.844116 1.141684
+v -24.951759 7.761927 0.031147
+v -24.951759 7.964998 0.250001
+v -24.653227 7.964998 0.250001
+v -24.653227 7.761927 0.031147
+v -21.351761 -3.336628 0.031147
+v -21.351761 -3.038074 0.031147
+v -21.053226 -3.038074 0.031147
+v -21.053226 -3.336628 0.031147
+v 20.120848 9.810434 0.458998
+v 20.771889 8.021711 0.458998
+v 20.863226 8.054956 0.873730
+v 20.895393 8.320391 1.141684
+v 14.551760 4.792110 0.031147
+v 9.553226 7.761927 0.031147
+v 9.553226 7.964998 0.250001
+v 9.851760 7.964998 0.250001
+v 9.851760 7.761927 0.031147
+v -21.551760 4.995182 0.250001
+v -21.253225 4.995182 0.250001
+v 22.948240 -22.707890 0.031144
+v 22.948240 -22.504818 0.249998
+v 23.246775 -22.504818 0.249998
+v 23.246775 -22.707890 0.031144
+v -21.053226 -6.509516 0.250001
+v -21.351761 -6.509516 0.250001
+v -32.748241 4.290485 0.250001
+v 9.851760 -23.209517 0.249998
+v 7.051760 -6.306444 0.031147
+v 7.051760 -6.509516 0.250001
+v 6.753226 -6.509516 0.250001
+v 6.753226 -6.306444 0.031147
+v 6.753226 -6.007889 0.031147
+v 6.753226 -5.804819 0.250001
+v 7.051760 -5.804819 0.250001
+v 7.051760 -6.007889 0.031147
+v -32.748241 4.995182 0.250001
+v 32.919586 9.100286 0.031147
+v 33.200138 9.202398 0.031147
+v -19.648239 4.792110 0.031147
+v -27.251760 -20.036629 0.031144
+v -27.251760 -20.239700 0.249998
+v 6.753226 -3.336628 0.031147
+v 6.753226 -3.539700 0.250001
+v -21.551760 8.573107 0.458998
+v -21.551760 8.451532 0.250001
+v -21.551760 7.964998 0.250001
+v -21.551760 7.761927 0.031147
+v -21.551760 7.463371 0.031147
+v -21.551760 7.260300 0.250001
+v -21.551760 4.290485 0.250001
+v -21.551760 4.022533 0.250001
+v -2.513336 -2.445105 1.141684
+v -34.651760 -23.605274 0.393655
+v 7.948240 7.463371 0.031147
+v 7.948240 7.761927 0.031147
+v -32.748241 -12.552280 0.858130
+v 14.551760 3.947720 0.858133
+v 4.353226 -3.336628 0.031147
+v -21.351761 -6.905273 0.393658
+v -19.448240 -6.905273 0.393658
+v 17.351761 -6.800564 0.873730
+v 16.957541 -3.410181 1.407337
+v -27.013336 -19.544117 1.141681
+v -27.013336 -19.145103 1.141681
+v 0.846774 -8.535003 0.250001
+v -11.648240 -20.036629 0.031144
+v -11.648240 -19.738073 0.031144
+v 37.004108 8.878942 0.873730
+v 33.683361 8.089808 1.407337
+v 8.186664 7.955885 1.141684
+v 8.186664 8.354895 1.141684
+v 33.016945 10.299452 0.250001
+v 33.119049 10.018923 0.250001
+v 42.577835 -6.434742 0.873730
+v 42.113514 -6.603741 0.031147
+v 41.832962 -6.705853 0.031147
+v -19.886663 8.354895 1.141684
+v -19.648239 8.475908 0.873730
+v -19.648239 8.573107 0.458998
+v -34.651760 -19.738073 0.031144
+v 22.948240 -23.552280 0.858130
+v 24.851761 -23.552280 0.858130
+v 24.851761 -23.500565 0.873727
+v 24.457541 -20.110180 1.407334
+v 23.342461 -20.110180 1.407334
+v 22.948240 -23.500565 0.873727
+v 37.164162 -4.577862 0.250001
+v 37.072418 -2.903265 0.250001
+v 39.863132 -1.887527 0.250001
+v 41.326061 -3.063055 0.250001
+v 40.309967 -3.115191 0.250001
+v 40.412071 -3.395721 0.250001
+v 37.049919 -4.619442 0.458998
+v 36.685474 -2.980131 1.141684
+v 20.794386 9.737890 0.250001
+v 20.692282 10.018423 0.250001
+v 25.069735 9.586000 0.873730
+v 25.118332 9.603689 0.858133
+v 24.467289 11.392412 0.858134
+v -33.046776 -11.707890 0.031145
+v -32.748241 -11.707890 0.031145
+v 22.948240 -19.738073 0.031144
+v 22.948240 -19.535002 0.249998
+v 23.246775 -19.535002 0.249998
+v 23.246775 -19.738073 0.031144
+v -34.651760 -23.006443 0.031144
+v 2.153226 -8.535003 0.250001
+v 4.453226 7.964998 0.250001
+v 4.453226 7.260300 0.250001
+v 4.453226 4.995182 0.250001
+v -21.053226 -3.539700 0.250001
+v -21.351761 -3.539700 0.250001
+v 36.539787 8.709940 0.031147
+v -34.257542 -9.110181 1.407337
+v -34.413338 -8.544116 1.141684
+v -34.413338 -8.145103 1.141684
+v 7.948240 8.475908 0.873730
+v 9.851760 8.573107 0.458998
+v 7.948240 8.573107 0.458998
+v 39.591221 -1.140459 0.250001
+v 39.489117 -0.859928 0.250001
+v 39.679943 -0.790474 0.031147
+v 39.782047 -1.071005 0.031147
+v 40.602894 -3.326265 0.031147
+v 40.500790 -3.045736 0.031147
+v 41.935066 -6.986382 0.031147
+v 42.215618 -6.884270 0.031147
+v 36.722942 -0.476435 0.031147
+v 36.343315 -2.322599 0.250001
+v 37.263245 -2.833809 0.031147
+v 40.505211 -0.807793 0.250001
+v 40.526917 -0.799892 0.873730
+v 36.800507 -2.156195 0.250001
+v 36.991333 -2.086740 0.031147
+v 37.271881 -1.984629 0.031147
+v 37.462708 -1.915174 0.250001
+v 41.446159 -3.019342 0.393658
+v 9.851760 -20.239700 0.249998
+v 9.851760 -20.036629 0.031144
+v 37.360603 -1.634644 0.250001
+v 37.169777 -1.704100 0.031147
+v 36.889229 -1.806211 0.031147
+v 36.698402 -1.875666 0.250001
+v 13.046774 -9.239700 0.250001
+v 36.913769 -0.406981 0.250001
+v 39.042286 0.367735 0.250001
+v 39.704483 0.608755 0.250001
+v 0.846774 -12.209516 0.249999
+v 0.846774 -11.504818 0.250001
+v 2.153226 -9.239700 0.250001
+v 2.153226 -11.504818 0.250001
+v 24.553226 -23.209517 0.249998
+v 24.553226 -23.006443 0.031144
+v 24.851761 -23.006443 0.031144
+v 24.851761 -23.209517 0.249998
+v 4.353226 -6.007889 0.031147
+v 14.353226 -8.738072 0.031147
+v 14.651760 -8.738072 0.031147
+v 14.651760 -9.036628 0.031147
+v 14.353226 -9.036628 0.031147
+v 39.233109 0.437189 0.031147
+v 39.513657 0.539301 0.031147
+v 7.948240 4.995182 0.250001
+v 8.246774 4.995182 0.250001
+v 10.646774 -23.006443 0.031144
+v 22.948240 -19.024092 0.873727
+v 24.851761 -19.024092 0.873727
+v 7.948240 -23.006443 0.031144
+v -34.651760 4.995182 0.250001
+v -34.353226 4.995182 0.250001
+v -34.353226 4.792110 0.031147
+v -34.651760 4.792110 0.031147
+v 40.053959 -1.818073 0.031147
+v -34.651760 7.463371 0.031147
+v -34.353226 7.463371 0.031147
+v 7.948240 7.260300 0.250001
+v -19.648239 8.451532 0.250001
+v 27.834682 2.295517 0.393658
+v 28.485723 0.506794 0.393658
+v 25.168129 9.621813 0.393658
+v 24.517086 11.410536 0.393661
+v 7.051760 -6.852282 0.858133
+v 7.051760 -6.800564 0.873730
+v 35.247566 10.793638 0.250002
+v 36.161556 11.126303 0.250002
+v 36.281654 11.170015 0.393659
+v 24.302807 0.692327 0.031147
+v 24.200703 0.972857 0.031147
+v 19.751760 -2.226894 0.458998
+v -21.351761 -2.324093 0.873730
+v -0.848240 -2.226894 0.458998
+v -2.751760 -2.226894 0.458998
+v -2.751760 -2.324093 0.873730
+v 2.153226 -11.707890 0.031145
+v 14.353226 -9.239700 0.250001
+v 14.651760 -9.239700 0.250001
+v 4.453226 7.463371 0.031147
+v -19.448240 -2.324093 0.873730
+v 35.145462 11.074167 0.250002
+v 34.698627 12.301832 0.250004
+v 34.889454 12.371286 0.031150
+v 9.851760 4.995182 0.250001
+v 9.851760 4.792110 0.031147
+v 24.481251 1.074968 0.031147
+v 24.583357 0.794439 0.031147
+v 14.353226 -12.209516 0.249999
+v 14.353226 -12.006444 0.031145
+v 14.651760 -12.006444 0.031145
+v 14.651760 -12.209516 0.249999
+v -19.648239 3.999435 0.873730
+v -34.413338 7.955885 1.141684
+v -19.448240 -2.348469 0.250001
+v -19.448240 -2.226894 0.458998
+v -19.448240 -6.777466 0.250001
+v -32.748241 7.260300 0.250001
+v -32.748241 7.964998 0.250001
+v 32.817482 9.380816 0.031147
+v 33.301979 9.137640 1.407337
+v 19.751760 -6.306444 0.031147
+v 21.354481 10.259443 0.250001
+v 21.456585 9.978910 0.250001
+v 13.046774 -12.209516 0.249999
+v 12.748240 -12.209516 0.249999
+v -21.053226 -2.835003 0.250001
+v 7.051760 -3.539700 0.250001
+v 7.051760 -3.336628 0.031147
+v 7.051760 -2.348469 0.250001
+v -2.751760 -6.905273 0.393658
+v 17.053226 -3.038074 0.031147
+v 17.351761 -3.038074 0.031147
+v -19.648239 4.022533 0.250001
+v -21.253225 4.290485 0.250001
+v -19.648239 7.964998 0.250001
+v -19.648239 4.995182 0.250001
+v -32.748241 -7.926894 0.458998
+v 12.251760 -22.707890 0.031144
+v -27.748240 -23.006443 0.031144
+v -32.748241 -8.024093 0.873730
+v -32.748241 -12.500565 0.873727
+v 33.098034 9.482927 0.031147
+v -27.251760 -19.024092 0.873727
+v -27.251760 -18.926893 0.458995
+v 14.551760 3.999435 0.873730
+v 12.748240 -12.477466 0.249999
+v 12.748240 -12.605274 0.393655
+v 12.748240 -7.926894 0.458998
+v 12.748240 -8.048468 0.250001
+v 12.748240 -9.239700 0.250001
+v 14.651760 -12.605274 0.393655
+v 29.651760 -19.024092 0.873727
+v 29.413336 -19.145103 1.141681
+v 0.786664 -8.544116 1.141684
+v 2.213336 -8.544116 1.141684
+v -33.142460 -9.110181 1.407337
+v 36.353069 10.667665 0.873730
+v -34.651760 7.260300 0.250001
+v 25.586664 -19.145103 1.141681
+v 4.453226 7.761927 0.031147
+v -33.046776 7.260300 0.250001
+v -33.046776 7.964998 0.250001
+v 19.453226 -3.336628 0.031147
+v -34.353226 7.260300 0.250001
+v 19.751760 -3.336628 0.031147
+v 22.948240 -23.006443 0.031144
+v 23.246775 -23.006443 0.031144
+v 23.246775 -23.209517 0.249998
+v 22.948240 -23.209517 0.249998
+v -27.251760 -19.048468 0.249998
+v -19.648239 7.761927 0.031147
+v 7.948240 -23.209517 0.249998
+v 7.948240 -18.926893 0.458995
+v 7.948240 -19.048468 0.249998
+v 7.948240 -20.036629 0.031144
+v 7.948240 -20.239700 0.249998
+v 24.851761 -20.239700 0.249998
+v 24.553226 -20.239700 0.249998
+v 24.553226 -20.036629 0.031144
+v 24.851761 -20.036629 0.031144
+v -27.251760 -22.504818 0.249998
+v -27.251760 -23.209517 0.249998
+v 29.651760 -20.036629 0.031144
+v -21.351761 -2.226894 0.458998
+v -21.351761 -2.348469 0.250001
+v 3.242460 7.389818 1.407337
+v -21.351761 -2.835003 0.250001
+v -21.351761 -6.777466 0.250001
+v 23.246775 -20.036629 0.031144
+v 22.948240 -20.036629 0.031144
+v -32.986664 -8.544116 1.141684
+v 10.586664 -19.145103 1.141681
+v 37.060425 -2.843662 1.141684
+v 4.751760 -19.024092 0.873727
+v 4.513336 -19.145103 1.141681
+v 4.751760 -23.500565 0.873727
+v -24.951759 4.290485 0.250001
+v -24.653227 4.290485 0.250001
+v 3.046774 -3.336628 0.031147
+v 2.057540 -9.110181 1.407337
+v 0.942460 -9.110181 1.407337
+v 19.751760 -6.852282 0.858133
+v -0.848240 -6.905273 0.393658
+v -32.986664 -8.145103 1.141684
+v 27.013336 -19.145103 1.141681
+v 8.246774 4.290485 0.250001
+v -0.848240 -3.038074 0.031147
+v 14.651760 -12.477466 0.249999
+v 7.948240 7.964998 0.250001
+v 10.646774 -22.707890 0.031144
+v -24.951759 3.999435 0.873730
+v -24.951759 4.022533 0.250001
+v -24.557541 7.389818 1.407337
+v -23.442459 7.389818 1.407337
+v 2.848240 -19.024092 0.873727
+v 3.086664 -19.145103 1.141681
+v 2.848240 -23.500565 0.873727
+v 2.986664 -2.445105 1.141684
+v 14.353226 -8.535003 0.250001
+v 14.651760 -8.535003 0.250001
+v 7.948240 4.290485 0.250001
+v 7.948240 8.451532 0.250001
+v 9.851760 8.451532 0.250001
+v 8.342460 7.389818 1.407337
+v 7.948240 3.999435 0.873730
+v 14.651760 -7.926894 0.458998
+v 14.651760 -8.048468 0.250001
+v 25.048029 9.578100 0.250001
+v 24.396986 11.366823 0.250004
+v 24.553226 -19.738073 0.031144
+v 24.851761 -19.738073 0.031144
+v 19.751760 -6.800564 0.873730
+v 23.585100 10.753630 0.250002
+v 23.482996 11.034159 0.250002
+v 9.851760 -19.024092 0.873727
+v 9.851760 -18.926893 0.458995
+v 20.886131 8.063293 0.250001
+v 20.235088 9.852018 0.250001
+v 22.948240 -20.239700 0.249998
+v 23.246775 -20.239700 0.249998
+v 24.553226 -19.535002 0.249998
+v 24.851761 -19.535002 0.249998
+v 9.851760 -19.048468 0.249998
+v 19.751760 -2.324093 0.873730
+v 4.413336 -2.445105 1.141684
+vn -0.0000 0.0000 -1.0000
+vn 1.0000 0.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 -0.7471 -0.6647
+vn -0.7060 0.0000 0.7082
+vn -0.8626 -0.0000 0.5059
+vn 0.0000 -1.0000 -0.0000
+vn -0.0000 -0.9710 0.2392
+vn 0.0000 0.2043 -0.9789
+vn -0.0001 0.2043 -0.9789
+vn -0.0000 -0.2043 -0.9789
+vn 0.0001 -0.2043 -0.9789
+vn 0.0000 -0.2888 0.9574
+vn 0.0000 -0.2887 0.9574
+vn -0.0001 -0.2887 0.9574
+vn 0.1996 0.0000 0.9799
+vn -0.1996 0.0000 0.9799
+vn 0.0000 0.4248 0.9053
+vn 0.0000 0.9114 0.4116
+vn -0.0000 1.0000 -0.0000
+vn -0.0001 1.0000 -0.0000
+vn -0.0000 -0.5787 -0.8156
+vn -0.0000 -0.8565 -0.5161
+vn -0.0001 -0.5787 -0.8156
+vn 0.0001 -0.8565 -0.5161
+vn 0.0001 0.5787 -0.8156
+vn 0.0000 0.8565 -0.5161
+vn -0.0000 0.5787 -0.8156
+vn -0.3992 -0.1453 0.9053
+vn 0.0000 0.0000 1.0000
+vn -0.0001 0.8565 -0.5161
+vn 0.0000 0.8644 -0.5028
+vn 0.8049 0.2929 -0.5161
+vn 0.8049 0.2930 -0.5161
+vn 0.5438 0.1979 -0.8156
+vn -0.3420 0.9397 0.0000
+vn 0.5438 0.1978 -0.8156
+vn 0.2713 0.0987 0.9574
+vn 0.2713 0.0988 0.9574
+vn 0.2714 0.0987 0.9574
+vn -0.0683 0.1876 0.9799
+vn 0.0683 -0.1876 0.9799
+vn -0.2950 0.8106 0.5059
+vn -0.2415 0.6634 0.7082
+vn -0.1919 -0.0698 -0.9789
+vn -0.1919 -0.0699 -0.9789
+vn 0.1919 0.0698 -0.9789
+vn 0.1919 0.0699 -0.9789
+vn 0.7060 0.0000 0.7082
+vn 0.8626 0.0000 0.5059
+vn -0.5438 -0.1978 -0.8156
+vn -0.8049 -0.2929 -0.5161
+vn -0.8049 -0.2930 -0.5161
+vn -0.5438 -0.1979 -0.8156
+vn 0.9124 0.3321 0.2392
+vn 0.9397 0.3420 -0.0000
+vn -0.5437 -0.1980 -0.8156
+vn 0.2415 -0.6634 0.7082
+vn 0.2950 -0.8106 0.5059
+vn -0.8564 -0.3117 0.4116
+vn -0.9397 -0.3420 0.0000
+vn -0.9397 -0.3419 0.0000
+vn -0.0002 1.0000 -0.0000
+vn 0.9397 0.3421 -0.0000
+vn -0.1919 -0.0700 -0.9789
+vn 0.1919 0.0700 -0.9789
+vn -0.8123 -0.2956 -0.5028
+vn -0.8564 -0.3118 0.4116
+vn 0.0001 1.0000 -0.0000
+vn 0.3420 -0.9397 -0.0000
+vn 0.8049 0.2931 -0.5161
+vn 0.0001 -0.2887 0.9574
+vn 0.0002 1.0000 -0.0000
+vn 0.2715 0.0990 0.9573
+vn 0.7021 0.2555 -0.6647
+vn -0.8049 -0.2928 -0.5161
+vn 0.2710 0.0986 0.9575
+s 1
+f 1//1 2//1 3//1 4//1 5//1 6//1 7//1 8//1 9//1 10//1 11//1 12//1 13//1 14//1 15//1 16//1 17//1 18//1 19//1 20//1
+f 21//2 22//2 23//2 24//2
+f 9//3 25//3 26//3 6//3 5//3 27//3 28//3 2//3 1//3 29//3 30//3 31//3 32//3 33//3 10//3
+f 1//4 20//4 34//4 29//4
+f 35//1 36//1 37//1 38//1 39//1 40//1 41//1 42//1 43//1 44//1 45//1 46//1 47//1 48//1 49//1 50//1 51//1 52//1 53//1 54//1
+f 55//5 56//6 57//6 58//6 59//5
+f 60//7 61//7 62//8 63//8
+f 64//9 65//10 66//11 67//12
+f 68//1 69//1 70//1 71//1 72//1 73//1 74//1 75//1 76//1 77//1 78//1 79//1 80//1 81//1 82//1 83//1 84//1 85//1 86//1 87//1
+f 88//11 89//9 90//9 91//11
+f 13//3 92//3 93//3 14//3
+f 94//3 95//3 96//3 97//3
+f 98//13 99//14 100//15 101//13 102//16 103//17
+f 104//18 105//18 57//18 56//18
+f 106//19 107//19 108//19 109//19 110//20 111//21
+f 112//22 113//23 114//23 115//22
+f 116//19 117//20 118//21 119//19 120//19 121//19
+f 122//13 123//14 124//14 125//13 126//16 127//17
+f 128//11 129//9 130//9 131//11
+f 132//2 133//2 134//2 135//2
+f 136//2 137//2 138//2 139//2 140//2 141//2 142//2 143//2 144//2 145//2 146//2 147//2 148//2 149//2 150//2
+f 151//22 152//24 153//23 154//25
+f 155//26 156//27 157//27 158//28
+f 159//2 4//2 3//2 160//2
+f 161//3 162//3 163//3 164//3 165//3 166//3 167//3 168//3 169//3 170//3 171//3 172//3 173//3 174//3 175//3
+f 176//2 177//2 178//2 179//2 180//2 181//2 182//2 183//2 184//2 185//2 186//2 187//2 188//2 189//2 190//2
+f 191//11 192//9 193//9 194//11
+f 195//23 196//22 182//22 181//23
+f 197//29 198//29 199//29 200//29
+f 201//18 202//18 203//18 204//18
+f 17//3 205//3 206//3 18//3
+f 207//3 208//3 209//3 210//3 211//3 212//3 213//3 214//3 215//3 216//3 99//3 98//3 217//3 218//3 219//3
+f 220//30 221//30 222//30 223//30
+f 224//18 225//18 221//18 220//18
+f 226//28 227//27 228//31 229//28
+f 230//22 231//23 232//23 233//22
+f 234//2 235//2 236//2 237//2 238//2 239//2 240//2 241//2 242//2 243//2 244//2 245//2 246//2 247//2 248//2
+f 249//3 250//3 251//3 252//3
+f 253//2 254//2 255//2 256//2
+f 257//1 258//1 259//1 260//1 261//1 262//1 263//1 264//1 265//1 266//1 267//1 268//1 269//1 270//1 271//1 272//1 273//1 274//1 275//1 276//1
+f 277//29 278//29 279//29 280//29
+f 281//26 276//27 275//27 282//28
+f 283//32 190//32 189//32 284//32
+f 285//33 286//34 287//35 288//35
+f 215//4 289//4 290//4 216//4
+f 291//28 292//27 137//27 136//28
+f 293//14 294//14 295//14 296//14 297//16 298//17
+f 299//23 300//22 301//22 302//23
+f 303//22 304//23 305//23 306//22
+f 307//9 308//10 309//11 310//12
+f 311//23 312//25 313//22 314//22
+f 315//14 316//14 317//14 318//16 319//17 320//14
+f 321//28 322//27 323//27 324//28
+f 325//4 163//4 162//4 326//4
+f 327//1 328//1 329//1 330//1 331//1 332//1 333//1 334//1 335//1 336//1 337//1 338//1 339//1 340//1 341//1 342//1 343//1 344//1 345//1 346//1
+f 347//30 348//30 349//30 350//30
+f 351//3 352//3 353//3 354//3 355//3 356//3 357//3 358//3 359//3 360//3 361//3 362//3 363//3 364//3 365//3
+f 188//1 366//1 367//1 185//1 184//1 368//1 195//1 181//1 180//1 369//1 370//1 371//1 372//1 373//1 374//1 375//1 376//1 377//1 284//1 189//1
+f 378//32 379//32 380//32 381//32
+f 382//7 383//7 384//8 385//8
+f 357//12 356//9 386//10 387//11
+f 388//32 389//32 139//32 138//32
+f 390//30 391//30 392//30 393//30
+f 388//1 138//1 137//1 292//1 394//1 149//1 148//1 395//1 396//1 145//1 144//1 397//1 398//1 399//1 400//1 401//1 402//1 403//1 404//1 405//1
+f 406//30 407//30 408//30 409//30
+f 410//36 285//36 288//36 411//36 412//36 413//36 414//36 415//36 416//36 417//36 418//36 419//36 420//36 421//36 422//36
+f 423//34 424//35 425//37 426//33
+f 427//18 428//18 429//18 430//18
+f 291//3 431//3 394//3 292//3
+f 432//9 433//9 434//11 435//12
+f 436//2 437//2 404//2 403//2
+f 438//18 439//18 440//18 441//18
+f 210//25 209//22 442//22 443//23
+f 444//27 445//27 446//28 447//28
+f 448//19 449//19 450//19 451//20 452//20 453//19
+f 328//4 327//4 454//4 455//4
+f 456//28 457//27 458//27 459//28
+f 460//23 461//22 462//22 463//23
+f 464//35 465//37 466//33 467//34
+f 468//2 469//2 470//2 471//2
+f 472//23 473//25 474//22 475//22
+f 447//9 446//9 476//11 477//12
+f 478//23 479//22 480//22 481//23
+f 482//38 483//39 484//38 485//40 486//41 487//42
+f 199//43 198//43 488//44 489//44 490//43
+f 491//3 492//3 493//3 494//3
+f 495//26 401//27 400//27 496//28
+f 497//45 498//46 499//47 500//48
+f 501//1 502//1 503//1 504//1 505//1 506//1 507//1 508//1 509//1 510//1 511//1 512//1 513//1 514//1 515//1 516//1 517//1 518//1 519//1 520//1
+f 101//49 521//49 392//50 391//50 102//50
+f 522//13 523//14 142//14 141//13 524//16 525//17
+f 526//30 527//30 528//30 529//30
+f 496//2 400//2 399//2 530//2
+f 212//28 211//27 531//27 532//28
+f 533//9 534//9 535//11 536//12
+f 537//35 538//33 539//33 540//35
+f 541//51 542//52 543//53 544//54
+f 545//2 546//2 547//2 548//2 549//2 550//2 551//2 552//2 553//2 554//2 555//2 131//2 130//2 556//2 557//2
+f 558//3 559//3 560//3 561//3
+f 562//55 563//55 564//56 565//56
+f 566//2 567//2 568//2 569//2
+f 570//1 571//1 572//1 573//1 574//1 289//1 215//1 214//1 575//1 531//1 211//1 210//1 443//1 576//1 207//1 219//1 577//1 578//1 249//1 252//1
+f 579//11 580//9 581//9 582//11
+f 196//3 195//3 368//3 583//3
+f 584//11 585//9 586//9 587//11
+f 588//5 522//5 525//6 589//6 590//6
+f 591//33 592//34 593//35 594//35
+f 595//28 596//27 597//27 598//28
+f 599//13 600//14 601//14 602//13 603//16 604//17
+f 605//26 78//27 77//27 606//28
+f 607//22 608//23 609//25 610//22
+f 532//2 531//2 575//2 611//2
+f 612//3 613//3 614//3 615//3
+f 616//4 617//4 618//4 619//4
+f 620//54 621//52 622//53 623//54
+f 624//4 625//4 626//4 627//4
+f 628//3 629//3 630//3 631//3 632//3 633//3 634//3 635//3 636//3 637//3 638//3 639//3 640//3 641//3 642//3
+f 643//17 644//13 645//14 646//14 647//13 648//16
+f 308//2 649//2 650//2 309//2
+f 651//3 652//3 653//3 654//3
+f 655//5 656//5 438//6 441//6 657//6
+f 363//19 658//19 659//19 660//19 661//20 364//20
+f 192//28 662//27 663//27 193//28
+f 664//28 665//27 234//27 248//28
+f 666//2 194//2 193//2 663//2 667//2 110//2 109//2 668//2 669//2 670//2 671//2 672//2 673//2 674//2 675//2
+f 676//2 331//2 330//2 677//2
+f 435//3 273//3 272//3 432//3
+f 678//4 679//4 680//4 681//4
+f 266//2 682//2 683//2 267//2
+f 42//34 684//35 685//35 43//33
+f 686//28 687//27 568//27 567//28
+f 688//3 689//3 610//3 609//3
+f 213//22 611//22 575//23 214//23
+f 690//27 691//27 692//28 693//28
+f 694//28 695//27 469//27 468//28
+f 696//23 697//23 698//22 699//22
+f 360//7 700//7 701//8 361//8
+f 702//50 703//50 704//50 705//49 706//49
+f 595//9 598//9 303//11 306//11
+f 707//9 708//9 709//11 710//11
+f 711//13 712//14 713//14 714//13 715//16 716//17
+f 263//2 262//2 717//2 718//2
+f 442//2 719//2 576//2 443//2
+f 459//2 458//2 720//2 721//2 722//2 723//2 724//2 661//2 660//2 725//2 701//2 700//2 726//2 727//2 728//2
+f 716//18 715//18 729//18 730//18
+f 731//30 732//30 733//30 734//30
+f 280//43 279//43 735//44 736//44 737//43
+f 738//32 739//32 740//32 741//32
+f 742//33 743//34 744//35 745//35
+f 746//57 502//52 501//53 747//54
+f 748//27 749//27 750//28 751//28
+f 93//11 92//9 752//9 753//11
+f 754//50 105//50 104//50 755//49 756//49
+f 757//5 758//5 759//6 760//6 761//6
+f 762//23 763//22 764//22 765//23
+f 766//18 407//18 406//18 767//18
+f 768//3 769//3 770//3 771//3
+f 772//7 670//7 669//8 773//8
+f 476//2 446//2 445//2 774//2
+f 775//54 776//52 412//53 411//54
+f 777//1 778//1 779//1 780//1 781//1 782//1 783//1 784//1 785//1 786//1 787//1 788//1 789//1 790//1 791//1 792//1 423//1 426//1 622//1 621//1
+f 793//33 794//34 795//35 796//35
+f 797//22 798//22 76//23 75//23
+f 799//4 800//4 801//4 802//4
+f 640//7 803//7 804//8 641//8
+f 805//3 806//3 807//3 808//3 300//3 299//3 809//3 810//3 811//3 812//3 813//3 814//3 815//3 816//3 817//3
+f 765//1 799//1 802//1 818//1 819//1 820//1 821//1 822//1 774//1 445//1 444//1 741//1 740//1 823//1 768//1 771//1 824//1 825//1 826//1 762//1
+f 817//28 816//27 827//27 828//28
+f 829//28 395//27 148//27 147//28
+f 830//5 831//5 767//6 406//6 409//6
+f 832//9 833//10 764//11 763//12
+f 834//12 835//9 836//10 837//11
+f 838//36 839//36 840//36 841//36
+f 632//28 631//27 842//27 843//28
+f 759//17 758//13 844//14 845//14 846//13 847//16
+f 848//52 841//53 840//54 849//54
+f 808//9 850//9 301//11 300//11
+f 851//2 820//2 819//2 852//2
+f 826//3 832//3 763//3 762//3
+f 853//32 854//32 855//32 856//32
+f 28//11 27//9 159//9 160//11
+f 857//2 858//2 859//2 860//2 861//2 862//2 384//2 383//2 863//2 472//2 475//2 864//2 865//2 866//2 867//2
+f 868//49 869//50 870//50 871//50 872//49
+f 873//2 874//2 875//2 876//2 877//2 878//2 879//2 880//2 881//2 125//2 124//2 882//2 883//2 884//2 885//2
+f 886//58 887//58 888//59 889//59 890//59
+f 39//36 891//36 892//36 40//36
+f 893//4 894//4 895//4 896//4
+f 897//9 898//9 899//11 900//11
+f 901//9 902//9 903//11 904//11
+f 905//1 906//1 355//1 354//1 907//1 908//1 351//1 365//1 724//1 723//1 909//1 910//1 720//1 458//1 457//1 911//1 727//1 726//1 359//1 358//1
+f 912//60 913//60 914//60 915//60 916//61 917//62
+f 918//3 910//3 909//3 919//3
+f 455//3 920//3 656//3 655//3 921//3 337//3 336//3 922//3 923//3 333//3 332//3 924//3 925//3 329//3 328//3
+f 907//2 926//2 927//2 908//2
+f 901//28 928//27 929//27 902//28
+f 930//28 931//27 932//27 933//28
+f 700//4 360//4 359//4 726//4
+f 934//9 935//9 936//11 937//11
+f 938//34 939//35 940//35 941//33
+f 64//26 942//27 943//27 65//28
+f 944//23 128//22 131//22 555//23
+f 945//27 946//27 947//28 948//28
+f 949//28 268//27 267//27 683//28
+f 950//27 951//27 952//28 953//28
+f 954//51 955//52 956//53 957//54
+f 958//12 959//9 960//10 961//11
+f 962//23 963//25 964//22 965//22
+f 966//17 362//13 361//14 701//14 725//13 967//16
+f 386//2 906//2 905//2 387//2
+f 968//18 966//18 967//18 969//18
+f 970//35 35//33 54//34 971//35
+f 972//27 973//31 974//28 975//28
+f 911//23 976//22 728//22 727//23
+f 977//11 978//9 857//9 867//11
+f 176//49 408//50 407//50 766//50 177//49
+f 979//19 734//19 733//19 980//19 981//20 982//63
+f 115//3 114//3 983//3 984//3
+f 815//1 985//1 986//1 987//1 988//1 989//1 990//1 991//1 478//1 481//1 992//1 809//1 299//1 302//1 993//1 807//1 806//1 994//1 827//1 816//1
+f 230//2 995//2 996//2 231//2
+f 340//27 339//27 997//28 998//28
+f 922//9 999//9 1000//11 923//11
+f 561//28 560//27 1001//27 1002//28
+f 1003//28 1004//27 1005//27 1006//28
+f 61//4 60//4 1007//4 1008//4
+f 41//52 40//53 892//54 1009//54
+f 291//9 136//9 150//11 431//12
+f 97//23 96//22 1010//22 1011//23
+f 476//22 774//23 822//23 477//22
+f 606//2 77//2 76//2 798//2
+f 1012//4 1013//4 1014//4 1015//4
+f 1016//32 118//32 117//32 1017//32
+f 808//28 807//27 993//27 850//28
+f 1007//1 697//1 696//1 1018//1 1019//1 232//1 231//1 996//1 1020//1 853//1 856//1 1021//1 983//1 114//1 113//1 1022//1 1023//1 1024//1 1025//1 1008//1
+f 1026//33 1027//34 1028//35 1029//35
+f 1030//18 1031//18 1032//18 1033//18
+f 1034//9 851//10 852//11 1035//12
+f 629//32 1036//32 1037//32 630//32
+f 1038//7 1039//7 1040//8 1041//8
+f 1042//38 1043//39 417//38 416//39 1044//41 1045//42
+f 1046//35 504//33 503//34 1047//35
+f 919//9 722//9 721//11 918//12
+f 1048//3 1049//3 1050//3 1051//3 1052//3 1053//3 1004//3 1003//3 1054//3 1055//3 1056//3 1057//3 461//3 460//3 1058//3
+f 619//3 1059//3 1060//3 979//3 982//3 1061//3 1062//3 1063//3 1064//3 1065//3 695//3 694//3 1066//3 1067//3 616//3
+f 1068//3 533//3 536//3 1069//3
+f 1070//2 843//2 842//2 1071//2
+f 1072//14 1073//14 1074//13 1075//16 1076//17 1077//13
+f 1078//56 1079//56 1080//55 1081//55
+f 155//9 158//9 1082//11 1083//11
+f 1084//36 1085//36 1086//36 1087//36 1088//36 1089//36 1090//36 1091//36 1092//36 1093//36 1094//36 1095//36 736//36 735//36 1096//36
+f 1097//11 1098//9 1099//9 1100//11
+f 1101//1 1102//1 639//1 638//1 1103//1 1104//1 635//1 634//1 1071//1 842//1 631//1 630//1 1037//1 1105//1 1068//1 1069//1 1106//1 1107//1 612//1 615//1
+f 1108//14 1109//15 755//13 104//16 56//17 55//13
+f 251//11 250//9 1110//9 1111//11
+f 115//11 984//9 1112//10 112//11
+f 226//9 229//9 1113//11 1114//11
+f 1115//48 1116//46 1117//46 1118//48
+f 1119//3 1120//3 261//3 260//3 1121//3 712//3 711//3 453//3 452//3 269//3 268//3 949//3 1122//3 265//3 264//3
+f 1123//60 1124//60 1125//61 1126//61 1127//60 1128//60
+f 1129//38 1130//39 1131//39 1132//39 1133//41 1134//42
+f 1135//17 642//13 641//14 804//14 872//13 871//16
+f 218//32 1136//32 577//32 219//32
+f 684//48 1137//46 1138//46 685//48
+f 26//11 25//9 1139//9 1140//11
+f 1135//18 871//18 870//18 1141//18
+f 1084//64 1096//55 1142//55 1143//56
+f 1144//35 839//35 838//34 1145//34
+f 356//26 355//27 906//27 386//28
+f 1146//2 828//2 827//2 994//2
+f 243//22 242//23 1147//25 1148//22
+f 1149//45 1150//65 1151//48 1152//66
+f 988//23 1153//22 1154//22 989//23
+f 319//18 318//18 1155//18 1156//18
+f 39//33 38//34 1157//35 891//35
+f 835//28 1158//27 1159//27 836//28
+f 92//26 13//27 12//31 752//28
+f 1160//3 1161//3 690//3 693//3
+f 1162//32 880//32 879//32 1163//32
+f 1164//24 1165//23 1166//23 1167//22
+f 1168//2 974//2 973//2 1169//2
+f 832//28 826//27 825//27 833//28
+f 70//3 934//3 937//3 71//3
+f 1170//4 810//4 809//4 992//4
+f 1171//30 1172//30 914//30 913//30
+f 1173//3 1174//3 1167//3 1166//3
+f 170//28 169//27 1175//27 1176//28
+f 1177//27 1178//31 1179//28 1180//28
+f 1181//28 366//27 188//27 187//28
+f 1182//52 1183//53 1184//54 1185//54
+f 1186//22 68//23 87//25 1187//22
+f 1188//4 1189//4 1190//4 1191//4
+f 352//28 351//27 908//27 927//28
+f 1192//11 1193//9 1194//9 1195//11
+f 1196//2 1197//2 1198//2 1199//2
+f 939//48 1200//46 1201//46 940//48
+f 846//49 1202//49 1203//50 1204//50 847//50
+f 615//23 614//22 1205//22 1101//23
+f 1206//23 1207//22 1208//22 1209//23
+f 413//67 1210//67 1211//67 414//67
+f 1158//3 835//3 834//3 1212//3
+f 526//18 1076//18 1075//18 527//18
+f 886//60 890//60 1213//60 1214//68 1215//61 1216//61
+f 1217//5 1218//6 1219//6 1220//6 1221//5
+f 190//20 283//69 830//19 409//19 408//19 176//19
+f 1222//9 1223//9 1224//11 1225//11
+f 167//32 1226//32 1227//32 168//32
+f 1228//7 179//7 178//8 1229//8
+f 1230//7 1231//7 1232//8 1233//8
+f 1234//54 53//52 52//53 1235//54
+f 1236//3 1237//3 1238//3 1239//3
+f 1240//2 1241//2 1176//2 1175//2
+f 1242//28 377//27 376//27 1243//28
+f 751//9 750//9 314//11 313//11
+f 1244//3 1245//3 1246//3 1247//3
+f 506//52 505//53 1248//54 1249//54
+f 1119//28 264//27 263//27 718//28
+f 888//29 1250//29 1251//29 889//29
+f 1252//3 1098//3 1097//3 1253//3
+f 1206//1 1209//1 326//1 162//1 161//1 1254//1 1255//1 173//1 172//1 1240//1 1175//1 169//1 168//1 1227//1 1256//1 1238//1 1237//1 1257//1 323//1 322//1
+f 1258//54 514//52 513//53 1259//54
+f 174//26 173//27 1255//27 1260//28
+f 1121//7 1261//7 713//8 712//8
+f 1121//4 260//4 259//4 1261//4
+f 714//49 450//49 449//50 729//50 715//50
+f 165//13 164//14 1262//14 1263//13 427//16 430//17
+f 1260//2 1255//2 1254//2 1264//2
+f 322//3 321//3 1207//3 1206//3
+f 1265//54 1266//52 1093//53 1092//54
+f 1126//67 1125//67 47//67 46//67
+f 464//48 541//46 544//46 465//48
+f 878//1 1267//1 1268//1 875//1 874//1 1244//1 1247//1 884//1 883//1 1269//1 1270//1 1271//1 943//1 942//1 1272//1 1273//1 1274//1 1275//1 1163//1 879//1
+f 1270//3 1269//3 1276//3 123//3 122//3 1277//3 1162//3 1163//3 1275//3 1278//3 1279//3 1272//3 942//3 64//3 67//3
+f 589//18 525//18 524//18 1280//18
+f 1281//9 1282//9 1283//11 1284//11
+f 186//22 185//23 367//23 1285//22
+f 1286//3 1287//3 1281//3 1284//3 1288//3 1289//3 382//3 385//3 1290//3 1291//3 1292//3 1293//3 1294//3 1295//3 1296//3
+f 432//28 272//27 271//27 433//28
+f 1297//9 674//9 673//11 1298//11
+f 1299//3 1268//3 1267//3 1300//3
+f 1301//2 1302//2 1274//2 1273//2
+f 1295//9 1303//9 1304//11 1296//11
+f 1020//27 996//31 995//28 1305//28
+f 1306//28 1307//27 1308//27 1309//28
+f 1276//4 1269//4 883//4 882//4
+f 1239//28 1238//27 1256//27 1310//28
+f 605//3 797//3 75//3 74//3 1230//3 1233//3 1217//3 1221//3 1311//3 83//3 82//3 897//3 900//3 79//3 78//3
+f 1312//27 1313//27 1223//28 1222//28
+f 1314//23 1315//22 1316//22 1317//23
+f 424//66 620//45 623//46 425//48
+f 358//23 357//22 387//22 905//23
+f 65//2 943//2 1271//2 66//2
+f 126//18 1318//18 1319//18 127//18
+f 795//48 1320//46 1321//46 796//48
+f 1242//9 1243//9 1322//11 1323//12
+f 896//7 895//7 1324//8 1325//8
+f 166//5 165//5 430//6 429//6 1326//6
+f 25//28 9//27 8//31 1139//28
+f 1327//48 1185//46 1184//46 1328//48
+f 1329//23 1330//23 1331//22 1332//22
+f 1333//30 1334//30 1335//30 1336//30
+f 1337//48 1258//45 1259//46 1338//48
+f 344//3 1339//3 1340//3 345//3
+f 1002//2 1001//2 1341//2 1342//2 1343//2 647//2 646//2 678//2 681//2 1344//2 1345//2 1346//2 1347//2 1348//2 1349//2
+f 1350//30 1351//30 1352//30 1353//30
+f 1354//9 1355//9 1356//11 1357//11
+f 520//36 1358//36 747//36 501//36
+f 515//33 1337//35 1338//35 516//34
+f 1359//11 1360//9 134//9 133//11
+f 897//28 82//27 81//27 898//28
+f 1361//11 1362//9 1363//9 1364//11
+f 421//35 420//33 1365//34 1366//35
+f 1367//30 1368//30 1123//30 1128//30
+f 1369//1 1370//1 1371//1 1372//1 1373//1 963//1 962//1 951//1 950//1 1374//1 132//1 135//1 1375//1 1376//1 1377//1 1378//1 1173//1 1166//1 1165//1 1379//1
+f 1380//58 482//58 487//59 1381//59 1382//59
+f 550//49 1383//50 1384//50 1385//50 551//49
+f 1386//36 1387//36 591//36 594//36 1388//36 1389//36 742//36 745//36 1390//36 1391//36 1392//36 1393//36 1394//36 485//36 484//36
+f 1395//60 1396//60 737//60 736//60 1095//61 1397//61
+f 1398//3 1297//3 1298//3 1399//3
+f 760//30 1204//30 1203//30 761//30
+f 1400//30 1384//30 1383//30 1401//30
+f 217//19 393//19 392//19 521//19 1136//20 218//69
+f 396//23 1402//22 146//22 145//23
+f 103//6 390//6 393//6 217//5 98//5
+f 1403//2 1404//2 1405//2 1406//2
+f 625//7 624//7 601//8 600//8
+f 1042//58 1045//59 347//59 350//59 1407//58
+f 1408//28 987//27 986//27 1409//28
+f 1410//50 603//50 602//49 116//49 121//50
+f 18//23 206//22 1411//22 19//23
+f 436//22 403//23 402//23 1412//22
+f 32//19 223//19 222//19 1413//19 1414//20 33//20
+f 1415//25 1225//22 1224//22 1416//23
+f 1055//25 1054//22 1417//22 1418//23
+f 1343//49 1419//50 1420//50 648//50 647//49
+f 1421//30 1422//30 108//30 107//30
+f 1304//22 1423//23 1286//23 1296//22
+f 707//28 1424//27 1425//27 708//28
+f 1426//19 1427//20 1311//20 1221//19 1220//19 1428//19
+f 731//18 1429//18 1430//18 732//18
+f 1431//23 494//25 493//22 1432//22
+f 1433//26 1434//27 24//31 23//28
+f 441//30 440//30 1435//30 657//30
+f 140//49 1436//50 1280//50 524//50 141//49
+f 1437//2 1438//2 463//2 462//2
+f 457//3 456//3 976//3 911//3
+f 1439//5 202//6 201//6 1440//6 1441//5
+f 1442//3 1443//3 1444//3 1445//3 1446//3 1447//3 1448//3 1449//3 1312//3 1222//3 1225//3 1415//3 1450//3 1451//3 1452//3
+f 805//22 1146//22 994//23 806//23
+f 191//22 194//22 666//23 1453//23
+f 344//27 343//27 1454//28 1339//28
+f 1291//19 1455//19 1456//19 861//19 860//20 1292//20
+f 1219//30 1457//30 1428//30 1220//30
+f 1019//27 1018//31 1458//28 1459//28
+f 1374//23 1359//22 133//22 132//23
+f 423//70 792//70 1116//70 1115//70 789//70 788//70 564//70 563//70 887//70 886//70 1216//70 777//70 621//70 620//70 424//70
+f 1190//7 1189//7 1073//8 1072//8
+f 1460//33 1461//34 1462//35 1463//37
+f 1464//5 1077//5 1076//6 526//6 529//6
+f 1465//49 1466//50 1155//50 318//50 317//49
+f 240//4 1451//4 1450//4 241//4
+f 1147//1 242//1 241//1 1450//1 1415//1 1416//1 1313//1 1312//1 1449//1 1467//1 1468//1 1446//1 1445//1 235//1 234//1 665//1 1469//1 246//1 245//1 1470//1
+f 790//33 789//71 1115//35 1118//35
+f 383//4 382//4 1289//4 863//4
+f 111//32 110//32 667//32 1471//32
+f 1447//28 1446//27 1468//27 1472//28
+f 1268//23 1299//22 876//22 875//23
+f 1473//3 257//3 276//3 281//3
+f 818//3 802//3 801//3 844//3 758//3 757//3 738//3 741//3 444//3 447//3 477//3 822//3 821//3 1034//3 1035//3
+f 1474//17 1442//14 1452//14 239//72 238//14 1475//16
+f 1474//18 1475//18 1476//18 1477//18
+f 1478//28 1479//27 1480//27 1481//28
+f 1337//70 515//70 514//70 1258//70
+f 6//25 26//22 1140//24 7//23
+f 1482//11 1483//9 1484//9 1485//11
+f 559//23 558//22 1349//22 1348//23
+f 489//68 1486//61 1487//61 1488//60 1489//60 490//60
+f 206//11 205//9 1490//9 1411//11
+f 1181//9 187//9 186//11 1285//12
+f 1491//28 1492//27 1493//31 1494//28
+f 1495//27 1496//31 586//28 585//28
+f 1497//26 1498//27 1499//27 1500//28
+f 1501//23 1502//25 904//22 903//22
+f 1100//22 1503//23 1253//23 1097//22
+f 1212//23 834//22 837//22 1504//23
+f 1505//22 1506//23 1507//25 1508//22
+f 1509//28 1510//27 1511//27 1512//28
+f 1252//27 1513//31 1099//28 1098//28
+f 721//22 720//23 910//23 918//22
+f 370//23 958//22 961//22 371//23
+f 971//48 1234//46 1235//46 970//48
+f 1068//27 1105//27 534//28 533//28
+f 510//70 1514//70 1515//70 511//70
+f 610//11 689//9 1516//9 607//11
+f 27//26 5//27 4//27 159//28
+f 686//9 567//9 566//11 1517//12
+f 1518//23 1517//22 566//22 569//23
+f 1519//3 1520//3 945//3 948//3
+f 926//22 907//23 354//23 353//22
+f 1038//3 1041//3 1439//3 1441//3 1521//3 1522//3 1523//3 1524//3 1525//3 1526//3 1495//3 585//3 584//3 1527//3 1528//3
+f 1156//30 1155//30 1466//30 1529//30
+f 143//7 142//8 523//8 1530//7
+f 1531//11 1532//9 1197//9 1196//11
+f 1354//26 1023//27 1022//27 1355//28
+f 14//25 93//22 753//24 15//23
+f 350//60 349//60 415//60 414//61 1211//61 1407//60
+f 1170//7 1533//8 811//8 810//7
+f 936//22 72//23 71//25 937//22
+f 34//7 1534//8 30//8 29//7
+f 247//22 246//23 1469//25 1535//22
+f 1536//7 1537//7 295//8 294//8
+f 1217//14 1233//14 1232//14 1538//14 1539//16 1218//17
+f 7//2 1140//2 1139//2 8//2
+f 1540//30 1420//30 1419//30 1541//30
+f 1423//2 1304//2 1303//2 1542//2
+f 765//2 764//2 833//2 825//2 824//2 1543//2 1544//2 823//2 740//2 739//2 1202//2 846//2 845//2 800//2 799//2
+f 1218//18 1539//18 1457//18 1219//18
+f 912//58 1545//58 1546//59 1171//59 913//59
+f 1547//30 703//30 702//30 1548//30
+f 580//28 572//27 571//31 581//28
+f 1549//33 1550//34 1327//35 1328//35
+f 782//36 1151//36 1150//36 779//36 778//36 1215//36 1214//36 1551//36 562//36 565//36 787//36 786//36 1552//36 1553//36 783//36
+f 1440//19 1554//19 1555//19 1556//20 1521//73 1441//19
+f 1557//28 405//27 404//27 437//28
+f 1063//9 1405//9 1404//11 1064//11
+f 1558//14 1559//14 1560//13 1561//16 1562//17 1563//13
+f 1152//70 781//70 780//70 1149//70
+f 1564//1 1392//1 1391//1 1565//1 743//1 742//1 1389//1 1566//1 592//1 591//1 1387//1 1567//1 1027//1 1026//1 1568//1 1569//1 1145//1 838//1 841//1 848//1
+f 1393//61 1570//62 1380//60 1382//60 1571//60 1394//68
+f 425//36 623//36 622//36 426//36
+f 1572//52 1573//53 498//54 497//54
+f 1574//38 1575//39 1576//38 488//74 198//41 197//42
+f 163//7 325//7 1262//8 164//8
+f 1577//9 1578//9 480//11 479//11
+f 1579//28 1580//27 1581//27 1582//28
+f 565//75 564//75 788//75 787//75
+f 1525//11 1524//9 254//9 253//11
+f 398//23 1583//22 530//22 399//23
+f 1584//27 858//31 857//28 978//26
+f 944//1 555//1 554//1 1058//1 460//1 463//1 1438//1 1056//1 1055//1 1418//1 1005//1 1004//1 1053//1 548//1 547//1 1585//1 1586//1 557//1 556//1 1587//1
+f 1485//22 1588//23 1589//23 1482//22
+f 746//45 747//46 1358//48 1590//48
+f 812//5 1591//6 1592//6 1593//6 813//5
+f 520//33 519//34 1590//35 1358//35
+f 1594//19 1548//19 702//19 706//19 1595//20 1596//63
+f 390//18 103//18 102//18 391//18
+f 397//4 144//4 143//4 1530//4
+f 1597//52 1598//53 1599//54 1600//54
+f 1601//54 1569//52 1568//53 1602//54
+f 1603//70 1604//70 785//70 784//70
+f 1605//48 1265//46 1092//46 1091//48
+f 889//30 1251//30 1213//30 890//30
+f 1397//67 1095//67 1094//67 1606//67
+f 958//3 370//3 369//3 1228//3 1229//3 831//3 830//3 283//3 284//3 377//3 1242//3 1323//3 374//3 373//3 959//3
+f 744//70 743//70 1565//70 1607//70
+f 1600//70 1462//70 1461//70 1608//70 1143//70 1142//70 1609//70 1395//70 1397//70 1606//70 1610//70 1611//70 1612//70 1613//70 1597//70
+f 790//36 1118//36 1117//36 791//36
+f 1386//64 484//55 483//55 1614//56
+f 1615//23 1161//23 1160//22 1616//22
+f 1617//36 1618//36 1619//36 1620//36
+f 983//27 1021//27 1112//28 984//28
+f 1621//2 709//2 708//2 1425//2
+f 1606//1 1094//1 1093//1 1266//1 1622//1 1090//1 1089//1 1623//1 1624//1 1086//1 1085//1 1608//1 1461//1 1460//1 1598//1 1597//1 1613//1 1617//1 1620//1 1610//1
+f 1084//75 1143//75 1608//75 1085//75
+f 1611//54 1610//52 1620//53 1619//54
+f 535//22 1106//23 1069//23 536//22
+f 1289//1 1288//1 1625//1 1626//1 1287//1 1286//1 1423//1 1542//1 1294//1 1293//1 859//1 858//1 1584//1 1627//1 866//1 865//1 1628//1 473//1 472//1 863//1
+f 1629//23 1630//22 1631//22 1632//23
+f 1633//28 1470//27 245//27 244//28
+f 1369//3 1193//3 1192//3 1370//3
+f 1301//22 1273//23 1272//23 1279//22
+f 1634//9 1635//9 1636//11 1637//11
+f 1599//36 1598//36 1460//36 1463//36
+f 1638//70 1639//70 1624//70 1623//70
+f 917//67 916//67 508//67 507//67
+f 73//4 1231//4 1230//4 74//4
+f 369//4 180//4 179//4 1228//4
+f 1408//9 1409//9 1154//11 1153//11
+f 1640//27 1641//31 90//28 89//28
+f 482//70 1380//70 1570//70 1564//70 848//70 849//70 1144//70 1145//70 1569//70 1601//70 1028//70 1027//70 1567//70 1614//70 483//70
+f 637//22 1642//22 1103//23 638//23
+f 1643//19 1353//19 1352//19 1644//19 379//20 378//73
+f 1645//11 1433//9 23//9 22//11
+f 1646//27 1647//31 1648//28 1649//28
+f 693//9 692//9 1616//11 1160//12
+f 919//28 909//27 723//27 722//28
+f 1650//46 1388//46 594//48 593//48
+f 1651//11 1180//9 1179//9 1652//11
+f 1570//67 1393//67 1392//67 1564//67
+f 1653//25 1531//22 1196//22 1199//23
+f 349//43 348//43 1044//43 416//44 415//44
+f 205//26 17//27 16//27 1490//28
+f 1521//32 1556//32 1654//32 1522//32
+f 1655//56 1131//55 1130//55 1656//56
+f 1644//49 1352//50 1351//50 1561//50 1560//49
+f 1657//56 1658//56 1576//55 1575//55
+f 1120//12 1119//9 718//10 717//11
+f 175//12 174//9 1260//10 1264//11
+f 570//2 1111//2 1110//2 578//2 577//2 1136//2 521//2 101//2 100//2 290//2 289//2 574//2 582//2 581//2 571//2
+f 1602//36 1568//36 1026//36 1029//36
+f 1566//70 1650//70 593//70 592//70
+f 1060//14 1059//14 1659//14 1660//14 1430//16 1429//17
+f 652//26 651//27 1347//27 1346//28
+f 1051//19 1401//19 1383//19 550//19 549//20 1052//21
+f 1407//70 1211//70 1210//70 1182//70 1185//70 1327//70 1550//70 1661//70 1320//70 795//70 794//70 1662//70 1663//70 1043//70 1042//70
+f 1034//26 821//27 820//27 851//28
+f 1583//12 495//9 496//10 530//11
+f 1664//51 49//52 48//53 1665//54
+f 921//32 1666//32 338//32 337//32
+f 817//9 828//9 1146//11 805//11
+f 924//9 676//9 677//11 925//11
+f 1478//9 1481//9 1316//11 1315//11
+f 1451//7 240//7 239//8 1452//8
+f 298//6 1333//6 1336//6 1667//5 293//5
+f 1549//36 1328//36 1184//36 1183//36
+f 1529//19 1466//19 1465//19 1668//20 1669//69 1670//19
+f 1062//27 1406//27 1405//28 1063//26
+f 1663//75 1662//75 419//75 418//75
+f 1207//12 321//9 324//10 1208//11
+f 474//11 1671//9 864//9 475//11
+f 1643//5 1563//5 1562//6 1350//6 1353//6
+f 1672//23 1637//22 1636//22 1673//23
+f 887//38 563//39 562//38 1551//40 1250//41 888//42
+f 1241//22 1240//23 172//23 171//22
+f 1586//25 1674//22 545//22 557//23
+f 1276//7 882//7 124//8 123//8
+f 1675//49 1335//50 1334//50 297//50 296//49
+f 1012//7 1015//7 1559//8 1558//8
+f 540//48 954//45 957//46 537//48
+f 583//28 368//27 184//27 183//28
+f 793//36 796//36 1321//36 1676//36
+f 1677//70 1678//70 1366//70 1365//70
+f 278//42 1609//38 1142//39 1096//38 735//39 279//41
+f 1376//32 1669//32 1668//32 1377//32
+f 1605//70 1622//70 1266//70 1265//70
+f 95//28 94//27 1679//27 1680//28
+f 1681//35 51//33 50//34 1682//35
+f 648//18 1420//18 1540//18 643//18
+f 652//9 1346//10 1345//11 653//12
+f 1288//25 1284//22 1283//22 1625//23
+f 504//36 1046//36 1248//36 505//36
+f 1229//14 178//14 177//13 766//16 767//17 831//13
+f 298//18 297//18 1334//18 1333//18
+f 1683//25 1684//22 1685//22 1686//23
+f 1554//50 204//50 203//50 1687//49 1555//49
+f 517//75 1079//75 1078//75 518//75
+f 1297//26 1398//27 675//27 674//28
+f 1650//54 1566//53 1389//53 1388//54
+f 470//23 1067//23 1066//22 471//22
+f 1399//25 1298//22 673//22 672//23
+f 1120//22 717//22 262//23 261//23
+f 1688//30 1410//30 121//30 120//30
+f 1127//58 1129//58 1134//59 1367//59 1128//59
+f 598//2 597//2 311//2 314//2 750//2 749//2 1689//2 1690//2 1675//2 296//2 295//2 1537//2 1691//2 304//2 303//2
+f 161//23 175//22 1264//22 1254//23
+f 624//2 627//2 1503//2 1100//2 1099//2 1513//2 1692//2 1364//2 1363//2 1693//2 1017//2 117//2 116//2 602//2 601//2
+f 200//30 199//30 490//30 1489//30
+f 1367//29 1134//29 1133//29 1368//29
+f 589//30 1280//30 1436//30 590//30
+f 1369//27 1379//27 1194//28 1193//26
+f 1003//9 1006//9 1417//11 1054//11
+f 96//11 95//9 1680//9 1010//11
+f 510//52 509//76 1694//54 1514//54
+f 1171//29 1546//29 1695//29 1172//29
+f 1339//9 1454//9 1696//11 1340//11
+f 1697//33 1698//34 500//35 499//35
+f 1682//48 1664//46 1665//46 1681//48
+f 1655//75 1656//75 37//75 36//75
+f 1114//22 1113//22 1699//23 1700//25
+f 1485//2 1484//2 1701//2 1588//2
+f 1512//2 1511//2 1702//2 1703//2 947//2 946//2 1704//2 981//2 980//2 1660//2 1659//2 618//2 617//2 1506//2 1505//2
+f 1552//35 786//33 785//34 1604//35
+f 1181//3 1285//3 367//3 366//3
+f 1322//2 1243//2 376//2 375//2
+f 698//11 1459//9 1458//9 699//11
+f 1374//3 950//3 953//3 964//3 963//3 1373//3 1705//3 315//3 320//3 1670//3 1669//3 1376//3 1375//3 1360//3 1359//3
+f 1577//28 991//27 990//27 1578//28
+f 1116//51 792//52 791//53 1117//54
+f 1187//11 1706//9 1707//9 1186//11
+f 688//1 609//1 608//1 1708//1 1528//1 1527//1 1709//1 1496//1 1495//1 1526//1 256//1 255//1 1523//1 1522//1 1654//1 1710//1 491//1 494//1 1431//1 1711//1
+f 814//32 1712//32 985//32 815//32
+f 868//2 872//2 804//2 803//2 1102//2 1101//2 1205//2 1713//2 1107//2 1106//2 535//2 534//2 1105//2 1037//2 1036//2
+f 233//11 1305//9 995//9 230//11
+f 714//2 713//2 1261//2 259//2 258//2 1714//2 282//2 275//2 274//2 434//2 433//2 271//2 270//2 451//2 450//2
+f 990//2 989//2 1154//2 1409//2 986//2 985//2 1712//2 1715//2 1716//2 1533//2 1170//2 992//2 481//2 480//2 1578//2
+f 1514//46 1694//65 1717//48 1515//48
+f 28//22 160//22 3//23 2//23
+f 139//20 389//69 588//19 590//19 1436//19 140//19
+f 1510//3 1509//3 1508//3 1507//3
+f 1718//19 1541//19 1419//19 1343//19 1342//20 1719//21
+f 948//9 947//9 1703//11 1519//11
+f 1720//49 1413//49 222//50 221//50 225//50
+f 287//48 775//46 411//65 288//47
+f 1429//6 731//6 734//6 979//5 1060//5
+f 226//3 1114//3 1700//3 1721//3 1722//3 1108//3 55//3 59//3 1723//3 1724//3 1424//3 707//3 710//3 1725//3 227//3
+f 1152//35 1151//37 782//33 781//34
+f 197//59 200//59 1489//59 1488//58 1574//58
+f 67//22 66//22 1271//23 1270//23
+f 277//30 280//30 737//30 1396//30
+f 1726//7 1109//8 1108//8 1722//7
+f 1727//49 1728//50 428//50 427//50 1263//49
+f 1729//30 1730//30 1456//30 1455//30
+f 811//14 1533//14 1716//13 1731//16 1591//17 812//13
+f 1172//43 1695//43 1732//44 915//44 914//43
+f 302//2 301//2 850//2 993//2
+f 991//3 1577//3 479//3 478//3
+f 1677//52 410//53 422//54 1678//54
+f 364//32 661//32 724//32 365//32
+f 1039//4 1038//4 1528//4 1708//4
+f 1651//3 1733//3 1646//3 1649//3 1331//3 1330//3 626//3 625//3 600//3 599//3 119//3 118//3 1016//3 1177//3 1180//3
+f 1277//5 122//5 127//6 1319//6 1734//6
+f 759//18 847//18 1204//18 760//18
+f 1674//11 1735//9 546//9 545//11
+f 79//23 900//22 899//24 80//23
+f 1362//3 1361//3 1736//3 1737//3
+f 1738//3 341//3 340//3 998//3
+f 1739//2 1652//2 1179//2 1178//2
+f 614//12 613//9 1713//10 1205//11
+f 1740//22 342//23 341//23 1738//22
+f 1137//70 684//70 42//70 41//70 1009//70 1157//70 38//70 37//70 1656//70 1130//70 1129//70 1127//70 1126//70 46//70 45//70
+f 953//9 952//9 965//11 964//11
+f 1057//9 1437//9 462//11 461//11
+f 1741//22 1742//22 1743//23 1744//23
+f 1719//32 1342//32 1341//32 1745//32
+f 491//27 1710//31 1746//28 492//28
+f 1645//3 1747//3 1191//3 1190//3 1072//3 1077//3 1464//3 1748//3 1749//3 972//3 975//3 1750//3 1751//3 1434//3 1433//3
+f 1111//22 570//23 252//23 251//22
+f 1752//23 1753//23 1754//22 1755//22
+f 1647//2 1329//2 1332//2 1648//2
+f 209//11 208//9 719//9 442//11
+f 1688//18 604//18 603//18 1410//18
+f 332//27 331//27 676//28 924//28
+f 285//1 410//1 1677//1 1365//1 420//1 419//1 1662//1 794//1 793//1 1676//1 1661//1 1550//1 1549//1 1183//1 1182//1 1210//1 413//1 412//1 776//1 286//1
+f 307//26 1756//27 649//27 308//28
+f 1157//48 1009//46 892//46 891//48
+f 70//27 69//27 935//28 934//28
+f 33//32 1414//32 11//32 10//32
+f 1692//1 1513//1 1252//1 1253//1 1503//1 627//1 626//1 1330//1 1329//1 1647//1 1646//1 1733//1 1739//1 1178//1 1177//1 1016//1 1017//1 1693//1 1737//1 1736//1
+f 654//1 1344//1 681//1 680//1 1757//1 650//1 649//1 1756//1 1518//1 569//1 568//1 687//1 1745//1 1341//1 1001//1 560//1 559//1 1348//1 1347//1 651//1
+f 1052//32 549//32 548//32 1053//32
+f 1310//2 1256//2 1227//2 1226//2 1727//2 1263//2 1262//2 325//2 326//2 1209//2 1208//2 324//2 323//2 1257//2 1758//2
+f 982//32 981//32 1704//32 1061//32
+f 1759//32 1690//32 1689//32 1760//32
+f 751//3 313//3 312//3 748//3
+f 1050//13 1049//14 552//14 551//13 1385//16 1761//17
+f 1536//3 294//3 293//3 1667//3 1759//3 1760//3 1762//3 1483//3 1482//3 1589//3 928//3 901//3 904//3 1502//3 1763//3
+f 1601//45 1602//46 1029//48 1028//48
+f 336//27 335//27 999//28 922//28
+f 1579//9 1582//9 1764//11 1765//12
+f 1592//18 1591//18 1731//18 1766//18
+f 1080//36 1079//36 517//36 516//36 1338//36 1259//36 513//36 512//36 1717//36 1694//36 509//36 508//36 916//36 915//36 1732//36
+f 1497//9 1500//10 1742//11 1741//12
+f 1402//3 396//3 395//3 829//3
+f 1661//52 1676//76 1321//54 1320//54
+f 1767//6 628//5 642//5 1135//6 1141//6
+f 1381//29 487//29 486//29 1768//29
+f 1769//49 1770//50 1032//50 1031//50 1771//49
+f 374//23 1323//22 1322//22 375//23
+f 1772//25 1083//22 1082//22 1773//23
+f 1000//22 334//23 333//25 923//22
+f 1449//25 1448//22 1774//22 1467//23
+f 1247//23 1246//22 885//22 884//23
+f 1290//13 385//14 384//14 862//13 1775//16 1776//17
+f 265//23 1122//22 682//22 266//23
+f 1470//3 1633//3 1148//3 1147//3
+f 455//7 454//7 1777//8 920//8
+f 1024//23 1357//22 1356//22 1025//23
+f 1705//7 1778//7 316//8 315//8
+f 801//7 800//7 845//8 844//8
+f 1592//30 1766//30 1779//30 1593//30
+f 1692//23 1736//25 1361//22 1364//22
+f 929//1 928//1 1589//1 1588//1 1701//1 1762//1 1760//1 1689//1 749//1 748//1 312//1 311//1 597//1 596//1 305//1 304//1 1691//1 1763//1 1502//1 1501//1
+f 1628//27 865//27 864//28 1671//28
+f 1768//43 486//43 485//44 1394//44 1571//43
+f 1319//30 1318//30 1780//30 1734//30
+f 448//6 453//5 711//5 716//6 730//6
+f 100//8 99//8 216//7 290//7
+f 90//2 1641//2 1781//2 91//2
+f 170//9 1176//9 1241//11 171//12
+f 1277//19 1734//19 1780//19 881//19 880//20 1162//73
+f 1538//2 1232//2 1231//2 73//2 72//2 936//2 935//2 69//2 68//2 1186//2 1707//2 85//2 84//2 1427//2 1426//2
+f 1743//2 1742//2 1500//2 1499//2
+f 664//3 1535//3 1469//3 665//3
+f 80//2 899//2 898//2 81//2
+f 1417//2 1006//2 1005//2 1418//2
+f 1645//22 22//22 21//23 1747//23
+f 1174//9 1782//9 1164//11 1167//11
+f 192//3 191//3 1453//3 662//3
+f 1726//4 1722//4 1721//4 1783//4
+f 1784//27 1198//31 1197//28 1532//28
+f 158//2 157//2 1773//2 1082//2
+f 596//3 595//3 306//3 305//3
+f 1103//2 1642//2 1785//2 1104//2
+f 34//2 20//2 19//2 1411//2 1490//2 16//2 15//2 753//2 752//2 12//2 11//2 1414//2 1413//2 1720//2 1534//2
+f 1771//2 62//2 61//2 1008//2 1025//2 1356//2 1355//2 1022//2 113//2 112//2 1112//2 1021//2 856//2 855//2 1769//2
+f 772//3 773//3 1786//3 106//3 111//3 1471//3 1479//3 1478//3 1315//3 1314//3 156//3 155//3 1083//3 1772//3 1787//3
+f 1306//9 1309//10 1631//11 1630//12
+f 201//30 204//30 1554//30 1440//30
+f 1788//17 1786//13 773//14 669//14 668//13 1789//16
+f 634//23 633//22 1070//22 1071//23
+f 1790//19 1791//19 1770//19 1769//19 855//20 854//21
+f 1448//11 1447//9 1472//9 1774//11
+f 1788//18 1789//18 1422//18 1421//18
+f 867//22 866//23 1627//23 977//22
+f 1292//32 860//32 859//32 1293//32
+f 1350//18 1562//18 1561//18 1351//18
+f 196//12 583//9 183//10 182//11
+f 1718//3 1719//3 1745//3 687//3 686//3 1517//3 1518//3 1756//3 307//3 310//3 1757//3 680//3 679//3 645//3 644//3
+f 1678//46 422//46 421//48 1366//48
+f 1538//49 1426//49 1428//50 1457//50 1539//50
+f 1381//30 1768//30 1571//30 1382//30
+f 1584//3 978//3 977//3 1627//3
+f 1195//24 1371//23 1370//23 1192//22
+f 257//23 1473//22 1714//22 258//23
+f 1467//2 1774//2 1472//2 1468//2
+f 57//30 105//30 754//30 58//30
+f 902//2 929//2 1501//2 903//2
+f 232//3 1019//3 1459//3 698//3 697//3 1007//3 60//3 63//3 1792//3 1790//3 854//3 853//3 1020//3 1305//3 233//3
+f 959//26 373//27 372//27 960//28
+f 637//12 636//9 1785//10 1642//11
+f 1474//6 1477//6 1793//6 1443//5 1442//5
+f 679//7 678//7 646//8 645//8
+f 1291//5 1290//5 1776//6 1729//6 1455//6
+f 346//23 345//25 1340//22 1696//22
+f 273//23 435//22 434//22 274//23
+f 1794//27 1795//31 1635//28 1634//28
+f 106//5 1786//5 1788//6 1421//6 107//6
+f 912//70 917//70 507//70 506//70 1249//70 1047//70 503//70 502//70 746//70 1590//70 519//70 518//70 1078//70 1081//70 1545//70
+f 1709//23 1527//23 584//22 587//22
+f 1739//23 1733//25 1651//22 1652//22
+f 1718//5 644//5 643//6 1540//6 1541//6
+f 1492//1 154//1 153//1 1679//1 94//1 97//1 1011//1 894//1 893//1 1796//1 1781//1 1641//1 1640//1 1653//1 1199//1 1198//1 1784//1 1797//1 1798//1 1493//1
+f 1799//6 1547//6 1548//6 1594//5 1800//5
+f 1173//27 1378//31 1782//28 1174//28
+f 632//9 843//9 1070//11 633//12
+f 1625//2 1283//2 1282//2 1626//2
+f 1628//3 1671//3 474//3 473//3
+f 452//32 451//32 270//32 269//32
+f 1776//18 1775//18 1730//18 1729//18
+f 1796//23 88//22 91//22 1781//23
+f 1723//32 1801//32 1802//32 1724//32
+f 1724//1 1802//1 1795//1 1794//1 1672//1 1673//1 932//1 931//1 1683//1 1686//1 1783//1 1721//1 1700//1 1699//1 228//1 227//1 1725//1 1621//1 1425//1 1424//1
+f 1658//75 1657//75 1803//75 1804//75
+f 1635//2 1795//2 1802//2 1801//2 756//2 755//2 1109//2 1726//2 1783//2 1686//2 1685//2 933//2 932//2 1673//2 1636//2
+f 572//3 580//3 579//3 573//3
+f 1587//3 129//3 128//3 944//3
+f 1728//19 1727//19 1226//20 167//20 166//19 1326//19
+f 30//14 1534//14 1720//13 225//16 224//17 31//13
+f 1663//56 418//56 417//55 1043//55
+f 1805//9 1806//9 1755//11 1754//12
+f 656//14 920//14 1777//15 1807//14 439//16 438//17
+f 619//7 618//7 1659//8 1059//8
+f 1637//3 1672//3 1794//3 1634//3
+f 1223//2 1313//2 1416//2 1224//2
+f 694//9 468//9 471//11 1066//11
+f 1311//32 1427//32 84//32 83//32
+f 1667//19 1336//19 1335//19 1675//19 1690//20 1759//21
+f 849//46 840//46 839//48 1144//48
+f 881//49 1780//50 1318//50 126//50 125//49
+f 1132//44 1124//44 1123//43 1368//43 1133//43
+f 1281//28 1287//27 1626//31 1282//28
+f 1200//51 1808//52 1809//53 1201//54
+f 1603//54 784//52 783//53 1553//54
+f 1300//9 877//9 876//11 1299//12
+f 1464//19 529//19 528//19 1810//19 1811//20 1748//20
+f 310//22 309//22 650//23 1757//23
+f 512//34 511//34 1515//35 1717//35
+f 696//2 699//2 1458//2 1018//2
+f 1699//2 1113//2 229//2 228//2
+f 733//50 732//50 1430//50 1660//49 980//49
+f 931//3 930//3 1684//3 1683//3
+f 1378//2 1377//2 1668//2 1465//2 317//2 316//2 1778//2 1372//2 1371//2 1195//2 1194//2 1379//2 1165//2 1164//2 1782//2
+f 1738//11 998//9 997//9 1740//11
+f 1812//67 1487//67 1486//67 1813//67
+f 605//9 606//9 798//11 797//11
+f 968//30 969//30 659//30 658//30
+f 334//2 1000//2 999//2 335//2
+f 223//6 32//5 31//5 224//6 220//6
+f 1618//35 1617//33 1613//34 1612//35
+f 493//11 492//9 1746//9 1432//11
+f 1814//23 1765//22 1764//22 1815//23
+f 1462//48 1600//46 1599//46 1463//48
+f 1486//36 489//36 488//36 1576//36 1658//36 1804//36 941//36 940//36 1201//36 1809//36 1697//36 499//36 498//36 1573//36 1813//36
+f 1102//4 803//4 640//4 639//4
+f 500//70 1698//70 1572//70 497//70
+f 538//36 537//36 957//36 956//36
+f 824//23 771//23 770//22 1543//22
+f 86//27 85//27 1707//28 1706//28
+f 1087//35 1086//33 1624//34 1639//35
+f 868//19 1036//20 629//20 628//19 1767//19 869//19
+f 1805//28 1816//27 1817//27 1806//28
+f 1187//3 87//3 86//3 1706//3
+f 1535//11 664//9 248//9 247//11
+f 1168//22 1169//23 1751//25 1750//22
+f 1818//32 1749//32 1748//32 1811//32
+f 1670//5 320//5 319//6 1156//6 1529//6
+f 636//28 635//27 1104//27 1785//28
+f 1607//54 1565//52 1391//53 1390//54
+f 538//1 956//1 955//1 1812//1 1813//1 1573//1 1572//1 1698//1 1697//1 1809//1 1808//1 938//1 941//1 1804//1 1803//1 467//1 466//1 543//1 542//1 539//1
+f 952//2 951//2 962//2 965//2
+f 1057//28 1056//27 1438//27 1437//28
+f 544//36 543//36 466//36 465//36
+f 599//5 604//6 1688//6 120//6 119//5
+f 1808//70 1200//70 939//70 938//70
+f 819//23 818//23 1035//22 852//22
+f 659//50 969//50 967//50 725//49 660//49
+f 1124//36 1132//36 1131//36 1655//36 36//36 35//36 970//36 1235//36 52//36 51//36 1681//36 1665//36 48//36 47//36 1125//36
+f 1216//67 1215//67 778//67 777//67
+f 50//70 49//70 1664//70 1682//70
+f 685//36 1138//36 44//36 43//36
+f 1090//33 1622//34 1605//35 1091//37
+f 1141//30 870//30 869//30 1767//30
+f 1758//22 1257//23 1237//23 1236//22
+f 1551//44 1214//44 1213//43 1251//43 1250//43
+f 1295//28 1294//27 1542//27 1303//28
+f 655//19 657//19 1435//19 1819//19 1666//20 921//20
+f 1278//9 1302//9 1301//11 1279//12
+f 561//9 1002//9 1349//11 558//12
+f 278//59 277//59 1396//59 1395//58 1609//58
+f 59//19 58//19 754//19 756//19 1801//20 1723//20
+f 769//9 1544//9 1543//11 770//12
+f 1234//70 971//70 54//70 53//70
+f 930//9 933//9 1685//11 1684//11
+f 1715//49 1779//50 1766//50 1731//50 1716//49
+f 1612//48 1611//46 1619//46 1618//48
+f 1585//3 1735//3 1674//3 1586//3
+f 1725//25 710//22 709//22 1621//23
+f 1188//1 1191//1 1747//1 21//1 24//1 1434//1 1751//1 1169//1 973//1 972//1 1749//1 1818//1 691//1 690//1 1161//1 1615//1 1159//1 1158//1 1212//1 1504//1
+f 1603//46 1553//46 1552//48 1604//48
+f 1509//9 1512//9 1505//11 1508//11
+f 1585//27 547//31 546//28 1735//28
+f 1048//4 1058//4 554//4 553//4
+f 352//9 927//9 926//11 353//12
+f 1583//3 398//3 397//3 1530//3 523//3 522//3 588//3 389//3 388//3 405//3 1557//3 1412//3 402//3 401//3 495//3
+f 1633//9 244//9 243//11 1148//11
+f 1408//3 1153//3 988//3 987//3
+f 150//22 149//23 394//23 431//22
+f 1317//1 1480//1 1479//1 1471//1 667//1 663//1 662//1 1453//1 666//1 675//1 1398//1 1399//1 672//1 671//1 1787//1 1772//1 1773//1 157//1 156//1 1314//1
+f 1820//50 1476//50 1475//50 238//49 237//49
+f 1820//19 237//19 236//20 1444//20 1443//19 1793//19
+f 1814//3 1498//3 1497//3 1741//3 1744//3 1013//3 1012//3 1558//3 1563//3 1643//3 378//3 381//3 1580//3 1579//3 1765//3
+f 1033//30 1032//30 1770//30 1791//30
+f 1762//27 1701//27 1484//28 1483//28
+f 1385//18 1384//18 1400//18 1761//18
+f 1545//77 1081//39 1080//39 1732//40 1695//41 1546//42
+f 1278//28 1275//27 1274//27 1302//28
+f 861//49 1456//50 1730//50 1775//50 862//49
+f 1039//2 1708//2 608//2 607//2 1516//2 1711//2 1431//2 1432//2 1746//2 1710//2 1654//2 1556//2 1555//2 1687//2 1040//2
+f 775//70 287//70 286//70 776//70
+f 1245//26 1244//27 874//27 873//28
+f 1523//27 255//31 254//28 1524//28
+f 1402//12 829//9 147//10 146//11
+f 692//2 691//2 1818//2 1811//2 1810//2 1074//2 1073//2 1189//2 1188//2 1504//2 837//2 836//2 1159//2 1615//2 1616//2
+f 1325//14 1324//15 705//13 704//16 1799//17 1800//13
+f 1702//23 1520//25 1519//22 1703//22
+f 1737//27 1693//31 1363//28 1362//28
+f 757//19 761//19 1203//19 1202//19 739//20 738//20
+f 1557//9 437//9 436//11 1412//12
+f 330//23 329//25 925//22 677//22
+f 1045//29 1044//29 348//29 347//29
+f 654//23 653//22 1345//22 1344//23
+f 256//23 1526//25 1525//22 253//22
+f 1537//4 1536//4 1763//4 1691//4
+f 249//27 578//27 1110//28 250//28
+f 949//9 683//9 682//11 1122//12
+f 1041//14 1040//14 1687//13 203//16 202//17 1439//13
+f 553//7 552//8 1049//8 1048//7
+f 1316//2 1481//2 1480//2 1317//2
+f 1790//5 1792//5 1030//6 1033//6 1791//6
+f 1666//2 1819//2 1807//2 1777//2 454//2 327//2 346//2 1696//2 1454//2 343//2 342//2 1740//2 997//2 339//2 338//2
+f 213//11 212//9 532//9 611//11
+f 613//28 612//27 1107//27 1713//28
+f 1013//1 1744//1 1743//1 1499//1 1498//1 1814//1 1815//1 1581//1 1580//1 381//1 380//1 1817//1 1816//1 1753//1 1752//1 1308//1 1307//1 1629//1 1632//1 1014//1
+f 363//5 362//5 966//6 968//6 658//6
+f 1639//48 1638//46 1088//46 1087//48
+f 456//9 459//10 728//11 976//12
+f 1644//2 1560//2 1559//2 1015//2 1014//2 1632//2 1631//2 1309//2 1308//2 1752//2 1755//2 1806//2 1817//2 380//2 379//2
+f 1750//11 975//9 974//10 1168//11
+f 1473//12 281//9 282//10 1714//11
+f 542//70 541//70 464//70 467//70 1803//70 1657//70 1575//70 1574//70 1488//70 1487//70 1812//70 955//70 954//70 540//70 539//70
+f 1816//3 1805//3 1754//3 1753//3
+f 1815//2 1764//2 1582//2 1581//2
+f 1810//49 528//50 527//50 1075//50 1074//49
+f 63//14 62//14 1771//13 1031//16 1030//17 1792//13
+f 768//27 823//27 1544//28 769//28
+f 586//2 1496//2 1709//2 587//2
+f 151//11 1491//9 1494//9 152//11
+f 109//49 108//50 1422//50 1789//50 668//49
+f 1065//25 1064//22 1404//22 1403//23
+f 1047//66 1249//46 1248//46 1046//48
+f 1607//46 1390//46 745//48 744//48
+f 1331//11 1649//9 1648//9 1332//11
+f 1372//4 1778//4 1705//4 1373//4
+f 1360//28 1375//27 135//27 134//28
+f 1307//3 1306//3 1630//3 1629//3
+f 772//4 1787//4 671//4 670//4
+f 1477//30 1476//30 1820//30 1793//30
+f 1797//32 1596//32 1595//32 1798//32
+f 1614//75 1567//75 1387//75 1386//75
+f 1531//3 1653//3 1640//3 89//3 88//3 1796//3 893//3 896//3 1325//3 1800//3 1594//3 1596//3 1797//3 1784//3 1532//3
+f 153//2 152//2 1494//2 1493//2 1798//2 1595//2 706//2 705//2 1324//2 895//2 894//2 1011//2 1010//2 1680//2 1679//2
+f 1357//3 1024//3 1023//3 1354//3
+f 582//22 574//23 573//23 579//22
+f 1491//3 151//3 154//3 1492//3
+f 1300//28 1267//27 878//27 877//28
+f 1051//5 1050//5 1761//6 1400//6 1401//6
+f 1137//54 45//52 44//53 1138//54
+f 129//28 1587//27 556//31 130//28
+f 371//2 961//2 960//2 372//2
+f 730//30 729//30 449//30 448//30
+f 1712//20 814//69 813//19 1593//19 1779//19 1715//19
+f 208//28 207//27 576//31 719//28
+f 780//52 779//53 1150//54 1149//54
+f 429//30 428//30 1728//30 1326//30
+f 1444//32 236//32 235//32 1445//32
+f 470//1 469//1 695//1 1065//1 1403//1 1406//1 1062//1 1061//1 1704//1 946//1 945//1 1520//1 1702//1 1511//1 1510//1 1507//1 1506//1 617//1 616//1 1067//1
+f 1245//9 873//10 885//11 1246//12
+f 1239//9 1310//9 1758//11 1236//12
+f 1819//49 1435//50 440//50 439//50 1807//49
+f 1638//54 1623//52 1089//53 1088//54
+f 1799//18 704//18 703//18 1547//18
+f 688//27 1711//31 1516//28 689//28
+o Floor
+v -39.484219 -25.864807 -0.000000
+v -39.484219 27.040174 0.000002
+v -39.484219 27.040174 -0.499998
+v -39.484219 -25.864807 -0.500000
+v 33.542374 27.040174 0.000002
+v 33.542374 27.040174 -0.499998
+v 43.770226 -25.864807 -0.000000
+v 43.770226 -25.864807 -0.500000
+v 13.601372 12.119150 0.000002
+v -37.380447 -16.977444 0.000000
+v 12.872247 16.323282 0.000002
+v -37.330448 -23.844000 0.000000
+v -37.330448 -16.977444 0.000000
+v 50.317074 -19.047932 0.000000
+v -37.380447 -16.177444 0.000000
+v 36.027946 20.211119 0.000002
+v -37.380447 -15.246632 0.000000
+v 34.568771 24.220171 0.000002
+v -37.330448 -16.177444 0.000000
+v 50.317074 -19.047932 -0.500000
+v -37.330448 -15.246632 0.000000
+v 34.568771 24.220171 -0.199998
+v -37.380447 -14.446631 0.000000
+v 36.027946 20.211119 -0.199998
+v 34.568771 24.220171 4.071209
+v -37.330448 -12.729661 0.000000
+v -37.330448 -14.446631 0.000000
+v 36.027946 20.211119 4.203956
+v -35.085789 -12.279661 0.000001
+v -35.035789 -12.729661 0.000000
+v -35.035789 -12.279661 0.000001
+v -35.085789 -11.479661 0.000001
+v -37.330448 -7.076204 0.000001
+v -35.035789 -7.076204 0.000001
+v -35.035789 -11.479661 0.000001
+v -37.380447 -0.450436 0.000001
+v -37.330448 -0.450436 0.000001
+v -37.380447 1.426359 0.000001
+v -37.330448 1.426359 0.000001
+v -37.380447 0.349564 0.000001
+v -37.330448 0.349564 0.000001
+v -37.380447 2.226360 0.000001
+v -37.330448 8.887293 0.000001
+v -37.330448 2.226360 0.000001
+v 14.948427 -23.844000 0.000000
+v -13.628716 7.941137 0.000001
+v -13.289828 7.991137 0.000001
+v -13.289828 7.941137 0.000001
+v -13.628716 8.887293 0.000001
+v -12.489828 7.991137 0.000001
+v -11.128716 7.941137 0.000001
+v -12.489828 7.941137 0.000001
+v 16.198427 -18.761621 0.000000
+v 17.448427 -23.844000 0.000000
+v 14.948427 -18.711620 0.000000
+v 16.198427 -18.711620 0.000000
+v 16.998426 -18.761621 0.000000
+v 16.998426 -18.711620 0.000000
+v 17.448427 -18.711620 0.000000
+v -11.128716 16.323317 0.000002
+v -3.688910 11.009729 0.000002
+v -3.217584 11.523291 0.000002
+v -4.016689 10.394541 0.000001
+v -4.180056 9.716894 0.000001
+v -4.168609 9.019926 0.000001
+v -2.632718 11.902533 0.000002
+v -1.971545 12.123316 0.000002
+v 40.000263 -23.844000 0.000000
+v 40.000263 -18.711620 0.000000
+v 41.594418 -18.711620 0.000000
+v 41.552635 -18.611385 0.000000
+v 41.537792 -18.503811 0.000000
+v 41.655529 -18.207760 0.000000
+v 41.590996 -18.295099 0.000000
+v 41.550865 -18.396008 0.000000
+v 41.839405 -18.095594 0.000000
+v 41.946594 -18.078186 0.000000
+v 41.740196 -18.139759 0.000000
+v 42.054680 -18.088682 0.000000
+v 13.600650 12.123316 0.000002
+v 13.612914 12.123316 0.000002
+v 19.656212 9.019926 0.000001
+v 19.656212 9.893988 0.000001
+v 46.174992 -14.785413 0.000000
+v 41.475014 -16.496065 0.000000
+v 35.322247 0.201824 0.000001
+v 35.369232 0.218925 0.000001
+v 35.476158 -0.221037 0.000001
+v 35.048634 0.953579 0.000001
+v 34.621105 2.128193 0.000001
+v 35.095615 0.970678 0.000001
+v 26.182775 12.322668 0.000002
+v 26.199875 12.275686 0.000002
+v 26.934528 12.596285 0.000002
+v 27.800396 12.858225 0.000002
+v 26.951630 12.549299 0.000002
+v 27.783295 12.905210 0.000002
+v 40.242565 1.513794 0.000001
+v 39.387516 3.863026 0.000001
+v 28.535048 13.178827 0.000002
+v 35.141079 15.530016 0.000002
+v 28.552149 13.131842 0.000002
+v 12.872341 16.323317 0.000002
+v 13.612912 12.123316 0.000002
+v -22.672579 -21.454777 0.000000
+v -22.672579 -21.854776 0.000000
+v -22.272577 -21.454777 0.000000
+v -22.272577 -21.854776 0.000000
+v -30.175529 -18.653444 0.000000
+v -30.175529 -19.053444 0.000000
+v -29.775530 -18.653444 0.000000
+v -29.775530 -19.053444 0.000000
+v -22.675529 -18.653444 0.000000
+v -22.675529 -19.053444 0.000000
+v -22.275530 -18.653444 0.000000
+v -22.275530 -19.053444 0.000000
+v -18.925529 -18.653444 0.000000
+v -18.925529 -19.053444 0.000000
+v -18.525530 -18.653444 0.000000
+v -18.525530 -19.053444 0.000000
+v -11.475529 -18.653444 0.000000
+v -11.475529 -19.053444 0.000000
+v -11.075529 -18.653444 0.000000
+v -11.075529 -19.053444 0.000000
+v -3.975529 -18.653444 0.000000
+v -3.975529 -19.053444 0.000000
+v -3.575529 -18.653444 0.000000
+v -3.575529 -19.053444 0.000000
+v -0.175529 -18.653444 0.000000
+v -0.175529 -19.053444 0.000000
+v 0.224471 -18.653444 0.000000
+v 0.224471 -19.053444 0.000000
+v -30.172609 -12.343353 0.000001
+v -30.172609 -12.743353 0.000000
+v -29.772608 -12.343353 0.000001
+v -29.772608 -12.743353 0.000000
+v -22.672609 -12.343353 0.000001
+v -22.672609 -12.743353 0.000000
+v -22.272610 -12.343353 0.000001
+v -22.272610 -12.743353 0.000000
+v -18.870583 -12.729661 0.000000
+v -9.485923 -12.729661 0.000000
+v -18.870583 -2.060263 0.000001
+v -9.485923 -7.099552 0.000001
+v -15.331446 -2.060263 0.000001
+v -13.628716 -7.099552 0.000001
+v -15.331446 -2.110262 0.000001
+v -13.628716 -2.049547 0.000001
+v -14.531446 -2.110262 0.000001
+v -14.531446 -2.049547 0.000001
+v -3.972609 -12.343353 0.000001
+v -3.972609 -12.743353 0.000000
+v -3.572609 -12.343353 0.000001
+v -3.572609 -12.743353 0.000000
+v -0.172609 -12.343353 0.000001
+v -0.172609 -12.743353 0.000000
+v 0.227391 -12.343353 0.000001
+v 0.227391 -12.743353 0.000000
+v 7.327422 -21.454777 0.000000
+v 7.327422 -21.854776 0.000000
+v 7.727422 -21.454777 0.000000
+v 7.727422 -21.854776 0.000000
+v 7.324471 -18.653444 0.000000
+v 7.324471 -19.053444 0.000000
+v 7.724471 -18.653444 0.000000
+v 7.724471 -19.053444 0.000000
+v 22.318348 -18.653444 0.000000
+v 22.318348 -19.053444 0.000000
+v 22.718348 -18.653444 0.000000
+v 22.718348 -19.053444 0.000000
+v 29.818348 -18.653444 0.000000
+v 29.818348 -19.053444 0.000000
+v 30.218348 -18.653444 0.000000
+v 30.218348 -19.053444 0.000000
+v 37.318348 -18.653444 0.000000
+v 37.318348 -19.053444 0.000000
+v 37.718346 -18.653444 0.000000
+v 37.718346 -19.053444 0.000000
+v 7.327391 -12.343353 0.000001
+v 7.327391 -12.743353 0.000000
+v 7.727391 -12.343353 0.000001
+v 7.727391 -12.743353 0.000000
+v 14.827391 -12.343353 0.000001
+v 14.827391 -12.743353 0.000000
+v 15.227391 -12.343353 0.000001
+v 15.227391 -12.743353 0.000000
+v 22.327391 -12.343353 0.000001
+v 22.327391 -12.743353 0.000000
+v 22.727390 -12.343353 0.000001
+v 22.727390 -12.743353 0.000000
+v 40.377884 -14.167850 0.000000
+v 40.514694 -14.543727 0.000000
+v 40.753761 -14.031042 0.000000
+v 40.890572 -14.406919 0.000000
+v 24.087997 -4.097775 0.000001
+v 22.313528 -6.631981 0.000001
+v 27.941290 -5.288776 0.000001
+v 24.750605 -9.845544 0.000001
+v 28.803806 -5.860407 0.000001
+v 25.582762 -10.460536 0.000001
+v 28.776186 -5.902084 0.000001
+v 25.612478 -10.420326 0.000001
+v 29.443029 -6.344032 0.000001
+v 26.255848 -10.895800 0.000001
+v 29.470652 -6.302355 0.000001
+v 26.226131 -10.936009 0.000001
+v 31.986221 -7.969539 0.000001
+v 28.653147 -12.729661 0.000000
+v 32.898914 -10.477148 0.000001
+v 31.321690 -12.729661 0.000000
+v -30.196814 -6.199760 0.000001
+v -30.196814 -6.599760 0.000001
+v -29.796814 -6.199760 0.000001
+v -29.796814 -6.599760 0.000001
+v -22.696814 -6.199760 0.000001
+v -22.696814 -6.599760 0.000001
+v -22.296814 -6.199760 0.000001
+v -22.296814 -6.599760 0.000001
+v -30.181654 -2.080406 0.000001
+v -30.181654 -2.480406 0.000001
+v -29.781652 -2.080406 0.000001
+v -29.781652 -2.480406 0.000001
+v -22.681652 -2.080406 0.000001
+v -22.681652 -2.480406 0.000001
+v -22.281652 -2.080406 0.000001
+v -22.281652 -2.480406 0.000001
+v -11.496814 -6.199760 0.000001
+v -11.496814 -6.599760 0.000001
+v -11.096814 -6.199760 0.000001
+v -11.096814 -6.599760 0.000001
+v -3.996814 -6.199760 0.000001
+v -3.996814 -6.599760 0.000001
+v -3.596814 -6.199760 0.000001
+v -3.596814 -6.599760 0.000001
+v -0.196814 -6.199760 0.000001
+v -0.196814 -6.599760 0.000001
+v 0.203186 -6.199760 0.000001
+v 0.203186 -6.599760 0.000001
+v -11.481653 -2.080406 0.000001
+v -11.481653 -2.480406 0.000001
+v -11.081653 -2.080406 0.000001
+v -11.081653 -2.480406 0.000001
+v -3.981653 -2.080406 0.000001
+v -3.981653 -2.480406 0.000001
+v -3.581653 -2.080406 0.000001
+v -3.581653 -2.480406 0.000001
+v -0.181653 -2.080406 0.000001
+v -0.181653 -2.480406 0.000001
+v 0.218347 -2.080406 0.000001
+v 0.218347 -2.480406 0.000001
+v -30.175571 3.836163 0.000001
+v -29.775572 3.836163 0.000001
+v -30.175571 4.236162 0.000001
+v -29.775572 4.236162 0.000001
+v -22.675571 3.836163 0.000001
+v -22.275572 3.836163 0.000001
+v -22.675571 4.236162 0.000001
+v -22.275572 4.236162 0.000001
+v -18.925571 3.836163 0.000001
+v -18.525572 3.836163 0.000001
+v -18.925571 4.236162 0.000001
+v -18.525572 4.236162 0.000001
+v -11.475572 3.836163 0.000001
+v -11.075572 3.836163 0.000001
+v -11.475572 4.236162 0.000001
+v -11.075572 4.236162 0.000001
+v -3.975572 3.836163 0.000001
+v -3.575572 3.836163 0.000001
+v -3.975572 4.236162 0.000001
+v -3.575572 4.236162 0.000001
+v -0.175572 3.836163 0.000001
+v 0.224428 3.836163 0.000001
+v -0.175572 4.236162 0.000001
+v 0.224428 4.236162 0.000001
+v 7.303186 -6.199760 0.000001
+v 7.303186 -6.599760 0.000001
+v 7.703186 -6.199760 0.000001
+v 7.703186 -6.599760 0.000001
+v 14.803186 -6.199760 0.000001
+v 14.803186 -6.599760 0.000001
+v 15.203186 -6.199760 0.000001
+v 15.203186 -6.599760 0.000001
+v 7.318347 -2.080406 0.000001
+v 7.318347 -2.480406 0.000001
+v 7.718347 -2.080406 0.000001
+v 7.718347 -2.480406 0.000001
+v 14.818347 -2.080406 0.000001
+v 14.818347 -2.480406 0.000001
+v 15.218347 -2.080406 0.000001
+v 15.218347 -2.480406 0.000001
+v 22.318348 -2.080406 0.000001
+v 22.318348 -2.480406 0.000001
+v 22.718348 -2.080406 0.000001
+v 22.718348 -2.480406 0.000001
+v 37.812733 -7.120155 0.000001
+v 37.949543 -7.496031 0.000001
+v 38.188610 -6.983347 0.000001
+v 38.325420 -7.359224 0.000001
+v 29.327518 -2.227188 0.000001
+v 29.464327 -2.603065 0.000001
+v 29.703396 -2.090380 0.000001
+v 29.840204 -2.466257 0.000001
+v 20.842304 2.665781 0.000001
+v 20.979113 2.289904 0.000001
+v 21.218182 2.802588 0.000001
+v 21.354990 2.426712 0.000001
+v 7.324428 3.836163 0.000001
+v 7.724428 3.836163 0.000001
+v 7.324428 4.236162 0.000001
+v 7.724428 4.236162 0.000001
+v 14.824428 3.836163 0.000001
+v 15.224428 3.836163 0.000001
+v 14.824428 4.236162 0.000001
+v 15.224428 4.236162 0.000001
+v 26.762367 4.820507 0.000001
+v 26.899176 4.444630 0.000001
+v 27.138245 4.957315 0.000001
+v 27.275053 4.581438 0.000001
+v 32.682430 6.975235 0.000001
+v 32.819241 6.599358 0.000001
+v 33.058308 7.112041 0.000001
+v 33.195118 6.736166 0.000001
+v 12.872341 16.323317 0.000002
+v 12.872341 16.323317 0.000002
+v 12.872341 16.323317 0.000019
+v 12.872341 16.323317 0.000002
+v 13.600650 12.123316 0.000002
+v 13.600649 12.123316 0.000002
+v 13.612912 12.123316 0.002165
+v 13.612903 12.123312 0.002163
+v 13.612914 12.123316 0.002165
+v 21.967260 15.137735 1.568222
+v 12.872341 16.323317 0.000019
+v 21.126659 19.327642 1.548887
+v 13.612917 12.123316 0.000002
+v 13.612917 12.123316 0.000002
+v 13.612917 12.123316 0.000002
+v 13.612917 12.123316 0.000002
+v 13.612915 12.123316 0.000002
+v 13.612915 12.123316 0.000002
+v -1.356090 16.323317 0.000002
+v 12.872079 16.323317 0.000002
+v 12.872313 16.323317 0.000002
+v -36.659981 -23.844000 0.000000
+v 40.000263 -21.118254 0.000000
+v 45.559578 -15.009406 0.000000
+v 17.252346 9.019926 0.000001
+v 16.062939 9.019926 0.000001
+v 9.269960 9.019926 0.000001
+v 13.586552 12.123316 0.000002
+v -29.964800 -19.053444 0.000000
+v -29.775530 -18.918018 0.000000
+v -18.870583 -11.115277 0.000001
+v -13.258287 -7.099552 0.000001
+v 27.260542 -5.078367 0.000001
+v 32.266216 -11.380736 0.000001
+v 21.049763 2.741289 0.000001
+v 21.312033 2.411077 0.000001
+v -13.500953 -7.273184 0.000001
+v -5.856277 17.588205 0.000002
+v 21.267042 2.467722 0.000001
+v 30.847980 -9.595114 0.000001
+v 31.948866 -10.981178 0.000001
+v 45.722786 -15.147949 0.000000
+v 40.608887 -21.884537 0.000000
+v -0.078829 18.974249 0.000002
+v 27.509512 -5.391830 0.000001
+v 27.700636 -5.632465 0.000001
+v 27.754526 -5.700314 0.000001
+v 28.372587 -6.478481 0.000001
+v 28.441492 -6.565235 0.000001
+v 28.891457 -7.131760 0.000001
+v 30.257868 -8.852136 0.000001
+v -14.367959 -7.893547 0.000001
+vn -1.0000 -0.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 -0.0000 1.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.9397 0.3420 0.0000
+vn 0.7212 -0.6927 0.0000
+vn -0.3369 0.9415 0.0000
+vn -0.2906 -0.7064 0.6454
+vn -0.9853 -0.1710 0.0005
+vn -0.2383 0.6658 0.7071
+vn 0.1190 -0.6972 0.7069
+vn 0.0982 -0.6595 0.7453
+vn -0.1736 -0.0302 0.9843
+vn -0.1647 -0.0286 0.9859
+vn -0.4999 -0.0869 0.8617
+vn -0.1308 -0.1469 0.9805
+vn 0.1178 -0.7023 0.7021
+vn -0.0050 -0.7555 0.6551
+vn 0.0254 -0.7494 0.6616
+vn -0.3514 0.5913 0.7259
+vn -0.3591 0.6333 0.6856
+vn -0.3591 0.6332 0.6856
+vn -0.3420 0.9397 0.0000
+vn 0.0000 0.0000 0.0000
+vn -0.9852 -0.1713 0.0000
+vn 0.3395 -0.9406 0.0000
+vn 0.3394 -0.9406 0.0000
+s 1
+f 1823//78 1821//78 1822//78
+f 1821//78 1823//78 1824//78
+f 1826//79 1822//79 1825//79
+f 1822//79 1826//79 1823//79
+f 1821//80 1824//80 1827//80
+f 1828//80 1827//80 1824//80
+f 2089//81 2090//81 1885//81 1884//81 1883//81 1881//81 1882//81 1886//81 1887//81 2170//81 2161//81 1880//81 1871//81 2085//81 2086//81
+f 2060//81 2059//81 1968//81 1966//81 2174//81
+f 1852//81 1849//81 1851//81 1850//81 1954//81 1953//81 2032//81 2031//81 1854//81 1855//81
+f 2091//81 2093//81 2090//81 2088//81
+f 2079//81 2081//81 2078//81 2076//81 2075//81 2043//81 2045//81 2046//81 2037//81 2038//81 1959//81 1960//81 2173//81 1963//81
+f 2033//81 2042//81 2040//81 2031//81
+f 2071//81 2039//81 2041//81 2072//81
+f 1860//81 1856//81 1857//81 1853//81 1854//81 2031//81 2040//81 2039//81 2071//81 2073//81 2074//81 2072//81 2041//81 2042//81 2033//81 2034//81 2032//81 1953//81 1955//81 1956//81 1954//81 1850//81 1846//81 1847//81 1843//81 1837//81 1841//81 1839//81 1835//81 1830//81 1833//81 1832//81 2164//81 2171//81 1930//81 1929//81 1931//81 2172//81 2173//81 1960//81 1958//81 1957//81 1959//81 2038//81 2036//81 2035//81 2037//81 2046//81 2044//81 2043//81 2075//81 2077//81 2078//81 2081//81 2082//81 2080//81 2079//81 1963//81 1965//81 1967//81 1969//81 1970//81 1968//81 2059//81 2061//81 2062//81 2060//81 2174//81 2169//81 1885//81 2090//81 2093//81 2094//81 2092//81 2091//81 2088//81 2087//81 2089//81 2086//81 2084//81 2083//81 2085//81 1871//81 1872//81 1870//81 1867//81 1868//81 1866//81 1869//81 1863//81 1864//81 1862//81 1858//81 1859//81 1861//81
+f 1999//81 2001//81 2098//81 2096//81
+f 2112//81 2016//81 2015//81 2114//81
+f 1984//81 1979//81 1981//81 1986//81
+f 2003//81 2005//81 2102//81 2100//81
+f 2000//81 1983//81 1985//81 2002//81
+f 2026//81 2024//81 2022//81 2020//81 2018//81 2009//81 2010//81 1989//81 1990//81 1988//81 1987//81 1879//81 1874//81 1888//81 1996//81 1995//81 1997//81 1998//81 2165//81 2176//81 2030//81 1993//81 1994//81 1992//81 1991//81 2028//81
+f 1991//81 1993//81 2030//81 2028//81
+f 1998//81 1996//81 1888//81 2165//81
+f 2131//81 2107//81 2109//81 2132//81
+f 2101//81 2110//81 2108//81 2099//81
+f 2129//81 2130//81 2133//81 2134//81 2168//81 2169//81
+f 2097//81 2106//81 2104//81 2095//81
+f 1976//81 1975//81 1973//81 1974//81 1972//81 1945//81 1947//81 1949//81 1951//81 1978//81
+f 1934//81 1925//81 1927//81 1936//81
+f 1938//81 1937//81 1935//81 1936//81
+f 1961//81 1937//81 1939//81 1941//81 1943//81 1962//81
+f 2068//81 2067//81 2065//81 2066//81 2053//81 2054//81 2056//81 2055//81 2057//81 2070//81
+f 2052//81 2051//81 1964//81 1962//81 1972//81 1971//81
+f 2049//81 2050//81 1964//81 2051//81 2053//81 2066//81 2064//81 2063//81 2065//81 2067//81 2069//81 2070//81 2057//81 2058//81 2056//81 2054//81 2052//81 1971//81 1973//81 1975//81 1977//81 1978//81 1951//81 1952//81 1950//81 1949//81 1947//81 1948//81 1946//81 1945//81 1972//81 1962//81 1943//81 1944//81 1942//81 1941//81 1939//81 1940//81 1938//81 1936//81 1927//81 1928//81 1926//81 1925//81 1934//81 1933//81 1935//81 1937//81 1961//81 2173//81 2172//81 1932//81 2171//81 2164//81 1865//81 1875//81 1876//81 1873//81 1877//81 1878//81 1879//81 1987//81 1989//81 2010//81 2008//81 2007//81 2009//81 2018//81 2016//81 2112//81 2111//81 2113//81 2114//81 2015//81 2175//81 2178//81 2124//81 2123//81 2177//81 2168//81 2134//81 2132//81 2109//81 2110//81 2101//81 2102//81 2005//81 2006//81 2004//81 2003//81 2100//81 2099//81 2108//81 2107//81 2131//81 2133//81 2130//81 2128//81 2105//81 2106//81 2097//81 2098//81 2001//81 2002//81 1985//81 1986//81 1981//81 1982//81 1980//81 1979//81 1984//81 1983//81 2000//81 1999//81 2096//81 2095//81 2104//81 2103//81 2127//81 2129//81 2169//81 2174//81 2048//81 2047//81
+f 2048//81 2174//81 1964//81 2050//81
+f 2127//81 2103//81 2105//81 2128//81
+f 2170//81 2148//81 1831//81 2162//81 2161//81
+f 2012//81 1889//81 1890//81 1891//81 1892//81 1895//81 1894//81 1893//81 1898//81 1896//81 1897//81 1899//81 1905//81 2014//81
+f 2019//81 2021//81 2023//81 2025//81 2027//81 2029//81 2176//81 2165//81 1889//81 2012//81 2011//81 2013//81 2014//81 1905//81 2166//81 2167//81 2168//81 2177//81 2125//81 2126//81 2178//81 2175//81 2119//81 2121//81 2122//81 2120//81 2017//81
+f 2175//81 2017//81 2120//81 2119//81
+f 1920//81 1917//81 1915//81 1916//81 1914//81 1912//81 1913//81 1903//81 1902//81 2167//81 2166//81 1904//81 1918//81 2117//81 2118//81 2116//81 2115//81 1908//81 1906//81 1907//81 1911//81 1909//81 1910//81 2140//81 2138//81 2136//81 2135//81 2137//81 2139//81 2141//81 2142//81 1919//81 1921//81 1922//81
+f 1910//81 1919//81 2142//81 2140//81
+f 1908//81 2115//81 2117//81 1918//81
+f 2137//81 2138//81 2140//81 2139//81
+f 2163//81 1831//81 2143//81
+f 2162//81 1831//81 2163//81
+f 1823//82 1826//82 1824//82
+f 1824//82 1826//82 1828//82
+f 1828//82 1826//82 1840//82
+f 1826//83 1825//83 1842//83
+f 1838//83 1842//83 1825//83
+f 1842//83 1844//83 1826//83
+f 1844//83 1840//83 1826//83
+f 1844//83 1836//83 1834//83
+f 1834//83 1840//83 1844//83
+f 1827//84 1828//84 1834//84
+f 1840//84 1834//84 1828//84
+f 1831//85 2145//86 2144//87 2143//88
+f 2152//89 1848//90 1831//91 2148//92 2147//93 1829//94 2150//95 2149//96 2151//97
+f 2145//86 1831//91 1848//90 1845//98 2154//99 2153//100
+f 1836//83 1838//83 1845//83
+f 1848//83 1836//83 1845//83
+f 1844//83 1842//83 1838//83
+f 1836//83 1844//83 1838//83
+f 1830//81 1821//81 1832//81
+f 1832//81 1833//81 1830//81
+f 1830//81 1835//81 1821//81
+f 1835//81 1837//81 1821//81
+f 1837//81 1835//81 1839//81
+f 1839//81 1841//81 1837//81
+f 1821//81 1837//81 1843//81
+f 1821//81 1843//81 1846//81
+f 1847//81 1846//81 1843//81
+f 1850//81 1849//81 1846//81
+f 1849//81 1850//81 1851//81
+f 1849//81 1852//81 1846//81
+f 1846//81 1853//81 1821//81
+f 1853//81 1846//81 1852//81
+f 1852//81 1854//81 1853//81
+f 1855//81 1854//81 1852//81
+f 1853//81 1857//81 1856//81
+f 1858//81 1860//81 1859//81
+f 1861//81 1859//81 1860//81
+f 1862//81 1864//81 1863//81
+f 1832//81 1821//81 2164//81
+f 2164//81 1821//81 1865//81
+f 1868//81 1867//81 1866//81
+f 1869//81 1866//81 1867//81
+f 1867//81 1870//81 1869//81
+f 1869//81 1870//81 1871//81
+f 1870//81 1872//81 1871//81
+f 1873//81 1865//81 1874//81
+f 1875//81 1865//81 1873//81
+f 1873//81 1876//81 1875//81
+f 1877//81 1873//81 1874//81
+f 1878//81 1877//81 1879//81
+f 1874//81 1879//81 1877//81
+f 1822//81 1863//81 1880//81
+f 1871//81 1880//81 1869//81
+f 1869//81 1880//81 1863//81
+f 1882//81 1881//81 1883//81
+f 1883//81 1884//81 1882//81
+f 1884//81 1885//81 1882//81
+f 1886//81 1882//81 1885//81
+f 1887//81 1886//81 1885//81
+f 1827//81 1888//81 1874//81
+f 1874//81 1865//81 1827//81
+f 2165//81 1888//81 2185//81
+f 1890//81 1889//81 2165//81 2185//81
+f 1827//81 1890//81 2185//81
+f 1827//81 2185//81 1888//81
+f 1892//81 1891//81 1890//81
+f 1892//81 1890//81 1893//81
+f 1893//81 1894//81 1895//81
+f 1895//81 1892//81 1893//81
+f 1896//81 1898//81 1897//81
+f 1898//81 1893//81 1897//81
+f 1827//81 1899//81 1890//81
+f 1890//81 1899//81 1893//81
+f 1899//81 1897//81 1893//81
+f 1887//81 1885//81 1829//81
+f 2148//81 2170//81 1829//81
+f 1829//81 1900//81 2148//81
+f 1829//81 2170//81 1887//81
+f 2160//81 1901//81 1829//81
+f 2160//81 1829//81 1902//81
+f 1901//81 2160//81 2159//81
+f 2159//81 2160//81 1902//81 1903//81
+f 1899//81 1827//81 1834//81
+f 1834//81 1904//81 2184//81
+f 1899//81 1834//81 2184//81
+f 1904//81 2166//81 2184//81
+f 1899//81 2184//81 2166//81 1905//81
+f 1907//81 1906//81 1908//81
+f 1910//81 1909//81 1911//81
+f 1913//81 1912//81 1903//81
+f 1914//81 1916//81 1915//81
+f 1915//81 1917//81 1914//81
+f 1911//81 1907//81 1918//81
+f 1904//81 1834//81 1918//81
+f 1907//81 1908//81 1918//81
+f 1910//81 1911//81 1919//81
+f 1919//81 1911//81 1918//81
+f 1920//81 1922//81 1921//81
+f 1919//81 1836//81 1921//81
+f 1918//81 1834//81 1836//81
+f 1921//81 1836//81 1920//81
+f 1836//81 1919//81 1918//81
+f 1880//81 2161//81 2180//81
+f 2143//81 1923//81 2146//81
+f 2143//81 2146//81 1825//81 2163//81
+f 2162//81 2163//81 1825//81 2186//81
+f 2180//81 2161//81 2162//81 2186//81
+f 2146//81 1923//81 1838//81
+f 1838//81 1825//81 2146//81
+f 1822//81 1880//81 2180//81
+f 1822//81 2180//81 2186//81
+f 1825//81 1822//81 2186//81
+f 1822//81 1821//81 1856//81
+f 1856//81 1821//81 1853//81
+f 1856//81 1860//81 1822//81
+f 1860//81 1858//81 1822//81
+f 1858//81 1862//81 1822//81
+f 1822//81 1862//81 1863//81
+f 1827//81 1865//81 1821//81
+f 1901//81 2155//81 1836//81
+f 1920//81 1836//81 2155//81
+f 2156//81 2155//81 1901//81
+f 2155//81 2156//81 1917//81 1920//81
+f 2157//81 2156//81 1901//81
+f 2156//81 2157//81 1914//81 1917//81
+f 2158//81 2157//81 1901//81
+f 2157//81 2158//81 1912//81 1914//81
+f 1901//81 2159//81 2158//81
+f 2158//81 2159//81 1903//81 1912//81
+f 2169//81 2168//81 1829//81
+f 2168//81 2167//81 1829//81
+f 2167//81 1902//81 1829//81
+f 1885//81 2169//81 1829//81
+f 1838//101 1923//101 2153//100 2154//99
+f 1838//101 2154//99 1845//98
+f 1923//102 2144//87 2145//86 2153//100
+f 1923//102 2143//88 2144//87
+f 1900//102 2147//93 2148//92
+f 1829//94 2147//93 1900//103
+f 1924//104 2150//95 1829//94
+f 1924//104 2149//96 2150//95
+f 2149//96 1924//80 1901//80 2151//97
+f 1836//105 1848//90 2152//89
+f 2151//97 1901//105 1836//105 2152//89
+f 1925//81 1926//81 1927//81
+f 1928//81 1927//81 1926//81
+f 1929//81 1930//81 1931//81
+f 2172//81 1931//81 1930//81 2171//81
+f 1932//81 2172//81 2171//81
+f 1933//81 1934//81 1935//81
+f 1936//81 1935//81 1934//81
+f 1937//81 1938//81 1939//81
+f 1940//81 1939//81 1938//81
+f 1941//81 1942//81 1943//81
+f 1944//81 1943//81 1942//81
+f 1945//81 1946//81 1947//81
+f 1948//81 1947//81 1946//81
+f 1949//81 1950//81 1951//81
+f 1952//81 1951//81 1950//81
+f 1953//81 1954//81 1955//81
+f 1956//81 1955//81 1954//81
+f 1957//81 1958//81 1959//81
+f 1960//81 1959//81 1958//81
+f 2173//81 1961//81 2194//81
+f 1966//81 1963//81 2173//81 2194//81
+f 1961//81 1962//81 2179//81 2194//81
+f 1966//81 2194//81 2179//81
+f 1966//81 1967//81 1963//81
+f 1967//81 1965//81 1963//81
+f 1969//81 1967//81 1966//81
+f 1962//81 1964//81 2174//81 2179//81
+f 2174//81 1966//81 2179//81
+f 1968//81 1970//81 1969//81
+f 1966//81 1968//81 1969//81
+f 1971//81 1972//81 1973//81
+f 1974//81 1973//81 1972//81
+f 1975//81 1976//81 1977//81
+f 1978//81 1977//81 1976//81
+f 1979//81 1980//81 1981//81
+f 1980//81 1982//81 1981//81
+f 1983//81 1984//81 1985//81
+f 1986//81 1985//81 1984//81
+f 1987//81 1988//81 1989//81
+f 1990//81 1989//81 1988//81
+f 1993//81 1991//81 1992//81
+f 1994//81 1993//81 1992//81
+f 1997//81 1995//81 1996//81
+f 1998//81 1997//81 1996//81
+f 1999//81 2000//81 2001//81
+f 2002//81 2001//81 2000//81
+f 2003//81 2004//81 2005//81
+f 2006//81 2005//81 2004//81
+f 2007//81 2008//81 2009//81
+f 2010//81 2009//81 2008//81
+f 2011//81 2012//81 2013//81
+f 2014//81 2013//81 2012//81
+f 2018//81 2020//81 2022//81
+f 2024//81 2026//81 2028//81
+f 2176//81 2029//81 2183//81
+f 2028//81 2030//81 2176//81 2183//81
+f 2175//81 2015//81 2016//81 2187//81
+f 2017//81 2175//81 2187//81
+f 2016//81 2018//81 2188//81 2187//81
+f 2017//81 2187//81 2188//81
+f 2018//81 2022//81 2189//81 2188//81
+f 2017//81 2188//81 2189//81
+f 2191//81 2021//81 2190//81
+f 2191//81 2190//81 2022//81 2024//81
+f 2189//81 2022//81 2190//81
+f 2021//81 2017//81 2189//81 2190//81
+f 2021//81 2019//81 2017//81
+f 2191//81 2024//81 2192//81
+f 2191//81 2192//81 2023//81 2021//81
+f 2025//81 2023//81 2027//81
+f 2182//81 2027//81 2193//81
+f 2024//81 2028//81 2182//81 2193//81
+f 2029//81 2027//81 2182//81 2183//81
+f 2183//81 2182//81 2028//81
+f 2192//81 2024//81 2193//81
+f 2192//81 2193//81 2027//81 2023//81
+f 2031//81 2032//81 2033//81
+f 2034//81 2033//81 2032//81
+f 2035//81 2036//81 2037//81
+f 2038//81 2037//81 2036//81
+f 2039//81 2040//81 2041//81
+f 2042//81 2041//81 2040//81
+f 2043//81 2044//81 2045//81
+f 2046//81 2045//81 2044//81
+f 2047//81 2048//81 2049//81
+f 2050//81 2049//81 2048//81
+f 2051//81 2052//81 2053//81
+f 2054//81 2053//81 2052//81
+f 2055//81 2056//81 2057//81
+f 2056//81 2058//81 2057//81
+f 2059//81 2060//81 2061//81
+f 2062//81 2061//81 2060//81
+f 2063//81 2064//81 2065//81
+f 2066//81 2065//81 2064//81
+f 2067//81 2068//81 2069//81
+f 2070//81 2069//81 2068//81
+f 2073//81 2071//81 2074//81
+f 2072//81 2074//81 2071//81
+f 2077//81 2075//81 2078//81
+f 2076//81 2078//81 2075//81
+f 2081//81 2079//81 2082//81
+f 2080//81 2082//81 2079//81
+f 2085//81 2083//81 2084//81
+f 2084//81 2086//81 2085//81
+f 2089//81 2087//81 2090//81
+f 2088//81 2090//81 2087//81
+f 2093//81 2091//81 2094//81
+f 2092//81 2094//81 2091//81
+f 2095//81 2096//81 2097//81
+f 2098//81 2097//81 2096//81
+f 2099//81 2100//81 2101//81
+f 2102//81 2101//81 2100//81
+f 2103//81 2104//81 2105//81
+f 2106//81 2105//81 2104//81
+f 2107//81 2108//81 2109//81
+f 2110//81 2109//81 2108//81
+f 2111//81 2112//81 2113//81
+f 2114//81 2113//81 2112//81
+f 2115//81 2116//81 2117//81
+f 2117//81 2116//81 2118//81
+f 2119//81 2120//81 2122//81
+f 2121//81 2119//81 2122//81
+f 2178//81 2126//81 2181//81
+f 2123//81 2124//81 2178//81 2181//81
+f 2177//81 2123//81 2181//81
+f 2126//81 2125//81 2177//81 2181//81
+f 2129//81 2127//81 2130//81
+f 2128//81 2130//81 2127//81
+f 2133//81 2131//81 2134//81
+f 2132//81 2134//81 2131//81
+f 2135//81 2136//81 2138//81
+f 2137//81 2135//81 2138//81
+f 2139//81 2140//81 2142//81
+f 2141//81 2139//81 2142//81
+o Base
+v -39.484219 27.040174 0.000002
+v -39.484219 -25.864807 -0.000000
+v -39.484219 27.040174 7.500002
+v -39.484219 -25.864807 7.500000
+v 33.542374 27.040174 0.000002
+v 33.542374 27.040174 7.500002
+v 43.770226 -25.864807 -0.000000
+v 43.770226 -25.864807 7.500000
+v -37.380447 -16.977444 0.000000
+v -37.330448 -23.844000 0.000000
+v -37.330448 -16.977444 0.000000
+v -37.380447 -16.177444 0.000000
+v -37.380447 -15.246632 0.000000
+v -37.330448 -16.177444 0.000000
+v -37.330448 -15.246632 0.000000
+v -37.380447 -14.446631 0.000000
+v -37.330448 -12.729661 0.000000
+v -37.330448 -14.446631 0.000000
+v -35.085789 -12.279661 0.000001
+v -35.035789 -12.729661 0.000000
+v -35.035789 -12.279661 0.000001
+v -35.085789 -11.479661 0.000001
+v -37.330448 -7.076204 0.000001
+v -35.035789 -7.076204 0.000001
+v -35.035789 -11.479661 0.000001
+v -37.380447 -0.450436 0.000001
+v -37.330448 -0.450436 0.000001
+v -37.380447 1.426359 0.000001
+v -37.330448 1.426359 0.000001
+v -37.380447 0.349564 0.000001
+v -37.330448 0.349564 0.000001
+v -37.380447 2.226360 0.000001
+v -37.330448 8.887293 0.000001
+v -37.330448 2.226360 0.000001
+v 14.948427 -23.844000 0.000000
+v -13.628716 7.941137 0.000001
+v -13.289828 7.991137 0.000001
+v -13.289828 7.941137 0.000001
+v -13.628716 8.887293 0.000001
+v -12.489828 7.991137 0.000001
+v -11.128716 7.941137 0.000001
+v -12.489828 7.941137 0.000001
+v 16.198427 -18.761621 0.000000
+v 17.448427 -23.844000 0.000000
+v 14.948427 -18.711620 0.000000
+v 16.198427 -18.711620 0.000000
+v 16.998426 -18.761621 0.000000
+v 16.998426 -18.711620 0.000000
+v 17.448427 -18.711620 0.000000
+v -11.128716 16.323317 0.000002
+v -3.688910 11.009729 0.000002
+v -3.217584 11.523291 0.000002
+v -4.016689 10.394541 0.000001
+v -4.180056 9.716894 0.000001
+v -4.168609 9.019926 0.000001
+v -2.632718 11.902533 0.000002
+v -1.971545 12.123316 0.000002
+v 40.000263 -23.844000 0.000000
+v 40.000263 -18.711620 0.000000
+v 41.594418 -18.711620 0.000000
+v 41.552635 -18.611385 0.000000
+v 41.537792 -18.503811 0.000000
+v 41.655529 -18.207760 0.000000
+v 41.590996 -18.295099 0.000000
+v 41.550865 -18.396008 0.000000
+v 41.839405 -18.095594 0.000000
+v 41.946594 -18.078186 0.000000
+v 41.740196 -18.139759 0.000000
+v 42.054680 -18.088682 0.000000
+v 13.601372 12.119150 0.000002
+v 13.600650 12.123316 0.000002
+v 13.612914 12.123316 0.000002
+v 19.656212 9.019926 0.000001
+v 19.656212 9.893988 0.000001
+v 50.317074 -19.047932 0.000000
+v 46.174992 -14.785413 0.000000
+v 41.475014 -16.496065 0.000000
+v 35.322247 0.201824 0.000001
+v 35.369232 0.218925 0.000001
+v 35.476158 -0.221037 0.000001
+v 35.048634 0.953579 0.000001
+v 34.621105 2.128193 0.000001
+v 35.095615 0.970678 0.000001
+v 26.182775 12.322668 0.000002
+v 26.199875 12.275686 0.000002
+v 26.934528 12.596285 0.000002
+v 27.800396 12.858225 0.000002
+v 26.951630 12.549299 0.000002
+v 27.783295 12.905210 0.000002
+v 40.242565 1.513794 0.000001
+v 39.387516 3.863026 0.000001
+v 28.535048 13.178827 0.000002
+v 35.141079 15.530016 0.000002
+v 28.552149 13.131842 0.000002
+v 36.027946 20.211119 0.000002
+v 12.872341 16.323317 0.000002
+v 34.568771 24.220171 0.000002
+v 50.317074 -19.047932 7.500000
+v 34.568771 24.220171 6.571209
+v 36.027946 20.211119 6.701789
+v 12.872341 16.323317 2.500002
+v 12.872247 16.323282 2.500002
+v -11.128716 16.323317 2.500002
+v -11.128716 7.941137 2.500001
+v -12.489828 7.941137 2.500001
+v -12.489828 7.991137 2.500001
+v -13.289828 7.991137 2.500001
+v -13.289828 7.941137 2.500001
+v -13.628716 7.941137 2.500001
+v -13.628716 8.887293 2.500001
+v -37.330448 8.887293 2.500001
+v -37.330448 2.226360 2.500001
+v -37.380447 2.226360 2.500001
+v -37.380447 1.426359 2.500001
+v -37.330448 1.426359 2.500001
+v -37.330448 0.349564 2.500001
+v -37.380447 0.349564 2.500001
+v -37.380447 -0.450436 2.500001
+v -37.330448 -0.450436 2.500001
+v -37.330448 -7.076204 2.500001
+v -35.035789 -7.076204 2.500001
+v -35.035789 -11.479661 2.500000
+v -35.085789 -11.479661 2.500000
+v -35.085789 -12.279661 2.500000
+v -35.035789 -12.279661 2.500000
+v -35.035789 -12.729661 2.500000
+v -37.330448 -12.729661 2.500000
+v -37.330448 -14.446631 2.500000
+v -37.380447 -14.446631 2.500000
+v -37.380447 -15.246632 2.500000
+v -37.330448 -15.246632 2.500000
+v -37.330448 -16.177444 2.500000
+v -37.380447 -16.177444 2.500000
+v -37.380447 -16.977444 2.500000
+v -37.330448 -16.977444 2.500000
+v -37.330448 -23.844000 2.500000
+v 14.948427 -23.844000 2.500000
+v 14.948427 -18.711620 2.500000
+v 16.198427 -18.711620 2.500000
+v 16.198427 -18.761621 2.500000
+v 16.998426 -18.761621 2.500000
+v 16.998426 -18.711620 2.500000
+v 17.448427 -18.711620 2.500000
+v 17.448427 -23.844000 2.500000
+v 40.000263 -23.844000 2.500000
+v 40.000263 -18.711620 2.500000
+v 41.594418 -18.711620 2.500000
+v 42.054680 -18.088682 2.500000
+v 41.946594 -18.078186 2.500000
+v 41.839405 -18.095594 2.500000
+v 41.740196 -18.139759 2.500000
+v 41.655529 -18.207760 2.500000
+v 41.590996 -18.295099 2.500000
+v 41.550865 -18.396008 2.500000
+v 41.537792 -18.503811 2.500000
+v 41.552635 -18.611385 2.500000
+v 41.475014 -16.496065 2.500000
+v 46.174992 -14.785413 2.500000
+v 40.242565 1.513794 2.500001
+v 35.476158 -0.221037 2.500001
+v 35.322247 0.201824 2.500001
+v 35.369232 0.218925 2.500001
+v 35.095615 0.970678 2.500001
+v 35.048634 0.953579 2.500001
+v 34.621105 2.128193 2.500001
+v 39.387516 3.863026 2.500001
+v 35.141079 15.530016 2.500002
+v 28.552149 13.131842 2.500002
+v 28.535048 13.178827 2.500002
+v 27.783295 12.905210 2.500002
+v 27.800396 12.858225 2.500002
+v 26.951630 12.549299 2.500002
+v 26.934528 12.596285 2.500002
+v 26.182775 12.322668 2.500002
+v 26.199875 12.275686 2.500002
+v 19.656212 9.893988 2.500001
+v 19.656212 9.019926 2.500001
+v -4.168609 9.019926 2.500001
+v -1.971545 12.123316 2.500002
+v -2.632718 11.902533 2.500002
+v -3.217584 11.523291 2.500001
+v -3.688910 11.009729 2.500001
+v -4.016689 10.394541 2.500001
+v -4.180056 9.716894 2.500001
+v 13.600650 12.123316 2.497840
+v 13.612914 12.123316 2.500002
+v 13.601372 12.119150 2.497838
+v 13.612912 12.123316 0.000002
+v 13.612914 12.123316 0.000002
+v 13.597350 12.211588 2.500002
+v 13.597360 12.211531 2.500002
+v -30.175529 -19.053444 2.500000
+v -29.775530 -19.053444 2.500000
+v -30.175529 -18.653444 2.500000
+v -22.672579 -21.854776 2.500000
+v -22.272577 -21.854776 2.500000
+v -22.672579 -21.454777 2.500000
+v -30.172609 -12.743353 2.500000
+v -29.775530 -18.653444 2.500000
+v -29.772608 -12.743353 2.500000
+v -30.172609 -12.343353 2.500000
+v -22.675529 -19.053444 2.500000
+v -22.675529 -18.653444 2.500000
+v -22.275530 -19.053444 2.500000
+v -22.272577 -21.454777 2.500000
+v -22.275530 -18.653444 2.500000
+v -18.925529 -19.053444 2.500000
+v -18.925529 -18.653444 2.500000
+v -18.525530 -19.053444 2.500000
+v -30.196814 -6.599760 2.500001
+v -29.796814 -6.599760 2.500001
+v -29.772608 -12.343353 2.500000
+v -30.196814 -6.199760 2.500001
+v -22.672609 -12.743353 2.500000
+v -22.272610 -12.743353 2.500000
+v -22.672609 -12.343353 2.500000
+v -30.181654 -2.480406 2.500001
+v -29.796814 -6.199760 2.500001
+v -30.181654 -2.080406 2.500001
+v -29.781652 -2.480406 2.500001
+v -18.870583 -12.729661 2.500000
+v -18.525530 -18.653444 2.500000
+v -22.272610 -12.343353 2.500000
+v -11.475529 -19.053444 2.500000
+v -11.075529 -19.053444 2.500000
+v -11.475529 -18.653444 2.500000
+v -22.696814 -6.599760 2.500001
+v -22.696814 -6.199760 2.500001
+v -22.296814 -6.599760 2.500001
+v -30.175571 3.836163 2.500001
+v -29.781652 -2.080406 2.500001
+v -30.175571 4.236162 2.500001
+v -29.775572 3.836163 2.500001
+v -29.775572 4.236162 2.500001
+v -22.681652 -2.480406 2.500001
+v -22.296814 -6.199760 2.500001
+v -22.281652 -2.480406 2.500001
+v -22.681652 -2.080406 2.500001
+v -3.975529 -19.053444 2.500000
+v -11.075529 -18.653444 2.500000
+v -3.975529 -18.653444 2.500000
+v -9.485923 -12.729661 2.500000
+v -22.281652 -2.080406 2.500001
+v -18.870583 -2.060263 2.500001
+v -22.675571 3.836163 2.500001
+v -3.575529 -18.653444 2.500000
+v -0.175529 -18.653444 2.500000
+v -3.575529 -19.053444 2.500000
+v -0.175529 -19.053444 2.500000
+v -22.675571 4.236162 2.500001
+v -22.275572 3.836163 2.500001
+v -13.628716 -7.099552 2.500001
+v -11.496814 -6.199760 2.500001
+v -11.496814 -6.599760 2.500001
+v -3.972609 -12.743353 2.500000
+v -15.331446 -2.060263 2.500001
+v -14.531446 -2.110262 2.500001
+v -15.331446 -2.110262 2.500001
+v -11.096814 -6.199760 2.500001
+v -9.485923 -7.099552 2.500001
+v -11.096814 -6.599760 2.500001
+v -14.531446 -2.049547 2.500001
+v -3.572609 -12.743353 2.500000
+v -3.972609 -12.343353 2.500000
+v -13.628716 -2.049547 2.500001
+v -18.925571 3.836163 2.500001
+v -18.925571 4.236162 2.500001
+v -22.275572 4.236162 2.500001
+v -18.525572 3.836163 2.500001
+v 7.327422 -21.854776 2.500000
+v 0.224471 -19.053444 2.500000
+v 7.327422 -21.454777 2.500000
+v -11.481653 -2.480406 2.500001
+v -11.081653 -2.480406 2.500001
+v -11.481653 -2.080406 2.500001
+v -0.172609 -12.743353 2.500000
+v 0.224471 -18.653444 2.500000
+v 0.227391 -12.743353 2.500000
+v -3.572609 -12.343353 2.500000
+v -0.172609 -12.343353 2.500000
+v 7.324471 -19.053444 2.500000
+v 7.324471 -18.653444 2.500000
+v 7.724471 -19.053444 2.500000
+v 7.727422 -21.454777 2.500000
+v -3.996814 -6.599760 2.500001
+v -3.596814 -6.599760 2.500001
+v -3.996814 -6.199760 2.500001
+v 7.727422 -21.854776 2.500000
+v -11.475572 3.836163 2.500001
+v -11.081653 -2.080406 2.500001
+v -18.525572 4.236162 2.500001
+v -11.475572 4.236162 2.500001
+v -11.075572 3.836163 2.500001
+v -0.196814 -6.599760 2.500001
+v -3.981653 -2.480406 2.500001
+v -3.596814 -6.199760 2.500001
+v -0.196814 -6.199760 2.500001
+v 0.203186 -6.599760 2.500001
+v 0.227391 -12.343353 2.500000
+v -3.581653 -2.480406 2.500001
+v -3.981653 -2.080406 2.500001
+v 7.327391 -12.743353 2.500000
+v 7.724471 -18.653444 2.500000
+v 7.327391 -12.343353 2.500000
+v 7.727391 -12.743353 2.500000
+v -11.075572 4.236162 2.500001
+v -0.181653 -2.480406 2.500001
+v 0.203186 -6.199760 2.500001
+v -0.181653 -2.080406 2.500001
+v -3.581653 -2.080406 2.500001
+v 0.218347 -2.480406 2.500001
+v -3.975572 3.836163 2.500001
+v -3.975572 4.236162 2.500001
+v -3.575572 3.836163 2.500001
+v 7.303186 -6.599760 2.500001
+v 7.303186 -6.199760 2.500001
+v 7.703186 -6.599760 2.500001
+v 7.727391 -12.343353 2.500000
+v 14.827391 -12.743353 2.500000
+v 15.227391 -12.743353 2.500000
+v 14.827391 -12.343353 2.500000
+v 22.318348 -19.053444 2.500000
+v -0.175572 3.836163 2.500001
+v 0.218347 -2.080406 2.500001
+v 22.318348 -18.653444 2.500000
+v 22.718348 -19.053444 2.500000
+v 0.224428 3.836163 2.500001
+v -0.175572 4.236162 2.500001
+v -3.575572 4.236162 2.500001
+v 7.318347 -2.480406 2.500001
+v 7.703186 -6.199760 2.500001
+v 7.318347 -2.080406 2.500001
+v 7.718347 -2.480406 2.500001
+v 14.803186 -6.599760 2.500001
+v 14.803186 -6.199760 2.500001
+v 15.203186 -6.599760 2.500001
+v 15.227391 -12.343353 2.500000
+v 22.327391 -12.743353 2.500000
+v 22.718348 -18.653444 2.500000
+v 22.327391 -12.343353 2.500000
+v 22.727390 -12.743353 2.500000
+v 29.818348 -19.053444 2.500000
+v 0.224428 4.236162 2.500001
+v 7.324428 3.836163 2.500001
+v 7.718347 -2.080406 2.500001
+v 29.818348 -18.653444 2.500000
+v 7.724428 3.836163 2.500001
+v 7.324428 4.236162 2.500001
+v 14.818347 -2.480406 2.500001
+v 15.203186 -6.199760 2.500001
+v 14.818347 -2.080406 2.500001
+v 15.218347 -2.480406 2.500001
+v 24.750605 -9.845544 2.500001
+v 22.727390 -12.343353 2.500000
+v 25.582762 -10.460536 2.500000
+v 26.226131 -10.936009 2.500000
+v 26.255848 -10.895800 2.500000
+v 25.612478 -10.420326 2.500000
+v 22.313528 -6.631981 2.500001
+v 28.653147 -12.729661 2.500000
+v 30.218348 -19.053444 2.500000
+v 37.318348 -19.053444 2.500000
+v 31.321690 -12.729661 2.500000
+v 30.218348 -18.653444 2.500000
+v 14.824428 3.836163 2.500001
+v 15.218347 -2.080406 2.500001
+v 7.724428 4.236162 2.500001
+v 37.318348 -18.653444 2.500000
+v 37.718346 -19.053444 2.500000
+v 15.224428 3.836163 2.500001
+v 14.824428 4.236162 2.500001
+v 22.318348 -2.480406 2.500001
+v 24.087997 -4.097775 2.500001
+v 22.318348 -2.080406 2.500001
+v 22.718348 -2.480406 2.500001
+v 22.718348 -2.080406 2.500001
+v 37.718346 -18.653444 2.500000
+v 28.803806 -5.860407 2.500001
+v 29.470652 -6.302355 2.500001
+v 28.776186 -5.902084 2.500001
+v 29.443029 -6.344032 2.500001
+v 20.979113 2.289904 2.500001
+v 20.842304 2.665781 2.500001
+v 15.224428 4.236162 2.500001
+v 21.354990 2.426712 2.500001
+v 40.514694 -14.543727 2.500000
+v 40.377884 -14.167850 2.500000
+v 32.898914 -10.477148 2.500000
+v 40.890572 -14.406919 2.500000
+v 29.464327 -2.603065 2.500001
+v 27.941290 -5.288776 2.500001
+v 29.327518 -2.227188 2.500001
+v 29.840204 -2.466257 2.500001
+v 31.986221 -7.969539 2.500001
+v 21.218182 2.802588 2.500001
+v 37.949543 -7.496031 2.500001
+v 37.812733 -7.120155 2.500001
+v 38.325420 -7.359224 2.500001
+v 40.753761 -14.031042 2.500000
+v 26.899176 4.444630 2.500001
+v 26.762367 4.820507 2.500001
+v 27.275053 4.581438 2.500001
+v 29.703396 -2.090380 2.500001
+v 38.188610 -6.983347 2.500001
+v 27.138245 4.957315 2.500001
+v 32.819241 6.599358 2.500001
+v 32.682430 6.975235 2.500001
+v 33.195118 6.736166 2.500001
+v 33.058308 7.112041 2.500001
+v -22.672579 -21.454777 0.000000
+v -22.672579 -21.854776 0.000000
+v -22.272577 -21.454777 0.000000
+v -22.272577 -21.854776 0.000000
+v -30.175529 -18.653444 0.000000
+v -30.175529 -19.053444 0.000000
+v -29.775530 -18.653444 0.000000
+v -29.775530 -19.053444 0.000000
+v -22.675529 -18.653444 0.000000
+v -22.675529 -19.053444 0.000000
+v -22.275530 -18.653444 0.000000
+v -22.275530 -19.053444 0.000000
+v -18.925529 -18.653444 0.000000
+v -18.925529 -19.053444 0.000000
+v -18.525530 -18.653444 0.000000
+v -18.525530 -19.053444 0.000000
+v -11.475529 -18.653444 0.000000
+v -11.475529 -19.053444 0.000000
+v -11.075529 -18.653444 0.000000
+v -11.075529 -19.053444 0.000000
+v -3.975529 -18.653444 0.000000
+v -3.975529 -19.053444 0.000000
+v -3.575529 -18.653444 0.000000
+v -3.575529 -19.053444 0.000000
+v -0.175529 -18.653444 0.000000
+v -0.175529 -19.053444 0.000000
+v 0.224471 -18.653444 0.000000
+v 0.224471 -19.053444 0.000000
+v -30.172609 -12.343353 0.000001
+v -30.172609 -12.743353 0.000000
+v -29.772608 -12.343353 0.000001
+v -29.772608 -12.743353 0.000000
+v -22.672609 -12.343353 0.000001
+v -22.672609 -12.743353 0.000000
+v -22.272610 -12.343353 0.000001
+v -22.272610 -12.743353 0.000000
+v -18.870583 -12.729661 0.000000
+v -9.485923 -12.729661 0.000000
+v -18.870583 -2.060263 0.000001
+v -9.485923 -7.099552 0.000001
+v -15.331446 -2.060263 0.000001
+v -13.628716 -7.099552 0.000001
+v -15.331446 -2.110262 0.000001
+v -13.628716 -2.049547 0.000001
+v -14.531446 -2.110262 0.000001
+v -14.531446 -2.049547 0.000001
+v -3.972609 -12.343353 0.000001
+v -3.972609 -12.743353 0.000000
+v -3.572609 -12.343353 0.000001
+v -3.572609 -12.743353 0.000000
+v -0.172609 -12.343353 0.000001
+v -0.172609 -12.743353 0.000000
+v 0.227391 -12.343353 0.000001
+v 0.227391 -12.743353 0.000000
+v 7.327422 -21.454777 0.000000
+v 7.327422 -21.854776 0.000000
+v 7.727422 -21.454777 0.000000
+v 7.727422 -21.854776 0.000000
+v 7.324471 -18.653444 0.000000
+v 7.324471 -19.053444 0.000000
+v 7.724471 -18.653444 0.000000
+v 7.724471 -19.053444 0.000000
+v 22.318348 -18.653444 0.000000
+v 22.318348 -19.053444 0.000000
+v 22.718348 -18.653444 0.000000
+v 22.718348 -19.053444 0.000000
+v 29.818348 -18.653444 0.000000
+v 29.818348 -19.053444 0.000000
+v 30.218348 -18.653444 0.000000
+v 30.218348 -19.053444 0.000000
+v 37.318348 -18.653444 0.000000
+v 37.318348 -19.053444 0.000000
+v 37.718346 -18.653444 0.000000
+v 37.718346 -19.053444 0.000000
+v 7.327391 -12.343353 0.000001
+v 7.327391 -12.743353 0.000000
+v 7.727391 -12.343353 0.000001
+v 7.727391 -12.743353 0.000000
+v 14.827391 -12.343353 0.000001
+v 14.827391 -12.743353 0.000000
+v 15.227391 -12.343353 0.000001
+v 15.227391 -12.743353 0.000000
+v 22.327391 -12.343353 0.000001
+v 22.327391 -12.743353 0.000000
+v 22.727390 -12.343353 0.000001
+v 22.727390 -12.743353 0.000000
+v 40.377884 -14.167850 0.000000
+v 40.514694 -14.543727 0.000000
+v 40.753761 -14.031042 0.000000
+v 40.890572 -14.406919 0.000000
+v 24.087997 -4.097775 0.000001
+v 22.313528 -6.631981 0.000001
+v 27.941290 -5.288776 0.000001
+v 24.750605 -9.845544 0.000001
+v 28.803806 -5.860407 0.000001
+v 25.582762 -10.460536 0.000001
+v 28.776186 -5.902084 0.000001
+v 25.612478 -10.420326 0.000001
+v 29.443029 -6.344032 0.000001
+v 26.255848 -10.895800 0.000001
+v 29.470652 -6.302355 0.000001
+v 26.226131 -10.936009 0.000001
+v 31.986221 -7.969539 0.000001
+v 28.653147 -12.729661 0.000000
+v 32.898914 -10.477148 0.000001
+v 31.321690 -12.729661 0.000000
+v -30.196814 -6.199760 0.000001
+v -30.196814 -6.599760 0.000001
+v -29.796814 -6.199760 0.000001
+v -29.796814 -6.599760 0.000001
+v -22.696814 -6.199760 0.000001
+v -22.696814 -6.599760 0.000001
+v -22.296814 -6.199760 0.000001
+v -22.296814 -6.599760 0.000001
+v -30.181654 -2.080406 0.000001
+v -30.181654 -2.480406 0.000001
+v -29.781652 -2.080406 0.000001
+v -29.781652 -2.480406 0.000001
+v -22.681652 -2.080406 0.000001
+v -22.681652 -2.480406 0.000001
+v -22.281652 -2.080406 0.000001
+v -22.281652 -2.480406 0.000001
+v -11.496814 -6.199760 0.000001
+v -11.496814 -6.599760 0.000001
+v -11.096814 -6.199760 0.000001
+v -11.096814 -6.599760 0.000001
+v -3.996814 -6.199760 0.000001
+v -3.996814 -6.599760 0.000001
+v -3.596814 -6.199760 0.000001
+v -3.596814 -6.599760 0.000001
+v -0.196814 -6.199760 0.000001
+v -0.196814 -6.599760 0.000001
+v 0.203186 -6.199760 0.000001
+v 0.203186 -6.599760 0.000001
+v -11.481653 -2.080406 0.000001
+v -11.481653 -2.480406 0.000001
+v -11.081653 -2.080406 0.000001
+v -11.081653 -2.480406 0.000001
+v -3.981653 -2.080406 0.000001
+v -3.981653 -2.480406 0.000001
+v -3.581653 -2.080406 0.000001
+v -3.581653 -2.480406 0.000001
+v -0.181653 -2.080406 0.000001
+v -0.181653 -2.480406 0.000001
+v 0.218347 -2.080406 0.000001
+v 0.218347 -2.480406 0.000001
+v -30.175571 3.836163 0.000001
+v -29.775572 3.836163 0.000001
+v -30.175571 4.236162 0.000001
+v -29.775572 4.236162 0.000001
+v -22.675571 3.836163 0.000001
+v -22.275572 3.836163 0.000001
+v -22.675571 4.236162 0.000001
+v -22.275572 4.236162 0.000001
+v -18.925571 3.836163 0.000001
+v -18.525572 3.836163 0.000001
+v -18.925571 4.236162 0.000001
+v -18.525572 4.236162 0.000001
+v -11.475572 3.836163 0.000001
+v -11.075572 3.836163 0.000001
+v -11.475572 4.236162 0.000001
+v -11.075572 4.236162 0.000001
+v -3.975572 3.836163 0.000001
+v -3.575572 3.836163 0.000001
+v -3.975572 4.236162 0.000001
+v -3.575572 4.236162 0.000001
+v -0.175572 3.836163 0.000001
+v 0.224428 3.836163 0.000001
+v -0.175572 4.236162 0.000001
+v 0.224428 4.236162 0.000001
+v 7.303186 -6.199760 0.000001
+v 7.303186 -6.599760 0.000001
+v 7.703186 -6.199760 0.000001
+v 7.703186 -6.599760 0.000001
+v 14.803186 -6.199760 0.000001
+v 14.803186 -6.599760 0.000001
+v 15.203186 -6.199760 0.000001
+v 15.203186 -6.599760 0.000001
+v 7.318347 -2.080406 0.000001
+v 7.318347 -2.480406 0.000001
+v 7.718347 -2.080406 0.000001
+v 7.718347 -2.480406 0.000001
+v 14.818347 -2.080406 0.000001
+v 14.818347 -2.480406 0.000001
+v 15.218347 -2.080406 0.000001
+v 15.218347 -2.480406 0.000001
+v 22.318348 -2.080406 0.000001
+v 22.318348 -2.480406 0.000001
+v 22.718348 -2.080406 0.000001
+v 22.718348 -2.480406 0.000001
+v 37.812733 -7.120155 0.000001
+v 37.949543 -7.496031 0.000001
+v 38.188610 -6.983347 0.000001
+v 38.325420 -7.359224 0.000001
+v 29.327518 -2.227188 0.000001
+v 29.464327 -2.603065 0.000001
+v 29.703396 -2.090380 0.000001
+v 29.840204 -2.466257 0.000001
+v 20.842304 2.665781 0.000001
+v 20.979113 2.289904 0.000001
+v 21.218182 2.802588 0.000001
+v 21.354990 2.426712 0.000001
+v 7.324428 3.836163 0.000001
+v 7.724428 3.836163 0.000001
+v 7.324428 4.236162 0.000001
+v 7.724428 4.236162 0.000001
+v 14.824428 3.836163 0.000001
+v 15.224428 3.836163 0.000001
+v 14.824428 4.236162 0.000001
+v 15.224428 4.236162 0.000001
+v 26.762367 4.820507 0.000001
+v 26.899176 4.444630 0.000001
+v 27.138245 4.957315 0.000001
+v 27.275053 4.581438 0.000001
+v 32.682430 6.975235 0.000001
+v 32.819241 6.599358 0.000001
+v 33.058308 7.112041 0.000001
+v 33.195118 6.736166 0.000001
+vn -1.0000 0.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn -0.0000 0.0000 -1.0000
+vn 0.0000 -0.0000 1.0000
+vn 0.9397 0.3420 0.0000
+vn 0.7212 -0.6927 0.0000
+vn 0.3303 -0.9394 0.0915
+vn 0.3418 -0.9398 0.0011
+vn 0.3222 -0.9354 0.1455
+vn 0.3420 -0.9397 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0967 0.9953 0.0000
+vn -0.1603 0.9871 0.0000
+vn -0.4067 0.9136 0.0000
+vn -0.6262 0.7797 0.0000
+vn -0.6262 0.7796 0.0000
+vn -0.8043 0.5942 0.0000
+vn -0.8043 0.5943 0.0000
+vn -0.8042 0.5943 0.0000
+vn -0.9292 0.3695 0.0000
+vn -0.9292 0.3696 0.0000
+vn -0.9927 0.1203 0.0000
+vn -0.9927 0.1204 0.0000
+vn -0.9906 -0.1367 0.0000
+vn -0.9906 -0.1366 0.0000
+vn -0.9230 -0.3848 0.0000
+vn -0.9230 -0.3847 0.0000
+vn -0.9231 -0.3847 0.0000
+vn -0.9397 -0.3420 0.0000
+vn -0.3420 0.9397 0.0000
+vn 0.9397 0.3421 0.0000
+vn 0.9397 0.3419 0.0000
+vn -0.3167 0.9485 0.0000
+vn -0.5441 0.8390 0.0000
+vn -0.7368 0.6762 0.0000
+vn -0.8825 0.4702 0.0000
+vn -0.9721 0.2344 0.0000
+vn -0.9999 -0.0164 0.0000
+vn 0.0000 1.0000 0.0023
+vn 0.0000 1.0000 0.0036
+vn 0.9853 0.1707 -0.0000
+vn 0.9854 0.1705 0.0000
+vn 0.9853 0.1708 0.0000
+vn -0.3395 0.9406 0.0000
+vn 0.0000 0.0000 0.0000
+vn -0.3394 0.9406 0.0000
+vn 0.1747 0.0267 -0.9843
+vn 0.1735 0.0306 -0.9844
+vn 0.1734 0.0311 -0.9844
+vn 0.1616 0.0238 -0.9866
+vn 0.1640 0.0242 -0.9862
+vn 0.1735 0.0305 -0.9844
+vn -0.8192 0.5736 0.0000
+vn 0.2953 0.9554 0.0000
+vn -0.7968 -0.6043 0.0000
+vn 0.5524 0.8336 0.0000
+vn -0.5943 -0.8042 0.0000
+vn 0.8336 -0.5524 0.0000
+vn 0.8042 -0.5943 0.0000
+vn 0.8042 -0.5944 0.0000
+vn -0.8335 0.5525 0.0000
+vn -0.8336 0.5524 0.0000
+vn -0.8042 0.5944 0.0000
+vn 0.8192 -0.5736 0.0000
+s 1
+f 2195//106 2196//106 2197//106
+f 2197//106 2196//106 2198//106
+f 2199//107 2195//107 2200//107
+f 2200//107 2195//107 2197//107
+f 2196//108 2201//108 2198//108
+f 2198//108 2201//108 2202//108
+f 2196//109 2203//109 2204//109
+f 2203//109 2205//109 2204//109
+f 2196//109 2206//109 2203//109
+f 2196//109 2207//109 2206//109
+f 2206//109 2207//109 2208//109
+f 2207//109 2209//109 2208//109
+f 2196//109 2210//109 2207//109
+f 2196//109 2211//109 2210//109
+f 2210//109 2211//109 2212//109
+f 2211//109 2213//109 2214//109
+f 2213//109 2215//109 2214//109
+f 2211//109 2216//109 2213//109
+f 2196//109 2217//109 2211//109
+f 2211//109 2217//109 2216//109
+f 2217//109 2218//109 2216//109
+f 2216//109 2218//109 2219//109
+f 2220//109 2221//109 2217//109
+f 2222//109 2223//109 2224//109
+f 2224//109 2223//109 2225//109
+f 2226//109 2227//109 2228//109
+f 2204//109 2229//109 2196//109
+f 2230//109 2231//109 2232//109
+f 2230//109 2233//109 2231//109
+f 2233//109 2234//109 2231//109
+f 2233//109 2235//109 2234//109
+f 2234//109 2235//109 2236//109
+f 2229//109 2237//109 2238//109
+f 2239//109 2237//109 2229//109
+f 2239//109 2240//109 2237//109
+f 2237//109 2241//109 2238//109
+f 2242//109 2243//109 2241//109
+f 2241//109 2243//109 2238//109
+f 2195//109 2244//109 2227//109
+f 2233//109 2244//109 2235//109
+f 2227//109 2244//109 2233//109
+f 2245//109 2246//109 2247//109
+f 2247//109 2246//109 2248//109
+f 2248//109 2246//109 2249//109
+f 2246//109 2250//109 2249//109
+f 2250//109 2251//109 2249//109
+f 2252//109 2201//109 2238//109
+f 2238//109 2201//109 2229//109
+f 2253//109 2254//109 2252//109
+f 2252//109 2254//109 2201//109
+f 2255//109 2256//109 2254//109
+f 2256//109 2257//109 2254//109
+f 2258//109 2257//109 2259//109
+f 2259//109 2257//109 2256//109
+f 2260//109 2261//109 2262//109
+f 2262//109 2261//109 2257//109
+f 2254//109 2263//109 2201//109
+f 2257//109 2263//109 2254//109
+f 2261//109 2263//109 2257//109
+f 2251//109 2264//109 2249//109
+f 2251//109 2265//109 2264//109
+f 2266//109 2267//109 2264//109
+f 2266//109 2268//109 2267//109
+f 2263//109 2269//109 2201//109
+f 2263//109 2270//109 2269//109
+f 2271//109 2270//109 2263//109
+f 2272//109 2273//109 2274//109
+f 2275//109 2276//109 2277//109
+f 2268//109 2278//109 2279//109
+f 2280//109 2281//109 2282//109
+f 2280//109 2283//109 2281//109
+f 2277//109 2284//109 2273//109
+f 2270//109 2284//109 2269//109
+f 2273//109 2284//109 2274//109
+f 2276//109 2285//109 2277//109
+f 2277//109 2285//109 2284//109
+f 2286//109 2287//109 2288//109
+f 2287//109 2289//109 2285//109
+f 2284//109 2289//109 2269//109
+f 2286//109 2289//109 2287//109
+f 2285//109 2289//109 2284//109
+f 2244//109 2199//109 2290//109
+f 2291//109 2290//109 2199//109
+f 2195//109 2199//109 2244//109
+f 2196//109 2195//109 2220//109
+f 2196//109 2220//109 2217//109
+f 2220//109 2195//109 2224//109
+f 2224//109 2195//109 2222//109
+f 2222//109 2195//109 2226//109
+f 2226//109 2195//109 2227//109
+f 2201//109 2196//109 2229//109
+f 2266//109 2289//109 2286//109
+f 2266//109 2286//109 2283//109
+f 2266//109 2283//109 2280//109
+f 2266//109 2280//109 2278//109
+f 2266//109 2278//109 2268//109
+f 2267//109 2249//109 2264//109
+f 2200//110 2197//110 2198//110
+f 2200//110 2198//110 2202//110
+f 2200//110 2202//110 2292//110
+f 2199//111 2200//111 2293//111
+f 2294//111 2293//111 2200//111
+f 2291//111 2199//111 2293//111
+f 2292//111 2294//111 2200//111
+f 2269//111 2289//111 2294//111
+f 2269//111 2294//111 2292//111
+f 2201//112 2269//112 2202//112
+f 2202//112 2269//112 2292//112
+f 2295//113 2293//114 2296//115
+f 2290//116 2291//116 2295//113
+f 2295//113 2291//116 2293//114
+f 2297//108 2290//108 2295//108
+f 2244//108 2290//108 2297//108
+f 2235//117 2244//117 2297//117
+f 2235//117 2297//117 2298//117
+f 2236//108 2235//108 2298//108
+f 2236//108 2298//108 2299//108
+f 2234//106 2236//106 2299//106
+f 2234//106 2299//106 2300//106
+f 2231//108 2234//108 2300//108
+f 2231//108 2300//108 2301//108
+f 2232//117 2231//117 2301//117
+f 2232//117 2301//117 2302//117
+f 2230//108 2232//108 2302//108
+f 2230//108 2302//108 2303//108
+f 2233//106 2230//106 2303//106
+f 2233//106 2303//106 2304//106
+f 2227//108 2233//108 2304//108
+f 2227//108 2304//108 2305//108
+f 2228//117 2227//117 2305//117
+f 2228//117 2305//117 2306//117
+f 2226//108 2228//108 2306//108
+f 2226//108 2306//108 2307//108
+f 2222//117 2226//117 2307//117
+f 2222//117 2307//117 2308//117
+f 2223//107 2222//107 2308//107
+f 2223//107 2308//107 2309//107
+f 2225//117 2223//117 2309//117
+f 2225//117 2309//117 2310//117
+f 2224//108 2225//108 2310//108
+f 2224//108 2310//108 2311//108
+f 2220//117 2224//117 2311//117
+f 2220//117 2311//117 2312//117
+f 2221//107 2220//107 2312//107
+f 2221//107 2312//107 2313//107
+f 2217//117 2221//117 2313//117
+f 2217//117 2313//117 2314//117
+f 2218//107 2217//107 2314//107
+f 2218//107 2314//107 2315//107
+f 2219//117 2218//117 2315//117
+f 2219//117 2315//117 2316//117
+f 2216//108 2219//108 2316//108
+f 2216//108 2316//108 2317//108
+f 2213//117 2216//117 2317//117
+f 2213//117 2317//117 2318//117
+f 2215//107 2213//107 2318//107
+f 2215//107 2318//107 2319//107
+f 2214//117 2215//117 2319//117
+f 2214//117 2319//117 2320//117
+f 2211//108 2214//108 2320//108
+f 2211//108 2320//108 2321//108
+f 2212//117 2211//117 2321//117
+f 2212//117 2321//117 2322//117
+f 2210//108 2212//108 2322//108
+f 2210//108 2322//108 2323//108
+f 2207//117 2210//117 2323//117
+f 2207//117 2323//117 2324//117
+f 2209//107 2207//107 2324//107
+f 2209//107 2324//107 2325//107
+f 2208//117 2209//117 2325//117
+f 2208//117 2325//117 2326//117
+f 2206//108 2208//108 2326//108
+f 2206//108 2326//108 2327//108
+f 2203//117 2206//117 2327//117
+f 2203//117 2327//117 2328//117
+f 2205//107 2203//107 2328//107
+f 2205//107 2328//107 2329//107
+f 2204//117 2205//117 2329//117
+f 2204//117 2329//117 2330//117
+f 2229//107 2204//107 2330//107
+f 2229//107 2330//107 2331//107
+f 2239//106 2229//106 2331//106
+f 2239//106 2331//106 2332//106
+f 2240//107 2239//107 2332//107
+f 2240//107 2332//107 2333//107
+f 2237//117 2240//117 2333//117
+f 2237//117 2333//117 2334//117
+f 2241//107 2237//107 2334//107
+f 2241//107 2334//107 2335//107
+f 2242//106 2241//106 2335//106
+f 2242//106 2335//106 2336//106
+f 2243//107 2242//107 2336//107
+f 2243//107 2336//107 2337//107
+f 2238//117 2243//117 2337//117
+f 2238//117 2337//117 2338//117
+f 2252//107 2238//107 2338//107
+f 2252//107 2338//107 2339//107
+f 2253//106 2252//106 2339//106
+f 2253//106 2339//106 2340//106
+f 2254//107 2253//107 2340//107
+f 2254//107 2340//107 2341//107
+f 2263//118 2261//118 2342//118
+f 2342//118 2261//118 2343//118
+f 2343//119 2260//119 2344//119
+f 2261//119 2260//119 2343//119
+f 2344//120 2262//120 2345//120
+f 2345//121 2262//122 2346//121
+f 2260//120 2262//120 2344//120
+f 2262//122 2257//122 2346//121
+f 2346//123 2258//124 2347//123
+f 2257//125 2258//124 2346//123
+f 2347//126 2259//127 2348//126
+f 2258//127 2259//127 2347//126
+f 2348//128 2256//129 2349//128
+f 2259//129 2256//129 2348//128
+f 2349//130 2255//131 2350//130
+f 2256//131 2255//131 2349//130
+f 2350//132 2254//133 2341//132
+f 2255//134 2254//133 2350//132
+f 2271//135 2263//135 2342//135
+f 2271//135 2342//135 2351//135
+f 2270//136 2271//136 2351//136
+f 2270//136 2351//136 2352//136
+f 2284//135 2270//135 2352//135
+f 2284//135 2352//135 2353//135
+f 2274//116 2284//116 2353//116
+f 2274//116 2353//116 2354//116
+f 2272//135 2274//135 2354//135
+f 2272//135 2354//135 2355//135
+f 2273//136 2272//136 2355//136
+f 2273//136 2355//136 2356//136
+f 2277//135 2273//135 2356//135
+f 2277//135 2356//135 2357//135
+f 2275//116 2277//116 2357//116
+f 2275//116 2357//116 2358//116
+f 2276//135 2275//135 2358//135
+f 2276//135 2358//135 2359//135
+f 2285//136 2276//136 2359//136
+f 2285//136 2359//136 2360//136
+f 2287//135 2285//135 2360//135
+f 2287//135 2360//135 2361//135
+f 2288//116 2287//116 2361//116
+f 2288//116 2361//116 2362//116
+f 2286//135 2288//135 2362//135
+f 2286//135 2362//135 2363//135
+f 2283//116 2286//116 2363//116
+f 2283//116 2363//116 2364//116
+f 2281//111 2283//111 2364//111
+f 2281//111 2364//111 2365//111
+f 2282//116 2281//116 2365//116
+f 2282//116 2365//116 2366//116
+f 2280//135 2282//135 2366//135
+f 2280//135 2366//135 2367//135
+f 2278//116 2280//116 2367//116
+f 2278//116 2367//116 2368//116
+f 2279//137 2278//137 2368//111
+f 2279//137 2368//111 2369//138
+f 2268//116 2279//116 2369//116
+f 2268//116 2369//116 2370//116
+f 2267//117 2268//117 2370//117
+f 2267//117 2370//117 2371//117
+f 2249//108 2267//108 2371//108
+f 2249//108 2371//108 2372//108
+f 2251//139 2250//139 2373//139
+f 2373//139 2250//139 2374//139
+f 2374//140 2246//140 2375//140
+f 2250//140 2246//140 2374//140
+f 2375//141 2245//141 2376//141
+f 2246//141 2245//141 2375//141
+f 2376//142 2247//142 2377//142
+f 2245//142 2247//142 2376//142
+f 2377//143 2248//143 2378//143
+f 2247//143 2248//143 2377//143
+f 2378//144 2249//144 2372//144
+f 2248//144 2249//144 2378//144
+f 2379//145 2251//107 2373//107
+f 2380//146 2379//145 2373//107
+f 2265//107 2251//107 2379//145
+f 2381//147 2264//148 2379//147
+f 2379//147 2264//148 2265//149
+f 2382//150 2264//150 2381//150
+f 2382//150 2381//150 2380//150
+f 2383//151 2382//151 2380//151
+f 2266//151 2383//151 2380//151
+f 2289//152 2380//152 2294//152
+f 2289//152 2266//152 2380//152
+f 2294//153 2296//154 2293//155
+f 2294//153 2384//156 2296//154
+f 2294//153 2385//157 2384//156
+f 2294//153 2380//154 2385//157
+f 2327//109 2326//109 2328//109
+f 2328//109 2326//109 2329//109
+f 2323//109 2322//109 2324//109
+f 2324//109 2322//109 2325//109
+f 2329//109 2386//109 2330//109
+f 2386//109 2387//109 2330//109
+f 2326//109 2388//109 2329//109
+f 2329//109 2388//109 2386//109
+f 2322//109 2320//109 2325//109
+f 2326//109 2320//109 2388//109
+f 2321//109 2320//109 2322//109
+f 2325//109 2320//109 2326//109
+f 2317//109 2316//109 2318//109
+f 2318//109 2316//109 2319//109
+f 2387//109 2389//109 2330//109
+f 2389//109 2390//109 2330//109
+f 2387//109 2391//109 2389//109
+f 2320//109 2392//109 2388//109
+f 2388//109 2392//109 2393//109
+f 2392//109 2394//109 2393//109
+f 2319//109 2395//109 2320//109
+f 2320//109 2395//109 2392//109
+f 2316//109 2395//109 2319//109
+f 2387//109 2396//109 2391//109
+f 2387//109 2397//109 2396//109
+f 2394//109 2397//109 2393//109
+f 2393//109 2397//109 2387//109
+f 2396//109 2398//109 2391//109
+f 2391//109 2398//109 2399//109
+f 2400//109 2401//109 2398//109
+f 2398//109 2401//109 2399//109
+f 2399//109 2401//109 2390//109
+f 2314//109 2313//109 2315//109
+f 2400//109 2402//109 2401//109
+f 2401//109 2403//109 2390//109
+f 2311//109 2310//109 2312//109
+f 2312//109 2310//109 2313//109
+f 2315//109 2404//109 2316//109
+f 2316//109 2404//109 2395//109
+f 2395//109 2405//109 2406//109
+f 2404//109 2405//109 2395//109
+f 2315//109 2407//109 2404//109
+f 2397//109 2408//109 2400//109
+f 2406//109 2408//109 2394//109
+f 2394//109 2408//109 2397//109
+f 2307//109 2306//109 2308//109
+f 2308//109 2306//109 2309//109
+f 2400//109 2409//109 2402//109
+f 2408//109 2409//109 2400//109
+f 2406//109 2410//109 2408//109
+f 2313//109 2411//109 2315//109
+f 2315//109 2411//109 2407//109
+f 2407//109 2411//109 2412//109
+f 2313//109 2413//109 2411//109
+f 2310//109 2413//109 2313//109
+f 2411//109 2414//109 2412//109
+f 2402//109 2415//109 2416//109
+f 2417//109 2415//109 2409//109
+f 2409//109 2415//109 2402//109
+f 2403//109 2418//109 2390//109
+f 2418//109 2419//109 2390//109
+f 2416//109 2420//109 2403//109
+f 2415//109 2420//109 2416//109
+f 2403//109 2420//109 2418//109
+f 2406//109 2421//109 2410//109
+f 2405//109 2421//109 2406//109
+f 2412//109 2421//109 2405//109
+f 2412//109 2422//109 2421//109
+f 2414//109 2422//109 2412//109
+f 2417//109 2423//109 2415//109
+f 2421//109 2423//109 2410//109
+f 2410//109 2423//109 2417//109
+f 2306//109 2424//109 2309//109
+f 2413//109 2424//109 2425//109
+f 2310//109 2424//109 2413//109
+f 2309//109 2424//109 2310//109
+f 2305//109 2426//109 2306//109
+f 2306//109 2426//109 2424//109
+f 2424//109 2427//109 2425//109
+f 2305//109 2428//109 2426//109
+f 2422//109 2429//109 2430//109
+f 2414//109 2429//109 2422//109
+f 2429//109 2431//109 2430//109
+f 2425//109 2432//109 2414//109
+f 2427//109 2432//109 2425//109
+f 2414//109 2432//109 2429//109
+f 2419//109 2433//109 2390//109
+f 2434//109 2435//109 2419//109
+f 2419//109 2435//109 2433//109
+f 2420//109 2436//109 2434//109
+f 2415//109 2436//109 2420//109
+f 2434//109 2436//109 2435//109
+f 2437//109 2438//109 2431//109
+f 2431//109 2438//109 2430//109
+f 2432//109 2439//109 2437//109
+f 2427//109 2439//109 2432//109
+f 2440//109 2441//109 2442//109
+f 2442//109 2441//109 2443//109
+f 2428//109 2444//109 2427//109
+f 2305//109 2444//109 2428//109
+f 2427//109 2444//109 2439//109
+f 2439//109 2445//109 2437//109
+f 2446//109 2447//109 2448//109
+f 2435//109 2449//109 2440//109
+f 2436//109 2449//109 2435//109
+f 2450//109 2451//109 2452//109
+f 2453//109 2454//109 2455//109
+f 2450//109 2456//109 2451//109
+f 2440//109 2457//109 2441//109
+f 2449//109 2457//109 2440//109
+f 2436//109 2458//109 2449//109
+f 2454//109 2458//109 2436//109
+f 2446//109 2459//109 2447//109
+f 2437//109 2460//109 2438//109
+f 2445//109 2460//109 2437//109
+f 2445//109 2461//109 2460//109
+f 2462//109 2461//109 2445//109
+f 2438//109 2463//109 2450//109
+f 2460//109 2463//109 2438//109
+f 2442//109 2464//109 2433//109
+f 2465//109 2464//109 2443//109
+f 2443//109 2464//109 2442//109
+f 2433//109 2464//109 2390//109
+f 2465//109 2466//109 2464//109
+f 2459//109 2467//109 2447//109
+f 2447//109 2467//109 2453//109
+f 2453//109 2468//109 2454//109
+f 2467//109 2468//109 2453//109
+f 2459//109 2469//109 2467//109
+f 2457//109 2470//109 2441//109
+f 2441//109 2470//109 2471//109
+f 2470//109 2472//109 2471//109
+f 2473//109 2474//109 2457//109
+f 2457//109 2474//109 2470//109
+f 2465//109 2475//109 2466//109
+f 2471//109 2476//109 2465//109
+f 2472//109 2476//109 2471//109
+f 2465//109 2476//109 2475//109
+f 2475//109 2477//109 2466//109
+f 2466//109 2477//109 2478//109
+f 2454//109 2479//109 2458//109
+f 2479//109 2480//109 2458//109
+f 2458//109 2480//109 2473//109
+f 2454//109 2481//109 2479//109
+f 2464//109 2331//109 2390//109
+f 2390//109 2331//109 2330//109
+f 2478//109 2331//109 2482//109
+f 2482//109 2331//109 2464//109
+f 2450//109 2483//109 2456//109
+f 2459//109 2483//109 2469//109
+f 2463//109 2483//109 2450//109
+f 2469//109 2483//109 2484//109
+f 2456//109 2483//109 2459//109
+f 2485//109 2483//109 2463//109
+f 2485//109 2486//109 2483//109
+f 2483//109 2487//109 2484//109
+f 2480//109 2488//109 2473//109
+f 2473//109 2488//109 2474//109
+f 2481//109 2489//109 2490//109
+f 2468//109 2489//109 2454//109
+f 2454//109 2489//109 2481//109
+f 2490//109 2491//109 2480//109
+f 2480//109 2491//109 2488//109
+f 2474//109 2492//109 2493//109
+f 2488//109 2492//109 2474//109
+f 2489//109 2494//109 2490//109
+f 2490//109 2494//109 2491//109
+f 2484//109 2495//109 2468//109
+f 2468//109 2495//109 2489//109
+f 2487//109 2495//109 2484//109
+f 2485//109 2303//109 2486//109
+f 2493//109 2496//109 2472//109
+f 2472//109 2496//109 2476//109
+f 2476//109 2496//109 2497//109
+f 2303//109 2302//109 2486//109
+f 2493//109 2498//109 2496//109
+f 2496//109 2499//109 2497//109
+f 2462//109 2304//109 2461//109
+f 2444//109 2304//109 2462//109
+f 2461//109 2304//109 2485//109
+f 2485//109 2304//109 2303//109
+f 2302//109 2299//109 2486//109
+f 2301//109 2300//109 2302//109
+f 2302//109 2300//109 2299//109
+f 2497//109 2332//109 2477//109
+f 2477//109 2332//109 2478//109
+f 2478//109 2332//109 2331//109
+f 2299//109 2298//109 2486//109
+f 2486//109 2298//109 2500//109
+f 2491//109 2501//109 2502//109
+f 2494//109 2501//109 2491//109
+f 2494//109 2503//109 2501//109
+f 2504//109 2503//109 2494//109
+f 2501//109 2505//109 2502//109
+f 2333//109 2335//109 2334//109
+f 2333//109 2336//109 2335//109
+f 2495//109 2506//109 2504//109
+f 2487//109 2506//109 2495//109
+f 2487//109 2507//109 2506//109
+f 2500//109 2507//109 2487//109
+f 2298//109 2507//109 2500//109
+f 2504//109 2508//109 2503//109
+f 2506//109 2508//109 2504//109
+f 2493//109 2509//109 2498//109
+f 2502//109 2509//109 2492//109
+f 2492//109 2509//109 2493//109
+f 2505//109 2510//109 2502//109
+f 2502//109 2510//109 2509//109
+f 2498//109 2511//109 2512//109
+f 2509//109 2511//109 2498//109
+f 2499//109 2513//109 2497//109
+f 2497//109 2513//109 2332//109
+f 2513//109 2514//109 2332//109
+f 2332//109 2514//109 2333//109
+f 2336//109 2514//109 2337//109
+f 2333//109 2514//109 2336//109
+f 2512//109 2515//109 2499//109
+f 2499//109 2515//109 2513//109
+f 2337//109 2516//109 2338//109
+f 2503//109 2517//109 2518//109
+f 2508//109 2517//109 2503//109
+f 2337//109 2519//109 2516//109
+f 2516//109 2520//109 2338//109
+f 2517//109 2521//109 2518//109
+f 2508//109 2522//109 2517//109
+f 2523//109 2522//109 2508//109
+f 2505//109 2524//109 2510//109
+f 2510//109 2524//109 2525//109
+f 2298//109 2372//109 2507//109
+f 2523//109 2372//109 2522//109
+f 2507//109 2372//109 2523//109
+f 2521//109 2526//109 2518//109
+f 2518//109 2526//109 2505//109
+f 2505//109 2526//109 2524//109
+f 2524//109 2527//109 2525//109
+f 2298//109 2378//109 2372//109
+f 2297//109 2377//109 2298//109
+f 2298//109 2377//109 2378//109
+f 2297//109 2376//109 2377//109
+f 2511//109 2528//109 2512//109
+f 2512//109 2528//109 2515//109
+f 2297//109 2375//109 2376//109
+f 2511//109 2529//109 2528//109
+f 2525//109 2529//109 2511//109
+f 2527//109 2529//109 2525//109
+f 2515//109 2530//109 2531//109
+f 2528//109 2530//109 2515//109
+f 2297//109 2374//109 2375//109
+f 2514//109 2532//109 2337//109
+f 2519//109 2532//109 2533//109
+f 2337//109 2532//109 2519//109
+f 2514//109 2534//109 2532//109
+f 2531//109 2534//109 2514//109
+f 2532//109 2535//109 2533//109
+f 2297//109 2373//109 2374//109
+f 2520//109 2536//109 2338//109
+f 2537//109 2538//109 2521//109
+f 2526//109 2538//109 2539//109
+f 2521//109 2538//109 2526//109
+f 2520//109 2540//109 2536//109
+f 2533//109 2540//109 2520//109
+f 2538//109 2541//109 2539//109
+f 2537//109 2542//109 2538//109
+f 2527//109 2543//109 2529//109
+f 2529//109 2543//109 2544//109
+f 2541//109 2545//109 2539//109
+f 2527//109 2545//109 2543//109
+f 2539//109 2545//109 2527//109
+f 2543//109 2546//109 2544//109
+f 2534//109 2547//109 2548//109
+f 2547//109 2549//109 2548//109
+f 2549//109 2550//109 2548//109
+f 2548//109 2550//109 2535//109
+f 2549//109 2551//109 2550//109
+f 2552//109 2551//109 2549//109
+f 2531//109 2553//109 2534//109
+f 2534//109 2553//109 2547//109
+f 2544//109 2553//109 2530//109
+f 2530//109 2553//109 2531//109
+f 2535//109 2554//109 2533//109
+f 2533//109 2554//109 2540//109
+f 2550//109 2554//109 2535//109
+f 2536//109 2339//109 2338//109
+f 2555//109 2339//109 2536//109
+f 2555//109 2556//109 2339//109
+f 2554//109 2557//109 2540//109
+f 2540//109 2557//109 2558//109
+f 2541//109 2559//109 2545//109
+f 2545//109 2559//109 2560//109
+f 2561//109 2559//109 2541//109
+f 2557//109 2562//109 2558//109
+f 2555//109 2562//109 2556//109
+f 2558//109 2562//109 2555//109
+f 2556//109 2563//109 2339//109
+f 2559//109 2564//109 2560//109
+f 2561//109 2565//109 2559//109
+f 2544//109 2566//109 2553//109
+f 2546//109 2566//109 2544//109
+f 2566//109 2567//109 2553//109
+f 2546//109 2568//109 2566//109
+f 2560//109 2568//109 2546//109
+f 2566//109 2569//109 2567//109
+f 2569//109 2570//109 2567//109
+f 2571//109 2340//109 2563//109
+f 2563//109 2340//109 2339//109
+f 2340//109 2350//109 2341//109
+f 2340//109 2349//109 2350//109
+f 2340//109 2348//109 2349//109
+f 2572//109 2573//109 2574//109
+f 2574//109 2573//109 2575//109
+f 2564//109 2576//109 2560//109
+f 2560//109 2576//109 2568//109
+f 2340//109 2347//109 2348//109
+f 2564//109 2577//109 2576//109
+f 2578//109 2577//109 2564//109
+f 2576//109 2579//109 2568//109
+f 2568//109 2579//109 2570//109
+f 2340//109 2351//109 2347//109
+f 2343//109 2351//109 2342//109
+f 2344//109 2351//109 2343//109
+f 2345//109 2351//109 2344//109
+f 2346//109 2351//109 2345//109
+f 2347//109 2351//109 2346//109
+f 2340//109 2580//109 2351//109
+f 2562//109 2580//109 2571//109
+f 2571//109 2580//109 2340//109
+f 2562//109 2581//109 2580//109
+f 2557//109 2581//109 2562//109
+f 2582//109 2581//109 2557//109
+f 2580//109 2583//109 2351//109
+f 2572//109 2584//109 2573//109
+f 2585//109 2584//109 2572//109
+f 2585//109 2586//109 2584//109
+f 2570//109 2586//109 2567//109
+f 2567//109 2586//109 2585//109
+f 2573//109 2587//109 2588//109
+f 2584//109 2587//109 2573//109
+f 2578//109 2371//109 2577//109
+f 2577//109 2371//109 2589//109
+f 2373//109 2296//109 2384//109
+f 2297//109 2296//109 2373//109
+f 2297//109 2295//109 2296//109
+f 2582//109 2590//109 2581//109
+f 2582//109 2591//109 2590//109
+f 2588//109 2591//109 2582//109
+f 2590//109 2592//109 2581//109
+f 2581//109 2592//109 2593//109
+f 2570//109 2594//109 2586//109
+f 2579//109 2594//109 2570//109
+f 2589//109 2594//109 2579//109
+f 2583//109 2352//109 2351//109
+f 2592//109 2352//109 2593//109
+f 2593//109 2352//109 2583//109
+f 2371//109 2595//109 2589//109
+f 2589//109 2595//109 2594//109
+f 2594//109 2596//109 2586//109
+f 2586//109 2596//109 2597//109
+f 2587//109 2354//109 2588//109
+f 2588//109 2354//109 2591//109
+f 2591//109 2354//109 2598//109
+f 2597//109 2354//109 2587//109
+f 2597//109 2355//109 2354//109
+f 2597//109 2358//109 2355//109
+f 2355//109 2357//109 2356//109
+f 2358//109 2357//109 2355//109
+f 2596//109 2359//109 2597//109
+f 2597//109 2359//109 2358//109
+f 2595//109 2369//109 2599//109
+f 2371//109 2369//109 2595//109
+f 2370//109 2369//109 2371//109
+f 2599//109 2600//109 2596//109
+f 2596//109 2600//109 2359//109
+f 2369//109 2366//109 2599//109
+f 2368//109 2366//109 2369//109
+f 2368//109 2367//109 2366//109
+f 2599//109 2601//109 2600//109
+f 2600//109 2602//109 2359//109
+f 2366//109 2365//109 2599//109
+f 2599//109 2365//109 2601//109
+f 2601//109 2362//109 2603//109
+f 2365//109 2362//109 2601//109
+f 2365//109 2363//109 2362//109
+f 2364//109 2363//109 2365//109
+f 2354//109 2353//109 2598//109
+f 2592//109 2353//109 2352//109
+f 2598//109 2353//109 2592//109
+f 2602//109 2360//109 2359//109
+f 2603//109 2360//109 2602//109
+f 2362//109 2361//109 2603//109
+f 2603//109 2361//109 2360//109
+f 2305//109 2304//109 2444//109
+f 2372//109 2371//109 2522//109
+f 2522//109 2371//109 2537//109
+f 2537//109 2371//109 2542//109
+f 2542//109 2371//109 2561//109
+f 2561//109 2371//109 2565//109
+f 2565//109 2371//109 2578//109
+f 2380//109 2373//109 2385//109
+f 2385//109 2373//109 2384//109
+f 2438//109 2415//109 2430//109
+f 2430//109 2415//109 2423//109
+f 2454//109 2446//109 2455//109
+f 2455//109 2446//109 2448//109
+f 2380//158 2381//158 2379//158
+f 2604//106 2605//106 2391//106
+f 2391//106 2605//106 2389//106
+f 2606//107 2604//107 2399//107
+f 2399//107 2604//107 2391//107
+f 2605//108 2607//108 2389//108
+f 2389//108 2607//108 2390//108
+f 2607//117 2606//117 2390//117
+f 2390//117 2606//117 2399//117
+f 2608//106 2609//106 2388//106
+f 2388//106 2609//106 2386//106
+f 2610//107 2608//107 2393//107
+f 2393//107 2608//107 2388//107
+f 2609//108 2611//108 2386//108
+f 2386//108 2611//108 2387//108
+f 2611//117 2610//117 2387//117
+f 2387//117 2610//117 2393//117
+f 2612//106 2613//106 2397//106
+f 2397//106 2613//106 2396//106
+f 2614//107 2612//107 2400//107
+f 2400//107 2612//107 2397//107
+f 2613//108 2615//108 2396//108
+f 2396//108 2615//108 2398//108
+f 2615//117 2614//117 2398//117
+f 2398//117 2614//117 2400//117
+f 2616//106 2617//106 2402//106
+f 2402//106 2617//106 2401//106
+f 2618//107 2616//107 2416//107
+f 2416//107 2616//107 2402//107
+f 2617//108 2619//108 2401//108
+f 2401//108 2619//108 2403//108
+f 2619//117 2618//117 2403//117
+f 2403//117 2618//117 2416//117
+f 2620//106 2621//106 2420//106
+f 2420//106 2621//106 2418//106
+f 2622//107 2620//107 2434//107
+f 2434//107 2620//107 2420//107
+f 2621//108 2623//108 2418//108
+f 2418//108 2623//108 2419//108
+f 2623//117 2622//117 2419//117
+f 2419//117 2622//117 2434//117
+f 2624//106 2625//106 2435//106
+f 2435//106 2625//106 2433//106
+f 2626//107 2624//107 2440//107
+f 2440//107 2624//107 2435//107
+f 2625//108 2627//108 2433//108
+f 2433//108 2627//108 2442//108
+f 2627//117 2626//117 2442//117
+f 2442//117 2626//117 2440//117
+f 2628//106 2629//106 2441//106
+f 2441//106 2629//106 2443//106
+f 2630//107 2628//107 2471//107
+f 2471//107 2628//107 2441//107
+f 2629//108 2631//108 2443//108
+f 2443//108 2631//108 2465//108
+f 2631//117 2630//117 2465//117
+f 2465//117 2630//117 2471//117
+f 2632//106 2633//106 2395//106
+f 2395//106 2633//106 2392//106
+f 2634//107 2632//107 2406//107
+f 2406//107 2632//107 2395//107
+f 2633//108 2635//108 2392//108
+f 2392//108 2635//108 2394//108
+f 2635//117 2634//117 2394//117
+f 2394//117 2634//117 2406//117
+f 2636//106 2637//106 2410//106
+f 2410//106 2637//106 2408//106
+f 2638//107 2636//107 2417//107
+f 2417//107 2636//107 2410//107
+f 2637//108 2639//108 2408//108
+f 2408//108 2639//108 2409//108
+f 2639//117 2638//117 2409//117
+f 2409//117 2638//117 2417//117
+f 2640//108 2641//108 2415//108
+f 2415//108 2641//108 2436//108
+f 2642//106 2640//106 2438//106
+f 2438//106 2640//106 2415//106
+f 2641//117 2643//117 2436//117
+f 2436//117 2643//117 2454//117
+f 2644//107 2642//107 2450//107
+f 2450//107 2642//107 2438//107
+f 2643//107 2645//107 2454//107
+f 2454//107 2645//107 2446//107
+f 2646//117 2644//117 2452//117
+f 2452//117 2644//117 2450//117
+f 2645//117 2647//117 2446//117
+f 2446//117 2647//117 2459//117
+f 2648//107 2646//107 2451//107
+f 2451//107 2646//107 2452//107
+f 2647//107 2649//107 2459//107
+f 2459//107 2649//107 2456//107
+f 2649//106 2648//106 2456//106
+f 2456//106 2648//106 2451//106
+f 2650//106 2651//106 2458//106
+f 2458//106 2651//106 2449//106
+f 2652//107 2650//107 2473//107
+f 2473//107 2650//107 2458//107
+f 2651//108 2653//108 2449//108
+f 2449//108 2653//108 2457//108
+f 2653//117 2652//117 2457//117
+f 2457//117 2652//117 2473//117
+f 2654//106 2655//106 2474//106
+f 2474//106 2655//106 2470//106
+f 2656//107 2654//107 2493//107
+f 2493//107 2654//107 2474//107
+f 2655//108 2657//108 2470//108
+f 2470//108 2657//108 2472//108
+f 2657//117 2656//117 2472//117
+f 2472//117 2656//117 2493//117
+f 2658//106 2659//106 2466//106
+f 2466//106 2659//106 2464//106
+f 2660//107 2658//107 2478//107
+f 2478//107 2658//107 2466//107
+f 2659//108 2661//108 2464//108
+f 2464//108 2661//108 2482//108
+f 2661//117 2660//117 2482//117
+f 2482//117 2660//117 2478//117
+f 2662//106 2663//106 2476//106
+f 2476//106 2663//106 2475//106
+f 2664//107 2662//107 2497//107
+f 2497//107 2662//107 2476//107
+f 2663//108 2665//108 2475//108
+f 2475//108 2665//108 2477//108
+f 2665//117 2664//117 2477//117
+f 2477//117 2664//117 2497//117
+f 2666//106 2667//106 2519//106
+f 2519//106 2667//106 2516//106
+f 2668//107 2666//107 2533//107
+f 2533//107 2666//107 2519//107
+f 2667//108 2669//108 2516//108
+f 2516//108 2669//108 2520//108
+f 2669//117 2668//117 2520//117
+f 2520//117 2668//117 2533//117
+f 2670//106 2671//106 2540//106
+f 2540//106 2671//106 2536//106
+f 2672//107 2670//107 2558//107
+f 2558//107 2670//107 2540//107
+f 2671//108 2673//108 2536//108
+f 2536//108 2673//108 2555//108
+f 2673//117 2672//117 2555//117
+f 2555//117 2672//117 2558//117
+f 2674//106 2675//106 2562//106
+f 2562//106 2675//106 2556//106
+f 2676//107 2674//107 2571//107
+f 2571//107 2674//107 2562//107
+f 2675//108 2677//108 2556//108
+f 2556//108 2677//108 2563//108
+f 2677//117 2676//117 2563//117
+f 2563//117 2676//117 2571//117
+f 2678//106 2679//106 2498//106
+f 2498//106 2679//106 2496//106
+f 2680//107 2678//107 2512//107
+f 2512//107 2678//107 2498//107
+f 2679//108 2681//108 2496//108
+f 2496//108 2681//108 2499//108
+f 2681//117 2680//117 2499//117
+f 2499//117 2680//117 2512//117
+f 2682//106 2683//106 2515//106
+f 2515//106 2683//106 2513//106
+f 2684//107 2682//107 2531//107
+f 2531//107 2682//107 2515//107
+f 2683//108 2685//108 2513//108
+f 2513//108 2685//108 2514//108
+f 2685//117 2684//117 2514//117
+f 2514//117 2684//117 2531//117
+f 2686//106 2687//106 2534//106
+f 2534//106 2687//106 2532//106
+f 2688//107 2686//107 2548//107
+f 2548//107 2686//107 2534//107
+f 2687//108 2689//108 2532//108
+f 2532//108 2689//108 2535//108
+f 2689//117 2688//117 2535//117
+f 2535//117 2688//117 2548//117
+f 2690//135 2691//135 2581//135
+f 2581//135 2691//135 2580//135
+f 2692//136 2690//136 2593//136
+f 2593//136 2690//136 2581//136
+f 2691//116 2693//116 2580//116
+f 2580//116 2693//116 2583//116
+f 2693//111 2692//111 2583//111
+f 2583//111 2692//111 2593//111
+f 2694//159 2695//159 2567//159
+f 2567//159 2695//159 2553//159
+f 2696//160 2694//160 2567//160
+f 2696//160 2567//160 2585//160
+f 2695//161 2697//161 2553//161
+f 2553//161 2697//161 2547//161
+f 2698//162 2696//162 2585//162
+f 2698//162 2585//162 2572//162
+f 2697//163 2699//163 2547//163
+f 2547//163 2699//163 2549//163
+f 2700//164 2698//164 2572//164
+f 2700//164 2572//164 2574//164
+f 2699//165 2701//165 2549//166
+f 2549//166 2701//165 2552//166
+f 2702//162 2700//162 2574//162
+f 2702//162 2574//162 2575//162
+f 2701//163 2703//163 2552//163
+f 2552//163 2703//163 2551//163
+f 2704//167 2702//167 2575//168
+f 2704//167 2575//168 2573//168
+f 2703//124 2705//124 2551//169
+f 2551//169 2705//124 2550//169
+f 2706//162 2704//162 2573//162
+f 2706//162 2573//162 2588//162
+f 2705//163 2707//163 2550//163
+f 2550//163 2707//163 2554//163
+f 2708//111 2706//111 2588//111
+f 2708//111 2588//111 2582//111
+f 2707//108 2709//108 2554//108
+f 2554//108 2709//108 2557//108
+f 2709//170 2708//170 2557//170
+f 2557//170 2708//170 2582//170
+f 2710//106 2711//106 2407//106
+f 2407//106 2711//106 2404//106
+f 2712//107 2710//107 2412//107
+f 2412//107 2710//107 2407//107
+f 2711//108 2713//108 2404//108
+f 2404//108 2713//108 2405//108
+f 2713//117 2712//117 2405//117
+f 2405//117 2712//117 2412//117
+f 2714//106 2715//106 2422//106
+f 2422//106 2715//106 2421//106
+f 2716//107 2714//107 2430//107
+f 2430//107 2714//107 2422//107
+f 2715//108 2717//108 2421//108
+f 2421//108 2717//108 2423//108
+f 2717//117 2716//117 2423//117
+f 2423//117 2716//117 2430//117
+f 2718//106 2719//106 2413//106
+f 2413//106 2719//106 2411//106
+f 2720//107 2718//107 2425//107
+f 2425//107 2718//107 2413//107
+f 2719//108 2721//108 2411//108
+f 2411//108 2721//108 2414//108
+f 2721//117 2720//117 2414//117
+f 2414//117 2720//117 2425//117
+f 2722//106 2723//106 2432//106
+f 2432//106 2723//106 2429//106
+f 2724//107 2722//107 2437//107
+f 2437//107 2722//107 2432//107
+f 2723//108 2725//108 2429//108
+f 2429//108 2725//108 2431//108
+f 2725//117 2724//117 2431//117
+f 2431//117 2724//117 2437//117
+f 2726//106 2727//106 2447//106
+f 2447//106 2727//106 2448//106
+f 2728//107 2726//107 2453//107
+f 2453//107 2726//107 2447//107
+f 2727//108 2729//108 2448//108
+f 2448//108 2729//108 2455//108
+f 2729//117 2728//117 2455//117
+f 2455//117 2728//117 2453//117
+f 2730//106 2731//106 2481//106
+f 2481//106 2731//106 2479//106
+f 2732//107 2730//107 2490//107
+f 2490//107 2730//107 2481//107
+f 2731//108 2733//108 2479//108
+f 2479//108 2733//108 2480//108
+f 2733//117 2732//117 2480//117
+f 2480//117 2732//117 2490//117
+f 2734//106 2735//106 2491//106
+f 2491//106 2735//106 2488//106
+f 2736//107 2734//107 2502//107
+f 2502//107 2734//107 2491//107
+f 2735//108 2737//108 2488//108
+f 2488//108 2737//108 2492//108
+f 2737//117 2736//117 2492//117
+f 2492//117 2736//117 2502//117
+f 2738//106 2739//106 2469//106
+f 2469//106 2739//106 2467//106
+f 2740//107 2738//107 2484//107
+f 2484//107 2738//107 2469//107
+f 2739//108 2741//108 2467//108
+f 2467//108 2741//108 2468//108
+f 2741//117 2740//117 2468//117
+f 2468//117 2740//117 2484//117
+f 2742//106 2743//106 2495//106
+f 2495//106 2743//106 2489//106
+f 2744//107 2742//107 2504//107
+f 2504//107 2742//107 2495//107
+f 2743//108 2745//108 2489//108
+f 2489//108 2745//108 2494//108
+f 2745//117 2744//117 2494//117
+f 2494//117 2744//117 2504//117
+f 2746//106 2747//106 2503//106
+f 2503//106 2747//106 2501//106
+f 2748//107 2746//107 2518//107
+f 2518//107 2746//107 2503//107
+f 2747//108 2749//108 2501//108
+f 2501//108 2749//108 2505//108
+f 2749//117 2748//117 2505//117
+f 2505//117 2748//117 2518//117
+f 2750//108 2751//108 2424//108
+f 2424//108 2751//108 2427//108
+f 2752//106 2750//106 2426//106
+f 2426//106 2750//106 2424//106
+f 2751//117 2753//117 2427//117
+f 2427//117 2753//117 2428//117
+f 2753//107 2752//107 2428//107
+f 2428//107 2752//107 2426//107
+f 2754//108 2755//108 2439//108
+f 2439//108 2755//108 2445//108
+f 2756//106 2754//106 2444//106
+f 2444//106 2754//106 2439//106
+f 2755//117 2757//117 2445//117
+f 2445//117 2757//117 2462//117
+f 2757//107 2756//107 2462//107
+f 2462//107 2756//107 2444//107
+f 2758//108 2759//108 2460//108
+f 2460//108 2759//108 2463//108
+f 2760//106 2758//106 2461//106
+f 2461//106 2758//106 2460//106
+f 2759//117 2761//117 2463//117
+f 2463//117 2761//117 2485//117
+f 2761//107 2760//107 2485//107
+f 2485//107 2760//107 2461//107
+f 2762//108 2763//108 2483//108
+f 2483//108 2763//108 2487//108
+f 2764//106 2762//106 2486//106
+f 2486//106 2762//106 2483//106
+f 2763//117 2765//117 2487//117
+f 2487//117 2765//117 2500//117
+f 2765//107 2764//107 2500//107
+f 2500//107 2764//107 2486//107
+f 2766//108 2767//108 2506//108
+f 2506//108 2767//108 2508//108
+f 2768//106 2766//106 2507//106
+f 2507//106 2766//106 2506//106
+f 2767//117 2769//117 2508//117
+f 2508//117 2769//117 2523//117
+f 2769//107 2768//107 2523//107
+f 2523//107 2768//107 2507//107
+f 2770//108 2771//108 2517//108
+f 2517//108 2771//108 2521//108
+f 2772//106 2770//106 2522//106
+f 2522//106 2770//106 2517//106
+f 2771//117 2773//117 2521//117
+f 2521//117 2773//117 2537//117
+f 2773//107 2772//107 2537//107
+f 2537//107 2772//107 2522//107
+f 2774//106 2775//106 2510//106
+f 2510//106 2775//106 2509//106
+f 2776//107 2774//107 2525//107
+f 2525//107 2774//107 2510//107
+f 2775//108 2777//108 2509//108
+f 2509//108 2777//108 2511//108
+f 2777//117 2776//117 2511//117
+f 2511//117 2776//117 2525//117
+f 2778//106 2779//106 2529//106
+f 2529//106 2779//106 2528//106
+f 2780//107 2778//107 2544//107
+f 2544//107 2778//107 2529//107
+f 2779//108 2781//108 2528//108
+f 2528//108 2781//108 2530//108
+f 2781//117 2780//117 2530//117
+f 2530//117 2780//117 2544//117
+f 2782//106 2783//106 2526//106
+f 2526//106 2783//106 2524//106
+f 2784//107 2782//107 2539//107
+f 2539//107 2782//107 2526//107
+f 2783//108 2785//108 2524//108
+f 2524//108 2785//108 2527//108
+f 2785//117 2784//117 2527//117
+f 2527//117 2784//117 2539//117
+f 2786//106 2787//106 2545//106
+f 2545//106 2787//106 2543//106
+f 2788//107 2786//107 2560//107
+f 2560//107 2786//107 2545//107
+f 2787//108 2789//108 2543//108
+f 2543//108 2789//108 2546//108
+f 2789//117 2788//117 2546//117
+f 2546//117 2788//117 2560//117
+f 2790//106 2791//106 2568//106
+f 2568//106 2791//106 2566//106
+f 2792//107 2790//107 2570//107
+f 2570//107 2790//107 2568//107
+f 2791//108 2793//108 2566//108
+f 2566//108 2793//108 2569//108
+f 2793//117 2792//117 2569//117
+f 2569//117 2792//117 2570//117
+f 2794//135 2795//135 2591//135
+f 2591//135 2795//135 2590//135
+f 2796//136 2794//136 2598//136
+f 2598//136 2794//136 2591//136
+f 2795//116 2797//116 2590//116
+f 2590//116 2797//116 2592//116
+f 2797//111 2796//111 2592//111
+f 2592//111 2796//111 2598//111
+f 2798//135 2799//135 2586//135
+f 2586//135 2799//135 2584//135
+f 2800//136 2798//136 2597//136
+f 2597//136 2798//136 2586//136
+f 2799//116 2801//116 2584//116
+f 2584//116 2801//116 2587//116
+f 2801//111 2800//111 2587//111
+f 2587//111 2800//111 2597//111
+f 2802//135 2803//135 2577//135
+f 2577//135 2803//135 2576//135
+f 2804//136 2802//136 2589//136
+f 2589//136 2802//136 2577//136
+f 2803//116 2805//116 2576//116
+f 2576//116 2805//116 2579//116
+f 2805//111 2804//111 2579//111
+f 2579//111 2804//111 2589//111
+f 2806//108 2807//108 2538//108
+f 2538//108 2807//108 2541//108
+f 2808//106 2806//106 2542//106
+f 2542//106 2806//106 2538//106
+f 2807//117 2809//117 2541//117
+f 2541//117 2809//117 2561//117
+f 2809//107 2808//107 2561//107
+f 2561//107 2808//107 2542//107
+f 2810//108 2811//108 2559//108
+f 2559//108 2811//108 2564//108
+f 2812//106 2810//106 2565//106
+f 2565//106 2810//106 2559//106
+f 2811//117 2813//117 2564//117
+f 2564//117 2813//117 2578//117
+f 2813//107 2812//107 2578//107
+f 2578//107 2812//107 2565//107
+f 2814//135 2815//135 2595//135
+f 2595//135 2815//135 2594//135
+f 2816//136 2814//136 2599//136
+f 2599//136 2814//136 2595//136
+f 2815//116 2817//116 2594//116
+f 2594//116 2817//116 2596//116
+f 2817//111 2816//111 2596//111
+f 2596//111 2816//111 2599//111
+f 2818//135 2819//135 2601//135
+f 2601//135 2819//135 2600//135
+f 2820//136 2818//136 2603//136
+f 2603//136 2818//136 2601//136
+f 2819//116 2821//116 2600//116
+f 2600//116 2821//116 2602//116
+f 2821//111 2820//111 2602//111
+f 2602//111 2820//111 2603//111
+f 2604//109 2606//109 2605//109
+f 2605//109 2606//109 2607//109
+f 2608//109 2610//109 2609//109
+f 2609//109 2610//109 2611//109
+f 2612//109 2614//109 2613//109
+f 2613//109 2614//109 2615//109
+f 2616//109 2618//109 2617//109
+f 2617//109 2618//109 2619//109
+f 2620//109 2622//109 2621//109
+f 2621//109 2622//109 2623//109
+f 2624//109 2626//109 2625//109
+f 2625//109 2626//109 2627//109
+f 2628//109 2630//109 2629//109
+f 2629//109 2630//109 2631//109
+f 2632//109 2634//109 2633//109
+f 2633//109 2634//109 2635//109
+f 2636//109 2638//109 2637//109
+f 2637//109 2638//109 2639//109
+f 2642//109 2645//109 2640//109
+f 2640//109 2645//109 2641//109
+f 2642//109 2646//109 2645//109
+f 2642//109 2644//109 2646//109
+f 2646//109 2648//109 2645//109
+f 2645//109 2643//109 2641//109
+f 2649//109 2647//109 2648//109
+f 2648//109 2647//109 2645//109
+f 2650//109 2652//109 2651//109
+f 2651//109 2652//109 2653//109
+f 2654//109 2656//109 2655//109
+f 2655//109 2656//109 2657//109
+f 2658//109 2660//109 2659//109
+f 2659//109 2660//109 2661//109
+f 2662//109 2664//109 2663//109
+f 2663//109 2664//109 2665//109
+f 2666//109 2668//109 2667//109
+f 2667//109 2668//109 2669//109
+f 2670//109 2672//109 2671//109
+f 2671//109 2672//109 2673//109
+f 2674//109 2676//109 2675//109
+f 2675//109 2676//109 2677//109
+f 2678//109 2680//109 2679//109
+f 2679//109 2680//109 2681//109
+f 2682//109 2684//109 2683//109
+f 2683//109 2684//109 2685//109
+f 2686//109 2688//109 2687//109
+f 2687//109 2688//109 2689//109
+f 2690//109 2692//109 2691//109
+f 2691//109 2692//109 2693//109
+f 2697//109 2701//109 2699//109
+f 2703//109 2707//109 2705//109
+f 2707//109 2708//109 2709//109
+f 2694//109 2696//109 2695//109
+f 2695//109 2696//109 2697//109
+f 2697//109 2696//109 2701//109
+f 2701//109 2700//109 2703//109
+f 2696//109 2700//109 2701//109
+f 2696//109 2698//109 2700//109
+f 2700//109 2702//109 2703//109
+f 2704//109 2706//109 2702//109
+f 2703//109 2706//109 2707//109
+f 2707//109 2706//109 2708//109
+f 2702//109 2706//109 2703//109
+f 2710//109 2712//109 2711//109
+f 2711//109 2712//109 2713//109
+f 2714//109 2716//109 2715//109
+f 2715//109 2716//109 2717//109
+f 2718//109 2720//109 2719//109
+f 2719//109 2720//109 2721//109
+f 2722//109 2724//109 2723//109
+f 2723//109 2724//109 2725//109
+f 2726//109 2728//109 2727//109
+f 2727//109 2728//109 2729//109
+f 2730//109 2732//109 2731//109
+f 2731//109 2732//109 2733//109
+f 2734//109 2736//109 2735//109
+f 2735//109 2736//109 2737//109
+f 2738//109 2740//109 2739//109
+f 2739//109 2740//109 2741//109
+f 2742//109 2744//109 2743//109
+f 2743//109 2744//109 2745//109
+f 2746//109 2748//109 2747//109
+f 2747//109 2748//109 2749//109
+f 2752//109 2753//109 2750//109
+f 2750//109 2753//109 2751//109
+f 2756//109 2757//109 2754//109
+f 2754//109 2757//109 2755//109
+f 2760//109 2761//109 2758//109
+f 2758//109 2761//109 2759//109
+f 2762//109 2764//109 2763//109
+f 2764//109 2765//109 2763//109
+f 2768//109 2769//109 2766//109
+f 2766//109 2769//109 2767//109
+f 2772//109 2773//109 2770//109
+f 2770//109 2773//109 2771//109
+f 2774//109 2776//109 2775//109
+f 2775//109 2776//109 2777//109
+f 2778//109 2780//109 2779//109
+f 2779//109 2780//109 2781//109
+f 2782//109 2784//109 2783//109
+f 2783//109 2784//109 2785//109
+f 2786//109 2788//109 2787//109
+f 2787//109 2788//109 2789//109
+f 2790//109 2792//109 2791//109
+f 2791//109 2792//109 2793//109
+f 2794//109 2796//109 2795//109
+f 2795//109 2796//109 2797//109
+f 2798//109 2801//109 2799//109
+f 2798//109 2800//109 2801//109
+f 2802//109 2805//109 2803//109
+f 2802//109 2804//109 2805//109
+f 2808//109 2809//109 2806//109
+f 2806//109 2809//109 2807//109
+f 2812//109 2813//109 2810//109
+f 2810//109 2813//109 2811//109
+f 2814//109 2817//109 2815//109
+f 2814//109 2816//109 2817//109
+f 2818//109 2821//109 2819//109
+f 2818//109 2820//109 2821//109
Binary files 1.2.21-5/modules/lsp-runtime-lib/res/test/compressor/ttf/lsp-icons.ttf and 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/compressor/ttf/lsp-icons.ttf differ
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/church.obj 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/church.obj
--- 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/church.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/church.obj	2025-08-26 18:15:43.666003873 +0000
@@ -0,0 +1,804 @@
+# Church
+# (C) Linux Studio Plugins Project
+o Stained Glass
+v 10.150000 3.000000 1.000000
+v 10.150000 3.000000 5.000000
+v 10.350000 3.000000 1.000000
+v 10.350000 3.000000 5.000000
+v 10.150000 1.000000 1.000000
+v 10.150000 1.000000 5.000000
+v 10.350000 1.000000 1.000000
+v 10.350000 1.000000 5.000000
+v 10.150000 -7.000000 1.000000
+v 10.150000 -7.000000 5.000000
+v 10.350000 -7.000000 1.000000
+v 10.350000 -7.000000 5.000000
+v 10.150000 -9.000000 1.000000
+v 10.150000 -9.000000 5.000000
+v 10.350000 -9.000000 1.000000
+v 10.350000 -9.000000 5.000000
+v 10.150000 -4.000000 1.000000
+v 10.150000 -4.000000 5.000000
+v 10.350000 -4.000000 1.000000
+v 10.350000 -4.000000 5.000000
+v 10.150000 -6.000000 1.000000
+v 10.150000 -6.000000 5.000000
+v 10.350000 -6.000000 1.000000
+v 10.350000 -6.000000 5.000000
+v 10.150000 -1.000000 1.000000
+v 10.150000 -1.000000 5.000000
+v 10.350000 -1.000000 1.000000
+v 10.350000 -1.000000 5.000000
+v 10.150000 -3.000000 1.000000
+v 10.150000 -3.000000 5.000000
+v 10.350000 -3.000000 1.000000
+v 10.350000 -3.000000 5.000000
+v 10.150000 9.000000 1.000000
+v 10.150000 9.000000 5.000000
+v 10.350000 9.000000 1.000000
+v 10.350000 9.000000 5.000000
+v 10.150000 7.000000 1.000000
+v 10.150000 7.000000 5.000000
+v 10.350000 7.000000 1.000000
+v 10.350000 7.000000 5.000000
+v 10.150000 6.000000 1.000000
+v 10.150000 6.000000 5.000000
+v 10.350000 6.000000 1.000000
+v 10.350000 6.000000 5.000000
+v 10.150000 4.000000 1.000000
+v 10.150000 4.000000 5.000000
+v 10.350000 4.000000 1.000000
+v 10.350000 4.000000 5.000000
+vn 0.0000 1.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 0.0000 1.0000
+
+f 1//1 2//1 4//1 3//1
+f 3//2 4//2 8//2 7//2
+f 7//3 8//3 6//3 5//3
+f 5//4 6//4 2//4 1//4
+f 3//5 7//5 5//5 1//5
+f 8//6 4//6 2//6 6//6
+f 9//1 10//1 12//1 11//1
+f 11//2 12//2 16//2 15//2
+f 15//3 16//3 14//3 13//3
+f 13//4 14//4 10//4 9//4
+f 11//5 15//5 13//5 9//5
+f 16//6 12//6 10//6 14//6
+f 17//1 18//1 20//1 19//1
+f 19//2 20//2 24//2 23//2
+f 23//3 24//3 22//3 21//3
+f 21//4 22//4 18//4 17//4
+f 19//5 23//5 21//5 17//5
+f 24//6 20//6 18//6 22//6
+f 25//1 26//1 28//1 27//1
+f 27//2 28//2 32//2 31//2
+f 31//3 32//3 30//3 29//3
+f 29//4 30//4 26//4 25//4
+f 27//5 31//5 29//5 25//5
+f 32//6 28//6 26//6 30//6
+f 33//1 34//1 36//1 35//1
+f 35//2 36//2 40//2 39//2
+f 39//3 40//3 38//3 37//3
+f 37//4 38//4 34//4 33//4
+f 35//5 39//5 37//5 33//5
+f 40//6 36//6 34//6 38//6
+f 41//1 42//1 44//1 43//1
+f 43//2 44//2 48//2 47//2
+f 47//3 48//3 46//3 45//3
+f 45//4 46//4 42//4 41//4
+f 43//5 47//5 45//5 41//5
+f 48//6 44//6 42//6 46//6
+
+o Entrance Doors
+v 3.000000 9.700000 -0.950000
+v 3.000000 9.700000 2.050000
+v 5.000000 9.700000 -0.950000
+v 5.000000 9.700000 2.050000
+v 3.000000 9.599999 -0.950000
+v 3.000000 9.599999 2.050000
+v 5.000000 9.599999 -0.950000
+v 5.000000 9.599999 2.050000
+v -7.000000 -9.599998 -0.950000
+v -7.000000 -9.599998 2.050000
+v -5.000000 -9.599998 -0.950000
+v -5.000000 -9.599998 2.050000
+v -7.000000 -9.699997 -0.950000
+v -7.000000 -9.699997 2.050000
+v -5.000000 -9.699997 -0.950000
+v -5.000000 -9.699997 2.050000
+v -9.500000 -9.599998 -0.950000
+v -9.500000 -9.599998 2.050000
+v -7.500000 -9.599998 -0.950000
+v -7.500000 -9.599998 2.050000
+v -9.500000 -9.699997 -0.950000
+v -9.500000 -9.699997 2.050000
+v -7.500000 -9.699997 -0.950000
+v -7.500000 -9.699997 2.050000
+v -2.000000 -9.599998 -0.950000
+v -2.000000 -9.599998 2.050000
+v 0.000000 -9.599998 -0.950000
+v 0.000000 -9.599998 2.050000
+v -2.000000 -9.699997 -0.950000
+v -2.000000 -9.699997 2.050000
+v 0.000000 -9.699997 -0.950000
+v 0.000000 -9.699997 2.050000
+v 5.000000 -9.599998 -0.950000
+v 5.000000 -9.599998 2.050000
+v 7.000000 -9.599998 -0.950000
+v 7.000000 -9.599998 2.050000
+v 5.000000 -9.699997 -0.950000
+v 5.000000 -9.699997 2.050000
+v 7.000000 -9.699997 -0.950000
+v 7.000000 -9.699997 2.050000
+v 7.500000 -9.599998 -0.950000
+v 7.500000 -9.599998 2.050000
+v 9.500000 -9.599998 -0.950000
+v 9.500000 -9.599998 2.050000
+v 7.500000 -9.699997 -0.950000
+v 7.500000 -9.699997 2.050000
+v 9.500000 -9.699997 -0.950000
+v 9.500000 -9.699997 2.050000
+vn 0.0000 1.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 0.0000 1.0000
+
+f 49//7 50//7 52//7 51//7
+f 51//8 52//8 56//8 55//8
+f 55//9 56//9 54//9 53//9
+f 53//10 54//10 50//10 49//10
+f 51//11 55//11 53//11 49//11
+f 56//12 52//12 50//12 54//12
+f 57//7 58//7 60//7 59//7
+f 59//8 60//8 64//8 63//8
+f 63//9 64//9 62//9 61//9
+f 61//10 62//10 58//10 57//10
+f 59//11 63//11 61//11 57//11
+f 64//12 60//12 58//12 62//12
+f 65//7 66//7 68//7 67//7
+f 67//8 68//8 72//8 71//8
+f 71//9 72//9 70//9 69//9
+f 69//10 70//10 66//10 65//10
+f 67//11 71//11 69//11 65//11
+f 72//12 68//12 66//12 70//12
+f 73//7 74//7 76//7 75//7
+f 75//8 76//8 80//8 79//8
+f 79//9 80//9 78//9 77//9
+f 77//10 78//10 74//10 73//10
+f 75//11 79//11 77//11 73//11
+f 80//12 76//12 74//12 78//12
+f 81//7 82//7 84//7 83//7
+f 83//8 84//8 88//8 87//8
+f 87//9 88//9 86//9 85//9
+f 85//10 86//10 82//10 81//10
+f 83//11 87//11 85//11 81//11
+f 88//12 84//12 82//12 86//12
+f 89//7 90//7 92//7 91//7
+f 91//8 92//8 96//8 95//8
+f 95//9 96//9 94//9 93//9
+f 93//10 94//10 90//10 89//10
+f 91//11 95//11 93//11 89//11
+f 96//12 92//12 90//12 94//12
+
+o Supplementary Doors
+v -10.200000 -8.200000 -0.950000
+v -10.200000 -8.200000 2.050000
+v -10.099999 -8.200000 -0.950000
+v -10.099999 -8.200000 2.050000
+v -10.200000 -9.400001 -0.950000
+v -10.200000 -9.400001 2.050000
+v -10.099999 -9.400001 -0.950000
+v -10.099999 -9.400001 2.050000
+v -1.978877 8.712419 0.050000
+v -1.978877 8.712419 3.050000
+v -2.071595 8.674960 0.050000
+v -2.071595 8.674960 3.050000
+v -2.428405 9.825040 0.050000
+v -2.428405 9.825040 3.050000
+v -2.521124 9.787580 0.050000
+v -2.521124 9.787580 3.050000
+v -9.847284 2.325840 0.050000
+v -9.847284 2.325840 3.050000
+v -9.826493 2.423655 0.050000
+v -9.826493 2.423655 3.050000
+v -8.673508 2.076344 0.050000
+v -8.673508 2.076344 3.050000
+v -8.652717 2.174160 0.050000
+v -8.652717 2.174160 3.050000
+vn 0.0000 1.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 0.0000 1.0000
+vn 0.3746 -0.9272 0.0000
+vn -0.9272 -0.3746 0.0000
+vn -0.3746 0.9272 0.0000
+vn 0.9272 0.3746 0.0000
+vn -0.9781 0.2079 0.0000
+vn 0.2079 0.9781 0.0000
+vn 0.9781 -0.2079 0.0000
+vn -0.2079 -0.9781 0.0000
+
+f 97//13 98//13 100//13 99//13
+f 99//14 100//14 104//14 103//14
+f 103//15 104//15 102//15 101//15
+f 101//16 102//16 98//16 97//16
+f 99//17 103//17 101//17 97//17
+f 104//18 100//18 98//18 102//18
+f 105//19 106//19 108//19 107//19
+f 107//20 108//20 112//20 111//20
+f 111//21 112//21 110//21 109//21
+f 109//22 110//22 106//22 105//22
+f 107//17 111//17 109//17 105//17
+f 112//18 108//18 106//18 110//18
+f 113//23 114//23 116//23 115//23
+f 115//24 116//24 120//24 119//24
+f 119//25 120//25 118//25 117//25
+f 117//26 118//26 114//26 113//26
+f 115//17 119//17 117//17 113//17
+f 120//18 116//18 114//18 118//18
+
+o Roof
+v -11.000001 10.999999 6.000000
+v -0.000000 11.000000 16.000000
+v 0.000000 -11.000000 16.000000
+v -10.999999 -11.000001 6.000000
+v 10.999999 11.000001 6.000000
+v 11.000001 -10.999999 6.000000
+v -11.000001 10.999999 6.200000
+v -10.999999 -11.000001 6.200000
+v 0.000000 -11.000000 16.200001
+v -0.000000 11.000000 16.200001
+v 11.000001 -10.999999 6.200000
+v 10.999999 11.000001 6.200000
+vn -0.0000 -0.0000 -1.0000
+vn 0.0000 0.0000 1.0000
+vn -1.0000 -0.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn -0.0000 1.0000 0.0000
+
+f 121//27 122//27 123//27 124//27
+f 122//27 125//27 126//27 123//27
+f 127//28 128//28 129//28 130//28
+f 129//28 131//28 132//28 130//28
+f 121//29 124//29 128//29 127//29
+f 126//30 125//30 132//30 131//30
+f 124//31 123//31 126//31 131//31 129//31 128//31
+f 125//32 122//32 121//32 127//32 130//32 132//32
+
+o Hall
+v 10.000000 9.500000 -1.000000
+v 10.000000 -9.500000 -1.000000
+v 2.400000 9.500000 -1.000000
+v 2.400000 9.500000 10.000000
+v -2.000000 8.000000 -1.000000
+v -2.000000 8.000000 10.000000
+v -2.400001 10.000000 -1.000000
+v -2.400001 10.000000 10.000000
+v -5.000000 10.000000 -1.000000
+v -5.000000 10.000000 10.000000
+v -10.000000 5.000000 -1.000000
+v -10.000000 2.400000 -1.000000
+v -8.000000 2.000000 -1.000000
+v -10.000000 -8.000000 -1.000000
+v -10.000000 -9.500000 -1.000000
+v 10.500000 -10.000000 -1.500000
+v 10.500000 10.000000 -1.500000
+v 2.400000 10.000000 -1.500000
+v 2.400000 10.000000 10.500000
+v -1.500000 8.500000 -1.500000
+v -1.500000 8.500000 10.500000
+v -1.900000 10.500000 -1.500000
+v -1.900000 10.500000 10.500000
+v -5.500000 10.500000 -1.500000
+v -5.500000 10.500000 10.500000
+v -10.500000 5.500000 -1.500000
+v -10.500000 1.899999 -1.500000
+v -8.500000 1.500000 -1.500000
+v -10.500000 -8.000000 -1.500000
+v -10.500000 -10.000000 -1.500000
+v -10.500000 -10.000000 6.454546
+v -6.049999 -10.000000 10.500000
+v -6.599999 -9.500000 10.000000
+v -10.000000 -9.500000 6.909091
+v 6.050000 10.000000 10.500000
+v 10.500000 10.000000 6.454546
+v 6.600000 9.500000 10.000000
+v 10.000000 9.500000 6.909091
+v 6.050000 -10.000000 10.500000
+v 10.500000 -10.000000 6.454546
+v 6.600001 -9.500000 10.000000
+v 10.000000 -9.500000 6.909091
+v -10.000000 5.000000 6.909091
+v -6.600000 8.400000 10.000000
+v -6.050001 9.950001 10.500000
+v -10.500000 5.500000 6.454546
+v -10.500000 1.899999 6.454546
+v -10.000000 2.400000 6.909091
+v -8.000000 2.000000 8.727273
+v -10.000000 -8.000000 6.909091
+v -10.500000 -8.000000 6.454546
+v -8.500000 1.500000 8.272727
+v 5.000000 10.000000 2.050000
+v 5.000000 9.500000 2.050000
+v 3.000000 9.500000 2.050000
+v 3.000000 10.000000 2.050000
+v 3.000000 10.000000 -0.950000
+v 3.000000 9.500000 -0.950000
+v 5.000000 10.000000 -0.950000
+v 5.000000 9.500000 -0.950000
+v 5.000000 9.500000 1.705742
+v -1.814607 10.073030 3.050000
+v -2.369748 9.848739 3.050000
+v -1.814607 10.073030 0.050000
+v -2.369748 9.848739 0.050000
+v -1.575111 8.875552 0.050000
+v -2.130253 8.651260 0.050000
+v -1.575111 8.875552 3.050000
+v -2.130253 8.651260 3.050000
+v 9.500000 -10.000000 2.050000
+v 9.500000 -9.500000 2.050000
+v 7.500000 -10.000000 2.050000
+v 7.500000 -9.500000 2.050000
+v 7.500000 -10.000000 -0.950000
+v 7.500000 -9.500000 -0.950000
+v 9.500000 -10.000000 -0.950000
+v 9.500000 -9.500000 -0.950000
+v 7.000000 -9.500000 2.050000
+v 7.000000 -10.000000 2.050000
+v 5.000000 -9.500000 2.050000
+v 5.000001 -9.500000 1.614286
+v 5.000000 -10.000000 2.050000
+v 5.000000 -9.500000 -0.950000
+v 5.000000 -10.000000 -0.950000
+v 7.000000 -9.500000 -0.950000
+v 7.000000 -10.000000 -0.950000
+v 7.000001 -9.500000 1.962857
+v -0.000000 -9.500000 2.050000
+v -0.000000 -10.000000 2.050000
+v -2.000000 -9.500000 2.050000
+v -2.000000 -9.500000 0.394286
+v -2.000000 -10.000000 2.050000
+v -2.000000 -9.500000 -0.950000
+v -2.000000 -10.000000 -0.950000
+v -0.000000 -9.500000 -0.950000
+v -0.000000 -10.000000 -0.950000
+v 0.000000 -10.000000 0.904839
+v 0.000001 -9.500000 0.742857
+v -5.000000 -9.500000 2.050000
+v -5.000000 -10.000000 2.050000
+v -7.000000 -9.500000 2.050000
+v -7.000000 -10.000000 2.050000
+v -7.000000 -9.500000 -0.950000
+v -7.000000 -9.500000 -0.477143
+v -7.000000 -10.000000 -0.038236
+v -7.000000 -10.000000 -0.950000
+v -5.000000 -9.500000 -0.950000
+v -5.000000 -10.000000 -0.950000
+v -5.000000 -9.500000 -0.128572
+v -7.500000 -9.500000 2.050000
+v -7.500000 -10.000000 2.050000
+v -9.500000 -9.500000 2.050000
+v -9.500000 -10.000000 2.050000
+v -9.500000 -9.500000 -0.950000
+v -9.500000 -9.500000 -0.912857
+v -9.500000 -10.000000 -0.950000
+v -9.183098 -10.000000 -0.950000
+v -7.500000 -9.500000 -0.950000
+v -7.500000 -10.000000 -0.950000
+v -7.500000 -9.500000 -0.564286
+v -7.500000 -10.000000 -0.247059
+v -10.000000 -9.400001 2.050000
+v -10.500000 -9.400000 2.050000
+v -10.000000 -9.400001 -0.950000
+v -10.500000 -9.400000 -0.950000
+v -10.000000 -8.200000 -0.950000
+v -10.500000 -8.199999 -0.950000
+v -10.000000 -8.200000 2.050000
+v -10.500000 -8.199999 2.050000
+v -10.500000 -9.400001 0.886361
+v -8.661610 2.132322 3.050000
+v -8.783943 1.556788 3.050000
+v -8.661610 2.132322 0.050000
+v -8.783943 1.556788 0.050000
+v -9.838390 2.367678 0.050000
+v -9.960725 1.792144 0.050000
+v -9.838390 2.367678 3.050000
+v -9.960725 1.792144 3.050000
+v 10.500000 -9.000000 5.000000
+v 10.000000 -9.000000 5.000000
+v 10.500000 -9.000000 1.000000
+v 10.000000 -9.000000 1.000000
+v 10.500000 -7.000000 1.000000
+v 10.000000 -7.000000 1.000000
+v 10.500000 -7.000000 5.000000
+v 10.000000 -7.000000 5.000000
+v 10.500000 -6.000000 5.000000
+v 10.000000 -6.000000 5.000000
+v 10.500000 -6.000000 1.000000
+v 10.000000 -6.000000 1.000000
+v 10.500000 -4.000000 1.000000
+v 10.000000 -4.000000 1.000000
+v 10.500000 -4.000000 5.000000
+v 10.000000 -4.000000 5.000000
+v 10.000000 -6.000000 1.358126
+v 10.500000 -3.000000 5.000000
+v 10.000000 -3.000000 5.000000
+v 10.500000 -3.000000 1.000000
+v 10.000000 -3.000000 1.000000
+v 10.500000 -1.000000 1.000000
+v 10.000000 -1.000000 1.000000
+v 10.500000 -1.000000 5.000000
+v 10.000000 -1.000000 5.000000
+v 10.500000 -3.000000 1.389610
+v 10.500000 1.000000 5.000000
+v 10.000000 1.000000 5.000000
+v 10.500000 1.000000 1.000000
+v 10.000000 1.000000 1.000000
+v 10.500000 3.000000 1.000000
+v 10.000000 3.000000 1.000000
+v 10.500000 3.000000 5.000000
+v 10.000000 3.000000 5.000000
+v 10.500000 0.999999 1.991735
+v 10.500000 4.000000 5.000000
+v 10.000000 4.000000 5.000000
+v 10.500000 4.000000 1.000000
+v 10.000000 4.000000 1.000000
+v 10.500000 6.000000 1.000000
+v 10.000000 6.000000 1.000000
+v 10.500000 6.000000 5.000000
+v 10.000000 6.000000 5.000000
+v 10.500000 6.000000 3.337662
+v 10.000000 6.000000 3.727273
+v 10.500000 8.133333 5.000000
+v 10.500000 7.000000 5.000000
+v 10.000000 7.000000 5.000000
+v 10.000000 7.400000 5.000000
+v 10.500000 7.000000 1.000000
+v 10.000000 7.000000 1.000000
+v 10.500000 8.999999 1.000000
+v 10.000000 8.999999 1.000000
+v 10.500000 8.999999 5.000000
+v 10.000000 8.999999 5.000000
+v 10.500000 7.000000 4.116883
+v 10.000000 7.000000 4.636364
+vn -1.0000 -0.0000 0.0000
+vn 0.0000 0.0000 1.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.3746 -0.9272 0.0000
+vn -0.3746 0.9272 0.0000
+vn 0.0000 1.0000 0.0000
+vn -0.0000 -1.0000 0.0000
+vn -0.9781 0.2079 0.0000
+vn 0.9781 -0.2079 0.0000
+vn 0.1867 -0.9823 0.0136
+vn -0.0000 -1.0000 0.0001
+vn 0.1229 -0.9924 -0.0000
+vn -0.9806 -0.1961 -0.0000
+vn 0.3753 -0.9061 0.1951
+vn 0.1951 -0.9808 -0.0000
+vn 0.7071 -0.7071 -0.0000
+vn -0.5923 -0.6044 0.5328
+vn 0.5834 -0.5522 0.5956
+vn 0.3174 0.8260 0.4657
+vn 0.1961 0.9806 0.0000
+vn 0.4169 0.4155 0.8084
+vn 0.9951 -0.0985 0.0000
+vn 0.9806 -0.1961 0.0000
+vn 0.5301 -0.1347 0.8371
+vn -0.3572 0.5156 0.7788
+vn -0.3976 0.9046 -0.1537
+vn 0.7179 0.5444 0.4339
+vn -0.1951 0.8760 0.4410
+vn 0.7129 0.6264 0.3154
+vn 0.7129 -0.6264 0.3154
+vn -0.2082 0.9780 -0.0151
+vn -0.1373 0.9905 -0.0000
+vn 0.2788 0.6342 0.7211
+vn 0.9806 0.1961 0.0000
+vn -0.3753 0.9061 0.1951
+vn -0.1951 0.9808 -0.0000
+vn -0.7071 0.7071 -0.0000
+vn -0.8989 0.2979 0.3213
+vn -0.5675 0.4218 0.7071
+vn -0.7753 -0.5501 0.3102
+vn -0.1961 -0.9806 -0.0000
+vn -0.9015 -0.1958 0.3859
+vn -0.9785 0.2060 0.0000
+vn -0.9946 0.1036 0.0000
+vn -0.9245 0.0641 0.3757
+vn -0.7129 -0.6264 0.3154
+vn 0.2788 -0.6342 0.7211
+vn -0.2788 -0.6342 0.7211
+vn 0.3572 -0.5156 0.7788
+vn 0.3976 -0.9046 -0.1537
+
+f 191//33 192//33 193//33 186//33 185//33
+f 189//34 190//34 192//34 191//34
+f 190//35 189//35 188//35 187//35
+f 187//36 188//36 185//36 186//36
+f 197//37 196//37 194//37 195//37
+f 198//38 199//38 201//38 200//38
+f 199//34 198//34 196//34 197//34
+f 195//36 194//36 200//36 201//36
+f 209//33 208//33 202//33 203//33
+f 207//34 206//34 208//34 209//34
+f 206//35 207//35 205//35 204//35
+f 204//36 205//36 203//36 202//36
+f 217//33 218//33 211//33 210//33 219//33
+f 215//34 216//34 218//34 217//34
+f 216//35 215//35 213//35 212//35 214//35
+f 214//36 212//36 210//36 211//36
+f 227//33 228//33 229//33 221//33 220//33 230//33
+f 225//34 226//34 228//34 227//34
+f 226//35 225//35 223//35 222//35 224//35
+f 224//36 222//36 220//36 221//36
+f 239//33 240//33 232//33 231//33 241//33
+f 235//34 238//34 240//34 239//34
+f 238//35 235//35 236//35 233//35 234//35 237//35
+f 234//36 233//36 231//36 232//36
+f 250//33 251//33 253//33 243//33 242//33 252//33
+f 246//34 248//34 249//34 251//34 250//34
+f 248//35 246//35 247//35 244//35 245//35
+f 245//36 244//36 242//36 243//36
+f 256//39 257//39 262//39 255//39 254//39
+f 259//40 258//40 260//40 261//40
+f 258//34 259//34 257//34 256//34
+f 254//36 255//36 261//36 260//36
+f 265//41 266//41 264//41 263//41
+f 268//42 267//42 269//42 270//42
+f 267//34 268//34 266//34 265//34
+f 263//36 264//36 270//36 269//36
+f 273//39 274//39 272//39 271//39
+f 276//40 275//40 277//40 278//40
+f 275//34 276//34 274//34 273//34
+f 271//36 272//36 278//36 277//36
+f 281//39 282//39 287//39 280//39 279//39
+f 284//40 283//40 285//40 286//40
+f 283//34 284//34 282//34 281//34
+f 279//36 280//36 286//36 285//36
+f 290//39 291//39 289//39 288//39 296//39
+f 293//40 292//40 294//40 295//40
+f 292//34 293//34 291//34 290//34
+f 288//36 289//36 295//36 294//36
+f 299//39 300//39 298//39 297//39 305//39
+f 302//40 301//40 303//40 304//40
+f 301//34 302//34 300//34 299//34
+f 297//36 298//36 304//36 303//36
+f 308//39 309//39 307//39 306//39
+f 311//40 310//40 314//40 312//40 313//40 315//40
+f 310//34 311//34 309//34 308//34
+f 306//36 307//36 313//36 312//36
+f 320//39 321//39 327//39 318//39 317//39 326//39
+f 323//40 322//40 324//40 325//40
+f 322//34 323//34 321//34 320//34
+f 317//36 318//36 319//36 325//36 324//36 316//36
+
+f 133//33 276//33 287//33 282//33 284//33
+f 135//43 133//40 193//40 192//40 190//40
+f 137//44 135//43 136//45 138//40
+f 139//46 197//46 195//46 201//46 137//46 138//46 140//46
+f 141//47 139//40 140//40 142//48
+f 143//49 141//47 142//48 176//50 175//51
+f 144//35 143//35 175//51 180//52
+f 145//53 265//53 263//53 269//53 180//52 181//54
+f 146//55 145//56 181//54 182//57
+f 147//35 256//35 254//35 260//35 146//55 182//57 166//58
+f 134//39 209//39 203//39 205//39 219//39 210//39 212//39 213//39 230//39 220//39 222//39 223//39 241//39 231//39 233//39 236//39 252//39 242//39 244//39 247//39 147//39 166//58 165//59 173//60 174//61
+f 148//35 273//35 271//35 277//35 168//62 172//63
+f 149//39 191//39 185//39 188//39 150//64 151//65 167//66 168//62
+f 150//64 152//39 153//39 151//65
+f 152//67 198//67 200//67 194//67 154//67 155//67 153//67
+f 154//39 156//68 157//69 155//39
+f 156//68 158//70 178//71 177//72 157//69
+f 158//33 159//33 179//73 178//71
+f 159//74 268//74 270//74 264//74 160//74 184//75 179//73
+f 160//76 161//77 183//78 184//75
+f 161//77 259//33 261//33 255//33 262//33 162//33 163//79 183//78
+f 162//40 206//40 204//40 211//40 218//40 216//40
+f 134//34 133//34 135//34 137//34 139//34 141//34 143//34 144//34 145//34 146//34 147//34
+f 162//36 161//36 160//36 159//36 158//36 156//36 154//36 152//36 150//36 149//36 148//36
+f 171//80 167//66 151//34 153//34 155//34 157//34 177//72 164//81
+f 177//72 176//50 165//59 166//58 163//79 164//81
+f 176//50 177//72 178//71 179//73 184//75 183//78 163//79 166//58 182//57 181//54 180//52 175//51
+f 168//62 170//82 174//61 173//60 171//80 172//63
+f 169//83 170//82 168//62 167//66 171//80 173//60
+f 165//59 176//50 142//36 140//36 138//36 136//36 169//83 173//60
+f 150//64 188//39 189//39 191//39 149//39
+f 187//40 186//40 193//40 133//40 170//82 169//83 136//45 135//43 190//40
+f 137//46 201//46 199//46 197//46 139//46
+f 154//67 194//67 196//67 198//67 152//67
+f 148//40 202//40 208//40 206//40 162//40
+f 147//39 247//39 246//39 250//39 252//39 236//39 235//39 239//39 241//39 223//39 225//39 227//39 230//39 213//39 215//39 217//39 219//39 205//39 207//39 209//39 134//39
+f 214//40 211//40 204//40 202//40 148//40 172//63 171//80 164//81 163//79 162//40 249//40 248//40 245//40 243//40 253//40 237//40 234//40 232//40 224//40 221//40 229//40
+f 229//40 228//40 226//40 162//40 216//40 214//40
+f 224//40 232//40 240//40 238//40 237//40 253//40 251//40 249//40 162//40 226//40
+f 162//33 262//33 257//33 259//33 161//77
+f 146//55 260//35 258//35 256//35 147//35
+f 160//74 264//74 266//74 268//74 159//74
+f 180//52 269//53 267//53 265//53 145//53 144//53
+f 174//61 272//33 274//33 276//33 133//33 134//33
+f 168//62 277//35 275//35 281//35 279//35 285//35
+f 285//35 283//35 296//35 288//35 294//35 168//62
+f 284//33 286//33 289//33 291//33 293//33 133//33
+f 168//62 294//35 292//35 305//35 297//35 303//35
+f 133//33 293//33 295//33 298//33 300//33 302//33
+f 304//33 307//33 309//33 311//33 315//33 327//33 321//33 323//33 325//33 319//33 170//82 133//33 302//33
+f 303//35 301//35 308//35 306//35 312//35 314//35 326//35 317//35 316//35 168//62
+f 168//62 316//35 324//35 322//35 320//35 326//35 314//35 310//35 308//35 301//35 299//35 305//35 292//35 290//35 296//35 283//35 281//35 275//35 273//35 148//35 149//35
+f 170//82 319//33 318//33 327//33 315//33 313//33 307//33 304//33 298//33 295//33 289//33 286//33 280//33 287//33 276//33 278//33 272//33 174//61
+
+o Chancel
+v 0.000000 8.000000 -1.000000
+v 0.000000 8.000000 0.000000
+v -0.153718 6.439278 -1.000000
+v -0.608964 4.938532 -1.000000
+v -0.608964 4.938532 0.000000
+v -1.348243 3.555438 -1.000000
+v -1.348243 3.555438 0.000000
+v -2.343146 2.343146 -1.000000
+v -2.343146 2.343146 0.000000
+v -3.555439 1.348243 -1.000000
+v -3.555439 1.348243 0.000000
+v -4.938533 0.608964 -1.000000
+v -4.938533 0.608964 0.000000
+v -6.439277 0.153718 -1.000000
+v -8.000000 0.000000 -1.000000
+v -8.000000 0.000000 0.000000
+v -9.560721 0.153718 -1.000000
+v -9.560721 0.153718 0.000000
+v -11.061466 0.608963 -1.000000
+v -11.061466 0.608963 0.000000
+v -12.444561 1.348243 -1.000000
+v -12.444561 1.348243 0.000000
+v -13.656855 2.343146 -1.000000
+v -13.656855 2.343146 0.000000
+v -14.651757 3.555439 -1.000000
+v -14.651757 3.555439 0.000000
+v -15.391037 4.938534 -1.000000
+v -15.391037 4.938534 0.000000
+v -15.846283 6.439280 -1.000000
+v -15.846283 6.439280 0.000000
+v -16.000000 8.000003 -1.000000
+v -16.000000 8.000003 0.000000
+v -15.846281 9.560726 -1.000000
+v -15.846281 9.560726 0.000000
+v -15.391035 11.061471 -1.000000
+v -15.391035 11.061471 0.000000
+v -14.651754 12.444566 -1.000000
+v -14.651754 12.444566 0.000000
+v -13.656851 13.656858 -1.000000
+v -13.656851 13.656858 0.000000
+v -12.444557 14.651760 -1.000000
+v -12.444557 14.651760 0.000000
+v -11.061461 15.391039 -1.000000
+v -11.061461 15.391039 0.000000
+v -9.560716 15.846283 -1.000000
+v -9.560716 15.846283 0.000000
+v -7.999992 16.000000 -1.000000
+v -7.999992 16.000000 0.000000
+v -6.439269 15.846281 -1.000000
+v -6.439269 15.846281 0.000000
+v -4.938524 15.391033 -1.000000
+v -4.938524 15.391033 0.000000
+v -3.555430 14.651752 -1.000000
+v -3.555430 14.651752 0.000000
+v -2.343139 13.656847 -1.000000
+v -2.343139 13.656847 0.000000
+v -1.348237 12.444553 -1.000000
+v -1.348237 12.444553 0.000000
+v -0.608959 11.061457 -1.000000
+v -0.608959 11.061457 0.000000
+v -0.153716 9.560711 -1.000000
+v -0.153716 9.560711 0.000000
+v -8.000000 2.000000 -0.000000
+v -8.000000 1.999999 -1.000000
+v -10.000000 5.000000 -0.000000
+v -10.000000 5.000000 -1.000000
+v -2.400001 10.000000 0.000000
+v -2.400001 10.000000 -1.000000
+v -10.000000 2.400000 -0.000000
+v -10.000000 2.400000 -1.000000
+v -5.000000 10.000000 -0.000000
+v -5.000000 10.000000 -1.000000
+v -8.392273 0.038635 -1.000000
+v -8.392273 0.038635 0.000000
+v -0.064971 8.659669 0.000000
+v -0.064971 8.659669 -1.000000
+v -2.000000 8.000000 -0.000000
+v -2.000000 8.000000 -1.000000
+v -0.102196 9.037617 0.000000
+v -0.102196 9.037617 -1.000000
+v -8.799217 0.078716 0.000000
+v -8.799217 0.078716 -1.000000
+v -7.750000 1.550159 -0.000000
+v -7.750000 0.024623 0.000000
+v -7.750000 0.024623 -1.000000
+v -7.750000 0.140924 -1.000000
+v -6.439277 0.153718 -0.990921
+v -6.569181 0.140924 -1.000000
+v -6.250000 1.550159 -0.000000
+v -6.250000 0.211134 -0.950178
+v -6.250000 0.211134 0.000000
+v -0.211135 6.250000 0.000000
+v -1.550159 6.250000 -0.000000
+v -0.211134 6.250000 -0.950178
+v -0.153718 6.439278 -0.990921
+v -0.140924 6.569181 -1.000000
+v -1.550159 7.750000 -0.000000
+v -0.140924 7.750000 -1.000000
+v -0.024623 7.750000 0.000000
+v -0.024623 7.750000 -1.000000
+vn 0.9952 -0.0980 0.0000
+vn 0.9569 -0.2903 0.0000
+vn 0.8819 -0.4714 0.0000
+vn 0.7730 -0.6344 0.0000
+vn 0.6344 -0.7730 0.0000
+vn 0.4714 -0.8819 0.0000
+vn 0.2903 -0.9569 -0.0000
+vn 0.0980 -0.9952 0.0000
+vn -0.0980 -0.9952 0.0000
+vn 0.0000 -0.0000 -1.0000
+vn 0.9952 0.0980 0.0000
+vn -1.0000 0.0000 0.0000
+vn -0.0000 -0.5787 0.8155
+vn 1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 -0.0000
+vn 0.5787 0.0000 0.8155
+vn -0.0000 0.0000 1.0000
+vn 0.0000 1.0000 0.0000
+vn -0.6253 -0.5126 -0.5884
+vn -0.6253 -0.5126 0.5884
+vn -0.7173 0.2971 0.6302
+vn -0.7173 0.2971 -0.6302
+vn -0.2971 0.7173 0.6302
+vn -0.2971 0.7173 -0.6302
+vn 0.4097 0.7116 -0.5708
+vn 0.4097 0.7116 0.5708
+vn 0.4462 0.6930 0.5662
+vn 0.4462 0.6930 -0.5662
+vn -0.6793 -0.4529 -0.5773
+vn -0.6793 -0.4529 0.5773
+vn 0.5126 0.6253 -0.5884
+vn 0.5126 0.6253 0.5884
+vn -0.6589 -0.4881 -0.5723
+vn -0.6589 -0.4881 0.5723
+
+f 328//84 329//84 426//84 427//84
+f 330//85 422//85 421//85 419//85 332//85 331//85
+f 331//86 332//86 334//86 333//86
+f 333//87 334//87 336//87 335//87
+f 335//88 336//88 338//88 337//88
+f 337//89 338//89 340//89 339//89
+f 339//90 340//90 418//90 417//90 414//90 341//90
+f 341//91 414//91 415//91
+f 342//92 343//92 401//92 400//92
+f 328//93 427//93 425//93 423//93 330//93 331//93 333//93 335//93 337//93 339//93 341//93 415//93 413//93 412//93 342//93 400//93 391//93 397//93 393//93 399//93 395//93 405//93 403//93
+f 403//94 402//94 329//94 328//94
+f 416//95 417//95 418//95
+f 417//96 416//96 410//96 413//96 415//96 414//96
+f 413//97 410//97 411//97 412//97
+f 412//91 411//91 343//91 342//91
+f 424//98 425//98 427//98 426//98
+f 425//99 424//99 420//99 421//99 422//99 423//99
+f 423//84 422//84 330//84
+f 419//100 420//100 424//100 426//100 329//100 402//100 404//100 394//100 398//100 392//100 396//100 390//100 401//100 343//100 411//100 410//100 416//100 418//100 340//100 338//100 336//100 334//100 332//100
+f 421//101 420//101 419//101
+
+f 397//102 396//103 392//104 393//105
+f 393//105 392//104 398//106 399//107
+f 405//108 404//109 402//110 403//111
+f 391//112 390//113 396//103 397//102
+f 395//114 394//115 404//109 405//108
+f 390//113 391//112 400//116 401//117
+f 399//107 398//106 394//115 395//114
+
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/coliseum.obj 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/coliseum.obj
--- 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/coliseum.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/coliseum.obj	2025-08-26 18:15:43.670003835 +0000
@@ -0,0 +1,17578 @@
+# Coliseum
+# (C) Linux Studio Plugins Project
+o Coliseum
+v 82.374229 -1.000001 29.739475
+v 82.383362 -0.000001 25.724554
+v 82.374229 -1.000001 25.724554
+v 82.383362 -0.000001 29.739475
+v 82.374229 0.999999 25.724554
+v 82.374229 0.999999 29.739475
+v 79.964790 -0.401509 29.739475
+v 79.957542 -1.000001 29.739475
+v 79.965813 -0.000001 29.739475
+v 64.004601 -1.000001 15.686283
+v 64.004601 -1.000001 17.595785
+v 64.445457 -1.000001 17.595785
+v 78.985733 -1.000001 25.736622
+v 79.957542 -1.000001 25.736622
+v 79.948410 -1.000001 25.724554
+v 79.957970 -0.000001 25.724554
+v 79.948410 0.999999 25.724554
+v 79.954964 0.999999 25.736622
+v 79.954964 0.999999 29.739475
+v 78.983101 0.999999 25.736622
+v 64.000900 0.999999 15.683977
+v 64.441788 0.999999 17.595785
+v 64.000885 0.999999 17.595785
+v 79.964790 -0.401509 32.582039
+v 78.742325 11.192636 25.736622
+v 78.487259 12.298221 32.582039
+v 75.727638 20.637951 25.736622
+v 74.286400 23.762178 32.582039
+v 71.350693 28.932697 29.723917
+v 71.350693 28.932697 25.736624
+v 64.483055 37.716869 25.736624
+v 70.244370 30.598848 25.736624
+v 70.244370 30.598848 29.723028
+v 68.229103 33.348446 32.582039
+v 61.106724 41.042332 32.582039
+v 58.178036 43.568798 25.736624
+v 51.546734 48.349045 29.718903
+v 51.546734 48.349045 25.736624
+v 50.762253 48.842773 32.582043
+v 49.845821 49.402679 29.719164
+v 38.511002 55.047115 32.582043
+v 49.845821 49.402679 25.736624
+v 30.591658 57.848106 25.736624
+v 30.591658 57.848106 29.726017
+v 21.555859 60.130001 32.582043
+v 28.671888 58.409340 25.736624
+v 28.671888 58.409340 29.726980
+v 15.082416 61.239292 25.736624
+v 1.000000 62.283123 29.739477
+v 1.000000 62.283123 25.736624
+v 1.982464 62.268902 32.582043
+v -1.000000 62.285275 29.739477
+v -15.091408 61.270271 25.736624
+v -1.000000 62.285275 25.736624
+v -14.422338 61.360184 32.582043
+v -28.688749 58.464714 29.739477
+v -28.688749 58.464714 25.736624
+v -28.953821 58.390255 32.582043
+v -30.609467 57.906597 29.739477
+v -43.102142 53.108765 32.582043
+v -30.609467 57.906597 25.736624
+v -49.892338 49.473202 25.736624
+v -49.892338 49.473202 29.739477
+v -56.659760 44.877636 32.582043
+v -60.376137 41.814751 25.736624
+v -51.593704 48.420258 25.736624
+v -51.593704 48.420258 29.739477
+v -67.842796 33.962769 32.582039
+v -65.546158 36.680145 25.736624
+v -70.303787 30.638414 29.739477
+v -70.303787 30.638414 25.736624
+v -71.407608 28.970598 29.739477
+v -75.779388 20.646854 25.736622
+v -71.407608 28.970598 25.736624
+v -75.201881 21.969065 32.582039
+v -78.773483 11.183832 25.736622
+v -79.227577 8.830652 32.582039
+v -79.957542 0.999999 29.739475
+v -79.957542 0.999999 25.736622
+v -78.742325 -11.192638 25.736622
+v -79.954964 -1.000001 25.736622
+v -79.954964 -1.000001 29.739475
+v -79.809990 -3.968591 32.582039
+v -77.714043 -15.145662 32.582039
+v -75.727638 -20.637955 25.736622
+v -73.571671 -25.143974 32.582039
+v -71.350693 -28.932701 29.723913
+v -71.350693 -28.932701 25.736620
+v -64.483055 -37.716869 25.736620
+v -70.244370 -30.598852 25.736620
+v -70.244370 -30.598852 29.723024
+v -68.033501 -33.598423 32.582039
+v -61.658138 -40.531960 32.582039
+v -58.178036 -43.568798 25.736620
+v -51.546734 -48.349045 29.718899
+v -51.546734 -48.349045 25.736620
+v -52.446781 -47.765553 32.582035
+v -49.845821 -49.402679 29.719160
+v -41.547756 -53.743702 32.582035
+v -49.845821 -49.402679 25.736620
+v -30.591658 -57.848106 25.736620
+v -30.591658 -57.848106 29.726013
+v -26.469210 -59.001091 32.582035
+v -28.671888 -58.409340 25.736620
+v -28.671888 -58.409340 29.726976
+v -15.213863 -61.220856 25.736620
+v -9.019151 -61.912159 32.582035
+v -1.000000 -62.283123 25.736620
+v -1.000000 -62.283123 29.739473
+v 7.405601 -62.049629 32.582035
+v 1.000000 -62.285275 25.736620
+v 1.000000 -62.285275 29.739473
+v 15.248192 -61.248581 25.736620
+v 28.688749 -58.464714 29.739473
+v 28.688749 -58.464714 25.736620
+v 27.576012 -58.768497 32.582035
+v 30.609467 -57.906597 29.739473
+v 43.341114 -52.994713 32.582035
+v 30.609467 -57.906597 25.736620
+v 49.892338 -49.473202 25.736620
+v 49.892338 -49.473202 29.739473
+v 51.593704 -48.420258 29.739473
+v 58.358475 -43.532707 32.582039
+v 60.376137 -41.814751 25.736620
+v 51.593704 -48.420258 25.736620
+v 65.546158 -36.680145 25.736620
+v 70.303787 -30.638418 29.739473
+v 70.303787 -30.638418 25.736620
+v 68.874962 -32.627438 32.582039
+v 71.407608 -28.970602 29.739473
+v 75.779388 -20.646858 25.736622
+v 71.407608 -28.970602 25.736620
+v 75.848709 -20.481495 32.582039
+v 78.773483 -11.183834 25.736622
+v 78.854210 -10.804428 32.582039
+v 74.887146 -20.262028 25.736622
+v 70.598671 -28.431976 25.736620
+v 77.822960 -10.982240 25.736622
+v 64.840141 -16.791273 19.799999
+v 61.536156 -14.509326 17.595785
+v 58.495178 -20.372959 17.595785
+v 65.603142 -14.942526 19.799999
+v 63.601284 -7.970113 17.595785
+v 70.115913 -18.988890 23.000000
+v 70.879631 -17.140442 23.000000
+v 58.128204 -20.128613 17.595785
+v 61.131332 -14.335052 17.595785
+v 63.170067 -7.879021 17.595785
+v -1.000000 -46.332970 15.684329
+v -24.025030 -43.147472 15.683993
+v -24.025030 -43.147472 17.595783
+v -1.000000 -46.332970 17.595783
+v 22.762934 -43.542110 15.683993
+v 1.000000 -46.335480 15.685910
+v 1.000000 -46.335480 17.595783
+v 24.041683 -43.202168 17.595783
+v 24.041683 -43.202168 15.703124
+v 35.788834 -38.923447 15.683993
+v 25.963871 -42.648880 15.704364
+v 25.963871 -42.648880 17.595783
+v 41.100574 -36.144379 17.595783
+v 41.100574 -36.144379 15.711573
+v 47.668396 -31.664364 15.683994
+v 42.810513 -35.104427 15.711974
+v 42.810513 -35.104427 17.595783
+v 49.617649 -30.037235 17.595783
+v 53.513515 -26.207851 17.595783
+v 55.580910 -23.755255 15.683994
+v 57.026207 -21.797644 17.595785
+v 57.026207 -21.797644 15.707766
+v 60.729580 -15.263779 15.683994
+v 58.128204 -20.128613 15.706448
+v 63.133755 -8.043282 15.683995
+v 64.015945 -0.279105 15.685441
+v 64.015945 -0.279105 15.683995
+v -0.662511 -46.336334 15.683993
+v 64.016495 -0.000001 15.685115
+v 63.140995 7.876788 15.683995
+v 63.140995 7.876788 17.595785
+v 61.083679 14.317352 15.683996
+v 61.083679 14.317353 17.595785
+v 58.071842 20.091084 15.683996
+v 58.071842 20.091084 17.595785
+v 63.572159 7.968172 17.595785
+v 61.488392 14.491858 17.595785
+v 58.438789 20.335413 17.595785
+v 65.559143 14.924196 19.799999
+v 64.791237 16.770905 19.799999
+v 77.791946 10.990335 25.736622
+v 70.835320 17.121979 23.000000
+v 70.067268 18.968626 23.000000
+v 74.835655 20.252550 25.736622
+v 70.541771 28.394087 25.736624
+v 55.284401 18.235088 15.683996
+v 46.884941 12.642374 9.179747
+v 46.884941 12.642374 9.967792
+v 58.090046 20.103207 15.677586
+v 71.372620 28.947300 25.724556
+v 71.372620 28.947300 29.739477
+v 73.391800 30.291756 29.739477
+v 73.391800 30.291756 25.724556
+v 70.267548 30.614283 29.739477
+v 72.286591 31.958647 25.724556
+v 72.286591 31.958647 29.739477
+v 70.267548 30.614283 25.724556
+v 69.435486 30.060263 25.736624
+v 56.986320 21.771084 15.677586
+v 57.333290 22.002111 17.595787
+v 56.966381 21.757809 15.683996
+v 56.966381 21.757809 17.595785
+v 54.179218 19.901999 15.683996
+v 45.783604 14.311845 9.179747
+v 45.783604 14.311845 9.969533
+v 63.765499 37.061539 25.736624
+v 57.553310 42.824448 25.736624
+v 51.011665 47.537853 25.736624
+v 40.920010 32.238316 15.683996
+v 35.370396 23.824778 9.179747
+v 35.370396 23.824778 9.973003
+v 42.780453 35.058853 15.677587
+v 42.763599 35.033306 15.683997
+v 42.763599 35.033306 17.595787
+v 43.006294 35.401245 17.595787
+v 51.565914 48.378124 25.724556
+v 51.565914 48.378124 29.739477
+v 52.901516 50.402973 25.724556
+v 52.901516 50.402973 29.739477
+v 49.864773 49.431408 29.739477
+v 51.201363 51.457760 25.724556
+v 51.201363 51.457760 29.739477
+v 49.864773 49.431408 25.724556
+v 49.310341 48.590862 25.736624
+v 41.070816 36.099262 15.677587
+v 41.297276 36.442589 17.595787
+v 41.054279 36.074196 17.595787
+v 41.054279 36.074196 15.683997
+v 39.208340 33.275642 15.683997
+v 33.649197 24.847656 9.179747
+v 33.649197 24.847656 9.972508
+v 30.308641 56.918587 25.736624
+v 24.971016 39.388004 15.683997
+v 22.032545 29.737062 9.179747
+v 22.032545 29.737062 9.966209
+v 25.946077 42.590435 15.683997
+v 25.946077 42.590435 17.595787
+v 26.074444 43.012035 17.595787
+v 25.951485 42.608196 15.677587
+v 30.598295 57.869907 25.724556
+v 30.598295 57.869907 29.739477
+v 31.304747 60.190136 25.724556
+v 31.304747 60.190136 29.739477
+v 28.678051 58.429585 29.739477
+v 28.678051 58.429585 25.724556
+v 29.384674 60.750374 25.724556
+v 29.384674 60.750374 29.739477
+v 28.388805 57.479603 25.736624
+v 24.029867 43.163357 15.677587
+v 24.153439 43.569210 17.595787
+v 24.025030 43.147472 15.683997
+v 24.025030 43.147472 17.595787
+v 23.049635 39.943943 15.683997
+v 20.109266 30.286772 9.179747
+v 20.109266 30.286772 9.964865
+v 1.000000 61.311420 25.736624
+v 1.000000 46.332970 15.684333
+v 1.000000 46.332970 17.595787
+v 1.000000 46.773708 17.595787
+v 1.000000 64.701927 29.739477
+v 1.000000 62.276440 25.724556
+v 1.000000 64.701927 25.724556
+v -1.000000 64.701927 29.739477
+v -1.000000 64.701927 25.724556
+v -1.000000 62.276440 25.724556
+v -1.000000 61.313591 25.736624
+v -1.000000 46.335480 15.685914
+v -1.000000 46.776207 17.595787
+v -1.000000 46.335480 17.595787
+v -14.948990 60.309059 25.736624
+v -28.405657 57.534943 25.736624
+v -29.384674 60.750374 25.724556
+v -29.384674 60.750374 29.739477
+v -28.678051 58.429585 25.724556
+v -24.041683 43.202168 15.703128
+v -24.170099 43.623928 17.595787
+v -24.041683 43.202168 17.595787
+v -31.304747 60.190136 29.739477
+v -25.963871 42.648880 17.595787
+v -25.963871 42.648880 15.704368
+v -26.092237 43.070480 17.595787
+v -30.326448 56.977074 25.736624
+v -30.598295 57.869907 25.724556
+v -31.304747 60.190136 25.724556
+v -49.356850 48.661369 25.736624
+v -51.201363 51.457760 25.724556
+v -51.201363 51.457760 29.739477
+v -49.864773 49.431408 25.724556
+v -41.100574 36.144379 15.711576
+v -41.343575 36.512783 17.595787
+v -41.100574 36.144379 17.595787
+v -52.901516 50.402973 29.739477
+v -42.810513 35.104427 17.595787
+v -42.810513 35.104427 15.711978
+v -43.053204 35.472363 17.595787
+v -51.058636 47.609058 25.736624
+v -51.565914 48.378124 25.724556
+v -52.901516 50.402973 25.724556
+v -59.720680 41.097324 25.736624
+v -64.813087 36.042236 25.736624
+v -69.494926 30.099840 25.736624
+v -72.286591 31.958647 25.724556
+v -72.286591 31.958647 29.739477
+v -70.267548 30.614283 25.724556
+v -57.026207 21.797644 15.707767
+v -57.393101 22.041937 17.595787
+v -57.026207 21.797644 17.595785
+v -73.391800 30.291756 29.739477
+v -58.128204 20.128613 17.595785
+v -58.128204 20.128613 15.706450
+v -58.495178 20.372959 17.595785
+v -70.598671 28.431973 25.736624
+v -71.372620 28.947300 25.724556
+v -73.391800 30.291756 25.724556
+v -74.887146 20.262024 25.736622
+v -77.822960 10.982238 25.736622
+v -78.985733 0.999999 25.736622
+v -82.374229 0.999999 25.724554
+v -82.374229 0.999999 29.739475
+v -79.948410 0.999999 25.724554
+v -64.004601 0.999999 15.686283
+v -64.445457 0.999999 17.595785
+v -64.004601 0.999999 17.595785
+v -82.374229 -1.000001 29.739475
+v -64.000885 -1.000001 17.595785
+v -64.000900 -1.000001 15.683977
+v -64.441788 -1.000001 17.595785
+v -78.983101 -1.000001 25.736622
+v -79.948410 -1.000001 25.724554
+v -82.374229 -1.000001 25.724554
+v -77.791946 -10.990336 25.736622
+v -74.835655 -20.252554 25.736622
+v -70.541771 -28.394091 25.736620
+v -55.284401 -18.235088 15.683994
+v -46.884941 -12.642374 9.179745
+v -46.884941 -12.642374 9.967790
+v -58.071842 -20.091084 15.683994
+v -58.071842 -20.091084 17.595785
+v -58.438789 -20.335413 17.595785
+v -58.090046 -20.103207 15.677584
+v -71.372620 -28.947304 25.724552
+v -71.372620 -28.947304 29.739473
+v -73.391800 -30.291759 29.739473
+v -73.391800 -30.291759 25.724552
+v -70.267548 -30.614286 29.739473
+v -70.267548 -30.614286 25.724552
+v -72.286591 -31.958651 25.724552
+v -72.286591 -31.958651 29.739473
+v -69.435486 -30.060266 25.736620
+v -56.986320 -21.771084 15.677584
+v -57.333290 -22.002111 17.595783
+v -56.966381 -21.757809 15.683994
+v -56.966381 -21.757809 17.595785
+v -54.179218 -19.901999 15.683994
+v -45.783604 -14.311845 9.179745
+v -45.783604 -14.311845 9.969531
+v -63.765499 -37.061539 25.736620
+v -57.553310 -42.824448 25.736620
+v -51.011665 -47.537853 25.736620
+v -40.920010 -32.238316 15.683994
+v -35.370396 -23.824778 9.179745
+v -35.370396 -23.824778 9.973001
+v -42.780453 -35.058853 15.677583
+v -42.763599 -35.033306 15.683993
+v -42.763599 -35.033306 17.595783
+v -43.006294 -35.401245 17.595783
+v -51.565914 -48.378124 25.724552
+v -51.565914 -48.378124 29.739473
+v -52.901516 -50.402973 25.724552
+v -52.901516 -50.402973 29.739473
+v -49.864773 -49.431408 29.739473
+v -51.201363 -51.457760 25.724552
+v -51.201363 -51.457760 29.739473
+v -49.864773 -49.431408 25.724552
+v -49.310341 -48.590862 25.736620
+v -41.070816 -36.099262 15.677583
+v -41.297276 -36.442589 17.595783
+v -41.054279 -36.074196 17.595783
+v -41.054279 -36.074196 15.683993
+v -39.208340 -33.275642 15.683993
+v -33.649197 -24.847656 9.179745
+v -33.649197 -24.847656 9.972507
+v -30.308641 -56.918587 25.736620
+v -24.971016 -39.388004 15.683993
+v -22.032545 -29.737062 9.179745
+v -22.032545 -29.737062 9.966208
+v -25.946077 -42.590435 15.683993
+v -25.946077 -42.590435 17.595783
+v -26.074444 -43.012035 17.595783
+v -25.951485 -42.608196 15.677583
+v -30.598295 -57.869907 25.724552
+v -30.598295 -57.869907 29.739473
+v -31.304747 -60.190136 29.739473
+v -31.304747 -60.190136 25.724552
+v -28.678051 -58.429585 29.739473
+v -28.678051 -58.429585 25.724552
+v -29.384674 -60.750374 25.724552
+v -29.384674 -60.750374 29.739473
+v -28.388805 -57.479603 25.736620
+v -24.029867 -43.163357 15.677583
+v -24.153439 -43.569210 17.595783
+v -23.049635 -39.943943 15.683993
+v -20.109266 -30.286772 9.179745
+v -20.109266 -30.286772 9.964863
+v -1.000000 -61.311420 25.736620
+v -1.000000 -64.701927 25.724552
+v -1.000000 -64.701927 29.739473
+v -1.000000 -62.276440 25.724552
+v -1.000000 -46.773708 17.595783
+v 1.000000 -64.701927 29.739473
+v 1.000000 -46.776207 17.595783
+v 1.000000 -61.313591 25.736620
+v 1.000000 -62.276440 25.724552
+v 1.000000 -64.701927 25.724552
+v 15.107149 -60.287189 25.736620
+v 28.405657 -57.534943 25.736620
+v 29.384674 -60.750374 25.724552
+v 29.384674 -60.750374 29.739473
+v 28.678051 -58.429585 25.724552
+v 24.170099 -43.623928 17.595783
+v 31.304747 -60.190136 29.739473
+v 26.092237 -43.070480 17.595783
+v 30.326448 -56.977074 25.736620
+v 30.598295 -57.869907 25.724552
+v 31.304747 -60.190136 25.724552
+v 49.356850 -48.661369 25.736620
+v 51.201363 -51.457760 25.724552
+v 51.201363 -51.457760 29.739473
+v 49.864773 -49.431408 25.724552
+v 41.343575 -36.512783 17.595783
+v 52.901516 -50.402973 29.739473
+v 43.053204 -35.472363 17.595783
+v 51.058636 -47.609058 25.736620
+v 51.565914 -48.378124 25.724552
+v 52.901516 -50.402973 25.724552
+v 59.720680 -41.097324 25.736620
+v 64.813087 -36.042236 25.736620
+v 69.494926 -30.099844 25.736620
+v 72.286591 -31.958651 25.724552
+v 72.286591 -31.958651 29.739473
+v 70.267548 -30.614286 25.724552
+v 57.393101 -22.041937 17.595783
+v 73.391800 -30.291759 29.739473
+v 71.372620 -28.947304 25.724552
+v 73.391800 -30.291759 25.724552
+v 78.999191 12.357826 32.582039
+v 80.476402 -0.405435 32.582039
+v 74.796082 23.886509 32.582039
+v 68.731689 33.535332 32.582039
+v 61.598881 41.285088 32.582039
+v 51.241322 49.147095 32.582043
+v 38.982700 55.406998 32.582043
+v 22.030628 60.554649 32.582043
+v 2.466806 62.770454 32.582043
+v -14.017264 61.928276 32.582043
+v -33.334686 57.578072 32.582043
+v -48.977470 50.605335 32.582043
+v -62.354191 40.694855 32.582039
+v -71.898109 29.152704 32.582039
+v -77.676933 17.077860 32.582039
+v -80.289703 4.518545 32.582039
+v -79.778465 -8.503142 32.582039
+v -76.292152 -20.615774 32.582039
+v -70.634094 -30.934900 32.582039
+v -63.682091 -39.280312 32.582039
+v -56.033443 -45.882370 32.582035
+v -45.261665 -52.527096 32.582035
+v -32.672810 -57.728386 32.582035
+v -15.371929 -61.715229 32.582035
+v 1.099217 -62.796089 32.582035
+v 20.863731 -60.834099 32.582035
+v 42.482929 -53.963871 32.582035
+v 57.671482 -44.739731 32.582035
+v 69.022781 -33.280212 32.582039
+v 75.879036 -21.707813 32.582039
+v 79.231567 -11.484066 32.582039
+v 77.077438 -19.722128 23.000000
+v 76.311165 -21.569515 23.000000
+v 71.801460 -17.524426 19.799999
+v 71.035507 -19.371946 19.799999
+v 49.914875 -30.362774 17.595783
+v 53.845966 -26.497295 17.595783
+v -1.000000 -46.332436 15.683993
+v -1.000000 -42.985149 15.683993
+v 23.066235 -39.998459 15.683993
+v 1.000000 -42.987751 15.683993
+v 1.000000 -46.332436 15.683993
+v 24.032831 -43.173100 15.683993
+v 24.988806 -39.446434 15.683993
+v 25.954449 -42.617935 15.683993
+v 39.254566 -33.345722 15.683993
+v 41.076427 -36.107769 15.683993
+v 47.359585 -27.564960 15.683994
+v 40.966904 -32.309410 15.683994
+v 42.786045 -35.067333 15.683993
+v 50.987991 -24.009480 15.683994
+v 54.239170 -19.941916 15.683994
+v 56.994781 -21.776718 15.683994
+v 58.055904 -13.012317 15.683994
+v 55.340588 -18.272499 15.683994
+v 58.098518 -20.108847 15.683994
+v 59.894676 -7.187027 15.683995
+v 64.000969 -1.000001 15.683995
+v 60.655788 -1.000001 15.683995
+v 64.013649 -0.279087 15.683995
+v 59.865952 7.182704 15.683995
+v 60.651699 0.999999 15.683995
+v 58.009041 12.993005 15.683996
+v 76.311165 21.569511 23.000000
+v 77.077438 19.722124 23.000000
+v 71.035507 19.371946 19.799999
+v 71.801460 17.524426 19.799999
+v 50.550041 0.000000 9.948984
+v 47.442719 -0.151908 8.187897
+v 50.549366 -0.175751 9.948690
+v 50.528202 1.000000 9.950654
+v 47.324127 2.099144 8.187897
+v 46.929474 7.164032 8.630000
+v 45.275734 6.945769 7.708742
+v 46.473400 2.099144 7.708741
+v 46.162800 9.011250 8.630000
+v 42.940704 11.410934 7.708742
+v 52.911724 9.655929 12.300000
+v 52.144428 11.502889 12.300001
+v 39.662056 15.387015 7.708742
+v 38.975094 18.249390 8.630001
+v 35.599216 18.855045 7.708742
+v 37.423893 19.517763 8.630001
+v 43.374645 23.004610 12.300001
+v 41.836136 24.286695 12.300001
+v 50.231861 24.701380 15.683996
+v 29.164558 22.697313 7.708742
+v 28.334963 24.880903 8.630001
+v 45.770397 28.785690 15.683996
+v 26.494911 25.666452 8.630001
+v 20.804350 25.947315 7.708742
+v 31.036251 30.766054 12.300001
+v 29.198563 31.556749 12.300001
+v 13.758842 27.655338 7.708743
+v 6.374107 28.648712 7.708743
+v 9.208792 29.993793 8.630001
+v 7.219922 30.205467 8.630001
+v 6.374107 29.497082 8.187898
+v 9.959172 36.425472 12.300002
+v 1.000000 32.866898 9.949746
+v 7.970483 36.638699 12.300002
+v -7.222428 30.226952 8.630001
+v -6.374107 28.668283 7.708743
+v -6.374107 29.516443 8.187898
+v -1.000000 32.866898 9.948089
+v -9.211977 30.021097 8.630001
+v 1.000000 42.985149 15.683997
+v -7.973040 36.660610 12.300002
+v -1.000000 42.987751 15.683997
+v -9.962355 36.452751 12.300002
+v -20.109266 30.286772 9.932963
+v -23.357828 25.185738 7.708742
+v -22.032545 29.737062 9.931618
+v -26.525383 25.732840 8.630001
+v -28.366938 24.950567 8.630001
+v -31.042089 21.821156 7.708742
+v -23.066235 39.998459 15.683997
+v -29.229242 31.623592 12.300001
+v -24.988806 39.446434 15.683997
+v -33.649197 24.847656 9.925321
+v -31.068266 30.835802 12.300001
+v -35.370396 23.824778 9.924828
+v -37.482746 19.581373 8.630001
+v -37.566841 17.426657 7.708742
+v -39.033222 18.312220 8.630001
+v -39.254566 33.345722 15.683997
+v -41.894859 24.350168 12.300001
+v -42.521404 12.141399 7.708742
+v -40.966904 32.309410 15.683996
+v -45.783604 14.311845 9.928354
+v -43.432686 23.067341 12.300001
+v -46.884941 12.642374 9.930110
+v -46.213615 9.032418 8.630000
+v -45.247829 7.149982 7.708742
+v -47.359585 27.564960 15.683996
+v -46.971027 7.181341 8.630000
+v -46.035576 4.663168 7.708741
+v -50.987991 24.009480 15.683996
+v -52.194347 11.523685 12.300001
+v -47.338470 2.099144 8.187897
+v -46.488384 2.099144 7.708741
+v -54.239170 19.941916 15.683996
+v -50.528202 1.000000 9.947313
+v -52.954441 9.673723 12.300000
+v -47.324127 -2.099144 8.187897
+v -50.528202 -1.000000 9.950654
+v -58.055904 13.012315 15.683996
+v -55.340588 18.272499 15.683996
+v -59.894676 7.187027 15.683995
+v -46.929474 -7.164032 8.630000
+v -45.275734 -6.945770 7.708741
+v -46.473400 -2.099144 7.708741
+v -46.162800 -9.011250 8.630000
+v -60.655788 0.999999 15.683995
+v -42.940704 -11.410934 7.708741
+v -52.911724 -9.655931 12.300000
+v -52.144428 -11.502891 12.299999
+v -59.865952 -7.182705 15.683995
+v -60.651699 -1.000001 15.683995
+v -39.662056 -15.387015 7.708741
+v -58.009041 -12.993007 15.683994
+v -38.975094 -18.249390 8.629999
+v -35.599216 -18.855045 7.708740
+v -37.423893 -19.517763 8.629999
+v -43.374645 -23.004610 12.299999
+v -41.836136 -24.286695 12.299999
+v -50.231861 -24.701380 15.683994
+v -29.164558 -22.697313 7.708740
+v -28.334963 -24.880903 8.629999
+v -45.770397 -28.785690 15.683994
+v -26.494911 -25.666452 8.629999
+v -20.804350 -25.947315 7.708740
+v -31.036251 -30.766054 12.299999
+v -29.198563 -31.556749 12.299999
+v -13.758842 -27.655338 7.708740
+v -6.374107 -28.648712 7.708740
+v -9.208792 -29.993793 8.629999
+v -7.219922 -30.205467 8.629999
+v -6.374107 -29.497082 8.187896
+v -9.959172 -36.425472 12.299998
+v -1.000000 -32.866898 9.949742
+v -7.970483 -36.638699 12.299998
+v 7.222428 -30.226952 8.629999
+v 6.374107 -28.668283 7.708740
+v 6.374107 -29.516443 8.187896
+v 1.000000 -32.866898 9.948085
+v 9.211977 -30.021097 8.629999
+v 7.973040 -36.660610 12.299998
+v 9.962355 -36.452751 12.299998
+v 20.109266 -30.286772 9.932961
+v 23.357828 -25.185738 7.708740
+v 22.032545 -29.737062 9.931616
+v 26.525383 -25.732840 8.629999
+v 28.366938 -24.950567 8.629999
+v 31.042089 -21.821156 7.708740
+v 29.229242 -31.623592 12.299999
+v 33.649197 -24.847656 9.925319
+v 31.068266 -30.835802 12.299999
+v 35.370396 -23.824778 9.924826
+v 37.482746 -19.581373 8.629999
+v 37.566841 -17.426657 7.708740
+v 39.033222 -18.312220 8.629999
+v 41.894859 -24.350168 12.299999
+v 42.521404 -12.141399 7.708741
+v 45.783604 -14.311845 9.928352
+v 43.432686 -23.067341 12.299999
+v 46.884941 -12.642374 9.930108
+v 46.213615 -9.032418 8.630000
+v 45.247829 -7.149983 7.708741
+v 46.971027 -7.181342 8.630000
+v 46.035576 -4.663169 7.708741
+v 52.194347 -11.523686 12.299999
+v 47.338470 -2.099144 8.187897
+v 46.488384 -2.099144 7.708741
+v 50.528202 -1.000000 9.947313
+v 52.954441 -9.673725 12.300000
+v 52.704353 26.959343 15.683996
+v 47.923073 31.350286 15.683996
+v 52.704353 26.959343 17.595787
+v 47.923073 31.350286 17.595787
+v 53.029804 27.256676 17.595787
+v 48.206440 31.687916 17.595787
+v 52.677967 33.060020 19.800001
+v 51.156792 34.360844 19.800001
+v 56.559361 37.255188 23.000002
+v 55.043163 38.561394 23.000002
+v 34.915302 44.011501 19.800001
+v 36.749325 43.212811 19.800001
+v 39.133057 48.406124 23.000002
+v 37.300201 49.207352 23.000002
+v 1.000000 46.332436 15.683997
+v -23.208813 43.426075 15.683997
+v -1.000000 46.332436 15.683997
+v -24.032831 43.173100 15.683997
+v -25.954449 42.617935 15.683997
+v -36.203659 38.728451 15.683997
+v -41.076427 36.107769 15.683997
+v -48.036201 31.369669 15.683996
+v -42.786045 35.067333 15.683997
+v -55.955837 23.269285 15.683996
+v -56.994781 21.776718 15.683996
+v -58.098518 20.108847 15.683996
+v -61.031708 14.571653 15.683996
+v -63.343071 7.041553 15.683995
+v -64.000969 0.999999 15.683995
+v 0.429030 46.337963 15.683997
+v -49.617649 30.037235 17.595787
+v -53.513515 26.207851 17.595787
+v -61.131332 14.335051 17.595785
+v -63.170067 7.879019 17.595785
+v 11.546195 50.028210 19.800001
+v 9.557811 50.244038 19.800001
+v 12.208372 55.703873 23.000002
+v 10.220090 55.920589 23.000002
+v -11.549373 50.055447 19.800001
+v -9.560451 50.266670 19.800001
+v -10.222758 55.943462 23.000002
+v -12.211548 55.731098 23.000002
+v -34.946301 44.079037 19.800001
+v -36.781395 43.282684 19.800001
+v -37.331303 49.275105 23.000002
+v -39.165150 48.476036 23.000002
+v -51.215298 34.424080 19.800001
+v -49.914875 30.362774 17.595787
+v -52.735878 33.122612 19.800001
+v -53.845966 26.497295 17.595787
+v -55.101597 38.624554 23.000002
+v -56.617233 37.317741 23.000002
+v -64.840141 16.791273 19.799999
+v -61.536156 14.509324 17.595785
+v -65.603142 14.942524 19.799999
+v -63.601284 7.970111 17.595785
+v -70.115913 18.988886 23.000000
+v -70.879631 17.140438 23.000000
+v -65.559143 -14.924198 19.799999
+v -61.488392 -14.491860 17.595785
+v -63.572159 -7.968174 17.595785
+v -64.791237 -16.770905 19.799999
+v -70.835320 -17.121983 23.000000
+v -70.067268 -18.968630 23.000000
+v -63.140995 -7.876790 17.595785
+v -61.083679 -14.317355 17.595785
+v -63.140995 -7.876789 15.683995
+v -61.083679 -14.317354 15.683994
+v -52.704353 -26.959343 15.683994
+v -47.923073 -31.350286 15.683994
+v -52.704353 -26.959343 17.595783
+v -47.923073 -31.350286 17.595783
+v -53.029804 -27.256676 17.595783
+v -48.206440 -31.687916 17.595783
+v -52.677967 -33.060020 19.799997
+v -51.156792 -34.360844 19.799997
+v -56.559361 -37.255188 22.999998
+v -55.043163 -38.561394 22.999998
+v -34.915302 -44.011501 19.799997
+v -36.749325 -43.212811 19.799997
+v -39.133057 -48.406124 22.999998
+v -37.300201 -49.207352 22.999998
+v -11.546195 -50.028210 19.799997
+v -9.557811 -50.244038 19.799997
+v -12.208372 -55.703873 22.999998
+v -10.220090 -55.920589 22.999998
+v 11.549373 -50.055447 19.799997
+v 9.560451 -50.266670 19.799997
+v 10.222758 -55.943462 22.999998
+v 12.211548 -55.731098 22.999998
+v 34.946301 -44.079037 19.799997
+v 36.781395 -43.282684 19.799997
+v 37.331303 -49.275105 22.999998
+v 39.165150 -48.476036 22.999998
+v 51.215298 -34.424080 19.799997
+v 52.735878 -33.122612 19.799997
+v 55.101597 -38.624554 22.999998
+v 56.617233 -37.317741 22.999998
+v 78.999191 12.357826 31.659950
+v 80.476402 -0.405435 31.659950
+v 74.796082 23.886509 31.659952
+v 68.731689 33.535332 31.659952
+v 61.598881 41.285088 31.659952
+v 51.241322 49.147095 31.659952
+v 38.982700 55.406998 31.659952
+v 22.030628 60.554649 31.659952
+v 2.466806 62.770454 31.659952
+v -14.017264 61.928276 31.659952
+v -33.334686 57.578072 31.659952
+v -48.977470 50.605335 31.659952
+v -62.354191 40.694855 31.659952
+v -71.898109 29.152704 31.659952
+v -77.676933 17.077860 31.659950
+v -80.289703 4.518545 31.659950
+v -79.778465 -8.503142 31.659950
+v -76.292152 -20.615774 31.659950
+v -70.634094 -30.934900 31.659948
+v -63.682091 -39.280312 31.659948
+v -56.033443 -45.882370 31.659948
+v -45.261665 -52.527096 31.659948
+v -32.672810 -57.728386 31.659948
+v -15.371929 -61.715229 31.659948
+v 1.099217 -62.796089 31.659948
+v 20.863731 -60.834099 31.659948
+v 42.482929 -53.963871 31.659948
+v 57.671482 -44.739731 31.659948
+v 69.022781 -33.280212 31.659948
+v 75.879036 -21.707813 31.659950
+v 79.231567 -11.484066 31.659950
+v 64.014717 -0.000001 15.683995
+v 50.528202 -1.000000 9.179746
+v 63.990784 -1.000001 15.677585
+v 64.004539 -0.000001 15.677585
+v -1.000000 -46.322258 15.677583
+v -1.000000 -32.866898 9.179744
+v 1.000000 -46.322258 15.677583
+v 1.000000 -32.866898 9.179744
+v 24.029867 -43.163357 15.677583
+v 20.109266 -30.286772 9.179745
+v 25.951485 -42.608196 15.677583
+v 22.032545 -29.737062 9.179745
+v 41.070816 -36.099262 15.677583
+v 33.649197 -24.847656 9.179745
+v 42.780453 -35.058853 15.677583
+v 35.370396 -23.824778 9.179745
+v 56.986320 -21.771084 15.677584
+v 45.783604 -14.311845 9.179745
+v 58.090046 -20.103207 15.677584
+v 46.884941 -12.642374 9.179745
+v 63.990784 0.999999 15.677585
+v 50.528202 1.000000 9.179746
+v 45.275734 6.945769 7.103746
+v 46.473400 2.099144 7.103746
+v 42.940704 11.410934 7.103746
+v 39.662056 15.387015 7.103746
+v 35.599216 18.855045 7.103747
+v 29.164558 22.697313 7.103747
+v 20.804350 25.947315 7.103747
+v 13.758842 27.655338 7.103747
+v 6.374107 28.648712 7.103747
+v 6.374107 36.212177 8.187899
+v 6.374107 31.083874 5.290061
+v 6.374107 27.514692 5.786510
+v 6.374107 27.514692 7.103747
+v 6.374107 31.083874 1.000001
+v 6.374107 22.718256 6.630103
+v 6.374107 22.718237 5.786509
+v 6.374107 22.142164 6.384269
+v 6.374107 24.506704 1.000001
+v 6.374107 21.906952 1.000001
+v -6.374107 36.212177 8.187899
+v -6.374107 31.083874 5.290061
+v -6.374107 28.668283 7.103747
+v -6.374107 27.534555 5.786510
+v -6.374107 27.534555 7.103747
+v -6.374107 31.083874 1.000001
+v -6.374107 22.739426 5.786509
+v -6.374107 22.739445 6.630103
+v -6.374107 22.163525 6.384269
+v -6.374107 24.444582 1.000001
+v -6.374107 21.928383 1.000001
+v -23.357828 25.185738 7.103747
+v -31.042089 21.821156 7.103747
+v -37.566841 17.426657 7.103747
+v -42.521404 12.141399 7.103746
+v -45.247829 7.149982 7.103746
+v -46.035576 4.663168 7.103746
+v -46.488384 2.099144 7.103746
+v -54.044556 2.099144 8.187897
+v -48.911640 2.099144 5.290060
+v -45.351452 2.099144 5.786508
+v -45.351452 2.099144 7.103746
+v -48.911640 2.099144 1.000000
+v -40.531025 2.099144 6.630102
+v -40.531021 2.099144 5.786508
+v -39.950077 2.099144 6.384268
+v -42.427719 2.099144 1.000000
+v -39.712696 2.099144 1.000000
+v -54.044556 -2.099144 8.187897
+v -48.911640 -2.099144 5.290060
+v -46.473400 -2.099144 7.103746
+v -45.335510 -2.099144 5.786508
+v -45.335510 -2.099144 7.103746
+v -48.911640 -2.099144 1.000000
+v -40.509274 -2.099144 5.786508
+v -40.509281 -2.099144 6.630102
+v -39.927341 -2.099144 6.384268
+v -42.488342 -2.099144 1.000000
+v -39.689533 -2.099144 1.000000
+v -45.275734 -6.945770 7.103745
+v -42.940704 -11.410934 7.103745
+v -39.662056 -15.387015 7.103745
+v -35.599216 -18.855045 7.103745
+v -29.164558 -22.697313 7.103745
+v -20.804350 -25.947315 7.103745
+v -13.758842 -27.655338 7.103745
+v -6.374107 -28.648712 7.103745
+v -6.374107 -36.212177 8.187895
+v -6.374107 -31.083874 5.290059
+v -6.374107 -27.514692 5.786507
+v -6.374107 -27.514692 7.103745
+v -6.374107 -31.083874 0.999999
+v -6.374107 -22.718256 6.630101
+v -6.374107 -22.718237 5.786507
+v -6.374107 -22.142164 6.384267
+v -6.374107 -24.506704 0.999999
+v -6.374107 -21.906952 0.999999
+v 6.374107 -36.212177 8.187895
+v 6.374107 -22.163525 6.384267
+v 6.374107 -22.739426 5.786507
+v 6.374107 -22.739445 6.630101
+v 6.374107 -21.928383 0.999999
+v 6.374107 -28.668283 7.103745
+v 6.374107 -27.534555 7.103745
+v 6.374107 -27.534555 5.786507
+v 6.374107 -24.444582 0.999999
+v 6.374107 -31.083874 5.290059
+v 6.374107 -31.083874 0.999999
+v 23.357828 -25.185738 7.103745
+v 31.042089 -21.821156 7.103745
+v 37.566841 -17.426657 7.103745
+v 42.521404 -12.141399 7.103745
+v 45.247829 -7.149983 7.103745
+v 46.035576 -4.663169 7.103746
+v 46.488384 -2.099144 7.103746
+v 54.044556 -2.099144 8.187897
+v 48.911640 -2.099144 5.290060
+v 45.351452 -2.099144 5.786508
+v 45.351452 -2.099144 7.103746
+v 48.911640 -2.099144 1.000000
+v 40.531025 -2.099144 6.630102
+v 40.531021 -2.099144 5.786508
+v 39.950077 -2.099144 6.384268
+v 42.427719 -2.099144 1.000000
+v 39.712696 -2.099144 1.000000
+v 54.127850 0.000000 8.187897
+v 54.044556 2.099144 8.187897
+v 50.550041 0.000000 9.179746
+v -50.528202 -1.000000 9.179746
+v -63.990784 -1.000001 15.677585
+v -50.528202 1.000000 9.179746
+v -63.990784 0.999999 15.677585
+v -46.884941 12.642374 9.179747
+v -58.090046 20.103207 15.677586
+v -45.783604 14.311845 9.179747
+v -56.986320 21.771084 15.677586
+v -35.370396 23.824778 9.179747
+v -42.780453 35.058853 15.677587
+v -33.649197 24.847656 9.179747
+v -41.070816 36.099262 15.677587
+v -22.032545 29.737062 9.179747
+v -25.951485 42.608196 15.677587
+v -20.109266 30.286772 9.179747
+v -24.029867 43.163357 15.677587
+v -1.000000 46.322258 15.677587
+v -1.000000 32.866898 9.179748
+v 1.000000 32.866898 9.179748
+v 1.000000 46.322258 15.677587
+v 48.911640 2.099144 5.290060
+v 45.335510 2.099144 5.786508
+v 45.335510 2.099144 7.103746
+v 48.911640 2.099144 1.000000
+v 40.509274 2.099144 5.786508
+v 40.509281 2.099144 6.630102
+v 39.927341 2.099144 6.384268
+v 42.488342 2.099144 1.000000
+v 39.689533 2.099144 1.000000
+v 32.004711 37.670349 12.300002
+v 33.841022 36.876652 12.300002
+v 29.301424 31.780851 8.630001
+v 31.139711 30.991455 8.630001
+v 58.342892 14.084851 12.300001
+v 59.107624 12.236825 12.300001
+v 52.363052 11.593959 8.630001
+v 53.126793 9.745517 8.630000
+v 46.416553 29.237398 12.300001
+v 47.945076 27.944519 12.300001
+v 42.008270 24.472746 8.630001
+v 43.546093 23.189917 8.630001
+v 8.746624 43.291180 12.300002
+v 10.735443 43.079067 12.300002
+v 7.996061 36.857937 8.630002
+v 9.985057 36.647339 8.630002
+v -10.735443 43.079067 12.300002
+v -8.746624 43.291180 12.300002
+v -9.985057 36.647339 8.630002
+v -7.996061 36.857937 8.630002
+v -33.841022 36.876652 12.300002
+v -32.004711 37.670349 12.300002
+v -31.139711 30.991455 8.630001
+v -29.301424 31.780851 8.630001
+v -47.945076 27.944519 12.300001
+v -46.416553 29.237398 12.300001
+v -43.546093 23.189917 8.630001
+v -42.008270 24.472746 8.630001
+v -59.107624 12.236825 12.300001
+v -58.342892 14.084851 12.300001
+v -53.126793 9.745517 8.630000
+v -52.363052 11.593959 8.630001
+v 8.746624 -43.291180 12.299998
+v 10.735443 -43.079067 12.299998
+v 9.985057 -36.647339 8.629998
+v 7.996061 -36.857937 8.629998
+v -59.107624 -12.236827 12.299999
+v -58.342892 -14.084853 12.299999
+v -52.363052 -11.593959 8.629999
+v -53.126793 -9.745517 8.630000
+v -46.416553 -29.237398 12.299999
+v -47.945076 -27.944519 12.299999
+v -42.008270 -24.472746 8.629999
+v -43.546093 -23.189917 8.629999
+v -32.004711 -37.670349 12.299998
+v -33.841022 -36.876652 12.299998
+v -29.301424 -31.780851 8.629999
+v -31.139711 -30.991455 8.629999
+v -8.746624 -43.291180 12.299998
+v -10.735443 -43.079067 12.299998
+v -7.996061 -36.857937 8.629998
+v -9.985057 -36.647339 8.629998
+v 32.004711 -37.670349 12.299998
+v 33.841022 -36.876652 12.299998
+v 31.139711 -30.991455 8.629999
+v 29.301424 -31.780851 8.629999
+v 46.416553 -29.237398 12.299999
+v 47.945076 -27.944519 12.299999
+v 43.546093 -23.189917 8.629999
+v 42.008270 -24.472746 8.629999
+v 59.107624 -12.236827 12.299999
+v 58.342892 -14.084853 12.299999
+v 53.126793 -9.745517 8.630000
+v 52.363052 -11.593959 8.629999
+v 59.652828 43.543709 23.000002
+v 61.163960 42.232029 23.000002
+v 55.767601 39.344398 19.800001
+v 57.282722 38.037029 19.800001
+v 40.127220 55.366425 23.000002
+v 41.959351 54.563618 23.000002
+v 37.742451 50.170856 19.800001
+v 39.575603 49.370277 19.800001
+v 11.002208 62.624298 23.000002
+v 12.990620 62.408703 23.000002
+v 10.339925 56.947720 19.800001
+v 12.328441 56.733009 19.800001
+v -12.990620 62.408703 23.000002
+v -11.002208 62.624298 23.000002
+v -12.328441 56.733009 19.800001
+v -10.339925 56.947720 19.800001
+v -41.959351 54.563618 23.000002
+v -40.127220 55.366425 23.000002
+v -39.575603 49.370277 19.800001
+v -37.742451 50.170856 19.800001
+v -61.163960 42.232029 23.000002
+v -59.652828 43.543709 23.000002
+v -57.282722 38.037029 19.800001
+v -55.767601 39.344398 19.800001
+v -77.077438 19.722124 23.000000
+v -76.311165 21.569511 23.000000
+v -71.801460 17.524426 19.799999
+v -71.035507 19.371946 19.799999
+v -77.077438 -19.722128 23.000000
+v -76.311165 -21.569515 23.000000
+v -71.035507 -19.371946 19.799999
+v -71.801460 -17.524426 19.799999
+v -59.652828 -43.543709 22.999998
+v -61.163960 -42.232029 22.999998
+v -55.767601 -39.344398 19.799997
+v -57.282722 -38.037029 19.799997
+v -40.127220 -55.366425 22.999998
+v -41.959351 -54.563618 22.999998
+v -37.742451 -50.170856 19.799997
+v -39.575603 -49.370277 19.799997
+v -11.002208 -62.624298 22.999998
+v -12.990620 -62.408703 22.999998
+v -10.339925 -56.947720 19.799997
+v -12.328441 -56.733009 19.799997
+v 11.002208 -62.624298 22.999998
+v 12.990620 -62.408703 22.999998
+v 12.328441 -56.733009 19.799997
+v 10.339925 -56.947720 19.799997
+v 40.127220 -55.366425 22.999998
+v 41.959351 -54.563618 22.999998
+v 39.575603 -49.370277 19.799997
+v 37.742451 -50.170856 19.799997
+v 59.652828 -43.543709 22.999998
+v 61.163960 -42.232029 22.999998
+v 57.282722 -38.037029 19.799997
+v 55.767601 -39.344398 19.799997
+v 79.503716 12.416275 31.659950
+v 80.980614 -0.409305 31.659950
+v 75.298401 24.008486 31.659952
+v 69.227028 33.718807 31.659952
+v 62.083855 41.523605 31.659952
+v 51.713078 49.446342 31.659952
+v 39.446594 55.761002 31.659952
+v 22.496660 60.972164 31.659952
+v 2.941637 63.262867 31.659952
+v -13.620163 62.485855 31.659952
+v -32.955814 58.234081 31.659952
+v -48.712666 51.337513 31.659952
+v -63.580975 40.210079 31.659952
+v -73.002693 28.326180 31.659952
+v -78.683571 15.582288 31.659950
+v -80.944695 2.054209 31.659950
+v -79.671638 -11.693501 31.659950
+v -75.247223 -24.111717 31.659948
+v -68.703247 -34.389473 31.659948
+v -60.989304 -42.514771 31.659948
+v -52.672276 -48.832161 31.659948
+v -41.076935 -55.065468 31.659948
+v -27.590693 -59.758179 31.659948
+v -9.132391 -62.922104 31.659948
+v 7.442807 -63.065224 31.659948
+v 23.082085 -60.895008 31.659948
+v 38.386791 -56.270523 31.659948
+v 53.155712 -48.617519 31.659948
+v 65.589973 -38.139751 31.659948
+v 74.195602 -26.254148 31.659948
+v 79.084923 -14.185026 31.659950
+v 80.474358 -7.409305 31.659950
+v 44.181484 6.642398 7.103746
+v 41.952591 10.855276 7.103746
+v 38.811039 14.640248 7.103746
+v 34.894848 17.970165 7.103747
+v 28.653446 21.689413 7.103747
+v 20.501358 24.858446 7.103747
+v 13.609652 26.533669 7.103747
+v -3.196056 24.668844 1.000001
+v 0.000000 24.754141 1.000001
+v 3.196056 24.699993 1.000001
+v 38.972836 5.236902 6.384268
+v 38.659599 5.363924 1.000000
+v 37.222637 8.283062 6.384268
+v 36.912582 8.311285 1.000000
+v 34.703949 11.174221 6.384268
+v 34.656689 10.893427 1.000000
+v 31.463432 13.845942 6.384268
+v 31.125479 13.797391 1.000001
+v 26.134790 16.963388 6.384269
+v 25.152277 17.165751 1.000001
+v 18.992676 19.723808 6.384269
+v 17.897518 19.800514 1.000001
+v 12.862669 21.228418 6.384269
+v 12.184310 21.116661 1.000001
+v 39.534222 5.384144 6.630102
+v 37.735363 8.552365 6.630103
+v 35.152782 11.538116 6.630103
+v 31.841761 14.280818 6.630103
+v 26.415630 17.464825 6.630103
+v 19.162550 20.271753 6.630103
+v 12.947220 21.796318 6.630103
+v 39.534206 5.384128 5.786508
+v 37.735359 8.552373 5.786509
+v 35.152790 11.538136 5.786509
+v 31.841755 14.280814 5.786509
+v 26.415625 17.464813 5.786509
+v 19.162565 20.271770 5.786509
+v 12.947221 21.796307 5.786509
+v 44.181484 6.642398 5.786509
+v 41.952591 10.855276 5.786509
+v 38.811039 14.640248 5.786509
+v 34.894848 17.970165 5.786509
+v 28.653446 21.689413 5.786509
+v 20.501358 24.858446 5.786509
+v 13.609652 26.533669 5.786509
+v -19.852297 19.276220 1.000001
+v -21.218451 19.067507 6.384269
+v -29.971397 14.667997 1.000001
+v -30.896194 14.343083 6.384268
+v -34.079540 11.555571 1.000000
+v -36.102840 9.820512 6.384268
+v -36.701973 8.716331 1.000000
+v -38.646347 6.065288 6.384268
+v -38.615208 5.590904 1.000000
+v -39.459591 4.096210 6.384268
+v -39.282566 3.882123 1.000000
+v -21.418491 19.605312 6.630103
+v -31.259190 14.790142 6.630103
+v -36.141037 10.639594 6.630103
+v -38.920113 6.782767 6.630103
+v -39.940399 4.466063 6.630102
+v -21.418503 19.605328 5.786509
+v -31.259182 14.790133 5.786509
+v -36.141045 10.639614 5.786509
+v -38.920101 6.782755 5.786509
+v -39.940384 4.466045 5.786508
+v -22.999201 24.114107 5.786509
+v -30.492594 20.833721 5.786509
+v -36.814110 16.583220 5.786509
+v -41.566475 11.533975 5.786509
+v -44.163933 6.819064 5.786509
+v -44.913494 4.492453 5.786508
+v -22.999201 24.114107 7.103747
+v -30.492594 20.833721 7.103747
+v -36.814110 16.583220 7.103747
+v -41.566475 11.533975 7.103746
+v -44.163933 6.819064 7.103746
+v -44.913494 4.492453 7.103746
+v -42.588291 -1.050518 1.000000
+v -42.611507 0.000000 1.000000
+v -42.557953 1.050518 1.000000
+v -39.840469 -0.937382 1.000000
+v -39.880630 0.233429 1.000000
+v -38.972836 -5.236903 6.384268
+v -38.659824 -5.363429 1.000000
+v -37.222637 -8.283062 6.384267
+v -36.912907 -8.310843 1.000000
+v -34.703949 -11.174221 6.384267
+v -34.657043 -10.893082 1.000000
+v -31.463432 -13.845942 6.384267
+v -31.125824 -13.797151 0.999999
+v -26.134790 -16.963388 6.384267
+v -25.152561 -17.165621 0.999999
+v -18.992676 -19.723808 6.384267
+v -17.897699 -19.800463 0.999999
+v -12.862669 -21.228418 6.384267
+v -12.184402 -21.116644 0.999999
+v -39.534222 -5.384145 6.630102
+v -37.735363 -8.552365 6.630102
+v -35.152782 -11.538116 6.630102
+v -31.841761 -14.280818 6.630102
+v -26.415630 -17.464825 6.630101
+v -19.162550 -20.271753 6.630101
+v -12.947220 -21.796318 6.630101
+v -39.534206 -5.384129 5.786508
+v -37.735359 -8.552373 5.786508
+v -35.152790 -11.538136 5.786508
+v -31.841755 -14.280814 5.786508
+v -26.415625 -17.464813 5.786507
+v -19.162565 -20.271770 5.786507
+v -12.947221 -21.796307 5.786507
+v -44.181484 -6.642399 5.786508
+v -41.952591 -10.855276 5.786508
+v -38.811039 -14.640248 5.786508
+v -34.894848 -17.970165 5.786507
+v -28.653446 -21.689413 5.786507
+v -20.501358 -24.858446 5.786507
+v -13.609652 -26.533669 5.786507
+v -44.181484 -6.642399 7.103745
+v -41.952591 -10.855276 7.103745
+v -38.811039 -14.640248 7.103745
+v -34.894848 -17.970165 7.103745
+v -28.653446 -21.689413 7.103745
+v -20.501358 -24.858446 7.103745
+v -13.609652 -26.533669 7.103745
+v -3.196056 -24.699993 0.999999
+v 0.000000 -24.754141 0.999999
+v 3.196056 -24.668844 0.999999
+v 22.999201 -24.114107 7.103745
+v 30.492594 -20.833721 7.103745
+v 36.814110 -16.583220 7.103745
+v 41.566475 -11.533975 7.103745
+v 44.163933 -6.819065 7.103745
+v 44.913494 -4.492454 7.103746
+v 22.999201 -24.114107 5.786507
+v 30.492594 -20.833721 5.786507
+v 36.814110 -16.583220 5.786507
+v 41.566475 -11.533975 5.786508
+v 44.163933 -6.819065 5.786508
+v 44.913494 -4.492454 5.786508
+v 21.418503 -19.605328 5.786507
+v 31.259182 -14.790133 5.786508
+v 36.141045 -10.639614 5.786508
+v 38.920101 -6.782756 5.786508
+v 39.940384 -4.466046 5.786508
+v 21.418491 -19.605312 6.630101
+v 31.259190 -14.790142 6.630102
+v 36.141037 -10.639594 6.630102
+v 38.920113 -6.782768 6.630102
+v 39.940399 -4.466064 6.630102
+v 21.218451 -19.067507 6.384267
+v 30.896194 -14.343083 6.384267
+v 36.102840 -9.820512 6.384267
+v 38.646347 -6.065289 6.384267
+v 39.459591 -4.096210 6.384268
+v 19.851954 -19.276331 0.999999
+v 29.970846 -14.668347 0.999999
+v 34.078960 -11.556103 1.000000
+v 36.701431 -8.717036 1.000000
+v 38.614883 -5.591603 1.000000
+v 39.282478 -3.882398 1.000000
+v 42.511906 -1.496981 1.000000
+v 42.570805 -0.893927 1.000000
+v 49.014908 0.000000 1.000000
+v 42.602379 0.760366 1.000000
+v 42.612617 0.313417 1.000000
+v 42.604382 -0.290341 1.000000
+v 42.578251 1.207068 1.000000
+v 42.540234 1.653376 1.000000
+v 39.881729 -0.093879 1.000000
+v 49.014908 0.000000 5.290060
+v 80.980614 -0.409305 32.013752
+v 79.503716 12.416275 32.013752
+v 75.298401 24.008486 32.013752
+v 69.227028 33.718807 32.013752
+v 62.083855 41.523605 32.013752
+v 51.713078 49.446342 32.013756
+v 39.446594 55.761002 32.013756
+v 22.496660 60.972164 32.013756
+v 2.941637 63.262867 32.013756
+v -13.620163 62.485855 32.013756
+v -32.955814 58.234081 32.013756
+v -48.712666 51.337513 32.013756
+v -63.580975 40.210079 32.013752
+v -73.002693 28.326180 32.013752
+v -78.683571 15.582288 32.013752
+v -80.944695 2.054209 32.013752
+v -79.671638 -11.693501 32.013752
+v -75.247223 -24.111717 32.013752
+v -68.703247 -34.389473 32.013752
+v -60.989304 -42.514771 32.013752
+v -52.672276 -48.832161 32.013748
+v -41.076935 -55.065468 32.013748
+v -27.590693 -59.758179 32.013748
+v -9.132391 -62.922104 32.013748
+v 7.442808 -63.065224 32.013748
+v 23.082085 -60.895008 32.013748
+v 38.386791 -56.270523 32.013748
+v 53.155712 -48.617519 32.013748
+v 65.589973 -38.139751 32.013752
+v 74.195602 -26.254148 32.013752
+v 79.084923 -14.185026 32.013752
+v 80.474358 -7.409305 32.013752
+v 85.514915 -0.444106 35.989189
+v 81.303871 5.316545 32.532322
+v 81.196152 6.310760 32.533405
+v 85.220757 5.773274 35.989189
+v 85.111336 6.767291 35.989189
+v 78.872772 16.865162 32.544567
+v 79.175064 15.909566 32.543591
+v 82.999649 16.841753 35.989189
+v 79.427979 25.886688 35.989189
+v 82.700714 17.798168 35.989189
+v 71.790161 31.237309 32.557575
+v 71.221146 32.059830 32.558186
+v 74.969559 33.522331 35.989189
+v 74.399117 34.343826 35.989189
+v 64.526802 40.034149 32.562885
+v 63.817417 40.739010 32.563171
+v 67.261566 42.826488 35.989189
+v 66.551689 43.530838 35.989189
+v 57.196243 51.251328 35.989193
+v 47.439533 57.072323 35.989193
+v 45.643959 53.599693 32.561836
+v 44.749184 54.046436 32.561459
+v 46.545238 57.519997 35.989193
+v 33.998997 58.469311 32.555405
+v 34.944683 58.143780 32.556034
+v 36.282829 61.824188 35.989193
+v 35.337612 62.151005 35.989193
+v 17.017822 62.589306 32.542072
+v 18.005383 62.431606 32.542927
+v 18.671667 66.305641 35.989193
+v 6.153144 63.721516 32.532291
+v 5.154394 63.771675 32.531368
+v 6.367396 67.658653 35.989193
+v 17.684340 66.464676 35.989193
+v 5.368709 67.709976 35.989193
+v -5.369306 67.720940 35.989193
+v -5.154394 63.771675 32.521801
+v -6.153144 63.721516 32.520878
+v -6.368104 67.671654 35.989193
+v -18.005383 62.431606 32.510227
+v -17.017822 62.589306 32.511086
+v -17.690351 66.499641 35.989193
+v -18.677999 66.342453 35.989193
+v -34.944683 58.143780 32.497082
+v -33.998997 58.469311 32.497715
+v -35.360146 62.212982 35.989193
+v -44.749184 54.046436 32.491627
+v -36.305828 61.887440 35.989193
+v -45.643959 53.599693 32.491245
+v -46.581860 57.590820 35.989193
+v -47.476528 57.143871 35.989193
+v -57.790462 50.938869 35.989193
+v -63.817417 40.739010 32.489845
+v -64.526802 40.034149 32.490128
+v -66.610207 43.590588 35.989189
+v -71.221146 32.059830 32.494816
+v -71.790161 31.237309 32.495426
+v -74.457855 34.386044 35.989189
+v -67.319664 42.885811 35.989189
+v -75.027252 33.563797 35.989189
+v -79.468597 25.934086 35.989189
+v -78.872772 16.865162 32.508430
+v -79.175064 15.909566 32.509407
+v -82.740257 17.807806 35.989189
+v -81.196152 6.310760 32.519592
+v -83.037125 16.850887 35.989189
+v -81.303871 5.316545 32.520676
+v -85.126976 6.769114 35.989189
+v -85.234108 5.774832 35.989189
+v -81.303871 -5.316548 32.532322
+v -81.196152 -6.310762 32.533405
+v -85.220757 -5.773277 35.989189
+v -85.111336 -6.767293 35.989189
+v -78.872772 -16.865166 32.544567
+v -79.175064 -15.909568 32.543591
+v -82.999649 -16.841757 35.989189
+v -79.437210 -25.867905 35.989189
+v -82.700714 -17.798172 35.989189
+v -71.790161 -31.237312 32.557575
+v -71.221146 -32.059830 32.558186
+v -74.969559 -33.522331 35.989189
+v -74.399117 -34.343826 35.989189
+v -64.526802 -40.034149 32.562885
+v -63.817417 -40.739010 32.563171
+v -67.261566 -42.826488 35.989189
+v -66.551689 -43.530838 35.989189
+v -57.196243 -51.251328 35.989185
+v -45.643959 -53.599693 32.561829
+v -44.749184 -54.046436 32.561451
+v -47.439533 -57.072323 35.989185
+v -46.545238 -57.519997 35.989185
+v -36.282829 -61.824188 35.989185
+v -34.944683 -58.143780 32.556026
+v -33.998997 -58.469311 32.555397
+v -35.337612 -62.151005 35.989185
+v -18.671667 -66.305641 35.989185
+v -18.005383 -62.431606 32.542919
+v -17.017822 -62.589306 32.542065
+v -17.684340 -66.464676 35.989185
+v -5.154394 -63.771675 32.531361
+v -6.153144 -63.721516 32.532284
+v -6.367396 -67.658653 35.989185
+v 5.154394 -63.771675 32.521793
+v -5.368709 -67.709976 35.989185
+v 6.153144 -63.721516 32.520870
+v 5.369306 -67.720940 35.989185
+v 6.368104 -67.671654 35.989185
+v 17.690351 -66.499641 35.989185
+v 17.017822 -62.589306 32.511078
+v 18.005383 -62.431606 32.510220
+v 18.677999 -66.342453 35.989185
+v 33.998997 -58.469311 32.497707
+v 34.944683 -58.143780 32.497074
+v 35.360146 -62.212982 35.989185
+v 36.305828 -61.887440 35.989185
+v 45.643959 -53.599693 32.491238
+v 44.749184 -54.046436 32.491619
+v 46.581860 -57.590820 35.989185
+v 47.476528 -57.143871 35.989185
+v 57.639774 -51.045513 35.989185
+v 63.817417 -40.739010 32.489845
+v 64.526802 -40.034149 32.490128
+v 66.610207 -43.590588 35.989189
+v 67.319664 -42.885811 35.989189
+v 71.221146 -32.059830 32.494816
+v 71.790161 -31.237312 32.495426
+v 74.457855 -34.386044 35.989189
+v 75.027252 -33.563797 35.989189
+v 79.597923 -25.668455 35.989189
+v 78.872772 -16.865166 32.508430
+v 79.175064 -15.909568 32.509407
+v 82.740257 -17.807810 35.989189
+v 83.037125 -16.850891 35.989189
+v 81.303871 -5.316548 32.520676
+v 81.196152 -6.310762 32.519592
+v 85.126976 -6.769117 35.989189
+v 85.234108 -5.774835 35.989189
+v 85.970749 -0.447604 35.989189
+v 85.686958 -5.827640 35.989189
+v 87.879311 -6.083279 39.613861
+v 87.879311 -6.083279 39.069618
+v 92.659142 -6.640633 44.320713
+v 93.346268 -6.720755 44.320713
+v 81.303871 -5.316548 32.013756
+v 86.124702 -5.878683 35.989189
+v 85.686958 -5.827640 39.069618
+v 81.196152 -6.310762 32.013756
+v 93.237061 -7.714797 44.320713
+v 87.771790 -7.077518 39.069618
+v 92.551018 -7.634800 44.320713
+v 87.771790 -7.077518 39.613861
+v 86.016312 -6.872818 35.989189
+v 85.579758 -6.821915 39.069618
+v 85.579758 -6.821914 35.989189
+v 83.480629 -16.958990 35.989189
+v 85.627632 -17.482292 39.069618
+v 90.969124 -18.784203 44.320713
+v 90.308022 -18.623068 44.320713
+v 85.627632 -17.482292 39.613861
+v 83.897202 -17.060524 35.989189
+v 83.480629 -16.958990 39.069618
+v 79.175064 -15.909568 32.013756
+v 78.872772 -16.865166 32.013756
+v 85.333366 -18.439844 39.069618
+v 85.333366 -18.439844 39.613861
+v 90.017921 -19.581636 44.320713
+v 90.678673 -19.742685 44.320713
+v 83.184227 -17.916021 35.989189
+v 83.600227 -18.017414 35.989189
+v 83.184227 -17.916021 39.069618
+v 80.012268 -25.858723 35.989189
+v 75.397537 -33.829918 35.989189
+v 77.190155 -35.118267 39.613861
+v 77.190155 -35.118267 39.069618
+v 81.098427 -37.927135 44.320713
+v 81.636894 -38.314125 44.320713
+v 71.790161 -31.237312 32.013756
+v 75.732086 -34.070358 35.989189
+v 75.397537 -33.829918 39.069618
+v 71.221146 -32.059830 32.013756
+v 81.065414 -39.134876 44.320713
+v 76.620186 -35.940102 39.069618
+v 80.527534 -38.748306 44.320713
+v 76.620186 -35.940102 39.613861
+v 75.161972 -34.892090 35.989189
+v 74.828033 -34.652092 39.069618
+v 74.828033 -34.652092 35.989189
+v 67.638657 -43.211517 35.989189
+v 69.182976 -44.788342 39.069614
+v 73.009735 -48.695667 44.320709
+v 72.549973 -48.226219 44.320709
+v 69.182976 -44.788342 39.613857
+v 67.922684 -43.501518 35.989189
+v 67.638657 -43.211517 39.069618
+v 64.526802 -40.034149 32.013756
+v 63.817417 -40.739010 32.013756
+v 68.473328 -45.492931 39.069614
+v 68.473328 -45.492931 39.613857
+v 71.840019 -48.930504 44.320709
+v 72.299561 -49.399719 44.320709
+v 66.929161 -43.916260 35.989185
+v 67.212952 -44.206020 35.989185
+v 66.929161 -43.916260 39.069614
+v 47.685905 -57.548809 35.989185
+v 57.905888 -51.415642 35.989185
+v 48.699554 -59.509201 39.613857
+v 48.699554 -59.509201 39.069614
+v 50.909580 -63.783382 44.320709
+v 51.211960 -64.368179 44.320709
+v 45.643959 -53.599693 32.013752
+v 47.872921 -57.910492 35.989185
+v 47.685905 -57.548809 39.069614
+v 44.749184 -54.046436 32.013752
+v 50.318012 -64.816521 44.320709
+v 47.805077 -59.956516 39.069614
+v 50.015419 -64.231300 44.320709
+v 47.805077 -59.956516 39.613857
+v 46.978504 -58.357929 35.989185
+v 46.791271 -57.995819 39.069614
+v 46.791271 -57.995819 35.989185
+v 36.461605 -62.315880 35.989185
+v 37.215752 -64.390068 39.613857
+v 37.215752 -64.390068 39.069614
+v 38.859989 -68.912338 44.320709
+v 39.087219 -69.537308 44.320709
+v 34.944683 -58.143780 32.013752
+v 36.603012 -62.704803 35.989185
+v 36.461605 -62.315880 39.069614
+v 33.998997 -58.469311 32.013752
+v 38.142200 -69.864685 44.320709
+v 36.270222 -64.716042 39.069614
+v 37.914722 -69.239029 44.320709
+v 36.270222 -64.716042 39.613857
+v 35.657612 -63.031128 35.989185
+v 35.515945 -62.641495 39.069614
+v 35.515945 -62.641495 35.989185
+v 18.755268 -66.791718 35.989185
+v 19.129341 -68.966728 39.069614
+v 20.060181 -74.378967 44.320709
+v 19.944925 -73.708832 44.320709
+v 19.129341 -68.966728 39.613857
+v 18.827951 -67.214325 35.989185
+v 18.755268 -66.791718 39.069614
+v 18.005383 -62.431606 32.013752
+v 17.017822 -62.589306 32.013752
+v 18.141743 -69.124199 39.069614
+v 18.141743 -69.124199 39.613857
+v 18.957411 -73.866791 44.320709
+v 19.072826 -74.537865 44.320709
+v 17.767628 -66.948952 35.989185
+v 17.840479 -67.372536 35.989185
+v 17.767628 -66.948952 39.069614
+v 6.392873 -68.126823 35.989185
+v 6.512790 -70.330444 39.069614
+v 6.811853 -75.826088 44.320709
+v 6.774241 -75.134918 44.320709
+v 6.512790 -70.330444 39.613857
+v 6.416835 -68.567162 35.989185
+v 6.392873 -68.126823 39.069614
+v 6.153144 -63.721516 32.013752
+v 5.154394 -63.771675 32.013752
+v 5.513999 -70.379845 39.069614
+v 5.513999 -70.379845 39.613857
+v 5.775460 -75.184517 44.320709
+v 5.813126 -75.876656 44.320709
+v 5.394077 -68.176132 35.989185
+v 5.418095 -68.617493 35.989185
+v 5.394077 -68.176132 39.069614
+v -5.393479 -68.165161 35.989185
+v -5.513400 -70.368835 39.613857
+v -5.513400 -70.368835 39.069614
+v -5.774857 -75.173424 44.320709
+v -5.812816 -75.870964 44.320709
+v -5.813126 -75.876656 44.320709
+v -5.154394 -63.771675 32.013752
+v -5.418095 -68.617493 35.989185
+v -5.393479 -68.165161 39.069614
+v -6.153144 -63.721516 32.013752
+v -6.811853 -75.826088 44.320709
+v -6.512083 -70.317444 39.069614
+v -6.811491 -75.819450 44.320709
+v -6.773534 -75.121925 44.320709
+v -6.512083 -70.317444 39.613857
+v -6.416835 -68.567162 35.989185
+v -6.392166 -68.113831 39.069614
+v -6.392166 -68.113831 35.989185
+v -17.761614 -66.913979 35.989185
+v -18.135717 -69.089165 39.613857
+v -18.135717 -69.089165 39.069614
+v -18.951361 -73.831627 44.320709
+v -19.069777 -74.520134 44.320709
+v -19.072826 -74.537865 44.320709
+v -17.017822 -62.589306 32.013752
+v -17.840479 -67.372536 35.989185
+v -17.761614 -66.913979 39.069614
+v -18.005383 -62.431606 32.013752
+v -20.060181 -74.378967 44.320709
+v -19.123005 -68.929878 39.069614
+v -20.056984 -74.360382 44.320709
+v -19.938578 -73.671928 44.320709
+v -19.123005 -68.929878 39.613857
+v -18.827951 -67.214325 35.989185
+v -18.748936 -66.754898 39.069614
+v -18.748936 -66.754898 35.989185
+v -35.493408 -62.579510 35.989185
+v -36.247662 -64.653992 39.069614
+v -38.142200 -69.864685 44.320709
+v -38.130859 -69.833488 44.320709
+v -37.892117 -69.176857 44.320709
+v -36.247662 -64.653992 39.613857
+v -35.657612 -63.031128 35.989185
+v -35.493408 -62.579510 39.069614
+v -33.998997 -58.469311 32.013752
+v -34.944683 -58.143780 32.013752
+v -37.192738 -64.326775 39.069614
+v -37.192738 -64.326775 39.613857
+v -38.836952 -68.848984 44.320709
+v -39.075661 -69.505524 44.320709
+v -39.087219 -69.537308 44.320709
+v -36.438602 -62.252621 35.989185
+v -36.603012 -62.704803 35.989185
+v -36.438602 -62.252621 39.069614
+v -46.754646 -57.924988 35.989185
+v -47.768436 -59.885654 39.069614
+v -50.318012 -64.816521 44.320709
+v -50.299641 -64.780983 44.320709
+v -49.978745 -64.160385 44.320709
+v -47.768436 -59.885654 39.613857
+v -46.978504 -58.357929 35.989185
+v -46.754646 -57.924988 39.069614
+v -44.749184 -54.046436 32.013752
+v -45.643959 -53.599693 32.013752
+v -48.662552 -59.437637 39.069614
+v -48.662552 -59.437637 39.613857
+v -50.872566 -63.711796 44.320709
+v -51.193417 -64.332321 44.320709
+v -51.211960 -64.368179 44.320709
+v -47.648911 -57.477257 35.989185
+v -47.872921 -57.910492 35.989185
+v -47.648911 -57.477257 39.069614
+v -57.458439 -51.624229 35.989185
+v -66.870644 -43.856510 35.989185
+v -68.414810 -45.433182 39.613857
+v -68.414810 -45.433182 39.069614
+v -71.781502 -48.870754 44.320709
+v -72.270287 -49.369823 44.320709
+v -72.299561 -49.399719 44.320709
+v -63.817417 -40.739010 32.013756
+v -67.212952 -44.206020 35.989185
+v -66.870644 -43.856510 39.069614
+v -64.526802 -40.034149 32.013756
+v -73.009735 -48.695667 44.320709
+v -69.124863 -44.729004 39.069614
+v -72.980644 -48.665966 44.320709
+v -72.491829 -48.166859 44.320709
+v -69.124863 -44.729004 39.613857
+v -67.922684 -43.501518 35.989189
+v -67.580559 -43.152191 39.069618
+v -67.580559 -43.152191 35.989189
+v -74.769295 -34.609875 35.989189
+v -76.561417 -35.897869 39.069618
+v -81.065414 -39.134876 44.320713
+v -81.035995 -39.113739 44.320713
+v -80.468735 -38.706047 44.320713
+v -76.561417 -35.897869 39.613861
+v -75.161972 -34.892090 35.989189
+v -74.769295 -34.609875 39.069618
+v -71.221146 -32.059830 32.013756
+v -71.790161 -31.237312 32.013756
+v -77.132393 -35.076756 39.069618
+v -77.132393 -35.076756 39.613861
+v -81.040558 -37.885544 44.320713
+v -81.607941 -38.293320 44.320713
+v -81.636894 -38.314125 44.320713
+v -75.339828 -33.788445 35.989189
+v -75.732086 -34.070358 35.989189
+v -75.339828 -33.788445 39.069618
+v -79.850731 -26.059986 35.989189
+v -83.144753 -17.906399 35.989189
+v -85.294205 -18.430298 39.613861
+v -85.294205 -18.430298 39.069618
+v -89.979355 -19.572237 44.320713
+v -90.659431 -19.737995 44.320713
+v -90.678673 -19.742685 44.320713
+v -78.872772 -16.865166 32.013756
+v -83.600227 -18.017414 35.989189
+v -83.144753 -17.906399 39.069618
+v -79.175064 -15.909568 32.013756
+v -90.969124 -18.784203 44.320713
+v -85.590446 -17.473228 39.069618
+v -90.950790 -18.779734 44.320713
+v -90.271294 -18.614117 44.320713
+v -85.590446 -17.473228 39.613861
+v -83.897202 -17.060524 35.989189
+v -83.443207 -16.949869 39.069618
+v -83.443207 -16.949869 35.989189
+v -85.564117 -6.820090 35.989189
+v -87.756157 -7.075695 39.069618
+v -93.237061 -7.714797 44.320713
+v -93.229248 -7.713886 44.320713
+v -92.535393 -7.632979 44.320713
+v -87.756157 -7.075695 39.613861
+v -86.016312 -6.872818 35.989189
+v -85.564117 -6.820091 39.069618
+v -81.196152 -6.310762 32.013756
+v -81.303871 -5.316548 32.013756
+v -87.865860 -6.081711 39.069618
+v -87.865860 -6.081711 39.613861
+v -92.645546 -6.639047 44.320713
+v -93.339462 -6.719961 44.320713
+v -93.346268 -6.720755 44.320713
+v -85.673592 -5.826080 35.989189
+v -86.124702 -5.878683 35.989189
+v -85.673592 -5.826081 39.069618
+v -85.686958 5.827637 35.989189
+v -87.879311 6.083275 39.613861
+v -87.879311 6.083275 39.069618
+v -92.659142 6.640629 44.320713
+v -93.346268 6.720751 44.320713
+v -81.303871 5.316545 32.013756
+v -86.124702 5.878680 35.989189
+v -85.686958 5.827636 39.069618
+v -81.196152 6.310760 32.013756
+v -93.237061 7.714793 44.320713
+v -87.771790 7.077514 39.069618
+v -92.551018 7.634796 44.320713
+v -87.771790 7.077514 39.613861
+v -86.016312 6.872816 35.989189
+v -85.579758 6.821911 39.069618
+v -85.579758 6.821911 35.989189
+v -83.480629 16.958986 35.989189
+v -85.627632 17.482288 39.069618
+v -90.969124 18.784199 44.320713
+v -90.308022 18.623064 44.320713
+v -85.627632 17.482288 39.613861
+v -83.897202 17.060520 35.989189
+v -83.480629 16.958986 39.069618
+v -79.175064 15.909566 32.013756
+v -78.872772 16.865162 32.013756
+v -85.333366 18.439840 39.069618
+v -85.333366 18.439840 39.613861
+v -90.017921 19.581633 44.320713
+v -90.678673 19.742682 44.320713
+v -83.184227 17.916018 35.989189
+v -83.600227 18.017410 35.989189
+v -83.184227 17.916018 39.069618
+v -79.882004 26.126379 35.989189
+v -75.397537 33.829918 35.989189
+v -77.190155 35.118267 39.613861
+v -77.190155 35.118267 39.069618
+v -81.098427 37.927128 44.320713
+v -81.636894 38.314117 44.320713
+v -71.790161 31.237309 32.013756
+v -75.732086 34.070358 35.989189
+v -75.397537 33.829918 39.069618
+v -71.221146 32.059830 32.013756
+v -81.065414 39.134869 44.320713
+v -76.620186 35.940102 39.069618
+v -80.527534 38.748299 44.320713
+v -76.620186 35.940102 39.613861
+v -75.161972 34.892090 35.989189
+v -74.828033 34.652092 39.069618
+v -74.828033 34.652092 35.989189
+v -67.638657 43.211517 35.989189
+v -69.182976 44.788342 39.069622
+v -73.009735 48.695660 44.320717
+v -72.549973 48.226212 44.320717
+v -69.182976 44.788342 39.613865
+v -67.922684 43.501518 35.989189
+v -67.638657 43.211517 39.069618
+v -64.526802 40.034149 32.013756
+v -63.817417 40.739010 32.013756
+v -68.473328 45.492931 39.069622
+v -68.473328 45.492931 39.613865
+v -71.840019 48.930496 44.320717
+v -72.299561 49.399712 44.320717
+v -66.929161 43.916260 35.989193
+v -67.212952 44.206020 35.989193
+v -66.929161 43.916260 39.069622
+v -47.685905 57.548809 35.989193
+v -58.057472 51.308353 35.989193
+v -48.699554 59.509201 39.613865
+v -48.699554 59.509201 39.069622
+v -50.909580 63.783375 44.320717
+v -51.211960 64.368179 44.320717
+v -45.643959 53.599693 32.013760
+v -47.872921 57.910492 35.989193
+v -47.685905 57.548809 39.069622
+v -44.749184 54.046436 32.013760
+v -50.318012 64.816521 44.320717
+v -47.805077 59.956516 39.069622
+v -50.015419 64.231300 44.320717
+v -47.805077 59.956516 39.613865
+v -46.978504 58.357929 35.989193
+v -46.791271 57.995819 39.069622
+v -46.791271 57.995819 35.989193
+v -36.461605 62.315880 35.989193
+v -37.215752 64.390068 39.613865
+v -37.215752 64.390068 39.069622
+v -38.859989 68.912338 44.320717
+v -39.087219 69.537308 44.320717
+v -34.944683 58.143780 32.013760
+v -36.603012 62.704803 35.989193
+v -36.461605 62.315880 39.069622
+v -33.998997 58.469311 32.013760
+v -38.142200 69.864685 44.320717
+v -36.270222 64.716042 39.069622
+v -37.914722 69.239029 44.320717
+v -36.270222 64.716042 39.613865
+v -35.657612 63.031128 35.989193
+v -35.515945 62.641495 39.069622
+v -35.515945 62.641495 35.989193
+v -18.755268 66.791718 35.989193
+v -19.129341 68.966728 39.069622
+v -20.060181 74.378967 44.320717
+v -19.944925 73.708832 44.320717
+v -19.129341 68.966728 39.613865
+v -18.827951 67.214325 35.989193
+v -18.755268 66.791718 39.069622
+v -18.005383 62.431606 32.013760
+v -17.017822 62.589306 32.013760
+v -18.141743 69.124199 39.069622
+v -18.141743 69.124199 39.613865
+v -18.957411 73.866791 44.320717
+v -19.072826 74.537865 44.320717
+v -17.767628 66.948952 35.989193
+v -17.840479 67.372536 35.989193
+v -17.767628 66.948952 39.069622
+v -6.392873 68.126823 35.989193
+v -6.512790 70.330444 39.069622
+v -6.811853 75.826088 44.320717
+v -6.774241 75.134918 44.320717
+v -6.512790 70.330444 39.613865
+v -6.416835 68.567162 35.989193
+v -6.392873 68.126823 39.069622
+v -6.153144 63.721516 32.013760
+v -5.154394 63.771675 32.013760
+v -5.513999 70.379845 39.069622
+v -5.513999 70.379845 39.613865
+v -5.775460 75.184517 44.320717
+v -5.813126 75.876656 44.320717
+v -5.394077 68.176132 35.989193
+v -5.418095 68.617493 35.989193
+v -5.394077 68.176132 39.069622
+v 5.393479 68.165161 35.989193
+v 5.513400 70.368835 39.613865
+v 5.513400 70.368835 39.069622
+v 5.774857 75.173424 44.320717
+v 5.812816 75.870964 44.320717
+v 5.813126 75.876656 44.320717
+v 5.154394 63.771675 32.013760
+v 5.418095 68.617493 35.989193
+v 5.393479 68.165161 39.069622
+v 6.153144 63.721516 32.013760
+v 6.811853 75.826088 44.320717
+v 6.512083 70.317444 39.069622
+v 6.811491 75.819450 44.320717
+v 6.773534 75.121925 44.320717
+v 6.512083 70.317444 39.613865
+v 6.416835 68.567162 35.989193
+v 6.392166 68.113831 39.069622
+v 6.392166 68.113831 35.989193
+v 17.761614 66.913979 35.989193
+v 18.135717 69.089165 39.613865
+v 18.135717 69.089165 39.069622
+v 18.951361 73.831627 44.320717
+v 19.069777 74.520134 44.320717
+v 19.072826 74.537865 44.320717
+v 17.017822 62.589306 32.013760
+v 17.840479 67.372536 35.989193
+v 17.761614 66.913979 39.069622
+v 18.005383 62.431606 32.013760
+v 20.060181 74.378967 44.320717
+v 19.123005 68.929878 39.069622
+v 20.056984 74.360382 44.320717
+v 19.938578 73.671928 44.320717
+v 19.123005 68.929878 39.613865
+v 18.827951 67.214325 35.989193
+v 18.748936 66.754898 39.069622
+v 18.748936 66.754898 35.989193
+v 35.493408 62.579510 35.989193
+v 36.247662 64.653992 39.069622
+v 38.142200 69.864685 44.320717
+v 38.130859 69.833488 44.320717
+v 37.892117 69.176857 44.320717
+v 36.247662 64.653992 39.613865
+v 35.657612 63.031128 35.989193
+v 35.493408 62.579510 39.069622
+v 33.998997 58.469311 32.013760
+v 34.944683 58.143780 32.013760
+v 37.192738 64.326775 39.069622
+v 37.192738 64.326775 39.613865
+v 38.836952 68.848984 44.320717
+v 39.075661 69.505524 44.320717
+v 39.087219 69.537308 44.320717
+v 36.438602 62.252621 35.989193
+v 36.603012 62.704803 35.989193
+v 36.438602 62.252621 39.069622
+v 46.754646 57.924988 35.989193
+v 47.768436 59.885654 39.069622
+v 50.318012 64.816521 44.320717
+v 50.299641 64.780983 44.320717
+v 49.978745 64.160385 44.320717
+v 47.768436 59.885654 39.613865
+v 46.978504 58.357929 35.989193
+v 46.754646 57.924988 39.069622
+v 44.749184 54.046436 32.013760
+v 45.643959 53.599693 32.013760
+v 48.662552 59.437637 39.069622
+v 48.662552 59.437637 39.613865
+v 50.872566 63.711788 44.320717
+v 51.193417 64.332321 44.320717
+v 51.211960 64.368179 44.320717
+v 47.648911 57.477257 35.989193
+v 47.872921 57.910492 35.989193
+v 47.648911 57.477257 39.069622
+v 57.458439 51.624229 35.989193
+v 66.870644 43.856510 35.989193
+v 68.414810 45.433182 39.613865
+v 68.414810 45.433182 39.069622
+v 71.781502 48.870747 44.320717
+v 72.270287 49.369816 44.320717
+v 72.299561 49.399712 44.320717
+v 63.817417 40.739010 32.013756
+v 67.212952 44.206020 35.989193
+v 66.870644 43.856510 39.069622
+v 64.526802 40.034149 32.013756
+v 73.009735 48.695660 44.320717
+v 69.124863 44.729004 39.069622
+v 72.980644 48.665958 44.320717
+v 72.491829 48.166851 44.320717
+v 69.124863 44.729004 39.613865
+v 67.922684 43.501518 35.989189
+v 67.580559 43.152191 39.069618
+v 67.580559 43.152191 35.989189
+v 74.769295 34.609875 35.989189
+v 76.561417 35.897869 39.069618
+v 81.065414 39.134869 44.320713
+v 81.035995 39.113731 44.320713
+v 80.468735 38.706039 44.320713
+v 76.561417 35.897869 39.613861
+v 75.161972 34.892090 35.989189
+v 74.769295 34.609875 39.069618
+v 71.221146 32.059830 32.013756
+v 71.790161 31.237309 32.013756
+v 77.132393 35.076756 39.069618
+v 77.132393 35.076756 39.613861
+v 81.040558 37.885536 44.320713
+v 81.607941 38.293312 44.320713
+v 81.636894 38.314117 44.320713
+v 75.339828 33.788445 35.989189
+v 75.732086 34.070358 35.989189
+v 75.339828 33.788445 39.069618
+v 79.842392 26.076963 35.989189
+v 83.144753 17.906395 35.989189
+v 85.294205 18.430294 39.613861
+v 85.294205 18.430294 39.069618
+v 89.979355 19.572233 44.320713
+v 90.659431 19.737991 44.320713
+v 90.678673 19.742682 44.320713
+v 78.872772 16.865162 32.013756
+v 83.600227 18.017410 35.989189
+v 83.144753 17.906395 39.069618
+v 79.175064 15.909566 32.013756
+v 90.969124 18.784199 44.320713
+v 85.590446 17.473225 39.069618
+v 90.950790 18.779730 44.320713
+v 90.271294 18.614113 44.320713
+v 85.590446 17.473225 39.613861
+v 83.897202 17.060520 35.989189
+v 83.443207 16.949865 39.069618
+v 83.443207 16.949865 35.989189
+v 85.564117 6.820087 35.989189
+v 87.756157 7.075691 39.069618
+v 93.237061 7.714793 44.320713
+v 93.229248 7.713882 44.320713
+v 92.535393 7.632975 44.320713
+v 87.756157 7.075691 39.613861
+v 86.016312 6.872816 35.989189
+v 85.564117 6.820087 39.069618
+v 81.196152 6.310760 32.013756
+v 81.303871 5.316545 32.013756
+v 87.865860 6.081707 39.069618
+v 87.865860 6.081707 39.613861
+v 92.645546 6.639043 44.320713
+v 93.339462 6.719957 44.320713
+v 93.346268 6.720751 44.320713
+v 85.673592 5.826077 35.989189
+v 86.124702 5.878680 35.989189
+v 85.673592 5.826077 39.069618
+v 85.970749 -0.447604 39.069618
+v 25.484203 -73.375977 44.320709
+v 43.720016 -67.822227 44.320709
+v 61.669674 -58.199821 44.320709
+v 62.003246 -57.114243 44.320709
+v 76.378479 -45.146999 44.320709
+v 86.542221 -30.066467 44.320713
+v 86.390961 -28.789391 44.320713
+v 91.724869 -16.069696 44.320713
+v 93.687569 -0.506829 44.320713
+v 92.989037 -0.501468 44.320713
+v 88.177567 -0.464541 39.613861
+v 88.177567 -0.464541 39.069618
+v 86.554886 -3.408113 39.069618
+v 87.747459 -3.541437 39.069618
+v 86.688210 -2.215542 39.069618
+v 87.880783 -2.348866 39.069618
+v 85.592918 -15.814242 39.069618
+v 84.456985 -15.427389 39.069618
+v 84.843842 -14.291456 39.069618
+v 85.979774 -14.678308 39.069618
+v 87.007095 -9.737949 39.069618
+v 85.836327 -9.474686 39.069618
+v 86.099586 -8.303920 39.069618
+v 87.270355 -8.567183 39.069618
+v 82.018127 -26.779999 39.613861
+v 82.018127 -26.779999 39.069618
+v 77.707352 -32.699673 39.069618
+v 76.733490 -31.998528 39.069618
+v 78.408493 -31.725819 39.069618
+v 80.012268 -25.858723 39.069618
+v 77.434639 -31.024672 39.069618
+v 79.858154 -26.739319 39.069618
+v 80.893417 -27.346136 39.069618
+v 80.464973 -25.704054 39.069618
+v 81.500237 -26.310871 39.069618
+v 82.449623 -21.200796 39.069618
+v 83.539650 -21.702639 39.069618
+v 82.951462 -20.110771 39.069618
+v 84.041489 -20.612614 39.069618
+v 69.166100 -41.622269 39.046009
+v 69.166100 -41.622269 39.069618
+v 69.977112 -40.735226 39.046009
+v 73.133705 -36.948513 39.046009
+v 69.977112 -40.735226 39.069618
+v 73.133705 -36.948513 39.069618
+v 73.192482 -36.872288 39.046009
+v 73.192482 -36.872288 39.069618
+v 69.939125 -42.413418 39.069618
+v 70.797432 -41.574772 39.069618
+v 74.037392 -37.729816 39.069618
+v 73.914452 -36.037220 39.069618
+v 74.822220 -36.822048 39.069618
+v 59.194225 -53.207527 39.613857
+v 59.194225 -53.207527 39.069614
+v 50.262779 -57.475101 39.069614
+v 49.742214 -56.471565 39.069614
+v 51.327995 -56.922546 39.069614
+v 55.584789 -54.268444 39.069614
+v 55.027576 -53.353485 39.069614
+v 50.793781 -55.892696 39.069614
+v 56.033031 -52.697395 39.069614
+v 56.609688 -53.644279 39.069614
+v 60.060116 -49.837914 39.069614
+v 60.665844 -50.688587 39.069614
+v 61.643353 -49.992546 39.069614
+v 65.465553 -46.735748 39.069614
+v 64.790451 -45.924782 39.069614
+v 61.010540 -49.103828 39.069614
+v 65.676186 -45.113159 39.069614
+v 66.387810 -45.967995 39.069614
+v 49.742214 -56.471565 39.046005
+v 50.793781 -55.892696 39.046005
+v 55.027576 -53.353485 39.046005
+v 56.033031 -52.697395 39.046005
+v 60.060116 -49.837914 39.046005
+v 61.010540 -49.103828 39.046005
+v 64.790451 -45.924782 39.046005
+v 65.676186 -45.113159 39.046005
+v 39.037083 -62.777531 39.069614
+v 38.626053 -61.650124 39.069614
+v 40.164494 -62.366501 39.069614
+v 44.736046 -60.310436 39.069614
+v 39.753460 -61.239090 39.069614
+v 44.254574 -59.211262 39.069614
+v 45.353752 -58.729790 39.069614
+v 45.835220 -59.828964 39.069614
+v 21.186155 -68.005852 39.069614
+v 20.982563 -66.823250 39.069614
+v 22.165165 -66.619659 39.069614
+v 22.368757 -67.802261 39.069614
+v 27.236742 -66.621651 39.069614
+v 26.964590 -65.452919 39.069614
+v 33.195145 -64.880028 39.069614
+v 28.133322 -65.180763 39.069614
+v 28.405474 -66.349495 39.069614
+v 32.853870 -63.729580 39.069614
+v 34.004322 -63.388309 39.069614
+v 34.345592 -64.538757 39.069614
+v 8.829425 -68.515175 39.069614
+v 8.897084 -69.713264 39.069614
+v 15.065881 -69.035614 39.069614
+v 10.027516 -68.447517 39.069614
+v 10.095175 -69.645607 39.069614
+v 14.930408 -67.843285 39.069614
+v 16.122736 -67.707817 39.069614
+v 16.258209 -68.900146 39.069614
+v -3.438015 -68.819641 39.069614
+v -3.505674 -70.017731 39.069614
+v -2.239924 -68.887299 39.069614
+v -2.307583 -70.085388 39.069614
+v 2.700000 -70.040382 39.069614
+v 2.700000 -68.840378 39.069614
+v 3.900000 -68.840378 39.069614
+v 3.900000 -70.040382 39.069614
+v -15.864440 -68.922012 39.069614
+v -15.660848 -67.739410 39.069614
+v -14.681837 -69.125610 39.069614
+v -9.700402 -69.645241 39.069614
+v -14.478245 -67.943001 39.069614
+v -9.564930 -68.452911 39.069614
+v -8.372602 -68.588387 39.069614
+v -8.508074 -69.780716 39.069614
+v -33.963741 -64.627174 39.069614
+v -33.552708 -63.499767 39.069614
+v -32.836330 -65.038208 39.069614
+v -28.018122 -66.415749 39.069614
+v -32.425297 -63.910797 39.069614
+v -27.676849 -65.265305 39.069614
+v -21.977451 -67.846336 39.069614
+v -26.526402 -65.606575 39.069614
+v -26.867672 -66.757027 39.069614
+v -21.705299 -66.677605 39.069614
+v -20.536568 -66.949760 39.069614
+v -20.808720 -68.118492 39.069614
+v -45.469318 -59.961613 39.069614
+v -44.916759 -58.896397 39.069614
+v -44.404106 -60.514168 39.069614
+v -39.789761 -62.477055 39.069614
+v -43.851547 -59.448956 39.069614
+v -39.308289 -61.377880 39.069614
+v -38.209114 -61.859352 39.069614
+v -38.690582 -62.958527 39.069614
+v -61.897316 -57.936905 44.320709
+v -61.495491 -57.365486 44.320709
+v -58.727814 -53.429523 39.613857
+v -58.727814 -53.429523 39.069614
+v -66.076782 -46.187305 39.069614
+v -65.276215 -45.367981 39.069614
+v -65.218475 -47.025948 39.069614
+v -61.315403 -50.190636 39.069614
+v -60.591621 -49.321194 39.069614
+v -64.385178 -46.173119 39.069614
+v -59.636501 -50.049473 39.069614
+v -60.393147 -50.958385 39.069614
+v -55.598209 -52.881470 39.069614
+v -56.267044 -53.820770 39.069614
+v -55.289536 -54.516811 39.069614
+v -50.972744 -57.077190 39.069614
+v -54.593494 -53.539303 39.069614
+v -50.348579 -56.052292 39.069614
+v -49.323681 -56.676460 39.069614
+v -49.947845 -57.701359 39.069614
+v -54.724884 -53.445744 39.069614
+v -65.276215 -45.367981 39.046005
+v -64.385178 -46.173119 39.046005
+v -60.591621 -49.321194 39.046005
+v -59.636501 -50.049473 39.046005
+v -55.598209 -52.881470 39.046005
+v -54.724884 -53.445744 39.046005
+v -69.599876 -41.031662 39.046009
+v -69.599876 -41.031662 39.069618
+v -69.535286 -41.102360 39.046009
+v -69.535286 -41.102360 39.069618
+v -74.552193 -37.082020 39.069618
+v -73.578339 -36.380875 39.069618
+v -73.851044 -38.055874 39.069618
+v -70.505661 -41.814777 39.069618
+v -72.877190 -37.354729 39.069618
+v -68.813065 -41.937717 39.069618
+v -69.720833 -42.722546 39.069618
+v -86.850204 -29.313307 44.320713
+v -86.216675 -29.018703 44.320713
+v -81.852592 -26.990068 39.613861
+v -81.852592 -26.990068 39.069618
+v -83.852081 -20.925943 39.069618
+v -82.716148 -20.539089 39.069618
+v -83.465233 -22.061876 39.069618
+v -80.191330 -26.105907 39.069618
+v -79.850731 -26.059986 39.069618
+v -82.329292 -21.675024 39.069618
+v -81.281357 -26.607750 39.069618
+v -79.689491 -27.195932 39.069618
+v -80.779510 -27.697775 39.069618
+v -77.127480 -31.398010 39.069618
+v -78.162743 -32.004826 39.069618
+v -76.520660 -32.433273 39.069618
+v -77.555923 -33.040089 39.069618
+v -85.954933 -8.774680 39.069618
+v -87.147499 -8.908004 39.069618
+v -85.821609 -9.967251 39.069618
+v -87.014175 -10.100574 39.069618
+v -85.822403 -15.006393 39.069618
+v -84.651642 -14.743131 39.069618
+v -84.388374 -15.913897 39.069618
+v -85.559143 -16.177160 39.069618
+v -23.423742 73.795265 44.320717
+v -49.415874 65.300964 44.320717
+v -62.168686 56.996964 44.320717
+v -67.195091 54.033649 44.320717
+v -80.092865 40.540497 44.320713
+v -86.246254 29.088274 44.320713
+v -88.750114 25.191818 44.320713
+v -92.972054 9.775893 44.320713
+v -86.554886 3.408109 39.069618
+v -87.747459 3.541433 39.069618
+v -87.794739 -2.700002 39.069618
+v -86.688210 2.215538 39.069618
+v -87.880783 2.348862 39.069618
+v -86.594734 -2.700002 39.069618
+v -86.594734 -3.900002 39.069618
+v -87.794739 -3.900002 39.069618
+v -85.592918 15.814239 39.069618
+v -84.456985 15.427385 39.069618
+v -84.843842 14.291452 39.069618
+v -85.979774 14.678305 39.069618
+v -87.007095 9.737946 39.069618
+v -85.836327 9.474682 39.069618
+v -86.099586 8.303916 39.069618
+v -87.270355 8.567180 39.069618
+v -81.883316 27.057474 39.613861
+v -81.883316 27.057474 39.069618
+v -77.707352 32.699673 39.069618
+v -76.733490 31.998524 39.069618
+v -78.408493 31.725815 39.069618
+v -79.882004 26.126379 39.069618
+v -77.434639 31.024668 39.069618
+v -79.858154 26.739315 39.069618
+v -80.893417 27.346132 39.069618
+v -80.464973 25.704050 39.069618
+v -81.500237 26.310867 39.069618
+v -82.449623 21.200792 39.069618
+v -83.539650 21.702635 39.069618
+v -82.951462 20.110767 39.069618
+v -84.041489 20.612610 39.069618
+v -69.166100 41.622269 39.046009
+v -69.166100 41.622269 39.069618
+v -69.977112 40.735226 39.046009
+v -73.133705 36.948513 39.046009
+v -69.977112 40.735226 39.069618
+v -73.133705 36.948513 39.069618
+v -73.192482 36.872288 39.046009
+v -73.192482 36.872288 39.069618
+v -69.939125 42.413418 39.069618
+v -70.797432 41.574772 39.069618
+v -74.037392 37.729816 39.069618
+v -73.914452 36.037220 39.069618
+v -74.822220 36.822048 39.069618
+v -59.350166 53.097099 39.613865
+v -59.350166 53.097099 39.069622
+v -50.262779 57.475101 39.069622
+v -49.742214 56.471565 39.069622
+v -51.327995 56.922546 39.069622
+v -55.584789 54.268444 39.069622
+v -55.027576 53.353485 39.069622
+v -50.793781 55.892696 39.069622
+v -56.033031 52.697395 39.069622
+v -56.609688 53.644279 39.069622
+v -60.060116 49.837914 39.069622
+v -60.665844 50.688587 39.069622
+v -61.643353 49.992546 39.069622
+v -65.465553 46.735748 39.069622
+v -64.790451 45.924782 39.069622
+v -61.010540 49.103828 39.069622
+v -65.676186 45.113159 39.069622
+v -66.387810 45.967995 39.069622
+v -49.742214 56.471565 39.046013
+v -50.793781 55.892696 39.046013
+v -55.027576 53.353485 39.046013
+v -56.033031 52.697395 39.046013
+v -60.060116 49.837914 39.046013
+v -61.010540 49.103828 39.046013
+v -64.790451 45.924782 39.046013
+v -65.676186 45.113159 39.046013
+v -39.037083 62.777531 39.069622
+v -38.626053 61.650124 39.069622
+v -40.164494 62.366501 39.069622
+v -44.736046 60.310436 39.069622
+v -39.753460 61.239090 39.069622
+v -44.254574 59.211262 39.069622
+v -45.353752 58.729790 39.069622
+v -45.835220 59.828964 39.069622
+v -21.186155 68.005852 39.069622
+v -20.982563 66.823250 39.069622
+v -22.165165 66.619659 39.069622
+v -22.368757 67.802261 39.069622
+v -27.236742 66.621651 39.069622
+v -26.964590 65.452919 39.069622
+v -33.195145 64.880028 39.069622
+v -28.133322 65.180763 39.069622
+v -28.405474 66.349495 39.069622
+v -32.853870 63.729580 39.069622
+v -34.004322 63.388309 39.069622
+v -34.345592 64.538757 39.069622
+v -8.829425 68.515175 39.069622
+v -8.897084 69.713264 39.069622
+v -15.065881 69.035614 39.069622
+v -10.027516 68.447517 39.069622
+v -10.095175 69.645607 39.069622
+v -14.930408 67.843285 39.069622
+v -16.122736 67.707817 39.069622
+v -16.258209 68.900146 39.069622
+v 3.438015 68.819641 39.069622
+v 3.505674 70.017731 39.069622
+v 2.239924 68.887299 39.069622
+v 2.307583 70.085388 39.069622
+v -2.700000 70.040382 39.069622
+v -2.700000 68.840378 39.069622
+v -3.900000 68.840378 39.069622
+v -3.900000 70.040382 39.069622
+v 15.864440 68.922012 39.069622
+v 15.660848 67.739410 39.069622
+v 14.681837 69.125610 39.069622
+v 9.700402 69.645241 39.069622
+v 14.478245 67.943001 39.069622
+v 9.564930 68.452911 39.069622
+v 8.372602 68.588387 39.069622
+v 8.508074 69.780716 39.069622
+v 33.963741 64.627174 39.069622
+v 33.552708 63.499767 39.069622
+v 32.836330 65.038208 39.069622
+v 28.018122 66.415749 39.069622
+v 32.425297 63.910797 39.069622
+v 27.676849 65.265305 39.069622
+v 21.977451 67.846336 39.069622
+v 26.526402 65.606575 39.069622
+v 26.867672 66.757027 39.069622
+v 21.705299 66.677605 39.069622
+v 20.536568 66.949760 39.069622
+v 20.808720 68.118492 39.069622
+v 45.469318 59.961613 39.069622
+v 44.916759 58.896397 39.069622
+v 44.404106 60.514168 39.069622
+v 39.789761 62.477055 39.069622
+v 43.851547 59.448956 39.069622
+v 39.308289 61.377880 39.069622
+v 38.209114 61.859352 39.069622
+v 38.690582 62.958527 39.069622
+v 61.897316 57.936897 44.320717
+v 61.495491 57.365479 44.320717
+v 58.727814 53.429523 39.613865
+v 58.727814 53.429523 39.069622
+v 66.076782 46.187305 39.069622
+v 65.276215 45.367981 39.069622
+v 65.218475 47.025948 39.069622
+v 61.315403 50.190636 39.069622
+v 60.591621 49.321194 39.069622
+v 64.385178 46.173119 39.069622
+v 59.636501 50.049473 39.069622
+v 60.393147 50.958385 39.069622
+v 55.598209 52.881470 39.069622
+v 56.267044 53.820770 39.069622
+v 55.289536 54.516811 39.069622
+v 50.972744 57.077190 39.069622
+v 54.593494 53.539303 39.069622
+v 50.348579 56.052292 39.069622
+v 49.323681 56.676460 39.069622
+v 49.947845 57.701359 39.069622
+v 54.724884 53.445744 39.069622
+v 65.276215 45.367981 39.046013
+v 64.385178 46.173119 39.046013
+v 60.591621 49.321194 39.046013
+v 59.636501 50.049473 39.046013
+v 55.598209 52.881470 39.046013
+v 54.724884 53.445744 39.046013
+v 69.599876 41.031662 39.046009
+v 69.599876 41.031662 39.069618
+v 69.535286 41.102360 39.046009
+v 69.535286 41.102360 39.069618
+v 74.552193 37.082020 39.069618
+v 73.578339 36.380875 39.069618
+v 73.851044 38.055874 39.069618
+v 70.505661 41.814777 39.069618
+v 72.877190 37.354729 39.069618
+v 68.813065 41.937717 39.069618
+v 69.720833 42.722546 39.069618
+v 86.857437 29.298464 44.320713
+v 86.222466 29.006826 44.320713
+v 81.848618 26.998167 39.613861
+v 81.848618 26.998167 39.069618
+v 83.852081 20.925940 39.069618
+v 82.716148 20.539085 39.069618
+v 83.465233 22.061872 39.069618
+v 80.191330 26.105904 39.069618
+v 79.842392 26.076963 39.069618
+v 82.329292 21.675020 39.069618
+v 81.281357 26.607746 39.069618
+v 79.689491 27.195929 39.069618
+v 80.779510 27.697771 39.069618
+v 77.127480 31.398006 39.069618
+v 78.162743 32.004826 39.069618
+v 76.520660 32.433273 39.069618
+v 77.555923 33.040089 39.069618
+v 85.954933 8.774676 39.069618
+v 87.147499 8.908000 39.069618
+v 85.821609 9.967247 39.069618
+v 87.014175 10.100571 39.069618
+v 85.822403 15.006390 39.069618
+v 84.651642 14.743127 39.069618
+v 84.388374 15.913893 39.069618
+v 85.559143 16.177156 39.069618
+v 86.594734 2.699998 39.069618
+v 87.794739 2.699998 39.069618
+v 86.594734 3.899998 39.069618
+v 87.794739 3.899998 39.069618
+v 93.687569 -0.506829 48.274822
+v 91.870766 15.337479 48.274822
+v 86.716644 29.585478 48.274822
+v 79.346558 41.404915 48.274822
+v 70.789864 50.780453 48.274826
+v 58.585163 60.135674 48.274826
+v 44.445290 67.444565 48.274826
+v 25.292433 73.369110 48.274826
+v 3.491938 75.959686 48.274826
+v -14.961328 75.123627 48.274826
+v -36.674446 70.387154 48.274826
+v -54.760918 62.515484 48.274826
+v -72.279327 49.477966 48.274826
+v -83.688477 35.211178 48.274822
+v -90.723671 19.664148 48.274822
+v -93.623985 2.998073 48.274822
+v -92.173828 -14.009275 48.274822
+v -86.837280 -29.339775 48.274822
+v -78.946976 -41.920464 48.274822
+v -69.744423 -51.733669 48.274818
+v -59.967720 -59.244274 48.274818
+v -46.577915 -66.527481 48.274818
+v -31.285460 -71.923645 48.274818
+v -10.652063 -75.546036 48.274818
+v 7.805005 -75.775131 48.274818
+v 25.269001 -73.421585 48.274818
+v 42.580093 -68.276733 48.274818
+v 59.648121 -59.555695 48.274818
+v 74.418396 -47.302799 48.274818
+v 84.934570 -33.088963 48.274822
+v 91.253586 -17.858418 48.274822
+v 93.035736 -9.336655 48.274822
+v 86.554886 -3.408113 39.346008
+v 87.747459 -3.541437 39.346008
+v 87.880783 -2.348866 39.346008
+v 86.688210 -2.215542 39.346008
+v 84.456985 -15.427389 39.346008
+v 85.592918 -15.814242 39.346008
+v 85.979774 -14.678308 39.346008
+v 84.843842 -14.291456 39.346008
+v 85.836327 -9.474686 39.346008
+v 87.007095 -9.737949 39.346008
+v 87.270355 -8.567183 39.346008
+v 86.099586 -8.303920 39.346008
+v 76.733490 -31.998528 39.346008
+v 77.707352 -32.699673 39.346008
+v 78.408493 -31.725819 39.346008
+v 77.434639 -31.024672 39.346008
+v 79.858154 -26.739319 39.346008
+v 80.893417 -27.346136 39.346008
+v 81.500237 -26.310871 39.346008
+v 80.464973 -25.704054 39.346008
+v 82.449623 -21.200796 39.346008
+v 83.539650 -21.702639 39.346008
+v 84.041489 -20.612614 39.346008
+v 82.951462 -20.110771 39.346008
+v 73.914452 -36.037220 39.346008
+v 73.129623 -36.944988 39.346008
+v 73.129623 -36.944988 39.046009
+v 74.037392 -37.729816 39.346008
+v 70.797432 -41.574772 39.346008
+v 69.958786 -40.716473 39.346008
+v 69.958786 -40.716473 39.046009
+v 69.100487 -41.555115 39.046009
+v 69.100487 -41.555115 39.346008
+v 69.939125 -42.413418 39.346008
+v 74.822220 -36.822048 39.346008
+v 49.710224 -56.409889 39.046005
+v 49.710224 -56.409889 39.346004
+v 50.262779 -57.475101 39.346004
+v 51.327995 -56.922546 39.346004
+v 50.775436 -55.857330 39.346004
+v 50.775436 -55.857330 39.046005
+v 54.960621 -53.243546 39.046005
+v 54.960621 -53.243546 39.346004
+v 55.584789 -54.268444 39.346004
+v 56.609688 -53.644279 39.346004
+v 55.985519 -52.619381 39.346004
+v 55.985519 -52.619381 39.046005
+v 59.969803 -49.711075 39.046005
+v 59.969803 -49.711075 39.346004
+v 60.665844 -50.688587 39.346004
+v 61.643353 -49.992546 39.346004
+v 60.947311 -49.015034 39.346004
+v 60.947311 -49.015034 39.046005
+v 64.697800 -45.813492 39.046005
+v 64.697800 -45.813492 39.346004
+v 65.465553 -46.735748 39.346004
+v 66.387810 -45.967995 39.346004
+v 65.620056 -45.045738 39.346004
+v 65.620056 -45.045738 39.046005
+v 38.626053 -61.650124 39.346004
+v 39.037083 -62.777531 39.346004
+v 40.164494 -62.366501 39.346004
+v 39.753460 -61.239090 39.346004
+v 44.254574 -59.211262 39.346004
+v 44.736046 -60.310436 39.346004
+v 45.835220 -59.828964 39.346004
+v 45.353752 -58.729790 39.346004
+v 20.982563 -66.823250 39.346004
+v 21.186155 -68.005852 39.346004
+v 22.368757 -67.802261 39.346004
+v 22.165165 -66.619659 39.346004
+v 32.853870 -63.729580 39.346004
+v 33.195145 -64.880028 39.346004
+v 34.345592 -64.538757 39.346004
+v 34.004322 -63.388309 39.346004
+v 26.964590 -65.452919 39.346004
+v 27.236742 -66.621651 39.346004
+v 28.405474 -66.349495 39.346004
+v 28.133322 -65.180763 39.346004
+v 8.829425 -68.515175 39.346004
+v 8.897084 -69.713264 39.346004
+v 10.095175 -69.645607 39.346004
+v 10.027516 -68.447517 39.346004
+v 14.930408 -67.843285 39.346004
+v 15.065881 -69.035614 39.346004
+v 16.258209 -68.900146 39.346004
+v 16.122736 -67.707817 39.346004
+v -3.438015 -68.819641 39.346004
+v -3.505674 -70.017731 39.346004
+v -2.307583 -70.085388 39.346004
+v -2.239924 -68.887299 39.346004
+v 2.700000 -68.840378 39.346004
+v 2.700000 -70.040382 39.346004
+v 3.900000 -70.040382 39.346004
+v 3.900000 -68.840378 39.346004
+v -15.660848 -67.739410 39.346004
+v -15.864440 -68.922012 39.346004
+v -14.681837 -69.125610 39.346004
+v -14.478245 -67.943001 39.346004
+v -9.564930 -68.452911 39.346004
+v -9.700402 -69.645241 39.346004
+v -8.508074 -69.780716 39.346004
+v -8.372602 -68.588387 39.346004
+v -33.552708 -63.499767 39.346004
+v -33.963741 -64.627174 39.346004
+v -32.836330 -65.038208 39.346004
+v -32.425297 -63.910797 39.346004
+v -27.676849 -65.265305 39.346004
+v -28.018122 -66.415749 39.346004
+v -26.867672 -66.757027 39.346004
+v -26.526402 -65.606575 39.346004
+v -21.705299 -66.677605 39.346004
+v -21.977451 -67.846336 39.346004
+v -20.808720 -68.118492 39.346004
+v -20.536568 -66.949760 39.346004
+v -44.916759 -58.896397 39.346004
+v -45.469318 -59.961613 39.346004
+v -44.404106 -60.514168 39.346004
+v -43.851547 -59.448956 39.346004
+v -39.308289 -61.377880 39.346004
+v -39.789761 -62.477055 39.346004
+v -38.690582 -62.958527 39.346004
+v -38.209114 -61.859352 39.346004
+v -65.238136 -45.329006 39.046005
+v -65.238136 -45.329006 39.346004
+v -66.076782 -46.187305 39.346004
+v -65.218475 -47.025948 39.346004
+v -64.379837 -46.167648 39.346004
+v -64.379837 -46.167648 39.046005
+v -60.547653 -49.268379 39.046005
+v -60.547653 -49.268379 39.346004
+v -61.315403 -50.190636 39.346004
+v -60.393147 -50.958385 39.346004
+v -59.625397 -50.036133 39.346004
+v -59.625397 -50.036133 39.046005
+v -55.571003 -52.843262 39.046005
+v -55.571003 -52.843262 39.346004
+v -56.267044 -53.820770 39.346004
+v -55.289536 -54.516811 39.346004
+v -54.593494 -53.539303 39.346004
+v -50.348579 -56.052292 39.346004
+v -49.323681 -56.676460 39.346004
+v -50.972744 -57.077190 39.346004
+v -49.947845 -57.701359 39.346004
+v -68.813065 -41.937717 39.346008
+v -69.597893 -41.029945 39.346008
+v -69.597893 -41.029945 39.046009
+v -70.505661 -41.814777 39.346008
+v -69.720833 -42.722546 39.346008
+v -73.578339 -36.380875 39.346008
+v -74.552193 -37.082020 39.346008
+v -73.851044 -38.055874 39.346008
+v -72.877190 -37.354729 39.346008
+v -80.191330 -26.105907 39.346008
+v -81.281357 -26.607750 39.346008
+v -80.779510 -27.697775 39.346008
+v -79.689491 -27.195932 39.346008
+v -82.716148 -20.539089 39.346008
+v -83.852081 -20.925943 39.346008
+v -83.465233 -22.061876 39.346008
+v -82.329292 -21.675024 39.346008
+v -77.127480 -31.398010 39.346008
+v -78.162743 -32.004826 39.346008
+v -77.555923 -33.040089 39.346008
+v -76.520660 -32.433273 39.346008
+v -85.954933 -8.774680 39.346008
+v -87.147499 -8.908004 39.346008
+v -87.014175 -10.100574 39.346008
+v -85.821609 -9.967251 39.346008
+v -84.651642 -14.743131 39.346008
+v -85.822403 -15.006393 39.346008
+v -85.559143 -16.177160 39.346008
+v -84.388374 -15.913897 39.346008
+v -86.554886 3.408109 39.346008
+v -87.747459 3.541433 39.346008
+v -87.880783 2.348862 39.346008
+v -86.688210 2.215538 39.346008
+v -86.594734 -2.700002 39.346008
+v -87.794739 -2.700002 39.346008
+v -87.794739 -3.900002 39.346008
+v -86.594734 -3.900002 39.346008
+v -84.456985 15.427385 39.346008
+v -85.592918 15.814239 39.346008
+v -85.979774 14.678305 39.346008
+v -84.843842 14.291452 39.346008
+v -85.836327 9.474682 39.346008
+v -87.007095 9.737946 39.346008
+v -87.270355 8.567180 39.346008
+v -86.099586 8.303916 39.346008
+v -76.733490 31.998524 39.346008
+v -77.707352 32.699673 39.346008
+v -78.408493 31.725815 39.346008
+v -77.434639 31.024668 39.346008
+v -79.858154 26.739315 39.346008
+v -80.893417 27.346132 39.346008
+v -81.500237 26.310867 39.346008
+v -80.464973 25.704050 39.346008
+v -82.449623 21.200792 39.346008
+v -83.539650 21.702635 39.346008
+v -84.041489 20.612610 39.346008
+v -82.951462 20.110767 39.346008
+v -73.914452 36.037220 39.346008
+v -73.129623 36.944988 39.346008
+v -73.129623 36.944988 39.046009
+v -74.037392 37.729816 39.346008
+v -70.797432 41.574772 39.346008
+v -69.958786 40.716473 39.346008
+v -69.958786 40.716473 39.046009
+v -69.100487 41.555115 39.046009
+v -69.100487 41.555115 39.346008
+v -69.939125 42.413418 39.346008
+v -74.822220 36.822048 39.346008
+v -49.710224 56.409889 39.046013
+v -49.710224 56.409889 39.346012
+v -50.262779 57.475101 39.346012
+v -51.327995 56.922546 39.346012
+v -50.775436 55.857330 39.346012
+v -50.775436 55.857330 39.046013
+v -54.960621 53.243546 39.046013
+v -54.960621 53.243546 39.346012
+v -55.584789 54.268444 39.346012
+v -56.609688 53.644279 39.346012
+v -55.985519 52.619381 39.346012
+v -55.985519 52.619381 39.046013
+v -59.969803 49.711075 39.046013
+v -59.969803 49.711075 39.346012
+v -60.665844 50.688587 39.346012
+v -61.643353 49.992546 39.346012
+v -60.947311 49.015034 39.346012
+v -60.947311 49.015034 39.046013
+v -64.697800 45.813492 39.046013
+v -64.697800 45.813492 39.346012
+v -65.465553 46.735748 39.346012
+v -66.387810 45.967995 39.346012
+v -65.620056 45.045738 39.346012
+v -65.620056 45.045738 39.046013
+v -38.626053 61.650124 39.346012
+v -39.037083 62.777531 39.346012
+v -40.164494 62.366501 39.346012
+v -39.753460 61.239090 39.346012
+v -44.254574 59.211262 39.346012
+v -44.736046 60.310436 39.346012
+v -45.835220 59.828964 39.346012
+v -45.353752 58.729790 39.346012
+v -20.982563 66.823250 39.346012
+v -21.186155 68.005852 39.346012
+v -22.368757 67.802261 39.346012
+v -22.165165 66.619659 39.346012
+v -32.853870 63.729580 39.346012
+v -33.195145 64.880028 39.346012
+v -34.345592 64.538757 39.346012
+v -34.004322 63.388309 39.346012
+v -26.964590 65.452919 39.346012
+v -27.236742 66.621651 39.346012
+v -28.405474 66.349495 39.346012
+v -28.133322 65.180763 39.346012
+v -8.829425 68.515175 39.346012
+v -8.897084 69.713264 39.346012
+v -10.095175 69.645607 39.346012
+v -10.027516 68.447517 39.346012
+v -14.930408 67.843285 39.346012
+v -15.065881 69.035614 39.346012
+v -16.258209 68.900146 39.346012
+v -16.122736 67.707817 39.346012
+v 3.438015 68.819641 39.346012
+v 3.505674 70.017731 39.346012
+v 2.307583 70.085388 39.346012
+v 2.239924 68.887299 39.346012
+v -2.700000 68.840378 39.346012
+v -2.700000 70.040382 39.346012
+v -3.900000 70.040382 39.346012
+v -3.900000 68.840378 39.346012
+v 15.660848 67.739410 39.346012
+v 15.864440 68.922012 39.346012
+v 14.681837 69.125610 39.346012
+v 14.478245 67.943001 39.346012
+v 9.564930 68.452911 39.346012
+v 9.700402 69.645241 39.346012
+v 8.508074 69.780716 39.346012
+v 8.372602 68.588387 39.346012
+v 33.552708 63.499767 39.346012
+v 33.963741 64.627174 39.346012
+v 32.836330 65.038208 39.346012
+v 32.425297 63.910797 39.346012
+v 27.676849 65.265305 39.346012
+v 28.018122 66.415749 39.346012
+v 26.867672 66.757027 39.346012
+v 26.526402 65.606575 39.346012
+v 21.705299 66.677605 39.346012
+v 21.977451 67.846336 39.346012
+v 20.808720 68.118492 39.346012
+v 20.536568 66.949760 39.346012
+v 44.916759 58.896397 39.346012
+v 45.469318 59.961613 39.346012
+v 44.404106 60.514168 39.346012
+v 43.851547 59.448956 39.346012
+v 39.308289 61.377880 39.346012
+v 39.789761 62.477055 39.346012
+v 38.690582 62.958527 39.346012
+v 38.209114 61.859352 39.346012
+v 65.238136 45.329006 39.046013
+v 65.238136 45.329006 39.346012
+v 66.076782 46.187305 39.346012
+v 65.218475 47.025948 39.346012
+v 64.379837 46.167648 39.346012
+v 64.379837 46.167648 39.046013
+v 60.547653 49.268379 39.046013
+v 60.547653 49.268379 39.346012
+v 61.315403 50.190636 39.346012
+v 60.393147 50.958385 39.346012
+v 59.625397 50.036133 39.346012
+v 59.625397 50.036133 39.046013
+v 55.571003 52.843262 39.046013
+v 55.571003 52.843262 39.346012
+v 56.267044 53.820770 39.346012
+v 55.289536 54.516811 39.346012
+v 54.593494 53.539303 39.346012
+v 49.323681 56.676460 39.346012
+v 50.348579 56.052292 39.346012
+v 50.972744 57.077190 39.346012
+v 49.947845 57.701359 39.346012
+v 68.813065 41.937717 39.346008
+v 69.597893 41.029945 39.346008
+v 69.597893 41.029945 39.046009
+v 70.505661 41.814777 39.346008
+v 69.720833 42.722546 39.346008
+v 73.578339 36.380875 39.346008
+v 74.552193 37.082020 39.346008
+v 73.851044 38.055874 39.346008
+v 72.877190 37.354729 39.346008
+v 80.191330 26.105904 39.346008
+v 81.281357 26.607746 39.346008
+v 80.779510 27.697771 39.346008
+v 79.689491 27.195929 39.346008
+v 82.716148 20.539085 39.346008
+v 83.852081 20.925940 39.346008
+v 83.465233 22.061872 39.346008
+v 82.329292 21.675020 39.346008
+v 77.127480 31.398006 39.346008
+v 78.162743 32.004826 39.346008
+v 77.555923 33.040089 39.346008
+v 76.520660 32.433273 39.346008
+v 85.954933 8.774676 39.346008
+v 87.147499 8.908000 39.346008
+v 87.014175 10.100571 39.346008
+v 85.821609 9.967247 39.346008
+v 84.651642 14.743127 39.346008
+v 85.822403 15.006390 39.346008
+v 85.559143 16.177156 39.346008
+v 84.388374 15.913893 39.346008
+v 86.594734 2.699998 39.346008
+v 87.794739 2.699998 39.346008
+v 87.794739 3.899998 39.346008
+v 86.594734 3.899998 39.346008
+v 93.274063 -0.503655 48.274822
+v 91.457047 15.289531 48.274822
+v 86.305145 29.484779 48.274822
+v 78.942131 41.252430 48.274822
+v 70.396507 50.581177 48.274826
+v 58.207840 59.884666 48.274826
+v 44.081921 67.147667 48.274826
+v 24.938196 73.021431 48.274826
+v 3.140965 75.555679 48.274826
+v -15.249976 74.671791 48.274826
+v -36.948601 69.862679 48.274826
+v -54.952732 61.931622 48.274826
+v -70.727165 50.389290 48.274826
+v -82.309273 36.625053 48.274822
+v -89.528076 21.969513 48.274822
+v -92.956276 6.533831 48.274822
+v -92.559654 -9.603173 48.274822
+v -88.467232 -24.656588 48.274822
+v -81.693405 -37.431389 48.274822
+v -73.390442 -47.659477 48.274818
+v -64.353806 -55.639553 48.274818
+v -51.833572 -63.537663 48.274818
+v -37.474033 -69.619499 48.274818
+v -18.066238 -74.255798 48.274818
+v 0.307383 -75.598206 48.274818
+v 22.333014 -73.581161 48.274818
+v 46.832596 -66.044899 48.274818
+v 64.611435 -55.552139 48.274818
+v 78.303215 -42.192638 48.274822
+v 87.683479 -26.656624 48.274822
+v 91.755058 -14.122890 48.274822
+v 86.774185 -2.828891 39.346008
+v 86.953056 -3.237905 39.346008
+v 87.396706 -3.287504 39.346008
+v 87.038963 -2.469475 39.346008
+v 87.661491 -2.928088 39.346008
+v 87.482613 -2.519073 39.346008
+v 84.795799 -14.908935 39.346008
+v 84.882454 -15.346860 39.346008
+v 85.305038 -15.490774 39.346008
+v 85.131721 -14.614923 39.346008
+v 85.640961 -15.196764 39.346008
+v 85.554306 -14.758839 39.346008
+v 86.117798 -8.922997 39.346008
+v 86.250755 -9.349156 39.346008
+v 86.686295 -9.447094 39.346008
+v 86.420387 -8.594775 39.346008
+v 86.988884 -9.118873 39.346008
+v 86.855927 -8.692714 39.346008
+v 77.208702 -31.601337 39.346008
+v 77.163956 -32.045506 39.346008
+v 77.526245 -32.306339 39.346008
+v 77.615738 -31.418005 39.346008
+v 77.933281 -32.123009 39.346008
+v 77.978027 -31.678841 39.346008
+v 80.294060 -26.299351 39.346008
+v 80.291130 -26.745758 39.346008
+v 80.676262 -26.971502 39.346008
+v 80.682129 -26.078688 39.346008
+v 81.064331 -26.750839 39.346008
+v 81.067261 -26.304432 39.346008
+v 82.840050 -20.720011 39.346008
+v 82.881126 -21.164536 39.346008
+v 83.286629 -21.351229 39.346008
+v 83.204483 -20.462181 39.346008
+v 83.651062 -21.093397 39.346008
+v 83.609985 -20.648872 39.346008
+v 73.638222 -36.591549 39.346008
+v 73.554222 -37.029995 39.346008
+v 73.891922 -37.321960 39.346008
+v 74.059921 -36.445076 39.346008
+v 74.313629 -37.175484 39.346008
+v 74.397629 -36.737041 39.346008
+v 69.636971 -41.245644 39.346008
+v 69.516441 -41.675484 39.346008
+v 69.828430 -41.994785 39.346008
+v 70.069489 -41.135105 39.346008
+v 70.260948 -41.884243 39.346008
+v 70.381470 -41.454407 39.346008
+v 50.313549 -56.269943 39.346004
+v 50.073143 -56.646099 39.346004
+v 50.278706 -57.042374 39.346004
+v 50.759514 -56.290062 39.346004
+v 50.724667 -57.062492 39.346004
+v 50.965073 -56.686337 39.346004
+v 55.552956 -53.062637 39.346004
+v 55.338860 -53.454365 39.346004
+v 55.571060 -53.835640 39.346004
+v 55.999252 -53.052185 39.346004
+v 56.017353 -53.825191 39.346004
+v 56.231449 -53.433460 39.346004
+v 60.547642 -49.488163 39.346004
+v 60.362179 -49.894234 39.346004
+v 60.621117 -50.257881 39.346004
+v 60.992039 -49.445740 39.346004
+v 61.065514 -50.215458 39.346004
+v 61.250973 -49.809387 39.346004
+v 65.257195 -45.547649 39.346004
+v 65.102875 -45.966549 39.346004
+v 65.388489 -46.309639 39.346004
+v 65.697128 -45.471848 39.346004
+v 65.828423 -46.233837 39.346004
+v 65.982742 -45.814941 39.346004
+v 39.242363 -61.588898 39.346004
+v 38.955597 -61.931030 39.346004
+v 39.108505 -62.350441 39.346004
+v 39.682041 -61.666180 39.346004
+v 39.548183 -62.427723 39.346004
+v 39.834949 -62.085594 39.346004
+v 44.865784 -59.111206 39.346004
+v 44.601215 -59.470776 39.346004
+v 44.780331 -59.879684 39.346004
+v 45.309467 -59.160542 39.346004
+v 45.224014 -59.929024 39.346004
+v 45.488583 -59.569450 39.346004
+v 21.599920 -66.872810 39.346004
+v 21.256786 -67.158379 39.346004
+v 21.332525 -67.598320 39.346004
+v 22.018795 -67.027191 39.346004
+v 21.751400 -67.752701 39.346004
+v 22.094534 -67.467133 39.346004
+v 33.472775 -63.706184 39.346004
+v 33.165607 -64.030128 39.346004
+v 33.292568 -64.458107 39.346004
+v 33.906898 -63.810230 39.346004
+v 33.726692 -64.562149 39.346004
+v 34.033855 -64.238213 39.346004
+v 27.583786 -65.466423 39.346004
+v 27.257875 -65.771492 39.346004
+v 27.359119 -66.206284 39.346004
+v 28.010944 -65.596130 39.346004
+v 27.786276 -66.335991 39.346004
+v 28.112188 -66.030922 39.346004
+v 9.437130 -68.634682 39.346004
+v 9.063722 -68.879333 39.346004
+v 9.088891 -69.325043 39.346004
+v 9.835709 -68.835739 39.346004
+v 9.487470 -69.526100 39.346004
+v 9.860879 -69.281448 39.346004
+v 15.543911 -67.928154 39.346004
+v 15.184973 -68.193581 39.346004
+v 15.235371 -68.637146 39.346004
+v 15.953247 -68.106285 39.346004
+v 15.644706 -68.815277 39.346004
+v 16.003645 -68.549850 39.346004
+v -2.847629 -69.006805 39.346004
+v -3.246208 -69.207863 39.346004
+v -3.271378 -69.653572 39.346004
+v -2.474221 -69.251457 39.346004
+v -2.897969 -69.898224 39.346004
+v -2.499390 -69.697166 39.346004
+v 3.300000 -68.993965 39.346004
+v 2.913391 -69.217171 39.346004
+v 2.913391 -69.663589 39.346004
+v 3.686609 -69.217171 39.346004
+v 3.300000 -69.886795 39.346004
+v 3.686609 -69.663589 39.346004
+v -15.095603 -67.992561 39.346004
+v -15.514477 -68.146942 39.346004
+v -15.590216 -68.586891 39.346004
+v -14.752469 -68.278130 39.346004
+v -15.247082 -68.872452 39.346004
+v -14.828208 -68.718079 39.346004
+v -8.986104 -68.673256 39.346004
+v -9.395440 -68.851387 39.346004
+v -9.445838 -69.294952 39.346004
+v -8.627166 -68.938683 39.346004
+v -9.086900 -69.560379 39.346004
+v -8.677564 -69.382240 39.346004
+v -33.041611 -63.849575 39.346004
+v -33.481285 -63.926857 39.346004
+v -33.634197 -64.346268 39.346004
+v -32.754841 -64.191704 39.346004
+v -33.347427 -64.688400 39.346004
+v -32.907753 -64.611115 39.346004
+v -27.145304 -65.583176 39.346004
+v -27.579428 -65.687225 39.346004
+v -27.706385 -66.115204 39.346004
+v -26.838137 -65.907120 39.346004
+v -27.399220 -66.439148 39.346004
+v -26.965096 -66.335106 39.346004
+v -21.155766 -66.963264 39.346004
+v -21.582922 -67.092972 39.346004
+v -21.684166 -67.527756 39.346004
+v -20.829853 -67.268333 39.346004
+v -21.358253 -67.832832 39.346004
+v -20.931097 -67.703117 39.346004
+v -44.454872 -59.309010 39.346004
+v -44.900837 -59.329124 39.346004
+v -45.106396 -59.725399 39.346004
+v -44.214470 -59.685165 39.346004
+v -44.865993 -60.101559 39.346004
+v -44.420029 -60.081440 39.346004
+v -38.820320 -61.759293 39.346004
+v -39.264004 -61.808632 39.346004
+v -39.443119 -62.217541 39.346004
+v -38.555752 -62.118866 39.346004
+v -39.178551 -62.577110 39.346004
+v -38.734867 -62.527775 39.346004
+v -64.916321 -45.858177 39.346004
+v -65.348839 -45.747639 39.346004
+v -65.660820 -46.066940 39.346004
+v -64.795792 -46.288017 39.346004
+v -65.540291 -46.496777 39.346004
+v -65.107780 -46.607315 39.346004
+v -60.184784 -49.770290 39.346004
+v -60.624718 -49.694485 39.346004
+v -60.910336 -50.037579 39.346004
+v -60.030464 -50.189186 39.346004
+v -60.756016 -50.456474 39.346004
+v -60.316082 -50.532280 39.346004
+v -55.171333 -53.316387 39.346004
+v -55.615730 -53.273968 39.346004
+v -55.874668 -53.637615 39.346004
+v -54.985874 -53.722458 39.346004
+v -55.689209 -54.043686 39.346004
+v -55.244812 -54.086105 39.346004
+v -49.916016 -56.495548 39.346004
+v -50.362309 -56.485096 39.346004
+v -50.594509 -56.866375 39.346004
+v -49.701920 -56.887276 39.346004
+v -50.380413 -57.258102 39.346004
+v -49.934116 -57.268555 39.346004
+v -69.321663 -41.584278 39.346008
+v -69.743362 -41.437801 39.346008
+v -70.081070 -41.729771 39.346008
+v -69.237663 -42.022720 39.346008
+v -69.997070 -42.168213 39.346008
+v -69.575363 -42.314690 39.346008
+v -73.352402 -36.957539 39.346008
+v -73.759438 -36.774204 39.346008
+v -74.121727 -37.035042 39.346008
+v -73.307655 -37.401707 39.346008
+v -74.076981 -37.479210 39.346008
+v -73.669945 -37.662544 39.346008
+v -80.079918 -26.715149 39.346008
+v -80.444351 -26.457317 39.346008
+v -80.849854 -26.644011 39.346008
+v -80.120987 -27.159672 39.346008
+v -80.890930 -27.088533 39.346008
+v -80.526497 -27.346365 39.346008
+v -82.668106 -21.156569 39.346008
+v -83.004028 -20.862558 39.346008
+v -83.426613 -21.006472 39.346008
+v -82.754761 -21.594494 39.346008
+v -83.513275 -21.444397 39.346008
+v -83.177345 -21.738409 39.346008
+v -76.956566 -31.993307 39.346008
+v -77.344635 -31.772644 39.346008
+v -77.729767 -31.998388 39.346008
+v -76.953636 -32.439713 39.346008
+v -77.726837 -32.444794 39.346008
+v -77.338768 -32.665459 39.346008
+v -86.040901 -9.388029 39.346008
+v -86.305679 -9.028613 39.346008
+v -86.749336 -9.078212 39.346008
+v -86.219772 -9.797044 39.346008
+v -86.928207 -9.487226 39.346008
+v -86.663429 -9.846642 39.346008
+v -84.669846 -15.362208 39.346008
+v -84.972435 -15.033987 39.346008
+v -85.407974 -15.131925 39.346008
+v -84.802803 -15.788367 39.346008
+v -85.540932 -15.558084 39.346008
+v -85.238342 -15.886305 39.346008
+v -86.774185 2.828887 39.346008
+v -86.953056 3.237901 39.346008
+v -87.396706 3.287500 39.346008
+v -87.038963 2.469471 39.346008
+v -87.661491 2.928084 39.346008
+v -87.482613 2.519069 39.346008
+v -86.748322 -3.300002 39.346008
+v -86.971527 -2.913393 39.346008
+v -87.417946 -2.913393 39.346008
+v -86.971527 -3.686611 39.346008
+v -87.641151 -3.300002 39.346008
+v -87.417946 -3.686611 39.346008
+v -84.795799 14.908931 39.346008
+v -84.882454 15.346856 39.346008
+v -85.305038 15.490770 39.346008
+v -85.131721 14.614920 39.346008
+v -85.640961 15.196760 39.346008
+v -85.554306 14.758835 39.346008
+v -86.117798 8.922993 39.346008
+v -86.250755 9.349153 39.346008
+v -86.686295 9.447090 39.346008
+v -86.420387 8.594771 39.346008
+v -86.988884 9.118869 39.346008
+v -86.855927 8.692710 39.346008
+v -77.208702 31.601334 39.346008
+v -77.163956 32.045506 39.346008
+v -77.526245 32.306339 39.346008
+v -77.615738 31.418001 39.346008
+v -77.933281 32.123009 39.346008
+v -77.978027 31.678837 39.346008
+v -80.294060 26.299347 39.346008
+v -80.291130 26.745754 39.346008
+v -80.676262 26.971498 39.346008
+v -80.682129 26.078684 39.346008
+v -81.064331 26.750835 39.346008
+v -81.067261 26.304428 39.346008
+v -82.840050 20.720007 39.346008
+v -82.881126 21.164532 39.346008
+v -83.286629 21.351225 39.346008
+v -83.204483 20.462177 39.346008
+v -83.651062 21.093393 39.346008
+v -83.609985 20.648869 39.346008
+v -73.638222 36.591549 39.346008
+v -73.554222 37.029995 39.346008
+v -73.891922 37.321960 39.346008
+v -74.059921 36.445076 39.346008
+v -74.313629 37.175484 39.346008
+v -74.397629 36.737041 39.346008
+v -69.636971 41.245644 39.346008
+v -69.516441 41.675484 39.346008
+v -69.828430 41.994785 39.346008
+v -70.069489 41.135105 39.346008
+v -70.260948 41.884243 39.346008
+v -70.381470 41.454407 39.346008
+v -50.313549 56.269943 39.346012
+v -50.073143 56.646099 39.346012
+v -50.278706 57.042374 39.346012
+v -50.759514 56.290062 39.346012
+v -50.724667 57.062492 39.346012
+v -50.965073 56.686337 39.346012
+v -55.552956 53.062637 39.346012
+v -55.338860 53.454365 39.346012
+v -55.571060 53.835640 39.346012
+v -55.999252 53.052185 39.346012
+v -56.017353 53.825191 39.346012
+v -56.231449 53.433460 39.346012
+v -60.547642 49.488163 39.346012
+v -60.362179 49.894234 39.346012
+v -60.621117 50.257881 39.346012
+v -60.992039 49.445740 39.346012
+v -61.065514 50.215458 39.346012
+v -61.250973 49.809387 39.346012
+v -65.257195 45.547649 39.346012
+v -65.102875 45.966549 39.346012
+v -65.388489 46.309639 39.346012
+v -65.697128 45.471848 39.346012
+v -65.828423 46.233837 39.346012
+v -65.982742 45.814941 39.346012
+v -39.242363 61.588898 39.346012
+v -38.955597 61.931030 39.346012
+v -39.108505 62.350441 39.346012
+v -39.682041 61.666180 39.346012
+v -39.548183 62.427723 39.346012
+v -39.834949 62.085594 39.346012
+v -44.865784 59.111206 39.346012
+v -44.601215 59.470776 39.346012
+v -44.780331 59.879684 39.346012
+v -45.309467 59.160542 39.346012
+v -45.224014 59.929024 39.346012
+v -45.488583 59.569450 39.346012
+v -21.599920 66.872810 39.346012
+v -21.256786 67.158379 39.346012
+v -21.332525 67.598320 39.346012
+v -22.018795 67.027191 39.346012
+v -21.751400 67.752701 39.346012
+v -22.094534 67.467133 39.346012
+v -33.472775 63.706184 39.346012
+v -33.165607 64.030128 39.346012
+v -33.292568 64.458107 39.346012
+v -33.906898 63.810230 39.346012
+v -33.726692 64.562149 39.346012
+v -34.033855 64.238213 39.346012
+v -27.583786 65.466423 39.346012
+v -27.257875 65.771492 39.346012
+v -27.359119 66.206284 39.346012
+v -28.010944 65.596130 39.346012
+v -27.786276 66.335991 39.346012
+v -28.112188 66.030922 39.346012
+v -9.437130 68.634682 39.346012
+v -9.063722 68.879333 39.346012
+v -9.088891 69.325043 39.346012
+v -9.835709 68.835739 39.346012
+v -9.487470 69.526100 39.346012
+v -9.860879 69.281448 39.346012
+v -15.543911 67.928154 39.346012
+v -15.184973 68.193581 39.346012
+v -15.235371 68.637146 39.346012
+v -15.953247 68.106285 39.346012
+v -15.644706 68.815277 39.346012
+v -16.003645 68.549850 39.346012
+v 2.847629 69.006805 39.346012
+v 3.246208 69.207863 39.346012
+v 3.271378 69.653572 39.346012
+v 2.474221 69.251457 39.346012
+v 2.897969 69.898224 39.346012
+v 2.499390 69.697166 39.346012
+v -3.300000 68.993965 39.346012
+v -2.913391 69.217171 39.346012
+v -2.913391 69.663589 39.346012
+v -3.686609 69.217171 39.346012
+v -3.300000 69.886795 39.346012
+v -3.686609 69.663589 39.346012
+v 15.095603 67.992561 39.346012
+v 15.514477 68.146942 39.346012
+v 15.590216 68.586891 39.346012
+v 14.752469 68.278130 39.346012
+v 15.247082 68.872452 39.346012
+v 14.828208 68.718079 39.346012
+v 8.986104 68.673256 39.346012
+v 9.395440 68.851387 39.346012
+v 9.445838 69.294952 39.346012
+v 8.627166 68.938683 39.346012
+v 9.086900 69.560379 39.346012
+v 8.677564 69.382240 39.346012
+v 33.041611 63.849575 39.346012
+v 33.481285 63.926857 39.346012
+v 33.634197 64.346268 39.346012
+v 32.754841 64.191704 39.346012
+v 33.347427 64.688400 39.346012
+v 32.907753 64.611115 39.346012
+v 27.145304 65.583176 39.346012
+v 27.579428 65.687225 39.346012
+v 27.706385 66.115204 39.346012
+v 26.838137 65.907120 39.346012
+v 27.399220 66.439148 39.346012
+v 26.965096 66.335106 39.346012
+v 21.155766 66.963264 39.346012
+v 21.582922 67.092972 39.346012
+v 21.684166 67.527756 39.346012
+v 20.829853 67.268333 39.346012
+v 21.358253 67.832832 39.346012
+v 20.931097 67.703117 39.346012
+v 44.454872 59.309010 39.346012
+v 44.900837 59.329124 39.346012
+v 45.106396 59.725399 39.346012
+v 44.214470 59.685165 39.346012
+v 44.865993 60.101559 39.346012
+v 44.420029 60.081440 39.346012
+v 38.820320 61.759293 39.346012
+v 39.264004 61.808632 39.346012
+v 39.443119 62.217541 39.346012
+v 38.555752 62.118866 39.346012
+v 39.178551 62.577110 39.346012
+v 38.734867 62.527775 39.346012
+v 64.916321 45.858177 39.346012
+v 65.348839 45.747639 39.346012
+v 65.660820 46.066940 39.346012
+v 64.795792 46.288017 39.346012
+v 65.540291 46.496777 39.346012
+v 65.107780 46.607315 39.346012
+v 60.184784 49.770290 39.346012
+v 60.624718 49.694485 39.346012
+v 60.910336 50.037579 39.346012
+v 60.030464 50.189186 39.346012
+v 60.756016 50.456474 39.346012
+v 60.316082 50.532280 39.346012
+v 55.171333 53.316387 39.346012
+v 55.615730 53.273968 39.346012
+v 55.874668 53.637615 39.346012
+v 54.985874 53.722458 39.346012
+v 55.689209 54.043686 39.346012
+v 55.244812 54.086105 39.346012
+v 49.916016 56.495548 39.346012
+v 50.362309 56.485096 39.346012
+v 50.594509 56.866375 39.346012
+v 49.701920 56.887276 39.346012
+v 50.380413 57.258102 39.346012
+v 49.934116 57.268555 39.346012
+v 69.321663 41.584278 39.346008
+v 69.743362 41.437801 39.346008
+v 70.081070 41.729771 39.346008
+v 69.237663 42.022720 39.346008
+v 69.997070 42.168213 39.346008
+v 69.575363 42.314690 39.346008
+v 73.352402 36.957539 39.346008
+v 73.759438 36.774204 39.346008
+v 74.121727 37.035042 39.346008
+v 73.307655 37.401707 39.346008
+v 74.076981 37.479210 39.346008
+v 73.669945 37.662544 39.346008
+v 80.079918 26.715145 39.346008
+v 80.444351 26.457314 39.346008
+v 80.849854 26.644007 39.346008
+v 80.120987 27.159668 39.346008
+v 80.890930 27.088530 39.346008
+v 80.526497 27.346361 39.346008
+v 82.668106 21.156565 39.346008
+v 83.004028 20.862555 39.346008
+v 83.426613 21.006468 39.346008
+v 82.754761 21.594490 39.346008
+v 83.513275 21.444393 39.346008
+v 83.177345 21.738405 39.346008
+v 76.956566 31.993303 39.346008
+v 77.344635 31.772640 39.346008
+v 77.729767 31.998384 39.346008
+v 76.953636 32.439713 39.346008
+v 77.726837 32.444794 39.346008
+v 77.338768 32.665459 39.346008
+v 86.040901 9.388025 39.346008
+v 86.305679 9.028609 39.346008
+v 86.749336 9.078208 39.346008
+v 86.219772 9.797040 39.346008
+v 86.928207 9.487223 39.346008
+v 86.663429 9.846638 39.346008
+v 84.669846 15.362205 39.346008
+v 84.972435 15.033983 39.346008
+v 85.407974 15.131921 39.346008
+v 84.802803 15.788363 39.346008
+v 85.540932 15.558080 39.346008
+v 85.238342 15.886301 39.346008
+v 86.748322 3.299998 39.346008
+v 86.971527 2.913389 39.346008
+v 87.417946 2.913389 39.346008
+v 86.971527 3.686607 39.346008
+v 87.641151 3.299998 39.346008
+v 87.417946 3.686607 39.346008
+v 93.274063 -0.503655 48.832260
+v 91.457047 15.289531 48.832260
+v 86.305145 29.484779 48.832260
+v 78.942131 41.252430 48.832260
+v 70.396507 50.581177 48.832264
+v 58.207840 59.884666 48.832264
+v 44.081921 67.147667 48.832264
+v 24.938196 73.021431 48.832264
+v 3.140965 75.555679 48.832264
+v -15.249976 74.671791 48.832264
+v -36.948601 69.862679 48.832264
+v -54.952732 61.931622 48.832264
+v -70.727165 50.389290 48.832264
+v -82.309273 36.625053 48.832260
+v -89.528076 21.969513 48.832260
+v -92.956276 6.533831 48.832260
+v -92.559654 -9.603173 48.832260
+v -88.467232 -24.656588 48.832260
+v -81.693405 -37.431389 48.832260
+v -73.390442 -47.659477 48.832256
+v -64.353806 -55.639553 48.832256
+v -51.833572 -63.537663 48.832256
+v -37.474033 -69.619499 48.832256
+v -18.066238 -74.255798 48.832256
+v 0.307383 -75.598206 48.832256
+v 22.333014 -73.581161 48.832256
+v 46.832596 -66.044899 48.832256
+v 64.611435 -55.552139 48.832256
+v 78.303215 -42.192638 48.832260
+v 87.683479 -26.656624 48.832260
+v 91.755058 -14.122890 48.832260
+v 87.008118 -3.163163 47.119339
+v 87.359512 -3.202447 47.119339
+v 87.569229 -2.917773 47.119339
+v 87.427551 -2.593815 47.119339
+v 87.076157 -2.554531 47.119339
+v 86.866440 -2.839205 47.119339
+v 84.952309 -15.285719 47.119339
+v 85.287018 -15.399706 47.119339
+v 85.553085 -15.166836 47.119339
+v 85.484451 -14.819980 47.119339
+v 85.149742 -14.705992 47.119339
+v 84.883675 -14.938862 47.119339
+v 86.313675 -9.280901 47.119339
+v 86.658646 -9.358472 47.119339
+v 86.898308 -9.098506 47.119339
+v 86.793007 -8.760968 47.119339
+v 86.448036 -8.683397 47.119339
+v 86.208374 -8.943363 47.119339
+v 77.248604 -32.007381 47.119339
+v 77.535553 -32.213978 47.119339
+v 77.857941 -32.068768 47.119339
+v 77.893387 -31.716965 47.119339
+v 77.606438 -31.510370 47.119339
+v 77.284042 -31.655579 47.119339
+v 80.371826 -26.699871 47.119339
+v 80.676872 -26.878670 47.119339
+v 80.984238 -26.703896 47.119339
+v 80.986565 -26.350321 47.119339
+v 80.681519 -26.171520 47.119339
+v 80.374153 -26.346294 47.119339
+v 82.956909 -21.110918 47.119339
+v 83.278084 -21.258787 47.119339
+v 83.566734 -21.054573 47.119339
+v 83.534203 -20.702490 47.119339
+v 83.213028 -20.554621 47.119339
+v 82.924377 -20.758835 47.119339
+v 73.641914 -36.999538 47.119339
+v 73.909393 -37.230789 47.119339
+v 74.243401 -37.114773 47.119339
+v 74.309929 -36.767506 47.119339
+v 74.042458 -36.536255 47.119339
+v 73.708450 -36.652271 47.119339
+v 69.606384 -41.652500 47.119339
+v 69.853493 -41.905399 47.119339
+v 70.196068 -41.817848 47.119339
+v 70.291527 -41.477398 47.119339
+v 70.044418 -41.224499 47.119339
+v 69.701851 -41.312050 47.119339
+v 50.165886 -56.650288 47.119335
+v 50.328697 -56.964153 47.119335
+v 50.681919 -56.980087 47.119335
+v 50.872334 -56.682156 47.119335
+v 50.709518 -56.368286 47.119335
+v 50.356297 -56.352352 47.119335
+v 55.431667 -53.452194 47.119335
+v 55.615582 -53.754185 47.119335
+v 55.969067 -53.745907 47.119335
+v 56.138641 -53.435638 47.119335
+v 55.954727 -53.133652 47.119335
+v 55.601242 -53.141930 47.119335
+v 60.454594 -49.885414 47.119335
+v 60.659683 -50.173439 47.119335
+v 61.011669 -50.139839 47.119335
+v 61.158562 -49.818214 47.119335
+v 60.953468 -49.530190 47.119335
+v 60.601486 -49.563789 47.119335
+v 65.194359 -45.950787 47.119335
+v 65.420578 -46.222530 47.119335
+v 65.769028 -46.162491 47.119335
+v 65.891258 -45.830708 47.119335
+v 65.665039 -45.558964 47.119335
+v 65.316589 -45.619003 47.119335
+v 39.047028 -61.947102 47.119335
+v 39.168140 -62.279297 47.119335
+v 39.516384 -62.340508 47.119335
+v 39.743519 -62.069527 47.119335
+v 39.622406 -61.737331 47.119335
+v 39.274162 -61.676121 47.119335
+v 44.693481 -59.481041 47.119335
+v 44.835350 -59.804913 47.119335
+v 45.186764 -59.843990 47.119335
+v 45.396317 -59.559193 47.119335
+v 45.254448 -59.235321 47.119335
+v 44.903030 -59.196243 47.119335
+v 21.343893 -67.190475 47.119335
+v 21.403883 -67.538933 47.119335
+v 21.735649 -67.661209 47.119335
+v 22.007427 -67.435036 47.119335
+v 21.947437 -67.086578 47.119335
+v 21.615671 -66.964302 47.119335
+v 33.255886 -64.051765 47.119335
+v 33.356441 -64.390747 47.119335
+v 33.700291 -64.473152 47.119335
+v 33.943577 -64.216576 47.119335
+v 33.843021 -63.877598 47.119335
+v 33.499176 -63.795189 47.119335
+v 27.346704 -65.798470 47.119335
+v 27.426893 -66.142838 47.119335
+v 27.765223 -66.245575 47.119335
+v 28.023359 -66.003944 47.119335
+v 27.943169 -65.659576 47.119335
+v 27.604841 -65.556839 47.119335
+v 9.146607 -68.921143 47.119335
+v 9.166543 -69.274170 47.119335
+v 9.482236 -69.433411 47.119335
+v 9.777992 -69.239639 47.119335
+v 9.758057 -68.886620 47.119335
+v 9.442365 -68.727371 47.119335
+v 15.270096 -68.230621 47.119335
+v 15.310013 -68.581947 47.119335
+v 15.634226 -68.723038 47.119335
+v 15.918521 -68.512810 47.119335
+v 15.878604 -68.161484 47.119335
+v 15.554391 -68.020393 47.119335
+v -3.168556 -69.258736 47.119335
+v -3.188492 -69.611755 47.119335
+v -2.892735 -69.805534 47.119335
+v -2.577042 -69.646286 47.119335
+v -2.557106 -69.293266 47.119335
+v -2.852863 -69.099495 47.119335
+v 2.993788 -69.263588 47.119335
+v 2.993788 -69.617172 47.119335
+v 3.300000 -69.793961 47.119335
+v 3.606212 -69.617172 47.119335
+v 3.606212 -69.263588 47.119335
+v 3.300000 -69.086800 47.119335
+v -15.443120 -68.206329 47.119335
+v -15.503109 -68.554787 47.119335
+v -15.231331 -68.780968 47.119335
+v -14.899565 -68.658691 47.119335
+v -14.839576 -68.310234 47.119335
+v -15.111354 -68.084053 47.119335
+v -9.320797 -68.906586 47.119335
+v -9.360715 -69.257904 47.119335
+v -9.076419 -69.468140 47.119335
+v -8.752207 -69.327049 47.119335
+v -8.712289 -68.975723 47.119335
+v -8.996585 -68.765495 47.119335
+v -33.421654 -63.998009 47.119335
+v -33.542763 -64.330200 47.119335
+v -33.315632 -64.601181 47.119335
+v -32.967388 -64.539970 47.119335
+v -32.846275 -64.207779 47.119335
+v -33.073406 -63.936798 47.119335
+v -27.515551 -65.754585 47.119335
+v -27.616106 -66.093567 47.119335
+v -27.372818 -66.350143 47.119335
+v -27.028973 -66.267738 47.119335
+v -26.928415 -65.928757 47.119335
+v -27.171705 -65.672180 47.119335
+v -21.515146 -67.156418 47.119335
+v -21.595337 -67.500786 47.119335
+v -21.337200 -67.742416 47.119335
+v -20.998873 -67.639679 47.119335
+v -20.918682 -67.295311 47.119335
+v -21.176819 -67.053680 47.119335
+v -44.850845 -59.407352 47.119335
+v -45.013657 -59.721222 47.119335
+v -44.823246 -60.019154 47.119335
+v -44.470020 -60.003220 47.119335
+v -44.307209 -59.689354 47.119335
+v -44.497620 -59.391418 47.119335
+v -39.208984 -61.883411 47.119335
+v -39.350853 -62.207283 47.119335
+v -39.141304 -62.492081 47.119335
+v -38.789886 -62.453003 47.119335
+v -38.648018 -62.129131 47.119335
+v -38.857571 -61.844334 47.119335
+v -65.323769 -45.837029 47.119335
+v -65.570877 -46.089931 47.119335
+v -65.475418 -46.430382 47.119335
+v -65.132843 -46.517933 47.119335
+v -64.885735 -46.265034 47.119335
+v -64.981201 -45.924583 47.119335
+v -60.592628 -49.781601 47.119335
+v -60.818848 -50.053345 47.119335
+v -60.696621 -50.385132 47.119335
+v -60.348171 -50.445171 47.119335
+v -60.121952 -50.173428 47.119335
+v -60.244179 -49.841640 47.119335
+v -55.577164 -53.358414 47.119335
+v -55.782253 -53.646439 47.119335
+v -55.635361 -53.968067 47.119335
+v -55.283379 -54.001667 47.119335
+v -55.078289 -53.713642 47.119335
+v -55.225182 -53.392014 47.119335
+v -50.317787 -56.566563 47.119335
+v -50.501698 -56.868553 47.119335
+v -50.332127 -57.178818 47.119335
+v -49.978642 -57.187096 47.119335
+v -49.794727 -56.885109 47.119335
+v -49.964302 -56.574841 47.119335
+v -69.725899 -41.528984 47.119339
+v -69.993370 -41.760235 47.119339
+v -69.926842 -42.107502 47.119339
+v -69.592834 -42.223518 47.119339
+v -69.325356 -41.992264 47.119339
+v -69.391891 -41.644997 47.119339
+v -73.750130 -36.866577 47.119339
+v -74.037079 -37.073170 47.119339
+v -74.001640 -37.424973 47.119339
+v -73.679245 -37.570179 47.119339
+v -73.392296 -37.363586 47.119339
+v -73.427742 -37.011784 47.119339
+v -80.452888 -26.549757 47.119339
+v -80.774071 -26.697626 47.119339
+v -80.806602 -27.049709 47.119339
+v -80.517952 -27.253923 47.119339
+v -80.196777 -27.106054 47.119339
+v -80.164246 -26.753971 47.119339
+v -83.022049 -20.953627 47.119339
+v -83.356758 -21.067614 47.119339
+v -83.425392 -21.414471 47.119339
+v -83.159325 -21.647341 47.119339
+v -82.824623 -21.533354 47.119339
+v -82.755981 -21.186497 47.119339
+v -77.344025 -31.865477 47.119339
+v -77.649071 -32.044277 47.119339
+v -77.646744 -32.397854 47.119339
+v -77.339378 -32.572628 47.119339
+v -77.034332 -32.393829 47.119339
+v -77.036659 -32.040253 47.119339
+v -86.342880 -9.113668 47.119339
+v -86.694275 -9.152954 47.119339
+v -86.835945 -9.476912 47.119339
+v -86.626228 -9.761585 47.119339
+v -86.274834 -9.722301 47.119339
+v -86.133163 -9.398343 47.119339
+v -85.000084 -15.122608 47.119339
+v -85.345055 -15.200180 47.119339
+v -85.450363 -15.537717 47.119339
+v -85.210693 -15.797683 47.119339
+v -84.865730 -15.720112 47.119339
+v -84.760422 -15.382574 47.119339
+v -87.008118 3.163159 47.119339
+v -87.359512 3.202443 47.119339
+v -87.569229 2.917769 47.119339
+v -87.427551 2.593811 47.119339
+v -87.076157 2.554527 47.119339
+v -86.866440 2.839201 47.119339
+v -87.017944 -2.993790 47.119339
+v -87.371529 -2.993790 47.119339
+v -87.548317 -3.300002 47.119339
+v -87.371529 -3.606214 47.119339
+v -87.017944 -3.606214 47.119339
+v -86.841156 -3.300002 47.119339
+v -84.952309 15.285715 47.119339
+v -85.287018 15.399702 47.119339
+v -85.553085 15.166832 47.119339
+v -85.484451 14.819976 47.119339
+v -85.149742 14.705988 47.119339
+v -84.883675 14.938858 47.119339
+v -86.313675 9.280897 47.119339
+v -86.658646 9.358468 47.119339
+v -86.898308 9.098502 47.119339
+v -86.793007 8.760964 47.119339
+v -86.448036 8.683393 47.119339
+v -86.208374 8.943359 47.119339
+v -77.248604 32.007374 47.119339
+v -77.535553 32.213970 47.119339
+v -77.857941 32.068760 47.119339
+v -77.893387 31.716961 47.119339
+v -77.606438 31.510366 47.119339
+v -77.284042 31.655575 47.119339
+v -80.371826 26.699867 47.119339
+v -80.676872 26.878666 47.119339
+v -80.984238 26.703892 47.119339
+v -80.986565 26.350317 47.119339
+v -80.681519 26.171516 47.119339
+v -80.374153 26.346291 47.119339
+v -82.956909 21.110914 47.119339
+v -83.278084 21.258783 47.119339
+v -83.566734 21.054569 47.119339
+v -83.534203 20.702486 47.119339
+v -83.213028 20.554617 47.119339
+v -82.924377 20.758831 47.119339
+v -73.641914 36.999531 47.119339
+v -73.909393 37.230782 47.119339
+v -74.243401 37.114765 47.119339
+v -74.309929 36.767498 47.119339
+v -74.042458 36.536247 47.119339
+v -73.708450 36.652264 47.119339
+v -69.606384 41.652493 47.119339
+v -69.853493 41.905392 47.119339
+v -70.196068 41.817841 47.119339
+v -70.291527 41.477390 47.119339
+v -70.044418 41.224491 47.119339
+v -69.701851 41.312042 47.119339
+v -50.165886 56.650280 47.119343
+v -50.328697 56.964146 47.119343
+v -50.681919 56.980080 47.119343
+v -50.872334 56.682148 47.119343
+v -50.709518 56.368279 47.119343
+v -50.356297 56.352345 47.119343
+v -55.431667 53.452187 47.119343
+v -55.615582 53.754177 47.119343
+v -55.969067 53.745899 47.119343
+v -56.138641 53.435631 47.119343
+v -55.954727 53.133644 47.119343
+v -55.601242 53.141922 47.119343
+v -60.454594 49.885406 47.119343
+v -60.659683 50.173431 47.119343
+v -61.011669 50.139832 47.119343
+v -61.158562 49.818207 47.119343
+v -60.953468 49.530182 47.119343
+v -60.601486 49.563782 47.119343
+v -65.194359 45.950779 47.119343
+v -65.420578 46.222523 47.119343
+v -65.769028 46.162483 47.119343
+v -65.891258 45.830700 47.119343
+v -65.665039 45.558956 47.119343
+v -65.316589 45.618996 47.119343
+v -39.047028 61.947094 47.119343
+v -39.168140 62.279289 47.119343
+v -39.516384 62.340500 47.119343
+v -39.743519 62.069519 47.119343
+v -39.622406 61.737324 47.119343
+v -39.274162 61.676113 47.119343
+v -44.693481 59.481033 47.119343
+v -44.835350 59.804905 47.119343
+v -45.186764 59.843983 47.119343
+v -45.396317 59.559185 47.119343
+v -45.254448 59.235313 47.119343
+v -44.903030 59.196236 47.119343
+v -21.343893 67.190475 47.119343
+v -21.403883 67.538933 47.119343
+v -21.735649 67.661209 47.119343
+v -22.007427 67.435036 47.119343
+v -21.947437 67.086578 47.119343
+v -21.615671 66.964302 47.119343
+v -33.255886 64.051765 47.119343
+v -33.356441 64.390747 47.119343
+v -33.700291 64.473152 47.119343
+v -33.943577 64.216576 47.119343
+v -33.843021 63.877590 47.119343
+v -33.499176 63.795181 47.119343
+v -27.346704 65.798470 47.119343
+v -27.426893 66.142838 47.119343
+v -27.765223 66.245575 47.119343
+v -28.023359 66.003944 47.119343
+v -27.943169 65.659576 47.119343
+v -27.604841 65.556839 47.119343
+v -9.146607 68.921143 47.119343
+v -9.166543 69.274170 47.119343
+v -9.482236 69.433411 47.119343
+v -9.777992 69.239639 47.119343
+v -9.758057 68.886620 47.119343
+v -9.442365 68.727371 47.119343
+v -15.270096 68.230621 47.119343
+v -15.310013 68.581947 47.119343
+v -15.634226 68.723038 47.119343
+v -15.918521 68.512810 47.119343
+v -15.878604 68.161484 47.119343
+v -15.554391 68.020393 47.119343
+v 3.168556 69.258736 47.119343
+v 3.188492 69.611755 47.119343
+v 2.892735 69.805534 47.119343
+v 2.577042 69.646286 47.119343
+v 2.557106 69.293266 47.119343
+v 2.852863 69.099495 47.119343
+v -2.993788 69.263588 47.119343
+v -2.993788 69.617172 47.119343
+v -3.300000 69.793961 47.119343
+v -3.606212 69.617172 47.119343
+v -3.606212 69.263588 47.119343
+v -3.300000 69.086800 47.119343
+v 15.443120 68.206329 47.119343
+v 15.503109 68.554787 47.119343
+v 15.231331 68.780968 47.119343
+v 14.899565 68.658691 47.119343
+v 14.839576 68.310234 47.119343
+v 15.111354 68.084053 47.119343
+v 9.320797 68.906586 47.119343
+v 9.360715 69.257904 47.119343
+v 9.076419 69.468140 47.119343
+v 8.752207 69.327049 47.119343
+v 8.712289 68.975723 47.119343
+v 8.996585 68.765495 47.119343
+v 33.421654 63.998001 47.119343
+v 33.542763 64.330200 47.119343
+v 33.315632 64.601181 47.119343
+v 32.967388 64.539970 47.119343
+v 32.846275 64.207779 47.119343
+v 33.073406 63.936790 47.119343
+v 27.515551 65.754585 47.119343
+v 27.616106 66.093567 47.119343
+v 27.372818 66.350143 47.119343
+v 27.028973 66.267738 47.119343
+v 26.928415 65.928757 47.119343
+v 27.171705 65.672180 47.119343
+v 21.515146 67.156418 47.119343
+v 21.595337 67.500786 47.119343
+v 21.337200 67.742416 47.119343
+v 20.998873 67.639679 47.119343
+v 20.918682 67.295311 47.119343
+v 21.176819 67.053680 47.119343
+v 44.850845 59.407345 47.119343
+v 45.013657 59.721214 47.119343
+v 44.823246 60.019146 47.119343
+v 44.470020 60.003212 47.119343
+v 44.307209 59.689346 47.119343
+v 44.497620 59.391411 47.119343
+v 39.208984 61.883404 47.119343
+v 39.350853 62.207275 47.119343
+v 39.141304 62.492073 47.119343
+v 38.789886 62.452995 47.119343
+v 38.648018 62.129124 47.119343
+v 38.857571 61.844326 47.119343
+v 65.323769 45.837021 47.119343
+v 65.570877 46.089924 47.119343
+v 65.475418 46.430374 47.119343
+v 65.132843 46.517925 47.119343
+v 64.885735 46.265026 47.119343
+v 64.981201 45.924576 47.119343
+v 60.592628 49.781593 47.119343
+v 60.818848 50.053337 47.119343
+v 60.696621 50.385124 47.119343
+v 60.348171 50.445164 47.119343
+v 60.121952 50.173420 47.119343
+v 60.244179 49.841633 47.119343
+v 55.577164 53.358406 47.119343
+v 55.782253 53.646431 47.119343
+v 55.635361 53.968060 47.119343
+v 55.283379 54.001659 47.119343
+v 55.078289 53.713634 47.119343
+v 55.225182 53.392006 47.119343
+v 50.317787 56.566555 47.119343
+v 50.501698 56.868546 47.119343
+v 50.332127 57.178810 47.119343
+v 49.978642 57.187088 47.119343
+v 49.794727 56.885101 47.119343
+v 49.964302 56.574833 47.119343
+v 69.725899 41.528976 47.119339
+v 69.993370 41.760227 47.119339
+v 69.926842 42.107494 47.119339
+v 69.592834 42.223511 47.119339
+v 69.325356 41.992256 47.119339
+v 69.391891 41.644989 47.119339
+v 73.750130 36.866570 47.119339
+v 74.037079 37.073162 47.119339
+v 74.001640 37.424965 47.119339
+v 73.679245 37.570171 47.119339
+v 73.392296 37.363579 47.119339
+v 73.427742 37.011776 47.119339
+v 80.452888 26.549753 47.119339
+v 80.774071 26.697622 47.119339
+v 80.806602 27.049706 47.119339
+v 80.517952 27.253920 47.119339
+v 80.196777 27.106050 47.119339
+v 80.164246 26.753967 47.119339
+v 83.022049 20.953623 47.119339
+v 83.356758 21.067610 47.119339
+v 83.425392 21.414467 47.119339
+v 83.159325 21.647337 47.119339
+v 82.824623 21.533350 47.119339
+v 82.755981 21.186493 47.119339
+v 77.344025 31.865473 47.119339
+v 77.649071 32.044270 47.119339
+v 77.646744 32.397846 47.119339
+v 77.339378 32.572620 47.119339
+v 77.034332 32.393822 47.119339
+v 77.036659 32.040245 47.119339
+v 86.342880 9.113665 47.119339
+v 86.694275 9.152950 47.119339
+v 86.835945 9.476908 47.119339
+v 86.626228 9.761581 47.119339
+v 86.274834 9.722298 47.119339
+v 86.133163 9.398339 47.119339
+v 85.000084 15.122604 47.119339
+v 85.345055 15.200176 47.119339
+v 85.450363 15.537713 47.119339
+v 85.210693 15.797679 47.119339
+v 84.865730 15.720108 47.119339
+v 84.760422 15.382570 47.119339
+v 87.017944 2.993786 47.119339
+v 87.371529 2.993786 47.119339
+v 87.548317 3.299998 47.119339
+v 87.371529 3.606210 47.119339
+v 87.017944 3.606210 47.119339
+v 86.841156 3.299998 47.119339
+v 92.983047 -0.501422 49.286438
+v 91.165878 15.255690 49.286438
+v 86.015556 29.413723 49.286438
+v 78.657532 41.144871 49.286438
+v 70.119690 50.440666 49.286442
+v 57.942253 59.707764 49.286442
+v 43.826012 66.938477 49.286442
+v 24.688494 72.776421 49.286442
+v 2.893382 75.270805 49.286442
+v -15.453626 74.353157 49.286442
+v -37.141876 69.492386 49.286442
+v -55.087662 61.519173 49.286442
+v -70.826370 49.896843 49.286442
+v -82.339622 36.040405 49.286438
+v -89.448013 21.310961 49.286438
+v -92.728256 5.849030 49.286438
+v -92.166862 -10.241255 49.286438
+v -87.939598 -25.179745 49.286438
+v -81.084557 -37.810783 49.286438
+v -72.745399 -47.902561 49.286434
+v -63.697880 -55.768806 49.286434
+v -51.177448 -63.549324 49.286434
+v -36.819752 -69.530617 49.286434
+v -17.410839 -74.057861 49.286434
+v 0.922249 -75.304733 49.286434
+v 22.940304 -73.170876 49.286434
+v 47.416260 -65.461182 49.286434
+v 65.114349 -54.796791 49.286434
+v 78.708359 -41.202892 49.286438
+v 87.121864 -27.205042 49.286438
+v 91.387421 -14.436687 49.286438
+v 86.665382 -3.319842 47.119339
+v 86.776482 -2.326033 47.119339
+v 87.659187 -3.430945 47.119339
+v 87.770294 -2.437137 47.119339
+v 84.583885 -15.364965 47.119339
+v 84.906265 -14.418355 47.119339
+v 85.530495 -15.687344 47.119339
+v 85.852875 -14.740732 47.119339
+v 85.955826 -9.399060 47.119339
+v 86.175217 -8.423423 47.119339
+v 86.931465 -9.618447 47.119339
+v 87.150856 -8.642809 47.119339
+v 76.873077 -31.975801 47.119339
+v 77.457367 -31.164255 47.119339
+v 77.684624 -32.560093 47.119339
+v 78.268913 -31.748545 47.119339
+v 79.994995 -26.703615 47.119339
+v 80.500679 -25.840895 47.119339
+v 80.857712 -27.209295 47.119339
+v 81.363396 -26.346575 47.119339
+v 82.582275 -21.151781 47.119339
+v 83.000481 -20.243425 47.119339
+v 83.490631 -21.569983 47.119339
+v 83.908836 -20.661629 47.119339
+v 73.270676 -36.934746 47.119339
+v 73.924698 -36.178272 47.119339
+v 74.027145 -37.588772 47.119339
+v 74.681175 -36.832298 47.119339
+v 69.241898 -41.556759 47.119339
+v 69.957146 -40.857891 47.119339
+v 69.940765 -42.272007 47.119339
+v 70.656013 -41.573139 47.119339
+v 49.845036 -56.452614 47.119335
+v 50.732716 -55.992149 47.119335
+v 50.305500 -57.340294 47.119335
+v 51.193180 -56.879829 47.119335
+v 55.098045 -53.276943 47.119335
+v 55.952126 -52.756805 47.119335
+v 55.618183 -54.131027 47.119335
+v 56.472263 -53.610889 47.119335
+v 60.109264 -49.734535 47.119335
+v 60.923855 -49.154503 47.119335
+v 60.689297 -50.549126 47.119335
+v 61.503891 -49.969093 47.119335
+v 64.838638 -45.826370 47.119335
+v 65.607185 -45.186577 47.119335
+v 65.478432 -46.594917 47.119335
+v 66.246979 -45.955124 47.119335
+v 38.754257 -61.709824 47.119335
+v 39.693764 -61.367298 47.119335
+v 39.096783 -62.649334 47.119335
+v 40.036289 -62.306805 47.119335
+v 44.386295 -59.262741 47.119335
+v 45.302277 -58.861515 47.119335
+v 44.787521 -60.178719 47.119335
+v 45.703503 -59.777493 47.119335
+v 21.098080 -66.904831 47.119335
+v 22.083582 -66.735176 47.119335
+v 21.267738 -67.890335 47.119335
+v 22.253241 -67.720680 47.119335
+v 32.978184 -63.797016 47.119335
+v 33.936890 -63.512623 47.119335
+v 33.262577 -64.755722 47.119335
+v 34.221283 -64.471329 47.119335
+v 27.084663 -65.527634 47.119335
+v 28.058605 -65.300842 47.119335
+v 27.311457 -66.501572 47.119335
+v 28.285400 -66.274780 47.119335
+v 8.934904 -68.609375 47.119335
+v 9.933313 -68.552994 47.119335
+v 8.991286 -69.607788 47.119335
+v 9.989696 -69.551407 47.119335
+v 15.041058 -67.931358 47.119335
+v 16.034664 -67.818466 47.119335
+v 15.153952 -68.924965 47.119335
+v 16.147558 -68.812073 47.119335
+v -3.343812 -68.925117 47.119335
+v -2.345403 -68.981499 47.119335
+v -3.400195 -69.923531 47.119335
+v -2.401786 -69.979912 47.119335
+v 2.800000 -68.940384 47.119335
+v 3.800000 -68.940384 47.119335
+v 2.800000 -69.940384 47.119335
+v 3.800000 -69.940384 47.119335
+v -15.579264 -67.854927 47.119335
+v -14.593761 -68.024590 47.119335
+v -15.748923 -68.840431 47.119335
+v -14.763421 -69.010094 47.119335
+v -9.476858 -68.563568 47.119335
+v -8.483252 -68.676460 47.119335
+v -9.589752 -69.557175 47.119335
+v -8.596146 -69.670067 47.119335
+v -33.493011 -63.627975 47.119335
+v -32.553501 -63.970501 47.119335
+v -33.835537 -64.567474 47.119335
+v -32.896030 -64.910004 47.119335
+v -27.609419 -65.389610 47.119335
+v -26.650711 -65.674004 47.119335
+v -27.893812 -66.348320 47.119335
+v -26.935104 -66.632713 47.119335
+v -21.630583 -66.797676 47.119335
+v -20.656641 -67.024475 47.119335
+v -21.857378 -67.771622 47.119335
+v -20.883434 -67.998413 47.119335
+v -44.874039 -59.031216 47.119335
+v -43.986362 -59.491680 47.119335
+v -45.334503 -59.918892 47.119335
+v -44.446827 -60.379356 47.119335
+v -39.256813 -61.509605 47.119335
+v -38.340832 -61.910831 47.119335
+v -39.658039 -62.425583 47.119335
+v -38.742058 -62.826809 47.119335
+v -65.236496 -45.470421 47.119335
+v -64.521248 -46.169292 47.119335
+v -65.935364 -46.185673 47.119335
+v -65.220116 -46.884541 47.119335
+v -60.534775 -49.409218 47.119335
+v -59.766232 -50.049011 47.119335
+v -61.174572 -50.177761 47.119335
+v -60.406025 -50.817558 47.119335
+v -55.547550 -52.982727 47.119335
+v -54.732956 -53.562763 47.119335
+v -56.127583 -53.797321 47.119335
+v -55.312992 -54.377354 47.119335
+v -50.315186 -56.189720 47.119335
+v -49.461102 -56.709858 47.119335
+v -50.835323 -57.043800 47.119335
+v -49.981243 -57.563938 47.119335
+v -69.608139 -41.171001 47.119339
+v -68.954117 -41.927475 47.119339
+v -70.364616 -41.825024 47.119339
+v -69.710594 -42.581497 47.119339
+v -73.601059 -36.520462 47.119339
+v -73.016769 -37.332008 47.119339
+v -74.412605 -37.104748 47.119339
+v -73.828316 -37.916294 47.119339
+v -80.240349 -26.238564 47.119339
+v -79.822144 -27.146917 47.119339
+v -81.148697 -26.656765 47.119339
+v -80.730499 -27.565119 47.119339
+v -82.778572 -20.665989 47.119339
+v -82.456192 -21.612600 47.119339
+v -83.725182 -20.988367 47.119339
+v -83.402809 -21.934977 47.119339
+v -77.163185 -31.534851 47.119339
+v -76.657501 -32.397572 47.119339
+v -78.025902 -32.040535 47.119339
+v -77.520218 -32.903255 47.119339
+v -86.043198 -8.885172 47.119339
+v -85.932098 -9.878981 47.119339
+v -87.037010 -8.996275 47.119339
+v -86.925903 -9.990084 47.119339
+v -84.727264 -14.862634 47.119339
+v -84.507881 -15.838272 47.119339
+v -85.702904 -15.082020 47.119339
+v -85.483513 -16.057657 47.119339
+v -86.665382 3.319838 47.119339
+v -86.776482 2.326029 47.119339
+v -87.659187 3.430941 47.119339
+v -87.770294 2.437133 47.119339
+v -86.694740 -2.800002 47.119339
+v -86.694740 -3.800002 47.119339
+v -87.694740 -2.800002 47.119339
+v -87.694740 -3.800002 47.119339
+v -84.583885 15.364962 47.119339
+v -84.906265 14.418351 47.119339
+v -85.530495 15.687340 47.119339
+v -85.852875 14.740728 47.119339
+v -85.955826 9.399056 47.119339
+v -86.175217 8.423419 47.119339
+v -86.931465 9.618443 47.119339
+v -87.150856 8.642805 47.119339
+v -76.873077 31.975798 47.119339
+v -77.457367 31.164251 47.119339
+v -77.684624 32.560085 47.119339
+v -78.268913 31.748541 47.119339
+v -79.994995 26.703611 47.119339
+v -80.500679 25.840891 47.119339
+v -80.857712 27.209291 47.119339
+v -81.363396 26.346571 47.119339
+v -82.582275 21.151777 47.119339
+v -83.000481 20.243422 47.119339
+v -83.490631 21.569979 47.119339
+v -83.908836 20.661625 47.119339
+v -73.270676 36.934738 47.119339
+v -73.924698 36.178265 47.119339
+v -74.027145 37.588764 47.119339
+v -74.681175 36.832291 47.119339
+v -69.241898 41.556751 47.119339
+v -69.957146 40.857883 47.119339
+v -69.940765 42.271999 47.119339
+v -70.656013 41.573132 47.119339
+v -49.845036 56.452606 47.119343
+v -50.732716 55.992142 47.119343
+v -50.305500 57.340286 47.119343
+v -51.193180 56.879822 47.119343
+v -55.098045 53.276936 47.119343
+v -55.952126 52.756798 47.119343
+v -55.618183 54.131020 47.119343
+v -56.472263 53.610882 47.119343
+v -60.109264 49.734528 47.119343
+v -60.923855 49.154495 47.119343
+v -60.689297 50.549118 47.119343
+v -61.503891 49.969086 47.119343
+v -64.838638 45.826363 47.119343
+v -65.607185 45.186569 47.119343
+v -65.478432 46.594910 47.119343
+v -66.246979 45.955116 47.119343
+v -38.754257 61.709816 47.119343
+v -39.693764 61.367290 47.119343
+v -39.096783 62.649326 47.119343
+v -40.036289 62.306797 47.119343
+v -44.386295 59.262733 47.119343
+v -45.302277 58.861507 47.119343
+v -44.787521 60.178711 47.119343
+v -45.703503 59.777485 47.119343
+v -21.098080 66.904831 47.119343
+v -22.083582 66.735176 47.119343
+v -21.267738 67.890335 47.119343
+v -22.253241 67.720680 47.119343
+v -32.978184 63.797009 47.119343
+v -33.936890 63.512615 47.119343
+v -33.262577 64.755722 47.119343
+v -34.221283 64.471329 47.119343
+v -27.084663 65.527634 47.119343
+v -28.058605 65.300842 47.119343
+v -27.311457 66.501572 47.119343
+v -28.285400 66.274780 47.119343
+v -8.934904 68.609375 47.119343
+v -9.933313 68.552994 47.119343
+v -8.991286 69.607788 47.119343
+v -9.989696 69.551407 47.119343
+v -15.041058 67.931358 47.119343
+v -16.034664 67.818466 47.119343
+v -15.153952 68.924965 47.119343
+v -16.147558 68.812073 47.119343
+v 3.343812 68.925117 47.119343
+v 2.345403 68.981499 47.119343
+v 3.400195 69.923531 47.119343
+v 2.401786 69.979912 47.119343
+v -2.800000 68.940384 47.119343
+v -3.800000 68.940384 47.119343
+v -2.800000 69.940384 47.119343
+v -3.800000 69.940384 47.119343
+v 15.579264 67.854927 47.119343
+v 14.593761 68.024590 47.119343
+v 15.748923 68.840431 47.119343
+v 14.763421 69.010094 47.119343
+v 9.476858 68.563568 47.119343
+v 8.483252 68.676460 47.119343
+v 9.589752 69.557175 47.119343
+v 8.596146 69.670067 47.119343
+v 33.493011 63.627968 47.119343
+v 32.553501 63.970493 47.119343
+v 33.835537 64.567474 47.119343
+v 32.896030 64.910004 47.119343
+v 27.609419 65.389610 47.119343
+v 26.650711 65.674004 47.119343
+v 27.893812 66.348320 47.119343
+v 26.935104 66.632713 47.119343
+v 21.630583 66.797676 47.119343
+v 20.656641 67.024475 47.119343
+v 21.857378 67.771622 47.119343
+v 20.883434 67.998413 47.119343
+v 44.874039 59.031208 47.119343
+v 43.986362 59.491673 47.119343
+v 45.334503 59.918884 47.119343
+v 44.446827 60.379349 47.119343
+v 39.256813 61.509598 47.119343
+v 38.340832 61.910824 47.119343
+v 39.658039 62.425575 47.119343
+v 38.742058 62.826801 47.119343
+v 65.236496 45.470413 47.119343
+v 64.521248 46.169285 47.119343
+v 65.935364 46.185665 47.119343
+v 65.220116 46.884533 47.119343
+v 60.534775 49.409210 47.119343
+v 59.766232 50.049004 47.119343
+v 61.174572 50.177753 47.119343
+v 60.406025 50.817551 47.119343
+v 55.547550 52.982719 47.119343
+v 54.732956 53.562756 47.119343
+v 56.127583 53.797314 47.119343
+v 55.312992 54.377346 47.119343
+v 50.315186 56.189713 47.119343
+v 49.461102 56.709850 47.119343
+v 50.835323 57.043793 47.119343
+v 49.981243 57.563931 47.119343
+v 69.608139 41.170994 47.119339
+v 68.954117 41.927467 47.119339
+v 70.364616 41.825016 47.119339
+v 69.710594 42.581490 47.119339
+v 73.601059 36.520454 47.119339
+v 73.016769 37.332001 47.119339
+v 74.412605 37.104740 47.119339
+v 73.828316 37.916286 47.119339
+v 80.240349 26.238560 47.119339
+v 79.822144 27.146914 47.119339
+v 81.148697 26.656761 47.119339
+v 80.730499 27.565115 47.119339
+v 82.778572 20.665985 47.119339
+v 82.456192 21.612597 47.119339
+v 83.725182 20.988363 47.119339
+v 83.402809 21.934973 47.119339
+v 77.163185 31.534847 47.119339
+v 76.657501 32.397564 47.119339
+v 78.025902 32.040527 47.119339
+v 77.520218 32.903248 47.119339
+v 86.043198 8.885168 47.119339
+v 85.932098 9.878977 47.119339
+v 87.037010 8.996271 47.119339
+v 86.925903 9.990080 47.119339
+v 84.727264 14.862630 47.119339
+v 84.507881 15.838268 47.119339
+v 85.702904 15.082016 47.119339
+v 85.483513 16.057653 47.119339
+v 86.694740 2.799998 47.119339
+v 86.694740 3.799998 47.119339
+v 87.694740 2.799998 47.119339
+v 87.694740 3.799998 47.119339
+v 87.921043 -0.462572 49.286438
+v 86.101273 14.653769 49.286438
+v 80.979561 28.152256 49.286438
+v 73.710190 39.240643 49.286438
+v 65.306656 47.961121 49.286442
+v 53.314751 56.597141 49.286442
+v 39.346409 63.266785 49.286442
+v 20.285006 68.470474 49.286442
+v 2.732554 70.211082 49.286442
+v -19.067137 68.716972 49.286442
+v -43.194633 61.794147 49.286442
+v -59.969681 52.335716 49.286442
+v -73.275826 39.894463 49.286438
+v -81.644333 26.962234 49.286438
+v -86.695076 12.177416 49.286438
+v -87.868279 -2.484934 49.286438
+v -85.891045 -15.468655 49.286438
+v -81.476402 -27.172853 49.286438
+v -75.387634 -37.079479 49.286438
+v -68.320839 -45.166119 49.286434
+v -58.137810 -53.525875 49.286434
+v -46.200912 -60.358025 49.286434
+v -29.879826 -66.329941 49.286434
+v -11.163266 -69.708878 49.286434
+v 6.437806 -70.077553 49.286434
+v 28.193104 -66.827789 49.286434
+v 45.381126 -60.825470 49.286434
+v 62.066853 -50.753868 49.286434
+v 74.051140 -38.938984 49.286438
+v 82.317551 -25.541594 49.286438
+v 86.395691 -13.559460 49.286438
+v 86.776482 -2.326033 47.419338
+v 86.665382 -3.319842 47.419338
+v 87.770294 -2.437137 47.419338
+v 87.659187 -3.430945 47.419338
+v 84.906265 -14.418355 47.419338
+v 84.583885 -15.364965 47.419338
+v 85.852875 -14.740732 47.419338
+v 85.530495 -15.687344 47.419338
+v 86.175217 -8.423423 47.419338
+v 85.955826 -9.399060 47.419338
+v 87.150856 -8.642809 47.419338
+v 86.931465 -9.618447 47.419338
+v 77.457367 -31.164255 47.419338
+v 76.873077 -31.975801 47.419338
+v 78.268913 -31.748545 47.419338
+v 77.684624 -32.560093 47.419338
+v 80.500679 -25.840895 47.419338
+v 79.994995 -26.703615 47.419338
+v 81.363396 -26.346575 47.419338
+v 80.857712 -27.209295 47.419338
+v 83.000481 -20.243425 47.419338
+v 82.582275 -21.151781 47.419338
+v 83.908836 -20.661629 47.419338
+v 83.490631 -21.569983 47.419338
+v 73.924698 -36.178272 47.419338
+v 73.270676 -36.934746 47.419338
+v 74.681175 -36.832298 47.419338
+v 74.027145 -37.588772 47.419338
+v 69.957146 -40.857891 47.419338
+v 69.241898 -41.556759 47.419338
+v 70.656013 -41.573139 47.419338
+v 69.940765 -42.272007 47.419338
+v 50.732716 -55.992149 47.419334
+v 49.845036 -56.452614 47.419334
+v 51.193180 -56.879829 47.419334
+v 50.305500 -57.340294 47.419334
+v 55.952126 -52.756805 47.419334
+v 55.098045 -53.276943 47.419334
+v 56.472263 -53.610889 47.419334
+v 55.618183 -54.131027 47.419334
+v 60.923855 -49.154503 47.419334
+v 60.109264 -49.734535 47.419334
+v 61.503891 -49.969093 47.419334
+v 60.689297 -50.549126 47.419334
+v 65.607185 -45.186577 47.419334
+v 64.838638 -45.826370 47.419334
+v 66.246979 -45.955124 47.419334
+v 65.478432 -46.594917 47.419334
+v 39.693764 -61.367298 47.419334
+v 38.754257 -61.709824 47.419334
+v 40.036289 -62.306805 47.419334
+v 39.096783 -62.649334 47.419334
+v 45.302277 -58.861515 47.419334
+v 44.386295 -59.262741 47.419334
+v 45.703503 -59.777493 47.419334
+v 44.787521 -60.178719 47.419334
+v 22.083582 -66.735176 47.419334
+v 21.098080 -66.904831 47.419334
+v 22.253241 -67.720680 47.419334
+v 21.267738 -67.890335 47.419334
+v 33.936890 -63.512623 47.419334
+v 32.978184 -63.797016 47.419334
+v 34.221283 -64.471329 47.419334
+v 33.262577 -64.755722 47.419334
+v 28.058605 -65.300842 47.419334
+v 27.084663 -65.527634 47.419334
+v 28.285400 -66.274780 47.419334
+v 27.311457 -66.501572 47.419334
+v 9.933313 -68.552994 47.419334
+v 8.934904 -68.609375 47.419334
+v 9.989696 -69.551407 47.419334
+v 8.991286 -69.607788 47.419334
+v 16.034664 -67.818466 47.419334
+v 15.041058 -67.931358 47.419334
+v 16.147558 -68.812073 47.419334
+v 15.153952 -68.924965 47.419334
+v -2.345403 -68.981499 47.419334
+v -3.343812 -68.925117 47.419334
+v -2.401786 -69.979912 47.419334
+v -3.400195 -69.923531 47.419334
+v 3.800000 -68.940384 47.419334
+v 2.800000 -68.940384 47.419334
+v 3.800000 -69.940384 47.419334
+v 2.800000 -69.940384 47.419334
+v -14.593761 -68.024590 47.419334
+v -15.579264 -67.854927 47.419334
+v -14.763421 -69.010094 47.419334
+v -15.748923 -68.840431 47.419334
+v -8.483252 -68.676460 47.419334
+v -9.476858 -68.563568 47.419334
+v -8.596146 -69.670067 47.419334
+v -9.589752 -69.557175 47.419334
+v -32.553501 -63.970501 47.419334
+v -33.493011 -63.627975 47.419334
+v -32.896030 -64.910004 47.419334
+v -33.835537 -64.567474 47.419334
+v -26.650711 -65.674004 47.419334
+v -27.609419 -65.389610 47.419334
+v -26.935104 -66.632713 47.419334
+v -27.893812 -66.348320 47.419334
+v -20.656641 -67.024475 47.419334
+v -21.630583 -66.797676 47.419334
+v -20.883434 -67.998413 47.419334
+v -21.857378 -67.771622 47.419334
+v -43.986362 -59.491680 47.419334
+v -44.874039 -59.031216 47.419334
+v -44.446827 -60.379356 47.419334
+v -45.334503 -59.918892 47.419334
+v -38.340832 -61.910831 47.419334
+v -39.256813 -61.509605 47.419334
+v -38.742058 -62.826809 47.419334
+v -39.658039 -62.425583 47.419334
+v -64.521248 -46.169292 47.419334
+v -65.236496 -45.470421 47.419334
+v -65.220116 -46.884541 47.419334
+v -65.935364 -46.185673 47.419334
+v -59.766232 -50.049011 47.419334
+v -60.534775 -49.409218 47.419334
+v -60.406025 -50.817558 47.419334
+v -61.174572 -50.177761 47.419334
+v -54.732956 -53.562763 47.419334
+v -55.547550 -52.982727 47.419334
+v -55.312992 -54.377354 47.419334
+v -56.127583 -53.797321 47.419334
+v -49.461102 -56.709858 47.419334
+v -50.315186 -56.189720 47.419334
+v -49.981243 -57.563938 47.419334
+v -50.835323 -57.043800 47.419334
+v -68.954117 -41.927475 47.419338
+v -69.608139 -41.171001 47.419338
+v -69.710594 -42.581497 47.419338
+v -70.364616 -41.825024 47.419338
+v -73.016769 -37.332008 47.419338
+v -73.601059 -36.520462 47.419338
+v -73.828316 -37.916294 47.419338
+v -74.412605 -37.104748 47.419338
+v -79.822144 -27.146917 47.419338
+v -80.240349 -26.238564 47.419338
+v -80.730499 -27.565119 47.419338
+v -81.148697 -26.656765 47.419338
+v -82.456192 -21.612600 47.419338
+v -82.778572 -20.665989 47.419338
+v -83.402809 -21.934977 47.419338
+v -83.725182 -20.988367 47.419338
+v -76.657501 -32.397572 47.419338
+v -77.163185 -31.534851 47.419338
+v -77.520218 -32.903255 47.419338
+v -78.025902 -32.040535 47.419338
+v -85.932098 -9.878981 47.419338
+v -86.043198 -8.885172 47.419338
+v -86.925903 -9.990084 47.419338
+v -87.037010 -8.996275 47.419338
+v -84.507881 -15.838272 47.419338
+v -84.727264 -14.862634 47.419338
+v -85.483513 -16.057657 47.419338
+v -85.702904 -15.082020 47.419338
+v -86.776482 2.326029 47.419338
+v -86.665382 3.319838 47.419338
+v -87.770294 2.437133 47.419338
+v -87.659187 3.430941 47.419338
+v -86.694740 -3.800002 47.419338
+v -86.694740 -2.800002 47.419338
+v -87.694740 -3.800002 47.419338
+v -87.694740 -2.800002 47.419338
+v -84.906265 14.418351 47.419338
+v -84.583885 15.364962 47.419338
+v -85.852875 14.740728 47.419338
+v -85.530495 15.687340 47.419338
+v -86.175217 8.423419 47.419338
+v -85.955826 9.399056 47.419338
+v -87.150856 8.642805 47.419338
+v -86.931465 9.618443 47.419338
+v -77.457367 31.164251 47.419338
+v -76.873077 31.975798 47.419338
+v -78.268913 31.748541 47.419338
+v -77.684624 32.560085 47.419338
+v -80.500679 25.840891 47.419338
+v -79.994995 26.703611 47.419338
+v -81.363396 26.346571 47.419338
+v -80.857712 27.209291 47.419338
+v -83.000481 20.243422 47.419338
+v -82.582275 21.151777 47.419338
+v -83.908836 20.661625 47.419338
+v -83.490631 21.569979 47.419338
+v -73.924698 36.178265 47.419338
+v -73.270676 36.934738 47.419338
+v -74.681175 36.832291 47.419338
+v -74.027145 37.588764 47.419338
+v -69.957146 40.857883 47.419338
+v -69.241898 41.556751 47.419338
+v -70.656013 41.573132 47.419338
+v -69.940765 42.271999 47.419338
+v -50.732716 55.992142 47.419342
+v -49.845036 56.452606 47.419342
+v -51.193180 56.879822 47.419342
+v -50.305500 57.340286 47.419342
+v -55.952126 52.756798 47.419342
+v -55.098045 53.276936 47.419342
+v -56.472263 53.610882 47.419342
+v -55.618183 54.131020 47.419342
+v -60.923855 49.154495 47.419342
+v -60.109264 49.734528 47.419342
+v -61.503891 49.969086 47.419342
+v -60.689297 50.549118 47.419342
+v -65.607185 45.186569 47.419342
+v -64.838638 45.826363 47.419342
+v -66.246979 45.955116 47.419342
+v -65.478432 46.594910 47.419342
+v -39.693764 61.367290 47.419342
+v -38.754257 61.709816 47.419342
+v -40.036289 62.306797 47.419342
+v -39.096783 62.649326 47.419342
+v -45.302277 58.861507 47.419342
+v -44.386295 59.262733 47.419342
+v -45.703503 59.777485 47.419342
+v -44.787521 60.178711 47.419342
+v -22.083582 66.735176 47.419342
+v -21.098080 66.904831 47.419342
+v -22.253241 67.720680 47.419342
+v -21.267738 67.890335 47.419342
+v -33.936890 63.512615 47.419342
+v -32.978184 63.797009 47.419342
+v -34.221283 64.471329 47.419342
+v -33.262577 64.755722 47.419342
+v -28.058605 65.300842 47.419342
+v -27.084663 65.527634 47.419342
+v -28.285400 66.274780 47.419342
+v -27.311457 66.501572 47.419342
+v -9.933313 68.552994 47.419342
+v -8.934904 68.609375 47.419342
+v -9.989696 69.551407 47.419342
+v -8.991286 69.607788 47.419342
+v -16.034664 67.818466 47.419342
+v -15.041058 67.931358 47.419342
+v -16.147558 68.812073 47.419342
+v -15.153952 68.924965 47.419342
+v 2.345403 68.981499 47.419342
+v 3.343812 68.925117 47.419342
+v 2.401786 69.979912 47.419342
+v 3.400195 69.923531 47.419342
+v -3.800000 68.940384 47.419342
+v -2.800000 68.940384 47.419342
+v -3.800000 69.940384 47.419342
+v -2.800000 69.940384 47.419342
+v 14.593761 68.024590 47.419342
+v 15.579264 67.854927 47.419342
+v 14.763421 69.010094 47.419342
+v 15.748923 68.840431 47.419342
+v 8.483252 68.676460 47.419342
+v 9.476858 68.563568 47.419342
+v 8.596146 69.670067 47.419342
+v 9.589752 69.557175 47.419342
+v 32.553501 63.970493 47.419342
+v 33.493011 63.627968 47.419342
+v 32.896030 64.910004 47.419342
+v 33.835537 64.567474 47.419342
+v 26.650711 65.674004 47.419342
+v 27.609419 65.389610 47.419342
+v 26.935104 66.632713 47.419342
+v 27.893812 66.348320 47.419342
+v 20.656641 67.024475 47.419342
+v 21.630583 66.797676 47.419342
+v 20.883434 67.998413 47.419342
+v 21.857378 67.771622 47.419342
+v 43.986362 59.491673 47.419342
+v 44.874039 59.031208 47.419342
+v 44.446827 60.379349 47.419342
+v 45.334503 59.918884 47.419342
+v 38.340832 61.910824 47.419342
+v 39.256813 61.509598 47.419342
+v 38.742058 62.826801 47.419342
+v 39.658039 62.425575 47.419342
+v 64.521248 46.169285 47.419342
+v 65.236496 45.470413 47.419342
+v 65.220116 46.884533 47.419342
+v 65.935364 46.185665 47.419342
+v 59.766232 50.049004 47.419342
+v 60.534775 49.409210 47.419342
+v 60.406025 50.817551 47.419342
+v 61.174572 50.177753 47.419342
+v 54.732956 53.562756 47.419342
+v 55.547550 52.982719 47.419342
+v 55.312992 54.377346 47.419342
+v 56.127583 53.797314 47.419342
+v 49.461102 56.709850 47.419342
+v 50.315186 56.189713 47.419342
+v 49.981243 57.563931 47.419342
+v 50.835323 57.043793 47.419342
+v 68.954117 41.927467 47.419338
+v 69.608139 41.170994 47.419338
+v 69.710594 42.581490 47.419338
+v 70.364616 41.825016 47.419338
+v 73.016769 37.332001 47.419338
+v 73.601059 36.520454 47.419338
+v 73.828316 37.916286 47.419338
+v 74.412605 37.104740 47.419338
+v 79.822144 27.146914 47.419338
+v 80.240349 26.238560 47.419338
+v 80.730499 27.565115 47.419338
+v 81.148697 26.656761 47.419338
+v 82.456192 21.612597 47.419338
+v 82.778572 20.665985 47.419338
+v 83.402809 21.934973 47.419338
+v 83.725182 20.988363 47.419338
+v 76.657501 32.397564 47.419338
+v 77.163185 31.534847 47.419338
+v 77.520218 32.903248 47.419338
+v 78.025902 32.040527 47.419338
+v 85.932098 9.878977 47.419338
+v 86.043198 8.885168 47.419338
+v 86.925903 9.990080 47.419338
+v 87.037010 8.996271 47.419338
+v 84.507881 15.838268 47.419338
+v 84.727264 14.862630 47.419338
+v 85.483513 16.057653 47.419338
+v 85.702904 15.082016 47.419338
+v 86.694740 3.799998 47.419338
+v 86.694740 2.799998 47.419338
+v 87.694740 3.799998 47.419338
+v 87.694740 2.799998 47.419338
+v 87.603249 -0.460133 48.832268
+v 85.783318 14.615106 48.832268
+v 80.663483 28.071392 48.832268
+v 73.399765 39.118938 48.832268
+v 65.004555 47.803185 48.832272
+v 53.023567 56.399723 48.832272
+v 39.063068 63.034153 48.832272
+v 20.004288 68.197174 48.832272
+v 2.497623 69.898598 48.832272
+v -19.298763 68.356636 48.832272
+v -43.407795 61.356514 48.832272
+v -60.107311 51.841091 48.832272
+v -73.352875 39.299427 48.832268
+v -81.622917 26.276159 48.832268
+v -86.518860 11.432999 48.832268
+v -87.514679 -3.214102 48.832268
+v -85.386032 -16.114588 48.832268
+v -80.859581 -27.690897 48.832268
+v -74.704948 -37.458206 48.832268
+v -67.606567 -45.417202 48.832264
+v -57.409115 -53.637634 48.832264
+v -45.468143 -60.349945 48.832264
+v -29.141951 -66.198509 48.832264
+v -10.418418 -69.458588 48.832264
+v 7.136874 -69.719963 48.832264
+v 28.764334 -66.354027 48.832264
+v 45.883278 -60.242630 48.832264
+v 62.476810 -50.025314 48.832264
+v 74.368538 -38.020405 48.832268
+v 82.463196 -24.440210 48.832268
+v 86.208633 -12.940502 48.832268
+v 87.168144 -2.872934 47.419338
+v 87.188179 -2.918745 47.419338
+v 87.237869 -2.924300 47.419338
+v 87.197800 -2.832678 47.419338
+v 87.267525 -2.884045 47.419338
+v 87.247490 -2.838234 47.419338
+v 85.171051 -15.036730 47.419338
+v 85.180756 -15.085779 47.419338
+v 85.228088 -15.101898 47.419338
+v 85.208672 -15.003799 47.419338
+v 85.265709 -15.068968 47.419338
+v 85.256004 -15.019918 47.419338
+v 86.504562 -9.009965 47.419338
+v 86.519447 -9.057696 47.419338
+v 86.568230 -9.068666 47.419338
+v 86.538452 -8.973204 47.419338
+v 86.602119 -9.031904 47.419338
+v 86.587234 -8.984173 47.419338
+v 77.530418 -31.832958 47.419338
+v 77.525406 -31.882708 47.419338
+v 77.565979 -31.911921 47.419338
+v 77.576004 -31.812426 47.419338
+v 77.611572 -31.891388 47.419338
+v 77.616585 -31.841639 47.419338
+v 80.636063 -26.499811 47.419338
+v 80.635735 -26.549810 47.419338
+v 80.678864 -26.575094 47.419338
+v 80.679527 -26.475096 47.419338
+v 80.722328 -26.550379 47.419338
+v 80.722664 -26.500380 47.419338
+v 83.200142 -20.885794 47.419338
+v 83.204735 -20.935581 47.419338
+v 83.250153 -20.956491 47.419338
+v 83.240959 -20.856916 47.419338
+v 83.290977 -20.927614 47.419338
+v 83.286377 -20.877827 47.419338
+v 73.938103 -36.850819 47.419338
+v 73.928688 -36.899929 47.419338
+v 73.966515 -36.932629 47.419338
+v 73.985329 -36.834415 47.419338
+v 74.013748 -36.916222 47.419338
+v 74.023155 -36.867115 47.419338
+v 69.914017 -41.529186 47.419338
+v 69.900513 -41.577328 47.419338
+v 69.935455 -41.613091 47.419338
+v 69.962456 -41.516804 47.419338
+v 69.983902 -41.600712 47.419338
+v 69.997398 -41.552567 47.419338
+v 50.496086 -56.621838 47.419334
+v 50.469158 -56.663967 47.419334
+v 50.492184 -56.708351 47.419334
+v 50.546036 -56.624092 47.419334
+v 50.542130 -56.710606 47.419334
+v 50.569057 -56.668476 47.419334
+v 55.759148 -53.401211 47.419334
+v 55.735168 -53.445087 47.419334
+v 55.761177 -53.487793 47.419334
+v 55.809135 -53.400043 47.419334
+v 55.811161 -53.486622 47.419334
+v 55.835140 -53.442745 47.419334
+v 60.777576 -49.811085 47.419334
+v 60.756805 -49.856567 47.419334
+v 60.785805 -49.897297 47.419334
+v 60.827351 -49.806332 47.419334
+v 60.835579 -49.892544 47.419334
+v 60.856350 -49.847061 47.419334
+v 65.510818 -45.852322 47.419334
+v 65.493530 -45.899239 47.419334
+v 65.525520 -45.937664 47.419334
+v 65.560089 -45.843830 47.419334
+v 65.574799 -45.929176 47.419334
+v 65.592079 -45.882256 47.419334
+v 39.378147 -61.961338 47.419334
+v 39.346027 -61.999660 47.419334
+v 39.363155 -62.046635 47.419334
+v 39.427391 -61.969994 47.419334
+v 39.412399 -62.055290 47.419334
+v 39.444519 -62.016972 47.419334
+v 45.024837 -59.474319 47.419334
+v 44.995205 -59.514591 47.419334
+v 45.015266 -59.560390 47.419334
+v 45.074532 -59.479843 47.419334
+v 45.064960 -59.565914 47.419334
+v 45.094593 -59.525642 47.419334
+v 21.667177 -67.263481 47.419334
+v 21.628746 -67.295464 47.419334
+v 21.637228 -67.344742 47.419334
+v 21.714092 -67.280769 47.419334
+v 21.684143 -67.362030 47.419334
+v 21.722574 -67.330048 47.419334
+v 33.585514 -64.086235 47.419334
+v 33.551109 -64.122513 47.419334
+v 33.565331 -64.170448 47.419334
+v 33.634136 -64.097885 47.419334
+v 33.613953 -64.182106 47.419334
+v 33.648357 -64.145821 47.419334
+v 27.673693 -65.852509 47.419334
+v 27.637188 -65.886681 47.419334
+v 27.648529 -65.935379 47.419334
+v 27.721535 -65.867035 47.419334
+v 27.696371 -65.949905 47.419334
+v 27.732874 -65.915733 47.419334
+v 9.459481 -69.030472 47.419334
+v 9.417658 -69.057869 47.419334
+v 9.420477 -69.107796 47.419334
+v 9.504123 -69.052986 47.419334
+v 9.465119 -69.130310 47.419334
+v 9.506942 -69.102913 47.419334
+v 15.588664 -68.322037 47.419334
+v 15.548462 -68.351761 47.419334
+v 15.554107 -68.401443 47.419334
+v 15.634511 -68.341988 47.419334
+v 15.599953 -68.421394 47.419334
+v 15.640155 -68.391670 47.419334
+v -2.869980 -69.402596 47.419334
+v -2.914622 -69.425110 47.419334
+v -2.917441 -69.475029 47.419334
+v -2.828157 -69.429993 47.419334
+v -2.875618 -69.502434 47.419334
+v -2.830976 -69.479912 47.419334
+v 3.300000 -69.390381 47.419334
+v 3.256699 -69.415382 47.419334
+v 3.256699 -69.465378 47.419334
+v 3.343301 -69.415382 47.419334
+v 3.300000 -69.490379 47.419334
+v 3.343301 -69.465378 47.419334
+v -15.162859 -68.383232 47.419334
+v -15.209774 -68.400528 47.419334
+v -15.218257 -68.449799 47.419334
+v -15.124428 -68.415222 47.419334
+v -15.179826 -68.481789 47.419334
+v -15.132911 -68.464493 47.419334
+v -9.030857 -69.067139 47.419334
+v -9.076704 -69.087090 47.419334
+v -9.082349 -69.136765 47.419334
+v -8.990655 -69.096863 47.419334
+v -9.042147 -69.166496 47.419334
+v -8.996300 -69.146545 47.419334
+v -33.177395 -64.222015 47.419334
+v -33.226639 -64.230667 47.419334
+v -33.243763 -64.277641 47.419334
+v -33.145275 -64.260330 47.419334
+v -33.211647 -64.315964 47.419334
+v -33.162399 -64.307304 47.419334
+v -27.258041 -65.963226 47.419334
+v -27.306665 -65.974884 47.419334
+v -27.320885 -66.022820 47.419334
+v -27.223639 -65.999512 47.419334
+v -27.286480 -66.059097 47.419334
+v -27.237858 -66.047447 47.419334
+v -21.245670 -67.349350 47.419334
+v -21.293512 -67.363876 47.419334
+v -21.304852 -67.412575 47.419334
+v -21.209166 -67.383522 47.419334
+v -21.268349 -67.446747 47.419334
+v -21.220507 -67.432213 47.419334
+v -44.637409 -59.660904 47.419334
+v -44.687359 -59.663155 47.419334
+v -44.710381 -59.707539 47.419334
+v -44.610485 -59.703033 47.419334
+v -44.683456 -59.749672 47.419334
+v -44.633507 -59.747417 47.419334
+v -38.979374 -62.122410 47.419334
+v -39.029068 -62.127934 47.419334
+v -39.049129 -62.173733 47.419334
+v -38.949741 -62.162682 47.419334
+v -39.019497 -62.214005 47.419334
+v -38.969803 -62.208481 47.419334
+v -65.193367 -46.141720 47.419334
+v -65.241806 -46.129337 47.419334
+v -65.276749 -46.165100 47.419334
+v -65.179863 -46.189861 47.419334
+v -65.263252 -46.213245 47.419334
+v -65.214806 -46.225624 47.419334
+v -60.438412 -50.074959 47.419334
+v -60.487682 -50.066467 47.419334
+v -60.519672 -50.104897 47.419334
+v -60.421127 -50.121876 47.419334
+v -60.502388 -50.151814 47.419334
+v -60.453117 -50.160305 47.419334
+v -55.401268 -53.639313 47.419334
+v -55.451042 -53.634560 47.419334
+v -55.480045 -53.675289 47.419334
+v -55.380497 -53.684792 47.419334
+v -55.459270 -53.720772 47.419334
+v -55.409496 -53.725521 47.419334
+v -50.122208 -56.834126 47.419334
+v -50.172192 -56.832954 47.419334
+v -50.198200 -56.875660 47.419334
+v -50.098228 -56.877998 47.419334
+v -50.174221 -56.919533 47.419334
+v -50.124233 -56.920704 47.419334
+v -69.621544 -41.843548 47.419338
+v -69.668777 -41.827145 47.419338
+v -69.706596 -41.859844 47.419338
+v -69.612137 -41.892654 47.419338
+v -69.697189 -41.908951 47.419338
+v -69.649956 -41.925358 47.419338
+v -73.674110 -37.189163 47.419338
+v -73.719704 -37.168629 47.419338
+v -73.760277 -37.197845 47.419338
+v -73.669098 -37.238911 47.419338
+v -73.755264 -37.247593 47.419338
+v -73.709679 -37.268127 47.419338
+v -80.440002 -26.880930 47.419338
+v -80.480820 -26.852053 47.419338
+v -80.526237 -26.872963 47.419338
+v -80.444603 -26.930719 47.419338
+v -80.530838 -26.922750 47.419338
+v -80.490021 -26.951630 47.419338
+v -83.043358 -21.284365 47.419338
+v -83.080986 -21.251434 47.419338
+v -83.128311 -21.267553 47.419338
+v -83.053062 -21.333412 47.419338
+v -83.138023 -21.316603 47.419338
+v -83.100395 -21.349531 47.419338
+v -77.298569 -32.193768 47.419338
+v -77.342033 -32.169056 47.419338
+v -77.385162 -32.194340 47.419338
+v -77.298233 -32.243767 47.419338
+v -77.384834 -32.244339 47.419338
+v -77.341370 -32.269051 47.419338
+v -86.434860 -9.432073 47.419338
+v -86.464523 -9.391817 47.419338
+v -86.514214 -9.397372 47.419338
+v -86.454895 -9.477883 47.419338
+v -86.534241 -9.443183 47.419338
+v -86.504585 -9.483438 47.419338
+v -85.056610 -15.449177 47.419338
+v -85.090500 -15.412415 47.419338
+v -85.139282 -15.423384 47.419338
+v -85.071503 -15.496907 47.419338
+v -85.154175 -15.471115 47.419338
+v -85.120285 -15.507875 47.419338
+v -87.168144 2.872930 47.419338
+v -87.188179 2.918741 47.419338
+v -87.237869 2.924296 47.419338
+v -87.197800 2.832674 47.419338
+v -87.267525 2.884041 47.419338
+v -87.247490 2.838230 47.419338
+v -87.144737 -3.300002 47.419338
+v -87.169739 -3.256701 47.419338
+v -87.219734 -3.256701 47.419338
+v -87.169739 -3.343303 47.419338
+v -87.244736 -3.300002 47.419338
+v -87.219734 -3.343303 47.419338
+v -85.171051 15.036726 47.419338
+v -85.180756 15.085775 47.419338
+v -85.228088 15.101894 47.419338
+v -85.208672 15.003796 47.419338
+v -85.265709 15.068964 47.419338
+v -85.256004 15.019915 47.419338
+v -86.504562 9.009961 47.419338
+v -86.519447 9.057693 47.419338
+v -86.568230 9.068662 47.419338
+v -86.538452 8.973200 47.419338
+v -86.602119 9.031900 47.419338
+v -86.587234 8.984169 47.419338
+v -77.530418 31.832954 47.419338
+v -77.525406 31.882704 47.419338
+v -77.565979 31.911917 47.419338
+v -77.576004 31.812422 47.419338
+v -77.611572 31.891384 47.419338
+v -77.616585 31.841635 47.419338
+v -80.636063 26.499807 47.419338
+v -80.635735 26.549807 47.419338
+v -80.678864 26.575090 47.419338
+v -80.679527 26.475092 47.419338
+v -80.722328 26.550375 47.419338
+v -80.722664 26.500376 47.419338
+v -83.200142 20.885790 47.419338
+v -83.204735 20.935577 47.419338
+v -83.250153 20.956488 47.419338
+v -83.240959 20.856913 47.419338
+v -83.290977 20.927610 47.419338
+v -83.286377 20.877823 47.419338
+v -73.938103 36.850811 47.419338
+v -73.928688 36.899921 47.419338
+v -73.966515 36.932621 47.419338
+v -73.985329 36.834408 47.419338
+v -74.013748 36.916214 47.419338
+v -74.023155 36.867107 47.419338
+v -69.914017 41.529179 47.419338
+v -69.900513 41.577320 47.419338
+v -69.935455 41.613083 47.419338
+v -69.962456 41.516796 47.419338
+v -69.983902 41.600704 47.419338
+v -69.997398 41.552559 47.419338
+v -50.496086 56.621830 47.419342
+v -50.469158 56.663960 47.419342
+v -50.492184 56.708344 47.419342
+v -50.546036 56.624084 47.419342
+v -50.542130 56.710598 47.419342
+v -50.569057 56.668468 47.419342
+v -55.759148 53.401203 47.419342
+v -55.735168 53.445080 47.419342
+v -55.761177 53.487785 47.419342
+v -55.809135 53.400036 47.419342
+v -55.811161 53.486614 47.419342
+v -55.835140 53.442738 47.419342
+v -60.777576 49.811077 47.419342
+v -60.756805 49.856560 47.419342
+v -60.785805 49.897289 47.419342
+v -60.827351 49.806324 47.419342
+v -60.835579 49.892536 47.419342
+v -60.856350 49.847054 47.419342
+v -65.510818 45.852314 47.419342
+v -65.493530 45.899231 47.419342
+v -65.525520 45.937656 47.419342
+v -65.560089 45.843822 47.419342
+v -65.574799 45.929169 47.419342
+v -65.592079 45.882248 47.419342
+v -39.378147 61.961330 47.419342
+v -39.346027 61.999653 47.419342
+v -39.363155 62.046627 47.419342
+v -39.427391 61.969986 47.419342
+v -39.412399 62.055283 47.419342
+v -39.444519 62.016964 47.419342
+v -45.024837 59.474312 47.419342
+v -44.995205 59.514584 47.419342
+v -45.015266 59.560383 47.419342
+v -45.074532 59.479836 47.419342
+v -45.064960 59.565907 47.419342
+v -45.094593 59.525635 47.419342
+v -21.667177 67.263481 47.419342
+v -21.628746 67.295464 47.419342
+v -21.637228 67.344742 47.419342
+v -21.714092 67.280769 47.419342
+v -21.684143 67.362030 47.419342
+v -21.722574 67.330048 47.419342
+v -33.585514 64.086235 47.419342
+v -33.551109 64.122513 47.419342
+v -33.565331 64.170448 47.419342
+v -33.634136 64.097885 47.419342
+v -33.613953 64.182106 47.419342
+v -33.648357 64.145821 47.419342
+v -27.673693 65.852509 47.419342
+v -27.637188 65.886681 47.419342
+v -27.648529 65.935379 47.419342
+v -27.721535 65.867035 47.419342
+v -27.696371 65.949905 47.419342
+v -27.732874 65.915733 47.419342
+v -9.459481 69.030472 47.419342
+v -9.417658 69.057869 47.419342
+v -9.420477 69.107796 47.419342
+v -9.504123 69.052986 47.419342
+v -9.465119 69.130310 47.419342
+v -9.506942 69.102913 47.419342
+v -15.588664 68.322037 47.419342
+v -15.548462 68.351761 47.419342
+v -15.554107 68.401443 47.419342
+v -15.634511 68.341988 47.419342
+v -15.599953 68.421394 47.419342
+v -15.640155 68.391670 47.419342
+v 2.869980 69.402596 47.419342
+v 2.914622 69.425110 47.419342
+v 2.917441 69.475029 47.419342
+v 2.828157 69.429993 47.419342
+v 2.875618 69.502434 47.419342
+v 2.830976 69.479912 47.419342
+v -3.300000 69.390381 47.419342
+v -3.256699 69.415382 47.419342
+v -3.256699 69.465378 47.419342
+v -3.343301 69.415382 47.419342
+v -3.300000 69.490379 47.419342
+v -3.343301 69.465378 47.419342
+v 15.162859 68.383232 47.419342
+v 15.209774 68.400528 47.419342
+v 15.218257 68.449799 47.419342
+v 15.124428 68.415222 47.419342
+v 15.179826 68.481789 47.419342
+v 15.132911 68.464493 47.419342
+v 9.030857 69.067139 47.419342
+v 9.076704 69.087090 47.419342
+v 9.082349 69.136765 47.419342
+v 8.990655 69.096863 47.419342
+v 9.042147 69.166496 47.419342
+v 8.996300 69.146545 47.419342
+v 33.177395 64.222015 47.419342
+v 33.226639 64.230667 47.419342
+v 33.243763 64.277641 47.419342
+v 33.145275 64.260330 47.419342
+v 33.211647 64.315964 47.419342
+v 33.162399 64.307304 47.419342
+v 27.258041 65.963226 47.419342
+v 27.306665 65.974884 47.419342
+v 27.320885 66.022820 47.419342
+v 27.223639 65.999512 47.419342
+v 27.286480 66.059097 47.419342
+v 27.237858 66.047447 47.419342
+v 21.245670 67.349350 47.419342
+v 21.293512 67.363876 47.419342
+v 21.304852 67.412575 47.419342
+v 21.209166 67.383522 47.419342
+v 21.268349 67.446747 47.419342
+v 21.220507 67.432213 47.419342
+v 44.637409 59.660896 47.419342
+v 44.687359 59.663147 47.419342
+v 44.710381 59.707531 47.419342
+v 44.610485 59.703026 47.419342
+v 44.683456 59.749664 47.419342
+v 44.633507 59.747410 47.419342
+v 38.979374 62.122402 47.419342
+v 39.029068 62.127926 47.419342
+v 39.049129 62.173725 47.419342
+v 38.949741 62.162674 47.419342
+v 39.019497 62.213997 47.419342
+v 38.969803 62.208473 47.419342
+v 65.193367 46.141712 47.419342
+v 65.241806 46.129330 47.419342
+v 65.276749 46.165092 47.419342
+v 65.179863 46.189854 47.419342
+v 65.263252 46.213238 47.419342
+v 65.214806 46.225616 47.419342
+v 60.438412 50.074951 47.419342
+v 60.487682 50.066460 47.419342
+v 60.519672 50.104889 47.419342
+v 60.421127 50.121868 47.419342
+v 60.502388 50.151806 47.419342
+v 60.453117 50.160297 47.419342
+v 55.401268 53.639305 47.419342
+v 55.451042 53.634552 47.419342
+v 55.480045 53.675282 47.419342
+v 55.380497 53.684784 47.419342
+v 55.459270 53.720764 47.419342
+v 55.409496 53.725513 47.419342
+v 50.122208 56.834118 47.419342
+v 50.172192 56.832947 47.419342
+v 50.198200 56.875652 47.419342
+v 50.098228 56.877991 47.419342
+v 50.174221 56.919525 47.419342
+v 50.124233 56.920696 47.419342
+v 69.621544 41.843540 47.419338
+v 69.668777 41.827137 47.419338
+v 69.706596 41.859837 47.419338
+v 69.612137 41.892647 47.419338
+v 69.697189 41.908943 47.419338
+v 69.649956 41.925350 47.419338
+v 73.674110 37.189156 47.419338
+v 73.719704 37.168621 47.419338
+v 73.760277 37.197838 47.419338
+v 73.669098 37.238903 47.419338
+v 73.755264 37.247585 47.419338
+v 73.709679 37.268120 47.419338
+v 80.440002 26.880926 47.419338
+v 80.480820 26.852049 47.419338
+v 80.526237 26.872959 47.419338
+v 80.444603 26.930716 47.419338
+v 80.530838 26.922747 47.419338
+v 80.490021 26.951626 47.419338
+v 83.043358 21.284361 47.419338
+v 83.080986 21.251431 47.419338
+v 83.128311 21.267550 47.419338
+v 83.053062 21.333408 47.419338
+v 83.138023 21.316599 47.419338
+v 83.100395 21.349527 47.419338
+v 77.298569 32.193760 47.419338
+v 77.342033 32.169048 47.419338
+v 77.385162 32.194332 47.419338
+v 77.298233 32.243759 47.419338
+v 77.384834 32.244331 47.419338
+v 77.341370 32.269043 47.419338
+v 86.434860 9.432069 47.419338
+v 86.464523 9.391813 47.419338
+v 86.514214 9.397368 47.419338
+v 86.454895 9.477880 47.419338
+v 86.534241 9.443179 47.419338
+v 86.504585 9.483435 47.419338
+v 85.056610 15.449173 47.419338
+v 85.090500 15.412411 47.419338
+v 85.139282 15.423380 47.419338
+v 85.071503 15.496903 47.419338
+v 85.154175 15.471111 47.419338
+v 85.120285 15.507872 47.419338
+v 87.144737 3.299998 47.419338
+v 87.169739 3.256697 47.419338
+v 87.219734 3.256697 47.419338
+v 87.169739 3.343299 47.419338
+v 87.244736 3.299998 47.419338
+v 87.219734 3.343299 47.419338
+v 87.603249 -0.460133 47.440170
+v 85.783318 14.615106 47.440170
+v 80.663483 28.071392 47.440170
+v 73.399765 39.118938 47.440170
+v 65.004555 47.803185 47.440174
+v 53.023567 56.399723 47.440174
+v 39.063068 63.034153 47.440174
+v 20.004288 68.197174 47.440174
+v 2.497623 69.898598 47.440174
+v -19.298763 68.356636 47.440174
+v -43.407795 61.356514 47.440174
+v -60.107311 51.841091 47.440174
+v -73.352875 39.299427 47.440170
+v -81.622917 26.276159 47.440170
+v -86.518860 11.432999 47.440170
+v -87.514679 -3.214102 47.440170
+v -85.386032 -16.114588 47.440170
+v -80.859581 -27.690897 47.440170
+v -74.704948 -37.458206 47.440170
+v -67.606567 -45.417202 47.440166
+v -57.409115 -53.637634 47.440166
+v -45.468143 -60.349945 47.440166
+v -29.141951 -66.198509 47.440166
+v -10.418418 -69.458588 47.440166
+v 7.136874 -69.719963 47.440166
+v 28.764334 -66.354027 47.440166
+v 45.883278 -60.242630 47.440166
+v 62.476810 -50.025314 47.440166
+v 74.368538 -38.020405 47.440170
+v 82.463196 -24.440210 47.440170
+v 86.208633 -12.940502 47.440170
+v 87.168144 -2.872934 47.440170
+v 87.188179 -2.918745 47.440170
+v 87.197800 -2.832678 47.440170
+v 87.247490 -2.838234 47.440170
+v 87.267525 -2.884045 47.440170
+v 87.237869 -2.924300 47.440170
+v 85.171051 -15.036730 47.440170
+v 85.180756 -15.085779 47.440170
+v 85.208672 -15.003799 47.440170
+v 85.256004 -15.019918 47.440170
+v 85.265709 -15.068968 47.440170
+v 85.228088 -15.101898 47.440170
+v 86.504562 -9.009965 47.440170
+v 86.519447 -9.057696 47.440170
+v 86.538452 -8.973204 47.440170
+v 86.587234 -8.984173 47.440170
+v 86.602119 -9.031904 47.440170
+v 86.568230 -9.068666 47.440170
+v 77.530418 -31.832958 47.719337
+v 77.525406 -31.882708 47.719337
+v 77.576004 -31.812426 47.719337
+v 77.616585 -31.841639 47.719337
+v 77.615845 -31.848957 47.719337
+v 77.611572 -31.891388 47.541565
+v 77.565979 -31.911921 47.719337
+v 77.581154 -31.905087 47.719337
+v 80.636063 -26.499811 47.440170
+v 80.635735 -26.549810 47.440170
+v 80.679527 -26.475096 47.440170
+v 80.722664 -26.500380 47.440170
+v 80.722328 -26.550379 47.440170
+v 80.678864 -26.575094 47.440170
+v 83.200142 -20.885794 47.440170
+v 83.204735 -20.935581 47.440170
+v 83.240959 -20.856916 47.440170
+v 83.286377 -20.877827 47.440170
+v 83.290977 -20.927614 47.440170
+v 83.250153 -20.956491 47.440170
+v 73.938103 -36.850819 47.719337
+v 73.928688 -36.899929 47.719337
+v 73.985329 -36.834415 47.719337
+v 74.023155 -36.867115 47.719337
+v 74.013748 -36.916222 47.719337
+v 73.966515 -36.932629 47.719337
+v 69.914017 -41.529186 47.719337
+v 69.900513 -41.577328 47.719337
+v 69.962456 -41.516804 47.719337
+v 69.997398 -41.552567 47.719337
+v 69.983902 -41.600712 47.719337
+v 69.935455 -41.613091 47.719337
+v 50.496086 -56.621838 47.719334
+v 50.469158 -56.663967 47.719334
+v 50.546036 -56.624092 47.719334
+v 50.569057 -56.668476 47.719334
+v 50.542130 -56.710606 47.719334
+v 50.492184 -56.708351 47.719334
+v 55.759148 -53.401211 47.719334
+v 55.735168 -53.445087 47.719334
+v 55.809135 -53.400043 47.719334
+v 55.835140 -53.442745 47.719334
+v 55.811161 -53.486622 47.719334
+v 55.761177 -53.487793 47.719334
+v 60.777576 -49.811085 47.719334
+v 60.756805 -49.856567 47.719334
+v 60.827351 -49.806332 47.719334
+v 60.856350 -49.847061 47.719334
+v 60.835579 -49.892544 47.719334
+v 60.785805 -49.897297 47.719334
+v 65.510818 -45.852322 47.719334
+v 65.493530 -45.899239 47.719334
+v 65.560089 -45.843830 47.719334
+v 65.592079 -45.882256 47.719334
+v 65.574799 -45.929176 47.719334
+v 65.525520 -45.937664 47.719334
+v 39.378147 -61.961338 47.719334
+v 39.346027 -61.999660 47.719334
+v 39.427391 -61.969994 47.719334
+v 39.444519 -62.016972 47.719334
+v 39.412399 -62.055290 47.719334
+v 39.363155 -62.046635 47.719334
+v 45.024837 -59.474319 47.719334
+v 44.995205 -59.514591 47.719334
+v 45.074532 -59.479843 47.719334
+v 45.094593 -59.525642 47.719334
+v 45.064960 -59.565914 47.719334
+v 45.015266 -59.560390 47.719334
+v 21.667177 -67.263481 47.440166
+v 21.628746 -67.295464 47.440166
+v 21.714092 -67.280769 47.440166
+v 21.722574 -67.330048 47.440166
+v 21.684143 -67.362030 47.440166
+v 21.637228 -67.344742 47.440166
+v 33.585514 -64.086235 47.719334
+v 33.551109 -64.122513 47.556953
+v 33.575199 -64.097115 47.719334
+v 33.599339 -64.089546 47.719334
+v 33.634136 -64.097885 47.544342
+v 33.637245 -64.108376 47.440166
+v 33.648357 -64.145821 47.440166
+v 33.613953 -64.182106 47.440166
+v 33.565331 -64.170448 47.440166
+v 33.554596 -64.134270 47.440166
+v 27.673693 -65.852509 47.440166
+v 27.637188 -65.886681 47.440166
+v 27.721535 -65.867035 47.440166
+v 27.732874 -65.915733 47.440166
+v 27.696371 -65.949905 47.440166
+v 27.648529 -65.935379 47.440166
+v 9.459481 -69.030472 47.440166
+v 9.417658 -69.057869 47.440166
+v 9.504123 -69.052986 47.440166
+v 9.506942 -69.102913 47.440166
+v 9.465119 -69.130310 47.440166
+v 9.420477 -69.107796 47.440166
+v 15.588664 -68.322037 47.440166
+v 15.548462 -68.351761 47.440166
+v 15.634511 -68.341988 47.440166
+v 15.640155 -68.391670 47.440166
+v 15.599953 -68.421394 47.440166
+v 15.554107 -68.401443 47.440166
+v -2.869980 -69.402596 47.440166
+v -2.914622 -69.425110 47.440166
+v -2.828157 -69.429993 47.440166
+v -2.830976 -69.479912 47.440166
+v -2.875618 -69.502434 47.440166
+v -2.917441 -69.475029 47.440166
+v 3.300000 -69.390381 47.440166
+v 3.256699 -69.415382 47.440166
+v 3.343301 -69.415382 47.440166
+v 3.343301 -69.465378 47.440166
+v 3.300000 -69.490379 47.440166
+v 3.256699 -69.465378 47.440166
+v -15.162859 -68.383232 47.440166
+v -15.209774 -68.400528 47.440166
+v -15.124428 -68.415222 47.440166
+v -15.132911 -68.464493 47.440166
+v -15.179826 -68.481789 47.440166
+v -15.218257 -68.449799 47.440166
+v -9.030857 -69.067139 47.440166
+v -9.076704 -69.087090 47.440166
+v -8.990655 -69.096863 47.440166
+v -8.996300 -69.146545 47.440166
+v -9.042147 -69.166496 47.440166
+v -9.082349 -69.136765 47.440166
+v -33.177395 -64.222015 47.440166
+v -33.226639 -64.230667 47.440166
+v -33.145275 -64.260330 47.440166
+v -33.162399 -64.307304 47.440166
+v -33.211647 -64.315964 47.440166
+v -33.243763 -64.277641 47.440166
+v -27.258041 -65.963226 47.440166
+v -27.306665 -65.974884 47.440166
+v -27.223639 -65.999512 47.440166
+v -27.237858 -66.047447 47.440166
+v -27.286480 -66.059097 47.440166
+v -27.320885 -66.022820 47.440166
+v -21.245670 -67.349350 47.440166
+v -21.293512 -67.363876 47.440166
+v -21.209166 -67.383522 47.440166
+v -21.220507 -67.432213 47.440166
+v -21.268349 -67.446747 47.440166
+v -21.304852 -67.412575 47.440166
+v -44.637409 -59.660904 47.719334
+v -44.687359 -59.663155 47.719334
+v -44.610485 -59.703033 47.719334
+v -44.633507 -59.747417 47.719334
+v -44.683456 -59.749672 47.719334
+v -44.710381 -59.707539 47.719334
+v -38.979374 -62.122410 47.719334
+v -39.029068 -62.127934 47.719334
+v -38.949741 -62.162682 47.719334
+v -38.951939 -62.167694 47.719334
+v -38.963711 -62.194572 47.440166
+v -38.969803 -62.208481 47.440166
+v -39.019497 -62.214005 47.440166
+v -39.049129 -62.173733 47.440166
+v -39.044769 -62.163776 47.440166
+v -39.032997 -62.136902 47.719334
+v -65.193367 -46.141720 47.719334
+v -65.241806 -46.129337 47.719334
+v -65.179863 -46.189861 47.719334
+v -65.214806 -46.225624 47.719334
+v -65.263252 -46.213245 47.719334
+v -65.276749 -46.165100 47.719334
+v -60.438412 -50.074959 47.719334
+v -60.487682 -50.066467 47.719334
+v -60.421127 -50.121876 47.719334
+v -60.453117 -50.160305 47.719334
+v -60.502388 -50.151814 47.719334
+v -60.519672 -50.104897 47.719334
+v -55.401268 -53.639313 47.719334
+v -55.451042 -53.634560 47.719334
+v -55.380497 -53.684792 47.719334
+v -55.409496 -53.725521 47.719334
+v -55.459270 -53.720772 47.719334
+v -55.480045 -53.675289 47.719334
+v -50.122208 -56.834126 47.719334
+v -50.172192 -56.832954 47.719334
+v -50.098228 -56.877998 47.719334
+v -50.124233 -56.920704 47.719334
+v -50.174221 -56.919533 47.719334
+v -50.198200 -56.875660 47.719334
+v -69.621544 -41.843548 47.719337
+v -69.668777 -41.827145 47.719337
+v -69.612137 -41.892654 47.719337
+v -69.649956 -41.925358 47.719337
+v -69.697189 -41.908951 47.719337
+v -69.706596 -41.859844 47.719337
+v -73.674110 -37.189163 47.719337
+v -73.719704 -37.168629 47.719337
+v -73.669098 -37.238911 47.719337
+v -73.709679 -37.268127 47.719337
+v -73.755264 -37.247593 47.719337
+v -73.760277 -37.197845 47.719337
+v -80.440002 -26.880930 47.440170
+v -80.480820 -26.852053 47.440170
+v -80.444603 -26.930719 47.440170
+v -80.490021 -26.951630 47.440170
+v -80.530838 -26.922750 47.440170
+v -80.526237 -26.872963 47.440170
+v -83.043358 -21.284365 47.440170
+v -83.080986 -21.251434 47.440170
+v -83.053062 -21.333412 47.440170
+v -83.100395 -21.349531 47.440170
+v -83.138023 -21.316603 47.440170
+v -83.128311 -21.267553 47.440170
+v -77.298569 -32.193768 47.719337
+v -77.342033 -32.169056 47.679527
+v -77.334351 -32.173420 47.719337
+v -77.298325 -32.230675 47.719337
+v -77.298233 -32.243767 47.653534
+v -77.317574 -32.255100 47.440170
+v -77.341370 -32.269051 47.440170
+v -77.384834 -32.244339 47.440170
+v -77.385162 -32.194340 47.440170
+v -77.363716 -32.181767 47.440170
+v -86.434860 -9.432073 47.440170
+v -86.464523 -9.391817 47.440170
+v -86.454895 -9.477883 47.440170
+v -86.504585 -9.483438 47.440170
+v -86.534241 -9.443183 47.440170
+v -86.514214 -9.397372 47.440170
+v -85.056610 -15.449177 47.440170
+v -85.090500 -15.412415 47.440170
+v -85.071503 -15.496907 47.440170
+v -85.120285 -15.507875 47.440170
+v -85.154175 -15.471115 47.440170
+v -85.139282 -15.423384 47.440170
+v -87.168144 2.872930 47.440170
+v -87.188179 2.918741 47.440170
+v -87.197800 2.832674 47.440170
+v -87.247490 2.838230 47.440170
+v -87.267525 2.884041 47.440170
+v -87.237869 2.924296 47.440170
+v -87.144737 -3.300002 47.440170
+v -87.169739 -3.256701 47.440170
+v -87.169739 -3.343303 47.440170
+v -87.219734 -3.343303 47.440170
+v -87.244736 -3.300002 47.440170
+v -87.219734 -3.256701 47.440170
+v -85.171051 15.036726 47.440170
+v -85.180756 15.085775 47.440170
+v -85.208672 15.003796 47.440170
+v -85.256004 15.019915 47.440170
+v -85.265709 15.068964 47.440170
+v -85.228088 15.101894 47.440170
+v -86.504562 9.009961 47.440170
+v -86.519447 9.057693 47.440170
+v -86.538452 8.973200 47.440170
+v -86.587234 8.984169 47.440170
+v -86.602119 9.031900 47.440170
+v -86.568230 9.068662 47.440170
+v -77.530418 31.832954 47.719337
+v -77.525406 31.882704 47.719337
+v -77.576004 31.812422 47.719337
+v -77.616585 31.841635 47.719337
+v -77.615845 31.848953 47.719337
+v -77.611572 31.891384 47.541565
+v -77.565979 31.911917 47.719337
+v -77.581154 31.905083 47.719337
+v -80.636063 26.499807 47.440170
+v -80.635735 26.549807 47.440170
+v -80.679527 26.475092 47.440170
+v -80.722664 26.500376 47.440170
+v -80.722328 26.550375 47.440170
+v -80.678864 26.575090 47.440170
+v -83.200142 20.885790 47.440170
+v -83.204735 20.935577 47.440170
+v -83.240959 20.856913 47.440170
+v -83.286377 20.877823 47.440170
+v -83.290977 20.927610 47.440170
+v -83.250153 20.956488 47.440170
+v -73.938103 36.850811 47.719337
+v -73.928688 36.899921 47.719337
+v -73.985329 36.834408 47.719337
+v -74.023155 36.867107 47.719337
+v -74.013748 36.916214 47.719337
+v -73.966515 36.932621 47.719337
+v -69.914017 41.529179 47.719337
+v -69.900513 41.577320 47.719337
+v -69.962456 41.516796 47.719337
+v -69.997398 41.552559 47.719337
+v -69.983902 41.600704 47.719337
+v -69.935455 41.613083 47.719337
+v -50.496086 56.621830 47.719341
+v -50.469158 56.663960 47.719341
+v -50.546036 56.624084 47.719341
+v -50.569057 56.668468 47.719341
+v -50.542130 56.710598 47.719341
+v -50.492184 56.708344 47.719341
+v -55.759148 53.401203 47.719341
+v -55.735168 53.445080 47.719341
+v -55.809135 53.400036 47.719341
+v -55.835140 53.442738 47.719341
+v -55.811161 53.486614 47.719341
+v -55.761177 53.487785 47.719341
+v -60.777576 49.811077 47.719341
+v -60.756805 49.856560 47.719341
+v -60.827351 49.806324 47.719341
+v -60.856350 49.847054 47.719341
+v -60.835579 49.892536 47.719341
+v -60.785805 49.897289 47.719341
+v -65.510818 45.852314 47.719341
+v -65.493530 45.899231 47.719341
+v -65.560089 45.843822 47.719341
+v -65.592079 45.882248 47.719341
+v -65.574799 45.929169 47.719341
+v -65.525520 45.937656 47.719341
+v -39.378147 61.961330 47.719341
+v -39.346027 61.999653 47.719341
+v -39.427391 61.969986 47.719341
+v -39.444519 62.016964 47.719341
+v -39.412399 62.055283 47.719341
+v -39.363155 62.046627 47.719341
+v -45.024837 59.474312 47.719341
+v -44.995205 59.514584 47.719341
+v -45.074532 59.479836 47.719341
+v -45.094593 59.525635 47.719341
+v -45.064960 59.565907 47.719341
+v -45.015266 59.560383 47.719341
+v -21.667177 67.263481 47.440174
+v -21.628746 67.295464 47.440174
+v -21.714092 67.280769 47.440174
+v -21.722574 67.330048 47.440174
+v -21.684143 67.362030 47.440174
+v -21.637228 67.344742 47.440174
+v -33.585514 64.086235 47.719341
+v -33.551109 64.122513 47.556961
+v -33.575199 64.097115 47.719341
+v -33.599339 64.089546 47.719341
+v -33.634136 64.097885 47.544350
+v -33.637245 64.108376 47.440174
+v -33.648357 64.145821 47.440174
+v -33.613953 64.182106 47.440174
+v -33.565331 64.170448 47.440174
+v -33.554596 64.134270 47.440174
+v -27.673693 65.852509 47.440174
+v -27.637188 65.886681 47.440174
+v -27.721535 65.867035 47.440174
+v -27.732874 65.915733 47.440174
+v -27.696371 65.949905 47.440174
+v -27.648529 65.935379 47.440174
+v -9.459481 69.030472 47.440174
+v -9.417658 69.057869 47.440174
+v -9.504123 69.052986 47.440174
+v -9.506942 69.102913 47.440174
+v -9.465119 69.130310 47.440174
+v -9.420477 69.107796 47.440174
+v -15.588664 68.322037 47.440174
+v -15.548462 68.351761 47.440174
+v -15.634511 68.341988 47.440174
+v -15.640155 68.391670 47.440174
+v -15.599953 68.421394 47.440174
+v -15.554107 68.401443 47.440174
+v 2.869980 69.402596 47.440174
+v 2.914622 69.425110 47.440174
+v 2.828157 69.429993 47.440174
+v 2.830976 69.479912 47.440174
+v 2.875618 69.502434 47.440174
+v 2.917441 69.475029 47.440174
+v -3.300000 69.390381 47.440174
+v -3.256699 69.415382 47.440174
+v -3.343301 69.415382 47.440174
+v -3.343301 69.465378 47.440174
+v -3.300000 69.490379 47.440174
+v -3.256699 69.465378 47.440174
+v 15.162859 68.383232 47.440174
+v 15.209774 68.400528 47.440174
+v 15.124428 68.415222 47.440174
+v 15.132911 68.464493 47.440174
+v 15.179826 68.481789 47.440174
+v 15.218257 68.449799 47.440174
+v 9.030857 69.067139 47.440174
+v 9.076704 69.087090 47.440174
+v 8.990655 69.096863 47.440174
+v 8.996300 69.146545 47.440174
+v 9.042147 69.166496 47.440174
+v 9.082349 69.136765 47.440174
+v 33.177395 64.222015 47.440174
+v 33.226639 64.230667 47.440174
+v 33.145275 64.260330 47.440174
+v 33.162399 64.307304 47.440174
+v 33.211647 64.315964 47.440174
+v 33.243763 64.277641 47.440174
+v 27.258041 65.963226 47.440174
+v 27.306665 65.974884 47.440174
+v 27.223639 65.999512 47.440174
+v 27.237858 66.047447 47.440174
+v 27.286480 66.059097 47.440174
+v 27.320885 66.022820 47.440174
+v 21.245670 67.349350 47.440174
+v 21.293512 67.363876 47.440174
+v 21.209166 67.383522 47.440174
+v 21.220507 67.432213 47.440174
+v 21.268349 67.446747 47.440174
+v 21.304852 67.412575 47.440174
+v 44.637409 59.660896 47.719341
+v 44.687359 59.663147 47.719341
+v 44.610485 59.703026 47.719341
+v 44.633507 59.747410 47.719341
+v 44.683456 59.749664 47.719341
+v 44.710381 59.707531 47.719341
+v 38.979374 62.122402 47.719341
+v 39.029068 62.127926 47.719341
+v 38.949741 62.162674 47.719341
+v 38.951939 62.167686 47.719341
+v 38.963711 62.194565 47.440174
+v 38.969803 62.208473 47.440174
+v 39.019497 62.213997 47.440174
+v 39.049129 62.173725 47.440174
+v 39.044769 62.163769 47.440174
+v 39.032997 62.136894 47.719341
+v 65.193367 46.141712 47.719341
+v 65.241806 46.129330 47.719341
+v 65.179863 46.189854 47.719341
+v 65.214806 46.225616 47.719341
+v 65.263252 46.213238 47.719341
+v 65.276749 46.165092 47.719341
+v 60.438412 50.074951 47.719341
+v 60.487682 50.066460 47.719341
+v 60.421127 50.121868 47.719341
+v 60.453117 50.160297 47.719341
+v 60.502388 50.151806 47.719341
+v 60.519672 50.104889 47.719341
+v 55.401268 53.639305 47.719341
+v 55.451042 53.634552 47.719341
+v 55.380497 53.684784 47.719341
+v 55.409496 53.725513 47.719341
+v 55.459270 53.720764 47.719341
+v 55.480045 53.675282 47.719341
+v 50.122208 56.834118 47.719341
+v 50.172192 56.832947 47.719341
+v 50.098228 56.877991 47.719341
+v 50.124233 56.920696 47.719341
+v 50.174221 56.919525 47.719341
+v 50.198200 56.875652 47.719341
+v 69.621544 41.843540 47.719337
+v 69.668777 41.827137 47.719337
+v 69.612137 41.892647 47.719337
+v 69.649956 41.925350 47.719337
+v 69.697189 41.908943 47.719337
+v 69.706596 41.859837 47.719337
+v 73.674110 37.189156 47.719337
+v 73.719704 37.168621 47.719337
+v 73.669098 37.238903 47.719337
+v 73.709679 37.268120 47.719337
+v 73.755264 37.247585 47.719337
+v 73.760277 37.197838 47.719337
+v 80.440002 26.880926 47.440170
+v 80.480820 26.852049 47.440170
+v 80.444603 26.930716 47.440170
+v 80.490021 26.951626 47.440170
+v 80.530838 26.922747 47.440170
+v 80.526237 26.872959 47.440170
+v 83.043358 21.284361 47.440170
+v 83.080986 21.251431 47.440170
+v 83.053062 21.333408 47.440170
+v 83.100395 21.349527 47.440170
+v 83.138023 21.316599 47.440170
+v 83.128311 21.267550 47.440170
+v 77.298569 32.193760 47.719337
+v 77.342033 32.169048 47.679527
+v 77.334351 32.173412 47.719337
+v 77.298325 32.230667 47.719337
+v 77.298233 32.243759 47.653534
+v 77.317574 32.255093 47.440170
+v 77.341370 32.269043 47.440170
+v 77.384834 32.244331 47.440170
+v 77.385162 32.194332 47.440170
+v 77.363716 32.181759 47.440170
+v 86.434860 9.432069 47.440170
+v 86.464523 9.391813 47.440170
+v 86.454895 9.477880 47.440170
+v 86.504585 9.483435 47.440170
+v 86.534241 9.443179 47.440170
+v 86.514214 9.397368 47.440170
+v 85.056610 15.449173 47.440170
+v 85.090500 15.412411 47.440170
+v 85.071503 15.496903 47.440170
+v 85.120285 15.507872 47.440170
+v 85.154175 15.471111 47.440170
+v 85.139282 15.423380 47.440170
+v 87.144737 3.299998 47.440170
+v 87.169739 3.256697 47.440170
+v 87.169739 3.343299 47.440170
+v 87.219734 3.343299 47.440170
+v 87.244736 3.299998 47.440170
+v 87.219734 3.256697 47.440170
+v 86.782829 -0.453837 47.440170
+v 85.652962 11.452106 47.440170
+v 82.332146 22.512367 47.440170
+v 66.901260 44.956993 47.440174
+v 55.271545 54.060265 47.440174
+v 47.226982 58.597389 47.440174
+v 14.970764 68.134209 47.440174
+v -9.400998 68.740936 47.440174
+v -53.304955 55.376934 47.440174
+v -68.445038 43.550758 47.440170
+v -78.382797 30.631401 47.440170
+v -84.371376 16.812122 47.440170
+v -86.729553 2.606747 47.440170
+v -85.570694 -11.860113 47.440170
+v -82.257141 -22.695541 47.440170
+v -66.901260 -44.957001 47.440166
+v -55.271545 -54.060272 47.440166
+v -47.226982 -58.597397 47.440166
+v -14.970764 -68.134209 47.440166
+v 9.400998 -68.740936 47.440166
+v 53.959118 -54.981121 47.440166
+v 68.047150 -43.952225 47.440166
+v 78.358078 -30.673525 47.440170
+v 84.504669 -16.350958 47.440170
+v 86.173538 -8.546471 47.440170
+v 86.400230 -0.450900 51.084740
+v 84.579681 14.467759 51.084740
+v 79.467026 27.763409 51.084740
+v 72.224831 38.655842 51.084740
+v 63.860889 47.202835 51.084743
+v 54.957058 53.807079 51.084743
+v 42.673187 60.281162 51.084743
+v 28.516993 65.118805 51.084743
+v 9.277218 68.348076 51.084743
+v -8.101107 68.453056 51.084743
+v -24.383680 66.158562 51.084743
+v -40.410969 61.298134 51.084743
+v -56.032085 53.212811 51.084743
+v -69.355042 42.049316 51.084740
+v -78.712090 29.285980 51.084740
+v -84.564552 14.660898 51.084740
+v -86.400772 -0.221952 51.084740
+v -84.788475 -13.619887 51.084740
+v -80.472687 -25.762300 51.084740
+v -74.289986 -36.006439 51.084740
+v -67.028519 -44.302479 51.084736
+v -56.520214 -52.785652 51.084736
+v -44.173359 -59.619423 51.084736
+v -27.251673 -65.440712 51.084736
+v -7.819139 -68.456062 51.084736
+v 9.559530 -68.344421 51.084736
+v 29.958801 -64.790779 51.084736
+v 46.832165 -58.454273 51.084736
+v 63.089245 -47.971123 51.084736
+v 75.075752 -35.045830 51.084740
+v 82.168251 -22.026911 51.084740
+v 85.258774 -11.606925 51.084740
+v 85.171761 14.540437 51.084740
+v 86.992012 -0.455442 51.084740
+v 80.055565 27.915281 51.084740
+v 72.802765 38.884117 51.084740
+v 64.423477 47.498642 51.084743
+v 55.504360 54.159569 51.084743
+v 43.205936 60.695488 51.084743
+v 29.043320 65.592308 51.084743
+v 9.804994 68.898361 51.084743
+v -7.660517 69.075264 51.084743
+v -23.952185 66.856262 51.084743
+v -40.003860 62.094658 51.084743
+v -55.674446 54.151756 51.084743
+v -70.504120 41.675549 51.084740
+v -79.756981 28.608986 51.084740
+v -85.110207 14.915622 51.084740
+v -86.990021 0.689133 51.084740
+v -85.404839 -13.585333 51.084740
+v -80.786736 -26.470850 51.084740
+v -74.119286 -37.218132 51.084740
+v -66.313789 -45.799435 51.084736
+v -55.075180 -54.433098 51.084736
+v -41.918068 -61.243866 51.084736
+v -23.918188 -66.815895 51.084736
+v -3.290156 -69.266998 51.084736
+v 14.166913 -68.475189 51.084736
+v 34.641628 -64.007362 51.084736
+v 51.503632 -56.665352 51.084736
+v 67.641533 -44.648094 51.084736
+v 78.019806 -31.646408 51.084740
+v 84.359482 -17.579777 51.084740
+v 86.287483 -9.196812 51.084740
+v 93.582611 15.534201 51.084740
+v 95.398521 -0.519960 51.084740
+v 88.419456 29.998890 51.084740
+v 81.020370 42.031540 51.084740
+v 72.417854 51.600353 51.084743
+v 60.145805 61.169800 51.084743
+v 45.945858 68.668732 51.084743
+v 26.751375 74.802246 51.084743
+v 4.934265 77.622017 51.084743
+v -13.775722 76.982132 51.084743
+v -35.546089 72.537209 51.084743
+v -53.966518 64.905052 51.084743
+v -71.707359 52.377522 51.084743
+v -83.518639 38.650410 51.084740
+v -91.220398 23.544176 51.084740
+v -95.042671 7.018288 51.084740
+v -94.598587 -10.327083 51.084740
+v -90.043747 -26.410324 51.084740
+v -82.587440 -39.882488 51.084740
+v -73.554726 -50.506748 51.084736
+v -63.814392 -58.676659 51.084736
+v -50.410267 -66.632675 51.084736
+v -35.103149 -72.608162 51.084736
+v -14.471948 -76.876930 51.084736
+v 4.231803 -77.656113 51.084736
+v 27.550045 -74.672089 51.084736
+v 53.497108 -65.155518 51.084736
+v 71.487961 -52.578518 51.084736
+v 84.057625 -37.833607 51.084740
+v 91.974419 -21.373732 51.084740
+v 94.479424 -11.203293 51.084740
+v 93.582611 15.534203 0.000001
+v 95.398521 -0.519958 0.000000
+v 88.419456 29.998892 0.000001
+v 81.020370 42.031544 0.000002
+v 72.417854 51.600357 0.000002
+v 60.145805 61.169804 0.000003
+v 45.945858 68.668732 0.000003
+v 26.751375 74.802246 0.000003
+v 4.934265 77.622017 0.000003
+v -13.775722 76.982132 0.000003
+v -35.546089 72.537209 0.000003
+v -53.966518 64.905052 0.000003
+v -71.707359 52.377525 0.000002
+v -83.518639 38.650414 0.000002
+v -91.220398 23.544178 0.000001
+v -95.042671 7.018290 0.000000
+v -94.598587 -10.327081 0.000000
+v -90.043747 -26.410322 -0.000001
+v -82.587440 -39.882484 -0.000002
+v -73.554726 -50.506744 -0.000002
+v -63.814392 -58.676655 -0.000003
+v -50.410267 -66.632675 -0.000003
+v -35.103149 -72.608162 -0.000003
+v -14.471948 -76.876930 -0.000003
+v 4.231803 -77.656113 -0.000003
+v 27.550045 -74.672089 -0.000003
+v 53.497108 -65.155518 -0.000003
+v 71.487961 -52.578514 -0.000002
+v 84.057625 -37.833603 -0.000002
+v 91.974419 -21.373730 -0.000001
+v 94.479424 -11.203291 0.000000
+v 42.611393 -0.007754 0.000000
+v 42.609390 -0.114814 0.000000
+v 42.612598 0.099305 0.000000
+v 42.613007 0.206363 0.000000
+v 42.612617 0.313417 0.000000
+v 42.226364 3.532824 0.000000
+v 41.121574 6.692115 0.000000
+v 39.317043 9.737532 0.000000
+v 36.843483 12.617250 0.000001
+v 32.578991 16.114941 0.000001
+v 26.612295 19.463064 0.000001
+v 17.119766 22.752020 0.000001
+v 5.089171 24.601774 0.000001
+v -7.377306 24.344406 0.000001
+v -19.211924 22.001961 0.000001
+v -29.401056 17.775066 0.000001
+v -36.438938 12.656002 0.000001
+v -39.995457 8.347209 0.000000
+v -41.832134 4.513335 0.000000
+v -42.565536 0.960662 0.000000
+v -42.411350 -2.612044 0.000000
+v -41.372791 -6.130282 0.000000
+v -39.471516 -9.520689 0.000000
+v -36.747166 -12.712568 -0.000001
+v -33.256550 -15.639361 -0.000001
+v -27.538357 -19.024868 -0.000001
+v -19.898857 -21.986435 -0.000001
+v -8.332186 -24.316927 -0.000001
+v 5.456104 -24.523806 -0.000001
+v 18.672485 -22.160097 -0.000001
+v 29.931612 -17.473566 -0.000001
+v 36.796482 -12.305256 -0.000001
+v 40.298946 -7.850019 0.000000
+v 42.024128 -3.896291 0.000000
+v 42.441559 -2.011467 0.000000
+v 39.838230 -0.093545 0.000000
+v 39.516113 2.730202 0.000000
+v 38.537918 5.522617 0.000000
+v 36.908577 8.243221 0.000000
+v 34.645119 10.843855 0.000000
+v 30.698856 14.037565 0.000001
+v 25.127754 17.129145 0.000001
+v 16.206894 20.206079 0.000001
+v 4.856043 21.986824 0.000001
+v -5.624547 21.947376 0.000001
+v -17.482336 19.929909 0.000001
+v -26.203007 16.709764 0.000001
+v -33.097588 12.352708 0.000001
+v -37.015251 8.220969 0.000000
+v -38.866879 4.904790 0.000000
+v -39.721897 1.750426 0.000000
+v -39.746258 -1.429409 0.000000
+v -38.939983 -4.589345 0.000000
+v -37.306488 -7.676668 0.000000
+v -34.864738 -10.625438 0.000000
+v -31.657534 -13.363870 -0.000001
+v -26.307478 -16.570164 -0.000001
+v -19.064821 -19.411480 -0.000001
+v -8.004031 -21.693142 -0.000001
+v 2.450935 -22.123152 -0.000001
+v 15.346885 -20.466660 -0.000001
+v 26.660564 -16.484013 -0.000001
+v 33.432499 -12.070296 -0.000001
+v 37.124111 -8.067621 0.000000
+v 38.983471 -4.608403 0.000000
+v 39.622131 -2.359672 0.000000
+f 1 2 3
+f 4 2 1
+f 4 5 2
+f 6 5 4
+f 7 4 1
+f 7 1 8
+f 9 4 7
+f 10 11 12
+f 13 10 12
+f 14 8 1
+f 15 13 14
+f 3 14 1
+f 3 15 14
+f 15 10 13
+f 3 16 15
+f 2 16 3
+f 5 17 16
+f 5 16 2
+f 18 5 6
+f 18 6 19
+f 17 5 18
+f 20 17 18
+f 21 20 22
+f 21 22 23
+f 21 17 20
+f 9 6 4
+f 19 6 9
+f 24 19 9
+f 24 9 7
+f 25 18 19
+f 26 25 19
+f 26 19 24
+f 27 25 26
+f 28 27 26
+f 29 30 27
+f 29 27 28
+f 31 32 33
+f 34 33 29
+f 34 31 33
+f 34 29 28
+f 35 36 31
+f 35 31 34
+f 37 38 36
+f 37 36 35
+f 39 40 37
+f 39 37 35
+f 41 42 40
+f 41 40 39
+f 43 42 41
+f 44 43 41
+f 45 46 47
+f 45 47 44
+f 45 44 41
+f 48 46 45
+f 49 50 48
+f 51 48 45
+f 51 49 48
+f 52 49 51
+f 53 54 52
+f 55 53 52
+f 55 52 51
+f 56 57 53
+f 56 53 55
+f 58 56 55
+f 58 59 56
+f 60 61 59
+f 60 59 58
+f 62 61 60
+f 63 62 60
+f 64 63 60
+f 64 65 66
+f 64 66 67
+f 64 67 63
+f 68 65 64
+f 68 69 65
+f 70 69 68
+f 70 71 69
+f 72 70 68
+f 73 74 72
+f 75 72 68
+f 75 73 72
+f 76 73 75
+f 77 76 75
+f 78 76 77
+f 78 79 76
+f 80 81 82
+f 83 78 77
+f 83 80 82
+f 83 82 78
+f 84 80 83
+f 84 85 80
+f 86 85 84
+f 87 85 86
+f 87 88 85
+f 89 90 91
+f 92 87 86
+f 92 89 91
+f 92 91 87
+f 93 89 92
+f 93 94 89
+f 95 96 94
+f 97 94 93
+f 97 95 94
+f 98 95 97
+f 99 100 98
+f 99 98 97
+f 101 100 99
+f 102 101 99
+f 103 104 105
+f 103 105 102
+f 103 102 99
+f 106 104 103
+f 107 106 103
+f 108 106 107
+f 109 108 107
+f 110 109 107
+f 110 111 112
+f 110 112 109
+f 113 111 110
+f 114 115 113
+f 116 113 110
+f 116 114 113
+f 117 114 116
+f 118 117 116
+f 118 119 117
+f 120 119 118
+f 121 120 118
+f 122 121 118
+f 123 122 118
+f 123 124 125
+f 123 125 122
+f 126 124 123
+f 127 128 126
+f 129 126 123
+f 129 127 126
+f 130 127 129
+f 131 132 130
+f 133 130 129
+f 133 131 130
+f 134 131 133
+f 135 134 133
+f 8 14 134
+f 8 134 135
+f 24 7 8
+f 24 8 135
+f 131 136 137
+f 131 137 132
+f 134 138 136
+f 134 136 131
+f 13 138 134
+f 14 13 134
+f 139 140 141
+f 142 140 139
+f 143 140 142
+f 144 141 137
+f 144 139 141
+f 145 143 142
+f 136 145 144
+f 136 144 137
+f 138 12 143
+f 138 145 136
+f 138 143 145
+f 13 12 138
+f 140 146 141
+f 140 147 146
+f 143 148 147
+f 143 147 140
+f 11 148 143
+f 12 11 143
+f 149 150 151
+f 152 149 151
+f 153 154 155
+f 156 153 155
+f 156 157 153
+f 158 159 160
+f 161 158 160
+f 161 162 158
+f 163 164 165
+f 166 163 165
+f 167 163 166
+f 168 163 167
+f 169 168 167
+f 169 170 168
+f 171 172 146
+f 147 171 146
+f 173 171 147
+f 148 173 147
+f 10 173 148
+f 174 175 10
+f 11 10 148
+f 176 150 149
+f 153 176 154
+f 158 153 157
+f 158 157 159
+f 163 158 162
+f 163 162 164
+f 171 168 172
+f 172 168 170
+f 175 173 10
+f 149 154 176
+f 15 174 10
+f 16 177 174
+f 16 174 15
+f 17 21 177
+f 17 177 16
+f 178 21 23
+f 179 178 23
+f 180 178 179
+f 181 180 179
+f 182 180 181
+f 183 182 181
+f 184 179 23
+f 184 23 22
+f 181 179 184
+f 185 181 184
+f 183 181 185
+f 186 183 185
+f 187 185 184
+f 188 185 187
+f 186 185 188
+f 189 184 22
+f 189 22 20
+f 190 184 189
+f 190 187 184
+f 191 186 188
+f 192 191 190
+f 192 190 189
+f 193 186 191
+f 193 191 192
+f 25 189 20
+f 25 20 18
+f 192 189 25
+f 27 192 25
+f 193 192 27
+f 30 193 27
+f 194 195 196
+f 182 183 186
+f 197 194 182
+f 197 195 194
+f 197 182 186
+f 193 197 186
+f 198 193 30
+f 198 30 29
+f 198 29 199
+f 198 199 200
+f 198 197 193
+f 201 198 200
+f 33 202 199
+f 33 199 29
+f 203 204 202
+f 205 202 33
+f 205 203 202
+f 32 205 33
+f 206 205 32
+f 207 206 208
+f 207 205 206
+f 209 208 210
+f 209 207 208
+f 211 207 209
+f 212 211 213
+f 212 207 211
+f 31 214 206
+f 31 206 32
+f 36 215 214
+f 36 214 31
+f 38 216 215
+f 38 215 36
+f 217 218 219
+f 220 217 221
+f 220 221 222
+f 220 222 223
+f 220 218 217
+f 216 220 223
+f 224 216 38
+f 224 38 37
+f 224 37 225
+f 224 220 216
+f 226 225 227
+f 226 224 225
+f 228 225 37
+f 40 228 37
+f 229 230 228
+f 231 228 40
+f 231 229 228
+f 42 231 40
+f 232 231 42
+f 233 232 234
+f 233 234 235
+f 233 231 232
+f 236 233 235
+f 237 233 236
+f 238 237 239
+f 238 233 237
+f 43 240 232
+f 43 232 42
+f 241 242 243
+f 244 245 246
+f 247 241 244
+f 247 242 241
+f 247 244 246
+f 240 247 246
+f 248 44 249
+f 248 240 43
+f 248 43 44
+f 248 247 240
+f 250 249 251
+f 250 248 249
+f 252 249 44
+f 47 252 44
+f 253 254 255
+f 253 255 252
+f 253 252 47
+f 46 253 47
+f 256 253 46
+f 257 256 258
+f 257 253 256
+f 259 258 260
+f 259 257 258
+f 261 257 259
+f 262 261 263
+f 262 257 261
+f 48 256 46
+f 50 264 48
+f 264 256 48
+f 265 266 267
+f 264 265 267
+f 50 49 268
+f 269 264 50
+f 270 50 268
+f 270 269 50
+f 269 265 264
+f 52 271 268
+f 52 268 49
+f 54 272 271
+f 54 271 52
+f 273 272 54
+f 274 273 54
+f 275 274 276
+f 275 276 277
+f 275 273 274
+f 278 274 54
+f 53 278 54
+f 279 278 53
+f 57 279 53
+f 280 57 281
+f 281 57 56
+f 280 282 57
+f 282 279 57
+f 279 283 284
+f 284 283 285
+f 282 283 279
+f 59 286 281
+f 59 281 56
+f 287 288 289
+f 288 290 289
+f 59 61 286
+f 291 61 290
+f 61 292 286
+f 291 292 61
+f 288 291 290
+f 293 290 61
+f 62 293 61
+f 294 62 295
+f 295 62 63
+f 294 296 62
+f 296 293 62
+f 293 297 298
+f 298 297 299
+f 296 297 293
+f 67 300 295
+f 67 295 63
+f 301 302 303
+f 302 304 303
+f 67 66 300
+f 305 66 304
+f 66 306 300
+f 305 306 66
+f 302 305 304
+f 307 304 66
+f 65 307 66
+f 308 307 65
+f 69 308 65
+f 309 308 69
+f 71 309 69
+f 310 71 311
+f 311 71 70
+f 310 312 71
+f 312 309 71
+f 309 313 314
+f 314 313 315
+f 312 313 309
+f 70 316 311
+f 72 316 70
+f 317 318 319
+f 318 320 319
+f 72 74 316
+f 321 74 320
+f 74 322 316
+f 321 322 74
+f 318 321 320
+f 73 323 320
+f 73 320 74
+f 76 324 323
+f 76 323 73
+f 325 324 76
+f 79 325 76
+f 326 79 327
+f 327 79 78
+f 326 328 79
+f 328 325 79
+f 325 329 330
+f 330 329 331
+f 328 329 325
+f 78 332 327
+f 82 332 78
+f 333 334 335
+f 334 336 335
+f 82 81 332
+f 336 337 81
+f 81 338 332
+f 337 338 81
+f 334 337 336
+f 80 339 336
+f 80 336 81
+f 340 339 80
+f 85 340 80
+f 341 340 85
+f 88 341 85
+f 342 343 344
+f 345 346 347
+f 348 342 345
+f 348 343 342
+f 348 345 347
+f 341 348 347
+f 349 341 88
+f 349 88 87
+f 349 87 350
+f 349 350 351
+f 349 348 341
+f 352 349 351
+f 91 353 350
+f 91 350 87
+f 354 355 356
+f 354 356 353
+f 354 353 91
+f 90 354 91
+f 357 354 90
+f 358 357 359
+f 358 354 357
+f 360 359 361
+f 360 358 359
+f 362 358 360
+f 363 362 364
+f 363 358 362
+f 89 365 357
+f 89 357 90
+f 94 366 365
+f 94 365 89
+f 96 367 366
+f 96 366 94
+f 368 369 370
+f 371 368 372
+f 371 372 373
+f 371 373 374
+f 371 369 368
+f 367 371 374
+f 375 367 96
+f 375 96 95
+f 375 95 376
+f 375 371 367
+f 377 376 378
+f 377 375 376
+f 379 376 95
+f 98 379 95
+f 380 381 379
+f 382 379 98
+f 382 380 379
+f 100 382 98
+f 383 382 100
+f 384 383 385
+f 384 385 386
+f 384 382 383
+f 387 384 386
+f 388 384 387
+f 389 388 390
+f 389 384 388
+f 101 391 383
+f 101 383 100
+f 392 393 394
+f 395 396 397
+f 398 392 395
+f 398 393 392
+f 398 395 397
+f 391 398 397
+f 399 102 400
+f 399 400 401
+f 399 391 101
+f 399 101 102
+f 399 398 391
+f 402 399 401
+f 403 400 102
+f 105 403 102
+f 404 405 406
+f 404 406 403
+f 404 403 105
+f 104 404 105
+f 407 404 104
+f 408 407 409
+f 408 404 407
+f 150 409 151
+f 150 408 409
+f 410 408 150
+f 411 410 412
+f 411 408 410
+f 106 407 104
+f 108 413 106
+f 413 407 106
+f 414 108 415
+f 415 108 109
+f 414 416 108
+f 416 413 108
+f 413 149 417
+f 417 149 152
+f 416 149 413
+f 112 415 109
+f 112 418 415
+f 155 154 419
+f 154 420 419
+f 112 111 418
+f 420 421 111
+f 111 422 418
+f 421 422 111
+f 154 421 420
+f 423 420 111
+f 113 423 111
+f 424 423 113
+f 115 424 113
+f 425 115 426
+f 426 115 114
+f 425 427 115
+f 427 424 115
+f 424 157 428
+f 428 157 156
+f 427 157 424
+f 117 426 114
+f 117 429 426
+f 160 159 430
+f 159 431 430
+f 117 119 429
+f 432 119 431
+f 119 433 429
+f 432 433 119
+f 159 432 431
+f 434 431 119
+f 120 434 119
+f 435 120 436
+f 436 120 121
+f 435 437 120
+f 437 434 120
+f 434 162 438
+f 438 162 161
+f 437 162 434
+f 122 436 121
+f 122 439 436
+f 165 164 440
+f 164 441 440
+f 122 125 439
+f 442 125 441
+f 125 443 439
+f 442 443 125
+f 164 442 441
+f 444 441 125
+f 124 444 125
+f 445 444 124
+f 126 445 124
+f 446 445 126
+f 128 446 126
+f 447 128 448
+f 448 128 127
+f 447 449 128
+f 449 446 128
+f 446 170 450
+f 450 170 169
+f 449 170 446
+f 127 451 448
+f 130 451 127
+f 146 172 141
+f 172 137 141
+f 130 132 451
+f 452 132 137
+f 132 453 451
+f 452 453 132
+f 172 452 137
+f 454 26 24
+f 454 24 455
+f 456 28 26
+f 456 26 454
+f 457 34 28
+f 457 28 456
+f 458 35 34
+f 458 34 457
+f 459 39 35
+f 459 35 458
+f 460 41 39
+f 460 39 459
+f 461 45 41
+f 461 41 460
+f 462 45 461
+f 51 45 462
+f 463 51 462
+f 55 51 463
+f 58 55 463
+f 464 58 463
+f 60 58 464
+f 465 60 464
+f 64 60 465
+f 466 64 465
+f 68 64 466
+f 467 68 466
+f 75 68 467
+f 468 75 467
+f 77 75 468
+f 469 77 468
+f 83 77 469
+f 470 83 469
+f 84 83 470
+f 471 84 470
+f 86 84 471
+f 472 86 471
+f 92 86 472
+f 473 92 472
+f 93 92 473
+f 474 93 473
+f 97 93 474
+f 475 97 474
+f 99 97 475
+f 476 99 475
+f 103 99 476
+f 477 103 476
+f 107 103 477
+f 478 107 477
+f 110 107 478
+f 479 110 478
+f 116 110 479
+f 480 116 479
+f 118 116 480
+f 481 118 480
+f 123 118 481
+f 482 129 123
+f 482 123 481
+f 483 129 482
+f 133 129 483
+f 484 135 133
+f 484 133 483
+f 455 24 135
+f 455 135 484
+f 144 485 486
+f 145 485 144
+f 142 487 145
+f 487 485 145
+f 487 139 488
+f 487 142 139
+f 486 488 144
+f 488 139 144
+f 177 175 174
+f 21 175 177
+f 452 172 170
+f 452 170 449
+f 166 165 440
+f 489 166 440
+f 167 166 489
+f 490 167 489
+f 169 167 490
+f 450 169 490
+f 437 164 162
+f 442 164 437
+f 161 160 430
+f 438 161 430
+f 427 159 157
+f 432 159 427
+f 156 155 419
+f 428 156 419
+f 416 154 149
+f 421 154 416
+f 417 152 151
+f 417 151 409
+f 491 492 410
+f 491 410 150
+f 153 493 494
+f 153 494 495
+f 496 493 153
+f 158 497 498
+f 499 497 158
+f 500 499 158
+f 163 501 502
+f 163 502 503
+f 504 501 163
+f 168 505 504
+f 168 504 163
+f 506 505 168
+f 171 507 508
+f 171 508 509
+f 173 510 507
+f 173 507 171
+f 511 512 510
+f 511 510 173
+f 175 513 511
+f 495 491 176
+f 150 176 491
+f 176 153 495
+f 153 158 496
+f 496 158 498
+f 158 163 500
+f 500 163 503
+f 168 171 509
+f 168 509 506
+f 173 175 511
+f 178 514 515
+f 178 515 21
+f 516 514 178
+f 180 516 178
+f 194 516 180
+f 182 194 180
+f 191 517 518
+f 191 518 190
+f 519 517 191
+f 188 519 191
+f 520 188 187
+f 519 188 520
+f 520 187 190
+f 518 520 190
+f 521 522 523
+f 524 522 521
+f 524 525 522
+f 526 527 528
+f 526 528 525
+f 526 525 524
+f 529 527 526
+f 530 527 529
+f 531 526 524
+f 196 530 529
+f 532 196 529
+f 514 531 524
+f 514 524 515
+f 213 530 196
+f 533 530 213
+f 516 531 514
+f 516 532 531
+f 534 533 213
+f 535 533 534
+f 536 535 534
+f 194 532 516
+f 537 213 211
+f 537 534 213
+f 219 535 536
+f 219 536 538
+f 539 537 211
+f 540 535 219
+f 239 540 219
+f 541 540 239
+f 542 538 537
+f 542 537 539
+f 543 540 541
+f 544 540 543
+f 217 219 538
+f 217 538 542
+f 545 541 239
+f 237 545 239
+f 546 545 237
+f 243 543 546
+f 243 544 543
+f 263 544 243
+f 547 544 263
+f 548 547 549
+f 241 546 237
+f 241 243 546
+f 550 551 548
+f 550 548 549
+f 552 263 261
+f 552 547 263
+f 552 549 547
+f 553 550 554
+f 553 551 550
+f 555 556 557
+f 555 557 558
+f 559 556 555
+f 560 554 552
+f 560 553 554
+f 560 552 261
+f 561 555 558
+f 562 561 558
+f 563 561 562
+f 564 559 563
+f 565 556 559
+f 565 559 564
+f 566 565 564
+f 567 565 566
+f 568 565 567
+f 569 565 568
+f 570 563 562
+f 570 564 563
+f 571 567 566
+f 572 571 566
+f 573 569 568
+f 573 568 574
+f 575 569 573
+f 576 569 575
+f 576 577 569
+f 578 577 576
+f 579 571 572
+f 579 573 574
+f 579 574 571
+f 580 576 575
+f 581 577 578
+f 582 580 575
+f 583 581 578
+f 583 578 584
+f 585 581 583
+f 586 587 581
+f 586 581 585
+f 588 580 582
+f 588 584 580
+f 589 587 586
+f 590 587 589
+f 591 584 588
+f 591 583 584
+f 592 586 585
+f 593 594 590
+f 593 590 589
+f 595 583 591
+f 596 589 597
+f 596 593 589
+f 598 593 596
+f 599 598 596
+f 600 597 592
+f 600 592 601
+f 602 596 597
+f 602 597 600
+f 603 604 605
+f 603 598 599
+f 603 605 598
+f 606 604 603
+f 607 596 602
+f 608 604 606
+f 609 603 599
+f 344 608 606
+f 610 344 606
+f 611 609 599
+f 611 599 612
+f 364 608 344
+f 613 608 364
+f 614 609 611
+f 614 610 609
+f 615 613 364
+f 616 613 615
+f 617 616 615
+f 342 610 614
+f 618 615 364
+f 618 364 362
+f 370 616 617
+f 370 617 619
+f 620 618 362
+f 621 616 370
+f 390 621 370
+f 622 621 390
+f 623 618 620
+f 623 619 618
+f 624 621 622
+f 625 621 624
+f 368 370 619
+f 368 619 623
+f 626 622 390
+f 388 626 390
+f 627 626 388
+f 394 625 624
+f 394 624 627
+f 412 625 394
+f 628 625 412
+f 629 628 630
+f 392 627 388
+f 392 394 627
+f 631 629 630
+f 631 632 629
+f 633 412 410
+f 633 630 628
+f 633 628 412
+f 634 632 631
+f 634 631 635
+f 636 637 638
+f 636 638 639
+f 640 637 636
+f 492 633 410
+f 492 635 633
+f 492 634 635
+f 641 636 639
+f 494 641 639
+f 642 641 494
+f 643 640 642
+f 644 637 640
+f 644 640 643
+f 645 644 643
+f 646 644 645
+f 647 644 646
+f 648 644 647
+f 493 643 642
+f 493 642 494
+f 649 646 645
+f 497 649 645
+f 650 648 647
+f 650 647 651
+f 652 648 650
+f 653 648 652
+f 653 654 648
+f 655 654 653
+f 499 649 497
+f 499 650 651
+f 499 651 649
+f 656 653 652
+f 657 654 655
+f 502 656 652
+f 658 657 655
+f 658 655 659
+f 660 657 658
+f 661 657 660
+f 661 662 657
+f 501 656 502
+f 501 659 656
+f 663 662 661
+f 664 662 663
+f 504 658 659
+f 504 659 501
+f 665 661 660
+f 666 664 663
+f 666 667 664
+f 505 658 504
+f 668 663 669
+f 668 666 663
+f 668 522 666
+f 523 522 668
+f 507 669 665
+f 507 665 508
+f 510 668 669
+f 510 669 507
+f 512 668 510
+f 585 601 592
+f 342 344 610
+f 660 508 665
+f 638 632 639
+f 639 632 634
+f 557 551 558
+f 558 551 553
+f 194 196 532
+f 212 213 196
+f 212 196 195
+f 197 212 195
+f 207 212 197
+f 198 207 197
+f 205 207 198
+f 201 205 198
+f 203 205 201
+f 204 201 200
+f 204 203 201
+f 202 204 200
+f 202 200 199
+f 670 539 211
+f 670 211 209
+f 671 542 539
+f 671 539 670
+f 221 217 542
+f 221 542 671
+f 672 670 209
+f 672 209 210
+f 673 671 670
+f 673 670 672
+f 222 221 671
+f 222 671 673
+f 674 210 208
+f 674 672 210
+f 675 673 672
+f 675 672 674
+f 223 222 673
+f 223 673 675
+f 676 675 674
+f 677 675 676
+f 223 675 677
+f 678 674 208
+f 678 208 206
+f 678 676 674
+f 214 678 206
+f 679 223 677
+f 215 679 678
+f 215 678 214
+f 216 223 679
+f 216 679 215
+f 239 219 218
+f 238 239 218
+f 233 238 218
+f 233 218 220
+f 231 220 224
+f 231 233 220
+f 229 231 224
+f 229 224 226
+f 227 229 226
+f 230 229 227
+f 225 230 227
+f 228 230 225
+f 244 241 237
+f 244 237 236
+f 244 236 235
+f 245 244 235
+f 246 245 235
+f 246 235 234
+f 680 234 681
+f 246 234 680
+f 682 234 232
+f 682 681 234
+f 683 682 232
+f 683 246 680
+f 240 246 683
+f 240 683 232
+f 263 243 242
+f 262 263 242
+f 257 262 242
+f 257 242 247
+f 253 257 247
+f 253 247 248
+f 254 253 248
+f 254 248 250
+f 255 250 251
+f 255 254 250
+f 249 255 251
+f 252 255 249
+f 684 560 261
+f 684 261 259
+f 685 570 562
+f 685 562 686
+f 687 570 685
+f 688 687 685
+f 689 572 688
+f 579 572 689
+f 690 579 689
+f 691 588 582
+f 691 582 692
+f 591 588 691
+f 693 595 591
+f 693 591 691
+f 694 595 693
+f 695 694 693
+f 696 600 601
+f 696 601 695
+f 602 600 696
+f 697 602 696
+f 607 602 697
+f 698 607 697
+f 686 684 699
+f 259 699 684
+f 699 685 686
+f 685 689 688
+f 689 691 690
+f 690 691 692
+f 693 696 695
+f 697 334 698
+f 265 259 260
+f 266 265 260
+f 685 275 277
+f 285 685 277
+f 285 283 685
+f 689 288 287
+f 299 689 287
+f 299 297 689
+f 691 302 301
+f 700 691 301
+f 701 691 700
+f 693 691 701
+f 315 693 701
+f 315 313 693
+f 696 318 317
+f 702 696 317
+f 703 697 696
+f 703 696 702
+f 331 329 697
+f 331 697 703
+f 699 259 265
+f 685 699 275
+f 689 685 283
+f 689 283 288
+f 691 689 297
+f 691 297 302
+f 696 693 318
+f 318 693 313
+f 334 697 329
+f 265 275 699
+f 267 266 260
+f 267 260 258
+f 267 704 705
+f 267 258 704
+f 706 258 256
+f 706 704 258
+f 707 267 705
+f 264 707 706
+f 264 706 256
+f 264 267 707
+f 269 275 265
+f 273 275 269
+f 272 273 269
+f 272 269 270
+f 268 272 270
+f 271 272 268
+f 285 277 276
+f 284 285 276
+f 708 276 709
+f 710 276 274
+f 710 709 276
+f 284 708 711
+f 284 276 708
+f 278 711 710
+f 278 710 274
+f 279 284 711
+f 279 711 278
+f 280 291 282
+f 292 291 280
+f 282 288 283
+f 291 288 282
+f 281 292 280
+f 286 292 281
+f 298 712 713
+f 298 289 712
+f 714 289 290
+f 714 712 289
+f 715 298 713
+f 293 715 714
+f 293 714 290
+f 293 298 715
+f 299 287 289
+f 298 299 289
+f 294 305 296
+f 306 305 294
+f 296 302 297
+f 305 302 296
+f 295 306 294
+f 300 306 295
+f 716 717 303
+f 718 717 716
+f 719 717 718
+f 720 303 304
+f 720 716 303
+f 721 719 718
+f 307 721 720
+f 307 720 304
+f 308 314 719
+f 308 719 721
+f 308 721 307
+f 309 314 308
+f 700 301 303
+f 717 700 303
+f 701 700 717
+f 719 701 717
+f 315 701 719
+f 314 315 719
+f 322 321 312
+f 322 312 310
+f 321 318 313
+f 321 313 312
+f 316 310 311
+f 316 322 310
+f 722 723 319
+f 724 723 722
+f 725 723 724
+f 726 319 320
+f 726 722 319
+f 727 725 724
+f 323 727 726
+f 323 726 320
+f 324 330 725
+f 324 727 323
+f 324 725 727
+f 325 330 324
+f 723 317 319
+f 723 702 317
+f 725 703 702
+f 725 702 723
+f 331 703 725
+f 330 331 725
+f 338 337 328
+f 338 328 326
+f 337 334 329
+f 337 329 328
+f 327 338 326
+f 332 338 327
+f 728 729 730
+f 731 729 728
+f 347 729 731
+f 339 730 335
+f 339 335 336
+f 732 730 339
+f 732 728 730
+f 733 347 731
+f 340 733 732
+f 340 732 339
+f 341 347 733
+f 341 733 340
+f 730 734 333
+f 730 333 335
+f 735 734 730
+f 729 735 730
+f 346 735 729
+f 347 346 729
+f 736 334 333
+f 734 736 333
+f 737 736 734
+f 735 737 734
+f 345 737 735
+f 346 345 735
+f 736 611 612
+f 736 612 334
+f 614 611 736
+f 737 614 736
+f 342 614 737
+f 345 342 737
+f 363 364 344
+f 363 344 343
+f 348 363 343
+f 358 363 348
+f 349 358 348
+f 354 358 349
+f 352 354 349
+f 355 354 352
+f 356 352 351
+f 356 355 352
+f 353 356 351
+f 353 351 350
+f 738 620 362
+f 738 362 360
+f 739 623 620
+f 739 620 738
+f 372 368 623
+f 372 623 739
+f 740 738 360
+f 740 360 361
+f 741 739 738
+f 741 738 740
+f 373 372 739
+f 373 739 741
+f 742 361 359
+f 742 740 361
+f 743 741 740
+f 743 740 742
+f 374 373 741
+f 374 741 743
+f 744 743 742
+f 745 743 744
+f 374 743 745
+f 746 742 359
+f 746 359 357
+f 746 744 742
+f 365 746 357
+f 747 374 745
+f 366 747 746
+f 366 746 365
+f 367 374 747
+f 367 747 366
+f 390 370 369
+f 389 390 369
+f 384 389 369
+f 384 369 371
+f 382 371 375
+f 382 384 371
+f 380 382 375
+f 380 375 377
+f 378 380 377
+f 381 380 378
+f 376 381 378
+f 379 381 376
+f 395 392 388
+f 395 388 387
+f 395 387 386
+f 396 395 386
+f 397 396 386
+f 397 386 385
+f 748 385 749
+f 397 385 748
+f 750 385 383
+f 750 749 385
+f 751 750 383
+f 751 397 748
+f 391 397 751
+f 391 751 383
+f 412 394 393
+f 411 412 393
+f 408 411 393
+f 408 393 398
+f 404 408 398
+f 404 398 399
+f 405 404 399
+f 405 399 402
+f 401 405 402
+f 406 405 401
+f 400 406 401
+f 403 406 400
+f 417 752 753
+f 417 409 752
+f 754 409 407
+f 754 752 409
+f 755 417 753
+f 413 755 754
+f 413 754 407
+f 413 417 755
+f 414 421 416
+f 422 421 414
+f 415 422 414
+f 418 422 415
+f 756 419 757
+f 758 419 420
+f 758 757 419
+f 428 756 759
+f 428 419 756
+f 423 759 758
+f 423 758 420
+f 424 428 759
+f 424 759 423
+f 425 432 427
+f 433 432 425
+f 426 433 425
+f 429 433 426
+f 438 760 761
+f 438 430 760
+f 762 430 431
+f 762 760 430
+f 763 438 761
+f 434 763 762
+f 434 762 431
+f 434 438 763
+f 435 442 437
+f 443 442 435
+f 436 443 435
+f 439 443 436
+f 764 489 440
+f 765 489 764
+f 490 489 765
+f 766 440 441
+f 766 764 440
+f 767 490 765
+f 444 767 766
+f 444 766 441
+f 445 450 490
+f 445 490 767
+f 445 767 444
+f 446 450 445
+f 453 452 449
+f 453 449 447
+f 448 453 447
+f 451 453 448
+f 768 454 455
+f 768 455 769
+f 770 456 454
+f 770 454 768
+f 771 457 456
+f 771 456 770
+f 772 458 457
+f 772 457 771
+f 773 459 458
+f 773 458 772
+f 774 460 459
+f 774 459 773
+f 775 461 460
+f 775 460 774
+f 776 462 461
+f 776 461 775
+f 777 462 776
+f 777 463 462
+f 778 463 777
+f 778 464 463
+f 779 464 778
+f 779 465 464
+f 780 465 779
+f 780 466 465
+f 781 466 780
+f 781 467 466
+f 782 468 467
+f 782 467 781
+f 783 469 468
+f 783 468 782
+f 784 470 469
+f 784 469 783
+f 785 471 470
+f 785 470 784
+f 786 472 471
+f 786 471 785
+f 787 473 472
+f 787 472 786
+f 788 474 473
+f 788 473 787
+f 789 475 474
+f 789 474 788
+f 790 476 475
+f 790 475 789
+f 791 477 476
+f 791 476 790
+f 792 478 477
+f 792 477 791
+f 793 479 478
+f 793 478 792
+f 794 480 479
+f 794 479 793
+f 795 481 480
+f 795 480 794
+f 796 482 481
+f 796 481 795
+f 797 483 482
+f 797 482 796
+f 798 484 483
+f 798 483 797
+f 769 455 484
+f 769 484 798
+f 485 487 488
+f 485 488 486
+f 799 513 175
+f 175 21 799
+f 512 800 668
+f 511 801 512
+f 801 800 512
+f 513 801 511
+f 799 802 513
+f 802 801 513
+f 803 492 491
+f 492 804 634
+f 803 804 492
+f 805 803 491
+f 495 805 491
+f 806 494 639
+f 805 495 494
+f 806 805 494
+f 807 493 496
+f 493 808 643
+f 807 808 493
+f 809 807 496
+f 498 809 496
+f 810 497 645
+f 809 498 497
+f 810 809 497
+f 811 499 500
+f 499 812 650
+f 811 812 499
+f 813 811 500
+f 503 813 500
+f 814 502 652
+f 813 503 502
+f 814 813 502
+f 815 505 506
+f 505 816 658
+f 815 816 505
+f 509 815 506
+f 509 817 815
+f 818 508 660
+f 817 509 508
+f 818 817 508
+f 515 819 21
+f 820 515 524
+f 820 819 515
+f 518 519 520
+f 517 519 518
+f 821 822 528
+f 527 821 528
+f 530 823 821
+f 530 821 527
+f 533 824 823
+f 533 823 530
+f 535 825 824
+f 535 824 533
+f 540 826 825
+f 540 825 535
+f 544 827 826
+f 544 826 540
+f 828 827 544
+f 547 828 544
+f 548 829 828
+f 548 828 547
+f 830 831 551
+f 551 829 548
+f 831 829 551
+f 829 832 833
+f 831 832 829
+f 831 834 832
+f 835 836 837
+f 832 838 836
+f 834 838 832
+f 836 839 837
+f 838 839 836
+f 840 830 557
+f 557 830 551
+f 841 840 557
+f 842 557 556
+f 842 841 557
+f 843 842 844
+f 843 841 842
+f 845 841 843
+f 846 847 848
+f 849 843 846
+f 849 845 843
+f 850 846 848
+f 850 849 846
+f 851 842 556
+f 565 851 556
+f 569 852 851
+f 569 851 565
+f 577 853 852
+f 577 852 569
+f 581 854 853
+f 581 853 577
+f 855 854 581
+f 587 855 581
+f 590 856 855
+f 590 855 587
+f 594 857 856
+f 594 856 590
+f 858 859 593
+f 593 857 594
+f 859 857 593
+f 857 860 861
+f 859 860 857
+f 859 862 860
+f 863 864 865
+f 860 866 864
+f 862 866 860
+f 864 867 865
+f 866 867 864
+f 858 593 868
+f 868 593 598
+f 869 868 598
+f 870 598 605
+f 870 869 598
+f 871 870 872
+f 871 869 870
+f 873 869 871
+f 874 875 876
+f 877 871 874
+f 877 873 871
+f 878 874 876
+f 878 877 874
+f 604 879 870
+f 604 870 605
+f 608 880 879
+f 608 879 604
+f 613 881 880
+f 613 880 608
+f 616 882 881
+f 616 881 613
+f 621 883 882
+f 621 882 616
+f 625 884 883
+f 625 883 621
+f 628 885 884
+f 628 884 625
+f 886 885 628
+f 629 886 628
+f 887 888 632
+f 632 886 629
+f 888 886 632
+f 886 889 890
+f 888 889 886
+f 888 891 889
+f 892 893 894
+f 889 895 893
+f 891 895 889
+f 893 896 894
+f 895 896 893
+f 632 638 887
+f 887 638 897
+f 898 899 900
+f 898 901 899
+f 637 902 638
+f 903 904 902
+f 899 905 904
+f 901 905 899
+f 904 906 902
+f 902 906 638
+f 906 897 638
+f 905 907 904
+f 904 907 906
+f 644 908 902
+f 644 902 637
+f 648 909 908
+f 648 908 644
+f 654 910 909
+f 654 909 648
+f 657 911 910
+f 657 910 654
+f 662 912 911
+f 662 911 657
+f 913 912 662
+f 664 913 662
+f 914 913 664
+f 667 914 664
+f 915 916 666
+f 666 914 667
+f 916 914 666
+f 914 917 918
+f 916 917 914
+f 916 919 917
+f 920 921 922
+f 917 923 921
+f 919 923 917
+f 921 924 922
+f 923 924 921
+f 522 915 666
+f 522 925 915
+f 525 926 522
+f 522 926 925
+f 523 668 800
+f 927 521 523
+f 927 523 800
+f 818 660 658
+f 818 658 816
+f 652 650 812
+f 814 652 812
+f 645 643 808
+f 810 645 808
+f 639 634 804
+f 806 639 804
+f 928 612 599
+f 929 334 612
+f 928 929 612
+f 928 599 596
+f 928 596 930
+f 931 607 698
+f 607 930 596
+f 931 930 607
+f 932 601 585
+f 933 695 601
+f 932 933 601
+f 932 585 583
+f 932 583 934
+f 935 595 694
+f 595 934 583
+f 935 934 595
+f 936 582 575
+f 937 692 582
+f 936 937 582
+f 575 573 938
+f 936 575 938
+f 939 579 690
+f 579 938 573
+f 939 938 579
+f 940 572 566
+f 941 688 572
+f 940 941 572
+f 566 564 942
+f 940 566 942
+f 943 570 687
+f 570 942 564
+f 943 942 570
+f 562 944 686
+f 945 562 558
+f 945 944 562
+f 558 553 946
+f 945 558 946
+f 560 946 553
+f 684 947 560
+f 947 946 560
+f 820 524 521
+f 820 521 927
+f 948 926 525
+f 822 525 528
+f 822 948 525
+f 949 822 950
+f 949 948 822
+f 951 948 949
+f 952 953 954
+f 955 949 952
+f 955 951 949
+f 956 952 954
+f 956 955 952
+f 545 957 958
+f 546 957 545
+f 959 957 546
+f 543 959 546
+f 959 543 541
+f 959 541 960
+f 960 541 545
+f 958 960 545
+f 532 961 962
+f 532 962 531
+f 963 961 532
+f 529 963 532
+f 964 529 526
+f 963 529 964
+f 964 526 531
+f 962 964 531
+f 537 965 966
+f 538 965 537
+f 967 965 538
+f 536 967 538
+f 967 536 534
+f 967 534 968
+f 968 534 537
+f 966 968 537
+f 552 969 970
+f 554 969 552
+f 971 969 554
+f 550 971 554
+f 971 550 549
+f 971 549 972
+f 972 549 552
+f 970 972 552
+f 563 973 974
+f 563 974 561
+f 559 975 563
+f 975 973 563
+f 976 559 555
+f 975 559 976
+f 974 976 561
+f 976 555 561
+f 574 977 978
+f 574 978 571
+f 568 979 574
+f 979 977 574
+f 980 568 567
+f 979 568 980
+f 978 980 571
+f 980 567 571
+f 584 981 982
+f 584 982 580
+f 578 983 584
+f 983 981 584
+f 984 578 576
+f 983 578 984
+f 982 984 580
+f 984 576 580
+f 592 985 986
+f 597 985 592
+f 589 987 597
+f 987 985 597
+f 987 589 586
+f 987 586 988
+f 986 988 592
+f 988 586 592
+f 642 989 641
+f 642 990 989
+f 640 991 642
+f 991 990 642
+f 992 640 636
+f 991 640 992
+f 989 992 641
+f 992 636 641
+f 610 993 609
+f 610 994 993
+f 995 994 610
+f 606 995 610
+f 996 606 603
+f 995 606 996
+f 996 603 609
+f 993 996 609
+f 618 997 998
+f 619 997 618
+f 999 997 619
+f 617 999 619
+f 999 615 1000
+f 999 617 615
+f 1000 615 618
+f 998 1000 618
+f 626 1001 1002
+f 627 1001 626
+f 1003 1001 627
+f 624 1003 627
+f 1003 622 1004
+f 1003 624 622
+f 1004 622 626
+f 1002 1004 626
+f 633 1005 1006
+f 635 1005 633
+f 1007 1005 635
+f 631 1007 635
+f 1007 630 1008
+f 1007 631 630
+f 1008 630 633
+f 1006 1008 633
+f 651 1009 649
+f 651 1010 1009
+f 647 1011 651
+f 1011 1010 651
+f 1012 647 646
+f 1011 647 1012
+f 1009 1012 649
+f 1012 646 649
+f 659 1013 656
+f 659 1014 1013
+f 655 1015 659
+f 1015 1014 659
+f 1016 655 653
+f 1015 655 1016
+f 1013 1016 656
+f 1016 653 656
+f 665 1017 1018
+f 669 1017 665
+f 663 1019 669
+f 1019 1017 669
+f 1019 661 1020
+f 1019 663 661
+f 1018 1020 665
+f 1020 661 665
+f 678 1021 1022
+f 679 1021 678
+f 1023 1021 679
+f 677 1023 679
+f 1023 677 676
+f 1023 676 1024
+f 1024 676 678
+f 1022 1024 678
+f 682 1025 1026
+f 683 1025 682
+f 1027 1025 683
+f 680 1027 683
+f 1027 680 681
+f 1027 681 1028
+f 1028 681 682
+f 1026 1028 682
+f 686 944 947
+f 686 947 684
+f 941 943 687
+f 688 941 687
+f 937 939 690
+f 692 937 690
+f 695 935 694
+f 695 933 935
+f 334 931 698
+f 929 931 334
+f 706 1029 1030
+f 707 1029 706
+f 1031 1029 707
+f 705 1031 707
+f 1031 705 704
+f 1031 704 1032
+f 1032 704 706
+f 1030 1032 706
+f 711 1033 1034
+f 711 1034 710
+f 708 1035 711
+f 1035 1033 711
+f 1036 708 709
+f 1035 708 1036
+f 1034 1036 710
+f 1036 709 710
+f 715 1037 1038
+f 715 1038 714
+f 713 1039 715
+f 1039 1037 715
+f 1040 713 712
+f 1039 713 1040
+f 1038 1040 714
+f 1040 712 714
+f 721 1041 1042
+f 721 1042 720
+f 718 1043 721
+f 1043 1041 721
+f 1044 718 716
+f 1043 718 1044
+f 1042 1044 720
+f 1044 716 720
+f 726 1045 1046
+f 727 1045 726
+f 724 1047 727
+f 1047 1045 727
+f 1047 724 722
+f 1047 722 1048
+f 1046 1048 726
+f 1048 722 726
+f 733 1049 732
+f 733 1050 1049
+f 1051 1050 733
+f 731 1051 733
+f 1052 731 728
+f 1051 731 1052
+f 1052 728 732
+f 1049 1052 732
+f 746 1053 1054
+f 747 1053 746
+f 1055 1053 747
+f 745 1055 747
+f 1055 744 1056
+f 1055 745 744
+f 1056 744 746
+f 1054 1056 746
+f 750 1057 1058
+f 751 1057 750
+f 1059 1057 751
+f 748 1059 751
+f 1059 749 1060
+f 1059 748 749
+f 1060 749 750
+f 1058 1060 750
+f 754 1061 1062
+f 755 1061 754
+f 1063 1061 755
+f 753 1063 755
+f 1063 752 1064
+f 1063 753 752
+f 1064 752 754
+f 1062 1064 754
+f 759 1065 758
+f 759 1066 1065
+f 756 1067 759
+f 1067 1066 759
+f 1068 756 757
+f 1067 756 1068
+f 1065 1068 758
+f 1068 757 758
+f 763 1069 762
+f 763 1070 1069
+f 761 1071 763
+f 1071 1070 763
+f 1072 761 760
+f 1071 761 1072
+f 1069 1072 762
+f 1072 760 762
+f 767 1073 766
+f 767 1074 1073
+f 765 1075 767
+f 1075 1074 767
+f 1076 765 764
+f 1075 765 1076
+f 1073 1076 766
+f 1076 764 766
+f 1077 768 769
+f 1077 769 1078
+f 1079 770 768
+f 1079 768 1077
+f 1080 771 770
+f 1080 770 1079
+f 1081 772 771
+f 1081 771 1080
+f 1082 773 772
+f 1082 772 1081
+f 1083 774 773
+f 1083 773 1082
+f 1084 775 774
+f 1084 774 1083
+f 1085 775 1084
+f 776 775 1085
+f 1086 776 1085
+f 777 776 1086
+f 1087 777 1086
+f 778 777 1087
+f 1088 778 1087
+f 779 778 1088
+f 780 779 1088
+f 1089 780 1088
+f 781 780 1089
+f 1090 781 1089
+f 782 781 1090
+f 1091 782 1090
+f 783 782 1091
+f 1092 783 1091
+f 784 783 1092
+f 1093 784 1092
+f 785 784 1093
+f 1094 785 1093
+f 786 785 1094
+f 1095 786 1094
+f 787 786 1095
+f 1096 787 1095
+f 788 787 1096
+f 1097 788 1096
+f 789 788 1097
+f 1098 789 1097
+f 790 789 1098
+f 1099 790 1098
+f 791 790 1099
+f 1100 791 1099
+f 792 791 1100
+f 1101 792 1100
+f 793 792 1101
+f 1102 793 1101
+f 1103 793 1102
+f 794 793 1103
+f 1104 794 1103
+f 795 794 1104
+f 1105 795 1104
+f 796 795 1105
+f 1106 796 1105
+f 797 796 1106
+f 1107 797 1106
+f 798 797 1107
+f 1108 798 1107
+f 769 798 1108
+f 1078 769 1108
+f 21 802 799
+f 819 802 21
+f 801 927 800
+f 802 927 801
+f 805 806 804
+f 805 804 803
+f 807 810 808
+f 809 810 807
+f 811 814 812
+f 813 814 811
+f 817 818 816
+f 817 816 815
+f 819 820 927
+f 819 927 802
+f 821 950 822
+f 821 1109 950
+f 823 1110 1109
+f 823 1109 821
+f 824 1111 1110
+f 824 1110 823
+f 825 1112 1111
+f 825 1111 824
+f 826 1113 1112
+f 826 1112 825
+f 1114 1113 826
+f 827 1114 826
+f 1115 1114 827
+f 828 1115 827
+f 833 1115 828
+f 829 833 828
+f 845 849 1116
+f 1117 845 1116
+f 834 1118 838
+f 834 1117 1118
+f 834 845 1117
+f 1116 849 850
+f 1117 1116 850
+f 839 1118 1117
+f 839 1117 850
+f 838 1118 839
+f 1119 1120 956
+f 1119 956 954
+f 1121 1122 1120
+f 1121 1120 1119
+f 1123 1124 1122
+f 1123 1122 1121
+f 1125 1126 1124
+f 1125 1124 1123
+f 1127 1128 1126
+f 1127 1126 1125
+f 1129 1130 1128
+f 1129 1128 1127
+f 1131 1132 1130
+f 1131 1130 1129
+f 837 839 1132
+f 837 1132 1131
+f 1133 1119 954
+f 1133 954 953
+f 1134 1121 1119
+f 1134 1119 1133
+f 1135 1123 1121
+f 1135 1121 1134
+f 1136 1125 1123
+f 1136 1123 1135
+f 1137 1127 1125
+f 1137 1125 1136
+f 1138 1129 1127
+f 1138 1127 1137
+f 1131 1129 1138
+f 1139 1131 1138
+f 837 1131 1139
+f 835 837 1139
+f 1133 953 952
+f 1140 1133 952
+f 1134 1133 1140
+f 1141 1134 1140
+f 1135 1134 1141
+f 1142 1135 1141
+f 1136 1135 1142
+f 1143 1136 1142
+f 1137 1136 1143
+f 1144 1137 1143
+f 1145 1138 1137
+f 1145 1137 1144
+f 1146 1139 1138
+f 1146 1138 1145
+f 836 835 1139
+f 836 1139 1146
+f 1147 952 949
+f 1147 1140 952
+f 1148 1141 1140
+f 1148 1140 1147
+f 1149 1142 1141
+f 1149 1141 1148
+f 1150 1143 1142
+f 1150 1142 1149
+f 1151 1144 1143
+f 1151 1143 1150
+f 1152 1145 1144
+f 1152 1144 1151
+f 1146 1145 1152
+f 1153 1146 1152
+f 836 1146 1153
+f 832 836 1153
+f 1109 1147 949
+f 1109 949 950
+f 1110 1148 1147
+f 1110 1147 1109
+f 1111 1149 1148
+f 1111 1148 1110
+f 1112 1150 1149
+f 1112 1149 1111
+f 1113 1151 1150
+f 1113 1150 1112
+f 1152 1151 1113
+f 1114 1152 1113
+f 1115 1153 1152
+f 1115 1152 1114
+f 832 1153 1115
+f 833 832 1115
+f 841 831 830
+f 840 841 830
+f 841 834 831
+f 841 845 834
+f 1154 850 848
+f 1155 1154 848
+f 1156 1154 1155
+f 1157 1158 1156
+f 1157 1156 1155
+f 1159 1160 1158
+f 1159 1158 1157
+f 1161 1162 1160
+f 1161 1160 1159
+f 1163 1164 1162
+f 1163 1162 1161
+f 865 867 1164
+f 865 1164 1163
+f 1165 1155 848
+f 1165 848 847
+f 1157 1155 1165
+f 1166 1157 1165
+f 1167 1157 1166
+f 1159 1157 1167
+f 1168 1159 1167
+f 1161 1159 1168
+f 1169 1163 1161
+f 1169 1161 1168
+f 863 865 1163
+f 863 1163 1169
+f 1165 847 846
+f 1170 1165 846
+f 1166 1165 1170
+f 1171 1166 1170
+f 1172 1167 1166
+f 1172 1166 1171
+f 1173 1168 1167
+f 1173 1167 1172
+f 1174 1169 1168
+f 1174 1168 1173
+f 864 863 1169
+f 864 1169 1174
+f 1175 1170 846
+f 1175 846 843
+f 1176 1171 1170
+f 1176 1170 1175
+f 1177 1172 1171
+f 1177 1171 1176
+f 1178 1173 1172
+f 1178 1172 1177
+f 1179 1174 1173
+f 1179 1173 1178
+f 1180 864 1174
+f 1180 1174 1179
+f 860 864 1180
+f 1175 843 844
+f 1181 1175 844
+f 1176 1175 1181
+f 1182 1176 1181
+f 1177 1176 1182
+f 1183 1177 1182
+f 1178 1177 1183
+f 1184 1178 1183
+f 1179 1178 1184
+f 1185 1179 1184
+f 1186 1180 1179
+f 1186 1179 1185
+f 861 860 1180
+f 861 1180 1186
+f 851 1181 844
+f 851 844 842
+f 1182 1181 851
+f 852 1182 851
+f 1183 1182 852
+f 853 1183 852
+f 1184 1183 853
+f 854 1184 853
+f 1185 1184 854
+f 855 1185 854
+f 1186 1185 855
+f 856 1186 855
+f 861 1186 856
+f 857 861 856
+f 1187 873 877
+f 1188 862 873
+f 1188 873 1187
+f 1189 862 1188
+f 866 862 1189
+f 1190 1188 1187
+f 1190 1187 877
+f 1190 877 878
+f 1191 1189 1188
+f 1191 1188 1190
+f 867 866 1189
+f 867 1189 1191
+f 868 869 859
+f 868 859 858
+f 859 873 862
+f 869 873 859
+f 1192 1193 878
+f 1192 878 876
+f 1194 1195 1193
+f 1194 1193 1192
+f 1196 1197 1195
+f 1196 1195 1194
+f 1198 1199 1197
+f 1198 1197 1196
+f 1200 1201 1199
+f 1200 1199 1198
+f 1202 1203 1201
+f 1202 1201 1200
+f 1204 1205 1203
+f 1204 1203 1202
+f 894 896 1205
+f 894 1205 1204
+f 1206 1192 876
+f 1206 876 875
+f 1207 1194 1192
+f 1207 1192 1206
+f 1208 1196 1194
+f 1208 1194 1207
+f 1209 1198 1196
+f 1209 1196 1208
+f 1210 1200 1198
+f 1210 1198 1209
+f 1211 1202 1200
+f 1211 1200 1210
+f 1204 1202 1211
+f 1212 1204 1211
+f 894 1204 1212
+f 892 894 1212
+f 1206 875 874
+f 1213 1206 874
+f 1207 1206 1213
+f 1214 1207 1213
+f 1208 1207 1214
+f 1215 1208 1214
+f 1209 1208 1215
+f 1216 1209 1215
+f 1210 1209 1216
+f 1217 1210 1216
+f 1218 1211 1210
+f 1218 1210 1217
+f 1219 1212 1211
+f 1219 1211 1218
+f 893 892 1212
+f 893 1212 1219
+f 1220 874 871
+f 1220 1213 874
+f 1221 1214 1213
+f 1221 1213 1220
+f 1222 1215 1214
+f 1222 1214 1221
+f 1223 1216 1215
+f 1223 1215 1222
+f 1224 1217 1216
+f 1224 1216 1223
+f 1225 1218 1217
+f 1225 1217 1224
+f 1219 1218 1225
+f 1226 1219 1225
+f 893 1219 1226
+f 889 893 1226
+f 1227 1220 871
+f 1227 871 872
+f 1228 1221 1220
+f 1228 1220 1227
+f 1229 1222 1221
+f 1229 1221 1228
+f 1230 1223 1222
+f 1230 1222 1229
+f 1231 1224 1223
+f 1231 1223 1230
+f 1232 1225 1224
+f 1232 1224 1231
+f 1226 1225 1232
+f 1233 1226 1232
+f 890 889 1226
+f 890 1226 1233
+f 879 872 870
+f 879 1227 872
+f 880 1228 1227
+f 880 1227 879
+f 881 1229 1228
+f 881 1228 880
+f 882 1230 1229
+f 882 1229 881
+f 883 1231 1230
+f 883 1230 882
+f 1232 1231 883
+f 884 1232 883
+f 1233 1232 884
+f 885 1233 884
+f 890 1233 885
+f 886 890 885
+f 1234 895 891
+f 1235 1234 891
+f 907 1235 891
+f 1236 1235 907
+f 905 1236 907
+f 1234 896 895
+f 1235 896 1234
+f 901 1235 1236
+f 901 1236 905
+f 901 896 1235
+f 906 888 887
+f 897 906 887
+f 906 891 888
+f 906 907 891
+f 908 1237 903
+f 908 903 902
+f 1238 1237 908
+f 909 1238 908
+f 1239 1238 909
+f 910 1239 909
+f 1240 1239 910
+f 911 1240 910
+f 1241 1240 911
+f 912 1241 911
+f 1242 1241 912
+f 913 1242 912
+f 918 1242 913
+f 914 918 913
+f 1237 1243 904
+f 1237 904 903
+f 1238 1244 1243
+f 1238 1243 1237
+f 1239 1245 1244
+f 1239 1244 1238
+f 1246 1245 1239
+f 1240 1246 1239
+f 1241 1247 1246
+f 1241 1246 1240
+f 1242 1248 1247
+f 1242 1247 1241
+f 918 917 1248
+f 918 1248 1242
+f 1243 1249 899
+f 1243 899 904
+f 1244 1250 1249
+f 1244 1249 1243
+f 1245 1251 1250
+f 1245 1250 1244
+f 1246 1252 1251
+f 1246 1251 1245
+f 1247 1253 1252
+f 1247 1252 1246
+f 1248 921 1253
+f 1248 1253 1247
+f 917 921 1248
+f 1254 900 899
+f 1249 1254 899
+f 1255 1254 1249
+f 1250 1255 1249
+f 1251 1256 1255
+f 1251 1255 1250
+f 1252 1257 1256
+f 1252 1256 1251
+f 1253 1258 1257
+f 1253 1257 1252
+f 921 920 1258
+f 921 1258 1253
+f 1254 1259 898
+f 1254 898 900
+f 1260 1259 1254
+f 1255 1260 1254
+f 1256 1260 1255
+f 1261 1260 1256
+f 1257 1261 1256
+f 1262 1261 1257
+f 1258 1263 1262
+f 1258 1262 1257
+f 920 922 1263
+f 920 1263 1258
+f 1264 901 898
+f 1259 1264 898
+f 1265 1264 1259
+f 1260 1266 1265
+f 1260 1265 1259
+f 1261 1267 1266
+f 1261 1266 1260
+f 1262 1268 1267
+f 1262 1267 1261
+f 1263 1269 1268
+f 1263 1268 1262
+f 922 924 1269
+f 922 1269 1263
+f 919 1270 923
+f 919 1271 1270
+f 1272 1273 1274
+f 1272 1275 1271
+f 1272 1274 1275
+f 1272 1271 919
+f 951 1276 1273
+f 951 1277 1276
+f 951 955 1277
+f 951 1273 1272
+f 1270 1278 924
+f 1270 924 923
+f 1271 1278 1270
+f 1275 1278 1271
+f 1274 1278 1275
+f 1273 1278 1274
+f 1276 956 1278
+f 1276 1278 1273
+f 1277 956 1276
+f 955 956 1277
+f 915 1279 916
+f 925 1279 915
+f 916 1272 919
+f 1279 1272 916
+f 926 948 1279
+f 926 1279 925
+f 929 928 930
+f 929 930 931
+f 933 932 934
+f 933 934 935
+f 939 936 938
+f 937 936 939
+f 943 940 942
+f 941 940 943
+f 944 945 946
+f 944 946 947
+f 948 951 1272
+f 948 1272 1279
+f 957 959 960
+f 957 960 958
+f 962 963 964
+f 961 963 962
+f 965 967 968
+f 965 968 966
+f 969 971 972
+f 969 972 970
+f 974 975 976
+f 973 975 974
+f 978 979 980
+f 977 979 978
+f 982 983 984
+f 981 983 982
+f 985 987 988
+f 985 988 986
+f 989 991 992
+f 990 991 989
+f 993 995 996
+f 994 995 993
+f 997 999 1000
+f 997 1000 998
+f 1001 1003 1004
+f 1001 1004 1002
+f 1005 1007 1008
+f 1005 1008 1006
+f 1009 1011 1012
+f 1010 1011 1009
+f 1013 1015 1016
+f 1014 1015 1013
+f 1017 1019 1020
+f 1017 1020 1018
+f 1021 1023 1024
+f 1021 1024 1022
+f 1025 1027 1028
+f 1025 1028 1026
+f 1029 1031 1032
+f 1029 1032 1030
+f 1034 1035 1036
+f 1033 1035 1034
+f 1038 1039 1040
+f 1037 1039 1038
+f 1042 1043 1044
+f 1041 1043 1042
+f 1045 1047 1048
+f 1045 1048 1046
+f 1049 1051 1052
+f 1050 1051 1049
+f 1053 1055 1056
+f 1053 1056 1054
+f 1057 1059 1060
+f 1057 1060 1058
+f 1061 1063 1064
+f 1061 1064 1062
+f 1065 1067 1068
+f 1066 1067 1065
+f 1069 1071 1072
+f 1070 1071 1069
+f 1073 1075 1076
+f 1074 1075 1073
+f 1077 1078 1280
+f 1281 1077 1280
+f 1079 1077 1281
+f 1282 1079 1281
+f 1080 1079 1282
+f 1283 1080 1282
+f 1081 1080 1283
+f 1284 1081 1283
+f 1082 1081 1284
+f 1285 1082 1284
+f 1083 1082 1285
+f 1286 1083 1285
+f 1084 1083 1286
+f 1287 1084 1286
+f 1085 1084 1287
+f 1288 1085 1287
+f 1086 1085 1288
+f 1289 1086 1288
+f 1087 1086 1289
+f 1290 1087 1289
+f 1088 1087 1290
+f 1291 1088 1290
+f 1089 1088 1291
+f 1292 1089 1291
+f 1090 1089 1292
+f 1293 1090 1292
+f 1091 1090 1293
+f 1294 1091 1293
+f 1092 1091 1294
+f 1295 1092 1294
+f 1093 1092 1295
+f 1296 1093 1295
+f 1094 1093 1296
+f 1297 1094 1296
+f 1095 1094 1297
+f 1298 1095 1297
+f 1096 1095 1298
+f 1299 1096 1298
+f 1097 1096 1299
+f 1300 1097 1299
+f 1098 1097 1300
+f 1301 1098 1300
+f 1099 1098 1301
+f 1302 1099 1301
+f 1100 1099 1302
+f 1303 1100 1302
+f 1101 1100 1303
+f 1304 1101 1303
+f 1102 1101 1304
+f 1305 1102 1304
+f 1103 1102 1305
+f 1306 1103 1305
+f 1104 1103 1306
+f 1307 1104 1306
+f 1105 1104 1307
+f 1308 1105 1307
+f 1106 1105 1308
+f 1309 1106 1308
+f 1107 1106 1309
+f 1310 1107 1309
+f 1108 1107 1310
+f 1311 1108 1310
+f 1078 1108 1311
+f 1280 1078 1311
+f 867 1191 1190
+f 867 1190 878
+f 1164 878 1193
+f 1164 867 878
+f 1162 1193 1195
+f 1162 1164 1193
+f 1160 1195 1197
+f 1160 1162 1195
+f 1158 1197 1199
+f 1158 1160 1197
+f 1156 1199 1201
+f 1156 1158 1199
+f 1154 1201 1203
+f 1154 1203 1205
+f 1154 1156 1201
+f 850 1205 896
+f 850 1154 1205
+f 839 896 901
+f 839 850 896
+f 1132 901 1264
+f 1132 839 901
+f 1130 1132 1264
+f 956 1269 924
+f 956 924 1278
+f 1128 1264 1265
+f 1128 1130 1264
+f 1120 1269 956
+f 1120 1268 1269
+f 1126 1128 1265
+f 1126 1265 1266
+f 1122 1267 1268
+f 1122 1268 1120
+f 1124 1126 1266
+f 1124 1267 1122
+f 1124 1266 1267
+f 1312 1313 1280
+f 1314 1280 1313
+f 1281 1280 1314
+f 1315 1313 1312
+f 1316 1281 1314
+f 1317 1281 1318
+f 1319 1281 1316
+f 1319 1318 1281
+f 1282 1281 1317
+f 1320 1317 1321
+f 1320 1282 1317
+f 1322 1282 1320
+f 1283 1282 1322
+f 1283 1322 1323
+f 1324 1322 1320
+f 1325 1283 1323
+f 1284 1283 1326
+f 1284 1326 1327
+f 1328 1326 1283
+f 1328 1283 1325
+f 1329 1284 1327
+f 1330 1285 1284
+f 1330 1284 1329
+f 1331 1285 1330
+f 1331 1332 1285
+f 1286 1285 1332
+f 1286 1332 1333
+f 1286 1333 1334
+f 1335 1286 1336
+f 1337 1286 1334
+f 1337 1336 1286
+f 1287 1286 1335
+f 1287 1335 1338
+f 1339 1287 1340
+f 1341 1287 1338
+f 1341 1340 1287
+f 1288 1287 1339
+f 1288 1339 1342
+f 1288 1342 1343
+f 1344 1342 1339
+f 1344 1339 1345
+f 1346 1288 1343
+f 1347 1288 1346
+f 1347 1348 1288
+f 1289 1288 1348
+f 1289 1348 1349
+f 1289 1349 1350
+f 1351 1289 1352
+f 1353 1289 1350
+f 1353 1352 1289
+f 1290 1289 1351
+f 1290 1351 1354
+f 1355 1290 1356
+f 1357 1290 1354
+f 1357 1356 1290
+f 1358 1355 1359
+f 1358 1290 1355
+f 1291 1358 1360
+f 1291 1290 1358
+f 1361 1358 1359
+f 1362 1291 1360
+f 1363 1291 1362
+f 1292 1291 1363
+f 1364 1292 1363
+f 1365 1292 1364
+f 1366 1364 1363
+f 1367 1292 1365
+f 1293 1292 1367
+f 1293 1367 1368
+f 1369 1365 1370
+f 1369 1367 1365
+f 1371 1293 1368
+f 1372 1293 1371
+f 1373 1293 1372
+f 1294 1293 1373
+f 1374 1294 1373
+f 1375 1373 1372
+f 1376 1294 1374
+f 1376 1374 1377
+f 1295 1376 1378
+f 1295 1294 1376
+f 1379 1376 1377
+f 1380 1295 1378
+f 1296 1381 1382
+f 1296 1295 1381
+f 1383 1381 1295
+f 1383 1295 1380
+f 1384 1296 1382
+f 1385 1296 1386
+f 1387 1296 1384
+f 1387 1386 1296
+f 1297 1296 1385
+f 1388 1385 1389
+f 1388 1297 1385
+f 1390 1297 1388
+f 1298 1390 1391
+f 1298 1297 1390
+f 1392 1390 1388
+f 1393 1298 1391
+f 1299 1394 1395
+f 1299 1298 1394
+f 1396 1298 1393
+f 1396 1394 1298
+f 1397 1299 1395
+f 1398 1300 1299
+f 1398 1299 1397
+f 1301 1399 1400
+f 1301 1300 1399
+f 1401 1300 1398
+f 1401 1399 1300
+f 1402 1301 1400
+f 1403 1301 1402
+f 1403 1404 1301
+f 1302 1404 1405
+f 1302 1405 1406
+f 1302 1301 1404
+f 1407 1408 1302
+f 1407 1302 1406
+f 1303 1302 1408
+f 1303 1408 1409
+f 1303 1409 1410
+f 1411 1303 1412
+f 1413 1303 1410
+f 1413 1412 1303
+f 1414 1411 1415
+f 1304 1303 1411
+f 1304 1411 1414
+f 1304 1414 1416
+f 1417 1414 1415
+f 1418 1304 1416
+f 1419 1420 1304
+f 1419 1304 1418
+f 1305 1304 1420
+f 1305 1420 1421
+f 1305 1421 1422
+f 1306 1305 1423
+f 1306 1423 1424
+f 1425 1423 1305
+f 1425 1305 1422
+f 1426 1306 1424
+f 1427 1306 1428
+f 1429 1306 1426
+f 1429 1428 1306
+f 1307 1427 1430
+f 1307 1306 1427
+f 1431 1307 1430
+f 1432 1307 1431
+f 1308 1432 1433
+f 1308 1307 1432
+f 1434 1432 1431
+f 1435 1308 1433
+f 1309 1436 1437
+f 1309 1308 1436
+f 1438 1308 1435
+f 1438 1436 1308
+f 1439 1309 1437
+f 1440 1309 1439
+f 1441 1309 1440
+f 1310 1441 1442
+f 1310 1309 1441
+f 1443 1441 1440
+f 1444 1310 1442
+f 1445 1311 1446
+f 1280 1311 1445
+f 1447 1446 1311
+f 1447 1311 1310
+f 1447 1310 1444
+f 1312 1445 1448
+f 1312 1280 1445
+f 1449 1312 1448
+f 1449 1448 1450
+f 1451 1452 1453
+f 1452 1454 1453
+f 1445 1455 1448
+f 1455 1450 1448
+f 1450 1456 1457
+f 1457 1456 1452
+f 1455 1456 1450
+f 1456 1454 1452
+f 1455 1445 1446
+f 1455 1446 1458
+f 1459 1460 1461
+f 1461 1460 1462
+f 1460 1463 1464
+f 1463 1465 1464
+f 1465 1458 1447
+f 1447 1458 1446
+f 1463 1458 1465
+f 1459 1463 1460
+f 1447 1444 1466
+f 1465 1447 1466
+f 1467 1468 1469
+f 1467 1469 1470
+f 1471 1467 1472
+f 1466 1471 1472
+f 1473 1466 1444
+f 1473 1444 1442
+f 1473 1471 1466
+f 1471 1468 1467
+f 1473 1442 1441
+f 1473 1441 1474
+f 1475 1476 1477
+f 1478 1475 1477
+f 1443 1474 1441
+f 1479 1474 1443
+f 1480 1479 1481
+f 1480 1481 1475
+f 1480 1474 1479
+f 1478 1480 1475
+f 1482 1440 1439
+f 1482 1439 1483
+f 1443 1440 1482
+f 1479 1443 1482
+f 1484 1485 1486
+f 1485 1487 1486
+f 1488 1439 1437
+f 1488 1483 1439
+f 1483 1489 1490
+f 1490 1489 1485
+f 1488 1489 1483
+f 1489 1487 1485
+f 1488 1437 1436
+f 1488 1436 1491
+f 1492 1493 1494
+f 1494 1493 1495
+f 1493 1496 1497
+f 1496 1498 1497
+f 1498 1491 1438
+f 1438 1491 1436
+f 1496 1491 1498
+f 1492 1496 1493
+f 1498 1438 1435
+f 1498 1435 1499
+f 1500 1501 1502
+f 1500 1502 1503
+f 1504 1500 1505
+f 1499 1504 1505
+f 1506 1499 1435
+f 1506 1435 1433
+f 1506 1504 1499
+f 1504 1501 1500
+f 1506 1433 1432
+f 1506 1432 1507
+f 1508 1509 1510
+f 1511 1508 1510
+f 1434 1507 1432
+f 1512 1507 1434
+f 1513 1512 1514
+f 1513 1514 1508
+f 1513 1507 1512
+f 1511 1513 1508
+f 1431 1430 1515
+f 1516 1431 1515
+f 1434 1431 1516
+f 1512 1434 1516
+f 1517 1518 1519
+f 1518 1520 1519
+f 1521 1430 1427
+f 1521 1515 1430
+f 1515 1522 1523
+f 1523 1522 1518
+f 1521 1522 1515
+f 1522 1520 1518
+f 1427 1428 1524
+f 1521 1427 1524
+f 1525 1526 1527
+f 1527 1526 1528
+f 1526 1529 1530
+f 1529 1531 1530
+f 1531 1524 1429
+f 1429 1524 1428
+f 1529 1524 1531
+f 1525 1529 1526
+f 1429 1426 1532
+f 1531 1429 1532
+f 1533 1534 1535
+f 1534 1536 1535
+f 1537 1426 1424
+f 1537 1532 1426
+f 1532 1538 1539
+f 1539 1538 1534
+f 1537 1538 1532
+f 1538 1536 1534
+f 1424 1423 1540
+f 1537 1424 1540
+f 1541 1542 1543
+f 1543 1542 1544
+f 1542 1545 1546
+f 1545 1547 1546
+f 1547 1540 1425
+f 1425 1540 1423
+f 1545 1540 1547
+f 1541 1545 1542
+f 1425 1422 1548
+f 1547 1425 1548
+f 1549 1550 1551
+f 1549 1551 1552
+f 1553 1549 1554
+f 1548 1553 1554
+f 1555 1548 1422
+f 1555 1422 1421
+f 1555 1553 1548
+f 1553 1550 1549
+f 1421 1420 1556
+f 1555 1421 1556
+f 1557 1558 1559
+f 1560 1557 1559
+f 1556 1420 1419
+f 1561 1556 1419
+f 1562 1561 1563
+f 1562 1563 1557
+f 1562 1556 1561
+f 1560 1562 1557
+f 1419 1418 1564
+f 1561 1419 1564
+f 1565 1566 1567
+f 1565 1567 1568
+f 1569 1565 1570
+f 1564 1569 1570
+f 1571 1564 1418
+f 1571 1418 1416
+f 1571 1569 1564
+f 1569 1566 1565
+f 1416 1414 1572
+f 1571 1416 1572
+f 1573 1574 1575
+f 1576 1573 1575
+f 1572 1414 1417
+f 1577 1572 1417
+f 1578 1577 1579
+f 1578 1579 1573
+f 1578 1572 1577
+f 1576 1578 1573
+f 1417 1415 1580
+f 1577 1417 1580
+f 1581 1582 1583
+f 1582 1584 1583
+f 1582 1585 1584
+f 1411 1586 1415
+f 1586 1580 1415
+f 1580 1587 1588
+f 1588 1587 1582
+f 1586 1587 1580
+f 1587 1585 1582
+f 1411 1412 1589
+f 1586 1411 1589
+f 1590 1591 1592
+f 1592 1591 1593
+f 1593 1591 1594
+f 1591 1595 1596
+f 1595 1597 1596
+f 1597 1589 1413
+f 1413 1589 1412
+f 1595 1589 1597
+f 1590 1595 1591
+f 1597 1413 1410
+f 1597 1410 1598
+f 1599 1600 1601
+f 1600 1602 1601
+f 1600 1603 1602
+f 1409 1604 1410
+f 1604 1598 1410
+f 1598 1605 1606
+f 1606 1605 1600
+f 1604 1605 1598
+f 1605 1603 1600
+f 1409 1408 1607
+f 1604 1409 1607
+f 1608 1609 1610
+f 1610 1609 1611
+f 1611 1609 1612
+f 1609 1613 1614
+f 1613 1615 1614
+f 1615 1607 1407
+f 1407 1607 1408
+f 1613 1607 1615
+f 1608 1613 1609
+f 1615 1407 1406
+f 1615 1406 1616
+f 1617 1618 1619
+f 1617 1619 1620
+f 1617 1620 1621
+f 1622 1617 1623
+f 1616 1622 1623
+f 1624 1616 1406
+f 1624 1406 1405
+f 1624 1622 1616
+f 1622 1618 1617
+f 1405 1404 1625
+f 1624 1405 1625
+f 1626 1627 1628
+f 1629 1626 1628
+f 1630 1626 1629
+f 1625 1404 1403
+f 1631 1625 1403
+f 1632 1631 1633
+f 1632 1633 1626
+f 1632 1625 1631
+f 1630 1632 1626
+f 1631 1403 1402
+f 1631 1402 1634
+f 1635 1636 1637
+f 1635 1637 1638
+f 1635 1638 1639
+f 1640 1635 1641
+f 1634 1640 1641
+f 1642 1634 1402
+f 1642 1402 1400
+f 1642 1640 1634
+f 1640 1636 1635
+f 1400 1399 1643
+f 1642 1400 1643
+f 1644 1645 1646
+f 1647 1644 1646
+f 1648 1644 1647
+f 1643 1399 1401
+f 1649 1643 1401
+f 1650 1649 1651
+f 1650 1651 1644
+f 1650 1643 1649
+f 1648 1650 1644
+f 1652 1398 1397
+f 1652 1397 1653
+f 1649 1401 1398
+f 1649 1398 1652
+f 1654 1655 1656
+f 1655 1657 1656
+f 1655 1658 1657
+f 1395 1659 1397
+f 1659 1653 1397
+f 1653 1660 1661
+f 1661 1660 1655
+f 1659 1660 1653
+f 1660 1658 1655
+f 1659 1395 1394
+f 1659 1394 1662
+f 1663 1664 1665
+f 1665 1664 1666
+f 1666 1664 1667
+f 1664 1668 1669
+f 1668 1670 1669
+f 1670 1662 1396
+f 1396 1662 1394
+f 1668 1662 1670
+f 1663 1668 1664
+f 1396 1393 1671
+f 1670 1396 1671
+f 1672 1673 1674
+f 1672 1674 1675
+f 1672 1675 1676
+f 1677 1672 1678
+f 1671 1677 1678
+f 1679 1671 1393
+f 1679 1393 1391
+f 1679 1677 1671
+f 1677 1673 1672
+f 1679 1391 1390
+f 1679 1390 1680
+f 1681 1682 1683
+f 1684 1681 1683
+f 1685 1681 1684
+f 1680 1390 1392
+f 1686 1680 1392
+f 1687 1686 1688
+f 1687 1688 1681
+f 1687 1680 1686
+f 1685 1687 1681
+f 1689 1388 1389
+f 1689 1389 1690
+f 1392 1388 1689
+f 1686 1392 1689
+f 1691 1692 1693
+f 1692 1694 1693
+f 1692 1695 1694
+f 1385 1696 1389
+f 1696 1690 1389
+f 1690 1697 1698
+f 1698 1697 1692
+f 1696 1697 1690
+f 1697 1695 1692
+f 1696 1385 1386
+f 1696 1386 1699
+f 1700 1701 1702
+f 1702 1701 1703
+f 1703 1701 1704
+f 1701 1705 1706
+f 1705 1707 1706
+f 1707 1699 1387
+f 1387 1699 1386
+f 1705 1699 1707
+f 1700 1705 1701
+f 1707 1387 1384
+f 1707 1384 1708
+f 1709 1710 1711
+f 1709 1711 1712
+f 1709 1712 1713
+f 1714 1709 1715
+f 1708 1714 1715
+f 1716 1708 1384
+f 1716 1384 1382
+f 1716 1714 1708
+f 1714 1710 1709
+f 1716 1382 1381
+f 1716 1381 1717
+f 1718 1719 1720
+f 1721 1718 1720
+f 1722 1718 1721
+f 1717 1381 1383
+f 1723 1717 1383
+f 1724 1723 1725
+f 1724 1725 1718
+f 1724 1717 1723
+f 1722 1724 1718
+f 1383 1380 1726
+f 1723 1383 1726
+f 1727 1728 1729
+f 1728 1730 1729
+f 1378 1731 1380
+f 1731 1726 1380
+f 1726 1732 1733
+f 1733 1732 1728
+f 1731 1732 1726
+f 1732 1730 1728
+f 1731 1378 1376
+f 1731 1376 1734
+f 1735 1736 1737
+f 1737 1736 1738
+f 1736 1739 1740
+f 1739 1741 1740
+f 1741 1734 1379
+f 1379 1734 1376
+f 1739 1734 1741
+f 1735 1739 1736
+f 1379 1377 1742
+f 1741 1379 1742
+f 1743 1744 1745
+f 1743 1745 1746
+f 1747 1743 1748
+f 1742 1747 1748
+f 1749 1742 1377
+f 1749 1377 1374
+f 1749 1747 1742
+f 1747 1744 1743
+f 1749 1374 1373
+f 1749 1373 1750
+f 1751 1752 1753
+f 1754 1751 1753
+f 1375 1750 1373
+f 1755 1750 1375
+f 1756 1755 1757
+f 1756 1757 1751
+f 1756 1750 1755
+f 1754 1756 1751
+f 1758 1372 1371
+f 1758 1371 1759
+f 1375 1372 1758
+f 1755 1375 1758
+f 1760 1761 1762
+f 1761 1763 1762
+f 1764 1371 1368
+f 1764 1759 1371
+f 1759 1765 1766
+f 1766 1765 1761
+f 1764 1765 1759
+f 1765 1763 1761
+f 1764 1368 1367
+f 1764 1367 1767
+f 1768 1769 1770
+f 1770 1769 1771
+f 1769 1772 1773
+f 1772 1774 1773
+f 1774 1767 1369
+f 1369 1767 1367
+f 1772 1767 1774
+f 1768 1772 1769
+f 1774 1369 1370
+f 1774 1370 1775
+f 1776 1777 1778
+f 1776 1778 1779
+f 1780 1776 1781
+f 1775 1780 1781
+f 1782 1775 1370
+f 1782 1370 1365
+f 1782 1780 1775
+f 1780 1777 1776
+f 1782 1365 1364
+f 1782 1364 1783
+f 1784 1785 1786
+f 1787 1784 1786
+f 1366 1783 1364
+f 1788 1783 1366
+f 1789 1788 1790
+f 1789 1790 1784
+f 1789 1783 1788
+f 1787 1789 1784
+f 1363 1362 1791
+f 1792 1363 1791
+f 1366 1363 1792
+f 1788 1366 1792
+f 1793 1794 1795
+f 1794 1796 1795
+f 1797 1362 1360
+f 1797 1791 1362
+f 1791 1798 1799
+f 1799 1798 1794
+f 1797 1798 1791
+f 1798 1796 1794
+f 1360 1358 1800
+f 1797 1360 1800
+f 1801 1802 1803
+f 1803 1802 1804
+f 1802 1805 1806
+f 1805 1807 1806
+f 1807 1800 1361
+f 1361 1800 1358
+f 1805 1800 1807
+f 1801 1805 1802
+f 1361 1359 1808
+f 1807 1361 1808
+f 1809 1810 1811
+f 1810 1812 1811
+f 1813 1359 1355
+f 1813 1808 1359
+f 1808 1814 1815
+f 1815 1814 1810
+f 1813 1814 1808
+f 1814 1812 1810
+f 1355 1356 1816
+f 1813 1355 1816
+f 1817 1818 1819
+f 1819 1818 1820
+f 1818 1821 1822
+f 1821 1823 1822
+f 1823 1816 1357
+f 1357 1816 1356
+f 1821 1816 1823
+f 1817 1821 1818
+f 1357 1354 1824
+f 1823 1357 1824
+f 1825 1826 1827
+f 1825 1827 1828
+f 1829 1825 1830
+f 1824 1829 1830
+f 1831 1824 1354
+f 1831 1354 1351
+f 1831 1829 1824
+f 1829 1826 1825
+f 1351 1352 1832
+f 1831 1351 1832
+f 1833 1834 1835
+f 1836 1833 1835
+f 1832 1352 1353
+f 1837 1832 1353
+f 1838 1837 1839
+f 1838 1839 1833
+f 1838 1832 1837
+f 1836 1838 1833
+f 1353 1350 1840
+f 1837 1353 1840
+f 1841 1842 1843
+f 1841 1843 1844
+f 1845 1841 1846
+f 1840 1845 1846
+f 1847 1840 1350
+f 1847 1350 1349
+f 1847 1845 1840
+f 1845 1842 1841
+f 1349 1348 1848
+f 1847 1349 1848
+f 1849 1850 1851
+f 1852 1849 1851
+f 1848 1348 1347
+f 1853 1848 1347
+f 1854 1853 1855
+f 1854 1855 1849
+f 1854 1848 1853
+f 1852 1854 1849
+f 1347 1346 1856
+f 1853 1347 1856
+f 1857 1858 1859
+f 1858 1860 1859
+f 1858 1861 1860
+f 1343 1862 1346
+f 1862 1856 1346
+f 1856 1863 1864
+f 1864 1863 1858
+f 1862 1863 1856
+f 1863 1861 1858
+f 1343 1342 1865
+f 1862 1343 1865
+f 1866 1867 1868
+f 1868 1867 1869
+f 1869 1867 1870
+f 1867 1871 1872
+f 1871 1873 1872
+f 1873 1865 1344
+f 1344 1865 1342
+f 1871 1865 1873
+f 1866 1871 1867
+f 1873 1344 1345
+f 1873 1345 1874
+f 1875 1876 1877
+f 1876 1878 1877
+f 1876 1879 1878
+f 1339 1880 1345
+f 1880 1874 1345
+f 1874 1881 1882
+f 1882 1881 1876
+f 1880 1881 1874
+f 1881 1879 1876
+f 1339 1340 1883
+f 1880 1339 1883
+f 1884 1885 1886
+f 1886 1885 1887
+f 1887 1885 1888
+f 1885 1889 1890
+f 1889 1891 1890
+f 1891 1883 1341
+f 1341 1883 1340
+f 1889 1883 1891
+f 1884 1889 1885
+f 1891 1341 1338
+f 1891 1338 1892
+f 1893 1894 1895
+f 1893 1895 1896
+f 1893 1896 1897
+f 1898 1893 1899
+f 1892 1898 1899
+f 1900 1892 1338
+f 1900 1338 1335
+f 1900 1898 1892
+f 1898 1894 1893
+f 1335 1336 1901
+f 1900 1335 1901
+f 1902 1903 1904
+f 1905 1902 1904
+f 1906 1902 1905
+f 1901 1336 1337
+f 1907 1901 1337
+f 1908 1907 1909
+f 1908 1909 1902
+f 1908 1901 1907
+f 1906 1908 1902
+f 1907 1337 1334
+f 1907 1334 1910
+f 1911 1912 1913
+f 1911 1913 1914
+f 1911 1914 1915
+f 1916 1911 1917
+f 1910 1916 1917
+f 1918 1910 1334
+f 1918 1334 1333
+f 1918 1916 1910
+f 1916 1912 1911
+f 1333 1332 1919
+f 1918 1333 1919
+f 1920 1921 1922
+f 1923 1920 1922
+f 1924 1920 1923
+f 1919 1332 1331
+f 1925 1919 1331
+f 1926 1925 1927
+f 1926 1927 1920
+f 1926 1919 1925
+f 1924 1926 1920
+f 1928 1330 1329
+f 1928 1329 1929
+f 1925 1331 1330
+f 1925 1330 1928
+f 1930 1931 1932
+f 1931 1933 1932
+f 1931 1934 1933
+f 1327 1935 1329
+f 1935 1929 1329
+f 1929 1936 1937
+f 1937 1936 1931
+f 1935 1936 1929
+f 1936 1934 1931
+f 1935 1327 1326
+f 1935 1326 1938
+f 1939 1940 1941
+f 1941 1940 1942
+f 1942 1940 1943
+f 1940 1944 1945
+f 1944 1946 1945
+f 1946 1938 1328
+f 1328 1938 1326
+f 1944 1938 1946
+f 1939 1944 1940
+f 1328 1325 1947
+f 1946 1328 1947
+f 1948 1949 1950
+f 1948 1950 1951
+f 1948 1951 1952
+f 1953 1948 1954
+f 1947 1953 1954
+f 1955 1947 1325
+f 1955 1325 1323
+f 1955 1953 1947
+f 1953 1949 1948
+f 1955 1323 1322
+f 1955 1322 1956
+f 1957 1958 1959
+f 1960 1957 1959
+f 1961 1957 1960
+f 1956 1322 1324
+f 1962 1956 1324
+f 1963 1962 1964
+f 1963 1964 1957
+f 1963 1956 1962
+f 1961 1963 1957
+f 1965 1320 1321
+f 1965 1321 1966
+f 1324 1320 1965
+f 1962 1324 1965
+f 1967 1968 1969
+f 1968 1970 1969
+f 1968 1971 1970
+f 1317 1972 1321
+f 1972 1966 1321
+f 1966 1973 1974
+f 1974 1973 1968
+f 1972 1973 1966
+f 1973 1971 1968
+f 1972 1317 1318
+f 1972 1318 1975
+f 1976 1977 1978
+f 1978 1977 1979
+f 1979 1977 1980
+f 1977 1981 1982
+f 1981 1983 1982
+f 1983 1975 1319
+f 1319 1975 1318
+f 1981 1975 1983
+f 1976 1981 1977
+f 1983 1319 1316
+f 1983 1316 1984
+f 1985 1986 1987
+f 1985 1987 1988
+f 1985 1988 1989
+f 1990 1985 1991
+f 1984 1990 1991
+f 1992 1984 1316
+f 1992 1316 1314
+f 1992 1990 1984
+f 1990 1986 1985
+f 1992 1314 1313
+f 1992 1313 1993
+f 1994 1995 1996
+f 1997 1994 1996
+f 1998 1994 1997
+f 1993 1313 1315
+f 1999 1993 1315
+f 2000 1999 2001
+f 2000 2001 1994
+f 2000 1993 1999
+f 1998 2000 1994
+f 1315 1312 1449
+f 1999 1315 1449
+f 2002 1449 1450
+f 2002 1450 1457
+f 1575 1583 1584
+f 1576 1575 1584
+f 1559 1567 1566
+f 1560 1559 1566
+f 2003 1551 1550
+f 1543 1551 2003
+f 1541 1543 2003
+f 2004 1535 1536
+f 1527 1535 2004
+f 1525 1527 2004
+f 2005 1519 1520
+f 2006 1519 2005
+f 1511 1510 2006
+f 1511 2006 2005
+f 2007 1502 1501
+f 1494 1502 2007
+f 1492 1494 2007
+f 2008 1486 1487
+f 2009 1486 2008
+f 1478 1477 2009
+f 1478 2009 2008
+f 2010 1469 1468
+f 1461 1469 2010
+f 1459 1461 2010
+f 2011 2012 1453
+f 2011 1453 1454
+f 1584 2003 1576
+f 1576 2003 1566
+f 1566 2003 1560
+f 1560 2003 1550
+f 2003 2004 1541
+f 1541 2004 1536
+f 2004 2005 1525
+f 1525 2005 1520
+f 2005 2007 1501
+f 2005 1501 1511
+f 2007 2008 1487
+f 2007 1487 1492
+f 2008 2010 1468
+f 2008 1468 1478
+f 2010 2011 1454
+f 2010 1454 1459
+f 2012 2013 1451
+f 2012 1451 1453
+f 2013 2014 1452
+f 2013 1452 1451
+f 2015 1457 1452
+f 2016 2015 1452
+f 2002 2015 2017
+f 2014 2017 2018
+f 2014 2002 2017
+f 2002 1457 2015
+f 1452 2014 2018
+f 1452 2018 2016
+f 1456 1455 1458
+f 1456 1458 1463
+f 1454 1456 1463
+f 1454 1463 1459
+f 1464 1465 1466
+f 1464 1466 1472
+f 2019 1472 1467
+f 2019 2020 1472
+f 2021 1472 2020
+f 2022 2019 1467
+f 2023 2021 2022
+f 2023 2024 2021
+f 1464 2024 2025
+f 1460 2025 2026
+f 1460 1464 2025
+f 1464 1472 2021
+f 1464 2021 2024
+f 1467 1460 2026
+f 1467 2026 2023
+f 1467 2023 2022
+f 1462 1460 1467
+f 1462 1467 1470
+f 1462 1470 1469
+f 1461 1462 1469
+f 1480 1473 1474
+f 1471 1473 1480
+f 1478 1471 1480
+f 1468 1471 1478
+f 2009 2027 1484
+f 2009 1484 1486
+f 1476 2027 2009
+f 1477 1476 2009
+f 2027 2028 1485
+f 2027 1485 1484
+f 1476 1475 2028
+f 1476 2028 2027
+f 2029 1490 1485
+f 2029 2030 1490
+f 2031 2029 1485
+f 2032 2033 2034
+f 2035 2033 2031
+f 2035 2034 2033
+f 2036 2032 2034
+f 2028 2037 2035
+f 2028 2035 2031
+f 2038 2032 2036
+f 2039 2036 2037
+f 2039 2037 2028
+f 2039 2038 2036
+f 1481 2038 2040
+f 1475 2040 2041
+f 1475 2041 2039
+f 1475 2039 2028
+f 1475 1481 2040
+f 2032 1490 2030
+f 2032 2030 2033
+f 1481 2032 2038
+f 1485 2028 2031
+f 2032 1482 1483
+f 2032 1483 1490
+f 1481 1479 1482
+f 1481 1482 2032
+f 1489 1488 1491
+f 1489 1491 1496
+f 1487 1489 1496
+f 1487 1496 1492
+f 2042 1499 1505
+f 2043 2042 1505
+f 2044 1499 2042
+f 1498 1499 2044
+f 2045 2044 2046
+f 2045 1498 2044
+f 2047 2045 2046
+f 2048 1498 2045
+f 1497 2048 2049
+f 1497 1498 2048
+f 2050 2043 1505
+f 2050 1505 1500
+f 2051 2050 1500
+f 2052 2047 2046
+f 2052 2046 2051
+f 1497 2053 2054
+f 1493 2054 2052
+f 1493 1497 2054
+f 1500 1493 2052
+f 1500 2052 2051
+f 1497 2049 2053
+f 1495 1493 1500
+f 1495 1500 1503
+f 1494 1495 1503
+f 1494 1503 1502
+f 1504 1506 1507
+f 1504 1507 1513
+f 1501 1504 1513
+f 1501 1513 1511
+f 2055 1517 1519
+f 2006 2055 1519
+f 1509 2055 2006
+f 1510 1509 2006
+f 2055 2056 1518
+f 2055 1518 1517
+f 1509 1508 2056
+f 1509 2056 2055
+f 2057 2058 1523
+f 2057 1523 1518
+f 2059 2057 1518
+f 2060 2061 2062
+f 2060 2062 2059
+f 2056 2063 2064
+f 2056 2064 2060
+f 2056 2060 2059
+f 2065 2063 2056
+f 2066 2065 2056
+f 2067 2066 2056
+f 2068 2069 2070
+f 2068 2070 2067
+f 1514 2071 2072
+f 1508 2072 2068
+f 1508 2068 2067
+f 1508 2067 2056
+f 1508 1514 2072
+f 1518 2056 2059
+f 2073 1515 1523
+f 2058 2073 1523
+f 2074 1515 2073
+f 2075 2074 2062
+f 2061 2075 2062
+f 1516 1515 2074
+f 1516 2074 2075
+f 2076 1516 2075
+f 2077 2076 2063
+f 2077 1516 2076
+f 2065 2077 2063
+f 2078 1516 2077
+f 1512 1516 2078
+f 2079 2078 2070
+f 2079 1512 2078
+f 2069 2079 2070
+f 2080 1512 2079
+f 1514 2080 2071
+f 1514 1512 2080
+f 1529 1521 1524
+f 1522 1521 1529
+f 1525 1522 1529
+f 1520 1522 1525
+f 1531 1532 1539
+f 1530 1531 1539
+f 2081 1539 1534
+f 2081 2082 1539
+f 2083 2081 1534
+f 2084 2085 2083
+f 2084 2086 2085
+f 1530 2087 2088
+f 1526 2088 2084
+f 1526 1530 2088
+f 1530 1539 2086
+f 2086 1539 2082
+f 2086 2082 2085
+f 1530 2086 2087
+f 1534 1526 2083
+f 2083 1526 2084
+f 1528 1526 1534
+f 1528 1534 1533
+f 1528 1533 1535
+f 1527 1528 1535
+f 1545 1537 1540
+f 1538 1537 1545
+f 1541 1538 1545
+f 1536 1538 1541
+f 1547 1548 1554
+f 1546 1547 1554
+f 2089 1554 1549
+f 2089 2090 1554
+f 2091 1554 2090
+f 2092 2089 1549
+f 2093 2091 2092
+f 2093 2094 2091
+f 2095 2096 2097
+f 2095 2098 2096
+f 1546 2098 2099
+f 1546 2099 2100
+f 1542 2100 2095
+f 1542 2095 2097
+f 1542 1546 2100
+f 1546 1554 2098
+f 2098 1554 2094
+f 2094 1554 2091
+f 2098 2094 2096
+f 1549 1542 2092
+f 2092 1542 2093
+f 2093 1542 2097
+f 1544 1542 1549
+f 1544 1549 1552
+f 1544 1552 1551
+f 1543 1544 1551
+f 1562 1555 1556
+f 1553 1555 1562
+f 1560 1553 1562
+f 1550 1553 1560
+f 1558 1568 1567
+f 1559 1558 1567
+f 1558 1557 1565
+f 1558 1565 1568
+f 2101 1570 1565
+f 2102 2101 1565
+f 2103 2104 2105
+f 2103 2106 2104
+f 1563 2106 2107
+f 1557 2107 2108
+f 1557 2108 2103
+f 1557 1563 2107
+f 1563 1570 2106
+f 2106 1570 2104
+f 2104 1570 2101
+f 1565 1557 2105
+f 2105 1557 2103
+f 1565 2105 2102
+f 1563 1561 1564
+f 1563 1564 1570
+f 1578 1571 1572
+f 1569 1571 1578
+f 1576 1569 1578
+f 1566 1569 1576
+f 1574 1581 1583
+f 1575 1574 1583
+f 1573 1582 1581
+f 1574 1573 1581
+f 2109 1588 1582
+f 2110 2109 1582
+f 2111 1588 2109
+f 2112 2110 1582
+f 2113 2111 2112
+f 2113 2114 2111
+f 1579 2114 2115
+f 1573 2116 2113
+f 1573 2115 2116
+f 1573 1579 2115
+f 1579 1588 2114
+f 2114 1588 2111
+f 1582 1573 2112
+f 2112 1573 2113
+f 1579 1577 1580
+f 1579 1580 1588
+f 1585 1590 1592
+f 1584 1585 1592
+f 1587 1586 1589
+f 1587 1589 1595
+f 1585 1587 1595
+f 1585 1595 1590
+f 1596 1597 1598
+f 1596 1598 1606
+f 2117 1606 1600
+f 2117 2118 1606
+f 2119 2117 1600
+f 2120 2121 2119
+f 2120 2122 2121
+f 1596 2122 2123
+f 1591 2124 2120
+f 1591 2123 2124
+f 1591 1596 2123
+f 1596 1606 2118
+f 1596 2118 2121
+f 1596 2121 2122
+f 1600 1591 2119
+f 2119 1591 2120
+f 1591 1600 1599
+f 1594 1591 1599
+f 1593 1594 1599
+f 1593 1599 1601
+f 1592 1593 1601
+f 1592 1601 1602
+f 1603 1608 1610
+f 1602 1603 1610
+f 1605 1604 1607
+f 1605 1607 1613
+f 1603 1605 1613
+f 1603 1613 1608
+f 1615 1616 1623
+f 1614 1615 1623
+f 2125 1623 1617
+f 2125 2126 1623
+f 2127 2125 1617
+f 2128 2129 2127
+f 2128 2130 2129
+f 2131 2132 2133
+f 2131 2134 2132
+f 1614 2134 2135
+f 1609 2135 2136
+f 1609 2136 2131
+f 1609 1614 2135
+f 1614 1623 2126
+f 1614 2126 2129
+f 1614 2129 2130
+f 1614 2130 2132
+f 1614 2132 2134
+f 1617 1609 2131
+f 1617 2131 2133
+f 1617 2133 2128
+f 1617 2128 2127
+f 1612 1609 1617
+f 1612 1617 1621
+f 1611 1612 1621
+f 1611 1621 1620
+f 1610 1611 1620
+f 1610 1620 1619
+f 1622 1624 1625
+f 1622 1625 1632
+f 1618 1630 1629
+f 1619 1618 1629
+f 1618 1622 1632
+f 1618 1632 1630
+f 1629 1628 1638
+f 1629 1638 1637
+f 1628 1627 1639
+f 1628 1639 1638
+f 1626 1635 1639
+f 1627 1626 1639
+f 2137 1641 1635
+f 2137 2138 1641
+f 2139 2137 1635
+f 2140 2141 2139
+f 2140 2142 2141
+f 1633 2142 2143
+f 1633 2143 2144
+f 1626 2144 2140
+f 1626 1633 2144
+f 1633 1641 2138
+f 1633 2138 2141
+f 1633 2141 2142
+f 1635 1626 2140
+f 1635 2140 2139
+f 1633 1631 1634
+f 1633 1634 1641
+f 1640 1642 1643
+f 1640 1643 1650
+f 1636 1648 1647
+f 1637 1636 1647
+f 1636 1640 1650
+f 1636 1650 1648
+f 2145 2146 1656
+f 2145 1656 1657
+f 1647 1646 2146
+f 1647 2146 2145
+f 2146 2147 1654
+f 2146 1654 1656
+f 1646 1645 2147
+f 1646 2147 2146
+f 2147 2148 1655
+f 2147 1655 1654
+f 1644 2148 2147
+f 1645 1644 2147
+f 2149 2150 1661
+f 2149 1661 1655
+f 2151 2149 1655
+f 2152 2153 2154
+f 2152 2154 2151
+f 2152 2151 1655
+f 2148 2155 2156
+f 2148 2156 2152
+f 2157 2155 2148
+f 2158 2157 2148
+f 2159 2158 2148
+f 2160 2161 2159
+f 2160 2162 2161
+f 1651 2162 2163
+f 1651 2163 2164
+f 1644 2164 2160
+f 1644 2160 2159
+f 1644 2159 2148
+f 1644 1651 2164
+f 1655 2148 2152
+f 1651 2165 2162
+f 2162 2165 2161
+f 2166 1653 1661
+f 2150 2166 1661
+f 2167 1653 2166
+f 2168 1653 2167
+f 2153 2167 2154
+f 2153 2168 2167
+f 1652 1653 2168
+f 2169 1652 2168
+f 2170 1652 2169
+f 2157 2169 2155
+f 2157 2170 2169
+f 2171 1652 2170
+f 1649 1652 2171
+f 1651 2171 2165
+f 1651 1649 2171
+f 1657 1658 1663
+f 1657 1663 1665
+f 1668 1659 1662
+f 1660 1659 1668
+f 1663 1660 1668
+f 1658 1660 1663
+f 2172 1670 1671
+f 2172 1671 1678
+f 2173 2172 1678
+f 2174 1670 2172
+f 1669 2174 2175
+f 1669 1670 2174
+f 2176 1678 1672
+f 2176 2177 1678
+f 2178 2176 1672
+f 2179 2180 2178
+f 2179 2173 2180
+f 1669 2181 2182
+f 1664 2182 2179
+f 1664 1669 2182
+f 2173 1678 2177
+f 2173 2177 2180
+f 1672 1664 2178
+f 2178 1664 2179
+f 1669 2175 2181
+f 1667 1664 1672
+f 1667 1672 1676
+f 1667 1676 1675
+f 1666 1667 1675
+f 1666 1675 1674
+f 1665 1666 1674
+f 1687 1679 1680
+f 1677 1679 1687
+f 1674 1673 1685
+f 1674 1685 1684
+f 1685 1677 1687
+f 1673 1677 1685
+f 2183 2184 1693
+f 2183 1693 1694
+f 1683 2184 2183
+f 1684 1683 2183
+f 2184 2185 1691
+f 2184 1691 1693
+f 1682 2185 2184
+f 1683 1682 2184
+f 2185 2186 1692
+f 2185 1692 1691
+f 1682 1681 2186
+f 1682 2186 2185
+f 2187 1698 1692
+f 2187 2188 1698
+f 2189 2187 1692
+f 2190 2191 2192
+f 2193 2192 2189
+f 2193 2190 2192
+f 2194 2191 2190
+f 2186 2193 2189
+f 2195 2193 2186
+f 2196 2191 2194
+f 2197 2194 2195
+f 2197 2196 2194
+f 2197 2195 2186
+f 1688 2196 2198
+f 1688 2198 2199
+f 1681 2199 2197
+f 1681 2197 2186
+f 1681 1688 2199
+f 2191 1698 2188
+f 2191 2188 2192
+f 1688 2191 2196
+f 1692 2186 2189
+f 2191 1689 1690
+f 2191 1690 1698
+f 1688 1686 1689
+f 1688 1689 2191
+f 1695 1700 1702
+f 1694 1695 1702
+f 1697 1696 1699
+f 1697 1699 1705
+f 1695 1697 1705
+f 1695 1705 1700
+f 1706 1707 1708
+f 1706 1708 1715
+f 2200 1715 1709
+f 2201 2200 1709
+f 2202 1715 2200
+f 2203 2201 1709
+f 2204 2202 2203
+f 2204 2205 2202
+f 1706 2205 2206
+f 1701 2207 2204
+f 1701 2206 2207
+f 1701 1706 2206
+f 1706 1715 2205
+f 2205 1715 2202
+f 1709 1701 2203
+f 2203 1701 2204
+f 1704 1701 1709
+f 1704 1709 1713
+f 1703 1704 1713
+f 1703 1713 1712
+f 1702 1703 1712
+f 1702 1712 1711
+f 1724 1716 1717
+f 1714 1716 1724
+f 1711 1710 1722
+f 1711 1722 1721
+f 1722 1714 1724
+f 1710 1714 1722
+f 1851 1859 1860
+f 1852 1851 1860
+f 1835 1843 1842
+f 1836 1835 1842
+f 2208 1827 1826
+f 1819 1827 2208
+f 1817 1819 2208
+f 2209 1811 1812
+f 1803 1811 2209
+f 1801 1803 2209
+f 1796 1801 2209
+f 2210 1795 1796
+f 2211 2210 1796
+f 1786 2210 2211
+f 1787 1786 2211
+f 2212 1778 1777
+f 1770 1778 2212
+f 1768 1770 2212
+f 1763 1768 2212
+f 2213 1762 1763
+f 2214 2213 1763
+f 1753 2213 2214
+f 1754 1753 2214
+f 2215 1745 1744
+f 1737 1745 2215
+f 1735 1737 2215
+f 1720 1729 1730
+f 1721 1720 1730
+f 1860 2208 1852
+f 1852 2208 1842
+f 1842 2208 1836
+f 1836 2208 1826
+f 2208 2209 1817
+f 1817 2209 1812
+f 2209 2211 1796
+f 2211 2212 1777
+f 2211 1777 1787
+f 2212 2214 1763
+f 2214 2215 1744
+f 2214 1744 1754
+f 2215 1721 1730
+f 2215 1730 1735
+f 1719 1727 1729
+f 1720 1719 1729
+f 1718 1728 1727
+f 1719 1718 1727
+f 2216 1733 1728
+f 2217 2216 1728
+f 2218 2219 2220
+f 2218 2221 2219
+f 1725 2221 2222
+f 1718 2222 2223
+f 1718 1725 2222
+f 1725 1733 2216
+f 1725 2216 2219
+f 1725 2219 2221
+f 1728 1718 2223
+f 1728 2223 2218
+f 1728 2218 2220
+f 1728 2220 2217
+f 1725 1723 1726
+f 1725 1726 1733
+f 1732 1731 1734
+f 1732 1734 1739
+f 1730 1732 1739
+f 1730 1739 1735
+f 1740 1741 1742
+f 1740 1742 1748
+f 2224 1748 1743
+f 2224 2225 1748
+f 2226 1748 2225
+f 2227 2224 1743
+f 2228 2226 2227
+f 2228 2229 2226
+f 1740 2229 2230
+f 1736 2230 2231
+f 1736 1740 2230
+f 1740 1748 2226
+f 1740 2226 2229
+f 1743 1736 2231
+f 1743 2231 2228
+f 1743 2228 2227
+f 1736 1743 1746
+f 1738 1736 1746
+f 1738 1746 1745
+f 1737 1738 1745
+f 1756 1749 1750
+f 1747 1749 1756
+f 1754 1747 1756
+f 1744 1747 1754
+f 2213 2232 1760
+f 2213 1760 1762
+f 1752 2232 2213
+f 1753 1752 2213
+f 2232 2233 1761
+f 2232 1761 1760
+f 1751 2233 2232
+f 1752 1751 2232
+f 2234 1766 1761
+f 2234 2235 1766
+f 2236 2234 1761
+f 2237 2238 2239
+f 2240 2238 2236
+f 2240 2239 2238
+f 2241 2237 2239
+f 2233 2242 2240
+f 2233 2240 2236
+f 2243 2237 2241
+f 2244 2241 2242
+f 2244 2243 2241
+f 2244 2242 2233
+f 1757 2243 2245
+f 1751 2245 2246
+f 1751 2246 2244
+f 1751 2244 2233
+f 1751 1757 2245
+f 2237 1766 2235
+f 2237 2235 2238
+f 1757 2237 2243
+f 1761 2233 2236
+f 1758 1759 1766
+f 2237 1758 1766
+f 1755 1758 2237
+f 1757 1755 2237
+f 1765 1764 1767
+f 1765 1767 1772
+f 1763 1765 1772
+f 1763 1772 1768
+f 2247 1775 1781
+f 2248 2247 1781
+f 2249 1775 2247
+f 1774 1775 2249
+f 2250 2249 2251
+f 2250 1774 2249
+f 2252 2250 2251
+f 2253 1774 2250
+f 1773 2253 2254
+f 1773 1774 2253
+f 2255 2248 1781
+f 2255 1781 1776
+f 2256 2255 1776
+f 2257 2252 2251
+f 2257 2251 2256
+f 1773 2258 2259
+f 1769 2259 2257
+f 1769 1773 2259
+f 1776 1769 2257
+f 1776 2257 2256
+f 1773 2254 2258
+f 1771 1769 1776
+f 1771 1776 1779
+f 1770 1771 1779
+f 1770 1779 1778
+f 1780 1782 1783
+f 1780 1783 1789
+f 1777 1780 1789
+f 1777 1789 1787
+f 2260 1793 1795
+f 2210 2260 1795
+f 1785 2260 2210
+f 1786 1785 2210
+f 2260 2261 1794
+f 2260 1794 1793
+f 1785 1784 2261
+f 1785 2261 2260
+f 2262 2263 1799
+f 2262 1799 1794
+f 2264 2262 1794
+f 2265 2266 2267
+f 2265 2267 2264
+f 2261 2268 2269
+f 2261 2269 2265
+f 2261 2265 2264
+f 2270 2268 2261
+f 2271 2270 2261
+f 2272 2271 2261
+f 2273 2274 2275
+f 2273 2275 2272
+f 1790 2276 2277
+f 1784 2277 2273
+f 1784 2273 2272
+f 1784 2272 2261
+f 1784 1790 2277
+f 1794 2261 2264
+f 2278 1791 1799
+f 2263 2278 1799
+f 2279 1791 2278
+f 2280 2279 2267
+f 2266 2280 2267
+f 1792 1791 2279
+f 1792 2279 2280
+f 2281 1792 2280
+f 2282 2281 2268
+f 2282 1792 2281
+f 2270 2282 2268
+f 2283 1792 2282
+f 1788 1792 2283
+f 2284 2283 2275
+f 2284 1788 2283
+f 2274 2284 2275
+f 2285 1788 2284
+f 1790 2285 2276
+f 1790 1788 2285
+f 1805 1797 1800
+f 1798 1797 1805
+f 1801 1798 1805
+f 1796 1798 1801
+f 1806 1807 1808
+f 1806 1808 1815
+f 2286 1815 1810
+f 2286 2287 1815
+f 2288 2286 1810
+f 2289 2290 2288
+f 2289 2291 2290
+f 1806 2292 2293
+f 1802 2293 2289
+f 1802 1806 2293
+f 1806 1815 2291
+f 2291 1815 2287
+f 2291 2287 2290
+f 1806 2291 2292
+f 1810 1802 2288
+f 2288 1802 2289
+f 1804 1802 1810
+f 1804 1810 1809
+f 1804 1809 1811
+f 1803 1804 1811
+f 1821 1813 1816
+f 1814 1813 1821
+f 1817 1814 1821
+f 1812 1814 1817
+f 1822 1823 1824
+f 1822 1824 1830
+f 2294 1830 1825
+f 2294 2295 1830
+f 2296 1830 2295
+f 2297 2294 1825
+f 2298 2296 2297
+f 2298 2299 2296
+f 2300 2301 2302
+f 2300 2303 2301
+f 1822 2303 2304
+f 1822 2304 2305
+f 1818 2305 2300
+f 1818 2300 2302
+f 1818 1822 2305
+f 1822 1830 2303
+f 2303 1830 2299
+f 2299 1830 2296
+f 2303 2299 2301
+f 1825 1818 2297
+f 2297 1818 2298
+f 2298 1818 2302
+f 1820 1818 1825
+f 1820 1825 1828
+f 1820 1828 1827
+f 1819 1820 1827
+f 1838 1831 1832
+f 1829 1831 1838
+f 1836 1829 1838
+f 1826 1829 1836
+f 1834 1844 1843
+f 1835 1834 1843
+f 1834 1833 1841
+f 1834 1841 1844
+f 2306 1846 1841
+f 2307 2306 1841
+f 2308 2309 2310
+f 2308 2311 2309
+f 1839 2311 2312
+f 1833 2312 2313
+f 1833 2313 2308
+f 1833 1839 2312
+f 1839 1846 2311
+f 2311 1846 2309
+f 2309 1846 2306
+f 1841 1833 2310
+f 2310 1833 2308
+f 1841 2310 2307
+f 1837 1840 1846
+f 1839 1837 1846
+f 1854 1847 1848
+f 1845 1847 1854
+f 1852 1845 1854
+f 1842 1845 1852
+f 1850 1857 1859
+f 1851 1850 1859
+f 1850 1849 1858
+f 1850 1858 1857
+f 2314 1864 1858
+f 2315 2314 1858
+f 2316 1864 2314
+f 2317 2315 1858
+f 2318 2316 2317
+f 2318 2319 2316
+f 1855 2319 2320
+f 1849 2321 2318
+f 1849 2320 2321
+f 1849 1855 2320
+f 1855 1864 2319
+f 2319 1864 2316
+f 1858 1849 2317
+f 2317 1849 2318
+f 1853 1856 1864
+f 1855 1853 1864
+f 1861 1866 1868
+f 1860 1861 1868
+f 1863 1862 1865
+f 1863 1865 1871
+f 1861 1863 1871
+f 1861 1871 1866
+f 1873 1874 1882
+f 1872 1873 1882
+f 2322 1882 1876
+f 2322 2323 1882
+f 2324 2322 1876
+f 2325 2326 2324
+f 2325 2327 2326
+f 1872 2327 2328
+f 1867 2329 2325
+f 1867 2328 2329
+f 1867 1872 2328
+f 1872 1882 2323
+f 1872 2323 2326
+f 1872 2326 2327
+f 1876 1867 2324
+f 2324 1867 2325
+f 1870 1867 1876
+f 1870 1876 1875
+f 1869 1870 1875
+f 1869 1875 1877
+f 1868 1869 1877
+f 1868 1877 1878
+f 1879 1884 1886
+f 1878 1879 1886
+f 1881 1880 1883
+f 1881 1883 1889
+f 1879 1881 1889
+f 1879 1889 1884
+f 1891 1892 1899
+f 1890 1891 1899
+f 2330 1899 1893
+f 2330 2331 1899
+f 2332 2330 1893
+f 2333 2334 2332
+f 2333 2335 2334
+f 2336 2337 2338
+f 2336 2339 2337
+f 1890 2339 2340
+f 1885 2340 2341
+f 1885 2341 2336
+f 1885 1890 2340
+f 1890 1899 2331
+f 1890 2331 2334
+f 1890 2334 2335
+f 1890 2335 2337
+f 1890 2337 2339
+f 1893 1885 2336
+f 1893 2336 2338
+f 1893 2338 2333
+f 1893 2333 2332
+f 1888 1885 1893
+f 1888 1893 1897
+f 1887 1888 1897
+f 1887 1897 1896
+f 1886 1887 1896
+f 1886 1896 1895
+f 1898 1900 1901
+f 1898 1901 1908
+f 1894 1906 1905
+f 1895 1894 1905
+f 1894 1898 1908
+f 1894 1908 1906
+f 1905 1904 1914
+f 1905 1914 1913
+f 1904 1903 1915
+f 1904 1915 1914
+f 1903 1902 1911
+f 1903 1911 1915
+f 2342 1917 1911
+f 2342 2343 1917
+f 2344 2342 1911
+f 2345 2346 2344
+f 2345 2347 2346
+f 1909 2347 2348
+f 1909 2348 2349
+f 1902 2349 2345
+f 1902 1909 2349
+f 1909 1917 2343
+f 1909 2343 2346
+f 1909 2346 2347
+f 1911 1902 2345
+f 1911 2345 2344
+f 1907 1910 1917
+f 1909 1907 1917
+f 1916 1918 1919
+f 1916 1919 1926
+f 1912 1924 1923
+f 1913 1912 1923
+f 1912 1916 1926
+f 1912 1926 1924
+f 2350 2351 1932
+f 2350 1932 1933
+f 1923 1922 2351
+f 1923 2351 2350
+f 2351 2352 1930
+f 2351 1930 1932
+f 1922 1921 2352
+f 1922 2352 2351
+f 2352 2353 1931
+f 2352 1931 1930
+f 1921 1920 2353
+f 1921 2353 2352
+f 2354 2355 1937
+f 2354 1937 1931
+f 2356 2354 1931
+f 2357 2358 2359
+f 2357 2359 2356
+f 2357 2356 1931
+f 2353 2360 2361
+f 2353 2361 2357
+f 2362 2360 2353
+f 2363 2362 2353
+f 2364 2363 2353
+f 2365 2366 2364
+f 2365 2367 2366
+f 1927 2367 2368
+f 1927 2368 2369
+f 1920 2369 2365
+f 1920 2365 2364
+f 1920 2364 2353
+f 1920 1927 2369
+f 1931 2353 2357
+f 1927 2370 2367
+f 2367 2370 2366
+f 2371 1929 1937
+f 2355 2371 1937
+f 2372 1929 2371
+f 2373 1929 2372
+f 2358 2372 2359
+f 2358 2373 2372
+f 1928 1929 2373
+f 2374 1928 2373
+f 2375 1928 2374
+f 2362 2374 2360
+f 2362 2375 2374
+f 2376 1928 2375
+f 1925 1928 2376
+f 1927 2376 2370
+f 1927 1925 2376
+f 1933 1934 1939
+f 1933 1939 1941
+f 1944 1935 1938
+f 1936 1935 1944
+f 1939 1936 1944
+f 1934 1936 1939
+f 2377 1946 1947
+f 2377 1947 1954
+f 2378 2377 1954
+f 2379 1946 2377
+f 1945 2379 2380
+f 1945 1946 2379
+f 2381 1954 1948
+f 2381 2382 1954
+f 2383 2381 1948
+f 2384 2385 2383
+f 2384 2378 2385
+f 1945 2386 2387
+f 1940 2387 2384
+f 1940 1945 2387
+f 2378 1954 2382
+f 2378 2382 2385
+f 1948 1940 2383
+f 2383 1940 2384
+f 1945 2380 2386
+f 1943 1940 1948
+f 1943 1948 1952
+f 1943 1952 1951
+f 1942 1943 1951
+f 1942 1951 1950
+f 1941 1942 1950
+f 1963 1955 1956
+f 1953 1955 1963
+f 1950 1949 1961
+f 1950 1961 1960
+f 1961 1953 1963
+f 1949 1953 1961
+f 2388 2389 1969
+f 2388 1969 1970
+f 1959 2389 2388
+f 1960 1959 2388
+f 2389 2390 1967
+f 2389 1967 1969
+f 1958 2390 2389
+f 1959 1958 2389
+f 2390 2391 1968
+f 2390 1968 1967
+f 1958 1957 2391
+f 1958 2391 2390
+f 2392 1974 1968
+f 2392 2393 1974
+f 2394 2392 1968
+f 2395 2396 2397
+f 2398 2397 2394
+f 2398 2395 2397
+f 2399 2396 2395
+f 2391 2398 2394
+f 2400 2398 2391
+f 2401 2396 2399
+f 2402 2399 2400
+f 2402 2401 2399
+f 2402 2400 2391
+f 1964 2401 2403
+f 1964 2403 2404
+f 1957 2404 2402
+f 1957 2402 2391
+f 1957 1964 2404
+f 2396 1974 2393
+f 2396 2393 2397
+f 1964 2396 2401
+f 1968 2391 2394
+f 1965 1966 1974
+f 2396 1965 1974
+f 1962 1965 2396
+f 1964 1962 2396
+f 1971 1976 1978
+f 1970 1971 1978
+f 1973 1972 1975
+f 1973 1975 1981
+f 1971 1973 1981
+f 1971 1981 1976
+f 1983 1984 1991
+f 1982 1983 1991
+f 2405 1991 1985
+f 2406 2405 1985
+f 2407 1991 2405
+f 2408 2406 1985
+f 2409 2407 2408
+f 2409 2410 2407
+f 1982 2410 2411
+f 1977 2412 2409
+f 1977 2411 2412
+f 1977 1982 2411
+f 1982 1991 2410
+f 2410 1991 2407
+f 1985 1977 2408
+f 2408 1977 2409
+f 1977 1985 1989
+f 1980 1977 1989
+f 1979 1980 1989
+f 1979 1989 1988
+f 1978 1979 1988
+f 1978 1988 1987
+f 2000 1992 1993
+f 1990 1992 2000
+f 1987 1986 1998
+f 1987 1998 1997
+f 1998 1990 2000
+f 1986 1990 1998
+f 1996 2012 2011
+f 1997 1996 2011
+f 1995 2013 2012
+f 1996 1995 2012
+f 1995 1994 2014
+f 1995 2014 2013
+f 2413 2002 2014
+f 2414 2413 2014
+f 2001 2413 2415
+f 1994 2415 2416
+f 1994 2001 2415
+f 2001 2002 2413
+f 2014 1994 2416
+f 2014 2416 2414
+f 2001 1999 1449
+f 2001 1449 2002
+f 1997 2011 2417
+f 1987 1997 2417
+f 2418 1970 1978
+f 2418 1978 1987
+f 2418 1987 2417
+f 2419 2388 1970
+f 2419 1970 2418
+f 1960 2388 2419
+f 2420 1950 1960
+f 2420 1960 2419
+f 1941 1950 2420
+f 2421 1941 2420
+f 2421 1933 1941
+f 2350 1933 2421
+f 2422 2350 2421
+f 1923 2350 2422
+f 2423 1923 2422
+f 2423 1913 1923
+f 1905 1913 2423
+f 1895 1905 2423
+f 2424 1895 2423
+f 1886 1895 2424
+f 1878 1886 2424
+f 2425 1860 1868
+f 2425 1878 2424
+f 2425 1868 1878
+f 2426 1860 2425
+f 2208 1860 2426
+f 2427 2208 2426
+f 2209 2208 2427
+f 2428 2209 2427
+f 2211 2209 2428
+f 2429 2211 2428
+f 2212 2211 2429
+f 2430 2212 2429
+f 2214 2212 2430
+f 2431 2214 2430
+f 2215 2214 2431
+f 2432 2215 2431
+f 1721 2215 2432
+f 2433 1702 1711
+f 2433 1711 1721
+f 2433 1721 2432
+f 1694 1702 2433
+f 2434 2183 1694
+f 2434 1694 2433
+f 1684 2183 2434
+f 2435 1674 1684
+f 2435 1684 2434
+f 1665 1674 2435
+f 2436 1657 1665
+f 2436 1665 2435
+f 2145 1657 2436
+f 2437 2145 2436
+f 1647 2145 2437
+f 2438 1637 1647
+f 2438 1647 2437
+f 1629 1637 2438
+f 2439 1619 1629
+f 2439 1629 2438
+f 1610 1619 2439
+f 2440 1610 2439
+f 2440 1602 1610
+f 1592 1602 2440
+f 1584 1592 2440
+f 2441 1584 2440
+f 2003 1584 2441
+f 2442 2003 2441
+f 2443 2004 2003
+f 2443 2003 2442
+f 2444 2005 2004
+f 2444 2004 2443
+f 2445 2007 2005
+f 2445 2005 2444
+f 2446 2008 2007
+f 2446 2007 2445
+f 2447 2010 2008
+f 2447 2008 2446
+f 2448 2010 2447
+f 2011 2010 2448
+f 2417 2011 2448
+f 2015 2016 2449
+f 2449 2016 2450
+f 2016 2451 2450
+f 2016 2018 2451
+f 2018 2017 2451
+f 2451 2017 2452
+f 2017 2015 2452
+f 2452 2015 2449
+f 2020 2019 2453
+f 2453 2019 2454
+f 2019 2022 2454
+f 2454 2022 2455
+f 2022 2021 2455
+f 2455 2021 2456
+f 2021 2020 2456
+f 2456 2020 2453
+f 2024 2023 2457
+f 2457 2023 2458
+f 2023 2026 2458
+f 2458 2026 2459
+f 2026 2025 2459
+f 2459 2025 2460
+f 2025 2024 2460
+f 2460 2024 2457
+f 2030 2029 2461
+f 2461 2029 2462
+f 2029 2031 2462
+f 2462 2031 2463
+f 2031 2033 2463
+f 2463 2033 2464
+f 2033 2030 2464
+f 2464 2030 2461
+f 2034 2035 2465
+f 2465 2035 2466
+f 2035 2037 2466
+f 2466 2037 2467
+f 2037 2036 2467
+f 2467 2036 2468
+f 2036 2034 2468
+f 2468 2034 2465
+f 2038 2039 2469
+f 2469 2039 2470
+f 2039 2041 2470
+f 2470 2041 2471
+f 2041 2040 2471
+f 2471 2040 2472
+f 2040 2038 2472
+f 2472 2038 2469
+f 2053 2049 2473
+f 2473 2049 2474
+f 2048 2475 2049
+f 2049 2475 2474
+f 2475 2048 2045
+f 2474 2475 2047
+f 2475 2045 2047
+f 2047 2476 2474
+f 2047 2052 2476
+f 2051 2046 2477
+f 2477 2046 2478
+f 2044 2479 2046
+f 2046 2479 2478
+f 2479 2044 2480
+f 2480 2044 2042
+f 2480 2043 2481
+f 2480 2042 2043
+f 2043 2482 2481
+f 2043 2050 2482
+f 2050 2051 2482
+f 2482 2051 2477
+f 2052 2054 2476
+f 2476 2054 2483
+f 2054 2053 2483
+f 2483 2053 2473
+f 2484 2058 2485
+f 2484 2073 2058
+f 2058 2486 2485
+f 2058 2057 2486
+f 2057 2487 2486
+f 2057 2059 2487
+f 2059 2062 2487
+f 2487 2062 2488
+f 2074 2489 2062
+f 2062 2489 2488
+f 2490 2061 2491
+f 2490 2075 2061
+f 2061 2492 2491
+f 2061 2060 2492
+f 2060 2493 2492
+f 2060 2064 2493
+f 2064 2063 2493
+f 2493 2063 2494
+f 2076 2495 2063
+f 2063 2495 2494
+f 2496 2065 2497
+f 2496 2077 2065
+f 2065 2498 2497
+f 2065 2066 2498
+f 2066 2067 2498
+f 2498 2067 2499
+f 2067 2070 2499
+f 2499 2070 2500
+f 2078 2501 2070
+f 2070 2501 2500
+f 2502 2069 2503
+f 2502 2079 2069
+f 2069 2504 2503
+f 2069 2068 2504
+f 2068 2072 2504
+f 2504 2072 2505
+f 2072 2071 2505
+f 2505 2071 2506
+f 2080 2507 2071
+f 2071 2507 2506
+f 2507 2080 2502
+f 2502 2080 2079
+f 2501 2078 2496
+f 2496 2078 2077
+f 2495 2076 2490
+f 2490 2076 2075
+f 2489 2074 2484
+f 2484 2074 2073
+f 2082 2081 2508
+f 2508 2081 2509
+f 2081 2083 2509
+f 2509 2083 2510
+f 2083 2085 2510
+f 2510 2085 2511
+f 2085 2082 2511
+f 2511 2082 2508
+f 2086 2084 2512
+f 2512 2084 2513
+f 2084 2514 2513
+f 2084 2088 2514
+f 2088 2087 2514
+f 2514 2087 2515
+f 2087 2086 2515
+f 2515 2086 2512
+f 2090 2089 2516
+f 2516 2089 2517
+f 2089 2092 2517
+f 2517 2092 2518
+f 2092 2091 2518
+f 2518 2091 2519
+f 2091 2090 2519
+f 2519 2090 2516
+f 2098 2095 2520
+f 2520 2095 2521
+f 2095 2100 2521
+f 2521 2100 2522
+f 2100 2099 2522
+f 2522 2099 2523
+f 2099 2098 2523
+f 2523 2098 2520
+f 2094 2093 2524
+f 2524 2093 2525
+f 2093 2526 2525
+f 2093 2097 2526
+f 2097 2096 2526
+f 2526 2096 2527
+f 2096 2094 2527
+f 2527 2094 2524
+f 2101 2102 2528
+f 2528 2102 2529
+f 2102 2105 2529
+f 2529 2105 2530
+f 2105 2104 2530
+f 2530 2104 2531
+f 2104 2101 2531
+f 2531 2101 2528
+f 2106 2103 2532
+f 2532 2103 2533
+f 2103 2108 2533
+f 2533 2108 2534
+f 2108 2107 2534
+f 2534 2107 2535
+f 2107 2532 2535
+f 2107 2106 2532
+f 2109 2110 2536
+f 2536 2110 2537
+f 2110 2112 2537
+f 2537 2112 2538
+f 2112 2111 2538
+f 2538 2111 2539
+f 2111 2536 2539
+f 2111 2109 2536
+f 2114 2113 2540
+f 2540 2113 2541
+f 2113 2542 2541
+f 2113 2116 2542
+f 2116 2115 2542
+f 2542 2115 2543
+f 2115 2114 2543
+f 2543 2114 2540
+f 2118 2117 2544
+f 2544 2117 2545
+f 2117 2119 2545
+f 2545 2119 2546
+f 2119 2121 2546
+f 2546 2121 2547
+f 2121 2118 2547
+f 2547 2118 2544
+f 2122 2120 2548
+f 2548 2120 2549
+f 2120 2124 2549
+f 2549 2124 2550
+f 2124 2123 2550
+f 2550 2123 2551
+f 2123 2122 2551
+f 2551 2122 2548
+f 2126 2125 2552
+f 2552 2125 2553
+f 2125 2127 2553
+f 2553 2127 2554
+f 2127 2129 2554
+f 2554 2129 2555
+f 2129 2552 2555
+f 2129 2126 2552
+f 2130 2128 2556
+f 2556 2128 2557
+f 2128 2133 2557
+f 2557 2133 2558
+f 2133 2132 2558
+f 2558 2132 2559
+f 2132 2130 2559
+f 2559 2130 2556
+f 2134 2131 2560
+f 2560 2131 2561
+f 2131 2136 2561
+f 2561 2136 2562
+f 2136 2135 2562
+f 2562 2135 2563
+f 2135 2134 2563
+f 2563 2134 2560
+f 2138 2137 2564
+f 2564 2137 2565
+f 2137 2566 2565
+f 2137 2139 2566
+f 2139 2141 2566
+f 2566 2141 2567
+f 2141 2138 2567
+f 2567 2138 2564
+f 2142 2140 2568
+f 2568 2140 2569
+f 2140 2144 2569
+f 2569 2144 2570
+f 2144 2143 2570
+f 2570 2143 2571
+f 2143 2142 2571
+f 2571 2142 2568
+f 2572 2150 2573
+f 2572 2166 2150
+f 2150 2574 2573
+f 2150 2149 2574
+f 2149 2151 2574
+f 2574 2151 2575
+f 2151 2154 2575
+f 2575 2154 2576
+f 2167 2577 2154
+f 2154 2577 2576
+f 2578 2153 2579
+f 2578 2168 2153
+f 2153 2580 2579
+f 2153 2152 2580
+f 2152 2581 2580
+f 2152 2156 2581
+f 2156 2155 2581
+f 2581 2155 2582
+f 2169 2583 2155
+f 2155 2583 2582
+f 2584 2157 2585
+f 2584 2170 2157
+f 2157 2586 2585
+f 2157 2158 2586
+f 2158 2159 2586
+f 2586 2159 2587
+f 2159 2161 2587
+f 2587 2161 2588
+f 2161 2165 2588
+f 2165 2585 2588
+f 2171 2584 2165
+f 2165 2584 2585
+f 2163 2589 2590
+f 2163 2162 2589
+f 2162 2160 2589
+f 2589 2160 2591
+f 2160 2164 2591
+f 2591 2164 2592
+f 2164 2163 2592
+f 2592 2163 2590
+f 2584 2171 2170
+f 2583 2169 2578
+f 2578 2169 2168
+f 2577 2167 2572
+f 2572 2167 2166
+f 2181 2175 2593
+f 2593 2175 2594
+f 2174 2595 2175
+f 2175 2595 2594
+f 2595 2174 2172
+f 2595 2172 2173
+f 2173 2596 2594
+f 2173 2179 2596
+f 2594 2595 2173
+f 2179 2182 2596
+f 2596 2182 2597
+f 2182 2181 2597
+f 2597 2181 2593
+f 2177 2176 2598
+f 2598 2176 2599
+f 2176 2178 2599
+f 2599 2178 2600
+f 2178 2180 2600
+f 2600 2180 2601
+f 2180 2177 2601
+f 2601 2177 2598
+f 2190 2193 2602
+f 2602 2193 2603
+f 2193 2604 2603
+f 2193 2195 2604
+f 2195 2194 2604
+f 2604 2194 2605
+f 2194 2190 2605
+f 2605 2190 2602
+f 2188 2187 2606
+f 2606 2187 2607
+f 2187 2189 2607
+f 2607 2189 2608
+f 2189 2609 2608
+f 2189 2192 2609
+f 2192 2188 2609
+f 2609 2188 2606
+f 2196 2197 2610
+f 2610 2197 2611
+f 2197 2199 2611
+f 2611 2199 2612
+f 2199 2198 2612
+f 2612 2198 2613
+f 2198 2196 2613
+f 2613 2196 2610
+f 2200 2201 2614
+f 2614 2201 2615
+f 2201 2203 2615
+f 2615 2203 2616
+f 2203 2202 2616
+f 2616 2202 2617
+f 2202 2614 2617
+f 2202 2200 2614
+f 2205 2204 2618
+f 2618 2204 2619
+f 2204 2207 2619
+f 2619 2207 2620
+f 2207 2206 2620
+f 2620 2206 2621
+f 2206 2618 2621
+f 2206 2205 2618
+f 2216 2217 2622
+f 2622 2217 2623
+f 2217 2220 2623
+f 2623 2220 2624
+f 2220 2219 2624
+f 2624 2219 2625
+f 2219 2622 2625
+f 2219 2216 2622
+f 2221 2218 2626
+f 2626 2218 2627
+f 2218 2628 2627
+f 2218 2223 2628
+f 2223 2222 2628
+f 2628 2222 2629
+f 2222 2221 2629
+f 2629 2221 2626
+f 2225 2224 2630
+f 2630 2224 2631
+f 2224 2632 2631
+f 2224 2227 2632
+f 2227 2226 2632
+f 2632 2226 2633
+f 2226 2225 2633
+f 2633 2225 2630
+f 2229 2228 2634
+f 2634 2228 2635
+f 2228 2636 2635
+f 2228 2231 2636
+f 2231 2230 2636
+f 2636 2230 2637
+f 2230 2229 2637
+f 2637 2229 2634
+f 2235 2234 2638
+f 2638 2234 2639
+f 2234 2236 2639
+f 2639 2236 2640
+f 2236 2238 2640
+f 2640 2238 2641
+f 2238 2235 2641
+f 2641 2235 2638
+f 2239 2240 2642
+f 2642 2240 2643
+f 2240 2242 2643
+f 2643 2242 2644
+f 2242 2241 2644
+f 2644 2241 2645
+f 2241 2239 2645
+f 2645 2239 2642
+f 2243 2244 2646
+f 2646 2244 2647
+f 2244 2246 2647
+f 2647 2246 2648
+f 2246 2245 2648
+f 2648 2245 2649
+f 2245 2243 2649
+f 2649 2243 2646
+f 2258 2254 2650
+f 2650 2254 2651
+f 2253 2652 2254
+f 2254 2652 2651
+f 2652 2253 2250
+f 2651 2652 2252
+f 2652 2250 2252
+f 2252 2653 2651
+f 2252 2257 2653
+f 2256 2251 2654
+f 2654 2251 2655
+f 2249 2656 2251
+f 2251 2656 2655
+f 2656 2249 2657
+f 2657 2249 2247
+f 2657 2248 2658
+f 2657 2247 2248
+f 2248 2659 2658
+f 2248 2255 2659
+f 2255 2256 2659
+f 2659 2256 2654
+f 2257 2259 2653
+f 2653 2259 2660
+f 2259 2258 2660
+f 2660 2258 2650
+f 2661 2263 2662
+f 2661 2278 2263
+f 2263 2663 2662
+f 2263 2262 2663
+f 2262 2264 2663
+f 2663 2264 2664
+f 2264 2267 2664
+f 2664 2267 2665
+f 2279 2666 2267
+f 2267 2666 2665
+f 2667 2266 2668
+f 2667 2280 2266
+f 2266 2669 2668
+f 2266 2265 2669
+f 2265 2269 2669
+f 2669 2269 2670
+f 2269 2268 2670
+f 2670 2268 2671
+f 2281 2672 2268
+f 2268 2672 2671
+f 2673 2270 2674
+f 2673 2282 2270
+f 2270 2675 2674
+f 2270 2271 2675
+f 2271 2272 2675
+f 2675 2272 2676
+f 2272 2275 2676
+f 2676 2275 2677
+f 2283 2678 2275
+f 2275 2678 2677
+f 2679 2274 2680
+f 2679 2284 2274
+f 2274 2681 2680
+f 2274 2273 2681
+f 2273 2277 2681
+f 2681 2277 2682
+f 2277 2276 2682
+f 2682 2276 2683
+f 2285 2684 2276
+f 2276 2684 2683
+f 2684 2285 2679
+f 2679 2285 2284
+f 2678 2283 2673
+f 2673 2283 2282
+f 2672 2281 2667
+f 2667 2281 2280
+f 2666 2279 2661
+f 2661 2279 2278
+f 2287 2286 2685
+f 2685 2286 2686
+f 2286 2288 2686
+f 2686 2288 2687
+f 2288 2290 2687
+f 2687 2290 2688
+f 2290 2287 2688
+f 2688 2287 2685
+f 2291 2289 2689
+f 2689 2289 2690
+f 2289 2691 2690
+f 2289 2293 2691
+f 2293 2292 2691
+f 2691 2292 2692
+f 2292 2291 2692
+f 2692 2291 2689
+f 2295 2294 2693
+f 2693 2294 2694
+f 2294 2297 2694
+f 2694 2297 2695
+f 2297 2296 2695
+f 2695 2296 2696
+f 2296 2693 2696
+f 2296 2295 2693
+f 2303 2300 2697
+f 2697 2300 2698
+f 2300 2305 2698
+f 2698 2305 2699
+f 2305 2304 2699
+f 2699 2304 2700
+f 2304 2303 2700
+f 2700 2303 2697
+f 2299 2298 2701
+f 2701 2298 2702
+f 2298 2703 2702
+f 2298 2302 2703
+f 2302 2301 2703
+f 2703 2301 2704
+f 2301 2299 2704
+f 2704 2299 2701
+f 2306 2307 2705
+f 2705 2307 2706
+f 2307 2310 2706
+f 2706 2310 2707
+f 2310 2309 2707
+f 2707 2309 2708
+f 2309 2705 2708
+f 2309 2306 2705
+f 2311 2308 2709
+f 2709 2308 2710
+f 2308 2711 2710
+f 2308 2313 2711
+f 2313 2312 2711
+f 2711 2312 2712
+f 2312 2311 2712
+f 2712 2311 2709
+f 2314 2315 2713
+f 2713 2315 2714
+f 2315 2715 2714
+f 2315 2317 2715
+f 2317 2316 2715
+f 2715 2316 2716
+f 2316 2314 2716
+f 2716 2314 2713
+f 2319 2318 2717
+f 2717 2318 2718
+f 2318 2719 2718
+f 2318 2321 2719
+f 2321 2320 2719
+f 2719 2320 2720
+f 2320 2319 2720
+f 2720 2319 2717
+f 2323 2322 2721
+f 2721 2322 2722
+f 2322 2324 2722
+f 2722 2324 2723
+f 2324 2326 2723
+f 2723 2326 2724
+f 2326 2323 2724
+f 2724 2323 2721
+f 2327 2325 2725
+f 2725 2325 2726
+f 2325 2329 2726
+f 2726 2329 2727
+f 2329 2328 2727
+f 2727 2328 2728
+f 2328 2725 2728
+f 2328 2327 2725
+f 2331 2330 2729
+f 2729 2330 2730
+f 2330 2731 2730
+f 2330 2332 2731
+f 2332 2334 2731
+f 2731 2334 2732
+f 2334 2331 2732
+f 2732 2331 2729
+f 2335 2333 2733
+f 2733 2333 2734
+f 2333 2338 2734
+f 2734 2338 2735
+f 2338 2337 2735
+f 2735 2337 2736
+f 2337 2335 2736
+f 2736 2335 2733
+f 2339 2336 2737
+f 2737 2336 2738
+f 2336 2341 2738
+f 2738 2341 2739
+f 2341 2340 2739
+f 2739 2340 2740
+f 2340 2339 2740
+f 2740 2339 2737
+f 2343 2342 2741
+f 2741 2342 2742
+f 2342 2344 2742
+f 2742 2344 2743
+f 2344 2346 2743
+f 2743 2346 2744
+f 2346 2741 2744
+f 2346 2343 2741
+f 2347 2345 2745
+f 2745 2345 2746
+f 2345 2349 2746
+f 2746 2349 2747
+f 2349 2348 2747
+f 2747 2348 2748
+f 2348 2745 2748
+f 2348 2347 2745
+f 2749 2355 2750
+f 2749 2371 2355
+f 2355 2751 2750
+f 2355 2354 2751
+f 2354 2356 2751
+f 2751 2356 2752
+f 2356 2359 2752
+f 2752 2359 2753
+f 2372 2754 2359
+f 2359 2754 2753
+f 2755 2358 2756
+f 2755 2373 2358
+f 2358 2757 2756
+f 2358 2357 2757
+f 2357 2361 2757
+f 2757 2361 2758
+f 2361 2360 2758
+f 2758 2360 2759
+f 2374 2760 2360
+f 2360 2760 2759
+f 2761 2362 2762
+f 2761 2375 2362
+f 2362 2763 2762
+f 2362 2363 2763
+f 2363 2364 2763
+f 2763 2364 2764
+f 2364 2366 2764
+f 2764 2366 2765
+f 2366 2370 2765
+f 2370 2762 2765
+f 2376 2761 2370
+f 2370 2761 2762
+f 2368 2367 2766
+f 2766 2367 2767
+f 2367 2365 2767
+f 2767 2365 2768
+f 2365 2769 2768
+f 2365 2369 2769
+f 2369 2368 2769
+f 2769 2368 2766
+f 2761 2376 2375
+f 2760 2374 2755
+f 2755 2374 2373
+f 2754 2372 2749
+f 2749 2372 2371
+f 2386 2380 2770
+f 2770 2380 2771
+f 2379 2772 2380
+f 2380 2772 2771
+f 2772 2379 2377
+f 2772 2377 2378
+f 2378 2773 2771
+f 2378 2384 2773
+f 2771 2772 2378
+f 2384 2387 2773
+f 2773 2387 2774
+f 2387 2386 2774
+f 2774 2386 2770
+f 2382 2381 2775
+f 2775 2381 2776
+f 2381 2383 2776
+f 2776 2383 2777
+f 2383 2385 2777
+f 2777 2385 2778
+f 2385 2382 2778
+f 2778 2382 2775
+f 2395 2398 2779
+f 2779 2398 2780
+f 2398 2400 2780
+f 2780 2400 2781
+f 2400 2399 2781
+f 2781 2399 2782
+f 2399 2395 2782
+f 2782 2395 2779
+f 2393 2392 2783
+f 2783 2392 2784
+f 2392 2394 2784
+f 2784 2394 2785
+f 2394 2397 2785
+f 2785 2397 2786
+f 2397 2783 2786
+f 2397 2393 2783
+f 2401 2402 2787
+f 2787 2402 2788
+f 2402 2404 2788
+f 2788 2404 2789
+f 2404 2403 2789
+f 2789 2403 2790
+f 2403 2401 2790
+f 2790 2401 2787
+f 2405 2406 2791
+f 2791 2406 2792
+f 2406 2793 2792
+f 2406 2408 2793
+f 2408 2407 2793
+f 2793 2407 2794
+f 2407 2405 2794
+f 2794 2405 2791
+f 2410 2409 2795
+f 2795 2409 2796
+f 2409 2412 2796
+f 2796 2412 2797
+f 2412 2411 2797
+f 2797 2411 2798
+f 2411 2795 2798
+f 2411 2410 2795
+f 2413 2414 2799
+f 2799 2414 2800
+f 2414 2801 2800
+f 2414 2416 2801
+f 2416 2415 2801
+f 2801 2415 2802
+f 2415 2413 2802
+f 2802 2413 2799
+f 2418 2417 2803
+f 2804 2418 2803
+f 2419 2418 2804
+f 2805 2419 2804
+f 2420 2419 2805
+f 2806 2420 2805
+f 2421 2420 2806
+f 2807 2421 2806
+f 2422 2421 2807
+f 2808 2422 2807
+f 2423 2422 2808
+f 2809 2423 2808
+f 2424 2423 2809
+f 2810 2424 2809
+f 2425 2424 2810
+f 2811 2425 2810
+f 2426 2425 2811
+f 2812 2426 2811
+f 2427 2426 2812
+f 2813 2427 2812
+f 2428 2427 2813
+f 2814 2428 2813
+f 2815 2428 2814
+f 2429 2428 2815
+f 2816 2429 2815
+f 2430 2429 2816
+f 2817 2430 2816
+f 2431 2430 2817
+f 2818 2431 2817
+f 2432 2431 2818
+f 2819 2432 2818
+f 2433 2432 2819
+f 2820 2433 2819
+f 2434 2433 2820
+f 2821 2434 2820
+f 2435 2434 2821
+f 2822 2435 2821
+f 2436 2435 2822
+f 2823 2436 2822
+f 2437 2436 2823
+f 2824 2437 2823
+f 2438 2437 2824
+f 2825 2438 2824
+f 2439 2438 2825
+f 2826 2439 2825
+f 2440 2439 2826
+f 2827 2440 2826
+f 2441 2440 2827
+f 2828 2441 2827
+f 2442 2441 2828
+f 2443 2442 2828
+f 2829 2443 2828
+f 2444 2443 2829
+f 2830 2444 2829
+f 2445 2444 2830
+f 2831 2445 2830
+f 2446 2445 2831
+f 2832 2446 2831
+f 2447 2446 2832
+f 2833 2447 2832
+f 2448 2447 2833
+f 2803 2417 2448
+f 2803 2448 2833
+f 2834 2449 2835
+f 2836 2835 2449
+f 2450 2836 2449
+f 2452 2449 2834
+f 2837 2452 2834
+f 2838 2836 2450
+f 2451 2839 2838
+f 2451 2838 2450
+f 2451 2452 2837
+f 2451 2837 2839
+f 2840 2453 2841
+f 2842 2841 2453
+f 2454 2842 2453
+f 2456 2453 2840
+f 2843 2456 2840
+f 2844 2842 2454
+f 2455 2845 2844
+f 2455 2844 2454
+f 2455 2456 2843
+f 2455 2843 2845
+f 2846 2457 2847
+f 2848 2847 2457
+f 2458 2848 2457
+f 2460 2457 2846
+f 2849 2460 2846
+f 2850 2848 2458
+f 2459 2851 2850
+f 2459 2850 2458
+f 2459 2460 2849
+f 2459 2849 2851
+f 2852 2461 2853
+f 2854 2853 2461
+f 2462 2854 2461
+f 2464 2461 2852
+f 2855 2464 2852
+f 2856 2854 2462
+f 2463 2857 2856
+f 2463 2856 2462
+f 2463 2464 2855
+f 2463 2855 2857
+f 2858 2465 2859
+f 2860 2859 2465
+f 2466 2860 2465
+f 2468 2465 2858
+f 2861 2468 2858
+f 2862 2860 2466
+f 2467 2863 2862
+f 2467 2862 2466
+f 2467 2468 2861
+f 2467 2861 2863
+f 2864 2469 2865
+f 2866 2865 2469
+f 2470 2866 2469
+f 2472 2469 2864
+f 2867 2472 2864
+f 2868 2866 2470
+f 2471 2869 2868
+f 2471 2868 2470
+f 2471 2472 2867
+f 2471 2867 2869
+f 2870 2474 2871
+f 2872 2871 2474
+f 2476 2872 2474
+f 2473 2474 2870
+f 2873 2473 2870
+f 2874 2872 2476
+f 2483 2875 2874
+f 2483 2874 2476
+f 2483 2473 2873
+f 2483 2873 2875
+f 2479 2480 2478
+f 2478 2480 2481
+f 2876 2481 2877
+f 2878 2877 2481
+f 2482 2878 2481
+f 2478 2481 2876
+f 2879 2478 2876
+f 2880 2878 2482
+f 2477 2881 2880
+f 2477 2880 2482
+f 2477 2478 2879
+f 2477 2879 2881
+f 2882 2485 2883
+f 2884 2883 2485
+f 2486 2884 2485
+f 2488 2485 2882
+f 2885 2488 2882
+f 2886 2884 2486
+f 2487 2887 2886
+f 2487 2886 2486
+f 2487 2488 2885
+f 2487 2885 2887
+f 2489 2484 2488
+f 2488 2484 2485
+f 2888 2491 2889
+f 2890 2889 2491
+f 2492 2890 2491
+f 2494 2491 2888
+f 2891 2494 2888
+f 2892 2890 2492
+f 2493 2893 2892
+f 2493 2892 2492
+f 2493 2494 2891
+f 2493 2891 2893
+f 2495 2490 2494
+f 2494 2490 2491
+f 2894 2497 2895
+f 2896 2895 2497
+f 2498 2896 2497
+f 2500 2497 2894
+f 2897 2500 2894
+f 2898 2896 2498
+f 2499 2899 2898
+f 2499 2898 2498
+f 2499 2500 2897
+f 2499 2897 2899
+f 2501 2496 2500
+f 2500 2496 2497
+f 2900 2503 2901
+f 2902 2901 2503
+f 2504 2902 2503
+f 2506 2503 2900
+f 2903 2506 2900
+f 2904 2902 2504
+f 2505 2905 2904
+f 2505 2904 2504
+f 2505 2506 2903
+f 2505 2903 2905
+f 2507 2502 2506
+f 2506 2502 2503
+f 2906 2508 2907
+f 2908 2907 2508
+f 2509 2908 2508
+f 2511 2508 2906
+f 2909 2511 2906
+f 2910 2908 2509
+f 2510 2911 2910
+f 2510 2910 2509
+f 2510 2511 2909
+f 2510 2909 2911
+f 2912 2512 2913
+f 2914 2913 2512
+f 2513 2914 2512
+f 2515 2512 2912
+f 2915 2515 2912
+f 2916 2914 2513
+f 2514 2917 2916
+f 2514 2916 2513
+f 2514 2515 2915
+f 2514 2915 2917
+f 2918 2516 2919
+f 2920 2919 2516
+f 2517 2920 2516
+f 2519 2516 2918
+f 2921 2519 2918
+f 2922 2920 2517
+f 2518 2923 2922
+f 2518 2922 2517
+f 2518 2519 2921
+f 2518 2921 2923
+f 2924 2520 2925
+f 2926 2925 2520
+f 2521 2926 2520
+f 2523 2520 2924
+f 2927 2523 2924
+f 2928 2926 2521
+f 2522 2929 2928
+f 2522 2928 2521
+f 2522 2523 2927
+f 2522 2927 2929
+f 2930 2524 2931
+f 2932 2931 2524
+f 2525 2932 2524
+f 2527 2524 2930
+f 2933 2527 2930
+f 2934 2932 2525
+f 2526 2935 2934
+f 2526 2934 2525
+f 2526 2527 2933
+f 2526 2933 2935
+f 2936 2528 2937
+f 2938 2937 2528
+f 2529 2938 2528
+f 2531 2528 2936
+f 2939 2531 2936
+f 2940 2938 2529
+f 2530 2941 2940
+f 2530 2940 2529
+f 2530 2531 2939
+f 2530 2939 2941
+f 2942 2532 2943
+f 2944 2943 2532
+f 2533 2944 2532
+f 2535 2532 2942
+f 2945 2535 2942
+f 2946 2944 2533
+f 2534 2947 2946
+f 2534 2946 2533
+f 2534 2535 2945
+f 2534 2945 2947
+f 2948 2536 2949
+f 2950 2949 2536
+f 2537 2950 2536
+f 2539 2536 2948
+f 2951 2539 2948
+f 2952 2950 2537
+f 2538 2953 2952
+f 2538 2952 2537
+f 2538 2539 2951
+f 2538 2951 2953
+f 2954 2540 2955
+f 2956 2955 2540
+f 2541 2956 2540
+f 2543 2540 2954
+f 2957 2543 2954
+f 2958 2956 2541
+f 2542 2959 2958
+f 2542 2958 2541
+f 2542 2543 2957
+f 2542 2957 2959
+f 2960 2544 2961
+f 2962 2961 2544
+f 2545 2962 2544
+f 2547 2544 2960
+f 2963 2547 2960
+f 2964 2962 2545
+f 2546 2965 2964
+f 2546 2964 2545
+f 2546 2547 2963
+f 2546 2963 2965
+f 2966 2548 2967
+f 2968 2967 2548
+f 2549 2968 2548
+f 2551 2548 2966
+f 2969 2551 2966
+f 2970 2968 2549
+f 2550 2971 2970
+f 2550 2970 2549
+f 2550 2551 2969
+f 2550 2969 2971
+f 2972 2552 2973
+f 2974 2973 2552
+f 2553 2974 2552
+f 2555 2552 2972
+f 2975 2555 2972
+f 2976 2974 2553
+f 2554 2977 2976
+f 2554 2976 2553
+f 2554 2555 2975
+f 2554 2975 2977
+f 2978 2556 2979
+f 2980 2979 2556
+f 2557 2980 2556
+f 2559 2556 2978
+f 2981 2559 2978
+f 2982 2980 2557
+f 2558 2983 2982
+f 2558 2982 2557
+f 2558 2559 2981
+f 2558 2981 2983
+f 2984 2560 2985
+f 2986 2985 2560
+f 2561 2986 2560
+f 2563 2560 2984
+f 2987 2563 2984
+f 2988 2986 2561
+f 2562 2989 2988
+f 2562 2988 2561
+f 2562 2563 2987
+f 2562 2987 2989
+f 2990 2564 2991
+f 2992 2991 2564
+f 2565 2992 2564
+f 2567 2564 2990
+f 2993 2567 2990
+f 2994 2992 2565
+f 2566 2995 2994
+f 2566 2994 2565
+f 2566 2567 2993
+f 2566 2993 2995
+f 2996 2568 2997
+f 2998 2997 2568
+f 2569 2998 2568
+f 2571 2568 2996
+f 2999 2571 2996
+f 3000 2998 2569
+f 2570 3001 3000
+f 2570 3000 2569
+f 2570 2571 2999
+f 2570 2999 3001
+f 3002 2573 3003
+f 3004 3003 2573
+f 2574 3004 2573
+f 2576 2573 3002
+f 3005 2576 3002
+f 3006 3004 2574
+f 2575 3007 3006
+f 2575 3006 2574
+f 2575 2576 3005
+f 2575 3005 3007
+f 2577 2572 2576
+f 2576 2572 2573
+f 3008 2579 3009
+f 3010 3009 2579
+f 2580 3010 2579
+f 2582 2579 3008
+f 3011 2582 3008
+f 3012 3010 2580
+f 2581 3013 3012
+f 2581 3012 2580
+f 2581 2582 3011
+f 2581 3011 3013
+f 2583 2578 2582
+f 2582 2578 2579
+f 3014 2585 3015
+f 3016 3015 2585
+f 2586 3016 2585
+f 2588 2585 3014
+f 3017 2588 3014
+f 3018 3016 2586
+f 2587 3019 3018
+f 2587 3018 2586
+f 2587 2588 3017
+f 2587 3017 3019
+f 3020 2589 3021
+f 3022 3021 2589
+f 2591 3022 2589
+f 2590 2589 3020
+f 3023 2590 3020
+f 3024 3022 2591
+f 2592 3025 3024
+f 2592 3024 2591
+f 2592 2590 3023
+f 2592 3023 3025
+f 3026 2594 3027
+f 3028 3027 2594
+f 2596 3028 2594
+f 2593 2594 3026
+f 3029 2593 3026
+f 3030 3028 2596
+f 2597 3031 3030
+f 2597 3030 2596
+f 2597 2593 3029
+f 2597 3029 3031
+f 3032 2598 3033
+f 3034 3033 2598
+f 2599 3034 2598
+f 2601 2598 3032
+f 3035 2601 3032
+f 3036 3034 2599
+f 2600 3037 3036
+f 2600 3036 2599
+f 2600 2601 3035
+f 2600 3035 3037
+f 3038 2602 3039
+f 3040 3039 2602
+f 2603 3040 2602
+f 2605 2602 3038
+f 3041 2605 3038
+f 3042 3040 2603
+f 2604 3043 3042
+f 2604 3042 2603
+f 2604 2605 3041
+f 2604 3041 3043
+f 3044 2606 3045
+f 3046 3045 2606
+f 2607 3046 2606
+f 2609 2606 3044
+f 3047 2609 3044
+f 3048 3046 2607
+f 2608 3049 3048
+f 2608 3048 2607
+f 2608 2609 3047
+f 2608 3047 3049
+f 3050 2610 3051
+f 3052 3051 2610
+f 2611 3052 2610
+f 2613 2610 3050
+f 3053 2613 3050
+f 3054 3052 2611
+f 2612 3055 3054
+f 2612 3054 2611
+f 2612 2613 3053
+f 2612 3053 3055
+f 3056 2614 3057
+f 3058 3057 2614
+f 2615 3058 2614
+f 2617 2614 3056
+f 3059 2617 3056
+f 3060 3058 2615
+f 2616 3061 3060
+f 2616 3060 2615
+f 2616 2617 3059
+f 2616 3059 3061
+f 3062 2618 3063
+f 3064 3063 2618
+f 2619 3064 2618
+f 2621 2618 3062
+f 3065 2621 3062
+f 3066 3064 2619
+f 2620 3067 3066
+f 2620 3066 2619
+f 2620 2621 3065
+f 2620 3065 3067
+f 3068 2622 3069
+f 3070 3069 2622
+f 2623 3070 2622
+f 2625 2622 3068
+f 3071 2625 3068
+f 3072 3070 2623
+f 2624 3073 3072
+f 2624 3072 2623
+f 2624 2625 3071
+f 2624 3071 3073
+f 3074 2626 3075
+f 3076 3075 2626
+f 2627 3076 2626
+f 2629 2626 3074
+f 3077 2629 3074
+f 3078 3076 2627
+f 2628 3079 3078
+f 2628 3078 2627
+f 2628 2629 3077
+f 2628 3077 3079
+f 3080 2630 3081
+f 3082 3081 2630
+f 2631 3082 2630
+f 2633 2630 3080
+f 3083 2633 3080
+f 3084 3082 2631
+f 2632 3085 3084
+f 2632 3084 2631
+f 2632 2633 3083
+f 2632 3083 3085
+f 3086 2634 3087
+f 3088 3087 2634
+f 2635 3088 2634
+f 2637 2634 3086
+f 3089 2637 3086
+f 3090 3088 2635
+f 2636 3091 3090
+f 2636 3090 2635
+f 2636 2637 3089
+f 2636 3089 3091
+f 3092 2638 3093
+f 3094 3093 2638
+f 2639 3094 2638
+f 2641 2638 3092
+f 3095 2641 3092
+f 3096 3094 2639
+f 2640 3097 3096
+f 2640 3096 2639
+f 2640 2641 3095
+f 2640 3095 3097
+f 3098 2642 3099
+f 3100 3099 2642
+f 2643 3100 2642
+f 2645 2642 3098
+f 3101 2645 3098
+f 3102 3100 2643
+f 2644 3103 3102
+f 2644 3102 2643
+f 2644 2645 3101
+f 2644 3101 3103
+f 3104 2646 3105
+f 3106 3105 2646
+f 2647 3106 2646
+f 2649 2646 3104
+f 3107 2649 3104
+f 3108 3106 2647
+f 2648 3109 3108
+f 2648 3108 2647
+f 2648 2649 3107
+f 2648 3107 3109
+f 3110 2651 3111
+f 3112 3111 2651
+f 2653 3112 2651
+f 2650 2651 3110
+f 3113 2650 3110
+f 3114 3112 2653
+f 2660 3115 3114
+f 2660 3114 2653
+f 2660 2650 3113
+f 2660 3113 3115
+f 2656 2657 2655
+f 2655 2657 2658
+f 3116 2658 3117
+f 3118 3117 2658
+f 2659 3118 2658
+f 2655 2658 3116
+f 3119 2655 3116
+f 3120 3118 2659
+f 2654 3121 3120
+f 2654 3120 2659
+f 2654 2655 3119
+f 2654 3119 3121
+f 3122 2662 3123
+f 3124 3123 2662
+f 2663 3124 2662
+f 2665 2662 3122
+f 3125 2665 3122
+f 3126 3124 2663
+f 2664 3127 3126
+f 2664 3126 2663
+f 2664 2665 3125
+f 2664 3125 3127
+f 2666 2661 2665
+f 2665 2661 2662
+f 3128 2668 3129
+f 3130 3129 2668
+f 2669 3130 2668
+f 2671 2668 3128
+f 3131 2671 3128
+f 3132 3130 2669
+f 2670 3133 3132
+f 2670 3132 2669
+f 2670 2671 3131
+f 2670 3131 3133
+f 2672 2667 2671
+f 2671 2667 2668
+f 3134 2674 3135
+f 3136 3135 2674
+f 2675 3136 2674
+f 2677 2674 3134
+f 3137 2677 3134
+f 3138 3136 2675
+f 2676 3139 3138
+f 2676 3138 2675
+f 2676 2677 3137
+f 2676 3137 3139
+f 2678 2673 2677
+f 2677 2673 2674
+f 3140 2680 3141
+f 3142 3141 2680
+f 2681 3142 2680
+f 2683 2680 3140
+f 3143 2683 3140
+f 3144 3142 2681
+f 2682 3145 3144
+f 2682 3144 2681
+f 2682 2683 3143
+f 2682 3143 3145
+f 2684 2679 2683
+f 2683 2679 2680
+f 3146 2685 3147
+f 3148 3147 2685
+f 2686 3148 2685
+f 2688 2685 3146
+f 3149 2688 3146
+f 3150 3148 2686
+f 2687 3151 3150
+f 2687 3150 2686
+f 2687 2688 3149
+f 2687 3149 3151
+f 3152 2689 3153
+f 3154 3153 2689
+f 2690 3154 2689
+f 2692 2689 3152
+f 3155 2692 3152
+f 3156 3154 2690
+f 2691 3157 3156
+f 2691 3156 2690
+f 2691 2692 3155
+f 2691 3155 3157
+f 3158 2693 3159
+f 3160 3159 2693
+f 2694 3160 2693
+f 2696 2693 3158
+f 3161 2696 3158
+f 3162 3160 2694
+f 2695 3163 3162
+f 2695 3162 2694
+f 2695 2696 3161
+f 2695 3161 3163
+f 3164 2697 3165
+f 3166 3165 2697
+f 2698 3166 2697
+f 2700 2697 3164
+f 3167 2700 3164
+f 3168 3166 2698
+f 2699 3169 3168
+f 2699 3168 2698
+f 2699 2700 3167
+f 2699 3167 3169
+f 3170 2701 3171
+f 3172 3171 2701
+f 2702 3172 2701
+f 2704 2701 3170
+f 3173 2704 3170
+f 3174 3172 2702
+f 2703 3175 3174
+f 2703 3174 2702
+f 2703 2704 3173
+f 2703 3173 3175
+f 3176 2705 3177
+f 3178 3177 2705
+f 2706 3178 2705
+f 2708 2705 3176
+f 3179 2708 3176
+f 3180 3178 2706
+f 2707 3181 3180
+f 2707 3180 2706
+f 2707 2708 3179
+f 2707 3179 3181
+f 3182 2709 3183
+f 3184 3183 2709
+f 2710 3184 2709
+f 2712 2709 3182
+f 3185 2712 3182
+f 3186 3184 2710
+f 2711 3187 3186
+f 2711 3186 2710
+f 2711 2712 3185
+f 2711 3185 3187
+f 3188 2713 3189
+f 3190 3189 2713
+f 2714 3190 2713
+f 2716 2713 3188
+f 3191 2716 3188
+f 3192 3190 2714
+f 2715 3193 3192
+f 2715 3192 2714
+f 2715 2716 3191
+f 2715 3191 3193
+f 3194 2717 3195
+f 3196 3195 2717
+f 2718 3196 2717
+f 2720 2717 3194
+f 3197 2720 3194
+f 3198 3196 2718
+f 2719 3199 3198
+f 2719 3198 2718
+f 2719 2720 3197
+f 2719 3197 3199
+f 3200 2721 3201
+f 3202 3201 2721
+f 2722 3202 2721
+f 2724 2721 3200
+f 3203 2724 3200
+f 3204 3202 2722
+f 2723 3205 3204
+f 2723 3204 2722
+f 2723 2724 3203
+f 2723 3203 3205
+f 3206 2725 3207
+f 3208 3207 2725
+f 2726 3208 2725
+f 2728 2725 3206
+f 3209 2728 3206
+f 3210 3208 2726
+f 2727 3211 3210
+f 2727 3210 2726
+f 2727 2728 3209
+f 2727 3209 3211
+f 3212 2729 3213
+f 3214 3213 2729
+f 2730 3214 2729
+f 2732 2729 3212
+f 3215 2732 3212
+f 3216 3214 2730
+f 2731 3217 3216
+f 2731 3216 2730
+f 2731 2732 3215
+f 2731 3215 3217
+f 3218 2733 3219
+f 3220 3219 2733
+f 2734 3220 2733
+f 2736 2733 3218
+f 3221 2736 3218
+f 3222 3220 2734
+f 2735 3223 3222
+f 2735 3222 2734
+f 2735 2736 3221
+f 2735 3221 3223
+f 3224 2737 3225
+f 3226 3225 2737
+f 2738 3226 2737
+f 2740 2737 3224
+f 3227 2740 3224
+f 3228 3226 2738
+f 2739 3229 3228
+f 2739 3228 2738
+f 2739 2740 3227
+f 2739 3227 3229
+f 3230 2741 3231
+f 3232 3231 2741
+f 2742 3232 2741
+f 2744 2741 3230
+f 3233 2744 3230
+f 3234 3232 2742
+f 2743 3235 3234
+f 2743 3234 2742
+f 2743 2744 3233
+f 2743 3233 3235
+f 3236 2745 3237
+f 3238 3237 2745
+f 2746 3238 2745
+f 2748 2745 3236
+f 3239 2748 3236
+f 3240 3238 2746
+f 2747 3241 3240
+f 2747 3240 2746
+f 2747 2748 3239
+f 2747 3239 3241
+f 3242 2750 3243
+f 3244 3243 2750
+f 2751 3244 2750
+f 2753 2750 3242
+f 3245 2753 3242
+f 3246 3244 2751
+f 2752 3247 3246
+f 2752 3246 2751
+f 2752 2753 3245
+f 2752 3245 3247
+f 2754 2749 2753
+f 2753 2749 2750
+f 3248 2756 3249
+f 3250 3249 2756
+f 2757 3250 2756
+f 2759 2756 3248
+f 3251 2759 3248
+f 3252 3250 2757
+f 2758 3253 3252
+f 2758 3252 2757
+f 2758 2759 3251
+f 2758 3251 3253
+f 2760 2755 2759
+f 2759 2755 2756
+f 3254 2762 3255
+f 3256 3255 2762
+f 2763 3256 2762
+f 2765 2762 3254
+f 3257 2765 3254
+f 3258 3256 2763
+f 2764 3259 3258
+f 2764 3258 2763
+f 2764 2765 3257
+f 2764 3257 3259
+f 3260 2767 3261
+f 3262 3261 2767
+f 2768 3262 2767
+f 2766 2767 3260
+f 3263 2766 3260
+f 3264 3262 2768
+f 2769 3265 3264
+f 2769 3264 2768
+f 2769 2766 3263
+f 2769 3263 3265
+f 3266 2771 3267
+f 3268 3267 2771
+f 2773 3268 2771
+f 2770 2771 3266
+f 3269 2770 3266
+f 3270 3268 2773
+f 2774 3271 3270
+f 2774 3270 2773
+f 2774 2770 3269
+f 2774 3269 3271
+f 3272 2775 3273
+f 3274 3273 2775
+f 2776 3274 2775
+f 2778 2775 3272
+f 3275 2778 3272
+f 3276 3274 2776
+f 2777 3277 3276
+f 2777 3276 2776
+f 2777 2778 3275
+f 2777 3275 3277
+f 3278 2779 3279
+f 3280 3279 2779
+f 2780 3280 2779
+f 2782 2779 3278
+f 3281 2782 3278
+f 3282 3280 2780
+f 2781 3283 3282
+f 2781 3282 2780
+f 2781 2782 3281
+f 2781 3281 3283
+f 3284 2783 3285
+f 3286 3285 2783
+f 2784 3286 2783
+f 2786 2783 3284
+f 3287 2786 3284
+f 3288 3286 2784
+f 2785 3289 3288
+f 2785 3288 2784
+f 2785 2786 3287
+f 2785 3287 3289
+f 3290 2787 3291
+f 3292 3291 2787
+f 2788 3292 2787
+f 2790 2787 3290
+f 3293 2790 3290
+f 3294 3292 2788
+f 2789 3295 3294
+f 2789 3294 2788
+f 2789 2790 3293
+f 2789 3293 3295
+f 3296 2791 3297
+f 3298 3297 2791
+f 2792 3298 2791
+f 2794 2791 3296
+f 3299 2794 3296
+f 3300 3298 2792
+f 2793 3301 3300
+f 2793 3300 2792
+f 2793 2794 3299
+f 2793 3299 3301
+f 3302 2795 3303
+f 3304 3303 2795
+f 2796 3304 2795
+f 2798 2795 3302
+f 3305 2798 3302
+f 3306 3304 2796
+f 2797 3307 3306
+f 2797 3306 2796
+f 2797 2798 3305
+f 2797 3305 3307
+f 3308 2799 3309
+f 3310 3309 2799
+f 2800 3310 2799
+f 2802 2799 3308
+f 3311 2802 3308
+f 3312 3310 2800
+f 2801 3313 3312
+f 2801 3312 2800
+f 2801 2802 3311
+f 2801 3311 3313
+f 2804 2803 3314
+f 3315 2804 3314
+f 3316 2805 2804
+f 3316 2804 3315
+f 3317 2806 2805
+f 3317 2805 3316
+f 3318 2807 2806
+f 3318 2806 3317
+f 3319 2808 2807
+f 3319 2807 3318
+f 2809 2808 3319
+f 3320 2809 3319
+f 3321 2810 2809
+f 3321 2809 3320
+f 3322 2811 2810
+f 3322 2810 3321
+f 3323 2811 3322
+f 3323 2812 2811
+f 3324 2812 3323
+f 3324 2813 2812
+f 3325 2813 3324
+f 3325 2814 2813
+f 2815 2814 3325
+f 3326 2815 3325
+f 3327 2816 2815
+f 3327 2815 3326
+f 3328 2817 2816
+f 3328 2816 3327
+f 3329 2818 2817
+f 3329 2817 3328
+f 3330 2819 2818
+f 3330 2818 3329
+f 3331 2820 2819
+f 3331 2819 3330
+f 3332 2821 2820
+f 3332 2820 3331
+f 3333 2822 2821
+f 3333 2821 3332
+f 3334 2823 2822
+f 3334 2822 3333
+f 3335 2824 2823
+f 3335 2823 3334
+f 3336 2825 2824
+f 3336 2824 3335
+f 3337 2826 2825
+f 3337 2825 3336
+f 3338 2827 2826
+f 3338 2826 3337
+f 2828 2827 3338
+f 3339 2828 3338
+f 3340 2829 2828
+f 3340 2828 3339
+f 3341 2830 2829
+f 3341 2829 3340
+f 3342 2831 2830
+f 3342 2830 3341
+f 2832 2831 3342
+f 3343 2832 3342
+f 3344 2833 2832
+f 3344 2832 3343
+f 2803 2833 3344
+f 3314 2803 3344
+f 3345 2835 2836
+f 3346 3345 2836
+f 3346 2836 2838
+f 3347 3346 2838
+f 3347 2838 2839
+f 3348 3347 2839
+f 3348 2839 2837
+f 3349 3348 2837
+f 3349 2837 2834
+f 3350 3349 2834
+f 3350 2834 2835
+f 3345 3350 2835
+f 3351 2841 2842
+f 3352 3351 2842
+f 3352 2842 2844
+f 3353 3352 2844
+f 3353 2844 2845
+f 3354 3353 2845
+f 3354 2845 2843
+f 3355 3354 2843
+f 3355 2843 2840
+f 3356 3355 2840
+f 3356 2840 2841
+f 3351 3356 2841
+f 3357 2847 2848
+f 3358 3357 2848
+f 3358 2848 2850
+f 3359 3358 2850
+f 3359 2850 2851
+f 3360 3359 2851
+f 3360 2851 2849
+f 3361 3360 2849
+f 3361 2849 2846
+f 3362 3361 2846
+f 3362 2846 2847
+f 3357 3362 2847
+f 3363 2853 2854
+f 3364 3363 2854
+f 3364 2854 2856
+f 3365 3364 2856
+f 3365 2856 2857
+f 3366 3365 2857
+f 3366 2857 2855
+f 3367 3366 2855
+f 3367 2855 2852
+f 3368 3367 2852
+f 3368 2852 2853
+f 3363 3368 2853
+f 3369 2859 2860
+f 3370 3369 2860
+f 3370 2860 2862
+f 3371 3370 2862
+f 3371 2862 2863
+f 3372 3371 2863
+f 3372 2863 2861
+f 3373 3372 2861
+f 3373 2861 2858
+f 3374 3373 2858
+f 3374 2858 2859
+f 3369 3374 2859
+f 3375 2865 2866
+f 3376 3375 2866
+f 3376 2866 2868
+f 3377 3376 2868
+f 3377 2868 2869
+f 3378 3377 2869
+f 3378 2869 2867
+f 3379 3378 2867
+f 3379 2867 2864
+f 3380 3379 2864
+f 3380 2864 2865
+f 3375 3380 2865
+f 3381 2871 2872
+f 3382 3381 2872
+f 3382 2872 2874
+f 3383 3382 2874
+f 3383 2874 2875
+f 3384 3383 2875
+f 3384 2875 2873
+f 3385 3384 2873
+f 3385 2873 2870
+f 3386 3385 2870
+f 3386 2870 2871
+f 3381 3386 2871
+f 3387 2877 2878
+f 3388 3387 2878
+f 3388 2878 2880
+f 3389 3388 2880
+f 3389 2880 2881
+f 3390 3389 2881
+f 3390 2881 2879
+f 3391 3390 2879
+f 3391 2879 2876
+f 3392 3391 2876
+f 3392 2876 2877
+f 3387 3392 2877
+f 3393 2883 2884
+f 3394 3393 2884
+f 3394 2884 2886
+f 3395 3394 2886
+f 3395 2886 2887
+f 3396 3395 2887
+f 3396 2887 2885
+f 3397 3396 2885
+f 3397 2885 2882
+f 3398 3397 2882
+f 3398 2882 2883
+f 3393 3398 2883
+f 3399 2889 2890
+f 3400 3399 2890
+f 3400 2890 2892
+f 3401 3400 2892
+f 3401 2892 2893
+f 3402 3401 2893
+f 3402 2893 2891
+f 3403 3402 2891
+f 3403 2891 2888
+f 3404 3403 2888
+f 3404 2888 2889
+f 3399 3404 2889
+f 3405 2895 2896
+f 3406 3405 2896
+f 3406 2896 2898
+f 3407 3406 2898
+f 3407 2898 2899
+f 3408 3407 2899
+f 3408 2899 2897
+f 3409 3408 2897
+f 3409 2897 2894
+f 3410 3409 2894
+f 3410 2894 2895
+f 3405 3410 2895
+f 3411 2901 2902
+f 3412 3411 2902
+f 3412 2902 2904
+f 3413 3412 2904
+f 3413 2904 2905
+f 3414 3413 2905
+f 3414 2905 2903
+f 3415 3414 2903
+f 3415 2903 2900
+f 3416 3415 2900
+f 3416 2900 2901
+f 3411 3416 2901
+f 3417 2907 2908
+f 3418 3417 2908
+f 3418 2908 2910
+f 3419 3418 2910
+f 3419 2910 2911
+f 3420 3419 2911
+f 3420 2911 2909
+f 3421 3420 2909
+f 3421 2909 2906
+f 3422 3421 2906
+f 3422 2906 2907
+f 3417 3422 2907
+f 3423 2913 2914
+f 3424 3423 2914
+f 3424 2914 2916
+f 3425 3424 2916
+f 3425 2916 2917
+f 3426 3425 2917
+f 3426 2917 2915
+f 3427 3426 2915
+f 3427 2915 2912
+f 3428 3427 2912
+f 3428 2912 2913
+f 3423 3428 2913
+f 3429 2919 2920
+f 3430 3429 2920
+f 3430 2920 2922
+f 3431 3430 2922
+f 3431 2922 2923
+f 3432 3431 2923
+f 3432 2923 2921
+f 3433 3432 2921
+f 3433 2921 2918
+f 3434 3433 2918
+f 3434 2918 2919
+f 3429 3434 2919
+f 3435 2925 2926
+f 3436 3435 2926
+f 3436 2926 2928
+f 3437 3436 2928
+f 3437 2928 2929
+f 3438 3437 2929
+f 3438 2929 2927
+f 3439 3438 2927
+f 3439 2927 2924
+f 3440 3439 2924
+f 3440 2924 2925
+f 3435 3440 2925
+f 3441 2931 2932
+f 3442 3441 2932
+f 3442 2932 2934
+f 3443 3442 2934
+f 3443 2934 2935
+f 3444 3443 2935
+f 3444 2935 2933
+f 3445 3444 2933
+f 3445 2933 2930
+f 3446 3445 2930
+f 3446 2930 2931
+f 3441 3446 2931
+f 3447 2937 2938
+f 3448 3447 2938
+f 3448 2938 2940
+f 3449 3448 2940
+f 3449 2940 2941
+f 3450 3449 2941
+f 3450 2941 2939
+f 3451 3450 2939
+f 3451 2939 2936
+f 3452 3451 2936
+f 3452 2936 2937
+f 3447 3452 2937
+f 3453 2943 2944
+f 3454 3453 2944
+f 3454 2944 2946
+f 3455 3454 2946
+f 3455 2946 2947
+f 3456 3455 2947
+f 3456 2947 2945
+f 3457 3456 2945
+f 3457 2945 2942
+f 3458 3457 2942
+f 3458 2942 2943
+f 3453 3458 2943
+f 3459 2949 2950
+f 3460 3459 2950
+f 3460 2950 2952
+f 3461 3460 2952
+f 3461 2952 2953
+f 3462 3461 2953
+f 3462 2953 2951
+f 3463 3462 2951
+f 3463 2951 2948
+f 3464 3463 2948
+f 3464 2948 2949
+f 3459 3464 2949
+f 3465 2955 2956
+f 3466 3465 2956
+f 3466 2956 2958
+f 3467 3466 2958
+f 3467 2958 2959
+f 3468 3467 2959
+f 3468 2959 2957
+f 3469 3468 2957
+f 3469 2957 2954
+f 3470 3469 2954
+f 3470 2954 2955
+f 3465 3470 2955
+f 3471 2961 2962
+f 3472 3471 2962
+f 3472 2962 2964
+f 3473 3472 2964
+f 3473 2964 2965
+f 3474 3473 2965
+f 3474 2965 2963
+f 3475 3474 2963
+f 3475 2963 2960
+f 3476 3475 2960
+f 3476 2960 2961
+f 3471 3476 2961
+f 3477 2967 2968
+f 3478 3477 2968
+f 3478 2968 2970
+f 3479 3478 2970
+f 3479 2970 2971
+f 3480 3479 2971
+f 3480 2971 2969
+f 3481 3480 2969
+f 3481 2969 2966
+f 3482 3481 2966
+f 3482 2966 2967
+f 3477 3482 2967
+f 3483 2973 2974
+f 3484 3483 2974
+f 3484 2974 2976
+f 3485 3484 2976
+f 3485 2976 2977
+f 3486 3485 2977
+f 3486 2977 2975
+f 3487 3486 2975
+f 3487 2975 2972
+f 3488 3487 2972
+f 3488 2972 2973
+f 3483 3488 2973
+f 3489 2979 2980
+f 3490 3489 2980
+f 3490 2980 2982
+f 3491 3490 2982
+f 3491 2982 2983
+f 3492 3491 2983
+f 3492 2983 2981
+f 3493 3492 2981
+f 3493 2981 2978
+f 3494 3493 2978
+f 3494 2978 2979
+f 3489 3494 2979
+f 3495 2985 2986
+f 3496 3495 2986
+f 3496 2986 2988
+f 3497 3496 2988
+f 3497 2988 2989
+f 3498 3497 2989
+f 3498 2989 2987
+f 3499 3498 2987
+f 3499 2987 2984
+f 3500 3499 2984
+f 3500 2984 2985
+f 3495 3500 2985
+f 3501 2991 2992
+f 3502 3501 2992
+f 3502 2992 2994
+f 3503 3502 2994
+f 3503 2994 2995
+f 3504 3503 2995
+f 3504 2995 2993
+f 3505 3504 2993
+f 3505 2993 2990
+f 3506 3505 2990
+f 3506 2990 2991
+f 3501 3506 2991
+f 3507 2997 2998
+f 3508 3507 2998
+f 3508 2998 3000
+f 3509 3508 3000
+f 3509 3000 3001
+f 3510 3509 3001
+f 3510 3001 2999
+f 3511 3510 2999
+f 3511 2999 2996
+f 3512 3511 2996
+f 3512 2996 2997
+f 3507 3512 2997
+f 3513 3003 3004
+f 3514 3513 3004
+f 3514 3004 3006
+f 3515 3514 3006
+f 3515 3006 3007
+f 3516 3515 3007
+f 3516 3007 3005
+f 3517 3516 3005
+f 3517 3005 3002
+f 3518 3517 3002
+f 3518 3002 3003
+f 3513 3518 3003
+f 3519 3009 3010
+f 3520 3519 3010
+f 3520 3010 3012
+f 3521 3520 3012
+f 3521 3012 3013
+f 3522 3521 3013
+f 3522 3013 3011
+f 3523 3522 3011
+f 3523 3011 3008
+f 3524 3523 3008
+f 3524 3008 3009
+f 3519 3524 3009
+f 3525 3015 3016
+f 3526 3525 3016
+f 3526 3016 3018
+f 3527 3526 3018
+f 3527 3018 3019
+f 3528 3527 3019
+f 3528 3019 3017
+f 3529 3528 3017
+f 3529 3017 3014
+f 3530 3529 3014
+f 3530 3014 3015
+f 3525 3530 3015
+f 3531 3021 3022
+f 3532 3531 3022
+f 3532 3022 3024
+f 3533 3532 3024
+f 3533 3024 3025
+f 3534 3533 3025
+f 3534 3025 3023
+f 3535 3534 3023
+f 3535 3023 3020
+f 3536 3535 3020
+f 3536 3020 3021
+f 3531 3536 3021
+f 3537 3027 3028
+f 3538 3537 3028
+f 3538 3028 3030
+f 3539 3538 3030
+f 3539 3030 3031
+f 3540 3539 3031
+f 3540 3031 3029
+f 3541 3540 3029
+f 3541 3029 3026
+f 3542 3541 3026
+f 3542 3026 3027
+f 3537 3542 3027
+f 3543 3033 3034
+f 3544 3543 3034
+f 3544 3034 3036
+f 3545 3544 3036
+f 3545 3036 3037
+f 3546 3545 3037
+f 3546 3037 3035
+f 3547 3546 3035
+f 3547 3035 3032
+f 3548 3547 3032
+f 3548 3032 3033
+f 3543 3548 3033
+f 3549 3039 3040
+f 3550 3549 3040
+f 3550 3040 3042
+f 3551 3550 3042
+f 3551 3042 3043
+f 3552 3551 3043
+f 3552 3043 3041
+f 3553 3552 3041
+f 3553 3041 3038
+f 3554 3553 3038
+f 3554 3038 3039
+f 3549 3554 3039
+f 3555 3045 3046
+f 3556 3555 3046
+f 3556 3046 3048
+f 3557 3556 3048
+f 3557 3048 3049
+f 3558 3557 3049
+f 3558 3049 3047
+f 3559 3558 3047
+f 3559 3047 3044
+f 3560 3559 3044
+f 3560 3044 3045
+f 3555 3560 3045
+f 3561 3051 3052
+f 3562 3561 3052
+f 3562 3052 3054
+f 3563 3562 3054
+f 3563 3054 3055
+f 3564 3563 3055
+f 3564 3055 3053
+f 3565 3564 3053
+f 3565 3053 3050
+f 3566 3565 3050
+f 3566 3050 3051
+f 3561 3566 3051
+f 3567 3057 3058
+f 3568 3567 3058
+f 3568 3058 3060
+f 3569 3568 3060
+f 3569 3060 3061
+f 3570 3569 3061
+f 3570 3061 3059
+f 3571 3570 3059
+f 3571 3059 3056
+f 3572 3571 3056
+f 3572 3056 3057
+f 3567 3572 3057
+f 3573 3063 3064
+f 3574 3573 3064
+f 3574 3064 3066
+f 3575 3574 3066
+f 3575 3066 3067
+f 3576 3575 3067
+f 3576 3067 3065
+f 3577 3576 3065
+f 3577 3065 3062
+f 3578 3577 3062
+f 3578 3062 3063
+f 3573 3578 3063
+f 3579 3069 3070
+f 3580 3579 3070
+f 3580 3070 3072
+f 3581 3580 3072
+f 3581 3072 3073
+f 3582 3581 3073
+f 3582 3073 3071
+f 3583 3582 3071
+f 3583 3071 3068
+f 3584 3583 3068
+f 3584 3068 3069
+f 3579 3584 3069
+f 3585 3075 3076
+f 3586 3585 3076
+f 3586 3076 3078
+f 3587 3586 3078
+f 3587 3078 3079
+f 3588 3587 3079
+f 3588 3079 3077
+f 3589 3588 3077
+f 3589 3077 3074
+f 3590 3589 3074
+f 3590 3074 3075
+f 3585 3590 3075
+f 3591 3081 3082
+f 3592 3591 3082
+f 3592 3082 3084
+f 3593 3592 3084
+f 3593 3084 3085
+f 3594 3593 3085
+f 3594 3085 3083
+f 3595 3594 3083
+f 3595 3083 3080
+f 3596 3595 3080
+f 3596 3080 3081
+f 3591 3596 3081
+f 3597 3087 3088
+f 3598 3597 3088
+f 3598 3088 3090
+f 3599 3598 3090
+f 3599 3090 3091
+f 3600 3599 3091
+f 3600 3091 3089
+f 3601 3600 3089
+f 3601 3089 3086
+f 3602 3601 3086
+f 3602 3086 3087
+f 3597 3602 3087
+f 3603 3093 3094
+f 3604 3603 3094
+f 3604 3094 3096
+f 3605 3604 3096
+f 3605 3096 3097
+f 3606 3605 3097
+f 3606 3097 3095
+f 3607 3606 3095
+f 3607 3095 3092
+f 3608 3607 3092
+f 3608 3092 3093
+f 3603 3608 3093
+f 3609 3099 3100
+f 3610 3609 3100
+f 3610 3100 3102
+f 3611 3610 3102
+f 3611 3102 3103
+f 3612 3611 3103
+f 3612 3103 3101
+f 3613 3612 3101
+f 3613 3101 3098
+f 3614 3613 3098
+f 3614 3098 3099
+f 3609 3614 3099
+f 3615 3105 3106
+f 3616 3615 3106
+f 3616 3106 3108
+f 3617 3616 3108
+f 3617 3108 3109
+f 3618 3617 3109
+f 3618 3109 3107
+f 3619 3618 3107
+f 3619 3107 3104
+f 3620 3619 3104
+f 3620 3104 3105
+f 3615 3620 3105
+f 3621 3111 3112
+f 3622 3621 3112
+f 3622 3112 3114
+f 3623 3622 3114
+f 3623 3114 3115
+f 3624 3623 3115
+f 3624 3115 3113
+f 3625 3624 3113
+f 3625 3113 3110
+f 3626 3625 3110
+f 3626 3110 3111
+f 3621 3626 3111
+f 3627 3117 3118
+f 3628 3627 3118
+f 3628 3118 3120
+f 3629 3628 3120
+f 3629 3120 3121
+f 3630 3629 3121
+f 3630 3121 3119
+f 3631 3630 3119
+f 3631 3119 3116
+f 3632 3631 3116
+f 3632 3116 3117
+f 3627 3632 3117
+f 3633 3123 3124
+f 3634 3633 3124
+f 3634 3124 3126
+f 3635 3634 3126
+f 3635 3126 3127
+f 3636 3635 3127
+f 3636 3127 3125
+f 3637 3636 3125
+f 3637 3125 3122
+f 3638 3637 3122
+f 3638 3122 3123
+f 3633 3638 3123
+f 3639 3129 3130
+f 3640 3639 3130
+f 3640 3130 3132
+f 3641 3640 3132
+f 3641 3132 3133
+f 3642 3641 3133
+f 3642 3133 3131
+f 3643 3642 3131
+f 3643 3131 3128
+f 3644 3643 3128
+f 3644 3128 3129
+f 3639 3644 3129
+f 3645 3135 3136
+f 3646 3645 3136
+f 3646 3136 3138
+f 3647 3646 3138
+f 3647 3138 3139
+f 3648 3647 3139
+f 3648 3139 3137
+f 3649 3648 3137
+f 3649 3137 3134
+f 3650 3649 3134
+f 3650 3134 3135
+f 3645 3650 3135
+f 3651 3141 3142
+f 3652 3651 3142
+f 3652 3142 3144
+f 3653 3652 3144
+f 3653 3144 3145
+f 3654 3653 3145
+f 3654 3145 3143
+f 3655 3654 3143
+f 3655 3143 3140
+f 3656 3655 3140
+f 3656 3140 3141
+f 3651 3656 3141
+f 3657 3147 3148
+f 3658 3657 3148
+f 3658 3148 3150
+f 3659 3658 3150
+f 3659 3150 3151
+f 3660 3659 3151
+f 3660 3151 3149
+f 3661 3660 3149
+f 3661 3149 3146
+f 3662 3661 3146
+f 3662 3146 3147
+f 3657 3662 3147
+f 3663 3153 3154
+f 3664 3663 3154
+f 3664 3154 3156
+f 3665 3664 3156
+f 3665 3156 3157
+f 3666 3665 3157
+f 3666 3157 3155
+f 3667 3666 3155
+f 3667 3155 3152
+f 3668 3667 3152
+f 3668 3152 3153
+f 3663 3668 3153
+f 3669 3159 3160
+f 3670 3669 3160
+f 3670 3160 3162
+f 3671 3670 3162
+f 3671 3162 3163
+f 3672 3671 3163
+f 3672 3163 3161
+f 3673 3672 3161
+f 3673 3161 3158
+f 3674 3673 3158
+f 3674 3158 3159
+f 3669 3674 3159
+f 3675 3165 3166
+f 3676 3675 3166
+f 3676 3166 3168
+f 3677 3676 3168
+f 3677 3168 3169
+f 3678 3677 3169
+f 3678 3169 3167
+f 3679 3678 3167
+f 3679 3167 3164
+f 3680 3679 3164
+f 3680 3164 3165
+f 3675 3680 3165
+f 3681 3171 3172
+f 3682 3681 3172
+f 3682 3172 3174
+f 3683 3682 3174
+f 3683 3174 3175
+f 3684 3683 3175
+f 3684 3175 3173
+f 3685 3684 3173
+f 3685 3173 3170
+f 3686 3685 3170
+f 3686 3170 3171
+f 3681 3686 3171
+f 3687 3177 3178
+f 3688 3687 3178
+f 3688 3178 3180
+f 3689 3688 3180
+f 3689 3180 3181
+f 3690 3689 3181
+f 3690 3181 3179
+f 3691 3690 3179
+f 3691 3179 3176
+f 3692 3691 3176
+f 3692 3176 3177
+f 3687 3692 3177
+f 3693 3183 3184
+f 3694 3693 3184
+f 3694 3184 3186
+f 3695 3694 3186
+f 3695 3186 3187
+f 3696 3695 3187
+f 3696 3187 3185
+f 3697 3696 3185
+f 3697 3185 3182
+f 3698 3697 3182
+f 3698 3182 3183
+f 3693 3698 3183
+f 3699 3189 3190
+f 3700 3699 3190
+f 3700 3190 3192
+f 3701 3700 3192
+f 3701 3192 3193
+f 3702 3701 3193
+f 3702 3193 3191
+f 3703 3702 3191
+f 3703 3191 3188
+f 3704 3703 3188
+f 3704 3188 3189
+f 3699 3704 3189
+f 3705 3195 3196
+f 3706 3705 3196
+f 3706 3196 3198
+f 3707 3706 3198
+f 3707 3198 3199
+f 3708 3707 3199
+f 3708 3199 3197
+f 3709 3708 3197
+f 3709 3197 3194
+f 3710 3709 3194
+f 3710 3194 3195
+f 3705 3710 3195
+f 3711 3201 3202
+f 3712 3711 3202
+f 3712 3202 3204
+f 3713 3712 3204
+f 3713 3204 3205
+f 3714 3713 3205
+f 3714 3205 3203
+f 3715 3714 3203
+f 3715 3203 3200
+f 3716 3715 3200
+f 3716 3200 3201
+f 3711 3716 3201
+f 3717 3207 3208
+f 3718 3717 3208
+f 3718 3208 3210
+f 3719 3718 3210
+f 3719 3210 3211
+f 3720 3719 3211
+f 3720 3211 3209
+f 3721 3720 3209
+f 3721 3209 3206
+f 3722 3721 3206
+f 3722 3206 3207
+f 3717 3722 3207
+f 3723 3213 3214
+f 3724 3723 3214
+f 3724 3214 3216
+f 3725 3724 3216
+f 3725 3216 3217
+f 3726 3725 3217
+f 3726 3217 3215
+f 3727 3726 3215
+f 3727 3215 3212
+f 3728 3727 3212
+f 3728 3212 3213
+f 3723 3728 3213
+f 3729 3219 3220
+f 3730 3729 3220
+f 3730 3220 3222
+f 3731 3730 3222
+f 3731 3222 3223
+f 3732 3731 3223
+f 3732 3223 3221
+f 3733 3732 3221
+f 3733 3221 3218
+f 3734 3733 3218
+f 3734 3218 3219
+f 3729 3734 3219
+f 3735 3225 3226
+f 3736 3735 3226
+f 3736 3226 3228
+f 3737 3736 3228
+f 3737 3228 3229
+f 3738 3737 3229
+f 3738 3229 3227
+f 3739 3738 3227
+f 3739 3227 3224
+f 3740 3739 3224
+f 3740 3224 3225
+f 3735 3740 3225
+f 3741 3231 3232
+f 3742 3741 3232
+f 3742 3232 3234
+f 3743 3742 3234
+f 3743 3234 3235
+f 3744 3743 3235
+f 3744 3235 3233
+f 3745 3744 3233
+f 3745 3233 3230
+f 3746 3745 3230
+f 3746 3230 3231
+f 3741 3746 3231
+f 3747 3237 3238
+f 3748 3747 3238
+f 3748 3238 3240
+f 3749 3748 3240
+f 3749 3240 3241
+f 3750 3749 3241
+f 3750 3241 3239
+f 3751 3750 3239
+f 3751 3239 3236
+f 3752 3751 3236
+f 3752 3236 3237
+f 3747 3752 3237
+f 3753 3243 3244
+f 3754 3753 3244
+f 3754 3244 3246
+f 3755 3754 3246
+f 3755 3246 3247
+f 3756 3755 3247
+f 3756 3247 3245
+f 3757 3756 3245
+f 3757 3245 3242
+f 3758 3757 3242
+f 3758 3242 3243
+f 3753 3758 3243
+f 3759 3249 3250
+f 3760 3759 3250
+f 3760 3250 3252
+f 3761 3760 3252
+f 3761 3252 3253
+f 3762 3761 3253
+f 3762 3253 3251
+f 3763 3762 3251
+f 3763 3251 3248
+f 3764 3763 3248
+f 3764 3248 3249
+f 3759 3764 3249
+f 3765 3255 3256
+f 3766 3765 3256
+f 3766 3256 3258
+f 3767 3766 3258
+f 3767 3258 3259
+f 3768 3767 3259
+f 3768 3259 3257
+f 3769 3768 3257
+f 3769 3257 3254
+f 3770 3769 3254
+f 3770 3254 3255
+f 3765 3770 3255
+f 3771 3261 3262
+f 3772 3771 3262
+f 3772 3262 3264
+f 3773 3772 3264
+f 3773 3264 3265
+f 3774 3773 3265
+f 3774 3265 3263
+f 3775 3774 3263
+f 3775 3263 3260
+f 3776 3775 3260
+f 3776 3260 3261
+f 3771 3776 3261
+f 3777 3267 3268
+f 3778 3777 3268
+f 3778 3268 3270
+f 3779 3778 3270
+f 3779 3270 3271
+f 3780 3779 3271
+f 3780 3271 3269
+f 3781 3780 3269
+f 3781 3269 3266
+f 3782 3781 3266
+f 3782 3266 3267
+f 3777 3782 3267
+f 3783 3273 3274
+f 3784 3783 3274
+f 3784 3274 3276
+f 3785 3784 3276
+f 3785 3276 3277
+f 3786 3785 3277
+f 3786 3277 3275
+f 3787 3786 3275
+f 3787 3275 3272
+f 3788 3787 3272
+f 3788 3272 3273
+f 3783 3788 3273
+f 3789 3279 3280
+f 3790 3789 3280
+f 3790 3280 3282
+f 3791 3790 3282
+f 3791 3282 3283
+f 3792 3791 3283
+f 3792 3283 3281
+f 3793 3792 3281
+f 3793 3281 3278
+f 3794 3793 3278
+f 3794 3278 3279
+f 3789 3794 3279
+f 3795 3285 3286
+f 3796 3795 3286
+f 3796 3286 3288
+f 3797 3796 3288
+f 3797 3288 3289
+f 3798 3797 3289
+f 3798 3289 3287
+f 3799 3798 3287
+f 3799 3287 3284
+f 3800 3799 3284
+f 3800 3284 3285
+f 3795 3800 3285
+f 3801 3291 3292
+f 3802 3801 3292
+f 3802 3292 3294
+f 3803 3802 3294
+f 3803 3294 3295
+f 3804 3803 3295
+f 3804 3295 3293
+f 3805 3804 3293
+f 3805 3293 3290
+f 3806 3805 3290
+f 3806 3290 3291
+f 3801 3806 3291
+f 3807 3297 3298
+f 3808 3807 3298
+f 3808 3298 3300
+f 3809 3808 3300
+f 3809 3300 3301
+f 3810 3809 3301
+f 3810 3301 3299
+f 3811 3810 3299
+f 3811 3299 3296
+f 3812 3811 3296
+f 3812 3296 3297
+f 3807 3812 3297
+f 3813 3303 3304
+f 3814 3813 3304
+f 3814 3304 3306
+f 3815 3814 3306
+f 3815 3306 3307
+f 3816 3815 3307
+f 3816 3307 3305
+f 3817 3816 3305
+f 3817 3305 3302
+f 3818 3817 3302
+f 3818 3302 3303
+f 3813 3818 3303
+f 3819 3309 3310
+f 3820 3819 3310
+f 3820 3310 3312
+f 3821 3820 3312
+f 3821 3312 3313
+f 3822 3821 3313
+f 3822 3313 3311
+f 3823 3822 3311
+f 3823 3311 3308
+f 3824 3823 3308
+f 3824 3308 3309
+f 3819 3824 3309
+f 3315 3314 3825
+f 3826 3315 3825
+f 3316 3315 3826
+f 3827 3316 3826
+f 3317 3316 3827
+f 3828 3317 3827
+f 3318 3317 3828
+f 3829 3318 3828
+f 3319 3318 3829
+f 3830 3319 3829
+f 3320 3319 3830
+f 3831 3320 3830
+f 3321 3320 3831
+f 3832 3321 3831
+f 3322 3321 3832
+f 3833 3322 3832
+f 3323 3322 3833
+f 3834 3323 3833
+f 3324 3323 3834
+f 3835 3324 3834
+f 3325 3324 3835
+f 3836 3325 3835
+f 3326 3325 3836
+f 3837 3326 3836
+f 3327 3326 3837
+f 3838 3327 3837
+f 3328 3327 3838
+f 3839 3328 3838
+f 3329 3328 3839
+f 3840 3329 3839
+f 3330 3329 3840
+f 3841 3330 3840
+f 3331 3330 3841
+f 3842 3331 3841
+f 3332 3331 3842
+f 3843 3332 3842
+f 3333 3332 3843
+f 3844 3333 3843
+f 3334 3333 3844
+f 3845 3334 3844
+f 3335 3334 3845
+f 3846 3335 3845
+f 3336 3335 3846
+f 3847 3336 3846
+f 3337 3336 3847
+f 3848 3337 3847
+f 3338 3337 3848
+f 3849 3338 3848
+f 3339 3338 3849
+f 3850 3339 3849
+f 3340 3339 3850
+f 3851 3340 3850
+f 3341 3340 3851
+f 3852 3341 3851
+f 3342 3341 3852
+f 3853 3342 3852
+f 3343 3853 3854
+f 3343 3342 3853
+f 3855 3344 3343
+f 3855 3343 3854
+f 3825 3314 3344
+f 3825 3344 3855
+f 3856 3350 3345
+f 3345 3346 3856
+f 3856 3857 3350
+f 3346 3858 3856
+f 3857 3349 3350
+f 3346 3347 3858
+f 3348 3859 3347
+f 3347 3859 3858
+f 3857 3859 3349
+f 3349 3859 3348
+f 3860 3356 3351
+f 3351 3352 3860
+f 3860 3861 3356
+f 3352 3862 3860
+f 3861 3355 3356
+f 3352 3353 3862
+f 3354 3863 3353
+f 3353 3863 3862
+f 3861 3863 3355
+f 3355 3863 3354
+f 3864 3362 3357
+f 3357 3358 3864
+f 3864 3865 3362
+f 3358 3866 3864
+f 3865 3361 3362
+f 3358 3359 3866
+f 3360 3867 3359
+f 3359 3867 3866
+f 3865 3867 3361
+f 3361 3867 3360
+f 3868 3368 3363
+f 3363 3364 3868
+f 3868 3869 3368
+f 3364 3870 3868
+f 3869 3367 3368
+f 3364 3365 3870
+f 3366 3871 3365
+f 3365 3871 3870
+f 3869 3871 3367
+f 3367 3871 3366
+f 3872 3374 3369
+f 3369 3370 3872
+f 3872 3873 3374
+f 3370 3874 3872
+f 3873 3373 3374
+f 3370 3371 3874
+f 3372 3875 3371
+f 3371 3875 3874
+f 3873 3875 3373
+f 3373 3875 3372
+f 3876 3380 3375
+f 3375 3376 3876
+f 3876 3877 3380
+f 3376 3878 3876
+f 3877 3379 3380
+f 3376 3377 3878
+f 3378 3879 3377
+f 3377 3879 3878
+f 3877 3879 3379
+f 3379 3879 3378
+f 3880 3386 3381
+f 3381 3382 3880
+f 3880 3881 3386
+f 3382 3882 3880
+f 3881 3385 3386
+f 3382 3383 3882
+f 3384 3883 3383
+f 3383 3883 3882
+f 3881 3883 3385
+f 3385 3883 3384
+f 3884 3392 3387
+f 3387 3388 3884
+f 3884 3885 3392
+f 3388 3886 3884
+f 3885 3391 3392
+f 3388 3389 3886
+f 3390 3887 3389
+f 3389 3887 3886
+f 3885 3887 3391
+f 3391 3887 3390
+f 3888 3398 3393
+f 3393 3394 3888
+f 3888 3889 3398
+f 3394 3890 3888
+f 3889 3397 3398
+f 3394 3395 3890
+f 3396 3891 3395
+f 3395 3891 3890
+f 3889 3891 3397
+f 3397 3891 3396
+f 3892 3404 3399
+f 3399 3400 3892
+f 3892 3893 3404
+f 3400 3894 3892
+f 3893 3403 3404
+f 3400 3401 3894
+f 3402 3895 3401
+f 3401 3895 3894
+f 3893 3895 3403
+f 3403 3895 3402
+f 3896 3410 3405
+f 3405 3406 3896
+f 3896 3897 3410
+f 3406 3898 3896
+f 3897 3409 3410
+f 3406 3407 3898
+f 3408 3899 3407
+f 3407 3899 3898
+f 3897 3899 3409
+f 3409 3899 3408
+f 3900 3416 3411
+f 3411 3412 3900
+f 3900 3901 3416
+f 3412 3902 3900
+f 3901 3415 3416
+f 3412 3413 3902
+f 3414 3903 3413
+f 3413 3903 3902
+f 3901 3903 3415
+f 3415 3903 3414
+f 3904 3422 3417
+f 3417 3418 3904
+f 3904 3905 3422
+f 3418 3906 3904
+f 3905 3421 3422
+f 3418 3419 3906
+f 3420 3907 3419
+f 3419 3907 3906
+f 3905 3907 3421
+f 3421 3907 3420
+f 3908 3428 3423
+f 3423 3424 3908
+f 3908 3909 3428
+f 3424 3910 3908
+f 3909 3427 3428
+f 3424 3425 3910
+f 3426 3911 3425
+f 3425 3911 3910
+f 3909 3911 3427
+f 3427 3911 3426
+f 3912 3434 3429
+f 3429 3430 3912
+f 3912 3913 3434
+f 3430 3914 3912
+f 3913 3433 3434
+f 3430 3431 3914
+f 3432 3915 3431
+f 3431 3915 3914
+f 3913 3915 3433
+f 3433 3915 3432
+f 3916 3440 3435
+f 3435 3436 3916
+f 3916 3917 3440
+f 3436 3918 3916
+f 3917 3439 3440
+f 3436 3437 3918
+f 3438 3919 3437
+f 3437 3919 3918
+f 3917 3919 3439
+f 3439 3919 3438
+f 3920 3446 3441
+f 3441 3442 3920
+f 3920 3921 3446
+f 3442 3922 3920
+f 3921 3445 3446
+f 3442 3443 3922
+f 3444 3923 3443
+f 3443 3923 3922
+f 3921 3923 3445
+f 3445 3923 3444
+f 3924 3452 3447
+f 3447 3448 3924
+f 3924 3925 3452
+f 3448 3926 3924
+f 3925 3451 3452
+f 3448 3449 3926
+f 3450 3927 3449
+f 3449 3927 3926
+f 3925 3927 3451
+f 3451 3927 3450
+f 3928 3458 3453
+f 3453 3454 3928
+f 3928 3929 3458
+f 3454 3930 3928
+f 3929 3457 3458
+f 3454 3455 3930
+f 3456 3931 3455
+f 3455 3931 3930
+f 3929 3931 3457
+f 3457 3931 3456
+f 3932 3464 3459
+f 3459 3460 3932
+f 3932 3933 3464
+f 3460 3934 3932
+f 3933 3463 3464
+f 3460 3461 3934
+f 3462 3935 3461
+f 3461 3935 3934
+f 3933 3935 3463
+f 3463 3935 3462
+f 3936 3470 3465
+f 3465 3466 3936
+f 3936 3937 3470
+f 3466 3938 3936
+f 3937 3469 3470
+f 3466 3467 3938
+f 3468 3939 3467
+f 3467 3939 3938
+f 3937 3939 3469
+f 3469 3939 3468
+f 3940 3476 3471
+f 3471 3472 3940
+f 3940 3941 3476
+f 3472 3942 3940
+f 3941 3475 3476
+f 3472 3473 3942
+f 3474 3943 3473
+f 3473 3943 3942
+f 3941 3943 3475
+f 3475 3943 3474
+f 3944 3482 3477
+f 3477 3478 3944
+f 3944 3945 3482
+f 3478 3946 3944
+f 3945 3481 3482
+f 3478 3479 3946
+f 3480 3947 3479
+f 3479 3947 3946
+f 3945 3947 3481
+f 3481 3947 3480
+f 3948 3488 3483
+f 3483 3484 3948
+f 3948 3949 3488
+f 3484 3950 3948
+f 3949 3487 3488
+f 3484 3485 3950
+f 3486 3951 3485
+f 3485 3951 3950
+f 3949 3951 3487
+f 3487 3951 3486
+f 3952 3494 3489
+f 3489 3490 3952
+f 3952 3953 3494
+f 3490 3954 3952
+f 3953 3493 3494
+f 3490 3491 3954
+f 3492 3955 3491
+f 3491 3955 3954
+f 3953 3955 3493
+f 3493 3955 3492
+f 3956 3500 3495
+f 3495 3496 3956
+f 3956 3957 3500
+f 3496 3958 3956
+f 3957 3499 3500
+f 3496 3497 3958
+f 3498 3959 3497
+f 3497 3959 3958
+f 3957 3959 3499
+f 3499 3959 3498
+f 3960 3506 3501
+f 3501 3502 3960
+f 3960 3961 3506
+f 3502 3962 3960
+f 3961 3505 3506
+f 3502 3503 3962
+f 3504 3963 3503
+f 3503 3963 3962
+f 3961 3963 3505
+f 3505 3963 3504
+f 3964 3512 3507
+f 3507 3508 3964
+f 3964 3965 3512
+f 3508 3966 3964
+f 3965 3511 3512
+f 3508 3509 3966
+f 3510 3967 3509
+f 3509 3967 3966
+f 3965 3967 3511
+f 3511 3967 3510
+f 3968 3518 3513
+f 3513 3514 3968
+f 3968 3969 3518
+f 3514 3970 3968
+f 3969 3517 3518
+f 3514 3515 3970
+f 3516 3971 3515
+f 3515 3971 3970
+f 3969 3971 3517
+f 3517 3971 3516
+f 3972 3524 3519
+f 3519 3520 3972
+f 3972 3973 3524
+f 3520 3974 3972
+f 3973 3523 3524
+f 3520 3521 3974
+f 3522 3975 3521
+f 3521 3975 3974
+f 3973 3975 3523
+f 3523 3975 3522
+f 3976 3530 3525
+f 3525 3526 3976
+f 3976 3977 3530
+f 3526 3978 3976
+f 3977 3529 3530
+f 3526 3527 3978
+f 3528 3979 3527
+f 3527 3979 3978
+f 3977 3979 3529
+f 3529 3979 3528
+f 3980 3536 3531
+f 3531 3532 3980
+f 3980 3981 3536
+f 3532 3982 3980
+f 3981 3535 3536
+f 3532 3533 3982
+f 3534 3983 3533
+f 3533 3983 3982
+f 3981 3983 3535
+f 3535 3983 3534
+f 3984 3542 3537
+f 3537 3538 3984
+f 3984 3985 3542
+f 3538 3986 3984
+f 3985 3541 3542
+f 3538 3539 3986
+f 3540 3987 3539
+f 3539 3987 3986
+f 3985 3987 3541
+f 3541 3987 3540
+f 3988 3548 3543
+f 3543 3544 3988
+f 3988 3989 3548
+f 3544 3990 3988
+f 3989 3547 3548
+f 3544 3545 3990
+f 3546 3991 3545
+f 3545 3991 3990
+f 3989 3991 3547
+f 3547 3991 3546
+f 3992 3554 3549
+f 3549 3550 3992
+f 3992 3993 3554
+f 3550 3994 3992
+f 3993 3553 3554
+f 3550 3551 3994
+f 3552 3995 3551
+f 3551 3995 3994
+f 3993 3995 3553
+f 3553 3995 3552
+f 3996 3560 3555
+f 3555 3556 3996
+f 3996 3997 3560
+f 3556 3998 3996
+f 3997 3559 3560
+f 3556 3557 3998
+f 3558 3999 3557
+f 3557 3999 3998
+f 3997 3999 3559
+f 3559 3999 3558
+f 4000 3566 3561
+f 3561 3562 4000
+f 4000 4001 3566
+f 3562 4002 4000
+f 4001 3565 3566
+f 3562 3563 4002
+f 3564 4003 3563
+f 3563 4003 4002
+f 4001 4003 3565
+f 3565 4003 3564
+f 4004 3572 3567
+f 3567 3568 4004
+f 4004 4005 3572
+f 3568 4006 4004
+f 4005 3571 3572
+f 3568 3569 4006
+f 3570 4007 3569
+f 3569 4007 4006
+f 4005 4007 3571
+f 3571 4007 3570
+f 4008 3578 3573
+f 3573 3574 4008
+f 4008 4009 3578
+f 3574 4010 4008
+f 4009 3577 3578
+f 3574 3575 4010
+f 3576 4011 3575
+f 3575 4011 4010
+f 4009 4011 3577
+f 3577 4011 3576
+f 4012 3584 3579
+f 3579 3580 4012
+f 4012 4013 3584
+f 3580 4014 4012
+f 4013 3583 3584
+f 3580 3581 4014
+f 3582 4015 3581
+f 3581 4015 4014
+f 4013 4015 3583
+f 3583 4015 3582
+f 4016 3590 3585
+f 3585 3586 4016
+f 4016 4017 3590
+f 3586 4018 4016
+f 4017 3589 3590
+f 3586 3587 4018
+f 3588 4019 3587
+f 3587 4019 4018
+f 4017 4019 3589
+f 3589 4019 3588
+f 4020 3596 3591
+f 3591 3592 4020
+f 4020 4021 3596
+f 3592 4022 4020
+f 4021 3595 3596
+f 3592 3593 4022
+f 3594 4023 3593
+f 3593 4023 4022
+f 4021 4023 3595
+f 3595 4023 3594
+f 4024 3602 3597
+f 3597 3598 4024
+f 4024 4025 3602
+f 3598 4026 4024
+f 4025 3601 3602
+f 3598 3599 4026
+f 3600 4027 3599
+f 3599 4027 4026
+f 4025 4027 3601
+f 3601 4027 3600
+f 4028 3608 3603
+f 3603 3604 4028
+f 4028 4029 3608
+f 3604 4030 4028
+f 4029 3607 3608
+f 3604 3605 4030
+f 3606 4031 3605
+f 3605 4031 4030
+f 4029 4031 3607
+f 3607 4031 3606
+f 4032 3614 3609
+f 3609 3610 4032
+f 4032 4033 3614
+f 3610 4034 4032
+f 4033 3613 3614
+f 3610 3611 4034
+f 3612 4035 3611
+f 3611 4035 4034
+f 4033 4035 3613
+f 3613 4035 3612
+f 4036 3620 3615
+f 3615 3616 4036
+f 4036 4037 3620
+f 3616 4038 4036
+f 4037 3619 3620
+f 3616 3617 4038
+f 3618 4039 3617
+f 3617 4039 4038
+f 4037 4039 3619
+f 3619 4039 3618
+f 4040 3626 3621
+f 3621 3622 4040
+f 4040 4041 3626
+f 3622 4042 4040
+f 4041 3625 3626
+f 3622 3623 4042
+f 3624 4043 3623
+f 3623 4043 4042
+f 4041 4043 3625
+f 3625 4043 3624
+f 4044 3632 3627
+f 3627 3628 4044
+f 4044 4045 3632
+f 3628 4046 4044
+f 4045 3631 3632
+f 3628 3629 4046
+f 3630 4047 3629
+f 3629 4047 4046
+f 4045 4047 3631
+f 3631 4047 3630
+f 4048 3638 3633
+f 3633 3634 4048
+f 4048 4049 3638
+f 3634 4050 4048
+f 4049 3637 3638
+f 3634 3635 4050
+f 3636 4051 3635
+f 3635 4051 4050
+f 4049 4051 3637
+f 3637 4051 3636
+f 4052 3644 3639
+f 3639 3640 4052
+f 4052 4053 3644
+f 3640 4054 4052
+f 4053 3643 3644
+f 3640 3641 4054
+f 3642 4055 3641
+f 3641 4055 4054
+f 4053 4055 3643
+f 3643 4055 3642
+f 4056 3650 3645
+f 3645 3646 4056
+f 4056 4057 3650
+f 3646 4058 4056
+f 4057 3649 3650
+f 3646 3647 4058
+f 3648 4059 3647
+f 3647 4059 4058
+f 4057 4059 3649
+f 3649 4059 3648
+f 4060 3656 3651
+f 3651 3652 4060
+f 4060 4061 3656
+f 3652 4062 4060
+f 4061 3655 3656
+f 3652 3653 4062
+f 3654 4063 3653
+f 3653 4063 4062
+f 4061 4063 3655
+f 3655 4063 3654
+f 4064 3662 3657
+f 3657 3658 4064
+f 4064 4065 3662
+f 3658 4066 4064
+f 4065 3661 3662
+f 3658 3659 4066
+f 3660 4067 3659
+f 3659 4067 4066
+f 4065 4067 3661
+f 3661 4067 3660
+f 4068 3668 3663
+f 3663 3664 4068
+f 4068 4069 3668
+f 3664 4070 4068
+f 4069 3667 3668
+f 3664 3665 4070
+f 3666 4071 3665
+f 3665 4071 4070
+f 4069 4071 3667
+f 3667 4071 3666
+f 4072 3674 3669
+f 3669 3670 4072
+f 4072 4073 3674
+f 3670 4074 4072
+f 4073 3673 3674
+f 3670 3671 4074
+f 3672 4075 3671
+f 3671 4075 4074
+f 4073 4075 3673
+f 3673 4075 3672
+f 4076 3680 3675
+f 3675 3676 4076
+f 4076 4077 3680
+f 3676 4078 4076
+f 4077 3679 3680
+f 3676 3677 4078
+f 3678 4079 3677
+f 3677 4079 4078
+f 4077 4079 3679
+f 3679 4079 3678
+f 4080 3686 3681
+f 3681 3682 4080
+f 4080 4081 3686
+f 3682 4082 4080
+f 4081 3685 3686
+f 3682 3683 4082
+f 3684 4083 3683
+f 3683 4083 4082
+f 4081 4083 3685
+f 3685 4083 3684
+f 4084 3692 3687
+f 3687 3688 4084
+f 4084 4085 3692
+f 3688 4086 4084
+f 4085 3691 3692
+f 3688 3689 4086
+f 3690 4087 3689
+f 3689 4087 4086
+f 4085 4087 3691
+f 3691 4087 3690
+f 4088 3698 3693
+f 3693 3694 4088
+f 4088 4089 3698
+f 3694 4090 4088
+f 4089 3697 3698
+f 3694 3695 4090
+f 3696 4091 3695
+f 3695 4091 4090
+f 4089 4091 3697
+f 3697 4091 3696
+f 4092 3704 3699
+f 3699 3700 4092
+f 4092 4093 3704
+f 3700 4094 4092
+f 4093 3703 3704
+f 3700 3701 4094
+f 3702 4095 3701
+f 3701 4095 4094
+f 4093 4095 3703
+f 3703 4095 3702
+f 4096 3710 3705
+f 3705 3706 4096
+f 4096 4097 3710
+f 3706 4098 4096
+f 4097 3709 3710
+f 3706 3707 4098
+f 3708 4099 3707
+f 3707 4099 4098
+f 4097 4099 3709
+f 3709 4099 3708
+f 4100 3716 3711
+f 3711 3712 4100
+f 4100 4101 3716
+f 3712 4102 4100
+f 4101 3715 3716
+f 3712 3713 4102
+f 3714 4103 3713
+f 3713 4103 4102
+f 4101 4103 3715
+f 3715 4103 3714
+f 4104 3722 3717
+f 3717 3718 4104
+f 4104 4105 3722
+f 3718 4106 4104
+f 4105 3721 3722
+f 3718 3719 4106
+f 3720 4107 3719
+f 3719 4107 4106
+f 4105 4107 3721
+f 3721 4107 3720
+f 4108 3728 3723
+f 3723 3724 4108
+f 4108 4109 3728
+f 3724 4110 4108
+f 4109 3727 3728
+f 3724 3725 4110
+f 3726 4111 3725
+f 3725 4111 4110
+f 4109 4111 3727
+f 3727 4111 3726
+f 4112 3734 3729
+f 3729 3730 4112
+f 4112 4113 3734
+f 3730 4114 4112
+f 4113 3733 3734
+f 3730 3731 4114
+f 3732 4115 3731
+f 3731 4115 4114
+f 4113 4115 3733
+f 3733 4115 3732
+f 4116 3740 3735
+f 3735 3736 4116
+f 4116 4117 3740
+f 3736 4118 4116
+f 4117 3739 3740
+f 3736 3737 4118
+f 3738 4119 3737
+f 3737 4119 4118
+f 4117 4119 3739
+f 3739 4119 3738
+f 4120 3746 3741
+f 3741 3742 4120
+f 4120 4121 3746
+f 3742 4122 4120
+f 4121 3745 3746
+f 3742 3743 4122
+f 3744 4123 3743
+f 3743 4123 4122
+f 4121 4123 3745
+f 3745 4123 3744
+f 4124 3752 3747
+f 3747 3748 4124
+f 4124 4125 3752
+f 3748 4126 4124
+f 4125 3751 3752
+f 3748 3749 4126
+f 3750 4127 3749
+f 3749 4127 4126
+f 4125 4127 3751
+f 3751 4127 3750
+f 4128 3758 3753
+f 3753 3754 4128
+f 4128 4129 3758
+f 3754 4130 4128
+f 4129 3757 3758
+f 3754 3755 4130
+f 3756 4131 3755
+f 3755 4131 4130
+f 4129 4131 3757
+f 3757 4131 3756
+f 4132 3764 3759
+f 3759 3760 4132
+f 4132 4133 3764
+f 3760 4134 4132
+f 4133 3763 3764
+f 3760 3761 4134
+f 3762 4135 3761
+f 3761 4135 4134
+f 4133 4135 3763
+f 3763 4135 3762
+f 4136 3770 3765
+f 3765 3766 4136
+f 4136 4137 3770
+f 3766 4138 4136
+f 4137 3769 3770
+f 3766 3767 4138
+f 3768 4139 3767
+f 3767 4139 4138
+f 4137 4139 3769
+f 3769 4139 3768
+f 4140 3776 3771
+f 3771 3772 4140
+f 4140 4141 3776
+f 3772 4142 4140
+f 4141 3775 3776
+f 3772 3773 4142
+f 3774 4143 3773
+f 3773 4143 4142
+f 4141 4143 3775
+f 3775 4143 3774
+f 4144 3782 3777
+f 3777 3778 4144
+f 4144 4145 3782
+f 3778 4146 4144
+f 4145 3781 3782
+f 3778 3779 4146
+f 3780 4147 3779
+f 3779 4147 4146
+f 4145 4147 3781
+f 3781 4147 3780
+f 4148 3788 3783
+f 3783 3784 4148
+f 4148 4149 3788
+f 3784 4150 4148
+f 4149 3787 3788
+f 3784 3785 4150
+f 3786 4151 3785
+f 3785 4151 4150
+f 4149 4151 3787
+f 3787 4151 3786
+f 4152 3794 3789
+f 3789 3790 4152
+f 4152 4153 3794
+f 3790 4154 4152
+f 4153 3793 3794
+f 3790 3791 4154
+f 3792 4155 3791
+f 3791 4155 4154
+f 4153 4155 3793
+f 3793 4155 3792
+f 4156 3800 3795
+f 3795 3796 4156
+f 4156 4157 3800
+f 3796 4158 4156
+f 4157 3799 3800
+f 3796 3797 4158
+f 3798 4159 3797
+f 3797 4159 4158
+f 4157 4159 3799
+f 3799 4159 3798
+f 4160 3806 3801
+f 3801 3802 4160
+f 4160 4161 3806
+f 3802 4162 4160
+f 4161 3805 3806
+f 3802 3803 4162
+f 3804 4163 3803
+f 3803 4163 4162
+f 4161 4163 3805
+f 3805 4163 3804
+f 4164 3812 3807
+f 3807 3808 4164
+f 4164 4165 3812
+f 3808 4166 4164
+f 4165 3811 3812
+f 3808 3809 4166
+f 3810 4167 3809
+f 3809 4167 4166
+f 4165 4167 3811
+f 3811 4167 3810
+f 4168 3818 3813
+f 3813 3814 4168
+f 4168 4169 3818
+f 3814 4170 4168
+f 4169 3817 3818
+f 3814 3815 4170
+f 3816 4171 3815
+f 3815 4171 4170
+f 4169 4171 3817
+f 3817 4171 3816
+f 4172 3824 3819
+f 3819 3820 4172
+f 4172 4173 3824
+f 3820 4174 4172
+f 4173 3823 3824
+f 3820 3821 4174
+f 3822 4175 3821
+f 3821 4175 4174
+f 4173 4175 3823
+f 3823 4175 3822
+f 3826 3825 4176
+f 4177 3826 4176
+f 3827 3826 4177
+f 4178 3827 4177
+f 3828 3827 4178
+f 4179 3828 4178
+f 3829 3828 4179
+f 4180 3829 4179
+f 3830 3829 4180
+f 4181 3830 4180
+f 3831 3830 4181
+f 4182 3831 4181
+f 3832 3831 4182
+f 4183 3832 4182
+f 3833 3832 4183
+f 4184 3833 4183
+f 3834 3833 4184
+f 4185 3834 4184
+f 3835 3834 4185
+f 4186 3835 4185
+f 3836 3835 4186
+f 4187 3836 4186
+f 3837 3836 4187
+f 4188 3837 4187
+f 3838 3837 4188
+f 4189 3838 4188
+f 3839 3838 4189
+f 4190 3839 4189
+f 3840 3839 4190
+f 4191 3840 4190
+f 3841 3840 4191
+f 4192 3841 4191
+f 3842 3841 4192
+f 4193 3842 4192
+f 3843 3842 4193
+f 4194 3843 4193
+f 3844 3843 4194
+f 4195 3844 4194
+f 3845 3844 4195
+f 4196 3845 4195
+f 3846 3845 4196
+f 4197 3846 4196
+f 3847 3846 4197
+f 4198 3847 4197
+f 3848 3847 4198
+f 4199 3848 4198
+f 3849 3848 4199
+f 4200 3849 4199
+f 3850 3849 4200
+f 4201 3850 4200
+f 3851 3850 4201
+f 4202 3851 4201
+f 3852 3851 4202
+f 4203 3852 4202
+f 4204 3853 3852
+f 4204 3852 4203
+f 4205 3854 3853
+f 4205 3853 4204
+f 4206 3855 3854
+f 4206 3854 4205
+f 4176 3825 3855
+f 4176 3855 4206
+f 3857 3856 4207
+f 4207 3856 4208
+f 3859 3857 4209
+f 4209 3857 4207
+f 3856 3858 4208
+f 4208 3858 4210
+f 3858 3859 4210
+f 4210 3859 4209
+f 3861 3860 4211
+f 4211 3860 4212
+f 3863 3861 4213
+f 4213 3861 4211
+f 3860 3862 4212
+f 4212 3862 4214
+f 3862 3863 4214
+f 4214 3863 4213
+f 3865 3864 4215
+f 4215 3864 4216
+f 3867 3865 4217
+f 4217 3865 4215
+f 3864 3866 4216
+f 4216 3866 4218
+f 3866 3867 4218
+f 4218 3867 4217
+f 3869 3868 4219
+f 4219 3868 4220
+f 3871 3869 4221
+f 4221 3869 4219
+f 3868 3870 4220
+f 4220 3870 4222
+f 3870 3871 4222
+f 4222 3871 4221
+f 3873 3872 4223
+f 4223 3872 4224
+f 3875 3873 4225
+f 4225 3873 4223
+f 3872 3874 4224
+f 4224 3874 4226
+f 3874 3875 4226
+f 4226 3875 4225
+f 3877 3876 4227
+f 4227 3876 4228
+f 3879 3877 4229
+f 4229 3877 4227
+f 3876 3878 4228
+f 4228 3878 4230
+f 3878 3879 4230
+f 4230 3879 4229
+f 3881 3880 4231
+f 4231 3880 4232
+f 3883 3881 4233
+f 4233 3881 4231
+f 3880 3882 4232
+f 4232 3882 4234
+f 3882 3883 4234
+f 4234 3883 4233
+f 3885 3884 4235
+f 4235 3884 4236
+f 3887 3885 4237
+f 4237 3885 4235
+f 3884 3886 4236
+f 4236 3886 4238
+f 3886 3887 4238
+f 4238 3887 4237
+f 3889 3888 4239
+f 4239 3888 4240
+f 3891 3889 4241
+f 4241 3889 4239
+f 3888 3890 4240
+f 4240 3890 4242
+f 3890 3891 4242
+f 4242 3891 4241
+f 3893 3892 4243
+f 4243 3892 4244
+f 3895 3893 4245
+f 4245 3893 4243
+f 3892 3894 4244
+f 4244 3894 4246
+f 3894 3895 4246
+f 4246 3895 4245
+f 3897 3896 4247
+f 4247 3896 4248
+f 3899 3897 4249
+f 4249 3897 4247
+f 3896 3898 4248
+f 4248 3898 4250
+f 3898 3899 4250
+f 4250 3899 4249
+f 3901 3900 4251
+f 4251 3900 4252
+f 3903 3901 4253
+f 4253 3901 4251
+f 3900 3902 4252
+f 4252 3902 4254
+f 3902 3903 4254
+f 4254 3903 4253
+f 3905 3904 4255
+f 4255 3904 4256
+f 3907 3905 4257
+f 4257 3905 4255
+f 3904 3906 4256
+f 4256 3906 4258
+f 3906 3907 4258
+f 4258 3907 4257
+f 3909 3908 4259
+f 4259 3908 4260
+f 3911 3909 4261
+f 4261 3909 4259
+f 3908 3910 4260
+f 4260 3910 4262
+f 3910 3911 4262
+f 4262 3911 4261
+f 3913 3912 4263
+f 4263 3912 4264
+f 3915 3913 4265
+f 4265 3913 4263
+f 3912 3914 4264
+f 4264 3914 4266
+f 3914 3915 4266
+f 4266 3915 4265
+f 3917 3916 4267
+f 4267 3916 4268
+f 3919 3917 4269
+f 4269 3917 4267
+f 3916 3918 4268
+f 4268 3918 4270
+f 3918 3919 4270
+f 4270 3919 4269
+f 3921 3920 4271
+f 4271 3920 4272
+f 3923 3921 4273
+f 4273 3921 4271
+f 3920 3922 4272
+f 4272 3922 4274
+f 3922 3923 4274
+f 4274 3923 4273
+f 3925 3924 4275
+f 4275 3924 4276
+f 3927 3925 4277
+f 4277 3925 4275
+f 3924 3926 4276
+f 4276 3926 4278
+f 3926 3927 4278
+f 4278 3927 4277
+f 3929 3928 4279
+f 4279 3928 4280
+f 3931 3929 4281
+f 4281 3929 4279
+f 3928 3930 4280
+f 4280 3930 4282
+f 3930 3931 4282
+f 4282 3931 4281
+f 3933 3932 4283
+f 4283 3932 4284
+f 3935 3933 4285
+f 4285 3933 4283
+f 3932 3934 4284
+f 4284 3934 4286
+f 3934 3935 4286
+f 4286 3935 4285
+f 3937 3936 4287
+f 4287 3936 4288
+f 3939 3937 4289
+f 4289 3937 4287
+f 3936 3938 4288
+f 4288 3938 4290
+f 3938 3939 4290
+f 4290 3939 4289
+f 3941 3940 4291
+f 4291 3940 4292
+f 3943 3941 4293
+f 4293 3941 4291
+f 3940 3942 4292
+f 4292 3942 4294
+f 3942 3943 4294
+f 4294 3943 4293
+f 3945 3944 4295
+f 4295 3944 4296
+f 3947 3945 4297
+f 4297 3945 4295
+f 3944 3946 4296
+f 4296 3946 4298
+f 3946 3947 4298
+f 4298 3947 4297
+f 3949 3948 4299
+f 4299 3948 4300
+f 3951 3949 4301
+f 4301 3949 4299
+f 3948 3950 4300
+f 4300 3950 4302
+f 3950 3951 4302
+f 4302 3951 4301
+f 3953 3952 4303
+f 4303 3952 4304
+f 3955 3953 4305
+f 4305 3953 4303
+f 3952 3954 4304
+f 4304 3954 4306
+f 3954 3955 4306
+f 4306 3955 4305
+f 3957 3956 4307
+f 4307 3956 4308
+f 3959 3957 4309
+f 4309 3957 4307
+f 3956 3958 4308
+f 4308 3958 4310
+f 3958 3959 4310
+f 4310 3959 4309
+f 3961 3960 4311
+f 4311 3960 4312
+f 3963 3961 4313
+f 4313 3961 4311
+f 3960 3962 4312
+f 4312 3962 4314
+f 3962 3963 4314
+f 4314 3963 4313
+f 3965 3964 4315
+f 4315 3964 4316
+f 3967 3965 4317
+f 4317 3965 4315
+f 3964 3966 4316
+f 4316 3966 4318
+f 3966 3967 4318
+f 4318 3967 4317
+f 3969 3968 4319
+f 4319 3968 4320
+f 3971 3969 4321
+f 4321 3969 4319
+f 3968 3970 4320
+f 4320 3970 4322
+f 3970 3971 4322
+f 4322 3971 4321
+f 3973 3972 4323
+f 4323 3972 4324
+f 3975 3973 4325
+f 4325 3973 4323
+f 3972 3974 4324
+f 4324 3974 4326
+f 3974 3975 4326
+f 4326 3975 4325
+f 3977 3976 4327
+f 4327 3976 4328
+f 3979 3977 4329
+f 4329 3977 4327
+f 3976 3978 4328
+f 4328 3978 4330
+f 3978 3979 4330
+f 4330 3979 4329
+f 3981 3980 4331
+f 4331 3980 4332
+f 3983 3981 4333
+f 4333 3981 4331
+f 3980 3982 4332
+f 4332 3982 4334
+f 3982 3983 4334
+f 4334 3983 4333
+f 3985 3984 4335
+f 4335 3984 4336
+f 3987 3985 4337
+f 4337 3985 4335
+f 3984 3986 4336
+f 4336 3986 4338
+f 3986 3987 4338
+f 4338 3987 4337
+f 3989 3988 4339
+f 4339 3988 4340
+f 3991 3989 4341
+f 4341 3989 4339
+f 3988 3990 4340
+f 4340 3990 4342
+f 3990 3991 4342
+f 4342 3991 4341
+f 3993 3992 4343
+f 4343 3992 4344
+f 3995 3993 4345
+f 4345 3993 4343
+f 3992 3994 4344
+f 4344 3994 4346
+f 3994 3995 4346
+f 4346 3995 4345
+f 3997 3996 4347
+f 4347 3996 4348
+f 3999 3997 4349
+f 4349 3997 4347
+f 3996 3998 4348
+f 4348 3998 4350
+f 3998 3999 4350
+f 4350 3999 4349
+f 4001 4000 4351
+f 4351 4000 4352
+f 4003 4001 4353
+f 4353 4001 4351
+f 4000 4002 4352
+f 4352 4002 4354
+f 4002 4003 4354
+f 4354 4003 4353
+f 4005 4004 4355
+f 4355 4004 4356
+f 4007 4005 4357
+f 4357 4005 4355
+f 4004 4006 4356
+f 4356 4006 4358
+f 4006 4007 4358
+f 4358 4007 4357
+f 4009 4008 4359
+f 4359 4008 4360
+f 4011 4009 4361
+f 4361 4009 4359
+f 4008 4010 4360
+f 4360 4010 4362
+f 4010 4011 4362
+f 4362 4011 4361
+f 4013 4012 4363
+f 4363 4012 4364
+f 4015 4013 4365
+f 4365 4013 4363
+f 4012 4014 4364
+f 4364 4014 4366
+f 4014 4015 4366
+f 4366 4015 4365
+f 4017 4016 4367
+f 4367 4016 4368
+f 4019 4017 4369
+f 4369 4017 4367
+f 4016 4018 4368
+f 4368 4018 4370
+f 4018 4019 4370
+f 4370 4019 4369
+f 4021 4020 4371
+f 4371 4020 4372
+f 4023 4021 4373
+f 4373 4021 4371
+f 4020 4022 4372
+f 4372 4022 4374
+f 4022 4023 4374
+f 4374 4023 4373
+f 4025 4024 4375
+f 4375 4024 4376
+f 4027 4025 4377
+f 4377 4025 4375
+f 4024 4026 4376
+f 4376 4026 4378
+f 4026 4027 4378
+f 4378 4027 4377
+f 4029 4028 4379
+f 4379 4028 4380
+f 4031 4029 4381
+f 4381 4029 4379
+f 4028 4030 4380
+f 4380 4030 4382
+f 4030 4031 4382
+f 4382 4031 4381
+f 4033 4032 4383
+f 4383 4032 4384
+f 4035 4033 4385
+f 4385 4033 4383
+f 4032 4034 4384
+f 4384 4034 4386
+f 4034 4035 4386
+f 4386 4035 4385
+f 4037 4036 4387
+f 4387 4036 4388
+f 4039 4037 4389
+f 4389 4037 4387
+f 4036 4038 4388
+f 4388 4038 4390
+f 4038 4039 4390
+f 4390 4039 4389
+f 4041 4040 4391
+f 4391 4040 4392
+f 4043 4041 4393
+f 4393 4041 4391
+f 4040 4042 4392
+f 4392 4042 4394
+f 4042 4043 4394
+f 4394 4043 4393
+f 4045 4044 4395
+f 4395 4044 4396
+f 4047 4045 4397
+f 4397 4045 4395
+f 4044 4046 4396
+f 4396 4046 4398
+f 4046 4047 4398
+f 4398 4047 4397
+f 4049 4048 4399
+f 4399 4048 4400
+f 4051 4049 4401
+f 4401 4049 4399
+f 4048 4050 4400
+f 4400 4050 4402
+f 4050 4051 4402
+f 4402 4051 4401
+f 4053 4052 4403
+f 4403 4052 4404
+f 4055 4053 4405
+f 4405 4053 4403
+f 4052 4054 4404
+f 4404 4054 4406
+f 4054 4055 4406
+f 4406 4055 4405
+f 4057 4056 4407
+f 4407 4056 4408
+f 4059 4057 4409
+f 4409 4057 4407
+f 4056 4058 4408
+f 4408 4058 4410
+f 4058 4059 4410
+f 4410 4059 4409
+f 4061 4060 4411
+f 4411 4060 4412
+f 4063 4061 4413
+f 4413 4061 4411
+f 4060 4062 4412
+f 4412 4062 4414
+f 4062 4063 4414
+f 4414 4063 4413
+f 4065 4064 4415
+f 4415 4064 4416
+f 4067 4065 4417
+f 4417 4065 4415
+f 4064 4066 4416
+f 4416 4066 4418
+f 4066 4067 4418
+f 4418 4067 4417
+f 4069 4068 4419
+f 4419 4068 4420
+f 4071 4069 4421
+f 4421 4069 4419
+f 4068 4070 4420
+f 4420 4070 4422
+f 4070 4071 4422
+f 4422 4071 4421
+f 4073 4072 4423
+f 4423 4072 4424
+f 4075 4073 4425
+f 4425 4073 4423
+f 4072 4074 4424
+f 4424 4074 4426
+f 4074 4075 4426
+f 4426 4075 4425
+f 4077 4076 4427
+f 4427 4076 4428
+f 4079 4077 4429
+f 4429 4077 4427
+f 4076 4078 4428
+f 4428 4078 4430
+f 4078 4079 4430
+f 4430 4079 4429
+f 4081 4080 4431
+f 4431 4080 4432
+f 4083 4081 4433
+f 4433 4081 4431
+f 4080 4082 4432
+f 4432 4082 4434
+f 4082 4083 4434
+f 4434 4083 4433
+f 4085 4084 4435
+f 4435 4084 4436
+f 4087 4085 4437
+f 4437 4085 4435
+f 4084 4086 4436
+f 4436 4086 4438
+f 4086 4087 4438
+f 4438 4087 4437
+f 4089 4088 4439
+f 4439 4088 4440
+f 4091 4089 4441
+f 4441 4089 4439
+f 4088 4090 4440
+f 4440 4090 4442
+f 4090 4091 4442
+f 4442 4091 4441
+f 4093 4092 4443
+f 4443 4092 4444
+f 4095 4093 4445
+f 4445 4093 4443
+f 4092 4094 4444
+f 4444 4094 4446
+f 4094 4095 4446
+f 4446 4095 4445
+f 4097 4096 4447
+f 4447 4096 4448
+f 4099 4097 4449
+f 4449 4097 4447
+f 4096 4098 4448
+f 4448 4098 4450
+f 4098 4099 4450
+f 4450 4099 4449
+f 4101 4100 4451
+f 4451 4100 4452
+f 4103 4101 4453
+f 4453 4101 4451
+f 4100 4102 4452
+f 4452 4102 4454
+f 4102 4103 4454
+f 4454 4103 4453
+f 4105 4104 4455
+f 4455 4104 4456
+f 4107 4105 4457
+f 4457 4105 4455
+f 4104 4106 4456
+f 4456 4106 4458
+f 4106 4107 4458
+f 4458 4107 4457
+f 4109 4108 4459
+f 4459 4108 4460
+f 4111 4109 4461
+f 4461 4109 4459
+f 4108 4110 4460
+f 4460 4110 4462
+f 4110 4111 4462
+f 4462 4111 4461
+f 4113 4112 4463
+f 4463 4112 4464
+f 4115 4113 4465
+f 4465 4113 4463
+f 4112 4114 4464
+f 4464 4114 4466
+f 4114 4115 4466
+f 4466 4115 4465
+f 4117 4116 4467
+f 4467 4116 4468
+f 4119 4117 4469
+f 4469 4117 4467
+f 4116 4118 4468
+f 4468 4118 4470
+f 4118 4119 4470
+f 4470 4119 4469
+f 4121 4120 4471
+f 4471 4120 4472
+f 4123 4121 4473
+f 4473 4121 4471
+f 4120 4122 4472
+f 4472 4122 4474
+f 4122 4123 4474
+f 4474 4123 4473
+f 4125 4124 4475
+f 4475 4124 4476
+f 4127 4125 4477
+f 4477 4125 4475
+f 4124 4126 4476
+f 4476 4126 4478
+f 4126 4127 4478
+f 4478 4127 4477
+f 4129 4128 4479
+f 4479 4128 4480
+f 4131 4129 4481
+f 4481 4129 4479
+f 4128 4130 4480
+f 4480 4130 4482
+f 4130 4131 4482
+f 4482 4131 4481
+f 4133 4132 4483
+f 4483 4132 4484
+f 4135 4133 4485
+f 4485 4133 4483
+f 4132 4134 4484
+f 4484 4134 4486
+f 4134 4135 4486
+f 4486 4135 4485
+f 4137 4136 4487
+f 4487 4136 4488
+f 4139 4137 4489
+f 4489 4137 4487
+f 4136 4138 4488
+f 4488 4138 4490
+f 4138 4139 4490
+f 4490 4139 4489
+f 4141 4140 4491
+f 4491 4140 4492
+f 4143 4141 4493
+f 4493 4141 4491
+f 4140 4142 4492
+f 4492 4142 4494
+f 4142 4143 4494
+f 4494 4143 4493
+f 4145 4144 4495
+f 4495 4144 4496
+f 4147 4145 4497
+f 4497 4145 4495
+f 4144 4146 4496
+f 4496 4146 4498
+f 4146 4147 4498
+f 4498 4147 4497
+f 4149 4148 4499
+f 4499 4148 4500
+f 4151 4149 4501
+f 4501 4149 4499
+f 4148 4150 4500
+f 4500 4150 4502
+f 4150 4151 4502
+f 4502 4151 4501
+f 4153 4152 4503
+f 4503 4152 4504
+f 4155 4153 4505
+f 4505 4153 4503
+f 4152 4154 4504
+f 4504 4154 4506
+f 4154 4155 4506
+f 4506 4155 4505
+f 4157 4156 4507
+f 4507 4156 4508
+f 4159 4157 4509
+f 4509 4157 4507
+f 4156 4158 4508
+f 4508 4158 4510
+f 4158 4159 4510
+f 4510 4159 4509
+f 4161 4160 4511
+f 4511 4160 4512
+f 4163 4161 4513
+f 4513 4161 4511
+f 4160 4162 4512
+f 4512 4162 4514
+f 4162 4163 4514
+f 4514 4163 4513
+f 4165 4164 4515
+f 4515 4164 4516
+f 4167 4165 4517
+f 4517 4165 4515
+f 4164 4166 4516
+f 4516 4166 4518
+f 4166 4167 4518
+f 4518 4167 4517
+f 4169 4168 4519
+f 4519 4168 4520
+f 4171 4169 4521
+f 4521 4169 4519
+f 4168 4170 4520
+f 4520 4170 4522
+f 4170 4171 4522
+f 4522 4171 4521
+f 4173 4172 4523
+f 4523 4172 4524
+f 4175 4173 4525
+f 4525 4173 4523
+f 4172 4174 4524
+f 4524 4174 4526
+f 4174 4175 4526
+f 4526 4175 4525
+f 4177 4176 4527
+f 4528 4177 4527
+f 4178 4177 4528
+f 4529 4178 4528
+f 4179 4178 4529
+f 4530 4179 4529
+f 4180 4179 4530
+f 4531 4180 4530
+f 4181 4180 4531
+f 4532 4181 4531
+f 4182 4181 4532
+f 4533 4182 4532
+f 4183 4182 4533
+f 4534 4183 4533
+f 4184 4183 4534
+f 4535 4184 4534
+f 4185 4184 4535
+f 4536 4185 4535
+f 4186 4185 4536
+f 4537 4186 4536
+f 4187 4186 4537
+f 4538 4187 4537
+f 4188 4187 4538
+f 4539 4188 4538
+f 4189 4188 4539
+f 4540 4189 4539
+f 4190 4189 4540
+f 4541 4190 4540
+f 4191 4190 4541
+f 4542 4191 4541
+f 4192 4191 4542
+f 4543 4192 4542
+f 4193 4192 4543
+f 4544 4193 4543
+f 4194 4193 4544
+f 4545 4194 4544
+f 4195 4194 4545
+f 4546 4195 4545
+f 4196 4195 4546
+f 4547 4196 4546
+f 4197 4196 4547
+f 4548 4197 4547
+f 4198 4197 4548
+f 4549 4198 4548
+f 4199 4198 4549
+f 4550 4199 4549
+f 4200 4199 4550
+f 4551 4200 4550
+f 4201 4200 4551
+f 4552 4201 4551
+f 4202 4201 4552
+f 4553 4202 4552
+f 4203 4202 4553
+f 4554 4203 4553
+f 4204 4203 4554
+f 4555 4204 4554
+f 4205 4204 4555
+f 4556 4205 4555
+f 4206 4205 4556
+f 4557 4206 4556
+f 4176 4206 4557
+f 4527 4176 4557
+f 4558 4208 4559
+f 4560 4559 4208
+f 4207 4208 4558
+f 4210 4560 4208
+f 4561 4207 4558
+f 4562 4560 4210
+f 4209 4561 4563
+f 4209 4563 4562
+f 4209 4207 4561
+f 4209 4562 4210
+f 4564 4212 4565
+f 4566 4565 4212
+f 4211 4212 4564
+f 4214 4566 4212
+f 4567 4211 4564
+f 4568 4566 4214
+f 4213 4567 4569
+f 4213 4569 4568
+f 4213 4211 4567
+f 4213 4568 4214
+f 4570 4216 4571
+f 4572 4571 4216
+f 4218 4572 4216
+f 4215 4216 4570
+f 4573 4215 4570
+f 4574 4572 4218
+f 4217 4573 4575
+f 4217 4575 4574
+f 4217 4215 4573
+f 4217 4574 4218
+f 4576 4220 4577
+f 4578 4577 4220
+f 4222 4578 4220
+f 4219 4220 4576
+f 4579 4219 4576
+f 4580 4578 4222
+f 4221 4579 4581
+f 4221 4581 4580
+f 4221 4219 4579
+f 4221 4580 4222
+f 4582 4224 4583
+f 4584 4583 4224
+f 4223 4224 4582
+f 4226 4584 4224
+f 4585 4223 4582
+f 4586 4584 4226
+f 4225 4585 4587
+f 4225 4587 4586
+f 4225 4223 4585
+f 4225 4586 4226
+f 4588 4228 4589
+f 4590 4589 4228
+f 4230 4590 4228
+f 4227 4228 4588
+f 4591 4227 4588
+f 4592 4590 4230
+f 4229 4591 4593
+f 4229 4593 4592
+f 4229 4227 4591
+f 4229 4592 4230
+f 4594 4232 4595
+f 4596 4595 4232
+f 4231 4232 4594
+f 4234 4596 4232
+f 4597 4231 4594
+f 4598 4596 4234
+f 4233 4597 4599
+f 4233 4599 4598
+f 4233 4231 4597
+f 4233 4598 4234
+f 4600 4236 4601
+f 4602 4601 4236
+f 4238 4602 4236
+f 4235 4236 4600
+f 4603 4235 4600
+f 4604 4602 4238
+f 4237 4603 4605
+f 4237 4605 4604
+f 4237 4235 4603
+f 4237 4604 4238
+f 4606 4240 4607
+f 4608 4607 4240
+f 4239 4240 4606
+f 4242 4608 4240
+f 4609 4239 4606
+f 4610 4608 4242
+f 4241 4609 4611
+f 4241 4611 4610
+f 4241 4239 4609
+f 4241 4610 4242
+f 4612 4244 4613
+f 4614 4613 4244
+f 4243 4244 4612
+f 4246 4614 4244
+f 4615 4243 4612
+f 4616 4614 4246
+f 4245 4615 4617
+f 4245 4617 4616
+f 4245 4243 4615
+f 4245 4616 4246
+f 4618 4248 4619
+f 4620 4619 4248
+f 4247 4248 4618
+f 4250 4620 4248
+f 4621 4247 4618
+f 4622 4620 4250
+f 4249 4621 4623
+f 4249 4623 4622
+f 4249 4247 4621
+f 4249 4622 4250
+f 4624 4252 4625
+f 4626 4625 4252
+f 4251 4252 4624
+f 4254 4626 4252
+f 4627 4251 4624
+f 4628 4626 4254
+f 4253 4627 4629
+f 4253 4629 4628
+f 4253 4251 4627
+f 4253 4628 4254
+f 4630 4256 4631
+f 4632 4631 4256
+f 4255 4256 4630
+f 4258 4632 4256
+f 4633 4255 4630
+f 4634 4632 4258
+f 4257 4633 4635
+f 4257 4635 4634
+f 4257 4255 4633
+f 4257 4634 4258
+f 4636 4260 4637
+f 4638 4637 4260
+f 4259 4260 4636
+f 4262 4638 4260
+f 4639 4259 4636
+f 4640 4638 4262
+f 4261 4639 4641
+f 4261 4641 4640
+f 4261 4259 4639
+f 4261 4640 4262
+f 4642 4264 4643
+f 4644 4643 4264
+f 4266 4644 4264
+f 4263 4264 4642
+f 4645 4263 4642
+f 4646 4644 4266
+f 4265 4645 4647
+f 4265 4647 4646
+f 4265 4263 4645
+f 4265 4646 4266
+f 4648 4268 4649
+f 4650 4649 4268
+f 4267 4268 4648
+f 4270 4650 4268
+f 4651 4267 4648
+f 4652 4650 4270
+f 4269 4651 4653
+f 4269 4653 4652
+f 4269 4267 4651
+f 4269 4652 4270
+f 4654 4272 4655
+f 4656 4655 4272
+f 4274 4656 4272
+f 4271 4272 4654
+f 4657 4271 4654
+f 4658 4656 4274
+f 4273 4657 4659
+f 4273 4659 4658
+f 4273 4271 4657
+f 4273 4658 4274
+f 4660 4276 4661
+f 4662 4661 4276
+f 4278 4662 4276
+f 4275 4276 4660
+f 4663 4275 4660
+f 4664 4662 4278
+f 4277 4663 4665
+f 4277 4665 4664
+f 4277 4275 4663
+f 4277 4664 4278
+f 4666 4280 4667
+f 4668 4667 4280
+f 4282 4668 4280
+f 4279 4280 4666
+f 4669 4279 4666
+f 4670 4668 4282
+f 4281 4669 4671
+f 4281 4671 4670
+f 4281 4279 4669
+f 4281 4670 4282
+f 4672 4284 4673
+f 4674 4673 4284
+f 4283 4284 4672
+f 4286 4674 4284
+f 4675 4283 4672
+f 4676 4674 4286
+f 4285 4675 4677
+f 4285 4677 4676
+f 4285 4283 4675
+f 4285 4676 4286
+f 4678 4288 4679
+f 4680 4679 4288
+f 4287 4288 4678
+f 4290 4680 4288
+f 4681 4287 4678
+f 4682 4680 4290
+f 4289 4681 4683
+f 4289 4683 4682
+f 4289 4287 4681
+f 4289 4682 4290
+f 4684 4292 4685
+f 4686 4685 4292
+f 4294 4686 4292
+f 4291 4292 4684
+f 4687 4291 4684
+f 4688 4686 4294
+f 4293 4687 4689
+f 4293 4689 4688
+f 4293 4291 4687
+f 4293 4688 4294
+f 4690 4296 4691
+f 4692 4691 4296
+f 4295 4296 4690
+f 4298 4692 4296
+f 4693 4295 4690
+f 4694 4692 4298
+f 4297 4693 4695
+f 4297 4695 4694
+f 4297 4295 4693
+f 4297 4694 4298
+f 4696 4300 4697
+f 4698 4697 4300
+f 4299 4300 4696
+f 4302 4698 4300
+f 4699 4299 4696
+f 4700 4698 4302
+f 4301 4699 4701
+f 4301 4701 4700
+f 4301 4299 4699
+f 4301 4700 4302
+f 4702 4304 4703
+f 4704 4703 4304
+f 4303 4304 4702
+f 4306 4704 4304
+f 4705 4303 4702
+f 4706 4704 4306
+f 4305 4705 4707
+f 4305 4707 4706
+f 4305 4303 4705
+f 4305 4706 4306
+f 4708 4308 4709
+f 4710 4709 4308
+f 4310 4710 4308
+f 4307 4308 4708
+f 4711 4307 4708
+f 4712 4710 4310
+f 4309 4711 4713
+f 4309 4713 4712
+f 4309 4307 4711
+f 4309 4712 4310
+f 4714 4312 4715
+f 4716 4715 4312
+f 4311 4312 4714
+f 4314 4716 4312
+f 4717 4311 4714
+f 4718 4716 4314
+f 4313 4717 4719
+f 4313 4719 4718
+f 4313 4311 4717
+f 4313 4718 4314
+f 4720 4316 4721
+f 4722 4721 4316
+f 4315 4316 4720
+f 4318 4722 4316
+f 4723 4315 4720
+f 4724 4722 4318
+f 4317 4723 4725
+f 4317 4725 4724
+f 4317 4315 4723
+f 4317 4724 4318
+f 4726 4320 4727
+f 4728 4727 4320
+f 4322 4728 4320
+f 4319 4320 4726
+f 4729 4319 4726
+f 4730 4728 4322
+f 4321 4729 4731
+f 4321 4731 4730
+f 4321 4319 4729
+f 4321 4730 4322
+f 4732 4324 4733
+f 4734 4733 4324
+f 4323 4324 4732
+f 4326 4734 4324
+f 4735 4323 4732
+f 4736 4734 4326
+f 4325 4735 4737
+f 4325 4737 4736
+f 4325 4323 4735
+f 4325 4736 4326
+f 4738 4328 4739
+f 4740 4739 4328
+f 4327 4328 4738
+f 4330 4740 4328
+f 4741 4327 4738
+f 4742 4740 4330
+f 4329 4741 4743
+f 4329 4743 4742
+f 4329 4327 4741
+f 4329 4742 4330
+f 4744 4332 4745
+f 4746 4745 4332
+f 4331 4332 4744
+f 4334 4746 4332
+f 4747 4331 4744
+f 4748 4746 4334
+f 4333 4747 4749
+f 4333 4749 4748
+f 4333 4331 4747
+f 4333 4748 4334
+f 4750 4336 4751
+f 4752 4751 4336
+f 4335 4336 4750
+f 4338 4752 4336
+f 4753 4335 4750
+f 4754 4752 4338
+f 4337 4753 4755
+f 4337 4755 4754
+f 4337 4335 4753
+f 4337 4754 4338
+f 4756 4340 4757
+f 4758 4757 4340
+f 4342 4758 4340
+f 4339 4340 4756
+f 4759 4339 4756
+f 4760 4758 4342
+f 4341 4759 4761
+f 4341 4761 4760
+f 4341 4339 4759
+f 4341 4760 4342
+f 4762 4344 4763
+f 4764 4763 4344
+f 4346 4764 4344
+f 4343 4344 4762
+f 4765 4343 4762
+f 4766 4764 4346
+f 4345 4765 4767
+f 4345 4767 4766
+f 4345 4343 4765
+f 4345 4766 4346
+f 4768 4348 4769
+f 4770 4769 4348
+f 4347 4348 4768
+f 4350 4770 4348
+f 4771 4347 4768
+f 4772 4770 4350
+f 4349 4771 4773
+f 4349 4773 4772
+f 4349 4347 4771
+f 4349 4772 4350
+f 4774 4352 4775
+f 4776 4775 4352
+f 4351 4352 4774
+f 4354 4776 4352
+f 4777 4351 4774
+f 4778 4776 4354
+f 4353 4777 4779
+f 4353 4779 4778
+f 4353 4351 4777
+f 4353 4778 4354
+f 4780 4356 4781
+f 4782 4781 4356
+f 4355 4356 4780
+f 4358 4782 4356
+f 4783 4355 4780
+f 4784 4782 4358
+f 4357 4783 4785
+f 4357 4785 4784
+f 4357 4355 4783
+f 4357 4784 4358
+f 4786 4360 4787
+f 4788 4787 4360
+f 4362 4788 4360
+f 4359 4360 4786
+f 4789 4359 4786
+f 4790 4788 4362
+f 4361 4789 4791
+f 4361 4791 4790
+f 4361 4359 4789
+f 4361 4790 4362
+f 4792 4364 4793
+f 4794 4793 4364
+f 4363 4364 4792
+f 4366 4794 4364
+f 4795 4363 4792
+f 4796 4794 4366
+f 4365 4795 4797
+f 4365 4797 4796
+f 4365 4363 4795
+f 4365 4796 4366
+f 4798 4368 4799
+f 4800 4799 4368
+f 4367 4368 4798
+f 4370 4800 4368
+f 4801 4367 4798
+f 4802 4800 4370
+f 4369 4801 4803
+f 4369 4803 4802
+f 4369 4367 4801
+f 4369 4802 4370
+f 4804 4372 4805
+f 4806 4805 4372
+f 4371 4372 4804
+f 4374 4806 4372
+f 4807 4371 4804
+f 4808 4806 4374
+f 4373 4807 4809
+f 4373 4809 4808
+f 4373 4371 4807
+f 4373 4808 4374
+f 4810 4376 4811
+f 4812 4811 4376
+f 4378 4812 4376
+f 4375 4376 4810
+f 4813 4375 4810
+f 4814 4812 4378
+f 4377 4813 4815
+f 4377 4815 4814
+f 4377 4375 4813
+f 4377 4814 4378
+f 4816 4380 4817
+f 4818 4817 4380
+f 4379 4380 4816
+f 4382 4818 4380
+f 4819 4379 4816
+f 4820 4818 4382
+f 4381 4819 4821
+f 4381 4821 4820
+f 4381 4379 4819
+f 4381 4820 4382
+f 4822 4384 4823
+f 4824 4823 4384
+f 4383 4384 4822
+f 4386 4824 4384
+f 4825 4383 4822
+f 4826 4824 4386
+f 4385 4825 4827
+f 4385 4827 4826
+f 4385 4383 4825
+f 4385 4826 4386
+f 4828 4388 4829
+f 4830 4829 4388
+f 4387 4388 4828
+f 4390 4830 4388
+f 4831 4387 4828
+f 4832 4830 4390
+f 4389 4831 4833
+f 4389 4833 4832
+f 4389 4387 4831
+f 4389 4832 4390
+f 4834 4392 4835
+f 4836 4835 4392
+f 4394 4836 4392
+f 4391 4392 4834
+f 4837 4391 4834
+f 4838 4836 4394
+f 4393 4837 4839
+f 4393 4839 4838
+f 4393 4391 4837
+f 4393 4838 4394
+f 4840 4396 4841
+f 4842 4841 4396
+f 4395 4396 4840
+f 4398 4842 4396
+f 4843 4395 4840
+f 4844 4842 4398
+f 4397 4843 4845
+f 4397 4845 4844
+f 4397 4395 4843
+f 4397 4844 4398
+f 4846 4400 4847
+f 4848 4847 4400
+f 4399 4400 4846
+f 4402 4848 4400
+f 4849 4399 4846
+f 4850 4848 4402
+f 4401 4849 4851
+f 4401 4851 4850
+f 4401 4399 4849
+f 4401 4850 4402
+f 4852 4404 4853
+f 4854 4853 4404
+f 4403 4404 4852
+f 4406 4854 4404
+f 4855 4403 4852
+f 4856 4854 4406
+f 4405 4855 4857
+f 4405 4857 4856
+f 4405 4403 4855
+f 4405 4856 4406
+f 4858 4408 4859
+f 4860 4859 4408
+f 4410 4860 4408
+f 4407 4408 4858
+f 4861 4407 4858
+f 4862 4860 4410
+f 4409 4861 4863
+f 4409 4863 4862
+f 4409 4407 4861
+f 4409 4862 4410
+f 4864 4412 4865
+f 4866 4865 4412
+f 4411 4412 4864
+f 4414 4866 4412
+f 4867 4411 4864
+f 4868 4866 4414
+f 4413 4867 4869
+f 4413 4869 4868
+f 4413 4411 4867
+f 4413 4868 4414
+f 4870 4416 4871
+f 4872 4871 4416
+f 4415 4416 4870
+f 4418 4872 4416
+f 4873 4415 4870
+f 4874 4872 4418
+f 4417 4873 4875
+f 4417 4875 4874
+f 4417 4415 4873
+f 4417 4874 4418
+f 4876 4420 4877
+f 4878 4877 4420
+f 4419 4420 4876
+f 4422 4878 4420
+f 4879 4419 4876
+f 4880 4878 4422
+f 4421 4879 4881
+f 4421 4881 4880
+f 4421 4419 4879
+f 4421 4880 4422
+f 4882 4424 4883
+f 4884 4883 4424
+f 4426 4884 4424
+f 4423 4424 4882
+f 4885 4423 4882
+f 4886 4884 4426
+f 4425 4885 4887
+f 4425 4887 4886
+f 4425 4423 4885
+f 4425 4886 4426
+f 4888 4428 4889
+f 4890 4889 4428
+f 4427 4428 4888
+f 4430 4890 4428
+f 4891 4427 4888
+f 4892 4890 4430
+f 4429 4891 4893
+f 4429 4893 4892
+f 4429 4427 4891
+f 4429 4892 4430
+f 4894 4432 4895
+f 4896 4895 4432
+f 4434 4896 4432
+f 4431 4432 4894
+f 4897 4431 4894
+f 4898 4896 4434
+f 4433 4897 4899
+f 4433 4899 4898
+f 4433 4431 4897
+f 4433 4898 4434
+f 4900 4436 4901
+f 4902 4901 4436
+f 4438 4902 4436
+f 4435 4436 4900
+f 4903 4435 4900
+f 4904 4902 4438
+f 4437 4903 4905
+f 4437 4905 4904
+f 4437 4435 4903
+f 4437 4904 4438
+f 4906 4440 4907
+f 4908 4907 4440
+f 4442 4908 4440
+f 4439 4440 4906
+f 4909 4439 4906
+f 4910 4908 4442
+f 4441 4909 4911
+f 4441 4911 4910
+f 4441 4439 4909
+f 4441 4910 4442
+f 4912 4444 4913
+f 4914 4913 4444
+f 4446 4914 4444
+f 4443 4444 4912
+f 4915 4443 4912
+f 4916 4914 4446
+f 4445 4915 4917
+f 4445 4917 4916
+f 4445 4443 4915
+f 4445 4916 4446
+f 4918 4448 4919
+f 4920 4919 4448
+f 4447 4448 4918
+f 4450 4920 4448
+f 4921 4447 4918
+f 4922 4920 4450
+f 4449 4921 4923
+f 4449 4923 4922
+f 4449 4447 4921
+f 4449 4922 4450
+f 4924 4452 4925
+f 4926 4925 4452
+f 4454 4926 4452
+f 4451 4452 4924
+f 4927 4451 4924
+f 4928 4926 4454
+f 4453 4927 4929
+f 4453 4929 4928
+f 4453 4451 4927
+f 4453 4928 4454
+f 4930 4456 4931
+f 4932 4931 4456
+f 4458 4932 4456
+f 4455 4456 4930
+f 4933 4455 4930
+f 4934 4932 4458
+f 4457 4933 4935
+f 4457 4935 4934
+f 4457 4455 4933
+f 4457 4934 4458
+f 4936 4460 4937
+f 4938 4937 4460
+f 4459 4460 4936
+f 4462 4938 4460
+f 4939 4459 4936
+f 4940 4938 4462
+f 4461 4939 4941
+f 4461 4941 4940
+f 4461 4459 4939
+f 4461 4940 4462
+f 4942 4464 4943
+f 4944 4943 4464
+f 4463 4464 4942
+f 4466 4944 4464
+f 4945 4463 4942
+f 4946 4944 4466
+f 4465 4945 4947
+f 4465 4947 4946
+f 4465 4463 4945
+f 4465 4946 4466
+f 4948 4468 4949
+f 4950 4949 4468
+f 4470 4950 4468
+f 4467 4468 4948
+f 4951 4467 4948
+f 4952 4950 4470
+f 4469 4951 4953
+f 4469 4953 4952
+f 4469 4467 4951
+f 4469 4952 4470
+f 4954 4472 4955
+f 4956 4955 4472
+f 4471 4472 4954
+f 4474 4956 4472
+f 4957 4471 4954
+f 4958 4956 4474
+f 4473 4957 4959
+f 4473 4959 4958
+f 4473 4471 4957
+f 4473 4958 4474
+f 4960 4476 4961
+f 4962 4961 4476
+f 4475 4476 4960
+f 4478 4962 4476
+f 4963 4475 4960
+f 4964 4962 4478
+f 4477 4963 4965
+f 4477 4965 4964
+f 4477 4475 4963
+f 4477 4964 4478
+f 4966 4480 4967
+f 4968 4967 4480
+f 4482 4968 4480
+f 4479 4480 4966
+f 4969 4479 4966
+f 4970 4968 4482
+f 4481 4969 4971
+f 4481 4971 4970
+f 4481 4479 4969
+f 4481 4970 4482
+f 4972 4484 4973
+f 4974 4973 4484
+f 4483 4484 4972
+f 4486 4974 4484
+f 4975 4483 4972
+f 4976 4974 4486
+f 4485 4975 4977
+f 4485 4977 4976
+f 4485 4483 4975
+f 4485 4976 4486
+f 4978 4488 4979
+f 4980 4979 4488
+f 4487 4488 4978
+f 4490 4980 4488
+f 4981 4487 4978
+f 4982 4980 4490
+f 4489 4981 4983
+f 4489 4983 4982
+f 4489 4487 4981
+f 4489 4982 4490
+f 4984 4492 4985
+f 4986 4985 4492
+f 4491 4492 4984
+f 4494 4986 4492
+f 4987 4491 4984
+f 4988 4986 4494
+f 4493 4987 4989
+f 4493 4989 4988
+f 4493 4491 4987
+f 4493 4988 4494
+f 4990 4496 4991
+f 4992 4991 4496
+f 4495 4496 4990
+f 4498 4992 4496
+f 4993 4495 4990
+f 4994 4992 4498
+f 4497 4993 4995
+f 4497 4995 4994
+f 4497 4495 4993
+f 4497 4994 4498
+f 4996 4500 4997
+f 4998 4997 4500
+f 4499 4500 4996
+f 4502 4998 4500
+f 4999 4499 4996
+f 5000 4998 4502
+f 4501 4999 5001
+f 4501 5001 5000
+f 4501 4499 4999
+f 4501 5000 4502
+f 5002 4504 5003
+f 5004 5003 4504
+f 4503 4504 5002
+f 4506 5004 4504
+f 5005 4503 5002
+f 5006 5004 4506
+f 4505 5005 5007
+f 4505 5007 5006
+f 4505 4503 5005
+f 4505 5006 4506
+f 5008 4508 5009
+f 5010 5009 4508
+f 4507 4508 5008
+f 4510 5010 4508
+f 5011 4507 5008
+f 5012 5010 4510
+f 4509 5011 5013
+f 4509 5013 5012
+f 4509 4507 5011
+f 4509 5012 4510
+f 5014 4512 5015
+f 5016 5015 4512
+f 4511 4512 5014
+f 4514 5016 4512
+f 5017 4511 5014
+f 5018 5016 4514
+f 4513 5017 5019
+f 4513 5019 5018
+f 4513 4511 5017
+f 4513 5018 4514
+f 5020 4516 5021
+f 5022 5021 4516
+f 4518 5022 4516
+f 4515 4516 5020
+f 5023 4515 5020
+f 5024 5022 4518
+f 4517 5023 5025
+f 4517 5025 5024
+f 4517 4515 5023
+f 4517 5024 4518
+f 5026 4520 5027
+f 5028 5027 4520
+f 4522 5028 4520
+f 4519 4520 5026
+f 5029 4519 5026
+f 5030 5028 4522
+f 4521 5029 5031
+f 4521 5031 5030
+f 4521 4519 5029
+f 4521 5030 4522
+f 5032 4524 5033
+f 5034 5033 4524
+f 4523 4524 5032
+f 4526 5034 4524
+f 5035 4523 5032
+f 5036 5034 4526
+f 4525 5035 5037
+f 4525 5037 5036
+f 4525 4523 5035
+f 4525 5036 4526
+f 4528 4527 5038
+f 5039 4528 5038
+f 4529 4528 5039
+f 5040 4529 5039
+f 4530 4529 5040
+f 5041 4530 5040
+f 4531 4530 5041
+f 5042 4531 5041
+f 4532 4531 5042
+f 5043 4532 5042
+f 4533 4532 5043
+f 5044 4533 5043
+f 4534 4533 5044
+f 5045 4534 5044
+f 4535 4534 5045
+f 5046 4535 5045
+f 4536 4535 5046
+f 5047 4536 5046
+f 4537 4536 5047
+f 5048 4537 5047
+f 4538 4537 5048
+f 5049 4538 5048
+f 4539 4538 5049
+f 5050 4539 5049
+f 4540 4539 5050
+f 5051 4540 5050
+f 4541 4540 5051
+f 5052 4541 5051
+f 4542 4541 5052
+f 5053 4542 5052
+f 4543 4542 5053
+f 5054 4543 5053
+f 4544 4543 5054
+f 5055 4544 5054
+f 4545 4544 5055
+f 5056 4545 5055
+f 4546 4545 5056
+f 5057 4546 5056
+f 4547 4546 5057
+f 5058 4547 5057
+f 4548 4547 5058
+f 5059 4548 5058
+f 4549 4548 5059
+f 5060 4549 5059
+f 4550 4549 5060
+f 5061 4550 5060
+f 4551 4550 5061
+f 5062 4551 5061
+f 4552 4551 5062
+f 5063 4552 5062
+f 4553 4552 5063
+f 5064 4553 5063
+f 4554 4553 5064
+f 5065 4554 5064
+f 4555 4554 5065
+f 5066 4555 5065
+f 4556 4555 5066
+f 5067 4556 5066
+f 4557 4556 5067
+f 5068 4557 5067
+f 4527 4557 5068
+f 5038 4527 5068
+f 4558 4559 5069
+f 5069 4559 5070
+f 4561 4558 5071
+f 5071 4558 5069
+f 4563 4561 5072
+f 5072 4561 5071
+f 4562 4563 5073
+f 5073 4563 5072
+f 4560 4562 5074
+f 5074 4562 5073
+f 4559 4560 5070
+f 5070 4560 5074
+f 4564 4565 5075
+f 5075 4565 5076
+f 4567 4564 5077
+f 5077 4564 5075
+f 4569 4567 5078
+f 5078 4567 5077
+f 4568 4569 5079
+f 5079 4569 5078
+f 4566 4568 5080
+f 5080 4568 5079
+f 4565 4566 5076
+f 5076 4566 5080
+f 4570 4571 5081
+f 5081 4571 5082
+f 4573 4570 5083
+f 5083 4570 5081
+f 4575 4573 5084
+f 5084 4573 5083
+f 4574 4575 5085
+f 5085 4575 5084
+f 4572 4574 5086
+f 5086 4574 5085
+f 4571 4572 5082
+f 5082 4572 5086
+f 4576 4577 5087
+f 5087 4577 5088
+f 4579 4576 5089
+f 5089 4576 5087
+f 4581 4579 5090
+f 5090 4579 5089
+f 5091 5092 5090
+f 4580 4581 5092
+f 5092 4581 5090
+f 5093 5092 5094
+f 5093 4578 5092
+f 4578 4580 5092
+f 4577 4578 5088
+f 5088 4578 5093
+f 4582 4583 5095
+f 5095 4583 5096
+f 4585 4582 5097
+f 5097 4582 5095
+f 4587 4585 5098
+f 5098 4585 5097
+f 4586 4587 5099
+f 5099 4587 5098
+f 4584 4586 5100
+f 5100 4586 5099
+f 4583 4584 5096
+f 5096 4584 5100
+f 4588 4589 5101
+f 5101 4589 5102
+f 4591 4588 5103
+f 5103 4588 5101
+f 4593 4591 5104
+f 5104 4591 5103
+f 4592 4593 5105
+f 5105 4593 5104
+f 4590 4592 5106
+f 5106 4592 5105
+f 4589 4590 5102
+f 5102 4590 5106
+f 4594 4595 5107
+f 5107 4595 5108
+f 4597 4594 5109
+f 5109 4594 5107
+f 4599 4597 5110
+f 5110 4597 5109
+f 4598 4599 5111
+f 5111 4599 5110
+f 4596 4598 5112
+f 5112 4598 5111
+f 4595 4596 5108
+f 5108 4596 5112
+f 4600 4601 5113
+f 5113 4601 5114
+f 4603 4600 5115
+f 5115 4600 5113
+f 4605 4603 5116
+f 5116 4603 5115
+f 4604 4605 5117
+f 5117 4605 5116
+f 4602 4604 5118
+f 5118 4604 5117
+f 4601 4602 5114
+f 5114 4602 5118
+f 4606 4607 5119
+f 5119 4607 5120
+f 4609 4606 5121
+f 5121 4606 5119
+f 4611 4609 5122
+f 5122 4609 5121
+f 4610 4611 5123
+f 5123 4611 5122
+f 4608 4610 5124
+f 5124 4610 5123
+f 4607 4608 5120
+f 5120 4608 5124
+f 4612 4613 5125
+f 5125 4613 5126
+f 4615 4612 5127
+f 5127 4612 5125
+f 4617 4615 5128
+f 5128 4615 5127
+f 4616 4617 5129
+f 5129 4617 5128
+f 4614 4616 5130
+f 5130 4616 5129
+f 4613 4614 5126
+f 5126 4614 5130
+f 4618 4619 5131
+f 5131 4619 5132
+f 4621 4618 5133
+f 5133 4618 5131
+f 4623 4621 5134
+f 5134 4621 5133
+f 4622 4623 5135
+f 5135 4623 5134
+f 4620 4622 5136
+f 5136 4622 5135
+f 4619 4620 5132
+f 5132 4620 5136
+f 4624 4625 5137
+f 5137 4625 5138
+f 4627 4624 5139
+f 5139 4624 5137
+f 4629 4627 5140
+f 5140 4627 5139
+f 4628 4629 5141
+f 5141 4629 5140
+f 4626 4628 5142
+f 5142 4628 5141
+f 4625 4626 5138
+f 5138 4626 5142
+f 4630 4631 5143
+f 5143 4631 5144
+f 4633 4630 5145
+f 5145 4630 5143
+f 4635 4633 5146
+f 5146 4633 5145
+f 4634 4635 5147
+f 5147 4635 5146
+f 4632 4634 5148
+f 5148 4634 5147
+f 4631 4632 5144
+f 5144 4632 5148
+f 4636 4637 5149
+f 5149 4637 5150
+f 4639 4636 5151
+f 5151 4636 5149
+f 4641 4639 5152
+f 5152 4639 5151
+f 4640 4641 5153
+f 5153 4641 5152
+f 4638 4640 5154
+f 5154 4640 5153
+f 4637 4638 5150
+f 5150 4638 5154
+f 4642 4643 5155
+f 5155 4643 5156
+f 4645 4642 5157
+f 5157 4642 5155
+f 4647 4645 5158
+f 5158 4645 5157
+f 4646 4647 5159
+f 5159 4647 5158
+f 4644 4646 5160
+f 5160 4646 5159
+f 4643 4644 5156
+f 5156 4644 5160
+f 5161 5162 5163
+f 5161 4648 5162
+f 4648 4649 5162
+f 5164 5165 5161
+f 4651 4648 5165
+f 5165 4648 5161
+f 4653 5166 5167
+f 5166 4651 5165
+f 4653 4651 5166
+f 4652 4653 5168
+f 5168 4653 5167
+f 4650 4652 5169
+f 5169 4652 5168
+f 5162 4649 5170
+f 5170 4650 5169
+f 4649 4650 5170
+f 4654 4655 5171
+f 5171 4655 5172
+f 4657 4654 5173
+f 5173 4654 5171
+f 4659 4657 5174
+f 5174 4657 5173
+f 4658 4659 5175
+f 5175 4659 5174
+f 4656 4658 5176
+f 5176 4658 5175
+f 4655 4656 5172
+f 5172 4656 5176
+f 4660 4661 5177
+f 5177 4661 5178
+f 4663 4660 5179
+f 5179 4660 5177
+f 4665 4663 5180
+f 5180 4663 5179
+f 4664 4665 5181
+f 5181 4665 5180
+f 4662 4664 5182
+f 5182 4664 5181
+f 4661 4662 5178
+f 5178 4662 5182
+f 4666 4667 5183
+f 5183 4667 5184
+f 4669 4666 5185
+f 5185 4666 5183
+f 4671 4669 5186
+f 5186 4669 5185
+f 4670 4671 5187
+f 5187 4671 5186
+f 4668 4670 5188
+f 5188 4670 5187
+f 4667 4668 5184
+f 5184 4668 5188
+f 4672 4673 5189
+f 5189 4673 5190
+f 4675 4672 5191
+f 5191 4672 5189
+f 4677 4675 5192
+f 5192 4675 5191
+f 4676 4677 5193
+f 5193 4677 5192
+f 4674 4676 5194
+f 5194 4676 5193
+f 4673 4674 5190
+f 5190 4674 5194
+f 4678 4679 5195
+f 5195 4679 5196
+f 4681 4678 5197
+f 5197 4678 5195
+f 4683 4681 5198
+f 5198 4681 5197
+f 4682 4683 5199
+f 5199 4683 5198
+f 4680 4682 5200
+f 5200 4682 5199
+f 4679 4680 5196
+f 5196 4680 5200
+f 4684 4685 5201
+f 5201 4685 5202
+f 4687 4684 5203
+f 5203 4684 5201
+f 4689 4687 5204
+f 5204 4687 5203
+f 4688 4689 5205
+f 5205 4689 5204
+f 4686 4688 5206
+f 5206 4688 5205
+f 4685 4686 5202
+f 5202 4686 5206
+f 4690 4691 5207
+f 5207 4691 5208
+f 4693 4690 5209
+f 5209 4690 5207
+f 4695 4693 5210
+f 5210 4693 5209
+f 4694 4695 5211
+f 5211 4695 5210
+f 4692 4694 5212
+f 5212 4694 5211
+f 4691 4692 5208
+f 5208 4692 5212
+f 4696 4697 5213
+f 5213 4697 5214
+f 4699 4696 5215
+f 5215 4696 5213
+f 4701 4699 5216
+f 5216 4699 5215
+f 4700 4701 5217
+f 5217 4701 5216
+f 4698 4700 5218
+f 5218 4700 5217
+f 4697 4698 5214
+f 5214 4698 5218
+f 4702 4703 5219
+f 5219 4703 5220
+f 4705 4702 5221
+f 5221 4702 5219
+f 4707 4705 5222
+f 5222 4705 5221
+f 4706 4707 5223
+f 5223 4707 5222
+f 4704 4706 5224
+f 5224 4706 5223
+f 4703 4704 5220
+f 5220 4704 5224
+f 4708 4709 5225
+f 5225 4709 5226
+f 4711 4708 5227
+f 5227 4708 5225
+f 4713 4711 5228
+f 5228 4711 5227
+f 4712 4713 5229
+f 5229 4713 5228
+f 4710 4712 5230
+f 5230 4712 5229
+f 4709 4710 5226
+f 5226 4710 5230
+f 4714 4715 5231
+f 5231 4715 5232
+f 4717 4714 5233
+f 5233 4714 5231
+f 4719 4717 5234
+f 5234 4717 5233
+f 4718 4719 5235
+f 5235 4719 5234
+f 4716 4718 5236
+f 5236 4718 5235
+f 4715 4716 5232
+f 5232 4716 5236
+f 4720 4721 5237
+f 5237 4721 5238
+f 4723 4720 5239
+f 5239 4720 5237
+f 5240 5241 5239
+f 5242 4725 5241
+f 4725 4723 5241
+f 5241 4723 5239
+f 4724 4725 5243
+f 5243 4725 5242
+f 4722 4724 5244
+f 5244 4724 5243
+f 4721 5245 5238
+f 5238 5245 5246
+f 5245 4722 5244
+f 4721 4722 5245
+f 4726 4727 5247
+f 5247 4727 5248
+f 4729 4726 5249
+f 5249 4726 5247
+f 4731 4729 5250
+f 5250 4729 5249
+f 4730 4731 5251
+f 5251 4731 5250
+f 4728 4730 5252
+f 5252 4730 5251
+f 4727 4728 5248
+f 5248 4728 5252
+f 4732 4733 5253
+f 5253 4733 5254
+f 4735 4732 5255
+f 5255 4732 5253
+f 4737 4735 5256
+f 5256 4735 5255
+f 4736 4737 5257
+f 5257 4737 5256
+f 4734 4736 5258
+f 5258 4736 5257
+f 4733 4734 5254
+f 5254 4734 5258
+f 4738 4739 5259
+f 5259 4739 5260
+f 4741 4738 5261
+f 5261 4738 5259
+f 4743 4741 5262
+f 5262 4741 5261
+f 4742 4743 5263
+f 5263 4743 5262
+f 4740 4742 5264
+f 5264 4742 5263
+f 4739 4740 5260
+f 5260 4740 5264
+f 4744 4745 5265
+f 5265 4745 5266
+f 4747 4744 5267
+f 5267 4744 5265
+f 4749 4747 5268
+f 5268 4747 5267
+f 4748 4749 5269
+f 5269 4749 5268
+f 4746 4748 5270
+f 5270 4748 5269
+f 4745 4746 5266
+f 5266 4746 5270
+f 4750 4751 5271
+f 5271 4751 5272
+f 4753 4750 5273
+f 5273 4750 5271
+f 4755 4753 5274
+f 5274 4753 5273
+f 4754 4755 5275
+f 5275 4755 5274
+f 4752 4754 5276
+f 5276 4754 5275
+f 4751 4752 5272
+f 5272 4752 5276
+f 4756 4757 5277
+f 5277 4757 5278
+f 4759 4756 5279
+f 5279 4756 5277
+f 4761 4759 5280
+f 5280 4759 5279
+f 4760 4761 5281
+f 5281 4761 5280
+f 4758 4760 5282
+f 5282 4760 5281
+f 4757 4758 5278
+f 5278 4758 5282
+f 4762 4763 5283
+f 5283 4763 5284
+f 4765 4762 5285
+f 5285 4762 5283
+f 4767 4765 5286
+f 5286 4765 5285
+f 4766 4767 5287
+f 5287 4767 5286
+f 4764 4766 5288
+f 5288 4766 5287
+f 4763 4764 5284
+f 5284 4764 5288
+f 4768 4769 5289
+f 5289 4769 5290
+f 4771 4768 5291
+f 5291 4768 5289
+f 4773 4771 5292
+f 5292 4771 5291
+f 4772 4773 5293
+f 5293 4773 5292
+f 4770 4772 5294
+f 5294 4772 5293
+f 4769 4770 5290
+f 5290 4770 5294
+f 5295 5296 5297
+f 5295 4774 5296
+f 4774 4775 5296
+f 5298 5299 5295
+f 4777 4774 5299
+f 5299 4774 5295
+f 4779 5300 5301
+f 5300 4777 5299
+f 4779 4777 5300
+f 4778 4779 5302
+f 5302 4779 5301
+f 4776 4778 5303
+f 5303 4778 5302
+f 4775 5304 5296
+f 5304 4776 5303
+f 4775 4776 5304
+f 4780 4781 5305
+f 5305 4781 5306
+f 4783 4780 5307
+f 5307 4780 5305
+f 4785 4783 5308
+f 5308 4783 5307
+f 4784 4785 5309
+f 5309 4785 5308
+f 4782 4784 5310
+f 5310 4784 5309
+f 4781 4782 5306
+f 5306 4782 5310
+f 4786 4787 5311
+f 5311 4787 5312
+f 4789 4786 5313
+f 5313 4786 5311
+f 4791 4789 5314
+f 5314 4789 5313
+f 4790 4791 5315
+f 5315 4791 5314
+f 4788 4790 5316
+f 5316 4790 5315
+f 4787 4788 5312
+f 5312 4788 5316
+f 4792 4793 5317
+f 5317 4793 5318
+f 4795 5317 5319
+f 4795 4792 5317
+f 4797 4795 5320
+f 5320 4795 5319
+f 4796 4797 5321
+f 5321 4797 5320
+f 4794 4796 5322
+f 5322 4796 5321
+f 4793 4794 5318
+f 5318 4794 5322
+f 4798 4799 5323
+f 5323 4799 5324
+f 4801 4798 5325
+f 5325 4798 5323
+f 4803 4801 5326
+f 5326 4801 5325
+f 4802 4803 5327
+f 5327 4803 5326
+f 4800 4802 5328
+f 5328 4802 5327
+f 4799 4800 5324
+f 5324 4800 5328
+f 4804 4805 5329
+f 5329 4805 5330
+f 4807 4804 5331
+f 5331 4804 5329
+f 4809 4807 5332
+f 5332 4807 5331
+f 4808 4809 5333
+f 5333 4809 5332
+f 4806 4808 5334
+f 5334 4808 5333
+f 4805 4806 5330
+f 5330 4806 5334
+f 4810 4811 5335
+f 5335 4811 5336
+f 4813 4810 5337
+f 5337 4810 5335
+f 4815 4813 5338
+f 5338 4813 5337
+f 4814 4815 5339
+f 5339 4815 5338
+f 4812 4814 5340
+f 5340 4814 5339
+f 4811 4812 5336
+f 5336 4812 5340
+f 4816 4817 5341
+f 5341 4817 5342
+f 4819 4816 5343
+f 5343 4816 5341
+f 4821 4819 5344
+f 5344 4819 5343
+f 5345 5346 5344
+f 4820 4821 5346
+f 5346 4821 5344
+f 5347 5346 5348
+f 5347 4818 5346
+f 4818 4820 5346
+f 4817 4818 5342
+f 5342 4818 5347
+f 4822 4823 5349
+f 5349 4823 5350
+f 4825 4822 5351
+f 5351 4822 5349
+f 4827 4825 5352
+f 5352 4825 5351
+f 4826 4827 5353
+f 5353 4827 5352
+f 4824 4826 5354
+f 5354 4826 5353
+f 4823 4824 5350
+f 5350 4824 5354
+f 4828 4829 5355
+f 5355 4829 5356
+f 4831 4828 5357
+f 5357 4828 5355
+f 4833 4831 5358
+f 5358 4831 5357
+f 4832 4833 5359
+f 5359 4833 5358
+f 4830 4832 5360
+f 5360 4832 5359
+f 4829 4830 5356
+f 5356 4830 5360
+f 4834 4835 5361
+f 5361 4835 5362
+f 4837 4834 5363
+f 5363 4834 5361
+f 4839 4837 5364
+f 5364 4837 5363
+f 4838 4839 5365
+f 5365 4839 5364
+f 4836 4838 5366
+f 5366 4838 5365
+f 4835 4836 5362
+f 5362 4836 5366
+f 4840 4841 5367
+f 5367 4841 5368
+f 4843 4840 5369
+f 5369 4840 5367
+f 4845 4843 5370
+f 5370 4843 5369
+f 4844 4845 5371
+f 5371 4845 5370
+f 4842 4844 5372
+f 5372 4844 5371
+f 4841 4842 5368
+f 5368 4842 5372
+f 4846 4847 5373
+f 5373 4847 5374
+f 4849 4846 5375
+f 5375 4846 5373
+f 4851 4849 5376
+f 5376 4849 5375
+f 4850 4851 5377
+f 5377 4851 5376
+f 4848 4850 5378
+f 5378 4850 5377
+f 4847 4848 5374
+f 5374 4848 5378
+f 4852 4853 5379
+f 5379 4853 5380
+f 4855 4852 5381
+f 5381 4852 5379
+f 4857 4855 5382
+f 5382 4855 5381
+f 4856 4857 5383
+f 5383 4857 5382
+f 4854 4856 5384
+f 5384 4856 5383
+f 4853 4854 5380
+f 5380 4854 5384
+f 4858 4859 5385
+f 5385 4859 5386
+f 4861 4858 5387
+f 5387 4858 5385
+f 4863 4861 5388
+f 5388 4861 5387
+f 4862 4863 5389
+f 5389 4863 5388
+f 4860 4862 5390
+f 5390 4862 5389
+f 4859 4860 5386
+f 5386 4860 5390
+f 4864 4865 5391
+f 5391 4865 5392
+f 4867 4864 5393
+f 5393 4864 5391
+f 4869 4867 5394
+f 5394 4867 5393
+f 4868 4869 5395
+f 5395 4869 5394
+f 4866 4868 5396
+f 5396 4868 5395
+f 4865 4866 5392
+f 5392 4866 5396
+f 4870 4871 5397
+f 5397 4871 5398
+f 4873 4870 5399
+f 5399 4870 5397
+f 4875 4873 5400
+f 5400 4873 5399
+f 4874 4875 5401
+f 5401 4875 5400
+f 4872 4874 5402
+f 5402 4874 5401
+f 4871 4872 5398
+f 5398 4872 5402
+f 4876 4877 5403
+f 5403 4877 5404
+f 4879 4876 5405
+f 5405 4876 5403
+f 4881 4879 5406
+f 5406 4879 5405
+f 4880 4881 5407
+f 5407 4881 5406
+f 4878 4880 5408
+f 5408 4880 5407
+f 4877 4878 5404
+f 5404 4878 5408
+f 4882 4883 5409
+f 5409 4883 5410
+f 4885 4882 5411
+f 5411 4882 5409
+f 4887 4885 5412
+f 5412 4885 5411
+f 4886 4887 5413
+f 5413 4887 5412
+f 4884 4886 5414
+f 5414 4886 5413
+f 4883 4884 5410
+f 5410 4884 5414
+f 5415 5416 5417
+f 5415 4888 5416
+f 4888 4889 5416
+f 5418 5419 5415
+f 4891 4888 5419
+f 5419 4888 5415
+f 4893 5420 5421
+f 5420 4891 5419
+f 4893 4891 5420
+f 4892 4893 5422
+f 5422 4893 5421
+f 4890 4892 5423
+f 5423 4892 5422
+f 5416 4889 5424
+f 5424 4890 5423
+f 4889 4890 5424
+f 4894 4895 5425
+f 5425 4895 5426
+f 4897 4894 5427
+f 5427 4894 5425
+f 4899 4897 5428
+f 5428 4897 5427
+f 4898 5428 5429
+f 4898 4899 5428
+f 4896 4898 5430
+f 5430 4898 5429
+f 4895 4896 5426
+f 5426 4896 5430
+f 4900 4901 5431
+f 5431 4901 5432
+f 4903 5431 5433
+f 4903 4900 5431
+f 4905 4903 5434
+f 5434 4903 5433
+f 4904 4905 5435
+f 5435 4905 5434
+f 4902 4904 5436
+f 5436 4904 5435
+f 4901 4902 5432
+f 5432 4902 5436
+f 4906 4907 5437
+f 5437 4907 5438
+f 4909 4906 5439
+f 5439 4906 5437
+f 4911 4909 5440
+f 5440 4909 5439
+f 4910 4911 5441
+f 5441 4911 5440
+f 4908 4910 5442
+f 5442 4910 5441
+f 4907 4908 5438
+f 5438 4908 5442
+f 4912 4913 5443
+f 5443 4913 5444
+f 4915 4912 5445
+f 5445 4912 5443
+f 4917 4915 5446
+f 5446 4915 5445
+f 4916 4917 5447
+f 5447 4917 5446
+f 4914 4916 5448
+f 5448 4916 5447
+f 4913 4914 5444
+f 5444 4914 5448
+f 4918 4919 5449
+f 5449 4919 5450
+f 4921 4918 5451
+f 5451 4918 5449
+f 4923 4921 5452
+f 5452 4921 5451
+f 4922 4923 5453
+f 5453 4923 5452
+f 4920 4922 5454
+f 5454 4922 5453
+f 4919 4920 5450
+f 5450 4920 5454
+f 4924 4925 5455
+f 5455 4925 5456
+f 4927 4924 5457
+f 5457 4924 5455
+f 4929 4927 5458
+f 5458 4927 5457
+f 4928 4929 5459
+f 5459 4929 5458
+f 4926 4928 5460
+f 5460 4928 5459
+f 4925 4926 5456
+f 5456 4926 5460
+f 4930 4931 5461
+f 5461 4931 5462
+f 4933 4930 5463
+f 5463 4930 5461
+f 4935 4933 5464
+f 5464 4933 5463
+f 4934 4935 5465
+f 5465 4935 5464
+f 4932 4934 5466
+f 5466 4934 5465
+f 4931 4932 5462
+f 5462 4932 5466
+f 4936 4937 5467
+f 5467 4937 5468
+f 4939 4936 5469
+f 5469 4936 5467
+f 4941 4939 5470
+f 5470 4939 5469
+f 4940 4941 5471
+f 5471 4941 5470
+f 4938 4940 5472
+f 5472 4940 5471
+f 4937 4938 5468
+f 5468 4938 5472
+f 4942 4943 5473
+f 5473 4943 5474
+f 4945 4942 5475
+f 5475 4942 5473
+f 4947 4945 5476
+f 5476 4945 5475
+f 4946 4947 5477
+f 5477 4947 5476
+f 4944 4946 5478
+f 5478 4946 5477
+f 4943 4944 5474
+f 5474 4944 5478
+f 4948 4949 5479
+f 5479 4949 5480
+f 4951 4948 5481
+f 5481 4948 5479
+f 4953 4951 5482
+f 5482 4951 5481
+f 4952 4953 5483
+f 5483 4953 5482
+f 4950 4952 5484
+f 5484 4952 5483
+f 4949 4950 5480
+f 5480 4950 5484
+f 4954 4955 5485
+f 5485 4955 5486
+f 4957 4954 5487
+f 5487 4954 5485
+f 4959 4957 5488
+f 5488 4957 5487
+f 4958 4959 5489
+f 5489 4959 5488
+f 4956 4958 5490
+f 5490 4958 5489
+f 4955 4956 5486
+f 5486 4956 5490
+f 4960 4961 5491
+f 5491 4961 5492
+f 4963 4960 5493
+f 5493 4960 5491
+f 5494 5495 5493
+f 5496 4965 5495
+f 4965 4963 5495
+f 5495 4963 5493
+f 4964 4965 5497
+f 5497 4965 5496
+f 4962 4964 5498
+f 5498 4964 5497
+f 4961 5499 5492
+f 5492 5499 5500
+f 5499 4962 5498
+f 4961 4962 5499
+f 4966 4967 5501
+f 5501 4967 5502
+f 4969 4966 5503
+f 5503 4966 5501
+f 4971 4969 5504
+f 5504 4969 5503
+f 4970 4971 5505
+f 5505 4971 5504
+f 4968 4970 5506
+f 5506 4970 5505
+f 4967 4968 5502
+f 5502 4968 5506
+f 4972 4973 5507
+f 5507 4973 5508
+f 4975 4972 5509
+f 5509 4972 5507
+f 4977 4975 5510
+f 5510 4975 5509
+f 4976 4977 5511
+f 5511 4977 5510
+f 4974 4976 5512
+f 5512 4976 5511
+f 4973 4974 5508
+f 5508 4974 5512
+f 4978 4979 5513
+f 5513 4979 5514
+f 4981 4978 5515
+f 5515 4978 5513
+f 4983 4981 5516
+f 5516 4981 5515
+f 4982 4983 5517
+f 5517 4983 5516
+f 4980 4982 5518
+f 5518 4982 5517
+f 4979 4980 5514
+f 5514 4980 5518
+f 4984 4985 5519
+f 5519 4985 5520
+f 4987 4984 5521
+f 5521 4984 5519
+f 4989 4987 5522
+f 5522 4987 5521
+f 4988 4989 5523
+f 5523 4989 5522
+f 4986 4988 5524
+f 5524 4988 5523
+f 4985 4986 5520
+f 5520 4986 5524
+f 4990 4991 5525
+f 5525 4991 5526
+f 4993 4990 5527
+f 5527 4990 5525
+f 4995 4993 5528
+f 5528 4993 5527
+f 4994 4995 5529
+f 5529 4995 5528
+f 4992 4994 5530
+f 5530 4994 5529
+f 4991 4992 5526
+f 5526 4992 5530
+f 4996 4997 5531
+f 5531 4997 5532
+f 4999 4996 5533
+f 5533 4996 5531
+f 5001 4999 5534
+f 5534 4999 5533
+f 5000 5001 5535
+f 5535 5001 5534
+f 4998 5000 5536
+f 5536 5000 5535
+f 4997 4998 5532
+f 5532 4998 5536
+f 5002 5003 5537
+f 5537 5003 5538
+f 5005 5002 5539
+f 5539 5002 5537
+f 5007 5005 5540
+f 5540 5005 5539
+f 5006 5007 5541
+f 5541 5007 5540
+f 5004 5006 5542
+f 5542 5006 5541
+f 5003 5004 5538
+f 5538 5004 5542
+f 5008 5009 5543
+f 5543 5009 5544
+f 5011 5008 5545
+f 5545 5008 5543
+f 5013 5011 5546
+f 5546 5011 5545
+f 5012 5013 5547
+f 5547 5013 5546
+f 5010 5012 5548
+f 5548 5012 5547
+f 5009 5010 5544
+f 5544 5010 5548
+f 5549 5550 5551
+f 5549 5014 5550
+f 5014 5015 5550
+f 5552 5553 5549
+f 5017 5014 5553
+f 5553 5014 5549
+f 5019 5554 5555
+f 5554 5017 5553
+f 5019 5017 5554
+f 5018 5019 5556
+f 5556 5019 5555
+f 5016 5018 5557
+f 5557 5018 5556
+f 5015 5558 5550
+f 5558 5016 5557
+f 5015 5016 5558
+f 5020 5021 5559
+f 5559 5021 5560
+f 5023 5020 5561
+f 5561 5020 5559
+f 5025 5023 5562
+f 5562 5023 5561
+f 5024 5025 5563
+f 5563 5025 5562
+f 5022 5024 5564
+f 5564 5024 5563
+f 5021 5022 5560
+f 5560 5022 5564
+f 5026 5027 5565
+f 5565 5027 5566
+f 5029 5026 5567
+f 5567 5026 5565
+f 5031 5029 5568
+f 5568 5029 5567
+f 5030 5031 5569
+f 5569 5031 5568
+f 5028 5030 5570
+f 5570 5030 5569
+f 5027 5028 5566
+f 5566 5028 5570
+f 5032 5033 5571
+f 5571 5033 5572
+f 5035 5032 5573
+f 5573 5032 5571
+f 5037 5035 5574
+f 5574 5035 5573
+f 5036 5037 5575
+f 5575 5037 5574
+f 5034 5036 5576
+f 5576 5036 5575
+f 5033 5034 5572
+f 5572 5034 5576
+f 5575 5038 5576
+f 5572 5038 5577
+f 5572 5576 5038
+f 5571 5572 5577
+f 5564 5574 5573
+f 5563 5038 5575
+f 5563 5574 5564
+f 5563 5575 5574
+f 5560 5564 5573
+f 5560 5573 5571
+f 5559 5560 5571
+f 5578 5571 5577
+f 5578 5559 5571
+f 5578 5561 5559
+f 5578 5563 5562
+f 5578 5562 5561
+f 5039 5038 5563
+f 5039 5563 5578
+f 5569 5039 5570
+f 5566 5039 5578
+f 5566 5570 5039
+f 5565 5566 5578
+f 5548 5568 5567
+f 5547 5569 5568
+f 5547 5568 5548
+f 5547 5039 5569
+f 5544 5567 5565
+f 5544 5548 5567
+f 5543 5544 5565
+f 5579 5545 5543
+f 5579 5547 5546
+f 5579 5546 5545
+f 5579 5565 5578
+f 5579 5543 5565
+f 5541 5579 5542
+f 5538 5542 5579
+f 5537 5538 5579
+f 5040 5541 5540
+f 5040 5540 5539
+f 5040 5547 5579
+f 5040 5579 5541
+f 5040 5039 5547
+f 5556 5040 5557
+f 5558 5040 5539
+f 5558 5537 5579
+f 5558 5539 5537
+f 5558 5557 5040
+f 5041 5040 5556
+f 5041 5556 5555
+f 5041 5555 5554
+f 5580 5041 5554
+f 5042 5041 5580
+f 5581 5042 5580
+f 5043 5042 5581
+f 5582 5043 5581
+f 5044 5043 5582
+f 5498 5044 5582
+f 5499 5498 5582
+f 5497 5044 5498
+f 5496 5044 5497
+f 5495 5044 5496
+f 5471 5044 5472
+f 5468 5472 5044
+f 5468 5044 5495
+f 5467 5468 5495
+f 5478 5470 5469
+f 5477 5044 5471
+f 5477 5470 5478
+f 5477 5471 5470
+f 5474 5478 5469
+f 5474 5469 5467
+f 5473 5474 5467
+f 5484 5476 5475
+f 5483 5477 5476
+f 5483 5476 5484
+f 5480 5475 5473
+f 5480 5484 5475
+f 5479 5480 5473
+f 5045 5044 5477
+f 5045 5481 5479
+f 5045 5483 5482
+f 5045 5482 5481
+f 5045 5477 5483
+f 5459 5045 5460
+f 5456 5460 5045
+f 5583 5457 5455
+f 5583 5455 5456
+f 5583 5458 5457
+f 5583 5045 5479
+f 5583 5479 5473
+f 5583 5456 5045
+f 5466 5458 5583
+f 5465 5459 5458
+f 5465 5458 5466
+f 5465 5045 5459
+f 5462 5466 5583
+f 5461 5462 5583
+f 5448 5464 5463
+f 5444 5448 5463
+f 5444 5463 5461
+f 5046 5045 5465
+f 5046 5464 5448
+f 5046 5448 5447
+f 5046 5465 5464
+f 5446 5046 5447
+f 5443 5461 5583
+f 5443 5444 5461
+f 5445 5046 5446
+f 5453 5046 5454
+f 5450 5445 5443
+f 5450 5046 5445
+f 5450 5454 5046
+f 5449 5450 5443
+f 5436 5452 5451
+f 5435 5046 5453
+f 5435 5452 5436
+f 5435 5453 5452
+f 5432 5436 5451
+f 5584 5432 5451
+f 5584 5449 5443
+f 5584 5451 5449
+f 5584 5433 5431
+f 5584 5431 5432
+f 5442 5434 5433
+f 5441 5435 5434
+f 5441 5434 5442
+f 5438 5433 5584
+f 5438 5442 5433
+f 5437 5438 5584
+f 5047 5046 5435
+f 5047 5435 5441
+f 5047 5439 5437
+f 5047 5441 5440
+f 5047 5440 5439
+f 5413 5047 5414
+f 5410 5414 5047
+f 5409 5047 5437
+f 5409 5437 5584
+f 5409 5410 5047
+f 5430 5412 5411
+f 5429 5047 5413
+f 5429 5412 5430
+f 5429 5413 5412
+f 5426 5430 5411
+f 5426 5411 5409
+f 5425 5426 5409
+f 5423 5428 5427
+f 5422 5429 5428
+f 5422 5428 5423
+f 5424 5427 5425
+f 5424 5423 5427
+f 5048 5422 5421
+f 5048 5421 5420
+f 5048 5047 5429
+f 5048 5429 5422
+f 5585 5048 5420
+f 5049 5048 5585
+f 5586 5049 5585
+f 5050 5049 5586
+f 5587 5050 5586
+f 5051 5050 5587
+f 5354 5051 5587
+f 5353 5051 5354
+f 5350 5354 5587
+f 5352 5051 5353
+f 5349 5350 5587
+f 5351 5051 5352
+f 5359 5051 5360
+f 5356 5351 5349
+f 5356 5051 5351
+f 5356 5360 5051
+f 5355 5356 5349
+f 5588 5358 5357
+f 5588 5355 5349
+f 5588 5357 5355
+f 5588 5359 5358
+f 5333 5051 5359
+f 5333 5588 5334
+f 5333 5359 5588
+f 5330 5334 5588
+f 5329 5330 5588
+f 5052 5051 5333
+f 5052 5331 5329
+f 5052 5333 5332
+f 5052 5332 5331
+f 5339 5052 5340
+f 5336 5340 5052
+f 5335 5052 5329
+f 5335 5329 5588
+f 5335 5336 5052
+f 5322 5338 5337
+f 5321 5339 5338
+f 5321 5338 5322
+f 5321 5052 5339
+f 5318 5322 5337
+f 5589 5319 5317
+f 5589 5317 5318
+f 5589 5320 5319
+f 5589 5337 5335
+f 5589 5318 5337
+f 5589 5335 5588
+f 5053 5321 5320
+f 5053 5052 5321
+f 5053 5320 5589
+f 5327 5053 5328
+f 5324 5053 5589
+f 5324 5328 5053
+f 5326 5053 5327
+f 5323 5324 5589
+f 5310 5326 5325
+f 5310 5053 5326
+f 5309 5053 5310
+f 5306 5325 5323
+f 5306 5310 5325
+f 5305 5306 5323
+f 5590 5305 5323
+f 5590 5307 5305
+f 5590 5309 5308
+f 5590 5308 5307
+f 5590 5323 5589
+f 5315 5590 5316
+f 5054 5309 5590
+f 5054 5590 5315
+f 5054 5053 5309
+f 5312 5316 5590
+f 5314 5054 5315
+f 5311 5312 5590
+f 5313 5054 5314
+f 5293 5054 5294
+f 5290 5294 5054
+f 5290 5054 5313
+f 5290 5313 5311
+f 5289 5290 5311
+f 5591 5311 5590
+f 5591 5289 5311
+f 5591 5291 5289
+f 5591 5293 5292
+f 5591 5292 5291
+f 5055 5054 5293
+f 5055 5293 5591
+f 5288 5055 5591
+f 5287 5055 5288
+f 5284 5288 5591
+f 5286 5055 5287
+f 5283 5284 5591
+f 5285 5055 5286
+f 5302 5055 5303
+f 5304 5283 5591
+f 5304 5303 5055
+f 5304 5055 5285
+f 5304 5285 5283
+f 5056 5055 5302
+f 5056 5302 5301
+f 5056 5301 5300
+f 5592 5057 5056
+f 5592 5056 5300
+f 5058 5057 5592
+f 5593 5058 5592
+f 5594 5058 5593
+f 5059 5058 5594
+f 5245 5059 5594
+f 5245 5244 5059
+f 5243 5059 5244
+f 5218 5242 5241
+f 5217 5243 5242
+f 5217 5242 5218
+f 5214 5218 5241
+f 5213 5214 5241
+f 5060 5215 5213
+f 5060 5217 5216
+f 5060 5216 5215
+f 5060 5059 5243
+f 5060 5243 5217
+f 5223 5060 5224
+f 5220 5060 5213
+f 5220 5224 5060
+f 5219 5220 5213
+f 5230 5222 5221
+f 5229 5060 5223
+f 5229 5222 5230
+f 5229 5223 5222
+f 5226 5230 5221
+f 5226 5221 5219
+f 5225 5226 5219
+f 5206 5228 5227
+f 5205 5228 5206
+f 5205 5229 5228
+f 5202 5206 5227
+f 5595 5225 5219
+f 5595 5202 5227
+f 5595 5203 5201
+f 5595 5201 5202
+f 5595 5204 5203
+f 5595 5227 5225
+f 5061 5060 5229
+f 5061 5229 5205
+f 5061 5204 5595
+f 5061 5205 5204
+f 5211 5061 5212
+f 5208 5212 5061
+f 5207 5061 5595
+f 5207 5208 5061
+f 5194 5210 5209
+f 5193 5061 5211
+f 5193 5211 5210
+f 5193 5210 5194
+f 5190 5209 5207
+f 5190 5194 5209
+f 5189 5207 5595
+f 5189 5190 5207
+f 5200 5192 5191
+f 5199 5193 5192
+f 5199 5192 5200
+f 5196 5191 5189
+f 5196 5200 5191
+f 5195 5196 5189
+f 5062 5061 5193
+f 5062 5193 5199
+f 5062 5197 5195
+f 5062 5199 5198
+f 5062 5198 5197
+f 5181 5062 5182
+f 5178 5182 5062
+f 5596 5195 5189
+f 5596 5189 5595
+f 5596 5179 5177
+f 5596 5177 5178
+f 5596 5062 5195
+f 5596 5178 5062
+f 5188 5180 5179
+f 5187 5181 5180
+f 5187 5062 5181
+f 5187 5180 5188
+f 5184 5179 5596
+f 5184 5188 5179
+f 5183 5184 5596
+f 5160 5186 5185
+f 5159 5187 5186
+f 5159 5186 5160
+f 5156 5185 5183
+f 5156 5160 5185
+f 5155 5156 5183
+f 5155 5183 5596
+f 5176 5158 5157
+f 5175 5158 5176
+f 5172 5176 5157
+f 5172 5157 5155
+f 5171 5172 5155
+f 5063 5158 5175
+f 5063 5159 5158
+f 5063 5175 5174
+f 5063 5174 5173
+f 5063 5187 5159
+f 5063 5062 5187
+f 5168 5063 5169
+f 5170 5063 5173
+f 5170 5169 5063
+f 5170 5173 5171
+f 5064 5063 5168
+f 5064 5168 5167
+f 5064 5167 5166
+f 5597 5064 5166
+f 5065 5064 5597
+f 5598 5065 5597
+f 5066 5065 5598
+f 5599 5066 5598
+f 5099 5599 5100
+f 5096 5100 5599
+f 5095 5096 5599
+f 5067 5097 5095
+f 5067 5099 5098
+f 5067 5098 5097
+f 5067 5066 5599
+f 5067 5599 5099
+f 5105 5067 5106
+f 5102 5067 5095
+f 5102 5106 5067
+f 5101 5102 5095
+f 5600 5103 5101
+f 5600 5105 5104
+f 5600 5104 5103
+f 5600 5101 5095
+f 5079 5105 5600
+f 5079 5600 5080
+f 5076 5080 5600
+f 5075 5076 5600
+f 5068 5067 5105
+f 5068 5077 5075
+f 5068 5079 5078
+f 5068 5078 5077
+f 5068 5105 5079
+f 5085 5068 5086
+f 5082 5086 5068
+f 5601 5083 5081
+f 5601 5081 5082
+f 5601 5084 5083
+f 5601 5068 5075
+f 5601 5075 5600
+f 5601 5082 5068
+f 5074 5084 5601
+f 5073 5084 5074
+f 5073 5085 5084
+f 5070 5074 5601
+f 5069 5070 5601
+f 5038 5085 5073
+f 5038 5073 5072
+f 5038 5072 5071
+f 5038 5068 5085
+f 5577 5069 5601
+f 5577 5038 5071
+f 5577 5071 5069
+f 5495 5583 5467
+f 5467 5583 5473
+f 5583 5584 5443
+f 5584 5424 5425
+f 5584 5425 5409
+f 5587 5588 5349
+f 5241 5595 5213
+f 5213 5595 5219
+f 5596 5170 5171
+f 5596 5171 5155
+f 5599 5600 5095
+f 5094 5087 5088
+f 5094 5088 5093
+f 5089 5087 5094
+f 5091 5089 5094
+f 5090 5089 5091
+f 5578 5577 5602
+f 5603 5578 5602
+f 5579 5578 5603
+f 5604 5579 5603
+f 5558 5579 5604
+f 5550 5558 5604
+f 5551 5550 5604
+f 5552 5551 5604
+f 5605 5552 5604
+f 5605 5554 5553
+f 5605 5553 5552
+f 5580 5554 5605
+f 5606 5580 5605
+f 5581 5580 5606
+f 5607 5581 5606
+f 5582 5581 5607
+f 5608 5582 5607
+f 5499 5582 5608
+f 5500 5499 5608
+f 5494 5500 5608
+f 5609 5494 5608
+f 5609 5495 5494
+f 5583 5495 5609
+f 5610 5583 5609
+f 5584 5583 5610
+f 5611 5584 5610
+f 5612 5584 5611
+f 5424 5584 5612
+f 5416 5424 5612
+f 5417 5416 5612
+f 5613 5417 5612
+f 5613 5420 5419
+f 5613 5419 5418
+f 5613 5418 5417
+f 5585 5420 5613
+f 5614 5585 5613
+f 5586 5585 5614
+f 5615 5586 5614
+f 5346 5586 5615
+f 5348 5346 5615
+f 5587 5586 5346
+f 5587 5346 5345
+f 5616 5348 5615
+f 5616 5587 5345
+f 5616 5345 5348
+f 5588 5587 5616
+f 5617 5588 5616
+f 5589 5588 5617
+f 5618 5589 5617
+f 5590 5589 5618
+f 5619 5590 5618
+f 5591 5590 5619
+f 5620 5591 5619
+f 5304 5591 5620
+f 5296 5304 5620
+f 5297 5296 5620
+f 5621 5297 5620
+f 5621 5300 5299
+f 5621 5299 5298
+f 5621 5298 5297
+f 5592 5300 5621
+f 5622 5592 5621
+f 5623 5592 5622
+f 5623 5593 5592
+f 5594 5593 5623
+f 5624 5594 5623
+f 5245 5594 5624
+f 5246 5245 5624
+f 5240 5246 5624
+f 5625 5240 5624
+f 5625 5241 5240
+f 5595 5241 5625
+f 5626 5595 5625
+f 5596 5595 5626
+f 5627 5596 5626
+f 5628 5596 5627
+f 5170 5596 5628
+f 5162 5170 5628
+f 5163 5162 5628
+f 5164 5163 5628
+f 5629 5166 5165
+f 5629 5165 5164
+f 5629 5164 5628
+f 5597 5166 5629
+f 5630 5597 5629
+f 5598 5597 5630
+f 5631 5598 5630
+f 5631 5092 5598
+f 5094 5092 5631
+f 5091 5094 5631
+f 5599 5598 5092
+f 5599 5091 5631
+f 5599 5092 5091
+f 5632 5599 5631
+f 5600 5599 5632
+f 5633 5601 5600
+f 5633 5600 5632
+f 5602 5577 5601
+f 5602 5601 5633
+f 5111 5108 5112
+f 5110 5107 5108
+f 5110 5109 5107
+f 5110 5108 5111
+f 5117 5114 5118
+f 5116 5113 5114
+f 5116 5115 5113
+f 5116 5114 5117
+f 5123 5120 5124
+f 5122 5119 5120
+f 5122 5121 5119
+f 5122 5120 5123
+f 5129 5126 5130
+f 5128 5125 5126
+f 5128 5127 5125
+f 5128 5126 5129
+f 5135 5132 5136
+f 5134 5131 5132
+f 5134 5133 5131
+f 5134 5132 5135
+f 5141 5138 5142
+f 5140 5137 5138
+f 5140 5139 5137
+f 5140 5138 5141
+f 5147 5144 5148
+f 5146 5143 5144
+f 5146 5145 5143
+f 5146 5144 5147
+f 5153 5150 5154
+f 5152 5149 5150
+f 5152 5151 5149
+f 5152 5150 5153
+f 5164 5161 5163
+f 5235 5232 5236
+f 5234 5231 5232
+f 5234 5233 5231
+f 5234 5232 5235
+f 5237 5238 5246
+f 5240 5239 5237
+f 5240 5237 5246
+f 5251 5248 5252
+f 5250 5247 5248
+f 5250 5249 5247
+f 5250 5248 5251
+f 5257 5254 5258
+f 5256 5253 5254
+f 5256 5255 5253
+f 5256 5254 5257
+f 5263 5260 5264
+f 5262 5259 5260
+f 5262 5261 5259
+f 5262 5260 5263
+f 5269 5266 5270
+f 5268 5265 5266
+f 5268 5267 5265
+f 5268 5266 5269
+f 5275 5272 5276
+f 5274 5271 5272
+f 5274 5273 5271
+f 5274 5272 5275
+f 5281 5278 5282
+f 5280 5277 5278
+f 5280 5279 5277
+f 5280 5278 5281
+f 5298 5295 5297
+f 5348 5341 5342
+f 5348 5342 5347
+f 5343 5341 5348
+f 5345 5343 5348
+f 5344 5343 5345
+f 5365 5362 5366
+f 5364 5361 5362
+f 5364 5363 5361
+f 5364 5362 5365
+f 5371 5368 5372
+f 5370 5367 5368
+f 5370 5369 5367
+f 5370 5368 5371
+f 5377 5374 5378
+f 5376 5373 5374
+f 5376 5375 5373
+f 5376 5374 5377
+f 5383 5380 5384
+f 5382 5379 5380
+f 5382 5381 5379
+f 5382 5380 5383
+f 5389 5386 5390
+f 5388 5385 5386
+f 5388 5387 5385
+f 5388 5386 5389
+f 5395 5392 5396
+f 5394 5391 5392
+f 5394 5393 5391
+f 5394 5392 5395
+f 5401 5398 5402
+f 5400 5397 5398
+f 5400 5399 5397
+f 5400 5398 5401
+f 5407 5404 5408
+f 5406 5403 5404
+f 5406 5405 5403
+f 5406 5404 5407
+f 5418 5415 5417
+f 5489 5486 5490
+f 5488 5485 5486
+f 5488 5487 5485
+f 5488 5486 5489
+f 5491 5492 5500
+f 5494 5493 5491
+f 5494 5491 5500
+f 5505 5502 5506
+f 5504 5501 5502
+f 5504 5503 5501
+f 5504 5502 5505
+f 5511 5508 5512
+f 5510 5507 5508
+f 5510 5509 5507
+f 5510 5508 5511
+f 5517 5514 5518
+f 5516 5513 5514
+f 5516 5515 5513
+f 5516 5514 5517
+f 5523 5520 5524
+f 5522 5519 5520
+f 5522 5521 5519
+f 5522 5520 5523
+f 5529 5526 5530
+f 5528 5525 5526
+f 5528 5527 5525
+f 5528 5526 5529
+f 5535 5532 5536
+f 5534 5531 5532
+f 5534 5533 5531
+f 5534 5532 5535
+f 5552 5549 5551
+f 5634 5603 5602
+f 5634 5602 5635
+f 5636 5604 5603
+f 5636 5603 5634
+f 5637 5605 5604
+f 5637 5604 5636
+f 5638 5606 5605
+f 5638 5605 5637
+f 5639 5607 5606
+f 5639 5606 5638
+f 5640 5608 5607
+f 5640 5607 5639
+f 5641 5609 5608
+f 5641 5608 5640
+f 5642 5610 5609
+f 5642 5609 5641
+f 5643 5610 5642
+f 5643 5611 5610
+f 5644 5611 5643
+f 5612 5611 5644
+f 5645 5612 5644
+f 5613 5612 5645
+f 5646 5613 5645
+f 5614 5613 5646
+f 5615 5614 5646
+f 5647 5615 5646
+f 5616 5615 5647
+f 5648 5616 5647
+f 5617 5616 5648
+f 5649 5617 5648
+f 5650 5617 5649
+f 5618 5617 5650
+f 5651 5619 5618
+f 5651 5618 5650
+f 5620 5619 5651
+f 5652 5620 5651
+f 5621 5620 5652
+f 5653 5621 5652
+f 5622 5621 5653
+f 5654 5622 5653
+f 5623 5622 5654
+f 5655 5623 5654
+f 5624 5623 5655
+f 5656 5624 5655
+f 5625 5624 5656
+f 5657 5625 5656
+f 5626 5625 5657
+f 5658 5626 5657
+f 5627 5626 5658
+f 5659 5627 5658
+f 5628 5627 5659
+f 5660 5628 5659
+f 5629 5628 5660
+f 5661 5629 5660
+f 5630 5629 5661
+f 5662 5630 5661
+f 5631 5630 5662
+f 5663 5631 5662
+f 5632 5631 5663
+f 5664 5632 5663
+f 5633 5632 5664
+f 5665 5633 5664
+f 5602 5633 5665
+f 5635 5602 5665
+f 5666 5634 5635
+f 5666 5635 5667
+f 5668 5636 5634
+f 5668 5634 5666
+f 5669 5637 5636
+f 5669 5636 5668
+f 5670 5638 5637
+f 5670 5637 5669
+f 5671 5639 5638
+f 5671 5638 5670
+f 5640 5639 5671
+f 5672 5640 5671
+f 5641 5640 5672
+f 5673 5641 5672
+f 5642 5641 5673
+f 5674 5642 5673
+f 5643 5642 5674
+f 5675 5643 5674
+f 5644 5643 5675
+f 5676 5644 5675
+f 5645 5644 5676
+f 5677 5645 5676
+f 5677 5646 5645
+f 5678 5647 5646
+f 5678 5646 5677
+f 5679 5648 5647
+f 5679 5647 5678
+f 5680 5649 5648
+f 5680 5648 5679
+f 5681 5650 5649
+f 5681 5649 5680
+f 5682 5651 5650
+f 5682 5650 5681
+f 5683 5652 5651
+f 5683 5651 5682
+f 5684 5653 5652
+f 5684 5652 5683
+f 5685 5654 5653
+f 5685 5653 5684
+f 5686 5655 5654
+f 5686 5654 5685
+f 5687 5656 5655
+f 5687 5655 5686
+f 5688 5656 5687
+f 5657 5656 5688
+f 5689 5657 5688
+f 5658 5657 5689
+f 5690 5658 5689
+f 5659 5658 5690
+f 5691 5659 5690
+f 5660 5659 5691
+f 5692 5661 5660
+f 5692 5660 5691
+f 5693 5662 5661
+f 5693 5661 5692
+f 5694 5663 5662
+f 5694 5662 5693
+f 5695 5664 5663
+f 5695 5663 5694
+f 5696 5665 5664
+f 5696 5664 5695
+f 5667 5635 5665
+f 5667 5665 5696
+f 5697 5666 5667
+f 5697 5667 5698
+f 5699 5668 5666
+f 5699 5666 5697
+f 5700 5669 5668
+f 5700 5668 5699
+f 5701 5670 5669
+f 5701 5669 5700
+f 5702 5671 5670
+f 5702 5670 5701
+f 5703 5672 5671
+f 5703 5671 5702
+f 5704 5673 5672
+f 5704 5672 5703
+f 5705 5673 5704
+f 5705 5674 5673
+f 5706 5674 5705
+f 5706 5675 5674
+f 5707 5676 5675
+f 5707 5675 5706
+f 5708 5676 5707
+f 5708 5677 5676
+f 5709 5678 5677
+f 5709 5677 5708
+f 5710 5679 5678
+f 5710 5678 5709
+f 5711 5680 5679
+f 5711 5679 5710
+f 5712 5681 5680
+f 5712 5680 5711
+f 5713 5682 5681
+f 5713 5681 5712
+f 5714 5683 5682
+f 5714 5682 5713
+f 5715 5684 5683
+f 5715 5683 5714
+f 5716 5685 5684
+f 5716 5684 5715
+f 5717 5686 5685
+f 5717 5685 5716
+f 5718 5687 5686
+f 5718 5686 5717
+f 5719 5688 5687
+f 5719 5687 5718
+f 5720 5689 5688
+f 5720 5688 5719
+f 5721 5690 5689
+f 5721 5689 5720
+f 5722 5691 5690
+f 5722 5690 5721
+f 5723 5692 5691
+f 5723 5691 5722
+f 5724 5693 5692
+f 5724 5692 5723
+f 5725 5694 5693
+f 5725 5693 5724
+f 5726 5695 5694
+f 5726 5694 5725
+f 5727 5696 5695
+f 5727 5695 5726
+f 5698 5667 5696
+f 5698 5696 5727
+f 5728 5698 5729
+f 5730 5698 5728
+f 5731 5698 5730
+f 5732 5697 5698
+f 5732 5698 5731
+f 5733 5697 5732
+f 5734 5699 5697
+f 5734 5697 5733
+f 5735 5700 5699
+f 5735 5699 5734
+f 5736 5701 5700
+f 5736 5700 5735
+f 5737 5701 5736
+f 5737 5702 5701
+f 5738 5702 5737
+f 5738 5703 5702
+f 5739 5704 5703
+f 5739 5703 5738
+f 5740 5704 5739
+f 5740 5705 5704
+f 5741 5706 5705
+f 5741 5705 5740
+f 5742 5707 5706
+f 5742 5706 5741
+f 5743 5708 5707
+f 5743 5709 5708
+f 5743 5707 5742
+f 5744 5710 5709
+f 5744 5709 5743
+f 5745 5711 5710
+f 5745 5710 5744
+f 5746 5712 5711
+f 5746 5711 5745
+f 5747 5713 5712
+f 5747 5712 5746
+f 5748 5714 5713
+f 5748 5713 5747
+f 5749 5714 5748
+f 5750 5715 5714
+f 5750 5714 5749
+f 5751 5716 5715
+f 5751 5715 5750
+f 5752 5717 5716
+f 5752 5716 5751
+f 5753 5718 5717
+f 5753 5717 5752
+f 5754 5719 5718
+f 5754 5718 5753
+f 5755 5720 5719
+f 5755 5721 5720
+f 5755 5719 5754
+f 5756 5722 5721
+f 5756 5721 5755
+f 5757 5723 5722
+f 5757 5722 5756
+f 5758 5724 5723
+f 5758 5723 5757
+f 5759 5725 5724
+f 5759 5724 5758
+f 5760 5726 5725
+f 5760 5725 5759
+f 5761 5727 5726
+f 5761 5726 5760
+f 5762 5727 5761
+f 5762 5698 5727
+f 5729 5698 5762
+f 5763 5728 5729
+f 5763 5730 5728
+f 5763 5731 5730
+f 5763 5732 5731
+f 5764 5733 5732
+f 5764 5732 5763
+f 5765 5734 5733
+f 5765 5733 5764
+f 5735 5734 5765
+f 5766 5735 5765
+f 5736 5735 5766
+f 5767 5736 5766
+f 5737 5736 5767
+f 5768 5737 5767
+f 5738 5737 5768
+f 5769 5738 5768
+f 5739 5738 5769
+f 5770 5739 5769
+f 5740 5739 5770
+f 5771 5740 5770
+f 5772 5740 5771
+f 5772 5741 5740
+f 5773 5741 5772
+f 5773 5742 5741
+f 5774 5742 5773
+f 5774 5743 5742
+f 5775 5743 5774
+f 5744 5743 5775
+f 5776 5744 5775
+f 5776 5745 5744
+f 5777 5745 5776
+f 5777 5746 5745
+f 5778 5746 5777
+f 5778 5747 5746
+f 5779 5747 5778
+f 5779 5748 5747
+f 5780 5748 5779
+f 5780 5749 5748
+f 5781 5749 5780
+f 5781 5750 5749
+f 5782 5750 5781
+f 5782 5751 5750
+f 5783 5752 5751
+f 5783 5751 5782
+f 5784 5752 5783
+f 5784 5753 5752
+f 5754 5753 5784
+f 5785 5754 5784
+f 5755 5754 5785
+f 5786 5755 5785
+f 5787 5756 5755
+f 5787 5755 5786
+f 5788 5757 5756
+f 5788 5756 5787
+f 5789 5758 5757
+f 5789 5757 5788
+f 5790 5758 5789
+f 5759 5758 5790
+f 5791 5760 5759
+f 5791 5759 5790
+f 5792 5761 5760
+f 5792 5760 5791
+f 5793 5762 5761
+f 5793 5761 5792
+f 5763 5729 5762
+f 5763 5762 5793
+f 5779 5778 5780
+f 5780 5777 5781
+f 5778 5777 5780
+f 5781 5776 5782
+f 5777 5776 5781
+f 5782 5775 5783
+f 5776 5775 5782
+f 5783 5774 5784
+f 5784 5774 5785
+f 5775 5774 5783
+f 5785 5773 5786
+f 5774 5773 5785
+f 5786 5772 5787
+f 5773 5772 5786
+f 5787 5771 5788
+f 5772 5771 5787
+f 5771 5770 5788
+f 5792 5764 5793
+f 5793 5764 5763
+f 5788 5769 5789
+f 5770 5769 5788
+f 5791 5765 5792
+f 5792 5765 5764
+f 5789 5768 5790
+f 5769 5768 5789
+f 5791 5766 5765
+f 5790 5767 5791
+f 5768 5767 5790
+f 5791 5767 5766
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/cooling-tower.obj 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/cooling-tower.obj
--- 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/cooling-tower.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/cooling-tower.obj	2025-08-26 18:15:43.670003835 +0000
@@ -0,0 +1,7514 @@
+# Cooling Tower
+# (C) Linux Studio Plugins Project
+o Body
+v 21.132799 -0.000004 81.847198
+v 20.811745 3.669668 80.847198
+v 20.811745 3.669668 81.847198
+v 21.132799 -0.000004 80.847198
+v 19.858335 7.227839 80.847198
+v 19.858335 7.227839 81.847198
+v 18.301542 10.566396 80.847198
+v 18.301542 10.566396 81.847198
+v 16.188663 13.583899 80.847198
+v 16.188663 13.583899 81.847198
+v 13.583902 16.188660 80.847198
+v 13.583902 16.188660 81.847198
+v 10.566400 18.301538 80.847198
+v 10.566400 18.301538 81.847198
+v 7.227843 19.858332 80.847198
+v 7.227843 19.858332 81.847198
+v 3.669672 20.811741 80.847198
+v 3.669672 20.811741 81.847198
+v 0.000000 21.132795 80.847198
+v 0.000000 21.132795 81.847198
+v -3.669672 20.811741 80.847198
+v -3.669672 20.811741 81.847198
+v -7.227843 19.858332 81.847198
+v -7.227843 19.858332 80.847198
+v -10.566400 18.301538 80.847198
+v 30.730791 8.234291 7.138781
+v -10.566400 18.301538 81.847198
+v 31.814856 -0.000000 7.138780
+v -13.583902 16.188660 80.847198
+v 27.552473 15.907428 7.138781
+v -13.583902 16.188660 81.847198
+v 22.496500 22.496500 7.138781
+v -16.188663 13.583899 80.847198
+v 15.907428 27.552473 7.138782
+v -16.188663 13.583899 81.847198
+v 8.234291 30.730791 7.138782
+v 0.000000 31.814856 7.138782
+v -18.301542 10.566396 80.847198
+v -18.301542 10.566396 81.847198
+v -8.234291 30.730791 7.138782
+v -19.858335 7.227839 80.847198
+v -15.907428 27.552473 7.138782
+v -19.858335 7.227839 81.847198
+v -22.496500 22.496500 7.138781
+v -20.811745 3.669668 80.847198
+v -27.552473 15.907428 7.138781
+v -20.811745 3.669668 81.847198
+v -30.730791 8.234291 7.138781
+v -21.132799 -0.000004 81.847198
+v -31.814856 -0.000000 7.138780
+v -21.132799 -0.000004 80.847198
+v -30.730791 -8.234291 7.138780
+v -20.811745 -3.669676 80.847198
+v -27.552473 -15.907428 7.138780
+v -22.496500 -22.496500 7.138779
+v -20.811745 -3.669676 81.847198
+v -15.907428 -27.552473 7.138779
+v -19.858335 -7.227846 80.847198
+v -8.234291 -30.730791 7.138779
+v -19.858335 -7.227847 81.847198
+v 0.000000 -31.814856 7.138779
+v -18.301542 -10.566403 80.847198
+v -18.301542 -10.566403 81.847198
+v 8.234291 -30.730791 7.138779
+v 15.907428 -27.552473 7.138779
+v -16.188663 -13.583906 80.847198
+v 22.496500 -22.496500 7.138779
+v -16.188663 -13.583906 81.847198
+v 27.552473 -15.907428 7.138780
+v -13.583902 -16.188667 80.847198
+v 30.730791 -8.234291 7.138780
+v -13.583902 -16.188667 81.847198
+v -10.566400 -18.301546 80.847198
+v 30.504807 8.173738 8.146670
+v -10.566400 -18.301546 81.847198
+v -7.227843 -19.858339 80.847198
+v -7.227843 -19.858339 81.847198
+v 22.331068 22.331068 8.146671
+v -3.669672 -20.811749 80.847198
+v 8.173738 30.504807 8.146671
+v -3.669672 -20.811749 81.847198
+v 0.000000 -21.132803 81.847198
+v -8.173738 30.504807 8.146671
+v 0.000000 -21.132803 80.847198
+v 3.669672 -20.811749 80.847198
+v -22.331068 22.331068 8.146671
+v 3.669672 -20.811749 81.847198
+v 7.227843 -19.858339 80.847198
+v 7.227843 -19.858339 81.847198
+v -30.504807 8.173738 8.146670
+v 10.566400 -18.301546 81.847198
+v -30.504807 -8.173738 8.146670
+v 10.566400 -18.301546 80.847198
+v 13.583902 -16.188667 80.847198
+v -22.331068 -22.331068 8.146669
+v 13.583902 -16.188667 81.847198
+v 16.188663 -13.583906 80.847198
+v -8.173738 -30.504807 8.146669
+v 16.188663 -13.583906 81.847198
+v 18.301542 -10.566403 80.847198
+v 18.301542 -10.566403 81.847198
+v 8.173738 -30.504807 8.146669
+v 19.858335 -7.227846 80.847198
+v 19.858335 -7.227847 81.847198
+v 22.331068 -22.331068 8.146669
+v 20.811745 -3.669676 81.847198
+v 30.504807 -8.173738 8.146670
+v 20.811745 -3.669676 80.847198
+v 19.466776 -0.000003 74.852875
+v 32.580898 -0.000000 8.146670
+v 32.085922 5.657614 8.146670
+v 24.883451 -0.000001 31.504997
+v 30.616032 11.143324 8.146671
+v 30.616032 -11.143324 8.146669
+v 32.085922 -5.657615 8.146670
+v 16.858721 9.733385 74.852875
+v 16.179596 9.341291 68.331696
+v 18.682589 -0.000003 68.331696
+v 9.733388 16.858717 74.852875
+v 16.249046 9.381389 61.159252
+v 18.762783 -0.000003 61.159252
+v 9.341294 16.179592 68.331696
+v 0.000000 19.466772 74.852875
+v 20.184128 -0.000002 50.367893
+v 17.479967 10.092062 50.367893
+v 9.381392 16.249044 61.159252
+v 0.000000 18.682585 68.331696
+v -9.733388 16.858717 74.852875
+v 10.092064 17.479965 50.367893
+v 0.000000 18.762781 61.159252
+v -9.341294 16.179592 68.331696
+v 21.549702 12.441725 31.504997
+v 28.215887 16.290449 8.146671
+v 24.958418 20.942598 8.146671
+v -16.858721 9.733385 74.852875
+v 0.000000 20.184126 50.367893
+v -9.381392 16.249044 61.159252
+v -16.179596 9.341291 68.331696
+v 20.942598 24.958418 8.146671
+v 12.441726 21.549700 31.504997
+v 16.290449 28.215887 8.146671
+v 11.143324 30.616032 8.146671
+v 5.657614 32.085922 8.146671
+v -19.466776 -0.000003 74.852875
+v -10.092064 17.479965 50.367893
+v -16.249046 9.381389 61.159252
+v -18.682589 -0.000003 68.331696
+v 0.000000 24.883450 31.504999
+v 0.000000 32.580898 8.146671
+v -5.657614 32.085922 8.146671
+v -11.143324 30.616032 8.146671
+v -16.858721 -9.733391 74.852875
+v -17.479967 10.092062 50.367893
+v -18.762783 -0.000003 61.159252
+v -16.179596 -9.341297 68.331696
+v -12.441726 21.549700 31.504997
+v -16.290449 28.215887 8.146671
+v -20.942598 24.958418 8.146671
+v -24.958418 20.942598 8.146671
+v -9.733388 -16.858725 74.852875
+v -20.184128 -0.000002 50.367893
+v -16.249046 -9.381394 61.159252
+v -9.341294 -16.179600 68.331696
+v -21.549702 12.441725 31.504997
+v -28.215887 16.290449 8.146671
+v -30.616032 11.143324 8.146671
+v 0.000000 -19.466780 74.852875
+v -17.479967 -10.092066 50.367893
+v -9.381392 -16.249048 61.159252
+v 0.000000 -18.682592 68.331696
+v -24.883451 -0.000001 31.504997
+v -32.085922 5.657614 8.146670
+v -32.580898 -0.000000 8.146670
+v -32.085922 -5.657615 8.146670
+v 9.733388 -16.858725 74.852875
+v -10.092064 -17.479969 50.367893
+v 0.000000 -18.762785 61.159252
+v 9.341294 -16.179600 68.331696
+v -21.549702 -12.441727 31.504997
+v -30.616032 -11.143324 8.146669
+v -28.215887 -16.290449 8.146669
+v -24.958418 -20.942598 8.146669
+v -20.942598 -24.958418 8.146669
+v 16.858721 -9.733391 74.852875
+v 0.000000 -20.184130 50.367893
+v 9.381392 -16.249048 61.159252
+v 16.179596 -9.341297 68.331696
+v -12.441726 -21.549704 31.504997
+v -16.290449 -28.215887 8.146669
+v -11.143324 -30.616032 8.146669
+v 10.092064 -17.479969 50.367893
+v 16.249046 -9.381394 61.159252
+v 0.000000 -24.883453 31.504995
+v -5.657614 -32.085922 8.146669
+v 0.000000 -32.580898 8.146669
+v 5.657614 -32.085922 8.146669
+v 11.143324 -30.616032 8.146669
+v 17.479967 -10.092066 50.367893
+v 12.441726 -21.549704 31.504997
+v 16.290449 -28.215887 8.146669
+v 20.942598 -24.958418 8.146669
+v 21.549702 -12.441727 31.504997
+v 24.958418 -20.942598 8.146669
+v 28.215887 -16.290449 8.146669
+v 33.277927 5.867795 7.308438
+v 33.791294 -0.000000 7.308438
+v 31.753429 11.557303 7.308438
+v 29.264118 16.895647 7.308439
+v 25.885633 21.720625 7.308439
+v 21.720625 25.885633 7.308439
+v 16.895647 29.264118 7.308439
+v 11.557303 31.753429 7.308439
+v 5.867796 33.277927 7.308439
+v 0.000000 33.791294 7.308439
+v -5.867796 33.277927 7.308439
+v -11.557303 31.753429 7.308439
+v -16.895647 29.264118 7.308439
+v -21.720625 25.885633 7.308439
+v -25.885633 21.720625 7.308439
+v -29.264118 16.895647 7.308439
+v -31.753429 11.557303 7.308438
+v -33.277927 5.867795 7.308438
+v -33.791294 -0.000000 7.308438
+v -33.277927 -5.867796 7.308437
+v -31.753429 -11.557303 7.308437
+v -29.264118 -16.895647 7.308437
+v -25.885633 -21.720625 7.308437
+v -21.720625 -25.885633 7.308437
+v -16.895647 -29.264118 7.308436
+v -11.557303 -31.753429 7.308436
+v -5.867796 -33.277927 7.308436
+v 0.000000 -33.791294 7.308436
+v 5.867796 -33.277927 7.308436
+v 11.557303 -31.753429 7.308436
+v 16.895647 -29.264118 7.308436
+v 21.720625 -25.885633 7.308437
+v 25.885633 -21.720625 7.308437
+v 29.264118 -16.895647 7.308437
+v 31.753429 -11.557303 7.308437
+v 33.277927 -5.867796 7.308437
+v 32.638531 5.755054 6.000000
+v 33.142033 -0.000000 6.000000
+v 31.143324 11.335243 6.000000
+v 28.701843 16.571016 6.000001
+v 25.388269 21.303288 6.000001
+v 21.303288 25.388269 6.000001
+v 16.571016 28.701843 6.000001
+v 11.335243 31.143324 6.000001
+v 5.755054 32.638531 6.000001
+v 0.000000 33.142033 6.000001
+v -5.755054 32.638531 6.000001
+v -11.335243 31.143324 6.000001
+v -16.571016 28.701843 6.000001
+v -21.303288 25.388269 6.000001
+v -25.388269 21.303288 6.000001
+v -28.701843 16.571016 6.000001
+v -31.143324 11.335243 6.000000
+v -32.638531 5.755054 6.000000
+v -33.142033 -0.000000 6.000000
+v -32.638531 -5.755054 6.000000
+v -31.143324 -11.335243 6.000000
+v -28.701843 -16.571016 5.999999
+v -25.388269 -21.303288 5.999999
+v -21.303288 -25.388269 5.999999
+v -16.571016 -28.701843 5.999999
+v -11.335243 -31.143324 5.999999
+v -5.755054 -32.638531 5.999999
+v 0.000000 -33.142033 5.999999
+v 5.755054 -32.638531 5.999999
+v 11.335243 -31.143324 5.999999
+v 16.571016 -28.701843 5.999999
+v 21.303288 -25.388269 5.999999
+v 25.388269 -21.303288 5.999999
+v 28.701843 -16.571016 5.999999
+v 31.143324 -11.335243 6.000000
+v 32.638531 -5.755054 6.000000
+v 31.101114 5.483965 8.146670
+v 31.580900 -0.000000 8.146670
+v 29.676338 10.801304 8.146670
+v 27.349861 15.790450 8.146671
+v 24.192373 20.299810 8.146671
+v 20.299810 24.192373 8.146671
+v 15.790450 27.349861 8.146671
+v 10.801304 29.676338 8.146671
+v 5.483966 31.101114 8.146671
+v 0.000000 31.580900 8.146671
+v -5.483966 31.101114 8.146671
+v -10.801304 29.676338 8.146671
+v -15.790450 27.349861 8.146671
+v -20.299810 24.192373 8.146671
+v -24.192373 20.299810 8.146671
+v -27.349861 15.790450 8.146671
+v -29.676338 10.801304 8.146670
+v -31.101114 5.483965 8.146670
+v -31.580900 -0.000000 8.146670
+v -31.101114 -5.483966 8.146670
+v -29.676338 -10.801304 8.146670
+v -27.349861 -15.790450 8.146669
+v -24.192373 -20.299810 8.146669
+v -20.299810 -24.192373 8.146669
+v -15.790450 -27.349861 8.146669
+v -10.801304 -29.676338 8.146669
+v -5.483966 -31.101114 8.146669
+v 0.000000 -31.580900 8.146669
+v 5.483966 -31.101114 8.146669
+v 10.801304 -29.676338 8.146669
+v 15.790450 -27.349861 8.146669
+v 20.299810 -24.192373 8.146669
+v 24.192373 -20.299810 8.146669
+v 27.349861 -15.790450 8.146669
+v 29.676338 -10.801304 8.146670
+v 31.101114 -5.483966 8.146670
+v 19.595106 -0.000002 48.263905
+v 20.132799 -0.000004 80.847198
+v 19.826937 3.496020 80.847198
+v 18.793509 -0.000003 76.368752
+v 18.918644 6.885819 80.847198
+v 18.918644 -6.885826 80.847198
+v 19.826937 -3.496027 80.847198
+v 16.969858 9.797551 48.263905
+v 9.797553 16.969856 48.263905
+v 15.294666 8.830376 63.068100
+v 17.660759 -0.000003 63.068100
+v 0.000000 19.595104 48.263905
+v 15.552605 8.979297 71.607796
+v 17.435516 10.066396 80.847198
+v 15.422620 12.941111 80.847198
+v 17.958601 -0.000003 71.607796
+v 8.830379 15.294663 63.068100
+v -9.797553 16.969856 48.263905
+v 8.979300 15.552602 71.607796
+v 12.941114 15.422616 80.847198
+v 10.066400 17.435513 80.847198
+v 6.885823 18.918640 80.847198
+v 0.000000 17.660757 63.068100
+v -16.969858 9.797551 48.263905
+v 0.000000 17.958597 71.607796
+v 3.496024 19.826933 80.847198
+v 0.000000 20.132795 80.847198
+v -3.496024 19.826933 80.847198
+v -8.830379 15.294663 63.068100
+v -19.595106 -0.000002 48.263905
+v -6.885823 18.918640 80.847198
+v -8.979300 15.552602 71.607796
+v -10.066400 17.435513 80.847198
+v -12.941114 15.422616 80.847198
+v -15.294666 8.830376 63.068100
+v -16.969858 -9.797555 48.263905
+v -15.552605 8.979297 71.607796
+v -15.422620 12.941111 80.847198
+v -17.435516 10.066396 80.847198
+v -18.918644 6.885819 80.847198
+v -19.826937 3.496020 80.847198
+v -17.660759 -0.000003 63.068100
+v -9.797553 -16.969860 48.263905
+v -17.958601 -0.000003 71.607796
+v -20.132799 -0.000004 80.847198
+v -19.826937 -3.496027 80.847198
+v -15.294666 -8.830381 63.068100
+v 0.000000 -19.595108 48.263905
+v -15.552605 -8.979302 71.607796
+v -18.918644 -6.885826 80.847198
+v -17.435516 -10.066403 80.847198
+v -15.422620 -12.941118 80.847198
+v -8.830379 -15.294669 63.068100
+v 9.797553 -16.969860 48.263905
+v -8.979300 -15.552608 71.607796
+v -12.941114 -15.422624 80.847198
+v -10.066400 -17.435520 80.847198
+v -6.885823 -18.918648 80.847198
+v -3.496024 -19.826941 80.847198
+v 0.000000 -17.660761 63.068100
+v 16.969858 -9.797555 48.263905
+v 0.000000 -17.958605 71.607796
+v 0.000000 -20.132803 80.847198
+v 3.496024 -19.826941 80.847198
+v 8.830379 -15.294669 63.068100
+v 8.979300 -15.552608 71.607796
+v 6.885823 -18.918648 80.847198
+v 10.066400 -17.435520 80.847198
+v 12.941114 -15.422624 80.847198
+v 15.422620 -12.941118 80.847198
+v 15.294666 -8.830381 63.068100
+v 15.552605 -8.979302 71.607796
+v 17.435516 -10.066403 80.847198
+v 18.842131 3.322372 81.347198
+v 19.132799 -0.000004 81.347198
+v 17.978951 6.543800 81.347198
+v 16.569490 9.566396 81.347198
+v 14.656575 12.298322 81.347198
+v 12.298326 14.656571 81.347198
+v 9.566400 16.569487 81.347198
+v 6.543803 17.978947 81.347198
+v 3.322376 18.842127 81.347198
+v 0.000000 19.132795 81.347198
+v -3.322376 18.842127 81.347198
+v -6.543803 17.978947 81.347198
+v -9.566400 16.569487 81.347198
+v -12.298326 14.656571 81.347198
+v -14.656575 12.298322 81.347198
+v -16.569490 9.566396 81.347198
+v -17.978951 6.543800 81.347198
+v -18.842131 3.322372 81.347198
+v -19.132799 -0.000004 81.347198
+v -18.842131 -3.322380 81.347198
+v -17.978951 -6.543807 81.347198
+v -16.569490 -9.566403 81.347198
+v -14.656575 -12.298329 81.347198
+v -12.298326 -14.656579 81.347198
+v -9.566400 -16.569494 81.347198
+v -6.543803 -17.978954 81.347198
+v -3.322376 -18.842134 81.347198
+v 0.000000 -19.132803 81.347198
+v 3.322376 -18.842134 81.347198
+v 6.543803 -17.978954 81.347198
+v 9.566400 -16.569494 81.347198
+v 12.298326 -14.656579 81.347198
+v 14.656575 -12.298329 81.347198
+v 16.569490 -9.566403 81.347198
+v 17.978951 -6.543807 81.347198
+v 18.842131 -3.322380 81.347198
+v 18.842131 3.322372 81.847198
+v 19.132799 -0.000004 81.847198
+v 17.978951 6.543799 81.847198
+v 16.569490 9.566396 81.847198
+v 14.656575 12.298322 81.847198
+v 12.298326 14.656571 81.847198
+v 9.566400 16.569487 81.847198
+v 6.543803 17.978947 81.847198
+v 3.322376 18.842127 81.847198
+v 0.000000 19.132795 81.847198
+v -3.322376 18.842127 81.847198
+v -6.543803 17.978947 81.847198
+v -9.566400 16.569487 81.847198
+v -12.298326 14.656571 81.847198
+v -14.656575 12.298322 81.847198
+v -16.569490 9.566396 81.847198
+v -17.978951 6.543799 81.847198
+v -18.842131 3.322372 81.847198
+v -19.132799 -0.000004 81.847198
+v -18.842131 -3.322380 81.847198
+v -17.978951 -6.543807 81.847198
+v -16.569490 -9.566403 81.847198
+v -14.656575 -12.298329 81.847198
+v -12.298326 -14.656579 81.847198
+v -9.566400 -16.569494 81.847198
+v -6.543803 -17.978954 81.847198
+v -3.322376 -18.842134 81.847198
+v 0.000000 -19.132803 81.847198
+v 3.322376 -18.842134 81.847198
+v 6.543803 -17.978954 81.847198
+v 9.566400 -16.569494 81.847198
+v 12.298326 -14.656579 81.847198
+v 14.656575 -12.298329 81.847198
+v 16.569490 -9.566403 81.847198
+v 17.978951 -6.543807 81.847198
+v 18.842131 -3.322380 81.847198
+v 31.674082 3.944398 6.000000
+v 31.462994 5.547774 6.000000
+v 32.193371 -0.000000 6.000000
+v 31.026218 8.501712 6.000000
+v 30.021639 10.926983 6.000000
+v 31.282236 6.920754 6.000000
+v 31.096409 8.332258 6.000000
+v 27.880278 16.096685 6.000000
+v 28.425097 14.781374 6.000000
+v 28.629753 14.287289 6.000000
+v 25.458357 19.252993 6.000001
+v 24.473864 20.536009 6.000001
+v 27.880278 16.096685 6.000000
+v 22.618635 22.875809 6.000001
+v 20.536009 24.473864 6.000001
+v 23.630835 21.634666 6.000001
+v 22.764151 22.764151 6.000001
+v 19.252993 25.458359 6.000001
+v 16.096685 27.880278 6.000001
+v 16.096685 27.880278 6.000001
+v 17.226170 27.013594 6.000001
+v 12.421089 29.402760 6.000001
+v 10.926983 30.021639 6.000001
+v 8.150412 31.120350 6.000001
+v 6.920755 31.282236 6.000001
+v 5.547775 31.462994 6.000001
+v 9.647570 30.551588 6.000001
+v 8.332258 31.096409 6.000001
+v 3.944399 31.674082 6.000001
+v 0.000000 32.193371 6.000001
+v -3.944399 31.674082 6.000001
+v -5.547775 31.462994 6.000001
+v -1.411503 32.007542 6.000001
+v -8.150412 31.120350 6.000001
+v -8.332258 31.096409 6.000001
+v -9.647570 30.551588 6.000001
+v -10.926983 30.021639 6.000001
+v -14.287289 28.629753 6.000001
+v -16.096685 27.880278 6.000001
+v -16.096685 27.880278 6.000001
+v -17.226170 27.013594 6.000001
+v -17.650452 26.688030 6.000001
+v -20.536009 24.473864 6.000001
+v -22.875809 22.618635 6.000001
+v -23.630835 21.634666 6.000001
+v -24.473864 20.536009 6.000001
+v -22.764151 22.764151 6.000001
+v -27.880278 16.096685 6.000000
+v -27.880278 16.096685 6.000000
+v -26.688030 17.650450 6.000001
+v -28.629753 14.287289 6.000000
+v -28.425097 14.781374 6.000000
+v -30.021639 10.926983 6.000000
+v -31.026218 8.501712 6.000000
+v -31.462994 5.547774 6.000000
+v -31.282236 6.920754 6.000000
+v -31.096409 8.332258 6.000000
+v -31.937738 1.941721 6.000000
+v -32.193371 -0.000000 6.000000
+v -31.674082 -3.944399 6.000000
+v -31.462994 -5.547775 6.000000
+v -32.007542 -1.411504 6.000000
+v -31.120350 -8.150412 6.000000
+v -31.096409 -8.332258 6.000000
+v -30.021639 -10.926983 6.000000
+v -28.629753 -14.287289 6.000000
+v -28.425097 -14.781374 6.000000
+v -27.880278 -16.096685 6.000000
+v -27.880278 -16.096685 6.000000
+v -27.013594 -17.226170 5.999999
+v -26.688030 -17.650452 5.999999
+v -24.473864 -20.536009 5.999999
+v -22.618635 -22.875809 5.999999
+v -21.634666 -23.630835 5.999999
+v -20.536009 -24.473864 5.999999
+v -22.764151 -22.764151 5.999999
+v -17.650450 -26.688030 5.999999
+v -16.096685 -27.880278 5.999999
+v -16.096685 -27.880278 5.999999
+v -12.421089 -29.402760 5.999999
+v -10.926983 -30.021639 5.999999
+v -14.781374 -28.425097 5.999999
+v -8.150412 -31.120350 5.999999
+v -6.920755 -31.282236 5.999999
+v -5.547775 -31.462994 5.999999
+v -8.332258 -31.096409 5.999999
+v -1.941721 -31.937738 5.999999
+v 0.000000 -32.193371 5.999999
+v 3.944399 -31.674082 5.999999
+v 5.547775 -31.462994 5.999999
+v 1.411503 -32.007542 5.999999
+v 8.150412 -31.120350 5.999999
+v 10.926983 -30.021639 5.999999
+v 9.647570 -30.551588 5.999999
+v 8.332258 -31.096409 5.999999
+v 14.287289 -28.629753 5.999999
+v 16.096685 -27.880278 5.999999
+v 16.096685 -27.880278 5.999999
+v 17.650452 -26.688030 5.999999
+v 17.226170 -27.013594 5.999999
+v 20.536009 -24.473864 5.999999
+v 22.875809 -22.618635 5.999999
+v 22.764151 -22.764151 5.999999
+v 23.630835 -21.634666 5.999999
+v 24.473864 -20.536009 5.999999
+v 26.688030 -17.650450 5.999999
+v 27.880278 -16.096685 6.000000
+v 27.880278 -16.096685 6.000000
+v 28.425097 -14.781374 6.000000
+v 29.402760 -12.421089 6.000000
+v 30.021639 -10.926983 6.000000
+v 31.096409 -8.332258 6.000000
+v 31.120350 -8.150412 6.000000
+v 31.462994 -5.547775 6.000000
+v 31.282236 -6.920755 6.000000
+v 31.674082 -3.944399 6.000000
+v 31.258039 3.690317 7.444556
+v 31.117430 5.297473 7.138780
+v 31.101114 5.483965 7.114002
+v 29.958483 9.748328 7.721572
+v 29.692530 10.740873 7.138781
+v 29.676338 10.801304 7.114001
+v 31.084923 5.544394 7.138781
+v 30.960592 6.008401 7.411233
+v 30.087452 9.267003 8.004190
+v 30.152472 9.024349 8.146670
+v 30.624981 7.260917 8.146670
+v 28.713457 12.866208 7.535126
+v 29.597219 10.970975 7.138781
+v 25.225101 18.824923 7.444554
+v 24.299763 20.146442 7.138781
+v 24.192373 20.299810 7.113999
+v 21.070644 23.421539 7.721572
+v 20.344053 24.148130 7.138781
+v 20.299810 24.192373 7.113999
+v 21.600634 22.891550 8.146671
+v 21.422998 23.069185 8.004192
+v 22.891550 21.600634 8.146671
+v 24.148130 20.344053 7.138781
+v 23.808455 20.683729 7.411232
+v 18.433477 25.499193 7.535127
+v 20.146442 24.299763 7.138781
+v 12.866208 28.713457 7.535127
+v 10.970975 29.597219 7.138782
+v 10.801304 29.676338 7.114002
+v 7.260918 30.624981 8.146671
+v 7.018263 30.690001 8.004191
+v 9.024349 30.152472 8.146671
+v 6.536940 30.818972 7.721574
+v 10.740873 29.692530 7.138782
+v 9.267003 30.087452 8.004191
+v 5.544394 31.084923 7.138782
+v 5.483966 31.101114 7.114003
+v 3.214267 31.299688 7.535128
+v 5.297473 31.117430 7.138782
+v -3.690317 31.258039 7.444557
+v -5.297473 31.117430 7.138782
+v -5.483966 31.101114 7.114003
+v -9.748328 29.958483 7.721573
+v -10.740873 29.692530 7.138782
+v -10.801304 29.676338 7.114002
+v -9.024349 30.152472 8.146671
+v -9.267003 30.087452 8.004191
+v -7.260918 30.624981 8.146671
+v -5.544394 31.084923 7.138782
+v -6.008402 30.960592 7.411234
+v -12.866208 28.713457 7.535127
+v -10.970975 29.597219 7.138782
+v -18.824923 25.225101 7.444554
+v -20.146442 24.299763 7.138781
+v -20.299810 24.192373 7.113999
+v -23.421539 21.070644 7.721572
+v -23.808455 20.683729 7.411232
+v -24.148130 20.344053 7.138781
+v -24.192373 20.299810 7.113999
+v -21.600634 22.891550 8.146671
+v -22.891550 21.600634 8.146671
+v -20.344053 24.148130 7.138781
+v -20.683729 23.808455 7.411232
+v -24.299763 20.146442 7.138781
+v -28.915413 12.433113 7.444555
+v -29.597219 10.970975 7.138781
+v -29.676338 10.801304 7.114001
+v -30.818972 6.536940 7.721573
+v -31.084923 5.544394 7.138781
+v -31.101114 5.483965 7.114002
+v -30.624981 7.260917 8.146670
+v -30.690001 7.018263 8.004190
+v -30.152472 9.024349 8.146670
+v -29.692530 10.740873 7.138781
+v -29.816860 10.276866 7.411232
+v -31.299688 3.214267 7.535126
+v -31.117430 5.297473 7.138780
+v -31.258039 -3.690317 7.444556
+v -31.117430 -5.297474 7.138780
+v -31.101114 -5.483966 7.114001
+v -29.958483 -9.748328 7.721571
+v -29.692530 -10.740873 7.138780
+v -29.676338 -10.801304 7.114000
+v -30.152472 -9.024349 8.146670
+v -30.087452 -9.267003 8.004190
+v -30.624981 -7.260918 8.146670
+v -31.084923 -5.544394 7.138780
+v -30.960592 -6.008402 7.411232
+v -28.713457 -12.866208 7.535125
+v -29.597219 -10.970975 7.138780
+v -25.225101 -18.824923 7.444552
+v -24.299763 -20.146442 7.138779
+v -24.192373 -20.299810 7.113997
+v -23.421539 -21.070644 7.721570
+v -23.808455 -20.683729 7.411231
+v -24.148130 -20.344053 7.138779
+v -22.891550 -21.600634 8.146669
+v -20.344053 -24.148130 7.138779
+v -21.422998 -23.069185 8.004190
+v -20.299810 -24.192373 7.113997
+v -21.600634 -22.891550 8.146669
+v -18.824923 -25.225101 7.444552
+v -20.146442 -24.299763 7.138779
+v -18.433477 -25.499193 7.535125
+v -12.866208 -28.713457 7.535124
+v -10.970975 -29.597219 7.138779
+v -10.801304 -29.676338 7.113999
+v -6.536940 -30.818972 7.721571
+v -5.544394 -31.084923 7.138779
+v -5.483966 -31.101114 7.114000
+v -10.740873 -29.692530 7.138779
+v -9.267003 -30.087452 8.004189
+v -7.018263 -30.690001 8.004189
+v -7.260918 -30.624981 8.146669
+v -9.024349 -30.152472 8.146669
+v -3.214267 -31.299688 7.535125
+v -5.297473 -31.117430 7.138779
+v 6.536940 -30.818972 7.721571
+v 5.544394 -31.084923 7.138779
+v 5.483966 -31.101114 7.114000
+v 3.214267 -31.299688 7.535125
+v 5.297473 -31.117430 7.138779
+v 7.260918 -30.624981 8.146669
+v 7.018263 -30.690001 8.004189
+v 9.024349 -30.152472 8.146669
+v 10.740873 -29.692530 7.138779
+v 9.267003 -30.087452 8.004189
+v 10.801304 -29.676338 7.113999
+v 12.866208 -28.713457 7.535124
+v 10.970975 -29.597219 7.138779
+v 18.824923 -25.225101 7.444552
+v 20.146442 -24.299763 7.138779
+v 20.299810 -24.192373 7.113997
+v 20.344053 -24.148130 7.138779
+v 22.891550 -21.600634 8.146669
+v 23.421539 -21.070644 7.721570
+v 21.600634 -22.891550 8.146669
+v 20.683729 -23.808455 7.411231
+v 24.148130 -20.344053 7.138779
+v 24.192373 -20.299810 7.113997
+v 23.808455 -20.683729 7.411231
+v 24.299763 -20.146442 7.138779
+v 28.915413 -12.433113 7.444554
+v 29.597219 -10.970975 7.138780
+v 29.676338 -10.801304 7.114000
+v 29.692530 -10.740873 7.138780
+v 29.816860 -10.276866 7.411232
+v 30.690001 -7.018264 8.004190
+v 30.818972 -6.536941 7.721572
+v 30.624981 -7.260918 8.146670
+v 30.152472 -9.024349 8.146670
+v 31.084923 -5.544394 7.138780
+v 31.101114 -5.483966 7.114001
+v 31.299688 -3.214267 7.535126
+v 31.117430 -5.297474 7.138780
+v 30.051992 -8.867484 8.587282
+v 29.422388 -7.883415 11.349128
+v 30.171564 6.895060 9.851628
+v 29.430515 8.965883 10.427240
+v 21.014034 22.395657 10.596725
+v 22.760193 21.428247 8.834147
+v 7.071633 29.828588 10.765758
+v 8.977996 29.956787 8.790085
+v -8.671090 29.347916 10.926836
+v -7.228393 30.438637 8.749757
+v -22.057669 21.141844 11.072430
+v -21.503084 22.738945 8.712857
+v -29.596914 7.418790 11.194446
+v -30.007456 8.922930 8.679046
+v -29.358049 -8.201040 11.284917
+v -30.452654 -7.298895 8.648010
+v -22.715351 -21.567936 8.619473
+v -21.442453 -21.640022 11.337319
+v -8.871375 -30.049038 8.593196
+v -7.346556 -30.459536 8.587247
+v -7.885026 -29.421959 11.349119
+v 7.884682 -29.422047 11.349134
+v 7.346619 -30.459543 8.587172
+v 21.539225 -21.538036 11.349121
+v 21.591993 -22.705486 8.587354
+vn -0.9416 -0.1240 -0.3130
+vn -0.8775 -0.3635 -0.3130
+vn -0.7535 -0.5782 -0.3130
+vn -0.5782 -0.7535 -0.3130
+vn -0.3635 -0.8775 -0.3130
+vn -0.1240 -0.9416 -0.3130
+vn 0.1240 -0.9416 -0.3130
+vn 0.3635 -0.8775 -0.3130
+vn 0.5782 -0.7535 -0.3130
+vn 0.7535 -0.5782 -0.3130
+vn 0.8775 -0.3635 -0.3130
+vn 0.9416 -0.1240 -0.3130
+vn 0.9416 0.1240 -0.3130
+vn 0.8775 0.3635 -0.3130
+vn 0.7535 0.5782 -0.3130
+vn 0.5782 0.7535 -0.3130
+vn 0.3635 0.8775 -0.3130
+vn 0.1240 0.9416 -0.3130
+vn -0.1240 0.9416 -0.3130
+vn -0.3635 0.8775 -0.3130
+vn -0.5782 0.7535 -0.3130
+vn -0.7535 0.5782 -0.3130
+vn -0.8775 0.3635 -0.3130
+vn -0.9416 0.1240 -0.3130
+vn -0.9662 -0.1272 -0.2243
+vn -0.9003 -0.3729 -0.2243
+vn -0.7731 -0.5933 -0.2243
+vn -0.5933 -0.7731 -0.2243
+vn -0.5933 -0.7731 -0.2242
+vn -0.3729 -0.9003 -0.2243
+vn -0.1272 -0.9662 -0.2243
+vn 0.1272 -0.9662 -0.2243
+vn 0.3729 -0.9003 -0.2243
+vn 0.5933 -0.7731 -0.2243
+vn 0.7731 -0.5933 -0.2243
+vn 0.9003 -0.3729 -0.2243
+vn 0.9662 -0.1272 -0.2243
+vn 0.9662 0.1272 -0.2243
+vn 0.9003 0.3729 -0.2243
+vn 0.7731 0.5933 -0.2243
+vn 0.5933 0.7731 -0.2242
+vn 0.5933 0.7731 -0.2243
+vn 0.3729 0.9003 -0.2243
+vn 0.1272 0.9662 -0.2243
+vn -0.1272 0.9662 -0.2243
+vn -0.3729 0.9003 -0.2243
+vn -0.5933 0.7731 -0.2243
+vn -0.7731 0.5933 -0.2243
+vn -0.9003 0.3729 -0.2243
+vn -0.9662 0.1272 -0.2243
+vn -0.9089 -0.2283 -0.3489
+vn -0.9518 -0.1253 -0.2800
+vn -0.8844 -0.3663 -0.2894
+vn -0.7041 -0.6106 -0.3624
+vn -0.7590 -0.5824 -0.2911
+vn -0.5821 -0.7586 -0.2929
+vn -0.3125 -0.8796 -0.3586
+vn -0.3657 -0.8828 -0.2948
+vn -0.1246 -0.9467 -0.2969
+vn 0.1616 -0.9210 -0.3544
+vn 0.1246 -0.9461 -0.2990
+vn 0.3649 -0.8809 -0.3013
+vn 0.5954 -0.7233 -0.3497
+vn 0.5800 -0.7559 -0.3037
+vn 0.7553 -0.5795 -0.3061
+vn 0.8763 -0.3369 -0.3445
+vn 0.8788 -0.3640 -0.3087
+vn 0.9422 -0.1240 -0.3114
+vn 0.9413 0.1239 -0.3142
+vn 0.9306 0.1387 -0.3388
+vn 0.8762 0.3629 -0.3170
+vn 0.7433 0.5804 -0.3327
+vn 0.7516 0.5768 -0.3200
+vn 0.5761 0.7508 -0.3231
+vn 0.3607 0.8732 -0.3278
+vn 0.3617 0.8733 -0.3262
+vn 0.1233 0.9366 -0.3278
+vn 0.1233 0.9367 -0.3278
+vn -0.1233 0.9367 -0.3278
+vn -0.3615 0.8728 -0.3277
+vn -0.5752 0.7495 -0.3278
+vn -0.5751 0.7495 -0.3277
+vn -0.7495 0.5751 -0.3278
+vn -0.8728 0.3615 -0.3278
+vn -0.9367 0.1233 -0.3278
+vn 0.9962 0.0872 0.0000
+vn 0.9659 0.2588 0.0000
+vn 0.9063 0.4226 0.0000
+vn 0.8192 0.5736 0.0000
+vn 0.7071 0.7071 0.0000
+vn 0.5736 0.8192 0.0000
+vn 0.4226 0.9063 0.0000
+vn 0.2588 0.9659 0.0000
+vn 0.0872 0.9962 0.0000
+vn -0.0872 0.9962 0.0000
+vn -0.2588 0.9659 0.0000
+vn -0.4226 0.9063 0.0000
+vn -0.5736 0.8192 0.0000
+vn -0.7071 0.7071 0.0000
+vn -0.8192 0.5736 0.0000
+vn -0.9063 0.4226 0.0000
+vn -0.9659 0.2588 0.0000
+vn -0.9962 0.0872 0.0000
+vn -0.9962 -0.0872 0.0000
+vn -0.9659 -0.2588 0.0000
+vn -0.9063 -0.4226 0.0000
+vn -0.8192 -0.5736 0.0000
+vn -0.7071 -0.7071 0.0000
+vn -0.5736 -0.8192 0.0000
+vn -0.4226 -0.9063 0.0000
+vn -0.2588 -0.9659 0.0000
+vn -0.0872 -0.9962 0.0000
+vn 0.0872 -0.9962 0.0000
+vn 0.2588 -0.9659 0.0000
+vn 0.4226 -0.9063 0.0000
+vn 0.5736 -0.8192 0.0000
+vn 0.7071 -0.7071 0.0000
+vn 0.8192 -0.5736 0.0000
+vn 0.9063 -0.4226 0.0000
+vn 0.9659 -0.2588 0.0000
+vn 0.9962 -0.0872 0.0000
+vn 0.9601 0.0840 -0.2668
+vn 0.9465 0.0828 0.3119
+vn 0.9087 0.2435 0.3392
+vn 0.9601 -0.0840 -0.2668
+vn 0.9087 -0.2435 0.3392
+vn 0.9465 -0.0828 0.3119
+vn 0.9044 0.2423 -0.3513
+vn 0.8734 0.4073 -0.2668
+vn 0.7895 0.5528 -0.2668
+vn 0.9595 0.2571 -0.1154
+vn 0.6620 0.6620 -0.3513
+vn 0.5528 0.7895 -0.2668
+vn 0.4073 0.8734 -0.2668
+vn 0.9659 0.2588 0.0108
+vn 0.7024 0.7024 -0.1154
+vn 0.7071 0.7071 0.0108
+vn 0.2423 0.9044 -0.3513
+vn 0.0840 0.9601 -0.2668
+vn -0.0840 0.9601 -0.2668
+vn 0.9582 0.2567 0.1262
+vn 0.2571 0.9595 -0.1154
+vn -0.2423 0.9044 -0.3513
+vn -0.4073 0.8734 -0.2668
+vn -0.5528 0.7895 -0.2668
+vn -0.2571 0.9595 -0.1154
+vn 0.7015 0.7015 0.1262
+vn 0.2588 0.9659 0.0108
+vn -0.2588 0.9659 0.0108
+vn 0.8611 0.4015 0.3119
+vn 0.7783 0.5450 0.3119
+vn 0.6875 0.6875 0.2340
+vn 0.9391 0.2516 0.2340
+vn -0.6620 0.6620 -0.3513
+vn -0.7895 0.5528 -0.2668
+vn -0.8734 0.4073 -0.2668
+vn 0.2567 0.9582 0.1262
+vn -0.2567 0.9582 0.1262
+vn -0.7024 0.7024 -0.1154
+vn 0.6652 0.6652 0.3392
+vn 0.5450 0.7783 0.3119
+vn 0.4015 0.8611 0.3119
+vn 0.2435 0.9087 0.3392
+vn 0.2516 0.9391 0.2340
+vn -0.9044 0.2423 -0.3513
+vn -0.9601 0.0840 -0.2668
+vn -0.9601 -0.0840 -0.2668
+vn -0.9595 0.2571 -0.1154
+vn -0.7071 0.7071 0.0108
+vn -0.7015 0.7015 0.1262
+vn 0.0828 0.9465 0.3119
+vn -0.0828 0.9465 0.3119
+vn -0.2435 0.9087 0.3392
+vn -0.9044 -0.2423 -0.3513
+vn -0.8734 -0.4073 -0.2668
+vn -0.7895 -0.5528 -0.2668
+vn -0.9659 0.2588 0.0108
+vn -0.9595 -0.2571 -0.1154
+vn -0.2516 0.9391 0.2340
+vn -0.4015 0.8611 0.3119
+vn -0.5450 0.7783 0.3119
+vn -0.6652 0.6652 0.3392
+vn -0.6620 -0.6620 -0.3513
+vn -0.5528 -0.7895 -0.2668
+vn -0.4073 -0.8734 -0.2668
+vn -0.7024 -0.7024 -0.1154
+vn -0.9582 0.2567 0.1262
+vn -0.9659 -0.2588 0.0108
+vn -0.6875 0.6875 0.2340
+vn -0.7783 0.5450 0.3119
+vn -0.8611 0.4015 0.3119
+vn -0.2423 -0.9044 -0.3513
+vn -0.0840 -0.9601 -0.2668
+vn 0.0840 -0.9601 -0.2668
+vn -0.9582 -0.2567 0.1262
+vn -0.7071 -0.7071 0.0108
+vn -0.2571 -0.9595 -0.1154
+vn -0.9391 0.2516 0.2340
+vn -0.9087 0.2435 0.3392
+vn -0.9465 0.0828 0.3119
+vn -0.9465 -0.0828 0.3119
+vn 0.2423 -0.9044 -0.3513
+vn 0.4073 -0.8734 -0.2668
+vn 0.5528 -0.7895 -0.2668
+vn 0.6620 -0.6620 -0.3513
+vn -0.7015 -0.7015 0.1262
+vn -0.2588 -0.9659 0.0108
+vn -0.2567 -0.9582 0.1262
+vn 0.2571 -0.9595 -0.1154
+vn -0.9391 -0.2516 0.2340
+vn -0.6875 -0.6875 0.2340
+vn -0.9087 -0.2435 0.3392
+vn -0.8611 -0.4015 0.3119
+vn -0.7783 -0.5450 0.3119
+vn -0.6652 -0.6652 0.3392
+vn 0.9044 -0.2423 -0.3513
+vn 0.7895 -0.5528 -0.2668
+vn 0.8734 -0.4073 -0.2668
+vn 0.2588 -0.9659 0.0108
+vn 0.7071 -0.7071 0.0108
+vn 0.7024 -0.7024 -0.1154
+vn 0.9595 -0.2571 -0.1154
+vn 0.9659 -0.2588 0.0108
+vn -0.5450 -0.7783 0.3119
+vn -0.4015 -0.8611 0.3119
+vn 0.2567 -0.9582 0.1262
+vn 0.7015 -0.7015 0.1262
+vn -0.2435 -0.9087 0.3392
+vn -0.0828 -0.9465 0.3119
+vn 0.0828 -0.9465 0.3119
+vn 0.2435 -0.9087 0.3392
+vn -0.2516 -0.9391 0.2340
+vn 0.9582 -0.2567 0.1262
+vn 0.2516 -0.9391 0.2340
+vn 0.4015 -0.8611 0.3119
+vn 0.5450 -0.7783 0.3119
+vn 0.6875 -0.6875 0.2340
+vn 0.9391 -0.2516 0.2340
+vn 0.6652 -0.6652 0.3392
+vn 0.7783 -0.5450 0.3119
+vn 0.8611 -0.4015 0.3119
+vn 0.5686 0.0497 0.8211
+vn 0.5514 0.1477 0.8211
+vn 0.5173 0.2412 0.8211
+vn 0.4676 0.3274 0.8211
+vn 0.4036 0.4036 0.8211
+vn 0.3274 0.4676 0.8211
+vn 0.2412 0.5173 0.8211
+vn 0.1477 0.5514 0.8211
+vn 0.1477 0.5513 0.8211
+vn 0.0497 0.5686 0.8211
+vn -0.0497 0.5686 0.8211
+vn -0.1477 0.5514 0.8211
+vn -0.1477 0.5513 0.8211
+vn -0.2412 0.5173 0.8211
+vn -0.3274 0.4676 0.8211
+vn -0.4036 0.4036 0.8211
+vn -0.4676 0.3274 0.8211
+vn -0.5173 0.2412 0.8211
+vn -0.5514 0.1477 0.8211
+vn -0.5686 0.0497 0.8211
+vn -0.5686 -0.0497 0.8211
+vn -0.5513 -0.1477 0.8211
+vn -0.5514 -0.1477 0.8211
+vn -0.5173 -0.2412 0.8211
+vn -0.4676 -0.3274 0.8211
+vn -0.4036 -0.4036 0.8211
+vn -0.3274 -0.4676 0.8211
+vn -0.2412 -0.5173 0.8211
+vn -0.1477 -0.5514 0.8211
+vn -0.1477 -0.5513 0.8211
+vn -0.0497 -0.5686 0.8211
+vn 0.0497 -0.5686 0.8211
+vn 0.1477 -0.5514 0.8211
+vn 0.2412 -0.5173 0.8211
+vn 0.3274 -0.4676 0.8211
+vn 0.4036 -0.4036 0.8211
+vn 0.4676 -0.3274 0.8211
+vn 0.5173 -0.2412 0.8211
+vn 0.5514 -0.1477 0.8211
+vn 0.5513 -0.1477 0.8211
+vn 0.5686 -0.0497 0.8211
+vn 0.8930 0.0781 -0.4431
+vn 0.8659 0.2320 -0.4431
+vn 0.8125 0.3789 -0.4431
+vn 0.7343 0.5142 -0.4431
+vn 0.6339 0.6339 -0.4431
+vn 0.5142 0.7343 -0.4431
+vn 0.3789 0.8125 -0.4431
+vn 0.2320 0.8659 -0.4431
+vn 0.0781 0.8930 -0.4431
+vn -0.0781 0.8930 -0.4431
+vn -0.2320 0.8659 -0.4431
+vn -0.3789 0.8125 -0.4431
+vn -0.5142 0.7343 -0.4431
+vn -0.6339 0.6339 -0.4431
+vn -0.7343 0.5142 -0.4431
+vn -0.8125 0.3789 -0.4431
+vn -0.8659 0.2320 -0.4431
+vn -0.8930 0.0781 -0.4431
+vn -0.8930 -0.0781 -0.4431
+vn -0.8659 -0.2320 -0.4431
+vn -0.8125 -0.3789 -0.4431
+vn -0.7343 -0.5142 -0.4431
+vn -0.6339 -0.6339 -0.4431
+vn -0.5142 -0.7343 -0.4431
+vn -0.3789 -0.8125 -0.4431
+vn -0.2320 -0.8659 -0.4431
+vn -0.0781 -0.8930 -0.4431
+vn 0.0781 -0.8930 -0.4431
+vn 0.2320 -0.8659 -0.4431
+vn 0.3789 -0.8125 -0.4431
+vn 0.5142 -0.7343 -0.4431
+vn 0.6339 -0.6339 -0.4431
+vn 0.7343 -0.5142 -0.4431
+vn 0.8125 -0.3789 -0.4431
+vn 0.8659 -0.2320 -0.4431
+vn 0.8930 -0.0781 -0.4431
+vn 0.0000 0.0000 -1.0000
+vn -0.9548 -0.0835 -0.2853
+vn -0.9547 -0.0835 0.2855
+vn -0.8890 -0.2382 0.3911
+vn -0.9220 0.2470 -0.2982
+vn -0.9548 0.0835 -0.2853
+vn -0.8890 0.2382 0.3911
+vn -0.9547 0.0835 0.2855
+vn -0.9220 -0.2470 -0.2982
+vn -0.8686 -0.4051 -0.2853
+vn -0.7851 -0.5497 -0.2853
+vn -0.6749 -0.6749 -0.2982
+vn -0.5497 -0.7851 -0.2853
+vn -0.4051 -0.8686 -0.2853
+vn -0.7015 -0.7015 -0.1252
+vn -0.9583 -0.2568 -0.1252
+vn -0.2470 -0.9220 -0.2982
+vn -0.0835 -0.9548 -0.2853
+vn 0.0835 -0.9548 -0.2853
+vn 0.2470 -0.9220 -0.2982
+vn -0.9654 -0.2587 0.0337
+vn -0.9368 -0.1786 0.3008
+vn -0.8824 -0.4115 0.2282
+vn -0.7975 -0.5584 0.2282
+vn -0.9524 -0.2552 0.1670
+vn 0.4051 -0.8686 -0.2853
+vn 0.5497 -0.7851 -0.2853
+vn -0.7067 -0.7067 0.0337
+vn -0.6785 -0.6785 0.2814
+vn -0.5584 -0.7975 0.2282
+vn -0.4115 -0.8824 0.2282
+vn -0.2568 -0.9583 -0.1252
+vn 0.2568 -0.9583 -0.1252
+vn 0.6749 -0.6749 -0.2982
+vn 0.7851 -0.5497 -0.2853
+vn 0.8686 -0.4051 -0.2853
+vn 0.9220 -0.2470 -0.2982
+vn -0.2484 -0.9269 0.2814
+vn -0.0849 -0.9699 0.2282
+vn 0.0849 -0.9699 0.2282
+vn -0.2587 -0.9654 0.0337
+vn 0.2587 -0.9654 0.0337
+vn 0.9548 -0.0835 -0.2853
+vn 0.9548 0.0835 -0.2853
+vn 0.9220 0.2470 -0.2982
+vn 0.2484 -0.9269 0.2814
+vn 0.4115 -0.8824 0.2282
+vn 0.5584 -0.7975 0.2282
+vn 0.7015 -0.7015 -0.1252
+vn 0.9583 -0.2568 -0.1252
+vn 0.8686 0.4051 -0.2853
+vn 0.7851 0.5497 -0.2853
+vn 0.6749 0.6749 -0.2982
+vn 0.7067 -0.7067 0.0337
+vn 0.6785 -0.6785 0.2814
+vn 0.7975 -0.5584 0.2282
+vn 0.8824 -0.4115 0.2282
+vn 0.9269 -0.2484 0.2814
+vn 0.9654 -0.2587 0.0337
+vn 0.5497 0.7851 -0.2853
+vn 0.4051 0.8686 -0.2853
+vn 0.2470 0.9220 -0.2982
+vn 0.9699 -0.0849 0.2282
+vn 0.9699 0.0849 0.2282
+vn 0.9583 0.2568 -0.1252
+vn 0.0835 0.9548 -0.2853
+vn -0.0835 0.9548 -0.2853
+vn -0.2470 0.9220 -0.2982
+vn 0.9654 0.2587 0.0337
+vn 0.9269 0.2484 0.2814
+vn 0.8824 0.4115 0.2282
+vn 0.7975 0.5584 0.2282
+vn 0.7015 0.7015 -0.1252
+vn -0.4051 0.8686 -0.2853
+vn -0.5497 0.7851 -0.2853
+vn 0.6785 0.6785 0.2814
+vn 0.7067 0.7067 0.0337
+vn 0.5584 0.7975 0.2282
+vn 0.4115 0.8824 0.2282
+vn 0.2484 0.9269 0.2814
+vn 0.2568 0.9583 -0.1252
+vn -0.2568 0.9583 -0.1252
+vn -0.6749 0.6749 -0.2982
+vn -0.7851 0.5497 -0.2853
+vn -0.8686 0.4051 -0.2853
+vn 0.2587 0.9654 0.0337
+vn 0.0849 0.9699 0.2282
+vn -0.0849 0.9699 0.2282
+vn -0.2587 0.9654 0.0337
+vn -0.2484 0.9269 0.2814
+vn -0.4115 0.8824 0.2282
+vn -0.5584 0.7975 0.2282
+vn -0.6785 0.6785 0.2814
+vn -0.7015 0.7015 -0.1252
+vn -0.9583 0.2568 -0.1252
+vn -0.9654 0.2587 0.0337
+vn -0.9524 0.2552 0.1670
+vn -0.9368 0.1786 0.3008
+vn -0.7067 0.7067 0.0337
+vn -0.7975 0.5584 0.2282
+vn -0.8824 0.4115 0.2282
+vn -0.4469 -0.0391 -0.8937
+vn -0.4333 -0.1161 -0.8937
+vn -0.4066 -0.1896 -0.8937
+vn -0.4065 -0.1896 -0.8937
+vn -0.3675 -0.2573 -0.8937
+vn -0.3172 -0.3172 -0.8937
+vn -0.2573 -0.3675 -0.8937
+vn -0.1896 -0.4066 -0.8937
+vn -0.1161 -0.4333 -0.8937
+vn -0.0391 -0.4469 -0.8937
+vn 0.0391 -0.4469 -0.8937
+vn 0.1161 -0.4333 -0.8937
+vn 0.1896 -0.4065 -0.8937
+vn 0.1896 -0.4066 -0.8937
+vn 0.2573 -0.3675 -0.8937
+vn 0.3172 -0.3172 -0.8937
+vn 0.3675 -0.2573 -0.8937
+vn 0.4066 -0.1896 -0.8937
+vn 0.4065 -0.1896 -0.8937
+vn 0.4333 -0.1161 -0.8937
+vn 0.4469 -0.0391 -0.8937
+vn 0.4469 0.0391 -0.8937
+vn 0.4333 0.1161 -0.8937
+vn 0.4065 0.1896 -0.8937
+vn 0.3675 0.2573 -0.8937
+vn 0.3172 0.3172 -0.8937
+vn 0.2573 0.3675 -0.8937
+vn 0.1896 0.4065 -0.8937
+vn 0.1896 0.4066 -0.8937
+vn 0.1161 0.4333 -0.8937
+vn 0.0391 0.4469 -0.8937
+vn -0.0391 0.4469 -0.8937
+vn -0.1161 0.4333 -0.8937
+vn -0.1896 0.4065 -0.8937
+vn -0.1896 0.4066 -0.8937
+vn -0.2573 0.3675 -0.8937
+vn -0.3172 0.3172 -0.8937
+vn -0.3675 0.2573 -0.8937
+vn -0.4066 0.1896 -0.8937
+vn -0.4065 0.1896 -0.8937
+vn -0.4333 0.1161 -0.8937
+vn -0.4469 0.0391 -0.8937
+vn -0.8191 -0.5736 0.0000
+vn -0.5736 -0.8191 0.0000
+vn 0.5736 -0.8191 0.0000
+vn 0.8191 -0.5736 0.0000
+vn 0.8191 0.5736 0.0000
+vn 0.5736 0.8191 0.0000
+vn -0.5736 0.8191 0.0000
+vn -0.8191 0.5736 0.0000
+vn -0.0000 0.0000 1.0000
+s off
+f 463//1 459//1 458//1 460//1 28//1 575//1 576//1 580//1 26//1
+f 464//1 463//1 26//1
+f 467//2 462//2 461//2 464//2 26//2 578//2 579//2 586//2 30//2 466//2
+f 30//2 470//2 465//2 466//2
+f 473//3 469//3 468//3 470//3 30//3 588//3 589//3 596//3 32//3
+f 474//3 473//3 32//3
+f 34//4 478//4 475//4 472//4 471//4 474//4 32//4 591//4 592//4 599//4
+f 34//4 477//4 478//4
+f 36//5 484//5 480//5 479//5 476//5 477//5 34//5 601//5 602//5 607//5
+f 36//5 485//5 484//5
+f 37//6 487//6 486//6 483//6 482//6 36//6 609//6 610//6 612//6
+f 485//6 36//6 482//6 481//6
+f 40//7 492//7 491//7 489//7 488//7 490//7 37//7 614//7 615//7 622//7
+f 487//7 37//7 490//7
+f 42//8 497//8 496//8 495//8 494//8 493//8 40//8 617//8 618//8 625//8
+f 492//8 40//8 493//8
+f 44//9 504//9 500//9 499//9 498//9 42//9 627//9 628//9 635//9
+f 497//9 42//9 498//9
+f 507//10 503//10 502//10 44//10 631//10 632//10 637//10 46//10 506//10
+f 501//10 504//10 44//10 502//10
+f 511//11 510//11 508//11 509//11 46//11 639//11 640//11 647//11 48//11 514//11
+f 505//11 506//11 46//11 509//11
+f 50//12 516//12 515//12 512//12 513//12 48//12 642//12 643//12 650//12
+f 514//12 48//12 513//12
+f 516//13 50//13 519//13
+f 52//13 521//13 520//13 518//13 517//13 519//13 50//13 652//13 653//13 660//13
+f 523//14 522//14 521//14 52//14 655//14 656//14 663//14 54//14 524//14
+f 524//14 54//14 526//14 525//14
+f 526//15 54//15 527//15
+f 55//15 533//15 529//15 528//15 527//15 54//15 665//15 666//15 669//15
+f 533//16 55//16 531//16 530//16
+f 676//16 57//16 535//16 534//16 532//16 531//16 55//16 671//16 673//16
+f 543//17 538//17 537//17 539//17 57//17 679//17 680//17 684//17 59//17
+f 535//17 57//17 539//17 536//17
+f 690//18 61//18 545//18 544//18 542//18 541//18 59//18 682//18 683//18
+f 59//18 541//18 540//18 543//18
+f 692//19 64//19 552//19 549//19 547//19 546//19 548//19 61//19 695//19 693//19
+f 548//19 545//19 61//19
+f 703//20 65//20 555//20 554//20 553//20 550//20 551//20 64//20 699//20 701//20
+f 64//20 551//20 552//20
+f 707//21 67//21 560//21 558//21 556//21 557//21 65//21 705//21 706//21
+f 65//21 557//21 555//21
+f 715//22 69//22 565//22 563//22 562//22 561//22 67//22 712//22 713//22
+f 560//22 67//22 561//22 559//22
+f 569//23 568//23 567//23 566//23 69//23 717//23 718//23 719//23 71//23
+f 565//23 69//23 566//23 564//23
+f 728//24 28//24 460//24 573//24 571//24 572//24 71//24 725//24 726//24
+f 71//24 572//24 570//24 569//24
+f 74//25 26//25 581//25 584//25
+f 26//25 580//25 581//25
+f 574//25 575//25 28//25 278//25
+f 583//26 582//26 74//26
+f 280//26 30//26 585//26
+f 30//26 586//26 585//26
+f 577//26 578//26 26//26 74//26 582//26
+f 78//27 32//27 597//27 595//27
+f 32//27 596//27 597//27
+f 587//27 588//27 30//27 280//27
+f 283//28 34//28 598//28
+f 593//29 594//29 78//29
+f 598//28 34//28 599//28
+f 32//28 78//28 594//28 590//28 591//28
+f 605//30 80//30 608//30
+f 283//30 600//30 34//30
+f 80//30 36//30 607//30 608//30
+f 34//30 600//30 601//30
+f 286//31 37//31 611//31
+f 603//31 604//31 80//31
+f 611//31 37//31 612//31
+f 36//31 80//31 604//31 606//31 609//31
+f 83//32 40//32 623//32 621//32
+f 623//32 40//32 622//32
+f 613//32 614//32 37//32 286//32
+f 289//33 42//33 624//33
+f 619//33 620//33 83//33
+f 624//33 42//33 625//33
+f 40//33 83//33 620//33 616//33 617//33
+f 86//34 44//34 636//34 633//34
+f 636//34 44//34 635//34
+f 626//34 627//34 42//34 289//34
+f 629//35 630//35 44//35 86//35 634//35
+f 292//35 46//35 637//35
+f 630//35 631//35 44//35
+f 90//36 48//36 648//36 646//36
+f 648//36 48//36 647//36
+f 638//36 639//36 46//36 292//36
+f 295//37 50//37 649//37
+f 644//37 645//37 90//37
+f 649//37 50//37 650//37
+f 48//37 90//37 645//37 641//37 642//37
+f 92//38 52//38 661//38 659//38
+f 661//38 52//38 660//38
+f 651//38 652//38 50//38 295//38
+f 662//39 54//39 663//39
+f 52//39 92//39 658//39 654//39 655//39
+f 298//39 54//39 662//39
+f 657//39 658//39 92//39
+f 668//40 55//40 669//40
+f 664//40 665//40 54//40 298//40
+f 95//40 55//40 668//40 667//40 670//40
+f 674//41 672//41 95//41
+f 677//42 301//42 57//42
+f 671//42 55//42 95//42 672//42
+f 57//42 676//42 675//42 677//42
+f 301//43 678//43 57//43
+f 688//43 98//43 685//43
+f 678//43 679//43 57//43
+f 59//43 684//43 685//43 98//43
+f 687//44 686//44 98//44
+f 689//44 304//44 61//44
+f 61//44 690//44 689//44
+f 681//44 682//44 59//44 98//44 686//44
+f 304//45 694//45 61//45
+f 696//45 102//45 697//45
+f 694//45 695//45 61//45
+f 64//45 692//45 691//45 697//45 102//45
+f 698//46 700//46 102//46
+f 307//46 65//46 702//46
+f 65//46 703//46 702//46
+f 700//46 699//46 64//46 102//46
+f 105//47 67//47 711//47 710//47
+f 67//47 707//47 711//47
+f 704//47 705//47 65//47 307//47
+f 714//48 67//48 105//48 708//48 709//48
+f 714//48 712//48 67//48
+f 715//48 310//48 69//48
+f 724//49 107//49 71//49 720//49
+f 71//49 719//49 720//49
+f 716//49 717//49 69//49 310//49
+f 723//50 721//50 107//50
+f 727//50 278//50 28//50
+f 28//50 728//50 727//50
+f 722//50 725//50 71//50 107//50 721//50
+f 74//51 731//51 732//51
+f 731//52 74//52 584//52
+f 732//53 583//53 74//53
+f 78//54 734//54 733//54
+f 734//55 78//55 595//55
+f 733//56 593//56 78//56
+f 80//57 736//57 735//57
+f 736//58 80//58 605//58
+f 735//59 603//59 80//59
+f 83//60 738//60 737//60
+f 83//61 621//61 738//61
+f 83//62 737//62 619//62
+f 739//63 86//63 740//63
+f 86//64 633//64 740//64
+f 739//65 634//65 86//65
+f 90//66 742//66 741//66
+f 742//67 90//67 646//67
+f 741//68 644//68 90//68
+f 744//69 92//69 659//69
+f 92//70 744//70 743//70
+f 92//71 743//71 657//71
+f 746//72 95//72 745//72
+f 95//73 670//73 745//73
+f 95//74 746//74 674//74
+f 98//75 747//75 749//75
+f 747//76 98//76 688//76
+f 749//77 748//77 98//77
+f 748//78 687//78 98//78
+f 102//79 751//79 750//79
+f 751//79 102//79 696//79
+f 102//80 750//80 698//80
+f 752//81 105//81 753//81
+f 753//82 105//82 710//82
+f 105//83 752//83 708//83
+f 107//84 729//84 730//84
+f 729//84 107//84 724//84
+f 730//85 723//85 107//85
+s 1
+f 1//86 2//86 3//86
+f 4//86 2//86 1//86
+f 3//87 5//87 6//87
+f 2//87 5//87 3//87
+f 6//88 7//88 8//88
+f 5//88 7//88 6//88
+f 8//89 9//89 10//89
+f 7//89 9//89 8//89
+f 10//90 11//90 12//90
+f 9//90 11//90 10//90
+f 12//91 13//91 14//91
+f 11//91 13//91 12//91
+f 13//92 15//92 14//92
+f 14//92 15//92 16//92
+f 16//93 17//93 18//93
+f 15//93 17//93 16//93
+f 18//94 19//94 20//94
+f 17//94 19//94 18//94
+f 19//95 21//95 20//95
+f 20//95 21//95 22//95
+f 22//96 21//96 23//96
+f 21//96 24//96 23//96
+f 23//97 25//97 27//97
+f 24//97 25//97 23//97
+f 27//98 29//98 31//98
+f 25//98 29//98 27//98
+f 31//99 33//99 35//99
+f 29//99 33//99 31//99
+f 35//100 38//100 39//100
+f 33//100 38//100 35//100
+f 39//101 41//101 43//101
+f 38//101 41//101 39//101
+f 43//102 45//102 47//102
+f 47//103 45//103 49//103
+f 41//102 45//102 43//102
+f 45//103 51//103 49//103
+f 49//104 53//104 56//104
+f 51//104 53//104 49//104
+f 56//105 58//105 60//105
+f 53//105 58//105 56//105
+f 60//106 62//106 63//106
+f 58//106 62//106 60//106
+f 63//107 66//107 68//107
+f 62//107 66//107 63//107
+f 68//108 70//108 72//108
+f 66//108 70//108 68//108
+f 72//109 73//109 75//109
+f 70//109 73//109 72//109
+f 75//110 76//110 77//110
+f 73//110 76//110 75//110
+f 77//111 79//111 81//111
+f 81//112 79//112 82//112
+f 76//111 79//111 77//111
+f 79//112 84//112 82//112
+f 82//113 85//113 87//113
+f 84//113 85//113 82//113
+f 87//114 88//114 89//114
+f 89//115 88//115 91//115
+f 85//114 88//114 87//114
+f 88//115 93//115 91//115
+f 93//116 94//116 91//116
+f 91//116 94//116 96//116
+f 94//117 97//117 96//117
+f 96//117 97//117 99//117
+f 97//118 100//118 99//118
+f 99//118 100//118 101//118
+f 100//119 103//119 101//119
+f 101//119 103//119 104//119
+f 104//120 103//120 106//120
+f 103//120 108//120 106//120
+f 108//121 4//121 106//121
+f 106//121 4//121 1//121
+f 4//122 109//122 2//122
+f 112//123 110//123 111//123
+f 112//124 111//124 113//124
+f 108//125 109//125 4//125
+f 114//126 115//126 112//126
+f 115//127 110//127 112//127
+f 2//128 116//128 5//128
+f 5//129 116//129 7//129
+f 7//130 116//130 9//130
+f 109//128 116//128 2//128
+f 109//131 117//131 116//131
+f 118//131 117//131 109//131
+f 9//132 119//132 11//132
+f 11//133 119//133 13//133
+f 13//134 119//134 15//134
+f 116//132 119//132 9//132
+f 118//135 120//135 117//135
+f 121//135 120//135 118//135
+f 117//136 122//136 116//136
+f 116//136 122//136 119//136
+f 120//137 122//137 117//137
+f 15//138 123//138 17//138
+f 17//139 123//139 19//139
+f 19//140 123//140 21//140
+f 119//138 123//138 15//138
+f 124//141 125//141 121//141
+f 121//141 125//141 120//141
+f 120//137 126//137 122//137
+f 122//142 127//142 119//142
+f 119//142 127//142 123//142
+f 123//143 128//143 21//143
+f 21//143 128//143 24//143
+f 24//144 128//144 25//144
+f 25//145 128//145 29//145
+f 127//146 128//146 123//146
+f 125//147 129//147 120//147
+f 120//147 129//147 126//147
+f 126//148 130//148 122//148
+f 122//148 130//148 127//148
+f 127//146 131//146 128//146
+f 130//149 131//149 127//149
+f 112//124 113//124 132//124
+f 132//150 113//150 133//150
+f 132//151 133//151 134//151
+f 125//152 132//152 129//152
+f 112//153 132//153 124//153
+f 124//153 132//153 125//153
+f 29//154 135//154 33//154
+f 33//155 135//155 38//155
+f 38//156 135//156 41//156
+f 128//154 135//154 29//154
+f 129//157 136//157 126//157
+f 126//157 136//157 130//157
+f 136//158 137//158 130//158
+f 130//149 137//149 131//149
+f 128//159 138//159 135//159
+f 131//159 138//159 128//159
+f 140//160 134//160 139//160
+f 140//161 139//161 141//161
+f 140//162 141//162 142//162
+f 143//163 140//163 142//163
+f 132//152 140//152 129//152
+f 132//160 134//160 140//160
+f 129//164 140//164 136//164
+f 41//165 144//165 45//165
+f 45//166 144//166 51//166
+f 51//167 144//167 53//167
+f 135//165 144//165 41//165
+f 138//168 144//168 135//168
+f 136//158 145//158 137//158
+f 137//169 146//169 131//169
+f 131//169 146//169 138//169
+f 145//170 146//170 137//170
+f 138//168 147//168 144//168
+f 140//164 148//164 136//164
+f 148//171 143//171 149//171
+f 150//172 148//172 149//172
+f 151//173 148//173 150//173
+f 148//163 140//163 143//163
+f 53//174 152//174 58//174
+f 58//175 152//175 62//175
+f 62//176 152//176 66//176
+f 144//174 152//174 53//174
+f 145//170 153//170 146//170
+f 138//177 154//177 147//177
+f 146//177 154//177 138//177
+f 147//178 155//178 144//178
+f 144//178 155//178 152//178
+f 136//179 156//179 145//179
+f 156//173 148//173 151//173
+f 156//180 151//180 157//180
+f 158//181 156//181 157//181
+f 159//182 156//182 158//182
+f 148//179 156//179 136//179
+f 66//183 160//183 70//183
+f 70//184 160//184 73//184
+f 73//185 160//185 76//185
+f 155//186 160//186 152//186
+f 152//183 160//183 66//183
+f 153//187 161//187 146//187
+f 146//187 161//187 154//187
+f 147//188 162//188 155//188
+f 154//188 162//188 147//188
+f 155//186 163//186 160//186
+f 156//189 164//189 145//189
+f 145//189 164//189 153//189
+f 164//190 159//190 165//190
+f 164//191 165//191 166//191
+f 164//182 156//182 159//182
+f 76//192 167//192 79//192
+f 79//193 167//193 84//193
+f 84//194 167//194 85//194
+f 160//192 167//192 76//192
+f 154//195 168//195 162//195
+f 161//195 168//195 154//195
+f 155//196 169//196 163//196
+f 162//196 169//196 155//196
+f 163//197 170//197 160//197
+f 160//197 170//197 167//197
+f 153//198 171//198 161//198
+f 171//199 166//199 172//199
+f 171//200 172//200 173//200
+f 174//201 171//201 173//201
+f 171//199 164//199 166//199
+f 164//198 171//198 153//198
+f 85//202 175//202 88//202
+f 88//203 175//203 93//203
+f 93//204 175//204 94//204
+f 94//205 175//205 97//205
+f 167//202 175//202 85//202
+f 162//206 176//206 169//206
+f 168//206 176//206 162//206
+f 169//207 177//207 163//207
+f 176//208 177//208 169//208
+f 163//207 177//207 170//207
+f 170//209 178//209 167//209
+f 167//209 178//209 175//209
+f 171//210 179//210 161//210
+f 161//210 179//210 168//210
+f 168//211 179//211 176//211
+f 179//212 171//212 174//212
+f 179//212 174//212 180//212
+f 179//213 180//213 181//213
+f 182//214 179//214 181//214
+f 179//215 182//215 183//215
+f 108//216 184//216 109//216
+f 175//205 184//205 97//205
+f 97//217 184//217 100//217
+f 100//218 184//218 103//218
+f 103//216 184//216 108//216
+f 176//208 185//208 177//208
+f 177//219 186//219 170//219
+f 170//219 186//219 178//219
+f 186//220 187//220 178//220
+f 175//221 187//221 184//221
+f 184//222 187//222 109//222
+f 109//222 187//222 118//222
+f 118//223 187//223 121//223
+f 178//221 187//221 175//221
+f 179//211 188//211 176//211
+f 183//224 189//224 188//224
+f 188//225 189//225 190//225
+f 179//215 183//215 188//215
+f 177//226 191//226 186//226
+f 185//226 191//226 177//226
+f 187//223 192//223 121//223
+f 186//220 192//220 187//220
+f 191//227 192//227 186//227
+f 188//228 190//228 193//228
+f 190//228 194//228 193//228
+f 194//229 195//229 193//229
+f 193//230 195//230 196//230
+f 193//231 196//231 197//231
+f 176//232 193//232 185//232
+f 188//232 193//232 176//232
+f 191//227 198//227 192//227
+f 121//233 198//233 124//233
+f 192//233 198//233 121//233
+f 193//231 197//231 199//231
+f 185//234 199//234 191//234
+f 193//234 199//234 185//234
+f 199//235 197//235 200//235
+f 199//236 200//236 201//236
+f 199//237 202//237 191//237
+f 198//238 202//238 124//238
+f 199//239 201//239 202//239
+f 124//238 202//238 112//238
+f 202//126 114//126 112//126
+f 202//239 201//239 203//239
+f 203//240 204//240 202//240
+f 202//241 204//241 114//241
+f 191//237 202//237 198//237
+f 110//242 205//242 111//242
+f 206//242 205//242 110//242
+f 207//243 113//243 111//243
+f 207//243 111//243 205//243
+f 208//244 133//244 113//244
+f 208//244 113//244 207//244
+f 134//245 133//245 208//245
+f 209//245 134//245 208//245
+f 210//246 139//246 134//246
+f 210//246 134//246 209//246
+f 211//247 141//247 139//247
+f 211//247 139//247 210//247
+f 212//248 141//248 211//248
+f 212//248 142//248 141//248
+f 213//249 142//249 212//250
+f 213//249 143//249 142//249
+f 213//251 214//251 143//251
+f 143//251 214//251 149//251
+f 149//252 215//252 150//252
+f 214//252 215//252 149//252
+f 216//253 151//253 150//254
+f 215//254 216//253 150//254
+f 217//255 157//255 151//255
+f 216//255 217//255 151//255
+f 218//256 158//256 157//256
+f 217//256 218//256 157//256
+f 219//257 159//257 158//257
+f 218//257 219//257 158//257
+f 220//258 165//258 159//258
+f 219//258 220//258 159//258
+f 220//259 166//259 165//259
+f 221//259 166//259 220//259
+f 222//260 172//260 166//260
+f 221//260 222//260 166//260
+f 222//261 173//261 172//261
+f 222//261 223//261 173//261
+f 173//262 224//262 174//262
+f 223//262 224//262 173//262
+f 174//263 224//263 180//264
+f 224//263 225//264 180//264
+f 180//265 225//265 181//265
+f 225//265 226//265 181//265
+f 181//266 227//266 182//266
+f 181//266 226//266 227//266
+f 182//267 228//267 183//267
+f 182//267 227//267 228//267
+f 183//268 229//268 189//268
+f 183//268 228//268 229//268
+f 189//269 230//269 190//269
+f 189//269 229//269 230//269
+f 190//270 231//270 194//270
+f 190//270 230//271 231//270
+f 194//272 232//272 195//272
+f 231//272 232//272 194//272
+f 195//273 233//273 196//273
+f 232//273 233//273 195//273
+f 197//274 196//274 234//274
+f 196//274 233//274 234//274
+f 200//275 197//275 235//275
+f 197//275 234//275 235//275
+f 201//276 200//276 236//276
+f 200//276 235//276 236//276
+f 201//277 236//277 237//277
+f 203//277 201//277 237//277
+f 203//278 237//278 238//278
+f 204//278 203//278 238//278
+f 204//279 238//279 114//279
+f 114//279 238//279 239//279
+f 114//280 239//280 240//281
+f 115//281 114//280 240//281
+f 240//282 206//282 115//282
+f 115//282 206//282 110//282
+f 206//283 241//283 205//283
+f 206//283 242//283 241//283
+f 205//284 243//284 207//284
+f 205//284 241//284 243//284
+f 207//285 244//285 208//285
+f 207//285 243//285 244//285
+f 208//286 245//286 209//286
+f 208//286 244//286 245//286
+f 210//287 209//287 246//287
+f 246//287 209//287 245//287
+f 211//288 210//288 247//288
+f 247//288 210//288 246//288
+f 248//289 211//289 247//289
+f 212//289 211//289 248//289
+f 249//290 212//290 248//290
+f 213//290 212//290 249//290
+f 214//291 213//291 249//291
+f 214//291 249//291 250//291
+f 215//292 214//292 251//292
+f 251//292 214//292 250//292
+f 215//293 251//293 216//293
+f 216//293 251//293 252//293
+f 217//294 216//294 253//294
+f 216//294 252//294 253//294
+f 218//295 217//295 254//295
+f 217//295 253//295 254//295
+f 219//296 218//296 255//296
+f 218//296 254//296 255//296
+f 220//297 219//297 256//297
+f 256//297 219//297 255//297
+f 221//298 220//298 257//298
+f 257//298 220//298 256//298
+f 222//299 221//299 257//299
+f 222//299 257//299 258//299
+f 223//300 222//300 259//300
+f 259//300 222//300 258//300
+f 224//301 223//301 259//301
+f 224//301 259//301 260//301
+f 225//302 224//302 261//302
+f 224//302 260//302 261//302
+f 226//303 225//303 262//303
+f 225//303 261//303 262//303
+f 227//304 226//304 263//304
+f 226//304 262//304 263//304
+f 228//305 227//305 264//305
+f 227//305 263//305 264//305
+f 229//306 228//306 265//306
+f 228//306 264//306 265//306
+f 230//307 229//307 266//307
+f 229//307 265//307 266//307
+f 231//308 230//308 267//308
+f 230//308 266//308 267//308
+f 231//309 268//309 232//309
+f 231//309 267//309 268//309
+f 232//310 268//310 233//310
+f 268//310 269//310 233//310
+f 233//311 270//311 234//311
+f 233//311 269//311 270//311
+f 234//312 271//312 235//312
+f 234//312 270//312 271//312
+f 235//313 272//313 236//313
+f 235//313 271//313 272//313
+f 236//314 272//314 273//314
+f 236//314 273//314 237//314
+f 237//315 273//315 274//315
+f 238//315 237//315 274//315
+f 238//316 274//316 239//316
+f 239//316 274//316 275//316
+f 239//317 275//317 276//317
+f 240//317 239//317 276//317
+f 240//318 276//318 242//318
+f 240//318 242//318 206//318
+f 458//319 459//319 241//319 242//319
+f 458//319 242//319 460//319
+f 461//319 462//319 243//319 241//319
+f 461//319 241//319 459//319 463//319 464//319
+f 465//319 244//319 243//319 467//319 466//319
+f 462//319 467//319 243//319
+f 468//319 469//319 245//319 244//319
+f 470//319 468//319 244//319 465//319
+f 471//319 472//319 246//319 245//319
+f 471//319 245//319 469//319 473//319 474//319
+f 247//319 246//319 472//319 475//319
+f 476//319 247//319 475//319 478//319 477//319
+f 476//319 479//319 247//319
+f 479//319 480//319 248//319 247//319
+f 249//319 248//319 481//319 482//319 483//319
+f 481//319 248//319 480//319 484//319 485//319
+f 250//319 249//319 483//319 486//319
+f 486//319 487//319 250//319
+f 251//319 250//319 488//319 489//319
+f 488//319 250//319 487//319 490//319
+f 252//319 251//319 489//319 491//319
+f 252//319 491//319 492//319 493//319 494//319
+f 253//319 252//319 495//319 496//319
+f 494//319 495//319 252//319
+f 254//319 253//319 496//319 497//319 498//319 499//319
+f 254//319 499//319 500//319
+f 255//319 254//319 501//319 502//319 503//319
+f 501//319 254//319 500//319 504//319
+f 256//319 255//319 507//319 506//319 505//319
+f 503//319 507//319 255//319
+f 256//319 505//319 509//319 508//319 257//319
+f 257//319 508//319 510//319
+f 257//319 510//319 511//319 258//319
+f 258//319 511//319 514//319 513//319 512//319
+f 516//319 259//319 258//319 515//319
+f 258//319 512//319 515//319
+f 518//319 260//319 259//319 517//319
+f 519//319 517//319 259//319 516//319
+f 261//319 260//319 518//319 520//319
+f 522//319 261//319 520//319 521//319
+f 525//319 262//319 261//319 523//319 524//319
+f 522//319 523//319 261//319
+f 263//319 262//319 525//319 526//319 527//319 528//319
+f 263//319 528//319 529//319
+f 264//319 263//319 530//319 531//319 532//319
+f 530//319 263//319 529//319 533//319
+f 536//319 265//319 264//319 534//319 535//319
+f 532//319 534//319 264//319
+f 266//319 265//319 537//319 538//319
+f 537//319 265//319 536//319 539//319
+f 267//319 266//319 540//319 541//319 542//319
+f 540//319 266//319 538//319 543//319
+f 268//319 267//319 544//319 545//319
+f 542//319 544//319 267//319
+f 269//319 268//319 546//319 547//319
+f 546//319 268//319 545//319 548//319
+f 549//319 270//319 269//319 547//319
+f 270//319 549//319 552//319 551//319 550//319
+f 271//319 270//319 553//319 554//319
+f 270//319 550//319 553//319
+f 272//319 271//319 554//319 555//319 557//319 556//319
+f 272//319 556//319 558//319
+f 559//319 272//319 558//319 560//319
+f 273//319 272//319 559//319 561//319 562//319
+f 273//319 562//319 563//319
+f 564//319 274//319 273//319 563//319 565//319
+f 274//319 564//319 566//319 567//319
+f 275//319 274//319 567//319 568//319
+f 275//319 568//319 569//319 570//319
+f 571//319 276//319 275//319 570//319 572//319
+f 573//319 242//319 276//319 571//319
+f 460//319 242//319 573//319
+f 574//104 277//104 576//104 575//104
+f 574//104 278//104 277//104
+f 577//105 279//105 579//105 578//105
+f 580//105 576//105 277//105 584//105 581//105
+f 582//105 583//105 279//105 577//105
+f 279//106 280//106 585//106 586//106 579//106
+f 587//107 281//107 589//107 588//107
+f 587//107 280//107 281//107
+f 591//108 590//108 282//108 592//108
+f 594//108 593//108 282//108 590//108
+f 589//108 281//108 595//108 597//108 596//108
+f 592//109 282//109 283//109 598//109 599//109
+f 600//110 283//110 284//110 602//110 601//110
+f 604//111 603//111 285//111 606//111
+f 602//111 284//111 605//111 608//111 607//111
+f 609//111 606//111 285//111 610//111
+f 610//112 285//112 286//112 611//112 612//112
+f 614//113 613//113 287//113 615//113
+f 287//113 613//113 286//113
+f 617//114 616//114 288//114 618//114
+f 620//114 619//114 288//114 616//114
+f 615//114 287//114 621//114 623//114 622//114
+f 618//115 288//115 289//115 624//115 625//115
+f 627//116 626//116 290//116 628//116
+f 290//116 626//116 289//116
+f 630//117 629//117 291//117 632//117 631//117
+f 291//117 629//117 634//117
+f 628//117 290//117 633//117 636//117 635//117
+f 632//118 291//118 292//118 637//118
+f 639//119 638//119 293//119 640//119
+f 293//119 638//119 292//119
+f 642//120 641//120 294//120 643//120
+f 645//120 644//120 294//120 641//120
+f 640//120 293//120 646//120 648//120 647//120
+f 643//121 294//121 295//121 649//121 650//121
+f 652//86 651//86 296//86 653//86
+f 296//86 651//86 295//86
+f 655//87 654//87 297//87 656//87
+f 658//87 657//87 297//87 654//87
+f 653//87 296//87 659//87 661//87 660//87
+f 656//88 297//88 298//88 662//88 663//88
+f 665//89 664//89 299//89 666//89
+f 299//90 667//90 668//90 669//90 666//90
+f 299//89 664//89 298//89
+f 299//90 670//90 667//90
+f 672//90 674//90 300//90 673//90 671//90
+f 300//91 675//91 676//91 673//91
+f 300//91 301//91 677//91 675//91
+f 301//92 302//92 680//92 679//92 678//92
+f 681//93 303//93 683//93 682//93
+f 684//93 680//93 302//93 688//93 685//93
+f 686//93 687//93 303//93 681//93
+f 303//94 304//94 689//94 690//94 683//94
+f 305//96 691//96 692//96 693//96
+f 304//95 305//95 693//95 695//95 694//95
+f 305//96 696//96 697//96 691//96
+f 700//96 698//96 306//96 701//96 699//96
+f 306//97 307//97 702//97 703//97 701//97
+f 704//98 307//98 308//98
+f 704//98 308//98 706//98 705//98
+f 707//99 706//99 308//99 710//99 711//99
+f 708//99 309//99 709//99
+f 709//99 309//99 713//99 712//99 714//99
+f 715//100 713//100 309//100 310//100
+f 716//101 310//101 311//101
+f 716//101 311//101 718//101 717//101
+f 719//102 718//102 311//102 724//102 720//102
+f 721//102 723//102 312//102 722//102
+f 722//102 312//102 726//102 725//102
+f 312//103 278//103 727//103 728//103 726//103
+f 313//320 277//320 278//320
+f 314//321 315//321 316//321
+f 315//322 317//322 316//322
+f 311//323 313//323 312//323 723//323 730//323 729//323 724//323
+f 312//324 313//324 278//324
+f 318//325 319//325 316//325
+f 319//326 314//326 316//326
+f 731//327 584//327 277//327 320//327 279//327 583//327 732//327
+f 320//328 280//328 279//328
+f 320//329 281//329 280//329
+f 595//330 281//330 320//330 282//330 593//330 733//330 734//330
+f 313//327 320//327 277//327
+f 321//331 283//331 282//331
+f 321//332 284//332 283//332
+f 320//330 321//330 282//330
+f 320//333 322//333 321//333
+f 313//334 322//334 320//334
+f 323//334 322//334 313//334
+f 605//335 284//335 324//335 285//335 603//335 735//335 736//335
+f 324//336 286//336 285//336
+f 287//337 286//337 324//337
+f 738//338 621//338 287//338 324//338 288//338 619//338 737//338
+f 321//335 324//335 284//335
+f 323//339 325//339 322//339
+f 317//340 325//340 316//340
+f 326//341 325//341 317//341
+f 327//342 325//342 326//342
+f 328//339 325//339 323//339
+f 316//343 325//343 328//343
+f 322//333 329//333 321//333
+f 289//344 288//344 330//344
+f 330//338 288//338 324//338
+f 290//345 289//345 330//345
+f 325//346 331//346 322//346
+f 332//347 331//347 327//347
+f 333//348 331//348 332//348
+f 334//349 331//349 333//349
+f 322//346 331//346 329//346
+f 327//347 331//347 325//347
+f 321//350 335//350 324//350
+f 324//351 335//351 330//351
+f 329//350 335//350 321//350
+f 740//352 633//352 290//352 336//352 291//352 634//352 739//352
+f 336//353 292//353 291//353
+f 336//354 293//354 292//354
+f 742//355 646//355 293//355 336//355 294//355 644//355 741//355
+f 336//352 290//352 330//352
+f 334//356 337//356 331//356
+f 338//356 337//356 334//356
+f 339//357 337//357 338//357
+f 340//358 337//358 339//358
+f 331//359 337//359 329//359
+f 329//359 337//359 335//359
+f 337//360 341//360 335//360
+f 335//351 341//351 330//351
+f 342//361 295//361 294//361
+f 296//362 295//362 342//362
+f 744//363 659//363 296//363 342//363 297//363 657//363 743//363
+f 342//355 294//355 336//355
+f 343//364 344//364 340//364
+f 345//365 344//365 343//365
+f 346//366 344//366 345//366
+f 340//364 344//364 337//364
+f 337//360 344//360 341//360
+f 341//367 347//367 330//367
+f 336//368 347//368 342//368
+f 330//367 347//367 336//367
+f 298//369 297//369 348//369
+f 299//370 298//370 348//370
+f 299//371 348//371 300//371 674//371 746//371 745//371 670//371
+f 348//363 297//363 342//363
+f 341//372 349//372 347//372
+f 344//372 349//372 341//372
+f 346//373 349//373 344//373
+f 350//373 349//373 346//373
+f 351//374 349//374 350//374
+f 352//375 349//375 351//375
+f 353//376 349//376 352//376
+f 349//377 354//377 347//377
+f 347//368 354//368 342//368
+f 300//378 355//378 301//378
+f 301//379 355//379 302//379
+f 688//380 302//380 355//380 303//380 687//380 748//380 749//380 747//380
+f 348//371 355//371 300//371
+f 349//377 356//377 354//377
+f 353//376 356//376 349//376
+f 357//381 356//381 353//381
+f 358//382 356//382 357//382
+f 354//383 359//383 342//383
+f 342//383 359//383 348//383
+f 303//384 360//384 304//384
+f 360//385 305//385 304//385
+f 305//386 360//386 306//386 698//386 750//386 751//386 696//386
+f 355//380 360//380 303//380
+f 356//387 361//387 354//387
+f 362//388 361//388 358//388
+f 363//389 361//389 362//389
+f 364//390 361//390 363//390
+f 358//388 361//388 356//388
+f 354//387 361//387 359//387
+f 348//391 365//391 355//391
+f 359//391 365//391 348//391
+f 366//392 307//392 306//392
+f 366//393 308//393 307//393
+f 366//386 306//386 360//386
+f 364//394 367//394 361//394
+f 359//395 367//395 365//395
+f 368//394 367//394 364//394
+f 369//396 367//396 368//396
+f 370//397 367//397 369//397
+f 371//398 367//398 370//398
+f 361//395 367//395 359//395
+f 365//399 372//399 355//399
+f 360//400 372//400 366//400
+f 355//399 372//399 360//399
+f 373//323 313//323 311//323
+f 710//401 308//401 373//401 309//401 708//401 752//401 753//401
+f 309//402 373//402 310//402
+f 310//403 373//403 311//403
+f 373//401 308//401 366//401
+f 365//404 374//404 372//404
+f 367//404 374//404 365//404
+f 375//405 374//405 371//405
+f 376//406 374//406 375//406
+f 371//398 374//398 367//398
+f 372//400 377//400 366//400
+f 372//407 378//407 377//407
+f 379//408 378//408 376//408
+f 380//409 378//409 379//409
+f 374//407 378//407 372//407
+f 381//410 378//410 380//410
+f 382//411 378//411 381//411
+f 376//408 378//408 374//408
+f 377//412 383//412 366//412
+f 366//412 383//412 373//412
+f 313//413 383//413 323//413
+f 323//414 383//414 328//414
+f 373//413 383//413 313//413
+f 328//415 384//415 316//415
+f 316//416 384//416 318//416
+f 377//417 384//417 383//417
+f 378//417 384//417 377//417
+f 382//411 384//411 378//411
+f 385//418 384//418 382//418
+f 318//419 384//419 385//419
+f 383//414 384//414 328//414
+f 314//420 386//420 315//420
+f 387//420 386//420 314//420
+f 315//421 388//421 317//421
+f 386//421 388//421 315//421
+f 388//422 326//423 317//422
+f 388//422 389//423 326//423
+f 326//424 390//424 327//424
+f 389//424 390//424 326//424
+f 327//425 391//425 332//425
+f 390//425 391//425 327//425
+f 391//426 333//426 332//426
+f 391//426 392//426 333//426
+f 392//427 393//427 333//427
+f 333//427 393//427 334//427
+f 334//428 394//428 338//428
+f 393//428 394//428 334//428
+f 394//429 339//429 338//429
+f 394//429 395//429 339//429
+f 339//430 396//430 340//430
+f 395//430 396//430 339//430
+f 396//431 343//431 340//431
+f 396//431 397//431 343//431
+f 343//432 398//433 345//433
+f 397//432 398//433 343//432
+f 398//434 346//434 345//434
+f 398//434 399//434 346//434
+f 399//435 350//435 346//435
+f 399//435 400//435 350//435
+f 350//436 401//436 351//436
+f 400//436 401//436 350//436
+f 401//437 352//438 351//437
+f 401//437 402//438 352//438
+f 352//439 403//439 353//439
+f 402//439 403//439 352//439
+f 353//440 404//440 357//440
+f 403//440 404//440 353//440
+f 404//441 358//441 357//441
+f 404//441 405//441 358//441
+f 405//442 362//442 358//442
+f 405//442 406//442 362//442
+f 362//443 407//443 363//443
+f 406//443 407//443 362//443
+f 407//444 364//444 363//444
+f 407//444 408//444 364//444
+f 364//445 409//445 368//445
+f 408//445 409//445 364//445
+f 368//446 410//446 369//446
+f 409//446 410//446 368//446
+f 369//447 411//448 370//448
+f 410//447 411//448 369//447
+f 370//449 412//449 371//449
+f 411//449 412//449 370//449
+f 371//450 413//450 375//450
+f 412//450 413//450 371//450
+f 375//451 414//451 376//451
+f 413//451 414//451 375//451
+f 376//452 415//452 379//452
+f 414//452 415//452 376//452
+f 379//453 416//454 380//454
+f 415//453 416//454 379//453
+f 380//455 417//455 381//455
+f 416//455 417//455 380//455
+f 417//456 418//456 381//456
+f 381//456 418//456 382//456
+f 418//457 419//457 382//457
+f 382//457 419//457 385//457
+f 419//458 420//459 385//458
+f 385//458 420//459 318//459
+f 420//460 421//460 318//460
+f 318//460 421//460 319//460
+f 421//461 314//461 319//461
+f 421//461 387//461 314//461
+f 387//104 422//104 386//104
+f 423//104 422//104 387//104
+f 386//105 424//105 388//105
+f 422//105 424//105 386//105
+f 388//106 425//106 389//106
+f 424//106 425//106 388//106
+f 389//462 426//107 390//107
+f 425//462 426//107 389//462
+f 390//108 427//108 391//108
+f 426//108 427//108 390//108
+f 391//463 428//109 392//109
+f 427//463 428//109 391//463
+f 428//110 429//110 392//110
+f 392//110 429//110 393//110
+f 393//111 430//111 394//111
+f 429//111 430//111 393//111
+f 394//112 431//112 395//112
+f 430//112 431//112 394//112
+f 431//113 432//113 395//113
+f 395//113 432//113 396//113
+f 396//114 432//114 397//114
+f 432//114 433//114 397//114
+f 397//115 434//115 398//115
+f 433//115 434//115 397//115
+f 398//464 435//116 399//116
+f 434//464 435//116 398//464
+f 399//117 436//117 400//117
+f 435//117 436//117 399//117
+f 400//465 437//118 401//118
+f 436//465 437//118 400//465
+f 401//119 438//119 402//119
+f 437//119 438//119 401//119
+f 402//120 439//120 403//120
+f 403//121 439//121 404//121
+f 438//120 439//120 402//120
+f 439//121 440//121 404//121
+f 404//86 441//86 405//86
+f 440//86 441//86 404//86
+f 405//87 442//87 406//87
+f 441//87 442//87 405//87
+f 406//88 443//88 407//88
+f 442//88 443//88 406//88
+f 407//466 444//89 408//89
+f 443//466 444//89 407//466
+f 408//90 445//90 409//90
+f 444//90 445//90 408//90
+f 409//467 446//91 410//91
+f 445//467 446//91 409//467
+f 410//92 447//92 411//92
+f 446//92 447//92 410//92
+f 411//93 448//93 412//93
+f 412//94 448//94 413//94
+f 447//93 448//93 411//93
+f 448//94 449//94 413//94
+f 413//95 450//95 414//95
+f 449//95 450//95 413//95
+f 414//96 451//96 415//96
+f 415//97 451//97 416//97
+f 450//96 451//96 414//96
+f 451//97 452//97 416//97
+f 452//468 453//98 416//468
+f 416//468 453//98 417//98
+f 453//99 454//99 417//99
+f 417//99 454//99 418//99
+f 454//469 455//100 418//469
+f 418//469 455//100 419//100
+f 455//101 456//101 419//101
+f 419//101 456//101 420//101
+f 420//102 456//102 421//102
+f 456//102 457//102 421//102
+f 457//103 423//103 421//103
+f 421//103 423//103 387//103
+f 423//470 3//470 422//470
+f 1//470 3//470 423//470
+f 422//470 6//470 424//470
+f 3//470 6//470 422//470
+f 424//470 8//470 425//470
+f 6//470 8//470 424//470
+f 425//470 10//470 426//470
+f 8//470 10//470 425//470
+f 426//470 12//470 427//470
+f 10//470 12//470 426//470
+f 427//470 14//470 428//470
+f 12//470 14//470 427//470
+f 14//470 16//470 428//470
+f 428//470 16//470 429//470
+f 16//470 18//470 429//470
+f 429//470 18//470 430//470
+f 18//470 20//470 430//470
+f 430//470 20//470 431//470
+f 431//470 22//470 432//470
+f 20//470 22//470 431//470
+f 432//470 23//470 433//470
+f 22//470 23//470 432//470
+f 23//470 434//470 433//470
+f 23//470 27//470 434//470
+f 434//470 31//470 435//470
+f 27//470 31//470 434//470
+f 435//470 35//470 436//470
+f 31//470 35//470 435//470
+f 35//470 437//470 436//470
+f 35//470 39//470 437//470
+f 437//470 43//470 438//470
+f 39//470 43//470 437//470
+f 43//470 439//470 438//470
+f 43//470 47//470 439//470
+f 439//470 49//470 440//470
+f 47//470 49//470 439//470
+f 440//470 56//470 441//470
+f 49//470 56//470 440//470
+f 441//470 60//470 442//470
+f 56//470 60//470 441//470
+f 442//470 63//470 443//470
+f 60//470 63//470 442//470
+f 443//470 68//470 444//470
+f 63//470 68//470 443//470
+f 68//470 445//470 444//470
+f 68//470 72//470 445//470
+f 445//470 75//470 446//470
+f 72//470 75//470 445//470
+f 446//470 77//470 447//470
+f 75//470 77//470 446//470
+f 447//470 81//470 448//470
+f 77//470 81//470 447//470
+f 448//470 82//470 449//470
+f 81//470 82//470 448//470
+f 82//470 450//470 449//470
+f 82//470 87//470 450//470
+f 450//470 89//470 451//470
+f 87//470 89//470 450//470
+f 451//470 91//470 452//470
+f 89//470 91//470 451//470
+f 91//470 453//470 452//470
+f 91//470 96//470 453//470
+f 96//470 99//470 453//470
+f 453//470 99//470 454//470
+f 99//470 455//470 454//470
+f 99//470 101//470 455//470
+f 101//470 104//470 455//470
+f 455//470 104//470 456//470
+f 104//470 106//470 456//470
+f 456//470 106//470 457//470
+f 106//470 1//470 457//470
+f 457//470 1//470 423//470
+o Cooling_systems
+v -24.174349 -24.174349 -0.000001
+v -29.607409 -17.093845 -0.000001
+v -17.093845 -29.607409 -0.000001
+v -8.848426 -33.022774 -0.000001
+v 8.848426 -33.022774 -0.000001
+v 0.000000 -34.187691 -0.000001
+v -33.022774 -8.848426 -0.000000
+v -33.022774 8.848426 0.000000
+v -34.187691 0.000000 0.000000
+v -29.607409 17.093845 0.000001
+v -24.174349 24.174349 0.000001
+v 17.093845 -29.607409 -0.000001
+v 29.607409 -17.093845 -0.000001
+v 24.174349 -24.174349 -0.000001
+v -17.093845 29.607409 0.000001
+v -8.848426 33.022774 0.000001
+v 0.000000 34.187691 0.000001
+v 34.187691 0.000000 0.000000
+v 33.022774 -8.848426 -0.000000
+v 33.022774 8.848426 0.000000
+v 8.848426 33.022774 0.000001
+v 17.093845 29.607409 0.000001
+v 24.174349 24.174349 0.000001
+v 29.607409 17.093845 0.000001
+v 30.730791 8.234291 7.138781
+v 31.814856 -0.000000 7.138780
+v 27.552473 15.907428 7.138781
+v 22.496500 22.496500 7.138781
+v 15.907428 27.552473 7.138782
+v 8.234291 30.730791 7.138782
+v 0.000000 31.814856 7.138782
+v -8.234291 30.730791 7.138782
+v -15.907428 27.552473 7.138782
+v -22.496500 22.496500 7.138781
+v -27.552473 15.907428 7.138781
+v -30.730791 8.234291 7.138781
+v -31.814856 -0.000000 7.138780
+v -30.730791 -8.234291 7.138780
+v -27.552473 -15.907428 7.138780
+v -22.496500 -22.496500 7.138779
+v -15.907428 -27.552473 7.138779
+v -8.234291 -30.730791 7.138779
+v 0.000000 -31.814856 7.138779
+v 8.234291 -30.730791 7.138779
+v 15.907428 -27.552473 7.138779
+v 22.496500 -22.496500 7.138779
+v 27.552473 -15.907428 7.138780
+v 30.730791 -8.234291 7.138780
+v 31.580900 -0.000000 8.146670
+v 30.504807 8.173738 8.146670
+v 27.349861 15.790450 8.146671
+v 22.331068 22.331068 8.146671
+v 15.790450 27.349861 8.146671
+v 8.173738 30.504807 8.146671
+v 0.000000 31.580900 8.146671
+v -8.173738 30.504807 8.146671
+v -15.790450 27.349861 8.146671
+v -22.331068 22.331068 8.146671
+v -27.349861 15.790450 8.146671
+v -30.504807 8.173738 8.146670
+v -31.580900 -0.000000 8.146670
+v -30.504807 -8.173738 8.146670
+v -27.349861 -15.790450 8.146669
+v -22.331068 -22.331068 8.146669
+v -15.790450 -27.349861 8.146669
+v -8.173738 -30.504807 8.146669
+v 0.000000 -31.580900 8.146669
+v 8.173738 -30.504807 8.146669
+v 15.790450 -27.349861 8.146669
+v 22.331068 -22.331068 8.146669
+v 27.349861 -15.790450 8.146669
+v 30.504807 -8.173738 8.146670
+v 29.653929 4.908844 12.500000
+v 30.057484 -0.000001 12.500000
+v 28.454115 9.685845 12.500000
+v 25.048429 16.614103 12.500001
+v 19.990923 22.445829 12.500001
+v 13.615341 26.796917 12.500001
+v 6.341868 29.380827 12.500001
+v -1.349834 30.027159 12.500001
+v -8.952518 28.693287 12.500001
+v -15.964809 25.467178 12.500001
+v -21.924269 20.561583 12.500001
+v -26.437887 14.300013 12.500001
+v -29.208006 7.095398 12.500000
+v -30.051941 -0.577136 12.500000
+v -28.914042 -8.211611 12.500000
+v -25.869345 -15.304553 12.499999
+v -21.118641 -21.388205 12.499999
+v -14.975224 -26.061369 12.499999
+v -7.781271 -29.032810 12.499999
+v -0.000394 -30.057484 12.499999
+v 7.780805 -29.032936 12.499999
+v 15.030061 -26.029781 12.499999
+v 21.254658 -21.253042 12.499999
+v 26.030924 -15.028083 12.499999
+v 29.033398 -7.779081 12.500000
+v 31.176914 13.304724 0.000001
+v 32.083069 11.117073 0.000000
+v 25.669205 22.226215 0.000001
+v 27.110687 20.347637 0.000001
+v 14.825201 30.547112 0.000001
+v 4.066229 33.652363 0.000001
+v 1.132411 34.038605 0.000001
+v -1.546903 33.984035 0.000001
+v -2.087078 33.912922 0.000001
+v -11.505137 31.922327 0.000001
+v -14.825201 30.547112 0.000001
+v -25.669205 22.226215 0.000001
+v -33.812351 2.851002 0.000000
+v -33.912922 2.087078 0.000000
+v -33.226429 -7.301522 -0.000000
+v -32.716309 -9.588298 -0.000000
+v -22.936518 -25.124168 -0.000001
+v -15.148998 -30.412991 -0.000001
+v -5.997423 -33.398117 -0.000001
+v -2.434556 -33.867176 -0.000001
+v 11.117073 -32.083069 -0.000001
+v 27.856853 -19.375214 -0.000001
+v 28.325912 -18.763924 -0.000001
+v 28.657589 -18.331676 -0.000001
+v 29.119894 -17.729189 -0.000001
+v 31.176914 -13.304724 -0.000001
+v 30.044502 -16.038607 -0.000001
+v 33.867176 -2.434556 -0.000000
+v -21.735237 -24.966017 -0.000001
+v -12.294713 30.893332 0.000001
+v 1.237830 33.856014 0.000001
+v 1.375215 33.618057 0.000001
+v -2.475661 33.524338 0.000001
+v -1.750556 33.718632 0.000001
+v -15.489672 30.037245 0.000001
+v -16.202736 29.490091 0.000001
+v -7.637538 28.362463 0.000001
+v -13.631232 29.151546 0.000001
+v -14.200917 28.409119 0.000001
+v -15.757326 26.380766 0.000001
+v -9.526917 26.473083 0.000001
+v -16.415842 29.326571 0.000001
+v -16.842052 28.999527 0.000001
+v -25.004732 22.736082 0.000001
+v -18.588697 27.659279 0.000001
+v -13.959520 22.040480 0.000001
+v -32.464458 4.607606 0.000000
+v -31.686255 5.621783 0.000000
+v -17.093845 28.806320 0.000001
+v -17.093845 24.638981 0.000001
+v -17.093845 18.906155 0.000001
+v -31.303139 4.696861 0.000000
+v -33.022774 2.977226 0.000000
+v -32.339737 3.660261 0.000000
+v -33.022774 3.879997 0.000000
+v -30.558126 -9.872428 -0.000000
+v -33.022774 -7.036116 -0.000000
+v 24.349371 -6.174348 -0.000000
+v 18.486427 -16.329266 -0.000001
+v 26.539352 -9.967508 -0.000000
+v 28.989264 -17.711990 -0.000001
+v 29.939085 -15.856015 -0.000001
+v 27.486151 -11.607409 -0.000001
+v 24.316818 -17.096851 -0.000001
+v 15.489672 30.037245 0.000001
+v 21.905699 25.114054 0.000001
+v 22.914127 24.340260 0.000001
+v 25.004732 22.736082 0.000001
+v 5.857476 32.618183 0.000001
+v 11.109140 29.586134 0.000001
+v 19.392149 24.803938 0.000001
+v 26.020208 20.977224 0.000001
+v 31.176914 12.045548 0.000001
+v 32.192390 10.286692 0.000000
+v 32.344769 9.129265 0.000000
+v 31.176914 9.613006 0.000000
+v 32.500774 7.944295 0.000000
+v 33.640537 -0.713065 -0.000000
+v 33.665691 -0.904130 -0.000000
+v 33.757854 -1.604174 -0.000000
+v 31.176914 -11.236371 -0.000000
+v 31.176914 -5.214818 -0.000000
+v 31.176914 -3.923720 -0.000000
+v 31.176914 5.651303 0.000000
+v 5.400555 26.645966 0.000001
+v -6.023536 28.149975 0.000001
+v 10.223639 18.292135 0.000001
+v -7.844875 25.776360 0.000001
+v 21.366825 -16.708477 -0.000001
+v 9.395580 -32.309708 -0.000001
+v 9.248971 -32.329010 -0.000001
+v 8.596633 -32.414890 -0.000001
+v 6.413867 -32.702259 -0.000001
+v 3.979310 -33.022774 -0.000001
+v -5.091268 -33.022774 -0.000001
+v -1.729279 -31.630192 -0.000001
+v 26.950697 -19.750557 -0.000001
+v 28.325912 -18.375341 -0.000001
+v 21.475275 -22.018551 -0.000001
+v 15.343289 -24.558502 -0.000001
+v 13.229855 -25.433916 -0.000001
+v 6.807005 -28.094347 -0.000001
+v -12.820866 19.291523 0.000001
+v 0.979031 -14.024373 -0.000001
+v -17.093845 -24.354967 -0.000001
+v 4.102232 -21.564449 -0.000001
+v -19.156971 -24.626583 -0.000001
+v -13.773784 -30.044502 -0.000001
+v 5.478059 -24.885988 -0.000001
+v 16.398529 -19.945612 -0.000001
+v 15.022774 -22.328489 -0.000001
+v 19.162058 -19.581785 -0.000001
+v 17.580273 -21.643209 -0.000001
+v 23.188164 -19.051739 -0.000001
+v 22.444473 -20.339851 -0.000001
+v 27.795099 -18.906155 -0.000001
+v -17.093845 -11.645034 -0.000001
+v -17.093845 13.722868 0.000001
+v -24.963240 -10.609009 -0.000000
+v -28.749794 -1.467460 -0.000000
+v -31.237789 -4.709878 -0.000000
+vn 0.0000 0.0000 -1.0000
+vn 0.9416 0.1240 0.3130
+vn 0.8775 0.3635 0.3130
+vn 0.7535 0.5782 0.3130
+vn 0.5782 0.7535 0.3130
+vn 0.3635 0.8775 0.3130
+vn 0.1240 0.9416 0.3130
+vn -0.1240 0.9416 0.3130
+vn -0.3635 0.8775 0.3130
+vn -0.5782 0.7535 0.3130
+vn -0.7535 0.5782 0.3130
+vn -0.8775 0.3635 0.3130
+vn -0.9416 0.1240 0.3130
+vn -0.9416 -0.1240 0.3130
+vn -0.8775 -0.3635 0.3130
+vn -0.7535 -0.5782 0.3130
+vn -0.5782 -0.7535 0.3130
+vn -0.3635 -0.8775 0.3130
+vn -0.1240 -0.9416 0.3130
+vn 0.1240 -0.9416 0.3130
+vn 0.3635 -0.8775 0.3130
+vn 0.5782 -0.7535 0.3130
+vn 0.7535 -0.5782 0.3130
+vn 0.8775 -0.3635 0.3130
+vn 0.9416 -0.1240 0.3130
+vn 0.9662 0.1272 0.2243
+vn 0.9003 0.3729 0.2243
+vn 0.7731 0.5933 0.2243
+vn 0.5933 0.7731 0.2243
+vn 0.3729 0.9003 0.2243
+vn 0.1272 0.9662 0.2243
+vn -0.1272 0.9662 0.2243
+vn -0.3729 0.9003 0.2243
+vn -0.5933 0.7731 0.2243
+vn -0.7731 0.5933 0.2243
+vn -0.9003 0.3729 0.2243
+vn -0.9662 0.1272 0.2243
+vn -0.9662 -0.1272 0.2243
+vn -0.9003 -0.3729 0.2243
+vn -0.7731 -0.5933 0.2243
+vn -0.5933 -0.7731 0.2243
+vn -0.3729 -0.9003 0.2243
+vn -0.1272 -0.9662 0.2243
+vn 0.1272 -0.9662 0.2243
+vn 0.3729 -0.9003 0.2243
+vn 0.5933 -0.7731 0.2243
+vn 0.7731 -0.5933 0.2243
+vn 0.9003 -0.3729 0.2243
+vn 0.9662 -0.1272 0.2243
+vn 0.9410 0.0774 0.3293
+vn 0.9089 0.2283 0.3489
+vn 0.9518 0.1253 0.2800
+vn 0.8358 0.4109 0.3641
+vn 0.8844 0.3663 0.2894
+vn 0.7041 0.6106 0.3624
+vn 0.7590 0.5824 0.2911
+vn 0.5258 0.7704 0.3606
+vn 0.5821 0.7586 0.2929
+vn 0.3125 0.8796 0.3586
+vn 0.3657 0.8828 0.2948
+vn 0.0782 0.9310 0.3565
+vn 0.1246 0.9467 0.2969
+vn -0.1616 0.9210 0.3544
+vn -0.1246 0.9461 0.2990
+vn -0.3912 0.8503 0.3521
+vn -0.3649 0.8809 0.3013
+vn -0.5954 0.7233 0.3497
+vn -0.5800 0.7559 0.3037
+vn -0.7608 0.5484 0.3471
+vn -0.7553 0.5795 0.3061
+vn -0.8763 0.3369 0.3445
+vn -0.8788 0.3640 0.3087
+vn -0.9342 0.1028 0.3417
+vn -0.9422 0.1240 0.3114
+vn -0.9413 -0.1239 0.3142
+vn -0.9306 -0.1387 0.3388
+vn -0.8762 -0.3629 0.3170
+vn -0.8655 -0.3715 0.3358
+vn -0.7433 -0.5804 0.3327
+vn -0.7516 -0.5768 0.3200
+vn -0.5699 -0.7511 0.3332
+vn -0.5747 -0.7501 0.3272
+vn -0.5716 -0.7515 0.3295
+vn -0.5761 -0.7508 0.3231
+vn -0.5779 -0.7510 0.3194
+vn -0.5730 -0.7522 0.3254
+vn -0.3603 -0.8730 0.3287
+vn -0.3615 -0.8731 0.3272
+vn -0.3607 -0.8732 0.3278
+vn -0.3617 -0.8733 0.3262
+vn -0.3621 -0.8735 0.3254
+vn -0.3609 -0.8735 0.3268
+vn -0.1233 -0.9366 0.3278
+vn -0.1233 -0.9367 0.3278
+vn 0.1233 -0.9367 0.3278
+vn 0.3616 -0.8728 0.3278
+vn 0.3615 -0.8728 0.3277
+vn 0.5752 -0.7495 0.3278
+vn 0.5751 -0.7495 0.3277
+vn 0.7495 -0.5751 0.3278
+vn 0.8728 -0.3615 0.3278
+vn 0.9367 -0.1233 0.3278
+vn 0.0000 0.0000 1.0000
+s off
+f 755//471 879//471 867//471 754//471
+f 867//471 879//471 756//471
+f 870//471 944//471 758//471 759//471
+f 869//471 945//471 944//471 870//471
+f 757//471 945//471 869//471
+f 758//471 944//471 943//471
+f 943//471 944//471 945//471 946//471
+f 756//471 958//471 868//471
+f 946//471 945//471 757//471 868//471 958//471
+f 897//471 905//471 761//471
+f 904//471 903//471 905//471 897//471
+f 760//471 907//471 971//471 906//471 866//471
+f 866//471 906//471 755//471
+f 903//471 904//471 971//471 907//471
+f 865//471 762//471 864//471 903//471 907//471
+f 863//471 905//471 903//471 864//471
+f 761//471 905//471 863//471
+f 865//471 907//471 760//471
+f 897//471 761//471 898//471
+f 904//471 897//471 898//471 902//471
+f 756//471 879//471 957//471
+f 755//471 906//471 969//471 957//471 879//471
+f 904//471 902//471 970//471 971//471
+f 969//471 906//471 971//471 970//471
+f 764//471 894//471 862//471
+f 862//471 894//471 761//471 763//471
+f 765//471 947//471 872//471 767//471
+f 875//471 911//471 766//471
+f 873//471 966//471 948//471 874//471
+f 872//471 947//471 966//471 873//471
+f 948//471 911//471 875//471 874//471
+f 893//471 899//471 768//471
+f 896//471 901//471 900//471 890//471
+f 758//471 943//471 942//471
+f 956//471 959//471 958//471 756//471 955//471
+f 943//471 946//471 952//471 942//471
+f 952//471 946//471 958//471 959//471
+f 967//471 954//471 956//471 955//471
+f 890//471 900//471 899//471 893//471
+f 901//471 896//471 953//471 968//471
+f 954//471 967//471 968//471 953//471
+f 768//471 899//471 895//471
+f 900//471 898//471 761//471 895//471 899//471
+f 902//471 898//471 900//471 901//471
+f 756//471 957//471 955//471
+f 957//471 969//471 967//471 955//471
+f 902//471 901//471 968//471 970//471
+f 967//471 969//471 970//471 968//471
+f 761//471 894//471 895//471
+f 764//471 768//471 895//471 894//471
+f 858//471 884//471 883//471 859//471
+f 770//471 884//471 858//471
+f 860//471 769//471 859//471 883//471 880//471
+f 861//471 885//471 768//471
+f 880//471 885//471 861//471 860//471
+f 766//471 912//471 877//471
+f 878//471 930//471 771//471
+f 877//471 912//471 931//471 876//471
+f 931//471 930//471 878//471 772//471 876//471
+f 771//471 929//471 928//471
+f 928//471 929//471 932//471 933//471
+f 913//471 910//471 933//471 932//471
+f 910//471 913//471 914//471 939//471
+f 758//471 940//471 871//471
+f 962//471 964//471 965//471 963//471
+f 965//471 949//471 950//471 963//471
+f 765//471 871//471 940//471 950//471 949//471
+f 962//471 939//471 914//471 964//471
+f 771//471 930//471 929//471
+f 929//471 930//471 931//471 932//471
+f 912//471 913//471 932//471 931//471
+f 766//471 911//471 914//471 913//471 912//471
+f 765//471 949//471 947//471
+f 964//471 948//471 966//471 965//471
+f 966//471 947//471 949//471 965//471
+f 964//471 914//471 911//471 948//471
+f 892//471 893//471 768//471
+f 896//471 890//471 889//471 891//471
+f 773//471 927//471 925//471
+f 926//471 925//471 927//471 934//471
+f 934//471 908//471 937//471 926//471
+f 758//471 942//471 941//471
+f 956//471 960//471 961//471 959//471
+f 961//471 951//471 952//471 959//471
+f 941//471 942//471 952//471 951//471
+f 956//471 954//471 909//471 960//471
+f 889//471 890//471 893//471 892//471
+f 896//471 891//471 938//471 953//471
+f 937//471 908//471 909//471 954//471 953//471 938//471
+f 771//471 928//471 927//471 773//471
+f 927//471 928//471 933//471 934//471
+f 910//471 908//471 934//471 933//471
+f 758//471 941//471 940//471
+f 960//471 962//471 963//471 961//471
+f 963//471 950//471 951//471 961//471
+f 940//471 941//471 951//471 950//471
+f 960//471 909//471 939//471 962//471
+f 939//471 909//471 908//471 910//471
+f 855//471 915//471 919//471 856//471 774//471
+f 857//471 881//471 770//471
+f 775//471 915//471 855//471
+f 919//471 881//471 857//471 856//471
+f 851//471 923//471 922//471 854//471 777//471
+f 853//471 918//471 776//471
+f 853//471 854//471 922//471 918//471
+f 773//471 924//471 852//471
+f 852//471 924//471 923//471 851//471
+f 881//471 882//471 770//471
+f 775//471 776//471 916//471 915//471
+f 915//471 916//471 920//471 919//471
+f 920//471 882//471 881//471 919//471
+f 885//471 886//471 768//471
+f 880//471 883//471 887//471 888//471
+f 776//471 917//471 916//471
+f 916//471 917//471 921//471 920//471
+f 920//471 921//471 935//471 882//471
+f 886//471 885//471 880//471 888//471
+f 883//471 884//471 936//471 887//471
+f 882//471 935//471 936//471 884//471 770//471
+f 886//471 892//471 768//471
+f 888//471 887//471 891//471 889//471
+f 776//471 918//471 917//471
+f 918//471 922//471 921//471 917//471
+f 773//471 925//471 924//471
+f 923//471 924//471 925//471 926//471
+f 921//471 922//471 923//471 926//471 937//471 935//471
+f 892//471 886//471 888//471 889//471
+f 887//471 936//471 938//471 891//471
+f 935//471 937//471 938//471 936//471
+f 779//472 771//472 778//472
+f 778//472 771//472 773//472
+f 778//473 773//473 780//473
+f 780//473 773//473 852//473 851//473 777//473
+f 780//474 777//474 781//474
+f 781//474 777//474 854//474 853//474 776//474
+f 781//475 776//475 782//475
+f 782//475 776//475 775//475
+f 782//476 775//476 783//476
+f 783//476 775//476 855//476 774//476
+f 784//477 783//477 770//477
+f 770//477 783//477 774//477 856//477 857//477
+f 785//478 784//478 769//478
+f 769//478 784//478 770//478 858//478 859//478
+f 786//479 785//479 768//479
+f 768//479 785//479 769//479 860//479 861//479
+f 787//480 786//480 764//480
+f 764//480 786//480 768//480
+f 788//481 787//481 763//481
+f 763//481 787//481 764//481 862//481
+f 789//482 788//482 761//482
+f 788//482 763//482 761//482
+f 790//483 789//483 762//483
+f 762//483 789//483 761//483 863//483 864//483
+f 760//484 790//484 762//484 865//484
+f 791//484 790//484 760//484
+f 792//485 791//485 760//485
+f 792//485 760//485 866//485 755//485
+f 754//486 792//486 755//486
+f 793//486 792//486 754//486
+f 756//487 793//487 754//487 867//487
+f 793//487 756//487 794//487
+f 794//488 757//488 795//488
+f 868//488 757//488 794//488 756//488
+f 795//489 759//489 796//489
+f 870//489 759//489 795//489 757//489 869//489
+f 797//490 796//490 758//490
+f 796//490 759//490 758//490
+f 798//491 797//491 765//491
+f 871//491 765//491 797//491 758//491
+f 799//492 798//492 767//492
+f 798//492 765//492 767//492
+f 799//493 766//493 800//493
+f 875//493 766//493 799//493 767//493 872//493 873//493 874//493
+f 800//494 772//494 801//494
+f 800//494 766//494 877//494 876//494 772//494
+f 801//495 771//495 779//495
+f 878//495 771//495 801//495 772//495
+f 802//496 778//496 803//496
+f 779//496 778//496 802//496
+f 803//497 780//497 804//497
+f 778//497 780//497 803//497
+f 804//498 781//498 805//498
+f 780//498 781//498 804//498
+f 805//499 782//499 806//499
+f 781//499 782//499 805//499
+f 782//500 807//500 806//500
+f 782//500 783//500 807//500
+f 807//501 784//501 808//501
+f 783//501 784//501 807//501
+f 808//502 785//502 809//502
+f 784//502 785//502 808//502
+f 809//503 786//503 810//503
+f 785//503 786//503 809//503
+f 810//504 787//504 811//504
+f 786//504 787//504 810//504
+f 787//505 812//505 811//505
+f 787//505 788//505 812//505
+f 812//506 789//506 813//506
+f 788//506 789//506 812//506
+f 813//507 790//507 814//507
+f 789//507 790//507 813//507
+f 814//508 791//508 815//508
+f 790//508 791//508 814//508
+f 791//509 792//509 815//509
+f 815//509 792//509 816//509
+f 792//510 793//510 816//510
+f 816//510 793//510 817//510
+f 817//511 794//511 818//511
+f 793//511 794//511 817//511
+f 794//512 819//512 818//512
+f 794//512 795//512 819//512
+f 819//513 796//513 820//513
+f 795//513 796//513 819//513
+f 796//514 821//514 820//514
+f 796//514 797//514 821//514
+f 821//515 798//515 822//515
+f 797//515 798//515 821//515
+f 822//516 799//516 823//516
+f 798//516 799//516 822//516
+f 799//517 824//517 823//517
+f 799//517 800//517 824//517
+f 824//518 801//518 825//518
+f 800//518 801//518 824//518
+f 825//519 779//519 802//519
+f 801//519 779//519 825//519
+f 802//520 826//520 827//520
+f 826//521 803//521 828//521
+f 802//522 803//522 826//522
+f 828//523 804//523 829//523
+f 803//524 804//524 828//524
+f 829//525 805//525 830//525
+f 804//526 805//526 829//526
+f 830//527 806//527 831//527
+f 805//528 806//528 830//528
+f 831//529 807//529 832//529
+f 806//530 807//530 831//530
+f 832//531 808//531 833//531
+f 807//532 808//532 832//532
+f 833//533 809//533 834//533
+f 808//534 809//534 833//534
+f 834//535 810//535 835//535
+f 809//536 810//536 834//536
+f 835//537 811//537 836//537
+f 810//538 811//538 835//538
+f 836//539 812//539 837//539
+f 811//540 812//540 836//540
+f 837//541 813//541 838//541
+f 812//542 813//542 837//542
+f 838//543 814//543 839//543
+f 813//544 814//544 838//544
+f 814//545 815//545 839//545
+f 839//546 815//546 840//546
+f 815//547 816//547 840//547
+f 840//548 816//548 841//548
+f 841//549 817//549 842//549
+f 816//550 817//550 841//550
+f 842//551 818//552 843//553
+f 817//554 818//555 842//556
+f 843//557 819//558 844//559
+f 818//560 819//561 843//562
+f 819//563 845//563 844//563
+f 819//564 820//564 845//564
+f 845//565 821//565 846//565
+f 820//565 821//565 845//565
+f 846//566 822//566 847//566
+f 821//567 822//567 846//567
+f 847//568 823//568 848//568
+f 822//569 823//569 847//569
+f 848//570 824//570 849//570
+f 823//570 824//570 848//570
+f 849//571 825//571 850//571
+f 824//571 825//571 849//571
+f 850//572 802//572 827//572
+f 825//572 802//572 850//572
+f 843//573 841//573 842//573
+f 840//573 841//573 843//573
+f 845//573 843//573 844//573
+f 845//573 840//573 843//573
+f 836//573 839//573 840//573
+f 836//573 838//573 839//573
+f 836//573 837//573 838//573
+f 848//573 846//573 847//573
+f 848//573 845//573 846//573
+f 848//573 840//573 845//573
+f 834//573 835//573 836//573
+f 850//573 848//573 849//573
+f 827//573 840//573 848//573
+f 827//573 848//573 850//573
+f 832//573 833//573 834//573
+f 832//573 834//573 836//573
+f 828//573 827//573 826//573
+f 831//573 836//573 840//573
+f 831//573 840//573 827//573
+f 831//573 827//573 828//573
+f 831//573 832//573 836//573
+f 830//573 828//573 829//573
+f 830//573 831//573 828//573
+o Base
+v 36.000000 0.000000 -2.000000
+v 34.773331 9.317486 -2.000000
+v 36.000000 0.000000 0.000000
+v 34.773331 9.317486 0.000000
+v 31.176914 18.000000 -1.999999
+v 31.176914 18.000000 0.000001
+v 25.455845 25.455845 -1.999999
+v 25.455845 25.455845 0.000001
+v 18.000000 31.176914 -1.999999
+v 18.000000 31.176914 0.000001
+v 9.317486 34.773331 -1.999998
+v 9.317486 34.773331 0.000002
+v 0.000000 36.000000 -1.999998
+v 0.000000 36.000000 0.000002
+v -9.317486 34.773331 0.000002
+v -9.317486 34.773331 -1.999998
+v -18.000000 31.176914 -1.999999
+v -18.000000 31.176914 0.000001
+v -25.455845 25.455845 -1.999999
+v -25.455845 25.455845 0.000001
+v -31.176914 18.000000 -1.999999
+v -31.176914 18.000000 0.000001
+v -34.773331 9.317486 0.000000
+v -34.773331 9.317486 -2.000000
+v -36.000000 0.000000 -2.000000
+v -36.000000 0.000000 0.000000
+v -34.773331 -9.317486 -2.000000
+v -34.773331 -9.317486 -0.000000
+v -31.176914 -18.000000 -0.000001
+v -31.176914 -18.000000 -2.000001
+v -25.455845 -25.455845 -2.000001
+v -25.455845 -25.455845 -0.000001
+v -18.000000 -31.176914 -2.000001
+v -18.000000 -31.176914 -0.000001
+v -9.317486 -34.773331 -2.000001
+v -9.317486 -34.773331 -0.000002
+v 0.000000 -36.000000 -2.000002
+v 0.000000 -36.000000 -0.000002
+v 9.317486 -34.773331 -2.000001
+v 9.317486 -34.773331 -0.000002
+v 18.000000 -31.176914 -2.000001
+v 18.000000 -31.176914 -0.000001
+v 25.455845 -25.455845 -2.000001
+v 25.455845 -25.455845 -0.000001
+v 31.176914 -18.000000 -2.000001
+v 31.176914 -18.000000 -0.000001
+v 34.773331 -9.317486 -2.000000
+v 34.773331 -9.317486 -0.000000
+vn 0.9914 0.1305 0.0000
+vn 0.9239 0.3827 0.0000
+vn 0.7934 0.6088 0.0000
+vn 0.6088 0.7934 0.0000
+vn 0.3827 0.9239 0.0000
+vn 0.1305 0.9914 0.0000
+vn -0.1305 0.9914 0.0000
+vn -0.3827 0.9239 0.0000
+vn -0.6088 0.7934 0.0000
+vn -0.7934 0.6088 0.0000
+vn -0.9239 0.3827 0.0000
+vn -0.9914 0.1305 0.0000
+vn -0.9914 -0.1305 0.0000
+vn -0.9239 -0.3827 0.0000
+vn -0.7934 -0.6088 0.0000
+vn -0.6088 -0.7934 0.0000
+vn -0.3827 -0.9239 0.0000
+vn -0.1305 -0.9914 0.0000
+vn 0.1305 -0.9914 0.0000
+vn 0.3827 -0.9239 0.0000
+vn 0.6088 -0.7934 0.0000
+vn 0.7934 -0.6088 0.0000
+vn 0.9239 -0.3827 0.0000
+vn 0.9914 -0.1305 0.0000
+vn -0.0000 -0.0000 -1.0000
+vn -0.0000 -0.0000 1.0000
+s 1
+f 972//574 973//574 974//574
+f 974//574 973//574 975//574
+f 975//575 976//575 977//575
+f 973//575 976//575 975//575
+f 977//576 978//576 979//576
+f 976//576 978//576 977//576
+f 979//577 980//577 981//577
+f 978//577 980//577 979//577
+f 981//578 982//578 983//578
+f 980//578 982//578 981//578
+f 983//579 984//579 985//579
+f 985//580 984//580 986//580
+f 982//579 984//579 983//579
+f 984//580 987//580 986//580
+f 986//581 988//581 989//581
+f 987//581 988//581 986//581
+f 989//582 990//582 991//582
+f 988//582 990//582 989//582
+f 991//583 992//583 993//583
+f 993//584 992//584 994//584
+f 990//583 992//583 991//583
+f 992//584 995//584 994//584
+f 995//585 996//585 994//585
+f 994//585 996//585 997//585
+f 996//586 998//586 997//586
+f 997//586 998//586 999//586
+f 999//587 998//587 1000//587
+f 998//587 1001//587 1000//587
+f 1000//588 1002//588 1003//588
+f 1001//588 1002//588 1000//588
+f 1003//589 1004//589 1005//589
+f 1002//589 1004//589 1003//589
+f 1005//590 1006//590 1007//590
+f 1004//590 1006//590 1005//590
+f 1007//591 1008//591 1009//591
+f 1006//591 1008//591 1007//591
+f 1008//592 1010//592 1009//592
+f 1009//592 1010//592 1011//592
+f 1011//593 1012//593 1013//593
+f 1010//593 1012//593 1011//593
+f 1013//594 1014//594 1015//594
+f 1012//594 1014//594 1013//594
+f 1015//595 1016//595 1017//595
+f 1014//595 1016//595 1015//595
+f 1017//596 1018//596 1019//596
+f 1016//596 1018//596 1017//596
+f 1019//597 972//597 974//597
+f 1018//597 972//597 1019//597
+f 1001//598 998//598 1002//598
+f 1006//598 1012//598 1008//598
+f 1008//598 1012//598 1010//598
+f 995//598 992//598 996//598
+f 1002//598 1016//598 1004//598
+f 1004//598 1016//598 1006//598
+f 1012//598 1016//598 1014//598
+f 998//598 1016//598 1002//598
+f 1006//598 1016//598 1012//598
+f 990//598 988//598 992//598
+f 992//598 987//598 996//598
+f 988//598 987//598 992//598
+f 996//598 984//598 998//598
+f 998//598 984//598 1016//598
+f 987//598 984//598 996//598
+f 972//598 976//598 973//598
+f 980//598 976//598 982//598
+f 982//598 976//598 984//598
+f 1016//598 976//598 1018//598
+f 1018//598 976//598 972//598
+f 984//598 976//598 1016//598
+f 980//598 978//598 976//598
+f 999//599 1000//599 1003//599
+f 1013//599 1007//599 1009//599
+f 1013//599 1009//599 1011//599
+f 993//599 994//599 997//599
+f 1017//599 1003//599 1005//599
+f 1017//599 1005//599 1007//599
+f 1017//599 1013//599 1015//599
+f 1017//599 999//599 1003//599
+f 1017//599 1007//599 1013//599
+f 989//599 991//599 993//599
+f 986//599 993//599 997//599
+f 986//599 989//599 993//599
+f 985//599 997//599 999//599
+f 985//599 999//599 1017//599
+f 985//599 986//599 997//599
+f 977//599 974//599 975//599
+f 977//599 981//599 983//599
+f 977//599 983//599 985//599
+f 977//599 1017//599 1019//599
+f 977//599 1019//599 974//599
+f 977//599 985//599 1017//599
+f 979//599 981//599 977//599
+o Supports
+v 33.120998 -1.572073 6.105556
+v 33.134087 -2.813651 5.819593
+v 33.362934 -2.332964 5.244755
+v -17.093845 -29.607409 -0.000001
+v 33.202461 -1.822765 5.822238
+v 8.848426 -33.022774 -0.000001
+v 33.017456 -3.052778 6.105556
+v 32.164112 -2.744152 5.736480
+v 32.232033 -1.755914 5.739894
+v -33.022774 -8.848426 -0.000000
+v 32.392284 -2.265089 5.163587
+v 35.092388 -1.953260 0.123309
+v -29.607409 17.093845 0.000001
+v 34.694439 -1.949548 1.319314
+v 34.858009 -2.437509 0.735778
+v 34.169331 -0.500000 3.052778
+v 34.288998 -7.901784 -0.000000
+v 29.607409 -17.093845 -0.000001
+v 34.500210 -6.921640 -0.000000
+v 35.022591 -2.949284 0.123765
+v -8.848426 33.022774 0.000001
+v 34.006023 -4.771636 2.552835
+v 33.767212 -5.250586 3.052778
+v 33.906384 -4.260318 3.052778
+v 33.678757 -4.713014 3.552377
+v 33.022774 8.848426 0.000000
+v 32.393688 -7.079615 6.105556
+v 32.369400 -7.473064 5.917337
+v 32.731140 -6.926498 5.209875
+v 17.093845 29.607409 0.000001
+v 32.486916 -6.638690 6.105556
+v 31.776731 -6.728268 5.133968
+v 31.427654 -7.255647 5.816602
+v 32.688488 -4.573841 3.552377
+v 32.776833 -5.111397 3.052778
+v 32.916004 -4.121129 3.052778
+v 33.015755 -4.632463 2.552835
+v 33.282124 -7.683784 0.090585
+v 33.170918 -7.036911 0.838120
+v 33.450432 -7.061650 -0.000000
+v 33.508202 -6.782223 -0.000000
+v 33.610657 -2.809137 1.383469
+v 33.831997 -2.365764 0.821577
+v 33.995972 -2.875952 0.211461
+v 32.998730 -0.000000 3.577049
+v 33.169220 -0.500000 3.052778
+v 33.342262 -0.000000 2.543511
+v 34.065674 -1.882745 0.210681
+v 33.006924 0.020030 3.552377
+v 34.006924 0.020030 3.552377
+v 35.111080 -2.320672 -0.000000
+v 35.127762 2.052778 0.000000
+v 35.055016 3.052778 0.000000
+v 34.339161 0.007525 2.552835
+v 34.169331 0.500000 3.052778
+v 33.094681 2.052778 6.105556
+v 33.094433 2.895388 5.917338
+v 33.339161 0.007525 2.552835
+v 34.128967 -7.879293 -0.000000
+v 34.096497 -2.495442 -0.000000
+v 32.131592 2.811150 5.816602
+v 33.169220 0.500000 3.052778
+v 34.126007 2.052778 0.000000
+v 34.027603 2.977029 0.090585
+v 35.055016 -3.052778 -0.000000
+v 35.138729 -1.855647 -0.000000
+v 34.893414 3.052778 0.000000
+v 34.144600 -1.715931 -0.000000
+v 34.051121 -3.052778 -0.000000
+v 31.700312 -9.774324 3.052778
+v 32.651474 -10.083376 3.052778
+v 34.282661 -7.929231 -0.000000
+v 32.771252 -12.701804 0.123308
+v 32.398705 -13.089926 0.735777
+v 32.660809 -10.604228 2.552835
+v 32.342457 -11.034432 3.052778
+v 34.042831 -8.902768 -0.000000
+v 31.009111 -12.528495 5.244754
+v 32.348694 -10.489667 3.552377
+v 31.014151 -11.993677 5.822237
+v 32.109257 -8.274511 6.105556
+v 30.111877 -11.630219 5.739893
+v 30.106943 -12.163995 5.163587
+v 31.397638 -10.180651 3.552377
+v 31.391294 -10.725381 3.052778
+v 31.445078 -12.704637 0.821576
+v 31.709753 -10.295211 2.552835
+v 31.816582 -12.317470 0.210680
+v 33.090103 -8.593208 -0.000000
+v 35.052563 3.080840 0.000000
+v 34.950554 4.078280 0.000000
+v 33.820526 5.963471 2.543511
+v 33.737045 5.441038 3.052778
+v 33.482212 5.903817 3.577049
+v 32.995949 3.277087 6.105556
+v 33.269569 3.526987 5.209875
+v 32.948360 3.725240 6.105556
+v 32.300617 3.420587 5.133969
+v 32.752129 5.267371 3.052778
+v 33.721943 3.557876 0.838120
+v 30.642923 -12.914937 5.819592
+v 32.397083 -13.627512 0.123764
+v 29.741899 -12.549101 5.736480
+v 31.443375 -13.240525 0.211460
+v 33.995419 3.620723 0.000000
+v 33.964016 3.904327 0.000000
+v 32.501995 5.751318 3.552377
+v 33.486801 5.924966 3.552377
+v 34.219841 8.017640 0.123765
+v 33.905167 8.453507 0.735778
+v 33.816166 5.970344 2.552835
+v 33.563396 6.425846 3.052778
+v 32.450962 8.090934 5.244755
+v 32.381855 7.563055 5.819593
+v 32.831360 5.796695 2.552835
+v 30.168989 -18.110926 -0.000001
+v 30.672745 -17.244022 -0.000001
+v 30.867134 -15.046535 2.552834
+v 30.492004 -15.428246 3.052777
+v 30.930376 -14.529451 3.052777
+v 30.573999 -14.889650 3.552376
+v 28.475824 -17.110001 5.917337
+v 28.988758 -16.701969 5.209874
+v 30.458107 -13.106319 6.105556
+v 31.943193 -12.183209 -0.000001
+v 32.845490 -12.623289 -0.000001
+v 32.395943 -13.735960 -0.000001
+v 30.031483 -14.091032 3.052777
+v 27.647358 -16.612207 5.816601
+v 29.675205 -14.451280 3.552376
+v 29.593111 -14.989826 3.052777
+v 29.968340 -14.608163 2.552834
+v 29.278763 -17.592455 0.090584
+v 29.772373 -16.804882 -0.000001
+v 31.441179 -13.425739 -0.000001
+v 31.437878 7.329413 5.736481
+v 31.506845 7.855539 5.163588
+v 32.578480 6.252179 3.052778
+v 32.907200 8.204687 0.821577
+v 33.220810 7.770141 0.211461
+v 32.140682 8.526572 5.822238
+v 34.109749 8.642831 0.000000
+v 33.978436 8.986484 0.123309
+v 30.023741 -18.040083 -0.000001
+v 32.980183 8.736276 0.210681
+v 31.197092 8.290273 5.739894
+v 32.344830 7.299591 6.105556
+v 31.985739 8.739820 6.105556
+v 33.598816 8.867040 1.319314
+v 32.656158 10.618542 2.552835
+v 32.651474 10.083376 3.052778
+v 32.774143 12.807384 0.000001
+v 32.395943 13.735960 0.000001
+v 32.342457 11.034432 3.052778
+v 32.336315 10.527766 3.552377
+v 30.840570 12.179128 6.105556
+v 30.579950 12.980419 5.917338
+v 31.563553 8.333787 4.640615
+v 31.700312 9.774324 3.052778
+v 33.992344 9.093639 0.000000
+v 34.282661 7.929231 0.000000
+v 33.327900 7.619010 0.000000
+v 27.128355 -19.091869 3.052777
+v 27.937462 -19.679720 3.052777
+v 28.749411 -17.980524 0.838119
+v 30.154482 -18.135073 -0.000001
+v 27.532114 -17.234060 5.133968
+v 27.242241 -22.207008 0.123308
+v 26.767988 -22.461010 0.735777
+v 27.785389 -20.177965 2.552834
+v 27.349676 -20.488737 3.052777
+v 29.625549 -18.986849 -0.000001
+v 25.619900 -21.497648 5.244754
+v 27.523952 -19.972563 3.552376
+v 25.789961 -20.990564 5.822237
+v 27.980753 -17.791834 6.105555
+v 25.044163 -20.366079 5.739893
+v 24.874523 -20.872204 5.163586
+v 26.714935 -19.384777 3.552376
+v 26.540569 -19.900887 3.052777
+v 25.980099 -21.799891 0.821576
+v 26.976372 -19.590179 2.552834
+v 26.453060 -21.546474 0.210680
+v 28.815111 -18.398031 -0.000001
+v 28.967661 -18.156895 -0.000001
+v 33.003696 8.919314 0.000000
+v 31.385260 10.218750 3.552377
+v 30.125620 12.144022 5.133969
+v 29.690268 12.602771 5.816603
+v 31.391294 10.725381 3.052778
+v 31.705101 10.309525 2.552835
+v 31.445028 12.690074 0.838121
+v 31.821417 12.497824 0.000001
+v 31.716002 12.762974 0.000001
+v 31.442221 13.346431 0.090586
+v 32.242249 13.686022 0.000001
+v 25.152216 -21.752020 5.819592
+v 26.600327 -22.971783 0.123764
+v 24.408342 -21.125656 5.736479
+v 25.812878 -22.309025 0.211460
+v 32.384933 13.761890 0.000001
+v 31.979694 14.678990 0.000001
+v 30.067417 18.199741 0.123766
+v 30.316147 16.127905 2.552836
+v 30.404465 15.600055 3.052779
+v 29.633453 18.517036 0.735779
+v 29.934992 16.483004 3.052779
+v 30.016928 15.982968 3.552378
+v 30.368336 13.313004 6.105556
+v 30.551342 13.635226 5.209876
+v 30.184591 13.724517 6.105556
+v 28.362463 17.722834 5.244756
+v 28.459862 17.199436 5.819594
+v 29.521420 15.130531 3.052779
+v 25.871408 -20.739868 6.105555
+v 23.095831 -26.547245 -0.000001
+v 23.842817 -25.878439 -0.000001
+v 24.706753 -23.848574 2.552834
+v 24.232031 -24.095682 3.052777
+v 24.926689 -23.376341 3.052777
+v 24.476446 -23.608786 3.552376
+v 22.045752 -24.768061 6.105555
+v 21.794836 -25.072092 5.917337
+v 22.408754 -24.842535 5.209874
+v 22.380342 -24.466143 6.105555
+v 24.917305 -21.876925 6.105555
+v 26.614964 -21.457911 -0.000001
+v 27.337107 -22.155275 -0.000001
+v 26.565725 -23.074572 -0.000001
+v 24.207270 -22.681606 3.052777
+v 25.388269 21.303288 6.000001
+v 21.303288 25.388269 6.000001
+v 21.753139 -24.121176 5.133968
+v 16.571016 28.701843 6.000001
+v 21.160746 -24.342651 5.816601
+v 23.757107 -22.914127 3.552376
+v 23.512611 -23.400946 3.052777
+v 23.987413 -23.153915 2.552834
+v 22.409389 -25.779055 0.090584
+v 22.699642 -25.190357 0.838119
+v -21.303288 25.388269 6.000001
+v 22.911234 -25.374664 -0.000001
+v -25.388269 21.303288 6.000001
+v -28.701843 16.571016 6.000001
+v 23.122215 -25.182562 -0.000001
+v 25.753557 -22.484495 -0.000001
+v 27.634285 16.685526 5.736481
+v 29.133980 15.513497 3.552378
+v 27.537294 17.207212 5.163588
+v 29.051947 16.013479 3.052779
+v -25.388269 -21.303288 5.999999
+v 29.433201 15.658433 2.552836
+v 31.095196 14.208694 0.000001
+v -21.303288 -25.388269 5.999999
+v 28.761221 17.972006 0.821578
+v -16.571016 -28.701843 5.999999
+v 29.193762 17.655638 0.211462
+v 27.932751 18.041269 5.822239
+v 29.538435 19.046568 0.123310
+v 22.979582 -26.434986 -0.000001
+v 28.666361 18.500130 0.210682
+v 27.108364 17.524950 5.739895
+v 21.303288 -25.388269 5.999999
+v 25.388269 -21.303288 5.999999
+v 28.701843 -16.571016 5.999999
+v 27.719492 18.196199 6.105557
+v 27.776543 20.190142 2.552836
+v 27.937462 19.679720 3.052779
+v 27.212364 22.308313 0.000001
+v 26.565725 23.074572 0.000001
+v 27.349676 20.488737 3.052779
+v 27.500404 20.004972 3.552378
+v 25.072092 21.794836 5.917339
+v 27.128355 19.091869 3.052779
+v 29.518549 19.152777 0.000001
+v 30.154482 18.135073 0.000001
+v 29.342312 17.544996 0.000001
+v 19.900887 -26.540569 3.052777
+v 20.488737 -27.349676 3.052777
+v 23.074572 -26.565725 -0.000001
+v 19.046568 -29.538435 0.123308
+v 18.517036 -29.633453 0.735777
+v 20.190142 -27.776543 2.552834
+v 19.679720 -27.937462 3.052777
+v 22.308313 -27.212364 -0.000001
+v 17.722834 -28.362463 5.244753
+v 20.004972 -27.500404 3.552376
+v 18.041269 -27.932751 5.822237
+v 17.524950 -27.108364 5.739893
+v 17.207212 -27.537294 5.163586
+v 19.417187 -26.691387 3.552376
+v 19.091869 -27.128355 3.052777
+v 17.972006 -28.761221 0.821576
+v 19.602356 -26.967525 2.552834
+v 18.500130 -28.666361 0.210680
+v 21.719496 -26.401926 -0.000001
+v 28.632162 18.681475 0.000001
+v 26.691387 19.417187 3.552378
+v 24.342651 21.160746 5.816603
+v 26.540569 19.900887 3.052779
+v 26.967525 19.602356 2.552836
+v 26.401926 21.719496 0.000001
+v 25.779055 22.409389 0.090586
+v 26.434986 22.979582 0.000001
+v 17.199436 -28.459862 5.819592
+v 18.199741 -30.067417 0.123764
+v 16.685526 -27.634285 5.736479
+v 17.655638 -29.193762 0.211460
+v 26.547245 23.095831 0.000001
+v 25.878439 23.842817 0.000001
+v 22.971783 26.600327 0.123766
+v 23.848574 24.706753 2.552836
+v 24.095682 24.232031 3.052779
+v 22.461010 26.767988 0.735779
+v 23.376341 24.926689 3.052779
+v 23.608786 24.476446 3.552378
+v 24.768061 22.045752 6.105557
+v 24.842535 22.408754 5.209876
+v 24.466143 22.380342 6.105557
+v 21.497648 25.619900 5.244756
+v 21.752020 25.152216 5.819594
+v 24.121176 21.753139 5.133970
+v 23.400946 23.512611 3.052779
+v 25.190357 22.699642 0.838121
+v 18.196199 -27.719492 6.105555
+v 13.761890 -32.384933 -0.000001
+v 14.678990 -31.979694 -0.000001
+v 16.127905 -30.316147 2.552834
+v 15.600055 -30.404465 3.052777
+v 16.483004 -29.934992 3.052777
+v 15.982968 -30.016928 3.552376
+v 13.313004 -30.368336 6.105555
+v 12.980419 -30.579950 5.917336
+v 13.635226 -30.551342 5.209874
+v 13.724517 -30.184591 6.105555
+v 18.681475 -28.632162 -0.000001
+v 19.152777 -29.518549 -0.000001
+v 18.135073 -30.154482 -0.000001
+v 16.013479 -29.051947 3.052777
+v 13.234611 -29.662691 5.133967
+v 12.602771 -29.690268 5.816601
+v 15.513497 -29.133980 3.552376
+v 15.130531 -29.521420 3.052777
+v 15.658433 -29.433201 2.552834
+v 13.346431 -31.442221 0.090584
+v 13.804395 -30.972029 0.838119
+v 13.948675 -31.212700 -0.000001
+v 14.208694 -31.095196 -0.000001
+v 17.544996 -29.342312 -0.000001
+v 21.125656 24.408342 5.736481
+v 22.914127 23.757107 3.552378
+v 20.872204 24.874523 5.163588
+v 22.681606 24.207270 3.052779
+v 23.153915 23.987413 2.552836
+v 25.374664 22.911234 0.000001
+v 25.182562 23.122215 0.000001
+v 21.799891 25.980099 0.821578
+v 22.309025 25.812878 0.211462
+v 20.990564 25.789961 5.822239
+v 22.207008 27.242241 0.123310
+v 13.686022 -32.242249 -0.000001
+v 21.546474 26.453060 0.210682
+v 20.366079 25.044163 5.739895
+v 21.876925 24.917305 6.105557
+v 20.739868 25.871408 6.105557
+v 20.177965 27.785389 2.552836
+v 20.488737 27.349676 3.052779
+v 18.986849 29.625549 0.000001
+v 18.135073 30.154482 0.000001
+v 19.679720 27.937462 3.052779
+v 19.972563 27.523952 3.552378
+v 17.791834 27.980753 6.105557
+v 17.110001 28.475824 5.917339
+v 19.900887 26.540569 3.052779
+v 22.155275 27.337107 0.000001
+v 23.074572 26.565725 0.000001
+v 22.484495 25.753557 0.000001
+v 10.725381 -31.391294 3.052777
+v 11.034432 -32.342457 3.052777
+v 13.735960 -32.395943 -0.000001
+v 8.986484 -33.978436 0.123308
+v 8.453507 -33.905167 0.735776
+v 10.618542 -32.656158 2.552834
+v 10.083376 -32.651474 3.052777
+v 12.807384 -32.774143 -0.000001
+v 8.090934 -32.450962 5.244753
+v 10.527766 -32.336315 3.552376
+v 8.526572 -32.140682 5.822237
+v 12.179128 -30.840570 6.105555
+v 8.290273 -31.197092 5.739892
+v 7.855539 -31.506845 5.163586
+v 10.218750 -31.385260 3.552376
+v 9.774324 -31.700312 3.052777
+v 8.204687 -32.907200 0.821576
+v 10.309525 -31.705101 2.552834
+v 8.736276 -32.980183 0.210680
+v 12.497824 -31.821417 -0.000001
+v 21.457911 26.614964 0.000001
+v 19.384777 26.714935 3.552378
+v 16.612207 27.647358 5.816604
+v 19.091869 27.128355 3.052779
+v 19.590179 26.976372 2.552836
+v 18.398031 28.815111 0.000001
+v 17.592455 29.278763 0.090586
+v 18.040083 30.023741 0.000001
+v 7.563055 -32.381855 5.819592
+v 8.017640 -34.219841 0.123764
+v 7.329414 -31.437878 5.736479
+v 7.770141 -33.220810 0.211460
+v 18.110926 30.168989 0.000001
+v 17.244022 30.672745 0.000001
+v 13.627512 32.397083 0.123766
+v 15.046535 30.867134 2.552836
+v 15.428246 30.492004 3.052779
+v 13.089926 32.398705 0.735779
+v 14.529451 30.930376 3.052779
+v 14.889650 30.573999 3.552378
+v 16.701969 28.988758 5.209877
+v 12.528495 31.009111 5.244756
+v 12.914937 30.642923 5.819594
+v 16.218513 28.142317 5.133970
+v 14.989826 29.593111 3.052779
+v 16.942877 29.372890 0.838121
+v 8.739820 -31.985739 6.105555
+v 3.080840 -35.052563 -0.000002
+v 4.078280 -34.950554 -0.000002
+v 5.970344 -33.816166 2.552834
+v 5.441038 -33.737045 3.052777
+v 6.425846 -33.563396 3.052777
+v 5.924966 -33.486801 3.552376
+v 3.277087 -32.995949 6.105555
+v 2.895388 -33.094433 5.917336
+v 3.526987 -33.269569 5.209874
+v 3.725240 -32.948360 6.105555
+v 7.299591 -32.344830 6.105555
+v 8.919314 -33.003696 -0.000001
+v 9.093639 -33.992344 -0.000001
+v 31.096409 8.332258 6.000000
+v 7.929231 -34.282661 -0.000001
+v 6.252179 -32.578480 3.052777
+v 3.420587 -32.300617 5.133967
+v 2.811150 -32.131592 5.816601
+v 5.751318 -32.501995 3.552376
+v 5.267371 -32.752129 3.052777
+v 5.796695 -32.831360 2.552834
+v 2.977029 -34.027603 0.090584
+v 3.557876 -33.721943 0.838118
+v 16.096685 27.880278 6.000001
+v 3.620723 -33.995419 -0.000001
+v 3.904327 -33.964016 -0.000001
+v 7.619010 -33.327900 -0.000001
+v 12.549101 29.741899 5.736482
+v 14.451280 29.675205 3.552378
+v 12.163995 30.106943 5.163589
+v 14.091032 30.031483 3.052779
+v 14.608163 29.968340 2.552836
+v 17.052780 29.631081 0.000001
+v 16.804882 29.772373 0.000001
+v 12.704637 31.445078 0.821578
+v 13.240525 31.443375 0.211462
+v 11.993677 31.014151 5.822239
+v -8.332258 31.096409 6.000001
+v 12.701804 32.771252 0.123310
+v 3.052778 -34.893414 -0.000002
+v 12.317470 31.816582 0.210682
+v 11.630219 30.111877 5.739895
+v 13.106319 30.458107 6.105557
+v 10.604228 32.660809 2.552836
+v 11.034432 32.342457 3.052779
+v 8.902768 34.042831 0.000001
+v 7.929231 34.282661 0.000001
+v 10.083376 32.651474 3.052779
+v 10.489667 32.348694 3.552378
+v -27.880278 16.096685 6.000000
+v 8.274511 32.109257 6.105557
+v 7.473064 32.369400 5.917339
+v 10.725381 31.391294 3.052779
+v 12.623289 32.845490 0.000001
+v 13.735960 32.395943 0.000001
+v 13.425739 31.441179 0.000001
+v 0.500000 -33.169220 3.052777
+v 0.500000 -34.169331 3.052777
+v 3.052778 -35.055016 -0.000002
+v -1.953260 -35.092388 0.123307
+v -2.437509 -34.858009 0.735776
+v 0.007525 -34.339161 2.552834
+v -0.500000 -34.169331 3.052777
+v 2.052778 -35.127762 -0.000002
+v -2.332964 -33.362934 5.244753
+v 0.020030 -34.006924 3.552376
+v -31.096409 -8.332258 6.000000
+v -1.822765 -33.202461 5.822237
+v 2.052778 -33.094681 6.105555
+v -1.755914 -32.232033 5.739892
+v -2.265089 -32.392284 5.163586
+v 0.020030 -33.006924 3.552376
+v -0.500000 -33.169220 3.052777
+v -2.365764 -33.831997 0.821576
+v 0.007525 -33.339161 2.552834
+v -1.882745 -34.065674 0.210680
+v 2.052778 -34.126007 -0.000001
+v 12.183209 31.943193 0.000001
+v 10.180651 31.397638 3.552378
+v -16.096685 -27.880278 5.999999
+v 7.255646 31.427654 5.816604
+v 9.774324 31.700312 3.052779
+v 10.295211 31.709753 2.552836
+v 8.593208 33.090103 0.000001
+v 7.683784 33.282124 0.090586
+v 7.879293 34.128967 0.000001
+v -2.813651 -33.134087 5.819592
+v -2.949284 -35.022591 0.123763
+v -2.744152 -32.164112 5.736479
+v -2.875952 -33.995972 0.211460
+v 7.901784 34.288998 0.000001
+v 6.921640 34.500210 0.000002
+v 2.949284 35.022591 0.123767
+v 4.771636 34.006023 2.552836
+v 5.250586 33.767212 3.052779
+v 2.437509 34.858009 0.735780
+v 8.332258 -31.096409 5.999999
+v 4.260318 33.906384 3.052779
+v 4.713014 33.678757 3.552378
+v 7.079614 32.393688 6.105557
+v 6.926498 32.731140 5.209877
+v 6.638690 32.486916 6.105557
+v 2.332964 33.362934 5.244756
+v 2.813651 33.134087 5.819594
+v 6.728268 31.776731 5.133970
+v 5.111397 32.776833 3.052779
+v 7.036911 33.170918 0.838121
+v -1.572073 -33.120998 6.105555
+v -7.901784 -34.288998 -0.000001
+v -6.921640 -34.500210 -0.000002
+v 27.880278 -16.096685 6.000000
+v -4.771636 -34.006023 2.552834
+v -5.250586 -33.767212 3.052777
+v -4.260318 -33.906384 3.052777
+v -4.713014 -33.678757 3.552376
+v -7.079614 -32.393688 6.105555
+v -7.473064 -32.369400 5.917336
+v -6.926498 -32.731140 5.209874
+v -6.638690 -32.486916 6.105555
+v -3.052778 -33.017456 6.105555
+v -1.715931 -34.144600 -0.000001
+v -1.855647 -35.138729 -0.000002
+v -3.052778 -35.055016 -0.000002
+v -4.121129 -32.916004 3.052777
+v -6.728268 -31.776731 5.133967
+v -7.255646 -31.427654 5.816601
+v -4.573841 -32.688488 3.552376
+v -5.111397 -32.776833 3.052777
+v -4.632463 -33.015755 2.552834
+v -7.683784 -33.282124 0.090584
+v -7.036911 -33.170918 0.838119
+v -7.061650 -33.450432 -0.000001
+v -6.782223 -33.508202 -0.000001
+v -3.052778 -34.051121 -0.000001
+v 2.744152 32.164112 5.736482
+v 4.573841 32.688488 3.552378
+v 2.265089 32.392284 5.163589
+v 4.121129 32.916004 3.052779
+v 4.632463 33.015755 2.552836
+v 7.061650 33.450432 0.000001
+v 6.782223 33.508202 0.000001
+v 2.365764 33.831997 0.821579
+v 2.875952 33.995972 0.211462
+v 1.822765 33.202461 5.822239
+v 1.953260 35.092388 0.123311
+v -7.879293 -34.128967 -0.000001
+v 1.882745 34.065674 0.210682
+v 1.755914 32.232033 5.739895
+v 3.052778 33.017456 6.105557
+v 1.572073 33.120998 6.105557
+v -0.007525 34.339161 2.552836
+v 0.500000 34.169331 3.052779
+v -2.052778 35.127762 0.000002
+v -3.052778 35.055016 0.000002
+v -0.500000 34.169331 3.052779
+v -0.020030 34.006924 3.552378
+v -2.052778 33.094681 6.105557
+v -2.895388 33.094433 5.917339
+v 0.500000 33.169220 3.052779
+v 1.855647 35.138729 0.000002
+v 3.052778 35.055016 0.000002
+v 3.052778 34.051121 0.000001
+v -9.774324 -31.700312 3.052777
+v -10.083376 -32.651474 3.052777
+v -7.929231 -34.282661 -0.000001
+v -12.701804 -32.771252 0.123308
+v -13.089926 -32.398705 0.735777
+v -10.604228 -32.660809 2.552834
+v -11.034432 -32.342457 3.052777
+v -8.902768 -34.042831 -0.000001
+v -12.528495 -31.009111 5.244753
+v -10.489667 -32.348694 3.552376
+v -11.993677 -31.014151 5.822237
+v -8.274511 -32.109257 6.105555
+v -11.630219 -30.111877 5.739892
+v -12.163995 -30.106943 5.163586
+v -10.180651 -31.397638 3.552376
+v -10.725381 -31.391294 3.052777
+v -12.704637 -31.445078 0.821576
+v -10.295211 -31.709753 2.552834
+v -12.317470 -31.816582 0.210680
+v -8.593208 -33.090103 -0.000001
+v 1.715931 34.144600 0.000001
+v -0.020030 33.006924 3.552378
+v -2.811150 32.131592 5.816604
+v -0.500000 33.169220 3.052779
+v -0.007525 33.339161 2.552836
+v -2.052778 34.126007 0.000001
+v -2.977029 34.027603 0.090586
+v -3.052778 34.893414 0.000002
+v -12.914937 -30.642923 5.819592
+v -13.627512 -32.397083 0.123764
+v -12.549101 -29.741899 5.736479
+v -13.240525 -31.443375 0.211460
+v -3.080840 35.052563 0.000002
+v -4.078280 34.950554 0.000002
+v -8.017640 34.219841 0.123766
+v -5.970344 33.816166 2.552836
+v -5.441038 33.737045 3.052779
+v -8.453507 33.905167 0.735779
+v -6.425846 33.563396 3.052779
+v -5.924966 33.486801 3.552378
+v -3.277087 32.995949 6.105557
+v -3.526987 33.269569 5.209877
+v -3.725240 32.948360 6.105557
+v -8.090934 32.450962 5.244756
+v -7.563055 32.381855 5.819594
+v -3.420587 32.300617 5.133970
+v -5.267371 32.752129 3.052779
+v -3.557876 33.721943 0.838121
+v -18.110926 -30.168989 -0.000001
+v -17.244022 -30.672745 -0.000001
+v -15.046535 -30.867134 2.552834
+v -15.428246 -30.492004 3.052777
+v -14.529451 -30.930376 3.052777
+v -14.889650 -30.573999 3.552376
+v -17.110001 -28.475824 5.917336
+v -16.701969 -28.988758 5.209874
+v -13.106319 -30.458107 6.105555
+v -12.183209 -31.943193 -0.000001
+v -12.623289 -32.845490 -0.000001
+v -13.735960 -32.395943 -0.000001
+v -14.091032 -30.031483 3.052777
+v -16.218513 -28.142317 5.133967
+v -16.612207 -27.647358 5.816601
+v -14.451280 -29.675205 3.552376
+v -14.989826 -29.593111 3.052777
+v -14.608163 -29.968340 2.552834
+v -17.592455 -29.278763 0.090584
+v -16.942877 -29.372890 0.838119
+v -17.052780 -29.631081 -0.000001
+v -16.804882 -29.772373 -0.000001
+v -13.425739 -31.441179 -0.000001
+v -7.329414 31.437878 5.736482
+v -5.751318 32.501995 3.552378
+v -7.855539 31.506845 5.163589
+v -6.252179 32.578480 3.052779
+v -5.796695 32.831360 2.552836
+v -3.620723 33.995419 0.000001
+v -3.904327 33.964016 0.000001
+v -8.204687 32.907200 0.821578
+v -7.770141 33.220810 0.211462
+v -8.526572 32.140682 5.822239
+v -8.986484 33.978436 0.123310
+v -18.040083 -30.023741 -0.000001
+v -8.736276 32.980183 0.210682
+v -8.290273 31.197092 5.739895
+v -7.299591 32.344830 6.105557
+v -8.739820 31.985739 6.105557
+v -10.618542 32.656158 2.552836
+v -10.083376 32.651474 3.052779
+v -12.807384 32.774143 0.000001
+v -13.735960 32.395943 0.000001
+v -11.034432 32.342457 3.052779
+v -10.527766 32.336315 3.552378
+v -12.179128 30.840570 6.105557
+v -12.980419 30.579950 5.917339
+v -9.774324 31.700312 3.052779
+v -9.093639 33.992344 0.000001
+v -7.929231 34.282661 0.000001
+v -7.619010 33.327900 0.000001
+v -19.091869 -27.128355 3.052777
+v -19.679720 -27.937462 3.052777
+v -18.135073 -30.154482 -0.000001
+v -22.207008 -27.242241 0.123308
+v -22.461010 -26.767988 0.735777
+v -20.177965 -27.785389 2.552834
+v -20.488737 -27.349676 3.052777
+v -18.986849 -29.625549 -0.000001
+v -21.497648 -25.619900 5.244754
+v -19.972563 -27.523952 3.552376
+v -20.990564 -25.789961 5.822237
+v -17.791834 -27.980753 6.105555
+v -20.366079 -25.044163 5.739893
+v -20.872204 -24.874523 5.163586
+v -19.384777 -26.714935 3.552376
+v -19.900887 -26.540569 3.052777
+v -21.799891 -25.980099 0.821576
+v -19.590179 -26.976372 2.552834
+v -21.546474 -26.453060 0.210680
+v -18.398031 -28.815111 -0.000001
+v -8.919314 33.003696 0.000001
+v -10.218750 31.385260 3.552378
+v -12.144022 30.125620 5.133970
+v -12.602771 29.690268 5.816604
+v -10.725381 31.391294 3.052779
+v -10.309525 31.705101 2.552836
+v -12.690074 31.445028 0.838121
+v -12.497824 31.821417 0.000001
+v -12.762974 31.716002 0.000001
+v -13.346431 31.442221 0.090586
+v -13.686022 32.242249 0.000001
+v -21.752020 -25.152216 5.819592
+v -22.971783 -26.600327 0.123764
+v -21.125656 -24.408342 5.736479
+v -22.309025 -25.812878 0.211460
+v -13.761890 32.384933 0.000001
+v -14.678990 31.979694 0.000001
+v -18.199741 30.067417 0.123766
+v -16.127905 30.316147 2.552836
+v -15.600055 30.404465 3.052779
+v -18.517036 29.633453 0.735779
+v -16.483004 29.934992 3.052779
+v -15.982968 30.016928 3.552378
+v -13.313004 30.368336 6.105557
+v -13.635226 30.551342 5.209877
+v -13.724517 30.184591 6.105557
+v -17.722834 28.362463 5.244756
+v -17.199436 28.459862 5.819594
+v -15.130531 29.521420 3.052779
+v -20.739868 -25.871408 6.105555
+v -26.547245 -23.095831 -0.000001
+v -25.878439 -23.842817 -0.000001
+v -23.848574 -24.706753 2.552834
+v -24.095682 -24.232031 3.052777
+v -23.376341 -24.926689 3.052777
+v -23.608786 -24.476446 3.552376
+v -24.768061 -22.045752 6.105555
+v -25.072092 -21.794836 5.917337
+v -24.842535 -22.408754 5.209874
+v -24.466143 -22.380342 6.105555
+v -21.876925 -24.917305 6.105555
+v -21.457911 -26.614964 -0.000001
+v -22.155275 -27.337107 -0.000001
+v -23.074572 -26.565725 -0.000001
+v -22.681606 -24.207270 3.052777
+v -24.121176 -21.753139 5.133968
+v -24.342651 -21.160746 5.816601
+v -22.914127 -23.757107 3.552376
+v -23.400946 -23.512611 3.052777
+v -23.153915 -23.987413 2.552834
+v -25.779055 -22.409389 0.090584
+v -25.190357 -22.699642 0.838119
+v -25.374664 -22.911234 -0.000001
+v -25.182562 -23.122215 -0.000001
+v -22.484495 -25.753557 -0.000001
+v -16.685526 27.634285 5.736482
+v -15.513497 29.133980 3.552378
+v -17.207212 27.537294 5.163589
+v -16.013479 29.051947 3.052779
+v -15.658433 29.433201 2.552836
+v -14.208694 31.095196 0.000001
+v -17.972006 28.761221 0.821578
+v -17.655638 29.193762 0.211462
+v -18.041269 27.932751 5.822239
+v -19.046568 29.538435 0.123310
+v -26.434986 -22.979582 -0.000001
+v -18.500130 28.666361 0.210682
+v -17.524950 27.108364 5.739895
+v -18.196199 27.719492 6.105557
+v -20.190142 27.776543 2.552836
+v -19.679720 27.937462 3.052779
+v -22.308313 27.212364 0.000001
+v -23.074572 26.565725 0.000001
+v -20.488737 27.349676 3.052779
+v -20.004972 27.500404 3.552378
+v -21.794836 25.072092 5.917339
+v -19.091869 27.128355 3.052779
+v -19.152777 29.518549 0.000001
+v -18.135073 30.154482 0.000001
+v -17.544996 29.342312 0.000001
+v -26.540569 -19.900887 3.052777
+v -27.349676 -20.488737 3.052777
+v -26.565725 -23.074572 -0.000001
+v -29.538435 -19.046568 0.123308
+v -29.633453 -18.517036 0.735777
+v -27.776543 -20.190142 2.552834
+v -27.937462 -19.679720 3.052777
+v -27.212364 -22.308313 -0.000001
+v -28.362463 -17.722834 5.244754
+v -27.500404 -20.004972 3.552376
+v -27.932751 -18.041269 5.822237
+v -27.108364 -17.524950 5.739893
+v -27.537294 -17.207212 5.163586
+v -26.691387 -19.417187 3.552376
+v -27.128355 -19.091869 3.052777
+v -28.761221 -17.972006 0.821576
+v -26.967525 -19.602356 2.552834
+v -28.666361 -18.500130 0.210680
+v -26.401926 -21.719496 -0.000001
+v -18.681475 28.632162 0.000001
+v -19.417187 26.691387 3.552378
+v -21.160746 24.342651 5.816603
+v -19.900887 26.540569 3.052779
+v -19.602356 26.967525 2.552836
+v -21.719496 26.401926 0.000001
+v -22.409389 25.779055 0.090586
+v -22.979582 26.434986 0.000001
+v -28.459862 -17.199436 5.819592
+v -30.067417 -18.199741 0.123764
+v -27.634285 -16.685526 5.736479
+v -29.193762 -17.655638 0.211460
+v -23.095831 26.547245 0.000001
+v -23.842817 25.878439 0.000001
+v -26.600327 22.971783 0.123766
+v -24.706753 23.848574 2.552836
+v -24.232031 24.095682 3.052779
+v -26.767988 22.461010 0.735779
+v -24.926689 23.376341 3.052779
+v -24.476446 23.608786 3.552378
+v -22.045752 24.768061 6.105557
+v -22.408754 24.842535 5.209876
+v -22.380342 24.466143 6.105557
+v -25.619900 21.497648 5.244756
+v -25.152216 21.752020 5.819594
+v -21.753139 24.121176 5.133970
+v -23.512611 23.400946 3.052779
+v -22.699642 25.190357 0.838121
+v -27.719492 -18.196199 6.105555
+v -32.384933 -13.761890 -0.000001
+v -31.979694 -14.678990 -0.000001
+v -30.316147 -16.127905 2.552834
+v -30.404465 -15.600055 3.052777
+v -29.934992 -16.483004 3.052777
+v -30.016928 -15.982968 3.552376
+v -30.368336 -13.313004 6.105556
+v -30.579950 -12.980419 5.917337
+v -30.551342 -13.635226 5.209875
+v -30.184591 -13.724517 6.105556
+v -28.632162 -18.681475 -0.000001
+v -29.518549 -19.152777 -0.000001
+v -30.154482 -18.135073 -0.000001
+v -29.051947 -16.013479 3.052777
+v -29.690268 -12.602771 5.816602
+v -29.133980 -15.513497 3.552376
+v -29.521420 -15.130531 3.052777
+v -29.433201 -15.658433 2.552834
+v -31.442221 -13.346431 0.090584
+v -31.095196 -14.208694 -0.000001
+v -29.342312 -17.544996 -0.000001
+v -24.408342 21.125656 5.736481
+v -23.757107 22.914127 3.552378
+v -24.874523 20.872204 5.163588
+v -24.207270 22.681606 3.052779
+v -23.987413 23.153915 2.552836
+v -22.911234 25.374664 0.000001
+v -23.122215 25.182562 0.000001
+v -25.980099 21.799891 0.821578
+v -25.812878 22.309025 0.211462
+v -25.789961 20.990564 5.822239
+v -27.242241 22.207008 0.123310
+v -32.242249 -13.686022 -0.000001
+v -26.453060 21.546474 0.210682
+v -25.044163 20.366079 5.739895
+v -24.917305 21.876925 6.105557
+v -25.871408 20.739868 6.105557
+v -27.785389 20.177965 2.552836
+v -27.349676 20.488737 3.052779
+v -29.625549 18.986849 0.000001
+v -30.154482 18.135073 0.000001
+v -27.937462 19.679720 3.052779
+v -27.523952 19.972563 3.552378
+v -27.980753 17.791834 6.105557
+v -28.475824 17.110001 5.917339
+v -26.540569 19.900887 3.052779
+v -27.337107 22.155275 0.000001
+v -26.565725 23.074572 0.000001
+v -25.753557 22.484495 0.000001
+v -31.391294 -10.725381 3.052778
+v -32.342457 -11.034432 3.052778
+v -31.445028 -12.690074 0.838119
+v -32.395943 -13.735960 -0.000001
+v -30.125620 -12.144022 5.133968
+v -33.978436 -8.986484 0.123309
+v -33.905167 -8.453507 0.735778
+v -32.656158 -10.618542 2.552835
+v -32.651474 -10.083376 3.052778
+v -32.774143 -12.807384 -0.000001
+v -32.450962 -8.090934 5.244754
+v -32.336315 -10.527766 3.552377
+v -32.140682 -8.526572 5.822237
+v -30.840570 -12.179128 6.105556
+v -31.197092 -8.290273 5.739893
+v -31.506845 -7.855539 5.163587
+v -31.385260 -10.218750 3.552377
+v -31.700312 -9.774324 3.052778
+v -32.907200 -8.204687 0.821577
+v -31.705101 -10.309525 2.552835
+v -32.980183 -8.736276 0.210681
+v -31.821417 -12.497824 -0.000001
+v -31.716002 -12.762974 -0.000001
+v -26.614964 21.457911 0.000001
+v -26.714935 19.384777 3.552378
+v -27.532114 17.234060 5.133970
+v -27.647358 16.612207 5.816603
+v -27.128355 19.091869 3.052779
+v -26.976372 19.590179 2.552836
+v -28.749411 17.980524 0.838121
+v -28.815111 18.398031 0.000001
+v -28.967661 18.156895 0.000001
+v -29.278763 17.592455 0.090586
+v -30.023741 18.040083 0.000001
+v -32.381855 -7.563056 5.819592
+v -34.219841 -8.017640 0.123765
+v -31.437878 -7.329414 5.736480
+v -33.220810 -7.770141 0.211461
+v -30.168989 18.110926 0.000001
+v -30.672745 17.244022 0.000001
+v -32.397083 13.627512 0.123766
+v -30.867134 15.046535 2.552836
+v -30.492004 15.428246 3.052779
+v -32.398705 13.089926 0.735779
+v -30.930376 14.529451 3.052779
+v -30.573999 14.889650 3.552378
+v -28.988758 16.701969 5.209876
+v -31.009111 12.528495 5.244755
+v -30.642923 12.914937 5.819593
+v -29.593111 14.989826 3.052779
+v -31.985739 -8.739820 6.105556
+v -35.052563 -3.080840 -0.000000
+v -34.950554 -4.078280 -0.000000
+v -33.816166 -5.970344 2.552835
+v -33.737045 -5.441038 3.052778
+v -33.563396 -6.425846 3.052778
+v -33.486801 -5.924966 3.552377
+v -32.995949 -3.277087 6.105556
+v -33.094433 -2.895388 5.917338
+v -33.269569 -3.526987 5.209875
+v -32.948360 -3.725240 6.105556
+v -32.344830 -7.299592 6.105556
+v -33.003696 -8.919314 -0.000000
+v -33.992344 -9.093639 -0.000000
+v -34.282661 -7.929231 -0.000000
+v -32.578480 -6.252179 3.052778
+v -32.300617 -3.420587 5.133969
+v -32.131592 -2.811150 5.816602
+v -32.501995 -5.751318 3.552377
+v -32.752129 -5.267371 3.052778
+v -32.831360 -5.796695 2.552835
+v -34.027603 -2.977029 0.090585
+v -33.721943 -3.557876 0.838120
+v -33.995419 -3.620723 -0.000000
+v -33.964016 -3.904327 -0.000000
+v -33.327900 -7.619010 -0.000000
+v -29.741899 12.549101 5.736481
+v -29.675205 14.451280 3.552378
+v -30.106943 12.163995 5.163588
+v -30.031483 14.091032 3.052779
+v -29.968340 14.608163 2.552836
+v -29.772373 16.804882 0.000001
+v -31.445078 12.704637 0.821578
+v -31.443375 13.240525 0.211462
+v -31.014151 11.993677 5.822238
+v -32.771252 12.701804 0.123310
+v -34.893414 -3.052778 -0.000000
+v -31.816582 12.317470 0.210682
+v -30.111877 11.630219 5.739894
+v -30.458107 13.106319 6.105556
+v -32.660809 10.604228 2.552835
+v -32.342457 11.034432 3.052778
+v -34.042831 8.902768 0.000000
+v -34.282661 7.929231 0.000000
+v -32.651474 10.083376 3.052778
+v -32.348694 10.489667 3.552377
+v -32.109257 8.274511 6.105556
+v -32.369400 7.473063 5.917338
+v -31.391294 10.725381 3.052778
+v -32.845490 12.623289 0.000001
+v -32.395943 13.735960 0.000001
+v -31.441179 13.425739 0.000001
+v -33.169220 -0.500000 3.052778
+v -34.169331 -0.500000 3.052778
+v -35.055016 -3.052778 -0.000000
+v -35.092388 1.953260 0.123309
+v -34.858009 2.437509 0.735778
+v -34.339161 -0.007525 2.552835
+v -34.169331 0.500000 3.052778
+v -35.127762 -2.052778 -0.000000
+v -33.362934 2.332964 5.244755
+v -34.006924 -0.020030 3.552377
+v -33.202461 1.822765 5.822238
+v -33.094681 -2.052778 6.105556
+v -32.232033 1.755914 5.739894
+v -32.392284 2.265089 5.163587
+v -33.006924 -0.020030 3.552377
+v -33.169220 0.500000 3.052778
+v -33.831997 2.365764 0.821577
+v -33.339161 -0.007525 2.552835
+v -34.065674 1.882745 0.210681
+v -34.126007 -2.052778 -0.000000
+v -31.943193 12.183209 0.000001
+v -31.397638 10.180651 3.552377
+v -31.427654 7.255646 5.816603
+v -31.700312 9.774324 3.052778
+v -31.709753 10.295211 2.552835
+v -33.090103 8.593208 0.000000
+v -33.282124 7.683784 0.090585
+v -34.128967 7.879293 0.000000
+v -33.134087 2.813651 5.819593
+v -35.022591 2.949284 0.123765
+v -32.164112 2.744152 5.736480
+v -33.995972 2.875952 0.211461
+v -34.288998 7.901784 0.000000
+v -34.500210 6.921640 0.000000
+v -34.006023 4.771636 2.552835
+v -33.767212 5.250586 3.052778
+v -33.906384 4.260318 3.052778
+v -33.678757 4.713014 3.552377
+v -32.393688 7.079614 6.105556
+v -32.731140 6.926498 5.209876
+v -32.486916 6.638690 6.105556
+v -31.776731 6.728268 5.133969
+v -32.776833 5.111397 3.052778
+v -33.170918 7.036911 0.838120
+v -33.120998 1.572073 6.105556
+v -33.017456 3.052778 6.105556
+v -34.144600 1.715931 0.000000
+v -35.138729 1.855647 0.000000
+v -35.055016 3.052778 0.000000
+v -32.916004 4.121129 3.052778
+v -32.688488 4.573841 3.552377
+v -33.015755 4.632463 2.552835
+v -33.450432 7.061650 0.000000
+v -33.508202 6.782223 0.000000
+v -34.051121 3.052778 0.000000
+v 33.057652 -1.563170 6.105556
+v 32.927326 -3.052778 6.105556
+v 32.553478 -1.581449 6.000000
+v 32.156876 -1.525710 6.000000
+v 32.998207 -1.643951 6.000000
+v 32.882671 -2.964511 6.000000
+v 32.056259 -2.964511 6.000000
+v 6.815447 31.463631 6.000001
+v 6.732959 31.477686 6.000001
+v 6.419639 31.544041 6.000001
+v 31.236841 7.783137 6.000000
+v 31.403399 7.086511 6.000000
+v 31.211948 7.873366 6.000000
+v 31.185658 7.991463 6.000000
+v 31.195595 7.952629 6.000000
+v 32.130497 1.968738 6.000000
+v 32.409344 1.968738 6.000000
+v 32.969791 1.968738 6.000000
+v 33.014816 2.052778 6.105556
+v 16.204672 27.817602 6.000001
+v 17.273815 27.164377 6.000001
+v 17.293091 27.151314 6.000001
+v 17.268200 27.168690 6.000001
+v -31.896978 -8.724169 6.105556
+v -32.283989 -7.279823 6.105556
+v -31.062519 -8.323177 6.105556
+v -31.068701 -8.276226 6.105556
+v 24.655115 -20.688097 5.999999
+v 24.191565 -21.240536 5.999999
+v 25.118670 -20.135662 5.999999
+v -6.815447 -31.463631 5.999999
+v -8.056488 -31.166292 5.999999
+v -8.034119 -31.172758 5.999999
+v -8.027447 -31.175125 5.999999
+v 29.571230 -12.725347 6.000000
+v 30.373547 -12.986034 6.000000
+v 30.385962 -13.082878 6.105556
+v -28.481865 -16.976149 6.105555
+v -28.505627 -16.939892 6.102862
+v -3.711371 32.869709 6.105557
+v -3.787972 32.810627 6.000001
+v -3.642204 31.983942 6.000001
+v -21.770527 -24.921030 5.999999
+v -21.864771 -24.900578 6.105555
+v -21.240536 -24.191565 5.999999
+v -3.240921 32.029781 6.000001
+v -2.909521 32.059223 6.000001
+v -1.992011 32.129734 6.000001
+v -1.968738 32.130497 6.000001
+v -1.999088 32.129925 6.000001
+v 32.869709 3.711371 6.105556
+v 32.810627 3.787972 6.000000
+v 31.983942 3.642204 6.000000
+v 27.934332 -17.758106 6.105555
+v 27.843901 -17.796284 5.999999
+v 27.151314 -17.293091 5.999999
+v -33.057652 1.563170 6.105556
+v -32.156876 1.525709 6.000000
+v -32.998207 1.643950 6.000000
+v 32.029781 3.240921 6.000000
+v 32.017658 3.323715 6.000000
+v 30.997032 -11.772431 6.105556
+v 8.247075 32.024815 6.105557
+v 6.634473 32.456909 6.105557
+v 32.211418 7.349053 6.000000
+v 32.283989 7.279822 6.105556
+v 31.784304 7.210275 6.000000
+v -13.082878 -30.385962 6.105555
+v -11.783819 -30.991722 6.105555
+v -11.772430 -30.997032 6.105555
+v 16.976149 -28.481865 6.105555
+v 16.939892 -28.505627 6.102862
+v 27.857691 -16.060316 6.105556
+v 27.834940 -16.098629 6.105556
+v 27.849894 -16.079144 6.105556
+v 28.455252 -17.014158 6.105555
+v -8.276226 31.068701 6.105557
+v -7.086512 31.403399 6.000001
+v -8.354133 31.087349 6.000001
+v -8.485985 31.054476 6.000001
+v -8.219755 31.120850 6.000001
+v -30.997032 11.772430 6.105556
+v -31.014143 11.732588 6.102863
+v 27.676554 16.443857 6.000001
+v 26.912249 17.667011 6.000001
+v 31.063986 8.312038 6.105556
+v 31.062519 8.323177 6.105556
+v 31.896978 8.724169 6.105556
+v 21.705841 -25.059507 6.105555
+v 22.339066 -24.426283 6.105555
+v 25.767275 -20.762012 5.999999
+v 25.856535 -20.725506 6.105555
+v 25.628538 -20.628036 5.999999
+v -25.720798 20.919359 6.105557
+v -25.067919 21.697432 6.105557
+v -25.111076 21.649612 6.098890
+v -25.408401 21.320179 6.052961
+v -13.397630 29.387268 6.000001
+v -13.736077 30.023796 6.000001
+v -13.682834 30.106197 6.105557
+v -13.347525 29.293036 6.000001
+v 31.166292 -8.056488 6.000000
+v 31.953341 -8.312216 6.000000
+v 32.024815 -8.247075 6.105556
+v -32.029781 -3.240922 6.000000
+v -32.059223 -2.909521 6.000000
+v -32.129734 -1.992011 6.000000
+v -32.130497 -1.968738 6.000000
+v -32.129925 -1.999088 6.000000
+v -22.339066 24.426283 6.105557
+v -22.362131 24.329426 6.000001
+v -21.746296 23.734718 6.000001
+v -22.066540 24.043976 6.000001
+v -12.175508 29.802137 6.000001
+v -13.318996 29.307554 6.000001
+v -21.448591 24.007669 6.000001
+v -21.508448 23.949198 6.000001
+v 21.448591 -24.007669 5.999999
+v 20.478577 -24.836924 5.999999
+v 20.496956 -24.822628 5.999999
+v 20.692097 -24.659882 5.999999
+v 20.502792 -24.818621 5.999999
+v 30.106197 13.682834 6.105556
+v 30.811752 12.169765 6.105556
+v 21.746296 -23.734718 5.999999
+v 22.362131 -24.329426 5.999999
+v 22.066540 -24.043976 5.999999
+v 28.481865 16.976149 6.105557
+v 27.652512 18.160585 6.105557
+v -24.007669 -21.448591 5.999999
+v -23.949198 -21.508448 5.999999
+v -23.734718 -21.746296 5.999999
+v 11.801251 -29.949545 5.999999
+v 12.004091 -30.573822 5.999999
+v 12.076781 -30.797539 5.999999
+v 12.169765 -30.811752 6.105555
+v -16.343327 -28.856592 6.089059
+v -16.258484 -28.847580 5.999999
+v -15.853085 -28.016388 5.999999
+v -16.216600 -28.761703 5.999999
+v 25.580059 21.106136 6.089058
+v 25.577957 21.108957 6.088848
+v 25.410637 21.322056 6.058843
+v 25.059507 21.705841 6.105557
+v -12.725347 -29.571230 5.999999
+v -11.388057 -30.111536 5.999999
+v 27.321232 -17.021612 5.999999
+v 27.339806 -16.994806 5.999999
+v 27.367449 -16.953852 5.999999
+v 27.336357 -16.999043 5.999999
+v -2.690797 -32.075397 5.999999
+v -2.964511 -32.056259 5.999999
+v -1.525709 -32.156876 5.999999
+v 27.194736 17.817213 6.000001
+v 27.657104 18.063059 6.000001
+v -32.427197 6.543758 6.000000
+v -32.456909 6.634472 6.105556
+v -31.544041 6.419639 6.000000
+v -32.194733 6.511087 6.000000
+v 20.919359 25.720798 6.105557
+v 21.697432 25.067919 6.105557
+v 21.649612 25.111076 6.098890
+v 21.320179 25.408401 6.052961
+v -17.758106 -27.934332 6.105555
+v -17.014158 -28.455252 6.105555
+v -16.076118 -27.851145 6.105555
+v -16.079144 -27.849894 6.105555
+v -16.081711 -27.847923 6.105555
+v 32.059223 2.909520 6.000000
+v 32.106907 2.329814 6.000000
+v -16.976149 28.481865 6.105557
+v -16.939892 28.505627 6.102865
+v 18.160585 -27.652512 6.105555
+v 17.667011 -26.912249 5.999999
+v 18.063059 -27.657104 5.999999
+v 16.980471 -28.415140 5.999999
+v 16.443857 -27.676554 5.999999
+v -31.463631 6.815447 6.000000
+v -31.172758 8.034119 6.000000
+v -31.166292 8.056488 6.000000
+v -31.175125 8.027447 6.000000
+v 15.853085 28.016388 6.000001
+v 16.119156 27.863035 6.000001
+v 16.130566 27.856461 6.000001
+v 16.081711 27.847923 6.105557
+v 16.076118 27.851145 6.105557
+v -24.822628 -20.496956 5.999999
+v -24.836924 -20.478577 5.999999
+v -24.659882 -20.692097 5.999999
+v -24.818621 -20.502792 5.999999
+v 12.980045 -29.460630 5.999999
+v 13.347525 -29.293036 5.999999
+v 13.055040 -29.423515 5.999999
+v 23.734718 21.746296 6.000001
+v 24.329426 22.362131 6.000001
+v 24.043976 22.066540 6.000001
+v 24.426283 22.339066 6.105557
+v 31.054476 8.485985 6.000000
+v 31.868328 8.629489 6.000000
+v 30.111536 -11.388057 6.000000
+v 31.014143 -11.732588 6.102862
+v 30.932077 -11.788262 6.000000
+v -28.630716 16.742167 6.080725
+v -28.604868 16.782949 6.085212
+v -28.482677 16.971773 6.101828
+v -28.455252 17.014158 6.105557
+v 3.240921 -32.029781 5.999999
+v 2.909521 -32.059223 5.999999
+v 1.968738 -32.130497 5.999999
+v 1.992011 -32.129734 5.999999
+v 1.999088 -32.129925 5.999999
+v 32.060310 -2.906603 6.000000
+v -27.676554 -16.443857 5.999999
+v -28.415140 -16.980471 5.999999
+v 28.630716 -16.742167 6.080723
+v 28.604868 -16.782949 6.085210
+v 28.482677 -16.971773 6.101826
+v 20.688097 24.655115 6.000001
+v 21.240536 24.191565 6.000001
+v 20.135662 25.118670 6.000001
+v 31.463631 -6.815448 6.000000
+v 31.544041 -6.419640 6.000000
+v 31.477686 -6.732960 6.000000
+v 31.172758 -8.034119 6.000000
+v 31.175125 -8.027447 6.000000
+v -24.426283 -22.339066 6.105555
+v -25.059507 -21.705841 6.105555
+v 21.864771 24.900578 6.105557
+v 20.725506 25.856535 6.105557
+v 20.762012 25.767275 6.000001
+v 25.067919 -21.697432 6.105555
+v 25.111076 -21.649612 6.098888
+v 25.720798 -20.919359 6.105555
+v 25.408401 -21.320179 6.052959
+v 21.508448 -23.949198 5.999999
+v 17.758106 27.934332 6.105557
+v 17.014158 28.455252 6.105557
+v 16.079144 27.849894 6.105557
+v -21.697432 -25.067919 6.105555
+v -21.649612 -25.111076 6.098888
+v -20.919359 -25.720798 6.105555
+v -21.320179 -25.408401 6.052959
+v 32.427197 -6.543759 6.000000
+v 32.456909 -6.634473 6.105556
+v 7.279823 -32.283989 6.105555
+v 8.323177 -31.062519 6.105555
+v 8.724169 -31.896978 6.105555
+v 7.086512 -31.403399 5.999999
+v 7.349054 -32.211418 5.999999
+v 24.836924 20.478577 6.000001
+v 25.585114 21.022167 6.000001
+v 25.581411 21.083645 6.065204
+v 12.725347 29.571230 6.000001
+v 12.986034 30.373547 6.000001
+v 13.082878 30.385962 6.105557
+v 11.772430 30.997032 6.105557
+v 11.783819 30.991722 6.105557
+v -26.912249 -17.667011 5.999999
+v -29.571230 12.725347 6.000000
+v -30.111536 11.388057 6.000000
+v 24.007669 21.448591 6.000001
+v 24.822628 20.496956 6.000001
+v 24.659882 20.692097 6.000001
+v 24.818621 20.502792 6.000001
+v 11.388057 30.111536 6.000001
+v 11.732588 31.014143 6.102864
+v 11.737082 31.007517 6.094560
+v 11.788262 30.932077 6.000001
+v 8.056488 31.166292 6.000001
+v 8.312216 31.953341 6.000001
+v -8.247075 -32.024815 6.105555
+v -6.634473 -32.456909 6.105555
+v 13.682834 -30.106197 6.105555
+v 13.736077 -30.023796 5.999999
+v 13.397630 -29.387268 5.999999
+v 28.642202 -16.722727 6.077199
+v 28.727320 -16.585726 6.059285
+v 28.856592 -16.343327 6.089060
+v -31.007517 11.737082 6.094559
+v -30.808792 11.728131 6.000000
+v -30.932077 11.788262 6.000000
+v 23.949198 21.508448 6.000001
+v -31.953341 8.312216 6.000000
+v -32.024815 8.247075 6.105556
+v -31.268143 8.089581 6.000000
+v -3.052778 -32.927326 6.105555
+v -1.563170 -33.057652 6.105555
+v -27.934332 17.758106 6.105557
+v -27.843901 17.796284 6.000001
+v -27.151314 17.293091 6.000001
+v 6.543759 32.427197 6.000001
+v 16.343327 28.856592 6.089062
+v 16.216600 28.761703 6.000001
+v 16.258484 28.847580 6.000001
+v -2.964511 -32.125702 5.999999
+v -2.964510 -32.882671 5.999999
+v -29.949545 -11.801251 6.000000
+v -29.829792 -12.098289 6.000000
+v -29.819021 -12.129071 6.000000
+v -29.802137 -12.175508 6.000000
+v -29.820421 -12.123791 6.000000
+v 2.964511 32.056259 6.000001
+v 2.964510 32.882671 6.000001
+v 3.052778 32.927326 6.105557
+v -27.321232 17.021612 6.000001
+v -27.339806 16.994806 6.000001
+v -27.367449 16.953852 6.000001
+v -27.336357 16.999043 6.000001
+v 8.034119 31.172758 6.000001
+v 8.027447 31.175125 6.000001
+v 1.563170 33.057652 6.105557
+v 1.581448 32.553478 6.000001
+v 1.525709 32.156876 6.000001
+v 1.643951 32.998207 6.000001
+v -1.968738 32.409344 6.000001
+v -1.968738 32.969791 6.000001
+v -2.052778 33.014816 6.105557
+v 17.555017 27.511827 6.000001
+v 17.796284 27.843901 6.000001
+v -16.443857 27.676554 6.000001
+v -16.980471 28.415140 6.000001
+v -17.293091 -27.151314 5.999999
+v -17.796284 -27.843901 5.999999
+v -6.419639 -31.544041 5.999999
+v -6.543759 -32.427197 5.999999
+v 21.022167 -25.585114 5.999999
+v 21.083645 -25.581411 6.065202
+v 21.106136 -25.580059 6.089056
+v 20.966276 -25.508186 5.999999
+v 1.968738 -32.409344 5.999999
+v 1.968738 -32.969791 5.999999
+v 2.052778 -33.014816 6.105555
+v 31.097437 8.324454 6.000000
+v 31.070236 8.426724 6.000000
+v 31.093481 8.339328 6.000000
+v 29.829792 12.098289 6.000000
+v 29.949545 11.801251 6.000000
+v 29.802137 12.175508 6.000000
+v -11.737082 -31.007517 6.094557
+v -11.788262 -30.932077 5.999999
+v -11.732588 -31.014143 6.102861
+v -11.801251 29.949545 6.000001
+v -12.098289 29.829792 6.000001
+v -12.129071 29.819021 6.000001
+v -12.123791 29.820421 6.000001
+v -12.986034 -30.373547 5.999999
+v -7.349054 32.211418 6.000001
+v -7.279823 32.283989 6.105557
+v 16.742167 28.630716 6.080725
+v 16.782949 28.604868 6.085212
+v 16.971773 28.482677 6.101828
+v -31.403399 -7.086512 6.000000
+v -31.087349 -8.354133 6.000000
+v -31.054476 -8.485985 6.000000
+v -31.120850 -8.219755 6.000000
+v -24.655115 20.688097 6.000001
+v -24.191565 21.240536 6.000001
+v -25.118670 20.135662 6.000001
+v -8.724169 31.896978 6.105557
+v -8.323177 31.062519 6.105557
+v -12.004091 30.573822 6.000001
+v -12.076781 30.797539 6.000001
+v -12.169765 30.811752 6.105557
+v 21.770527 24.921030 6.000001
+v 16.585726 28.727320 6.059287
+v 16.722727 28.642202 6.077201
+v -20.725506 -25.856535 6.105555
+v -20.135662 -25.118670 5.999999
+v -20.628038 -25.628538 5.999999
+v -20.762012 -25.767275 5.999999
+v -21.705841 25.059507 6.105557
+v -16.204672 -27.817602 5.999999
+v -16.119156 -27.863035 5.999999
+v -16.130566 -27.856461 5.999999
+v -16.070221 -27.891239 5.999999
+v -27.857691 16.060316 6.105556
+v -27.874302 16.079222 6.037034
+v -27.834940 16.098629 6.105556
+v -27.864285 16.102749 6.027304
+v -28.001841 15.881599 6.000000
+v -27.870123 16.109921 6.000000
+v -27.886694 16.081194 6.000000
+v -28.016388 15.853085 6.000000
+v -6.732959 -31.477686 5.999999
+v 11.823150 -29.941628 5.999999
+v 11.829938 -29.939621 5.999999
+v 28.505627 16.939892 6.102864
+v 28.415140 16.980471 6.000001
+v 28.304169 16.899847 6.000001
+v -32.017658 -3.323716 6.000000
+v -31.983942 -3.642205 6.000000
+v 3.711371 -32.869709 6.105555
+v 3.787972 -32.810627 5.999999
+v 3.642204 -31.983942 5.999999
+v -24.329426 -22.362131 5.999999
+v -24.043976 -22.066540 5.999999
+v -18.160585 27.652512 6.105557
+v -25.577957 -21.108957 6.088846
+v -25.580059 -21.106136 6.089056
+v -25.410637 -21.322056 6.058841
+v 28.854191 -16.320713 6.065322
+v 28.847580 -16.258484 6.000000
+v 28.761703 -16.216600 6.000000
+v 28.016388 -15.853085 6.000000
+v 21.108957 -25.577957 6.088846
+v 21.322056 -25.410637 6.058841
+v 2.906603 32.060310 6.000001
+v -17.667011 26.912249 6.000001
+v -18.063059 27.657104 6.000001
+v -25.585114 -21.022167 5.999999
+v -25.581411 -21.083645 6.065202
+v -25.508186 -20.966276 5.999999
+v -16.722727 -28.642202 6.077199
+v -16.585726 -28.727320 6.059284
+v -16.742167 -28.630716 6.080722
+v -27.652512 -18.160585 6.105555
+v -27.657104 -18.063059 5.999999
+v 3.323716 -32.017658 5.999999
+v 27.874302 -16.079222 6.037033
+v 27.864285 -16.102749 6.027303
+v 27.870123 -16.109921 6.000000
+v 27.886694 -16.081194 6.000000
+v 28.001841 -15.881599 6.000000
+v -31.477686 6.732959 6.000000
+v -29.307554 -13.318996 6.000000
+v -29.293036 -13.347525 6.000000
+v -30.811752 -12.169765 6.105556
+v -30.106197 -13.682834 6.105556
+v -30.023796 -13.736077 6.000000
+v -29.387268 -13.397630 6.000000
+v -21.108957 25.577957 6.088848
+v -21.106136 25.580059 6.089058
+v -21.322056 25.410637 6.058843
+v 30.573822 12.004091 6.000000
+v 30.797539 12.076781 6.000000
+v -20.688097 -24.655115 5.999999
+v 8.219755 -31.120850 5.999999
+v 8.485985 -31.054476 5.999999
+v 8.354133 -31.087349 5.999999
+v -17.273815 -27.164377 5.999999
+v -17.268200 -27.168690 5.999999
+v -24.900578 21.864771 6.105557
+v -25.856535 20.725506 6.105557
+v -25.628538 20.628036 6.000001
+v -25.767275 20.762012 6.000001
+v -1.643951 -32.998207 5.999999
+v -30.573822 -12.004091 6.000000
+v -30.797539 -12.076781 6.000000
+v 8.629489 -31.868328 5.999999
+v 8.498042 -31.122858 5.999999
+v 24.921030 -21.770527 5.999999
+v 24.900578 -21.864771 6.105555
+v -27.849894 16.079144 6.105556
+v -31.122858 -8.498042 6.000000
+v -31.868328 -8.629488 6.000000
+v -32.869709 -3.711372 6.105556
+v -32.810627 -3.787972 6.000000
+v -32.211418 -7.349054 6.000000
+v -29.875513 12.824214 6.000000
+v -30.373547 12.986034 6.000000
+v -30.385962 13.082878 6.105556
+v -8.312216 -31.953341 5.999999
+v -16.782949 -28.604868 6.085209
+v -16.971773 -28.482677 6.101825
+v -20.496956 24.822628 6.000001
+v -20.478577 24.836924 6.000001
+v -20.692097 24.659882 6.000001
+v -20.502792 24.818621 6.000001
+v -32.075397 2.690797 6.000000
+v -32.056259 2.964510 6.000000
+v 29.307554 13.318996 6.000000
+v 29.293036 13.347525 6.000000
+v -30.991722 11.783819 6.105556
+v 29.387268 13.397630 6.000000
+v 30.023796 13.736077 6.000000
+v -33.014816 -2.052778 6.105556
+v -20.966276 25.508186 6.000001
+v -21.022167 25.585114 6.000001
+v -21.083645 25.581411 6.065204
+v -32.969791 -1.968738 6.000000
+v -32.409344 -1.968738 6.000000
+v -28.856592 16.343327 6.089061
+v -28.847580 16.258484 6.000000
+v -8.498042 31.122858 6.000001
+v -8.629488 31.868328 6.000001
+v -24.921030 21.770527 6.000001
+v -28.727320 16.585726 6.059287
+v -28.642202 16.722727 6.077201
+v -3.323716 32.017658 6.000001
+v -32.927326 3.052778 6.105556
+v -32.125702 2.964510 6.000000
+v -32.882671 2.964510 6.000000
+v 0.000000 32.998726 3.577050
+v 0.005188 32.995922 3.583441
+v -0.003427 32.999680 3.572829
+v -0.002721 -33.341290 2.545359
+v 0.001583 -33.340393 2.548499
+v 0.000413 -33.336781 2.559839
+v -0.000462 -33.336487 2.560701
+v 0.001310 -33.341549 2.545133
+v -0.002002 -33.342823 2.541029
+v 32.993473 8.839745 0.091586
+v 33.024342 8.836506 0.000000
+v 32.993694 8.841460 0.089612
+v 33.017162 8.855669 0.007325
+v 33.019249 8.856934 0.000000
+v 32.898495 8.802530 0.392080
+v 32.924362 8.805147 0.313214
+v 32.871643 8.824306 0.451704
+v 32.896606 8.839395 0.364198
+v 32.457184 8.789964 1.653533
+v 32.567665 8.646273 1.449280
+v -16.958265 -29.370661 0.820410
+v -16.957306 -29.370914 0.821574
+v -16.956348 -29.370939 0.822617
+v 16.234520 28.122192 5.161725
+v 16.216204 28.088137 5.278471
+v 16.236792 28.119339 5.165662
+v 16.216125 28.086281 5.283422
+v 16.956348 29.370939 0.822619
+v 17.090052 29.606749 0.006257
+v 17.095329 29.603302 0.007143
+v 16.958265 29.370661 0.820412
+v 17.089046 29.608017 0.003868
+v 17.087418 29.610071 0.000001
+v 17.101534 29.601509 0.000001
+v -28.418062 -16.513060 3.936155
+v -28.505337 -16.457563 3.828560
+v -28.564894 -16.397337 3.731531
+v -31.068699 -8.276232 6.105556
+v -31.056959 -8.336598 6.105556
+v 29.375141 -16.794493 0.998788
+v 29.342411 -17.065477 0.690367
+v 29.370914 -16.957304 0.821575
+v 32.613373 -8.567614 1.342927
+v 32.527340 -8.715674 1.543116
+v 32.396549 -8.854167 1.748959
+v 31.576435 -8.630017 4.308462
+v 31.577707 -8.461222 4.500909
+v 31.539131 -8.285417 4.686602
+v -8.452016 -31.209370 5.544241
+v -8.292224 -31.191967 5.728365
+v -8.630017 -31.576435 4.308461
+v -8.447924 -31.301538 5.290596
+v -8.327768 -31.265415 5.493316
+v -8.285417 -31.539131 4.686602
+v -8.922299 -32.347366 1.807728
+v -8.522811 -32.648876 1.253856
+v -8.567613 -32.613373 1.342925
+v -8.854167 -32.396549 1.748958
+v -8.770087 -32.901524 0.395819
+v -8.779748 -32.938816 0.279790
+v -8.870949 -32.864853 0.416582
+v -8.855641 -32.810307 0.587271
+v 32.938816 -8.779748 0.279791
+v 32.914822 -8.819500 0.336235
+v 32.864853 -8.870949 0.416583
+v 28.418062 16.513060 3.936157
+v 28.564894 16.397337 3.731532
+v 28.505337 16.457563 3.828562
+v -0.001075 33.012840 3.534168
+v 0.001201 33.013550 3.531982
+v 0.000462 33.336487 2.560704
+v -0.000413 33.336781 2.559842
+v -16.206669 28.247019 4.844119
+v -16.270582 28.181475 4.953648
+v -16.317417 28.105307 5.050501
+v -32.924362 -8.805147 0.313213
+v -32.915627 -8.819716 0.333726
+v -32.896606 -8.839395 0.364197
+v 31.577557 8.481297 4.478021
+v 31.577707 8.461222 4.500909
+v 31.574081 8.444697 4.518363
+v 27.857689 -16.060318 6.105556
+v 27.834940 -16.098627 6.105556
+v 27.849892 -16.079144 6.105556
+v -32.613373 8.567613 1.342928
+v -32.396549 8.854167 1.748960
+v -32.527340 8.715674 1.543116
+v -8.356006 31.058943 6.077459
+v -8.346292 31.156271 5.814347
+v -8.349722 31.153770 5.818905
+v -8.331332 31.482367 4.839198
+v -8.378650 31.559589 4.588127
+v -8.551594 31.577026 4.397876
+v -8.569499 31.470112 4.676818
+v -8.378779 31.205729 5.639500
+v -8.349133 31.202835 5.673129
+v -8.301598 31.100445 6.000001
+v -8.276232 31.068699 6.105557
+v -8.294640 31.091738 6.028954
+v 28.231052 16.471296 4.463519
+v 28.440899 16.248695 4.251762
+v 28.247019 16.206669 4.844118
+v 28.105307 16.317417 5.050500
+v 31.063984 8.312042 6.105556
+v 31.061243 8.326260 6.105556
+v -32.938816 8.779748 0.279792
+v -32.914822 8.819500 0.336236
+v -32.864853 8.870949 0.416584
+v 32.915627 8.819716 0.333726
+v 32.993690 8.840633 0.090585
+v 31.202835 8.349133 5.673128
+v 31.205673 8.361535 5.659679
+v 31.205729 8.378779 5.639499
+v 31.209370 -8.452016 5.544242
+v 31.208433 -8.362275 5.651079
+v 31.191967 -8.292224 5.728366
+v 23.464962 23.483528 2.973550
+v 23.479191 23.479191 2.957707
+v 23.496426 23.469233 2.934608
+v -33.012840 -0.001076 3.534167
+v -33.013550 0.001200 3.531981
+v -33.336487 0.000462 2.560703
+v -33.336781 -0.000413 2.559841
+v -23.253141 23.119791 4.165822
+v -23.168081 23.168081 4.281390
+v -23.041174 23.206291 4.423834
+v -23.446449 23.428028 3.131038
+v -23.441616 23.421814 3.154153
+v -23.403141 23.433125 3.209091
+v -23.414307 23.441185 3.169058
+v -23.488697 23.510084 2.865770
+v -23.469233 23.496426 2.934608
+v -23.495363 23.479656 2.917910
+v -23.483528 23.464962 2.973550
+v -23.775299 23.651264 1.926975
+v -23.693260 23.843620 1.684916
+v -23.440800 23.420591 3.158383
+v -23.400635 23.431578 3.217447
+v -23.287868 23.130121 4.063136
+v -23.034935 23.246546 4.338448
+v -33.342823 0.002002 2.541030
+v -33.342262 -0.000000 2.543511
+v -33.341549 -0.001310 2.545135
+v 29.115606 16.750626 1.777343
+v 29.126413 16.875767 1.560819
+v 29.295916 16.803562 1.210373
+v 29.272404 16.999676 0.980462
+v 28.961197 16.624832 2.356310
+v 28.933344 16.812471 2.142547
+v 28.958246 16.719051 2.255169
+v 29.294006 16.912903 1.088752
+v 23.041174 -23.206291 4.423832
+v 23.253139 -23.119791 4.165820
+v 23.168081 -23.168081 4.281388
+v 23.693260 -23.843620 1.684914
+v 23.747229 -23.747229 1.817279
+v 23.775299 -23.651266 1.926972
+v -23.130121 -23.287867 4.063135
+v -23.119791 -23.253139 4.165821
+v -23.206291 -23.041174 4.423832
+v -23.246546 -23.034935 4.338446
+v -23.651266 -23.775299 1.926972
+v -23.618338 -23.762354 2.018964
+v -23.843620 -23.693260 1.684914
+v -23.840755 -23.654570 1.763284
+v -23.472525 -23.490801 2.942064
+v -23.464962 -23.483528 2.973548
+v -23.506895 -23.480330 2.888903
+v -23.496426 -23.469233 2.934606
+v -23.428028 -23.446449 3.131036
+v -23.421814 -23.441616 3.154151
+v -23.433125 -23.403141 3.209089
+v -23.441185 -23.414307 3.169056
+v -23.134768 -23.291327 4.046223
+v -23.252325 -23.043154 4.309350
+v -23.681803 -23.493198 2.444052
+v -23.432680 -23.578840 2.803721
+v -8.461222 31.577707 4.500911
+v -0.005188 -32.995922 3.583438
+v 0.003427 -32.999680 3.572826
+v 0.001075 -33.012840 3.534166
+v -0.001201 -33.013550 3.531979
+v -8.819500 -32.914822 0.336234
+v -16.081701 -27.847929 6.105555
+v -16.079144 -27.849892 6.105555
+v 23.428028 23.446449 3.131038
+v 23.434809 23.434809 3.146541
+v 23.441185 23.414307 3.169058
+v 16.513060 -28.418062 3.936155
+v 16.457563 -28.505337 3.828560
+v 16.397337 -28.564894 3.731530
+v -31.191967 8.292224 5.728367
+v -31.209370 8.452016 5.544243
+v -31.576435 8.630017 4.308463
+v -31.301538 8.447924 5.290598
+v -31.539131 8.285417 4.686604
+v -31.265415 8.327768 5.493317
+v -32.648876 8.522811 1.253858
+v -32.347366 8.922299 1.807730
+v -32.901524 8.770088 0.395821
+v -32.810307 8.855641 0.587273
+v 16.081701 27.847929 6.105557
+v 16.070215 27.891241 6.000001
+v 16.075785 27.853416 6.099576
+v 16.065851 27.920950 5.921777
+v 16.119154 27.863037 5.999999
+v 16.076696 27.928080 5.889195
+v 16.119154 27.863037 5.999998
+v 16.119154 27.863037 5.999998
+v 16.071173 27.929892 5.890532
+v -23.479191 23.479191 2.957707
+v 23.119791 23.253139 4.165822
+v 23.168081 23.168081 4.281390
+v 23.206291 23.041174 4.423834
+v -8.839395 32.896606 0.364199
+v -8.819716 32.915627 0.333727
+v -8.805147 32.924362 0.313215
+v 23.843620 23.693260 1.684916
+v 23.747229 23.747229 1.817281
+v 23.651264 23.775299 1.926975
+v 31.155291 8.348036 5.816602
+v 31.153770 8.349722 5.818904
+v 31.156271 8.346292 5.814346
+v 16.803560 -29.295916 1.210371
+v 16.999676 -29.272404 0.980460
+v 16.912903 -29.294006 1.088750
+v 16.957306 29.370914 0.821577
+v -16.999676 29.272404 0.980463
+v -16.875769 29.126413 1.560819
+v -16.750626 29.115606 1.777344
+v -16.803560 29.295916 1.210373
+v -16.624832 28.961197 2.356310
+v -16.812471 28.933344 2.142547
+v 31.301538 -8.447924 5.290597
+v 31.265415 -8.327768 5.493316
+v 32.347366 -8.922299 1.807729
+v 32.648876 -8.522812 1.253858
+v 32.901520 -8.770088 0.395820
+v 32.810307 -8.855641 0.587272
+v 32.527340 8.715674 1.543116
+v 8.551594 -31.577026 4.397873
+v 8.461222 -31.577707 4.500908
+v 8.378650 -31.559589 4.588124
+v -28.220474 16.134340 5.002526
+v -28.121042 16.235691 5.163588
+v -28.023624 16.298473 5.282138
+v 8.378779 -31.205729 5.639497
+v 8.361535 -31.205673 5.659677
+v 8.349133 -31.202835 5.673126
+v 16.235691 28.121044 5.163587
+v 0.000000 -33.342262 2.543510
+v 8.805147 -32.924362 0.313212
+v 8.819716 -32.915627 0.333724
+v 8.839395 -32.896606 0.364196
+v 23.762354 -23.618336 2.018964
+v 23.654570 -23.840755 1.763284
+v 23.490801 -23.472525 2.942065
+v 23.483528 -23.464962 2.973548
+v 23.480330 -23.506895 2.888903
+v 23.469233 -23.496426 2.934606
+v 23.403141 -23.433125 3.209089
+v 23.441616 -23.421814 3.154151
+v 23.414307 -23.441185 3.169056
+v 23.446449 -23.428028 3.131036
+v 23.195976 -23.359022 3.770179
+v 23.429825 -23.298418 3.410486
+v 23.398354 -23.422537 3.243425
+v 23.433105 -23.415970 3.185438
+v 16.079144 27.849892 6.105557
+v 8.336682 -31.056925 6.105555
+v 8.646273 -32.567665 1.449279
+v 8.789963 -32.457184 1.653531
+v 8.715674 -32.527340 1.543115
+v -33.340393 -0.001583 2.548500
+v -33.341290 0.002721 2.545361
+v -29.272404 -16.999676 0.980461
+v -29.126413 -16.875769 1.560817
+v -29.115606 -16.750626 1.777342
+v -29.295916 -16.803562 1.210371
+v -28.961197 -16.624832 2.356308
+v -28.933344 -16.812471 2.142545
+v -28.231052 -16.471296 4.463518
+v -28.440899 -16.248695 4.251761
+v -28.247019 -16.206669 4.844117
+v -28.105307 -16.317417 5.050499
+v 16.471296 -28.231052 4.463517
+v 16.248695 -28.440899 4.251760
+v 16.206669 -28.247019 4.844116
+v 16.317417 -28.105307 5.050498
+v 8.452016 31.209370 5.544244
+v 8.362275 31.208433 5.651081
+v 8.292224 31.191967 5.728368
+v 8.630017 31.576435 4.308464
+v 8.461222 31.577707 4.500911
+v 8.285417 31.539131 4.686604
+v 8.567613 32.613373 1.342929
+v 8.715674 32.527340 1.543117
+v 8.854167 32.396549 1.748961
+v -23.747229 23.747229 1.817281
+v 0.000000 -32.998726 3.577048
+v 23.433125 23.403141 3.209091
+v 23.421814 23.441616 3.154153
+v 23.479656 23.495363 2.917910
+v 23.510084 23.488697 2.865770
+v 23.431578 23.400635 3.217447
+v 23.420591 23.440800 3.158383
+v 23.130121 23.287868 4.063136
+v 23.246548 23.034935 4.338448
+v 16.270582 -28.181475 4.953645
+v 23.479191 -23.479191 2.957705
+v -31.208433 8.362275 5.651080
+v -32.993473 -8.839745 0.091586
+v -32.993690 -8.840633 0.090584
+v -32.993694 -8.841460 0.089611
+v -8.715674 -32.527340 1.543115
+v -8.461222 -31.577707 4.500908
+v 8.447924 31.301538 5.290599
+v 8.327768 31.265415 5.493318
+v 8.522811 32.648876 1.253860
+v 8.922299 32.347366 1.807731
+v 8.770088 32.901524 0.395822
+v 8.779748 32.938816 0.279793
+v 8.855641 32.810307 0.587274
+v 8.870949 32.864853 0.416585
+v -32.656982 -8.642808 1.181937
+v -32.567665 -8.646273 1.449280
+v -32.534092 -8.857985 1.358923
+v -32.457184 -8.789964 1.653532
+v -33.017162 -8.855669 0.007325
+v -33.019249 -8.856934 -0.000000
+v -33.024342 -8.836506 -0.000000
+v -33.021191 -8.836836 0.009351
+v 31.571060 8.438583 4.529875
+v 31.574804 8.490840 4.474655
+v 31.202734 8.338906 5.677482
+v 31.212276 8.421155 5.571931
+v 31.566483 8.418887 4.551452
+v 31.571413 8.562171 4.401329
+v 31.073523 8.335887 6.059946
+v -0.001310 33.341549 2.545136
+v 0.000000 33.342262 2.543513
+v 0.002002 33.342823 2.541032
+v -23.434809 23.434809 3.146541
+v -8.361535 31.205673 5.659680
+v -16.236792 -28.119339 5.165659
+v -16.235691 -28.121044 5.163584
+v -16.234520 -28.122192 5.161722
+v -8.642808 32.656982 1.181939
+v -8.646273 32.567665 1.449281
+v -8.857985 32.534092 1.358925
+v -8.789963 32.457184 1.653534
+v -8.856934 33.019249 0.000001
+v -8.836506 33.024342 0.000001
+v -8.836836 33.021191 0.009352
+v -8.841460 32.993694 0.089613
+v -8.839745 32.993473 0.091587
+v -8.715674 32.527340 1.543117
+v -31.059111 -8.355994 6.077002
+v -31.156271 -8.346292 5.814345
+v -31.153770 -8.349722 5.818903
+v -31.482367 -8.331332 4.839196
+v -31.559589 -8.378650 4.588125
+v -31.577026 -8.551594 4.397874
+v -31.470112 -8.569500 4.676816
+v -31.205729 -8.378779 5.639498
+v -31.202835 -8.349133 5.673127
+v -31.100445 -8.301598 6.000000
+v -31.091738 -8.294640 6.028952
+v -8.336741 31.056900 6.105557
+v -8.840633 32.993690 0.090586
+v -23.747229 -23.747229 1.817279
+v -16.216204 -28.088137 5.278469
+v -16.216125 -28.086281 5.283420
+v -16.119154 -27.863037 5.999999
+v -16.070223 -27.891237 5.999999
+v -16.076696 -27.928080 5.889193
+v -16.119154 -27.863037 5.999995
+v -29.623487 17.055029 0.000001
+v -29.606934 17.068846 0.030361
+v -29.576092 17.134659 0.000001
+v -29.581617 17.113441 0.025893
+v -29.583488 17.106255 0.034664
+v -27.834942 16.098627 6.105553
+v -27.834940 16.098627 6.105556
+v -27.874298 16.079224 6.037041
+v -27.857689 16.060318 6.105556
+v -27.834942 16.098629 6.105552
+v -27.886692 16.081194 6.000004
+v -27.886692 16.081196 6.000002
+v -27.864290 16.102743 6.027297
+v -29.386606 16.737972 1.032286
+v -29.341803 17.092960 0.641063
+v -29.342411 17.065477 0.690368
+v -29.375141 16.794493 0.998791
+v -27.892050 16.077429 5.989359
+v -27.904545 16.078291 5.953326
+v -27.870129 16.109915 5.999992
+v -27.954571 16.284834 5.473579
+v -28.176268 16.048588 5.226041
+v 8.839745 -32.993473 0.091584
+v 8.840633 -32.993690 0.090583
+v 8.841460 -32.993694 0.089610
+v -16.397337 28.564894 3.731532
+v -16.457563 28.505337 3.828562
+v -16.513060 28.418062 3.936157
+v -16.719051 28.958246 2.255170
+v 23.434809 -23.434809 3.146539
+v -16.912903 29.294006 1.088753
+v -23.168081 -23.168081 4.281388
+v -23.479191 -23.479191 2.957705
+v -23.434809 -23.434809 3.146539
+v -16.471296 28.231052 4.463520
+v -16.248695 28.440899 4.251763
+v -28.958246 -16.719051 2.255168
+v 27.864288 -16.102741 6.027306
+v 27.874300 -16.079227 6.037031
+v 28.220474 -16.134340 5.002526
+v 28.023624 -16.298473 5.282137
+v 29.581617 -17.113441 0.025892
+v 29.576092 -17.134659 -0.000001
+v 29.606934 -17.068846 0.030360
+v 29.623487 -17.055029 -0.000001
+v 29.583488 -17.106255 0.034662
+v 29.341803 -17.092960 0.641062
+v 29.386606 -16.737972 1.032283
+v 29.388098 -17.119282 0.480985
+v 29.465448 -16.784531 0.757178
+v -29.294006 -16.912903 1.088751
+v -32.995922 0.005188 3.583439
+v -32.998726 -0.000000 3.577049
+v -32.999680 -0.003427 3.572828
+v 8.346292 -31.156271 5.814344
+v 8.349722 -31.153770 5.818902
+v 8.356001 -31.059011 6.077270
+v 8.331332 -31.482367 4.839195
+v 8.569499 -31.470112 4.676816
+v 8.301598 -31.100445 5.999999
+v -17.090052 -29.606749 0.006255
+v -17.095329 -29.603302 0.007141
+v -17.101534 -29.601509 -0.000001
+v -17.097425 -29.602697 0.004729
+v -17.087418 -29.610071 -0.000001
+v 28.181475 16.270582 4.953647
+v 8.348036 -31.155291 5.816600
+v -32.527340 -8.715674 1.543116
+v -31.577707 -8.461222 4.500909
+v -27.849892 16.079144 6.105556
+v -28.181475 -16.270582 4.953646
+v -29.370914 16.957304 0.821577
+v 8.642808 -32.656982 1.181936
+v 8.857985 -32.534092 1.358922
+v 8.836506 -33.024342 -0.000001
+v 8.836836 -33.021191 0.009349
+v 8.856934 -33.019249 -0.000001
+v -0.001583 33.340393 2.548502
+v 0.002721 33.341290 2.545362
+v 16.624832 -28.961197 2.356308
+v 16.812471 -28.933344 2.142545
+v 16.719051 -28.958246 2.255167
+v -31.155291 -8.348036 5.816601
+v -8.362275 -31.208433 5.651078
+v 28.121042 -16.235691 5.163587
+v -31.577707 8.461222 4.500910
+v -31.205673 -8.361535 5.659678
+v -8.348036 31.155291 5.816603
+v 16.750626 -29.115606 1.777341
+v 16.875769 -29.126413 1.560817
+v 8.819500 32.914822 0.336237
+v 16.081253 27.886669 6.000001
+v -8.324093 31.097485 6.000001
+v -31.097485 -8.324093 6.000000
+v 8.324093 -31.097485 5.999999
+v -8.339724 31.081808 6.032264
+v -31.081987 -8.339632 6.031866
+v 8.313496 -31.079536 6.058191
+v 8.339686 -31.081882 6.032098
+v 29.709480 18.847223 0.000001
+v 14.178293 -32.200939 -0.000001
+v 4.070985 -34.909184 -0.000002
+v 26.297338 -22.879576 -0.000001
+v 1.828337 34.944408 0.000002
+v 34.977299 3.816775 0.000000
+v 30.153938 -18.134678 -0.000001
+v 34.909184 4.070985 0.000000
+v 27.176619 -22.000296 -0.000001
+v -32.760918 -12.803086 -0.000001
+v -26.514599 21.577520 0.000001
+v -12.630868 32.230885 0.000001
+v -33.648815 8.774744 0.000000
+v 32.325584 13.713099 0.000001
+v 33.582722 9.021412 0.000000
+v 29.051224 -18.569576 -0.000001
+v 29.323774 -18.767595 -0.000001
+v 13.728185 -32.321545 -0.000001
+v 32.321545 13.728185 0.000001
+v -13.986683 31.190529 0.000001
+v 12.522712 -31.898014 -0.000001
+v 12.745849 -32.584759 -0.000001
+v 31.176914 14.252145 0.000001
+v 31.638048 14.497334 0.000001
+v 23.565895 -25.611019 -0.000001
+v 34.473953 -7.043487 -0.000000
+v 28.875216 -18.303024 -0.000001
+v 22.163654 -27.013260 -0.000001
+v 32.200939 14.178293 0.000001
+v 25.611019 23.565895 0.000001
+v 13.472495 31.585079 0.000001
+v 22.879576 26.297338 0.000001
+v 13.713099 -32.325584 -0.000001
+v 29.913349 -18.523386 -0.000001
+v 30.051022 -18.301682 -0.000001
+v 22.000296 27.176619 0.000001
+v 3.816775 -34.977299 -0.000002
+v 27.013260 22.163654 0.000001
+v -34.090584 2.488398 0.000000
+v -34.134113 1.865886 0.000000
+v -23.565895 25.611019 0.000001
+v -7.043487 -34.473953 -0.000002
+v 30.300497 -17.884617 -0.000001
+v -6.814305 -33.736481 -0.000001
+v -6.915583 -34.457115 -0.000002
+v 3.052778 34.237476 0.000001
+v -7.897556 -34.185177 -0.000001
+v -22.163654 27.013260 0.000001
+v 32.584759 12.745849 0.000001
+v 31.898014 12.522712 0.000001
+v -34.158230 6.873578 0.000000
+v -32.249062 -13.689646 -0.000001
+v 12.407224 32.402493 0.000001
+v -32.325584 13.713099 0.000001
+v 34.457115 -6.915583 -0.000000
+v 7.807492 -33.907990 -0.000001
+v 9.021412 -33.582722 -0.000001
+v -29.194424 -18.980436 -0.000001
+v 29.214794 -17.741682 -0.000001
+v -7.886552 -34.180618 -0.000001
+v -31.748758 -14.556199 -0.000001
+v 14.497334 -31.638048 -0.000001
+v -29.821972 -17.893490 -0.000001
+v -26.297338 22.879576 0.000001
+v -32.249748 -13.688458 -0.000001
+v -34.141750 -8.494395 -0.000000
+v -26.639544 21.481647 0.000001
+v -27.176619 22.000296 0.000001
+v 33.907990 7.807492 0.000000
+v -33.517254 -7.680535 -0.000000
+v -8.056948 -34.251198 -0.000001
+v 31.176914 14.018390 0.000001
+v -32.643940 12.524986 0.000001
+v 29.342438 19.059135 0.000001
+v -34.630878 1.784273 0.000000
+v -34.266884 1.733117 0.000000
+vn 0.9416 0.1242 0.3130
+vn 0.8775 0.3632 0.3130
+vn 0.5782 0.7535 0.3129
+vn 0.3633 0.8775 0.3130
+vn -0.1240 0.9416 0.3130
+vn -0.3635 0.8775 0.3130
+vn -0.7535 0.5782 0.3130
+vn -0.8775 0.3635 0.3129
+vn -0.9416 -0.1240 0.3130
+vn -0.8775 -0.3634 0.3130
+vn -0.5782 -0.7535 0.3129
+vn -0.3634 -0.8775 0.3130
+vn 0.1240 -0.9416 0.3130
+vn 0.3634 -0.8775 0.3130
+vn 0.7535 -0.5782 0.3130
+vn 0.8775 -0.3635 0.3129
+vn -0.9417 -0.1238 -0.3130
+vn -0.9416 -0.1241 -0.3130
+vn -0.9416 -0.1240 -0.3130
+vn -0.8775 -0.3634 -0.3130
+vn -0.8776 -0.3632 -0.3130
+vn -0.8775 -0.3635 -0.3130
+vn -0.8776 -0.3631 -0.3129
+vn -0.8774 -0.3635 -0.3130
+vn -0.7535 -0.5782 -0.3130
+vn -0.5782 -0.7535 -0.3130
+vn -0.5782 -0.7536 -0.3127
+vn -0.3634 -0.8775 -0.3130
+vn -0.3636 -0.8774 -0.3131
+vn -0.3633 -0.8774 -0.3134
+vn -0.3635 -0.8775 -0.3130
+vn -0.1232 -0.9417 -0.3130
+vn -0.1240 -0.9416 -0.3130
+vn 0.1238 -0.9417 -0.3130
+vn 0.1240 -0.9416 -0.3130
+vn 0.1238 -0.9414 -0.3137
+vn 0.1223 -0.9418 -0.3131
+vn 0.3635 -0.8775 -0.3130
+vn 0.3635 -0.8774 -0.3130
+vn 0.5782 -0.7535 -0.3130
+vn 0.7535 -0.5782 -0.3130
+vn 0.8775 -0.3635 -0.3130
+vn 0.8775 -0.3634 -0.3130
+vn 0.9416 -0.1243 -0.3130
+vn 0.9416 -0.1239 -0.3130
+vn 0.9416 -0.1240 -0.3130
+vn 0.9419 0.1217 -0.3131
+vn 0.9416 0.1247 -0.3129
+vn 0.9417 0.1236 -0.3130
+vn 0.9416 0.1240 -0.3130
+vn 0.9416 0.1239 -0.3130
+vn 0.8774 0.3636 -0.3129
+vn 0.8775 0.3635 -0.3130
+vn 0.8775 0.3634 -0.3130
+vn 0.8774 0.3637 -0.3128
+vn 0.8774 0.3635 -0.3130
+vn 0.7535 0.5782 -0.3130
+vn 0.7535 0.5781 -0.3130
+vn 0.5781 0.7538 -0.3124
+vn 0.5782 0.7535 -0.3130
+vn 0.5785 0.7532 -0.3131
+vn 0.5782 0.7535 -0.3129
+vn 0.3635 0.8775 -0.3130
+vn 0.3636 0.8774 -0.3130
+vn 0.3634 0.8775 -0.3130
+vn 0.1232 0.9417 -0.3130
+vn 0.1240 0.9416 -0.3130
+vn -0.1240 0.9416 -0.3130
+vn -0.1238 0.9417 -0.3129
+vn -0.1238 0.9414 -0.3137
+vn -0.1224 0.9418 -0.3131
+vn -0.3635 0.8775 -0.3130
+vn -0.3636 0.8774 -0.3129
+vn -0.5782 0.7535 -0.3130
+vn -0.7535 0.5782 -0.3130
+vn -0.8775 0.3635 -0.3130
+vn -0.8775 0.3634 -0.3130
+vn -0.9416 0.1240 -0.3130
+vn -0.9416 0.1239 -0.3130
+vn 0.0676 0.9463 0.3161
+vn 0.1335 0.9398 0.3144
+vn 0.1233 0.9388 0.3218
+vn 0.0654 0.9462 0.3168
+vn 0.0652 0.9444 0.3222
+vn 0.0658 0.9470 0.3146
+vn -0.7764 -0.0000 0.6303
+vn -0.4834 -0.7806 0.3962
+vn 0.0000 0.0000 1.0000
+vn -0.3550 0.8461 0.3977
+vn 0.1068 0.7597 -0.6415
+vn -0.5434 0.7784 0.3143
+vn 0.1261 0.8971 0.4234
+vn -0.6382 0.5864 0.4988
+vn 0.8048 0.5032 0.3149
+vn 0.0266 0.9514 -0.3069
+vn 0.0659 0.9470 -0.3145
+vn 0.4126 -0.8532 0.3190
+vn 0.4549 -0.8316 0.3184
+vn 0.4463 -0.8362 0.3186
+vn 0.3667 -0.8742 0.3183
+vn 0.4028 -0.8590 0.3160
+vn 0.3553 0.8802 -0.3145
+vn 0.3627 0.8770 -0.3151
+vn 0.3556 0.8820 -0.3093
+vn 0.3525 0.8816 -0.3139
+vn 0.3500 0.8840 -0.3099
+vn -0.7159 -0.4664 0.5196
+vn -0.6398 -0.7030 0.3105
+vn 0.0000 -0.7671 -0.6415
+vn -0.1608 -0.9349 -0.3163
+vn -0.1701 -0.8031 0.5711
+vn -0.1375 -0.7995 0.5847
+vn -0.4599 -0.6623 0.5914
+vn -0.9245 -0.2306 -0.3035
+vn -0.9264 -0.2057 -0.3152
+vn -0.4037 -0.8603 0.3112
+vn -0.7916 -0.1758 0.5851
+vn -0.7886 -0.1952 0.5831
+vn -0.9116 -0.2663 -0.3132
+vn 0.0000 0.7764 0.6303
+vn -0.6895 0.3363 0.6415
+vn 0.1068 0.7597 0.6415
+vn 0.0000 -0.7671 0.6415
+vn 0.2405 0.7401 -0.6280
+vn 0.7664 0.1351 -0.6280
+vn -0.4509 -0.6206 0.6415
+vn 0.4509 0.6206 0.6415
+vn -0.1089 -0.7747 0.6229
+vn -0.0000 -0.4342 0.9008
+vn -0.7151 -0.3790 0.5874
+vn -0.0000 -0.7823 0.6229
+vn -0.4234 -0.3611 0.8309
+vn -0.2438 -0.4359 0.8663
+vn 0.4509 0.6206 -0.6415
+vn -0.1086 -0.7728 -0.6253
+vn -0.1068 -0.7597 0.6415
+vn -0.1068 -0.7597 -0.6415
+vn -0.6206 0.4509 0.6415
+vn -0.4829 -0.8174 -0.3142
+vn -0.5202 -0.7936 -0.3156
+vn -0.1144 -0.8048 0.5824
+vn -0.4446 -0.6783 0.5850
+vn -0.4222 -0.7059 0.5687
+vn -0.4813 -0.8181 -0.3146
+vn 0.7401 -0.2405 -0.6280
+vn 0.3601 -0.6773 -0.6415
+vn 0.2027 0.8949 0.3977
+vn 0.6116 -0.6848 0.3962
+vn 0.7071 0.0000 0.7071
+vn -0.3363 -0.6895 0.6415
+vn 0.0000 -0.7804 -0.6253
+vn -0.6296 -0.4574 -0.6280
+vn 0.2371 0.7296 0.6415
+vn 0.2371 0.7296 -0.6415
+vn -0.9469 0.0659 0.3148
+vn -0.9450 0.0664 0.3202
+vn -0.9454 0.0632 0.3197
+vn -0.9451 0.0653 0.3201
+vn -0.9465 0.0677 0.3156
+vn -0.9470 0.0652 0.3145
+vn 0.6561 -0.6839 0.3190
+vn 0.6531 -0.6870 0.3186
+vn 0.6870 -0.6515 0.3218
+vn 0.6824 -0.6576 0.3193
+vn 0.6191 -0.7186 0.3168
+vn 0.6472 -0.6925 0.3188
+vn -0.6220 0.5211 0.5844
+vn 0.0228 0.9498 0.3121
+vn -0.7271 0.6091 -0.3169
+vn -0.9313 -0.1881 0.3119
+vn 0.1701 0.8031 0.5711
+vn 0.1717 0.9333 -0.3153
+vn 0.2261 0.9236 -0.3096
+vn -0.1560 0.7987 0.5811
+vn 0.1924 0.7860 0.5876
+vn 0.2644 0.9112 -0.3159
+vn 0.2256 0.9202 -0.3199
+vn 0.1752 0.9320 -0.3172
+vn 0.1924 0.9283 -0.3182
+vn 0.0000 0.0000 -1.0000
+vn -0.7728 0.1086 -0.6252
+vn -0.8180 -0.1973 0.5404
+vn -0.8276 -0.4666 0.3119
+vn -0.2371 -0.7296 -0.6415
+vn -0.7118 -0.5811 0.3946
+vn -0.7597 0.1068 0.6415
+vn -0.8039 -0.5033 0.3168
+vn -0.8363 -0.4457 0.3193
+vn -0.8319 -0.4521 0.3218
+vn -0.0904 0.0132 0.9958
+vn -0.5109 0.6928 0.5089
+vn -0.2399 -0.7384 0.6303
+vn -0.2412 -0.7422 -0.6253
+vn -0.3601 0.6773 -0.6415
+vn -0.3835 -0.3129 0.8689
+vn -0.2782 -0.4797 0.8322
+vn -0.7646 -0.1348 0.6303
+vn -0.2328 -0.7720 0.5914
+vn 0.0865 0.8231 0.5612
+vn -0.1881 0.9313 0.3119
+vn -0.6206 0.4509 -0.6415
+vn -0.3177 0.8629 0.3930
+vn -0.2371 -0.7296 0.6415
+vn -0.8802 0.3553 -0.3145
+vn -0.8770 0.3627 -0.3150
+vn -0.8807 0.3533 -0.3154
+vn -0.8828 0.3497 -0.3136
+vn 0.0409 -0.8071 0.5890
+vn 0.0758 -0.8169 0.5718
+vn 0.0480 -0.9478 -0.3154
+vn 0.3819 -0.7178 0.5822
+vn 0.0410 -0.8099 0.5851
+vn -0.0070 -0.9489 -0.3155
+vn 0.9452 0.0789 0.3168
+vn 0.9416 0.1161 0.3161
+vn 0.9392 0.1266 0.3191
+vn 0.7555 0.1332 0.6415
+vn -0.3129 0.3835 0.8689
+vn -0.4797 0.2782 0.8322
+vn -0.1348 0.7646 0.6303
+vn -0.7719 0.2340 0.5911
+vn -0.7555 -0.1332 -0.6415
+vn -0.1351 0.7664 -0.6280
+vn 0.6773 0.3601 -0.6415
+vn -0.4126 0.8532 0.3190
+vn -0.4521 0.8319 0.3218
+vn -0.4457 0.8363 0.3193
+vn -0.3664 0.8738 0.3198
+vn -0.4028 0.8590 0.3160
+vn 0.3363 0.6895 0.6415
+vn -0.4381 -0.2012 0.8761
+vn -0.7972 0.1259 0.5905
+vn -0.4598 -0.6329 0.6229
+vn -0.5525 -0.0217 0.8332
+vn 0.6382 -0.5864 0.4988
+vn 0.3551 -0.8461 0.3977
+vn 0.5398 -0.7818 0.3121
+vn 0.3363 0.6895 -0.6415
+vn -0.8170 -0.0751 0.5718
+vn -0.8031 -0.1148 0.5847
+vn -0.9391 -0.1343 -0.3163
+vn -0.6773 -0.3601 -0.6415
+vn 0.5329 0.5518 0.6415
+vn 0.6908 0.3673 0.6229
+vn 0.0874 0.0306 0.9957
+vn -0.2412 0.7422 -0.6253
+vn 0.2021 -0.5167 0.8320
+vn -0.4210 -0.3632 0.8312
+vn -0.1359 0.7704 0.6229
+vn 0.2405 -0.7401 -0.6280
+vn 0.7274 -0.6099 -0.3145
+vn 0.2800 -0.8616 0.4234
+vn 0.2371 -0.7296 -0.6415
+vn -0.2027 -0.8949 0.3977
+vn -0.5267 -0.6883 0.4988
+vn -0.5811 0.7118 0.3946
+vn 0.0304 -0.0877 0.9957
+vn 0.2230 0.4782 0.8495
+vn 0.0632 0.9454 0.3197
+vn 0.0659 0.9469 0.3148
+vn 0.0652 0.9451 0.3201
+vn 0.0678 0.9465 0.3156
+vn 0.0653 0.9470 0.3145
+vn 0.0640 0.9466 0.3158
+vn 0.0663 0.9450 0.3203
+vn 0.5033 -0.8039 0.3168
+vn -0.0132 -0.0904 0.9958
+vn -0.6928 -0.5109 0.5089
+vn -0.3366 0.8877 0.3141
+vn -0.3310 0.8894 0.3153
+vn -0.3348 0.8876 0.3163
+vn -0.3372 0.8879 0.3129
+vn -0.3304 0.8885 0.3185
+vn -0.3343 0.8873 0.3177
+vn -0.3385 0.8869 0.3145
+vn 0.7422 0.2412 -0.6252
+vn 0.0049 0.0000 1.0000
+vn 0.0757 -0.0100 0.9971
+vn 0.8801 -0.3553 0.3148
+vn 0.8783 -0.3549 0.3202
+vn 0.8796 -0.3523 0.3197
+vn 0.8791 -0.3539 0.3192
+vn 0.8793 -0.3570 0.3154
+vn 0.8814 -0.3543 0.3123
+vn -0.0676 -0.9463 0.3161
+vn -0.1322 -0.9399 0.3148
+vn -0.1208 -0.9402 0.3184
+vn -0.0654 -0.9462 0.3168
+vn -0.0662 -0.9478 0.3120
+vn 0.0458 -0.9483 0.3141
+vn 0.1177 -0.9414 0.3160
+vn 0.0801 -0.9446 0.3185
+vn 0.0399 -0.9481 0.3153
+vn 0.0441 -0.9476 0.3163
+vn 0.0397 -0.9471 0.3185
+vn 0.1168 -0.4684 0.8758
+vn -0.5804 -0.7553 0.3043
+vn 0.2283 -0.9158 -0.3303
+vn 0.1217 -0.5358 0.8355
+vn 0.2101 -0.9250 -0.3166
+vn 0.8593 -0.4028 0.3153
+vn 0.1797 -0.7912 0.5845
+vn 0.2633 -0.9110 -0.3174
+vn 0.3419 -0.9117 -0.2279
+vn 0.9481 0.0480 0.3142
+vn 0.9480 0.0423 0.3153
+vn 0.9498 0.0458 0.3096
+vn 0.9475 0.0463 0.3163
+vn 0.9470 0.0419 0.3185
+vn -0.8797 0.3546 0.3168
+vn -0.8526 0.4141 0.3187
+vn -0.8569 0.4054 0.3185
+vn -0.3830 -0.7717 0.5078
+vn -0.0875 -0.0306 0.9957
+vn -0.8223 -0.4702 -0.3205
+vn -0.7980 -0.5132 -0.3160
+vn -0.1043 -0.9448 0.3105
+vn -0.8972 0.3101 0.3145
+vn -0.6116 0.6848 0.3962
+vn 0.2412 0.7422 -0.6253
+vn -0.0777 0.5454 0.8345
+vn -0.0509 -0.1362 0.9894
+vn -0.2371 0.7296 -0.6415
+vn -0.2371 0.7296 0.6415
+vn 0.5329 0.5518 -0.6415
+vn 0.6293 0.6516 0.4235
+vn -0.2282 0.7956 0.5612
+vn 0.1630 0.9050 0.3930
+vn -0.2405 0.7401 -0.6280
+vn -0.1332 0.7555 0.6415
+vn -0.6895 0.3363 -0.6415
+vn -0.2399 0.7384 0.6303
+vn -0.1217 -0.0324 0.9920
+vn -0.1190 -0.0297 0.9925
+vn -0.7271 0.6091 0.3167
+vn -0.6824 0.6576 0.3193
+vn -0.6870 0.6515 0.3218
+vn 0.0073 0.1208 0.9926
+vn 0.0536 -0.0462 0.9975
+vn 0.4563 0.6281 0.6303
+vn -0.2628 -0.4091 0.8738
+vn -0.1055 -0.5427 0.8333
+vn -0.6855 -0.3645 0.6303
+vn 0.0041 -0.8138 0.5811
+vn -0.3796 -0.2018 0.9029
+vn -0.4587 -0.6314 -0.6253
+vn 0.4574 0.6296 -0.6280
+vn -0.4509 -0.6206 -0.6415
+vn -0.2418 -0.7440 0.6229
+vn -0.5167 -0.2020 0.8320
+vn -0.3606 -0.3328 0.8713
+vn -0.7987 -0.1560 0.5811
+vn -0.6773 -0.3601 0.6415
+vn 0.1677 0.9328 0.3190
+vn 0.2171 0.9223 0.3198
+vn 0.1790 0.9317 0.3160
+vn -0.7664 -0.1351 -0.6280
+vn 0.3601 -0.6773 0.6415
+vn 0.5518 -0.5329 0.6415
+vn 0.8802 -0.3553 -0.3145
+vn 0.8820 -0.3557 -0.3093
+vn 0.8796 -0.3561 -0.3156
+vn 0.8816 -0.3525 -0.3140
+vn -0.6839 -0.6561 0.3190
+vn -0.6515 -0.6870 0.3218
+vn -0.6576 -0.6824 0.3193
+vn -0.7186 -0.6191 0.3168
+vn -0.6924 -0.6475 0.3184
+vn 0.8071 0.0409 0.5890
+vn 0.8169 0.0758 0.5718
+vn 0.9408 0.1215 -0.3163
+vn 0.9478 0.0480 -0.3154
+vn 0.9415 0.1166 -0.3163
+vn 0.9441 0.0933 -0.3162
+vn 0.7178 0.3819 0.5822
+vn 0.8099 0.0410 0.5851
+vn 0.9489 -0.0070 -0.3155
+vn -0.5393 -0.5585 0.6303
+vn 0.2629 -0.7633 0.5901
+vn -0.2987 -0.3093 0.9029
+vn -0.1211 -0.4621 0.8785
+vn 0.0777 -0.5454 0.8345
+vn 0.4050 -0.8581 -0.3157
+vn 0.3353 -0.8875 -0.3163
+vn 0.3182 -0.7567 0.5711
+vn 0.3462 -0.7335 0.5849
+vn 0.6568 -0.6850 -0.3150
+vn 0.6585 -0.6821 -0.3180
+vn 0.5402 -0.6190 0.5701
+vn 0.5638 -0.5841 0.5840
+vn 0.6748 -0.6671 -0.3156
+vn -0.5403 0.6189 0.5701
+vn -0.6483 0.6920 -0.3177
+vn -0.5942 0.7399 -0.3154
+vn -0.6440 0.6970 -0.3153
+vn -0.6274 0.7120 -0.3155
+vn -0.7300 0.3574 0.5825
+vn -0.5078 0.6323 0.5851
+vn -0.5056 0.6295 0.5900
+vn -0.2826 -0.4810 0.8299
+vn -0.5427 0.1055 0.8333
+vn 0.0000 -0.7782 -0.6280
+vn 0.6206 -0.4509 0.6415
+vn -0.7422 -0.2412 -0.6252
+vn -0.8292 -0.4651 -0.3102
+vn -0.7976 -0.5141 -0.3155
+vn -0.7296 0.2371 -0.6415
+vn -0.3601 0.6773 0.6415
+vn 0.3664 -0.6891 -0.6253
+vn -0.3653 0.6871 -0.6280
+vn 0.6895 -0.3363 0.6415
+vn 0.4509 -0.6206 0.6415
+vn 0.1211 0.4621 0.8785
+vn 0.5393 0.5585 0.6303
+vn -0.2630 0.7632 0.5902
+vn 0.2987 0.3093 0.9029
+vn -0.5435 -0.5628 0.6229
+vn 0.5406 0.5598 -0.6280
+vn -0.3363 -0.6895 -0.6415
+vn -0.7296 -0.2371 0.6415
+vn -0.7671 -0.0000 0.6415
+vn 0.1359 -0.7704 0.6229
+vn -0.8019 0.4486 0.3946
+vn 0.0904 -0.0132 0.9958
+vn 0.5032 -0.8048 0.3149
+vn 0.5018 -0.8035 0.3202
+vn 0.5045 -0.8021 0.3196
+vn -0.9160 0.2495 0.3142
+vn -0.9317 0.1790 0.3160
+vn -0.9239 0.2178 0.3145
+vn -0.9141 0.2550 0.3153
+vn -0.9149 0.2509 0.3163
+vn -0.9165 0.2475 0.3145
+vn 0.6827 0.6593 -0.3151
+vn 0.7112 0.6282 -0.3155
+vn 0.6958 0.6453 -0.3153
+vn 0.6709 0.6710 -0.3157
+vn 0.6821 0.6585 -0.3180
+vn 0.6920 0.6482 -0.3177
+vn 0.6190 0.5403 0.5701
+vn 0.5840 0.5638 0.5840
+vn 0.7633 0.2629 0.5901
+vn -0.5839 0.5655 0.5824
+vn -0.7440 -0.2418 0.6229
+vn -0.4810 0.2826 0.8299
+vn -0.4987 0.0978 0.8612
+vn -0.4130 -0.1342 0.9008
+vn 0.1394 -0.1497 0.9789
+vn 0.6978 -0.3403 0.6303
+vn 0.6421 0.4878 0.5915
+vn 0.3864 -0.1885 0.9029
+vn 0.4684 0.0269 0.8831
+vn 0.7296 0.2371 -0.6415
+vn 0.6206 0.4509 0.6415
+vn 0.9372 -0.1436 0.3180
+vn 0.9403 -0.1190 0.3187
+vn 0.9430 -0.1119 0.3135
+vn 0.9255 -0.2056 0.3182
+vn 0.9357 -0.1585 0.3152
+vn -0.0338 -0.0630 0.9974
+vn 0.0085 0.1027 0.9947
+vn 0.1627 -0.1090 0.9806
+vn 0.7408 0.5926 0.3162
+vn 0.6925 0.6472 0.3188
+vn 0.7186 0.6191 0.3168
+vn 0.1362 -0.0509 0.9894
+vn 0.3546 0.8797 -0.3169
+vn -0.4666 0.8276 0.3119
+vn 0.9103 0.2718 0.3121
+vn 0.3537 0.8779 -0.3227
+vn 0.3548 0.8813 -0.3120
+vn -0.6708 0.4561 0.5847
+vn -0.6933 0.4383 0.5720
+vn -0.7899 0.5256 -0.3158
+vn -0.7845 0.5335 -0.3162
+vn -0.7921 0.5229 -0.3149
+vn -0.8010 0.5102 -0.3133
+vn 0.0150 0.9463 -0.3228
+vn 0.0559 0.8095 0.5845
+vn 0.7818 0.5398 0.3121
+vn 0.0654 0.9462 -0.3169
+vn -0.6996 0.6429 0.3119
+vn -0.5518 0.5329 -0.6415
+vn -0.4253 0.7999 0.4234
+vn -0.8398 0.0522 0.5404
+vn -0.7555 -0.1332 0.6415
+vn -0.4509 0.6206 -0.6415
+vn -0.4574 0.6296 -0.6280
+vn -0.7422 0.2412 -0.6253
+vn 0.1812 -0.4699 0.8639
+vn 0.3632 -0.4210 0.8312
+vn -0.1080 -0.7688 0.6303
+vn 0.6623 -0.4599 0.5914
+vn -0.0598 -0.4257 0.9029
+vn -0.0324 0.1217 0.9920
+vn -0.0297 0.1190 0.9925
+vn 0.6091 0.7271 0.3167
+vn 0.6576 0.6824 0.3193
+vn 0.6515 0.6870 0.3218
+vn 0.1208 -0.0073 0.9926
+vn -0.0462 -0.0536 0.9975
+vn 0.6281 0.4563 0.6303
+vn 0.6281 -0.4563 0.6303
+vn -0.6314 -0.4587 -0.6253
+vn -0.0217 0.5525 0.8332
+vn -0.0100 -0.0757 0.9971
+vn -0.1332 0.7555 -0.6415
+vn -0.6206 -0.4509 -0.6415
+vn -0.5329 -0.5518 -0.6415
+vn 0.5628 -0.5435 0.6229
+vn -0.8082 -0.0409 0.5875
+vn -0.9478 -0.0480 -0.3152
+vn -0.8099 -0.0410 0.5851
+vn -0.6561 0.6839 0.3190
+vn -0.6531 0.6870 0.3186
+vn -0.6191 0.7186 0.3168
+vn -0.6477 0.6924 0.3181
+vn 0.5518 -0.5329 -0.6415
+vn -0.5033 0.8039 0.3168
+vn 0.0132 0.0904 0.9958
+vn 0.6928 0.5109 0.5089
+vn -0.9462 0.0654 0.3168
+vn -0.9399 0.1334 0.3144
+vn -0.9388 0.1233 0.3218
+vn -0.9477 0.0662 0.3121
+vn -0.9466 0.0629 0.3161
+vn -0.9457 0.0674 0.3180
+vn 0.8532 0.4126 0.3190
+vn 0.8316 0.4549 0.3184
+vn 0.8362 0.4463 0.3186
+vn 0.8791 0.3567 0.3163
+vn 0.8602 0.4003 0.3159
+vn -0.0000 0.7671 0.6415
+vn 0.4486 0.8019 0.3946
+vn 0.3101 0.8972 0.3145
+vn 0.0522 0.8398 0.5404
+vn -0.9448 0.1043 0.3105
+vn -0.8355 0.2707 0.4782
+vn 0.9112 -0.2644 -0.3159
+vn 0.9236 -0.2261 -0.3096
+vn 0.7987 0.1560 0.5811
+vn 0.7860 -0.1924 0.5876
+vn 0.8031 -0.1701 0.5711
+vn 0.9202 -0.2256 -0.3199
+vn -0.4418 -0.8395 -0.3163
+vn -0.2063 -0.3920 0.8965
+vn -0.6421 -0.4878 0.5915
+vn -0.3813 -0.7178 0.5826
+vn -0.2684 -0.5053 0.8201
+vn -0.4443 -0.8363 -0.3213
+vn 0.7399 0.5942 -0.3154
+vn 0.3574 0.7300 0.5825
+vn 0.6323 0.5078 0.5851
+vn 0.6295 0.5056 0.5900
+vn -0.3241 0.7552 0.5697
+vn -0.3587 0.7276 0.5847
+vn -0.0172 0.8062 0.5914
+vn -0.4195 0.8509 -0.3163
+vn -0.3795 0.8695 -0.3163
+vn -0.4014 0.8595 -0.3164
+vn -0.4059 0.8574 -0.3164
+vn -0.4621 0.1211 0.8785
+vn -0.5454 -0.0777 0.8345
+vn -0.5585 0.5393 0.6303
+vn -0.7633 -0.2629 0.5901
+vn -0.3093 0.2987 0.9029
+vn -0.7401 -0.2405 -0.6280
+vn 0.5614 -0.5421 -0.6253
+vn -0.5598 0.5406 -0.6280
+vn -0.7587 0.5762 0.3041
+vn -0.7860 0.3350 0.5196
+vn -0.6891 -0.3664 -0.6253
+vn 0.6206 0.4509 -0.6415
+vn -0.6206 -0.4509 0.6415
+vn 0.4651 -0.8292 -0.3102
+vn 0.5140 -0.7976 -0.3155
+vn -0.4117 0.7758 0.4782
+vn 0.3830 0.7717 0.5078
+vn -0.2718 0.9103 0.3121
+vn -0.7273 0.6099 0.3149
+vn -0.7259 0.6112 0.3155
+vn -0.7255 0.6092 0.3202
+vn -0.0764 0.0094 0.9970
+vn -0.0757 0.0100 0.9971
+vn -0.7926 0.5214 0.3163
+vn -0.8295 0.4585 0.3188
+vn -0.1045 -0.0234 0.9943
+vn -0.0409 0.8071 0.5890
+vn -0.0758 0.8169 0.5718
+vn -0.1215 0.9408 -0.3163
+vn -0.0480 0.9478 -0.3154
+vn -0.1166 0.9415 -0.3163
+vn -0.0933 0.9441 -0.3162
+vn -0.3819 0.7178 0.5822
+vn -0.0410 0.8099 0.5851
+vn 0.0070 0.9489 -0.3155
+vn -0.9471 0.0543 -0.3162
+vn -0.8099 0.0465 0.5847
+vn 0.6206 -0.4509 -0.6415
+vn 0.2708 0.8355 0.4782
+vn 0.1043 0.9448 0.3105
+vn 0.7296 -0.2371 0.6415
+vn -0.5614 0.5421 -0.6253
+vn 0.7296 0.2371 0.6415
+vn -0.6099 -0.7273 0.3148
+vn -0.6092 -0.7255 0.3202
+vn -0.6069 -0.7277 0.3195
+vn -0.6082 -0.7267 0.3192
+vn -0.6096 -0.7272 0.3156
+vn 0.7926 -0.5214 0.3163
+vn 0.8295 -0.4585 0.3188
+vn 0.1045 0.0234 0.9943
+vn 0.0764 -0.0094 0.9970
+vn -0.5211 -0.6220 0.5844
+vn -0.9498 0.0228 0.3121
+vn -0.6091 -0.7271 -0.3169
+vn 0.1881 -0.9313 0.3119
+vn -0.6112 -0.7260 -0.3153
+vn -0.6099 -0.7274 -0.3145
+vn -0.6107 -0.7290 -0.3093
+vn -0.9380 0.1442 -0.3151
+vn -0.9302 0.1840 -0.3177
+vn -0.9346 0.1624 -0.3164
+vn -0.9361 0.1579 -0.3143
+vn -0.8042 0.1637 0.5714
+vn -0.8015 0.1232 0.5852
+vn -0.6671 0.4490 0.5945
+vn -0.9236 0.2261 -0.3096
+vn -0.7860 0.1924 0.5876
+vn -0.9112 0.2644 -0.3159
+vn -0.9202 0.2256 -0.3199
+vn 0.2371 -0.7296 0.6415
+vn -0.7296 -0.2371 -0.6415
+vn -0.6281 0.4563 0.6303
+vn 0.5454 0.0777 0.8345
+vn -0.1362 0.0509 0.9894
+vn 0.6314 -0.4587 -0.6253
+vn -0.6296 0.4574 -0.6280
+vn 0.3177 -0.8629 0.3930
+vn -0.9050 0.1630 0.3930
+vn -0.5518 0.5329 0.6415
+vn -0.7956 -0.2282 0.5612
+vn 0.1217 0.0324 0.9920
+vn 0.1190 0.0297 0.9925
+vn 0.7271 -0.6091 0.3167
+vn -0.0073 -0.1208 0.9926
+vn -0.0536 0.0462 0.9975
+vn 0.7384 0.2399 0.6303
+vn 0.7597 -0.1068 0.6415
+vn 0.1288 -0.9390 0.3190
+vn 0.1729 -0.9309 0.3218
+vn 0.1647 -0.9348 0.3148
+vn 0.6895 -0.3363 -0.6415
+vn 0.7782 0.0000 -0.6280
+vn -0.9390 -0.1288 0.3190
+vn -0.9309 -0.1729 0.3218
+vn -0.9351 -0.1634 0.3145
+vn -0.9452 -0.0786 0.3168
+vn -0.9414 -0.1177 0.3160
+vn -0.4563 0.6281 0.6303
+vn 0.7401 0.2405 -0.6280
+vn -0.7706 0.1083 -0.6280
+vn -0.6577 0.6842 -0.3151
+vn -0.6727 0.6692 -0.3157
+vn -0.6586 0.6820 -0.3180
+vn -0.5639 0.5839 0.5840
+vn 0.0100 0.0757 0.9971
+vn 0.0217 -0.5525 0.8332
+vn -0.0420 0.0000 -0.9991
+vn 0.7032 -0.3430 0.6229
+vn 0.0324 -0.1217 0.9920
+vn 0.0297 -0.1190 0.9925
+vn -0.6091 -0.7271 0.3167
+vn -0.1208 0.0073 0.9926
+vn 0.0462 0.0536 0.9975
+vn 0.4587 -0.6314 -0.6253
+vn -0.1812 0.4699 0.8639
+vn -0.3632 0.4210 0.8312
+vn 0.1080 0.7688 0.6303
+vn 0.1351 -0.7664 -0.6280
+vn 0.7014 -0.3421 -0.6253
+vn 0.0000 0.7782 -0.6280
+vn 0.6848 0.6116 0.3962
+vn -0.8948 0.2027 0.3977
+vn -0.7704 -0.1359 0.6229
+vn -0.7686 -0.1355 -0.6253
+vn -0.6883 0.5266 0.4989
+vn -0.8593 0.4028 0.3153
+vn 0.4598 -0.6329 0.6229
+vn -0.1727 -0.7215 0.6705
+vn 0.0552 -0.4703 0.8808
+vn -0.3574 -0.7300 0.5825
+vn 0.9514 -0.0267 -0.3069
+vn 0.9470 -0.0659 -0.3145
+vn 0.1973 -0.8180 0.5404
+vn 0.4666 -0.8276 0.3119
+vn 0.7296 -0.2371 -0.6415
+vn 0.5811 -0.7118 0.3946
+vn -0.8048 -0.5032 0.3148
+vn -0.8035 -0.5018 0.3202
+vn -0.8020 -0.5046 0.3197
+vn -0.8030 -0.5027 0.3201
+vn -0.8056 -0.5015 0.3155
+vn -0.8047 -0.5048 0.3123
+vn 0.9160 -0.2495 0.3142
+vn 0.9141 -0.2550 0.3153
+vn 0.9149 -0.2509 0.3163
+vn 0.9130 -0.2549 0.3185
+vn 0.8292 0.4651 -0.3102
+vn 0.7976 0.5140 -0.3155
+vn 0.6773 0.3601 0.6415
+vn -0.0304 0.0877 0.9957
+vn -0.2230 -0.4782 0.8495
+vn 0.1355 -0.7686 -0.6253
+vn 0.7671 0.0000 0.6415
+vn -0.3553 -0.8801 0.3148
+vn -0.3551 -0.8783 0.3202
+vn -0.3523 -0.8796 0.3197
+vn -0.3541 -0.8787 0.3201
+vn -0.3566 -0.8792 0.3160
+vn -0.3541 -0.8815 0.3125
+vn -0.0458 0.9483 0.3141
+vn -0.1175 0.9418 0.3151
+vn -0.0783 0.9460 0.3145
+vn -0.0399 0.9481 0.3153
+vn -0.0441 0.9476 0.3163
+vn -0.0479 0.9481 0.3145
+vn 0.8972 -0.3101 0.3145
+vn 0.7980 0.5132 -0.3160
+vn 0.8223 0.4702 -0.3205
+vn 0.8797 -0.3546 -0.3169
+vn 0.8276 0.4666 0.3119
+vn 0.2718 -0.9103 0.3121
+vn 0.8809 -0.3522 -0.3162
+vn 0.8780 -0.3537 -0.3227
+vn -0.5046 0.8020 0.3197
+vn -0.5032 0.8048 0.3149
+vn -0.5027 0.8030 0.3201
+vn -0.5015 0.8057 0.3153
+vn -0.5039 0.8045 0.3144
+vn -0.5048 0.8035 0.3156
+vn -0.5018 0.8035 0.3202
+vn -0.6190 -0.5402 0.5701
+vn -0.7399 -0.5942 -0.3154
+vn -0.6323 -0.5078 0.5851
+vn -0.6295 -0.5056 0.5900
+vn 0.4509 -0.6206 -0.6415
+vn -0.4702 0.8223 -0.3205
+vn -0.5132 0.7980 -0.3160
+vn -0.9006 -0.4013 -0.1668
+vn -0.7711 0.3832 0.5085
+vn -0.9103 -0.2718 0.3121
+vn -0.7758 -0.4117 0.4782
+vn -0.7384 0.2399 0.6303
+vn 0.7728 -0.1086 -0.6253
+vn 0.7440 -0.2418 0.6229
+vn 0.3328 -0.3606 0.8713
+vn 0.1560 -0.7987 0.5811
+vn 0.4210 0.3632 0.8312
+vn -0.2020 0.5167 0.8320
+vn -0.7296 0.2371 0.6415
+vn -0.5406 -0.5598 -0.6280
+vn 0.7764 0.0000 0.6303
+vn -0.5628 0.5435 0.6229
+vn -0.7671 0.0000 -0.6415
+vn -0.8797 0.3546 -0.3169
+vn -0.8780 0.3537 -0.3227
+vn -0.8813 0.3548 -0.3120
+vn 0.2628 0.4091 0.8738
+vn 0.1055 0.5427 0.8333
+vn 0.6855 0.3645 0.6303
+vn 0.3796 0.2018 0.9029
+vn -0.1677 -0.9328 0.3190
+vn -0.2156 -0.9233 0.3177
+vn -0.1798 -0.9306 0.3188
+vn 0.7597 -0.1068 -0.6415
+vn 0.8353 -0.4476 0.3191
+vn 0.8569 -0.4054 0.3185
+vn 0.8526 -0.4141 0.3187
+vn 0.1497 0.1394 0.9789
+vn -0.0519 0.0720 0.9961
+vn 0.1309 0.0862 0.9876
+vn -0.4509 0.6206 0.6415
+vn 0.4563 -0.6281 0.6303
+vn -0.3971 -0.8142 0.4235
+vn 0.4117 -0.7758 0.4782
+vn 0.4014 -0.9005 -0.1671
+vn -0.6851 -0.6568 -0.3150
+vn -0.6821 -0.6585 -0.3180
+vn -0.5841 -0.5638 0.5840
+vn -0.6671 -0.6748 -0.3156
+vn -0.6908 -0.3673 0.6229
+vn 0.7747 -0.1089 0.6229
+vn -0.7597 0.1068 -0.6415
+vn -0.5329 -0.5518 0.6415
+vn -0.7014 0.3421 -0.6253
+vn 0.2418 0.7440 0.6229
+vn 0.5167 0.2020 0.8320
+vn 0.3606 0.3328 0.8713
+vn 0.1342 0.4130 0.9008
+vn -0.7806 0.4834 0.3961
+vn 0.8461 0.3551 0.3977
+vn 0.4381 0.2012 0.8761
+vn 0.7972 -0.1259 0.5905
+vn 0.4598 0.6329 0.6229
+vn 0.5525 0.0217 0.8332
+vn -0.7688 0.1080 0.6303
+vn -0.4699 -0.1812 0.8639
+vn -0.6978 0.3403 0.6303
+vn -0.3864 0.1885 0.9029
+vn -0.4684 -0.0269 0.8831
+vn -0.1394 0.1497 0.9789
+vn -0.7747 0.1089 0.6229
+vn 0.7706 -0.1083 -0.6280
+vn -0.9059 -0.0000 0.4234
+vn -0.4664 0.7159 0.5196
+vn 0.7633 0.2746 0.5847
+vn 0.7567 0.3182 0.5711
+vn 0.8875 0.3353 -0.3163
+vn 0.8927 0.3211 -0.3162
+vn 0.8856 0.3400 -0.3163
+vn 0.8767 0.3623 -0.3163
+vn 0.5704 0.5709 0.5905
+vn 0.6099 0.7274 -0.3145
+vn 0.6160 0.7220 -0.3150
+vn 0.6129 0.7270 -0.3096
+vn 0.6069 0.7299 -0.3145
+vn 0.6060 0.7326 -0.3099
+vn 0.4664 -0.7159 0.5196
+vn 0.6996 -0.6429 0.3118
+vn 0.7671 0.0000 -0.6415
+vn 0.7806 -0.4834 0.3962
+vn -0.3421 -0.7014 -0.6253
+vn 0.1332 -0.7555 0.6415
+vn 0.7273 -0.6099 0.3148
+vn 0.7255 -0.6092 0.3202
+vn 0.7277 -0.6068 0.3197
+vn 0.7263 -0.6083 0.3201
+vn 0.7259 -0.6112 0.3155
+vn 0.7288 -0.6094 0.3122
+vn -0.9483 -0.0458 0.3142
+vn -0.9481 -0.0400 0.3153
+vn -0.9476 -0.0441 0.3163
+vn -0.9484 -0.0467 0.3136
+vn 0.3524 0.8796 0.3196
+vn 0.3553 0.8801 0.3149
+vn 0.3566 0.8792 0.3160
+vn 0.3547 0.8805 0.3145
+vn 0.3551 0.8783 0.3202
+vn 0.2495 0.9160 0.3142
+vn 0.2550 0.9141 0.3153
+vn 0.2509 0.9149 0.3163
+vn 0.2491 0.9165 0.3129
+vn 0.2549 0.9130 0.3185
+vn 0.2511 0.9143 0.3178
+vn 0.2475 0.9165 0.3145
+vn 0.9476 -0.0519 0.3152
+vn 0.9458 -0.0524 0.3205
+vn 0.9471 -0.0537 0.3166
+vn 0.9477 -0.0541 0.3146
+vn 0.9482 -0.0555 0.3127
+vn 0.9477 -0.0512 0.3149
+vn 0.7845 -0.5335 -0.3162
+vn 0.6708 -0.4561 0.5847
+vn 0.6943 -0.4367 0.5721
+vn 0.7903 -0.5250 -0.3158
+vn -0.3546 -0.8797 -0.3169
+vn -0.3539 -0.8780 -0.3222
+vn -0.3537 -0.8779 -0.3227
+vn -0.2644 -0.9112 -0.3159
+vn -0.2261 -0.9236 -0.3096
+vn -0.1924 -0.7860 0.5876
+vn -0.2256 -0.9202 -0.3199
+vn -0.8461 -0.3550 0.3977
+vn -0.7818 -0.5398 0.3121
+vn -0.8971 0.1261 0.4234
+vn -0.5864 -0.6382 0.4988
+vn 0.4342 0.0000 0.9008
+vn 0.7823 0.0000 0.6229
+vn 0.3611 -0.4234 0.8309
+vn 0.4359 -0.2438 0.8663
+vn 0.3513 -0.2552 0.9008
+vn 0.6329 -0.4598 0.6229
+vn 0.2012 -0.4381 0.8761
+vn 0.7804 0.0000 -0.6253
+vn 0.8355 -0.2707 0.4782
+vn 0.9448 -0.1043 0.3105
+vn -0.2012 0.4381 0.8761
+vn 0.1144 0.8048 0.5824
+vn -0.6329 0.4598 0.6229
+vn 0.7384 -0.2399 0.6303
+vn 0.4699 0.1812 0.8639
+vn 0.7688 -0.1080 0.6303
+vn 0.4599 0.6623 0.5914
+vn 0.6314 0.4587 -0.6253
+vn -0.6329 -0.4598 0.6229
+vn -0.1090 -0.1627 0.9806
+vn -0.7215 0.1727 0.6705
+vn -0.4703 -0.0552 0.8808
+vn -0.3513 -0.2552 0.9008
+vn -0.7823 0.0000 0.6229
+vn -0.3611 0.4234 0.8309
+vn -0.4359 0.2438 0.8663
+vn -0.4342 0.0000 0.9008
+vn 0.9124 0.2635 -0.3132
+vn 0.9257 0.2098 -0.3148
+vn 0.9245 0.2305 -0.3035
+vn -0.3411 -0.6994 -0.6280
+vn -0.9209 -0.2282 0.3161
+vn -0.9201 -0.2302 0.3168
+vn -0.9218 -0.2300 0.3120
+vn -0.9195 -0.2287 0.3196
+vn -0.9138 -0.2552 -0.3159
+vn -0.4821 -0.1346 0.8657
+vn -0.8969 -0.3083 -0.3172
+vn -0.5760 -0.5635 0.5922
+vn -0.7674 -0.2638 0.5843
+vn -0.7595 -0.3137 0.5698
+vn -0.8911 -0.3246 -0.3172
+vn -0.5601 -0.1490 0.8150
+vn -0.9159 -0.2436 -0.3189
+vn 0.0242 -0.6342 0.7728
+vn 0.3724 0.0990 0.9228
+vn -0.9328 0.1677 0.3190
+vn -0.9322 0.1719 0.3185
+vn -0.3553 -0.8802 -0.3145
+vn -0.3533 -0.8808 -0.3153
+vn -0.3525 -0.8816 -0.3139
+vn 0.9006 0.4013 -0.1668
+vn 0.7711 -0.3832 0.5084
+vn 0.7758 0.4117 0.4782
+vn -0.7782 -0.0000 -0.6280
+vn 0.2412 -0.7422 -0.6253
+vn 0.7704 0.1359 0.6229
+vn 0.7686 0.1355 -0.6253
+vn 0.3211 -0.8927 -0.3162
+vn 0.5709 -0.5704 0.5905
+vn 0.2746 -0.7633 0.5847
+vn -0.7032 0.3430 0.6229
+vn -0.7384 -0.2399 0.6303
+vn -0.1973 0.8180 0.5404
+vn -0.1083 -0.7706 -0.6280
+vn 0.0000 0.7804 -0.6253
+vn 0.6883 -0.5266 0.4988
+vn 0.8948 -0.2027 0.3977
+vn -0.7274 0.6099 -0.3145
+vn -0.7220 0.6160 -0.3150
+vn -0.7289 0.6108 -0.3093
+vn -0.7264 0.6105 -0.3156
+vn -0.7284 0.6087 -0.3144
+vn -0.7326 0.6060 -0.3099
+vn -0.8877 -0.3366 0.3141
+vn -0.8594 -0.4028 0.3151
+vn -0.8738 -0.3664 0.3197
+vn -0.8894 -0.3310 0.3153
+vn -0.8876 -0.3348 0.3163
+vn -0.8885 -0.3304 0.3185
+vn 0.2098 -0.9257 -0.3148
+vn 0.2635 -0.9124 -0.3132
+vn 0.2305 -0.9245 -0.3035
+vn 0.0094 0.0764 0.9970
+vn 0.5214 0.7926 0.3163
+vn 0.4585 0.8295 0.3188
+vn -0.0234 0.1045 0.9943
+vn 0.4684 0.1168 0.8758
+vn 0.7553 -0.5804 0.3043
+vn 0.9158 0.2284 -0.3303
+vn 0.5358 0.1217 0.8355
+vn 0.9250 0.2101 -0.3166
+vn 0.4028 0.8593 0.3153
+vn 0.7912 0.1797 0.5846
+vn 0.9110 0.2633 -0.3174
+vn 0.9285 0.0000 -0.3714
+vn -0.3430 -0.7032 0.6229
+vn 0.6220 -0.5211 0.5844
+vn -0.0228 -0.9498 0.3121
+vn 0.7271 -0.6091 -0.3169
+vn 0.9313 0.1881 0.3119
+vn -0.6848 -0.6116 0.3962
+vn 0.3430 0.7032 0.6229
+vn 0.4130 0.1342 0.9008
+vn 0.7440 0.2418 0.6229
+vn 0.4810 -0.2826 0.8299
+vn 0.4987 -0.0978 0.8612
+vn -0.4587 0.6314 -0.6253
+vn -0.8796 0.3523 0.3197
+vn -0.8801 0.3553 0.3148
+vn -0.8788 0.3540 0.3201
+vn -0.8793 0.3570 0.3154
+vn -0.8805 0.3546 0.3147
+vn -0.8806 0.3534 0.3157
+vn -0.8783 0.3549 0.3202
+vn -0.6314 0.4587 -0.6253
+vn -0.0865 -0.8231 0.5612
+vn 0.2399 0.7384 0.6303
+vn 0.5598 -0.5406 -0.6280
+vn 0.4476 0.8353 0.3191
+vn 0.4054 0.8569 0.3185
+vn 0.4141 0.8526 0.3187
+vn -0.0720 -0.0518 0.9961
+vn -0.0862 0.1309 0.9876
+vn 0.6296 -0.4574 -0.6280
+vn 0.6839 0.6561 0.3190
+vn 0.7956 0.2282 0.5612
+vn 0.9050 -0.1630 0.3930
+vn 0.9498 -0.0228 0.3121
+vn 0.6516 -0.6293 0.4235
+vn 0.0509 0.1362 0.9894
+vn 0.3411 0.6994 -0.6280
+vn 0.4443 0.8363 -0.3213
+vn 0.5171 0.7955 -0.3159
+vn 0.4222 0.7059 0.5687
+vn 0.3813 0.7178 0.5826
+vn 0.2684 0.5053 0.8202
+vn 0.4418 0.8395 -0.3163
+vn 0.2662 0.5059 0.8205
+vn 0.4611 0.8293 -0.3156
+vn 0.4506 0.8349 -0.3160
+vn 0.4487 0.8360 -0.3160
+vn 0.4438 0.8385 -0.3162
+vn 0.8166 -0.4869 -0.3100
+vn 0.8351 -0.4502 -0.3162
+vn 0.4773 -0.2573 0.8402
+vn 0.7141 -0.3850 0.5847
+vn 0.4850 -0.6528 0.5819
+vn 0.8181 -0.4820 -0.3136
+vn 0.4641 -0.2734 0.8426
+vn 0.1083 0.7706 -0.6280
+vn 0.1375 0.7995 0.5847
+vn 0.1608 0.9349 -0.3163
+vn -0.3365 0.8872 -0.3156
+vn -0.2876 0.7584 0.5850
+vn 0.5109 -0.6928 0.5089
+vn -0.2708 -0.8355 0.4782
+vn 0.5325 -0.7329 0.4234
+vn 0.8029 0.1163 0.5847
+vn 0.7720 -0.2328 0.5914
+vn 0.9389 0.1360 -0.3163
+vn 0.3835 0.3129 0.8689
+vn 0.2782 0.4797 0.8322
+vn 0.7646 0.1348 0.6303
+vn 0.2328 0.7720 0.5914
+vn 0.6891 0.3664 -0.6253
+vn -0.6871 -0.3653 -0.6280
+vn 0.4621 -0.1211 0.8785
+vn 0.5585 -0.5393 0.6303
+vn 0.3093 -0.2987 0.9029
+vn -0.4486 -0.8019 0.3946
+vn -0.2319 0.9188 0.3195
+vn -0.2299 0.9209 0.3149
+vn -0.2279 0.9212 0.3153
+vn -0.2304 0.9210 0.3142
+vn -0.2290 0.9193 0.3202
+vn 0.0338 0.0630 0.9974
+vn -0.0085 -0.1027 0.9947
+vn -0.1627 0.1090 0.9806
+vn -0.7408 -0.5926 0.3162
+vn 0.3546 0.8797 0.3168
+vn 0.3403 0.6978 0.6303
+vn -0.4851 0.6527 0.5820
+vn 0.1885 0.3864 0.9029
+vn -0.0269 0.4684 0.8831
+vn -0.2966 0.6763 0.6743
+vn 0.8947 0.3187 0.3130
+vn 0.8963 0.3131 0.3142
+vn 0.8946 0.3168 0.3152
+vn 0.8968 0.3143 0.3113
+vn 0.8944 0.3175 0.3149
+vn 0.8937 0.3185 0.3159
+vn 0.8939 0.3206 0.3133
+vn -0.0630 0.0338 0.9974
+vn 0.1027 -0.0085 0.9947
+vn 0.5926 -0.7408 0.3162
+vn -0.0150 -0.9464 -0.3228
+vn -0.0654 -0.9462 -0.3169
+vn -0.0559 -0.8095 0.5844
+vn 0.4702 -0.8223 -0.3205
+vn 0.5132 -0.7980 -0.3160
+vn -0.3101 -0.8972 0.3145
+vn -0.0522 -0.8398 0.5404
+vn -0.6281 -0.4563 0.6303
+vn 0.7555 0.1332 -0.6415
+vn 0.8039 0.5033 0.3168
+vn -0.4598 0.6329 0.6229
+vn 0.1727 0.7215 0.6705
+vn -0.0552 0.4703 0.8808
+vn -0.2552 0.3513 0.9008
+vn 0.4574 -0.6296 -0.6280
+vn -0.4476 -0.8353 0.3191
+vn -0.4054 -0.8569 0.3185
+vn -0.4141 -0.8526 0.3187
+vn 0.0720 0.0518 0.9961
+vn 0.0862 -0.1309 0.9876
+vn 0.0234 -0.1045 0.9943
+vn -0.4585 -0.8295 0.3188
+vn -0.3546 -0.8797 0.3168
+vn 0.8019 -0.4486 0.3946
+vn 0.8398 -0.0522 0.5404
+vn -0.1163 0.8029 0.5847
+vn -0.1360 0.9389 -0.3163
+vn -0.8352 0.4499 -0.3162
+vn -0.4774 0.2572 0.8402
+vn -0.7142 0.3848 0.5847
+vn -0.8161 0.4854 -0.3137
+vn -0.4629 0.2753 0.8425
+vn -0.8176 0.4852 -0.3099
+vn 0.7995 -0.1375 0.5847
+vn 0.9349 -0.1608 -0.3163
+vn 0.8581 0.4050 -0.3157
+vn 0.7335 0.3462 0.5849
+vn 0.8138 0.0041 0.5811
+vn 0.5435 0.5628 0.6229
+vn 0.1332 -0.7555 -0.6415
+vn 0.6296 0.4574 -0.6280
+vn 0.5421 0.5614 -0.6253
+vn -0.4563 -0.6281 0.6303
+vn 0.5427 -0.1055 0.8333
+vn 0.2826 0.4810 0.8299
+vn 0.4091 -0.2628 0.8738
+vn 0.3645 -0.6855 0.6303
+vn 0.2018 -0.3796 0.9029
+vn -0.3664 0.6891 -0.6253
+vn 0.3653 -0.6871 -0.6280
+vn 0.6871 0.3653 -0.6280
+vn 0.0000 -0.7764 0.6303
+vn 0.6068 0.7277 0.3197
+vn 0.6099 0.7273 0.3148
+vn 0.6083 0.7263 0.3201
+vn 0.6112 0.7258 0.3156
+vn 0.6081 0.7284 0.3156
+vn 0.6092 0.7255 0.3202
+vn 0.0630 -0.0338 0.9974
+vn -0.1027 0.0085 0.9947
+vn 0.1090 0.1627 0.9806
+vn -0.5926 0.7408 0.3162
+vn 0.1342 -0.4130 0.9008
+vn 0.2418 -0.7440 0.6229
+vn -0.0978 -0.4987 0.8612
+vn -0.9209 -0.2299 0.3148
+vn 0.3366 -0.8877 0.3141
+vn 0.3310 -0.8894 0.3153
+vn 0.3348 -0.8876 0.3163
+vn 0.3375 -0.8876 0.3136
+vn 0.5211 0.6220 0.5844
+vn 0.6091 0.7271 -0.3169
+vn -0.1217 0.5358 0.8355
+vn -0.2101 0.9250 -0.3166
+vn -0.1797 0.7912 0.5845
+vn -0.1168 0.4684 0.8758
+vn 0.5805 0.7553 0.3043
+vn -0.2283 0.9158 -0.3303
+vn -0.2633 0.9110 -0.3174
+vn 0.4829 0.8174 -0.3142
+vn 0.5202 0.7936 -0.3156
+vn 0.5202 0.7935 -0.3158
+vn 0.4446 0.6783 0.5850
+vn 0.1705 -0.4407 -0.8813
+vn 0.4813 0.8181 -0.3147
+vn 0.8629 0.3177 0.3930
+vn -0.1631 -0.9050 0.3930
+vn -0.6293 -0.6516 0.4235
+vn 0.2282 -0.7956 0.5612
+vn 0.3673 -0.6908 0.6229
+vn 0.5864 0.6382 0.4988
+vn 0.4587 0.6314 -0.6252
+vn -0.4574 -0.6296 -0.6280
+vn 0.2281 -0.9208 0.3165
+vn 0.2302 -0.9201 0.3168
+vn 0.2300 -0.9218 0.3120
+vn 0.2301 -0.9209 0.3146
+vn -0.2418 0.7440 0.6229
+vn 0.0978 0.4987 0.8612
+vn -0.1342 0.4130 0.9008
+vn 0.3350 0.7860 0.5196
+vn 0.8922 0.1573 0.4234
+vn -0.8629 -0.3177 0.3930
+vn -0.8231 0.0865 0.5612
+vn -0.2189 0.0000 0.9758
+vn -0.8532 -0.4126 0.3190
+vn -0.8552 -0.4089 0.3186
+vn -0.3673 0.6908 0.6229
+vn -0.2635 0.9124 -0.3132
+vn -0.2098 0.9257 -0.3148
+vn -0.2305 0.9245 -0.3035
+vn -0.1288 0.9390 0.3190
+vn -0.1246 0.9397 0.3186
+vn -0.1729 0.9309 0.3218
+vn -0.1635 0.9351 0.3144
+vn -0.6994 0.3411 -0.6280
+vn -0.0659 -0.9470 -0.3145
+vn -0.0266 -0.9513 -0.3070
+vn 0.8797 -0.3546 0.3168
+vn 0.7860 -0.3350 0.5196
+vn 0.1573 -0.8922 0.4234
+vn -0.0000 0.7671 -0.6415
+vn 0.3129 -0.3835 0.8689
+vn 0.4797 -0.2782 0.8322
+vn 0.1348 -0.7646 0.6303
+vn -0.1355 0.7686 -0.6253
+vn 0.5267 0.6883 0.4988
+vn -0.7401 0.2405 -0.6280
+vn 0.6994 -0.3411 -0.6280
+vn 0.7118 0.5811 0.3946
+vn 0.8180 0.1973 0.5404
+vn 0.2800 0.8616 0.4234
+vn 0.2299 -0.9209 0.3149
+vn 0.2290 -0.9193 0.3202
+vn 0.2320 -0.9187 0.3197
+vn 0.2300 -0.9190 0.3201
+vn 0.2279 -0.9212 0.3153
+vn 0.2314 -0.9214 0.3123
+vn -0.2281 0.9208 0.3165
+vn -0.2302 0.9201 0.3168
+vn -0.2300 0.9218 0.3120
+vn -0.2282 0.9202 0.3180
+vn -0.2509 -0.9149 0.3163
+vn -0.7440 0.2418 0.6229
+vn -0.3328 0.3606 0.8713
+vn 0.3421 0.7014 -0.6253
+vn -0.7804 0.0000 -0.6253
+vn -0.0659 -0.9469 0.3148
+vn -0.0663 -0.9450 0.3203
+vn -0.0633 -0.9455 0.3195
+vn -0.0649 -0.9455 0.3192
+vn -0.0659 -0.9466 0.3156
+vn -0.5214 -0.7926 0.3163
+vn -0.0094 -0.0765 0.9970
+vn -0.0094 -0.0764 0.9970
+vn 0.9225 0.2174 0.3190
+vn 0.9230 0.2206 0.3154
+vn 0.9208 0.2247 0.3187
+vn 0.9228 0.2191 0.3169
+vn 0.9228 0.2201 0.3161
+vn 0.9225 0.2191 0.3178
+vn 0.9231 0.2189 0.3163
+vn 0.9232 0.2171 0.3172
+vn 0.9223 0.2201 0.3178
+vn 0.9239 0.2165 0.3156
+vn 0.9214 0.2182 0.3215
+vn 0.5942 -0.7399 -0.3154
+vn 0.7300 -0.3574 0.5825
+vn 0.5078 -0.6323 0.5851
+vn 0.5056 -0.6295 0.5900
+vn 0.9463 -0.0149 -0.3230
+vn 0.8095 -0.0559 0.5845
+vn 0.9462 -0.0654 -0.3169
+vn 0.6429 0.6996 0.3119
+vn -0.8581 -0.4050 -0.3157
+vn -0.7335 -0.3462 0.5849
+vn -0.8138 -0.0041 0.5811
+vn 0.4782 -0.2230 0.8495
+vn -0.4091 0.2628 0.8738
+vn -0.3645 0.6855 0.6303
+vn -0.2018 0.3796 0.9029
+vn -0.2405 -0.7401 -0.6280
+vn 0.4234 0.3611 0.8309
+vn -0.5421 -0.5614 -0.6253
+vn 0.3513 0.2552 0.9008
+vn 0.6329 0.4598 0.6229
+vn 0.7215 -0.1727 0.6705
+vn 0.4703 0.0552 0.8808
+vn 0.2399 -0.7384 0.6303
+vn 0.0000 0.7823 0.6229
+vn 0.2438 0.4359 0.8663
+vn -0.0000 0.4342 0.9008
+vn 0.0269 -0.4684 0.8831
+vn -0.1497 -0.1394 0.9789
+vn -0.3403 -0.6978 0.6303
+vn -0.8922 -0.1573 0.4234
+vn -0.3350 -0.7860 0.5196
+vn -0.4651 0.8292 -0.3102
+vn -0.5140 0.7976 -0.3155
+vn 0.7422 -0.2412 -0.6253
+vn 0.8231 -0.0865 0.5612
+vn -0.8353 0.4476 0.3191
+vn 0.0518 -0.0720 0.9961
+vn -0.1309 -0.0862 0.9876
+vn 0.1163 -0.8029 0.5847
+vn 0.1360 -0.9389 -0.3163
+vn 0.1089 0.7747 0.6229
+vn 0.1086 0.7728 -0.6253
+vn 0.4834 0.7806 0.3961
+vn -0.0000 0.9059 0.4234
+vn 0.7159 0.4664 0.5196
+vn -0.7343 -0.5142 0.4431
+vn -0.6339 -0.6339 0.4431
+vn -0.5142 -0.7343 0.4431
+vn -0.3789 -0.8125 0.4431
+vn 0.5142 -0.7343 0.4431
+vn 0.6339 -0.6339 0.4431
+vn 0.7343 -0.5142 0.4431
+vn 0.8125 -0.3789 0.4431
+vn 0.7343 0.5142 0.4431
+vn 0.6339 0.6339 0.4431
+vn 0.5142 0.7343 0.4432
+vn 0.5142 0.7343 0.4431
+vn 0.3789 0.8125 0.4431
+vn -0.5142 0.7343 0.4432
+vn -0.6339 0.6339 0.4432
+vn -0.6339 0.6339 0.4431
+vn -0.7343 0.5142 0.4431
+vn -0.8125 0.3789 0.4431
+s off
+f 2145//600 2144//600 2391//600 1457//600
+f 2889//601 2655//601 2145//601 1457//601 2393//601
+f 1467//602 2296//602 2243//602 2241//602
+f 2244//603 2296//603 1467//603 3019//603 2754//603
+f 3020//604 1481//604 2418//604 2135//604 2649//604
+f 2919//605 2418//605 1481//605 2137//605 2638//605 3023//605
+f 2437//606 2439//606 1493//606 2511//606 2436//606
+f 2434//607 2511//607 1493//607 2440//607 2435//607
+f 3021//608 1510//608 2084//608 2085//608 2918//608
+f 2589//609 2084//609 1510//609 2411//609 2908//609 3024//609
+f 2431//610 1523//610 2225//610 2226//610
+f 2224//611 2225//611 1523//611 2433//611
+f 3025//612 3022//612 1540//612 2304//612
+f 3026//613 2820//613 2304//613 1540//613 2497//613 2984//613
+f 2478//614 2479//614 1554//614 2133//614 2132//614
+f 2131//615 2133//615 1554//615 2480//615 2477//615
+f 2654//616 2145//616 2771//616 2773//616
+f 2661//617 2662//617 2630//617 2631//617 2883//617 2887//617 2885//617
+f 2659//618 2566//618 2565//618 2570//618 2790//618
+f 1045//616 2561//616 2560//616 2660//616
+f 2889//619 2772//619 2771//619 2145//619 2655//619
+f 2562//620 2563//620 1045//620 2660//620
+f 2790//619 2569//619 2567//619 2568//619 2659//619
+f 2884//621 2629//621 2630//621 2662//621 2663//621 2886//621 2888//621
+f 2563//622 2564//622 1045//622
+f 2700//623 2701//623 2696//623 2694//623 2698//623
+f 2652//621 2993//621 2618//621 2617//621 2651//621
+f 2993//624 2653//624 2650//624 2616//624 2618//624
+f 2700//624 2699//624 2695//624 2697//624 2701//624
+f 2855//624 2858//624 2764//624 2763//624 2737//624 2738//624 2851//624
+f 2854//624 2669//624 2668//624 2769//624 2768//624
+f 2853//625 2770//625 2769//625 2668//625 2667//625
+f 2852//625 2736//625 2737//625 2763//625 2762//625 2857//625 2856//625
+f 2800//625 2576//625 2577//625 2758//625 2759//625 2756//625 2752//625 2819//625
+f 2777//626 1049//626 2584//626 2580//626 2581//626
+f 3019//627 2753//627 2755//627 2760//627 2757//627 2575//627 2574//627 2800//627 2819//627 2244//627 2754//627
+f 2579//628 2582//628 1049//628 2777//628 2578//628
+f 2582//629 2583//629 1049//629
+f 2867//630 2840//630 2841//630 2844//630 2843//630
+f 3018//630 2874//630 2873//630 2870//630 2848//630 2847//630
+f 2891//631 2892//631 3006//631 2621//631 2620//631 2552//631 2551//631
+f 3018//632 2847//632 2846//632 2869//632 2871//632 2872//632
+f 2868//632 2845//632 2844//632 2841//632 2842//632
+f 2920//633 1040//633 2904//633 2906//633
+f 2899//634 2907//634 2766//634 2767//634 2898//634
+f 3020//634 2649//634 2648//634 2418//634 3015//634 2639//634 2647//634
+f 2894//634 2728//634 2642//634 2641//634 2646//634
+f 2904//635 1040//635 2903//635
+f 2891//636 2551//636 2553//636 2619//636 2622//636 3005//636 2890//636
+f 2956//637 2958//637 2781//637 2780//637 2782//637
+f 2953//637 2963//637 2623//637 2624//637 2954//637
+f 1040//638 2920//638 2905//638 2902//638
+f 2901//637 2900//637 2765//637 2766//637 2907//637
+f 2894//637 2645//637 2644//637 2643//637 2728//637
+f 3023//638 2638//638 2640//638 3015//638 2418//638 2919//638
+f 2761//639 2849//639 2686//639 2681//639 2682//639
+f 2893//639 2680//639 2679//639 2688//639 2690//639 2676//639 2675//639
+f 2955//639 2954//639 2624//639 2625//639 2962//639
+f 2956//639 2783//639 2779//639 2778//639 2958//639
+f 2795//640 2796//640 2948//640 2947//640 2940//640 2937//640 2933//640 2934//640 2997//640
+f 2943//640 2999//640 1032//640 2931//640 2932//640 2942//640
+f 2761//640 2684//640 2683//640 2685//640 2849//640
+f 2893//640 2675//640 2674//640 2689//640 2687//640 2678//640 2677//640
+f 2931//640 1032//640 2930//640
+f 2861//641 3013//641 2744//641 2745//641 2743//641
+f 2749//641 2636//641 2637//641 2657//641 2658//641 2751//641
+f 2997//641 2936//641 2935//641 2938//641 2939//641 2945//641 2946//641 2949//641 2794//641 2795//641
+f 2929//642 2928//642 1032//642 2999//642 2944//642 2941//642
+f 2692//643 2691//643 2825//643 2672//643 2671//643 2979//643 2980//643
+f 2861//644 2742//644 2747//644 2746//644 3013//644
+f 2750//645 2656//645 2657//645 2637//645 2635//645 2748//645
+f 2980//646 2981//646 2670//646 2673//646 2824//646 2693//646 2692//646
+f 2882//647 1029//647 2881//647
+f 2862//648 2863//648 1029//648 2882//648
+f 2876//649 2995//649 2627//649 2626//649 2875//649
+f 3021//650 2918//650 2588//650 2084//650 3010//650 2909//650 2917//650
+f 3014//650 2996//650 2912//650 2911//650 2916//650
+f 1029//651 2863//651 2864//651 2879//651
+f 2878//652 2877//652 2628//652 2627//652 2995//652
+f 3014//653 2915//653 2914//653 2913//653 2996//653
+f 3024//653 2908//653 2910//653 3010//653 2084//653 2589//653
+f 2879//654 2880//654 1029//654
+f 2964//655 2978//655 2829//655 2828//655 2830//655
+f 2834//652 2998//652 2586//652 2587//652 2833//652
+f 2835//656 2832//656 2585//656 2586//656 2998//656
+f 2964//657 2831//657 2827//657 2826//657 2978//657
+f 2921//656 2714//656 2715//656 2726//656 2718//656 2719//656 2960//656
+f 2959//657 2961//657 2723//657 2722//657 2725//657 2711//657 2710//657
+f 2991//658 1023//658 2990//658
+f 2716//659 2727//659 2713//659 2712//659 2921//659 2960//659 2717//659
+f 2961//659 2959//659 2709//659 2708//659 2724//659 2721//659 2720//659
+f 2571//660 2572//660 1023//660 2991//660 2989//660
+f 2735//661 2896//661 2895//661 2923//661 2927//661 2924//661 2734//661
+f 2865//662 2733//662 2611//662 2612//662 2605//662 2608//662
+f 2866//662 2601//662 2602//662 2599//662 3011//662
+f 2988//663 2992//663 1023//663 2572//663 2573//663
+f 2896//664 2735//664 2224//664 2925//664 2926//664 2922//664 2897//664
+f 2559//665 2554//665 2557//665 2732//665 2729//665 2850//665 2801//665
+f 2733//666 2865//666 2607//666 2606//666 2609//666 2610//666
+f 3011//666 2600//666 2603//666 2604//666 2866//666
+f 2304//667 2994//667 2982//667 2987//667 3022//667 3025//667
+f 2821//667 2823//667 2803//667 2802//667 3000//667
+f 2950//668 2951//668 1025//668 3003//668
+f 2799//667 2798//667 2792//667 2793//667 2985//667
+f 3003//669 1025//669 3002//669
+f 2850//670 2730//670 2731//670 2556//670 2555//670 2558//670 2801//670
+f 3007//671 3009//671 2776//671 2774//671 3016//671
+f 2838//671 2859//671 2740//671 2741//671 2837//671
+f 3026//671 2984//671 2983//671 2994//671 2304//671 2820//671
+f 3004//672 1025//672 2951//672 2952//672
+f 2822//671 3001//671 2804//671 2803//671 2823//671
+f 2986//671 2791//671 2792//671 2798//671 2797//671
+f 2810//673 2860//673 2706//673 2705//673 2806//673 2809//673
+f 2957//673 2813//673 2811//673 2817//673 2815//673 2702//673 2704//673
+f 2859//673 2839//673 2836//673 2739//673 2740//673
+f 3009//673 3008//673 3017//673 2775//673 2776//673
+f 2974//674 2591//674 2592//674 1037//674 2969//674 2973//674 2976//674
+f 2965//674 2633//674 2634//674 3012//674 2968//674
+f 2807//674 2805//674 2707//674 2706//674 2860//674 2808//674
+f 2957//674 2704//674 2703//674 2816//674 2818//674 2812//674 2814//674
+f 2969//674 1037//674 2970//674
+f 2784//675 2664//675 2665//675 2597//675 2596//675
+f 2786//675 2595//675 2594//675 2614//675 2615//675 2789//675
+f 2971//676 2972//676 1037//676 2592//676 2590//676 2975//676 2977//676
+f 3012//675 2634//675 2632//675 2966//675 2967//675
+f 2613//677 2614//677 2594//677 2593//677 2787//677 2788//677
+f 2785//678 2598//678 2597//678 2665//678 2666//678
+s 1
+f 1547//679 1542//680 1541//681 1546//682 1595//682 1599//683 1587//682 1593//684 1592//682
+f 2552//685 1591//685 1587//685 1599//685 1627//685 2553//685 2551//685
+f 2060//686 1026//687 1020//687 2059//688
+f 2059//688 1020//689 1024//689 1028//689 2062//690 2061//691 2063//692
+f 1225//693 1226//693 1223//693 1222//693 1295//693 3027//693 1294//693 1278//693 1286//693 1287//693
+f 2555//694 2556//694 1518//694 2558//694
+f 1572//695 1567//695 1517//695 1516//695 2557//695 2554//695 2559//695 1519//695 1564//695 1577//695 1533//695
+f 1346//696 1347//696 1349//697 1350//698 1354//696 1351//699 1353//700 1348//696 1345//696 3028//696
+f 1671//701 1666//702 1622//701 1621//701 1623//703 1624//701 1663//704 1676//701 1637//705
+f 2064//706 2065//707 1027//708 1021//708 1026//708 2060//686
+f 1550//709 1549//709 1548//709 2066//710 2067//711 2068//712 1579//709 1581//709 1582//709 1584//709 1583//709
+f 2563//713 2562//713 1205//713 2564//713
+f 1159//714 1134//714 1126//714 1155//714 2070//715 2069//716 2071//716 2073//716 2072//717 1177//714 1156//714 1157//714 1158//714 2570//714 2565//714 2566//714 1164//714 2560//714 2561//714 1181//714
+f 2569//718 1178//718 1210//718 2568//718 2567//718
+f 1064//719 1028//719 1024//719 1069//719 1068//719
+f 2572//720 2571//720 1672//720 1688//720 1654//720 1657//720 1670//720 1673//720 2573//720
+f 1061//721 1055//721 1043//721 1034//721 1062//721
+f 1035//722 1065//722 1062//722 1034//722 1033//722
+f 1107//723 1106//723 1094//723 1092//723
+f 1065//708 1035//708 1022//708 1030//708
+f 1446//724 1445//724 3029//724 1469//724 1464//724
+f 1248//725 1217//725 1219//725 1265//725 3030//725
+f 1841//726 1891//726 1898//726 1881//726
+f 1053//727 1044//727 1021//727 1027//727
+f 2075//728 2074//729 1068//730 1069//730 1075//730 2077//731 2076//732
+f 1891//733 1847//733 1876//733 1898//733
+f 1039//734 1041//734 1056//734 1063//734
+f 1042//735 1054//735 1058//735 1057//735 1078//735 1036//735
+f 1051//736 1054//736 1042//736 1048//736 1047//736 1052//736
+f 1739//737 1779//737 1768//737 1737//737
+f 1440//738 2574//738 2575//738
+f 2577//739 2576//739 1419//739 1420//739 1423//739 2581//739 2580//739 2584//739 1422//739 1421//739 1393//739 1418//739 2080//740 2079//741 2081//741 2078//742
+f 2583//743 2582//743 2579//743 2578//743 1442//743 1476//743
+f 1624//744 1623//744 1611//744 1609//744
+f 2586//745 2585//745 1817//745 1813//745 1857//745 1866//745 2587//745
+f 2083//746 1963//687 1952//687 2082//747
+f 2588//748 2085//748 2084//748
+f 1200//725 1188//725 1190//725 1199//725
+f 2591//749 1152//749 1163//749 1135//749 1138//749 1150//749 2590//749 2592//749
+f 1077//750 1082//750 1071//750 1073//750
+f 1828//751 1794//751 1789//751 1791//751
+f 1088//722 1084//722 1039//722 1063//722
+f 1057//752 2593//752 2594//752 2595//752 1089//752 1090//752 1091//752 1078//752
+f 2598//753 1052//753 1047//753 1090//753 1089//753 2596//753 2597//753
+f 2007//754 2009//755 2010//754 2008//756 2040//754 2038//757 2033//758 2052//759 2051//754
+f 1235//760 1236//761 1237//760 1239//762 1240//763 1244//760 1241//764 1243//765 1238//760
+f 2086//766 2088//767 1196//768 1198//768 1199//768 1197//768 1249//768 1255//768 1218//768 2087//769
+f 2089//770 1568//771 1569//772 2604//772 2603//772 2600//772 2090//773 2091//774 2092//774
+f 1623//775 1621//775 1620//775 2599//775 2602//775 2601//775 1606//775 2608//775 2605//775 2612//775 2611//775
+f 2606//776 2607//776 1573//776 1574//777 1575//778 1625//776 2610//776 2609//776
+f 1079//779 1087//779 1085//779 1070//779 1084//779 1088//779
+f 1533//780 1531//780 1555//780 1572//780
+f 2094//781 2093//782 1122//783 1120//783 1143//783 2095//784
+f 1154//779 1144//779 1145//779 1146//779
+f 2001//779 2002//779 3080//779 3099//779
+f 2003//779 2024//779 3099//779 3080//779
+f 1038//779 3052//779 3081//779
+f 1036//779 1078//779 1091//779 1096//779 1108//779 1059//779 1060//779 3081//779 3052//779
+f 1590//785 1588//785 1603//785 3031//785 1626//785
+f 1832//786 1858//787 1857//788 1813//786 1811//786 1814//786 1815//786 1852//786 2096//789 2097//790
+f 1986//791 1997//791 2025//791 1990//791
+f 2614//792 2613//792 1108//792 1096//792 1094//792 1106//792 2615//792
+f 2618//793 2616//793 1268//793 1231//793 1226//793 1269//793 2617//793
+f 2099//794 2098//795 1648//796 1645//796 1678//796 2100//797
+f 2101//798 2103//799 1738//800 1736//800 1765//800 2102//801
+f 1093//802 1095//802 1104//802 1105//802
+f 1721//737 1709//737 1711//737 1720//737
+f 1151//803 1147//804 1105//803 1104//803 1106//803 1107//805 1144//803 1154//803 1123//806
+f 2105//807 2104//808 1651//809 1628//809 1629//809 1632//809 1653//809 1682//809 1631//809 1630//809 2622//809 2619//809 1627//809 2107//810 2106//811 2108//811
+f 1602//812 2620//812 2621//812
+f 1114//813 1115//814 1112//815 1109//815 3032//815 1110//815 1111//815 1113//815 1116//815
+f 1459//816 1448//816 1401//816 1413//816
+f 1110//779 3032//779 3034//779
+f 1109//779 1086//779 1072//779 1071//779 1082//779 1124//779 1125//779 3034//779 3032//779
+f 1184//726 1182//726 1183//726 1185//726 3033//726 1163//726 1152//726
+f 2110//817 2109//818 1116//819 1113//819 1127//819 1126//819 2111//820
+f 1649//821 1644//821 1680//821 1679//821
+f 1134//822 1130//822 1111//822 1110//822 3034//822 1125//822
+f 1749//823 1700//823 1728//823 1753//823 1744//823
+f 1744//824 1740//824 1741//824 1743//824 1746//825 1747//826 1750//824 1748//827 1749//828
+f 2053//736 2017//736 2012//736 2040//736
+f 1144//829 1107//829 1092//829 1145//829
+f 2113//830 2114//831 1198//832 1193//832 1195//832 2112//833
+f 1105//829 1147//829 1139//829 1093//829
+f 2117//834 2115//835 2048//736 2014//736 2016//736 2116//836
+f 1097//837 1139//837 1147//837 1102//837
+f 2118//838 2119//839 2111//820 1126//840 1134//840 1125//840 1124//840 1119//840 1118//840 1117//840
+f 1359//841 1362//841 1348//841 1353//841 1352//841 1360//841
+f 1246//842 1202//842 1187//842 1247//842 3035//842
+f 2624//843 2623//843 1781//843 1747//843 1752//843 1780//843 2625//843
+f 2095//784 1143//687 2120//844
+f 1911//845 1909//845 1921//845 1923//845 3036//845
+f 2121//846 1494//687 1543//687 1545//687 2122//847
+f 1938//848 1970//848 1958//848 1936//848
+f 2627//849 2628//849 1921//849 1909//849 1907//849 1922//849 2626//849
+f 1882//850 1878//850 1877//850 1881//850 1898//850 1930//850 1886//850 1925//850 3037//850 1901//850
+f 2125//851 2070//715 1155//852 1133//852 1166//852 2124//853 2123//854
+f 2126//855 1662//687 2128//856 2127//857
+f 3071//779 3068//779 1552//779 3086//779 3070//779
+f 1553//779 3068//779 3071//779
+f 1589//779 3073//779 3097//779 1613//779 1625//779 1575//779 1576//779 3070//779 3086//779
+f 1608//779 3097//779 3073//779
+f 1539//858 1541//859 1537//860 1536//861 1604//862 1603//859 1588//863 1594//864 1595//859
+f 1324//865 1350//698 1349//697 1305//865 1303//865 1306//865 1307//865 1344//865 2129//866 2130//867
+f 1700//868 1749//828 1748//827 1699//869 1698//870 1694//870 1693//871 1695//872 1696//873 1697//874
+f 2629//852 1178//852 1170//852 1132//852 1156//852 1177//852 2631//852 2630//852
+f 1695//875 1693//875 1730//875 1732//875 3038//875
+f 2634//876 2633//876 2132//876 2133//876 2131//876 2632//876
+f 2112//833 1195//687 2134//877
+f 2637//802 2636//802 2027//802 1996//802 1995//802 2031//802 2030//802 2635//802
+f 1092//878 1094//879 1095//878 1093//880 1139//878 1137//881 1121//882 1146//883 1145//878
+f 1530//884 1558//885 1557//886 1508//887 1506//887 1509//888 1511//887 1551//887 1563//887
+f 1451//889 1452//890 1450//891 1512//892 1509//893 1506//893 1505//893 1507//894 1502//893 1501//893
+f 2137//895 2138//896 2640//897 2638//897
+f 2647//898 2639//899 1690//899 2646//899 2641//899 2642//899 1679//899 1680//899 1678//899 1677//899 2136//900 2139//901
+f 2645//902 1726//902 1701//902 2643//902 2644//902
+f 2648//903 2649//903 2135//903
+f 1076//904 1115//814 1114//813 1075//905 1069//906 1073//907 1071//908 1072//907 1074//907
+f 1950//909 1947//910 1946//911 1949//909 1993//909 1997//909 1986//909 2141//912 2140//913 1991//909
+f 2651//914 2617//914 1269//914 1267//914 2652//914
+f 2650//915 2653//915 1266//915 2142//916 2143//917 1281//915 1317//915 1293//915 1268//915 2616//915
+f 2124//853 1166//687 1167//687 2146//918
+f 2654//687 2144//687 2145//687
+f 1994//919 1992//919 2028//919 2658//919 2657//919 2656//919 2029//919 3039//919
+f 1241//687 1244//687 2148//920 2147//921
+f 1207//922 1208//922 1176//922 1173//922 1209//922
+f 1211//923 1209//923 1173//923 1172//923 3040//923 1215//923 1214//923
+f 1234//924 1194//924 1196//924 2088//767 2151//925 2149//926 2150//927
+f 2659//928 2568//928 1210//928 1169//928 1162//928 1164//928 2566//928
+f 2560//929 1164//929 1162//929 1179//929 3041//929 1205//929 2562//929 2660//929
+f 1474//930 1473//930 1438//930 1435//930
+f 3061//779 3042//779 1203//779 3053//779 3033//779 1185//779
+f 3060//779 3043//779 3042//779 3061//779
+f 1191//779 3043//779 3060//779
+f 1204//779 3085//779 3069//779 1135//779 1163//779 3033//779 3053//779
+f 2970//779 1037//779 2972//779 1153//779 1136//779 3069//779 3085//779
+f 2661//931 1165//931 1160//931 1174//931 1206//931 2663//931 2662//931
+f 2154//932 2153//933 1888//934 1848//934 1843//935 1842//936 1847//934 1891//934 1895//934 1883//934 1889//934 2152//937 2155//938
+f 1196//939 1194//939 1193//939 1198//939
+f 2046//689 2039//689 2043//689 1999//689 2026//689 2045//689
+f 2157//940 2158//941 1750//942 1747//942 1781//942 2159//943 2156//944
+f 3043//945 1191//945 1189//945 1201//945 1203//945 3042//945
+f 1202//946 1201//946 1189//946 1187//946
+f 1197//947 1199//947 1190//947 1192//947
+f 2665//948 2664//948 1103//948 1098//948 1100//948 2162//949 2161//950 2160//951 2666//948
+f 1345//952 1348//952 1362//952 1365//952 1364//952 1380//952 3044//952
+f 1538//953 1534//953 1535//953 1537//953 1541//681 1542//680 1545//953 1543//954 1544//955
+f 1683//956 1681//956 1641//956 1639//956
+f 1233//745 1224//745 1229//745 1176//745 1208//745
+f 1224//957 1233//957 1214//957 1215//957 3045//957 1220//957
+f 1343//958 1322//958 1323//958 1328//958 1332//958 1342//958 2667//958 2668//958 2669//958
+f 1985//959 1982//959 1981//959 1984//959 2000//959 2028//960 1989//961 2024//962 2003//959
+f 1758//963 1755//963 1756//963 1757//963 1759//964 1760//965 1764//963 1761//966 1763//967
+f 2164//968 2163//969 1968//970 1969//971 2004//971 1973//971 1974//972 1975//973 2023//971 2021//971 2673//971 2670//971 2018//971 2166//974 2165//975 2167//975
+f 2019//976 2671//976 2672//976
+f 1894//725 1893//725 1935//725 1934//725 1931//725 1929//725
+f 1846//977 1843//977 1875//977 2674//977 2675//977 2676//977 2170//978 2171//979 2169//980 2168//981
+f 1192//924 1239//924 1249//924 1197//924
+f 1733//982 1731//982 1734//982 1753//982 1728//982 1727//983 2172//984 2173//985 2159//943 1781//982 1783//982 1784//982 1785//982 3046//982
+f 2686//986 1880//986 1879//986 1851//986 2682//986 2681//986
+f 2688//987 2679//987 2680//987 1849//987 2174//988 2175//989 2170//978 2676//987 2690//987
+f 2683//990 2684//990 1850//990 2677//990 2678//990 2687//990 2689//990 2674//990 1875//990 1877//990 1878//990 2685//990
+f 2176//991 1252//992 1254//993 1297//993 1258//993 1259//994 1261//995 1315//993 1313//993 1311//993 1310//993 2177//996 2178//997 2180//997 2179//998
+f 2182//999 1175//687 1228//687 1230//687 2181//1000
+f 2692//1001 2693//1001 2021//1001 2009//1001 2007//1001 2022//1001 2691//1001
+f 1706//1002 1707//1002 1688//1002 1672//1002 1705//1002
+f 1404//1003 1402//1003 1414//1003 1416//1003 3047//1003 3048//1003
+f 2698//1004 2694//1004 2696//1004 1271//1004 1269//1004
+f 2695//1005 2699//1005 1274//1005 1293//1005 1320//1005 1280//1005 1316//1005 1296//1005 1276//1005 2697//1005
+f 1619//1006 1621//1006 1612//1006 1614//1006
+f 2698//1007 1269//1007 1226//1007 1225//1007 1274//1007 2699//1007 2700//1007
+f 2701//1008 2697//1008 1276//1008 1222//1008 1223//1008 1271//1008 2696//1008
+f 1271//1009 1223//1009 1221//1009 3050//1009 3049//1009 1272//1009
+f 1172//779 1171//779 3075//779 3040//779
+f 1213//779 3098//779 3049//779 3050//779 3076//779 1212//779
+f 1272//779 3049//779 3098//779
+f 3055//779 3045//779 1215//779 3040//779 3075//779 3076//779 3050//779 1221//779
+f 3055//779 1220//779 3045//779
+f 1609//1010 1664//1010 1663//1010 1624//1010
+f 1296//1011 1295//1011 1222//1011 1276//1011
+f 2184//1012 2148//920 1244//1013 1240//1013 1255//1013 2703//1013 2704//1013 2702//1013 2183//1014 2185//1015
+f 1255//1016 1240//1016 1216//1016 1218//1016
+f 2707//1017 1257//1017 1237//1017 1236//1017 3051//1017 1264//1017 2705//1017 2706//1017
+f 1980//1018 1949//1018 1946//1018 1981//1018
+f 1731//1019 1729//1019 1697//1019 1696//1019 1735//1019 1734//1019
+f 1265//779 1246//779 3035//779 3030//779
+f 1247//779 1248//779 3030//779 3035//779
+f 1504//1020 1506//1020 1516//1020 1517//1020
+f 1126//1021 1127//1021 1133//1021 1155//1021
+f 1285//687 2187//1022 2186//1023
+f 1300//1024 1302//1025 1303//1024 1301//1026 1349//1024 1347//1024 1325//1024 1357//1024 1356//1024
+f 1999//1027 2043//1028 2042//1029 1998//1030 1997//1031 1993//1031 1992//1031 1994//1031 1995//1031 1996//1032
+f 2714//1033 1778//1033 1777//1034 1776//1035 2719//1033 2718//1033 2726//1033 2715//1033
+f 2716//1036 2717//1036 1773//1036 2720//1036 2721//1036 2724//1036 2708//1036 2709//1036 1772//1036 1769//1036 1774//1036 2712//1036 2713//1036 2727//1036
+f 2725//1037 2722//1037 2723//1037 1770//1038 2188//1039 2189//1040 2190//1041 2710//1037 2711//1037
+f 2191//1042 1411//1043 1406//1043 1408//1043 2194//1044 2193//1045 2192//1046
+f 2195//1047 1659//1048 1669//1048 2197//1049 2198//1050 2196//1051
+f 2643//1052 1701//1052 1694//1052 1649//1052 1679//1052 2642//1052 2728//1052
+f 1279//1053 1258//1053 1297//1053 1298//1053 1299//1053
+f 1038//1054 1041//1054 1039//1054 1084//1054 1070//1054 1033//1054 1034//1054 1043//1055 1044//1056 1050//1054 1046//1057 1048//1058 1042//1054 1036//1054 3052//1054
+f 2201//1059 2200//1060 2199//1061 1291//1062 1287//1062 1286//1062 1288//1062 1289//1062 1290//1062 1292//1062 1337//1063 1336//1064 2202//1065
+f 1636//1066 2203//1067 2204//1068 1618//1066 1620//1069 1621//1066 1619//1066 1666//1066 1669//1070
+f 2206//1071 2207//1072 1186//1073 1182//1074 1184//1075 1204//1076 3053//1074 1203//1074 1201//1074 1199//1074 1198//1074 2114//831 2205//1071 2208//1071
+f 1515//1077 2731//1077 2730//1077
+f 2209//1078 2211//1079 1513//1080 2729//1080 2732//1080 1516//1080 1514//1080 1567//1080 1570//1080 1532//1080 2210//1081
+f 1102//783 1104//783 1095//783 1097//783
+f 1339//1082 1334//1082 1372//1082 1371//1082
+f 2187//1022 1285//793 1277//793 1281//793 2143//917 2212//1083 2213//1084
+f 1444//1085 1447//1085 1463//1085 1466//1085 1465//1085 1483//1085
+f 1292//1086 1290//1086 1319//1086 1318//1086
+f 1321//779 1374//779 1375//779 3056//779 3064//779
+f 1329//779 1328//779 1323//779 1289//779 1288//779 3064//779 3056//779
+f 1280//1087 1320//1087 1286//1087 1278//1087
+f 1294//779 3027//779 3100//779
+f 3027//779 1295//779 1296//779 1316//779 3100//779
+f 1625//1088 1613//1088 1611//1088 1623//1088 2611//1088 2733//1088 2610//1088
+f 2214//1089 2215//1090 2044//1091 2041//1091 2054//1091 2216//1092 2217//1093
+f 2220//1094 2219//1095 1383//1096 1340//1096 1335//1097 1334//1098 1339//1096 1386//1096 1390//1096 1378//1096 1384//1096 2218//1099 2221//1100
+f 1310//1101 1308//1101 1307//1101 1306//1101
+f 1719//1102 1717//1102 1715//1102 1714//1102
+f 1304//1103 1302//1103 1313//1103 1315//1103 3054//1103
+f 2222//1104 1716//687 2223//1105
+f 2734//687 2226//687 2225//687 2224//687 2735//687
+f 1971//1106 1956//1106 1961//1106 1960//1106 1969//1106 1968//1106
+f 1309//1107 1311//1107 1303//1107 1305//1107
+f 1847//1108 1842//1108 1877//1108 1876//1108
+f 1369//1109 1370//1109 1335//1109 1340//1109
+f 2227//1110 2118//838 1117//1111 1080//1111 1081//1111 1083//1111 1119//1111 1124//1111 1082//1111 1077//1111 1066//1111 1064//1111 1068//1111 2074//729 2228//1112
+f 1840//1113 1836//1113 1837//1114 1839//1113 1842//936 1843//935 1846//1113 1844//1115 1845//1116
+f 2736//1117 1342//1117 1332//1117 1337//1117 1292//1117 1318//1117 1341//1117 2738//1117 2737//1117
+f 1752//1118 1747//826 1746//825 1751//1118 1795//1118 1799//1118 1788//1118 1793//1118 2229//1119 2230//1120
+f 2032//1121 2041//1122 2040//1123 2012//1121 2010//1121 2013//1124 2014//1125 2048//1126 2049//1121
+f 1221//1127 1223//1127 1226//1128 1227//1129 1230//1127 1228//1130 1229//1131 1224//1127 1220//1127 3055//1127
+f 2008//1132 2010//1132 2019//1132 2020//1132
+f 2231//1133 1344//823 1307//823 1308//823 2232//1134 2233//1135
+f 1357//779 1368//779 1355//779 1356//779
+f 2235//1136 1326//1107 1324//1107 2130//867 2234//1137
+f 2740//823 2739//823 1309//823 1305//823 1349//823 1358//823 2741//823
+f 2028//1138 2000//1138 2025//1138 2743//1138 2745//1138 2744//1138 2027//1138 2636//1138 2749//1138 2751//1138 2658//1138
+f 2742//1139 2238//1140 2237//1141 2239//1141 2236//1142 2045//1139 2026//1139 2746//1139 2747//1139
+f 2030//1143 2047//1143 2056//1143 2029//1143 2656//1143 2750//1143 2748//1143 2635//1143
+f 2755//1144 2753//1145 2240//1146 1472//1144 1474//1144 1475//1144 1477//1144 1476//1144 1442//1144 1441//1144 1440//1144 2575//1144 2757//1144 2760//1144
+f 2078//742 2242//1147 2241//1148 2243//1149 2752//1149 2756//1149 2759//1149 2758//1149 2577//1149
+f 2188//1039 1770//1038 1771//1150 1805//1150 1775//1150 1776//1035 1777//1034 1823//1150 1821//1150 1819//1150 1818//1150 2246//1151 2245//1152 2248//1152 2247//1153
+f 1836//842 1840//842 1850//842 2684//842 2761//842 2682//842 1851//842 1830//842 1831//842
+f 1603//779 1604//779 3072//779 3031//779
+f 1605//779 1626//779 3031//779 3072//779
+f 2249//1154 2251//1155 2250//1156 1361//1157 1358//1157 1363//1157 1367//1157 1366//1158 1365//1159 1362//1157 1359//1160
+f 2253//1161 2255//1162 1338//1163 1335//1163 1370//1163 2762//1163 2763//1163 2764//1163 2252//1164 2254//1165
+f 2766//1166 2765//1166 1730//1166 1693//1166 1687//1166 1689//1166 2767//1166
+f 1373//1167 1377//1167 1330//1167 1331//1167
+f 2770//1168 1373//1168 1331//1168 1329//1168 3056//1168 1375//1168 2768//1168 2769//1168
+f 2231//1133 2129//866 1344//687
+f 2771//1106 2772//1106 2256//1169 2257//1170 2146//918 1167//1106 1160//1106 1165//1106 2773//1106
+f 2775//1171 1327//1171 1325//1171 1347//1171 1363//1171 2774//1171 2776//1171
+f 1928//947 1897//947 1894//947 1929//947 1927//947
+f 1346//779 3028//779 3044//779 1380//779 3059//779 3048//779 3047//779 3088//779
+f 1345//779 3044//779 3028//779
+f 1399//779 1404//779 3048//779 3059//779
+f 1416//779 1366//779 1367//779 3088//779 3047//779
+f 2777//1010 2581//1010 1423//1010 1424//1010 1429//1010 1433//1010 1441//1010 1442//1010 2578//1010
+f 1254//1172 1242//1172 1298//1172 1297//1172
+f 1327//1173 1368//1173 1357//1173 1325//1173
+f 2782//1174 2780//1174 2781//1174 1784//1174 1783//1174
+f 1787//1175 2778//1175 2779//1175 2783//1175 1786//1175 1801//1175 1828//1175 1791//1175 1824//1175 1804//1175
+f 2260//1176 2259//1177 1099//837 1101//837 2258//1178
+f 1841//1179 1842//1179 1839//1179 1838//1180 1900//1179 1899//1179 1884//1179 1890//1181 1891//1179
+f 2263//1182 2264//1183 1896//1184 1895//1184 1891//1184 1890//1184 1892//1184 1893//1184 1894//1184 1897//1184 1948//1185 2261//1186 2262//1182
+f 2266//1187 2265//1188 1460//1189 1461//1190 1500//1190 1465//1190 1466//1191 1468//1192 1520//1190 1518//1190 2556//1190 2731//1190 1515//1190 2267//1193 2268//1194 2269//1194
+f 2732//1195 2557//1195 1516//1195
+f 1055//1196 1053//1196 1027//1196 2065//707 2270//1197 2062//690 1028//1196 1064//1196 1066//1196 1067//1196 1087//1196 1079//1196 1061//1196 1062//1196 1065//1196 1030//1196
+f 1371//1198 1393//1198 1386//1198 1339//1198
+f 2272//1199 2271//1200 1834//1086 1832//1086 2097//790
+f 1394//779 1395//779 3058//779 3062//779
+f 1396//779 1417//779 3062//779 3058//779
+f 1684//1085 1680//1085 1644//1085 1643//1085
+f 1498//1201 1431//1201 1479//1201 1499//1201 3057//1201
+f 1757//1202 1774//1202 1739//1202 1737//1202
+f 1330//1002 1377//1002 1396//1002 3058//1002 1395//1002
+f 3059//1203 1380//1203 1364//1203 1397//1203 1398//1203 1399//1203
+f 1397//1052 1360//1052 1352//1052 1398//1052
+f 1708//1204 1710//1205 1711//1204 1709//1206 1759//1204 1757//1207 1737//1204 1768//1208 1767//1204
+f 3061//1209 1185//1209 1183//1209 1141//1209 1142//1210 2273//1211 2274//1212 2275//1212 2134//877 1195//1209 1193//1209 1190//1209 1189//1209 1191//1209 3060//1209
+f 2276//1213 2278//1214 1382//1215 1418//1215 1393//1215 1371//1215 1372//1215 1370//1215 1369//1215 2277//1216
+f 1377//1217 1373//1218 1372//1218 1376//1218 1393//1218 1421//1219 1381//1218 1417//1218 1396//1218
+f 1063//1220 1056//1220 1060//1220 1059//1221 1058//1222 1054//1220 1051//1223 2279//1224 2281//1225 2280//1226 1053//1220 1055//1220 1061//1220 1079//1220 1088//1220
+f 2279//1224 1051//1223 1052//1227 2598//1227 2785//1227 2666//1227 2160//951 2282//1228 2283//1228
+f 1106//1229 1104//1229 1103//1229 2664//1229 2784//1229 2596//1229 1089//1229 2595//1229 2786//1229 2789//1229 2615//1229
+f 2787//1230 2593//1230 1057//1230 1058//1222 1059//1221 1108//1230 2613//1230 2788//1230
+f 2790//1231 2570//1231 1158//1231 1129//1231 1168//1231 1170//1231 1178//1231 2569//1231
+f 2792//1232 2791//1232 1412//1232 1403//1232 1405//1232 1410//1232 2793//1232
+f 1378//1233 1390//1233 1418//1233 1382//1233
+f 1420//800 1419//800 1392//800 1389//800
+f 1761//687 1764//687 2284//1234 2285//1235
+f 1422//1236 1387//1236 1385//1236 1421//1236
+f 1381//1237 1421//1237 1385//1237 1379//1237
+f 2219//1095 2286//1238 1383//687
+f 1384//687 2287//1239 2218//1099
+f 1417//1240 1381//1240 1379//1240 1394//1240 3062//1240
+f 2287//1239 1384//1082 1378//1082 1382//1082 2278//1214 2288//1241
+f 2290//1242 2289//1243 1245//1244 1216//1244 1240//763 1239//762 1192//1244 1190//1244 1193//1244 1194//1244 1234//1244 2291//1245 2292//1246
+f 1951//837 1944//837 1948//837 1897//837 1928//837 2796//837 2795//837 2794//837
+f 2798//1247 2799//1247 1409//1247 1407//1247 1406//1247 1411//1247 2797//1247
+f 1564//1248 1519//1248 1503//1248 1565//1248
+f 1445//1249 1446//1249 1448//1250 1449//1251 1453//1249 1450//891 1452//890 1447//1249 1444//1249 3063//1249
+f 2800//1252 2574//1252 1440//1252 1441//1252 1433//1252 1437//1252 1392//1252 1419//1252 2576//1252
+f 2801//1253 2558//1253 1518//1253 1505//1253 1503//1253 1519//1253 2559//1253
+f 1430//779 1429//779 1424//779 1388//779 1387//779 1422//779 2584//779 1049//779 2583//779 1476//779 1477//779
+f 1956//1254 1953//1254 1954//1254 1955//1254 1957//1255 1958//1256 1962//1254 1959//1257 1961//1258
+f 1317//1259 1281//1259 1277//1259 1291//1259
+f 2803//1260 2804//1260 1414//1260 1402//1260 1400//1260 1415//1260 2802//1260
+f 1535//1261 1584//1261 1582//1261 1537//1261
+f 1259//994 2810//1262 2809//1262 2806//1262 2705//1262 1264//1262 1261//995
+f 2816//1263 2703//1263 1255//1263 1249//1263 1257//1263 2707//1263 2805//1263 2807//1263 2808//1263 1256//1263 2814//1263 2812//1263 2818//1263
+f 2815//1264 2817//1264 2811//1264 2813//1264 1252//992 2176//991 2293//1265 2183//1014 2702//1264
+f 2295//1266 2294//1267 1391//687
+f 2296//1268 2244//1268 2819//1268 2752//1268 2243//1268
+f 1471//1269 1472//1269 1436//1269 1439//1269
+f 2298//1270 2297//1271 1765//1272 1736//1272 1760//965 1759//964 1713//1272 1711//1272 1714//1272 1715//1272 1754//1272 2299//1273 2300//1274
+f 1288//1275 1286//1275 1320//1275 1321//1275 3064//1275
+f 2301//1276 2302//1277 1050//1278 1044//1278 1053//1278 2280//1226
+f 1972//1279 1955//1279 1954//1279 1976//1279
+f 1432//1280 1475//1280 1479//1280 1431//1280
+f 1077//1281 1073//1281 1031//1281 1067//1281 1066//1281
+f 1454//687 1443//687 2305//1282 2303//1283
+f 1462//1284 1449//1284 1425//1284 1427//1284
+f 1428//1285 1426//1285 1446//1285 1464//1285
+f 1807//1011 1790//1011 1775//1011 1805//1011 1806//1011
+f 2823//1019 2821//1019 1413//1019 1401//1019 1403//1019 1412//1019 2822//1019
+f 1463//821 1447//821 1452//821 1451//821 1461//821 1460//821
+f 2307//1286 2306//1287 1427//1232 1425//1232 1454//1232 2303//1283
+f 1317//1288 1291//1288 2199//1061 2310//1289 2309//1290 2308//1291
+f 2302//1277 2162//949 1100//687 1046//687 1050//687
+f 2021//1292 2693//1292 2824//1292 2673//1292
+f 2035//1293 2055//1293 2053//1293 2020//1293 2019//1293 2672//1293 2825//1293 2691//1293 2022//1293 2050//1293 3066//1293 3065//1293 2058//1293
+f 2312//1294 2311//1295 1471//1296 1439//1296 1486//1296 2313//1297
+f 1808//1298 1810//1299 1811//1298 1809//1300 1857//1298 1855//1301 1833//1302 1865//1303 1864//1298
+f 1047//1304 1048//1058 1046//1057 1100//1305 1098//1306 1095//1306 1094//1306 1096//1307 1091//1306 1090//1306
+f 2830//1308 2828//1308 2829//1308 1870//1308 1866//1308
+f 2827//1309 2831//1309 1820//1309 1819//1309 1821//1309 1822//1309 1863//1309 1873//1309 1835//1309 2826//1309
+f 1496//1296 1488//1296 1438//1296 1473//1296
+f 1355//1310 1314//1310 1300//1310 1356//1310
+f 1434//1201 1488//1201 1496//1201 1478//1201
+f 2313//1297 1486//687 2314//1311 2315//1312
+f 1499//779 1521//779 3079//779 3057//779
+f 1497//779 1498//779 3057//779 3079//779
+f 1134//1313 1159//1313 1128//1313 1130//1313
+f 1502//1314 1483//1314 1465//1314 1500//1314 1501//1314
+f 1609//1315 1611//1316 1612//1315 1610//1317 1658//1315 1656//1318 1635//1319 1665//1320 1664//1315
+f 1601//1321 1647//1322 1646//1323 1600//1324 1599//1325 1595//1325 1594//1325 1596//1325 1597//1325 1598//1326
+f 2271//1200 2316//1327 1816//1328 1818//1328 1819//1328 1817//1328 2585//1328 2832//1328 2835//1328 1834//1328
+f 2587//1329 1866//1329 1868//1329 2834//1329 2833//1329
+f 1980//1330 1981//1330 1979//1330 1978//1330 2317//1331 2318//1332 1990//1333 2025//1334 2000//1330
+f 1745//1335 1746//1336 1743//1337 1742//1338 1803//1339 1802//1336 1789//1340 1794//1341 1795//1336
+f 2319//1342 1341//1343 1318//1343 1319//1343 1322//1343 1343//1343 1374//1343 1321//1343 1320//1343 1293//1343 1317//1343 2308//1291 2320//1344 2322//1344 2321//1345
+f 1293//1346 1287//1346 1231//1346 1268//1346
+f 2837//1347 2741//1347 1358//1347 1361//1347 2838//1347
+f 1326//1348 2235//1136 2232//1134 1308//1348 1310//1348 1311//1348 1309//1348 2739//1348 2836//1348 2839//1348
+f 2325//1349 2324//1350 1480//930 1485//930 2323//1351 2326//1352
+f 1522//1353 1485//1353 1480//1353 1492//1353
+f 1586//1354 1536//1354 1537//1354 1582//1354
+f 2841//1355 2840//1355 1522//1355 1492//1355 1494//1355 2121//846 2328//1356 2327//1357 2842//1355
+f 2330//1358 2329//1359 1617//687 1559//687 1562//687
+f 2845//1006 1524//1006 1495//1006 1491//1006 1525//1006 2843//1006 2844//1006
+f 2848//1360 1525//1360 1491//1360 1490//1360 1529//1360 1528//1360 2846//1360 2847//1360
+f 2685//1361 1878//1361 1839//1361 1837//1361 3067//1361 1880//1361 2686//1361 2849//1361
+f 1445//779 3063//779 3029//779
+f 1520//779 1468//779 1469//779 3029//779 3063//779 1444//779 1483//779 1502//779 1507//779
+f 2850//1362 2729//1362 1513//1362 1511//1362 1509//1362 1515//1362 2730//1362
+f 1738//1363 1772//1363 1760//1363 1736//1363
+f 1506//1364 1508//1364 1514//1364 1516//1364
+f 1122//1365 2093//782 2258//1178 1101//1365 1103//1366 1104//1365 1102//1365 1147//1365 1149//1367
+f 1154//802 1146//802 1121//802 1123//802
+f 2332//1368 2331//1369 1354//1370 1350//1370 1361//1370 2250//1156 2333//1371
+f 1553//1372 1555//1372 1557//886 1558//885 1562//1372 1559//1373 1561//1374 1556//1372 1552//1372 3068//1372
+f 1548//1375 1549//1375 1538//1375 1544//1375 1495//1375 1524//1375
+f 1550//1248 1528//1248 1529//1248 1534//1248 1538//1248 1549//1248
+f 1529//779 1490//779 1489//779 1527//779 1583//779 1584//779 1535//779 1534//779
+f 1136//1376 1137//1376 1139//1377 1140//1378 2336//1379 2335//1380 2334//1381 2273//1211 1142//1210 1138//1376 1135//1376 3069//1376
+f 1322//1382 1319//1382 1290//1382 1289//1382 1323//1382
+f 1816//1383 1815//1383 1814//1383 1818//1383
+f 2141//912 1986//1018 1990//1018 2318//1332 2338//1384 2339//1385 2337//1386
+f 1567//1248 1557//1248 1504//1248 1517//1248
+f 1374//1387 1343//1387 2669//1387 2854//1387 2768//1387 1375//1387
+f 2855//1388 2851//1388 2738//1388 1341//1388 2319//1342 2340//1389 2252//1164 2764//1388 2858//1388
+f 2857//1390 2762//1390 1370//1390 1372//1390 1373//1390 2770//1390 2853//1390 2667//1390 1342//1390 2736//1390 2852//1390 2856//1390
+f 2859//1391 2838//1391 1361//1391 1350//1391 1324//1391 1326//1391 2839//1391
+f 1578//1392 1579//1392 1542//1392 1547//1392
+f 1580//1393 1546//1393 1541//1393 1581//1393
+f 1581//785 1541//785 1539//785 1585//785
+f 2860//1394 2810//1394 1259//1394 1258//1394 1279//1394 1235//1394 1238//1394 1256//1394 2808//1394
+f 1637//1395 1635//1395 1656//1395 1671//1395
+f 2861//1396 2743//1396 2025//1396 1997//1396 1998//1396 2342//1397 2341//1398 2343//1399 2238//1140 2742//1396
+f 2344//1400 1563//687 1551//687 2345//1401
+f 2347//1402 2348//1403 1926//1404 1895//1404 1896//1404 2346//1405
+f 2122//847 1545//1406 1542//1406 1579//1406 2068//712 2349//1407
+f 1436//1408 1472//1408 2240//1146 2351//1409 2352//1410 2350//1411
+f 1532//1412 1570//1412 1558//1412 1530//1412
+f 1555//1413 1553//1413 3071//1413 3070//1413 1576//1413 1572//1413
+f 1727//1232 1728//1232 1700//1232 1697//1232 1729//1232
+f 2353//1414 2210//1081 1532//1364 1530//1364 1563//1364 2344//1400 2354//1415
+f 1564//779 1565//779 1566//779 1577//779
+f 1577//1020 1566//1020 1531//1020 1533//1020
+f 2357//1416 2358//1417 1906//1418 1902//1419 1904//1420 1924//1421 1923//1419 1921//1419 1919//1419 1918//1419 2355//1422 2356//1416 2359//1416
+f 1774//1423 1769//1424 1721//1425 1720//1423 1722//1423 1723//1423 1766//1426 1779//1423 1739//1427
+f 2361//1428 2360//1429 1578//1430 1547//1430 1592//1430 2362//1431
+f 1123//1432 1121//1432 1137//1432 1151//1432
+f 2863//1433 2862//1433 1922//1433 1907//1433 1965//1433 1964//1433 2864//1433
+f 1187//1434 1189//1435 1190//1434 1188//1436 1239//1434 1237//1437 1217//1438 1248//1439 1247//1434
+f 1960//1440 1961//1258 1959//1257 2015//1441 2013//1442 2010//1442 2009//1442 2011//1442 2006//1443 2005//1442
+f 1536//1314 1586//1314 1605//1314 3072//1314 1604//1314
+f 2865//1201 2608//1201 1606//1201 1607//1201 1608//1201 3073//1201 1589//1201 1573//1201 2607//1201
+f 2866//1296 2604//1296 1569//1296 1560//1296 1607//1296 1606//1296 2601//1296
+f 1434//1444 1435//1445 1432//1445 1431//1446 1498//1447 1497//1445 1482//1445 1487//1448 1488//1445
+f 1495//1449 1544//955 1543//954 1494//1450 1492//1451 1488//1451 1487//1452 1489//1453 1490//1454 1491//1455
+f 1031//1456 1073//1456 1069//1457 1024//1456 1020//1458 1026//1456 1021//1459 1044//1056 1043//1055 1022//1456 1035//1456 1033//1460 1070//1461 1085//1456
+f 1930//1462 1898//1462 1926//1462 2348//1403 2363//1463 2366//1463 2364//1463 2365//1464 1927//1465 1929//1462 1931//1462 1933//1462 1932//1462
+f 1473//1466 1474//1466 1472//1467 1471//1466 2311//1295 2323//1351 1485//1466 1522//1468 1496//1466
+f 1526//1469 1496//1469 1522//1469 2840//1469 2867//1469 2843//1469 1525//1469 2848//1469 2870//1469 2873//1469 2874//1469
+f 2842//1470 2327//1357 2367//1471 2368//1471 2066//710 1548//1470 1524//1470 2845//1470 2868//1470
+f 1528//1472 1550//1472 1583//1472 1527//1472 2872//1472 2871//1472 2869//1472 2846//1472
+f 2362//1431 1592//687 1593//687 2369//1473
+f 1274//1011 1225//1011 1287//1011 1293//1011
+f 2369//1473 1593//1393 1587//1393 1591//1393 2371//1474 2370//1475 2372//1476
+f 2373//1477 2107//810 1627//1478 1599//1478 1600//1478 2375//1479 2374//1480
+f 2376//1481 2080//740 1418//1482 1390//1482 1391//1482 2294//1267 2377//1483
+f 1461//1430 1451//1430 1501//1430 1500//1430
+f 1631//1484 1596//1484 1594//1484 1630//1484
+f 1186//733 1148//733 1141//733 1183//733 1182//733
+f 2379//1485 2378//1486 1780//1172 1752//1172 2230//1120
+f 2381//1487 2380//1488 1719//1489 1714//1489 1716//1489 2222//1104
+f 1620//1490 1618//1490 1616//1490 1615//1490
+f 2383//1491 2330//1358 1562//1492 1558//1492 1570//1492 2382//1493
+f 2006//722 1988//722 1973//722 2004//722 2005//722
+f 1621//1360 1622//1360 1610//1360 1612//1360
+f 1796//1494 1794//1494 1828//1494 1829//1494 3074//1494
+f 1023//779 2992//779 1674//779 1675//779 1655//779 1654//779 1688//779 1707//779 1712//779 1724//779 2990//779
+f 1753//1310 1734//1310 1735//1310 1740//1310 1744//1310
+f 2177//996 1310//1495 1306//1495 2386//1496 2385//1497 2384//1498 2387//1499
+f 2267//1193 1515//1500 1509//1500 1512//1500 2390//1501 2389//1502 2388//1503
+f 1791//952 1789//952 1802//952 1824//952
+f 2878//1504 1919//1504 1921//1504 2628//1504 2877//1504
+f 1939//1505 1972//1505 1967//1505 1920//1505 2876//1505 2875//1505 2626//1505 1922//1505 2862//1505 2882//1505 2881//1505 1977//1505
+f 1964//1506 2880//1506 2879//1506 2864//1506
+f 1983//1507 1982//1507 1943//1507 1941//1507
+f 1653//816 1632//816 1633//816 1638//816 1642//816 1652//816
+f 2331//1369 2194//1044 1408//687 1351//687 1354//687
+f 1936//1508 1958//1256 1957//1255 1912//1509 1910//1509 1913//1510 1914//1509 1952//1511 1963//1509
+f 2883//1512 2631//1512 1177//1512 2072//717 2391//1513 2144//1512 2654//1512 2773//1512 1165//1512 2661//1512 2885//1512 2887//1512
+f 2886//1514 2663//1514 1206//1514 2395//1515 2394//1516 2396//1517 1207//1518 1209//1514 1211//1514 1213//1514 1212//1514 1210//1514 1178//1514 2629//1514 2884//1514 2888//1514
+f 2392//1519 2256//1169 2772//1520 2889//1521
+f 2889//1521 2393//1522 2392//1519
+f 2039//1523 2036//1523 2037//1524 2038//1523 2040//1123 2041//1122 2044//1523 2042//1029 2043//1028
+f 1479//1525 1475//1525 1474//1525 1478//1525 1496//1525 1526//1525 1484//1526 1521//1527 1499//1525
+f 2397//1528 2399//1529 1616//1252 1618//1252 2204//1068 2398//1530
+f 2890//1531 1630//1531 1594//1531 1588//1531 1590//1531 2892//1531 2891//1531
+f 1622//1010 1666//1010 1658//1010 1610//1010
+f 1953//929 1956//929 1971//929 1974//929 1973//929 1988//929
+f 1619//1252 1614//1252 1658//1252 1666//1252
+f 1169//1532 1210//1532 1212//1532 3076//1532 3075//1532 1171//1532
+f 1678//1533 1645//1533 1650//1533 1677//1533
+f 2004//708 1969//708 1960//708 2005//708
+f 1685//1534 1640//1534 1641//1534 1681//1534
+f 1596//779 1631//779 1682//779 1683//779 1639//779 1638//779 1633//779 1597//779
+f 1730//1535 1701//1535 1726//1535 2400//1536 2401//1537 2403//1537 2402//1537 2172//984 1727//983 1729//1535 1731//1535 1733//1535 1732//1535
+f 1669//1538 1659//1538 1634//1538 1636//1538
+f 1827//1107 1826//1107 1800//1107 1798//1107
+f 2677//924 1850//924 1840//924 1845//924 1800//924 1826//924 1849//924 2680//924 2893//924
+f 2646//1539 1690//1539 1686//1539 1698//1539 1726//1539 2645//1539 2894//1539
+f 2896//930 2897//930 1667//930 1670//930 1657//930 1661//930 1660//930 1668//930 2895//930
+f 2404//1540 2203//1067 1636//1006 1634//1006 1662//1006 2126//855
+f 2057//1541 2055//1541 2038//1541 2037//1541 3077//1541
+f 1663//779 1664//779 1665//779 1676//779
+f 2021//1542 2023//1542 2011//1542 2009//1542
+f 1157//929 1131//929 1129//929 1158//929
+f 2405//1543 2136//900 1677//1052 1650//1052 1691//1052 2406//1544
+f 1580//1430 1602//1430 1595//1430 1546//1430
+f 1257//1545 1249//1546 1200//1545 1199//1545 1201//1547 1202//1548 1246//1549 1265//1545 1219//1550
+f 1860//1551 1861//1552 1859//1553 1915//1554 1913//1555 1910//1555 1909//1555 1911//1556 1905//1555 1903//1555
+f 1685//1557 1681//1557 1680//1557 1684//1557 2899//1557 2898//1557 2767//1557 1689//1557 2906//1557 2904//1557 2903//1557 1704//1557
+f 2901//1558 1701//1558 1730//1558 2765//1558 2900//1558
+f 1725//1559 2902//1559 2905//1559
+f 2907//1203 2899//1203 1684//1203 1643//1203 1694//1203 1701//1203 2901//1203
+f 1703//1203 1640//1203 1685//1203 1704//1203
+f 1632//1020 1629//1020 1598//1020 1597//1020 1633//1020
+f 1853//1007 1856//1007 1869//1007 1871//1007 1885//1007 3078//1007
+f 2409//1560 2295//1266 1391//1561 1390//1561 1386//1561 1385//1561 1387//1561 1388//1561 1389//1561 1392//1561 1437//1562 2407//1563 2408//1560
+f 2411//1564 2412//1565 2910//1566 2908//1566
+f 2917//1567 2909//1568 1916//1568 2916//1568 2911//1568 2912//1568 1917//1568 1967//1568 1970//1568 1938//1568 2410//1569 2413//1570
+f 2915//1571 1918//1571 1919//1571 2913//1571 2914//1571
+f 2588//1572 2918//1572 2085//1572
+f 1122//1573 1149//1573 1140//1573 1120//1573
+f 2414//1574 2416//1575 1887//1576 1926//1576 1898//1576 1876//1576 1877//1576 1875//1576 1874//1576 2415//1577
+f 1925//779 3093//779 3037//779
+f 1899//779 1900//779 3090//779 3094//779
+f 1901//779 3037//779 3093//779 3094//779 3090//779
+f 2406//1544 1691//687 1692//687 2417//1578
+f 2648//687 2135//687 2418//687
+f 1978//1579 1979//1579 1947//1579 1950//1579
+f 1236//779 1235//779 1279//779 1299//779 1304//779 3054//779 3051//779
+f 1315//779 1261//779 1264//779 3051//779 3054//779
+f 2419//1580 2400//1536 1726//1581 1698//1581 1699//1581 2421//1582 2420//1583
+f 1484//720 1482//720 1497//720 3079//720 1521//720
+f 2906//1085 1689//1085 1687//1085 1702//1085 1725//1085 2905//1085 2920//1085
+f 1821//1584 1823//1584 1812//1584 1810//1584
+f 1040//779 2902//779 1725//779 1702//779 1703//779 1704//779 2903//779
+f 1456//779 1458//779 3082//779 3083//779
+f 1470//779 3002//779 1025//779 3004//779 1455//779 3083//779 3082//779
+f 1945//1585 1946//1586 1943//1587 1942//1588 2002//1589 2001//1586 1987//1590 1992//1591 1993//1586
+f 1724//1592 1712//1592 1710//1592 1722//1592
+f 2277//1216 1369//1198 1340//1198 1383//1198 2286//1238 2422//1593
+f 1976//779 1954//779 1953//779 1988//779 2006//779 2011//779 2023//779 1975//779
+f 1942//752 1985//752 2003//752 3080//752 2002//752
+f 1103//1594 1101//1594 1099//1594 1098//1594
+f 2712//1595 1774//1595 1757//1595 1756//1595 1778//1595 2714//1595 2921//1595
+f 1718//800 1720//800 1711//800 1713//800
+f 1433//1596 1429//1596 1430//1596 1432//1596 1435//1597 1436//1598 2350//1411 2423//1599 2424//1600 2407//1563 1437//1562
+f 1334//1240 1333//1240 1376//1240 1372//1240
+f 1022//689 1043//689 1055//689 1030//689
+f 1723//1601 1722//1601 1710//1601 1708//1601
+f 1328//1602 1329//1602 1331//1602 1334//1098 1335//1097 1338//1602 1336//1064 1337//1063 1332//1602
+f 1312//1173 1301//1173 1303//1173 1311//1173
+f 2428//1603 2425//1604 1754//1117 1715//1117 1717//1117 2426//1605 2427//1606
+f 1766//958 1723//958 1708//958 1767//958
+f 1705//1198 1668//1198 1660//1198 1706//1198
+f 1087//721 1067//721 1031//721 1085//721
+f 2429//1607 1844//687 1846//687 2168//981
+f 1153//1608 1151//1608 1137//1608 1136//1608
+f 1759//958 1709//958 1721//958 1769//958
+f 1769//1117 1718//1117 1713//1117 1759//1117
+f 2927//1609 2923//1610 2430//1611 2432//1612 2431//1613 2226//1609 2734//1609 2924//1609
+f 2925//1614 2224//1614 2433//1615 2197//1049 1669//1614 1666//1614 1671//1614 1675//1614 1674//1616 1673//1617 1670//1614 1667//1618 2922//1619 2926//1614
+f 2931//1620 2930//1620 1933//1620 1931//1620 1934//1620 2943//1620 2942//1620 2932//1620
+f 2935//1621 2936//1621 2434//1621 2435//1621 2440//1622 2438//1623 2441//1624 1979//1621 1981//1621 1982//1621 1983//1621 2928//1621 2929//1621 2941//1621 2944//1621 1951//1621 2794//1621 2949//1621 2946//1621 2945//1621 2939//1621 2938//1621
+f 2796//1625 1928//1625 1927//1465 2365//1464 2439//1626 2437//1625 2436//1625 2934//1625 2933//1625 2937//1625 2940//1625 2947//1625 2948//1625
+f 1056//1627 1041//1627 1038//1627 3081//1627 1060//1627
+f 1426//1019 1428//1019 1470//1019 3082//1019 1458//1019
+f 2089//770 2442//1628 2382//1493 1570//1629 1567//1629 1572//1629 1576//1629 1575//778 1574//777 1571//1629 1568//771
+f 2249//1154 1359//1160 1360//1630 1397//1630 1364//1630 1365//1159 1366//1158 1416//1630 1414//1630 1412//1630 1411//1630 2191//1042 2443//1631 2444//1631
+f 2421//1582 1699//687 1748//687 1750//687 2158//941
+f 2951//816 2950//816 1415//816 1400//816 1456//816 3083//816 1455//816 2952//816
+f 2142//916 1266//1346 1232//1346 2445//1632 2446//1633 2447//1634
+f 2448//1635 2449//1636 1970//1637 1967//1637 1972//1637 1976//1637 1975//973 1974//972 1971//1637 1968//970 2163//969
+f 2954//841 2955//841 1782//841 1751//841 1746//841 1783//841 2953//841
+f 2782//952 1783//952 1746//952 1745//952 1786//952 2783//952 2956//952
+f 2814//1108 1256//1108 1238//1108 1243//1108 1242//1108 1254//1108 1252//1108 2813//1108 2957//1108
+f 2451//1638 2450//1639 1453//1640 1449//1640 1462//1640 2452//1641
+f 2778//1642 1787//1642 1742//1642 1743//1642 1784//1642 2781//1642 2958//1642
+f 1743//1643 1741//1643 1785//1643 1784//1643
+f 1732//779 1733//779 3046//779 3038//779
+f 1735//779 1696//779 1695//779 3038//779 3046//779 1785//779 1741//779 1740//779
+f 2102//801 1765//687 2297//1271
+f 2299//1273 1754//687 2425//1604
+f 2453//1644 2284//1234 1764//1645 1760//1645 1772//1645 2709//1645 2959//1645 2710//1645 2190//1041 2454//1646
+f 1790//1240 1755//1240 1758//1240 1773//1240 2717//1240 2960//1240 2719//1240 1776//1240 1775//1240
+f 2961//1082 2720//1082 1773//1082 1758//1082 1763//1082 1762//1082 1771//1082 1770//1082 2723//1082
+f 1793//687 2455//1647 2229//1119
+f 1643//1648 1644//1649 1641//1649 1640//1650 1703//1651 1702//1649 1687//1649 1693//1652 1694//1649
+f 2458//1653 2456//1654 2457//1655 1814//1656 1811//1656 1810//1656 1812//1656 1807//1656 1806//1656 1762//1656 1763//967 1761//966 2285//1235
+f 1439//1657 1436//1598 1435//1597 1438//1657 1488//1657 1492//1657 1480//1657 2324//1350 2314//1311 1486//1657
+f 1801//1053 1786//1053 1745//1053 1795//1053
+f 1787//1053 1804//1053 1803//1053 1742//1053
+f 1778//779 1756//779 1755//779 1790//779 1807//779 1812//779 1823//779 1777//779
+f 2336//1379 1140//1658 1149//1658 2462//1659 2461//1660 2460//1661 2459//1662
+f 1805//1346 1771//1346 1762//1346 1806//1346
+f 1176//1663 1229//1131 1228//1130 1175//1664 1174//1665 1170//1665 1168//1666 1161//1667 1179//1665 1162//1668 1169//1665 1171//1665 1172//1665 1173//1669
+f 2464//1670 2463//1671 2386//1496 1306//1672 1303//1672 1302//1672 1304//1672 1299//1672 1298//1672 1242//1672 1243//765 1241//764 2147//921
+f 2553//1673 1627//1673 2619//1673
+f 1580//1674 1581//1674 1579//1674 1578//1674 2360//1429 2465//1675 2371//1474 1591//1674 2552//1674 2620//1674 1602//1674
+f 2953//1676 1783//1676 1781//1676 2623//1676 2963//1676
+f 1792//1677 1825//1677 1801//1677 1782//1677 2955//1677 2962//1677 2625//1677 1780//1677 2378//1486 2466//1678
+f 1393//1002 1376//1002 1333//1002 1386//1002
+f 2467//1679 2455//1647 1793//841 1788//841 1792//841 2466//1678
+f 1825//1680 1792//1680 1788//1680 1799//1680
+f 1651//1681 1652//1681 1642//1681 1647//1681 1601//1681 1628//1681
+f 1829//779 1879//779 1880//779 3067//779 3074//779
+f 1837//779 1836//779 1831//779 1797//779 1796//779 3074//779 3067//779
+f 1782//1172 1801//1172 1795//1172 1751//1172
+f 1804//779 1824//779 1802//779 1803//779
+f 2450//1639 2390//1501 1512//687 1450//687 1453//687
+f 1232//1682 1227//1129 1226//1128 1231//1682 1287//1682 1291//1682 1277//1682 1285//1682 2186//1023 2445//1632
+f 2246//1151 1818//1683 1814//1683 2457//1655 2469//1684 2468//1685 2470//1686
+f 1822//1687 1821//1687 1810//1687 1808//1687
+f 1820//1382 1809//1382 1811//1382 1819//1382
+f 1629//1364 1628//1364 1601//1364 1598//1364
+f 1903//852 1902//852 1906//852 1867//852 1860//852
+f 1654//1688 1655//1688 1656//1688 1658//1689 1659//1690 2195//1047 2472//1691 2471//1692 2473//1693 1661//1694 1657//1688
+f 1478//720 1474//720 1435//720 1434//720
+f 1634//1695 1659//1690 1658//1689 1614//1695 1612//1695 1615//1695 1616//1695 2399//1529 2128//856 1662//1695
+f 1822//957 1808//957 1864//957 3084//957 1863//957
+f 1864//779 1865//779 3089//779 3084//779
+f 1873//779 1863//779 3084//779 3089//779
+f 2830//957 1866//957 1857//957 1809//957 1820//957 2831//957 2964//957
+f 2056//779 2057//779 3077//779 3039//779 2029//779
+f 2037//779 2036//779 2031//779 1995//779 1994//779 3039//779 3077//779
+f 2474//1696 1852//745 1815//745 1816//745 2316//1327 2475//1697
+f 1119//1433 1083//1433 1086//1433 1109//1433 1112//1433 1118//1433
+f 2265//1188 2476//1698 2452//1641 1462//1699 1459//1699 1464//1699 1469//1699 1468//1192 1466//1191 1463//1699 1460//1189
+f 2632//1700 2131//1700 2477//1700 2480//1701 2481//1702 2462//1659 1149//1700 1147//1700 1151//1700 1153//1700 2972//1700 2971//1700 2977//1700 2975//1700 2590//1700 1150//1700 2967//1700 2966//1700
+f 1148//1703 1186//1073 2207//1072 2479//1704 2478//1703 2132//1703 2633//1703 2965//1703 2968//1703
+f 1184//1075 1152//1705 2591//1705 2974//1705 2976//1705 2973//1705 2969//1705 2970//1705 3085//1705 1204//1076
+f 1552//785 1556//785 1571//785 1574//785 1573//785 1589//785 3086//785
+f 2236//1142 2482//1706 2216//1092 2054//1707 2053//1707 2055//1707 2057//1707 2056//1707 2047//1707 2046//1707 2045//1707
+f 1871//1708 1869//1708 1867//1708 1906//1418 2358//1417 2483//1709 2484//1710 1868//1708 1866//1708 1870//1708 1872//1708 1924//1421 1904//1420
+f 1875//1711 1843//1711 1848//1711 1874//1711
+f 1117//1712 1118//1712 1112//1712 1115//1712 1076//1712 1080//1712
+f 1314//1713 1313//1713 1302//1713 1300//1713
+f 1882//1714 1838//1714 1839//1714 1878//1714
+f 1887//1715 1883//1715 1895//1715 1926//1715
+f 2096//789 1852//687 2474//1696
+f 2486//1716 2485//1717 1915//687 1859//687 1862//687
+f 2487//1718 2486//1716 1862//1719 1858//1719 1868//1719 2484//1710 2488//1720
+f 2375//1479 1600//687 1646//687 1648//687 2098//795
+f 2826//1721 1835//1721 1833//1721 1855//1721 1870//1721 2829//1721 2978//1721
+f 1855//1722 1854//1722 3087//1722 1872//1722 1870//1722
+f 1347//1723 1346//1723 3088//1723 1367//1723 1363//1723
+f 1854//779 1853//779 3078//779 3087//779
+f 1905//779 1911//779 3036//779 3091//779
+f 1885//779 3091//779 3036//779 1923//779 1924//779 1872//779 3087//779 3078//779
+f 1869//793 1856//793 1861//793 1860//793 1867//793
+f 2202//1065 1336//687 1338//687 2255//1162
+f 1865//1382 1833//1382 1835//1382 1873//1382 3089//1382
+f 2980//1724 2979//1724 2016//1724 2014//1724 2013//1724 2018//1724 2981//1724
+f 1424//737 1423//737 1420//737 1389//737 1388//737
+f 1333//1725 1334//1726 1331//1727 1330//1728 1395//1726 1394//1726 1379//1729 1385//1730 1386//1726
+f 2491//1731 2489//1732 2490//1733 1799//1734 1795//1734 1794//1734 1796//1734 1797//1734 1798//1734 1800//1734 1845//1116 1844//1115 2429//1607
+f 2492//1735 2395//1515 1206//1736 1174//1736 1175//1736 2182//999 2493//1737
+f 1900//726 1838//726 1882//726 1901//726 3090//726
+f 1885//1231 1871//1231 1904//1231 1902//1231 1903//1231 1905//1231 3091//1231
+f 1907//1738 1909//1738 1910//1738 1908//1738 1957//1738 1955//1738 1937//1738 1966//1738 3092//1738 1965//1738
+f 1352//1739 1353//700 1351//699 1408//1740 1406//1741 1403//1741 1402//1741 1404//1741 1399//1742 1398//1741
+f 2494//1743 2426//1605 1717//1744 1719//1744 1720//1744 1718//1744 1769//1744 1772//1744 1738//1744 2103//799
+f 2987//1745 2982//1746 1409//1746 2799//1746 2985//1746 2793//1746 1410//1746 1459//1746 1462//1746 1427//1746 2306//1287 2495//1747
+f 2497//1748 2496//1749 2983//1750 2984//1750
+f 2986//1751 2797//1751 1411//1751 1412//1751 2791//1751
+f 1667//1618 2897//1752 2922//1619
+f 2430//1611 2923//1610 2895//1753 1668//1753 1705//1753 1672//1753 2571//1753 2989//1754 2990//1754 1724//1753 1722//1753 1720//1753 1719//1753 2380//1488 2498//1755 2499//1755
+f 2991//1756 2990//1754 2989//1754
+f 2573//1757 1673//1617 1674//1616 2992//1757 2988//1757
+f 1888//687 2153//933 2500//1758
+f 1889//687 2501//1759 2152//937
+f 1889//1108 1883//1108 1887//1108 2416//1575 2502//1760 2503//1761 2501//1759
+f 1676//1360 1665//1360 1635//1360 1637//1360
+f 1817//1086 1819//1086 1811//1086 1813//1086
+f 2993//1762 2652//1762 1267//1762 1227//1762 1232//1762 1266//1762 2653//1762
+f 2077//731 1075//687 1114//687 1116//687 2109//818
+f 1410//1681 1405//1681 1448//1681 1459//1681
+f 2504//1763 2345//1401 1551//1375 1511//1375 1513//1375 2211//1079
+f 1932//1764 1892//1764 1890//1764 1930//1764
+f 1886//1765 1930//1765 1890//1765 1884//1765
+f 1768//779 1779//779 1766//779 1767//779
+f 1602//1314 1585//1314 1539//1314 1595//1314
+f 1425//1766 1449//1251 1448//1250 1405//1767 1403//1767 1406//1768 1407//1767 1443//1769 1454//1767
+f 2355//1422 1918//1770 1913//1770 1915//1770 2485//1717 2506//1771 2505//1772
+f 1571//1393 1556//1393 1561//1393 1560//1393 1569//1393 1568//1393
+f 2507//1773 2305//1282 1443//1681 1407//1681 1409//1681 2982//1681 2994//1681 2983//1681 2496//1749 2508//1774
+f 2995//923 2876//923 1920//923 1908//923 1910//923 1919//923 2878//923
+f 1083//1132 1081//1132 1074//1132 1072//1132 1086//1132
+f 2996//922 2913//922 1919//922 1910//922 1912//922 1917//922 2912//922
+f 2087//769 1218//947 1216//947 1245//947 2510//1775 2509//1776
+f 2997//1777 2934//1777 2436//1777 2511//1777 2434//1777 2936//1777
+f 1896//687 2264//1183 2346//1405
+f 1856//1778 1853//1778 1854//1779 1855//1778 1857//788 1858//787 1862//1778 1859//1553 1861//1552
+f 2998//1780 2834//1780 1868//1780 1858//1780 1832//1780 1834//1780 2835//1780
+f 2999//829 2943//829 1934//829 1935//829 1940//829 1944//829 1951//829 2944//829
+f 3001//1781 2822//1781 1412//1781 1414//1781 2804//1781
+f 1464//1782 1459//1782 1413//1782 2821//1782 3000//1782 2802//1782 1415//1782 2950//1782 3003//1782 3002//1782 1470//1782 1428//1782
+f 2952//1783 1455//1783 3004//1783
+f 1642//1784 1638//1784 1639//1785 1641//1784 1644//1786 1645//1787 1648//1784 1646//1323 1647//1322
+f 1966//779 3096//779 3092//779
+f 1029//779 2880//779 1964//779 1965//779 3092//779 3096//779 1977//779 2881//779
+f 1967//1433 1957//1433 1908//1433 1920//1433
+f 1967//1712 1917//1712 1912//1712 1957//1712
+f 1477//1788 1475//1788 1432//1788 1430//1788
+f 1586//1789 1582//1789 1581//1789 1585//1789 1602//1789 2621//1789 3006//1789 2892//1789 1590//1789 1626//1789 1605//1789
+f 1630//1790 2890//1790 3005//1790 2622//1790
+f 1980//753 2000//753 1993//753 1949//753
+f 1120//1791 1140//1378 1139//1377 1097//1791 1095//1791 1098//1791 1099//1791 2259//1177 2120//844 1143//1791
+f 3009//1310 3007//1310 1358//1310 1349//1310 1301//1310 1312//1310 3008//1310
+f 3093//1394 1925//1394 1886//1394 1884//1394 1899//1394 3094//1394
+f 2513//1792 2082//747 1952//1712 1914//1712 1916//1712 2909//1712 3010//1712 2910//1712 2412//1565 2512//1793
+f 1080//1794 1076//1794 1074//1794 1081//1794
+f 2515//1795 2514//1796 1962//1797 1958//1797 1970//1797 2449//1636
+f 1939//1798 1937//1798 1955//1798 1972//1798
+f 1128//1231 1159//1231 1181//1231 3095//1231 1180//1231
+f 1132//1106 1131//1106 1157//1106 1156//1106
+f 1881//1394 1877//1394 1842//1394 1841//1394
+f 2516//1799 2410//1569 1938//922 1936//922 1963//922 2083//746
+f 1484//1800 1526//1800 1487//1800 1482//1800
+f 1937//923 1939//923 1977//923 3096//923 1966//923
+f 1984//749 1981//749 1946//749 1945//749
+f 1675//1801 1671//1801 1656//1801 1655//1801
+f 1978//753 1950//753 1991//753 2519//1802 2518//1803 2517//1804 2317//1331
+f 1400//1805 1402//1806 1403//1805 1401//1807 1448//1805 1446//1808 1426//1809 1458//1810 1456//1805
+f 1650//1811 1645//1787 1644//1786 1649//1812 1694//1812 1698//1813 1686//1812 1692//1814 1691//1812
+f 1560//1815 1561//1374 1559//1373 1617//1815 1615//1815 1612//1815 1611//1815 1613//1815 3097//1815 1608//1815 1607//1815
+f 3011//1816 2599//1816 1620//1816 1615//1816 1617//1816 2329//1359 2520//1817 2090//773 2600//1816
+f 1985//1818 1942//1818 1943//1818 1982//1818
+f 2000//752 1984//752 1945//752 1993//752
+f 1507//1819 1505//1819 1518//1819 1520//1819
+f 1503//1820 1505//1821 1506//1820 1504//1822 1557//1820 1555//1823 1531//1820 1566//1824 1565//1820
+f 1706//1825 1660//1825 1661//1694 2473//1693 2521//1826 2522//1827 2223//1105 1716//1825 1714//1825 1711//1825 1710//1825 1712//1825 1707//1825
+f 1167//1828 1166//1829 1133//1830 1127//1831 1113//1832 1111//1833 1130//1834 1128//1835 1180//1836 1161//1837 1168//1834 1129//1834 1131//1834 1132//1834 1170//1834 1174//1838 1160//1834
+f 2174//988 1849//1839 1826//1839 1827//1839 1830//1839 1851//1839 1879//1839 1829//1839 1828//1839 1801//1839 1825//1839 2524//1840 2523//1841 2526//1841 2525//1842
+f 2981//1843 2018//1843 2670//1843
+f 2527//1844 2116//836 2016//1845 2979//1845 2671//1845 2019//1845 2017//1845 2053//1845 2054//1845 2034//1845 2528//1846
+f 1214//1847 1233//1847 1208//1847 1207//1518 2396//1517 2529//1848 2530//1849 1267//1847 1269//1847 1271//1847 1272//1847 3098//1847 1213//1847 1211//1847
+f 1991//687 2140//913 2531//1850 2519//1802
+f 2510//1775 1245//687 2289//1243
+f 2150//927 2291//1245 1234//687
+f 2342//1397 1998//687 2042//687 2044//687 2215//1090
+f 1150//1018 1138//1018 1142//1018 1141//1018 1148//1018 2968//1018 3012//1018 2967//1018
+f 3013//783 2746//783 2026//783 1999//783 1996//783 2027//783 2744//783
+f 2533//1851 2181//1000 1230//1852 1227//1852 1267//1852 2530//1849 2532//1853
+f 1567//1375 1514//1375 1508//1375 1557//1375
+f 1989//1854 2028//1854 1992//1854 1987//1854
+f 2024//749 1989//749 1987//749 2001//749 3099//749
+f 2514//1796 2534//1855 2015//687 1959//687 1962//687
+f 1219//1856 1217//1856 1237//1856 1257//1856
+f 2535//1857 2524//1840 1825//1858 1799//1858 2490//1733 2537//1859 2536//1860
+f 3014//1861 2916//1861 1916//1861 1914//1861 1913//1861 1918//1861 2915//1861
+f 2166//974 2018//1862 2013//1862 2015//1862 2534//1855 2538//1863 2539//1864
+f 1830//1173 1827//1173 1798//1173 1797//1173 1831//1173
+f 2541//1865 2540//1866 1947//1867 1979//1867 2441//1624
+f 1692//821 1686//821 1690//821 2639//821 3015//821 2640//821 2138//896 2542//1868 2543//1869 2417//1578
+f 2012//1794 2017//1794 2019//1794 2010//1794
+f 3007//1870 3016//1870 2774//1870 1363//1870 1358//1870
+f 3017//1871 3008//1871 1312//1871 1311//1871 1313//1871 1314//1871 1355//1871 1368//1871 1327//1871 2775//1871
+f 3018//1872 2872//1872 1527//1872 1489//1872 1487//1872 1526//1872 2874//1872
+f 2544//1873 2415//1577 1874//733 1848//733 1888//733 2500//1758
+f 1280//1007 1278//1007 1294//1007 3100//1007 1316//1007
+f 1944//1874 1940//1874 1941//1874 1943//1874 1946//911 1947//910 2540//1866 2545//1875 2546//1876 2261//1186 1948//1185
+f 2036//721 2039//721 2046//721 2047//721 2030//721 2031//721
+f 2007//735 2051//735 3101//735 3102//735 2050//735 2022//735
+f 2104//808 2547//1877 2100//797 1678//1878 1680//1878 1681//1878 1683//1878 1682//1878 1653//1878 1652//1878 1651//1878
+f 2020//735 2053//735 2040//735 2008//735
+f 2034//1879 2054//1879 2041//1879 2032//1879
+f 1935//779 1893//779 1892//779 1932//779 1933//779 2930//779 1032//779 2928//779 1983//779 1941//779 1940//779
+f 1249//842 1239//842 1188//842 1200//842
+f 2035//1880 2033//1880 2038//1880 2055//1880
+f 2049//687 2048//687 2115//835 2548//1881
+f 2549//1882 2528//1846 2034//1794 2032//1794 2049//1794 2548//1881 2550//1883
+f 1179//779 1161//779 1180//779 3095//779 3041//779
+f 1181//779 2561//779 1045//779 2564//779 1205//779 3041//779 3095//779
+f 2050//779 3102//779 3066//779
+f 3101//779 3065//779 3066//779 3102//779
+f 2051//779 2052//779 2058//779 3065//779 3101//779
+f 2052//1132 2033//1132 2035//1132 2058//1132
+f 2110//817 2076//732 2077//731 2109//818
+f 2257//1170 2123//854 2124//853 2146//918
+f 2182//999 2181//1000 2533//1851 2493//1737
+f 2310//1289 2199//1061 2200//1060 2201//1059 1250//1884
+f 2445//1632 2186//1023 2187//1022 2213//1084 2446//1633
+f 2310//1289 1250//1884 2309//1290
+f 2221//1100 1251//1885 2220//1094
+f 2422//1593 2286//1238 2219//1095 2220//1094 1251//1885
+f 2255//1162 2253//1161 1250//1885 2201//1059 2202//1065
+f 2424//1600 2423//1599 1253//1886 2409//1560 2408//1560 2407//1563
+f 2295//1266 2409//1560 1253//1886 2377//1483 2294//1267
+f 2287//1239 2288//1241 1251//1886 2221//1100 2218//1099
+f 2326//1352 2312//1294 2313//1297 2315//1312 2325//1349
+f 2352//1410 1253//1887 2423//1599 2350//1411
+f 2314//1311 2324//1350 2325//1349 2315//1312
+f 2121//846 2122//847 2349//1407 2328//1356
+f 2369//1473 2372//1476 2361//1428 2362//1431
+f 2098//795 2099//794 2374//1480 2375//1479
+f 2405//1543 2406//1544 2417//1578 2543//1869
+f 2158//941 2157//940 2420//1583 2421//1582
+f 2537//1859 2490//1733 2489//1732 2491//1731 1260//1888
+f 2537//1859 1260//1888 2536//1860
+f 2467//1679 2379//1485 2230//1120 2229//1119 2455//1647
+f 2155//938 1262//1889 2154//932
+f 2500//1758 2153//933 2154//932 1262//1889 2544//1873
+f 2429//1607 2168//981 2169//980 1260//1889 2491//1731
+f 2546//1876 2545//1875 1263//1890 2263//1182 2262//1182 2261//1186
+f 2346//1405 2264//1183 2263//1182 1263//1890 2347//1402
+f 2501//1759 2503//1761 1262//1890 2155//938 2152//937
+f 2140//913 2141//912 2337//1386 2531//1850
+f 2519//1802 2531//1850 2337//1386 2339//1385 2518//1803
+f 2541//1865 1263//1891 2545//1875 2540//1866
+f 2215//1090 2214//1089 2341//1398 2342//1397
+f 2115//835 2117//834 2550//1883 2548//1881
+f 2514//1796 2515//1795 2538//1863 2534//1855
+f 2083//746 2082//747 2513//1792 2516//1799
+f 2485//1717 2486//1716 2487//1718 2506//1771
+f 2469//1684 2457//1655 2456//1654 2458//1653 1270//1892
+f 2469//1684 1270//1892 2468//1685
+f 2475//1697 2272//1199 2097//790 2096//789 2474//1696
+f 2300//1274 1273//1893 2298//1270
+f 2297//1271 2298//1270 1273//1893 2101//798 2102//801
+f 2458//1653 2285//1235 2284//1234 2453//1644 1270//1893
+f 2521//1826 2473//1693 2471//1692 2472//1691 1275//1894 2522//1827
+f 2223//1105 2522//1827 1275//1894 2381//1487 2222//1104
+f 2299//1273 2425//1604 2428//1603 1273//1895 2300//1274
+f 2128//856 2399//1529 2397//1528 2127//857
+f 2196//1051 1275//1896 2472//1691 2195//1047
+f 2404//1540 2126//855 2127//857 2397//1528 2398//1530
+f 2329//1359 2330//1358 2383//1491 2520//1817
+f 2344//1400 2345//1401 2504//1763 2354//1415
+f 2450//1639 2451//1638 2389//1502 2390//1501
+f 2303//1283 2305//1282 2507//1773 2307//1286
+f 2332//1368 2193//1045 2194//1044 2331//1369
+f 2464//1670 1282//1897 2385//1497 2386//1496 2463//1671
+f 2234//1137 2130//867 2129//866 2231//1133 2233//1135
+f 2385//1497 1282//1897 2384//1498
+f 2510//1775 2289//1243 2290//1242 1283//1898 2509//1776
+f 2464//1670 2147//921 2148//920 2184//1012 1282//1899
+f 2292//1246 1283//1898 2290//1242
+f 2292//1246 2291//1245 2150//927 2149//926 1283//1900
+f 2134//877 2275//1212 1284//1900 2113//830 2112//833
+f 2334//1381 2335//1380 1284//1900 2275//1212 2274//1212 2273//1211
+f 2459//1662 1284//1901 2335//1380 2336//1379
+f 2459//1662 2460//1661 1284//1901
+f 2260//1176 2094//781 2095//784 2120//844 2259//1177
+f 2301//1276 2161//950 2162//949 2302//1277
+f 2060//686 2059//688 2063//692 2064//706
+f 2118//838 2227//1110 2075//728 2076//732 2110//817 2111//820 2119//839
+f 2074//729 2075//728 2227//1110 2228//1112
+f 2256//1169 2392//1519 2125//851 2123//854 2257//1170
+f 2073//716 2071//716 2069//716 2070//715 2125//851 2392//1519 2393//1522 1457//687 2391//1513 2072//717
+f 2492//1735 2493//1737 2533//1851 2532//1853
+f 2532//1853 2530//1849 2529//1848 2396//1517 2394//1516 2395//1515 2492//1735
+f 2322//1344 2320//1344 2308//1291 2309//1290 1250//687 2321//1345
+f 2447//1634 2446//1633 2213//1084 2212//1083
+f 2142//916 2447//1634 2212//1083 2143//917
+f 2422//1593 1251//687 2276//1213 2277//1216
+f 2253//1161 2254//1165 1250//687
+f 2319//1342 2321//1345 1250//687 2254//1165 2252//1164 2340//1389
+f 1253//687 2376//1481 2377//1483
+f 2278//1214 2276//1213 1251//687 2288//1241
+f 2376//1481 1253//687 1467//687 2241//1148 2242//1147 2078//742 2081//741 2079//741 2080//740
+f 1467//687 1253//687 2351//1409 2240//1146 2753//1145 3019//687
+f 2352//1410 2351//1409 1253//687
+f 2311//1295 2312//1294 2326//1352 2323//1351
+f 2368//1471 2367//1471 2327//1357 2328//1356 2349//1407 2068//712 2067//711 2066//710
+f 2372//1476 2370//1475 2465//1675 2360//1429 2361//1428
+f 2370//1475 2371//1474 2465//1675
+f 2373//1477 2374//1480 2099//794 2100//797 2547//1877 2104//808 2105//807
+f 2108//811 2106//811 2107//810 2373//1477 2105//807
+f 2542//1868 2139//901 2136//900 2405//1543 2543//1869
+f 3020//687 2647//898 2139//901 2542//1868 2138//896 2137//895 1481//687
+f 2419//1580 2420//1583 2157//940 2156//944
+f 2402//1537 2403//1537 2401//1537 2400//1536 2419//1580 2156//944 2159//943 2173//985 2172//984
+f 2536//1860 1260//687 2535//1857
+f 2466//1678 2378//1486 2379//1485 2467//1679
+f 2526//1841 2523//1841 2524//1840 2535//1857 1260//687 2525//1842
+f 2544//1873 1262//687 2414//1574 2415//1577
+f 2169//980 2171//979 1260//687
+f 2525//1842 1260//687 2171//979 2170//978 2175//989 2174//988
+f 2364//1463 2366//1463 2363//1463 2348//1403 2347//1402 1263//687 1493//687 2439//1626 2365//1464
+f 2503//1761 2502//1760 1262//687
+f 2416//1575 2414//1574 1262//687 2502//1760
+f 2338//1384 2517//1804 2518//1803 2339//1385
+f 2438//1623 2440//1622 1493//687 1263//687 2541//1865 2441//1624
+f 2318//1332 2317//1331 2517//1804 2338//1384
+f 2214//1089 2217//1093 2343//1399 2341//1398
+f 2239//1141 2237//1141 2238//1140 2343//1399 2217//1093 2216//1092 2482//1706 2236//1142
+f 2549//1882 2550//1883 2117//834 2116//836 2527//1844
+f 2549//1882 2527//1844 2528//1846
+f 2449//1636 2448//1635 2163//969 2164//968 2539//1864 2538//1863 2515//1795
+f 2539//1864 2164//968 2167//975 2165//975 2166//974
+f 2512//1793 2413//1570 2410//1569 2516//1799 2513//1792
+f 3021//687 2917//1567 2413//1570 2512//1793 2412//1565 2411//1564 1510//687
+f 2505//1772 2506//1771 2487//1718 2488//1720
+f 2357//1416 2359//1416 2356//1416 2355//1422 2505//1772 2488//1720 2484//1710 2483//1709 2358//1417
+f 2470//1686 2468//1685 1270//687
+f 2316//1327 2271//1200 2272//1199 2475//1697
+f 2248//1152 2245//1152 2246//1151 2470//1686 1270//687 2247//1153
+f 1273//687 2494//1743 2103//799 2101//798
+f 1270//687 2453//1644 2454//1646
+f 2190//1041 2189//1040 2188//1039 2247//1153 1270//687 2454//1646
+f 1273//687 2428//1603 2427//1606
+f 2499//1755 2498//1755 2380//1488 2381//1487 1275//687 1523//687 2431//1613 2432//1612 2430//1611
+f 2494//1743 1273//687 2427//1606 2426//1605
+f 1275//687 2196//1051 2198//1050
+f 2204//1068 2203//1067 2404//1540 2398//1530
+f 2433//1615 1523//687 1275//687 2198//1050 2197//1049
+f 2092//774 2091//774 2090//773 2520//1817 2383//1491 2382//1493 2442//1628 2089//770
+f 2354//1415 2504//1763 2211//1079 2209//1078 2353//1414
+f 2210//1081 2353//1414 2209//1078
+f 2452//1641 2476//1698 2265//1188 2266//1187 2388//1503 2389//1502 2451//1638
+f 2269//1194 2268//1194 2267//1193 2388//1503 2266//1187
+f 2507//1773 2508//1774 2495//1747 2306//1287 2307//1286
+f 3022//687 2987//1745 2495//1747 2508//1774 2496//1749 2497//1748 1540//687
+f 2332//1368 2333//1371 2192//1046 2193//1045
+f 2444//1631 2443//1631 2191//1042 2192//1046 2333//1371 2250//1156 2251//1155 2249//1154
+f 2387//1499 2384//1498 1282//687
+f 2234//1137 2233//1135 2232//1134 2235//1136
+f 2180//997 2178//997 2177//996 2387//1499 1282//687 2179//998
+f 2183//1014 2293//1265 2176//991 2179//998 1282//687 2185//1015
+f 2509//1776 1283//687 2086//766 2087//769
+f 2185//1015 1282//687 2184//1012
+f 2088//767 2086//766 1283//687 2151//925
+f 2151//925 1283//687 2149//926
+f 2206//1071 2208//1071 2205//1071 2114//831 2113//830 1284//687 1554//687 2479//1704 2207//1072
+f 2481//1702 2480//1701 1554//687 1284//687 2461//1660 2462//1659
+f 2461//1660 1284//687 2460//1661
+f 2094//781 2260//1176 2258//1178 2093//782
+f 2283//1228 2282//1228 2160//951 2161//950 2301//1276 2280//1226 2281//1225 2279//1224
+f 2270//1197 2065//707 2064//706 2063//692 2061//691
+f 2062//690 2270//1197 2061//691
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/forest.obj 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/forest.obj
--- 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/forest.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/forest.obj	2025-08-26 18:15:43.674003796 +0000
@@ -0,0 +1,16998 @@
+# Forest
+# (C) Linux Studio Plugins Project
+o Crown
+v -9.895969 35.479290 14.013926
+v -5.380883 35.666012 14.227640
+v -7.404320 23.177568 11.895271
+v -14.647302 28.641973 24.711975
+v -7.428742 22.615034 24.835541
+v -5.686970 31.226931 26.467739
+v -16.076418 24.250683 20.892681
+v -1.790244 24.072596 23.693195
+v -5.978638 35.671055 23.447992
+v -8.310428 36.718529 24.392963
+v -3.108002 28.703119 11.544284
+v -1.123244 22.278435 17.270899
+v -39.657166 22.814989 8.848895
+v -33.749100 15.949165 11.649615
+v -46.603741 19.476385 9.387616
+v -40.634018 13.318188 7.144238
+v -46.883488 14.116743 10.321175
+v -42.672493 23.833834 26.330425
+v -47.029388 19.361547 27.707066
+v -38.501438 20.527016 30.676020
+v -48.670013 14.355245 26.795237
+v -40.413631 13.001769 30.778492
+v -34.946953 11.185138 14.506185
+v -22.847408 23.541864 12.564294
+v -16.926674 16.507963 14.882776
+v -26.631554 16.023252 13.978514
+v -19.652924 24.101402 15.103592
+v -20.606571 13.344411 18.033724
+v -18.440197 14.622607 18.314457
+v -17.104591 15.141989 22.103821
+v -18.521372 14.566157 19.343166
+v -18.071518 14.799095 19.861532
+v -16.688404 13.070149 23.118416
+v -17.537802 15.633451 18.999987
+v -16.840054 23.664583 22.178608
+v -25.148102 14.494662 16.108213
+v -27.073273 -18.908781 22.562195
+v -28.648336 -24.263647 21.915804
+v -21.156857 -30.177658 24.556507
+v -51.818203 10.548554 21.932489
+v -55.252663 21.654184 22.945597
+v -55.813107 16.988625 15.187379
+v -41.682373 -45.441078 25.841000
+v -32.428368 -48.612671 25.483934
+v -33.728878 -41.580402 29.684542
+v -38.746525 -32.665714 27.285780
+v -41.569859 -47.305611 20.447071
+v -32.984081 -49.091175 19.027372
+v -39.186592 -40.233845 8.305207
+v -34.654587 -48.859863 13.548094
+v -42.064159 -46.166122 15.211730
+v -34.429230 -40.413372 6.560294
+v -9.865637 -6.499537 21.445642
+v -10.441173 -14.979115 20.932722
+v -11.068961 -7.137710 13.893541
+v -24.252350 -15.642059 16.038332
+v -25.355597 -8.256391 13.809445
+v -20.992397 -8.979524 10.474286
+v -31.931261 -32.985214 25.038759
+v -33.079006 -27.707705 30.120039
+v -36.257172 -25.034061 6.734976
+v -29.835154 -24.067047 13.663328
+v -31.933687 -29.429136 8.587285
+v -32.550236 -36.104744 31.768322
+v -24.566648 -39.388500 22.460848
+v -29.535976 -48.485096 13.366223
+v -25.926025 -36.687244 11.992317
+v -31.939625 -33.659809 12.720390
+v -56.387730 -20.436485 18.646128
+v -55.361774 -13.907925 19.633511
+v -50.262123 -12.663896 14.278434
+v -51.513729 -15.794893 25.423538
+v -52.920334 -23.358677 22.348352
+v -53.042297 -24.374872 16.335270
+v -51.342937 -23.799046 12.870684
+v -26.416439 8.310908 11.311706
+v -28.917997 10.299225 18.765276
+v -26.879524 13.542326 18.711792
+v -28.531401 12.018619 21.875906
+v -28.534714 7.110866 22.529676
+v -21.897049 9.677612 25.903620
+v -21.262657 5.537391 22.751749
+v -23.530899 13.151744 23.310141
+v -19.069868 8.088080 16.329256
+v -22.617908 5.004672 14.750255
+v -54.669422 -26.508944 18.966293
+v -3.366998 1.837570 20.233490
+v -6.614962 0.424046 15.960486
+v 0.183549 9.501696 14.522128
+v -5.956057 10.337846 26.521885
+v 1.787302 9.063901 19.360081
+v -2.367474 11.218024 24.743721
+v -5.661831 14.090223 23.349506
+v -7.019094 9.154321 11.005136
+v -2.607183 15.474751 15.002557
+v -42.111328 -28.118114 10.270661
+v -38.150051 -21.351961 11.027141
+v -34.413578 -20.127150 24.830158
+v -42.016479 -25.643583 28.305817
+v -34.459698 -20.462624 14.252443
+v -9.378195 11.325799 10.253020
+v -14.369601 2.473120 10.766763
+v -15.987492 5.346167 25.624794
+v -11.092683 -1.489885 25.649822
+v -17.984217 8.312402 18.769857
+v -16.626694 10.694278 14.015684
+v -12.616532 13.516092 14.548169
+v 2.112165 48.669716 24.103308
+v 8.467217 47.843548 24.398701
+v 7.958755 50.908497 17.386124
+v -1.400168 50.255417 16.941250
+v 5.281566 40.774647 11.295982
+v 4.185067 48.020458 12.433568
+v 9.412293 46.283161 12.746543
+v 3.743878 26.847904 26.957762
+v 6.579345 21.586445 20.462740
+v 9.896100 28.585203 23.893988
+v 0.965423 30.825830 7.896383
+v 10.153297 28.049286 14.714079
+v 6.552656 32.432453 10.630872
+v -6.788886 17.488861 12.065185
+v -15.380396 24.915234 15.999951
+v -1.121172 14.760348 20.191927
+v -10.656146 14.391703 24.740520
+v -14.078320 16.739277 24.362341
+v -17.130117 15.246751 15.719363
+v -18.630856 14.440638 19.217348
+v -25.418104 -23.590103 15.412292
+v -24.771202 -19.180321 14.829666
+v -18.077417 -23.661953 3.271728
+v -18.518377 -21.994989 34.252022
+v -16.628391 -13.586509 26.141644
+v -23.276466 -16.741055 22.673346
+v -13.540224 -32.552528 19.752583
+v -7.771930 -22.281815 28.930004
+v -21.726034 -29.796326 12.354136
+v -8.533779 -20.341612 7.669467
+v -14.421008 -14.290253 12.159369
+v -49.325005 25.558474 13.482531
+v 19.387854 59.252129 22.267399
+v 22.491163 57.569500 16.040350
+v 13.234011 57.436790 15.635386
+v 9.638877 51.399784 22.671759
+v 16.955034 47.250950 26.015110
+v 28.675983 49.396381 17.181528
+v 25.059080 42.021248 19.456224
+v 13.291681 47.026306 24.624399
+v 11.793038 42.360619 21.921587
+v 13.142259 40.551575 18.504881
+v 12.225047 42.004711 16.066782
+v 14.000075 49.079582 14.970160
+v 18.359221 49.962238 10.338776
+v -52.862358 -34.264717 9.620932
+v -43.621674 -32.095604 6.878080
+v -46.618427 -41.083172 3.671414
+v -46.390720 -39.512814 35.001308
+v -50.296890 -45.051258 26.829195
+v -55.418591 -35.786549 20.051340
+v -46.246613 -32.224361 30.956097
+v -49.229710 -45.559502 11.025587
+v -37.415291 -34.811852 13.605999
+v -53.787132 -39.886898 11.345936
+v -25.318718 38.962429 21.081280
+v -27.204136 45.697887 22.652021
+v -30.547461 35.193336 23.523487
+v -30.064581 51.126778 24.591257
+v -34.835617 43.907993 33.920719
+v -41.979126 40.632305 29.658566
+v -37.940464 36.157837 29.336056
+v -39.806156 34.757633 15.013452
+v -41.776482 39.405231 8.149786
+v -34.408009 43.599689 3.600887
+v -31.987431 34.953194 13.596235
+v -27.357553 36.828373 14.729976
+v -30.751001 48.831043 12.556555
+v -40.512836 48.832851 10.373843
+v -43.582924 45.773106 11.788169
+v -32.273361 11.228068 21.188597
+v -33.748505 15.410755 24.695457
+v -34.636520 11.083464 22.411613
+v -53.226860 39.069622 14.631045
+v -46.796467 50.906189 14.736220
+v -49.898144 42.298828 9.762142
+v -54.209095 43.072975 20.585543
+v -43.407139 46.011845 25.555250
+v -47.200302 49.853748 23.916466
+v -49.256340 44.763550 26.406349
+v -45.723469 52.313808 20.774521
+v -51.632874 4.044853 22.230829
+v -46.510475 -7.462652 21.607405
+v -43.456871 -1.158317 25.040287
+v -50.385246 -5.742570 17.853115
+v -51.049553 3.265749 14.996106
+v -42.923450 -0.679802 12.168762
+v -45.876484 -6.425848 15.019959
+v -23.437487 34.993896 10.700077
+v -19.843262 30.795164 10.336315
+v -27.816593 29.315857 7.033534
+v -26.269381 27.770073 29.903175
+v -20.754969 24.443159 23.753378
+v -22.023731 32.911613 27.407383
+v -25.864132 37.018246 23.215330
+v -1.844899 43.074276 5.002682
+v -1.146232 37.413094 8.478641
+v -0.281424 39.419250 30.363539
+v -4.690264 49.029530 29.151699
+v 7.597122 42.056717 25.822943
+v -8.502994 40.438461 13.781722
+v -4.774222 46.248508 9.021049
+v -31.918242 -4.319633 11.480845
+v -35.171280 -15.436777 13.428601
+v -40.704792 -11.967947 11.301149
+v -44.985775 -9.229341 23.566895
+v -38.416271 -13.535175 26.325489
+v -31.327335 -5.171664 26.053547
+v -46.936703 -10.629478 17.359179
+v -39.620586 -3.531641 11.134545
+v -47.711578 39.079773 30.503895
+v -50.137951 34.425533 23.087048
+v -42.184765 33.009602 22.050295
+v -45.943676 32.698765 14.462934
+v -26.602791 51.445286 22.595451
+v -29.269453 54.818874 16.074282
+v -26.262545 51.475792 16.034393
+v -17.565493 -9.089666 28.202396
+v -25.992033 -9.914518 23.431479
+v -26.621880 -15.469988 22.325060
+v -36.685898 28.106234 4.026008
+v -33.180382 23.140228 6.570333
+v -32.906857 23.951517 31.203979
+v -42.073078 31.315683 23.885067
+v -42.498482 31.435339 15.824010
+v -29.576429 17.385733 14.490797
+v -29.716820 17.190155 22.342150
+v -21.269781 19.180876 25.861032
+v -27.906006 23.105791 24.494249
+v -26.690504 14.633672 21.333874
+v -28.126110 23.763937 13.049232
+v -41.221352 58.124882 14.597529
+v -36.980564 58.958801 21.687395
+v -41.223595 49.640896 26.714741
+v -49.516834 6.902267 6.133211
+v -38.190441 5.056540 6.282091
+v -44.800316 5.944230 33.654053
+v -36.892063 5.002528 31.348896
+v -11.200670 52.841805 23.807169
+v -8.532572 52.940174 15.360593
+v -11.005611 50.520481 12.718217
+v -19.491615 -36.777016 17.623058
+v -18.050842 46.934547 27.599676
+v -12.130248 45.114960 24.553143
+v -17.915726 51.818001 26.222578
+v -18.218269 54.194241 15.652226
+v -16.953917 49.449566 9.530991
+v -10.973335 45.279762 12.677428
+v -30.435791 8.604504 15.500196
+v -49.623135 -52.713230 20.935244
+v -58.902790 -47.080486 19.494463
+v -52.076813 -27.704601 6.085051
+v -47.516048 -25.790674 33.000961
+v -54.043770 -35.562145 26.338427
+v -52.207699 -23.252588 26.587193
+v -28.333250 4.948416 24.728697
+v -39.055199 -3.615182 26.536812
+v -28.721029 0.198779 27.872005
+v -28.175322 6.115002 13.597713
+v -34.505619 -0.100839 4.777629
+v -49.200527 31.657768 20.566143
+v -48.293800 25.995926 24.063643
+v -52.307907 26.019478 20.583181
+v -43.070473 28.956566 12.757126
+v -52.579803 21.813358 11.453225
+v -31.326757 18.660608 28.124039
+v -12.012721 8.750047 25.704016
+v -13.841231 28.619030 13.585730
+v 11.514491 35.425179 9.775723
+v 5.630617 36.387905 8.028480
+v 12.422758 31.699057 18.915659
+v 13.902237 36.586124 27.121403
+v 4.631190 40.448215 27.973349
+v 8.138681 34.150703 28.187872
+v -21.595133 -3.853446 13.393011
+v -29.192629 0.009586 10.549155
+v -21.826885 -4.296218 24.195898
+v -33.332829 -14.469148 23.773960
+v -28.068357 -16.930752 15.096349
+v -30.070562 -11.308423 12.275679
+v -20.092710 44.521152 9.290308
+v -23.646534 43.179173 23.967453
+v -27.078768 45.857090 15.082612
+v -16.151651 -5.275211 11.947135
+v -31.474691 -17.973907 11.331980
+v -45.845596 -18.539948 4.231117
+v -43.533085 -13.407528 33.673676
+v -23.384087 43.178341 14.168326
+v -15.447248 42.499531 34.205780
+v -13.799445 37.581593 4.484079
+v -1.485334 -4.768677 16.441084
+v 0.990863 3.773858 18.210627
+v 6.563632 -0.912908 9.850243
+v 11.402965 -5.592093 11.603754
+v 5.537499 -9.253227 13.180626
+v 4.516082 1.721025 26.215675
+v 6.013690 -8.535444 25.300470
+v 10.858533 -3.847974 27.103037
+v -0.287629 -5.038112 23.010605
+v 37.171562 39.057941 9.635967
+v 43.883453 42.290691 11.913845
+v 42.673752 32.244225 5.969173
+v 36.053696 36.531803 28.016653
+v 42.701332 32.048080 31.020395
+v 40.998718 37.155308 31.645117
+v 48.220886 35.431629 27.995396
+v 46.421406 41.008530 25.854618
+v 40.209576 42.777225 23.977547
+v 52.896511 35.087864 19.908916
+v 48.391911 37.592152 12.257603
+v 29.647915 33.310364 13.540412
+v 34.076965 32.131840 10.952720
+v 27.393103 25.738691 10.959026
+v 30.000772 21.253088 14.618254
+v 29.330910 27.972450 26.005974
+v 28.000101 22.218475 24.543472
+v 38.600613 24.689884 24.907940
+v 33.084686 20.198334 23.147635
+v 36.127934 31.922668 26.492624
+v 46.822708 -9.669147 15.778248
+v 47.838448 -4.723413 13.665525
+v 52.999279 -7.089017 17.457773
+v 48.786335 -7.725429 22.526346
+v 49.846275 -12.027504 19.452547
+v 8.613027 19.542593 15.392542
+v 13.379941 26.063862 10.294264
+v 19.137705 31.291744 15.210695
+v 16.568653 23.338900 28.841660
+v 22.274111 24.514984 25.045977
+v 18.718618 30.751129 23.285555
+v 8.706417 20.179546 23.776596
+v 20.776112 25.007637 11.814616
+v 14.611459 -8.989391 10.584811
+v 15.600273 -12.889729 15.745891
+v 9.245645 -10.518223 14.408474
+v 15.438982 -10.486468 22.742517
+v 14.946573 -3.880591 23.439877
+v 15.753674 -4.041759 15.382051
+v 34.050961 16.204947 22.473043
+v 39.742748 10.021585 24.862040
+v 43.197193 14.084881 22.450399
+v 33.306458 8.812641 22.539850
+v 43.154327 19.963009 25.168192
+v 43.629879 19.959751 12.282477
+v 43.232925 13.601892 14.924575
+v 38.149174 15.736522 12.774162
+v -18.371254 -45.935623 13.539957
+v -13.955760 -40.780773 15.931536
+v -11.848386 -47.525585 12.572204
+v -12.442296 -49.179916 23.843197
+v -15.552944 -46.948574 26.203268
+v -16.526066 -50.458138 18.226341
+v -16.452782 -42.089096 23.640570
+v 28.842489 6.216216 23.116192
+v 32.676346 3.171885 24.915176
+v 6.854543 -13.993800 24.004509
+v -0.586581 -14.562154 19.469290
+v 2.897735 -16.863050 16.109083
+v 9.003305 -13.685594 11.248670
+v 54.669838 -51.265110 16.759251
+v 55.613960 -40.383442 14.756228
+v 56.150078 -38.344955 19.151777
+v 43.744640 -46.793381 26.688042
+v 46.982037 -52.432190 22.295914
+v 53.071053 -44.555691 26.233637
+v -7.738588 -52.672237 24.043783
+v -9.670598 -57.607391 17.088793
+v -3.421839 -54.212276 15.366936
+v -0.150195 -51.188038 21.384148
+v 10.419623 2.592220 7.218241
+v 4.721716 5.161764 15.572896
+v 11.519389 1.488911 30.244236
+v 15.299103 5.748399 22.217640
+v 10.921441 7.521700 22.474010
+v 16.454771 1.426673 23.449594
+v 5.786369 6.282103 22.072739
+v 16.519609 -0.322135 15.162696
+v 15.043739 5.659193 15.636939
+v 11.031728 7.869153 14.937606
+v 18.211880 -3.436537 23.969414
+v 24.692303 -11.008053 19.712708
+v 21.098881 -13.082272 20.094118
+v 24.661165 -6.375411 21.134802
+v 26.236216 -6.092238 15.336308
+v 21.509342 -12.401914 15.370428
+v 18.963205 -3.483418 12.304599
+v 21.800573 -4.939500 15.745810
+v 1.920824 -29.876616 15.664814
+v 6.503211 -22.519501 16.914911
+v 7.756294 -26.548792 12.504924
+v 12.373317 -30.331326 13.897794
+v 6.961779 -31.440474 12.794598
+v 6.653064 -24.537306 23.416155
+v 7.047717 -30.885683 24.353041
+v 11.213727 -29.932859 25.052618
+v 1.481550 -28.946180 20.623463
+v 13.032862 -24.780552 15.023675
+v 18.512293 -19.128895 19.659231
+v 14.878583 -18.994576 9.368382
+v 16.297819 -21.089434 21.421986
+v 12.863385 -14.312878 27.956732
+v 12.849613 -24.918884 23.950907
+v 19.052221 -18.128923 23.528669
+v 17.840883 -16.959543 20.954525
+v 7.721829 -20.685816 12.375637
+v 2.692099 -35.607121 13.021980
+v 13.810658 -34.493698 11.373639
+v 12.986875 -41.732285 10.040227
+v 3.184423 -41.658894 25.635220
+v 5.125894 -45.547562 23.724890
+v 8.980864 -43.054161 27.022717
+v 15.423323 -43.972950 26.255270
+v 12.117069 -47.304020 23.635054
+v 15.377462 -36.897743 26.000687
+v 2.953060 -40.166664 10.811060
+v 7.494678 -47.185505 14.545302
+v 2.590407 -43.739830 14.077184
+v 51.648987 -32.096954 12.447517
+v 54.149975 -33.345398 19.593710
+v 39.163303 -34.490200 23.470026
+v 43.952961 -37.913185 33.311733
+v 42.212021 -30.621904 22.970434
+v 39.066399 -42.491398 26.281698
+v 53.753803 -38.317574 30.712576
+v 49.845421 -30.871805 26.485779
+v 51.399380 -45.699734 10.188414
+v 47.700748 -38.817028 2.614275
+v 38.286346 -35.291550 13.221107
+v 37.845669 -42.342354 10.963897
+v 42.038383 -30.425079 14.298316
+v 13.245769 -46.732723 14.205633
+v 9.736148 -50.520622 13.528756
+v 7.384904 -49.586498 23.197527
+v 14.800404 -52.139919 18.903181
+v -7.811834 -35.470352 17.615807
+v -4.456628 -29.150898 17.851286
+v -2.798553 -35.285934 12.466820
+v -3.746229 -33.168358 24.304583
+v 1.984330 -35.948078 24.157682
+v -7.404144 -35.999741 20.923605
+v 28.157717 -53.608944 22.400635
+v 26.977524 -52.598415 13.049956
+v 33.552643 -51.894318 16.162474
+v 32.504086 -48.823231 23.956696
+v 31.877079 -44.802273 26.086206
+v 29.367491 -43.694912 29.450382
+v 28.566246 -48.574947 11.502800
+v 33.115898 -47.055805 12.686707
+v 24.206554 -39.593639 4.270044
+v 27.548977 -45.541843 6.612158
+v 15.393753 -43.690216 11.271212
+v 30.908010 -38.156868 26.637539
+v 27.162384 -34.275162 21.994907
+v 25.159807 -51.111664 26.578672
+v 20.757282 -44.062077 33.331715
+v 22.252340 -35.465645 28.516508
+v 31.252834 -40.715645 10.509001
+v 26.927588 -34.082474 15.359171
+v 19.656054 -36.053593 9.639797
+v 45.765636 -13.973154 27.862347
+v 46.415920 -8.703913 23.003519
+v 36.929607 -14.307747 25.120790
+v 42.108009 -17.975418 26.418495
+v 37.027626 -17.187891 11.322680
+v 41.904827 -7.746933 12.069323
+v 43.418411 -12.615541 10.889720
+v 31.705950 -0.889089 21.311972
+v 31.596783 0.173674 16.887688
+v 32.879227 -3.863622 16.099096
+v 56.598171 44.222664 14.135714
+v 56.126579 41.685612 24.097790
+v 46.016529 51.054924 17.982958
+v 41.457779 43.755310 17.495853
+v 45.744934 7.004910 8.486133
+v 47.950413 2.914732 9.144629
+v 39.484081 -0.296449 3.515921
+v 39.492188 6.289592 31.046570
+v 34.259609 -5.722099 24.223930
+v 40.802071 -0.616874 34.230507
+v 48.363464 -3.229798 24.156942
+v 43.601437 -6.735396 25.488052
+v 47.918850 3.330933 28.374479
+v 31.612331 2.911034 12.928380
+v 36.470207 8.474887 12.911393
+v 21.732849 29.642706 10.338936
+v 25.993967 33.840034 11.623634
+v 26.784376 30.821098 30.164936
+v 23.366001 37.263168 21.464516
+v 29.125948 32.332874 23.209608
+v 24.842190 22.159437 12.758190
+v 37.656689 27.913548 13.499913
+v 33.509411 16.934435 15.837155
+v 32.151718 -22.648123 15.113968
+v 37.990620 -22.384092 10.205639
+v 25.069052 18.695292 9.179921
+v 30.055744 7.532913 13.873595
+v 20.188122 11.596370 9.113315
+v 29.900843 16.979473 30.097618
+v 32.693932 10.153449 14.913280
+v 34.166367 -15.722364 23.131659
+v 36.833443 -11.025159 22.317991
+v 35.003426 -14.101405 14.965216
+v 34.727409 -31.472963 23.933300
+v 34.842621 -32.087627 13.601885
+v 15.901428 18.893017 3.795186
+v 15.133305 15.761583 32.886993
+v 11.565284 11.158407 25.684263
+v 19.438553 8.925119 23.790083
+v 21.500917 10.431974 27.603918
+v 24.985023 19.122496 25.926376
+v 12.856858 10.261971 11.739075
+v 20.020798 8.643314 13.859782
+v 19.576733 -57.512779 21.695282
+v 13.490202 -51.342026 16.888437
+v 17.947104 -50.731331 11.141426
+v 57.236275 20.636795 21.096426
+v 54.446712 17.739677 12.818709
+v 51.168236 23.226536 5.362507
+v 47.641693 25.705559 31.127163
+v 51.583134 16.009533 26.750132
+v 50.932129 26.958969 30.104025
+v 54.485348 28.484575 16.122448
+v 48.724552 25.160673 7.357959
+v 33.818760 45.855556 19.719469
+v 31.911919 39.998985 11.155024
+v 27.664740 37.545280 22.970465
+v 27.974972 37.779976 14.921725
+v 2.926424 -52.042320 19.256142
+v 2.453739 -49.965088 15.737546
+v -10.847728 -40.711979 11.410068
+v -5.625197 -38.576065 9.028985
+v -4.954663 -45.298546 4.473378
+v -2.641075 -38.065506 30.121859
+v -12.297677 -43.304993 25.197155
+v -1.691778 -52.475380 28.042377
+v 53.963322 -0.367301 20.987150
+v 51.374592 11.624549 23.695490
+v 54.537560 10.690503 17.452641
+v 52.286762 -1.178828 14.588678
+v 50.660282 12.274777 13.607096
+v 42.872883 -22.189606 23.315578
+v 51.633175 -18.263119 18.256735
+v 46.704170 -17.113817 9.401239
+v 42.408493 -19.533556 12.798364
+v 28.367151 -15.548941 12.962204
+v 23.669218 -21.325438 12.904368
+v 31.624334 -14.397182 18.918894
+v 22.248281 -22.053343 23.715767
+v 28.701342 -22.244793 24.238064
+v 30.156694 -15.058847 24.720676
+v 19.564251 -20.750628 16.027233
+v 32.131397 -28.941681 14.425417
+v 36.059933 -21.842176 26.676575
+v 32.015545 -23.098236 22.494310
+v 40.431133 -22.674383 25.921864
+v 42.732422 -22.421053 14.295007
+v 39.461468 -57.058651 21.282156
+v 44.349010 -49.528809 11.572008
+v 17.582390 -29.486710 5.123083
+v 21.060499 -24.410078 10.117791
+v 25.538137 -27.084028 9.732551
+v 19.692909 -24.665619 32.741123
+v 27.650806 -28.533953 26.707747
+v 24.159296 2.704016 5.113870
+v 26.568132 -0.679316 29.290709
+v 23.797688 6.485804 31.892443
+v 37.843567 28.449272 23.734009
+v 31.025274 -32.650818 21.600431
+v 30.326784 -32.667740 18.699930
+v 48.608345 -24.857819 9.821372
+v 57.765800 -26.176018 19.778214
+v 1.403341 -17.219044 21.724312
+v 13.439794 -10.748627 24.901556
+v 8.840998 -11.417746 22.630836
+v 7.738081 8.749319 17.479738
+v -37.185631 -34.144539 24.161514
+v -29.856485 -30.552607 12.633641
+v -25.021296 38.902241 17.149893
+v -8.743529 41.291073 22.740833
+v -50.564018 12.432913 12.260192
+v -16.160103 45.476627 11.656381
+v 10.870459 -24.197359 22.217205
+v 30.336288 -32.664650 18.699944
+vn 0.0392 0.1773 -0.9834
+vn -0.1466 -0.1555 0.9769
+vn -0.4352 -0.5060 0.7447
+vn 0.2498 -0.2288 0.9409
+vn 0.5094 0.5063 0.6958
+vn -0.2517 0.2345 0.9390
+vn 0.5373 -0.4626 -0.7052
+vn 0.0792 -0.3173 -0.9450
+vn 0.2907 0.5635 -0.7733
+vn -0.4624 -0.1287 -0.8773
+vn -0.3393 0.5626 0.7539
+vn -0.4372 -0.0205 0.8992
+vn 0.5982 -0.5174 -0.6120
+vn 0.1018 -0.2331 -0.9671
+vn 0.8068 0.3044 -0.5063
+vn 0.5166 -0.8259 -0.2259
+vn 0.5580 -0.8218 -0.1150
+vn 0.9789 -0.0041 -0.2045
+vn 0.0969 -0.7754 -0.6240
+vn 0.0867 -0.7518 -0.6536
+vn 0.5803 0.2311 -0.7809
+vn -0.3415 -0.0130 0.9398
+vn -0.9181 -0.3068 0.2508
+vn -0.1484 -0.5272 0.8367
+vn -0.4343 -0.0021 0.9008
+vn -0.1887 -0.9780 0.0887
+vn -0.3793 -0.6179 -0.6887
+vn -0.2943 -0.6045 -0.7402
+vn 0.9866 -0.0578 -0.1523
+vn -0.6092 -0.3111 -0.7295
+vn 0.8949 -0.1928 0.4024
+vn 0.6560 0.3674 -0.6593
+vn 0.6808 0.6386 0.3587
+vn 0.4364 -0.4005 0.8057
+vn 0.6537 -0.3347 0.6788
+vn 0.2519 -0.9665 0.0499
+vn 0.7770 -0.6035 0.1791
+vn 0.9301 -0.3079 -0.2002
+vn 0.5998 -0.2712 -0.7528
+vn 0.2167 0.6131 -0.7597
+vn -0.7318 0.2129 -0.6474
+vn -0.8405 -0.0625 0.5382
+vn -0.7259 0.0101 0.6878
+vn 0.0555 0.9596 0.2758
+vn -0.7923 -0.4054 -0.4560
+vn -0.6971 0.1561 -0.6998
+vn -0.7939 0.4659 -0.3907
+vn -0.7961 0.4947 -0.3485
+vn -0.4853 0.1158 0.8667
+vn -0.1564 -0.6133 0.7742
+vn -0.3393 0.4551 0.8233
+vn 0.9525 -0.0780 0.2942
+vn 0.9487 0.1971 0.2474
+vn 0.6787 0.6168 0.3987
+vn -0.2895 0.9127 0.2884
+vn 0.5465 -0.2142 -0.8096
+vn 0.5257 0.3976 -0.7521
+vn 0.4425 0.4912 -0.7503
+vn -0.7267 -0.2396 -0.6438
+vn 0.7218 -0.5963 -0.3514
+vn 0.4610 -0.6420 0.6127
+vn 0.2213 0.6194 0.7532
+vn 0.7580 -0.5773 -0.3035
+vn 0.4191 -0.4334 -0.7978
+vn 0.4119 -0.4353 -0.8005
+vn 0.4125 -0.4352 -0.8003
+vn 0.4130 0.2631 -0.8719
+vn -0.6224 0.4370 -0.6494
+vn -0.2047 -0.5442 -0.8136
+vn -0.2046 -0.5443 -0.8135
+vn -0.2047 -0.5445 -0.8134
+vn 0.6502 0.5084 0.5646
+vn -0.2480 -0.2514 0.9356
+vn -0.0359 0.5676 0.8225
+vn 0.4748 0.6970 -0.5374
+vn 0.1701 -0.1524 -0.9736
+vn -0.0671 -0.0444 0.9968
+vn 0.6328 -0.3266 0.7020
+vn -0.4581 0.2365 0.8569
+vn 0.3968 -0.9179 0.0020
+vn -0.8054 0.5042 -0.3117
+vn 0.4197 -0.4333 -0.7976
+vn -0.7250 0.0716 -0.6850
+vn -0.4647 0.2121 -0.8597
+vn -0.3872 0.6698 -0.6335
+vn 0.1006 0.9143 0.3923
+vn -0.0793 0.9644 0.2524
+vn 0.1154 0.1711 -0.9785
+vn -0.2619 -0.4696 0.8431
+vn 0.0145 -0.7738 0.6332
+vn 0.4906 -0.5599 0.6677
+vn -0.1874 -0.9509 0.2462
+vn -0.2532 -0.6861 -0.6820
+vn 0.1967 -0.7459 -0.6363
+vn 0.2615 -0.7182 -0.6449
+vn 0.4907 -0.3431 -0.8010
+vn 0.5870 0.0393 -0.8086
+vn -0.9745 0.1942 -0.1123
+vn 0.6553 0.1064 -0.7479
+vn 0.9512 -0.1115 -0.2877
+vn 0.2592 0.5100 0.8202
+vn 0.0690 -0.1574 0.9851
+vn 0.5731 -0.0240 0.8191
+vn 0.7510 0.2393 0.6154
+vn -0.3431 0.3171 0.8841
+vn 0.1131 -0.9850 0.1302
+vn -0.3492 0.0903 -0.9327
+vn -0.0608 -0.6797 0.7310
+vn -0.8542 0.0570 -0.5168
+vn -0.5724 0.6323 0.5221
+vn 0.1459 -0.7752 0.6146
+vn -0.8008 -0.3322 0.4983
+vn 0.2909 -0.7231 0.6264
+vn 0.3673 0.6016 0.7093
+vn -0.4365 0.7382 0.5143
+vn -0.3065 -0.9517 -0.0154
+vn 0.8958 -0.4386 -0.0721
+vn 0.9401 0.3408 -0.0026
+vn 0.1701 -0.8470 -0.5037
+vn 0.4835 -0.7078 -0.5150
+vn -0.8298 -0.2471 -0.5003
+vn 0.1124 0.6603 -0.7425
+vn -0.4692 0.6971 -0.5421
+vn -0.2805 0.4465 -0.8497
+vn -0.0024 0.9651 -0.2620
+vn -0.2297 0.3322 0.9148
+vn 0.5809 0.1330 0.8030
+vn 0.6072 -0.0533 0.7927
+vn -0.3587 0.1140 0.9265
+vn 0.6603 -0.5238 0.5381
+vn 0.0411 -0.7559 0.6534
+vn 0.7638 0.6082 0.2163
+vn -0.5820 0.7399 0.3375
+vn -0.7421 0.6468 0.1758
+vn 0.1453 -0.8249 -0.5463
+vn -0.7334 0.0794 -0.6752
+vn 0.1912 -0.6662 -0.7208
+vn 0.4722 -0.4629 -0.7502
+vn 0.5389 0.2978 -0.7879
+vn -0.7270 -0.0120 -0.6865
+vn 0.0268 0.5901 -0.8068
+vn -0.3471 0.4157 -0.8407
+vn 0.5137 0.1312 -0.8479
+vn 0.0257 -0.8332 0.5524
+vn -0.8628 -0.1172 0.4918
+vn 0.4163 0.4349 0.7984
+vn -0.0053 -0.9451 0.3266
+vn 0.1946 -0.8670 -0.4587
+vn 0.7578 0.3125 -0.5729
+vn -0.7347 -0.0856 -0.6729
+vn 0.4660 -0.0752 0.8816
+vn 0.2459 0.6145 0.7496
+vn 0.7927 0.2138 0.5708
+vn 0.8237 -0.2188 0.5231
+vn -0.3437 -0.3723 0.8621
+vn 0.1040 -0.8094 -0.5779
+vn -0.0965 -0.7642 -0.6377
+vn 0.4165 -0.6352 -0.6504
+vn 0.8755 0.1653 -0.4541
+vn -0.6050 0.2586 -0.7530
+vn -0.6057 0.2587 -0.7525
+vn -0.6048 0.2587 -0.7531
+vn -0.6097 0.2585 -0.7493
+vn 0.4243 -0.4892 0.7620
+vn -0.8447 0.4613 -0.2715
+vn -0.7943 0.4353 -0.4237
+vn 0.0407 0.4257 0.9039
+vn -0.7201 0.5171 0.4626
+vn -0.7066 0.7059 0.0498
+vn -0.8430 0.5374 0.0245
+vn -0.4521 -0.2477 0.8569
+vn -0.7270 -0.3554 0.5875
+vn -0.9930 -0.0954 -0.0698
+vn -0.5417 -0.1334 -0.8299
+vn -0.4404 -0.3008 -0.8459
+vn 0.3057 0.3388 -0.8898
+vn 0.6700 -0.2072 0.7129
+vn -0.2378 0.5760 0.7821
+vn -0.1745 0.5820 0.7942
+vn 0.6312 -0.1795 -0.7545
+vn 0.4073 -0.5221 -0.7494
+vn -0.3441 0.6821 -0.6452
+vn 0.5339 -0.3936 -0.7484
+vn -0.1407 -0.8173 0.5588
+vn 0.4016 0.2936 0.8674
+vn 0.5037 0.5834 0.6371
+vn -0.5563 -0.1522 0.8169
+vn 0.1557 0.9778 0.1401
+vn -0.6349 -0.4725 -0.6113
+vn 0.6845 0.2130 -0.6972
+vn -0.7997 0.0216 -0.6000
+vn 0.2200 -0.2304 -0.9479
+vn -0.2413 0.2351 0.9415
+vn -0.7047 -0.2009 -0.6805
+vn -0.5446 0.0535 -0.8370
+vn 0.0423 -0.0252 -0.9988
+vn 0.0032 0.4993 -0.8664
+vn 0.0047 0.4973 -0.8675
+vn 0.0049 0.4971 -0.8677
+vn -0.0769 -0.8330 0.5479
+vn -0.8516 -0.2711 0.4487
+vn 0.2840 -0.6812 0.6748
+vn -0.0363 0.5779 0.8153
+vn -0.4862 -0.5376 -0.6889
+vn -0.3414 -0.5230 -0.7810
+vn 0.3035 -0.7463 -0.5924
+vn 0.5020 -0.0440 0.8637
+vn 0.1505 0.9018 0.4050
+vn 0.4144 0.3826 -0.8258
+vn -0.4065 -0.4493 0.7956
+vn -0.3561 -0.2419 0.9026
+vn -0.1672 -0.1743 0.9704
+vn 0.3404 -0.2272 -0.9124
+vn 0.0854 0.1850 0.9790
+vn 0.4883 0.7134 0.5027
+vn -0.4456 -0.0469 0.8940
+vn -0.8613 0.2189 0.4586
+vn -0.8699 0.3348 0.3621
+vn -0.1437 0.7037 -0.6958
+vn 0.0541 0.8609 -0.5058
+vn -0.7308 0.4719 -0.4932
+vn -0.2064 -0.0795 -0.9752
+vn -0.3266 -0.2332 0.9159
+vn -0.5931 -0.7902 -0.1540
+vn -0.0979 -0.1982 -0.9753
+vn -0.7915 0.6112 -0.0018
+vn 0.2879 0.9158 -0.2799
+vn -0.5052 0.5765 0.6421
+vn 0.1129 0.4315 0.8950
+vn 0.6303 0.6891 0.3576
+vn -0.6003 0.7526 0.2705
+vn 0.1937 0.4609 -0.8661
+vn 0.2243 0.4174 -0.8806
+vn 0.0315 0.1129 -0.9931
+vn -0.9798 0.1746 -0.0978
+vn -0.5838 -0.6688 0.4604
+vn 0.2959 0.1969 0.9347
+vn -0.3026 0.5149 0.8021
+vn -0.8595 0.0209 0.5106
+vn -0.9901 -0.0345 -0.1363
+vn -0.9901 -0.0365 -0.1358
+vn -0.9901 -0.0347 -0.1362
+vn -0.0997 -0.6713 -0.7344
+vn 0.7961 0.2908 -0.5307
+vn -0.3174 0.5601 -0.7652
+vn -0.5906 0.4459 -0.6726
+vn -0.6198 0.2140 -0.7550
+vn -0.5860 0.7910 -0.1759
+vn -0.0719 0.0959 -0.9928
+vn 0.1105 -0.2592 0.9595
+vn -0.0503 0.3534 0.9341
+vn 0.7320 -0.3970 0.5537
+vn 0.6169 -0.3387 -0.7104
+vn 0.2569 0.5458 -0.7976
+vn 0.4645 0.0296 0.8851
+vn 0.2933 0.2519 0.9222
+vn -0.0690 0.9729 0.2207
+vn 0.3863 0.9041 -0.1825
+vn 0.4709 0.0098 -0.8821
+vn 0.1685 0.7956 -0.5819
+vn -0.9216 0.2449 0.3013
+vn 0.5333 -0.8147 -0.2277
+vn -0.4518 -0.5686 0.6874
+vn -0.6621 0.1682 0.7303
+vn -0.3675 -0.7471 -0.5539
+vn 0.2596 -0.7879 -0.5585
+vn -0.5628 -0.4117 -0.7168
+vn -0.1537 -0.4545 -0.8774
+vn -0.9772 0.1569 -0.1430
+vn -0.3637 -0.3466 0.8646
+vn -0.7826 0.1043 0.6137
+vn -0.9683 0.1403 0.2067
+vn -0.9586 0.1082 0.2634
+vn -0.9707 -0.0130 -0.2398
+vn -0.8655 -0.3561 0.3523
+vn 0.4507 0.6810 0.5771
+vn 0.0731 -0.5002 0.8628
+vn 0.4605 0.5355 -0.7079
+vn 0.4014 0.6515 -0.6438
+vn -0.6319 -0.2361 -0.7382
+vn -0.3596 0.4480 0.8185
+vn -0.6147 0.3409 0.7113
+vn 0.4737 0.6396 -0.6053
+vn -0.2411 0.2432 -0.9395
+vn -0.2213 0.8156 0.5346
+vn -0.8783 0.4351 -0.1982
+vn -0.4998 0.0060 0.8661
+vn -0.5987 -0.6730 -0.4343
+vn -0.0249 -0.6778 0.7349
+vn -0.9107 -0.3969 0.1146
+vn -0.9112 -0.3955 0.1156
+vn -0.9081 -0.4040 0.1098
+vn -0.9074 -0.4061 0.1084
+vn -0.2539 -0.5446 -0.7994
+vn 0.8589 -0.3856 0.3372
+vn 0.1931 -0.4499 0.8719
+vn 0.0456 -0.7409 0.6701
+vn 0.5992 -0.4930 -0.6308
+vn -0.5748 0.1469 0.8050
+vn 0.3119 0.9333 0.1778
+vn 0.4118 0.9004 0.1406
+vn 0.2512 0.8164 -0.5200
+vn 0.3613 0.4942 -0.7907
+vn -0.5084 0.0036 -0.8611
+vn -0.1843 0.2084 0.9605
+vn 0.2722 -0.6023 -0.7505
+vn -0.1332 -0.9794 -0.1520
+vn 0.3175 0.5826 -0.7482
+vn 0.1655 -0.5148 -0.8412
+vn 0.9882 -0.0859 -0.1270
+vn 0.9873 -0.0864 -0.1333
+vn 0.9877 -0.0863 -0.1301
+vn 0.5913 0.7511 0.2935
+vn 0.1360 0.1093 0.9847
+vn 0.2928 0.5269 0.7979
+vn 0.4184 -0.8115 0.4079
+vn 0.9882 -0.0862 -0.1268
+vn 0.2070 -0.5704 -0.7949
+vn 0.4862 0.7109 -0.5082
+vn 0.4732 0.3292 -0.8171
+vn 0.2135 -0.2711 -0.9386
+vn 0.1543 -0.2997 -0.9415
+vn 0.2113 -0.4039 0.8901
+vn 0.1760 -0.2114 0.9614
+vn 0.3291 -0.3272 -0.8858
+vn 0.4198 -0.2042 -0.8843
+vn -0.4848 0.3480 -0.8024
+vn -0.3197 0.0428 0.9465
+vn -0.5223 -0.0454 0.8516
+vn -0.3815 0.2606 0.8869
+vn -0.1337 0.9661 0.2210
+vn -0.3206 0.9471 -0.0122
+vn -0.5980 0.2175 -0.7714
+vn -0.2767 0.7310 -0.6238
+vn 0.7489 0.6597 -0.0624
+vn 0.5201 0.8270 -0.2134
+vn -0.4474 -0.2023 -0.8711
+vn -0.1203 -0.4684 0.8753
+vn 0.5450 -0.2603 -0.7970
+vn 0.1201 -0.2380 0.9638
+vn 0.2660 -0.5440 -0.7958
+vn 0.2121 0.7106 -0.6708
+vn -0.0555 0.0702 -0.9960
+vn -0.1941 -0.3139 0.9294
+vn 0.1076 -0.2277 0.9678
+vn 0.4930 -0.3951 -0.7752
+vn -0.7622 -0.1896 -0.6190
+vn -0.1138 -0.0779 0.9904
+vn 0.9103 -0.1116 0.3986
+vn 0.2825 -0.2076 -0.9365
+vn 0.5382 -0.0879 -0.8382
+vn -0.2249 0.1222 -0.9667
+vn -0.1857 0.6087 -0.7714
+vn 0.2909 0.0278 0.9564
+vn 0.2284 0.1363 0.9640
+vn -0.5879 -0.2112 -0.7809
+vn -0.8722 0.1438 -0.4675
+vn 0.6891 0.2079 -0.6943
+vn 0.5854 -0.2567 -0.7691
+vn -0.6011 0.7044 0.3776
+vn 0.5574 -0.2746 0.7835
+vn 0.4368 0.8518 0.2893
+vn -0.2451 -0.4148 0.8763
+vn -0.7324 0.1710 0.6590
+vn -0.9799 0.1164 0.1618
+vn -0.6858 0.7171 0.1244
+vn -0.1877 0.9006 -0.3921
+vn 0.4323 0.1437 -0.8902
+vn -0.2337 0.7910 -0.5654
+vn -0.8357 0.2189 -0.5036
+vn -0.0265 -0.5660 0.8240
+vn 0.5875 -0.4340 0.6830
+vn 0.8407 0.3750 0.3905
+vn -0.7747 0.0874 0.6262
+vn -0.6547 0.1451 0.7419
+vn 0.1204 -0.7076 -0.6963
+vn 0.7971 -0.4321 -0.4218
+vn 0.8707 -0.2640 -0.4149
+vn 0.7938 0.2821 -0.5389
+vn 0.2063 0.6766 -0.7069
+vn -0.5541 0.0718 -0.8293
+vn -0.2004 -0.9795 0.0198
+vn 0.1306 0.3033 -0.9439
+vn -0.0738 0.0782 0.9942
+vn -0.6877 0.3330 -0.6451
+vn -0.0197 -0.3687 -0.9293
+vn -0.2411 -0.1211 0.9629
+vn -0.4058 -0.1399 0.9032
+vn -0.8142 0.3643 0.4520
+vn -0.5364 -0.2552 -0.8044
+vn 0.0498 0.5042 -0.8622
+vn -0.5447 -0.2778 0.7913
+vn -0.5425 -0.2722 0.7947
+vn -0.5451 -0.2785 0.7908
+vn 0.4862 0.4455 0.7518
+vn 0.0527 0.8079 0.5869
+vn 0.0525 0.8075 0.5875
+vn 0.0512 0.8058 0.5900
+vn 0.7916 0.4242 0.4397
+vn 0.4797 0.4033 -0.7792
+vn -0.3815 0.3980 -0.8343
+vn 0.4054 -0.4247 -0.8095
+vn 0.0254 -0.2518 0.9674
+vn 0.0715 -0.4389 0.8957
+vn 0.0455 -0.1989 0.9790
+vn 0.3993 -0.4283 -0.8106
+vn 0.7608 -0.2426 0.6019
+vn 0.4269 -0.5595 -0.7104
+vn -0.7838 0.0930 -0.6140
+vn -0.9010 0.1301 -0.4139
+vn -0.2615 0.7945 -0.5481
+vn -0.2612 0.7945 -0.5482
+vn -0.2545 0.7963 -0.5487
+vn 0.2102 0.7989 0.5636
+vn -0.0003 0.2715 0.9624
+vn -0.5594 0.0676 0.8261
+vn 0.2425 0.5094 -0.8257
+vn -0.1788 -0.8011 -0.5712
+vn 0.6669 -0.0289 0.7446
+vn 0.9781 -0.0255 -0.2066
+vn 0.4002 0.5886 -0.7024
+vn 0.1043 0.4405 0.8917
+vn -0.3463 0.0433 0.9371
+vn -0.2196 -0.1585 0.9626
+vn 0.2171 -0.3861 -0.8965
+vn -0.0262 0.4391 -0.8981
+vn -0.3014 -0.8587 0.4145
+vn -0.9749 -0.0690 0.2115
+vn -0.9621 -0.1861 0.1992
+vn -0.7258 0.6774 -0.1201
+vn -0.2719 -0.7437 -0.6107
+vn -0.1129 0.3963 0.9112
+vn -0.4583 -0.2715 0.8463
+vn -0.4814 -0.2922 0.8264
+vn -0.9834 -0.0353 0.1778
+vn -0.7533 -0.2564 -0.6056
+vn -0.5847 -0.1067 -0.8042
+vn -0.4963 -0.1564 -0.8539
+vn 0.9922 -0.0998 -0.0747
+vn 0.1703 -0.5428 0.8224
+vn 0.5006 -0.6644 0.5550
+vn 0.9488 -0.1592 0.2729
+vn -0.5198 -0.6697 0.5304
+vn -0.5387 -0.6092 0.5819
+vn 0.5202 -0.7580 0.3934
+vn 0.2841 -0.9097 0.3028
+vn -0.5697 -0.4354 -0.6971
+vn -0.0262 -0.4134 -0.9102
+vn -0.7226 0.3452 -0.5990
+vn -0.1522 -0.4810 -0.8634
+vn 0.3389 0.7556 0.5606
+vn 0.7874 -0.2248 0.5740
+vn -0.4659 -0.4053 0.7866
+vn 0.5896 -0.4627 0.6621
+vn 0.7570 0.3582 0.5465
+vn -0.2309 0.7598 0.6077
+vn -0.3477 0.6816 0.6438
+vn 0.6844 -0.2788 -0.6737
+vn 0.7435 -0.1909 -0.6409
+vn 0.8104 0.2423 -0.5334
+vn -0.3835 0.7763 -0.5003
+vn -0.1659 0.0453 0.9851
+vn 0.2779 -0.2788 0.9193
+vn 0.2855 -0.2722 0.9189
+vn 0.2763 -0.2797 0.9195
+vn 0.2790 -0.3166 0.9066
+vn 0.2763 -0.2803 0.9193
+vn 0.9634 -0.0728 0.2581
+vn 0.0729 -0.9880 -0.1360
+vn -0.0324 -0.3332 -0.9423
+vn 0.7719 0.0019 -0.6357
+vn -0.0781 0.0531 -0.9955
+vn -0.6141 0.4879 -0.6203
+vn 0.2171 -0.0928 -0.9717
+vn -0.1933 0.1315 0.9723
+vn -0.5322 0.0911 0.8417
+vn -0.6998 0.6775 0.2264
+vn 0.0664 0.7459 -0.6627
+vn 0.9192 0.2273 -0.3216
+vn 0.5520 -0.8082 -0.2054
+vn 0.4111 -0.3226 0.8526
+vn 0.5730 0.8134 0.0999
+vn -0.1020 -0.3514 0.9307
+vn 0.8714 -0.4557 -0.1818
+vn -0.1495 -0.6663 -0.7305
+vn 0.3792 0.6391 -0.6691
+vn 0.3787 0.6399 -0.6687
+vn 0.3738 0.6485 -0.6631
+vn -0.3697 -0.0813 -0.9256
+vn -0.1630 0.1967 -0.9668
+vn -0.3167 -0.5409 0.7792
+vn 0.0048 -0.6212 0.7837
+vn 0.1233 0.0365 0.9917
+vn -0.0436 0.2075 0.9773
+vn -0.1872 0.1820 0.9653
+vn -0.3605 -0.6091 -0.7064
+vn -0.1476 -0.5373 -0.8304
+vn -0.0011 0.4363 -0.8998
+vn 0.0627 0.5332 -0.8436
+vn 0.8985 0.3598 -0.2516
+vn -0.6417 0.5718 0.5112
+vn -0.5217 -0.5022 0.6897
+vn 0.1840 -0.5905 0.7858
+vn 0.1794 -0.5871 0.7894
+vn 0.1791 -0.5871 0.7894
+vn 0.1792 -0.5867 0.7898
+vn 0.2326 0.5696 0.7883
+vn -0.2445 0.7726 0.5859
+vn 0.9491 -0.2455 0.1973
+vn 0.8155 -0.1715 -0.5528
+vn 0.8152 -0.1708 -0.5534
+vn 0.8155 -0.1717 -0.5527
+vn 0.8250 0.2541 -0.5049
+vn -0.6767 0.2625 -0.6879
+vn -0.5260 0.5493 -0.6494
+vn -0.0763 0.2435 -0.9669
+vn -0.4592 -0.3627 0.8109
+vn -0.4768 -0.7355 0.4813
+vn -0.6697 0.3793 -0.6384
+vn 0.1157 0.4288 -0.8960
+vn 0.0501 0.9824 -0.1799
+vn 0.2408 0.4511 0.8594
+vn -0.2750 0.8023 0.5298
+vn -0.8303 0.4275 0.3575
+vn -0.7070 0.6795 0.1959
+vn -0.1912 0.6178 -0.7628
+vn 0.1646 -0.9782 -0.1265
+vn 0.7471 -0.2164 0.6285
+vn 0.3624 -0.5691 0.7381
+vn 0.6311 -0.6890 0.3564
+vn 0.4189 -0.4653 -0.7798
+vn 0.3733 -0.5188 -0.7691
+vn -0.3741 -0.5141 -0.7718
+vn -0.4191 0.5011 0.7571
+vn -0.5494 -0.7309 0.4049
+vn 0.3609 0.4072 0.8390
+vn 0.5970 0.5791 0.5552
+vn 0.6680 0.0843 -0.7393
+vn 0.5341 0.6975 -0.4777
+vn -0.6675 0.2206 -0.7111
+vn 0.1299 0.8748 -0.4667
+vn 0.8147 0.3356 0.4729
+vn 0.0073 0.3426 0.9394
+vn -0.1905 0.1748 -0.9660
+vn -0.9546 -0.2940 -0.0471
+vn 0.1596 0.0812 -0.9838
+vn 0.0508 0.8052 0.5908
+vn 0.0330 0.5709 0.8203
+vn 0.5851 0.7788 0.2260
+vn -0.8429 0.5319 -0.0821
+vn 0.9112 -0.4076 -0.0607
+vn 0.0597 0.5584 -0.8274
+vn 0.5111 0.1391 -0.8482
+vn -0.6434 0.6667 0.3762
+vn -0.7766 -0.1851 0.6022
+vn 0.5809 -0.5677 0.5833
+vn 0.4223 0.7684 0.4808
+vn -0.5181 -0.7117 -0.4744
+vn -0.5180 -0.7122 -0.4738
+vn -0.5189 -0.7062 -0.4817
+vn 0.6077 -0.4111 -0.6795
+vn -0.7686 -0.3834 -0.5121
+vn -0.2284 0.6740 -0.7025
+vn -0.5736 0.4988 -0.6497
+vn -0.8781 0.0292 -0.4776
+vn 0.1842 0.1119 -0.9765
+vn -0.5401 0.5609 0.6275
+vn 0.5460 0.7615 0.3493
+vn -0.6406 -0.1528 0.7526
+vn -0.0729 -0.4059 -0.9110
+vn 0.4764 0.1533 -0.8658
+vn -0.0919 -0.2848 -0.9542
+vn -0.5210 0.6849 -0.5094
+vn 0.0566 -0.2283 -0.9719
+vn -0.6440 0.0448 -0.7637
+vn 0.3450 -0.2287 -0.9103
+vn 0.4025 -0.5257 0.7494
+vn 0.9099 -0.0044 0.4148
+vn 0.4605 -0.0384 0.8868
+vn 0.4849 -0.1460 -0.8623
+vn 0.6230 0.0316 -0.7816
+vn 0.3508 0.6838 -0.6398
+vn -0.8689 0.4949 0.0092
+vn 0.1378 0.2942 -0.9458
+vn -0.0005 -0.0828 0.9966
+vn -0.3890 0.5278 0.7551
+vn 0.1525 0.2767 -0.9488
+vn -0.2975 0.4295 -0.8527
+vn 0.4749 -0.3188 -0.8202
+vn -0.0948 -0.8169 0.5690
+vn -0.8413 -0.1572 0.5172
+vn -0.2903 -0.8259 0.4833
+vn 0.5939 -0.0836 0.8002
+vn 0.4582 0.3495 0.8173
+vn -0.6040 0.4614 0.6498
+vn -0.1535 -0.6393 -0.7535
+vn -0.0351 -0.8480 -0.5288
+vn 0.3843 0.6754 -0.6295
+vn 0.5135 0.5027 -0.6954
+vn -0.8374 -0.1797 -0.5162
+vn -0.3079 -0.3804 0.8721
+vn -0.3098 -0.3902 0.8671
+vn -0.3083 -0.3823 0.8711
+vn -0.3098 -0.3910 0.8667
+vn -0.7791 -0.6023 0.1737
+vn -0.7102 -0.3819 -0.5914
+vn 0.9342 0.0884 -0.3457
+vn -0.3820 -0.5048 0.7741
+vn -0.3846 -0.5132 0.7672
+vn -0.3824 -0.5062 0.7730
+vn 0.7577 -0.1495 0.6352
+vn 0.8449 0.4644 0.2654
+vn 0.9333 0.1106 -0.3417
+vn 0.2612 0.8331 -0.4876
+vn 0.0583 0.8180 -0.5723
+vn -0.3742 0.5648 0.7355
+vn -0.2029 0.6234 0.7551
+vn -0.6739 0.6712 -0.3089
+vn -0.6357 -0.1555 -0.7561
+vn 0.0047 0.8573 -0.5149
+vn 0.5330 -0.6953 -0.4821
+vn -0.5190 -0.7056 -0.4825
+vn 0.0131 -0.3326 0.9430
+vn -0.8949 -0.4434 0.0506
+vn -0.8919 -0.4497 0.0485
+vn -0.8916 -0.4502 0.0485
+vn -0.5158 0.4448 -0.7322
+vn 0.2667 0.5588 -0.7853
+vn -0.5928 0.6638 0.4560
+vn -0.4447 -0.5588 0.7000
+vn 0.5884 -0.0774 0.8049
+vn -0.4006 -0.1567 0.9027
+vn -0.3560 -0.2015 0.9125
+vn -0.4028 -0.7353 -0.5450
+vn 0.4970 -0.6360 -0.5903
+vn 0.7129 -0.3437 -0.6113
+vn 0.9925 0.0107 0.1219
+vn 0.7803 0.0273 0.6248
+vn 0.5983 -0.4042 0.6919
+vn 0.8937 0.0938 0.4388
+vn 0.9635 -0.1256 -0.2365
+vn 0.8402 0.3929 -0.3738
+vn 0.7059 0.0368 -0.7073
+vn 0.7084 0.0262 -0.7053
+vn 0.7086 0.0254 -0.7052
+vn -0.0023 0.6980 -0.7161
+vn 0.2734 -0.5376 0.7976
+vn 0.5891 -0.5400 0.6011
+vn 0.8726 0.1617 0.4608
+vn 0.8378 0.3475 -0.4212
+vn 0.4737 0.5686 -0.6726
+vn -0.5634 -0.1423 -0.8138
+vn -0.2395 0.2043 -0.9491
+vn 0.2370 0.8609 -0.4501
+vn -0.9186 0.3946 -0.0230
+vn 0.3738 0.8510 -0.3689
+vn -0.0812 -0.0186 0.9965
+vn -0.0935 -0.0478 0.9945
+vn -0.2497 0.6120 0.7504
+vn -0.5771 0.6064 0.5470
+vn -0.6892 -0.7147 0.1195
+vn 0.4487 0.8680 0.2125
+vn -0.2606 0.5917 0.7629
+vn -0.7988 -0.0273 -0.6010
+vn -0.6403 0.6562 -0.3992
+vn -0.2650 0.7806 -0.5661
+vn -0.4345 0.5164 0.7380
+vn -0.4959 0.7705 -0.4005
+vn 0.6932 0.3136 0.6489
+vn 0.2596 0.4333 -0.8630
+vn 0.1134 0.6696 -0.7340
+vn -0.6434 0.0853 -0.7608
+vn -0.6990 -0.1048 0.7074
+vn 0.1545 -0.2904 0.9444
+vn 0.1001 -0.3266 0.9398
+vn 0.7350 -0.0851 0.6727
+vn 0.1748 -0.3753 -0.9103
+vn 0.6518 -0.0568 -0.7563
+vn -0.4524 -0.1603 -0.8773
+vn 0.8172 0.2836 -0.5017
+vn 0.1489 -0.9060 0.3962
+vn -0.3821 -0.9170 -0.1146
+vn 0.0089 -0.9690 -0.2469
+vn 0.5256 -0.7798 -0.3402
+vn -0.0213 -0.3251 0.9455
+vn -0.3626 -0.3113 0.8784
+vn -0.7263 -0.6672 0.1652
+vn -0.2063 -0.5831 -0.7858
+vn -0.1068 -0.7590 -0.6423
+vn -0.1423 -0.2107 -0.9671
+vn -0.8509 0.1997 -0.4859
+vn 0.2750 0.5719 -0.7728
+vn 0.5465 -0.3505 -0.7606
+vn -0.5366 0.7449 0.3963
+vn 0.5296 -0.1972 0.8250
+vn 0.0435 0.9563 0.2891
+vn -0.2395 -0.4024 0.8836
+vn -0.7868 -0.0609 0.6143
+vn 0.0885 0.1861 0.9785
+vn -0.3705 -0.6029 -0.7065
+vn 0.6304 -0.4065 -0.6613
+vn -0.3199 0.7671 -0.5561
+vn -0.3163 0.7686 -0.5561
+vn -0.3207 0.7668 -0.5560
+vn -0.3829 0.7537 -0.5342
+vn 0.9509 -0.1613 -0.2640
+vn 0.7909 -0.3880 0.4733
+vn -0.3853 -0.5151 0.7657
+vn 0.8088 -0.3616 0.4639
+vn -0.2251 -0.3619 -0.9046
+vn -0.6397 0.7647 -0.0774
+vn -0.8240 0.0245 -0.5660
+vn -0.8065 0.2362 -0.5420
+vn -0.1083 -0.8030 0.5861
+vn -0.6891 -0.1738 0.7035
+vn -0.3741 -0.4409 0.8159
+vn 0.6042 -0.0551 0.7950
+vn 0.5168 0.8117 0.2722
+vn 0.8126 -0.5496 0.1939
+vn -0.0000 -0.7580 -0.6522
+vn 0.7001 -0.4647 -0.5421
+vn 0.5254 -0.7009 -0.4825
+vn 0.6707 0.3587 -0.6492
+vn 0.0941 0.8437 -0.5285
+vn -0.8332 0.0049 0.5530
+vn -0.4968 -0.3738 0.7833
+vn -0.4814 -0.4214 0.7686
+vn 0.1810 0.2917 0.9393
+vn 0.3291 0.2716 0.9044
+vn 0.9633 0.0860 0.2542
+vn 0.8103 0.3720 0.4527
+vn -0.6490 -0.3871 -0.6550
+vn -0.3382 -0.4508 -0.8260
+vn 0.6277 0.4954 -0.6005
+vn 0.6699 0.4576 -0.5846
+vn 0.2655 0.5579 -0.7863
+vn 0.5936 0.0856 -0.8002
+vn 0.7715 -0.1381 0.6211
+vn 0.3787 -0.9215 -0.0858
+vn 0.6281 -0.6982 -0.3434
+vn 0.3878 -0.5296 -0.7544
+vn -0.2414 -0.4190 -0.8753
+vn 0.3982 0.4611 0.7930
+vn 0.7185 -0.3774 0.5842
+vn 0.2515 0.5037 0.8265
+vn -0.4184 -0.0044 0.9082
+vn 0.8353 -0.4119 -0.3643
+vn 0.7388 0.0670 -0.6706
+vn 0.6934 0.4256 -0.5814
+vn -0.8144 -0.4282 -0.3916
+vn 0.6298 0.4443 0.6371
+vn -0.3627 -0.0450 0.9308
+vn -0.4157 0.6297 0.6562
+vn -0.7822 -0.6000 -0.1682
+vn 0.9223 0.3716 -0.1064
+vn -0.7077 -0.6678 -0.2307
+vn -0.6185 -0.0133 -0.7856
+vn 0.8817 0.3777 -0.2827
+vn 0.3589 0.2593 -0.8966
+vn -0.0938 0.2117 0.9728
+vn 0.6206 -0.3048 -0.7224
+vn -0.4829 0.8423 -0.2395
+vn -0.3324 -0.0072 -0.9431
+vn 0.9675 -0.0061 -0.2527
+vn 0.5666 -0.2333 0.7903
+vn 0.7297 -0.3970 0.5567
+vn 0.4472 -0.3464 -0.8246
+vn 0.4196 -0.8953 -0.1497
+vn 0.2774 -0.7239 0.6317
+vn -0.5907 -0.7172 -0.3696
+vn -0.0619 -0.8440 -0.5328
+vn -0.9547 -0.2956 0.0331
+vn -0.5273 -0.0248 0.8493
+vn -0.8411 -0.2665 0.4706
+vn -0.9122 0.1478 0.3821
+vn -0.6245 -0.0992 -0.7747
+vn 0.0916 -0.6178 -0.7810
+vn -0.8086 -0.1453 -0.5701
+vn -0.2536 -0.9515 -0.1742
+vn -0.3668 0.2279 -0.9020
+vn 0.2937 -0.9123 0.2854
+vn -0.4878 -0.3253 -0.8101
+vn -0.1384 0.1408 -0.9803
+vn 0.6862 -0.4447 0.5757
+vn -0.3392 0.0989 0.9355
+vn 0.6969 -0.1676 0.6973
+vn 0.4070 0.3050 0.8610
+vn 0.5882 0.0798 0.8048
+vn -0.5689 -0.1302 0.8120
+vn -0.7957 -0.3877 -0.4653
+vn 0.3003 -0.4650 0.8328
+vn -0.3779 -0.9218 -0.0870
+vn 0.4040 -0.8945 0.1913
+vn 0.3029 -0.9520 0.0431
+vn 0.3235 -0.7720 -0.5472
+vn 0.6655 -0.6982 -0.2638
+vn 0.7548 -0.6554 -0.0272
+vn -0.3619 0.9105 0.2001
+vn -0.0842 0.5303 -0.8436
+vn -0.6942 -0.2754 0.6650
+vn 0.8376 0.5181 0.1733
+vn -0.2980 -0.9041 0.3063
+vn -0.2157 0.7177 -0.6621
+vn -0.2398 -0.5505 -0.7997
+vn 0.2089 -0.6543 0.7268
+vn 0.7119 -0.4913 -0.5019
+vn 0.0497 -0.0606 -0.9969
+vn 0.8951 0.0671 -0.4409
+vn -0.2598 0.8850 0.3864
+vn -0.8554 -0.0130 0.5179
+vn 0.0706 -0.9955 -0.0636
+vn 0.0193 -0.6376 -0.7701
+vn -0.2552 0.7013 -0.6657
+vn 0.3224 -0.0224 -0.9464
+vn 0.2151 -0.2766 0.9366
+vn 0.2096 -0.2822 0.9362
+vn 0.2150 -0.2761 0.9368
+vn -0.1927 0.9559 0.2215
+vn -0.0004 -0.7210 -0.6929
+vn -0.7873 -0.1919 0.5859
+vn 0.6059 -0.3456 0.7166
+vn 0.3382 0.6956 0.6339
+vn 0.8054 0.3403 0.4854
+vn -0.5239 -0.3298 0.7854
+vn -0.4704 -0.3764 -0.7981
+vn 0.1143 -0.8746 0.4711
+vn -0.2047 -0.5478 -0.8112
+vn 0.0313 -0.6985 -0.7149
+vn 0.2886 0.7859 -0.5469
+vn -0.6169 0.7600 0.2046
+vn -0.1795 0.1871 0.9658
+vn -0.2559 0.2773 0.9261
+vn 0.5562 -0.6233 0.5497
+vn 0.6758 0.0788 0.7329
+vn -0.0138 0.2409 0.9704
+vn -0.0382 0.8756 -0.4815
+vn 0.5785 -0.2275 -0.7833
+vn 0.2780 0.7224 -0.6331
+vn 0.4968 -0.4263 0.7559
+vn -0.4694 -0.0771 -0.8796
+vn -0.3010 -0.1474 -0.9422
+vn 0.6610 0.4524 0.5987
+vn -0.8165 -0.1498 0.5576
+vn -0.9887 0.0723 -0.1314
+vn 0.9838 -0.1772 -0.0279
+vn 0.7386 -0.6738 0.0213
+vn 0.7423 -0.6697 0.0216
+vn 0.7416 -0.6705 0.0217
+vn 0.7425 -0.6695 0.0218
+vn 0.5445 0.7019 0.4592
+vn 0.6134 0.7589 -0.2186
+vn -0.3851 0.3484 -0.8546
+vn -0.3088 0.3825 -0.8708
+vn -0.1815 0.4466 0.8761
+vn -0.2287 -0.6659 0.7101
+vn -0.3602 0.0412 -0.9320
+vn -0.9702 0.0907 -0.2245
+vn 0.7886 -0.2450 0.5639
+vn -0.5878 0.4014 0.7024
+vn -0.5873 -0.7940 0.1568
+vn 0.3979 -0.7713 -0.4967
+vn 0.7598 0.2301 -0.6080
+vn -0.6682 -0.5061 -0.5453
+vn -0.2504 0.7467 0.6163
+vn 0.7173 0.0051 -0.6968
+vn 0.5745 0.0142 -0.8184
+vn -0.6668 0.1693 0.7258
+vn 0.4547 -0.5813 0.6748
+vn 0.0123 0.7878 0.6158
+vn -0.5963 0.3808 0.7067
+vn -0.5814 -0.5669 0.5836
+vn 0.1202 0.8351 -0.5369
+vn 0.5864 -0.3889 0.7105
+vn 0.0031 0.4995 -0.8663
+vn 0.2066 -0.7710 0.6024
+vn -0.0930 -0.7293 -0.6779
+vn -0.1203 0.7140 -0.6898
+vn -0.0054 0.8932 -0.4496
+vn 0.2638 0.5618 0.7841
+vn -0.8843 0.0823 0.4597
+vn -0.6359 -0.4593 -0.6202
+vn 0.0650 0.8056 -0.5889
+vn 0.3842 -0.2972 0.8741
+vn -0.0326 -0.4403 0.8973
+vn -0.6246 0.2726 0.7318
+vn -0.1086 -0.1406 -0.9841
+vn -0.0130 0.6042 0.7967
+vn -0.7736 0.2185 0.5948
+vn 0.5932 0.0499 -0.8035
+vn -0.5232 0.3744 -0.7656
+vn 0.3359 -0.0653 -0.9396
+vn 0.3107 0.0840 -0.9468
+vn 0.2764 0.7490 0.6021
+vn 0.6296 -0.0894 0.7718
+vn 0.6824 -0.1822 0.7079
+vn -0.4952 0.2541 0.8308
+vn 0.8589 -0.3023 -0.4134
+vn -0.1049 0.4827 -0.8695
+vn -0.5422 0.7000 -0.4647
+vn -0.2460 -0.5739 -0.7811
+vn 0.5076 -0.7225 0.4694
+vn 0.6807 -0.5554 -0.4776
+vn -0.8084 -0.0779 -0.5835
+vn -0.2035 -0.5582 0.8044
+vn 0.0272 0.3694 0.9289
+vn -0.4587 0.3385 -0.8216
+vn -0.9901 -0.0372 -0.1356
+vn -0.5092 -0.7617 -0.4006
+vn 0.0966 -0.7605 0.6421
+vn 0.7985 0.3846 0.4632
+vn -0.8398 0.0010 0.5429
+vn -0.5720 0.5579 -0.6013
+vn 0.4586 0.0777 0.8852
+vn 0.6618 -0.0291 -0.7492
+vn -0.1132 0.3372 -0.9346
+vn 0.3890 0.1057 -0.9152
+vn 0.8695 0.4263 -0.2496
+vn -0.5031 0.8630 -0.0465
+vn -0.2215 -0.1681 0.9606
+vn -0.2994 0.2301 0.9260
+vn -0.5129 0.8561 0.0632
+vn -0.6676 0.7231 0.1773
+vn -0.5741 0.8176 0.0435
+vn 0.5320 0.8204 0.2096
+vn -0.4306 0.9025 -0.0003
+vn -0.8291 0.5210 0.2028
+vn -0.7804 0.1415 0.6090
+vn 0.8645 0.4681 -0.1831
+vn -0.7604 -0.3130 0.5691
+vn -0.7632 -0.4636 -0.4502
+vn 0.5997 0.0846 -0.7957
+vn 0.2238 -0.9363 -0.2707
+vn 0.9594 0.2799 -0.0360
+vn -0.0339 -0.0052 -0.9994
+vn -0.0485 0.1568 -0.9864
+vn 0.1572 -0.4412 -0.8835
+vn -0.2832 0.8987 -0.3348
+vn -0.9933 0.0159 0.1146
+vn -0.7198 -0.1328 -0.6814
+vn -0.9047 0.2943 -0.3082
+vn 0.4043 -0.5351 0.7418
+vn 0.4214 -0.1981 0.8850
+vn 0.6350 0.1868 0.7496
+vn 0.1824 0.9526 0.2435
+vn -0.9232 0.3555 0.1463
+vn -0.7499 0.6052 -0.2672
+vn 0.3472 0.5288 -0.7745
+vn 0.2458 0.8284 -0.5034
+vn -0.9753 0.2124 -0.0604
+vn -0.4669 -0.3389 0.8168
+vn -0.0049 -0.3186 0.9479
+vn 0.5549 0.4271 0.7139
+vn 0.4214 0.6656 0.6159
+vn 0.5209 0.7640 -0.3807
+vn -0.0644 -0.8556 -0.5136
+vn 0.6327 -0.5215 -0.5725
+vn 0.7170 0.2121 -0.6641
+vn -0.5818 -0.4215 -0.6956
+vn -0.2464 0.3189 0.9152
+vn -0.2744 0.6982 0.6613
+vn -0.8140 0.4472 -0.3708
+vn -0.8178 0.4432 -0.3672
+vn -0.8216 0.4390 -0.3636
+vn -0.8138 0.4474 -0.3709
+vn -0.4248 -0.0335 0.9047
+vn -0.5309 0.1469 -0.8346
+vn -0.4126 -0.1354 -0.9008
+vn -0.7068 -0.6715 -0.2225
+vn -0.8587 0.4747 -0.1931
+vn -0.2728 0.5937 0.7570
+vn -0.6281 0.2792 0.7263
+vn -0.6280 0.7138 -0.3101
+vn -0.6018 -0.1959 -0.7742
+vn -0.3777 -0.1596 -0.9121
+vn 0.2112 -0.3898 -0.8964
+vn 0.7431 0.6679 0.0416
+vn -0.3876 0.5154 0.7643
+vn 0.5403 -0.7672 0.3456
+vn 0.7894 -0.1152 0.6029
+vn 0.7654 -0.3024 -0.5680
+vn -0.2021 -0.5598 0.8036
+vn -0.4186 -0.3996 -0.8155
+vn -0.3717 0.2064 -0.9051
+vn 0.7477 -0.0525 -0.6619
+vn 0.7488 -0.0638 -0.6597
+vn 0.7488 -0.0643 -0.6597
+vn 0.7476 -0.0521 -0.6621
+vn -0.4300 -0.4212 -0.7985
+vn 0.3199 -0.2057 0.9248
+vn 0.3572 0.0981 -0.9289
+vn -0.1527 -0.1074 -0.9824
+vn 0.2144 -0.9659 -0.1449
+vn 0.1163 -0.3788 0.9182
+vn 0.3640 -0.6759 0.6409
+vn 0.2861 0.9238 0.2546
+vn 0.2278 -0.5606 -0.7962
+vn -0.1707 0.8235 -0.5410
+vn 0.9218 -0.3183 -0.2214
+vn 0.9021 -0.0461 0.4290
+vn 0.5081 -0.6422 -0.5739
+vn 0.2091 -0.2824 0.9362
+vn 0.8427 -0.3433 -0.4148
+vn 0.2331 0.1735 -0.9568
+vn -0.5743 -0.6032 -0.5535
+vn 0.5443 -0.3086 -0.7801
+vn -0.8533 0.0079 -0.5213
+vn 0.3523 0.5633 0.7473
+vn -0.4369 -0.2577 0.8618
+vn 0.0303 0.4285 0.9030
+vn -0.8805 0.4076 0.2420
+vn -0.0761 0.6941 -0.7158
+vn 0.3543 -0.6791 -0.6428
+vn -0.2058 -0.9746 0.0886
+vn 0.0984 -0.8761 0.4720
+vn -0.2412 0.3568 0.9025
+vn 0.8222 -0.5441 0.1672
+vn 0.9912 -0.1312 -0.0168
+vn 0.8223 -0.5206 -0.2298
+vn -0.8098 0.2925 0.5086
+vn 0.3826 0.2435 0.8912
+vn 0.0375 0.5989 -0.8000
+vn -0.6826 0.0579 -0.7285
+vn -0.4432 -0.0345 -0.8958
+vn 0.0609 -0.6329 0.7719
+vn -0.4682 0.1546 0.8700
+vn 0.8690 -0.4852 -0.0975
+vn -0.5218 0.8389 0.1550
+vn 0.1071 0.6062 0.7881
+vn 0.5161 0.0954 0.8512
+vn 0.7721 0.3482 0.5316
+vn -0.4937 0.8687 -0.0408
+vn -0.4633 -0.5948 -0.6569
+vn -0.9387 0.1397 -0.3151
+vn -0.6793 0.4567 0.5744
+vn 0.4426 0.8155 0.3730
+vn 0.6921 0.3024 0.6554
+vn -0.9415 0.3314 0.0613
+vn -0.4530 -0.3156 -0.8338
+vn 0.1420 0.8132 -0.5644
+vn -0.3694 -0.9147 -0.1642
+vn 0.2187 -0.5389 0.8135
+vn -0.6700 0.5927 0.4470
+vn -0.9536 0.2384 0.1836
+vn 0.1006 -0.5252 -0.8450
+vn -0.6225 0.4283 -0.6550
+vn -0.3017 0.8818 -0.3625
+vn -0.5424 -0.2716 0.7950
+vn -0.4055 -0.6829 0.6076
+vn 0.4590 0.0445 0.8873
+vn -0.4879 0.6792 0.5482
+vn -0.7326 -0.2512 -0.6326
+vn 0.9323 0.2647 0.2465
+vn -0.3449 0.4952 0.7974
+vn 0.1973 -0.3786 -0.9043
+vn 0.3600 -0.4828 0.7983
+vn 0.3598 -0.4821 0.7988
+vn 0.3610 -0.4863 0.7957
+vn -0.8153 0.1074 0.5690
+vn -0.6202 -0.7816 0.0663
+vn -0.1830 0.8726 0.4529
+vn -0.2623 0.7942 -0.5482
+vn 0.7293 0.0552 0.6820
+vn -0.3575 -0.4026 0.8427
+vn -0.5166 -0.2415 -0.8215
+vn -0.5103 0.1761 -0.8418
+vn 0.3521 -0.0990 -0.9307
+vn -0.4373 0.0842 -0.8954
+vn -0.1302 0.0537 -0.9900
+vn -0.1470 -0.1992 0.9689
+vn -0.0947 -0.4184 0.9033
+vn -0.5457 0.0278 -0.8375
+vn 0.4928 -0.2069 0.8452
+vn -0.2052 0.4266 0.8809
+vn -0.1673 0.1431 -0.9755
+vn -0.3765 0.3949 0.8380
+vn -0.2014 0.5296 -0.8240
+vn 0.4291 0.6213 -0.6557
+vn -0.1859 -0.8899 0.4166
+vn 0.6378 -0.0835 0.7657
+vn 0.4939 -0.5431 0.6790
+vn 0.7576 -0.4724 -0.4505
+vn -0.0355 -0.9668 -0.2530
+vn 0.2339 -0.6814 -0.6935
+vn 0.8158 -0.1724 -0.5521
+vn 0.4797 0.7062 -0.5208
+vn -0.1438 -0.1145 0.9830
+vn -0.2745 -0.9114 0.3067
+vn 0.7439 -0.5593 -0.3658
+vn -0.6904 -0.0178 -0.7232
+vn -0.6977 0.1018 -0.7091
+vn -0.8222 0.5418 -0.1745
+vn 0.2119 0.4433 0.8710
+vn 0.3884 0.1386 -0.9110
+vn -0.4881 0.0276 -0.8723
+vn -0.4044 -0.8051 -0.4338
+vn -0.3932 0.6500 0.6503
+vn 0.7377 -0.6749 -0.0161
+vn -0.0266 -0.9333 -0.3581
+vn -0.5505 -0.0360 0.8341
+vn 0.6980 -0.7108 0.0863
+vn 0.9262 0.3577 -0.1190
+vn -0.1724 0.0309 0.9845
+vn -0.2339 0.1972 0.9521
+vn 0.0050 -0.6399 -0.7685
+vn -0.1316 -0.6385 -0.7583
+vn -0.1562 0.1065 -0.9820
+vn -0.8587 0.1791 0.4802
+vn 0.7750 0.5662 0.2808
+vn 0.9173 0.3502 0.1893
+vn -0.4607 -0.4801 -0.7465
+vn 0.2215 -0.6654 -0.7128
+vn 0.0322 0.8191 -0.5727
+vn 0.2778 -0.5351 0.7978
+vn -0.2816 0.1015 -0.9541
+vn 0.5641 -0.3928 -0.7263
+vn 0.3149 -0.2243 -0.9223
+vn 0.3713 -0.5109 0.7753
+vn 0.8105 0.0699 0.5816
+vn -0.3875 0.5009 0.7739
+vn -0.7983 0.0165 0.6020
+vn -0.3626 -0.6119 -0.7029
+vn 0.8552 -0.3416 -0.3898
+vn 0.1375 -0.2820 -0.9495
+vn -0.7336 0.5074 0.4520
+vn -0.2065 0.6318 0.7471
+vn -0.6612 0.4759 0.5800
+vn -0.6993 0.7045 -0.1207
+vn -0.6331 0.3804 -0.6741
+vn 0.6473 0.3636 -0.6699
+vn -0.7426 0.4939 -0.4523
+vn 0.1835 -0.5894 0.7867
+vn 0.5989 -0.5870 -0.5447
+vn 0.7033 -0.3501 0.6187
+vn -0.1620 -0.8321 0.5305
+vn 0.4089 0.4449 0.7968
+vn -0.7025 0.1837 0.6875
+vn -0.8728 -0.1903 0.4495
+vn -0.9463 -0.2642 -0.1864
+vn 0.4764 -0.5917 -0.6503
+vn -0.5439 0.3455 0.7647
+vn -0.1511 -0.5556 0.8176
+vn 0.6917 -0.3240 0.6454
+vn 0.8924 0.2726 0.3597
+vn -0.7478 0.2387 -0.6195
+vn -0.7477 0.2387 -0.6196
+vn -0.7486 0.2390 -0.6185
+vn 0.4347 0.7246 0.5347
+vn 0.1845 -0.5475 0.8162
+vn -0.5097 0.3556 0.7834
+vn -0.3238 0.6304 0.7055
+vn -0.0927 -0.8440 -0.5283
+vn 0.6279 0.3085 -0.7145
+vn -0.0160 -0.3290 -0.9442
+vn 0.1205 -0.4499 0.8849
+vn 0.2112 0.3218 0.9230
+vn 0.2564 0.2330 0.9381
+vn -0.3089 0.9501 0.0426
+vn -0.3677 0.9248 0.0980
+vn -0.2694 0.9542 -0.1300
+vn -0.3047 0.9382 -0.1640
+vn 0.4625 0.3645 0.8082
+vn 0.2385 0.6969 -0.6764
+vn -0.8265 0.1898 -0.5300
+vn 0.2254 0.0996 -0.9692
+vn -0.1928 -0.9488 -0.2503
+vn -0.6595 -0.2259 -0.7170
+vn 0.3734 -0.2513 0.8930
+vn -0.4393 -0.5272 -0.7274
+vn 0.5929 -0.5017 -0.6299
+vn -0.6602 -0.0620 -0.7485
+vn 0.2900 -0.3022 -0.9081
+vn -0.5220 -0.1075 0.8462
+vn -0.4201 -0.2910 0.8596
+vn 0.3135 0.9282 0.2004
+vn -0.8061 0.5916 -0.0138
+vn -0.4851 0.0873 -0.8701
+vn -0.2860 -0.0541 -0.9567
+vn 0.0459 -0.9023 0.4286
+vn 0.4383 -0.2698 0.8574
+vn 0.3612 -0.4872 0.7951
+vn -0.1597 -0.8538 0.4956
+vn -0.8954 -0.4424 0.0509
+vn 0.4316 -0.4279 -0.7941
+vn 0.7228 -0.6902 0.0339
+vn 0.5550 -0.1268 0.8221
+vn 0.1361 -0.9781 -0.1576
+vn -0.7617 0.0013 -0.6480
+vn 0.0209 0.4846 0.8745
+vn 0.0182 0.4988 0.8665
+vn 0.5074 -0.4444 -0.7383
+vn 0.7089 0.0238 -0.7049
+vn -0.2535 0.6245 -0.7388
+vn 0.8219 0.3252 -0.4676
+vn -0.3773 -0.4592 -0.8042
+vn 0.5267 -0.7548 -0.3911
+vn -0.2215 0.8649 -0.4504
+vn -0.7546 -0.6021 0.2609
+vn -0.5547 0.2933 -0.7787
+vn -0.0746 0.9969 0.0262
+vn -0.3274 -0.0485 0.9436
+vn 0.4690 0.4163 -0.7790
+vn -0.7697 0.4088 0.4904
+vn 0.3747 0.7431 0.5544
+vn -0.4429 0.8011 -0.4025
+vn 0.1826 0.2472 0.9516
+vn -0.7470 0.2384 -0.6206
+vn -0.8132 0.1896 0.5503
+vn 0.1587 0.9652 0.2079
+vn 0.2231 -0.1719 -0.9595
+vn 0.4307 -0.1470 0.8905
+vn 0.9544 0.1491 0.2584
+vn -0.4887 -0.3761 0.7872
+vn -0.2095 -0.8541 -0.4761
+vn 0.2102 -0.5228 0.8261
+vn 0.6195 0.6896 0.3750
+vn 0.7485 -0.4577 0.4800
+vn -0.8603 0.0119 -0.5096
+vn 0.5208 -0.4642 -0.7164
+vn -0.2560 -0.4072 0.8767
+vn -0.1381 0.5674 0.8118
+vn -0.5060 0.8398 0.1968
+vn -0.4981 0.7671 -0.4043
+vn -0.5491 0.7514 -0.3660
+vn -0.8014 0.2953 0.5201
+vn 0.6138 0.7168 0.3308
+vn -0.8802 0.0035 0.4746
+vn 0.6849 -0.5683 0.4560
+vn -0.2631 -0.9471 -0.1838
+vn 0.4523 -0.8351 0.3132
+vn 0.7692 -0.6167 -0.1671
+vn -0.7872 -0.0530 -0.6144
+vn 0.8075 -0.2198 -0.5474
+vn 0.2145 -0.3171 -0.9238
+vn -0.2287 0.2015 -0.9524
+vn -0.5656 0.7039 -0.4296
+vn -0.5697 0.8001 0.1877
+vn -0.3472 0.6508 -0.6752
+vn 0.4999 0.2429 0.8313
+vn 0.3317 -0.6153 0.7151
+vn -0.0638 0.3740 0.9252
+vn 0.7841 -0.5924 -0.1854
+vn 0.2905 0.4944 -0.8192
+vn -0.5915 0.0510 -0.8047
+vn -0.1137 0.8021 -0.5863
+vn -0.4172 0.3855 0.8230
+vn -0.3816 0.3443 -0.8578
+vn 0.8322 0.1623 0.5302
+vn -0.4848 0.8715 -0.0738
+vn 0.3793 0.6388 -0.6694
+vn 0.7201 -0.3219 0.6147
+vn -0.7331 0.1566 0.6619
+vn 0.1397 -0.1533 0.9783
+vn -0.6426 0.2254 0.7323
+vn -0.0872 -0.2549 -0.9630
+vn 0.3302 -0.6084 0.7217
+vn 0.1966 -0.5486 -0.8126
+vn 0.1101 0.9856 0.1286
+vn -0.3153 0.7690 -0.5561
+vn -0.4408 0.1351 0.8874
+vn -0.2451 0.8937 0.3759
+vn 0.0546 0.1755 -0.9830
+vn -0.7861 0.5902 0.1839
+vn -0.6618 -0.4052 -0.6308
+vn 0.1242 0.0302 0.9918
+vn 0.3465 -0.9348 -0.0778
+vn -0.2096 -0.6260 0.7512
+vn 0.0629 -0.5073 0.8595
+vn -0.2651 -0.6934 -0.6700
+s 1
+f 1//1 2//1 3//1
+f 4//2 5//2 6//2
+f 4//3 7//3 5//3
+f 6//4 5//4 8//4
+f 9//5 10//5 6//5
+f 4//6 6//6 10//6
+f 3//7 11//7 12//7
+f 13//8 14//8 15//8
+f 15//9 14//9 16//9
+f 15//10 16//10 17//10
+f 18//11 19//11 20//11
+f 21//12 22//12 19//12
+f 14//13 23//13 16//13
+f 24//14 25//14 26//14
+f 27//15 7//15 25//15
+f 28//16 25//16 29//16
+f 30//17 31//17 32//17
+f 33//18 34//18 35//18
+f 36//19 26//19 25//19
+f 36//20 25//20 28//20
+f 24//21 27//21 25//21
+f 37//22 38//22 39//22
+f 40//23 41//23 42//23
+f 43//24 44//24 45//24
+f 46//25 43//25 45//25
+f 44//26 47//26 48//26
+f 49//27 50//27 51//27
+f 49//28 52//28 50//28
+f 53//29 54//29 55//29
+f 56//30 57//30 58//30
+f 59//31 38//31 60//31
+f 61//32 62//32 63//32
+f 64//33 65//33 59//33
+f 45//34 44//34 64//34
+f 64//35 44//35 65//35
+f 66//36 44//36 48//36
+f 44//37 66//37 65//37
+f 65//38 66//38 67//38
+f 52//39 67//39 66//39
+f 68//40 67//40 52//40
+f 69//41 70//41 71//41
+f 72//42 70//42 73//42
+f 73//43 70//43 69//43
+f 72//44 71//44 70//44
+f 74//45 69//45 75//45
+f 69//46 71//46 75//46
+f 76//47 77//47 36//47
+f 36//48 77//48 78//48
+f 79//49 80//49 81//49
+f 80//50 82//50 81//50
+f 81//51 83//51 79//51
+f 82//52 84//52 81//52
+f 81//53 84//53 28//53
+f 81//54 28//54 83//54
+f 83//55 78//55 79//55
+f 85//56 76//56 84//56
+f 84//57 76//57 28//57
+f 36//58 28//58 76//58
+f 86//59 69//59 74//59
+f 87//60 88//60 89//60
+f 90//61 91//61 92//61
+f 92//62 93//62 90//62
+f 87//63 89//63 91//63
+f 94//64 89//65 88//66
+f 89//67 94//67 95//67
+f 61//68 96//68 97//68
+f 61//69 63//70 96//71
+f 60//72 38//72 98//72
+f 99//73 46//73 60//73
+f 99//74 60//74 98//74
+f 100//75 62//75 61//75
+f 101//76 94//76 102//76
+f 103//77 104//77 90//77
+f 90//78 104//78 87//78
+f 33//79 82//79 103//79
+f 104//80 88//80 87//80
+f 33//81 105//81 82//81
+f 94//64 88//66 102//82
+f 106//83 102//83 84//83
+f 106//84 101//84 102//84
+f 107//85 101//85 106//85
+f 108//86 109//86 110//86
+f 110//87 111//87 108//87
+f 112//88 113//88 114//88
+f 115//89 6//89 8//89
+f 8//90 116//90 115//90
+f 116//91 117//91 115//91
+f 8//92 12//92 116//92
+f 11//93 118//93 12//93
+f 12//94 118//94 116//94
+f 118//95 119//95 116//95
+f 120//96 119//96 118//96
+f 121//97 3//97 95//97
+f 122//98 25//98 7//98
+f 95//99 3//99 12//99
+f 123//100 95//100 12//100
+f 124//101 93//101 125//101
+f 125//102 93//102 5//102
+f 5//103 93//103 123//103
+f 123//104 12//104 5//104
+f 7//105 125//105 5//105
+f 125//106 34//106 126//106
+f 122//107 121//107 126//107
+f 31//108 28//108 127//108
+f 128//109 129//109 130//109
+f 131//110 132//110 133//110
+f 131//111 39//111 134//111
+f 39//112 131//112 37//112
+f 131//113 134//113 135//113
+f 131//114 135//114 132//114
+f 131//115 133//115 37//115
+f 39//116 136//116 134//116
+f 134//117 137//117 135//117
+f 135//118 137//118 54//118
+f 136//119 130//119 134//119
+f 134//120 130//120 137//120
+f 136//121 128//121 130//121
+f 138//122 137//122 130//122
+f 129//123 138//123 130//123
+f 139//124 13//124 15//124
+f 140//125 141//125 142//125
+f 140//126 143//126 144//126
+f 140//127 144//127 145//127
+f 144//128 146//128 145//128
+f 143//129 147//129 144//129
+f 148//130 149//130 147//130
+f 144//131 149//131 146//131
+f 145//132 141//132 140//132
+f 143//133 140//133 142//133
+f 143//134 142//134 110//134
+f 149//135 150//135 146//135
+f 151//136 152//136 150//136
+f 150//137 152//137 146//137
+f 146//138 152//138 145//138
+f 141//139 145//139 152//139
+f 151//140 142//140 152//140
+f 142//141 141//141 152//141
+f 153//142 154//142 155//142
+f 154//143 49//143 155//143
+f 156//144 157//144 43//144
+f 157//145 156//145 158//145
+f 159//146 156//146 46//146
+f 43//147 157//147 47//147
+f 160//148 155//148 51//148
+f 154//149 161//149 49//149
+f 162//150 153//150 155//150
+f 163//151 164//151 165//151
+f 124//152 90//152 93//152
+f 166//153 167//153 164//153
+f 167//154 165//154 164//154
+f 168//155 169//155 167//155
+f 170//156 171//156 172//156
+f 170//157 172//157 173//157
+f 173//158 172//158 174//158
+f 174//159 172//159 175//159
+f 176//160 171//161 177//162
+f 176//160 172//163 171//161
+f 178//164 179//164 180//164
+f 181//165 182//165 183//165
+f 184//166 182//166 181//166
+f 185//167 186//167 187//167
+f 187//168 186//168 184//168
+f 186//169 182//169 184//169
+f 186//170 188//170 182//170
+f 189//171 190//171 191//171
+f 190//172 189//172 192//172
+f 192//173 189//173 193//173
+f 194//174 195//174 192//174
+f 193//175 194//175 192//175
+f 196//176 197//176 198//176
+f 199//177 200//177 201//177
+f 202//178 199//178 201//178
+f 202//179 165//179 199//179
+f 24//180 198//180 27//180
+f 197//181 27//181 198//181
+f 174//182 196//182 198//182
+f 203//183 112//183 204//183
+f 205//184 10//184 9//184
+f 206//185 205//185 207//185
+f 206//186 207//186 108//186
+f 206//187 10//187 205//187
+f 206//188 108//188 111//188
+f 208//189 204//189 2//189
+f 203//190 113//190 112//190
+f 208//191 209//191 203//191
+f 210//192 211//192 212//192
+f 213//193 214//193 215//193
+f 212//194 216//194 195//194
+f 195//195 217//195 212//195
+f 217//196 210//196 212//196
+f 183//197 177//198 171//199
+f 218//200 219//200 220//200
+f 219//201 218//201 184//201
+f 218//202 220//202 168//202
+f 187//203 218//203 168//203
+f 181//204 183//204 221//204
+f 221//205 183//205 171//205
+f 170//206 221//206 171//206
+f 164//207 222//207 166//207
+f 166//208 222//208 223//208
+f 223//209 224//209 175//209
+f 225//210 226//210 132//210
+f 133//211 132//211 226//211
+f 226//212 227//212 133//212
+f 228//213 198//213 229//213
+f 169//214 230//214 199//214
+f 169//215 199//215 165//215
+f 169//216 18//216 230//216
+f 18//217 169//217 231//217
+f 220//218 231//218 169//218
+f 170//219 173//219 198//219
+f 170//220 198//220 228//220
+f 232//221 170//221 228//221
+f 24//222 26//222 233//222
+f 234//223 235//223 236//223
+f 26//224 36//224 237//224
+f 238//225 24//225 233//225
+f 182//226 188//226 239//226
+f 240//227 223//227 239//227
+f 240//228 188//228 241//228
+f 240//229 241//229 166//229
+f 240//230 166//230 223//230
+f 188//231 240//231 239//231
+f 176//232 223//232 175//232
+f 239//233 223//233 176//233
+f 242//234 16//234 243//234
+f 189//235 242//235 193//235
+f 189//236 191//236 244//236
+f 244//237 245//237 22//237
+f 21//238 244//238 22//238
+f 244//239 21//239 189//239
+f 189//240 40//241 242//242
+f 194//243 242//243 243//243
+f 16//244 23//244 243//244
+f 242//245 17//245 16//245
+f 121//246 101//246 107//246
+f 126//247 106//247 28//247
+f 246//248 247//248 248//248
+f 136//249 67//249 68//249
+f 59//250 65//250 39//250
+f 38//251 59//251 39//251
+f 65//252 249//252 39//252
+f 136//253 249//253 67//253
+f 136//254 62//254 128//254
+f 250//255 251//255 246//255
+f 252//256 250//256 246//256
+f 252//257 246//257 253//257
+f 246//258 248//258 253//258
+f 254//259 248//259 255//259
+f 253//260 248//260 254//260
+f 80//261 77//261 256//261
+f 47//262 257//262 51//262
+f 258//263 257//263 157//263
+f 158//264 258//264 157//264
+f 258//265 160//265 257//265
+f 257//266 160//266 51//266
+f 162//267 160//267 258//267
+f 259//268 154//268 153//268
+f 259//269 158//269 74//269
+f 260//270 261//270 159//270
+f 261//271 260//271 262//271
+f 261//272 262//272 158//272
+f 262//273 86//273 158//273
+f 158//274 259//274 153//274
+f 190//275 216//275 213//275
+f 245//276 263//276 180//276
+f 245//277 264//277 265//277
+f 243//278 266//278 267//278
+f 23//279 266//279 243//279
+f 267//280 194//280 243//280
+f 231//281 268//281 269//281
+f 268//282 270//282 269//282
+f 271//283 221//283 232//283
+f 139//284 221//284 271//284
+f 241//285 188//285 186//285
+f 272//286 42//286 41//286
+f 41//287 21//287 19//287
+f 268//288 181//288 221//288
+f 268//289 220//289 219//289
+f 219//290 184//291 181//292
+f 219//290 181//292 268//293
+f 13//294 229//294 14//294
+f 273//295 234//295 236//295
+f 230//296 20//296 273//296
+f 20//297 179//297 273//297
+f 229//298 233//298 14//298
+f 246//299 251//299 206//299
+f 206//300 111//300 247//300
+f 246//301 206//301 247//301
+f 248//302 111//302 209//302
+f 247//303 111//303 248//303
+f 248//304 209//304 255//304
+f 274//305 90//305 124//305
+f 27//306 275//306 122//306
+f 122//307 7//307 200//307
+f 112//308 276//308 277//308
+f 277//309 276//309 120//309
+f 278//310 276//311 149//312
+f 279//313 149//313 207//313
+f 280//314 281//314 279//314
+f 280//315 279//315 207//315
+f 281//316 278//316 279//316
+f 279//317 278//310 149//312
+f 119//318 120//318 276//318
+f 112//319 149//319 276//319
+f 266//320 282//320 283//320
+f 283//321 282//321 57//321
+f 283//322 57//322 210//322
+f 215//323 284//323 265//323
+f 227//324 226//324 285//324
+f 56//325 286//325 287//325
+f 287//326 57//326 56//326
+f 224//327 254//327 288//327
+f 289//328 222//328 164//328
+f 222//329 289//329 250//329
+f 222//330 250//330 252//330
+f 222//331 252//331 253//331
+f 222//332 253//332 224//332
+f 290//333 224//333 288//333
+f 224//334 253//334 254//334
+f 80//335 256//335 178//335
+f 256//336 23//336 178//336
+f 194//337 217//337 195//337
+f 148//338 147//338 109//338
+f 114//339 151//339 150//339
+f 237//340 234//340 178//340
+f 23//341 14//341 26//341
+f 26//342 14//342 233//342
+f 204//343 277//343 118//343
+f 6//344 115//344 205//344
+f 205//345 115//345 281//345
+f 277//346 120//346 118//346
+f 2//347 204//347 118//347
+f 103//348 284//348 104//348
+f 104//349 53//349 88//349
+f 102//350 55//350 291//350
+f 102//351 88//351 55//351
+f 85//352 291//352 282//352
+f 85//353 84//353 102//353
+f 98//354 37//354 227//354
+f 285//355 98//355 227//355
+f 211//356 292//356 100//356
+f 75//357 71//357 293//357
+f 212//358 97//358 293//358
+f 293//359 97//359 96//359
+f 294//360 213//360 72//360
+f 294//361 99//361 98//361
+f 294//362 214//362 213//362
+f 294//363 262//363 99//363
+f 262//364 294//364 72//364
+f 72//365 73//365 262//365
+f 72//366 213//366 71//366
+f 216//367 212//367 71//367
+f 212//368 211//368 97//368
+f 71//369 212//369 293//369
+f 196//370 295//370 288//370
+f 201//371 4//371 296//371
+f 4//372 10//372 296//372
+f 296//373 10//373 251//373
+f 201//374 296//374 289//374
+f 201//375 289//375 202//375
+f 197//376 297//376 275//376
+f 275//377 297//377 1//377
+f 1//378 297//378 208//378
+f 208//379 297//379 255//379
+f 288//380 255//380 297//380
+f 288//381 297//381 196//381
+f 47//382 50//382 48//382
+f 286//383 56//383 129//383
+f 227//384 37//384 133//384
+f 298//385 299//385 300//385
+f 300//386 301//386 302//386
+f 303//387 304//387 305//387
+f 303//388 306//388 304//388
+f 306//389 303//389 299//389
+f 298//390 300//390 302//390
+f 307//391 308//391 309//391
+f 310//392 311//393 312//394
+f 312//395 313//395 314//395
+f 312//396 314//397 315//398
+f 313//399 316//399 314//399
+f 308//400 317//400 309//400
+f 318//401 319//401 320//401
+f 319//402 321//402 320//402
+f 322//403 323//403 324//403
+f 323//404 325//404 324//404
+f 322//405 324//405 326//405
+f 327//406 328//406 329//406
+f 330//407 331//407 329//407
+f 331//408 327//408 329//408
+f 332//409 119//409 333//409
+f 332//410 116//410 119//410
+f 333//411 278//412 334//413
+f 117//414 335//414 336//414
+f 336//415 337//415 117//415
+f 335//416 117//416 338//416
+f 334//417 339//417 333//417
+f 340//418 341//418 342//418
+f 305//419 343//419 344//419
+f 341//420 340//420 345//420
+f 301//421 345//421 340//421
+f 346//422 347//422 348//422
+f 346//423 349//423 347//423
+f 346//424 350//424 324//424
+f 351//425 352//425 353//425
+f 354//426 355//426 356//426
+f 357//427 358//427 359//427
+f 358//428 360//428 354//428
+f 358//429 354//429 359//429
+f 360//430 355//430 354//430
+f 359//431 354//431 356//431
+f 349//432 361//432 362//432
+f 306//433 363//433 304//433
+f 306//434 364//434 363//434
+f 364//435 306//435 298//435
+f 364//436 298//436 365//436
+f 302//437 366//437 365//437
+f 298//438 302//438 365//438
+f 367//439 368//439 369//439
+f 370//440 371//440 372//440
+f 372//441 371//441 367//441
+f 372//442 367//442 369//442
+f 357//443 359//443 373//443
+f 359//444 374//444 373//444
+f 373//445 374//445 375//445
+f 373//446 375//446 376//446
+f 356//447 374//447 359//447
+f 356//448 375//448 374//448
+f 377//449 300//449 378//449
+f 377//450 301//450 300//450
+f 379//451 380//451 381//451
+f 379//452 344//452 382//452
+f 303//453 305//453 379//453
+f 379//454 305//454 344//454
+f 379//455 382//455 380//455
+f 379//456 381//456 383//456
+f 383//457 303//457 379//457
+f 377//458 345//458 301//458
+f 345//459 377//459 384//459
+f 384//460 377//460 385//460
+f 378//461 386//461 377//461
+f 387//462 382//462 344//462
+f 387//463 343//464 388//465
+f 343//466 389//466 388//466
+f 388//465 390//467 387//463
+f 390//468 388//468 391//468
+f 389//469 341//469 392//469
+f 341//470 393//470 392//470
+f 394//471 392//471 393//471
+f 392//472 394//472 391//472
+f 395//473 396//473 397//473
+f 398//474 399//474 397//474
+f 400//475 401//475 402//475
+f 400//476 403//476 401//476
+f 400//477 396//477 403//477
+f 396//478 404//478 397//478
+f 405//479 406//479 341//479
+f 407//480 406//480 405//480
+f 408//481 409//481 410//481
+f 408//482 410//482 411//482
+f 408//483 400//483 409//483
+f 407//484 404//484 406//484
+f 412//485 406//485 404//485
+f 366//486 341//487 406//488
+f 366//489 406//489 412//489
+f 413//490 414//490 415//490
+f 416//491 417//491 418//491
+f 419//492 418//492 420//492
+f 418//493 419//493 421//493
+f 401//494 418//494 421//494
+f 401//495 416//495 418//495
+f 422//496 423//496 424//496
+f 422//497 415//497 423//497
+f 413//498 415//498 422//498
+f 398//499 414//499 399//499
+f 368//500 425//500 426//500
+f 427//501 428//501 429//501
+f 428//502 430//502 370//502
+f 428//503 370//504 431//505
+f 431//505 370//504 372//506
+f 428//507 431//507 432//507
+f 428//508 432//508 429//508
+f 372//509 369//509 431//509
+f 433//510 434//511 368//512
+f 368//513 434//513 425//513
+f 435//514 434//514 436//514
+f 435//515 437//515 434//515
+f 423//516 438//516 439//516
+f 417//517 440//517 418//517
+f 420//518 418//518 441//518
+f 442//519 443//519 444//519
+f 395//520 413//520 444//520
+f 403//521 395//521 443//521
+f 403//522 445//522 446//522
+f 445//523 403//523 443//523
+f 445//524 443//524 442//524
+f 447//525 445//525 442//525
+f 443//526 395//526 444//526
+f 448//527 449//527 450//527
+f 451//528 452//528 453//528
+f 451//529 453//529 448//529
+f 448//530 450//530 451//530
+f 454//531 450//531 449//531
+f 454//532 455//532 450//532
+f 456//533 457//533 458//533
+f 453//534 459//534 460//534
+f 461//535 462//535 419//535
+f 463//536 462//536 453//536
+f 463//537 453//537 460//537
+f 456//538 464//538 457//538
+f 465//539 464//539 456//539
+f 466//540 456//540 458//540
+f 465//541 456//541 466//541
+f 467//542 331//542 468//542
+f 468//543 469//543 470//543
+f 471//544 472//544 473//544
+f 474//545 475//545 476//545
+f 308//546 477//546 317//546
+f 315//398 314//397 478//547
+f 479//548 315//548 478//548
+f 479//549 478//549 477//549
+f 315//550 479//550 480//550
+f 316//551 477//551 478//551
+f 479//552 477//552 308//552
+f 481//553 482//553 483//553
+f 362//554 484//554 347//554
+f 485//555 486//555 362//555
+f 487//556 486//556 488//556
+f 347//557 484//557 489//557
+f 476//558 483//559 472//560
+f 482//561 328//561 483//561
+f 476//562 490//562 483//562
+f 491//563 481//563 483//563
+f 490//564 491//564 483//564
+f 492//565 339//565 334//565
+f 492//566 493//566 320//566
+f 494//567 495//567 337//567
+f 494//568 496//568 495//568
+f 336//569 494//569 337//569
+f 497//570 339//570 320//570
+f 493//571 318//571 320//571
+f 492//572 320//572 339//572
+f 334//573 493//573 492//573
+f 321//574 498//574 499//574
+f 500//575 471//575 501//575
+f 502//576 503//576 504//576
+f 361//577 349//577 505//577
+f 505//578 349//578 325//578
+f 349//579 346//579 325//579
+f 502//580 506//580 503//580
+f 506//581 502//581 499//581
+f 502//582 497//582 321//582
+f 507//583 508//583 509//583
+f 464//584 435//584 436//584
+f 430//585 459//585 452//585
+f 459//586 510//586 460//586
+f 435//587 464//587 511//587
+f 511//588 464//588 465//588
+f 512//589 502//589 504//589
+f 513//590 514//590 515//590
+f 514//591 513//591 338//591
+f 513//592 515//592 516//592
+f 513//593 516//593 517//593
+f 335//594 513//594 517//594
+f 338//595 513//595 335//595
+f 518//596 512//596 504//596
+f 518//597 504//597 519//597
+f 512//598 497//598 502//598
+f 339//599 497//599 512//599
+f 518//600 332//600 512//600
+f 419//601 420//602 461//603
+f 420//602 520//604 461//603
+f 520//605 420//605 441//605
+f 521//606 438//606 522//606
+f 523//607 524//607 525//607
+f 526//608 350//609 527//610
+f 528//611 527//611 523//611
+f 528//612 523//612 529//612
+f 523//613 525//613 529//613
+f 525//614 530//614 529//614
+f 531//615 480//615 532//615
+f 531//616 533//616 310//616
+f 310//617 315//617 531//617
+f 531//618 532//618 534//618
+f 319//619 534//619 532//619
+f 532//620 480//620 307//620
+f 535//621 375//621 536//621
+f 508//622 476//558 472//560
+f 485//623 508//623 468//623
+f 485//624 476//625 508//626
+f 537//627 538//627 539//627
+f 538//628 422//628 539//628
+f 540//629 447//629 541//629
+f 357//630 373//630 542//630
+f 540//631 542//631 417//631
+f 540//632 357//632 542//632
+f 357//633 540//633 541//633
+f 539//634 375//634 356//634
+f 375//635 539//635 536//635
+f 539//636 422//636 536//636
+f 536//637 422//637 424//637
+f 489//638 543//638 544//638
+f 489//639 487//639 543//639
+f 544//640 543//640 545//640
+f 543//641 546//641 545//641
+f 546//642 482//642 481//642
+f 546//643 481//644 545//645
+f 352//646 547//646 481//646
+f 470//647 548//647 467//647
+f 467//648 548//648 549//648
+f 467//649 549//649 331//649
+f 549//650 550//650 327//650
+f 473//651 327//651 550//651
+f 473//652 550//652 551//652
+f 392//653 552//653 553//653
+f 388//654 552//654 392//654
+f 389//655 392//655 405//655
+f 388//656 554//656 552//656
+f 410//657 555//657 556//657
+f 410//658 556//658 557//658
+f 389//659 410//659 557//659
+f 389//660 411//660 410//660
+f 558//661 555//661 405//661
+f 557//662 554//662 388//662
+f 389//663 557//663 388//663
+f 405//664 392//664 553//664
+f 495//665 534//665 493//665
+f 278//666 495//666 334//666
+f 337//667 495//667 278//667
+f 495//668 493//668 334//668
+f 540//669 416//669 446//669
+f 538//670 413//670 422//670
+f 538//671 444//671 413//671
+f 559//672 500//672 501//672
+f 560//673 561//673 510//673
+f 560//674 510//674 429//674
+f 560//675 429//675 562//675
+f 429//676 548//676 562//676
+f 501//677 437//677 511//677
+f 501//678 563//678 437//678
+f 559//679 501//679 511//679
+f 552//680 554//680 500//680
+f 440//681 535//681 521//681
+f 521//682 441//682 440//682
+f 535//683 439//683 521//683
+f 564//684 565//684 371//684
+f 451//685 564//685 430//685
+f 430//686 564//686 370//686
+f 451//687 450//687 564//687
+f 450//688 455//688 565//688
+f 450//689 565//689 564//689
+f 436//690 565//690 455//690
+f 398//691 404//691 566//691
+f 567//692 568//692 566//692
+f 566//693 568//693 466//693
+f 569//694 407//694 409//694
+f 569//695 463//695 570//695
+f 569//696 555//696 407//696
+f 569//697 421//697 463//697
+f 421//698 569//698 409//698
+f 421//699 409//699 402//699
+f 566//700 466//700 414//700
+f 466//701 568//701 465//701
+f 558//702 567//703 566//704
+f 404//705 558//705 566//705
+f 545//706 524//706 523//706
+f 527//707 545//707 523//707
+f 544//708 527//610 350//609
+f 527//709 544//709 545//709
+f 352//710 351//710 547//710
+f 360//711 442//711 355//711
+f 537//712 356//712 355//712
+f 519//713 571//713 384//713
+f 572//714 387//714 390//714
+f 387//715 573//715 382//715
+f 573//716 387//716 572//716
+f 573//717 572//717 362//717
+f 573//718 362//718 361//718
+f 390//719 391//719 572//719
+f 571//720 391//720 393//720
+f 391//721 571//721 475//721
+f 475//722 571//722 490//722
+f 490//723 571//723 503//723
+f 571//724 519//724 503//724
+f 324//725 311//725 574//725
+f 311//726 324//726 526//726
+f 324//727 350//727 526//727
+f 526//728 528//728 313//728
+f 311//729 526//729 313//729
+f 316//730 528//730 529//730
+f 528//731 316//731 313//731
+f 498//732 309//732 351//732
+f 351//733 309//733 530//733
+f 529//734 530//734 316//734
+f 309//735 316//735 530//735
+f 568//736 567//736 500//736
+f 500//737 559//737 568//737
+f 561//738 570//738 575//738
+f 460//739 576//739 575//739
+f 576//740 465//740 559//740
+f 465//741 568//741 559//741
+f 577//742 425//742 437//742
+f 549//743 432//743 578//743
+f 432//744 426//744 578//744
+f 549//745 548//745 432//745
+f 548//746 429//746 432//746
+f 578//747 426//747 425//747
+f 425//748 577//748 578//748
+f 578//749 577//749 549//749
+f 396//750 579//750 412//750
+f 343//751 580//751 408//751
+f 363//752 579//752 400//752
+f 581//753 408//753 580//753
+f 400//754 579//754 396//754
+f 343//755 411//755 341//755
+f 579//756 365//756 412//756
+f 365//757 366//757 412//757
+f 369//758 368//758 426//758
+f 551//759 501//759 471//759
+f 469//760 560//760 470//760
+f 501//761 551//761 563//761
+f 407//762 558//762 404//762
+f 385//763 519//763 384//763
+f 329//764 546//764 543//764
+f 330//765 543//765 487//765
+f 330//766 329//766 543//766
+f 546//767 329//767 328//767
+f 448//768 520//768 449//768
+f 461//769 520//769 448//769
+f 441//770 522//770 520//770
+f 520//771 522//771 449//771
+f 514//772 338//772 332//772
+f 510//773 561//773 575//773
+f 381//774 514//774 582//774
+f 514//775 332//775 582//775
+f 582//776 332//776 386//776
+f 518//777 519//777 385//777
+f 332//778 518//778 386//778
+f 192//779 195//779 190//779
+f 3//780 2//780 11//780
+f 8//781 5//781 12//781
+f 3//782 122//782 275//782
+f 1//783 3//783 275//783
+f 22//784 180//784 179//784
+f 20//785 19//785 22//785
+f 22//786 179//786 20//786
+f 235//787 35//787 200//787
+f 235//788 33//788 35//788
+f 83//789 235//789 237//789
+f 30//790 33//790 235//790
+f 235//791 83//791 30//791
+f 36//792 83//792 237//792
+f 83//793 28//793 31//793
+f 83//794 31//794 30//794
+f 34//795 33//795 32//795
+f 31//796 34//796 32//796
+f 25//797 34//797 29//797
+f 27//798 35//798 7//798
+f 139//799 15//799 272//799
+f 41//800 40//800 21//800
+f 46//801 45//801 583//801
+f 44//802 43//802 47//802
+f 52//803 49//803 161//803
+f 58//804 138//804 56//804
+f 60//805 46//805 59//805
+f 63//806 584//806 68//806
+f 2//807 1//807 208//807
+f 62//808 584//808 63//808
+f 64//809 59//809 583//809
+f 64//810 583//810 45//810
+f 48//811 50//811 66//811
+f 50//812 52//812 66//812
+f 52//813 161//813 68//813
+f 210//814 57//814 287//814
+f 226//815 215//816 285//817
+f 83//818 36//818 78//818
+f 76//819 85//819 266//819
+f 69//820 86//820 73//820
+f 91//821 90//821 87//821
+f 123//822 93//822 92//822
+f 91//823 123//823 92//823
+f 164//824 163//824 289//824
+f 585//825 290//825 295//825
+f 59//826 46//826 583//826
+f 161//827 96//71 63//70
+f 161//828 63//828 68//828
+f 97//829 100//829 61//829
+f 84//830 105//830 106//830
+f 103//831 90//831 274//831
+f 274//832 33//832 103//832
+f 207//833 149//833 148//833
+f 148//834 109//834 207//834
+f 108//835 207//835 109//835
+f 110//836 113//836 111//836
+f 112//837 114//837 150//837
+f 110//838 114//838 113//838
+f 281//839 115//839 117//839
+f 121//840 122//840 3//840
+f 107//841 126//841 121//841
+f 125//842 7//842 35//842
+f 125//843 35//843 34//843
+f 126//844 34//844 25//844
+f 25//845 122//845 126//845
+f 34//846 31//847 29//848
+f 31//847 127//849 29//848
+f 54//850 132//850 135//850
+f 138//851 54//851 137//851
+f 138//852 129//852 56//852
+f 13//853 139//853 271//853
+f 19//854 18//854 269//854
+f 144//855 147//855 149//855
+f 151//856 110//856 142//856
+f 162//857 158//857 153//857
+f 43//858 46//858 156//858
+f 156//859 159//859 261//859
+f 158//860 156//860 261//860
+f 49//861 51//861 155//861
+f 96//862 161//862 154//862
+f 155//863 160//863 162//863
+f 202//864 163//864 165//864
+f 174//865 290//865 585//865
+f 174//866 175//866 290//866
+f 241//867 185//867 167//867
+f 167//868 169//868 165//868
+f 167//869 166//869 241//869
+f 168//870 167//870 185//870
+f 169//871 168//871 220//871
+f 176//872 175//872 172//872
+f 178//873 234//873 179//873
+f 183//197 182//874 177//198
+f 236//875 200//875 199//875
+f 24//876 238//876 198//876
+f 198//877 173//877 174//877
+f 113//878 209//878 111//878
+f 207//879 205//879 280//879
+f 586//880 10//880 206//880
+f 208//881 203//881 204//881
+f 113//882 203//882 209//882
+f 285//883 215//883 214//883
+f 213//884 215//884 264//884
+f 264//885 190//885 213//885
+f 211//886 210//886 287//886
+f 185//887 187//887 168//887
+f 184//888 218//888 187//888
+f 290//889 175//889 224//889
+f 282//890 58//890 57//890
+f 291//891 55//891 58//891
+f 138//892 58//892 55//892
+f 53//893 284//893 225//893
+f 54//894 53//894 132//894
+f 53//895 225//895 132//895
+f 226//896 225//896 284//896
+f 54//897 138//897 55//897
+f 291//898 58//898 282//898
+f 232//899 228//899 271//899
+f 229//900 13//900 228//900
+f 236//901 199//901 230//901
+f 198//902 238//902 229//902
+f 228//903 13//903 271//903
+f 237//904 235//904 234//904
+f 200//905 236//905 235//905
+f 239//906 176//906 182//906
+f 242//242 40//241 587//907
+f 242//908 194//908 193//908
+f 244//909 191//909 245//909
+f 245//910 180//910 22//910
+f 21//911 40//911 189//911
+f 242//912 587//912 17//912
+f 285//913 214//913 98//913
+f 211//914 100//914 97//914
+f 107//915 106//915 126//915
+f 121//916 94//916 101//916
+f 95//917 91//917 89//917
+f 126//918 28//918 29//918
+f 33//919 124//919 125//919
+f 33//920 274//920 124//920
+f 28//921 30//921 127//921
+f 30//922 32//922 127//922
+f 127//923 32//923 29//923
+f 32//924 33//924 126//924
+f 32//925 126//925 29//925
+f 125//926 126//926 33//926
+f 30//927 28//927 33//927
+f 91//928 95//928 123//928
+f 105//929 33//929 28//929
+f 28//930 106//930 105//930
+f 121//931 95//931 94//931
+f 67//932 249//932 65//932
+f 249//933 136//933 39//933
+f 136//934 68//934 584//934
+f 584//935 62//935 136//935
+f 588//936 254//936 255//936
+f 77//937 76//937 256//937
+f 79//938 77//938 80//938
+f 76//939 266//939 256//939
+f 258//940 158//940 162//940
+f 257//941 47//941 157//941
+f 46//942 260//942 159//942
+f 260//943 46//943 99//943
+f 260//944 99//944 262//944
+f 262//945 73//945 86//945
+f 74//946 75//946 259//946
+f 154//947 259//947 96//947
+f 259//948 75//948 96//948
+f 216//949 190//949 195//949
+f 264//950 245//950 191//950
+f 265//951 264//951 215//951
+f 245//952 265//952 263//952
+f 263//953 80//953 180//953
+f 266//954 23//954 256//954
+f 210//955 217//955 267//955
+f 267//956 283//956 210//956
+f 267//957 266//957 283//957
+f 194//958 267//958 217//958
+f 231//959 269//959 18//959
+f 231//960 220//960 268//960
+f 139//961 268//962 221//963
+f 268//962 139//961 270//964
+f 186//965 185//965 241//965
+f 177//966 182//966 176//966
+f 587//967 15//967 17//967
+f 40//968 42//968 587//968
+f 272//969 41//969 270//969
+f 19//970 270//970 41//970
+f 270//971 19//971 269//971
+f 272//972 270//972 139//972
+f 587//973 42//973 272//973
+f 587//974 272//974 15//974
+f 170//975 232//975 221//975
+f 223//976 222//976 224//976
+f 230//977 18//977 20//977
+f 273//978 179//978 234//978
+f 236//979 230//979 273//979
+f 238//980 233//980 229//980
+f 251//981 586//981 206//981
+f 209//982 208//982 255//982
+f 287//983 292//983 211//983
+f 286//984 292//985 287//986
+f 62//987 292//985 286//984
+f 62//988 100//988 292//988
+f 37//989 98//989 38//989
+f 128//990 62//990 286//990
+f 129//991 128//991 286//991
+f 27//992 122//992 35//992
+f 4//993 201//993 200//993
+f 4//994 200//994 7//994
+f 122//995 200//995 35//995
+f 275//996 27//996 197//996
+f 174//997 585//997 196//997
+f 276//998 278//998 119//998
+f 117//999 278//999 281//999
+f 149//1000 112//1000 150//1000
+f 215//816 226//815 284//1001
+f 265//1002 80//1002 263//1002
+f 266//1003 85//1003 282//1003
+f 290//1004 288//1004 295//1004
+f 288//1005 254//1005 588//1005
+f 74//1006 158//1006 86//1006
+f 80//1007 178//1007 180//1007
+f 190//1008 264//1008 191//1008
+f 147//1009 143//1009 109//1009
+f 110//1010 109//1010 143//1010
+f 114//1011 110//1011 151//1011
+f 23//1012 26//1012 77//1012
+f 23//1013 77//1013 178//1013
+f 77//1014 79//1014 178//1014
+f 79//1015 237//1015 178//1015
+f 237//1016 79//1016 78//1016
+f 26//1017 237//1017 78//1017
+f 78//1018 77//1018 26//1018
+f 205//1019 9//1019 6//1019
+f 281//1020 280//1020 205//1020
+f 204//1021 112//1021 277//1021
+f 11//1022 2//1022 118//1022
+f 291//1023 85//1023 102//1023
+f 284//1024 53//1024 104//1024
+f 284//1025 103//1025 82//1025
+f 55//1026 88//1026 53//1026
+f 84//1027 82//1027 105//1027
+f 80//1028 265//1028 82//1028
+f 265//1029 284//1029 82//1029
+f 294//1030 98//1030 214//1030
+f 213//1031 216//1031 71//1031
+f 293//1032 96//1032 75//1032
+f 196//1033 585//1033 295//1033
+f 296//1034 250//1034 289//1034
+f 296//1035 251//1035 250//1035
+f 251//1036 10//1036 586//1036
+f 163//1037 202//1037 289//1037
+f 197//1038 196//1038 297//1038
+f 255//1039 288//1039 588//1039
+f 51//1040 50//1040 47//1040
+f 581//1041 305//1041 304//1041
+f 383//1042 299//1042 303//1042
+f 306//1043 299//1043 298//1043
+f 301//1044 342//1044 302//1044
+f 300//1045 299//1045 378//1045
+f 307//1046 480//1046 308//1046
+f 311//393 310//392 326//1047
+f 574//1048 311//1048 326//1048
+f 313//1049 312//1049 311//1049
+f 312//1050 315//1050 310//1050
+f 498//1051 307//1051 309//1051
+f 326//1052 324//1052 574//1052
+f 326//1053 496//1053 322//1053
+f 321//1054 319//1054 498//1054
+f 468//1055 331//1056 330//1057
+f 117//1058 116//1058 338//1058
+f 116//1059 332//1059 338//1059
+f 117//1060 337//1060 278//1060
+f 119//1061 278//412 333//411
+f 343//1062 305//1062 580//1062
+f 305//1063 581//1063 580//1063
+f 340//1064 342//1064 301//1064
+f 353//1065 506//1065 499//1065
+f 353//1066 352//1066 491//1066
+f 506//1067 353//1067 491//1067
+f 353//1068 498//1068 351//1068
+f 324//1069 325//1069 346//1069
+f 346//1070 348//1070 350//1070
+f 499//1071 498//1071 353//1071
+f 358//1072 357//1072 541//1072
+f 358//1073 541//1073 360//1073
+f 503//1074 491//1074 490//1074
+f 362//1075 347//1075 349//1075
+f 491//1076 503//1076 506//1076
+f 342//1077 366//1077 302//1077
+f 364//1078 365//1078 363//1078
+f 304//1079 363//1079 581//1079
+f 461//1080 448//1080 453//1080
+f 449//1081 457//1081 454//1081
+f 367//1082 371//1082 565//1082
+f 433//1083 367//1083 565//1083
+f 433//510 368//512 367//1084
+f 385//1085 377//1085 386//1085
+f 387//1086 344//1086 343//1086
+f 389//1087 343//1087 341//1087
+f 392//1088 391//1088 388//1088
+f 345//1089 393//1089 341//1089
+f 345//1090 384//1090 393//1090
+f 396//1091 395//1091 403//1091
+f 400//1092 402//1092 589//1092
+f 404//1093 398//1093 397//1093
+f 399//1094 395//1094 397//1094
+f 404//1095 396//1095 412//1095
+f 408//1096 581//1096 363//1096
+f 410//1097 409//1097 407//1097
+f 409//1098 400//1098 589//1098
+f 400//1099 408//1099 363//1099
+f 405//1100 410//1100 407//1100
+f 341//1101 411//1101 405//1101
+f 402//1102 401//1102 421//1102
+f 416//1103 401//1103 446//1103
+f 423//1104 415//1104 438//1104
+f 415//1105 458//1105 438//1105
+f 414//1106 413//1106 399//1106
+f 428//1107 427//1107 430//1107
+f 432//1108 431//1108 426//1108
+f 426//1109 431//1109 369//1109
+f 436//1110 434//1110 565//1110
+f 433//1111 565//1111 434//1111
+f 434//1112 437//1112 425//1112
+f 440//1113 441//1113 418//1113
+f 423//1114 439//1114 536//1114
+f 438//1115 521//1115 439//1115
+f 454//1116 464//1116 455//1116
+f 461//1117 453//1117 462//1117
+f 452//1118 459//1118 453//1118
+f 421//1119 462//1119 463//1119
+f 421//1120 419//1120 462//1120
+f 449//1121 458//1121 457//1121
+f 464//1122 454//1122 457//1122
+f 473//1123 551//1123 471//1123
+f 468//1124 470//1124 467//1124
+f 468//1125 508//1125 469//1125
+f 507//1126 469//1126 508//1126
+f 509//1127 508//1127 472//1127
+f 471//1128 509//1128 472//1128
+f 473//1129 472//1129 327//1129
+f 479//1130 308//1130 480//1130
+f 314//1131 316//1131 478//1131
+f 316//1132 317//1132 477//1132
+f 486//1133 487//1133 489//1133
+f 486//1134 485//1134 488//1134
+f 486//1135 489//1135 484//1135
+f 484//1136 362//1136 486//1136
+f 474//1137 485//1137 362//1137
+f 475//1138 490//1138 476//1138
+f 472//1139 483//1139 328//1139
+f 409//1140 589//1140 402//1140
+f 323//1141 494//1141 336//1141
+f 494//1142 323//1142 322//1142
+f 322//1143 496//1143 494//1143
+f 500//1144 509//1145 471//1146
+f 505//1147 325//1147 323//1147
+f 516//1148 361//1148 505//1148
+f 516//1149 505//1149 517//1149
+f 517//1150 505//1150 323//1150
+f 504//1151 503//1151 519//1151
+f 499//1152 502//1152 321//1152
+f 436//1153 455//1153 464//1153
+f 451//1154 430//1154 452//1154
+f 459//1155 430//1155 427//1155
+f 459//1156 427//1156 510//1156
+f 510//1157 590//1157 576//1157
+f 510//1158 576//1158 460//1158
+f 465//1159 576//1159 511//1159
+f 576//1160 590//1160 511//1160
+f 336//1161 335//1161 517//1161
+f 333//1162 339//1162 512//1162
+f 512//1163 332//1163 333//1163
+f 522//1164 458//1164 449//1164
+f 522//1165 441//1165 521//1165
+f 522//1166 438//1166 458//1166
+f 528//1167 526//1167 527//1167
+f 547//1168 351//1168 525//1168
+f 524//1169 547//1169 525//1169
+f 351//1170 530//1170 525//1170
+f 307//1171 498//1171 319//1171
+f 310//1172 533//1172 496//1172
+f 326//1173 310//1173 496//1173
+f 480//1174 531//1174 315//1174
+f 531//1175 534//1175 533//1175
+f 534//1176 319//1176 318//1176
+f 307//1177 319//1177 532//1177
+f 376//1178 375//1178 535//1178
+f 330//1179 487//1179 488//1179
+f 488//1180 468//1055 330//1057
+f 488//1181 485//1181 468//1181
+f 476//625 485//624 474//1182
+f 472//1183 328//1183 327//1183
+f 417//1184 542//1184 376//1184
+f 540//1185 417//1185 416//1185
+f 373//1186 376//1186 542//1186
+f 537//1187 539//1187 356//1187
+f 544//1188 347//1188 489//1188
+f 347//1189 544//1189 348//1189
+f 328//1190 482//1190 546//1190
+f 547//1191 545//645 481//644
+f 481//1192 491//1192 352//1192
+f 549//1193 327//1193 331//1193
+f 551//1194 550//1194 563//1194
+f 550//1195 549//1195 563//1195
+f 553//1196 558//1196 405//1196
+f 555//1197 410//1197 405//1197
+f 389//1198 405//1198 411//1198
+f 533//1199 534//1199 495//1199
+f 495//1200 496//1200 533//1200
+f 318//1201 493//1201 534//1201
+f 540//1202 445//1202 447//1202
+f 446//1203 445//1203 540//1203
+f 442//1204 444//1204 538//1204
+f 336//1205 517//1205 323//1205
+f 500//1144 554//1206 509//1145
+f 507//1207 554//1207 561//1207
+f 507//1208 509//1208 554//1208
+f 500//1209 553//1209 552//1209
+f 557//1210 556//1210 561//1210
+f 557//1211 561//1211 554//1211
+f 440//1212 417//1212 535//1212
+f 535//1213 536//1213 439//1213
+f 371//1214 370//1214 564//1214
+f 555//1215 569//1215 570//1215
+f 570//1216 463//1216 460//1216
+f 398//1217 566//1217 414//1217
+f 524//1218 545//1218 547//1218
+f 348//1219 544//1219 350//1219
+f 541//1220 447//1220 360//1220
+f 447//1221 442//1221 360//1221
+f 442//1222 538//1222 537//1222
+f 355//1223 442//1223 537//1223
+f 382//1224 573//1224 515//1224
+f 361//1225 516//1225 573//1225
+f 516//1226 515//1226 573//1226
+f 474//1227 362//1227 572//1227
+f 393//1228 391//1228 394//1228
+f 572//1229 391//1229 474//1229
+f 475//1230 474//1230 391//1230
+f 571//1231 393//1231 384//1231
+f 316//1232 309//1232 317//1232
+f 415//1233 466//1233 458//1233
+f 415//1234 414//1234 466//1234
+f 582//1235 378//1235 299//1235
+f 383//1236 582//1236 299//1236
+f 386//1237 378//1237 582//1237
+f 561//1238 556//1238 570//1238
+f 570//1239 460//1239 575//1239
+f 555//1240 570//1240 556//1240
+f 559//1241 575//1241 576//1241
+f 553//1242 500//1242 567//1242
+f 577//1243 437//1243 563//1243
+f 563//1244 549//1244 577//1244
+f 401//1245 403//1245 446//1245
+f 399//1246 413//1246 395//1246
+f 408//1247 411//1247 343//1247
+f 579//1248 363//1248 365//1248
+f 342//1249 341//487 366//486
+f 548//1250 470//1250 562//1250
+f 561//1251 560//1251 507//1251
+f 470//1252 560//1252 562//1252
+f 469//1253 507//1253 560//1253
+f 536//1254 424//1254 423//1254
+f 376//1255 535//1255 417//1255
+f 321//1256 497//1256 320//1256
+f 555//1257 558//1257 407//1257
+f 567//703 558//702 553//1258
+f 515//1259 380//1259 382//1259
+f 383//1260 381//1260 582//1260
+f 511//1261 437//1261 435//1261
+f 575//1262 559//1262 590//1262
+f 559//1263 511//1263 590//1263
+f 427//1264 429//1264 510//1264
+f 590//1265 510//1265 575//1265
+f 514//1266 381//1266 380//1266
+f 515//1267 514//1267 380//1267
+f 518//1268 385//1268 386//1268
+o Bushes
+v -46.048153 48.493900 -0.162104
+v -46.020687 48.271935 0.234227
+v -46.460934 48.726425 -0.152020
+v -45.604572 48.761742 -0.116517
+v -14.282016 43.670837 0.507489
+v -13.428384 44.611076 0.404463
+v -13.628428 44.203674 -0.183545
+v -14.047506 43.701405 -0.266079
+v -13.281260 42.809280 0.008802
+v -13.327815 42.882565 -0.061801
+v -13.220044 42.904797 -0.036599
+v -10.513710 35.867149 0.475031
+v -10.659616 35.840050 0.703708
+v -10.832087 35.872200 0.479231
+v -2.437887 32.167847 -0.385411
+v -1.349668 33.315483 -0.433816
+v -1.569551 31.704491 -0.600477
+v 10.720780 27.216072 0.442719
+v 10.889452 27.907187 0.123714
+v 10.793886 27.324097 0.145597
+v 10.936001 27.027933 0.151717
+v -28.658382 22.541470 0.313782
+v -29.493099 23.388779 -0.341548
+v -29.143248 23.711203 -0.667158
+v -29.026203 23.691374 -0.662960
+v -28.619881 23.731672 -0.636904
+v -27.638336 23.600929 -0.390712
+v -16.061211 19.988518 0.205743
+v -15.217360 20.573883 0.197425
+v -15.706903 19.937929 -0.647790
+v -16.020525 19.714993 -0.660141
+v -14.292231 20.343296 -0.526212
+v -14.919891 20.207392 -0.584976
+v -12.865344 17.844353 -0.084499
+v -12.801692 17.656548 0.435085
+v -13.863767 17.112911 -0.121435
+v -2.304313 19.471958 0.207943
+v -2.082650 19.029007 0.269561
+v -2.340850 19.305183 0.781630
+v 4.765948 10.802735 -0.287746
+v 4.809255 10.186260 -0.284036
+v 4.572511 10.537376 -0.017409
+v 8.241728 9.799220 -0.067509
+v 8.414794 9.865959 0.140895
+v 7.672386 9.243249 -0.114245
+v 1.032569 2.774450 -0.087621
+v 0.978852 2.465832 -0.061687
+v 0.870375 2.719734 0.344656
+v 2.560249 2.903452 -0.049468
+v 2.834798 2.916172 0.068690
+v 2.806951 2.809706 -0.033029
+v 11.235162 3.502860 -0.123902
+v 11.496614 3.658741 -0.017291
+v 11.486065 3.595131 -0.118287
+v 12.139195 2.623425 0.381729
+v 11.880086 2.800529 -0.060804
+v -4.481278 -6.688349 -0.230814
+v -4.067972 -6.478770 -0.339947
+v -4.091962 -6.500000 -0.342775
+v -4.390104 -6.754502 -0.368490
+v -3.301657 -9.483603 0.216354
+v -3.262963 -9.471476 0.283695
+v -3.273957 -9.501930 0.212372
+v -3.066192 -9.601604 0.184689
+v 0.173972 -7.168903 0.075381
+v -0.025005 -7.065258 0.093787
+v 0.113124 -7.026592 0.383842
+v -0.754925 -10.708063 -0.123128
+v -0.837231 -10.820528 0.011134
+v -0.890478 -10.724224 -0.109763
+v 0.898152 -9.041588 -0.157471
+v 1.205749 -8.848026 0.359885
+v 0.591794 -9.810929 -0.213308
+v 0.680344 -9.573793 -0.208933
+v -2.950556 -9.062698 0.203660
+v -40.857033 -12.286329 0.062055
+v -41.074120 -12.636900 0.596954
+v -41.116768 -12.520878 0.075489
+v -2.839747 -11.375002 0.058230
+v -2.677922 -10.570785 0.087673
+v -2.833055 -12.071712 0.387078
+v -2.949491 -12.099548 0.118674
+v 6.764110 -14.578514 -0.555462
+v 7.366266 -15.270069 -0.320239
+v 6.504242 -15.132395 0.029327
+v 6.412953 -14.352794 -0.549655
+v -43.312748 -21.917259 0.060501
+v -43.637775 -21.804529 0.055437
+v -43.275059 -21.736366 0.647112
+v -43.213943 -22.096842 0.066296
+v -42.411968 -23.567186 0.083477
+v -42.485928 -23.479033 -0.029288
+v -35.543907 -20.435356 -0.431687
+v -35.724022 -20.726858 -0.430210
+v -35.940540 -20.244026 0.558516
+v -35.048630 -19.289825 -0.028325
+v -35.456448 -20.282217 -0.418674
+v -34.439430 -21.154354 0.322031
+v -35.472706 -20.880478 -0.473088
+v -35.381237 -20.807173 -0.479281
+v -34.469433 -20.191294 -0.450842
+v -8.146599 -21.354469 0.625088
+v -8.104762 -21.234589 0.622382
+v -8.098817 -21.224007 0.641553
+v 2.007942 -20.116312 -0.197944
+v 1.868427 -21.192137 -0.297738
+v 1.488731 -20.712793 0.527007
+v 3.083215 -20.983561 -0.306023
+v 2.658585 -21.652416 0.433103
+v 2.238363 -21.490921 -0.334961
+v -46.083481 -23.602070 0.033284
+v -46.103539 -22.807997 0.512848
+v -46.040489 -22.688761 0.063311
+v -46.058365 -23.029186 0.066745
+v -47.633499 -24.857170 -0.012557
+v -47.631020 -24.831406 0.014254
+v -46.900181 -25.700535 0.250516
+v -47.138374 -25.686970 -0.070790
+v -48.419506 -26.613045 0.262035
+v -48.481068 -26.139635 -0.072925
+v -48.047935 -26.604227 -0.108393
+v -29.250002 -25.880384 -0.103663
+v -29.882317 -26.106157 -0.267388
+v -28.913647 -25.594170 0.533584
+v -29.080801 -25.831394 -0.097687
+v -8.795738 -25.881618 -0.167532
+v -8.798409 -26.037584 -0.174557
+v -8.841323 -25.962894 -0.102147
+v -40.145557 -28.686874 -0.028034
+v -38.044170 -27.751143 -0.285567
+v -38.111832 -27.788639 -0.335294
+v -38.495701 -27.961201 -0.301069
+v -39.225811 -28.302431 -0.338538
+v -39.985298 -28.656740 -0.372364
+v -40.001045 -29.200314 -0.429601
+v -37.437614 -28.551022 -0.372584
+v -38.058876 -27.775131 -0.339795
+v -2.361691 -28.915958 0.680676
+v -1.318866 -28.481728 0.152143
+v -1.865979 -28.738729 0.244749
+v -2.163352 -28.876905 0.304654
+v -0.145357 -28.765987 0.030433
+v -0.739769 -28.365223 0.068442
+v -0.072444 -28.611616 0.612771
+v -2.382004 -29.085733 0.354115
+v 0.817244 -30.314692 0.088357
+v 0.793497 -30.292589 0.052671
+v -2.521921 -30.655153 0.501407
+v -2.386303 -30.948446 0.506544
+v -2.528716 -30.783381 0.820241
+v -37.589481 -31.140732 -0.624925
+v -37.569786 -31.369530 -0.310724
+v -39.734344 -31.063082 -0.454330
+v -39.465431 -30.973051 -0.613838
+v -18.201223 -31.044554 0.105794
+v -17.995747 -31.235371 0.255126
+v -18.208467 -31.377075 0.028275
+v -18.133377 -31.962622 0.198001
+v -18.374886 -31.923597 -0.087748
+v -15.096738 -32.261463 -0.004636
+v -15.736505 -31.735151 -0.237903
+v -14.807117 -31.823006 -0.327000
+v 0.618883 -30.683691 0.110683
+v 0.797623 -30.325687 0.055199
+v 0.293565 -31.391123 0.289116
+v 0.272013 -31.369345 0.205741
+v 2.961316 -34.710091 0.160651
+v 2.706100 -34.654411 0.630072
+v 2.664299 -34.555294 0.146579
+v 2.679535 -34.562904 0.145246
+v 35.850368 49.467285 0.746176
+v 36.469242 50.699169 0.043239
+v 36.151600 49.992012 -0.011739
+v 35.870205 49.356892 -0.108442
+v 34.147224 49.191692 -0.195526
+v 34.183353 49.194408 -0.199394
+v 38.765568 50.827812 -0.112790
+v 38.746464 50.838795 -0.110153
+v 39.249443 50.708611 0.208807
+v 39.112225 50.670212 -0.058767
+v 39.461334 48.065926 0.361369
+v 39.406311 48.430740 -0.138514
+v 39.598282 49.465446 -0.041687
+v 21.904758 44.515869 0.298766
+v 21.881311 44.515991 0.253854
+v 21.901876 44.593407 0.238084
+v 34.282524 46.485966 -0.327633
+v 34.050949 46.334373 0.459038
+v 33.885006 46.830505 -0.268863
+v 35.988010 46.186646 -0.528722
+v 36.190990 46.180672 -0.521201
+v 35.280819 45.897430 0.009279
+v 35.077629 46.140816 -0.430286
+v 37.127136 47.503014 -0.360520
+v 37.350872 47.541672 0.447478
+v 36.341942 46.294159 -0.499793
+v 36.763577 46.932129 -0.396958
+v 43.113934 47.367607 -0.124710
+v 43.152939 47.384846 -0.146435
+v 43.115814 47.356583 -0.140385
+v 42.627613 45.932316 0.010941
+v 43.024269 45.064602 0.026064
+v 42.572021 45.901718 0.148459
+v 25.341122 44.169556 0.151069
+v 25.750723 43.882645 0.136042
+v 25.199474 44.049965 0.440383
+v 25.138027 44.331791 0.132585
+v 30.786510 40.554970 -0.173228
+v 30.141064 40.358292 0.350325
+v 30.081928 40.611919 -0.139214
+v 41.273148 40.586601 0.342626
+v 41.008934 40.980717 0.234226
+v 41.022121 41.156059 0.502226
+v 12.316309 26.126165 0.132117
+v 12.263103 26.120262 0.153622
+v 12.253578 26.124054 0.134233
+v 41.553654 22.069359 -0.318383
+v 43.327927 22.974995 0.030793
+v 43.033119 22.549446 -0.781773
+v 42.012310 22.102770 -0.778657
+v 43.662052 22.572174 -0.811317
+v 44.609329 22.378342 -0.284218
+v 44.265232 22.325548 -0.854386
+v 44.189995 22.351990 -0.862295
+v 44.472778 21.958107 -0.815040
+v 13.597102 17.112164 0.201272
+v 13.975605 16.900486 -0.002742
+v 13.705148 17.002371 -0.007929
+v 38.563850 16.763268 0.220517
+v 39.876202 16.312656 -0.085850
+v 39.431541 16.350861 -0.500986
+v 38.584698 16.582085 -0.573249
+v 18.817669 14.568222 0.195689
+v 19.641657 14.915763 -0.292245
+v 18.879387 14.403723 -0.260082
+v 18.418081 13.463850 -0.238984
+v 18.441614 12.647950 -0.231796
+v 18.164865 13.223824 0.203125
+v 21.140669 14.420852 -0.398260
+v 21.188091 14.691593 0.286014
+v 21.542822 12.539665 0.480407
+v 21.329155 13.210557 -0.373788
+v 39.902924 16.085302 -0.437383
+v 20.755747 11.745976 -0.350895
+v 20.147249 11.400326 0.527725
+v 19.861631 11.812120 -0.301939
+v 31.067524 10.200344 -0.103199
+v 31.018433 9.661509 -0.130582
+v 30.882320 10.001553 0.490579
+v 26.184422 3.739693 0.062758
+v 27.051592 4.896641 -0.061195
+v 27.038956 4.866495 -0.093576
+v 26.235262 3.769149 -0.043237
+v 27.743885 3.552985 -0.210170
+v 27.114681 3.125690 0.379695
+v 26.961061 3.453023 -0.114806
+v 17.161774 0.129710 0.029406
+v 16.900324 0.154999 0.267444
+v 16.793772 0.567133 0.003967
+v 17.069445 0.266793 -0.001502
+v 33.905884 -2.483424 -0.338672
+v 33.913212 -2.824025 -0.244440
+v 33.685646 -2.520966 -0.214410
+v 35.296703 -2.411847 -0.119677
+v 35.079552 -1.905564 -0.295122
+v 35.086494 -1.555096 0.353447
+v 35.505043 -2.823887 0.177892
+v 35.395821 -2.687866 -0.118374
+v 44.224453 -4.665334 -0.261786
+v 44.324409 -4.614046 -0.258061
+v 44.374100 -4.831938 0.103234
+v 43.884148 -4.841936 -0.271518
+v 44.327305 -4.603621 -0.258323
+v 44.517830 -3.978070 -0.219924
+v 44.791061 -3.852428 0.546353
+v 45.391884 -19.447773 0.136923
+v 45.821568 -18.886665 -0.476913
+v 46.125530 -20.015907 -0.763154
+v 41.049839 -28.315659 -0.180659
+v 41.137020 -29.444511 -0.301278
+v 40.766636 -28.762663 0.394702
+v 43.341644 -27.082958 0.944967
+v 44.444736 -28.087774 -0.303167
+v 44.299587 -27.981234 -0.285891
+v 42.967281 -27.020811 -0.227536
+v 42.872982 -30.557455 -0.298779
+v 43.103279 -30.712730 0.727805
+v 42.290031 -30.493752 -0.311643
+v 43.776981 -30.343361 -0.290166
+v 44.160419 -30.317696 0.031542
+v 27.407207 -32.353252 0.138996
+v 28.675171 -31.739656 0.272078
+v 28.467396 -32.208096 -0.829142
+v 27.941326 -32.424843 -0.773371
+v 45.729435 -32.741589 -0.159901
+v 45.755512 -32.793373 -0.157367
+v 45.717777 -32.781490 -0.115243
+v -19.209841 -37.102264 -0.290785
+v -18.479387 -37.805428 -0.275550
+v -19.238655 -37.812634 0.380929
+v -12.395703 -38.108387 -0.048551
+v -12.409625 -38.105946 -0.049135
+v -12.409602 -38.094536 -0.037500
+v -10.881505 -38.767197 0.308676
+v -10.851476 -38.964260 -0.022071
+v -11.375002 -38.660347 -0.005794
+v -3.819831 -41.866947 0.675166
+v -2.695623 -42.016094 -0.055432
+v -3.016663 -42.016666 -0.131106
+v -3.676662 -42.003948 -0.195169
+v -39.136658 -42.637676 -0.166486
+v -39.588573 -42.693855 -0.140593
+v -39.230488 -42.570293 0.032378
+v -38.917309 -46.256687 -0.283834
+v -38.492477 -46.297531 -0.197320
+v -39.262741 -46.472958 0.993027
+v -40.068298 -46.202694 -0.212224
+v -26.859821 -44.921078 -0.087545
+v -27.081266 -45.015488 -0.062858
+v -26.888241 -44.894398 -0.015109
+v -3.911665 -43.052849 -0.236247
+v -4.308084 -42.810097 0.267928
+v -3.966721 -42.482174 -0.240670
+v -3.914815 -42.914818 -0.251109
+v -46.436588 -50.792782 -0.093619
+v -46.684700 -50.481106 -0.489585
+v -46.594276 -49.765617 -0.428032
+v -27.944706 -47.928143 0.096078
+v -27.512300 -48.408012 0.064233
+v -27.904774 -48.185535 0.908739
+v -48.768547 -50.632614 -0.378022
+v -49.276196 -49.972214 0.145651
+v -48.998566 -49.992493 -0.364441
+v -48.876694 -50.311653 -0.384763
+v 29.642069 -34.744072 -0.945103
+v 28.852663 -35.298546 0.061508
+v 27.822437 -34.866737 -0.650276
+v 28.097601 -34.822300 -0.740243
+v 37.962132 -35.874710 -0.441738
+v 37.041199 -35.030964 0.201877
+v 37.321697 -34.745850 -0.498145
+v 37.727783 -35.443523 -0.479218
+v 39.446224 -41.381336 0.037376
+v 40.517948 -40.564129 0.008093
+v 40.510525 -40.575684 -0.007053
+v 39.476170 -41.373108 -0.001487
+v -46.808983 49.034073 0.658075
+v -45.604332 49.506706 0.911391
+v -46.108952 50.061291 0.006469
+v -46.469257 49.879738 -0.026636
+v -46.873600 49.134323 -0.122819
+v 0.417241 45.600670 0.380386
+v 0.191413 45.545670 0.379173
+v 0.241139 45.564583 0.561628
+v 0.177596 44.546341 0.457979
+v 1.090565 44.854164 1.036982
+v 0.112613 44.814060 0.435173
+v 0.855600 44.539719 0.475224
+v 5.109244 42.469540 0.257672
+v 4.456158 41.756001 0.158950
+v 5.365124 41.732498 0.905465
+v 5.220273 42.572826 0.285254
+v -11.413655 39.192562 0.517201
+v -12.576738 38.137695 0.498760
+v -12.524884 38.149498 0.998557
+v -11.561364 38.481232 1.640858
+v -10.007159 38.351379 1.515421
+v -10.844505 39.400711 0.513180
+v -11.072183 39.433548 0.516463
+v -10.007731 37.003296 1.731494
+v -12.083671 36.464882 1.304675
+v -10.093171 38.994705 0.499497
+v -9.277373 37.753548 0.476975
+v -9.238283 37.397602 0.473057
+v -1.811079 32.564034 0.831268
+v -0.858095 32.608292 0.390189
+v -2.262839 33.002487 0.079389
+v -1.517735 31.616852 0.596383
+v 12.186872 27.042995 1.645107
+v 13.969719 26.423126 0.821934
+v -28.403423 24.357716 -0.084514
+v -28.951122 23.882511 -0.638818
+v -29.036016 23.793579 -0.652733
+v -28.699944 23.848957 0.800807
+v -19.015223 22.556486 0.120619
+v -18.766846 22.360283 0.818764
+v -18.404985 21.794140 0.049376
+v -19.500801 21.126156 0.538709
+v -20.178835 22.004486 -0.190808
+v -19.430927 21.261477 -0.235458
+v -18.541470 21.526085 -0.032492
+v -13.599502 20.338215 0.682087
+v -13.589358 20.229841 -0.431255
+v -1.189548 21.539869 0.029013
+v -2.288719 20.443802 0.098140
+v -1.346479 21.245560 1.265125
+v 0.082942 21.509396 1.257199
+v -0.598671 21.644361 0.047010
+v 4.734308 21.125002 -0.071074
+v 4.651875 21.309765 -0.059905
+v 4.199280 21.830379 0.586384
+v 4.622496 20.153564 1.391638
+v 4.876074 20.832893 -0.120663
+v 3.713348 21.425587 1.269483
+v -14.583490 16.930313 -0.185882
+v -15.532544 17.503288 1.098573
+v -15.660314 17.682238 -0.394796
+v -12.847701 19.592255 -0.130842
+v -12.979508 19.695154 -0.300995
+v -13.237729 19.227463 1.315438
+v -14.679109 19.294315 1.855344
+v -13.694718 17.588985 1.355082
+v 0.665983 18.755035 0.027292
+v 0.863830 18.861782 0.786974
+v -0.403592 18.132431 0.346770
+v -0.244703 18.227381 0.060212
+v -0.470658 19.431690 1.942273
+v 2.724153 19.313629 1.139340
+v 2.617039 19.134216 -0.121774
+v 3.481354 18.807796 -0.242948
+v 3.981172 18.699471 0.153848
+v -42.757748 14.577305 0.259754
+v -43.371098 14.183261 0.286712
+v -42.816483 14.578133 0.838336
+v -42.836658 13.402283 0.237256
+v -42.605377 13.396313 0.628918
+v -43.216103 13.742682 0.267425
+v -41.980782 14.224249 0.205923
+v -41.968422 14.599248 0.213856
+v -6.260275 14.720208 0.909263
+v -5.503238 14.835125 1.497625
+v -5.367782 15.176113 0.815857
+v -6.077750 14.804124 0.913059
+v -3.867957 14.547398 1.278942
+v -4.402967 14.962236 0.767088
+v -4.469005 12.594004 0.967740
+v -3.872245 12.932043 0.804502
+v -4.744275 13.245667 1.936493
+v -4.949481 12.170251 0.931471
+v -6.299415 12.860691 1.457743
+v 2.504410 15.392799 0.714143
+v 3.615024 14.666122 0.758797
+v 2.983177 15.517661 -0.477634
+v 2.894252 15.577906 -0.486904
+v 2.608961 14.744020 -0.500632
+v 3.000318 13.970882 0.023679
+v -32.324890 11.668102 1.036577
+v -30.723934 12.799660 0.731626
+v -31.719902 12.560161 -0.221062
+v -32.045124 12.367887 -0.251584
+v -32.259483 12.045390 -0.289097
+v -32.979008 10.826225 0.240178
+v -31.894489 9.860863 1.498212
+v -29.637154 12.316433 1.122205
+v -31.036270 11.671501 1.985139
+v 5.399837 9.003159 0.422825
+v 5.398211 9.151582 -0.227446
+v 5.103509 10.634319 1.310607
+v 5.186887 11.880531 -0.117149
+v 6.564617 12.199112 1.040800
+v 6.063149 12.041329 -0.160168
+v 5.222853 11.880512 -0.242274
+v 5.652322 9.074188 -0.202721
+v 6.695337 8.773008 -0.173698
+v 7.210735 12.171638 -0.048110
+v 8.148048 11.264072 0.920814
+v 7.725395 11.838345 -0.000821
+v 7.693770 11.857982 -0.001251
+v 6.517717 11.250809 1.929505
+v 7.541064 9.851498 1.469319
+v 6.519415 9.105164 1.301945
+v 6.985228 8.752634 -0.162915
+v -16.671600 6.753195 0.509877
+v -17.403223 6.466816 0.568063
+v -16.491013 6.649357 0.793996
+v -16.341780 6.323468 0.479188
+v -16.998781 5.701751 0.528531
+v 1.576249 1.060359 0.073846
+v 1.633433 0.915723 0.078939
+v 1.100784 1.860714 1.096713
+v 2.653825 1.997902 0.915135
+v 1.706317 0.945605 0.092998
+v 10.385793 3.021460 -0.134152
+v 10.637048 3.230656 0.766751
+v 11.198324 2.025372 0.515213
+v 10.649290 2.568271 -0.099761
+v 11.246436 1.970290 -0.044048
+v 11.772142 2.316609 -0.040209
+v -1.221432 -6.839672 0.160359
+v -42.790394 -9.416056 1.068863
+v -40.990128 -9.772612 1.265903
+v -41.899109 -9.420728 0.036768
+v -42.675331 -9.282463 0.053506
+v -42.874321 -10.540810 1.653926
+v -6.049393 -10.376470 -0.069352
+v -5.665490 -9.690098 0.669514
+v -5.571163 -9.743481 -0.148632
+v -5.776414 -10.022882 -0.149412
+v -3.147384 -8.783578 0.240568
+v -2.899584 -8.953979 0.204571
+v -3.840358 -8.037998 1.159280
+v -4.612453 -7.898006 0.082765
+v -3.426646 -8.633554 0.153395
+v -2.691024 -7.065792 1.468784
+v -3.476079 -6.442570 1.033915
+v -2.868889 -8.952149 0.201439
+v -2.000072 -7.554323 1.301811
+v -5.010669 -10.168653 1.565336
+v -3.277944 -10.849691 1.377984
+v -2.799149 -10.005516 0.415393
+v -4.891494 -11.796387 2.071682
+v -6.124501 -11.231720 1.275123
+v 0.216010 -10.238315 -0.198385
+v -0.306683 -10.077333 1.528216
+v -0.467044 -10.640034 -0.149563
+v -1.647852 -6.848189 0.194320
+v -1.700507 -6.806514 0.202285
+v 0.036338 -8.457640 1.803116
+v -1.968257 -9.056311 1.456844
+v -2.539768 -9.812366 0.116965
+v -2.401872 -9.919552 0.096219
+v -1.626775 -10.412080 -0.014035
+v -42.848408 -12.341636 0.098608
+v -42.660099 -11.932514 1.339898
+v -43.739204 -11.599016 0.870942
+v -43.334145 -12.107987 0.094765
+v -40.322422 -11.203217 0.019139
+v -40.227592 -10.885132 0.741913
+v -40.406963 -11.375000 0.022999
+v -42.442684 -12.449236 0.104417
+v -41.846916 -12.613685 0.095552
+v -41.273354 -11.171387 1.621781
+v -11.271428 -12.001448 -0.167299
+v -11.286660 -11.861620 0.716767
+v -10.637385 -12.566477 -0.004124
+v -10.679281 -12.535704 -0.061059
+v -10.923249 -12.313598 -0.090841
+v -11.435054 -13.182936 0.606207
+v -12.416383 -11.951817 0.210817
+v -12.264283 -12.734695 -0.234392
+v -12.009851 -13.094139 -0.166309
+v -11.312559 -13.211800 -0.094268
+v -11.918195 -13.109554 -0.152389
+v -10.692469 -12.628794 -0.058969
+v -5.893506 -12.484818 0.272776
+v -6.279191 -11.088815 0.111062
+v -6.195117 -11.375001 0.194080
+v -3.597338 -12.652664 0.224322
+v -3.570776 -12.635871 0.220387
+v -3.512521 -12.196970 1.347040
+v -4.299179 -13.112340 0.283283
+v -2.678969 -9.941325 0.124191
+v 7.679485 -14.184532 0.643340
+v 7.843889 -14.293285 -0.442363
+v 7.737830 -14.183033 -0.434982
+v 7.044463 -13.481876 -0.047581
+v 6.816033 -14.224434 0.833860
+v -44.409210 -21.561367 0.545010
+v -45.153954 -22.032236 0.053878
+v -45.465221 -22.263029 0.058947
+v -45.768162 -22.487938 0.065661
+v -45.269371 -22.637461 1.625517
+v -43.816750 -22.871986 1.836941
+v -34.429020 -20.128508 0.779528
+v -12.244397 -20.432989 0.971663
+v -11.125396 -20.088915 0.602153
+v -11.713340 -20.222765 0.584222
+v -12.327191 -20.376402 0.628267
+v -12.812591 -20.754332 0.683684
+v -13.027474 -21.153397 1.383760
+v -12.537673 -20.543667 0.662166
+v -13.264850 -22.288424 1.272119
+v -13.300975 -21.915831 0.802480
+v -13.286656 -22.144552 0.825890
+v -13.275161 -22.356104 0.788583
+v -11.081165 -20.156836 0.613640
+v -11.688272 -22.954041 0.902214
+v -11.345572 -21.635937 1.656113
+v -10.783319 -20.208441 0.638246
+v -9.769782 -20.891766 1.933689
+v -10.573763 -20.064741 0.632159
+v -8.899233 -20.066622 0.633051
+v -8.896131 -20.057755 0.690460
+v -8.107628 -21.215738 0.622247
+v -10.006614 -20.072399 0.667235
+v -9.253096 -20.036777 0.643600
+v -9.601626 -22.327156 1.845762
+v -9.102428 -23.092453 0.457485
+v -8.838828 -23.061504 0.491605
+v 2.562676 -19.793171 0.511685
+v 2.349481 -19.829023 -0.178375
+v 3.038462 -20.455700 -0.254425
+v 3.345410 -20.941971 0.488837
+v 3.268405 -20.791716 -0.291957
+v -47.227085 -26.098942 -0.093555
+v -42.796455 -23.770947 1.224532
+v -44.535824 -25.257011 0.638985
+v -45.250648 -24.397547 1.490029
+v -28.439772 -26.243608 -0.163615
+v -28.408905 -26.699684 0.806412
+v -28.255318 -26.585758 -0.215704
+v -30.004292 -26.793514 0.710954
+v -30.072149 -26.261253 -0.329477
+v -11.581655 -22.871170 0.457410
+v -11.899499 -23.122536 0.460919
+v -12.879328 -22.719683 0.670196
+v -10.672321 -23.233038 0.265212
+v -10.462264 -23.328930 0.262266
+v -7.232169 -26.464785 1.417577
+v -6.566989 -25.138163 0.936168
+v -8.172126 -25.369274 1.032060
+v -6.429365 -25.337492 0.256184
+v -6.115030 -26.772793 0.248939
+v -6.962615 -27.538963 0.788238
+v -6.138119 -26.920603 0.238799
+v -38.552994 -29.545467 1.941752
+v -39.213249 -28.517479 1.459949
+v -39.537094 -30.172810 1.493618
+v -37.430840 -28.683065 1.255126
+v -37.846699 -30.716419 1.472452
+v -37.036491 -29.933544 1.184426
+v -29.115318 -27.581392 -0.356695
+v -29.250002 -27.405361 -0.329594
+v -29.098516 -27.581236 -0.356799
+v -1.532353 -29.832813 1.747798
+v 0.126928 -29.437239 1.272371
+v -0.356405 -31.158754 1.380563
+v -39.004589 -31.233109 0.712082
+v -15.386066 -30.609488 0.000503
+v -15.839530 -31.261000 -0.119015
+v -15.007781 -30.476009 0.774563
+v -18.774298 -31.048594 0.147068
+v -19.005386 -30.987642 0.110289
+v -19.343891 -31.544384 0.607905
+v -15.339795 -31.476593 1.016605
+v -15.956919 -31.470127 -0.159455
+v -14.661137 -30.917089 -0.125111
+v -14.370183 -31.615093 0.504040
+v -14.397198 -31.384552 -0.254284
+v -0.881690 -31.712328 0.375900
+v 0.076178 -31.476797 0.238334
+v 2.120370 -32.191456 0.036486
+v 1.805395 -32.929203 0.131480
+v 1.879633 -32.293182 0.910400
+v 2.930748 -31.423309 0.604036
+v 4.093686 -31.643730 1.238892
+v 4.379894 -31.466591 -0.237469
+v 3.947956 -31.417786 -0.239974
+v 5.707622 -33.297832 0.251229
+v 5.211892 -32.547737 -0.114796
+v 2.117703 -33.455509 1.279612
+v 1.877043 -33.405624 0.158420
+v 4.486671 -34.398941 1.481155
+v 4.846344 -32.852295 1.481436
+v 3.561647 -32.737152 1.956389
+v 5.591735 -33.094357 -0.052460
+v 12.500594 -34.083477 -0.020016
+v 12.209620 -34.520432 0.060060
+v 12.501115 -33.938992 0.408170
+v 24.545317 49.876297 0.058261
+v 23.597660 48.488415 0.096273
+v 24.592966 49.711655 1.277310
+v 23.576166 48.375191 0.098275
+v 24.706200 48.677689 1.783420
+v 25.101826 49.817337 0.048117
+v 26.141857 49.537514 1.325850
+v 26.412533 49.820221 0.084271
+v 25.728178 49.825428 0.035662
+v 37.755493 50.984077 -0.020519
+v 36.638119 50.849258 0.047382
+v 37.886955 50.750572 1.350828
+v 39.460625 50.384739 -0.012050
+v 38.396965 49.504761 2.068531
+v 39.547298 50.030392 -0.017324
+v 36.670231 48.167549 1.455575
+v 38.127781 47.969933 1.275973
+v 47.090111 47.995682 0.962931
+v 47.355789 48.245468 -0.398181
+v 44.479694 47.390221 1.487126
+v 19.512964 46.677994 0.280290
+v 19.135416 45.972237 0.454213
+v 19.219305 46.340363 0.746815
+v 19.805119 44.408310 0.600640
+v 19.520945 44.642403 1.257364
+v 19.270321 44.840050 0.615732
+v 20.113010 44.104378 0.926891
+v 21.399784 44.901390 1.316198
+v 21.868574 44.991344 0.179074
+v 21.771673 46.025814 0.166569
+v 21.720207 46.177246 0.673134
+v 20.371056 46.200485 1.552369
+v 21.582232 46.409473 0.164955
+v 20.997429 46.562397 0.174347
+v 21.857742 44.495449 0.260912
+v 20.173471 44.063747 0.597870
+v 26.811960 47.995750 0.121742
+v 26.876045 48.357498 0.861706
+v 26.122095 46.850143 0.691726
+v 26.331339 47.073368 0.132988
+v 25.154846 46.510460 0.093153
+v 24.406023 47.017136 0.880841
+v 24.336157 47.044033 0.101849
+v 26.156567 46.965370 0.138231
+v 25.393669 46.505047 0.095814
+v 25.548056 44.940193 0.146267
+v 26.155672 45.012291 0.846466
+v 26.201168 45.037193 0.126974
+v 25.566685 44.942917 0.147517
+v 26.704033 44.603588 0.108114
+v 26.042912 47.807846 1.692442
+v 35.036781 46.617050 1.409007
+v 35.698402 47.055779 1.799981
+v 36.256844 46.224937 -0.512565
+v 43.398220 46.097122 1.665702
+v 43.384758 44.496769 0.028870
+v 43.473042 44.409534 0.027447
+v 44.550610 44.538635 1.221280
+v 44.511791 46.346230 2.094193
+v 48.189407 47.212036 0.517915
+v 45.103745 44.591496 -0.125062
+v 44.510338 44.352272 -0.057386
+v 45.859051 44.968395 -0.216299
+v 46.280025 45.373367 0.850409
+v 45.883854 46.788010 1.455327
+v 47.184170 46.763046 1.581502
+v 47.764446 45.756966 0.960353
+v 26.268147 44.087090 0.119936
+v 31.179688 41.649155 -0.026205
+v 30.099102 41.652489 0.455628
+v 31.185947 40.763298 0.601202
+v 30.059305 41.226490 -0.116238
+v 38.920944 41.220592 -0.082084
+v 38.537689 40.540905 -0.004111
+v 39.016953 41.384460 0.630497
+v 40.830349 41.223438 0.165405
+v 39.563755 41.404171 -0.033092
+v 38.287605 39.861767 0.099008
+v 38.618076 39.976135 1.385788
+v 38.341061 40.010765 0.069995
+v 40.453007 40.075813 1.916447
+v 19.092670 39.255856 0.171385
+v 18.106400 39.780922 0.266320
+v 18.320263 39.198654 1.511828
+v 17.083204 39.800812 0.506895
+v 16.321095 38.675262 0.326190
+v 19.133036 39.000004 0.125925
+v 18.747829 37.737038 0.911673
+v 19.138121 38.892429 0.127353
+v 17.529676 37.610840 1.304421
+v 31.523888 35.511780 1.397294
+v 32.599300 36.684608 1.232004
+v 32.054691 36.789330 0.059157
+v 31.728325 36.444393 0.089542
+v 33.990005 35.823853 1.572970
+v 33.469620 36.772923 0.160378
+v 33.077305 36.990921 0.115061
+v 38.177467 39.095886 0.360426
+v 38.169399 39.192841 0.234408
+v 39.008293 38.799255 1.438867
+v 40.928143 38.449249 0.646384
+v 40.876213 38.425343 0.607537
+v 40.923897 38.449028 0.606802
+v 41.304321 40.370621 0.387272
+v 41.435932 39.677242 0.478818
+v 16.050274 33.212635 0.142534
+v 15.763187 32.519821 0.122217
+v 16.154018 33.582420 0.544263
+v 16.147718 33.443424 0.135004
+v 15.475960 31.695784 0.098954
+v 15.663455 32.077728 1.151880
+v 16.623011 31.817001 1.725912
+v 17.485851 32.961006 1.621037
+v 18.290035 32.291054 1.498527
+v 18.469410 33.228584 0.512068
+v 30.969273 35.196239 0.199136
+v 33.384651 33.416718 0.557262
+v 33.409534 33.463203 0.348373
+v 33.643326 33.645485 0.332265
+v 32.691219 34.721169 1.997621
+v 32.211109 33.809181 1.226271
+v 33.894611 34.114807 1.411452
+v 42.153812 33.046211 0.639020
+v 42.017868 33.088352 0.489123
+v 42.206772 33.060135 0.474370
+v 42.517731 33.367554 0.443277
+v 42.495335 33.385258 0.610732
+v 42.906986 33.752373 0.404355
+v 41.871796 33.741741 0.488380
+v 42.274200 34.184822 0.447273
+v 42.152843 33.585766 0.542690
+v 42.140572 34.037685 0.460924
+v 14.180994 26.521294 0.083543
+v 14.315802 26.683542 0.074619
+v 14.617854 27.311871 1.283275
+v 14.060756 26.374413 0.081447
+v 14.998894 28.521700 0.019809
+v 14.104497 29.184776 1.068911
+v 15.052348 28.371988 0.017338
+v 42.226242 21.372364 1.419997
+v 43.081257 22.665955 1.088595
+v 44.659245 21.352329 1.383294
+v 43.665508 21.573299 1.870789
+v 42.337048 19.925758 1.264197
+v 12.226491 16.276943 -0.008568
+v 11.957667 15.886051 0.836643
+v 13.358703 17.012857 -0.014666
+v 12.914332 16.726912 -0.023536
+v 14.917947 16.049667 1.157981
+v 13.462982 16.547352 1.493972
+v 42.236435 19.592308 -0.091125
+v 44.038567 19.378693 0.411963
+v 43.960018 20.158466 1.413091
+v 44.485447 19.820648 -0.614848
+v 45.295765 21.076893 -0.010857
+v 15.087651 14.484416 0.268406
+v 15.108392 14.979394 0.011431
+v 15.102519 15.146297 0.017856
+v 15.071966 16.168638 0.018043
+v 15.036650 14.475152 0.639367
+v 12.701392 14.137196 1.456454
+v 12.631650 13.697256 0.014247
+v 13.405336 13.757473 0.002370
+v 14.292521 13.910066 0.266240
+v 14.371013 14.071232 0.780073
+v 14.026544 15.017467 1.896937
+v 14.764301 14.328404 0.906527
+v 14.373935 14.090220 0.798909
+v 19.174726 14.205597 1.358223
+v 19.397570 12.295612 1.453364
+v 20.985889 13.430962 1.461536
+v 37.053997 15.596107 1.020313
+v 37.553230 16.376835 -0.147134
+v 39.685741 15.751305 1.300313
+v 39.998543 13.648791 -0.017453
+v 39.744915 13.768089 1.658799
+v 38.726307 12.861294 0.067856
+v 38.587448 15.561260 2.048320
+v 40.733624 14.891819 -0.050134
+v 37.998451 14.786560 1.974623
+v 37.330215 13.500870 0.928443
+v 18.706907 12.304288 -0.242948
+v 18.962500 12.096242 -0.254974
+v 21.204460 12.111585 -0.370200
+v 21.125000 12.045479 -0.374516
+v 32.181358 9.589087 -0.123690
+v 32.135098 9.523197 0.490189
+v 31.547777 9.456938 -0.136025
+v 31.892403 10.633762 1.025578
+v 32.261066 10.951286 -0.054864
+v 32.110790 10.852243 -0.061175
+v 18.435953 1.116942 0.012992
+v 17.629868 1.222931 0.827354
+v 18.291553 0.222824 0.527971
+v 18.512897 0.923130 0.009509
+v 27.721682 3.751637 -0.159306
+v 26.870457 4.347439 0.803739
+v 34.031410 -2.350285 0.885874
+v 34.148144 -1.561226 -0.475388
+v 34.074287 -2.987100 -0.172299
+v 34.270939 -3.231736 -0.166930
+v 43.130035 -3.428064 -0.180596
+v 42.982533 -3.480469 -0.183394
+v 43.418083 -3.511703 0.859317
+v 44.596893 -2.990217 0.310558
+v 43.682625 -4.698522 -0.261883
+v 43.875008 -4.835425 -0.271075
+v 20.082073 -11.083014 0.837898
+v 19.702145 -10.969568 -0.070304
+v 19.777401 -12.264538 -0.203686
+v 46.323753 -18.913883 0.577737
+v 46.789661 -18.889870 -0.304576
+v 45.983665 -20.109085 0.533623
+v 47.174858 -19.949217 0.378974
+v 42.549568 -27.121000 -0.207143
+v 41.444725 -27.766499 -0.151216
+v 41.743057 -27.426262 0.708557
+v 41.378391 -27.859516 -0.147575
+v 41.671894 -30.227133 -0.332495
+v 41.806984 -30.054716 1.443399
+v 41.393837 -29.827698 -0.352000
+v 43.775597 -29.877245 1.633385
+v 44.366413 -28.884956 1.225731
+v 42.320679 -28.133575 1.863430
+v 44.603844 -28.423319 -0.344753
+v 44.609528 -28.330875 -0.335427
+v 44.539631 -29.235840 -0.316480
+v 44.321815 -29.965624 -0.293985
+v 46.054249 -31.125452 0.823668
+v 47.965046 -30.436071 0.822625
+v 47.149773 -30.340658 -0.218899
+v 46.660995 -30.515299 -0.223181
+v 27.314941 -33.081356 1.246216
+v 27.003748 -33.903790 -0.690444
+v 27.965378 -34.709335 1.379907
+v 29.230011 -32.651249 1.643683
+v 28.783419 -34.097126 1.852955
+v 30.368885 -32.799519 0.784088
+v 29.897020 -32.633278 -0.962237
+v 29.643644 -32.466675 -0.938775
+v 29.782791 -34.708160 0.919059
+v 30.567463 -33.907249 -0.049981
+v 38.068298 -34.150742 -0.039860
+v 37.571808 -34.536900 -0.480576
+v 39.008671 -34.976223 0.753146
+v 46.041786 -31.411427 -0.203142
+v 47.545856 -31.379971 1.880871
+v 45.998581 -32.445641 1.142334
+v 46.978729 -33.908123 0.447039
+v 47.215778 -33.357452 1.379933
+v 48.285572 -33.559887 -0.072173
+v 48.532879 -33.446766 -0.070940
+v 48.696022 -33.320419 -0.072079
+v 48.890747 -32.110695 1.302745
+v 48.552662 -30.986158 0.000895
+v 48.992233 -31.675198 -0.004271
+v 49.082096 -32.614807 -0.090116
+v -18.679218 -36.662727 0.506768
+v -19.083967 -36.786472 -0.321903
+v -17.982113 -36.769115 -0.321178
+v -18.028763 -37.598225 0.649215
+v -18.143061 -37.760651 -0.296994
+v -18.140587 -37.744869 -0.298345
+v -18.139719 -36.564644 -0.331402
+v -12.058383 -38.788410 1.290471
+v -6.238769 -35.565910 -0.171804
+v -6.201318 -35.686127 0.704680
+v -4.674218 -36.056065 0.101772
+v -5.172754 -35.885166 -0.103389
+v -5.525721 -35.778767 -0.131593
+v -5.214892 -36.829876 0.549732
+v -5.598798 -36.950386 -0.201871
+v -5.002488 -36.327393 -0.121242
+v -6.488072 -36.731468 0.404894
+v 4.573635 -34.863274 0.464942
+v 12.931271 -35.450726 0.226458
+v 12.620256 -35.140785 0.894004
+v 12.193023 -35.003902 0.147731
+v -21.374964 -40.311230 -0.140813
+v -21.594318 -40.087002 0.688473
+v -21.972900 -41.379131 0.696003
+v -21.493977 -40.717777 -0.138742
+v -22.972874 -40.137852 0.174900
+v -18.405159 -42.454681 -0.268598
+v -18.875999 -42.973698 -0.253711
+v -18.630234 -42.593571 0.730427
+v -17.927582 -41.884621 0.112448
+v -17.779564 -43.002087 1.651425
+v -16.675896 -42.550545 1.290811
+v -13.592040 -39.793617 -0.098886
+v -13.708773 -39.961323 -0.112789
+v -13.718469 -39.980968 1.188225
+v -12.422700 -38.113308 -0.049684
+v -12.368197 -41.952675 -0.120041
+v -12.654885 -41.495281 1.370793
+v -13.514888 -41.374531 -0.096255
+v -13.340425 -41.474304 -0.155934
+v -11.374585 -41.688568 1.004297
+v -10.357015 -41.315079 0.363646
+v -11.362285 -40.175903 1.948316
+v -10.630906 -40.040359 -0.029017
+v -10.446838 -40.941662 -0.056265
+v -2.644303 -42.110897 -0.033628
+v -2.753721 -42.897350 0.539544
+v -40.241936 -43.000561 -0.109638
+v -39.553658 -43.006088 1.259386
+v -39.569824 -44.645519 2.198484
+v -38.273960 -44.022755 1.671069
+v -40.889641 -43.962837 0.911682
+v -40.536865 -45.676868 1.125974
+v -37.957424 -45.563210 1.266057
+v -37.508629 -44.908066 0.008246
+v -37.994678 -45.950954 -0.094562
+v -37.997776 -43.090199 0.693554
+v -25.149879 -46.194633 0.395822
+v -25.619184 -45.873360 -0.149310
+v -26.000000 -45.582954 -0.158068
+v -27.391598 -45.622803 1.612063
+v -25.903980 -45.843948 1.354384
+v -26.404850 -47.096458 2.032061
+v -18.872890 -44.497753 1.093208
+v -18.964462 -43.518593 -0.251763
+v -16.259462 -42.391491 -0.340816
+v -15.784360 -43.678230 0.565201
+v -16.006569 -43.689102 -0.351807
+v -16.343571 -42.250435 -0.337713
+v -16.873600 -46.150909 -0.385709
+v -16.820885 -45.963379 0.545236
+v -18.569038 -45.174576 0.669686
+v -16.945850 -46.118752 -0.382532
+v -16.574566 -43.871021 1.676147
+v -16.017551 -45.963005 0.398889
+v -3.194802 -43.526276 -0.018712
+v -48.452091 -48.741486 -0.330771
+v -47.517567 -48.730709 0.982044
+v -46.866959 -48.946350 -0.359005
+v -48.065865 -48.792675 -0.350494
+v -46.455044 -49.837284 0.920005
+v -46.663601 -49.156265 -0.376175
+v -48.046017 -49.374760 1.549513
+v -48.512562 -48.783920 -0.330030
+v -48.701412 -49.005302 -0.331851
+v -47.529148 -50.802299 1.379947
+v -48.460667 -51.079056 -0.383540
+v -48.700695 -50.885696 0.672163
+v 13.580340 -34.176220 -0.006500
+v 13.641071 -34.058861 0.418913
+v 13.581631 -35.259220 0.424235
+v 13.558537 -34.992455 0.141493
+v 18.071030 -35.439938 0.560794
+v 19.454317 -34.904388 0.900659
+v 19.407690 -35.079285 0.178723
+v 18.260489 -35.442192 0.264872
+v 18.664841 -37.923687 1.284690
+v 18.375635 -37.964046 0.361321
+v 19.504669 -38.290291 0.304611
+v 17.711092 -36.450787 0.340423
+v 17.620724 -36.999352 0.368570
+v 18.748833 -36.564503 1.833288
+v 20.532759 -35.667637 1.350565
+v 20.597322 -37.387486 1.302716
+v 29.932795 -34.549103 -1.015944
+v 32.599476 -38.357376 0.571684
+v 31.388969 -37.935120 0.967853
+v 31.824699 -39.357826 1.852738
+v 38.236427 -35.816505 0.673408
+v 38.209290 -36.056583 -0.426303
+v 38.308167 -35.952763 -0.435719
+v 30.730968 -41.538452 0.198911
+v 30.005936 -40.912418 1.312001
+v 29.087740 -40.074581 0.157172
+v 29.704302 -40.625004 0.238995
+v 32.438774 -41.170731 0.692250
+v 31.463833 -41.530617 0.157039
+v 32.477165 -41.070686 0.090119
+v 29.860710 -38.317711 -0.260006
+v 29.067047 -39.980919 0.138456
+v 30.030167 -38.867222 1.544553
+v 31.009272 -41.619118 0.184691
+v 31.237022 -41.257980 1.278259
+v 32.474281 -40.213951 1.368560
+v 32.660870 -38.648258 -0.349179
+v 33.072006 -39.659946 -0.157686
+v 32.672359 -40.625008 0.070053
+v 33.056667 -39.744007 -0.138957
+v 33.072941 -39.693943 -0.150517
+v 40.160084 -42.027550 0.111893
+v 40.084030 -41.311554 0.871911
+v 39.525032 -41.480473 0.012617
+v 41.245377 -41.346214 0.505037
+v -13.016768 44.276962 -0.038542
+v 4.023682 21.826681 0.008383
+v -16.150404 19.178896 -0.616559
+v -16.079121 18.175919 -0.498131
+v -16.404995 18.543583 0.271076
+v -12.866178 19.465038 -0.262440
+v -0.669740 18.213842 0.104562
+v -0.470713 18.206329 0.082070
+v 1.724227 20.278450 0.103911
+v 1.726621 20.237085 0.098536
+v 1.713832 20.256279 0.115538
+v 4.228837 19.070076 -0.279918
+v -31.667349 12.563521 -0.218593
+v -30.249460 12.611813 -0.370423
+v -30.654913 12.585475 -0.391565
+v 2.734310 14.446919 -0.484257
+v 3.539941 14.580626 -0.410864
+v 11.738733 14.987214 0.012838
+v -32.631218 11.216563 -0.358864
+v -32.660198 10.688362 -0.342846
+v -32.393902 9.991748 -0.309141
+v -32.555950 11.374999 -0.360918
+v -30.154226 9.298780 -0.223736
+v -30.253315 9.091179 0.414187
+v -31.221762 9.219121 -0.267959
+v -30.875000 9.247074 -0.260258
+v 8.333844 10.010232 -0.054756
+v 8.016871 11.093180 -0.021059
+v 1.508900 1.218783 0.067426
+v -40.487495 -10.206208 0.012150
+v -4.432814 -7.794209 -0.209223
+v -3.403609 -9.490414 0.226715
+v 1.000458 -8.568749 -0.108581
+v -43.438145 -11.702641 0.104487
+v -43.697247 -10.640081 0.092328
+v -43.516369 -11.375000 0.096088
+v -11.910935 -12.020673 -0.252637
+v 7.772232 -14.459226 -0.469528
+v 6.613532 -13.919527 -0.477792
+v -44.411327 -21.671503 0.047345
+v -34.780396 -19.542805 -0.366669
+v -47.677151 -24.864830 -0.012209
+v -42.473713 -23.593731 -0.036268
+v -43.195637 -24.701811 -0.087138
+v -43.182518 -24.843208 0.186990
+v -43.381866 -24.898439 -0.095018
+v -44.376442 -25.197130 -0.092947
+v -45.492306 -24.723452 -0.043979
+v -44.735012 -25.044968 -0.076931
+v -7.436517 -25.134005 0.113891
+v -7.266963 -25.172323 0.121283
+v -39.722244 -30.947529 -0.612057
+v -39.846760 -30.165279 -0.532057
+v -36.704227 -29.710764 -0.475036
+v -7.001129 -27.453526 0.070176
+v -7.470443 -27.343296 -0.004666
+v -8.261710 -27.246807 -0.111582
+v -8.302003 -27.401817 0.749056
+v -8.401482 -26.927111 -0.144815
+v -2.412062 -29.421333 0.376408
+v -2.508958 -30.509924 0.488841
+v -19.143915 -31.677271 0.012337
+v 2.278814 -34.083141 0.159219
+v 5.533544 -33.489056 -0.004893
+v 39.184929 48.076557 -0.200138
+v 33.610889 47.387184 1.040613
+v 34.035034 49.094849 -0.187345
+v 33.648170 47.424450 -0.217015
+v 37.960049 47.710014 -0.399307
+v 38.155083 47.775414 -0.406510
+v 46.824169 48.146248 -0.522680
+v 47.371593 48.082832 -0.535703
+v 47.189705 48.082634 -0.549517
+v 47.773403 47.176880 -0.535762
+v 47.559483 47.645622 -0.550432
+v 47.810574 46.052559 -0.459802
+v 46.382923 45.452091 -0.295228
+v 47.313454 45.566418 -0.382993
+v 30.934217 41.480782 -0.150768
+v 30.875000 41.466270 -0.144698
+v 31.176460 41.313351 -0.183698
+v 16.370142 38.684250 0.135159
+v 17.020794 39.630196 0.241553
+v 16.596291 39.000004 0.130530
+v 16.515354 38.240856 0.140820
+v 17.287628 39.874645 0.284433
+v 38.255322 39.042439 0.269604
+v 38.355095 38.959480 0.291229
+v 16.887205 33.762730 0.158432
+v 33.202297 33.424503 0.351926
+v 12.185062 29.197012 0.046902
+v 14.050189 29.111502 0.017268
+v 13.644570 29.129177 0.010920
+v 18.810608 32.078606 0.171047
+v 18.883280 31.919624 0.444404
+v 18.475687 31.324060 0.147229
+v 41.841717 21.233217 -0.865110
+v 44.883797 21.070179 -0.727584
+v 37.943222 16.393627 -0.565872
+v 42.070019 20.450003 -0.927632
+v 42.895699 19.837872 -0.821669
+v 42.023376 20.618700 -0.941599
+v 43.769009 19.793682 -0.745496
+v 44.410049 19.843071 -0.694451
+v 44.467716 19.892635 -0.692544
+v 14.974559 14.160714 -0.009271
+v 15.018213 14.427757 -0.002518
+v 13.920957 13.850840 -0.006138
+v 14.620990 13.976867 0.007588
+v 14.252192 13.910472 0.000357
+v 18.712196 14.057281 -0.261493
+v 20.903137 14.572797 -0.388510
+v 20.277733 14.986396 -0.331979
+v 21.125000 14.430118 -0.399343
+v 36.934914 15.038935 -0.373458
+v 36.962650 14.656228 -0.307007
+v 36.725010 14.883663 -0.010844
+v 37.544781 16.099516 -0.531044
+v 40.641788 14.958629 -0.218407
+v 40.631058 14.677586 -0.169482
+v 40.625004 14.985195 -0.221515
+v 37.606384 13.560031 -0.097438
+v 37.522324 13.702007 -0.122344
+v 38.544777 12.868705 0.057377
+v 27.184875 4.694152 -0.105369
+v 26.858955 3.490157 -0.090375
+v 18.123962 0.160238 0.085988
+v 34.225529 -1.621818 -0.519047
+v 34.667698 -3.182148 -0.151110
+v 44.460014 -3.391099 -0.182977
+v 43.875008 -3.407189 -0.181719
+v 20.191063 -11.517307 -0.510080
+v 21.286873 -11.049013 -0.502580
+v 21.224876 -11.159925 -0.552441
+v 21.125002 -11.225340 -0.566438
+v 20.206629 -12.184557 -0.559341
+v 20.706915 -12.204695 -0.602222
+v 20.715525 -12.531378 0.466954
+v 21.125002 -11.396137 -0.578717
+v 21.417942 -11.701515 0.436134
+v 20.891321 -11.989442 -0.602019
+v 12.939177 -34.109966 -0.016552
+v 27.063993 -33.839905 -0.725249
+v 27.051798 -33.895313 -0.726103
+v 27.862967 -34.799923 -0.715256
+v 27.331470 -34.125000 -0.770450
+v 29.273478 -32.400288 -0.936938
+v 29.957598 -32.825035 -0.995688
+v 30.091805 -34.387302 -1.064569
+v 30.042013 -34.125004 -1.105391
+v 29.961933 -33.141701 -1.053600
+v 38.414276 -34.420887 -0.426840
+v 46.965801 -33.697479 -0.096335
+v -6.225410 -36.578892 -0.165415
+v -6.154101 -36.888397 -0.175153
+v -6.347136 -35.995800 -0.171432
+v -6.327345 -36.110546 -0.162207
+v -4.825863 -36.040176 -0.080113
+v -4.972845 -36.275360 -0.116478
+v 4.662270 -34.689415 0.145105
+v 4.347963 -34.857304 0.167565
+v -22.904392 -40.071327 -0.071598
+v -22.792749 -40.543175 -0.080193
+v -17.807106 -42.103466 -0.288093
+v -16.686073 -42.150307 -0.325976
+v -13.512487 -41.337723 -0.160074
+v -10.507712 -41.058651 -0.055805
+v -10.700027 -41.390858 -0.083148
+v -13.525084 -41.295921 -0.159023
+v -25.263214 -46.433521 -0.134013
+v -18.741356 -44.340755 -0.260846
+v -16.314568 -44.276928 -0.342540
+v -15.902347 -45.434086 -0.370847
+v -15.993184 -45.157959 -0.355048
+v -18.593296 -44.743305 -0.277945
+v -15.928147 -45.682285 -0.382720
+v -16.833096 -46.149582 -0.386520
+v -28.557859 -46.786381 0.129872
+v -28.571541 -46.977238 0.135954
+v -28.600441 -46.950928 0.210402
+v -25.484310 -47.861172 -0.099779
+v -25.463593 -48.152668 0.369270
+v -26.051828 -48.640888 -0.077511
+v -25.999998 -48.566246 -0.084584
+v -46.696632 -50.504211 -0.491608
+v -47.011730 -51.193859 -0.509548
+v 20.099186 -35.199238 0.124692
+v 19.753048 -35.137199 0.159656
+v 31.812376 -38.150978 -0.406512
+v 29.998812 -38.234730 -0.285493
+v 38.791473 -34.737297 -0.406190
+v 38.344250 -35.854500 -0.444486
+v 40.530079 -40.580593 -0.005179
+v 41.211094 -41.366543 0.121023
+v 40.685993 -41.861847 0.132812
+v -45.338005 49.286854 -0.049436
+v -12.543975 43.691917 0.637985
+v -12.557268 43.798141 0.090248
+v 1.143944 45.228344 0.427795
+v 1.203551 44.644482 0.475507
+v 5.369804 40.956085 -0.139996
+v 5.360238 40.963581 -0.138055
+v 6.074288 41.914703 0.114876
+v -12.632571 37.573952 0.492413
+v -12.449850 36.564373 0.482800
+v -12.498304 36.832096 0.485349
+v -12.367048 36.730316 0.751040
+v -12.367330 36.541954 0.668014
+v -11.343286 39.241623 0.518160
+v -10.007461 36.363708 0.473186
+v -12.079214 36.342861 0.482740
+v -12.367261 36.515015 0.482787
+v -11.163072 35.997784 0.484748
+v 11.284101 29.152710 0.816255
+v 12.427355 28.394527 1.766442
+v 11.238946 29.181847 0.072193
+v 12.043346 26.269806 0.147904
+v -20.091175 22.122053 -0.150402
+v 0.361805 21.361115 0.127826
+v 1.379067 20.429022 0.158545
+v 1.037895 20.733601 0.233432
+v 3.470852 21.814714 0.059659
+v 2.577262 21.494028 0.136848
+v 2.806662 21.016094 1.461310
+v 2.329330 21.125004 0.152974
+v -15.753514 18.897247 1.523173
+v -14.312183 16.939884 -0.155085
+v -2.408523 20.071741 0.134419
+v -1.765247 18.864838 0.304297
+v 1.468174 20.097986 0.107665
+v 0.675946 19.823475 1.621930
+v 1.493986 20.247559 0.123498
+v 4.596481 19.766037 -0.227489
+v -42.258663 13.512590 0.205824
+v -29.911324 12.463062 -0.336868
+v -6.509511 14.003248 0.927661
+v -6.462943 12.800079 0.976568
+v -3.708615 14.578543 0.657858
+v -4.250514 14.873464 0.765750
+v -3.672309 13.452271 0.720749
+v -3.735248 13.284938 0.746055
+v -5.267449 12.215103 0.947168
+v -5.451294 12.233995 0.949772
+v 3.696082 14.757130 -0.398987
+v 11.814435 14.675370 0.015209
+v -31.911926 9.425551 -0.287130
+v -32.331280 9.918720 -0.304174
+v -30.777225 10.445789 1.978740
+v -28.862879 10.995473 -0.187240
+v -29.590944 12.017027 -0.276619
+v -28.874352 10.874836 -0.180659
+v -28.855438 10.902409 -0.181499
+v -29.436317 10.588020 1.098562
+v -28.982122 10.714340 -0.183879
+v -6.152813 12.634911 0.995066
+v -16.409685 6.611679 0.487100
+v 2.603675 1.909917 0.041066
+v 1.725348 0.966259 0.097122
+v -3.067156 -6.046673 -0.167122
+v -2.275036 -6.102049 0.450775
+v -1.793735 -6.600407 0.190407
+v -1.925009 -6.500000 0.144575
+v -2.567445 -6.002648 -0.060061
+v -1.762152 -6.705728 0.214617
+v -1.371201 -6.838398 0.165701
+v -43.323433 -9.673471 0.073003
+v -40.810692 -9.661939 0.013813
+v -3.633256 -9.512385 0.249671
+v -2.870720 -8.972875 0.200433
+v -5.654514 -12.721002 0.299965
+v -4.556156 -13.128812 0.300655
+v -5.194858 -12.867671 0.335441
+v 6.439098 -14.156654 -0.521611
+v -34.469727 -19.890305 -0.417919
+v -13.164388 -21.082628 0.717230
+v -8.692956 -22.466024 0.655060
+v -48.346096 -25.490231 0.889592
+v -48.488537 -25.501184 -0.034983
+v -45.881683 -24.403324 -0.017869
+v -8.287076 -25.232704 0.004086
+v -8.590857 -25.613623 -0.121539
+v -37.262253 -28.783501 -0.381551
+v -36.655758 -29.583809 -0.461828
+v -36.650024 -29.601254 -0.463602
+v -7.870111 -27.292427 -0.070213
+v -19.095545 -31.691086 0.019925
+v -1.950826 -31.249840 0.474784
+v 3.850390 -31.440626 -0.236497
+v 2.746077 -31.665813 -0.081392
+v 26.713139 48.873615 0.129468
+v 26.663904 49.288715 0.115499
+v 34.068810 49.161190 -0.188198
+v 34.436478 48.732445 1.404270
+v 45.284725 47.794567 -0.366041
+v 19.999683 46.858234 0.189885
+v 19.911320 46.833469 0.191971
+v 23.623144 48.152020 0.100459
+v 25.312992 46.503929 0.090128
+v 44.520042 47.841152 -0.303811
+v 43.483414 47.496689 -0.190756
+v 43.241913 44.719467 0.025430
+v 47.693718 45.660877 -0.422219
+v 31.174318 40.695396 -0.205530
+v 30.875000 40.587368 -0.176087
+v 18.530443 37.547722 0.146423
+v 17.868830 37.437122 0.149102
+v 16.959660 37.579330 0.148852
+v 32.354935 36.852634 0.053379
+v 34.711803 35.650879 0.321277
+v 38.650440 38.773243 0.342792
+v 39.401485 38.312565 0.526941
+v 39.749878 38.349842 0.565189
+v 40.992149 38.538349 0.598917
+v 18.473774 33.133930 0.185886
+v 17.913847 33.576000 0.182494
+v 17.422607 33.734055 0.177050
+v 17.119400 33.747200 0.172303
+v 17.790186 33.616104 0.180515
+v 31.001869 35.132717 0.204654
+v 32.183201 33.661968 0.332051
+v 34.266129 34.299805 0.334259
+v 34.660641 35.252930 0.332560
+v 33.851185 33.860134 0.313353
+v 16.948961 30.677925 0.100608
+v 16.981815 30.606491 1.056273
+v 15.834099 31.309002 0.096230
+v 17.308498 30.725988 0.107664
+v 17.939318 30.810005 0.123932
+v 14.985595 28.097620 0.010073
+v 14.769190 27.240046 0.044245
+v 19.815985 14.984978 1.015923
+v 19.986647 15.060702 -0.309940
+v 40.625004 14.667965 -0.167323
+v 38.637653 12.865512 0.063705
+v 32.271248 10.794315 -0.062620
+v 17.663107 1.381200 0.018047
+v 16.922560 1.038667 0.012294
+v 27.700655 3.780398 -0.149229
+v 18.389284 0.696509 0.005536
+v 48.117031 -30.634987 -0.062763
+v 47.556198 -30.472982 -0.204867
+v 49.052246 -32.249538 -0.104561
+v -18.760771 -36.711227 -0.344997
+v -6.288369 -35.755672 -0.194469
+v -5.603951 -36.949966 -0.202360
+v -22.236431 -41.400955 -0.111376
+v -22.374329 -39.999950 -0.094382
+v -11.387417 -41.718971 -0.103868
+v -12.052925 -41.973213 -0.118244
+v -12.263629 -41.957947 -0.114213
+v -38.263557 -43.055130 -0.139236
+v -38.597786 -42.901711 -0.206873
+v -40.605049 -43.305771 -0.096307
+v -41.195107 -44.371944 -0.091030
+v -41.140663 -44.745636 -0.105082
+v -40.463200 -45.957787 -0.181150
+v -37.612713 -43.917164 -0.009504
+v -28.103594 -45.744953 0.058347
+v -18.689255 -44.483944 -0.262875
+v -2.997148 -43.521599 0.027436
+v -26.104700 -48.646763 -0.072028
+v -26.072191 -48.644184 -0.075374
+v -47.525517 -51.292217 -0.460738
+v -47.303146 -51.317360 -0.480445
+v -47.064705 -51.217648 -0.508276
+v 13.459702 -35.386745 0.213252
+v 18.038418 -35.525192 0.282072
+v 20.689116 -35.571686 0.079290
+v 17.674852 -37.178555 0.372570
+v 21.359343 -36.813839 0.071272
+v 20.182089 -38.135555 0.256187
+v 20.431787 -37.852154 0.229039
+v 21.359489 -36.803589 0.070711
+v 32.250225 -38.295490 -0.400738
+v -12.366836 36.755501 0.485349
+v 42.139812 33.591511 0.469569
+v 14.252414 13.972651 0.000409
+v 14.707758 14.243871 0.009481
+v 14.738463 14.262160 0.010093
+v 14.752579 14.270516 0.009456
+v 14.624116 13.977437 0.007400
+v 14.645535 13.981342 0.006118
+v 14.661258 13.997806 0.005667
+v 14.700274 14.169413 0.009278
+v 42.606083 34.061588 0.422771
+v 42.554100 34.097633 0.426286
+v 42.502697 34.157497 0.429297
+v -11.375002 -40.625008 -0.005980
+v -5.687500 -36.156250 -0.182069
+v -11.375000 -21.125004 0.721835
+v -45.500004 -22.750004 0.073018
+v -4.875000 -11.375002 0.272932
+v -30.875000 11.374998 -0.291476
+v -4.875001 13.000000 1.030346
+vn -0.4551 -0.7900 -0.4109
+vn 0.4950 -0.7430 -0.4505
+vn -0.7365 0.6470 -0.1977
+vn 0.2964 -0.5583 -0.7749
+vn -0.0174 -0.9915 -0.1286
+vn -0.1752 0.1249 -0.9766
+vn -0.9711 0.1523 -0.1836
+vn -0.8397 -0.4103 -0.3558
+vn -0.0852 -0.6607 -0.7458
+vn 0.1114 -0.6224 -0.7747
+vn -0.5498 0.7887 -0.2750
+vn -0.1456 0.8735 -0.4645
+vn 0.5637 -0.7523 -0.3410
+vn -0.8674 -0.4604 -0.1891
+vn -0.7836 -0.0588 -0.6184
+vn 0.6699 -0.6569 -0.3459
+vn -0.9332 0.1344 -0.3331
+vn 0.2850 0.6221 -0.7292
+vn -0.2917 0.8228 -0.4878
+vn 0.8522 0.3980 -0.3397
+vn -0.4793 0.6239 -0.6172
+vn 0.4624 0.7874 -0.4075
+vn 0.3486 0.8414 -0.4130
+vn 0.4161 0.8541 -0.3120
+vn 0.0302 -0.7753 -0.6309
+vn 0.8629 -0.3149 -0.3952
+vn -0.3849 0.1148 -0.9158
+vn 0.6483 -0.7303 -0.2155
+vn 0.9104 -0.1694 -0.3774
+vn -0.3841 -0.5791 -0.7191
+vn 0.3169 0.9004 -0.2980
+vn 0.8612 0.4674 -0.1995
+vn -0.7789 0.4792 -0.4046
+vn 0.4040 -0.5649 -0.7195
+vn 0.9378 -0.3297 -0.1089
+vn -0.8594 0.1566 -0.4867
+vn 0.4771 -0.7703 -0.4230
+vn -0.9908 0.0508 -0.1255
+vn 0.7202 0.4658 -0.5142
+vn -0.6001 -0.5126 -0.6141
+vn -0.2579 0.9249 -0.2793
+vn -0.8416 0.0387 -0.5387
+vn -0.4158 0.9022 -0.1146
+vn -0.9067 0.0701 -0.4159
+vn 0.6915 0.5723 -0.4407
+vn -0.4403 0.8868 -0.1401
+vn 0.5245 0.8044 -0.2789
+vn -0.6937 0.6558 -0.2978
+vn 0.8289 0.5063 -0.2380
+vn -0.8906 -0.4151 -0.1859
+vn -0.0757 -0.8083 -0.5839
+vn 0.6707 0.1545 -0.7254
+vn 0.7543 -0.0917 -0.6501
+vn -0.1304 -0.5299 -0.8380
+vn 0.8219 -0.4620 -0.3331
+vn -0.4522 -0.8806 -0.1414
+vn -0.9075 0.4134 -0.0745
+vn -0.0881 0.9876 -0.1296
+vn 0.4326 0.8344 -0.3416
+vn 0.9624 -0.1579 -0.2211
+vn 0.8415 -0.3132 -0.4402
+vn -0.6466 -0.6909 -0.3235
+vn -0.0080 -0.8764 -0.4816
+vn 0.8314 -0.5163 -0.2055
+vn -0.5700 0.6381 -0.5175
+vn -0.8234 -0.3837 -0.4182
+vn -0.9102 0.2795 -0.3058
+vn -0.5000 -0.6861 -0.5284
+vn -0.0935 -0.8886 -0.4491
+vn 0.8218 0.4575 -0.3397
+vn 0.0261 -0.9786 -0.2042
+vn -0.3811 0.8686 -0.3167
+vn 0.3443 0.8928 -0.2905
+vn 0.7745 0.3836 -0.5029
+vn 0.3421 0.8931 -0.2921
+vn 0.2741 0.9391 -0.2072
+vn -0.5324 0.7706 -0.3502
+vn -0.8604 -0.0293 -0.5087
+vn 0.9804 0.1501 -0.1273
+vn 0.4838 0.7512 -0.4491
+vn -0.0898 -0.9041 -0.4178
+vn -0.9589 0.1008 -0.2653
+vn -0.7916 0.5696 -0.2214
+vn 0.0375 -0.8279 -0.5597
+vn -0.5960 -0.5362 -0.5977
+vn -0.4437 -0.2478 -0.8612
+vn 0.9245 0.3311 -0.1888
+vn 0.4071 -0.7563 -0.5121
+vn 0.9216 -0.2632 -0.2855
+vn -0.7917 -0.0590 -0.6081
+vn -0.8907 -0.0203 -0.4542
+vn 0.5749 0.8060 -0.1408
+vn -0.1050 -0.9865 -0.1256
+vn 0.2278 -0.9539 -0.1954
+vn -0.3905 0.8714 -0.2970
+vn -0.7364 -0.3976 -0.5475
+vn -0.5347 -0.5690 -0.6247
+vn 0.1528 0.7056 -0.6920
+vn 0.4436 0.7871 -0.4287
+vn 0.0336 0.9881 -0.1500
+vn -0.1355 0.9172 -0.3747
+vn -0.0574 -0.9817 -0.1818
+vn -0.3922 0.8025 -0.4496
+vn -0.8023 -0.0820 -0.5913
+vn 0.8256 -0.0560 -0.5614
+vn -0.7376 -0.6533 -0.1707
+vn -0.8444 -0.2939 -0.4479
+vn -0.0217 -0.8684 -0.4954
+vn -0.7505 -0.4500 -0.4840
+vn -0.5852 0.7570 -0.2906
+vn -0.3948 0.6687 0.6300
+vn -0.8784 0.4595 0.1317
+vn -0.2363 0.9710 -0.0362
+vn -0.5217 -0.0541 0.8514
+vn -0.0211 -0.8686 0.4950
+vn -0.6991 -0.6740 -0.2386
+vn -0.5686 0.4228 0.7056
+vn -0.6713 0.7393 0.0522
+vn 0.1153 0.7327 0.6707
+vn -0.1703 -0.1190 0.9782
+vn 0.4293 0.7790 0.4570
+vn 0.8378 0.0861 0.5392
+vn 0.2203 0.8013 0.5563
+vn -0.8748 -0.0825 0.4775
+vn 0.8227 -0.5633 -0.0769
+vn -0.7725 -0.3676 0.5177
+vn -0.4596 -0.7656 0.4502
+vn -0.0540 -0.8504 0.5234
+vn -0.7270 0.6717 0.1425
+vn 0.7027 -0.2286 0.6737
+vn 0.7724 0.6275 -0.0984
+vn -0.6983 -0.6918 -0.1839
+vn 0.5875 -0.4947 0.6404
+vn 0.1710 0.9808 -0.0939
+vn -0.7013 0.7084 0.0796
+vn -0.1765 0.9624 0.2067
+vn 0.8742 0.3711 0.3133
+vn 0.5646 0.4687 0.6794
+vn -0.5652 -0.8234 -0.0503
+vn 0.6658 0.7432 -0.0663
+vn 0.8213 0.4599 0.3375
+vn 0.9531 0.1056 0.2837
+vn -0.0737 0.7778 0.6242
+vn 0.7122 -0.1822 0.6779
+vn 0.3468 -0.0741 0.9350
+vn 0.5011 -0.8654 -0.0089
+vn -0.3165 -0.7420 0.5909
+vn -0.3290 -0.9306 0.1603
+vn -0.5414 0.8389 -0.0562
+vn -0.6101 -0.7111 0.3494
+vn -0.5922 -0.2420 0.7686
+vn 0.5931 -0.0366 0.8043
+vn -0.3979 0.8497 0.3459
+vn 0.2136 0.8561 0.4706
+vn 0.5168 -0.6351 0.5741
+vn -0.3170 0.1088 0.9422
+vn 0.5155 0.8058 0.2915
+vn -0.9153 0.3172 -0.2482
+vn -0.3628 -0.5064 0.7823
+vn -0.5037 0.8003 0.3254
+vn -0.8335 0.5409 0.1128
+vn -0.7637 -0.0170 0.6453
+vn 0.0813 0.7307 0.6779
+vn -0.8611 -0.4962 -0.1111
+vn -0.8551 0.4143 0.3117
+vn -0.8581 -0.3568 0.3692
+vn -0.1827 0.9817 -0.0527
+vn -0.2655 -0.9401 -0.2139
+vn 0.5039 0.8177 0.2784
+vn -0.5237 0.6567 0.5426
+vn 0.8274 -0.1448 0.5426
+vn -0.5142 -0.4802 0.7106
+vn 0.5199 -0.7865 0.3334
+vn -0.0763 -0.9747 0.2103
+vn 0.5227 0.1040 0.8462
+vn -0.2852 -0.2693 0.9199
+vn 0.0477 -0.2804 0.9587
+vn -0.2854 0.8274 0.4838
+vn 0.5009 -0.4717 0.7257
+vn -0.9192 -0.3683 -0.1391
+vn -0.0861 0.9919 0.0933
+vn 0.0364 0.6734 0.7384
+vn 0.1440 -0.6865 0.7127
+vn -0.4915 0.8685 -0.0646
+vn -0.7080 -0.7062 0.0086
+vn 0.5449 -0.8286 0.1285
+vn 0.1699 0.9630 -0.2093
+vn 0.1765 0.9731 0.1480
+vn -0.0056 0.4618 0.8870
+vn -0.7989 0.5872 -0.1304
+vn -0.5194 -0.8117 0.2670
+vn -0.3794 0.1582 0.9116
+vn 0.1152 -0.6576 0.7445
+vn -0.0041 0.8808 0.4735
+vn 0.4394 0.5557 0.7058
+vn -0.4491 0.2352 0.8619
+vn 0.2199 0.3044 0.9268
+vn 0.5055 -0.8315 0.2305
+vn 0.5632 0.6038 0.5641
+vn 0.1338 0.6942 0.7072
+vn -0.4456 -0.6849 0.5765
+vn -0.4073 -0.7558 0.5127
+vn -0.1973 0.0965 0.9756
+vn 0.7141 -0.2615 0.6494
+vn -0.4097 -0.8461 0.3410
+vn -0.4516 -0.2620 0.8529
+vn 0.8953 -0.4389 0.0757
+vn -0.2459 -0.9089 0.3369
+vn 0.6552 -0.3711 0.6580
+vn -0.0711 -0.2300 0.9706
+vn 0.6765 0.7291 -0.1037
+vn -0.7464 -0.4326 0.5057
+vn -0.1675 -0.9858 0.0113
+vn 0.6730 -0.7248 0.1476
+vn -0.4065 -0.0308 0.9131
+vn 0.6662 -0.1362 0.7332
+vn -0.9622 -0.2546 0.0966
+vn 0.5423 -0.7920 0.2805
+vn 0.9258 -0.0204 0.3776
+vn 0.7214 0.6913 0.0400
+vn 0.1105 0.7458 0.6569
+vn 0.1706 -0.6872 0.7061
+vn 0.1766 -0.6860 0.7058
+vn 0.1806 -0.6825 0.7082
+vn -0.5893 0.7976 0.1289
+vn 0.0417 0.6911 0.7215
+vn 0.0152 0.7198 0.6940
+vn -0.1597 0.6211 0.7673
+vn -0.2231 0.9518 0.2106
+vn -0.5731 0.7751 0.2659
+vn -0.9978 -0.0594 0.0296
+vn 0.2156 0.2977 0.9300
+vn -0.0054 -0.4954 0.8686
+vn -0.4136 0.6309 0.6564
+vn -0.1763 -0.0598 0.9825
+vn 0.8158 0.5632 -0.1311
+vn -0.0225 0.8375 0.5460
+vn 0.6108 0.3886 0.6899
+vn 0.6145 0.0237 0.7886
+vn 0.0382 -0.8692 0.4929
+vn -0.6408 0.7510 0.1590
+vn 0.8264 0.5625 0.0267
+vn -0.6087 -0.7749 0.1701
+vn 0.0097 -0.0875 0.9961
+vn 0.4632 -0.7656 0.4464
+vn 0.8836 0.3080 0.3527
+vn 0.2325 -0.5798 0.7809
+vn -0.1558 -0.0775 0.9847
+vn 0.1968 -0.3896 0.8997
+vn 0.8769 0.4451 0.1814
+vn -0.6568 0.6531 0.3769
+vn 0.6203 -0.7843 0.0026
+vn -0.2559 -0.8559 0.4493
+vn -0.4040 -0.8770 -0.2602
+vn 0.0076 0.3377 0.9412
+vn 0.9682 0.2114 0.1340
+vn 0.6237 -0.1501 0.7671
+vn -0.4689 0.1096 0.8764
+vn 0.1352 0.8707 0.4728
+vn 0.4224 -0.1060 0.9002
+vn -0.7887 -0.5667 -0.2385
+vn 0.7595 -0.6492 0.0418
+vn -0.0987 0.8556 0.5082
+vn -0.7337 0.1157 0.6696
+vn 0.0700 0.6329 0.7710
+vn 0.2794 -0.0181 0.9600
+vn -0.1361 -0.9889 -0.0590
+vn -0.1979 -0.6440 0.7390
+vn 0.1711 -0.9163 0.3622
+vn -0.8066 0.5051 0.3071
+vn 0.0501 0.6485 0.7596
+vn -0.8195 0.3765 0.4321
+vn 0.8782 0.4654 0.1102
+vn 0.2709 -0.8959 0.3520
+vn -0.9089 0.3612 -0.2083
+vn 0.1104 0.9841 0.1395
+vn 0.7607 0.6104 0.2207
+vn -0.9701 -0.1344 0.2022
+vn -0.2897 -0.5619 0.7748
+vn 0.3394 -0.0791 0.9373
+vn 0.8150 0.5748 0.0741
+vn 0.7665 0.5454 0.3391
+vn -0.8340 0.5232 -0.1755
+vn -0.8196 0.5626 0.1080
+vn -0.8325 0.1674 0.5282
+vn 0.1068 0.9859 0.1290
+vn -0.0082 0.9754 0.2203
+vn 0.0215 0.4414 0.8970
+vn -0.1073 0.9784 0.1769
+vn 0.1568 0.9760 0.1512
+vn -0.5516 0.6049 0.5743
+vn 0.8367 0.1970 0.5111
+vn 0.8681 0.0571 0.4931
+vn -0.4548 0.1882 0.8705
+vn 0.5241 -0.4615 0.7158
+vn -0.1970 0.9704 0.1396
+vn -0.8768 0.4053 -0.2586
+vn -0.6280 -0.7782 0.0056
+vn 0.0403 -0.4904 0.8706
+vn 0.9929 0.0939 0.0728
+vn 0.2424 0.9056 0.3480
+vn 0.2761 -0.9464 0.1676
+vn 0.8780 -0.4557 0.1467
+vn -0.5458 -0.8377 0.0200
+vn 0.5171 -0.8438 -0.1434
+vn -0.1461 0.9889 0.0250
+vn 0.6530 0.7544 0.0674
+vn -0.6949 0.4558 0.5561
+vn -0.2231 -0.4341 0.8728
+vn -0.1588 -0.8890 0.4294
+vn 0.4756 -0.7850 0.3969
+vn 0.6517 -0.3635 0.6657
+vn -0.5693 -0.5855 0.5771
+vn -0.4066 0.4499 0.7952
+vn 0.6278 0.7346 0.2574
+vn 0.3830 -0.9157 0.1214
+vn 0.4560 -0.8768 0.1529
+vn 0.1323 0.2580 0.9570
+vn -0.0782 0.4424 0.8934
+vn 0.0313 -0.3856 0.9222
+vn 0.3717 -0.3972 0.8391
+vn 0.5685 -0.4642 0.6792
+vn 0.3430 0.5445 0.7654
+vn -0.9942 -0.0403 0.0992
+vn -0.2010 -0.0859 0.9758
+vn -0.8708 0.4915 0.0043
+vn 0.1203 0.9844 0.1284
+vn -0.9090 0.3652 0.2010
+vn -0.2641 0.5129 0.8168
+vn 0.4702 0.8278 0.3062
+vn -0.5407 0.2365 0.8073
+vn 0.8646 0.0475 0.5002
+vn 0.3207 -0.2780 0.9055
+vn -0.6600 0.6566 0.3651
+vn 0.4094 0.8200 0.4001
+vn -0.9506 0.2136 0.2252
+vn -0.7998 -0.2404 0.5500
+vn -0.2751 -0.0479 0.9602
+vn 0.2281 -0.5569 0.7986
+vn 0.4439 -0.8950 -0.0428
+vn 0.8323 0.2249 0.5067
+vn -0.9164 0.3831 -0.1160
+vn -0.9436 0.3275 0.0492
+vn -0.3659 0.4486 0.8154
+vn 0.5540 0.5508 0.6242
+vn -0.8193 0.5196 0.2424
+vn 0.6072 -0.7879 -0.1030
+vn -0.0037 0.3631 0.9317
+vn 0.0363 -0.6564 0.7535
+vn 0.0779 -0.7942 0.6026
+vn -0.1566 -0.9787 -0.1331
+vn 0.7016 -0.6927 0.1671
+vn -0.7533 -0.1677 0.6360
+vn -0.0924 0.1748 0.9803
+vn 0.7657 -0.6287 0.1355
+vn 0.1428 -0.9863 0.0824
+vn 0.8107 0.2810 0.5136
+vn -0.6673 0.5653 0.4849
+vn 0.5272 0.7307 0.4338
+vn -0.3240 0.4300 0.8427
+vn -0.2808 -0.1240 0.9517
+vn -0.5320 0.8202 0.2101
+vn 0.3782 0.8333 0.4033
+vn -0.1819 -0.9516 0.2476
+vn -0.9585 -0.2520 0.1332
+vn -0.0418 -0.3154 0.9480
+vn 0.8116 -0.5745 0.1060
+vn 0.7898 -0.4523 0.4142
+vn 0.9901 0.0296 0.1369
+vn 0.0787 -0.9546 0.2874
+vn 0.7341 -0.1619 0.6595
+vn 0.3229 0.3505 0.8791
+vn -0.4003 0.1502 0.9040
+vn 0.2435 -0.7017 0.6696
+vn -0.8307 0.4055 0.3816
+vn -0.0375 0.0453 0.9983
+vn 0.9171 0.1832 0.3542
+vn -0.4444 0.8208 0.3589
+vn 0.3793 0.8383 0.3916
+vn 0.5279 -0.8378 0.1395
+vn -0.3316 0.7863 0.5213
+vn 0.2223 0.8159 0.5337
+vn 0.8098 0.4966 0.3124
+vn -0.7570 -0.1279 0.6407
+vn 0.0854 -0.1585 0.9837
+vn -0.7498 -0.5886 0.3023
+vn -0.6055 -0.7579 0.2427
+vn 0.6294 -0.7653 0.1348
+vn 0.4489 -0.5197 0.7269
+vn 0.2050 -0.9747 -0.0892
+vn -0.5511 0.8325 0.0566
+vn 0.7021 0.2669 0.6602
+vn 0.7151 -0.0973 0.6922
+vn -0.3907 0.8105 0.4363
+vn 0.4382 0.0202 0.8986
+vn -0.7408 -0.5884 0.3241
+vn -0.3329 0.9281 0.1669
+vn -0.8110 -0.4870 0.3242
+vn -0.4449 -0.6654 0.5994
+vn -0.9227 -0.0922 0.3745
+vn -0.0014 0.9996 0.0265
+vn -0.5760 0.7627 0.2940
+vn 0.1255 -0.9904 -0.0574
+vn 0.7425 0.5323 0.4066
+vn 0.1384 -0.0758 0.9875
+vn -0.5039 0.8486 -0.1610
+vn -0.8121 0.5812 0.0518
+vn -0.8178 -0.5636 0.1169
+vn -0.3966 -0.9103 0.1185
+vn 0.8668 -0.3869 0.3146
+vn -0.7118 0.3816 0.5897
+vn 0.3949 0.3565 0.8467
+vn -0.0770 -0.1933 0.9781
+vn 0.3497 0.1703 0.9213
+vn 0.9891 -0.0737 0.1279
+vn 0.9458 -0.2771 0.1693
+vn -0.3200 0.8874 0.3318
+vn -0.9736 0.2195 0.0632
+vn -0.8976 -0.3351 0.2865
+vn -0.2920 0.7379 0.6085
+vn -0.4395 -0.1023 0.8924
+vn -0.2441 0.2123 0.9462
+vn 0.5438 0.8365 -0.0673
+vn 0.8395 -0.2227 0.4957
+vn 0.4014 0.8293 0.3888
+vn 0.6495 -0.0914 0.7548
+vn -0.6424 0.7644 0.0539
+vn -0.2449 0.5119 0.8234
+vn -0.9726 0.2267 -0.0513
+vn -0.2771 0.7690 0.5761
+vn -0.5750 -0.6322 0.5193
+vn 0.3802 -0.8356 0.3966
+vn 0.5257 -0.6742 0.5188
+vn -0.3183 -0.1825 0.9302
+vn 0.8198 0.5212 0.2373
+vn 0.8450 -0.4551 0.2808
+vn 0.5565 0.4982 0.6649
+vn -0.8536 0.3758 0.3608
+vn 0.9826 -0.1617 -0.0909
+vn 0.6746 0.5449 0.4980
+vn 0.2998 0.8758 0.3783
+vn 0.2779 0.9532 0.1189
+vn 0.7141 -0.6498 -0.2606
+vn -0.1281 -0.2408 0.9621
+vn -0.0655 -0.9097 0.4101
+vn -0.5236 -0.8394 0.1458
+vn 0.9119 -0.2654 0.3130
+vn -0.3506 0.1081 0.9303
+vn -0.7397 0.6689 -0.0736
+vn -0.2625 0.7686 0.5834
+vn -0.1326 0.7959 0.5907
+vn -0.8208 0.5712 0.0025
+vn -0.4393 -0.8790 0.1852
+vn -0.5257 0.6890 0.4990
+vn 0.5887 -0.4314 0.6836
+vn -0.2706 0.2982 0.9153
+vn 0.9791 0.2009 -0.0308
+vn 0.5276 0.4512 0.7198
+vn -0.4075 0.8891 0.2085
+vn 0.1141 0.4930 0.8625
+vn -0.7124 -0.0592 0.6993
+vn 0.4321 -0.1452 0.8901
+vn 0.1871 -0.5188 0.8342
+vn 0.8984 -0.4283 0.0975
+vn 0.9295 0.0975 0.3556
+vn 0.6063 0.7934 -0.0544
+vn 0.2073 0.8674 0.4524
+vn 0.2137 0.3974 0.8924
+vn -0.9706 0.1582 0.1813
+vn 0.9540 0.1879 -0.2334
+vn 0.8318 0.4903 0.2601
+vn -0.3907 -0.8979 0.2030
+vn -0.6658 0.2206 0.7128
+vn 0.1571 -0.4838 0.8610
+vn -0.2078 -0.5842 0.7846
+vn -0.1816 -0.2246 0.9574
+vn 0.7733 0.2316 0.5902
+vn -0.5455 -0.8377 -0.0256
+vn -0.1805 -0.3096 0.9336
+vn 0.1259 0.9872 -0.0977
+vn 0.7075 0.6661 0.2361
+vn -0.7096 0.6023 0.3655
+vn 0.4328 0.3694 0.8223
+vn 0.3742 0.0254 0.9270
+vn 0.7888 0.0170 0.6144
+vn -0.8209 -0.5651 -0.0831
+vn 0.6863 -0.5230 0.5055
+vn 0.9906 -0.0496 -0.1277
+vn -0.3092 0.9287 -0.2050
+vn -0.2695 -0.9547 0.1261
+vn -0.8045 0.1618 0.5715
+vn -0.0131 0.4940 0.8694
+vn 0.0962 -0.3777 0.9209
+vn -0.7599 -0.6418 0.1033
+vn -0.4427 -0.8910 0.1003
+vn 0.5525 -0.8331 -0.0257
+vn 0.1201 -0.8738 0.4713
+vn 0.4282 0.5682 0.7027
+vn 0.7239 -0.6776 0.1301
+vn -0.2705 0.1585 0.9496
+vn -0.6649 -0.7468 -0.0131
+vn 0.4032 -0.9065 -0.1249
+vn -0.8584 0.4627 0.2215
+vn -0.2443 -0.9045 0.3496
+vn 0.1998 -0.9420 0.2695
+vn 0.7509 0.2171 0.6237
+vn -0.8015 -0.0582 0.5951
+vn -0.1970 -0.1085 0.9744
+vn 0.9286 0.3671 -0.0541
+vn 0.9158 -0.4015 -0.0083
+vn 0.9116 0.1087 0.3965
+vn 0.9289 -0.2361 0.2853
+vn -0.6048 -0.6090 0.5132
+vn 0.2416 0.6705 0.7015
+vn 0.0394 0.8150 -0.5781
+vn -0.5486 0.4917 -0.6763
+vn 0.8350 -0.0573 -0.5473
+vn 0.2699 0.5829 -0.7664
+vn 0.3109 -0.9406 -0.1363
+vn 0.6113 0.7681 -0.1906
+vn -0.2480 0.8377 -0.4867
+vn -0.9328 -0.1069 -0.3441
+vn 0.8321 0.3358 -0.4415
+vn -0.0650 -0.9653 -0.2530
+vn 0.0618 -0.9572 -0.2829
+vn -0.7785 0.0364 -0.6266
+vn 0.2548 -0.8022 -0.5399
+vn -0.0538 0.9803 -0.1902
+vn 0.1769 -0.6702 -0.7208
+vn -0.9277 0.3486 -0.1338
+vn -0.8736 0.0332 -0.4855
+vn -0.8553 -0.3456 -0.3860
+vn -0.8781 0.4140 -0.2400
+vn 0.0833 -0.9513 -0.2967
+vn 0.7782 -0.3066 -0.5481
+vn -0.8864 0.3865 -0.2548
+vn 0.9120 0.3620 -0.1927
+vn -0.9203 -0.3913 -0.0012
+vn 0.8072 -0.2036 -0.5541
+vn 0.9675 0.1588 -0.1968
+vn -0.4261 -0.7373 -0.5243
+vn -0.8432 -0.0474 -0.5356
+vn -0.0794 0.9880 -0.1323
+vn -0.3967 -0.7951 -0.4587
+vn 0.1349 -0.7987 -0.5864
+vn 0.8732 -0.1407 -0.4665
+vn -0.9165 -0.2272 -0.3293
+vn -0.6248 0.2907 -0.7246
+vn 0.7665 -0.1227 -0.6304
+vn 0.6232 -0.7582 -0.1917
+vn 0.1099 -0.2329 -0.9663
+vn 0.1704 0.6003 -0.7814
+vn 0.1677 0.9624 -0.2137
+vn -0.4726 0.4839 -0.7365
+vn 0.9220 0.1375 -0.3619
+vn 0.7123 -0.6729 -0.1997
+vn -0.1319 0.7207 -0.6806
+vn 0.7929 -0.1379 -0.5936
+vn 0.8709 0.1217 -0.4761
+vn 0.6846 -0.6339 -0.3598
+vn -0.3917 -0.9062 -0.1594
+vn 0.8050 -0.5106 -0.3019
+vn 0.4610 0.7836 -0.4165
+vn 0.2240 0.9465 -0.2321
+vn -0.2595 0.9073 -0.3310
+vn -0.9749 -0.1373 -0.1754
+vn 0.8028 -0.4569 -0.3830
+vn -0.2116 -0.9718 -0.1043
+vn -0.9056 -0.4080 -0.1159
+vn 0.5391 -0.8325 -0.1280
+vn 0.8490 0.0658 -0.5242
+vn -0.9958 0.0902 0.0151
+vn -0.0837 -0.8008 -0.5931
+vn -0.9052 0.2324 -0.3558
+vn 0.4117 -0.8500 -0.3285
+vn -0.7739 -0.6302 -0.0623
+vn 0.8713 -0.1833 -0.4553
+vn 0.6103 0.6777 -0.4102
+vn 0.8054 -0.4330 -0.4047
+vn 0.5735 -0.7617 -0.3014
+vn -0.9739 0.2259 -0.0222
+vn -0.4124 -0.8643 -0.2880
+vn 0.3077 -0.9363 -0.1692
+vn 0.0570 0.6479 -0.7596
+vn 0.8561 0.3797 -0.3507
+vn 0.9300 0.0059 -0.3674
+vn 0.1164 -0.9915 -0.0577
+vn -0.2504 0.7847 -0.5671
+vn 0.1670 0.4173 -0.8933
+vn -0.2570 0.9488 -0.1836
+vn 0.7978 0.4857 -0.3571
+vn -0.8011 0.5712 -0.1788
+vn -0.9191 -0.3042 -0.2503
+vn -0.6111 0.7234 -0.3214
+vn -0.7738 -0.5250 -0.3544
+vn -0.6267 -0.7750 -0.0812
+vn -0.3711 0.8810 -0.2935
+vn 0.1769 -0.9650 -0.1937
+vn 0.0445 0.9964 -0.0717
+vn 0.8311 -0.3554 -0.4277
+vn -0.7007 0.2054 -0.6833
+vn -0.0533 0.8924 -0.4480
+vn 0.8166 0.3315 -0.4725
+vn 0.0358 0.8924 -0.4499
+vn -0.2773 0.9351 -0.2207
+vn -0.4216 -0.6737 -0.6069
+vn -0.9582 -0.2722 -0.0885
+vn -0.0186 -0.9425 -0.3336
+vn 0.0999 -0.9290 -0.3564
+vn 0.5107 -0.5695 -0.6441
+vn 0.8266 -0.3061 -0.4723
+vn 0.9646 -0.1522 -0.2154
+vn 0.1777 -0.9837 -0.0285
+vn -0.8670 0.4195 -0.2688
+vn 0.4947 0.7958 -0.3492
+vn 0.9412 -0.1078 -0.3201
+vn -0.8251 -0.1542 -0.5436
+vn -0.5472 0.6842 -0.4822
+vn 0.8502 -0.1216 -0.5123
+vn -0.8455 0.4415 -0.3003
+vn 0.8303 0.4946 -0.2568
+vn -0.8135 -0.5254 -0.2493
+vn -0.5602 -0.8045 -0.1972
+vn -0.2995 -0.8917 -0.3395
+vn 0.5380 0.5019 -0.6772
+vn -0.3971 -0.8172 -0.4176
+vn 0.0237 -0.9911 0.1313
+vn -0.4914 -0.0000 -0.8709
+vn 0.4997 -0.7025 -0.5068
+vn 0.3851 0.8102 -0.4419
+vn -0.0228 0.7791 -0.6265
+vn -0.2056 0.4945 -0.8445
+vn -0.6421 0.0415 -0.7655
+vn -0.0634 -0.9546 -0.2912
+vn 0.8754 -0.3310 -0.3523
+vn 0.1689 0.2847 -0.9436
+vn 0.7314 -0.1616 -0.6625
+vn -0.7001 -0.7027 -0.1271
+vn 0.4840 -0.7033 -0.5207
+vn 0.0596 0.9458 -0.3192
+vn -0.6061 0.1455 -0.7820
+vn -0.4830 -0.4421 -0.7558
+vn -0.7542 0.4514 -0.4769
+vn -0.1415 -0.6447 -0.7512
+vn 0.1589 0.8974 -0.4117
+vn 0.8830 0.0961 -0.4594
+vn -0.0694 0.7878 -0.6120
+vn -0.5640 -0.7744 -0.2868
+vn 0.1032 -0.9266 -0.3617
+vn -0.8724 -0.1868 -0.4518
+vn 0.7057 -0.3454 -0.6186
+vn 0.4243 -0.8397 -0.3389
+vn -0.9250 -0.2131 -0.3145
+vn -0.4426 0.7242 -0.5288
+vn 0.0207 0.8800 -0.4746
+vn -0.3494 0.6693 -0.6557
+vn -0.5546 -0.7117 -0.4312
+vn 0.7593 -0.3971 -0.5155
+vn -0.9403 -0.2784 -0.1960
+vn -0.8252 0.5212 -0.2178
+vn 0.7830 0.4870 -0.3871
+vn -0.9581 -0.2586 -0.1231
+vn 0.8658 -0.4568 -0.2044
+vn 0.7382 0.2780 -0.6146
+vn -0.6206 -0.7196 -0.3116
+vn 0.4442 -0.8581 -0.2574
+vn -0.8415 0.2688 -0.4687
+vn -0.9242 0.0542 -0.3779
+vn -0.8303 -0.5418 -0.1308
+vn 0.7440 -0.5523 -0.3761
+vn 0.6867 -0.2965 -0.6637
+vn 0.1475 0.9590 -0.2419
+vn -0.0569 0.9835 -0.1720
+vn 0.9036 -0.3534 -0.2421
+vn -0.6864 -0.3928 -0.6121
+vn 0.2417 0.7107 -0.6607
+vn 0.6857 -0.7275 -0.0227
+vn -0.7038 -0.7097 -0.0329
+vn 0.0049 -0.4821 0.8761
+vn 0.7095 0.7038 0.0356
+vn 0.8228 -0.4603 0.3334
+vn 0.7001 0.7040 0.1195
+vn -0.9607 0.1225 0.2491
+vn 0.3656 0.7785 0.5102
+vn 0.9814 0.1129 0.1553
+vn 0.2659 -0.8843 0.3838
+vn 0.8050 -0.5785 -0.1317
+vn -0.0758 0.1764 0.9814
+vn -0.0560 -0.5481 0.8345
+vn -0.4538 -0.7164 0.5300
+vn 0.5517 0.5547 0.6228
+vn 0.6578 -0.6033 0.4510
+vn -0.9902 0.0969 0.1004
+vn -0.9079 -0.1680 0.3842
+vn -0.5268 0.7478 0.4041
+vn -0.5560 0.0054 0.8312
+vn 0.0205 -0.6684 0.7435
+vn 0.8080 0.5263 0.2649
+vn 0.7677 -0.5711 0.2905
+vn 0.0925 0.1575 0.9832
+vn -0.5091 -0.8518 0.1237
+vn -0.3495 -0.9271 0.1357
+vn 0.6589 -0.6705 0.3410
+vn -0.0097 0.8613 0.5081
+vn -0.4787 -0.8769 -0.0435
+vn 0.4218 -0.0930 0.9019
+vn -0.0685 0.7380 0.6713
+vn -0.9614 0.2664 0.0688
+vn -0.5609 -0.8198 0.1152
+vn -0.6314 0.0342 0.7747
+vn -0.6290 0.0400 0.7764
+vn -0.6263 0.0347 0.7788
+vn -0.6178 0.0428 0.7852
+vn -0.6226 0.0406 0.7815
+vn -0.6186 0.0448 0.7844
+vn -0.6148 0.7806 0.1124
+vn 0.6973 0.4953 0.5182
+vn -0.7435 -0.2540 0.6186
+vn -0.4271 0.8194 0.3822
+vn -0.6018 0.1814 0.7778
+vn 0.2867 0.9565 -0.0548
+vn 0.6728 0.7366 0.0694
+vn -0.0549 0.3258 0.9438
+vn -0.0216 0.9998 0.0002
+vn -0.2856 0.8846 0.3687
+vn -0.7774 0.5366 0.3283
+vn -0.3436 0.8946 0.2857
+vn 0.1240 0.1823 0.9754
+vn -0.9674 0.2249 -0.1165
+vn -0.7612 -0.6484 -0.0126
+vn -0.8885 0.2294 0.3975
+vn -0.4400 0.6388 0.6312
+vn -0.4356 0.6391 0.6339
+vn -0.4375 0.6397 0.6320
+vn -0.8158 -0.2830 0.5044
+vn -0.4349 0.6408 0.6327
+vn -0.4328 0.6402 0.6346
+vn -0.4308 0.6409 0.6354
+vn -0.1735 -0.3120 0.9341
+vn 0.9919 -0.0134 -0.1263
+vn -0.0130 -0.9167 0.3993
+vn 0.3314 -0.9084 0.2550
+vn 0.3161 0.5455 0.7762
+vn -0.1144 -0.3399 0.9335
+vn -0.9761 -0.1838 -0.1156
+vn -0.4669 -0.8550 0.2257
+vn 0.8525 -0.5002 -0.1517
+vn -0.8325 0.3127 0.4574
+vn 0.7618 0.3813 0.5238
+vn 0.8829 -0.1975 0.4261
+vn 0.3945 -0.5573 0.7306
+vn 0.2170 -0.7525 0.6219
+vn -0.5293 0.0604 0.8463
+vn 0.1739 0.2663 0.9481
+vn 0.9652 -0.2576 0.0461
+vn -0.7533 -0.6391 0.1549
+vn 0.8768 -0.4706 0.0985
+vn -0.7484 -0.0881 0.6574
+vn 0.2109 -0.6859 0.6965
+vn -0.0494 -0.1833 0.9818
+vn -0.0280 0.9996 -0.0043
+vn 0.1797 -0.9762 -0.1210
+vn 0.7762 -0.3032 0.5528
+vn 0.4012 0.9158 0.0166
+vn -0.9457 -0.0234 0.3243
+vn 0.4970 0.8509 0.1702
+vn 0.9671 0.0452 0.2504
+vn -0.6185 0.2343 0.7501
+vn 0.7524 -0.1875 0.6315
+vn 0.1834 0.3421 0.9216
+vn -0.0590 -0.6756 0.7349
+vn 0.7202 0.6859 0.1043
+vn -0.9167 -0.3799 0.1240
+vn 0.7490 -0.6626 0.0004
+vn -0.8658 -0.2067 0.4556
+vn -0.7473 -0.6246 0.2267
+vn -0.7545 -0.6359 0.1624
+vn -0.2847 -0.9307 0.2297
+vn -0.4085 0.7267 0.5523
+vn -0.5917 0.0644 0.8036
+vn 0.0973 -0.7361 0.6699
+vn -0.3580 -0.0805 0.9303
+vn 0.4890 0.0988 0.8667
+vn 0.8145 0.5722 -0.0956
+vn 0.8055 -0.5455 0.2315
+vn 0.7685 -0.6339 -0.0869
+vn 0.8969 0.0983 0.4312
+vn 0.5442 0.0518 0.8374
+vn 0.4924 -0.5696 0.6581
+vn -0.4656 -0.8445 0.2646
+vn -0.1040 0.9908 -0.0867
+vn 0.9421 0.2814 -0.1823
+vn 0.5268 -0.7730 0.3535
+vn -0.6051 0.5602 0.5658
+vn 0.4125 0.6120 0.6748
+vn 0.4765 0.8790 0.0184
+vn 0.9498 0.2176 0.2250
+vn -0.2072 -0.1594 0.9652
+vn 0.9743 -0.2229 -0.0335
+vn 0.7325 -0.6802 0.0264
+vn 0.0289 0.6628 0.7482
+vn -0.8252 -0.4543 0.3356
+vn 0.4066 0.5372 0.7390
+vn 0.2060 -0.1070 0.9727
+vn -0.4140 0.8970 0.1547
+vn 0.6402 0.7350 -0.2234
+vn -0.1411 0.9535 0.2663
+vn 0.1508 0.6864 0.7114
+vn 0.7007 0.3527 0.6202
+vn 0.0265 0.8390 0.5434
+vn -0.5146 0.8557 0.0543
+vn -0.8626 0.3411 0.3736
+vn -0.8185 0.3120 0.4824
+vn 0.2172 0.9691 0.1168
+vn 0.8481 0.5031 0.1660
+vn 0.1079 0.2246 0.9685
+vn 0.6312 0.0687 0.7726
+vn -0.1025 0.9918 -0.0765
+vn -0.9257 0.3404 0.1648
+vn -0.7827 0.2343 0.5766
+vn -0.5788 -0.3175 0.7511
+vn -0.7780 0.2238 0.5871
+vn 0.0086 -0.3125 0.9499
+vn 0.3120 0.5887 0.7457
+vn -0.5958 0.4411 0.6712
+vn 0.8551 0.5139 -0.0684
+vn -0.6392 0.5860 0.4980
+vn 0.6780 -0.7252 0.1200
+vn 0.7261 -0.6287 0.2784
+vn 0.9023 -0.0207 0.4306
+vn 0.7511 0.4441 0.4885
+vn -0.8101 0.0432 0.5847
+vn -0.1279 -0.1396 0.9819
+vn 0.1168 -0.9674 -0.2248
+vn 0.1378 -0.5550 0.8204
+vn -0.0088 0.9877 -0.1564
+vn 0.8158 -0.1548 0.5572
+vn -0.6152 -0.5585 0.5564
+vn -0.2936 -0.7898 0.5386
+vn 0.0917 -0.7873 0.6097
+vn 0.4407 -0.0972 0.8924
+vn -0.8014 0.5433 0.2500
+vn -0.9585 0.0890 0.2710
+vn 0.1834 -0.6855 0.7046
+vn 0.1933 -0.6802 0.7071
+vn 0.1875 -0.6818 0.7071
+vn 0.8928 -0.4144 0.1767
+vn -0.4301 0.8819 -0.1933
+vn -0.5675 0.7634 0.3085
+vn -0.4576 -0.8344 0.3073
+vn -0.1020 -0.4043 0.9089
+vn 0.7490 0.6542 0.1047
+vn 0.9994 0.0046 -0.0331
+vn -0.6559 0.7245 0.2117
+vn -0.9597 0.1794 0.2162
+vn 0.0314 0.5721 0.8196
+vn -0.2632 -0.4265 0.8653
+vn 0.0784 0.9846 -0.1563
+vn 0.7275 -0.3415 0.5950
+vn -0.1378 -0.0766 0.9875
+vn 0.6396 0.7317 -0.2356
+vn 0.0198 -0.0064 0.9998
+vn -0.9881 -0.0206 0.1525
+vn -0.6163 0.7828 0.0857
+vn 0.4046 0.5407 0.7375
+vn 0.2950 -0.4808 0.8257
+vn 0.2876 -0.9576 -0.0157
+vn -0.8931 -0.2489 0.3747
+vn -0.6037 -0.7551 0.2555
+vn 0.8463 -0.4951 0.1967
+vn 0.4090 -0.7063 0.5778
+vn 0.6870 0.3434 0.6405
+vn -0.7948 -0.0550 0.6043
+vn -0.0706 0.2085 0.9755
+vn -0.6522 -0.7487 0.1187
+vn 0.0570 -0.8099 0.5837
+vn -0.1325 0.9805 0.1451
+vn -0.7969 0.5807 0.1663
+vn -0.8573 -0.0169 0.5146
+vn -0.4682 -0.0924 0.8788
+vn 0.7728 -0.1651 0.6128
+vn -0.3885 0.9108 0.1397
+vn -0.9614 -0.2003 0.1889
+vn -0.8431 0.1753 0.5083
+vn -0.1287 -0.4348 0.8913
+vn 0.7984 0.6005 0.0454
+vn 0.9221 0.2754 0.2718
+vn 0.8852 -0.4503 0.1168
+vn 0.7135 -0.6148 0.3360
+vn 0.1444 0.4945 0.8571
+vn 0.4644 0.0967 0.8803
+vn 0.0112 -0.8001 0.5998
+vn 0.3246 0.8927 -0.3126
+vn -0.0949 -0.9789 -0.1808
+vn -0.0780 -0.5185 0.8515
+vn 0.8902 0.3955 0.2259
+vn 0.7843 -0.1829 0.5928
+vn -0.0763 0.7262 0.6832
+vn -0.7061 -0.6143 0.3522
+vn -0.2894 -0.9503 0.1149
+vn -0.6680 -0.6583 0.3469
+vn 0.2783 -0.1275 0.9520
+vn 0.2248 -0.7460 0.6268
+vn 0.7303 -0.6459 -0.2224
+vn 0.4728 0.0558 0.8794
+vn -0.5511 -0.8151 0.1787
+vn -0.2807 -0.7710 0.5716
+vn -0.2961 -0.4898 0.8200
+vn 0.7949 -0.2870 0.5345
+vn -0.2286 0.9355 -0.2694
+vn -0.6506 0.7539 -0.0915
+vn -0.8492 -0.5034 0.1599
+vn -0.2882 0.6086 0.7393
+vn 0.7896 -0.5297 0.3096
+vn -0.2900 0.6197 0.7293
+vn -0.4870 0.1722 0.8562
+vn 0.3499 0.3890 0.8522
+vn 0.7740 -0.1801 0.6071
+vn -0.2288 -0.3833 0.8949
+vn 0.7991 -0.5926 -0.1007
+vn 0.9838 0.1120 -0.1399
+vn 0.8602 0.4235 0.2840
+vn 0.1911 0.1930 0.9624
+vn 0.6605 0.1193 0.7413
+vn -0.3185 0.8943 0.3143
+vn -0.8450 0.4342 0.3120
+vn 0.1149 0.5308 0.8397
+vn 0.5357 0.5754 0.6180
+vn -0.4424 0.3048 0.8434
+vn 0.0460 -0.4647 0.8843
+vn -0.2094 0.9703 0.1208
+vn -0.6828 -0.7297 -0.0354
+vn -0.2274 0.8513 0.4729
+vn -0.9360 -0.0621 0.3465
+vn -0.5548 0.1477 0.8188
+vn -0.0055 -0.1831 0.9831
+vn -0.8396 -0.5402 0.0567
+vn 0.8960 0.4422 -0.0412
+vn 0.2706 0.8938 0.3577
+vn 0.8956 -0.0007 0.4448
+vn 0.3526 -0.8036 0.4795
+vn -0.8054 -0.1640 0.5695
+vn 0.5286 0.2725 0.8039
+vn -0.0251 -0.8515 0.5238
+vn 0.7632 -0.4356 0.4772
+vn 0.0059 -0.7222 0.6916
+vn -0.9293 -0.3672 -0.0384
+vn 0.2722 -0.8356 0.4771
+vn -0.4799 -0.5693 0.6675
+vn -0.3472 -0.0402 0.9369
+vn 0.0437 0.2605 0.9645
+vn -0.3657 -0.2480 0.8971
+vn 0.2403 -0.9705 -0.0201
+vn 0.2429 -0.9357 0.2559
+vn 0.5426 -0.7403 0.3970
+vn -0.0557 -0.8647 0.4992
+vn -0.2845 0.9311 0.2280
+vn -0.0427 -0.9885 0.1454
+vn -0.8313 0.3825 0.4034
+vn -0.6201 0.5900 0.5171
+vn -0.7473 -0.4721 0.4677
+vn -0.2402 -0.4263 0.8721
+vn 0.9571 -0.2883 -0.0289
+vn 0.2460 -0.9677 0.0547
+vn 0.6792 -0.7339 0.0106
+vn 0.0788 0.9663 0.2451
+vn 0.5749 0.4016 0.7129
+vn 0.7276 -0.0039 0.6860
+vn -0.0906 -0.5605 0.8232
+vn 0.2310 0.4944 0.8380
+vn 0.4710 -0.2320 0.8511
+vn 0.2527 -0.5784 0.7756
+vn 0.9999 -0.0030 -0.0142
+vn 0.3450 -0.9357 0.0738
+vn 0.1274 0.7628 0.6339
+vn 0.8995 -0.4087 -0.1544
+vn -0.1537 -0.9828 0.1026
+vn -0.7660 -0.5097 0.3917
+vn 0.1625 -0.9676 0.1932
+vn 0.1128 0.9074 0.4048
+vn -0.5339 0.1573 0.8308
+vn -0.1997 0.9634 0.1787
+vn 0.6282 0.7329 0.2610
+vn -0.5473 -0.8132 0.1980
+vn 0.0404 -0.8742 0.4840
+vn 0.7885 -0.6096 -0.0813
+vn 0.7699 -0.2376 0.5923
+vn -0.4492 0.4115 0.7930
+vn 0.6061 0.7660 -0.2142
+vn 0.9496 0.3042 -0.0756
+vn 0.8781 0.2568 0.4037
+vn 0.0309 0.8818 0.4707
+vn 0.2698 0.8538 0.4453
+vn -0.7788 -0.6146 0.1255
+vn -0.8018 -0.3707 0.4688
+vn -0.2349 0.3436 0.9093
+vn -0.5937 -0.3141 0.7409
+vn 0.8959 -0.3704 0.2454
+vn 0.7180 -0.6838 0.1302
+vn -0.2269 -0.9598 0.1651
+vn 0.8565 -0.0957 0.5071
+vn 0.3907 -0.1082 0.9141
+vn -0.4919 -0.8693 -0.0481
+vn -0.0149 0.9991 0.0400
+vn 0.5262 0.8460 -0.0861
+vn -0.6853 -0.6370 0.3531
+vn -0.5375 -0.5246 0.6602
+vn 0.1336 -0.9879 -0.0784
+vn 0.5986 -0.6460 0.4737
+vn 0.2379 -0.4152 0.8781
+vn 0.5885 -0.5995 0.5425
+vn 0.1391 -0.0141 0.9902
+vn 0.9624 -0.2376 0.1313
+vn 0.7721 -0.6219 0.1304
+vn 0.1822 -0.5544 0.8121
+vn 0.2998 0.1892 0.9351
+vn 0.1588 -0.1163 0.9804
+vn -0.4722 0.8696 0.1440
+vn 0.4646 0.8149 0.3464
+vn -0.9410 -0.1067 0.3213
+vn 0.4426 0.6663 0.6002
+vn 0.3932 -0.2079 0.8957
+vn 0.8240 0.4932 0.2788
+vn 0.5460 0.8225 0.1596
+vn -0.4916 0.8155 0.3053
+vn 0.0561 -0.7855 0.6163
+vn 0.7700 -0.4599 0.4424
+vn -0.4280 0.0795 0.9003
+vn -0.3872 0.9220 0.0028
+vn 0.2526 0.9636 0.0876
+vn -0.6133 0.6806 0.4007
+vn -0.7299 -0.0512 0.6816
+vn 0.4799 0.5559 0.6787
+vn 0.0907 0.3370 0.9371
+vn -0.8753 0.4807 -0.0528
+vn -0.9123 -0.1372 0.3859
+vn 0.8509 -0.4989 0.1643
+vn 0.8209 0.1252 0.5572
+vn -0.0650 -0.8485 0.5252
+vn -0.5222 0.3219 0.7898
+vn 0.5354 0.1657 0.8282
+vn -0.1819 -0.5620 0.8069
+vn 0.3593 -0.5083 0.7826
+vn -0.5297 0.8402 0.1161
+vn 0.9948 -0.0776 0.0666
+vn -0.3272 -0.8572 0.3976
+vn -0.1747 -0.4583 0.8715
+vn 0.9414 0.0446 0.3343
+vn -0.4155 0.8957 0.1581
+vn 0.3185 0.9278 0.1945
+vn -0.7691 0.6001 0.2199
+vn 0.7923 0.4263 0.4366
+vn -0.5095 -0.3713 0.7762
+vn 0.8502 -0.4593 -0.2574
+vn -0.7621 0.1973 0.6167
+vn -0.1529 -0.3749 0.9144
+vn -0.8609 0.4687 0.1978
+vn 0.0687 -0.7572 0.6496
+vn 0.2841 0.3119 0.9066
+vn 0.0933 -0.4431 0.8916
+vn 0.9298 0.1136 -0.3502
+vn 0.0750 0.9929 0.0926
+vn -0.6023 -0.4349 0.6695
+vn 0.7441 -0.6373 -0.2007
+vn 0.4831 0.7491 0.4532
+vn 0.2202 -0.1505 0.9638
+vn -0.4726 0.1022 0.8753
+vn -0.2258 0.9663 0.1233
+vn -0.2519 0.7640 0.5939
+vn -0.6925 0.0275 0.7209
+vn 0.5175 -0.7852 0.3402
+vn 0.0009 -0.7353 0.6777
+vn 0.3106 0.9374 -0.1573
+vn 0.8066 0.5062 0.3053
+vn 0.1030 0.9550 -0.2782
+vn 0.0309 0.3772 0.9256
+vn -0.4235 0.7727 0.4728
+vn 0.9193 0.3283 -0.2171
+vn 0.5875 -0.1238 0.7997
+vn 0.6410 0.7666 0.0379
+vn -0.8154 0.5602 -0.1461
+vn -0.9769 0.0882 0.1946
+vn -0.7066 -0.6283 0.3256
+vn -0.5391 0.2190 0.8133
+vn 0.2487 -0.2767 0.9282
+vn 0.6320 0.7722 -0.0650
+vn 0.9908 0.0851 0.1053
+vn -0.2162 -0.0017 0.9763
+vn -0.2289 0.9729 -0.0335
+vn 0.1399 -0.9786 0.1511
+vn 0.4082 0.8739 -0.2640
+vn -0.9669 0.2438 0.0748
+vn -0.0987 -0.9734 0.2065
+vn 0.4050 0.2294 0.8851
+vn -0.1057 -0.9926 0.0603
+vn -0.8516 0.1217 0.5099
+vn -0.8018 -0.5300 0.2760
+vn 0.2850 0.9416 -0.1792
+vn 0.6601 -0.7252 -0.1959
+vn -0.1203 0.9663 0.2274
+vn 0.2804 0.9322 0.2290
+vn -0.9907 -0.1360 -0.0094
+vn 0.4282 -0.8859 -0.1785
+vn -0.7688 -0.4905 0.4103
+vn 0.3564 -0.9341 0.0215
+vn 0.5226 0.5649 0.6386
+vn 0.8852 0.1914 0.4240
+vn -0.0640 -0.9574 0.2814
+vn -0.3132 -0.1062 0.9437
+vn 0.1605 -0.5235 0.8368
+vn 0.4317 0.8964 -0.1000
+vn -0.6056 0.7340 0.3074
+vn -0.8727 0.4833 0.0687
+vn -0.8700 -0.4898 0.0562
+vn -0.5122 -0.8452 0.1528
+vn 0.1844 0.9099 0.3717
+vn -0.9276 -0.1480 0.3430
+vn 0.5265 -0.8213 0.2196
+vn 0.2905 0.6500 0.7022
+vn -0.5045 0.4329 0.7471
+vn -0.2691 -0.5614 0.7825
+vn 0.7931 0.5643 -0.2293
+vn 0.9186 0.1033 0.3816
+vn -0.5551 0.8096 0.1907
+vn -0.8469 0.3939 0.3571
+vn 0.5688 0.8084 0.1517
+vn -0.9324 -0.3374 -0.1297
+vn 0.9915 -0.1067 0.0751
+vn 0.0360 -0.9801 0.1954
+vn -0.0966 -0.4644 0.8803
+vn 0.8186 -0.1244 0.5607
+vn 0.1887 0.2884 0.9387
+vn -0.1714 -0.5840 0.7934
+vn 0.9568 -0.2460 -0.1549
+vn 0.9881 0.1206 -0.0956
+vn -0.5303 0.7622 0.3712
+vn -0.7343 -0.0737 0.6748
+vn -0.1466 -0.9712 0.1878
+vn -0.7394 -0.0364 0.6722
+vn 0.1244 -0.7903 0.6000
+vn -0.5369 -0.1216 0.8348
+vn 0.9781 -0.1548 -0.1394
+vn 0.8213 -0.1391 0.5533
+vn 0.1888 -0.7770 0.6005
+vn -0.2102 -0.9690 0.1297
+vn -0.0862 -0.9628 0.2561
+vn 0.3979 -0.8706 0.2894
+vn -0.4830 -0.2737 0.8317
+vn 0.8943 -0.2867 -0.3435
+vn 0.4372 -0.0177 0.8992
+vn 0.1179 -0.8786 0.4629
+vn -0.3562 0.9044 -0.2350
+vn 0.5365 0.8340 0.1289
+vn -0.9426 0.3339 0.0082
+vn -0.7200 -0.6460 0.2537
+vn 0.7480 -0.6434 0.1631
+vn -0.7434 -0.2104 0.6350
+vn 0.2263 -0.8327 0.5054
+vn -0.3977 0.5720 0.7174
+vn 0.2690 -0.0167 0.9630
+vn 0.8698 0.4723 0.1426
+vn 0.8467 0.0170 0.5318
+vn 0.7129 -0.7013 -0.0024
+vn 0.3136 0.9481 -0.0523
+vn 0.6535 0.7332 -0.1880
+vn 0.1676 -0.7332 0.6591
+vn -0.4505 0.8414 0.2985
+vn -0.5899 -0.7858 0.1861
+vn -0.0016 0.5278 0.8494
+vn -0.0508 -0.2746 0.9602
+vn 0.2246 -0.3450 0.9113
+vn 0.4005 -0.5388 0.7412
+vn -0.5583 0.7453 0.3644
+vn 0.7599 0.6421 -0.1018
+vn 0.1947 -0.7041 0.6828
+vn -0.5017 -0.8611 -0.0821
+vn -1.0000 0.0018 -0.0006
+vn 0.5085 0.8608 -0.0230
+vn 0.9844 -0.0051 -0.1758
+vn 0.9887 -0.0034 -0.1500
+vn 0.5104 -0.8585 0.0487
+vn 0.0663 -0.0360 0.9971
+vn -0.0195 -0.0008 0.9998
+vn 0.0807 0.0192 0.9966
+vn -0.0062 -0.0106 0.9999
+vn -0.0448 0.0464 -0.9979
+vn 0.0042 -0.0246 -0.9997
+vn -0.0216 0.0500 -0.9985
+vn 0.1999 0.0034 -0.9798
+vn -0.0126 0.0893 -0.9959
+vn -0.0440 0.0078 -0.9990
+vn -0.0337 0.0019 -0.9994
+vn 0.0577 0.0425 -0.9974
+vn 0.0972 0.0357 -0.9946
+vn -0.0532 -0.0769 -0.9956
+vn -0.0310 0.0001 -0.9995
+vn -0.1207 -0.1750 -0.9771
+vn -0.0025 -0.0880 -0.9961
+vn -0.0371 -0.0864 -0.9956
+vn 0.1055 0.0873 -0.9906
+vn -0.0076 -0.1185 -0.9929
+vn 0.0033 0.1023 -0.9948
+vn 0.0021 0.1026 -0.9947
+vn 0.0012 0.1029 -0.9947
+vn -0.1225 0.0422 -0.9916
+vn 0.0274 0.1802 -0.9832
+vn 0.0222 -0.0377 -0.9990
+vn -0.0075 0.1466 -0.9892
+vn 0.0979 -0.0605 -0.9934
+vn -0.1245 -0.0910 -0.9880
+vn -0.0428 0.1029 -0.9938
+vn -0.1409 0.1645 -0.9763
+vn 0.0966 0.2414 -0.9656
+vn -0.0475 -0.0052 -0.9989
+vn 0.0167 -0.0110 -0.9998
+vn 0.0001 -0.1018 -0.9948
+vn -0.0232 0.0953 -0.9952
+vn -0.1248 0.0721 -0.9896
+vn -0.0424 0.1086 -0.9932
+vn 0.0595 -0.1287 -0.9899
+vn 0.0222 0.0297 -0.9993
+vn 0.0595 -0.0545 -0.9967
+vn -0.0657 -0.0277 -0.9975
+vn 0.1344 -0.0917 -0.9867
+vn 0.0924 0.0714 -0.9932
+vn -0.0235 -0.0109 -0.9997
+vn 0.2179 -0.1172 -0.9689
+vn 0.1632 -0.2598 -0.9518
+vn -0.0039 0.0624 -0.9980
+vn -0.0037 0.0624 -0.9980
+vn -0.0036 0.0624 -0.9980
+vn 0.0413 -0.0517 -0.9978
+vn 0.0413 -0.0325 -0.9986
+vn 0.0516 -0.0146 -0.9986
+vn -0.0722 0.0071 -0.9974
+vn 0.0629 -0.0104 -0.9980
+vn 0.0579 -0.0927 -0.9940
+vn 0.0387 -0.0391 -0.9985
+vn -0.0755 -0.1147 -0.9905
+vn -0.2261 -0.0653 -0.9719
+vn -0.2254 -0.0679 -0.9719
+vn -0.2270 -0.0616 -0.9719
+vn -0.0663 0.0361 -0.9971
+vn 0.0627 -0.1363 -0.9887
+vn -0.0837 -0.1678 -0.9823
+vn -0.0921 0.1231 -0.9881
+vn -0.0145 -0.0111 -0.9998
+vn 0.0195 0.0008 -0.9998
+vn 0.1560 0.2150 -0.9641
+vn 0.0502 -0.1129 -0.9923
+vn 0.0533 0.1045 -0.9931
+vn -0.0927 0.0188 -0.9955
+vn 0.0229 0.0214 -0.9995
+vn 0.0192 0.0220 -0.9996
+vn 0.0195 0.0219 -0.9996
+vn 0.0558 -0.0561 -0.9969
+vn -0.0807 -0.0192 -0.9966
+vn -0.0130 0.0096 -0.9999
+vn -0.0008 -0.0870 -0.9962
+vn 0.0926 -0.0401 -0.9949
+vn 0.0455 -0.1223 -0.9915
+vn 0.0033 0.2547 -0.9670
+vn -0.0018 0.1747 -0.9846
+vn 0.1266 -0.1832 -0.9749
+vn -0.1105 0.0355 -0.9932
+vn -0.1547 -0.1576 -0.9753
+vn -0.0331 0.0051 -0.9994
+vn -0.1095 0.0430 -0.9931
+vn -0.0735 0.1101 -0.9912
+vn 0.1797 0.0586 -0.9820
+vn -0.0851 -0.0700 -0.9939
+vn -0.0941 -0.0526 -0.9942
+vn 0.2933 0.1941 -0.9361
+vn 0.0039 0.0852 -0.9964
+vn -0.1004 -0.0245 -0.9946
+vn -0.0607 0.0287 -0.9977
+vn -0.0568 -0.0201 -0.9982
+vn -0.0471 0.0206 -0.9987
+vn 0.2285 -0.0991 -0.9685
+vn 0.0705 -0.0983 -0.9927
+vn 0.0419 0.0001 -0.9991
+vn -0.0619 -0.0410 -0.9972
+vn -0.1097 -0.0528 -0.9926
+vn -0.0556 -0.2075 -0.9767
+vn 0.0285 -0.0280 -0.9992
+vn -0.1238 -0.0746 -0.9895
+vn -0.0030 -0.1783 -0.9840
+vn 0.0624 0.0092 -0.9980
+vn -0.0046 0.1049 -0.9945
+vn 0.1826 0.1022 -0.9779
+vn -0.0715 0.2279 -0.9710
+vn 0.0847 0.0963 -0.9917
+vn 0.0181 -0.0362 -0.9992
+vn -0.0793 -0.0213 -0.9966
+vn 0.1997 0.1436 -0.9693
+vn 0.1668 0.0415 -0.9851
+vn -0.1750 -0.0496 -0.9833
+vn -0.0183 0.0591 -0.9981
+vn -0.0190 0.0589 -0.9981
+vn -0.0193 0.0588 -0.9981
+vn -0.0197 0.0586 -0.9981
+vn 0.0029 -0.0291 -0.9996
+vn -0.0008 -0.0288 -0.9996
+vn 0.0037 -0.0291 -0.9996
+vn 0.0054 -0.0293 -0.9996
+vn -0.0308 -0.0118 -0.9995
+vn -0.0303 -0.1618 -0.9864
+vn -0.0235 -0.0312 -0.9992
+vn 0.0896 -0.0350 -0.9954
+vn -0.1047 -0.0669 -0.9923
+vn 0.0686 0.1322 -0.9888
+vn -0.0823 0.0715 -0.9940
+vn 0.0575 -0.2625 -0.9632
+vn 0.2167 -0.1565 -0.9636
+vn -0.1047 0.0574 -0.9928
+vn -0.0345 0.1102 -0.9933
+vn 0.0387 0.0092 -0.9992
+vn 0.0584 -0.0413 -0.9974
+vn 0.0634 -0.1787 -0.9819
+vn -0.0033 0.0624 -0.9980
+vn 0.1755 0.0347 -0.9839
+vn 0.0324 -0.0893 -0.9955
+vn -0.0005 0.0178 -0.9998
+vn -0.1466 0.2300 -0.9621
+vn -0.0824 0.0080 -0.9966
+vn 0.0234 -0.0147 -0.9996
+vn 0.0401 0.0428 -0.9983
+vn 0.0090 0.0499 -0.9987
+vn 0.0407 -0.0583 -0.9975
+vn -0.0031 0.1069 -0.9943
+vn -0.0319 0.1211 -0.9921
+vn -0.2239 -0.0740 -0.9718
+vn 0.0971 0.0008 -0.9953
+vn -0.0554 -0.0104 -0.9984
+vn -0.0587 0.0230 -0.9980
+vn 0.0411 0.0884 -0.9952
+vn -0.1671 -0.0510 -0.9846
+vn 0.0381 -0.1683 -0.9850
+vn 0.1159 -0.1083 -0.9873
+vn -0.1069 0.1229 -0.9867
+vn 0.0933 -0.0155 -0.9955
+vn 0.0838 -0.0592 -0.9947
+vn -0.0351 0.0430 -0.9985
+vn -0.0506 0.1086 -0.9928
+vn -0.0262 -0.0332 -0.9991
+vn 0.0166 0.0224 -0.9996
+vn 0.0062 0.0106 -0.9999
+vn -0.0018 -0.0134 -0.9999
+vn -0.1110 0.2352 -0.9656
+vn -0.0453 0.0357 -0.9983
+vn 0.0413 -0.2052 -0.9778
+vn 0.2346 -0.0361 -0.9714
+vn 0.0246 -0.0789 -0.9966
+vn -0.0197 -0.0139 -0.9997
+vn 0.0706 -0.0252 -0.9972
+vn 0.0406 0.1328 -0.9903
+vn -0.1101 -0.0676 -0.9916
+vn 0.0755 0.0660 -0.9950
+vn 0.0367 0.1083 -0.9934
+s off
+f 591//1269 592//1269 593//1269
+f 594//1270 592//1270 591//1270
+f 595//1271 596//1271 597//1271 598//1271
+f 599//1272 600//1272 601//1272
+f 602//1273 603//1273 604//1273
+f 605//1274 606//1274 607//1274
+f 608//1275 609//1275 610//1275
+f 610//1276 611//1276 608//1276
+f 612//1277 613//1277 614//1277 615//1277
+f 616//1278 617//1278 612//1278 615//1278
+f 618//1279 619//1279 620//1279 621//1279
+f 619//1280 622//1280 623//1280
+f 624//1281 625//1281 626//1281
+f 627//1282 628//1282 629//1282
+f 630//1283 631//1283 632//1283
+f 633//1284 634//1284 635//1284
+f 636//1285 637//1285 638//1285
+f 639//1286 640//1286 641//1286
+f 642//1287 643//1287 644//1287
+f 644//1288 643//1288 645//1288 646//1288
+f 647//1289 648//1289 649//1289 650//1289
+f 651//1290 652//1290 653//1290
+f 654//1291 653//1291 652//1291
+f 655//1292 656//1292 657//1292
+f 658//1293 659//1293 660//1293
+f 661//1294 662//1294 663//1294 664//1294
+f 652//1295 665//1295 654//1295
+f 666//1296 667//1296 668//1296
+f 669//1297 670//1297 671//1297 672//1297
+f 673//1298 674//1298 675//1298 676//1298
+f 677//1299 678//1299 679//1299
+f 680//1300 677//1300 679//1300 681//1300 682//1300
+f 683//1301 684//1301 685//1301 686//1301 687//1301
+f 688//1302 689//1302 690//1302 691//1302
+f 692//1303 693//1303 694//1303
+f 695//1304 696//1304 697//1304
+f 698//1305 699//1305 700//1305
+f 701//1306 702//1306 703//1306 704//1306
+f 705//1307 706//1307 707//1307 708//1307
+f 709//1308 710//1308 711//1308
+f 712//1309 713//1309 714//1309 715//1309
+f 716//1310 717//1310 718//1310
+f 719//1311 720//1311 721//1311 722//1311 723//1311 724//1311
+f 724//1312 725//1312 719//1312
+f 726//1313 727//1313 720//1313
+f 728//1314 729//1314 730//1314 731//1314
+f 732//1315 733//1315 734//1315
+f 731//1316 735//1316 728//1316
+f 732//1317 734//1317 736//1317 737//1317
+f 738//1318 739//1318 740//1318
+f 741//1319 742//1319 743//1319 744//1319
+f 745//1320 746//1320 747//1320
+f 747//1321 746//1321 748//1321 749//1321
+f 750//1322 751//1322 752//1322
+f 753//1323 754//1323 736//1323 755//1323 756//1323
+f 757//1324 758//1324 759//1324 760//1324
+f 761//1325 762//1325 763//1325 764//1325
+f 765//1326 761//1326 764//1326 766//1326
+f 767//1327 768//1327 769//1327 770//1327
+f 771//1328 772//1328 773//1328
+f 774//1329 775//1329 776//1329
+f 777//1330 778//1330 779//1330
+f 780//1331 781//1331 782//1331 783//1331
+f 784//1332 785//1332 786//1332 787//1332
+f 788//1333 789//1333 790//1333
+f 791//1334 792//1334 793//1334
+f 793//1335 788//1335 790//1335 791//1335
+f 794//1336 795//1336 796//1336 797//1336
+f 798//1337 799//1337 800//1337
+f 801//1338 802//1338 803//1338
+f 804//1339 805//1339 806//1339
+f 807//1340 808//1340 809//1340 810//1340
+f 811//1341 808//1341 812//1341 813//1341 814//1341
+f 813//1342 812//1342 815//1342
+f 816//1343 817//1343 818//1343
+f 819//1344 820//1344 821//1344 822//1344
+f 823//1345 824//1345 825//1345
+f 826//1346 827//1346 828//1346
+f 829//1347 830//1347 831//1347 832//1347
+f 833//1348 821//1348 820//1348
+f 834//1349 835//1349 836//1349
+f 837//1350 838//1350 839//1350
+f 840//1351 841//1351 842//1351 843//1351
+f 844//1352 845//1352 846//1352
+f 847//1353 848//1353 849//1353 850//1353
+f 851//1354 852//1354 853//1354
+f 854//1355 855//1355 856//1355 857//1355 858//1355
+f 859//1356 860//1356 861//1356 862//1356
+f 863//1357 864//1357 865//1357 861//1357 860//1357
+f 866//1358 867//1358 868//1358
+f 869//1359 870//1359 871//1359
+f 872//1360 873//1360 874//1360 875//1360
+f 876//1361 877//1361 878//1361
+f 877//1362 876//1362 879//1362 880//1362
+f 881//1363 882//1363 883//1363 884//1363
+f 885//1364 886//1364 887//1364
+f 888//1365 889//1365 890//1365
+f 891//1366 892//1366 893//1366
+f 891//1367 893//1367 894//1367 895//1367 896//1367
+f 897//1368 898//1368 899//1368 900//1368
+f 901//1369 902//1369 903//1369
+f 904//1370 905//1370 906//1370 907//1370
+f 908//1371 909//1371 910//1371
+f 911//1372 912//1372 913//1372 914//1372
+f 915//1373 916//1373 917//1373
+f 918//1374 919//1374 920//1374
+f 921//1375 922//1375 923//1375 924//1375
+f 925//1376 926//1376 927//1376 928//1376
+f 929//1377 930//1377 931//1377 932//1377
+f 933//1378 934//1378 935//1378 936//1378
+f 937//1379 938//1379 939//1379 940//1379
+f 937//1380 940//1380 941//1380
+f 942//1381 943//1381 944//1381
+f 945//1382 946//1382 944//1382 947//1382
+f 948//1383 946//1383 945//1383
+f 599//1384 595//1384 598//1384 600//1384
+f 949//1385 950//1385 951//1385 952//1385
+f 953//1386 954//1386 955//1386
+f 956//1387 957//1387 958//1387 959//1387
+f 960//1388 956//1388 961//1388
+f 962//1389 958//1389 957//1389
+f 963//1390 957//1390 960//1390 964//1390
+f 965//1391 966//1391 606//1391
+f 965//1392 967//1392 605//1392
+f 968//1393 607//1393 966//1393
+f 968//1394 965//1394 605//1394
+f 969//1395 608//1395 805//1395
+f 969//1396 805//1396 970//1396
+f 971//1397 972//1397 973//1397 974//1397
+f 612//1398 617//1398 974//1398
+f 975//1399 976//1399 977//1399
+f 978//1400 979//1400 980//1400
+f 981//1401 977//1401 976//1401 978//1401
+f 619//1402 982//1402 983//1402 622//1402
+f 984//1403 985//1403 986//1403
+f 986//1404 987//1404 988//1404 984//1404
+f 989//1405 990//1405 991//1405 992//1405 993//1405
+f 991//1406 994//1406 992//1406
+f 995//1407 996//1407 997//1407
+f 982//1408 998//1408 999//1408 983//1408
+f 1000//1409 998//1409 982//1409
+f 1000//1410 625//1410 998//1410
+f 1001//1411 982//1411 619//1411
+f 1002//1412 625//1412 1000//1412
+f 1002//1413 1000//1413 1001//1413
+f 1003//1414 1004//1414 1005//1414 1006//1414
+f 1005//1415 1007//1415 629//1415
+f 1008//1416 1009//1416 1010//1416 1011//1416
+f 1012//1417 1013//1417 1014//1417
+f 1015//1418 1016//1418 1017//1418
+f 1014//1419 1013//1419 1017//1419 1016//1419
+f 1018//1420 1019//1420 1014//1420 1016//1420
+f 1020//1421 1021//1421 1022//1421 1023//1421
+f 1021//1422 1024//1422 1025//1422 1022//1422
+f 1026//1423 1027//1423 1028//1423 1029//1423
+f 1028//1424 1021//1424 1030//1424
+f 1031//1425 1032//1425 1033//1425 1034//1425
+f 1034//1426 1035//1426 1031//1426
+f 1031//1427 1036//1427 1032//1427
+f 1037//1428 1038//1428 1039//1428 1040//1428
+f 1037//1429 1040//1429 1041//1429 1042//1429
+f 1043//1430 1037//1430 1042//1430
+f 1044//1431 1038//1431 1045//1431
+f 1046//1432 632//1432 631//1432 1047//1432
+f 1048//1433 1049//1433 632//1433
+f 1046//1434 1048//1434 632//1434
+f 1049//1435 1050//1435 1051//1435 1052//1435
+f 1053//1436 1054//1436 1046//1436 1047//1436
+f 1055//1437 1050//1437 1056//1437 1057//1437 1058//1437
+f 1048//1438 1059//1438 1049//1438
+f 1060//1439 634//1439 1056//1439
+f 1061//1440 1048//1440 1046//1440
+f 1060//1441 1061//1441 634//1441
+f 1054//1442 1062//1442 1061//1442 1046//1442
+f 1060//1443 1056//1443 1059//1443
+f 1061//1444 1059//1444 1048//1444
+f 1060//1445 1059//1445 1061//1445
+f 1063//1446 1064//1446 1065//1446
+f 1066//1447 1065//1447 1067//1447
+f 1068//1448 1069//1448 1070//1448 638//1448
+f 638//1449 640//1449 639//1449 636//1449
+f 638//1450 1071//1450 640//1450
+f 1072//1451 1071//1451 1070//1451 1069//1451
+f 642//1452 1073//1452 1074//1452 643//1452
+f 1075//1453 1076//1453 1077//1453
+f 1078//1454 645//1454 1075//1454 1077//1454
+f 656//1455 1079//1455 657//1455
+f 1080//1456 1081//1456 1082//1456 1083//1456
+f 1084//1457 1081//1457 1080//1457
+f 1085//1458 1086//1458 1087//1458 1088//1458
+f 1089//1459 1090//1459 1091//1459 1092//1459 1093//1459
+f 1091//1460 1094//1460 1095//1460
+f 1096//1461 1097//1461 1091//1461 1090//1461
+f 652//1462 1086//1462 1098//1462
+f 1099//1463 1100//1463 652//1463
+f 1101//1464 1098//1464 1102//1464
+f 1099//1465 1098//1465 1101//1465
+f 1103//1466 1104//1466 659//1466 1105//1466
+f 1097//1467 1106//1467 1107//1467 1094//1467
+f 1097//1468 1108//1468 657//1468
+f 1109//1469 1110//1469 1111//1469 1104//1469
+f 1112//1470 659//1470 1104//1470 1111//1470
+f 1109//1471 1108//1471 1097//1471
+f 1104//1472 662//1472 1108//1472
+f 1113//1473 1114//1473 1115//1473 1116//1473
+f 1114//1474 1084//1474 1115//1474
+f 1117//1475 1118//1475 667//1475 666//1475 1119//1475
+f 1120//1476 1121//1476 667//1476 1114//1476 1113//1476
+f 667//1477 1118//1477 1122//1477
+f 1114//1478 1122//1478 1084//1478
+f 1123//1479 1124//1479 1125//1479 1126//1479 1127//1479
+f 1128//1480 1129//1480 1130//1480 1131//1480
+f 1132//1481 1128//1481 1131//1481 1133//1481
+f 1134//1482 1125//1482 1128//1482 1132//1482
+f 1129//1483 1128//1483 1124//1483
+f 1124//1484 1128//1484 1125//1484
+f 1135//1485 1102//1485 1136//1485 1137//1485
+f 1138//1486 1139//1486 671//1486 1140//1486 1141//1486
+f 1142//1487 1100//1487 671//1487 670//1487
+f 1143//1488 1144//1488 1145//1488 1146//1488
+f 1147//1489 1143//1489 1146//1489
+f 1147//1490 675//1491 674//1492
+f 703//1493 702//1493 1148//1493 1149//1493 1150//1493 1151//1493
+f 679//1494 1148//1494 1152//1494
+f 679//1495 1152//1495 1153//1495
+f 686//1496 685//1496 1154//1496
+f 1155//1497 1156//1497 1157//1497 1158//1497
+f 1159//1498 1160//1498 1155//1498 1158//1498 1161//1498
+f 1162//1499 1163//1499 1164//1499 1165//1499
+f 1166//1500 1156//1500 1155//1500 1160//1500
+f 1162//1501 1167//1501 1168//1501
+f 1169//1502 1168//1502 1170//1502 1171//1502
+f 1168//1503 1160//1503 1162//1503
+f 1172//1504 1173//1504 694//1504 1174//1504
+f 1175//1505 1171//1505 1170//1505 1173//1505 1176//1505
+f 1173//1506 1170//1506 694//1506
+f 1170//1507 1177//1507 694//1507
+f 1178//1508 1179//1508 1177//1508 1167//1508
+f 697//1509 1180//1509 1181//1509 695//1509
+f 1182//1510 1180//1510 1183//1510 1184//1510
+f 700//1511 699//1511 697//1511 696//1511
+f 697//1512 699//1512 1183//1512
+f 1185//1513 707//1513 709//1513 711//1513
+f 681//1514 679//1514 1186//1514
+f 1187//1515 1186//1515 1188//1515
+f 1188//1516 1153//1516 1152//1516
+f 1186//1517 1153//1517 1188//1517
+f 1189//1518 714//1518 1190//1518 1191//1518
+f 1192//1519 714//1519 713//1519 1193//1519
+f 1194//1520 1167//1520 1195//1520
+f 1195//1521 1167//1521 1162//1521 1196//1521
+f 1197//1522 1198//1522 1167//1522 1194//1522
+f 1199//1523 1200//1523 1201//1523
+f 1202//1524 1200//1524 1203//1524
+f 1200//1525 1204//1525 1205//1525 1203//1525
+f 1206//1526 1207//1526 1208//1526
+f 1207//1527 1209//1527 720//1527
+f 1210//1528 1211//1528 1206//1528
+f 1212//1529 1192//1529 1193//1529 1213//1529
+f 1191//1530 1190//1530 1214//1530
+f 728//1531 734//1531 733//1531 729//1531
+f 740//1532 1215//1532 728//1532
+f 734//1533 1215//1533 1216//1533
+f 1217//1534 1216//1534 1215//1534
+f 1218//1535 743//1535 742//1535
+f 1210//1536 1208//1536 1218//1536
+f 1210//1537 1218//1537 742//1537
+f 1219//1538 1220//1538 1221//1538
+f 1222//1539 1223//1539 1224//1539 746//1539 745//1539
+f 1225//1540 1221//1540 1220//1540 1226//1540
+f 1227//1541 1221//1541 1228//1541 1229//1541
+f 1217//1542 1230//1542 1231//1542 755//1542
+f 1232//1543 1233//1543 1234//1543
+f 1235//1544 1236//1544 1237//1544 1238//1544
+f 1237//1545 1236//1545 1239//1545 1240//1545
+f 1241//1546 1234//1546 1233//1546 1242//1546
+f 758//1547 1243//1547 1241//1547
+f 1243//1548 1244//1548 1245//1548
+f 1239//1549 1246//1549 1240//1549
+f 1244//1550 1239//1550 1236//1550
+f 1247//1551 1248//1551 1249//1551
+f 1250//1552 1251//1552 1252//1552
+f 1251//1553 1253//1553 1254//1553 1252//1553
+f 1255//1554 1250//1554 1252//1554 1256//1554
+f 1255//1555 1256//1555 1257//1555 1258//1555
+f 1256//1556 1252//1556 1254//1556
+f 1259//1557 1260//1557 1261//1557
+f 768//1558 1259//1558 1261//1558 769//1558
+f 761//1559 1261//1559 1260//1559 762//1559
+f 1262//1560 769//1560 1263//1560 1264//1560
+f 1264//1561 1263//1561 771//1561 773//1561
+f 1263//1562 761//1562 1265//1562
+f 1263//1563 1266//1563 771//1563
+f 1267//1564 1268//1564 1269//1564
+f 1270//1565 1271//1565 1272//1565
+f 1273//1566 1274//1566 1275//1566
+f 1274//1567 1276//1567 1277//1567
+f 1278//1568 1279//1568 1280//1568 774//1568 776//1568
+f 1281//1569 1280//1569 1282//1569 1283//1569
+f 1284//1570 774//1570 1276//1570 1285//1570
+f 1286//1571 1287//1571 1288//1571 1289//1571
+f 1290//1572 1291//1572 1292//1572
+f 1293//1573 1289//1573 1288//1573 1294//1573
+f 1295//1574 1296//1574 1297//1574 1298//1574
+f 1296//1575 1299//1575 1297//1575
+f 796//1576 1296//1576 1295//1576 797//1576
+f 1254//1577 1291//1577 1300//1577
+f 1301//1578 778//1578 782//1578
+f 1302//1579 782//1579 781//1579 1303//1579
+f 1265//1580 1302//1580 785//1580
+f 1304//1581 1305//1581 1306//1581 1307//1581
+f 1308//1582 1269//1582 1304//1582
+f 1267//1583 1309//1583 1268//1583
+f 1310//1584 1307//1584 1311//1584
+f 1312//1585 1313//1585 1307//1585 1310//1585
+f 1314//1586 1267//1586 1269//1586
+f 1315//1587 1267//1587 1314//1587
+f 1316//1588 1314//1588 1313//1588
+f 1313//1589 1308//1589 1307//1589
+f 1296//1590 1317//1590 1299//1590
+f 1318//1591 1319//1591 1320//1591
+f 799//1592 1319//1592 1321//1592 800//1592
+f 1319//1593 799//1593 1320//1593
+f 1322//1594 1323//1594 1324//1594
+f 1324//1595 803//1595 1325//1595 1326//1595
+f 1327//1596 1328//1596 1324//1596 1323//1596 1329//1596
+f 1324//1597 1328//1597 1330//1597
+f 1331//1598 1332//1598 1333//1598
+f 1334//1599 1335//1599 1333//1599
+f 1336//1600 1331//1600 1333//1600 1337//1600 1338//1600
+f 1333//1601 1339//1601 1337//1601
+f 1340//1602 1341//1602 1342//1602 1343//1602
+f 1341//1603 1344//1603 1345//1603 1346//1603
+f 1347//1604 1328//1604 1327//1604 1348//1604
+f 1349//1605 1328//1605 1347//1605
+f 1330//1606 1328//1606 1349//1606
+f 1330//1607 1349//1607 1350//1607
+f 1351//1608 1352//1608 1350//1608
+f 1353//1609 801//1609 803//1609 1330//1609 1354//1609
+f 1355//1610 1356//1610 1357//1610 1358//1610
+f 1356//1611 1359//1611 1360//1611 1357//1611
+f 1361//1612 1357//1612 1360//1612
+f 1362//1613 1363//1613 1364//1613
+f 1343//1614 1365//1614 1340//1614
+f 1366//1615 1367//1615 1368//1615
+f 1341//1616 1369//1616 1344//1616
+f 1370//1617 1371//1617 1369//1617
+f 1370//1618 1366//1618 1371//1618
+f 1372//1619 1373//1619 1374//1619
+f 1375//1620 1376//1620 1372//1620 1374//1620 1377//1620
+f 1372//1621 1378//1621 1373//1621
+f 1379//1622 1378//1622 1372//1622 1376//1622 1380//1622 1381//1622
+f 1382//1623 1383//1623 1384//1623 970//1623 1385//1623
+f 1385//1624 970//1624 805//1624 804//1624
+f 1386//1625 1387//1625 1384//1625 1388//1625
+f 1389//1626 1390//1626 807//1626
+f 1390//1627 1391//1627 812//1627
+f 1390//1628 1389//1628 1392//1628
+f 1389//1629 1393//1629 1392//1629
+f 1394//1630 1395//1630 816//1630 1396//1630 1397//1630
+f 1398//1631 816//1631 1399//1631
+f 1393//1632 1400//1632 1401//1632
+f 1393//1633 807//1633 1400//1633
+f 1392//1634 1393//1634 1402//1634
+f 1401//1635 1403//1635 1404//1635
+f 1391//1636 1402//1636 1401//1636
+f 1405//1637 1406//1637 1407//1637 1408//1637 1398//1637 1409//1637
+f 1410//1638 1411//1638 1412//1638 1413//1638 1414//1638
+f 1415//1639 1416//1639 1409//1639 1398//1639
+f 1399//1640 1415//1640 1398//1640
+f 1415//1641 1395//1641 1410//1641
+f 1417//1642 1416//1642 1415//1642 1410//1642 1414//1642
+f 828//1643 1418//1643 823//1643
+f 1419//1644 1420//1644 1418//1644
+f 831//1645 830//1645 1420//1645
+f 1421//1646 819//1646 1422//1646
+f 1423//1647 820//1647 819//1647
+f 1424//1648 1425//1648 1426//1648
+f 1421//1649 1427//1649 819//1649
+f 1427//1650 1423//1650 819//1650
+f 1423//1651 1428//1651 820//1651
+f 1429//1652 1421//1652 1430//1652
+f 1425//1653 1427//1653 1429//1653
+f 1419//1654 828//1654 827//1654 1431//1654
+f 1419//1655 1431//1655 1432//1655 835//1655
+f 1433//1656 831//1656 835//1656 834//1656 1434//1656
+f 831//1657 1420//1657 835//1657
+f 1435//1658 1436//1658 1437//1658
+f 1438//1659 1439//1659 1440//1659 839//1659
+f 1441//1660 1442//1660 1443//1660 1444//1660
+f 1445//1661 1446//1661 845//1661 844//1661
+f 1447//1662 856//1662 1448//1662
+f 856//1663 1447//1663 857//1663
+f 1449//1664 1450//1664 1447//1664 853//1664 852//1664
+f 1451//1665 1452//1665 1453//1665 1454//1665
+f 1452//1666 1455//1666 1453//1666
+f 1456//1667 862//1667 861//1667 1453//1667 1455//1667
+f 1457//1668 1458//1668 1459//1668
+f 1460//1669 1461//1669 867//1669
+f 866//1670 1460//1670 867//1670
+f 1462//1671 868//1671 1463//1671
+f 1460//1672 1463//1672 1461//1672
+f 1462//1673 1463//1673 1460//1673
+f 1464//1674 1465//1674 1466//1674
+f 869//1675 871//1675 1466//1675 1465//1675 1467//1675
+f 1468//1676 1469//1676 871//1676 870//1676 1470//1676
+f 1469//1677 1468//1677 878//1677 877//1677
+f 1471//1678 880//1678 1472//1678
+f 871//1679 1473//1679 1466//1679
+f 1473//1680 1472//1680 872//1680
+f 1471//1681 1473//1681 1469//1681
+f 1471//1682 1472//1682 1473//1682
+f 1474//1683 1475//1683 1472//1683 1476//1683
+f 1476//1684 1472//1684 880//1684 1477//1684
+f 1478//1685 1479//1685 1480//1685 1481//1685
+f 1482//1686 881//1686 1483//1686
+f 1484//1687 1482//1687 1483//1687
+f 1485//1688 882//1688 1482//1688
+f 1486//1689 1482//1689 1484//1689
+f 1486//1690 1485//1690 1482//1690
+f 882//1691 1487//1691 1488//1691 1489//1691
+f 1490//1692 1491//1692 1487//1692
+f 1487//1693 882//1693 1485//1693
+f 1490//1694 1485//1694 1486//1694
+f 930//1695 1492//1695 1493//1695 931//1695
+f 1492//1696 930//1696 1494//1696
+f 887//1697 1478//1697 1495//1697 885//1697
+f 1496//1698 1479//1698 1478//1698
+f 1497//1699 1498//1699 1499//1699
+f 1500//1700 1501//1700 1499//1700 1498//1700
+f 1502//1701 1503//1701 1499//1701 1501//1701
+f 1499//1702 1496//1702 1497//1702
+f 1504//1703 1479//1703 1503//1703 1505//1703
+f 1506//1704 1503//1704 1502//1704
+f 1496//1705 1503//1705 1479//1705
+f 890//1706 1507//1706 1508//1706 888//1706
+f 1509//1707 1510//1707 1511//1707 1512//1707
+f 1513//1708 1507//1708 1510//1708 1509//1708
+f 1514//1709 894//1709 893//1709
+f 1515//1710 1516//1710 1517//1710 1518//1710 1519//1710
+f 1520//1711 1521//1711 1522//1711 1517//1711
+f 1516//1712 1523//1712 1520//1712
+f 1243//1713 758//1713 1524//1713
+f 1525//1714 1526//1714 1527//1714
+f 1528//1715 1529//1715 1530//1715 1531//1715
+f 1530//1716 1529//1716 1532//1716
+f 1533//1717 1534//1717 1535//1717 1536//1717
+f 1536//1718 1535//1718 1537//1718
+f 1538//1719 1536//1719 1537//1719
+f 1539//1720 1540//1720 1541//1720 893//1720 1542//1720
+f 1543//1721 1544//1721 1545//1721 1546//1721
+f 1541//1722 1514//1722 893//1722
+f 1547//1723 1548//1723 1549//1723
+f 1549//1724 1514//1724 1541//1724
+f 1550//1725 895//1725 894//1725 1548//1725 1551//1725
+f 1552//1726 898//1726 897//1726 1553//1726
+f 902//1727 1554//1727 1555//1727 903//1727
+f 1555//1728 1556//1728 1557//1728
+f 1556//1729 1558//1729 1559//1729
+f 1560//1730 1557//1730 1556//1730
+f 1560//1731 1556//1731 906//1731
+f 1561//1732 1560//1732 1562//1732
+f 1557//1733 1560//1733 1563//1733
+f 908//1734 910//1734 1564//1734 1565//1734 1566//1734
+f 1567//1735 1568//1735 910//1735
+f 1569//1736 1568//1736 1567//1736
+f 1570//1737 1535//1737 1534//1737 1571//1737
+f 1572//1738 1573//1738 1574//1738
+f 1572//1739 1575//1739 1538//1739 1573//1739
+f 1576//1740 1577//1740 1578//1740 1579//1740
+f 1570//1741 1537//1741 1535//1741
+f 1580//1742 1577//1742 1581//1742
+f 1578//1743 1577//1743 1570//1743
+f 1580//1744 1537//1744 1570//1744
+f 1580//1745 1573//1745 1538//1745
+f 912//1746 911//1746 1582//1746
+f 897//1747 912//1747 1553//1747
+f 1583//1748 1584//1748 1585//1748 1586//1748
+f 1585//1749 1584//1749 1587//1749 1588//1749
+f 1589//1750 1590//1750 1591//1750 922//1750
+f 1589//1751 1587//1751 1584//1751
+f 1587//1752 1589//1752 1592//1752
+f 1569//1753 1564//1753 1568//1753
+f 921//1754 1593//1754 1594//1754 922//1754
+f 1592//1755 915//1755 1587//1755
+f 1595//1756 1596//1756 1597//1756 1598//1756
+f 1599//1757 1600//1757 1601//1757 1602//1757
+f 1603//1758 1604//1758 1605//1758
+f 1606//1759 1607//1759 1608//1759 1599//1759
+f 1609//1760 1600//1760 1608//1760
+f 1608//1761 1603//1761 1610//1761
+f 1484//1762 1483//1762 927//1762
+f 1484//1763 927//1763 926//1763
+f 1611//1764 1490//1764 926//1764 925//1764
+f 1484//1765 926//1765 1490//1765
+f 1612//1766 1613//1766 1614//1766
+f 1615//1767 1616//1767 1617//1767 1494//1767
+f 1615//1768 1494//1768 930//1768
+f 1618//1769 1619//1769 1620//1769 1621//1769
+f 1622//1770 1623//1770 1624//1770
+f 1625//1771 1626//1771 1627//1771
+f 1628//1772 1629//1772 1619//1772 1618//1772
+f 1629//1773 1628//1773 1623//1773 1622//1773
+f 1614//1774 1630//1774 1612//1774
+f 1619//1775 1627//1775 1626//1775 1620//1775
+f 1614//1776 1627//1776 1619//1776
+f 1631//1777 1612//1777 1632//1777
+f 1633//1778 1634//1778 1622//1778 1624//1778
+f 1632//1779 1612//1779 1630//1779 1635//1779
+f 1634//1780 1635//1780 1630//1780 1622//1780
+f 1636//1781 1637//1781 933//1781 1638//1781
+f 934//1782 1637//1782 1639//1782
+f 1640//1783 597//1783 596//1783
+f 967//1784 606//1784 605//1784
+f 966//1785 607//1785 606//1785
+f 616//1786 972//1786 971//1786 617//1786
+f 978//1787 980//1787 981//1787
+f 990//1788 1641//1788 991//1788
+f 623//1789 620//1789 619//1789
+f 1642//1790 1643//1790 1644//1790
+f 999//1791 998//1791 1645//1791
+f 1646//1792 1647//1792 1005//1792
+f 1006//1793 1005//1793 1647//1793
+f 1648//1794 1649//1794 1650//1794
+f 1651//1795 1011//1795 1010//1795
+f 1652//1796 1039//1796 1038//1796 1653//1796 1654//1796
+f 1036//1797 1655//1797 1656//1797
+f 1394//1798 1657//1798 1395//1798
+f 1658//1799 1659//1799 1042//1799
+f 1659//1800 1660//1800 1042//1800
+f 1042//1801 1041//1801 1661//1801 1658//1801
+f 1662//1802 1663//1802 1664//1802 1665//1802
+f 1666//1803 634//1803 633//1803
+f 632//1804 1049//1804 1052//1804 630//1804
+f 1057//1805 1056//1805 1667//1805
+f 1068//1806 638//1806 637//1806 1668//1806
+f 646//1807 645//1807 1078//1807
+f 1669//1808 1118//1808 1117//1808
+f 1092//1809 1670//1809 1093//1809
+f 1092//1810 647//1810 650//1810 1670//1810
+f 1671//1811 652//1811 651//1811
+f 1112//1812 660//1812 659//1812
+f 659//1813 658//1813 1105//1813
+f 1672//1814 662//1814 661//1814
+f 1673//1815 1116//1815 1115//1815 1674//1815 1675//1815
+f 1129//1816 1676//1816 1130//1816
+f 1126//1817 1125//1817 1134//1817
+f 1139//1818 672//1818 671//1818
+f 673//1819 1677//1819 674//1819
+f 1145//1820 1678//1820 1146//1820
+f 678//1821 1679//1821 1148//1821 679//1821
+f 1680//1822 687//1822 686//1822
+f 1174//1823 694//1823 693//1823
+f 1184//1824 1183//1824 699//1824 698//1824
+f 1681//1825 706//1825 705//1825
+f 708//1826 707//1826 1185//1826
+f 682//1827 681//1827 1682//1827
+f 1683//1828 1684//1828 1685//1828
+f 1686//1829 1187//1829 1687//1829 1688//1829
+f 1682//1830 681//1830 1684//1830 1683//1830
+f 1189//1831 715//1831 714//1831
+f 1689//1832 1200//1832 1202//1832 1690//1832
+f 721//1833 720//1833 727//1833
+f 1691//1834 743//1834 719//1834 725//1834 1692//1834
+f 742//1835 741//1835 1693//1835
+f 1694//1836 1204//1836 1695//1836
+f 1696//1837 1697//1837 718//1837 717//1837 1698//1837
+f 1205//1838 1204//1838 1694//1838
+f 737//1839 736//1839 754//1839
+f 738//1840 740//1840 728//1840 735//1840 1699//1840 1700//1840
+f 743//1841 1691//1841 744//1841
+f 1223//1842 1701//1842 1224//1842
+f 1231//1843 756//1843 755//1843
+f 758//1844 1702//1844 759//1844
+f 1246//1845 1239//1845 1703//1845
+f 1262//1846 770//1846 769//1846
+f 771//1847 1704//1847 772//1847
+f 1284//1848 775//1848 774//1848
+f 1705//1849 1706//1849 1707//1849
+f 783//1850 782//1850 778//1850 777//1850
+f 1704//1851 771//1851 1708//1851 1709//1851
+f 1710//1852 1268//1852 1711//1852 1712//1852
+f 1713//1853 1714//1853 1711//1853 1268//1853 1309//1853
+f 1713//1854 1309//1854 1715//1854
+f 1313//1855 1716//1855 1717//1855
+f 1321//1856 1319//1856 1318//1856 1718//1856 1719//1856
+f 1720//1857 1718//1857 1318//1857
+f 1326//1858 1322//1858 1324//1858
+f 1325//1859 803//1859 802//1859
+f 1721//1860 1335//1860 1334//1860 1722//1860 1723//1860
+f 1721//1861 1724//1861 1335//1861
+f 1725//1862 1722//1862 1334//1862
+f 1348//1863 1726//1863 1347//1863
+f 1347//1864 1726//1864 1727//1864
+f 1728//1865 1358//1865 1357//1865
+f 1367//1866 1366//1866 1729//1866
+f 1730//1867 1387//1867 1731//1867 1732//1867
+f 1733//1868 1734//1868 1735//1868
+f 807//1869 810//1869 1736//1869
+f 811//1870 809//1870 808//1870
+f 1404//1871 1737//1871 815//1871 812//1871
+f 818//1872 1396//1872 816//1872
+f 1422//1873 819//1873 822//1873 1738//1873
+f 1400//1874 1739//1874 1740//1874
+f 1400//1875 807//1875 1736//1875 1741//1875 1739//1875
+f 1742//1876 1401//1876 1400//1876 1740//1876
+f 1743//1877 1403//1877 1401//1877 1742//1877
+f 1744//1878 1403//1878 1743//1878
+f 1737//1879 1404//1879 1403//1879 1744//1879
+f 1745//1880 1406//1880 1405//1880 1746//1880
+f 1412//1881 1747//1881 1748//1881 1749//1881 1413//1881
+f 826//1882 828//1882 823//1882 825//1882 1750//1882
+f 1751//1883 1752//1883 830//1883 829//1883 1753//1883
+f 832//1884 831//1884 1433//1884
+f 1754//1885 1755//1885 1756//1885
+f 1738//1886 1757//1886 1422//1886
+f 1758//1887 1428//1887 1759//1887
+f 1756//1888 1422//1888 1757//1888 1754//1888
+f 1760//1889 833//1889 820//1889 1428//1889 1758//1889
+f 1761//1890 1430//1890 1756//1890 1755//1890 1762//1890
+f 1430//1891 1761//1891 1763//1891
+f 836//1892 835//1892 1432//1892
+f 1764//1893 842//1893 841//1893
+f 1765//1894 846//1894 845//1894 840//1894 843//1894
+f 1766//1895 1443//1895 848//1895 847//1895
+f 853//1896 1448//1896 1767//1896 851//1896
+f 858//1897 857//1897 1768//1897
+f 1448//1898 856//1898 855//1898 1767//1898
+f 1451//1899 1454//1899 1769//1899 1770//1899
+f 1771//1900 1458//1900 1772//1900 1773//1900 1774//1900
+f 1775//1901 1459//1901 1458//1901 1771//1901
+f 1776//1902 1777//1902 1459//1902 1775//1902
+f 1778//1903 1773//1903 1772//1903 1779//1903 1780//1903
+f 867//1904 1461//1904 868//1904
+f 1463//1905 868//1905 1461//1905
+f 1462//1906 866//1906 868//1906
+f 1477//1907 880//1907 879//1907
+f 1781//1908 1247//1908 1249//1908
+f 1483//1909 1782//1909 1783//1909
+f 1784//1910 927//1910 1483//1910 1783//1910 1785//1910
+f 1483//1911 881//1911 884//1911 1782//1911
+f 1784//1912 928//1912 927//1912
+f 882//1913 1489//1913 1786//1913 883//1913
+f 1787//1914 1491//1914 1788//1914 1789//1914 1790//1914
+f 1791//1915 1493//1915 1492//1915
+f 1792//1916 1498//1916 887//1916 886//1916
+f 1500//1917 1498//1917 1792//1917
+f 1793//1918 1794//1918 1523//1918 1795//1918 1796//1918
+f 1797//1919 1517//1919 1522//1919 1798//1919
+f 1799//1920 1524//1920 1800//1920
+f 1801//1921 1802//1921 1532//1921
+f 1803//1922 1533//1922 1536//1922
+f 1536//1923 1804//1923 1803//1923
+f 892//1924 1542//1924 893//1924
+f 1545//1925 1805//1925 1546//1925
+f 1806//1926 1551//1926 1548//1926 1807//1926
+f 1545//1927 1808//1927 1805//1927
+f 912//1928 897//1928 900//1928 913//1928
+f 1565//1929 1564//1929 1809//1929
+f 1570//1930 1571//1930 1810//1930
+f 1574//1931 1573//1931 1811//1931
+f 1811//1932 1573//1932 1812//1932 1813//1932
+f 1579//1933 1578//1933 1814//1933
+f 1815//1934 1581//1934 1816//1934
+f 1591//1935 923//1935 922//1935
+f 1817//1936 1818//1936 1819//1936
+f 920//1937 1819//1937 1818//1937 918//1937
+f 1820//1938 1821//1938 1822//1938 1823//1938
+f 1824//1939 916//1939 915//1939 1825//1939
+f 1600//1940 1826//1940 1827//1940 1601//1940
+f 1828//1941 1829//1941 1613//1941
+f 1830//1942 1494//1942 1617//1942 1831//1942
+f 936//1943 1638//1943 933//1943
+f 1832//1944 935//1944 934//1944
+f 1833//1945 1639//1945 1834//1945
+f 937//1946 941//1946 593//1946 592//1946
+f 937//1947 592//1947 938//1947
+f 939//1948 938//1948 1835//1948
+f 1835//1949 938//1949 592//1949 594//1949
+f 596//1950 1836//1950 1837//1950 1640//1950
+f 943//1951 947//1951 944//1951
+f 944//1952 946//1952 1838//1952 942//1952
+f 1838//1953 946//1953 1839//1953
+f 1839//1954 946//1954 948//1954
+f 1837//1955 1836//1955 599//1955 601//1955
+f 596//1956 595//1956 1836//1956
+f 595//1957 599//1957 1836//1957
+f 1840//1958 951//1958 950//1958 1841//1958
+f 951//1959 1842//1959 952//1959
+f 951//1960 1840//1960 1842//1960
+f 954//1961 1843//1961 955//1961
+f 961//1962 955//1962 1843//1962 1844//1962 1845//1962 1846//1962 1847//1962
+f 1848//1963 953//1963 955//1963 956//1963 959//1963
+f 955//1964 961//1964 956//1964
+f 603//1965 960//1965 961//1965
+f 962//1966 957//1966 963//1966
+f 964//1967 960//1967 1849//1967
+f 960//1968 957//1968 956//1968
+f 1844//1969 1850//1969 961//1969 1847//1969 1851//1969
+f 1852//1970 604//1970 603//1970 961//1970 1850//1970
+f 1849//1971 960//1971 603//1971 602//1971
+f 965//1972 606//1972 967//1972
+f 605//1973 607//1973 968//1973
+f 968//1974 966//1974 965//1974
+f 1387//1975 1853//1975 1854//1975
+f 608//1976 1853//1976 1855//1976 609//1976
+f 1856//1977 806//1977 805//1977 608//1977 611//1977
+f 608//1978 969//1979 1853//1980
+f 969//1981 1854//1982 1853//1983
+f 613//1984 974//1984 973//1984 614//1984
+f 974//1985 617//1985 971//1985
+f 612//1986 974//1986 613//1986
+f 1857//1987 976//1987 975//1987
+f 978//1988 976//1988 1857//1988 979//1988
+f 1858//1989 988//1989 987//1989
+f 987//1990 1859//1990 1860//1990 1858//1990
+f 1007//1991 987//1991 986//1991
+f 1641//1992 1861//1992 991//1992
+f 1861//1993 1862//1993 1863//1993 991//1993
+f 1648//1994 1650//1994 1863//1994 1862//1994 1864//1994
+f 991//1995 1863//1995 994//1995
+f 1863//1996 992//1996 994//1996
+f 1644//1997 618//1997 621//1997 1642//1997
+f 996//1998 1644//1998 1643//1998 997//1998
+f 1865//1999 618//1999 1644//1999
+f 1865//2000 619//2001 618//2002
+f 996//2003 1865//2003 1644//2003
+f 1865//2004 1001//2005 619//2006
+f 1865//2007 996//2007 1001//2007
+f 1645//2008 998//2008 625//2008 624//2008
+f 1866//2009 1002//2009 996//2009 995//2009
+f 1002//2010 1866//2010 626//2010 625//2010
+f 982//2011 1001//2011 1000//2011
+f 996//2012 1002//2012 1001//2012
+f 629//2013 1867//2013 627//2013
+f 1868//2014 1646//2014 1005//2014 629//2014 628//2014
+f 1869//2015 1004//2015 1003//2015
+f 629//2016 986//2016 985//2016 1867//2016
+f 1859//2017 987//2017 1870//2017 1871//2017
+f 1869//2018 1871//2018 1870//2018 1004//2018
+f 1004//2019 1870//2019 1007//2019
+f 1004//2020 1007//2020 1005//2020
+f 629//2021 1007//2021 986//2021
+f 1007//2022 1870//2022 987//2022
+f 993//2023 992//2023 1872//2023
+f 1649//2024 1009//2024 1008//2024 1650//2024
+f 1872//2025 992//2025 1011//2025 1651//2025
+f 1008//2026 1863//2026 1650//2026
+f 1008//2027 1011//2027 992//2027
+f 1008//2028 992//2028 1863//2028
+f 1014//2029 1019//2029 1012//2029
+f 1873//2030 1016//2030 1015//2030
+f 1016//2031 1873//2031 1018//2031
+f 1038//2032 1044//2032 1874//2032 1653//2032
+f 1875//2033 1876//2033 1030//2033
+f 1025//2034 1024//2034 1877//2034 1878//2034
+f 1877//2035 1024//2035 1879//2035
+f 1030//2036 1021//2036 1020//2036 1875//2036
+f 1880//2037 1879//2037 1024//2037 1028//2037 1027//2037
+f 1028//2038 1024//2038 1021//2038
+f 1881//2039 1029//2039 1028//2039 1030//2039 1882//2039
+f 1032//2040 1883//2040 1033//2040
+f 1036//2041 1031//2041 1035//2041 1655//2041
+f 1883//2042 1032//2042 1036//2042 1656//2042
+f 1410//2043 1395//2043 1657//2043 1884//2043
+f 1884//2044 1411//2044 1410//2044
+f 1885//2045 1043//2045 1042//2045 1660//2045 1886//2045
+f 1043//2046 1885//2046 1664//2046 1663//2046
+f 1038//2047 1037//2047 1045//2047
+f 1043//2048 1045//2048 1037//2048
+f 1887//2049 1043//2049 1663//2049
+f 1043//2050 1887//2050 1045//2050
+f 1887//2051 1044//2051 1045//2051
+f 1874//2052 1044//2052 1888//2052 1889//2052
+f 1890//2053 1891//2053 1892//2053 1663//2053 1893//2053
+f 1663//2054 1662//2054 1893//2054
+f 1888//2055 1044//2055 1892//2055 1891//2055
+f 1887//2056 1892//2056 1044//2056
+f 1887//2057 1663//2057 1892//2057
+f 1894//2058 1882//2058 1030//2058 1876//2058
+f 1055//2059 1051//2059 1050//2059
+f 1667//2060 1056//2060 634//2060 1666//2060
+f 635//2061 634//2061 1061//2061 1062//2061
+f 1059//2062 1050//2062 1049//2062
+f 1059//2063 1056//2063 1050//2063
+f 1895//2064 1063//2064 1065//2064
+f 1895//2065 1065//2065 1066//2065
+f 1067//2066 1065//2066 1064//2066
+f 1071//2067 1896//2067 641//2067 640//2067
+f 1896//2068 1071//2068 1072//2068 1897//2068
+f 638//2069 1070//2069 1071//2069
+f 1075//2070 1074//2070 1073//2070 1076//2070
+f 643//2071 1074//2071 645//2071
+f 1074//2072 1075//2072 645//2072
+f 647//2073 1095//2073 1898//2073 648//2073
+f 1899//2074 1900//2074 1901//2074 1902//2074
+f 1095//2075 1899//2075 1902//2075 1898//2075
+f 1095//2076 1094//2076 1899//2076
+f 1903//2077 1900//2077 1899//2077 1094//2077 1107//2077
+f 1106//2078 1097//2078 657//2078 1079//2078 1904//2078
+f 1083//2079 1905//2079 1080//2079
+f 1115//2080 1080//2080 1905//2080 1674//2080
+f 1115//2081 1084//2081 1080//2081
+f 1906//2082 1082//2082 1081//2082
+f 1906//2083 1081//2083 1118//2083 1669//2083
+f 1122//2084 1081//2084 1084//2084
+f 1081//2085 1122//2085 1118//2085
+f 1907//2086 1087//2086 1086//2086 652//2086 1671//2086
+f 1102//2087 1086//2087 1085//2087 1136//2087
+f 1092//2088 1095//2088 647//2088
+f 652//2089 1100//2089 1109//2089
+f 1091//2090 1095//2090 1092//2090
+f 1097//2091 1094//2091 1091//2091
+f 1098//2092 1099//2092 652//2092
+f 1102//2093 1098//2093 1086//2093
+f 655//2094 657//2094 662//2094 1672//2094
+f 652//2095 1109//2095 1908//2095 665//2095
+f 1110//2096 1109//2096 1100//2096 1142//2096
+f 1104//2097 1103//2097 663//2097 662//2097
+f 1099//2098 671//2098 1100//2098
+f 1108//2099 662//2099 657//2099
+f 1109//2100 1097//2100 1096//2100 1908//2100
+f 1104//2101 1108//2101 1109//2101
+f 668//2102 667//2102 1121//2102
+f 667//2103 1122//2103 1114//2103
+f 1129//2104 1124//2104 1123//2104 1676//2104
+f 1140//2105 671//2105 1099//2105
+f 1135//2106 1909//2106 1101//2106 1102//2106
+f 1910//2107 1101//2107 1909//2107 1911//2107
+f 1141//2108 1140//2108 1101//2108 1910//2108
+f 1101//2109 1140//2109 1099//2109
+f 1147//2110 1146//2110 1678//2110 1912//2110
+f 675//2111 1147//2111 1912//2111 676//2111
+f 1147//2112 674//2113 1143//2114
+f 1144//2115 1143//2115 674//2115 1677//2115
+f 1679//2116 1149//2116 1148//2116
+f 1148//2117 702//2117 1152//2117
+f 689//2118 688//2118 685//2118 684//2118
+f 685//2119 688//2119 1154//2119
+f 1680//2120 686//2120 1154//2120 1913//2120
+f 1913//2121 1154//2121 688//2121 691//2121
+f 1159//2122 1914//2122 1160//2122
+f 1162//2123 1160//2123 1914//2123 1163//2123
+f 1160//2124 1168//2124 1169//2124 1166//2124
+f 1168//2125 1167//2125 1177//2125
+f 1172//2126 1176//2126 1173//2126
+f 1915//2127 692//2127 694//2127 1177//2127 1179//2127
+f 1177//2128 1170//2128 1168//2128
+f 1182//2129 1181//2129 1180//2129
+f 1180//2130 697//2130 1183//2130
+f 709//2131 1916//2131 1917//2131 710//2131
+f 1681//2132 1917//2132 1916//2132 706//2132
+f 706//2133 1916//2133 707//2133
+f 709//2134 707//2134 1916//2134
+f 1685//2135 1684//2135 1187//2135 1686//2135
+f 701//2136 1918//2136 1188//2136 702//2136
+f 1188//2137 1918//2137 1687//2137 1187//2137
+f 1186//2138 1684//2138 681//2138
+f 1684//2139 1186//2139 1187//2139
+f 1153//2140 1186//2140 679//2140
+f 702//2141 1188//2141 1152//2141
+f 1190//2142 714//2142 1192//2142
+f 1196//2143 1162//2143 1165//2143
+f 1167//2144 1198//2144 1178//2144
+f 1689//2145 1919//2145 1201//2145 1200//2145
+f 716//2146 718//2146 1201//2146 1919//2146 1920//2146
+f 1697//2147 1201//2147 718//2147
+f 1697//2148 1199//2148 1201//2148
+f 1199//2149 1204//2149 1200//2149
+f 1207//2150 720//2150 719//2150
+f 1208//2151 719//2151 743//2151
+f 719//2152 1208//2152 1207//2152
+f 1208//2153 1210//2153 1206//2153
+f 1921//2154 726//2154 720//2154 1209//2154 1922//2154
+f 1922//2155 1209//2155 1211//2155 1923//2155
+f 1693//2156 1923//2156 1211//2156 742//2156
+f 1210//2157 742//2157 1211//2157
+f 1207//2158 1206//2158 1209//2158
+f 1206//2159 1211//2159 1209//2159
+f 1214//2160 1190//2160 1192//2160 1212//2160
+f 1227//2161 1219//2161 1221//2161
+f 1924//2162 1695//2162 1204//2162 1697//2162 1696//2162
+f 1697//2163 1204//2163 1199//2163
+f 1216//2164 736//2164 734//2164
+f 1217//2165 736//2165 1216//2165
+f 734//2166 728//2166 1215//2166
+f 1218//2167 1208//2167 743//2167
+f 1925//2168 749//2168 748//2168 1224//2168 1701//2168
+f 750//2169 1225//2169 1226//2169 751//2169
+f 1224//2170 748//2170 746//2170
+f 1225//2171 750//2171 1228//2171
+f 1229//2172 1228//2172 750//2172 752//2172
+f 1221//2173 1225//2173 1228//2173
+f 740//2174 739//2174 1926//2174
+f 1230//2175 1217//2175 740//2175 1926//2175
+f 740//2176 1217//2176 1215//2176
+f 1217//2177 755//2177 736//2177
+f 1235//2178 1238//2178 1927//2178 1928//2178
+f 1234//2179 1235//2179 1928//2179 1232//2179
+f 758//2180 1241//2180 1242//2180 1702//2180
+f 1235//2181 1234//2181 1236//2181
+f 1243//2182 1524//2182 1239//2182
+f 1236//2183 1234//2183 1245//2183
+f 1245//2184 1234//2184 1241//2184
+f 1245//2185 1244//2185 1236//2185
+f 1243//2186 1239//2186 1244//2186
+f 1241//2187 1243//2187 1245//2187
+f 1703//2188 1239//2188 1524//2188 1799//2188
+f 1929//2189 1930//2189 1287//2189 1286//2189
+f 1257//2190 1256//2190 1287//2190 1930//2190
+f 1300//2191 1256//2191 1254//2191
+f 1300//2192 1287//2192 1256//2192
+f 765//2193 1931//2193 1932//2193 761//2193
+f 1932//2194 1931//2194 1706//2194 1705//2194
+f 1932//2195 1265//2195 761//2195
+f 1261//2196 1263//2196 769//2196
+f 1263//2197 1261//2197 761//2197
+f 1266//2198 1263//2198 1265//2198
+f 1269//2199 1268//2199 1710//2199 1933//2199
+f 1285//2200 1276//2200 1274//2200 1273//2200
+f 1270//2201 1272//2201 1281//2201 1934//2201 1935//2201
+f 1274//2202 1272//2202 1271//2202 1275//2202
+f 1272//2203 1274//2203 1281//2203
+f 1274//2204 1277//2204 1281//2204
+f 1291//2205 1936//2205 1292//2205
+f 1282//2206 1280//2206 1279//2206
+f 1283//2207 1934//2207 1281//2207
+f 1277//2208 774//2208 1280//2208
+f 1277//2209 1276//2209 774//2209
+f 1291//2210 1254//2210 1253//2210 1936//2210
+f 1281//2211 1277//2211 1280//2211
+f 1294//2212 1288//2212 1291//2212 1290//2212 1937//2212
+f 1300//2213 1288//2213 1287//2213
+f 1300//2214 1291//2214 1288//2214
+f 778//2215 1705//2215 1707//2215 779//2215
+f 1301//2216 782//2216 1302//2216
+f 778//2217 1301//2217 1705//2217
+f 1302//2218 1932//2218 1705//2218
+f 1302//2219 1265//2219 1932//2219
+f 1705//2220 1301//2220 1302//2220
+f 785//2221 784//2221 1708//2221 771//2221
+f 771//2222 1266//2222 785//2222
+f 786//2223 785//2223 1302//2223 1303//2223
+f 785//2224 1266//2224 1265//2224
+f 789//2225 788//2225 1269//2225 1938//2225 1939//2225
+f 1311//2226 1307//2226 1306//2226
+f 1304//2227 788//2227 793//2227
+f 1304//2228 1269//2228 788//2228
+f 1940//2229 1305//2229 1304//2229 793//2229 792//2229
+f 1307//2230 1308//2230 1304//2230
+f 1316//2231 1941//2231 1715//2231 1309//2231
+f 1941//2232 1316//2232 1313//2232 1717//2232
+f 1716//2233 1313//2233 1312//2233
+f 1269//2234 1933//2234 1938//2234
+f 1315//2235 1309//2235 1267//2235
+f 1316//2236 1309//2236 1315//2236
+f 1316//2237 1315//2237 1314//2237
+f 1308//2238 1314//2238 1269//2238
+f 1313//2239 1314//2239 1308//2239
+f 1317//2240 1296//2240 796//2240 795//2240
+f 1320//2241 1942//2241 1720//2241 1318//2241
+f 1943//2242 1942//2242 1320//2242 799//2242 798//2242
+f 1330//2243 803//2243 1324//2243
+f 1338//2244 1337//2244 1944//2244
+f 1945//2245 1339//2245 1946//2245
+f 1724//2246 1946//2246 1339//2246 1335//2246
+f 1944//2247 1337//2247 1339//2247 1945//2247
+f 1334//2248 1333//2248 1332//2248 1725//2248
+f 1335//2249 1339//2249 1333//2249
+f 1342//2250 1341//2250 1346//2250 1947//2250
+f 1344//2251 1948//2251 1345//2251
+f 1949//2252 1950//2252 1349//2252 1347//2252 1727//2252
+f 1951//2253 1351//2253 1350//2253 1349//2253 1950//2253
+f 1952//2254 1350//2254 1352//2254
+f 1354//2255 1330//2255 1350//2255 1952//2255
+f 1361//2256 1362//2256 1357//2256
+f 1953//2257 1954//2257 1364//2257
+f 1953//2258 1364//2258 1734//2258 1733//2258
+f 1363//2259 1734//2259 1364//2259
+f 1728//2260 1357//2260 1362//2260 1955//2260 1956//2260
+f 1955//2261 1362//2261 1364//2261 1954//2261 1957//2261
+f 1958//2262 1959//2262 1370//2262
+f 1370//2263 1340//2263 1365//2263 1958//2263
+f 1369//2264 1341//2264 1340//2264
+f 1370//2265 1369//2265 1340//2265
+f 1371//2266 1960//2266 1961//2266
+f 1962//2267 1960//2267 1371//2267 1366//2267 1368//2267
+f 1370//2268 1959//2268 1729//2268 1366//2268
+f 1948//2269 1344//2269 1371//2269 1961//2269
+f 1369//2270 1371//2270 1344//2270
+f 1963//2271 1964//2271 1965//2271
+f 1730//2272 1855//2272 1853//2272 1387//2272
+f 1386//2273 1731//2273 1387//2273
+f 1964//2274 1360//2274 1359//2274 1965//2274
+f 1964//2275 1361//2275 1360//2275
+f 1966//2276 1967//2276 1964//2276 1963//2276
+f 1735//2277 1734//2277 1964//2277 1967//2277
+f 1964//2278 1363//2278 1361//2278
+f 1363//2279 1964//2279 1734//2279
+f 1361//2280 1363//2280 1362//2280
+f 1968//2281 1388//2281 1384//2281 1969//2281
+f 1969//2282 1384//2282 1383//2282
+f 970//2283 1384//2283 969//2283
+f 1384//2284 1387//2284 1854//2284
+f 969//2285 1384//2285 1854//2285
+f 1390//2286 808//2286 807//2286
+f 1390//2287 812//2287 808//2287
+f 1389//2288 807//2288 1393//2288
+f 1392//2289 1391//2289 1390//2289
+f 1402//2290 1391//2290 1392//2290
+f 1404//2291 812//2291 1391//2291
+f 816//2292 1398//2292 1408//2292 817//2292
+f 816//2293 1395//2293 1399//2293
+f 1402//2294 1393//2294 1401//2294
+f 1401//2295 1404//2295 1391//2295
+f 1415//2296 1399//2296 1395//2296
+f 823//2297 1970//2297 1971//2297 824//2297
+f 1970//2298 830//2298 1752//2298 1971//2298
+f 1970//2299 823//2299 1418//2299
+f 828//2300 1419//2300 1418//2300
+f 1420//2301 830//2301 1970//2301
+f 1418//2302 1420//2302 1970//2302
+f 1421//2303 1422//2303 1756//2303
+f 1430//2304 1421//2304 1756//2304
+f 1972//2305 1759//2305 1428//2305 1425//2305 1424//2305
+f 1425//2306 1428//2306 1423//2306
+f 1973//2307 1426//2307 1425//2307 1430//2307 1763//2307
+f 1427//2308 1421//2308 1429//2308
+f 1425//2309 1423//2309 1427//2309
+f 1430//2310 1425//2310 1429//2310
+f 835//2311 1420//2311 1419//2311
+f 839//2312 1440//2312 837//2312
+f 1436//2313 1435//2313 1974//2313
+f 1437//2314 1436//2314 839//2314 838//2314
+f 839//2315 1436//2315 1438//2315
+f 1974//2316 1439//2316 1438//2316 1436//2316
+f 1975//2317 1976//2317 1442//2317
+f 1442//2318 1441//2318 1975//2318
+f 1446//2319 841//2319 840//2319
+f 1977//2320 1764//2320 841//2320 1446//2320 1445//2320
+f 845//2321 1446//2321 840//2321
+f 1978//2322 1444//2322 1443//2322 1766//2322
+f 848//2323 1442//2323 1976//2323 849//2323
+f 1442//2324 848//2324 1443//2324
+f 1447//2325 1448//2325 853//2325
+f 1768//2326 857//2326 1447//2326 1450//2326
+f 1454//2327 1453//2327 865//2327
+f 1453//2328 861//2328 865//2328
+f 865//2329 864//2329 1769//2329 1454//2329
+f 1457//2330 1772//2330 1458//2330
+f 1457//2331 1459//2331 1777//2331
+f 1780//2332 1779//2332 1777//2332 1776//2332
+f 1457//2333 1779//2333 1772//2333
+f 1457//2334 1777//2334 1779//2334
+f 1462//2335 1460//2335 866//2335
+f 1466//2336 872//2336 875//2336 1464//2336
+f 1466//2337 1473//2337 872//2337
+f 1469//2338 1473//2338 871//2338
+f 1471//2339 877//2339 880//2339
+f 877//2340 1471//2340 1469//2340
+f 1480//2341 1479//2341 1979//2341 1980//2341
+f 873//2342 872//2342 1472//2342 1475//2342
+f 1249//2343 1596//2343 1595//2343 1781//2343
+f 1249//2344 1526//2344 1596//2344
+f 881//2345 1482//2345 882//2345
+f 1488//2346 1487//2346 1491//2346 1787//2346
+f 1490//2347 1487//2347 1485//2347
+f 1492//2348 1494//2348 1830//2348 1791//2348
+f 1481//2349 1495//2349 1478//2349
+f 1497//2350 1478//2350 887//2350
+f 1498//2351 1497//2351 887//2351
+f 1497//2352 1496//2352 1478//2352
+f 1499//2353 1503//2353 1496//2353
+f 1479//2354 1504//2354 1979//2354
+f 1505//2355 1503//2355 1506//2355 1981//2355
+f 1510//2356 1507//2356 890//2356
+f 1508//2357 1507//2357 1513//2357 1982//2357
+f 1511//2358 1510//2358 890//2358 889//2358
+f 1518//2359 1517//2359 1797//2359
+f 1795//2360 1523//2360 1516//2360 1515//2360 1983//2360
+f 1794//2361 1984//2361 1521//2361 1520//2361 1523//2361
+f 1516//2362 1520//2362 1517//2362
+f 1800//2363 1524//2363 758//2363 757//2363
+f 1526//2364 1249//2364 1248//2364 1527//2364
+f 1802//2365 1985//2365 1530//2365 1532//2365
+f 1528//2366 1986//2366 1529//2366
+f 1531//2367 1530//2367 1985//2367
+f 1532//2368 1529//2368 1986//2368 1801//2368
+f 1536//2369 1538//2369 1575//2369 1804//2369
+f 1545//2370 1541//2370 1540//2370 1808//2370
+f 1987//2371 1807//2371 1548//2371
+f 1544//2372 1541//2372 1545//2372
+f 1547//2373 1988//2373 1987//2373 1548//2373
+f 1549//2374 894//2374 1514//2374
+f 1549//2375 1548//2375 894//2375
+f 1989//2376 1988//2376 1547//2376 1544//2376 1543//2376
+f 1541//2377 1544//2377 1549//2377
+f 1544//2378 1547//2378 1549//2378
+f 903//2379 1563//2379 1990//2379 1991//2379 901//2379
+f 1558//2380 1555//2380 1554//2380 1992//2380
+f 1992//2381 1993//2381 1558//2381
+f 1994//2382 1995//2382 1559//2382
+f 907//2383 906//2383 1559//2383 1995//2383
+f 1555//2384 1563//2384 903//2384
+f 1559//2385 1558//2385 1993//2385 1994//2385
+f 1562//2386 1560//2386 906//2386 905//2386
+f 1555//2387 1557//2387 1563//2387
+f 1555//2388 1558//2388 1556//2388
+f 1559//2389 906//2389 1556//2389
+f 1563//2390 1996//2390 1990//2390
+f 1996//2391 1563//2391 1560//2391 1561//2391
+f 909//2392 1997//2392 1567//2392 910//2392
+f 1819//2393 1567//2393 1997//2393 1817//2393
+f 1568//2394 1564//2394 910//2394
+f 1814//2395 1578//2395 1570//2395 1810//2395 1998//2395
+f 1812//2396 1573//2396 1581//2396 1815//2396
+f 1577//2397 1576//2397 1816//2397 1581//2397
+f 1570//2398 1577//2398 1580//2398
+f 1580//2399 1581//2399 1573//2399
+f 1537//2400 1580//2400 1538//2400
+f 1999//2401 1553//2401 912//2401 1582//2401
+f 1552//2402 1553//2402 1999//2402
+f 917//2403 1588//2403 1587//2403 915//2403
+f 1583//2404 1590//2404 1589//2404 1584//2404
+f 1594//2405 1589//2405 922//2405
+f 920//2406 919//2406 2000//2406
+f 920//2407 1567//2407 1819//2407
+f 2000//2408 2001//2408 1569//2408 920//2408
+f 920//2409 1569//2409 1567//2409
+f 1809//2410 1564//2410 1821//2410 1820//2410
+f 1569//2411 1821//2411 1564//2411
+f 1822//2412 1821//2412 1569//2412 2001//2412
+f 1594//2413 1593//2413 2002//2413
+f 2002//2414 2003//2414 1592//2414 1594//2414
+f 2003//2415 2004//2415 1825//2415 915//2415 1592//2415
+f 1594//2416 1592//2416 1589//2416
+f 1598//2417 1597//2417 2005//2417
+f 1526//2418 1597//2418 1596//2418
+f 2005//2419 1597//2419 1526//2419 1525//2419
+f 1602//2420 2006//2420 1599//2420
+f 1600//2421 1609//2421 2007//2421 1826//2421
+f 2006//2422 1606//2422 1599//2422
+f 1603//2423 2008//2423 1604//2423
+f 2009//2424 1610//2424 2010//2424 2011//2424
+f 1603//2425 1608//2425 1607//2425 2008//2425
+f 2010//2426 1610//2426 1603//2426 1605//2426
+f 1599//2427 1608//2427 1600//2427
+f 1608//2428 1610//2428 1609//2428
+f 2007//2429 1609//2429 2012//2429
+f 2012//2430 1609//2430 1610//2430 2009//2430
+f 1788//2431 1491//2431 1490//2431 1611//2431
+f 1613//2432 1612//2432 2013//2432 1828//2432
+f 1631//2433 2013//2433 1612//2433
+f 1484//2434 1490//2434 1486//2434
+f 1829//2435 1625//2435 1627//2435 1613//2435
+f 1616//2436 1615//2436 930//2436 929//2436
+f 1627//2437 1614//2437 1613//2437
+f 1619//2438 1629//2438 1614//2438
+f 1614//2439 1629//2439 1630//2439
+f 1629//2440 1622//2440 1630//2440
+f 1637//2441 934//2441 933//2441
+f 1639//2442 1833//2442 1832//2442 934//2442
+f 1834//2443 1639//2443 1637//2443 1636//2443
+f 1845//2444 2014//2444 1846//2444
+f 1846//2445 2014//2445 1851//2445 1847//2445
+f 1376//2446 1375//2446 2015//2446 1380//2446
+f 2015//2447 1381//2447 1380//2447
+f 1749//2448 2016//2448 1417//2448 1414//2448 1413//2448
+f 1746//2449 1405//2449 1409//2449 1416//2449 1417//2449 2016//2449 2017//2449 2018//2449 2019//2449
+f 2020//2450 2021//2450 1745//2450 1746//2450 2019//2450 2022//2450
+f 2023//2451 2017//2451 2016//2451 1749//2451 1748//2451
+f 1379//2452 1381//2452 2015//2452 1375//2452 1377//2452 2024//2452 2025//2452 2026//2452
+f 1851//2453 2014//2453 1845//2453 1844//2453
+s 1
+f 2004//2454 924//2454 923//2454 1591//2454 1590//2454 1583//2454 1586//2454 1824//2454 1825//2454
+f 1823//2455 1566//2455 1565//2455 1809//2455 1820//2455
+f 1816//2456 1576//2456 1579//2456 1814//2456 1998//2456 1813//2456 1812//2456 1815//2456
+f 1996//2457 1561//2457 1562//2457 905//2457 904//2457 1991//2457 1990//2457
+f 1988//2458 1989//2458 2027//2458 1806//2458 1807//2458 1987//2458
+f 1985//2459 1802//2459 1801//2459 1986//2459 1528//2459 1531//2459
+f 1804//2460 1575//2460 1572//2460 1574//2460 1811//2460 1813//2460 1998//2460 1810//2460 1571//2460 1534//2460 1533//2460 1803//2460
+f 1805//2461 1808//2461 1540//2461 1539//2461 2027//2461 1989//2461 1543//2461 1546//2461
+f 1798//2462 1522//2462 1521//2462 1984//2462 2028//2462
+f 899//2462 914//2462 913//2462 900//2462
+f 1512//2463 1511//2463 889//2463 888//2463 1508//2463 1982//2463
+f 895//2464 1550//2464 2027//2464 896//2464
+f 1793//2464 1796//2464 2028//2464
+f 1789//2465 1788//2465 1611//2465 925//2465 928//2465 1784//2465 1785//2465
+f 1617//2466 1616//2466 929//2466 932//2466 1831//2466
+f 2028//2467 1796//2467 1795//2467 1983//2467
+f 1797//2468 1798//2468 2028//2468 1519//2468 1518//2468
+f 1927//2469 1238//2469 1237//2469 1240//2469 1246//2469 1703//2469 1799//2469 1800//2469 757//2469 760//2469
+f 1923//2470 1693//2470 741//2470 744//2470 1691//2470 1692//2471 723//2472 722//2470 1921//2470 1922//2470
+f 1783//2473 1782//2473 884//2473 883//2473 1786//2473 1790//2473 1789//2473 1785//2473
+f 1786//2474 1489//2474 1488//2474 1787//2474 1790//2474
+f 1506//2475 1502//2475 1501//2475 1500//2475 1792//2475 886//2475 885//2475 1495//2475 1481//2475 1480//2475 1980//2475 1981//2475
+f 1212//2476 1213//2476 712//2476 715//2476 1189//2476 1191//2476 1214//2476
+f 1696//2477 1698//2477 1924//2477
+f 1699//2478 730//2478 729//2478 733//2478 732//2478 737//2478 754//2478 753//2478 1700//2478
+f 1470//2479 870//2479 869//2479 1467//2479 874//2479 873//2479 1475//2479 1474//2479
+f 1196//2480 1165//2480 1164//2480 2029//2480 1197//2480 1194//2480 1195//2480
+f 1919//2481 1689//2481 1690//2481 1920//2481
+f 1915//2481 1179//2481 1178//2481 1198//2481 1197//2481 2029//2481
+f 1467//2482 1465//2482 1464//2482 875//2482 874//2482
+f 1151//2483 2030//2483 704//2483 703//2483
+f 1914//2484 1159//2484 1161//2484 2029//2484 1164//2484 1163//2484
+f 1184//2485 698//2485 700//2485 696//2485 695//2485 1181//2485 1182//2485
+f 689//2486 684//2486 683//2486 690//2486
+f 1680//2487 1913//2487 691//2487 690//2487 683//2487 687//2487
+f 1171//2488 1175//2488 2029//2488 1157//2488 1156//2488 1166//2488 1169//2488
+f 1673//2489 1120//2489 1113//2489 1116//2489
+f 1909//2490 1135//2490 1137//2490 2031//2490 1911//2490
+f 1911//2491 2031//2491 1138//2491 1141//2491 1910//2491
+f 1676//2492 1123//2492 1127//2492 1133//2492 1131//2492 1130//2492
+f 1774//2493 1773//2493 1778//2493
+f 1905//2494 1083//2494 1082//2494 1906//2494 1669//2494 1117//2494 1119//2494 1675//2494 1674//2494
+f 1898//2495 1902//2495 1901//2495 649//2495 648//2495
+f 1767//2496 855//2496 854//2496 1449//2496 852//2496 851//2496
+f 863//2497 859//2497 862//2497 1456//2498 1770//2499 1769//2497 864//2497
+f 642//2500 644//2500 646//2500 1078//2500 1077//2500 1076//2500 1073//2500
+f 1886//2501 1660//2501 1659//2501 1658//2501 1661//2501 2032//2501
+f 1890//2502 1893//2502 1662//2502 1665//2502 2032//2502
+f 1765//2503 843//2503 842//2503 1764//2503 1977//2503
+f 1433//2504 1434//2504 1753//2504 829//2504 832//2504
+f 1874//2505 1889//2505 2032//2505 1654//2505 1653//2505
+f 1876//2506 1875//2506 1020//2506 1023//2506 2033//2506 1894//2506
+f 1878//2507 2033//2507 1023//2507 1022//2507 1025//2507
+f 1880//2508 2033//2509 1878//2510 1877//2510 1879//2510
+f 1750//2511 825//2511 824//2511 1971//2511 1752//2511 1751//2511
+f 2018//2511 1407//2511 1406//2511 1745//2511 2021//2511 2020//2511 2022//2511 2019//2511
+f 1761//2512 1762//2512 1973//2512 1763//2512
+f 1759//2513 1972//2513 1760//2513 1758//2513
+f 1651//2514 1010//2514 1009//2514 1649//2514 1648//2514 1864//2514 989//2514 993//2514 1872//2514
+f 1657//2515 1394//2515 1397//2515 1747//2515 1412//2515 1411//2515 1884//2515
+f 2023//2516 1748//2516 1747//2516 1397//2516 1396//2516 818//2516 817//2516 1408//2516 1407//2516 2018//2516 2017//2516
+f 1857//2517 975//2517 977//2517 981//2517 980//2517 979//2517
+f 1868//2518 628//2518 627//2518 1867//2518 985//2518 984//2518 988//2518 1858//2518 1860//2518
+f 973//2519 972//2519 616//2519 615//2519 614//2519
+f 1641//2520 990//2520 989//2520 1864//2520 1862//2520 1861//2520
+f 1954//2521 1953//2521 1733//2521 1735//2521 1967//2521 1966//2522 1957//2523
+f 1956//2524 1355//2524 1358//2524 1728//2524
+f 2024//2525 1377//2525 1374//2525 1373//2525 1378//2525 1379//2525 2026//2525 2025//2525
+f 964//2526 1849//2526 602//2526 604//2526 1852//2526 1848//2526 959//2526 958//2526 962//2526 963//2526
+f 1962//2527 1368//2527 1367//2527 1729//2527 1959//2527 1958//2527 1365//2527 1343//2527 1342//2527 1947//2527
+f 1947//2528 1346//2528 1345//2528 1948//2528 1961//2528 1960//2528 1962//2528
+f 1354//2529 1952//2529 1352//2529 1351//2529 1951//2529 1353//2529
+f 1841//2530 949//2530 952//2530 1842//2530 1840//2530
+f 1722//2531 1725//2531 1332//2531 1331//2531 1336//2531 1723//2531
+f 1325//2532 802//2532 801//2532 1353//2532 1951//2532 1950//2532 1949//2532 1329//2532 1323//2532 1322//2532 1326//2532
+f 1943//2533 1719//2533 1718//2533 1720//2533 1942//2533
+f 1273//2534 1275//2534 1271//2534 1270//2534 1935//2534 1278//2534 776//2534 775//2534 1284//2534 1285//2534
+f 1299//2535 1317//2535 795//2535 794//2535 1298//2535 1297//2535
+f 1286//2535 1289//2535 1293//2535 1929//2535
+f 1931//2536 765//2536 766//2536 780//2536 783//2536 777//2536 779//2536 1707//2536 1706//2536
+f 1709//2537 1708//2537 784//2537 787//2537 763//2537 762//2537 1260//2537 1259//2537 768//2537 767//2537
+f 1264//2538 773//2538 772//2538 1704//2538 1709//2538 767//2538 770//2538 1262//2538
+f 1941//2539 1717//2539 1716//2539 1312//2539 1310//2539 1311//2539 1306//2539 1305//2539 1940//2539 1939//2539 1938//2539 1933//2539 1710//2539 1712//2539 1714//2539 1713//2539 1715//2539
+f 2004//2540 2003//2540 2002//2540 1593//2540 921//2540 924//2540
+f 1979//2541 1504//2541 1505//2541 1981//2541 1980//2541
+f 1588//2542 917//2542 916//2542 1824//2542 1586//2542 1585//2542
+f 2001//2543 2000//2543 919//2543 918//2543 1818//2543 1817//2543 1997//2543 909//2543 908//2543 1566//2543 1823//2543 1822//2543
+f 1992//2544 1554//2544 902//2544 901//2544 1991//2544 904//2544 907//2544 1995//2544 1994//2544 1993//2544
+f 1623//2545 1628//2545 1618//2545 1621//2545 1633//2545 1624//2545
+f 1806//2546 2027//2546 1550//2546 1551//2546
+f 1793//2546 2028//2546 1984//2546 1794//2546
+f 914//2547 899//2547 898//2547 1552//2547 1999//2547 1582//2547 911//2547
+f 1636//2548 1638//2548 936//2548 935//2548 1832//2548 1833//2548 1834//2548
+f 1542//2549 892//2549 891//2549 896//2549 2027//2549 1539//2549
+f 2008//2550 1607//2550 1606//2550 2006//2550 1602//2550 1601//2550 1827//2550 2011//2550 2010//2550 1605//2550 1604//2550
+f 2012//2551 2009//2551 2011//2551 1827//2551 1826//2551 2007//2551
+f 1828//2552 2013//2552 1631//2552 1632//2552 1635//2552 1634//2552 1633//2552 1621//2552 1620//2552 1626//2552 1625//2552 1829//2552
+f 1509//2553 1512//2553 1982//2553 1513//2553
+f 1702//2554 1242//2554 1233//2554 1232//2554 1928//2554 1927//2554 760//2554 759//2554
+f 1926//2554 739//2554 738//2554 1700//2554 753//2554 756//2554 1231//2554 1230//2554
+f 1598//2555 2005//2555 1525//2555 1527//2555 1248//2555 1247//2555 1781//2555 1595//2555
+f 1830//2556 1831//2556 932//2556 931//2556 1493//2556 1791//2556
+f 723//2472 1692//2471 725//2557 724//2557
+f 1925//2558 1701//2558 1223//2558 1222//2558
+f 749//2559 1925//2559 1222//2559 745//2559 747//2559
+f 1229//2559 752//2559 751//2559 1226//2559 1220//2559 1219//2559 1227//2559
+f 1515//2560 1519//2560 2028//2560 1983//2560
+f 1477//2561 879//2561 876//2561 878//2561 1468//2561 1470//2561 1474//2561 1476//2561
+f 726//2562 1921//2562 722//2562 721//2562 727//2562
+f 713//2563 712//2563 1213//2563 1193//2563
+f 1695//2564 1924//2564 1698//2564 717//2564 716//2564 1920//2564 1690//2564 1202//2564 1203//2564 1205//2564 1694//2564
+f 731//2565 730//2565 1699//2565 735//2565
+f 701//2566 704//2566 2030//2567 1688//2568 1687//2566 1918//2566
+f 1681//2566 705//2566 708//2566 1185//2566 711//2566 710//2566 1917//2566
+f 1688//2568 2030//2567 680//2569 682//2569 1682//2569 1683//2569 1685//2569 1686//2569
+f 2030//2570 1151//2571 1150//2572
+f 1149//2573 1679//2573 678//2573 677//2573 680//2573 2030//2570 1150//2572
+f 1175//2574 1176//2574 1172//2574 1174//2574 693//2574 692//2574 1915//2574 2029//2574
+f 1157//2575 2029//2575 1161//2575 1158//2575
+f 1119//2576 666//2576 668//2576 1121//2576 1120//2576 1673//2576 1675//2576
+f 1134//2577 1132//2577 1133//2577 1127//2577 1126//2577
+f 1138//2578 2031//2578 669//2578 672//2578 1139//2578
+f 1144//2579 1677//2579 673//2579 676//2579 1912//2579 1678//2579 1145//2579
+f 1776//2580 1775//2580 1771//2580 1774//2580 1778//2580 1780//2580
+f 1137//2581 1136//2581 1085//2581 1088//2581 2031//2581
+f 1087//2582 1907//2582 2031//2582 1088//2582
+f 1093//2582 1670//2582 650//2582 649//2582 1901//2582 1900//2582 1903//2582 1089//2582
+f 1671//2583 651//2583 653//2583 654//2583 665//2583 1908//2583 1096//2583 1090//2583 1089//2583 1903//2583 1107//2583 1106//2583 1904//2583 664//2583 663//2583 1103//2583 1105//2583 658//2583 660//2583 1112//2583 1111//2583 1110//2583 1142//2583 670//2583 669//2583 2031//2583 1907//2583
+f 1079//2584 656//2584 655//2584 1672//2584 661//2584 664//2584 1904//2584
+f 1768//2585 1450//2585 1449//2585 854//2585 858//2585
+f 860//2586 859//2586 863//2586
+f 850//2587 1978//2587 1766//2587 847//2587
+f 1770//2499 1456//2498 1455//2588 1452//2588 1451//2588
+f 1072//2589 1069//2589 1068//2589 1668//2589 1897//2589
+f 1897//2590 1668//2590 637//2590 636//2590 639//2590 641//2590 1896//2590
+f 1976//2591 1975//2591 1441//2591 1444//2591 1978//2591 850//2591 849//2591
+f 1445//2592 844//2592 846//2592 1765//2592 1977//2592
+f 1066//2593 1067//2593 1064//2593 1063//2593 1895//2593
+f 1885//2594 1886//2594 2032//2594 1665//2594 1664//2594
+f 1666//2595 633//2595 635//2595 1062//2595 1054//2595 1053//2595 1058//2595 1057//2595 1667//2595
+f 1974//2596 1435//2596 1437//2596 838//2596 837//2596 1440//2596 1439//2596
+f 1888//2597 1891//2597 1890//2597 2032//2597 1889//2597
+f 1882//2598 1894//2598 2033//2598 1881//2598
+f 1881//2599 2033//2599 1026//2599 1029//2599
+f 2033//2509 1880//2508 1027//2600 1026//2600
+f 1053//2601 1047//2601 631//2601 630//2601 1052//2601 1051//2601 1055//2601 1058//2601
+f 1432//2602 1431//2602 827//2602 826//2602 1750//2602 1751//2602 1753//2602 1434//2602 834//2602 836//2602
+f 1017//2603 1013//2603 1012//2603 1019//2603 1018//2603 1873//2603 1015//2603
+f 1661//2604 1041//2604 1040//2604 1039//2604 1652//2604 2032//2604
+f 2032//2605 1652//2605 1654//2605
+f 1757//2606 1738//2606 822//2606 821//2606 833//2606 1760//2606 1972//2606 1424//2606 1426//2606 1973//2606 1762//2606 1755//2606 1754//2606
+f 1642//2607 621//2607 620//2607 623//2607 622//2607 983//2607 999//2607 1645//2607 624//2607 626//2607 1866//2607 995//2607 997//2607 1643//2607
+f 1871//2608 1869//2608 1003//2608 1006//2608 1647//2608 1646//2608 1868//2608 1860//2608 1859//2608
+f 1035//2609 1034//2609 1033//2609 1883//2609 1656//2609 1655//2609
+f 1744//2610 1743//2610 1742//2610 1740//2610 1739//2610 1741//2610 814//2610 813//2610 815//2610 1737//2610
+f 1385//2611 804//2611 806//2611 1856//2611 1382//2611
+f 810//2612 809//2612 811//2612 814//2612 1741//2612 1736//2612
+f 1969//2613 1383//2613 1382//2613 1856//2613 611//2613 610//2613 609//2613 1855//2613 1730//2613 1732//2613 1968//2613
+f 1966//2522 1963//2614 1965//2614 1359//2614 1356//2614 1355//2614 1956//2614 1955//2614 1957//2523
+f 1732//2614 1731//2614 1386//2614 1388//2614 1968//2614
+f 1843//2615 954//2615 953//2615 1848//2615 1852//2615 1850//2615 1844//2615
+f 1946//2616 1724//2616 1721//2616 1723//2616 1336//2616 1338//2616 1944//2616 1945//2616
+f 949//2617 1841//2617 950//2617
+f 1719//2618 1943//2618 798//2618 800//2618 1321//2618
+f 1949//2619 1727//2619 1726//2619 1348//2619 1327//2619 1329//2619
+f 1837//2620 601//2620 600//2620 598//2620 597//2620 1640//2620
+f 1838//2621 1839//2621 948//2621 945//2621 947//2621 943//2621 942//2621
+f 1282//2622 1279//2622 1278//2622 1935//2622 1934//2622 1283//2622
+f 1937//2622 1290//2622 1292//2622 1936//2622 1253//2622 1251//2622 1250//2622 1255//2622 1258//2622
+f 1298//2623 794//2623 797//2623 1295//2623
+f 1929//2623 1293//2623 1294//2623 1937//2623 1258//2623 1257//2623 1930//2623
+f 1303//2624 781//2624 780//2624 766//2624 764//2624 763//2624 787//2624 786//2624
+f 792//2625 791//2625 790//2625 789//2625 1939//2625 1940//2625
+f 1711//2626 1714//2626 1712//2626
+f 594//2627 591//2627 593//2627 941//2627 940//2627 939//2627 1835//2627
+o Trunks
+v -23.579279 27.080400 9.894612
+v -23.453920 27.002068 11.016746
+v -23.652891 27.118038 10.827804
+v -23.088253 28.951912 6.271603
+v -22.955896 29.015137 3.746106
+v -23.056793 28.953346 3.082325
+v -23.235294 28.861229 5.183768
+v -22.544960 28.628765 6.464015
+v -22.516716 28.386406 10.561586
+v -22.481543 28.364267 10.596128
+v -22.173687 28.416300 6.443893
+v -22.493223 28.129063 10.753654
+v -22.493622 28.005239 10.759019
+v -22.500225 27.988096 10.848068
+v -22.528864 27.411318 11.234368
+v -22.324291 27.376741 8.475177
+v -22.029253 27.832743 4.495832
+v -22.824718 27.238886 11.193714
+v -45.876446 -5.684017 14.900688
+v -46.509045 -4.650781 0.074624
+v -45.442249 -5.268806 0.078199
+v -45.138878 -6.095925 14.561125
+v -45.150074 -6.089786 14.568802
+v -45.579700 -5.848361 14.733410
+v -45.883793 -4.807612 14.764601
+v -46.513264 -3.409381 0.027216
+v -45.442993 -2.792502 0.042765
+v -46.414082 -3.351553 0.023138
+v -45.146362 -4.314254 14.203953
+v -44.374367 -3.415545 0.047439
+v -44.867130 -4.461836 14.045414
+v -44.385399 -4.724748 13.859031
+v -44.376549 -4.651096 0.034525
+v -44.376408 -4.574157 0.031579
+v -44.387131 -5.628327 14.069757
+v -45.066509 -6.051126 14.516901
+v -6.220116 30.486355 13.260275
+v -6.245219 30.500782 13.261875
+v -7.237264 29.372709 6.747080
+v -6.853880 29.153313 6.726305
+v -6.627611 28.239119 3.674496
+v -5.441856 29.934158 12.804305
+v -7.143304 27.547411 -0.119969
+v -7.120660 27.534306 -0.121763
+v -7.060029 27.620977 0.345066
+v -8.244748 29.561346 0.100776
+v -8.248126 29.374361 0.082725
+v -7.637046 29.748592 4.102947
+v -6.213461 31.526571 13.448093
+v -5.376981 32.015671 13.303810
+v -7.086539 30.252188 0.140953
+v -6.034048 31.634745 13.474751
+v -4.573460 31.469391 12.839063
+v -5.950641 29.597202 0.051165
+v -5.960218 28.241644 -0.080038
+v -4.597463 30.422054 12.584218
+v -6.349817 28.006498 -0.072262
+v -42.071896 17.544733 9.683618
+v -42.455814 16.902033 0.300833
+v -42.206600 16.757387 0.292692
+v -41.216347 16.696556 5.838950
+v -41.143383 17.004499 9.638993
+v -42.055550 18.634573 10.051561
+v -42.452065 18.213650 0.353861
+v -42.050438 18.226994 10.188848
+v -41.320709 18.868479 0.403667
+v -42.033108 18.455896 0.359813
+v -41.137390 19.163218 9.951020
+v -40.192257 18.216364 0.373025
+v -40.216511 18.642673 10.203009
+v -40.216259 18.008705 10.415907
+v -40.205708 17.864830 6.119074
+v -40.204655 17.963205 5.633871
+v -40.192062 18.076311 0.362290
+v -40.781693 17.118120 8.260449
+v -40.411316 17.329935 8.214794
+v -40.581184 17.363941 10.112260
+v -23.279104 16.867805 14.127663
+v -23.316969 18.491802 -0.863498
+v -22.208580 17.841879 -0.782265
+v -22.499252 16.395702 14.323514
+v -23.281607 17.811163 13.900002
+v -23.291702 18.334473 9.985667
+v -23.295774 18.170370 8.064279
+v -23.317167 18.572483 -0.876525
+v -22.378977 19.119802 8.128695
+v -22.643177 18.702551 10.071011
+v -22.489613 18.278732 13.870624
+v -21.370445 19.095461 4.566310
+v -21.903854 19.400803 4.595573
+v -21.705564 17.791615 14.070538
+v -21.302155 19.104061 4.260099
+v -21.093477 18.500620 -0.912548
+v -21.092388 18.612997 -0.930723
+v -21.092510 18.676498 -0.922855
+v -21.717649 16.852057 14.295747
+v -21.356445 -23.735336 8.746932
+v -22.903564 -23.053246 0.064800
+v -21.730579 -23.739481 0.315887
+v -20.579145 -24.222532 7.698297
+v -21.344507 -22.655766 8.782574
+v -22.602076 -21.920187 1.720109
+v -22.607342 -22.522211 1.708029
+v -22.906252 -22.828768 0.043271
+v -21.363209 -23.629791 8.706011
+v -20.580021 -21.997513 7.591665
+v -21.750988 -21.121304 0.066524
+v -22.366753 -21.444534 -0.001036
+v -20.476818 -22.055504 7.414693
+v -19.787977 -22.444508 6.318135
+v -20.588963 -21.825621 0.317568
+v -20.584177 -23.125257 0.440499
+v -19.798584 -22.509596 6.243608
+v -19.819286 -23.569862 6.160837
+v -19.913164 -23.643986 6.307820
+v -48.837872 17.848213 0.088072
+v -48.610264 17.714155 0.076306
+v -48.568710 17.689402 0.080579
+v -48.550323 17.343775 7.765417
+v -48.875988 17.408913 10.690351
+v -49.814358 17.950924 10.984059
+v -48.837902 19.165255 0.253509
+v -49.784988 19.000208 10.788262
+v -48.807278 19.532391 10.290268
+v -47.695972 19.810816 0.360055
+v -48.477524 19.349014 10.185814
+v -47.642666 19.779846 0.357353
+v -48.545258 17.547913 10.155554
+v -48.419720 17.619164 10.172074
+v -48.443401 17.631273 10.472308
+v -37.838993 -40.914848 4.934037
+v -37.719978 -40.909248 5.407894
+v -36.862408 -41.415955 5.461104
+v -37.030655 -40.902596 7.994168
+v -37.971195 -40.349960 7.916796
+v -38.025402 -39.031116 9.230691
+v -37.673409 -40.327454 1.306312
+v -37.968300 -40.279819 7.858359
+v -36.499687 -39.902485 0.000137
+v -37.262432 -40.330017 0.048119
+v -37.640976 -40.308640 1.307606
+v -37.134708 -38.458870 9.560814
+v -36.128662 -39.178547 8.452769
+v -35.385288 -40.556885 0.051634
+v -36.019024 -40.498158 7.261641
+v -35.761108 -41.051178 4.350071
+v -35.641300 -40.707817 2.971752
+v -35.386379 -40.794731 0.074257
+v -36.008854 -40.353764 7.139670
+v -36.744251 -41.430603 5.118556
+v -36.671227 -41.827965 3.294260
+v -36.472916 -41.449356 4.393691
+v -18.095806 -14.467531 -0.069907
+v -17.042664 -15.076263 -0.040447
+v -17.750517 -14.738133 13.466195
+v -18.509375 -14.299224 13.391636
+v -18.090641 -13.249253 -0.238060
+v -18.490437 -13.411957 12.775174
+v -17.684956 -12.949441 12.215223
+v -17.025290 -12.634325 -0.371967
+v -17.576117 -12.952281 -0.305575
+v -15.963722 -13.246540 -0.343933
+v -16.900698 -13.404904 12.293560
+v -16.947737 -14.306033 12.927991
+v -15.975945 -14.470281 -0.179084
+v -15.967708 -13.667130 -0.290189
+v -33.741245 -33.375137 12.363320
+v -34.293232 -32.473568 -0.573456
+v -33.144352 -33.132191 -0.724254
+v -32.860748 -33.905407 12.814800
+v -32.930099 -33.868198 12.880585
+v -33.789593 -32.261723 11.273399
+v -34.295525 -31.137913 -0.571613
+v -34.295185 -31.198360 -0.566222
+v -33.461952 -30.653990 -0.588517
+v -34.036850 -30.985195 -0.598152
+v -34.249310 -31.111195 -0.571622
+v -32.903980 -31.687271 10.750966
+v -33.141560 -30.468472 -0.590974
+v -31.989384 -31.325914 1.363417
+v -32.179703 -31.022385 -0.659011
+v -33.055729 -30.518581 -0.589903
+v -31.997370 -32.273849 11.363779
+v -31.994308 -32.856033 4.871351
+v -31.992836 -32.031731 4.855771
+v -32.000019 -33.383564 12.447850
+v -32.713558 -33.822639 12.845563
+v -32.790310 -32.924923 -0.768478
+v -32.609894 -32.972839 1.428022
+v -17.142887 -8.281096 11.799264
+v -17.896688 -9.138254 6.849019
+v -17.508389 -9.360464 6.827979
+v -17.354683 -9.981482 4.754874
+v -17.164465 -10.090364 4.744435
+v -16.213799 -8.731387 12.064164
+v -18.503490 -8.669046 2.837960
+v -18.396187 -8.798380 3.548307
+v -18.312611 -8.747198 4.098137
+v -17.142601 -8.264994 11.800786
+v -17.150196 -7.256321 11.727936
+v -19.004524 -9.050340 -0.456602
+v -19.004818 -9.065743 -0.458186
+v -16.219400 -6.686323 12.021034
+v -17.856234 -8.374788 -0.581889
+v -16.723387 -9.063054 -0.840916
+v -16.756069 -9.044903 -0.841691
+v -15.299515 -7.127393 12.380532
+v -16.700718 -10.389120 -0.673126
+v -15.290490 -7.921237 12.438956
+v -15.291862 -8.134953 12.419552
+v -17.125288 -10.085432 4.568770
+v -16.914320 -10.515698 -0.646963
+v -35.962852 -27.673372 8.426420
+v -36.133854 -28.395084 -0.479611
+v -35.242973 -28.914986 -0.539326
+v -35.068645 -28.179235 8.539850
+v -35.092110 -26.068266 7.317799
+v -35.244041 -26.312544 -0.594982
+v -35.531769 -26.478308 -0.568549
+v -35.380344 -26.234852 7.317629
+v -35.184746 -26.124245 7.194435
+v -34.117867 -26.964540 -0.653984
+v -34.326534 -26.844297 -0.656561
+v -34.139156 -26.590315 7.974997
+v -34.137829 -27.678656 7.970841
+v -34.116344 -28.267399 -0.631410
+v -34.137630 -27.188700 7.643051
+v -34.251461 -28.345764 -0.630371
+v -9.193234 35.887550 14.024123
+v -9.227463 37.355602 0.472514
+v -8.171875 36.746998 0.452924
+v -8.433821 35.443748 14.065824
+v -8.590410 35.533283 14.075722
+v -9.195232 36.780479 13.969711
+v -9.230011 38.583347 0.484304
+v -8.171091 39.204258 0.476443
+v -8.431291 37.226177 13.980683
+v -7.111074 38.591408 0.456755
+v -7.669878 36.773403 14.046179
+v -7.114415 37.361908 0.445025
+v -7.674844 35.881706 14.100169
+v -8.251799 35.547283 14.091750
+v -30.617990 -33.851028 12.606201
+v -32.208443 -33.270699 -0.844918
+v -31.841557 -33.488224 -0.874404
+v -29.756437 -34.362972 12.494333
+v -30.601265 -32.845688 12.670797
+v -30.602562 -33.154041 12.672443
+v -31.787966 -30.809196 -0.653484
+v -29.719652 -32.356869 12.638378
+v -29.246393 -32.641045 12.623814
+v -28.854208 -32.875641 12.572739
+v -30.632189 -31.501869 -0.746986
+v -30.659061 -32.837803 -0.857146
+v -28.875988 -33.874241 12.477807
+v -18.844215 -19.156713 0.350742
+v -18.656050 -19.269737 0.391425
+v -18.637611 -19.616282 8.096703
+v -18.747423 -19.594318 9.082966
+v -19.767557 -19.059593 10.653704
+v -18.820410 -17.920029 0.240420
+v -19.875471 -18.103893 11.976213
+v -19.034054 -17.635340 11.850462
+v -17.741840 -17.311590 0.303728
+v -18.066259 -17.492483 0.345422
+v -18.654713 -17.826269 0.258404
+v -18.617878 -17.822834 11.249084
+v -17.688286 -17.343111 0.305304
+v -18.635561 -19.533653 9.064155
+v -33.608570 -41.162102 0.092085
+v -32.588512 -41.767345 0.139815
+v -32.483326 -41.830612 0.139473
+v -32.983669 -40.303936 7.672508
+v -33.576847 -40.039856 7.104813
+v -33.922916 -39.818932 7.184402
+v -33.973515 -38.482635 8.419521
+v -33.598125 -39.865143 -0.031621
+v -33.598164 -39.868572 -0.030993
+v -33.945965 -39.102417 7.756051
+v -32.461853 -39.243504 -0.183865
+v -33.640965 -38.275043 8.510718
+v -33.072624 -37.855015 9.011766
+v -32.124950 -38.438824 8.810907
+v -31.336298 -39.901112 -0.101912
+v -32.064182 -39.655838 8.171579
+v -31.345922 -41.195927 0.063240
+v -31.345650 -40.938770 0.049088
+v -31.343615 -40.494835 0.006863
+v -32.056831 -39.373779 8.075830
+v -50.781063 -19.329819 -0.052771
+v -49.679180 -19.966694 -0.027367
+v -50.322025 -19.659618 12.238853
+v -50.908848 -19.326796 13.436084
+v -51.205723 -19.156994 13.769691
+v -50.780632 -18.057505 -0.066716
+v -51.212254 -18.233158 13.982315
+v -50.356239 -17.744223 12.891719
+v -49.676548 -17.419546 -0.077577
+v -50.479630 -17.883547 -0.063591
+v -50.778561 -17.984520 13.605780
+v -49.387611 -18.194065 10.946128
+v -48.571587 -18.056143 -0.060047
+v -49.361050 -19.197920 10.587859
+v -48.574314 -19.330894 -0.023281
+v -48.841572 -19.484379 -0.018653
+v -14.209597 35.081184 6.954392
+v -14.486732 35.533836 0.459200
+v -13.427380 34.920284 0.459238
+v -13.254261 34.448292 8.723848
+v -13.812243 34.836784 7.271484
+v -14.263078 36.260551 5.746524
+v -14.488356 36.760956 0.472252
+v -13.426832 37.373074 0.485350
+v -13.804247 36.551704 5.529951
+v -13.305723 36.751774 6.267077
+v -12.366836 36.755501 0.485349
+v -12.373505 35.963978 8.835650
+v -12.369001 35.529839 0.472289
+v -12.376149 34.869835 9.951415
+v -32.121597 -7.899036 0.067664
+v -31.553186 -8.210142 0.091753
+v -30.963129 -8.523740 0.153001
+v -29.373377 -6.251190 12.393419
+v -30.293983 -5.820827 12.069649
+v -30.294077 -5.293928 12.057142
+v -30.315493 -4.828393 11.905423
+v -32.120426 -6.574622 0.045452
+v -29.439598 -4.308910 11.883551
+v -30.965149 -5.882584 0.137460
+v -31.118826 -5.974244 0.132193
+v -31.928198 -6.460089 0.049907
+v -28.534039 -4.756165 12.174314
+v -29.816380 -6.499418 0.267071
+v -30.397102 -6.186515 0.206785
+v -28.497252 -5.710804 12.484266
+v -29.811581 -7.813731 0.270040
+v -29.046900 -6.042076 12.499674
+v -24.698376 9.923915 13.381031
+v -25.243994 9.010536 0.046541
+v -24.375002 8.527964 0.254750
+v -24.178600 8.416474 0.275530
+v -23.921101 9.503238 13.686275
+v -24.610867 9.875204 13.400753
+v -24.672089 10.842036 13.997622
+v -25.244217 10.234688 0.004793
+v -25.243902 9.967224 0.020433
+v -25.244434 9.097927 0.033158
+v -24.183849 10.847454 0.002146
+v -24.375004 10.737153 0.010884
+v -23.900593 11.302872 14.754352
+v -23.124311 10.237333 0.025089
+v -23.334118 10.981343 14.877954
+v -23.161129 10.884499 14.947678
+v -23.123276 9.024055 0.203347
+v -23.124237 10.166923 0.029202
+v -23.158939 10.001316 14.482334
+v -20.527100 29.598452 7.778286
+v -20.646795 29.785299 6.677860
+v -21.476799 30.260324 6.726173
+v -21.493187 30.963240 0.237541
+v -20.380424 30.328203 0.155788
+v -21.475456 30.408188 7.445020
+v -21.470592 30.537897 9.679230
+v -21.470951 30.830542 9.790533
+v -21.474159 30.701290 8.277206
+v -21.493378 31.062513 0.245579
+v -20.192799 31.203489 10.371691
+v -19.707378 30.947744 10.204739
+v -19.676228 30.925179 10.233060
+v -19.428360 31.731585 4.205224
+v -19.518579 31.720222 4.609772
+v -19.661203 31.801865 4.617595
+v -19.974003 31.318415 8.836484
+v -20.255276 31.240931 10.364480
+v -19.266771 30.973244 0.177592
+v -19.266851 31.402193 0.212304
+v -19.684511 30.737606 10.422260
+v -19.714220 29.791443 11.079917
+v -20.174009 29.527777 11.039598
+v -19.813057 29.732941 11.092828
+v -48.481853 -24.518824 11.504538
+v -48.767319 -24.392969 9.902568
+v -49.579010 -24.177383 0.020481
+v -49.440334 -24.259222 0.023697
+v -47.670712 -25.001616 11.369621
+v -48.614403 -24.363951 10.757917
+v -48.612999 -23.575718 10.743023
+v -49.552086 -21.828974 -0.004821
+v -48.612083 -23.328127 9.984043
+v -48.612728 -23.460369 10.638380
+v -47.927490 -22.882652 9.631938
+v -49.426834 -21.760727 -0.003475
+v -47.076412 -23.391090 9.492077
+v -48.340542 -22.414349 0.021852
+v -48.349968 -23.658829 0.035341
+v -46.966053 -24.463245 10.385112
+v -19.856728 1.415240 0.496602
+v -18.809835 0.771739 0.408384
+v -19.669653 3.395261 13.353561
+v -20.442629 3.918747 13.715834
+v -20.457045 4.858169 14.114417
+v -19.856045 2.644778 0.584177
+v -20.440281 4.336318 13.698577
+v -18.821533 3.237011 0.584504
+v -19.732126 5.307095 14.294151
+v -18.942848 4.771098 13.681164
+v -17.776279 2.608091 0.497391
+v -17.763838 1.372420 0.408848
+v -18.874479 3.855747 12.942379
+v -18.874439 3.753767 12.946289
+v -7.743777 7.958952 11.273180
+v -7.412193 7.824009 0.480200
+v -7.305485 7.762404 0.469250
+v -7.286319 7.707808 8.757800
+v -6.928601 7.484284 11.959842
+v -6.942152 7.492174 11.948580
+v -7.734649 8.540994 10.976127
+v -7.598323 8.341953 6.538731
+v -7.464473 9.076225 2.181921
+v -7.416440 9.095774 0.618440
+v -7.412571 7.924857 0.492520
+v -7.734827 8.503759 10.981925
+v -7.164510 9.249308 2.132933
+v -6.609575 9.591541 6.238400
+v -6.478792 9.654013 3.742928
+v -6.949529 9.365729 0.646014
+v -6.038031 9.239599 6.658109
+v -5.978842 8.967461 10.972714
+v -5.657419 9.021790 6.637485
+v -5.796120 7.923162 8.508221
+v -5.499117 8.382202 4.502380
+v -5.980150 8.560881 10.990325
+v -6.049416 8.381028 11.924560
+v -6.065429 7.968682 12.140550
+v -6.450862 7.742795 12.065072
+v -24.626234 42.441174 15.248079
+v -25.266644 43.487167 0.238892
+v -24.190447 42.867229 0.163986
+v -23.879534 42.019550 15.006823
+v -24.645651 43.352554 14.829714
+v -25.259527 44.716145 0.457419
+v -24.121386 43.712906 14.350779
+v -23.902082 43.889961 13.930318
+v -24.181305 45.322388 0.600376
+v -23.110106 44.705395 0.525830
+v -23.120531 43.468067 13.579183
+v -23.112144 43.479218 0.307967
+v -23.120979 43.285683 13.778386
+v -23.122065 42.563053 13.466141
+v -23.811007 42.063301 14.945803
+v -23.389271 42.383648 13.831565
+v 5.908811 37.672142 -1.002958
+v 6.239537 37.474354 -1.053907
+v 8.034115 40.039711 12.763598
+v 7.536100 40.324871 12.791243
+v 7.536190 40.338005 12.842314
+v 7.256919 40.474079 12.765476
+v 5.189653 38.123352 -0.810340
+v 7.240388 41.121658 12.641870
+v 7.230174 41.344833 12.569496
+v 5.241125 39.420475 -0.500270
+v 7.318154 40.716850 13.163700
+v 8.069597 41.870396 13.036780
+v 7.820040 41.612968 11.115313
+v 7.529940 41.441284 11.129137
+v 7.524965 41.308582 8.843351
+v 6.328501 40.074379 -0.368894
+v 5.583409 39.624550 -0.489916
+v 8.798752 41.395061 12.713658
+v 8.305508 41.677235 12.741811
+v 8.910554 41.547050 13.751802
+v 7.521660 40.944366 7.072695
+v 8.187078 40.563534 7.033963
+v 7.372696 39.456436 -0.528036
+v 8.965080 41.057682 14.240376
+v 8.915424 41.418400 13.792771
+v 7.340181 38.160755 -0.869361
+v 8.380266 40.261963 8.810040
+v 8.623058 40.213364 11.052600
+v 8.336397 40.043709 11.089760
+v -37.208935 -27.303049 8.492176
+v -37.571785 -27.910475 -0.375634
+v -36.440098 -28.570896 -0.451490
+v -36.266075 -27.836439 8.611779
+v -37.571350 -26.602362 -0.403687
+v -37.236233 -26.246618 7.792376
+v -36.441174 -25.951252 -0.507514
+v -36.293213 -25.713362 7.198440
+v -12.344372 4.247906 10.868314
+v -12.370937 5.387306 0.350476
+v -11.245410 4.738165 0.331607
+v -11.463290 3.654149 11.654504
+v -12.347060 5.317863 10.674811
+v -12.373627 6.695070 0.373345
+v -12.344593 4.313741 10.832433
+v -11.245276 7.352883 0.393131
+v -11.445529 7.237896 0.376624
+v -11.444860 5.835618 10.751391
+v -10.115261 6.701734 0.358360
+v -10.790554 7.092346 0.369701
+v -10.985577 5.549011 10.876505
+v -10.563744 5.242650 11.264908
+v -10.118398 5.392481 0.335503
+v -10.590854 4.144630 11.847136
+v 2.159099 42.947269 8.894552
+v 2.913747 42.867889 0.473933
+v 3.513968 42.513969 0.451945
+v 4.049571 42.203278 0.314666
+v 3.018624 42.409481 9.574013
+v 2.920862 44.158207 0.556370
+v 2.915676 43.875004 0.578672
+v 2.143118 44.022671 9.207459
+v 4.054475 44.794598 0.533924
+v 2.975239 44.524208 10.177590
+v 5.166184 44.135948 0.613743
+v 5.067327 44.195549 0.595628
+v 4.356565 44.615627 0.555549
+v 3.800913 43.980267 10.821941
+v 3.827928 42.940426 10.530731
+v 5.185894 42.839039 0.355242
+v 5.164741 43.730133 0.589836
+v 5.161359 43.982388 0.636734
+v 5.059642 42.767151 0.335877
+v -15.090939 7.875531 0.412143
+v -14.034905 7.237935 0.393940
+v -14.860917 9.758302 12.830141
+v -15.666969 10.336861 13.408661
+v -15.670290 10.777603 13.519219
+v -15.696062 11.349132 14.139258
+v -15.696107 11.352648 14.140532
+v -15.085541 9.104025 0.394914
+v -15.090887 8.356075 0.451135
+v -15.090425 8.047873 0.415152
+v -14.041833 9.720986 0.498226
+v -15.664968 11.371012 14.143388
+v -14.947788 11.780523 14.138021
+v -12.996952 9.110184 0.571400
+v -13.504287 9.413809 0.599053
+v -14.091018 11.138759 12.935803
+v -12.979310 7.851414 0.424678
+v -14.068379 10.917169 12.687676
+v -14.047667 10.142181 12.485231
+v -13.313147 7.652922 0.396365
+v 1.100424 30.291967 -0.679764
+v 2.269699 29.616135 -0.652132
+v 1.748954 29.864887 9.284302
+v 1.439661 30.045330 8.957931
+v 0.857628 30.384703 8.380198
+v 0.822311 30.405151 8.372739
+v 1.110478 31.646042 -1.007009
+v 0.833311 30.756985 8.014694
+v 0.832883 30.926916 8.028608
+v 0.835848 31.230038 7.932112
+v 0.835188 31.534008 7.953584
+v 2.302082 32.333248 -1.270033
+v 2.142702 32.241150 -1.269603
+v 1.819468 32.102711 7.938806
+v 3.487823 31.650801 -1.263656
+v 1.966242 32.019058 7.924722
+v 2.750950 31.526257 8.674945
+v 3.464700 30.287025 -0.951786
+v 3.487780 31.568611 -1.263080
+v 2.744131 31.337303 8.766913
+v 2.716069 30.413557 9.145403
+v 2.585922 30.336121 9.098845
+v -9.905503 17.176996 13.201682
+v -10.456272 18.076580 0.293381
+v -9.310213 17.400265 0.572210
+v -9.051728 16.695530 12.912127
+v -9.437050 16.914705 13.000940
+v -9.903226 18.165024 13.296437
+v -10.465852 19.414772 0.124056
+v -9.317937 20.068907 0.203424
+v -9.511752 19.955128 0.217906
+v -9.049308 18.690823 13.027660
+v -8.174612 19.384190 0.398680
+v -8.184403 18.222078 12.658533
+v -8.177158 18.046654 0.675444
+v -8.186122 17.219021 12.562115
+v -8.222029 18.020544 0.678749
+v -8.272795 17.167131 12.589539
+v -22.048010 19.768019 5.706248
+v -20.179678 20.797665 13.734714
+v -20.716904 21.010801 13.398571
+v -21.035492 21.170092 13.326653
+v -22.194157 19.852554 5.717665
+v -21.003523 22.126917 13.515811
+v -23.187807 20.013674 -0.836821
+v -23.188087 20.001106 -0.838389
+v -22.662474 20.417021 2.617436
+v -21.043180 21.398422 13.270805
+v -20.098209 22.713158 14.361979
+v -22.055637 20.693983 -0.709390
+v -19.271311 22.354988 14.870458
+v -20.952997 20.068848 -0.744928
+v -20.966204 18.754551 -0.908371
+v -19.300400 21.419840 14.572164
+v -17.431618 -22.788326 4.146405
+v -17.563953 -23.009861 0.912217
+v -17.553715 -23.015574 0.914390
+v -17.470163 -23.063364 0.919294
+v -17.334875 -22.847698 4.108254
+v -17.376759 -21.495371 5.451606
+v -17.567785 -21.698158 0.779563
+v -17.564379 -22.844940 0.896926
+v -17.398947 -21.922972 4.920889
+v -16.427612 -21.040548 0.712434
+v -17.190241 -21.388041 5.428190
+v -16.325825 -20.876894 6.013625
+v -15.285811 -21.696253 0.779710
+v -15.297773 -21.486008 5.627618
+v -15.293844 -22.752081 4.634906
+v -15.284551 -23.006754 0.913828
+v -15.293721 -22.693474 4.554464
+v -15.368766 -23.055298 0.918784
+v -15.370646 -22.797358 4.625024
+v -42.800224 19.749321 9.614819
+v -42.823772 20.759256 0.292076
+v -42.787434 20.738754 0.287217
+v -41.681293 20.079544 0.467494
+v -41.862514 19.177917 9.885297
+v -42.803524 20.899492 9.228331
+v -42.826649 22.098198 0.262045
+v -41.672424 22.798851 0.076953
+v -41.846577 21.474922 9.115331
+v -40.900558 20.881271 9.393975
+v -40.525036 22.102995 0.261684
+v -41.658630 22.791126 0.075107
+v -40.919727 19.734674 9.777379
+v -40.537251 20.744871 0.458149
+v 18.916365 48.205315 12.110548
+v 16.787193 49.144016 0.162044
+v 17.875002 48.503616 0.245196
+v 17.961243 48.452526 0.239769
+v 19.939014 47.622807 12.920272
+v 16.799894 50.478439 0.194638
+v 16.786213 49.185524 0.155356
+v 18.723656 49.353195 10.998408
+v 19.694983 49.831833 11.260002
+v 17.985100 51.111298 0.271589
+v 17.875000 51.050610 0.273877
+v 18.822491 49.413151 10.969213
+v 20.748730 49.173882 12.329276
+v 19.130791 50.423996 0.208525
+v 19.114464 49.099049 0.176102
+v 19.115515 49.246212 0.174030
+v 20.835550 48.098648 13.047456
+v 18.102446 48.535942 0.203890
+v 20.201260 47.778965 12.845500
+v -36.442352 22.218996 0.384072
+v -36.285542 22.120274 0.356506
+v -35.993362 23.104425 7.482482
+v -36.753162 23.547050 7.396578
+v -36.716442 24.529482 6.663275
+v -36.431984 23.481857 0.259252
+v -36.437351 23.000299 0.338237
+v -35.717216 24.979492 6.018006
+v -35.320145 24.076820 0.039845
+v -36.106041 23.662916 0.230071
+v -34.753300 24.420444 6.125158
+v -34.197273 23.389484 -0.158664
+v -34.784115 23.927433 6.497054
+v -34.197376 23.310049 -0.154090
+v -18.916821 -10.749866 10.373567
+v -18.837812 -10.799236 11.080793
+v -18.971571 -10.721872 11.067651
+v -19.037842 -9.129511 11.102279
+v -18.686666 -8.925879 11.235560
+v -17.852236 -9.418583 11.465641
+v -17.845963 -10.395747 11.381035
+v -17.644726 -10.429758 8.666828
+v -18.124798 -10.562012 11.274802
+v -35.449238 26.034275 5.158723
+v -35.678722 26.409101 -0.219726
+v -34.946575 25.981852 -0.148475
+v -34.595753 25.781488 -0.211320
+v -34.475891 25.454702 5.510714
+v -35.064674 25.809568 5.202700
+v -35.680531 26.615559 -0.253596
+v -35.460175 26.369841 4.915646
+v -35.467529 26.955103 4.767166
+v -34.585972 25.787296 -0.213725
+v -34.108742 25.660542 5.596425
+v -46.325676 -15.133960 9.195091
+v -47.740276 -16.742529 -0.094655
+v -47.600071 -16.821251 -0.096392
+v -46.673672 -17.334789 -0.082278
+v -45.636200 -15.851724 7.905797
+v -46.076130 -13.904241 10.812496
+v -47.730209 -15.504522 -0.056223
+v -47.730267 -15.511608 -0.056458
+v -45.207409 -13.365371 11.207329
+v -46.666698 -14.870698 -0.028605
+v -44.532932 -13.992011 10.004154
+v -44.570457 -13.970542 10.006300
+v -45.297050 -14.411970 5.902041
+v -45.225510 -14.933523 3.573215
+v -45.614803 -15.462748 -0.041629
+v -44.526829 -13.983716 10.060814
+v -44.528660 -13.996639 10.043489
+v -45.615017 -16.693575 -0.082364
+v -45.225060 -15.527151 3.558660
+v -44.981384 -15.679758 5.806084
+v -45.667076 -16.725252 -0.083737
+v -45.201553 -15.564719 8.127676
+v -46.067444 -16.968777 -0.093289
+v -46.747360 -38.012020 5.243215
+v -46.962193 -38.371658 -0.007156
+v -45.798992 -39.042187 0.004755
+v -45.710861 -38.670231 4.594731
+v -45.798424 -38.623898 4.548856
+v -46.721302 -36.773865 5.844674
+v -46.957527 -37.024632 0.067233
+v -46.961994 -37.992401 -0.013461
+v -45.798965 -36.356270 0.006363
+v -46.615673 -36.826870 0.077120
+v -45.689407 -36.180122 5.712194
+v -44.638844 -37.025917 -0.006954
+v -45.102337 -36.536266 5.293702
+v -44.652500 -36.785896 5.527581
+v -44.650574 -38.002609 5.340413
+v -44.637218 -38.368500 -0.005686
+v -44.638206 -37.527641 -0.019667
+v -44.638638 -37.222275 0.005830
+v -18.636196 -20.273237 8.113546
+v -18.655661 -19.438391 0.407055
+v -17.742970 -19.987511 0.604467
+v -17.573725 -20.086510 0.614624
+v -17.692320 -20.676552 6.777821
+v -16.787516 -19.174681 7.926125
+v -16.477760 -18.166927 0.393246
+v -16.570810 -18.111889 0.387074
+v -17.167559 -19.034203 8.435761
+v -16.739544 -20.114500 6.675924
+v -16.488113 -19.450422 0.549689
+v -16.481724 -18.571640 0.459755
+v 9.223336 40.308823 14.415722
+v 9.046709 40.386696 13.424521
+v 9.079351 40.345913 12.619499
+v 8.437096 40.544712 5.856650
+v 7.685904 40.986641 5.787953
+v 6.653155 41.441959 -0.007630
+v 7.733500 40.799324 -0.173151
+v 10.025872 39.837627 14.524380
+v 9.199362 41.230087 14.254871
+v 8.846815 41.436298 12.274979
+v 9.049332 41.138477 13.417475
+v 9.331266 40.659725 15.009890
+v 7.515997 41.187225 4.830835
+v 7.513741 42.216042 4.788475
+v 6.717896 42.681545 0.319034
+v 9.997943 41.610172 14.536560
+v 10.045051 41.630096 14.565563
+v 8.566204 42.736679 5.061888
+v 6.984882 42.820065 0.356430
+v 7.510754 42.435841 3.689891
+v 8.283319 42.948357 3.243946
+v 7.842481 43.278229 0.410933
+v 11.033287 41.000053 16.135902
+v 9.430765 42.238255 4.130630
+v 9.387880 42.239914 5.184322
+v 10.059535 41.621082 14.578880
+v 8.012805 43.176403 0.386001
+v 11.095940 40.609646 16.628239
+v 10.994980 40.163242 15.907133
+v 9.074432 41.279583 1.544101
+v 9.426394 41.262516 4.163661
+v 8.442183 41.175323 -0.071696
+v 8.515486 40.934731 1.782744
+v -34.956196 40.177422 -0.500987
+v -33.809776 39.498280 -0.470717
+v -34.790619 39.694462 8.338611
+v -35.700451 40.255703 7.803688
+v -34.935963 41.506577 -0.559948
+v -34.936932 41.439209 -0.557588
+v -35.602982 41.065266 6.818802
+v -35.389992 40.875412 4.421213
+v -35.117443 41.474949 1.458728
+v -33.766228 42.162987 -0.590251
+v -34.909542 41.521378 -0.561278
+v -34.738991 41.686970 1.438806
+v -34.330711 42.021564 4.453750
+v -34.191238 41.841629 5.503449
+v -33.777115 42.055340 0.628071
+v -32.733521 41.470757 0.342842
+v -32.612770 41.484524 -0.560012
+v -32.645111 41.456490 -0.320291
+v -32.630775 40.450821 -0.513642
+v -32.635071 40.204189 -0.502579
+v -32.867825 40.166275 1.236745
+v -32.636032 40.148972 -0.500102
+v -33.778183 39.610130 0.648453
+v -34.359524 39.907375 8.018247
+v -10.099925 10.095138 0.730973
+v -9.912470 9.980782 0.720502
+v -9.782884 10.401482 3.783983
+v -9.767262 10.402712 3.849226
+v -9.570204 11.066467 8.655301
+v -9.698644 11.458367 10.589050
+v -10.194798 11.878119 11.336118
+v -10.595366 12.212112 11.909214
+v -10.624267 13.276039 12.639870
+v -10.101428 11.350504 0.869246
+v -10.100456 10.450912 0.772511
+v -9.803802 13.657302 12.172260
+v -9.055697 11.956612 0.909003
+v -9.577125 11.656535 0.900522
+v -8.890929 12.976670 10.919583
+v -8.000815 11.326255 0.860099
+v -8.882266 11.855066 0.919706
+v -8.854154 11.932837 10.545860
+v -8.804845 11.827109 9.989220
+v -8.681523 11.870590 8.583839
+v -7.998509 11.151904 0.841344
+v -8.862477 12.553307 10.613953
+v -9.631263 11.496964 10.588675
+v -9.515807 11.415980 9.977074
+v -9.234293 11.668313 10.353732
+v -45.114437 -15.572170 -0.042126
+v -44.811863 -15.746995 -0.046022
+v -44.043842 -16.190826 -0.042152
+v -44.422478 -16.009956 7.182649
+v -45.115688 -14.338161 -0.001295
+v -44.047680 -13.720819 0.031067
+v -44.424335 -13.938557 0.016248
+v -43.644447 -14.450100 9.043489
+v -42.976650 -14.337231 0.036538
+v -43.534412 -15.478311 7.559373
+v -42.973934 -15.573041 -0.000078
+v -9.354712 47.628826 11.731418
+v -9.877417 48.482574 -0.519166
+v -9.217359 48.098652 -0.482848
+v -8.812337 47.863968 -0.480599
+v -8.566321 47.193230 11.264091
+v -9.356153 48.553902 11.736105
+v -9.698664 49.314716 3.717127
+v -9.879851 48.726494 -0.566216
+v -8.890349 48.855927 11.462314
+v -8.927985 48.852962 11.305131
+v -8.782489 49.318726 8.113261
+v -8.632264 49.405243 8.116037
+v -8.690195 49.702431 5.350441
+v -9.309213 49.345383 5.343640
+v -8.225121 49.583961 3.749555
+v -7.751694 49.233025 4.538152
+v -7.747362 49.747208 -0.886330
+v -7.818208 49.788864 -0.890314
+v -7.758368 47.692112 10.789084
+v -7.756632 47.852394 8.487059
+v -7.757159 48.475754 11.077021
+v -7.757302 48.293579 10.790951
+v -7.750429 48.425194 0.260418
+v -7.749749 48.488068 -0.642589
+v -8.135651 48.260906 -0.576448
+v -8.433160 48.032204 0.248859
+v -8.636108 47.605793 4.719729
+v -7.894418 47.773003 8.485889
+v -19.811914 32.410782 6.650311
+v -18.926586 32.566479 9.167872
+v -19.773796 33.105610 9.424143
+v -20.193039 32.628883 6.670962
+v -20.811497 33.102665 2.582956
+v -20.717377 32.989223 3.206015
+v -20.631939 33.041546 3.768109
+v -19.822111 34.074348 9.083756
+v -20.893665 33.037643 2.042714
+v -20.065210 33.436977 0.400941
+v -20.544579 33.151440 0.391252
+v -20.722700 33.124912 1.789496
+v -19.016235 34.519039 8.477599
+v -18.151806 33.979805 8.212011
+v -19.001713 32.824413 0.320150
+v -19.571852 33.152557 0.362262
+v -19.008459 31.559305 0.217965
+v -18.110588 32.995899 8.561995
+v -37.235146 42.442329 5.502128
+v -37.480709 42.031242 -0.499348
+v -37.315258 41.935547 -0.501158
+v -36.207508 41.867493 5.703167
+v -36.871536 42.197342 5.121737
+v -37.217216 43.653313 5.905301
+v -37.477146 43.377380 -0.451925
+v -37.480759 42.277023 -0.507849
+v -36.317520 44.046597 -0.500788
+v -36.614864 43.875000 -0.488372
+v -36.206520 44.225060 5.280115
+v -35.156574 43.372124 -0.617662
+v -35.167633 43.378510 -0.617540
+v -36.022182 43.875000 -0.530888
+v -35.168495 43.581642 4.213486
+v -35.167648 43.167271 4.069848
+v -35.167652 43.165943 4.071707
+v -35.156456 43.266476 -0.614010
+v -44.086067 -42.170631 7.388274
+v -44.104614 -41.375092 0.044653
+v -43.875004 -41.508183 0.047016
+v -43.050091 -41.984623 0.039475
+v -43.225246 -42.856075 9.142080
+v -44.093540 -40.854416 5.338541
+v -44.107246 -40.143936 0.024181
+v -43.161282 -40.381172 5.874472
+v -43.048061 -39.520462 -0.001534
+v -43.875004 -40.007706 0.022068
+v -43.971397 -40.780663 5.321852
+v -42.283085 -41.094372 7.161233
+v -41.988152 -40.134842 -0.011187
+v -42.765152 -40.642811 6.073954
+v -41.992817 -41.367947 0.009404
+v -42.363525 -42.347057 9.041908
+v -29.372665 -13.523045 13.283715
+v -29.878136 -13.300193 10.447119
+v -30.734276 -13.072797 0.023901
+v -30.667723 -13.112301 0.016904
+v -28.509138 -14.017876 13.856653
+v -29.259340 -13.586392 13.418515
+v -29.419422 -12.601646 12.995301
+v -29.786243 -12.387085 10.935246
+v -29.787844 -13.283062 10.952179
+v -29.376760 -13.256665 13.253094
+v -30.623047 -10.679424 0.192021
+v -30.687183 -10.713195 0.185491
+v -29.785093 -12.151885 9.771497
+v -28.775402 -12.273110 13.113262
+v -28.602575 -12.191298 13.176421
+v -27.760284 -12.709546 13.695940
+v -29.563858 -11.315996 0.184486
+v -30.194927 -10.937811 0.236517
+v -29.598751 -12.520277 0.005837
+v -27.752638 -13.034904 13.774685
+v -27.728157 -13.607585 13.995309
+v -29.633427 -12.538976 0.002847
+v -40.543003 16.734833 9.607931
+v -40.532715 16.726231 9.665777
+v -40.548260 16.735386 9.666605
+v -39.005424 16.233725 0.242101
+v -38.978764 16.218145 0.237903
+v -38.569141 15.978060 0.189634
+v -39.207840 16.105808 5.926066
+v -39.354095 16.259733 4.377624
+v -39.784756 16.655079 1.147144
+v -39.705719 16.646765 0.265244
+v -40.540771 16.977203 9.613427
+v -39.699673 17.948509 0.360937
+v -39.704838 16.762609 0.269922
+v -39.772835 17.806059 1.158506
+v -40.022591 17.892235 3.952872
+v -38.566315 18.587923 0.429403
+v -40.129906 17.907270 6.114257
+v -39.677673 18.309484 10.360060
+v -38.798298 17.770559 10.614741
+v -37.423027 17.927382 0.331794
+v -38.276943 18.419170 0.421428
+v -38.794582 17.003635 10.521320
+v -38.659100 16.945522 9.502024
+v -38.661503 16.710859 9.499928
+v -37.420753 16.618221 0.202764
+v -38.822193 17.341187 10.756916
+v -39.147194 16.139465 5.924980
+v -38.081791 16.250000 0.198402
+v -30.144171 2.693278 -0.286728
+v -29.893408 2.545890 -0.266381
+v -29.306913 2.727013 3.012204
+v -29.853165 4.393761 11.236402
+v -29.904709 4.416883 11.188135
+v -30.645424 4.835093 11.022664
+v -30.677668 5.908268 11.828277
+v -30.144283 3.943897 -0.179743
+v -30.675329 5.850784 11.771564
+v -29.109606 4.577996 0.041592
+v -29.795736 4.155491 -0.115830
+v -29.963064 6.518197 12.891045
+v -28.069826 3.971857 0.129467
+v -29.200863 6.068985 12.911714
+v -29.136007 5.041818 12.217695
+v -28.417753 3.501740 4.109410
+v -28.293694 3.857273 2.682222
+v -28.067101 3.780013 0.106696
+v -29.195433 6.007190 12.852565
+v -29.139679 5.168079 12.254062
+v -29.101444 3.119282 4.151307
+v -47.924206 43.384777 10.395414
+v -48.201637 43.544621 10.486574
+v -47.883549 43.415169 0.132880
+v -46.759087 42.765827 0.046667
+v -47.290668 43.019753 10.189825
+v -47.883175 44.706745 0.120736
+v -48.219795 44.569752 11.077585
+v -46.959206 45.260338 3.865185
+v -47.533024 44.908928 0.090097
+v -47.352547 45.072445 11.370563
+v -46.453102 44.570820 11.084583
+v -46.132439 44.625019 6.759600
+v -46.518421 44.845901 6.780518
+v -45.627388 43.411381 -0.052286
+v -45.627300 43.537525 -0.053476
+v -45.924973 43.786793 3.961387
+v -46.437374 44.202751 10.872415
+v -46.409382 43.543549 10.494880
+v -36.409412 29.862761 7.045321
+v -36.722145 30.373556 -0.284186
+v -35.650925 29.754396 -0.312426
+v -35.527943 29.419102 5.558598
+v -35.714813 29.485968 6.478286
+v -36.447517 31.001450 6.197041
+v -36.722065 30.563799 -0.274417
+v -36.344795 30.773275 8.601998
+v -35.939644 30.963589 8.969259
+v -34.584511 30.754898 8.758998
+v -34.577988 31.529297 0.589382
+v -34.590717 31.009800 6.120977
+v -35.011417 30.972664 9.083989
+v -34.579494 30.369949 -0.277265
+v -34.579147 30.570057 -0.266988
+v -34.580265 30.723391 1.936214
+v -34.585144 29.848236 7.215722
+v -34.906139 29.684723 6.903077
+v -35.113007 29.657944 5.565620
+v -46.255291 -0.112464 0.069368
+v -45.127811 -0.740520 0.074700
+v -43.766102 1.206043 10.559285
+v -44.701069 1.654868 10.275986
+v -44.822731 2.573029 9.453181
+v -46.249485 1.192679 0.078181
+v -46.248337 1.150335 0.086713
+v -43.980412 3.042916 8.909233
+v -45.136486 1.850373 0.007944
+v -43.028084 2.571667 9.210672
+v -44.007568 1.240122 0.115597
+v -44.479534 1.504095 0.113380
+v -42.935493 1.653324 10.037592
+v -44.005070 -0.057998 0.097886
+v -26.436939 29.138550 -0.014061
+v -26.254827 29.035069 0.004060
+v -25.210941 28.970942 5.850704
+v -25.158823 29.190907 8.565081
+v -26.066313 29.640591 7.758549
+v -26.119181 29.670490 7.751770
+v -26.435936 30.424467 -0.027554
+v -26.100311 30.780754 8.180990
+v -25.321667 31.070646 0.084110
+v -25.514181 30.958771 0.052985
+v -25.155901 31.337166 8.717334
+v -24.213245 30.437542 0.231200
+v -24.234470 30.810606 8.833434
+v -24.232822 29.737038 8.687845
+v -24.231325 29.696022 8.088546
+v -24.225634 30.227812 5.465657
+v -24.213121 30.340174 0.228770
+v -24.232706 29.980782 8.518081
+v -24.796738 29.372665 8.158241
+v -23.750944 25.824520 11.265359
+v -23.779568 27.052217 -0.067546
+v -22.699564 26.436565 -0.153359
+v -22.934984 25.265289 12.081013
+v -23.756571 26.979776 9.871283
+v -23.760666 26.814783 7.939450
+v -23.779795 27.174313 -0.054547
+v -23.753317 26.720484 11.050216
+v -23.753733 26.832642 10.971845
+v -22.111732 26.704809 11.953333
+v -21.792259 27.744177 4.184135
+v -21.859697 27.735683 4.486529
+v -21.619701 27.059929 -0.107298
+v -21.620110 27.393085 -0.071832
+v -22.142916 25.691858 12.642152
+v -22.143093 25.677549 12.645408
+v -35.169609 0.399258 -0.297678
+v -35.106590 0.362070 -0.296214
+v -34.269966 0.011089 5.067807
+v -34.347107 0.054808 4.998487
+v -34.741325 0.285503 4.916562
+v -33.989651 2.083431 6.765633
+v -34.168758 2.217453 5.614612
+v -34.170891 2.018020 6.598252
+v -33.017654 1.494820 6.952651
+v -33.981693 2.239693 -0.269437
+v -34.154690 2.343786 -0.273458
+v -33.090527 0.448273 6.480856
+v -33.996002 0.974592 -0.290863
+v -33.987926 1.554547 -0.269752
+v -33.036194 1.342018 6.824998
+v -35.105110 0.362883 -0.296179
+v -47.346672 26.871286 0.456704
+v -47.145515 26.752274 0.458591
+v -47.127525 26.414139 7.976804
+v -47.722855 26.533213 13.323705
+v -48.529068 26.995655 13.650266
+v -47.325089 28.093050 0.369285
+v -48.531979 27.233095 13.712466
+v -48.609455 27.869226 14.655686
+v -47.755123 28.319387 13.794281
+v -46.231953 28.701004 0.183758
+v -47.032852 28.256571 0.348148
+v -48.111847 28.120281 13.834282
+v -46.941177 27.872982 13.469886
+v -45.175400 28.074333 0.267097
+v -46.919594 26.972425 13.231267
+v -46.481651 26.939728 9.949678
+v -46.218452 27.355404 8.014700
+v -45.180107 27.969503 0.293362
+v -47.123528 26.575424 9.865208
+v -2.404335 41.662792 0.389171
+v -1.263480 40.953098 0.241187
+v -1.625627 42.058102 5.693570
+v -1.724965 42.102467 5.599371
+v -2.656647 42.740906 6.081911
+v -2.653516 43.919044 6.110789
+v -2.401898 42.992371 0.446112
+v -2.403518 42.707226 0.458268
+v -2.656173 42.753109 6.072388
+v -1.723971 44.652126 7.174198
+v -1.277385 43.636887 0.450515
+v -1.501628 43.504887 0.431263
+v -2.093956 43.171570 0.461619
+v -2.631151 43.926262 6.081241
+v -0.677232 43.947376 6.415749
+v -0.145657 42.961750 0.408243
+v -0.741393 43.979446 6.362562
+v -0.642462 42.713959 6.073003
+v -0.128265 41.611420 0.268303
+v -0.747634 41.242905 0.214720
+v -0.665589 42.693726 6.044117
+v -37.962086 -8.510085 -0.012099
+v -36.807014 -9.177528 -0.019279
+v -37.403564 -8.892568 11.363581
+v -38.309990 -8.368503 11.311959
+v -37.962612 -7.178793 0.005043
+v -38.309177 -7.319836 11.285572
+v -37.019077 -6.612441 4.027143
+v -37.630005 -6.986575 0.007925
+v -37.400799 -6.794782 11.310843
+v -36.493408 -7.319610 11.362524
+v -36.169823 -7.264917 6.998151
+v -36.566620 -7.037846 7.019653
+v -35.650276 -8.511562 -0.009287
+v -35.650398 -8.384149 -0.007647
+v -35.956184 -8.128088 4.116668
+v -36.495243 -8.303717 11.387241
+v -36.496391 -8.368556 11.402738
+v -36.716385 -8.496212 11.382718
+v -17.348364 -23.521353 3.763063
+v -17.468559 -23.325037 0.946074
+v -16.527143 -23.872810 1.002275
+v -16.417809 -23.934952 0.976026
+v -16.319572 -24.202784 5.665763
+v -17.355309 -23.410723 3.604479
+v -15.369252 -23.326784 0.927198
+v -15.369133 -23.255205 0.939242
+v -15.372941 -23.667364 5.818717
+v -7.425514 16.851871 0.778607
+v -6.344806 16.245415 0.766476
+v -4.670369 18.639025 13.658923
+v -5.560013 18.973166 13.029415
+v -5.548564 19.915983 13.083603
+v -7.443644 18.082539 0.631289
+v -7.439819 17.875000 0.661193
+v -4.633417 20.508848 13.943443
+v -6.384562 18.702463 0.460365
+v -5.422949 19.996059 13.178680
+v -3.777964 20.174692 14.645452
+v -5.305019 18.098764 0.465915
+v -3.790044 19.262770 14.505113
+v -5.284898 16.871000 0.613228
+v -5.300770 17.875002 0.498148
+v -4.605549 18.683552 13.708140
+v -46.305664 40.213982 9.588017
+v -46.424507 40.015030 6.683517
+v -45.895966 39.975628 9.568556
+v -46.321053 41.248680 9.180513
+v -46.694096 40.852673 0.056860
+v -46.695736 40.654682 0.022495
+v -46.326527 41.026329 9.053085
+v -45.579723 41.494823 -0.038222
+v -46.678402 40.861763 0.057903
+v -45.396671 41.789135 9.495357
+v -44.462181 40.846691 -0.123879
+v -44.485165 41.250702 9.191970
+v -44.482967 40.164127 8.824638
+v -44.477783 40.022060 6.748877
+v -44.461967 40.667355 -0.122214
+v -44.482883 40.369473 8.687076
+v -44.809036 39.992821 9.081903
+v -32.830956 47.443672 9.932950
+v -32.856422 48.535965 -0.150032
+v -31.778620 47.891045 0.049961
+v -31.961414 46.981598 9.549428
+v -32.015377 47.022350 9.460217
+v -32.858902 49.787472 -0.085557
+v -32.829727 48.275158 11.226525
+v -31.864716 49.738125 4.583817
+v -31.966621 49.718529 4.287549
+v -32.620384 49.919178 -0.027043
+v -32.007553 48.652233 11.997111
+v -30.869219 49.209930 4.264987
+v -30.928873 49.202415 4.532479
+v -31.168324 48.236828 11.538869
+v -30.710520 48.538048 0.314965
+v -30.710178 48.885571 0.333092
+v -31.168173 48.234280 11.534943
+v -31.158104 47.307217 11.216859
+v -30.808786 48.229832 2.705584
+v -30.807560 48.616013 2.704943
+v -31.189678 48.220905 0.194685
+v -34.375622 20.951336 8.441044
+v -35.056408 21.132154 0.152721
+v -34.919750 21.050777 0.128431
+v -33.613327 20.502707 8.504555
+v -33.827091 22.758682 7.035641
+v -34.052345 22.927235 5.588063
+v -34.055885 22.596624 7.218701
+v -32.797905 22.124130 7.727705
+v -33.856823 22.942312 -0.205167
+v -34.038586 23.050840 -0.172878
+v -33.238636 22.403664 7.090592
+v -33.858463 21.676397 -0.132273
+v -32.672775 20.987202 8.735037
+v -33.376431 20.661316 8.321271
+v -19.310198 -10.563519 -0.528201
+v -19.140032 -10.664337 -0.523365
+v -19.119362 -11.052839 8.114693
+v -19.485054 -10.979697 11.399125
+v -20.370352 -10.452008 11.301372
+v -20.301332 -9.406744 10.663136
+v -19.304539 -9.233034 -0.424525
+v -19.306593 -10.405182 -0.548532
+v -20.301750 -9.537677 10.651386
+v -19.416750 -8.897856 10.998504
+v -19.114628 -10.862136 10.347538
+v -35.891575 26.749344 -0.275877
+v -35.681129 26.626217 -0.255345
+v -35.478966 27.307167 4.675232
+v -36.097252 27.628183 4.364643
+v -36.155273 29.101126 5.776144
+v -35.881096 28.091375 -0.396358
+v -35.881813 27.625000 -0.419502
+v -36.089012 28.187639 4.228407
+v -34.719414 28.763170 -0.360233
+v -35.063854 28.563856 -0.371610
+v -33.551373 28.069529 -0.375569
+v -34.125000 28.409239 -0.376436
+v -34.117802 29.119776 6.025815
+v -34.020752 28.375051 4.953313
+v -33.549805 27.879503 -0.385276
+v -34.019089 28.469940 4.930305
+v -25.822939 20.210167 10.033135
+v -25.599579 20.070597 12.032500
+v -25.673487 20.105902 13.442753
+v -26.097401 20.350500 13.512543
+v -25.658680 21.998407 13.160189
+v -24.936775 22.343248 -0.614572
+v -24.974249 22.321571 -0.618686
+v -26.153814 21.712849 13.267927
+v -24.833261 21.524189 13.149222
+v -23.810019 21.697134 -0.651792
+v -24.968908 21.600983 13.171675
+v -24.839098 20.574032 13.227945
+v -24.488760 20.514820 8.502763
+v -23.808815 21.565720 -0.668039
+v -25.142971 20.334599 12.056735
+v -34.723328 16.966238 11.226427
+v -35.193581 17.734312 0.205200
+v -35.065483 17.660723 0.191772
+v -34.112461 17.117443 -0.001427
+v -33.875000 16.470030 11.334781
+v -34.521496 16.846775 11.283462
+v -34.753338 18.010067 10.564642
+v -35.195652 18.992573 0.209026
+v -35.193298 17.852446 0.216819
+v -34.725220 17.083527 11.186885
+v -34.112843 19.645908 -0.019711
+v -33.904896 18.579136 9.907522
+v -33.029804 17.995441 10.682834
+v -34.038391 19.603970 -0.034808
+v -33.557339 18.373835 9.936993
+v -33.029850 17.990227 10.737857
+v -33.029865 17.983217 10.743319
+v -33.032009 16.960642 11.271380
+v -33.031380 17.314190 11.264698
+v -33.032223 16.940849 11.555647
+v -34.064148 17.146015 -0.011628
+v -33.226955 16.923649 10.180936
+v -33.699169 16.580519 11.203671
+v -35.871391 51.303978 12.727075
+v -35.930000 51.336868 12.727738
+v -37.893810 49.103783 -0.168665
+v -36.729198 48.431740 -0.253417
+v -35.052372 50.828762 12.657408
+v -35.843307 52.443447 13.274298
+v -37.881119 50.471912 -0.115878
+v -34.905079 53.030590 13.791515
+v -36.715435 51.163128 -0.147449
+v -34.051544 52.550240 13.781206
+v -35.560623 50.498749 -0.231409
+v -34.110405 51.457657 13.202776
+v -35.562386 49.134487 -0.290654
+v -35.561352 49.606083 -0.266230
+v -34.065567 52.265404 13.642633
+v -36.003452 48.869244 -0.272793
+v -43.621487 7.701591 6.410860
+v -43.885513 7.259602 -0.041760
+v -43.794228 7.206046 -0.050951
+v -43.520241 7.642810 6.407382
+v -43.879971 8.606343 0.054078
+v -43.614532 8.888123 6.546019
+v -42.722145 9.275085 0.033760
+v -42.595192 9.479198 6.645527
+v -41.564236 8.603641 -0.052716
+v -42.219589 8.983125 -0.016632
+v -41.580677 8.892632 6.610957
+v -41.578922 7.708759 6.476377
+v -41.562450 7.257320 -0.119705
+v -41.648335 7.207443 -0.119929
+v -41.651680 7.666021 6.469213
+v -42.277027 -18.994503 7.636885
+v -42.296356 -18.165432 -0.016294
+v -41.168564 -18.821201 0.014590
+v -41.329708 -19.622934 8.388960
+v -42.299122 -16.850317 -0.020331
+v -42.278545 -17.916945 7.958005
+v -41.340580 -17.510225 9.010728
+v -41.258659 -16.887449 4.759080
+v -41.329514 -16.901075 4.553081
+v -42.021240 -16.688774 -0.012052
+v -42.127193 -16.750229 -0.016227
+v -40.434223 -18.148600 9.719167
+v -40.212540 -17.427378 4.328082
+v -40.296890 -17.438002 4.706313
+v -40.040359 -18.168140 0.041536
+v -40.039108 -17.781084 0.040400
+v -40.425182 -19.184536 9.417976
+v -7.833880 8.598909 10.949723
+v -7.953710 8.651740 10.277265
+v -8.748779 8.862915 0.597548
+v -8.527277 8.731668 0.582746
+v -7.835651 8.674141 10.937636
+v -6.993415 10.084025 11.123383
+v -6.850600 10.139273 11.236894
+v -7.782331 10.836468 5.249193
+v -7.788237 10.284637 7.970922
+v -8.017061 10.153774 7.999129
+v -7.754840 9.735573 10.785594
+v -7.688601 9.770581 10.791687
+v -5.880864 9.546551 11.662723
+v -7.332572 10.668229 0.787262
+v -7.771743 10.931563 0.816947
+v -6.487795 9.915451 11.486521
+v -7.363173 9.364784 0.647200
+v -5.898777 9.208352 11.552177
+v -5.848972 8.484631 11.971354
+v -17.305239 -0.810958 0.228242
+v -17.059046 -0.955597 0.207066
+v -17.041195 -1.291138 7.667659
+v -17.578733 -1.183625 12.495514
+v -18.441160 -0.691478 12.903254
+v -17.299562 0.449444 0.322948
+v -18.426628 0.253030 12.859657
+v -17.547035 0.731608 12.406009
+v -16.478001 0.999445 2.853502
+v -16.862846 0.694919 0.323201
+v -16.658756 0.250698 11.985045
+v -15.854557 0.342403 5.972002
+v -16.005144 0.429508 5.983765
+v -16.675989 -0.720391 12.031002
+v -16.395901 -0.741303 9.932241
+v -16.171280 -0.386559 8.280899
+v -15.681992 -0.097181 4.642444
+v -17.036573 -1.104926 9.847929
+v -9.987133 48.789970 -0.572327
+v -9.854227 51.008362 13.549235
+v -10.262409 51.247650 13.512308
+v -10.470299 52.134037 18.191031
+v -10.816189 52.332458 18.132994
+v -10.807470 53.078506 18.001734
+v -9.971981 50.001514 -0.807594
+v -10.148491 53.451527 17.979584
+v -8.888971 50.588219 -0.983385
+v -9.498229 53.078506 18.088692
+v -7.815941 49.959267 -0.923412
+v -9.501032 52.838730 18.130878
+v -9.152866 51.573235 14.222766
+v -9.193509 52.293495 14.654400
+v -21.331375 32.672367 10.434389
+v -20.966772 32.881603 10.157102
+v -20.049295 32.370659 9.851983
+v -20.079538 31.336252 10.259907
+v -20.235252 31.253084 10.375987
+v -50.208626 -24.470377 12.319769
+v -50.734497 -23.611458 -0.005041
+v -49.669395 -24.229452 0.019541
+v -49.418903 -24.912395 11.977969
+v -50.231834 -23.498451 11.814823
+v -50.737270 -22.375734 -0.018638
+v -50.199135 -24.334181 12.548539
+v -49.669964 -21.760036 -0.007547
+v -49.445030 -22.913952 10.730605
+v -48.612549 -23.383545 10.568686
+v -48.614967 -24.415989 11.505301
+v -49.195759 -24.803617 12.265945
+v -25.468103 -29.954908 12.512896
+v -26.645540 -31.293795 4.780623
+v -26.555826 -31.345472 4.774445
+v -26.555239 -32.225456 1.367127
+v -27.216854 -32.448338 -0.926911
+v -27.048286 -32.545803 -0.939922
+v -26.336451 -32.906208 -0.796639
+v -24.615305 -30.445827 12.455441
+v -25.192831 -30.118801 12.473316
+v -25.440254 -28.935820 12.673489
+v -27.192104 -30.630693 1.162316
+v -24.581888 -28.423290 12.712746
+v -26.332945 -30.229584 -0.769641
+v -26.941051 -30.591787 -0.781667
+v -23.747171 -28.915625 12.593465
+v -25.195734 -30.884846 -0.857233
+v -25.181583 -32.203640 -0.767955
+v -25.198517 -31.389698 -0.898854
+v -23.761097 -29.930861 12.432800
+v -23.866858 -29.995461 12.427732
+v -16.334902 49.142693 9.858041
+v -16.720800 48.496681 0.426917
+v -15.801808 47.951527 0.269152
+v -15.648480 47.860035 0.237021
+v -15.454825 48.677345 10.322698
+v -16.717009 49.742371 0.482848
+v -16.334190 49.561138 9.863053
+v -16.298054 50.187119 10.729429
+v -15.646281 50.358585 0.351541
+v -15.915442 50.203743 0.387719
+v -15.428485 50.708759 11.694550
+v -14.570616 49.730312 0.163556
+v -14.597981 50.211327 11.254963
+v -14.595640 49.208576 10.787236
+v -14.568984 48.478130 0.114544
+v -14.569633 48.970081 0.136943
+v -14.596461 49.873997 10.794165
+v -15.554204 47.914387 0.231621
+v -7.274852 6.272435 12.436129
+v -7.305138 7.571339 0.445920
+v -6.685665 7.219667 0.383081
+v -6.231509 6.964939 0.308061
+v -6.478467 5.736260 13.141999
+v -6.873158 6.001735 12.794561
+v -7.278263 7.290208 11.881432
+v -6.941455 7.477129 11.957120
+v -5.381540 8.314898 4.495932
+v -5.664932 7.173536 12.779004
+v -5.311392 8.323732 4.181390
+v -5.159634 7.982682 0.427139
+v -5.159692 8.014348 0.431006
+v -5.689477 6.180665 13.306287
+v -5.157902 7.584658 0.354224
+v -29.898825 2.287143 -0.289230
+v -28.760002 1.616849 -0.196904
+v -26.819767 0.802879 12.242919
+v -27.721037 1.327005 11.932092
+v -27.640396 2.264683 12.356512
+v -26.677505 2.647914 13.068529
+v -25.815395 2.123055 13.356381
+v -27.578674 3.485470 0.146788
+v -27.608999 2.221728 0.006125
+v -27.599186 2.691124 0.047575
+v -25.877588 1.215321 12.954708
+v -50.586842 -43.931725 0.055571
+v -49.446671 -44.603535 0.002512
+v -50.727417 -44.347366 11.505379
+v -51.650780 -43.819817 11.927397
+v -50.571274 -42.621288 0.046347
+v -50.586636 -43.875008 0.060424
+v -51.581726 -42.797382 11.285927
+v -50.476662 -42.239479 9.472506
+v -49.421448 -41.975105 0.043506
+v -51.488209 -42.748360 11.184340
+v -49.438641 -42.774960 8.697432
+v -48.282837 -42.643162 0.055440
+v -49.614532 -43.861500 9.921333
+v -48.298763 -43.959736 0.062020
+v -48.298763 -43.875008 0.069268
+v -50.346634 -44.169270 11.104097
+v -49.082680 -31.176085 -0.128940
+v -48.721394 -31.395145 -0.140866
+v -48.147808 -31.218004 3.065550
+v -48.399982 -30.448565 6.862182
+v -49.387051 -29.875538 6.738307
+v -49.376114 -28.737896 6.590449
+v -49.076767 -29.840340 -0.148688
+v -49.366211 -29.112297 6.339285
+v -47.932995 -29.189413 -0.168697
+v -49.059322 -29.830521 -0.149562
+v -48.441727 -28.032887 7.490682
+v -47.468605 -28.604179 7.536948
+v -46.783794 -29.873934 -0.202349
+v -47.388409 -29.911549 6.680363
+v -47.185295 -30.347063 4.387443
+v -47.070713 -30.018686 3.069296
+v -46.782650 -30.116907 -0.204940
+v -47.901451 -30.747683 4.431323
+v -47.559021 -30.050823 6.508787
+v -36.312359 5.069048 7.513262
+v -35.695332 4.753560 -0.308897
+v -35.673775 4.741099 -0.308396
+v -36.086208 4.938111 7.561323
+v -35.671333 7.243601 -0.354970
+v -35.685627 7.235339 -0.355292
+v -36.490990 6.819726 9.125946
+v -36.187523 6.997024 9.494574
+v -35.317291 6.494536 9.528689
+v -34.587936 6.617812 -0.308532
+v -35.250107 6.999892 -0.329626
+v -35.244297 5.476657 8.544174
+v -34.589294 5.365951 -0.290199
+v -35.441525 4.875001 -0.302930
+v -35.445675 5.346623 8.287026
+v -40.350494 -9.269688 11.248183
+v -40.830368 -8.485897 0.001454
+v -39.703716 -9.137558 -0.017924
+v -39.466667 -9.783847 11.298596
+v -40.349777 -8.251707 11.307518
+v -40.674076 -7.531355 3.715016
+v -40.831360 -8.041989 -0.003362
+v -40.350658 -9.212409 11.246733
+v -39.586205 -7.126881 5.592071
+v -40.226318 -7.496098 5.585037
+v -40.216003 -8.164626 11.226041
+v -39.467751 -7.734546 11.246918
+v -38.574963 -7.183770 0.004229
+v -38.797325 -7.054355 0.005623
+v -39.157978 -7.235960 4.118024
+v -38.583981 -8.254260 11.297468
+v -38.577263 -8.488231 -0.012228
+v -38.576000 -7.772009 -0.003347
+v -38.585812 -9.277482 11.323172
+v -39.645905 -9.104095 -0.019648
+v -21.970802 29.281651 10.234532
+v -21.015062 28.943092 10.989861
+v -23.135317 29.047993 2.562497
+v -22.070307 30.174503 9.558364
+v -23.507977 28.783590 0.111626
+v -23.508581 28.752630 0.108342
+v -22.424366 29.429346 0.138834
+v -23.317301 28.897434 0.120161
+v -21.571613 30.474501 9.620382
+v -21.359480 28.816450 0.060179
+v -21.362522 28.245840 0.014090
+v -20.168829 29.465889 11.085534
+v -21.368179 27.546925 -0.060191
+v -36.192722 1.590655 5.680729
+v -36.438553 1.179128 -0.327166
+v -36.430943 1.174751 -0.326989
+v -36.176521 1.580327 5.670162
+v -36.436939 2.500065 -0.326801
+v -36.200520 2.271391 5.469633
+v -36.184128 2.768439 5.856303
+v -35.294853 3.160641 -0.299924
+v -35.154823 3.385778 6.992882
+v -34.154884 2.504279 -0.273422
+v -34.173347 2.828823 7.210012
+v -47.114567 25.272840 12.573171
+v -47.145138 26.583923 0.470527
+v -46.074520 25.963560 0.479640
+v -46.298092 24.851217 12.098419
+v -47.115536 26.161182 12.963729
+v -46.312386 26.641306 12.889806
+v -44.991482 27.857546 0.308260
+v -45.489544 26.237167 12.420477
+v -44.999126 26.594975 0.399753
+v -44.991604 27.848320 0.310551
+v -45.476025 25.335400 12.019569
+v -42.208286 16.621185 0.287197
+v -41.061356 15.942622 0.249210
+v -39.697781 15.370575 8.991773
+v -40.647751 15.933179 9.044635
+v -38.525238 16.842093 10.504855
+v -39.880318 17.889109 0.353284
+v -38.637772 15.843356 9.734768
+v -39.899410 16.904116 0.277434
+v -39.904102 16.579430 0.264342
+v -24.527740 18.659174 13.564475
+v -24.574085 18.744291 12.239517
+v -23.398098 18.620596 -0.882562
+v -23.924976 18.296219 13.715386
+v -23.385874 19.889189 -0.859792
+v -23.385971 19.090828 -0.958773
+v -24.135405 19.405521 7.433229
+v -24.136694 19.758347 7.491819
+v -23.856129 20.117964 13.283496
+v -24.334755 19.816816 12.362057
+v -24.493172 19.760567 13.302621
+v -23.087332 19.649504 13.477308
+v -23.126514 18.738638 13.692751
+v -43.972157 46.987492 -0.221700
+v -43.838409 46.905453 -0.231909
+v -42.893459 46.334869 -0.248549
+v -43.736042 48.905800 12.437132
+v -44.561157 49.504234 13.067392
+v -43.972363 48.262772 -0.110565
+v -43.971130 47.182678 -0.228232
+v -43.971825 47.066906 -0.222472
+v -44.564011 50.169571 13.186349
+v -44.568382 50.457817 13.307542
+v -42.905621 48.881916 -0.065458
+v -43.433647 48.581470 -0.055919
+v -43.775436 50.859299 13.030235
+v -41.824444 48.229687 -0.170749
+v -42.417820 48.582180 -0.161926
+v -42.929585 50.278801 12.318834
+v -41.815304 46.960720 -0.220225
+v -42.901939 49.621155 12.032466
+v -42.894894 49.275578 11.967139
+v -42.783703 46.397469 -0.250286
+v -48.388115 17.599415 10.454988
+v -48.091049 19.571301 9.986876
+v -47.586666 19.812235 0.362670
+v -47.139267 19.040411 9.685670
+v -46.443832 19.157951 0.305958
+v -47.152664 17.963364 9.866436
+v -47.036606 17.943747 8.301072
+v -46.479149 18.805336 0.782318
+v -46.485722 17.850637 0.870966
+v -46.439228 17.842779 0.243906
+v -46.437424 18.468864 0.219542
+v -47.146347 18.511341 9.781195
+v -47.343754 17.859135 9.969632
+v -46.460213 17.830645 0.242713
+v -46.273594 38.554169 10.685622
+v -46.738453 39.313435 -0.209221
+v -45.583576 38.651508 -0.363897
+v -45.353100 38.023136 10.638886
+v -46.307453 39.693653 9.937280
+v -46.731037 40.634548 0.020205
+v -44.420956 40.643761 -0.125360
+v -44.428291 39.772812 9.062811
+v -44.423206 39.315559 -0.288235
+v -44.421616 40.273033 -0.121828
+v -44.430843 38.610180 9.842575
+v -29.688423 50.975643 14.083416
+v -30.163170 51.206821 13.952276
+v -30.490677 51.396854 13.980136
+v -30.404150 52.390343 14.528158
+v -32.616516 50.249924 -0.009024
+v -29.563288 52.919682 15.046908
+v -31.496599 50.925385 0.161232
+v -31.962103 50.648197 0.153438
+v -29.772480 52.785835 14.879915
+v -28.783182 52.525814 15.255917
+v -30.388447 50.343559 0.350128
+v -28.830353 51.570953 14.789847
+v -30.377048 49.096237 0.416205
+v -30.375778 49.656746 0.445597
+v -36.285343 21.940720 0.366754
+v -36.232216 21.909172 0.357306
+v -35.966637 22.332527 6.617380
+v -35.724190 22.314453 7.940768
+v -35.976166 22.458292 7.922811
+v -35.990372 22.999121 7.558901
+v -34.038761 23.217381 -0.182384
+v -34.055431 23.510391 6.573958
+v -34.055664 23.096275 6.878263
+v -19.108246 -12.061023 12.030490
+v -19.139942 -10.701571 -0.518628
+v -18.031389 -11.346110 -0.488688
+v -18.273993 -12.553136 12.119063
+v -19.112188 -10.988593 11.293427
+v -17.409071 -11.008686 11.470017
+v -16.915737 -10.686525 -0.625144
+v -17.408638 -11.875773 11.393257
+v -17.412510 -11.998602 11.478972
+v -34.404568 25.679270 -0.245968
+v -33.439384 25.274357 5.942294
+v -33.522377 27.728111 5.300327
+v -33.532887 27.735975 5.232798
+v -33.533028 27.722822 5.297671
+v -32.397369 27.038256 5.891796
+v -33.235252 27.685654 -0.385189
+v -33.519466 27.856518 -0.385488
+v -32.366211 25.827209 6.204982
+v -33.265892 26.350163 -0.523416
+v -33.236225 27.625000 -0.388335
+v -33.272675 26.346510 -0.524017
+v -26.605347 20.078762 13.642230
+v -26.622095 20.088545 13.644978
+v -27.403543 20.551250 13.629434
+v -26.101604 20.414307 -0.898045
+v -25.994364 20.351065 -0.901805
+v -25.973148 19.952314 7.964209
+v -26.101448 21.700069 -0.738636
+v -27.375978 21.477959 13.438376
+v -26.541651 21.940710 13.260575
+v -24.988455 22.329847 -0.618200
+v -25.968805 20.127378 10.013939
+v -8.936156 48.887878 11.489494
+v -7.307878 45.983322 -0.344882
+v -8.411240 46.644943 -0.353824
+v -9.002772 50.130001 13.072501
+v -8.935373 49.101215 11.489916
+v -8.399275 47.907406 -0.514003
+v -8.657674 50.455688 13.750487
+v -8.268003 50.746788 14.110481
+v -7.285995 48.514359 -0.674345
+v -7.607650 48.340107 -0.622135
+v -7.477534 50.269299 14.027843
+v -6.178044 47.859833 -0.658139
+v -7.114830 48.414028 -0.664779
+v -7.723530 50.429913 14.161184
+v -6.188935 46.593285 -0.479801
+v -6.185968 46.783550 -0.521735
+v -7.302345 48.980659 12.089357
+v -6.387098 46.481853 -0.470055
+v -18.205822 -17.584982 11.198298
+v -17.634575 -17.312109 0.298256
+v -17.268167 -18.046810 9.792706
+v -16.568575 -17.928566 0.356934
+v -17.365435 -17.467346 0.305739
+v -43.523327 6.636935 6.292892
+v -43.794388 7.079669 -0.059965
+v -43.573273 6.952597 -0.082038
+v -42.722454 6.461918 -0.128785
+v -42.588604 6.096992 6.261096
+v -41.648556 7.081151 -0.126203
+v -41.653442 6.630136 6.351351
+v -39.450573 -16.228188 11.222596
+v -39.558201 -16.179571 11.178172
+v -40.440910 -15.890628 10.388582
+v -40.378979 -14.813472 10.772555
+v -42.018948 -16.400101 -0.003434
+v -39.404942 -14.188917 11.573928
+v -40.902794 -15.734018 0.041100
+v -39.998669 -14.561669 11.225414
+v -38.518669 -14.610564 11.936291
+v -39.799046 -16.351152 0.047275
+v -39.794800 -17.632483 0.046214
+v -39.799015 -16.505157 0.042705
+v -38.533566 -15.614515 11.767001
+v -9.500967 10.446535 10.369212
+v -9.667579 10.167622 6.297331
+v -8.892467 10.109838 10.528238
+v -9.504388 11.101984 10.266008
+v -9.502036 11.315008 10.317306
+v -9.498058 11.406869 10.412001
+v -9.497272 11.435657 10.430393
+v -9.280249 11.558929 10.321568
+v -8.642118 11.933946 10.636120
+v -7.771873 11.020571 0.826517
+v -7.796829 11.459201 10.940628
+v -7.795373 10.480192 10.828221
+v -8.193465 10.235292 10.630728
+v -8.388412 10.120995 10.614560
+v -17.028427 -2.336446 12.267670
+v -17.058905 -1.029315 0.201507
+v -16.015127 -1.623732 0.113143
+v -16.241829 -2.751637 11.894483
+v -17.030420 -1.423851 12.233480
+v -16.239513 -0.905281 11.822170
+v -15.153664 -0.399614 4.613462
+v -15.431556 -1.314222 11.438174
+v -15.150301 -0.399189 4.598377
+v -14.969730 -1.016671 0.115215
+v -14.969721 -0.767474 0.133986
+v -15.435598 -2.161824 11.472845
+v -15.436654 -2.249909 11.492058
+v -15.458732 -2.262404 11.488168
+v -33.003708 -18.648148 -0.344647
+v -31.932003 -19.284340 -0.459932
+v -31.855583 -19.329138 -0.446927
+v -29.673254 -20.244671 13.545076
+v -30.754728 -19.639673 12.276190
+v -30.766188 -18.612583 12.182349
+v -31.526438 -18.167898 7.912811
+v -31.902420 -18.532549 5.818200
+v -32.999226 -18.465174 -0.324832
+v -29.685820 -18.261900 13.374712
+v -30.969547 -17.301317 5.124928
+v -30.975449 -17.852789 7.844900
+v -31.808205 -16.684919 -0.209306
+v -31.777653 -16.696627 -0.068306
+v -31.799603 -16.680202 -0.209360
+v -28.670986 -18.899366 14.570905
+v -30.659042 -17.363277 -0.322603
+v -30.875000 -17.233971 -0.299809
+v -30.956608 -17.185095 -0.291826
+v -31.264181 -17.000879 -0.261738
+v -30.666922 -18.696224 -0.291644
+v -30.668819 -17.862114 -0.361819
+v -28.670139 -19.361418 14.608254
+v -28.682104 -19.849926 14.552068
+v -28.805996 -19.910160 14.498063
+v -30.669350 -18.697599 -0.291412
+v -21.723862 31.198034 0.262835
+v -21.632343 30.732929 9.697914
+v -22.559738 31.285955 9.589841
+v -21.718918 32.515575 0.372870
+v -21.723036 31.404722 0.279537
+v -22.583725 32.364868 9.992401
+v -21.696791 32.880863 10.493610
+v -20.566412 33.164070 0.392968
+v -21.557570 32.797798 10.509817
+v 6.185346 35.354652 -1.218035
+v 7.304761 34.722481 -0.968856
+v 6.662908 36.680935 8.694697
+v 5.743962 37.240646 8.740544
+v 5.706420 38.462868 9.676264
+v 6.192426 36.672985 -1.265107
+v 6.192704 36.638618 -1.274157
+v 6.192568 36.550873 -1.278466
+v 6.191845 36.456860 -1.270268
+v 6.541151 39.101643 10.527851
+v 7.310219 37.353294 -1.051015
+v 6.400562 36.798508 -1.231335
+v 7.419394 38.577423 10.492367
+v 8.426950 36.709248 -0.894376
+v 8.426803 35.398609 -0.836381
+v 8.430303 36.287613 -0.914408
+v 7.502726 37.380009 9.595394
+v 7.621664 34.917053 -0.916445
+v -28.952854 -1.746807 11.147616
+v -28.074163 -2.196086 0.008296
+v -28.030260 -2.221498 0.016235
+v -28.619715 -1.939927 11.263683
+v -28.018764 0.405481 -0.203125
+v -28.050920 0.386869 -0.208943
+v -28.972227 -0.088577 10.637256
+v -28.602644 0.126570 10.937960
+v -26.882902 -0.253056 -0.110181
+v -27.724174 -0.395245 11.236513
+v -26.894955 -1.566420 0.052370
+v -26.882742 -0.278502 -0.112337
+v -27.714241 -0.742117 11.102538
+v -27.728634 -1.425514 11.296658
+v -28.357552 -1.789392 11.258714
+v -31.485598 -13.380294 12.384183
+v -32.008358 -12.526458 0.132342
+v -30.895748 -13.166058 0.025636
+v -30.646318 -13.846107 11.933302
+v -31.478582 -12.415627 12.589305
+v -32.010864 -11.233281 0.127356
+v -32.010509 -11.375000 0.129749
+v -32.007870 -12.224652 0.156386
+v -31.478331 -12.447824 12.593879
+v -30.892847 -10.591335 0.164120
+v -31.026695 -10.667088 0.150503
+v -31.322639 -12.321814 12.558687
+v -30.637115 -11.903258 12.372653
+v -30.240332 -12.114326 12.161579
+v -29.787437 -12.430085 12.706389
+v -29.789238 -13.411725 12.800065
+v -30.875000 -13.154084 0.025552
+v -30.599234 -13.818054 11.920365
+v -5.196743 10.196240 12.182876
+v -4.346627 9.794304 12.464314
+v -5.144319 11.185246 12.506167
+v -6.948061 9.440168 0.654014
+v -4.265328 11.740966 13.090279
+v -5.873727 10.081833 0.706298
+v -6.529886 9.690228 0.679601
+v -3.451222 11.339526 13.354809
+v -4.825040 9.471913 0.598140
+v -4.837353 8.211047 0.444649
+v -3.480748 10.381615 13.051747
+v -21.259438 48.199863 11.590630
+v -21.696545 47.468132 0.908033
+v -21.125002 47.134285 0.866315
+v -20.622217 46.834270 0.760953
+v -20.428480 47.651928 10.850906
+v -21.241072 49.194683 12.010951
+v -21.689072 48.719101 1.053987
+v -21.688658 48.679550 1.065290
+v -20.617472 49.337502 1.007995
+v -21.311493 48.936497 1.012641
+v -20.411882 49.668045 11.715199
+v -19.544487 48.711845 0.845475
+v -20.566427 49.308582 1.020483
+v -19.569498 49.151459 10.982164
+v -19.567190 48.130032 10.537811
+v -19.542616 47.456665 0.699112
+v -19.544224 48.512890 0.836416
+v -38.695324 -41.987068 -0.174653
+v -38.520191 -42.086945 -0.188183
+v -37.616932 -42.628998 -0.005840
+v -37.821285 -43.645725 10.614221
+v -38.667999 -43.159042 10.643870
+v -38.672649 -42.039333 9.641924
+v -38.697872 -40.731796 -0.138426
+v -37.783249 -41.390251 8.691668
+v -37.615845 -40.117573 0.003204
+v -38.372826 -40.539600 -0.152688
+v -38.360970 -41.805302 9.260337
+v -36.894409 -41.919121 8.770186
+v -37.432278 -40.230083 0.040252
+v -36.673084 -42.360222 3.299250
+v -36.936401 -43.055695 9.715117
+v -37.151646 -42.366829 0.089990
+v -37.043968 -42.400154 1.223792
+v -37.506367 -43.431911 10.248990
+v -46.389629 -32.745338 7.699675
+v -47.347191 -32.182961 7.576147
+v -48.721855 -31.576906 -0.138193
+v -47.594143 -32.244099 -0.175660
+v -46.368214 -32.758400 7.684377
+v -47.446213 -31.013960 6.987938
+v -46.672825 -30.511051 6.591906
+v -46.503540 -30.443090 6.714200
+v -45.521954 -31.034023 6.750853
+v -46.451744 -30.315615 -0.214646
+v -45.465054 -32.194103 7.252117
+v -46.465256 -31.612724 -0.228025
+v -45.529545 -31.104790 6.699137
+v -46.314590 -32.727726 7.677401
+v -46.590439 -31.682182 -0.225879
+v -37.537354 5.432134 7.069375
+v -36.873013 5.362257 -0.343561
+v -36.050842 4.875001 -0.317182
+v -35.772770 4.710311 -0.310719
+v -36.606434 4.877055 7.176723
+v -37.098129 5.171981 7.079980
+v -36.855022 6.638106 -0.384137
+v -36.872826 5.377174 -0.343776
+v -37.593964 6.183589 7.794502
+v -37.604790 6.507444 7.955748
+v -35.738461 7.266588 -0.358493
+v -37.332211 6.678172 8.458193
+v -36.798912 7.000903 9.117293
+v -40.914333 -7.991897 -0.001957
+v -40.626762 -6.274239 11.614029
+v -41.454727 -5.682844 12.190496
+v -41.453876 -4.751402 12.249433
+v -40.910202 -6.753671 0.009756
+v -40.913673 -7.836329 -0.003669
+v -40.710548 -4.465284 11.512039
+v -40.620117 -4.413157 11.513955
+v -39.856171 -6.149860 0.012215
+v -39.928562 -6.190480 0.016540
+v -40.762508 -4.436875 11.819695
+v -39.785648 -4.946649 11.163201
+v -38.798687 -6.776637 0.009197
+v -38.934677 -6.695980 0.010069
+v -39.604958 -6.298349 0.015136
+v -40.610004 -4.395800 11.723096
+v -39.801262 -4.937499 11.162309
+v -39.784176 -5.893263 11.187115
+v -39.935383 -5.981090 11.182919
+v -41.126034 -4.228117 12.069550
+v -41.601990 -3.954030 12.250370
+v -41.223167 -4.108195 -0.080113
+v -40.103664 -4.755184 -0.068005
+v -41.222591 -2.816312 -0.098873
+v -41.222252 -3.626647 -0.109969
+v -41.594841 -2.967807 12.017670
+v -40.098946 -2.167306 -0.158067
+v -40.801453 -2.512029 11.504307
+v -40.704109 -2.456384 11.389175
+v -38.970230 -2.813368 -0.216627
+v -39.205788 -2.677723 -0.219144
+v -39.796764 -2.953068 10.931290
+v -39.819355 -3.967857 11.236009
+v -38.976196 -4.110364 -0.136126
+v -39.816380 -3.362586 11.195853
+v -39.821064 -3.624389 11.259058
+v -36.161213 0.549086 5.986954
+v -36.430614 0.989110 -0.327028
+v -35.292355 0.328663 -0.300567
+v -35.174713 0.007923 5.315599
+v -34.770954 0.270531 4.885962
+v -48.190189 14.558874 10.853311
+v -48.624989 13.831007 0.227136
+v -47.553429 13.222333 0.336170
+v -47.357346 14.049891 10.548285
+v -48.194851 15.521792 10.710745
+v -48.625473 15.064661 0.178807
+v -47.555279 15.684359 0.239649
+v -47.362907 15.993658 10.258738
+v -46.802834 15.661968 10.052023
+v -46.512363 15.489083 9.924273
+v -46.488739 15.073792 0.348358
+v -46.511524 14.507319 10.067828
+v -46.487370 13.845412 0.396550
+v -46.873260 14.312649 10.287051
+v -9.435281 33.204788 13.622202
+v -9.708565 33.363693 13.683614
+v -8.503062 33.236893 0.232214
+v -7.435857 32.609348 0.153244
+v -8.931795 32.908558 13.588868
+v -8.500730 34.457573 0.359190
+v -8.501019 33.397358 0.229545
+v -9.710033 34.246830 13.810660
+v -8.947280 34.678925 13.907450
+v -7.423257 35.060757 0.289348
+v -9.652829 34.278862 13.807183
+v -8.175437 34.231487 13.857554
+v -6.329955 34.441933 0.058809
+v -6.384361 34.471924 0.078844
+v -6.337424 33.637264 0.045899
+v -6.326266 34.125000 0.004078
+v -8.164274 33.344872 13.698143
+v -6.343274 33.208908 0.053056
+v 9.367020 46.458164 0.642698
+v 10.316065 45.915401 0.812111
+v 10.394545 45.866302 0.800219
+v 9.440670 48.776814 15.161510
+v 8.696528 49.323101 15.770367
+v 8.657347 50.300213 16.721996
+v 9.379538 47.640499 0.463431
+v 9.328665 50.708260 16.847761
+v 10.416652 48.234905 0.467362
+v 9.062655 50.574306 16.944668
+v 11.446232 47.638542 0.588695
+v 10.905734 47.954933 0.554707
+v 9.967090 50.300507 16.582977
+v 10.035603 50.254078 16.530674
+v 11.430695 46.464996 0.815924
+v 10.124340 49.266083 15.563217
+v 10.756358 46.080509 0.827091
+v 11.344637 46.418770 0.829153
+v -42.818310 -28.720354 -0.365903
+v -41.674660 -29.380842 -0.440856
+v -42.209614 -29.125301 9.766695
+v -42.442257 -28.989611 9.527324
+v -43.121132 -28.597115 9.490912
+v -43.151596 -27.541752 10.482451
+v -42.822189 -27.407698 -0.239679
+v -42.821861 -27.625000 -0.250401
+v -43.131920 -28.075766 9.842001
+v -43.154114 -27.630241 10.564355
+v -42.212475 -27.002535 9.821287
+v -41.686623 -26.751345 -0.212575
+v -42.484631 -27.160616 9.666907
+v -41.296154 -27.533056 9.883047
+v -40.544849 -27.406076 -0.250183
+v -41.661171 -27.349213 10.356627
+v -41.333824 -28.587048 10.391116
+v -40.535469 -28.721981 -0.376685
+v -40.544048 -27.625000 -0.260988
+v -41.288025 -27.684387 9.773418
+v -41.315128 -28.220676 10.138970
+v -41.658920 -28.762976 10.591981
+v -35.870708 21.091541 8.820369
+v -36.231258 21.680435 0.370212
+v -35.161739 21.069611 0.178622
+v -34.979237 20.572037 8.891134
+v -35.904160 22.193745 8.080154
+v -31.203835 47.009544 0.128691
+v -30.116476 46.455891 0.335496
+v -28.291544 49.064632 14.386686
+v -29.123240 49.375427 13.792031
+v -29.117186 49.793743 13.822501
+v -29.077623 50.289688 14.072132
+v -28.246197 50.821644 14.735838
+v -30.099440 48.909946 0.466669
+v -27.483950 50.463623 15.069819
+v -29.034891 48.355221 0.668476
+v -27.775785 50.584141 14.861874
+v -29.037651 47.138130 0.604654
+v -27.486996 49.619179 15.015085
+v -35.475803 26.959496 4.762985
+v -35.681072 26.615868 -0.253647
+v -33.519474 27.862015 -0.385206
+v -33.533260 28.104347 5.202581
+v -25.957603 18.732965 13.614861
+v -25.994282 20.306162 -0.907368
+v -24.893764 19.673382 -0.943934
+v -25.173384 18.282202 13.587413
+v -25.419598 18.431253 13.525578
+v -25.959711 19.655973 13.540036
+v -25.167547 20.147764 13.332237
+v -23.798939 21.560034 -0.668368
+v -24.689240 19.882380 13.252627
+v -23.796497 20.300640 -0.824409
+v -32.948273 16.800783 11.744851
+v -33.894363 17.044794 -0.046014
+v -31.935516 16.223019 12.513144
+v -32.307022 16.445646 12.631531
+v -32.107647 18.372444 11.315207
+v -33.879028 19.697931 -0.068456
+v -30.994583 17.666475 12.924242
+v -32.759186 19.029911 -0.295257
+v -32.769592 17.701946 -0.283459
+v -30.913038 16.925566 13.580697
+v -30.956888 16.648287 13.273089
+v -25.289307 -22.712114 15.296290
+v -25.874340 -22.368542 15.349685
+v -24.479332 -22.515274 -0.216305
+v -24.375002 -22.577057 -0.214015
+v -23.446951 -23.134480 -0.013996
+v -25.119242 -22.799999 15.005511
+v -24.455240 -21.294842 -0.331841
+v -25.856628 -21.539059 15.256259
+v -23.394644 -20.695333 -0.234963
+v -24.375002 -21.249985 -0.338763
+v -25.110239 -21.125158 15.094975
+v -22.363827 -21.319973 -0.012280
+v -25.060698 -21.153749 15.090400
+v -24.184498 -21.527586 13.600972
+v -24.180769 -22.404732 13.498027
+v -0.303760 34.785023 8.246343
+v -0.500025 34.934830 8.442104
+v -0.071708 33.104668 -1.221658
+v 1.084580 32.415066 -1.189210
+v 0.462927 34.311886 8.170229
+v -0.491517 36.021767 8.344023
+v -0.063674 34.446079 -1.288018
+v -0.068156 33.346577 -1.280325
+v -0.491901 35.371922 8.298219
+v 1.088725 35.112610 -1.251602
+v 0.607771 34.830086 -1.289804
+v 0.452362 36.559273 8.329296
+v 2.249036 34.421558 -1.284730
+v 1.227818 35.025890 -1.290338
+v 1.406638 35.983501 8.235486
+v 2.253320 33.065392 -1.275227
+v 1.417929 34.856632 8.155394
+v 1.433998 32.595501 -1.273040
+v -34.169830 39.797215 8.121559
+v -34.170559 41.854385 5.656455
+v -34.034668 41.932312 5.542511
+v -33.156715 41.370018 6.580015
+v -33.922096 41.863976 5.607370
+v -32.631588 40.206188 -0.502669
+v -33.230179 40.307358 7.570870
+v -33.450577 40.179668 7.554432
+v -9.488353 8.744871 10.637803
+v -9.914196 9.440413 0.657374
+v -9.465912 9.181824 0.634072
+v -8.830887 8.815889 0.592747
+v -8.615587 8.228892 10.871067
+v -9.497036 9.766532 10.476350
+v -15.207047 1.337039 11.224901
+v -14.304169 0.814741 11.154211
+v -14.708736 0.998565 10.991395
+v -16.861467 0.788311 0.330179
+v -15.209412 2.386637 11.185615
+v -14.595517 2.743001 11.034121
+v -14.463223 2.814125 10.901524
+v -14.343215 2.882749 10.853582
+v -15.709613 1.473246 0.332893
+v -16.393764 1.066443 0.331598
+v -14.814691 2.609726 10.981717
+v -13.383076 2.438110 11.304903
+v -14.575454 0.817150 0.233010
+v -14.625003 0.846599 0.241174
+v -15.495986 1.349952 0.315463
+v -14.197017 2.779215 10.749000
+v -14.091682 2.725734 10.775776
+v -14.581775 -0.532700 0.132089
+v -13.367932 2.208441 11.437637
+v -13.355581 1.429211 11.527261
+v -14.625003 -0.558536 0.135329
+v -13.888935 1.073513 11.222110
+v -33.086205 -18.414095 -0.315536
+v -31.791500 -18.064419 11.594971
+v -32.580070 -17.566809 12.054031
+v -32.577560 -16.643955 12.088195
+v -33.079372 -17.176659 -0.184884
+v -33.080032 -17.323742 -0.196580
+v -32.583450 -17.212917 11.960843
+v -32.017765 -16.563211 -0.189109
+v -31.786285 -16.191036 11.866573
+v -30.956615 -17.179510 -0.291380
+v -31.176191 -16.556911 11.532597
+v -30.986343 -16.656960 11.757826
+v -30.985449 -17.578764 11.848725
+v -31.456482 -17.887463 11.344218
+v -31.535820 -17.931952 11.366651
+v 7.536171 40.321796 12.819620
+v 8.301222 39.868706 12.917739
+v 8.551476 41.113785 -0.087526
+v 8.542851 43.481564 0.423765
+v 9.011903 41.016708 14.327679
+v 9.589628 42.896278 0.278053
+v 8.995586 40.669250 14.702044
+v 9.020409 40.190235 14.055658
+v 9.594918 41.707626 0.057444
+v 9.415750 41.604630 0.044708
+v -37.315201 41.881321 -0.499283
+v -36.159332 41.198166 -0.511419
+v -35.863594 41.215469 6.678233
+v -36.072311 41.333359 6.475575
+v -34.284554 42.619366 4.756982
+v -35.001709 43.173485 -0.615582
+v -34.809536 42.941998 4.449778
+v -35.007515 41.843052 -0.569375
+v -29.271069 -1.564492 -0.200224
+v -28.148075 -2.237430 0.005776
+v -29.389254 -1.989179 11.153276
+v -30.157520 -1.522996 10.878982
+v -30.249815 -1.461545 10.720986
+v -29.241098 -0.238100 -0.368004
+v -30.159857 -0.398210 9.851658
+v -28.093695 0.412247 -0.212394
+v -28.892948 -0.042008 -0.356305
+v -29.469189 0.003837 10.248728
+v -29.289957 0.112535 10.476958
+v -29.186924 0.043827 10.566253
+v -45.342693 -19.474735 -0.021561
+v -45.269199 -19.518703 -0.020348
+v -44.187553 -20.164694 0.004437
+v -44.545788 -19.071629 5.397925
+v -45.197052 -18.776930 4.803853
+v -45.543449 -18.616919 4.507956
+v -45.335888 -18.130655 -0.060330
+v -45.547710 -18.159128 4.640794
+v -45.610481 -17.119375 6.121520
+v -44.628223 -16.459299 6.639004
+v -44.182831 -17.471832 -0.066736
+v -44.399284 -17.596712 -0.071907
+v -45.163025 -18.032265 -0.063297
+v -43.640930 -17.017807 6.875024
+v -43.029484 -18.151527 -0.035126
+v -44.370575 -16.654278 6.259684
+v -43.026714 -19.501347 -0.008689
+v -43.027733 -18.651751 -0.033572
+v -43.606621 -18.257917 6.537781
+v -44.492603 -19.034342 5.425959
+v -28.155643 -32.998989 12.510229
+v -28.725742 -32.067833 -0.851079
+v -27.640911 -32.692394 -0.934593
+v -27.361408 -33.454433 12.408697
+v -28.723570 -30.817698 -0.747875
+v -28.153849 -32.227768 12.584636
+v -28.154137 -32.082569 12.583891
+v -27.636585 -30.191656 -0.728147
+v -27.358353 -31.618999 12.554510
+v -26.561983 -32.076260 12.483999
+v -27.036980 -31.805290 12.544585
+v -26.563553 -32.993324 12.395482
+v -45.763073 45.704823 11.740923
+v -44.953888 45.174961 11.438336
+v -47.532982 44.930214 0.089893
+v -45.665504 46.777779 12.359926
+v -47.533146 44.970879 0.087894
+v -44.793640 47.313831 12.672155
+v -46.440426 45.615097 -0.007390
+v -44.384953 47.054211 12.523938
+v -44.019905 46.792126 12.245568
+v -45.348370 44.986172 -0.089960
+v -46.415264 45.600845 -0.008147
+v -45.342766 43.707199 -0.078424
+v -44.024498 46.478443 12.193261
+v -44.067627 45.747421 11.771609
+v -36.731514 30.569277 -0.274167
+v -36.336430 31.230661 9.381396
+v -36.727383 31.818638 -0.210001
+v -36.259384 32.315449 11.236026
+v -35.469734 32.789436 12.127251
+v -35.414146 32.821983 12.148687
+v -35.650764 32.441551 -0.174445
+v -34.576424 31.820744 -0.202759
+v -35.047230 32.597672 11.846042
+v -34.605125 32.325222 11.429599
+v -34.599396 31.247639 9.596086
+v -34.574764 30.572613 -0.266842
+v -25.971365 28.717878 0.033915
+v -25.090923 28.197561 0.026522
+v -24.362663 27.892042 4.695767
+v -24.714268 28.205456 8.653731
+v -26.255327 28.884874 0.005600
+v -24.694487 29.312857 8.732476
+v -24.712715 28.373880 8.657550
+v -24.583374 28.471729 9.378916
+v -23.687704 29.825291 8.922626
+v -22.585320 29.137897 10.000705
+v -23.888454 30.144775 0.238284
+v -24.045391 30.238832 0.250889
+v -22.481264 27.998056 10.851433
+v -23.340260 28.996647 4.393780
+v -23.696693 28.704540 1.761689
+v -23.915621 28.831795 0.124414
+v -23.909496 29.094831 0.152295
+v -23.898743 29.636961 0.195869
+v -24.375002 28.580837 0.106334
+v -24.094652 28.481590 1.782637
+v -23.944626 27.271185 -0.041140
+v -24.073084 26.877270 10.745407
+v -24.843157 27.365696 9.984984
+v -24.775013 28.363024 9.350500
+v -23.942524 28.508101 0.090468
+v -24.841642 27.415640 9.974369
+v -24.035217 26.900545 10.771548
+v -17.732927 38.060841 0.056982
+v -17.202894 37.723751 -0.057045
+v -16.583721 37.378937 0.110598
+v -17.023874 38.721954 6.737414
+v -18.062653 39.469727 7.496293
+v -18.062819 40.640072 7.597776
+v -17.722208 39.385647 -0.070385
+v -16.551563 39.998440 -0.373554
+v -16.748156 39.883762 -0.384893
+v -17.038218 41.104771 6.953388
+v -16.007057 40.453201 6.588626
+v -15.418256 39.361469 -0.065618
+v -16.925901 41.029125 6.871786
+v -15.956034 39.172642 6.062921
+v -15.434546 38.054470 0.175908
+v -15.965680 39.970291 6.138455
+v -8.485228 28.008303 -0.039725
+v -7.415339 27.390509 -0.127467
+v -8.086838 27.711271 12.685486
+v -8.353829 27.865469 12.702641
+v -8.880325 28.169094 12.820593
+v -8.488746 29.235273 0.074808
+v -8.488620 29.193159 0.070722
+v -8.884336 29.074280 12.951165
+v -8.628586 29.221992 12.936266
+v -8.103946 29.525562 13.011922
+v -7.316219 29.075169 12.962128
+v -7.304125 28.167793 12.799009
+v -7.220778 27.502705 -0.122511
+v -35.008728 -6.773695 11.411694
+v -35.905476 -6.286048 11.361401
+v -35.905888 -5.259748 11.335525
+v -37.629684 -6.927482 0.008686
+v -35.015453 -4.729001 11.359892
+v -36.488400 -6.248409 0.018828
+v -34.128384 -5.215702 11.409751
+v -35.355854 -6.884359 0.012026
+v -35.353195 -8.203847 -0.004961
+v -34.122108 -6.234108 11.435676
+v -48.541813 16.512625 10.708834
+v -48.568657 17.663877 0.081582
+v -47.514240 17.042297 0.189758
+v -47.710854 16.064083 10.407543
+v -48.333824 16.399380 10.642528
+v -48.544273 17.496836 10.537604
+v -46.849213 17.601377 9.781826
+v -46.461063 17.648981 0.249756
+v -46.858631 16.598917 9.936785
+v -35.628101 -43.024380 9.169362
+v -36.184898 -42.932724 0.285199
+v -36.077042 -42.996307 0.290206
+v -34.679878 -43.582443 9.248114
+v -35.781921 -41.853535 8.274297
+v -34.947433 -41.227020 7.430835
+v -33.933826 -41.843830 7.757102
+v -34.956638 -41.053547 0.094730
+v -34.458805 -41.521828 7.477322
+v -34.951733 -42.364090 0.219278
+v -33.812500 -43.026287 8.739186
+v -34.510624 -43.464127 9.084188
+v -26.556158 -18.485102 -0.504884
+v -25.523483 -19.095768 -0.502543
+v -25.493052 -19.113791 -0.501875
+v -27.237724 -18.764833 15.167708
+v -27.369158 -18.687647 15.179704
+v -27.945242 -18.338993 14.994986
+v -26.538088 -17.255882 -0.552215
+v -26.539520 -17.604034 -0.579896
+v -27.943808 -17.500851 15.084044
+v -25.457932 -16.649244 -0.566266
+v -27.860600 -17.452791 15.121118
+v -27.553122 -17.282286 15.054677
+v -27.218185 -17.090261 15.162711
+v -24.392025 -17.264444 -0.664047
+v -24.916403 -16.961185 -0.622441
+v -26.486721 -17.515400 15.127301
+v -24.374218 -17.274506 -0.667994
+v -24.372982 -17.468878 -0.693874
+v -24.372921 -17.464855 -0.693983
+v -26.471104 -18.020519 14.967160
+v -26.480043 -18.356876 15.005319
+v -24.398066 -18.512323 -0.595334
+v -24.375000 -17.554836 -0.686118
+v -24.373024 -17.470728 -0.693710
+v 8.807338 -42.019909 0.659818
+v 9.135812 -42.211491 0.695578
+v 9.878892 -42.665379 0.650544
+v 9.220268 -40.655758 10.566581
+v 8.356087 -40.091755 10.841042
+v 8.368156 -39.474838 10.624569
+v 8.368193 -39.713692 10.603899
+v 8.613365 -40.038094 5.132642
+v 8.821688 -40.805321 0.442664
+v 8.344742 -39.464043 11.145390
+v 8.951073 -40.733574 0.430422
+v 9.015238 -39.819603 5.071543
+v 9.595366 -40.136803 1.636503
+v 9.813101 -40.011299 1.641121
+v 9.892259 -40.191257 0.449314
+v 9.073839 -40.663956 0.426946
+v 9.007112 -40.704559 0.414222
+v 10.172533 -39.394394 9.073626
+v 10.023862 -39.082447 11.078823
+v 10.025739 -39.083622 11.078268
+v 10.952393 -40.801792 0.605837
+v 10.045481 -39.982220 10.892165
+v 10.051666 -40.115578 10.827502
+v 10.959612 -42.062389 0.577814
+v 10.950262 -41.200077 0.647194
+v 10.464142 -42.369736 0.482854
+v 6.268466 -3.311996 10.808226
+v 6.030889 -3.175313 10.923291
+v 6.349209 -3.304858 0.562049
+v 7.484565 -3.961220 0.614614
+v 6.942973 -3.702509 10.948825
+v 6.353408 -1.990772 0.425386
+v 6.348256 -2.953010 0.593084
+v 6.041413 -2.117744 10.580743
+v 6.987281 -1.573665 10.103372
+v 7.500712 -1.328405 0.306503
+v 6.443784 -1.887020 10.239216
+v 8.638680 -1.989188 0.418225
+v 7.648176 -1.961561 10.243222
+v 7.907372 -2.112792 10.281780
+v 7.874777 -3.179039 10.721386
+v 8.621671 -3.305276 0.647622
+v 7.903374 -2.208314 10.335692
+v 8.078602 -3.614612 0.703164
+v 36.585995 -27.140490 11.896968
+v 36.084442 -26.321299 0.142227
+v 36.534508 -26.578993 0.076143
+v 37.158703 -26.939262 0.048334
+v 37.414513 -27.636711 12.260674
+v 36.346107 -25.659521 6.320168
+v 36.084511 -26.076517 0.154073
+v 36.578152 -26.737944 11.729490
+v 36.572784 -26.163034 11.627231
+v 36.816345 -26.003729 11.472515
+v 37.285831 -25.729576 11.449643
+v 38.229919 -26.051512 10.416049
+v 37.991714 -25.671614 7.884783
+v 37.480991 -25.716698 11.481812
+v 38.228798 -26.184429 11.818273
+v 38.227676 -27.085321 11.070251
+v 38.229286 -26.180277 11.053148
+v 38.226807 -27.165543 12.222406
+v 37.224987 -26.900799 0.044980
+v 38.048050 -27.119410 10.065519
+v 9.735956 -37.588966 11.431141
+v 9.461515 -37.901039 9.628881
+v 10.134066 -38.285912 9.592430
+v 10.216658 -38.619598 8.478503
+v 10.567956 -38.117413 11.183364
+v 8.048145 -38.225220 0.318260
+v 8.048404 -38.285439 0.321321
+v 8.408539 -38.000465 2.689150
+v 8.527815 -38.144226 3.478757
+v 9.249865 -37.702042 8.229032
+v 9.770379 -36.558990 11.634832
+v 10.621256 -36.055473 11.593773
+v 9.154783 -37.568211 0.302555
+v 8.552131 -37.927414 0.286276
+v 11.447286 -36.568657 11.350107
+v 10.397188 -37.996201 1.599369
+v 9.594904 -37.537216 1.645231
+v 9.359801 -37.680050 0.317227
+v 11.428436 -37.600498 11.143411
+v 10.594011 -38.935585 3.388955
+v 10.593004 -38.208344 3.402534
+v 40.967636 35.071964 7.524249
+v 40.683014 34.595493 0.568214
+v 41.802094 33.942150 0.490169
+v 41.931679 34.489056 7.239038
+v 40.683620 35.889286 0.544821
+v 40.683552 35.878510 0.543488
+v 40.996544 36.221474 8.198111
+v 41.805676 36.540363 0.676660
+v 41.957478 36.784435 8.582786
+v 42.921471 35.895638 0.648243
+v 42.902565 36.228001 8.311961
+v 42.905567 35.082596 7.642341
+v 42.916946 34.770798 3.086602
+v 42.922401 35.280560 0.572353
+v 42.140739 34.136559 0.459008
+v 42.618980 34.600395 3.123330
+v 30.654263 25.716129 12.604204
+v 30.622112 27.094900 -0.123286
+v 31.748800 26.450211 -0.190091
+v 31.489067 25.157948 13.308024
+v 31.468704 25.170776 13.298210
+v 30.619461 28.400858 -0.084826
+v 30.621452 27.396425 -0.135306
+v 30.650745 26.779255 12.044718
+v 31.748915 29.067728 -0.127276
+v 31.510923 27.258512 12.224114
+v 32.344715 26.673742 12.860054
+v 32.883217 28.425695 -0.235659
+v 32.093807 26.839087 12.736083
+v 32.881821 27.117729 -0.301125
+v 32.324165 25.644861 13.286358
+v 32.751236 27.041460 -0.296176
+v 46.970654 -7.641132 -0.036902
+v 48.066246 -8.285910 0.054689
+v 50.872986 -9.463393 18.050066
+v 50.038380 -8.993626 17.178560
+v 46.978485 -6.396965 -0.029014
+v 46.979252 -6.737550 -0.014874
+v 49.943062 -8.365686 16.626730
+v 49.918713 -8.116764 16.483217
+v 50.666763 -7.741900 16.653666
+v 48.076996 -5.804032 0.010709
+v 51.481457 -8.250130 17.460161
+v 49.164337 -6.459781 0.101455
+v 50.976566 -7.933961 16.907761
+v 49.160007 -7.696679 0.152391
+v 51.570766 -9.097966 18.181570
+v 48.855404 -7.863242 0.141465
+v 14.741309 22.584236 7.189221
+v 15.384423 22.516590 0.013134
+v 16.537319 21.833857 0.038125
+v 15.769199 21.987490 6.936907
+v 15.400162 23.851746 0.005038
+v 14.651806 23.721331 8.329248
+v 16.569456 24.509560 0.021910
+v 15.543335 24.252476 9.190948
+v 17.726271 23.828838 0.055272
+v 16.799677 24.374243 0.026894
+v 16.534775 23.692970 8.964148
+v 16.670586 22.566084 7.850973
+v 17.709991 22.488480 0.062507
+v 16.936031 22.056217 0.043890
+v 11.523290 -8.718661 0.476047
+v 12.590288 -9.384946 0.322048
+v 11.830034 -7.065217 11.768243
+v 11.007058 -6.512845 12.123385
+v 11.032123 -5.659082 11.638201
+v 11.521748 -7.462301 0.615302
+v 11.007362 -6.495430 12.118074
+v 11.028513 -5.825819 11.704422
+v 12.571652 -6.863709 0.602672
+v 11.316652 -5.508636 11.572479
+v 11.388714 -5.473487 11.540200
+v 11.824278 -5.164681 11.854902
+v 12.589034 -5.568049 12.299724
+v 13.635253 -7.507909 0.476063
+v 13.113935 -7.193581 0.525375
+v 12.164850 -5.320601 12.265401
+v 13.654685 -8.776865 0.309380
+v 13.642748 -7.898664 0.407537
+v 12.669926 -6.665345 11.426218
+v 12.532359 -6.787947 11.245085
+v 37.836296 10.325006 0.232487
+v 37.942715 10.263472 0.240057
+v 37.274445 10.582692 12.991449
+v 36.995033 10.744800 12.868496
+v 36.832596 10.838204 12.956601
+v 37.953709 12.793331 0.030302
+v 37.470753 12.514288 0.038165
+v 37.839722 12.728538 0.234983
+v 36.744892 12.163541 13.124027
+v 37.279667 12.471351 12.891814
+v 39.042591 12.158311 0.186893
+v 37.381401 12.415857 12.836917
+v 38.081730 11.995907 13.146545
+v 38.074524 11.056859 13.243709
+v 39.034145 10.894670 0.300797
+v 39.034618 11.375000 0.294399
+v 39.567669 19.634295 12.799148
+v 38.988094 20.580925 -0.784243
+v 40.152679 19.912607 -0.921772
+v 40.437130 19.137077 12.657791
+v 39.175919 21.512096 3.669505
+v 38.995697 20.927002 -0.591073
+v 38.996597 21.910425 -0.528895
+v 38.991840 21.920990 -0.640248
+v 39.568199 20.640732 12.853707
+v 40.290115 21.920700 5.639315
+v 39.645882 21.549103 5.632242
+v 40.439419 21.154762 12.767010
+v 39.001671 21.926666 -0.640191
+v 41.315842 20.918291 9.889006
+v 40.739571 21.837353 3.765287
+v 40.698502 21.816673 4.233567
+v 41.313656 20.658936 12.625101
+v 41.095840 22.016754 -0.297177
+v 41.323929 21.878296 -0.238709
+v 41.324348 21.927969 -0.762745
+v 41.134785 22.036364 -0.741231
+v 41.312927 19.742956 11.201997
+v 41.314560 20.656418 11.184736
+v 41.311897 19.647676 12.570441
+v 41.324284 21.890175 -0.766877
+v 40.433510 20.074474 -0.920175
+v 41.307755 20.577999 -0.909606
+v 40.302635 19.977547 -0.610300
+v 41.238815 19.728893 10.787420
+v -7.902826 -43.306145 4.534101
+v -7.818056 -43.289848 4.780551
+v -6.853104 -43.842216 4.727623
+v -6.592010 -43.468983 6.737934
+v -7.412601 -42.748703 7.753422
+v -7.309120 -41.550083 8.408591
+v -8.624978 -42.823147 -0.237738
+v -8.629395 -43.083149 -0.260984
+v -6.416254 -41.037292 8.091183
+v -7.495728 -42.150818 -0.220315
+v -7.874509 -42.375252 -0.207080
+v -5.587096 -41.706646 7.100594
+v -6.382581 -42.788055 -0.285926
+v -5.636468 -42.559383 6.617407
+v -5.973892 -43.346703 3.473890
+v -5.974054 -43.444412 3.469318
+v -6.388383 -44.107342 -0.381097
+v -6.382191 -43.121410 -0.292812
+v -6.584763 -44.226379 -0.381956
+v -6.433237 -44.134708 -0.382983
+v -6.112555 -43.197041 6.565414
+v -6.777779 -43.832733 4.389862
+v -14.634329 -45.228046 13.776871
+v -15.214746 -46.199688 -0.408127
+v -14.850952 -46.403812 -0.343764
+v -14.145154 -46.814476 -0.377757
+v -13.878108 -45.687416 13.530198
+v -14.615330 -44.329739 14.215539
+v -15.212144 -44.963291 -0.381009
+v -15.212645 -45.353092 -0.381733
+v -15.215040 -46.090042 -0.418594
+v -14.144137 -44.344944 -0.324772
+v -14.934719 -44.803135 -0.390058
+v -13.861244 -43.890110 14.408485
+v -13.079198 -44.961170 -0.373065
+v -13.935128 -44.465199 -0.317798
+v -13.115083 -44.330402 14.171434
+v -13.077694 -46.194855 -0.378533
+v -13.078797 -45.242302 -0.398267
+v -13.112936 -45.229122 13.731948
+v -14.007294 -46.735420 -0.391654
+v -13.471146 -46.423084 -0.376069
+v 32.824265 3.243701 12.113815
+v 32.793175 4.576918 -0.193143
+v 33.880318 3.939368 -0.112669
+v 33.664886 2.867547 11.082842
+v 32.823975 4.110874 12.779883
+v 32.790562 5.842928 -0.175839
+v 32.792580 4.875001 -0.180205
+v 33.880653 6.465947 -0.064331
+v 33.639343 4.631443 12.459706
+v 34.966431 5.818461 0.040751
+v 34.497593 4.293161 11.442251
+v 34.523781 3.396241 10.730478
+v 34.963268 4.557018 0.022119
+v 34.963688 4.875001 0.036026
+v 5.144089 -9.420095 -0.061663
+v 6.291608 -10.097512 -0.043640
+v 8.390466 -10.978027 13.413186
+v 7.530373 -10.472157 13.329707
+v 7.582215 -9.524232 13.592583
+v 5.170690 -8.113680 0.049526
+v 5.150895 -9.106169 -0.032627
+v 7.630108 -9.967099 13.873534
+v 8.400023 -9.035223 13.386058
+v 6.346738 -7.498790 0.190766
+v 6.293567 -7.526342 0.183148
+v 9.302103 -9.587844 13.836956
+v 7.485132 -8.183945 0.225137
+v 6.920791 -7.844473 0.216122
+v 9.353844 -10.271156 14.267805
+v 9.359873 -10.485677 14.327076
+v 9.373711 -10.566016 14.435427
+v 9.370401 -10.588284 14.412302
+v 7.455809 -9.475402 0.093782
+v 7.470901 -8.772267 0.158806
+v 9.236097 -10.643007 14.283987
+v 8.873934 -7.285206 0.439376
+v 9.926373 -7.908236 0.457301
+v 8.581076 -7.639162 12.539950
+v 8.350162 -7.497604 12.424470
+v 7.810344 -7.173335 12.307290
+v 8.876451 -6.069086 0.563761
+v 8.874901 -6.541733 0.521794
+v 7.853802 -6.247300 11.939010
+v 8.691693 -5.783382 11.737188
+v 9.924809 -5.474439 0.718527
+v 9.987001 -5.511128 0.721341
+v 9.044711 -5.997405 11.814598
+v 10.007289 -7.862216 0.469080
+v 10.007294 -7.862213 0.469081
+v 9.063320 -7.379556 12.436036
+v 9.063291 -7.379570 12.436042
+v 23.414700 -45.093758 0.399279
+v 24.087194 -45.500000 0.386384
+v 24.305820 -45.638359 0.343528
+v 24.427109 -45.708431 0.360839
+v 24.536457 -45.774708 0.357393
+v 24.062445 -44.328381 7.493979
+v 23.096991 -43.736206 7.567526
+v 23.421852 -43.795795 0.348929
+v 23.420713 -44.068573 0.351390
+v 23.131807 -42.727589 6.878752
+v 23.620279 -43.164680 3.087016
+v 24.351858 -42.736519 3.136694
+v 24.536753 -43.156845 0.352993
+v 23.312473 -42.650444 6.739779
+v 25.154760 -42.891640 6.007362
+v 25.653944 -43.817211 0.365909
+v 25.541405 -43.750393 0.367250
+v 24.456150 -42.471249 6.065983
+v 25.095879 -43.921009 6.721624
+v 25.659288 -45.129070 0.361365
+v 24.817690 -45.610672 0.368037
+v 46.001457 -44.247780 7.155744
+v 45.866940 -44.170219 7.188885
+v 46.081093 -44.257374 0.218218
+v 46.183670 -44.316570 0.202721
+v 46.200138 -44.363483 7.325487
+v 46.082558 -42.927570 0.170500
+v 46.081184 -43.875004 0.215147
+v 45.890388 -43.005775 6.425518
+v 47.052498 -42.348656 3.677610
+v 46.566483 -42.646301 0.480121
+v 47.231323 -42.263229 0.265362
+v 47.247452 -42.255524 -0.042377
+v 46.499172 -42.657131 5.825564
+v 46.945248 -42.399887 5.724042
+v 47.427006 -42.700779 6.154615
+v 47.260941 -42.263187 -0.044118
+v 48.066414 -43.659447 4.570695
+v 47.914024 -43.043739 6.626092
+v 47.849712 -43.994377 7.493510
+v -8.951090 -51.409969 14.253173
+v -9.571753 -50.396229 -0.293201
+v -8.445842 -51.049519 -0.266862
+v -8.137614 -51.889866 14.447744
+v -9.574290 -49.090836 -0.298404
+v -9.573093 -49.541523 -0.289063
+v -8.971758 -50.429230 13.808307
+v -8.446650 -48.438087 -0.305437
+v -8.530883 -50.158112 13.672480
+v -8.167634 -49.869453 13.014600
+v -7.319750 -49.096554 -0.285318
+v -7.330409 -50.361542 13.059846
+v -7.322084 -50.401939 -0.258296
+v -7.332371 -51.109165 14.069977
+v -7.332989 -51.409058 14.206209
+v -8.004901 -50.796074 -0.254061
+v 41.350357 -2.351577 6.652679
+v 41.558060 -3.190788 3.851178
+v 42.019871 -2.530630 7.406921
+v 41.273300 -2.307481 6.656855
+v 40.358040 -1.663019 2.632302
+v 40.455994 -1.781075 3.280702
+v 40.539856 -1.729713 3.832451
+v 40.890316 -2.059219 6.150331
+v 40.764721 -1.229915 5.303667
+v 40.133003 -1.841089 1.152723
+v 41.052094 -1.362654 -0.044601
+v 40.667091 -1.592283 -0.057712
+v 40.601234 -1.602091 0.459255
+v 40.989315 -1.094071 5.344611
+v 41.806915 -0.584021 5.767213
+v 42.142593 -1.982391 -0.086930
+v 42.902370 -0.949526 6.968008
+v 42.976925 -1.927473 7.626335
+v 42.138271 -3.269327 -0.167431
+v 41.856735 -3.440897 -0.177247
+v 42.791981 -2.049300 7.534644
+v 9.209692 0.567681 0.091561
+v 9.426846 0.442534 0.094130
+v 10.421888 0.381411 5.667188
+v 10.472836 0.596431 8.320556
+v 9.541132 1.122524 8.191715
+v 9.207124 1.840278 -0.009077
+v 9.527057 1.780869 7.827485
+v 9.536708 2.190152 8.051694
+v 10.455322 2.708331 7.408575
+v 10.311213 2.476634 -0.096746
+v 10.327898 2.633584 7.352736
+v 10.431392 2.693672 7.366651
+v 11.417800 1.841203 -0.030262
+v 10.517669 2.357662 -0.094304
+v 10.530239 2.665586 7.419630
+v 11.396680 2.212457 8.530266
+v 11.397290 1.166687 8.801300
+v 11.399439 1.107798 7.940858
+v 11.404886 1.616932 5.429713
+v 11.417916 1.733962 -0.024703
+v 11.396880 2.125322 8.490993
+v 11.397245 1.376347 8.714501
+v 10.842337 0.789194 8.009533
+v 10.647912 0.692181 8.236365
+v 16.959761 19.656740 0.057463
+v 17.131924 19.558739 0.042474
+v 17.074080 19.270958 3.048438
+v 16.959623 19.337952 3.041183
+v 16.547924 19.404987 4.642638
+v 16.387590 19.502840 4.594979
+v 16.084133 19.671289 4.661511
+v 16.072462 20.171915 0.040206
+v 16.218452 20.087118 0.043360
+v 16.069853 21.407284 0.032406
+v 16.084402 20.653156 5.673261
+v 17.133030 22.027321 0.049425
+v 16.944197 21.917397 0.044908
+v 17.009712 21.089838 6.449549
+v 18.195097 21.405048 0.081935
+v 17.457325 20.844677 6.354821
+v 17.931580 20.547726 6.490360
+v 18.195820 20.182777 -0.029164
+v 18.193781 21.010595 0.084159
+v 17.954687 19.643154 5.853553
+v 17.958172 19.555107 5.761211
+v 17.268423 19.638550 0.036285
+v 17.791353 19.946743 -0.016230
+v 17.427336 19.297533 5.160777
+v 19.771460 -7.580162 13.725311
+v 19.067690 -7.269886 9.775902
+v 18.303251 -7.066846 0.469135
+v 18.523846 -7.198665 0.412889
+v 20.706705 -8.114422 14.408266
+v 20.205395 -7.834507 13.800333
+v 19.714375 -6.589711 13.377081
+v 19.277552 -6.334206 10.923908
+v 19.275957 -7.230364 10.940855
+v 18.382967 -4.816706 0.967305
+v 19.277998 -6.244133 10.478236
+v 19.830282 -6.520575 13.348655
+v 20.724102 -6.250538 14.434820
+v 18.625383 -4.680114 0.947562
+v 21.689537 -6.857722 15.605389
+v 19.714705 -5.331850 0.810964
+v 18.949148 -4.875000 0.958433
+v 19.656708 -6.580693 0.463402
+v 21.679413 -7.756422 15.590477
+v 19.181253 -6.834379 0.404777
+v 7.434209 -29.806290 -0.452355
+v 7.582436 -29.893946 -0.451941
+v 7.602612 -30.273214 7.980874
+v 7.068823 -30.166451 12.775044
+v 6.204025 -29.676895 13.274449
+v 7.454511 -28.526039 -0.518179
+v 6.212295 -28.742517 13.299410
+v 7.084614 -28.268707 12.826302
+v 8.232653 -27.981077 2.567861
+v 7.847673 -28.285711 0.036680
+v 8.252388 -28.079132 -0.562785
+v 7.917688 -28.749647 12.751185
+v 8.857824 -28.642443 5.721736
+v 8.710810 -28.557405 5.733222
+v 7.445749 -28.460760 12.618146
+v 8.507307 -29.334688 8.286768
+v 9.012325 -29.036009 4.531368
+v 7.895342 -29.701284 12.837082
+v 8.258038 -29.728365 10.119335
+v 7.606962 -30.097891 10.033653
+v 7.177743 -30.110823 12.715858
+v 10.901415 -18.593739 -0.691933
+v 11.131221 -18.738338 -0.731846
+v 12.003068 -19.235065 -0.564615
+v 11.259139 -16.965149 10.635785
+v 10.386126 -16.391951 10.934130
+v 10.903561 -17.287827 -0.630407
+v 10.905014 -17.933872 -0.716698
+v 10.901608 -18.241802 -0.666787
+v 10.393842 -15.410612 10.844818
+v 11.211123 -14.845659 11.358693
+v 12.002689 -16.645155 -0.558924
+v 11.375000 -17.004623 -0.559809
+v 10.730316 -15.246144 10.695968
+v 13.104696 -17.293531 -0.519179
+v 12.371232 -16.869923 -0.616684
+v 12.054991 -15.347211 11.343869
+v 13.105470 -18.579988 -0.472718
+v 13.107159 -18.136904 -0.510970
+v 12.156510 -16.534872 10.239536
+v 12.156468 -16.545139 10.240456
+v 12.054926 -19.204008 -0.559289
+v 9.658630 -40.167027 0.429323
+v 9.383008 -40.007652 0.409245
+v 8.297248 -39.436665 11.158718
+v 8.347548 -38.237259 5.600968
+v 8.167131 -38.681190 11.473519
+v 8.164808 -38.311626 11.549080
+v 9.078317 -37.783985 11.502366
+v 9.664059 -37.504181 0.325660
+v 10.012012 -38.306541 11.238640
+v 10.814910 -38.170841 0.409541
+v 10.811070 -39.502316 0.461318
+v 41.601791 -50.476868 13.149088
+v 41.055935 -49.585300 0.355848
+v 41.489925 -49.837708 0.379132
+v 42.120766 -50.202988 0.377145
+v 42.397423 -50.957256 13.584416
+v 41.562565 -49.481342 12.268505
+v 41.054108 -48.351925 0.364388
+v 41.584106 -50.134605 12.747607
+v 42.199207 -49.055523 11.785340
+v 42.358799 -48.957909 11.740588
+v 42.121883 -47.742512 0.430303
+v 43.185860 -48.362976 0.436349
+v 42.288769 -47.840591 0.439250
+v 42.727051 -49.171730 11.732961
+v 43.176769 -49.441570 11.815101
+v 43.183697 -49.591831 0.405033
+v 43.176003 -49.785816 12.070755
+v 43.174305 -50.459526 12.867105
+v 21.124771 25.179611 11.729699
+v 20.907034 24.932018 10.299815
+v 20.907415 24.360594 8.087247
+v 20.192808 24.119862 5.609481
+v 19.747892 23.613934 2.687677
+v 20.776583 23.678162 5.160941
+v 21.096361 23.487038 5.112141
+v 21.970156 24.736130 11.839991
+v 21.329485 25.068775 11.743064
+v 21.086754 26.101297 11.458247
+v 20.577185 25.608299 8.109930
+v 20.907526 25.207523 10.296825
+v 19.904707 24.085054 3.710865
+v 19.431490 24.499870 0.581751
+v 19.357611 24.428392 0.096298
+v 19.356312 23.921469 0.099167
+v 21.892408 26.567949 11.241352
+v 20.912306 25.556931 3.694990
+v 20.911337 25.660086 5.522467
+v 19.473333 24.497347 0.099057
+v 21.532412 24.477692 0.155287
+v 20.830505 24.866541 0.133930
+v 20.913153 24.890646 0.474505
+v 22.732357 26.108940 11.297454
+v 22.765446 25.189411 11.574329
+v 21.521200 23.198616 0.011397
+v 21.533247 24.270552 0.156497
+v 22.763512 25.227207 11.557642
+v 21.417597 23.362251 2.127297
+v 21.131123 22.963575 0.022859
+v 45.818897 -39.526512 4.232010
+v 45.649487 -39.810112 0.091718
+v 45.717724 -39.850319 0.082979
+v 45.893013 -39.570892 4.214809
+v 45.648552 -38.477772 0.029377
+v 45.818016 -39.490513 4.209401
+v 45.837608 -38.277077 4.653200
+v 46.802834 -37.811558 -0.015433
+v 46.254665 -38.129665 -0.081313
+v 46.005928 -38.182358 4.523760
+v 46.884480 -37.680286 4.236855
+v 47.958115 -38.480183 -0.070603
+v 46.970493 -37.734745 4.121129
+v 47.949749 -38.333122 3.320373
+v 47.958302 -38.596325 -0.087424
+v 47.950027 -38.392742 3.235116
+v 47.950687 -38.664700 3.099335
+v 34.819675 -47.734207 12.742710
+v 34.788044 -46.377445 0.218432
+v 35.876087 -47.003277 0.184377
+v 35.631603 -48.219646 12.889722
+v 34.816719 -46.734703 12.366429
+v 34.785347 -45.108337 0.201238
+v 34.786560 -45.658169 0.227571
+v 34.818523 -47.430641 12.517750
+v 35.877659 -44.464581 0.168970
+v 35.647167 -46.216820 12.131397
+v 36.479168 -46.697475 12.113632
+v 36.969799 -45.101280 0.182177
+v 36.694523 -44.942684 0.190797
+v 36.966507 -46.368359 0.166220
+v 36.467251 -47.687000 12.330918
+v 36.337955 -47.765152 12.366971
+v 44.089649 32.638081 7.899891
+v 43.461346 32.980824 6.835314
+v 43.263058 33.096298 6.773005
+v 42.139812 33.591511 0.469569
+v 43.244125 32.937088 0.392741
+v 44.454765 32.429199 8.154761
+v 43.379230 34.155712 7.392863
+v 43.296741 35.476997 0.613772
+v 44.492630 34.582142 8.299049
+v 45.610130 33.879536 9.644524
+v 44.400497 34.814171 0.582568
+v 44.905251 34.331242 8.423222
+v 44.367973 33.552799 0.425356
+v 45.655319 33.073601 10.034837
+v 45.621624 32.824097 9.800932
+v 43.701393 33.195984 0.350734
+v 23.584230 14.138809 -0.266943
+v 23.610222 14.123345 -0.264743
+v 23.582472 14.100407 0.638487
+v 23.640471 14.066996 0.618232
+v 23.659685 13.705940 8.646131
+v 23.526545 13.732569 9.841915
+v 22.716978 14.230029 9.410153
+v 23.606405 15.373823 -0.359314
+v 22.749470 15.224485 9.172672
+v 24.348352 15.897423 2.697475
+v 24.078848 15.684162 0.925508
+v 23.581800 15.395543 0.660364
+v 23.613129 15.377601 -0.359332
+v 23.601234 15.710238 9.373456
+v 24.374876 15.865455 2.873054
+v 23.813025 15.575505 9.487563
+v 23.662289 13.810784 9.873712
+v 43.365746 29.604624 0.242601
+v 44.424961 28.938766 0.062508
+v 43.996204 30.247017 6.517786
+v 43.084599 30.805952 6.585959
+v 43.109688 31.787081 6.110872
+v 43.362465 30.856146 0.420160
+v 43.111340 31.731949 6.069611
+v 43.922268 32.539536 7.630955
+v 44.407368 31.436739 0.327416
+v 43.395401 30.875000 0.420163
+v 45.458656 30.804562 0.243119
+v 45.343391 30.875000 0.262431
+v 44.750183 32.118187 8.249825
+v 44.827770 30.941080 7.417358
+v 45.129013 30.295158 4.016677
+v 45.465042 30.413637 0.187223
+v 44.597240 29.037697 0.062573
+v 44.759712 30.081608 4.010373
+v 44.278439 30.365648 6.337482
+v 26.695551 -20.028831 -0.143745
+v 26.732185 -20.049984 -0.147120
+v 26.751703 -20.105574 8.293436
+v 27.138693 -20.347391 11.757498
+v 27.047012 -20.303596 13.506866
+v 26.284060 -19.861366 13.250221
+v 26.694569 -18.799017 -0.111699
+v 26.288963 -18.964088 13.090638
+v 27.757938 -18.184250 -0.058426
+v 27.135048 -18.544622 -0.139050
+v 27.063591 -18.515928 13.190509
+v 28.815237 -18.800005 0.078190
+v 27.823950 -18.967548 13.448232
+v 27.812325 -19.857937 13.605018
+v 28.191240 -19.921980 8.494377
+v 28.815239 -18.957550 0.078160
+v 27.586195 -20.088655 11.781253
+v 13.358495 -44.589355 12.381381
+v 13.127701 -44.452293 12.306017
+v 12.541581 -44.099442 12.008399
+v 12.056099 -43.306492 0.630203
+v 13.114405 -43.923862 0.728598
+v 12.503674 -43.080753 11.159922
+v 12.058191 -42.091213 0.730131
+v 13.038922 -42.737564 10.877633
+v 13.322631 -42.548641 10.669339
+v 13.117319 -41.495369 0.867774
+v 12.740962 -41.711704 0.857380
+v 14.169486 -42.123333 1.024769
+v 14.158101 -42.116600 1.023718
+v 14.161551 -43.064957 10.958526
+v 14.167410 -43.330132 0.925538
+v 14.159193 -44.088745 11.820957
+v 40.717049 -45.299313 11.093454
+v 39.934669 -46.188965 5.955569
+v 40.086555 -46.276817 5.943705
+v 40.497025 -47.322426 2.781176
+v 41.552574 -45.813511 10.908483
+v 39.434608 -45.586220 2.645116
+v 40.638290 -44.384193 10.553520
+v 39.221802 -45.754616 1.245951
+v 40.179413 -45.236969 0.335728
+v 39.700764 -45.523216 0.306089
+v 39.664589 -45.528603 0.590062
+v 41.409840 -43.967735 9.809494
+v 42.268650 -44.489159 9.614800
+v 41.275707 -45.838993 0.394797
+v 42.332321 -45.419807 10.174034
+v 41.279076 -47.105000 0.386116
+v 40.820004 -47.386105 0.357644
+v 18.149242 -30.526030 0.344032
+v 18.344246 -30.637068 0.360951
+v 19.334688 -30.697908 5.908278
+v 19.354052 -30.616186 6.916730
+v 18.380558 -30.138803 5.997174
+v 18.372448 -29.691854 5.785353
+v 18.149744 -30.441988 0.353833
+v 20.304342 -29.282970 0.227866
+v 20.194159 -29.218822 0.242201
+v 19.643562 -28.639469 6.483628
+v 19.898439 -28.787251 6.464973
+v 20.288025 -28.996161 6.841208
+v 20.292307 -29.446283 5.294296
+v 20.304415 -29.337536 0.225816
+v 20.288103 -29.838659 7.229566
+v 19.529467 -30.509003 6.993380
+v 48.121372 15.794014 12.589523
+v 48.088676 17.196373 -0.355682
+v 49.159031 16.566990 -0.260737
+v 48.914814 15.351944 12.430799
+v 48.117546 16.813278 11.853072
+v 48.109795 17.215057 8.847769
+v 48.088509 17.275679 -0.355890
+v 48.408485 17.028418 11.521447
+v 49.604515 17.444277 8.358458
+v 49.142353 17.316959 10.869150
+v 49.782299 16.965908 10.737146
+v 50.218388 18.384661 0.132074
+v 50.214485 18.387022 0.131489
+v 50.222084 17.166809 -0.051722
+v 50.221573 17.336563 -0.026101
+v 50.216011 17.340923 0.110911
+v 50.219860 17.900309 0.058977
+v 49.747078 15.912212 11.522135
+v 49.730324 16.894686 -0.211680
+v 11.333445 -45.621639 13.268044
+v 9.171412 -44.668449 1.135148
+v 9.464465 -44.840714 1.167291
+v 10.295841 -45.333275 1.113817
+v 12.262156 -46.158184 13.720842
+v 11.177949 -44.539715 12.366149
+v 9.135949 -43.345310 0.898353
+v 11.996459 -44.002930 11.924499
+v 10.232566 -42.683048 0.588953
+v 9.268175 -43.270397 0.885558
+v 11.358996 -43.358814 0.527760
+v 11.296711 -43.321243 0.522071
+v 12.945791 -44.584869 12.415227
+v 11.381244 -44.683613 0.782299
+v 11.358325 -43.391659 0.524973
+v 13.056223 -45.657219 13.308859
+v 36.775829 10.928100 0.157192
+v 37.812756 10.311796 0.231172
+v 36.373425 10.599680 13.158407
+v 35.571754 11.054748 13.592673
+v 36.799252 12.137184 0.047597
+v 36.781357 11.375001 0.151561
+v 35.574303 11.923715 13.673120
+v 36.374992 12.361562 13.323277
+v 39.153923 23.050182 13.038985
+v 38.385944 23.532404 13.166179
+v 39.001404 22.164640 -0.614568
+v 38.387131 24.426929 13.214578
+v 39.147381 24.847523 13.137405
+v 40.060219 22.772345 -0.605979
+v 39.618782 22.518661 -0.611253
+v 41.133629 22.122427 -0.731756
+v 39.917641 24.377071 13.010550
+v 39.925442 23.474262 12.960521
+v 40.833389 22.106239 2.685918
+v -2.236051 -35.805351 0.216285
+v -1.151811 -36.432213 0.276494
+v -1.758149 -36.142574 11.846118
+v -2.602972 -35.656029 12.159437
+v -2.239429 -34.552826 0.326259
+v -2.612992 -35.296791 12.485581
+v -2.616212 -35.076935 12.590380
+v -2.625415 -34.709908 12.889946
+v -1.823374 -34.245384 13.090688
+v -1.163298 -33.930077 0.495682
+v -1.959713 -34.324463 13.035243
+v -0.079052 -34.553452 0.489598
+v -0.560734 -34.278545 0.529135
+v -1.004683 -34.709900 12.974086
+v -0.980701 -35.392273 12.650623
+v -0.963207 -35.653908 12.414666
+v -0.075849 -35.803886 0.446390
+v -0.081332 -34.957699 0.520346
+v 36.266697 -44.347462 11.633039
+v 35.775677 -43.545471 0.125082
+v 36.888115 -44.191093 0.154544
+v 37.128170 -44.845585 11.614741
+v 36.262009 -43.920547 11.540741
+v 36.252041 -43.319496 11.331463
+v 35.770508 -42.249886 0.057749
+v 35.772392 -42.684242 0.083836
+v 36.955025 -42.893932 11.171229
+v 36.082268 -42.828873 6.407326
+v 35.823608 -42.218864 0.055002
+v 38.000664 -42.250809 0.020772
+v 37.941376 -42.216167 0.019674
+v 37.926529 -42.822067 6.471326
+v 37.260597 -42.880844 11.161480
+v 37.288490 -42.897610 11.166847
+v 37.991772 -43.305965 11.152280
+v 37.998310 -43.547592 0.109008
+v 37.998795 -43.283974 0.082928
+v 37.989815 -44.332081 11.376071
+v 36.949467 -44.155582 0.152763
+v 37.841499 -43.637890 0.106821
+v 27.829121 -44.713459 6.959716
+v 26.822222 -45.858421 0.347370
+v 27.636139 -46.315289 0.337759
+v 27.969381 -46.503834 0.328042
+v 29.160467 -44.801174 9.498904
+v 28.112020 -44.808186 7.204539
+v 27.857508 -43.530880 7.120164
+v 26.827461 -44.527424 0.351875
+v 28.996099 -42.790798 8.233328
+v 27.971310 -43.847912 0.342891
+v 30.168726 -43.046700 10.173426
+v 29.108589 -44.487885 0.329456
+v 29.509544 -42.987186 8.674879
+v 30.257324 -43.980179 10.962911
+v 29.112606 -45.811729 0.324885
+v 30.247355 -43.657063 10.880939
+v 28.091761 -46.429192 0.332864
+v 30.104120 -44.076073 10.933923
+v 22.591106 -42.824162 0.332783
+v 23.567659 -43.386761 0.346512
+v 22.682510 -42.281231 6.799215
+v 22.418066 -42.723927 0.336301
+v 22.418934 -41.396595 0.318328
+v 22.417957 -42.564438 0.328900
+v 22.653614 -41.147469 6.057959
+v 23.567196 -40.732899 0.322463
+v 23.660723 -40.582527 5.193401
+v 24.714296 -41.393806 0.338589
+v 24.702568 -41.187683 5.091471
+v 24.702106 -42.342781 5.861170
+v 24.715870 -42.719925 0.350618
+v 41.103508 -16.845196 11.810930
+v 41.072495 -15.515312 -0.465264
+v 42.201485 -16.156952 -0.573000
+v 41.957813 -17.369291 12.090275
+v 41.100597 -15.802196 11.500709
+v 41.069912 -14.211711 -0.396052
+v 41.071400 -14.950531 -0.425681
+v 41.072258 -15.387808 -0.451983
+v 42.102821 -14.284674 4.615623
+v 42.059746 -14.292955 4.490407
+v 41.319859 -14.065871 -0.392594
+v 41.970673 -15.289329 11.474328
+v 43.143677 -14.810427 4.114188
+v 43.043350 -14.823061 4.564030
+v 42.829269 -15.833318 11.760202
+v 43.331219 -15.503011 -0.545902
+v 43.330860 -15.192183 -0.513534
+v 42.815495 -16.745560 12.029170
+v 42.814201 -16.868565 12.051570
+v 42.795795 -16.880510 12.066402
+v 35.407242 -0.470625 9.764803
+v 33.555267 0.345868 -0.628106
+v 34.672626 -0.309202 -0.440492
+v 36.144943 -0.926867 8.999250
+v 35.300564 0.581605 9.137119
+v 33.617062 1.566317 -0.317363
+v 35.887630 1.168988 7.816293
+v 35.969978 1.220689 7.783286
+v 34.742455 2.139217 -0.105296
+v 33.868031 1.682433 -0.212302
+v 36.491558 0.922907 7.094162
+v 36.739559 0.779887 6.829042
+v 35.824516 1.486901 -0.025971
+v 35.806038 0.262277 -0.081209
+v 36.824127 -0.329502 7.532701
+v 35.401707 0.046512 -0.130887
+v 47.155464 41.583584 0.001415
+v 48.281425 40.917404 0.011944
+v 46.911663 41.191376 12.314382
+v 46.060608 41.698746 12.218181
+v 46.060665 42.692307 12.342087
+v 47.186741 42.888546 -0.183633
+v 47.180523 42.537140 -0.158364
+v 46.064106 42.622036 12.294909
+v 48.349155 43.536842 -0.328852
+v 46.888302 43.170841 12.724809
+v 47.763393 42.672302 12.574703
+v 49.496010 42.869873 -0.380151
+v 47.485504 42.838017 12.543295
+v 49.456524 41.553711 -0.197090
+v 49.487591 42.470406 -0.351310
+v 47.763000 41.680153 12.492799
+v -4.744161 -47.122581 -0.289407
+v -4.500773 -47.266884 -0.277351
+v -3.902449 -47.082108 3.067374
+v -4.122066 -46.412003 6.373868
+v -4.809880 -46.140491 5.502327
+v -5.000363 -46.027843 5.491106
+v -4.959794 -45.419975 4.641001
+v -4.738638 -46.004570 -0.318673
+v -2.638450 -45.861904 -0.040245
+v -3.410528 -45.420189 -0.180484
+v -3.426136 -44.728111 5.935418
+v -3.195944 -44.828217 6.260177
+v -3.236556 -45.809513 6.764511
+v -3.006367 -46.303085 4.165924
+v -2.880281 -45.941750 2.715454
+v -2.636517 -46.024868 -0.055246
+v -3.696663 -46.689240 4.208223
+v -3.649633 -46.120583 6.457622
+v 40.085178 -3.838577 8.183453
+v 40.744461 -4.175674 -0.174443
+v 40.749859 -4.178792 -0.174622
+v 40.314552 -3.970853 8.131534
+v 40.265038 -1.879620 5.528764
+v 40.448971 -1.773127 5.566627
+v 41.343193 -2.352787 6.749292
+v 41.857204 -3.542281 -0.183592
+v 41.273384 -3.443604 7.690756
+v 41.061558 -3.999973 -0.183441
+v 41.748199 -3.580500 0.260191
+v 41.807800 -3.570792 -0.185215
+v 40.629311 -3.821191 7.562442
+v 45.541927 8.298302 0.065998
+v 46.673626 7.638451 0.163720
+v 46.852608 7.150473 8.708243
+v 46.833061 7.151649 8.933700
+v 46.861229 7.126957 9.119959
+v 46.871605 7.098663 9.615386
+v 46.508274 7.324878 9.264569
+v 46.214321 7.508149 8.975153
+v 45.928688 7.666591 9.130511
+v 45.533871 9.620890 -0.068051
+v 45.967983 8.656617 10.095407
+v 46.668011 10.280830 -0.103806
+v 46.891365 9.135036 10.558772
+v 47.802570 9.610402 -0.004936
+v 47.452755 8.835908 10.265393
+v 47.794106 8.605078 10.600863
+v 47.792725 7.815159 10.571914
+v 47.793571 7.724679 8.968961
+v 47.793625 7.687599 8.789732
+v 47.800152 8.290653 0.128539
+v 47.792809 7.863314 10.574504
+v 46.948334 7.137482 9.693976
+v 47.743446 7.672964 8.582938
+v 46.935310 6.161702 9.630196
+v 46.547356 5.720551 7.082479
+v 46.946869 5.491928 7.060829
+v 47.164513 4.612602 4.125415
+v 48.017494 5.831940 10.693006
+v 45.488678 5.850993 0.099961
+v 45.487473 5.771332 0.093818
+v 46.096596 6.144364 4.101168
+v 47.998432 7.949505 10.784197
+v 48.034088 7.972784 10.820839
+v 46.643787 6.538623 0.116080
+v 48.044853 7.968965 10.831535
+v 49.049900 7.609350 11.815814
+v 47.780483 5.883665 0.028594
+v 47.773758 4.532091 -0.076086
+v 49.047302 6.569760 11.759114
+v 47.476345 4.351473 -0.080513
+v 40.127064 1.023513 4.573366
+v 39.943081 0.715515 0.076885
+v 40.838787 0.196191 0.053622
+v 41.097168 0.046061 0.043387
+v 41.185791 0.420090 4.658933
+v 40.438194 0.816229 4.273349
+v 40.148647 1.564953 5.085841
+v 39.943596 0.874266 0.084769
+v 42.249786 2.054873 0.149882
+v 42.067577 2.160161 0.154597
+v 41.579777 2.673436 5.684184
+v 41.875008 2.491830 5.413971
+v 42.236340 2.291185 5.598828
+v 42.238277 1.082996 5.401900
+v 42.251564 0.718879 0.081717
+v 42.251369 0.860935 0.090605
+v 7.616220 -31.410372 12.862255
+v 7.582602 -29.968451 -0.448147
+v 8.674290 -30.600288 -0.445793
+v 8.422444 -31.853289 12.642205
+v 7.614221 -30.474154 12.848084
+v 7.616152 -31.306353 12.927998
+v 8.416796 -30.022776 12.984298
+v 9.510801 -29.321356 4.504019
+v 9.209987 -30.519102 13.208928
+v 9.580851 -29.312532 4.189917
+v 9.770096 -29.958466 -0.508485
+v 9.771428 -29.701208 -0.521637
+v 9.206788 -30.980337 13.252265
+v 9.216707 -31.420065 12.975058
+v 20.403894 21.580891 9.062744
+v 18.805620 22.285534 0.093530
+v 19.238323 22.030268 0.106785
+v 19.949728 21.606337 -0.030598
+v 21.418245 20.990263 9.384807
+v 18.811192 23.625916 0.086003
+v 20.561808 22.601944 9.917417
+v 21.690546 22.994263 11.034466
+v 22.644636 22.414169 11.319647
+v 21.111984 22.254457 -0.071881
+v 22.528717 21.430962 10.523340
+v 24.048903 -18.201099 0.107850
+v 24.173248 -18.274117 0.096363
+v 24.192438 -18.634867 8.117432
+v 23.589848 -18.514339 13.529540
+v 22.891666 -18.112982 13.792146
+v 22.795389 -18.061531 13.917781
+v 24.033321 -18.191742 0.104548
+v 24.064640 -16.974228 -0.091981
+v 22.801010 -17.738438 13.895654
+v 22.796524 -17.195219 14.013723
+v 23.567024 -16.765699 13.911727
+v 24.845293 -16.445444 2.489576
+v 24.453878 -16.755167 -0.083910
+v 24.361576 -17.203518 13.616950
+v 25.445753 -17.079889 5.510516
+v 25.303312 -16.997499 5.521640
+v 25.119135 -17.677038 7.904713
+v 25.574457 -17.407755 4.518860
+v 24.377378 -18.085052 13.423195
+v 24.838964 -18.119516 9.964446
+v 24.196173 -18.484339 9.879853
+v 23.680073 28.448412 0.205129
+v 23.893513 28.320498 0.207290
+v 24.232100 29.460985 8.465256
+v 24.076056 29.937113 10.814607
+v 23.214500 30.437771 10.709496
+v 23.683529 29.738308 0.236141
+v 23.683550 29.692160 0.231805
+v 23.213579 31.101269 10.785365
+v 23.185535 31.572346 11.447427
+v 24.053606 32.013523 11.152648
+v 24.768978 30.387243 0.382209
+v 24.911144 31.505440 11.151848
+v 25.870354 29.726908 0.311496
+v 25.201057 30.132391 0.392110
+v 24.100292 31.974709 11.052703
+v 24.925135 30.478107 11.036745
+v 25.011831 30.292212 10.058029
+v 25.114096 30.328266 8.892666
+v 25.872152 29.530613 0.299479
+v 24.297152 29.878933 10.045827
+v 8.575022 -17.123682 10.016502
+v 8.758474 -17.238319 11.658638
+v 8.436632 -17.052923 11.770902
+v 9.470765 -15.052689 -0.430978
+v 9.303474 -15.149492 -0.455536
+v 9.403975 -15.091135 -0.401914
+v 8.369154 -15.625161 11.780644
+v 8.680993 -15.446263 11.532120
+v 8.847740 -15.350299 11.457084
+v 9.711719 -15.830589 11.154184
+v 10.571280 -15.685308 -0.439178
+v 9.705160 -16.807444 11.242639
+v 9.882963 -16.837496 8.844515
+v 10.572138 -15.772331 -0.450755
+v 9.417831 -16.965630 11.371307
+v 45.914978 -40.344223 4.698610
+v 45.718380 -40.023117 0.090981
+v 46.805141 -40.646255 -0.048989
+v 46.899395 -40.903225 4.450558
+v 46.833939 -40.629280 -0.054268
+v 47.186111 -40.722820 4.233379
+v 47.085785 -40.782379 4.257800
+v 34.733292 25.370264 13.926950
+v 34.641113 25.412018 13.889357
+v 32.486507 22.961975 -0.260032
+v 33.579327 22.320253 -0.382567
+v 35.454540 25.000868 14.055751
+v 34.587593 26.273428 13.517012
+v 32.492584 24.246559 -0.248987
+v 35.381474 26.744041 13.493176
+v 33.582321 24.888138 -0.359510
+v 35.984013 26.458361 13.744250
+v 36.205833 26.342384 13.784419
+v 34.676311 24.263107 -0.418003
+v 34.125000 24.571510 -0.420341
+v 34.679413 22.981535 -0.429641
+v 36.231285 25.464531 13.992105
+v 34.125000 22.644848 -0.437880
+v 37.729053 -20.046120 10.776979
+v 37.556000 -20.335825 6.547570
+v 38.358475 -20.395647 10.927867
+v 37.701004 -19.100367 10.062094
+v 37.643295 -19.471151 8.659885
+v 37.456360 -20.100836 4.100520
+v 37.742146 -19.056692 11.068322
+v 38.535072 -18.644701 8.728809
+v 38.417000 -18.686331 10.074331
+v 38.589275 -18.557554 11.551756
+v 39.444538 -19.536903 -0.036715
+v 39.306717 -19.456654 -0.018411
+v 39.415462 -19.025864 11.747063
+v 39.417309 -19.996664 11.467086
+v 39.429436 -20.328901 6.612718
+v 39.444721 -19.705235 -0.028043
+v 38.791702 -20.385193 11.104311
+v 23.665083 12.764341 10.137623
+v 23.638859 13.889195 -0.245925
+v 24.342056 13.476050 -0.186788
+v 24.799330 13.208126 -0.155197
+v 24.591661 12.174934 10.636826
+v 23.638439 14.072780 -0.259803
+v 25.196444 14.206325 9.208177
+v 24.996592 14.151270 10.293856
+v 25.523895 13.799419 10.582072
+v 25.779444 14.630816 4.367443
+v 25.681044 14.618423 4.808659
+v 25.521986 14.709474 4.817386
+v 25.961132 13.882807 -0.153166
+v 25.963432 14.255579 -0.181221
+v 25.509325 12.689495 10.855348
+v 24.911432 13.272702 -0.148809
+v 38.449642 -27.296461 12.319179
+v 37.389011 -26.997892 0.037685
+v 39.366146 -27.827341 12.714072
+v 38.376602 -26.266445 11.880472
+v 39.245285 -25.784832 11.848727
+v 38.229744 -25.024923 5.322409
+v 38.224243 -25.538630 7.856113
+v 39.905785 -26.188618 12.142056
+v 40.178913 -26.358492 12.390207
+v 38.521503 -25.077887 -0.026217
+v 38.242493 -24.910439 -0.013820
+v 38.510818 -26.369785 -0.018958
+v 40.179363 -26.732090 12.418670
+v 40.209122 -27.356945 12.682014
+v 7.561162 -39.788651 0.414196
+v 8.635327 -40.423595 0.410751
+v 7.479321 -40.192375 10.793284
+v 6.609012 -39.688496 11.038603
+v 7.580859 -38.547222 0.350254
+v 6.577834 -38.722019 11.507219
+v 7.401264 -38.252827 11.689789
+v 7.266092 -38.328545 11.697180
+v 8.311804 -39.709480 11.026431
+v 8.888767 -40.283867 0.395178
+v 36.582710 -16.122732 0.417233
+v 37.579918 -16.769730 0.124002
+v 37.644108 -16.809671 0.115610
+v 36.769432 -14.140827 13.284447
+v 35.962048 -13.470681 14.420821
+v 35.812309 -12.053005 17.864296
+v 36.581795 -14.886908 0.540908
+v 35.956470 -13.223889 14.565310
+v 35.803715 -12.788167 17.993639
+v 36.466698 -11.682579 17.842300
+v 37.628044 -14.322700 0.357441
+v 37.521439 -12.811366 13.328351
+v 38.696754 -14.990587 0.045732
+v 36.763504 -11.852840 17.892101
+v 36.903717 -12.351710 14.167835
+v 38.712803 -16.243937 -0.083163
+v 37.579765 -13.814479 12.707573
+v 38.392872 -16.414061 -0.026821
+v 24.327946 23.769732 -0.224103
+v 24.357529 23.752666 -0.229739
+v 24.377253 23.696487 8.299364
+v 24.767450 23.452667 11.792144
+v 24.746853 23.462507 12.185179
+v 23.951054 23.923115 12.043653
+v 24.322763 25.000587 -0.055367
+v 23.963835 24.854515 11.627601
+v 25.388258 25.616310 -0.053612
+v 25.171694 25.491011 -0.083195
+v 24.790665 25.330851 11.349141
+v 25.599955 24.857235 11.495381
+v 26.455284 25.001801 -0.040935
+v 25.568821 23.920454 11.915302
+v 25.819033 23.878164 8.540558
+v 26.456387 24.863241 -0.055822
+v 25.216101 23.712069 11.815957
+v 18.742720 24.921509 0.076715
+v 20.043427 23.706844 10.333322
+v 19.836798 23.829395 10.269333
+v 19.184111 24.200573 10.421569
+v 18.740173 26.181299 0.069428
+v 19.222902 25.109022 11.371261
+v 19.828976 26.807631 0.095514
+v 19.417147 25.201706 11.535268
+v 20.076975 25.535378 11.934911
+v 20.801086 25.128628 11.776096
+v 20.906338 25.066507 11.784500
+v 20.915644 26.171354 0.128775
+v 20.737892 25.154230 11.893839
+v 20.906250 25.022015 11.797789
+v 20.906034 24.916630 11.844766
+v 20.905008 24.138201 11.281321
+v 20.913408 24.914221 0.135916
+v 35.109749 -39.363102 11.491786
+v 34.261047 -40.328178 5.918332
+v 34.409653 -40.414146 5.906721
+v 34.851089 -41.538628 2.505637
+v 34.468052 -41.958542 0.050790
+v 34.539474 -41.997955 0.052584
+v 36.021580 -39.879292 11.464129
+v 33.349407 -40.010433 -0.099027
+v 33.352901 -40.132786 -0.073237
+v 33.803261 -39.776413 2.887855
+v 35.167255 -38.251705 11.845842
+v 36.112473 -37.671711 12.163991
+v 34.515900 -39.318649 -0.128961
+v 34.440430 -39.363281 -0.124830
+v 33.711842 -39.798691 -0.164634
+v 37.001270 -38.175289 12.136900
+v 35.685768 -39.963634 -0.078317
+v 35.573151 -39.900928 -0.080217
+v 35.698994 -41.301067 0.001884
+v 36.967594 -39.271313 11.791101
+v 35.000946 -41.719936 0.038662
+v 17.197332 16.649923 5.434513
+v 17.184320 16.485258 3.565514
+v 16.308149 16.999393 3.654930
+v 16.158825 16.749424 0.005594
+v 17.308773 16.076162 -0.095198
+v 17.417915 16.536797 5.589068
+v 17.229750 16.632000 5.443118
+v 16.159409 16.967619 0.013444
+v 16.242441 17.108475 2.042639
+v 16.243052 17.249361 2.053470
+v 18.454187 18.184868 2.370131
+v 18.274618 18.345398 3.728239
+v 17.904959 18.559628 3.752786
+v 17.796877 18.673355 4.977997
+v 18.446487 18.320230 5.491369
+v 18.462013 16.741953 -0.147794
+v 18.461828 16.883833 -0.142652
+v 18.455778 17.083174 2.263985
+v 18.446802 17.158810 5.942996
+v 20.028183 -48.460381 11.858881
+v 19.998688 -47.195301 0.180857
+v 21.146204 -47.837250 -0.024271
+v 20.914619 -48.989437 12.010685
+v 19.996674 -45.903652 0.484649
+v 20.026276 -47.438259 11.963490
+v 21.137182 -45.239960 0.513621
+v 20.700485 -45.500008 0.546319
+v 20.167320 -47.361202 12.004216
+v 20.932928 -46.792744 11.114370
+v 21.842432 -47.319565 11.103767
+v 22.283358 -45.885071 0.381031
+v 21.587194 -45.500004 0.504445
+v 21.796410 -48.488609 12.145203
+v 22.291750 -47.180332 0.076088
+v 21.709513 -48.547188 12.241028
+v 41.550407 19.591518 12.536019
+v 42.333061 19.125740 12.407788
+v 41.563744 20.510664 12.584157
+v 42.361137 20.963066 12.503826
+v 43.143646 20.495586 12.375521
+v 41.388336 21.851839 -0.774334
+v 41.358974 20.606211 -0.909128
+v 43.128918 19.577408 12.327620
+v 19.723057 -32.383224 7.996304
+v 20.431133 -32.457703 0.095331
+v 20.956669 -32.765446 0.026893
+v 21.526674 -33.099136 -0.049404
+v 20.538977 -32.901585 8.821514
+v 19.766697 -31.500050 7.620615
+v 20.082869 -31.781874 4.061528
+v 20.333666 -31.230188 1.335481
+v 20.441061 -31.211473 0.140891
+v 20.796835 -30.970705 1.311091
+v 21.128633 -30.698786 3.761301
+v 21.544592 -30.594572 0.044452
+v 21.629389 -31.344824 7.530107
+v 22.649736 -31.228472 -0.099071
+v 22.621046 -31.212027 -0.095245
+v 21.628271 -31.453993 7.529134
+v 21.435280 -31.775408 8.946536
+v 21.394106 -32.393681 9.201907
+v 22.641935 -32.486851 -0.148312
+v 48.190704 21.782642 -0.294138
+v 48.567047 21.572849 -0.193567
+v 49.113533 21.741619 2.861390
+v 48.806004 22.679968 7.491463
+v 47.809357 23.412127 8.309993
+v 47.815762 24.232931 8.236396
+v 47.822830 24.477697 8.099911
+v 48.198475 23.094254 -0.356953
+v 48.197815 23.009716 -0.349379
+v 49.316502 23.764950 -0.194414
+v 48.238045 24.664021 7.828217
+v 48.818951 24.896053 7.296598
+v 49.858086 24.184721 6.438865
+v 50.420464 23.141979 0.083234
+v 49.853786 23.051594 6.536458
+v 50.059875 22.609697 4.209939
+v 50.165352 22.911966 2.996564
+v 50.419147 22.825428 0.111826
+v 49.364464 22.220688 4.252556
+v 36.005527 35.194546 0.460132
+v 36.072723 35.155670 0.467956
+v 35.555546 35.402718 10.336354
+v 35.541931 35.410622 10.329377
+v 35.220264 35.596054 10.415047
+v 35.562534 37.536892 10.202974
+v 36.078251 37.783241 0.362522
+v 36.016518 37.747547 0.358213
+v 35.169205 37.310284 10.333368
+v 36.497749 37.004356 10.104228
+v 37.210243 37.124779 0.494468
+v 36.305813 37.120281 10.004345
+v 36.472008 35.936264 10.451482
+v 36.639763 35.907909 8.188875
+v 36.640480 36.837639 8.179106
+v 37.209915 37.014858 0.498870
+v 36.324463 35.301449 0.485516
+v 23.243420 0.581679 7.580333
+v 22.929642 1.094179 0.226381
+v 23.217388 0.925306 0.275693
+v 24.033768 0.451322 0.301385
+v 24.200478 -0.003198 8.260027
+v 23.192430 1.783867 6.431954
+v 23.091566 2.007915 4.070478
+v 22.926050 1.470576 0.157655
+v 23.193617 1.554097 6.450249
+v 23.698277 2.157651 5.751637
+v 23.493559 2.039570 5.749388
+v 25.136150 2.385110 0.048454
+v 24.997986 2.463546 0.070078
+v 24.651171 2.288908 4.024665
+v 24.230757 2.396000 5.471827
+v 24.232254 2.395019 5.472966
+v 25.130419 1.704899 7.224439
+v 25.133797 1.095726 0.158005
+v 25.127714 0.534072 8.224599
+v 24.832220 0.916464 0.234851
+v 24.721365 0.323516 7.880333
+v 43.850044 -13.669897 10.775205
+v 43.319145 -13.295517 11.077321
+v 43.050999 -13.165789 10.999970
+v 43.059654 -12.202198 11.035280
+v 41.321590 -13.883735 -0.385310
+v 43.039127 -12.886906 10.915416
+v 44.012497 -11.579495 12.026037
+v 42.402550 -13.240224 -0.369843
+v 43.254253 -12.087510 11.017655
+v 44.422916 -11.746151 12.332176
+v 44.856022 -11.963781 12.453244
+v 43.468048 -13.850625 -0.434791
+v 42.558258 -13.328502 -0.374869
+v 43.464169 -15.111103 -0.510410
+v 44.752510 -13.049765 11.462277
+v 43.442081 -15.124494 -0.510522
+v 44.095139 -13.541995 10.583157
+v 36.735363 35.957069 10.528667
+v 36.324471 35.269222 0.486817
+v 36.814922 34.991280 0.543688
+v 37.394333 34.658424 0.562077
+v 37.586685 35.470242 10.579965
+v 37.320080 35.646187 10.818879
+v 36.723213 36.925461 10.202492
+v 37.251053 37.231838 10.269109
+v 37.572224 37.408703 9.826883
+v 37.393360 37.121132 0.511665
+v 38.458588 36.511379 0.621575
+v 38.294762 36.605648 0.616377
+v 38.437828 36.876289 9.035761
+v 38.438076 35.884075 9.429518
+v 38.460106 35.280380 0.608783
+v 46.204327 -45.349529 8.247242
+v 46.184013 -44.478199 0.203959
+v 47.301590 -45.106701 0.034990
+v 47.126793 -45.976372 9.119027
+v 48.107914 -44.185139 7.751812
+v 48.257805 -43.697487 4.106654
+v 48.155403 -43.710381 4.565813
+v 48.428604 -44.436756 -0.145825
+v 48.429943 -44.048561 -0.149136
+v 48.057968 -45.415691 8.884986
+v -4.500895 -47.532425 -0.270359
+v -3.354598 -48.208088 -0.213680
+v -1.563040 -48.959682 11.272890
+v -2.747131 -48.305618 9.571424
+v -3.015566 -47.087627 8.033247
+v -1.942371 -46.643566 8.742864
+v -2.505067 -46.841541 8.197888
+v -0.771397 -47.388363 10.527331
+v -2.172965 -46.305435 0.027496
+v -0.660286 -48.392117 11.421402
+v -0.659657 -48.484947 11.432324
+v -2.201829 -47.588539 -0.101010
+v -0.726123 -47.962097 10.902699
+v -2.542731 -47.762123 -0.197892
+v -0.655017 -48.498825 11.540800
+v 39.494961 -3.556143 -0.133448
+v 40.641804 -4.232553 -0.171531
+v 39.623505 -4.028881 8.974258
+v 38.659843 -3.468303 9.185107
+v 39.506287 -2.236830 -0.094252
+v 39.503010 -2.817593 -0.130576
+v 38.840569 -2.352841 7.310713
+v 40.064884 -1.736467 5.251848
+v 40.659054 -1.587605 -0.057393
+v 39.969593 -1.790739 5.231415
+v 41.807758 -3.584947 -0.186100
+v 41.499691 -3.757205 -0.195873
+v -5.808918 -45.325104 -0.354738
+v -5.654744 -45.417301 -0.351942
+v -5.427116 -44.650570 5.199736
+v -6.089965 -44.124207 5.986330
+v -5.802850 -43.976624 -0.376781
+v -5.802836 -44.029644 -0.381533
+v -4.651784 -43.310276 -0.337330
+v -4.917787 -43.468529 -0.369007
+v -5.279127 -43.672939 -0.356182
+v -5.247152 -42.366177 6.460549
+v -5.111098 -42.266102 6.577971
+v -3.652030 -43.875004 -0.090901
+v -4.436158 -43.436161 -0.320765
+v -4.099546 -42.875374 6.488050
+v -3.519537 -43.950806 -0.066835
+v -4.056793 -43.539539 6.029986
+v -3.517687 -44.106804 -0.081194
+v 45.153008 4.246583 0.075123
+v 46.312618 3.576984 -0.020800
+v 45.889931 3.778894 8.044576
+v 44.923237 4.340092 7.554016
+v 45.152428 5.577720 0.094076
+v 44.917591 5.482150 7.737865
+v 45.871124 6.036660 8.403426
+v 45.209225 5.610521 0.090310
+v 46.457798 5.682868 8.698974
+v 46.787457 5.464983 9.210909
+v 47.476967 4.243015 -0.088951
+v 46.817451 5.015868 8.806357
+v 46.825157 4.353181 8.702347
+v 47.360825 4.176123 -0.090397
+v 17.769127 -7.422966 13.738516
+v 17.212414 -6.513676 0.690980
+v 17.433537 -6.640851 0.671144
+v 18.243879 -7.101121 0.469577
+v 18.524567 -7.866385 13.869345
+v 17.758644 -6.530330 13.529309
+v 17.219151 -5.331969 0.898547
+v 17.759510 -6.850223 13.536343
+v 18.026905 -4.875000 0.982257
+v 17.916424 -4.937136 0.967743
+v 17.849827 -4.975693 0.968217
+v 17.911926 -6.423906 13.380375
+v 18.511196 -6.059597 13.230980
+v 18.254223 -4.741305 0.963189
+v 19.275690 -6.517935 13.366773
+v 19.273888 -7.421525 13.686315
+v 10.690988 -27.634277 13.590951
+v 9.862519 -27.247776 13.296549
+v 9.889074 -26.310701 13.450469
+v 10.729656 -25.786097 13.888683
+v 8.848292 -27.726810 -0.597045
+v 11.529500 -26.175999 14.170364
+v 9.939275 -28.337799 -0.595735
+v 9.950451 -29.593884 -0.532004
+v 11.517024 -27.087368 14.026359
+v 44.620888 -15.584996 10.576319
+v 44.160938 -16.354977 -0.664677
+v 45.259636 -16.999218 -0.771584
+v 45.468056 -16.119574 10.083241
+v 44.167896 -15.077314 -0.531934
+v 44.615219 -14.602451 10.408471
+v 45.264332 -14.443544 -0.526783
+v 44.239517 -15.035889 -0.530220
+v 44.795643 -14.501000 10.265821
+v 45.487679 -14.084446 11.105384
+v 46.359867 -15.078944 -0.611601
+v 45.957142 -14.845041 -0.572647
+v 46.330482 -14.562584 11.294785
+v 46.333828 -15.593032 10.426029
+v 46.361732 -16.357567 -0.744763
+v 45.836460 -15.925906 9.794320
+v 24.206421 -19.858707 13.084530
+v 24.173603 -18.451195 0.091733
+v 25.270330 -19.074919 -0.009050
+v 25.019255 -20.324095 13.038966
+v 24.662222 -20.104458 12.916595
+v 24.204950 -18.939283 13.282825
+v 25.017431 -18.450201 13.183054
+v 26.113348 -17.716234 4.489304
+v 25.711912 -18.813776 12.929516
+v 25.838995 -18.894564 12.973541
+v 26.204718 -17.704729 4.079606
+v 26.371666 -18.429428 -0.077192
+v 26.372452 -18.046822 -0.067306
+v 25.829021 -19.862661 13.144630
+v 25.942616 27.082890 10.839521
+v 24.047430 27.918434 0.204120
+v 24.809544 27.468840 0.227466
+v 25.195421 27.238892 0.152947
+v 26.879932 26.532206 10.953186
+v 25.970352 28.128660 10.964606
+v 25.429487 28.445023 7.927123
+v 25.055552 28.082354 5.843925
+v 24.049126 28.144178 0.207090
+v 24.047722 27.988417 0.203727
+v 26.900427 28.591408 11.193053
+v 26.935631 28.606234 11.215050
+v 25.987196 29.315926 5.120003
+v 25.981253 28.760574 7.859107
+v 27.899511 28.017031 11.641091
+v 26.377619 29.192936 0.239840
+v 26.239912 29.275414 0.253226
+v 25.998755 29.419727 0.282164
+v 26.359804 27.875425 0.195852
+v 26.360640 28.106560 0.186528
+v 27.876255 27.361120 11.512155
+v 27.851923 27.008112 11.354859
+v 25.463606 27.388441 0.143421
+v 26.082870 27.718082 0.224919
+v 27.754274 26.951511 11.372509
+v 27.225353 26.710003 11.038710
+v 8.320375 -16.927223 -0.495656
+v 8.386475 -16.966152 -0.499193
+v 8.407522 -17.361750 8.296699
+v 7.982633 -17.276768 12.112805
+v 7.131051 -16.802128 12.775235
+v 8.343157 -15.694118 -0.595030
+v 8.343418 -16.040518 -0.641333
+v 7.143393 -15.903203 12.750356
+v 8.009242 -15.440572 12.060884
+v 8.411121 -17.216711 9.994936
+v 8.381650 -17.081461 11.795371
+v -3.387315 -40.849045 -0.125474
+v -2.418925 -41.418926 -0.051243
+v -2.286110 -41.492420 -0.012394
+v -2.898655 -39.623394 9.209912
+v -3.805072 -39.064003 9.300055
+v -3.828275 -37.912899 9.911483
+v -3.384529 -39.547150 -0.078523
+v -3.809284 -38.912777 9.406229
+v -3.827480 -37.934353 9.892039
+v -2.290372 -38.896206 0.051776
+v -2.990735 -37.304050 10.596243
+v -2.107782 -37.842831 10.455359
+v -1.194668 -39.535892 0.135951
+v -2.658226 -37.516975 10.453379
+v -1.193392 -40.819530 0.176548
+v -1.190176 -40.190178 0.112930
+v -2.055103 -38.971851 9.904306
+v -2.344138 -39.184444 9.710603
+v 23.453936 18.189659 8.441339
+v 24.161026 17.828119 -0.522593
+v 24.199848 17.805670 -0.519355
+v 23.719049 18.035339 8.654819
+v 24.207846 20.393291 -0.671970
+v 24.181395 20.378012 -0.671103
+v 23.322256 19.934649 9.443231
+v 23.656080 20.129723 9.856333
+v 24.380331 20.295626 -0.700193
+v 24.369083 20.302147 -0.701132
+v 24.353035 20.311283 -0.699392
+v 24.552614 19.614305 9.850666
+v 25.334120 19.746393 -0.689949
+v 24.618086 18.569771 8.967611
+v 25.324142 18.450434 -0.555354
+v 24.621822 18.704937 8.917234
+v 25.018051 18.276176 -0.522370
+v 37.684113 -21.786236 10.499197
+v 37.247143 -21.072517 0.257933
+v 38.372448 -21.716841 0.092701
+v 38.594608 -22.322542 10.698568
+v 38.337227 -22.160452 10.409053
+v 37.901577 -21.903627 10.308926
+v 37.684841 -20.741093 10.559923
+v 37.398651 -20.105383 3.859523
+v 37.247276 -20.596815 0.280955
+v 37.685986 -20.740322 10.559005
+v 39.506210 -19.740278 -0.036248
+v 39.497181 -20.811380 11.263477
+v 39.503853 -21.057146 -0.010108
+v 39.504593 -20.634821 0.010257
+v 39.496223 -21.412634 11.089235
+v 39.495350 -21.842539 11.269878
+v 25.371023 15.319406 6.853490
+v 26.413790 15.665885 10.450491
+v 25.453995 16.080891 9.982507
+v 24.980742 15.542747 6.874640
+v 23.882769 15.597601 -0.365230
+v 23.883038 15.564247 -0.362700
+v 24.533922 15.962855 3.919408
+v 25.417162 17.082092 9.717061
+v 26.379080 17.680416 10.183248
+v 25.008320 16.266417 -0.371006
+v 25.710218 17.260082 9.783414
+v 26.122082 17.515625 9.971725
+v 27.346369 17.294661 10.938757
+v 26.135479 15.648533 -0.305044
+v 25.786247 15.843555 -0.308165
+v 27.345297 16.277853 10.896846
+v 26.153105 14.370342 -0.182350
+v 26.149345 14.693742 -0.206919
+v 27.272238 16.227152 10.836559
+v 26.420519 15.670120 10.451977
+v 36.070915 -26.068483 0.156082
+v 36.961945 -25.554924 11.315434
+v 36.534584 -25.292280 11.487854
+v 36.074909 -24.810156 0.216545
+v 36.528683 -24.328442 11.314816
+v 37.156914 -24.186777 0.117862
+v 37.362000 -23.857040 10.798929
+v 38.242382 -24.818363 -0.014296
+v 37.972221 -24.662045 -0.002262
+v 37.488415 -23.932110 10.747447
+v 38.215076 -24.338329 11.054483
+v 38.215275 -25.292795 11.448050
+v 26.732573 -20.237373 -0.152021
+v 26.910784 -20.338726 -0.168398
+v 27.673140 -20.790306 -0.069894
+v 27.812860 -20.873459 -0.048190
+v 27.547260 -22.194906 13.754775
+v 26.921566 -21.832581 13.751570
+v 26.767551 -21.737837 13.698782
+v 26.765213 -20.805826 13.531293
+v 27.550495 -20.360054 13.634068
+v 28.892727 -19.004150 0.088172
+v 28.324684 -20.852209 13.902268
+v 28.888857 -20.259918 0.087430
+v 28.315178 -21.775108 14.065372
+v 28.570627 -20.441284 0.046240
+v 27.936577 -21.990850 14.015969
+v 7.118249 -48.658920 0.833136
+v 8.220407 -49.306076 0.980709
+v 10.201551 -50.137211 13.682819
+v 10.129108 -50.096504 13.604544
+v 9.422899 -49.674988 13.766383
+v 7.153731 -47.433426 0.996393
+v 9.466826 -48.786404 13.986650
+v 10.268754 -48.356766 14.031567
+v 8.288257 -46.874802 1.304065
+v 11.027700 -48.809032 13.857823
+v 9.371002 -47.528973 1.446697
+v 9.315137 -48.721279 1.111183
+v 9.366394 -47.700417 1.423932
+v 11.013578 -49.141903 13.775126
+v 11.055595 -49.732941 14.127423
+v 8.334960 -49.247562 1.012043
+v 37.469715 -47.372868 12.114947
+v 38.535137 -47.484932 0.226608
+v 38.648067 -47.551899 0.231096
+v 39.668743 -48.157749 0.285772
+v 38.353493 -47.894684 12.098527
+v 38.549187 -46.167915 0.235089
+v 38.537205 -47.302456 0.226444
+v 37.501614 -46.350475 11.887561
+v 38.428017 -45.838413 11.639674
+v 39.696396 -45.520634 0.305855
+v 39.327168 -46.363411 11.621683
+v 40.818691 -47.511856 0.356686
+v 39.284435 -47.397305 11.853169
+v 17.782555 -29.426258 5.239056
+v 17.695414 -29.372458 5.247857
+v 17.913214 -30.303101 0.333797
+v 17.911266 -28.950451 0.490014
+v 17.693998 -29.323807 5.283356
+v 17.678404 -29.063477 5.651351
+v 17.600800 -27.807045 7.479542
+v 18.561684 -27.217773 7.687163
+v 19.045675 -28.318052 0.400302
+v 17.941973 -28.931576 0.496885
+v 18.020113 -27.557215 7.531428
+v 19.594585 -27.905313 7.009497
+v 20.192701 -29.014313 0.250012
+v 18.937174 -27.509272 7.068609
+v 47.983444 17.336441 -0.365207
+v 47.613728 17.486904 11.669067
+v 47.983536 18.642550 -0.368219
+v 47.983543 18.641468 -0.368382
+v 47.636745 18.501415 10.919847
+v 48.574753 19.038441 9.964174
+v 49.097034 19.287928 -0.001595
+v 49.498802 18.516809 9.784247
+v 50.211712 18.637304 0.168776
+v 49.440029 17.472078 10.576962
+v 50.226059 17.339226 -0.024615
+v 13.571002 -38.696117 10.542213
+v 13.143370 -37.997654 0.519846
+v 13.337498 -38.110725 0.534020
+v 14.238369 -38.638512 0.667964
+v 14.438676 -39.184631 10.230488
+v 13.578109 -37.702229 10.750754
+v 13.138430 -36.725578 0.456869
+v 13.139305 -36.817871 0.473592
+v 14.231417 -36.079304 0.336412
+v 14.447474 -37.187683 10.650810
+v 15.328441 -36.731831 0.476868
+v 14.288502 -36.113129 0.342368
+v 15.320566 -37.666737 10.339785
+v 15.326124 -38.004326 0.569971
+v 15.326637 -37.725826 0.540874
+v 15.328112 -36.906269 0.507115
+v 15.318918 -38.669823 10.127987
+v 14.625002 -38.416245 0.678640
+v 22.020704 4.959549 9.278831
+v 21.608709 4.491062 6.573238
+v 21.985628 4.275364 6.552813
+v 22.182108 3.481525 3.902774
+v 22.514872 3.957211 6.464926
+v 22.615953 4.327472 8.117702
+v 22.156996 6.082833 10.152029
+v 20.615709 4.591672 0.024430
+v 20.615908 4.569255 0.026240
+v 21.166750 4.906599 3.650181
+v 22.063375 5.711943 9.543192
+v 23.154301 6.745907 11.388269
+v 21.667946 5.212665 -0.056045
+v 23.875780 6.182144 10.616614
+v 22.728273 4.622184 -0.038632
+v 23.646833 4.856167 8.458782
+v 22.742189 3.408732 0.051778
+v 22.742077 3.484406 0.053124
+v 23.426731 4.690331 8.154817
+v 23.421595 4.545780 6.832851
+v 22.467840 3.242257 0.048943
+v 17.598635 -41.693878 9.820987
+v 17.225758 -42.318089 0.708095
+v 18.293789 -42.953377 0.506184
+v 18.453932 -42.277493 8.846624
+v 18.444626 -42.272038 8.847502
+v 17.472391 -40.819290 6.703445
+v 17.227436 -41.079327 0.712536
+v 17.229013 -41.598999 0.766592
+v 17.604658 -41.243320 9.955128
+v 17.896708 -40.650688 2.828679
+v 18.338621 -40.395042 2.841099
+v 18.294601 -40.465816 0.548538
+v 19.341253 -41.070942 0.513572
+v 18.804380 -40.484894 7.103165
+v 18.720036 -40.348896 9.185684
+v 19.348024 -40.740917 8.474582
+v 19.367680 -41.086391 0.508598
+v 19.350115 -41.806492 8.142001
+v 19.369438 -42.335953 0.405907
+v 18.624115 -42.188602 8.704910
+v -8.828794 -45.537846 9.026850
+v -8.852570 -44.518066 -0.386766
+v -8.825664 -44.533447 -0.388485
+v -7.720165 -45.175117 -0.368837
+v -7.879471 -45.967709 7.910048
+v -8.831048 -44.457565 9.031737
+v -8.855036 -43.214031 -0.269863
+v -7.878420 -43.748745 7.913410
+v -6.874090 -44.146069 6.732016
+v -6.585905 -44.515659 -0.375971
+v -6.877706 -45.286362 6.733904
+v 48.567501 21.434092 -0.187016
+v 49.699677 20.773373 0.116913
+v 50.878357 20.278894 7.674013
+v 49.995422 20.804554 7.826192
+v 49.869690 21.925171 7.089892
+v 50.658504 22.542950 6.165782
+v 51.697971 21.900858 6.917020
+v 50.802658 22.592630 0.209773
+v 51.123646 22.265144 6.086252
+v 51.825890 20.761066 7.945238
+v 50.806759 21.353447 0.323551
+v 50.288979 21.079414 0.244940
+v 51.036839 20.393513 7.495235
+v 33.869556 35.918011 10.800609
+v 34.808506 35.819248 0.323492
+v 35.928600 35.151279 0.454714
+v 34.804375 35.376141 10.551805
+v 34.827835 37.130848 0.272405
+v 33.887142 36.966915 10.736033
+v 34.843018 37.493187 10.420532
+v 35.969719 37.775471 0.352730
+v 22.740887 1.576761 0.126375
+v 23.473989 2.099282 6.044025
+v 23.194952 2.322030 6.382317
+v 22.397003 3.046150 7.885157
+v 22.376509 4.251496 8.440879
+v 22.749563 2.877591 0.042328
+v 22.747309 2.115401 0.028772
+v 23.874233 3.516777 0.018030
+v 23.452698 3.281372 0.049186
+v 24.358120 4.041432 7.284608
+v 24.999186 2.852790 0.039693
+v 24.987398 2.859874 0.040596
+v 24.966406 2.872123 0.038917
+v 24.507374 2.597238 5.647977
+v 24.999317 2.821038 0.039565
+v 24.999516 2.836440 0.036647
+v 24.999203 2.848862 0.039663
+v 24.507387 2.989085 5.630992
+v 24.520578 2.714051 5.492675
+v 24.495243 2.589722 5.645686
+v 24.231901 2.396513 5.471230
+v 10.069651 -7.898253 0.470240
+v 9.433249 -7.594254 12.613533
+v 9.480832 -5.745957 11.705592
+v 10.055955 -5.471228 0.731590
+v 11.104754 -6.075987 0.757545
+v 10.283468 -5.602688 0.742130
+v 10.280495 -6.215302 11.874806
+v 10.239504 -7.140710 12.427673
+v 11.114652 -7.288624 0.624065
+v 10.278172 -6.294170 11.906143
+v 4.232985 -7.647857 13.541226
+v 3.657259 -6.707506 0.047997
+v 4.753454 -7.343847 0.080155
+v 5.027270 -8.090382 13.151947
+v 4.218752 -6.689445 13.246647
+v 3.659386 -5.446937 0.150580
+v 4.757744 -4.828021 0.284892
+v 5.014524 -6.145308 12.543343
+v 5.849342 -5.467538 0.322005
+v 5.516209 -5.272006 0.306842
+v 5.839909 -6.587110 12.133094
+v 5.847185 -6.722281 0.214328
+v 5.848025 -6.234272 0.254043
+v 5.839491 -6.798663 12.200491
+v 5.837914 -7.578383 12.509840
+v 5.736113 -7.638913 12.536012
+v 48.471523 -43.258492 6.999789
+v 47.314217 -41.922882 5.393416
+v 47.549805 -42.094456 -0.097004
+v 48.235149 -41.387501 5.179811
+v 49.260361 -41.813782 5.896301
+v 48.600414 -42.710934 -0.231658
+v 49.360630 -42.741989 6.793922
+v 48.610401 -43.942360 -0.178080
+v 48.610119 -43.875004 -0.178575
+v 44.872868 29.050369 6.811976
+v 44.594078 28.583662 -0.001491
+v 45.736134 27.906885 -0.189838
+v 45.868862 28.467045 6.722566
+v 44.859707 29.685169 6.470896
+v 44.877869 30.207039 6.900198
+v 45.743389 30.574505 0.187474
+v 45.904270 30.833174 8.566416
+v 46.882675 29.913017 0.082416
+v 46.353539 30.218414 0.087625
+v 46.860050 30.310717 9.252660
+v 46.863605 29.158590 8.354915
+v 46.884769 28.578583 -0.119688
+v 46.471333 28.333740 -0.188900
+v 45.890438 28.478514 6.707470
+v 16.809553 -39.785339 0.616727
+v 17.940006 -40.435272 0.578582
+v 16.932985 -40.932423 10.682063
+v 16.834866 -40.870968 10.638183
+v 16.806437 -38.450764 0.478761
+v 16.806469 -38.465740 0.479374
+v 16.831648 -39.757797 10.255347
+v 17.945156 -37.770870 0.380117
+v 17.754295 -39.221817 10.285636
+v 18.713028 -39.641144 9.411859
+v 19.086222 -38.427002 0.336212
+v 17.852097 -39.285683 10.330270
+v 19.079441 -39.758411 0.401203
+v 19.080589 -39.602802 0.384865
+v 9.428013 0.311700 0.104446
+v 10.458300 -0.296582 0.117783
+v 10.561498 -0.357272 0.128048
+v 12.180561 -1.036502 10.508660
+v 11.025407 -0.392554 9.068704
+v 10.930496 0.737628 8.504632
+v 12.043729 1.138899 9.535191
+v 11.684433 1.019171 9.154043
+v 13.160676 0.432954 11.041195
+v 11.686148 1.572263 -0.005215
+v 11.683443 0.272337 0.062009
+v 13.198932 -0.608561 11.395790
+v 10.946782 -0.138544 0.088771
+v 11.343912 0.085495 0.057621
+v 13.042725 -0.670141 11.232921
+v 22.782866 -27.916136 8.136178
+v 22.584530 -27.799555 8.151866
+v 23.319220 -27.876833 -0.046058
+v 24.470898 -28.551226 -0.196033
+v 23.466228 -28.350279 8.827323
+v 23.333105 -26.565863 -0.036472
+v 23.319929 -27.787836 -0.042804
+v 22.526112 -26.706495 8.939974
+v 24.495718 -25.916376 -0.150770
+v 24.165924 -26.101057 -0.131050
+v 23.400805 -26.190695 9.632980
+v 24.339270 -26.734030 9.564890
+v 25.653368 -26.584181 -0.260684
+v 24.371668 -27.812494 9.230092
+v 25.643612 -27.907461 -0.300849
+v 24.397234 -27.428587 9.071525
+v 24.991428 -28.265408 -0.241716
+v 25.364046 -28.061619 -0.284059
+v 39.808243 0.956209 0.088457
+v 39.558815 2.021990 5.716085
+v 39.502747 3.422468 7.078017
+v 39.810276 2.289891 0.154682
+v 40.459824 4.019846 7.340070
+v 40.934719 2.940247 0.190139
+v 41.525753 3.269325 6.273479
+v 42.066715 2.266290 0.159864
+v 47.506771 -27.593033 -0.211440
+v 47.995079 -27.875309 -0.192357
+v 48.636501 -28.246485 -0.093132
+v 48.030811 -27.957157 11.464124
+v 47.148087 -27.447060 11.463467
+v 47.508762 -26.282351 -0.276332
+v 47.506069 -26.902836 -0.188651
+v 47.163277 -26.422955 10.969108
+v 48.083324 -25.893953 10.462122
+v 48.641674 -25.627237 -0.191853
+v 48.989891 -26.415424 10.461646
+v 49.768250 -26.283865 -0.036518
+v 49.194950 -25.952841 -0.058935
+v 48.952251 -27.454409 10.969319
+v 49.771446 -27.592869 -0.079630
+v 49.439892 -27.785009 -0.105282
+v 6.572913 -36.832699 12.118317
+v 6.067422 -36.007065 0.271222
+v 7.208903 -36.667999 0.266858
+v 7.451931 -37.330589 11.868827
+v 6.579782 -35.826687 12.321780
+v 6.059127 -34.670170 0.132068
+v 6.066250 -35.709530 0.256094
+v 7.204203 -33.997471 0.042499
+v 7.192123 -34.004623 0.043905
+v 7.460497 -35.312286 12.277904
+v 8.352009 -34.671955 0.102903
+v 8.342484 -35.802479 12.029478
+v 8.351350 -35.022381 0.162793
+v 8.351831 -34.767376 0.116576
+v 8.340819 -36.814774 11.823858
+v 8.349584 -36.005508 0.201077
+v 8.283037 -36.043766 0.199225
+v 26.505203 -15.630812 13.414497
+v 27.235132 -16.112644 13.126554
+v 26.537025 -14.715068 13.603597
+v 24.453348 -16.730968 -0.087947
+v 27.584997 -13.966211 15.820384
+v 25.521002 -16.095316 -0.071527
+v 26.542728 -14.711719 13.602878
+v 27.274687 -14.199018 14.969005
+v 28.253187 -14.414299 15.463843
+v 26.582638 -16.685295 -0.048119
+v 25.938108 -16.311893 0.011288
+v 26.583361 -17.920462 -0.080284
+v 28.048399 -15.155069 13.547735
+v 27.999773 -15.380352 13.091214
+v 27.994303 -15.662960 13.031758
+v 23.893330 28.233984 0.205436
+v 25.151701 28.488144 10.851409
+v 24.324751 28.956200 10.749089
+v 24.330439 29.914270 10.859965
+v 25.155916 30.395508 11.070804
+v 25.998703 29.456995 0.284421
+v 25.971842 29.929138 11.171237
+v 25.973251 28.979832 11.062705
+v 8.418139 -18.471401 11.902929
+v 8.386882 -17.130728 -0.472848
+v 9.515528 -17.776920 -0.536221
+v 9.282018 -18.938696 11.598927
+v 8.415815 -17.460033 11.814989
+v 10.646543 -15.815472 -0.451359
+v 10.171335 -17.361502 11.105118
+v 10.649559 -17.110750 -0.624360
+v 10.164332 -18.392336 11.198493
+v 10.164502 -17.386536 -0.694911
+v 47.019093 -40.739292 -0.077935
+v 47.767853 -41.053413 4.722744
+v 48.798748 -39.203182 4.351155
+v 48.204594 -38.744102 -0.099944
+v 48.416374 -38.958687 3.712324
+v 48.167316 -40.073357 -0.287930
+v 48.167397 -40.042397 -0.289395
+v 48.850040 -40.470200 4.817916
+v 48.629948 -40.546154 4.517108
+v 23.001305 18.461092 -0.570927
+v 23.237793 18.322388 -0.596599
+v 24.113255 17.801544 -0.522484
+v 23.127958 17.998617 8.326863
+v 22.267347 18.538294 7.618814
+v 23.015146 19.751728 -0.563453
+v 22.276871 18.755512 7.539894
+v 22.207907 19.611052 8.415721
+v 24.158716 20.390894 -0.666810
+v 23.979799 20.290548 -0.660533
+v 23.026745 20.107290 9.448050
+v 37.117443 -20.515631 0.300350
+v 37.488976 -19.000280 10.983290
+v 37.348915 -18.921528 10.949996
+v 36.616642 -18.375744 11.599539
+v 36.617485 -17.647182 11.641588
+v 36.613640 -17.380747 11.749197
+v 37.121002 -19.249296 0.326940
+v 37.118912 -19.591085 0.344950
+v 37.466454 -16.973246 11.322452
+v 38.210579 -18.664875 0.119229
+v 36.975056 -17.246761 11.363557
+v 37.033978 -17.222153 11.315315
+v 37.062057 -17.202902 11.332124
+v 38.280384 -17.427198 11.575115
+v 39.306816 -19.330372 -0.024955
+v 38.293121 -18.420712 11.472775
+v 38.273685 -17.731081 11.664408
+v 23.610140 14.089146 -0.262163
+v 23.613199 15.408321 -0.361649
+v 24.236921 15.820982 9.586550
+v 25.133116 15.279194 10.062277
+v 25.113935 14.220270 10.320995
+v -0.652712 -48.545471 11.592995
+v -1.141643 -47.746895 0.134068
+v -0.092320 -48.363144 0.323155
+v 0.170308 -49.079170 12.860823
+v -0.680088 -47.991096 10.972693
+v -0.692349 -47.537537 10.703392
+v -1.138901 -46.545624 0.248650
+v -0.087550 -45.973965 0.550883
+v 0.140856 -47.145702 11.454879
+v 0.949945 -46.578693 0.553748
+v 0.000000 -46.026466 0.566557
+v 0.940231 -47.731613 12.716615
+v 0.947900 -47.771282 0.440551
+v 0.938253 -48.662296 13.237556
+v 0.000000 -48.311741 0.349809
+v 0.634441 -48.819115 12.971379
+v 2.617133 -46.005238 0.677581
+v 3.350050 -46.416592 0.669094
+v 3.694665 -46.609848 0.665723
+v 5.317383 -44.290173 13.159965
+v 4.520775 -43.840572 13.178851
+v 4.423012 -43.013592 12.515664
+v 2.639833 -44.738777 0.798645
+v 4.698936 -42.864830 12.246568
+v 5.165852 -42.601624 11.993243
+v 3.725831 -44.087067 0.905691
+v 5.998145 -43.039902 12.128867
+v 4.788191 -44.684753 0.893778
+v 4.489823 -44.516972 0.896739
+v 6.059596 -43.893040 12.669984
+v 4.779646 -45.940960 0.775255
+v 5.546441 -44.174603 12.943409
+v 24.357857 23.570749 -0.254628
+v 24.835255 23.304150 -0.344378
+v 25.448992 22.948328 -0.337342
+v 25.202229 21.720610 12.486582
+v 24.858038 21.917425 12.508206
+v 24.595230 22.069214 12.510616
+v 24.389948 22.194498 12.449597
+v 24.387703 23.154818 12.351043
+v 24.389822 22.476311 12.653214
+v 25.211550 23.677465 12.052184
+v 26.534227 24.817875 -0.054955
+v 25.707827 23.374035 12.147655
+v 26.023245 23.155451 12.371542
+v 26.535839 23.567179 -0.189953
+v 25.992224 22.131397 13.055385
+v 25.766235 21.997086 13.091379
+v 18.556208 -30.979025 0.353739
+v 19.485638 -31.531326 0.232404
+v 19.609325 -31.411196 7.466578
+v 18.338566 -30.850945 0.335336
+v 20.620007 -29.691494 7.400238
+v 21.776812 -30.413572 8.564296
+v 20.657591 -29.548798 0.179658
+v 21.845140 -31.580051 9.151015
+v 20.639156 -30.879053 0.131875
+v 33.024456 -41.536514 0.068327
+v 33.522499 -41.830006 0.045876
+v 34.091591 -42.167149 0.061276
+v 32.884460 -41.925709 10.902962
+v 32.067516 -41.435863 10.746138
+v 33.046207 -40.303295 -0.019561
+v 33.036407 -40.625008 0.049332
+v 32.089394 -40.922058 10.566722
+v 32.081982 -40.471329 10.705830
+v 32.898720 -40.003036 10.970513
+v 33.736378 -40.490917 10.940850
+v 33.754211 -41.456730 10.724766
+v 33.761307 -41.334583 10.682081
+v 15.879624 17.890409 4.650366
+v 16.084848 17.013504 0.020060
+v 16.013191 17.815987 4.686305
+v 15.920706 18.860203 3.819102
+v 15.921294 18.888609 3.808401
+v 16.088707 18.272051 0.039446
+v 16.085962 17.534658 0.038829
+v 17.160553 18.881174 0.016073
+v 16.483187 18.499346 0.047300
+v 15.927354 18.892458 3.810414
+v 15.947518 18.909855 3.841390
+v 17.780142 19.087416 5.150725
+v 18.031855 18.620703 2.306057
+v 17.356020 19.018614 2.284197
+v 17.204906 18.854464 0.012159
+v 17.802048 18.852024 4.911542
+v 20.245710 3.075619 0.046999
+v 21.356213 2.433959 0.035076
+v 20.830936 2.684874 10.057961
+v 19.887857 3.221251 11.694939
+v 20.245489 4.355348 0.054189
+v 20.245098 4.197830 0.066959
+v 19.874067 4.204192 12.143770
+v 20.780476 4.722082 11.020750
+v 21.780210 4.240645 9.323413
+v 22.468063 3.074152 0.045953
+v 21.818584 3.183924 8.805850
+v 47.122025 -3.113548 -0.156502
+v 48.243881 -3.716457 -0.065923
+v 49.946426 -1.282673 13.042930
+v 49.005024 -0.972359 12.209212
+v 48.918934 -0.094822 11.621811
+v 47.135780 -1.819977 -0.095038
+v 47.121490 -2.927109 -0.164249
+v 49.798214 0.443805 11.901814
+v 48.244915 -1.158492 -0.057946
+v 49.339539 -1.776786 -0.082102
+v 49.181690 -1.690989 -0.094887
+v 50.720646 0.100732 12.742216
+v 50.783520 -0.748499 13.296622
+v 49.349586 -3.042795 -0.029120
+v 36.272209 -42.510902 11.049352
+v 36.270370 -41.564522 10.976237
+v 35.823383 -42.039021 0.044192
+v 36.264938 -41.952328 10.854829
+v 36.881638 -41.428493 -0.010092
+v 37.097794 -41.080963 11.247226
+v 37.941189 -42.038784 0.009011
+v 37.895672 -41.542286 11.220027
+v 37.913578 -41.553532 11.198120
+v 37.915241 -42.512753 10.990772
+v 37.915211 -42.317478 10.904978
+v 37.915176 -42.419163 10.970396
+v 37.363987 -42.822372 11.139349
+v 21.167526 -50.674129 -0.692295
+v 21.652334 -50.945347 -0.778959
+v 22.286856 -51.321999 -0.689495
+v 22.007975 -52.709499 13.803386
+v 21.202175 -52.160351 13.027057
+v 21.165558 -49.409798 -0.394928
+v 21.197834 -51.403435 11.828450
+v 21.197174 -51.048798 11.864746
+v 22.280609 -48.770298 -0.297224
+v 22.041573 -50.587486 12.108562
+v 23.393974 -49.423836 -0.255527
+v 22.640360 -48.969288 -0.361001
+v 22.879698 -51.096985 12.251140
+v 22.880396 -51.751312 12.184051
+v 22.854536 -52.132095 12.790290
+v 23.395651 -50.702904 -0.394268
+v 9.969192 4.307878 -0.218046
+v 11.062577 3.664061 -0.139401
+v 12.798149 2.935952 10.988212
+v 11.786958 3.499111 9.707621
+v 11.736787 3.528584 9.701364
+v 9.971164 4.890972 -0.223856
+v 9.968484 4.479674 -0.226975
+v 11.987610 4.375803 11.081252
+v 9.978683 5.550863 -0.200821
+v 13.040089 4.674491 12.455855
+v 11.075065 6.144872 -0.172194
+v 10.452305 5.809513 -0.198611
+v 13.943552 4.112884 13.263041
+v 12.155060 5.494777 -0.135413
+v 13.311828 4.510490 12.483809
+v 12.145251 4.259855 -0.125411
+v 12.145935 4.588547 -0.142409
+v 13.868291 3.258315 12.760560
+v 16.959520 16.530220 5.584530
+v 15.952931 17.138927 5.273085
+v 17.612396 19.082846 -0.006674
+v 18.790810 18.404259 -0.131332
+v 17.762638 18.996071 -0.019800
+v 18.778921 17.059046 -0.157398
+v 18.782986 17.669619 -0.135593
+v 37.188965 -31.649506 13.810407
+v 36.589264 -30.669987 -0.244867
+v 37.716896 -31.318012 -0.357780
+v 38.012859 -32.124928 13.771280
+v 37.172333 -30.660042 13.460694
+v 36.592972 -29.373129 -0.103434
+v 37.189575 -31.545374 13.829032
+v 37.722721 -28.722847 -0.079630
+v 37.167648 -29.042643 -0.088849
+v 38.005501 -30.173519 13.420105
+v 38.850513 -29.368927 -0.195052
+v 38.839344 -30.695066 13.795276
+v 38.848301 -30.667397 -0.329384
+v 38.838390 -31.164423 13.988610
+v 38.837570 -31.658178 13.900411
+v 38.812824 -30.687819 -0.329971
+v 15.467054 14.033843 8.006809
+v 14.247435 12.646991 -0.002475
+v 14.420353 12.551993 0.003480
+v 15.387180 11.999726 -0.045001
+v 16.461535 13.535516 8.227062
+v 14.249222 13.074002 -0.000341
+v 14.248631 13.007030 -0.002723
+v 14.248586 12.982450 -0.002464
+v 14.248742 12.933352 -0.000325
+v 15.345922 15.030597 7.185713
+v 14.252414 13.972651 0.000409
+v 16.247200 15.531847 6.576786
+v 15.390517 14.648141 -0.019301
+v 14.738463 14.262160 0.010093
+v 16.514578 13.998044 -0.117534
+v 17.260750 15.012412 6.811066
+v 16.518242 12.676214 -0.125297
+v 16.514347 13.540141 -0.134075
+v 17.353836 14.013166 7.639987
+v 15.651708 12.157084 -0.071778
+v -5.093294 -45.343330 4.636244
+v -5.434294 -45.109467 5.037567
+v -5.654767 -45.478546 -0.350673
+v -5.243112 -45.715565 -0.343397
+v -5.434066 -44.925426 5.037681
+v -3.412332 -44.166763 -0.062028
+v -3.427249 -43.904552 5.984106
+v -3.426074 -44.306538 5.698473
+v -14.625000 -45.500004 -0.401823
+v 24.375000 -45.500000 0.372793
+v -4.875000 -43.875004 -0.379399
+v 34.125000 -40.625008 -0.012631
+v 14.625003 -37.375008 0.570033
+v 8.124999 -34.937500 0.148099
+v -30.875000 -17.875000 -0.350930
+v -24.375000 -17.468752 -0.694210
+v -17.875002 -17.875000 0.388251
+v 11.375000 -18.281252 -0.730525
+v -30.875000 -11.375000 0.167431
+v 6.500001 -8.125000 0.150300
+v 24.984375 2.843749 0.040700
+v -24.375004 9.750000 0.068561
+v -39.000000 16.250000 0.242710
+v 17.062500 19.906250 0.059654
+v -34.125000 27.625000 -0.416705
+v 25.593750 28.234375 0.244453
+v -24.375002 29.250000 0.177554
+v -6.500003 34.125000 0.051823
+v 4.875000 43.875004 0.626991
+v -43.875000 47.125000 -0.230965
+v -21.125004 48.750008 1.076026
+v 17.875002 48.750008 0.205388
+v -7.019094 9.154321 11.005136
+v -42.111328 -28.118114 10.270661
+v -14.369601 2.473120 10.766763
+v -9.378195 11.325798 10.253020
+v 0.965423 30.825830 7.896383
+v -19.843262 30.795164 10.336315
+v -1.844899 43.074276 5.002682
+v -29.192629 0.009585 10.549155
+v -23.384087 43.178341 14.168326
+v 11.402965 -5.592093 11.603754
+v 20.776112 25.007637 11.814616
+v 9.245645 -10.518223 14.408474
+v 10.419623 2.592220 7.218242
+v 47.700748 -38.817028 2.614275
+v 37.845669 -42.342354 10.963897
+v 43.418411 -12.615542 10.889720
+v 24.842190 22.159437 12.758190
+v -4.954663 -45.298546 4.473378
+v 24.159296 2.704016 5.113871
+vn -0.5003 -0.8658 -0.0045
+vn -0.5003 0.8658 -0.0045
+vn 0.4981 0.8658 0.0478
+vn 0.9973 -0.0000 0.0739
+vn 0.4981 -0.8658 0.0478
+vn -0.5008 -0.8647 -0.0389
+vn -0.9991 -0.0018 0.0425
+vn -0.4978 0.8611 0.1030
+vn 0.5017 0.8611 0.0820
+vn 1.0000 -0.0018 0.0006
+vn 0.4987 -0.8647 -0.0598
+vn -0.4755 -0.8518 0.2199
+vn -0.9887 0.0034 0.1500
+vn -0.5104 0.8585 -0.0487
+vn 0.4810 0.8585 -0.1775
+vn 0.9942 0.0034 -0.1076
+vn 0.5159 -0.8518 0.0911
+vn -0.4984 -0.8633 0.0795
+vn -0.9992 0.0012 0.0408
+vn -0.5003 0.8657 -0.0171
+vn 0.4993 0.8657 -0.0363
+vn 1.0000 0.0012 0.0024
+vn 0.5011 -0.8633 0.0603
+vn -0.4986 -0.8619 -0.0921
+vn -1.0000 -0.0021 0.0023
+vn -0.5018 0.8572 0.1159
+vn 0.4978 0.8567 0.1351
+vn 0.9992 -0.0031 0.0407
+vn 0.5009 -0.8624 -0.0729
+vn -0.5085 -0.8608 0.0230
+vn -0.9844 0.0051 0.1758
+vn -0.4726 0.8639 0.1741
+vn 0.5151 0.8569 0.0196
+vn 0.9910 -0.0090 -0.1332
+vn 0.4792 -0.8678 -0.1315
+vn -0.5086 -0.8602 -0.0375
+vn -0.9959 0.0112 -0.0894
+vn -0.4898 0.8713 -0.0304
+vn 0.5038 0.8601 0.0805
+vn 0.4849 -0.8715 0.0734
+vn -0.5102 -0.8489 0.1382
+vn -0.9990 0.0038 -0.0450
+vn -0.4902 0.8564 -0.1619
+vn 0.5073 0.8564 -0.0956
+vn 0.9962 0.0038 0.0875
+vn 0.4874 -0.8489 0.2044
+vn -0.9995 -0.0000 -0.0307
+vn 0.4850 -0.8715 0.0734
+vn -0.5104 0.8586 -0.0487
+vn -0.4985 -0.8633 0.0795
+vn 0.9911 -0.0113 0.1324
+vn 0.5012 -0.8633 0.0603
+vn 0.4988 -0.8647 -0.0598
+vn 0.9942 0.0032 -0.1076
+vn -0.4897 0.8713 -0.0304
+vn -0.5085 -0.8603 -0.0374
+vn 0.4810 0.8586 -0.1775
+vn 1.0000 -0.0020 0.0007
+vn -0.0653 0.1736 0.9826
+vn 1.0000 -0.0017 0.0006
+vn -0.4986 -0.8632 0.0796
+vn -0.4727 0.8639 0.1741
+vn 0.9910 -0.0089 -0.1332
+vn 0.4980 -0.8659 0.0478
+vn -0.4978 0.8612 0.1030
+vn -0.4985 -0.8632 0.0795
+vn -0.4724 0.8640 0.1741
+vn -0.5102 -0.8489 0.1381
+vn -0.4728 0.8638 0.1742
+vn 0.5039 0.8600 0.0805
+vn -1.0000 -0.0020 0.0023
+vn 0.5006 -0.8636 0.0602
+vn 0.4791 -0.8678 -0.1315
+vn -0.4977 0.8612 0.1029
+vn 1.0000 -0.0019 0.0006
+vn 0.4982 0.8657 0.0478
+vn -0.5004 -0.8658 -0.0046
+vn 0.5010 -0.8624 -0.0729
+vn 0.5036 0.8602 0.0805
+vn 0.9911 -0.0121 0.1324
+vn 0.5039 0.8600 0.0804
+vn 0.9962 0.0037 0.0875
+vn -0.5004 -0.8658 -0.0045
+vn -0.0216 0.0500 -0.9985
+vn 0.0414 0.0943 -0.9947
+vn 0.0427 0.0936 -0.9947
+vn 0.2026 0.1235 -0.9714
+vn 0.2002 0.1059 -0.9740
+vn 0.0038 0.0582 -0.9983
+vn 0.0389 -0.0013 -0.9992
+vn 0.0576 0.0070 -0.9983
+vn -0.1538 -0.0079 -0.9881
+vn 0.1999 0.0034 -0.9798
+vn -0.0126 0.0893 -0.9959
+vn -0.1777 -0.1953 -0.9645
+vn -0.1385 0.0809 -0.9871
+vn -0.0471 -0.0463 -0.9978
+vn -0.0013 -0.0478 -0.9989
+vn 0.0039 -0.0113 -0.9999
+vn -0.0187 -0.0166 -0.9997
+vn -0.0096 -0.0946 -0.9955
+vn -0.0337 0.0019 -0.9994
+vn 0.0577 0.0425 -0.9974
+vn 0.0972 0.0357 -0.9946
+vn -0.0928 -0.1033 -0.9903
+vn -0.1537 -0.0463 -0.9870
+vn -0.0193 0.0832 -0.9963
+vn 0.0502 -0.0390 -0.9980
+vn -0.0025 -0.0880 -0.9961
+vn 0.1055 0.0873 -0.9906
+vn -0.0076 -0.1185 -0.9929
+vn 0.0258 -0.1708 -0.9850
+vn -0.0418 -0.0146 -0.9990
+vn -0.0293 0.0823 -0.9962
+vn -0.0312 -0.1417 -0.9894
+vn 0.1499 0.1136 -0.9821
+vn -0.1076 0.0372 -0.9935
+vn -0.0372 0.1084 -0.9934
+vn 0.0024 -0.0173 -0.9998
+vn -0.0428 0.1029 -0.9938
+vn -0.1409 0.1645 -0.9763
+vn -0.1164 0.0064 -0.9932
+vn -0.0475 -0.0052 -0.9989
+vn 0.1533 -0.1389 -0.9784
+vn 0.0167 -0.0110 -0.9998
+vn 0.1480 -0.0345 -0.9884
+vn -0.0473 -0.0838 -0.9954
+vn 0.1563 -0.0920 -0.9834
+vn 0.1564 -0.0924 -0.9834
+vn 0.0001 -0.1018 -0.9948
+vn -0.1273 0.0708 -0.9893
+vn 0.1383 -0.0261 -0.9901
+vn -0.0424 0.1086 -0.9932
+vn 0.1110 -0.1612 -0.9807
+vn 0.1283 0.0002 -0.9917
+vn 0.0222 0.0297 -0.9993
+vn 0.0332 -0.0312 -0.9990
+vn -0.0575 0.0794 -0.9952
+vn 0.1625 -0.0292 -0.9863
+vn 0.1624 -0.0292 -0.9863
+vn -0.0511 -0.1363 -0.9893
+vn -0.1446 -0.1568 -0.9770
+vn -0.0743 0.1322 -0.9884
+vn -0.2224 0.0969 -0.9701
+vn -0.1423 0.1330 -0.9809
+vn 0.0690 0.0904 -0.9935
+vn -0.0095 0.0400 -0.9992
+vn -0.0235 -0.0109 -0.9997
+vn 0.0332 -0.0168 -0.9993
+vn 0.1023 -0.0019 -0.9948
+vn -0.1681 0.1040 -0.9803
+vn 0.0760 0.0807 -0.9938
+vn -0.0745 0.1098 -0.9912
+vn 0.0969 0.0233 -0.9950
+vn -0.0188 -0.0382 -0.9991
+vn 0.0966 0.0877 -0.9914
+vn -0.0307 0.0042 -0.9995
+vn -0.0605 0.0136 -0.9981
+vn 0.1048 -0.1271 -0.9863
+vn -0.1188 0.0746 -0.9901
+vn -0.1997 -0.0826 -0.9764
+vn -0.0039 0.0624 -0.9980
+vn 0.0539 -0.1958 -0.9792
+vn -0.0154 0.0366 -0.9992
+vn 0.1298 0.0845 -0.9879
+vn -0.0403 0.0710 -0.9967
+vn 0.0413 -0.0517 -0.9978
+vn 0.2870 0.2227 -0.9317
+vn 0.0028 0.0496 -0.9988
+vn -0.0067 0.0175 -0.9998
+vn -0.0743 0.0142 -0.9971
+vn 0.0413 -0.0325 -0.9986
+vn 0.0516 -0.0146 -0.9986
+vn 0.0191 -0.1506 -0.9884
+vn 0.0153 0.1160 -0.9931
+vn -0.0749 -0.0436 -0.9962
+vn -0.0722 0.0071 -0.9974
+vn 0.0991 0.0047 -0.9951
+vn 0.0633 -0.0134 -0.9979
+vn 0.0272 -0.1006 -0.9946
+vn -0.0120 -0.0583 -0.9982
+vn 0.0629 -0.0104 -0.9980
+vn -0.0092 0.0404 -0.9991
+vn -0.1124 0.0746 -0.9909
+vn 0.0387 -0.0391 -0.9985
+vn -0.0755 -0.1147 -0.9905
+vn -0.0663 0.0361 -0.9971
+vn 0.0627 -0.1363 -0.9887
+vn -0.2026 -0.0071 -0.9792
+vn -0.0211 -0.1594 -0.9870
+vn 0.1657 -0.1226 -0.9785
+vn 0.0195 0.0008 -0.9998
+vn 0.0396 -0.0752 -0.9964
+vn -0.0485 -0.1028 -0.9935
+vn 0.0458 -0.2025 -0.9782
+vn -0.1450 -0.0225 -0.9892
+vn 0.0317 0.1046 -0.9940
+vn 0.0180 -0.0063 -0.9998
+vn 0.0272 -0.0057 -0.9996
+vn 0.0735 0.1071 -0.9915
+vn 0.0093 0.0091 -0.9999
+vn -0.0187 0.1058 -0.9942
+vn -0.0281 0.0927 -0.9953
+vn -0.0819 -0.0399 -0.9958
+vn -0.0799 0.1398 -0.9869
+vn -0.0658 -0.2397 -0.9686
+vn 0.0016 0.0496 -0.9988
+vn 0.0319 0.0513 -0.9982
+vn 0.0931 -0.0105 -0.9956
+vn -0.0298 0.0838 -0.9960
+vn -0.2642 -0.0764 -0.9614
+vn -0.1116 -0.2327 -0.9661
+vn 0.0229 0.0214 -0.9995
+vn -0.0834 0.0601 -0.9947
+vn -0.0669 0.0499 -0.9965
+vn 0.1500 -0.0870 -0.9849
+vn -0.0807 -0.0192 -0.9966
+vn -0.0338 0.1712 -0.9847
+vn -0.0130 0.0096 -0.9999
+vn -0.0900 0.2823 -0.9551
+vn 0.1659 0.0481 -0.9850
+vn 0.0926 -0.0401 -0.9949
+vn -0.0715 0.0509 -0.9961
+vn -0.0002 -0.0448 -0.9990
+vn 0.1617 -0.1813 -0.9700
+vn -0.0880 0.0658 -0.9939
+vn 0.0245 0.1034 -0.9943
+vn 0.0033 0.2547 -0.9670
+vn -0.0167 0.0015 -0.9999
+vn -0.0579 -0.0493 -0.9971
+vn -0.0501 0.0390 -0.9980
+vn 0.2115 0.0507 -0.9761
+vn 0.0322 0.1748 -0.9841
+vn -0.1299 0.1276 -0.9833
+vn -0.0669 -0.1250 -0.9899
+vn 0.0734 -0.2157 -0.9737
+vn 0.0898 -0.1502 -0.9846
+vn -0.0491 -0.1892 -0.9807
+vn -0.1547 -0.1576 -0.9753
+vn -0.0851 -0.0700 -0.9939
+vn 0.0581 0.0330 -0.9978
+vn 0.0869 -0.0024 -0.9962
+vn 0.2344 -0.0451 -0.9711
+vn 0.0765 0.1494 -0.9858
+vn -0.0371 0.0297 -0.9989
+vn 0.0525 -0.2739 -0.9603
+vn -0.1027 0.1493 -0.9834
+vn 0.0050 0.0310 -0.9995
+vn 0.0039 0.0852 -0.9964
+vn 0.0058 -0.0207 -0.9998
+vn 0.0339 -0.0263 -0.9991
+vn 0.2286 0.0919 -0.9692
+vn -0.0459 0.2286 -0.9724
+vn -0.0240 0.0127 -0.9996
+vn 0.0116 0.0255 -0.9996
+vn -0.0607 0.0287 -0.9977
+vn -0.0363 -0.0549 -0.9978
+vn 0.0045 -0.1760 -0.9844
+vn 0.1390 0.0809 -0.9870
+vn 0.1389 0.0809 -0.9870
+vn 0.0088 -0.0091 -0.9999
+vn -0.0099 0.0034 -0.9999
+vn -0.0568 -0.0201 -0.9982
+vn 0.0007 -0.0166 -0.9999
+vn -0.0471 0.0206 -0.9987
+vn 0.2285 -0.0991 -0.9685
+vn 0.0868 -0.1034 -0.9909
+vn -0.0166 -0.0600 -0.9981
+vn 0.0705 -0.0983 -0.9927
+vn 0.0357 0.1433 -0.9890
+vn -0.0334 -0.1797 -0.9832
+vn -0.0333 -0.0509 -0.9982
+vn -0.0619 -0.0410 -0.9972
+vn -0.0556 -0.2075 -0.9767
+vn 0.1248 -0.1188 -0.9850
+vn -0.0489 -0.0649 -0.9967
+vn 0.0509 -0.0884 -0.9948
+vn -0.1271 0.0054 -0.9919
+vn 0.1188 -0.1552 -0.9807
+vn -0.1238 -0.0746 -0.9895
+vn -0.0030 -0.1783 -0.9840
+vn -0.0230 0.0106 -0.9997
+vn -0.0046 0.1049 -0.9945
+vn -0.0310 0.0828 -0.9961
+vn -0.1098 0.0395 -0.9932
+vn -0.0793 -0.0213 -0.9966
+vn -0.0273 -0.0509 -0.9983
+vn -0.0046 0.0493 -0.9988
+vn 0.1464 -0.0752 -0.9864
+vn -0.0768 0.0308 -0.9966
+vn -0.1181 0.0480 -0.9918
+vn -0.0008 -0.0288 -0.9996
+vn -0.0007 -0.0288 -0.9996
+vn 0.0054 -0.0293 -0.9996
+vn -0.0336 -0.0935 -0.9951
+vn -0.0335 -0.0935 -0.9951
+vn 0.1580 -0.0907 -0.9833
+vn 0.1581 -0.0909 -0.9832
+vn 0.1581 -0.0908 -0.9832
+vn 0.1323 -0.0858 -0.9875
+vn 0.0256 -0.0030 -0.9997
+vn -0.0303 -0.1618 -0.9864
+vn -0.0769 0.0259 -0.9967
+vn -0.1606 -0.0509 -0.9857
+vn -0.1606 -0.0510 -0.9857
+vn -0.0360 0.1035 -0.9940
+vn 0.0062 0.0331 -0.9994
+vn -0.0498 0.0794 -0.9956
+vn 0.0686 0.1322 -0.9888
+vn 0.1265 -0.0093 -0.9919
+vn -0.0313 0.0600 -0.9977
+vn 0.0063 0.1466 -0.9892
+vn -0.0466 -0.1262 -0.9909
+vn -0.0002 0.0124 -0.9999
+vn 0.0012 0.0129 -0.9999
+vn 0.0818 0.1097 -0.9906
+vn 0.0111 0.1729 -0.9849
+vn -0.1253 0.2045 -0.9708
+vn -0.0249 0.2691 -0.9628
+vn -0.0249 -0.0618 -0.9978
+vn 0.0583 -0.0413 -0.9974
+vn 0.0123 0.0137 -0.9998
+vn 0.0800 -0.0771 -0.9938
+vn -0.0416 0.0750 -0.9963
+vn -0.0030 -0.1717 -0.9851
+vn 0.0634 -0.1787 -0.9819
+vn -0.0257 -0.0982 -0.9948
+vn -0.3312 -0.1715 -0.9278
+vn -0.0033 0.0624 -0.9980
+vn 0.0234 0.0002 -0.9997
+vn 0.0234 0.0003 -0.9997
+vn 0.1521 0.1186 -0.9812
+vn -0.0337 -0.0789 -0.9963
+vn -0.0005 0.0178 -0.9998
+vn -0.1466 0.2299 -0.9621
+vn 0.0990 0.0433 -0.9941
+vn -0.0286 -0.0807 -0.9963
+vn -0.0321 0.0773 -0.9965
+vn -0.0585 0.0711 -0.9957
+vn -0.0262 0.0496 -0.9984
+vn 0.0234 -0.0147 -0.9996
+vn 0.1515 -0.1489 -0.9772
+vn -0.0615 0.1796 -0.9818
+vn -0.0145 0.0350 -0.9993
+vn 0.0384 0.0073 -0.9992
+vn 0.0685 -0.0193 -0.9975
+vn 0.0407 -0.0583 -0.9975
+vn 0.1422 -0.0752 -0.9870
+vn -0.0031 0.1069 -0.9943
+vn -0.0319 0.1211 -0.9921
+vn -0.0554 -0.0104 -0.9984
+vn 0.0792 -0.0390 -0.9961
+vn -0.0479 0.1178 -0.9919
+vn 0.0171 0.0764 -0.9969
+vn -0.0480 0.0979 -0.9940
+vn -0.1039 0.0069 -0.9946
+vn 0.0221 0.1246 -0.9920
+vn 0.0377 0.1229 -0.9917
+vn -0.0752 -0.1436 -0.9868
+vn -0.1100 0.1345 -0.9848
+vn -0.0559 0.1068 -0.9927
+vn -0.0325 -0.0708 -0.9970
+vn 0.0753 -0.1434 -0.9868
+vn 0.0016 -0.1619 -0.9868
+vn -0.2069 -0.0560 -0.9768
+vn -0.1062 0.0091 -0.9943
+vn -0.0506 0.1086 -0.9928
+vn 0.0541 0.1057 -0.9929
+vn -0.0230 0.0965 -0.9951
+vn 0.0033 0.0513 -0.9987
+vn 0.1455 0.0249 -0.9891
+vn -0.0272 0.0806 -0.9964
+vn -0.0829 -0.0155 -0.9964
+vn 0.0778 0.0933 -0.9926
+vn 0.0013 -0.0070 -1.0000
+vn 0.1914 -0.0476 -0.9804
+vn 0.0377 0.0104 -0.9992
+vn 0.0455 0.1224 -0.9914
+vn 0.0062 0.0106 -0.9999
+vn -0.1312 0.1204 -0.9840
+vn -0.2615 0.1613 -0.9516
+vn -0.0309 -0.0346 -0.9989
+vn -0.0309 -0.0345 -0.9989
+vn -0.2640 -0.0902 -0.9603
+vn 0.0751 -0.0429 -0.9963
+vn -0.1110 0.2352 -0.9656
+vn -0.0869 -0.1624 -0.9829
+vn -0.0818 -0.0093 -0.9966
+vn -0.0349 0.1822 -0.9826
+vn 0.0083 0.0390 -0.9992
+vn -0.0715 0.0517 -0.9961
+vn 0.0028 0.1287 -0.9917
+vn 0.0246 -0.0789 -0.9966
+vn -0.0011 -0.0968 -0.9953
+vn -0.0184 -0.1595 -0.9870
+vn -0.0197 -0.0139 -0.9997
+vn 0.1221 -0.0940 -0.9881
+vn -0.0744 -0.0454 -0.9962
+vn 0.0262 0.0049 -0.9996
+vn -0.0621 0.2952 -0.9534
+vn 0.0686 -0.1454 -0.9870
+vn 0.2321 0.1458 -0.9617
+vn 0.1954 -0.0890 -0.9767
+vn 0.0577 0.0297 -0.9979
+vn -0.0564 -0.1896 -0.9802
+vn -0.1525 0.0344 -0.9877
+vn -0.1431 0.0448 -0.9887
+vn 0.1166 -0.2131 -0.9701
+vn 0.0971 -0.1353 -0.9860
+vn 0.0367 0.1083 -0.9934
+vn -0.0392 -0.1773 0.9834
+vn -0.0792 0.3173 0.9450
+vn -0.2907 -0.5635 0.7733
+vn 0.4624 0.1287 0.8773
+vn -0.1018 0.2331 0.9671
+vn -0.5803 -0.2311 0.7809
+vn 0.3793 0.6179 0.6887
+vn 0.2943 0.6045 0.7402
+vn -0.6560 -0.3674 0.6593
+vn -0.5998 0.2712 0.7528
+vn -0.2167 -0.6131 0.7597
+vn 0.6971 -0.1561 0.6998
+vn -0.5257 -0.3976 0.7521
+vn -0.4425 -0.4912 0.7503
+vn -0.4119 0.4353 0.8005
+vn -0.4152 0.4345 0.7993
+vn -0.4140 0.4348 0.7998
+vn -0.4151 0.4345 0.7993
+vn -0.4138 0.4348 0.7998
+vn -0.4130 -0.2631 0.8719
+vn 0.6224 -0.4370 0.6494
+vn 0.2047 0.5464 0.8121
+vn 0.2047 0.5460 0.8124
+vn 0.2047 0.5442 0.8136
+vn -0.1701 0.1524 0.9736
+vn -0.4197 0.4333 0.7976
+vn 0.7251 -0.0716 0.6850
+vn 0.4647 -0.2121 0.8597
+vn 0.3872 -0.6698 0.6335
+vn 0.3872 -0.6699 0.6335
+vn 0.2532 0.6861 0.6820
+vn -0.1967 0.7459 0.6363
+vn -0.2615 0.7182 0.6449
+vn -0.4907 0.3431 0.8010
+vn -0.5870 -0.0393 0.8086
+vn -0.6553 -0.1064 0.7479
+vn 0.3492 -0.0903 0.9327
+vn 0.8542 -0.0570 0.5168
+vn -0.4835 0.7078 0.5150
+vn 0.8298 0.2471 0.5003
+vn -0.1124 -0.6603 0.7425
+vn 0.4692 -0.6971 0.5421
+vn -0.1912 0.6663 0.7208
+vn -0.4722 0.4629 0.7502
+vn 0.3471 -0.4157 0.8407
+vn 0.3471 -0.4156 0.8407
+vn -0.5137 -0.1312 0.8479
+vn -0.1040 0.8094 0.5779
+vn 0.0965 0.7642 0.6377
+vn -0.4165 0.6352 0.6504
+vn -0.8755 -0.1653 0.4541
+vn 0.6097 -0.2585 0.7493
+vn 0.5417 0.1334 0.8299
+vn -0.3057 -0.3388 0.8898
+vn -0.6312 0.1795 0.7546
+vn -0.6312 0.1795 0.7545
+vn -0.4073 0.5221 0.7494
+vn -0.5339 0.3936 0.7484
+vn -0.6845 -0.2130 0.6972
+vn 0.7997 -0.0216 0.6000
+vn -0.2200 0.2304 0.9479
+vn 0.5446 -0.0532 0.8370
+vn 0.5446 -0.0535 0.8370
+vn -0.0423 0.0252 0.9988
+vn -0.0049 -0.4971 0.8677
+vn -0.0037 -0.4987 0.8668
+vn -0.0038 -0.4986 0.8668
+vn 0.3414 0.5230 0.7810
+vn -0.4144 -0.3826 0.8258
+vn -0.3404 0.2272 0.9124
+vn 0.1437 -0.7037 0.6958
+vn -0.0541 -0.8609 0.5058
+vn 0.2064 0.0795 0.9752
+vn 0.0979 0.1982 0.9753
+vn -0.1937 -0.4609 0.8661
+vn -0.2243 -0.4174 0.8806
+vn -0.0315 -0.1129 0.9931
+vn 0.0997 0.6713 0.7344
+vn -0.7961 -0.2908 0.5307
+vn 0.5906 -0.4459 0.6726
+vn 0.5860 -0.7910 0.1759
+vn 0.0719 -0.0959 0.9928
+vn -0.4709 -0.0098 0.8821
+vn -0.1685 -0.7956 0.5819
+vn 0.5628 0.4117 0.7168
+vn 0.1537 0.4545 0.8774
+vn -0.4605 -0.5355 0.7079
+vn -0.4014 -0.6515 0.6438
+vn 0.6319 0.2361 0.7382
+vn 0.2411 -0.2432 0.9395
+vn 0.2539 0.5446 0.7994
+vn 0.2539 0.5445 0.7994
+vn -0.5992 0.4930 0.6308
+vn -0.2512 -0.8164 0.5200
+vn -0.3613 -0.4942 0.7907
+vn 0.5084 -0.0036 0.8611
+vn -0.3175 -0.5826 0.7482
+vn -0.4862 -0.7109 0.5082
+vn -0.4732 -0.3292 0.8171
+vn -0.2135 0.2711 0.9386
+vn -0.1543 0.2997 0.9415
+vn -0.3291 0.3272 0.8858
+vn -0.4198 0.2042 0.8843
+vn 0.4848 -0.3480 0.8024
+vn 0.4474 0.2023 0.8711
+vn -0.2121 -0.7107 0.6708
+vn 0.0555 -0.0702 0.9960
+vn -0.4930 0.3951 0.7752
+vn 0.7621 0.1896 0.6190
+vn -0.2825 0.2076 0.9365
+vn -0.5382 0.0879 0.8382
+vn 0.1857 -0.6087 0.7714
+vn 0.5879 0.2112 0.7809
+vn 0.8722 -0.1438 0.4675
+vn -0.6891 -0.2079 0.6943
+vn -0.5854 0.2568 0.7691
+vn -0.5854 0.2567 0.7691
+vn -0.4323 -0.1437 0.8902
+vn 0.2337 -0.7910 0.5654
+vn 0.8357 -0.2189 0.5036
+vn -0.1204 0.7076 0.6963
+vn -0.7971 0.4321 0.4218
+vn -0.2063 -0.6766 0.7069
+vn 0.5541 -0.0718 0.8293
+vn -0.1306 -0.3033 0.9439
+vn 0.0197 0.3687 0.9293
+vn 0.0197 0.3687 0.9294
+vn 0.5364 0.2552 0.8044
+vn -0.0498 -0.5042 0.8622
+vn -0.4797 -0.4033 0.7792
+vn 0.3815 -0.3980 0.8343
+vn -0.4054 0.4247 0.8095
+vn -0.3993 0.4283 0.8106
+vn -0.4269 0.5595 0.7104
+vn -0.2425 -0.5094 0.8257
+vn 0.1788 0.8011 0.5712
+vn -0.4002 -0.5886 0.7024
+vn 0.0262 -0.4391 0.8981
+vn 0.0262 0.4134 0.9102
+vn 0.7226 -0.3452 0.5990
+vn 0.1522 0.4810 0.8634
+vn -0.6844 0.2788 0.6737
+vn -0.7435 0.1909 0.6409
+vn -0.8104 -0.2423 0.5334
+vn 0.3835 -0.7763 0.5003
+vn 0.0324 0.3332 0.9423
+vn -0.7719 -0.0019 0.6357
+vn -0.2171 0.0928 0.9717
+vn -0.3738 -0.6485 0.6631
+vn 0.3697 0.0813 0.9256
+vn 0.1630 -0.1967 0.9668
+vn 0.3605 0.6091 0.7064
+vn 0.1476 0.5373 0.8304
+vn 0.0011 -0.4363 0.8998
+vn -0.0627 -0.5332 0.8436
+vn -0.8152 0.1708 0.5534
+vn -0.8250 -0.2541 0.5049
+vn 0.6767 -0.2625 0.6879
+vn 0.5260 -0.5492 0.6494
+vn 0.0763 -0.2435 0.9669
+vn -0.1157 -0.4288 0.8960
+vn 0.1912 -0.6178 0.7628
+vn 0.3741 0.5142 0.7718
+vn 0.3741 0.5141 0.7718
+vn -0.6680 -0.0843 0.7393
+vn 0.6675 -0.2206 0.7111
+vn 0.1905 -0.1748 0.9660
+vn -0.1596 -0.0812 0.9838
+vn -0.0597 -0.5584 0.8274
+vn -0.5111 -0.1391 0.8482
+vn 0.5180 0.7122 0.4738
+vn -0.6077 0.4111 0.6795
+vn 0.7686 0.3834 0.5121
+vn 0.2284 -0.6740 0.7025
+vn 0.5736 -0.4988 0.6497
+vn 0.8781 -0.0292 0.4776
+vn -0.1842 -0.1119 0.9765
+vn 0.0729 0.4059 0.9110
+vn -0.4764 -0.1533 0.8658
+vn 0.0919 0.2848 0.9542
+vn 0.5210 -0.6849 0.5094
+vn -0.0566 0.2283 0.9719
+vn 0.6440 -0.0448 0.7637
+vn -0.3450 0.2287 0.9103
+vn -0.4849 0.1460 0.8623
+vn -0.6230 -0.0316 0.7816
+vn -0.3508 -0.6838 0.6398
+vn -0.1378 -0.2942 0.9458
+vn -0.4749 0.3188 0.8202
+vn 0.1535 0.6393 0.7535
+vn -0.3843 -0.6754 0.6295
+vn -0.5135 -0.5027 0.6954
+vn 0.5158 -0.4448 0.7322
+vn -0.2667 -0.5588 0.7853
+vn 0.4028 0.7353 0.5450
+vn -0.4970 0.6360 0.5903
+vn -0.7129 0.3437 0.6113
+vn -0.8402 -0.3929 0.3738
+vn -0.7064 -0.0348 0.7069
+vn -0.7060 -0.0363 0.7072
+vn -0.7059 -0.0368 0.7073
+vn -0.7077 -0.0290 0.7059
+vn -0.7082 -0.0267 0.7055
+vn 0.0023 -0.6980 0.7161
+vn -0.4737 -0.5686 0.6726
+vn 0.5635 0.1424 0.8138
+vn 0.5634 0.1423 0.8138
+vn 0.2395 -0.2043 0.9491
+vn -0.2370 -0.8609 0.4501
+vn -0.3738 -0.8510 0.3689
+vn 0.7988 0.0273 0.6010
+vn -0.2596 -0.4333 0.8630
+vn -0.1134 -0.6696 0.7340
+vn -0.1748 0.3753 0.9103
+vn -0.6518 0.0568 0.7563
+vn 0.4524 0.1603 0.8773
+vn 0.2063 0.5831 0.7858
+vn 0.1068 0.7590 0.6423
+vn 0.1423 0.2107 0.9671
+vn 0.1424 0.2107 0.9671
+vn -0.2750 -0.5719 0.7728
+vn -0.5465 0.3505 0.7606
+vn 0.3207 -0.7668 0.5560
+vn 0.3829 -0.7537 0.5342
+vn 0.8065 -0.2362 0.5420
+vn 0.0000 0.7580 0.6522
+vn -0.7001 0.4647 0.5421
+vn -0.5254 0.7009 0.4825
+vn -0.6707 -0.3587 0.6492
+vn -0.0941 -0.8437 0.5285
+vn 0.3382 0.4508 0.8260
+vn 0.3382 0.4509 0.8260
+vn 0.3382 0.4508 0.8261
+vn -0.6699 -0.4576 0.5846
+vn 0.2414 0.4190 0.8753
+vn 0.6185 0.0133 0.7856
+vn -0.3589 -0.2593 0.8966
+vn -0.6206 0.3048 0.7224
+vn 0.0619 0.8440 0.5328
+vn 0.3668 -0.2279 0.9020
+vn 0.1384 -0.1408 0.9803
+vn 0.2157 -0.7177 0.6621
+vn 0.2398 0.5505 0.7997
+vn -0.0497 0.0606 0.9969
+vn -0.0193 0.6376 0.7701
+vn 0.2552 -0.7013 0.6656
+vn 0.2552 -0.7012 0.6657
+vn -0.3223 0.0224 0.9464
+vn 0.4704 0.3764 0.7981
+vn 0.2047 0.5478 0.8112
+vn -0.0313 0.6985 0.7149
+vn -0.5785 0.2275 0.7833
+vn -0.5787 0.2277 0.7831
+vn 0.3010 0.1474 0.9422
+vn 0.3088 -0.3825 0.8708
+vn 0.3602 -0.0412 0.9320
+vn -0.3979 0.7713 0.4967
+vn -0.7598 -0.2301 0.6080
+vn 0.6682 0.5061 0.5453
+vn -0.1202 -0.8351 0.5369
+vn -0.0031 -0.4995 0.8663
+vn 0.6359 0.4593 0.6202
+vn -0.0650 -0.8056 0.5889
+vn 0.1086 0.1406 0.9841
+vn -0.5932 -0.0499 0.8035
+vn -0.3359 0.0653 0.9396
+vn -0.3106 -0.0840 0.9468
+vn 0.2460 0.5739 0.7811
+vn 0.4587 -0.3385 0.8216
+vn 0.1131 -0.3371 0.9346
+vn -0.3890 -0.1057 0.9152
+vn -0.5997 -0.0846 0.7957
+vn 0.0339 0.0052 0.9994
+vn 0.0485 -0.1568 0.9864
+vn -0.3472 -0.5288 0.7745
+vn -0.3472 -0.5287 0.7745
+vn -0.2458 -0.8284 0.5034
+vn -0.6327 0.5215 0.5725
+vn -0.7170 -0.2121 0.6641
+vn 0.5818 0.4215 0.6956
+vn 0.8216 -0.4390 0.3636
+vn 0.5309 -0.1469 0.8346
+vn 0.4126 0.1354 0.9008
+vn 0.3777 0.1596 0.9121
+vn 0.3717 -0.2064 0.9051
+vn -0.7488 0.0643 0.6597
+vn -0.7476 0.0521 0.6621
+vn -0.3572 -0.0981 0.9289
+vn 0.1527 0.1074 0.9824
+vn -0.2278 0.5606 0.7962
+vn -0.5081 0.6422 0.5739
+vn 0.5743 0.6032 0.5535
+vn 0.0761 -0.6941 0.7158
+vn 0.6826 -0.0579 0.7285
+vn 0.4432 0.0345 0.8958
+vn 0.4633 0.5948 0.6569
+vn 0.9387 -0.1397 0.3151
+vn 0.4530 0.3156 0.8338
+vn -0.1006 0.5252 0.8450
+vn 0.7326 0.2512 0.6326
+vn -0.1973 0.3786 0.9043
+vn 0.5166 0.2415 0.8215
+vn -0.3521 0.0990 0.9307
+vn 0.4373 -0.0842 0.8954
+vn 0.1302 -0.0537 0.9900
+vn -0.4291 -0.6213 0.6557
+vn -0.4797 -0.7062 0.5208
+vn -0.4797 -0.7061 0.5208
+vn 0.6904 0.0178 0.7232
+vn -0.3884 -0.1386 0.9110
+vn 0.4881 -0.0276 0.8723
+vn -0.0050 0.6399 0.7685
+vn 0.1316 0.6385 0.7583
+vn 0.4607 0.4801 0.7465
+vn -0.2215 0.6654 0.7128
+vn -0.0322 -0.8191 0.5727
+vn -0.5641 0.3928 0.7263
+vn -0.3149 0.2243 0.9223
+vn 0.3626 0.6119 0.7029
+vn -0.8552 0.3416 0.3898
+vn -0.1375 0.2820 0.9495
+vn 0.6993 -0.7045 0.1207
+vn 0.6331 -0.3804 0.6741
+vn -0.6473 -0.3636 0.6699
+vn -0.4765 0.5917 0.6503
+vn 0.7486 -0.2390 0.6185
+vn 0.0160 0.3290 0.9442
+vn -0.2386 -0.6969 0.6764
+vn -0.2385 -0.6969 0.6764
+vn -0.2254 -0.0996 0.9692
+vn 0.4393 0.5272 0.7274
+vn -0.5929 0.5017 0.6299
+vn 0.6602 0.0620 0.7485
+vn -0.2900 0.3022 0.9081
+vn 0.2860 0.0541 0.9567
+vn 0.7617 -0.0013 0.6480
+vn -0.5074 0.4444 0.7383
+vn -0.7089 -0.0238 0.7049
+vn -0.7089 -0.0252 0.7049
+vn -0.2231 0.1719 0.9595
+vn 0.7872 0.0530 0.6144
+vn -0.8075 0.2198 0.5474
+vn -0.2145 0.3171 0.9238
+vn 0.2287 -0.2015 0.9524
+vn -0.2905 -0.4944 0.8193
+vn -0.3793 -0.6388 0.6694
+vn -0.1966 0.5486 0.8126
+vn -0.0546 -0.1755 0.9830
+s off
+f 2034//2628 2035//2628 2036//2628
+f 2037//2629 2038//2629 2039//2629 2040//2629
+f 2041//2630 2038//2630 2037//2630 2042//2630 2043//2630 2044//2630
+f 2045//2631 2046//2631 2047//2631 2048//2631 2049//2631 2050//2631 2044//2631 2043//2631
+f 2049//2632 2048//2632 2051//2632
+f 2052//2633 2053//2633 2054//2633 2055//2633 2056//2633 2057//2633
+f 2058//2634 2059//2634 2053//2634 2052//2634
+f 2060//2635 2061//2635 2059//2635 2058//2635 2062//2635
+f 2063//2636 2060//2636 2062//2636 2064//2636 2065//2636
+f 2066//2637 2067//2637 2063//2637 2065//2637 2068//2637
+f 2069//2638 2055//2638 2054//2638 2066//2638 2068//2638
+f 2070//2639 2071//2639 2072//2639 2073//2639 2074//2639 2075//2639
+f 2076//2639 2077//2639 2078//2639
+f 2079//2640 2080//2640 2081//2640 2072//2640 2071//2640 2082//2640
+f 2083//2641 2084//2641 2079//2641 2082//2641 2085//2641
+f 2084//2642 2083//2642 2086//2642 2087//2642
+f 2088//2643 2087//2643 2086//2643 2089//2643
+f 2075//2644 2074//2644 2090//2644 2078//2644 2077//2644 2088//2644 2089//2644
+f 2091//2645 2092//2645 2093//2645 2094//2645 2095//2645
+f 2096//2646 2097//2646 2092//2646 2091//2646 2098//2646
+f 2099//2647 2100//2647 2097//2647 2096//2647 2101//2647
+f 2102//2648 2099//2648 2101//2648 2103//2648
+f 2104//2649 2105//2649 2106//2649 2107//2649 2102//2649 2103//2649
+f 2095//2650 2094//2650 2108//2650 2109//2650 2110//2650
+f 2111//2651 2112//2651 2113//2651 2114//2651
+f 2115//2652 2116//2652 2117//2652 2118//2652 2112//2652 2111//2652
+f 2119//2653 2120//2653 2116//2653 2115//2653 2121//2653
+f 2122//2654 2123//2654 2119//2654 2121//2654 2124//2654 2125//2654
+f 2126//2655 2127//2655 2128//2655 2125//2655 2124//2655 2129//2655
+f 2113//2656 2126//2656 2129//2656 2114//2656
+f 2130//2657 2131//2657 2132//2657 2133//2657
+f 2134//2658 2135//2658 2136//2658 2137//2658 2131//2658 2130//2658 2138//2658
+f 2139//2659 2140//2659 2141//2659 2135//2659 2134//2659
+f 2140//2660 2139//2660 2142//2660 2143//2660 2144//2660
+f 2145//2661 2144//2661 2143//2661 2146//2661 2147//2661
+f 2133//2662 2132//2662 2145//2662 2147//2662 2148//2662
+f 2149//2663 2150//2663 2151//2663 2152//2663 2153//2663 2154//2663
+f 2155//2664 2149//2664 2154//2664 2156//2664
+f 2157//2665 2158//2665 2155//2665 2156//2665
+f 2159//2666 2160//2666 2158//2666 2157//2666
+f 2153//2667 2152//2667 2161//2667 2162//2667 2163//2667
+f 2164//2668 2165//2668 2166//2668 2167//2668 2168//2668
+f 2169//2669 2170//2669 2164//2669 2168//2669 2171//2669
+f 2172//2670 2173//2670 2174//2670 2170//2670 2169//2670 2175//2670
+f 2176//2671 2177//2671 2172//2671 2175//2671
+f 2178//2672 2179//2672 2180//2672 2181//2672 2177//2672 2176//2672 2182//2672
+f 2183//2673 2184//2673 2185//2673 2179//2673 2178//2673 2167//2673 2166//2673
+f 2186//2628 2187//2628 2188//2628 2189//2628
+f 2190//2674 2186//2674 2189//2674 2191//2674
+f 2192//2629 2193//2629 2194//2629 2190//2629 2191//2629
+f 2195//2630 2193//2630 2192//2630 2196//2630
+f 2197//2631 2198//2631 2199//2631 2195//2631 2196//2631
+f 2187//2632 2198//2632 2197//2632 2188//2632
+f 2200//2633 2201//2633 2202//2633 2203//2633 2204//2633
+f 2205//2634 2206//2634 2207//2634 2201//2634 2200//2634
+f 2208//2635 2209//2635 2210//2635 2206//2635 2205//2635 2211//2635 2212//2635
+f 2213//2636 2214//2636 2215//2636 2212//2636 2211//2636 2216//2636
+f 2217//2637 2218//2637 2213//2637 2216//2637 2219//2637
+f 2220//2638 2203//2638 2202//2638 2221//2638 2222//2638 2217//2638 2219//2638
+f 2223//2639 2224//2639 2225//2639 2226//2639 2227//2639 2228//2639
+f 2229//2640 2230//2640 2231//2640 2224//2640 2223//2640 2232//2640 2233//2640 2234//2640 2235//2640
+f 2236//2641 2237//2641 2234//2641 2233//2641
+f 2238//2642 2239//2642 2237//2642 2236//2642 2240//2642
+f 2241//2643 2238//2643 2240//2643 2242//2643 2243//2643
+f 2228//2644 2227//2644 2244//2644 2245//2644 2241//2644 2243//2644
+f 2246//2645 2247//2645 2248//2645 2249//2645
+f 2250//2647 2251//2647 2252//2647 2253//2647 2254//2647
+f 2255//2648 2256//2648 2251//2648 2250//2648 2257//2648
+f 2258//2649 2259//2649 2255//2649 2257//2649 2260//2649
+f 2249//2650 2248//2650 2261//2650 2259//2650 2258//2650
+f 2262//2651 2263//2651 2264//2651 2265//2651 2266//2651
+f 2267//2652 2268//2652 2263//2652 2262//2652
+f 2269//2653 2268//2653 2267//2653 2270//2653
+f 2271//2654 2269//2654 2270//2654 2272//2654
+f 2273//2655 2271//2655 2272//2655 2274//2655
+f 2275//2656 2265//2656 2264//2656 2273//2656 2274//2656
+f 2276//2657 2222//2657 2221//2657 2277//2657 2278//2657 2279//2657
+f 2280//2658 2218//2658 2217//2658 2222//2658 2276//2658 2281//2658
+f 2282//2659 2214//2659 2213//2659 2218//2659 2280//2659 2283//2659
+f 2284//2660 2285//2660 2286//2660 2282//2660 2283//2660
+f 2287//2661 2286//2661 2285//2661 2288//2661
+f 2278//2662 2287//2662 2288//2662 2279//2662
+f 2289//2663 2290//2663 2291//2663 2292//2663 2293//2663
+f 2294//2664 2289//2664 2293//2664 2295//2664
+f 2296//2665 2297//2665 2298//2665 2299//2665 2294//2665 2295//2665
+f 2300//2666 2301//2666 2297//2666 2296//2666
+f 2292//2675 2291//2675 2302//2675
+f 2303//2668 2304//2668 2305//2668 2306//2668 2307//2668 2308//2668
+f 2309//2669 2310//2669 2311//2669 2303//2669 2308//2669 2312//2669
+f 2313//2670 2310//2670 2309//2670 2314//2670 2315//2670
+f 2316//2671 2317//2671 2313//2671 2315//2671
+f 2318//2672 2319//2672 2320//2672 2321//2672 2317//2672 2316//2672 2322//2672
+f 2305//2673 2319//2673 2318//2673 2306//2673
+f 2323//2628 2324//2628 2325//2628 2326//2628 2327//2628
+f 2328//2674 2323//2674 2327//2674 2329//2674
+f 2330//2629 2331//2629 2332//2629 2328//2629 2329//2629 2333//2629
+f 2334//2630 2335//2630 2331//2630 2330//2630
+f 2336//2631 2337//2631 2335//2631 2334//2631
+f 2324//2632 2338//2632 2337//2632 2336//2632 2325//2632
+f 2339//2633 2340//2633 2341//2633 2342//2633 2343//2633
+f 2344//2634 2345//2634 2340//2634 2339//2634
+f 2346//2635 2345//2635 2344//2635 2347//2635 2348//2635
+f 2349//2636 2346//2636 2348//2636 2350//2636
+f 2351//2637 2349//2637 2350//2637 2352//2637
+f 2342//2638 2341//2638 2351//2638 2352//2638
+f 2353//2639 2354//2639 2355//2639 2356//2639 2357//2639
+f 2358//2640 2359//2640 2360//2640 2353//2640 2357//2640
+f 2361//2641 2362//2641 2363//2641 2364//2641 2360//2641 2359//2641
+f 2365//2642 2366//2642 2367//2642 2362//2642 2361//2642
+f 2368//2643 2369//2643 2366//2643 2365//2643
+f 2370//2644 2356//2644 2355//2644 2369//2644 2368//2644
+f 2371//2645 2372//2645 2373//2645 2374//2645 2375//2645 2376//2645
+f 2377//2646 2378//2646 2379//2646 2380//2646 2372//2646 2371//2646
+f 2381//2647 2382//2647 2378//2647 2377//2647 2383//2647
+f 2384//2648 2381//2648 2383//2648 2385//2648 2386//2648
+f 2387//2649 2388//2649 2384//2649 2386//2649 2389//2649
+f 2375//2650 2374//2650 2387//2650 2389//2650
+f 2390//2651 2391//2651 2392//2651 2393//2651 2394//2651
+f 2392//2652 2395//2652 2396//2652 2397//2652 2398//2652 2399//2652 2393//2652
+f 2400//2654 2401//2654 2402//2654 2403//2654 2404//2654 2405//2654 2406//2654 2407//2654
+f 2408//2655 2409//2655 2403//2655 2402//2655 2410//2655 2411//2655
+f 2412//2656 2390//2656 2394//2656 2408//2656 2411//2656 2413//2656
+f 2414//2657 2415//2657 2416//2657 2417//2657 2418//2657
+f 2419//2658 2415//2658 2414//2658 2420//2658
+f 2421//2659 2422//2659 2423//2659 2424//2659 2425//2659
+f 2426//2660 2427//2660 2425//2660 2424//2660
+f 2428//2661 2427//2661 2426//2661 2429//2661
+f 2418//2662 2417//2662 2428//2662 2429//2662
+f 2430//2668 2431//2668 2432//2668 2433//2668
+f 2434//2669 2435//2669 2430//2669 2433//2669 2436//2669
+f 2437//2670 2435//2670 2434//2670 2438//2670
+f 2439//2671 2440//2671 2437//2671 2438//2671
+f 2441//2672 2440//2672 2439//2672 2442//2672 2443//2672
+f 2431//2673 2441//2673 2443//2673 2432//2673
+f 2444//2628 2445//2628 2446//2628 2447//2628 2448//2628 2449//2628
+f 2450//2674 2451//2674 2452//2674 2453//2674 2454//2674 2445//2674 2444//2674 2455//2674
+f 2453//2629 2452//2629 2456//2629 2457//2629 2458//2629 2459//2629
+f 2460//2630 2458//2630 2457//2630 2461//2630 2462//2630
+f 2463//2631 2464//2631 2462//2631 2461//2631 2465//2631 2466//2631 2467//2631
+f 2463//2632 2467//2632 2468//2632
+f 2469//2633 2470//2633 2471//2633 2472//2633
+f 2473//2634 2474//2634 2470//2634 2469//2634
+f 2474//2635 2473//2635 2475//2635 2476//2635 2477//2635
+f 2478//2636 2477//2636 2476//2636 2479//2636
+f 2480//2637 2478//2637 2479//2637 2481//2637 2482//2637
+f 2483//2638 2472//2638 2471//2638 2480//2638 2482//2638 2484//2638
+f 2485//2639 2486//2639 2487//2639 2488//2639 2489//2639 2490//2639 2491//2639
+f 2492//2640 2493//2640 2494//2640 2491//2640 2490//2640 2495//2640
+f 2496//2676 2497//2676 2498//2676 2499//2676 2500//2676 2501//2676 2494//2676 2493//2676
+f 2502//2642 2503//2642 2497//2642 2496//2642 2504//2642
+f 2500//2642 2499//2642 2505//2642 2506//2642 2507//2642
+f 2508//2643 2502//2643 2504//2643 2509//2643
+f 2510//2643 2507//2643 2506//2643 2511//2643 2512//2643
+f 2486//2644 2510//2644 2512//2644 2513//2644 2487//2644
+f 2514//2677 2515//2677 2516//2677 2517//2677
+f 2518//2646 2515//2646 2514//2646 2519//2646
+f 2520//2647 2518//2647 2519//2647 2521//2647
+f 2252//2648 2520//2648 2521//2648 2253//2648
+f 2517//2650 2516//2650 2247//2650 2246//2650
+f 2522//2651 2523//2651 2524//2651 2525//2651
+f 2526//2652 2527//2652 2523//2652 2522//2652 2528//2652
+f 2529//2653 2530//2653 2527//2653 2526//2653 2531//2653
+f 2532//2654 2533//2654 2529//2654 2531//2654 2534//2654 2535//2654
+f 2536//2655 2532//2655 2535//2655 2537//2655
+f 2524//2656 2536//2656 2537//2656 2525//2656
+f 2538//2663 2539//2663 2540//2663 2541//2663 2542//2663
+f 2543//2664 2544//2664 2539//2664 2538//2664 2545//2664
+f 2546//2665 2543//2665 2545//2665 2547//2665
+f 2548//2666 2549//2666 2550//2666 2546//2666 2547//2666 2551//2666
+f 2552//2678 2553//2678 2554//2678 2555//2678 2548//2678 2551//2678
+f 2542//2667 2541//2667 2556//2667 2553//2667 2552//2667
+f 2557//2668 2558//2668 2559//2668 2560//2668
+f 2561//2669 2562//2669 2563//2669 2564//2669 2565//2669 2566//2669 2557//2669 2560//2669
+f 2567//2670 2564//2670 2563//2670 2568//2670 2569//2670
+f 2570//2671 2571//2671 2567//2671 2569//2671 2572//2671
+f 2573//2672 2570//2672 2572//2672 2574//2672 2575//2672
+f 2558//2673 2576//2673 2573//2673 2575//2673 2559//2673
+f 2577//2628 2578//2628 2579//2628 2580//2628 2581//2628 2582//2628
+f 2583//2674 2577//2674 2582//2674 2584//2674 2585//2674 2586//2674 2587//2674
+f 2588//2629 2589//2629 2583//2629 2587//2629 2590//2629
+f 2591//2630 2588//2630 2590//2630 2592//2630 2593//2630
+f 2594//2631 2595//2631 2591//2631 2593//2631 2596//2631 2597//2631
+f 2578//2632 2594//2632 2597//2632 2598//2632 2579//2632
+f 2599//2633 2600//2633 2601//2633 2602//2633 2603//2633
+f 2604//2634 2605//2634 2600//2634 2599//2634
+f 2606//2635 2607//2635 2605//2635 2604//2635 2608//2635
+f 2609//2636 2606//2636 2608//2636 2610//2636
+f 2611//2637 2609//2637 2610//2637 2612//2637
+f 2602//2638 2601//2638 2613//2638 2611//2638 2612//2638 2614//2638
+f 2615//2639 2123//2639 2122//2639 2616//2639 2617//2639 2618//2639 2619//2639
+f 2620//2640 2621//2640 2622//2640 2623//2640 2619//2640 2618//2640 2624//2640
+f 2625//2641 2626//2641 2621//2641 2620//2641
+f 2627//2642 2628//2642 2626//2642 2625//2642
+f 2629//2643 2628//2643 2627//2643 2630//2643
+f 2616//2644 2122//2644 2125//2644 2128//2644 2629//2644 2630//2644
+f 2631//2645 2632//2645 2633//2645 2634//2645 2635//2645
+f 2636//2646 2637//2646 2638//2646 2632//2646 2631//2646 2639//2646
+f 2640//2647 2637//2647 2636//2647 2641//2647 2642//2647
+f 2643//2648 2640//2648 2642//2648 2644//2648
+f 2645//2649 2646//2649 2643//2649 2644//2649 2647//2649
+f 2648//2679 2646//2679 2645//2679 2649//2679
+f 2650//2651 2651//2651 2652//2651 2653//2651 2654//2651
+f 2655//2652 2656//2652 2651//2652 2650//2652
+f 2657//2653 2656//2653 2655//2653 2658//2653
+f 2659//2654 2660//2654 2661//2654 2657//2654 2658//2654
+f 2662//2655 2663//2655 2660//2655 2659//2655
+f 2654//2656 2653//2656 2663//2656 2662//2656
+f 2664//2657 2665//2657 2666//2657 2667//2657 2668//2657
+f 2669//2658 2670//2658 2665//2658 2664//2658 2671//2658
+f 2672//2659 2673//2659 2674//2659 2669//2659 2671//2659 2675//2659
+f 2676//2660 2677//2660 2673//2660 2672//2660
+f 2678//2661 2679//2661 2677//2661 2676//2661 2680//2661
+f 2668//2662 2667//2662 2681//2662 2678//2662 2680//2662 2682//2662
+f 2683//2668 2684//2668 2685//2668 2686//2668
+f 2687//2669 2688//2669 2689//2669 2683//2669 2686//2669
+f 2690//2670 2691//2670 2692//2670 2688//2670 2687//2670
+f 2693//2671 2694//2671 2691//2671 2690//2671
+f 2695//2672 2696//2672 2694//2672 2693//2672
+f 2697//2628 2698//2628 2699//2628
+f 2231//2629 2230//2629 2700//2629 2701//2629
+f 2225//2630 2224//2630 2231//2630 2701//2630 2702//2630
+f 2703//2631 2704//2631 2226//2631 2225//2631 2702//2631
+f 2703//2632 2705//2632 2704//2632
+f 2706//2633 2707//2633 2708//2633 2709//2633 2710//2633 2711//2633
+f 2712//2634 2707//2634 2706//2634 2713//2634 2714//2634
+f 2710//2680 2709//2680 2715//2680 2716//2680
+f 2717//2639 2718//2639 2719//2639 2720//2639 2721//2639
+f 2722//2640 2723//2640 2724//2640 2718//2640 2717//2640
+f 2725//2641 2726//2641 2723//2641 2722//2641
+f 2727//2642 2728//2642 2729//2642 2730//2642 2731//2642 2726//2642 2725//2642 2732//2642
+f 2727//2681 2732//2681 2733//2681
+f 2734//2643 2731//2643 2730//2643 2735//2643 2736//2643
+f 2737//2644 2734//2644 2736//2644 2738//2644 2721//2644 2720//2644 2739//2644
+f 2740//2645 2741//2645 2742//2645 2743//2645 2744//2645
+f 2745//2646 2746//2646 2747//2646 2741//2646 2740//2646
+f 2748//2647 2749//2647 2746//2647 2745//2647 2750//2647
+f 2751//2648 2748//2648 2750//2648 2752//2648 2753//2648
+f 2754//2649 2755//2649 2756//2649 2757//2649 2751//2649 2753//2649
+f 2743//2650 2742//2650 2755//2650 2754//2650
+f 2758//2651 2759//2651 2760//2651 2761//2651 2762//2651
+f 2291//2652 2290//2652 2759//2652 2758//2652 2302//2652
+f 2763//2654 2764//2654 2765//2654 2766//2654
+f 2767//2655 2768//2655 2769//2655 2764//2655 2763//2655
+f 2761//2656 2768//2656 2767//2656 2762//2656
+f 2770//2657 2771//2657 2772//2657 2773//2657 2774//2657 2775//2657 2776//2657 2777//2657
+f 2778//2658 2779//2658 2780//2658 2771//2658 2770//2658 2781//2658
+f 2775//2658 2774//2658 2782//2658 2783//2658 2784//2658
+f 2785//2659 2786//2659 2787//2659 2779//2659 2778//2659
+f 2788//2659 2784//2659 2783//2659 2789//2659 2790//2659 2791//2659
+f 2792//2660 2793//2660 2794//2660 2787//2660 2786//2660 2795//2660
+f 2791//2660 2790//2660 2796//2660
+f 2797//2661 2798//2661 2799//2661 2800//2661 2793//2661 2792//2661
+f 2776//2662 2801//2662 2802//2662 2799//2662 2798//2662 2777//2662
+f 2803//2663 2804//2663 2805//2663 2806//2663
+f 2807//2664 2808//2664 2803//2664 2806//2664 2809//2664 2810//2664 2811//2664
+f 2812//2682 2813//2682 2807//2682 2811//2682 2814//2682 2815//2682
+f 2816//2666 2817//2666 2818//2666 2819//2666 2812//2666 2815//2666
+f 2819//2678 2818//2678 2820//2678 2821//2678
+f 2822//2678 2823//2678 2824//2678
+f 2804//2675 2824//2675 2823//2675 2825//2675 2826//2675 2805//2675
+f 2827//2668 2828//2668 2829//2668 2830//2668 2831//2668 2832//2668 2833//2668 2834//2668
+f 2835//2669 2836//2669 2837//2669 2827//2669 2834//2669
+f 2838//2670 2839//2670 2840//2670 2836//2670 2835//2670
+f 2841//2671 2842//2671 2843//2671 2839//2671 2838//2671
+f 2844//2672 2845//2672 2846//2672 2847//2672 2842//2672 2841//2672 2848//2672
+f 2849//2673 2832//2673 2831//2673 2850//2673 2845//2673 2844//2673 2851//2673
+f 2736//2628 2735//2628 2852//2628 2853//2628 2854//2628 2855//2628 2738//2628
+f 2856//2674 2852//2674 2735//2674 2730//2674 2729//2674
+f 2729//2629 2728//2629 2857//2629 2858//2629 2856//2629
+f 2859//2630 2860//2630 2857//2630 2728//2630 2727//2630 2733//2630
+f 2861//2631 2862//2631 2860//2631 2859//2631
+f 2855//2632 2854//2632 2862//2632 2861//2632
+f 2863//2633 2864//2633 2865//2633 2866//2633 2867//2633
+f 2868//2634 2869//2634 2870//2634 2864//2634 2863//2634
+f 2871//2635 2872//2635 2873//2635 2874//2635 2875//2635 2876//2635 2869//2635 2868//2635
+f 2877//2636 2875//2636 2874//2636 2878//2636 2879//2636 2880//2636
+f 2881//2637 2882//2637 2883//2637 2884//2637
+f 2879//2637 2878//2637 2885//2637 2886//2637
+f 2887//2638 2886//2638 2885//2638 2888//2638 2889//2638 2890//2638 2882//2638 2881//2638 2867//2638 2866//2638
+f 2891//2639 2405//2639 2404//2639 2892//2639 2893//2639 2894//2639
+f 2895//2640 2896//2640 2897//2640 2894//2640 2893//2640 2898//2640 2899//2640
+f 2900//2641 2901//2641 2902//2641 2899//2641 2898//2641 2903//2641
+f 2904//2642 2905//2642 2906//2642 2900//2642 2903//2642
+f 2907//2643 2905//2643 2904//2643 2908//2643
+f 2892//2644 2404//2644 2403//2644 2409//2644 2907//2644 2908//2644
+f 2909//2645 2910//2645 2911//2645 2912//2645 2913//2645
+f 2914//2646 2915//2646 2916//2646 2910//2646 2909//2646
+f 2917//2647 2918//2647 2915//2647 2914//2647 2919//2647
+f 2920//2648 2921//2648 2922//2648 2917//2648 2919//2648 2923//2648
+f 2924//2649 2925//2649 2926//2649 2920//2649 2923//2649
+f 2927//2651 2928//2651 2929//2651 2930//2651 2931//2651
+f 2932//2652 2933//2652 2928//2652 2927//2652
+f 2934//2653 2935//2653 2936//2653 2933//2653 2932//2653 2937//2653
+f 2938//2654 2939//2654 2935//2654 2934//2654 2940//2654
+f 2941//2655 2939//2655 2938//2655 2942//2655
+f 2930//2656 2941//2656 2942//2656 2931//2656
+f 2943//2657 2944//2657 2945//2657 2946//2657 2947//2657 2948//2657
+f 2949//2658 2950//2658 2951//2658 2944//2658 2943//2658 2952//2658
+f 2953//2659 2954//2659 2955//2659 2950//2659 2949//2659 2956//2659 2957//2659
+f 2958//2660 2959//2660 2960//2660 2953//2660 2957//2660
+f 2961//2661 2959//2661 2958//2661 2962//2661 2963//2661
+f 2946//2662 2964//2662 2961//2662 2963//2662 2947//2662
+f 2965//2683 2966//2683 2967//2683
+f 2968//2663 2969//2663 2970//2663 2971//2663 2972//2663 2973//2663 2974//2663
+f 2109//2664 2975//2664 2965//2664 2967//2664 2110//2664
+f 2976//2664 2977//2664 2974//2664 2973//2664 2978//2664 2979//2664
+f 2980//2665 2976//2665 2979//2665 2981//2665 2105//2665 2104//2665 2982//2665
+f 2983//2666 2984//2666 2985//2666 2980//2666 2982//2666
+f 2986//2678 2987//2678 2988//2678 2989//2678 2984//2678 2983//2678 2990//2678
+f 2988//2675 2991//2675 2971//2675 2970//2675 2992//2675 2989//2675
+f 2993//2668 2994//2668 2995//2668 2996//2668 2997//2668 2998//2668
+f 2999//2669 3000//2669 2993//2669 2998//2669 3001//2669
+f 3002//2670 3003//2670 3000//2670 2999//2670 3004//2670
+f 3005//2671 3002//2671 3004//2671 3006//2671
+f 3007//2672 3008//2672 3009//2672 3010//2672 3005//2672 3006//2672 3011//2672 3012//2672
+f 2995//2673 3013//2673 3008//2673 3007//2673 2996//2673
+f 3014//2628 3015//2628 3016//2628 3017//2628 3018//2628
+f 3019//2674 3016//2674 3015//2674 3020//2674
+f 3021//2629 3022//2629 3019//2629 3020//2629 3023//2629
+f 3024//2630 3025//2630 3026//2630 3021//2630 3023//2630
+f 3027//2631 3028//2631 3029//2631 3025//2631 3024//2631 3030//2631 3031//2631
+f 3017//2632 3027//2632 3031//2632 3018//2632
+f 3032//2633 3033//2633 3034//2633 3035//2633 3036//2633
+f 3037//2634 3038//2634 3033//2634 3032//2634 3039//2634
+f 3039//2635 3040//2635 3037//2635
+f 3041//2636 3042//2636 3043//2636 3044//2636
+f 3045//2637 3046//2637 3047//2637 3042//2637 3041//2637 3048//2637
+f 3049//2638 3050//2638 3035//2638 3034//2638 3045//2638 3048//2638
+f 3051//2639 3052//2639 3053//2639 3054//2639
+f 3055//2640 3056//2640 3057//2640 3051//2640 3054//2640
+f 3056//2641 3055//2641 3058//2641 3059//2641
+f 3060//2684 3061//2684 3062//2684 3059//2684 3058//2684
+f 3063//2643 3064//2643 3061//2643 3060//2643
+f 3053//2644 3052//2644 3064//2644 3063//2644
+f 3065//2645 3066//2645 3067//2645 3068//2645 3069//2645 3070//2645
+f 3071//2646 3065//2646 3070//2646 3072//2646
+f 3073//2647 3074//2647 3071//2647 3072//2647 3075//2647
+f 3076//2648 3073//2648 3075//2648 3077//2648
+f 3078//2649 3079//2649 3080//2649 3081//2649 3076//2649 3077//2649 3082//2649
+f 3068//2650 3067//2650 3083//2650 3079//2650 3078//2650
+f 3084//2651 3085//2651 3086//2651 3087//2651
+f 3088//2652 3089//2652 3090//2652 3085//2652 3084//2652 3091//2652 3092//2652
+f 2035//2653 2034//2653 3088//2653 3092//2653
+f 2049//2654 2051//2654 3093//2654 3094//2654 3095//2654 2050//2654
+f 3096//2655 3097//2655 3094//2655 3093//2655 3098//2655 3099//2655
+f 3086//2656 3096//2656 3099//2656 3087//2656
+f 3100//2657 3101//2657 3102//2657 3103//2657 3104//2657
+f 3105//2659 3106//2659 3107//2659
+f 3108//2660 3109//2660 3110//2660 3106//2660 3105//2660
+f 3111//2661 3112//2661 3113//2661 3109//2661 3108//2661 3114//2661
+f 3102//2662 3101//2662 3115//2662 3112//2662 3111//2662
+f 3116//2663 3117//2663 3118//2663 3119//2663 3120//2663
+f 3121//2664 3116//2664 3120//2664 3122//2664 3123//2664
+f 3124//2665 3125//2665 3126//2665 3121//2665 3123//2665 3127//2665
+f 3128//2666 3129//2666 3125//2666 3124//2666
+f 3130//2678 3131//2678 3132//2678 3133//2678 3129//2678 3128//2678
+f 3118//2667 3134//2667 3131//2667 3130//2667 3119//2667
+f 3135//2668 3136//2668 3137//2668 3138//2668 3139//2668
+f 3140//2669 3141//2669 3142//2669 3135//2669 3139//2669 3143//2669
+f 3144//2670 3145//2670 3146//2670 3147//2670 3141//2670 3140//2670 3148//2670
+f 3149//2671 3150//2671 3145//2671 3144//2671 3151//2671
+f 3152//2672 3153//2672 3150//2672 3149//2672
+f 3137//2673 3136//2673 3154//2673 3153//2673 3152//2673 3155//2673
+f 3156//2628 3157//2628 3158//2628 3159//2628
+f 3160//2674 3156//2674 3159//2674 3161//2674
+f 3162//2629 3163//2629 3160//2629 3161//2629 3164//2629
+f 3165//2630 3166//2630 3167//2630 3162//2630 3164//2630
+f 3168//2631 3169//2631 3170//2631 3166//2631 3165//2631 3171//2631 3172//2631
+f 3157//2632 3168//2632 3172//2632 3173//2632 3158//2632
+f 3174//2633 3175//2633 3176//2633 3177//2633 3178//2633
+f 2635//2634 2634//2634 3175//2634 3174//2634 3179//2634
+f 3180//2637 3181//2637 2648//2637 2649//2637 3182//2637
+f 3178//2638 3177//2638 3180//2638 3182//2638
+f 3183//2639 3184//2639 3185//2639 3186//2639
+f 3187//2640 3188//2640 3189//2640 3183//2640 3186//2640
+f 3190//2641 3191//2641 3188//2641 3187//2641 3192//2641
+f 3193//2642 3194//2642 3191//2642 3190//2642
+f 3195//2643 3196//2643 3197//2643 3194//2643 3193//2643
+f 3184//2644 3196//2644 3195//2644 3198//2644 3185//2644
+f 3199//2645 3200//2645 3201//2645
+f 3202//2646 3203//2646 3204//2646 3200//2646 3199//2646 3205//2646
+f 3206//2647 3207//2647 3203//2647 3202//2647 3208//2647
+f 3209//2648 3206//2648 3208//2648 3210//2648
+f 3211//2649 3212//2649 3213//2649 3209//2649 3210//2649 3214//2649
+f 3212//2650 3211//2650 3215//2650
+f 3216//2651 3217//2651 3218//2651 3219//2651 3220//2651
+f 3221//2652 3217//2652 3216//2652 3222//2652
+f 3223//2653 3224//2653 3225//2653 3221//2653 3222//2653 3226//2653
+f 3227//2654 3228//2654 3223//2654 3226//2654 3229//2654
+f 3230//2655 3231//2655 3227//2655 3229//2655 3232//2655 3233//2655 3234//2655 3235//2655
+f 3218//2656 3236//2656 3234//2656 3233//2656 3219//2656
+f 3237//2657 3238//2657 3239//2657 3240//2657
+f 3241//2659 3242//2659 3243//2659
+f 3244//2660 3245//2660 3246//2660 3242//2660 3241//2660 3247//2660
+f 3248//2661 3245//2661 3244//2661 3249//2661
+f 3240//2662 3239//2662 3248//2662 3249//2662 3250//2662
+f 3251//2663 3252//2663 3253//2663 3254//2663 3255//2663
+f 3256//2664 3257//2664 3258//2664 3251//2664 3255//2664 3259//2664
+f 3260//2665 2229//2665 2235//2665 3257//2665 3256//2665
+f 2230//2666 2229//2666 3260//2666 2700//2666
+f 3254//2667 3253//2667 3261//2667 2697//2667 2699//2667
+f 3262//2668 3263//2668 3264//2668 3265//2668
+f 3266//2669 3267//2669 3268//2669 3262//2669 3265//2669 3269//2669
+f 3035//2670 3050//2670 3270//2670 3271//2670 3267//2670 3266//2670 3036//2670
+f 3272//2671 3273//2671 3270//2671 3050//2671 3049//2671 3274//2671
+f 3275//2672 3276//2672 3272//2672 3274//2672 3277//2672
+f 3278//2628 3279//2628 3280//2628 3281//2628
+f 3282//2629 3283//2629 3284//2629 3285//2629
+f 3286//2630 3287//2630 3283//2630 3282//2630 3288//2630
+f 3289//2631 3290//2631 3291//2631 3287//2631 3286//2631
+f 3279//2632 3292//2632 3290//2632 3289//2632 3280//2632
+f 3293//2633 3294//2633 3295//2633 3296//2633 3297//2633 3298//2633
+f 3299//2634 3300//2634 3301//2634 3294//2634 3293//2634 3302//2634
+f 3303//2635 3300//2635 3299//2635 3304//2635
+f 3305//2636 3306//2636 3303//2636 3304//2636 3307//2636 3308//2636
+f 3308//2685 3309//2685 3305//2685
+f 3310//2637 3311//2637 3312//2637
+f 3296//2638 3313//2638 3314//2638 3310//2638 3312//2638 3315//2638 3297//2638
+f 3316//2639 3317//2639 3318//2639 3319//2639 3320//2639
+f 3321//2640 3322//2640 3318//2640 3317//2640
+f 3323//2641 3324//2641 3322//2641 3321//2641
+f 3325//2642 3326//2642 3324//2642 3323//2642
+f 3327//2643 3328//2643 3329//2643 3326//2643 3325//2643 3330//2643
+f 3320//2644 3319//2644 3331//2644 3328//2644 3327//2644
+f 3332//2645 3333//2645 3334//2645 3335//2645
+f 3336//2646 3333//2646 3332//2646 3337//2646
+f 3338//2647 3336//2647 3337//2647 3339//2647
+f 3340//2648 3341//2648 3338//2648 3339//2648 3342//2648
+f 3343//2649 3344//2649 3340//2649 3342//2649
+f 3345//2650 3344//2650 3343//2650 3346//2650
+f 3347//2651 3348//2651 3349//2651 3350//2651
+f 3351//2652 3348//2652 3347//2652 3352//2652
+f 3353//2653 3354//2653 3355//2653 3356//2653 3357//2653 3351//2653 3352//2653
+f 3358//2654 3359//2654 3360//2654 3354//2654 3353//2654
+f 3361//2655 3362//2655 3359//2655 3358//2655 3363//2655
+f 3349//2656 3361//2656 3363//2656 3350//2656
+f 3364//2657 3365//2657 3366//2657 3367//2657 2451//2657 2450//2657
+f 3365//2658 3364//2658 3368//2658
+f 3369//2659 3370//2659 3371//2659 3372//2659 3373//2659 3374//2659 3375//2659
+f 3376//2660 3377//2660 3378//2660 3371//2660 3370//2660 3379//2660
+f 2465//2661 2461//2661 2457//2661 2456//2661 3380//2661 3377//2661 3376//2661 3381//2661 3382//2661
+f 2465//2662 3382//2662 2466//2662
+f 3367//2662 3380//2662 2456//2662 2452//2662 2451//2662
+f 3383//2663 3384//2663 3385//2663 3386//2663 3387//2663
+f 3388//2664 3383//2664 3387//2664 3389//2664
+f 3390//2665 3391//2665 3392//2665 3388//2665 3389//2665
+f 3393//2666 3394//2666 3395//2666 3391//2666 3390//2666
+f 3396//2678 3397//2678 3398//2678 3399//2678 3394//2678 3393//2678
+f 3386//2667 3385//2667 3400//2667 3397//2667 3396//2667
+f 3401//2668 2870//2668 2869//2668 2876//2668 3402//2668 3403//2668 3404//2668 3405//2668
+f 3401//2669 3405//2669 3406//2669 3407//2669
+f 3408//2670 3409//2670 3407//2670 3406//2670
+f 3409//2671 3408//2671 3410//2671 3411//2671
+f 3412//2686 3410//2686 3408//2686 3406//2686 3405//2686 3404//2686
+f 3413//2672 2877//2672 2880//2672 3411//2672 3410//2672 3412//2672 3414//2672
+f 2876//2673 2875//2673 2877//2673 3413//2673 3402//2673
+f 2897//2629 2896//2629 3415//2629 3416//2629
+f 3417//2630 2891//2630 2894//2630 2897//2630 3416//2630
+f 3418//2631 2406//2631 2405//2631 2891//2631 3417//2631
+f 3418//2632 3419//2632 2407//2632 2406//2632
+f 3420//2633 3421//2633 3422//2633 3423//2633
+f 3424//2634 3425//2634 3421//2634 3420//2634 3426//2634
+f 3427//2635 3425//2635 3424//2635 3428//2635
+f 2422//2636 2421//2636 3427//2636 3428//2636 3429//2636
+f 2419//2637 2420//2637 3430//2637
+f 2423//2687 2422//2687 3429//2687
+f 3431//2638 3423//2638 3422//2638 2416//2638 2415//2638 2419//2638 3430//2638
+f 3432//2639 3433//2639 3434//2639 3435//2639 3436//2639 3437//2639 3438//2639 3439//2639 3440//2639
+f 3441//2640 3442//2640 3433//2640 3432//2640
+f 3443//2641 3444//2641 3445//2641 3442//2641 3441//2641
+f 3446//2684 3447//2684 3444//2684 3443//2684
+f 3448//2643 3449//2643 3447//2643 3446//2643 3450//2643
+f 3438//2644 3448//2644 3450//2644 3451//2644 3439//2644
+f 3452//2645 3453//2645 3454//2645 3455//2645 3456//2645
+f 3457//2646 3453//2646 3452//2646 3458//2646 3459//2646
+f 3460//2647 3461//2647 3457//2647 3459//2647 3462//2647
+f 3463//2648 3460//2648 3462//2648 3464//2648
+f 3465//2649 3466//2649 3467//2649 3463//2649 3464//2649 3468//2649
+f 3456//2650 3455//2650 3469//2650 3466//2650 3465//2650
+f 3470//2651 3471//2651 3472//2651 3473//2651 3474//2651 3475//2651
+f 2447//2652 2446//2652 3471//2652 3470//2652 3476//2652
+f 3477//2653 2448//2653 2447//2653 3476//2653
+f 3478//2654 2464//2654 2463//2654 2468//2654 3479//2654 3480//2654
+f 3481//2655 3482//2655 3480//2655 3479//2655 3483//2655 3484//2655
+f 3473//2656 3484//2656 3483//2656 3474//2656
+f 3485//2657 3486//2657 3487//2657 3488//2657
+f 3489//2658 3013//2658 2995//2658 2994//2658 3485//2658 3488//2658
+f 3490//2659 3009//2659 3008//2659 3013//2659 3489//2659
+f 3491//2660 3492//2660 3010//2660 3009//2660 3490//2660
+f 3493//2661 3494//2661 3492//2661 3491//2661 3495//2661
+f 3486//2662 3493//2662 3495//2662 3487//2662
+f 3496//2663 3497//2663 3498//2663 3499//2663
+f 3500//2664 3501//2664 3496//2664 3499//2664 3502//2664
+f 3503//2682 3504//2682 3500//2682 3502//2682 3505//2682
+f 3506//2666 3507//2666 3504//2666 3503//2666
+f 3508//2678 3509//2678 3510//2678 3507//2678 3506//2678
+f 3511//2667 3498//2667 3497//2667 3509//2667 3508//2667
+f 3512//2668 3513//2668 3514//2668 3515//2668 3516//2668
+f 3517//2669 3518//2669 3512//2669 3516//2669 3519//2669
+f 3520//2670 3521//2670 3518//2670 3517//2670 3522//2670
+f 3523//2671 3524//2671 3520//2671 3522//2671
+f 3525//2672 3526//2672 3527//2672 3528//2672 3524//2672 3523//2672
+f 3515//2673 3514//2673 3529//2673 3526//2673 3525//2673 3530//2673
+f 3531//2628 3532//2628 3533//2628 3534//2628
+f 3535//2629 3536//2629 3537//2629 3538//2629
+f 3539//2630 3540//2630 3541//2630 3535//2630 3538//2630
+f 3542//2631 3543//2631 3540//2631 3539//2631
+f 3533//2632 3544//2632 3543//2632 3542//2632 3545//2632 3534//2632
+f 3546//2633 3547//2633 3548//2633 3549//2633
+f 3550//2634 3551//2634 3552//2634 3547//2634 3546//2634 3553//2634
+f 3554//2635 3555//2635 3551//2635 3550//2635 3556//2635 3557//2635
+f 3558//2636 3559//2636 3560//2636 3554//2636 3557//2636 3561//2636
+f 3562//2637 3563//2637 3558//2637 3561//2637 3564//2637
+f 3549//2638 3548//2638 3565//2638 3562//2638 3564//2638
+f 3566//2639 2041//2639 2044//2639 2050//2639 3095//2639 3567//2639
+f 3568//2640 2039//2640 2038//2640 2041//2640 3566//2640 3569//2640 3570//2640 3571//2640
+f 2395//2641 3572//2641 3573//2641 3570//2641 3569//2641 3574//2641 2396//2641
+f 3572//2642 2395//2642 2392//2642 2391//2642 3575//2642
+f 3576//2643 3575//2643 2391//2643 2390//2643 2412//2643 3577//2643 3578//2643
+f 3567//2644 3095//2644 3094//2644 3097//2644 3578//2644 3577//2644
+f 3579//2688 3580//2688 3581//2688 3582//2688
+f 3583//2646 3580//2646 3579//2646 3584//2646 3585//2646
+f 3586//2647 3583//2647 3585//2647 3587//2647
+f 3588//2648 3586//2648 3587//2648 3589//2648
+f 3106//2649 3110//2649 3588//2649 3589//2649 3107//2649
+f 3590//2651 3591//2651 3592//2651 3593//2651
+f 3594//2652 3134//2652 3118//2652 3117//2652 3591//2652 3590//2652
+f 3132//2653 3131//2653 3134//2653 3594//2653 3595//2653
+f 3596//2654 3133//2654 3132//2654 3595//2654 3597//2654
+f 3598//2655 3599//2655 3596//2655 3597//2655 3600//2655
+f 3592//2656 3598//2656 3600//2656 3593//2656
+f 3601//2657 3602//2657 3603//2657 3604//2657
+f 2965//2658 2975//2658 2108//2658 2094//2658 2093//2658 3601//2658 3604//2658 2966//2658
+f 2975//2659 2109//2659 2108//2659
+f 2981//2689 2106//2689 2105//2689
+f 3605//2660 2987//2660 2986//2660
+f 2107//2660 2106//2660 2981//2660 2979//2660 2978//2660 3606//2660
+f 2991//2690 2988//2690 2987//2690 3605//2690 3607//2690
+f 3608//2690 3606//2690 2978//2690 2973//2690 2972//2690 3609//2690
+f 3602//2662 3609//2662 2972//2662 2971//2662 2991//2662 3607//2662 3603//2662
+f 3610//2663 3611//2663 3612//2663 2118//2663 2117//2663 3613//2663
+f 3614//2664 3615//2664 3612//2664 3611//2664 3616//2664 3617//2664
+f 3618//2665 2623//2665 2622//2665 3614//2665 3617//2665 3619//2665 3620//2665
+f 3621//2666 2615//2666 2619//2666 2623//2666 3618//2666
+f 3622//2678 2120//2678 2119//2678 2123//2678 2615//2678 3621//2678
+f 2117//2667 2116//2667 2120//2667 3622//2667 3613//2667
+f 3623//2668 3624//2668 3625//2668 3626//2668 3627//2668
+f 3628//2669 3629//2669 3630//2669 3623//2669 3627//2669 3631//2669 3632//2669
+f 3633//2670 3634//2670 3628//2670 3632//2670 3635//2670
+f 3636//2671 3637//2671 3633//2671 3635//2671 3638//2671
+f 3639//2672 3636//2672 3638//2672 3640//2672 3641//2672
+f 3625//2673 3642//2673 3639//2673 3641//2673 3626//2673
+f 2163//2628 2162//2628 3643//2628
+f 3644//2629 3645//2629 2160//2629 2159//2629
+f 3646//2630 3647//2630 3645//2630 3644//2630
+f 3648//2631 3649//2631 3650//2631 3651//2631 3652//2631 3653//2631 3647//2631 3646//2631 3654//2631
+f 3648//2632 3655//2632 3649//2632
+f 3651//2691 3656//2691 3652//2691
+f 3657//2633 3658//2633 3659//2633 3660//2633
+f 3661//2634 3662//2634 3658//2634 3657//2634
+f 3201//2692 3200//2692 3204//2692 3662//2692 3661//2692
+f 3663//2636 3213//2636 3212//2636 3215//2636 3664//2636
+f 3665//2637 3666//2637 3663//2637 3664//2637 3667//2637
+f 3660//2638 3659//2638 3665//2638 3667//2638
+f 3224//2639 3223//2639 3228//2639 3668//2639 3669//2639 3670//2639
+f 3671//2640 3672//2640 3225//2640 3224//2640 3670//2640
+f 3673//2641 3674//2641 3675//2641 3672//2641 3671//2641 3676//2641
+f 3677//2642 3678//2642 3674//2642 3673//2642
+f 3679//2643 3680//2643 3681//2643 3678//2643 3677//2643
+f 3668//2644 3228//2644 3227//2644 3231//2644 3680//2644 3679//2644
+f 3682//2693 3683//2693 3684//2693 3685//2693 3686//2693
+f 3682//2646 3686//2646 3687//2646 2685//2646 2684//2646
+f 3688//2648 2696//2648 2695//2648 3689//2648
+f 3242//2649 3246//2649 3688//2649 3689//2649 3690//2649 3243//2649
+f 3691//2651 3692//2651 3693//2651 3694//2651
+f 3261//2652 3253//2652 3252//2652 3692//2652 3691//2652 3695//2652
+f 2697//2653 3261//2653 3695//2653 2698//2653
+f 3696//2654 2244//2654 2227//2654 2226//2654 2704//2654 2705//2654
+f 3697//2655 2245//2655 2244//2655 3696//2655 3698//2655 3699//2655
+f 3693//2656 3697//2656 3699//2656 3694//2656
+f 2716//2657 2715//2657 3700//2657 3701//2657
+f 3702//2694 3703//2694 3704//2694
+f 3705//2660 3706//2660 3707//2660 3703//2660 3702//2660
+f 3708//2661 3709//2661 3710//2661 3706//2661 3705//2661
+f 3701//2662 3700//2662 3711//2662 3709//2662 3708//2662
+f 3712//2663 3713//2663 3714//2663 3715//2663 3716//2663 3717//2663
+f 3718//2664 3715//2664 3714//2664 3719//2664
+f 3720//2665 3721//2665 3718//2665 3719//2665
+f 3285//2666 3284//2666 3721//2666 3720//2666
+f 3717//2667 3722//2667 3278//2667 3281//2667 3712//2667
+f 2872//2695 2871//2695 3723//2695
+f 3724//2668 2890//2668 2889//2668 3725//2668
+f 3726//2669 2873//2669 2872//2669 3723//2669 3727//2669
+f 3725//2669 2889//2669 2888//2669 3728//2669
+f 3728//2670 2888//2670 2885//2670 2878//2670 2874//2670 2873//2670 3726//2670 3729//2670 3730//2670 3731//2670 3732//2670
+f 3733//2671 3734//2671 3735//2671 3731//2671 3730//2671 3736//2671
+f 3737//2672 3738//2672 3734//2672 3733//2672 3739//2672
+f 2882//2673 2890//2673 3724//2673 3740//2673 3737//2673 3739//2673 2883//2673
+f 3741//2629 3742//2629 2301//2629 2300//2629
+f 3743//2630 3744//2630 3745//2630 3742//2630 3741//2630
+f 2765//2631 3744//2631 3743//2631 2766//2631
+f 3746//2633 3747//2633 3748//2633 3749//2633 3750//2633
+f 3334//2634 3747//2634 3746//2634 3335//2634
+f 3751//2637 3345//2637 3346//2637 3752//2637
+f 3750//2638 3749//2638 3751//2638 3752//2638
+f 3355//2639 3354//2639 3360//2639 3753//2639 3754//2639 3755//2639
+f 3756//2640 3757//2640 3356//2640 3355//2640 3755//2640
+f 3758//2641 3759//2641 3757//2641 3756//2641 3760//2641
+f 3761//2642 3762//2642 3759//2642 3758//2642
+f 3763//2643 3764//2643 3762//2643 3761//2643 3765//2643
+f 3753//2644 3360//2644 3359//2644 3362//2644 3763//2644 3765//2644
+f 3766//2645 3767//2645 3768//2645
+f 2850//2646 2831//2646 2830//2646 3767//2646 3766//2646 3769//2646 3770//2646 3771//2646 3772//2646
+f 2846//2647 2845//2647 2850//2647 3772//2647 3773//2647 3774//2647
+f 3775//2648 2847//2648 2846//2648 3774//2648 3776//2648
+f 3777//2649 3372//2649 3371//2649 3378//2649 3775//2649 3776//2649
+f 3373//2650 3372//2650 3777//2650 3778//2650 3779//2650
+f 3780//2651 3781//2651 3782//2651 3783//2651
+f 3784//2652 3400//2652 3385//2652 3384//2652 3781//2652 3780//2652
+f 3398//2653 3397//2653 3400//2653 3784//2653 3785//2653
+f 3786//2654 3399//2654 3398//2654 3785//2654 3787//2654 3788//2654
+f 3789//2655 3790//2655 3788//2655 3787//2655 3791//2655 3792//2655
+f 3782//2656 3789//2656 3792//2656 3793//2656 3783//2656
+f 3794//2657 3795//2657 3796//2657 3797//2657 3798//2657
+f 3799//2658 3800//2658 3801//2658 3802//2658 3794//2658 3798//2658
+f 3803//2659 3804//2659 3805//2659 3800//2659 3799//2659
+f 3806//2696 3807//2696 3808//2696
+f 3809//2660 3810//2660 3811//2660 3812//2660 3804//2660 3803//2660
+f 3808//2660 3807//2660 3813//2660
+f 3814//2661 3815//2661 3810//2661 3809//2661 3816//2661 3817//2661
+f 3818//2662 3797//2662 3796//2662 3819//2662 3814//2662 3817//2662
+f 3820//2663 2399//2663 2398//2663 3821//2663 3822//2663
+f 3823//2664 3824//2664 3820//2664 3822//2664 3825//2664
+f 3826//2665 2895//2665 2899//2665 2902//2665 3827//2665 3823//2665 3825//2665
+f 2902//2697 2901//2697 3827//2697
+f 2896//2666 2895//2666 3826//2666 3828//2666 3415//2666
+f 2398//2667 2397//2667 3821//2667
+f 3829//2668 3830//2668 3831//2668 3832//2668
+f 3833//2669 3834//2669 3835//2669 3836//2669 3837//2669 3829//2669 3832//2669
+f 3838//2670 3839//2670 3840//2670 3834//2670 3833//2670
+f 3841//2671 3842//2671 3839//2671 3838//2671
+f 3843//2672 3844//2672 3842//2672 3841//2672 3845//2672
+f 3831//2673 3830//2673 3846//2673 3843//2673 3845//2673
+f 3847//2628 3848//2628 3849//2628 3850//2628
+f 3851//2629 3852//2629 3853//2629 3854//2629
+f 3855//2630 3851//2630 3854//2630 3856//2630
+f 3857//2631 3858//2631 3855//2631 3856//2631 3859//2631 3860//2631
+f 3849//2632 3857//2632 3860//2632 3861//2632 3850//2632
+f 3862//2633 3863//2633 3864//2633 3865//2633
+f 3866//2634 3867//2634 3868//2634 3869//2634 3863//2634 3862//2634 3870//2634
+f 3871//2635 3872//2635 3867//2635 3866//2635 3873//2635 3874//2635
+f 2955//2636 2954//2636 3871//2636 3874//2636 3875//2636 3876//2636
+f 2951//2637 2950//2637 2955//2637 3876//2637 3877//2637
+f 3878//2638 2945//2638 2944//2638 2951//2638 3877//2638 3879//2638 3865//2638 3864//2638
+f 3880//2639 2460//2639 2462//2639 2464//2639 3478//2639 3881//2639
+f 3882//2640 3883//2640 2459//2640 2458//2640 2460//2640 3880//2640
+f 3884//2641 3885//2641 3886//2641 3883//2641 3882//2641
+f 3887//2642 3888//2642 3885//2642 3884//2642
+f 3889//2643 3888//2643 3887//2643 3890//2643
+f 3881//2644 3478//2644 3480//2644 3482//2644 3889//2644 3890//2644
+f 3891//2645 3892//2645 3893//2645 3894//2645 3895//2645
+f 3896//2646 3897//2646 3898//2646 3892//2646 3891//2646
+f 3899//2647 3900//2647 3897//2647 3896//2647 3901//2647
+f 3902//2648 3903//2648 3899//2648 3901//2648 3904//2648
+f 3905//2649 3906//2649 3907//2649 3902//2649 3904//2649
+f 3895//2650 3894//2650 3906//2650 3905//2650
+f 3908//2651 3909//2651 3910//2651 3911//2651 3912//2651
+f 3913//2652 3914//2652 3908//2652 3912//2652
+f 3915//2653 2165//2653 2164//2653 2170//2653 2174//2653 3916//2653 3917//2653 3914//2653 3913//2653 3918//2653
+f 3919//2654 2183//2654 2166//2654 2165//2654 3915//2654
+f 2174//2654 2173//2654 3920//2654 3916//2654
+f 3921//2655 2184//2655 2183//2655 3919//2655 3922//2655
+f 3910//2656 3923//2656 3924//2656 3921//2656 3922//2656 3925//2656 3911//2656
+f 3926//2657 3927//2657 3928//2657 3929//2657 3930//2657
+f 3529//2658 3514//2658 3513//2658 3928//2658 3927//2658 3931//2658
+f 3526//2659 3529//2659 3931//2659 3932//2659 3933//2659 3527//2659
+f 3934//2660 3935//2660 3528//2660 3527//2660 3933//2660
+f 3936//2661 3937//2661 3935//2661 3934//2661 3938//2661
+f 3939//2662 3930//2662 3929//2662 3940//2662 3937//2662 3936//2662
+f 3941//2663 3942//2663 3943//2663 3944//2663 3945//2663 3946//2663
+f 3947//2664 3948//2664 3942//2664 3941//2664 3949//2664 3950//2664
+f 3951//2665 3947//2665 3950//2665 3952//2665 3953//2665
+f 3537//2666 3536//2666 3951//2666 3953//2666
+f 3945//2675 3944//2675 3532//2675 3531//2675
+f 3954//2668 3552//2668 3551//2668 3555//2668 3955//2668 3956//2668
+f 3957//2669 3958//2669 3959//2669 3954//2669 3956//2669
+f 3960//2670 3961//2670 3962//2670 3963//2670 3958//2670 3957//2670 3964//2670
+f 3965//2671 3966//2671 3967//2671 3968//2671 3962//2671 3961//2671 3969//2671 3970//2671
+f 3971//2672 3560//2672 3559//2672 3966//2672 3965//2672
+f 3555//2673 3554//2673 3560//2673 3971//2673 3972//2673 3955//2673
+f 3960//2628 3964//2628 3973//2628 3974//2628 3975//2628 3976//2628
+f 3977//2674 3978//2674 3975//2674 3974//2674 3979//2674
+f 3980//2629 3977//2629 3979//2629 3981//2629 3982//2629
+f 3983//2630 3984//2630 3980//2630 3982//2630 3985//2630
+f 3986//2631 3987//2631 3983//2631 3985//2631 3988//2631 3989//2631
+f 3969//2632 3961//2632 3960//2632 3976//2632 3987//2632 3986//2632
+f 3990//2633 3991//2633 3992//2633 3993//2633
+f 3991//2634 3990//2634 3582//2634 3581//2634
+f 3993//2638 3992//2638 3100//2638 3104//2638 3994//2638
+f 3995//2645 3996//2645 3997//2645 3998//2645
+f 3999//2646 4000//2646 3996//2646 3995//2646
+f 4001//2647 4000//2647 3999//2647 4002//2647
+f 4003//2648 4004//2648 4005//2648 4001//2648 4002//2648
+f 4006//2649 4007//2649 4005//2649 4004//2649
+f 4008//2650 3998//2650 3997//2650 4007//2650 4006//2650
+f 4009//2663 4010//2663 4011//2663 4012//2663 4013//2663
+f 4014//2664 4015//2664 4011//2664 4010//2664 4016//2664
+f 4017//2665 4018//2665 4014//2665 4016//2665 4019//2665
+f 4020//2666 4021//2666 4022//2666 4018//2666 4017//2666
+f 4023//2678 4024//2678 4021//2678 4020//2678 4025//2678 4026//2678
+f 4012//2667 4026//2667 4025//2667 4013//2667
+f 4027//2668 4028//2668 4029//2668 4030//2668 4031//2668
+f 4032//2669 4033//2669 4027//2669 4031//2669
+f 4034//2670 4035//2670 4033//2670 4032//2670 4036//2670
+f 4037//2671 4038//2671 4035//2671 4034//2671 4039//2671 4040//2671
+f 4041//2672 4037//2672 4040//2672 4042//2672
+f 4029//2673 4043//2673 4044//2673 4041//2673 4042//2673 4030//2673
+f 4045//2628 4046//2628 4047//2628 4048//2628 4049//2628
+f 4050//2674 4051//2674 4052//2674 4045//2674 4049//2674 4053//2674 4054//2674
+f 4055//2629 4056//2629 4051//2629 4050//2629 4057//2629
+f 4058//2630 4059//2630 4056//2630 4055//2630 4060//2630
+f 4061//2631 4062//2631 4063//2631 4059//2631 4058//2631 4064//2631 4065//2631
+f 4046//2632 4062//2632 4061//2632 4066//2632 4047//2632
+f 4067//2633 4068//2633 4069//2633 4070//2633
+f 4071//2634 3684//2634 3683//2634 4068//2634 4067//2634
+f 4071//2635 3685//2635 3684//2635
+f 4070//2638 4069//2638 3238//2638 3237//2638
+f 4072//2639 4073//2639 4074//2639 4075//2639
+f 4076//2640 4077//2640 3235//2640 3234//2640 3236//2640 4072//2640 4075//2640
+f 4078//2676 4079//2676 3230//2676 3235//2676 4077//2676
+f 4080//2642 4081//2642 4079//2642 4078//2642 4082//2642
+f 4083//2643 4081//2643 4080//2643 4084//2643
+f 4073//2644 4083//2644 4084//2644 4074//2644
+f 4085//2693 4086//2693 2712//2693 2714//2693
+f 4086//2646 4085//2646 3264//2646 3263//2646
+f 4087//2648 3276//2648 3275//2648 4088//2648
+f 3703//2649 3707//2649 4087//2649 4088//2649 3704//2649
+f 4089//2651 4090//2651 4091//2651 4092//2651 4093//2651
+f 3722//2652 3717//2652 3716//2652 4090//2652 4089//2652 4094//2652
+f 3292//2653 3279//2653 3278//2653 3722//2653 4094//2653 4095//2653
+f 3619//2654 4096//2654 3291//2654 3290//2654 3292//2654 4095//2654 4097//2654 3620//2654
+f 4096//2655 3619//2655 3617//2655 3616//2655 4098//2655
+f 4091//2656 4098//2656 3616//2656 3611//2656 3610//2656 4092//2656
+f 4099//2657 3314//2657 3313//2657 4100//2657 4101//2657 4102//2657
+f 3311//2658 3310//2658 3314//2658 4099//2658
+f 3306//2659 3305//2659 3309//2659 4103//2659 4104//2659
+f 4105//2660 4106//2660 4104//2660 4103//2660
+f 4107//2661 4106//2661 4105//2661 4108//2661 4109//2661
+f 4100//2662 4107//2662 4109//2662 4101//2662
+f 4110//2663 4111//2663 4112//2663 4113//2663 4114//2663 4115//2663
+f 4116//2664 4112//2664 4111//2664 4117//2664
+f 4118//2665 4119//2665 4116//2665 4117//2665 4120//2665
+f 4121//2666 4118//2666 4120//2666 4122//2666 4123//2666
+f 4124//2678 2136//2678 2135//2678 2141//2678 4121//2678 4123//2678
+f 4114//2667 2137//2667 2136//2667 4124//2667 4115//2667
+f 4125//2668 4126//2668 4127//2668 4128//2668 4129//2668
+f 4130//2669 4131//2669 4132//2669 4127//2669 4126//2669 4133//2669
+f 4134//2670 4135//2670 4131//2670 4130//2670 4136//2670
+f 4137//2671 4138//2671 4134//2671 4136//2671 4139//2671
+f 4140//2672 4137//2672 4139//2672 4141//2672
+f 4129//2673 4128//2673 4142//2673 4140//2673 4141//2673
+f 4143//2628 2826//2628 2825//2628
+f 2817//2629 2816//2629 4144//2629 4145//2629
+f 4146//2630 2820//2630 2818//2630 2817//2630 4145//2630 4147//2630
+f 4148//2631 2821//2631 2820//2631 4146//2631 4149//2631
+f 2825//2632 2823//2632 2822//2632 4148//2632 4149//2632 4150//2632 4143//2632
+f 4151//2633 4152//2633 4153//2633 4154//2633 4155//2633
+f 4156//2634 2829//2634 2828//2634 4152//2634 4151//2634
+f 3767//2635 2830//2635 2829//2635 4156//2635 3768//2635
+f 3373//2636 3779//2636 3374//2636
+f 4154//2638 3366//2638 3365//2638 3368//2638 4155//2638
+f 4157//2639 3395//2639 3394//2639 3399//2639 3786//2639 4158//2639 4159//2639
+f 4160//2640 3392//2640 3391//2640 3395//2640 4157//2640 4161//2640
+f 4162//2641 4163//2641 4164//2641 4165//2641 4166//2641 4160//2641 4161//2641 4167//2641
+f 4168//2642 4169//2642 4170//2642 4171//2642 4165//2642 4164//2642 4172//2642 4173//2642
+f 4174//2643 4169//2643 4168//2643 4175//2643 4176//2643
+f 4158//2644 3786//2644 3788//2644 3790//2644 4177//2644 4174//2644 4176//2644 4178//2644
+f 4179//2645 3802//2645 3801//2645 4180//2645 4181//2645
+f 4182//2646 4183//2646 4184//2646 4179//2646 4181//2646 4185//2646
+f 4186//2647 4183//2647 4182//2647 4187//2647
+f 4188//2648 3813//2648 3807//2648 3806//2648 4186//2648 4187//2648 4189//2648 4190//2648
+f 4191//2649 3805//2649 3804//2649 3812//2649 4188//2649 4190//2649
+f 4180//2650 3801//2650 3800//2650 3805//2650 4191//2650 4192//2650 4193//2650
+f 4194//2651 2488//2651 2487//2651 2513//2651 4195//2651
+f 2511//2651 2506//2651 2505//2651 2782//2651 2774//2651 2773//2651
+f 4196//2651 2802//2651 2801//2651
+f 2489//2698 2488//2698 4194//2698
+f 2783//2652 2782//2652 2505//2652 2499//2652 2498//2652 2789//2652
+f 4197//2653 2796//2653 2790//2653 2789//2653 2498//2653 2497//2653 2503//2653
+f 2503//2654 2502//2654 2508//2654 4198//2654 2780//2654 2779//2654 2787//2654 2794//2654 4199//2654 4197//2654
+f 2772//2655 2771//2655 2780//2655 4198//2655 4200//2655 4201//2655
+f 4199//2655 2794//2655 2793//2655 2800//2655 4202//2655
+f 2513//2656 2512//2656 2511//2656 2773//2656 2772//2656 4201//2656 4195//2656
+f 4203//2656 4202//2656 2800//2656 2799//2656 2802//2656 4196//2656
+f 4204//2657 4205//2657 2810//2657 2809//2657 4206//2657 4207//2657
+f 2912//2658 2911//2658 4204//2658 4207//2658
+f 4208//2660 4209//2660 2926//2660 2925//2660 4210//2660
+f 4144//2661 2816//2661 2815//2661 2814//2661 4211//2661 4209//2661 4208//2661
+f 4205//2662 4211//2662 2814//2662 2811//2662 2810//2662
+f 4212//2663 4213//2663 4214//2663 4215//2663 4216//2663
+f 4217//2664 4212//2664 4216//2664 4218//2664
+f 4219//2682 4220//2682 4217//2682 4218//2682 4221//2682 4222//2682
+f 3852//2666 4219//2666 4222//2666 4223//2666 3853//2666
+f 4214//2667 4213//2667 3848//2667 3847//2667
+f 4224//2668 4225//2668 4226//2668 4227//2668 4228//2668 4229//2668
+f 4230//2669 4224//2669 4229//2669 4231//2669 4232//2669
+f 4233//2670 4234//2670 4235//2670 4236//2670 4230//2670 4232//2670
+f 4237//2671 4238//2671 4234//2671 4233//2671 4239//2671
+f 4240//2672 4241//2672 4238//2672 4237//2672 4242//2672
+f 4226//2673 4240//2673 4242//2673 4243//2673 4227//2673
+f 4244//2633 4245//2633 4246//2633 4247//2633
+f 4248//2634 4245//2634 4244//2634 4249//2634 4250//2634
+f 4251//2635 4248//2635 4250//2635 4252//2635
+f 4253//2636 3434//2636 3433//2636 3442//2636 3445//2636 4251//2636 4252//2636 4254//2636
+f 3435//2637 3434//2637 4253//2637 4255//2637
+f 4246//2638 3436//2638 3435//2638 4255//2638 4247//2638
+f 4256//2639 3026//2639 3025//2639 3029//2639 4257//2639
+f 4258//2640 3022//2640 3021//2640 3026//2640 4256//2640 4259//2640 4260//2640
+f 4261//2641 4262//2641 4260//2641 4259//2641
+f 4263//2684 4264//2684 4265//2684 4266//2684 4262//2684 4261//2684
+f 4267//2643 4265//2643 4264//2643 4268//2643 4269//2643
+f 4257//2644 3029//2644 3028//2644 4267//2644 4269//2644
+f 4270//2645 3038//2645 3037//2645 3040//2645 4271//2645
+f 4272//2646 4270//2646 4271//2646 4273//2646
+f 4274//2647 4275//2647 4276//2647 4272//2647 4273//2647
+f 4277//2648 4276//2648 4275//2648 4278//2648 4279//2648
+f 4280//2649 3043//2649 3042//2649 3047//2649 4281//2649 4277//2649 4279//2649
+f 3043//2650 4280//2650 3044//2650
+f 3047//2699 3046//2699 4281//2699
+f 4282//2657 4283//2657 4284//2657 4285//2657 4286//2657
+f 4287//2658 3083//2658 3067//2658 3066//2658 4286//2658 4285//2658 4288//2658 4289//2658
+f 3079//2659 3083//2659 4287//2659 4290//2659 3080//2659
+f 4291//2660 4292//2660 4293//2660 3081//2660 3080//2660 4290//2660
+f 2046//2661 2045//2661 4294//2661
+f 2042//2661 2037//2661 2040//2661 4295//2661 4296//2661 4297//2661 4298//2661 4299//2661 4292//2661 4291//2661
+f 2046//2700 4294//2700 2047//2700
+f 4300//2662 4297//2662 4296//2662 4301//2662 4284//2662 4283//2662
+f 4302//2663 3090//2663 3089//2663 4303//2663 4304//2663
+f 4305//2664 4288//2664 4285//2664 4284//2664 4301//2664 4306//2664 4302//2664 4304//2664 4307//2664
+f 4288//2665 4305//2665 4289//2665
+f 4296//2665 4295//2665 3568//2665 3571//2665 4306//2665 4301//2665
+f 2040//2666 2039//2666 3568//2666 4295//2666
+f 4308//2667 4303//2667 3089//2667 3088//2667 2034//2667 2036//2667
+f 4309//2668 4310//2668 4311//2668 4312//2668 4313//2668
+f 4314//2669 4315//2669 4309//2669 4313//2669
+f 4316//2670 4317//2670 4315//2670 4314//2670 4318//2670
+f 4319//2671 4320//2671 4316//2671 4318//2671 4321//2671
+f 4322//2672 4323//2672 4320//2672 4319//2672 4324//2672
+f 4311//2673 4323//2673 4322//2673 4312//2673
+f 4325//2628 4326//2628 4327//2628 4328//2628 4329//2628
+f 4330//2674 4331//2674 4325//2674 4329//2674 4332//2674
+f 2081//2629 2080//2629 4330//2629 4332//2629 4333//2629 4334//2629
+f 4335//2630 2073//2630 2072//2630 2081//2630 4334//2630
+f 4336//2631 2090//2631 2074//2631 2073//2631 4335//2631
+f 4326//2632 4337//2632 2076//2632 2078//2632 2090//2632 4336//2632 4327//2632
+f 3167//2639 3166//2639 3170//2639 4338//2639 4339//2639
+f 4340//2640 4341//2640 3163//2640 3162//2640 3167//2640 4339//2640
+f 4342//2641 4343//2641 4341//2641 4340//2641
+f 4344//2642 4345//2642 4343//2642 4342//2642
+f 4346//2643 4345//2643 4344//2643 4347//2643
+f 4338//2644 3170//2644 3169//2644 4346//2644 4347//2644
+f 4348//2651 4349//2651 4350//2651 4351//2651 4352//2651
+f 4353//2652 2161//2652 2152//2652 2151//2652 4349//2652 4348//2652
+f 2162//2653 2161//2653 4353//2653 3643//2653
+f 4354//2654 3650//2654 3649//2654 3655//2654
+f 4355//2655 3656//2655 3651//2655 3650//2655 4354//2655 4356//2655
+f 4350//2656 4355//2656 4356//2656 4351//2656
+f 4357//2657 3924//2657 3923//2657 4358//2657 4359//2657 4360//2657
+f 2185//2658 2184//2658 3921//2658 3924//2658 4357//2658 4361//2658
+f 4362//2659 2180//2659 2179//2659 2185//2659 4361//2659
+f 4363//2660 4364//2660 2181//2660 2180//2660 4362//2660 4365//2660
+f 4366//2661 4364//2661 4363//2661 4367//2661
+f 4360//2662 4359//2662 4366//2662 4367//2662 4368//2662
+f 4369//2663 4370//2663 4371//2663 4372//2663 4373//2663 4374//2663
+f 4375//2664 4376//2664 4369//2664 4374//2664 4377//2664
+f 4378//2665 4375//2665 4377//2665 4379//2665 4380//2665 4381//2665
+f 4382//2666 4383//2666 4378//2666 4381//2666 4384//2666 4385//2666
+f 4386//2678 4387//2678 4385//2678 4384//2678 4388//2678 4389//2678 4390//2678 4391//2678 4392//2678
+f 4371//2667 4390//2667 4389//2667 4372//2667
+f 4393//2668 4394//2668 4395//2668 4396//2668 4397//2668
+f 4398//2669 4399//2669 4400//2669 4401//2669 4393//2669 4397//2669 4402//2669
+f 4403//2670 4401//2670 4400//2670 4404//2670 4405//2670 4406//2670 4407//2670 4408//2670 4409//2670
+f 4407//2671 4406//2671 4410//2671 4411//2671 4412//2671 4413//2671
+f 4414//2672 4415//2672 4416//2672 4417//2672 4413//2672 4412//2672
+f 4395//2673 4418//2673 4416//2673 4415//2673 4396//2673
+f 4419//2628 4420//2628 4421//2628 4422//2628 4423//2628
+f 4424//2674 4425//2674 4421//2674 4420//2674 4426//2674
+f 4427//2629 4428//2629 4424//2629 4426//2629 4429//2629
+f 4430//2630 4428//2630 4427//2630 4431//2630 4432//2630
+f 4433//2631 4434//2631 4430//2631 4432//2631 4435//2631
+f 4422//2632 4436//2632 4434//2632 4433//2632 4423//2632
+f 4437//2633 4438//2633 4439//2633 4440//2633 4441//2633
+f 4442//2634 4443//2634 4438//2634 4437//2634 4444//2634 4445//2634
+f 4446//2635 4447//2635 4442//2635 4445//2635
+f 4448//2636 4449//2636 4450//2636 4451//2636
+f 4452//2637 4453//2637 4448//2637 4451//2637 4454//2637
+f 4440//2638 4455//2638 4456//2638 4452//2638 4454//2638 4441//2638
+f 4457//2639 4458//2639 4459//2639 4460//2639 4461//2639
+f 4462//2640 4463//2640 4464//2640 4465//2640 4466//2640 4458//2640 4457//2640 4467//2640
+f 4468//2641 4469//2641 4470//2641 4462//2641 4467//2641
+f 4471//2642 4472//2642 4473//2642 4474//2642 4469//2642 4468//2642
+f 4475//2643 4476//2643 4477//2643 4472//2643 4471//2643
+f 4461//2644 4460//2644 4476//2644 4475//2644
+f 4478//2645 4479//2645 4480//2645 4481//2645
+f 4482//2646 4483//2646 4479//2646 4478//2646 4484//2646
+f 4485//2647 4482//2647 4484//2647 4486//2647
+f 4487//2648 4485//2648 4486//2648 4488//2648
+f 4489//2649 4490//2649 4491//2649 4487//2649 4488//2649
+f 4480//2650 4492//2650 4493//2650 4490//2650 4489//2650 4481//2650
+f 4494//2651 4495//2651 4496//2651 4497//2651 4498//2651
+f 4499//2652 4500//2652 4495//2652 4494//2652 4501//2652
+f 4502//2653 4499//2653 4501//2653 4503//2653
+f 4504//2654 4505//2654 4502//2654 4503//2654 4506//2654
+f 4507//2655 4505//2655 4504//2655 4508//2655
+f 4496//2656 4509//2656 4507//2656 4508//2656 4497//2656
+f 4510//2657 4511//2657 4512//2657 4513//2657
+f 4514//2658 4515//2658 4510//2658 4513//2658 4516//2658 4517//2658
+f 4518//2659 4519//2659 4514//2659 4517//2659
+f 4520//2660 4521//2660 4519//2660 4518//2660 4522//2660
+f 4523//2661 4521//2661 4520//2661 4524//2661
+f 4512//2662 4511//2662 4525//2662 4523//2662 4524//2662
+f 4526//2663 4527//2663 4528//2663 4529//2663
+f 4530//2664 4527//2664 4526//2664 4531//2664
+f 4532//2682 4530//2682 4531//2682 4533//2682
+f 4534//2666 4535//2666 4532//2666 4533//2666 4536//2666
+f 4537//2678 4538//2678 4534//2678 4536//2678
+f 4529//2667 4528//2667 4539//2667 4538//2667 4537//2667
+f 4540//2668 4541//2668 4542//2668 4543//2668
+f 4544//2669 4545//2669 4540//2669 4543//2669 4546//2669 4547//2669
+f 4548//2670 4545//2670 4544//2670 4549//2670 4550//2670 4551//2670
+f 4552//2671 4553//2671 4554//2671 4548//2671 4551//2671 4555//2671
+f 4556//2672 4557//2672 4553//2672 4552//2672 4558//2672
+f 4541//2673 4556//2673 4558//2673 4559//2673 4542//2673
+f 4560//2628 4561//2628 4562//2628 4563//2628 4564//2628
+f 4565//2629 4566//2629 4567//2629 4568//2629 4569//2629
+f 4570//2630 4565//2630 4569//2630 4571//2630 4572//2630
+f 4573//2631 4574//2631 4575//2631 4570//2631 4572//2631
+f 4561//2632 4574//2632 4573//2632 4562//2632
+f 4576//2633 4577//2633 4578//2633 4579//2633
+f 4580//2634 4581//2634 4582//2634 4583//2634 4577//2634 4576//2634 4584//2634
+f 4585//2635 4586//2635 4580//2635 4584//2635 4587//2635
+f 4588//2701 4583//2701 4582//2701
+f 4589//2636 4590//2636 4591//2636 4585//2636 4587//2636 4592//2636
+f 4593//2636 4594//2636 4595//2636 4596//2636
+f 4597//2637 4598//2637 4589//2637 4592//2637 4599//2637
+f 4594//2702 4600//2702 4595//2702
+f 4578//2638 4601//2638 4602//2638 4603//2638 4604//2638 4597//2638 4599//2638 4579//2638
+f 4605//2639 4606//2639 4607//2639 4608//2639 4609//2639
+f 4610//2640 4611//2640 4612//2640 4605//2640 4609//2640
+f 4613//2676 4614//2676 4615//2676 4611//2676 4610//2676
+f 4614//2642 4613//2642 4616//2642 4617//2642
+f 4618//2643 4619//2643 4620//2643 4621//2643 4622//2643 4617//2643 4616//2643
+f 4623//2644 4624//2644 4621//2644 4620//2644 4625//2644 4608//2644 4607//2644 4626//2644
+f 4627//2677 4628//2677 4629//2677 4630//2677 4631//2677
+f 4632//2646 4633//2646 4634//2646 4635//2646 4628//2646 4627//2646
+f 4636//2647 4637//2647 4633//2647 4632//2647 4638//2647
+f 4639//2648 4640//2648 4636//2648 4638//2648 4641//2648
+f 4642//2649 4643//2649 4639//2649 4641//2649 4644//2649
+f 4631//2650 4630//2650 4645//2650 4646//2650 4642//2650 4644//2650
+f 4647//2651 4648//2651 4649//2651 4650//2651
+f 4651//2652 4652//2652 4653//2652 4648//2652 4647//2652
+f 4654//2653 4652//2653 4651//2653 4655//2653
+f 4656//2654 4654//2654 4655//2654 4657//2654
+f 4658//2655 4659//2655 4660//2655 4656//2655 4657//2655
+f 4649//2656 4659//2656 4658//2656 4650//2656
+f 4661//2657 4662//2657 4663//2657 4664//2657
+f 4665//2658 4666//2658 4667//2658 4661//2658 4664//2658 4668//2658
+f 4669//2659 4670//2659 4671//2659 4666//2659 4665//2659
+f 4672//2660 4673//2660 4674//2660 4670//2660 4669//2660
+f 4675//2661 4676//2661 4677//2661 4678//2661 4679//2661 4680//2661 4673//2661 4672//2661
+f 4662//2662 4679//2662 4678//2662 4681//2662 4663//2662
+f 4682//2663 4683//2663 4684//2663 4685//2663 4686//2663
+f 4687//2664 4688//2664 4682//2664 4686//2664 4689//2664
+f 4690//2665 4691//2665 4687//2665 4689//2665
+f 4692//2666 4691//2666 4690//2666 4693//2666
+f 4684//2667 4683//2667 4694//2667 4695//2667 4696//2667 4697//2667
+f 4698//2668 4699//2668 4700//2668 4701//2668 4702//2668 4703//2668 4704//2668
+f 4705//2669 4706//2669 4698//2669 4704//2669 4707//2669
+f 4708//2670 4709//2670 4710//2670 4705//2670 4707//2670 4711//2670
+f 4712//2671 4713//2671 4714//2671 4710//2671 4709//2671 4715//2671
+f 4716//2672 4717//2672 4713//2672 4712//2672
+f 4702//2673 4718//2673 4717//2673 4716//2673 4703//2673
+f 4719//2628 4720//2628 4721//2628 4722//2628 4723//2628
+f 4724//2674 4725//2674 4721//2674 4720//2674 4726//2674
+f 4727//2629 4728//2629 4729//2629 4730//2629 4724//2629 4726//2629 4731//2629 4732//2629
+f 4727//2630 4732//2630 4733//2630
+f 4729//2703 4734//2703 4730//2703
+f 4735//2631 4736//2631 4737//2631
+f 4738//2633 4739//2633 4740//2633 4741//2633
+f 4742//2634 4743//2634 4739//2634 4738//2634 4744//2634
+f 4745//2635 4742//2635 4744//2635 4746//2635 4747//2635
+f 4748//2636 4745//2636 4747//2636 4749//2636
+f 4750//2637 4748//2637 4749//2637 4751//2637 4752//2637
+f 4741//2638 4740//2638 4753//2638 4750//2638 4752//2638
+f 4754//2639 4755//2639 4756//2639 4757//2639
+f 4758//2640 4759//2640 4760//2640 4761//2640 4762//2640 4763//2640
+f 4764//2676 4765//2676 4766//2676 4763//2676 4762//2676 4767//2676 4768//2676
+f 4769//2684 4764//2684 4768//2684 4770//2684
+f 4771//2643 4772//2643 4769//2643 4770//2643
+f 4756//2644 4755//2644 4773//2644 4772//2644 4771//2644 4774//2644
+f 4775//2645 4776//2645 4777//2645 4778//2645 4779//2645
+f 4780//2646 4775//2646 4779//2646 4781//2646 4782//2646
+f 4783//2647 4784//2647 4780//2647 4782//2647 4785//2647 4786//2647
+f 4787//2648 4788//2648 4784//2648 4783//2648 4789//2648 4790//2648
+f 4791//2649 4792//2649 4793//2649 4794//2649 4787//2649 4790//2649 4795//2649 4796//2649
+f 4778//2650 4777//2650 4797//2650 4792//2650 4791//2650 4798//2650
+f 4799//2651 4800//2651 4801//2651 4802//2651 4803//2651 4804//2651 4805//2651 4806//2651 4807//2651
+f 4808//2652 4806//2652 4805//2652 4809//2652
+f 4810//2653 4811//2653 4808//2653 4809//2653 4812//2653
+f 4813//2654 4810//2654 4812//2654 4814//2654 4815//2654
+f 4816//2655 4817//2655 4813//2655 4815//2655 4818//2655 4819//2655
+f 4820//2656 4821//2656 4816//2656 4819//2656 4822//2656 4801//2656 4800//2656
+f 4823//2657 4824//2657 4825//2657 4826//2657 4827//2657 4828//2657
+f 4829//2658 4830//2658 4831//2658 4824//2658 4823//2658
+f 4832//2659 4833//2659 4830//2659 4829//2659 4834//2659 4835//2659 4836//2659
+f 4837//2660 4838//2660 4839//2660 4836//2660 4835//2660
+f 4840//2661 4838//2661 4837//2661 4841//2661
+f 4827//2662 4826//2662 4842//2662 4840//2662 4841//2662
+f 4843//2663 4844//2663 4845//2663 4846//2663 4847//2663
+f 4848//2664 4843//2664 4847//2664 4849//2664
+f 4850//2665 4851//2665 4852//2665 4853//2665 4848//2665 4849//2665
+f 4854//2666 4855//2666 4856//2666 4851//2666 4850//2666 4857//2666
+f 4858//2678 4859//2678 4855//2678 4854//2678 4860//2678 4861//2678
+f 4845//2667 4862//2667 4861//2667 4860//2667 4863//2667 4846//2667
+f 4864//2668 4865//2668 4866//2668 4867//2668 4868//2668
+f 4869//2669 4870//2669 4871//2669 4864//2669 4868//2669 4872//2669
+f 4873//2670 4874//2670 4875//2670 4869//2670 4872//2670 4876//2670
+f 4877//2671 4878//2671 4874//2671 4873//2671 4879//2671
+f 4880//2672 4881//2672 4877//2672 4879//2672 4882//2672 4883//2672
+f 4866//2673 4884//2673 4880//2673 4883//2673 4867//2673
+f 4885//2628 4405//2628 4404//2628 4886//2628
+f 4887//2704 4398//2704 4402//2704
+f 4888//2674 4889//2674 4890//2674
+f 4466//2629 4465//2629 4888//2629 4890//2629 4891//2629
+f 4892//2629 4474//2629 4473//2629
+f 4893//2630 4459//2630 4458//2630 4466//2630 4891//2630
+f 4892//2630 4473//2630 4472//2630 4477//2630 4894//2630
+f 4411//2631 4410//2631 4895//2631 4894//2631 4477//2631 4476//2631 4460//2631 4459//2631 4893//2631
+f 4895//2632 4410//2632 4406//2632 4405//2632 4885//2632
+f 4896//2633 4897//2633 4898//2633 4899//2633 4900//2633
+f 4901//2634 4902//2634 4897//2634 4896//2634 4903//2634
+f 4902//2635 4901//2635 4904//2635 4905//2635 4906//2635
+f 4907//2636 4908//2636 4906//2636 4905//2636 4909//2636 4910//2636
+f 4911//2637 4907//2637 4910//2637 4912//2637 4913//2637
+f 4900//2638 4899//2638 4911//2638 4913//2638
+f 4914//2639 4915//2639 4916//2639 4917//2639 4918//2639 4919//2639 4920//2639 4921//2639 4922//2639
+f 4923//2640 4924//2640 4925//2640 4915//2640 4914//2640
+f 4918//2640 4917//2640 4926//2640 4927//2640 4928//2640 4929//2640
+f 4930//2641 4931//2641 4932//2641 4924//2641 4923//2641
+f 4933//2641 4928//2641 4927//2641
+f 4934//2642 4935//2642 4936//2642 4931//2642 4930//2642 4937//2642
+f 4938//2643 4939//2643 4940//2643 4934//2643 4937//2643 4941//2643
+f 4921//2644 4920//2644 4942//2644 4943//2644 4939//2644 4938//2644
+f 4944//2677 4945//2677 4946//2677 4947//2677
+f 4948//2646 4945//2646 4944//2646 4949//2646 4950//2646
+f 4951//2647 4952//2647 4948//2647 4950//2647 4953//2647 4954//2647
+f 4955//2648 4951//2648 4954//2648 4956//2648 4957//2648
+f 4958//2649 4955//2649 4957//2649 4959//2649 4960//2649
+f 4961//2651 4962//2651 4963//2651 4964//2651
+f 4965//2652 4966//2652 4967//2652 4962//2652 4961//2652 4968//2652
+f 4969//2653 4966//2653 4965//2653 4970//2653
+f 4971//2654 4972//2654 4973//2654 4969//2654 4970//2654
+f 4974//2655 4972//2655 4971//2655 4975//2655
+f 4963//2656 4974//2656 4975//2656 4976//2656 4964//2656
+f 4977//2657 4978//2657 4979//2657 4980//2657 4981//2657 4982//2657
+f 4983//2658 4493//2658 4492//2658 4980//2658 4979//2658
+f 4984//2659 4491//2659 4490//2659 4493//2659 4983//2659 4985//2659
+f 4986//2660 4987//2660 4984//2660 4985//2660 4988//2660
+f 4989//2661 4987//2661 4986//2661 4990//2661 4991//2661
+f 4982//2662 4981//2662 4992//2662 4989//2662 4991//2662
+f 4993//2663 4994//2663 4995//2663 4996//2663 4997//2663 4998//2663 4999//2663
+f 5000//2664 4993//2664 4999//2664 5001//2664
+f 5002//2665 5003//2665 5004//2665 5005//2665 5000//2665 5001//2665 5006//2665
+f 5007//2666 5002//2666 5006//2666 5008//2666
+f 4998//2667 4997//2667 5009//2667
+f 5010//2668 5011//2668 5012//2668 5013//2668
+f 5014//2669 5015//2669 5010//2669 5013//2669 5016//2669
+f 5017//2670 5018//2670 5019//2670 5015//2670 5014//2670
+f 5020//2671 5021//2671 5018//2671 5017//2671 5022//2671
+f 5023//2672 5024//2672 5025//2672 5020//2672 5022//2672
+f 5011//2673 5026//2673 5027//2673 5024//2673 5023//2673 5028//2673 5012//2673
+f 5029//2628 5030//2628 5031//2628 5032//2628 5033//2628 5034//2628
+f 5035//2674 5029//2674 5034//2674 5036//2674
+f 5037//2629 5038//2629 5035//2629 5036//2629 5039//2629
+f 5040//2630 5037//2630 5039//2630 5041//2630
+f 5042//2631 5043//2631 5044//2631 5040//2631 5041//2631
+f 5032//2632 5045//2632 5043//2632 5042//2632 5033//2632
+f 5046//2633 5047//2633 5048//2633 5049//2633 5050//2633
+f 5051//2634 5052//2634 5049//2634 5048//2634
+f 5053//2635 5054//2635 5055//2635 5056//2635 5052//2635 5051//2635
+f 5057//2636 5058//2636 5055//2636 5054//2636 5059//2636
+f 5060//2637 5057//2637 5059//2637 5061//2637
+f 5046//2638 5050//2638 5060//2638 5061//2638
+f 5062//2639 5063//2639 5064//2639 5065//2639 5066//2639
+f 5067//2640 5063//2640 5062//2640 5068//2640 5069//2640
+f 5070//2641 5071//2641 5072//2641 5069//2641 5068//2641 5073//2641
+f 5074//2642 5075//2642 5070//2642 5073//2642
+f 5076//2643 5077//2643 5075//2643 5074//2643
+f 5066//2644 5065//2644 5078//2644 5077//2644 5076//2644
+f 5079//2645 5080//2645 5081//2645 5082//2645 5083//2645
+f 5084//2646 5085//2646 5079//2646 5083//2646
+f 5086//2648 5087//2648 5088//2648 5089//2648 5090//2648
+f 5091//2649 5092//2649 5086//2649 5090//2649 5093//2649
+f 5082//2650 5081//2650 5094//2650
+f 5095//2651 5096//2651 5097//2651 5098//2651
+f 5099//2652 5100//2652 5101//2652 5096//2652 5095//2652
+f 5099//2653 5102//2653 5100//2653
+f 5103//2654 5104//2654 5105//2654 5106//2654 5107//2654
+f 5108//2655 5109//2655 5110//2655 5111//2655 5106//2655 5105//2655 5112//2655
+f 5097//2656 5113//2656 5108//2656 5112//2656 5098//2656
+f 5114//2657 5115//2657 5116//2657 5117//2657 5118//2657
+f 5119//2658 5120//2658 5115//2658 5114//2658
+f 5121//2659 5122//2659 5123//2659 5120//2659 5119//2659
+f 5124//2660 5125//2660 5122//2660 5121//2660 5126//2660
+f 5127//2661 5128//2661 5124//2661 5126//2661 5129//2661
+f 5118//2662 5117//2662 5127//2662 5129//2662
+f 5130//2663 5131//2663 5132//2663 5133//2663
+f 5134//2664 5135//2664 5130//2664 5133//2664 5136//2664
+f 5137//2665 4567//2665 4566//2665 5134//2665 5136//2665
+f 4568//2666 4567//2666 5137//2666
+f 5131//2667 4560//2667 4564//2667 5132//2667
+f 4581//2668 4580//2668 4586//2668 5138//2668 5139//2668
+f 5140//2669 4588//2669 4582//2669 4581//2669 5139//2669 5141//2669
+f 5142//2670 5143//2670 5144//2670 5140//2670 5141//2670
+f 5145//2671 5143//2671 5142//2671 5146//2671
+f 5147//2672 4591//2672 4590//2672 5148//2672 4593//2672 4596//2672 5145//2672 5146//2672
+f 4586//2673 4585//2673 4591//2673 5147//2673 5138//2673
+f 5149//2628 5150//2628 5151//2628 5152//2628
+f 5153//2674 5149//2674 5152//2674 5154//2674 5155//2674 5156//2674
+f 5157//2629 5158//2629 5153//2629 5156//2629 5159//2629
+f 5160//2630 5161//2630 5158//2630 5157//2630 5162//2630
+f 5163//2631 5164//2631 5165//2631 5166//2631 5160//2631 5162//2631
+f 5150//2632 5165//2632 5164//2632 5151//2632
+f 5167//2633 5168//2633 5169//2633 5170//2633
+f 5171//2634 5172//2634 5173//2634 5174//2634 5168//2634 5167//2634
+f 5175//2635 5176//2635 5177//2635 5173//2635 5172//2635
+f 5178//2636 5179//2636 5180//2636 5181//2636 5182//2636 5183//2636
+f 5184//2637 5185//2637 5178//2637 5183//2637 5186//2637
+f 5187//2638 5188//2638 5184//2638 5186//2638 5170//2638 5169//2638
+f 5189//2639 5190//2639 5191//2639 5192//2639 5193//2639 5194//2639
+f 5195//2640 5196//2640 5190//2640 5189//2640
+f 5197//2641 5198//2641 5196//2641 5195//2641
+f 5199//2642 5200//2642 5198//2642 5197//2642 5201//2642
+f 5202//2643 5203//2643 5200//2643 5199//2643 5204//2643
+f 5193//2644 5192//2644 5205//2644 5203//2644 5202//2644 5206//2644
+f 5207//2645 5208//2645 4708//2645 4711//2645 5209//2645 5210//2645
+f 5211//2646 5212//2646 5210//2646 5209//2646 5213//2646
+f 5214//2647 5211//2647 5213//2647 5215//2647
+f 5216//2648 5214//2648 5215//2648 5217//2648
+f 5218//2649 5219//2649 5216//2649 5217//2649
+f 4715//2650 4709//2650 4708//2650 5208//2650 5219//2650 5218//2650
+f 5220//2651 5221//2651 5222//2651 5223//2651
+f 5224//2652 5225//2652 5226//2652 5227//2652 5221//2652 5220//2652
+f 5228//2653 5229//2653 5230//2653 5225//2653 5224//2653 5231//2653
+f 5232//2654 5233//2654 5228//2654 5231//2654 5234//2654
+f 5235//2655 5236//2655 5232//2655 5234//2655 5237//2655 5238//2655
+f 5222//2705 5235//2705 5238//2705 5239//2705 5223//2705
+f 5240//2657 5241//2657 5242//2657 5243//2657
+f 5244//2658 5245//2658 5241//2658 5240//2658
+f 5246//2659 5247//2659 5248//2659 5249//2659 5245//2659 5244//2659
+f 5248//2660 5247//2660 5250//2660 5251//2660 5252//2660
+f 5253//2690 5252//2690 5251//2690 5254//2690
+f 5243//2662 5242//2662 5255//2662 5253//2662 5254//2662
+f 5256//2663 5257//2663 5258//2663 5259//2663
+f 5260//2664 5261//2664 5262//2664 5256//2664 5259//2664 5263//2664
+f 5264//2665 5261//2665 5260//2665 5265//2665
+f 5266//2666 5267//2666 5264//2666 5265//2666 5268//2666
+f 5269//2678 5270//2678 5267//2678 5266//2678 5271//2678
+f 5257//2667 5269//2667 5271//2667 5258//2667
+f 5272//2668 5273//2668 5274//2668 5275//2668 5276//2668 5277//2668
+f 5272//2669 5277//2669 5278//2669 5279//2669
+f 5280//2671 5281//2671 5282//2671 5283//2671
+f 5284//2672 5285//2672 5286//2672 5287//2672 5280//2672 5283//2672
+f 5275//2673 5274//2673 5288//2673 5285//2673 5284//2673 5289//2673
+f 5290//2628 5291//2628 5292//2628 5293//2628
+f 4760//2629 4759//2629 5294//2629 5295//2629
+f 5296//2630 4754//2630 4757//2630
+f 4760//2630 5295//2630 4761//2630
+f 5297//2631 4773//2631 4755//2631 4754//2631 5296//2631 5298//2631
+f 5292//2632 5299//2632 5300//2632 5301//2632 5297//2632 5298//2632 5302//2632 5293//2632
+f 5303//2633 5304//2633 5305//2633 5306//2633 5307//2633 5308//2633 5309//2633 5310//2633 5311//2633
+f 5312//2634 5303//2634 5311//2634 5313//2634
+f 5314//2635 5312//2635 5313//2635 5315//2635
+f 5316//2636 5314//2636 5315//2636 5317//2636 5318//2636
+f 5319//2637 5320//2637 5321//2637 5322//2637 5316//2637 5318//2637 5323//2637
+f 5308//2638 5307//2638 5324//2638
+f 5321//2638 5325//2638 5305//2638 5304//2638 5322//2638
+f 5326//2639 5327//2639 5328//2639 5329//2639 5330//2639
+f 5307//2640 5306//2640 5331//2640 5332//2640 5333//2640 5327//2640 5326//2640 5324//2640
+f 5334//2641 5335//2641 5320//2641 5319//2641
+f 5331//2676 5306//2676 5305//2676 5325//2676 5336//2676
+f 5325//2642 5321//2642 5320//2642 5335//2642 5337//2642 5338//2642 5339//2642 5336//2642
+f 5340//2643 5339//2643 5338//2643 5341//2643
+f 5330//2644 5329//2644 5342//2644 5340//2644 5341//2644
+f 5343//2645 5344//2645 5345//2645 5346//2645 5347//2645 5348//2645
+f 5349//2646 5350//2646 5344//2646 5343//2646
+f 5351//2648 5352//2648 5353//2648 5354//2648 5355//2648
+f 5356//2649 5357//2649 5358//2649 5351//2649 5355//2649
+f 5347//2650 5346//2650 5357//2650 5356//2650
+f 5359//2651 5360//2651 5361//2651 5362//2651
+f 5363//2652 4862//2652 4845//2652 4844//2652 5360//2652 5359//2652 5364//2652
+f 4858//2653 4861//2653 4862//2653 5363//2653 5365//2653
+f 5366//2654 4859//2654 4858//2654 5365//2654 5367//2654 5368//2654
+f 5369//2655 5370//2655 5368//2655 5367//2655 5371//2655 5372//2655
+f 5361//2656 5369//2656 5372//2656 5362//2656
+f 5373//2657 5374//2657 5375//2657 5376//2657 5377//2657
+f 5378//2658 5374//2658 5373//2658 5379//2658
+f 5380//2659 4919//2659 4918//2659 4929//2659 5378//2659 5379//2659
+f 5381//2660 4942//2660 4920//2660 4919//2660 5380//2660
+f 5382//2661 4943//2661 4942//2661 5381//2661 5383//2661
+f 5376//2662 5382//2662 5383//2662 5377//2662
+f 5384//2663 5385//2663 5386//2663 5387//2663 5388//2663 5389//2663 5390//2663
+f 5391//2664 5390//2664 5389//2664 5392//2664 5393//2664
+f 5394//2682 5395//2682 5396//2682 5391//2682 5393//2682
+f 5397//2666 5398//2666 5399//2666 5395//2666 5394//2666
+f 5400//2678 5401//2678 5398//2678 5397//2678 5402//2678 5403//2678
+f 5386//2667 5404//2667 5403//2667 5402//2667 5387//2667
+f 5405//2668 5406//2668 5407//2668 5408//2668 5409//2668
+f 5410//2669 5411//2669 5405//2669 5409//2669 5412//2669 5413//2669
+f 5414//2670 5415//2670 5410//2670 5413//2670
+f 5416//2671 5417//2671 5418//2671 5415//2671 5414//2671 5419//2671
+f 5420//2672 5421//2672 5422//2672 5423//2672 5417//2672 5416//2672
+f 5407//2673 5424//2673 5421//2673 5420//2673 5408//2673
+f 5425//2628 5426//2628 5427//2628
+f 5428//2629 5429//2629 5430//2629 5431//2629 5432//2629 5433//2629
+f 5434//2630 5435//2630 5428//2630 5433//2630
+f 5436//2631 5437//2631 5438//2631 5435//2631 5434//2631
+f 5436//2632 5439//2632 5437//2632
+f 5440//2633 5441//2633 5442//2633 5443//2633
+f 4946//2634 5441//2634 5440//2634 4947//2634
+f 5443//2638 5442//2638 5444//2638 5445//2638 5446//2638
+f 5447//2639 5448//2639 5449//2639 5450//2639 5451//2639
+f 5449//2640 5448//2640 5452//2640 5453//2640
+f 5454//2641 5455//2641 5453//2641 5452//2641
+f 5456//2684 5457//2684 5458//2684 5459//2684 5455//2684 5454//2684
+f 5460//2643 5458//2643 5457//2643 5461//2643
+f 5451//2644 5450//2644 5462//2644 5460//2644 5461//2644
+f 5463//2645 5464//2645 5465//2645
+f 5466//2646 5467//2646 5468//2646 5464//2646 5463//2646 5469//2646
+f 5470//2647 5471//2647 5466//2647 5469//2647 5472//2647
+f 5473//2648 5474//2648 5470//2648 5472//2648 5475//2648
+f 5476//2649 5477//2649 5478//2649 5473//2649 5475//2649
+f 5477//2650 5476//2650 5479//2650
+f 5480//2651 5481//2651 5482//2651 5483//2651 5484//2651
+f 4997//2652 4996//2652 5485//2652 5481//2652 5480//2652 5009//2652
+f 5486//2654 5487//2654 5488//2654 5489//2654 5490//2654 5491//2654
+f 5492//2655 5493//2655 5489//2655 5488//2655 5494//2655
+f 5483//2656 5495//2656 5492//2656 5494//2656 5484//2656
+f 5496//2657 4456//2657 4455//2657 5497//2657 5498//2657
+f 4453//2658 4452//2658 4456//2658 5496//2658 5499//2658
+f 4449//2659 4448//2659 4453//2659 5499//2659 5500//2659 5501//2659 5502//2659
+f 5503//2660 5504//2660 5505//2660 5506//2660 5501//2660 5500//2660
+f 5507//2690 5505//2690 5504//2690 5508//2690 5509//2690
+f 5497//2662 5507//2662 5509//2662 5498//2662
+f 5510//2663 5511//2663 5512//2663 5513//2663
+f 5514//2664 5510//2664 5513//2664 5515//2664
+f 5516//2665 4464//2665 4463//2665 5514//2665 5515//2665 5517//2665
+f 4888//2666 4465//2666 4464//2666 5516//2666 4889//2666
+f 5518//2678 4399//2678 4398//2678 4887//2678
+f 5511//2667 5519//2667 4886//2667 4404//2667 4400//2667 4399//2667 5518//2667 5512//2667
+f 5520//2668 5521//2668 5522//2668 5523//2668 5524//2668
+f 5525//2669 5526//2669 5520//2669 5524//2669 5527//2669 5528//2669
+f 5529//2670 5530//2670 5526//2670 5525//2670
+f 5531//2671 5532//2671 5530//2671 5529//2671 5533//2671 5534//2671
+f 5533//2686 5529//2686 5525//2686 5528//2686
+f 5535//2672 5532//2672 5531//2672 5536//2672
+f 5522//2673 5537//2673 5535//2673 5536//2673 5523//2673
+f 5538//2628 5539//2628 5540//2628 5541//2628 5542//2628 5543//2628
+f 5544//2674 5538//2674 5543//2674 5545//2674
+f 5546//2629 5547//2629 5544//2629 5545//2629 5548//2629
+f 5549//2630 5550//2630 5546//2630 5548//2630
+f 5551//2631 5552//2631 5553//2631 5550//2631 5549//2631
+f 5541//2632 5554//2632 5552//2632 5551//2632 5542//2632
+f 5555//2633 4933//2633 4927//2633 4926//2633 5556//2633 5557//2633 5558//2633
+f 5559//2634 5555//2634 5558//2634 5560//2634
+f 5561//2635 5559//2635 5560//2635 5562//2635 5563//2635
+f 5564//2636 5565//2636 4925//2636 4924//2636 4932//2636 5566//2636 5561//2636 5563//2636 5567//2636
+f 4916//2637 4915//2637 4925//2637 5565//2637 5568//2637 5569//2637 5570//2637
+f 5566//2637 4932//2637 4931//2637 4936//2637 5571//2637
+f 5556//2638 4926//2638 4917//2638 4916//2638 5570//2638
+f 5571//2680 4936//2680 4935//2680
+f 5572//2639 5573//2639 5574//2639 5575//2639 5576//2639 5577//2639 5578//2639
+f 5579//2640 5580//2640 5581//2640 5573//2640 5572//2640 5582//2640
+f 5583//2641 5584//2641 5585//2641 5586//2641 5579//2641 5582//2641
+f 5587//2642 5588//2642 5589//2642 5584//2642 5583//2642
+f 5590//2643 5588//2643 5587//2643 5591//2643
+f 5578//2644 5577//2644 5592//2644 5590//2644 5591//2644
+f 5593//2645 5594//2645 5595//2645 5596//2645 5597//2645 5598//2645 5599//2645
+f 5600//2646 5596//2646 5595//2646 5601//2646 5602//2646
+f 5603//2648 5604//2648 5605//2648 5606//2648 5607//2648
+f 5608//2649 5609//2649 5610//2649 5603//2649 5607//2649 5611//2649
+f 5598//2650 5597//2650 5608//2650 5611//2650
+f 5612//2651 5613//2651 5614//2651 5615//2651
+f 5616//2652 5613//2652 5612//2652 5617//2652
+f 5618//2653 5619//2653 5616//2653 5617//2653 5620//2653 5621//2653
+f 5622//2654 5623//2654 5624//2654 5618//2654 5621//2654
+f 5625//2655 5626//2655 5623//2655 5622//2655
+f 5614//2656 5626//2656 5625//2656 5627//2656 5615//2656
+f 5628//2657 4604//2657 4603//2657 5629//2657
+f 4598//2658 4597//2658 4604//2658 5628//2658 5630//2658
+f 4590//2659 4589//2659 4598//2659 5630//2659 5631//2659 5148//2659
+f 4600//2660 4594//2660 4593//2660 5148//2660 5631//2660 5632//2660 5633//2660
+f 5634//2690 5633//2690 5632//2690 5635//2690
+f 5629//2662 4603//2662 4602//2662 5634//2662 5635//2662
+f 5636//2663 5637//2663 5638//2663 5639//2663 5640//2663
+f 5641//2664 5642//2664 5643//2664 5644//2664 5637//2664 5636//2664
+f 5644//2665 5643//2665 5645//2665 5646//2665 5647//2665
+f 5646//2666 5648//2666 5649//2666 5650//2666 5647//2666
+f 5648//2678 5651//2678 5652//2678 5653//2678 5654//2678 5649//2678
+f 5639//2667 5654//2667 5653//2667 5640//2667
+f 5655//2668 5656//2668 5657//2668 5658//2668 5659//2668
+f 5660//2669 5661//2669 5662//2669 5663//2669 5655//2669 5659//2669
+f 5664//2670 5662//2670 5661//2670 5665//2670 5666//2670
+f 5667//2671 5668//2671 5664//2671 5666//2671
+f 5669//2672 5670//2672 5671//2672 5672//2672 5668//2672 5667//2672
+f 5658//2673 5657//2673 5673//2673 5670//2673 5669//2673
+f 5674//2628 5675//2628 5676//2628 5677//2628 5678//2628
+f 5679//2629 5680//2629 5681//2629 5682//2629
+f 5683//2630 5684//2630 5680//2630 5679//2630 5685//2630
+f 5686//2631 5687//2631 5688//2631 5689//2631 5684//2631 5683//2631
+f 5675//2632 5690//2632 5687//2632 5686//2632 5676//2632
+f 5691//2633 5692//2633 5693//2633 5694//2633 5695//2633
+f 5696//2634 5697//2634 5698//2634 5692//2634 5691//2634 5699//2634
+f 5700//2635 5701//2635 5697//2635 5696//2635
+f 5702//2636 5703//2636 5704//2636 5705//2636 5706//2636 5707//2636
+f 5708//2637 5702//2637 5707//2637 5709//2637
+f 5695//2638 5694//2638 5710//2638 5708//2638 5709//2638 5711//2638
+f 5229//2639 5228//2639 5233//2639 5712//2639 5713//2639 5714//2639
+f 5715//2640 5716//2640 5230//2640 5229//2640 5714//2640 5717//2640
+f 5718//2676 5719//2676 5716//2676 5715//2676 5720//2676
+f 5721//2642 5722//2642 5723//2642 5724//2642 5719//2642 5718//2642
+f 5725//2643 5723//2643 5722//2643 5726//2643
+f 5712//2644 5233//2644 5232//2644 5236//2644 5727//2644 5725//2644 5726//2644 5728//2644
+f 5729//2645 5730//2645 5731//2645 5732//2645 5733//2645 5734//2645
+f 5688//2646 5687//2646 5690//2646 5730//2646 5729//2646 5735//2646
+f 5688//2647 5735//2647 5736//2647 5737//2647 5738//2647 5689//2647
+f 5739//2648 5740//2648 5738//2648 5737//2648 5741//2648
+f 5742//2649 5743//2649 5739//2649 5741//2649
+f 5733//2650 5732//2650 5743//2650 5742//2650
+f 5744//2651 5745//2651 5746//2651 5747//2651
+f 4722//2652 5745//2652 5744//2652 4723//2652
+f 5748//2654 5749//2654 5750//2654 4735//2654 4737//2654
+f 5751//2655 5752//2655 5749//2655 5748//2655 5753//2655
+f 5746//2656 5751//2656 5753//2656 5747//2656
+f 5754//2657 5755//2657 5756//2657 5757//2657
+f 5758//2658 5288//2658 5274//2658 5273//2658 5754//2658 5757//2658
+f 5759//2659 5286//2659 5285//2659 5288//2659 5758//2659 5760//2659
+f 5761//2660 5762//2660 5287//2660 5286//2660 5759//2660
+f 5763//2661 5764//2661 5765//2661 5762//2661 5761//2661 5766//2661
+f 5755//2662 5767//2662 5765//2662 5764//2662 5768//2662 5756//2662
+f 5769//2663 5770//2663 5771//2663 5772//2663
+f 5773//2664 5774//2664 5769//2664 5772//2664 5775//2664
+f 5776//2665 4758//2665 4763//2665 4766//2665 5777//2665 5773//2665 5775//2665 5778//2665
+f 4766//2706 4765//2706 5777//2706
+f 4759//2666 4758//2666 5776//2666 5294//2666
+f 5301//2707 5300//2707 5779//2707
+f 5779//2675 5300//2675 5299//2675 5780//2675
+f 5771//2667 5770//2667 5291//2667 5290//2667
+f 5781//2668 5782//2668 5783//2668 5784//2668
+f 5785//2669 5786//2669 5781//2669 5784//2669 4625//2669 4620//2669 4619//2669
+f 5787//2670 5788//2670 5789//2670 5785//2670 4619//2670 4618//2670 5790//2670 5791//2670
+f 5792//2671 5793//2671 5787//2671 5791//2671 5794//2671 5795//2671
+f 5796//2672 5797//2672 5795//2672 5794//2672
+f 5798//2628 5799//2628 5800//2628 5801//2628
+f 5802//2674 5798//2674 5801//2674 5803//2674
+f 5804//2629 5333//2629 5332//2629 5805//2629 5802//2629 5803//2629
+f 5328//2630 5327//2630 5333//2630 5804//2630 5806//2630 5807//2630
+f 5808//2631 5342//2631 5329//2631 5328//2631 5807//2631 5809//2631 5810//2631
+f 5799//2632 5811//2632 5808//2632 5810//2632 5800//2632
+f 5812//2633 5813//2633 5814//2633 5815//2633 5816//2633
+f 5817//2634 5818//2634 5813//2634 5812//2634 5819//2634
+f 5820//2635 5821//2635 5822//2635 5818//2635 5817//2635 5823//2635 5824//2635 5825//2635
+f 4833//2636 4832//2636 5825//2636 5824//2636 5826//2636
+f 4831//2637 4830//2637 4833//2637 5826//2637 5827//2637
+f 5815//2638 4825//2638 4824//2638 4831//2638 5827//2638 5816//2638
+f 4856//2639 4855//2639 4859//2639 5366//2639 5828//2639 5829//2639
+f 4851//2640 4856//2640 5829//2640 5830//2640 4852//2640
+f 5831//2641 5832//2641 4853//2641 4852//2641 5830//2641
+f 5833//2642 5834//2642 5832//2642 5831//2642
+f 5835//2643 5834//2643 5833//2643 5836//2643
+f 5828//2644 5366//2644 5368//2644 5370//2644 5835//2644 5836//2644
+f 5837//2677 5838//2677 5839//2677 5840//2677
+f 5841//2646 5838//2646 5837//2646 5842//2646
+f 5843//2647 5844//2647 5841//2647 5842//2647 5845//2647 5846//2647
+f 5847//2648 5848//2648 5843//2648 5846//2648 5849//2648
+f 5850//2649 5851//2649 5847//2649 5849//2649
+f 5840//2650 5839//2650 5851//2650 5850//2650 5852//2650
+f 5853//2651 5854//2651 5855//2651 5856//2651 5857//2651
+f 5858//2652 5404//2652 5386//2652 5385//2652 5854//2652 5853//2652
+f 5400//2653 5403//2653 5404//2653 5858//2653 5859//2653
+f 5860//2654 5401//2654 5400//2654 5859//2654 5861//2654 5862//2654 5863//2654
+f 5864//2655 5865//2655 5863//2655 5862//2655 5866//2655
+f 5855//2656 5864//2656 5866//2656 5856//2656
+f 5867//2657 5868//2657 5869//2657 5870//2657 5871//2657
+f 5872//2658 5873//2658 5874//2658 5875//2658 5876//2658 5868//2658 5867//2658
+f 5877//2659 5878//2659 5879//2659 5880//2659 5873//2659 5872//2659
+f 5881//2660 5882//2660 5883//2660 5884//2660 5879//2660 5878//2660
+f 5885//2661 5886//2661 5882//2661 5881//2661 5887//2661 5888//2661
+f 5871//2662 5870//2662 5889//2662 5890//2662 5885//2662 5888//2662 5891//2662 5892//2662
+f 5893//2663 5894//2663 5895//2663 5896//2663 5897//2663
+f 5898//2664 5899//2664 5893//2664 5897//2664 5900//2664
+f 5901//2682 5430//2682 5429//2682 5898//2682 5900//2682
+f 5431//2666 5430//2666 5901//2666
+f 5896//2667 5895//2667 5902//2667 5425//2667 5427//2667 5903//2667
+f 5904//2668 5905//2668 5906//2668 5907//2668 5908//2668
+f 5909//2669 5910//2669 5904//2669 5908//2669 5911//2669 5912//2669
+f 5913//2670 5910//2670 5909//2670 5914//2670
+f 5915//2671 5916//2671 5913//2671 5914//2671 5917//2671
+f 5918//2672 5919//2672 5916//2672 5915//2672 5920//2672
+f 5906//2673 5918//2673 5920//2673 5921//2673 5907//2673
+f 5922//2628 5923//2628 5924//2628 5925//2628
+f 5926//2629 5927//2629 5928//2629 5929//2629
+f 5930//2630 5931//2630 5932//2630 5926//2630 5929//2630 5933//2630 5934//2630
+f 5935//2631 5936//2631 5934//2631 5933//2631 5937//2631
+f 5924//2632 5938//2632 5936//2632 5935//2632 5925//2632
+f 5939//2633 5940//2633 5941//2633 5942//2633 5943//2633 5944//2633
+f 5945//2634 5946//2634 5947//2634 5940//2634 5939//2634
+f 5465//2635 5464//2635 5468//2635 5946//2635 5945//2635 5948//2635
+f 5949//2636 5478//2636 5477//2636 5479//2636 5950//2636
+f 5951//2637 5952//2637 5949//2637 5950//2637 5953//2637 5954//2637
+f 5942//2638 5941//2638 5951//2638 5954//2638
+f 5955//2639 5491//2639 5490//2639 5956//2639 5957//2639 5958//2639
+f 5959//2640 5960//2640 5003//2640 5002//2640 5007//2640 5961//2640 5958//2640 5957//2640 5962//2640
+f 5963//2641 5964//2641 5959//2641 5962//2641 5965//2641 5966//2641
+f 5967//2684 5968//2684 5969//2684 5964//2684 5963//2684
+f 5970//2643 5971//2643 5972//2643 5968//2643 5967//2643
+f 5956//2644 5490//2644 5489//2644 5493//2644 5971//2644 5970//2644 5973//2644 5974//2644
+f 5975//2645 4443//2645 4442//2645 4447//2645 5976//2645 5977//2645
+f 5978//2646 5975//2646 5977//2646 5979//2646
+f 5980//2647 5978//2647 5979//2647 5981//2647
+f 5982//2648 5983//2648 5980//2648 5981//2648 5984//2648 5985//2648
+f 5986//2649 5502//2649 5501//2649 5506//2649 5982//2649 5985//2649
+f 4449//2650 5502//2650 5986//2650 4450//2650
+f 5987//2651 5988//2651 5989//2651 5990//2651 5991//2651 5992//2651 5993//2651
+f 5994//2652 5031//2652 5030//2652 5987//2652 5993//2652
+f 5045//2653 5032//2653 5031//2653 5994//2653 5995//2653
+f 5996//2654 5044//2654 5043//2654 5045//2654 5995//2654 5997//2654
+f 5998//2655 5996//2655 5997//2655 5999//2655
+f 5990//2656 6000//2656 5998//2656 5999//2656 6001//2656 5991//2656
+f 6002//2657 6003//2657 6004//2657 6005//2657 6006//2657
+f 6007//2658 6002//2658 6006//2658 6008//2658
+f 6009//2659 6010//2659 6007//2659 6008//2659
+f 6011//2660 6012//2660 6010//2660 6009//2660
+f 6013//2690 6014//2690 6012//2690 6011//2690 6015//2690 6016//2690
+f 6004//2662 6003//2662 6017//2662 6013//2662 6016//2662
+f 6018//2663 6019//2663 6020//2663 6021//2663 6022//2663
+f 6023//2664 6024//2664 6019//2664 6018//2664 6025//2664
+f 6026//2665 5067//2665 5069//2665 5072//2665 6027//2665 6023//2665 6025//2665
+f 6028//2666 5064//2666 5063//2666 5067//2666 6026//2666
+f 5072//2708 5071//2708 6027//2708
+f 6029//2678 5078//2678 5065//2678 5064//2678 6028//2678 6030//2678
+f 6021//2667 6029//2667 6030//2667 6022//2667
+f 6031//2668 6032//2668 6033//2668 5085//2668 5084//2668
+f 6034//2669 6033//2669 6032//2669 6035//2669 6036//2669 6037//2669
+f 6038//2670 6039//2670 6040//2670 6034//2670 6037//2670 6041//2670
+f 6042//2671 6043//2671 6039//2671 6038//2671 6044//2671
+f 5087//2672 6043//2672 6042//2672 5088//2672
+f 6045//2628 5101//2628 5100//2628 5102//2628 6046//2628
+f 6047//2674 6048//2674 6045//2674 6046//2674 6049//2674
+f 6050//2629 6051//2629 6047//2629 6049//2629
+f 6052//2630 6053//2630 6051//2630 6050//2630
+f 6054//2631 5103//2631 5107//2631 6053//2631 6052//2631
+f 5110//2631 6055//2631 5111//2631
+f 5104//2632 5103//2632 6054//2632
+f 5110//2632 5109//2632 6055//2632
+f 6056//2633 6057//2633 6058//2633 6059//2633 6060//2633
+f 6061//2634 6062//2634 6063//2634 6057//2634 6056//2634
+f 6064//2635 6062//2635 6061//2635 6065//2635
+f 6066//2636 6067//2636 6064//2636 6065//2636 6068//2636
+f 6069//2637 6070//2637 6071//2637 6066//2637 6068//2637 6072//2637
+f 6060//2638 6059//2638 6073//2638 6069//2638 6072//2638
+f 6074//2639 6075//2639 6076//2639 6077//2639 6078//2639 6079//2639
+f 6080//2640 6081//2640 6082//2640 6083//2640 6075//2640 6074//2640 6084//2640
+f 6085//2641 6086//2641 6081//2641 6080//2641
+f 6086//2642 6085//2642 6087//2642 6088//2642
+f 6089//2643 6090//2643 6091//2643 6088//2643 6087//2643
+f 6092//2644 6093//2644 6078//2644 6077//2644 6094//2644 6090//2644 6089//2644
+f 6095//2677 6096//2677 6097//2677 6098//2677 6099//2677
+f 6100//2646 6101//2646 6102//2646 6096//2646 6095//2646 6103//2646
+f 6100//2647 6104//2647 6105//2647 6106//2647 6101//2647
+f 6107//2648 6106//2648 6105//2648 6108//2648 6109//2648 6110//2648 6111//2648
+f 6112//2649 6113//2649 6111//2649 6110//2649
+f 6098//2650 6097//2650 6113//2650 6112//2650 6114//2650
+f 6115//2651 6116//2651 6117//2651 6118//2651 6119//2651
+f 6120//2652 6121//2652 6116//2652 6115//2652
+f 6122//2653 4606//2653 4605//2653 4612//2653 6121//2653 6120//2653
+f 6123//2654 4626//2654 4607//2654 4606//2654 6122//2654
+f 6124//2655 4623//2655 4626//2655 6123//2655 6125//2655
+f 6118//2656 6124//2656 6125//2656 6119//2656
+f 6126//2657 6127//2657 6128//2657 6129//2657
+f 5673//2658 5657//2658 5656//2658 6126//2658 6129//2658 6130//2658
+f 5670//2659 5673//2659 6130//2659 6131//2659 5671//2659
+f 6132//2660 6133//2660 5672//2660 5671//2660 6131//2660 6134//2660
+f 6135//2690 6136//2690 6133//2690 6132//2690
+f 6128//2662 6127//2662 6137//2662 6136//2662 6135//2662 6138//2662
+f 6139//2663 6140//2663 6141//2663 6142//2663
+f 6143//2664 6140//2664 6139//2664 6144//2664
+f 6145//2665 6146//2665 6143//2665 6144//2665
+f 5682//2666 5681//2666 6146//2666 6145//2666
+f 6142//2667 6141//2667 5674//2667 5678//2667
+f 6147//2668 5698//2668 5697//2668 5701//2668 6148//2668 6149//2668 6150//2668
+f 6151//2669 6152//2669 6153//2669 6147//2669 6150//2669
+f 6078//2670 6093//2670 6154//2670 6155//2670 6152//2670 6151//2670 6079//2670
+f 6093//2671 6092//2671 6156//2671 6157//2671 6158//2671 6159//2671 6154//2671
+f 6160//2672 5704//2672 5703//2672 6161//2672 6162//2672 6163//2672 6157//2672 6156//2672 6164//2672 6165//2672
+f 5701//2673 5700//2673 6148//2673
+f 5704//2673 6160//2673 6166//2673 6167//2673 5705//2673
+f 4695//2628 6168//2628 6169//2628 4696//2628
+f 6170//2629 6171//2629 4692//2629 4693//2629
+f 6172//2630 6173//2630 6171//2630 6170//2630 6174//2630
+f 6175//2631 6176//2631 6172//2631 6174//2631 6177//2631
+f 6168//2632 6176//2632 6175//2632 6169//2632
+f 6178//2633 6179//2633 6180//2633 6181//2633
+f 6182//2634 6183//2634 6179//2634 6178//2634
+f 6184//2635 6183//2635 6182//2635 6185//2635
+f 6186//2636 6187//2636 6184//2636 6185//2636 6188//2636
+f 6189//2637 6190//2637 6186//2637 6188//2637 6191//2637 6192//2637
+f 6181//2638 6180//2638 6189//2638 6192//2638 6193//2638
+f 4735//2639 5750//2639 6194//2639 4736//2639
+f 4727//2640 4733//2640 6195//2640 4728//2640
+f 6196//2641 4734//2641 4729//2641 4728//2641 6195//2641 6197//2641
+f 6198//2642 6199//2642 6196//2642 6197//2642
+f 6200//2643 6201//2643 6202//2643 6199//2643 6198//2643
+f 6194//2644 5750//2644 5749//2644 5752//2644 6201//2644 6200//2644
+f 6203//2677 6204//2677 6205//2677 6206//2677
+f 5027//2646 5026//2646 6204//2646 6203//2646 6207//2646 6208//2646
+f 6209//2647 5025//2647 5024//2647 5027//2647 6208//2647 6210//2647
+f 6211//2648 6212//2648 6209//2648 6210//2648 6213//2648
+f 6214//2649 6215//2649 6211//2649 6213//2649
+f 6206//2650 6205//2650 6216//2650 6215//2650 6214//2650 6217//2650
+f 6218//2651 6219//2651 6104//2651 6100//2651 6103//2651 6220//2651 6221//2651
+f 6222//2652 6223//2652 6218//2652 6221//2652 6224//2652
+f 6225//2653 6222//2653 6224//2653 6226//2653
+f 6227//2654 6228//2654 6225//2654 6226//2654 6229//2654
+f 6109//2655 6108//2655 6230//2655 6231//2655 6228//2655 6227//2655
+f 6108//2656 6105//2656 6104//2656 6219//2656 6230//2656
+f 6232//2657 6233//2657 6234//2657 6235//2657 6236//2657
+f 6237//2658 4797//2658 4777//2658 4776//2658 6232//2658 6236//2658
+f 6238//2659 4793//2659 4792//2659 4797//2659 6237//2659 6239//2659
+f 6240//2660 6241//2660 4794//2660 4793//2660 6238//2660
+f 6242//2661 6241//2661 6240//2661 6243//2661
+f 6244//2662 6245//2662 6242//2662 6243//2662 6246//2662 6235//2662 6234//2662
+f 6247//2663 6248//2663 6249//2663 6250//2663 6251//2663
+f 6252//2664 6253//2664 6249//2664 6248//2664 6254//2664
+f 6255//2665 6256//2665 6252//2665 6254//2665 6257//2665
+f 6258//2666 6259//2666 6255//2666 6257//2666
+f 6260//2678 6261//2678 6259//2678 6258//2678 6262//2678
+f 6263//2667 6264//2667 6261//2667 6260//2667 6251//2667 6250//2667
+f 6265//2668 5350//2668 5349//2668 6266//2668
+f 6267//2669 6268//2669 6265//2669 6266//2669
+f 6269//2670 6270//2670 6268//2670 6267//2670
+f 6271//2671 6272//2671 6270//2671 6269//2671
+f 5352//2709 6272//2709 6271//2709 5353//2709
+f 6273//2628 6274//2628 6275//2628 6276//2628 6277//2628
+f 6278//2674 6279//2674 6273//2674 6277//2674 6280//2674
+f 6281//2629 6282//2629 6278//2629 6280//2629
+f 6283//2630 6284//2630 6285//2630 6282//2630 6281//2630
+f 6286//2631 6287//2631 6284//2631 6283//2631
+f 6275//2632 6288//2632 6287//2632 6286//2632 6276//2632
+f 6289//2633 6290//2633 6291//2633 6292//2633
+f 6293//2634 6294//2634 6295//2634 6290//2634 6289//2634
+f 6296//2635 6297//2635 6294//2635 6293//2635 6298//2635
+f 6299//2636 6296//2636 6298//2636 6300//2636
+f 6301//2637 6302//2637 6299//2637 6300//2637 6303//2637 6304//2637
+f 6292//2638 6291//2638 6305//2638 6304//2638 6303//2638
+f 6306//2639 5399//2639 5398//2639 5401//2639 5860//2639 6307//2639
+f 6308//2640 6309//2640 5396//2640 5395//2640 5399//2640 6306//2640
+f 6310//2641 6311//2641 6309//2641 6308//2641 6312//2641 6313//2641
+f 6314//2642 6315//2642 6316//2642 6311//2642 6310//2642
+f 6317//2643 6315//2643 6314//2643 6318//2643 6319//2643 6320//2643
+f 6307//2644 5860//2644 5863//2644 5865//2644 6317//2644 6320//2644
+f 6321//2677 5875//2677 5874//2677 6322//2677 6323//2677
+f 5424//2646 5407//2646 5406//2646 6321//2646 6323//2646 6324//2646
+f 5422//2647 5421//2647 5424//2647 6324//2647 6325//2647
+f 6326//2648 5423//2648 5422//2648 6325//2648 6327//2648
+f 6328//2649 5880//2649 5879//2649 5884//2649 6326//2649 6327//2649
+f 6322//2650 5874//2650 5873//2650 5880//2650 6328//2650
+f 6329//2651 6330//2651 6331//2651 6332//2651
+f 6333//2652 5902//2652 5895//2652 5894//2652 6330//2652 6329//2652
+f 5902//2653 6333//2653 5426//2653 5425//2653
+f 6334//2654 5438//2654 5437//2654 5439//2654 6335//2654
+f 6336//2655 6334//2655 6335//2655 6337//2655
+f 6331//2656 6338//2656 6336//2656 6337//2656 6332//2656
+f 5444//2657 6339//2657 6340//2657 5445//2657
+f 6341//2660 6342//2660 4958//2660 4960//2660 6343//2660
+f 6344//2661 6345//2661 6342//2661 6341//2661 6346//2661
+f 6340//2662 6339//2662 6344//2662 6346//2662 6347//2662
+f 6348//2663 6349//2663 6350//2663 6351//2663 6352//2663
+f 6353//2664 6348//2664 6352//2664 6354//2664 6355//2664
+f 6356//2665 6357//2665 6353//2665 6355//2665 6358//2665
+f 5928//2666 5927//2666 6356//2666 6358//2666
+f 6350//2667 5923//2667 5922//2667 6351//2667
+f 6359//2668 5947//2668 5946//2668 5468//2668 5467//2668 6360//2668 6361//2668 6362//2668
+f 6363//2669 6364//2669 6365//2669 6366//2669 6359//2669 6362//2669
+f 6367//2670 6368//2670 6365//2670 6364//2670 6369//2670 6370//2670 6371//2670
+f 6372//2671 6373//2671 6368//2671 6367//2671
+f 6374//2672 5471//2672 5470//2672 5474//2672 6373//2672 6372//2672 6375//2672
+f 5467//2673 5466//2673 5471//2673 6374//2673 6360//2673
+f 5485//2710 4996//2710 4995//2710 6376//2710
+f 4994//2674 6376//2674 4995//2674
+f 6377//2674 5005//2674 5004//2674
+f 5961//2629 5007//2629 5008//2629 6378//2629
+f 5004//2629 5003//2629 5960//2629 6377//2629
+f 5955//2630 5958//2630 5961//2630 6378//2630 6379//2630
+f 6380//2631 5486//2631 5491//2631 5955//2631 6379//2631
+f 5487//2632 5486//2632 6380//2632
+f 6381//2633 6382//2633 6383//2633 6384//2633
+f 5764//2634 5763//2634 6385//2634 6386//2634 6387//2634 6382//2634 6381//2634 5768//2634
+f 6388//2635 6387//2635 6386//2635 6389//2635
+f 6390//2636 6391//2636 6388//2636 6389//2636 6392//2636
+f 6393//2637 6390//2637 6392//2637 6394//2637
+f 6384//2638 6383//2638 6395//2638 6393//2638 6394//2638 6396//2638
+f 6397//2639 6398//2639 6399//2639 6400//2639 6401//2639
+f 6397//2640 6401//2640 6402//2640 6403//2640
+f 6403//2641 6402//2641 6404//2641 6405//2641 6406//2641
+f 6407//2642 6408//2642 6409//2642 6406//2642 6405//2642
+f 6410//2643 6411//2643 6408//2643 6407//2643
+f 6400//2644 6399//2644 6411//2644 6410//2644 6412//2644
+f 6413//2651 6414//2651 6415//2651 6416//2651 6417//2651 6418//2651 6419//2651
+f 6420//2652 5540//2652 5539//2652 6413//2652 6419//2652 6421//2652
+f 5554//2653 5541//2653 5540//2653 6420//2653 6422//2653
+f 6423//2654 5553//2654 5552//2654 5554//2654 6422//2654 6424//2654 6425//2654
+f 6426//2655 6423//2655 6425//2655 6427//2655
+f 6415//2656 6426//2656 6427//2656 6428//2656 6416//2656
+f 6429//2657 6430//2657 5642//2657 5641//2657 6431//2657 6432//2657
+f 5081//2658 5080//2658 6432//2658 6431//2658 5094//2658
+f 5091//2659 5093//2659 6433//2659
+f 6434//2660 6435//2660 5092//2660 5091//2660 6433//2660
+f 6436//2661 5651//2661 5648//2661 5646//2661 5645//2661 6437//2661 6435//2661 6434//2661
+f 5651//2662 6436//2662 5652//2662
+f 6430//2662 6437//2662 5645//2662 5643//2662 5642//2662
+f 6438//2663 6439//2663 6440//2663 6441//2663 6442//2663
+f 6443//2664 6444//2664 6438//2664 6442//2664 6445//2664 6446//2664
+f 6447//2665 5581//2665 5580//2665 6443//2665 6446//2665
+f 6448//2666 5574//2666 5573//2666 5581//2666 6447//2666
+f 6449//2678 5575//2678 5574//2678 6448//2678 6450//2678
+f 6440//2667 5576//2667 5575//2667 6449//2667 6441//2667
+f 6451//2668 6452//2668 5600//2668 5602//2668 6453//2668
+f 6454//2669 6455//2669 6456//2669 6457//2669 6452//2669 6451//2669
+f 4802//2670 6458//2670 6459//2670 6456//2670 6455//2670 6460//2670 6461//2670 4803//2670
+f 6458//2671 4802//2671 4801//2671 4822//2671 6462//2671 6463//2671 6464//2671 6465//2671
+f 5606//2709 5605//2709 6463//2709 6462//2709 6466//2709
+f 6467//2628 6468//2628 6469//2628 6470//2628
+f 6471//2674 6472//2674 6467//2674 6470//2674 6473//2674
+f 6083//2629 6082//2629 6471//2629 6473//2629 6474//2629
+f 6475//2630 6076//2630 6075//2630 6083//2630 6474//2630
+f 6476//2631 6094//2631 6077//2631 6076//2631 6475//2631 6477//2631
+f 6468//2632 6476//2632 6477//2632 6469//2632
+f 6478//2639 6479//2639 6480//2639 6481//2639
+f 6482//2640 6483//2640 6484//2640 6478//2640 6481//2640
+f 6485//2676 6486//2676 6483//2676 6482//2676
+f 6487//2642 6488//2642 6486//2642 6485//2642 6489//2642
+f 6490//2643 6491//2643 6487//2643 6489//2643
+f 6479//2644 6491//2644 6490//2644 6480//2644
+f 6492//2645 5176//2645 5175//2645
+f 6493//2646 6494//2646 5177//2646 5176//2646 6492//2646 6495//2646
+f 6496//2647 6494//2647 6493//2647 6497//2647
+f 6498//2648 6496//2648 6497//2648 6499//2648 6500//2648
+f 6501//2649 5180//2649 5179//2649 6498//2649 6500//2649 6502//2649 6503//2649
+f 6504//2650 5181//2650 5180//2650 6501//2650
+f 6505//2651 6506//2651 6507//2651 6508//2651 6509//2651
+f 6510//2652 6505//2652 6509//2652 6511//2652 6512//2652
+f 6513//2653 6510//2653 6512//2653 6514//2653
+f 6515//2654 6516//2654 6513//2654 6514//2654 6517//2654
+f 6518//2655 6519//2655 6520//2655 6515//2655 6517//2655
+f 6507//2656 6520//2656 6519//2656 6508//2656
+f 6521//2657 6522//2657 6523//2657 6524//2657 6525//2657
+f 6526//2658 6527//2658 6521//2658 6525//2658 6528//2658 6529//2658
+f 6530//2659 6531//2659 6532//2659 6529//2659 6528//2659
+f 6533//2660 6534//2660 6531//2660 6530//2660 6535//2660
+f 6536//2661 6537//2661 6534//2661 6533//2661 6538//2661
+f 6522//2662 6536//2662 6538//2662 6523//2662
+f 5601//2663 5595//2663 5594//2663 6539//2663 6540//2663
+f 6453//2664 5602//2664 5601//2664 6540//2664
+f 6541//2665 6465//2665 6464//2665
+f 6463//2666 5605//2666 5604//2666 6542//2666 6543//2666 6541//2666 6464//2666
+f 6542//2678 5604//2678 5603//2678 5610//2678 6544//2678 6545//2678
+f 5594//2675 5593//2675 6539//2675
+f 5610//2667 5609//2667 6544//2667
+f 6546//2633 6547//2633 6548//2633 6549//2633
+f 6550//2634 6551//2634 6547//2634 6546//2634 6552//2634
+f 6553//2635 6554//2635 6551//2635 6550//2635 6555//2635
+f 6556//2636 6553//2636 6555//2636 6557//2636
+f 6558//2637 6556//2637 6557//2637 6559//2637 6560//2637
+f 6549//2638 6548//2638 6561//2638 6558//2638 6560//2638
+f 6562//2639 6563//2639 6564//2639 6565//2639 6566//2639
+f 6567//2640 6568//2640 6569//2640 6570//2640 6563//2640 6562//2640 6571//2640 6572//2640
+f 6573//2641 6574//2641 6575//2641 6572//2641 6571//2641
+f 6576//2642 6574//2642 6573//2642 6577//2642
+f 6578//2643 6579//2643 6576//2643 6577//2643 6580//2643
+f 6566//2644 6565//2644 6581//2644 6578//2644 6580//2644
+f 5279//2645 5278//2645 6582//2645 6583//2645 6584//2645 6585//2645
+f 5783//2646 5782//2646 6584//2646 6583//2646 6586//2646
+f 6587//2648 5797//2648 5796//2648 6588//2648
+f 5282//2649 5281//2649 6587//2649 6588//2649 6589//2649
+f 4634//2711 6590//2711 4635//2711
+f 6391//2712 6390//2712 6393//2712 6395//2712
+f 6409//2712 6398//2712 6397//2712 6403//2712 6406//2712
+f 6409//2713 6408//2713 6411//2713 6399//2713 6398//2713
+f 6017//2714 6003//2714 6002//2714 6007//2714 6010//2714 6012//2714 6014//2714
+f 6520//2715 6507//2715 6506//2715 6516//2715 6515//2715
+f 6591//2715 4701//2715 4700//2715
+f 4702//2716 4701//2716 6591//2716 4718//2716
+f 5191//2716 5205//2716 5192//2716
+f 6024//2717 6020//2717 6019//2717
+f 6024//2718 6023//2718 6027//2718 5071//2718 5070//2718 5075//2718 5077//2718 5078//2718 6029//2718 6021//2718 6020//2718
+f 4908//2718 4898//2718 4897//2718 4902//2718 4906//2718
+f 5746//2719 5745//2719 4722//2719 4721//2719 4725//2719 6202//2719 6201//2719 5752//2719 5751//2719
+f 3923//2720 3910//2720 3909//2720 3917//2720 3916//2720 3920//2720 4358//2720
+f 4640//2721 4639//2721 4643//2721 6590//2721
+f 6117//2721 6116//2721 6121//2721 4612//2721 4611//2721 4615//2721 4622//2721 4621//2721 4624//2721
+f 6592//2721 5786//2721 5785//2721 5789//2721
+f 4418//2722 4395//2722 4394//2722 4403//2722 4409//2722
+f 5127//2722 5117//2722 5116//2722 5123//2722 5122//2722 5125//2722 5128//2722
+f 6113//2723 6097//2723 6096//2723 6102//2723 6107//2723 6111//2723
+f 4699//2724 4698//2724 4706//2724 6591//2724
+f 5624//2724 5619//2724 5618//2724
+f 5212//2724 5207//2724 5210//2724
+f 5592//2725 5577//2725 5576//2725 6440//2725 6439//2725 6593//2725
+f 4973//2725 4967//2725 4966//2725 4969//2725
+f 5169//2725 5168//2725 5174//2725 5187//2725
+f 3504//2726 3507//2726 3510//2726 3501//2726 3500//2726
+f 2939//2727 2941//2727 2930//2727 2929//2727 2936//2727 2935//2727
+f 4364//2728 4366//2728 4359//2728 4358//2728 3920//2728 2173//2728 2172//2728 2177//2728 2181//2728
+f 2320//2728 2304//2728 2303//2728 2311//2728 2321//2728
+f 6590//2729 4634//2729 4633//2729 4637//2729
+f 4640//2730 6590//2730 4637//2730 4636//2730
+f 5788//2731 5787//2731 5793//2731 6592//2731
+f 5919//2731 5905//2731 5904//2731 5910//2731 5913//2731 5916//2731
+f 6107//2732 6102//2732 6101//2732 6106//2732
+f 6594//2732 6070//2732 6069//2732 6073//2732
+f 6230//2732 6219//2732 6218//2732 6223//2732 6231//2732
+f 6199//2733 6202//2733 4725//2733 4724//2733 4730//2733 4734//2733 6196//2733
+f 5444//2733 5442//2733 5441//2733 4946//2733 4945//2733 4948//2733 4952//2733 6345//2733 6344//2733 6339//2733
+f 2757//2734 2756//2734 2747//2734 2746//2734 2749//2734
+f 6063//2735 6594//2735 6058//2735 6057//2735
+f 6595//2735 6301//2735 6304//2735 6305//2735
+f 4895//2735 4885//2735 4886//2735 5519//2735 4470//2735 4469//2735 4474//2735 4892//2735 4894//2735
+f 5589//2736 6593//2736 5585//2736 5584//2736
+f 5165//2737 5150//2737 5149//2737 5153//2737 5158//2737 5161//2737 5166//2737
+f 6595//2738 6295//2738 6294//2738 6297//2738
+f 6071//2739 6594//2739 6067//2739 6066//2739
+f 3929//2740 3928//2740 3513//2740 3512//2740 3518//2740 3521//2740 3940//2740
+f 4248//2741 4251//2741 3445//2741 3444//2741 3447//2741 3449//2741 3437//2741 3436//2741 4246//2741 4245//2741
+f 6302//2742 6595//2742 6297//2742 6296//2742 6299//2742
+f 6429//2743 6432//2743 5080//2743 5079//2743 5085//2743 6033//2743 6034//2743 6040//2743
+f 6040//2744 6039//2744 6043//2744 5087//2744 5086//2744 5092//2744 6435//2744 6437//2744 6430//2744 6429//2744
+f 5647//2744 5650//2744 5638//2744 5637//2744 5644//2744
+f 6250//2744 6249//2744 6253//2744 6263//2744
+f 6551//2745 6554//2745 6561//2745 6548//2745 6547//2745
+f 2215//2746 2208//2746 2212//2746
+f 2256//2746 2255//2746 2259//2746 2261//2746
+f 6561//2747 6554//2747 6553//2747 6556//2747 6558//2747
+f 3176//2748 3181//2748 3180//2748 3177//2748
+f 6264//2749 6263//2749 6253//2749 6252//2749 6256//2749
+f 4455//2750 4440//2750 4439//2750 5983//2750 5982//2750 5506//2750 5505//2750 5507//2750 5497//2750
+f 6285//2751 6279//2751 6278//2751 6282//2751
+f 2428//2752 2417//2752 2416//2752 3422//2752 3421//2752 3425//2752 3427//2752 2421//2752 2425//2752 2427//2752
+f 2328//2752 2332//2752 2338//2752 2324//2752 2323//2752
+f 3795//2753 6596//2753 3819//2753 3796//2753
+f 6596//2754 3815//2754 3814//2754 3819//2754
+f 4369//2754 4376//2754 6597//2754 4370//2754
+f 6597//2755 4392//2755 4391//2755
+f 4118//2756 4121//2756 2141//2756 2140//2756 2144//2756 2145//2756 2132//2756 2131//2756 2137//2756 4114//2756 4113//2756 4119//2756
+f 3176//2757 3175//2757 2634//2757 2633//2757 2638//2757 2637//2757 2640//2757 2643//2757 2646//2757 2648//2757 3181//2757
+f 2761//2757 2760//2757 6598//2757 2769//2757 2768//2757
+f 4871//2758 6599//2758 4865//2758 4864//2758
+f 5990//2759 5989//2759 6000//2759
+f 4184//2760 6596//2760 3795//2760 3794//2760 3802//2760 4179//2760
+f 6311//2761 6316//2761 5384//2761 5390//2761 5391//2761 5396//2761 6309//2761
+f 6000//2762 5989//2762 5988//2762 5038//2762 5037//2762 5040//2762 5044//2762 5996//2762 5998//2762
+f 2860//2763 2862//2763 2854//2763 2853//2763 2858//2763 2857//2763
+f 3764//2763 3357//2763 3356//2763 3757//2763 3759//2763 3762//2763
+f 3868//2764 6600//2764 3869//2764
+f 3815//2765 6596//2765 3811//2765 3810//2765
+f 4383//2765 6597//2765 4376//2765 4375//2765 4378//2765
+f 2945//2765 3878//2765 6600//2765 2964//2765 2946//2765
+f 6597//2766 4387//2766 4386//2766
+f 6598//2767 2299//2767 2298//2767
+f 3745//2768 6598//2768 2298//2768 2297//2768 2301//2768 3742//2768
+f 2198//2768 2187//2768 2186//2768 2190//2768 2194//2768 2199//2768
+f 4870//2769 6599//2769 4871//2769
+f 6338//2769 6331//2769 6330//2769 5894//2769 5893//2769 5899//2769
+f 4875//2770 4874//2770 4878//2770 6599//2770
+f 5535//2771 5537//2771 5521//2771 5520//2771 5526//2771 5530//2771 5532//2771
+f 4387//2772 6597//2772 4382//2772 4385//2772
+f 4661//2773 4667//2773 6601//2773 4680//2773 4679//2773 4662//2773
+f 5719//2774 5724//2774 5226//2774 5225//2774 5230//2774 5716//2774
+f 3959//2775 3565//2775 3548//2775 3547//2775 3552//2775 3954//2775
+f 6600//2776 3868//2776 3867//2776 3872//2776
+f 2354//2776 2353//2776 2360//2776 2364//2776
+f 2953//2777 2960//2777 6600//2777 3872//2777 3871//2777 2954//2777
+f 2369//2777 2355//2777 2354//2777 2364//2777 2363//2777 2367//2777 2366//2777
+f 3258//2778 3257//2778 2235//2778 2234//2778 2237//2778 2239//2778
+f 6601//2779 4667//2779 4666//2779 4671//2779
+f 6189//2779 6180//2779 6179//2779 6183//2779 6184//2779 6187//2779 6190//2779
+f 4556//2780 4541//2780 4540//2780 4545//2780 4548//2780 4554//2780 4557//2780
+f 4511//2781 4510//2781 4515//2781 4525//2781
+f 2067//2782 2066//2782 2054//2782 2053//2782 2059//2782 2061//2782
+f 4674//2783 6601//2783 4671//2783 4670//2783
+f 6187//2783 6186//2783 6190//2783
+f 4422//2783 4421//2783 4425//2783 4436//2783
+f 6171//2783 6173//2783 4688//2783 4687//2783 4691//2783 4692//2783
+f 5299//2784 5292//2784 5291//2784 5770//2784 5769//2784 5774//2784 5780//2784
+f 3984//2785 3978//2785 3977//2785 3980//2785
+f 3857//2786 3849//2786 3848//2786 4213//2786 4212//2786 4217//2786 4220//2786 3858//2786
+f 4170//2787 4169//2787 4174//2787 4177//2787
+f 5710//2788 6602//2788 6161//2788 5703//2788 5702//2788 5708//2788
+f 6488//2789 6484//2789 6483//2789 6486//2789
+f 3062//2790 3057//2790 3056//2790 3059//2790
+f 3115//2791 3113//2791 3112//2791
+f 4220//2792 4219//2792 3852//2792 3851//2792 3855//2792 3858//2792
+f 3486//2792 3485//2792 2994//2792 2993//2792 3000//2792 3003//2792 3494//2792 3493//2792
+f 4171//2793 4166//2793 4165//2793
+f 2440//2793 2441//2793 2431//2793 2430//2793 2435//2793 2437//2793
+f 6527//2794 6537//2794 6536//2794 6522//2794 6521//2794
+f 6245//2794 4788//2794 4787//2794 4794//2794 6241//2794 6242//2794
+f 5255//2795 5242//2795 5241//2795 5245//2795 5249//2795
+f 6270//2796 6272//2796 5352//2796 5351//2796 5358//2796 5345//2796 5344//2796 5350//2796 6265//2796 6268//2796
+f 2557//2797 2566//2797 2576//2797 2558//2797
+f 2536//2797 2524//2797 2523//2797 2527//2797 2530//2797 2533//2797 2532//2797
+f 5811//2798 5799//2798 5798//2798 5802//2798 5805//2798
+f 3947//2799 3951//2799 3536//2799 3535//2799 3541//2799 3948//2799
+f 2379//2800 6603//2800 2380//2800
+f 2387//2801 2374//2801 2373//2801 6603//2801 2388//2801
+f 2573//2802 2576//2802 2566//2802 2565//2802 2571//2802 2570//2802
+f 2533//2802 2530//2802 2529//2802
+f 4153//2802 4152//2802 2828//2802 2827//2802 2837//2802
+f 6570//2803 6569//2803 6581//2803 6565//2803 6564//2803
+f 6157//2804 6163//2804 6602//2804 6158//2804
+f 4656//2805 4660//2805 4653//2805 4652//2805 4654//2805
+f 4575//2806 4574//2806 4561//2806 4560//2806 5131//2806 5130//2806 5135//2806
+f 5322//2807 5304//2807 5303//2807 5312//2807 5314//2807 5316//2807
+f 2384//2808 2388//2808 6603//2808 2382//2808 2381//2808
+f 5482//2809 5495//2809 5483//2809
+f 3602//2810 3601//2810 2093//2810 2092//2810 2097//2810 2100//2810 3608//2810 3609//2810
+f 2974//2810 2977//2810 6604//2810 2968//2810
+f 2969//2811 2968//2811 6604//2811
+f 2839//2812 2843//2812 2840//2812
+f 3196//2813 3184//2813 3183//2813 3189//2813 3197//2813
+f 6576//2814 6579//2814 6568//2814 6567//2814 6575//2814 6574//2814
+f 6545//2814 6544//2814 5609//2814 5608//2814 5597//2814 5596//2814 5600//2814 6452//2814 6457//2814 6459//2814 6458//2814 6465//2814 6541//2814 6543//2814
+f 4799//2814 6605//2814 4820//2814 4800//2814
+f 5135//2815 5134//2815 4566//2815 4565//2815 4570//2815 4575//2815
+f 3313//2816 3296//2816 3295//2816 3301//2816 3300//2816 3303//2816 3306//2816 4104//2816 4106//2816 4107//2816 4100//2816
+f 2126//2817 2113//2817 2112//2817 2118//2817 3612//2817 3615//2817 2127//2817
+f 2605//2818 2607//2818 2613//2818 2601//2818 2600//2818
+f 6575//2819 6567//2819 6572//2819
+f 6459//2819 6457//2819 6456//2819
+f 4807//2819 6605//2819 4799//2819
+f 5485//2820 6376//2820 4994//2820 4993//2820 5000//2820 5005//2820 6377//2820 5960//2820 5959//2820 5964//2820 5969//2820 5972//2820 5971//2820 5493//2820 5492//2820 5495//2820 5482//2820 5481//2820
+f 6349//2820 5931//2820 5930//2820 5938//2820 5924//2820 5923//2820 6350//2820
+f 5972//2821 5969//2821 5968//2821
+f 5938//2821 5930//2821 5934//2821 5936//2821
+f 2613//2822 2607//2822 2606//2822 2609//2822 2611//2822
+f 2661//2823 2652//2823 2651//2823 2656//2823 2657//2823
+f 6606//2824 3710//2824 3709//2824 3711//2824
+f 4811//2825 6605//2825 4807//2825 4806//2825 4808//2825
+f 4535//2825 4539//2825 4528//2825 4527//2825 4530//2825 4532//2825
+f 4817//2826 6605//2826 4811//2826 4810//2826 4813//2826
+f 4535//2826 4534//2826 4538//2826 4539//2826
+f 5566//2826 5571//2826 4935//2826 4934//2826 4940//2826 5375//2826 5374//2826 5378//2826 4929//2826 4928//2826 4933//2826 5555//2826 5559//2826 5561//2826
+f 5869//2826 5868//2826 5876//2826 6607//2826
+f 6607//2827 5890//2827 5889//2827
+f 6415//2827 6414//2827 5547//2827 5546//2827 5550//2827 5553//2827 6423//2827 6426//2827
+f 5459//2828 5458//2828 5460//2828 5462//2828
+f 3576//2829 3578//2829 3097//2829 3096//2829 3086//2829 3085//2829 3090//2829 4302//2829 4306//2829 3571//2829 3570//2829 3573//2829
+f 6608//2829 4298//2829 4297//2829 4300//2829
+f 4325//2830 4331//2830 4337//2830 4326//2830
+f 6607//2831 5886//2831 5885//2831 5890//2831
+f 4495//2831 4500//2831 4509//2831 4496//2831
+f 5026//2832 5011//2832 5010//2832 5015//2832 5019//2832 5021//2832 5020//2832 5025//2832 6209//2832 6212//2832 6216//2832 6205//2832 6204//2832
+f 3596//2833 3599//2833 3126//2833 3125//2833 3129//2833 3133//2833
+f 6606//2834 3268//2834 3267//2834 3271//2834
+f 3707//2835 3706//2835 3710//2835 6606//2835 3273//2835 3272//2835 3276//2835 4087//2835
+f 3071//2836 3074//2836 6608//2836 4282//2836 4286//2836 3066//2836 3065//2836
+f 4299//2837 6608//2837 4293//2837 4292//2837
+f 3823//2837 3827//2837 2901//2837 2900//2837 2906//2837 3824//2837
+f 6609//2838 4024//2838 4023//2838
+f 4127//2839 4132//2839 4142//2839 4128//2839
+f 2594//2839 2578//2839 2577//2839 2583//2839 2589//2839 2595//2839
+f 5875//2840 6321//2840 5406//2840 5405//2840 5411//2840 6607//2840 5876//2840
+f 5884//2841 5883//2841 6607//2841 5418//2841 5417//2841 5423//2841 6326//2841
+f 5886//2842 6607//2842 5883//2842 5882//2842
+f 4507//2842 4509//2842 4500//2842 4499//2842 4502//2842 4505//2842
+f 3846//2843 3837//2843 3836//2843 3844//2843 3843//2843
+f 5018//2844 5021//2844 5019//2844
+f 4981//2844 4980//2844 4492//2844 4480//2844 4479//2844 4483//2844 4992//2844
+f 3658//2845 3662//2845 3204//2845 3203//2845 3207//2845 3666//2845 3665//2845 3659//2845
+f 2273//2846 2264//2846 2263//2846 2268//2846 2269//2846 2271//2846
+f 4138//2847 4135//2847 4134//2847
+f 3844//2848 3836//2848 3835//2848 3840//2848 3839//2848 3842//2848
+f 5690//2849 5675//2849 5674//2849 6141//2849 6140//2849 6143//2849 6146//2849 5681//2849 5680//2849 5684//2849 5689//2849 5738//2849 5740//2849 5731//2849 5730//2849
+f 2922//2850 2921//2850 2916//2850 2915//2850 2918//2850
+f 4148//2851 2822//2851 2824//2851 2804//2851 2803//2851 2808//2851 2813//2851 2812//2851 2819//2851 2821//2851
+f 4320//2852 4323//2852 4311//2852 4310//2852 4317//2852 4316//2852
+f 3154//2853 3136//2853 3135//2853 3142//2853 3147//2853 3146//2853
+f 3154//2854 3146//2854 3145//2854 3150//2854 3153//2854
+f 2540//2854 2539//2854 2544//2854 6610//2854
+f 3840//2855 3835//2855 3834//2855
+f 6610//2855 2554//2855 2553//2855 2556//2855
+f 2510//2855 2486//2855 2485//2855 2501//2855 2500//2855 2507//2855
+f 2801//2855 2776//2855 2775//2855 2784//2855 2788//2855 4203//2855 4196//2855
+f 3625//2856 3624//2856 6611//2856 3642//2856
+f 3629//2857 6611//2857 3630//2857
+f 4266//2857 4258//2857 4260//2857 4262//2857
+f 3331//2858 3319//2858 3318//2858 3322//2858 3324//2858 3326//2858 3329//2858
+f 3681//2859 3680//2859 3231//2859 3230//2859 4079//2859 4081//2859 4083//2859 4073//2859 4072//2859 3236//2859 3218//2859 3217//2859 3221//2859 3225//2859 3672//2859 3675//2859
+f 2480//2860 2471//2860 2470//2860 2474//2860 2477//2860 2478//2860
+f 3894//2861 3893//2861 6612//2861 3907//2861 3906//2861
+f 3454//2861 3469//2861 3455//2861
+f 2866//2862 2865//2862 2887//2862
+f 3740//2862 3724//2862 3725//2862 3728//2862 3732//2862 3735//2862 3734//2862 3738//2862
+f 3740//2863 3738//2863 3737//2863
+f 2555//2864 6610//2864 2549//2864 2548//2864
+f 4043//2864 4028//2864 4027//2864 4033//2864 4035//2864 4038//2864 4044//2864
+f 4038//2865 4037//2865 4041//2865 4044//2865
+f 2666//2866 6613//2866 2681//2866 2667//2866
+f 5267//2867 5270//2867 5262//2867 5261//2867 5264//2867
+f 6288//2868 6274//2868 6273//2868 6279//2868 6285//2868 6284//2868 6287//2868
+f 5113//2869 5097//2869 5096//2869 5101//2869 6045//2869 6048//2869
+f 6127//2870 6126//2870 5656//2870 5655//2870 5663//2870 6137//2870
+f 6212//2871 6211//2871 6215//2871 6216//2871
+f 2677//2872 2679//2872 6613//2872 2674//2872 2673//2872
+f 6612//2873 3898//2873 3897//2873 3900//2873
+f 3634//2874 3633//2874 3637//2874 6611//2874
+f 2739//2875 2719//2875 2718//2875 2724//2875 2737//2875
+f 3501//2876 3510//2876 3509//2876 3497//2876 3496//2876
+f 6590//2877 4643//2877 4642//2877 4646//2877
+f 6117//2877 4624//2877 4623//2877 6124//2877 6118//2877
+f 5782//2877 5781//2877 5786//2877 6592//2877 6585//2877 6584//2877
+f 4750//2877 4753//2877 4743//2877 4742//2877 4745//2877 4748//2877
+f 5755//2878 5754//2878 5273//2878 5272//2878 5279//2878 6585//2878 6592//2878 5767//2878
+f 6391//2879 6395//2879 6383//2879 6382//2879 6387//2879 6388//2879
+f 5797//2879 6587//2879 5281//2879 5280//2879 5287//2879 5762//2879 5765//2879 5767//2879 6592//2879 5792//2879 5795//2879
+f 6516//2880 6506//2880 6505//2880 6510//2880 6513//2880
+f 4700//2880 4699//2880 6591//2880
+f 5626//2880 5614//2880 5613//2880 5616//2880 5619//2880 5624//2880 5623//2880
+f 4974//2881 4963//2881 4962//2881 4967//2881 4973//2881 4972//2881
+f 4908//2882 4907//2882 4911//2882 4899//2882 4898//2882
+f 3917//2883 3909//2883 3908//2883 3914//2883
+f 2304//2884 2320//2884 2319//2884 2305//2884
+f 4403//2885 4394//2885 4393//2885 4401//2885
+f 5116//2885 5115//2885 5120//2885 5123//2885
+f 4417//2886 4416//2886 4418//2886 4409//2886 4408//2886
+f 5128//2887 5125//2887 5124//2887
+f 5060//2886 5050//2886 5049//2886 5052//2886 5056//2886 5058//2886 5057//2886
+f 4714//2888 6591//2888 4706//2888 4705//2888 4710//2888
+f 5219//2888 5208//2888 5207//2888 5212//2888 5211//2888 5214//2888 5216//2888
+f 4718//2889 6591//2889 4714//2889 4713//2889 4717//2889
+f 5205//2889 5191//2889 5190//2889 5196//2889 5198//2889 5200//2889 5203//2889
+f 6438//2890 6444//2890 6593//2890 6439//2890
+f 2929//2891 2928//2891 2933//2891 2936//2891
+f 2747//2891 2756//2891 2755//2891 2742//2891 2741//2891
+f 4617//2892 4622//2892 4615//2892 4614//2892
+f 6592//2892 5789//2892 5788//2892
+f 5792//2893 6592//2893 5793//2893
+f 5906//2893 5905//2893 5919//2893 5918//2893
+f 4407//2894 4413//2894 4417//2894 4408//2894
+f 6059//2894 6058//2894 6594//2894 6073//2894
+f 5058//2894 5056//2894 5055//2894
+f 5592//2895 6593//2895 5589//2895 5588//2895 5590//2895
+f 6496//2895 6498//2895 5179//2895 5178//2895 5185//2895 5188//2895 5187//2895 5174//2895 5173//2895 5177//2895 6494//2895
+f 5188//2896 5185//2896 5184//2896
+f 6342//2897 6345//2897 4952//2897 4951//2897 4955//2897 4958//2897
+f 2317//2898 2321//2898 2311//2898 2310//2898 2313//2898
+f 6295//2899 6595//2899 6305//2899 6291//2899 6290//2899
+f 5511//2899 5510//2899 5514//2899 4463//2899 4462//2899 4470//2899 5519//2899
+f 6594//2900 6071//2900 6070//2900
+f 6228//2900 6231//2900 6223//2900 6222//2900 6225//2900
+f 6444//2901 6443//2901 5580//2901 5579//2901 5586//2901 6593//2901
+f 6593//2902 5586//2902 5585//2902
+f 2751//2903 2757//2903 2749//2903 2748//2903
+f 2210//2904 2207//2904 2206//2904
+f 2221//2905 2202//2905 2201//2905 2207//2905 2210//2905 2209//2905 2277//2905
+f 3438//2906 3437//2906 3449//2906 3448//2906
+f 5161//2907 5160//2907 5166//2907
+f 6067//2908 6594//2908 6063//2908 6062//2908 6064//2908
+f 6595//2908 6302//2908 6301//2908
+f 3937//2909 3940//2909 3521//2909 3520//2909 3524//2909 3528//2909 3935//2909
+f 4062//2910 4046//2910 4045//2910 4052//2910 4063//2910
+f 2278//2911 2277//2911 2209//2911 2208//2911 2215//2911 2214//2911 2282//2911 2286//2911 2287//2911
+f 5654//2912 5639//2912 5638//2912 5650//2912 5649//2912
+f 2518//2913 2520//2913 2252//2913 2251//2913 2256//2913 2261//2913 2248//2913 2247//2913 2516//2913 2515//2913
+f 5361//2914 5360//2914 4844//2914 4843//2914 4848//2914 4853//2914 5832//2914 5834//2914 5835//2914 5370//2914 5369//2914
+f 4059//2915 4063//2915 4052//2915 4051//2915 4056//2915
+f 4865//2916 6599//2916 4884//2916 4866//2916
+f 6264//2917 6256//2917 6255//2917 6259//2917 6261//2917
+f 5983//2918 4439//2918 4438//2918 4443//2918 5975//2918 5978//2918 5980//2918
+f 5951//2918 5941//2918 5940//2918 5947//2918 6359//2918 6366//2918 5952//2918
+f 2337//2919 2338//2919 2332//2919 2331//2919 2335//2919
+f 2719//2919 2739//2919 2720//2919
+f 4225//2920 4224//2920 4230//2920 4236//2920
+f 4241//2921 4240//2921 4226//2921 4225//2921 4236//2921 4235//2921
+f 4371//2922 4370//2922 6597//2922 4391//2922 4390//2922
+f 4113//2923 4112//2923 4116//2923 4119//2923
+f 2638//2924 2633//2924 2632//2924
+f 6597//2925 4386//2925 4392//2925
+f 2760//2926 2759//2926 2290//2926 2289//2926 2294//2926 2299//2926 6598//2926
+f 6599//2927 4881//2927 4880//2927 4884//2927
+f 3764//2928 3763//2928 3362//2928 3361//2928 3349//2928 3348//2928 3351//2928 3357//2928
+f 4238//2928 4241//2928 4235//2928 4234//2928
+f 3745//2929 3744//2929 2765//2929 2764//2929 2769//2929 6598//2929
+f 5988//2930 5987//2930 5030//2930 5029//2930 5035//2930 5038//2930
+f 5855//2930 5854//2930 5385//2930 5384//2930 6316//2930 6315//2930 6317//2930 5865//2930 5864//2930
+f 5522//2931 5521//2931 5537//2931
+f 6368//2932 6373//2932 5474//2932 5473//2932 5478//2932 5949//2932 5952//2932 6366//2932 6365//2932
+f 5236//2933 5235//2933 5222//2933 5221//2933 5227//2933 5727//2933
+f 5851//2933 5839//2933 5838//2933 5841//2933 5844//2933 5848//2933 5847//2933
+f 2853//2934 2852//2934 2856//2934 2858//2934
+f 2737//2934 2724//2934 2723//2934 2726//2934 2731//2934 2734//2934
+f 3813//2935 4188//2935 3812//2935 3811//2935 6596//2935 4184//2935 4183//2935 4186//2935 3806//2935 3808//2935
+f 3878//2935 3864//2935 3863//2935 3869//2935 6600//2935
+f 6599//2936 4870//2936 4869//2936 4875//2936
+f 5899//2936 5898//2936 5429//2936 5428//2936 5435//2936 5438//2936 6334//2936 6336//2936 6338//2936
+f 4878//2937 4877//2937 4881//2937 6599//2937
+f 5725//2938 5727//2938 5227//2938 5226//2938 5724//2938 5723//2938
+f 5848//2938 5844//2938 5843//2938
+f 6597//2939 4383//2939 4382//2939
+f 2964//2939 6600//2939 2960//2939 2959//2939 2961//2939
+f 2195//2940 2199//2940 2194//2940 2193//2940
+f 3693//2940 3692//2940 3252//2940 3251//2940 3258//2940 2239//2940 2238//2940 2241//2940 2245//2940 3697//2940
+f 3967//2941 3563//2941 3562//2941 3565//2941 3959//2941 3958//2941 3963//2941 3968//2941
+f 3967//2942 3966//2942 3559//2942 3558//2942 3563//2942
+f 3169//2942 3168//2942 3157//2942 3156//2942 3160//2942 3163//2942 4341//2942 4343//2942 4345//2942 4346//2942
+f 6601//2943 4674//2943 4673//2943 4680//2943
+f 4695//2943 4694//2943 4683//2943 4682//2943 4688//2943 6173//2943 6172//2943 6176//2943 6168//2943
+f 4557//2944 4554//2944 4553//2944
+f 5822//2944 5814//2944 5813//2944 5818//2944
+f 4842//2945 4826//2945 4825//2945 5815//2945 5814//2945 5822//2945 5821//2945
+f 5820//2946 4839//2946 4838//2946 4840//2946 4842//2946 5821//2946
+f 3968//2947 3963//2947 3962//2947
+f 3987//2947 3976//2947 3975//2947 3978//2947 3984//2947 3983//2947
+f 4523//2948 4525//2948 4515//2948 4514//2948 4519//2948 4521//2948
+f 6487//2948 6491//2948 6479//2948 6478//2948 6484//2948 6488//2948
+f 2067//2949 2061//2949 2060//2949 2063//2949
+f 3061//2949 3064//2949 3052//2949 3051//2949 3057//2949 3062//2949
+f 2367//2950 2363//2950 2362//2950
+f 4170//2951 4177//2951 3790//2951 3789//2951 3782//2951 3781//2951 3384//2951 3383//2951 3388//2951 3392//2951 4160//2951 4166//2951 4171//2951
+f 4434//2952 4436//2952 4425//2952 4424//2952 4428//2952 4430//2952
+f 6233//2952 6244//2952 6234//2952
+f 6153//2953 6602//2953 5693//2953 5692//2953 5698//2953 6147//2953
+f 5694//2954 5693//2954 6602//2954 5710//2954
+f 5820//2954 5825//2954 4832//2954 4836//2954 4839//2954
+f 6602//2955 6162//2955 6161//2955
+f 5773//2956 5777//2956 4765//2956 4764//2956 4769//2956 4772//2956 4773//2956 5297//2956 5301//2956 5779//2956 5780//2956 5774//2956
+f 5345//2956 5358//2956 5357//2956 5346//2956
+f 3115//2957 3101//2957 3100//2957 3992//2957 3991//2957 3581//2957 3580//2957 3583//2957 3586//2957 3588//2957 3110//2957 3109//2957 3113//2957
+f 3544//2958 3533//2958 3532//2958 3944//2958 3943//2958
+f 3492//2959 3494//2959 3003//2959 3002//2959 3005//2959 3010//2959
+f 6244//2960 6233//2960 6232//2960 4776//2960 4775//2960 4780//2960 4784//2960 4788//2960 6245//2960
+f 6602//2961 6153//2961 6152//2961 6155//2961
+f 6476//2961 6468//2961 6467//2961 6472//2961 6091//2961 6090//2961 6094//2961
+f 6163//2962 6162//2962 6602//2962
+f 5253//2963 5255//2963 5249//2963 5248//2963 5252//2963
+f 4653//2963 4660//2963 4659//2963 4649//2963 4648//2963
+f 6602//2964 6155//2964 6154//2964 6159//2964
+f 6082//2964 6081//2964 6086//2964 6088//2964 6091//2964 6472//2964 6471//2964
+f 5811//2965 5805//2965 5332//2965 5331//2965 5336//2965 5339//2965 5340//2965 5342//2965 5808//2965
+f 3334//2966 3333//2966 3336//2966 3338//2966 3341//2966 3748//2966 3747//2966
+f 3751//2967 3749//2967 3748//2967 3341//2967 3340//2967 3344//2967 3345//2967
+f 3942//2968 3948//2968 3541//2968 3540//2968 3543//2968 3544//2968 3943//2968
+f 2373//2969 2372//2969 2380//2969 6603//2969
+f 3472//2970 3481//2970 3484//2970 3473//2970
+f 6532//2971 6526//2971 6529//2971
+f 6534//2972 6537//2972 6527//2972 6526//2972 6532//2972 6531//2972
+f 6570//2972 6564//2972 6563//2972
+f 6602//2973 6159//2973 6158//2973
+f 2382//2974 6603//2974 2379//2974 2378//2974
+f 2567//2975 2571//2975 2565//2975 2564//2975
+f 3380//2976 3367//2976 3366//2976 4154//2976 4153//2976 2837//2976 2836//2976 2840//2976 2843//2976 2842//2976 2847//2976 3775//2976 3378//2976 3377//2976
+f 2459//2976 3883//2976 3886//2976 2454//2976 2453//2976
+f 3472//2977 3471//2977 2446//2977 2445//2977 2454//2977 3886//2977 3885//2977 3888//2977 3889//2977 3482//2977 3481//2977
+f 6578//2978 6581//2978 6569//2978 6568//2978 6579//2978
+f 4005//2979 4007//2979 3997//2979 3996//2979 4000//2979 4001//2979
+f 4350//2979 4349//2979 2151//2979 2150//2979 3653//2979 3652//2979 3656//2979 4355//2979
+f 2970//2980 2969//2980 6604//2980 2992//2980
+f 3608//2981 2100//2981 2099//2981 2102//2981 2107//2981 3606//2981
+f 2985//2981 6604//2981 2977//2981 2976//2981 2980//2981
+f 2984//2982 2989//2982 2992//2982 6604//2982 2985//2982
+f 3294//2982 3301//2982 3295//2982
+f 6542//2983 6545//2983 6543//2983
+f 6605//2983 4821//2983 4820//2983
+f 6357//2983 5932//2983 5931//2983 6349//2983 6348//2983 6353//2983
+f 3647//2984 3653//2984 2150//2984 2149//2984 2155//2984 2158//2984 2160//2984 3645//2984
+f 3615//2985 3614//2985 2622//2985 2621//2985 2626//2985 2628//2985 2629//2985 2128//2985 2127//2985
+f 3718//2985 3721//2985 3284//2985 3283//2985 3287//2985 3291//2985 4096//2985 4098//2985 4091//2985 4090//2985 3716//2985 3715//2985
+f 3194//2986 3197//2986 3189//2986 3188//2986 3191//2986
+f 6605//2987 4817//2987 4816//2987 4821//2987
+f 6357//2987 6356//2987 5927//2987 5926//2987 5932//2987
+f 5376//2987 5375//2987 4940//2987 4939//2987 4943//2987 5382//2987
+f 5870//2987 5869//2987 6607//2987 5889//2987
+f 6414//2987 6413//2987 5539//2987 5538//2987 5544//2987 5547//2987
+f 4601//2988 4578//2988 4577//2988 4583//2988 4588//2988 5140//2988 5144//2988
+f 3592//2989 3591//2989 3117//2989 3116//2989 3121//2989 3126//2989 3599//2989 3598//2989
+f 2663//2990 2653//2990 2652//2990 2661//2990 2660//2990
+f 3268//2991 6606//2991 2708//2991 2707//2991 2712//2991 4086//2991 3263//2991 3262//2991
+f 2692//2991 2689//2991 2688//2991
+f 2715//2992 2709//2992 2708//2992 6606//2992 3711//2992 3700//2992
+f 3683//2992 3682//2992 2684//2992 2683//2992 2689//2992 2692//2992 2691//2992 2694//2992 2696//2992 3688//2992 3246//2992 3245//2992 3248//2992 3239//2992 3238//2992 4069//2992 4068//2992
+f 5462//2993 5450//2993 5449//2993 5453//2993 5455//2993 5459//2993
+f 5143//2994 5145//2994 4596//2994 4595//2994 4600//2994 5633//2994 5634//2994 4602//2994 4601//2994 5144//2994
+f 4283//2995 4282//2995 6608//2995 4300//2995
+f 4331//2996 4330//2996 2080//2996 2079//2996 2084//2996 2087//2996 2088//2996 2077//2996 2076//2996 4337//2996
+f 6606//2997 3271//2997 3270//2997 3273//2997
+f 4277//2997 4281//2997 3046//2997 3045//2997 3034//2997 3033//2997 3038//2997 4270//2997 4272//2997 4276//2997
+f 3081//2998 4293//2998 6608//2998 3074//2998 3073//2998 3076//2998
+f 3572//2999 3575//2999 3576//2999 3573//2999
+f 6608//2999 4299//2999 4298//2999
+f 2905//2999 2907//2999 2409//2999 2408//2999 2394//2999 2393//2999 2399//2999 3820//2999 3824//2999 2906//2999
+f 4026//3000 4012//3000 4011//3000 4015//3000 6609//3000 4023//3000
+f 5418//3001 6607//3001 5411//3001 5410//3001 5415//3001
+f 4140//3002 4142//3002 4132//3002 4131//3002 4135//3002 4138//3002 4137//3002
+f 2595//3002 2589//3002 2588//3002 2591//3002
+f 3830//3003 3829//3003 3837//3003 3846//3003
+f 5740//3004 5739//3004 5743//3004 5732//3004 5731//3004
+f 4992//3005 4483//3005 4482//3005 4485//3005 4487//3005 4491//3005 4984//3005 4987//3005 4989//3005
+f 2349//3006 2351//3006 2341//3006 2340//3006 2345//3006 2346//3006
+f 4022//3007 6609//3007 4015//3007 4014//3007 4018//3007
+f 4024//3008 6609//3008 4022//3008 4021//3008
+f 4205//3009 4204//3009 2911//3009 2910//3009 2916//3009 2921//3009 2920//3009 2926//3009 4209//3009 4211//3009
+f 2813//3010 2808//3010 2807//3010
+f 4310//3011 4309//3011 4315//3011 4317//3011
+f 3147//3012 3142//3012 3141//3012
+f 2541//3013 2540//3013 6610//3013 2556//3013
+f 2485//3013 2491//3013 2494//3013 2501//3013
+f 5269//3014 5257//3014 5256//3014 5262//3014 5270//3014
+f 3213//3015 3663//3015 3666//3015 3207//3015 3206//3015 3209//3015
+f 3630//3015 6611//3015 3624//3015 3623//3015
+f 4266//3015 4265//3015 4267//3015 3028//3015 3027//3015 3017//3015 3016//3015 3019//3015 3022//3015 4258//3015
+f 2555//3016 2554//3016 6610//3016
+f 4203//3016 2788//3016 2791//3016 2796//3016 4197//3016 4199//3016 4202//3016
+f 4028//3016 4043//3016 4029//3016
+f 3642//3017 6611//3017 3637//3017 3636//3017 3639//3017
+f 2922//3018 2918//3018 2917//3018
+f 3331//3018 3329//3018 3328//3018
+f 6612//3019 3893//3019 3892//3019 3898//3019
+f 2550//3020 6610//3020 2544//3020 2543//3020 2546//3020
+f 6610//3021 2550//3021 2549//3021
+f 2670//3022 6613//3022 2666//3022 2665//3022
+f 6613//3023 2679//3023 2678//3023 2681//3023
+f 4629//3024 4628//3024 4635//3024 6590//3024
+f 4629//3025 6590//3025 4645//3025 4630//3025
+f 6590//3026 4646//3026 4645//3026
+f 4740//3026 4739//3026 4743//3026 4753//3026
+f 6017//3027 6014//3027 6013//3027
+f 6275//3028 6274//3028 6288//3028
+f 6047//3029 6051//3029 6053//3029 5107//3029 5106//3029 5111//3029 6055//3029 5109//3029 5108//3029 5113//3029 6048//3029
+f 6136//3030 6137//3030 5663//3030 5662//3030 5664//3030 5668//3030 5672//3030 6133//3030
+f 6613//3031 2670//3031 2669//3031 2674//3031
+f 2886//3032 2887//3032 2865//3032 2864//3032 2870//3032 3401//3032 3407//3032 3409//3032 3411//3032 2880//3032 2879//3032
+f 3731//3032 3735//3032 3732//3032
+f 3467//3033 3461//3033 3460//3033 3463//3033
+f 3902//3034 3907//3034 6612//3034 3903//3034
+f 3466//3034 3469//3034 3454//3034 3453//3034 3457//3034 3461//3034 3467//3034
+f 3903//3035 6612//3035 3900//3035 3899//3035
+f 3678//3036 3681//3036 3675//3036 3674//3036
+f 3634//3037 6611//3037 3629//3037 3628//3037
+s 1
+f 4017//3038 4019//3038 4009//3038 4013//3038 4025//3038 4020//3038
+f 2266//3038 2265//3038 2275//3038
+f 2071//3038 2070//3038 2085//3038 2082//3038
+f 4335//3038 4334//3038 4333//3038 4328//3038 4327//3038 4336//3038
+f 2650//3039 2654//3039 2662//3039 2659//3039 2658//3039 2655//3039
+f 3293//3039 3298//3039 3302//3039
+f 2101//3039 2096//3039 2098//3039 2990//3039 2983//3039 2982//3039 2104//3039 2103//3039
+f 3605//3040 2986//3040 2990//3040 2098//3040 2091//3040 2095//3040 2110//3040 2967//3040 2966//3040 3604//3040 3603//3040 3607//3040
+f 4004//3041 4003//3041 4008//3041 4006//3041
+f 2624//3042 2618//3042 2617//3042
+f 2121//3042 2115//3042 2111//3042 2114//3042 2129//3042 2124//3042
+f 3621//3042 3618//3042 3620//3042 4097//3042 4093//3042 4092//3042 3610//3042 3613//3042 3622//3042
+f 2624//3043 2617//3043 2616//3043 2630//3043 2627//3043 2625//3043 2620//3043
+f 3912//3044 3911//3044 3925//3044 3918//3044 3913//3044
+f 2171//3045 2168//3045 2167//3045 2178//3045 2182//3045
+f 3915//3045 3918//3045 3925//3045 3922//3045 3919//3045
+f 4362//3045 4361//3045 4357//3045 4360//3045 4368//3045 4365//3045
+f 2257//3046 2250//3046 2254//3046 2260//3046
+f 2318//3047 2322//3047 2307//3047 2306//3047
+f 2315//3048 2314//3048 2312//3048 2308//3048 2307//3048 2322//3048 2316//3048
+f 2329//3049 2327//3049 2326//3049 2333//3049
+f 2386//3050 2385//3050 2376//3050 2375//3050 2389//3050
+f 2371//3051 2376//3051 2385//3051 2383//3051 2377//3051
+f 2467//3052 2466//3052 3382//3052 3381//3052 6614//3053 2449//3054 2448//3052 3477//3055 3475//3056 3474//3052 3483//3052 3479//3052 2468//3052
+f 3376//3057 3379//3057 6614//3057 3381//3057
+f 3882//3057 3880//3057 3881//3057 3890//3057 3887//3057 3884//3057
+f 4058//3058 4060//3058 6615//3058 4064//3058
+f 6615//3059 4065//3060 4064//3061
+f 2246//3061 2249//3061 2258//3061 2260//3061 2254//3061 2253//3061 2521//3061 2519//3061 2514//3061 2517//3061
+f 4172//3062 6616//3062 4173//3062
+f 2526//3062 2528//3062 2534//3062 2531//3062
+f 3368//3062 3364//3062 2450//3062 2455//3062 6614//3062 3375//3062 3374//3062 3779//3062 3778//3062 6617//3062 3769//3062 3766//3062 3768//3062 4156//3062 4151//3062 4155//3062
+f 4173//3063 6616//3063 4175//3063 4168//3063
+f 2528//3063 2522//3063 2525//3063 2537//3063 2535//3063 2534//3063
+f 2444//3063 2449//3054 6614//3053 2455//3063
+f 3470//3063 3475//3056 3477//3055 3476//3063
+f 4162//3064 6616//3064 4163//3064
+f 2560//3065 2559//3065 2575//3065 2574//3065 2561//3065
+f 3770//3065 3769//3065 6617//3065
+f 4164//3065 4163//3065 6616//3065 4172//3065
+f 2569//3066 2568//3066 2562//3066 2561//3066 2574//3066 2572//3066
+f 6617//3067 3771//3067 3770//3067
+f 2833//3066 2832//3066 2849//3066
+f 2582//3068 2581//3068 6618//3068 2584//3068
+f 2580//3069 6618//3069 2581//3069
+f 2598//3070 6618//3070 2580//3070 2579//3070
+f 2598//3071 2597//3071 2596//3071 6618//3071
+f 3186//3072 3185//3072 3198//3072 3192//3072 3187//3072
+f 3193//3073 3190//3073 3192//3073 3198//3073 3195//3073
+f 2612//3074 2610//3074 2608//3074 2604//3074 2599//3074 2603//3074 2614//3074
+f 2142//3075 2139//3075 2134//3075 2138//3075 2148//3075 2147//3075 2146//3075
+f 4124//3075 4123//3075 4122//3075 4110//3075 4115//3075
+f 2647//3076 3179//3076 3174//3076 3178//3076 3182//3076 2649//3076 2645//3076
+f 2130//3077 2133//3077 2148//3077 2138//3077
+f 2635//3078 3179//3078 2647//3078 2644//3078 2642//3078 2641//3078 2639//3078 2631//3078
+f 2146//3079 2143//3079 2142//3079
+f 2767//3079 2763//3079 2766//3079 3743//3079 3741//3079 2300//3079 2296//3079 2295//3079 2293//3079 2292//3079 2302//3079 2758//3079 2762//3079
+f 2636//3079 2639//3079 2641//3079
+f 2675//3080 2671//3080 2664//3080 2668//3080 2682//3080
+f 2680//3081 2676//3081 2672//3081 2675//3081 2682//3081
+f 2750//3082 2745//3082 2740//3082 2744//3082 2752//3082
+f 3930//3083 3939//3083 3926//3083
+f 2934//3084 2937//3084 2940//3084
+f 2753//3084 2752//3084 2744//3084 2743//3084 2754//3084
+f 4207//3085 4206//3085 4210//3085 2925//3085 2924//3085 2913//3085 2912//3085
+f 4145//3086 4144//3086 4208//3086 4210//3086 4206//3086 2809//3086 2806//3086 2805//3086 2826//3086 4143//3086 4150//3086 4147//3086
+f 4146//3087 4147//3087 4150//3087 4149//3087
+f 3232//3088 3220//3088 3219//3088 3233//3088
+f 2923//3089 2919//3089 2914//3089 2909//3089 2913//3089 2924//3089
+f 2058//3090 2052//3090 2057//3090 2064//3090 2062//3090
+f 3070//3091 3069//3091 3082//3091 3077//3091 3075//3091 3072//3091
+f 3821//3091 2397//3091 2396//3091 3574//3091 6619//3091 2400//3091 2407//3091 3419//3091 3828//3091 3826//3091 3825//3091 3822//3091
+f 4303//3092 4308//3092 4307//3092 4304//3092
+f 3099//3093 3098//3093 3091//3093 3084//3093 3087//3093
+f 3078//3094 3082//3094 3069//3094 3068//3094
+f 4305//3094 4307//3094 4308//3094 2036//3094 2035//3094 3092//3094 3091//3094 3098//3094 3093//3094 2051//3094 2048//3094 2047//3094 4294//3094 2045//3094 2043//3094 2042//3094 4291//3094 4290//3094 4287//3094 4289//3094
+f 3577//3094 2412//3094 2413//3094 6619//3094 3574//3094 3569//3094 3566//3094 3567//3094
+f 3155//3095 6620//3095 3138//3095 3137//3095
+f 3149//3096 3151//3096 6620//3096 3155//3096 3152//3096
+f 2552//3096 2551//3096 2547//3096 2545//3096 2538//3096 2542//3096
+f 3140//3097 3143//3097 6620//3097 3148//3097
+f 3173//3098 3172//3098 3171//3098
+f 2056//3099 2055//3099 2069//3099
+f 3550//3100 3553//3100 3556//3100
+f 3986//3100 3989//3100 3973//3100 3964//3100 3957//3100 3956//3100 3955//3100 3972//3100 3970//3100 3969//3100
+f 3965//3101 3970//3101 3972//3101 3971//3101
+f 3557//3101 3556//3101 3553//3101 3546//3101 3549//3101 3564//3101 3561//3101
+f 3173//3101 3171//3101 3165//3101 3164//3101 3161//3101 3159//3101 3158//3101
+f 4340//3101 4339//3101 4338//3101 4347//3101 4344//3101 4342//3101
+f 3031//3102 3030//3103 3014//3104 3018//3102
+f 3202//3102 3205//3102 3214//3102 3210//3102 3208//3102
+f 3664//3105 3215//3105 3211//3105 3214//3105 3205//3105 3199//3105 3201//3105 3661//3105 3657//3105 3660//3105 3667//3105
+f 3677//3106 3673//3106 3676//3106 3669//3106 3668//3106 3679//3106
+f 4077//3106 4076//3106 4082//3106 4078//3106
+f 4085//3107 2714//3107 2713//3107 2711//3107 2710//3107 2716//3107 3701//3107 3708//3107 3705//3107 3702//3107 3704//3107 4088//3107 3275//3107 3277//3107 3269//3107 3265//3107 3264//3107
+f 4275//3108 4274//3108 4278//3108
+f 3274//3109 3049//3109 3048//3109 3041//3109 3044//3109 4280//3109 4279//3109 4278//3109 4274//3109 4273//3109 4271//3109 3040//3109 3039//3109 3032//3109 3036//3109 3266//3109 3269//3109 3277//3109
+f 4095//3110 4094//3110 4089//3110 4093//3110 4097//3110
+f 3286//3110 3288//3110 3713//3110 3712//3110 3281//3110 3280//3110 3289//3110
+f 3282//3111 3285//3111 3720//3111 3719//3111 3714//3111 3713//3111 3288//3111
+f 3327//3112 3330//3112 3316//3112 3320//3112
+f 3669//3112 3676//3112 3671//3112 3670//3112
+f 3330//3113 3325//3113 3323//3113 3321//3113 3317//3113 3316//3113
+f 3750//3114 3752//3114 3346//3114 3343//3114 3342//3114 3339//3114 3337//3114 3332//3114 3335//3114 3746//3114
+f 3060//3115 3058//3115 3055//3115 3054//3115 3053//3115 3063//3115
+f 3949//3116 3952//3116 3950//3116
+f 2834//3117 2833//3117 2849//3117 2851//3117 2848//3117 2841//3117 2838//3117 2835//3117
+f 3772//3117 3771//3117 6617//3117 3773//3117
+f 3412//3118 3404//3118 3403//3118 3414//3118
+f 2285//3119 2284//3119 2281//3119 2276//3119 2279//3119 2288//3119
+f 4253//3119 4254//3119 4249//3119 4244//3119 4247//3119 4255//3119
+f 3452//3120 3456//3120 3465//3120 3468//3120 3458//3120
+f 3462//3121 3459//3121 3458//3121 3468//3121 3464//3121
+f 3499//3122 3498//3122 3511//3122 3505//3122 3502//3122
+f 3515//3123 3530//3123 3519//3123 3516//3123
+f 3931//3123 3927//3123 3926//3123 3939//3123 3936//3123 3938//3123 3932//3123
+f 3531//3124 3534//3124 3545//3124 3946//3124 3945//3124
+f 2998//3124 2997//3124 3012//3124 3011//3124 3001//3124
+f 3105//3124 3107//3124 3589//3124 3587//3124 3585//3124 3584//3124 3994//3124 3104//3124 3103//3124 3114//3124 3108//3124
+f 3941//3125 3946//3125 3545//3125 3542//3125 3539//3125 3538//3125 3537//3125 3953//3125 3952//3125 3949//3125
+f 3001//3125 3011//3125 3006//3125 3004//3125 2999//3125
+f 3579//3126 3582//3126 3990//3126 3993//3126 3994//3126 3584//3126
+f 3130//3127 3128//3127 3124//3127 3127//3127 3122//3127 3120//3127 3119//3127
+f 3686//3128 3685//3128 4071//3128 4067//3128 4070//3128 3237//3128 3240//3128 3250//3128 3247//3128 3241//3128 3243//3128 3690//3128 3687//3128
+f 3302//3129 3298//3129 3297//3129 3315//3129 3307//3129 3304//3129 3299//3129
+f 3312//3130 3311//3130 4099//3130 4102//3130 4108//3130 4105//3130 4103//3130 3309//3130 3308//3130 3307//3130 3315//3130
+f 3249//3130 3244//3130 3247//3130 3250//3130
+f 3733//3131 3736//3131 3729//3131 3726//3131 3727//3131 2884//3131 2883//3131 3739//3131
+f 3730//3132 3729//3132 3736//3132
+f 3414//3132 3403//3132 3402//3132 3413//3132
+f 3727//3133 3723//3133 2871//3133 2868//3133 2863//3133 2867//3133 2881//3133 2884//3133
+f 3833//3134 3832//3134 3831//3134 3845//3134 3841//3134 3838//3134
+f 4194//3135 4195//3135 4201//3135 4200//3135 2495//3135 2490//3135 2489//3135
+f 2777//3135 2798//3135 2797//3135 2781//3135 2770//3135
+f 4223//3136 6621//3136 3859//3136 3856//3136 3854//3136 3853//3136
+f 3488//3136 3487//3136 3495//3136 3491//3136 3490//3136 3489//3136
+f 3860//3137 3859//3137 6621//3137 3861//3137
+f 2359//3138 2358//3138 2370//3138 2368//3138 2365//3138 2361//3138
+f 3847//3138 3850//3138 3861//3138 6621//3138 4215//3138 4214//3138
+f 2949//3139 2952//3139 2948//3139 2947//3139 2963//3139 2962//3139 2956//3139
+f 2957//3140 2956//3140 2962//3140 2958//3140
+f 3901//3141 3896//3141 3891//3141 3895//3141 3905//3141 3904//3141
+f 2065//3142 2064//3142 2057//3142 2056//3142 2069//3142 2068//3142
+f 3974//3142 3973//3142 3989//3142 3988//3142 3981//3142 3979//3142
+f 4109//3143 4108//3143 4102//3143 4101//3143
+f 4130//3144 4133//3144 4125//3144 4129//3144 4141//3144 4139//3144 4136//3144
+f 2587//3144 2586//3144 6618//3144 2592//3144 2590//3144
+f 2596//3145 2593//3145 2592//3145 6618//3145
+f 2585//3146 6618//3146 2586//3146
+f 4126//3146 4125//3146 4133//3146
+f 3793//3147 3792//3147 3791//3147
+f 4178//3147 6616//3147 4159//3147 4158//3147
+f 4176//3148 4175//3148 6616//3148 4178//3148
+f 2438//3149 2434//3149 2436//3149 2442//3149 2439//3149
+f 4167//3149 6616//3149 4162//3149
+f 4185//3150 4181//3150 4180//3150 4193//3150
+f 2336//3151 2334//3151 2330//3151 2333//3151 2326//3151 2325//3151
+f 4229//3152 4228//3152 4243//3152 4242//3152 4237//3152 4239//3152 4231//3152
+f 3358//3152 3353//3152 3352//3152 3347//3152 3350//3152 3363//3152
+f 3754//3152 3760//3152 3756//3152 3755//3152
+f 4227//3153 4243//3153 4228//3153
+f 4055//3154 4057//3154 6615//3154 4060//3154
+f 3761//3155 3758//3155 3760//3155 3754//3155 3753//3155 3765//3155
+f 2733//3156 2732//3156 2725//3156 2722//3156 2717//3156 2721//3156 2738//3156 2855//3156 2861//3156 2859//3156
+f 4233//3156 4232//3156 4231//3156 4239//3156
+f 6622//3157 2484//3157 2482//3157 2481//3157
+f 6619//3158 2410//3158 2402//3158 2401//3158
+f 2343//3158 2347//3158 2344//3158 2339//3158
+f 2352//3159 2350//3159 2348//3159 2347//3159 2343//3159 2342//3159
+f 4319//3160 4321//3160 4324//3160
+f 4324//3161 4321//3161 4318//3161 4314//3161 4313//3161 4312//3161 4322//3161
+f 4381//3162 4380//3162 4388//3162 4384//3162
+f 6192//3163 6191//3163 6193//3163
+f 6623//3164 4549//3164 4544//3164 4547//3164
+f 6170//3163 4693//3163 4690//3163 4689//3163 4686//3163 4685//3163 6177//3163 6174//3163
+f 4435//3163 4431//3163 4427//3163 4429//3163 4419//3163 4423//3163 4433//3163
+f 4419//3165 4429//3165 4426//3165 4420//3165
+f 6191//3165 6188//3165 6185//3165 6182//3165 6178//3165 6181//3165 6193//3165
+f 4489//3166 4488//3166 4486//3166 4484//3166 4478//3166 4481//3166
+f 4979//3167 4978//3167 4988//3167 4985//3167 4983//3167
+f 5891//3168 5888//3168 5887//3168
+f 4501//3169 4494//3169 4498//3169 4506//3169 4503//3169
+f 4518//3170 4517//3170 4516//3170 4522//3170
+f 4520//3171 4522//3171 4516//3171 4513//3171 4512//3171 4524//3171
+f 5563//3172 5562//3172 6624//3172 5567//3172
+f 6625//3173 4677//3173 4676//3173
+f 4552//3174 4555//3174 6623//3174 4559//3174 4558//3174
+f 4644//3175 4641//3175 4638//3175 4632//3175 4627//3175 4631//3175
+f 4752//3176 4751//3176 4746//3176 4744//3176 4738//3176 4741//3176
+f 4782//3177 4781//3177 6626//3177 4785//3177
+f 4431//3178 4435//3178 4432//3178
+f 6623//3178 4550//3178 4549//3178
+f 4779//3178 4778//3178 4798//3178 6626//3178 4781//3178
+f 6623//3179 4555//3179 4551//3179 4550//3179
+f 4796//3179 6626//3179 4798//3179 4791//3179
+f 6236//3179 6235//3179 6246//3179 6239//3179 6237//3179
+f 6243//3180 6240//3180 6238//3180 6239//3180 6246//3180
+f 6626//3180 4796//3180 4795//3180
+f 4789//3181 6626//3181 4795//3181 4790//3181
+f 6533//3181 6535//3181 6524//3181 6523//3181 6538//3181
+f 6626//3182 4786//3182 4785//3182
+f 5823//3183 5819//3183 5812//3183 5816//3183 5827//3183 5826//3183 5824//3183
+f 4823//3183 4828//3183 4834//3183 4829//3183
+f 4837//3184 4835//3184 4834//3184 4828//3184 4827//3184 4841//3184
+f 5363//3185 5364//3185 5371//3185 5367//3185 5365//3185
+f 4860//3185 4854//3185 4857//3185 4863//3185
+f 4879//3186 4873//3186 4876//3186 4882//3186
+f 6333//3187 6329//3187 6332//3187 6337//3187 6335//3187 5439//3187 5436//3187 5434//3187 5433//3187 5432//3187 5903//3187 5427//3187 5426//3187
+f 4883//3187 4882//3187 4876//3187 4872//3187 4868//3187 4867//3187
+f 6303//3188 6300//3188 6298//3188 6293//3188 6289//3188 6292//3188
+f 4412//3188 4411//3188 4893//3188 4891//3188 4890//3188 4889//3188 5516//3188 5517//3188 4414//3188
+f 4457//3188 4461//3188 4475//3188 4471//3188 4468//3188 4467//3188
+f 6402//3189 6401//3189 6400//3189 6412//3189 6404//3189
+f 6405//3190 6404//3190 6412//3190 6410//3190 6407//3190
+f 4887//3191 4402//3191 4397//3191 4396//3191 4415//3191 4414//3191 5517//3191 5515//3191 5513//3191 5512//3191 5518//3191
+f 5359//3192 5362//3192 5372//3192 5371//3192 5364//3192
+f 6341//3193 6343//3193 6627//3193 6347//3193 6346//3193
+f 4959//3194 6627//3194 6343//3194 4960//3194
+f 6500//3195 6499//3195 6628//3195 6502//3195
+f 4953//3195 4950//3195 4949//3195 6627//3195
+f 4954//3196 4953//3196 6627//3196 4956//3196
+f 6011//3197 6009//3197 6008//3197 6006//3197 6005//3197 6015//3197
+f 5157//3198 5159//3198 5155//3198 5154//3198 5163//3198 5162//3198
+f 5155//3199 5159//3199 5156//3199
+f 6098//3200 6114//3200 6099//3200
+f 5209//3201 4711//3201 4707//3201 4704//3201 4703//3201 4716//3201 4712//3201 4715//3201 5218//3201 5217//3201 5215//3201 5213//3201
+f 5189//3202 5194//3202 5201//3202 5197//3202 5195//3202
+f 6095//3203 6099//3203 6114//3203 6112//3203 6110//3203 6109//3203 6227//3203 6229//3203 6220//3203 6103//3203
+f 5717//3204 6629//3204 5720//3204 5715//3204
+f 5259//3205 5258//3205 5271//3205 5266//3205 5268//3205 5263//3205
+f 5260//3206 5263//3206 5268//3206 5265//3206
+f 5355//3207 5354//3207 5348//3207 5347//3207 5356//3207
+f 5810//3207 5809//3207 5806//3207 5804//3207 5803//3207 5801//3207 5800//3207
+f 5772//3208 5771//3208 5290//3208 5293//3208 5302//3208 5778//3208 5775//3208
+f 4768//3209 4767//3209 4774//3209 4771//3209 4770//3209
+f 5251//3210 5250//3210 5246//3210 5244//3210 5240//3210 5243//3210 5254//3210
+f 5343//3211 5348//3211 5354//3211 5353//3211 6271//3211 6269//3211 6267//3211 6266//3211 5349//3211
+f 4647//3212 4650//3212 4658//3212 4657//3212 4655//3212 4651//3212
+f 5247//3212 5246//3212 5250//3212
+f 6624//3213 5564//3213 5567//3213
+f 6324//3214 6323//3214 6322//3214 6328//3214 6327//3214 6325//3214
+f 5420//3214 5416//3214 5419//3214 5412//3214 5409//3214 5408//3214
+f 5867//3214 5871//3214 5892//3214 5877//3214 5872//3214
+f 5568//3215 6624//3215 5569//3215
+f 4938//3215 4941//3215 4922//3215 4921//3215
+f 5551//3215 5549//3215 5548//3215 5545//3215 5543//3215 5542//3215
+f 6421//3215 6630//3215 6424//3215 6422//3215 6420//3215
+f 5891//3216 5887//3216 5881//3216 5878//3216 5877//3216 5892//3216
+f 5564//3217 6624//3217 5568//3217 5565//3217
+f 4914//3217 4922//3217 4941//3217 4937//3217 4930//3217 4923//3217
+f 5414//3218 5413//3218 5412//3218 5419//3218
+f 5461//3219 5457//3219 5456//3219 5447//3219 5451//3219
+f 6362//3220 6361//3220 6370//3220 6369//3220 6363//3220
+f 5945//3220 5939//3220 5944//3220 5948//3220
+f 4999//3221 4998//3221 5009//3221 5480//3221 5484//3221 5494//3221 5488//3221 5487//3221 6380//3221 6379//3221 6378//3221 5008//3221 5006//3221 5001//3221
+f 5957//3221 5956//3221 5974//3221 5965//3221 5962//3221
+f 5973//3222 5966//3222 5965//3222 5974//3222
+f 5970//3223 5967//3223 5963//3223 5966//3223 5973//3223
+f 6428//3224 6630//3224 6417//3224 6416//3224
+f 5582//3225 5572//3225 5578//3225 5591//3225 5587//3225 5583//3225
+f 6448//3225 6447//3225 6446//3225 6445//3225 6450//3225
+f 6493//3225 6495//3225 6628//3225 6499//3225 6497//3225
+f 6460//3226 6455//3226 6454//3226 5599//3226 5598//3226 5611//3226 5607//3226 5606//3226 6466//3226
+f 5935//3226 5937//3226 6354//3226 6352//3226 6351//3226 5922//3226 5925//3226
+f 6562//3227 6566//3227 6580//3227 6577//3227 6573//3227 6571//3227
+f 6539//3227 5593//3227 5599//3227 6454//3227 6451//3227 6453//3227 6540//3227
+f 4819//3228 4818//3228 6461//3228 6460//3228 6466//3228 6462//3228 4822//3228
+f 5929//3228 5928//3228 6358//3228 6355//3228 6354//3228 5937//3228 5933//3228
+f 6630//3228 6418//3228 6417//3228
+f 4815//3229 4814//3229 4804//3229 4803//3229 6461//3229 4818//3229
+f 6624//3229 5557//3229 5556//3229 5570//3229 5569//3229
+f 6419//3229 6418//3229 6630//3229 6421//3229
+f 5380//3229 5379//3229 5373//3229 5377//3229 5383//3229 5381//3229
+f 4610//3230 4609//3230 4608//3230 4625//3230 5784//3230 5783//3230 6586//3230 6631//3230 5790//3230 4618//3230 4616//3230 4613//3230
+f 5794//3231 5791//3231 5790//3231 6631//3231 6589//3231 6588//3231 5796//3231
+f 5911//3231 5908//3231 5907//3231 5921//3231
+f 4746//3232 4751//3232 4749//3232 4747//3232
+f 5277//3232 5276//3232 6631//3232 6582//3232 5278//3232
+f 5275//3233 5289//3233 6631//3233 5276//3233
+f 6384//3233 6396//3233 6385//3233 5763//3233 5766//3233 5760//3233 5758//3233 5757//3233 5756//3233 5768//3233 6381//3233
+f 5759//3234 5760//3234 5766//3234 5761//3234
+f 5282//3234 6589//3234 6631//3234 5289//3234 5284//3234 5283//3234
+f 6386//3234 6385//3234 6396//3234 6394//3234 6392//3234 6389//3234
+f 5806//3235 5809//3235 5807//3235
+f 5337//3236 5334//3237 5319//3238 5323//3239 5309//3240 5308//3238 5324//3238 5326//3238 5330//3238 5341//3238 5338//3238
+f 5311//3241 5310//3241 5317//3241 5315//3241 5313//3241
+f 5722//3242 5721//3242 6629//3242 5728//3242 5726//3242
+f 5846//3242 5845//3242 5852//3242 5850//3242 5849//3242
+f 5238//3243 5237//3243 5239//3243
+f 5837//3244 5840//3244 5852//3244 5845//3244 5842//3244
+f 6629//3244 5713//3244 5712//3244 5728//3244
+f 5393//3245 5392//3245 5388//3245 5387//3245 5402//3245 5397//3245 5394//3245
+f 5859//3245 5858//3245 5853//3245 5857//3245 5861//3245
+f 6308//3245 6306//3245 6307//3245 6320//3245 6319//3245 6312//3245
+f 6313//3246 6312//3246 6319//3246 6318//3246
+f 6310//3247 6313//3247 6318//3247 6314//3247
+f 5389//3248 5388//3248 5392//3248
+f 5920//3249 5915//3249 5917//3249 5912//3249 5911//3249 5921//3249
+f 5909//3250 5912//3250 5917//3250 5914//3250
+f 5163//3250 5154//3250 5152//3250 5151//3250 5164//3250
+f 6550//3251 6552//3251 6559//3251 6557//3251 6555//3251
+f 5496//3251 5498//3251 5509//3251 5508//3251 5503//3251 5500//3251 5499//3251
+f 4451//3251 4450//3251 5986//3251 5985//3251 5984//3251 5976//3251 4447//3251 4446//3251 4444//3251 4437//3251 4441//3251 4454//3251
+f 5504//3252 5503//3252 5508//3252
+f 5977//3253 5976//3253 5984//3253 5981//3253 5979//3253
+f 4445//3253 4444//3253 4446//3253
+f 4961//3254 4964//3254 4976//3254 4968//3254
+f 4912//3254 4910//3254 4909//3254 4904//3254 4901//3254 4903//3254
+f 4900//3255 4913//3255 4912//3255 4903//3255 4896//3255
+f 4976//3256 4975//3256 4971//3256 4970//3256 4965//3256 4968//3256
+f 6501//3256 6503//3256 6628//3256 6504//3256
+f 5183//3256 5182//3256 5171//3256 5167//3256 5170//3256 5186//3256
+f 4905//3257 4904//3257 4909//3257
+f 6018//3256 6022//3256 6030//3256 6028//3256 6026//3256 6025//3256
+f 6035//3258 6032//3258 6031//3258 5089//3258 5088//3258 6042//3258 6044//3258
+f 6248//3258 6247//3258 6262//3258 6258//3258 6257//3258 6254//3258
+f 6431//3259 5641//3259 5636//3259 5640//3259 5653//3259 5652//3259 6436//3259 6434//3259 6433//3259 5093//3259 5090//3259 5089//3259 6031//3259 5084//3259 5083//3259 5082//3259 5094//3259
+f 6260//3259 6262//3259 6247//3259 6251//3259
+f 6038//3260 6041//3260 6036//3260 6035//3260 6044//3260
+f 6037//3261 6036//3261 6041//3261
+f 6477//3262 6475//3262 6474//3262 6473//3262 6470//3262 6469//3262
+f 6151//3262 6150//3262 6149//3262 6632//3262 6084//3262 6074//3262 6079//3262
+f 6167//3263 6632//3263 5699//3263 5691//3263 5695//3263 5711//3263 5706//3263 5705//3263
+f 5709//3264 5707//3264 5706//3264 5711//3264
+f 6632//3264 6167//3264 6166//3264
+f 6160//3265 6165//3265 6632//3265 6166//3265
+f 6165//3266 6164//3266 6632//3266
+f 6156//3267 6092//3267 6089//3267 6087//3267 6085//3267 6080//3267 6084//3267 6632//3267 6164//3267
+f 5013//3268 5012//3268 5028//3268 5016//3268
+f 6203//3269 6206//3269 6217//3269 6207//3269
+f 5661//3270 5660//3270 5665//3270
+f 6210//3271 6208//3271 6207//3271 6217//3271 6214//3271 6213//3271
+f 5014//3271 5016//3271 5028//3271 5023//3271 5022//3271 5017//3271
+f 4990//3271 4977//3271 4982//3271 4991//3271
+f 6281//3272 6280//3272 6277//3272 6276//3272 6286//3272 6283//3272
+f 5900//3273 5897//3273 5896//3273 5903//3273 5432//3273 5431//3273 5901//3273
+f 5472//3274 5469//3274 5463//3274 5465//3274 5948//3274 5944//3274 5943//3274 5953//3274 5950//3274 5479//3274 5476//3274 5475//3274
+f 6374//3274 6375//3274 6371//3274 6370//3274 6361//3274 6360//3274
+f 5954//3275 5953//3275 5943//3275 5942//3275
+f 6518//3276 6511//3276 6509//3276 6508//3276 6519//3276
+f 2083//3277 2085//3277 2070//3277 2075//3277 2089//3277 2086//3277
+f 4010//3278 4009//3278 4019//3278 4016//3278
+f 4329//3278 4328//3278 4333//3278 4332//3278
+f 2169//3279 2171//3279 2182//3279 2176//3279 2175//3279
+f 3695//3280 3691//3280 3694//3280 3699//3280 3698//3280 3259//3280 3255//3280 3254//3280 2699//3280 2698//3280
+f 2196//3280 2192//3280 2191//3280 2189//3280 2188//3280 2197//3280
+f 2270//3281 2267//3281 2262//3281 2266//3281 2275//3281 2274//3281 2272//3281
+f 4363//3282 4365//3282 4368//3282 4367//3282
+f 2203//3283 2220//3283 2204//3283
+f 2309//3284 2312//3284 2314//3284
+f 2357//3285 2356//3285 2370//3285 2358//3285
+f 2469//3286 2472//3286 2483//3286 6622//3286 2475//3286 2473//3286
+f 4066//3287 4061//3287 4065//3060 6615//3059
+f 2211//3288 2205//3288 2200//3288 2204//3288 2220//3288 2219//3288 2216//3288
+f 2509//3289 2504//3289 2496//3289 2493//3289 2492//3289
+f 2795//3290 2786//3290 2785//3290
+f 2614//3291 2603//3291 2602//3291
+f 3595//3292 3594//3292 3590//3292 3593//3292 3600//3292 3597//3292
+f 4034//3293 4036//3293 4039//3293
+f 2942//3294 2938//3294 2940//3294 2937//3294 2932//3294 2927//3294 2931//3294
+f 6615//3295 4048//3295 4047//3295 4066//3295
+f 3506//3296 3503//3296 3505//3296 3511//3296 3508//3296
+f 3229//3297 3226//3297 3222//3297 3216//3297 3220//3297 3232//3297
+f 3030//3103 3024//3298 3023//3298 3020//3298 3015//3298 3014//3104
+f 4261//3298 4259//3298 4256//3298 4257//3298 4269//3298 4268//3298 4263//3298
+f 3139//3299 3138//3299 6620//3299 3143//3299
+f 3144//3300 3148//3300 6620//3300 3151//3300
+f 3870//3301 3873//3301 3866//3301
+f 4075//3302 4074//3302 4084//3302 4080//3302 4082//3302 4076//3302
+f 2233//3303 2232//3303 2242//3303 2240//3303 2236//3303
+f 3696//3304 2705//3304 2703//3304 2702//3304 2701//3304 2700//3304 3260//3304 3256//3304 3259//3304 3698//3304
+f 2243//3304 2242//3304 2232//3304 2223//3304 2228//3304
+f 2706//3305 2711//3305 2713//3305
+f 2693//3305 2690//3305 2687//3305 2686//3305 2685//3305 3687//3305 3690//3305 3689//3305 2695//3305
+f 3632//3306 3631//3306 3640//3306 3638//3306 3635//3306
+f 2562//3307 2568//3307 2563//3307
+f 3774//3308 3773//3308 6617//3308 3778//3308 3777//3308 3776//3308
+f 2844//3308 2848//3308 2851//3308
+f 3375//3308 6614//3308 3369//3308
+f 3370//3309 3369//3309 6614//3309 3379//3309
+f 2280//3310 2281//3310 2284//3310 2283//3310
+f 4252//3310 4250//3310 4249//3310 4254//3310
+f 3451//3310 3440//3310 3439//3310
+f 3451//3311 3450//3311 3446//3311 3443//3311 3441//3311 3432//3311 3440//3311
+f 3525//3312 3523//3312 3522//3312 3517//3312 3519//3312 3530//3312
+f 3933//3313 3932//3313 3938//3313 3934//3313
+f 4048//3313 6615//3313 4053//3313 4049//3313
+f 3423//3314 3431//3314 3426//3314 3420//3314
+f 4053//3314 6615//3314 4054//3314
+f 4216//3315 4215//3315 6621//3315 4221//3315 4218//3315
+f 6621//3316 4223//3316 4222//3316 4221//3316
+f 3012//3316 2997//3316 2996//3316 3007//3316
+f 3111//3316 3114//3316 3103//3316 3102//3316
+f 3982//3317 3981//3317 3988//3317 3985//3317
+f 3123//3318 3122//3318 3127//3318
+f 3627//3319 3626//3319 3641//3319 3640//3319 3631//3319
+f 4263//3319 4268//3319 4264//3319
+f 3999//3320 3995//3320 3998//3320 4008//3320 4003//3320 4002//3320
+f 4356//3320 4354//3320 3655//3320 3648//3320 3654//3320 4352//3320 4351//3320
+f 4353//3321 4348//3321 4352//3321 3654//3321 3646//3321 3644//3321 2159//3321 2157//3321 2156//3321 2154//3321 2153//3321 2163//3321 3643//3321
+f 3874//3322 3873//3322 3870//3322 3862//3322 3865//3322 3879//3322 3875//3322
+f 4187//3322 4182//3322 4185//3322 4193//3322 4192//3322 4189//3322
+f 4189//3323 4192//3323 4191//3323 4190//3323
+f 2948//3323 2952//3323 2943//3323
+f 3876//3323 3875//3323 3879//3323 3877//3323
+f 3799//3324 3798//3324 3797//3324 3818//3324 3816//3324 3809//3324 3803//3324
+f 3817//3325 3816//3325 3818//3325
+f 4373//3325 4379//3325 4377//3325 4374//3325
+f 4389//3326 4388//3326 4380//3326 4379//3326 4373//3326 4372//3326
+f 4117//3326 4111//3326 4110//3326 4122//3326 4120//3326
+f 2410//3327 6619//3327 2413//3327 2411//3327
+f 4198//3328 2508//3328 2509//3328 2492//3328 2495//3328 4200//3328
+f 2781//3328 2797//3328 2792//3328 2795//3328 2785//3328 2778//3328
+f 2479//3329 2476//3329 2475//3329 6622//3329 2481//3329
+f 4042//3330 4040//3330 4039//3330 4036//3330 4032//3330 4031//3330 4030//3330
+f 2585//3331 2584//3331 6618//3331
+f 2443//3332 2442//3332 2436//3332 2433//3332 2432//3332
+f 3785//3332 3784//3332 3780//3332 3783//3332 3793//3332 3791//3332 3787//3332
+f 4161//3332 4157//3332 4159//3332 6616//3332 4167//3332
+f 3393//3332 3390//3332 3389//3332 3387//3332 3386//3332 3396//3332
+f 3429//3333 3428//3333 3424//3333 3426//3333 3431//3333 3430//3333 2420//3333 2414//3333 2418//3333 2429//3333 2426//3333 2424//3333 2423//3333
+f 4050//3333 4054//3333 6615//3333 4057//3333
+f 2484//3334 6622//3334 2483//3334
+f 6619//3335 2401//3335 2400//3335
+f 3418//3335 3417//3335 3416//3335 3415//3335 3828//3335 3419//3335
+f 2893//3335 2892//3335 2908//3335 2904//3335 2903//3335 2898//3335
+f 4669//3336 4665//3336 4668//3336 6625//3336 4675//3336 4672//3336
+f 4546//3336 6623//3336 4547//3336
+f 6175//3336 6177//3336 4685//3336 4684//3336 4697//3336 4696//3336 6169//3336
+f 5741//3337 5737//3337 5736//3337 5734//3337 5733//3337 5742//3337
+f 4508//3338 4504//3338 4506//3338 4498//3338 4497//3338
+f 5454//3338 5452//3338 5448//3338 5447//3338 5456//3338
+f 4675//3339 6625//3339 4676//3339
+f 4546//3339 4543//3339 4542//3339 4559//3339 6623//3339
+f 4572//3340 4571//3340 4563//3340 4562//3340 4573//3340
+f 5136//3341 5133//3341 5132//3341 4564//3341 4563//3341 4571//3341 4569//3341 4568//3341 5137//3341
+f 5138//3342 5147//3342 5146//3342 5142//3342 5141//3342 5139//3342
+f 4599//3342 4592//3342 4587//3342 4584//3342 4576//3342 4579//3342
+f 5628//3342 5629//3342 5635//3342 5632//3342 5631//3342 5630//3342
+f 4664//3343 4663//3343 4681//3343 6625//3343 4668//3343
+f 4783//3344 4786//3344 6626//3344 4789//3344
+f 6525//3345 6524//3345 6535//3345 6530//3345 6528//3345
+f 5819//3346 5823//3346 5817//3346
+f 5830//3347 5829//3347 5828//3347 5836//3347 5833//3347 5831//3347
+f 4849//3348 4847//3348 4846//3348 4863//3348 4857//3348 4850//3348
+f 5119//3349 5114//3349 5118//3349 5129//3349 5126//3349 5121//3349
+f 5048//3349 5047//3349 5053//3349 5051//3349
+f 5054//3350 5053//3350 5047//3350 5046//3350 5061//3350 5059//3350
+f 6628//3351 6503//3351 6502//3351
+f 5068//3351 5062//3351 5066//3351 5076//3351 5074//3351 5073//3351
+f 4949//3351 4944//3351 4947//3351 5440//3351 5443//3351 5446//3351 6627//3351
+f 4720//3351 4719//3351 4731//3351 4726//3351
+f 6198//3352 6197//3352 6195//3352 4733//3352 4732//3352 4731//3352 4719//3352 4723//3352 5744//3352 5747//3352 5753//3352 5748//3352 4737//3352 4736//3352 6194//3352 6200//3352
+f 6347//3352 6627//3352 5446//3352 5445//3352 6340//3352
+f 4959//3353 4957//3353 4956//3353 6627//3353
+f 6015//3354 6005//3354 6004//3354 6016//3354
+f 5204//3355 5206//3355 5202//3355
+f 5627//3356 5625//3356 5622//3356 5621//3356 5620//3356
+f 5206//3357 5204//3357 5199//3357 5201//3357 5194//3357 5193//3357
+f 6367//3358 6371//3358 6375//3358 6372//3358
+f 5220//3358 5223//3358 5239//3358 5237//3358 5234//3358 5231//3358 5224//3358
+f 5714//3358 5713//3358 6629//3358 5717//3358
+f 5527//3359 5534//3359 5533//3359 5528//3359
+f 5536//3360 5531//3360 5534//3360 5527//3360 5524//3360 5523//3360
+f 6629//3361 5721//3361 5718//3361 5720//3361
+f 5295//3362 5294//3362 5776//3362 5778//3362 5302//3362 5298//3362 5296//3362 4757//3362 4756//3362 4774//3362 4767//3362 4762//3362 4761//3362
+f 6364//3363 6363//3363 6369//3363
+f 6449//3364 6450//3364 6445//3364 6442//3364 6441//3364
+f 6492//3364 5175//3364 5172//3364 5171//3364 5182//3364 5181//3364 6504//3364 6628//3364 6495//3364
+f 4526//3365 4529//3365 4537//3365 4536//3365 4533//3365 4531//3365
+f 4812//3366 4809//3366 4805//3366 4804//3366 4814//3366
+f 5558//3365 5557//3365 6624//3365 5562//3365 5560//3365
+f 5617//3367 5612//3367 5615//3367 5627//3367 5620//3367
+f 6511//3367 6518//3367 6517//3367 6514//3367 6512//3367
+f 5105//3368 5104//3368 6054//3368 6052//3368 6050//3368 6049//3368 6046//3368 5102//3368 5099//3368 5095//3368 5098//3368 5112//3368
+f 6130//3368 6129//3368 6128//3368 6138//3368 6134//3368 6131//3368
+f 6135//3369 6132//3369 6134//3369 6138//3369
+f 5665//3370 5660//3370 5659//3370 5658//3370 5669//3370 5667//3370 5666//3370
+f 5686//3371 5683//3371 5685//3371 5677//3371 5676//3371
+f 5735//3371 5729//3371 5734//3371 5736//3371
+f 5679//3372 5682//3372 6145//3372 6144//3372 6139//3372 6142//3372 5678//3372 5677//3372 5685//3372
+f 6123//3373 6122//3373 6120//3373 6115//3373 6119//3373 6125//3373
+f 6583//3373 6582//3373 6631//3373 6586//3373
+f 6481//3374 6480//3374 6490//3374 6489//3374 6485//3374 6482//3374
+f 5317//3375 5310//3375 5309//3240 5323//3239 5318//3375
+f 5335//3376 5334//3237 5337//3236
+f 5862//3377 5861//3377 5857//3377 5856//3377 5866//3377
+f 5995//3377 5994//3377 5993//3377 5992//3377 6001//3377 5999//3377 5997//3377
+f 5041//3377 5039//3377 5036//3377 5034//3377 5033//3377 5042//3377
+f 5696//3378 5699//3378 6632//3378 6149//3378 6148//3378 5700//3378
+f 4977//3379 4990//3379 4986//3379 4988//3379 4978//3379
+f 6221//3380 6220//3380 6229//3380 6226//3380 6224//3380
+f 6068//3381 6065//3381 6061//3381 6056//3381 6060//3381 6072//3381
+f 5992//3382 5991//3382 6001//3382
+f 4678//3383 4677//3383 6625//3383 4681//3383
+f 6428//3384 6427//3384 6425//3384 6424//3384 6630//3384
+f 6560//3385 6559//3385 6552//3385 6546//3385 6549//3385
+o Land
+v -45.500000 -51.999996 -0.614933
+v -52.000008 -43.875008 0.054960
+v -51.999996 -48.750008 -0.171865
+v -39.000004 -47.125004 -0.303752
+v -43.875004 -43.875004 0.086369
+v -30.875000 -47.125000 0.372201
+v -35.750000 -43.875000 0.370599
+v -35.750000 -51.999996 0.791199
+v -25.999998 -51.999996 -0.000004
+v -21.125004 -43.875008 -0.179602
+v -26.000000 -43.875000 -0.200138
+v -21.125006 -52.000008 -0.586572
+v -14.625000 -45.500004 -0.401823
+v 0.000000 -52.000008 -0.000006
+v 4.875001 -43.875008 0.973670
+v 0.000000 -43.875004 0.770613
+v 6.499997 -51.999996 0.279277
+v 9.750002 -47.125008 1.577121
+v 25.999998 -51.999996 -0.000005
+v 24.375000 -45.500000 0.372793
+v 21.125006 -52.000008 -1.002032
+v 30.875000 -47.125004 0.302964
+v 40.625008 -52.000008 0.314043
+v 37.375004 -44.687504 0.177681
+v 35.750000 -51.999996 0.124166
+v 43.875000 -43.875000 0.558622
+v 45.500000 -51.999996 0.370568
+v 52.000008 -43.875008 -0.706337
+v -38.187508 -38.593758 -0.108052
+v -30.875000 -40.625004 0.014731
+v -4.875000 -43.875004 -0.379399
+v -11.375002 -40.625008 -0.005980
+v 14.625000 -47.125000 0.678846
+v 8.937501 -40.625004 0.410943
+v 21.125002 -40.625008 0.299901
+v 14.625000 -42.250000 1.078521
+v 19.500002 -45.500008 0.603011
+v 34.125000 -40.625008 -0.012631
+v -51.999996 -39.000008 -0.000007
+v -43.875004 -37.375000 -0.021706
+v -17.875004 -38.187508 -0.278367
+v -25.187502 -37.375000 0.049952
+v 1.625000 -37.375000 0.489066
+v -5.687500 -36.156250 -0.182069
+v 14.625003 -37.375008 0.570033
+v 45.500004 -37.375004 0.000785
+v -52.000008 -35.750008 0.271274
+v -30.875000 -34.937500 -1.024884
+v -20.312504 -34.125004 -0.461722
+v -11.375002 -35.750008 -0.005520
+v 8.124999 -34.937500 0.148099
+v 27.625000 -40.625004 0.357348
+v 30.875000 -34.125004 -1.208324
+v 24.375000 -34.125000 -0.405117
+v 40.625000 -37.375000 -0.315991
+v 35.750000 -34.125000 -0.590644
+v -45.500008 -32.500008 -0.259586
+v -51.999996 -32.500000 0.012509
+v -13.000000 -31.281254 -0.332978
+v -3.250000 -30.468756 0.578434
+v 4.062500 -30.875000 -0.305653
+v 19.500000 -34.125004 0.133790
+v 13.000000 -31.281254 -0.529387
+v 43.875004 -32.500000 -0.210261
+v 52.000008 -35.750004 0.093076
+v -52.000008 -27.625004 -0.058660
+v -40.625004 -32.500000 -0.774595
+v -43.875000 -27.625000 -0.245506
+v -34.125000 -30.875006 -0.586255
+v -39.000000 -27.625000 -0.268164
+v -24.375002 -30.875000 -0.880570
+v -29.250004 -29.250004 -0.602885
+v 17.062500 -26.000000 0.701845
+v 25.593752 -28.437500 -0.313394
+v 35.750000 -27.625000 0.118925
+v 39.000008 -30.875000 -0.357405
+v 45.500000 -28.031250 -0.342729
+v -52.000000 -26.000006 -0.000004
+v -34.531250 -22.750004 -0.727975
+v -29.250000 -24.375000 0.119365
+v -17.875002 -29.250004 0.502991
+v -24.375004 -24.375000 -0.045003
+v -17.468750 -24.375000 1.053528
+v -9.749999 -26.000004 -0.334142
+v 1.625001 -24.375002 -0.596920
+v 8.125001 -24.375004 -0.748141
+v -39.812508 -21.125000 0.056294
+v -11.375000 -21.125004 0.721835
+v -4.875000 -24.375002 0.560003
+v 21.125000 -21.125002 0.257298
+v 30.875000 -24.375000 0.471752
+v 26.812500 -21.125000 -0.181260
+v 40.625008 -21.125002 -0.146929
+v 47.125008 -20.312504 -1.184124
+v 52.000000 -24.374998 0.156510
+v -45.500004 -22.750004 0.073018
+v -52.000000 -16.397728 -0.105301
+v -30.875000 -17.875000 -0.350930
+v -24.375000 -17.468752 -0.694210
+v -17.875002 -17.875000 0.388251
+v 1.625000 -17.875004 0.025630
+v -6.093750 -17.062502 0.511108
+v 11.375000 -18.281252 -0.730525
+v 6.500001 -17.875000 -0.074157
+v 16.250000 -17.875000 -0.112608
+v 34.125004 -18.281252 0.764972
+v -37.375000 -16.249998 0.104063
+v -13.812502 -14.625000 -0.269572
+v 27.625000 -14.625002 -0.074934
+v 21.125000 -14.625000 -0.810850
+v 40.625008 -15.437503 -0.440936
+v -43.875000 -11.375000 0.104519
+v -45.093758 -17.062500 -0.091318
+v -30.875000 -11.375000 0.167431
+v -37.375000 -11.375000 -0.048270
+v -21.125000 -11.374999 -0.339523
+v -4.875000 -11.375002 0.272932
+v -9.750000 -11.374998 -0.018262
+v 2.031250 -11.375002 -0.455625
+v 16.250000 -11.375002 -0.173453
+v 11.375000 -11.375002 0.193009
+v 34.125000 -11.375000 1.454944
+v -25.187500 -7.718750 0.745207
+v -15.031250 -8.125000 -1.039942
+v 6.500001 -8.125000 0.150300
+v 27.625000 -9.750001 0.144455
+v 21.125002 -9.750000 -0.460371
+v 45.093754 -10.562501 -0.288220
+v 37.375000 -7.312500 -0.084199
+v -48.750000 -6.500000 0.187513
+v -51.999996 -12.999997 -0.000004
+v -43.875004 -4.875000 0.033656
+v -32.093754 -5.687501 0.031433
+v 4.468750 -2.234375 0.473515
+v 11.375000 -4.875000 0.912873
+v 30.062500 -4.875001 -0.344996
+v 24.375000 -4.875000 0.818270
+v 52.000000 -9.750002 0.403505
+v 43.875008 -4.875000 -0.273551
+v -52.000000 0.000000 0.000000
+v -36.968750 -1.625000 -0.340262
+v -39.000004 -6.500000 0.012513
+v -14.625003 -3.250001 -0.067411
+v -22.343754 -0.812500 0.438535
+v -8.125002 -6.500000 -1.249810
+v -1.625000 -6.500000 0.212048
+v -4.874999 -1.218750 -1.157613
+v 36.968750 -1.625001 -0.047700
+v -43.875008 1.625001 0.122494
+v -29.250006 -0.000001 -0.399639
+v -9.750001 -1.624999 -0.529982
+v -14.625003 1.624999 0.299809
+v 16.250002 -0.000002 -0.005871
+v 11.375002 -0.000002 0.063338
+v 24.984375 2.843749 0.040700
+v 30.875006 -0.000001 -1.536395
+v 52.000000 0.000000 0.000000
+v 43.875008 1.624999 0.133114
+v -51.999996 3.249997 -0.649985
+v -30.875000 4.875000 -0.196118
+v -19.500000 4.874999 0.728666
+v -8.124999 6.500001 0.341525
+v 17.875004 4.875000 0.080090
+v 9.750000 4.468750 -0.235460
+v 30.875000 4.875001 -0.371187
+v 37.375000 4.875001 0.276180
+v -52.000008 8.125002 0.153064
+v -37.375000 4.875002 -0.348155
+v -43.875004 6.500001 -0.096617
+v -15.437500 8.125000 0.418820
+v -1.625001 4.874999 -0.362543
+v 48.750008 3.250001 -0.207071
+v 43.875004 6.500000 0.202367
+v -35.750004 11.375002 -0.492869
+v -40.625004 11.375001 0.060413
+v -30.875000 11.374998 -0.291476
+v -24.375004 9.750000 0.068561
+v -24.375000 4.875001 0.811312
+v -19.500004 11.375002 -0.084847
+v -10.562500 11.374999 0.873314
+v 4.062500 6.906250 -0.359620
+v -1.624998 9.749998 0.529188
+v 21.125002 8.937501 -0.342159
+v 14.218750 13.000000 -0.000990
+v 26.812500 12.593749 -0.022003
+v 34.125000 11.375002 -0.016830
+v 40.625004 11.375000 0.395216
+v 45.500004 14.625000 -0.575324
+v 48.750008 8.125002 0.171281
+v -24.375000 14.625000 -0.216276
+v 1.625001 14.625000 -0.590961
+v 21.125000 14.625000 -0.401372
+v -39.000000 16.250000 0.242710
+v -43.468750 19.500000 0.415241
+v -29.250000 20.312500 -1.030489
+v -13.812502 14.625000 0.157591
+v -19.500000 18.281250 -0.911248
+v -4.875001 13.000000 1.030346
+v -8.125000 17.875000 0.713420
+v -3.250001 17.875002 0.341833
+v 17.062500 19.906250 0.059654
+v 34.125000 16.249996 -0.689055
+v 29.250000 17.875002 -0.687578
+v 40.625000 19.499998 -0.992783
+v -34.125000 16.250000 0.007468
+v -37.375000 21.125000 0.644363
+v -11.375001 22.750002 -0.447870
+v 6.500000 21.125000 -0.235567
+v 1.625000 21.125004 0.218590
+v 11.375001 21.125004 -0.050142
+v 8.531251 13.000000 0.081400
+v 24.375002 20.312504 -0.701679
+v 34.125000 21.125002 -0.451716
+v 47.125008 19.500002 -0.445400
+v -17.875004 22.750000 0.348315
+v -24.375002 24.375002 -0.341304
+v -4.875001 24.375002 -0.480032
+v 29.250000 24.375000 0.098432
+v -43.875008 27.625000 0.289985
+v -47.125008 22.750004 0.741983
+v -39.000000 27.625000 -0.424467
+v -29.250000 27.625000 -0.261093
+v -34.125000 27.625000 -0.416705
+v -14.625000 27.625000 0.060656
+v 4.875001 26.000000 0.007910
+v 9.750002 26.000000 0.216953
+v 16.656250 26.812500 0.009017
+v 25.593750 28.234375 0.244453
+v 39.000004 24.374998 -0.376630
+v 34.125000 26.812500 -0.399941
+v -19.500000 27.625000 -0.086975
+v -24.375002 29.250000 0.177554
+v -10.968750 32.500000 0.448720
+v -0.000001 27.625000 0.089650
+v -4.875000 29.250004 -0.007388
+v 11.375000 30.875000 0.012354
+v 4.875001 30.875000 -1.256353
+v 34.531250 32.500000 0.431515
+v 46.718758 24.375000 -0.769736
+v 40.625008 30.875000 0.644487
+v 46.312500 30.875000 0.183960
+v -47.125000 34.125000 -1.097996
+v -52.000000 29.250004 0.439636
+v -40.625000 34.125000 -0.104502
+v -34.125000 34.125000 -0.082943
+v -27.625000 34.125000 -0.177832
+v -17.875000 34.531250 0.427517
+v -22.750000 34.125000 0.539100
+v -1.625000 34.125000 -1.287874
+v -6.500003 34.125000 0.051822
+v 17.875002 34.125000 0.193342
+v 29.250000 34.125000 0.294090
+v 24.375000 34.125000 0.702717
+v 12.999998 35.750000 -0.170961
+v 6.093751 36.562500 -1.294542
+v 39.000000 37.375000 0.651018
+v 52.000008 34.124996 0.271071
+v 45.500004 37.375004 0.949136
+v -42.656254 39.812504 -0.262422
+v -52.000000 42.250008 0.481716
+v -35.750000 39.000000 -0.448039
+v -28.843750 40.015633 -0.494760
+v -4.875001 39.000004 0.431514
+v -11.375001 39.812508 0.524040
+v 0.000000 39.000000 0.000004
+v 11.375002 40.625004 -0.206536
+v 24.781250 42.250000 0.159883
+v 30.875000 39.812504 -0.203761
+v 43.062504 42.656254 0.186037
+v -34.125000 43.875000 -0.666983
+v -39.000000 43.875000 -0.317274
+v -21.125000 43.875004 0.443280
+v -21.125004 39.000008 0.277590
+v -16.250000 42.250008 -0.744044
+v -1.625000 43.875004 0.466695
+v 4.875000 43.875004 0.626991
+v 21.125000 39.000004 0.122309
+v 17.875000 43.875008 0.993016
+v 16.250004 39.000004 0.131159
+v 37.375000 43.875000 -0.781830
+v 51.999996 39.000004 0.000004
+v -43.875000 47.125000 -0.230965
+v -8.124999 43.875000 -0.023499
+v -13.000002 47.531254 -0.155538
+v 11.375000 46.312500 0.848139
+v 30.875000 44.687504 -0.029653
+v -52.000000 52.000000 0.000004
+v -34.124996 52.000008 -0.244909
+v -39.000004 51.999996 0.000004
+v -27.625000 47.937508 0.952216
+v -21.125004 48.750008 1.076026
+v -4.875001 48.750004 -0.858590
+v -0.812499 52.000008 -0.156766
+v 9.750002 52.000000 -0.167972
+v 17.875002 48.750008 0.205388
+v 27.625004 52.000008 0.115112
+v 32.500000 51.999996 0.107797
+v 39.000004 51.999996 0.000004
+v 35.750004 52.000008 0.241054
+v 52.000000 42.397736 -0.561429
+v 43.875008 52.000008 -0.541308
+v -52.000000 -52.000008 -0.000003
+v -40.625008 -52.000008 -0.603481
+v -30.875010 -52.000008 0.811088
+v 16.249996 -52.000000 -0.484148
+v 11.375006 -52.000008 -0.038105
+v 30.875010 -52.000008 0.592932
+v 52.000000 -32.500000 0.766970
+v 52.000008 -27.625004 0.049010
+v 52.000000 -16.249996 -1.031921
+v 47.937500 -14.625000 -0.621566
+v 52.000008 8.125001 -0.412910
+v 52.000008 14.625002 -0.008068
+v 52.000008 19.500002 0.731225
+v 52.000008 29.250000 0.379227
+v 26.000000 52.000000 0.000004
+v 17.875000 52.000000 0.302140
+v -24.375000 52.000008 -0.028592
+v -42.397736 52.000000 0.354935
+v -52.000000 16.536768 -0.147150
+v -47.125004 11.375000 0.442549
+v -52.000000 12.999997 0.000002
+v -52.000000 -3.249997 0.541167
+v -52.000008 -8.125002 0.618414
+v -6.499997 -51.999996 -0.220471
+v 51.999996 -48.750004 -1.002168
+v 51.999996 -39.000004 -0.000004
+v 17.875000 -4.875000 0.986181
+v 48.750004 51.999996 -0.171443
+v -16.249996 -52.000000 0.015721
+v -11.375006 -52.000008 -0.348321
+v 52.000000 -52.000008 -0.000001
+v 52.000008 3.250001 0.041274
+v 52.000008 24.375000 0.286849
+v 52.000000 52.000000 0.000004
+v -8.125001 52.000008 -1.300457
+v -13.000002 52.000008 0.000004
+v -17.875002 52.000008 0.752858
+v -29.250000 52.000008 0.234945
+v 52.000000 -52.000008 -10.000001
+v 52.000000 52.000000 -9.999996
+v -52.000000 52.000000 -9.999996
+v -52.000000 -52.000008 -10.000003
+vn 0.0448 -0.0464 0.9979
+vn 0.0198 -0.0899 0.9958
+vn 0.0361 0.0547 0.9979
+vn 0.0343 0.0520 0.9981
+vn 0.0341 0.0517 0.9981
+vn -0.0042 0.0246 0.9997
+vn 0.1193 -0.0497 0.9916
+vn 0.0216 -0.0500 0.9985
+vn -0.0417 -0.0941 0.9947
+vn -0.0420 -0.0940 0.9947
+vn -0.0414 -0.0943 0.9947
+vn -0.0427 -0.0936 0.9947
+vn -0.2026 -0.1235 0.9714
+vn -0.2002 -0.1059 0.9740
+vn -0.0038 -0.0582 0.9983
+vn -0.0389 0.0013 0.9992
+vn -0.0576 -0.0070 0.9983
+vn 0.1538 0.0079 0.9881
+vn -0.1999 -0.0034 0.9798
+vn 0.0804 0.0547 0.9953
+vn 0.0126 -0.0893 0.9959
+vn 0.1777 0.1953 0.9645
+vn 0.1385 -0.0809 0.9871
+vn 0.0471 0.0463 0.9978
+vn 0.0013 0.0478 0.9989
+vn -0.0035 0.0120 0.9999
+vn -0.0011 0.0163 0.9999
+vn -0.0039 0.0113 0.9999
+vn 0.0187 0.0166 0.9997
+vn 0.0096 0.0946 0.9955
+vn 0.0435 -0.0076 0.9990
+vn 0.0342 -0.0022 0.9994
+vn 0.0440 -0.0078 0.9990
+vn 0.0337 -0.0019 0.9994
+vn -0.0577 -0.0425 0.9974
+vn -0.0972 -0.0357 0.9946
+vn -0.0416 0.0536 0.9977
+vn 0.0560 0.1020 0.9932
+vn 0.0928 0.1033 0.9903
+vn 0.1537 0.0463 0.9870
+vn 0.0193 -0.0832 0.9963
+vn -0.1082 0.1788 0.9779
+vn 0.0532 0.0769 0.9956
+vn 0.0310 -0.0001 0.9995
+vn -0.0502 0.0390 0.9980
+vn 0.1207 0.1750 0.9771
+vn 0.0025 0.0880 0.9961
+vn 0.0417 0.0793 0.9960
+vn -0.0609 0.0509 0.9968
+vn 0.0371 0.0864 0.9956
+vn -0.1055 -0.0873 0.9906
+vn 0.0076 0.1185 0.9929
+vn -0.0258 0.1708 0.9850
+vn -0.0648 0.0216 0.9977
+vn -0.0231 0.0356 0.9991
+vn -0.0223 0.0376 0.9990
+vn -0.0230 0.0357 0.9991
+vn 0.0418 0.0146 0.9990
+vn 0.1050 -0.0379 0.9938
+vn -0.0033 -0.1023 0.9948
+vn 0.0006 -0.1035 0.9946
+vn 0.0040 -0.1057 0.9944
+vn 0.0293 -0.0823 0.9962
+vn 0.0308 -0.0828 0.9961
+vn 0.0293 -0.0825 0.9962
+vn 0.0312 0.1417 0.9894
+vn -0.1499 -0.1136 0.9821
+vn 0.1096 -0.0393 0.9932
+vn 0.1095 -0.0387 0.9932
+vn 0.1076 -0.0372 0.9935
+vn 0.1225 -0.0422 0.9916
+vn 0.1218 -0.0417 0.9917
+vn -0.0274 -0.1802 0.9832
+vn -0.1250 -0.1077 0.9863
+vn 0.0372 -0.1084 0.9934
+vn 0.0376 -0.1083 0.9934
+vn 0.0430 -0.1033 0.9937
+vn -0.0183 0.0363 0.9992
+vn 0.0230 -0.0361 0.9991
+vn -0.0024 0.0173 0.9998
+vn 0.0075 -0.1466 0.9892
+vn -0.1764 -0.1255 0.9763
+vn 0.1185 -0.1212 0.9855
+vn 0.1565 -0.0961 0.9830
+vn -0.0979 0.0605 0.9934
+vn 0.1245 0.0910 0.9880
+vn 0.0232 0.0531 0.9983
+vn 0.0232 0.0534 0.9983
+vn 0.0428 -0.1029 0.9938
+vn 0.1371 -0.0323 0.9900
+vn 0.1409 -0.1645 0.9763
+vn -0.0966 -0.2414 0.9656
+vn 0.1164 -0.0064 0.9932
+vn -0.1528 0.0076 0.9882
+vn 0.0475 0.0052 0.9989
+vn 0.1478 0.0764 0.9861
+vn -0.1533 0.1389 0.9784
+vn -0.1500 0.1428 0.9783
+vn -0.1531 0.1392 0.9784
+vn -0.0167 0.0110 0.9998
+vn -0.1480 0.0345 0.9884
+vn 0.0473 0.0838 0.9954
+vn -0.1572 0.0916 0.9833
+vn -0.1564 0.0924 0.9834
+vn -0.0001 0.1018 0.9948
+vn 0.0646 0.0174 0.9978
+vn 0.0658 0.0270 0.9975
+vn 0.0651 0.0177 0.9977
+vn 0.0208 -0.0979 0.9950
+vn 0.0218 -0.0967 0.9951
+vn 0.0232 -0.0953 0.9952
+vn 0.1273 -0.0708 0.9893
+vn -0.0096 0.0988 0.9951
+vn -0.1383 0.0261 0.9901
+vn 0.1248 -0.0721 0.9896
+vn 0.0424 -0.1086 0.9932
+vn -0.0595 0.1287 0.9899
+vn -0.1110 0.1612 0.9807
+vn -0.1283 -0.0002 0.9917
+vn 0.1511 0.0510 0.9872
+vn 0.1516 0.0511 0.9871
+vn 0.1601 0.0510 0.9858
+vn -0.0222 -0.0297 0.9993
+vn -0.0332 0.0312 0.9990
+vn 0.0575 -0.0794 0.9952
+vn 0.0572 -0.0797 0.9952
+vn 0.0501 -0.0797 0.9956
+vn -0.1624 0.0292 0.9863
+vn 0.0511 0.1363 0.9893
+vn 0.0466 0.1266 0.9909
+vn 0.0507 0.1357 0.9895
+vn -0.0595 0.0545 0.9967
+vn 0.0657 0.0277 0.9975
+vn 0.0204 0.0726 0.9972
+vn 0.1446 0.1568 0.9770
+vn 0.0743 -0.1322 0.9884
+vn 0.1357 0.0093 0.9907
+vn 0.2224 -0.0969 0.9701
+vn 0.1422 -0.1330 0.9809
+vn -0.1344 0.0917 0.9867
+vn -0.0690 -0.0904 0.9935
+vn -0.0725 -0.0856 0.9937
+vn -0.0689 -0.0900 0.9936
+vn -0.0924 -0.0714 0.9932
+vn -0.2080 -0.0440 0.9771
+vn 0.0095 -0.0401 0.9992
+vn -0.0077 -0.0252 0.9997
+vn -0.0079 -0.0249 0.9997
+vn -0.0072 -0.0330 0.9994
+vn 0.0235 0.0109 0.9997
+vn 0.0240 0.0109 0.9997
+vn 0.0273 0.0109 0.9996
+vn -0.0332 0.0168 0.9993
+vn -0.1023 0.0019 0.9948
+vn 0.1681 -0.1040 0.9803
+vn -0.0760 -0.0807 0.9938
+vn 0.0745 -0.1098 0.9912
+vn 0.2004 -0.0018 0.9797
+vn -0.1526 0.1740 0.9728
+vn 0.0680 0.3055 0.9498
+vn -0.0969 -0.0233 0.9950
+vn 0.0188 0.0382 0.9991
+vn -0.0115 0.0774 0.9969
+vn -0.0094 0.0799 0.9968
+vn -0.0118 0.0771 0.9970
+vn 0.0024 -0.1958 0.9806
+vn 0.0770 -0.2012 0.9765
+vn -0.2179 0.1172 0.9689
+vn -0.1530 0.1588 0.9754
+vn -0.0966 -0.0877 0.9914
+vn 0.0281 0.0025 0.9996
+vn 0.0303 -0.0033 0.9995
+vn 0.0307 -0.0042 0.9995
+vn 0.0605 -0.0136 0.9981
+vn -0.0092 0.0801 0.9967
+vn -0.1047 0.1271 0.9863
+vn 0.1188 -0.0746 0.9901
+vn 0.0129 0.1718 0.9850
+vn 0.0140 0.1717 0.9851
+vn 0.0036 0.1720 0.9851
+vn 0.1997 0.0826 0.9764
+vn -0.1632 0.2598 0.9518
+vn 0.0035 -0.0624 0.9980
+vn 0.0039 -0.0624 0.9980
+vn 0.0036 -0.0624 0.9980
+vn -0.0539 0.1958 0.9792
+vn 0.0154 -0.0366 0.9992
+vn -0.1298 -0.0845 0.9879
+vn 0.0414 -0.0748 0.9963
+vn 0.0404 -0.0714 0.9966
+vn 0.0403 -0.0710 0.9967
+vn 0.1374 -0.1328 0.9816
+vn -0.0413 0.0517 0.9978
+vn -0.2870 -0.2227 0.9317
+vn -0.0028 -0.0496 0.9988
+vn -0.1253 -0.1613 0.9789
+vn 0.0401 0.0448 0.9982
+vn 0.0498 0.0448 0.9978
+vn 0.0491 0.0448 0.9978
+vn 0.0067 -0.0175 0.9998
+vn 0.0657 -0.1635 0.9844
+vn 0.0743 -0.0142 0.9971
+vn 0.1128 -0.0061 0.9936
+vn -0.0413 0.0325 0.9986
+vn -0.0516 0.0146 0.9986
+vn -0.0191 0.1506 0.9884
+vn -0.0237 0.1242 0.9920
+vn -0.0153 -0.1160 0.9931
+vn 0.0625 -0.1796 0.9818
+vn 0.0636 -0.1796 0.9817
+vn 0.0749 0.0436 0.9962
+vn 0.0722 -0.0071 0.9974
+vn -0.0991 -0.0047 0.9951
+vn -0.0633 0.0134 0.9979
+vn 0.1539 0.0636 0.9860
+vn -0.0272 0.1006 0.9946
+vn 0.0120 0.0583 0.9982
+vn 0.1984 0.0919 0.9758
+vn -0.0683 0.0191 0.9975
+vn -0.0629 0.0104 0.9980
+vn -0.0634 0.0113 0.9979
+vn 0.0092 -0.0404 0.9991
+vn 0.1125 -0.0745 0.9909
+vn -0.0579 0.0927 0.9940
+vn -0.1100 0.1178 0.9869
+vn -0.1100 0.1181 0.9869
+vn -0.1096 0.1181 0.9869
+vn -0.0387 0.0391 0.9985
+vn 0.0755 0.1147 0.9905
+vn 0.2265 0.0616 0.9721
+vn 0.2238 0.0736 0.9718
+vn 0.2270 0.0616 0.9719
+vn 0.0663 -0.0361 0.9971
+vn 0.0366 0.1081 0.9935
+vn 0.0364 0.1084 0.9934
+vn 0.0482 0.1026 0.9936
+vn -0.0627 0.1363 0.9887
+vn 0.0837 0.1678 0.9823
+vn 0.2026 0.0071 0.9792
+vn 0.0211 0.1594 0.9870
+vn -0.1657 0.1226 0.9785
+vn 0.0921 -0.1231 0.9881
+vn 0.0145 0.0111 0.9998
+vn -0.0195 -0.0008 0.9998
+vn -0.0256 0.0055 0.9997
+vn -0.0187 0.0028 0.9998
+vn -0.0396 0.0752 0.9964
+vn 0.0485 0.1028 0.9935
+vn 0.0708 -0.0485 0.9963
+vn -0.0841 0.0013 0.9965
+vn -0.0853 0.0019 0.9964
+vn -0.0839 0.0014 0.9965
+vn -0.1560 -0.2150 0.9641
+vn 0.1157 -0.3082 0.9443
+vn -0.0458 0.2025 0.9782
+vn -0.0502 0.1129 0.9923
+vn 0.0320 -0.1200 0.9923
+vn 0.1072 0.0207 0.9940
+vn 0.1450 0.0225 0.9892
+vn -0.0317 -0.1046 0.9940
+vn -0.0533 -0.1045 0.9931
+vn -0.0537 -0.1050 0.9930
+vn -0.0537 -0.1051 0.9930
+vn 0.1216 -0.0225 0.9923
+vn 0.0927 -0.0188 0.9955
+vn -0.0427 -0.0642 0.9970
+vn -0.0404 -0.0656 0.9970
+vn -0.0428 -0.0640 0.9970
+vn -0.0193 0.0062 0.9998
+vn -0.0272 0.0057 0.9996
+vn -0.0735 -0.1071 0.9915
+vn -0.0093 -0.0091 0.9999
+vn 0.0187 -0.1058 0.9942
+vn 0.0237 -0.0960 0.9951
+vn 0.0203 -0.0974 0.9950
+vn 0.0189 -0.0924 0.9955
+vn -0.0519 -0.0964 0.9940
+vn -0.1857 0.2467 0.9512
+vn 0.0819 0.0399 0.9958
+vn -0.0741 -0.1389 0.9875
+vn -0.0730 -0.1383 0.9877
+vn -0.0697 -0.1395 0.9878
+vn 0.0501 -0.1672 0.9846
+vn 0.0799 -0.1398 0.9869
+vn 0.0658 0.2397 0.9686
+vn 0.1450 -0.0125 0.9894
+vn -0.0025 -0.0504 0.9987
+vn -0.0017 -0.0498 0.9988
+vn -0.0016 -0.0496 0.9988
+vn -0.0319 -0.0513 0.9982
+vn -0.0931 0.0105 0.9956
+vn 0.0296 -0.0834 0.9961
+vn 0.0284 -0.0821 0.9962
+vn 0.0298 -0.0838 0.9960
+vn -0.0215 -0.0639 0.9977
+vn -0.0296 -0.0671 0.9973
+vn -0.0302 -0.0672 0.9973
+vn 0.2642 0.0764 0.9614
+vn 0.0539 0.2199 0.9740
+vn 0.1116 0.2327 0.9661
+vn -0.0229 -0.0214 0.9995
+vn -0.0169 -0.0223 0.9996
+vn 0.0834 -0.0601 0.9947
+vn 0.0669 -0.0499 0.9965
+vn -0.1500 0.0870 0.9849
+vn -0.0558 0.0561 0.9969
+vn 0.0807 0.0192 0.9966
+vn 0.0481 -0.1108 0.9927
+vn 0.0338 -0.1712 0.9847
+vn 0.0314 0.0390 0.9987
+vn 0.0313 0.0384 0.9988
+vn 0.0309 0.0352 0.9989
+vn -0.1455 0.0231 0.9891
+vn 0.0130 -0.0096 0.9999
+vn 0.0847 -0.2811 0.9559
+vn 0.0847 -0.2810 0.9560
+vn 0.0846 -0.2808 0.9560
+vn 0.0900 -0.2823 0.9551
+vn -0.1659 -0.0481 0.9850
+vn -0.0770 -0.0157 0.9969
+vn -0.0811 -0.0197 0.9965
+vn 0.0846 0.0630 0.9944
+vn 0.0840 0.0626 0.9945
+vn 0.0834 0.0623 0.9946
+vn 0.0008 0.0870 0.9962
+vn -0.0926 0.0401 0.9949
+vn -0.0455 0.1223 0.9915
+vn 0.0715 -0.0509 0.9961
+vn 0.0715 -0.0516 0.9961
+vn 0.0002 0.0448 0.9990
+vn -0.0924 -0.0338 0.9951
+vn -0.0947 -0.0338 0.9949
+vn -0.1025 -0.0338 0.9942
+vn -0.1617 0.1813 0.9700
+vn 0.0880 -0.0658 0.9939
+vn -0.0245 -0.1034 0.9943
+vn -0.0033 -0.2547 0.9670
+vn 0.0018 -0.1747 0.9846
+vn 0.0922 -0.1152 0.9891
+vn -0.1266 0.1832 0.9749
+vn 0.0963 0.1858 0.9779
+vn 0.0167 -0.0015 0.9999
+vn 0.0460 0.0972 0.9942
+vn -0.0899 -0.1816 0.9793
+vn 0.1103 -0.0360 0.9932
+vn 0.1100 -0.0393 0.9932
+vn 0.1105 -0.0355 0.9932
+vn 0.0579 0.0493 0.9971
+vn 0.0501 -0.0390 0.9980
+vn -0.2115 -0.0507 0.9761
+vn -0.0322 -0.1748 0.9841
+vn 0.1299 -0.1276 0.9833
+vn 0.0669 0.1250 0.9899
+vn -0.0734 0.2157 0.9737
+vn -0.2454 0.0985 0.9644
+vn -0.0898 0.1502 0.9846
+vn 0.0491 0.1892 0.9807
+vn 0.1547 0.1576 0.9753
+vn 0.0331 -0.0051 0.9994
+vn 0.1095 -0.0430 0.9931
+vn 0.0735 -0.1101 0.9912
+vn -0.1797 -0.0586 0.9820
+vn 0.0851 0.0700 0.9939
+vn 0.0941 0.0526 0.9942
+vn -0.2749 0.0326 0.9609
+vn 0.1635 0.0885 0.9826
+vn 0.0892 -0.2029 0.9751
+vn 0.1035 -0.1980 0.9747
+vn 0.0955 0.0591 0.9937
+vn -0.2933 -0.1941 0.9361
+vn -0.0581 -0.0330 0.9978
+vn 0.0577 -0.1064 0.9926
+vn -0.0825 -0.1387 0.9869
+vn 0.1764 -0.0762 0.9814
+vn -0.0867 0.0708 0.9937
+vn -0.0869 0.0024 0.9962
+vn -0.2344 0.0451 0.9711
+vn -0.0765 -0.1494 0.9858
+vn -0.0280 0.0222 0.9994
+vn 0.0371 -0.0297 0.9989
+vn -0.0525 0.2739 0.9603
+vn 0.1027 -0.1493 0.9834
+vn -0.1225 -0.0458 0.9914
+vn -0.0761 0.0403 0.9963
+vn -0.0796 0.0322 0.9963
+vn -0.0800 0.0313 0.9963
+vn 0.1237 0.0157 0.9922
+vn -0.0052 -0.0314 0.9995
+vn -0.0050 -0.0310 0.9995
+vn -0.0039 -0.0852 0.9964
+vn -0.2506 0.0500 0.9668
+vn 0.1004 0.0245 0.9946
+vn -0.0058 0.0207 0.9998
+vn -0.0339 0.0263 0.9991
+vn -0.2286 -0.0919 0.9692
+vn 0.0878 -0.2181 0.9720
+vn 0.0459 -0.2286 0.9724
+vn 0.0240 -0.0127 0.9996
+vn -0.0116 -0.0255 0.9996
+vn 0.2344 -0.0589 0.9704
+vn 0.0607 -0.0287 0.9977
+vn 0.0363 0.0549 0.9978
+vn -0.0045 0.1760 0.9844
+vn -0.1390 -0.0809 0.9870
+vn -0.0058 0.0640 0.9979
+vn -0.0088 0.0091 0.9999
+vn 0.0099 -0.0034 0.9999
+vn 0.0568 0.0201 0.9982
+vn -0.0007 0.0166 0.9999
+vn 0.0170 -0.0406 0.9990
+vn -0.0042 -0.0379 0.9993
+vn 0.0471 -0.0206 0.9987
+vn -0.2285 0.0991 0.9685
+vn -0.0868 0.1034 0.9909
+vn 0.0166 0.0600 0.9981
+vn -0.0705 0.0983 0.9927
+vn -0.0652 0.1009 0.9928
+vn -0.0700 0.0983 0.9927
+vn -0.0645 0.1013 0.9928
+vn -0.0357 -0.1433 0.9890
+vn 0.0334 0.1797 0.9832
+vn -0.0419 -0.0001 0.9991
+vn 0.0333 0.0509 0.9982
+vn 0.0619 0.0410 0.9972
+vn 0.1097 0.0528 0.9926
+vn -0.0088 0.1122 0.9937
+vn 0.0556 0.2075 0.9767
+vn -0.1248 0.1188 0.9850
+vn -0.0070 -0.0286 0.9996
+vn 0.0489 0.0649 0.9967
+vn 0.1047 0.0833 0.9910
+vn 0.0419 0.1252 0.9913
+vn -0.0509 0.0884 0.9948
+vn 0.1271 -0.0054 0.9919
+vn -0.1188 0.1552 0.9807
+vn 0.0103 0.1404 0.9900
+vn -0.0285 0.0280 0.9992
+vn 0.1238 0.0746 0.9895
+vn 0.0030 0.1783 0.9840
+vn -0.0624 -0.0092 0.9980
+vn -0.0306 -0.0013 0.9995
+vn 0.0230 -0.0106 0.9997
+vn 0.0046 -0.1049 0.9945
+vn 0.0310 -0.0828 0.9961
+vn -0.1826 -0.1022 0.9779
+vn 0.0715 -0.2279 0.9710
+vn -0.0847 -0.0963 0.9917
+vn -0.0181 0.0362 0.9992
+vn 0.0793 0.0213 0.9966
+vn -0.1997 -0.1436 0.9693
+vn 0.0334 -0.1274 0.9913
+vn -0.1563 -0.0980 0.9828
+vn -0.1668 -0.0415 0.9851
+vn 0.1750 0.0496 0.9833
+vn 0.0273 0.0509 0.9983
+vn -0.1759 -0.0931 0.9800
+vn -0.0299 -0.1521 0.9879
+vn 0.0183 -0.0591 0.9981
+vn 0.0190 -0.0589 0.9981
+vn 0.0197 -0.0586 0.9981
+vn 0.0046 -0.0493 0.9988
+vn -0.1464 0.0752 0.9864
+vn 0.0768 -0.0308 0.9966
+vn 0.0768 -0.0306 0.9966
+vn 0.0768 -0.0262 0.9967
+vn 0.0297 -0.0638 0.9975
+vn 0.1181 -0.0480 0.9918
+vn 0.0003 0.0289 0.9996
+vn -0.0048 0.0292 0.9996
+vn 0.0008 0.0288 0.9996
+vn -0.0054 0.0293 0.9996
+vn 0.0335 0.0935 0.9951
+vn -0.1581 0.0908 0.9832
+vn 0.0308 0.0118 0.9995
+vn 0.1745 -0.0939 0.9802
+vn 0.0204 -0.0981 0.9950
+vn -0.1323 0.0858 0.9875
+vn -0.0256 0.0030 0.9997
+vn 0.0303 0.1618 0.9864
+vn 0.0332 0.1621 0.9862
+vn 0.0769 -0.0259 0.9967
+vn 0.1606 0.0510 0.9857
+vn 0.0360 -0.1035 0.9940
+vn 0.0235 0.0312 0.9992
+vn 0.0498 -0.0794 0.9956
+vn -0.0896 0.0350 0.9954
+vn 0.1047 0.0669 0.9923
+vn -0.0686 -0.1322 0.9888
+vn -0.1265 0.0093 0.9919
+vn -0.1814 -0.0978 0.9785
+vn 0.0313 -0.0600 0.9977
+vn -0.0063 -0.1466 0.9892
+vn 0.0466 0.1262 0.9909
+vn 0.0823 -0.0715 0.9940
+vn -0.1124 -0.0447 0.9927
+vn 0.3309 0.0911 0.9393
+vn 0.0279 0.0109 0.9996
+vn -0.0002 -0.0125 0.9999
+vn -0.0008 -0.0127 0.9999
+vn 0.0002 -0.0124 0.9999
+vn -0.0012 -0.0129 0.9999
+vn -0.0305 0.2544 0.9666
+vn -0.0575 0.2625 0.9632
+vn -0.2167 0.1565 0.9636
+vn 0.1047 -0.0574 0.9928
+vn 0.0345 -0.1102 0.9933
+vn -0.0818 -0.1097 0.9906
+vn -0.0111 -0.1729 0.9849
+vn 0.1253 -0.2045 0.9708
+vn 0.0249 -0.2691 0.9628
+vn -0.0909 -0.1955 0.9765
+vn 0.0278 0.0034 0.9996
+vn 0.0249 0.0618 0.9978
+vn 0.1720 -0.0271 0.9847
+vn 0.1282 -0.1032 0.9864
+vn 0.1350 -0.1008 0.9857
+vn 0.1279 -0.1030 0.9864
+vn 0.1353 -0.1005 0.9857
+vn -0.0387 -0.0092 0.9992
+vn -0.0583 0.0413 0.9974
+vn -0.0123 -0.0137 0.9998
+vn -0.0800 0.0771 0.9938
+vn 0.0416 -0.0750 0.9963
+vn 0.0030 0.1717 0.9851
+vn -0.0111 0.1959 0.9806
+vn -0.0634 0.1787 0.9819
+vn 0.0257 0.0982 0.9948
+vn 0.3312 0.1715 0.9278
+vn 0.0033 -0.0624 0.9980
+vn 0.0695 0.0056 0.9976
+vn -0.0234 -0.0002 0.9997
+vn -0.1521 -0.1186 0.9812
+vn 0.0169 -0.0594 0.9981
+vn 0.0861 -0.1233 0.9886
+vn -0.1755 -0.0348 0.9839
+vn -0.0324 0.0893 0.9955
+vn 0.0175 0.0915 0.9956
+vn 0.0337 0.0789 0.9963
+vn 0.0142 -0.0224 0.9996
+vn 0.0005 -0.0178 0.9998
+vn 0.1466 -0.2300 0.9621
+vn -0.0990 -0.0433 0.9941
+vn 0.0362 0.0996 0.9944
+vn 0.0396 0.0449 0.9982
+vn 0.0824 -0.0080 0.9966
+vn 0.0286 0.0807 0.9963
+vn 0.0149 -0.0142 0.9998
+vn 0.0181 -0.0271 0.9995
+vn 0.0150 -0.0148 0.9998
+vn 0.0321 -0.0773 0.9965
+vn 0.0099 -0.1034 0.9946
+vn 0.0585 -0.0711 0.9957
+vn 0.0262 -0.0496 0.9984
+vn -0.0234 0.0147 0.9996
+vn -0.1515 0.1489 0.9772
+vn 0.0168 0.1242 0.9921
+vn 0.0615 -0.1796 0.9818
+vn -0.0401 -0.0428 0.9983
+vn 0.0145 -0.0350 0.9993
+vn -0.0384 -0.0073 0.9992
+vn -0.0685 0.0193 0.9975
+vn -0.0090 -0.0499 0.9987
+vn 0.0182 -0.0274 0.9995
+vn -0.0407 0.0583 0.9975
+vn -0.0762 0.0590 0.9953
+vn -0.1422 0.0752 0.9870
+vn -0.1414 0.0760 0.9870
+vn -0.1420 0.0752 0.9870
+vn 0.0031 -0.1069 0.9943
+vn 0.0319 -0.1211 0.9921
+vn 0.2239 0.0740 0.9718
+vn -0.0971 -0.0008 0.9953
+vn 0.0554 0.0104 0.9984
+vn -0.0792 0.0390 0.9961
+vn -0.0768 0.0411 0.9962
+vn 0.0587 -0.0230 0.9980
+vn 0.0479 -0.1178 0.9919
+vn -0.0411 -0.0884 0.9952
+vn 0.1671 0.0510 0.9846
+vn 0.0524 0.1186 0.9916
+vn -0.1404 0.0769 0.9871
+vn 0.0221 0.1366 0.9904
+vn -0.0381 0.1683 0.9850
+vn -0.0171 -0.0764 0.9969
+vn 0.0480 -0.0979 0.9940
+vn -0.1159 0.1083 0.9873
+vn 0.1069 -0.1229 0.9867
+vn -0.0933 0.0155 0.9955
+vn -0.0380 0.0295 0.9988
+vn 0.1039 -0.0069 0.9946
+vn -0.0159 -0.0486 0.9987
+vn -0.0221 -0.1246 0.9920
+vn -0.0377 -0.1229 0.9917
+vn 0.0752 0.1436 0.9868
+vn 0.1100 -0.1345 0.9848
+vn -0.0628 -0.1198 0.9908
+vn 0.0559 -0.1068 0.9927
+vn 0.0556 -0.1067 0.9927
+vn 0.0533 -0.1077 0.9928
+vn -0.0838 0.0592 0.9947
+vn 0.0325 0.0708 0.9970
+vn -0.0753 0.1434 0.9868
+vn -0.0016 0.1619 0.9868
+vn 0.2069 0.0560 0.9768
+vn -0.0909 0.0585 0.9941
+vn -0.0302 0.0789 0.9964
+vn -0.1108 -0.0080 0.9938
+vn 0.0255 0.0262 0.9993
+vn -0.0379 -0.0673 0.9970
+vn 0.0351 -0.0430 0.9985
+vn 0.1062 -0.0091 0.9943
+vn 0.0506 -0.1086 0.9928
+vn -0.0541 -0.1057 0.9929
+vn 0.0174 -0.0923 0.9956
+vn 0.0230 -0.0965 0.9951
+vn 0.0994 0.2498 0.9632
+vn -0.0428 0.0561 0.9975
+vn 0.0262 0.0332 0.9991
+vn -0.0712 -0.1374 0.9880
+vn -0.1497 0.1343 0.9796
+vn -0.0033 -0.0513 0.9987
+vn 0.0146 -0.0165 0.9998
+vn -0.1455 -0.0249 0.9891
+vn 0.0272 -0.0806 0.9964
+vn -0.0216 -0.0632 0.9978
+vn 0.0829 0.0155 0.9964
+vn -0.0166 -0.0224 0.9996
+vn -0.0778 -0.0933 0.9926
+vn -0.0686 -0.1395 0.9878
+vn -0.0013 0.0070 1.0000
+vn -0.1914 0.0476 0.9804
+vn -0.0377 -0.0104 0.9992
+vn -0.0455 -0.1224 0.9914
+vn -0.1510 -0.0265 0.9882
+vn -0.0033 0.0736 0.9973
+vn -0.0036 0.0735 0.9973
+vn -0.0037 0.0735 0.9973
+vn -0.0040 0.0733 0.9973
+vn 0.0146 0.0567 0.9983
+vn -0.0884 0.0827 0.9926
+vn 0.0189 0.0473 0.9987
+vn -0.0062 -0.0106 0.9999
+vn 0.1312 -0.1204 0.9840
+vn 0.2615 -0.1613 0.9516
+vn -0.0729 -0.0116 0.9973
+vn 0.0018 0.0134 0.9999
+vn -0.0780 0.0665 0.9947
+vn -0.0731 0.0699 0.9949
+vn -0.0776 0.0669 0.9947
+vn -0.0725 0.0701 0.9949
+vn 0.0845 0.0629 0.9944
+vn 0.1308 0.0550 0.9899
+vn 0.0309 0.0346 0.9989
+vn -0.1039 -0.0338 0.9940
+vn 0.2639 0.0902 0.9603
+vn 0.0281 0.1114 0.9934
+vn -0.0751 0.0429 0.9963
+vn 0.1110 -0.2352 0.9656
+vn -0.1136 -0.1361 0.9842
+vn 0.0453 -0.0357 0.9983
+vn -0.0413 0.2052 0.9778
+vn 0.0869 0.1624 0.9829
+vn 0.0818 0.0093 0.9966
+vn -0.1459 -0.1560 0.9769
+vn 0.1651 -0.2090 0.9639
+vn -0.2346 0.0361 0.9714
+vn 0.0349 -0.1822 0.9826
+vn -0.0083 -0.0390 0.9992
+vn 0.0715 -0.0517 0.9961
+vn -0.0028 -0.1287 0.9917
+vn -0.0246 0.0789 0.9966
+vn 0.0011 0.0967 0.9953
+vn 0.0184 0.1595 0.9870
+vn 0.0197 0.0139 0.9997
+vn -0.0706 0.0252 0.9972
+vn 0.0015 -0.0191 0.9998
+vn -0.0406 -0.1328 0.9903
+vn 0.1101 0.0676 0.9916
+vn -0.0755 -0.0660 0.9950
+vn -0.0023 -0.0606 0.9982
+vn -0.0041 0.0897 0.9960
+vn -0.1221 0.0940 0.9881
+vn 0.0744 0.0454 0.9962
+vn -0.0262 -0.0049 0.9996
+vn 0.0621 -0.2952 0.9534
+vn 0.1751 -0.2566 0.9505
+vn -0.1205 0.0589 0.9910
+vn 0.0544 0.2942 0.9542
+vn -0.0686 0.1454 0.9870
+vn -0.1498 0.1431 0.9783
+vn 0.0124 -0.2156 0.9764
+vn -0.0762 -0.0127 0.9970
+vn -0.0759 0.0925 0.9928
+vn 0.1766 -0.0612 0.9824
+vn -0.2321 -0.1458 0.9617
+vn -0.1954 0.0890 0.9767
+vn -0.1961 -0.0186 0.9804
+vn -0.0526 -0.0583 0.9969
+vn -0.0577 -0.0297 0.9979
+vn -0.1545 -0.0202 0.9878
+vn 0.0564 0.1896 0.9802
+vn 0.2576 -0.0336 0.9657
+vn 0.1438 -0.0439 0.9886
+vn 0.1525 -0.0344 0.9877
+vn 0.1510 -0.0360 0.9879
+vn 0.1431 -0.0448 0.9887
+vn -0.1166 0.2131 0.9700
+vn 0.0530 0.1941 0.9795
+vn -0.0971 0.1353 0.9860
+vn -0.0367 -0.1083 0.9934
+vn 0.3036 -0.0031 0.9528
+vn 0.2621 0.1585 0.9519
+vn 0.1909 -0.1235 0.9738
+vn -0.0000 -0.0000 1.0000
+vn -0.0000 1.0000 -0.0000
+vn -0.0000 1.0000 0.0002
+vn -1.0000 0.0000 0.0000
+vn -1.0000 0.0000 -0.0001
+vn 0.0000 -1.0000 0.0001
+vn 0.0000 -1.0000 -0.0000
+vn -1.0000 0.0000 0.0001
+vn -0.0000 -1.0000 -0.0002
+vn -0.0000 -1.0000 -0.0001
+vn 1.0000 0.0000 0.0000
+vn 1.0000 -0.0000 -0.0001
+s 1
+f 6633//3386 6634//3386 6635//3386
+f 6636//3387 6637//3387 6633//3387
+f 6638//3388 6639//3389 6640//3390
+f 6641//3391 6642//3391 6643//3391
+f 6644//3392 6642//3392 6641//3392
+f 6645//3393 6642//3393 6644//3393
+f 6646//3394 6647//3395 6648//3396
+f 6649//3397 6647//3395 6646//3394
+f 6649//3398 6650//3398 6647//3398
+f 6651//3399 6652//3399 6653//3399
+f 6654//3400 6652//3400 6651//3400
+f 6655//3401 6656//3401 6657//3401
+f 6655//3402 6658//3402 6656//3402
+f 6659//3403 6660//3403 6658//3403
+f 6639//3404 6661//3404 6636//3404
+f 6643//3405 6662//3405 6638//3405
+f 6663//3406 6664//3406 6645//3406
+f 6665//3407 6666//3407 6650//3407
+f 6665//3408 6667//3408 6668//3408
+f 6652//3409 6667//3409 6669//3409
+f 6656//3410 6670//3410 6654//3410
+f 6637//3411 6671//3412 6634//3413
+f 6661//3414 6672//3414 6637//3414
+f 6639//3415 6662//3415 6661//3415
+f 6642//3416 6673//3417 6674//3418
+f 6645//3419 6673//3417 6642//3416
+f 6664//3420 6673//3420 6645//3420
+f 6663//3421 6675//3421 6676//3421
+f 6647//3422 6675//3422 6648//3422
+f 6647//3423 6666//3423 6675//3423
+f 6668//3424 6667//3424 6677//3424
+f 6660//3425 6678//3425 6658//3425
+f 6672//3426 6679//3426 6671//3426
+f 6662//3427 6674//3427 6680//3427
+f 6673//3428 6681//3428 6674//3428
+f 6676//3429 6682//3429 6664//3429
+f 6666//3430 6677//3430 6683//3430
+f 6684//3431 6685//3431 6686//3431
+f 6670//3432 6687//3432 6688//3432
+f 6679//3433 6689//3433 6690//3433
+f 6682//3434 6691//3434 6673//3434
+f 6676//3435 6691//3435 6682//3435
+f 6675//3436 6692//3436 6676//3436
+f 6675//3437 6683//3437 6693//3437
+f 6694//3438 6695//3438 6677//3438
+f 6678//3439 6696//3439 6687//3439
+f 6678//3440 6697//3441 6696//3442
+f 6689//3443 6698//3443 6690//3443
+f 6699//3444 6700//3444 6689//3444
+f 6701//3445 6702//3446 6699//3447
+f 6703//3448 6704//3449 6680//3450
+f 6695//3451 6693//3451 6683//3451
+f 6694//3452 6705//3452 6695//3452
+f 6694//3453 6706//3454 6705//3455
+f 6685//3456 6706//3454 6686//3457
+f 6685//3458 6707//3458 6706//3458
+f 6688//3459 6707//3459 6685//3459
+f 6688//3460 6708//3461 6707//3462
+f 6697//3441 6709//3463 6696//3442
+f 6698//3464 6700//3464 6710//3464
+f 6704//3465 6711//3465 6701//3465
+f 6703//3466 6712//3466 6704//3466
+f 6713//3467 6714//3467 6703//3467
+f 6691//3468 6715//3468 6713//3468
+f 6691//3469 6716//3469 6715//3469
+f 6692//3470 6716//3470 6691//3470
+f 6693//3471 6717//3471 6692//3471
+f 6693//3472 6718//3472 6717//3473
+f 6708//3461 6709//3474 6707//3462
+f 6702//3475 6711//3475 6719//3475
+f 6716//3476 6720//3476 6715//3476
+f 6721//3477 6720//3477 6716//3477
+f 6706//3478 6722//3478 6705//3478
+f 6723//3479 6724//3479 6706//3479
+f 6709//3480 6725//3480 6707//3480
+f 6709//3481 6726//3481 6725//3481
+f 6709//3482 6727//3483 6726//3484
+f 6728//3485 6729//3485 6710//3485
+f 6712//3486 6730//3486 6711//3486
+f 6712//3487 6731//3487 6730//3487
+f 6715//3488 6731//3488 6714//3489
+f 6715//3490 6720//3490 6732//3490
+f 6721//3491 6733//3492 6734//3493
+f 6718//3494 6733//3495 6717//3496
+f 6718//3497 6735//3497 6736//3497
+f 6722//3498 6737//3498 6705//3498
+f 6723//3499 6738//3499 6724//3499
+f 6711//3500 6739//3500 6719//3500
+f 6730//3501 6739//3501 6711//3501
+f 6720//3502 6734//3502 6740//3502
+f 6722//3503 6741//3503 6742//3503
+f 6738//3504 6741//3504 6724//3504
+f 6726//3505 6743//3506 6725//3507
+f 6739//3508 6744//3508 6745//3508
+f 6739//3509 6746//3509 6747//3509
+f 6731//3510 6746//3511 6730//3512
+f 6732//3513 6748//3513 6731//3513
+f 6732//3514 6740//3515 6748//3516
+f 6734//3517 6749//3517 6750//3517
+f 6733//3492 6749//3518 6734//3493
+f 6736//3519 6751//3519 6733//3519
+f 6735//3520 6751//3520 6736//3520
+f 6735//3521 6752//3521 6753//3521
+f 6742//3522 6752//3522 6737//3522
+f 6738//3523 6743//3523 6754//3523
+f 6748//3524 6755//3524 6731//3524
+f 6750//3525 6756//3525 6740//3525
+f 6753//3526 6757//3527 6751//3528
+f 6742//3529 6758//3529 6759//3529
+f 6754//3530 6758//3530 6741//3530
+f 6743//3531 6760//3531 6761//3531
+f 6744//3532 6762//3533 6763//3534
+f 6747//3535 6764//3536 6744//3537
+f 6746//3538 6765//3538 6747//3538
+f 6755//3539 6765//3539 6746//3539
+f 6748//3540 6756//3540 6755//3540
+f 6751//3528 6757//3527 6766//3541
+f 6752//3542 6767//3542 6753//3542
+f 6758//3543 6768//3543 6769//3543
+f 6754//3544 6768//3544 6758//3544
+f 6754//3545 6761//3545 6768//3545
+f 6760//3546 6770//3546 6771//3546
+f 6762//3547 6764//3547 6772//3547
+f 6765//3548 6773//3549 6774//3550
+f 6756//3551 6775//3551 6776//3551
+f 6777//3552 6775//3552 6756//3552
+f 6778//3553 6779//3553 6777//3553
+f 6778//3554 6766//3554 6779//3554
+f 6767//3555 6766//3555 6757//3555
+f 6761//3556 6771//3557 6780//3558
+f 6764//3559 6773//3559 6781//3559
+f 6765//3548 6782//3560 6773//3549
+f 6765//3561 6776//3561 6782//3561
+f 6783//3562 6784//3562 6775//3562
+f 6767//3563 6785//3564 6786//3565
+f 6768//3566 6787//3566 6769//3566
+f 6780//3567 6788//3567 6768//3567
+f 6771//3568 6789//3569 6790//3570
+f 6781//3571 6791//3571 6772//3571
+f 6782//3572 6792//3572 6773//3572
+f 6776//3573 6792//3573 6782//3573
+f 6776//3574 6784//3575 6793//3576
+f 6779//3577 6794//3577 6783//3577
+f 6786//3578 6795//3578 6796//3578
+f 6780//3579 6797//3579 6788//3579
+f 6780//3580 6790//3580 6798//3580
+f 6781//3581 6799//3581 6791//3581
+f 6781//3582 6800//3583 6801//3584
+f 6794//3585 6802//3585 6784//3585
+f 6779//3586 6803//3586 6794//3586
+f 6804//3587 6805//3587 6790//3587
+f 6800//3588 6806//3588 6807//3588
+f 6800//3589 6808//3589 6806//3589
+f 6792//3590 6809//3590 6808//3590
+f 6810//3591 6811//3591 6809//3591
+f 6793//3592 6802//3592 6811//3592
+f 6794//3593 6812//3593 6802//3593
+f 6803//3594 6813//3595 6814//3594
+f 6795//3596 6815//3596 6816//3596
+f 6797//3597 6817//3597 6787//3597
+f 6798//3598 6818//3598 6797//3598
+f 6798//3599 6819//3599 6818//3599
+f 6805//3600 6820//3600 6819//3600
+f 6821//3601 6820//3601 6805//3601
+f 6811//3602 6822//3602 6809//3602
+f 6813//3603 6823//3603 6814//3603
+f 6817//3604 6824//3605 6815//3606
+f 6807//3607 6825//3607 6826//3607
+f 6806//3608 6825//3608 6807//3608
+f 6822//3609 6827//3609 6808//3609
+f 6828//3610 6829//3611 6811//3612
+f 6830//3613 6831//3613 6812//3613
+f 6830//3614 6832//3614 6831//3614
+f 6830//3615 6823//3616 6832//3617
+f 6816//3618 6824//3618 6833//3618
+f 6817//3619 6834//3620 6835//3621
+f 6819//3622 6834//3622 6818//3622
+f 6819//3623 6820//3623 6836//3623
+f 6837//3624 6827//3624 6838//3624
+f 6822//3625 6829//3625 6827//3625
+f 6828//3626 6831//3626 6839//3626
+f 6823//3627 6840//3627 6841//3627
+f 6816//3628 6842//3628 6843//3628
+f 6816//3629 6833//3630 6842//3631
+f 6817//3632 6844//3632 6824//3632
+f 6835//3621 6844//3633 6817//3619
+f 6834//3634 6836//3634 6845//3634
+f 6820//3635 6846//3636 6836//3637
+f 6829//3638 6847//3638 6848//3638
+f 6839//3639 6847//3639 6829//3639
+f 6831//3640 6849//3640 6839//3640
+f 6841//3641 6849//3641 6832//3641
+f 6845//3642 6850//3642 6835//3642
+f 6826//3643 6851//3643 6852//3643
+f 6826//3644 6853//3644 6851//3644
+f 6827//3645 6854//3645 6855//3645
+f 6827//3646 6848//3647 6854//3648
+f 6839//3649 6856//3649 6847//3649
+f 6840//3650 6857//3650 6841//3650
+f 6840//3651 6858//3652 6857//3653
+f 6833//3630 6859//3654 6842//3631
+f 6833//3630 6860//3655 6859//3654
+f 6844//3656 6850//3656 6860//3656
+f 6845//3657 6861//3657 6862//3657
+f 6848//3658 6863//3658 6864//3658
+f 6849//3659 6865//3660 6839//3661
+f 6866//3662 6867//3662 6849//3662
+f 6857//3663 6868//3663 6869//3663
+f 6862//3664 6860//3664 6850//3664
+f 6861//3665 6870//3666 6862//3667
+f 6871//3668 6872//3668 6861//3668
+f 6871//3669 6873//3669 6872//3669
+f 6851//3670 6874//3670 6875//3670
+f 6853//3671 6876//3671 6851//3671
+f 6855//3672 6876//3673 6853//3674
+f 6854//3675 6877//3675 6855//3675
+f 6864//3676 6878//3676 6854//3676
+f 6864//3677 6879//3678 6880//3679
+f 6856//3680 6879//3681 6863//3682
+f 6867//3683 6881//3683 6882//3683
+f 6866//3684 6881//3684 6867//3684
+f 6866//3685 6869//3685 6881//3685
+f 6860//3686 6883//3687 6859//3687
+f 6860//3688 6884//3688 6885//3688
+f 6862//3689 6884//3689 6860//3689
+f 6868//3690 6886//3690 6887//3690
+f 6883//3691 6886//3691 6868//3691
+f 6873//3692 6888//3692 6872//3692
+f 6889//3693 6890//3693 6873//3693
+f 6874//3694 6891//3694 6892//3694
+f 6876//3695 6893//3696 6891//3697
+f 6880//3698 6894//3698 6878//3698
+f 6865//3699 6895//3699 6896//3699
+f 6881//3700 6897//3701 6895//3702
+f 6887//3703 6897//3701 6881//3700
+f 6886//3704 6898//3704 6887//3704
+f 6883//3705 6898//3705 6886//3706
+f 6884//3707 6899//3708 6885//3709
+f 6870//3710 6900//3710 6884//3710
+f 6870//3711 6888//3711 6900//3711
+f 6890//3712 6901//3712 6888//3712
+f 6891//3713 6902//3714 6903//3714
+f 6894//3715 6902//3715 6893//3715
+f 6879//3716 6904//3717 6905//3718
+f 6896//3719 6906//3719 6879//3719
+f 6897//3720 6907//3720 6895//3720
+f 6897//3721 6908//3721 6907//3721
+f 6898//3722 6908//3722 6887//3722
+f 6909//3723 6910//3723 6911//3723
+f 6909//3724 6899//3724 6910//3724
+f 6901//3725 6912//3725 6888//3725
+f 6913//3726 6901//3726 6890//3726
+f 6891//3727 6903//3727 6914//3727
+f 6915//3728 6916//3728 6896//3728
+f 6910//3729 6917//3729 6898//3729
+f 6912//3730 6918//3731 6900//3732
+f 6892//3733 6914//3733 6919//3733
+f 6903//3734 6920//3734 6921//3734
+f 6922//3735 6920//3735 6902//3735
+f 6904//3736 6922//3736 6894//3736
+f 6904//3737 6916//3737 6923//3737
+f 6915//3738 6924//3738 6916//3738
+f 6907//3739 6924//3739 6915//3739
+f 6907//3740 6925//3740 6924//3740
+f 6917//3741 6926//3741 6908//3741
+f 6910//3742 6926//3742 6917//3742
+f 6899//3743 6927//3743 6910//3743
+f 6918//3744 6928//3744 6899//3744
+f 6912//3730 6929//3745 6918//3731
+f 6912//3746 6930//3746 6931//3746
+f 6901//3747 6930//3747 6912//3747
+f 6932//3748 6933//3748 6901//3748
+f 6633//3749 6635//3749 6934//3749
+f 6640//3750 6636//3750 6935//3750
+f 6641//3751 6638//3751 6936//3751
+f 6937//3752 6665//3752 6938//3752
+f 6937//3753 6653//3753 6665//3753
+f 6657//3754 6654//3754 6939//3754
+f 6940//3755 6709//3755 6697//3755
+f 6941//3756 6727//3756 6709//3756
+f 6726//3757 6942//3757 6943//3757
+f 6770//3758 6760//3758 6943//3758
+f 6804//3759 6944//3759 6821//3759
+f 6821//3760 6945//3760 6820//3760
+f 6945//3761 6846//3636 6820//3635
+f 6946//3762 6871//3762 6846//3762
+f 6871//3763 6947//3763 6873//3763
+f 6947//3764 6889//3764 6873//3764
+f 6927//3765 6948//3765 6949//3765
+f 6923//3766 6950//3766 6922//3766
+f 6914//3767 6921//3767 6951//3767
+f 6852//3768 6875//3768 6952//3768
+f 6953//3769 6954//3770 6799//3771
+f 6762//3772 6955//3772 6956//3772
+f 6745//3773 6763//3534 6729//3774
+f 6633//3775 6637//3775 6634//3775
+f 6636//3776 6640//3776 6639//3776
+f 6641//3777 6643//3777 6638//3777
+f 6957//3778 6663//3778 6645//3778
+f 6957//3779 6646//3779 6663//3779
+f 6646//3780 6648//3780 6663//3780
+f 6665//3781 6653//3781 6669//3781
+f 6653//3782 6652//3782 6669//3782
+f 6657//3783 6656//3783 6654//3783
+f 6655//3784 6659//3784 6658//3784
+f 6659//3785 6958//3785 6660//3785
+f 6636//3786 6661//3786 6637//3786
+f 6638//3388 6662//3787 6639//3389
+f 6650//3788 6666//3788 6647//3788
+f 6665//3789 6668//3789 6666//3789
+f 6665//3790 6669//3790 6667//3790
+f 6652//3791 6684//3791 6667//3791
+f 6652//3792 6654//3792 6684//3792
+f 6654//3793 6670//3793 6684//3793
+f 6637//3411 6672//3794 6671//3412
+f 6643//3795 6674//3795 6662//3795
+f 6643//3796 6642//3796 6674//3796
+f 6663//3797 6676//3797 6664//3797
+f 6663//3798 6648//3798 6675//3798
+f 6666//3799 6668//3799 6677//3799
+f 6656//3800 6687//3800 6670//3800
+f 6656//3801 6658//3802 6687//3803
+f 6658//3802 6678//3804 6687//3803
+f 6660//3805 6959//3805 6678//3805
+f 6661//3806 6662//3806 6680//3806
+f 6673//3807 6664//3807 6682//3807
+f 6675//3808 6666//3808 6683//3808
+f 6667//3809 6694//3809 6677//3809
+f 6667//3810 6686//3810 6694//3810
+f 6667//3811 6684//3811 6686//3811
+f 6684//3812 6670//3812 6685//3812
+f 6670//3813 6688//3813 6685//3813
+f 6959//3814 6697//3814 6678//3814
+f 6679//3815 6672//3815 6689//3815
+f 6672//3816 6699//3816 6689//3816
+f 6672//3817 6661//3817 6699//3817
+f 6661//3818 6701//3818 6699//3818
+f 6661//3819 6680//3819 6701//3819
+f 6674//3820 6703//3820 6680//3820
+f 6674//3821 6681//3821 6703//3821
+f 6673//3822 6691//3822 6681//3822
+f 6675//3823 6693//3823 6692//3823
+f 6683//3824 6677//3824 6695//3824
+f 6687//3825 6708//3825 6688//3825
+f 6687//3826 6696//3826 6708//3826
+f 6689//3827 6700//3827 6698//3827
+f 6699//3447 6702//3446 6700//3828
+f 6680//3450 6704//3449 6701//3829
+f 6681//3830 6713//3830 6703//3830
+f 6681//3831 6691//3831 6713//3831
+f 6691//3832 6676//3832 6692//3832
+f 6694//3453 6686//3457 6706//3454
+f 6696//3442 6709//3463 6708//3833
+f 6702//3834 6701//3834 6711//3834
+f 6704//3835 6712//3835 6711//3835
+f 6703//3836 6714//3836 6712//3836
+f 6713//3837 6715//3837 6714//3837
+f 6692//3838 6721//3838 6716//3838
+f 6692//3839 6717//3839 6721//3839
+f 6693//3472 6695//3840 6718//3472
+f 6695//3841 6705//3841 6718//3841
+f 6706//3842 6707//3842 6723//3842
+f 6710//3843 6700//3844 6728//3844
+f 6700//3844 6719//3845 6728//3844
+f 6700//3846 6702//3846 6719//3846
+f 6705//3847 6735//3847 6718//3847
+f 6706//3848 6724//3849 6722//3850
+f 6707//3851 6738//3851 6723//3851
+f 6707//3852 6725//3852 6738//3852
+f 6728//3853 6745//3854 6729//3855
+f 6728//3853 6719//3856 6745//3854
+f 6712//3857 6714//3857 6731//3857
+f 6715//3488 6732//3858 6731//3488
+f 6721//3859 6734//3859 6720//3859
+f 6721//3860 6717//3860 6733//3860
+f 6718//3494 6736//3861 6733//3495
+f 6705//3862 6737//3862 6735//3862
+f 6719//3863 6739//3863 6745//3863
+f 6732//3864 6720//3864 6740//3864
+f 6737//3865 6722//3865 6742//3865
+f 6722//3850 6724//3849 6741//3866
+f 6738//3867 6725//3507 6743//3506
+f 6726//3868 6943//3868 6743//3868
+f 6745//3773 6744//3532 6763//3534
+f 6739//3869 6747//3869 6744//3869
+f 6739//3870 6730//3512 6746//3511
+f 6734//3871 6750//3871 6740//3871
+f 6733//3872 6751//3872 6749//3872
+f 6735//3873 6753//3873 6751//3873
+f 6735//3874 6737//3874 6752//3874
+f 6741//3875 6738//3875 6754//3875
+f 6743//3876 6943//3876 6760//3876
+f 6746//3877 6731//3877 6755//3877
+f 6748//3516 6740//3515 6756//3878
+f 6752//3879 6742//3879 6759//3879
+f 6742//3880 6741//3880 6758//3880
+f 6743//3881 6761//3881 6754//3881
+f 6744//3537 6764//3536 6762//3882
+f 6747//3883 6774//3884 6764//3885
+f 6747//3883 6765//3886 6774//3884
+f 6756//3887 6750//3887 6777//3887
+f 6750//3888 6749//3888 6777//3888
+f 6749//3889 6778//3889 6777//3889
+f 6749//3890 6751//3890 6778//3890
+f 6751//3891 6766//3891 6778//3891
+f 6757//3892 6753//3892 6767//3892
+f 6752//3893 6960//3893 6767//3893
+f 6752//3894 6759//3894 6960//3894
+f 6759//3895 6769//3895 6960//3895
+f 6759//3896 6758//3896 6769//3896
+f 6761//3556 6760//3897 6771//3557
+f 6774//3898 6773//3898 6764//3898
+f 6755//3899 6756//3899 6776//3899
+f 6777//3900 6783//3901 6775//3902
+f 6777//3900 6779//3903 6783//3901
+f 6768//3904 6761//3904 6780//3904
+f 6770//3905 6789//3905 6771//3905
+f 6772//3906 6764//3906 6781//3906
+f 6765//3907 6755//3907 6776//3907
+f 6775//3908 6784//3575 6776//3574
+f 6767//3563 6786//3565 6766//3909
+f 6767//3910 6960//3910 6785//3910
+f 6960//3911 6787//3911 6785//3911
+f 6960//3912 6769//3912 6787//3912
+f 6768//3913 6788//3913 6787//3913
+f 6771//3568 6790//3570 6780//3914
+f 6773//3915 6800//3915 6781//3915
+f 6773//3916 6792//3916 6800//3916
+f 6776//3917 6810//3917 6792//3917
+f 6776//3918 6793//3918 6810//3918
+f 6783//3919 6794//3919 6784//3919
+f 6779//3920 6766//3920 6803//3920
+f 6766//3921 6813//3921 6803//3921
+f 6766//3922 6796//3922 6813//3922
+f 6766//3923 6786//3923 6796//3923
+f 6786//3924 6785//3924 6795//3924
+f 6785//3925 6787//3925 6795//3925
+f 6787//3926 6788//3926 6797//3926
+f 6780//3927 6798//3927 6797//3927
+f 6789//3928 6804//3928 6790//3928
+f 6781//3582 6801//3584 6799//3929
+f 6784//3930 6802//3930 6793//3930
+f 6795//3931 6787//3931 6815//3931
+f 6790//3932 6805//3933 6798//3934
+f 6804//3935 6821//3935 6805//3935
+f 6799//3936 6801//3936 6953//3936
+f 6801//3937 6807//3937 6953//3937
+f 6801//3938 6800//3938 6807//3938
+f 6800//3939 6792//3939 6808//3939
+f 6792//3940 6810//3940 6809//3940
+f 6810//3941 6793//3941 6811//3941
+f 6803//3594 6814//3594 6794//3942
+f 6796//3943 6843//3943 6813//3943
+f 6796//3944 6816//3944 6843//3944
+f 6796//3945 6795//3945 6816//3945
+f 6787//3946 6817//3604 6815//3606
+f 6797//3947 6818//3947 6817//3947
+f 6798//3934 6805//3933 6819//3948
+f 6809//3949 6822//3949 6808//3949
+f 6802//3950 6828//3950 6811//3950
+f 6802//3951 6812//3952 6828//3953
+f 6794//3954 6830//3954 6812//3954
+f 6794//3955 6814//3955 6830//3955
+f 6814//3956 6823//3616 6830//3615
+f 6813//3957 6843//3957 6823//3957
+f 6815//3958 6824//3958 6816//3958
+f 6953//3769 6826//3959 6952//3960
+f 6953//3961 6807//3961 6826//3961
+f 6806//3962 6837//3962 6825//3962
+f 6806//3963 6808//3963 6837//3963
+f 6808//3964 6827//3964 6837//3964
+f 6811//3965 6829//3965 6822//3965
+f 6812//3952 6831//3966 6828//3953
+f 6817//3967 6818//3967 6834//3967
+f 6819//3968 6836//3968 6834//3968
+f 6825//3969 6838//3969 6826//3969
+f 6825//3970 6837//3970 6838//3970
+f 6828//3610 6839//3971 6829//3611
+f 6823//3972 6841//3972 6832//3972
+f 6823//3973 6843//3973 6840//3973
+f 6843//3974 6842//3974 6840//3974
+f 6824//3975 6844//3975 6833//3975
+f 6835//3976 6834//3976 6845//3976
+f 6952//3977 6826//3977 6852//3977
+f 6827//3978 6829//3978 6848//3978
+f 6831//3979 6832//3979 6849//3979
+f 6833//3980 6844//3980 6860//3980
+f 6844//3981 6835//3981 6850//3981
+f 6845//3982 6836//3983 6861//3984
+f 6846//3985 6871//3985 6836//3985
+f 6852//3986 6851//3986 6875//3986
+f 6826//3987 6838//3987 6853//3987
+f 6838//3988 6855//3988 6853//3988
+f 6838//3989 6827//3989 6855//3989
+f 6847//3990 6863//3990 6848//3990
+f 6847//3991 6856//3991 6863//3991
+f 6849//3992 6841//3992 6866//3992
+f 6841//3993 6857//3993 6866//3993
+f 6840//3651 6842//3994 6858//3652
+f 6842//3995 6859//3995 6858//3995
+f 6845//3996 6862//3996 6850//3996
+f 6836//3983 6871//3997 6861//3984
+f 6848//3647 6864//3998 6854//3648
+f 6839//3661 6865//3660 6856//3999
+f 6849//3659 6867//4000 6865//3660
+f 6866//4001 6857//4001 6869//4001
+f 6857//4002 6858//4002 6868//4002
+f 6858//4003 6859//4003 6868//4003
+f 6861//3665 6872//4004 6870//3666
+f 6851//4005 6876//4005 6874//4005
+f 6855//3672 6877//4006 6876//3673
+f 6854//4007 6878//4007 6877//4007
+f 6864//4008 6880//4008 6878//4008
+f 6864//3677 6863//4009 6879//3678
+f 6856//3680 6865//4010 6879//3681
+f 6865//4011 6867//4011 6882//4011
+f 6868//4012 6859//3687 6883//3687
+f 6860//4013 6885//4013 6883//4013
+f 6862//3667 6870//3666 6884//4014
+f 6881//4015 6869//4015 6887//4015
+f 6869//4016 6868//4016 6887//4016
+f 6870//4017 6872//4017 6888//4017
+f 6873//4018 6890//4018 6888//4018
+f 6874//4019 6876//4019 6891//4019
+f 6876//4020 6877//4021 6893//4022
+f 6877//4021 6894//4023 6893//4022
+f 6877//4024 6878//4024 6894//4024
+f 6880//4025 6905//4025 6894//4025
+f 6880//4026 6879//4026 6905//4026
+f 6865//4027 6896//4027 6879//4027
+f 6865//4028 6882//4028 6895//4028
+f 6882//4029 6881//4029 6895//4029
+f 6883//3705 6911//4030 6898//3705
+f 6883//4031 6909//4031 6911//4031
+f 6883//4032 6885//4033 6909//4034
+f 6885//4033 6899//4035 6909//4034
+f 6884//3707 6900//4036 6899//3708
+f 6890//4037 6889//4037 6913//4037
+f 6891//3697 6893//3696 6902//4038
+f 6905//3718 6904//3717 6894//4039
+f 6879//4040 6906//4040 6904//4040
+f 6896//4041 6895//4041 6915//4041
+f 6895//4042 6907//4042 6915//4042
+f 6897//4043 6887//4043 6908//4043
+f 6911//4044 6910//4044 6898//4044
+f 6900//4045 6918//4045 6899//4045
+f 6888//4046 6912//4046 6900//4046
+f 6913//4047 6932//4047 6901//4047
+f 6892//4048 6891//4048 6914//4048
+f 6894//4049 6922//4049 6902//4049
+f 6906//4050 6916//4050 6904//4050
+f 6906//4051 6896//4051 6916//4051
+f 6908//4052 6898//4052 6917//4052
+f 6914//4053 6903//4053 6921//4053
+f 6903//3714 6902//3714 6920//4054
+f 6904//4055 6923//4055 6922//4055
+f 6907//4056 6908//4056 6925//4056
+f 6908//4057 6926//4057 6925//4057
+f 6910//4058 6927//4058 6926//4058
+f 6899//4059 6948//4059 6927//4059
+f 6899//4060 6928//4060 6948//4060
+f 6918//4061 6929//4061 6928//4061
+f 6912//4062 6931//4062 6929//4062
+f 6901//4063 6933//4063 6930//4063
+f 6932//4064 6961//4064 6933//4064
+f 6935//4065 6636//4065 6633//4065
+f 6936//4066 6638//4066 6640//4066
+f 6962//4067 6645//4067 6644//4067
+f 6962//4068 6963//4068 6645//4068
+f 6963//4069 6957//4069 6645//4069
+f 6649//4070 6938//4070 6650//4070
+f 6938//4071 6665//4071 6650//4071
+f 6651//4072 6939//4072 6654//4072
+f 6659//4073 6964//4073 6958//4073
+f 6940//4074 6941//4074 6709//4074
+f 6726//3484 6727//3483 6942//4075
+f 6942//4076 6770//4076 6943//4076
+f 6789//4077 6965//4077 6804//4077
+f 6804//4078 6965//4078 6944//4078
+f 6821//4079 6944//4079 6945//4079
+f 6945//4080 6946//4080 6846//4080
+f 6946//4081 6966//4081 6871//4081
+f 6871//4082 6966//4082 6947//4082
+f 6932//4083 6967//4083 6961//4083
+f 6926//4084 6927//4084 6949//4084
+f 6924//4085 6925//4085 6968//4085
+f 6916//4086 6924//4086 6968//4086
+f 6916//4087 6968//4087 6969//4087
+f 6916//4088 6969//4089 6970//4090
+f 6923//4091 6916//4088 6970//4090
+f 6923//4092 6970//4092 6950//4092
+f 6922//4093 6950//4093 6971//4093
+f 6920//4094 6922//4094 6971//4094
+f 6919//4095 6914//4095 6951//4095
+f 6875//4096 6874//4096 6892//4096
+f 6954//3770 6953//3769 6952//3960
+f 6762//4097 6772//4097 6955//4097
+f 6763//4098 6762//4098 6956//4098
+f 6972//4099 6973//4099 6974//4099
+f 6972//4099 6974//4099 6975//4099
+f 6926//4100 6933//4100 6968//4100
+f 6973//4100 6974//4100 6968//4100
+f 6933//4100 6973//4100 6968//4100
+f 6968//4100 6974//4100 6919//4100
+f 6925//4100 6926//4100 6968//4100
+f 6969//4100 6968//4100 6920//4100
+f 6920//4100 6968//4100 6919//4100
+f 6967//4100 6933//4100 6961//4101
+f 6926//4100 6948//4100 6933//4100
+f 6948//4100 6930//4100 6933//4100
+f 6969//4100 6920//4100 6950//4100
+f 6950//4100 6920//4100 6971//4100
+f 6921//4100 6920//4100 6919//4100
+f 6948//4100 6926//4100 6949//4100
+f 6969//4100 6950//4100 6970//4100
+f 6931//4100 6930//4100 6929//4100
+f 6929//4100 6930//4100 6948//4100
+f 6951//4100 6921//4100 6919//4100
+f 6929//4100 6948//4100 6928//4100
+f 6933//4100 6967//4100 6973//4100
+f 6975//4102 6791//4102 6974//4102
+f 6934//4102 6635//4102 6975//4102
+f 6635//4102 6791//4102 6975//4102
+f 6955//4102 6772//4102 6763//4102
+f 6635//4102 6698//4102 6791//4102
+f 6729//4102 6772//4102 6791//4102
+f 6799//4102 6954//4102 6791//4102
+f 6952//4102 6919//4102 6791//4102
+f 6634//4103 6671//4102 6635//4102
+f 6671//4102 6698//4102 6635//4102
+f 6957//4104 6963//4105 6937//4105
+f 6698//4102 6729//4102 6791//4102
+f 6875//4102 6919//4102 6952//4102
+f 6698//4102 6710//4106 6729//4102
+f 6763//4102 6772//4102 6729//4102
+f 6671//4102 6690//4106 6698//4102
+f 6679//4102 6690//4106 6671//4102
+f 6956//4102 6955//4102 6763//4102
+f 6954//4102 6952//4102 6791//4102
+f 6875//4102 6892//4102 6919//4102
+f 6791//4102 6919//4102 6974//4102
+f 6975//4105 6972//4105 6653//4105
+f 6633//4105 6975//4105 6653//4105
+f 6653//4105 6972//4105 6964//4105
+f 6644//4105 6935//4107 6653//4105
+f 6644//4105 6653//4105 6937//4105
+f 6651//4105 6653//4105 6964//4105
+f 6644//4105 6641//4105 6935//4107
+f 6633//4105 6934//4105 6975//4105
+f 6962//4105 6644//4105 6963//4105
+f 6963//4105 6644//4105 6937//4105
+f 6938//4105 6957//4104 6937//4105
+f 6655//4108 6657//4104 6964//4105
+f 6646//4105 6957//4104 6938//4105
+f 6646//4105 6938//4105 6649//4105
+f 6939//4105 6651//4105 6657//4104
+f 6657//4104 6651//4105 6964//4105
+f 6640//4105 6641//4105 6936//4105
+f 6659//4104 6655//4108 6964//4105
+f 6935//4107 6633//4105 6653//4105
+f 6641//4105 6640//4105 6935//4107
+f 6967//4109 6932//4109 6973//4109
+f 6964//4109 6972//4109 6958//4109
+f 6958//4109 6972//4109 6942//4109
+f 6972//4109 6973//4109 6942//4109
+f 6973//4109 6932//4109 6942//4109
+f 6944//4109 6789//4109 6942//4109
+f 6944//4109 6942//4109 6932//4109
+f 6789//4109 6770//4109 6942//4109
+f 6959//4109 6660//4109 6941//4109
+f 6660//4109 6942//4109 6941//4109
+f 6944//4109 6932//4109 6913//4109
+f 6942//4109 6727//4109 6941//4109
+f 6789//4109 6944//4109 6965//4109
+f 6945//4109 6944//4109 6913//4109
+f 6946//4109 6945//4109 6966//4109
+f 6966//4109 6945//4109 6913//4109
+f 6697//4110 6959//4109 6941//4109
+f 6966//4109 6913//4109 6889//4109
+f 6697//4110 6941//4109 6940//4109
+f 6966//4109 6889//4109 6947//4109
+f 6660//4109 6958//4109 6942//4109
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/parking.obj 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/parking.obj
--- 1.2.21-5/modules/lsp-runtime-lib/res/test/fmt/obj/parking.obj	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/res/test/fmt/obj/parking.obj	2025-08-26 18:15:43.674003796 +0000
@@ -0,0 +1,5550 @@
+# Parking
+# (C) Linux Studio Plugins Project
+o Cars
+v 12.648240 4.022533 0.250001
+v 12.648240 4.290485 0.250001
+v 12.946774 4.290485 0.250001
+v 12.946774 4.995182 0.250001
+v 12.648240 4.995182 0.250001
+v 12.648240 7.260300 0.250001
+v 12.946774 7.260300 0.250001
+v 12.946774 7.964998 0.250001
+v 12.648240 7.964998 0.250001
+v 12.648240 8.451532 0.250001
+v 14.551760 8.451532 0.250001
+v 14.551760 7.964998 0.250001
+v 14.253226 7.964998 0.250001
+v 14.253226 7.260300 0.250001
+v 14.551760 7.260300 0.250001
+v 14.551760 4.995182 0.250001
+v 14.253226 4.995182 0.250001
+v 14.253226 4.290485 0.250001
+v 14.551760 4.290485 0.250001
+v 14.551760 4.022533 0.250001
+v 8.246774 -23.209517 0.249998
+v 8.246774 -23.006443 0.031144
+v 8.246774 -22.707890 0.031144
+v 8.246774 -22.504818 0.249998
+v 12.648240 7.761927 0.031147
+v 12.648240 7.463371 0.031147
+v 12.648240 4.792110 0.031147
+v 12.648240 4.493555 0.031147
+v 12.648240 3.894726 0.393658
+v 12.648240 3.947720 0.858133
+v 12.648240 3.999435 0.873730
+v 12.648240 8.475908 0.873730
+v 12.648240 8.573107 0.458998
+v 14.551760 3.894726 0.393658
+v 27.462790 2.160160 0.250001
+v 27.714581 2.251804 0.250001
+v 28.365623 0.463081 0.250001
+v 28.113832 0.371437 0.250001
+v 28.011728 0.651966 0.250001
+v 27.349529 0.410946 0.250001
+v 27.451633 0.130417 0.250001
+v 25.323118 -0.644300 0.250001
+v 25.221014 -0.363770 0.250001
+v 24.558815 -0.604792 0.250001
+v 24.660919 -0.885321 0.250001
+v 24.203728 -1.051725 0.250001
+v 23.552685 0.736998 0.250001
+v 24.009878 0.903402 0.250001
+v 24.111982 0.622873 0.250001
+v 24.774181 0.863894 0.250001
+v 24.672075 1.144423 0.250001
+v 26.800592 1.919140 0.250001
+v 26.902697 1.638609 0.250001
+v 27.564896 1.879629 0.250001
+v 12.748240 -12.500565 0.873727
+v 13.142460 -9.110181 1.407337
+v 12.986664 -8.544116 1.141684
+v 12.986664 -8.145103 1.141684
+v 12.748240 -8.024093 0.873730
+v 2.848240 -23.605274 0.393655
+v 4.751760 -23.605274 0.393655
+v 4.751760 -23.552280 0.858130
+v 2.848240 -23.552280 0.858130
+v 25.348240 -22.707890 0.031144
+v 25.646774 -22.707890 0.031144
+v 25.646774 -23.006443 0.031144
+v 25.348240 -23.006443 0.031144
+v 17.351761 -3.539700 0.250001
+v 17.351761 -5.804819 0.250001
+v 17.053226 -5.804819 0.250001
+v 17.053226 -6.509516 0.250001
+v 17.351761 -6.509516 0.250001
+v 17.351761 -6.777466 0.250001
+v 15.448240 -6.777466 0.250001
+v 15.448240 -6.509516 0.250001
+v 15.746774 -6.509516 0.250001
+v 15.746774 -5.804819 0.250001
+v 15.448240 -5.804819 0.250001
+v 15.448240 -3.539700 0.250001
+v 15.746774 -3.539700 0.250001
+v 15.746774 -2.835003 0.250001
+v 15.448240 -2.835003 0.250001
+v 15.448240 -2.348469 0.250001
+v 17.351761 -2.348469 0.250001
+v 17.351761 -2.835003 0.250001
+v 17.053226 -2.835003 0.250001
+v 17.053226 -3.539700 0.250001
+v 7.948240 4.493555 0.031147
+v 7.948240 4.792110 0.031147
+v 8.246774 4.792110 0.031147
+v 8.246774 4.493555 0.031147
+v 14.253226 7.761927 0.031147
+v 14.253226 7.463371 0.031147
+v 9.553226 4.995182 0.250001
+v 9.553226 4.792110 0.031147
+v 9.553226 4.493555 0.031147
+v 9.553226 4.290485 0.250001
+v 10.248240 3.999435 0.873730
+v 10.248240 3.947720 0.858133
+v 12.151760 3.947720 0.858133
+v 12.151760 3.999435 0.873730
+v 11.757540 7.389818 1.407337
+v 10.642460 7.389818 1.407337
+v 14.257540 -9.110181 1.407337
+v 14.413336 -8.544116 1.141684
+v -24.951759 8.475908 0.873730
+v -24.713337 8.354895 1.141684
+v -23.286663 8.354895 1.141684
+v -23.048241 8.475908 0.873730
+v -23.048241 8.573107 0.458998
+v -24.951759 8.573107 0.458998
+v 4.751760 -20.036629 0.031144
+v 4.751760 -20.239700 0.249998
+v 4.453226 -20.239700 0.249998
+v 4.453226 -20.036629 0.031144
+v -32.748241 8.475908 0.873730
+v -32.748241 8.573107 0.458998
+v -34.651760 8.573107 0.458998
+v -34.651760 8.475908 0.873730
+v -34.413338 8.354895 1.141684
+v -32.986664 8.354895 1.141684
+v 25.348240 -23.500565 0.873727
+v 25.348240 -23.552280 0.858130
+v 27.251760 -23.552280 0.858130
+v 27.251760 -23.500565 0.873727
+v 26.857540 -20.110180 1.407334
+v 25.742460 -20.110180 1.407334
+v 4.453226 4.493555 0.031147
+v 4.453226 4.792110 0.031147
+v 4.751760 4.792110 0.031147
+v 4.751760 4.493555 0.031147
+v -2.453226 -3.539700 0.250001
+v -2.453226 -3.336628 0.031147
+v -2.453226 -3.038074 0.031147
+v -2.453226 -2.835003 0.250001
+v -32.748241 -19.738073 0.031144
+v -32.748241 -19.535002 0.249998
+v -32.748241 -19.048468 0.249998
+v -32.748241 -18.926893 0.458995
+v -32.748241 -19.024092 0.873727
+v -32.748241 -23.500565 0.873727
+v -32.748241 -23.552280 0.858130
+v -32.748241 -23.605274 0.393655
+v -32.748241 -23.477467 0.249998
+v -32.748241 -23.209517 0.249998
+v -32.748241 -23.006443 0.031144
+v -32.748241 -22.707890 0.031144
+v -32.748241 -22.504818 0.249998
+v -32.748241 -20.239700 0.249998
+v -32.748241 -20.036629 0.031144
+v 9.553226 7.463371 0.031147
+v 9.851760 7.463371 0.031147
+v 9.851760 7.260300 0.250001
+v 9.553226 7.260300 0.250001
+v -24.951759 4.792110 0.031147
+v -24.951759 4.995182 0.250001
+v -24.653227 4.995182 0.250001
+v -24.653227 4.792110 0.031147
+v 12.946774 4.792110 0.031147
+v 12.946774 4.493555 0.031147
+v 27.748240 -23.209517 0.249998
+v 27.748240 -23.477467 0.249998
+v 27.748240 -23.605274 0.393655
+v 27.748240 -23.552280 0.858130
+v 27.748240 -23.500565 0.873727
+v 27.748240 -19.024092 0.873727
+v 27.748240 -18.926893 0.458995
+v 27.748240 -19.048468 0.249998
+v 27.748240 -19.535002 0.249998
+v 27.748240 -19.738073 0.031144
+v 27.748240 -20.036629 0.031144
+v 27.748240 -20.239700 0.249998
+v 27.748240 -22.504818 0.249998
+v 27.748240 -22.707890 0.031144
+v 27.748240 -23.006443 0.031144
+v -19.448240 -19.024092 0.873727
+v -19.448240 -23.500565 0.873727
+v -19.448240 -23.552280 0.858130
+v -19.448240 -23.605274 0.393655
+v -19.448240 -23.477467 0.249998
+v -19.448240 -23.209517 0.249998
+v -19.448240 -23.006443 0.031144
+v -19.448240 -22.707890 0.031144
+v -19.448240 -22.504818 0.249998
+v -19.448240 -20.239700 0.249998
+v -19.448240 -20.036629 0.031144
+v -19.448240 -19.738073 0.031144
+v -19.448240 -19.535002 0.249998
+v -19.448240 -19.048468 0.249998
+v -19.448240 -18.926893 0.458995
+v -23.346773 7.463371 0.031147
+v -23.346773 7.761927 0.031147
+v -23.048241 7.761927 0.031147
+v -23.048241 7.463371 0.031147
+v -19.746775 -23.209517 0.249998
+v -19.746775 -23.006443 0.031144
+v 21.748983 8.796865 1.407337
+v 21.367605 9.844698 1.407337
+v 20.782393 9.797495 1.141685
+v 21.270342 8.456858 1.141684
+v -21.313335 7.955885 1.141684
+v -21.157539 7.389818 1.407337
+v -20.042459 7.389818 1.407337
+v -19.886663 7.955885 1.141684
+v 14.253226 4.792110 0.031147
+v 14.253226 4.493555 0.031147
+v 10.248240 7.964998 0.250001
+v 10.248240 7.761927 0.031147
+v 10.248240 7.463371 0.031147
+v 10.248240 7.260300 0.250001
+v 10.248240 4.995182 0.250001
+v 10.248240 4.792110 0.031147
+v 10.248240 4.493555 0.031147
+v 10.248240 4.290485 0.250001
+v 10.248240 4.022533 0.250001
+v 10.248240 3.894726 0.393658
+v 10.248240 8.475908 0.873730
+v 10.248240 8.573107 0.458998
+v 10.248240 8.451532 0.250001
+v 12.886663 7.955885 1.141684
+v 14.313336 7.955885 1.141684
+v 14.313336 8.354895 1.141684
+v 12.886663 8.354895 1.141684
+v 13.042460 7.389818 1.407337
+v 14.157540 7.389818 1.407337
+v 12.748240 -11.707890 0.031145
+v 12.748240 -11.504818 0.250001
+v 13.046774 -11.504818 0.250001
+v 13.046774 -11.707890 0.031145
+v 3.146774 -20.036629 0.031144
+v 3.146774 -20.239700 0.249998
+v 2.848240 -20.239700 0.249998
+v 2.848240 -20.036629 0.031144
+v 4.651760 -2.835003 0.250001
+v 4.651760 -2.348469 0.250001
+v 4.651760 -2.226894 0.458998
+v 4.651760 -2.324093 0.873730
+v 4.651760 -6.800564 0.873730
+v 4.651760 -6.852282 0.858133
+v 4.651760 -6.905273 0.393658
+v 4.651760 -6.777466 0.250001
+v 4.651760 -6.509516 0.250001
+v 4.651760 -6.306444 0.031147
+v 4.651760 -6.007889 0.031147
+v 4.651760 -5.804819 0.250001
+v 4.651760 -3.539700 0.250001
+v 4.651760 -3.336628 0.031147
+v 4.651760 -3.038074 0.031147
+v 11.853226 7.964998 0.250001
+v 11.853226 7.761927 0.031147
+v 11.853226 7.463371 0.031147
+v 11.853226 7.260300 0.250001
+v -21.253225 7.463371 0.031147
+v -21.253225 7.761927 0.031147
+v -21.253225 7.964998 0.250001
+v -21.253225 7.260300 0.250001
+v -28.046774 -23.209517 0.249998
+v -27.748240 -23.209517 0.249998
+v -27.748240 -23.477467 0.249998
+v -29.651760 -23.477467 0.249998
+v -29.651760 -23.209517 0.249998
+v -29.353226 -23.209517 0.249998
+v -29.353226 -22.504818 0.249998
+v -29.651760 -22.504818 0.249998
+v -29.651760 -20.239700 0.249998
+v -29.353226 -20.239700 0.249998
+v -29.353226 -19.535002 0.249998
+v -29.651760 -19.535002 0.249998
+v -29.651760 -19.048468 0.249998
+v -27.748240 -19.048468 0.249998
+v -27.748240 -19.535002 0.249998
+v -28.046774 -19.535002 0.249998
+v -28.046774 -20.239700 0.249998
+v -27.748240 -20.239700 0.249998
+v -27.748240 -22.504818 0.249998
+v -28.046774 -22.504818 0.249998
+v 36.727528 -1.929033 1.141684
+v 37.206169 -1.589027 1.407337
+v 36.824787 -0.541195 1.407337
+v 36.239574 -0.588400 1.141684
+v -28.046774 -22.707890 0.031144
+v -27.748240 -22.707890 0.031144
+v -21.351761 -18.926893 0.458995
+v -21.351761 -19.048468 0.249998
+v 32.468010 11.807646 0.250004
+v 32.570114 11.527117 0.250004
+v 32.379288 11.457659 0.031150
+v 32.277184 11.738192 0.031150
+v 12.151760 4.022533 0.250001
+v 12.151760 3.894726 0.393658
+v -33.046776 -19.738073 0.031144
+v -33.046776 -19.535002 0.249998
+v -21.351761 -6.800564 0.873730
+v -21.351761 -6.852282 0.858133
+v -19.448240 -6.852282 0.858133
+v -19.448240 -6.800564 0.873730
+v -19.842461 -3.410181 1.407337
+v -20.957541 -3.410181 1.407337
+v -34.651760 -12.209516 0.249999
+v -34.651760 -12.006444 0.031145
+v -34.353226 -12.006444 0.031145
+v -34.353226 -12.209516 0.249999
+v -19.448240 -6.306444 0.031147
+v -19.448240 -6.509516 0.250001
+v -19.746775 -6.509516 0.250001
+v -19.746775 -6.306444 0.031147
+v -27.251760 -22.707890 0.031144
+v -26.953226 -22.707890 0.031144
+v -26.953226 -23.006443 0.031144
+v -27.251760 -23.006443 0.031144
+v -19.448240 -3.539700 0.250001
+v -19.746775 -3.539700 0.250001
+v -19.746775 -3.336628 0.031147
+v -19.448240 -3.336628 0.031147
+v -2.751760 -6.852282 0.858133
+v -0.848240 -6.852282 0.858133
+v -0.848240 -6.800564 0.873730
+v -1.242460 -3.410181 1.407337
+v -2.357540 -3.410181 1.407337
+v -2.751760 -6.800564 0.873730
+v 29.353226 -22.707890 0.031144
+v 29.353226 -22.504818 0.249998
+v 29.651760 -22.504818 0.249998
+v 29.651760 -22.707890 0.031144
+v 29.651760 -23.605274 0.393655
+v 29.651760 -23.477467 0.249998
+v 19.751760 -6.777466 0.250001
+v 17.848240 -6.777466 0.250001
+v 17.848240 -6.509516 0.250001
+v 18.146774 -6.509516 0.250001
+v 18.146774 -5.804819 0.250001
+v 17.848240 -5.804819 0.250001
+v 17.848240 -3.539700 0.250001
+v 18.146774 -3.539700 0.250001
+v 18.146774 -2.835003 0.250001
+v 17.848240 -2.835003 0.250001
+v 17.848240 -2.348469 0.250001
+v 19.751760 -2.348469 0.250001
+v 19.751760 -2.835003 0.250001
+v 19.453226 -2.835003 0.250001
+v 19.453226 -3.539700 0.250001
+v 19.751760 -3.539700 0.250001
+v 19.751760 -5.804819 0.250001
+v 19.453226 -5.804819 0.250001
+v 19.453226 -6.509516 0.250001
+v 19.751760 -6.509516 0.250001
+v 32.383869 10.005064 1.141685
+v 31.895920 11.345697 1.141685
+v 31.520971 11.209227 1.141685
+v 32.008923 9.868593 1.141685
+v -15.951760 -19.535002 0.249998
+v -15.951760 -19.738073 0.031144
+v -15.951760 -20.036629 0.031144
+v -15.951760 -20.239700 0.249998
+v -15.951760 -22.504818 0.249998
+v -15.951760 -22.707890 0.031144
+v -15.951760 -23.006443 0.031144
+v -15.951760 -23.209517 0.249998
+v -15.951760 -23.477467 0.249998
+v -15.951760 -23.605274 0.393655
+v -15.951760 -23.552280 0.858130
+v -15.951760 -23.500565 0.873727
+v -15.951760 -19.024092 0.873727
+v -15.951760 -18.926893 0.458995
+v -15.951760 -19.048468 0.249998
+v -19.746775 -19.535002 0.249998
+v -19.746775 -20.239700 0.249998
+v -19.746775 -22.504818 0.249998
+v -21.351761 -23.477467 0.249998
+v -21.351761 -23.209517 0.249998
+v -21.053226 -23.209517 0.249998
+v -21.053226 -22.504818 0.249998
+v -21.351761 -22.504818 0.249998
+v -21.351761 -20.239700 0.249998
+v -21.053226 -20.239700 0.249998
+v -21.053226 -19.535002 0.249998
+v -21.351761 -19.535002 0.249998
+v 22.948240 -18.926893 0.458995
+v 24.851761 -18.926893 0.458995
+v 24.851761 -19.048468 0.249998
+v 22.948240 -19.048468 0.249998
+v 0.548240 -12.605274 0.393655
+v 2.451760 -12.605274 0.393655
+v 2.451760 -12.552280 0.858130
+v 0.548240 -12.552280 0.858130
+v -15.653226 -22.707890 0.031144
+v -15.653226 -23.006443 0.031144
+v -34.651760 -19.048468 0.249998
+v -34.651760 -18.926893 0.458995
+v 10.486664 7.955885 1.141684
+v 11.913336 7.955885 1.141684
+v 11.913336 8.354895 1.141684
+v 10.486664 8.354895 1.141684
+v -33.046776 -20.239700 0.249998
+v -33.046776 -22.504818 0.249998
+v -33.046776 -23.209517 0.249998
+v -34.651760 -23.477467 0.249998
+v -34.651760 -23.209517 0.249998
+v -34.353226 -23.209517 0.249998
+v -34.353226 -22.504818 0.249998
+v -34.651760 -22.504818 0.249998
+v -34.651760 -20.239700 0.249998
+v -34.353226 -20.239700 0.249998
+v -34.353226 -19.535002 0.249998
+v -34.651760 -19.535002 0.249998
+v -21.113337 -19.544117 1.141681
+v -19.686665 -19.544117 1.141681
+v -19.686665 -19.145103 1.141681
+v -21.113337 -19.145103 1.141681
+v 34.596523 12.582361 0.250004
+v 31.996634 11.636080 0.031150
+v 31.805809 11.566626 0.250004
+v 31.348618 11.400221 0.250004
+v 31.234375 11.358641 0.459000
+v 31.325710 11.391882 0.873731
+v 35.532219 12.922926 0.873733
+v 35.580818 12.940615 0.858136
+v 35.630615 12.958738 0.393661
+v 35.510513 12.915026 0.250004
+v 35.258724 12.823381 0.250004
+v 35.067898 12.753927 0.031150
+v 34.787350 12.651815 0.031150
+v 40.164665 -9.338746 0.250001
+v 39.973843 -9.408201 0.031147
+v 39.871735 -9.127670 0.031147
+v 40.062561 -9.058216 0.250001
+v 29.257540 -20.110180 1.407334
+v 29.413336 -19.544117 1.141681
+v 27.986664 -19.544117 1.141681
+v 28.142460 -20.110180 1.407334
+v -33.046776 -20.036629 0.031144
+v -28.046774 -19.738073 0.031144
+v -27.748240 -19.738073 0.031144
+v -27.748240 -20.036629 0.031144
+v -28.046774 -20.036629 0.031144
+v -34.353226 -20.036629 0.031144
+v -34.353226 -19.738073 0.031144
+v 18.242460 -3.410181 1.407337
+v 19.357540 -3.410181 1.407337
+v 19.513336 -2.844116 1.141684
+v 18.086664 -2.844116 1.141684
+v 10.546774 7.463371 0.031147
+v 10.546774 7.260300 0.250001
+v -13.551760 -19.535002 0.249998
+v -13.253226 -19.535002 0.249998
+v -13.253226 -19.738073 0.031144
+v -13.551760 -19.738073 0.031144
+v -29.413336 -19.145103 1.141681
+v -27.986664 -19.145103 1.141681
+v -27.748240 -19.024092 0.873727
+v -27.748240 -18.926893 0.458995
+v -29.651760 -18.926893 0.458995
+v -29.651760 -19.024092 0.873727
+v 19.751760 -6.905273 0.393658
+v 17.848240 -6.905273 0.393658
+v -14.346774 -22.707890 0.031144
+v -14.346774 -22.504818 0.249998
+v -14.048240 -22.504818 0.249998
+v -14.048240 -22.707890 0.031144
+v 2.848240 4.290485 0.250001
+v 2.848240 4.493555 0.031147
+v 3.146774 4.493555 0.031147
+v 3.146774 4.290485 0.250001
+v 24.605413 9.417002 0.031147
+v 24.503307 9.697531 0.031147
+v 24.694132 9.766985 0.250001
+v 24.796238 9.486456 0.250001
+v 5.446774 -6.007889 0.031147
+v 5.446774 -5.804819 0.250001
+v 5.446774 -6.509516 0.250001
+v 5.446774 -6.306444 0.031147
+v 2.451760 -12.209516 0.249999
+v 2.153226 -12.209516 0.249999
+v 2.153226 -12.006444 0.031145
+v 2.451760 -12.006444 0.031145
+v -13.253226 -20.036629 0.031144
+v -13.551760 -20.036629 0.031144
+v -33.046776 -12.209516 0.249999
+v -33.046776 -12.006444 0.031145
+v -32.748241 -12.006444 0.031145
+v -32.748241 -12.209516 0.249999
+v 41.347767 -3.055155 0.873730
+v 41.396362 -3.037468 0.858133
+v 40.745319 -1.248743 0.858133
+v 40.696724 -1.266432 0.873730
+v 37.645638 -2.796457 1.407337
+v 38.027016 -3.844290 1.407337
+v 24.418692 11.374723 0.873731
+v 20.212183 9.843679 0.873730
+v 20.407444 9.661024 1.141685
+v -19.946774 7.964998 0.250001
+v -19.946774 7.761927 0.031147
+v -19.946774 7.463371 0.031147
+v -19.946774 7.260300 0.250001
+v -34.651760 -22.707890 0.031144
+v -34.353226 -22.707890 0.031144
+v 20.985210 9.807344 0.031147
+v 20.883106 10.087877 0.031147
+v 21.163656 10.189989 0.031147
+v 21.265760 9.909456 0.031147
+v 35.966309 8.818907 0.250001
+v 36.068413 8.538374 0.250001
+v 33.939899 7.763659 0.250001
+v 33.837795 8.044189 0.250001
+v 33.175594 7.803169 0.250001
+v 33.277699 7.522638 0.250001
+v 32.820507 7.356234 0.250001
+v 32.169464 9.144957 0.250001
+v 32.626659 9.311361 0.250001
+v 32.728764 9.030832 0.250001
+v 33.390961 9.271852 0.250001
+v 33.288857 9.552382 0.250001
+v 35.417374 10.327101 0.250001
+v 35.519478 10.046568 0.250001
+v 36.181675 10.287588 0.250001
+v 36.079571 10.568121 0.250001
+v 36.331364 10.659765 0.250002
+v 36.982403 8.871042 0.250001
+v 36.730614 8.779398 0.250001
+v 36.628510 9.059927 0.250001
+v 12.151760 8.475908 0.873730
+v -34.651760 -23.500565 0.873727
+v -34.651760 -23.552280 0.858130
+v -33.142460 -20.110180 1.407334
+v -34.257542 -20.110180 1.407334
+v 8.186664 -19.544117 1.141681
+v 9.613337 -19.544117 1.141681
+v 9.613337 -19.145103 1.141681
+v 8.186664 -19.145103 1.141681
+v -34.353226 -23.006443 0.031144
+v 10.546774 4.995182 0.250001
+v 10.546774 4.792110 0.031147
+v 11.953226 -19.738073 0.031144
+v 12.251760 -19.738073 0.031144
+v 12.251760 -20.036629 0.031144
+v 11.953226 -20.036629 0.031144
+v 21.712593 8.681795 0.031147
+v 21.903418 8.751249 0.250001
+v 22.005524 8.470716 0.250001
+v 21.814699 8.401262 0.031147
+v 24.324863 9.314890 0.031147
+v 24.134039 9.245436 0.250001
+v 24.031935 9.525965 0.250001
+v 24.222759 9.595419 0.031147
+v 4.751760 7.463371 0.031147
+v 4.751760 7.761927 0.031147
+v 4.751760 7.964998 0.250001
+v 4.751760 8.451532 0.250001
+v 4.751760 8.573107 0.458998
+v 4.751760 8.475908 0.873730
+v 4.751760 3.999435 0.873730
+v 4.751760 3.947720 0.858133
+v 4.751760 3.894726 0.393658
+v 4.751760 4.022533 0.250001
+v 4.751760 4.290485 0.250001
+v 4.751760 4.995182 0.250001
+v 4.751760 7.260300 0.250001
+v -25.646774 -20.036629 0.031144
+v -25.646774 -20.239700 0.249998
+v -25.646774 -19.535002 0.249998
+v -25.646774 -19.738073 0.031144
+v 42.626431 -6.417053 0.858133
+v 43.277473 -8.205777 0.858133
+v 43.327271 -8.187653 0.393658
+v 42.676228 -6.398928 0.393658
+v -26.953226 -20.036629 0.031144
+v -26.953226 -19.738073 0.031144
+v -26.953226 -19.535002 0.249998
+v -26.953226 -20.239700 0.249998
+v 12.151760 7.260300 0.250001
+v 12.151760 4.995182 0.250001
+v 11.853226 4.995182 0.250001
+v 11.853226 4.290485 0.250001
+v 12.151760 4.290485 0.250001
+v 10.546774 4.290485 0.250001
+v 10.546774 7.964998 0.250001
+v 12.151760 8.451532 0.250001
+v 12.151760 7.964998 0.250001
+v 11.853226 4.493555 0.031147
+v 11.853226 4.792110 0.031147
+v 12.151760 4.792110 0.031147
+v 12.151760 4.493555 0.031147
+v -19.746775 -22.707890 0.031144
+v -21.551760 4.493555 0.031147
+v -21.551760 4.792110 0.031147
+v -21.253225 4.792110 0.031147
+v -21.253225 4.493555 0.031147
+v -34.651760 -19.024092 0.873727
+v -34.413338 -19.544117 1.141681
+v -34.413338 -19.145103 1.141681
+v 40.423225 -1.365976 0.250001
+v 40.525330 -1.646507 0.250001
+v 40.334507 -1.715961 0.031147
+v 40.232403 -1.435431 0.031147
+v -19.746775 -6.007889 0.031147
+v -19.746775 -5.804819 0.250001
+v -19.448240 -5.804819 0.250001
+v -19.448240 -6.007889 0.031147
+v -34.651760 3.999435 0.873730
+v -34.651760 3.947720 0.858133
+v -32.748241 3.947720 0.858133
+v -32.748241 3.999435 0.873730
+v -33.142460 7.389818 1.407337
+v -34.257542 7.389818 1.407337
+v 15.448240 -6.007889 0.031147
+v 15.746774 -6.007889 0.031147
+v -19.648239 4.493555 0.031147
+v -19.648239 4.290485 0.250001
+v -19.946774 4.290485 0.250001
+v -19.946774 4.493555 0.031147
+v 10.546774 4.493555 0.031147
+v 11.953226 -22.504818 0.249998
+v 11.953226 -22.707890 0.031144
+v 11.953226 -23.006443 0.031144
+v 11.953226 -23.209517 0.249998
+v 5.148240 -6.777466 0.250001
+v 7.051760 -6.777466 0.250001
+v 7.051760 -6.905273 0.393658
+v 5.148240 -6.905273 0.393658
+v 39.693291 -9.510312 0.031147
+v 39.502468 -9.579767 0.250001
+v 39.400364 -9.299237 0.250001
+v 39.591187 -9.229782 0.031147
+v -32.748241 3.894726 0.393658
+v -34.651760 3.894726 0.393658
+v -34.651760 4.022533 0.250001
+v -32.748241 4.022533 0.250001
+v 10.348240 -19.024092 0.873727
+v 10.348240 -18.926893 0.458995
+v 10.348240 -19.048468 0.249998
+v 10.348240 -19.535002 0.249998
+v 10.348240 -19.738073 0.031144
+v 10.348240 -20.036629 0.031144
+v 10.348240 -20.239700 0.249998
+v 10.348240 -22.504818 0.249998
+v 10.348240 -22.707890 0.031144
+v 10.348240 -23.006443 0.031144
+v 10.348240 -23.209517 0.249998
+v 10.348240 -23.477467 0.249998
+v 10.348240 -23.605274 0.393655
+v 10.348240 -23.552280 0.858130
+v 10.348240 -23.500565 0.873727
+v -26.857540 -20.110180 1.407334
+v -27.251760 -23.500565 0.873727
+v -27.251760 -23.552280 0.858130
+v -25.348240 -23.552280 0.858130
+v -25.348240 -23.500565 0.873727
+v -25.742460 -20.110180 1.407334
+v -26.953226 -22.504818 0.249998
+v -26.953226 -23.209517 0.249998
+v -25.646774 -22.504818 0.249998
+v -25.646774 -22.707890 0.031144
+v -25.646774 -23.006443 0.031144
+v -25.646774 -23.209517 0.249998
+v 17.848240 -2.324093 0.873730
+v 17.848240 -6.800564 0.873730
+v 18.086664 -2.445105 1.141684
+v -15.713336 -19.145103 1.141681
+v -14.286664 -19.145103 1.141681
+v -14.048240 -19.024092 0.873727
+v -14.048240 -18.926893 0.458995
+v -23.346773 7.964998 0.250001
+v -23.048241 7.964998 0.250001
+v 4.353226 -3.038074 0.031147
+v 4.353226 -2.835003 0.250001
+v -23.048241 7.260300 0.250001
+v -23.048241 8.451532 0.250001
+v -23.048241 3.999435 0.873730
+v -23.048241 3.947720 0.858133
+v -23.048241 3.894726 0.393658
+v -23.048241 4.022533 0.250001
+v -23.048241 4.290485 0.250001
+v -23.048241 4.493555 0.031147
+v -23.048241 4.792110 0.031147
+v -23.048241 4.995182 0.250001
+v 18.146774 -6.007889 0.031147
+v 18.146774 -6.306444 0.031147
+v -25.348240 -23.605274 0.393655
+v -27.251760 -23.605274 0.393655
+v -27.251760 -23.477467 0.249998
+v -25.348240 -23.477467 0.249998
+v -29.353226 -20.036629 0.031144
+v -29.353226 -19.738073 0.031144
+v 25.132294 -0.713755 0.031147
+v 25.030190 -0.433224 0.031147
+v -27.251760 -19.738073 0.031144
+v -27.251760 -19.535002 0.249998
+v -19.946774 4.995182 0.250001
+v -19.946774 4.792110 0.031147
+v 9.553226 -19.535002 0.249998
+v 9.851760 -19.535002 0.249998
+v 9.851760 -19.738073 0.031144
+v 9.553226 -19.738073 0.031144
+v 5.148240 -6.007889 0.031147
+v 5.148240 -5.804819 0.250001
+v 3.146774 -23.209517 0.249998
+v 2.848240 -23.209517 0.249998
+v 2.848240 -23.006443 0.031144
+v 3.146774 -23.006443 0.031144
+v -14.048240 -23.605274 0.393655
+v -14.048240 -23.552280 0.858130
+v 9.613337 8.354895 1.141684
+v 9.613337 7.955885 1.141684
+v 9.457540 7.389818 1.407337
+v 9.851760 3.999435 0.873730
+v 9.851760 8.475908 0.873730
+v 12.748240 -8.738072 0.031147
+v 13.046774 -8.738072 0.031147
+v 13.046774 -9.036628 0.031147
+v 12.748240 -9.036628 0.031147
+v -29.651760 -23.500565 0.873727
+v -29.651760 -23.552280 0.858130
+v -27.748240 -23.552280 0.858130
+v -27.748240 -23.500565 0.873727
+v -28.142460 -20.110180 1.407334
+v -29.257540 -20.110180 1.407334
+v -29.353226 -23.006443 0.031144
+v -29.353226 -22.707890 0.031144
+v 10.546774 7.761927 0.031147
+v -14.048240 -20.239700 0.249998
+v -14.048240 -20.036629 0.031144
+v -14.048240 -19.738073 0.031144
+v -14.048240 -19.535002 0.249998
+v -14.048240 -19.048468 0.249998
+v -14.048240 -23.500565 0.873727
+v -14.048240 -23.477467 0.249998
+v -14.048240 -23.209517 0.249998
+v -14.048240 -23.006443 0.031144
+v -27.986664 -19.544117 1.141681
+v -29.413336 -19.544117 1.141681
+v 5.386664 -2.844116 1.141684
+v 6.813336 -2.844116 1.141684
+v 6.813336 -2.445105 1.141684
+v 5.386664 -2.445105 1.141684
+v 39.875874 0.988831 0.873730
+v 35.669369 -0.542213 0.873730
+v 35.864628 -0.724871 1.141684
+v -13.551760 -18.926893 0.458995
+v -11.648240 -18.926893 0.458995
+v -11.648240 -19.048468 0.249998
+v -13.551760 -19.048468 0.249998
+v 37.632511 -2.381714 0.250001
+v 37.734615 -2.662243 0.250001
+v 37.543793 -2.731697 0.031147
+v 37.441689 -2.451168 0.031147
+v 36.259239 8.607832 0.031147
+v 36.157135 8.888361 0.031147
+v -19.746775 -2.835003 0.250001
+v -19.448240 -2.835003 0.250001
+v -19.448240 -3.038074 0.031147
+v -19.746775 -3.038074 0.031147
+v 14.551760 7.761927 0.031147
+v 14.551760 7.463371 0.031147
+v 14.413336 -8.145103 1.141684
+v 14.651760 -12.500565 0.873727
+v 14.651760 -8.024093 0.873730
+v -13.551760 -19.024092 0.873727
+v -13.551760 -23.500565 0.873727
+v -13.157540 -20.110180 1.407334
+v -13.313336 -19.544117 1.141681
+v -13.313336 -19.145103 1.141681
+v -11.946774 -23.209517 0.249998
+v -11.946774 -23.006443 0.031144
+v -11.648240 -23.006443 0.031144
+v -11.648240 -23.209517 0.249998
+v -19.842461 -20.110180 1.407334
+v -20.957541 -20.110180 1.407334
+v -11.946774 -19.535002 0.249998
+v -11.946774 -19.738073 0.031144
+v -11.946774 -20.036629 0.031144
+v -11.946774 -20.239700 0.249998
+v -24.951759 3.894726 0.393658
+v -24.951759 3.947720 0.858133
+v -13.253226 -20.239700 0.249998
+v 32.098740 11.355551 0.031148
+v 31.907915 11.286093 0.250004
+v 39.045273 -9.746172 0.250001
+v 38.394230 -7.957448 0.250001
+v 38.851425 -7.791044 0.250001
+v 38.953529 -8.071573 0.250001
+v 39.615726 -7.830553 0.250001
+v 39.513622 -7.550022 0.250001
+v 41.642139 -6.775307 0.250001
+v 41.744244 -7.055836 0.250001
+v 42.406441 -6.814816 0.250001
+v 42.304337 -6.534286 0.250001
+v 42.556129 -6.442642 0.250001
+v 43.207172 -8.231365 0.250001
+v 42.955379 -8.323009 0.250001
+v 42.853275 -8.042480 0.250001
+v 42.191074 -8.283500 0.250001
+v 42.293182 -8.564030 0.250001
+v 35.807659 11.315187 0.250004
+v 35.909763 11.034658 0.250002
+v 35.718941 10.965204 0.031148
+v 35.616837 11.245733 0.031148
+v 15.448240 -6.306444 0.031147
+v 15.746774 -6.306444 0.031147
+v -11.648240 -23.477467 0.249998
+v -11.648240 -23.605274 0.393655
+v -13.551760 -23.605274 0.393655
+v -13.551760 -23.477467 0.249998
+v 12.251760 -23.605274 0.393655
+v 12.251760 -23.552280 0.858130
+v -34.651760 -9.036628 0.031147
+v -34.651760 -9.239700 0.250001
+v -34.651760 -11.504818 0.250001
+v -34.651760 -11.707890 0.031145
+v -34.651760 -12.477466 0.249999
+v -34.651760 -12.605274 0.393655
+v -34.651760 -12.552280 0.858130
+v -34.651760 -12.500565 0.873727
+v -34.651760 -8.024093 0.873730
+v -34.651760 -7.926894 0.458998
+v -34.651760 -8.048468 0.250001
+v -34.651760 -8.535003 0.250001
+v -34.651760 -8.738072 0.031147
+v -13.551760 -23.209517 0.249998
+v -13.253226 -23.209517 0.249998
+v -13.253226 -22.504818 0.249998
+v -13.551760 -22.504818 0.249998
+v -13.551760 -20.239700 0.249998
+v -11.648240 -19.535002 0.249998
+v -11.648240 -20.239700 0.249998
+v -11.648240 -22.504818 0.249998
+v -11.946774 -22.504818 0.249998
+v -34.353226 -8.535003 0.250001
+v -34.353226 -8.738072 0.031147
+v -33.046776 -22.707890 0.031144
+v -21.351761 -19.024092 0.873727
+v -21.351761 -23.500565 0.873727
+v -11.946774 -22.707890 0.031144
+v -11.648240 -22.707890 0.031144
+v 9.553226 -23.006443 0.031144
+v 9.553226 -22.707890 0.031144
+v 9.851760 -22.707890 0.031144
+v 9.851760 -23.006443 0.031144
+v 38.181450 -3.889906 0.250001
+v 37.990627 -3.959362 0.031147
+v 37.710075 -4.061474 0.031147
+v 37.519253 -4.130928 0.250001
+v 10.646774 -19.535002 0.249998
+v 10.646774 -19.738073 0.031144
+v -13.551760 -23.552280 0.858130
+v -11.648240 -23.552280 0.858130
+v -11.648240 -23.500565 0.873727
+v -12.042460 -20.110180 1.407334
+v 37.621357 -4.411457 0.250001
+v 37.812180 -4.342003 0.031147
+v -34.353226 -11.707890 0.031145
+v -13.253226 -22.707890 0.031144
+v -13.253226 -23.006443 0.031144
+v 2.848240 -19.048468 0.249998
+v 2.848240 -18.926893 0.458995
+v 4.751760 -18.926893 0.458995
+v 4.751760 -19.048468 0.249998
+v 2.451760 -8.738072 0.031147
+v 2.451760 -8.535003 0.250001
+v 2.451760 -8.048468 0.250001
+v 2.451760 -7.926894 0.458998
+v 2.451760 -8.024093 0.873730
+v 2.451760 -12.500565 0.873727
+v 2.451760 -12.477466 0.249999
+v 2.451760 -11.707890 0.031145
+v 2.451760 -11.504818 0.250001
+v 2.451760 -9.239700 0.250001
+v 2.451760 -9.036628 0.031147
+v 12.251760 -19.024092 0.873727
+v 12.013336 -19.145103 1.141681
+v 12.013336 -19.544117 1.141681
+v 11.857540 -20.110180 1.407334
+v 12.251760 -23.500565 0.873727
+v 27.251760 -22.707890 0.031144
+v 27.251760 -22.504818 0.249998
+v 27.251760 -20.239700 0.249998
+v 27.251760 -20.036629 0.031144
+v 27.251760 -19.738073 0.031144
+v 27.251760 -19.535002 0.249998
+v 27.251760 -19.048468 0.249998
+v 27.251760 -18.926893 0.458995
+v 27.251760 -19.024092 0.873727
+v 27.251760 -23.605274 0.393655
+v 27.251760 -23.477467 0.249998
+v 27.251760 -23.209517 0.249998
+v 27.251760 -23.006443 0.031144
+v 39.022369 -9.754509 0.873730
+v 43.228878 -8.223465 0.873730
+v 39.908127 -9.012599 1.407337
+v 39.429485 -9.352605 1.141684
+v 39.054535 -9.489075 1.141684
+v 27.820904 0.582512 0.031147
+v 27.540354 0.480400 0.031147
+v 7.948240 4.022533 0.250001
+v 9.851760 4.022533 0.250001
+v 9.851760 3.894726 0.393658
+v 7.948240 3.894726 0.393658
+v 15.448240 -3.038074 0.031147
+v 15.746774 -3.038074 0.031147
+v 15.746774 -3.336628 0.031147
+v 15.448240 -3.336628 0.031147
+v -21.351761 -6.007889 0.031147
+v -21.053226 -6.007889 0.031147
+v -21.053226 -6.306444 0.031147
+v -21.351761 -6.306444 0.031147
+v -15.653226 -23.209517 0.249998
+v -15.653226 -22.504818 0.249998
+v -15.653226 -20.239700 0.249998
+v -15.653226 -19.535002 0.249998
+v -14.346774 -19.535002 0.249998
+v -14.346774 -20.239700 0.249998
+v -14.346774 -23.209517 0.249998
+v 32.797604 7.347897 0.873730
+v 32.829769 7.613331 1.141684
+v 32.341820 8.953962 1.141684
+v 32.146561 9.136621 0.873730
+v 32.055222 9.103376 0.458998
+v 32.706264 7.314653 0.458998
+v -14.346774 -20.036629 0.031144
+v -14.346774 -19.738073 0.031144
+v 17.848240 -6.852282 0.858133
+v 17.848240 -2.226894 0.458998
+v 17.848240 -3.038074 0.031147
+v 17.848240 -3.336628 0.031147
+v 17.848240 -6.007889 0.031147
+v 17.848240 -6.306444 0.031147
+v -15.653226 -20.036629 0.031144
+v -15.653226 -19.738073 0.031144
+v -21.351761 -5.804819 0.250001
+v -21.053226 -5.804819 0.250001
+v 14.353226 -11.707890 0.031145
+v 14.353226 -11.504818 0.250001
+v 14.651760 -11.504818 0.250001
+v 14.651760 -11.707890 0.031145
+v 17.053226 -6.007889 0.031147
+v 17.351761 -6.007889 0.031147
+v 17.351761 -6.306444 0.031147
+v 17.053226 -6.306444 0.031147
+v 24.247299 10.994650 0.250002
+v 24.056475 10.925196 0.031148
+v 23.954370 11.205725 0.031148
+v 24.145195 11.275179 0.250004
+v 25.348240 -22.504818 0.249998
+v 25.646774 -22.504818 0.249998
+v 4.453226 4.290485 0.250001
+v 6.753226 -2.835003 0.250001
+v 7.051760 -2.835003 0.250001
+v 7.051760 -3.038074 0.031147
+v 6.753226 -3.038074 0.031147
+v -29.651760 -19.738073 0.031144
+v -2.751760 -5.804819 0.250001
+v -2.453226 -5.804819 0.250001
+v -2.453226 -6.007889 0.031147
+v -2.751760 -6.007889 0.031147
+v 21.534149 8.299150 0.031147
+v 21.343325 8.229696 0.250001
+v 21.241220 8.510229 0.250001
+v 21.432045 8.579683 0.031147
+v -21.351761 -23.006443 0.031144
+v -21.351761 -22.707890 0.031144
+v -21.053226 -22.707890 0.031144
+v -21.053226 -23.006443 0.031144
+v -2.453226 -6.509516 0.250001
+v -2.751760 -6.509516 0.250001
+v -2.751760 -6.306444 0.031147
+v -2.453226 -6.306444 0.031147
+v -15.557540 -20.110180 1.407334
+v -14.442460 -20.110180 1.407334
+v -15.713336 -19.544117 1.141681
+v -14.286664 -19.544117 1.141681
+v 27.271965 2.090706 0.031147
+v 27.374071 1.810175 0.031147
+v 7.948240 -19.535002 0.249998
+v 8.246774 -19.535002 0.249998
+v 8.246774 -19.738073 0.031144
+v 7.948240 -19.738073 0.031144
+v -14.346774 -23.006443 0.031144
+v 2.153226 -9.036628 0.031147
+v 2.153226 -8.738072 0.031147
+v 5.148240 -2.324093 0.873730
+v 7.051760 -2.324093 0.873730
+v 7.051760 -2.226894 0.458998
+v 5.148240 -2.226894 0.458998
+v 4.453226 -19.535002 0.249998
+v 4.453226 -19.738073 0.031144
+v -32.748241 -8.048468 0.250001
+v -32.748241 -8.535003 0.250001
+v -33.046776 -8.535003 0.250001
+v -33.046776 -9.239700 0.250001
+v -32.748241 -9.239700 0.250001
+v -32.748241 -11.504818 0.250001
+v -33.046776 -11.504818 0.250001
+v -32.748241 -12.477466 0.249999
+v -34.353226 -11.504818 0.250001
+v -34.353226 -9.239700 0.250001
+v 3.146774 -19.738073 0.031144
+v 3.146774 -19.535002 0.249998
+v 19.751760 -3.038074 0.031147
+v 19.453226 -3.038074 0.031147
+v 18.146774 -3.038074 0.031147
+v 18.146774 -3.336628 0.031147
+v -25.348240 -19.535002 0.249998
+v -25.348240 -19.738073 0.031144
+v 2.848240 7.761927 0.031147
+v 2.848240 7.964998 0.250001
+v 3.146774 7.964998 0.250001
+v 3.146774 7.761927 0.031147
+v 2.848240 -23.477467 0.249998
+v 4.751760 -23.477467 0.249998
+v 27.642458 0.199871 0.031147
+v 9.851760 4.493555 0.031147
+v 9.851760 4.290485 0.250001
+v 22.948240 -23.605274 0.393655
+v 22.948240 -23.477467 0.249998
+v 24.851761 -23.477467 0.249998
+v 24.851761 -23.605274 0.393655
+v -34.651760 8.451532 0.250001
+v -32.748241 8.451532 0.250001
+v 3.146774 -22.504818 0.249998
+v 2.848240 -22.504818 0.249998
+v 2.848240 -19.535002 0.249998
+v 4.751760 -19.535002 0.249998
+v 4.751760 -22.504818 0.249998
+v 4.453226 -22.504818 0.249998
+v 4.453226 -23.209517 0.249998
+v 4.751760 -23.209517 0.249998
+v 40.972164 -2.874170 0.250001
+v 41.074268 -3.154699 0.250001
+v 40.883446 -3.224155 0.031147
+v 40.781338 -2.943624 0.031147
+v 3.242460 -20.110180 1.407334
+v 4.357540 -20.110180 1.407334
+v 4.513336 -19.544117 1.141681
+v 3.086664 -19.544117 1.141681
+v -13.551760 -22.707890 0.031144
+v -13.551760 -23.006443 0.031144
+v 12.251760 -18.926893 0.458995
+v 12.251760 -19.048468 0.249998
+v -21.551760 3.894726 0.393658
+v -19.648239 3.894726 0.393658
+v -19.648239 3.947720 0.858133
+v -21.551760 3.947720 0.858133
+v 36.183262 11.134203 0.873731
+v 36.231857 11.151892 0.858134
+v 32.481133 11.392900 1.407339
+v 32.862511 10.345068 1.407339
+v 33.646969 7.974735 0.031147
+v 33.749073 7.694204 0.031147
+v 2.848240 3.894726 0.393658
+v 2.848240 3.947720 0.858133
+v 2.848240 3.999435 0.873730
+v 2.848240 8.475908 0.873730
+v 2.848240 8.573107 0.458998
+v 2.848240 8.451532 0.250001
+v 2.848240 7.463371 0.031147
+v 2.848240 7.260300 0.250001
+v 2.848240 4.995182 0.250001
+v 2.848240 4.792110 0.031147
+v 2.848240 4.022533 0.250001
+v 5.148240 -6.852282 0.858133
+v 5.148240 -6.800564 0.873730
+v 5.148240 -2.348469 0.250001
+v 5.148240 -2.835003 0.250001
+v 5.148240 -3.038074 0.031147
+v 5.148240 -3.336628 0.031147
+v 5.148240 -3.539700 0.250001
+v 5.148240 -6.306444 0.031147
+v 5.148240 -6.509516 0.250001
+v 11.953226 -19.535002 0.249998
+v 11.953226 -20.239700 0.249998
+v 10.646774 -20.036629 0.031144
+v 10.646774 -20.239700 0.249998
+v 7.948240 -23.552280 0.858130
+v 9.851760 -23.552280 0.858130
+v 9.851760 -23.500565 0.873727
+v 9.457540 -20.110180 1.407334
+v 8.342460 -20.110180 1.407334
+v 7.948240 -23.500565 0.873727
+v 37.102505 8.914755 0.393658
+v 36.451462 10.703478 0.393659
+v 36.401665 10.685354 0.858133
+v 37.052708 8.896627 0.858133
+v -24.653227 4.493555 0.031147
+v -24.951759 4.493555 0.031147
+v 39.974270 1.024643 0.393658
+v 39.854168 0.980930 0.250001
+v 39.602379 0.889286 0.250001
+v 39.411552 0.819832 0.031147
+v 39.131004 0.717720 0.031147
+v 38.940178 0.648266 0.250001
+v 36.811665 -0.126451 0.250001
+v 36.620838 -0.195906 0.031147
+v 36.340290 -0.298018 0.031147
+v 36.149464 -0.367472 0.250001
+v 35.692272 -0.533876 0.250001
+v 35.578030 -0.575457 0.458998
+v 39.924473 1.006519 0.858133
+v -33.046776 4.493555 0.031147
+v -33.046776 4.792110 0.031147
+v -32.748241 4.792110 0.031147
+v -32.748241 4.493555 0.031147
+v 12.251760 -23.209517 0.249998
+v 12.251760 -23.477467 0.249998
+v 10.646774 -23.209517 0.249998
+v 10.646774 -22.504818 0.249998
+v 12.251760 -19.535002 0.249998
+v 12.251760 -20.239700 0.249998
+v 12.251760 -22.504818 0.249998
+v 12.748240 -12.552280 0.858130
+v 14.651760 -12.552280 0.858130
+v 12.151760 7.761927 0.031147
+v 12.151760 7.463371 0.031147
+v 4.751760 -19.738073 0.031144
+v 13.046774 -12.006444 0.031145
+v 12.748240 -12.006444 0.031145
+v 42.764557 -8.392464 0.031147
+v 42.484005 -8.494576 0.031147
+v 42.381901 -8.214046 0.031147
+v 42.662449 -8.111934 0.031147
+v -29.651760 -22.707890 0.031144
+v -29.651760 -23.006443 0.031144
+v -29.651760 -23.605274 0.393655
+v -29.651760 -20.036629 0.031144
+v 23.725039 0.546005 1.141684
+v 23.529779 0.728661 0.873730
+v 23.438442 0.695417 0.458998
+v 24.089485 -1.093306 0.458998
+v 24.180820 -1.060062 0.873730
+v 24.212990 -0.794628 1.141684
+v 28.387329 0.470982 0.873730
+v 28.435926 0.488668 0.858133
+v 27.784885 2.277393 0.858133
+v 27.736286 2.259705 0.873730
+v 24.685200 0.729679 1.407337
+v 25.066580 -0.318153 1.407337
+v 10.742460 -20.110180 1.407334
+v 12.151760 8.573107 0.458998
+v 24.851744 -0.815866 0.031147
+v 24.749640 -0.535336 0.031147
+v 12.946774 7.761927 0.031147
+v 12.946774 7.463371 0.031147
+v 10.586664 -19.544117 1.141681
+v 40.575516 -0.782206 0.858133
+v 40.625313 -0.764080 0.393658
+v 38.092731 -4.239891 0.031147
+v 38.283554 -4.170437 0.250001
+v -34.353226 -9.036628 0.031147
+v 4.353226 -6.509516 0.250001
+v 4.353226 -6.306444 0.031147
+v 39.144352 -8.002119 0.031147
+v 39.042248 -7.721588 0.031147
+v 39.322800 -7.619476 0.031147
+v 39.424904 -7.900007 0.031147
+v -33.046776 -9.036628 0.031147
+v -32.748241 -9.036628 0.031147
+v -1.086664 -2.844116 1.141684
+v -2.513336 -2.844116 1.141684
+v 27.923008 0.301983 0.031147
+v 9.553226 -22.504818 0.249998
+v 9.851760 -22.504818 0.249998
+v 9.553226 -20.036629 0.031144
+v 9.553226 -20.239700 0.249998
+v 25.348240 -18.926893 0.458995
+v 25.348240 -19.048468 0.249998
+v -0.848240 -3.336628 0.031147
+v -0.848240 -3.539700 0.250001
+v -1.146774 -3.539700 0.250001
+v -1.146774 -3.336628 0.031147
+v 8.246774 -20.036629 0.031144
+v 8.246774 -20.239700 0.249998
+v -32.748241 -12.605274 0.393655
+v 33.204720 7.749802 1.141684
+v 32.716766 9.090433 1.141684
+v -1.146774 -2.835003 0.250001
+v -1.146774 -3.038074 0.031147
+v 28.046774 -19.535002 0.249998
+v 28.046774 -19.738073 0.031144
+v -34.651760 7.964998 0.250001
+v -34.353226 7.964998 0.250001
+v -34.353226 7.761927 0.031147
+v -34.651760 7.761927 0.031147
+v -19.746775 -19.738073 0.031144
+v 32.456852 9.777903 0.250001
+v 32.354748 10.058432 0.250001
+v 32.545570 10.127886 0.031147
+v 32.647675 9.847357 0.031147
+v 17.351761 -3.336628 0.031147
+v 17.053226 -3.336628 0.031147
+v 9.851760 -23.477467 0.249998
+v 9.851760 -23.605274 0.393655
+v 7.948240 -23.605274 0.393655
+v 7.948240 -23.477467 0.249998
+v -1.146774 -6.306444 0.031147
+v -1.146774 -6.007889 0.031147
+v -0.848240 -6.007889 0.031147
+v -0.848240 -6.306444 0.031147
+v 8.246774 7.463371 0.031147
+v 8.246774 7.761927 0.031147
+v 8.246774 7.964998 0.250001
+v 8.246774 7.260300 0.250001
+v 23.775925 10.823084 0.031148
+v 23.673820 11.103613 0.031148
+v -11.648240 -19.024092 0.873727
+v -11.886663 -19.145103 1.141681
+v -11.886663 -19.544117 1.141681
+v 12.251760 -23.006443 0.031144
+v 29.353226 -23.209517 0.249998
+v 29.353226 -23.006443 0.031144
+v 29.651760 -23.006443 0.031144
+v 29.651760 -23.209517 0.249998
+v 31.999659 9.611498 0.250001
+v 31.885416 9.569914 0.458998
+v 9.553226 -23.209517 0.249998
+v 38.566586 -8.148441 1.141684
+v 38.371326 -7.965785 0.873730
+v 38.279991 -7.999028 0.458998
+v 38.931030 -9.787752 0.458998
+v 15.448240 -6.800564 0.873730
+v 15.842460 -3.410181 1.407337
+v 15.686664 -2.844116 1.141684
+v 15.686664 -2.445105 1.141684
+v 15.448240 -2.324093 0.873730
+v 2.748240 -6.007889 0.031147
+v 3.046774 -6.007889 0.031147
+v 3.046774 -6.306444 0.031147
+v 2.748240 -6.306444 0.031147
+v 29.651760 -18.926893 0.458995
+v 29.651760 -19.048468 0.249998
+v -21.351761 -23.605274 0.393655
+v -21.351761 -23.552280 0.858130
+v 15.448240 -6.905273 0.393658
+v 17.351761 -6.905273 0.393658
+v 17.351761 -6.852282 0.858133
+v 15.448240 -6.852282 0.858133
+v 27.093521 1.708063 0.031147
+v 26.991417 1.988594 0.031147
+v 29.353226 -20.036629 0.031144
+v 29.353226 -20.239700 0.249998
+v 29.353226 -19.535002 0.249998
+v 29.353226 -19.738073 0.031144
+v 28.046774 -20.239700 0.249998
+v 28.046774 -20.036629 0.031144
+v -21.351761 -19.738073 0.031144
+v -21.053226 -19.738073 0.031144
+v 26.953226 -22.504818 0.249998
+v 26.953226 -22.707890 0.031144
+v 26.953226 -23.006443 0.031144
+v 26.953226 -23.209517 0.249998
+v 33.366421 7.872623 0.031147
+v 33.468525 7.592093 0.031147
+v 39.526749 -7.964767 1.407337
+v 38.941536 -8.011971 1.141684
+v -33.046776 4.995182 0.250001
+v -33.046776 4.290485 0.250001
+v 28.046774 -23.209517 0.249998
+v 28.046774 -22.504818 0.249998
+v 29.651760 -19.535002 0.249998
+v 29.651760 -20.239700 0.249998
+v 35.710300 10.116022 0.031147
+v 35.608196 10.396555 0.031147
+v 28.046774 -22.707890 0.031144
+v -27.748240 -23.605274 0.393655
+v 29.651760 -23.552280 0.858130
+v 29.651760 -23.500565 0.873727
+v 28.046774 -23.006443 0.031144
+v 36.442394 -0.578547 0.031147
+v 36.251572 -0.648003 0.250001
+v 26.953226 -19.535002 0.249998
+v 26.953226 -20.239700 0.249998
+v 25.348240 -23.477467 0.249998
+v 25.348240 -23.209517 0.249998
+v 25.646774 -23.209517 0.249998
+v 25.348240 -20.239700 0.249998
+v 25.646774 -20.239700 0.249998
+v 25.646774 -19.535002 0.249998
+v 25.348240 -19.535002 0.249998
+v 25.348240 -23.605274 0.393655
+v 25.348240 -19.024092 0.873727
+v 25.348240 -19.738073 0.031144
+v 25.348240 -20.036629 0.031144
+v -32.986664 -19.544117 1.141681
+v 0.548240 -11.707890 0.031145
+v 0.846774 -11.707890 0.031145
+v 0.846774 -12.006444 0.031145
+v 0.548240 -12.006444 0.031145
+v -19.746775 -20.036629 0.031144
+v 0.548240 -9.239700 0.250001
+v 0.548240 -11.504818 0.250001
+v 0.548240 -12.209516 0.249999
+v 0.548240 -12.477466 0.249999
+v 0.548240 -12.500565 0.873727
+v 0.548240 -8.024093 0.873730
+v 0.548240 -7.926894 0.458998
+v 0.548240 -8.048468 0.250001
+v 0.548240 -8.535003 0.250001
+v 0.548240 -8.738072 0.031147
+v 0.548240 -9.036628 0.031147
+v -23.346773 4.792110 0.031147
+v -23.346773 4.493555 0.031147
+v 26.953226 -20.036629 0.031144
+v 26.953226 -19.738073 0.031144
+v 25.646774 -20.036629 0.031144
+v 25.646774 -19.738073 0.031144
+v 0.846774 -8.738072 0.031147
+v 0.846774 -9.036628 0.031147
+v 2.848240 -19.738073 0.031144
+v 24.553226 -22.707890 0.031144
+v 24.553226 -22.504818 0.249998
+v 24.851761 -22.504818 0.249998
+v 24.851761 -22.707890 0.031144
+v 29.651760 -19.738073 0.031144
+v 15.448240 -2.226894 0.458998
+v 2.748240 -5.804819 0.250001
+v 3.046774 -5.804819 0.250001
+v -24.951759 7.260300 0.250001
+v -24.951759 7.463371 0.031147
+v -24.653227 7.463371 0.031147
+v -24.653227 7.260300 0.250001
+v 27.013336 -19.544117 1.141681
+v 25.586664 -19.544117 1.141681
+v 35.438389 10.863092 0.031148
+v 35.336285 11.143621 0.031148
+v -21.053226 -20.036629 0.031144
+v -21.351761 -20.036629 0.031144
+v 9.851760 3.947720 0.858133
+v 7.948240 3.947720 0.858133
+v 27.986664 -19.145103 1.141681
+v 32.928226 9.949469 0.031147
+v 32.826122 10.229998 0.031147
+v -34.353226 4.290485 0.250001
+v -34.651760 4.290485 0.250001
+v -34.651760 4.493555 0.031147
+v -34.353226 4.493555 0.031147
+v -21.113337 -2.844116 1.141684
+v -19.686665 -2.844116 1.141684
+v -19.686665 -2.445105 1.141684
+v -21.113337 -2.445105 1.141684
+v 35.990852 10.218134 0.031147
+v 35.888744 10.498667 0.031148
+v 19.453226 -6.007889 0.031147
+v 19.453226 -6.306444 0.031147
+v -25.348240 -19.048468 0.249998
+v -25.348240 -18.926893 0.458995
+v -25.348240 -19.024092 0.873727
+v -25.348240 -23.209517 0.249998
+v -25.348240 -23.006443 0.031144
+v -25.348240 -22.707890 0.031144
+v -25.348240 -22.504818 0.249998
+v -25.348240 -20.239700 0.249998
+v -25.348240 -20.036629 0.031144
+v 23.186665 -19.544117 1.141681
+v 24.613337 -19.544117 1.141681
+v 24.613337 -19.145103 1.141681
+v 23.186665 -19.145103 1.141681
+v 4.453226 -22.707890 0.031144
+v 4.751760 -22.707890 0.031144
+v 4.751760 -23.006443 0.031144
+v 4.453226 -23.006443 0.031144
+v 36.437683 8.990473 0.031147
+v -2.751760 -3.336628 0.031147
+v -2.751760 -3.038074 0.031147
+v -33.046776 7.463371 0.031147
+v -33.046776 7.761927 0.031147
+v -32.748241 7.761927 0.031147
+v -32.748241 7.463371 0.031147
+v 35.360828 12.542852 0.250004
+v 35.170002 12.473398 0.031150
+v 24.587938 -0.658159 1.141684
+v 24.099987 0.682474 1.141684
+v -1.146774 -5.804819 0.250001
+v -1.146774 -6.509516 0.250001
+v -0.848240 -6.509516 0.250001
+v -0.848240 -6.777466 0.250001
+v -2.751760 -6.777466 0.250001
+v -2.751760 -3.539700 0.250001
+v -2.751760 -2.835003 0.250001
+v -2.751760 -2.348469 0.250001
+v -0.848240 -2.348469 0.250001
+v -0.848240 -2.835003 0.250001
+v -0.848240 -5.804819 0.250001
+v 37.141258 -4.586199 0.873730
+v 37.548374 -4.184296 1.141684
+v 37.173424 -4.320766 1.141684
+v 4.513336 8.354895 1.141684
+v 4.513336 7.955885 1.141684
+v 4.357540 7.389818 1.407337
+v 40.795116 -1.230619 0.393658
+v 40.675018 -1.274332 0.250001
+v 39.951851 -1.537542 0.031147
+v 39.761028 -1.606997 0.250001
+v 37.161137 -2.553280 0.031147
+v 36.970314 -2.622734 0.250001
+v 36.513123 -2.789139 0.250001
+v 36.398880 -2.830719 0.458998
+v 36.490215 -2.797476 0.873730
+v 36.320408 -2.330936 0.873730
+v 36.352577 -2.065504 1.141684
+v 36.229073 -2.364182 0.458998
+v -23.346773 4.995182 0.250001
+v -23.346773 4.290485 0.250001
+v 3.086664 7.955885 1.141684
+v 3.086664 8.354895 1.141684
+v -33.046776 -23.006443 0.031144
+v 5.446774 -3.539700 0.250001
+v 5.446774 -3.336628 0.031147
+v 5.446774 -3.038074 0.031147
+v 5.446774 -2.835003 0.250001
+v 31.976753 9.603159 0.873730
+v -33.046776 -8.738072 0.031147
+v -32.748241 -8.738072 0.031147
+v -32.986664 7.955885 1.141684
+v 14.551760 4.493555 0.031147
+v -34.651760 -20.036629 0.031144
+v 14.551760 8.475908 0.873730
+v 14.551760 8.573107 0.458998
+v 2.748240 -6.509516 0.250001
+v 3.046774 -6.509516 0.250001
+v 3.146774 7.463371 0.031147
+v 3.146774 7.260300 0.250001
+v -25.586664 -19.145103 1.141681
+v -25.586664 -19.544117 1.141681
+v -24.713337 7.955885 1.141684
+v -23.286663 7.955885 1.141684
+v 0.846774 -9.239700 0.250001
+v 12.748240 -8.535003 0.250001
+v 13.046774 -8.535003 0.250001
+v 17.351761 -2.324093 0.873730
+v 17.351761 -2.226894 0.458998
+v 17.113337 -2.445105 1.141684
+v 5.542460 -3.410181 1.407337
+v 6.657540 -3.410181 1.407337
+v -19.648239 7.260300 0.250001
+v -19.648239 7.463371 0.031147
+v 7.948240 -22.707890 0.031144
+v 7.948240 -22.504818 0.249998
+v 19.513336 -2.445105 1.141684
+v -32.986664 -19.145103 1.141681
+v 3.146774 4.792110 0.031147
+v 3.146774 4.995182 0.250001
+v -21.551760 3.999435 0.873730
+v -21.313335 8.354895 1.141684
+v -21.551760 8.475908 0.873730
+v 2.748240 -6.800564 0.873730
+v 2.748240 -2.324093 0.873730
+v 2.748240 -2.226894 0.458998
+v 2.748240 -2.348469 0.250001
+v 2.748240 -2.835003 0.250001
+v 2.748240 -3.038074 0.031147
+v 2.748240 -3.336628 0.031147
+v 2.748240 -3.539700 0.250001
+v 2.748240 -6.777466 0.250001
+v 2.748240 -6.905273 0.393658
+v 2.748240 -6.852282 0.858133
+v -23.346773 7.260300 0.250001
+v 19.751760 -6.007889 0.031147
+v 0.786664 -8.145103 1.141684
+v 2.213336 -8.145103 1.141684
+v 17.113337 -2.844116 1.141684
+v 3.146774 -22.707890 0.031144
+v 2.848240 -22.707890 0.031144
+v 40.151318 -0.618908 0.250001
+v 40.253422 -0.899437 0.250001
+v 40.062595 -0.968893 0.031147
+v 39.960491 -0.688362 0.031147
+v 7.948240 -19.024092 0.873727
+v -0.848240 -2.324093 0.873730
+v -1.086664 -2.445105 1.141684
+v 3.046774 -3.539700 0.250001
+v 3.046774 -2.835003 0.250001
+v 4.353226 -3.539700 0.250001
+v 4.353226 -5.804819 0.250001
+v -24.951759 8.451532 0.250001
+v 3.046774 -3.038074 0.031147
+v -28.046774 -23.006443 0.031144
+v 3.142460 -3.410181 1.407337
+v 4.257540 -3.410181 1.407337
+v 4.413336 -2.844116 1.141684
+v 2.986664 -2.844116 1.141684
+v -24.951759 7.761927 0.031147
+v -24.951759 7.964998 0.250001
+v -24.653227 7.964998 0.250001
+v -24.653227 7.761927 0.031147
+v -21.351761 -3.336628 0.031147
+v -21.351761 -3.038074 0.031147
+v -21.053226 -3.038074 0.031147
+v -21.053226 -3.336628 0.031147
+v 20.120848 9.810434 0.458998
+v 20.771889 8.021711 0.458998
+v 20.863226 8.054956 0.873730
+v 20.895393 8.320391 1.141684
+v 14.551760 4.792110 0.031147
+v 9.553226 7.761927 0.031147
+v 9.553226 7.964998 0.250001
+v 9.851760 7.964998 0.250001
+v 9.851760 7.761927 0.031147
+v -21.551760 4.995182 0.250001
+v -21.253225 4.995182 0.250001
+v 22.948240 -22.707890 0.031144
+v 22.948240 -22.504818 0.249998
+v 23.246775 -22.504818 0.249998
+v 23.246775 -22.707890 0.031144
+v -21.053226 -6.509516 0.250001
+v -21.351761 -6.509516 0.250001
+v -32.748241 4.290485 0.250001
+v 9.851760 -23.209517 0.249998
+v 7.051760 -6.306444 0.031147
+v 7.051760 -6.509516 0.250001
+v 6.753226 -6.509516 0.250001
+v 6.753226 -6.306444 0.031147
+v 6.753226 -6.007889 0.031147
+v 6.753226 -5.804819 0.250001
+v 7.051760 -5.804819 0.250001
+v 7.051760 -6.007889 0.031147
+v -32.748241 4.995182 0.250001
+v 32.919586 9.100286 0.031147
+v 33.200138 9.202398 0.031147
+v -19.648239 4.792110 0.031147
+v -27.251760 -20.036629 0.031144
+v -27.251760 -20.239700 0.249998
+v 6.753226 -3.336628 0.031147
+v 6.753226 -3.539700 0.250001
+v -21.551760 8.573107 0.458998
+v -21.551760 8.451532 0.250001
+v -21.551760 7.964998 0.250001
+v -21.551760 7.761927 0.031147
+v -21.551760 7.463371 0.031147
+v -21.551760 7.260300 0.250001
+v -21.551760 4.290485 0.250001
+v -21.551760 4.022533 0.250001
+v -2.513336 -2.445105 1.141684
+v -34.651760 -23.605274 0.393655
+v 7.948240 7.463371 0.031147
+v 7.948240 7.761927 0.031147
+v -32.748241 -12.552280 0.858130
+v 14.551760 3.947720 0.858133
+v 4.353226 -3.336628 0.031147
+v -21.351761 -6.905273 0.393658
+v -19.448240 -6.905273 0.393658
+v 17.351761 -6.800564 0.873730
+v 16.957541 -3.410181 1.407337
+v -27.013336 -19.544117 1.141681
+v -27.013336 -19.145103 1.141681
+v 0.846774 -8.535003 0.250001
+v -11.648240 -20.036629 0.031144
+v -11.648240 -19.738073 0.031144
+v 37.004108 8.878942 0.873730
+v 33.683361 8.089808 1.407337
+v 8.186664 7.955885 1.141684
+v 8.186664 8.354895 1.141684
+v 33.016945 10.299452 0.250001
+v 33.119049 10.018923 0.250001
+v 42.577835 -6.434742 0.873730
+v 42.113514 -6.603741 0.031147
+v 41.832962 -6.705853 0.031147
+v -19.886663 8.354895 1.141684
+v -19.648239 8.475908 0.873730
+v -19.648239 8.573107 0.458998
+v -34.651760 -19.738073 0.031144
+v 22.948240 -23.552280 0.858130
+v 24.851761 -23.552280 0.858130
+v 24.851761 -23.500565 0.873727
+v 24.457541 -20.110180 1.407334
+v 23.342461 -20.110180 1.407334
+v 22.948240 -23.500565 0.873727
+v 37.164162 -4.577862 0.250001
+v 37.072418 -2.903265 0.250001
+v 39.863132 -1.887527 0.250001
+v 41.326061 -3.063055 0.250001
+v 40.309967 -3.115191 0.250001
+v 40.412071 -3.395721 0.250001
+v 37.049919 -4.619442 0.458998
+v 36.685474 -2.980131 1.141684
+v 20.794386 9.737890 0.250001
+v 20.692282 10.018423 0.250001
+v 25.069735 9.586000 0.873730
+v 25.118332 9.603689 0.858133
+v 24.467289 11.392412 0.858134
+v -33.046776 -11.707890 0.031145
+v -32.748241 -11.707890 0.031145
+v 22.948240 -19.738073 0.031144
+v 22.948240 -19.535002 0.249998
+v 23.246775 -19.535002 0.249998
+v 23.246775 -19.738073 0.031144
+v -34.651760 -23.006443 0.031144
+v 2.153226 -8.535003 0.250001
+v 4.453226 7.964998 0.250001
+v 4.453226 7.260300 0.250001
+v 4.453226 4.995182 0.250001
+v -21.053226 -3.539700 0.250001
+v -21.351761 -3.539700 0.250001
+v 36.539787 8.709940 0.031147
+v -34.257542 -9.110181 1.407337
+v -34.413338 -8.544116 1.141684
+v -34.413338 -8.145103 1.141684
+v 7.948240 8.475908 0.873730
+v 9.851760 8.573107 0.458998
+v 7.948240 8.573107 0.458998
+v 39.591221 -1.140459 0.250001
+v 39.489117 -0.859928 0.250001
+v 39.679943 -0.790474 0.031147
+v 39.782047 -1.071005 0.031147
+v 40.602894 -3.326265 0.031147
+v 40.500790 -3.045736 0.031147
+v 41.935066 -6.986382 0.031147
+v 42.215618 -6.884270 0.031147
+v 36.722942 -0.476435 0.031147
+v 36.343315 -2.322599 0.250001
+v 37.263245 -2.833809 0.031147
+v 40.505211 -0.807793 0.250001
+v 40.526917 -0.799892 0.873730
+v 36.800507 -2.156195 0.250001
+v 36.991333 -2.086740 0.031147
+v 37.271881 -1.984629 0.031147
+v 37.462708 -1.915174 0.250001
+v 41.446159 -3.019342 0.393658
+v 9.851760 -20.239700 0.249998
+v 9.851760 -20.036629 0.031144
+v 37.360603 -1.634644 0.250001
+v 37.169777 -1.704100 0.031147
+v 36.889229 -1.806211 0.031147
+v 36.698402 -1.875666 0.250001
+v 13.046774 -9.239700 0.250001
+v 36.913769 -0.406981 0.250001
+v 39.042286 0.367735 0.250001
+v 39.704483 0.608755 0.250001
+v 0.846774 -12.209516 0.249999
+v 0.846774 -11.504818 0.250001
+v 2.153226 -9.239700 0.250001
+v 2.153226 -11.504818 0.250001
+v 24.553226 -23.209517 0.249998
+v 24.553226 -23.006443 0.031144
+v 24.851761 -23.006443 0.031144
+v 24.851761 -23.209517 0.249998
+v 4.353226 -6.007889 0.031147
+v 14.353226 -8.738072 0.031147
+v 14.651760 -8.738072 0.031147
+v 14.651760 -9.036628 0.031147
+v 14.353226 -9.036628 0.031147
+v 39.233109 0.437189 0.031147
+v 39.513657 0.539301 0.031147
+v 7.948240 4.995182 0.250001
+v 8.246774 4.995182 0.250001
+v 10.646774 -23.006443 0.031144
+v 22.948240 -19.024092 0.873727
+v 24.851761 -19.024092 0.873727
+v 7.948240 -23.006443 0.031144
+v -34.651760 4.995182 0.250001
+v -34.353226 4.995182 0.250001
+v -34.353226 4.792110 0.031147
+v -34.651760 4.792110 0.031147
+v 40.053959 -1.818073 0.031147
+v -34.651760 7.463371 0.031147
+v -34.353226 7.463371 0.031147
+v 7.948240 7.260300 0.250001
+v -19.648239 8.451532 0.250001
+v 27.834682 2.295517 0.393658
+v 28.485723 0.506794 0.393658
+v 25.168129 9.621813 0.393658
+v 24.517086 11.410536 0.393661
+v 7.051760 -6.852282 0.858133
+v 7.051760 -6.800564 0.873730
+v 35.247566 10.793638 0.250002
+v 36.161556 11.126303 0.250002
+v 36.281654 11.170015 0.393659
+v 24.302807 0.692327 0.031147
+v 24.200703 0.972857 0.031147
+v 19.751760 -2.226894 0.458998
+v -21.351761 -2.324093 0.873730
+v -0.848240 -2.226894 0.458998
+v -2.751760 -2.226894 0.458998
+v -2.751760 -2.324093 0.873730
+v 2.153226 -11.707890 0.031145
+v 14.353226 -9.239700 0.250001
+v 14.651760 -9.239700 0.250001
+v 4.453226 7.463371 0.031147
+v -19.448240 -2.324093 0.873730
+v 35.145462 11.074167 0.250002
+v 34.698627 12.301832 0.250004
+v 34.889454 12.371286 0.031150
+v 9.851760 4.995182 0.250001
+v 9.851760 4.792110 0.031147
+v 24.481251 1.074968 0.031147
+v 24.583357 0.794439 0.031147
+v 14.353226 -12.209516 0.249999
+v 14.353226 -12.006444 0.031145
+v 14.651760 -12.006444 0.031145
+v 14.651760 -12.209516 0.249999
+v -19.648239 3.999435 0.873730
+v -34.413338 7.955885 1.141684
+v -19.448240 -2.348469 0.250001
+v -19.448240 -2.226894 0.458998
+v -19.448240 -6.777466 0.250001
+v -32.748241 7.260300 0.250001
+v -32.748241 7.964998 0.250001
+v 32.817482 9.380816 0.031147
+v 33.301979 9.137640 1.407337
+v 19.751760 -6.306444 0.031147
+v 21.354481 10.259443 0.250001
+v 21.456585 9.978910 0.250001
+v 13.046774 -12.209516 0.249999
+v 12.748240 -12.209516 0.249999
+v -21.053226 -2.835003 0.250001
+v 7.051760 -3.539700 0.250001
+v 7.051760 -3.336628 0.031147
+v 7.051760 -2.348469 0.250001
+v -2.751760 -6.905273 0.393658
+v 17.053226 -3.038074 0.031147
+v 17.351761 -3.038074 0.031147
+v -19.648239 4.022533 0.250001
+v -21.253225 4.290485 0.250001
+v -19.648239 7.964998 0.250001
+v -19.648239 4.995182 0.250001
+v -32.748241 -7.926894 0.458998
+v 12.251760 -22.707890 0.031144
+v -27.748240 -23.006443 0.031144
+v -32.748241 -8.024093 0.873730
+v -32.748241 -12.500565 0.873727
+v 33.098034 9.482927 0.031147
+v -27.251760 -19.024092 0.873727
+v -27.251760 -18.926893 0.458995
+v 14.551760 3.999435 0.873730
+v 12.748240 -12.477466 0.249999
+v 12.748240 -12.605274 0.393655
+v 12.748240 -7.926894 0.458998
+v 12.748240 -8.048468 0.250001
+v 12.748240 -9.239700 0.250001
+v 14.651760 -12.605274 0.393655
+v 29.651760 -19.024092 0.873727
+v 29.413336 -19.145103 1.141681
+v 0.786664 -8.544116 1.141684
+v 2.213336 -8.544116 1.141684
+v -33.142460 -9.110181 1.407337
+v 36.353069 10.667665 0.873730
+v -34.651760 7.260300 0.250001
+v 25.586664 -19.145103 1.141681
+v 4.453226 7.761927 0.031147
+v -33.046776 7.260300 0.250001
+v -33.046776 7.964998 0.250001
+v 19.453226 -3.336628 0.031147
+v -34.353226 7.260300 0.250001
+v 19.751760 -3.336628 0.031147
+v 22.948240 -23.006443 0.031144
+v 23.246775 -23.006443 0.031144
+v 23.246775 -23.209517 0.249998
+v 22.948240 -23.209517 0.249998
+v -27.251760 -19.048468 0.249998
+v -19.648239 7.761927 0.031147
+v 7.948240 -23.209517 0.249998
+v 7.948240 -18.926893 0.458995
+v 7.948240 -19.048468 0.249998
+v 7.948240 -20.036629 0.031144
+v 7.948240 -20.239700 0.249998
+v 24.851761 -20.239700 0.249998
+v 24.553226 -20.239700 0.249998
+v 24.553226 -20.036629 0.031144
+v 24.851761 -20.036629 0.031144
+v -27.251760 -22.504818 0.249998
+v -27.251760 -23.209517 0.249998
+v 29.651760 -20.036629 0.031144
+v -21.351761 -2.226894 0.458998
+v -21.351761 -2.348469 0.250001
+v 3.242460 7.389818 1.407337
+v -21.351761 -2.835003 0.250001
+v -21.351761 -6.777466 0.250001
+v 23.246775 -20.036629 0.031144
+v 22.948240 -20.036629 0.031144
+v -32.986664 -8.544116 1.141684
+v 10.586664 -19.145103 1.141681
+v 37.060425 -2.843662 1.141684
+v 4.751760 -19.024092 0.873727
+v 4.513336 -19.145103 1.141681
+v 4.751760 -23.500565 0.873727
+v -24.951759 4.290485 0.250001
+v -24.653227 4.290485 0.250001
+v 3.046774 -3.336628 0.031147
+v 2.057540 -9.110181 1.407337
+v 0.942460 -9.110181 1.407337
+v 19.751760 -6.852282 0.858133
+v -0.848240 -6.905273 0.393658
+v -32.986664 -8.145103 1.141684
+v 27.013336 -19.145103 1.141681
+v 8.246774 4.290485 0.250001
+v -0.848240 -3.038074 0.031147
+v 14.651760 -12.477466 0.249999
+v 7.948240 7.964998 0.250001
+v 10.646774 -22.707890 0.031144
+v -24.951759 3.999435 0.873730
+v -24.951759 4.022533 0.250001
+v -24.557541 7.389818 1.407337
+v -23.442459 7.389818 1.407337
+v 2.848240 -19.024092 0.873727
+v 3.086664 -19.145103 1.141681
+v 2.848240 -23.500565 0.873727
+v 2.986664 -2.445105 1.141684
+v 14.353226 -8.535003 0.250001
+v 14.651760 -8.535003 0.250001
+v 7.948240 4.290485 0.250001
+v 7.948240 8.451532 0.250001
+v 9.851760 8.451532 0.250001
+v 8.342460 7.389818 1.407337
+v 7.948240 3.999435 0.873730
+v 14.651760 -7.926894 0.458998
+v 14.651760 -8.048468 0.250001
+v 25.048029 9.578100 0.250001
+v 24.396986 11.366823 0.250004
+v 24.553226 -19.738073 0.031144
+v 24.851761 -19.738073 0.031144
+v 19.751760 -6.800564 0.873730
+v 23.585100 10.753630 0.250002
+v 23.482996 11.034159 0.250002
+v 9.851760 -19.024092 0.873727
+v 9.851760 -18.926893 0.458995
+v 20.886131 8.063293 0.250001
+v 20.235088 9.852018 0.250001
+v 22.948240 -20.239700 0.249998
+v 23.246775 -20.239700 0.249998
+v 24.553226 -19.535002 0.249998
+v 24.851761 -19.535002 0.249998
+v 9.851760 -19.048468 0.249998
+v 19.751760 -2.324093 0.873730
+v 4.413336 -2.445105 1.141684
+vn -0.0000 0.0000 -1.0000
+vn 1.0000 0.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 -0.7471 -0.6647
+vn -0.7060 0.0000 0.7082
+vn -0.8626 -0.0000 0.5059
+vn 0.0000 -1.0000 -0.0000
+vn -0.0000 -0.9710 0.2392
+vn 0.0000 0.2043 -0.9789
+vn -0.0001 0.2043 -0.9789
+vn -0.0000 -0.2043 -0.9789
+vn 0.0001 -0.2043 -0.9789
+vn 0.0000 -0.2888 0.9574
+vn 0.0000 -0.2887 0.9574
+vn -0.0001 -0.2887 0.9574
+vn 0.1996 0.0000 0.9799
+vn -0.1996 0.0000 0.9799
+vn 0.0000 0.4248 0.9053
+vn 0.0000 0.9114 0.4116
+vn -0.0000 1.0000 -0.0000
+vn -0.0001 1.0000 -0.0000
+vn -0.0000 -0.5787 -0.8156
+vn -0.0000 -0.8565 -0.5161
+vn -0.0001 -0.5787 -0.8156
+vn 0.0001 -0.8565 -0.5161
+vn 0.0001 0.5787 -0.8156
+vn 0.0000 0.8565 -0.5161
+vn -0.0000 0.5787 -0.8156
+vn -0.3992 -0.1453 0.9053
+vn 0.0000 0.0000 1.0000
+vn -0.0001 0.8565 -0.5161
+vn 0.0000 0.8644 -0.5028
+vn 0.8049 0.2929 -0.5161
+vn 0.8049 0.2930 -0.5161
+vn 0.5438 0.1979 -0.8156
+vn -0.3420 0.9397 0.0000
+vn 0.5438 0.1978 -0.8156
+vn 0.2713 0.0987 0.9574
+vn 0.2713 0.0988 0.9574
+vn 0.2714 0.0987 0.9574
+vn -0.0683 0.1876 0.9799
+vn 0.0683 -0.1876 0.9799
+vn -0.2950 0.8106 0.5059
+vn -0.2415 0.6634 0.7082
+vn -0.1919 -0.0698 -0.9789
+vn -0.1919 -0.0699 -0.9789
+vn 0.1919 0.0698 -0.9789
+vn 0.1919 0.0699 -0.9789
+vn 0.7060 0.0000 0.7082
+vn 0.8626 0.0000 0.5059
+vn -0.5438 -0.1978 -0.8156
+vn -0.8049 -0.2929 -0.5161
+vn -0.8049 -0.2930 -0.5161
+vn -0.5438 -0.1979 -0.8156
+vn 0.9124 0.3321 0.2392
+vn 0.9397 0.3420 -0.0000
+vn -0.5437 -0.1980 -0.8156
+vn 0.2415 -0.6634 0.7082
+vn 0.2950 -0.8106 0.5059
+vn -0.8564 -0.3117 0.4116
+vn -0.9397 -0.3420 0.0000
+vn -0.9397 -0.3419 0.0000
+vn -0.0002 1.0000 -0.0000
+vn 0.9397 0.3421 -0.0000
+vn -0.1919 -0.0700 -0.9789
+vn 0.1919 0.0700 -0.9789
+vn -0.8123 -0.2956 -0.5028
+vn -0.8564 -0.3118 0.4116
+vn 0.0001 1.0000 -0.0000
+vn 0.3420 -0.9397 -0.0000
+vn 0.8049 0.2931 -0.5161
+vn 0.0001 -0.2887 0.9574
+vn 0.0002 1.0000 -0.0000
+vn 0.2715 0.0990 0.9573
+vn 0.7021 0.2555 -0.6647
+vn -0.8049 -0.2928 -0.5161
+vn 0.2710 0.0986 0.9575
+s 1
+f 1//1 2//1 3//1 4//1 5//1 6//1 7//1 8//1 9//1 10//1 11//1 12//1 13//1 14//1 15//1 16//1 17//1 18//1 19//1 20//1
+f 21//2 22//2 23//2 24//2
+f 9//3 25//3 26//3 6//3 5//3 27//3 28//3 2//3 1//3 29//3 30//3 31//3 32//3 33//3 10//3
+f 1//4 20//4 34//4 29//4
+f 35//1 36//1 37//1 38//1 39//1 40//1 41//1 42//1 43//1 44//1 45//1 46//1 47//1 48//1 49//1 50//1 51//1 52//1 53//1 54//1
+f 55//5 56//6 57//6 58//6 59//5
+f 60//7 61//7 62//8 63//8
+f 64//9 65//10 66//11 67//12
+f 68//1 69//1 70//1 71//1 72//1 73//1 74//1 75//1 76//1 77//1 78//1 79//1 80//1 81//1 82//1 83//1 84//1 85//1 86//1 87//1
+f 88//11 89//9 90//9 91//11
+f 13//3 92//3 93//3 14//3
+f 94//3 95//3 96//3 97//3
+f 98//13 99//14 100//15 101//13 102//16 103//17
+f 104//18 105//18 57//18 56//18
+f 106//19 107//19 108//19 109//19 110//20 111//21
+f 112//22 113//23 114//23 115//22
+f 116//19 117//20 118//21 119//19 120//19 121//19
+f 122//13 123//14 124//14 125//13 126//16 127//17
+f 128//11 129//9 130//9 131//11
+f 132//2 133//2 134//2 135//2
+f 136//2 137//2 138//2 139//2 140//2 141//2 142//2 143//2 144//2 145//2 146//2 147//2 148//2 149//2 150//2
+f 151//22 152//24 153//23 154//25
+f 155//26 156//27 157//27 158//28
+f 159//2 4//2 3//2 160//2
+f 161//3 162//3 163//3 164//3 165//3 166//3 167//3 168//3 169//3 170//3 171//3 172//3 173//3 174//3 175//3
+f 176//2 177//2 178//2 179//2 180//2 181//2 182//2 183//2 184//2 185//2 186//2 187//2 188//2 189//2 190//2
+f 191//11 192//9 193//9 194//11
+f 195//23 196//22 182//22 181//23
+f 197//29 198//29 199//29 200//29
+f 201//18 202//18 203//18 204//18
+f 17//3 205//3 206//3 18//3
+f 207//3 208//3 209//3 210//3 211//3 212//3 213//3 214//3 215//3 216//3 99//3 98//3 217//3 218//3 219//3
+f 220//30 221//30 222//30 223//30
+f 224//18 225//18 221//18 220//18
+f 226//28 227//27 228//31 229//28
+f 230//22 231//23 232//23 233//22
+f 234//2 235//2 236//2 237//2 238//2 239//2 240//2 241//2 242//2 243//2 244//2 245//2 246//2 247//2 248//2
+f 249//3 250//3 251//3 252//3
+f 253//2 254//2 255//2 256//2
+f 257//1 258//1 259//1 260//1 261//1 262//1 263//1 264//1 265//1 266//1 267//1 268//1 269//1 270//1 271//1 272//1 273//1 274//1 275//1 276//1
+f 277//29 278//29 279//29 280//29
+f 281//26 276//27 275//27 282//28
+f 283//32 190//32 189//32 284//32
+f 285//33 286//34 287//35 288//35
+f 215//4 289//4 290//4 216//4
+f 291//28 292//27 137//27 136//28
+f 293//14 294//14 295//14 296//14 297//16 298//17
+f 299//23 300//22 301//22 302//23
+f 303//22 304//23 305//23 306//22
+f 307//9 308//10 309//11 310//12
+f 311//23 312//25 313//22 314//22
+f 315//14 316//14 317//14 318//16 319//17 320//14
+f 321//28 322//27 323//27 324//28
+f 325//4 163//4 162//4 326//4
+f 327//1 328//1 329//1 330//1 331//1 332//1 333//1 334//1 335//1 336//1 337//1 338//1 339//1 340//1 341//1 342//1 343//1 344//1 345//1 346//1
+f 347//30 348//30 349//30 350//30
+f 351//3 352//3 353//3 354//3 355//3 356//3 357//3 358//3 359//3 360//3 361//3 362//3 363//3 364//3 365//3
+f 188//1 366//1 367//1 185//1 184//1 368//1 195//1 181//1 180//1 369//1 370//1 371//1 372//1 373//1 374//1 375//1 376//1 377//1 284//1 189//1
+f 378//32 379//32 380//32 381//32
+f 382//7 383//7 384//8 385//8
+f 357//12 356//9 386//10 387//11
+f 388//32 389//32 139//32 138//32
+f 390//30 391//30 392//30 393//30
+f 388//1 138//1 137//1 292//1 394//1 149//1 148//1 395//1 396//1 145//1 144//1 397//1 398//1 399//1 400//1 401//1 402//1 403//1 404//1 405//1
+f 406//30 407//30 408//30 409//30
+f 410//36 285//36 288//36 411//36 412//36 413//36 414//36 415//36 416//36 417//36 418//36 419//36 420//36 421//36 422//36
+f 423//34 424//35 425//37 426//33
+f 427//18 428//18 429//18 430//18
+f 291//3 431//3 394//3 292//3
+f 432//9 433//9 434//11 435//12
+f 436//2 437//2 404//2 403//2
+f 438//18 439//18 440//18 441//18
+f 210//25 209//22 442//22 443//23
+f 444//27 445//27 446//28 447//28
+f 448//19 449//19 450//19 451//20 452//20 453//19
+f 328//4 327//4 454//4 455//4
+f 456//28 457//27 458//27 459//28
+f 460//23 461//22 462//22 463//23
+f 464//35 465//37 466//33 467//34
+f 468//2 469//2 470//2 471//2
+f 472//23 473//25 474//22 475//22
+f 447//9 446//9 476//11 477//12
+f 478//23 479//22 480//22 481//23
+f 482//38 483//39 484//38 485//40 486//41 487//42
+f 199//43 198//43 488//44 489//44 490//43
+f 491//3 492//3 493//3 494//3
+f 495//26 401//27 400//27 496//28
+f 497//45 498//46 499//47 500//48
+f 501//1 502//1 503//1 504//1 505//1 506//1 507//1 508//1 509//1 510//1 511//1 512//1 513//1 514//1 515//1 516//1 517//1 518//1 519//1 520//1
+f 101//49 521//49 392//50 391//50 102//50
+f 522//13 523//14 142//14 141//13 524//16 525//17
+f 526//30 527//30 528//30 529//30
+f 496//2 400//2 399//2 530//2
+f 212//28 211//27 531//27 532//28
+f 533//9 534//9 535//11 536//12
+f 537//35 538//33 539//33 540//35
+f 541//51 542//52 543//53 544//54
+f 545//2 546//2 547//2 548//2 549//2 550//2 551//2 552//2 553//2 554//2 555//2 131//2 130//2 556//2 557//2
+f 558//3 559//3 560//3 561//3
+f 562//55 563//55 564//56 565//56
+f 566//2 567//2 568//2 569//2
+f 570//1 571//1 572//1 573//1 574//1 289//1 215//1 214//1 575//1 531//1 211//1 210//1 443//1 576//1 207//1 219//1 577//1 578//1 249//1 252//1
+f 579//11 580//9 581//9 582//11
+f 196//3 195//3 368//3 583//3
+f 584//11 585//9 586//9 587//11
+f 588//5 522//5 525//6 589//6 590//6
+f 591//33 592//34 593//35 594//35
+f 595//28 596//27 597//27 598//28
+f 599//13 600//14 601//14 602//13 603//16 604//17
+f 605//26 78//27 77//27 606//28
+f 607//22 608//23 609//25 610//22
+f 532//2 531//2 575//2 611//2
+f 612//3 613//3 614//3 615//3
+f 616//4 617//4 618//4 619//4
+f 620//54 621//52 622//53 623//54
+f 624//4 625//4 626//4 627//4
+f 628//3 629//3 630//3 631//3 632//3 633//3 634//3 635//3 636//3 637//3 638//3 639//3 640//3 641//3 642//3
+f 643//17 644//13 645//14 646//14 647//13 648//16
+f 308//2 649//2 650//2 309//2
+f 651//3 652//3 653//3 654//3
+f 655//5 656//5 438//6 441//6 657//6
+f 363//19 658//19 659//19 660//19 661//20 364//20
+f 192//28 662//27 663//27 193//28
+f 664//28 665//27 234//27 248//28
+f 666//2 194//2 193//2 663//2 667//2 110//2 109//2 668//2 669//2 670//2 671//2 672//2 673//2 674//2 675//2
+f 676//2 331//2 330//2 677//2
+f 435//3 273//3 272//3 432//3
+f 678//4 679//4 680//4 681//4
+f 266//2 682//2 683//2 267//2
+f 42//34 684//35 685//35 43//33
+f 686//28 687//27 568//27 567//28
+f 688//3 689//3 610//3 609//3
+f 213//22 611//22 575//23 214//23
+f 690//27 691//27 692//28 693//28
+f 694//28 695//27 469//27 468//28
+f 696//23 697//23 698//22 699//22
+f 360//7 700//7 701//8 361//8
+f 702//50 703//50 704//50 705//49 706//49
+f 595//9 598//9 303//11 306//11
+f 707//9 708//9 709//11 710//11
+f 711//13 712//14 713//14 714//13 715//16 716//17
+f 263//2 262//2 717//2 718//2
+f 442//2 719//2 576//2 443//2
+f 459//2 458//2 720//2 721//2 722//2 723//2 724//2 661//2 660//2 725//2 701//2 700//2 726//2 727//2 728//2
+f 716//18 715//18 729//18 730//18
+f 731//30 732//30 733//30 734//30
+f 280//43 279//43 735//44 736//44 737//43
+f 738//32 739//32 740//32 741//32
+f 742//33 743//34 744//35 745//35
+f 746//57 502//52 501//53 747//54
+f 748//27 749//27 750//28 751//28
+f 93//11 92//9 752//9 753//11
+f 754//50 105//50 104//50 755//49 756//49
+f 757//5 758//5 759//6 760//6 761//6
+f 762//23 763//22 764//22 765//23
+f 766//18 407//18 406//18 767//18
+f 768//3 769//3 770//3 771//3
+f 772//7 670//7 669//8 773//8
+f 476//2 446//2 445//2 774//2
+f 775//54 776//52 412//53 411//54
+f 777//1 778//1 779//1 780//1 781//1 782//1 783//1 784//1 785//1 786//1 787//1 788//1 789//1 790//1 791//1 792//1 423//1 426//1 622//1 621//1
+f 793//33 794//34 795//35 796//35
+f 797//22 798//22 76//23 75//23
+f 799//4 800//4 801//4 802//4
+f 640//7 803//7 804//8 641//8
+f 805//3 806//3 807//3 808//3 300//3 299//3 809//3 810//3 811//3 812//3 813//3 814//3 815//3 816//3 817//3
+f 765//1 799//1 802//1 818//1 819//1 820//1 821//1 822//1 774//1 445//1 444//1 741//1 740//1 823//1 768//1 771//1 824//1 825//1 826//1 762//1
+f 817//28 816//27 827//27 828//28
+f 829//28 395//27 148//27 147//28
+f 830//5 831//5 767//6 406//6 409//6
+f 832//9 833//10 764//11 763//12
+f 834//12 835//9 836//10 837//11
+f 838//36 839//36 840//36 841//36
+f 632//28 631//27 842//27 843//28
+f 759//17 758//13 844//14 845//14 846//13 847//16
+f 848//52 841//53 840//54 849//54
+f 808//9 850//9 301//11 300//11
+f 851//2 820//2 819//2 852//2
+f 826//3 832//3 763//3 762//3
+f 853//32 854//32 855//32 856//32
+f 28//11 27//9 159//9 160//11
+f 857//2 858//2 859//2 860//2 861//2 862//2 384//2 383//2 863//2 472//2 475//2 864//2 865//2 866//2 867//2
+f 868//49 869//50 870//50 871//50 872//49
+f 873//2 874//2 875//2 876//2 877//2 878//2 879//2 880//2 881//2 125//2 124//2 882//2 883//2 884//2 885//2
+f 886//58 887//58 888//59 889//59 890//59
+f 39//36 891//36 892//36 40//36
+f 893//4 894//4 895//4 896//4
+f 897//9 898//9 899//11 900//11
+f 901//9 902//9 903//11 904//11
+f 905//1 906//1 355//1 354//1 907//1 908//1 351//1 365//1 724//1 723//1 909//1 910//1 720//1 458//1 457//1 911//1 727//1 726//1 359//1 358//1
+f 912//60 913//60 914//60 915//60 916//61 917//62
+f 918//3 910//3 909//3 919//3
+f 455//3 920//3 656//3 655//3 921//3 337//3 336//3 922//3 923//3 333//3 332//3 924//3 925//3 329//3 328//3
+f 907//2 926//2 927//2 908//2
+f 901//28 928//27 929//27 902//28
+f 930//28 931//27 932//27 933//28
+f 700//4 360//4 359//4 726//4
+f 934//9 935//9 936//11 937//11
+f 938//34 939//35 940//35 941//33
+f 64//26 942//27 943//27 65//28
+f 944//23 128//22 131//22 555//23
+f 945//27 946//27 947//28 948//28
+f 949//28 268//27 267//27 683//28
+f 950//27 951//27 952//28 953//28
+f 954//51 955//52 956//53 957//54
+f 958//12 959//9 960//10 961//11
+f 962//23 963//25 964//22 965//22
+f 966//17 362//13 361//14 701//14 725//13 967//16
+f 386//2 906//2 905//2 387//2
+f 968//18 966//18 967//18 969//18
+f 970//35 35//33 54//34 971//35
+f 972//27 973//31 974//28 975//28
+f 911//23 976//22 728//22 727//23
+f 977//11 978//9 857//9 867//11
+f 176//49 408//50 407//50 766//50 177//49
+f 979//19 734//19 733//19 980//19 981//20 982//63
+f 115//3 114//3 983//3 984//3
+f 815//1 985//1 986//1 987//1 988//1 989//1 990//1 991//1 478//1 481//1 992//1 809//1 299//1 302//1 993//1 807//1 806//1 994//1 827//1 816//1
+f 230//2 995//2 996//2 231//2
+f 340//27 339//27 997//28 998//28
+f 922//9 999//9 1000//11 923//11
+f 561//28 560//27 1001//27 1002//28
+f 1003//28 1004//27 1005//27 1006//28
+f 61//4 60//4 1007//4 1008//4
+f 41//52 40//53 892//54 1009//54
+f 291//9 136//9 150//11 431//12
+f 97//23 96//22 1010//22 1011//23
+f 476//22 774//23 822//23 477//22
+f 606//2 77//2 76//2 798//2
+f 1012//4 1013//4 1014//4 1015//4
+f 1016//32 118//32 117//32 1017//32
+f 808//28 807//27 993//27 850//28
+f 1007//1 697//1 696//1 1018//1 1019//1 232//1 231//1 996//1 1020//1 853//1 856//1 1021//1 983//1 114//1 113//1 1022//1 1023//1 1024//1 1025//1 1008//1
+f 1026//33 1027//34 1028//35 1029//35
+f 1030//18 1031//18 1032//18 1033//18
+f 1034//9 851//10 852//11 1035//12
+f 629//32 1036//32 1037//32 630//32
+f 1038//7 1039//7 1040//8 1041//8
+f 1042//38 1043//39 417//38 416//39 1044//41 1045//42
+f 1046//35 504//33 503//34 1047//35
+f 919//9 722//9 721//11 918//12
+f 1048//3 1049//3 1050//3 1051//3 1052//3 1053//3 1004//3 1003//3 1054//3 1055//3 1056//3 1057//3 461//3 460//3 1058//3
+f 619//3 1059//3 1060//3 979//3 982//3 1061//3 1062//3 1063//3 1064//3 1065//3 695//3 694//3 1066//3 1067//3 616//3
+f 1068//3 533//3 536//3 1069//3
+f 1070//2 843//2 842//2 1071//2
+f 1072//14 1073//14 1074//13 1075//16 1076//17 1077//13
+f 1078//56 1079//56 1080//55 1081//55
+f 155//9 158//9 1082//11 1083//11
+f 1084//36 1085//36 1086//36 1087//36 1088//36 1089//36 1090//36 1091//36 1092//36 1093//36 1094//36 1095//36 736//36 735//36 1096//36
+f 1097//11 1098//9 1099//9 1100//11
+f 1101//1 1102//1 639//1 638//1 1103//1 1104//1 635//1 634//1 1071//1 842//1 631//1 630//1 1037//1 1105//1 1068//1 1069//1 1106//1 1107//1 612//1 615//1
+f 1108//14 1109//15 755//13 104//16 56//17 55//13
+f 251//11 250//9 1110//9 1111//11
+f 115//11 984//9 1112//10 112//11
+f 226//9 229//9 1113//11 1114//11
+f 1115//48 1116//46 1117//46 1118//48
+f 1119//3 1120//3 261//3 260//3 1121//3 712//3 711//3 453//3 452//3 269//3 268//3 949//3 1122//3 265//3 264//3
+f 1123//60 1124//60 1125//61 1126//61 1127//60 1128//60
+f 1129//38 1130//39 1131//39 1132//39 1133//41 1134//42
+f 1135//17 642//13 641//14 804//14 872//13 871//16
+f 218//32 1136//32 577//32 219//32
+f 684//48 1137//46 1138//46 685//48
+f 26//11 25//9 1139//9 1140//11
+f 1135//18 871//18 870//18 1141//18
+f 1084//64 1096//55 1142//55 1143//56
+f 1144//35 839//35 838//34 1145//34
+f 356//26 355//27 906//27 386//28
+f 1146//2 828//2 827//2 994//2
+f 243//22 242//23 1147//25 1148//22
+f 1149//45 1150//65 1151//48 1152//66
+f 988//23 1153//22 1154//22 989//23
+f 319//18 318//18 1155//18 1156//18
+f 39//33 38//34 1157//35 891//35
+f 835//28 1158//27 1159//27 836//28
+f 92//26 13//27 12//31 752//28
+f 1160//3 1161//3 690//3 693//3
+f 1162//32 880//32 879//32 1163//32
+f 1164//24 1165//23 1166//23 1167//22
+f 1168//2 974//2 973//2 1169//2
+f 832//28 826//27 825//27 833//28
+f 70//3 934//3 937//3 71//3
+f 1170//4 810//4 809//4 992//4
+f 1171//30 1172//30 914//30 913//30
+f 1173//3 1174//3 1167//3 1166//3
+f 170//28 169//27 1175//27 1176//28
+f 1177//27 1178//31 1179//28 1180//28
+f 1181//28 366//27 188//27 187//28
+f 1182//52 1183//53 1184//54 1185//54
+f 1186//22 68//23 87//25 1187//22
+f 1188//4 1189//4 1190//4 1191//4
+f 352//28 351//27 908//27 927//28
+f 1192//11 1193//9 1194//9 1195//11
+f 1196//2 1197//2 1198//2 1199//2
+f 939//48 1200//46 1201//46 940//48
+f 846//49 1202//49 1203//50 1204//50 847//50
+f 615//23 614//22 1205//22 1101//23
+f 1206//23 1207//22 1208//22 1209//23
+f 413//67 1210//67 1211//67 414//67
+f 1158//3 835//3 834//3 1212//3
+f 526//18 1076//18 1075//18 527//18
+f 886//60 890//60 1213//60 1214//68 1215//61 1216//61
+f 1217//5 1218//6 1219//6 1220//6 1221//5
+f 190//20 283//69 830//19 409//19 408//19 176//19
+f 1222//9 1223//9 1224//11 1225//11
+f 167//32 1226//32 1227//32 168//32
+f 1228//7 179//7 178//8 1229//8
+f 1230//7 1231//7 1232//8 1233//8
+f 1234//54 53//52 52//53 1235//54
+f 1236//3 1237//3 1238//3 1239//3
+f 1240//2 1241//2 1176//2 1175//2
+f 1242//28 377//27 376//27 1243//28
+f 751//9 750//9 314//11 313//11
+f 1244//3 1245//3 1246//3 1247//3
+f 506//52 505//53 1248//54 1249//54
+f 1119//28 264//27 263//27 718//28
+f 888//29 1250//29 1251//29 889//29
+f 1252//3 1098//3 1097//3 1253//3
+f 1206//1 1209//1 326//1 162//1 161//1 1254//1 1255//1 173//1 172//1 1240//1 1175//1 169//1 168//1 1227//1 1256//1 1238//1 1237//1 1257//1 323//1 322//1
+f 1258//54 514//52 513//53 1259//54
+f 174//26 173//27 1255//27 1260//28
+f 1121//7 1261//7 713//8 712//8
+f 1121//4 260//4 259//4 1261//4
+f 714//49 450//49 449//50 729//50 715//50
+f 165//13 164//14 1262//14 1263//13 427//16 430//17
+f 1260//2 1255//2 1254//2 1264//2
+f 322//3 321//3 1207//3 1206//3
+f 1265//54 1266//52 1093//53 1092//54
+f 1126//67 1125//67 47//67 46//67
+f 464//48 541//46 544//46 465//48
+f 878//1 1267//1 1268//1 875//1 874//1 1244//1 1247//1 884//1 883//1 1269//1 1270//1 1271//1 943//1 942//1 1272//1 1273//1 1274//1 1275//1 1163//1 879//1
+f 1270//3 1269//3 1276//3 123//3 122//3 1277//3 1162//3 1163//3 1275//3 1278//3 1279//3 1272//3 942//3 64//3 67//3
+f 589//18 525//18 524//18 1280//18
+f 1281//9 1282//9 1283//11 1284//11
+f 186//22 185//23 367//23 1285//22
+f 1286//3 1287//3 1281//3 1284//3 1288//3 1289//3 382//3 385//3 1290//3 1291//3 1292//3 1293//3 1294//3 1295//3 1296//3
+f 432//28 272//27 271//27 433//28
+f 1297//9 674//9 673//11 1298//11
+f 1299//3 1268//3 1267//3 1300//3
+f 1301//2 1302//2 1274//2 1273//2
+f 1295//9 1303//9 1304//11 1296//11
+f 1020//27 996//31 995//28 1305//28
+f 1306//28 1307//27 1308//27 1309//28
+f 1276//4 1269//4 883//4 882//4
+f 1239//28 1238//27 1256//27 1310//28
+f 605//3 797//3 75//3 74//3 1230//3 1233//3 1217//3 1221//3 1311//3 83//3 82//3 897//3 900//3 79//3 78//3
+f 1312//27 1313//27 1223//28 1222//28
+f 1314//23 1315//22 1316//22 1317//23
+f 424//66 620//45 623//46 425//48
+f 358//23 357//22 387//22 905//23
+f 65//2 943//2 1271//2 66//2
+f 126//18 1318//18 1319//18 127//18
+f 795//48 1320//46 1321//46 796//48
+f 1242//9 1243//9 1322//11 1323//12
+f 896//7 895//7 1324//8 1325//8
+f 166//5 165//5 430//6 429//6 1326//6
+f 25//28 9//27 8//31 1139//28
+f 1327//48 1185//46 1184//46 1328//48
+f 1329//23 1330//23 1331//22 1332//22
+f 1333//30 1334//30 1335//30 1336//30
+f 1337//48 1258//45 1259//46 1338//48
+f 344//3 1339//3 1340//3 345//3
+f 1002//2 1001//2 1341//2 1342//2 1343//2 647//2 646//2 678//2 681//2 1344//2 1345//2 1346//2 1347//2 1348//2 1349//2
+f 1350//30 1351//30 1352//30 1353//30
+f 1354//9 1355//9 1356//11 1357//11
+f 520//36 1358//36 747//36 501//36
+f 515//33 1337//35 1338//35 516//34
+f 1359//11 1360//9 134//9 133//11
+f 897//28 82//27 81//27 898//28
+f 1361//11 1362//9 1363//9 1364//11
+f 421//35 420//33 1365//34 1366//35
+f 1367//30 1368//30 1123//30 1128//30
+f 1369//1 1370//1 1371//1 1372//1 1373//1 963//1 962//1 951//1 950//1 1374//1 132//1 135//1 1375//1 1376//1 1377//1 1378//1 1173//1 1166//1 1165//1 1379//1
+f 1380//58 482//58 487//59 1381//59 1382//59
+f 550//49 1383//50 1384//50 1385//50 551//49
+f 1386//36 1387//36 591//36 594//36 1388//36 1389//36 742//36 745//36 1390//36 1391//36 1392//36 1393//36 1394//36 485//36 484//36
+f 1395//60 1396//60 737//60 736//60 1095//61 1397//61
+f 1398//3 1297//3 1298//3 1399//3
+f 760//30 1204//30 1203//30 761//30
+f 1400//30 1384//30 1383//30 1401//30
+f 217//19 393//19 392//19 521//19 1136//20 218//69
+f 396//23 1402//22 146//22 145//23
+f 103//6 390//6 393//6 217//5 98//5
+f 1403//2 1404//2 1405//2 1406//2
+f 625//7 624//7 601//8 600//8
+f 1042//58 1045//59 347//59 350//59 1407//58
+f 1408//28 987//27 986//27 1409//28
+f 1410//50 603//50 602//49 116//49 121//50
+f 18//23 206//22 1411//22 19//23
+f 436//22 403//23 402//23 1412//22
+f 32//19 223//19 222//19 1413//19 1414//20 33//20
+f 1415//25 1225//22 1224//22 1416//23
+f 1055//25 1054//22 1417//22 1418//23
+f 1343//49 1419//50 1420//50 648//50 647//49
+f 1421//30 1422//30 108//30 107//30
+f 1304//22 1423//23 1286//23 1296//22
+f 707//28 1424//27 1425//27 708//28
+f 1426//19 1427//20 1311//20 1221//19 1220//19 1428//19
+f 731//18 1429//18 1430//18 732//18
+f 1431//23 494//25 493//22 1432//22
+f 1433//26 1434//27 24//31 23//28
+f 441//30 440//30 1435//30 657//30
+f 140//49 1436//50 1280//50 524//50 141//49
+f 1437//2 1438//2 463//2 462//2
+f 457//3 456//3 976//3 911//3
+f 1439//5 202//6 201//6 1440//6 1441//5
+f 1442//3 1443//3 1444//3 1445//3 1446//3 1447//3 1448//3 1449//3 1312//3 1222//3 1225//3 1415//3 1450//3 1451//3 1452//3
+f 805//22 1146//22 994//23 806//23
+f 191//22 194//22 666//23 1453//23
+f 344//27 343//27 1454//28 1339//28
+f 1291//19 1455//19 1456//19 861//19 860//20 1292//20
+f 1219//30 1457//30 1428//30 1220//30
+f 1019//27 1018//31 1458//28 1459//28
+f 1374//23 1359//22 133//22 132//23
+f 423//70 792//70 1116//70 1115//70 789//70 788//70 564//70 563//70 887//70 886//70 1216//70 777//70 621//70 620//70 424//70
+f 1190//7 1189//7 1073//8 1072//8
+f 1460//33 1461//34 1462//35 1463//37
+f 1464//5 1077//5 1076//6 526//6 529//6
+f 1465//49 1466//50 1155//50 318//50 317//49
+f 240//4 1451//4 1450//4 241//4
+f 1147//1 242//1 241//1 1450//1 1415//1 1416//1 1313//1 1312//1 1449//1 1467//1 1468//1 1446//1 1445//1 235//1 234//1 665//1 1469//1 246//1 245//1 1470//1
+f 790//33 789//71 1115//35 1118//35
+f 383//4 382//4 1289//4 863//4
+f 111//32 110//32 667//32 1471//32
+f 1447//28 1446//27 1468//27 1472//28
+f 1268//23 1299//22 876//22 875//23
+f 1473//3 257//3 276//3 281//3
+f 818//3 802//3 801//3 844//3 758//3 757//3 738//3 741//3 444//3 447//3 477//3 822//3 821//3 1034//3 1035//3
+f 1474//17 1442//14 1452//14 239//72 238//14 1475//16
+f 1474//18 1475//18 1476//18 1477//18
+f 1478//28 1479//27 1480//27 1481//28
+f 1337//70 515//70 514//70 1258//70
+f 6//25 26//22 1140//24 7//23
+f 1482//11 1483//9 1484//9 1485//11
+f 559//23 558//22 1349//22 1348//23
+f 489//68 1486//61 1487//61 1488//60 1489//60 490//60
+f 206//11 205//9 1490//9 1411//11
+f 1181//9 187//9 186//11 1285//12
+f 1491//28 1492//27 1493//31 1494//28
+f 1495//27 1496//31 586//28 585//28
+f 1497//26 1498//27 1499//27 1500//28
+f 1501//23 1502//25 904//22 903//22
+f 1100//22 1503//23 1253//23 1097//22
+f 1212//23 834//22 837//22 1504//23
+f 1505//22 1506//23 1507//25 1508//22
+f 1509//28 1510//27 1511//27 1512//28
+f 1252//27 1513//31 1099//28 1098//28
+f 721//22 720//23 910//23 918//22
+f 370//23 958//22 961//22 371//23
+f 971//48 1234//46 1235//46 970//48
+f 1068//27 1105//27 534//28 533//28
+f 510//70 1514//70 1515//70 511//70
+f 610//11 689//9 1516//9 607//11
+f 27//26 5//27 4//27 159//28
+f 686//9 567//9 566//11 1517//12
+f 1518//23 1517//22 566//22 569//23
+f 1519//3 1520//3 945//3 948//3
+f 926//22 907//23 354//23 353//22
+f 1038//3 1041//3 1439//3 1441//3 1521//3 1522//3 1523//3 1524//3 1525//3 1526//3 1495//3 585//3 584//3 1527//3 1528//3
+f 1156//30 1155//30 1466//30 1529//30
+f 143//7 142//8 523//8 1530//7
+f 1531//11 1532//9 1197//9 1196//11
+f 1354//26 1023//27 1022//27 1355//28
+f 14//25 93//22 753//24 15//23
+f 350//60 349//60 415//60 414//61 1211//61 1407//60
+f 1170//7 1533//8 811//8 810//7
+f 936//22 72//23 71//25 937//22
+f 34//7 1534//8 30//8 29//7
+f 247//22 246//23 1469//25 1535//22
+f 1536//7 1537//7 295//8 294//8
+f 1217//14 1233//14 1232//14 1538//14 1539//16 1218//17
+f 7//2 1140//2 1139//2 8//2
+f 1540//30 1420//30 1419//30 1541//30
+f 1423//2 1304//2 1303//2 1542//2
+f 765//2 764//2 833//2 825//2 824//2 1543//2 1544//2 823//2 740//2 739//2 1202//2 846//2 845//2 800//2 799//2
+f 1218//18 1539//18 1457//18 1219//18
+f 912//58 1545//58 1546//59 1171//59 913//59
+f 1547//30 703//30 702//30 1548//30
+f 580//28 572//27 571//31 581//28
+f 1549//33 1550//34 1327//35 1328//35
+f 782//36 1151//36 1150//36 779//36 778//36 1215//36 1214//36 1551//36 562//36 565//36 787//36 786//36 1552//36 1553//36 783//36
+f 1440//19 1554//19 1555//19 1556//20 1521//73 1441//19
+f 1557//28 405//27 404//27 437//28
+f 1063//9 1405//9 1404//11 1064//11
+f 1558//14 1559//14 1560//13 1561//16 1562//17 1563//13
+f 1152//70 781//70 780//70 1149//70
+f 1564//1 1392//1 1391//1 1565//1 743//1 742//1 1389//1 1566//1 592//1 591//1 1387//1 1567//1 1027//1 1026//1 1568//1 1569//1 1145//1 838//1 841//1 848//1
+f 1393//61 1570//62 1380//60 1382//60 1571//60 1394//68
+f 425//36 623//36 622//36 426//36
+f 1572//52 1573//53 498//54 497//54
+f 1574//38 1575//39 1576//38 488//74 198//41 197//42
+f 163//7 325//7 1262//8 164//8
+f 1577//9 1578//9 480//11 479//11
+f 1579//28 1580//27 1581//27 1582//28
+f 565//75 564//75 788//75 787//75
+f 1525//11 1524//9 254//9 253//11
+f 398//23 1583//22 530//22 399//23
+f 1584//27 858//31 857//28 978//26
+f 944//1 555//1 554//1 1058//1 460//1 463//1 1438//1 1056//1 1055//1 1418//1 1005//1 1004//1 1053//1 548//1 547//1 1585//1 1586//1 557//1 556//1 1587//1
+f 1485//22 1588//23 1589//23 1482//22
+f 746//45 747//46 1358//48 1590//48
+f 812//5 1591//6 1592//6 1593//6 813//5
+f 520//33 519//34 1590//35 1358//35
+f 1594//19 1548//19 702//19 706//19 1595//20 1596//63
+f 390//18 103//18 102//18 391//18
+f 397//4 144//4 143//4 1530//4
+f 1597//52 1598//53 1599//54 1600//54
+f 1601//54 1569//52 1568//53 1602//54
+f 1603//70 1604//70 785//70 784//70
+f 1605//48 1265//46 1092//46 1091//48
+f 889//30 1251//30 1213//30 890//30
+f 1397//67 1095//67 1094//67 1606//67
+f 958//3 370//3 369//3 1228//3 1229//3 831//3 830//3 283//3 284//3 377//3 1242//3 1323//3 374//3 373//3 959//3
+f 744//70 743//70 1565//70 1607//70
+f 1600//70 1462//70 1461//70 1608//70 1143//70 1142//70 1609//70 1395//70 1397//70 1606//70 1610//70 1611//70 1612//70 1613//70 1597//70
+f 790//36 1118//36 1117//36 791//36
+f 1386//64 484//55 483//55 1614//56
+f 1615//23 1161//23 1160//22 1616//22
+f 1617//36 1618//36 1619//36 1620//36
+f 983//27 1021//27 1112//28 984//28
+f 1621//2 709//2 708//2 1425//2
+f 1606//1 1094//1 1093//1 1266//1 1622//1 1090//1 1089//1 1623//1 1624//1 1086//1 1085//1 1608//1 1461//1 1460//1 1598//1 1597//1 1613//1 1617//1 1620//1 1610//1
+f 1084//75 1143//75 1608//75 1085//75
+f 1611//54 1610//52 1620//53 1619//54
+f 535//22 1106//23 1069//23 536//22
+f 1289//1 1288//1 1625//1 1626//1 1287//1 1286//1 1423//1 1542//1 1294//1 1293//1 859//1 858//1 1584//1 1627//1 866//1 865//1 1628//1 473//1 472//1 863//1
+f 1629//23 1630//22 1631//22 1632//23
+f 1633//28 1470//27 245//27 244//28
+f 1369//3 1193//3 1192//3 1370//3
+f 1301//22 1273//23 1272//23 1279//22
+f 1634//9 1635//9 1636//11 1637//11
+f 1599//36 1598//36 1460//36 1463//36
+f 1638//70 1639//70 1624//70 1623//70
+f 917//67 916//67 508//67 507//67
+f 73//4 1231//4 1230//4 74//4
+f 369//4 180//4 179//4 1228//4
+f 1408//9 1409//9 1154//11 1153//11
+f 1640//27 1641//31 90//28 89//28
+f 482//70 1380//70 1570//70 1564//70 848//70 849//70 1144//70 1145//70 1569//70 1601//70 1028//70 1027//70 1567//70 1614//70 483//70
+f 637//22 1642//22 1103//23 638//23
+f 1643//19 1353//19 1352//19 1644//19 379//20 378//73
+f 1645//11 1433//9 23//9 22//11
+f 1646//27 1647//31 1648//28 1649//28
+f 693//9 692//9 1616//11 1160//12
+f 919//28 909//27 723//27 722//28
+f 1650//46 1388//46 594//48 593//48
+f 1651//11 1180//9 1179//9 1652//11
+f 1570//67 1393//67 1392//67 1564//67
+f 1653//25 1531//22 1196//22 1199//23
+f 349//43 348//43 1044//43 416//44 415//44
+f 205//26 17//27 16//27 1490//28
+f 1521//32 1556//32 1654//32 1522//32
+f 1655//56 1131//55 1130//55 1656//56
+f 1644//49 1352//50 1351//50 1561//50 1560//49
+f 1657//56 1658//56 1576//55 1575//55
+f 1120//12 1119//9 718//10 717//11
+f 175//12 174//9 1260//10 1264//11
+f 570//2 1111//2 1110//2 578//2 577//2 1136//2 521//2 101//2 100//2 290//2 289//2 574//2 582//2 581//2 571//2
+f 1602//36 1568//36 1026//36 1029//36
+f 1566//70 1650//70 593//70 592//70
+f 1060//14 1059//14 1659//14 1660//14 1430//16 1429//17
+f 652//26 651//27 1347//27 1346//28
+f 1051//19 1401//19 1383//19 550//19 549//20 1052//21
+f 1407//70 1211//70 1210//70 1182//70 1185//70 1327//70 1550//70 1661//70 1320//70 795//70 794//70 1662//70 1663//70 1043//70 1042//70
+f 1034//26 821//27 820//27 851//28
+f 1583//12 495//9 496//10 530//11
+f 1664//51 49//52 48//53 1665//54
+f 921//32 1666//32 338//32 337//32
+f 817//9 828//9 1146//11 805//11
+f 924//9 676//9 677//11 925//11
+f 1478//9 1481//9 1316//11 1315//11
+f 1451//7 240//7 239//8 1452//8
+f 298//6 1333//6 1336//6 1667//5 293//5
+f 1549//36 1328//36 1184//36 1183//36
+f 1529//19 1466//19 1465//19 1668//20 1669//69 1670//19
+f 1062//27 1406//27 1405//28 1063//26
+f 1663//75 1662//75 419//75 418//75
+f 1207//12 321//9 324//10 1208//11
+f 474//11 1671//9 864//9 475//11
+f 1643//5 1563//5 1562//6 1350//6 1353//6
+f 1672//23 1637//22 1636//22 1673//23
+f 887//38 563//39 562//38 1551//40 1250//41 888//42
+f 1241//22 1240//23 172//23 171//22
+f 1586//25 1674//22 545//22 557//23
+f 1276//7 882//7 124//8 123//8
+f 1675//49 1335//50 1334//50 297//50 296//49
+f 1012//7 1015//7 1559//8 1558//8
+f 540//48 954//45 957//46 537//48
+f 583//28 368//27 184//27 183//28
+f 793//36 796//36 1321//36 1676//36
+f 1677//70 1678//70 1366//70 1365//70
+f 278//42 1609//38 1142//39 1096//38 735//39 279//41
+f 1376//32 1669//32 1668//32 1377//32
+f 1605//70 1622//70 1266//70 1265//70
+f 95//28 94//27 1679//27 1680//28
+f 1681//35 51//33 50//34 1682//35
+f 648//18 1420//18 1540//18 643//18
+f 652//9 1346//10 1345//11 653//12
+f 1288//25 1284//22 1283//22 1625//23
+f 504//36 1046//36 1248//36 505//36
+f 1229//14 178//14 177//13 766//16 767//17 831//13
+f 298//18 297//18 1334//18 1333//18
+f 1683//25 1684//22 1685//22 1686//23
+f 1554//50 204//50 203//50 1687//49 1555//49
+f 517//75 1079//75 1078//75 518//75
+f 1297//26 1398//27 675//27 674//28
+f 1650//54 1566//53 1389//53 1388//54
+f 470//23 1067//23 1066//22 471//22
+f 1399//25 1298//22 673//22 672//23
+f 1120//22 717//22 262//23 261//23
+f 1688//30 1410//30 121//30 120//30
+f 1127//58 1129//58 1134//59 1367//59 1128//59
+f 598//2 597//2 311//2 314//2 750//2 749//2 1689//2 1690//2 1675//2 296//2 295//2 1537//2 1691//2 304//2 303//2
+f 161//23 175//22 1264//22 1254//23
+f 624//2 627//2 1503//2 1100//2 1099//2 1513//2 1692//2 1364//2 1363//2 1693//2 1017//2 117//2 116//2 602//2 601//2
+f 200//30 199//30 490//30 1489//30
+f 1367//29 1134//29 1133//29 1368//29
+f 589//30 1280//30 1436//30 590//30
+f 1369//27 1379//27 1194//28 1193//26
+f 1003//9 1006//9 1417//11 1054//11
+f 96//11 95//9 1680//9 1010//11
+f 510//52 509//76 1694//54 1514//54
+f 1171//29 1546//29 1695//29 1172//29
+f 1339//9 1454//9 1696//11 1340//11
+f 1697//33 1698//34 500//35 499//35
+f 1682//48 1664//46 1665//46 1681//48
+f 1655//75 1656//75 37//75 36//75
+f 1114//22 1113//22 1699//23 1700//25
+f 1485//2 1484//2 1701//2 1588//2
+f 1512//2 1511//2 1702//2 1703//2 947//2 946//2 1704//2 981//2 980//2 1660//2 1659//2 618//2 617//2 1506//2 1505//2
+f 1552//35 786//33 785//34 1604//35
+f 1181//3 1285//3 367//3 366//3
+f 1322//2 1243//2 376//2 375//2
+f 698//11 1459//9 1458//9 699//11
+f 1374//3 950//3 953//3 964//3 963//3 1373//3 1705//3 315//3 320//3 1670//3 1669//3 1376//3 1375//3 1360//3 1359//3
+f 1577//28 991//27 990//27 1578//28
+f 1116//51 792//52 791//53 1117//54
+f 1187//11 1706//9 1707//9 1186//11
+f 688//1 609//1 608//1 1708//1 1528//1 1527//1 1709//1 1496//1 1495//1 1526//1 256//1 255//1 1523//1 1522//1 1654//1 1710//1 491//1 494//1 1431//1 1711//1
+f 814//32 1712//32 985//32 815//32
+f 868//2 872//2 804//2 803//2 1102//2 1101//2 1205//2 1713//2 1107//2 1106//2 535//2 534//2 1105//2 1037//2 1036//2
+f 233//11 1305//9 995//9 230//11
+f 714//2 713//2 1261//2 259//2 258//2 1714//2 282//2 275//2 274//2 434//2 433//2 271//2 270//2 451//2 450//2
+f 990//2 989//2 1154//2 1409//2 986//2 985//2 1712//2 1715//2 1716//2 1533//2 1170//2 992//2 481//2 480//2 1578//2
+f 1514//46 1694//65 1717//48 1515//48
+f 28//22 160//22 3//23 2//23
+f 139//20 389//69 588//19 590//19 1436//19 140//19
+f 1510//3 1509//3 1508//3 1507//3
+f 1718//19 1541//19 1419//19 1343//19 1342//20 1719//21
+f 948//9 947//9 1703//11 1519//11
+f 1720//49 1413//49 222//50 221//50 225//50
+f 287//48 775//46 411//65 288//47
+f 1429//6 731//6 734//6 979//5 1060//5
+f 226//3 1114//3 1700//3 1721//3 1722//3 1108//3 55//3 59//3 1723//3 1724//3 1424//3 707//3 710//3 1725//3 227//3
+f 1152//35 1151//37 782//33 781//34
+f 197//59 200//59 1489//59 1488//58 1574//58
+f 67//22 66//22 1271//23 1270//23
+f 277//30 280//30 737//30 1396//30
+f 1726//7 1109//8 1108//8 1722//7
+f 1727//49 1728//50 428//50 427//50 1263//49
+f 1729//30 1730//30 1456//30 1455//30
+f 811//14 1533//14 1716//13 1731//16 1591//17 812//13
+f 1172//43 1695//43 1732//44 915//44 914//43
+f 302//2 301//2 850//2 993//2
+f 991//3 1577//3 479//3 478//3
+f 1677//52 410//53 422//54 1678//54
+f 364//32 661//32 724//32 365//32
+f 1039//4 1038//4 1528//4 1708//4
+f 1651//3 1733//3 1646//3 1649//3 1331//3 1330//3 626//3 625//3 600//3 599//3 119//3 118//3 1016//3 1177//3 1180//3
+f 1277//5 122//5 127//6 1319//6 1734//6
+f 759//18 847//18 1204//18 760//18
+f 1674//11 1735//9 546//9 545//11
+f 79//23 900//22 899//24 80//23
+f 1362//3 1361//3 1736//3 1737//3
+f 1738//3 341//3 340//3 998//3
+f 1739//2 1652//2 1179//2 1178//2
+f 614//12 613//9 1713//10 1205//11
+f 1740//22 342//23 341//23 1738//22
+f 1137//70 684//70 42//70 41//70 1009//70 1157//70 38//70 37//70 1656//70 1130//70 1129//70 1127//70 1126//70 46//70 45//70
+f 953//9 952//9 965//11 964//11
+f 1057//9 1437//9 462//11 461//11
+f 1741//22 1742//22 1743//23 1744//23
+f 1719//32 1342//32 1341//32 1745//32
+f 491//27 1710//31 1746//28 492//28
+f 1645//3 1747//3 1191//3 1190//3 1072//3 1077//3 1464//3 1748//3 1749//3 972//3 975//3 1750//3 1751//3 1434//3 1433//3
+f 1111//22 570//23 252//23 251//22
+f 1752//23 1753//23 1754//22 1755//22
+f 1647//2 1329//2 1332//2 1648//2
+f 209//11 208//9 719//9 442//11
+f 1688//18 604//18 603//18 1410//18
+f 332//27 331//27 676//28 924//28
+f 285//1 410//1 1677//1 1365//1 420//1 419//1 1662//1 794//1 793//1 1676//1 1661//1 1550//1 1549//1 1183//1 1182//1 1210//1 413//1 412//1 776//1 286//1
+f 307//26 1756//27 649//27 308//28
+f 1157//48 1009//46 892//46 891//48
+f 70//27 69//27 935//28 934//28
+f 33//32 1414//32 11//32 10//32
+f 1692//1 1513//1 1252//1 1253//1 1503//1 627//1 626//1 1330//1 1329//1 1647//1 1646//1 1733//1 1739//1 1178//1 1177//1 1016//1 1017//1 1693//1 1737//1 1736//1
+f 654//1 1344//1 681//1 680//1 1757//1 650//1 649//1 1756//1 1518//1 569//1 568//1 687//1 1745//1 1341//1 1001//1 560//1 559//1 1348//1 1347//1 651//1
+f 1052//32 549//32 548//32 1053//32
+f 1310//2 1256//2 1227//2 1226//2 1727//2 1263//2 1262//2 325//2 326//2 1209//2 1208//2 324//2 323//2 1257//2 1758//2
+f 982//32 981//32 1704//32 1061//32
+f 1759//32 1690//32 1689//32 1760//32
+f 751//3 313//3 312//3 748//3
+f 1050//13 1049//14 552//14 551//13 1385//16 1761//17
+f 1536//3 294//3 293//3 1667//3 1759//3 1760//3 1762//3 1483//3 1482//3 1589//3 928//3 901//3 904//3 1502//3 1763//3
+f 1601//45 1602//46 1029//48 1028//48
+f 336//27 335//27 999//28 922//28
+f 1579//9 1582//9 1764//11 1765//12
+f 1592//18 1591//18 1731//18 1766//18
+f 1080//36 1079//36 517//36 516//36 1338//36 1259//36 513//36 512//36 1717//36 1694//36 509//36 508//36 916//36 915//36 1732//36
+f 1497//9 1500//10 1742//11 1741//12
+f 1402//3 396//3 395//3 829//3
+f 1661//52 1676//76 1321//54 1320//54
+f 1767//6 628//5 642//5 1135//6 1141//6
+f 1381//29 487//29 486//29 1768//29
+f 1769//49 1770//50 1032//50 1031//50 1771//49
+f 374//23 1323//22 1322//22 375//23
+f 1772//25 1083//22 1082//22 1773//23
+f 1000//22 334//23 333//25 923//22
+f 1449//25 1448//22 1774//22 1467//23
+f 1247//23 1246//22 885//22 884//23
+f 1290//13 385//14 384//14 862//13 1775//16 1776//17
+f 265//23 1122//22 682//22 266//23
+f 1470//3 1633//3 1148//3 1147//3
+f 455//7 454//7 1777//8 920//8
+f 1024//23 1357//22 1356//22 1025//23
+f 1705//7 1778//7 316//8 315//8
+f 801//7 800//7 845//8 844//8
+f 1592//30 1766//30 1779//30 1593//30
+f 1692//23 1736//25 1361//22 1364//22
+f 929//1 928//1 1589//1 1588//1 1701//1 1762//1 1760//1 1689//1 749//1 748//1 312//1 311//1 597//1 596//1 305//1 304//1 1691//1 1763//1 1502//1 1501//1
+f 1628//27 865//27 864//28 1671//28
+f 1768//43 486//43 485//44 1394//44 1571//43
+f 1319//30 1318//30 1780//30 1734//30
+f 448//6 453//5 711//5 716//6 730//6
+f 100//8 99//8 216//7 290//7
+f 90//2 1641//2 1781//2 91//2
+f 170//9 1176//9 1241//11 171//12
+f 1277//19 1734//19 1780//19 881//19 880//20 1162//73
+f 1538//2 1232//2 1231//2 73//2 72//2 936//2 935//2 69//2 68//2 1186//2 1707//2 85//2 84//2 1427//2 1426//2
+f 1743//2 1742//2 1500//2 1499//2
+f 664//3 1535//3 1469//3 665//3
+f 80//2 899//2 898//2 81//2
+f 1417//2 1006//2 1005//2 1418//2
+f 1645//22 22//22 21//23 1747//23
+f 1174//9 1782//9 1164//11 1167//11
+f 192//3 191//3 1453//3 662//3
+f 1726//4 1722//4 1721//4 1783//4
+f 1784//27 1198//31 1197//28 1532//28
+f 158//2 157//2 1773//2 1082//2
+f 596//3 595//3 306//3 305//3
+f 1103//2 1642//2 1785//2 1104//2
+f 34//2 20//2 19//2 1411//2 1490//2 16//2 15//2 753//2 752//2 12//2 11//2 1414//2 1413//2 1720//2 1534//2
+f 1771//2 62//2 61//2 1008//2 1025//2 1356//2 1355//2 1022//2 113//2 112//2 1112//2 1021//2 856//2 855//2 1769//2
+f 772//3 773//3 1786//3 106//3 111//3 1471//3 1479//3 1478//3 1315//3 1314//3 156//3 155//3 1083//3 1772//3 1787//3
+f 1306//9 1309//10 1631//11 1630//12
+f 201//30 204//30 1554//30 1440//30
+f 1788//17 1786//13 773//14 669//14 668//13 1789//16
+f 634//23 633//22 1070//22 1071//23
+f 1790//19 1791//19 1770//19 1769//19 855//20 854//21
+f 1448//11 1447//9 1472//9 1774//11
+f 1788//18 1789//18 1422//18 1421//18
+f 867//22 866//23 1627//23 977//22
+f 1292//32 860//32 859//32 1293//32
+f 1350//18 1562//18 1561//18 1351//18
+f 196//12 583//9 183//10 182//11
+f 1718//3 1719//3 1745//3 687//3 686//3 1517//3 1518//3 1756//3 307//3 310//3 1757//3 680//3 679//3 645//3 644//3
+f 1678//46 422//46 421//48 1366//48
+f 1538//49 1426//49 1428//50 1457//50 1539//50
+f 1381//30 1768//30 1571//30 1382//30
+f 1584//3 978//3 977//3 1627//3
+f 1195//24 1371//23 1370//23 1192//22
+f 257//23 1473//22 1714//22 258//23
+f 1467//2 1774//2 1472//2 1468//2
+f 57//30 105//30 754//30 58//30
+f 902//2 929//2 1501//2 903//2
+f 232//3 1019//3 1459//3 698//3 697//3 1007//3 60//3 63//3 1792//3 1790//3 854//3 853//3 1020//3 1305//3 233//3
+f 959//26 373//27 372//27 960//28
+f 637//12 636//9 1785//10 1642//11
+f 1474//6 1477//6 1793//6 1443//5 1442//5
+f 679//7 678//7 646//8 645//8
+f 1291//5 1290//5 1776//6 1729//6 1455//6
+f 346//23 345//25 1340//22 1696//22
+f 273//23 435//22 434//22 274//23
+f 1794//27 1795//31 1635//28 1634//28
+f 106//5 1786//5 1788//6 1421//6 107//6
+f 912//70 917//70 507//70 506//70 1249//70 1047//70 503//70 502//70 746//70 1590//70 519//70 518//70 1078//70 1081//70 1545//70
+f 1709//23 1527//23 584//22 587//22
+f 1739//23 1733//25 1651//22 1652//22
+f 1718//5 644//5 643//6 1540//6 1541//6
+f 1492//1 154//1 153//1 1679//1 94//1 97//1 1011//1 894//1 893//1 1796//1 1781//1 1641//1 1640//1 1653//1 1199//1 1198//1 1784//1 1797//1 1798//1 1493//1
+f 1799//6 1547//6 1548//6 1594//5 1800//5
+f 1173//27 1378//31 1782//28 1174//28
+f 632//9 843//9 1070//11 633//12
+f 1625//2 1283//2 1282//2 1626//2
+f 1628//3 1671//3 474//3 473//3
+f 452//32 451//32 270//32 269//32
+f 1776//18 1775//18 1730//18 1729//18
+f 1796//23 88//22 91//22 1781//23
+f 1723//32 1801//32 1802//32 1724//32
+f 1724//1 1802//1 1795//1 1794//1 1672//1 1673//1 932//1 931//1 1683//1 1686//1 1783//1 1721//1 1700//1 1699//1 228//1 227//1 1725//1 1621//1 1425//1 1424//1
+f 1658//75 1657//75 1803//75 1804//75
+f 1635//2 1795//2 1802//2 1801//2 756//2 755//2 1109//2 1726//2 1783//2 1686//2 1685//2 933//2 932//2 1673//2 1636//2
+f 572//3 580//3 579//3 573//3
+f 1587//3 129//3 128//3 944//3
+f 1728//19 1727//19 1226//20 167//20 166//19 1326//19
+f 30//14 1534//14 1720//13 225//16 224//17 31//13
+f 1663//56 418//56 417//55 1043//55
+f 1805//9 1806//9 1755//11 1754//12
+f 656//14 920//14 1777//15 1807//14 439//16 438//17
+f 619//7 618//7 1659//8 1059//8
+f 1637//3 1672//3 1794//3 1634//3
+f 1223//2 1313//2 1416//2 1224//2
+f 694//9 468//9 471//11 1066//11
+f 1311//32 1427//32 84//32 83//32
+f 1667//19 1336//19 1335//19 1675//19 1690//20 1759//21
+f 849//46 840//46 839//48 1144//48
+f 881//49 1780//50 1318//50 126//50 125//49
+f 1132//44 1124//44 1123//43 1368//43 1133//43
+f 1281//28 1287//27 1626//31 1282//28
+f 1200//51 1808//52 1809//53 1201//54
+f 1603//54 784//52 783//53 1553//54
+f 1300//9 877//9 876//11 1299//12
+f 1464//19 529//19 528//19 1810//19 1811//20 1748//20
+f 310//22 309//22 650//23 1757//23
+f 512//34 511//34 1515//35 1717//35
+f 696//2 699//2 1458//2 1018//2
+f 1699//2 1113//2 229//2 228//2
+f 733//50 732//50 1430//50 1660//49 980//49
+f 931//3 930//3 1684//3 1683//3
+f 1378//2 1377//2 1668//2 1465//2 317//2 316//2 1778//2 1372//2 1371//2 1195//2 1194//2 1379//2 1165//2 1164//2 1782//2
+f 1738//11 998//9 997//9 1740//11
+f 1812//67 1487//67 1486//67 1813//67
+f 605//9 606//9 798//11 797//11
+f 968//30 969//30 659//30 658//30
+f 334//2 1000//2 999//2 335//2
+f 223//6 32//5 31//5 224//6 220//6
+f 1618//35 1617//33 1613//34 1612//35
+f 493//11 492//9 1746//9 1432//11
+f 1814//23 1765//22 1764//22 1815//23
+f 1462//48 1600//46 1599//46 1463//48
+f 1486//36 489//36 488//36 1576//36 1658//36 1804//36 941//36 940//36 1201//36 1809//36 1697//36 499//36 498//36 1573//36 1813//36
+f 1102//4 803//4 640//4 639//4
+f 500//70 1698//70 1572//70 497//70
+f 538//36 537//36 957//36 956//36
+f 824//23 771//23 770//22 1543//22
+f 86//27 85//27 1707//28 1706//28
+f 1087//35 1086//33 1624//34 1639//35
+f 868//19 1036//20 629//20 628//19 1767//19 869//19
+f 1805//28 1816//27 1817//27 1806//28
+f 1187//3 87//3 86//3 1706//3
+f 1535//11 664//9 248//9 247//11
+f 1168//22 1169//23 1751//25 1750//22
+f 1818//32 1749//32 1748//32 1811//32
+f 1670//5 320//5 319//6 1156//6 1529//6
+f 636//28 635//27 1104//27 1785//28
+f 1607//54 1565//52 1391//53 1390//54
+f 538//1 956//1 955//1 1812//1 1813//1 1573//1 1572//1 1698//1 1697//1 1809//1 1808//1 938//1 941//1 1804//1 1803//1 467//1 466//1 543//1 542//1 539//1
+f 952//2 951//2 962//2 965//2
+f 1057//28 1056//27 1438//27 1437//28
+f 544//36 543//36 466//36 465//36
+f 599//5 604//6 1688//6 120//6 119//5
+f 1808//70 1200//70 939//70 938//70
+f 819//23 818//23 1035//22 852//22
+f 659//50 969//50 967//50 725//49 660//49
+f 1124//36 1132//36 1131//36 1655//36 36//36 35//36 970//36 1235//36 52//36 51//36 1681//36 1665//36 48//36 47//36 1125//36
+f 1216//67 1215//67 778//67 777//67
+f 50//70 49//70 1664//70 1682//70
+f 685//36 1138//36 44//36 43//36
+f 1090//33 1622//34 1605//35 1091//37
+f 1141//30 870//30 869//30 1767//30
+f 1758//22 1257//23 1237//23 1236//22
+f 1551//44 1214//44 1213//43 1251//43 1250//43
+f 1295//28 1294//27 1542//27 1303//28
+f 655//19 657//19 1435//19 1819//19 1666//20 921//20
+f 1278//9 1302//9 1301//11 1279//12
+f 561//9 1002//9 1349//11 558//12
+f 278//59 277//59 1396//59 1395//58 1609//58
+f 59//19 58//19 754//19 756//19 1801//20 1723//20
+f 769//9 1544//9 1543//11 770//12
+f 1234//70 971//70 54//70 53//70
+f 930//9 933//9 1685//11 1684//11
+f 1715//49 1779//50 1766//50 1731//50 1716//49
+f 1612//48 1611//46 1619//46 1618//48
+f 1585//3 1735//3 1674//3 1586//3
+f 1725//25 710//22 709//22 1621//23
+f 1188//1 1191//1 1747//1 21//1 24//1 1434//1 1751//1 1169//1 973//1 972//1 1749//1 1818//1 691//1 690//1 1161//1 1615//1 1159//1 1158//1 1212//1 1504//1
+f 1603//46 1553//46 1552//48 1604//48
+f 1509//9 1512//9 1505//11 1508//11
+f 1585//27 547//31 546//28 1735//28
+f 1048//4 1058//4 554//4 553//4
+f 352//9 927//9 926//11 353//12
+f 1583//3 398//3 397//3 1530//3 523//3 522//3 588//3 389//3 388//3 405//3 1557//3 1412//3 402//3 401//3 495//3
+f 1633//9 244//9 243//11 1148//11
+f 1408//3 1153//3 988//3 987//3
+f 150//22 149//23 394//23 431//22
+f 1317//1 1480//1 1479//1 1471//1 667//1 663//1 662//1 1453//1 666//1 675//1 1398//1 1399//1 672//1 671//1 1787//1 1772//1 1773//1 157//1 156//1 1314//1
+f 1820//50 1476//50 1475//50 238//49 237//49
+f 1820//19 237//19 236//20 1444//20 1443//19 1793//19
+f 1814//3 1498//3 1497//3 1741//3 1744//3 1013//3 1012//3 1558//3 1563//3 1643//3 378//3 381//3 1580//3 1579//3 1765//3
+f 1033//30 1032//30 1770//30 1791//30
+f 1762//27 1701//27 1484//28 1483//28
+f 1385//18 1384//18 1400//18 1761//18
+f 1545//77 1081//39 1080//39 1732//40 1695//41 1546//42
+f 1278//28 1275//27 1274//27 1302//28
+f 861//49 1456//50 1730//50 1775//50 862//49
+f 1039//2 1708//2 608//2 607//2 1516//2 1711//2 1431//2 1432//2 1746//2 1710//2 1654//2 1556//2 1555//2 1687//2 1040//2
+f 775//70 287//70 286//70 776//70
+f 1245//26 1244//27 874//27 873//28
+f 1523//27 255//31 254//28 1524//28
+f 1402//12 829//9 147//10 146//11
+f 692//2 691//2 1818//2 1811//2 1810//2 1074//2 1073//2 1189//2 1188//2 1504//2 837//2 836//2 1159//2 1615//2 1616//2
+f 1325//14 1324//15 705//13 704//16 1799//17 1800//13
+f 1702//23 1520//25 1519//22 1703//22
+f 1737//27 1693//31 1363//28 1362//28
+f 757//19 761//19 1203//19 1202//19 739//20 738//20
+f 1557//9 437//9 436//11 1412//12
+f 330//23 329//25 925//22 677//22
+f 1045//29 1044//29 348//29 347//29
+f 654//23 653//22 1345//22 1344//23
+f 256//23 1526//25 1525//22 253//22
+f 1537//4 1536//4 1763//4 1691//4
+f 249//27 578//27 1110//28 250//28
+f 949//9 683//9 682//11 1122//12
+f 1041//14 1040//14 1687//13 203//16 202//17 1439//13
+f 553//7 552//8 1049//8 1048//7
+f 1316//2 1481//2 1480//2 1317//2
+f 1790//5 1792//5 1030//6 1033//6 1791//6
+f 1666//2 1819//2 1807//2 1777//2 454//2 327//2 346//2 1696//2 1454//2 343//2 342//2 1740//2 997//2 339//2 338//2
+f 213//11 212//9 532//9 611//11
+f 613//28 612//27 1107//27 1713//28
+f 1013//1 1744//1 1743//1 1499//1 1498//1 1814//1 1815//1 1581//1 1580//1 381//1 380//1 1817//1 1816//1 1753//1 1752//1 1308//1 1307//1 1629//1 1632//1 1014//1
+f 363//5 362//5 966//6 968//6 658//6
+f 1639//48 1638//46 1088//46 1087//48
+f 456//9 459//10 728//11 976//12
+f 1644//2 1560//2 1559//2 1015//2 1014//2 1632//2 1631//2 1309//2 1308//2 1752//2 1755//2 1806//2 1817//2 380//2 379//2
+f 1750//11 975//9 974//10 1168//11
+f 1473//12 281//9 282//10 1714//11
+f 542//70 541//70 464//70 467//70 1803//70 1657//70 1575//70 1574//70 1488//70 1487//70 1812//70 955//70 954//70 540//70 539//70
+f 1816//3 1805//3 1754//3 1753//3
+f 1815//2 1764//2 1582//2 1581//2
+f 1810//49 528//50 527//50 1075//50 1074//49
+f 63//14 62//14 1771//13 1031//16 1030//17 1792//13
+f 768//27 823//27 1544//28 769//28
+f 586//2 1496//2 1709//2 587//2
+f 151//11 1491//9 1494//9 152//11
+f 109//49 108//50 1422//50 1789//50 668//49
+f 1065//25 1064//22 1404//22 1403//23
+f 1047//66 1249//46 1248//46 1046//48
+f 1607//46 1390//46 745//48 744//48
+f 1331//11 1649//9 1648//9 1332//11
+f 1372//4 1778//4 1705//4 1373//4
+f 1360//28 1375//27 135//27 134//28
+f 1307//3 1306//3 1630//3 1629//3
+f 772//4 1787//4 671//4 670//4
+f 1477//30 1476//30 1820//30 1793//30
+f 1797//32 1596//32 1595//32 1798//32
+f 1614//75 1567//75 1387//75 1386//75
+f 1531//3 1653//3 1640//3 89//3 88//3 1796//3 893//3 896//3 1325//3 1800//3 1594//3 1596//3 1797//3 1784//3 1532//3
+f 153//2 152//2 1494//2 1493//2 1798//2 1595//2 706//2 705//2 1324//2 895//2 894//2 1011//2 1010//2 1680//2 1679//2
+f 1357//3 1024//3 1023//3 1354//3
+f 582//22 574//23 573//23 579//22
+f 1491//3 151//3 154//3 1492//3
+f 1300//28 1267//27 878//27 877//28
+f 1051//5 1050//5 1761//6 1400//6 1401//6
+f 1137//54 45//52 44//53 1138//54
+f 129//28 1587//27 556//31 130//28
+f 371//2 961//2 960//2 372//2
+f 730//30 729//30 449//30 448//30
+f 1712//20 814//69 813//19 1593//19 1779//19 1715//19
+f 208//28 207//27 576//31 719//28
+f 780//52 779//53 1150//54 1149//54
+f 429//30 428//30 1728//30 1326//30
+f 1444//32 236//32 235//32 1445//32
+f 470//1 469//1 695//1 1065//1 1403//1 1406//1 1062//1 1061//1 1704//1 946//1 945//1 1520//1 1702//1 1511//1 1510//1 1507//1 1506//1 617//1 616//1 1067//1
+f 1245//9 873//10 885//11 1246//12
+f 1239//9 1310//9 1758//11 1236//12
+f 1819//49 1435//50 440//50 439//50 1807//49
+f 1638//54 1623//52 1089//53 1088//54
+f 1799//18 704//18 703//18 1547//18
+f 688//27 1711//31 1516//28 689//28
+o Floor
+v -39.484219 -25.864807 -0.000000
+v -39.484219 27.040174 0.000002
+v -39.484219 27.040174 -0.499998
+v -39.484219 -25.864807 -0.500000
+v 33.542374 27.040174 0.000002
+v 33.542374 27.040174 -0.499998
+v 43.770226 -25.864807 -0.000000
+v 43.770226 -25.864807 -0.500000
+v 13.601372 12.119150 0.000002
+v -37.380447 -16.977444 0.000000
+v 12.872247 16.323282 0.000002
+v -37.330448 -23.844000 0.000000
+v -37.330448 -16.977444 0.000000
+v 50.317074 -19.047932 0.000000
+v -37.380447 -16.177444 0.000000
+v 36.027946 20.211119 0.000002
+v -37.380447 -15.246632 0.000000
+v 34.568771 24.220171 0.000002
+v -37.330448 -16.177444 0.000000
+v 50.317074 -19.047932 -0.500000
+v -37.330448 -15.246632 0.000000
+v 34.568771 24.220171 -0.199998
+v -37.380447 -14.446631 0.000000
+v 36.027946 20.211119 -0.199998
+v 34.568771 24.220171 4.071209
+v -37.330448 -12.729661 0.000000
+v -37.330448 -14.446631 0.000000
+v 36.027946 20.211119 4.203956
+v -35.085789 -12.279661 0.000001
+v -35.035789 -12.729661 0.000000
+v -35.035789 -12.279661 0.000001
+v -35.085789 -11.479661 0.000001
+v -37.330448 -7.076204 0.000001
+v -35.035789 -7.076204 0.000001
+v -35.035789 -11.479661 0.000001
+v -37.380447 -0.450436 0.000001
+v -37.330448 -0.450436 0.000001
+v -37.380447 1.426359 0.000001
+v -37.330448 1.426359 0.000001
+v -37.380447 0.349564 0.000001
+v -37.330448 0.349564 0.000001
+v -37.380447 2.226360 0.000001
+v -37.330448 8.887293 0.000001
+v -37.330448 2.226360 0.000001
+v 14.948427 -23.844000 0.000000
+v -13.628716 7.941137 0.000001
+v -13.289828 7.991137 0.000001
+v -13.289828 7.941137 0.000001
+v -13.628716 8.887293 0.000001
+v -12.489828 7.991137 0.000001
+v -11.128716 7.941137 0.000001
+v -12.489828 7.941137 0.000001
+v 16.198427 -18.761621 0.000000
+v 17.448427 -23.844000 0.000000
+v 14.948427 -18.711620 0.000000
+v 16.198427 -18.711620 0.000000
+v 16.998426 -18.761621 0.000000
+v 16.998426 -18.711620 0.000000
+v 17.448427 -18.711620 0.000000
+v -11.128716 16.323317 0.000002
+v -3.688910 11.009729 0.000002
+v -3.217584 11.523291 0.000002
+v -4.016689 10.394541 0.000001
+v -4.180056 9.716894 0.000001
+v -4.168609 9.019926 0.000001
+v -2.632718 11.902533 0.000002
+v -1.971545 12.123316 0.000002
+v 40.000263 -23.844000 0.000000
+v 40.000263 -18.711620 0.000000
+v 41.594418 -18.711620 0.000000
+v 41.552635 -18.611385 0.000000
+v 41.537792 -18.503811 0.000000
+v 41.655529 -18.207760 0.000000
+v 41.590996 -18.295099 0.000000
+v 41.550865 -18.396008 0.000000
+v 41.839405 -18.095594 0.000000
+v 41.946594 -18.078186 0.000000
+v 41.740196 -18.139759 0.000000
+v 42.054680 -18.088682 0.000000
+v 13.600650 12.123316 0.000002
+v 13.612914 12.123316 0.000002
+v 19.656212 9.019926 0.000001
+v 19.656212 9.893988 0.000001
+v 46.174992 -14.785413 0.000000
+v 41.475014 -16.496065 0.000000
+v 35.322247 0.201824 0.000001
+v 35.369232 0.218925 0.000001
+v 35.476158 -0.221037 0.000001
+v 35.048634 0.953579 0.000001
+v 34.621105 2.128193 0.000001
+v 35.095615 0.970678 0.000001
+v 26.182775 12.322668 0.000002
+v 26.199875 12.275686 0.000002
+v 26.934528 12.596285 0.000002
+v 27.800396 12.858225 0.000002
+v 26.951630 12.549299 0.000002
+v 27.783295 12.905210 0.000002
+v 40.242565 1.513794 0.000001
+v 39.387516 3.863026 0.000001
+v 28.535048 13.178827 0.000002
+v 35.141079 15.530016 0.000002
+v 28.552149 13.131842 0.000002
+v 12.872341 16.323317 0.000002
+v 13.612912 12.123316 0.000002
+v -22.672579 -21.454777 0.000000
+v -22.672579 -21.854776 0.000000
+v -22.272577 -21.454777 0.000000
+v -22.272577 -21.854776 0.000000
+v -30.175529 -18.653444 0.000000
+v -30.175529 -19.053444 0.000000
+v -29.775530 -18.653444 0.000000
+v -29.775530 -19.053444 0.000000
+v -22.675529 -18.653444 0.000000
+v -22.675529 -19.053444 0.000000
+v -22.275530 -18.653444 0.000000
+v -22.275530 -19.053444 0.000000
+v -18.925529 -18.653444 0.000000
+v -18.925529 -19.053444 0.000000
+v -18.525530 -18.653444 0.000000
+v -18.525530 -19.053444 0.000000
+v -11.475529 -18.653444 0.000000
+v -11.475529 -19.053444 0.000000
+v -11.075529 -18.653444 0.000000
+v -11.075529 -19.053444 0.000000
+v -3.975529 -18.653444 0.000000
+v -3.975529 -19.053444 0.000000
+v -3.575529 -18.653444 0.000000
+v -3.575529 -19.053444 0.000000
+v -0.175529 -18.653444 0.000000
+v -0.175529 -19.053444 0.000000
+v 0.224471 -18.653444 0.000000
+v 0.224471 -19.053444 0.000000
+v -30.172609 -12.343353 0.000001
+v -30.172609 -12.743353 0.000000
+v -29.772608 -12.343353 0.000001
+v -29.772608 -12.743353 0.000000
+v -22.672609 -12.343353 0.000001
+v -22.672609 -12.743353 0.000000
+v -22.272610 -12.343353 0.000001
+v -22.272610 -12.743353 0.000000
+v -18.870583 -12.729661 0.000000
+v -9.485923 -12.729661 0.000000
+v -18.870583 -2.060263 0.000001
+v -9.485923 -7.099552 0.000001
+v -15.331446 -2.060263 0.000001
+v -13.628716 -7.099552 0.000001
+v -15.331446 -2.110262 0.000001
+v -13.628716 -2.049547 0.000001
+v -14.531446 -2.110262 0.000001
+v -14.531446 -2.049547 0.000001
+v -3.972609 -12.343353 0.000001
+v -3.972609 -12.743353 0.000000
+v -3.572609 -12.343353 0.000001
+v -3.572609 -12.743353 0.000000
+v -0.172609 -12.343353 0.000001
+v -0.172609 -12.743353 0.000000
+v 0.227391 -12.343353 0.000001
+v 0.227391 -12.743353 0.000000
+v 7.327422 -21.454777 0.000000
+v 7.327422 -21.854776 0.000000
+v 7.727422 -21.454777 0.000000
+v 7.727422 -21.854776 0.000000
+v 7.324471 -18.653444 0.000000
+v 7.324471 -19.053444 0.000000
+v 7.724471 -18.653444 0.000000
+v 7.724471 -19.053444 0.000000
+v 22.318348 -18.653444 0.000000
+v 22.318348 -19.053444 0.000000
+v 22.718348 -18.653444 0.000000
+v 22.718348 -19.053444 0.000000
+v 29.818348 -18.653444 0.000000
+v 29.818348 -19.053444 0.000000
+v 30.218348 -18.653444 0.000000
+v 30.218348 -19.053444 0.000000
+v 37.318348 -18.653444 0.000000
+v 37.318348 -19.053444 0.000000
+v 37.718346 -18.653444 0.000000
+v 37.718346 -19.053444 0.000000
+v 7.327391 -12.343353 0.000001
+v 7.327391 -12.743353 0.000000
+v 7.727391 -12.343353 0.000001
+v 7.727391 -12.743353 0.000000
+v 14.827391 -12.343353 0.000001
+v 14.827391 -12.743353 0.000000
+v 15.227391 -12.343353 0.000001
+v 15.227391 -12.743353 0.000000
+v 22.327391 -12.343353 0.000001
+v 22.327391 -12.743353 0.000000
+v 22.727390 -12.343353 0.000001
+v 22.727390 -12.743353 0.000000
+v 40.377884 -14.167850 0.000000
+v 40.514694 -14.543727 0.000000
+v 40.753761 -14.031042 0.000000
+v 40.890572 -14.406919 0.000000
+v 24.087997 -4.097775 0.000001
+v 22.313528 -6.631981 0.000001
+v 27.941290 -5.288776 0.000001
+v 24.750605 -9.845544 0.000001
+v 28.803806 -5.860407 0.000001
+v 25.582762 -10.460536 0.000001
+v 28.776186 -5.902084 0.000001
+v 25.612478 -10.420326 0.000001
+v 29.443029 -6.344032 0.000001
+v 26.255848 -10.895800 0.000001
+v 29.470652 -6.302355 0.000001
+v 26.226131 -10.936009 0.000001
+v 31.986221 -7.969539 0.000001
+v 28.653147 -12.729661 0.000000
+v 32.898914 -10.477148 0.000001
+v 31.321690 -12.729661 0.000000
+v -30.196814 -6.199760 0.000001
+v -30.196814 -6.599760 0.000001
+v -29.796814 -6.199760 0.000001
+v -29.796814 -6.599760 0.000001
+v -22.696814 -6.199760 0.000001
+v -22.696814 -6.599760 0.000001
+v -22.296814 -6.199760 0.000001
+v -22.296814 -6.599760 0.000001
+v -30.181654 -2.080406 0.000001
+v -30.181654 -2.480406 0.000001
+v -29.781652 -2.080406 0.000001
+v -29.781652 -2.480406 0.000001
+v -22.681652 -2.080406 0.000001
+v -22.681652 -2.480406 0.000001
+v -22.281652 -2.080406 0.000001
+v -22.281652 -2.480406 0.000001
+v -11.496814 -6.199760 0.000001
+v -11.496814 -6.599760 0.000001
+v -11.096814 -6.199760 0.000001
+v -11.096814 -6.599760 0.000001
+v -3.996814 -6.199760 0.000001
+v -3.996814 -6.599760 0.000001
+v -3.596814 -6.199760 0.000001
+v -3.596814 -6.599760 0.000001
+v -0.196814 -6.199760 0.000001
+v -0.196814 -6.599760 0.000001
+v 0.203186 -6.199760 0.000001
+v 0.203186 -6.599760 0.000001
+v -11.481653 -2.080406 0.000001
+v -11.481653 -2.480406 0.000001
+v -11.081653 -2.080406 0.000001
+v -11.081653 -2.480406 0.000001
+v -3.981653 -2.080406 0.000001
+v -3.981653 -2.480406 0.000001
+v -3.581653 -2.080406 0.000001
+v -3.581653 -2.480406 0.000001
+v -0.181653 -2.080406 0.000001
+v -0.181653 -2.480406 0.000001
+v 0.218347 -2.080406 0.000001
+v 0.218347 -2.480406 0.000001
+v -30.175571 3.836163 0.000001
+v -29.775572 3.836163 0.000001
+v -30.175571 4.236162 0.000001
+v -29.775572 4.236162 0.000001
+v -22.675571 3.836163 0.000001
+v -22.275572 3.836163 0.000001
+v -22.675571 4.236162 0.000001
+v -22.275572 4.236162 0.000001
+v -18.925571 3.836163 0.000001
+v -18.525572 3.836163 0.000001
+v -18.925571 4.236162 0.000001
+v -18.525572 4.236162 0.000001
+v -11.475572 3.836163 0.000001
+v -11.075572 3.836163 0.000001
+v -11.475572 4.236162 0.000001
+v -11.075572 4.236162 0.000001
+v -3.975572 3.836163 0.000001
+v -3.575572 3.836163 0.000001
+v -3.975572 4.236162 0.000001
+v -3.575572 4.236162 0.000001
+v -0.175572 3.836163 0.000001
+v 0.224428 3.836163 0.000001
+v -0.175572 4.236162 0.000001
+v 0.224428 4.236162 0.000001
+v 7.303186 -6.199760 0.000001
+v 7.303186 -6.599760 0.000001
+v 7.703186 -6.199760 0.000001
+v 7.703186 -6.599760 0.000001
+v 14.803186 -6.199760 0.000001
+v 14.803186 -6.599760 0.000001
+v 15.203186 -6.199760 0.000001
+v 15.203186 -6.599760 0.000001
+v 7.318347 -2.080406 0.000001
+v 7.318347 -2.480406 0.000001
+v 7.718347 -2.080406 0.000001
+v 7.718347 -2.480406 0.000001
+v 14.818347 -2.080406 0.000001
+v 14.818347 -2.480406 0.000001
+v 15.218347 -2.080406 0.000001
+v 15.218347 -2.480406 0.000001
+v 22.318348 -2.080406 0.000001
+v 22.318348 -2.480406 0.000001
+v 22.718348 -2.080406 0.000001
+v 22.718348 -2.480406 0.000001
+v 37.812733 -7.120155 0.000001
+v 37.949543 -7.496031 0.000001
+v 38.188610 -6.983347 0.000001
+v 38.325420 -7.359224 0.000001
+v 29.327518 -2.227188 0.000001
+v 29.464327 -2.603065 0.000001
+v 29.703396 -2.090380 0.000001
+v 29.840204 -2.466257 0.000001
+v 20.842304 2.665781 0.000001
+v 20.979113 2.289904 0.000001
+v 21.218182 2.802588 0.000001
+v 21.354990 2.426712 0.000001
+v 7.324428 3.836163 0.000001
+v 7.724428 3.836163 0.000001
+v 7.324428 4.236162 0.000001
+v 7.724428 4.236162 0.000001
+v 14.824428 3.836163 0.000001
+v 15.224428 3.836163 0.000001
+v 14.824428 4.236162 0.000001
+v 15.224428 4.236162 0.000001
+v 26.762367 4.820507 0.000001
+v 26.899176 4.444630 0.000001
+v 27.138245 4.957315 0.000001
+v 27.275053 4.581438 0.000001
+v 32.682430 6.975235 0.000001
+v 32.819241 6.599358 0.000001
+v 33.058308 7.112041 0.000001
+v 33.195118 6.736166 0.000001
+v 12.872341 16.323317 0.000002
+v 12.872341 16.323317 0.000002
+v 12.872341 16.323317 0.000019
+v 12.872341 16.323317 0.000002
+v 13.600650 12.123316 0.000002
+v 13.600649 12.123316 0.000002
+v 13.612912 12.123316 0.002165
+v 13.612903 12.123312 0.002163
+v 13.612914 12.123316 0.002165
+v 21.967260 15.137735 1.568222
+v 12.872341 16.323317 0.000019
+v 21.126659 19.327642 1.548887
+v 13.612917 12.123316 0.000002
+v 13.612917 12.123316 0.000002
+v 13.612917 12.123316 0.000002
+v 13.612917 12.123316 0.000002
+v 13.612915 12.123316 0.000002
+v 13.612915 12.123316 0.000002
+v -1.356090 16.323317 0.000002
+v 12.872079 16.323317 0.000002
+v 12.872313 16.323317 0.000002
+v -36.659981 -23.844000 0.000000
+v 40.000263 -21.118254 0.000000
+v 45.559578 -15.009406 0.000000
+v 17.252346 9.019926 0.000001
+v 16.062939 9.019926 0.000001
+v 9.269960 9.019926 0.000001
+v 13.586552 12.123316 0.000002
+v -29.964800 -19.053444 0.000000
+v -29.775530 -18.918018 0.000000
+v -18.870583 -11.115277 0.000001
+v -13.258287 -7.099552 0.000001
+v 27.260542 -5.078367 0.000001
+v 32.266216 -11.380736 0.000001
+v 21.049763 2.741289 0.000001
+v 21.312033 2.411077 0.000001
+v -13.500953 -7.273184 0.000001
+v -5.856277 17.588205 0.000002
+v 21.267042 2.467722 0.000001
+v 30.847980 -9.595114 0.000001
+v 31.948866 -10.981178 0.000001
+v 45.722786 -15.147949 0.000000
+v 40.608887 -21.884537 0.000000
+v -0.078829 18.974249 0.000002
+v 27.509512 -5.391830 0.000001
+v 27.700636 -5.632465 0.000001
+v 27.754526 -5.700314 0.000001
+v 28.372587 -6.478481 0.000001
+v 28.441492 -6.565235 0.000001
+v 28.891457 -7.131760 0.000001
+v 30.257868 -8.852136 0.000001
+v -14.367959 -7.893547 0.000001
+vn -1.0000 -0.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 -0.0000 1.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.9397 0.3420 0.0000
+vn 0.7212 -0.6927 0.0000
+vn -0.3369 0.9415 0.0000
+vn -0.2906 -0.7064 0.6454
+vn -0.9853 -0.1710 0.0005
+vn -0.2383 0.6658 0.7071
+vn 0.1190 -0.6972 0.7069
+vn 0.0982 -0.6595 0.7453
+vn -0.1736 -0.0302 0.9843
+vn -0.1647 -0.0286 0.9859
+vn -0.4999 -0.0869 0.8617
+vn -0.1308 -0.1469 0.9805
+vn 0.1178 -0.7023 0.7021
+vn -0.0050 -0.7555 0.6551
+vn 0.0254 -0.7494 0.6616
+vn -0.3514 0.5913 0.7259
+vn -0.3591 0.6333 0.6856
+vn -0.3591 0.6332 0.6856
+vn -0.3420 0.9397 0.0000
+vn 0.0000 0.0000 0.0000
+vn -0.9852 -0.1713 0.0000
+vn 0.3395 -0.9406 0.0000
+vn 0.3394 -0.9406 0.0000
+s 1
+f 1823//78 1821//78 1822//78
+f 1821//78 1823//78 1824//78
+f 1826//79 1822//79 1825//79
+f 1822//79 1826//79 1823//79
+f 1821//80 1824//80 1827//80
+f 1828//80 1827//80 1824//80
+f 2089//81 2090//81 1885//81 1884//81 1883//81 1881//81 1882//81 1886//81 1887//81 2170//81 2161//81 1880//81 1871//81 2085//81 2086//81
+f 2060//81 2059//81 1968//81 1966//81 2174//81
+f 1852//81 1849//81 1851//81 1850//81 1954//81 1953//81 2032//81 2031//81 1854//81 1855//81
+f 2091//81 2093//81 2090//81 2088//81
+f 2079//81 2081//81 2078//81 2076//81 2075//81 2043//81 2045//81 2046//81 2037//81 2038//81 1959//81 1960//81 2173//81 1963//81
+f 2033//81 2042//81 2040//81 2031//81
+f 2071//81 2039//81 2041//81 2072//81
+f 1860//81 1856//81 1857//81 1853//81 1854//81 2031//81 2040//81 2039//81 2071//81 2073//81 2074//81 2072//81 2041//81 2042//81 2033//81 2034//81 2032//81 1953//81 1955//81 1956//81 1954//81 1850//81 1846//81 1847//81 1843//81 1837//81 1841//81 1839//81 1835//81 1830//81 1833//81 1832//81 2164//81 2171//81 1930//81 1929//81 1931//81 2172//81 2173//81 1960//81 1958//81 1957//81 1959//81 2038//81 2036//81 2035//81 2037//81 2046//81 2044//81 2043//81 2075//81 2077//81 2078//81 2081//81 2082//81 2080//81 2079//81 1963//81 1965//81 1967//81 1969//81 1970//81 1968//81 2059//81 2061//81 2062//81 2060//81 2174//81 2169//81 1885//81 2090//81 2093//81 2094//81 2092//81 2091//81 2088//81 2087//81 2089//81 2086//81 2084//81 2083//81 2085//81 1871//81 1872//81 1870//81 1867//81 1868//81 1866//81 1869//81 1863//81 1864//81 1862//81 1858//81 1859//81 1861//81
+f 1999//81 2001//81 2098//81 2096//81
+f 2112//81 2016//81 2015//81 2114//81
+f 1984//81 1979//81 1981//81 1986//81
+f 2003//81 2005//81 2102//81 2100//81
+f 2000//81 1983//81 1985//81 2002//81
+f 2026//81 2024//81 2022//81 2020//81 2018//81 2009//81 2010//81 1989//81 1990//81 1988//81 1987//81 1879//81 1874//81 1888//81 1996//81 1995//81 1997//81 1998//81 2165//81 2176//81 2030//81 1993//81 1994//81 1992//81 1991//81 2028//81
+f 1991//81 1993//81 2030//81 2028//81
+f 1998//81 1996//81 1888//81 2165//81
+f 2131//81 2107//81 2109//81 2132//81
+f 2101//81 2110//81 2108//81 2099//81
+f 2129//81 2130//81 2133//81 2134//81 2168//81 2169//81
+f 2097//81 2106//81 2104//81 2095//81
+f 1976//81 1975//81 1973//81 1974//81 1972//81 1945//81 1947//81 1949//81 1951//81 1978//81
+f 1934//81 1925//81 1927//81 1936//81
+f 1938//81 1937//81 1935//81 1936//81
+f 1961//81 1937//81 1939//81 1941//81 1943//81 1962//81
+f 2068//81 2067//81 2065//81 2066//81 2053//81 2054//81 2056//81 2055//81 2057//81 2070//81
+f 2052//81 2051//81 1964//81 1962//81 1972//81 1971//81
+f 2049//81 2050//81 1964//81 2051//81 2053//81 2066//81 2064//81 2063//81 2065//81 2067//81 2069//81 2070//81 2057//81 2058//81 2056//81 2054//81 2052//81 1971//81 1973//81 1975//81 1977//81 1978//81 1951//81 1952//81 1950//81 1949//81 1947//81 1948//81 1946//81 1945//81 1972//81 1962//81 1943//81 1944//81 1942//81 1941//81 1939//81 1940//81 1938//81 1936//81 1927//81 1928//81 1926//81 1925//81 1934//81 1933//81 1935//81 1937//81 1961//81 2173//81 2172//81 1932//81 2171//81 2164//81 1865//81 1875//81 1876//81 1873//81 1877//81 1878//81 1879//81 1987//81 1989//81 2010//81 2008//81 2007//81 2009//81 2018//81 2016//81 2112//81 2111//81 2113//81 2114//81 2015//81 2175//81 2178//81 2124//81 2123//81 2177//81 2168//81 2134//81 2132//81 2109//81 2110//81 2101//81 2102//81 2005//81 2006//81 2004//81 2003//81 2100//81 2099//81 2108//81 2107//81 2131//81 2133//81 2130//81 2128//81 2105//81 2106//81 2097//81 2098//81 2001//81 2002//81 1985//81 1986//81 1981//81 1982//81 1980//81 1979//81 1984//81 1983//81 2000//81 1999//81 2096//81 2095//81 2104//81 2103//81 2127//81 2129//81 2169//81 2174//81 2048//81 2047//81
+f 2048//81 2174//81 1964//81 2050//81
+f 2127//81 2103//81 2105//81 2128//81
+f 2170//81 2148//81 1831//81 2162//81 2161//81
+f 2012//81 1889//81 1890//81 1891//81 1892//81 1895//81 1894//81 1893//81 1898//81 1896//81 1897//81 1899//81 1905//81 2014//81
+f 2019//81 2021//81 2023//81 2025//81 2027//81 2029//81 2176//81 2165//81 1889//81 2012//81 2011//81 2013//81 2014//81 1905//81 2166//81 2167//81 2168//81 2177//81 2125//81 2126//81 2178//81 2175//81 2119//81 2121//81 2122//81 2120//81 2017//81
+f 2175//81 2017//81 2120//81 2119//81
+f 1920//81 1917//81 1915//81 1916//81 1914//81 1912//81 1913//81 1903//81 1902//81 2167//81 2166//81 1904//81 1918//81 2117//81 2118//81 2116//81 2115//81 1908//81 1906//81 1907//81 1911//81 1909//81 1910//81 2140//81 2138//81 2136//81 2135//81 2137//81 2139//81 2141//81 2142//81 1919//81 1921//81 1922//81
+f 1910//81 1919//81 2142//81 2140//81
+f 1908//81 2115//81 2117//81 1918//81
+f 2137//81 2138//81 2140//81 2139//81
+f 2163//81 1831//81 2143//81
+f 2162//81 1831//81 2163//81
+f 1823//82 1826//82 1824//82
+f 1824//82 1826//82 1828//82
+f 1828//82 1826//82 1840//82
+f 1826//83 1825//83 1842//83
+f 1838//83 1842//83 1825//83
+f 1842//83 1844//83 1826//83
+f 1844//83 1840//83 1826//83
+f 1844//83 1836//83 1834//83
+f 1834//83 1840//83 1844//83
+f 1827//84 1828//84 1834//84
+f 1840//84 1834//84 1828//84
+f 1831//85 2145//86 2144//87 2143//88
+f 2152//89 1848//90 1831//91 2148//92 2147//93 1829//94 2150//95 2149//96 2151//97
+f 2145//86 1831//91 1848//90 1845//98 2154//99 2153//100
+f 1836//83 1838//83 1845//83
+f 1848//83 1836//83 1845//83
+f 1844//83 1842//83 1838//83
+f 1836//83 1844//83 1838//83
+f 1830//81 1821//81 1832//81
+f 1832//81 1833//81 1830//81
+f 1830//81 1835//81 1821//81
+f 1835//81 1837//81 1821//81
+f 1837//81 1835//81 1839//81
+f 1839//81 1841//81 1837//81
+f 1821//81 1837//81 1843//81
+f 1821//81 1843//81 1846//81
+f 1847//81 1846//81 1843//81
+f 1850//81 1849//81 1846//81
+f 1849//81 1850//81 1851//81
+f 1849//81 1852//81 1846//81
+f 1846//81 1853//81 1821//81
+f 1853//81 1846//81 1852//81
+f 1852//81 1854//81 1853//81
+f 1855//81 1854//81 1852//81
+f 1853//81 1857//81 1856//81
+f 1858//81 1860//81 1859//81
+f 1861//81 1859//81 1860//81
+f 1862//81 1864//81 1863//81
+f 1832//81 1821//81 2164//81
+f 2164//81 1821//81 1865//81
+f 1868//81 1867//81 1866//81
+f 1869//81 1866//81 1867//81
+f 1867//81 1870//81 1869//81
+f 1869//81 1870//81 1871//81
+f 1870//81 1872//81 1871//81
+f 1873//81 1865//81 1874//81
+f 1875//81 1865//81 1873//81
+f 1873//81 1876//81 1875//81
+f 1877//81 1873//81 1874//81
+f 1878//81 1877//81 1879//81
+f 1874//81 1879//81 1877//81
+f 1822//81 1863//81 1880//81
+f 1871//81 1880//81 1869//81
+f 1869//81 1880//81 1863//81
+f 1882//81 1881//81 1883//81
+f 1883//81 1884//81 1882//81
+f 1884//81 1885//81 1882//81
+f 1886//81 1882//81 1885//81
+f 1887//81 1886//81 1885//81
+f 1827//81 1888//81 1874//81
+f 1874//81 1865//81 1827//81
+f 2165//81 1888//81 2185//81
+f 1890//81 1889//81 2165//81 2185//81
+f 1827//81 1890//81 2185//81
+f 1827//81 2185//81 1888//81
+f 1892//81 1891//81 1890//81
+f 1892//81 1890//81 1893//81
+f 1893//81 1894//81 1895//81
+f 1895//81 1892//81 1893//81
+f 1896//81 1898//81 1897//81
+f 1898//81 1893//81 1897//81
+f 1827//81 1899//81 1890//81
+f 1890//81 1899//81 1893//81
+f 1899//81 1897//81 1893//81
+f 1887//81 1885//81 1829//81
+f 2148//81 2170//81 1829//81
+f 1829//81 1900//81 2148//81
+f 1829//81 2170//81 1887//81
+f 2160//81 1901//81 1829//81
+f 2160//81 1829//81 1902//81
+f 1901//81 2160//81 2159//81
+f 2159//81 2160//81 1902//81 1903//81
+f 1899//81 1827//81 1834//81
+f 1834//81 1904//81 2184//81
+f 1899//81 1834//81 2184//81
+f 1904//81 2166//81 2184//81
+f 1899//81 2184//81 2166//81 1905//81
+f 1907//81 1906//81 1908//81
+f 1910//81 1909//81 1911//81
+f 1913//81 1912//81 1903//81
+f 1914//81 1916//81 1915//81
+f 1915//81 1917//81 1914//81
+f 1911//81 1907//81 1918//81
+f 1904//81 1834//81 1918//81
+f 1907//81 1908//81 1918//81
+f 1910//81 1911//81 1919//81
+f 1919//81 1911//81 1918//81
+f 1920//81 1922//81 1921//81
+f 1919//81 1836//81 1921//81
+f 1918//81 1834//81 1836//81
+f 1921//81 1836//81 1920//81
+f 1836//81 1919//81 1918//81
+f 1880//81 2161//81 2180//81
+f 2143//81 1923//81 2146//81
+f 2143//81 2146//81 1825//81 2163//81
+f 2162//81 2163//81 1825//81 2186//81
+f 2180//81 2161//81 2162//81 2186//81
+f 2146//81 1923//81 1838//81
+f 1838//81 1825//81 2146//81
+f 1822//81 1880//81 2180//81
+f 1822//81 2180//81 2186//81
+f 1825//81 1822//81 2186//81
+f 1822//81 1821//81 1856//81
+f 1856//81 1821//81 1853//81
+f 1856//81 1860//81 1822//81
+f 1860//81 1858//81 1822//81
+f 1858//81 1862//81 1822//81
+f 1822//81 1862//81 1863//81
+f 1827//81 1865//81 1821//81
+f 1901//81 2155//81 1836//81
+f 1920//81 1836//81 2155//81
+f 2156//81 2155//81 1901//81
+f 2155//81 2156//81 1917//81 1920//81
+f 2157//81 2156//81 1901//81
+f 2156//81 2157//81 1914//81 1917//81
+f 2158//81 2157//81 1901//81
+f 2157//81 2158//81 1912//81 1914//81
+f 1901//81 2159//81 2158//81
+f 2158//81 2159//81 1903//81 1912//81
+f 2169//81 2168//81 1829//81
+f 2168//81 2167//81 1829//81
+f 2167//81 1902//81 1829//81
+f 1885//81 2169//81 1829//81
+f 1838//101 1923//101 2153//100 2154//99
+f 1838//101 2154//99 1845//98
+f 1923//102 2144//87 2145//86 2153//100
+f 1923//102 2143//88 2144//87
+f 1900//102 2147//93 2148//92
+f 1829//94 2147//93 1900//103
+f 1924//104 2150//95 1829//94
+f 1924//104 2149//96 2150//95
+f 2149//96 1924//80 1901//80 2151//97
+f 1836//105 1848//90 2152//89
+f 2151//97 1901//105 1836//105 2152//89
+f 1925//81 1926//81 1927//81
+f 1928//81 1927//81 1926//81
+f 1929//81 1930//81 1931//81
+f 2172//81 1931//81 1930//81 2171//81
+f 1932//81 2172//81 2171//81
+f 1933//81 1934//81 1935//81
+f 1936//81 1935//81 1934//81
+f 1937//81 1938//81 1939//81
+f 1940//81 1939//81 1938//81
+f 1941//81 1942//81 1943//81
+f 1944//81 1943//81 1942//81
+f 1945//81 1946//81 1947//81
+f 1948//81 1947//81 1946//81
+f 1949//81 1950//81 1951//81
+f 1952//81 1951//81 1950//81
+f 1953//81 1954//81 1955//81
+f 1956//81 1955//81 1954//81
+f 1957//81 1958//81 1959//81
+f 1960//81 1959//81 1958//81
+f 2173//81 1961//81 2194//81
+f 1966//81 1963//81 2173//81 2194//81
+f 1961//81 1962//81 2179//81 2194//81
+f 1966//81 2194//81 2179//81
+f 1966//81 1967//81 1963//81
+f 1967//81 1965//81 1963//81
+f 1969//81 1967//81 1966//81
+f 1962//81 1964//81 2174//81 2179//81
+f 2174//81 1966//81 2179//81
+f 1968//81 1970//81 1969//81
+f 1966//81 1968//81 1969//81
+f 1971//81 1972//81 1973//81
+f 1974//81 1973//81 1972//81
+f 1975//81 1976//81 1977//81
+f 1978//81 1977//81 1976//81
+f 1979//81 1980//81 1981//81
+f 1980//81 1982//81 1981//81
+f 1983//81 1984//81 1985//81
+f 1986//81 1985//81 1984//81
+f 1987//81 1988//81 1989//81
+f 1990//81 1989//81 1988//81
+f 1993//81 1991//81 1992//81
+f 1994//81 1993//81 1992//81
+f 1997//81 1995//81 1996//81
+f 1998//81 1997//81 1996//81
+f 1999//81 2000//81 2001//81
+f 2002//81 2001//81 2000//81
+f 2003//81 2004//81 2005//81
+f 2006//81 2005//81 2004//81
+f 2007//81 2008//81 2009//81
+f 2010//81 2009//81 2008//81
+f 2011//81 2012//81 2013//81
+f 2014//81 2013//81 2012//81
+f 2018//81 2020//81 2022//81
+f 2024//81 2026//81 2028//81
+f 2176//81 2029//81 2183//81
+f 2028//81 2030//81 2176//81 2183//81
+f 2175//81 2015//81 2016//81 2187//81
+f 2017//81 2175//81 2187//81
+f 2016//81 2018//81 2188//81 2187//81
+f 2017//81 2187//81 2188//81
+f 2018//81 2022//81 2189//81 2188//81
+f 2017//81 2188//81 2189//81
+f 2191//81 2021//81 2190//81
+f 2191//81 2190//81 2022//81 2024//81
+f 2189//81 2022//81 2190//81
+f 2021//81 2017//81 2189//81 2190//81
+f 2021//81 2019//81 2017//81
+f 2191//81 2024//81 2192//81
+f 2191//81 2192//81 2023//81 2021//81
+f 2025//81 2023//81 2027//81
+f 2182//81 2027//81 2193//81
+f 2024//81 2028//81 2182//81 2193//81
+f 2029//81 2027//81 2182//81 2183//81
+f 2183//81 2182//81 2028//81
+f 2192//81 2024//81 2193//81
+f 2192//81 2193//81 2027//81 2023//81
+f 2031//81 2032//81 2033//81
+f 2034//81 2033//81 2032//81
+f 2035//81 2036//81 2037//81
+f 2038//81 2037//81 2036//81
+f 2039//81 2040//81 2041//81
+f 2042//81 2041//81 2040//81
+f 2043//81 2044//81 2045//81
+f 2046//81 2045//81 2044//81
+f 2047//81 2048//81 2049//81
+f 2050//81 2049//81 2048//81
+f 2051//81 2052//81 2053//81
+f 2054//81 2053//81 2052//81
+f 2055//81 2056//81 2057//81
+f 2056//81 2058//81 2057//81
+f 2059//81 2060//81 2061//81
+f 2062//81 2061//81 2060//81
+f 2063//81 2064//81 2065//81
+f 2066//81 2065//81 2064//81
+f 2067//81 2068//81 2069//81
+f 2070//81 2069//81 2068//81
+f 2073//81 2071//81 2074//81
+f 2072//81 2074//81 2071//81
+f 2077//81 2075//81 2078//81
+f 2076//81 2078//81 2075//81
+f 2081//81 2079//81 2082//81
+f 2080//81 2082//81 2079//81
+f 2085//81 2083//81 2084//81
+f 2084//81 2086//81 2085//81
+f 2089//81 2087//81 2090//81
+f 2088//81 2090//81 2087//81
+f 2093//81 2091//81 2094//81
+f 2092//81 2094//81 2091//81
+f 2095//81 2096//81 2097//81
+f 2098//81 2097//81 2096//81
+f 2099//81 2100//81 2101//81
+f 2102//81 2101//81 2100//81
+f 2103//81 2104//81 2105//81
+f 2106//81 2105//81 2104//81
+f 2107//81 2108//81 2109//81
+f 2110//81 2109//81 2108//81
+f 2111//81 2112//81 2113//81
+f 2114//81 2113//81 2112//81
+f 2115//81 2116//81 2117//81
+f 2117//81 2116//81 2118//81
+f 2119//81 2120//81 2122//81
+f 2121//81 2119//81 2122//81
+f 2178//81 2126//81 2181//81
+f 2123//81 2124//81 2178//81 2181//81
+f 2177//81 2123//81 2181//81
+f 2126//81 2125//81 2177//81 2181//81
+f 2129//81 2127//81 2130//81
+f 2128//81 2130//81 2127//81
+f 2133//81 2131//81 2134//81
+f 2132//81 2134//81 2131//81
+f 2135//81 2136//81 2138//81
+f 2137//81 2135//81 2138//81
+f 2139//81 2140//81 2142//81
+f 2141//81 2139//81 2142//81
+o Base
+v -39.484219 27.040174 0.000002
+v -39.484219 -25.864807 -0.000000
+v -39.484219 27.040174 7.500002
+v -39.484219 -25.864807 7.500000
+v 33.542374 27.040174 0.000002
+v 33.542374 27.040174 7.500002
+v 43.770226 -25.864807 -0.000000
+v 43.770226 -25.864807 7.500000
+v -37.380447 -16.977444 0.000000
+v -37.330448 -23.844000 0.000000
+v -37.330448 -16.977444 0.000000
+v -37.380447 -16.177444 0.000000
+v -37.380447 -15.246632 0.000000
+v -37.330448 -16.177444 0.000000
+v -37.330448 -15.246632 0.000000
+v -37.380447 -14.446631 0.000000
+v -37.330448 -12.729661 0.000000
+v -37.330448 -14.446631 0.000000
+v -35.085789 -12.279661 0.000001
+v -35.035789 -12.729661 0.000000
+v -35.035789 -12.279661 0.000001
+v -35.085789 -11.479661 0.000001
+v -37.330448 -7.076204 0.000001
+v -35.035789 -7.076204 0.000001
+v -35.035789 -11.479661 0.000001
+v -37.380447 -0.450436 0.000001
+v -37.330448 -0.450436 0.000001
+v -37.380447 1.426359 0.000001
+v -37.330448 1.426359 0.000001
+v -37.380447 0.349564 0.000001
+v -37.330448 0.349564 0.000001
+v -37.380447 2.226360 0.000001
+v -37.330448 8.887293 0.000001
+v -37.330448 2.226360 0.000001
+v 14.948427 -23.844000 0.000000
+v -13.628716 7.941137 0.000001
+v -13.289828 7.991137 0.000001
+v -13.289828 7.941137 0.000001
+v -13.628716 8.887293 0.000001
+v -12.489828 7.991137 0.000001
+v -11.128716 7.941137 0.000001
+v -12.489828 7.941137 0.000001
+v 16.198427 -18.761621 0.000000
+v 17.448427 -23.844000 0.000000
+v 14.948427 -18.711620 0.000000
+v 16.198427 -18.711620 0.000000
+v 16.998426 -18.761621 0.000000
+v 16.998426 -18.711620 0.000000
+v 17.448427 -18.711620 0.000000
+v -11.128716 16.323317 0.000002
+v -3.688910 11.009729 0.000002
+v -3.217584 11.523291 0.000002
+v -4.016689 10.394541 0.000001
+v -4.180056 9.716894 0.000001
+v -4.168609 9.019926 0.000001
+v -2.632718 11.902533 0.000002
+v -1.971545 12.123316 0.000002
+v 40.000263 -23.844000 0.000000
+v 40.000263 -18.711620 0.000000
+v 41.594418 -18.711620 0.000000
+v 41.552635 -18.611385 0.000000
+v 41.537792 -18.503811 0.000000
+v 41.655529 -18.207760 0.000000
+v 41.590996 -18.295099 0.000000
+v 41.550865 -18.396008 0.000000
+v 41.839405 -18.095594 0.000000
+v 41.946594 -18.078186 0.000000
+v 41.740196 -18.139759 0.000000
+v 42.054680 -18.088682 0.000000
+v 13.601372 12.119150 0.000002
+v 13.600650 12.123316 0.000002
+v 13.612914 12.123316 0.000002
+v 19.656212 9.019926 0.000001
+v 19.656212 9.893988 0.000001
+v 50.317074 -19.047932 0.000000
+v 46.174992 -14.785413 0.000000
+v 41.475014 -16.496065 0.000000
+v 35.322247 0.201824 0.000001
+v 35.369232 0.218925 0.000001
+v 35.476158 -0.221037 0.000001
+v 35.048634 0.953579 0.000001
+v 34.621105 2.128193 0.000001
+v 35.095615 0.970678 0.000001
+v 26.182775 12.322668 0.000002
+v 26.199875 12.275686 0.000002
+v 26.934528 12.596285 0.000002
+v 27.800396 12.858225 0.000002
+v 26.951630 12.549299 0.000002
+v 27.783295 12.905210 0.000002
+v 40.242565 1.513794 0.000001
+v 39.387516 3.863026 0.000001
+v 28.535048 13.178827 0.000002
+v 35.141079 15.530016 0.000002
+v 28.552149 13.131842 0.000002
+v 36.027946 20.211119 0.000002
+v 12.872341 16.323317 0.000002
+v 34.568771 24.220171 0.000002
+v 50.317074 -19.047932 7.500000
+v 34.568771 24.220171 6.571209
+v 36.027946 20.211119 6.701789
+v 12.872341 16.323317 2.500002
+v 12.872247 16.323282 2.500002
+v -11.128716 16.323317 2.500002
+v -11.128716 7.941137 2.500001
+v -12.489828 7.941137 2.500001
+v -12.489828 7.991137 2.500001
+v -13.289828 7.991137 2.500001
+v -13.289828 7.941137 2.500001
+v -13.628716 7.941137 2.500001
+v -13.628716 8.887293 2.500001
+v -37.330448 8.887293 2.500001
+v -37.330448 2.226360 2.500001
+v -37.380447 2.226360 2.500001
+v -37.380447 1.426359 2.500001
+v -37.330448 1.426359 2.500001
+v -37.330448 0.349564 2.500001
+v -37.380447 0.349564 2.500001
+v -37.380447 -0.450436 2.500001
+v -37.330448 -0.450436 2.500001
+v -37.330448 -7.076204 2.500001
+v -35.035789 -7.076204 2.500001
+v -35.035789 -11.479661 2.500000
+v -35.085789 -11.479661 2.500000
+v -35.085789 -12.279661 2.500000
+v -35.035789 -12.279661 2.500000
+v -35.035789 -12.729661 2.500000
+v -37.330448 -12.729661 2.500000
+v -37.330448 -14.446631 2.500000
+v -37.380447 -14.446631 2.500000
+v -37.380447 -15.246632 2.500000
+v -37.330448 -15.246632 2.500000
+v -37.330448 -16.177444 2.500000
+v -37.380447 -16.177444 2.500000
+v -37.380447 -16.977444 2.500000
+v -37.330448 -16.977444 2.500000
+v -37.330448 -23.844000 2.500000
+v 14.948427 -23.844000 2.500000
+v 14.948427 -18.711620 2.500000
+v 16.198427 -18.711620 2.500000
+v 16.198427 -18.761621 2.500000
+v 16.998426 -18.761621 2.500000
+v 16.998426 -18.711620 2.500000
+v 17.448427 -18.711620 2.500000
+v 17.448427 -23.844000 2.500000
+v 40.000263 -23.844000 2.500000
+v 40.000263 -18.711620 2.500000
+v 41.594418 -18.711620 2.500000
+v 42.054680 -18.088682 2.500000
+v 41.946594 -18.078186 2.500000
+v 41.839405 -18.095594 2.500000
+v 41.740196 -18.139759 2.500000
+v 41.655529 -18.207760 2.500000
+v 41.590996 -18.295099 2.500000
+v 41.550865 -18.396008 2.500000
+v 41.537792 -18.503811 2.500000
+v 41.552635 -18.611385 2.500000
+v 41.475014 -16.496065 2.500000
+v 46.174992 -14.785413 2.500000
+v 40.242565 1.513794 2.500001
+v 35.476158 -0.221037 2.500001
+v 35.322247 0.201824 2.500001
+v 35.369232 0.218925 2.500001
+v 35.095615 0.970678 2.500001
+v 35.048634 0.953579 2.500001
+v 34.621105 2.128193 2.500001
+v 39.387516 3.863026 2.500001
+v 35.141079 15.530016 2.500002
+v 28.552149 13.131842 2.500002
+v 28.535048 13.178827 2.500002
+v 27.783295 12.905210 2.500002
+v 27.800396 12.858225 2.500002
+v 26.951630 12.549299 2.500002
+v 26.934528 12.596285 2.500002
+v 26.182775 12.322668 2.500002
+v 26.199875 12.275686 2.500002
+v 19.656212 9.893988 2.500001
+v 19.656212 9.019926 2.500001
+v -4.168609 9.019926 2.500001
+v -1.971545 12.123316 2.500002
+v -2.632718 11.902533 2.500002
+v -3.217584 11.523291 2.500001
+v -3.688910 11.009729 2.500001
+v -4.016689 10.394541 2.500001
+v -4.180056 9.716894 2.500001
+v 13.600650 12.123316 2.497840
+v 13.612914 12.123316 2.500002
+v 13.601372 12.119150 2.497838
+v 13.612912 12.123316 0.000002
+v 13.612914 12.123316 0.000002
+v 13.597350 12.211588 2.500002
+v 13.597360 12.211531 2.500002
+v -30.175529 -19.053444 2.500000
+v -29.775530 -19.053444 2.500000
+v -30.175529 -18.653444 2.500000
+v -22.672579 -21.854776 2.500000
+v -22.272577 -21.854776 2.500000
+v -22.672579 -21.454777 2.500000
+v -30.172609 -12.743353 2.500000
+v -29.775530 -18.653444 2.500000
+v -29.772608 -12.743353 2.500000
+v -30.172609 -12.343353 2.500000
+v -22.675529 -19.053444 2.500000
+v -22.675529 -18.653444 2.500000
+v -22.275530 -19.053444 2.500000
+v -22.272577 -21.454777 2.500000
+v -22.275530 -18.653444 2.500000
+v -18.925529 -19.053444 2.500000
+v -18.925529 -18.653444 2.500000
+v -18.525530 -19.053444 2.500000
+v -30.196814 -6.599760 2.500001
+v -29.796814 -6.599760 2.500001
+v -29.772608 -12.343353 2.500000
+v -30.196814 -6.199760 2.500001
+v -22.672609 -12.743353 2.500000
+v -22.272610 -12.743353 2.500000
+v -22.672609 -12.343353 2.500000
+v -30.181654 -2.480406 2.500001
+v -29.796814 -6.199760 2.500001
+v -30.181654 -2.080406 2.500001
+v -29.781652 -2.480406 2.500001
+v -18.870583 -12.729661 2.500000
+v -18.525530 -18.653444 2.500000
+v -22.272610 -12.343353 2.500000
+v -11.475529 -19.053444 2.500000
+v -11.075529 -19.053444 2.500000
+v -11.475529 -18.653444 2.500000
+v -22.696814 -6.599760 2.500001
+v -22.696814 -6.199760 2.500001
+v -22.296814 -6.599760 2.500001
+v -30.175571 3.836163 2.500001
+v -29.781652 -2.080406 2.500001
+v -30.175571 4.236162 2.500001
+v -29.775572 3.836163 2.500001
+v -29.775572 4.236162 2.500001
+v -22.681652 -2.480406 2.500001
+v -22.296814 -6.199760 2.500001
+v -22.281652 -2.480406 2.500001
+v -22.681652 -2.080406 2.500001
+v -3.975529 -19.053444 2.500000
+v -11.075529 -18.653444 2.500000
+v -3.975529 -18.653444 2.500000
+v -9.485923 -12.729661 2.500000
+v -22.281652 -2.080406 2.500001
+v -18.870583 -2.060263 2.500001
+v -22.675571 3.836163 2.500001
+v -3.575529 -18.653444 2.500000
+v -0.175529 -18.653444 2.500000
+v -3.575529 -19.053444 2.500000
+v -0.175529 -19.053444 2.500000
+v -22.675571 4.236162 2.500001
+v -22.275572 3.836163 2.500001
+v -13.628716 -7.099552 2.500001
+v -11.496814 -6.199760 2.500001
+v -11.496814 -6.599760 2.500001
+v -3.972609 -12.743353 2.500000
+v -15.331446 -2.060263 2.500001
+v -14.531446 -2.110262 2.500001
+v -15.331446 -2.110262 2.500001
+v -11.096814 -6.199760 2.500001
+v -9.485923 -7.099552 2.500001
+v -11.096814 -6.599760 2.500001
+v -14.531446 -2.049547 2.500001
+v -3.572609 -12.743353 2.500000
+v -3.972609 -12.343353 2.500000
+v -13.628716 -2.049547 2.500001
+v -18.925571 3.836163 2.500001
+v -18.925571 4.236162 2.500001
+v -22.275572 4.236162 2.500001
+v -18.525572 3.836163 2.500001
+v 7.327422 -21.854776 2.500000
+v 0.224471 -19.053444 2.500000
+v 7.327422 -21.454777 2.500000
+v -11.481653 -2.480406 2.500001
+v -11.081653 -2.480406 2.500001
+v -11.481653 -2.080406 2.500001
+v -0.172609 -12.743353 2.500000
+v 0.224471 -18.653444 2.500000
+v 0.227391 -12.743353 2.500000
+v -3.572609 -12.343353 2.500000
+v -0.172609 -12.343353 2.500000
+v 7.324471 -19.053444 2.500000
+v 7.324471 -18.653444 2.500000
+v 7.724471 -19.053444 2.500000
+v 7.727422 -21.454777 2.500000
+v -3.996814 -6.599760 2.500001
+v -3.596814 -6.599760 2.500001
+v -3.996814 -6.199760 2.500001
+v 7.727422 -21.854776 2.500000
+v -11.475572 3.836163 2.500001
+v -11.081653 -2.080406 2.500001
+v -18.525572 4.236162 2.500001
+v -11.475572 4.236162 2.500001
+v -11.075572 3.836163 2.500001
+v -0.196814 -6.599760 2.500001
+v -3.981653 -2.480406 2.500001
+v -3.596814 -6.199760 2.500001
+v -0.196814 -6.199760 2.500001
+v 0.203186 -6.599760 2.500001
+v 0.227391 -12.343353 2.500000
+v -3.581653 -2.480406 2.500001
+v -3.981653 -2.080406 2.500001
+v 7.327391 -12.743353 2.500000
+v 7.724471 -18.653444 2.500000
+v 7.327391 -12.343353 2.500000
+v 7.727391 -12.743353 2.500000
+v -11.075572 4.236162 2.500001
+v -0.181653 -2.480406 2.500001
+v 0.203186 -6.199760 2.500001
+v -0.181653 -2.080406 2.500001
+v -3.581653 -2.080406 2.500001
+v 0.218347 -2.480406 2.500001
+v -3.975572 3.836163 2.500001
+v -3.975572 4.236162 2.500001
+v -3.575572 3.836163 2.500001
+v 7.303186 -6.599760 2.500001
+v 7.303186 -6.199760 2.500001
+v 7.703186 -6.599760 2.500001
+v 7.727391 -12.343353 2.500000
+v 14.827391 -12.743353 2.500000
+v 15.227391 -12.743353 2.500000
+v 14.827391 -12.343353 2.500000
+v 22.318348 -19.053444 2.500000
+v -0.175572 3.836163 2.500001
+v 0.218347 -2.080406 2.500001
+v 22.318348 -18.653444 2.500000
+v 22.718348 -19.053444 2.500000
+v 0.224428 3.836163 2.500001
+v -0.175572 4.236162 2.500001
+v -3.575572 4.236162 2.500001
+v 7.318347 -2.480406 2.500001
+v 7.703186 -6.199760 2.500001
+v 7.318347 -2.080406 2.500001
+v 7.718347 -2.480406 2.500001
+v 14.803186 -6.599760 2.500001
+v 14.803186 -6.199760 2.500001
+v 15.203186 -6.599760 2.500001
+v 15.227391 -12.343353 2.500000
+v 22.327391 -12.743353 2.500000
+v 22.718348 -18.653444 2.500000
+v 22.327391 -12.343353 2.500000
+v 22.727390 -12.743353 2.500000
+v 29.818348 -19.053444 2.500000
+v 0.224428 4.236162 2.500001
+v 7.324428 3.836163 2.500001
+v 7.718347 -2.080406 2.500001
+v 29.818348 -18.653444 2.500000
+v 7.724428 3.836163 2.500001
+v 7.324428 4.236162 2.500001
+v 14.818347 -2.480406 2.500001
+v 15.203186 -6.199760 2.500001
+v 14.818347 -2.080406 2.500001
+v 15.218347 -2.480406 2.500001
+v 24.750605 -9.845544 2.500001
+v 22.727390 -12.343353 2.500000
+v 25.582762 -10.460536 2.500000
+v 26.226131 -10.936009 2.500000
+v 26.255848 -10.895800 2.500000
+v 25.612478 -10.420326 2.500000
+v 22.313528 -6.631981 2.500001
+v 28.653147 -12.729661 2.500000
+v 30.218348 -19.053444 2.500000
+v 37.318348 -19.053444 2.500000
+v 31.321690 -12.729661 2.500000
+v 30.218348 -18.653444 2.500000
+v 14.824428 3.836163 2.500001
+v 15.218347 -2.080406 2.500001
+v 7.724428 4.236162 2.500001
+v 37.318348 -18.653444 2.500000
+v 37.718346 -19.053444 2.500000
+v 15.224428 3.836163 2.500001
+v 14.824428 4.236162 2.500001
+v 22.318348 -2.480406 2.500001
+v 24.087997 -4.097775 2.500001
+v 22.318348 -2.080406 2.500001
+v 22.718348 -2.480406 2.500001
+v 22.718348 -2.080406 2.500001
+v 37.718346 -18.653444 2.500000
+v 28.803806 -5.860407 2.500001
+v 29.470652 -6.302355 2.500001
+v 28.776186 -5.902084 2.500001
+v 29.443029 -6.344032 2.500001
+v 20.979113 2.289904 2.500001
+v 20.842304 2.665781 2.500001
+v 15.224428 4.236162 2.500001
+v 21.354990 2.426712 2.500001
+v 40.514694 -14.543727 2.500000
+v 40.377884 -14.167850 2.500000
+v 32.898914 -10.477148 2.500000
+v 40.890572 -14.406919 2.500000
+v 29.464327 -2.603065 2.500001
+v 27.941290 -5.288776 2.500001
+v 29.327518 -2.227188 2.500001
+v 29.840204 -2.466257 2.500001
+v 31.986221 -7.969539 2.500001
+v 21.218182 2.802588 2.500001
+v 37.949543 -7.496031 2.500001
+v 37.812733 -7.120155 2.500001
+v 38.325420 -7.359224 2.500001
+v 40.753761 -14.031042 2.500000
+v 26.899176 4.444630 2.500001
+v 26.762367 4.820507 2.500001
+v 27.275053 4.581438 2.500001
+v 29.703396 -2.090380 2.500001
+v 38.188610 -6.983347 2.500001
+v 27.138245 4.957315 2.500001
+v 32.819241 6.599358 2.500001
+v 32.682430 6.975235 2.500001
+v 33.195118 6.736166 2.500001
+v 33.058308 7.112041 2.500001
+v -22.672579 -21.454777 0.000000
+v -22.672579 -21.854776 0.000000
+v -22.272577 -21.454777 0.000000
+v -22.272577 -21.854776 0.000000
+v -30.175529 -18.653444 0.000000
+v -30.175529 -19.053444 0.000000
+v -29.775530 -18.653444 0.000000
+v -29.775530 -19.053444 0.000000
+v -22.675529 -18.653444 0.000000
+v -22.675529 -19.053444 0.000000
+v -22.275530 -18.653444 0.000000
+v -22.275530 -19.053444 0.000000
+v -18.925529 -18.653444 0.000000
+v -18.925529 -19.053444 0.000000
+v -18.525530 -18.653444 0.000000
+v -18.525530 -19.053444 0.000000
+v -11.475529 -18.653444 0.000000
+v -11.475529 -19.053444 0.000000
+v -11.075529 -18.653444 0.000000
+v -11.075529 -19.053444 0.000000
+v -3.975529 -18.653444 0.000000
+v -3.975529 -19.053444 0.000000
+v -3.575529 -18.653444 0.000000
+v -3.575529 -19.053444 0.000000
+v -0.175529 -18.653444 0.000000
+v -0.175529 -19.053444 0.000000
+v 0.224471 -18.653444 0.000000
+v 0.224471 -19.053444 0.000000
+v -30.172609 -12.343353 0.000001
+v -30.172609 -12.743353 0.000000
+v -29.772608 -12.343353 0.000001
+v -29.772608 -12.743353 0.000000
+v -22.672609 -12.343353 0.000001
+v -22.672609 -12.743353 0.000000
+v -22.272610 -12.343353 0.000001
+v -22.272610 -12.743353 0.000000
+v -18.870583 -12.729661 0.000000
+v -9.485923 -12.729661 0.000000
+v -18.870583 -2.060263 0.000001
+v -9.485923 -7.099552 0.000001
+v -15.331446 -2.060263 0.000001
+v -13.628716 -7.099552 0.000001
+v -15.331446 -2.110262 0.000001
+v -13.628716 -2.049547 0.000001
+v -14.531446 -2.110262 0.000001
+v -14.531446 -2.049547 0.000001
+v -3.972609 -12.343353 0.000001
+v -3.972609 -12.743353 0.000000
+v -3.572609 -12.343353 0.000001
+v -3.572609 -12.743353 0.000000
+v -0.172609 -12.343353 0.000001
+v -0.172609 -12.743353 0.000000
+v 0.227391 -12.343353 0.000001
+v 0.227391 -12.743353 0.000000
+v 7.327422 -21.454777 0.000000
+v 7.327422 -21.854776 0.000000
+v 7.727422 -21.454777 0.000000
+v 7.727422 -21.854776 0.000000
+v 7.324471 -18.653444 0.000000
+v 7.324471 -19.053444 0.000000
+v 7.724471 -18.653444 0.000000
+v 7.724471 -19.053444 0.000000
+v 22.318348 -18.653444 0.000000
+v 22.318348 -19.053444 0.000000
+v 22.718348 -18.653444 0.000000
+v 22.718348 -19.053444 0.000000
+v 29.818348 -18.653444 0.000000
+v 29.818348 -19.053444 0.000000
+v 30.218348 -18.653444 0.000000
+v 30.218348 -19.053444 0.000000
+v 37.318348 -18.653444 0.000000
+v 37.318348 -19.053444 0.000000
+v 37.718346 -18.653444 0.000000
+v 37.718346 -19.053444 0.000000
+v 7.327391 -12.343353 0.000001
+v 7.327391 -12.743353 0.000000
+v 7.727391 -12.343353 0.000001
+v 7.727391 -12.743353 0.000000
+v 14.827391 -12.343353 0.000001
+v 14.827391 -12.743353 0.000000
+v 15.227391 -12.343353 0.000001
+v 15.227391 -12.743353 0.000000
+v 22.327391 -12.343353 0.000001
+v 22.327391 -12.743353 0.000000
+v 22.727390 -12.343353 0.000001
+v 22.727390 -12.743353 0.000000
+v 40.377884 -14.167850 0.000000
+v 40.514694 -14.543727 0.000000
+v 40.753761 -14.031042 0.000000
+v 40.890572 -14.406919 0.000000
+v 24.087997 -4.097775 0.000001
+v 22.313528 -6.631981 0.000001
+v 27.941290 -5.288776 0.000001
+v 24.750605 -9.845544 0.000001
+v 28.803806 -5.860407 0.000001
+v 25.582762 -10.460536 0.000001
+v 28.776186 -5.902084 0.000001
+v 25.612478 -10.420326 0.000001
+v 29.443029 -6.344032 0.000001
+v 26.255848 -10.895800 0.000001
+v 29.470652 -6.302355 0.000001
+v 26.226131 -10.936009 0.000001
+v 31.986221 -7.969539 0.000001
+v 28.653147 -12.729661 0.000000
+v 32.898914 -10.477148 0.000001
+v 31.321690 -12.729661 0.000000
+v -30.196814 -6.199760 0.000001
+v -30.196814 -6.599760 0.000001
+v -29.796814 -6.199760 0.000001
+v -29.796814 -6.599760 0.000001
+v -22.696814 -6.199760 0.000001
+v -22.696814 -6.599760 0.000001
+v -22.296814 -6.199760 0.000001
+v -22.296814 -6.599760 0.000001
+v -30.181654 -2.080406 0.000001
+v -30.181654 -2.480406 0.000001
+v -29.781652 -2.080406 0.000001
+v -29.781652 -2.480406 0.000001
+v -22.681652 -2.080406 0.000001
+v -22.681652 -2.480406 0.000001
+v -22.281652 -2.080406 0.000001
+v -22.281652 -2.480406 0.000001
+v -11.496814 -6.199760 0.000001
+v -11.496814 -6.599760 0.000001
+v -11.096814 -6.199760 0.000001
+v -11.096814 -6.599760 0.000001
+v -3.996814 -6.199760 0.000001
+v -3.996814 -6.599760 0.000001
+v -3.596814 -6.199760 0.000001
+v -3.596814 -6.599760 0.000001
+v -0.196814 -6.199760 0.000001
+v -0.196814 -6.599760 0.000001
+v 0.203186 -6.199760 0.000001
+v 0.203186 -6.599760 0.000001
+v -11.481653 -2.080406 0.000001
+v -11.481653 -2.480406 0.000001
+v -11.081653 -2.080406 0.000001
+v -11.081653 -2.480406 0.000001
+v -3.981653 -2.080406 0.000001
+v -3.981653 -2.480406 0.000001
+v -3.581653 -2.080406 0.000001
+v -3.581653 -2.480406 0.000001
+v -0.181653 -2.080406 0.000001
+v -0.181653 -2.480406 0.000001
+v 0.218347 -2.080406 0.000001
+v 0.218347 -2.480406 0.000001
+v -30.175571 3.836163 0.000001
+v -29.775572 3.836163 0.000001
+v -30.175571 4.236162 0.000001
+v -29.775572 4.236162 0.000001
+v -22.675571 3.836163 0.000001
+v -22.275572 3.836163 0.000001
+v -22.675571 4.236162 0.000001
+v -22.275572 4.236162 0.000001
+v -18.925571 3.836163 0.000001
+v -18.525572 3.836163 0.000001
+v -18.925571 4.236162 0.000001
+v -18.525572 4.236162 0.000001
+v -11.475572 3.836163 0.000001
+v -11.075572 3.836163 0.000001
+v -11.475572 4.236162 0.000001
+v -11.075572 4.236162 0.000001
+v -3.975572 3.836163 0.000001
+v -3.575572 3.836163 0.000001
+v -3.975572 4.236162 0.000001
+v -3.575572 4.236162 0.000001
+v -0.175572 3.836163 0.000001
+v 0.224428 3.836163 0.000001
+v -0.175572 4.236162 0.000001
+v 0.224428 4.236162 0.000001
+v 7.303186 -6.199760 0.000001
+v 7.303186 -6.599760 0.000001
+v 7.703186 -6.199760 0.000001
+v 7.703186 -6.599760 0.000001
+v 14.803186 -6.199760 0.000001
+v 14.803186 -6.599760 0.000001
+v 15.203186 -6.199760 0.000001
+v 15.203186 -6.599760 0.000001
+v 7.318347 -2.080406 0.000001
+v 7.318347 -2.480406 0.000001
+v 7.718347 -2.080406 0.000001
+v 7.718347 -2.480406 0.000001
+v 14.818347 -2.080406 0.000001
+v 14.818347 -2.480406 0.000001
+v 15.218347 -2.080406 0.000001
+v 15.218347 -2.480406 0.000001
+v 22.318348 -2.080406 0.000001
+v 22.318348 -2.480406 0.000001
+v 22.718348 -2.080406 0.000001
+v 22.718348 -2.480406 0.000001
+v 37.812733 -7.120155 0.000001
+v 37.949543 -7.496031 0.000001
+v 38.188610 -6.983347 0.000001
+v 38.325420 -7.359224 0.000001
+v 29.327518 -2.227188 0.000001
+v 29.464327 -2.603065 0.000001
+v 29.703396 -2.090380 0.000001
+v 29.840204 -2.466257 0.000001
+v 20.842304 2.665781 0.000001
+v 20.979113 2.289904 0.000001
+v 21.218182 2.802588 0.000001
+v 21.354990 2.426712 0.000001
+v 7.324428 3.836163 0.000001
+v 7.724428 3.836163 0.000001
+v 7.324428 4.236162 0.000001
+v 7.724428 4.236162 0.000001
+v 14.824428 3.836163 0.000001
+v 15.224428 3.836163 0.000001
+v 14.824428 4.236162 0.000001
+v 15.224428 4.236162 0.000001
+v 26.762367 4.820507 0.000001
+v 26.899176 4.444630 0.000001
+v 27.138245 4.957315 0.000001
+v 27.275053 4.581438 0.000001
+v 32.682430 6.975235 0.000001
+v 32.819241 6.599358 0.000001
+v 33.058308 7.112041 0.000001
+v 33.195118 6.736166 0.000001
+vn -1.0000 0.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn -0.0000 0.0000 -1.0000
+vn 0.0000 -0.0000 1.0000
+vn 0.9397 0.3420 0.0000
+vn 0.7212 -0.6927 0.0000
+vn 0.3303 -0.9394 0.0915
+vn 0.3418 -0.9398 0.0011
+vn 0.3222 -0.9354 0.1455
+vn 0.3420 -0.9397 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0967 0.9953 0.0000
+vn -0.1603 0.9871 0.0000
+vn -0.4067 0.9136 0.0000
+vn -0.6262 0.7797 0.0000
+vn -0.6262 0.7796 0.0000
+vn -0.8043 0.5942 0.0000
+vn -0.8043 0.5943 0.0000
+vn -0.8042 0.5943 0.0000
+vn -0.9292 0.3695 0.0000
+vn -0.9292 0.3696 0.0000
+vn -0.9927 0.1203 0.0000
+vn -0.9927 0.1204 0.0000
+vn -0.9906 -0.1367 0.0000
+vn -0.9906 -0.1366 0.0000
+vn -0.9230 -0.3848 0.0000
+vn -0.9230 -0.3847 0.0000
+vn -0.9231 -0.3847 0.0000
+vn -0.9397 -0.3420 0.0000
+vn -0.3420 0.9397 0.0000
+vn 0.9397 0.3421 0.0000
+vn 0.9397 0.3419 0.0000
+vn -0.3167 0.9485 0.0000
+vn -0.5441 0.8390 0.0000
+vn -0.7368 0.6762 0.0000
+vn -0.8825 0.4702 0.0000
+vn -0.9721 0.2344 0.0000
+vn -0.9999 -0.0164 0.0000
+vn 0.0000 1.0000 0.0023
+vn 0.0000 1.0000 0.0036
+vn 0.9853 0.1707 -0.0000
+vn 0.9854 0.1705 0.0000
+vn 0.9853 0.1708 0.0000
+vn -0.3395 0.9406 0.0000
+vn 0.0000 0.0000 0.0000
+vn -0.3394 0.9406 0.0000
+vn 0.1747 0.0267 -0.9843
+vn 0.1735 0.0306 -0.9844
+vn 0.1734 0.0311 -0.9844
+vn 0.1616 0.0238 -0.9866
+vn 0.1640 0.0242 -0.9862
+vn 0.1735 0.0305 -0.9844
+vn -0.8192 0.5736 0.0000
+vn 0.2953 0.9554 0.0000
+vn -0.7968 -0.6043 0.0000
+vn 0.5524 0.8336 0.0000
+vn -0.5943 -0.8042 0.0000
+vn 0.8336 -0.5524 0.0000
+vn 0.8042 -0.5943 0.0000
+vn 0.8042 -0.5944 0.0000
+vn -0.8335 0.5525 0.0000
+vn -0.8336 0.5524 0.0000
+vn -0.8042 0.5944 0.0000
+vn 0.8192 -0.5736 0.0000
+s 1
+f 2195//106 2196//106 2197//106
+f 2197//106 2196//106 2198//106
+f 2199//107 2195//107 2200//107
+f 2200//107 2195//107 2197//107
+f 2196//108 2201//108 2198//108
+f 2198//108 2201//108 2202//108
+f 2196//109 2203//109 2204//109
+f 2203//109 2205//109 2204//109
+f 2196//109 2206//109 2203//109
+f 2196//109 2207//109 2206//109
+f 2206//109 2207//109 2208//109
+f 2207//109 2209//109 2208//109
+f 2196//109 2210//109 2207//109
+f 2196//109 2211//109 2210//109
+f 2210//109 2211//109 2212//109
+f 2211//109 2213//109 2214//109
+f 2213//109 2215//109 2214//109
+f 2211//109 2216//109 2213//109
+f 2196//109 2217//109 2211//109
+f 2211//109 2217//109 2216//109
+f 2217//109 2218//109 2216//109
+f 2216//109 2218//109 2219//109
+f 2220//109 2221//109 2217//109
+f 2222//109 2223//109 2224//109
+f 2224//109 2223//109 2225//109
+f 2226//109 2227//109 2228//109
+f 2204//109 2229//109 2196//109
+f 2230//109 2231//109 2232//109
+f 2230//109 2233//109 2231//109
+f 2233//109 2234//109 2231//109
+f 2233//109 2235//109 2234//109
+f 2234//109 2235//109 2236//109
+f 2229//109 2237//109 2238//109
+f 2239//109 2237//109 2229//109
+f 2239//109 2240//109 2237//109
+f 2237//109 2241//109 2238//109
+f 2242//109 2243//109 2241//109
+f 2241//109 2243//109 2238//109
+f 2195//109 2244//109 2227//109
+f 2233//109 2244//109 2235//109
+f 2227//109 2244//109 2233//109
+f 2245//109 2246//109 2247//109
+f 2247//109 2246//109 2248//109
+f 2248//109 2246//109 2249//109
+f 2246//109 2250//109 2249//109
+f 2250//109 2251//109 2249//109
+f 2252//109 2201//109 2238//109
+f 2238//109 2201//109 2229//109
+f 2253//109 2254//109 2252//109
+f 2252//109 2254//109 2201//109
+f 2255//109 2256//109 2254//109
+f 2256//109 2257//109 2254//109
+f 2258//109 2257//109 2259//109
+f 2259//109 2257//109 2256//109
+f 2260//109 2261//109 2262//109
+f 2262//109 2261//109 2257//109
+f 2254//109 2263//109 2201//109
+f 2257//109 2263//109 2254//109
+f 2261//109 2263//109 2257//109
+f 2251//109 2264//109 2249//109
+f 2251//109 2265//109 2264//109
+f 2266//109 2267//109 2264//109
+f 2266//109 2268//109 2267//109
+f 2263//109 2269//109 2201//109
+f 2263//109 2270//109 2269//109
+f 2271//109 2270//109 2263//109
+f 2272//109 2273//109 2274//109
+f 2275//109 2276//109 2277//109
+f 2268//109 2278//109 2279//109
+f 2280//109 2281//109 2282//109
+f 2280//109 2283//109 2281//109
+f 2277//109 2284//109 2273//109
+f 2270//109 2284//109 2269//109
+f 2273//109 2284//109 2274//109
+f 2276//109 2285//109 2277//109
+f 2277//109 2285//109 2284//109
+f 2286//109 2287//109 2288//109
+f 2287//109 2289//109 2285//109
+f 2284//109 2289//109 2269//109
+f 2286//109 2289//109 2287//109
+f 2285//109 2289//109 2284//109
+f 2244//109 2199//109 2290//109
+f 2291//109 2290//109 2199//109
+f 2195//109 2199//109 2244//109
+f 2196//109 2195//109 2220//109
+f 2196//109 2220//109 2217//109
+f 2220//109 2195//109 2224//109
+f 2224//109 2195//109 2222//109
+f 2222//109 2195//109 2226//109
+f 2226//109 2195//109 2227//109
+f 2201//109 2196//109 2229//109
+f 2266//109 2289//109 2286//109
+f 2266//109 2286//109 2283//109
+f 2266//109 2283//109 2280//109
+f 2266//109 2280//109 2278//109
+f 2266//109 2278//109 2268//109
+f 2267//109 2249//109 2264//109
+f 2200//110 2197//110 2198//110
+f 2200//110 2198//110 2202//110
+f 2200//110 2202//110 2292//110
+f 2199//111 2200//111 2293//111
+f 2294//111 2293//111 2200//111
+f 2291//111 2199//111 2293//111
+f 2292//111 2294//111 2200//111
+f 2269//111 2289//111 2294//111
+f 2269//111 2294//111 2292//111
+f 2201//112 2269//112 2202//112
+f 2202//112 2269//112 2292//112
+f 2295//113 2293//114 2296//115
+f 2290//116 2291//116 2295//113
+f 2295//113 2291//116 2293//114
+f 2297//108 2290//108 2295//108
+f 2244//108 2290//108 2297//108
+f 2235//117 2244//117 2297//117
+f 2235//117 2297//117 2298//117
+f 2236//108 2235//108 2298//108
+f 2236//108 2298//108 2299//108
+f 2234//106 2236//106 2299//106
+f 2234//106 2299//106 2300//106
+f 2231//108 2234//108 2300//108
+f 2231//108 2300//108 2301//108
+f 2232//117 2231//117 2301//117
+f 2232//117 2301//117 2302//117
+f 2230//108 2232//108 2302//108
+f 2230//108 2302//108 2303//108
+f 2233//106 2230//106 2303//106
+f 2233//106 2303//106 2304//106
+f 2227//108 2233//108 2304//108
+f 2227//108 2304//108 2305//108
+f 2228//117 2227//117 2305//117
+f 2228//117 2305//117 2306//117
+f 2226//108 2228//108 2306//108
+f 2226//108 2306//108 2307//108
+f 2222//117 2226//117 2307//117
+f 2222//117 2307//117 2308//117
+f 2223//107 2222//107 2308//107
+f 2223//107 2308//107 2309//107
+f 2225//117 2223//117 2309//117
+f 2225//117 2309//117 2310//117
+f 2224//108 2225//108 2310//108
+f 2224//108 2310//108 2311//108
+f 2220//117 2224//117 2311//117
+f 2220//117 2311//117 2312//117
+f 2221//107 2220//107 2312//107
+f 2221//107 2312//107 2313//107
+f 2217//117 2221//117 2313//117
+f 2217//117 2313//117 2314//117
+f 2218//107 2217//107 2314//107
+f 2218//107 2314//107 2315//107
+f 2219//117 2218//117 2315//117
+f 2219//117 2315//117 2316//117
+f 2216//108 2219//108 2316//108
+f 2216//108 2316//108 2317//108
+f 2213//117 2216//117 2317//117
+f 2213//117 2317//117 2318//117
+f 2215//107 2213//107 2318//107
+f 2215//107 2318//107 2319//107
+f 2214//117 2215//117 2319//117
+f 2214//117 2319//117 2320//117
+f 2211//108 2214//108 2320//108
+f 2211//108 2320//108 2321//108
+f 2212//117 2211//117 2321//117
+f 2212//117 2321//117 2322//117
+f 2210//108 2212//108 2322//108
+f 2210//108 2322//108 2323//108
+f 2207//117 2210//117 2323//117
+f 2207//117 2323//117 2324//117
+f 2209//107 2207//107 2324//107
+f 2209//107 2324//107 2325//107
+f 2208//117 2209//117 2325//117
+f 2208//117 2325//117 2326//117
+f 2206//108 2208//108 2326//108
+f 2206//108 2326//108 2327//108
+f 2203//117 2206//117 2327//117
+f 2203//117 2327//117 2328//117
+f 2205//107 2203//107 2328//107
+f 2205//107 2328//107 2329//107
+f 2204//117 2205//117 2329//117
+f 2204//117 2329//117 2330//117
+f 2229//107 2204//107 2330//107
+f 2229//107 2330//107 2331//107
+f 2239//106 2229//106 2331//106
+f 2239//106 2331//106 2332//106
+f 2240//107 2239//107 2332//107
+f 2240//107 2332//107 2333//107
+f 2237//117 2240//117 2333//117
+f 2237//117 2333//117 2334//117
+f 2241//107 2237//107 2334//107
+f 2241//107 2334//107 2335//107
+f 2242//106 2241//106 2335//106
+f 2242//106 2335//106 2336//106
+f 2243//107 2242//107 2336//107
+f 2243//107 2336//107 2337//107
+f 2238//117 2243//117 2337//117
+f 2238//117 2337//117 2338//117
+f 2252//107 2238//107 2338//107
+f 2252//107 2338//107 2339//107
+f 2253//106 2252//106 2339//106
+f 2253//106 2339//106 2340//106
+f 2254//107 2253//107 2340//107
+f 2254//107 2340//107 2341//107
+f 2263//118 2261//118 2342//118
+f 2342//118 2261//118 2343//118
+f 2343//119 2260//119 2344//119
+f 2261//119 2260//119 2343//119
+f 2344//120 2262//120 2345//120
+f 2345//121 2262//122 2346//121
+f 2260//120 2262//120 2344//120
+f 2262//122 2257//122 2346//121
+f 2346//123 2258//124 2347//123
+f 2257//125 2258//124 2346//123
+f 2347//126 2259//127 2348//126
+f 2258//127 2259//127 2347//126
+f 2348//128 2256//129 2349//128
+f 2259//129 2256//129 2348//128
+f 2349//130 2255//131 2350//130
+f 2256//131 2255//131 2349//130
+f 2350//132 2254//133 2341//132
+f 2255//134 2254//133 2350//132
+f 2271//135 2263//135 2342//135
+f 2271//135 2342//135 2351//135
+f 2270//136 2271//136 2351//136
+f 2270//136 2351//136 2352//136
+f 2284//135 2270//135 2352//135
+f 2284//135 2352//135 2353//135
+f 2274//116 2284//116 2353//116
+f 2274//116 2353//116 2354//116
+f 2272//135 2274//135 2354//135
+f 2272//135 2354//135 2355//135
+f 2273//136 2272//136 2355//136
+f 2273//136 2355//136 2356//136
+f 2277//135 2273//135 2356//135
+f 2277//135 2356//135 2357//135
+f 2275//116 2277//116 2357//116
+f 2275//116 2357//116 2358//116
+f 2276//135 2275//135 2358//135
+f 2276//135 2358//135 2359//135
+f 2285//136 2276//136 2359//136
+f 2285//136 2359//136 2360//136
+f 2287//135 2285//135 2360//135
+f 2287//135 2360//135 2361//135
+f 2288//116 2287//116 2361//116
+f 2288//116 2361//116 2362//116
+f 2286//135 2288//135 2362//135
+f 2286//135 2362//135 2363//135
+f 2283//116 2286//116 2363//116
+f 2283//116 2363//116 2364//116
+f 2281//111 2283//111 2364//111
+f 2281//111 2364//111 2365//111
+f 2282//116 2281//116 2365//116
+f 2282//116 2365//116 2366//116
+f 2280//135 2282//135 2366//135
+f 2280//135 2366//135 2367//135
+f 2278//116 2280//116 2367//116
+f 2278//116 2367//116 2368//116
+f 2279//137 2278//137 2368//111
+f 2279//137 2368//111 2369//138
+f 2268//116 2279//116 2369//116
+f 2268//116 2369//116 2370//116
+f 2267//117 2268//117 2370//117
+f 2267//117 2370//117 2371//117
+f 2249//108 2267//108 2371//108
+f 2249//108 2371//108 2372//108
+f 2251//139 2250//139 2373//139
+f 2373//139 2250//139 2374//139
+f 2374//140 2246//140 2375//140
+f 2250//140 2246//140 2374//140
+f 2375//141 2245//141 2376//141
+f 2246//141 2245//141 2375//141
+f 2376//142 2247//142 2377//142
+f 2245//142 2247//142 2376//142
+f 2377//143 2248//143 2378//143
+f 2247//143 2248//143 2377//143
+f 2378//144 2249//144 2372//144
+f 2248//144 2249//144 2378//144
+f 2379//145 2251//107 2373//107
+f 2380//146 2379//145 2373//107
+f 2265//107 2251//107 2379//145
+f 2381//147 2264//148 2379//147
+f 2379//147 2264//148 2265//149
+f 2382//150 2264//150 2381//150
+f 2382//150 2381//150 2380//150
+f 2383//151 2382//151 2380//151
+f 2266//151 2383//151 2380//151
+f 2289//152 2380//152 2294//152
+f 2289//152 2266//152 2380//152
+f 2294//153 2296//154 2293//155
+f 2294//153 2384//156 2296//154
+f 2294//153 2385//157 2384//156
+f 2294//153 2380//154 2385//157
+f 2327//109 2326//109 2328//109
+f 2328//109 2326//109 2329//109
+f 2323//109 2322//109 2324//109
+f 2324//109 2322//109 2325//109
+f 2329//109 2386//109 2330//109
+f 2386//109 2387//109 2330//109
+f 2326//109 2388//109 2329//109
+f 2329//109 2388//109 2386//109
+f 2322//109 2320//109 2325//109
+f 2326//109 2320//109 2388//109
+f 2321//109 2320//109 2322//109
+f 2325//109 2320//109 2326//109
+f 2317//109 2316//109 2318//109
+f 2318//109 2316//109 2319//109
+f 2387//109 2389//109 2330//109
+f 2389//109 2390//109 2330//109
+f 2387//109 2391//109 2389//109
+f 2320//109 2392//109 2388//109
+f 2388//109 2392//109 2393//109
+f 2392//109 2394//109 2393//109
+f 2319//109 2395//109 2320//109
+f 2320//109 2395//109 2392//109
+f 2316//109 2395//109 2319//109
+f 2387//109 2396//109 2391//109
+f 2387//109 2397//109 2396//109
+f 2394//109 2397//109 2393//109
+f 2393//109 2397//109 2387//109
+f 2396//109 2398//109 2391//109
+f 2391//109 2398//109 2399//109
+f 2400//109 2401//109 2398//109
+f 2398//109 2401//109 2399//109
+f 2399//109 2401//109 2390//109
+f 2314//109 2313//109 2315//109
+f 2400//109 2402//109 2401//109
+f 2401//109 2403//109 2390//109
+f 2311//109 2310//109 2312//109
+f 2312//109 2310//109 2313//109
+f 2315//109 2404//109 2316//109
+f 2316//109 2404//109 2395//109
+f 2395//109 2405//109 2406//109
+f 2404//109 2405//109 2395//109
+f 2315//109 2407//109 2404//109
+f 2397//109 2408//109 2400//109
+f 2406//109 2408//109 2394//109
+f 2394//109 2408//109 2397//109
+f 2307//109 2306//109 2308//109
+f 2308//109 2306//109 2309//109
+f 2400//109 2409//109 2402//109
+f 2408//109 2409//109 2400//109
+f 2406//109 2410//109 2408//109
+f 2313//109 2411//109 2315//109
+f 2315//109 2411//109 2407//109
+f 2407//109 2411//109 2412//109
+f 2313//109 2413//109 2411//109
+f 2310//109 2413//109 2313//109
+f 2411//109 2414//109 2412//109
+f 2402//109 2415//109 2416//109
+f 2417//109 2415//109 2409//109
+f 2409//109 2415//109 2402//109
+f 2403//109 2418//109 2390//109
+f 2418//109 2419//109 2390//109
+f 2416//109 2420//109 2403//109
+f 2415//109 2420//109 2416//109
+f 2403//109 2420//109 2418//109
+f 2406//109 2421//109 2410//109
+f 2405//109 2421//109 2406//109
+f 2412//109 2421//109 2405//109
+f 2412//109 2422//109 2421//109
+f 2414//109 2422//109 2412//109
+f 2417//109 2423//109 2415//109
+f 2421//109 2423//109 2410//109
+f 2410//109 2423//109 2417//109
+f 2306//109 2424//109 2309//109
+f 2413//109 2424//109 2425//109
+f 2310//109 2424//109 2413//109
+f 2309//109 2424//109 2310//109
+f 2305//109 2426//109 2306//109
+f 2306//109 2426//109 2424//109
+f 2424//109 2427//109 2425//109
+f 2305//109 2428//109 2426//109
+f 2422//109 2429//109 2430//109
+f 2414//109 2429//109 2422//109
+f 2429//109 2431//109 2430//109
+f 2425//109 2432//109 2414//109
+f 2427//109 2432//109 2425//109
+f 2414//109 2432//109 2429//109
+f 2419//109 2433//109 2390//109
+f 2434//109 2435//109 2419//109
+f 2419//109 2435//109 2433//109
+f 2420//109 2436//109 2434//109
+f 2415//109 2436//109 2420//109
+f 2434//109 2436//109 2435//109
+f 2437//109 2438//109 2431//109
+f 2431//109 2438//109 2430//109
+f 2432//109 2439//109 2437//109
+f 2427//109 2439//109 2432//109
+f 2440//109 2441//109 2442//109
+f 2442//109 2441//109 2443//109
+f 2428//109 2444//109 2427//109
+f 2305//109 2444//109 2428//109
+f 2427//109 2444//109 2439//109
+f 2439//109 2445//109 2437//109
+f 2446//109 2447//109 2448//109
+f 2435//109 2449//109 2440//109
+f 2436//109 2449//109 2435//109
+f 2450//109 2451//109 2452//109
+f 2453//109 2454//109 2455//109
+f 2450//109 2456//109 2451//109
+f 2440//109 2457//109 2441//109
+f 2449//109 2457//109 2440//109
+f 2436//109 2458//109 2449//109
+f 2454//109 2458//109 2436//109
+f 2446//109 2459//109 2447//109
+f 2437//109 2460//109 2438//109
+f 2445//109 2460//109 2437//109
+f 2445//109 2461//109 2460//109
+f 2462//109 2461//109 2445//109
+f 2438//109 2463//109 2450//109
+f 2460//109 2463//109 2438//109
+f 2442//109 2464//109 2433//109
+f 2465//109 2464//109 2443//109
+f 2443//109 2464//109 2442//109
+f 2433//109 2464//109 2390//109
+f 2465//109 2466//109 2464//109
+f 2459//109 2467//109 2447//109
+f 2447//109 2467//109 2453//109
+f 2453//109 2468//109 2454//109
+f 2467//109 2468//109 2453//109
+f 2459//109 2469//109 2467//109
+f 2457//109 2470//109 2441//109
+f 2441//109 2470//109 2471//109
+f 2470//109 2472//109 2471//109
+f 2473//109 2474//109 2457//109
+f 2457//109 2474//109 2470//109
+f 2465//109 2475//109 2466//109
+f 2471//109 2476//109 2465//109
+f 2472//109 2476//109 2471//109
+f 2465//109 2476//109 2475//109
+f 2475//109 2477//109 2466//109
+f 2466//109 2477//109 2478//109
+f 2454//109 2479//109 2458//109
+f 2479//109 2480//109 2458//109
+f 2458//109 2480//109 2473//109
+f 2454//109 2481//109 2479//109
+f 2464//109 2331//109 2390//109
+f 2390//109 2331//109 2330//109
+f 2478//109 2331//109 2482//109
+f 2482//109 2331//109 2464//109
+f 2450//109 2483//109 2456//109
+f 2459//109 2483//109 2469//109
+f 2463//109 2483//109 2450//109
+f 2469//109 2483//109 2484//109
+f 2456//109 2483//109 2459//109
+f 2485//109 2483//109 2463//109
+f 2485//109 2486//109 2483//109
+f 2483//109 2487//109 2484//109
+f 2480//109 2488//109 2473//109
+f 2473//109 2488//109 2474//109
+f 2481//109 2489//109 2490//109
+f 2468//109 2489//109 2454//109
+f 2454//109 2489//109 2481//109
+f 2490//109 2491//109 2480//109
+f 2480//109 2491//109 2488//109
+f 2474//109 2492//109 2493//109
+f 2488//109 2492//109 2474//109
+f 2489//109 2494//109 2490//109
+f 2490//109 2494//109 2491//109
+f 2484//109 2495//109 2468//109
+f 2468//109 2495//109 2489//109
+f 2487//109 2495//109 2484//109
+f 2485//109 2303//109 2486//109
+f 2493//109 2496//109 2472//109
+f 2472//109 2496//109 2476//109
+f 2476//109 2496//109 2497//109
+f 2303//109 2302//109 2486//109
+f 2493//109 2498//109 2496//109
+f 2496//109 2499//109 2497//109
+f 2462//109 2304//109 2461//109
+f 2444//109 2304//109 2462//109
+f 2461//109 2304//109 2485//109
+f 2485//109 2304//109 2303//109
+f 2302//109 2299//109 2486//109
+f 2301//109 2300//109 2302//109
+f 2302//109 2300//109 2299//109
+f 2497//109 2332//109 2477//109
+f 2477//109 2332//109 2478//109
+f 2478//109 2332//109 2331//109
+f 2299//109 2298//109 2486//109
+f 2486//109 2298//109 2500//109
+f 2491//109 2501//109 2502//109
+f 2494//109 2501//109 2491//109
+f 2494//109 2503//109 2501//109
+f 2504//109 2503//109 2494//109
+f 2501//109 2505//109 2502//109
+f 2333//109 2335//109 2334//109
+f 2333//109 2336//109 2335//109
+f 2495//109 2506//109 2504//109
+f 2487//109 2506//109 2495//109
+f 2487//109 2507//109 2506//109
+f 2500//109 2507//109 2487//109
+f 2298//109 2507//109 2500//109
+f 2504//109 2508//109 2503//109
+f 2506//109 2508//109 2504//109
+f 2493//109 2509//109 2498//109
+f 2502//109 2509//109 2492//109
+f 2492//109 2509//109 2493//109
+f 2505//109 2510//109 2502//109
+f 2502//109 2510//109 2509//109
+f 2498//109 2511//109 2512//109
+f 2509//109 2511//109 2498//109
+f 2499//109 2513//109 2497//109
+f 2497//109 2513//109 2332//109
+f 2513//109 2514//109 2332//109
+f 2332//109 2514//109 2333//109
+f 2336//109 2514//109 2337//109
+f 2333//109 2514//109 2336//109
+f 2512//109 2515//109 2499//109
+f 2499//109 2515//109 2513//109
+f 2337//109 2516//109 2338//109
+f 2503//109 2517//109 2518//109
+f 2508//109 2517//109 2503//109
+f 2337//109 2519//109 2516//109
+f 2516//109 2520//109 2338//109
+f 2517//109 2521//109 2518//109
+f 2508//109 2522//109 2517//109
+f 2523//109 2522//109 2508//109
+f 2505//109 2524//109 2510//109
+f 2510//109 2524//109 2525//109
+f 2298//109 2372//109 2507//109
+f 2523//109 2372//109 2522//109
+f 2507//109 2372//109 2523//109
+f 2521//109 2526//109 2518//109
+f 2518//109 2526//109 2505//109
+f 2505//109 2526//109 2524//109
+f 2524//109 2527//109 2525//109
+f 2298//109 2378//109 2372//109
+f 2297//109 2377//109 2298//109
+f 2298//109 2377//109 2378//109
+f 2297//109 2376//109 2377//109
+f 2511//109 2528//109 2512//109
+f 2512//109 2528//109 2515//109
+f 2297//109 2375//109 2376//109
+f 2511//109 2529//109 2528//109
+f 2525//109 2529//109 2511//109
+f 2527//109 2529//109 2525//109
+f 2515//109 2530//109 2531//109
+f 2528//109 2530//109 2515//109
+f 2297//109 2374//109 2375//109
+f 2514//109 2532//109 2337//109
+f 2519//109 2532//109 2533//109
+f 2337//109 2532//109 2519//109
+f 2514//109 2534//109 2532//109
+f 2531//109 2534//109 2514//109
+f 2532//109 2535//109 2533//109
+f 2297//109 2373//109 2374//109
+f 2520//109 2536//109 2338//109
+f 2537//109 2538//109 2521//109
+f 2526//109 2538//109 2539//109
+f 2521//109 2538//109 2526//109
+f 2520//109 2540//109 2536//109
+f 2533//109 2540//109 2520//109
+f 2538//109 2541//109 2539//109
+f 2537//109 2542//109 2538//109
+f 2527//109 2543//109 2529//109
+f 2529//109 2543//109 2544//109
+f 2541//109 2545//109 2539//109
+f 2527//109 2545//109 2543//109
+f 2539//109 2545//109 2527//109
+f 2543//109 2546//109 2544//109
+f 2534//109 2547//109 2548//109
+f 2547//109 2549//109 2548//109
+f 2549//109 2550//109 2548//109
+f 2548//109 2550//109 2535//109
+f 2549//109 2551//109 2550//109
+f 2552//109 2551//109 2549//109
+f 2531//109 2553//109 2534//109
+f 2534//109 2553//109 2547//109
+f 2544//109 2553//109 2530//109
+f 2530//109 2553//109 2531//109
+f 2535//109 2554//109 2533//109
+f 2533//109 2554//109 2540//109
+f 2550//109 2554//109 2535//109
+f 2536//109 2339//109 2338//109
+f 2555//109 2339//109 2536//109
+f 2555//109 2556//109 2339//109
+f 2554//109 2557//109 2540//109
+f 2540//109 2557//109 2558//109
+f 2541//109 2559//109 2545//109
+f 2545//109 2559//109 2560//109
+f 2561//109 2559//109 2541//109
+f 2557//109 2562//109 2558//109
+f 2555//109 2562//109 2556//109
+f 2558//109 2562//109 2555//109
+f 2556//109 2563//109 2339//109
+f 2559//109 2564//109 2560//109
+f 2561//109 2565//109 2559//109
+f 2544//109 2566//109 2553//109
+f 2546//109 2566//109 2544//109
+f 2566//109 2567//109 2553//109
+f 2546//109 2568//109 2566//109
+f 2560//109 2568//109 2546//109
+f 2566//109 2569//109 2567//109
+f 2569//109 2570//109 2567//109
+f 2571//109 2340//109 2563//109
+f 2563//109 2340//109 2339//109
+f 2340//109 2350//109 2341//109
+f 2340//109 2349//109 2350//109
+f 2340//109 2348//109 2349//109
+f 2572//109 2573//109 2574//109
+f 2574//109 2573//109 2575//109
+f 2564//109 2576//109 2560//109
+f 2560//109 2576//109 2568//109
+f 2340//109 2347//109 2348//109
+f 2564//109 2577//109 2576//109
+f 2578//109 2577//109 2564//109
+f 2576//109 2579//109 2568//109
+f 2568//109 2579//109 2570//109
+f 2340//109 2351//109 2347//109
+f 2343//109 2351//109 2342//109
+f 2344//109 2351//109 2343//109
+f 2345//109 2351//109 2344//109
+f 2346//109 2351//109 2345//109
+f 2347//109 2351//109 2346//109
+f 2340//109 2580//109 2351//109
+f 2562//109 2580//109 2571//109
+f 2571//109 2580//109 2340//109
+f 2562//109 2581//109 2580//109
+f 2557//109 2581//109 2562//109
+f 2582//109 2581//109 2557//109
+f 2580//109 2583//109 2351//109
+f 2572//109 2584//109 2573//109
+f 2585//109 2584//109 2572//109
+f 2585//109 2586//109 2584//109
+f 2570//109 2586//109 2567//109
+f 2567//109 2586//109 2585//109
+f 2573//109 2587//109 2588//109
+f 2584//109 2587//109 2573//109
+f 2578//109 2371//109 2577//109
+f 2577//109 2371//109 2589//109
+f 2373//109 2296//109 2384//109
+f 2297//109 2296//109 2373//109
+f 2297//109 2295//109 2296//109
+f 2582//109 2590//109 2581//109
+f 2582//109 2591//109 2590//109
+f 2588//109 2591//109 2582//109
+f 2590//109 2592//109 2581//109
+f 2581//109 2592//109 2593//109
+f 2570//109 2594//109 2586//109
+f 2579//109 2594//109 2570//109
+f 2589//109 2594//109 2579//109
+f 2583//109 2352//109 2351//109
+f 2592//109 2352//109 2593//109
+f 2593//109 2352//109 2583//109
+f 2371//109 2595//109 2589//109
+f 2589//109 2595//109 2594//109
+f 2594//109 2596//109 2586//109
+f 2586//109 2596//109 2597//109
+f 2587//109 2354//109 2588//109
+f 2588//109 2354//109 2591//109
+f 2591//109 2354//109 2598//109
+f 2597//109 2354//109 2587//109
+f 2597//109 2355//109 2354//109
+f 2597//109 2358//109 2355//109
+f 2355//109 2357//109 2356//109
+f 2358//109 2357//109 2355//109
+f 2596//109 2359//109 2597//109
+f 2597//109 2359//109 2358//109
+f 2595//109 2369//109 2599//109
+f 2371//109 2369//109 2595//109
+f 2370//109 2369//109 2371//109
+f 2599//109 2600//109 2596//109
+f 2596//109 2600//109 2359//109
+f 2369//109 2366//109 2599//109
+f 2368//109 2366//109 2369//109
+f 2368//109 2367//109 2366//109
+f 2599//109 2601//109 2600//109
+f 2600//109 2602//109 2359//109
+f 2366//109 2365//109 2599//109
+f 2599//109 2365//109 2601//109
+f 2601//109 2362//109 2603//109
+f 2365//109 2362//109 2601//109
+f 2365//109 2363//109 2362//109
+f 2364//109 2363//109 2365//109
+f 2354//109 2353//109 2598//109
+f 2592//109 2353//109 2352//109
+f 2598//109 2353//109 2592//109
+f 2602//109 2360//109 2359//109
+f 2603//109 2360//109 2602//109
+f 2362//109 2361//109 2603//109
+f 2603//109 2361//109 2360//109
+f 2305//109 2304//109 2444//109
+f 2372//109 2371//109 2522//109
+f 2522//109 2371//109 2537//109
+f 2537//109 2371//109 2542//109
+f 2542//109 2371//109 2561//109
+f 2561//109 2371//109 2565//109
+f 2565//109 2371//109 2578//109
+f 2380//109 2373//109 2385//109
+f 2385//109 2373//109 2384//109
+f 2438//109 2415//109 2430//109
+f 2430//109 2415//109 2423//109
+f 2454//109 2446//109 2455//109
+f 2455//109 2446//109 2448//109
+f 2380//158 2381//158 2379//158
+f 2604//106 2605//106 2391//106
+f 2391//106 2605//106 2389//106
+f 2606//107 2604//107 2399//107
+f 2399//107 2604//107 2391//107
+f 2605//108 2607//108 2389//108
+f 2389//108 2607//108 2390//108
+f 2607//117 2606//117 2390//117
+f 2390//117 2606//117 2399//117
+f 2608//106 2609//106 2388//106
+f 2388//106 2609//106 2386//106
+f 2610//107 2608//107 2393//107
+f 2393//107 2608//107 2388//107
+f 2609//108 2611//108 2386//108
+f 2386//108 2611//108 2387//108
+f 2611//117 2610//117 2387//117
+f 2387//117 2610//117 2393//117
+f 2612//106 2613//106 2397//106
+f 2397//106 2613//106 2396//106
+f 2614//107 2612//107 2400//107
+f 2400//107 2612//107 2397//107
+f 2613//108 2615//108 2396//108
+f 2396//108 2615//108 2398//108
+f 2615//117 2614//117 2398//117
+f 2398//117 2614//117 2400//117
+f 2616//106 2617//106 2402//106
+f 2402//106 2617//106 2401//106
+f 2618//107 2616//107 2416//107
+f 2416//107 2616//107 2402//107
+f 2617//108 2619//108 2401//108
+f 2401//108 2619//108 2403//108
+f 2619//117 2618//117 2403//117
+f 2403//117 2618//117 2416//117
+f 2620//106 2621//106 2420//106
+f 2420//106 2621//106 2418//106
+f 2622//107 2620//107 2434//107
+f 2434//107 2620//107 2420//107
+f 2621//108 2623//108 2418//108
+f 2418//108 2623//108 2419//108
+f 2623//117 2622//117 2419//117
+f 2419//117 2622//117 2434//117
+f 2624//106 2625//106 2435//106
+f 2435//106 2625//106 2433//106
+f 2626//107 2624//107 2440//107
+f 2440//107 2624//107 2435//107
+f 2625//108 2627//108 2433//108
+f 2433//108 2627//108 2442//108
+f 2627//117 2626//117 2442//117
+f 2442//117 2626//117 2440//117
+f 2628//106 2629//106 2441//106
+f 2441//106 2629//106 2443//106
+f 2630//107 2628//107 2471//107
+f 2471//107 2628//107 2441//107
+f 2629//108 2631//108 2443//108
+f 2443//108 2631//108 2465//108
+f 2631//117 2630//117 2465//117
+f 2465//117 2630//117 2471//117
+f 2632//106 2633//106 2395//106
+f 2395//106 2633//106 2392//106
+f 2634//107 2632//107 2406//107
+f 2406//107 2632//107 2395//107
+f 2633//108 2635//108 2392//108
+f 2392//108 2635//108 2394//108
+f 2635//117 2634//117 2394//117
+f 2394//117 2634//117 2406//117
+f 2636//106 2637//106 2410//106
+f 2410//106 2637//106 2408//106
+f 2638//107 2636//107 2417//107
+f 2417//107 2636//107 2410//107
+f 2637//108 2639//108 2408//108
+f 2408//108 2639//108 2409//108
+f 2639//117 2638//117 2409//117
+f 2409//117 2638//117 2417//117
+f 2640//108 2641//108 2415//108
+f 2415//108 2641//108 2436//108
+f 2642//106 2640//106 2438//106
+f 2438//106 2640//106 2415//106
+f 2641//117 2643//117 2436//117
+f 2436//117 2643//117 2454//117
+f 2644//107 2642//107 2450//107
+f 2450//107 2642//107 2438//107
+f 2643//107 2645//107 2454//107
+f 2454//107 2645//107 2446//107
+f 2646//117 2644//117 2452//117
+f 2452//117 2644//117 2450//117
+f 2645//117 2647//117 2446//117
+f 2446//117 2647//117 2459//117
+f 2648//107 2646//107 2451//107
+f 2451//107 2646//107 2452//107
+f 2647//107 2649//107 2459//107
+f 2459//107 2649//107 2456//107
+f 2649//106 2648//106 2456//106
+f 2456//106 2648//106 2451//106
+f 2650//106 2651//106 2458//106
+f 2458//106 2651//106 2449//106
+f 2652//107 2650//107 2473//107
+f 2473//107 2650//107 2458//107
+f 2651//108 2653//108 2449//108
+f 2449//108 2653//108 2457//108
+f 2653//117 2652//117 2457//117
+f 2457//117 2652//117 2473//117
+f 2654//106 2655//106 2474//106
+f 2474//106 2655//106 2470//106
+f 2656//107 2654//107 2493//107
+f 2493//107 2654//107 2474//107
+f 2655//108 2657//108 2470//108
+f 2470//108 2657//108 2472//108
+f 2657//117 2656//117 2472//117
+f 2472//117 2656//117 2493//117
+f 2658//106 2659//106 2466//106
+f 2466//106 2659//106 2464//106
+f 2660//107 2658//107 2478//107
+f 2478//107 2658//107 2466//107
+f 2659//108 2661//108 2464//108
+f 2464//108 2661//108 2482//108
+f 2661//117 2660//117 2482//117
+f 2482//117 2660//117 2478//117
+f 2662//106 2663//106 2476//106
+f 2476//106 2663//106 2475//106
+f 2664//107 2662//107 2497//107
+f 2497//107 2662//107 2476//107
+f 2663//108 2665//108 2475//108
+f 2475//108 2665//108 2477//108
+f 2665//117 2664//117 2477//117
+f 2477//117 2664//117 2497//117
+f 2666//106 2667//106 2519//106
+f 2519//106 2667//106 2516//106
+f 2668//107 2666//107 2533//107
+f 2533//107 2666//107 2519//107
+f 2667//108 2669//108 2516//108
+f 2516//108 2669//108 2520//108
+f 2669//117 2668//117 2520//117
+f 2520//117 2668//117 2533//117
+f 2670//106 2671//106 2540//106
+f 2540//106 2671//106 2536//106
+f 2672//107 2670//107 2558//107
+f 2558//107 2670//107 2540//107
+f 2671//108 2673//108 2536//108
+f 2536//108 2673//108 2555//108
+f 2673//117 2672//117 2555//117
+f 2555//117 2672//117 2558//117
+f 2674//106 2675//106 2562//106
+f 2562//106 2675//106 2556//106
+f 2676//107 2674//107 2571//107
+f 2571//107 2674//107 2562//107
+f 2675//108 2677//108 2556//108
+f 2556//108 2677//108 2563//108
+f 2677//117 2676//117 2563//117
+f 2563//117 2676//117 2571//117
+f 2678//106 2679//106 2498//106
+f 2498//106 2679//106 2496//106
+f 2680//107 2678//107 2512//107
+f 2512//107 2678//107 2498//107
+f 2679//108 2681//108 2496//108
+f 2496//108 2681//108 2499//108
+f 2681//117 2680//117 2499//117
+f 2499//117 2680//117 2512//117
+f 2682//106 2683//106 2515//106
+f 2515//106 2683//106 2513//106
+f 2684//107 2682//107 2531//107
+f 2531//107 2682//107 2515//107
+f 2683//108 2685//108 2513//108
+f 2513//108 2685//108 2514//108
+f 2685//117 2684//117 2514//117
+f 2514//117 2684//117 2531//117
+f 2686//106 2687//106 2534//106
+f 2534//106 2687//106 2532//106
+f 2688//107 2686//107 2548//107
+f 2548//107 2686//107 2534//107
+f 2687//108 2689//108 2532//108
+f 2532//108 2689//108 2535//108
+f 2689//117 2688//117 2535//117
+f 2535//117 2688//117 2548//117
+f 2690//135 2691//135 2581//135
+f 2581//135 2691//135 2580//135
+f 2692//136 2690//136 2593//136
+f 2593//136 2690//136 2581//136
+f 2691//116 2693//116 2580//116
+f 2580//116 2693//116 2583//116
+f 2693//111 2692//111 2583//111
+f 2583//111 2692//111 2593//111
+f 2694//159 2695//159 2567//159
+f 2567//159 2695//159 2553//159
+f 2696//160 2694//160 2567//160
+f 2696//160 2567//160 2585//160
+f 2695//161 2697//161 2553//161
+f 2553//161 2697//161 2547//161
+f 2698//162 2696//162 2585//162
+f 2698//162 2585//162 2572//162
+f 2697//163 2699//163 2547//163
+f 2547//163 2699//163 2549//163
+f 2700//164 2698//164 2572//164
+f 2700//164 2572//164 2574//164
+f 2699//165 2701//165 2549//166
+f 2549//166 2701//165 2552//166
+f 2702//162 2700//162 2574//162
+f 2702//162 2574//162 2575//162
+f 2701//163 2703//163 2552//163
+f 2552//163 2703//163 2551//163
+f 2704//167 2702//167 2575//168
+f 2704//167 2575//168 2573//168
+f 2703//124 2705//124 2551//169
+f 2551//169 2705//124 2550//169
+f 2706//162 2704//162 2573//162
+f 2706//162 2573//162 2588//162
+f 2705//163 2707//163 2550//163
+f 2550//163 2707//163 2554//163
+f 2708//111 2706//111 2588//111
+f 2708//111 2588//111 2582//111
+f 2707//108 2709//108 2554//108
+f 2554//108 2709//108 2557//108
+f 2709//170 2708//170 2557//170
+f 2557//170 2708//170 2582//170
+f 2710//106 2711//106 2407//106
+f 2407//106 2711//106 2404//106
+f 2712//107 2710//107 2412//107
+f 2412//107 2710//107 2407//107
+f 2711//108 2713//108 2404//108
+f 2404//108 2713//108 2405//108
+f 2713//117 2712//117 2405//117
+f 2405//117 2712//117 2412//117
+f 2714//106 2715//106 2422//106
+f 2422//106 2715//106 2421//106
+f 2716//107 2714//107 2430//107
+f 2430//107 2714//107 2422//107
+f 2715//108 2717//108 2421//108
+f 2421//108 2717//108 2423//108
+f 2717//117 2716//117 2423//117
+f 2423//117 2716//117 2430//117
+f 2718//106 2719//106 2413//106
+f 2413//106 2719//106 2411//106
+f 2720//107 2718//107 2425//107
+f 2425//107 2718//107 2413//107
+f 2719//108 2721//108 2411//108
+f 2411//108 2721//108 2414//108
+f 2721//117 2720//117 2414//117
+f 2414//117 2720//117 2425//117
+f 2722//106 2723//106 2432//106
+f 2432//106 2723//106 2429//106
+f 2724//107 2722//107 2437//107
+f 2437//107 2722//107 2432//107
+f 2723//108 2725//108 2429//108
+f 2429//108 2725//108 2431//108
+f 2725//117 2724//117 2431//117
+f 2431//117 2724//117 2437//117
+f 2726//106 2727//106 2447//106
+f 2447//106 2727//106 2448//106
+f 2728//107 2726//107 2453//107
+f 2453//107 2726//107 2447//107
+f 2727//108 2729//108 2448//108
+f 2448//108 2729//108 2455//108
+f 2729//117 2728//117 2455//117
+f 2455//117 2728//117 2453//117
+f 2730//106 2731//106 2481//106
+f 2481//106 2731//106 2479//106
+f 2732//107 2730//107 2490//107
+f 2490//107 2730//107 2481//107
+f 2731//108 2733//108 2479//108
+f 2479//108 2733//108 2480//108
+f 2733//117 2732//117 2480//117
+f 2480//117 2732//117 2490//117
+f 2734//106 2735//106 2491//106
+f 2491//106 2735//106 2488//106
+f 2736//107 2734//107 2502//107
+f 2502//107 2734//107 2491//107
+f 2735//108 2737//108 2488//108
+f 2488//108 2737//108 2492//108
+f 2737//117 2736//117 2492//117
+f 2492//117 2736//117 2502//117
+f 2738//106 2739//106 2469//106
+f 2469//106 2739//106 2467//106
+f 2740//107 2738//107 2484//107
+f 2484//107 2738//107 2469//107
+f 2739//108 2741//108 2467//108
+f 2467//108 2741//108 2468//108
+f 2741//117 2740//117 2468//117
+f 2468//117 2740//117 2484//117
+f 2742//106 2743//106 2495//106
+f 2495//106 2743//106 2489//106
+f 2744//107 2742//107 2504//107
+f 2504//107 2742//107 2495//107
+f 2743//108 2745//108 2489//108
+f 2489//108 2745//108 2494//108
+f 2745//117 2744//117 2494//117
+f 2494//117 2744//117 2504//117
+f 2746//106 2747//106 2503//106
+f 2503//106 2747//106 2501//106
+f 2748//107 2746//107 2518//107
+f 2518//107 2746//107 2503//107
+f 2747//108 2749//108 2501//108
+f 2501//108 2749//108 2505//108
+f 2749//117 2748//117 2505//117
+f 2505//117 2748//117 2518//117
+f 2750//108 2751//108 2424//108
+f 2424//108 2751//108 2427//108
+f 2752//106 2750//106 2426//106
+f 2426//106 2750//106 2424//106
+f 2751//117 2753//117 2427//117
+f 2427//117 2753//117 2428//117
+f 2753//107 2752//107 2428//107
+f 2428//107 2752//107 2426//107
+f 2754//108 2755//108 2439//108
+f 2439//108 2755//108 2445//108
+f 2756//106 2754//106 2444//106
+f 2444//106 2754//106 2439//106
+f 2755//117 2757//117 2445//117
+f 2445//117 2757//117 2462//117
+f 2757//107 2756//107 2462//107
+f 2462//107 2756//107 2444//107
+f 2758//108 2759//108 2460//108
+f 2460//108 2759//108 2463//108
+f 2760//106 2758//106 2461//106
+f 2461//106 2758//106 2460//106
+f 2759//117 2761//117 2463//117
+f 2463//117 2761//117 2485//117
+f 2761//107 2760//107 2485//107
+f 2485//107 2760//107 2461//107
+f 2762//108 2763//108 2483//108
+f 2483//108 2763//108 2487//108
+f 2764//106 2762//106 2486//106
+f 2486//106 2762//106 2483//106
+f 2763//117 2765//117 2487//117
+f 2487//117 2765//117 2500//117
+f 2765//107 2764//107 2500//107
+f 2500//107 2764//107 2486//107
+f 2766//108 2767//108 2506//108
+f 2506//108 2767//108 2508//108
+f 2768//106 2766//106 2507//106
+f 2507//106 2766//106 2506//106
+f 2767//117 2769//117 2508//117
+f 2508//117 2769//117 2523//117
+f 2769//107 2768//107 2523//107
+f 2523//107 2768//107 2507//107
+f 2770//108 2771//108 2517//108
+f 2517//108 2771//108 2521//108
+f 2772//106 2770//106 2522//106
+f 2522//106 2770//106 2517//106
+f 2771//117 2773//117 2521//117
+f 2521//117 2773//117 2537//117
+f 2773//107 2772//107 2537//107
+f 2537//107 2772//107 2522//107
+f 2774//106 2775//106 2510//106
+f 2510//106 2775//106 2509//106
+f 2776//107 2774//107 2525//107
+f 2525//107 2774//107 2510//107
+f 2775//108 2777//108 2509//108
+f 2509//108 2777//108 2511//108
+f 2777//117 2776//117 2511//117
+f 2511//117 2776//117 2525//117
+f 2778//106 2779//106 2529//106
+f 2529//106 2779//106 2528//106
+f 2780//107 2778//107 2544//107
+f 2544//107 2778//107 2529//107
+f 2779//108 2781//108 2528//108
+f 2528//108 2781//108 2530//108
+f 2781//117 2780//117 2530//117
+f 2530//117 2780//117 2544//117
+f 2782//106 2783//106 2526//106
+f 2526//106 2783//106 2524//106
+f 2784//107 2782//107 2539//107
+f 2539//107 2782//107 2526//107
+f 2783//108 2785//108 2524//108
+f 2524//108 2785//108 2527//108
+f 2785//117 2784//117 2527//117
+f 2527//117 2784//117 2539//117
+f 2786//106 2787//106 2545//106
+f 2545//106 2787//106 2543//106
+f 2788//107 2786//107 2560//107
+f 2560//107 2786//107 2545//107
+f 2787//108 2789//108 2543//108
+f 2543//108 2789//108 2546//108
+f 2789//117 2788//117 2546//117
+f 2546//117 2788//117 2560//117
+f 2790//106 2791//106 2568//106
+f 2568//106 2791//106 2566//106
+f 2792//107 2790//107 2570//107
+f 2570//107 2790//107 2568//107
+f 2791//108 2793//108 2566//108
+f 2566//108 2793//108 2569//108
+f 2793//117 2792//117 2569//117
+f 2569//117 2792//117 2570//117
+f 2794//135 2795//135 2591//135
+f 2591//135 2795//135 2590//135
+f 2796//136 2794//136 2598//136
+f 2598//136 2794//136 2591//136
+f 2795//116 2797//116 2590//116
+f 2590//116 2797//116 2592//116
+f 2797//111 2796//111 2592//111
+f 2592//111 2796//111 2598//111
+f 2798//135 2799//135 2586//135
+f 2586//135 2799//135 2584//135
+f 2800//136 2798//136 2597//136
+f 2597//136 2798//136 2586//136
+f 2799//116 2801//116 2584//116
+f 2584//116 2801//116 2587//116
+f 2801//111 2800//111 2587//111
+f 2587//111 2800//111 2597//111
+f 2802//135 2803//135 2577//135
+f 2577//135 2803//135 2576//135
+f 2804//136 2802//136 2589//136
+f 2589//136 2802//136 2577//136
+f 2803//116 2805//116 2576//116
+f 2576//116 2805//116 2579//116
+f 2805//111 2804//111 2579//111
+f 2579//111 2804//111 2589//111
+f 2806//108 2807//108 2538//108
+f 2538//108 2807//108 2541//108
+f 2808//106 2806//106 2542//106
+f 2542//106 2806//106 2538//106
+f 2807//117 2809//117 2541//117
+f 2541//117 2809//117 2561//117
+f 2809//107 2808//107 2561//107
+f 2561//107 2808//107 2542//107
+f 2810//108 2811//108 2559//108
+f 2559//108 2811//108 2564//108
+f 2812//106 2810//106 2565//106
+f 2565//106 2810//106 2559//106
+f 2811//117 2813//117 2564//117
+f 2564//117 2813//117 2578//117
+f 2813//107 2812//107 2578//107
+f 2578//107 2812//107 2565//107
+f 2814//135 2815//135 2595//135
+f 2595//135 2815//135 2594//135
+f 2816//136 2814//136 2599//136
+f 2599//136 2814//136 2595//136
+f 2815//116 2817//116 2594//116
+f 2594//116 2817//116 2596//116
+f 2817//111 2816//111 2596//111
+f 2596//111 2816//111 2599//111
+f 2818//135 2819//135 2601//135
+f 2601//135 2819//135 2600//135
+f 2820//136 2818//136 2603//136
+f 2603//136 2818//136 2601//136
+f 2819//116 2821//116 2600//116
+f 2600//116 2821//116 2602//116
+f 2821//111 2820//111 2602//111
+f 2602//111 2820//111 2603//111
+f 2604//109 2606//109 2605//109
+f 2605//109 2606//109 2607//109
+f 2608//109 2610//109 2609//109
+f 2609//109 2610//109 2611//109
+f 2612//109 2614//109 2613//109
+f 2613//109 2614//109 2615//109
+f 2616//109 2618//109 2617//109
+f 2617//109 2618//109 2619//109
+f 2620//109 2622//109 2621//109
+f 2621//109 2622//109 2623//109
+f 2624//109 2626//109 2625//109
+f 2625//109 2626//109 2627//109
+f 2628//109 2630//109 2629//109
+f 2629//109 2630//109 2631//109
+f 2632//109 2634//109 2633//109
+f 2633//109 2634//109 2635//109
+f 2636//109 2638//109 2637//109
+f 2637//109 2638//109 2639//109
+f 2642//109 2645//109 2640//109
+f 2640//109 2645//109 2641//109
+f 2642//109 2646//109 2645//109
+f 2642//109 2644//109 2646//109
+f 2646//109 2648//109 2645//109
+f 2645//109 2643//109 2641//109
+f 2649//109 2647//109 2648//109
+f 2648//109 2647//109 2645//109
+f 2650//109 2652//109 2651//109
+f 2651//109 2652//109 2653//109
+f 2654//109 2656//109 2655//109
+f 2655//109 2656//109 2657//109
+f 2658//109 2660//109 2659//109
+f 2659//109 2660//109 2661//109
+f 2662//109 2664//109 2663//109
+f 2663//109 2664//109 2665//109
+f 2666//109 2668//109 2667//109
+f 2667//109 2668//109 2669//109
+f 2670//109 2672//109 2671//109
+f 2671//109 2672//109 2673//109
+f 2674//109 2676//109 2675//109
+f 2675//109 2676//109 2677//109
+f 2678//109 2680//109 2679//109
+f 2679//109 2680//109 2681//109
+f 2682//109 2684//109 2683//109
+f 2683//109 2684//109 2685//109
+f 2686//109 2688//109 2687//109
+f 2687//109 2688//109 2689//109
+f 2690//109 2692//109 2691//109
+f 2691//109 2692//109 2693//109
+f 2697//109 2701//109 2699//109
+f 2703//109 2707//109 2705//109
+f 2707//109 2708//109 2709//109
+f 2694//109 2696//109 2695//109
+f 2695//109 2696//109 2697//109
+f 2697//109 2696//109 2701//109
+f 2701//109 2700//109 2703//109
+f 2696//109 2700//109 2701//109
+f 2696//109 2698//109 2700//109
+f 2700//109 2702//109 2703//109
+f 2704//109 2706//109 2702//109
+f 2703//109 2706//109 2707//109
+f 2707//109 2706//109 2708//109
+f 2702//109 2706//109 2703//109
+f 2710//109 2712//109 2711//109
+f 2711//109 2712//109 2713//109
+f 2714//109 2716//109 2715//109
+f 2715//109 2716//109 2717//109
+f 2718//109 2720//109 2719//109
+f 2719//109 2720//109 2721//109
+f 2722//109 2724//109 2723//109
+f 2723//109 2724//109 2725//109
+f 2726//109 2728//109 2727//109
+f 2727//109 2728//109 2729//109
+f 2730//109 2732//109 2731//109
+f 2731//109 2732//109 2733//109
+f 2734//109 2736//109 2735//109
+f 2735//109 2736//109 2737//109
+f 2738//109 2740//109 2739//109
+f 2739//109 2740//109 2741//109
+f 2742//109 2744//109 2743//109
+f 2743//109 2744//109 2745//109
+f 2746//109 2748//109 2747//109
+f 2747//109 2748//109 2749//109
+f 2752//109 2753//109 2750//109
+f 2750//109 2753//109 2751//109
+f 2756//109 2757//109 2754//109
+f 2754//109 2757//109 2755//109
+f 2760//109 2761//109 2758//109
+f 2758//109 2761//109 2759//109
+f 2762//109 2764//109 2763//109
+f 2764//109 2765//109 2763//109
+f 2768//109 2769//109 2766//109
+f 2766//109 2769//109 2767//109
+f 2772//109 2773//109 2770//109
+f 2770//109 2773//109 2771//109
+f 2774//109 2776//109 2775//109
+f 2775//109 2776//109 2777//109
+f 2778//109 2780//109 2779//109
+f 2779//109 2780//109 2781//109
+f 2782//109 2784//109 2783//109
+f 2783//109 2784//109 2785//109
+f 2786//109 2788//109 2787//109
+f 2787//109 2788//109 2789//109
+f 2790//109 2792//109 2791//109
+f 2791//109 2792//109 2793//109
+f 2794//109 2796//109 2795//109
+f 2795//109 2796//109 2797//109
+f 2798//109 2801//109 2799//109
+f 2798//109 2800//109 2801//109
+f 2802//109 2805//109 2803//109
+f 2802//109 2804//109 2805//109
+f 2808//109 2809//109 2806//109
+f 2806//109 2809//109 2807//109
+f 2812//109 2813//109 2810//109
+f 2810//109 2813//109 2811//109
+f 2814//109 2817//109 2815//109
+f 2814//109 2816//109 2817//109
+f 2818//109 2821//109 2819//109
+f 2818//109 2820//109 2821//109
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/expr/parser.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/expr/parser.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/expr/parser.cpp	2025-03-01 12:42:57.200645938 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/expr/parser.cpp	2025-08-26 18:15:43.686003679 +0000
@@ -622,38 +622,40 @@ namespace lsp
             if (res != STATUS_OK)
                 return res;
 
-            // Check token
-            token_t tok = t->get_token(TF_NONE);
-            if (tok != TT_POW)
+            while (true)
             {
-                *expr   = left;
-                return STATUS_OK;
-            }
+                // Check token
+                token_t tok = t->get_token(TF_NONE);
+                if (tok != TT_POW)
+                {
+                    *expr   = left;
+                    return STATUS_OK;
+                }
+
+                // Parse right part
+                res = parse_not(&right, t, TF_GET);
+                if (res != STATUS_OK)
+                {
+                    parse_destroy(left);
+                    return res;
+                }
 
-            // Parse right part
-            res = parse_power(&right, t, TF_GET);
-            if (res != STATUS_OK)
-            {
-                parse_destroy(left);
-                return res;
-            }
+                // Create binding between left and right
+                expr_t *bind        = parse_create_expr();
+                if (bind == NULL)
+                {
+                    parse_destroy(left);
+                    parse_destroy(right);
+                    return STATUS_NO_MEM;
+                }
+                bind->eval          = eval_power;
+                bind->type          = ET_CALC;
+                bind->calc.left     = left;
+                bind->calc.right    = right;
+                bind->calc.cond     = NULL;
 
-            // Create binding between left and right
-            expr_t *bind        = parse_create_expr();
-            if (bind == NULL)
-            {
-                parse_destroy(left);
-                parse_destroy(right);
-                return STATUS_NO_MEM;
+                left                = bind;
             }
-            bind->eval          = eval_power;
-            bind->type          = ET_CALC;
-            bind->calc.left     = left;
-            bind->calc.right    = right;
-            bind->calc.cond     = NULL;
-
-            *expr               = bind;
-            return STATUS_OK;
         }
 
         status_t parse_muldiv(expr_t **expr, Tokenizer *t, size_t flags)
@@ -665,55 +667,58 @@ namespace lsp
             if (res != STATUS_OK)
                 return res;
 
-            // Check token
-            token_t tok = t->get_token(TF_NONE);
-            switch (tok)
+            while (true)
             {
-                case TT_MUL:
-                case TT_DIV:
-                case TT_IMUL:
-                case TT_IDIV:
-                case TT_FMOD:
-                case TT_IMOD:
-                    break;
-                default:
-                    *expr = left;
+                // Check token
+                token_t tok = t->get_token(TF_NONE);
+                switch (tok)
+                {
+                    case TT_MUL:
+                    case TT_DIV:
+                    case TT_IMUL:
+                    case TT_IDIV:
+                    case TT_FMOD:
+                    case TT_IMOD:
+                        break;
+                    default:
+                        *expr = left;
+                        return res;
+                }
+
+                // Parse right part
+                res = parse_power(&right, t, TF_GET);
+                if (res != STATUS_OK)
+                {
+                    parse_destroy(left);
                     return res;
-            }
+                }
 
-            // Parse right part
-            res = parse_muldiv(&right, t, TF_GET);
-            if (res != STATUS_OK)
-            {
-                parse_destroy(left);
-                return res;
-            }
+                // Create binding between left and right
+                expr_t *bind        = parse_create_expr();
+                if (bind == NULL)
+                {
+                    parse_destroy(left);
+                    parse_destroy(right);
+                    return STATUS_NO_MEM;
+                }
+                switch (tok)
+                {
+                    case TT_MUL:            bind->eval  = eval_mul; break;
+                    case TT_DIV:            bind->eval  = eval_div; break;
+                    case TT_IMUL:           bind->eval  = eval_imul; break;
+                    case TT_IDIV:           bind->eval  = eval_idiv; break;
+                    case TT_FMOD:           bind->eval  = eval_fmod; break;
+                    case TT_IMOD:           bind->eval  = eval_imod; break;
+                    default:                bind->eval  = NULL; break;
+                }
+                bind->type          = ET_CALC;
+                bind->calc.left     = left;
+                bind->calc.right    = right;
+                bind->calc.cond     = NULL;
 
-            // Create binding between left and right
-            expr_t *bind        = parse_create_expr();
-            if (bind == NULL)
-            {
-                parse_destroy(left);
-                parse_destroy(right);
-                return STATUS_NO_MEM;
+                // Update left expression
+                left                = bind;
             }
-            switch (tok)
-            {
-                case TT_MUL:            bind->eval  = eval_mul; break;
-                case TT_DIV:            bind->eval  = eval_div; break;
-                case TT_IMUL:           bind->eval  = eval_imul; break;
-                case TT_IDIV:           bind->eval  = eval_idiv; break;
-                case TT_FMOD:           bind->eval  = eval_fmod; break;
-                case TT_IMOD:           bind->eval  = eval_imod; break;
-                default:                bind->eval  = NULL; break;
-            }
-            bind->type          = ET_CALC;
-            bind->calc.left     = left;
-            bind->calc.right    = right;
-            bind->calc.cond     = NULL;
-
-            *expr               = bind;
-            return STATUS_OK;
         }
 
         status_t parse_addsub(expr_t **expr, Tokenizer *t, size_t flags)
@@ -725,55 +730,59 @@ namespace lsp
             if (res != STATUS_OK)
                 return res;
 
-            // Check token
-            token_t tok = t->get_token(TF_NONE);
-            switch (tok)
+            // Parse right part
+            while (true)
             {
-                case TT_ADD:
-                case TT_SUB:
-                case TT_ADDSYM:
-                case TT_SUBSYM:
-                case TT_IADD:
-                case TT_ISUB:
-                    break;
-                default:
-                    *expr = left;
+                // Check token
+                token_t tok = t->get_token(TF_NONE);
+                switch (tok)
+                {
+                    case TT_ADD:
+                    case TT_SUB:
+                    case TT_ADDSYM:
+                    case TT_SUBSYM:
+                    case TT_IADD:
+                    case TT_ISUB:
+                        break;
+                    default:
+                        *expr = left;
+                        return res;
+                }
+
+                // Parse right expression
+                res = parse_muldiv(&right, t, TF_GET);
+                if (res != STATUS_OK)
+                {
+                    parse_destroy(left);
                     return res;
-            }
+                }
 
-            // Parse right part
-            res = parse_addsub(&right, t, TF_GET);
-            if (res != STATUS_OK)
-            {
-                parse_destroy(left);
-                return res;
-            }
+                // Create binding between left and right
+                expr_t *bind        = parse_create_expr();
+                if (bind == NULL)
+                {
+                    parse_destroy(left);
+                    parse_destroy(right);
+                    return STATUS_NO_MEM;
+                }
+                switch (tok)
+                {
+                    case TT_ADD:            bind->eval  = eval_add; break;
+                    case TT_SUB:            bind->eval  = eval_sub; break;
+                    case TT_ADDSYM:         bind->eval  = eval_add; break;
+                    case TT_SUBSYM:         bind->eval  = eval_sub; break;
+                    case TT_IADD:           bind->eval  = eval_iadd; break;
+                    case TT_ISUB:           bind->eval  = eval_isub; break;
+                    default:                bind->eval  = NULL; break;
+                }
+                bind->type          = ET_CALC;
+                bind->calc.left     = left;
+                bind->calc.right    = right;
+                bind->calc.cond     = NULL;
 
-            // Create binding between left and right
-            expr_t *bind        = parse_create_expr();
-            if (bind == NULL)
-            {
-                parse_destroy(left);
-                parse_destroy(right);
-                return STATUS_NO_MEM;
+                // Update left expression
+                left                = bind;
             }
-            switch (tok)
-            {
-                case TT_ADD:            bind->eval  = eval_add; break;
-                case TT_SUB:            bind->eval  = eval_sub; break;
-                case TT_ADDSYM:         bind->eval  = eval_add; break;
-                case TT_SUBSYM:         bind->eval  = eval_sub; break;
-                case TT_IADD:           bind->eval  = eval_iadd; break;
-                case TT_ISUB:           bind->eval  = eval_isub; break;
-                default:                bind->eval  = NULL; break;
-            }
-            bind->type          = ET_CALC;
-            bind->calc.left     = left;
-            bind->calc.right    = right;
-            bind->calc.cond     = NULL;
-
-            *expr               = bind;
-            return STATUS_OK;
         }
 
         status_t parse_strrep(expr_t **expr, Tokenizer *t, size_t flags)
@@ -998,36 +1007,40 @@ namespace lsp
                 return res;
 
             // Check token
-            token_t tok = t->get_token(TF_NONE);
-            if (tok != TT_BAND)
+            while (true)
             {
-                *expr   = left;
-                return STATUS_OK;
-            }
+                token_t tok = t->get_token(TF_NONE);
+                if (tok != TT_BAND)
+                {
+                    *expr   = left;
+                    return STATUS_OK;
+                }
+
+                // Parse right part
+                res = parse_cmp_eq(&right, t, TF_GET);
+                if (res != STATUS_OK)
+                {
+                    parse_destroy(left);
+                    return res;
+                }
 
-            // Parse right part
-            res = parse_bit_and(&right, t, TF_GET);
-            if (res != STATUS_OK)
-            {
-                parse_destroy(left);
-                return res;
-            }
+                // Create binding between left and right
+                expr_t *bind        = parse_create_expr();
+                if (bind == NULL)
+                {
+                    parse_destroy(left);
+                    parse_destroy(right);
+                    return STATUS_NO_MEM;
+                }
+                bind->eval          = eval_bit_and;
+                bind->type          = ET_CALC;
+                bind->calc.left     = left;
+                bind->calc.right    = right;
+                bind->calc.cond     = NULL;
 
-            // Create binding between left and right
-            expr_t *bind        = parse_create_expr();
-            if (bind == NULL)
-            {
-                parse_destroy(left);
-                parse_destroy(right);
-                return STATUS_NO_MEM;
+                // Store left
+                left                = bind;
             }
-            bind->eval          = eval_bit_and;
-            bind->type          = ET_CALC;
-            bind->calc.left     = left;
-            bind->calc.right    = right;
-            bind->calc.cond     = NULL;
-
-            *expr               = bind;
             return STATUS_OK;
         }
 
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/fmt/obj/Compressor.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/fmt/obj/Compressor.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/fmt/obj/Compressor.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/fmt/obj/Compressor.cpp	2025-08-26 18:15:43.698003563 +0000
@@ -0,0 +1,731 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-runtime-lib
+ * Created on: 23 июл. 2025 г.
+ *
+ * lsp-runtime-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-runtime-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-runtime-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/fmt/obj/Compressor.h>
+#include <lsp-plug.in/common/alloc.h>
+
+namespace lsp
+{
+    namespace obj
+    {
+        typedef struct c_event_t
+        {
+            uint8_t code;
+            uint8_t bits;
+        } c_event_t;
+
+        static const c_event_t event_codes[] =
+        {
+            { 0x0b, 4 },    // CEV_OBJECT
+            { 0x3a, 6 },    // CEV_VERTEX2
+            { 0x00, 3 },    // CEV_VERTEX3
+            { 0x78, 7 },    // CEV_VERTEX4
+            { 0x79, 7 },    // CEV_PVERTEX2
+            { 0x1a, 5 },    // CEV_PVERTEX3
+            { 0x7a, 7 },    // CEV_PVERTEX4
+            { 0x3b, 6 },    // CEV_NORMAL2
+            { 0x01, 3 },    // CEV_NORMAL3
+            { 0x7b, 7 },    // CEV_NORMAL4
+            { 0xf8, 8 },    // CEV_TEXCOORD1
+            { 0x08, 4 },    // CEV_TEXCOORD2
+            { 0xf9, 8 },    // CEV_TEXCOORD3
+            { 0x03, 3 },    // CEV_FACE
+            { 0x18, 5 },    // CEV_FACE_T
+            { 0x02, 3 },    // CEV_FACE_N
+            { 0x09, 4 },    // CEV_FACE_NF
+            { 0x19, 5 },    // CEV_FACE_TN
+            { 0x0a, 4 },    // CEV_FACE_TNF
+            { 0x1b, 5 },    // CEV_LINE
+            { 0x38, 6 },    // CEV_LINE_T
+            { 0x39, 6 },    // CEV_POINT
+            { 0xfb, 8 },    // CEV_EOF
+        };
+
+        static inline int32_t float_to_bin(float v)
+        {
+            union {
+                float f32;
+                int32_t i32;
+            } cvt;
+
+            cvt.f32 = v;
+            return cvt.i32;
+        }
+
+        static inline uint32_t zigzag_encode(int32_t value)
+        {
+            return (value >> 31) ^ (value << 1);
+        }
+
+        Compressor::Compressor()
+        {
+            pOut        = NULL;
+            vFloatBuf   = NULL;
+
+            nFloatHead  = 0;
+            nFloatSize  = 0;
+            nFloatCap   = 0;
+            nFloatBits  = 0;
+
+            nLastEvent  = -1;
+
+            nWFlags     = 0;
+        }
+
+        Compressor::~Compressor()
+        {
+            close();
+
+            if (vFloatBuf != NULL)
+            {
+                free(vFloatBuf);
+                vFloatBuf       = NULL;
+            }
+        }
+
+        status_t Compressor::do_wrap(io::OutBitStream * & obs, size_t flags)
+        {
+            compressed_header_t hdr;
+
+            hdr.signature   = COMPRESSED_SIGNATURE;
+            hdr.version     = 0;
+            hdr.float_bits  = uint8_t(nFloatBits);
+            hdr.pad[0]      = 'L';
+            hdr.pad[1]      = 'S';
+            ssize_t written = obs->write(&hdr, sizeof(compressed_header_t));
+            if (written != sizeof(compressed_header_t))
+                return STATUS_IO_ERROR;
+
+            pOut        = release_ptr(obs);
+            nFloatHead  = 0;
+            nFloatSize  = 0;
+            nWFlags     = flags;
+
+            return STATUS_OK;
+        }
+
+        status_t Compressor::open(const char *path, size_t mode)
+        {
+            if (vFloatBuf == NULL)
+                return STATUS_BAD_STATE;
+            if (pOut != NULL)
+                return STATUS_OPENED;
+
+            io::OutBitStream *obs = new io::OutBitStream();
+            if (obs == NULL)
+                return STATUS_NO_MEM;
+            lsp_finally {
+                if (obs != NULL)
+                {
+                    obs->close();
+                    delete obs;
+                }
+            };
+
+            status_t res = obs->open(path, mode);
+            if (res == STATUS_OK)
+                res = do_wrap(obs);
+
+            return res;
+        }
+
+        status_t Compressor::open(const LSPString *path, size_t mode)
+        {
+            if (vFloatBuf == NULL)
+                return STATUS_BAD_STATE;
+            if (pOut != NULL)
+                return STATUS_OPENED;
+
+            io::OutBitStream *obs = new io::OutBitStream();
+            if (obs == NULL)
+                return STATUS_NO_MEM;
+            lsp_finally {
+                if (obs != NULL)
+                {
+                    obs->close();
+                    delete obs;
+                }
+            };
+
+            status_t res = obs->open(path, mode);
+            if (res == STATUS_OK)
+                res = do_wrap(obs);
+
+            return res;
+        }
+
+        status_t Compressor::open(const io::Path *path, size_t mode)
+        {
+            if (vFloatBuf == NULL)
+                return STATUS_BAD_STATE;
+            if (pOut != NULL)
+                return STATUS_OPENED;
+
+            io::OutBitStream *obs = new io::OutBitStream();
+            if (obs == NULL)
+                return STATUS_NO_MEM;
+            lsp_finally {
+                if (obs != NULL)
+                {
+                    obs->close();
+                    delete obs;
+                }
+            };
+
+            status_t res = obs->open(path, mode);
+            if (res == STATUS_OK)
+                res = do_wrap(obs);
+
+            return res;
+        }
+
+        status_t Compressor::wrap(FILE *fd, bool close)
+        {
+            if (vFloatBuf == NULL)
+                return STATUS_BAD_STATE;
+            if (pOut != NULL)
+                return STATUS_OPENED;
+
+            io::OutBitStream *obs = new io::OutBitStream();
+            if (obs == NULL)
+                return STATUS_NO_MEM;
+            lsp_finally {
+                if (obs != NULL)
+                {
+                    obs->close();
+                    delete obs;
+                }
+            };
+
+            status_t res = obs->wrap(fd, close);
+            if (res == STATUS_OK)
+                res = do_wrap(obs);
+
+            return res;
+        }
+
+        status_t Compressor::wrap_native(fhandle_t fd, bool close)
+        {
+            if (vFloatBuf == NULL)
+                return STATUS_BAD_STATE;
+            if (pOut != NULL)
+                return STATUS_OPENED;
+
+            io::OutBitStream *obs = new io::OutBitStream();
+            if (obs == NULL)
+                return STATUS_NO_MEM;
+            lsp_finally {
+                if (obs != NULL)
+                {
+                    obs->close();
+                    delete obs;
+                }
+            };
+
+            status_t res = obs->wrap_native(fd, close);
+            if (res == STATUS_OK)
+                res = do_wrap(obs);
+
+            return res;
+        }
+
+        status_t Compressor::wrap(io::File *fd, size_t flags)
+        {
+            if (vFloatBuf == NULL)
+                return STATUS_BAD_STATE;
+            if (pOut != NULL)
+                return STATUS_OPENED;
+
+            io::OutBitStream *obs = new io::OutBitStream();
+            if (obs == NULL)
+                return STATUS_NO_MEM;
+            lsp_finally {
+                if (obs != NULL)
+                {
+                    obs->close();
+                    delete obs;
+                }
+            };
+
+            status_t res = obs->wrap(fd, flags);
+            if (res == STATUS_OK)
+                res = do_wrap(obs);
+
+            return res;
+        }
+
+        status_t Compressor::wrap(io::IOutStream *os, size_t flags)
+        {
+            if (vFloatBuf == NULL)
+                return STATUS_BAD_STATE;
+            if (pOut != NULL)
+                return STATUS_OPENED;
+
+            io::OutBitStream *obs = new io::OutBitStream();
+            if (obs == NULL)
+                return STATUS_NO_MEM;
+            lsp_finally {
+                if (obs != NULL)
+                {
+                    obs->close();
+                    delete obs;
+                }
+            };
+
+            status_t res = obs->wrap(os, flags);
+            if (res == STATUS_OK)
+                res = do_wrap(obs);
+
+            return res;
+        }
+
+        status_t Compressor::wrap(io::OutBitStream *obs, size_t flags)
+        {
+            if (vFloatBuf == NULL)
+                return STATUS_BAD_STATE;
+            if (pOut != NULL)
+                return STATUS_OPENED;
+
+            return do_wrap(obs, flags);
+        }
+
+        status_t Compressor::close()
+        {
+            if (pOut == NULL)
+                return STATUS_OK;
+
+            // Write End-of-File signature
+            status_t res = write_event(CEV_EOF);
+
+            if (nWFlags & WRAP_CLOSE)
+                res = update_status(res, pOut->close());
+            if (nWFlags & WRAP_DELETE)
+                delete pOut;
+
+            pOut        = NULL;
+            return res;
+        }
+
+        status_t Compressor::set_buffer_size(size_t float_bits)
+        {
+            if ((float_bits > MAX_FLOAT_BUF_BITS) || (float_bits < MIN_FLOAT_BUF_BITS))
+                return STATUS_INVALID_VALUE;
+
+            // We can only change buffer size if there is no active operations.
+            if (pOut != NULL)
+                return STATUS_BAD_STATE;
+
+            // Check that there is nothing to change
+            const size_t float_cap  = 1 << float_bits;
+            if (float_cap != nFloatCap)
+            {
+                // Re-allocate data
+                float *ptr              = static_cast<float *>(realloc(vFloatBuf, float_cap * sizeof(float)));
+                if (ptr == NULL)
+                    return STATUS_NO_MEM;
+                vFloatBuf               = ptr;
+            }
+
+            nFloatCap               = float_cap;
+            nFloatBits              = uint32_t(float_bits);
+
+            return STATUS_OK;
+        }
+
+        status_t Compressor::write_event(uint32_t event)
+        {
+            const c_event_t *code = &event_codes[event];
+            if (nLastEvent == code->code)
+                return pOut->bwrite(true);
+
+            nLastEvent = code->code;
+            return pOut->writev(code->code, code->bits + 1);
+        }
+
+        status_t Compressor::write_varint(size_t value)
+        {
+            do
+            {
+                const uint8_t b     = (value >= 0x40) ? 0x40 | (value & 0x3f) : value;
+                value     >>= 6;
+
+                status_t res        = pOut->writev(b, 7);
+                if (res != STATUS_OK)
+                    return res;
+            } while (value > 0);
+
+            return STATUS_OK;
+        }
+
+        status_t Compressor::write_varint_icount(size_t value)
+        {
+            size_t bits = 3;
+            size_t max  = 1 << bits;
+            do
+            {
+                const size_t b      = (value >= max) ? max | (value & (max - 1)) : value;
+                status_t res        = pOut->writev(fixed_int(b), bits + 1);
+                if (res != STATUS_OK)
+                    return res;
+
+                // Update count
+                value             >>= bits;
+                bits               += 2;
+                max               <<= 2;
+            } while (value > 0);
+
+            return STATUS_OK;
+        }
+
+        status_t Compressor::write_utf8(const char *text)
+        {
+            const size_t bytes = strlen(text);
+            status_t res    = write_varint(bytes);
+            if (res == STATUS_OK)
+            {
+                ssize_t written = pOut->write(text, bytes);
+                if (written < 0)
+                    return status_t(-written);
+                else if (size_t(written) != bytes)
+                    return STATUS_IO_ERROR;
+            }
+            return res;
+        }
+
+        status_t Compressor::write_float(float value)
+        {
+            // Step 1
+            // Find index of float in buffer
+            int32_t index       = -1;
+            const uint32_t base = nFloatHead + nFloatCap - 1;
+            const int32_t image = float_to_bin(value);
+            for (size_t i=0; i<nFloatSize; ++i)
+            {
+                const uint32_t idx  = (base - i) % nFloatCap;
+                if (vFloatBuf[idx] == value)
+                {
+                    index               = i;
+                    break;
+                }
+            }
+
+            // Depending on index value do the stuff
+            if (index > 0)
+            {
+                // Advance position of item one step forward if it is not the first one
+                const uint32_t idx  = (base - index) % nFloatCap;
+                lsp::swap(vFloatBuf[idx], vFloatBuf[(idx + 1) % nFloatCap]);
+
+                // We're ready to emit index
+                return pOut->writev(index, nFloatBits);
+            }
+            else if (index == 0)
+            {
+                // We're ready to emit index
+                return pOut->writev(index, nFloatBits);
+            }
+
+            // Step 2
+            // Find nearest relative float
+            uint32_t delta      = 0x7fffffff;
+            index               = -1;
+            for (size_t i=0; i<nFloatSize; ++i)
+            {
+                const int32_t diff  = image - vIntBuf[(base - i) % nFloatCap];
+                if ((diff > 0x1ffff) || (diff < -0x20000))
+                    continue;
+
+                // Convert to zigzag representation and compare with previous value for minimization
+                const uint32_t dval = zigzag_encode(diff);
+                if (dval < delta)
+                {
+                    index               = i;
+                    delta               = dval;
+                    break;
+                }
+            }
+
+            // Emit new floating-point value if we can do an incremental coding
+            status_t res;
+            if (index >= 0)
+            {
+                res = pOut->writev(nFloatSize, nFloatBits);  // Indicate that new incremental value has been added
+                if (res == STATUS_OK)
+                    res     = pOut->writev(index, nFloatBits);  // Write index of original floating-point
+                if (res == STATUS_OK)
+                    res     = write_varint(delta);              // Write delta
+            }
+            else
+            {
+                res = pOut->writev(nFloatSize + 1, nFloatBits);  // Indicate that new value has been added
+                if (res == STATUS_OK)
+                    res     = pOut->writev(CPU_TO_LE(image));
+            }
+
+            // Push item to buffer
+            vFloatBuf[nFloatHead]   = value;
+            nFloatHead              = (nFloatHead + 1) % nFloatCap;
+            if (nFloatSize < (nFloatCap - 2))
+                ++nFloatSize;
+
+            return res;
+        }
+
+        status_t Compressor::write_indices(const index_t *value, size_t count)
+        {
+            int32_t delta   = value[0];
+            status_t res    = write_varint_icount(zigzag_encode(delta));
+            if (res != STATUS_OK)
+                return res;
+
+            for (size_t i=1; i<count; ++i)
+            {
+                status_t res            = write_varint_icount(zigzag_encode(value[i] - value[0]));
+                if (res != STATUS_OK)
+                    return res;
+            }
+            return STATUS_OK;
+        }
+
+        bool Compressor::has_nonempty_index(const index_t *v, size_t count)
+        {
+            for (size_t i=0; i<count; ++i)
+                if (v[i] >= 0)
+                    return true;
+            return false;
+        }
+
+        bool Compressor::has_equal_indices(const index_t *v, size_t count)
+        {
+            for (size_t i=0; i<count; ++i)
+            if (v[i] != v[0])
+                return false;
+
+            return true;
+        }
+
+        status_t Compressor::begin_object(const char *name)
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+            if (name == NULL)
+                return STATUS_BAD_ARGUMENTS;
+
+            status_t res = write_event(CEV_OBJECT);
+            if (res == STATUS_OK)
+                res         = write_utf8(name);
+
+            return res;
+        }
+
+        status_t Compressor::begin_object(const LSPString *name)
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+            if (name == NULL)
+                return STATUS_BAD_ARGUMENTS;
+
+            const char *text  = name->get_utf8();
+            if (text == NULL)
+                return STATUS_NO_MEM;
+
+            status_t res = write_event(CEV_OBJECT);
+            if (res == STATUS_OK)
+                res         = write_utf8(text);
+
+            return res;
+        }
+
+        status_t Compressor::end_object()
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            return STATUS_OK;
+        }
+
+        status_t Compressor::end_of_data()
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            return STATUS_OK;
+        }
+
+        ssize_t Compressor::add_vertex(float x, float y, float z, float w)
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            const uint32_t ev   = (w != 1.0f) ? CEV_VERTEX4 :
+                                  (z != 0.0f) ? CEV_VERTEX3 :
+                                  CEV_VERTEX2;
+
+            status_t res    = write_event(ev);
+            if (res == STATUS_OK)
+                res             = write_float(x);
+            if (res == STATUS_OK)
+                res             = write_float(y);
+            if ((res == STATUS_OK) && (ev >= CEV_VERTEX3))
+                res             = write_float(z);
+            if ((res == STATUS_OK) && (ev >= CEV_VERTEX4))
+                res             = write_float(w);
+
+            return res;
+        }
+
+        ssize_t Compressor::add_param_vertex(float x, float y, float z, float w)
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            const uint32_t ev   = (w != 1.0f) ? CEV_PVERTEX4 :
+                                  (z != 0.0f) ? CEV_PVERTEX3 :
+                                  CEV_PVERTEX2;
+
+            status_t res    = write_event(ev);
+            if (res == STATUS_OK)
+                res             = write_float(x);
+            if (res == STATUS_OK)
+                res             = write_float(y);
+            if ((res == STATUS_OK) && (ev >= CEV_PVERTEX3))
+                res             = write_float(z);
+            if ((res == STATUS_OK) && (ev >= CEV_PVERTEX4))
+                res             = write_float(w);
+
+            return res;
+        }
+
+        ssize_t Compressor::add_normal(float nx, float ny, float nz, float nw)
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            const uint32_t ev   = (nw != 0.0f) ? CEV_NORMAL4 :
+                                  (nz != 0.0f) ? CEV_NORMAL3 :
+                                  CEV_NORMAL2;
+
+            status_t res    = write_event(ev);
+            if (res == STATUS_OK)
+                res             = write_float(nx);
+            if (res == STATUS_OK)
+                res             = write_float(ny);
+            if ((res == STATUS_OK) && (ev >= CEV_NORMAL3))
+                res             = write_float(nz);
+            if ((res == STATUS_OK) && (ev >= CEV_NORMAL4))
+                res             = write_float(nw);
+
+            return res;
+        }
+
+        ssize_t Compressor::add_texture_vertex(float u, float v, float w)
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            const uint32_t ev   = (w != 0.0f) ? CEV_TEXCOORD3 :
+                                  (v != 0.0f) ? CEV_TEXCOORD2 :
+                                  CEV_TEXCOORD1;
+
+            status_t res    = write_event(ev);
+            if (res == STATUS_OK)
+                res             = write_float(u);
+            if ((res == STATUS_OK) && (ev >= CEV_TEXCOORD2))
+                res             = write_float(v);
+            if ((res == STATUS_OK) && (ev >= CEV_TEXCOORD3))
+                res             = write_float(w);
+
+            return res;
+        }
+
+        ssize_t Compressor::add_face(const index_t *vv, const index_t *vn, const index_t *vt, size_t n)
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            const bool equal_normals= has_equal_indices(vn, n);
+            const bool has_normals  = (vn[0] >= 0) || (!equal_normals);
+            const bool has_texcoord = has_nonempty_index(vt, n);
+
+            const compressed_event_type_t ev =
+                (has_texcoord)
+                    ? ((has_normals) ? ((equal_normals) ? CEV_FACE_TNF : CEV_FACE_TN) : CEV_FACE_T)
+                    : ((has_normals) ? ((equal_normals) ? CEV_FACE_NF : CEV_FACE_N) : CEV_FACE);
+
+            status_t res            = write_event(ev);
+            if (res == STATUS_OK)
+                res                     = write_varint_icount(n);
+            if (res == STATUS_OK)
+                res                     = write_indices(vv, n);
+            if ((res == STATUS_OK) && (has_texcoord))
+                res                     = write_indices(vt, n);
+            if ((res == STATUS_OK) && (has_normals))
+            {
+                if (equal_normals)
+                    res                     = write_varint_icount(vn[0]); // Write the fill index
+                else
+                    res                     = write_indices(vn, n);
+            }
+
+            return res;
+        }
+
+        ssize_t Compressor::add_points(const index_t *vv, size_t n)
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            const uint32_t ev       = CEV_POINT;
+            status_t res            = write_event(ev);
+            if (res == STATUS_OK)
+                res                     = write_varint_icount(n);
+            if (res == STATUS_OK)
+                res                     = write_indices(vv, n);
+
+            return res;
+        }
+
+        ssize_t Compressor::add_line(const index_t *vv, const index_t *vt, size_t n)
+        {
+            if ((pOut == NULL) || (vFloatBuf == NULL))
+                return STATUS_BAD_STATE;
+
+            const bool has_texcoord = has_nonempty_index(vt, n);
+
+            const uint32_t ev       = (has_texcoord) ? CEV_LINE_T : CEV_LINE;
+            status_t res            = write_event(ev);
+            if (res == STATUS_OK)
+                res                     = write_varint_icount(n);
+            if (res == STATUS_OK)
+                res                     = write_indices(vv, n);
+            if ((res == STATUS_OK) && (has_texcoord))
+                res                     = write_indices(vt, n);
+
+            return res;
+        }
+
+    } /* namespace obj */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/fmt/obj/Decompressor.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/fmt/obj/Decompressor.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/fmt/obj/Decompressor.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/fmt/obj/Decompressor.cpp	2025-08-26 18:15:43.698003563 +0000
@@ -0,0 +1,685 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-runtime-lib
+ * Created on: 26 июл. 2025 г.
+ *
+ * lsp-runtime-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-runtime-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-runtime-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/fmt/obj/const.h>
+#include <lsp-plug.in/fmt/obj/Decompressor.h>
+#include <lsp-plug.in/io/InMemoryStream.h>
+
+namespace lsp
+{
+    namespace obj
+    {
+        static const uint8_t event_codes[] =
+        {
+            CEV_VERTEX3,    // 0x00
+            CEV_NORMAL3,    // 0x01
+            CEV_FACE_N,     // 0x02
+            CEV_FACE,       // 0x03
+
+            CEV_TEXCOORD2,  // 0x08
+            CEV_FACE_NF,    // 0x09
+            CEV_FACE_TNF,   // 0x0a
+            CEV_OBJECT,     // 0x0b
+
+            CEV_FACE_T,     // 0x18
+            CEV_FACE_TN,    // 0x19
+            CEV_PVERTEX3,   // 0x1a
+            CEV_LINE,       // 0x1b
+
+            CEV_LINE_T,     // 0x38
+            CEV_POINT,      // 0x39
+            CEV_VERTEX2,    // 0x3a
+            CEV_NORMAL2,    // 0x3b
+
+            CEV_VERTEX4,    // 0x78
+            CEV_PVERTEX2,   // 0x79
+            CEV_PVERTEX4,   // 0x7a
+            CEV_NORMAL4,    // 0x7b
+
+            CEV_TEXCOORD1,  // 0xf8
+            CEV_TEXCOORD3,  // 0xf9
+            CEV_EOF,        // 0xfa
+            CEV_EOF,        // 0xfb
+        };
+
+        static inline float bin_to_float(int32_t v)
+        {
+            union {
+                float f32;
+                int32_t i32;
+            } cvt;
+
+            cvt.i32 = v;
+            return cvt.f32;
+        }
+
+        static inline int32_t zigzag_decode(uint32_t value)
+        {
+            return (int32_t(value) >> 1) ^ -(int32_t(value) & 1);
+        }
+
+        Decompressor::Decompressor()
+        {
+            vFloatBuf   = NULL;
+
+            nFloatHead  = 0;
+            nFloatSize  = 0;
+            nFloatCap   = 0;
+            nFloatBits  = 0;
+
+            nLastEvent  = compressed_event_type_t(-1);
+        }
+
+        Decompressor::~Decompressor()
+        {
+            clear_state();
+        }
+
+        void Decompressor::clear_state()
+        {
+            if (vFloatBuf != NULL)
+            {
+                free(vFloatBuf);
+                vFloatBuf       = NULL;
+            }
+        }
+
+        status_t Decompressor::parse_file(IObjHandler *handler, const char *path)
+        {
+            clear_state();
+            status_t res = sStream.open(path);
+            if (res == STATUS_OK)
+                res = parse_data(handler);
+            res = update_status(res, sStream.close());
+            clear_state();
+            return res;
+        }
+
+        status_t Decompressor::parse_file(IObjHandler *handler, const LSPString *path)
+        {
+            clear_state();
+            status_t res = sStream.open(path);
+            if (res == STATUS_OK)
+                res = parse_data(handler);
+            res = update_status(res, sStream.close());
+            clear_state();
+            return res;
+        }
+
+        status_t Decompressor::parse_file(IObjHandler *handler, const io::Path *path)
+        {
+            clear_state();
+            status_t res = sStream.open(path);
+            if (res == STATUS_OK)
+                res = parse_data(handler);
+            res = update_status(res, sStream.close());
+            clear_state();
+            return res;
+        }
+
+        status_t Decompressor::parse_data(IObjHandler *handler, io::IInStream *is, size_t flags)
+        {
+            clear_state();
+            status_t res = sStream.wrap(is, flags);
+            if (res == STATUS_OK)
+                res = parse_data(handler);
+            res = update_status(res, sStream.close());
+            clear_state();
+            return res;
+        }
+
+        status_t Decompressor::parse_data(IObjHandler *handler, const void *data, size_t size)
+        {
+            clear_state();
+            io::InMemoryStream is;
+            is.wrap(data, size);
+            status_t res = sStream.wrap(&is, WRAP_CLOSE);
+            if (res == STATUS_OK)
+                res = parse_data(handler);
+            res = update_status(res, sStream.close());
+            clear_state();
+            return res;
+        }
+
+        status_t Decompressor::parse_header()
+        {
+            compressed_header_t hdr;
+
+            // Read header
+            ssize_t nread = sStream.read_fully(&hdr, sizeof(compressed_header_t));
+            if (nread < 0)
+                return status_t(-nread);
+            else if (nread != sizeof(compressed_header_t))
+                return STATUS_BAD_FORMAT;
+
+            // Validate header
+            if (hdr.signature != COMPRESSED_SIGNATURE)
+                return STATUS_BAD_FORMAT;
+            if (hdr.version != 0)
+                return STATUS_UNSUPPORTED_FORMAT;
+
+            if ((hdr.float_bits > MAX_FLOAT_BUF_BITS) || (hdr.float_bits < MIN_FLOAT_BUF_BITS))
+                return STATUS_CORRUPTED;
+            if ((hdr.pad[0] != 'L') || (hdr.pad[1] != 'S'))
+                return STATUS_BAD_FORMAT;
+
+            // Check that there is nothing to change
+            const size_t float_cap  = 1 << hdr.float_bits;
+            float *ptr              = static_cast<float *>(malloc(float_cap * sizeof(float)));
+            if (ptr == NULL)
+                return STATUS_NO_MEM;
+
+            vFloatBuf               = ptr;
+            nFloatHead              = 0;
+            nFloatSize              = 0;
+            nFloatCap               = float_cap;
+            nFloatBits              = uint32_t(hdr.float_bits);
+
+            return STATUS_OK;
+        }
+
+        status_t Decompressor::read_event(compressed_event_type_t *event)
+        {
+            bool b;
+            size_t group = 0;
+            uint32_t cmd = 0;
+
+            // Check if command has been repeated
+            ssize_t nread = sStream.readb(&b);
+            if (nread != 1)
+                return (nread < 0) ? status_t(-nread) : STATUS_CORRUPTED;
+
+            if (b)
+            {
+                if (nLastEvent == compressed_event_type_t(-1))
+                    return STATUS_CORRUPTED;
+
+                *event  = nLastEvent;
+                return STATUS_OK;
+            }
+
+            // Determine group of commands
+            while (true)
+            {
+                nread = sStream.readb(&b);
+                if (nread != 1)
+                    return (nread < 0) ? status_t(-nread) : STATUS_CORRUPTED;
+                if (!b)
+                    break;
+                ++group;
+            }
+
+            // Read subcommand identifier
+            nread = sStream.readv(&cmd, 2);
+            if (nread != 2)
+                return (nread < 0) ? status_t(-nread) : STATUS_CORRUPTED;
+
+            // Convert subcommand + group to event code
+            cmd     = (group << 2) | cmd;
+            if (cmd >= sizeof(event_codes))
+                return STATUS_CORRUPTED;
+
+            nLastEvent  = compressed_event_type_t(event_codes[cmd]);
+            *event      = nLastEvent;
+
+            return STATUS_OK;
+        }
+
+        status_t Decompressor::read_float(float *dst)
+        {
+            // Read index
+            uint32_t index = 0;
+            ssize_t nread = sStream.readv(&index, nFloatBits);
+            if (nread != ssize_t(nFloatBits))
+                return (nread < 0) ? status_t(-nread) : STATUS_CORRUPTED;
+
+            // Analyze index
+            const uint32_t base = nFloatHead + nFloatCap - 1;
+
+            if (index < nFloatSize)
+            {
+                *dst    = vFloatBuf[(base - index) % nFloatCap];
+                if (index > 0)
+                {
+                    // Advance position of item one step forward if it is not the first one
+                    const uint32_t idx  = (base - index) % nFloatCap;
+                    lsp::swap(vFloatBuf[idx], vFloatBuf[(idx + 1) % nFloatCap]);
+                }
+
+                return STATUS_OK;
+            }
+
+            float value;
+            if (index == nFloatSize)
+            {
+                // Read index of base float
+                nread                   = sStream.readv(&index, nFloatBits);
+                if (nread != ssize_t(nFloatBits))
+                    return (nread < 0) ? status_t(-nread) : STATUS_CORRUPTED;
+
+                // Read delta
+                size_t delta            = 0;
+                status_t res            = read_varint(&delta);
+                if (res != STATUS_OK)
+                    return res;
+
+                // Compute floating-point value
+                int32_t dvalue          = zigzag_decode(delta);
+                const int32_t image     = vIntBuf[(base - index) % nFloatCap] + dvalue;
+                value                   = bin_to_float(image);
+            }
+            else
+            {
+                // Read just the floating-point value
+                int32_t image;
+                nread                   = sStream.readv(&image);
+                if (nread != ssize_t(sizeof(image) * 8))
+                    return (nread < 0) ? status_t(-nread) : STATUS_CORRUPTED;
+
+                value                   = bin_to_float(LE_TO_CPU(image));
+            }
+
+            // Push item to buffer and return result
+            vFloatBuf[nFloatHead]   = value;
+            nFloatHead              = (nFloatHead + 1) % nFloatCap;
+            if (nFloatSize < (nFloatCap - 2))
+                ++nFloatSize;
+
+            // Return value
+            *dst                    = value;
+
+            return STATUS_OK;
+        }
+
+        status_t Decompressor::read_varint(size_t *dst)
+        {
+            size_t value        = 0;
+            size_t shift        = 0;
+            uint8_t b;
+
+            do
+            {
+                ssize_t nread       = sStream.readv(&b, 7);
+                if (nread != 7)
+                    return (nread < 0) ? status_t(-nread) : STATUS_CORRUPTED;
+
+                value              |= size_t(b & 0x3f) << shift;
+                shift              += 6;
+            } while (b & 0x40);
+
+            *dst                = value;
+
+            return STATUS_OK;
+        }
+
+        status_t Decompressor::read_varint_icount(size_t *dst)
+        {
+            size_t bits         = 3;
+            size_t max          = 1 << bits;
+            size_t value        = 0;
+            size_t b            = 0;
+            size_t shift        = 0;
+
+            while (true)
+            {
+                ssize_t nread       = sStream.readv(fixed_int(&b), bits + 1);
+                if (nread != ssize_t(bits + 1))
+                    return (nread < 0) ? status_t(-nread) : STATUS_CORRUPTED;
+
+                // Decode value
+                value              |= (b & (max - 1)) << shift;
+                if (!(b & max))
+                    break;
+
+                // Update bit count
+                shift              += bits;
+                bits               += 2;
+                max               <<= 2;
+            }
+
+            *dst                = value;
+
+            return STATUS_OK;
+        }
+
+        status_t Decompressor::read_indices(index_t *dst, size_t count, bool read)
+        {
+            if (!read)
+            {
+                for (size_t i=0; i<count; ++i)
+                    dst[i]          = -1;
+                return STATUS_OK;
+            }
+
+            size_t value    = 0;
+            status_t res    = read_varint_icount(&value);
+            if (res != STATUS_OK)
+                return res;
+            dst[0]          = zigzag_decode(value);
+
+            for (size_t i=1; i<count; ++i)
+            {
+                status_t res            = read_varint_icount(&value);
+                if (res != STATUS_OK)
+                    return res;
+                dst[i]                  = dst[0] + zigzag_decode(value);
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t Decompressor::read_utf8(LSPString *dst)
+        {
+            // Read length of the string
+            size_t length   = 0;
+            status_t res    = read_varint(&length);
+            if (res != STATUS_OK)
+                return res;
+
+            // Allocate contents for the string data
+            char *buf       = static_cast<char *>(malloc(length * sizeof(char)));
+            if (buf == NULL)
+                return STATUS_NO_MEM;
+            lsp_finally { free(buf); };
+
+            // Read UTF-8 sequence
+            ssize_t nread = sStream.read_fully(buf, length);
+            if (nread != ssize_t(length))
+                return (nread < 0) ? status_t(-nread) : STATUS_CORRUPTED;
+
+            // Fill string with UTF-8 sequence
+            if (!dst->set_utf8(buf, length))
+                return STATUS_NO_MEM;
+
+            return STATUS_OK;
+        }
+
+        status_t Decompressor::parse_vertex(IObjHandler *handler, size_t coords)
+        {
+            float x = 0.0f, y = 0.0f, z = 0.0f, w = 1.0f;
+
+            status_t res    = read_float(&x);
+            if (res == STATUS_OK)
+                res         = read_float(&y);
+            if ((res == STATUS_OK) && (coords > 2))
+                res         = read_float(&z);
+            if ((res == STATUS_OK) && (coords > 3))
+                res         = read_float(&w);
+            if (res == STATUS_OK)
+                res         = handler->add_vertex(x, y, z, w);
+
+            return res;
+        }
+
+        status_t Decompressor::parse_pvertex(IObjHandler *handler, size_t coords)
+        {
+            float x = 0.0f, y = 0.0f, z = 0.0f, w = 1.0f;
+
+            status_t res    = read_float(&x);
+            if (res == STATUS_OK)
+                res             = read_float(&y);
+            if ((res == STATUS_OK) && (coords > 2))
+                res             = read_float(&z);
+            if ((res == STATUS_OK) && (coords > 3))
+                res             = read_float(&w);
+            if (res == STATUS_OK)
+                res             = handler->add_param_vertex(x, y, z, w);
+
+            return res;
+        }
+
+        status_t Decompressor::parse_normal(IObjHandler *handler, size_t coords)
+        {
+            float nx = 0.0f, ny = 0.0f, nz = 0.0f, nw = 0.0f;
+
+            status_t res    = read_float(&nx);
+            if (res == STATUS_OK)
+                res             = read_float(&ny);
+            if ((res == STATUS_OK) && (coords > 2))
+                res             = read_float(&nz);
+            if ((res == STATUS_OK) && (coords > 3))
+                res             = read_float(&nw);
+            if (res == STATUS_OK)
+                res             = handler->add_normal(nx, ny, nz, nw);
+
+            return res;
+        }
+
+        status_t Decompressor::parse_texcoord(IObjHandler *handler, size_t coords)
+        {
+            float u = 0.0f, v = 0.0f, w = 0.0f;
+
+            status_t res    = read_float(&u);
+            if ((res == STATUS_OK) && (coords > 1))
+                res             = read_float(&v);
+            if ((res == STATUS_OK) && (coords > 2))
+                res             = read_float(&w);
+            if (res == STATUS_OK)
+                res             = handler->add_texture_vertex(u, v, w);
+            return res;
+        }
+
+        status_t Decompressor::parse_face(IObjHandler *handler, bool texcoords, bool normals, bool fill)
+        {
+            size_t count    = 0;
+            status_t res    = read_varint_icount(&count);
+            if (res != STATUS_OK)
+                return res;
+
+            lltl::darray<index_t> data;
+            if (!data.reserve(count * 3))
+                return STATUS_NO_MEM;
+
+            index_t *vv             = data.array();
+            index_t *vt             = &vv[count];
+            index_t *vn             = &vt[count];
+
+            if ((res = read_indices(vv, count, true)) != STATUS_OK)
+                return res;
+            if ((res = read_indices(vt, count, texcoords)) != STATUS_OK)
+                return res;
+
+            if (fill)
+            {
+                size_t index    = 0;
+                if ((res = read_varint_icount(&index)) != STATUS_OK)
+                    return res;
+                for (size_t i=0; i<count; ++i)
+                    vn[i]           = index;
+            }
+            else
+            {
+                if ((res = read_indices(vn, count, normals)) != STATUS_OK)
+                    return res;
+            }
+
+
+            return handler->add_face(vv, vn, vt, count);
+        }
+
+        status_t Decompressor::parse_line(IObjHandler *handler, bool texcoords)
+        {
+            size_t count    = 0;
+            status_t res    = read_varint_icount(&count);
+            if (res != STATUS_OK)
+                return res;
+
+            lltl::darray<index_t> data;
+            if (!data.reserve(count * 2))
+                return STATUS_NO_MEM;
+
+            index_t *vv             = data.array();
+            index_t *vt             = &vv[count];
+            if ((res = read_indices(vv, count, true)) != STATUS_OK)
+                return res;
+            if ((res = read_indices(vt, count, texcoords)) != STATUS_OK)
+                return res;
+
+            return handler->add_line(vv, vt, count);
+        }
+
+        status_t Decompressor::parse_points(IObjHandler *handler)
+        {
+            size_t count    = 0;
+            status_t res    = read_varint_icount(&count);
+            if (res != STATUS_OK)
+                return res;
+
+            lltl::darray<index_t> data;
+            if (!data.reserve(count))
+                return STATUS_NO_MEM;
+
+            index_t *vv             = data.array();
+            if ((res = read_indices(vv, count, true)) != STATUS_OK)
+                return res;
+
+            return handler->add_points(vv, count);
+        }
+
+        status_t Decompressor::parse_object(IObjHandler *handler)
+        {
+            LSPString name;
+            status_t res    = read_utf8(&name);
+            if (res != STATUS_OK)
+                return res;
+
+            return handler->begin_object(&name);
+        }
+
+        status_t Decompressor::parse_data(IObjHandler *handler)
+        {
+            status_t res = parse_header();
+            if (res != STATUS_OK)
+                return res;
+
+            size_t nobj = 0;
+            compressed_event_type_t event;
+            while ((res = read_event(&event)) == STATUS_OK)
+            {
+                if (event == CEV_EOF)
+                    break;
+
+                switch (event)
+                {
+                    case CEV_VERTEX2:
+                        res     = parse_vertex(handler, 2);
+                        break;
+                    case CEV_VERTEX3:
+                        res     = parse_vertex(handler, 3);
+                        break;
+                    case CEV_VERTEX4:
+                        res     = parse_vertex(handler, 4);
+                        break;
+
+                    case CEV_PVERTEX2:
+                        res     = parse_pvertex(handler, 2);
+                        break;
+                    case CEV_PVERTEX3:
+                        res     = parse_pvertex(handler, 3);
+                        break;
+                    case CEV_PVERTEX4:
+                        res     = parse_pvertex(handler, 4);
+                        break;
+
+                    case CEV_TEXCOORD1:
+                        res     = parse_texcoord(handler, 1);
+                        break;
+                    case CEV_TEXCOORD2:
+                        res     = parse_texcoord(handler, 2);
+                        break;
+                    case CEV_TEXCOORD3:
+                        res     = parse_texcoord(handler, 3);
+                        break;
+
+                    case CEV_NORMAL2:
+                        res     = parse_normal(handler, 2);
+                        break;
+                    case CEV_NORMAL3:
+                        res     = parse_normal(handler, 3);
+                        break;
+                    case CEV_NORMAL4:
+                        res     = parse_normal(handler, 4);
+                        break;
+
+                    case CEV_FACE:
+                        res     = parse_face(handler, false, false, false);
+                        break;
+                    case CEV_FACE_T:
+                        res     = parse_face(handler, true, false, false);
+                        break;
+                    case CEV_FACE_N:
+                        res     = parse_face(handler, false, true, false);
+                        break;
+                    case CEV_FACE_NF:
+                        res     = parse_face(handler, false, true, true);
+                        break;
+                    case CEV_FACE_TN:
+                        res     = parse_face(handler, true, true, false);
+                        break;
+                    case CEV_FACE_TNF:
+                        res     = parse_face(handler, true, true, true);
+                        break;
+
+                    case CEV_LINE:
+                        res     = parse_line(handler, false);
+                        break;
+                    case CEV_LINE_T:
+                        res     = parse_line(handler, true);
+                        break;
+
+                    case CEV_POINT:
+                        res     = parse_points(handler);
+                        break;
+
+                    case CEV_OBJECT:
+                        if (nobj++)
+                        {
+                            if ((res = handler->end_object()) != STATUS_OK)
+                                return res;
+                        }
+                        res     = parse_object(handler);
+                        break;
+
+                    default:
+                        return STATUS_CORRUPTED;
+                }
+            }
+
+            // Post-process data
+            if (res == STATUS_OK)
+            {
+                if (nobj > 0)
+                {
+                    if ((res = handler->end_object()) != STATUS_OK)
+                        return res;
+                }
+
+                res = handler->end_of_data();
+            }
+
+            return res;
+        }
+
+    } /* namespace obj */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/fmt/obj/PullParser.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/fmt/obj/PullParser.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/fmt/obj/PullParser.cpp	2025-03-01 12:42:57.204645913 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/fmt/obj/PullParser.cpp	2025-08-26 18:15:43.698003563 +0000
@@ -41,7 +41,6 @@ namespace lsp
             nBufOff         = 0;
             nBufLen         = 0;
             nLines          = 0;
-            bSkipLF         = false;
             nVx             = 0;
             nParVx          = 0;
             nTexVx          = 0;
@@ -210,7 +209,6 @@ namespace lsp
             pBuffer         = b;
             nBufOff         = 0;
             nBufLen         = 0;
-            bSkipLF         = false;
             nLines          = 0;
             nVx             = 0;
             nParVx          = 0;
@@ -234,7 +232,6 @@ namespace lsp
             nBufOff         = 0;
             nBufLen         = 0;
             nLines          = 0;
-            bSkipLF         = false;
 
             // Release input sequence
             if (pIn != NULL)
@@ -351,27 +348,13 @@ namespace lsp
                     nBufOff     = 0;
                 }
 
-                // Scan for line ending
-                if (bSkipLF)
-                {
-                    bSkipLF = false;
-                    if (pBuffer[nBufOff] == '\r')
-                    {
-                        if ((++nBufOff) >= nBufLen)
-                            continue;
-                    }
-                }
-
                 // Scan for line ending character
                 size_t tail = nBufOff;
                 while (tail < nBufLen)
                 {
                     lsp_wchar_t ch = pBuffer[tail++];
                     if (ch == '\n') // Found!
-                    {
-                        bSkipLF = true;
                         break;
-                    }
                 }
 
                 // Append data to string and update buffer state
@@ -383,6 +366,8 @@ namespace lsp
                 if (sLine.last() != '\n') // Not end of line?
                     continue;
                 sLine.set_length(--len);
+                if (sLine.last() == '\r') // Remove carriage-return symbol if it is present
+                    sLine.set_length(--len);
 
                 // Compute number of terminating '\\' characters
                 ssize_t slashes = 0, xoff = len-1;
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/io/InBitStream.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/io/InBitStream.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/io/InBitStream.cpp	2025-03-01 12:42:57.204645913 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/io/InBitStream.cpp	2025-08-26 18:15:43.702003524 +0000
@@ -23,12 +23,13 @@
 #include <lsp-plug.in/io/InBitStream.h>
 #include <lsp-plug.in/io/InFileStream.h>
 
-#define BITSTREAM_BUFSZ         (sizeof(umword_t) * 8)
-
 namespace lsp
 {
     namespace io
     {
+        static constexpr size_t BITSTREAM_BUFSZ     = sizeof(umword_t) * 8;
+        static constexpr size_t BITSTREAM_BUFSZ32   = sizeof(uint32_t) * 8;
+
         InBitStream::InBitStream()
         {
             pIS         = NULL;
@@ -361,8 +362,9 @@ namespace lsp
                 }
 
                 // Estimate number of bits to read
-                size_t to_read      = lsp_min(nBits, bits - nread);
-                v                   = uint32_t((v << to_read) | (nBuffer >> (BITSTREAM_BUFSZ - to_read)));
+                const size_t to_read= lsp_min(nBits, bits - nread);
+                uint32_t x          = uint32_t(nBuffer >> (BITSTREAM_BUFSZ - to_read));
+                v                   = (to_read < BITSTREAM_BUFSZ32) ? uint32_t((v << to_read) | x) : x;
                 nBuffer           <<= to_read;
                 nBits              -= to_read;
                 nread              += to_read;
@@ -394,7 +396,7 @@ namespace lsp
 
                 // Estimate number of bits to read
                 size_t to_read      = lsp_min(nBits, bits - nread);
-                v                   = (v << to_read) | (nBuffer >> (BITSTREAM_BUFSZ - to_read));
+                v                   = (to_read < BITSTREAM_BUFSZ) ? (v << to_read) | (nBuffer >> (BITSTREAM_BUFSZ - to_read)) : nBuffer;
                 nBuffer           <<= to_read;
                 nBits              -= to_read;
                 nread              += to_read;
@@ -407,7 +409,9 @@ namespace lsp
 
         void InBitStream::unread(umword_t v, size_t bits)
         {
-            nBuffer     = (nBuffer >> bits) | (v << (BITSTREAM_BUFSZ - bits));
+            if (bits < BITSTREAM_BUFSZ)
+                v         <<= BITSTREAM_BUFSZ - bits;
+            nBuffer     = (nBuffer >> bits) | v;
             nBits      += bits;
         }
 
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/io/OutBitStream.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/io/OutBitStream.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/io/OutBitStream.cpp	2025-03-01 12:42:57.204645913 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/io/OutBitStream.cpp	2025-08-26 18:15:43.702003524 +0000
@@ -23,13 +23,13 @@
 #include <lsp-plug.in/io/OutFileStream.h>
 #include <lsp-plug.in/common/endian.h>
 
-#define BITSTREAM_BUFSZ     (sizeof(umword_t) * 8)
-#define BITSTREAM_BUFSZ32   (sizeof(uint32_t) * 8)
-
 namespace lsp
 {
     namespace io
     {
+        static constexpr size_t BITSTREAM_BUFSZ     = sizeof(umword_t) * 8;
+        static constexpr size_t BITSTREAM_BUFSZ32   = sizeof(uint32_t) * 8;
+
         OutBitStream::OutBitStream()
         {
             pOS         = NULL;
@@ -234,23 +234,23 @@ namespace lsp
 
             size_t written          = 0;
 
-            #if defined(ARCH_X86)
-                // x86 allows unaligned access, write with machine words first
-                const umword_t *wptr    = reinterpret_cast<const umword_t *>(buf);
-                size_t blocks           = count & (~(sizeof(umword_t) - 1));
+        #ifdef LSP_UNALIGNED_MEMORY_SAFE
+            // x86 allows unaligned access, write with machine words first
+            const umword_t *wptr    = reinterpret_cast<const umword_t *>(buf);
+            size_t blocks           = count & (~(sizeof(umword_t) - 1));
 
-                for ( ; written < blocks; written += sizeof(umword_t))
+            for ( ; written < blocks; written += sizeof(umword_t))
+            {
+                status_t res            = writev(BE_TO_CPU(*(wptr++)), sizeof(umword_t)*8);
+                if (res != STATUS_OK)
                 {
-                    status_t res            = writev(BE_TO_CPU(*(wptr++)), sizeof(umword_t)*8);
-                    if (res != STATUS_OK)
-                    {
-                        set_error(res);
-                        return (written <= 0) ? -res : written;
-                    }
+                    set_error(res);
+                    return (written <= 0) ? -res : written;
                 }
+            }
 
-                buf = wptr;
-            #endif /* ARCH_X86 */
+            buf = wptr;
+        #endif /* LSP_UNALIGNED_MEMORY_SAFE */
 
             // Write the rest data with bytes
             const uint8_t *bptr     = reinterpret_cast<const uint8_t *>(buf);
@@ -274,22 +274,22 @@ namespace lsp
 
             size_t written          = 0;
 
-            #if defined(ARCH_X86)
-                // x86 allows unaligned memory access, write with machine words first
-                const umword_t *wptr    = reinterpret_cast<const umword_t *>(buf);
-                size_t blocks           = bits & (~((sizeof(umword_t) << 3) - 1));
-                for ( ; written < blocks; written += sizeof(umword_t)*8)
+        #ifdef LSP_UNALIGNED_MEMORY_SAFE
+            // x86 allows unaligned memory access, write with machine words first
+            const umword_t *wptr    = reinterpret_cast<const umword_t *>(buf);
+            size_t blocks           = bits & (~((sizeof(umword_t) << 3) - 1));
+            for ( ; written < blocks; written += sizeof(umword_t)*8)
+            {
+                status_t res            = writev(BE_TO_CPU(*(wptr++)), sizeof(umword_t)*8);
+                if (res != STATUS_OK)
                 {
-                    status_t res            = writev(BE_TO_CPU(*(wptr++)), sizeof(umword_t)*8);
-                    if (res != STATUS_OK)
-                    {
-                        set_error(res);
-                        return (written <= 0) ? -res : written;
-                    }
+                    set_error(res);
+                    return (written <= 0) ? -res : written;
                 }
+            }
 
-                buf                     = wptr;
-            #endif
+            buf                     = wptr;
+        #endif /* LSP_UNALIGNED_MEMORY_SAFE */
 
             // Write the rest data with bytes
             const uint8_t *bptr     = reinterpret_cast<const uint8_t *>(buf);
@@ -389,7 +389,7 @@ namespace lsp
                 }
 
                 size_t avail    = lsp_min(bits, BITSTREAM_BUFSZ - nBits);
-                nBuffer         = (nBuffer << avail) | (value >> (BITSTREAM_BUFSZ32 - avail));
+                nBuffer         = (avail < BITSTREAM_BUFSZ) ? (nBuffer << avail) | (value >> (BITSTREAM_BUFSZ32 - avail)) : value;
                 nBits          += avail;
                 bits           -= avail;
                 value         <<= avail;
@@ -401,10 +401,22 @@ namespace lsp
         status_t OutBitStream::writev(uint64_t value, size_t bits)
         {
             status_t res;
-            if (pOS == NULL)
-                return set_error(STATUS_CLOSED);
 
-            #if defined(ARCH_64BIT)
+            #if defined(ARCH_32BIT)
+                // Need to write high part?
+                if (bits > BITSTREAM_BUFSZ32)
+                {
+                    if ((res = writev(uint32_t(value >> BITSTREAM_BUFSZ32), bits - BITSTREAM_BUFSZ32)) != STATUS_OK)
+                        return res;
+                    bits    = BITSTREAM_BUFSZ32;
+                }
+
+                // Write low part
+                return writev(uint32_t(value), bits);
+            #else
+                if (pOS == NULL)
+                    return set_error(STATUS_CLOSED);
+
                 value  <<= (BITSTREAM_BUFSZ - bits);
                 while (bits > 0)
                 {
@@ -416,26 +428,14 @@ namespace lsp
                     }
 
                     size_t avail    = lsp_min(bits, BITSTREAM_BUFSZ - nBits);
-                    nBuffer         = (nBuffer << avail) | (value >> (BITSTREAM_BUFSZ - avail));
+                    nBuffer         = (avail < BITSTREAM_BUFSZ) ? (nBuffer << avail) | (value >> (BITSTREAM_BUFSZ - avail)) : value;
                     nBits          += avail;
                     bits           -= avail;
                     value         <<= avail;
                 }
 
                 return set_error(STATUS_OK);
-
-            #else
-                // Need to write high part?
-                if (bits > BITSTREAM_BUFSZ)
-                {
-                    if ((res = writev(uint32_t(value >> BITSTREAM_BUFSZ), bits - BITSTREAM_BUFSZ)) != STATUS_OK)
-                        return res;
-                    bits    = BITSTREAM_BUFSZ;
-                }
-
-                // Write low part
-                return writev(uint32_t(value), bits);
-            #endif
+            #endif /* ARCH_32BIT */
         }
 
     } /* namespace io */
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/io/Path.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/io/Path.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/io/Path.cpp	2025-03-01 12:42:57.204645913 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/io/Path.cpp	2025-08-26 18:15:43.702003524 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 8 февр. 2019 г.
@@ -1601,7 +1601,7 @@ namespace lsp
         {
             fattr_t attr;
             status_t res = File::stat(&sPath, &attr);
-            return (res != STATUS_OK) ? attr.size : -res;
+            return (res == STATUS_OK) ? attr.size : -res;
         }
 
         bool Path::exists() const
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/ipc/NativeExecutor.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/ipc/NativeExecutor.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/ipc/NativeExecutor.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/ipc/NativeExecutor.cpp	2025-08-26 18:15:43.702003524 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 27 янв. 2016 г.
@@ -26,6 +26,8 @@ namespace lsp
 {
     namespace ipc
     {
+        static constexpr size_t POLL_INTERVAL = 20;
+
         NativeExecutor::NativeExecutor():
             hThread(execute, this)
         {
@@ -88,7 +90,7 @@ namespace lsp
                     atomic_unlock(nLock);
                 }
 
-                ipc::Thread::sleep(100);
+                ipc::Thread::sleep(POLL_INTERVAL);
             }
 
             // Now there are no pending tasks, terminate thread
@@ -105,7 +107,7 @@ namespace lsp
                 // Sleep until critical section is acquired
                 while (!atomic_trylock(nLock))
                 {
-                    if (ipc::Thread::sleep(100) == STATUS_CANCELLED)
+                    if (ipc::Thread::sleep(POLL_INTERVAL) == STATUS_CANCELLED)
                         return;
                 }
 
@@ -117,7 +119,7 @@ namespace lsp
                     atomic_unlock(nLock);
 
                     // Wait for a while
-                    if (ipc::Thread::sleep(100) == STATUS_CANCELLED)
+                    if (ipc::Thread::sleep(POLL_INTERVAL) == STATUS_CANCELLED)
                         return;
                 }
                 else
@@ -131,9 +133,18 @@ namespace lsp
                     atomic_unlock(nLock);
 
                     // Execute task
+                #ifdef LSP_TRACE
                     lsp_trace("executing task %p", task);
+                    const system::time_millis_t start = system::get_time_millis();
+                #endif /* LSP_TRACE */
+
                     run_task(task);
-                    lsp_trace("executed task %p with code %d", task, int(task->code()));
+
+                #ifdef LSP_TRACE
+                    const system::time_millis_t end = system::get_time_millis();
+                    lsp_trace("executed task %p with code %d, time=%d ms",
+                        task, int(task->code()), int(end - start));
+                #endif /* LSP_TRACE */
                 }
             }
         }
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/ipc/SharedMutex.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/ipc/SharedMutex.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/ipc/SharedMutex.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/ipc/SharedMutex.cpp	2025-08-26 18:15:43.702003524 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 24 апр. 2024 г.
@@ -189,8 +189,8 @@ namespace lsp
             return (hLock != NULL) ? STATUS_OK : STATUS_IO_ERROR;
         #elif defined(LSP_ROBUST_MUTEX_SUPPORTED)
             int error;
-            const char *path = name->get_native();
-            if (name == NULL)
+            const char *path = (name != NULL) ? name->get_native() : NULL;
+            if (path == NULL)
                 return STATUS_NO_MEM;
 
             static constexpr int open_mode =
@@ -286,7 +286,7 @@ namespace lsp
                     if ((error = pthread_mutexattr_init(&attr)) != 0)
                         return STATUS_UNKNOWN_ERR;
 
-                    if ((error = pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED) != 0))
+                    if ((error = pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED)) != 0)
                     {
                         switch (error)
                         {
@@ -536,7 +536,8 @@ namespace lsp
             {
                 case 0: break;
                 case EDEADLK: return STATUS_BAD_STATE;
-                case EBUSY: return STATUS_LOCKED;
+                case EBUSY:
+                    return STATUS_LOCKED;
                 case ETIMEDOUT: return STATUS_TIMED_OUT;
                 case EOWNERDEAD:
                 {
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/BuiltinLoader.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/BuiltinLoader.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/BuiltinLoader.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/BuiltinLoader.cpp	2025-08-26 18:15:43.706003485 +0000
@@ -168,11 +168,11 @@ namespace lsp
                 // Find entry and check that it is of directory type
                 status_t res = find_entry(&index, path);
                 if (res != STATUS_OK)
-                    return res;
+                    return -set_error(res);
 
                 ent = &pCatalog[index];
                 if (ent->type != RES_DIR)
-                    return STATUS_NOT_DIRECTORY;
+                    return -set_error(STATUS_NOT_DIRECTORY);
             }
 
             // Now create list of nested items
@@ -184,7 +184,7 @@ namespace lsp
 
                 resource_t *item = xlist.add();
                 if (item == NULL)
-                    return STATUS_NO_MEM;
+                    return -set_error(STATUS_NO_MEM);
 
                 strncpy(item->name, ent->name, RESOURCE_NAME_MAX);
                 item->name[RESOURCE_NAME_MAX - 1] = '\0';
@@ -194,6 +194,8 @@ namespace lsp
             // Return result
             index = xlist.size();
             *list = xlist.release();
+
+            set_error(STATUS_OK);
             return index;
         }
     } /* namespace resource */
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/Compressor.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/Compressor.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/Compressor.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/Compressor.cpp	2025-08-26 18:15:43.706003485 +0000
@@ -46,6 +46,7 @@ namespace lsp
         {
             nSegment        = 0;
             nOffset         = 0;
+//            hFD             = fopen("/tmp/compressor.log", "w");
         }
 
         Compressor::~Compressor()
@@ -200,8 +201,7 @@ namespace lsp
             status_t res = STATUS_OK;
             const uint8_t *head = sTemp.data();
             const uint8_t *tail = &head[flength];
-            ssize_t offset = 0, length = 0, append = 0;
-            size_t rep = 0;
+            size_t offset = 0;
 
 //            IF_TRACE(
 //                wssize_t coffset    = sOS.position();
@@ -213,59 +213,71 @@ namespace lsp
             while (head < tail)
             {
                 // Estimate the length of match
-                length      = sBuffer.lookup(&offset, head, tail-head);
-                if (length == 0)
-                    length      = 1;
-
-                // Calc number of repeats
-                rep         = calc_repeats(&head[length], tail);
-                append      = length + lsp_min(rep, REPEAT_BUF_MAX);
+                const size_t length = sBuffer.lookup(&offset, head, tail-head);
 
                 // Estimate size of output
-                size_t est1 = (est_uint(sBuffer.size() + *head, 5, 5) + est_uint(rep, 0, 4)) * length;     // How many bits per octet
-                size_t est2 = (offset < 0) ? est1 + 1 :
-                                est_uint(offset, 5, 5) +
-                                est_uint(length - 1, 5, 5) +
-                                est_uint(rep, 0, 4);
+                const size_t est1   = est_uint(sBuffer.size() + *head, 5, 5) * length; // How many bits used to emit octet command
+                const size_t est2   = (length > 0) ? est_uint(offset, 5, 5) + est_uint(length - 1, 5, 5) : est1 + 1;    // How many bits used to encode buffer replay command
 
-                if (est1 > est2) // Prefer buffer over dictionary
+                if (est2 < est1) // Prefer buffer replay over octet emission
                 {
-                    // REPLAY
-                    // Offset
+                    const size_t repeats    = calc_repeats(&head[length], tail);
+
+//                    fprintf(hFD, "BUFFER replays=%d, off=%d, length=%d, sequence=",
+//                        int(repeats), int(offset), int(length));
+//                    for (size_t i=0; i<length; ++i)
+//                        fprintf(hFD, "%02x ", head[i]);
+//                    for (size_t i=0; i<repeats; ++i)
+//                        fprintf(hFD, "%02x ", head[length - 1]);
+//                    fprintf(hFD, "\n");
+
+                    // REPLAY BUFFER
+                    // Emit Offset
                     if ((res = emit_uint(offset, 5, 5)) != STATUS_OK)
                         break;
-                    // Length
+                    // Emit Length - 1
                     if ((res = emit_uint(length - 1, 5, 5)) != STATUS_OK)
                         break;
-                    // Repeat
-                    if ((res = emit_uint(rep, 0, 4)) != STATUS_OK)
+                    // Emit Repeat counter
+                    if ((res = emit_uint(repeats, 0, 4)) != STATUS_OK)
                         break;
 
                     // Append data to buffer
-                    sBuffer.append(head, append);
-                    head           += length + rep;
+                    sBuffer.append(head, length + lsp_min(repeats, REPEAT_BUF_MAX));
+                    head           += length + repeats;
 
 //                    IF_TRACE(
-//                        ++ replays;
+//                        ++replays;
 //                        if (rep)
-//                            ++ repeats;
-//                    )
+//                            ++repeats;
+//                    );
                 }
                 else
                 {
-                    // OCTET
-                    // Value
+                    const size_t repeats    = calc_repeats(&head[1], tail);
+
+//                    fprintf(hFD, "OCTET  replays=%d, sequence=%02x ",
+//                        int(repeats), int(*head));
+//                    for (size_t i=0; i<repeats; ++i)
+//                        fprintf(hFD, "%02x ", int(*head));
+//                    fprintf(hFD, "\n");
+
+                    // EMIT OCTET
+                    // Emit Value
                     if ((res = emit_uint(sBuffer.size() + *head, 5, 5)) != STATUS_OK)
                         break;
-                    // Repeat
-                    if ((res = emit_uint(rep, 0, 4)) != STATUS_OK)
+                    // Emit Repeat counter
+                    if ((res = emit_uint(repeats, 0, 4)) != STATUS_OK)
                         break;
 
                     // Append data to buffer
-                    sBuffer.append(head, append);
-                    head           += length + rep;
-
-//                    IF_TRACE(++octets);
+                    sBuffer.append(head, 1 + lsp_min(repeats, REPEAT_BUF_MAX));
+                    head           += 1 + repeats;
+//                    IF_TRACE(
+//                        ++octets;
+//                        if (rep)
+//                            ++repeats;
+//                    );
                 }
             }
 
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/Decompressor.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/Decompressor.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/Decompressor.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/Decompressor.cpp	2025-08-26 18:15:43.706003485 +0000
@@ -137,7 +137,7 @@ namespace lsp
             // Need to allocate data?
             if ((sReplay.cap < count) || (sReplay.data == NULL))
             {
-                size_t cap      = align_size(count, BUFFER_QUANTITY);
+                size_t cap      = align_size(lsp_max(sReplay.cap + (sReplay.cap >> 1), count), BUFFER_QUANTITY);
                 uint8_t *ptr    = reinterpret_cast<uint8_t *>(realloc(sReplay.data, cap));
                 if (ptr == NULL)
                     return STATUS_NO_MEM;
@@ -147,7 +147,10 @@ namespace lsp
             }
 
             // Copy data to replay buffer
-            memcpy(sReplay.data, &sBuffer.data[sBuffer.head + off], count);
+            status_t res = sBuffer.extract(sReplay.data, off, count);
+            if (res != STATUS_OK)
+                return res;
+
             sReplay.off     = 0;
             sReplay.size    = count;
             sReplay.rep     = rep;
@@ -235,7 +238,7 @@ namespace lsp
 
             if (offset < sBuffer.size())
             {
-                // REPLAY
+                // REPLAY BUFFER
                 // Length
                 if ((res = read_uint(&length, 5, 5)) != STATUS_OK)
                     return res;
@@ -255,7 +258,7 @@ namespace lsp
             }
             else
             {
-                // OCTET
+                // EMIT OCTET
                 // Repeat
                 if ((res = read_uint(&rep, 0, 4)) != STATUS_OK)
                     return res;
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/DirLoader.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/DirLoader.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/DirLoader.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/DirLoader.cpp	2025-08-26 18:15:43.706003485 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 23 окт. 2020 г.
@@ -87,9 +87,10 @@ namespace lsp
             io::Path tmp;
             nError  = build_path(&tmp, path);
 
-            return (nError == STATUS_OK) ? ILoader::enumerate(&tmp, list) : -nError;
+            return (nError == STATUS_OK) ? ILoader::enumerate(&tmp, list) : -set_error(nError);
         }
-    }
-}
+
+    } /* namespace resource */
+} /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/ILoader.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/ILoader.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/ILoader.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/ILoader.cpp	2025-08-26 18:15:43.706003485 +0000
@@ -139,6 +139,8 @@ namespace lsp
 
         ssize_t ILoader::enumerate(const io::Path *path, resource_t **list)
         {
+            lsp_trace("path = %s", path->as_utf8());
+
             lltl::darray<resource_t> xlist;
             io::Dir dir;
             LSPString item;
@@ -146,7 +148,7 @@ namespace lsp
 
             status_t res = dir.open(path);
             if (res != STATUS_OK)
-                return -res;
+                return -set_error(res);
 
             while ((res = dir.reads(&item, &attr)) == STATUS_OK)
             {
@@ -160,13 +162,13 @@ namespace lsp
                 if (r == NULL)
                 {
                     dir.close();
-                    return -STATUS_NO_MEM;
+                    return -set_error(STATUS_NO_MEM);
                 }
                 const char *name = item.get_utf8();
                 if (name == NULL)
                 {
                     dir.close();
-                    return -STATUS_NO_MEM;
+                    return -set_error(STATUS_NO_MEM);
                 }
 
                 r->type = (attr.type == io::fattr_t::FT_DIRECTORY) ? RES_DIR : RES_FILE;
@@ -177,15 +179,18 @@ namespace lsp
             if (res != STATUS_EOF)
             {
                 dir.close();
-                return -res;
+                return -set_error(res);
             }
             else if ((res = dir.close()) != STATUS_OK)
-                return -res;
+                return -set_error(res);
 
             // Detach data pointer from the collection and return as result
             const ssize_t return_size = xlist.size();
             *list       = xlist.release();
 
+            lsp_trace("return %d resources %p", int(return_size), *list);
+
+            set_error(STATUS_OK);
             return return_size;
         }
 
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/PrefixLoader.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/PrefixLoader.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/resource/PrefixLoader.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/resource/PrefixLoader.cpp	2025-08-26 18:15:43.706003485 +0000
@@ -303,6 +303,7 @@ namespace lsp
 
         ssize_t PrefixLoader::enumerate(const char *path, resource::resource_t **list)
         {
+            lsp_trace("path = %s", path);
             LSPString tmp;
             ILoader *ldr = lookup_prefix(&tmp, path);
             if (ldr != NULL)
@@ -317,6 +318,7 @@ namespace lsp
 
         ssize_t PrefixLoader::enumerate(const LSPString *path, resource::resource_t **list)
         {
+            lsp_trace("path = %s", path->get_utf8());
             LSPString tmp;
             ILoader *ldr = lookup_prefix(&tmp, path);
             if (ldr != NULL)
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/main/runtime/buffer.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/runtime/buffer.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/main/runtime/buffer.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/main/runtime/buffer.cpp	2025-08-26 18:15:43.706003485 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 13 мар. 2021 г.
@@ -31,8 +31,9 @@ namespace lsp
         {
             data        = NULL;
             index       = NULL;
+            root        = NULL;
             head        = 0;
-            tail        = 0;
+            length      = 0;
             cap         = 0;
         }
 
@@ -43,19 +44,24 @@ namespace lsp
 
         status_t cbuffer_t::init(size_t capacity)
         {
-            size_t dbuf     = capacity * 2 * sizeof(uint8_t);
-            size_t ibuf     = capacity * 2 * sizeof(uint32_t);
+            const size_t dbuf   = capacity * sizeof(uint8_t);
+            const size_t ibuf   = capacity * sizeof(uint32_t);
+            const size_t rbuf   = 0x100 * sizeof(uint32_t);
 
-            uint8_t *ptr    = static_cast<uint8_t *>(realloc(data, dbuf + ibuf));
+            uint8_t *ptr    = static_cast<uint8_t *>(realloc(data, dbuf + ibuf + rbuf));
             if (ptr == NULL)
                 return STATUS_NO_MEM;
 
-            data            = ptr;
-            index           = reinterpret_cast<uint32_t *>(&ptr[dbuf]);
+            data            = advance_ptr_bytes<uint8_t>(ptr, dbuf);
+            index           = advance_ptr_bytes<uint32_t>(ptr, ibuf);
+            root            = advance_ptr_bytes<uint32_t>(ptr, rbuf);
             head            = 0;
-            tail            = 0;
+            length          = 0;
             cap             = capacity;
 
+            for (size_t i=0; i < 0x100; ++i)
+                root[i]     = -1;
+
             return STATUS_OK;
         }
 
@@ -65,128 +71,135 @@ namespace lsp
                 free(data);
             data            = NULL;
             index           = NULL;
+            root            = NULL;
             head            = 0;
-            tail            = 0;
+            length          = 0;
             cap             = 0;
         }
 
-        void cbuffer_t::append(const void *src, ssize_t count)
+        void cbuffer_t::append(const void *src, size_t count)
         {
-            const uint8_t *v    = reinterpret_cast<const uint8_t *>(src);
-            ssize_t avail       = ((cap << 1) - tail);
-            if (count < avail)
+            const uint8_t *v        = static_cast<const uint8_t *>(src);
+            if (count >= cap)
             {
-                memcpy(&data[tail], v, count * sizeof(uint8_t));
-                bzero(&index[tail], count * sizeof(uint32_t));
-                tail      += count;
-                head       = lsp_max(head, tail - cap);
+                // Cleanup root index and reset head
+                for (size_t i=0; i<0x100; ++i)
+                    root[i]         = -1;
+                length              = 0;
+                head                = 0;
+
+                // Append tail only
+                v                  += count - cap;
+                count               = cap;
             }
-            else if (count < cap)
-            {
-                ssize_t head    = tail + count - cap;
-                memmove(data, &data[head], tail - head);
-                memcpy(&data[tail - head], v, count);
 
-                memmove(index, &index[head], (tail - head) * sizeof(uint32_t));
-                bzero(&index[tail - head], count * sizeof(uint32_t));
+            // Fill the buffer
+            const size_t ohead  = head;
+            head                = (head + count) % cap;
+            if (head < ohead)
+            {
+                const size_t split  = cap - ohead;
+                memcpy(&data[ohead], v, split * sizeof(uint8_t));
+                memcpy(&data[0], &v[split], (count - split) * sizeof(uint8_t));
             }
             else
-            {
-                memcpy(data, &v[count - cap], cap * sizeof(uint8_t));
-                bzero(index, cap * sizeof(uint32_t));
+                memcpy(&data[ohead], v, count * sizeof(uint8_t));
 
-                head       = 0;
-                tail       = cap;
+            // Update index
+            uint32_t new_length = length;
+            for (size_t i=0; i<count; ++i)
+            {
+                const size_t off    = (ohead + i) % cap;        // Compute offset
+                const uint8_t b     = v[i];                     // Fetch byte
+                index[off]          = root[b];                  // Store offset of previous element
+                root[b]             = new_length++;             // Update absolute root offset
             }
+
+            // Update buffer length and sequence counter
+            length              = new_length;
         }
 
-        void cbuffer_t::append(uint8_t v)
+        void cbuffer_t::append(uint8_t b)
         {
-            // Shift buffer if needed
-            if (tail >= (cap << 1))
-            {
-                memmove(data, &data[cap],   cap * sizeof(uint8_t));
-                memmove(index, &index[cap], cap * sizeof(uint32_t));
-                head  -= cap;
-                tail  -= cap;
-            }
-
             // Append byte
-            data[tail]      = v;        // Data byte
-            index[tail]     = 0;        // No index
-            ++tail;
-            head            = lsp_max(head, tail - cap);
+            data[head]      = b;                        // Data byte
+            index[head]     = root[b];                  // Store offset of previous element
+            root[b]         = length++;                 // Update length
+            head            = (head + 1) % cap;         // Update head
         }
 
-        size_t cbuffer_t::lookup(ssize_t *out, const void *src, size_t avail)
+        size_t cbuffer_t::lookup(size_t *out, const void *src, size_t avail)
         {
-            ssize_t offset      = -1;
+            const uint8_t *v    = static_cast<const uint8_t *>(src);
+            const size_t dmax   = size();
+
             size_t len          = 0;
+            ssize_t offset      = 0;
 
-            const uint8_t *s    = reinterpret_cast<const uint8_t *>(src);
-            const uint8_t *p    = &data[head];
-            uint32_t *ix        = &index[head];
-            ssize_t ixp         = -1;
-            size_t di           = 0;
+            // We can not find sequence larger than 'length' bytes
+            avail               = lsp_min(avail, dmax);
 
-            for (size_t i=0, n=tail - head; i<(n - len); i += di)
+            // Lookup among all matches
+            uint32_t delta      = length - root[*v];
+            while (delta <= dmax)
             {
-                // Find first character match
-                if (p[i] != *s)
+                // Byte matched, do some heuristics
+                const size_t soff       = (head + cap - delta) % cap;
+                if ((len > 1) && (data[(soff + len - 1) % cap] != v[len-1]))
                 {
-                    di          = 1;
+                    delta                   = length - index[soff];
                     continue;
                 }
 
-                // Symbol matched, update index it if needed
-                if ((ixp >= 0) && (!ix[ixp]))
-                    ix[ixp]     = uint32_t(i - ixp);
-                ixp = i;                            // Save index as previous match
-                di  = (ix[i]) ? ix[i] : 1;
-
-                // Quick test
-                if (len >= 3)
+                // Compute the length of the sub-sequence
+                const size_t lookup     = lsp_min(avail, delta);
+                size_t slen             = 1;
+                for (size_t i=1; i<lookup; ++i)
                 {
-                    // Check last byte
-                    size_t last   = len - 1;
-                    if (p[i + last] != s[last])
-                        continue;
-
-                    // Check middle byte
-                    last >>= 1;
-                    if (p[i + last] != s[last])
-                        continue;
-                }
-
-                // Perform full test
-                size_t slen     = 1; // Sequence length
-                size_t count    = lsp_min(avail, n - i);
-                for (size_t j=1; j<count; ++j, ++slen)
-                    if (p[i+j] != s[j])
+                    if (v[i] != data[(soff + i) % cap])
                         break;
+                    ++slen;
+                }
 
+                // Update lookup result
                 if (len < slen)
                 {
-                    offset          = i;
-                    len             = slen;
+                    offset              = delta;
+                    len                 = slen;
+                    if (len >= avail)
+                        break;
                 }
+
+                // Update search position
+                delta                   = length - index[soff];
             }
 
-            *out        = offset;
+            *out        = offset - 1;
             return len;
         }
 
+        uint8_t cbuffer_t::byte_at(size_t offset)
+        {
+            return (offset < cap) ? data[(head + cap - offset - 1) % cap] : 0;
+        }
+
         void cbuffer_t::clear()
         {
             head            = 0;
-            tail            = 0;
+            length          = 0;
+
+            if (root != NULL)
+            {
+                for (size_t i=0; i < 0x100; ++i)
+                    root[i]     = -1;
+            }
         }
 
         dbuffer_t::dbuffer_t()
         {
             data        = NULL;
+            length      = 0;
             head        = 0;
-            tail        = 0;
             cap         = 0;
         }
 
@@ -197,14 +210,14 @@ namespace lsp
 
         status_t dbuffer_t::init(size_t capacity)
         {
-            size_t dbuf     = capacity * 2 * sizeof(uint8_t);
+            size_t dbuf     = capacity * sizeof(uint8_t);
             uint8_t *ptr    = static_cast<uint8_t *>(realloc(data, dbuf));
             if (ptr == NULL)
                 return STATUS_NO_MEM;
 
             data            = ptr;
+            length          = 0;
             head            = 0;
-            tail            = 0;
             cap             = capacity;
 
             return STATUS_OK;
@@ -215,57 +228,76 @@ namespace lsp
             if (data != NULL)
                 free(data);
             data            = NULL;
+            length          = 0;
             head            = 0;
-            tail            = 0;
             cap             = 0;
         }
 
-        void dbuffer_t::append(const void *src, ssize_t count)
+        void dbuffer_t::append(const void *src, size_t count)
         {
-            const uint8_t *v    = reinterpret_cast<const uint8_t *>(src);
-            ssize_t avail       = ((cap << 1) - tail);
-            if (count < avail)
+            const uint8_t *v    = static_cast<const uint8_t *>(src);
+            if (count >= cap)
             {
-                memcpy(&data[tail], v, count * sizeof(uint8_t));
-                tail      += count;
-                head       = lsp_max(head, tail - cap);
+                // Replace data in the buffer
+                memcpy(data, &v[count - cap], cap * sizeof(uint8_t));
+                length      = cap;
+                head        = 0;
+                return;
             }
-            else if (count < cap)
+
+            // Copy data to the buffer
+            size_t ohead        = head;
+            head                = (head + count) % cap;
+            if (head < ohead)
             {
-                ssize_t head    = tail + count - cap;
-                memmove(data, &data[head], tail - head);
-                memcpy(&data[tail - head], v, count);
+                const size_t split  = cap - ohead;
+                memcpy(&data[ohead], v, split * sizeof(uint8_t));
+                memcpy(&data[0], &v[split], head * sizeof(uint8_t));
             }
             else
-            {
-                memcpy(data, &v[count - cap], cap * sizeof(uint8_t));
-                head       = 0;
-                tail       = cap;
-            }
+                memcpy(&data[ohead], v, count * sizeof(uint8_t));
+
+            length              = lsp_min(length + count, cap);
         }
 
-        void dbuffer_t::append(uint8_t v)
+        status_t dbuffer_t::extract(void *dst, size_t offset, size_t count)
         {
-            // Shift buffer if needed
-            if (tail >= (cap << 1))
+            if (offset >= length)
+                return STATUS_UNDERFLOW;
+
+            const size_t shift  = offset + 1;
+            if (count > shift)
+                return STATUS_UNDERFLOW;
+
+            uint8_t *dptr       = static_cast<uint8_t *>(dst);
+            uint32_t soff       = (head + cap - shift) % cap;
+
+            if ((soff + count) > cap)
             {
-                memmove(data, &data[cap], cap * sizeof(uint8_t));
-                head  -= cap;
-                tail  -= cap;
+                const size_t split = cap - soff;
+                memcpy(dptr, &data[soff], split * sizeof(uint8_t));
+                memcpy(&dptr[split], data, (count - split) * sizeof(uint8_t));
             }
+            else
+                memcpy(dptr, &data[soff], count * sizeof(uint8_t));
 
-            // Append byte
-            data[tail]      = v;        // Data byte
-            ++tail;
-            head            = lsp_max(head, tail - cap);
+            return STATUS_OK;
+        }
+
+        void dbuffer_t::append(uint8_t v)
+        {
+            data[head]      = v;
+            head            = (head + 1) % cap;
+            length          = lsp_min(length + 1, cap);
         }
 
         void dbuffer_t::clear()
         {
+            length          = 0;
             head            = 0;
-            tail            = 0;
         }
-    }
-}
+
+    } /* namespace resource */
+} /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/expr/expression.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/expr/expression.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/expr/expression.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/expr/expression.cpp	2025-08-26 18:15:43.706003485 +0000
@@ -357,6 +357,7 @@ UTEST_BEGIN("runtime.expr", expression)
         test_float("arcsin 0.5", &v, M_PI / 6);
         test_float("arccos 0.5", &v, M_PI / 3);
         test_float("abs -10.1 - abs 4", &v, 6.1);
+        test_float("2.0 ** 2.0 ** 4.0", &v, 256.0);
 
         test_int("0b1011_0010", &v, 0xb2);
         test_int("0o1_1", &v, 9);
@@ -376,6 +377,9 @@ UTEST_BEGIN("runtime.expr", expression)
         test_int("undef <=> :za", &v, -1);
         test_int("int :ba + int :fg", &v, 15);
         test_int("abs -10 - abs 4", &v, 6);
+        test_int("10 - 3 - 2", &v, 5);
+        test_int("40/10/2", &v, 2);
+        test_int("0x3f band 0xdf band 0xfe", &v, 0x1e);
 
         test_bool(":zoom1 le -9 db", &v, true);
         test_bool(":zoom2 le -9 db", &v, false);
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/fmt/obj/compressor.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/fmt/obj/compressor.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/fmt/obj/compressor.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/fmt/obj/compressor.cpp	2025-08-26 18:15:43.710003446 +0000
@@ -0,0 +1,507 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-runtime-lib
+ * Created on: 23 июл. 2025 г.
+ *
+ * lsp-runtime-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-runtime-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-runtime-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/test-fw/helpers.h>
+#include <lsp-plug.in/fmt/obj/Compressor.h>
+#include <lsp-plug.in/fmt/obj/Decompressor.h>
+#include <lsp-plug.in/fmt/obj/PushParser.h>
+#include <lsp-plug.in/lltl/parray.h>
+#include <lsp-plug.in/runtime/LSPString.h>
+
+namespace lsp
+{
+    namespace
+    {
+        enum call_type_t
+        {
+            EV_BEGIN_OBJECT,
+            EV_END_OBJECT,
+            EV_END_OF_DATA,
+            EV_ADD_VERTEX,
+            EV_ADD_PARAM_VERTEX,
+            EV_ADD_NORMAL,
+            EV_ADD_TEXTURE_VERTEX,
+            EV_ADD_FACE,
+            EV_ADD_POINTS,
+            EV_ADD_LINE
+        };
+
+        typedef struct call_t
+        {
+            call_type_t type;
+            union
+            {
+                struct { float x, y, z, w;      } vertex;
+                struct { float dx, dy, dz, dw;  } normal;
+                struct { float u, v, w;         } texcoord;
+                char *name;
+                struct {
+                    size_t              count;
+                    obj::index_t       *v;
+                    obj::index_t       *t;
+                    obj::index_t       *n;
+                } indices;
+            };
+        } call_t;
+
+        class ObjRecorder: public obj::IObjHandler
+        {
+            protected:
+                lltl::parray<call_t> vCalls;
+
+            protected:
+                call_t *add_call(call_type_t type, size_t bytes)
+                {
+                    call_t *call        = reinterpret_cast<call_t *>(malloc(sizeof(call_t) + bytes));
+                    if (call == NULL)
+                        return NULL;
+                    if (!vCalls.add(call))
+                    {
+                        free(call);
+                        return NULL;
+                    }
+
+                    bzero(call, sizeof(call_t));
+                    call->type          = type;
+
+                    switch (type)
+                    {
+                        case EV_BEGIN_OBJECT:
+                            call->name              = reinterpret_cast<char *>(&call[1]);
+                            break;
+                        case EV_ADD_FACE:
+                            call->indices.v         = reinterpret_cast<obj::index_t *>(&call[1]);
+                            call->indices.t         = &call->indices.v[bytes / (3 * sizeof(obj::index_t))];
+                            call->indices.n         = &call->indices.t[bytes / (3 * sizeof(obj::index_t))];
+                            break;
+
+                        case EV_ADD_POINTS:
+                            call->indices.v         = reinterpret_cast<obj::index_t *>(&call[1]);
+                            break;
+
+                        case EV_ADD_LINE:
+                            call->indices.v         = reinterpret_cast<obj::index_t *>(&call[1]);
+                            call->indices.t         = &call->indices.v[bytes / (2 * sizeof(obj::index_t))];
+                            break;
+
+                        default:
+                            break;
+                    }
+
+                    return call;
+                }
+
+            public:
+                ObjRecorder()
+                {
+                }
+
+                virtual ~ObjRecorder() override
+                {
+                    for (size_t i=0, n = vCalls.size(); i<n; ++i)
+                    {
+                        call_t *call = vCalls.uget(i);
+                        free(call);
+                    }
+                    vCalls.flush();
+                }
+
+            public:
+                virtual status_t begin_object(const char *name) override
+                {
+                    const size_t bytes = strlen(name) + 1;
+                    call_t *call    = add_call(EV_BEGIN_OBJECT, bytes);
+                    if (call == NULL)
+                        return STATUS_NO_MEM;
+                    memcpy(call->name, name, bytes);
+                    return STATUS_OK;
+                }
+
+                virtual status_t begin_object(const LSPString *name) override
+                {
+                    return begin_object(name->get_utf8());
+                }
+
+                virtual status_t end_object() override
+                {
+                    return (add_call(EV_END_OBJECT, 0) != NULL) ? STATUS_OK : STATUS_NO_MEM;
+                }
+
+                virtual status_t end_of_data() override
+                {
+                    return (add_call(EV_END_OF_DATA, 0) != NULL) ? STATUS_OK : STATUS_NO_MEM;
+                }
+
+                virtual ssize_t add_vertex(float x, float y, float z, float w) override
+                {
+                    call_t *call        = add_call(EV_ADD_VERTEX, 0);
+                    if (call == NULL)
+                        return STATUS_NO_MEM;
+
+                    call->vertex.x      = x;
+                    call->vertex.y      = y;
+                    call->vertex.z      = z;
+                    call->vertex.w      = w;
+
+                    return STATUS_OK;
+                }
+
+                virtual ssize_t add_param_vertex(float x, float y, float z, float w) override
+                {
+                    call_t *call        = add_call(EV_ADD_PARAM_VERTEX, 0);
+                    if (call == NULL)
+                        return STATUS_NO_MEM;
+
+                    call->vertex.x      = x;
+                    call->vertex.y      = y;
+                    call->vertex.z      = z;
+                    call->vertex.w      = w;
+
+                    return STATUS_OK;
+                }
+
+                virtual ssize_t add_normal(float nx, float ny, float nz, float nw) override
+                {
+                    call_t *call        = add_call(EV_ADD_NORMAL, 0);
+                    if (call == NULL)
+                        return STATUS_NO_MEM;
+
+                    call->normal.dx     = nx;
+                    call->normal.dy     = ny;
+                    call->normal.dz     = nz;
+                    call->normal.dw     = nw;
+
+                    return STATUS_OK;
+                }
+
+                virtual ssize_t add_texture_vertex(float u, float v, float w) override
+                {
+                    call_t *call        = add_call(EV_ADD_TEXTURE_VERTEX, 0);
+                    if (call == NULL)
+                        return STATUS_NO_MEM;
+
+                    call->texcoord.u    = u;
+                    call->texcoord.v    = v;
+                    call->texcoord.w    = w;
+
+                    return STATUS_OK;
+                }
+
+                virtual ssize_t add_face(const obj::index_t *vv, const obj::index_t *vn, const obj::index_t *vt, size_t n) override
+                {
+                    call_t *call        = add_call(EV_ADD_FACE, n * sizeof(obj::index_t) * 3);
+                    if (call == NULL)
+                        return STATUS_NO_MEM;
+
+                    call->indices.count     = n;
+                    memcpy(call->indices.v, vv, n * sizeof(obj::index_t));
+                    memcpy(call->indices.t, vt, n * sizeof(obj::index_t));
+                    memcpy(call->indices.n, vn, n * sizeof(obj::index_t));
+
+                    return STATUS_OK;
+                }
+
+                virtual ssize_t add_points(const obj::index_t *vv, size_t n) override
+                {
+                    call_t *call        = add_call(EV_ADD_POINTS, n * sizeof(obj::index_t));
+                    if (call == NULL)
+                        return STATUS_NO_MEM;
+
+                    call->indices.count     = n;
+                    memcpy(call->indices.v, vv, n * sizeof(obj::index_t));
+
+                    return STATUS_OK;
+                }
+
+                virtual ssize_t add_line(const obj::index_t *vv, const obj::index_t *vt, size_t n) override
+                {
+                    call_t *call        = add_call(EV_ADD_LINE, n * sizeof(obj::index_t) * 2);
+                    if (call == NULL)
+                        return STATUS_NO_MEM;
+
+                    call->indices.count     = n;
+                    memcpy(call->indices.v, vv, n * sizeof(obj::index_t));
+                    memcpy(call->indices.t, vt, n * sizeof(obj::index_t));
+
+                    return STATUS_OK;
+                }
+
+            public:
+                inline const call_t *get(size_t i) const
+                {
+                    return vCalls.get(i);
+                }
+
+
+        };
+    }
+} /* namespace lsp */
+
+UTEST_BEGIN("runtime.fmt.obj", compressor)
+
+    status_t read_obj_file(ObjRecorder *data, const io::Path *path)
+    {
+        obj::PushParser parser;
+        return parser.parse_file(data, path);
+    }
+
+    status_t read_compressed_obj_file(ObjRecorder *data, const io::Path *path)
+    {
+        obj::Decompressor parser;
+        return parser.parse_file(data, path);
+    }
+
+    ssize_t compare(const ObjRecorder *a, const ObjRecorder *b)
+    {
+        for (size_t i=0; ; ++i)
+        {
+            const call_t *ca = a->get(i);
+            const call_t *cb = b->get(i);
+
+            if (ca == NULL)
+            {
+                if (cb == NULL)
+                    return -1;
+                printf("Missing record #%d for second file\n", int(i));
+                return i;
+            }
+            else if (cb == NULL)
+            {
+                printf("Missing record #%d for first file\n", int(i));
+                return i;
+            }
+
+            if (ca->type != cb->type)
+            {
+                printf("Record #%d type %d does not match record type %d\n",
+                    int(i), int(ca->type), int(cb->type));
+                return i;
+            }
+
+            switch (ca->type)
+            {
+                case EV_BEGIN_OBJECT:
+                    if (strcmp(ca->name, cb->name) != 0)
+                    {
+                        printf("Record #%d object name '%s' does not match object name '%s'\n",
+                            int(i), ca->name, cb->name);
+                        return i;
+                    }
+                    break;
+
+                case EV_ADD_VERTEX:
+                    if ((ca->vertex.x != cb->vertex.x) ||
+                        (ca->vertex.y != cb->vertex.y) ||
+                        (ca->vertex.z != cb->vertex.z) ||
+                        (ca->vertex.w != cb->vertex.w))
+                    {
+                        printf("Record #%d vertex {%f, %f, %f, %f} does not match vertex {%f, %f, %f, %f}\n",
+                            int(i),
+                            ca->vertex.x, ca->vertex.y, ca->vertex.z, ca->vertex.w,
+                            cb->vertex.x, cb->vertex.y, cb->vertex.z, cb->vertex.w);
+                        return i;
+                    }
+                    break;
+
+                case EV_ADD_PARAM_VERTEX:
+                    if ((ca->vertex.x != cb->vertex.x) ||
+                        (ca->vertex.y != cb->vertex.y) ||
+                        (ca->vertex.z != cb->vertex.z) ||
+                        (ca->vertex.w != cb->vertex.w))
+                    {
+                        printf("Record #%d parameter vertex {%f, %f, %f, %f} does not match parameter vertex {%f, %f, %f, %f}\n",
+                            int(i),
+                            ca->vertex.x, ca->vertex.y, ca->vertex.z, ca->vertex.w,
+                            cb->vertex.x, cb->vertex.y, cb->vertex.z, cb->vertex.w);
+                        return i;
+                    }
+                    break;
+
+                case EV_ADD_NORMAL:
+                    if ((ca->normal.dx != cb->normal.dx) ||
+                        (ca->normal.dy != cb->normal.dy) ||
+                        (ca->normal.dz != cb->normal.dz) ||
+                        (ca->normal.dw != cb->normal.dw))
+                    {
+                        printf("Record #%d normal {%f, %f, %f, %f} does not match normal {%f, %f, %f, %f}\n",
+                            int(i),
+                            ca->normal.dx, ca->normal.dy, ca->normal.dz, ca->normal.dw,
+                            cb->normal.dx, cb->normal.dy, cb->normal.dz, cb->normal.dw);
+                        return i;
+                    }
+                    break;
+
+                case EV_ADD_TEXTURE_VERTEX:
+                    if ((ca->texcoord.u != cb->texcoord.u) ||
+                        (ca->texcoord.v != cb->texcoord.v) ||
+                        (ca->texcoord.w != cb->texcoord.w))
+                    {
+                        printf("Record #%d normal {%f, %f, %f} does not match normal {%f, %f, %f}\n",
+                            int(i),
+                            ca->texcoord.u, ca->texcoord.v, ca->texcoord.w,
+                            cb->texcoord.u, cb->texcoord.v, cb->texcoord.w);
+                        return i;
+                    }
+                    break;
+
+                case EV_ADD_FACE:
+                    if (ca->indices.count != cb->indices.count)
+                    {
+                        printf("Record #%d number of face indices %d does not match %d\n",
+                            int(i), int(ca->indices.count), int(cb->indices.count));
+                        return i;
+                    }
+                    for (size_t j=0; j<ca->indices.count; ++j)
+                    {
+                        if (ca->indices.v[j] != cb->indices.v[j])
+                        {
+                            printf("Record #%d face vertex index #%d value %d differs to %d\n",
+                                int(i), int(j), int(ca->indices.v[j]), int(cb->indices.v[j]));
+                            return i;
+                        }
+                    }
+                    for (size_t j=0; j<ca->indices.count; ++j)
+                    {
+                        if (ca->indices.t[j] != cb->indices.t[j])
+                        {
+                            printf("Record #%d face texture index #%d value %d differs to %d\n",
+                                int(i), int(j), int(ca->indices.t[j]), int(cb->indices.t[j]));
+                            return i;
+                        }
+                    }
+                    for (size_t j=0; j<ca->indices.count; ++j)
+                    {
+                        if (ca->indices.n[j] != cb->indices.n[j])
+                        {
+                            printf("Record #%d face normal index #%d value %d differs to %d\n",
+                                int(i), int(j), int(ca->indices.n[j]), int(cb->indices.n[j]));
+                            return i;
+                        }
+                    }
+                    break;
+
+                case EV_ADD_POINTS:
+                    if (ca->indices.count != cb->indices.count)
+                    {
+                        printf("Record #%d number of point indices %d does not match %d\n",
+                            int(i), int(ca->indices.count), int(cb->indices.count));
+                        return i;
+                    }
+                    for (size_t j=0; j<ca->indices.count; ++j)
+                    {
+                        if (ca->indices.v[j] != cb->indices.v[j])
+                        {
+                            printf("Record #%d point vertex index #%d value %d differs to %d\n",
+                                int(i), int(j), int(ca->indices.v[j]), int(cb->indices.v[j]));
+                            return i;
+                        }
+                    }
+                    break;
+
+                case EV_ADD_LINE:
+                    if (ca->indices.count != cb->indices.count)
+                    {
+                        printf("Record #%d number of line indices %d does not match %d\n",
+                            int(i), int(ca->indices.count), int(cb->indices.count));
+                        return i;
+                    }
+
+                    for (size_t j=0; j<ca->indices.count; ++j)
+                    {
+                        if (ca->indices.v[j] != cb->indices.v[j])
+                        {
+                            printf("Record #%d line vertex index #%d value %d differs to %d\n",
+                                int(i), int(j), int(ca->indices.v[j]), int(cb->indices.v[j]));
+                            return i;
+                        }
+                    }
+                    for (size_t j=0; j<ca->indices.count; ++j)
+                    {
+                        if (ca->indices.t[j] != cb->indices.t[j])
+                        {
+                            printf("Record #%d line texture index #%d value %d differs to %d\n",
+                                int(i), int(j), int(ca->indices.t[j]), int(cb->indices.t[j]));
+                            return i;
+                        }
+                    }
+
+                    break;
+
+                case EV_END_OF_DATA:
+                case EV_END_OBJECT:
+                default:
+                    break;
+            }
+        }
+
+        return -1;
+    }
+
+    void test_compress_obj_file(const char *fname, const char *postfix)
+    {
+        io::Path src, dst;
+        UTEST_ASSERT(src.fmt("%s/%s", resources(), fname) > 0);
+        UTEST_ASSERT(dst.fmt("%s/utest-%s-%s.cobj", tempdir(), full_name(), postfix) > 0);
+
+        printf("Compressing %s -> %s\n", src.as_native(), dst.as_native());
+
+        obj::Compressor c;
+        obj::PushParser p;
+
+        UTEST_ASSERT(c.set_buffer_size(7) == STATUS_OK);
+        UTEST_ASSERT(c.open(&dst, io::File::FM_WRITE_NEW) == STATUS_OK);
+        UTEST_ASSERT(p.parse_file(&c, &src) == STATUS_OK);
+        UTEST_ASSERT(c.close() == STATUS_OK);
+
+        const wssize_t src_size = src.size();
+        UTEST_ASSERT(src_size >= 0);
+        const wssize_t dst_size = dst.size();
+        UTEST_ASSERT(dst_size >= 0);
+
+        printf("Stats: uncompressed size = %d, compressed size = %d, ratio: %.3f\n",
+            int(src_size), int(dst_size),
+            double(src_size) / double(dst_size));
+
+        printf("Validating result...\n");
+        ObjRecorder osrc, odst;
+
+        status_t res = read_obj_file(&osrc, &src);
+        UTEST_ASSERT_MSG(res == STATUS_OK, "read_obj_file failed with code=%d", int(res));
+        res = read_compressed_obj_file(&odst, &dst);
+        UTEST_ASSERT_MSG(res == STATUS_OK, "read_compressed_obj_file failed with code=%d", int(res));
+        ssize_t diff = compare(&osrc, &odst);
+        UTEST_ASSERT_MSG(diff < 0, "Source and destination records #%d differ", int(diff));
+    }
+
+    UTEST_MAIN
+    {
+        printf("Testing compression of complicated OBJ files...\n");
+        test_compress_obj_file("fmt/obj/parking.obj", "parking");
+        test_compress_obj_file("fmt/obj/coliseum.obj", "coliseum");
+        test_compress_obj_file("fmt/obj/forest.obj", "forest");
+        test_compress_obj_file("fmt/obj/cooling-tower.obj", "cooling-tower");
+        test_compress_obj_file("fmt/obj/church.obj", "church");
+    }
+
+UTEST_END
+
+
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/fmt/obj/pullparser.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/fmt/obj/pullparser.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/fmt/obj/pullparser.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/fmt/obj/pullparser.cpp	2025-08-26 18:15:43.710003446 +0000
@@ -97,19 +97,19 @@ UTEST_BEGIN("runtime.fmt.obj", pullparse
             "vn 0 0 1\n"
             "f 1//1 2//1 3//1\n"
             "\n"
-            "o   Triangle 2\n\r"
-            "v -2.0 -1.0 -2.0\n\r"
-            "v 2.0 -1.0 -2.0\n\r"
-            "v 0.0 2.0 -2.0\n\r"
-            "vt -2.0 -1.0\n\r"
-            "vt 2.0 -1.0\n\r"
-            "vt 0.0 2.0\n\r"
-            "vn 0.0 0.0 1.0\n\r"
-            "vn 0.1 0.1 1.0\n\r"
-            "f 4/1/2 5/2/2 6/3/3\n\r"
-            "f -1/-1/-1 -2/-2/-1 -3/-3/-2\n\r"
-            "\n\r"
-            "\n\r";
+            "o   Triangle 2\r\n"
+            "v -2.0 -1.0 -2.0\r\n"
+            "v 2.0 -1.0 -2.0\r\n"
+            "v 0.0 2.0 -2.0\r\n"
+            "vt -2.0 -1.0\r\n"
+            "vt 2.0 -1.0\r\n"
+            "vt 0.0 2.0\r\n"
+            "vn 0.0 0.0 1.0\r\n"
+            "vn 0.1 0.1 1.0\r\n"
+            "f 4/1/2 5/2/2 6/3/3\r\n"
+            "f -1/-1/-1 -2/-2/-1 -3/-3/-2\r\n"
+            "\r\n"
+            "\r\n";
 
         PullParser p;
         event_t ev;
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/fmt/obj/pushparser.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/fmt/obj/pushparser.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/fmt/obj/pushparser.cpp	2025-03-01 12:42:57.208645889 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/fmt/obj/pushparser.cpp	2025-08-26 18:15:43.710003446 +0000
@@ -38,19 +38,19 @@ namespace lsp
         "vn 0 0 1\n"
         "f 1//1 2//1 3//1\n"
         "\n"
-        "o   Triangle 2\n\r"
-        "v -2.0 -1.0 -2.0\n\r"
-        "v 2.0 -1.0 -2.0\n\r"
-        "v 0.0 2.0 -2.0\n\r"
-        "vt -2.0 -1.0\n\r"
-        "vt 2.0 -1.0\n\r"
-        "vt 0.0 2.0\n\r"
-        "vn 0.0 0.0 1.0\n\r"
-        "vn 0.1 0.1 1.0\n\r"
-        "f 4/1/2 5/2/2 6/3/3\n\r"
-        "f -1/-1/-1 -2/-2/-1 -3/-3/-2\n\r"
-        "\n\r"
-        "\n\r";
+        "o   Triangle 2\r\n"
+        "v -2.0 -1.0 -2.0\r\n"
+        "v 2.0 -1.0 -2.0\r\n"
+        "v 0.0 2.0 -2.0\r\n"
+        "vt -2.0 -1.0\r\n"
+        "vt 2.0 -1.0\r\n"
+        "vt 0.0 2.0\r\n"
+        "vn 0.0 0.0 1.0\r\n"
+        "vn 0.1 0.1 1.0\r\n"
+        "f 4/1/2 5/2/2 6/3/3\r\n"
+        "f -1/-1/-1 -2/-2/-1 -3/-3/-2\r\n"
+        "\r\n"
+        "\r\n";
 
     static const char *output =
         "BOLS Triangle 1\n"
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/ipc/shmutex.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/ipc/shmutex.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/ipc/shmutex.cpp	2025-03-01 12:42:57.212645866 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/ipc/shmutex.cpp	2025-08-26 18:15:43.714003408 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-runtime-lib
  * Created on: 24 апр. 2024 г.
@@ -20,6 +20,7 @@
  */
 
 #include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/common/atomic.h>
 #include <lsp-plug.in/ipc/Thread.h>
 #include <lsp-plug.in/ipc/Mutex.h>
 #include <lsp-plug.in/ipc/SharedMutex.h>
@@ -34,6 +35,8 @@ UTEST_BEGIN("runtime.ipc", shmutex)
     {
         ipc::Mutex lock;
         LSPString data;
+        uatomic_t sequence_latch;
+        size_t errors;
 
         void log(status_t code, const char *event, status_t expected)
         {
@@ -42,22 +45,42 @@ UTEST_BEGIN("runtime.ipc", shmutex)
 
             data.append_ascii(event);
             data.append('=');
-            data.append_ascii((code == expected) ? "true" : "false");
+            if (code == expected)
+                data.append_ascii("true");
+            else
+            {
+                data.fmt_append_ascii("false(code=%d)", int(code));
+                ++errors;
+            }
             data.append(';');
         }
     } context_t;
 
-
     static status_t thread_func1(void *arg)
     {
         ipc::SharedMutex mutex;
         context_t *ctx = static_cast<context_t *>(arg);
 
-        ipc::Thread::sleep(500);
+        wait_latch(ctx->sequence_latch, 0);
         ctx->log(mutex.open("test-lsp.lock"), "open1", STATUS_OK);
-        ctx->log(mutex.lock(), "SYNC1", STATUS_OK);
-        ipc::Thread::sleep(800);
-        ctx->log(mutex.unlock(), "SYNC2", STATUS_OK);
+        atomic_add(&ctx->sequence_latch, 1); // 0 -> 1
+
+        // Sleep 500 ms and lock the mutex
+        wait_latch(ctx->sequence_latch, 3);
+        ipc::Thread::sleep(500);
+        ctx->log(mutex.lock(), "SYNC1.lock", STATUS_OK);
+        atomic_add(&ctx->sequence_latch, 1); // 3 -> 6
+
+        // Sleep 200 ms and unlock the mutex
+        wait_latch(ctx->sequence_latch, 7);
+        ipc::Thread::sleep(200);
+        ctx->log(mutex.unlock(), "SYNC2.unlock", STATUS_OK);
+        atomic_add(&ctx->sequence_latch, 1); // 7 -> 9
+
+        // Close the mutex
+        wait_latch(ctx->sequence_latch, 10);
+        ctx->log(mutex.close(), "close1", STATUS_OK);
+        atomic_add(&ctx->sequence_latch, 1); // 10 -> 11
 
         return STATUS_OK;
     }
@@ -67,24 +90,47 @@ UTEST_BEGIN("runtime.ipc", shmutex)
         ipc::SharedMutex mutex;
         context_t *ctx = static_cast<context_t *>(arg);
 
+        wait_latch(ctx->sequence_latch, 1);
         ctx->log(mutex.open("test-lsp.lock"), "open2", STATUS_OK);
-        ctx->log(mutex.lock(), "lock2", STATUS_OK);
+        atomic_add(&ctx->sequence_latch, 1); // 1 -> 2
 
+        // Lock mutex immediately, sleep 500 ms and unlock it
+        wait_latch(ctx->sequence_latch, 3);
+        ctx->log(mutex.lock(), "lock2", STATUS_OK);
         ipc::Thread::sleep(500);
+        ctx->log(mutex.unlock(), "SYNC1.unlock", STATUS_OK);
+        atomic_add(&ctx->sequence_latch, 1); // 3 -> 6
 
-        ctx->log(mutex.unlock(), "SYNC1", STATUS_OK);
-
-        ipc::Thread::sleep(100);
-
+        // Call mutltiple times lock, succeed on last call
+        wait_latch(ctx->sequence_latch, 6);
         ctx->log(mutex.try_lock(), "trylock2", STATUS_RETRY);
         ctx->log(mutex.lock(500), "timedlock2", STATUS_TIMED_OUT);
-        ctx->log(mutex.lock(500), "SYNC2", STATUS_OK);
+        atomic_add(&ctx->sequence_latch, 1); // 6 -> 7
+
+        // Succeed on timed mutex lock
+        wait_latch(ctx->sequence_latch, 7);
+        ctx->log(mutex.lock(800), "SYNC2.lock", STATUS_OK);
+        atomic_add(&ctx->sequence_latch, 1); // 7 -> 9
+
+        // Sleep 200 milliseconds and unlock the mutex
+        wait_latch(ctx->sequence_latch, 9);
         ipc::Thread::sleep(200);
-        ctx->log(mutex.unlock(), "SYNC3", STATUS_OK);
+        ctx->log(mutex.unlock(), "SYNC3.unlock", STATUS_OK);
+
+        // Close the mutex
+        wait_latch(ctx->sequence_latch, 11);
+        ctx->log(mutex.close(), "close2", STATUS_OK);
+        atomic_add(&ctx->sequence_latch, 1); // 11 -> 12
 
         return STATUS_OK;
     }
 
+    static void wait_latch(uatomic_t & latch, uatomic_t value)
+    {
+        while (atomic_load(&latch) != value)
+            ipc::Thread::yield();
+    }
+
     void test_simple()
     {
         ipc::SharedMutex mutex;
@@ -122,6 +168,8 @@ UTEST_BEGIN("runtime.ipc", shmutex)
     {
         ipc::SharedMutex mutex;
         context_t ctx;
+        atomic_store(&ctx.sequence_latch, uatomic_t(0));
+        ctx.errors = 0;
 
         printf("Testing simple multi-threaded mutex locks\n");
 
@@ -134,29 +182,29 @@ UTEST_BEGIN("runtime.ipc", shmutex)
         ctx.log(STATUS_OK, "start", STATUS_OK);
         t1.start();
         t2.start();
+        wait_latch(ctx.sequence_latch, 2);
+        atomic_add(&ctx.sequence_latch, 1); // 2 -> 3
 
+        // Sleep 200 ms and unlock the mutex
         ctx.log(STATUS_OK, "sleep", STATUS_OK);
         ipc::Thread::sleep(200);
-
         ctx.log(STATUS_OK, "unlock", STATUS_OK);
         UTEST_ASSERT(mutex.unlock() == STATUS_OK);
+        atomic_add(&ctx.sequence_latch, 1); // 3 -> 6
 
-        ipc::Thread::sleep(2000);
-        ctx.log(mutex.lock(), "SYNC3", STATUS_OK);
+        // Lock the mutex, unlock it and return result
+        wait_latch(ctx.sequence_latch, 9);
+        ctx.log(mutex.lock(), "SYNC3.lock", STATUS_OK);
         ctx.log(mutex.unlock(), "unlock", STATUS_OK);
 
         ctx.log(mutex.close(), "close", STATUS_OK);
+        atomic_add(&ctx.sequence_latch, 1); // 9 -> 10
 
-        static const char *expected =
-            "open=true;lock=true;start=true;sleep=true;open2=true;unlock=true;lock2=true;open1=true;"
-            "SYNC1=true;SYNC1=true;trylock2=true;timedlock2=true;"
-            "SYNC2=true;SYNC2=true;"
-            "SYNC3=true;SYNC3=true;unlock=true;close=true;";
-
-        printf("Result content:   %s\n", ctx.data.get_ascii());
-        printf("Expected content: %s\n", expected);
+        // Do final comparison
+        wait_latch(ctx.sequence_latch, 12);
 
-        UTEST_ASSERT(ctx.data.equals_ascii(expected));
+        printf("Result sequence:    %s\n", ctx.data.get_ascii());
+        UTEST_ASSERT(ctx.errors == 0);
     }
 
     UTEST_MAIN
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/resource/cbuffer.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/resource/cbuffer.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/resource/cbuffer.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/resource/cbuffer.cpp	2025-08-26 18:15:43.714003408 +0000
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-runtime-lib
+ * Created on: 25 июл. 2025 г.
+ *
+ * lsp-runtime-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-runtime-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-runtime-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/resource/buffer.h>
+
+using namespace lsp;
+
+UTEST_BEGIN("runtime.resource", cbuffer)
+
+    UTEST_MAIN
+    {
+        resource::cbuffer_t buf;
+        size_t offset = 0, length = 0;
+
+        printf("Testing compression buffer");
+
+        UTEST_ASSERT(buf.init(0x20) == STATUS_OK);
+
+        // Check that we can not find value in empty buffer
+        // buffer state: ???? ???? ???? ???? ???? ???? ???? ????
+        //               ^
+        UTEST_ASSERT(buf.size() == 0);
+        length = buf.lookup(&offset, "a", 1);
+        UTEST_ASSERT(length == 0);
+        length = buf.lookup(&offset, "b", 1);
+        UTEST_ASSERT(length == 0);
+
+        // Append single byte
+        // buffer state: a??? ???? ???? ???? ???? ???? ???? ????
+        //                ^
+        buf.append('a');
+        UTEST_ASSERT(buf.size() == 1);
+        length = buf.lookup(&offset, "a", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 0);
+        length = buf.lookup(&offset, "b", 1);
+        UTEST_ASSERT(length == 0);
+
+        // Append small sequence of bytes
+        // buffer state: abcd efgh ???? ???? ???? ???? ???? ????
+        //                         ^
+        buf.append("bcdefgh", 7);
+        UTEST_ASSERT(buf.size() == 8);
+        length = buf.lookup(&offset, "a", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 7);
+        length = buf.lookup(&offset, "b", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 6);
+        length = buf.lookup(&offset, "ab", 2);
+        UTEST_ASSERT(length == 2);
+        UTEST_ASSERT(offset == 7);
+
+        // Append yet another small sequence of bytes
+        // buffer state: abcd efgh abc0 1234 ???? ???? ???? ????
+        //                                   ^
+        buf.append("abc01234", 8);
+        UTEST_ASSERT(buf.size() == 16);
+        length = buf.lookup(&offset, "a", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 7);
+        length = buf.lookup(&offset, "b", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 6);
+        length = buf.lookup(&offset, "d", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 12);
+        length = buf.lookup(&offset, "abc", 3);
+        UTEST_ASSERT(length == 3);
+        UTEST_ASSERT(offset == 7);
+        length = buf.lookup(&offset, "abcd", 4);
+        UTEST_ASSERT(length == 4);
+        UTEST_ASSERT(offset == 15);
+
+        // Append more data to the buffer
+        // buffer state: abcd efgh abc0 1234 0123 4567 abcd efg?
+        //                                                     ^
+        buf.append("01234567abcdefg", 15);
+        UTEST_ASSERT(buf.size() == 31);
+        length = buf.lookup(&offset, "a", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 6);
+        length = buf.lookup(&offset, "b", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 5);
+        length = buf.lookup(&offset, "abc", 3);
+        UTEST_ASSERT(length == 3);
+        UTEST_ASSERT(offset == 6);
+        length = buf.lookup(&offset, "abcd", 4);
+        UTEST_ASSERT(length == 4);
+        UTEST_ASSERT(offset == 6);
+        length = buf.lookup(&offset, "abcdefghabc", 11);
+        UTEST_ASSERT(length == 11);
+        UTEST_ASSERT(offset == 30);
+        length = buf.lookup(&offset, "abcdefghabcdefgh", 16);
+        UTEST_ASSERT(length == 11);
+        UTEST_ASSERT(offset == 30);
+
+        // Fill the buffer with overlap
+        // buffer state: 0123 4567 abc0 1234 0123 4567 abcd efgh
+        //                         ^
+        buf.append("h01234567", 9);
+        UTEST_ASSERT(buf.size() == 32);
+        length = buf.lookup(&offset, "a", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 15);
+        length = buf.lookup(&offset, "b", 1);
+        UTEST_ASSERT(length == 1);
+        UTEST_ASSERT(offset == 14);
+        length = buf.lookup(&offset, "abc", 3);
+        UTEST_ASSERT(length == 3);
+        UTEST_ASSERT(offset == 15);
+        length = buf.lookup(&offset, "abcd", 4);
+        UTEST_ASSERT(length == 4);
+        UTEST_ASSERT(offset == 15);
+        length = buf.lookup(&offset, "defgK", 5);
+        UTEST_ASSERT(length == 4);
+        UTEST_ASSERT(offset == 12);
+        length = buf.lookup(&offset, "abcdefghabc", 11);
+        UTEST_ASSERT(length == 8);
+        UTEST_ASSERT(offset == 15);
+        length = buf.lookup(&offset, "abcdefghabcdefgh", 16);
+        UTEST_ASSERT(length == 8);
+        UTEST_ASSERT(offset == 15);
+        length = buf.lookup(&offset, "234567", 6);
+        UTEST_ASSERT(length == 6);
+        UTEST_ASSERT(offset == 5);
+        length = buf.lookup(&offset, "234567abc", 9);
+        UTEST_ASSERT(length == 9);
+        UTEST_ASSERT(offset == 21);
+        length = buf.lookup(&offset, "234567abcd", 10);
+        UTEST_ASSERT(length == 10);
+        UTEST_ASSERT(offset == 21);
+
+        // Fully overwrite the buffer
+        // buffer state: ABCD EFGH IJKL MNOP QRST UVWX YZ01 2345
+        //               ^
+        buf.append("blablablaABCDEFGHIJKLMNOPQRSTUVWXYZ012345", 41);
+        UTEST_ASSERT(buf.size() == 32);
+        length = buf.lookup(&offset, "ABCD", 4);
+        UTEST_ASSERT(length == 4);
+        UTEST_ASSERT(offset == 31);
+        length = buf.lookup(&offset, "EFGHIJKL", 8);
+        UTEST_ASSERT(length == 8);
+        UTEST_ASSERT(offset == 27);
+        length = buf.lookup(&offset, "MNOPQRSTUVWX1234", 16);
+        UTEST_ASSERT(length == 12);
+        UTEST_ASSERT(offset == 19);
+        length = buf.lookup(&offset, "YZ012345ABCD", 12);
+        UTEST_ASSERT(length == 8);
+        UTEST_ASSERT(offset == 7);
+    }
+
+UTEST_END
+
+
+
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/resource/compressor.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/resource/compressor.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/resource/compressor.cpp	2025-03-01 12:42:57.212645866 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/resource/compressor.cpp	2025-08-26 18:15:43.714003408 +0000
@@ -31,7 +31,8 @@
 
 using namespace lsp;
 
-#define BUFFER_SIZE     0x100000
+#define BUFFER_SIZE     0x1000
+#define FLUSH_LIMIT     0x10000
 
 UTEST_BEGIN("runtime.resource", compressor)
 
@@ -44,6 +45,7 @@ UTEST_BEGIN("runtime.resource", compress
         LSPString str;
         io::Path child, relative;
         io::fattr_t fattr;
+        size_t compressed = 0;
 
         UTEST_ASSERT(dir.open(path) == STATUS_OK);
         while ((res = dir.reads(&str, &fattr, false)) == STATUS_OK)
@@ -66,6 +68,12 @@ UTEST_BEGIN("runtime.resource", compress
                 UTEST_ASSERT(ifs.close() == STATUS_OK);
 
                 *data_size += len;
+                compressed += len;
+                if (compressed >= FLUSH_LIMIT)
+                {
+                    UTEST_ASSERT(c->flush() == STATUS_OK);
+                    compressed  = 0;
+                }
             }
             else if (fattr.type == io::fattr_t::FT_DIRECTORY)
             {
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/resource/dbuffer.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/resource/dbuffer.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/resource/dbuffer.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/resource/dbuffer.cpp	2025-08-26 18:15:43.714003408 +0000
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-runtime-lib
+ * Created on: 25 июл. 2025 г.
+ *
+ * lsp-runtime-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-runtime-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-runtime-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/test-fw/utest.h>
+#include <lsp-plug.in/resource/buffer.h>
+
+using namespace lsp;
+
+UTEST_BEGIN("runtime.resource", dbuffer)
+
+    UTEST_MAIN
+    {
+        resource::dbuffer_t buf;
+        uint8_t tmp[0x20];
+
+        printf("Testing decompression buffer");
+
+        UTEST_ASSERT(buf.init(0x20) == STATUS_OK);
+
+        // Check that we can not extract data from empty buffer
+        // buffer state: ???? ???? ???? ???? ???? ???? ???? ????
+        //               ^
+        UTEST_ASSERT(buf.size() == 0);
+        UTEST_ASSERT(buf.extract(tmp, 0, 1) == STATUS_UNDERFLOW);
+
+        // Append single byte
+        // buffer state: a??? ???? ???? ???? ???? ???? ???? ????
+        //                ^
+        buf.append('a');
+        UTEST_ASSERT(buf.size() == 1);
+        UTEST_ASSERT(buf.extract(tmp, 0, 1) == STATUS_OK);
+        UTEST_ASSERT(tmp[0] == 'a');
+        UTEST_ASSERT(buf.extract(tmp, 0, 2) == STATUS_UNDERFLOW);
+        UTEST_ASSERT(buf.extract(tmp, 1, 1) == STATUS_UNDERFLOW);
+
+        // Append small sequence of bytes
+        // buffer state: abcd efgh ???? ???? ???? ???? ???? ????
+        //                         ^
+        buf.append("bcdefgh", 7);
+        UTEST_ASSERT(buf.size() == 8);
+        UTEST_ASSERT(buf.extract(tmp, 0, 1) == STATUS_OK);
+        UTEST_ASSERT(tmp[0] == 'h');
+        UTEST_ASSERT(buf.extract(tmp, 6, 1) == STATUS_OK);
+        UTEST_ASSERT(tmp[0] == 'b');
+        UTEST_ASSERT(buf.extract(tmp, 7, 8) == STATUS_OK);
+        UTEST_ASSERT(memcmp(tmp, "abcdefgh", 8) == 0);
+        UTEST_ASSERT(buf.extract(tmp, 3, 4) == STATUS_OK);
+        UTEST_ASSERT(memcmp(tmp, "efgh", 4) == 0);
+        UTEST_ASSERT(buf.extract(tmp, 3, 8) == STATUS_UNDERFLOW);
+        UTEST_ASSERT(buf.extract(tmp, 7, 9) == STATUS_UNDERFLOW);
+
+        // Append yet another small sequence of bytes
+        // buffer state: abcd efgh abc0 1234 ???? ???? ???? ????
+        //                                   ^
+        buf.append("abc01234", 8);
+        UTEST_ASSERT(buf.size() == 16);
+        UTEST_ASSERT(buf.extract(tmp, 7, 1) == STATUS_OK);
+        UTEST_ASSERT(tmp[0] == 'a');
+        UTEST_ASSERT(buf.extract(tmp, 0, 1) == STATUS_OK);
+        UTEST_ASSERT(tmp[0] == '4');
+        UTEST_ASSERT(buf.extract(tmp, 7, 8) == STATUS_OK);
+        UTEST_ASSERT(memcmp(tmp, "abc01234", 8) == 0);
+        UTEST_ASSERT(buf.extract(tmp, 15, 16) == STATUS_OK);
+        UTEST_ASSERT(memcmp(tmp, "abcdefghabc01234", 16) == 0);
+
+        // Append more data to the buffer
+        // buffer state: abcd efgh abc0 1234 0123 4567 abcd efg?
+        //                                                     ^
+        buf.append("01234567abcdefg", 15);
+        UTEST_ASSERT(buf.size() == 31);
+        UTEST_ASSERT(buf.extract(tmp, 0, 1) == STATUS_OK);
+        UTEST_ASSERT(tmp[0] == 'g');
+        UTEST_ASSERT(buf.extract(tmp, 7, 8) == STATUS_OK);
+        UTEST_ASSERT(memcmp(tmp, "7abcdefg", 8) == 0);
+        UTEST_ASSERT(buf.extract(tmp, 15, 16) == STATUS_OK);
+        UTEST_ASSERT(memcmp(tmp, "401234567abcdefg", 16) == 0);
+
+        // Fill the buffer with overlap
+        // buffer state: 0123 4567 abc0 1234 0123 4567 abcd efgh
+        //                         ^
+        buf.append("h01234567", 9);
+        UTEST_ASSERT(buf.size() == 32);
+        UTEST_ASSERT(buf.extract(tmp, 31, 32) == STATUS_OK);
+        UTEST_ASSERT(memcmp(tmp, "abc0123401234567abcdefgh01234567", 32) == 0);
+        UTEST_ASSERT(buf.extract(tmp, 7, 8) == STATUS_OK);
+        UTEST_ASSERT(memcmp(tmp, "01234567", 8) == 0);
+
+        // Fully overwrite the buffer
+        // buffer state: ABCD EFGH IJKL MNOP QRST UVWX YZ01 2345
+        //               ^
+        buf.append("blablablaABCDEFGHIJKLMNOPQRSTUVWXYZ012345", 41);
+        UTEST_ASSERT(buf.size() == 32);
+        UTEST_ASSERT(buf.extract(tmp, 31, 32) == STATUS_OK);
+        UTEST_ASSERT(memcmp(tmp, "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345", 32) == 0);
+    }
+
+UTEST_END
+
+
diff -pruN 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/runtime/system.cpp 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/runtime/system.cpp
--- 1.2.21-5/modules/lsp-runtime-lib/src/test/utest/runtime/system.cpp	2025-03-01 12:42:57.212645866 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-runtime-lib/src/test/utest/runtime/system.cpp	2025-08-26 18:15:43.714003408 +0000
@@ -22,8 +22,6 @@
 #include <lsp-plug.in/test-fw/utest.h>
 #include <lsp-plug.in/runtime/system.h>
 
-#define DELAY_PRECISION 10
-
 UTEST_BEGIN("runtime.runtime", system)
 
     void test_sleep_msec(size_t period)
@@ -40,9 +38,6 @@ UTEST_BEGIN("runtime.runtime", system)
 
         // The delay should not be less than expected.
         UTEST_ASSERT(delay_ms >= wssize_t(period));
-        // The delay should be precise: not more than 1 ms error.
-        UTEST_ASSERT_MSG((delay_ms - period) <= DELAY_PRECISION,
-            "Expected delay: %ld but actual delay is %ld", long(period), long(delay_ms));
     }
 
     void test_time_measure()
diff -pruN 1.2.21-5/modules/lsp-test-fw/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-test-fw/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-test-fw/.github/workflows/build.yml	2025-03-01 12:42:54.636661327 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-test-fw/.github/workflows/build.yml	2025-08-26 18:15:40.734032330 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
@@ -188,3 +188,25 @@ jobs:
       - name: Run unit tests
         shell: msys2 {0}
         run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test.exe utest --verbose --jobs 1
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config TEST=1 STRICT=1 DEBUG=1 ASAN=1
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
+      - name: Run unit tests
+        run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1
+      - name: Run unit tests with memcheck
+        run: |
+          for test in $(.build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --list --suppress); do \
+            echo "***** MEMCHECK $test *****"; \
+            .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1 --nofork --debug $test; \
+          done
diff -pruN 1.2.21-5/modules/lsp-test-fw/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-test-fw/CHANGELOG
--- 1.2.21-5/modules/lsp-test-fw/CHANGELOG	2025-03-01 12:42:54.636661327 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-test-fw/CHANGELOG	2025-08-26 18:15:40.734032330 +0000
@@ -2,6 +2,12 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.32 ===
+* Added MacOS CI builds.
+
+=== 1.0.31 ===
+* Updated build scripts.
+
 === 1.0.30 ===
 * Added definitions for MacOS dependencies.
 * Fixed several Clang warnings.
diff -pruN 1.2.21-5/modules/lsp-test-fw/include/lsp-plug.in/test-fw/version.h 1.2.23-0ubuntu1/modules/lsp-test-fw/include/lsp-plug.in/test-fw/version.h
--- 1.2.21-5/modules/lsp-test-fw/include/lsp-plug.in/test-fw/version.h	2025-03-01 12:42:54.640661304 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-test-fw/include/lsp-plug.in/test-fw/version.h	2025-08-26 18:15:40.738032291 +0000
@@ -25,7 +25,7 @@
 // Define header version
 #define LSP_TEST_FW_MAJOR           1
 #define LSP_TEST_FW_MINOR           0
-#define LSP_TEST_FW_MICRO           30
+#define LSP_TEST_FW_MICRO           32
 
 #if defined(__WINDOWS__) || defined(__WIN32__) || defined(__WIN64__) || defined(_WIN64) || defined(_WIN32) || defined(__WINNT) || defined(__WINNT__)
     #define LSP_TEST_FW_EXPORT_MODIFIER     __declspec(dllexport)
diff -pruN 1.2.21-5/modules/lsp-test-fw/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-test-fw/make/tools.mk
--- 1.2.21-5/modules/lsp-test-fw/make/tools.mk	2025-03-01 12:42:54.640661304 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-test-fw/make/tools.mk	2025-08-26 18:15:40.738032291 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-test-fw/project.mk 1.2.23-0ubuntu1/modules/lsp-test-fw/project.mk
--- 1.2.21-5/modules/lsp-test-fw/project.mk	2025-03-01 12:42:54.640661304 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-test-fw/project.mk	2025-08-26 18:15:40.738032291 +0000
@@ -23,5 +23,5 @@ ARTIFACT_ID                 = LSP_TEST_F
 ARTIFACT_NAME               = lsp-test-fw
 ARTIFACT_DESC               = Test framework for executing automated and manual tests
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.30
+ARTIFACT_VERSION            = 1.0.32
 ARTIFACT_EXPORT_SYMBOLS     = 1
diff -pruN 1.2.21-5/modules/lsp-tk-lib/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-tk-lib/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-tk-lib/.github/workflows/build.yml	2025-03-01 12:42:57.396644760 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/.github/workflows/build.yml	2025-08-26 18:15:44.081999836 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libX11-devel libXrandr-devel libglvnd-devel Mesa-libGL-devel libsndfile-devel freetype2-devel cairo-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale libX11-devel libXrandr-devel libglvnd-devel Mesa-libGL-devel libsndfile-devel freetype2-devel cairo-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang libX11-devel libXrandr-devel libglvnd-devel Mesa-libGL-devel libsndfile-devel freetype2-devel cairo-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang libX11-devel libXrandr-devel libglvnd-devel Mesa-libGL-devel libsndfile-devel freetype2-devel cairo-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
diff -pruN 1.2.21-5/modules/lsp-tk-lib/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-tk-lib/CHANGELOG
--- 1.2.21-5/modules/lsp-tk-lib/CHANGELOG	2025-03-01 12:42:57.396644760 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/CHANGELOG	2025-08-26 18:15:44.081999836 +0000
@@ -2,6 +2,22 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.29 ===
+* Added text clipping function for tk::Label.
+* Implemented AudioEnvelope widget and it's integration into AudioSample.
+* Implemented ws::IDisplay::get_file_descriptor method for obtaining event loop
+  descriptor for Unix-based systems that use X11 protocol
+* Updated module versions in dependencies.
+
+=== 1.0.28 ===
+* Added support of background color, brightness and background brightness for
+  inactive widgets.
+* Activity property is now accessible for any widget.
+* Implemented Overlay widget.
+* Added MacOS dependencies.
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.27 ===
 * Implemented OpenGL drawing surface supporf for X11 protocol. Can be disabled
   by setting LSP_WS_LIB_GLXSURFACE=off environment variable.
diff -pruN 1.2.21-5/modules/lsp-tk-lib/README.md 1.2.23-0ubuntu1/modules/lsp-tk-lib/README.md
--- 1.2.21-5/modules/lsp-tk-lib/README.md	2025-03-01 12:42:57.396644760 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/README.md	2025-08-26 18:15:44.085999797 +0000
@@ -7,9 +7,9 @@ Graphical toolkit library used by Linux
 ## Key features
 
 * Supported platforms:
-  * FreeBSD (X11/Cairo);
-  * GNU/Linux (X11/Cairo);
-  * Windows (WinAPI/D2D1).
+  * FreeBSD (X11/OpenGL, X11/Cairo);
+  * GNU/Linux (X11/OpenGL, X11/Cairo);
+  * Windows (WinAPI/Direct2D).
 * Pretty leightweight, only about 2 MB of compiled code.
 * Almost minimum global state (used only in case when underlying API requires global variables),
   all operations are performed on `tk::Display` main object and objects derived from `tk::Widget`.
@@ -43,6 +43,7 @@ The full list of provided widgets:
   * Grid - container for packaging widgets into table.
   * Group - container for surrounding widgets into a distinguishable group.
   * MultiLabel - widget that allows to implement overlay of multiple labels on the same area.
+  * Overlay - special container for displaying overlayed widgets on the window.
   * ScrollArea - container that allows to package widget into limited rectangular space.
   * TabControl - container that allows to organize widgets as a set of tabs.
   * TabGroup - container that behaves similar to ComboGroup but uses tabs insetad of combo box.
@@ -79,6 +80,9 @@ The full list of provided widgets:
   * Void - void widget which can be used for filling empty area.
 * Specifific widgets
   * AudioChannel - single audio channel oscillogram.
+  * AudioEnvelope - widget that allows to build and control parameters of AHDBSSR (Attack,
+    Hold, Decay, Break, Slope, Sustain, Release) audio envelope and integrate into
+    AudioSample widget.
   * AudioSample - oscillogram of audio sample with multiple audio channels.
   * FileButton - button of 1.44" disk form for loading/saving files.
   * Fraction - music fraction with numerator and denominator.
diff -pruN 1.2.21-5/modules/lsp-tk-lib/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-tk-lib/dependencies.mk
--- 1.2.21-5/modules/lsp-tk-lib/dependencies.mk	2025-03-01 12:42:57.396644760 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/dependencies.mk	2025-08-26 18:15:44.085999797 +0000
@@ -103,14 +103,34 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBCOCOA \
+  LIBCAIRO \
+  LIBICONV  
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/enum/WindowState.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/enum/WindowState.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/enum/WindowState.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/enum/WindowState.h	2025-08-26 18:15:44.085999797 +0000
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 15 мая 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_TK_PROP_ENUM_WINDOWSTATE_H_
+#define LSP_PLUG_IN_TK_PROP_ENUM_WINDOWSTATE_H_
+
+namespace lsp
+{
+    namespace tk
+    {
+        /**
+         * Border style class of window
+         */
+        class WindowState: public Enum
+        {
+            protected:
+                static const prop::enum_t ENUM[];
+
+            protected:
+                explicit WindowState(prop::Listener *listener = NULL): Enum(ENUM, ws::BS_SINGLE, listener) {};
+                WindowState(const WindowState &) = delete;
+                WindowState(WindowState &&) = delete;
+                WindowState & operator = (const WindowState &) = delete;
+                WindowState & operator = (WindowState &&) = delete;
+
+            public:
+                inline ws::window_state_t   get() const     { return ws::window_state_t(nValue); }
+                inline ws::window_state_t   set(ws::window_state_t v)
+                    { return ws::window_state_t(Enum::set(v)); };
+
+                inline bool                 minimized() const   { return get() == ws::WS_MINIMIZED; }
+                inline bool                 maximized() const   { return get() == ws::WS_MAXIMIZED; }
+                inline bool                 normal() const      { return get() == ws::WS_NORMAL;    }
+
+                inline ws::window_state_t   set_minimized()     { return set(ws::WS_MINIMIZED);     }
+                inline ws::window_state_t   set_maximized()     { return set(ws::WS_MAXIMIZED);     }
+                inline ws::window_state_t   set_normal()        { return set(ws::WS_NORMAL);        }
+        };
+
+        namespace prop
+        {
+            class WindowState: public tk::WindowState
+            {
+                public:
+                    explicit WindowState(prop::Listener *listener = NULL): tk::WindowState(listener) {};
+                    WindowState(const WindowState &) = delete;
+                    WindowState(WindowState &&) = delete;
+                    WindowState & operator = (const WindowState &) = delete;
+                    WindowState & operator = (WindowState &&) = delete;
+
+                public:
+                    /**
+                     * Bind property with specified name to the style of linked widget
+                     */
+                    inline status_t     bind(atom_t property, Style *style)             { return tk::WindowState::bind(property, style); }
+                    inline status_t     bind(const char *property, Style *style)        { return tk::WindowState::bind(property, style); }
+                    inline status_t     bind(const LSPString *property, Style *style)   { return tk::WindowState::bind(property, style); }
+
+                    /**
+                     * Unbind property
+                     */
+                    inline status_t     unbind()                                        { return tk::WindowState::unbind(); };
+
+                    /**
+                     * Change value without notification of any listener
+                     * @param value value to set
+                     */
+                    inline void         commit_value(ws::window_state_t state)          { nValue    = state;                        }
+
+                    inline void         listener(prop::Listener *listener)              { pListener = listener;                     }
+            };
+
+        } /* namespace prop */
+    } /* namespace tk */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_TK_PROP_ENUM_WINDOWSTATE_H_ */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/flags/BorderRounding.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/flags/BorderRounding.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/flags/BorderRounding.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/flags/BorderRounding.h	2025-08-26 18:15:44.085999797 +0000
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 2 апр. 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_TK_PROP_FLAGS_BORDERROUNDING_H_
+#define LSP_PLUG_IN_TK_PROP_FLAGS_BORDERROUNDING_H_
+
+namespace lsp
+{
+    namespace tk
+    {
+        class Display;
+        class Widget;
+
+        class BorderRounding: public BitEnum
+        {
+            protected:
+                static const prop::enum_t ENUM[];
+
+            protected:
+                explicit BorderRounding(prop::Listener *listener = NULL): BitEnum(ENUM, listener) {};
+                BorderRounding(const BorderRounding &) = delete;
+                BorderRounding(BorderRounding &&) = delete;
+
+                BorderRounding & operator = (const BorderRounding &) = delete;
+                BorderRounding & operator = (BorderRounding &&) = delete;
+
+            public:
+                inline bool     left_top() const                        { return nValue & ws::CORNER_LEFT_TOP;      }
+                inline bool     right_top() const                       { return nValue & ws::CORNER_RIGHT_TOP;     }
+                inline bool     left_bottom() const                     { return nValue & ws::CORNER_LEFT_BOTTOM;   }
+                inline bool     right_bottom() const                    { return nValue & ws::CORNER_RIGHT_BOTTOM;  }
+                inline bool     left() const                            { return (nValue & ws::CORNERS_LEFT) == ws::CORNERS_LEFT;       }
+                inline bool     right() const                           { return (nValue & ws::CORNERS_RIGHT) == ws::CORNERS_RIGHT;     }
+                inline bool     top() const                             { return (nValue & ws::CORNERS_TOP) == ws::CORNERS_TOP;         }
+                inline bool     bottom() const                          { return (nValue & ws::CORNERS_BOTTOM) == ws::CORNERS_BOTTOM;   }
+                inline bool     all() const                             { return nValue == ws::CORNERS_ALL;         }
+                inline size_t   corners() const                         { return nValue;                            }
+
+            public:
+                inline void     set_corners(size_t flags)               { xset_all(flags & ws::CORNERS_ALL);                }
+                inline void     toggle_corners(size_t flags)            { xset_all((nValue ^ flags) & ws::CORNERS_ALL);     }
+                inline void     add_corners(size_t flags)               { xset_all((nValue | flags) & ws::CORNERS_ALL);     }
+                inline void     remove_corners(size_t flags)            { xset_all((nValue & (~flags)) & ws::CORNERS_ALL);  }
+
+                inline void     set(ws::corner_t c)                     { xset(c);                                  }
+                inline void     toggle(ws::corner_t c)                  { xtoggle(c);                               }
+                inline void     add(ws::corner_t c)                     { xset(c);                                  }
+                inline void     remove(ws::corner_t c)                  { xunset(c);                                }
+
+                inline void     set_left_top()                          { xset(ws::CORNER_LEFT_TOP);                }
+                inline void     set_left_top(bool value)                { xset(ws::CORNER_LEFT_TOP, value);         }
+                inline void     set_right_top()                         { xset(ws::CORNER_RIGHT_TOP);               }
+                inline void     set_right_top(bool value)               { xset(ws::CORNER_RIGHT_TOP, value);        }
+                inline void     set_left_bottom()                       { xset(ws::CORNER_LEFT_BOTTOM);             }
+                inline void     set_left_bottom(bool value)             { xset(ws::CORNER_LEFT_BOTTOM, value);      }
+                inline void     set_right_bottom()                      { xset(ws::CORNER_RIGHT_BOTTOM);            }
+                inline void     set_right_bottom(bool value)            { xset(ws::CORNER_RIGHT_BOTTOM, value);     }
+
+                inline void     set_all()                               { xset_all(ws::CORNERS_ALL);                }
+                inline void     remove_all()                            { xset_all(ws::CORNERS_NONE);               }
+                inline void     set_none()                              { xset_all(ws::CORNERS_NONE);               }
+                inline void     toggle_all()                            { xset_all(nValue ^ ws::CORNERS_ALL);       }
+        };
+
+        namespace prop
+        {
+            class BorderRounding: public tk::BorderRounding
+            {
+                public:
+                    explicit BorderRounding(prop::Listener *listener = NULL): tk::BorderRounding(listener) {};
+                    BorderRounding(const BorderRounding &) = delete;
+                    BorderRounding(BorderRounding &&) = delete;
+
+                    BorderRounding & operator = (const BorderRounding &) = delete;
+                    BorderRounding & operator = (BorderRounding &&) = delete;
+
+                public:
+                    /**
+                     * Bind property with specified name to the style of linked widget
+                     */
+                    inline status_t     bind(atom_t property, Style *style)             { return tk::BorderRounding::bind(property, style); }
+                    inline status_t     bind(const char *property, Style *style)        { return tk::BorderRounding::bind(property, style); }
+                    inline status_t     bind(const LSPString *property, Style *style)   { return tk::BorderRounding::bind(property, style); }
+
+                    /**
+                     * Unbind property
+                     */
+                    inline status_t     unbind()                                        { return tk::BorderRounding::unbind(); };
+            };
+
+        } /* namespace prop */
+    } /* namespace tk */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_TK_PROP_FLAGS_BORDERROUNDING_H_ */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/multi/Position.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/multi/Position.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/multi/Position.h	2025-03-01 12:42:57.400644737 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/prop/multi/Position.h	2025-08-26 18:15:44.089999759 +0000
@@ -77,6 +77,7 @@ namespace lsp
 
                 inline void get(ssize_t *left, ssize_t *top) const  { *left = nLeft; *top = nTop;                   }
                 inline void get(ssize_t &left, ssize_t &top) const  { left = nLeft; top = nTop;                     }
+                inline void get(ws::point_t *point) const           { point->nLeft = nLeft; point->nTop = nTop;     }
                 inline void get(ws::rectangle_t *rect) const        { rect->nLeft = nLeft; rect->nTop = nTop;       }
 
                 ssize_t         set_left(ssize_t value);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/sys/Display.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/sys/Display.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/sys/Display.h	2025-03-01 12:42:57.400644737 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/sys/Display.h	2025-08-26 18:15:44.089999759 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 19 июн. 2017 г.
@@ -47,9 +47,6 @@ namespace lsp
         class Display: public Atoms
         {
             private:
-                Display & operator = (const Display &);
-                Display(const Display &);
-
                 friend class Schema;
 
             protected:
@@ -88,6 +85,10 @@ namespace lsp
                  * @param settings additional display settings
                  */
                 explicit Display(display_settings_t *settings = NULL);
+                Display(const Display &) = delete;
+                Display(Display &&) = delete;
+                Display & operator = (const Display &) = delete;
+                Display & operator = (Display &&) = delete;
 
                 /** Destructor
                  *
@@ -363,6 +364,16 @@ namespace lsp
                  * @return previous value of the idle interval
                  */
                 size_t set_idle_interval(size_t interval);
+
+                /**
+                 * Obtain the file descriptor of the connection associated with the event loop
+                 * if it is supported (usually Unix-based systems with X11 protocol).
+                 *
+                 * @param fd pointer to store file descriptor
+                 * @return status of operation, STATUS_NOT_SUPPORTED if platform does
+                 * not support file desciptors for event loops
+                 */
+                status_t get_file_descriptor(int *fd);
         };
 
     } /* namespace tk */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/sys/types.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/sys/types.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/sys/types.h	2025-03-01 12:42:57.400644737 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/sys/types.h	2025-08-26 18:15:44.089999759 +0000
@@ -53,6 +53,7 @@ namespace lsp
             SLOT_MOUSE_POINTER,     //!< SLOT_MOUSE_POINTER called to resolve the current mouse pointer for the widget
             SLOT_SHOW,              //!< SLOT_SHOW Triggered when widget becomes visible
             SLOT_HIDE,              //!< SLOT_HIDE Triggered when widget becomes invisible
+            SLOT_STATE,             //!< SLOT_STATE Triggered when window state is changed
             SLOT_BEGIN_EDIT,        //!< SLOG_BEGIN_EDIT Triggered when the possible durable editing has started (for example, mouse click + drag)
             SLOT_END_EDIT,          //!< SLOG_END_EDIT Triggered when the possible durable editing has finished (for example, mouse click + drag)
             SLOT_SUBMIT,            //!< SLOT_SUBMIT Triggered when value(s) stored by the widget is submitted (but can be not changed)
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/tk.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/tk.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/tk.h	2025-03-01 12:42:57.400644737 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/tk.h	2025-08-26 18:15:44.089999759 +0000
@@ -62,6 +62,7 @@
 #include <lsp-plug.in/tk/prop/enum/IndicatorType.h>
 #include <lsp-plug.in/tk/prop/enum/MenuItemType.h>
 #include <lsp-plug.in/tk/prop/enum/WindowPolicy.h>
+#include <lsp-plug.in/tk/prop/enum/WindowState.h>
 #include <lsp-plug.in/tk/prop/enum/Pointer.h>
 #include <lsp-plug.in/tk/prop/enum/Orientation.h>
 #include <lsp-plug.in/tk/prop/enum/Scrolling.h>
@@ -70,6 +71,7 @@
 
 // Flags
 #include <lsp-plug.in/tk/prop/flags/Allocation.h>
+#include <lsp-plug.in/tk/prop/flags/BorderRounding.h>
 #include <lsp-plug.in/tk/prop/flags/WindowActions.h>
 
 // Single-value properties
@@ -172,6 +174,7 @@
 #include <lsp-plug.in/tk/widgets/containers/Box.h>
 #include <lsp-plug.in/tk/widgets/containers/Grid.h>
 #include <lsp-plug.in/tk/widgets/containers/Group.h>
+#include <lsp-plug.in/tk/widgets/containers/Overlay.h>
 #include <lsp-plug.in/tk/widgets/containers/ScrollArea.h>
 #include <lsp-plug.in/tk/widgets/containers/MultiLabel.h>
 #include <lsp-plug.in/tk/widgets/containers/Tab.h>
@@ -186,6 +189,7 @@
 
 // Specific widgets
 #include <lsp-plug.in/tk/widgets/specific/AudioChannel.h>
+#include <lsp-plug.in/tk/widgets/specific/AudioEnvelope.h>
 #include <lsp-plug.in/tk/widgets/specific/AudioSample.h>
 #include <lsp-plug.in/tk/widgets/specific/FileButton.h>
 #include <lsp-plug.in/tk/widgets/specific/Fraction.h>
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/types.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/types.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/types.h	2025-03-01 12:42:57.400644737 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/types.h	2025-08-26 18:15:44.089999759 +0000
@@ -176,6 +176,19 @@ namespace lsp
             TA_TOLOWER                  //!< Convert to lower case
         };
 
+        /**
+         * Widget draw flags
+         */
+        enum draw_flags_t
+        {
+            DRAW_NONE           = 0,
+            DRAW_SURFACE        = 1 << 0,
+            DRAW_CHILD          = 1 << 1,
+
+            DRAW_DEFAULT        = DRAW_SURFACE,
+            DRAW_ALL            = DRAW_SURFACE | DRAW_CHILD
+        };
+
         typedef struct w_class_t
         {
             const char         *name;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/version.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/version.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/version.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/version.h	2025-08-26 18:15:44.089999759 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_TK_LIB_MAJOR            1
 #define LSP_TK_LIB_MINOR            0
-#define LSP_TK_LIB_MICRO            27
+#define LSP_TK_LIB_MICRO            29
 
 #if defined(LSP_TK_LIB_PUBLISHER)
     #define LSP_TK_LIB_PUBLIC               LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/3d/Area3D.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/3d/Area3D.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/3d/Area3D.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/3d/Area3D.h	2025-08-26 18:15:44.089999759 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 9 окт. 2020 г.
@@ -53,10 +53,6 @@ namespace lsp
             public:
                 static const w_class_t    metadata;
 
-            private:
-                Area3D & operator    = (const Area3D &);
-                Area3D(const Area3D &);
-
             protected:
                 prop::SizeConstraints       sConstraints;   // Size constraints
                 prop::Integer               sBorder;        // Border size
@@ -72,25 +68,32 @@ namespace lsp
                 ws::rectangle_t             sCanvas;        // Actual dimensions of the drawing area (with padding)
 
             protected:
-                virtual void                size_request(ws::size_limit_t *r);
-                virtual void                property_changed(Property *prop);
-                virtual void                realize(const ws::rectangle_t *r);
+                virtual void                size_request(ws::size_limit_t *r) override;
+                virtual void                property_changed(Property *prop) override;
+                virtual void                realize(const ws::rectangle_t *r) override;
+                virtual void                hide_widget() override;
 
+            protected:
                 static status_t             slot_draw3d(Widget *sender, void *ptr, void *data);
 
+            protected:
                 void                        do_destroy();
-                virtual void                hide_widget();
                 void                        drop_glass();
                 void                        drop_backend();
                 ws::IR3DBackend            *get_backend();
 
             public:
                 explicit Area3D(Display *dpy);
-                virtual ~Area3D();
+                Area3D(const Area3D &) = delete;
+                Area3D(Area3D &&) = delete;
+                virtual ~Area3D() override;
+
+                Area3D & operator = (const Area3D &) = delete;
+                Area3D & operator = (Area3D &&) = delete;
 
             public:
-                virtual status_t            init();
-                virtual void                destroy();
+                virtual status_t            init() override;
+                virtual void                destroy() override;
 
             public:
                 LSP_TK_PROPERTY(SizeConstraints,            constraints,        &sConstraints);
@@ -103,14 +106,15 @@ namespace lsp
                 LSP_TK_PROPERTY(Color,                      glass_color,        &sGlassColor);
 
             public:
-                virtual void                render(ws::ISurface *s, const ws::rectangle_t *area, bool force);
-
-                virtual void                draw(ws::ISurface *s);
+                virtual void                render(ws::ISurface *s, const ws::rectangle_t *area, bool force) override;
+                virtual void                draw(ws::ISurface *s, bool force) override;
 
+            public:
                 virtual status_t            on_draw3d(ws::IR3DBackend *r3d);
         };
-    }
-}
+
+    } /* namespace tk */
+} /* namespace lsp */
 
 
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/base/Widget.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/base/Widget.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/base/Widget.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/base/Widget.h	2025-08-26 18:15:44.089999759 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 15 июн. 2017 г.
@@ -35,14 +35,32 @@ namespace lsp
         // Style definition
         namespace style
         {
+            typedef struct WidgetColors
+            {
+                prop::Color         sBgColor;               // Background color
+                prop::Float         sBrightness;            // Brightness
+                prop::Float         sBgBrightness;          // Brightness for background
+
+                void        listener(tk::prop::Listener *listener);
+                size_t      property_changed(Property *prop) const;
+            } WidgetColors;
+
+            enum WidgetColorState
+            {
+                WIDGET_NORMAL       = 0,
+                WIDGET_INACTIVE     = 1 << 0,
+
+                WIDGET_TOTAL        = 1 << 1
+            };
+
             LSP_TK_STYLE_DEF_BEGIN(Widget, Style)
+                WidgetColors        vColors[WIDGET_TOTAL];  // Widget colors
+
+                prop::Boolean       sActive;                // Widget activity
                 prop::Allocation    sAllocation;            // Widget allocation
                 prop::Float         sScaling;               // UI scaling factor
                 prop::Float         sFontScaling;           // UI font scaling factor
-                prop::Float         sBrightness;            // Brightness
-                prop::Float         sBgBrightness;          // Brightness for background
                 prop::Padding       sPadding;               // Widget padding
-                prop::Color         sBgColor;               // Color of the background of the widget
                 prop::Boolean       sBgInherit;             // Inhert background color from parent container
                 prop::Boolean       sVisibility;            // Visibility
                 prop::Pointer       sPointer;               // Mouse pointer
@@ -56,23 +74,29 @@ namespace lsp
          */
         class Widget: public ws::IEventHandler
         {
-            private:
-                Widget & operator = (const Widget &);
-                Widget(const Widget &);
-
             public:
                 static const w_class_t    metadata;
 
             protected:
+                enum knob_flags_t
+                {
+                    WIDGET_0        = style::WIDGET_NORMAL,
+                    WIDGET_1        = style::WIDGET_INACTIVE,
+                    WIDGET_TOTAL    = style::WIDGET_TOTAL
+                };
+
                 enum flags_t
                 {
                     INITIALIZED     = 1 << 0,       // Widget is initialized
                     FINALIZED       = 1 << 1,       // Widget is in destroy state
-                    REDRAW_SURFACE  = 1 << 2,       // Need to redraw surface
-                    REDRAW_CHILD    = 1 << 3,       // Need to redraw child only
-                    SIZE_INVALID    = 1 << 4,       // Size limit structure is valid
-                    RESIZE_PENDING  = 1 << 5,       // The resize request is pending
-                    REALIZE_ACTIVE  = 1 << 6        // Realize is active, no need to trigger for realize
+                    VISIBLE         = 1 << 2,       // Widget is currently visible
+                    REDRAW_SURFACE  = 1 << 3,       // Need to redraw surface
+                    REDRAW_CHILD    = 1 << 4,       // Need to redraw child only
+                    SIZE_INVALID    = 1 << 5,       // Size limit structure is valid
+                    RESIZE_PENDING  = 1 << 6,       // The resize request is pending
+                    REALIZE_ACTIVE  = 1 << 7,       // Realize is active, no need to trigger for realize
+
+                    REDRAW_DEFAULT  = REDRAW_SURFACE
                 };
 
             protected:
@@ -83,7 +107,7 @@ namespace lsp
 
                     public:
                         inline PropListener(Widget *w)  { pWidget = w; }
-                        virtual void notify(Property *prop);
+                        virtual void notify(Property *prop) override;
                 };
 
             protected:
@@ -100,13 +124,12 @@ namespace lsp
                 Style               sStyle;                 // Style
                 PropListener        sProperties;            // Properties listener
 
+                style::WidgetColors vColors[WIDGET_TOTAL];  // Widget colors
+                prop::Boolean       sActive;                // Widget activity
                 prop::Allocation    sAllocation;            // Widget allocation
                 prop::Float         sScaling;               // UI scaling factor
                 prop::Float         sFontScaling;           // UI font scaling factor
-                prop::Float         sBrightness;            // Brightness
-                prop::Float         sBgBrightness;          // Brightness for background
                 prop::Padding       sPadding;               // Widget padding
-                prop::Color         sBgColor;               // Color of the background of the widget
                 prop::Boolean       sBgInherit;             // Inhert background color from parent container
                 prop::Boolean       sBgApplyBrightness;     // Apply brightness settings to the background
                 prop::Boolean       sVisibility;            // Visibility
@@ -139,11 +162,18 @@ namespace lsp
                 static status_t     slot_realized(Widget *sender, void *ptr, void *data);
                 static status_t     slot_mouse_pointer(Widget *sender, void *ptr, void *data);
 
+            protected:
+                static size_t       redraw_flags(size_t draw_flags);
+
             //---------------------------------------------------------------------------------
             // Interface for nested classes
             protected:
                 void                    do_destroy();
 
+                const style::WidgetColors   *select_colors() const;
+
+                float                   select_brightness() const;
+
                 void                    unlink_widget(Widget *widget);
 
                 /**
@@ -181,7 +211,12 @@ namespace lsp
             // Construction and destruction
             public:
                 explicit Widget(Display *dpy);
-                virtual ~Widget();
+                Widget(const Widget &);
+                Widget(Widget &&) = delete;
+                virtual ~Widget() override;
+
+                Widget & operator = (const Widget &) = delete;
+                Widget & operator = (Widget &&) = delete;
 
                 /** Initialize wiget
                  *
@@ -222,21 +257,21 @@ namespace lsp
                  * @return true if widget is instance of some class
                  */
                 template <class LSPTarget>
-                    inline bool instance_of() const { return instance_of(&LSPTarget::metadata); };
+                inline bool instance_of() const { return instance_of(&LSPTarget::metadata); };
 
                 /** Cast widget to another type
                  *
                  * @return pointer to widget or NULL if cast failed
                  */
                 template <class LSPTarget>
-                    inline LSPTarget *cast() { return instance_of(&LSPTarget::metadata) ? static_cast<LSPTarget *>(this) : NULL; }
+                inline LSPTarget *cast() { return instance_of(&LSPTarget::metadata) ? static_cast<LSPTarget *>(this) : NULL; }
 
                 /** Cast widget to another type
                  *
                  * @return pointer to widget or NULL if cast failed
                  */
                 template <class LSPTarget>
-                    inline const LSPTarget *cast() const { return instance_of(&LSPTarget::metadata) ? static_cast<const LSPTarget *>(this) : NULL; }
+                inline const LSPTarget *cast() const { return instance_of(&LSPTarget::metadata) ? static_cast<const LSPTarget *>(this) : NULL; }
 
                 /** Get pointer to self as pointer to Widget class
                  *
@@ -398,23 +433,38 @@ namespace lsp
                 virtual void            get_actual_bg_color(lsp::Color *color, float brightness = -1.0f) const;
                 void                    get_actual_bg_color(lsp::Color &color, float brightness = -1.0f) const;
 
+                //---------------------------------------------------------------------------------
+                // Properties
+            public:
+                /**
+                 * Widget activity
+                 * @return widget activity property
+                 */
+                LSP_TK_PROPERTY(Boolean,            active,             &sActive)
+
                 /**
                  * Return widget's style
                  * @return widget's style
                  */
-                LSP_TK_PROPERTY(Style,              style,              &sStyle)
+                LSP_TK_PROPERTY(Style,              style,                      &sStyle)
 
                 /** Get widget padding. All widgets should properly handle this parameter
                  *
                  * @return widget padding
                  */
-                LSP_TK_PROPERTY(Padding,            padding,            &sPadding)
+                LSP_TK_PROPERTY(Padding,            padding,                    &sPadding)
 
                 /**
                  * Get background color of the widget
                  * @return background color of the widget
                  */
-                LSP_TK_PROPERTY(Color,              bg_color,           &sBgColor)
+                LSP_TK_PROPERTY(Color,              bg_color,                   &vColors[WIDGET_0].sBgColor)
+
+                /**
+                 * Get background color of the inactive widget
+                 * @return background color of the widget
+                 */
+                LSP_TK_PROPERTY(Color,              inactive_bg_color,          &vColors[WIDGET_1].sBgColor)
 
                 /**
                  * Get the inheritance flag of the background color.
@@ -423,59 +473,71 @@ namespace lsp
                  *
                  * @return inheritance flag of the background color
                  */
-                LSP_TK_PROPERTY(Boolean,            bg_inherit,         &sBgInherit)
+                LSP_TK_PROPERTY(Boolean,            bg_inherit,                 &sBgInherit)
+
+                /**
+                 * Get brightness property of active widget
+                 * @return brightness property of active widget
+                 */
+                LSP_TK_PROPERTY(Float,              brightness,                 &vColors[WIDGET_0].sBrightness)
+
+                /**
+                 * Get brightness property of inactive widget
+                 * @return brightness property of inactive widget
+                 */
+                LSP_TK_PROPERTY(Float,              inactive_brightness,        &vColors[WIDGET_1].sBrightness)
 
                 /**
-                 * Get brightness property
-                 * @return brightness property
+                 * Get brightness property of active widget for background
+                 * @return brightness property of active widget for background
                  */
-                LSP_TK_PROPERTY(Float,              brightness,         &sBrightness)
+                LSP_TK_PROPERTY(Float,              bg_brightness,              &vColors[WIDGET_0].sBgBrightness)
 
                 /**
-                 * Get brightness property for background
-                 * @return brightness property for background
+                 * Get brightness property of inactive widget for background
+                 * @return brightness property of inactive widget for background
                  */
-                LSP_TK_PROPERTY(Float,              bg_brightness,      &sBgBrightness)
+                LSP_TK_PROPERTY(Float,              inactive_bg_brightness,     &vColors[WIDGET_1].sBgBrightness)
 
                 /**
                  * Get widget scaling property
                  * @return widget scaling property
                  */
-                LSP_TK_PROPERTY(Float,              scaling,            &sScaling)
+                LSP_TK_PROPERTY(Float,              scaling,                    &sScaling)
 
                 /**
                  * Get font scaling property
                  * @return font scaling property
                  */
-                LSP_TK_PROPERTY(Float,              font_scaling,       &sFontScaling)
+                LSP_TK_PROPERTY(Float,              font_scaling,               &sFontScaling)
 
                 /**
                  * Widget allocation flags
                  * @return widget allocation flags
                  */
-                LSP_TK_PROPERTY(Allocation,         allocation,         &sAllocation)
+                LSP_TK_PROPERTY(Allocation,         allocation,                 &sAllocation)
 
                 /**
                  * Visibility of the widget
                  * @return visibility of the widget
                  */
-                LSP_TK_PROPERTY(Boolean,            visibility,         &sVisibility)
+                LSP_TK_PROPERTY(Boolean,            visibility,                 &sVisibility)
 
                 /**
                  * Style of mouse pointer
                  * @return mouse pointer style
                  */
-                LSP_TK_PROPERTY(Pointer,            pointer,            &sPointer)
+                LSP_TK_PROPERTY(Pointer,            pointer,                    &sPointer)
 
                 /**
                  * Some tag associated with widget, can be used as the user decides
                  */
-                LSP_TK_PROPERTY(Integer,            tag,                &sTag)
+                LSP_TK_PROPERTY(Integer,            tag,                        &sTag)
 
                 /**
                  * Drawing mode of the widget
                  */
-                LSP_TK_PROPERTY(DrawMode,           draw_mode,          &sDrawMode)
+                LSP_TK_PROPERTY(DrawMode,           draw_mode,                  &sDrawMode)
 
             //---------------------------------------------------------------------------------
             // Manipulation
@@ -492,7 +554,7 @@ namespace lsp
                  *
                  * @param flags redraw flags
                  */
-                virtual void            query_draw(size_t flags = REDRAW_SURFACE);
+                virtual void            query_draw(size_t flags = REDRAW_DEFAULT);
 
                 /**
                  * Put the widget to the destroy queue of the main loop
@@ -532,8 +594,9 @@ namespace lsp
                 /** Draw widget on the internal surface
                  *
                  * @param surface surface to perform drawing
+                 * @param force do full widget redraw
                  */
-                virtual void            draw(ws::ISurface *s);
+                virtual void            draw(ws::ISurface *s, bool force);
 
                 /**
                  * Realize widget by passing it's dimensions.
@@ -550,7 +613,7 @@ namespace lsp
                  * @param e UI event
                  * @return status of operation
                  */
-                virtual status_t        handle_event(const ws::event_t *e);
+                virtual status_t        handle_event(const ws::event_t *e) override;
 
                 /** Set parent widget of this widget
                  *
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ComboBox.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ComboBox.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ComboBox.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ComboBox.h	2025-08-26 18:15:44.093999719 +0000
@@ -65,7 +65,6 @@ namespace lsp
                 prop::Integer               sSpinSize;
                 prop::Integer               sSpinSeparator;
                 prop::Boolean               sOpened;
-                prop::Boolean               sActive;
                 prop::TextFitness           sTextFit;
                 prop::Font                  sFont;
                 prop::TextAdjust            sTextAdjust;
@@ -149,7 +148,6 @@ namespace lsp
                 prop::Integer               sSpinSize;
                 prop::Integer               sSpinSeparator;
                 prop::Boolean               sOpened;
-                prop::Boolean               sActive;
                 prop::TextFitness           sTextFit;
                 prop::Font                  sFont;
                 prop::TextAdjust            sTextAdjust;
@@ -211,7 +209,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Integer,                    spin_size,                  &sSpinSize)
                 LSP_TK_PROPERTY(Integer,                    spin_separator,             &sSpinSeparator)
                 LSP_TK_PROPERTY(Boolean,                    opened,                     &sOpened)
-                LSP_TK_PROPERTY(Boolean,                    active,                     &sActive)
                 LSP_TK_PROPERTY(TextFitness,                text_fit,                   &sTextFit)
                 LSP_TK_PROPERTY(SizeConstraints,            constraints,                &sConstraints)
                 LSP_TK_PROPERTY(Font,                       font,                       &sFont)
@@ -228,7 +225,7 @@ namespace lsp
                 virtual status_t            add(Widget *child) override;
                 virtual status_t            remove(Widget *child) override;
                 virtual status_t            remove_all() override;
-                virtual void                draw(ws::ISurface *s) override;
+                virtual void                draw(ws::ISurface *s, bool force) override;
 
                 virtual status_t            on_mouse_down(const ws::event_t *e) override;
                 virtual status_t            on_mouse_up(const ws::event_t *e) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ComboGroup.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ComboGroup.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ComboGroup.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ComboGroup.h	2025-08-26 18:15:44.093999719 +0000
@@ -141,7 +141,7 @@ namespace lsp
 
                 prop::WidgetList<Widget>    vWidgets;
                 prop::WidgetPtr<ListBoxItem> sSelected;
-                prop::WidgetPtr<Widget>     sActive;
+                prop::WidgetPtr<Widget>     sActiveGroup;
                 prop::CollectionListener    sIListener;
 
             protected:
@@ -193,7 +193,7 @@ namespace lsp
                 LSP_TK_PROPERTY(Alignment,                  heading,                &sHeading)
                 LSP_TK_PROPERTY(Boolean,                    invert_mouse_vscroll,   &sInvertMouseVScroll);
                 LSP_TK_PROPERTY(WidgetPtr<ListBoxItem>,     selected,               &sSelected)
-                LSP_TK_PROPERTY(WidgetPtr<Widget>,          active,                 &sActive)
+                LSP_TK_PROPERTY(WidgetPtr<Widget>,          active_group,           &sActiveGroup)
 
                 LSP_TK_PROPERTY(Font,                       list_font,              sLBox.font())
                 LSP_TK_PROPERTY(WidgetList<ListBoxItem>,    items,                  sLBox.items())
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ListBox.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ListBox.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ListBox.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/ListBox.h	2025-08-26 18:15:44.093999719 +0000
@@ -66,7 +66,6 @@ namespace lsp
                 prop::Integer                   sBorderRadius;
                 prop::Integer                   sSpacing;
                 prop::Boolean                   sMultiSelect;
-                prop::Boolean                   sActive;
                 prop::Integer                   sHScrollSpacing;
                 prop::Integer                   sVScrollSpacing;
             LSP_TK_STYLE_DEF_END
@@ -174,7 +173,6 @@ namespace lsp
                 prop::Integer                   sBorderRadius;
                 prop::Integer                   sSpacing;
                 prop::Boolean                   sMultiSelect;
-                prop::Boolean                   sActive;
                 prop::Integer                   sHScrollSpacing;
                 prop::Integer                   sVScrollSpacing;
 
@@ -246,7 +244,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Integer,            border_gap,                 &sBorderGap)
                 LSP_TK_PROPERTY(Integer,            border_radius,              &sBorderRadius)
                 LSP_TK_PROPERTY(Boolean,            multi_select,               &sMultiSelect)
-                LSP_TK_PROPERTY(Boolean,            active,                     &sActive)
 
                 LSP_TK_PROPERTY(Integer,            hscroll_spacing,            &sHScrollSpacing)
                 LSP_TK_PROPERTY(Integer,            vscroll_spacing,            &sVScrollSpacing)
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/Menu.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/Menu.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/Menu.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/compound/Menu.h	2025-08-26 18:15:44.093999719 +0000
@@ -268,7 +268,7 @@ namespace lsp
                 virtual status_t            remove(Widget *child) override;
                 virtual void                show() override;
 
-                virtual void                draw(ws::ISurface *s) override;
+                virtual void                draw(ws::ISurface *s, bool force) override;
                 virtual status_t            on_key_down(const ws::event_t *e) override;
                 virtual status_t            on_key_up(const ws::event_t *e) override;
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Overlay.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Overlay.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Overlay.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Overlay.h	2025-08-26 18:15:44.093999719 +0000
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 28 мар. 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_TK_WIDGETS_CONTAINERS_OVERLAY_H_
+#define LSP_PLUG_IN_TK_WIDGETS_CONTAINERS_OVERLAY_H_
+
+#ifndef LSP_PLUG_IN_TK_IMPL
+    #error "use <lsp-plug.in/tk/tk.h>"
+#endif
+
+namespace lsp
+{
+    namespace tk
+    {
+        // Style definition
+        namespace style
+        {
+            LSP_TK_STYLE_DEF_BEGIN(Overlay, WidgetContainer)
+                prop::Float             sTransparency;      // The transparency of the overlay widget
+                prop::Integer           sPriority;          // The draw priority of the overlay widget
+                prop::Layout            sLayout;            // The layout of the overlay widget
+                prop::Position          sPosition;          // The position of the overlay widget
+                prop::SizeConstraints   sConstraints;       // Size constraints
+                prop::Boolean           sAutoClose;         // Automatically close when the pointer delivers event ouside of it's area
+                prop::BorderRounding    sBorderRounding;    // Border rounding
+                prop::Integer           sBorderRadius;      // Border radius
+                prop::Integer           sBorderSize;        // Border width
+                prop::Color             sBorderColor;       // Border color
+                prop::Integer           sShadowSize;        // Shadow size
+                prop::Color             sShadowStart;       // Shadow start color
+                prop::Color             sShadowEnd;         // Shadow end color
+                prop::BorderRounding    sShadowRounding;    // Shadow rounding
+                prop::Integer           sShadowRadius;      // Shadow rounding radius
+                prop::Padding           sIPadding;          // Internal padding
+            LSP_TK_STYLE_DEF_END
+        }
+
+        /**
+         * Function for estimating overlay position on realize() call
+         * @param rect the window rectangle that will be used for overlay
+         * @param overlay overlay to estimate position
+         * @param data supplementary data
+         * @return true on success execution
+         */
+        typedef bool (*overlay_position_t)(ws::rectangle_t *rect, Overlay *overlay, void *data);
+
+        /**
+         * Function for filtering events on automatic overlay hide
+         * @param ev the event for filtering
+         * @param overlay overlay that triggered the filtering
+         * @param data supplementary data
+         * @return true on success execution
+         */
+        typedef bool (*overlay_filter_t)(const ws::event_t *ev, Overlay *overlay, void *data);
+
+        /**
+         * Overlayment, implements a single widget container that Overlays the child widget
+         * according to the layout settings. The container ignores allocation() property
+         * of the child widget.
+         */
+        class Overlay: public WidgetContainer
+        {
+            public:
+                static const w_class_t    metadata;
+
+                friend class Window;
+
+            protected:
+                Widget                 *wWidget;
+
+                prop::Float             sTransparency;      // The transparency of the overlay widget
+                prop::Integer           sPriority;          // The draw priority of the overlay widget
+                prop::Layout            sLayout;            // The layout of the overlay widget
+                prop::Position          sPosition;          // The position of the overlay widget in pixels
+                prop::SizeConstraints   sConstraints;       // Size constraints
+                prop::Boolean           sAutoClose;         // Automatically close when the pointer delivers event ouside of it's area
+                prop::BorderRounding    sBorderRounding;    // Border rounding
+                prop::Integer           sBorderRadius;      // Border radius
+                prop::Integer           sBorderSize;        // Border width
+                prop::Color             sBorderColor;       // Border color
+                prop::Integer           sShadowSize;        // Shadow size
+                prop::Color             sShadowStart;       // Shadow start color
+                prop::Color             sShadowEnd;         // Shadow end color
+                prop::BorderRounding    sShadowRounding;    // Shadow rounding
+                prop::Integer           sShadowRadius;      // Shadow rounding radius
+                prop::Padding           sIPadding;          // Internal padding
+
+                overlay_position_t      pPosFunc;           // Position calculation function
+                void                   *pPosData;           // Position function data
+
+                overlay_filter_t        pFilterFunc;        // Event filter function
+                void                   *pFilterData;        // Event filter data
+
+            protected:
+                void                    do_destroy();
+                void                    draw_shadow_segment(
+                    ws::ISurface *s,
+                    float x1, float y1,
+                    float x2, float y2,
+                    float bradius_start, float bradius_end,
+                    float sradius_start, float sradius_end,
+                    float width);
+
+                void                    draw_shadow_ring(
+                    ws::ISurface *s,
+                    float xc1, float yc1,
+                    float x1, float y1,
+                    float xc2, float yc2,
+                    float x2, float y2,
+                    float angle);
+
+                void                    draw_shadow(ws::ISurface *s);
+
+            protected:
+                virtual Widget         *find_widget(ssize_t x, ssize_t y) override;
+                virtual void            property_changed(Property *prop) override;
+                virtual void            size_request(ws::size_limit_t *r) override;
+                virtual void            realize(const ws::rectangle_t *r) override;
+
+            public:
+                explicit Overlay(Display *dpy);
+                Overlay(const Overlay &) = delete;
+                Overlay(Overlay &&) = delete;
+                virtual ~Overlay() override;
+
+                Overlay & operator = (const Overlay &) = delete;
+                Overlay & operator = (Overlay &&) = delete;
+
+                virtual status_t        init() override;
+                virtual void            destroy() override;
+
+            public:
+                LSP_TK_PROPERTY(Float,              transparency,       &sTransparency)
+                LSP_TK_PROPERTY(Integer,            priority,           &sPriority)
+                LSP_TK_PROPERTY(Layout,             layout,             &sLayout)
+                LSP_TK_PROPERTY(Position,           position,           &sPosition)
+                LSP_TK_PROPERTY(SizeConstraints,    constraints,        &sConstraints)
+                LSP_TK_PROPERTY(Boolean,            auto_close,         &sAutoClose)
+                LSP_TK_PROPERTY(BorderRounding,     border_rounding,    &sBorderRounding)
+                LSP_TK_PROPERTY(Integer,            border_radius,      &sBorderRadius)
+                LSP_TK_PROPERTY(Integer,            border_size,        &sBorderSize)
+                LSP_TK_PROPERTY(Color,              border_color,       &sBorderColor)
+                LSP_TK_PROPERTY(Integer,            shadow_size,        &sShadowSize)
+                LSP_TK_PROPERTY(Color,              shadow_start,       &sShadowStart)
+                LSP_TK_PROPERTY(Color,              shadow_end,         &sShadowEnd)
+                LSP_TK_PROPERTY(Padding,            ipadding,           &sIPadding)
+
+            public:
+                virtual void            draw(ws::ISurface *s, bool force) override;
+                virtual status_t        add(Widget *widget) override;
+                virtual status_t        remove(Widget *widget) override;
+
+            public:
+                void                    set_position_function(overlay_position_t func, void *data = NULL);
+                void                    set_filter_function(overlay_filter_t func, void *data = NULL);
+                bool                    calculate_position(ws::rectangle_t *rect);
+                bool                    filter_event(const ws::event_t *ev);
+        };
+
+    } /* namespace tk */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_TK_WIDGETS_CONTAINERS_OVERLAY_H_ */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Tab.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Tab.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Tab.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Tab.h	2025-08-26 18:15:44.093999719 +0000
@@ -64,7 +64,6 @@ namespace lsp
                 prop::Font                  sFont;                  // Heading tab font
                 prop::Integer               sBorderSize;            // Border size of the heading tab
                 prop::Integer               sBorderRadius;          // Border radius of the heading tab
-                prop::Boolean               sActive;                // Activity flag
             LSP_TK_STYLE_DEF_END
         } /* namespace style */
 
@@ -103,7 +102,6 @@ namespace lsp
                 prop::Font                  sFont;                  // Heading tab font
                 prop::Integer               sBorderSize;            // Border size of the heading tab
                 prop::Integer               sBorderRadius;          // Border radius of the heading tab
-                prop::Boolean               sActive;                // Activity flag
 
             protected:
                 void                    do_destroy();
@@ -160,7 +158,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Font,               font,                                   &sFont);
                 LSP_TK_PROPERTY(Integer,            border_size,                            &sBorderSize);
                 LSP_TK_PROPERTY(Integer,            border_radius,                          &sBorderRadius);
-                LSP_TK_PROPERTY(Boolean,            active,                                 &sActive);
 
             public:
                 virtual Widget             *find_widget(ssize_t x, ssize_t y) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/TabGroup.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/TabGroup.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/TabGroup.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/TabGroup.h	2025-08-26 18:15:44.093999719 +0000
@@ -98,7 +98,7 @@ namespace lsp
                 prop::WidgetList<TabItem>   vItems;
                 prop::WidgetPtr<TabItem>    sSelected;
                 prop::WidgetList<Widget>    vWidgets;
-                prop::WidgetPtr<Widget>     sActive;
+                prop::WidgetPtr<Widget>     sActiveTab;
                 prop::CollectionListener    sIListener;
 
             protected:
@@ -156,7 +156,7 @@ namespace lsp
                 LSP_TK_PROPERTY(WidgetList<TabItem>,        items,                      &vItems)
                 LSP_TK_PROPERTY(WidgetList<Widget>,         widgets,                    &vWidgets)
                 LSP_TK_PROPERTY(WidgetPtr<TabItem>,         selected,                   &sSelected)
-                LSP_TK_PROPERTY(WidgetPtr<Widget>,          active,                     &sActive)
+                LSP_TK_PROPERTY(WidgetPtr<Widget>,          active_tab,                 &sActiveTab)
 
             public:
                 virtual Widget             *find_widget(ssize_t x, ssize_t y) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Window.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Window.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Window.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/containers/Window.h	2025-08-26 18:15:44.093999719 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 16 июн. 2017 г.
@@ -43,6 +43,7 @@ namespace lsp
                 prop::Integer           sBorderSize;
                 prop::Float             sBorderRadius;
                 prop::WindowActions     sActions;
+                prop::WindowState       sWindowState;
                 prop::Position          sPosition;
                 prop::Size              sWindowSize;
                 prop::SizeConstraints   sConstraints;
@@ -51,6 +52,8 @@ namespace lsp
             LSP_TK_STYLE_DEF_END
         }
 
+        class Overlay;
+
         class Window: public WidgetContainer
         {
             protected:
@@ -77,6 +80,13 @@ namespace lsp
                     Slot                sSlot;
                 } shortcut_t;
 
+                typedef struct overlay_t
+                {
+                    ws::rectangle_t     sArea;              // Allocation area
+                    ssize_t             nPriority;          // Sorting order by priority
+                    Overlay            *wWidget;            // Widget
+                } overlay_t;
+
             public:
                 static const w_class_t    metadata;
 
@@ -87,6 +97,7 @@ namespace lsp
                 Widget                 *pFocused;           // Focused widget
                 bool                    bMapped;
                 bool                    bOverridePointer;
+                ws::surface_type_t      enSurfaceType;      // Surface type
                 float                   fScaling;           // Cached scaling factor
                 Shortcuts               sShortcuts;         // Shortcuts
                 ShortcutTracker         sShortcutTracker;   // Shortcut tracker
@@ -104,22 +115,37 @@ namespace lsp
                 prop::Integer           sBorderSize;
                 prop::Float             sBorderRadius;
                 prop::WindowActions     sActions;
+                prop::WindowState       sWindowState;
                 prop::Position          sPosition;
                 prop::Size              sWindowSize;
                 prop::SizeConstraints   sSizeConstraints;
                 prop::Layout            sLayout;
                 prop::WindowPolicy      sPolicy;
+                prop::WidgetList<Overlay>    vOverlays;
+
+                prop::CollectionListener    sIListener;         // Listener to trigger vOverlays content change
 
                 lltl::parray<prop::Shortcut>    vShortcuts;
+                lltl::darray<overlay_t>         vDrawOverlays;
 
             //---------------------------------------------------------------------------------
             // Slot handlers
             protected:
                 static status_t     tmr_redraw_request(ws::timestamp_t sched, ws::timestamp_t ts, void *args);
                 static status_t     slot_window_close(Widget *sender, void *ptr, void *data);
+                static status_t     slot_window_state(Widget *sender, void *ptr, void *data);
+
+                static void         on_add_item(void *obj, Property *prop, void *w);
+                static void         on_remove_item(void *obj, Property *prop, void *w);
 
+                static ssize_t      overlay_compare_func(const overlay_t *a, const overlay_t *b);
+
+            protected:
                 status_t            do_render();
                 void                do_destroy();
+                void                draw_widgets(ws::ISurface *s);
+                void                auto_close_overlays(const ws::event_t *ev);
+                Overlay            *find_overlay(ssize_t x, ssize_t y);
                 virtual status_t    sync_size(bool force);
                 status_t            update_pointer();
 
@@ -215,16 +241,19 @@ namespace lsp
                 LSP_TK_PROPERTY(BorderStyle,        border_style,       &sBorderStyle)
                 LSP_TK_PROPERTY(Integer,            border_size,        &sBorderSize)
                 LSP_TK_PROPERTY(WindowActions,      actions,            &sActions)
+                LSP_TK_PROPERTY(WindowState,        state,              &sWindowState)
                 LSP_TK_PROPERTY(Size,               size,               &sWindowSize)
                 LSP_TK_PROPERTY(SizeConstraints,    constraints,        &sSizeConstraints)
                 LSP_TK_PROPERTY(Layout,             layout,             &sLayout)
                 LSP_TK_PROPERTY(WindowPolicy,       policy,             &sPolicy)
                 LSP_TK_PROPERTY(Widget,             child,              pChild)
                 LSP_TK_PROPERTY(Position,           position,           &sPosition)
+                LSP_TK_PROPERTY(WidgetList<Overlay>,overlays,           &vOverlays)
 
             //---------------------------------------------------------------------------------
             // Manipulation
             public:
+                virtual void            draw(ws::ISurface *s, bool force) override;
                 virtual void            render(ws::ISurface *s, const ws::rectangle_t *area, bool force) override;
 
                 virtual status_t        override_pointer(bool override = true);
@@ -242,16 +271,16 @@ namespace lsp
                 virtual void            show(tk::Widget *actor);
                 virtual void            show(ws::IWindow *actor);
 
-                virtual status_t        add(Widget *widget) override;
-                virtual status_t        remove(Widget *widget) override;
-                virtual status_t        remove_all() override;
-
                 virtual status_t        handle_event(const ws::event_t *e) override;
 
                 virtual bool            take_focus() override;
 
                 virtual bool            has_parent() const;
 
+                virtual status_t        add(Widget *child) override;
+                virtual status_t        remove(Widget *child) override;
+                virtual status_t        remove_all() override;
+
             public:
                 status_t                grab_events(ws::grab_t grab);
                 status_t                ungrab_events();
@@ -259,6 +288,12 @@ namespace lsp
                 status_t                set_class(const char *instance, const char *wclass);
                 status_t                set_class(const LSPString *instance, const LSPString *wclass);
 
+                // Get last surface type used
+                ws::surface_type_t      surface_type() const;
+
+                // Get active keys
+                const lltl::darray<ws::code_t> *active_keys() const;
+
             //---------------------------------------------------------------------------------
             // Event handling
             public:
@@ -272,6 +307,13 @@ namespace lsp
                  */
                 virtual status_t        on_close(const ws::event_t *e);
 
+                /** State change event
+                 *
+                 * @param e close event
+                 * @return status of operation
+                 */
+                virtual status_t        on_window_state(const ws::event_t *e);
+
                 /** Set window icon
                  *
                  * @param bgra color data
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/graph/Graph.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/graph/Graph.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/graph/Graph.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/graph/Graph.h	2025-08-26 18:15:44.093999719 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 20 авг. 2020 г.
@@ -209,14 +209,10 @@ namespace lsp
 
             public:
                 virtual status_t            add(Widget *child) override;
-
                 virtual status_t            remove(Widget *child) override;
-
                 virtual status_t            remove_all() override;
-
                 virtual void                render(ws::ISurface *s, const ws::rectangle_t *area, bool force) override;
-
-                virtual void                draw(ws::ISurface *s) override;
+                virtual void                draw(ws::ISurface *s, bool force) override;
         };
 
     } /* namespace tk */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/graph/GraphFrameBuffer.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/graph/GraphFrameBuffer.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/graph/GraphFrameBuffer.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/graph/GraphFrameBuffer.h	2025-08-26 18:15:44.093999719 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 20 авг. 2020 г.
@@ -51,10 +51,6 @@ namespace lsp
             public:
                 static const w_class_t    metadata;
 
-            private:
-                GraphFrameBuffer & operator = (const GraphFrameBuffer &);
-                GraphFrameBuffer(const GraphFrameBuffer &);
-
             protected:
                 typedef void (GraphFrameBuffer::*calc_color_t)(float *rgba, const float *value, size_t n);
 
@@ -89,14 +85,19 @@ namespace lsp
 
                 void                        destroy_data();
 
-                virtual void                property_changed(Property *prop);
+                virtual void                property_changed(Property *prop) override;
 
             public:
                 explicit GraphFrameBuffer(Display *dpy);
-                virtual ~GraphFrameBuffer();
+                GraphFrameBuffer(const GraphFrameBuffer &) = delete;
+                GraphFrameBuffer(GraphFrameBuffer &&) = delete;
+                virtual ~GraphFrameBuffer() override;
+
+                GraphFrameBuffer & operator = (const GraphFrameBuffer &) = delete;
+                GraphFrameBuffer & operator = (GraphFrameBuffer &&) = delete;
 
-                virtual status_t            init();
-                virtual void                destroy();
+                virtual status_t            init() override;
+                virtual void                destroy() override;
 
             public:
                 LSP_TK_PROPERTY(GraphFrameData,         data,               &sData)
@@ -110,12 +111,12 @@ namespace lsp
                 LSP_TK_PROPERTY(GraphFrameFunction,     function,           &sFunction)
 
             public:
-                virtual void                render(ws::ISurface *s, const ws::rectangle_t *area, bool force);
-
-                virtual void                draw(ws::ISurface *s);
+                virtual void                render(ws::ISurface *s, const ws::rectangle_t *area, bool force) override;
+                virtual void                draw(ws::ISurface *s, bool force) override;
         };
-    }
-}
+
+    } /* namespace lsp */
+} /* namespace tk */
 
 
 #endif /* LSP_PLUG_IN_TK_WIDGETS_GRAPH_GRAPHFRAMEBUFFER_H_ */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Bevel.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Bevel.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Bevel.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Bevel.h	2025-08-26 18:15:44.093999719 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 13 июн. 2021 г.
@@ -48,10 +48,6 @@ namespace lsp
          */
         class Bevel: public Widget
         {
-            private:
-                Bevel & operator = (const Bevel &);
-                Bevel(const Bevel &);
-
             public:
                 static const w_class_t    metadata;
 
@@ -75,7 +71,12 @@ namespace lsp
 
             public:
                 explicit Bevel(Display *dpy);
-                virtual ~Bevel();
+                Bevel(const Bevel &) = delete;
+                Bevel(Bevel &&) = delete;
+                virtual ~Bevel() override;
+
+                Bevel & operator = (const Bevel &) = delete;
+                Bevel & operator = (Bevel &&) = delete;
 
             public:
                 LSP_TK_PROPERTY(SizeConstraints,    constraints,        &sConstraints)
@@ -86,13 +87,13 @@ namespace lsp
                 LSP_TK_PROPERTY(Arrangement,        arrangement,        &sArrangement)
 
             protected:
-                virtual void        size_request(ws::size_limit_t *r);
-                virtual void        property_changed(Property *prop);
+                virtual void        size_request(ws::size_limit_t *r) override;
+                virtual void        property_changed(Property *prop) override;
 
             public:
-                virtual status_t    init();
+                virtual status_t    init() override;
 
-                virtual void        render(ws::ISurface *s, const ws::rectangle_t *area, bool force);
+                virtual void        render(ws::ISurface *s, const ws::rectangle_t *area, bool force) override;
         };
 
     } /* namespace tk */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Button.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Button.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Button.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Button.h	2025-08-26 18:15:44.093999719 +0000
@@ -71,7 +71,6 @@ namespace lsp
                 prop::Integer           sBorderPressedSize;
                 prop::Integer           sBorderDownSize;
                 prop::Boolean           sEditable;
-                prop::Boolean           sActive;
                 prop::Boolean           sHole;
                 prop::Boolean           sFlat;
                 prop::Boolean           sTextClip;
@@ -155,7 +154,6 @@ namespace lsp
                 prop::Integer           sBorderPressedSize;
                 prop::Integer           sBorderDownSize;
                 prop::Boolean           sEditable;
-                prop::Boolean           sActive;
                 prop::Boolean           sHole;
                 prop::Boolean           sFlat;
                 prop::Boolean           sTextClip;
@@ -171,6 +169,7 @@ namespace lsp
             protected:
                 void                update_mode(button_mode_t mode);
                 void                estimate_string_size(estimation_t *e, tk::String *s);
+                size_t              destroy_text_estimations();
                 style::ButtonColors *select_colors();
 
             protected:
@@ -237,7 +236,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Integer,            border_pressed_size,&sBorderPressedSize)
                 LSP_TK_PROPERTY(Integer,            border_down_size,   &sBorderDownSize)
                 LSP_TK_PROPERTY(Boolean,            editable,           &sEditable)
-                LSP_TK_PROPERTY(Boolean,            active,             &sActive)
                 LSP_TK_PROPERTY(Boolean,            hole,               &sHole)
                 LSP_TK_PROPERTY(Boolean,            flat,               &sFlat)
                 LSP_TK_PROPERTY(TextLayout,         text_layout,        &sTextLayout)
@@ -247,7 +245,7 @@ namespace lsp
                 LSP_TK_PROPERTY(Boolean,            gradient,           &sGradient)
 
             public:
-                virtual void        draw(ws::ISurface *s) override;
+                virtual void        draw(ws::ISurface *s, bool force) override;
                 virtual status_t    on_mouse_down(const ws::event_t *e) override;
                 virtual status_t    on_mouse_up(const ws::event_t *e) override;
                 virtual status_t    on_mouse_move(const ws::event_t *e) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/CheckBox.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/CheckBox.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/CheckBox.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/CheckBox.h	2025-08-26 18:15:44.093999719 +0000
@@ -63,7 +63,6 @@ namespace lsp
                 prop::Integer           sCheckGapSize;          // Size of gap for check
                 prop::Integer           sCheckMinSize;          // Minimum size of check
                 prop::Boolean           sChecked;               // Checked flag
-                prop::Boolean           sActive;                // Active flag
             LSP_TK_STYLE_DEF_END
         }
 
@@ -109,7 +108,6 @@ namespace lsp
                 prop::Integer           sCheckGapSize;          // Size of gap for check
                 prop::Integer           sCheckMinSize;          // Minimum size of check
                 prop::Boolean           sChecked;               // Checked flag
-                prop::Boolean           sActive;                // Active flag
 
             protected:
                 static status_t     slot_on_submit(Widget *sender, void *ptr, void *data);
@@ -158,10 +156,9 @@ namespace lsp
                 LSP_TK_PROPERTY(Integer,                    check_gap_size,                     &sCheckGapSize);
                 LSP_TK_PROPERTY(Integer,                    check_min_size,                     &sCheckMinSize);
                 LSP_TK_PROPERTY(Boolean,                    checked,                            &sChecked);
-                LSP_TK_PROPERTY(Boolean,                    active,                             &sActive);
 
             public:
-                virtual void        draw(ws::ISurface *s) override;
+                virtual void        draw(ws::ISurface *s, bool force) override;
                 virtual status_t    on_mouse_down(const ws::event_t *e) override;
                 virtual status_t    on_mouse_up(const ws::event_t *e) override;
                 virtual status_t    on_mouse_move(const ws::event_t *e) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Edit.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Edit.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Edit.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Edit.h	2025-08-26 18:15:44.093999719 +0000
@@ -68,7 +68,6 @@ namespace lsp
                 prop::Integer           sBorderGapSize;
                 prop::Integer           sBorderRadius;
                 prop::SizeConstraints   sConstraints;
-                prop::Boolean           sActive;
             LSP_TK_STYLE_DEF_END
         }
 
@@ -155,7 +154,6 @@ namespace lsp
                 prop::Integer           sBorderGapSize;
                 prop::Integer           sBorderRadius;
                 prop::SizeConstraints   sConstraints;
-                prop::Boolean           sActive;
                 prop::WidgetPtr<Menu>   sPopup;
 
             protected:
@@ -224,11 +222,10 @@ namespace lsp
                 LSP_TK_PROPERTY(Integer,            border_gap_size,                    &sBorderGapSize)
                 LSP_TK_PROPERTY(Integer,            border_radius,                      &sBorderRadius)
                 LSP_TK_PROPERTY(SizeConstraints,    constraints,                        &sConstraints)
-                LSP_TK_PROPERTY(Boolean,            active,                             &sActive);
                 LSP_TK_PROPERTY(WidgetPtr<Menu>,    popup,                              &sPopup)
 
             public:
-                virtual void                    draw(ws::ISurface *s) override;
+                virtual void                    draw(ws::ISurface *s, bool force) override;
                 virtual status_t                on_mouse_down(const ws::event_t *e) override;
                 virtual status_t                on_mouse_up(const ws::event_t *e) override;
                 virtual status_t                on_mouse_move(const ws::event_t *e) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Fader.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Fader.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Fader.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Fader.h	2025-08-26 18:15:44.093999719 +0000
@@ -74,7 +74,6 @@ namespace lsp
                 prop::Float                     sScaleBrightness;
                 prop::Boolean                   sBalanceColorCustom;
                 prop::Boolean                   sInvertMouseVScroll;
-                prop::Boolean                   sActive;
             LSP_TK_STYLE_DEF_END
         }
 
@@ -129,7 +128,6 @@ namespace lsp
                 prop::Float                     sScaleBrightness;
                 prop::Boolean                   sBalanceColorCustom;
                 prop::Boolean                   sInvertMouseVScroll;
-                prop::Boolean                   sActive;
 
             protected:
                 float                           limit_value(float value);
@@ -190,7 +188,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Float,          scale_brightness,               &sScaleBrightness);
                 LSP_TK_PROPERTY(Boolean,        balance_color_custom,           &sBalanceColorCustom);
                 LSP_TK_PROPERTY(Boolean,        invert_mouse_vscroll,           &sInvertMouseVScroll);
-                LSP_TK_PROPERTY(Boolean,        active,                         &sActive);
 
             public:
                 virtual status_t                on_mouse_down(const ws::event_t *e) override;
@@ -198,7 +195,7 @@ namespace lsp
                 virtual status_t                on_mouse_move(const ws::event_t *e) override;
                 virtual status_t                on_mouse_scroll(const ws::event_t *e) override;
                 virtual status_t                on_mouse_pointer(pointer_event_t *e) override;
-                virtual void                    draw(ws::ISurface *s) override;
+                virtual void                    draw(ws::ISurface *s, bool force) override;
 
             public:
                 virtual status_t                on_begin_edit();
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Hyperlink.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Hyperlink.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Hyperlink.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Hyperlink.h	2025-08-26 18:15:44.093999719 +0000
@@ -35,12 +35,29 @@ namespace lsp
         // Style definition
         namespace style
         {
+            typedef struct HyperlinkColors
+            {
+                prop::Color             sColor;
+
+                void listener(tk::prop::Listener *listener);
+                bool property_changed(Property *prop) const;
+            } HyperlinkColors;
+
+            enum HyperlinkColorState
+            {
+                HYPERLINK_NORMAL        = 0,
+                HYPERLINK_HOVER         = 1 << 0,
+                HYPERLINK_INACTIVE      = 1 << 1,
+
+                HYPERLINK_TOTAL         = 1 << 2
+            };
+
             LSP_TK_STYLE_DEF_BEGIN(Hyperlink, Widget)
+                HyperlinkColors             vColors[HYPERLINK_TOTAL];
+
                 prop::TextLayout            sTextLayout;    // Text layout
                 prop::TextAdjust            sTextAdjust;    // Text adjustment
                 prop::Font                  sFont;          // Font parameters
-                prop::Color                 sColor;         // Font color
-                prop::Color                 sHoverColor;    // Hover font color
                 prop::String                sText;          // Text to display
                 prop::SizeConstraints       sConstraints;   // Size constraints
                 prop::Boolean               sFollow;        // Follow hyperlink
@@ -61,16 +78,25 @@ namespace lsp
                     F_MOUSE_IGN     = 1 << 2,
                 };
 
+                enum hlink_flags_t
+                {
+                    HLNK_0      = style::HYPERLINK_NORMAL,
+                    HLNK_1      = style::HYPERLINK_HOVER,
+                    HLNK_2      = HLNK_0 | style::HYPERLINK_INACTIVE,
+                    HLNK_3      = HLNK_1 | style::HYPERLINK_INACTIVE,
+
+                    HLNK_TOTAL  = style::HYPERLINK_TOTAL
+                };
+
             protected:
                 size_t                      nMFlags;
                 size_t                      nState;
                 Widget                     *vMenus[3];
 
+                style::HyperlinkColors      vColors[HLNK_TOTAL];
                 prop::TextLayout            sTextLayout;    // Text layout
                 prop::TextAdjust            sTextAdjust;    // Text adjustment
                 prop::Font                  sFont;          // Font parameters
-                prop::Color                 sColor;         // Font color
-                prop::Color                 sHoverColor;    // Hover font color
                 prop::String                sText;          // Text to display
                 prop::SizeConstraints       sConstraints;   // Size constraints
                 prop::Boolean               sFollow;        // Follow hyperlink
@@ -83,8 +109,10 @@ namespace lsp
                 static status_t                 slot_on_popup(Widget *sender, void *ptr, void *data);
                 static status_t                 slot_copy_link_action(Widget *sender, void *ptr, void *data);
 
+            protected:
                 status_t                        create_default_menu();
                 void                            do_destroy();
+                const style::HyperlinkColors   *select_colors() const;
 
             protected:
                 virtual void                    size_request(ws::size_limit_t *r) override;
@@ -102,23 +130,25 @@ namespace lsp
                 virtual void                    destroy() override;
 
             public:
-                LSP_TK_PROPERTY(TextLayout,         text_layout,        &sTextLayout)
-                LSP_TK_PROPERTY(TextAdjust,         text_adjust,        &sTextAdjust)
-                LSP_TK_PROPERTY(Font,               font,               &sFont)
-                LSP_TK_PROPERTY(Color,              color,              &sColor)
-                LSP_TK_PROPERTY(Color,              hover_color,        &sHoverColor)
-                LSP_TK_PROPERTY(String,             text,               &sText)
-                LSP_TK_PROPERTY(SizeConstraints,    constraints,        &sConstraints)
-                LSP_TK_PROPERTY(Boolean,            follow,             &sFollow)
-                LSP_TK_PROPERTY(String,             url,                &sUrl)
-                LSP_TK_PROPERTY(WidgetPtr<Menu>,    popup,              &sPopup)
+                LSP_TK_PROPERTY(TextLayout,         text_layout,            &sTextLayout)
+                LSP_TK_PROPERTY(TextAdjust,         text_adjust,            &sTextAdjust)
+                LSP_TK_PROPERTY(Font,               font,                   &sFont)
+                LSP_TK_PROPERTY(Color,              color,                  &vColors[HLNK_0].sColor)
+                LSP_TK_PROPERTY(Color,              hover_color,            &vColors[HLNK_1].sColor)
+                LSP_TK_PROPERTY(Color,              inactive_color,         &vColors[HLNK_2].sColor)
+                LSP_TK_PROPERTY(Color,              inactive_hover_color,   &vColors[HLNK_3].sColor)
+                LSP_TK_PROPERTY(String,             text,                   &sText)
+                LSP_TK_PROPERTY(SizeConstraints,    constraints,            &sConstraints)
+                LSP_TK_PROPERTY(Boolean,            follow,                 &sFollow)
+                LSP_TK_PROPERTY(String,             url,                    &sUrl)
+                LSP_TK_PROPERTY(WidgetPtr<Menu>,    popup,                  &sPopup)
 
             public:
                 status_t                        copy_url(ws::clipboard_id_t cb);
                 status_t                        follow_url() const;
 
             public:
-                virtual void                    draw(ws::ISurface *s) override;
+                virtual void                    draw(ws::ISurface *s, bool force) override;
                 virtual status_t                on_mouse_in(const ws::event_t *e) override;
                 virtual status_t                on_mouse_out(const ws::event_t *e) override;
                 virtual status_t                on_mouse_move(const ws::event_t *e) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Indicator.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Indicator.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Indicator.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Indicator.h	2025-08-26 18:15:44.093999719 +0000
@@ -61,7 +61,6 @@ namespace lsp
                 prop::Boolean       sDarkText;      // Enables drawing of the dark text/dark segments
                 prop::String        sText;          // Actual text to display
                 prop::IndicatorType sType;          // Indicator type
-                prop::Boolean       sActive;        // Active/inactive state
                 prop::Font          sFont;          // Font properties
                 prop::Integer       sSpacing;       // Spacing between digits
                 prop::Padding       sIPadding;      // Internal padding
@@ -92,7 +91,6 @@ namespace lsp
                 prop::Boolean           sDarkText;      // Enables drawing of the dark text/dark segments
                 prop::String            sText;          // Actual text to display
                 prop::IndicatorType     sType;          // Indicator type
-                prop::Boolean           sActive;        // Active/inactive state
                 prop::Font              sFont;          // Font properties
                 prop::Integer           sSpacing;       // Spacing between digits
                 prop::Padding           sIPadding;      // Internal padding
@@ -137,13 +135,12 @@ namespace lsp
                 LSP_TK_PROPERTY(Boolean,            dark_text,              &sDarkText)
                 LSP_TK_PROPERTY(String,             text,                   &sText)
                 LSP_TK_PROPERTY(IndicatorType,      type,                   &sType)
-                LSP_TK_PROPERTY(Boolean,            active,                 &sActive)
                 LSP_TK_PROPERTY(Font,               font,                   &sFont)
                 LSP_TK_PROPERTY(Integer,            spacing,                &sSpacing)
                 LSP_TK_PROPERTY(Padding,            ipadding,               &sIPadding)
 
             public:
-                virtual void        draw(ws::ISurface *s) override;
+                virtual void        draw(ws::ISurface *s, bool force) override;
         };
 
     } /* namespace tk */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Knob.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Knob.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Knob.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Knob.h	2025-08-26 18:15:44.093999719 +0000
@@ -72,7 +72,6 @@ namespace lsp
                 prop::Boolean       sScaleActive;
                 prop::Boolean       sMeterActive;
                 prop::Boolean       sEditable;
-                prop::Boolean       sActive;
                 prop::Integer       sHoleSize;
                 prop::Integer       sGapSize;
                 prop::Float         sScaleBrightness;
@@ -124,7 +123,6 @@ namespace lsp
                 prop::Boolean       sScaleActive;
                 prop::Boolean       sMeterActive;
                 prop::Boolean       sEditable;
-                prop::Boolean       sActive;
                 prop::Integer       sHoleSize;
                 prop::Integer       sGapSize;
                 prop::Float         sScaleBrightness;
@@ -189,7 +187,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Boolean,            scale_active,               &sScaleActive)
                 LSP_TK_PROPERTY(Boolean,            meter_active,               &sMeterActive)
                 LSP_TK_PROPERTY(Boolean,            editable,                   &sEditable)
-                LSP_TK_PROPERTY(Boolean,            active,                     &sActive)
                 LSP_TK_PROPERTY(Integer,            hole_size,                  &sHoleSize)
                 LSP_TK_PROPERTY(Integer,            gap_size,                   &sGapSize)
                 LSP_TK_PROPERTY(Float,              scale_brightness,           &sScaleBrightness)
@@ -202,7 +199,7 @@ namespace lsp
                 virtual status_t                on_mouse_up(const ws::event_t *e) override;
                 virtual status_t                on_mouse_move(const ws::event_t *e) override;
                 virtual status_t                on_mouse_scroll(const ws::event_t *e) override;
-                virtual void                    draw(ws::ISurface *s) override;
+                virtual void                    draw(ws::ISurface *s, bool force) override;
 
                 virtual status_t                on_begin_edit();
                 virtual status_t                on_change();
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Label.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Label.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Label.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Label.h	2025-08-26 18:15:44.093999719 +0000
@@ -33,14 +33,33 @@ namespace lsp
         // Style definition
         namespace style
         {
+            typedef struct LabelColors
+            {
+                prop::Color             sColor;
+
+                void listener(tk::prop::Listener *listener);
+                bool property_changed(Property *prop) const;
+            } LabelColors;
+
+            enum LabelColorState
+            {
+                LABEL_NORMAL        = 0,
+                LABEL_HOVER         = 1 << 0,
+                LABEL_INACTIVE      = 1 << 1,
+
+                LABEL_TOTAL         = 1 << 2
+            };
+
             LSP_TK_STYLE_DEF_BEGIN(Label, Widget)
+                LabelColors                 vColors[LABEL_TOTAL];
+
                 prop::TextLayout            sTextLayout;    // Text layout
+                prop::TextLayout            sClipTextLayout;// Text layout when clipping
                 prop::TextAdjust            sTextAdjust;    // Text adjustment
                 prop::Font                  sFont;          // Font parameters
-                prop::Color                 sColor;         // Font color
-                prop::Color                 sHoverColor;    // Hover color
                 prop::Boolean               sHover;         // Hover enable
                 prop::String                sText;          // Text to display
+                prop::Boolean               sTextClip;      // Clip text
                 prop::SizeConstraints       sConstraints;   // Size constraints
                 prop::Padding               sIPadding;      // Internal padding
             LSP_TK_STYLE_DEF_END
@@ -62,6 +81,16 @@ namespace lsp
                     F_MOUSE_IGN     = 1 << 2,
                 };
 
+                enum lbl_flags_t
+                {
+                    LBL_0       = style::LABEL_NORMAL,
+                    LBL_1       = style::LABEL_HOVER,
+                    LBL_2       = LBL_0 | style::LABEL_INACTIVE,
+                    LBL_3       = LBL_1 | style::LABEL_INACTIVE,
+
+                    LBL_TOTAL   = style::HYPERLINK_TOTAL
+                };
+
                 typedef struct estimation_t
                 {
                     float scaling;
@@ -75,13 +104,14 @@ namespace lsp
                 size_t                      nMFlags;
                 size_t                      nState;
 
+                style::LabelColors          vColors[style::LABEL_TOTAL];
                 prop::TextLayout            sTextLayout;    // Text layout
+                prop::TextLayout            sClipTextLayout;// Text layout when clipping
                 prop::TextAdjust            sTextAdjust;    // Text adjustment
                 prop::Font                  sFont;          // Font parameters
-                prop::Color                 sColor;         // Font color
-                prop::Color                 sHoverColor;    // Hover color
                 prop::Boolean               sHover;         // Hover enable
                 prop::String                sText;          // Text to display
+                prop::Boolean               sTextClip;      // Clip text
                 prop::SizeConstraints       sConstraints;   // Size constraints
                 prop::Padding               sIPadding;      // Internal padding
                 prop::WidgetPtr<Menu>       sPopup;         // Popup menu
@@ -93,11 +123,17 @@ namespace lsp
                 static status_t                 slot_on_popup(Widget *sender, void *ptr, void *data);
 
             protected:
+                size_t                          destroy_text_estimations();
                 void                            estimate_string_size(estimation_t *e, tk::String *s);
                 void                            estimate_string_size(estimation_t *e, const LSPString *s);
+                const style::LabelColors       *select_colors() const;
+                const style::LabelColors       *select_colors(bool active, bool hover) const;
+
+            protected:
                 static bool                     contains_digit(const LSPString *s);
                 static void                     set_all_digits(LSPString *s, lsp_wchar_t new_ch);
 
+            protected:
                 virtual void                    size_request(ws::size_limit_t *r) override;
                 virtual void                    property_changed(Property *prop) override;
 
@@ -112,23 +148,27 @@ namespace lsp
                 virtual status_t                init() override;
 
             public:
-                LSP_TK_PROPERTY(TextLayout,         text_layout,        &sTextLayout)
-                LSP_TK_PROPERTY(TextAdjust,         text_adjust,        &sTextAdjust)
-                LSP_TK_PROPERTY(Font,               font,               &sFont)
-                LSP_TK_PROPERTY(Color,              color,              &sColor)
-                LSP_TK_PROPERTY(Color,              hover_color,        &sHoverColor)
-                LSP_TK_PROPERTY(Boolean,            hover,              &sHover)
-                LSP_TK_PROPERTY(String,             text,               &sText)
-                LSP_TK_PROPERTY(SizeConstraints,    constraints,        &sConstraints)
-                LSP_TK_PROPERTY(Padding,            ipadding,           &sIPadding)
-                LSP_TK_PROPERTY(WidgetPtr<Menu>,    popup,              &sPopup)
+                LSP_TK_PROPERTY(TextLayout,         text_layout,            &sTextLayout)
+                LSP_TK_PROPERTY(TextLayout,         clip_text_layout,       &sClipTextLayout)
+                LSP_TK_PROPERTY(TextAdjust,         text_adjust,            &sTextAdjust)
+                LSP_TK_PROPERTY(Font,               font,                   &sFont)
+                LSP_TK_PROPERTY(Color,              color,                  &vColors[LBL_0].sColor)
+                LSP_TK_PROPERTY(Color,              hover_color,            &vColors[LBL_1].sColor)
+                LSP_TK_PROPERTY(Color,              inactive_color,         &vColors[LBL_2].sColor)
+                LSP_TK_PROPERTY(Color,              inactive_hover_color,   &vColors[LBL_3].sColor)
+                LSP_TK_PROPERTY(Boolean,            hover,                  &sHover)
+                LSP_TK_PROPERTY(String,             text,                   &sText)
+                LSP_TK_PROPERTY(Boolean,            text_clip,              &sTextClip)
+                LSP_TK_PROPERTY(SizeConstraints,    constraints,            &sConstraints)
+                LSP_TK_PROPERTY(Padding,            ipadding,               &sIPadding)
+                LSP_TK_PROPERTY(WidgetPtr<Menu>,    popup,                  &sPopup)
 
             public:
                 void                            clear_text_estimations();
                 tk::String                     *add_text_estimation();
 
             public:
-                virtual void                    draw(ws::ISurface *s) override;
+                virtual void                    draw(ws::ISurface *s, bool force) override;
                 virtual status_t                on_mouse_in(const ws::event_t *e) override;
                 virtual status_t                on_mouse_out(const ws::event_t *e) override;
                 virtual status_t                on_mouse_move(const ws::event_t *e) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Led.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Led.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Led.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/Led.h	2025-08-26 18:15:44.093999719 +0000
@@ -62,7 +62,6 @@ namespace lsp
                 prop::Boolean           sRound;
                 prop::Integer           sBorderSize;
                 prop::Boolean           sGradient;
-                prop::Boolean           sActive;
             LSP_TK_STYLE_DEF_END
         }
 
@@ -89,7 +88,6 @@ namespace lsp
                 prop::Boolean           sRound;
                 prop::Integer           sBorderSize;
                 prop::Boolean           sGradient;
-                prop::Boolean           sActive;
 
             protected:
                 void                            draw_round(ws::ISurface *s);
@@ -128,10 +126,9 @@ namespace lsp
                 LSP_TK_PROPERTY(Boolean,            round,                      &sRound)
                 LSP_TK_PROPERTY(Integer,            border_size,                &sBorderSize)
                 LSP_TK_PROPERTY(Boolean,            gradient,                   &sGradient)
-                LSP_TK_PROPERTY(Boolean,            active,                     &sActive)
 
             public:
-                virtual void                    draw(ws::ISurface *s) override;
+                virtual void                    draw(ws::ISurface *s, bool force) override;
         };
     
     } /* namespace tk */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ListBoxItem.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ListBoxItem.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ListBoxItem.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ListBoxItem.h	2025-08-26 18:15:44.093999719 +0000
@@ -57,7 +57,6 @@ namespace lsp
 
                 prop::String                sText;
                 prop::TextAdjust            sTextAdjust;
-                prop::Boolean               sActive;
             LSP_TK_STYLE_DEF_END
         }
         
@@ -88,7 +87,6 @@ namespace lsp
                 style::ListBoxItemColors    vColors[style::LISTBOXITEM_TOTAL];
                 prop::String                sText;
                 prop::TextAdjust            sTextAdjust;
-                prop::Boolean               sActive;
 
             protected:
                 style::ListBoxItemColors   *select_colors(bool selected, bool hover, bool active);
@@ -126,7 +124,6 @@ namespace lsp
 
                 LSP_TK_PROPERTY(String,     text,                               &sText)
                 LSP_TK_PROPERTY(TextAdjust, text_adjust,                        &sTextAdjust)
-                LSP_TK_PROPERTY(Boolean,    active,                             &sActive)
 
         };
     
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/MenuItem.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/MenuItem.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/MenuItem.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/MenuItem.h	2025-08-26 18:15:44.093999719 +0000
@@ -63,7 +63,6 @@ namespace lsp
                 prop::TextAdjust            sTextAdjust;
                 prop::MenuItemType          sType;
                 prop::Boolean               sChecked;
-                prop::Boolean               sActive;
                 prop::Shortcut              sShortcut;
             LSP_TK_STYLE_DEF_END
         }
@@ -90,7 +89,6 @@ namespace lsp
                 prop::TextAdjust            sTextAdjust;
                 prop::MenuItemType          sType;
                 prop::Boolean               sChecked;
-                prop::Boolean               sActive;
                 prop::Shortcut              sShortcut;
 
             protected:
@@ -132,7 +130,6 @@ namespace lsp
                 LSP_TK_PROPERTY(TextAdjust,             text_adjust,                    &sTextAdjust)
                 LSP_TK_PROPERTY(MenuItemType,           type,                           &sType)
                 LSP_TK_PROPERTY(Boolean,                checked,                        &sChecked)
-                LSP_TK_PROPERTY(Boolean,                active,                         &sActive)
                 LSP_TK_PROPERTY(Shortcut,               shortcut,                       &sShortcut)
 
             public:
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ProgressBar.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ProgressBar.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ProgressBar.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ProgressBar.h	2025-08-26 18:15:44.093999719 +0000
@@ -61,7 +61,6 @@ namespace lsp
                 prop::String                    sText;              // Text to display
                 prop::TextLayout                sTextLayout;        // Text layout
                 prop::Boolean                   sShowText;          // Show text
-                prop::Boolean                   sActive;            // Activity flag
                 prop::Font                      sFont;              // Font of the text
                 prop::Integer                   sBorderSize;        // Size of the border
                 prop::Integer                   sBorderGapSize;     // Size of the border gap
@@ -91,7 +90,6 @@ namespace lsp
                 prop::String                    sText;              // Text to display
                 prop::TextLayout                sTextLayout;        // Text layout
                 prop::Boolean                   sShowText;          // Show text
-                prop::Boolean                   sActive;            // Activity flag
                 prop::Font                      sFont;              // Font of the text
                 prop::Integer                   sBorderSize;        // Size of the border
                 prop::Integer                   sBorderGapSize;     // Size of the border gap
@@ -135,14 +133,13 @@ namespace lsp
                 LSP_TK_PROPERTY(String,             text,                       &sText)
                 LSP_TK_PROPERTY(TextLayout,         text_layout,                &sTextLayout)
                 LSP_TK_PROPERTY(Boolean,            show_text,                  &sShowText)
-                LSP_TK_PROPERTY(Boolean,            active,                     &sActive)
                 LSP_TK_PROPERTY(Font,               font,                       &sFont)
                 LSP_TK_PROPERTY(Integer,            border_size,                &sBorderSize)
                 LSP_TK_PROPERTY(Integer,            border_gap_size,            &sBorderGapSize)
                 LSP_TK_PROPERTY(Integer,            border_radius,              &sBorderRadius)
 
             public:
-                virtual void                    draw(ws::ISurface *s) override;
+                virtual void                    draw(ws::ISurface *s, bool force) override;
         };
 
     } /* namespace tk */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/RadioButton.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/RadioButton.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/RadioButton.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/RadioButton.h	2025-08-26 18:15:44.093999719 +0000
@@ -61,7 +61,6 @@ namespace lsp
                 prop::Integer           sCheckGapSize;          // Size of gap for check
                 prop::Integer           sCheckMinSize;          // Minimum size of check
                 prop::Boolean           sChecked;               // Checked flag
-                prop::Boolean           sActive;                // Activity flag
             LSP_TK_STYLE_DEF_END
         }
 
@@ -103,7 +102,6 @@ namespace lsp
                 prop::Integer               sCheckGapSize;          // Size of gap for check
                 prop::Integer               sCheckMinSize;          // Minimum size of check
                 prop::Boolean               sChecked;               // Checked flag
-                prop::Boolean               sActive;                // Activity flag
 
             protected:
                 static status_t             slot_on_submit(Widget *sender, void *ptr, void *data);
@@ -151,10 +149,9 @@ namespace lsp
                 LSP_TK_PROPERTY(Integer,                    check_gap_size,                     &sCheckGapSize);
                 LSP_TK_PROPERTY(Integer,                    check_min_size,                     &sCheckMinSize);
                 LSP_TK_PROPERTY(Boolean,                    checked,                            &sChecked);
-                LSP_TK_PROPERTY(Boolean,                    active,                             &sActive);
 
             public:
-                virtual void        draw(ws::ISurface *s) override;
+                virtual void        draw(ws::ISurface *s, bool force) override;
                 virtual status_t    on_mouse_down(const ws::event_t *e) override;
                 virtual status_t    on_mouse_up(const ws::event_t *e) override;
                 virtual status_t    on_mouse_move(const ws::event_t *e) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ScrollBar.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ScrollBar.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ScrollBar.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/ScrollBar.h	2025-08-26 18:15:44.093999719 +0000
@@ -78,7 +78,6 @@ namespace lsp
                 prop::Integer           sSliderBorderSize;
                 prop::Boolean           sInvertMouseHScroll;
                 prop::Boolean           sInvertMouseVScroll;
-                prop::Boolean           sActive;
             LSP_TK_STYLE_DEF_END
         }
 
@@ -152,7 +151,6 @@ namespace lsp
                 prop::Integer           sSliderBorderSize;
                 prop::Boolean           sInvertMouseHScroll;
                 prop::Boolean           sInvertMouseVScroll;
-                prop::Boolean           sActive;
 
                 Timer                   sTimer;
 
@@ -235,7 +233,6 @@ namespace lsp
 
                 LSP_TK_PROPERTY(Boolean,            invert_mouse_hscroll,           &sInvertMouseHScroll)
                 LSP_TK_PROPERTY(Boolean,            invert_mouse_vscroll,           &sInvertMouseVScroll)
-                LSP_TK_PROPERTY(Boolean,            active,                         &sActive)
 
             public:
                 virtual status_t                on_mouse_down(const ws::event_t *e) override;
@@ -245,7 +242,7 @@ namespace lsp
                 virtual status_t                on_mouse_move(const ws::event_t *e) override;
                 virtual status_t                on_mouse_scroll(const ws::event_t *e) override;
                 virtual status_t                on_mouse_pointer(pointer_event_t *e) override;
-                virtual void                    draw(ws::ISurface *s) override;
+                virtual void                    draw(ws::ISurface *s, bool force) override;
 
             public:
                 virtual status_t                on_begin_edit();
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/TabItem.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/TabItem.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/TabItem.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/simple/TabItem.h	2025-08-26 18:15:44.093999719 +0000
@@ -63,7 +63,6 @@ namespace lsp
                 prop::Font                  sFont;                  // Heading tab font
                 prop::Integer               sBorderSize;            // Border size of the heading tab
                 prop::Integer               sBorderRadius;          // Border radius of the heading tab
-                prop::Boolean               sActive;                // Activity flag
             LSP_TK_STYLE_DEF_END
         } /* namespace style */
 
@@ -101,7 +100,6 @@ namespace lsp
                 prop::Font                  sFont;                  // Heading tab font
                 prop::Integer               sBorderSize;            // Border size of the heading tab
                 prop::Integer               sBorderRadius;          // Border radius of the heading tab
-                prop::Boolean               sActive;                // Activity flag
 
             protected:
                 style::TabItemColors   *select_colors(bool selected, bool hover);
@@ -153,7 +151,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Font,               font,                                   &sFont);
                 LSP_TK_PROPERTY(Integer,            border_size,                            &sBorderSize);
                 LSP_TK_PROPERTY(Integer,            border_radius,                          &sBorderRadius);
-                LSP_TK_PROPERTY(Boolean,            active,                                 &sActive);
         };
 
     } /* namespace tk */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioChannel.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioChannel.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioChannel.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioChannel.h	2025-08-26 18:15:44.093999719 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 28 сент. 2020 г.
@@ -129,9 +129,10 @@ namespace lsp
                 prop::SizeConstraints   sConstraints;       // Size constraints
 
             protected:
-                virtual void            size_request(ws::size_limit_t *r);
-                virtual void            property_changed(Property *prop);
+                virtual void            size_request(ws::size_limit_t *r) override;
+                virtual void            property_changed(Property *prop) override;
 
+            protected:
                 void                    draw_samples(const ws::rectangle_t *r, ws::ISurface *s, size_t samples, float scaling, float bright, float max_amplitude);
                 void                    draw_fades(const ws::rectangle_t *r, ws::ISurface *s, size_t samples, float scaling, float bright);
                 void                    draw_range(const ws::rectangle_t *r, ws::ISurface *s, range_t *range, size_t samples, float scaling, float bright);
@@ -141,12 +142,12 @@ namespace lsp
                 explicit AudioChannel(Display *dpy);
                 AudioChannel(const AudioChannel &) = delete;
                 AudioChannel(AudioChannel &&) = delete;
-                virtual ~AudioChannel();
+                virtual ~AudioChannel() override;
 
                 AudioChannel & operator = (const AudioChannel &) = delete;
                 AudioChannel & operator = (AudioChannel &) = delete;
 
-                virtual status_t        init();
+                virtual status_t        init() override;
 
             public:
                 LSP_TK_PROPERTY(FloatArray,             samples,                &vSamples);
@@ -184,7 +185,7 @@ namespace lsp
                 LSP_TK_PROPERTY(SizeConstraints,        constraints,            &sConstraints);
 
             public:
-                virtual void            draw(ws::ISurface *s);
+                virtual void            draw(ws::ISurface *s, bool force) override;
         };
     } /* namespace tk */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioEnvelope.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioEnvelope.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioEnvelope.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioEnvelope.h	2025-08-26 18:15:44.093999719 +0000
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 3 июн. 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_TK_WIDGETS_SPECIFIC_AUDIOENVELOPE_H_
+#define LSP_PLUG_IN_TK_WIDGETS_SPECIFIC_AUDIOENVELOPE_H_
+
+#ifndef LSP_PLUG_IN_TK_IMPL
+    #error "use <lsp-plug.in/tk/tk.h>"
+#endif
+
+namespace lsp
+{
+    namespace tk
+    {
+        class AudioSample;
+
+        // Style definition
+        namespace style
+        {
+            LSP_TK_STYLE_DEF_BEGIN(AudioEnvelope, Widget)
+                prop::Float             sAttackTime;            // Normalized attack time [0..1]
+                prop::Float             sAttackCurvature;       // Normalized attack curvature [0..1]
+                prop::StepFloat         sAttackStep;            // Attack curvature step
+                prop::Float             sHoldTime;              // Normalized Hold time point [0..1]
+                prop::Float             sDecayTime;             // Normalized Decay time point [0..1]
+                prop::Float             sDecayCurvature;        // Normalized Decay curvature [0..1]
+                prop::StepFloat         sDecayStep;             // Decay curvature step
+                prop::Float             sBreakLevel;            // Normalized Break level point [0..1]
+                prop::Float             sSlopeTime;             // Normalized Slope time point [0..1]
+                prop::Float             sSlopeCurvature;        // Normalized Slope curvature [0..1]
+                prop::StepFloat         sSlopeStep;             // Slope curvature step
+                prop::Float             sSustainLevel;          // Normalized Sustain level [0..1]
+                prop::Float             sReleaseTime;           // Normalized Release time [0..1]
+                prop::Float             sReleaseCurvature;      // Normalized Release slope [0..1]
+                prop::StepFloat         sReleaseStep;           // Release slope step
+                prop::Boolean           sHold;                  // Enable hold time point
+                prop::Boolean           sBreak;                 // Enable slope time point
+                prop::Boolean           sQuadPoint;             // Use quad point instead of circle
+                prop::Boolean           sFill;                  // Use fill color for drawing
+                prop::Boolean           sWire;                  // Draw line
+                prop::Boolean           sInvertMouseVScroll;    // Invert mouse vertical scroll
+                prop::Boolean           sEditable;              // Editable flag
+
+                prop::Integer           sLineWidth;             // Line width
+                prop::Color             sLineColor;             // Line color
+                prop::Color             sFillColor;             // Fill color
+                prop::Integer           sPointSize;             // Point size
+                prop::Color             sPointColor;            // Point color
+                prop::Color             sPointHoverColor;       // Point hover color
+
+                prop::SizeConstraints   sConstraints;           // Size constraints
+                prop::Integer           sBorder;                // Border size
+                prop::Integer           sBorderRadius;          // Border radius
+                prop::Boolean           sBorderFlat;            // Border is flat
+                prop::Color             sBorderColor;           // Color of the border
+                prop::Boolean           sGlass;                 // Draw glass
+                prop::Color             sGlassColor;            // Color of the glass
+                prop::Padding           sIPadding;              // Internal padding
+
+            LSP_TK_STYLE_DEF_END
+        }
+
+        /**
+         * Audio envelope: implements audio envelope curve
+         */
+        class AudioEnvelope: public Widget
+        {
+            public:
+                static const w_class_t    metadata;
+
+            public:
+                typedef void (*curve_function_t)(float *y, const float *x, size_t count, const AudioEnvelope *sender, void *data);
+
+            private:
+                friend class AudioSample;
+
+                enum point_role_t
+                {
+                    PR_ATTACK,
+                    PR_HOLD,
+                    PR_DECAY_BREAK,
+                    PR_SLOPE_SUSTAIN,
+                    PR_RELEASE,
+
+                    PR_TOTAL
+                };
+
+                typedef struct point_t
+                {
+                    prop::Float            *pX;
+                    prop::Float            *pY;
+                    prop::Float            *pZ;
+                    prop::StepFloat        *pStep;
+                    ssize_t                 nX;
+                    ssize_t                 nY;
+                    bool                    bEnabled;
+                    bool                    bVisible;
+                } point_t;
+
+            protected:
+                ws::rectangle_t         sArea;                  // The area where the main contents is drawn
+                ws::rectangle_t         sDrawArea;              // The actual draw area used
+                point_t                 vPoints[PR_TOTAL];      // Edit points
+                point_t                *pHandler;               // Current event handler
+                size_t                  nBMask;                 // Mouse button mask
+                ssize_t                 nLastX;                 // Last position X
+                ssize_t                 nLastY;                 // Last position Y
+                size_t                  nPointSize;             // Size of point
+                bool                    bQuadPoint;             // Quadratic point
+
+                prop::Float             sAttackTime;            // Normalized attack time [0..1]
+                prop::Float             sAttackCurvature;       // Normalized attack slope [0..1]
+                prop::StepFloat         sAttackStep;            // Attack curvature step
+                prop::Float             sHoldTime;              // Normalized Hold time point [0..1]
+                prop::Float             sDecayTime;             // Normalized Decay time point [0..1]
+                prop::Float             sDecayCurvature;        // Normalized Decay slope [0..1]
+                prop::StepFloat         sDecayStep;             // Decay curvature step
+                prop::Float             sBreakLevel;            // Normalized Break level point [0..1]
+                prop::Float             sSlopeTime;             // Normalized Slope time point [0..1]
+                prop::Float             sSlopeCurvature;        // Normalized Slope slope point [0..1]
+                prop::StepFloat         sSlopeStep;             // Slope curvature step
+                prop::Float             sSustainLevel;          // Normalized Sustain level [0..1]
+                prop::Float             sReleaseTime;           // Normalized Release time [0..1]
+                prop::Float             sReleaseCurvature;      // Normalized Release slope [0..1]
+                prop::StepFloat         sReleaseStep;           // Release slope step
+                prop::Boolean           sHold;                  // Enable hold time point
+                prop::Boolean           sBreak;                 // Enable slope time point
+                prop::Boolean           sQuadPoint;             // Use quad point instead of circle
+                prop::Boolean           sFill;                  // Use fill color for drawing
+                prop::Boolean           sWire;                  // Draw line
+                prop::Boolean           sInvertMouseVScroll;    // Invert mouse vertical scroll
+                prop::Boolean           sEditable;              // Editable flag
+
+                prop::Integer           sLineWidth;             // Line width
+                prop::Color             sLineColor;             // Line color
+                prop::Color             sFillColor;             // Fill color
+                prop::Integer           sPointSize;             // Point size
+                prop::Color             sPointColor;            // Point color
+                prop::Color             sPointHoverColor;       // Point hover color
+
+                prop::SizeConstraints   sConstraints;           // Size constraints
+                prop::Color             sColor;                 // Main color of the widget
+                prop::Integer           sBorder;                // Border size
+                prop::Integer           sBorderRadius;          // Border radius
+                prop::Boolean           sBorderFlat;            // Border is flat
+                prop::Color             sBorderColor;           // Color of the border
+                prop::Boolean           sGlass;                 // Draw glass
+                prop::Color             sGlassColor;            // Color of the glass
+                prop::Padding           sIPadding;              // Internal padding
+
+                ws::ISurface           *pGlass;                 // Surface to draw glass
+
+                curve_function_t        pFunction;              // Curve function
+                void                   *pFuncData;              // Curve function supplementary data
+                float                  *vBuffer;                // Drawing buffer
+                size_t                  nBufCapacity;           // Drawing buffer capacity in floats
+
+            protected:
+                static status_t         slot_on_change(Widget *sender, void *ptr, void *data);
+
+            protected:
+                void                    do_destroy();
+                void                    drop_glass();
+                void                    draw_curve(ws::ISurface *surface, float bright, float scaling, const ws::rectangle_t *rect);
+                void                    draw_point(ws::ISurface *s, const lsp::Color & color, const point_t *p);
+                void                    sync_handler(const ws::event_t *e);
+                void                    get_min_area_size(ssize_t *width, ssize_t *height, float scaling);
+                point_t                *find_point(ssize_t x, ssize_t y);
+                float                  *reserve_buffer(size_t count);
+
+            protected:
+                virtual void            size_request(ws::size_limit_t *r) override;
+                virtual void            realize(const ws::rectangle_t *r) override;
+                virtual void            property_changed(Property *prop) override;
+
+            public:
+                explicit AudioEnvelope(Display *dpy);
+                AudioEnvelope(const AudioEnvelope &) = delete;
+                AudioEnvelope(AudioEnvelope &&) = delete;
+                virtual ~AudioEnvelope() override;
+
+                AudioEnvelope & operator = (const AudioEnvelope &) = delete;
+                AudioEnvelope & operator = (AudioEnvelope &) = delete;
+
+                virtual status_t        init() override;
+                virtual void            destroy() override;
+
+            public:
+                LSP_TK_PROPERTY(Float,              attack_time,            &sAttackTime);
+                LSP_TK_PROPERTY(Float,              attack_curvature,       &sAttackCurvature);
+                LSP_TK_PROPERTY(StepFloat,          attack_step,            &sAttackStep);
+                LSP_TK_PROPERTY(Float,              hold_time,              &sHoldTime);
+                LSP_TK_PROPERTY(Float,              decay_time,             &sDecayTime);
+                LSP_TK_PROPERTY(Float,              decay_curvature,        &sDecayCurvature);
+                LSP_TK_PROPERTY(StepFloat,          decay_step,             &sDecayStep);
+                LSP_TK_PROPERTY(Float,              break_level,            &sBreakLevel);
+                LSP_TK_PROPERTY(Float,              slope_time,             &sSlopeTime);
+                LSP_TK_PROPERTY(Float,              slope_curvature,        &sSlopeCurvature);
+                LSP_TK_PROPERTY(StepFloat,          slope_step,             &sSlopeStep);
+                LSP_TK_PROPERTY(Float,              sustain_level,          &sSustainLevel);
+                LSP_TK_PROPERTY(Float,              release_time,           &sReleaseTime);
+                LSP_TK_PROPERTY(Float,              release_curvature,      &sReleaseCurvature);
+                LSP_TK_PROPERTY(StepFloat,          release_step,           &sReleaseStep);
+                LSP_TK_PROPERTY(Boolean,            hold_enabled,           &sHold);
+                LSP_TK_PROPERTY(Boolean,            break_enabled,          &sBreak);
+                LSP_TK_PROPERTY(Boolean,            quad_point,             &sQuadPoint);
+                LSP_TK_PROPERTY(Boolean,            fill,                   &sFill);
+                LSP_TK_PROPERTY(Boolean,            wire,                   &sWire);
+                LSP_TK_PROPERTY(Boolean,            invert_mouse_vscroll,   &sInvertMouseVScroll)
+                LSP_TK_PROPERTY(Boolean,            editable,               &sEditable)
+
+                LSP_TK_PROPERTY(Integer,            line_width,             &sLineWidth);
+                LSP_TK_PROPERTY(Color,              line_color,             &sLineColor);
+                LSP_TK_PROPERTY(Color,              fill_color,             &sFillColor);
+                LSP_TK_PROPERTY(Integer,            point_size,             &sPointSize);
+                LSP_TK_PROPERTY(Color,              point_color,            &sPointColor);
+                LSP_TK_PROPERTY(Color,              point_hover_color,      &sPointHoverColor);
+
+                LSP_TK_PROPERTY(SizeConstraints,    constraints,            &sConstraints);
+                LSP_TK_PROPERTY(Color,              color,                  &sColor);
+                LSP_TK_PROPERTY(Integer,            border_size,            &sBorder);
+                LSP_TK_PROPERTY(Integer,            border_radius,          &sBorderRadius);
+                LSP_TK_PROPERTY(Boolean,            border_flat,            &sBorderFlat);
+                LSP_TK_PROPERTY(Color,              border_color,           &sBorderColor);
+                LSP_TK_PROPERTY(Boolean,            glass,                  &sGlass);
+                LSP_TK_PROPERTY(Color,              glass_color,            &sGlassColor);
+                LSP_TK_PROPERTY(Padding,            ipadding,               &sIPadding);
+
+            public:
+                void set_curve_function(curve_function_t function, void *data = NULL);
+
+            public: // ui::IWidget
+                virtual void            draw(ws::ISurface *s, bool force) override;
+                virtual void            render(ws::ISurface *s, const ws::rectangle_t *area, bool force) override;
+                virtual status_t        on_mouse_in(const ws::event_t *e) override;
+                virtual status_t        on_mouse_out(const ws::event_t *e) override;
+                virtual status_t        on_mouse_down(const ws::event_t *e) override;
+                virtual status_t        on_mouse_up(const ws::event_t *e) override;
+                virtual status_t        on_mouse_move(const ws::event_t *e) override;
+                virtual status_t        on_mouse_scroll(const ws::event_t *e) override;
+
+            public:
+                virtual status_t        on_change();
+        };
+    } /* namespace tk */
+} /* namespace lsp */
+
+
+
+#endif /* LSP_PLUG_IN_TK_WIDGETS_SPECIFIC_AUDIOENVELOPE_H_ */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioSample.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioSample.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioSample.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/AudioSample.h	2025-08-26 18:15:44.093999719 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 28 сент. 2020 г.
@@ -46,7 +46,6 @@ namespace lsp
                 prop::Float             sMaxAmplitude;              // Maximum amplitude
                 prop::Color             sLineColor;                 // Line color
                 prop::SizeConstraints   sConstraints;               // Size constraints
-                prop::Boolean           sActive;                    // Active, allow button press
                 prop::Boolean           sSGroups;                   // Stereo groups enable
 
                 prop::String            sMainText;                  // Main text
@@ -79,6 +78,8 @@ namespace lsp
             LSP_TK_STYLE_DEF_END
         }
 
+        class AudioEnvelope;
+
         class AudioSample: public WidgetContainer
         {
             public:
@@ -105,7 +106,9 @@ namespace lsp
 
             protected:
                 prop::WidgetList<AudioChannel>  vChannels;          // List of audio channels
-                lltl::parray<AudioChannel>      vVisible;           // List of visible audio channels
+                prop::WidgetList<AudioEnvelope> vEnvelopes;         // List of audio envelopes
+                lltl::parray<AudioChannel>      vVisibleChannels;   // List of visible audio channels
+                lltl::parray<AudioEnvelope>     vVisibleEnvelopes;  // List of visible audio envelopes
                 prop::CollectionListener        sIListener;         // Listener to trigger vItems content change
 
                 prop::Integer           sWaveBorder;                // Wave border
@@ -118,7 +121,6 @@ namespace lsp
                 prop::Float             sMaxAmplitude;              // Maximum amplitude
                 prop::Color             sLineColor;                 // Line color
                 prop::SizeConstraints   sConstraints;               // Size constraints
-                prop::Boolean           sActive;                    // Active, allow button press
                 prop::Boolean           sSGroups;                   // Stereo groups enable
 
                 prop::String            sMainText;                  // Main text
@@ -160,27 +162,30 @@ namespace lsp
                 static status_t         slot_on_popup(Widget *sender, void *ptr, void *data);
                 static status_t         slot_on_submit(Widget *sender, void *ptr, void *data);
 
-            public:
+            protected:
+                static void             on_add_item(void *obj, Property *prop, void *w);
+                static void             on_remove_item(void *obj, Property *prop, void *w);
+
+            protected: // tk::Widget
                 virtual void            size_request(ws::size_limit_t *r) override;
                 virtual void            realize(const ws::rectangle_t *r) override;
                 virtual void            property_changed(Property *prop) override;
                 virtual void            hide_widget() override;
 
+            protected:
                 void                    draw_range(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, range_t *range, size_t samples);
                 void                    draw_channel1(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, size_t samples, float max_amplitude);
-                void                    draw_fades1(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, size_t samples);
+                void                    draw_fades1(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, ssize_t *head_cut, ssize_t *tail_cut, size_t samples);
                 void                    draw_channel2(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, size_t samples, bool down, float max_amplitude);
-                void                    draw_fades2(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c1, size_t samples, bool down);
+                void                    draw_fades2(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c1, ssize_t *head_cut, ssize_t *tail_cut, size_t samples, bool down);
                 void                    draw_play_position(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, size_t samples);
                 void                    draw_main_text(ws::ISurface *s);
                 void                    draw_label(ws::ISurface *s, size_t idx);
 
-                static void             on_add_item(void *obj, Property *prop, void *w);
-                static void             on_remove_item(void *obj, Property *prop, void *w);
-
                 void                    do_destroy();
 
-                void                    get_visible_items(lltl::parray<AudioChannel> *dst);
+                void                    get_visible_channels(lltl::parray<AudioChannel> *dst);
+                void                    get_visible_envelopes(lltl::parray<AudioEnvelope> *dst);
                 status_t                handle_mouse_move(const ws::event_t *ev);
                 void                    drop_glass();
 
@@ -198,6 +203,7 @@ namespace lsp
 
             public:
                 LSP_TK_PROPERTY(WidgetList<AudioChannel>,   channels,           &vChannels)
+                LSP_TK_PROPERTY(WidgetList<AudioEnvelope>,  envelopes,          &vEnvelopes)
 
                 LSP_TK_PROPERTY(Integer,                wave_border,            &sWaveBorder)
                 LSP_TK_PROPERTY(Integer,                fade_in_border,         &sFadeInBorder)
@@ -209,7 +215,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Float,                  max_amplitude,          &sMaxAmplitude)
                 LSP_TK_PROPERTY(Color,                  line_color,             &sLineColor)
                 LSP_TK_PROPERTY(SizeConstraints,        constraints,            &sConstraints)
-                LSP_TK_PROPERTY(Boolean,                active,                 &sActive)
                 LSP_TK_PROPERTY(Boolean,                stereo_groups,          &sSGroups)
 
                 LSP_TK_PROPERTY(String,                 main_text,              &sMainText)
@@ -242,18 +247,19 @@ namespace lsp
 
                 LSP_TK_PROPERTY(WidgetPtr<Menu>,        popup,                  &sPopup);
 
-            public:
+            public: // tk::Widget
                 virtual void                query_draw(size_t flags = REDRAW_SURFACE) override;
-                virtual void                draw(ws::ISurface *s) override;
+                virtual void                draw(ws::ISurface *s, bool force) override;
                 virtual void                render(ws::ISurface *s, const ws::rectangle_t *area, bool force) override;
                 virtual status_t            add(Widget *widget) override;
                 virtual status_t            remove(Widget *child) override;
                 virtual status_t            remove_all() override;
-
-            public:
                 virtual status_t            on_mouse_down(const ws::event_t *e) override;
                 virtual status_t            on_mouse_up(const ws::event_t *e) override;
                 virtual status_t            on_mouse_move(const ws::event_t *e) override;
+                virtual Widget             *find_widget(ssize_t x, ssize_t y) override;
+
+            public:
                 virtual status_t            on_before_popup(Menu *menu);
                 virtual status_t            on_popup(Menu *menu);
                 virtual status_t            on_submit();
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/FileButton.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/FileButton.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/FileButton.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/FileButton.h	2025-08-26 18:15:44.093999719 +0000
@@ -67,7 +67,6 @@ namespace lsp
                 prop::Padding           sTextPadding;       // Text padding
                 prop::SizeConstraints   sConstraints;       // Size constraints
                 prop::Boolean           sGradient;          // Use gradient when drawing
-                prop::Boolean           sActive;            // Active state
                 prop::Integer           sBorderSize;        // Border size
                 prop::Integer           sBorderPressedSize; // Border size when pressed
             LSP_TK_STYLE_DEF_END
@@ -106,7 +105,6 @@ namespace lsp
                 prop::Padding           sTextPadding;       // Text padding
                 prop::SizeConstraints   sConstraints;       // Size constraints
                 prop::Boolean           sGradient;          // Use gradient when drawing
-                prop::Boolean           sActive;            // Active state
                 prop::Integer           sBorderSize;        // Border size
                 prop::Integer           sBorderPressedSize; // Border size when pressed
                 prop::WidgetPtr<Menu>   sPopup;             // Popup Menu
@@ -165,13 +163,12 @@ namespace lsp
                 LSP_TK_PROPERTY(Padding,                text_padding,               &sTextPadding);
                 LSP_TK_PROPERTY(SizeConstraints,        constraints,                &sConstraints);
                 LSP_TK_PROPERTY(Boolean,                gradient,                   &sGradient)
-                LSP_TK_PROPERTY(Boolean,                active,                     &sActive)
                 LSP_TK_PROPERTY(Integer,                border_size,                &sBorderSize)
                 LSP_TK_PROPERTY(Integer,                border_pressed_size,        &sBorderPressedSize)
                 LSP_TK_PROPERTY(WidgetPtr<Menu>,        popup,                      &sPopup);
 
             public:
-                virtual void        draw(ws::ISurface *s) override;
+                virtual void        draw(ws::ISurface *s, bool force) override;
                 virtual status_t    on_mouse_down(const ws::event_t *e) override;
                 virtual status_t    on_mouse_up(const ws::event_t *e) override;
                 virtual status_t    on_mouse_move(const ws::event_t *e) override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/Fraction.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/Fraction.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/Fraction.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/Fraction.h	2025-08-26 18:15:44.093999719 +0000
@@ -58,7 +58,6 @@ namespace lsp
                 prop::Float                 sAngle;         // Fraction angle
                 prop::Integer               sTextPad;       // Text padding
                 prop::Integer               sThick;         // Thickness
-                prop::Boolean               sActive;        // Activity flag
 
                 prop::String                sItemText[2];
                 prop::Boolean               sItemOpened[2];
@@ -170,7 +169,6 @@ namespace lsp
                 prop::Float                 sAngle;         // Fraction angle
                 prop::Integer               sTextPad;       // Text padding
                 prop::Integer               sThick;         // Thickness
-                prop::Boolean               sActive;        // Activity flag
 
                 size_t                      nMBState;       // Mouse button state
                 mstate_t                    enTrgState;     // Trigger state
@@ -216,7 +214,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Float,                      angle,                  &sAngle)
                 LSP_TK_PROPERTY(Integer,                    text_pad,               &sTextPad)
                 LSP_TK_PROPERTY(Integer,                    thickness,              &sThick)
-                LSP_TK_PROPERTY(Boolean,                    active,                 &sActive)
 
                 LSP_TK_PROPERTY(String,                     num_empty_text,         &sNum.sText)
                 LSP_TK_PROPERTY(WidgetPtr<ListBoxItem>,     num_selected,           &sNum.sSelected)
@@ -232,7 +229,7 @@ namespace lsp
                 virtual status_t            on_mouse_down(const ws::event_t *e) override;
                 virtual status_t            on_mouse_up(const ws::event_t *e) override;
                 virtual status_t            on_mouse_scroll(const ws::event_t *e) override;
-                virtual void                draw(ws::ISurface *s) override;
+                virtual void                draw(ws::ISurface *s, bool force) override;
 
             public:
                 virtual status_t            on_change();
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/LedMeter.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/LedMeter.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/LedMeter.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/LedMeter.h	2025-08-26 18:15:44.093999719 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 25 сент. 2020 г.
@@ -118,7 +118,7 @@ namespace lsp
                 LSP_TK_PROPERTY(Integer,                        min_channel_width,  &sMinChannelWidth)
 
             public:
-                virtual void                draw(ws::ISurface *s) override;
+                virtual void                draw(ws::ISurface *s, bool force) override;
                 virtual status_t            add(Widget *widget) override;
                 virtual status_t            remove(Widget *child) override;
                 virtual status_t            remove_all() override;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/LedMeterChannel.h 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/LedMeterChannel.h
--- 1.2.21-5/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/LedMeterChannel.h	2025-03-01 12:42:57.404644713 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/include/lsp-plug.in/tk/widgets/specific/LedMeterChannel.h	2025-08-26 18:15:44.093999719 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 21 сент. 2020 г.
@@ -57,7 +57,6 @@ namespace lsp
                 prop::Boolean           sTextVisible;
                 prop::Boolean           sHeaderVisible;
                 prop::Boolean           sReversive;
-                prop::Boolean           sActive;
                 prop::Integer           sMinSegments;
                 prop::SizeConstraints   sConstraints;
                 prop::Font              sFont;
@@ -99,7 +98,6 @@ namespace lsp
                 prop::Boolean           sTextVisible;
                 prop::Boolean           sHeaderVisible;
                 prop::Boolean           sReversive;
-                prop::Boolean           sActive;
                 prop::Integer           sMinSegments;
                 prop::SizeConstraints   sConstraints;
                 prop::Font              sFont;
@@ -162,7 +160,6 @@ namespace lsp
                 LSP_TK_PROPERTY(Boolean,            text_visible,       &sTextVisible)
                 LSP_TK_PROPERTY(Boolean,            header_visible,     &sHeaderVisible)
                 LSP_TK_PROPERTY(Boolean,            reversive,          &sReversive)
-                LSP_TK_PROPERTY(Boolean,            active,             &sActive)
                 LSP_TK_PROPERTY(Integer,            min_segments,       &sMinSegments)
                 LSP_TK_PROPERTY(SizeConstraints,    constraints,        &sConstraints)
                 LSP_TK_PROPERTY(Font,               font,               &sFont)
@@ -171,7 +168,7 @@ namespace lsp
                 LSP_TK_PROPERTY(Pointer,            header_pointer,     &sHeaderPointer)
 
             public:
-                virtual void                draw(ws::ISurface *s) override;
+                virtual void                draw(ws::ISurface *s, bool force) override;
                 virtual status_t            on_mouse_pointer(pointer_event_t *e) override;
         };
     } /* namespace tk */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-tk-lib/make/tools.mk
--- 1.2.21-5/modules/lsp-tk-lib/make/tools.mk	2025-03-01 12:42:57.408644688 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/make/tools.mk	2025-08-26 18:15:44.097999681 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/modules.mk 1.2.23-0ubuntu1/modules/lsp-tk-lib/modules.mk
--- 1.2.21-5/modules/lsp-tk-lib/modules.mk	2025-03-01 12:42:57.408644688 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/modules.mk	2025-08-26 18:15:44.097999681 +0000
@@ -19,67 +19,82 @@
 #
 
 # Variables that describe dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := src
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := src
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
 LIBCAIRO_VERSION           := system
 LIBCAIRO_NAME              := cairo
 LIBCAIRO_TYPE              := pkg
diff -pruN 1.2.21-5/modules/lsp-tk-lib/project.mk 1.2.23-0ubuntu1/modules/lsp-tk-lib/project.mk
--- 1.2.21-5/modules/lsp-tk-lib/project.mk	2025-03-01 12:42:57.408644688 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/project.mk	2025-08-26 18:15:44.097999681 +0000
@@ -23,5 +23,5 @@ ARTIFACT_ID                 = LSP_TK_LIB
 ARTIFACT_NAME               = lsp-tk-lib
 ARTIFACT_DESC               = Graphical toolkit library for Linux Studio Plugins Project
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.27
+ARTIFACT_VERSION            = 1.0.29
 ARTIFACT_EXPORT_ALL         = 1
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/prop/enum/WindowState.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/prop/enum/WindowState.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/prop/enum/WindowState.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/prop/enum/WindowState.cpp	2025-08-26 18:15:44.101999642 +0000
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 15 мая 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/tk/tk.h>
+
+namespace lsp
+{
+    namespace tk
+    {
+        const prop::enum_t WindowState::ENUM[] =
+        {
+            { "normal",         ws::WS_NORMAL       },
+            { "minimized",      ws::WS_MINIMIZED    },
+            { "maximized",      ws::WS_MAXIMIZED    },
+            { NULL,             -1                  }
+        };
+
+    } /* namespace tk */
+} /* namespace lsp */
+
+
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/prop/flags/BorderRounding.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/prop/flags/BorderRounding.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/prop/flags/BorderRounding.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/prop/flags/BorderRounding.cpp	2025-08-26 18:15:44.101999642 +0000
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 2 апр. 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/tk/tk.h>
+
+namespace lsp
+{
+    namespace tk
+    {
+        const prop::enum_t BorderRounding::ENUM[] =
+        {
+            { "lt",             ws::CORNER_LEFT_TOP         },
+            { "rt",             ws::CORNER_RIGHT_TOP        },
+            { "lb",             ws::CORNER_LEFT_BOTTOM      },
+            { "rb",             ws::CORNER_RIGHT_BOTTOM     },
+
+            { NULL,             -1                          }
+        };
+
+    } /* namespace tk */
+} /* namespace lsp */
+
+
+
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/prop/multi/Padding.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/prop/multi/Padding.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/prop/multi/Padding.cpp	2025-03-01 12:42:57.412644665 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/prop/multi/Padding.cpp	2025-08-26 18:15:44.101999642 +0000
@@ -357,6 +357,7 @@ namespace lsp
             ssize_t hor         = (sValue.nLeft + sValue.nRight) * scale;
             ssize_t vert        = (sValue.nTop + sValue.nBottom) * scale;
             dst->nLeft          = src->nLeft;
+            dst->nTop           = src->nTop;
             dst->nHeight        = src->nHeight;
             dst->nWidth         = lsp_max(0, src->nWidth  + hor );
             dst->nHeight        = lsp_max(0, src->nHeight + vert);
@@ -368,6 +369,7 @@ namespace lsp
             ssize_t hor         = (sValue.nLeft + sValue.nRight) * scale;
             ssize_t vert        = (sValue.nTop + sValue.nBottom) * scale;
             dst->nLeft          = src->nLeft;
+            dst->nTop           = src->nTop;
             dst->nHeight        = src->nHeight;
             dst->nWidth         = lsp_max(0, src->nWidth  - hor );
             dst->nHeight        = lsp_max(0, src->nHeight - vert);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/sys/Display.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/sys/Display.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/sys/Display.cpp	2025-03-01 12:42:57.412644665 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/sys/Display.cpp	2025-08-26 18:15:44.105999603 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 19 июн. 2017 г.
@@ -469,5 +469,10 @@ namespace lsp
             return pDisplay->set_idle_interval(interval);
         }
 
+        status_t Display::get_file_descriptor(int *fd)
+        {
+            return pDisplay->get_file_descriptor(fd);
+        }
+
     } /* namespace tk */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/util/ShortcutTracker.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/util/ShortcutTracker.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/util/ShortcutTracker.cpp	2025-03-01 12:42:57.412644665 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/util/ShortcutTracker.cpp	2025-08-26 18:15:44.105999603 +0000
@@ -107,10 +107,8 @@ namespace lsp
                             if (scut == NULL)
                                 continue;
 
-                            ws::event_t xev;
-                            if (ev != NULL)
-                                xev         = *ev;
-                            res    = scut->slot()->execute(widget, (ev != NULL) ? &xev : NULL);
+                            ws::event_t xev = *ev;
+                            res    = scut->slot()->execute(widget, &xev);
                             if (res != STATUS_OK)
                                 break;
                         }
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/3d/Area3D.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/3d/Area3D.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/3d/Area3D.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/3d/Area3D.cpp	2025-08-26 18:15:44.105999603 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 9 окт. 2020 г.
@@ -257,7 +257,7 @@ namespace lsp
             return (_this != NULL) ? _this->on_draw3d(static_cast<ws::IR3DBackend *>(data)) : STATUS_BAD_ARGUMENTS;
         }
 
-        void Area3D::draw(ws::ISurface *s)
+        void Area3D::draw(ws::ISurface *s, bool force)
         {
             // Obtain a 3D backend and draw it if it is valid
             ws::IR3DBackend *r3d    = get_backend();
@@ -306,7 +306,7 @@ namespace lsp
             float scaling   = lsp_max(0.0f, sScaling.get());
             float xr        = lsp_max(0.0f, sBorderRadius.get() * scaling); // external radius
             float bw        = lsp_max(0.0f, sBorder.get() * scaling);       // border size
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
 
             // Prepare palette
             ws::ISurface *cv;
@@ -324,7 +324,7 @@ namespace lsp
                 s->fill_rect(color, SURFMASK_ALL_CORNER, xr, &sSize);
 
                 // Draw the contents
-                draw(s);
+                draw(s, force);
 
                 // Draw the glass and the border
                 color.copy(sGlassColor);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/base/Widget.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/base/Widget.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/base/Widget.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/base/Widget.cpp	2025-08-26 18:15:44.105999603 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 15 июн. 2017 г.
@@ -34,25 +34,43 @@ namespace lsp
         {
             LSP_TK_STYLE_IMPL_BEGIN(Widget, Style)
                 // Bind
+                WidgetColors *c = &vColors[WIDGET_NORMAL];
+                c->sBgColor.bind("bg.color", this);
+                c->sBrightness.bind("brightness", this);
+                c->sBgBrightness.bind("bg.brightness", this);
+
+                c = &vColors[WIDGET_INACTIVE];
+                c->sBgColor.bind("inactive.bg.color", this);
+                c->sBrightness.bind("inactive.brightness", this);
+                c->sBgBrightness.bind("inactive.bg.brightness", this);
+
+                sActive.bind("active", this);
                 sAllocation.bind("allocation", this);
                 sScaling.bind("size.scaling", this);
                 sFontScaling.bind("font.scaling", this);
-                sBrightness.bind("brightness", this);
-                sBgBrightness.bind("bg.brightness", this);
                 sPadding.bind("padding", this);
-                sBgColor.bind("bg.color", this);
+
                 sBgInherit.bind("bg.inherit", this);
                 sVisibility.bind("visible", this);
                 sPointer.bind("pointer", this);
                 sDrawMode.bind("draw.mode", this);
+
                 // Configure
+                c = &vColors[WIDGET_NORMAL];
+                c->sBrightness.set(1.0f);
+                c->sBgBrightness.set(1.0f);
+                c->sBgColor.set("#cccccc");
+
+                c = &vColors[WIDGET_INACTIVE];
+                c->sBrightness.set(1.0f);
+                c->sBgBrightness.set(1.0f);
+                c->sBgColor.set("#cccccc");
+
+                sActive.set(true);
                 sAllocation.set(true, false);
                 sScaling.set(1.0f);
                 sFontScaling.set(1.0f);
-                sBrightness.set(1.0f);
-                sBgBrightness.set(1.0f);
                 sPadding.set_all(0);
-                sBgColor.set("#cccccc");
                 sBgInherit.set(false);
                 sVisibility.set(true);
                 sPointer.set(ws::MP_DEFAULT);
@@ -61,6 +79,23 @@ namespace lsp
                 sVisibility.override();
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(Widget, "Widget", "root");
+
+            void WidgetColors::listener(tk::prop::Listener * listener)
+            {
+                sBgColor.listener(listener);
+                sBrightness.listener(listener);
+                sBgBrightness.listener(listener);
+            }
+
+            size_t WidgetColors::property_changed(tk::Property * prop) const
+            {
+                if (sBrightness.is(prop))
+                    return DRAW_DEFAULT;
+                if (prop->one_of(sBgBrightness, sBgColor))
+                    return DRAW_ALL;
+
+                return DRAW_NONE;
+            }
         }
 
         //---------------------------------------------------------------------
@@ -76,20 +111,22 @@ namespace lsp
         Widget::Widget(Display *dpy):
             sStyle(dpy->schema(), NULL, NULL),
             sProperties(this),
+            sActive(&sProperties),
             sAllocation(&sProperties),
             sScaling(&sProperties),
             sFontScaling(&sProperties),
-            sBrightness(&sProperties),
-            sBgBrightness(&sProperties),
             sPadding(&sProperties),
-            sBgColor(&sProperties),
             sVisibility(&sProperties),
             sPointer(&sProperties),
             sTag(&sProperties),
             sDrawMode(&sProperties)
         {
-            nFlags                  = REDRAW_SURFACE | SIZE_INVALID | RESIZE_PENDING;
             pClass                  = &metadata;
+
+            for (size_t i=0; i<WIDGET_TOTAL; ++i)
+                vColors[i].listener(&sProperties);
+
+            nFlags                  = REDRAW_SURFACE | SIZE_INVALID | RESIZE_PENDING;
             pDisplay                = dpy;
             pParent                 = NULL;
 
@@ -146,13 +183,21 @@ namespace lsp
             status_t res = sStyle.init();
             if (res == STATUS_OK)
             {
+                style::WidgetColors *c = &vColors[style::WIDGET_NORMAL];
+                c->sBgColor.bind("bg.color", &sStyle);
+                c->sBrightness.bind("brightness", &sStyle);
+                c->sBgBrightness.bind("bg.brightness", &sStyle);
+
+                c = &vColors[style::WIDGET_INACTIVE];
+                c->sBgColor.bind("inactive.bg.color", &sStyle);
+                c->sBrightness.bind("inactive.brightness", &sStyle);
+                c->sBgBrightness.bind("inactive.bg.brightness", &sStyle);
+
+                sActive.bind("active", &sStyle);
                 sAllocation.bind("allocation", &sStyle);
                 sScaling.bind("size.scaling", &sStyle);
                 sFontScaling.bind("font.scaling", &sStyle);
-                sBrightness.bind("brightness", &sStyle);
-                sBgBrightness.bind("bg.brightness", &sStyle);
                 sPadding.bind("padding", &sStyle);
-                sBgColor.bind("bg.color", &sStyle);
                 sBgInherit.bind("bg.inherit", &sStyle);
                 sVisibility.bind("visible", &sStyle);
                 sPointer.bind("pointer", &sStyle);
@@ -193,6 +238,9 @@ namespace lsp
             if (id >= 0) id = sSlots.add(SLOT_REALIZED, slot_realized, self());
             if (id >= 0) id = sSlots.add(SLOT_MOUSE_POINTER, slot_mouse_pointer, self());
 
+            // Set visibility flag
+            nFlags      = lsp_setflag(nFlags, VISIBLE, sVisibility.get());
+
             return (id >= 0) ? STATUS_OK : -id;
         }
 
@@ -222,22 +270,54 @@ namespace lsp
 
         void Widget::property_changed(Property *prop)
         {
+            const style::WidgetColors *colors = select_colors();
+            const size_t redraw = redraw_flags(colors->property_changed(prop));
+            if (redraw != 0)
+                query_draw(REDRAW_CHILD);
+
+            if (sActive.is(prop))
+                query_draw();
+
             if (prop->one_of(sScaling, sFontScaling, sPadding, sAllocation))
                 query_resize();
-            if (sBrightness.is(prop))
-                query_draw();
-            if (prop->one_of(sBgBrightness, sBgColor, sBgInherit))
-                query_draw(REDRAW_CHILD | REDRAW_SURFACE);
 
             if (sVisibility.is(prop))
             {
-                if (sVisibility.get())
-                    show_widget();
-                else
-                    hide_widget();
+                const bool new_visibility = sVisibility.get();
+                const bool old_visibility = nFlags & VISIBLE;
+
+                if (old_visibility != new_visibility)
+                {
+                    // Update state first
+                    nFlags      = lsp_setflag(nFlags, VISIBLE, new_visibility);
+
+                    // Launch callbacks next
+                    if (new_visibility)
+                        show_widget();
+                    else
+                        hide_widget();
+                }
             }
         }
 
+        size_t Widget::redraw_flags(size_t draw_flags)
+        {
+            size_t result = (draw_flags & DRAW_SURFACE) ? REDRAW_SURFACE : 0;
+            return lsp_setflag(result, REDRAW_CHILD, draw_flags & DRAW_CHILD);
+        }
+
+        const style::WidgetColors *Widget::select_colors() const
+        {
+            const size_t index  = (sActive.get()) ? WIDGET_0 : WIDGET_1;
+            return &vColors[index];
+        }
+
+        float Widget::select_brightness() const
+        {
+            const style::WidgetColors *colors = select_colors();
+            return colors->sBrightness.get();
+        }
+
         bool Widget::is_visible_child_of(const Widget *parent) const
         {
             if (pParent != parent)
@@ -252,14 +332,14 @@ namespace lsp
         {
             if (w == NULL)
                 return;
+            if (w->pParent != this)
+                return;
 
             Window *wnd = widget_cast<Window>(w->toplevel());
-            if (w->pParent == this)
-            {
-                w->pParent  = NULL;         // First remove parent
-                if (wnd != NULL)
-                    wnd->discard_widget(w);     // Then discard widget
-            }
+
+            w->pParent  = NULL;         // First remove parent
+            if (wnd != NULL)
+                wnd->discard_widget(w);     // Then discard widget
         }
 
         status_t Widget::slot_mouse_move(Widget *sender, void *ptr, void *data)
@@ -622,8 +702,8 @@ namespace lsp
 
             // Render to the main surface
             s->clip_begin(area);
-                s->draw(src, sSize.nLeft, sSize.nTop, 1.0f, 1.0f, 0.0f);
-            s->clip_end();
+            lsp_finally { s->clip_end(); };
+            s->draw(src, sSize.nLeft, sSize.nTop, 1.0f, 1.0f, 0.0f);
         }
 
         ws::ISurface *Widget::get_surface(ws::ISurface *s)
@@ -634,23 +714,23 @@ namespace lsp
         ws::ISurface *Widget::get_surface(ws::ISurface *s, ssize_t width, ssize_t height)
         {
             // Create new surface if needed
-            bool redraw = create_cached_surface(&pSurface, s, width, height);
+            const bool redraw = create_cached_surface(&pSurface, s, width, height);
             if (pSurface == NULL)
                 return s;
 
             // Redraw surface if required
-            if ((redraw) || (nFlags & REDRAW_SURFACE))
+            if ((redraw) || (nFlags & (REDRAW_CHILD | REDRAW_SURFACE)))
             {
                 pSurface->begin();
-                    draw(pSurface);
+                    draw(pSurface, (redraw) || (nFlags & REDRAW_SURFACE));
                 pSurface->end();
-                nFlags         &= ~REDRAW_SURFACE;
+                nFlags         &= ~(REDRAW_CHILD | REDRAW_SURFACE);
             }
 
             return pSurface;
         }
 
-        void Widget::draw(ws::ISurface *s)
+        void Widget::draw(ws::ISurface *s, bool force)
         {
         }
 
@@ -845,12 +925,17 @@ namespace lsp
 
         void Widget::get_actual_bg_color(lsp::Color *color, float brightness) const
         {
+            const style::WidgetColors *colors = select_colors();
+
+//            if (sTag.get() == 42)
+//                lsp_trace("debug");
+
             if (brightness < 0.0f)
-                brightness = sBgBrightness.get();
+                brightness = colors->sBgBrightness.get();
 
             if ((!sBgInherit.get()) || (pParent == NULL))
             {
-                color->copy(sBgColor.color());
+                color->copy(colors->sBgColor.color());
                 color->scale_lch_luminance(brightness);
                 return;
             }
@@ -858,7 +943,7 @@ namespace lsp
             WidgetContainer *pw = widget_cast<WidgetContainer>(pParent);
             if (pw == NULL)
             {
-                color->copy(sBgColor.color());
+                color->copy(colors->sBgColor.color());
                 color->scale_lch_luminance(brightness);
                 return;
             }
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/base/WidgetContainer.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/base/WidgetContainer.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/base/WidgetContainer.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/base/WidgetContainer.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -65,16 +65,17 @@ namespace lsp
 
         void WidgetContainer::get_child_bg_color(lsp::Color *color) const
         {
+            const style::WidgetColors *colors = Widget::select_colors();
             if ((!sBgInherit.get()) || (pParent == NULL))
             {
-                color->copy(sBgColor.color());
+                color->copy(colors->sBgColor.color());
                 return;
             }
 
             WidgetContainer *pw = widget_cast<WidgetContainer>(pParent);
             if (pw == NULL)
             {
-                color->copy(sBgColor.color());
+                color->copy(colors->sBgColor.color());
                 return;
             }
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/compound/ComboBox.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/compound/ComboBox.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/compound/ComboBox.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/compound/ComboBox.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -53,7 +53,6 @@ namespace lsp
                 sSpinSize.bind("spin.size", this);
                 sSpinSeparator.bind("spin.separator", this);
                 sOpened.bind("opened", this);
-                sActive.bind("active", this);
                 sTextFit.bind("text.fit", this);
                 sFont.bind("font", this);
                 sTextAdjust.bind("text.adjust", this);
@@ -84,7 +83,6 @@ namespace lsp
                 sSpinSize.set(10);
                 sSpinSeparator.set(1);
                 sOpened.set(false);
-                sActive.set(true);
                 sTextFit.set(1.0f, 1.0f);
                 sFont.set_size(12.0f);
                 sTextAdjust.set(TA_NONE);
@@ -194,7 +192,6 @@ namespace lsp
             sSpinSize(&sProperties),
             sSpinSeparator(&sProperties),
             sOpened(&sProperties),
-            sActive(&sProperties),
             sTextFit(&sProperties),
             sFont(&sProperties),
             sTextAdjust(&sProperties),
@@ -288,7 +285,6 @@ namespace lsp
             sSpinSize.bind("spin.size", &sStyle);
             sSpinSeparator.bind("spin.separator", &sStyle);
             sOpened.bind("opened", &sStyle);
-            sActive.bind("active", &sStyle);
             sTextFit.bind("text.fit", &sStyle);
             sFont.bind("font", &sStyle);
             sTextAdjust.bind("text.adjust", &sStyle);
@@ -471,14 +467,14 @@ namespace lsp
             sTArea.nTop         = r->nTop;
         }
 
-        void ComboBox::draw(ws::ISurface *s)
+        void ComboBox::draw(ws::ISurface *s, bool force)
         {
             alloc_t a;
             bool aa;
             ws::rectangle_t ta, sa, va; // text area, spin area
             float scaling       = lsp_max(0.0f, sScaling.get());
             float fscaling      = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             estimate_parameters(&a, scaling);
             const style::ComboBoxColors *colors = select_colors();
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/compound/ComboGroup.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/compound/ComboGroup.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/compound/ComboGroup.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/compound/ComboGroup.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -245,7 +245,7 @@ namespace lsp
             WidgetContainer::property_changed(prop);
 
             if (prop->one_of(sFont, sTextAdjust, sBorder, sPadding, sTextPadding, sRadius, sEmbedding, sHeading,
-                    sEmptyText, sTextRadius, sSpinSize, sSpinSpacing, sLayout, sSizeConstraints, sActive, vWidgets))
+                    sEmptyText, sTextRadius, sSpinSize, sSpinSpacing, sLayout, sSizeConstraints, sActiveGroup, vWidgets))
                 query_resize();
 
             if (prop->one_of(sColor, sTextColor))
@@ -312,8 +312,8 @@ namespace lsp
                 return;
 
             // Reset active widget if present
-            if (_this->sActive.get() == item)
-                _this->sActive.set(NULL);
+            if (_this->sActiveGroup.get() == item)
+                _this->sActiveGroup.set(NULL);
 
             _this->unlink_widget(item);
             _this->query_resize();
@@ -456,7 +456,7 @@ namespace lsp
 
         Widget *ComboGroup::current_widget()
         {
-            Widget *active  = sActive.get();
+            Widget *active  = sActiveGroup.get();
             if ((active != NULL) && (vWidgets.contains(active)))
                 return active;
 
@@ -484,7 +484,7 @@ namespace lsp
             bool has_list   = sLBox.items()->size() > 1;
             float scaling   = lsp_max(0.0f, sScaling.get());
             float fscaling  = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright    = lsp_max(0.0f, sBrightness.get());
+            float bright    = lsp_max(0.0f, select_brightness());
             ssize_t border  = (sBorder.get() > 0) ? lsp_max(1.0f, sBorder.get() * scaling) : 0;
             ssize_t radius  = lsp_max(0.0f, sRadius.get() * scaling);
             bool bg         = false;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/compound/ListBox.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/compound/ListBox.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/compound/ListBox.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/compound/ListBox.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -52,7 +52,6 @@ namespace lsp
                 sBorderRadius.bind("border.radius", this);
                 sSpacing.bind("spacing", this);
                 sMultiSelect.bind("selection.multiple", this);
-                sActive.bind("active", this);
                 sHScrollSpacing.bind("hscroll.spacing", this);
                 sVScrollSpacing.bind("vscroll.spacing", this);
 
@@ -76,7 +75,6 @@ namespace lsp
                 sBorderRadius.set(4);
                 sSpacing.set(0);
                 sMultiSelect.set(false);
-                sActive.set(true);
                 sHScrollSpacing.set(1);
                 sVScrollSpacing.set(1);
             LSP_TK_STYLE_IMPL_END
@@ -113,7 +111,6 @@ namespace lsp
             sBorderRadius(&sProperties),
             sSpacing(&sProperties),
             sMultiSelect(&sProperties),
-            sActive(&sProperties),
             sHScrollSpacing(&sProperties),
             sVScrollSpacing(&sProperties)
         {
@@ -232,7 +229,6 @@ namespace lsp
             sBorderRadius.bind("border.radius", &sStyle);
             sSpacing.bind("spacing", &sStyle);
             sMultiSelect.bind("selection.multiple", &sStyle);
-            sActive.bind("active", &sStyle);
             sHScrollSpacing.bind("hscroll.spacing", &sStyle);
             sVScrollSpacing.bind("vscroll.spacing", &sStyle);
 
@@ -946,6 +942,9 @@ namespace lsp
 
         status_t ListBox::on_mouse_out(const ws::event_t *e)
         {
+            nBMask          = 0;
+            nXFlags        &= ~(F_SUBMIT | F_CHANGED);
+
             if (pHoverItem != NULL)
             {
                 pHoverItem      = NULL;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/compound/Menu.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/compound/Menu.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/compound/Menu.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/compound/Menu.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -72,10 +72,10 @@ namespace lsp
                 sPadding.set_all(0);
                 // Override
                 sVisibility.set(false);
-                sBgColor.set("#cccccc");
+                Widget::vColors[0].sBgColor.set("#cccccc");
                 // Commit
                 sVisibility.override();
-                sBgColor.override();
+                Widget::vColors[0].sBgColor.override();
                 sIPadding.override();
                 sPadding.override();
             LSP_TK_STYLE_IMPL_END
@@ -831,12 +831,12 @@ namespace lsp
             sIStats             = st;
         }
 
-        void Menu::draw(ws::ISurface *s)
+        void Menu::draw(ws::ISurface *s, bool force)
         {
             ws::rectangle_t xr, r;
             float scaling       = lsp_max(0.0f, sScaling.get());
             float fscaling      = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             ssize_t border      = lsp_max(0, ceilf(sBorderSize.get() * scaling));
             ssize_t border_r    = lsp_max(0.0f, ceilf(scaling * sBorderRadius.get()));
             ssize_t border_w    = lsp_max(0.0f, ceilf(scaling * (sBorderSize.get() + sBorderRadius.get() * M_SQRT1_2)));
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Box.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Box.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Box.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Box.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -230,7 +230,7 @@ namespace lsp
             {
                 lsp::Color bg_color, border_color;
                 float scaling   = lsp_max(0.0f, sScaling.get());
-                float bright    = sBrightness.get();
+                float bright    = select_brightness();
                 size_t border   = (sBorder.get() > 0) ? lsp_max(1.0f, sBorder.get() * scaling) : 0;
                 get_actual_bg_color(bg_color);
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Grid.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Grid.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Grid.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Grid.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 20 июн. 2017 г.
@@ -249,50 +249,53 @@ namespace lsp
                         continue;
                     }
 
-                    // Fill unused space with background
-                    if (!force)
-                        continue;
-
-                    // Draw widget area
-                    if (Size::overlap(area, &w->a))
+                    // Fill unused space by child widget with background
+                    if ((force) || (w->pWidget->redraw_pending()))
                     {
-                        w->pWidget->get_actual_bg_color(bg_color);
-                        s->fill_frame(bg_color, SURFMASK_NONE, 0.0f, &w->a, &w->s);
+                        // Draw widget area
+                        if (Size::overlap(area, &w->a))
+                        {
+                            w->pWidget->get_actual_bg_color(bg_color);
+                            s->fill_frame(bg_color, SURFMASK_NONE, 0.0f, &w->a, &w->s);
+                        }
                     }
 
                     // Need to draw spacing?
-                    get_actual_bg_color(bg_color);
-                    if ((hspacing > 0) && ((w->nLeft + w->nCols) < sAlloc.nCols))
+                    if (force)
                     {
-                        xr.nLeft    = w->a.nLeft + w->a.nWidth;
-                        xr.nTop     = w->a.nTop;
-                        xr.nWidth   = hspacing;
-                        xr.nHeight  = w->a.nHeight;
+                        get_actual_bg_color(bg_color);
+                        if ((hspacing > 0) && ((w->nLeft + w->nCols) < sAlloc.nCols))
+                        {
+                            xr.nLeft    = w->a.nLeft + w->a.nWidth;
+                            xr.nTop     = w->a.nTop;
+                            xr.nWidth   = hspacing;
+                            xr.nHeight  = w->a.nHeight;
 
-                        if (Size::overlap(area, &xr))
-                            s->fill_rect(bg_color, SURFMASK_NONE, 0.0f, &xr);
+                            if (Size::overlap(area, &xr))
+                                s->fill_rect(bg_color, SURFMASK_NONE, 0.0f, &xr);
 
-                        if ((vspacing > 0) && ((w->nTop + w->nRows) < sAlloc.nRows))
+                            if ((vspacing > 0) && ((w->nTop + w->nRows) < sAlloc.nRows))
+                            {
+                                xr.nLeft    = w->a.nLeft;
+                                xr.nTop     = w->a.nTop + w->a.nHeight;
+                                xr.nWidth   = w->a.nWidth + hspacing;
+                                xr.nHeight  = vspacing;
+
+                                if (Size::overlap(area, &xr))
+                                    s->fill_rect(bg_color, SURFMASK_NONE, 0.0f, &xr);
+                            }
+                        }
+                        else if ((vspacing > 0) && ((w->nTop + w->nRows) < sAlloc.nRows))
                         {
                             xr.nLeft    = w->a.nLeft;
                             xr.nTop     = w->a.nTop + w->a.nHeight;
-                            xr.nWidth   = w->a.nWidth + hspacing;
+                            xr.nWidth   = w->a.nWidth;
                             xr.nHeight  = vspacing;
 
                             if (Size::overlap(area, &xr))
                                 s->fill_rect(bg_color, SURFMASK_NONE, 0.0f, &xr);
                         }
                     }
-                    else if ((vspacing > 0) && ((w->nTop + w->nRows) < sAlloc.nRows))
-                    {
-                        xr.nLeft    = w->a.nLeft;
-                        xr.nTop     = w->a.nTop + w->a.nHeight;
-                        xr.nWidth   = w->a.nWidth;
-                        xr.nHeight  = vspacing;
-
-                        if (Size::overlap(area, &xr))
-                            s->fill_rect(bg_color, SURFMASK_NONE, 0.0f, &xr);
-                    }
                 }
             } // clip_begin()
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Group.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Group.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Group.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Group.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -315,7 +315,7 @@ namespace lsp
             ws::rectangle_t xr;
             float scaling   = lsp_max(0.0f, sScaling.get());
             float fscaling  = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright    = lsp_max(0.0f, sBrightness.get());
+            float bright    = lsp_max(0.0f, select_brightness());
             ssize_t border  = (sBorder.get() > 0) ? lsp_max(1.0f, sBorder.get() * scaling) : 0;
             ssize_t radius  = lsp_max(0.0f, sRadius.get() * scaling);
             bool bg         = false;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/MultiLabel.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/MultiLabel.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/MultiLabel.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/MultiLabel.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -231,8 +231,9 @@ namespace lsp
                         l->sFont.get_multitext_parameters(s, &tp, fscaling, &text);
 
                         // Copy color preferencies
-                        color.copy((hover) ? l->sHoverColor : l->sColor);
-                        color.scale_lch_luminance(sBrightness.get());
+                        const style::LabelColors *lc = l->select_colors(sActive.get(), hover);
+                        color.copy(lc->sColor);
+                        color.scale_lch_luminance(select_brightness());
 
                         float halign    = lsp_limit(l->sTextLayout.halign() + 1.0f, 0.0f, 2.0f);
                         float valign    = lsp_limit(l->sTextLayout.valign() + 1.0f, 0.0f, 2.0f);
@@ -311,8 +312,9 @@ namespace lsp
                         }
 
                         // Copy color preferencies
-                        color.copy(l->sColor);
-                        color.scale_lch_luminance(sBrightness.get());
+                        const style::LabelColors *lc = l->select_colors(sActive.get(), hover);
+                        color.copy(lc->sColor);
+                        color.scale_lch_luminance(select_brightness());
 
                         float halign    = lsp_limit(l->sTextLayout.halign() + 1.0f, 0.0f, 2.0f);
                         float valign    = lsp_limit(l->sTextLayout.valign() + 1.0f, 0.0f, 2.0f);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Overlay.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Overlay.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Overlay.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Overlay.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -0,0 +1,562 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 28 мар. 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/tk/tk.h>
+#include <lsp-plug.in/common/debug.h>
+#include <private/tk/style/BuiltinStyle.h>
+
+namespace lsp
+{
+    namespace tk
+    {
+        namespace style
+        {
+            LSP_TK_STYLE_IMPL_BEGIN(Overlay, WidgetContainer)
+                // Bind
+                sTransparency.bind("transparency", this);
+                sPriority.bind("priority", this);
+                sLayout.bind("layout", this);
+                sPosition.bind("position", this);
+                sConstraints.bind("size.constraints", this);
+                sAutoClose.bind("close.auto", this);
+                sBorderRounding.bind("border.rounding", this);
+                sBorderRadius.bind("border.radius", this);
+                sBorderSize.bind("border.size", this);
+                sBorderColor.bind("border.color", this);
+                sShadowSize.bind("shadow.size", this);
+                sShadowStart.bind("shadow.start", this);
+                sShadowEnd.bind("shadow.end", this);
+                sShadowRounding.bind("shadow.rounding", this);
+                sShadowRadius.bind("shadow.radius", this);
+                sIPadding.bind("ipadding", this);
+
+                // Configure
+                sTransparency.set(0.25f);
+                sPriority.set(0);
+                sLayout.set(0.0f, 0.0f, 1.0f, 1.0f);
+                sPosition.set(0, 0);
+                sConstraints.set_all(-1);
+                sAutoClose.set(false);
+                sBorderRounding.set_none();
+                sBorderRadius.set(12);
+                sBorderSize.set(0);
+                sBorderColor.set_rgb24(0x000000);
+                sShadowSize.set(0);
+                sShadowStart.set_rgba32(0x00000000);
+                sShadowEnd.set_rgba32(0xff000000);
+                sIPadding.set_all(0);
+
+                // Override
+                sLayout.override();
+                sConstraints.override();
+            LSP_TK_STYLE_IMPL_END
+            LSP_TK_BUILTIN_STYLE(Overlay, "Overlay", "root");
+        }
+
+        const w_class_t Overlay::metadata         = { "Overlay", &WidgetContainer::metadata };
+
+        Overlay::Overlay(Display *dpy):
+            WidgetContainer(dpy),
+            sTransparency(&sProperties),
+            sPriority(&sProperties),
+            sLayout(&sProperties),
+            sPosition(&sProperties),
+            sConstraints(&sProperties),
+            sAutoClose(&sProperties),
+            sBorderRounding(&sProperties),
+            sBorderRadius(&sProperties),
+            sBorderSize(&sProperties),
+            sBorderColor(&sProperties),
+            sShadowSize(&sProperties),
+            sShadowStart(&sProperties),
+            sShadowEnd(&sProperties),
+            sShadowRounding(&sProperties),
+            sShadowRadius(&sProperties),
+            sIPadding(&sProperties)
+        {
+            pClass          = &metadata;
+
+            wWidget         = NULL;
+            pPosFunc        = NULL;
+            pPosData        = NULL;
+            pFilterFunc     = NULL;
+            pFilterData     = NULL;
+        }
+
+        Overlay::~Overlay()
+        {
+            nFlags     |= FINALIZED;
+            do_destroy();
+        }
+
+        status_t Overlay::init()
+        {
+            status_t result = WidgetContainer::init();
+            if (result != STATUS_OK)
+                return result;
+
+            sTransparency.bind("transparency", &sStyle);
+            sPriority.bind("priority", &sStyle);
+            sLayout.bind("layout", &sStyle);
+            sPosition.bind("position", &sStyle);
+            sConstraints.bind("size.constraints", &sStyle);
+            sAutoClose.bind("close.auto", &sStyle);
+            sBorderRounding.bind("border.rounding", &sStyle);
+            sBorderRadius.bind("border.radius", &sStyle);
+            sBorderSize.bind("border.size", &sStyle);
+            sBorderColor.bind("border.color", &sStyle);
+            sShadowSize.bind("shadow.size", &sStyle);
+            sShadowStart.bind("shadow.start", &sStyle);
+            sShadowEnd.bind("shadow.end", &sStyle);
+            sShadowRounding.bind("shadow.rounding", &sStyle);
+            sShadowRadius.bind("shadow.radius", &sStyle);
+            sIPadding.bind("ipadding", &sStyle);
+
+            return STATUS_OK;
+        }
+
+        void Overlay::destroy()
+        {
+            nFlags     |= FINALIZED;
+            do_destroy();
+            WidgetContainer::destroy();
+        }
+
+        void Overlay::do_destroy()
+        {
+            if (wWidget != NULL)
+            {
+                unlink_widget(wWidget);
+                wWidget = NULL;
+            }
+        }
+
+        Widget *Overlay::find_widget(ssize_t x, ssize_t y)
+        {
+            if ((wWidget == NULL) || (!wWidget->is_visible_child_of(this)))
+                return NULL;
+
+            return (wWidget->inside(x, y)) ? wWidget : NULL;
+        }
+
+        void Overlay::property_changed(Property *prop)
+        {
+            WidgetContainer::property_changed(prop);
+
+            if (prop->one_of(sTransparency, sPriority, sBorderColor, sShadowRounding, sShadowRadius))
+                query_draw();
+            if (prop->one_of(sLayout, sConstraints, sPosition, sBorderRadius, sBorderRounding, sBorderSize, sIPadding))
+                query_resize();
+        }
+
+        void Overlay::size_request(ws::size_limit_t *r)
+        {
+            const float scaling = lsp_max(0.0f, sScaling.get());
+            const size_t bw     = lsp_max(0.0f, sBorderSize.get() * scaling);
+
+            if ((wWidget == NULL) || (!wWidget->is_visible_child_of(this)))
+            {
+                r->nMinWidth    = -1;
+                r->nMinHeight   = -1;
+                r->nMaxWidth    = -1;
+                r->nMaxHeight   = -1;
+            }
+            else
+            {
+                wWidget->get_padded_size_limits(r);
+                r->nMaxWidth    = -1;
+                r->nMaxHeight   = -1;
+            }
+
+            sConstraints.apply(r, scaling);
+            
+            // Add border
+            r->nMinWidth    = lsp_max(r->nMinWidth, 0)  + bw * 2;
+            r->nMinHeight   = lsp_max(r->nMinHeight, 0) + bw * 2;
+
+            r->nPreWidth    = r->nMinWidth;
+            r->nPreHeight   = r->nMinHeight;
+        }
+
+        void Overlay::realize(const ws::rectangle_t *r)
+        {
+            const float scaling = lsp_max(0.0f, sScaling.get());
+            const size_t bw     = lsp_max(0.0f, sBorderSize.get() * scaling);
+
+//            lsp_trace("width=%d, height=%d", int(r->nWidth), int(r->nHeight));
+            WidgetContainer::realize(r);
+
+            if ((wWidget == NULL) || (!wWidget->is_visible_child_of(this)))
+                return;
+
+            // Realize child widget
+            ws::rectangle_t wr;
+            ws::rectangle_t xr;
+            ws::size_limit_t sr;
+
+            wr.nLeft        = r->nLeft + bw;
+            wr.nTop         = r->nTop  + bw;
+            wr.nWidth       = r->nWidth  - bw * 2;
+            wr.nHeight      = r->nHeight - bw * 2;
+
+            wWidget->get_padded_size_limits(&sr);
+            sLayout.apply(&xr, &wr, &sr);
+            wWidget->padding()->enter(&xr, wWidget->scaling()->get());
+            wWidget->realize_widget(&xr);
+        }
+
+        void Overlay::draw(ws::ISurface *s, bool force)
+        {
+            const float scaling = lsp_max(0.0f, sScaling.get());
+            const ssize_t bw    = lsp_max(0.0f, sBorderSize.get() * scaling);
+
+            // Initialize palette
+            lsp::Color bg_color;
+            get_actual_bg_color(bg_color);
+
+            // Draw background if child is invisible or not present
+            if ((wWidget == NULL) || (!wWidget->visibility()->get()))
+            {
+                if (force)
+                    s->fill_rect(bg_color, SURFMASK_NONE, 0.0f, &sSize);
+            }
+            else
+            {
+                // Set up draw translation from window coordinates to surface coordinates
+                ws::rectangle_t xr;
+                wWidget->get_rectangle(&xr);
+                const ws::point_t origin = s->set_origin(bw - xr.nLeft, bw - xr.nTop);
+                lsp_finally { s->set_origin(origin); };
+
+                // Draw the child widget
+                wWidget->render(s, &xr, force);
+                wWidget->commit_redraw();
+
+                if (force)
+                {
+                    // Draw rectangle around widget
+                    ws::rectangle_t sr  = sSize;
+                    sr.nLeft           -= xr.nLeft;
+                    sr.nTop            -= xr.nTop;
+
+                    wWidget->get_actual_bg_color(bg_color);
+                    s->fill_frame(bg_color, SURFMASK_NONE, 0.0f, &sSize, &xr);
+                }
+            }
+
+            // Draw border
+            if (bw > 0)
+            {
+                ws::rectangle_t br;
+                const size_t flags  = sBorderRounding.corners();
+                const size_t radius = lsp_max(0.0f, sBorderRadius.get() * scaling);
+                lsp::Color bcolor(sBorderColor);
+
+                br.nLeft        = 0;
+                br.nTop         = 0;
+                br.nWidth       = sSize.nWidth;
+                br.nHeight      = sSize.nHeight;
+
+                s->wire_rect(bcolor, flags, radius, &br, bw);
+            }
+        }
+
+        void Overlay::draw_shadow_ring(
+            ws::ISurface *s,
+            float xc1, float yc1,
+            float x1, float y1,
+            float xc2, float yc2,
+            float x2, float y2,
+            float angle)
+        {
+            float vx1           = x1 - xc1;
+            float vy1           = y1 - yc1;
+            float vx2           = x2 - xc2;
+            float vy2           = y2 - yc2;
+            const float r1      = sqrtf(vx1*vx1 + vy1*vy1);
+            const float r2      = sqrtf(vx2*vx2 + vy2*vy2);
+            const float r       = lsp_max(r1, r2);
+
+            const size_t count  = lsp_max(fabsf(r * angle * 0.5f), 2.0f);
+            const float phi     = angle / float(count);
+
+            const float dx      = cosf(phi);
+            const float dy      = sinf(phi);
+
+            for (size_t i=0; i < count; ++i)
+            {
+                float nvx1          = vx1*dx - vy1*dy;
+                float nvy1          = vx1*dy + vy1*dx;
+                float nvx2          = vx2*dx - vy2*dy;
+                float nvy2          = vx2*dy + vy2*dx;
+                vx1                 = nvx1;
+                vy1                 = nvy1;
+                vx2                 = nvx2;
+                vy2                 = nvy2;
+
+                const float x3      = xc1 + vx1;
+                const float y3      = yc1 + vy1;
+                const float x4      = xc2 + vx2;
+                const float y4      = yc2 + vy2;
+
+                // Fill main part
+                ws::IGradient *g    = s->linear_gradient(x1, y1, x2, y2);
+                if (g == NULL)
+                    return;
+                lsp_finally { delete g; };
+
+                // Prepare colors
+                g->set_start(sShadowStart);
+//                g->set_stop(sShadowStart);
+                g->set_stop(sShadowEnd, 1.0f);
+
+                s->fill_triangle(g, x1, y1, x2, y2, x4, y4);
+                s->fill_triangle(g, x1, y1, x4, y4, x3, y3);
+
+                x1                  = x3;
+                y1                  = y3;
+                x2                  = x4;
+                y2                  = y4;
+            }
+        }
+
+        void Overlay::draw_shadow_segment(
+            ws::ISurface *s,
+            float x1, float y1,
+            float x2, float y2,
+            float bradius_start, float bradius_end,
+            float sradius_start, float sradius_end,
+            float width)
+        {
+            // Compute direction
+            const float pdx     = (x2 - x1);
+            const float pdy     = (y2 - y1);
+            const float dw      = sqrtf(pdx*pdx + pdy*pdy);
+            if (dw <= 0.05f)
+                return;
+            const float rdw     = 1.0f / dw;
+
+            const float ndx     = pdx * rdw;
+            const float ndy     = pdy * rdw;
+            const float dx      = ndx * width;
+            const float dy      = ndy * width;
+
+            [[maybe_unused]] const float bdx_start   = bradius_start * ndx;
+            [[maybe_unused]] const float bdy_start   = bradius_start * ndy;
+            [[maybe_unused]] const float bdx_end     = bradius_end * ndx;
+            [[maybe_unused]] const float bdy_end     = bradius_end * ndy;
+
+            [[maybe_unused]] const float sdx_start   = sradius_start * ndx;
+            [[maybe_unused]] const float sdy_start   = sradius_start * ndy;
+            [[maybe_unused]] const float sdx_end     = sradius_end * ndx;
+            [[maybe_unused]] const float sdy_end     = sradius_end * ndy;
+
+            // Draw start segment
+            [[maybe_unused]] float x0, y0, x3, y3;
+            [[maybe_unused]] float cx0, cy0, cx1, cy1;
+
+            x0      = x1 + dy - dx;
+            y0      = y1 - dx - dy;
+
+            if ((bradius_start >= 1.0f) || (sradius_start >= 1.0f))
+            {
+                x0     += sdx_start;
+                y0     += sdy_start;
+                x1     += bdx_start;
+                y1     += bdy_start;
+
+                cx0     = x0 - sdy_start;
+                cy0     = y0 + sdx_start;
+                cx1     = x1 - bdy_start;
+                cy1     = y1 + bdx_start;
+
+                draw_shadow_ring(
+                    s,
+                    cx1, cy1, x1, y1,
+                    cx0, cy0, x0, y0,
+                    -0.25f * M_PI);
+            }
+
+            x3      = x2 + dy + dx;
+            y3      = y2 - dx + dy;
+
+            if ((bradius_end >= 1.0f) || (sradius_end >= 1.0f))
+            {
+                x2     -= bdx_end;
+                y2     -= bdy_end;
+                x3     -= sdx_end;
+                y3     -= sdy_end;
+
+                cx0     = x2 - bdy_end;
+                cy0     = y2 + bdx_end;
+                cx1     = x3 - sdy_end;
+                cy1     = y3 + sdx_end;
+
+                draw_shadow_ring(
+                    s,
+                    cx0, cy0, x2, y2,
+                    cx1, cy1, x3, y3,
+                    0.25f * M_PI);
+            }
+
+            // Fill main part
+            ws::IGradient *g    = s->linear_gradient(x1, y1, x1 + dy, y1 - dx);
+            if (g != NULL)
+            {
+                lsp_finally { delete g; };
+
+                // Prepare colors
+                g->set_start(sShadowStart);
+//                g->set_stop(sShadowStart);
+                g->set_stop(sShadowEnd, 1.0f);
+
+                s->fill_triangle(g, x1, y1, x0, y0, x3, y3);
+                s->fill_triangle(g, x1, y1, x3, y3, x2, y2);
+            }
+        }
+
+        void Overlay::draw_shadow(ws::ISurface *s)
+        {
+            // Check that we need to draw shadow
+            const float scaling     = lsp_max(0.0f, sScaling.get());
+            const size_t shsize     = lsp_max(0.0f, sShadowSize.get() * scaling);
+            if (shsize < 1)
+                return;
+
+            // Compute shadow parameters
+            const size_t bround     = sBorderRounding.corners();
+            const size_t sround     = sShadowRounding.corners();
+            const size_t bsize      = lsp_max(0, sBorderSize.get());
+            const size_t bradius    = lsp_max(0.0f, sBorderRadius.get() * scaling) + bsize;
+            const size_t sradius    = lsp_max(0.0f, sShadowRadius.get() * scaling);
+            const size_t xradius    = bradius + shsize;
+
+            const float xb          = sSize.nLeft;
+            const float xe          = sSize.nLeft + sSize.nWidth;
+            const float yb          = sSize.nTop;
+            const float ye          = sSize.nTop + sSize.nHeight;
+
+            const float bradius_lt  = (bround & ws::CORNER_LEFT_TOP)        ? bradius : 0.0f;
+            const float bradius_rt  = (bround & ws::CORNER_RIGHT_TOP)       ? bradius : 0.0f;
+            const float bradius_lb  = (bround & ws::CORNER_LEFT_BOTTOM)     ? bradius : 0.0f;
+            const float bradius_rb  = (bround & ws::CORNER_RIGHT_BOTTOM)    ? bradius : 0.0f;
+
+            const float sradius_lt  =
+                (bround & ws::CORNER_LEFT_TOP) ? xradius :
+                (sround & ws::CORNER_LEFT_TOP) ? sradius : 0.0f;
+            const float sradius_rt  =
+                (bround & ws::CORNER_RIGHT_TOP) ? xradius :
+                (sround & ws::CORNER_RIGHT_TOP) ? sradius : 0.0f;
+            const float sradius_lb  =
+                (bround & ws::CORNER_LEFT_BOTTOM) ? xradius :
+                (sround & ws::CORNER_LEFT_BOTTOM) ? sradius : 0.0f;
+            const float sradius_rb  =
+                (bround & ws::CORNER_RIGHT_BOTTOM) ? xradius :
+                (sround & ws::CORNER_RIGHT_BOTTOM) ? sradius : 0.0f;
+
+            draw_shadow_segment(
+                s, xb, yb, xe, yb,
+                bradius_lt, bradius_rt,
+                sradius_lt, sradius_rt,
+                shsize);
+            draw_shadow_segment(
+                s, xe, yb, xe, ye,
+                bradius_rt, bradius_rb,
+                sradius_rt, sradius_rb,
+                shsize);
+            draw_shadow_segment(
+                s, xe, ye, xb, ye,
+                bradius_rb, bradius_lb,
+                sradius_rb, sradius_lb,
+                shsize);
+            draw_shadow_segment(
+                s, xb, ye, xb, yb,
+                bradius_lb, bradius_lt,
+                sradius_lb, sradius_lt,
+                shsize);
+        }
+
+        status_t Overlay::add(Widget *widget)
+        {
+            if ((widget == NULL) || (widget == this))
+                return STATUS_BAD_ARGUMENTS;
+            if (wWidget != NULL)
+                return STATUS_ALREADY_EXISTS;
+
+            widget->set_parent(this);
+            wWidget = widget;
+            query_resize();
+            return STATUS_OK;
+        }
+
+        status_t Overlay::remove(Widget *widget)
+        {
+            if (wWidget != widget)
+                return STATUS_NOT_FOUND;
+
+            unlink_widget(wWidget);
+            wWidget  = NULL;
+            query_resize();
+
+            return STATUS_OK;
+        }
+
+        void Overlay::set_position_function(overlay_position_t func, void *data)
+        {
+            pPosFunc        = func;
+            pPosData        = data;
+
+            query_resize();
+        }
+
+        void Overlay::set_filter_function(overlay_filter_t func, void *data)
+        {
+            pFilterFunc     = func;
+            pFilterData     = data;
+        }
+
+        bool Overlay::calculate_position(ws::rectangle_t *rect)
+        {
+            if (rect == NULL)
+                return false;
+
+            if (pPosFunc != NULL)
+                return pPosFunc(rect, this, pPosData);
+
+            sPosition.get(&rect->nLeft, &rect->nTop);
+            return true;
+        }
+
+        bool Overlay::filter_event(const ws::event_t *ev)
+        {
+            if (ev == NULL)
+                return false;
+            if (!sAutoClose.get())
+                return false;
+
+            return (pFilterFunc != NULL) ? pFilterFunc(ev, this, pFilterData) : false;
+        }
+
+    } /* namespace tk */
+} /* namespace lsp */
+
+
+
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Tab.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Tab.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Tab.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Tab.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -77,7 +77,6 @@ namespace lsp
                 sFont.bind("font", this);
                 sBorderSize.bind("border.size", this);
                 sBorderRadius.bind("border.radius", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[style::TAB_NORMAL];
@@ -127,7 +126,6 @@ namespace lsp
                 sFont.set_size(12.0f);
                 sBorderSize.set(1);
                 sBorderRadius.set(4);
-                sActive.set(true);
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(Tab, "Tab", "root");
 
@@ -157,8 +155,7 @@ namespace lsp
             sTextPadding(&sProperties),
             sFont(&sProperties),
             sBorderSize(&sProperties),
-            sBorderRadius(&sProperties),
-            sActive(&sProperties)
+            sBorderRadius(&sProperties)
         {
             pClass      = &metadata;
 
@@ -244,7 +241,6 @@ namespace lsp
             sFont.bind("font", &sStyle);
             sBorderSize.bind("border.size", &sStyle);
             sBorderRadius.bind("border.radius", &sStyle);
-            sActive.bind("active", &sStyle);
 
             return STATUS_OK;
         }
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/TabControl.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/TabControl.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/TabControl.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/TabControl.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -179,7 +179,7 @@ namespace lsp
             // Bind slots
             handler_id_t id;
             id = sSlots.add(SLOT_CHANGE, slot_on_change, self());
-            if (id >= 0) id = sSlots.add(SLOT_SUBMIT, slot_on_change, self());
+            if (id >= 0) id = sSlots.add(SLOT_SUBMIT, slot_on_submit, self());
             if (id < 0)
                 return -id;
 
@@ -477,7 +477,7 @@ namespace lsp
             ssize_t border          = (sBorderSize.get() > 0) ? lsp_max(1.0f, sBorderSize.get() * scaling) : 0;
             ssize_t radius          = lsp_max(0.0f, sBorderRadius.get() * scaling);
             ssize_t xborder         = lsp_max(0.0f, (radius-border) * M_SQRT1_2);
-            float bright            = lsp_max(0.0f, sBrightness.get());
+            float bright            = lsp_max(0.0f, select_brightness());
             bool top_align          = sHeading.valign() <= 0.0f;
             bool bg                 = false;
             tk::Tab *ct             = current_tab();
@@ -633,7 +633,7 @@ namespace lsp
             lsp::Color color;
             ws::rectangle_t clip, r;
 
-            float bright            = lsp_max(0.0f, sBrightness.get());
+            float bright            = lsp_max(0.0f, select_brightness());
             float scaling           = lsp_max(0.0f, sScaling.get());
             ssize_t border          = (sBorderSize.get() > 0) ? lsp_max(1.0f, sBorderSize.get() * scaling) : 0;
             size_t tab_radius       = (w->border_radius()->get() > 0) ? lsp_max(1.0f, w->border_radius()->get() * scaling) : 0;
@@ -748,7 +748,7 @@ namespace lsp
 
                 // Initialize palette
                 color.copy(colors->sTextColor);
-                color.scale_lch_luminance(sBrightness.get());
+                color.scale_lch_luminance(select_brightness());
 
                 // Draw background
                 float halign    = lsp_limit(w->text_layout()->halign() + 1.0f, 0.0f, 2.0f);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/TabGroup.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/TabGroup.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/TabGroup.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/TabGroup.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -62,7 +62,7 @@ namespace lsp
             vItems(&sProperties, &sIListener),
             sSelected(&sProperties),
             vWidgets(&sProperties, &sIListener),
-            sActive(&sProperties)
+            sActiveTab(&sProperties)
         {
             sArea.nLeft         = 0;
             sArea.nTop          = 0;
@@ -173,7 +173,7 @@ namespace lsp
                 query_resize();
             if (prop->one_of(sTabJoint, sHeadingFill, sHeadingSpacingFill))
                 query_draw();
-            if (prop->one_of(vWidgets, vItems, sActive, sSelected))
+            if (prop->one_of(vWidgets, vItems, sActiveTab, sSelected))
                 query_resize();
         }
 
@@ -410,7 +410,7 @@ namespace lsp
             ssize_t border          = (sBorderSize.get() > 0) ? lsp_max(1.0f, sBorderSize.get() * scaling) : 0;
             ssize_t radius          = lsp_max(0.0f, sBorderRadius.get() * scaling);
             ssize_t xborder         = lsp_max(0.0f, (radius-border) * M_SQRT1_2);
-            float bright            = lsp_max(0.0f, sBrightness.get());
+            float bright            = lsp_max(0.0f, select_brightness());
             bool top_align          = sHeading.valign() <= 0.0f;
             bool bg                 = false;
 
@@ -567,7 +567,7 @@ namespace lsp
             lsp::Color color;
             ws::rectangle_t clip, r;
 
-            float bright            = lsp_max(0.0f, sBrightness.get());
+            float bright            = lsp_max(0.0f, select_brightness());
             float scaling           = lsp_max(0.0f, sScaling.get());
             ssize_t border          = (sBorderSize.get() > 0) ? lsp_max(1.0f, sBorderSize.get() * scaling) : 0;
             size_t tab_radius       = (w->border_radius()->get() > 0) ? lsp_max(1.0f, w->border_radius()->get() * scaling) : 0;
@@ -681,7 +681,7 @@ namespace lsp
 
                 // Initialize palette
                 color.copy(colors->sTextColor);
-                color.scale_lch_luminance(sBrightness.get());
+                color.scale_lch_luminance(select_brightness());
 
                 // Draw background
                 float halign    = lsp_limit(w->text_layout()->halign() + 1.0f, 0.0f, 2.0f);
@@ -784,7 +784,7 @@ namespace lsp
 
         tk::Widget *TabGroup::current_widget()
         {
-            tk::Widget *active  = sActive.get();
+            tk::Widget *active  = sActiveTab.get();
             if ((active != NULL) && (vWidgets.contains(active)))
                 return active;
 
@@ -1033,8 +1033,8 @@ namespace lsp
             // Reset active widget if present
             if (self->sSelected.get() == item)
                 self->sSelected.set(NULL);
-            if (self->sActive.get() == item)
-                self->sActive.set(NULL);
+            if (self->sActiveTab.get() == item)
+                self->sActiveTab.set(NULL);
             if (self->pEventTab == item)
                 self->pEventTab       = NULL;
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Window.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Window.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/containers/Window.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/containers/Window.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 16 июн. 2017 г.
@@ -38,6 +38,7 @@ namespace lsp
                 sBorderSize.bind("border.size", this);
                 sBorderRadius.bind("border.radius", this);
                 sActions.bind("actions", this);
+                sWindowState.bind("state", this);
                 sPosition.bind("position", this);
                 sWindowSize.bind("size", this);
                 sConstraints.bind("size.constraints", this);
@@ -49,6 +50,7 @@ namespace lsp
                 sBorderSize.set(0);
                 sBorderRadius.set(2);
                 sActions.set_actions(ws::WA_ALL);
+                sWindowState.set_normal();
                 sPosition.set(0, 0);
                 sWindowSize.set(160, 100);
                 sConstraints.set(-1, -1, -1, -1);
@@ -75,11 +77,13 @@ namespace lsp
             sBorderSize(&sProperties),
             sBorderRadius(&sProperties),
             sActions(&sProperties),
+            sWindowState(&sProperties),
             sPosition(&sProperties),
             sWindowSize(&sProperties),
             sSizeConstraints(&sProperties),
             sLayout(&sProperties),
-            sPolicy(&sProperties)
+            sPolicy(&sProperties),
+            vOverlays(&sProperties, &sIListener)
         {
             lsp_trace("native_handle = %p", handle);
 
@@ -89,6 +93,7 @@ namespace lsp
             pNativeHandle   = handle;
             bMapped         = false;
             bOverridePointer= false;
+            enSurfaceType   = ws::ST_UNKNOWN;
             fScaling        = 1.0f;
             pActor          = NULL;
 
@@ -116,6 +121,9 @@ namespace lsp
             if ((result = WidgetContainer::init()) != STATUS_OK)
                 return result;
 
+            // Init listener
+            sIListener.bind_all(this, on_add_item, on_remove_item);
+
             // Initialize display
             ws::IDisplay *dpy   = pDisplay->display();
             if (dpy == NULL)
@@ -141,6 +149,7 @@ namespace lsp
             sBorderSize.bind("border.size", &sStyle);
             sBorderRadius.bind("border.radius", &sStyle);
             sActions.bind("actions", &sStyle);
+            sWindowState.bind("state", &sStyle);
             sPosition.bind("position", &sStyle);
             sWindowSize.bind("size", &sStyle);
             sSizeConstraints.bind("size.constraints", &sStyle);
@@ -153,8 +162,9 @@ namespace lsp
             // Add slot(s)
             handler_id_t id = 0;
             id = sSlots.add(SLOT_CLOSE, slot_window_close, self());
-            if (id < 0)
-                return - id;
+            if (id < 0) return -id;
+            id = sSlots.add(SLOT_STATE, slot_window_state, self());
+            if (id < 0) return -id;
 
             // Set self event handler
             if (pWindow != NULL)
@@ -244,6 +254,7 @@ namespace lsp
 //            lsp_trace("size constraints: w={%d, %d}, h={%d, %d}",
 //                int(sr.nMinWidth), int(sr.nMinHeight), int(sr.nMaxWidth), int(sr.nMaxHeight)
 //            );
+//            lsp_trace("computed size: w=%d, h=%d", int(r.nWidth), int(r.nHeight));
             pWindow->set_size_constraints(&sr);
             if ((sSize.nWidth != r.nWidth) || (sSize.nHeight != r.nHeight))
             {
@@ -262,12 +273,29 @@ namespace lsp
             hMouse.pWidget      = NULL;
             hKeys.pWidget       = NULL;
 
+            // Clear list of visible overlays values
+            vDrawOverlays.flush();
+
+            // Unlink overlays
+            for (size_t i=0, n=vOverlays.size(); i<n; ++i)
+            {
+                // Get widget
+                Widget *w = vOverlays.get(i);
+                if (w != NULL)
+                    unlink_widget(w);
+            }
+
+            // Free list of overlays
+            vOverlays.flush();
+
+            // Cleanup child widget
             if (pChild != NULL)
             {
                 unlink_widget(pChild);
                 pChild = NULL;
             }
 
+            // Destroy window
             if (pWindow != NULL)
             {
                 pWindow->destroy();
@@ -301,6 +329,44 @@ namespace lsp
             return (_this != NULL) ? _this->on_close(static_cast<ws::event_t *>(data)) : STATUS_BAD_ARGUMENTS;
         }
 
+        status_t Window::slot_window_state(Widget *sender, void *ptr, void *data)
+        {
+            if ((ptr == NULL) || (data == NULL))
+                return STATUS_BAD_ARGUMENTS;
+
+            Window *_this   = widget_ptrcast<Window>(ptr);
+            return (_this != NULL) ? _this->on_window_state(static_cast<ws::event_t *>(data)) : STATUS_BAD_ARGUMENTS;
+        }
+
+        void Window::on_add_item(void *obj, Property *prop, void *w)
+        {
+            Widget *widget = widget_ptrcast<Widget>(w);
+            if (widget == NULL)
+                return;
+
+            Window *self = widget_ptrcast<Window>(obj);
+            if (self == NULL)
+                return;
+
+            widget->set_parent(self);
+            self->query_resize();
+        }
+
+        void Window::on_remove_item(void *obj, Property *prop, void *w)
+        {
+            Widget *widget = widget_ptrcast<Widget>(w);
+            if (widget == NULL)
+                return;
+
+            Window *self = widget_ptrcast<Window>(obj);
+            if (self == NULL)
+                return;
+
+            self->vDrawOverlays.flush();
+            self->unlink_widget(widget);
+            self->query_resize();
+        }
+
         status_t Window::do_render()
         {
             if ((pWindow == NULL) || (!bMapped))
@@ -309,6 +375,8 @@ namespace lsp
             if (resize_pending())
                 sync_size(false);
 
+            update_pointer();
+
             if (!redraw_pending())
                 return STATUS_OK;
 
@@ -317,22 +385,18 @@ namespace lsp
             if (s == NULL)
                 return STATUS_OK;
 
-            size_t flags = nFlags;
+            enSurfaceType   = s->type();
 
 //        #ifdef LSP_TRACE
 //            system::time_millis_t time = system::get_time_millis();
 //        #endif /* LSP_TRACE */
+            ws::rectangle_t xr;
+            xr.nLeft        = 0;
+            xr.nTop         = 0;
+            xr.nWidth       = sSize.nWidth;
+            xr.nHeight      = sSize.nHeight;
 
-            s->begin();
-            {
-                ws::rectangle_t xr;
-                xr.nLeft    = 0;
-                xr.nTop     = 0;
-                xr.nWidth   = sSize.nWidth;
-                xr.nHeight  = sSize.nHeight;
-                render(s, &xr, flags & REDRAW_SURFACE);
-            }
-            s->end();
+            render(s, &xr, nFlags & REDRAW_SURFACE);
             commit_redraw();
 
 //        #ifdef LSP_TRACE
@@ -340,12 +404,73 @@ namespace lsp
 //            lsp_trace("Window %p render time: %ld ms", this, long(time));
 //        #endif /* LSP_TRACE */
 
-            // And also update pointer
-            update_pointer();
-
             return STATUS_OK;
         }
 
+        void Window::render(ws::ISurface *s, const ws::rectangle_t *area, bool force)
+        {
+            s->begin();
+            lsp_finally { s->end(); };
+
+            // Draw main contents
+            ws::ISurface *bs = get_surface(s);
+            if (bs != NULL)
+                s->draw(bs, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
+
+            // Draw overlay shadows
+            size_t overlays = 0;
+
+            for (size_t i=0, n=vDrawOverlays.size(); i<n; ++i)
+            {
+                // Get overlay widget
+                overlay_t *ovd = vDrawOverlays.get(i);
+                if (ovd == NULL)
+                    continue;
+                Overlay *ov = ovd->wWidget;
+                if (ov == NULL)
+                    continue;
+
+                // Draw shadow
+                ov->draw_shadow(s);
+                ++overlays;
+            }
+
+            if (overlays <= 0)
+                return;
+
+            // Draw overlays
+            for (size_t i=0, n=vDrawOverlays.size(); i<n; ++i)
+            {
+                // Get overlay widget
+                overlay_t *ovd = vDrawOverlays.get(i);
+                if (ovd == NULL)
+                    continue;
+                Overlay *ov = ovd->wWidget;
+                if (ov == NULL)
+                    continue;
+
+                // Get surface of the overlay widget
+                ws::ISurface *ovs = ov->get_surface(s);
+                if (ovs == NULL)
+                    continue;
+
+                // Draw the overlay with alpha blending applied
+                const size_t bround = ov->border_rounding()->corners();
+                const float alpha = ov->transparency()->get();
+                if (bround != 0)
+                {
+                    const float scaling = lsp_max(0.0f, ov->scaling()->get());
+                    const size_t radius = lsp_max(0.0f, ov->border_radius()->get() * scaling);
+                    s->fill_rect(ovs, alpha, bround, radius, &ovd->sArea);
+                }
+                else
+                    s->draw(ovs, ovd->sArea.nLeft, ovd->sArea.nTop, 1.0f, 1.0f, alpha);
+
+                // Commit pending redraw of the overlay
+                ov->commit_redraw();
+            }
+        }
+
         status_t Window::get_screen_rectangle(ws::rectangle_t *r)
         {
             if (pWindow == NULL)
@@ -397,11 +522,8 @@ namespace lsp
             return res;
         }
 
-        void Window::render(ws::ISurface *s, const ws::rectangle_t *area, bool force)
+        void Window::draw(ws::ISurface *s, bool force)
         {
-            if (!bMapped)
-                return;
-
             lsp::Color bg_color;
             get_actual_bg_color(bg_color);
 
@@ -411,51 +533,58 @@ namespace lsp
                 return;
             }
 
-            if ((force) || (pChild->redraw_pending()))
-            {
-                // Draw the child only if it is visible in the area
-                ws::rectangle_t xr;
-                pChild->get_padded_rectangle(&xr);
-                if (Size::intersection(&xr, area))
-                    pChild->render(s, &xr, force);
-
-                pChild->commit_redraw();
-            }
+            if (pChild->redraw_pending())
+                force = true;
 
-            if (force)
-            {
-                ws::rectangle_t pr, cr;
-                pChild->get_padded_rectangle(&pr);
-                pChild->get_rectangle(&cr);
+            if (!force)
+                return;
 
-                s->fill_frame(
-                    bg_color, SURFMASK_NONE, 0.0f,
-                    0, 0, sSize.nWidth, sSize.nHeight,
-                    pr.nLeft, pr.nTop, pr.nWidth, pr.nHeight
+            // Draw the child only if it is visible in the area
+            ws::rectangle_t area, xr;
+            area.nLeft      = 0;
+            area.nTop       = 0;
+            area.nWidth     = sSize.nWidth;
+            area.nHeight    = sSize.nHeight;
+
+            pChild->get_padded_rectangle(&xr);
+            if (Size::intersection(&xr, &area))
+                pChild->render(s, &xr, force);
+
+            pChild->commit_redraw();
+
+            // Draw surrounding rectangle
+            ws::rectangle_t pr, cr;
+            pChild->get_padded_rectangle(&pr);
+            pChild->get_rectangle(&cr);
+
+            s->fill_frame(
+                bg_color, SURFMASK_NONE, 0.0f,
+                0, 0, sSize.nWidth, sSize.nHeight,
+                pr.nLeft, pr.nTop, pr.nWidth, pr.nHeight
+            );
+
+            pChild->get_actual_bg_color(bg_color);
+            s->fill_frame(bg_color, SURFMASK_NONE, 0.0f, &pr, &cr);
+
+            // Draw border
+            const float scaling   = sScaling.get();
+            const float border    = sBorderSize.get() * scaling;
+
+            if (border > 0)
+            {
+                float radius = sBorderRadius.get() * scaling;
+                bool aa = s->set_antialiasing(true);
+                float bw = border * 0.5f;
+
+                lsp::Color bc(sBorderColor);
+                bc.scale_lch_luminance(select_brightness());
+
+                s->wire_rect(
+                    bc, SURFMASK_ALL_CORNER, radius,
+                    bw, bw, sSize.nWidth, sSize.nHeight,
+                    border
                 );
-
-                pChild->get_actual_bg_color(bg_color);
-                s->fill_frame(bg_color, SURFMASK_NONE, 0.0f, &pr, &cr);
-
-                float scaling   = sScaling.get();
-                float border    = sBorderSize.get() * scaling;
-
-                if (border > 0)
-                {
-                    float radius = sBorderRadius.get() * scaling;
-                    bool aa = s->set_antialiasing(true);
-                    float bw = border * 0.5f;
-
-                    lsp::Color bc(sBorderColor);
-                    bc.scale_lch_luminance(sBrightness.get());
-
-                    s->wire_rect(
-                        bc, SURFMASK_ALL_CORNER, radius,
-                        bw, bw, sSize.nWidth, sSize.nHeight,
-                        border
-                    );
-                    s->set_antialiasing(aa);
-                }
+                s->set_antialiasing(aa);
             }
         }
 
@@ -510,24 +639,21 @@ namespace lsp
                     return;
                 pWindow->set_role(text.get_utf8());
             }
-            if (sPadding.is(prop))
-                query_resize();
-            if (sBorderColor.is(prop))
+            if (prop->one_of(sBorderColor))
                 query_draw();
-            if (sBorderSize.is(prop))
+            if (prop->one_of(sPadding, sBorderSize, sBorderRadius, vOverlays))
                 query_resize();
-            if (sBorderRadius.is(prop))
-                query_resize();
-
 
             if (sBorderStyle.is(prop))
                 pWindow->set_border_style(sBorderStyle.get());
             if (sActions.is(prop))
                 pWindow->set_window_actions(sActions.actions());
+            if (sWindowState.is(prop))
+                pWindow->set_window_state(sWindowState.get());
             if (sPosition.is(prop))
                 pWindow->move(sPosition.left(), sPosition.top());
 
-            if (prop->one_of(sSizeConstraints, sScaling, sActions, sFontScaling, sWindowSize))
+            if (prop->one_of(sSizeConstraints, sScaling, sActions, sWindowState, sFontScaling, sWindowSize))
             {
 //                float scaling = lsp_max(0.0f, sScaling.get());
 //
@@ -576,8 +702,12 @@ namespace lsp
         void Window::hide_widget()
         {
             if (pWindow != NULL)
+            {
+                pWindow->ungrab_events();
                 pWindow->hide();
+            }
 
+            discard_widget(pFocused);
             WidgetContainer::hide_widget();
         }
 
@@ -600,43 +730,43 @@ namespace lsp
                 return;
 
             // There is no actor - simple show
+            const bool is_dialog    = sBorderStyle.get() == ws::BS_DIALOG;
             if (wnd == NULL)
             {
                 pWindow->show();
+                if (is_dialog)
+                    pWindow->take_focus();
                 return;
             }
 
             // Correct window location
-            switch (sBorderStyle.get())
+            if (is_dialog)
             {
-                case ws::BS_DIALOG:
-                {
-                    ws::rectangle_t r, rw;
-                    r.nLeft         = 0;
-                    r.nTop          = 0;
-                    r.nWidth        = 0;
-                    r.nHeight       = 0;
-
-                    rw.nLeft        = 0;
-                    rw.nTop         = 0;
-                    rw.nWidth       = 0;
-                    rw.nHeight      = 0;
+                ws::rectangle_t r, rw;
+                r.nLeft         = 0;
+                r.nTop          = 0;
+                r.nWidth        = 0;
+                r.nHeight       = 0;
+
+                rw.nLeft        = 0;
+                rw.nTop         = 0;
+                rw.nWidth       = 0;
+                rw.nHeight      = 0;
 
-                    wnd->get_absolute_geometry(&r);
-                    pWindow->get_geometry(&rw);
+                wnd->get_absolute_geometry(&r);
+                pWindow->get_geometry(&rw);
 
-                    ssize_t left    = r.nLeft + ((r.nWidth - rw.nWidth) / 2);
-                    ssize_t top     = r.nTop  + ((r.nHeight - rw.nHeight) / 2);
+                ssize_t left    = r.nLeft + ((r.nWidth - rw.nWidth) / 2);
+                ssize_t top     = r.nTop  + ((r.nHeight - rw.nHeight) / 2);
 
-                    sPosition.set(left, top);
-                    break;
-                }
-                default:
-                    break;
+                sPosition.set(left, top);
             }
 
             // Show over the actor window
+            sync_size(false);
             pWindow->show(wnd);
+            if (is_dialog)
+                pWindow->take_focus();
         }
 
         void Window::show()
@@ -668,11 +798,24 @@ namespace lsp
 
         status_t Window::add(Widget *widget)
         {
-            if (pChild != NULL)
-                return STATUS_ALREADY_EXISTS;
+            Overlay *ov = tk::widget_cast<Overlay>(widget);
+            if (ov != NULL)
+            {
+                if (vOverlays.contains(ov))
+                    return STATUS_ALREADY_EXISTS;
+
+                status_t res = vOverlays.add(ov);
+                if (res != STATUS_OK)
+                    return res;
+            }
+            else
+            {
+                if (pChild != NULL)
+                    return STATUS_ALREADY_EXISTS;
 
-            widget->set_parent(this);
-            pChild = widget;
+                widget->set_parent(this);
+                pChild = widget;
+            }
 
             query_resize();
 
@@ -681,17 +824,29 @@ namespace lsp
 
         status_t Window::remove(Widget *widget)
         {
-            if (pChild != widget)
-                return STATUS_NOT_FOUND;
+            Overlay *ov = tk::widget_cast<Overlay>(widget);
+            if (ov != NULL)
+            {
+                if (!vOverlays.premove(ov))
+                    return STATUS_NOT_FOUND;
+            }
+            else
+            {
+                if (pChild != widget)
+                    return STATUS_NOT_FOUND;
+
+                unlink_widget(pChild);
+                pChild  = NULL;
+            }
 
-            unlink_widget(pChild);
-            pChild  = NULL;
+            query_resize();
 
             return STATUS_OK;
         }
 
         status_t Window::remove_all()
         {
+            vOverlays.clear();
             return (pChild != NULL) ? remove(pChild) : STATUS_OK;
         }
 
@@ -722,6 +877,38 @@ namespace lsp
             return hKeys.vKeys.size();
         }
 
+        void Window::auto_close_overlays(const ws::event_t *ev)
+        {
+            Overlay *ov     = find_overlay(ev->nLeft, ev->nTop);
+            size_t updates  = 0;
+
+            for (size_t i=0, n=vDrawOverlays.size(); i<n; ++i)
+            {
+                overlay_t *ovd  = vDrawOverlays.get(i);
+                if (ovd == NULL)
+                    continue;
+
+                // Ensure that overlay is valid and has 'auto_close' option
+                Overlay *xov    = ovd->wWidget;
+                if (xov == NULL)
+                    continue;
+                if (!xov->auto_close()->get())
+                    continue;
+                if (xov == ov)
+                    continue;
+
+                // Hide the overlay if the event was not filtered
+                if (!xov->filter_event(ev))
+                {
+                    xov->visibility()->set(false);
+                    ++updates;
+                }
+            }
+
+            if (updates > 0)
+                query_resize();
+        }
+
         status_t Window::handle_event(const ws::event_t *e)
         {
             status_t result = STATUS_OK;
@@ -738,6 +925,11 @@ namespace lsp
                         bMapped     = true;
                         sRedraw.launch(-1, 40);
                         query_draw(REDRAW_SURFACE);
+
+                        // Remember surface type
+                        ws::ISurface *s = pWindow->get_surface();
+                        if (s != NULL)
+                            enSurfaceType   = s->type();
                     }
                     sShortcutTracker.reset();
                     sVisibility.commit_value(true);
@@ -759,6 +951,14 @@ namespace lsp
                     sVisibility.commit_value(false);
                     break;
 
+                case ws::UIE_STATE:
+                    if (sWindowState.get() == e->nCode)
+                        break;
+
+                    sWindowState.commit_value(ws::window_state_t(e->nCode));
+                    sSlots.execute(SLOT_STATE, this, &ev);
+                    break;
+
                 case ws::UIE_REDRAW:
                     query_draw(REDRAW_SURFACE);
                     break;
@@ -822,8 +1022,9 @@ namespace lsp
 
                 case ws::UIE_MOUSE_DOWN:
                 {
+                    auto_close_overlays(e);
+
                     Widget *h       = acquire_mouse_handler(e);
-//                    int old_state   = hMouse.nState;
                     hMouse.nState  |= (size_t(1) << e->nCode);
                     hMouse.nLeft    = e->nLeft;
                     hMouse.nTop     = e->nTop;
@@ -864,6 +1065,8 @@ namespace lsp
                 case ws::UIE_MOUSE_TRI_CLICK:
                 case ws::UIE_MOUSE_SCROLL:
                 {
+                    auto_close_overlays(e);
+
                     Widget *h = acquire_mouse_handler(e);
                     if (h == this)
                         result          = WidgetContainer::handle_event(e);
@@ -1151,12 +1354,48 @@ namespace lsp
             return true;
         }
 
+        Overlay *Window::find_overlay(ssize_t x, ssize_t y)
+        {
+            // Lookup around visible overlays first
+            // Search should be performed in the reverse to draw order
+            for (ssize_t i=vDrawOverlays.size() - 1; i >= 0; --i)
+            {
+                overlay_t *ovd = vDrawOverlays.get(i);
+                if (ovd == NULL)
+                    continue;
+
+                Overlay *ov = ovd->wWidget;
+                if (ov == NULL)
+                    continue;
+
+                if ((ov->valid()) && (ov->inside(x, y)))
+                    return ov;
+            }
+
+            return NULL;
+        }
+
         Widget *Window::find_widget(ssize_t x, ssize_t y)
         {
-            if ((pChild == NULL) || (!pChild->valid()) || (!pChild->inside(x, y)))
+            // First check if event is related to overlay
+            Widget *curr = find_overlay(x, y);
+            if (curr != NULL)
+            {
+                // We found overlay widget, check if we have nested widget to look for
+                while (true)
+                {
+                    Widget *next = curr->find_widget(x, y);
+                    if (next == NULL)
+                        return curr;
+                    curr    = next;
+                }
+            }
+
+            // Now lookup around child widget if it is present
+            curr = pChild;
+            if ((curr == NULL) || (!curr->valid()) || (!curr->inside(x, y)))
                 return this;
 
-            Widget *curr = pChild;
             while (true)
             {
                 Widget *next = curr->find_widget(x, y);
@@ -1171,6 +1410,11 @@ namespace lsp
             return STATUS_OK;
         }
 
+        status_t Window::on_window_state(const ws::event_t *e)
+        {
+            return STATUS_OK;
+        }
+
         void Window::realize(const ws::rectangle_t *r)
         {
 //            lsp_trace("width=%d, height=%d", int(r->nWidth), int(r->nHeight));
@@ -1183,16 +1427,15 @@ namespace lsp
 
             // Query for size
             ws::size_limit_t sr;
-            float scaling       = lsp_max(sScaling.get(), 0.0f);
-            size_t border       = lsp_max(0, sBorderSize.get()) * scaling;
+            const float scaling = lsp_max(sScaling.get(), 0.0f);
+            const size_t border = lsp_max(0, sBorderSize.get()) * scaling;
 
             pChild->get_padded_size_limits(&sr);
 
             // Compute size of window without border
-            ws::rectangle_t rc  = *r;
+            ws::rectangle_t rc;
             rc.nLeft            = border;
             rc.nTop             = border;
-
             rc.nWidth           = lsp_max(0, ssize_t(r->nWidth  - border*2));
             rc.nHeight          = lsp_max(0, ssize_t(r->nHeight - border*2));
 
@@ -1203,6 +1446,72 @@ namespace lsp
             // Call for realize
             pChild->padding()->enter(&rc, pChild->scaling()->get());
             pChild->realize_widget(&rc);
+
+            // Realize overlays
+            vDrawOverlays.clear();
+            for (size_t i=0, n=vOverlays.size(); i<n; ++i)
+            {
+                Overlay *ov     = vOverlays.get(i);
+                if (!ov->is_visible_child_of(this))
+                    continue;
+
+                // Calculate position of the overlay
+                const float ov_scaling  = lsp_max(0.0f, ov->scaling()->get());
+                ov->get_size_limits(&sr);
+                rc.nLeft        = 0;
+                rc.nTop         = 0;
+                rc.nWidth       = lsp_max((sr.nPreWidth > 0) ? sr.nPreWidth : sr.nMinWidth, 1);
+                rc.nHeight      = lsp_max((sr.nPreHeight > 0) ? sr.nPreHeight : sr.nMinHeight, 1);
+
+                ov->position()->get(&rc.nLeft, &rc.nTop);
+                ov->ipadding()->leave(&rc, ov_scaling);
+
+                // Query position of the overlay widget. Use temporary rectangle to prevent of modifying size of the rectangle
+                ws::rectangle_t qrc     = rc;
+                if (!ov->calculate_position(&qrc))
+                {
+                    ov->visibility()->set(false);
+                    continue;
+                }
+                rc.nLeft        = qrc.nLeft;
+                rc.nTop         = qrc.nTop;
+
+                // Exclude internal padding now
+                ov->ipadding()->enter(&rc, ov_scaling);
+
+                // Apply window-related padding
+                tk::padding_t padding;
+
+                ov->padding()->compute(&padding, ov_scaling);
+
+                padding.nRight          = r->nWidth - padding.nRight;
+                padding.nBottom         = r->nHeight - padding.nBottom;
+
+                rc.nLeft                = lsp_max(rc.nLeft, ssize_t(padding.nLeft));
+                rc.nTop                 = lsp_max(rc.nTop, ssize_t(padding.nTop));
+                rc.nLeft               -= lsp_max(rc.nLeft + rc.nWidth - ssize_t(padding.nRight), 0);
+                rc.nTop                -= lsp_max(rc.nTop + rc.nHeight - ssize_t(padding.nBottom), 0);
+
+                // Add overlay to the list
+                overlay_t *ovd  = vDrawOverlays.add();
+                if (ovd == NULL)
+                    continue;
+
+                ovd->nPriority      = ov->priority()->get();
+                ovd->sArea          = rc;
+                ovd->wWidget        = ov;
+
+                // Realize overlay
+                ov->realize_widget(&ovd->sArea);
+            }
+
+            // Sort overlays according to the drawing order (stack overlays)
+            vDrawOverlays.qsort(overlay_compare_func);
+        }
+
+        ssize_t Window::overlay_compare_func(const overlay_t *a, const overlay_t *b)
+        {
+            return b->nPriority - a->nPriority;
         }
 
         void Window::discard_widget(Widget *w)
@@ -1222,6 +1531,7 @@ namespace lsp
                 ev.nType            = ws::UIE_MOUSE_OUT;
                 ev.nLeft            = hMouse.nLeft;
                 ev.nTop             = hMouse.nTop;
+                hMouse.nState       = 0;
                 hMouse.pWidget      = NULL;
 
                 old->handle_event(&ev);
@@ -1306,5 +1616,15 @@ namespace lsp
             return (pWindow != NULL) ? pWindow->has_parent() : false;
         }
 
+        ws::surface_type_t Window::surface_type() const
+        {
+            return enSurfaceType;
+        }
+
+        const lltl::darray<ws::code_t> *Window::active_keys() const
+        {
+            return &hKeys.vKeys;
+        }
+
     } /* namespace tk */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/dialogs/FileDialog.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/dialogs/FileDialog.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/dialogs/FileDialog.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/dialogs/FileDialog.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -168,11 +168,11 @@ namespace lsp
 
             LSP_TK_STYLE_IMPL_BEGIN(FileDialog__Bookmark_selected, FileDialog__Bookmark)
                 // Override
-                sColor.set("#ffffff");
-                sBgColor.set("#888888");
+                Hyperlink::vColors[HYPERLINK_NORMAL].sColor.set("#ffffff");
+                Widget::vColors[WIDGET_NORMAL].sBgColor.set("#888888");
                 // Commit
-                sColor.override();
-                sBgColor.override();
+                Hyperlink::vColors[HYPERLINK_NORMAL].sColor.override();
+                Widget::vColors[WIDGET_NORMAL].sBgColor.override();
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(FileDialog__Bookmark_selected, "FileDialog::Bookmark.selected", "FileDialog::Bookmark");
 
@@ -186,12 +186,12 @@ namespace lsp
                 sAllocation.set_fill(true, false);
                 sAllocation.set_vreduce(true);
                 sTextLayout.set(1.0f, 0.5f);
-                sColor.set("#ff0000");
+                Label::vColors[LABEL_NORMAL].sColor.set("#ff0000");
                 sAllocation.set_hexpand(true);
                 // Commit
                 sAllocation.override();
                 sTextLayout.override();
-                sColor.override();
+                Label::vColors[LABEL_NORMAL].sColor.override();
                 sAllocation.override();
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(FileDialog__Warning, "FileDialog::Warning", "Label");
@@ -230,10 +230,10 @@ namespace lsp
 
             LSP_TK_STYLE_IMPL_BEGIN(FileDialog__ExtCheck, CheckBox)
                 // Override
-                vColors[CHECKBOX_NORMAL].sColor.set("#ffff00");
+                CheckBox::vColors[CHECKBOX_NORMAL].sColor.set("#ffff00");
                 sChecked.set(true);
                 // Commit
-                vColors[CHECKBOX_NORMAL].sColor.override();
+                CheckBox::vColors[CHECKBOX_NORMAL].sColor.override();
                 sChecked.override();
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(FileDialog__ExtCheck, "FileDialog::ExtCheck", "CheckBox");
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/Graph.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/Graph.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/Graph.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/Graph.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -263,7 +263,7 @@ namespace lsp
             float scaling   = lsp_max(0.0f, sScaling.get());
             float xr        = lsp_max(0.0f, sBorderRadius.get() * scaling); // external radius
             float bw        = lsp_max(0.0f, sBorder.get() * scaling);       // border size
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
 
             // Prepare palette
             ws::ISurface *cv;
@@ -334,12 +334,12 @@ namespace lsp
             return diff;
         }
 
-        void Graph::draw(ws::ISurface *s)
+        void Graph::draw(ws::ISurface *s, bool force)
         {
             // Clear canvas
             lsp::Color c(sColor);
             // c.set_rgb24(0x888888);
-            c.scale_lch_luminance(sBrightness.get());
+            c.scale_lch_luminance(select_brightness());
             s->clear(c);
 
             // Sync internal lists of axes and origins
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphAxis.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphAxis.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphAxis.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphAxis.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -131,7 +131,7 @@ namespace lsp
             float scaling = lsp_max(0.0f, sScaling.get());
             float width   = (sWidth.get() > 0) ? lsp_max(1.0f, sWidth.get() * scaling) : 0;
             lsp::Color color(sColor);
-            color.scale_lch_luminance(sBrightness.get());
+            color.scale_lch_luminance(select_brightness());
 
             // Draw
             float cx = 0.0f, cy = 0.0f;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphDot.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphDot.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphDot.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphDot.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -249,7 +249,7 @@ namespace lsp
 
             // Generate palette
             float scaling   = lsp_max(0.0f, sScaling.get());
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
 
             // Prepare arguments
             float left  = sHValue.sValue.get();
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphFrameBuffer.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphFrameBuffer.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphFrameBuffer.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphFrameBuffer.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 20 авг. 2020 г.
@@ -185,7 +185,7 @@ namespace lsp
             }
         }
 
-        void GraphFrameBuffer::draw(ws::ISurface *s)
+        void GraphFrameBuffer::draw(ws::ISurface *s, bool force)
         {
             // Allocate RGBA buffer
             size_t pixels   = nRows * nCols;
@@ -380,7 +380,8 @@ namespace lsp
             dsp::eff_hsla_light(rgba, v, &eff, n);
             dsp::hsla_to_rgba(rgba, rgba, n);
         }
-    }
-}
+
+    } /* namespace tk */
+} /* namespace lsp */
 
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphLineSegment.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphLineSegment.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphLineSegment.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphLineSegment.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -262,7 +262,7 @@ namespace lsp
 
             // Prepare palette
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float brightness    = sBrightness.get();
+            float brightness    = select_brightness();
 
             lsp::Color  color, bcol_l, bcol_r;
             if (nXFlags & F_HIGHLIGHT)
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphMarker.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphMarker.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphMarker.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphMarker.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -217,7 +217,7 @@ namespace lsp
 
             // Prepare palette
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float brightness    = sBrightness.get();
+            float brightness    = select_brightness();
 
             lsp::Color  color, bcol_l, bcol_r;
             if (nXFlags & F_HIGHLIGHT)
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphMesh.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphMesh.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphMesh.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphMesh.cpp	2025-08-26 18:15:44.109999565 +0000
@@ -207,7 +207,7 @@ namespace lsp
             // Prepare palette
             float scaling   = lsp_max(0.0f, sScaling.get());
             float width     = (sWidth.get() > 0) ? lsp_max(1.0f, sWidth.get() * scaling) : 0.0f;
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
             lsp::Color line(sColor), fill(sFillColor);
             line.scale_lch_luminance(bright);
             fill.scale_lch_luminance(bright);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphOrigin.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphOrigin.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphOrigin.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphOrigin.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -109,7 +109,7 @@ namespace lsp
             float scaling   = lsp_max(0.0f, sScaling.get());
             ssize_t radius  = (sRadius.get() > 0) ? lsp_max(1.0f, sRadius.get() * scaling) : 0;
             lsp::Color color(sColor);
-            color.scale_lch_luminance(sBrightness.get());
+            color.scale_lch_luminance(select_brightness());
 
             // Draw circle
             float x=0.0f, y=0.0f;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphText.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphText.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/graph/GraphText.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/graph/GraphText.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -144,7 +144,7 @@ namespace lsp
             // Get palette
             float scaling   = lsp_max(0.0f, sScaling.get());
             float fscaling  = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
 
             lsp::Color font_color(sColor);
             font_color.scale_lch_luminance(bright);
@@ -209,7 +209,7 @@ namespace lsp
             // Get palette
             float scaling   = lsp_max(0.0f, sScaling.get());
             float fscaling  = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
 
             lsp::Color font_color(sColor);
             font_color.scale_lch_luminance(bright);
@@ -261,10 +261,12 @@ namespace lsp
                 sIPadding.leave(&bgr, &r, scaling);
 
 //                lsp_trace("bgr.left = %d, bgr.top = %d", int(bgr.nLeft), int(bgr.nTop));
+                lsp::Color bg;
+                get_actual_bg_color(&bg);
 
                 const ssize_t radius  = lsp_max(sBgRadius.get(), 0);
                 const ssize_t pad     = floorf(radius * scaling * M_SQRT1_2);
-                s->fill_rect(*sBgColor.color(), SURFMASK_ALL_CORNER, radius,
+                s->fill_rect(bg, SURFMASK_ALL_CORNER, radius,
                     bgr.nLeft - pad, bgr.nTop - pad, bgr.nWidth + pad * 2, bgr.nHeight + pad * 2);
             }
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Bevel.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Bevel.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Bevel.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Bevel.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 13 июн. 2021 г.
@@ -86,9 +86,7 @@ namespace lsp
 
             if (sConstraints.is(prop))
                 query_resize();
-            if (sColor.is(prop))
-                query_draw();
-            if (sBorderColor.is(prop))
+            if (prop->one_of(sColor, sBorderColor))
                 query_draw();
             if (sBorder.is(prop))
                 query_resize();
@@ -203,7 +201,7 @@ namespace lsp
             bp.y       += xy;
 
             lsp::Color col(sColor), bcol(sBorderColor);
-            float brightness    = sBrightness.get();
+            float brightness    = select_brightness();
             col.scale_lch_luminance(brightness);
             bcol.scale_lch_luminance(brightness);
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Button.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Button.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Button.cpp	2025-03-01 12:42:57.416644640 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Button.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -85,7 +85,6 @@ namespace lsp
                 sBorderPressedSize.bind("border.pressed.size", this);
                 sBorderDownSize.bind("border.down.size", this);
                 sEditable.bind("editable", this);
-                sActive.bind("active", this);
                 sHole.bind("hole", this);
                 sFlat.bind("flat", this);
                 sTextClip.bind("text.clip", this);
@@ -150,7 +149,6 @@ namespace lsp
                 sBorderPressedSize.set(3);
                 sBorderDownSize.set(2);
                 sEditable.set(true);
-                sActive.set(true);
                 sHole.set(true);
                 sFlat.set(false);
                 sTextClip.set(false);
@@ -193,7 +191,6 @@ namespace lsp
             sBorderPressedSize(&sProperties),
             sBorderDownSize(&sProperties),
             sEditable(&sProperties),
-            sActive(&sProperties),
             sHole(&sProperties),
             sFlat(&sProperties),
             sTextClip(&sProperties),
@@ -222,7 +219,7 @@ namespace lsp
         Button::~Button()
         {
             nFlags     |= FINALIZED;
-            clear_text_estimations();
+            destroy_text_estimations();
         }
 
         status_t Button::init()
@@ -286,7 +283,6 @@ namespace lsp
             sBorderPressedSize.bind("border.pressed.size", &sStyle);
             sBorderDownSize.bind("border.down.size", &sStyle);
             sEditable.bind("editable", &sStyle);
-            sActive.bind("active", &sStyle);
             sHole.bind("hole", &sStyle);
             sFlat.bind("flat", &sStyle);
             sTextClip.bind("text.clip", &sStyle);
@@ -313,7 +309,7 @@ namespace lsp
             if (cols->property_changed(prop))
                 query_draw();
 
-            if (prop->one_of(sHoleColor, sHover, sGradient, sActive))
+            if (prop->one_of(sHoleColor, sHover, sGradient))
                 query_draw();
 
             if (prop->one_of(sFont, sText, sTextAdjust, sConstraints, sBorderSize, sBorderPressedSize, sBorderDownSize))
@@ -431,7 +427,7 @@ namespace lsp
                 radius);
         }
 
-        void Button::clear_text_estimations()
+        size_t Button::destroy_text_estimations()
         {
             size_t removed = 0;
             for (lltl::iterator<prop::String> it = vEstimations.values(); it; ++it)
@@ -444,6 +440,13 @@ namespace lsp
                 }
             }
             vEstimations.clear();
+
+            return removed;
+        }
+
+        void Button::clear_text_estimations()
+        {
+            const size_t removed = destroy_text_estimations();
             if (removed > 0)
                 query_resize();
         }
@@ -478,11 +481,11 @@ namespace lsp
             e->min_height    = lsp_max(e->min_height, ceilf(lsp_max(e->tp.Height, e->fp.Height)));
         }
 
-        void Button::draw(ws::ISurface *s)
+        void Button::draw(ws::ISurface *s, bool force)
         {
             ws::IGradient *g    = NULL;
             size_t pressed      = nState;
-            float brightness    = sBrightness.get();
+            float brightness    = select_brightness();
             float scaling       = lsp_max(0.0f, sScaling.get());
             float fscaling      = lsp_max(0.0f, scaling * sFontScaling.get());
             ws::rectangle_t r   = sButton;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/CheckBox.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/CheckBox.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/CheckBox.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/CheckBox.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -62,7 +62,6 @@ namespace lsp
                 sCheckGapSize.bind("check.gap.size", this);
                 sCheckMinSize.bind("check.min.size", this);
                 sChecked.bind("checked", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[CHECKBOX_NORMAL];
@@ -96,7 +95,6 @@ namespace lsp
                 sCheckGapSize.set(2);
                 sCheckMinSize.set(4);
                 sChecked.set(false);
-                sActive.set(true);
 
                 // Commit
                 sConstraints.override();
@@ -128,8 +126,7 @@ namespace lsp
             sCheckRadius(&sProperties),
             sCheckGapSize(&sProperties),
             sCheckMinSize(&sProperties),
-            sChecked(&sProperties),
-            sActive(&sProperties)
+            sChecked(&sProperties)
         {
             nRadius         = 0;
             nState          = 0;
@@ -189,7 +186,6 @@ namespace lsp
             sCheckGapSize.bind("check.gap.size", &sStyle);
             sCheckMinSize.bind("check.min.size", &sStyle);
             sChecked.bind("checked", &sStyle);
-            sActive.bind("active", &sStyle);
 
             // Additional slots
             handler_id_t id = 0;
@@ -215,9 +211,6 @@ namespace lsp
             if (cols->property_changed(prop))
                 query_draw();
 
-            if (prop->is(sActive))
-                query_draw();
-
             if (prop->one_of(sConstraints, sBorderSize, sBorderRadius,
                 sBorderGapSize, sCheckRadius, sCheckGapSize, sCheckMinSize))
                 query_resize();
@@ -269,12 +262,12 @@ namespace lsp
             sArea.nTop          = r->nTop   + (r->nHeight - sArea.nHeight) / 2;
         }
 
-        void CheckBox::draw(ws::ISurface *s)
+        void CheckBox::draw(ws::ISurface *s, bool force)
         {
             lsp::Color c;
 
             float scaling       = sScaling.get();
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             ssize_t border      = (sBorderSize.get() > 0) ? lsp_max(1.0f, sBorderSize.get() * scaling) : 0;
             ssize_t bgap        = (sBorderGapSize.get() > 0) ? lsp_max(1.0f, sBorderGapSize.get() * scaling) : 0;
             ssize_t irad        = (sCheckRadius.get() > 0) ? lsp_max(1.0f, sCheckRadius.get() * scaling) : 0;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Edit.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Edit.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Edit.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Edit.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -59,7 +59,6 @@ namespace lsp
                 sBorderGapSize.bind("border.gap.size", this);
                 sBorderRadius.bind("border.radius", this);
                 sConstraints.bind("size.constraints", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[EDIT_NORMAL];
@@ -89,7 +88,6 @@ namespace lsp
                 sBorderGapSize.set(1);
                 sBorderRadius.set(4);
                 sConstraints.set(-1, -1, -1, 8);
-                sActive.set(true);
 
                 // Override
                 sPointer.set(ws::MP_IBEAM);
@@ -220,7 +218,6 @@ namespace lsp
             sBorderGapSize(&sProperties),
             sBorderRadius(&sProperties),
             sConstraints(&sProperties),
-            sActive(&sProperties),
             sPopup(&sProperties)
         {
             sTextPos            = 0;
@@ -321,7 +318,6 @@ namespace lsp
             sBorderGapSize.bind("border.gap.size", &sStyle);
             sBorderRadius.bind("border.radius", &sStyle);
             sConstraints.bind("size.constraints", &sStyle);
-            sActive.bind("active", &sStyle);
             sPopup.bind(widget_ptrcast<Menu>(vMenu[0]));
 
             // Bind slots
@@ -394,9 +390,6 @@ namespace lsp
             if (cols->property_changed(prop))
                 query_draw();
 
-            if (sActive.is(prop))
-                query_draw();
-
             if (sText.is(prop))
             {
                 LSPString *text = sText.formatted();
@@ -512,7 +505,7 @@ namespace lsp
             }
         }
 
-        void Edit::draw(ws::ISurface *s)
+        void Edit::draw(ws::ISurface *s, bool force)
         {
             ws::font_parameters_t fp;
             ws::text_parameters_t tp;
@@ -531,7 +524,7 @@ namespace lsp
             // Draw border
             float scaling   = lsp_max(0.0f, sScaling.get());
             float fscaling  = lsp_max(0.0f, scaling * sFontScaling.get());
-            float lightness = sBrightness.get();
+            float lightness = select_brightness();
             ssize_t radius  = (sBorderRadius.get() > 0) ? lsp_max(1.0f, sBorderRadius.get() * scaling) : 0;
             ssize_t border  = (sBorderSize.get() > 0) ? lsp_max(1.0f, sBorderSize.get() * scaling) : 0;
             size_t cursize  = lsp_max(1.0f, scaling);
@@ -540,8 +533,7 @@ namespace lsp
             bool use_empty_text =
                 (sText.is_empty()) &&
                 (!sEmptyText.is_empty()) &&
-                (!sCursor.visible()) &&
-                (!sCursor.shining());
+                (!sCursor.visible());
             prop::String *src_text = (use_empty_text) ? &sEmptyText : &sText;
 
             const style::EditColors *colors = select_colors();
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Fader.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Fader.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Fader.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Fader.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -63,7 +63,6 @@ namespace lsp
                 sScaleBrightness.bind("scale.brightness", this);
                 sBalanceColorCustom.bind("balance.color.custom", this);
                 sInvertMouseVScroll.bind("mouse.vscroll.invert", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[FADER_NORMAL];
@@ -98,7 +97,6 @@ namespace lsp
                 sScaleBrightness.set(0.75f);
                 sBalanceColorCustom.set(false);
                 sInvertMouseVScroll.set(false);
-                sActive.set(true);
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(Fader, "Fader", "root");
 
@@ -138,8 +136,7 @@ namespace lsp
             sBalance(&sProperties),
             sScaleBrightness(&sProperties),
             sBalanceColorCustom(&sProperties),
-            sInvertMouseVScroll(&sProperties),
-            sActive(&sProperties)
+            sInvertMouseVScroll(&sProperties)
         {
             nLastV          = 0;
             nButtons        = 0;
@@ -207,7 +204,6 @@ namespace lsp
             sScaleBrightness.bind("scale.brightness", &sStyle);
             sBalanceColorCustom.bind("balance.color.custom", &sStyle);
             sInvertMouseVScroll.bind("mouse.vscroll.invert", &sStyle);
-            sActive.bind("active", &sStyle);
 
             handler_id_t id = 0;
             id = sSlots.add(SLOT_CHANGE, slot_on_change, self());
@@ -234,9 +230,6 @@ namespace lsp
             if (cols->property_changed(prop))
                 query_draw();
 
-            if (sActive.is(prop))
-                query_draw();
-
             if (sValue.is(prop))
                 sync_button_pos();
 
@@ -550,7 +543,7 @@ namespace lsp
             return STATUS_OK;
         }
 
-        void Fader::draw(ws::ISurface *s)
+        void Fader::draw(ws::ISurface *s, bool force)
         {
             ws::IGradient *g;
             float scaling       = lsp_max(0.0f, sScaling.get());
@@ -559,7 +552,7 @@ namespace lsp
             ssize_t bchamfer    = (sBtnBorder.get() > 0) ? lsp_max(1, scaling * sBtnBorder.get()) : 0.0f;
             ssize_t bradius     = (sBtnRadius.get() > 0) ? lsp_max(1, scaling * sBtnRadius.get()) : 0.0f;
             size_t angle        = sAngle.get();
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             const style::FaderColors *colors = select_colors();
 
             // Prepare palette
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Hyperlink.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Hyperlink.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Hyperlink.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Hyperlink.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 23 окт. 2017 г.
@@ -20,6 +20,7 @@
  */
 
 #include <lsp-plug.in/tk/tk.h>
+#include <lsp-plug.in/tk/helpers/draw.h>
 #include <lsp-plug.in/common/debug.h>
 #include <lsp-plug.in/stdlib/math.h>
 #include <lsp-plug.in/ipc/Process.h>
@@ -34,19 +35,41 @@ namespace lsp
         {
             LSP_TK_STYLE_IMPL_BEGIN(Hyperlink, Widget)
                 // Bind
+                HyperlinkColors *c = &vColors[HYPERLINK_NORMAL];
+                c->sColor.bind("text.color", this);
+
+                c = &vColors[HYPERLINK_HOVER];
+                c->sColor.bind("text.hover.color", this);
+
+                c = &vColors[HYPERLINK_INACTIVE];
+                c->sColor.bind("inactive.text.color", this);
+
+                c = &vColors[HYPERLINK_INACTIVE| HYPERLINK_HOVER];
+                c->sColor.bind("inactive.text.hover.color", this);
+
                 sTextLayout.bind("text.layout", this);
                 sTextAdjust.bind("text.adjust", this);
                 sFont.bind("font", this);
-                sColor.bind("text.color", this);
-                sHoverColor.bind("text.hover.color", this);
+
                 sConstraints.bind("size.constraints", this);
                 sFollow.bind("follow", this);
+
                 // Configure
+                c = &vColors[HYPERLINK_NORMAL];
+                c->sColor.set_rgb24(0x0000cc);
+
+                c = &vColors[HYPERLINK_HOVER];
+                c->sColor.set_rgb24(0xff0000);
+
+                c = &vColors[HYPERLINK_INACTIVE];
+                c->sColor.set_rgb24(0x000088);
+
+                c = &vColors[HYPERLINK_INACTIVE| HYPERLINK_HOVER];
+                c->sColor.set_rgb24(0xcc0000);
+
                 sTextLayout.set(0.0f, 0.0f);
                 sTextAdjust.set(TA_NONE);
                 sFont.set_underline();
-                sColor.set("#0000cc");
-                sHoverColor.set("#ff0000");
                 sConstraints.set(-1, -1, -1, -1);
                 sFollow.set(true);
                 // Override
@@ -56,6 +79,16 @@ namespace lsp
                 sFont.override();
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(Hyperlink, "Hyperlink", "root");
+
+            void HyperlinkColors::listener(tk::prop::Listener *listener)
+            {
+                sColor.listener(listener);
+            }
+
+            bool HyperlinkColors::property_changed(Property *prop) const
+            {
+                return sColor.is(prop);
+            }
         }
 
         const w_class_t Hyperlink::metadata =        { "Hyperlink", &Widget::metadata };
@@ -65,8 +98,6 @@ namespace lsp
             sTextLayout(&sProperties),
             sTextAdjust(&sProperties),
             sFont(&sProperties),
-            sColor(&sProperties),
-            sHoverColor(&sProperties),
             sText(&sProperties),
             sConstraints(&sProperties),
             sFollow(&sProperties),
@@ -97,11 +128,21 @@ namespace lsp
             if ((res = create_default_menu()) != STATUS_OK)
                 return res;
 
+            style::HyperlinkColors *c = &vColors[style::HYPERLINK_NORMAL];
+            c->sColor.bind("text.color", &sStyle);
+
+            c = &vColors[style::HYPERLINK_HOVER];
+            c->sColor.bind("text.hover.color", &sStyle);
+
+            c = &vColors[style::HYPERLINK_INACTIVE];
+            c->sColor.bind("inactive.text.color", &sStyle);
+
+            c = &vColors[style::HYPERLINK_INACTIVE | style::HYPERLINK_HOVER];
+            c->sColor.bind("inactive.text.hover.color", &sStyle);
+
             sTextLayout.bind("text.layout", &sStyle);
             sTextAdjust.bind("text.adjust", &sStyle);
             sFont.bind("font", &sStyle);
-            sColor.bind("text.color", &sStyle);
-            sHoverColor.bind("text.hover.color", &sStyle);
             sText.bind(&sStyle, pDisplay->dictionary());
             sConstraints.bind("size.constraints", &sStyle);
             sFollow.bind("follow", &sStyle);
@@ -141,16 +182,17 @@ namespace lsp
         void Hyperlink::property_changed(Property *prop)
         {
             Widget::property_changed(prop);
+
+            const style::HyperlinkColors *colors = select_colors();
+            if (colors->property_changed(prop))
+                query_draw();
+
             if (sTextLayout.is(prop))
                 query_draw();
             if (sTextAdjust.is(prop))
                 query_resize();
             if (sFont.is(prop))
                 query_resize();
-            if (sColor.is(prop))
-                query_draw();
-            if (sHoverColor.is(prop))
-                query_draw();
             if (sText.is(prop))
                 query_resize();
             if (sConstraints.is(prop))
@@ -187,7 +229,14 @@ namespace lsp
             sConstraints.apply(r, scaling);
         }
 
-        void Hyperlink::draw(ws::ISurface *s)
+        const style::HyperlinkColors *Hyperlink::select_colors() const
+        {
+            size_t index = (sActive.get()) ? style::HYPERLINK_NORMAL : style::HYPERLINK_INACTIVE;
+            index = lsp_setflag(index, style::HYPERLINK_HOVER, nState & F_MOUSE_IN);
+            return &vColors[index];
+        }
+
+        void Hyperlink::draw(ws::ISurface *s, bool force)
         {
             // Form the text string
             LSPString text;
@@ -229,48 +278,21 @@ namespace lsp
             }
 
             // Initialize palette
+            const style::HyperlinkColors *colors = select_colors();
+
             lsp::Color bg_color;
-            lsp::Color f_color((nState & F_MOUSE_IN) ? sHoverColor : sColor);
+            lsp::Color f_color(colors->sColor);
 
             get_actual_bg_color(bg_color);
-            f_color.scale_lch_luminance(sBrightness.get());
+            f_color.scale_lch_luminance(select_brightness());
 
             // Draw background
             s->clear(bg_color);
 
-            float halign    = lsp_limit(sTextLayout.halign() + 1.0f, 0.0f, 2.0f);
-            float valign    = lsp_limit(sTextLayout.valign() + 1.0f, 0.0f, 2.0f);
-            float dy        = (r.nHeight - tp.Height) * 0.5f;
-            ssize_t y       = r.nTop + dy * valign - fp.Descent;
-
-            // Estimate text size
-            ssize_t last = 0, curr = 0, tail = 0, len = text.length();
-
-            while (curr < len)
-            {
-                // Get next line indexes
-                curr    = text.index_of(last, '\n');
-                if (curr < 0)
-                {
-                    curr        = len;
-                    tail        = len;
-                }
-                else
-                {
-                    tail        = curr;
-                    if ((tail > last) && (text.at(tail-1) == '\r'))
-                        --tail;
-                }
-
-                // Calculate text location
-                sFont.get_text_parameters(s, &tp, fscaling, &text, last, tail);
-                float dx    = (r.nWidth - tp.Width) * 0.5f;
-                ssize_t x   = r.nLeft   + dx * halign - tp.XBearing;
-                y          += fp.Height;
-
-                sFont.draw(s, f_color, x, y, fscaling, &text, last, tail);
-                last    = curr + 1;
-            }
+            draw_multiline_text(s,
+                &sFont, &r, f_color, &fp, &tp,
+                sTextLayout.halign(), sTextLayout.valign(),
+                fscaling, &text);
         }
 
         status_t Hyperlink::create_default_menu()
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Indicator.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Indicator.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Indicator.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Indicator.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -46,7 +46,6 @@ namespace lsp
                 sLoop.bind("text.loop", this);
                 sDarkText.bind("text.dark", this);
                 sType.bind("type", this);
-                sActive.bind("active", this);
                 sFont.bind("font", this);
                 sSpacing.bind("spacing", this);
                 sIPadding.bind("ipadding", this);
@@ -67,7 +66,6 @@ namespace lsp
                 sLoop.set(false);
                 sDarkText.set(true);
                 sType.set(INDICATOR_SEGMENT);
-                sActive.set(true);
                 sFont.set_size(16);
                 sFont.set_bold(true);
                 sSpacing.set(0);
@@ -316,7 +314,6 @@ namespace lsp
             sDarkText(&sProperties),
             sText(&sProperties),
             sType(&sProperties),
-            sActive(&sProperties),
             sFont(&sProperties),
             sSpacing(&sProperties),
             sIPadding(&sProperties)
@@ -357,7 +354,6 @@ namespace lsp
             sDarkText.bind("text.dark", &sStyle);
             sText.bind(&sStyle, pDisplay->dictionary());
             sType.bind("type", &sStyle);
-            sActive.bind("active", &sStyle);
             sFont.bind("font", &sStyle);
             sSpacing.bind("spacing", &sStyle);
             sIPadding.bind("ipadding", &sStyle);
@@ -380,9 +376,6 @@ namespace lsp
             if (cols->property_changed(prop))
                 query_draw();
 
-            if (sActive.is(prop))
-                query_draw();
-
             if (prop->one_of(sRows, sColumns, sType, sFont, sSpacing, sIPadding))
                 query_resize();
             if (prop->one_of(sShift, sTextGap, sLoop, sDarkText, sText))
@@ -558,10 +551,10 @@ namespace lsp
             return uint8_t(ch);
         }
 
-        void Indicator::draw(ws::ISurface *s)
+        void Indicator::draw(ws::ISurface *s, bool force)
         {
             float scaling   = lsp_max(0.0f, sScaling.get());
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
             size_t rows     = lsp_max(1, sRows.get());
             size_t cols     = lsp_max(1, sColumns.get());
             size_t last     = rows * cols;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Knob.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Knob.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Knob.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Knob.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -64,7 +64,6 @@ namespace lsp
                 sScaleActive.bind("scale.active", this);
                 sMeterActive.bind("meter.active", this);
                 sEditable.bind("editable", this);
-                sActive.bind("active", this);
                 sHoleSize.bind("hole.size", this);
                 sGapSize.bind("gap.size", this);
                 sScaleBrightness.bind("scale.brightness", this);
@@ -105,7 +104,6 @@ namespace lsp
                 sScaleActive.set(true);
                 sMeterActive.set(false);
                 sEditable.set(true);
-                sActive.set(true);
                 sHoleSize.set(1);
                 sGapSize.set(1);
                 sScaleBrightness.set(0.75f);
@@ -151,7 +149,6 @@ namespace lsp
             sScaleActive(&sProperties),
             sMeterActive(&sProperties),
             sEditable(&sProperties),
-            sActive(&sProperties),
             sHoleSize(&sProperties),
             sGapSize(&sProperties),
             sScaleBrightness(&sProperties),
@@ -212,7 +209,6 @@ namespace lsp
             sScaleActive.bind("scale.active", &sStyle);
             sMeterActive.bind("meter.active", &sStyle);
             sEditable.bind("editable", &sStyle);
-            sActive.bind("active", &sStyle);
             sHoleSize.bind("hole.size", &sStyle);
             sGapSize.bind("gap.size", &sStyle);
             sScaleBrightness.bind("scale.brightness", &sStyle);
@@ -237,9 +233,6 @@ namespace lsp
             if (colors->property_changed(prop))
                 query_draw();
 
-            if (prop->is(sActive))
-                query_draw();
-
             if (prop->one_of(sSizeRange, sScale, sHoleSize, sGapSize))
                 query_resize();
 
@@ -487,10 +480,10 @@ namespace lsp
             return &vColors[flags];
         }
 
-        void Knob::draw(ws::ISurface *s)
+        void Knob::draw(ws::ISurface *s, bool force)
         {
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             float value         = sValue.get_normalized();
             float balance       = sValue.get_normalized(sBalance.get());
             float meter_min     = sValue.get_normalized(sMeterMin.get());
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Label.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Label.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Label.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Label.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -36,25 +36,60 @@ namespace lsp
         {
             LSP_TK_STYLE_IMPL_BEGIN(Label, Widget)
                 // Bind
+                LabelColors *c = &vColors[LABEL_NORMAL];
+                c->sColor.bind("text.color", this);
+
+                c = &vColors[LABEL_HOVER];
+                c->sColor.bind("text.hover.color", this);
+
+                c = &vColors[LABEL_INACTIVE];
+                c->sColor.bind("inactive.text.color", this);
+
+                c = &vColors[LABEL_INACTIVE| LABEL_HOVER];
+                c->sColor.bind("inactive.text.hover.color", this);
+
                 sTextLayout.bind("text.layout", this);
+                sClipTextLayout.bind("text.clip.layout", this);
                 sTextAdjust.bind("text.adjust", this);
+                sTextClip.bind("text.clip", this);
                 sFont.bind("font", this);
-                sColor.bind("text.color", this);
-                sHoverColor.bind("text.hover.color", this);
                 sHover.bind("text.hover", this);
                 sConstraints.bind("size.constraints", this);
                 sIPadding.bind("ipadding", this);
+
                 // Configure
+                c = &vColors[LABEL_NORMAL];
+                c->sColor.set_rgb24(0x000000);
+
+                c = &vColors[LABEL_HOVER];
+                c->sColor.set_rgb24(0xff0000);
+
+                c = &vColors[LABEL_INACTIVE];
+                c->sColor.set_rgb24(0x888888);
+
+                c = &vColors[LABEL_INACTIVE| LABEL_HOVER];
+                c->sColor.set_rgb24(0xcc0000);
+
                 sTextLayout.set(0.0f, 0.0f);
+                sClipTextLayout.set(0.0f, 0.0f);
                 sTextAdjust.set(TA_NONE);
+                sTextClip.set(false);
                 sFont.set_size(12.0f);
-                sColor.set("#000000");
-                sHoverColor.set("#ff0000");
                 sHover.set(false);
                 sConstraints.set(-1, -1, -1, -1);
                 sIPadding.set(0, 0, 0, 0);
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(Label, "Label", "root");
+
+            void LabelColors::listener(tk::prop::Listener *listener)
+            {
+                sColor.listener(listener);
+            }
+
+            bool LabelColors::property_changed(Property *prop) const
+            {
+                return sColor.is(prop);
+            }
         }
 
         const w_class_t Label::metadata =       { "Label", &Widget::metadata };
@@ -62,12 +97,12 @@ namespace lsp
         Label::Label(Display *dpy):
             Widget(dpy),
             sTextLayout(&sProperties),
+            sClipTextLayout(&sProperties),
             sTextAdjust(&sProperties),
             sFont(&sProperties),
-            sColor(&sProperties),
-            sHoverColor(&sProperties),
             sHover(&sProperties),
             sText(&sProperties),
+            sTextClip(&sProperties),
             sConstraints(&sProperties),
             sPopup(&sProperties)
         {
@@ -80,7 +115,7 @@ namespace lsp
         Label::~Label()
         {
             nFlags     |= FINALIZED;
-            clear_text_estimations();
+            destroy_text_estimations();
         }
 
         status_t Label::init()
@@ -89,13 +124,25 @@ namespace lsp
             if (result != STATUS_OK)
                 return result;
 
+            style::LabelColors *c = &vColors[style::LABEL_NORMAL];
+            c->sColor.bind("text.color", &sStyle);
+
+            c = &vColors[style::LABEL_HOVER];
+            c->sColor.bind("text.hover.color", &sStyle);
+
+            c = &vColors[style::LABEL_INACTIVE];
+            c->sColor.bind("inactive.text.color", &sStyle);
+
+            c = &vColors[style::LABEL_INACTIVE | style::LABEL_HOVER];
+            c->sColor.bind("inactive.text.hover.color", &sStyle);
+
             sTextLayout.bind("text.layout", &sStyle);
+            sClipTextLayout.bind("text.clip.layout", &sStyle);
             sTextAdjust.bind("text.adjust", &sStyle);
             sFont.bind("font", &sStyle);
-            sColor.bind("text.color", &sStyle);
-            sHoverColor.bind("text.hover.color", &sStyle);
             sHover.bind("text.hover", &sStyle);
             sText.bind(&sStyle, pDisplay->dictionary());
+            sTextClip.bind("text.clip", &sStyle);
             sConstraints.bind("size.constraints", &sStyle);
             sIPadding.bind("ipadding", &sStyle);
             sPopup.bind(NULL);
@@ -113,14 +160,18 @@ namespace lsp
         {
             Widget::property_changed(prop);
 
-            if (prop->one_of(sTextLayout, sColor, sHoverColor, sHover))
+            const style::LabelColors *colors = select_colors();
+            if (colors->property_changed(prop))
+                query_draw();
+
+            if (prop->one_of(sTextLayout, sClipTextLayout, sHover))
                 query_draw();
 
-            if (prop->one_of(sTextAdjust, sFont, sText, sConstraints, sIPadding))
+            if (prop->one_of(sTextAdjust, sTextClip, sFont, sText, sConstraints, sIPadding))
                 query_resize();
         }
 
-        void Label::draw(ws::ISurface *s)
+        void Label::draw(ws::ISurface *s, bool force)
         {
             // Form the text string
             LSPString text;
@@ -130,56 +181,92 @@ namespace lsp
             // Estimate sizes
             float scaling   = lsp_max(0.0f, sScaling.get());
             float fscaling  = lsp_max(0.0f, scaling * sFontScaling.get());
-            bool hover      = (nState & F_MOUSE_IN) && (sHover.get());
             ws::font_parameters_t fp;
             ws::text_parameters_t tp;
             ws::rectangle_t r, size;
 
             sFont.get_parameters(s, fscaling, &fp);
             sFont.get_multitext_parameters(s, &tp, fscaling, &text);
+            tp.Height       = lsp_max(tp.Height, fp.Height);
             sIPadding.sub(&size, &sSize, scaling);
 
             // Estimate drawing area
-            tp.Height       = lsp_max(tp.Height, fp.Height);
-            if (tp.Width <= size.nWidth)
+            const bool clip = sTextClip.get();
+            if (clip)
             {
-                r.nLeft         = 0;
-                r.nWidth        = size.nWidth;
+                // Apply text clipping
+                r.nLeft     = 0;
+                r.nTop      = 0;
+                r.nWidth    = sSize.nWidth;
+                r.nHeight   = sSize.nHeight;
+                sIPadding.enter(&r, scaling);
+                s->clip_begin(&r);
             }
             else
             {
-                r.nLeft         = -0.5f * (tp.Width - size.nWidth);
-                r.nWidth        = ceil(tp.Width);
-            }
+                if (tp.Width <= size.nWidth)
+                {
+                    r.nLeft         = 0;
+                    r.nWidth        = size.nWidth;
+                }
+                else
+                {
+                    r.nLeft         = -0.5f * (tp.Width - size.nWidth);
+                    r.nWidth        = ceil(tp.Width);
+                }
 
-            if (tp.Height <= size.nHeight)
-            {
-                r.nTop          = 0;
-                r.nHeight       = size.nHeight;
-            }
-            else
-            {
-                r.nTop          = -0.5f * (tp.Height - size.nHeight);
-                r.nHeight       = ceil(tp.Height);
+                if (tp.Height <= size.nHeight)
+                {
+                    r.nTop          = 0;
+                    r.nHeight       = size.nHeight;
+                }
+                else
+                {
+                    r.nTop          = -0.5f * (tp.Height - size.nHeight);
+                    r.nHeight       = ceil(tp.Height);
+                }
             }
+            lsp_finally {
+                if (clip)
+                    s->clip_end();
+            };
 
             // Initialize palette
+            const style::LabelColors *colors = select_colors();
+
             lsp::Color bg_color;
-            lsp::Color f_color((hover) ? sHoverColor : sColor);
+            lsp::Color f_color(colors->sColor);
 
             get_actual_bg_color(bg_color);
-            f_color.scale_lch_luminance(sBrightness.get());
+            f_color.scale_lch_luminance(select_brightness());
 
             // Draw background
             s->clear(bg_color);
 
+            const bool exceeds = (tp.Width > r.nWidth) || (tp.Height > r.nHeight);
+            const TextLayout *layout = (exceeds) ? &sClipTextLayout : &sTextLayout;
+
             draw_multiline_text(s,
                 &sFont, &r, f_color, &fp, &tp,
-                sTextLayout.halign(), sTextLayout.valign(),
+                layout->halign(), layout->valign(),
                 fscaling, &text);
         }
 
-        void Label::clear_text_estimations()
+        const style::LabelColors *Label::select_colors(bool active, bool hover) const
+        {
+            size_t index = (active) ? style::LABEL_NORMAL : style::LABEL_INACTIVE;
+            index = lsp_setflag(index, style::LABEL_HOVER, hover);
+            return &vColors[index];
+        }
+
+        const style::LabelColors *Label::select_colors() const
+        {
+            return select_colors(
+                sActive.get(),
+                (nState & F_MOUSE_IN) && (sHover.get()));
+        }
+
+        size_t Label::destroy_text_estimations()
         {
             size_t removed = 0;
             for (lltl::iterator<prop::String> it = vEstimations.values(); it; ++it)
@@ -192,6 +279,13 @@ namespace lsp
                 }
             }
             vEstimations.clear();
+
+            return removed;
+        }
+
+        void Label::clear_text_estimations()
+        {
+            const size_t removed = destroy_text_estimations();
             if (removed > 0)
                 query_resize();
         }
@@ -282,10 +376,15 @@ namespace lsp
             e.r             = r;
             sFont.get_parameters(pDisplay, e.fscaling, &e.fp);
 
-            // Estimate the size of the label
-            for (lltl::iterator<prop::String> it = vEstimations.values(); it; ++it)
-                estimate_string_size(&e, it.get());
-            estimate_string_size(&e, &sText);
+            if (!sTextClip.get())
+            {
+                // Estimate the size of the label
+                for (lltl::iterator<prop::String> it = vEstimations.values(); it; ++it)
+                    estimate_string_size(&e, it.get());
+                estimate_string_size(&e, &sText);
+            }
+            else
+                r->nMinHeight   = e.fp.Height;
             
             // Apply size constraints
             sConstraints.apply(r, e.scaling);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Led.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Led.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Led.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Led.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -50,7 +50,6 @@ namespace lsp
                 sRound.bind("round", this);
                 sBorderSize.bind("border.size", this);
                 sGradient.bind("gradient", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[LED_NORMAL];
@@ -73,7 +72,6 @@ namespace lsp
                 sLed.set(8);
                 sBorderSize.set(3);
                 sGradient.set(true);
-                sActive.set(true);
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(Led, "Led", "root");
 
@@ -102,8 +100,7 @@ namespace lsp
             sLed(&sProperties),
             sRound(&sProperties),
             sBorderSize(&sProperties),
-            sGradient(&sProperties),
-            sActive(&sProperties)
+            sGradient(&sProperties)
         {
             pClass      = &metadata;
 
@@ -143,7 +140,6 @@ namespace lsp
             sRound.bind("round", &sStyle);
             sBorderSize.bind("border.size", &sStyle);
             sGradient.bind("gradient", &sStyle);
-            sActive.bind("active", &sStyle);
 
             return STATUS_OK;
         }
@@ -163,9 +159,6 @@ namespace lsp
             if (colors->property_changed(prop))
                 query_draw();
 
-            if (sActive.is(prop))
-                query_draw();
-
             if (prop->one_of(sHoleColor, sOn))
                 query_draw();
 
@@ -205,7 +198,7 @@ namespace lsp
             SizeConstraints::add(r, extra, extra);
         }
 
-        void Led::draw(ws::ISurface *s)
+        void Led::draw(ws::ISurface *s, bool force)
         {
             if (sRound.get())
                 draw_round(s);
@@ -217,7 +210,7 @@ namespace lsp
         {
             ws::IGradient *g    = NULL;
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float brightness    = sBrightness.get();
+            float brightness    = select_brightness();
             ssize_t sz_hole     = (sHole.get()) ? lsp_max(1.0f, scaling) : 0;
             ssize_t sz_led      = lsp_max(0.0f, sLed.get() * scaling);
             bool gradient       = sGradient.get();
@@ -315,7 +308,7 @@ namespace lsp
         void Led::draw_rect(ws::ISurface *s)
         {
             ws::IGradient *g    = NULL;
-            float brightness    = sBrightness.get();
+            float brightness    = select_brightness();
             float scaling       = lsp_max(0.0f, sScaling.get());
             float border        = sBorderSize.get() * scaling;
             ssize_t chamfer     = lsp_max(0.0f, border);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/ListBoxItem.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/ListBoxItem.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/ListBoxItem.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/ListBoxItem.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -63,7 +63,6 @@ namespace lsp
                 c->sTextColor.bind("inactive.text.selected.hover.color", this);
 
                 sTextAdjust.bind("text.adjust", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[style::LISTBOXITEM_NORMAL];
@@ -98,15 +97,14 @@ namespace lsp
                 c->sTextColor.set("#444444");
 
                 sTextAdjust.set(TA_NONE);
-                sActive.set(true);
 
                 // Override
                 sPadding.set(2, 2, 0, 0);
-                sBgColor.set("#ffffff");
+                Widget::vColors[0].sBgColor.set("#ffffff");
 
                 // Commit
                 sPadding.override();
-                sBgColor.override();
+                Widget::vColors[0].sBgColor.override();
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(ListBoxItem, "ListBoxItem", "root");
 
@@ -127,8 +125,7 @@ namespace lsp
         ListBoxItem::ListBoxItem(Display *dpy):
             Widget(dpy),
             sText(&sProperties),
-            sTextAdjust(&sProperties),
-            sActive(&sProperties)
+            sTextAdjust(&sProperties)
         {
             pClass = &metadata;
 
@@ -181,7 +178,6 @@ namespace lsp
 
             sTextAdjust.bind("text.adjust", &sStyle);
             sText.bind(&sStyle, pDisplay->dictionary());
-            sActive.bind("active", &sStyle);
 
             return res;
         }
@@ -215,7 +211,6 @@ namespace lsp
 
             if (sActive.is(prop))
             {
-                query_draw();
                 ListBox *list = widget_cast<ListBox>(parent());
                 if (list != NULL)
                     list->query_draw(REDRAW_CHILD | REDRAW_SURFACE);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/MenuItem.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/MenuItem.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/MenuItem.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/MenuItem.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -50,7 +50,6 @@ namespace lsp
                 sTextAdjust.bind("text.adjust", this);
                 sType.bind("type", this);
                 sChecked.bind("checked", this);
-                sActive.bind("active", this);
                 sShortcut.bind("shortcut", this);
 
                 // Configure
@@ -73,7 +72,6 @@ namespace lsp
                 sTextAdjust.set(TA_NONE);
                 sType.set(MI_NORMAL);
                 sChecked.set(false);
-                sActive.set(true);
                 sShortcut.clear();
 
                 // Override
@@ -111,7 +109,6 @@ namespace lsp
             sTextAdjust(&sProperties),
             sType(&sProperties),
             sChecked(&sProperties),
-            sActive(&sProperties),
             sShortcut(&sProperties)
         {
             pClass      = &metadata;
@@ -163,7 +160,6 @@ namespace lsp
             sText.bind(&sStyle, pDisplay->dictionary());
             sType.bind("type", &sStyle);
             sChecked.bind("checked", &sStyle);
-            sActive.bind("active", &sStyle);
             sShortcut.bind("shortcut", &sStyle);
             sMenu.bind(NULL);
 
@@ -194,7 +190,6 @@ namespace lsp
 
             if (sActive.is(prop))
             {
-                query_draw();
                 tk::Menu *parent = widget_cast<tk::Menu>(this->parent());
                 if (parent != NULL)
                     parent->query_draw(REDRAW_CHILD | REDRAW_SURFACE);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/ProgressBar.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/ProgressBar.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/ProgressBar.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/ProgressBar.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -51,7 +51,6 @@ namespace lsp
                 sConstraints.bind("size", this);
                 sTextLayout.bind("text.layout", this);
                 sShowText.bind("text.show", this);
-                sActive.bind("active", this);
                 sFont.bind("font", this);
                 sBorderSize.bind("border.size", this);
                 sBorderGapSize.bind("border.gap.size", this);
@@ -78,7 +77,6 @@ namespace lsp
                 sConstraints.set(-1, -1, -1, -1);
                 sTextLayout.set(0.0f, 0.0f);
                 sShowText.set(true);
-                sActive.set(true);
                 sFont.set_size(12.0f);
                 sBorderSize.set(1);
                 sBorderGapSize.set(1);
@@ -117,7 +115,6 @@ namespace lsp
             sText(&sProperties),
             sTextLayout(&sProperties),
             sShowText(&sProperties),
-            sActive(&sProperties),
             sFont(&sProperties),
             sBorderSize(&sProperties),
             sBorderGapSize(&sProperties),
@@ -166,7 +163,6 @@ namespace lsp
             sText.bind(&sStyle, pDisplay->dictionary());
             sTextLayout.bind("text.layout", &sStyle);
             sShowText.bind("text.show", &sStyle);
-            sActive.bind("active", &sStyle);
             sFont.bind("font", &sStyle);
             sBorderSize.bind("border.size", &sStyle);
             sBorderGapSize.bind("border.gap.size", &sStyle);
@@ -190,9 +186,6 @@ namespace lsp
             if (colors->property_changed(prop))
                 query_draw();
 
-            if (sActive.is(prop))
-                query_draw();
-
             if (prop->one_of(sValue, sText, sTextLayout))
                 query_draw();
             if (prop->one_of(sConstraints, sShowText, sFont, sBorderSize, sBorderGapSize, sBorderRadius))
@@ -318,10 +311,10 @@ namespace lsp
             }
         }
     
-        void ProgressBar::draw(ws::ISurface *s)
+        void ProgressBar::draw(ws::ISurface *s, bool force)
         {
             float scaling   = lsp_max(0.0f, sScaling.get());
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
             ssize_t border  = (sBorderSize.get() > 0) ? lsp_max(1.0f, sBorderSize.get() * scaling) : 0;
             ssize_t radius  = (sBorderRadius.get() > 0) ? lsp_max(1.0f, sBorderRadius.get() * scaling) : 0;
             ssize_t gap     = (sBorderGapSize.get() > 0) ? lsp_max(1.0f, sBorderGapSize.get() * scaling) : 0;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/RadioButton.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/RadioButton.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/RadioButton.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/RadioButton.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -60,7 +60,6 @@ namespace lsp
                 sCheckGapSize.bind("check.gap.size", this);
                 sCheckMinSize.bind("check.min.size", this);
                 sChecked.bind("checked", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[style::RADIOBUTTON_NORMAL];
@@ -93,7 +92,6 @@ namespace lsp
                 sCheckGapSize.set(2);
                 sCheckMinSize.set(4);
                 sChecked.set(false);
-                sActive.set(true);
 
                 // Commit
                 sConstraints.override();
@@ -123,8 +121,7 @@ namespace lsp
             sBorderGapSize(&sProperties),
             sCheckGapSize(&sProperties),
             sCheckMinSize(&sProperties),
-            sChecked(&sProperties),
-            sActive(&sProperties)
+            sChecked(&sProperties)
         {
             pClass          = &metadata;
 
@@ -181,7 +178,6 @@ namespace lsp
             sCheckGapSize.bind("check.gap.size", &sStyle);
             sCheckMinSize.bind("check.min.size", &sStyle);
             sChecked.bind("checked", &sStyle);
-            sActive.bind("active", &sStyle);
 
             sConstraints.bind("size.constraints", &sStyle);
             sBorderSize.bind("border.size", &sStyle);
@@ -189,7 +185,6 @@ namespace lsp
             sCheckGapSize.bind("check.gap.size", &sStyle);
             sCheckMinSize.bind("check.min.size", &sStyle);
             sChecked.bind("checked", &sStyle);
-            sActive.bind("active", &sStyle);
 
             // Additional slots
             handler_id_t id = 0;
@@ -215,9 +210,6 @@ namespace lsp
             if (colors->property_changed(prop))
                 query_draw();
 
-            if (prop->is(sActive))
-                query_draw();
-
             if (sChecked.is(prop))
             {
                 nState  = lsp_setflag(nState, XF_CHECKED, sChecked.get());
@@ -262,12 +254,12 @@ namespace lsp
             sArea.nTop          = r->nTop   + (r->nHeight - sArea.nHeight) / 2;
         }
 
-        void RadioButton::draw(ws::ISurface *s)
+        void RadioButton::draw(ws::ISurface *s, bool force)
         {
             lsp::Color c;
 
             float scaling       = sScaling.get();
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             ssize_t border      = (sBorderSize.get() > 0) ? lsp_max(1.0f, sBorderSize.get() * scaling) : 0;
             ssize_t bgap        = (sBorderGapSize.get() > 0) ? lsp_max(1.0f, sBorderGapSize.get() * scaling) : 0;
             ssize_t ckgap       = (sCheckGapSize.get() > 0) ? lsp_max(1.0f, sCheckGapSize.get() * scaling) : 0;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/ScrollBar.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/ScrollBar.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/ScrollBar.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/ScrollBar.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -76,7 +76,6 @@ namespace lsp
                 sSliderBorderSize.bind("slider.border.size", this);
                 sInvertMouseHScroll.bind("mouse.hscroll.invert", this);
                 sInvertMouseVScroll.bind("mouse.vscroll.invert", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[style::SCROLLBAR_NORMAL];
@@ -123,7 +122,6 @@ namespace lsp
                 sSliderBorderSize.set(1);
                 sInvertMouseHScroll.set(false);
                 sInvertMouseVScroll.set(false);
-                sActive.set(true);
 
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(ScrollBar, "ScrollBar", "root");
@@ -172,8 +170,7 @@ namespace lsp
             sBorderGap(&sProperties),
             sSliderBorderSize(&sProperties),
             sInvertMouseHScroll(&sProperties),
-            sInvertMouseVScroll(&sProperties),
-            sActive(&sProperties)
+            sInvertMouseVScroll(&sProperties)
         {
             pClass          = &metadata;
 
@@ -274,7 +271,6 @@ namespace lsp
             sSliderBorderSize.bind("slider.border.size", &sStyle);
             sInvertMouseHScroll.bind("mouse.hscroll.invert", &sStyle);
             sInvertMouseVScroll.bind("mouse.vscroll.invert", &sStyle);
-            sActive.bind("active", &sStyle);
 
             handler_id_t id = 0;
             id = sSlots.add(SLOT_CHANGE, slot_on_change, self());
@@ -319,9 +315,6 @@ namespace lsp
             if (colors->property_changed(prop))
                 query_draw();
 
-            if (sActive.is(prop))
-                query_draw();
-
             if (prop->one_of(sValue, sStep, sAccelStep))
                 update_slider();
 
@@ -933,10 +926,10 @@ namespace lsp
             }
         }
 
-        void ScrollBar::draw(ws::ISurface *s)
+        void ScrollBar::draw(ws::ISurface *s, bool force)
         {
             float scaling   = lsp_max(0.0f, sScaling.get());
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
             ssize_t border  = (sBorderSize.get() > 0) ? lsp_max(1.0f, sBorderSize.get() * scaling) : 0;
             ssize_t radius  = (sBorderRadius.get() > 0) ? lsp_max(1.0f, sBorderRadius.get() * scaling) : 0;
             ssize_t gap     = (sBorderGap.get() > 0) ? lsp_max(1.0f, sBorderGap.get() * scaling) : 0;
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Separator.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Separator.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/Separator.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/Separator.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -92,7 +92,7 @@ namespace lsp
 
         void Separator::render(ws::ISurface *s, const ws::rectangle_t *area, bool force)
         {
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
 
             // Prepare palette
             lsp::Color color(sColor);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/TabItem.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/TabItem.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/simple/TabItem.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/simple/TabItem.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -76,7 +76,6 @@ namespace lsp
                 sFont.bind("font", this);
                 sBorderSize.bind("border.size", this);
                 sBorderRadius.bind("border.radius", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[style::TABITEM_NORMAL];
@@ -125,7 +124,6 @@ namespace lsp
                 sFont.set_size(12.0f);
                 sBorderSize.set(1);
                 sBorderRadius.set(4);
-                sActive.set(true);
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(TabItem, "TabItem", "Tab");
 
@@ -154,8 +152,7 @@ namespace lsp
             sTextPadding(&sProperties),
             sFont(&sProperties),
             sBorderSize(&sProperties),
-            sBorderRadius(&sProperties),
-            sActive(&sProperties)
+            sBorderRadius(&sProperties)
         {
             pClass      = &metadata;
 
@@ -223,7 +220,6 @@ namespace lsp
             sFont.bind("font", &sStyle);
             sBorderSize.bind("border.size", &sStyle);
             sBorderRadius.bind("border.radius", &sStyle);
-            sActive.bind("active", &sStyle);
 
             return STATUS_OK;
         }
@@ -251,9 +247,6 @@ namespace lsp
                     break;
                 }
 
-            if (sActive.is(prop))
-                query_draw();
-
             if (prop->one_of(sText, sTextAdjust, sTextLayout, sTextPadding, sFont, sBorderSize, sBorderRadius))
                 query_resize();
         }
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/AudioChannel.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/AudioChannel.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/AudioChannel.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/AudioChannel.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 28 сент. 2020 г.
@@ -97,9 +97,9 @@ namespace lsp
                 sLoopBorderColor.set("#00ffff");
                 sConstraints.set(128, 32, -1, -1);
                 // Override
-                sBgColor.set("#000000");
+                Widget::vColors[0].sBgColor.set("#000000");
                 // Commit
-                sBgColor.override();
+                Widget::vColors[0].sBgColor.override();
             LSP_TK_STYLE_IMPL_END
             LSP_TK_BUILTIN_STYLE(AudioChannel, "AudioChannel", "root");
         }
@@ -428,9 +428,9 @@ namespace lsp
             s->line(wire, x, r->nTop, x, r->nTop + r->nHeight, border);
         }
 
-        void AudioChannel::draw(ws::ISurface *s)
+        void AudioChannel::draw(ws::ISurface *s, bool force)
         {
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             float scaling       = lsp_max(0.0f, sScaling.get());
             ssize_t line_w      = (sLineWidth.get() > 0) ? lsp_max(1.0f, sLineWidth.get() * scaling) : 0.0f;
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/AudioEnvelope.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/AudioEnvelope.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/AudioEnvelope.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/AudioEnvelope.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -0,0 +1,842 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 3 июн. 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/tk/tk.h>
+#include <lsp-plug.in/tk/helpers/draw.h>
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/dsp/dsp.h>
+#include <private/tk/style/BuiltinStyle.h>
+
+namespace lsp
+{
+    namespace tk
+    {
+        namespace style
+        {
+            LSP_TK_STYLE_IMPL_BEGIN(AudioEnvelope, Widget)
+                sAttackTime.bind("attack.time", this);
+                sAttackCurvature.bind("attack.curvature", this);
+                sAttackStep.bind("attack.step", this);
+                sHoldTime.bind("hold.time", this);
+                sDecayTime.bind("decay.time", this);
+                sDecayCurvature.bind("decay.curvature", this);
+                sDecayStep.bind("decay.step", this);
+                sBreakLevel.bind("break.level", this);
+                sSlopeTime.bind("slope.time", this);
+                sSlopeCurvature.bind("slope.curvature", this);
+                sSlopeStep.bind("slope.step", this);
+                sSustainLevel.bind("sustain.level", this);
+                sReleaseTime.bind("release.time", this);
+                sReleaseCurvature.bind("relese.curvature", this);
+                sReleaseStep.bind("release.step", this);
+                sHold.bind("hold.enabled", this);
+                sBreak.bind("break.enabled", this);
+                sQuadPoint.bind("point.quadratic", this);
+                sFill.bind("fill", this);
+                sWire.bind("wire", this);
+                sInvertMouseVScroll.bind("mouse.vscroll.invert", this);
+                sEditable.bind("editable", this);
+
+                sLineWidth.bind("line.width", this);
+                sLineColor.bind("line.color", this);
+                sFillColor.bind("fill.color", this);
+                sPointSize.bind("point.size", this);
+                sPointColor.bind("point.color", this);
+                sPointHoverColor.bind("point.hover.color", this);
+
+                sConstraints.bind("size.constraints", this);
+                sBorder.bind("border.size", this);
+                sBorderRadius.bind("border.radius", this);
+                sBorderFlat.bind("border.flat", this);
+                sBorderColor.bind("border.color", this);
+                sGlass.bind("glass", this);
+                sGlassColor.bind("glass.color", this);
+                sIPadding.bind("ipadding", this);
+
+                // Configure
+                sAttackTime.set(0.1f);
+                sAttackCurvature.set(0.5f);
+                sAttackStep.set(0.01f);
+                sHoldTime.set(0.2f);
+                sDecayTime.set(0.4f);
+                sDecayCurvature.set(0.5f);
+                sDecayStep.set(0.01f);
+                sBreakLevel.set(0.4f);
+                sSlopeTime.set(0.7f);
+                sSlopeCurvature.set(0.5f);
+                sSlopeStep.set(0.01f);
+                sSustainLevel.set(0.5f);
+                sReleaseTime.set(0.8f);
+                sReleaseCurvature.set(0.5f);
+                sReleaseStep.set(0.01f);
+                sHold.set(false);
+                sBreak.set(false);
+                sQuadPoint.set(false);
+                sFill.set(true);
+                sInvertMouseVScroll.set(false);
+                sEditable.set(true);
+
+                sLineWidth.set(1);
+                sLineColor.set_rgb24(0xffff00);
+                sFillColor.set_rgba32(0x80ffff00);
+                sPointSize.set(4);
+                sPointColor.set_rgb24(0xffff00);
+                sPointHoverColor.set_rgb24(0xff0000);
+
+                sBorder.set(4);
+                sBorderRadius.set(12);
+                sBorderFlat.set(false);
+                sBorderColor.set("#000000");
+                sGlass.set(true);
+                sGlassColor.set("#ffffff");
+                sIPadding.set(1);
+
+            LSP_TK_STYLE_IMPL_END
+            LSP_TK_BUILTIN_STYLE(AudioEnvelope, "AudioEnvelope", "root");
+        }
+
+        const w_class_t AudioEnvelope::metadata      = { "AudioEnvelope", &Widget::metadata };
+
+        AudioEnvelope::AudioEnvelope(Display *dpy):
+            Widget(dpy),
+            sAttackTime(&sProperties),
+            sAttackCurvature(&sProperties),
+            sAttackStep(&sProperties),
+            sHoldTime(&sProperties),
+            sDecayTime(&sProperties),
+            sDecayCurvature(&sProperties),
+            sDecayStep(&sProperties),
+            sBreakLevel(&sProperties),
+            sSlopeTime(&sProperties),
+            sSlopeCurvature(&sProperties),
+            sSlopeStep(&sProperties),
+            sSustainLevel(&sProperties),
+            sReleaseTime(&sProperties),
+            sReleaseCurvature(&sProperties),
+            sReleaseStep(&sProperties),
+            sHold(&sProperties),
+            sBreak(&sProperties),
+            sQuadPoint(&sProperties),
+            sFill(&sProperties),
+            sWire(&sProperties),
+            sInvertMouseVScroll(&sProperties),
+            sEditable(&sProperties),
+            sLineWidth(&sProperties),
+            sLineColor(&sProperties),
+            sFillColor(&sProperties),
+            sPointSize(&sProperties),
+            sPointColor(&sProperties),
+            sPointHoverColor(&sProperties),
+            sConstraints(&sProperties),
+            sBorder(&sProperties),
+            sBorderRadius(&sProperties),
+            sBorderFlat(&sProperties),
+            sBorderColor(&sProperties),
+            sGlass(&sProperties),
+            sGlassColor(&sProperties),
+            sIPadding(&sProperties)
+        {
+            pClass              = &metadata;
+
+            sArea.nLeft         = 0;
+            sArea.nTop          = 0;
+            sArea.nWidth        = 0;
+            sArea.nHeight       = 0;
+
+            sDrawArea.nLeft     = 0;
+            sDrawArea.nTop      = 0;
+            sDrawArea.nWidth    = 0;
+            sDrawArea.nHeight   = 0;
+
+            for (size_t i=0; i<PR_TOTAL; ++i)
+            {
+                point_t *p          = &vPoints[i];
+
+                p->pX               = NULL;
+                p->pY               = NULL;
+                p->pZ               = NULL;
+                p->pStep            = NULL;
+                p->nX               = 0;
+                p->nY               = 0;
+                p->bEnabled         = true;
+                p->bVisible         = true;
+            }
+
+            vPoints[PR_ATTACK].pX           = &sAttackTime;
+            vPoints[PR_ATTACK].pZ           = &sAttackCurvature;
+            vPoints[PR_ATTACK].pStep        = &sAttackStep;
+            vPoints[PR_HOLD].pX             = &sHoldTime;
+            vPoints[PR_HOLD].pZ             = &sDecayCurvature;
+            vPoints[PR_HOLD].pStep          = &sDecayStep;
+            vPoints[PR_DECAY_BREAK].pX      = &sDecayTime;
+            vPoints[PR_DECAY_BREAK].pZ      = &sDecayCurvature;
+            vPoints[PR_DECAY_BREAK].pStep   = &sDecayStep;
+            vPoints[PR_SLOPE_SUSTAIN].pX    = &sSlopeTime;
+            vPoints[PR_SLOPE_SUSTAIN].pZ    = &sSlopeCurvature;
+            vPoints[PR_SLOPE_SUSTAIN].pStep = &sSlopeStep;
+            vPoints[PR_RELEASE].pX          = &sReleaseTime;
+            vPoints[PR_RELEASE].pZ          = &sReleaseCurvature;
+            vPoints[PR_RELEASE].pStep       = &sReleaseStep;
+
+            pHandler            = NULL;
+            nBMask              = 0;
+            nLastX              = 0;
+            nLastY              = 0;
+            nPointSize          = 0;
+            bQuadPoint          = false;
+
+            pGlass              = NULL;
+            pFunction           = NULL;
+            pFuncData           = NULL;
+            vBuffer             = NULL;
+            nBufCapacity        = 0;
+        }
+
+        AudioEnvelope::~AudioEnvelope()
+        {
+            nFlags     |= FINALIZED;
+            do_destroy();
+        }
+
+        void AudioEnvelope::destroy()
+        {
+            nFlags     |= FINALIZED;
+            do_destroy();
+
+            Widget::destroy();
+        }
+
+        void AudioEnvelope::do_destroy()
+        {
+            drop_glass();
+            if (vBuffer != NULL)
+            {
+                free(vBuffer);
+                vBuffer     = NULL;
+            }
+        }
+
+        void AudioEnvelope::drop_glass()
+        {
+            if (pGlass != NULL)
+            {
+                pGlass->destroy();
+                delete pGlass;
+                pGlass      = NULL;
+            }
+        }
+
+        status_t AudioEnvelope::init()
+        {
+            status_t res = Widget::init();
+            if (res != STATUS_OK)
+                return res;
+
+            // Bind properties
+            sAttackTime.bind("attack.time", &sStyle);
+            sAttackCurvature.bind("attack.curvature", &sStyle);
+            sAttackStep.bind("attack.step", &sStyle);
+            sHoldTime.bind("hold.time", &sStyle);
+            sDecayTime.bind("decay.time", &sStyle);
+            sDecayCurvature.bind("decay.curvature", &sStyle);
+            sDecayStep.bind("decay.step", &sStyle);
+            sBreakLevel.bind("break.level", &sStyle);
+            sSlopeTime.bind("slope.time", &sStyle);
+            sSlopeCurvature.bind("slope.curvature", &sStyle);
+            sSlopeStep.bind("slope.step", &sStyle);
+            sSustainLevel.bind("sustain.level", &sStyle);
+            sReleaseTime.bind("release.time", &sStyle);
+            sReleaseCurvature.bind("relese.curvature", &sStyle);
+            sReleaseStep.bind("release.step", &sStyle);
+            sHold.bind("hold.enabled", &sStyle);
+            sBreak.bind("break.enabled", &sStyle);
+            sQuadPoint.bind("point.quadratic", &sStyle);
+            sFill.bind("fill", &sStyle);
+            sWire.bind("wire", &sStyle);
+            sInvertMouseVScroll.bind("mouse.vscroll.invert", &sStyle);
+            sEditable.bind("editable", &sStyle);
+
+            sLineWidth.bind("line.width", &sStyle);
+            sLineColor.bind("line.color", &sStyle);
+            sFillColor.bind("fill.color", &sStyle);
+            sPointSize.bind("point.size", &sStyle);
+            sPointColor.bind("point.color", &sStyle);
+            sPointHoverColor.bind("point.hover.color", &sStyle);
+
+            sConstraints.bind("size.constraints", &sStyle);
+            sBorder.bind("border.size", &sStyle);
+            sBorderRadius.bind("border.radius", &sStyle);
+            sBorderFlat.bind("border.flat", &sStyle);
+            sBorderColor.bind("border.color", &sStyle);
+            sGlass.bind("glass", &sStyle);
+            sGlassColor.bind("glass.color", &sStyle);
+            sIPadding.bind("ipadding", &sStyle);
+
+            // Add slots
+            handler_id_t id = sSlots.add(SLOT_CHANGE, slot_on_change, self());
+
+            return (id >= 0) ? STATUS_OK : -id;
+        }
+
+        void AudioEnvelope::property_changed(Property *prop)
+        {
+            Widget::property_changed(prop);
+
+            if (prop->one_of(sAttackTime, sAttackCurvature, sHoldTime, sDecayTime, sDecayCurvature,
+                sBreakLevel, sSlopeTime, sSlopeCurvature, sSustainLevel, sReleaseTime, sReleaseCurvature))
+                query_draw();
+
+            if (prop->is(sHold))
+            {
+                vPoints[PR_HOLD].bEnabled = sHold.get();
+                query_draw();
+            }
+
+            if (prop->is(sBreak))
+            {
+                if (sBreak.get())
+                {
+                    vPoints[PR_DECAY_BREAK].pY          = &sBreakLevel;
+                    vPoints[PR_DECAY_BREAK].pStep       = &sDecayStep;
+                    vPoints[PR_SLOPE_SUSTAIN].pY        = &sSustainLevel;
+                    vPoints[PR_SLOPE_SUSTAIN].pStep     = &sSlopeStep;
+                    vPoints[PR_RELEASE].pY              = &sSustainLevel;
+                    vPoints[PR_SLOPE_SUSTAIN].bEnabled  = true;
+                }
+                else
+                {
+                    vPoints[PR_DECAY_BREAK].pY          = &sSustainLevel;
+                    vPoints[PR_SLOPE_SUSTAIN].pY        = NULL;
+                    vPoints[PR_SLOPE_SUSTAIN].pStep     = &sDecayStep;
+                    vPoints[PR_RELEASE].pY              = &sSustainLevel;
+                    vPoints[PR_SLOPE_SUSTAIN].bEnabled  = false;
+                }
+                query_draw();
+            }
+
+            if (prop->one_of(sQuadPoint, sFill, sWire, sEditable))
+                query_draw();
+
+            if (prop->one_of(sLineWidth, sLineColor, sFillColor, sPointSize, sPointColor, sPointHoverColor,
+                sBorderColor, sGlass, sGlassColor))
+                query_draw();
+
+            if (prop->one_of(sConstraints, sBorder, sBorderRadius, sBorderFlat, sIPadding))
+                query_resize();
+        }
+
+        void AudioEnvelope::get_min_area_size(ssize_t *width, ssize_t *height, float scaling)
+        {
+            const size_t p_size     = lsp_max(1.0f, sPointSize.get() * scaling);
+            const size_t a_size     = lsp_min(p_size, 4u);
+
+            if (width != NULL)
+                *width                  = a_size * 16;
+            if (height != NULL)
+                *height                 = a_size * 9;
+        }
+
+        void AudioEnvelope::size_request(ws::size_limit_t *r)
+        {
+            const float scaling     = lsp_max(0.0f, sScaling.get());
+
+            // Estimate the size of area for drawing samples
+            r->nMinWidth        = 0;
+            r->nMinHeight       = 0;
+            r->nMaxWidth        = -1;
+            r->nMaxHeight       = -1;
+            r->nPreWidth        = -1;
+            r->nPreHeight       = -1;
+
+            // Get minimum area size
+            get_min_area_size(&r->nMinWidth, &r->nMinHeight, scaling);
+
+            // Add padding to the rectangle
+            sIPadding.add(r, scaling);
+
+            // Compute additional space around the sample area
+            float xr        = lsp_max(0.0f, sBorderRadius.get() * scaling); // external radius
+            float bw        = lsp_max(0.0f, sBorder.get() * scaling);       // border size
+            float ir        = lsp_max(0.0f, xr - bw);                       // internal radius
+            float bp        = (1.0f - M_SQRT1_2) * ir;                      // padding to not to cross internal radius
+            ssize_t padding = ceilf(bp + bw);
+            ssize_t wh      = lsp_max(padding * 2, xr * 2);                 // minimum possible width and height
+
+            r->nMinWidth    = lsp_max(r->nMinWidth  + padding * 2, wh);
+            r->nMinHeight   = lsp_max(r->nMinHeight + padding * 2, wh);
+
+            // Apply size constraints
+            sConstraints.apply(r, scaling);
+        }
+
+        AudioEnvelope::point_t *AudioEnvelope::find_point(ssize_t x, ssize_t y)
+        {
+            const ssize_t r     = nPointSize;
+            if (bQuadPoint)
+            {
+                for (size_t i=0; i<PR_TOTAL; ++i)
+                {
+                    point_t *p          = &vPoints[i];
+                    if (!p->bVisible)
+                        continue;
+
+                    const ssize_t dx    = x - p->nX;
+                    const ssize_t dy    = y - p->nY;
+                    if ((dx >= -r) && (dx <= r) &&
+                        (dy >= -r) && (dy <= r))
+                        return p;
+                }
+            }
+            else
+            {
+                for (size_t i=0; i<PR_TOTAL; ++i)
+                {
+                    point_t *p          = &vPoints[i];
+                    if (!p->bVisible)
+                        continue;
+
+                    const ssize_t dx    = x - p->nX;
+                    const ssize_t dy    = y - p->nY;
+                    if ((dx*dx + dy*dy) <= r*r)
+                        return p;
+                }
+            }
+
+            return NULL;
+        }
+
+        void AudioEnvelope::realize(const ws::rectangle_t *r)
+        {
+            // Call parent class to realize
+            Widget::realize(r);
+
+            // Compute the size of area
+            float scaling   = lsp_max(0.0f, sScaling.get());
+            float xr        = lsp_max(0.0f, ceilf(sBorderRadius.get() * scaling));  // external radius
+            float bw        = lsp_max(0.0f, ceilf(sBorder.get() * scaling));        // border size
+            float ir        = lsp_max(0.0f, xr - bw);                               // internal radius
+            ssize_t padding = ceilf((1.0f - M_SQRT1_2) * ir + bw);                  // padding of internal area
+
+            sArea.nLeft     = r->nLeft   + padding;
+            sArea.nTop      = r->nTop    + padding;
+            sArea.nWidth    = r->nWidth  - padding*2;
+            sArea.nHeight   = r->nHeight - padding*2;
+        }
+
+        float *AudioEnvelope::reserve_buffer(size_t count)
+        {
+            if ((vBuffer == NULL) || (nBufCapacity < count))
+            {
+                const size_t capacity = align_size(count, 32);
+                float *buf      = static_cast<float *>(realloc(vBuffer, capacity * sizeof(float) * 2));
+                if (buf == NULL)
+                    return NULL;
+
+                vBuffer     = buf;
+            }
+
+            return vBuffer;
+        }
+
+        void AudioEnvelope::draw_point(ws::ISurface *s, const lsp::Color & color, const point_t *p)
+        {
+            if (bQuadPoint)
+            {
+                const float p_size = nPointSize * 2;
+                s->fill_rect(color,
+                    SURFMASK_NO_CORNER, 0.0f,
+                    p->nX - nPointSize, p->nY - nPointSize,
+                    p_size, p_size);
+                return;
+            }
+
+            s->fill_circle(color, p->nX, p->nY, nPointSize);
+        }
+
+        void AudioEnvelope::draw_curve(ws::ISurface *surface, float bright, float scaling, const ws::rectangle_t *rect)
+        {
+            nPointSize      = lsp_max(1.0f, sPointSize.get() * scaling);
+            bQuadPoint      = sQuadPoint.get();
+            sDrawArea       = *rect;
+
+            if ((rect->nWidth <= 1) || (rect->nHeight <= 1))
+            {
+                for (size_t i=0; i<PR_TOTAL; ++i)
+                {
+                    point_t *p      = &vPoints[i];
+                    p->bVisible     = false;
+                }
+                return;
+            }
+
+            const bool editable = sEditable.get();
+            const float ox  = rect->nLeft;
+            const float oy  = rect->nTop + rect->nHeight;
+            const float dx  = rect->nWidth - 1.0f;      // Inteval 0..1 includes 1
+            const float dy  = 1.0f - rect->nHeight;     // Inteval 0..1 includes 1
+
+            // Realize points
+            for (size_t i=0; i<PR_TOTAL; ++i)
+            {
+                point_t *p      = &vPoints[i];
+                const float x   = (p->pX != NULL) ? p->pX->get() : 0.0f;
+                const float y   = (p->pY != NULL) ? p->pY->get() : 1.0f;
+
+                p->nX           = ox + dx * x;
+                p->nY           = oy + dy * y;
+                p->bVisible     = editable && p->bEnabled;
+            }
+
+            // Generate curve
+            float *x        = NULL;
+            float *y        = NULL;
+            size_t points   = 0;
+            if (pFunction != NULL)
+            {
+                points          = rect->nWidth + 2;
+                float *buf      = reserve_buffer(points);
+                if (buf == NULL)
+                    return;
+
+                x               = &buf[0];
+                y               = &buf[points];
+
+                x[0]            = 0.0f;
+                dsp::lramp_set1(&x[1], 0.0f, 1.0f, points - 3);
+                x[points-2]     = 1.0f;
+                x[points-1]     = 1.0f;
+
+                pFunction(y, x, points, this, pFuncData);
+                y[0]            = 0.0f;
+                y[points-1]     = 0.0f;
+            }
+            else
+            {
+                float *buf      = reserve_buffer(PR_TOTAL + 2);
+                if (buf == NULL)
+                    return;
+
+                x               = &buf[0];
+                y               = &buf[PR_TOTAL + 2];
+
+                x[points]       = 0.0f;
+                y[points]       = 0.0f;
+                ++points;
+
+                for (size_t i=0; i<PR_TOTAL; ++i)
+                {
+                    point_t *p      = &vPoints[i];
+                    if (!p->bEnabled)
+                        continue;
+
+                    x[points]       = (p->pX != NULL) ? p->pX->get() : 0.0f;
+                    y[points]       = (p->pY != NULL) ? p->pY->get() : 1.0f;
+                    ++points;
+                }
+
+                x[points]       = 1.0f;
+                y[points]       = 0.0f;
+                ++points;
+            }
+
+            // Draw curve
+            if ((x != NULL) && (y != NULL) && (points > 0))
+            {
+                const bool use_fill     = sFill.get();
+                const bool use_wire     = sWire.get();
+
+                if (use_fill || use_wire)
+                {
+                    const float l_width     = lsp_max(1.0f, sLineWidth.get() * scaling);
+                    lsp::Color fill(sFillColor);
+                    lsp::Color wire(sLineColor);
+                    fill.scale_lch_luminance(bright);
+                    wire.scale_hsl_lightness(bright);
+
+                    dsp::mul_k2(x, dx, points);
+                    dsp::add_k2(x, ox, points);
+                    dsp::mul_k2(y, dy, points);
+                    dsp::add_k2(y, oy, points);
+
+                    if (use_fill)
+                        surface->draw_poly(fill, wire, (use_wire) ? l_width : 0.0f, x, y, points);
+                    else if (use_wire)
+                        surface->wire_poly(wire, l_width, x, y, points);
+                }
+            }
+
+            // Draw points
+            lsp::Color pcolor(sPointColor);
+            lsp::Color ph_color(sPointHoverColor);
+            pcolor.scale_lch_luminance(bright);
+            ph_color.scale_hsl_lightness(bright);
+
+            for (size_t i=0; i<PR_TOTAL; ++i)
+            {
+                const point_t *p    = &vPoints[i];
+                if ((p->bVisible) && (p != pHandler))
+                    draw_point(surface, pcolor, p);
+            }
+            if ((pHandler != NULL) && (pHandler->bVisible))
+                draw_point(surface, ph_color, pHandler);
+        }
+
+        void AudioEnvelope::draw(ws::ISurface *s, bool force)
+        {
+            // Main parameters
+            const float scaling     = lsp_max(0.0f, sScaling.get());
+            const float bright      = select_brightness();
+
+            // Draw background
+            lsp::Color color(sColor);
+            color.scale_lch_luminance(bright);
+            s->clear(color);
+
+            // Draw curve and points
+            ws::rectangle_t cr = sArea;
+
+            sIPadding.enter(&cr, scaling);
+            const ws::point_t origin = s->set_origin(-sArea.nLeft, -sArea.nTop);
+            lsp_finally { s->set_origin(origin); };
+
+            draw_curve(s, bright, scaling, &cr);
+        }
+
+        void AudioEnvelope::render(ws::ISurface *s, const ws::rectangle_t *area, bool force)
+        {
+            const float scaling     = lsp_max(0.0f, sScaling.get());
+            const float xr          = lsp_max(0.0f, sBorderRadius.get() * scaling); // external radius
+            const float bw          = lsp_max(0.0f, sBorder.get() * scaling);       // border size
+            const float bright      = select_brightness();
+
+            // Prepare palette
+            ws::ISurface *cv;
+            lsp::Color color(sColor);
+            lsp::Color bg_color;
+            get_actual_bg_color(bg_color);
+            color.scale_lch_luminance(bright);
+
+            s->clip_begin(area);
+            {
+                // Draw widget background
+                s->fill_rect(bg_color, SURFMASK_NONE, 0.0f, &sSize);
+
+                const bool aa           = s->set_antialiasing(true);
+                lsp_finally { s->set_antialiasing(aa); };
+
+                s->fill_rect(color, SURFMASK_ALL_CORNER, xr, &sSize);
+
+                // Get surface of widget
+                cv  = get_surface(s, sArea.nWidth, sArea.nHeight);
+                if (cv != NULL)
+                    s->draw(cv, sArea.nLeft, sArea.nTop, 1.0f, 1.0f, 0.0f);
+
+                // Draw the glass and the border
+                color.copy(sGlassColor);
+                bg_color.copy(sColor);
+                color.scale_lch_luminance(bright);
+                bg_color.scale_lch_luminance(bright);
+
+                const bool flat         = sBorderFlat.get();
+                if (sGlass.get())
+                {
+                    cv = create_border_glass(&pGlass, s,
+                            color, bg_color,
+                            SURFMASK_ALL_CORNER, bw, xr,
+                            sSize.nWidth, sSize.nHeight, flat
+                        );
+                    if (cv != NULL)
+                        s->draw(cv, sSize.nLeft, sSize.nTop, 1.0f, 1.0f, 0.0f);
+                }
+                else
+                {
+                    drop_glass();
+                    draw_border(s, bg_color, SURFMASK_ALL_CORNER, bw, xr, &sSize, flat);
+                }
+            }
+            s->clip_end();
+        }
+
+        status_t AudioEnvelope::on_change()
+        {
+            return STATUS_OK;
+        }
+
+        void AudioEnvelope::sync_handler(const ws::event_t *e)
+        {
+            point_t *point = find_point(e->nLeft, e->nTop);
+            if (point == pHandler)
+                return;
+
+            pHandler    = point;
+            query_draw();
+//            lsp_trace("this=%p handler set to %p", this, pHandler);
+        }
+
+        status_t AudioEnvelope::on_mouse_in(const ws::event_t *e)
+        {
+            sync_handler(e);
+            return STATUS_OK;
+        }
+
+        status_t AudioEnvelope::on_mouse_out(const ws::event_t *e)
+        {
+            if (pHandler != NULL)
+            {
+                pHandler    = NULL;
+                query_draw();
+//                lsp_trace("this=%p handler set to %p", this, pHandler);
+            }
+            return STATUS_OK;
+        }
+
+        status_t AudioEnvelope::on_mouse_down(const ws::event_t *e)
+        {
+            if (nBMask == 0)
+            {
+                sync_handler(e);
+
+                nLastX      = e->nLeft;
+                nLastY      = e->nTop;
+            }
+
+            nBMask         |= size_t(1) << e->nCode;
+
+            return STATUS_OK;
+        }
+
+        status_t AudioEnvelope::on_mouse_up(const ws::event_t *e)
+        {
+            nBMask         &= ~(size_t(1) << e->nCode);
+
+            return STATUS_OK;
+        }
+
+        status_t AudioEnvelope::on_mouse_move(const ws::event_t *e)
+        {
+//            lsp_trace("x=%d, y=%d", int(e->nLeft), int(e->nTop));
+
+            if (nBMask == 0)
+            {
+                sync_handler(e);
+                return STATUS_OK;
+            }
+
+            if ((nBMask != ws::MCF_LEFT) || (pHandler == NULL))
+                return STATUS_OK;
+
+            // Apply changes
+            bool changed        = false;
+
+            // Modify X coordinate if possible
+            if (pHandler->pX != NULL)
+            {
+                const float ox      = sDrawArea.nLeft;
+                const float dx      = sDrawArea.nWidth - 1.0f;      // Inteval 0..1 includes 1
+                const float x       = lsp_limit((e->nLeft - ox) / dx, 0.0f, 1.0f);
+
+                for (size_t i=0; i<PR_TOTAL; ++i)
+                {
+                    point_t *p          = &vPoints[i];
+                    if (p->pX == NULL)
+                        continue;
+
+                    const float px      = p->pX->get();
+                    if (((p < pHandler) && (px > x)) ||
+                        ((p > pHandler) && (px < x)) ||
+                        ((p == pHandler) && (px != x)))
+                    {
+                        p->pX->commit_value(x);
+                        changed             = true;
+                    }
+                }
+            }
+
+            // Modify Y coordinate if possible
+            if (pHandler->pY != NULL)
+            {
+                const float oy      = sDrawArea.nTop + sDrawArea.nHeight;
+                const float dy      = 1.0f - sDrawArea.nHeight;     // Inteval 0..1 includes 1
+                const float y       = lsp_limit((e->nTop - oy) / dy, 0.0f, 1.0f);
+
+                pHandler->pY->commit_value(y);
+                changed             = true;
+            }
+
+            if (changed)
+            {
+                sSlots.slot(SLOT_CHANGE)->execute(this, NULL);
+                query_draw();
+            }
+
+            return STATUS_OK;
+        }
+
+        status_t AudioEnvelope::on_mouse_scroll(const ws::event_t *e)
+        {
+            if (nBMask == 0)
+                sync_handler(e);
+
+            if ((pHandler == NULL) || (pHandler->pZ == NULL) || (pHandler->pStep == NULL))
+                return STATUS_OK;
+
+            float step      = pHandler->pStep->get(e->nState & ws::MCF_CONTROL, e->nState & ws::MCF_SHIFT);
+            if (sInvertMouseVScroll.get())
+                step                = -step;
+
+            // Compute the delta value
+            float delta     = 0.0f;
+            if (e->nCode == ws::MCD_UP)
+                delta   = step;
+            else if (e->nCode == ws::MCD_DOWN)
+                delta   = -step;
+            else
+                return STATUS_OK;
+
+            // Commit the value
+            const float old     = pHandler->pZ->get();
+            pHandler->pZ->add(delta);
+            if (old != pHandler->pZ->get())
+                sSlots.execute(SLOT_CHANGE, this);
+
+            return STATUS_OK;
+        }
+
+        status_t AudioEnvelope::slot_on_change(Widget *sender, void *ptr, void *data)
+        {
+            AudioEnvelope *self = widget_ptrcast<AudioEnvelope>(ptr);
+            return (self != NULL) ? self->on_change() : STATUS_BAD_ARGUMENTS;
+        }
+
+        void AudioEnvelope::set_curve_function(curve_function_t function, void *data)
+        {
+            pFunction       = function;
+            pFuncData       = data;
+
+            query_draw();
+        }
+
+    } /* namespace tk */
+} /* namespace lsp */
+
+
+
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/AudioSample.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/AudioSample.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/AudioSample.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/AudioSample.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-tk-lib
  * Created on: 28 сент. 2020 г.
@@ -80,7 +80,6 @@ namespace lsp
                 sMaxAmplitude.bind("amplitude.max", this);
                 sLineColor.bind("line.color", this);
                 sConstraints.bind("size.constraints", this);
-                sActive.bind("active", this);
                 sSGroups.bind("stereo_groups", this);
                 sMainTextLayout.bind("main.text.layout", this);
                 sMainFont.bind("main.font", this);
@@ -155,7 +154,9 @@ namespace lsp
                     sLabelTextLayout[i].set(0.0f, 0.0f);
                     sLabelVisibility[i].set(false);
                 }
+
                 // Override
+                sActive.override();
                 sMainFont.override();
                 sLabelFont.override();
             LSP_TK_STYLE_IMPL_END
@@ -167,6 +168,7 @@ namespace lsp
         AudioSample::AudioSample(Display *dpy):
             WidgetContainer(dpy),
             vChannels(&sProperties, &sIListener),
+            vEnvelopes(&sProperties, &sIListener),
             sWaveBorder(&sProperties),
             sFadeInBorder(&sProperties),
             sFadeOutBorder(&sProperties),
@@ -177,7 +179,6 @@ namespace lsp
             sMaxAmplitude(&sProperties),
             sLineColor(&sProperties),
             sConstraints(&sProperties),
-            sActive(&sProperties),
             sSGroups(&sProperties),
             sMainText(&sProperties),
             sMainTextLayout(&sProperties),
@@ -257,12 +258,21 @@ namespace lsp
                     unlink_widget(item);
             }
 
+            for (size_t i=0, n=vEnvelopes.size(); i<n; ++i)
+            {
+                AudioEnvelope *item  = vEnvelopes.get(i);
+                if (item != NULL)
+                    unlink_widget(item);
+            }
+
             // Drop glass
             drop_glass();
 
             // Flush containers
             vChannels.flush();
-            vVisible.flush();
+            vEnvelopes.flush();
+            vVisibleChannels.flush();
+            vVisibleEnvelopes.flush();
         }
 
         status_t AudioSample::init()
@@ -285,7 +295,6 @@ namespace lsp
             sMaxAmplitude.bind("amplitude.max", &sStyle);
             sLineColor.bind("line.color", &sStyle);
             sConstraints.bind("size.constraints", &sStyle);
-            sActive.bind("active", &sStyle);
             sSGroups.bind("stereo_groups", &sStyle);
             sMainText.bind(&sStyle, pDisplay->dictionary());
             sMainTextLayout.bind("main.text.layout", &sStyle);
@@ -330,7 +339,7 @@ namespace lsp
         {
             WidgetContainer::property_changed(prop);
 
-            if (vChannels.is(prop))
+            if (prop->one_of(vChannels, vEnvelopes))
                 query_resize();
 
             if (sWaveBorder.is(prop))
@@ -393,9 +402,6 @@ namespace lsp
             float fscaling      = lsp_max(0.0f, scaling * sFontScaling.get());
             bool sgroups        = sSGroups.get();
 
-            lltl::parray<AudioChannel> channels;
-            get_visible_items(&channels);
-
             // Estimate the size of area for drawing samples
             ws::size_limit_t sl;
             r->nMinWidth        = 0;
@@ -416,6 +422,10 @@ namespace lsp
             }
             else
             {
+                // Estimate minimum width and height among samples
+                lltl::parray<AudioChannel> channels;
+                get_visible_channels(&channels);
+
                 for (size_t i=0, n=channels.size(); i<n; ++i)
                 {
                     AudioChannel *c     = channels.uget(i);
@@ -424,6 +434,25 @@ namespace lsp
                     r->nMinWidth        = lsp_max(r->nMinWidth, sl.nMinWidth);
                     r->nMinHeight      += (sgroups) ? (h >> 1) : h;
                 }
+
+                // Estimate minimum width and height among envelopes
+                lltl::parray<AudioEnvelope> envelopes;
+                get_visible_envelopes(&envelopes);
+
+                for (size_t i=0, n=envelopes.size(); i<n; ++i)
+                {
+                    AudioEnvelope *e    = envelopes.uget(i);
+
+                    padding_t padding;
+                    ssize_t width       = 0;
+                    ssize_t height      = 0;
+
+                    e->ipadding()->compute(&padding, scaling);
+                    e->get_min_area_size(&width, &height, scaling);
+
+                    r->nMinWidth        = lsp_max(r->nMinWidth, width + ssize_t(padding.nLeft + padding.nRight));
+                    r->nMinHeight       = lsp_max(r->nMinHeight, height + ssize_t(padding.nTop + padding.nBottom));
+                }
             }
 
             // Add padding to the rectangle
@@ -448,8 +477,11 @@ namespace lsp
         {
             // Call parent class to realize
             WidgetContainer::realize(r);
+
             lltl::parray<AudioChannel> channels;
-            get_visible_items(&channels);
+            lltl::parray<AudioEnvelope> envelopes;
+            get_visible_channels(&channels);
+            get_visible_envelopes(&envelopes);
 
             // Compute the size of area
             float scaling   = lsp_max(0.0f, sScaling.get());
@@ -464,7 +496,8 @@ namespace lsp
             sGraph.nHeight  = r->nHeight - padding*2;
 
             sIPadding.enter(&sGraph, scaling);
-            vVisible.swap(&channels);
+            vVisibleChannels.swap(&channels);
+            vVisibleEnvelopes.swap(&envelopes);
         }
 
         void AudioSample::draw_channel1(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, size_t samples, float max_amplitude)
@@ -474,7 +507,7 @@ namespace lsp
                 return;
 
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
 
             // Init decimation buffer
             ssize_t n_draw      = lsp_min(ssize_t(samples), r->nWidth);
@@ -521,14 +554,14 @@ namespace lsp
             s->draw_poly(fill, wire, border, x, y, n_points);
         }
 
-        void AudioSample::draw_fades1(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, size_t samples)
+        void AudioSample::draw_fades1(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, ssize_t *head_cut, ssize_t *tail_cut, size_t samples)
         {
             // Check limits
             if ((samples <= 0) || (r->nWidth <= 1) || (r->nHeight <= 1))
                 return;
 
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
 
             float x[6], y[6];
 
@@ -565,6 +598,7 @@ namespace lsp
                     cut.scale_lch_luminance(bright);
 
                     float dx            = float(c->sHeadCut.get() * r->nWidth) / float(samples);
+                    *head_cut           = lsp_max(*head_cut, ssize_t(dx));
                     s->fill_rect(cut, SURFMASK_NONE, 0.0f, r->nLeft, r->nTop, dx, r->nHeight);
                     for (size_t i=0,n=sizeof(x)/sizeof(x[0]); i<n; ++i)
                         x[i]               += dx;
@@ -606,6 +640,7 @@ namespace lsp
                     cut.scale_lch_luminance(bright);
 
                     float dx            = float(c->sTailCut.get() * r->nWidth) / float(samples);
+                    *tail_cut           = lsp_max(*tail_cut, ssize_t(dx));
                     s->fill_rect(cut, SURFMASK_NONE, 0.0f, r->nLeft + r->nWidth - dx, r->nTop, dx, r->nHeight);
                     for (size_t i=0,n=sizeof(x)/sizeof(x[0]); i<n; ++i)
                         x[i]               -= dx;
@@ -636,7 +671,7 @@ namespace lsp
                 return;
 
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             float border        = (range->border->get() > 0) ? lsp_max(1.0f, range->border->get() * scaling) : 0.0f;
             float xb            = r->nLeft + float(begin * r->nWidth) / float(samples);
             float xe            = r->nLeft + float(end * r->nWidth) / float(samples);
@@ -669,7 +704,7 @@ namespace lsp
                 return;
 
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             float x             = float(r->nLeft + (position * r->nWidth) / samples);
             float border        = lsp_max(1.0f, pborder * scaling);
 
@@ -689,7 +724,7 @@ namespace lsp
                 return;
 
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
 
             // Init decimation buffer
             ssize_t n_draw      = lsp_min(ssize_t(samples), r->nWidth);
@@ -735,14 +770,14 @@ namespace lsp
             s->draw_poly(fill, wire, border, x, y, n_points);
         }
 
-        void AudioSample::draw_fades2(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, size_t samples, bool down)
+        void AudioSample::draw_fades2(const ws::rectangle_t *r, ws::ISurface *s, AudioChannel *c, ssize_t *head_cut, ssize_t *tail_cut, size_t samples, bool down)
         {
             // Check limits
             if ((samples <= 0) || (r->nWidth <= 1) || (r->nHeight <= 1))
                 return;
 
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
 
             float x[4], y[4];
 
@@ -775,6 +810,7 @@ namespace lsp
                     cut.scale_lch_luminance(bright);
 
                     float dx            = float(c->sHeadCut.get() * r->nWidth) / float(samples);
+                    *head_cut           = lsp_max(*head_cut, ssize_t(dx));
                     s->fill_rect(cut, SURFMASK_NONE, 0.0f, r->nLeft, r->nTop, dx, r->nHeight);
                     for (size_t i=0,n=sizeof(x)/sizeof(x[0]); i<n; ++i)
                         x[i]               += dx;
@@ -812,6 +848,7 @@ namespace lsp
                     cut.scale_lch_luminance(bright);
 
                     float dx            = float(c->sTailCut.get() * r->nWidth) / float(samples);
+                    *tail_cut           = lsp_max(*tail_cut, ssize_t(dx));
                     s->fill_rect(cut, SURFMASK_NONE, 0.0f, r->nLeft + r->nWidth - dx, r->nTop, dx, r->nHeight);
                     for (size_t i=0,n=sizeof(x)/sizeof(x[0]); i<n; ++i)
                         x[i]               -= dx;
@@ -831,7 +868,7 @@ namespace lsp
         {
             float scaling       = lsp_max(0.0f, sScaling.get());
             float fscaling      = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
 
             LSPString text;
             ws::font_parameters_t fp;
@@ -864,7 +901,7 @@ namespace lsp
         {
             float scaling       = lsp_max(0.0f, sScaling.get());
             float fscaling      = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
 
             ws::font_parameters_t fp;
             ws::text_parameters_t tp;
@@ -926,11 +963,11 @@ namespace lsp
             WidgetContainer::query_draw(flags);
         }
 
-        void AudioSample::draw(ws::ISurface *s)
+        void AudioSample::draw(ws::ISurface *s, bool force)
         {
             // Main parameters
             float scaling       = lsp_max(0.0f, sScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
 
             // Draw background
             lsp::Color color(sColor);
@@ -945,7 +982,9 @@ namespace lsp
             }
 
             // Draw all samples
-            size_t items = vVisible.size();
+            ssize_t head_cut = 0;
+            ssize_t tail_cut = 0;
+            size_t items = vVisibleChannels.size();
             if (items > 0)
             {
                 ws::rectangle_t xr;
@@ -957,7 +996,7 @@ namespace lsp
                 size_t samples  = 0;
                 for (size_t i=0; i<items; ++i)
                 {
-                    AudioChannel *c = vVisible.uget(i);
+                    AudioChannel *c = vVisibleChannels.uget(i);
                     samples         = lsp_max(samples, c->samples()->size());
                 }
 
@@ -972,7 +1011,7 @@ namespace lsp
                     xr.nTop             = y;
                     for (size_t i=0; i<items; ++i)
                     {
-                        AudioChannel *c     = vVisible.uget(i);
+                        AudioChannel *c     = vVisibleChannels.uget(i);
                         draw_channel2(&xr, s, c, samples, i & 1, sMaxAmplitude.get());
                         xr.nTop            += xr.nHeight;
                     }
@@ -981,7 +1020,7 @@ namespace lsp
                     xr.nTop             = y;
                     for (size_t i=0; i<items; ++i)
                     {
-                        AudioChannel *c     = vVisible.uget(i);
+                        AudioChannel *c     = vVisibleChannels.uget(i);
 
                         // Define ranges
                         range_t stretch = {
@@ -1008,8 +1047,8 @@ namespace lsp
                     xr.nTop             = y;
                     for (size_t i=0; i<items; ++i)
                     {
-                        AudioChannel *c     = vVisible.uget(i);
-                        draw_fades2(&xr, s, c, samples, i & 1);
+                        AudioChannel *c     = vVisibleChannels.uget(i);
+                        draw_fades2(&xr, s, c, &head_cut, &tail_cut, samples, i & 1);
                         xr.nTop            += xr.nHeight;
                     }
 
@@ -1029,7 +1068,7 @@ namespace lsp
                     xr.nTop             = y;
                     for (size_t i=0; i<items; ++i)
                     {
-                        AudioChannel *c     = vVisible.uget(i);
+                        AudioChannel *c     = vVisibleChannels.uget(i);
                         draw_play_position(&xr, s, c, samples);
                         xr.nTop            += xr.nHeight;
                     }
@@ -1040,7 +1079,7 @@ namespace lsp
                     xr.nTop             = y;
                     for (size_t i=0; i<items; ++i)
                     {
-                        AudioChannel *c     = vVisible.uget(i);
+                        AudioChannel *c     = vVisibleChannels.uget(i);
                         draw_channel1(&xr, s, c, samples, sMaxAmplitude.get());
                         xr.nTop            += xr.nHeight;
                     }
@@ -1049,7 +1088,7 @@ namespace lsp
                     xr.nTop             = y;
                     for (size_t i=0; i<items; ++i)
                     {
-                        AudioChannel *c     = vVisible.uget(i);
+                        AudioChannel *c     = vVisibleChannels.uget(i);
 
                         // Define ranges
                         range_t stretch = {
@@ -1076,8 +1115,8 @@ namespace lsp
                     xr.nTop             = y;
                     for (size_t i=0; i<items; ++i)
                     {
-                        AudioChannel *c     = vVisible.uget(i);
-                        draw_fades1(&xr, s, c, samples);
+                        AudioChannel *c     = vVisibleChannels.uget(i);
+                        draw_fades1(&xr, s, c, &head_cut, &tail_cut, samples);
                         xr.nTop            += xr.nHeight;
                     }
 
@@ -1098,13 +1137,31 @@ namespace lsp
                     xr.nTop             = y;
                     for (size_t i=0; i<items; ++i)
                     {
-                        AudioChannel *c     = vVisible.uget(i);
+                        AudioChannel *c     = vVisibleChannels.uget(i);
                         draw_play_position(&xr, s, c, samples);
                         xr.nTop            += xr.nHeight;
                     }
                 }
             }
 
+            // Draw envelopes
+            {
+                const ws::point_t origin = s->set_origin(-sGraph.nLeft, -sGraph.nTop);
+                lsp_finally { s->set_origin(origin); };
+
+                for (size_t i=0; i<vVisibleEnvelopes.size(); ++i)
+                {
+                    ws::rectangle_t cr = sGraph;
+
+                    tk::AudioEnvelope *envelope = vEnvelopes.get(i);
+                    envelope->ipadding()->enter(&cr, scaling);
+                    cr.nLeft       += head_cut;
+                    cr.nWidth      -= head_cut + tail_cut;
+                    envelope->draw_curve(s, bright, scaling, &cr);
+                    envelope->commit_redraw();
+                }
+            }
+
             // Draw labels
             for (size_t i=0; i<LABELS; ++i)
             {
@@ -1116,7 +1173,7 @@ namespace lsp
             // Commit redraw for children
             for (size_t i=0; i<items; ++i)
             {
-                AudioChannel *c     = vVisible.uget(i);
+                AudioChannel *c     = vVisibleChannels.uget(i);
                 c->commit_redraw();
             }
         }
@@ -1129,7 +1186,7 @@ namespace lsp
             float scaling   = lsp_max(0.0f, sScaling.get());
             float xr        = lsp_max(0.0f, sBorderRadius.get() * scaling); // external radius
             float bw        = lsp_max(0.0f, sBorder.get() * scaling);       // border size
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
             bool pressed    = nXFlags & XF_DOWN;
 
             // Prepare palette
@@ -1209,7 +1266,7 @@ namespace lsp
             drop_glass();
         }
 
-        void AudioSample::get_visible_items(lltl::parray<AudioChannel> *dst)
+        void AudioSample::get_visible_channels(lltl::parray<AudioChannel> *dst)
         {
             for (size_t i=0, n=vChannels.size(); i<n; ++i)
             {
@@ -1221,53 +1278,96 @@ namespace lsp
             }
         }
 
+        void AudioSample::get_visible_envelopes(lltl::parray<AudioEnvelope> *dst)
+        {
+            for (size_t i=0, n=vEnvelopes.size(); i<n; ++i)
+            {
+                AudioEnvelope *e = vEnvelopes.get(i);
+                if ((e == NULL) || (!e->visibility()->get()))
+                    continue;
+                if (!dst->add(e))
+                    return;
+            }
+        }
+
         void AudioSample::on_add_item(void *obj, Property *prop, void *w)
         {
-            AudioChannel *item = widget_ptrcast<AudioChannel>(w);
+            Widget *item = widget_ptrcast<Widget>(w);
             if (item == NULL)
                 return;
 
-            AudioSample *_this = widget_ptrcast<AudioSample>(obj);
-            if (_this == NULL)
+            AudioSample *self = widget_ptrcast<AudioSample>(obj);
+            if (self == NULL)
                 return;
 
-            item->set_parent(_this);
-            _this->query_resize();
+            item->set_parent(self);
+            self->query_resize();
         }
 
         void AudioSample::on_remove_item(void *obj, Property *prop, void *w)
         {
-            AudioChannel *item = widget_ptrcast<AudioChannel>(w);
+            Widget *item = widget_ptrcast<Widget>(w);
             if (item == NULL)
                 return;
 
-            AudioSample *_this = widget_ptrcast<AudioSample>(obj);
-            if (_this == NULL)
+            AudioSample *self = widget_ptrcast<AudioSample>(obj);
+            if (self == NULL)
                 return;
 
             // Remove widget from supplementary structures
-            _this->unlink_widget(item);
-            _this->query_resize();
+            self->unlink_widget(item);
+            self->query_resize();
         }
 
         status_t AudioSample::add(Widget *widget)
         {
-            AudioChannel *item  = widget_cast<AudioChannel>(widget);
-            return (item != NULL) ? vChannels.add(item) : STATUS_BAD_TYPE;
+            AudioChannel *channel = widget_cast<AudioChannel>(widget);
+            if (channel != NULL)
+                return vChannels.add(channel);
+
+            AudioEnvelope *envelope = widget_cast<AudioEnvelope>(widget);
+            if (envelope != NULL)
+                return vEnvelopes.add(envelope);
+
+            return STATUS_BAD_TYPE;
         }
 
         status_t AudioSample::remove(Widget *child)
         {
-            AudioChannel *item  = widget_cast<AudioChannel>(child);
-            return (item != NULL) ? vChannels.premove(item) : STATUS_BAD_TYPE;
+            AudioChannel *channel = widget_cast<AudioChannel>(child);
+            if (channel != NULL)
+                return vChannels.premove(channel);
+
+            AudioEnvelope *envelope = widget_cast<AudioEnvelope>(child);
+            if (envelope != NULL)
+                return vEnvelopes.premove(envelope);
+
+            return STATUS_BAD_TYPE;
         }
 
         status_t AudioSample::remove_all()
         {
             vChannels.clear();
+            vEnvelopes.clear();
             return STATUS_OK;
         }
 
+        Widget *AudioSample::find_widget(ssize_t x, ssize_t y)
+        {
+            for (size_t i=0; i<vEnvelopes.size(); ++i)
+            {
+                tk::AudioEnvelope *envelope = vEnvelopes.get(i);
+                if ((envelope == NULL) || (!envelope->visibility()->get()))
+                    continue;
+
+                tk::AudioEnvelope::point_t *point = envelope->find_point(x, y);
+                if (point != NULL)
+                    return envelope;
+            }
+
+            return NULL;
+        }
+
         status_t AudioSample::on_mouse_down(const ws::event_t *e)
         {
             // Handle mouse event
@@ -1307,24 +1407,22 @@ namespace lsp
 
             if (Position::rinside(&sSize, e->nLeft, e->nTop, xr))
             {
-                if (sActive.get())
+                if ((e->nCode == ws::MCB_LEFT) && (flags & XF_LBUTTON))
                 {
-                    if ((e->nCode == ws::MCB_LEFT) && (flags & XF_LBUTTON))
-                    {
+                    if (sActive.get())
                         sSlots.execute(SLOT_SUBMIT, this, NULL);
-                    }
-                    else if ((e->nCode == ws::MCB_RIGHT) && (flags & XF_RBUTTON))
+                }
+                else if ((e->nCode == ws::MCB_RIGHT) && (flags & XF_RBUTTON))
+                {
+                    Menu *popup = sPopup.get();
+                    if (popup != NULL)
                     {
-                        Menu *popup = sPopup.get();
-                        if (popup != NULL)
-                        {
-                            ws::rectangle_t sr;
-                            Window *wnd = widget_cast<Window>(this->toplevel());
-                            wnd->get_screen_rectangle(&sr);
-                            sr.nLeft       += e->nLeft;
-                            sr.nTop        += e->nTop;
-                            popup->show(this, sr.nLeft, sr.nTop);
-                        }
+                        ws::rectangle_t sr;
+                        Window *wnd = widget_cast<Window>(this->toplevel());
+                        wnd->get_screen_rectangle(&sr);
+                        sr.nLeft       += e->nLeft;
+                        sr.nTop        += e->nTop;
+                        popup->show(this, sr.nLeft, sr.nTop);
                     }
                 }
             }
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/FileButton.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/FileButton.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/FileButton.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/FileButton.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -57,7 +57,6 @@ namespace lsp
                 sTextPadding.bind("text.padding", this);
                 sConstraints.bind("size.constraints", this);
                 sGradient.bind("gradient", this);
-                sActive.bind("active", this);
                 sBorderSize.bind("border.size", this);
                 sBorderPressedSize.bind("border.pressed.size", this);
 
@@ -88,7 +87,6 @@ namespace lsp
                 sTextPadding.set(2, 2, 2, 2);
                 sConstraints.set_all(-1);
                 sGradient.set(true);
-                sActive.set(true);
                 sBorderSize.set(4);
                 sBorderPressedSize.set(3);
 
@@ -133,7 +131,6 @@ namespace lsp
             sTextPadding(&sProperties),
             sConstraints(&sProperties),
             sGradient(&sProperties),
-            sActive(&sProperties),
             sBorderSize(&sProperties),
             sBorderPressedSize(&sProperties)
         {
@@ -190,7 +187,6 @@ namespace lsp
             sTextPadding.bind("text.padding", &sStyle);
             sConstraints.bind("size.constraints", &sStyle);
             sGradient.bind("gradient", &sStyle);
-            sActive.bind("active", &sStyle);
             sBorderSize.bind("border.size", &sStyle);
             sBorderPressedSize.bind("border.pressed.size", &sStyle);
 
@@ -216,9 +212,6 @@ namespace lsp
             if (colors->property_changed(prop))
                 query_draw();
 
-            if (sActive.is(prop))
-                query_draw();
-
             if (prop->one_of(sValue, sGradient))
                 query_draw();
 
@@ -299,10 +292,10 @@ namespace lsp
             sButton.nTop            = r->nTop  + ((r->nHeight - sButton.nHeight) >> 1);
         }
 
-        void FileButton::draw(ws::ISurface *s)
+        void FileButton::draw(ws::ISurface *s, bool force)
         {
             float v                 = sValue.get_normalized();
-            float bright            = sBrightness.get();
+            float bright            = select_brightness();
             lsp::Color bg;
             const style::FileButtonColors *colors = select_colors();
 
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/Fraction.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/Fraction.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/Fraction.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/Fraction.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -52,7 +52,6 @@ namespace lsp
                 sAngle.bind("angle", this);
                 sTextPad.bind("text.pad", this);
                 sThick.bind("thick", this);
-                sActive.bind("active", this);
 
                 // Configure
                 c = &vColors[style::FRACTION_NORMAL];
@@ -69,7 +68,6 @@ namespace lsp
                 sAngle.set(60.0f);
                 sTextPad.set(6);
                 sThick.set(1);
-                sActive.set(true);
 
                 // Override
                 sFont.override();
@@ -285,8 +283,7 @@ namespace lsp
             sFont(&sProperties),
             sAngle(&sProperties),
             sTextPad(&sProperties),
-            sThick(&sProperties),
-            sActive(&sProperties)
+            sThick(&sProperties)
         {
             pClass          = &metadata;
 
@@ -372,7 +369,6 @@ namespace lsp
             sAngle.bind("angle", &sStyle);
             sTextPad.bind("text.pad", &sStyle);
             sThick.bind("thick", &sStyle);
-            sActive.bind("active", &sStyle);
 
             // Bind slots
             handler_id_t id;
@@ -401,9 +397,6 @@ namespace lsp
             if (colors->property_changed(prop))
                 query_draw();
 
-            if (sActive.is(prop))
-                query_draw();
-
             if (prop->one_of(sFont, sAngle, sTextPad, sThick))
                 query_resize();
         }
@@ -519,7 +512,7 @@ namespace lsp
             Widget::realize(r);
         }
 
-        void Fraction::draw(ws::ISurface *s)
+        void Fraction::draw(ws::ISurface *s, bool force)
         {
             LSPString num, den;
 
@@ -528,7 +521,7 @@ namespace lsp
 
             float scaling   = lsp_max(0.0f, sScaling.get());
             float fscaling  = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright    = sBrightness.get();
+            float bright    = select_brightness();
             float angle     = sAngle.get() * M_PI / 180.0f;
             float lw        = lsp_max(1.0f, sThick.get() * scaling * ((sFont.bold()) ? 2.0f : 1.0f));
             const style::FractionColors *colors = select_colors();
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/LedMeter.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/LedMeter.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/LedMeter.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/LedMeter.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -618,11 +618,11 @@ namespace lsp
             vVisible.swap(&list);
         }
 
-        void LedMeter::draw(ws::ISurface *s)
+        void LedMeter::draw(ws::ISurface *s, bool force)
         {
             float scaling       = lsp_max(0.0f, sScaling.get());
             float fscaling      = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
             bool has_text       = sTextVisible.get();
             bool has_header     = sHeaderVisible.get();
             ssize_t angle       = sAngle.get();
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/LedMeterChannel.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/LedMeterChannel.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/main/widgets/specific/LedMeterChannel.cpp	2025-03-01 12:42:57.420644616 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/main/widgets/specific/LedMeterChannel.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -50,7 +50,6 @@ namespace lsp
                 sTextVisible.bind("text.visible", this);
                 sHeaderVisible.bind("header.visible", this);
                 sReversive.bind("reversive", this);
-                sActive.bind("active", this);
                 sMinSegments.bind("segments.min", this);
                 sConstraints.bind("constraints", this);
                 sFont.bind("font", this);
@@ -78,7 +77,6 @@ namespace lsp
                 sTextVisible.set(false);
                 sHeaderVisible.set(false);
                 sReversive.set(false);
-                sActive.set(true);
                 sMinSegments.set(12);
                 sConstraints.set(20, -1, 20, -1);
                 sFont.set_size(9.0f);
@@ -117,7 +115,6 @@ namespace lsp
             sBalanceVisible(&sProperties),
             sTextVisible(&sProperties),
             sReversive(&sProperties),
-            sActive(&sProperties),
             sMinSegments(&sProperties),
             sConstraints(&sProperties),
             sFont(&sProperties),
@@ -182,7 +179,6 @@ namespace lsp
             sTextVisible.bind("text.visible", &sStyle);
             sHeaderVisible.bind("header.visible", &sStyle);
             sReversive.bind("reversive", &sStyle);
-            sActive.bind("active", &sStyle);
             sMinSegments.bind("segments.min", &sStyle);
             sConstraints.bind("constraints", &sStyle);
             sFont.bind("font", &sStyle);
@@ -238,8 +234,6 @@ namespace lsp
                 query_draw();
             if (sReversive.is(prop))
                 query_draw();
-            if (sActive.is(prop))
-                query_draw();
             if (sMinSegments.is(prop))
                 query_resize();
             if (sConstraints.is(prop))
@@ -702,11 +696,11 @@ namespace lsp
             s->clip_end();
         }
 
-        void LedMeterChannel::draw(ws::ISurface *s)
+        void LedMeterChannel::draw(ws::ISurface *s, bool force)
         {
             float scaling       = lsp_max(0.0f, sScaling.get());
             float fscaling      = lsp_max(0.0f, scaling * sFontScaling.get());
-            float bright        = sBrightness.get();
+            float bright        = select_brightness();
 
             lsp::Color col;
             get_actual_bg_color(col);
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/test/mtest/sys/win_actions.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/test/mtest/sys/win_actions.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/test/mtest/sys/win_actions.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/test/mtest/sys/win_actions.cpp	2025-08-26 18:15:44.113999526 +0000
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 5 мая 2020 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/test-fw/mtest.h>
+#include <lsp-plug.in/tk/tk.h>
+
+MTEST_BEGIN("tk.sys", win_actions)
+
+    static status_t slot_close(tk::Widget *sender, void *ptr, void *data)
+    {
+        sender->display()->quit_main();
+        return STATUS_OK;
+    }
+
+    static status_t slot_key_up(tk::Widget *sender, void *ptr, void *data)
+    {
+        tk::Window *wnd = tk::widget_cast<tk::Window>(sender);
+        ws::event_t *ev = static_cast<ws::event_t *>(data);
+        test_type_t *_this = static_cast<test_type_t *>(ptr);
+
+        if ((wnd != NULL) && (ev != NULL) && (ev->nType == ws::UIE_KEY_UP))
+        {
+            _this->printf("Key up: %c (0x%x)\n", (char)ev->nCode, int(ev->nCode));
+
+            if ((ev->nCode == '+') || (ev->nCode == ws::WSK_KEYPAD_ADD))
+                wnd->style()->schema()->scaling()->add(0.25f);
+            else if ((ev->nCode == '-') || (ev->nCode == ws::WSK_KEYPAD_SUBTRACT))
+                wnd->style()->schema()->scaling()->sub(0.25f);
+        }
+        return STATUS_OK;
+    }
+
+    static status_t slot_state(tk::Widget *sender, void *ptr, void *data)
+    {
+        tk::Window *wnd = tk::widget_cast<tk::Window>(sender);
+        test_type_t *_this = static_cast<test_type_t *>(ptr);
+
+        _this->printf("Window state is now: %d\n", int(wnd->state()->get()));
+        return STATUS_OK;
+    }
+
+    static status_t slot_minimize(tk::Widget *sender, void *ptr, void *data)
+    {
+        tk::Window *wnd = static_cast<tk::Window *>(ptr);
+        wnd->state()->set_minimized();
+        return STATUS_OK;
+    }
+
+    static status_t slot_maximize(tk::Widget *sender, void *ptr, void *data)
+    {
+        tk::Window *wnd = static_cast<tk::Window *>(ptr);
+        wnd->state()->set_maximized();
+        return STATUS_OK;
+    }
+
+    static status_t slot_restore(tk::Widget *sender, void *ptr, void *data)
+    {
+        tk::Window *wnd = static_cast<tk::Window *>(ptr);
+        wnd->state()->set_normal();
+        return STATUS_OK;
+    }
+
+    MTEST_MAIN
+    {
+        tk::Display *dpy = new tk::Display();
+        MTEST_ASSERT(dpy != NULL);
+        lsp_finally { delete dpy; };
+
+        MTEST_ASSERT(dpy->init(0, NULL) == STATUS_OK);
+
+        // Create widgets
+        tk::Window *wnd = new tk::Window(dpy);
+        lsp_finally {
+            wnd->destroy();
+            delete wnd;
+        };
+        tk::Box *box = new tk::Box(dpy);
+        lsp_finally {
+            box->destroy();
+            delete box;
+        };
+        tk::Button *minimize = new tk::Button(dpy);
+        lsp_finally {
+            minimize->destroy();
+            delete minimize;
+        };
+        tk::Button *maximize = new tk::Button(dpy);
+        lsp_finally {
+            maximize->destroy();
+            delete maximize;
+        };
+        tk::Button *restore = new tk::Button(dpy);
+        lsp_finally {
+            restore->destroy();
+            delete restore;
+        };
+
+
+        // Initialize window
+        MTEST_ASSERT(wnd->init() == STATUS_OK);
+        MTEST_ASSERT(wnd->title()->set_raw("Test window") == STATUS_OK);
+        MTEST_ASSERT(wnd->role()->set_raw("test") == STATUS_OK);
+        wnd->bg_color()->set_rgb(0, 0.75, 1.0);
+        wnd->actions()->set_actions(ws::WA_MOVE | ws::WA_RESIZE | ws::WA_CLOSE | ws::WA_MINIMIZE | ws::WA_MAXIMIZE);
+        wnd->border_style()->set(ws::BS_SINGLE);
+        wnd->constraints()->set(160, 100, 640, 400);
+        wnd->size()->set(320, 200);
+        wnd->slot(tk::SLOT_CLOSE)->bind(slot_close, this);
+        wnd->slot(tk::SLOT_KEY_UP)->bind(slot_key_up, this);
+        wnd->slot(tk::SLOT_STATE)->bind(slot_state, this);
+        wnd->layout()->set(-0.5, 0.5, 0.5, 0.5);
+
+        // Initialize void widget
+        MTEST_ASSERT(box->init() == STATUS_OK);
+        box->orientation()->set_horizontal();
+        MTEST_ASSERT(wnd->add(box) == STATUS_OK);
+
+        MTEST_ASSERT(minimize->init() == STATUS_OK);
+        minimize->text()->set_raw("Minimize");
+        minimize->slot(tk::SLOT_SUBMIT)->bind(slot_minimize, wnd);
+        MTEST_ASSERT(box->add(minimize) == STATUS_OK);
+
+        MTEST_ASSERT(maximize->init() == STATUS_OK);
+        maximize->text()->set_raw("Maximize");
+        maximize->slot(tk::SLOT_SUBMIT)->bind(slot_maximize, wnd);
+        MTEST_ASSERT(box->add(maximize) == STATUS_OK);
+
+        MTEST_ASSERT(restore->init() == STATUS_OK);
+        restore->text()->set_raw("Restore");
+        restore->slot(tk::SLOT_SUBMIT)->bind(slot_restore, wnd);
+        MTEST_ASSERT(box->add(restore) == STATUS_OK);
+
+        // Show window
+        wnd->visibility()->set(true);
+
+        MTEST_ASSERT(dpy->main() == STATUS_OK);
+    }
+
+MTEST_END
+
+
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/test/mtest/widgets/containers/overlay.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/test/mtest/widgets/containers/overlay.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/test/mtest/widgets/containers/overlay.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/test/mtest/widgets/containers/overlay.cpp	2025-08-26 18:15:44.117999486 +0000
@@ -0,0 +1,388 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 29 мар. 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/test-fw/mtest.h>
+#include <lsp-plug.in/tk/tk.h>
+#include <private/mtest/tk/common.h>
+
+namespace
+{
+    typedef struct ov_position_t
+    {
+        float           nLeft;
+        float           nTop;
+    } ov_position_t;
+
+    static const ov_position_t ov_positions[] =
+    {
+        { 0.25f, 0.25f },
+        { 0.25f, 0.75f },
+        { 0.75f, 0.25f },
+        { 0.75f, 0.75f },
+    };
+}
+
+MTEST_BEGIN("tk.widgets.containers", overlay)
+    typedef struct handler_t
+    {
+        test_type_t    *test;
+        char           *label;
+    } handler_t;
+
+    static status_t slot_close(tk::Widget *sender, void *ptr, void *data)
+    {
+        sender->display()->quit_main();
+        return STATUS_OK;
+    }
+
+    static status_t slot_key_up(tk::Widget *sender, void *ptr, void *data)
+    {
+        tk::Window *wnd = tk::widget_cast<tk::Window>(sender);
+        ws::event_t *ev = static_cast<ws::event_t *>(data);
+        test_type_t *_this = static_cast<test_type_t *>(ptr);
+
+        if ((wnd != NULL) && (ev != NULL) && (ev->nType == ws::UIE_KEY_UP))
+        {
+            _this->printf("Key up: %c (0x%x)\n", (char)ev->nCode, int(ev->nCode));
+
+            if ((ev->nCode == '+') || (ev->nCode == ws::WSK_KEYPAD_ADD))
+                wnd->style()->schema()->scaling()->add(0.25f);
+            else if ((ev->nCode == '-') || (ev->nCode == ws::WSK_KEYPAD_SUBTRACT))
+                wnd->style()->schema()->scaling()->sub(0.25f);
+        }
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_in(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_IN: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_out(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_OUT: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_move(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_MOVE: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_down(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_DOWN: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_up(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_UP: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_click(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_CLICK: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_dbl_click(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_DBL_CLICK: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_tri_click(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_TRI_CLICK: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static void destroy_handlers(lltl::parray<handler_t> &vh)
+    {
+        for (size_t i=0, n=vh.size(); i<n; ++i)
+        {
+            handler_t *h = vh.uget(i);
+            ::free(h->label);
+            delete h;
+        }
+    }
+
+    status_t init_widget(tk::Widget *w, lltl::parray<handler_t> &vh, const char *label)
+    {
+        status_t res = w->init();
+        if (res != STATUS_OK)
+            return res;
+
+        handler_t *h = new handler_t;
+        if ((h == NULL) || (!vh.add(h)))
+            return STATUS_NO_MEM;
+        h->test     = this;
+        h->label    = ::strdup(label);
+
+        tk::handler_id_t hid;
+        hid = w->slots()->bind(tk::SLOT_MOUSE_IN, slot_mouse_in, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_DOWN, slot_mouse_down, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_MOVE, slot_mouse_move, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_UP, slot_mouse_up, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_CLICK, slot_mouse_click, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_DBL_CLICK, slot_mouse_dbl_click, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_TRI_CLICK, slot_mouse_tri_click, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_OUT, slot_mouse_out, h);
+
+        if (hid < 0)
+            res = -hid;
+
+        return res;
+    }
+
+    status_t create_group(
+        tk::WidgetContainer *dst,
+        lltl::parray<tk::Widget> & widgets,
+        lltl::parray<handler_t> & vh,
+        int gid)
+    {
+        LSPString id;
+        tk::Display *dpy = dst->display();
+
+        // Create group
+        tk::Group *gr;
+        MTEST_ASSERT(id.fmt_ascii("group-%d", gid));
+        MTEST_ASSERT(gr = new tk::Group(dpy));
+        MTEST_ASSERT(init_widget(gr, vh, id.get_ascii()) == STATUS_OK);
+        MTEST_ASSERT(widgets.push(gr));
+        MTEST_ASSERT(dst->add(gr) == STATUS_OK);
+
+        MTEST_ASSERT(id.fmt_ascii("Test Group #%d", gid));
+        gr->text()->set_raw(&id);
+        gr->show_text()->set(true);
+
+        // Create box
+        tk::Box *box;
+        MTEST_ASSERT(id.fmt_ascii("box-%d", gid));
+        MTEST_ASSERT(box = new tk::Box(dpy));
+        MTEST_ASSERT(init_widget(box, vh, id.get_ascii()) == STATUS_OK);
+        MTEST_ASSERT(widgets.push(box));
+        MTEST_ASSERT(gr->add(box) == STATUS_OK);
+        box->orientation()->set_horizontal();
+
+        // Create knobs
+        for (size_t x=0; x<3; ++x)
+        {
+            tk::Knob *kn;
+            MTEST_ASSERT(id.fmt_ascii("knob-%d-%d", gid, x));
+            MTEST_ASSERT(kn = new tk::Knob(dpy));
+            MTEST_ASSERT(init_widget(kn, vh, id.get_ascii()) == STATUS_OK);
+            MTEST_ASSERT(widgets.push(kn));
+            MTEST_ASSERT(box->add(kn) == STATUS_OK);
+
+            kn->size()->set(48, 64);
+            kn->scale_color()->set_rgb24(test::colors[x]);
+            kn->scale()->set(4);
+            kn->value()->set_all(0.5f, 0.0f, 1.0f);
+            kn->step()->set_step(0.001f, 10.0f, 0.1f);
+        }
+
+        return STATUS_OK;
+    }
+
+    static bool overlay_position_func(ws::rectangle_t *rect, tk::Overlay *overlay, void *data)
+    {
+        const ov_position_t *pos = static_cast<const ov_position_t *>(data);
+
+        tk::Window *wnd = tk::widget_cast<tk::Window>(overlay->toplevel());
+        if (wnd == NULL)
+            return false;
+
+        ws::rectangle_t r;
+        wnd->get_rectangle(&r);
+
+        rect->nLeft     = r.nWidth * pos->nLeft - rect->nWidth * 0.5f;
+        rect->nTop      = r.nHeight * pos->nTop - rect->nHeight * 0.5f;
+
+        return true;
+    }
+
+    tk::Overlay *create_overlay(
+        tk::Window *wnd,
+        lltl::parray<tk::Widget> & widgets,
+        lltl::parray<handler_t> & vh,
+        int ovid,
+        const ov_position_t *position)
+    {
+        LSPString id;
+        tk::Display *dpy = wnd->display();
+
+        tk::Overlay *ov;
+        MTEST_ASSERT(id.fmt_ascii("overlay-%d", ovid));
+        MTEST_ASSERT(ov = new tk::Overlay(dpy));
+        MTEST_ASSERT(init_widget(ov, vh, id.get_ascii()) == STATUS_OK);
+        MTEST_ASSERT(widgets.push(ov));
+        MTEST_ASSERT(wnd->add(ov) == STATUS_OK);
+
+        MTEST_ASSERT(create_group(ov, widgets, vh, ovid + 9) == STATUS_OK);
+
+        ov->set_position_function(overlay_position_func, const_cast<ov_position_t *>(position));
+        ov->transparency()->set(0.1f);
+        ov->padding()->set_all(72);
+
+        return ov;
+    }
+
+    static status_t show_overlay(tk::Widget *sender, void *ptr, void *data)
+    {
+        tk::Overlay *ov = static_cast<tk::Overlay *>(ptr);
+        ov->visibility()->set(true);
+
+        return STATUS_OK;
+    }
+
+    MTEST_MAIN
+    {
+        lltl::parray<handler_t> vh;
+
+        tk::Display *dpy = new tk::Display();
+        MTEST_ASSERT(dpy != NULL);
+
+        MTEST_ASSERT(dpy->init(0, NULL) == STATUS_OK);
+
+        lltl::parray<tk::Widget> widgets;
+        tk::Widget *w = NULL;
+        tk::Window *wnd = new tk::Window(dpy);
+        tk::Grid *grid = NULL;
+
+        // Initialize window
+        MTEST_ASSERT(init_widget(wnd, vh, "window") == STATUS_OK);
+        MTEST_ASSERT(wnd->title()->set_raw("Test overlay") == STATUS_OK);
+        MTEST_ASSERT(wnd->role()->set_raw("overlay_test") == STATUS_OK);
+        wnd->bg_color()->set_rgb(0, 0.75, 1.0);
+        wnd->actions()->set_actions(ws::WA_MOVE | ws::WA_RESIZE | ws::WA_CLOSE);
+        wnd->border_style()->set(ws::BS_DIALOG);
+        wnd->constraints()->set(160, 100, 960, 600);
+        wnd->size()->set(320, 200);
+        wnd->slot(tk::SLOT_CLOSE)->bind(slot_close, this);
+        wnd->slot(tk::SLOT_KEY_UP)->bind(slot_key_up, this);
+        wnd->pointer()->set(ws::MP_TABLE_CELL);
+        wnd->layout()->set(-0.5, 0.5, 0.5, 0.5);
+        MTEST_ASSERT(widgets.push(wnd));
+
+        // Create grid
+        MTEST_ASSERT(grid = new tk::Grid(dpy));
+        MTEST_ASSERT(init_widget(grid, vh, "grid") == STATUS_OK);
+        MTEST_ASSERT(widgets.push(grid));
+        MTEST_ASSERT(wnd->add(grid) == STATUS_OK);
+        grid->padding()->set_all(4);
+        grid->hspacing()->set(8);
+        grid->vspacing()->set(4);
+        grid->bg_color()->set_rgb(1.0, 0.75, 1.0);
+        grid->rows()->set(4);
+        grid->columns()->set(3);
+
+        // Create groups
+        for (size_t i=0; i<9; ++i)
+            MTEST_ASSERT(create_group(grid, widgets, vh, i) == STATUS_OK);
+
+        tk::Overlay *ovv[4], *ov;
+        MTEST_ASSERT(ovv[0] = create_overlay(wnd, widgets, vh, 0, &ov_positions[0]));
+        ov = ovv[0];
+        ov->auto_close()->set(false);
+        ov->border_color()->set_rgb24(0xff0000);
+        ov->border_rounding()->set_all();
+
+        MTEST_ASSERT(ovv[1] = create_overlay(wnd, widgets, vh, 1, &ov_positions[1]));
+        ov = ovv[1];
+        ov->auto_close()->set(false);
+        ov->border_color()->set_rgb24(0x008800);
+        ov->border_size()->set(2);
+
+        MTEST_ASSERT(ovv[2] = create_overlay(wnd, widgets, vh, 2, &ov_positions[2]));
+        ov = ovv[2];
+        ov->auto_close()->set(false);
+        ov->border_color()->set_rgb24(0x0000ff);
+        ov->border_rounding()->set_corners(ws::CORNERS_RIGHT | ws::CORNERS_BOTTOM);
+        ov->border_size()->set(2);
+
+        MTEST_ASSERT(ovv[3] = create_overlay(wnd, widgets, vh, 3, &ov_positions[3]));
+        ov = ovv[3];
+        ov->auto_close()->set(true);
+        ov->border_rounding()->set_corners(ws::CORNERS_RIGHT | ws::CORNERS_BOTTOM);
+        ov->border_color()->set_rgb24(0xff0000);
+        ov->border_size()->set(2);
+
+        // Add two void widgets
+        tk::Void *v;
+        for (size_t i=0; i<2; ++i)
+        {
+            MTEST_ASSERT(v = new tk::Void(dpy));
+            MTEST_ASSERT(init_widget(v, vh, "void") == STATUS_OK);
+            MTEST_ASSERT(widgets.push(v));
+            MTEST_ASSERT(grid->add(v) == STATUS_OK);
+        }
+
+        // Add Button for activating overlay
+        tk::Button *btn;
+        MTEST_ASSERT(btn = new tk::Button(dpy));
+        MTEST_ASSERT(init_widget(btn, vh, "button") == STATUS_OK);
+        MTEST_ASSERT(widgets.push(btn));
+        MTEST_ASSERT(grid->add(btn) == STATUS_OK);
+
+        btn->text()->set_raw("Show overlay");
+        btn->slots()->bind(tk::SLOT_SUBMIT, show_overlay, ovv[3]);
+
+        // Show window
+        wnd->visibility()->set(true);
+
+        MTEST_ASSERT(dpy->main() == STATUS_OK);
+
+        while ((w = widgets.pop()) != NULL)
+        {
+            w->destroy();
+            delete w;
+        }
+
+        dpy->destroy();
+        delete dpy;
+        destroy_handlers(vh);
+    }
+
+MTEST_END
+
+
+
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/test/mtest/widgets/specific/audioenvelope.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/test/mtest/widgets/specific/audioenvelope.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/test/mtest/widgets/specific/audioenvelope.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/test/mtest/widgets/specific/audioenvelope.cpp	2025-08-26 18:15:44.117999486 +0000
@@ -0,0 +1,435 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 5 июн. 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/test-fw/mtest.h>
+#include <lsp-plug.in/tk/tk.h>
+#include <private/mtest/tk/common.h>
+
+MTEST_BEGIN("tk.widgets.specific", audioenvelope)
+    typedef struct handler_t
+    {
+        test_type_t    *test;
+        char           *label;
+    } handler_t;
+
+    static status_t slot_close(tk::Widget *sender, void *ptr, void *data)
+    {
+        sender->display()->quit_main();
+        return STATUS_OK;
+    }
+
+    static status_t slot_key_up(tk::Widget *sender, void *ptr, void *data)
+    {
+        tk::Window *wnd = tk::widget_cast<tk::Window>(sender);
+        ws::event_t *ev = static_cast<ws::event_t *>(data);
+        test_type_t *_this = static_cast<test_type_t *>(ptr);
+
+        if ((wnd != NULL) && (ev != NULL) && (ev->nType == ws::UIE_KEY_UP))
+        {
+            _this->printf("Key up: %c (0x%x)\n", (char)ev->nCode, int(ev->nCode));
+
+            if ((ev->nCode == '+') || (ev->nCode == ws::WSK_KEYPAD_ADD))
+                wnd->style()->schema()->scaling()->add(0.25f);
+            else if ((ev->nCode == '-') || (ev->nCode == ws::WSK_KEYPAD_SUBTRACT))
+                wnd->style()->schema()->scaling()->sub(0.25f);
+        }
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_in(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_IN: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_out(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_OUT: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_move(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_MOVE: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_down(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_DOWN: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_up(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_UP: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static void sync_text(tk::LedMeterChannel *lm)
+    {
+        LSPString tmp;
+        tmp.fmt_ascii("%.1f", lm->value()->get());
+        lm->text()->set_raw(&tmp);
+    }
+
+    static status_t slot_mouse_scroll(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_SCROLL: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_click(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_CLICK: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_dbl_click(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_DBL_CLICK: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_tri_click(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_TRI_CLICK: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    status_t init_widget(tk::Widget *w, lltl::parray<handler_t> &vh, const char *label)
+    {
+        status_t res = w->init();
+        if (res != STATUS_OK)
+            return res;
+
+        handler_t *h = new handler_t;
+        if ((h == NULL) || (!vh.add(h)))
+            return STATUS_NO_MEM;
+        h->test     = this;
+        h->label    = ::strdup(label);
+
+        tk::handler_id_t hid;
+        hid = w->slots()->bind(tk::SLOT_MOUSE_IN, slot_mouse_in, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_DOWN, slot_mouse_down, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_MOVE, slot_mouse_move, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_UP, slot_mouse_up, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_SCROLL, slot_mouse_scroll, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_CLICK, slot_mouse_click, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_DBL_CLICK, slot_mouse_dbl_click, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_TRI_CLICK, slot_mouse_tri_click, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_OUT, slot_mouse_out, h);
+
+        if (hid < 0)
+            res = -hid;
+
+        return res;
+    }
+
+    static void destroy_handlers(lltl::parray<handler_t> &vh)
+    {
+        for (size_t i=0, n=vh.size(); i<n; ++i)
+        {
+            handler_t *h = vh.uget(i);
+            ::free(h->label);
+            delete h;
+        }
+    }
+
+    void init_values(tk::AudioChannel *ac)
+    {
+        tk::FloatArray *fa = ac->samples();
+        MTEST_ASSERT(fa->resize(256) == STATUS_OK);
+        float kf = 8.0f * M_PI / fa->size();
+        for (size_t i=0; i<fa->size(); ++i)
+            fa->set(i, sinf(i * kf));
+    }
+
+    void add_samples(tk::AudioSample *as, lltl::parray<tk::Widget> &widgets, lltl::parray<handler_t> &vh, size_t &vid, size_t count)
+    {
+        LSPString id;
+        tk::AudioChannel *ac = NULL;
+
+        static const float layout_x[] = { -1.0f, 1.0f, 0.0f, -1.0f, 1.0f };
+        static const float layout_y[] = { -1.0f, -1.0f, 0.0f, 1.0f, 1.0f };
+
+        float hue = 1.0f / count;
+        for (size_t i=0; i<count; ++i)
+        {
+            MTEST_ASSERT(id.fmt_ascii("audiochannel-%d", int(vid++)));
+            MTEST_ASSERT(ac = new tk::AudioChannel(as->display()));
+            MTEST_ASSERT(init_widget(ac, vh, id.get_ascii()) == STATUS_OK);
+            MTEST_ASSERT(widgets.push(ac));
+            MTEST_ASSERT(as->add(ac) == STATUS_OK);
+
+            init_values(ac);
+            ac->color()->set_rgba32(0x88ff0000);
+            ac->color()->hue(hue * i);
+            ac->wave_border_color()->set_rgb24(0xff0000);
+            ac->wave_border_color()->hue(hue * i);
+
+            ac->fade_in()->set(ac->samples()->size() * 0.5f * (i + 1) * hue);
+            ac->fade_out()->set(ac->samples()->size() * 0.5f * (i + 1) * hue);
+            ac->stretch_begin()->set(ac->fade_in()->get());
+            ac->stretch_end()->set(ac->fade_in()->get() + 32);
+            ac->loop_begin()->set(ac->samples()->size() - ac->fade_out()->get() - 32);
+            ac->loop_end()->set(ac->samples()->size() - ac->fade_out()->get());
+            ac->play_position()->set(ac->samples()->size() * 0.85f);
+        }
+
+        for (size_t i=0; i<5; ++i)
+        {
+            MTEST_ASSERT(id.fmt_ascii("label%d", int(i)));
+
+            as->label_visibility(i)->set(true);
+            as->label_layout(i)->set_align(layout_x[i], layout_y[i]);
+            as->label(i)->set(&id);
+        }
+    }
+
+    void add_samples_with_fades(tk::AudioSample *as, lltl::parray<tk::Widget> &widgets, lltl::parray<handler_t> &vh, size_t &vid, size_t count)
+    {
+        LSPString id;
+        tk::AudioChannel *ac = NULL;
+
+        static const float layout_x[] = { -1.0f, 1.0f, 0.0f, -1.0f, 1.0f };
+        static const float layout_y[] = { -1.0f, -1.0f, 0.0f, 1.0f, 1.0f };
+
+        float hue = 1.0f / count;
+        for (size_t i=0; i<count; ++i)
+        {
+            MTEST_ASSERT(id.fmt_ascii("audiochannel-%d", int(vid++)));
+            MTEST_ASSERT(ac = new tk::AudioChannel(as->display()));
+            MTEST_ASSERT(init_widget(ac, vh, id.get_ascii()) == STATUS_OK);
+            MTEST_ASSERT(widgets.push(ac));
+            MTEST_ASSERT(as->add(ac) == STATUS_OK);
+
+            init_values(ac);
+            ac->color()->set_rgba32(0x88ff0000);
+            ac->color()->hue(hue * i);
+            ac->wave_border_color()->set_rgb24(0xff0000);
+            ac->wave_border_color()->hue(hue * i);
+
+            ac->fade_in()->set(ac->samples()->size() * 0.25f * i * hue);
+            ac->fade_out()->set(ac->samples()->size() * 0.25f * i * hue);
+            ac->head_cut()->set(ac->samples()->size() * 0.25f * i * hue);
+            ac->tail_cut()->set(ac->samples()->size() * 0.25f * i * hue);
+            ac->play_position()->set(ac->samples()->size() * 0.85f);
+        }
+
+        for (size_t i=0; i<5; ++i)
+        {
+            MTEST_ASSERT(id.fmt_ascii("label%d", int(i)));
+
+            as->label_visibility(i)->set(true);
+            as->label_layout(i)->set_align(layout_x[i], layout_y[i]);
+            as->label(i)->set(&id);
+        }
+    }
+
+    static float make_line(float x, float x0, float y0, float x1, float y1, float curvature)
+    {
+        const float cx  = 0.5f * (x1 + x0);
+        const float cy  = y0 + curvature * (y1 - y0);
+
+        if (x <= cx)
+        {
+            const float k   = (cy - y0) / (cx - x0);
+            return y0 + k * (x - x0);
+        }
+
+        const float k   = (y1 - cy) / (x1 - cx);
+        return cy + k * (x - cx);
+    }
+
+    static void curve_function(float *vy, const float *vx, size_t count, const tk::AudioEnvelope *w, void *data)
+    {
+        for (size_t i=0; i<count; ++i)
+        {
+            const float x = vx[i];
+            if (x <= 0.0f)
+            {
+                vy[i]   = 0.0f;
+                continue;
+            }
+
+            const float attack = w->attack_time()->get();
+            if (x <= attack)
+            {
+                vy[i]   = make_line(x, 0.0f, 0.0f, attack, 1.0f, w->attack_curvature()->get());
+                continue;
+            }
+
+            const float hold = (w->hold_enabled()->get()) ? w->hold_time()->get() : attack;
+            if (x <= hold)
+            {
+                vy[i]   = 1.0f;
+                continue;
+            }
+
+            const float decay = w->decay_time()->get();
+            const float sustain_lvl = w->sustain_level()->get();
+            if (w->break_enabled()->get())
+            {
+                const float break_lvl = w->break_level()->get();
+                const float slope = w->slope_time()->get();
+                if (x <= decay)
+                {
+                    vy[i]   = make_line(x, hold, 1.0f, decay, break_lvl, w->decay_curvature()->get());
+                    continue;
+                }
+                if (x <= slope)
+                {
+                    vy[i]   = make_line(x, decay, break_lvl, slope, sustain_lvl, w->slope_curvature()->get());
+                    continue;
+                }
+            }
+            else
+            {
+                if (x <= decay)
+                {
+                    vy[i]   = make_line(x, hold, 1.0f, decay, sustain_lvl, w->decay_curvature()->get());
+                    continue;
+                }
+            }
+
+            const float release = w->release_time()->get();
+            if (x <= release)
+            {
+                vy[i]   = sustain_lvl;
+                continue;
+            }
+
+            if (x <= 1.0f)
+            {
+                vy[i]   = make_line(x, release, sustain_lvl, 1.0f, 0.0f, w->release_curvature()->get());
+                continue;
+            }
+            else
+                vy[i]   = 0.0f;
+        }
+    }
+
+    MTEST_MAIN
+    {
+        lltl::parray<handler_t> vh;
+
+        tk::Display *dpy = new tk::Display();
+        MTEST_ASSERT(dpy != NULL);
+
+        MTEST_ASSERT(dpy->init(0, NULL) == STATUS_OK);
+
+        lltl::parray<tk::Widget> widgets;
+        tk::Widget *w = NULL;
+        tk::Window *wnd = new tk::Window(dpy);
+        tk::Grid *grid = NULL;
+        tk::AudioEnvelope *ae = NULL;
+        size_t vid = 0;
+
+        // Initialize window
+        MTEST_ASSERT(init_widget(wnd, vh, "window") == STATUS_OK);
+        MTEST_ASSERT(wnd->title()->set_raw("Test audio sample") == STATUS_OK);
+        MTEST_ASSERT(wnd->role()->set_raw("audiosample_test") == STATUS_OK);
+        wnd->bg_color()->set_rgb(0, 0.75, 1.0);
+        wnd->actions()->set_actions(ws::WA_MOVE | ws::WA_RESIZE | ws::WA_CLOSE);
+        wnd->border_style()->set(ws::BS_DIALOG);
+//        wnd->border_size()->set(2);
+        wnd->border_color()->set_rgb(1.0f, 1.0f, 0.0f);
+        wnd->constraints()->set(160, 100, 640, 400);
+        wnd->size()->set(320, 200);
+        wnd->slot(tk::SLOT_CLOSE)->bind(slot_close, this);
+        wnd->slot(tk::SLOT_KEY_UP)->bind(slot_key_up, this);
+        wnd->pointer()->set(ws::MP_TABLE_CELL);
+        wnd->layout()->set(-0.5, 0.5, 0.5, 0.5);
+//        wnd->padding()->set_all(16);
+        MTEST_ASSERT(widgets.push(wnd));
+
+        // Create Grid
+        MTEST_ASSERT(grid = new tk::Grid(dpy));
+        MTEST_ASSERT(init_widget(grid, vh, "grid") == STATUS_OK);
+        MTEST_ASSERT(widgets.push(grid));
+        MTEST_ASSERT(wnd->add(grid) == STATUS_OK);
+        grid->bg_color()->set_rgb(1.0f, 1.0f, 1.0f);
+        grid->padding()->set(8);
+        grid->rows()->set(2);
+        grid->columns()->set(2);
+        grid->orientation()->set_horizontal();
+        grid->hspacing()->set(2);
+        grid->vspacing()->set(2);
+
+        // Create audio envelope widgets
+        LSPString id;
+
+        for (size_t i=0; i<4; ++i)
+        {
+            // Create audio envelope with points enabled
+            MTEST_ASSERT(id.fmt_ascii("audioenvelope-%d", int(vid++)));
+            MTEST_ASSERT(ae = new tk::AudioEnvelope(dpy));
+            MTEST_ASSERT(init_widget(ae, vh, id.get_ascii()) == STATUS_OK);
+            MTEST_ASSERT(widgets.push(ae));
+            MTEST_ASSERT(grid->add(ae) == STATUS_OK);
+
+            ae->break_enabled()->set(i & 1);
+            ae->hold_enabled()->set(i & 2);
+            ae->border_flat()->set(i & 1);
+            ae->border_radius()->set((i & 2) ? 0 : 12);
+            ae->constraints()->set_min(160, 100);
+            ae->ipadding()->set(ae->point_size()->get());
+            ae->quad_point()->set(i >= 2);
+            ae->set_curve_function(curve_function, this);
+        }
+
+        // Show window
+        wnd->visibility()->set(true);
+
+        MTEST_ASSERT(dpy->main() == STATUS_OK);
+
+        while ((w = widgets.pop()) != NULL)
+        {
+            w->destroy();
+            delete w;
+        }
+
+        dpy->destroy();
+        delete dpy;
+        destroy_handlers(vh);
+    }
+
+MTEST_END
+
diff -pruN 1.2.21-5/modules/lsp-tk-lib/src/test/mtest/widgets/specific/audiosample_env.cpp 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/test/mtest/widgets/specific/audiosample_env.cpp
--- 1.2.21-5/modules/lsp-tk-lib/src/test/mtest/widgets/specific/audiosample_env.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-tk-lib/src/test/mtest/widgets/specific/audiosample_env.cpp	2025-08-26 18:15:44.117999486 +0000
@@ -0,0 +1,348 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-tk-lib
+ * Created on: 6 июн. 2025 г.
+ *
+ * lsp-tk-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-tk-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/test-fw/mtest.h>
+#include <lsp-plug.in/tk/tk.h>
+#include <private/mtest/tk/common.h>
+
+MTEST_BEGIN("tk.widgets.specific", audiosample_env)
+    typedef struct handler_t
+    {
+        test_type_t    *test;
+        char           *label;
+    } handler_t;
+
+    static status_t slot_close(tk::Widget *sender, void *ptr, void *data)
+    {
+        sender->display()->quit_main();
+        return STATUS_OK;
+    }
+
+    static status_t slot_key_up(tk::Widget *sender, void *ptr, void *data)
+    {
+        tk::Window *wnd = tk::widget_cast<tk::Window>(sender);
+        ws::event_t *ev = static_cast<ws::event_t *>(data);
+        test_type_t *_this = static_cast<test_type_t *>(ptr);
+
+        if ((wnd != NULL) && (ev != NULL) && (ev->nType == ws::UIE_KEY_UP))
+        {
+            _this->printf("Key up: %c (0x%x)\n", (char)ev->nCode, int(ev->nCode));
+
+            if ((ev->nCode == '+') || (ev->nCode == ws::WSK_KEYPAD_ADD))
+                wnd->style()->schema()->scaling()->add(0.25f);
+            else if ((ev->nCode == '-') || (ev->nCode == ws::WSK_KEYPAD_SUBTRACT))
+                wnd->style()->schema()->scaling()->sub(0.25f);
+        }
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_in(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_IN: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_out(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_OUT: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_move(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_MOVE: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_down(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_DOWN: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_up(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_UP: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static void sync_text(tk::LedMeterChannel *lm)
+    {
+        LSPString tmp;
+        tmp.fmt_ascii("%.1f", lm->value()->get());
+        lm->text()->set_raw(&tmp);
+    }
+
+    static status_t slot_mouse_scroll(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_SCROLL: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_click(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_CLICK: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_dbl_click(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_DBL_CLICK: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    static status_t slot_mouse_tri_click(tk::Widget *sender, void *ptr, void *data)
+    {
+        handler_t *h = static_cast<handler_t *>(ptr);
+        h->test->printf("MOUSE_TRI_CLICK: %s\n", h->label);
+
+        return STATUS_OK;
+    }
+
+    status_t init_widget(tk::Widget *w, lltl::parray<handler_t> &vh, const char *label)
+    {
+        status_t res = w->init();
+        if (res != STATUS_OK)
+            return res;
+
+        handler_t *h = new handler_t;
+        if ((h == NULL) || (!vh.add(h)))
+            return STATUS_NO_MEM;
+        h->test     = this;
+        h->label    = ::strdup(label);
+
+        tk::handler_id_t hid;
+        hid = w->slots()->bind(tk::SLOT_MOUSE_IN, slot_mouse_in, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_DOWN, slot_mouse_down, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_MOVE, slot_mouse_move, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_UP, slot_mouse_up, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_SCROLL, slot_mouse_scroll, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_CLICK, slot_mouse_click, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_DBL_CLICK, slot_mouse_dbl_click, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_TRI_CLICK, slot_mouse_tri_click, h);
+        if (hid >= 0) hid = w->slots()->bind(tk::SLOT_MOUSE_OUT, slot_mouse_out, h);
+
+        if (hid < 0)
+            res = -hid;
+
+        return res;
+    }
+
+    static void destroy_handlers(lltl::parray<handler_t> &vh)
+    {
+        for (size_t i=0, n=vh.size(); i<n; ++i)
+        {
+            handler_t *h = vh.uget(i);
+            ::free(h->label);
+            delete h;
+        }
+    }
+
+    void init_values(tk::AudioChannel *ac)
+    {
+        tk::FloatArray *fa = ac->samples();
+        MTEST_ASSERT(fa->resize(256) == STATUS_OK);
+        float kf = 8.0f * M_PI / fa->size();
+        for (size_t i=0; i<fa->size(); ++i)
+            fa->set(i, sinf(i * kf));
+    }
+
+    void add_samples(tk::AudioSample *as, lltl::parray<tk::Widget> &widgets, lltl::parray<handler_t> &vh, size_t &vid)
+    {
+        LSPString id;
+        tk::AudioChannel *ac = NULL;
+
+        float hue = 0.5f;
+        for (size_t i=0; i<2; ++i)
+        {
+            MTEST_ASSERT(id.fmt_ascii("audiochannel-%d", int(vid++)));
+            MTEST_ASSERT(ac = new tk::AudioChannel(as->display()));
+            MTEST_ASSERT(init_widget(ac, vh, id.get_ascii()) == STATUS_OK);
+            MTEST_ASSERT(widgets.push(ac));
+            MTEST_ASSERT(as->add(ac) == STATUS_OK);
+
+            init_values(ac);
+            ac->color()->set_rgba32(0x88ff0000);
+            ac->color()->hue(hue * i);
+            ac->wave_border_color()->set_rgb24(0xff0000);
+            ac->wave_border_color()->hue(hue * i);
+        }
+    }
+
+    void add_envelope(tk::AudioSample *as, lltl::parray<tk::Widget> &widgets, lltl::parray<handler_t> &vh, size_t &vid)
+    {
+        LSPString id;
+        tk::AudioEnvelope *ae = NULL;
+
+        MTEST_ASSERT(id.fmt_ascii("audioenvelope-%d", int(vid++)));
+        MTEST_ASSERT(ae = new tk::AudioEnvelope(as->display()));
+        MTEST_ASSERT(init_widget(ae, vh, id.get_ascii()) == STATUS_OK);
+        MTEST_ASSERT(widgets.push(ae));
+        MTEST_ASSERT(as->add(ae) == STATUS_OK);
+
+        ae->break_enabled()->set(true);
+        ae->hold_enabled()->set(true);
+    }
+
+    MTEST_MAIN
+    {
+        lltl::parray<handler_t> vh;
+
+        tk::Display *dpy = new tk::Display();
+        MTEST_ASSERT(dpy != NULL);
+
+        MTEST_ASSERT(dpy->init(0, NULL) == STATUS_OK);
+
+        lltl::parray<tk::Widget> widgets;
+        tk::Widget *w = NULL;
+        tk::Window *wnd = new tk::Window(dpy);
+        tk::Grid *grid = NULL;
+        tk::AudioSample *as = NULL;
+        size_t vid = 0;
+
+        // Initialize window
+        MTEST_ASSERT(init_widget(wnd, vh, "window") == STATUS_OK);
+        MTEST_ASSERT(wnd->title()->set_raw("Test audio sample with embedded envelope") == STATUS_OK);
+        MTEST_ASSERT(wnd->role()->set_raw("audiosample_test") == STATUS_OK);
+        wnd->bg_color()->set_rgb(0, 0.75, 1.0);
+        wnd->actions()->set_actions(ws::WA_MOVE | ws::WA_RESIZE | ws::WA_CLOSE);
+        wnd->border_style()->set(ws::BS_DIALOG);
+//        wnd->border_size()->set(2);
+        wnd->border_color()->set_rgb(1.0f, 1.0f, 0.0f);
+        wnd->constraints()->set(160, 100, 640, 400);
+        wnd->size()->set(320, 200);
+        wnd->slot(tk::SLOT_CLOSE)->bind(slot_close, this);
+        wnd->slot(tk::SLOT_KEY_UP)->bind(slot_key_up, this);
+        wnd->pointer()->set(ws::MP_TABLE_CELL);
+        wnd->layout()->set(-0.5, 0.5, 0.5, 0.5);
+//        wnd->padding()->set_all(16);
+        MTEST_ASSERT(widgets.push(wnd));
+
+        // Create Grid
+        MTEST_ASSERT(grid = new tk::Grid(dpy));
+        MTEST_ASSERT(init_widget(grid, vh, "grid") == STATUS_OK);
+        MTEST_ASSERT(widgets.push(grid));
+        MTEST_ASSERT(wnd->add(grid) == STATUS_OK);
+        grid->bg_color()->set_rgb(1.0f, 1.0f, 1.0f);
+        grid->padding()->set(8);
+        grid->rows()->set(2);
+        grid->columns()->set(2);
+        grid->orientation()->set_horizontal();
+        grid->hspacing()->set(2);
+        grid->vspacing()->set(2);
+
+        {
+            // Create meter channels
+            LSPString id;
+
+            // Create audio sample with non-grouping items
+            MTEST_ASSERT(id.fmt_ascii("audiosample-%d", int(vid++)));
+            MTEST_ASSERT(as = new tk::AudioSample(dpy));
+            MTEST_ASSERT(init_widget(as, vh, id.get_ascii()) == STATUS_OK);
+            MTEST_ASSERT(widgets.push(as));
+            MTEST_ASSERT(grid->add(as) == STATUS_OK);
+
+            add_samples(as, widgets, vh, vid);
+            add_envelope(as, widgets, vh, vid);
+            as->active()->set(true);
+            as->main_visibility()->set(false);
+            as->main_text()->set_raw("Click or drag to load");
+            as->constraints()->set_min(160, 100);
+
+            // Create audio sample with non-grouping items and
+            MTEST_ASSERT(id.fmt_ascii("audiosample-%d", int(vid++)));
+            MTEST_ASSERT(as = new tk::AudioSample(dpy));
+            MTEST_ASSERT(init_widget(as, vh, id.get_ascii()) == STATUS_OK);
+            MTEST_ASSERT(widgets.push(as));
+            MTEST_ASSERT(grid->add(as) == STATUS_OK);
+
+            add_samples(as, widgets, vh, vid);
+            add_envelope(as, widgets, vh, vid);
+            as->active()->set(true);
+            as->main_visibility()->set(false);
+            as->main_text()->set_raw("Click or drag to load");
+            as->constraints()->set_min(160, 100);
+
+            // Create audio sample with grouping items
+            MTEST_ASSERT(id.fmt_ascii("audiosample-%d", int(vid++)));
+            MTEST_ASSERT(as = new tk::AudioSample(dpy));
+            MTEST_ASSERT(init_widget(as, vh, id.get_ascii()) == STATUS_OK);
+            MTEST_ASSERT(widgets.push(as));
+            MTEST_ASSERT(grid->add(as) == STATUS_OK);
+
+            add_samples(as, widgets, vh, vid);
+            add_envelope(as, widgets, vh, vid);
+            as->active()->set(false);
+            as->stereo_groups()->set(true);
+            as->main_visibility()->set(false);
+            as->main_text()->set_raw("Click or drag to load");
+            as->constraints()->set_min(160, 100);
+
+            // Create audio sample with grouping items
+            MTEST_ASSERT(id.fmt_ascii("audiosample-%d", int(vid++)));
+            MTEST_ASSERT(as = new tk::AudioSample(dpy));
+            MTEST_ASSERT(init_widget(as, vh, id.get_ascii()) == STATUS_OK);
+            MTEST_ASSERT(widgets.push(as));
+            MTEST_ASSERT(grid->add(as) == STATUS_OK);
+
+            add_samples(as, widgets, vh, vid);
+            add_envelope(as, widgets, vh, vid);
+            as->stereo_groups()->set(true);
+            as->active()->set(true);
+            as->main_visibility()->set(true);
+            as->main_text()->set_raw("Click or drag to load");
+            as->constraints()->set_min(160, 100);
+        }
+
+        // Show window
+        wnd->visibility()->set(true);
+
+        MTEST_ASSERT(dpy->main() == STATUS_OK);
+
+        while ((w = widgets.pop()) != NULL)
+        {
+            w->destroy();
+            delete w;
+        }
+
+        dpy->destroy();
+        delete dpy;
+        destroy_handlers(vh);
+    }
+
+MTEST_END
+
diff -pruN 1.2.21-5/modules/lsp-ws-lib/.github/workflows/build.yml 1.2.23-0ubuntu1/modules/lsp-ws-lib/.github/workflows/build.yml
--- 1.2.21-5/modules/lsp-ws-lib/.github/workflows/build.yml	2025-03-01 12:42:55.516656045 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/.github/workflows/build.yml	2025-08-26 18:15:42.550014705 +0000
@@ -97,7 +97,7 @@ jobs:
       image: opensuse/leap:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libX11-devel libXrandr-devel libglvnd-devel Mesa-libGL-devel libsndfile-devel freetype2-devel cairo-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale libX11-devel libXrandr-devel libglvnd-devel Mesa-libGL-devel libsndfile-devel freetype2-devel cairo-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1
@@ -119,7 +119,7 @@ jobs:
       image: opensuse/tumbleweed:latest
     steps:
       - name: Install dependencies
-        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ libstdc++-devel clang libX11-devel libXrandr-devel libglvnd-devel Mesa-libGL-devel libsndfile-devel freetype2-devel cairo-devel
+        run: zypper --non-interactive --no-gpg-checks in tar gzip git make valgrind gcc gcc-c++ glibc-locale glibc-gconv-modules-extra libstdc++-devel clang libX11-devel libXrandr-devel libglvnd-devel Mesa-libGL-devel libsndfile-devel freetype2-devel cairo-devel
       - uses: actions/checkout@v3
       - name: Configure project
         run: make config TEST=1 STRICT=1 CC=clang CXX=clang++
@@ -188,3 +188,25 @@ jobs:
       - name: Run unit tests
         shell: msys2 {0}
         run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test.exe utest --verbose --jobs 1
+  macos_stable:
+    runs-on: macos-latest
+    steps:
+      - name: Update repositories
+        run: brew update
+      - name: Install dependencies
+        run: brew install make pkgconf cairo freetype
+      - uses: actions/checkout@v3
+      - name: Configure project
+        run: gmake config TEST=1 STRICT=1 DEBUG=1 ASAN=1
+      - name: Fetch project dependencies
+        run: gmake fetch
+      - name: Build project
+        run: gmake VERBOSE=1
+      - name: Run unit tests
+        run: .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1
+      - name: Run unit tests with memcheck
+        run: |
+          for test in $(.build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --list --suppress); do \
+            echo "***** MEMCHECK $test *****"; \
+            .build/target/${{env.ARTIFACT}}/${{env.ARTIFACT}}-test utest --verbose --jobs 1 --nofork --debug $test; \
+          done
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-ws-lib/CHANGELOG 1.2.23-0ubuntu1/modules/lsp-ws-lib/CHANGELOG
--- 1.2.21-5/modules/lsp-ws-lib/CHANGELOG	2025-03-01 12:42:55.516656045 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/CHANGELOG	2025-08-26 18:15:42.550014705 +0000
@@ -2,6 +2,20 @@
 * RECENT CHANGES
 *******************************************************************************
 
+=== 1.0.29 ===
+* Added experimental support of MacOS with Cairo and Freetype libraries.
+* Implemented ws::IDisplay::get_file_descriptor method for obtaining event loop
+  descriptor for Unix-based systems that use X11 protocol
+* Updated module versions in dependencies.
+
+=== 1.0.28 ===
+* Added support of minimized, maximized and normal window state settings.
+* Implemented fill_rect method for ws::ISurface with surface argument.
+* Added set_origin method for ws::ISurface interface.
+* Added MacOS dependencies.
+* Updated build scripts.
+* Updated module versions in dependencies.
+
 === 1.0.27 ===
 * Implemented OpenGL drawing surface supporf for X11 protocol. Can be disabled
   by setting LSP_WS_LIB_GLXSURFACE=off environment variable.
diff -pruN 1.2.21-5/modules/lsp-ws-lib/dependencies.mk 1.2.23-0ubuntu1/modules/lsp-ws-lib/dependencies.mk
--- 1.2.21-5/modules/lsp-ws-lib/dependencies.mk	2025-03-01 12:42:55.516656045 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/dependencies.mk	2025-08-26 18:15:42.554014665 +0000
@@ -102,13 +102,33 @@ ifeq ($(PLATFORM),Windows)
 endif
 
 #------------------------------------------------------------------------------
+# MacOS dependencies
+MACOS_DEPENDENCIES = \
+  LIBAUDIOTOOLBOX \
+  LIBCOREFOUNDATION \
+  LIBFONTCONFIG \
+  LIBFREETYPE \
+  LIBCOCOA \
+  LIBCAIRO \
+  LIBICONV 
+
+MACOS_TEST_DEPENDENCIES =
+
+ifeq ($(PLATFORM),MacOS)
+  DEPENDENCIES             += $(MACOS_DEPENDENCIES)
+  TEST_DEPENDENCIES        += $(MACOS_TEST_DEPENDENCIES)
+endif
+
+#------------------------------------------------------------------------------
 # All possible dependencies
 ALL_DEPENDENCIES = \
   $(DEPENDENCIES) \
   $(LINUX_DEPENDENCIES) \
   $(BSD_DEPENDENCIES) \
   $(WINDOWS_DEPENDENCIES) \
+  $(MACOS_DEPENDENCIES) \
   $(TEST_DEPENDENCIES) \
   $(LINUX_TEST_DEPENDENCIES) \
   $(BSD_TEST_DEPENDENCIES) \
-  $(WINDOWS_TEST_DEPENDENCIES)
+  $(WINDOWS_TEST_DEPENDENCIES) \
+  $(MACOS_TEST_DEPENDENCIES)
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/IDisplay.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/IDisplay.h
--- 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/IDisplay.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/IDisplay.h	2025-08-26 18:15:42.554014665 +0000
@@ -532,6 +532,16 @@ namespace lsp
                  * @return previous value of the idle interval
                  */
                 size_t                          set_idle_interval(size_t interval);
+
+                /**
+                 * Obtain the file descriptor of the connection associated with the event loop
+                 * if it is supported (usually Unix-based systems with X11 protocol).
+                 *
+                 * @param fd pointer to store file descriptor
+                 * @return status of operation, STATUS_NOT_SUPPORTED if platform does
+                 * not support file desciptors for event loops
+                 */
+                virtual status_t                get_file_descriptor(int *fd);
         };
 
     } /* namespace ws */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/IGradient.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/IGradient.h
--- 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/IGradient.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/IGradient.h	2025-08-26 18:15:42.554014665 +0000
@@ -45,14 +45,18 @@ namespace lsp
 
             public:
                 virtual void set_start(float r, float g, float b, float a=0.0f);
-                virtual void set_start(const Color &c);
-                virtual void set_start(const Color &c, float a);
+                virtual void set_start(const Color & c);
+                virtual void set_start(const Color & c, float a);
+                virtual void set_start(const Color *c);
+                virtual void set_start(const Color *c, float a);
                 virtual void set_start_rgb(uint32_t color);
                 virtual void set_start_rgba(uint32_t color);
 
                 virtual void set_stop(float r, float g, float b, float a=0.0f);
-                virtual void set_stop(const Color &c);
-                virtual void set_stop(const Color &c, float a);
+                virtual void set_stop(const Color & c);
+                virtual void set_stop(const Color & c, float a);
+                virtual void set_stop(const Color *c);
+                virtual void set_stop(const Color *c, float a);
                 virtual void set_stop_rgb(uint32_t color);
                 virtual void set_stop_rgba(uint32_t color);
         };
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/ISurface.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/ISurface.h
--- 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/ISurface.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/ISurface.h	2025-08-26 18:15:42.554014665 +0000
@@ -174,8 +174,7 @@ namespace lsp
                  * @param s surface to draw
                  * @param x offset from left
                  * @param y offset from top
-                 * @param sx surface scale x
-                 * @param sy surface scale y
+                 * @param sx surface scale x                 * @param sy surface scale y
                  * @param ra rotation angle in radians
                  * @param a alpha
                  */
@@ -333,6 +332,43 @@ namespace lsp
                  */
                 virtual void fill_rect(IGradient *g, size_t mask, float radius, const ws::rectangle_t *r);
 
+                /**
+                 * Fill rectangle with rounded corners using contents of other surface.
+                 * If rectangle size does not match surface size, the surface will be scaled
+                 * using linear interpolation.
+                 *
+                 * @param s source surface to use
+                 * @param alpha alpha blending factor (0.0 - opaque, 1.0 - fully transient)
+                 * @param radius the corner radius
+                 * @param mask the corner mask:
+                 *      0x01 - left-top corner is rounded
+                 *      0x02 - right-top corner is rounded
+                 *      0x04 - right-bottom corner is rounded
+                 *      0x08 - left-bottom corner is rounded
+                 * @param left left-top corner x coordinate
+                 * @param top left-top corner y coordinate
+                 * @param width width of rectangle
+                 * @param height height of rectangle
+                 */
+                virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height);
+
+                /**
+                 * Fill rectangle with rounded corners using contents of other surface.
+                 * If rectangle size does not match surface size, the surface will be scaled
+                 * using linear interpolation.
+                 *
+                 * @param s source surface to use
+                 * @param alpha alpha blending factor (0.0 - opaque, 1.0 - fully transient)
+                 * @param radius the corner radius
+                 * @param mask the corner mask:
+                 *      0x01 - left-top corner is rounded
+                 *      0x02 - right-top corner is rounded
+                 *      0x04 - right-bottom corner is rounded
+                 *      0x08 - left-bottom corner is rounded
+                 * @param r rectangle descriptor
+                 */
+                virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r);
+
                 /** Fill sector of the round
                  *
                  * @param c color
@@ -732,6 +768,20 @@ namespace lsp
                  */
                 virtual bool set_antialiasing(bool set);
 
+                /**
+                 * Set up drawing origin
+                 * @param origin drawing origin (left and top coordinates)
+                 * @return old drawing origin value
+                 */
+                virtual ws::point_t set_origin(const ws::point_t & origin);
+
+                /**
+                 * Set up drawing origin
+                 * @param left left coordinate of drawing origin
+                 * @param top top coordinate of drawing origin
+                 * @return
+                 */
+                virtual ws::point_t set_origin(ssize_t left, ssize_t top);
         };
 
     } /* namespace ws */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/IWindow.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/IWindow.h
--- 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/IWindow.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/IWindow.h	2025-08-26 18:15:42.554014665 +0000
@@ -438,6 +438,19 @@ namespace lsp
                  * @return status of operation
                  */
                 virtual status_t set_parent(void *parent);
+
+                /**
+                 * Get window state
+                 * @param state pointer to store window state
+                 * @return status of operation
+                 */
+                virtual status_t get_window_state(window_state_t *state);
+
+                /**
+                 * Set window state
+                 * @param state window state
+                 */
+                virtual status_t set_window_state(window_state_t state);
         };
     } /* namespace ws */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/cocoa/decode.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/cocoa/decode.h
--- 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/cocoa/decode.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/cocoa/decode.h	2025-08-26 18:15:42.554014665 +0000
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 16 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef LSP_PLUG_IN_WS_COCOA_DECODE_H_
+#define LSP_PLUG_IN_WS_COCOA_DECODE_H_
+ 
+#include <lsp-plug.in/ws/version.h>
+#include <lsp-plug.in/ws/types.h>
+ 
+#ifdef PLATFORM_MACOSX
+
+#include <Cocoa/Cocoa.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace cocoa
+        {
+            mcb_t       decode_mcb(const NSEvent *event);
+
+            mcd_t       decode_mcd(const NSEvent *event);
+
+            size_t      decode_modifier(const NSEvent *event);
+
+            code_t      decode_keycode(unsigned long code);
+
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* PLATFORM_MACOSX */
+
+#endif /* LSP_PLUG_IN_WS_COCOA_DECODE_H_ */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/types.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/types.h
--- 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/types.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/types.h	2025-08-26 18:15:42.554014665 +0000
@@ -200,12 +200,13 @@ namespace lsp
             UIE_REDRAW,
             UIE_RENDER,
             UIE_SIZE_REQUEST,
-            UIE_RESIZE,
-            UIE_SHOW,
-            UIE_HIDE,
-            UIE_CLOSE,
-            UIE_FOCUS_IN,
-            UIE_FOCUS_OUT,
+            UIE_RESIZE,                     // Window has been resized
+            UIE_SHOW,                       // Window becomes visible
+            UIE_HIDE,                       // Window becomes hidden
+            UIE_STATE,                      // Window state changed (see window_state_t)
+            UIE_CLOSE,                      // Window has been closed
+            UIE_FOCUS_IN,                   // Window has been focused in
+            UIE_FOCUS_OUT,                  // Window has been focused out
             // Drag&Drop events
             UIE_DRAG_ENTER,
             UIE_DRAG_LEAVE,
@@ -228,26 +229,39 @@ namespace lsp
             BS_DROPDOWN             // Dropdown menu window
         };
 
+        /**
+         * Allowed window actions
+         */
         enum window_action_t
         {
-            WA_MOVE         = 1 << 0,
-            WA_RESIZE       = 1 << 1,
-            WA_MINIMIZE     = 1 << 2,
-            WA_MAXIMIZE     = 1 << 3,
-            WA_CLOSE        = 1 << 4,
-            WA_STICK        = 1 << 5,
-            WA_SHADE        = 1 << 6,
-            WA_FULLSCREEN   = 1 << 7,
-            WA_CHANGE_DESK  = 1 << 8,
-
-            WA_ALL          = WA_MOVE | WA_RESIZE | WA_MINIMIZE | WA_MAXIMIZE | WA_CLOSE | WA_STICK | WA_SHADE | WA_FULLSCREEN | WA_CHANGE_DESK,
-            WA_NONE         = 0,
-            WA_SINGLE       = WA_MOVE | WA_STICK | WA_MINIMIZE | WA_SHADE | WA_CHANGE_DESK | WA_CLOSE,
-            WA_DIALOG       = WA_MOVE | WA_STICK | WA_SHADE,
-            WA_POPUP        = WA_NONE,
-            WA_COMBO        = WA_NONE,
-            WA_DROPDOWN     = WA_NONE,
-            WA_SIZABLE      = WA_ALL
+            WA_MOVE         = 1 << 0,                                                                                                           /**< WA_MOVE */
+            WA_RESIZE       = 1 << 1,                                                                                                           /**< WA_RESIZE */
+            WA_MINIMIZE     = 1 << 2,                                                                                                           /**< WA_MINIMIZE */
+            WA_MAXIMIZE     = 1 << 3,                                                                                                           /**< WA_MAXIMIZE */
+            WA_CLOSE        = 1 << 4,                                                                                                           /**< WA_CLOSE */
+            WA_STICK        = 1 << 5,                                                                                                           /**< WA_STICK */
+            WA_SHADE        = 1 << 6,                                                                                                           /**< WA_SHADE */
+            WA_FULLSCREEN   = 1 << 7,                                                                                                           /**< WA_FULLSCREEN */
+            WA_CHANGE_DESK  = 1 << 8,                                                                                                           /**< WA_CHANGE_DESK */
+
+            WA_ALL          = WA_MOVE | WA_RESIZE | WA_MINIMIZE | WA_MAXIMIZE | WA_CLOSE | WA_STICK | WA_SHADE | WA_FULLSCREEN | WA_CHANGE_DESK,/**< WA_ALL */
+            WA_NONE         = 0,                                                                                                                /**< WA_NONE */
+            WA_SINGLE       = WA_MOVE | WA_STICK | WA_MINIMIZE | WA_SHADE | WA_CHANGE_DESK | WA_CLOSE,                                          /**< WA_SINGLE */
+            WA_DIALOG       = WA_MOVE | WA_STICK | WA_SHADE,                                                                                    /**< WA_DIALOG */
+            WA_POPUP        = WA_NONE,                                                                                                          /**< WA_POPUP */
+            WA_COMBO        = WA_NONE,                                                                                                          /**< WA_COMBO */
+            WA_DROPDOWN     = WA_NONE,                                                                                                          /**< WA_DROPDOWN */
+            WA_SIZABLE      = WA_ALL                                                                                                            /**< WA_SIZABLE */
+        };
+
+        /**
+         * Window state
+         */
+        enum window_state_t
+        {
+            WS_NORMAL,
+            WS_MINIMIZED,
+            WS_MAXIMIZED
         };
 
         /**
@@ -318,6 +332,12 @@ namespace lsp
             ssize_t             nHeight;
         } rectangle_t;
 
+        typedef struct point_t
+        {
+            ssize_t             nLeft;
+            ssize_t             nTop;
+        } point_t;
+
         enum surface_type_t
         {
             ST_UNKNOWN,         // Unknown surface type
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/version.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/version.h
--- 1.2.21-5/modules/lsp-ws-lib/include/lsp-plug.in/ws/version.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/lsp-plug.in/ws/version.h	2025-08-26 18:15:42.554014665 +0000
@@ -24,7 +24,7 @@
 
 #define LSP_WS_LIB_MAJOR            1
 #define LSP_WS_LIB_MINOR            0
-#define LSP_WS_LIB_MICRO            27
+#define LSP_WS_LIB_MICRO            29
 
 #if defined(LSP_WS_LIB_PUBLISHER)
     #define LSP_WS_LIB_PUBLIC               LSP_EXPORT_MODIFIER
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoGradient.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoGradient.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoGradient.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoGradient.h	2025-08-26 18:15:42.554014665 +0000
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 12 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_COCOA_COCOACAIROGRADIENT_H_
+#define PRIVATE_COCOA_COCOACAIROGRADIENT_H_
+
+#include <lsp-plug.in/ws/version.h>
+
+#ifdef PLATFORM_MACOSX
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/ws/IGradient.h>
+
+#include <cairo.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace cocoa
+        {
+            class LSP_HIDDEN_MODIFIER CocoaCairoGradient: public IGradient
+            {
+                public:
+                    typedef struct linear_t
+                    {
+                        float x1;
+                        float y1;
+                        float x2;
+                        float y2;
+                    } linear_t;
+
+                    typedef struct radial_t
+                    {
+                        float x1;
+                        float y1;
+                        float x2;
+                        float y2;
+                        float r;
+                    } radial_t;
+
+                protected:
+                    typedef struct color_t
+                    {
+                        float r, g, b, a;
+                    } color_t;
+
+                protected:
+                    cairo_pattern_t    *pCP;
+                    union
+                    {
+                        linear_t    sLinear;
+                        radial_t    sRadial;
+                    };
+                    color_t             sStart;
+                    color_t             sEnd;
+                    bool                bLinear;
+
+                protected:
+                    void drop_pattern();
+
+                public:
+                    explicit CocoaCairoGradient(const linear_t & params);
+                    explicit CocoaCairoGradient(const radial_t & params);
+                    CocoaCairoGradient(const CocoaCairoGradient &) = delete;
+                    CocoaCairoGradient(CocoaCairoGradient &&) = delete;
+                    virtual ~CocoaCairoGradient() override;
+
+                    CocoaCairoGradient & operator = (const CocoaCairoGradient &) = delete;
+                    CocoaCairoGradient & operator = (CocoaCairoGradient &&) = delete;
+
+                public:
+                    virtual void set_start(float r, float g, float b, float a) override;
+                    virtual void set_stop(float r, float g, float b, float a) override;
+
+                public:
+                    void apply(cairo_t *cr);
+            };
+
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* PLATFORM_MACOSX */
+
+#endif /* PRIVATE_COCOA_COCOACAIROGRADIENT_H_ */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoSurface.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoSurface.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoSurface.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoSurface.h	2025-08-26 18:15:42.554014665 +0000
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 12 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_COCOA_COCOACAIROSURFACE_H_
+#define PRIVATE_COCOA_COCOACAIROSURFACE_H_
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#include <CoreGraphics/CoreGraphics.h>
+#include <Cocoa/Cocoa.h>
+
+#include <lsp-plug.in/ws/version.h>
+
+#include <private/cocoa/CocoaDisplay.h>
+
+#include <lsp-plug.in/runtime/Color.h>
+#include <lsp-plug.in/ws/IGradient.h>
+#include <lsp-plug.in/ws/ISurface.h>
+
+//#include <private/cocoa/CocoaCairoView.h>
+#ifdef __OBJC__
+@class CocoaCairoView;
+#else
+typedef struct CocoaCairoView CocoaCairoView;
+#endif
+
+#include <cairo.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace cocoa
+        {
+            class LSP_HIDDEN_MODIFIER CocoaCairoSurface: public ISurface
+            {
+                protected:
+                    cairo_surface_t        *pRoot;
+                    cairo_surface_t        *pSurface;
+                    cairo_t                *pCR;
+                    cairo_font_options_t   *pFO;
+                    CocoaDisplay           *pDisplay;
+                    CGContextRef            pContext;
+                    CocoaCairoView         *pCocoaView;
+
+                    float                   fOriginX;
+                    float                   fOriginY;
+                #ifdef LSP_DEBUG
+                    size_t                  nNumClips;
+                #endif /* LSP_DEBUG */
+
+                protected:
+                    typedef struct font_context_t
+                    {
+                        cairo_font_face_t      *face;       // Selected font face
+                        cairo_antialias_t       aa;         // Antialias settings
+                    } font_context_t;
+
+                protected:
+                    void                destroy_context(bool root);
+
+                    inline void         setSourceRGB(const Color &col);
+                    inline void         setSourceRGBA(const Color &col);
+                    void                drawRoundRect(float left, float top, float width, float height, float radius, size_t mask);
+                    void                set_current_font(font_context_t *ctx, const Font &f);
+                    void                unset_current_font(font_context_t *ctx);
+
+                public:
+                    /** Create XLib surface
+                     *
+                     * @param dpy display
+                     * @param context visual
+                     * @param width surface width
+                     * @param height surface height
+                     */
+                    
+                    //explicit CocoaCairoSurface(CocoaDisplay *pDisplay, CGContextRef context, size_t width, size_t height);
+                    //explicit CocoaCairoSurface(CocoaDisplay *pDisplay, size_t width, size_t height);
+
+                    //explicit CocoaCairoSurface(CGContextRef context, size_t width, size_t height);
+
+                    /** Create image surface
+                     *
+                     * @param width surface width
+                     * @param height surface height
+                     */
+                    //explicit CocoaCairoSurface(CocoaDisplay *pDisplay, cairo_surface_t *surface, size_t width, size_t height);
+
+                    /** Create image surface
+                     * @param dpy display
+                     * @param wnd window
+                     * @param width surface width
+                     * @param height surface height
+                     */
+                    explicit CocoaCairoSurface(CocoaDisplay *pDisplay, CocoaCairoView *view, size_t width, size_t height);
+                    explicit CocoaCairoSurface(CocoaDisplay *pDisplay, size_t width, size_t height);
+
+                    /** Create image surface
+                     *
+                     * @param width surface width
+                     * @param height surface height
+                     */
+                    explicit CocoaCairoSurface(CocoaDisplay *dpy, cairo_surface_t *surface, size_t width, size_t height);
+
+                    CocoaCairoSurface(const CocoaCairoSurface &) = delete;
+                    CocoaCairoSurface(CocoaCairoSurface &&) = delete;
+
+                    virtual ~CocoaCairoSurface() override;
+
+                    CocoaCairoSurface & operator = (const CocoaCairoSurface &) = delete;
+                    CocoaCairoSurface & operator = (CocoaCairoSurface &&) = delete;
+
+                    virtual void destroy() override;
+                    virtual bool valid() const override;
+
+                    virtual status_t resize(size_t width, size_t height) override;
+
+                public:
+                    virtual IDisplay *display() override;
+                    cairo_surface_t *get_image_surface();
+
+                    virtual ISurface *create(size_t width, size_t height) override;
+
+                    virtual IGradient *linear_gradient(float x0, float y0, float x1, float y1) override;
+                    virtual IGradient *radial_gradient
+                    (
+                        float cx0, float cy0,
+                        float cx1, float cy1,
+                        float r
+                    ) override;
+
+                public:
+                    // Drawing methods
+                    virtual void draw(ISurface *s, float x, float y, float sx, float sy, float a) override;
+                    virtual void draw_rotate(ISurface *s, float x, float y, float sx, float sy, float ra, float a) override;
+                    virtual void draw_clipped(ISurface *s, float x, float y, float sx, float sy, float sw, float sh, float a) override;
+                    virtual void draw_raw(
+                        const void *data, size_t width, size_t height, size_t stride,
+                        float x, float y, float sx, float sy, float a) override;
+
+                    virtual void begin() override;
+                    virtual void end() override;
+
+                    virtual void clear(const Color &color) override;
+                    virtual void clear_rgb(uint32_t color) override;
+                    virtual void clear_rgba(uint32_t color) override;
+
+                    virtual void wire_rect(const Color &c, size_t mask, float radius, float left, float top, float width, float height, float line_width) override;
+                    virtual void wire_rect(const Color &c, size_t mask, float radius, const ws::rectangle_t *r, float line_width) override;
+                    virtual void wire_rect(IGradient *g, size_t mask, float radius, float left, float top, float width, float height, float line_width) override;
+                    virtual void wire_rect(IGradient *g, size_t mask, float radius, const ws::rectangle_t *r, float line_width) override;
+
+                    virtual void fill_rect(const Color &color, size_t mask, float radius, float left, float top, float width, float height) override;
+                    virtual void fill_rect(const Color &color, size_t mask, float radius, const ws::rectangle_t *r) override;
+                    virtual void fill_rect(IGradient *g, size_t mask, float radius, float left, float top, float width, float height) override;
+                    virtual void fill_rect(IGradient *g, size_t mask, float radius, const ws::rectangle_t *r) override;
+                    virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height) override;
+                    virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r) override;
+
+                    virtual void fill_sector(const Color &c, float cx, float cy, float radius, float angle1, float angle2) override;
+                    virtual void fill_triangle(IGradient *g, float x0, float y0, float x1, float y1, float x2, float y2) override;
+                    virtual void fill_triangle(const Color &c, float x0, float y0, float x1, float y1, float x2, float y2) override;
+                    virtual void fill_circle(const Color &c, float x, float y, float r) override;
+                    virtual void fill_circle(IGradient *g, float x, float y, float r) override;
+                    virtual void wire_arc(const Color &c, float x, float y, float r, float a1, float a2, float width) override;
+
+                    virtual bool get_font_parameters(const Font &f, font_parameters_t *fp) override;
+                    virtual bool get_text_parameters(const Font &f, text_parameters_t *tp, const char *text) override;
+                    virtual bool get_text_parameters(const Font &f, text_parameters_t *tp, const LSPString *text, ssize_t first, ssize_t last) override;
+                    virtual void out_text(const Font &f, const Color &color, float x, float y, const char *text) override;
+                    virtual void out_text(const Font &f, const Color &color, float x, float y, const LSPString *text, ssize_t first, ssize_t last) override;
+                    virtual void out_text_relative(const Font &f, const Color &color, float x, float y, float dx, float dy, const char *text) override;
+                    virtual void out_text_relative(const Font &f, const Color &color, float x, float y, float dx, float dy, const LSPString *text, ssize_t first, ssize_t last) override;
+
+                    virtual void line(const Color &c, float x0, float y0, float x1, float y1, float width) override;
+                    virtual void line(IGradient *g, float x0, float y0, float x1, float y1, float width) override;
+
+                    virtual void parametric_line(const Color &color, float a, float b, float c, float width) override;
+                    virtual void parametric_line(const Color &color, float a, float b, float c, float left, float right, float top, float bottom, float width) override;
+
+                    virtual void parametric_bar(
+                        IGradient *g,
+                        float a1, float b1, float c1, float a2, float b2, float c2,
+                        float left, float right, float top, float bottom) override;
+
+                    virtual void fill_poly(const Color & color, const float *x, const float *y, size_t n) override;
+                    virtual void fill_poly(IGradient *gr, const float *x, const float *y, size_t n) override;
+                    virtual void wire_poly(const Color & color, float width, const float *x, const float *y, size_t n) override;
+                    virtual void draw_poly(const Color &fill, const Color &wire, float width, const float *x, const float *y, size_t n) override;
+
+                    virtual void clip_begin(float x, float y, float w, float h) override;
+                    virtual void clip_end() override;
+
+                    virtual void fill_frame(
+                        const Color &color,
+                        size_t flags, float radius,
+                        float fx, float fy, float fw, float fh,
+                        float ix, float iy, float iw, float ih) override;
+
+                    virtual bool get_antialiasing() override;
+                    virtual bool set_antialiasing(bool set) override;
+                    virtual ws::point_t set_origin(const ws::point_t & origin) override;
+                    virtual ws::point_t set_origin(ssize_t left, ssize_t top) override;
+            };
+
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* PLATFORM_MACOSX */
+
+#endif /* PRIVATE_COCOA_COCOACAIROSURFACE_H_ */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoView.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoView.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoView.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaCairoView.h	2025-08-26 18:15:42.554014665 +0000
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 12 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_COCOA_COCOACAIROVIEW_H_
+#define PRIVATE_COCOA_COCOACAIROVIEW_H_
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#include <private/cocoa/CocoaCairoSurface.h>
+
+#import <Cocoa/Cocoa.h>
+
+@interface CocoaCairoView : NSView 
+
+    @property (assign) cairo_surface_t *imageSurface;
+    @property (strong) NSTimer *redrawTimer;
+    @property (strong) NSCursor *nextCursor;
+    @property (assign) bool needsRedrawing;
+    @property (nonatomic, assign) lsp::ws::cocoa::CocoaDisplay *display;
+    @property (assign) NSTrackingArea *trackingArea;
+
+    - (CGImageRef)renderCairoImage;
+    - (void)triggerRedraw;
+    - (void)setCursor:(NSCursor *)cursor;
+    - (void)setImage:(cairo_surface_t *)image;
+    - (void)startRedrawLoop;
+    - (void)stopRedrawLoop;
+    - (void)updateFrame:(NSRect)frameRect;
+@end
+
+#endif
+
+#endif
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaDisplay.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaDisplay.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaDisplay.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaDisplay.h	2025-08-26 18:15:42.554014665 +0000
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 9 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_COCOA_COCOADISPLAY_H_
+#define PRIVATE_COCOA_COCOADISPLAY_H_
+
+#include <lsp-plug.in/ws/version.h>
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#include <lsp-plug.in/ws/IDisplay.h>
+#include <lsp-plug.in/ws/IWindow.h>
+#include <private/freetype/FontManager.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace ft
+        {
+            class FontManager;
+        }
+        namespace cocoa
+        {
+            class CocoaWindow;
+
+            class LSP_HIDDEN_MODIFIER CocoaDisplay: public IDisplay
+            {
+                private:
+                    friend class CocoaWindow;
+                    size_t                      titleHeight;
+                    size_t                      borderWidth;
+                    bool                        standaloneApp;
+
+                public:
+                    // Main loop management
+                    virtual status_t            main() override;
+                    virtual status_t            main_iteration() override;
+                    virtual void                quit_main() override;
+
+                    explicit CocoaDisplay();
+                    virtual ~CocoaDisplay() override;
+
+                    virtual status_t            init(int argc, const char **argv) override;
+                    virtual void                destroy() override;
+
+                    // Window management
+                    virtual IWindow            *create_window() override;
+                    virtual IWindow            *create_window(size_t screen) override;
+                    virtual IWindow            *create_window(void *handle) override;
+
+                    // Monitor management
+                    virtual const MonitorInfo  *enum_monitors(size_t *count) override;
+                    virtual status_t            work_area_geometry(ws::rectangle_t *r) override;
+
+                    // Screen and monitor management
+                    //virtual size_t              screens() override;
+                    //virtual size_t              default_screen() override;
+                    virtual status_t            screen_size(size_t screen, ssize_t *w, ssize_t *h) override;
+
+                    virtual status_t            add_font(const char *name, io::IInStream *is) override;
+                    virtual status_t            add_font_alias(const char *name, const char *alias) override;
+                    virtual status_t            remove_font(const char *name) override;
+                    virtual void                remove_all_fonts() override;
+
+                    virtual bool                get_font_parameters(const Font &f, font_parameters_t *fp) override;
+                    virtual bool                get_text_parameters(const Font &f, text_parameters_t *tp, const char *text) override;
+                    virtual bool                get_text_parameters(const Font &f, text_parameters_t *tp, const LSPString *text, ssize_t first, ssize_t last) override;
+
+                    bool                        add_window(CocoaWindow *wnd);
+                    bool                        remove_window(CocoaWindow *wnd);
+
+                    status_t                    get_pointer_location(size_t *screen, ssize_t *left, ssize_t *top) override;
+                    ft::FontManager            *font_manager();
+
+                    size_t                      get_window_title_height();
+                    size_t                      get_window_border_width();
+                    void                        handle_event(void *event);
+                    
+                protected:
+                    volatile bool               bExit;                      // Indicator that forces to leave the main loop
+                    volatile timestamp_t        nLastIdleCall;              // The time of last idle call
+                    lltl::parray<CocoaWindow>   sTargets;                   // Targets for event delivery
+                    lltl::parray<CocoaWindow>   vWindows;                   // All registered windows
+                    size_t                      lastMouseButton;            
+                    virtual bool                r3d_backend_supported(const r3d::backend_metadata_t *meta) override;
+                    void                        get_enviroment_frame_sizes();
+
+
+                #ifdef USE_LIBFREETYPE
+                    ft::FontManager             sFontManager;
+                #endif /* USE_LIBFREETYPE */
+                    ISurface                   *pEstimation;        // Estimation surface
+                    
+                protected:
+                    status_t                    do_main_iteration(timestamp_t ts);
+                    CocoaWindow                 *find_window(void *wnd);
+
+            };
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+
+#endif /* PLATFORM_MACOSX */
+
+#endif /* COCOAWINDOW_H */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaWindow.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaWindow.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/cocoa/CocoaWindow.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/cocoa/CocoaWindow.h	2025-08-26 18:15:42.554014665 +0000
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 9 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_COCOA_COCOAWINDOW_H_
+#define PRIVATE_COCOA_COCOAWINDOW_H_
+
+#include <lsp-plug.in/ws/version.h>
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#include <Cocoa/Cocoa.h>
+#include <Foundation/Foundation.h>
+#include <lsp-plug.in/ws/IDisplay.h>
+#include <lsp-plug.in/ws/IWindow.h>
+
+#include <private/cocoa/CocoaCairoView.h>
+
+#include <cairo.h>
+#include <cairo-quartz.h>
+
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace cocoa
+        {
+            class CocoaDisplay;
+
+            class LSP_HIDDEN_MODIFIER CocoaWindow: public IWindow, public IEventHandler
+            {
+                private:
+                    friend class CocoaDisplay;
+                    NSApplication       *pCocoaApplication;
+                    NSWindow            *pCocoaWindow;
+                    CocoaCairoView      *pCocoaView;                    // The View of the window
+                    NSCursor            *pCocoaCursor;                  // The Cursor of the View
+                    NSWindow            *transientParent;
+                    NSMutableArray      *windowObserverTokens; 
+                    NSMutableArray      *viewObserverTokens; 
+                
+                protected:
+                    typedef struct btn_event_t
+                    {
+                        event_t         sDown;
+                        event_t         sUp;
+                    } btn_event_t;
+
+                    CocoaDisplay                   *pCocoaDisplay;      // Pointer to the display
+                    mouse_pointer_t                 enPointer;          // Mouse pointer
+                    rectangle_t                     sSize;              // Size of the window
+                    size_limit_t                    sConstraints;       // Window constraints
+                    border_style_t                  enBorderStyle;      // Border style of the window
+                    size_t                          nActions;           // Allowed window actions
+                    window_state_t                  enState;            // Window state
+                    ISurface                       *pSurface;           // Drawing surface
+                    CGContextRef                    testSurface;
+                    bool                            bMouseInside;       // Flag that indicates that mouse is inside of the window
+                    bool                            bWrapper;           // Indicates that window is a wrapper
+                    bool                            bVisible;           // Indicates that window is visible
+                    bool                            bInvalidate;        // Indicates that window is invalidate
+                    btn_event_t                     vBtnEvent[3];       // Events for detecting double click and triple click
+                    
+                    status_t                        set_geometry_impl();
+                    void                            apply_constraints(rectangle_t *dst, const rectangle_t *req);
+                    status_t                        commit_border_style(border_style_t bs, size_t wa);
+                    void                            drop_surface();
+                    cairo_surface_t                *get_image_surface();
+                    static bool                     check_click(const btn_event_t *ev);
+                    static bool                     check_double_click(const btn_event_t *pe, const btn_event_t *ce);
+                    ISurface                       *create_surface(CocoaDisplay *display, CocoaCairoView *view, size_t width, size_t height);
+                    void                            init_notification_center(NSWindow *window);             // Creates Events UIE_SHOW / UIE_HIDE
+                    void                            init_notification_center(CocoaCairoView *view);         // Creates Events UIE_SHOW / UIE_HIDE
+                    NSWindowStyleMask               get_ns_style(border_style_t style, size_t wa);          // Maps the border_style_t and actions to NSWindowStyleMask
+                    void                            place_above(NSWindow *parent);
+
+                public:
+                    explicit CocoaWindow(CocoaDisplay *dpy, NSView *view, IEventHandler *handler, bool wrapper);
+                    CocoaWindow(const CocoaWindow &) = delete;
+                    CocoaWindow(CocoaWindow &&) = delete;
+                    virtual ~CocoaWindow() override;
+
+                    CocoaWindow & operator = (const CocoaWindow &) = delete;
+                    CocoaWindow & operator = (CocoaWindow &&) = delete;
+
+                    NSWindow *nswindow() const;
+
+                    virtual status_t    init() override;
+                    virtual void        destroy() override;
+
+                    virtual status_t    set_mouse_pointer(mouse_pointer_t pointer) override;
+                    virtual mouse_pointer_t get_mouse_pointer() override; 
+
+                    virtual status_t    set_caption(const char *caption) override;
+                    virtual status_t    set_caption(const LSPString *caption) override;
+                    virtual status_t    get_caption(char *text, size_t len) override;
+                    virtual status_t    get_caption(LSPString *text) override;
+
+                    virtual status_t    set_border_style(border_style_t style) override;
+                    virtual status_t    get_border_style(border_style_t *style) override;
+                    virtual status_t    resize(ssize_t width, ssize_t height) override;
+                    virtual status_t    get_geometry(rectangle_t *realize) override;
+                    virtual status_t    set_geometry(const rectangle_t *realize) override;
+                    virtual status_t    get_absolute_geometry(rectangle_t *realize) override;
+
+                    virtual status_t    show() override;
+                    virtual status_t    show(IWindow *over) override;
+                    virtual status_t    hide() override;
+                    virtual bool        is_visible() override;
+
+                    virtual status_t    get_window_actions(size_t *actions) override;
+                    virtual status_t    set_window_actions(size_t actions) override;
+
+                    virtual status_t    handle_event(const event_t *ev) override;
+                    virtual ISurface   *get_surface() override;
+
+                    virtual status_t    invalidate() override;
+
+                    virtual status_t    set_size_constraints(const size_limit_t *c) override;
+                    virtual status_t    get_size_constraints(size_limit_t *c) override;
+                    
+                    virtual ssize_t     left() override;
+                    virtual ssize_t     top() override;
+                    virtual ssize_t     width() override;
+                    virtual ssize_t     height() override;
+
+                    virtual void       *handle() override;
+                    NSWindow           *get_window_handler();
+                /*
+                public:
+                    virtual ISurface   *get_surface() override;
+                    virtual void       *handle() override;
+
+                    virtual ssize_t     left() override;
+                    virtual ssize_t     top() override;
+                    virtual ssize_t     width() override;
+                    virtual ssize_t     height() override;
+                    virtual status_t    set_left(ssize_t left) override;
+                    virtual status_t    set_top(ssize_t top) override;
+                    virtual ssize_t     set_width(ssize_t width) override;
+                    virtual ssize_t     set_height(ssize_t height) override;
+
+                    virtual status_t    hide() override;
+                    virtual status_t    show() override;
+                    virtual status_t    show(IWindow *over) override;
+                    virtual bool        is_visible() override;
+
+                    virtual size_t      screen() override;
+
+                    virtual status_t    set_caption(const char *caption) override;
+                    virtual status_t    set_caption(const LSPString *caption) override;
+                    virtual status_t    get_caption(char *text, size_t len) override;
+                    virtual status_t    get_caption(LSPString *text) override;
+
+                    virtual status_t    move(ssize_t left, ssize_t top) override;
+                    virtual status_t    resize(ssize_t width, ssize_t height) override;
+                    virtual status_t    set_geometry(const rectangle_t *realize) override;
+                    virtual status_t    set_border_style(border_style_t style) override;
+                    virtual status_t    get_border_style(border_style_t *style) override;
+                    virtual status_t    get_geometry(rectangle_t *realize) override;
+                    virtual status_t    get_absolute_geometry(rectangle_t *realize) override;
+
+                    virtual status_t    set_size_constraints(const size_limit_t *c) override;
+                    virtual status_t    get_size_constraints(size_limit_t *c) override;
+
+                    virtual status_t    get_window_actions(size_t *actions) override;
+                    virtual status_t    set_window_actions(size_t actions) override;
+
+                    virtual status_t    grab_events(grab_t group) override;
+                    virtual status_t    ungrab_events() override;
+                    virtual bool        is_grabbing_events() const override;
+
+                    virtual status_t    take_focus() override;
+
+                    virtual status_t    set_icon(const void *bgra, size_t width, size_t height) override;
+
+                    virtual status_t    set_mouse_pointer(mouse_pointer_t pointer) override;
+                    virtual mouse_pointer_t get_mouse_pointer() override;
+
+                    virtual status_t    set_class(const char *instance, const char *wclass) override;
+                    virtual status_t    set_role(const char *wrole) override;
+
+                    virtual void       *parent() const override;
+                    virtual status_t    set_parent(void *parent) override;
+
+                    virtual status_t    get_window_state(window_state_t *state) override;
+                    virtual status_t    set_window_state(window_state_t state) override;
+
+                public:
+                    virtual status_t    handle_event(const event_t *ev) override;
+                */
+
+            };
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+
+#endif /* PLATFORM_MACOSX */
+
+#endif /* COCOADISPLAY_H */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Allocator.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Allocator.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Allocator.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Allocator.h	2025-08-26 18:15:42.558014627 +0000
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 2 июн. 2025 г.
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_GL_ALLOCATOR_H_
+#define PRIVATE_GL_ALLOCATOR_H_
+
+#include <private/gl/defs.h>
+
+#ifdef LSP_PLUGINS_USE_OPENGL
+
+#include <lsp-plug.in/common/status.h>
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/lltl/parray.h>
+
+#include <private/gl/Data.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace gl
+        {
+            class LSP_HIDDEN_MODIFIER Allocator
+            {
+                private:
+                    batch_draw_t   *pFree;
+
+                public:
+                    Allocator();
+                    Allocator(const Allocator &) = delete;
+                    Allocator(Allocator &&) = delete;
+                    ~Allocator();
+                    Allocator & operator = (const Allocator &) = delete;
+                    Allocator & operator = (Allocator &&) = delete;
+
+                protected:
+                    void            destroy_draw(batch_draw_t *draw);
+
+                public:
+                    void            clear();
+                    void            perform_gc();
+
+                public:
+                    batch_draw_t   *alloc_draw(const batch_header_t & header);
+                    void            release_draw(batch_draw_t *draw);
+            };
+
+        } /* namespace gl */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* LSP_PLUGINS_USE_OPENGL */
+
+#endif /* PRIVATE_GL_ALLOCATOR_H_ */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Batch.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Batch.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Batch.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Batch.h	2025-08-26 18:15:42.558014627 +0000
@@ -30,6 +30,7 @@
 #include <lsp-plug.in/common/types.h>
 #include <lsp-plug.in/lltl/parray.h>
 
+#include <private/gl/Allocator.h>
 #include <private/gl/IContext.h>
 #include <private/gl/Texture.h>
 
@@ -39,119 +40,16 @@ namespace lsp
     {
         namespace gl
         {
-            enum batch_flags_t
-            {
-                BATCH_STENCIL_OP_MASK       = 0x03 << 0,
-                BATCH_STENCIL_OP_NONE       = 0x00 << 0,
-                BATCH_STENCIL_OP_OR         = 0x01 << 0,
-                BATCH_STENCIL_OP_XOR        = 0x02 << 0,
-                BATCH_STENCIL_OP_APPLY      = 0x03 << 0,
-
-                BATCH_MULTISAMPLE           = 1 << 2,
-                BATCH_WRITE_COLOR           = 1 << 3,
-                BATCH_CLEAR_STENCIL         = 1 << 4,
-                BATCH_NO_BLENDING           = 1 << 5,
-
-                BATCH_IMPORTANT_FLAGS       = BATCH_CLEAR_STENCIL,
-            };
-
-            typedef struct LSP_HIDDEN_MODIFIER batch_header_t
-            {
-                gl::program_t   enProgram;
-                uint32_t        nFlags;
-                gl::Texture    *pTexture;
-            } batch_header_t;
-
-            enum uniform_type_t
-            {
-                UNI_NONE,
-
-                UNI_FLOAT,
-                UNI_VEC2F,
-                UNI_VEC3F,
-                UNI_VEC4F,
-
-                UNI_INT,
-                UNI_VEC2I,
-                UNI_VEC3I,
-                UNI_VEC4I,
-
-                UNI_UINT,
-                UNI_VEC2U,
-                UNI_VEC3U,
-                UNI_VEC4U,
-
-                UNI_MAT4F,
-            };
-
-            typedef struct LSP_HIDDEN_MODIFIER uniform_t
-            {
-                const char     *name;
-                uniform_type_t  type;
-                union {
-                    const void    *raw;
-                    const GLfloat *f32;
-                    const GLint   *i32;
-                    const GLuint  *u32;
-                };
-            } uniform_t;
-
-            typedef struct vertex_t
-            {
-                float       x;      // X Coordinate
-                float       y;      // Y Coordinate
-                float       s;      // Texture Coordinate S
-                float       t;      // Texture Coordinate T
-                uint32_t    cmd;    // Draw command
-            } vertex_t;
-
             class LSP_HIDDEN_MODIFIER Batch
             {
                 private:
-                    typedef struct vbuffer_t
-                    {
-                        vertex_t   *v;
-                        uint32_t    count;
-                        uint32_t    capacity;
-                    } vbuffer_t;
-
-                    typedef struct ibuffer_t
-                    {
-                        union {
-                            uint8_t    *u8;
-                            uint16_t   *u16;
-                            uint32_t   *u32;
-                            void       *data;
-                        };
-
-                        uint32_t    count;
-                        uint32_t    capacity;
-                        uint32_t    szof;
-                    } ibuffer_t;
-
-                    typedef struct cbuffer_t
-                    {
-                        float      *data;       // Pointer to actual data
-                        uint32_t    count;      // Number of filled floats (should be always multiple of 4)
-                        uint32_t    size;       // Texture size
-                        uint32_t    capacity;   // Overall capacity in RGBAF32 components (4 floats per record)
-                    } cbuffer_t;
-
-                    typedef struct draw_t
-                    {
-                        batch_header_t  header;
-                        vbuffer_t       vertices;
-                        ibuffer_t       indices;
-                    } draw_t;
-
-                private:
-                    cbuffer_t               vCommands;
-                    lltl::parray<draw_t>    vBatches;
-                    draw_t                 *pCurrent;
+                    batch_cbuffer_t             vCommands;
+                    lltl::parray<batch_draw_t>  vBatches;
+                    batch_draw_t               *pCurrent;
+                    Allocator                  *pAllocator;
 
                 private:
                     static inline bool header_mismatch(const batch_header_t & a, const batch_header_t & b);
-                    static void destroy(draw_t *draw);
 
                     static void bind_uniforms(const gl::vtbl_t *vtbl, GLuint program, const gl::uniform_t *uniform);
 
@@ -160,7 +58,7 @@ namespace lsp
                     ssize_t         alloc_vertices(size_t count);
 
                 public:
-                    Batch();
+                    Batch(Allocator * alloc);
                     Batch(const Batch &) = delete;
                     Batch(Batch &&) = delete;
                     ~Batch();
@@ -236,6 +134,32 @@ namespace lsp
                     vertex_t *add_vertices(size_t count);
 
                     /**
+                     * Release set of vertices at the tail of the buffer
+                     * @param count number of vertices to release
+                     */
+                    void release_vertices(size_t count);
+
+                    /**
+                     * Add indices. The index element size can be 1, 2 or 4 bytes size, so you need
+                     * to check the size by issuing index_format() function
+                     * @param count number of indices to add
+                     * @param max_value maximum value stored to index
+                     */
+                    void *add_indices(size_t count, size_t max_value);
+
+                    /**
+                     * Release set of indices at the tail of the buffer
+                     * @param count number of indices to release
+                     */
+                    void release_indices(size_t count);
+
+                    /**
+                     * Get format of the index item
+                     * @return format of the index item
+                     */
+                    index_format_t index_format() const;
+
+                    /**
                      * Add triangle
                      * @param a index of the first vertex
                      * @param b index of the second vertex
@@ -264,6 +188,14 @@ namespace lsp
                     ssize_t htriangle(uint32_t a, uint32_t b, uint32_t c);
 
                     /**
+                     * Add indices that generate triangle fan chain
+                     * @param v0i index of the first vertex
+                     * @param count number of triangles
+                     * @return absolute index of record in index buffer or negative error code
+                     */
+                    ssize_t htriangle_fan(uint32_t v0i, uint32_t count);
+
+                    /**
                      * Add rectangle with hint
                      * @param a index of the first vertex
                      * @param b index of the second vertex
@@ -274,6 +206,14 @@ namespace lsp
                     ssize_t hrectangle(uint32_t a, uint32_t b, uint32_t c, uint32_t d);
 
                     /**
+                     * Add indices that generate rectangle fan chain
+                     * @param v0i index of the first vertex
+                     * @param count number of rectangles
+                     * @return absolute index of record in index buffer or negative error code
+                     */
+                    ssize_t hrectangle_fan(uint32_t v0i, uint32_t count);
+
+                    /**
                      * Add command
                      * @param count length of command in 32-bit floats
                      * @param buf pointer to store the pointer to the beginning of the buffer
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Data.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Data.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Data.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Data.h	2025-08-26 18:15:42.558014627 +0000
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 2 июн. 2025 г.
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_GL_DATA_H_
+#define PRIVATE_GL_DATA_H_
+
+#include <private/gl/defs.h>
+
+#ifdef LSP_PLUGINS_USE_OPENGL
+
+#include <lsp-plug.in/common/status.h>
+#include <lsp-plug.in/common/types.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace gl
+        {
+            class Texture;
+
+            enum program_t
+            {
+                GEOMETRY,
+                STENCIL,
+            };
+
+            enum attribute_t
+            {
+                VERTEX_COORDS,
+                TEXTURE_COORDS,
+                COMMAND_BUFFER,
+            };
+
+            enum batch_flags_t
+            {
+                BATCH_STENCIL_OP_MASK       = 0x03 << 0,
+                BATCH_STENCIL_OP_NONE       = 0x00 << 0,
+                BATCH_STENCIL_OP_OR         = 0x01 << 0,
+                BATCH_STENCIL_OP_XOR        = 0x02 << 0,
+                BATCH_STENCIL_OP_APPLY      = 0x03 << 0,
+
+                BATCH_MULTISAMPLE           = 1 << 2,
+                BATCH_WRITE_COLOR           = 1 << 3,
+                BATCH_CLEAR_STENCIL         = 1 << 4,
+                BATCH_NO_BLENDING           = 1 << 5,
+
+                BATCH_IMPORTANT_FLAGS       = BATCH_CLEAR_STENCIL,
+            };
+
+            enum uniform_type_t
+            {
+                UNI_NONE,
+
+                UNI_FLOAT,
+                UNI_VEC2F,
+                UNI_VEC3F,
+                UNI_VEC4F,
+
+                UNI_INT,
+                UNI_VEC2I,
+                UNI_VEC3I,
+                UNI_VEC4I,
+
+                UNI_UINT,
+                UNI_VEC2U,
+                UNI_VEC3U,
+                UNI_VEC4U,
+
+                UNI_MAT4F,
+            };
+
+            enum texture_format_t
+            {
+                TEXTURE_UNKNOWN     = -1,    // No texture format specified
+                TEXTURE_RGBA32      = 0,     // 8-bit alpha component
+                TEXTURE_ALPHA8      = 1,     // 8-bit alpha component
+                TEXTURE_PRGBA32     = 2,     // 32-bit color with 8 bits per red, gree, blue and alpha components, alpha is premultiplied
+            };
+
+            enum index_format_t
+            {
+                INDEX_FMT_U8,
+                INDEX_FMT_U16,
+                INDEX_FMT_U32,
+            };
+
+            typedef struct LSP_HIDDEN_MODIFIER uniform_t
+            {
+                const char         *name;
+                uniform_type_t      type;
+                union {
+                    const void         *raw;
+                    const GLfloat      *f32;
+                    const GLint        *i32;
+                    const GLuint       *u32;
+                };
+            } uniform_t;
+
+            typedef struct LSP_HIDDEN_MODIFIER vertex_t
+            {
+                float               x;      // X Coordinate
+                float               y;      // Y Coordinate
+                float               s;      // Texture Coordinate S
+                float               t;      // Texture Coordinate T
+                uint32_t            cmd;    // Draw command
+            } vertex_t;
+
+            typedef struct LSP_HIDDEN_MODIFIER batch_vbuffer_t
+            {
+                vertex_t           *v;
+                uint32_t            count;
+                uint32_t            capacity;
+            } batch_vbuffer_t;
+
+            typedef struct LSP_HIDDEN_MODIFIER batch_ibuffer_t
+            {
+                union {
+                    uint8_t            *u8;
+                    uint16_t           *u16;
+                    uint32_t           *u32;
+                    void               *data;
+                };
+
+                uint32_t            count;
+                uint32_t            capacity;
+                uint32_t            szof;
+            } batch_ibuffer_t;
+
+            typedef struct LSP_HIDDEN_MODIFIER batch_cbuffer_t
+            {
+                float              *data;       // Pointer to actual data
+                uint32_t            count;      // Number of filled floats (should be always multiple of 4)
+                uint32_t            size;       // Texture size
+                uint32_t            capacity;   // Overall capacity in RGBAF32 components (4 floats per record)
+            } batch_cbuffer_t;
+
+            typedef struct LSP_HIDDEN_MODIFIER batch_header_t
+            {
+                gl::program_t       enProgram;  // Used program for rendering
+                int32_t             nLeft;      // Origin offset left
+                int32_t             nTop;       // Origin offset top
+                uint32_t            nFlags;     // Flags
+                gl::Texture        *pTexture;   // Related texture
+            } batch_header_t;
+
+            typedef struct LSP_HIDDEN_MODIFIER batch_draw_t
+            {
+                batch_header_t      header;
+                batch_vbuffer_t     vertices;
+                batch_ibuffer_t     indices;
+                batch_draw_t       *next;
+                uint32_t            ttl;
+            } batch_draw_t;
+
+
+            template <class T>
+            T *safe_acquire(T *ptr)
+            {
+                if (ptr != NULL)
+                    ptr->reference_up();
+                return ptr;
+            }
+
+            template <class T>
+            void safe_release(T * &ptr)
+            {
+                if (ptr == NULL)
+                    return;
+
+                ptr->reference_down();
+                ptr = NULL;
+            }
+        } /* namespace gl */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* LSP_PLUGINS_USE_OPENGL */
+
+#endif /* PRIVATE_GL_DATA_H_ */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/gl/IContext.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/IContext.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/gl/IContext.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/IContext.h	2025-08-26 18:15:42.558014627 +0000
@@ -30,6 +30,9 @@
 #include <lsp-plug.in/common/status.h>
 #include <lsp-plug.in/lltl/darray.h>
 
+#include <private/gl/Allocator.h>
+#include <private/gl/Data.h>
+#include <private/gl/Stats.h>
 #include <private/gl/vtbl.h>
 
 namespace lsp
@@ -63,12 +66,6 @@ namespace lsp
                 };
             } context_param_t;
 
-            enum program_t
-            {
-                GEOMETRY,
-                STENCIL
-            };
-
             class LSP_HIDDEN_MODIFIER IContext
             {
                 protected:
@@ -96,6 +93,8 @@ namespace lsp
                     uint32_t            nCommandsSize;      // Size of the command texture
                     GLuint              nCommandsProcessor; // Commands processor
 
+                    Allocator           sAllocator;
+
                 protected:
                     const gl::vtbl_t   *pVtbl;
 
@@ -123,6 +122,12 @@ namespace lsp
 
                 public:
                     /**
+                     * Get data allocator
+                     * @return data allocator
+                     */
+                    inline Allocator      *allocator()  { return &sAllocator; };
+
+                    /**
                      * Mark OpenGL context as invalid
                      */
                     void invalidate();
@@ -209,9 +214,9 @@ namespace lsp
                     /**
                      * Unbind empty texture
                      * @param processor_id texture processor identifier
-                     * @param samples number of samples (multisampling_factor)
+                     * @param multisample multisampling flag
                      */
-                    void unbind_empty_texture(GLuint processor_id, size_t samples);
+                    void unbind_empty_texture(GLuint processor_id, bool multisample);
 
                 public:
                     /**
@@ -249,6 +254,14 @@ namespace lsp
                     virtual status_t program(size_t *id, program_t program);
 
                     /**
+                     * Get attribute location for specific program
+                     * @param program shader program identifier
+                     * @param attribute attribute identifier
+                     * @return attribute location or negative error code
+                     */
+                    virtual GLint attribute_location(program_t program, attribute_t attribute);
+
+                    /**
                      * Get multisampling factor
                      * @return multisampling factor
                      */
@@ -267,24 +280,6 @@ namespace lsp
                     virtual size_t height() const;
             };
 
-            template <class T>
-            T *safe_acquire(T *ptr)
-            {
-                if (ptr != NULL)
-                    ptr->reference_up();
-                return ptr;
-            }
-
-            template <class T>
-            void safe_release(T * &ptr)
-            {
-                if (ptr == NULL)
-                    return;
-
-                ptr->reference_down();
-                ptr = NULL;
-            }
-
             /**
              * Create OpenGL context using specified params
              * @param params specified params
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Stats.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Stats.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Stats.h	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Stats.h	2025-08-26 18:15:42.558014627 +0000
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 2 июн. 2025 г.
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef PRIVATE_GL_STATS_H_
+#define PRIVATE_GL_STATS_H_
+
+#include <private/gl/defs.h>
+
+#ifdef TRACE_OPENGL_STATS
+
+#include <lsp-plug.in/common/types.h>
+#include <lsp-plug.in/lltl/parray.h>
+#include <lsp-plug.in/runtime/system.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace gl
+        {
+            typedef struct gl_stats_t
+            {
+                size_t surface_alloc;
+                size_t surface_free;
+                size_t batch_alloc;
+                size_t batch_free;
+                size_t draw_alloc;
+                size_t draw_free;
+                size_t draw_acquire;
+                size_t draw_release;
+                size_t cmd_alloc;
+                size_t cmd_realloc;
+                size_t vertex_alloc;
+                size_t vertex_realloc;
+                size_t index_alloc;
+                size_t index_realloc;
+
+                gl_stats_t();
+            } gl_stats_t;
+
+            LSP_HIDDEN_MODIFIER
+            extern gl_stats_t gl_stats;
+
+            LSP_HIDDEN_MODIFIER
+            void output_stats(bool immediate);
+
+        } /* namespace gl */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#define OPENGL_INC_STATS(name) \
+    ++::lsp::ws::gl::gl_stats.name
+
+#define OPENGL_OUTPUT_STATS(immediate) \
+    ::lsp::ws::gl::output_stats(immediate)
+
+#else
+
+    #define OPENGL_INC_STATS(...)
+    #define OPENGL_OUTPUT_STATS(...)
+
+#endif /* TRACE_OPENGL_STATS */
+
+#endif /* PRIVATE_GL_STATS_H_ */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Surface.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Surface.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Surface.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Surface.h	2025-08-26 18:15:42.558014627 +0000
@@ -64,6 +64,12 @@ namespace lsp
                         float               bottom;
                     } clip_rect_t;
 
+                    typedef struct origin_t
+                    {
+                        int32_t             left;
+                        int32_t             top;
+                    } origin_t;
+
                     typedef struct color_t
                     {
                         float               r, g, b, a;
@@ -80,6 +86,14 @@ namespace lsp
                         float               te;
                     } texture_rect_t;
 
+                    typedef struct texcoord_t
+                    {
+                        float               x;
+                        float               y;
+                        float               sx;
+                        float               sy;
+                    } texcoord_t;
+
                 protected:
                     IDisplay               *pDisplay;
                     gl::IContext           *pContext;
@@ -89,7 +103,8 @@ namespace lsp
 
                     size_t                  nNumClips;
                     float                   vMatrix[16];
-                    clip_rect_t             vClips[MAX_CLIPS];
+                    clip_rect_t             vClips[MAX_CLIPS];  // Clipping rectangles
+                    origin_t                sOrigin;            // Origin
                     lltl::darray<gl::uniform_t> vUniforms;
 
                     bool                    bNested;
@@ -142,18 +157,26 @@ namespace lsp
 
                     void fill_triangle(uint32_t ci, float x0, float y0, float x1, float y1, float x2, float y2);
                     void fill_rect(uint32_t ci, float x0, float y0, float x1, float y1);
+                    void fill_textured_rect(uint32_t ci, const texcoord_t & tex, float x0, float y0, float x1, float y1);
                     void draw_line(uint32_t ci, float x0, float y0, float x1, float y1, float width);
                     void fill_triangle_fan(uint32_t ci, clip_rect_t &rect, const float *x, const float *y, size_t n);
                     void fill_circle(uint32_t ci, float x, float y, float r);
                     void wire_arc(uint32_t ci, float x, float y, float r, float a1, float a2, float width);
                     void fill_sector(uint32_t ci, float x, float y, float r, float a1, float a2);
+                    void fill_textured_sector(uint32_t ci, const texcoord_t & tex, float x, float y, float r, float a1, float a2);
                     void fill_corner(uint32_t ci, float x0, float y0, float xd, float yd, float r, float a);
                     void fill_rect(uint32_t ci, size_t mask, float radius, float left, float top, float width, float height);
+                    void fill_textured_rect(uint32_t ci, const texcoord_t & tex, size_t mask, float radius, float left, float top, float width, float height);
                     void wire_rect(uint32_t ci, size_t mask, float radius, float left, float top, float width, float height, float line_width);
                     void fill_frame(uint32_t ci, size_t flags, float radius, float fx, float fy, float fw, float fh, float ix, float iy, float iw, float ih);
                     void draw_polyline(uint32_t ci, clip_rect_t &rect, const float *x, const float *y, float width, size_t n);
                     void draw_polyline(uint32_t ci, const float *x, const float *y, float width, size_t n);
 
+                    template <class T>
+                    inline void draw_polyline(vertex_t * & vertices, T * & indices, T vi, uint32_t ci, const float *x, const float *y, float width, size_t n);
+                    template <class T>
+                    inline void draw_polyline(vertex_t * & vertices, T * & indices, T vi, uint32_t ci, clip_rect_t &rect, const float *x, const float *y, float width, size_t n);
+
                 public:
                     /** Create primary GL surface
                      *
@@ -214,6 +237,8 @@ namespace lsp
                     virtual void fill_rect(const Color &color, size_t mask, float radius, const ws::rectangle_t *r) override;
                     virtual void fill_rect(IGradient *g, size_t mask, float radius, float left, float top, float width, float height) override;
                     virtual void fill_rect(IGradient *g, size_t mask, float radius, const ws::rectangle_t *r) override;
+                    virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height) override;
+                    virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r) override;
 
                     virtual void fill_sector(const Color &c, float cx, float cy, float radius, float angle1, float angle2) override;
                     virtual void fill_triangle(IGradient *g, float x0, float y0, float x1, float y1, float x2, float y2) override;
@@ -253,6 +278,9 @@ namespace lsp
 
                     virtual bool get_antialiasing() override;
                     virtual bool set_antialiasing(bool set) override;
+
+                    virtual ws::point_t set_origin(const ws::point_t & origin) override;
+                    virtual ws::point_t set_origin(ssize_t left, ssize_t top) override;
             };
 
         } /* namespace gl */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Texture.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Texture.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/gl/Texture.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/Texture.h	2025-08-26 18:15:42.558014627 +0000
@@ -30,6 +30,7 @@
 #include <lsp-plug.in/common/types.h>
 #include <lsp-plug.in/lltl/parray.h>
 
+#include <private/gl/Data.h>
 #include <private/gl/IContext.h>
 
 namespace lsp
@@ -38,23 +39,21 @@ namespace lsp
     {
         namespace gl
         {
-            enum texture_format_t
-            {
-                TEXTURE_UNKNOWN     = -1,    // No texture format specified
-                TEXTURE_RGBA32      = 0,     // 8-bit alpha component
-                TEXTURE_ALPHA8      = 1,     // 8-bit alpha component
-                TEXTURE_PRGBA32     = 2,     // 32-bit color with 8 bits per red, gree, blue and alpha components, alpha is premultiplied
-            };
+            class IContext;
 
             class LSP_HIDDEN_MODIFIER Texture
             {
                 private:
+                    static constexpr size_t MAX_PROCESSOR_IDS   = 16;
+
+                private:
                     gl::IContext       *pContext;
                     uatomic_t           nReferences;
                     GLuint              nTextureId;
                     GLuint              nFrameBufferId;
                     GLuint              nStencilBufferId;
-                    GLuint              nProcessorId;
+                    GLuint              vProcessorIds[MAX_PROCESSOR_IDS];
+                    uint32_t            nProcessorIds;
                     uint32_t            nWidth;
                     uint32_t            nHeight;
                     texture_format_t    enFormat;
@@ -65,6 +64,8 @@ namespace lsp
                     inline GLuint       allocate_framebuffer();
                     inline GLuint       allocate_stencil();
                     inline void         deallocate_buffers();
+                    bool                bind_processor(GLuint processor_id);
+                    bool                unbind_processor(GLuint processor_id);
 
                 public:
                     Texture(IContext *ctx);
@@ -83,8 +84,8 @@ namespace lsp
                     status_t            set_image(const void *buf, size_t width, size_t height, size_t stride, texture_format_t format);
                     status_t            set_subimage(const void *buf, size_t x, size_t y, size_t width, size_t height, size_t stride);
                     void                bind(GLuint processor_id);
+                    void                unbind(GLuint processor_id);
                     status_t            resize(size_t width, size_t height);
-                    void                unbind();
                     void                reset();
 
                     status_t            begin_draw(size_t width, size_t height, texture_format_t format);
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/gl/defs.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/defs.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/gl/defs.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/defs.h	2025-08-26 18:15:42.558014627 +0000
@@ -48,6 +48,9 @@
 // Uncomment this to log all OpenGL object allocations and deletions
 //#define TRACE_OPENGL_ALLOCATIONS
 
+// Uncomment this to log all OpenGL statistics
+//#define TRACE_OPENGL_STATS
+
 #ifdef TRACE_OPENGL_ALLOCATIONS
     #define IF_TRACE_OPENGL_ALLOCATIONS(...) __VA_ARGS__
     #define lsp_gl_trace(...) lsp_trace(__VA_ARGS__)
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/gl/vtbl.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/vtbl.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/gl/vtbl.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/gl/vtbl.h	2025-08-26 18:15:42.558014627 +0000
@@ -190,10 +190,11 @@ namespace lsp
                 void GLAPIENTRY         (* glGetFloati_v)(GLenum target, GLuint index, GLfloat * data);
                 void GLAPIENTRY         (* glGetDoublei_v)(GLenum target, GLuint index, GLdouble * data);
                 void GLAPIENTRY         (* glGetInteger64i_v)(GLenum target, GLuint index, GLint64 * data);
+                const GLubyte *         (* glGetString)(GLenum name);
+                const GLubyte *         (* glGetStringi)(GLenum name, GLuint index);
+                GLenum GLAPIENTRY       (* glGetError)();
 
                 // Drawing operations
-                const GLubyte           (* glGetString)(GLenum name);
-                const GLubyte           (* glGetStringi)(GLenum name, GLuint index);
                 void GLAPIENTRY         (* glClearColor)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
                 void GLAPIENTRY         (* glClear)(GLbitfield mask);
                 void GLAPIENTRY         (* glBlitFramebuffer)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/glx/Context.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/glx/Context.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/glx/Context.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/glx/Context.h	2025-08-26 18:15:42.558014627 +0000
@@ -27,6 +27,7 @@
 #ifdef LSP_PLUGINS_USE_OPENGL_GLX
 
 #include <lsp-plug.in/lltl/parray.h>
+#include <lsp-plug.in/runtime/LSPString.h>
 
 #include <private/gl/IContext.h>
 #include <private/glx/vtbl.h>
@@ -42,6 +43,15 @@ namespace lsp
              */
             class LSP_HIDDEN_MODIFIER Context: public gl::IContext
             {
+                public:
+                    enum features_t
+                    {
+                        NO_FEATURES             = 0,
+                        OPENGL_3_3_OR_ABOVE     = 1 << 0,
+                        LAYOUT_SUPPORT          = 1 << 1,
+                        TEXTURE_MULTISAMPLE     = 1 << 2,
+                    };
+
                 private:
                     enum pflags_t
                     {
@@ -68,25 +78,26 @@ namespace lsp
                     ::Display          *pDisplay;
                     ::GLXContext        hContext;
                     ::Window            hWindow;
+                    uint32_t            nFeatures;
                     uint32_t            nMultisample;
 
                     lltl::parray<program_t> vPrograms;
 
                 private:
-                    static const char  *vertex_shader(size_t program_id);
-                    static const char  *fragment_shader(size_t program_id);
-                    static bool         check_gl_error(const char *context);
+                    static const char  *vertex_shader(gl::program_t program);
+                    static const char  *fragment_shader(gl::program_t program);
 
                 private:
                     void                destroy(program_t *prg);
-                    void                clear_errors();
+                    bool                check_gl_error(const char *context);
                     bool                check_compile_status(const char *context, GLenum id, compile_status_t type);
+                    bool                make_shader(LSPString &dst, const char *text) const;
 
                 protected:
                     virtual void        cleanup() override;
 
                 public:
-                    explicit Context(::Display *dpy, ::GLXContext ctx, ::Window wnd, glx::vtbl_t *vtbl, uint32_t multisample);
+                    explicit Context(::Display *dpy, ::GLXContext ctx, ::Window wnd, glx::vtbl_t *vtbl, uint32_t features, uint32_t multisample);
                     virtual ~Context() override;
 
                 public:
@@ -94,6 +105,7 @@ namespace lsp
                     virtual status_t    activate() override;
                     virtual status_t    deactivate() override;
                     virtual status_t    program(size_t *id, gl::program_t program) override;
+                    virtual GLint       attribute_location(gl::program_t program, gl::attribute_t attribute) override;
                     virtual uint32_t    multisample() const override;
                     virtual void        swap_buffers(size_t width, size_t height) override;
                     virtual size_t      width() const override;
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/glx/shaders.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/glx/shaders.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/glx/shaders.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/glx/shaders.h	2025-08-26 18:15:42.558014627 +0000
@@ -35,13 +35,18 @@ namespace lsp
             #define SHADER(x) x "\n"
 
             static const char *geometry_vertex_shader =
-                SHADER("#version 330 core")
-                SHADER("")
                 SHADER("uniform mat4 u_model;")
+                SHADER("uniform vec2 u_origin;")
                 SHADER("")
+                SHADER("#ifdef USE_LAYOUTS")
+                SHADER("layout(location=0) in vec2 a_vertex;")
+                SHADER("layout(location=1) in vec2 a_texcoord;")
+                SHADER("layout(location=2) in uint a_command;")
+                SHADER("#else")
                 SHADER("in vec2 a_vertex;")
                 SHADER("in vec2 a_texcoord;")
                 SHADER("in uint a_command;")
+                SHADER("#endif")
                 SHADER("")
                 SHADER("out vec2 b_texcoord;")
                 SHADER("flat out int b_index;")
@@ -57,16 +62,17 @@ namespace lsp
                 SHADER("    b_clips = int(a_command & 0x7u);")
                 SHADER("    b_frag_coord = a_vertex;")
                 SHADER("")
-                SHADER("    gl_Position = u_model * vec4(a_vertex, 0.0f, 1.0f);")
+                SHADER("    gl_Position = u_model * vec4(a_vertex.x + u_origin.x, a_vertex.y + u_origin.y, 0.0f, 1.0f);")
                 SHADER("}")
                 SHADER("");
 
             static const char *geometry_fragment_shader =
-                SHADER("#version 330 core")
-                SHADER("")
                 SHADER("uniform sampler2D u_commands;")
                 SHADER("uniform sampler2D u_texture;")
+                SHADER("")
+                SHADER("#ifdef USE_TEXTURE_MULTISAMPLE")
                 SHADER("uniform sampler2DMS u_ms_texture;")
+                SHADER("#endif")
                 SHADER("")
                 SHADER("in vec2 b_texcoord;")
                 SHADER("flat in int b_index;")
@@ -80,6 +86,7 @@ namespace lsp
                 SHADER("    return texelFetch(sampler, ivec2(offset % tsize.x, offset / tsize.x), 0);")
                 SHADER("}")
                 SHADER("")
+                SHADER("#ifdef USE_TEXTURE_MULTISAMPLE")
                 SHADER("vec4 textureMultisample(sampler2DMS sampler, vec2 coord, float factor)")
                 SHADER("{")
                 SHADER("    vec4 color = vec4(0.0);")
@@ -92,6 +99,7 @@ namespace lsp
                 SHADER("")
                 SHADER("    return color / factor;")
                 SHADER("}")
+                SHADER("#endif")
                 SHADER("")
                 SHADER("void main()")
                 SHADER("{")
@@ -139,9 +147,13 @@ namespace lsp
                 SHADER("    {")
                 SHADER("        vec4 mc = commandFetch(u_commands, index);")            // Modulating color
                 SHADER("        vec4 tp = commandFetch(u_commands, index + 1);")        // Texture parameters: initial size { w, h }, format, multisampling
+                SHADER("#ifdef USE_TEXTURE_MULTISAMPLE")
                 SHADER("        vec4 tcolor = (tp.w > 0.5f) ? ")                    // Get color from texture
                 SHADER("            textureMultisample(u_ms_texture, b_texcoord, tp.w) :")
                 SHADER("            texture(u_texture, b_texcoord);")
+                SHADER("#else")
+                SHADER("        vec4 tcolor = texture(u_texture, b_texcoord);")     // Get color from texture
+                SHADER("#endif")
                 SHADER("        int format = int(tp.z);")                           // Get texture format
                 SHADER("        gl_FragColor = ")
                 SHADER("            (format == 0) ? vec4(tcolor.rgb * mc.rgb * tcolor.a, tcolor.a * mc.a)") // Usual RGBA
@@ -152,21 +164,22 @@ namespace lsp
                 SHADER("");
 
             static const char *stencil_vertex_shader =
-                SHADER("#version 330 core")
-                SHADER("")
                 SHADER("uniform mat4 u_model;")
+                SHADER("uniform vec2 u_origin;")
                 SHADER("")
+                SHADER("#ifdef USE_LAYOUTS")
+                SHADER("layout(location=0) in vec2 a_vertex;")
+                SHADER("#else")
                 SHADER("in vec2 a_vertex;")
+                SHADER("#endif")
                 SHADER("")
                 SHADER("void main()")
                 SHADER("{")
-                SHADER("    gl_Position = u_model * vec4(a_vertex, 0.0f, 1.0f);")
+                SHADER("    gl_Position = u_model * vec4(a_vertex.x + u_origin.x, a_vertex.y + u_origin.y, 0.0f, 1.0f);")
                 SHADER("}")
                 SHADER("");
 
             static const char *stencil_fragment_shader =
-                SHADER("#version 330 core")
-                SHADER("")
                 SHADER("void main()")
                 SHADER("{")
                 SHADER("    gl_FragColor = vec4(1.0f, 1.0f, 1.0f, 0.0f);")
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/win/WinDDSurface.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/win/WinDDSurface.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/win/WinDDSurface.h	2025-03-01 12:42:55.520656022 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/win/WinDDSurface.h	2025-08-26 18:15:42.558014627 +0000
@@ -66,6 +66,8 @@ namespace lsp
                     size_t                      nVersion;       // The version, for valid surface should match the shared version
                     ID2D1RenderTarget          *pDC;            // Pointer to drawing context
                     ID2D1StrokeStyle           *pStrokeStyle;   // Line cap style
+                    float                       fOriginX;       // X origin
+                    float                       fOriginY;       // Y origin
                     bool                        bNested;        // Flag of the nested surface
 
                 #ifdef LSP_DEBUG
@@ -85,6 +87,7 @@ namespace lsp
                     inline bool bad_state() const;
                     void    do_destroy();
 
+                    ID2D1PathGeometry *make_rounded_rectangle(const D2D_RECT_F &rect, size_t mask, float radius);
                     void    draw_rounded_rectangle(const D2D_RECT_F &rect, size_t mask, float radius, float line_width, ID2D1Brush *brush);
                     void    draw_triangle(ID2D1Brush *brush, float x0, float y0, float x1, float y1, float x2, float y2);
                     void    draw_negative_arc(ID2D1Brush *brush, float x0, float y0, float x1, float y1, float x2, float y2);
@@ -124,6 +127,8 @@ namespace lsp
                     virtual void fill_rect(const Color &color, size_t mask, float radius, const ws::rectangle_t *r) override;
                     virtual void fill_rect(IGradient *g, size_t mask, float radius, float left, float top, float width, float height) override;
                     virtual void fill_rect(IGradient *g, size_t mask, float radius, const ws::rectangle_t *r) override;
+                    virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height) override;
+                    virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r) override;
 
                     virtual void fill_sector(const Color &c, float cx, float cy, float radius, float angle1, float angle2) override;
                     virtual void fill_triangle(IGradient *g, float x0, float y0, float x1, float y1, float x2, float y2) override;
@@ -174,6 +179,8 @@ namespace lsp
 
                     virtual bool get_antialiasing() override;
                     virtual bool set_antialiasing(bool set) override;
+                    virtual ws::point_t set_origin(const ws::point_t & origin) override;
+                    virtual ws::point_t set_origin(ssize_t left, ssize_t top) override;
 
                 public:
                     void        invalidate();
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/win/WinWindow.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/win/WinWindow.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/win/WinWindow.h	2025-03-01 12:42:55.524655997 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/win/WinWindow.h	2025-08-26 18:15:42.562014589 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-ws-lib
  * Created on: 1 июл. 2022 г.
@@ -91,6 +91,7 @@ namespace lsp
                     size_limit_t        sConstraints;   // Window constraints
                     mouse_pointer_t     enPointer;      // Mouse pointer
                     border_style_t      enBorderStyle;  // Border style of the window
+                    window_state_t      enState;        // Window state
                     size_t              nActions;       // Allowed window actions
                     POINT               sMousePos;      // Last mouse position for tracking MOUSE_OUT event
                     CURSORINFO          sSavedCursor;   // The saved cursor before the mouse has entered the window
@@ -110,6 +111,7 @@ namespace lsp
                     void                place_above(HWND wnd);
                     bool                placement_window(HWND *result, HWND wnd);
                     static HWND         wrapping_window(HWND wnd);
+                    static DWORD        encode_window_state(window_state_t state);
 
                 public:
                     explicit WinWindow(WinDisplay *dpy, HWND wnd, IEventHandler *handler, bool wrapper);
@@ -175,6 +177,9 @@ namespace lsp
                     virtual void       *parent() const override;
                     virtual status_t    set_parent(void *parent) override;
 
+                    virtual status_t    get_window_state(window_state_t *state) override;
+                    virtual status_t    set_window_state(window_state_t state) override;
+
                 public:
                     virtual status_t    handle_event(const event_t *ev) override;
 
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/x11/X11AtomList.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/x11/X11AtomList.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/x11/X11AtomList.h	2025-03-01 12:42:55.524655997 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/x11/X11AtomList.h	2025-08-26 18:15:42.562014589 +0000
@@ -107,6 +107,7 @@ WM_ATOM(WM_STATE)
 WM_ATOM(WM_TAKE_FOCUS)
 WM_ATOM(WM_WINDOW_ROLE)
 WM_ATOM(WM_TRANSIENT_FOR)
+WM_ATOM(WM_CHANGE_STATE)
 
 // Motif WM Hints
 WM_ATOM(_MOTIF_WM_HINTS)
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/x11/X11CairoSurface.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/x11/X11CairoSurface.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/x11/X11CairoSurface.h	2025-03-01 12:42:55.524655997 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/x11/X11CairoSurface.h	2025-08-26 18:15:42.562014589 +0000
@@ -51,6 +51,9 @@ namespace lsp
                     cairo_t                *pCR;
                     cairo_font_options_t   *pFO;
                     X11Display             *pDisplay;
+
+                    float                   fOriginX;
+                    float                   fOriginY;
                 #ifdef LSP_DEBUG
                     size_t                  nNumClips;
                 #endif /* LSP_DEBUG */
@@ -147,6 +150,8 @@ namespace lsp
                     virtual void fill_rect(const Color &color, size_t mask, float radius, const ws::rectangle_t *r) override;
                     virtual void fill_rect(IGradient *g, size_t mask, float radius, float left, float top, float width, float height) override;
                     virtual void fill_rect(IGradient *g, size_t mask, float radius, const ws::rectangle_t *r) override;
+                    virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height) override;
+                    virtual void fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r) override;
 
                     virtual void fill_sector(const Color &c, float cx, float cy, float radius, float angle1, float angle2) override;
                     virtual void fill_triangle(IGradient *g, float x0, float y0, float x1, float y1, float x2, float y2) override;
@@ -190,7 +195,8 @@ namespace lsp
 
                     virtual bool get_antialiasing() override;
                     virtual bool set_antialiasing(bool set) override;
-
+                    virtual ws::point_t set_origin(const ws::point_t & origin) override;
+                    virtual ws::point_t set_origin(ssize_t left, ssize_t top) override;
             };
 
         } /* namespace x11 */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/x11/X11Display.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/x11/X11Display.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/x11/X11Display.h	2025-03-01 12:42:55.524655997 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/x11/X11Display.h	2025-08-26 18:15:42.562014589 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-ws-lib
  * Created on: 10 окт. 2016 г.
@@ -247,7 +247,7 @@ namespace lsp
                     void            drop_mime_types(lltl::parray<char> *ctype);
                     static status_t sink_data_source(IDataSink *dst, IDataSource *src);
 
-                    void            handle_property_notify(XPropertyEvent *ev);
+                    bool            handle_property_notify(XPropertyEvent *ev);
                     status_t        handle_property_notify(cb_recv_t *task, XPropertyEvent *ev);
                     status_t        handle_property_notify(cb_send_t *task, XPropertyEvent *ev);
                     status_t        handle_property_notify(dnd_recv_t *task, XPropertyEvent *ev);
@@ -282,6 +282,8 @@ namespace lsp
 
                     status_t        init_freetype_library();
 
+                    status_t        read_window_state(window_state_t *state, Window wnd);
+
                     bool            translate_coordinates(Window src_w, Window dest_w, int src_x, int src_y, int *dest_x, int *dest_y, Window *child_return);
 
                     static void                 drop_monitors(lltl::darray<MonitorInfo> *list);
@@ -292,12 +294,17 @@ namespace lsp
 
                 public:
                     explicit X11Display();
-                    virtual ~X11Display();
+                    X11Display(const X11Display &) = delete;
+                    X11Display(X11Display &&) = delete;
+                    virtual ~X11Display() override;
+
+                    X11Display & operator = (const X11Display &) = delete;
+                    X11Display & operator = (X11Display &&) = delete;
 
                     virtual status_t            init(int argc, const char **argv) override;
                     virtual void                destroy() override;
 
-                public:
+                public: // ws::IDisplay
                     virtual IWindow            *create_window() override;
                     virtual IWindow            *create_window(size_t screen) override;
                     virtual IWindow            *create_window(void *handle) override;
@@ -336,6 +343,8 @@ namespace lsp
 
                     virtual void                sync() override;
 
+                    virtual status_t            get_file_descriptor(int *fd) override;
+
                 public:
                     void                        handle_error(XErrorEvent *ev);
 
diff -pruN 1.2.21-5/modules/lsp-ws-lib/include/private/x11/X11Window.h 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/x11/X11Window.h
--- 1.2.21-5/modules/lsp-ws-lib/include/private/x11/X11Window.h	2025-03-01 12:42:55.524655997 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/include/private/x11/X11Window.h	2025-08-26 18:15:42.562014589 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-ws-lib
  * Created on: 10 окт. 2016 г.
@@ -72,6 +72,7 @@ namespace lsp
                     size_t              nScreen;
                     size_t              nFlags;
                     mouse_pointer_t     enPointer;
+                    window_state_t      enState;
                     bool                bWrapper;
                     bool                bVisible;
 
@@ -170,8 +171,11 @@ namespace lsp
                     virtual void       *parent() const override;
                     virtual status_t    set_parent(void *parent) override;
 
+                    virtual status_t    get_window_state(window_state_t *state) override;
+                    virtual status_t    set_window_state(window_state_t state) override;
+
                 public:
-                    virtual status_t handle_event(const event_t *ev) override;
+                    virtual status_t    handle_event(const event_t *ev) override;
             };
         } /* namespace x11 */
     } /* namespace ws */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/make/tools.mk 1.2.23-0ubuntu1/modules/lsp-ws-lib/make/tools.mk
--- 1.2.21-5/modules/lsp-ws-lib/make/tools.mk	2025-03-01 12:42:55.524655997 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/make/tools.mk	2025-08-26 18:15:42.562014589 +0000
@@ -89,6 +89,7 @@ INSTALL            ?= $(X_INSTALL_TOOL)
 FLAG_RELRO         := -Wl,-z,relro,-z,now
 FLAG_STDLIB        := 
 FLAG_GC_SECTIONS   := -Wl,--gc-sections
+FLAG_AS_NEEDED     := -Wl,-as-needed
 NOARCH_CFLAGS      := 
 NOARCH_CXXFLAGS    := 
 NOARCH_EXE_FLAGS   := 
@@ -108,7 +109,8 @@ else ifeq ($(PLATFORM),Windows)
   NOARCH_LDFLAGS     += -T $(CURDIR)/make/ld-windows.script
 else ifeq ($(PLATFORM),MacOS)
   FLAG_RELRO          =
-  FLAG_GC_SECTIONS    = 
+  FLAG_GC_SECTIONS    =
+  FLAG_AS_NEEDED      =
   NOARCH_CXXFLAGS    += -std=c++0x
   NOARCH_LDFLAGS     += -keep_private_externs
 else ifeq ($(PLATFORM),BSD)
@@ -200,11 +202,11 @@ NOARCH_LDFLAGS     += -r
 LDFLAGS            := $(ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 HOST_LDFLAGS       := $(HOST_ARCHITECTURE_LDFLAGS) $(NOARCH_LDFLAGS)
 
-NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS)
+NOARCH_EXE_FLAGS   += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED)
 EXE_FLAGS          := $(ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 HOST_EXE_FLAGS     := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_EXE_FLAGS)
 
-NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) -shared $(FLAG_STDLIB) -fPIC 
+NOARCH_SO_FLAGS    += $(FLAG_RELRO) $(FLAG_GC_SECTIONS) $(FLAG_AS_NEEDED) -shared $(FLAG_STDLIB) -fPIC 
 SO_FLAGS           := $(ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 HOST_SO_FLAGS      := $(HOST_ARCHITECTURE_CFLAGS) $(NOARCH_SO_FLAGS)
 
diff -pruN 1.2.21-5/modules/lsp-ws-lib/modules.mk 1.2.23-0ubuntu1/modules/lsp-ws-lib/modules.mk
--- 1.2.21-5/modules/lsp-ws-lib/modules.mk	2025-03-01 12:42:55.524655997 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/modules.mk	2025-08-26 18:15:42.562014589 +0000
@@ -20,55 +20,55 @@
 
 #------------------------------------------------------------------------------
 # Variables that describe source code dependencies
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := src
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := src
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
@@ -76,6 +76,21 @@ LSP_TEST_FW_URL_RW         := git@github
 
 #------------------------------------------------------------------------------
 # Variables that describe system dependencies
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
 LIBCAIRO_VERSION           := system
 LIBCAIRO_NAME              := cairo
 LIBCAIRO_TYPE              := pkg
diff -pruN 1.2.21-5/modules/lsp-ws-lib/project.mk 1.2.23-0ubuntu1/modules/lsp-ws-lib/project.mk
--- 1.2.21-5/modules/lsp-ws-lib/project.mk	2025-03-01 12:42:55.524655997 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/project.mk	2025-08-26 18:15:42.562014589 +0000
@@ -23,5 +23,5 @@ ARTIFACT_ID                 = LSP_WS_LIB
 ARTIFACT_NAME               = lsp-ws-lib
 ARTIFACT_DESC               = LSP window subsystem core library
 ARTIFACT_HEADERS            = lsp-plug.in
-ARTIFACT_VERSION            = 1.0.27
+ARTIFACT_VERSION            = 1.0.29
 
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/Makefile 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/Makefile
--- 1.2.21-5/modules/lsp-ws-lib/src/Makefile	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/Makefile	2025-08-26 18:15:42.566014550 +0000
@@ -60,24 +60,35 @@ ARTIFACT_PC             = $(ARTIFACT_BIN
 ARTIFACT_DEPS           = $(call dquery, OBJ, $(ARTIFACT_DEPENDENCIES))
 ARTIFACT_CFLAGS         = $(call query, CFLAGS, $(ARTIFACT_DEPENDENCIES) $(HOST)$(ARTIFACT_ID))
 ARTIFACT_LDFLAGS        = $(call query, LDFLAGS, $(ARTIFACT_DEPENDENCIES) $(HOST)$(ARTIFACT_ID))
+
 ARTIFACT_OBJFILES       = $(call query, OBJ, $(ARTIFACT_DEPENDENCIES) $(HOST)$(ARTIFACT_ID))
 
 ARTIFACT_TARGETS        = $(ARTIFACT_LIB) $(ARTIFACT_SLIB) $(ARTIFACT_PC)
 
 # Source code
 CXX_SRC_MAIN            = $(call rwildcard, main, *.cpp)
+MM_SRC_MAIN             = $(call rwildcard, main, *.mm)
 CXX_SRC_EXPORT          = $(call rwildcard, export, *.cpp)
 CXX_SRC_TEST            = $(call rwildcard, test, *.cpp)
 CXX_SRC_NOTEST          =
 CXX_SRC_EXT             =
 CXX_SRC                 = $(CXX_SRC_MAIN) $(CXX_SRC_EXT)
+ifeq ($(PLATFORM),MacOS)
+  CXX_SRC                += $(MM_SRC_MAIN)
+endif
 
 CXX_OBJ_MAIN            = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_MAIN))
+MM_OBJ_MAIN             = $(patsubst %.mm,  $(ARTIFACT_BIN)/%.o, $(MM_SRC_MAIN))
 CXX_OBJ_EXPORT          = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_EXPORT))
 CXX_OBJ_TEST            = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_TEST))
 CXX_OBJ_NOTEST          = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_NOTEST))
 CXX_OBJ_EXT             = $(patsubst %.cpp, $(ARTIFACT_BIN)/%.o, $(CXX_SRC_EXT))
+
 CXX_OBJ                 = $(CXX_OBJ_MAIN) $(CXX_OBJ_EXT)
+ifeq ($(PLATFORM),MacOS)
+  CXX_OBJ                += $(MM_OBJ_MAIN)
+endif
+
 CXX_OBJ_ALL             = \
   $(CXX_OBJ_MAIN) \
   $(CXX_OBJ_EXPORT) \
@@ -85,8 +96,19 @@ CXX_OBJ_ALL             = \
   $(CXX_OBJ_TEST) \
   $(CXX_OBJ_NOTEST)
 
+MM_OBJ_ALL              = \
+  $(MM_OBJ_MAIN) 
+
+OBJ_ALL                 = $(CXX_OBJ_ALL)
+ifeq ($(PLATFORM),MacOS)
+  OBJ_ALL                += $(MM_OBJ_ALL)
+endif
+
 ALL_HEADERS             = $(call rwildcard, $(ARTIFACT_INC), *.h)
+
 CXX_FILE                = $(patsubst $(ARTIFACT_BIN)/%.o,%.cpp, $(@))
+MM_FILE                 = $(patsubst $(ARTIFACT_BIN)/%.o,%.mm, $(@)) 
+
 CXX_HDR_PATHS           = $(foreach hdr,$(ARTIFACT_HEADERS),$(ARTIFACT_INC)/$(hdr))
 CXX_HEADERS             = $(foreach path,$(CXX_HDR_PATHS),$(call rwildcard, $(path), *.h))
 CXX_INSTHEADERS         = $(patsubst $(ARTIFACT_INC)/%,$(DESTDIR)$(INCDIR)/%,$(CXX_HEADERS))
@@ -118,7 +140,12 @@ $(CXX_OBJ_ALL):
 	echo "  $($(HOST)CXX)  [$(ARTIFACT_NAME)] $(CXX_FILE)"
 	mkdir -p $(dir $@)
 	$($(HOST)CXX) -o $(@) -c $(CXX_FILE) -fPIC $($(HOST)CXXFLAGS) $(ARTIFACT_MFLAGS) $($(HOST)EXT_FLAGS) $(INCLUDE) $(ARTIFACT_CFLAGS) -MMD -MP -MF $(DEP_FILE) -MT $(@)
-	
+
+$(MM_OBJ_ALL):
+	echo "  $($(HOST)CXX)  [$(ARTIFACT_NAME)] $(MM_FILE)"
+	mkdir -p $(dir $@)
+	$($(HOST)CXX) -o $(@) -c $(MM_FILE) -fPIC $($(HOST)CXXFLAGS) $(ARTIFACT_MFLAGS) $($(HOST)EXT_FLAGS) $(INCLUDE) $(ARTIFACT_CFLAGS) -MMD -MP -MF $(DEP_FILE) -MT $(@)
+
 # Producing large object files
 $(ARTIFACT_OBJ): $(CXX_OBJ)
 	@echo "  $($(HOST)LD)   [$(ARTIFACT_NAME)] $(notdir $(ARTIFACT_OBJ))"
@@ -180,4 +207,5 @@ uninstall:
 	echo "Uninstall OK"
 
 # Dependencies
--include $(foreach objfile,$(CXX_OBJ_ALL),$(patsubst %.o,%.d,$(objfile)))
+-include $(foreach objfile,$(OBJ_ALL),$(patsubst %.o,%.d,$(objfile)))
+
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/IDisplay.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/IDisplay.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/IDisplay.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/IDisplay.cpp	2025-08-26 18:15:42.566014550 +0000
@@ -1006,5 +1006,10 @@ namespace lsp
             return old;
         }
 
+        status_t IDisplay::get_file_descriptor(int *fd)
+        {
+            return STATUS_NOT_SUPPORTED;
+        }
+
     } /* namespace ws */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/IGradient.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/IGradient.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/IGradient.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/IGradient.cpp	2025-08-26 18:15:42.566014550 +0000
@@ -39,16 +39,26 @@ namespace lsp
         {
         }
 
-        void IGradient::set_start(const Color &c)
+        void IGradient::set_start(const Color & c)
         {
             set_start(c.red(), c.green(), c.blue(), c.alpha());
         }
 
-        void IGradient::set_start(const Color &c, float a)
+        void IGradient::set_start(const Color & c, float a)
         {
             set_start(c.red(), c.green(), c.blue(), a);
         }
 
+        void IGradient::set_start(const Color *c)
+        {
+            set_start(c->red(), c->green(), c->blue(), c->alpha());
+        }
+
+        void IGradient::set_start(const Color *c, float a)
+        {
+            set_start(c->red(), c->green(), c->blue(), a);
+        }
+
         void IGradient::set_start_rgb(uint32_t color)
         {
             set_start(
@@ -71,31 +81,41 @@ namespace lsp
         {
         }
 
-        void IGradient::set_stop(const Color &c)
+        void IGradient::set_stop(const Color & c)
         {
             set_stop(c.red(), c.green(), c.blue(), c.alpha());
         }
 
-        void IGradient::set_stop(const Color &c, float a)
+        void IGradient::set_stop(const Color & c, float a)
         {
             set_stop(c.red(), c.green(), c.blue(), a);
         }
 
+        void IGradient::set_stop(const Color *c)
+        {
+            set_stop(c->red(), c->green(), c->blue(), c->alpha());
+        }
+
+        void IGradient::set_stop(const Color *c, float a)
+        {
+            set_stop(c->red(), c->green(), c->blue(), a);
+        }
+
         void IGradient::set_stop_rgb(uint32_t color)
         {
             set_stop(
-                (color & 0xff) * k_color,
-                ((color >> 8) & 0xff) * k_color,
                 ((color >> 16) & 0xff) * k_color,
+                ((color >> 8) & 0xff) * k_color,
+                (color & 0xff) * k_color,
                 0.0f);
         }
 
         void IGradient::set_stop_rgba(uint32_t color)
         {
             set_stop(
-                (color & 0xff) * k_color,
-                ((color >> 8) & 0xff) * k_color,
                 ((color >> 16) & 0xff) * k_color,
+                ((color >> 8) & 0xff) * k_color,
+                (color & 0xff) * k_color,
                 ((color >> 24) & 0xff) * k_color);
         }
 
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/ISurface.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/ISurface.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/ISurface.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/ISurface.cpp	2025-08-26 18:15:42.566014550 +0000
@@ -131,6 +131,15 @@ namespace lsp
             fill_rect(g, radius, mask, r->nLeft, r->nTop, r->nWidth, r->nHeight);
         }
 
+        void ISurface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height)
+        {
+        }
+
+        void ISurface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r)
+        {
+            fill_rect(s, alpha, mask, radius, r->nLeft, r->nTop, r->nWidth, r->nHeight);
+        }
+
         void ISurface::fill_sector(const Color &c, float cx, float cy, float radius, float angle1, float angle2)
         {
         }
@@ -339,5 +348,16 @@ namespace lsp
             return false;
         }
 
+        ws::point_t ISurface::set_origin(const ws::point_t & origin)
+        {
+            return set_origin(origin.nLeft, origin.nTop);
+        }
+
+        ws::point_t ISurface::set_origin(ssize_t left, ssize_t top)
+        {
+            const ws::point_t result = { 0, 0};
+            return result;
+        }
+
     } /* namespace ws */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/IWindow.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/IWindow.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/IWindow.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/IWindow.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -422,5 +422,15 @@ namespace lsp
             return STATUS_NOT_IMPLEMENTED;
         }
 
+        status_t IWindow::get_window_state(window_state_t *state)
+        {
+            return STATUS_NOT_IMPLEMENTED;
+        }
+
+        status_t IWindow::set_window_state(window_state_t state)
+        {
+            return STATUS_NOT_IMPLEMENTED;
+        }
+
     } /* namespace ws */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoGradient.mm 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoGradient.mm
--- 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoGradient.mm	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoGradient.mm	2025-08-26 18:15:42.570014511 +0000
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 12 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#import <CoreGraphics/CoreGraphics.h>
+
+#include <private/cocoa/CocoaCairoGradient.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace cocoa
+        {
+            CocoaCairoGradient::CocoaCairoGradient(const linear_t & params)
+            {
+                pCP         = NULL;
+
+                sLinear     = params;
+
+                sStart.r    = 0.0f;
+                sStart.g    = 0.0f;
+                sStart.b    = 0.0f;
+                sStart.a    = 1.0f;
+
+                sEnd.r      = 1.0f;
+                sEnd.g      = 1.0f;
+                sEnd.b      = 1.0f;
+                sEnd.a      = 0.0f;
+
+                bLinear     = true;
+            }
+
+            CocoaCairoGradient::CocoaCairoGradient(const radial_t & params)
+            {
+                pCP         = NULL;
+
+                sRadial     = params;
+
+                sStart.r    = 0.0f;
+                sStart.g    = 0.0f;
+                sStart.b    = 0.0f;
+                sStart.a    = 1.0f;
+
+                sEnd.r      = 1.0f;
+                sEnd.g      = 1.0f;
+                sEnd.b      = 1.0f;
+                sEnd.a      = 0.0f;
+
+                bLinear     = false;
+            }
+
+            CocoaCairoGradient::~CocoaCairoGradient()
+            {
+                drop_pattern();
+            }
+
+            void CocoaCairoGradient::drop_pattern()
+            {
+                if (pCP != NULL)
+                {
+                    cairo_pattern_destroy(pCP);
+                    pCP = NULL;
+                }
+            }
+
+            void CocoaCairoGradient::apply(cairo_t *cr)
+            {
+                if (pCP == NULL)
+                {
+                    pCP = (bLinear) ?
+                        ::cairo_pattern_create_linear(sLinear.x1, sLinear.y1, sLinear.x2, sLinear.y2) :
+                        ::cairo_pattern_create_radial(sRadial.x1, sRadial.y1, 0, sRadial.x2, sRadial.y2, sRadial.r);
+
+                    ::cairo_pattern_add_color_stop_rgba(pCP, 0.0f, sStart.r, sStart.g, sStart.b, sStart.a);
+                    ::cairo_pattern_add_color_stop_rgba(pCP, 1.0f, sEnd.r, sEnd.g, sEnd.b, sEnd.a);
+                }
+
+                cairo_set_source(cr, pCP);
+            }
+
+            void CocoaCairoGradient::set_start(float r, float g, float b, float a)
+            {
+                drop_pattern();
+
+                sStart.r = r;
+                sStart.g = g;
+                sStart.b = b;
+                sStart.a = 1.0f - a;
+            }
+
+            void CocoaCairoGradient::set_stop(float r, float g, float b, float a)
+            {
+                drop_pattern();
+
+                sEnd.r = r;
+                sEnd.g = g;
+                sEnd.b = b;
+                sEnd.a = 1.0f - a;
+            }
+
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* defined(PLATFORM_MACOSX) */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoSurface.mm 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoSurface.mm
--- 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoSurface.mm	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoSurface.mm	2025-08-26 18:15:42.570014511 +0000
@@ -0,0 +1,1761 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 12 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#import <CoreGraphics/CoreGraphics.h>
+
+#include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/stdlib/math.h>
+
+#include <cairo.h>
+#include <cairo-quartz.h>
+
+#include <private/freetype/FontManager.h>
+#include <private/cocoa/CocoaCairoGradient.h>
+#include <private/cocoa/CocoaCairoSurface.h>
+#include <private/cocoa/CocoaDisplay.h>
+#include <private/cocoa/CocoaCairoView.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace cocoa
+        {
+            constexpr float k_color = 1.0f / 255.0f;
+
+            static inline cairo_antialias_t decode_antialiasing(const Font &f)
+            {
+                switch (f.antialiasing())
+                {
+                    case FA_DISABLED: return CAIRO_ANTIALIAS_NONE;
+                    case FA_ENABLED: return CAIRO_ANTIALIAS_GOOD;
+                    default: break;
+                }
+                return CAIRO_ANTIALIAS_DEFAULT;
+            }
+
+            CocoaCairoSurface::CocoaCairoSurface(CocoaDisplay *dpy, CocoaCairoView *view, size_t width, size_t height):
+                ISurface(width, height, ST_IMAGE)
+            {
+                lsp_trace("Surface %p constructed with view %p", this, view);
+                pDisplay        = dpy;
+                pCocoaView      = view;
+                pCR             = NULL;
+                pFO             = NULL;
+                pRoot           = NULL;
+                pSurface        = ::cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+                fOriginX        = 0.0f;
+                fOriginY        = 0.0f;
+
+            #ifdef LSP_DEBUG
+                nNumClips       = 0;
+            #endif 
+            }
+
+            CocoaCairoSurface::CocoaCairoSurface(CocoaDisplay *dpy, size_t width, size_t height):
+                ISurface(width, height, ST_IMAGE)
+            {
+                pDisplay        = dpy;
+                pCR             = NULL;
+                pFO             = NULL;
+                pRoot           = NULL;
+                pSurface        = ::cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+                fOriginX        = 0.0f;
+                fOriginY        = 0.0f;
+
+            #ifdef LSP_DEBUG
+                nNumClips       = 0;
+            #endif /* LSP_DEBUG */
+            }
+
+            CocoaCairoSurface::CocoaCairoSurface(CocoaDisplay *dpy, cairo_surface_t *surface, size_t width, size_t height):
+                ISurface(width, height, ST_SIMILAR)
+            {
+                pDisplay        = dpy;
+                pCocoaView      = NULL;
+                pCR             = NULL;
+                pFO             = NULL;
+                pRoot           = NULL;
+                pSurface        = ::cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+                fOriginX        = 0.0f;
+                fOriginY        = 0.0f;
+
+//                pSurface        = ::cairo_surface_create_similar(surface, CAIRO_CONTENT_COLOR_ALPHA, width, height);
+            #ifdef LSP_DEBUG
+                nNumClips       = 0;
+            #endif /* LSP_DEBUG */
+            }
+
+            IDisplay *CocoaCairoSurface::display()
+            {
+                return pDisplay;
+            }
+
+            cairo_surface_t *CocoaCairoSurface::get_image_surface()
+            {
+                if (!pSurface || cairo_surface_get_type(pSurface) != CAIRO_SURFACE_TYPE_IMAGE)
+                    return nullptr;
+
+                int width = cairo_image_surface_get_width(pSurface);
+                int height = cairo_image_surface_get_height(pSurface);
+                cairo_format_t format = cairo_image_surface_get_format(pSurface);
+
+                // Create new surface with same format and size
+                cairo_surface_t *copy = cairo_image_surface_create(format, width, height);
+                if (!copy)
+                    return nullptr;
+
+                // Create a cairo context for the destination surface
+                cairo_t *cr = cairo_create(copy);
+                cairo_set_source_surface(cr, pSurface, 0, 0);
+                cairo_paint(cr);
+                cairo_destroy(cr);
+
+                return copy;
+            }
+
+            ISurface *CocoaCairoSurface::create(size_t width, size_t height)
+            {
+                return new CocoaCairoSurface(pDisplay, pSurface, width, height);
+            }
+
+            IGradient *CocoaCairoSurface::linear_gradient(float x0, float y0, float x1, float y1)
+            {
+                return new CocoaCairoGradient(
+                    CocoaCairoGradient::linear_t {
+                        x0, y0,
+                        x1, y1});
+            }
+
+            IGradient *CocoaCairoSurface::radial_gradient(float cx0, float cy0, float cx1, float cy1, float r)
+            {
+                return new CocoaCairoGradient(
+                    CocoaCairoGradient::radial_t {
+                        cx0, cy0,
+                        cx1, cy1,
+                        r});
+            }
+
+            CocoaCairoSurface::~CocoaCairoSurface()
+            {
+                destroy_context(true);
+            }
+
+            void CocoaCairoSurface::destroy_context(bool root)
+            {
+                if (pFO != NULL)
+                {
+                    cairo_font_options_destroy(pFO);
+                    pFO             = NULL;
+                }
+                if (pCR != NULL)
+                {
+                    cairo_destroy(pCR);
+                    pCR             = NULL;
+                }
+                if (pSurface != NULL)
+                {
+                    cairo_surface_destroy(pSurface);
+                    pSurface        = NULL;
+                }
+                if ((pRoot != NULL) && (root))
+                {
+                    cairo_surface_destroy(pSurface);
+                    pRoot           = NULL;
+                }
+            }
+
+            void CocoaCairoSurface::destroy()
+            {
+                if (pCocoaView != NULL)
+                {
+                    [[NSNotificationCenter defaultCenter] removeObserver:pCocoaView];
+                }
+                destroy_context(true);
+            }
+
+            bool CocoaCairoSurface::valid() const
+            {
+                return pSurface != NULL;
+            }
+
+            status_t CocoaCairoSurface::resize(size_t width, size_t height)
+            {
+                if (pCR != NULL)
+                    return STATUS_BAD_STATE;
+
+                // Create new surface and cairo
+                cairo_surface_t *s  = NULL;
+                if ((nType == ST_IMAGE) || (nType == ST_XLIB))
+                    s  = ::cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+                else if (nType == ST_SIMILAR)
+                    s  = ::cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+//                    s  = ::cairo_surface_create_similar(pSurface, CAIRO_CONTENT_COLOR_ALPHA, width, height);
+
+                if (s == NULL)
+                    return STATUS_NO_MEM;
+
+                // Destroy previously used context and update surface pointer
+                destroy_context(false);
+                pSurface            = s;
+                nWidth              = width;
+                nHeight             = height;
+
+                return STATUS_OK;
+            }
+
+            void CocoaCairoSurface::draw(ISurface *s, float x, float y, float sx, float sy, float a)
+            {
+                if (pCR == NULL)
+                    return;
+                surface_type_t type = s->type();
+                if ((type != ST_IMAGE) && (type != ST_SIMILAR))
+                    return;
+
+                CocoaCairoSurface *cs = static_cast<CocoaCairoSurface *>(s);
+                if (cs->pSurface == NULL)
+                    return;
+
+                // Draw one surface on another
+                float sw = fabsf(sx * s->width()), sh = fabsf(sy * s->height());
+                ::cairo_save(pCR);
+                lsp_finally { ::cairo_restore(pCR); };
+
+                ::cairo_rectangle(pCR, x, y, sw, sh);
+                ::cairo_clip(pCR);
+                
+                if ((sx != 1.0f) && (sy != 1.0f))
+                {
+                    if (sx < 0.0f)
+                        x       -= sx * s->width();
+                    if (sy < 0.0f)
+                        y       -= sy * s->height();
+
+                    ::cairo_translate(pCR, x, y);
+                    ::cairo_scale(pCR, sx, sy);
+
+                    ::cairo_set_source_surface(pCR, cs->pSurface, 0.0f, 0.0f);
+                }
+                else
+                    ::cairo_set_source_surface(pCR, cs->pSurface, x, y);
+                
+                /*
+                if ((sx != 1.0f) || (sy != 1.0f))
+                {
+                    if (sx < 0.0f)
+                        x -= sx * s->width();
+                    if (sy < 0.0f)
+                        y -= sy * s->height();
+
+                    ::cairo_translate(pCR, x, y);
+
+                    ::cairo_translate(pCR, x, y + (sy * s->height()));
+                    ::cairo_scale(pCR, sx, -sy);
+                    ::cairo_set_source_surface(pCR, cs->pSurface, 0.0f, 0.0f);
+                }
+                else
+                {
+                    // If scaling is 1, still need to flip Y for Cocoa
+                    ::cairo_translate(pCR, x, y + s->height());
+                    ::cairo_scale(pCR, 1.0f, -1.0f);
+                    ::cairo_set_source_surface(pCR, cs->pSurface, 0.0f, 0.0f);
+                } */
+
+                // Draw the surface
+                if (a > 0.0f)
+                    ::cairo_paint_with_alpha(pCR, 1.0f - a);
+                else
+                    ::cairo_paint(pCR);
+            }
+
+            void CocoaCairoSurface::draw_rotate(ISurface *s, float x, float y, float sx, float sy, float ra, float a)
+            {
+                surface_type_t type = s->type();
+                if ((type != ST_XLIB) && (type != ST_IMAGE) && (type != ST_SIMILAR))
+                    return;
+                if (pCR == NULL)
+                    return;
+                CocoaCairoSurface *cs = static_cast<CocoaCairoSurface *>(s);
+                if (cs->pSurface == NULL)
+                    return;
+
+                // Draw one surface on another
+                ::cairo_save(pCR);
+                ::cairo_translate(pCR, x, y);
+                ::cairo_scale(pCR, sx, sy);
+                ::cairo_rotate(pCR, ra);
+
+                ::cairo_set_source_surface(pCR, cs->pSurface, 0.0f, 0.0f);
+                if (a > 0.0f)
+                    ::cairo_paint_with_alpha(pCR, 1.0f - a);
+                else
+                    ::cairo_paint(pCR);
+                ::cairo_restore(pCR);
+            }
+
+            void CocoaCairoSurface::draw_clipped(ISurface *s, float x, float y, float sx, float sy, float sw, float sh, float a)
+            {
+                surface_type_t type = s->type();
+                if ((type != ST_XLIB) && (type != ST_IMAGE) && (type != ST_SIMILAR))
+                    return;
+                if (pCR == NULL)
+                    return;
+                CocoaCairoSurface *cs = static_cast<CocoaCairoSurface *>(s);
+                if (cs->pSurface == NULL)
+                    return;
+
+                // Draw one surface on another
+                ::cairo_save(pCR);
+                lsp_finally { ::cairo_restore(pCR); };
+
+                ::cairo_rectangle(pCR, x, y, sw, sh);
+                ::cairo_clip(pCR);
+                ::cairo_set_source_surface(pCR, cs->pSurface, x - sx, y - sy);
+                if (a > 0.0f)
+                    ::cairo_paint_with_alpha(pCR, 1.0f - a);
+                else
+                    ::cairo_paint(pCR);
+            }
+
+            void CocoaCairoSurface::draw_raw(
+                const void *data, size_t width, size_t height, size_t stride,
+                float x, float y, float sx, float sy, float a)
+            {
+                if (pCR == NULL)
+                    return;
+
+                cairo_surface_t *cs = cairo_image_surface_create_for_data(
+                    static_cast<unsigned char *>(const_cast<void *>(data)),
+                    CAIRO_FORMAT_ARGB32,
+                    width, height, stride);
+                if (cs == NULL)
+                    return;
+                lsp_finally { cairo_surface_destroy(cs); };
+
+                // Draw one surface on another
+                ::cairo_save(pCR);
+                lsp_finally { ::cairo_restore(pCR); };
+
+                
+                if ((sx != 1.0f) && (sy != 1.0f))
+                {
+                    if (sx < 0.0f)
+                        x       -= sx * width;
+                    if (sy < 0.0f)
+                        y       -= sy * height;
+
+                    ::cairo_translate(pCR, x, y);
+                    ::cairo_scale(pCR, sx, sy);
+                    ::cairo_set_source_surface(pCR, cs, 0.0f, 0.0f);
+                }
+                else
+                    ::cairo_set_source_surface(pCR, cs, x, y);
+
+                // Draw the surface
+                if (a > 0.0f)
+                    ::cairo_paint_with_alpha(pCR, 1.0f - a);
+                else
+                    ::cairo_paint(pCR);
+            }
+
+            void CocoaCairoSurface::begin()
+            {
+                if (pCocoaView != nullptr)
+                    lsp_trace("Surface %p begin, pCocoaView=%p, w=%zu, h=%zu", this, pCocoaView, nWidth, nHeight);
+                
+                // Force end() call
+                end();
+
+                // Create cairo objects
+                pCR             = ::cairo_create(pSurface);
+                if (pCR == NULL)
+                    return;
+                pFO             = ::cairo_font_options_create();
+                if (pFO == NULL)
+                    return;
+
+                // Initialize settings
+                ::cairo_set_antialias(pCR, CAIRO_ANTIALIAS_FAST);
+                ::cairo_set_line_join(pCR, CAIRO_LINE_JOIN_BEVEL);
+                ::cairo_set_tolerance(pCR, 0.5);
+
+                // In CairoView/Window we have also to flip Y for draw from topleft
+                if (pCocoaView) {
+                    ::cairo_translate(pCR, 0, nHeight);
+                    ::cairo_scale(pCR, 1, -1);
+                }
+
+            #ifdef LSP_DEBUG
+                nNumClips       = 0;
+            #endif /* LSP_DEBUG */
+            }
+
+            void CocoaCairoSurface::end()
+            {
+                if (pCR == NULL)
+                    return;
+
+            #ifdef LSP_DEBUG
+                if (nNumClips > 0)
+                    lsp_error("Mismatching number of clip_begin() and clip_end() calls");
+            #endif /* LSP_DEBUG */
+
+                if (pFO != NULL)
+                {
+                    cairo_font_options_destroy(pFO);
+                    pFO             = NULL;
+                }
+                if (pCR != NULL)
+                {
+                    cairo_destroy(pCR);
+                    pCR             = NULL;
+                }
+
+                //lsp_trace("Before autoreleasepool: %p", pCocoaView);
+                @autoreleasepool {
+                    if (pCocoaView != NULL)
+                    {
+                        cairo_surface_t *exposeSurface = get_image_surface();
+
+                        if (exposeSurface != NULL)
+                        {
+                            lsp_trace("Surface %p end, Send event for pCocoaView=%p", this, pCocoaView);
+                            [[NSNotificationCenter defaultCenter] postNotificationName:@"ForceExpose"
+                                                        object:pCocoaView
+                                                        userInfo:@{@"Surface": [NSValue valueWithPointer: exposeSurface]}];
+                        }
+                        
+                        //[[pCocoaWindow contentView] setImage: pSurface]; 
+                        //[[pCocoaWindow contentView] triggerRedraw]; 
+                    } 
+                }
+
+                ::cairo_surface_flush(pSurface);
+
+                // Copy back surface to front surface if it is present
+                if (pRoot != NULL)
+                {
+                    cairo_t *cr = ::cairo_create(pRoot);
+                    if (cr == NULL)
+                        return;
+                    lsp_finally {
+                        cairo_destroy(pCR);
+                    };
+
+                    ::cairo_set_source_surface(cr, pSurface, 0, 0);
+                    ::cairo_paint(cr);
+                    ::cairo_surface_flush(pRoot);
+                }
+            }
+
+            void CocoaCairoSurface::set_current_font(font_context_t *ctx, const Font &f)
+            {
+                // Apply antialiasint to the font
+                ctx->aa     = cairo_font_options_get_antialias(pFO);
+                cairo_font_options_set_antialias(pFO, decode_antialiasing(f));
+                cairo_set_font_options(pCR, pFO);
+
+                cairo_select_font_face(pCR, f.get_name(),
+                    (f.is_italic()) ? CAIRO_FONT_SLANT_ITALIC : CAIRO_FONT_SLANT_NORMAL,
+                    (f.is_bold()) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL
+                );
+                cairo_set_font_size(pCR, f.get_size());
+
+                ctx->face   = cairo_get_font_face(pCR);
+
+                return;
+            }
+
+            void CocoaCairoSurface::unset_current_font(font_context_t *ctx)
+            {
+                cairo_font_options_set_antialias(pFO, ctx->aa);
+                cairo_set_font_face(pCR, NULL);
+
+                ctx->face   = NULL;
+                ctx->aa     = CAIRO_ANTIALIAS_DEFAULT;
+            }
+
+            void CocoaCairoSurface::clear_rgb(uint32_t rgb)
+            {
+                if (pCR == NULL)
+                    return;
+
+                cairo_operator_t op = cairo_get_operator(pCR);
+                ::cairo_set_operator (pCR, CAIRO_OPERATOR_SOURCE);
+                ::cairo_set_source_rgba(pCR,
+                    float((rgb >> 16) & 0xff) * k_color,
+                    float((rgb >> 8) & 0xff) * k_color,
+                    float(rgb & 0xff) * k_color,
+                    0.0f
+                );
+                ::cairo_paint(pCR);
+                ::cairo_set_operator (pCR, op);
+            }
+
+            void CocoaCairoSurface::clear_rgba(uint32_t rgba)
+            {
+                if (pCR == NULL)
+                    return;
+
+                cairo_operator_t op = cairo_get_operator(pCR);
+                ::cairo_set_operator (pCR, CAIRO_OPERATOR_SOURCE);
+                ::cairo_set_source_rgba(pCR,
+                    float((rgba >> 16) & 0xff) * k_color,
+                    float((rgba >> 8) & 0xff) * k_color,
+                    float(rgba & 0xff) * k_color,
+                    float((rgba >> 24) & 0xff) * k_color
+                );
+                ::cairo_paint(pCR);
+                ::cairo_set_operator (pCR, op);
+            }
+
+            inline void CocoaCairoSurface::setSourceRGB(const Color &col)
+            {
+                if (pCR == NULL)
+                    return;
+                float r, g, b;
+                col.get_rgb(r, g, b);
+                ::cairo_set_source_rgb(pCR, r, g, b);
+            }
+
+            inline void CocoaCairoSurface::setSourceRGBA(const Color &col)
+            {
+                if (pCR == NULL)
+                    return;
+                float r, g, b, o;
+                col.get_rgbo(r, g, b, o);
+                ::cairo_set_source_rgba(pCR, r, g, b, o);
+            }
+
+            void CocoaCairoSurface::clear(const Color &color)
+            {
+                if (pCR == NULL)
+                    return;
+
+                setSourceRGBA(color);
+                cairo_operator_t op = ::cairo_get_operator(pCR);
+                ::cairo_set_operator (pCR, CAIRO_OPERATOR_SOURCE);
+                ::cairo_paint(pCR);
+                ::cairo_set_operator (pCR, op);
+            }
+
+            void CocoaCairoSurface::drawRoundRect(float xmin, float ymin, float width, float height, float radius, size_t mask)
+            {
+                if ((!(mask & SURFMASK_ALL_CORNER)) || (radius <= 0.0f))
+                {
+                    cairo_rectangle(pCR, xmin, ymin, width, height);
+                    return;
+                }
+
+                const float xmax = xmin + width;
+                const float ymax = ymin + height;
+
+                if (mask & SURFMASK_LT_CORNER)
+                {
+                    cairo_move_to(pCR, xmin, ymin + radius);
+                    cairo_arc(pCR, xmin + radius, ymin + radius, radius, M_PI, 1.5f*M_PI);
+                }
+                else
+                    cairo_move_to(pCR, xmin, ymin);
+
+                if (mask & SURFMASK_RT_CORNER)
+                    cairo_arc(pCR, xmax - radius, ymin + radius, radius, 1.5f * M_PI, 2.0f * M_PI);
+                else
+                    cairo_line_to(pCR, xmax, ymin);
+
+                if (mask & SURFMASK_RB_CORNER)
+                    cairo_arc(pCR, xmax - radius, ymax - radius, radius, 0.0f, 0.5f * M_PI);
+                else
+                    cairo_line_to(pCR, xmax, ymax);
+
+                if (mask & SURFMASK_LB_CORNER)
+                    cairo_arc(pCR, xmin + radius, ymax - radius, radius, 0.5f * M_PI, M_PI);
+                else
+                    cairo_line_to(pCR, xmin, ymax);
+
+                cairo_close_path(pCR);
+            }
+
+            void CocoaCairoSurface::wire_rect(const Color &color, size_t mask, float radius, float left, float top, float width, float height, float line_width)
+            {
+                if (pCR == NULL)
+                    return;
+
+                setSourceRGBA(color);
+                double w = cairo_get_line_width(pCR);
+                cairo_line_join_t j = cairo_get_line_join(pCR);
+                cairo_set_line_join(pCR, CAIRO_LINE_JOIN_MITER);
+
+                float lw2 = line_width * 0.5f;
+                cairo_set_line_width(pCR, line_width);
+                drawRoundRect(left + lw2, top + lw2, width - line_width, height - line_width, radius, mask);
+
+                cairo_stroke(pCR);
+                cairo_set_line_width(pCR, w);
+                cairo_set_line_join(pCR, j);
+            }
+
+            void CocoaCairoSurface::wire_rect(const Color &color, size_t mask, float radius, const ws::rectangle_t *r, float line_width)
+            {
+                if (pCR == NULL)
+                    return;
+
+                setSourceRGBA(color);
+                double w = cairo_get_line_width(pCR);
+                cairo_line_join_t j = cairo_get_line_join(pCR);
+                cairo_set_line_join(pCR, CAIRO_LINE_JOIN_MITER);
+
+                float lw2 = line_width * 0.5f;
+                cairo_set_line_width(pCR, line_width);
+                drawRoundRect(r->nLeft+ lw2, r->nTop + lw2, r->nWidth - line_width, r->nHeight - line_width, radius, mask);
+
+                cairo_stroke(pCR);
+                cairo_set_line_width(pCR, w);
+                cairo_set_line_join(pCR, j);
+            }
+
+            void CocoaCairoSurface::wire_rect(IGradient *g, size_t mask, float radius, const ws::rectangle_t *r, float line_width)
+            {
+                if (pCR == NULL)
+                    return;
+
+                CocoaCairoGradient *cg = static_cast<CocoaCairoGradient *>(g);
+                double w = cairo_get_line_width(pCR);
+                cairo_line_join_t j = cairo_get_line_join(pCR);
+                cairo_set_line_join(pCR, CAIRO_LINE_JOIN_MITER);
+
+                float lw2 = line_width * 0.5f;
+                cairo_set_line_width(pCR, line_width);
+                cg->apply(pCR);
+                drawRoundRect(r->nLeft + lw2, r->nTop + lw2, r->nWidth - line_width, r->nHeight - line_width, radius, mask);
+
+                cairo_stroke(pCR);
+                cairo_set_line_width(pCR, w);
+                cairo_set_line_join(pCR, j);
+            }
+
+            void CocoaCairoSurface::wire_rect(IGradient *g, size_t mask, float radius, float left, float top, float width, float height, float line_width)
+            {
+                if (pCR == NULL)
+                    return;
+
+                CocoaCairoGradient *cg = static_cast<CocoaCairoGradient *>(g);
+
+                double w = cairo_get_line_width(pCR);
+                cairo_line_join_t j = cairo_get_line_join(pCR);
+                cairo_set_line_join(pCR, CAIRO_LINE_JOIN_MITER);
+
+                float lw2 = line_width * 0.5f;
+                cairo_set_line_width(pCR, line_width);
+                cg->apply(pCR);
+                drawRoundRect(left + lw2, top + lw2, width - line_width, height - line_width, radius, mask);
+
+                cairo_stroke(pCR);
+                cairo_set_line_width(pCR, w);
+                cairo_set_line_join(pCR, j);
+            }
+
+            void CocoaCairoSurface::fill_rect(const Color &color, size_t mask, float radius, float left, float top, float width, float height)
+            {
+                if (pCR == NULL)
+                    return;
+
+                setSourceRGBA(color);
+                drawRoundRect(left, top, width, height, radius, mask);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::fill_rect(const Color &color, size_t mask, float radius, const ws::rectangle_t *r)
+            {
+                if (pCR == NULL)
+                    return;
+                setSourceRGBA(color);
+                drawRoundRect(r->nLeft, r->nTop, r->nWidth, r->nHeight, radius, mask);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::fill_rect(IGradient *g, size_t mask, float radius, float left, float top, float width, float height)
+            {
+                if (pCR == NULL)
+                    return;
+
+                CocoaCairoGradient *cg = static_cast<CocoaCairoGradient *>(g);
+                cg->apply(pCR);
+                drawRoundRect(left, top, width, height, radius, mask);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::fill_rect(IGradient *g, size_t mask, float radius, const ws::rectangle_t *r)
+            {
+                if (pCR == NULL)
+                    return;
+
+                CocoaCairoGradient *cg = static_cast<CocoaCairoGradient *>(g);
+                cg->apply(pCR);
+                drawRoundRect(r->nLeft, r->nTop, r->nWidth, r->nHeight, radius, mask);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height)
+            {
+                if (pCR == NULL)
+                    return;
+                surface_type_t type = s->type();
+                if ((type != ST_IMAGE) && (type != ST_SIMILAR))
+                    return;
+
+                CocoaCairoSurface *cs = static_cast<CocoaCairoSurface *>(s);
+                if (cs->pSurface == NULL)
+                    return;
+
+                // Draw one surface on another
+                ::cairo_save(pCR);
+                lsp_finally { ::cairo_restore(pCR); };
+
+                cairo_pattern_t *p = ::cairo_pattern_create_for_surface(cs->pSurface);
+                if (p == NULL)
+                    return;
+                lsp_finally { ::cairo_pattern_destroy(p); };
+
+                cairo_matrix_t matrix;
+                matrix.xx       = 1.0f;
+                matrix.xy       = 0.0f;
+                matrix.x0       = -(fOriginX + left);
+
+                matrix.yx       = 0.0f;
+                matrix.yy       = 1.0f;
+                matrix.y0       = -(fOriginY + top);
+
+                ::cairo_pattern_set_matrix(p, &matrix);
+                ::cairo_pattern_set_extend(p, CAIRO_EXTEND_NONE);
+                ::cairo_pattern_set_filter(p, CAIRO_FILTER_BILINEAR);
+
+                ::cairo_set_source(pCR, p);
+                drawRoundRect(left, top, width, height, radius, mask);
+                ::cairo_clip(pCR);
+                ::cairo_paint_with_alpha(pCR, 1.0f - alpha);
+            }
+
+            void CocoaCairoSurface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r)
+            {
+                fill_rect(s, alpha, mask, radius, r->nLeft, r->nTop, r->nWidth, r->nHeight);
+            }
+
+            void CocoaCairoSurface::fill_sector(const Color &c, float x, float y, float r, float a1, float a2)
+            {
+                if (pCR == NULL)
+                    return;
+
+                setSourceRGBA(c);
+                if (fabsf(a2 - a1) < 2.0f * M_PI)
+                {
+                    cairo_move_to(pCR, x, y);
+
+                    if (a2 < a1)
+                        cairo_arc_negative(pCR, x, y, r, a1, a2);
+                    else
+                        cairo_arc(pCR, x, y, r, a1, a2);
+                }
+                else
+                    cairo_arc(pCR, x, y, r, 0.0f, M_PI * 2.0f);
+                cairo_close_path(pCR);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::fill_triangle(IGradient *g, float x0, float y0, float x1, float y1, float x2, float y2)
+            {
+                if (pCR == NULL)
+                    return;
+
+                CocoaCairoGradient *cg = static_cast<CocoaCairoGradient *>(g);
+                cg->apply(pCR);
+                cairo_move_to(pCR, x0, y0);
+                cairo_line_to(pCR, x1, y1);
+                cairo_line_to(pCR, x2, y2);
+                cairo_close_path(pCR);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::fill_triangle(const Color &c, float x0, float y0, float x1, float y1, float x2, float y2)
+            {
+                if (pCR == NULL)
+                    return;
+
+                setSourceRGBA(c);
+                cairo_move_to(pCR, x0, y0);
+                cairo_line_to(pCR, x1, y1);
+                cairo_line_to(pCR, x2, y2);
+                cairo_close_path(pCR);
+                cairo_fill(pCR);
+            }
+
+            bool CocoaCairoSurface::get_font_parameters(const Font &f, font_parameters_t *fp)
+            {
+                // Get font parameter using font manager
+            #ifdef USE_LIBFREETYPE
+                ft::FontManager *mgr = pDisplay->font_manager();
+                if (mgr != NULL)
+                {
+                    if (mgr->get_font_parameters(&f, fp))
+                        return true;
+                }
+            #endif /* USE_LIBFREETYPE */
+
+                // Do the usual job using Cairo
+                if ((pCR == NULL) || (f.get_name() == NULL))
+                {
+                    fp->Ascent          = 0.0f;
+                    fp->Descent         = 0.0f;
+                    fp->Height          = 0.0f;
+                    return true;
+                }
+
+                // Set current font
+                font_context_t ctx;
+                set_current_font(&ctx, f);
+                lsp_finally { unset_current_font(&ctx); };
+
+                // Get font parameters
+                cairo_font_extents_t fe;
+                cairo_font_extents(pCR, &fe);
+
+                fp->Ascent          = fe.ascent;
+                fp->Descent         = fe.descent;
+                fp->Height          = fe.height;
+
+                return true;
+            }
+
+            bool CocoaCairoSurface::get_text_parameters(const Font &f, text_parameters_t *tp, const char *text)
+            {
+                if (text == NULL)
+                    return false;
+
+                // Get text parameter using font manager
+            #ifdef USE_LIBFREETYPE
+                ft::FontManager *mgr = pDisplay->font_manager();
+                if (mgr != NULL)
+                {
+                    LSPString tmp;
+                    if (!tmp.set_utf8(text))
+                        return false;
+
+                    ft::text_range_t tr;
+                    if (mgr->get_text_parameters(&f, &tr, &tmp, 0, tmp.length()))
+                    {
+                        tp->XBearing    = tr.x_bearing;
+                        tp->YBearing    = tr.y_bearing;
+                        tp->Width       = tr.width;
+                        tp->Height      = tr.height;
+                        tp->XAdvance    = tr.x_advance;
+                        tp->YAdvance    = tr.y_advance;
+                        return true;
+                    }
+                }
+            #endif /* USE_LIBFREETYPE */
+
+                if ((pCR == NULL) || (f.get_name() == NULL))
+                {
+                    tp->XBearing        = 0.0f;
+                    tp->YBearing        = 0.0f;
+                    tp->Width           = 0.0f;
+                    tp->Height          = 0.0f;
+                    tp->XAdvance        = 0.0f;
+                    tp->YAdvance        = 0.0f;
+
+                    return true;
+                }
+
+                // Initialize data structure
+                cairo_text_extents_t te;
+
+                // Set current font
+                font_context_t ctx;
+                set_current_font(&ctx, f);
+                lsp_finally { unset_current_font(&ctx); };
+
+                // Get text parameters
+                cairo_text_extents(pCR, text, &te);
+                tp->XBearing        = te.x_bearing;
+                tp->YBearing        = te.y_bearing;
+                tp->Width           = te.width;
+                tp->Height          = te.height;
+                tp->XAdvance        = te.x_advance;
+                tp->YAdvance        = te.y_advance;
+
+                return true;
+            }
+
+            bool CocoaCairoSurface::get_text_parameters(const Font &f, text_parameters_t *tp, const LSPString *text, ssize_t first, ssize_t last)
+            {
+                if (text == NULL)
+                    return false;
+
+                // Get text parameter using font manager
+            #ifdef USE_LIBFREETYPE
+                ft::FontManager *mgr = pDisplay->font_manager();
+                if (mgr != NULL)
+                {
+                    ft::text_range_t tr;
+                    if (mgr->get_text_parameters(&f, &tr, text, first, last))
+                    {
+                        tp->XBearing    = tr.x_bearing;
+                        tp->YBearing    = tr.y_bearing;
+                        tp->Width       = tr.width;
+                        tp->Height      = tr.height;
+                        tp->XAdvance    = tr.x_advance;
+                        tp->YAdvance    = tr.y_advance;
+                        return true;
+                    }
+                }
+            #endif /* USE_LIBFREETYPE */
+
+                if ((pCR == NULL) || (f.get_name() == NULL))
+                {
+                    tp->XBearing        = 0.0f;
+                    tp->YBearing        = 0.0f;
+                    tp->Width           = 0.0f;
+                    tp->Height          = 0.0f;
+                    tp->XAdvance        = 0.0f;
+                    tp->YAdvance        = 0.0f;
+
+                    return true;
+                }
+
+                // Initialize data structure
+                cairo_text_extents_t te;
+
+                // Set current font
+                font_context_t ctx;
+                set_current_font(&ctx, f);
+                lsp_finally { unset_current_font(&ctx); };
+
+                // Get text parameters
+                cairo_text_extents(pCR, text->get_utf8(first, last), &te);
+                tp->XBearing        = te.x_bearing;
+                tp->YBearing        = te.y_bearing;
+                tp->Width           = te.width;
+                tp->Height          = te.height;
+                tp->XAdvance        = te.x_advance;
+                tp->YAdvance        = te.y_advance;
+
+                return true;
+            }
+
+            void CocoaCairoSurface::out_text(const Font &f, const Color &color, float x, float y, const char *text)
+            {
+                if ((pCR == NULL) || (f.get_name() == NULL) || (text == NULL))
+                    return;
+
+            #ifdef USE_LIBFREETYPE
+                ft::FontManager *mgr = pDisplay->font_manager();
+                if (mgr != NULL)
+                {
+                    LSPString tmp;
+                    if (!tmp.set_utf8(text))
+                        return;
+
+                    ft::text_range_t tr;
+                    dsp::bitmap_t *bitmap   = mgr->render_text(&f, &tr, &tmp, 0, tmp.length());
+                    if (bitmap != NULL)
+                    {
+                        lsp_finally { ft::free_bitmap(bitmap); };
+
+                        // Draw the text bitmap at the specified position
+                        cairo_surface_t *fs = cairo_image_surface_create_for_data(
+                            bitmap->data,
+                            CAIRO_FORMAT_A8,
+                            bitmap->width,
+                            bitmap->height,
+                            bitmap->stride);
+                        if (fs == NULL)
+                            return;
+                        lsp_finally{ cairo_surface_destroy(fs); };
+
+                        setSourceRGBA(color);
+                        const float sx  = x + tr.x_bearing;
+                        const float sy  = y + tr.y_bearing;
+                        cairo_mask_surface(pCR, fs, sx, sy);
+
+                        // Draw underline if required
+                        if (f.is_underline())
+                        {
+                            const float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float bottom  = y + width * 1.5f;
+
+                            cairo_set_line_width(pCR, width);
+                            cairo_move_to(pCR, sx, bottom);
+                            cairo_line_to(pCR, sx + tr.x_advance, bottom);
+                            cairo_stroke(pCR);
+                        }
+
+                        return;
+                    }
+                }
+            #endif /* USE_LIBFREETYPE */
+
+                // Set current font
+                font_context_t ctx;
+                set_current_font(&ctx, f);
+                lsp_finally { unset_current_font(&ctx); };
+
+                // Draw
+                cairo_move_to(pCR, x, y);
+                setSourceRGBA(color);
+                cairo_show_text(pCR, text);
+
+                // Draw underline if required
+                if (f.is_underline())
+                {
+                    cairo_text_extents_t te;
+                    cairo_text_extents(pCR, text, &te);
+                    float width = lsp_max(1.0f, f.get_size() / 12.0f);
+
+                    cairo_set_line_width(pCR, width);
+
+                    cairo_move_to(pCR, x, y + te.y_advance + 1 + width);
+                    cairo_line_to(pCR, x + te.x_advance, y + te.y_advance + 1 + width);
+                    cairo_stroke(pCR);
+                }
+            }
+
+            void CocoaCairoSurface::out_text(const Font &f, const Color &color, float x, float y, const LSPString *text, ssize_t first, ssize_t last)
+            {
+                if ((pCR == NULL) || (f.get_name() == NULL) || (text == NULL))
+                    return;
+
+            #ifdef USE_LIBFREETYPE
+                ft::FontManager *mgr = pDisplay->font_manager();
+                if (mgr != NULL)
+                {
+                    ft::text_range_t tr;
+                    dsp::bitmap_t *bitmap   = mgr->render_text(&f, &tr, text, first, last);
+                    if (bitmap != NULL)
+                    {
+                        lsp_finally { ft::free_bitmap(bitmap); };
+
+                        // Draw the text bitmap at the specified position
+                        cairo_surface_t *fs = cairo_image_surface_create_for_data(
+                            bitmap->data,
+                            CAIRO_FORMAT_A8,
+                            bitmap->width,
+                            bitmap->height,
+                            bitmap->stride);
+                        if (fs == NULL)
+                            return;
+                        lsp_finally{ cairo_surface_destroy(fs); };
+
+                        setSourceRGBA(color);
+                        const float sx = x + tr.x_bearing;
+                        const float sy = y + tr.y_bearing;
+                        cairo_mask_surface(pCR, fs, sx, sy);
+
+                        // Draw underline if required
+                        if (f.is_underline())
+                        {
+                            const float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float bottom  = y + width * 1.5f;
+
+                            cairo_set_line_width(pCR, width);
+                            cairo_move_to(pCR, sx, bottom);
+                            cairo_line_to(pCR, sx + tr.x_advance, bottom);
+                            cairo_stroke(pCR);
+                        }
+
+                        return;
+                    }
+                }
+            #endif /* USE_LIBFREETYPE */
+
+                const char *utf8_text = text->get_utf8(first, last);
+                if (utf8_text == NULL)
+                    return;
+
+                // Set current font
+                font_context_t ctx;
+                set_current_font(&ctx, f);
+                lsp_finally { unset_current_font(&ctx); };
+
+                // Draw
+                cairo_move_to(pCR, x, y);
+                setSourceRGBA(color);
+                cairo_show_text(pCR, utf8_text);
+
+                // Draw underline if required
+                if (f.is_underline())
+                {
+                    cairo_text_extents_t te;
+                    cairo_text_extents(pCR, utf8_text, &te);
+                    float width = lsp_max(1.0f, f.get_size() / 12.0f);
+
+                    cairo_set_line_width(pCR, width);
+
+                    cairo_move_to(pCR, x, y + te.y_advance + 1 + width);
+                    cairo_line_to(pCR, x + te.x_advance, y + te.y_advance + 1 + width);
+                    cairo_stroke(pCR);
+                }
+            }
+
+            void CocoaCairoSurface::out_text_relative(const Font &f, const Color &color, float x, float y, float dx, float dy, const char *text)
+            {
+                if ((pCR == NULL) || (f.get_name() == NULL) || (text == NULL))
+                    return;
+
+                float r_w, r_h, fx, fy;
+
+            #ifdef USE_LIBFREETYPE
+                ft::FontManager *mgr = pDisplay->font_manager();
+                if (mgr != NULL)
+                {
+                    LSPString tmp;
+                    if (!tmp.set_utf8(text))
+                        return;
+
+                    ft::text_range_t tr;
+                    dsp::bitmap_t *bitmap   = mgr->render_text(&f, &tr, &tmp, 0, tmp.length());
+                    if (bitmap != NULL)
+                    {
+                        lsp_finally { ft::free_bitmap(bitmap); };
+
+                        // Draw the text bitmap at the specified position
+                        cairo_surface_t *fs = cairo_image_surface_create_for_data(
+                            bitmap->data,
+                            CAIRO_FORMAT_A8,
+                            bitmap->width,
+                            bitmap->height,
+                            bitmap->stride);
+                        if (fs == NULL)
+                            return;
+                        lsp_finally{ cairo_surface_destroy(fs); };
+
+                        setSourceRGBA(color);
+                        r_w   = tr.x_advance;
+                        r_h   = -tr.y_bearing;
+                        fx    = truncf(x - tr.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx);
+                        fy    = truncf(y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy);
+                        cairo_mask_surface(pCR, fs, fx + tr.x_bearing, fy + tr.y_bearing);
+
+                        // Draw underline if required
+                        if (f.is_underline())
+                        {
+                            const float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float bottom  = fy + width * 1.5f;
+
+                            cairo_set_line_width(pCR, width);
+                            cairo_move_to(pCR, fx, bottom);
+                            cairo_line_to(pCR, fx + tr.x_advance, bottom);
+                            cairo_stroke(pCR);
+                        }
+
+                        return;
+                    }
+                }
+            #endif /* USE_LIBFREETYPE */
+
+                // Set current font
+                font_context_t ctx;
+                set_current_font(&ctx, f);
+                lsp_finally { unset_current_font(&ctx); };
+
+                // Output text
+                cairo_text_extents_t te;
+                cairo_text_extents(pCR, text, &te);
+
+                r_w   = te.x_advance;
+                r_h   = -te.y_bearing;
+                fx    = truncf(x - te.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx);
+                fy    = truncf(y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy);
+
+                setSourceRGBA(color);
+                cairo_move_to(pCR, fx, fy);
+                cairo_show_text(pCR, text);
+
+                // Draw underline if required
+                if (f.is_underline())
+                {
+                    float width = lsp_max(1.0f, f.get_size() / 12.0f);
+
+                    cairo_set_line_width(pCR, width);
+                    cairo_move_to(pCR, fx, fy + te.y_advance + 1 + width);
+                    cairo_line_to(pCR, fx + te.x_advance, fy + te.y_advance + 1 + width);
+                    cairo_stroke(pCR);
+                }
+            }
+
+            void CocoaCairoSurface::out_text_relative(const Font &f, const Color &color, float x, float y, float dx, float dy, const LSPString *text, ssize_t first, ssize_t last)
+            {
+                if ((pCR == NULL) || (f.get_name() == NULL) || (text == NULL))
+                    return;
+
+                float r_w, r_h, fx, fy;
+
+            #ifdef USE_LIBFREETYPE
+                ft::FontManager *mgr = pDisplay->font_manager();
+                if (mgr != NULL)
+                {
+                    ft::text_range_t tr;
+                    dsp::bitmap_t *bitmap   = mgr->render_text(&f, &tr, text, first, last);
+                    if (bitmap != NULL)
+                    {
+                        lsp_finally { ft::free_bitmap(bitmap); };
+
+                        // Draw the text bitmap at the specified position
+                        cairo_surface_t *fs = cairo_image_surface_create_for_data(
+                            bitmap->data,
+                            CAIRO_FORMAT_A8,
+                            bitmap->width,
+                            bitmap->height,
+                            bitmap->stride);
+                        if (fs == NULL)
+                            return;
+                        lsp_finally{ cairo_surface_destroy(fs); };
+
+                        setSourceRGBA(color);
+                        r_w   = tr.x_advance;
+                        r_h   = -tr.y_bearing;
+                        fx    = truncf(x - tr.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx);
+                        fy    = truncf(y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy);
+                        cairo_mask_surface(pCR, fs, fx + tr.x_bearing, fy + tr.y_bearing);
+
+                        // Draw underline if required
+                        if (f.is_underline())
+                        {
+                            const float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float bottom  = fy + width * 1.5f;
+
+                            cairo_set_line_width(pCR, width);
+                            cairo_move_to(pCR, fx, bottom);
+                            cairo_line_to(pCR, fx + tr.x_advance, bottom);
+                            cairo_stroke(pCR);
+                        }
+
+                        return;
+                    }
+                }
+            #endif /* USE_LIBFREETYPE */
+
+                const char *utf8_text = text->get_utf8(first, last);
+                if (utf8_text == NULL)
+                    return;
+
+                // Set current font
+                font_context_t ctx;
+                set_current_font(&ctx, f);
+                lsp_finally { unset_current_font(&ctx); };
+
+                // Output text
+                cairo_text_extents_t te;
+                cairo_text_extents(pCR, utf8_text, &te);
+
+                r_w   = te.x_advance;
+                r_h   = -te.y_bearing;
+                fx    = truncf(x - te.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx);
+                fy    = truncf(y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy);
+
+                setSourceRGBA(color);
+                cairo_move_to(pCR, fx, fy);
+                cairo_show_text(pCR, utf8_text);
+
+                // Draw underline if required
+                if (f.is_underline())
+                {
+                    float width = lsp_max(1.0f, f.get_size() / 12.0f);
+
+                    cairo_set_line_width(pCR, width);
+                    cairo_move_to(pCR, fx, fy + te.y_advance + 1 + width);
+                    cairo_line_to(pCR, fx + te.x_advance, fy + te.y_advance + 1 + width);
+                    cairo_stroke(pCR);
+                }
+            }
+
+            void CocoaCairoSurface::line(const Color &color, float x0, float y0, float x1, float y1, float width)
+            {
+                if (pCR == NULL)
+                    return;
+
+                double ow = cairo_get_line_width(pCR);
+                setSourceRGBA(color);
+                cairo_set_line_width(pCR, width);
+                cairo_move_to(pCR, x0, y0);
+                cairo_line_to(pCR, x1, y1);
+                cairo_stroke(pCR);
+                cairo_set_line_width(pCR, ow);
+            }
+
+            void CocoaCairoSurface::line(IGradient *g, float x0, float y0, float x1, float y1, float width)
+            {
+                if (pCR == NULL)
+                    return;
+
+                CocoaCairoGradient *cg = static_cast<CocoaCairoGradient *>(g);
+                cg->apply(pCR);
+
+                double ow = cairo_get_line_width(pCR);
+                cairo_set_line_width(pCR, width);
+                cairo_move_to(pCR, x0, y0);
+                cairo_line_to(pCR, x1, y1);
+                cairo_stroke(pCR);
+                cairo_set_line_width(pCR, ow);
+            }
+
+            void CocoaCairoSurface::parametric_line(const Color &color, float a, float b, float c, float width)
+            {
+                if (pCR == NULL)
+                    return;
+
+                double ow = cairo_get_line_width(pCR);
+                setSourceRGBA(color);
+                cairo_set_line_width(pCR, width);
+
+                if (fabsf(a) > fabsf(b))
+                {
+                    cairo_move_to(pCR, - c / a, 0.0f);
+                    cairo_line_to(pCR, -(c + b*nHeight)/a, nHeight);
+                }
+                else
+                {
+                    cairo_move_to(pCR, 0.0f, - c / b);
+                    cairo_line_to(pCR, nWidth, -(c + a*nWidth)/b);
+                }
+
+                cairo_stroke(pCR);
+                cairo_set_line_width(pCR, ow);
+            }
+
+            void CocoaCairoSurface::parametric_line(const Color &color, float a, float b, float c, float left, float right, float top, float bottom, float width)
+            {
+                if (pCR == NULL)
+                    return;
+
+                double ow = cairo_get_line_width(pCR);
+                setSourceRGBA(color);
+                cairo_set_line_width(pCR, width);
+
+                if (fabsf(a) > fabsf(b))
+                {
+                    cairo_move_to(pCR, roundf(-(c + b*top)/a), roundf(top));
+                    cairo_line_to(pCR, roundf(-(c + b*bottom)/a), roundf(bottom));
+                }
+                else
+                {
+                    cairo_move_to(pCR, roundf(left), roundf(-(c + a*left)/b));
+                    cairo_line_to(pCR, roundf(right), roundf(-(c + a*right)/b));
+                }
+
+                cairo_stroke(pCR);
+                cairo_set_line_width(pCR, ow);
+            }
+
+            void CocoaCairoSurface::parametric_bar(
+                IGradient *g,
+                float a1, float b1, float c1, float a2, float b2, float c2,
+                float left, float right, float top, float bottom)
+            {
+                if (pCR == NULL)
+                    return;
+
+                CocoaCairoGradient *cg = static_cast<CocoaCairoGradient *>(g);
+                cg->apply(pCR);
+
+                if (fabsf(a1) > fabsf(b1))
+                {
+                    cairo_move_to(pCR, ssize_t(-(c1 + b1*top)/a1), ssize_t(top));
+                    cairo_line_to(pCR, ssize_t(-(c1 + b1*bottom)/a1), ssize_t(bottom));
+                }
+                else
+                {
+                    cairo_move_to(pCR, ssize_t(left), ssize_t(-(c1 + a1*left)/b1));
+                    cairo_line_to(pCR, ssize_t(right), ssize_t(-(c1 + a1*right)/b1));
+                }
+
+                if (fabsf(a2) > fabsf(b2))
+                {
+                    cairo_line_to(pCR, ssize_t(-(c2 + b2*bottom)/a2), ssize_t(bottom));
+                    cairo_line_to(pCR, ssize_t(-(c2 + b2*top)/a2), ssize_t(top));
+                }
+                else
+                {
+                    cairo_line_to(pCR, ssize_t(right), ssize_t(-(c2 + a2*right)/b2));
+                    cairo_line_to(pCR, ssize_t(left), ssize_t(-(c2 + a2*left)/b2));
+                }
+
+                cairo_close_path(pCR);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::wire_arc(const Color &c, float x, float y, float r, float a1, float a2, float width)
+            {
+                if (pCR == NULL)
+                    return;
+
+                double ow = cairo_get_line_width(pCR);
+                r = lsp_max(0.0f, r - width * 0.5f);
+                setSourceRGBA(c);
+                cairo_set_line_width(pCR, width);
+                if (fabsf(a2 - a1) >= 2.0f * M_PI)
+                    cairo_arc(pCR, x, y, r, 0.0f, 2.0f * M_PI);
+                else if (a2 < a1)
+                    cairo_arc_negative(pCR, x, y, r, a1, a2);
+                else
+                    cairo_arc(pCR, x, y, r, a1, a2);
+                cairo_stroke(pCR);
+                cairo_set_line_width(pCR, ow);
+            }
+
+            void CocoaCairoSurface::fill_poly(const Color & color, const float *x, const float *y, size_t n)
+            {
+                if ((pCR == NULL) || (n < 2))
+                    return;
+
+                cairo_move_to(pCR, x[0], y[0]);
+                for (size_t i=1; i < n; ++i)
+                    cairo_line_to(pCR, x[i], y[i]);
+
+                setSourceRGBA(color);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::fill_poly(IGradient *gr, const float *x, const float *y, size_t n)
+            {
+                if ((pCR == NULL) || (n < 2) || (gr == NULL))
+                    return;
+
+                cairo_move_to(pCR, x[0], y[0]);
+                for (size_t i=1; i < n; ++i)
+                    cairo_line_to(pCR, x[i], y[i]);
+
+                CocoaCairoGradient *cg = static_cast<CocoaCairoGradient *>(gr);
+                cg->apply(pCR);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::wire_poly(const Color & color, float width, const float *x, const float *y, size_t n)
+            {
+                if ((pCR == NULL) || (n < 2))
+                    return;
+
+                cairo_move_to(pCR, x[0], y[0]);
+                for (size_t i=1; i < n; ++i)
+                    cairo_line_to(pCR, x[i], y[i]);
+
+                setSourceRGBA(color);
+                cairo_set_line_width(pCR, width);
+                cairo_stroke(pCR);
+            }
+
+            void CocoaCairoSurface::draw_poly(const Color &fill, const Color &wire, float width, const float *x, const float *y, size_t n)
+            {
+                if ((pCR == NULL) || (n < 2))
+                    return;
+
+                cairo_move_to(pCR, x[0], y[0]);
+                for (size_t i=1; i < n; ++i)
+                    cairo_line_to(pCR, x[i], y[i]);
+
+                if (width > 0.0f)
+                {
+                    setSourceRGBA(fill);
+                    cairo_fill_preserve(pCR);
+
+                    cairo_set_line_width(pCR, width);
+                    setSourceRGBA(wire);
+                    cairo_stroke(pCR);
+                }
+                else
+                {
+                    setSourceRGBA(fill);
+                    cairo_fill(pCR);
+                }
+            }
+
+            void CocoaCairoSurface::fill_circle(const Color &c, float x, float y, float r)
+            {
+                if (pCR == NULL)
+                    return;
+
+                setSourceRGBA(c);
+                cairo_arc(pCR, x, y, r, 0.0f, M_PI * 2.0f);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::fill_circle(IGradient *g, float x, float y, float r)
+            {
+                if (pCR == NULL)
+                    return;
+
+                CocoaCairoGradient *cg = static_cast<CocoaCairoGradient *>(g);
+                cg->apply(pCR);
+                cairo_arc(pCR, x, y, r, 0, M_PI * 2.0f);
+                cairo_fill(pCR);
+            }
+
+            void CocoaCairoSurface::fill_frame(
+                const Color &color,
+                size_t flags, float radius,
+                float fx, float fy, float fw, float fh,
+                float ix, float iy, float iw, float ih)
+            {
+                if (pCR == NULL)
+                    return;
+
+                // Draw the frame
+                float fxe = fx + fw, fye = fy + fh, ixe = ix + iw, iye = iy + ih;
+
+                if ((ix >= fxe) || (ixe < fx) || (iy >= fye) || (iye < fy))
+                {
+                    setSourceRGBA(color);
+                    cairo_rectangle(pCR, fx, fy, fw, fh);
+                    cairo_fill(pCR);
+                    return;
+                }
+                else if ((ix <= fx) && (ixe >= fxe) && (iy <= fy) && (iye >= fye))
+                    return;
+
+                setSourceRGBA(color);
+                if (ix <= fx)
+                {
+                    if (iy <= fy)
+                    {
+                        cairo_rectangle(pCR, ixe, fy, fxe - ixe, iye - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iye, fw, fye - iye);
+                        cairo_fill(pCR);
+                    }
+                    else if (iye >= fye)
+                    {
+                        cairo_rectangle(pCR, fx, fy, fw, iy - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, ixe, iy, fxe - ixe, fye - iy);
+                        cairo_fill(pCR);
+                    }
+                    else
+                    {
+                        cairo_rectangle(pCR, fx, fy, fw, iy - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, ixe, iy, fxe - ixe, ih);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iye, fw, fye - iye);
+                        cairo_fill(pCR);
+                    }
+                }
+                else if (ixe >= fxe)
+                {
+                    if (iy <= fy)
+                    {
+                        cairo_rectangle(pCR, fx, fy, ix - fx, iye - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iye, fw, fye - iye);
+                        cairo_fill(pCR);
+                    }
+                    else if (iye >= fye)
+                    {
+                        cairo_rectangle(pCR, fx, fy, fw, iy - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iy, ix - fx, fye - iy);
+                        cairo_fill(pCR);
+                    }
+                    else
+                    {
+                        cairo_rectangle(pCR, fx, fy, fw, iy - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iy, ix - fx, ih);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iye, fw, fye - iye);
+                        cairo_fill(pCR);
+                    }
+                }
+                else
+                {
+                    if (iy <= fy)
+                    {
+                        cairo_rectangle(pCR, fx, fy, ix - fx, iye - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, ixe, fy, fxe - ixe, iye - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iye, fw, fye - iye);
+                        cairo_fill(pCR);
+                    }
+                    else if (iye >= fye)
+                    {
+                        cairo_rectangle(pCR, fx, fy, fw, iy - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iy, ix - fx, fye - iy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, ixe, iy, fxe - ixe, fye - iy);
+                        cairo_fill(pCR);
+                    }
+                    else
+                    {
+                        cairo_rectangle(pCR, fx, fy, fw, iy - fy);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iy, ix - fx, ih);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, ixe, iy, fxe - ixe, ih);
+                        cairo_fill(pCR);
+                        cairo_rectangle(pCR, fx, iye, fw, fye - iye);
+                        cairo_fill(pCR);
+                    }
+                }
+
+                // Ensure that there are no corners
+                if ((radius <= 0.0) || (!(flags & SURFMASK_ALL_CORNER)))
+                    return;
+
+                // Can draw corners?
+                float minw = 0.0f;
+                minw += (flags & SURFMASK_L_CORNER) ? radius : 0.0;
+                minw += (flags & SURFMASK_R_CORNER) ? radius : 0.0;
+                if (iw < minw)
+                    return;
+
+                float minh = 0.0f;
+                minh += (flags & SURFMASK_T_CORNER) ? radius : 0.0;
+                minh += (flags & SURFMASK_B_CORNER) ? radius : 0.0;
+                if (ih < minh)
+                    return;
+
+                // Draw corners
+                if (flags & SURFMASK_LT_CORNER)
+                {
+                    cairo_move_to(pCR, ix, iy);
+                    cairo_line_to(pCR, ix + radius, iy);
+                    cairo_arc_negative(pCR, ix + radius, iy + radius, radius, 1.5*M_PI, 1.0*M_PI);
+                    cairo_close_path(pCR);
+                    cairo_fill(pCR);
+                }
+                if (flags & SURFMASK_RT_CORNER)
+                {
+                    cairo_move_to(pCR, ix + iw, iy);
+                    cairo_line_to(pCR, ix + iw, iy + radius);
+                    cairo_arc_negative(pCR, ix + iw - radius, iy + radius, radius, 2.0*M_PI, 1.5*M_PI);
+                    cairo_close_path(pCR);
+                    cairo_fill(pCR);
+                }
+                if (flags & SURFMASK_LB_CORNER)
+                {
+                    cairo_move_to(pCR, ix, iy + ih);
+                    cairo_line_to(pCR, ix, iy + ih - radius);
+                    cairo_arc_negative(pCR, ix + radius, iy + ih - radius, radius, 1.0*M_PI, 0.5*M_PI);
+                    cairo_close_path(pCR);
+                    cairo_fill(pCR);
+                }
+                if (flags & SURFMASK_RB_CORNER)
+                {
+                    cairo_move_to(pCR, ix + iw, iy + ih);
+                    cairo_line_to(pCR, ix + iw - radius, iy + ih);
+                    cairo_arc_negative(pCR, ix + iw - radius, iy + ih - radius, radius, 0.5*M_PI, 0.0);
+                    cairo_close_path(pCR);
+                    cairo_fill(pCR);
+                }
+            }
+
+            bool CocoaCairoSurface::get_antialiasing()
+            {
+                if (pCR == NULL)
+                    return false;
+
+                return cairo_get_antialias(pCR) != CAIRO_ANTIALIAS_NONE;
+            }
+
+            bool CocoaCairoSurface::set_antialiasing(bool set)
+            {
+                if (pCR == NULL)
+                    return false;
+
+                bool old = cairo_get_antialias(pCR) != CAIRO_ANTIALIAS_NONE;
+                cairo_set_antialias(pCR, (set) ? CAIRO_ANTIALIAS_GOOD : CAIRO_ANTIALIAS_NONE);
+
+                return old;
+            }
+
+            ws::point_t CocoaCairoSurface::set_origin(const ws::point_t & origin)
+            {
+                return set_origin(origin.nLeft, origin.nTop);
+            }
+
+            ws::point_t CocoaCairoSurface::set_origin(ssize_t left, ssize_t top)
+            {
+                ws::point_t result;
+                result.nLeft    = fOriginX;
+                result.nTop     = fOriginY;
+
+                if (pCR == NULL)
+                    return result;
+
+                fOriginX        = left;
+                fOriginY        = top;
+
+                cairo_matrix_t matrix;
+                matrix.xx       = 1.0f;
+                matrix.xy       = 0.0f;
+                matrix.x0       = fOriginX;
+
+                matrix.yx       = 0.0f;
+                matrix.yy       = 1.0f;
+                matrix.y0       = fOriginY;
+
+                cairo_set_matrix(pCR, &matrix);
+
+                return result;
+            }
+
+            void CocoaCairoSurface::clip_begin(float x, float y, float w, float h)
+            {
+                if (pCR == NULL)
+                    return;
+
+                cairo_save(pCR);
+                cairo_rectangle(pCR, x, y, w, h);
+                cairo_clip(pCR);
+                cairo_new_path(pCR);
+
+            #ifdef LSP_DEBUG
+                ++nNumClips;
+            #endif /* LSP_DEBUG */
+            }
+
+            void CocoaCairoSurface::clip_end()
+            {
+                if (pCR == NULL)
+                    return;
+
+            #ifdef LSP_DEBUG
+                if (nNumClips <= 0)
+                {
+                    lsp_error("Mismatched number of clip_begin() and clip_end() calls");
+                    return;
+                }
+                -- nNumClips;
+            #endif /* LSP_DEBUG */
+
+                cairo_restore(pCR);
+            }
+
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* defined(PLATFORM_MAXOSX) */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoView.mm 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoView.mm
--- 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoView.mm	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaCairoView.mm	2025-08-26 18:15:42.570014511 +0000
@@ -0,0 +1,357 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 12 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#import <private/cocoa/CocoaCairoView.h>
+#include <private/cocoa/CocoaCairoSurface.h>
+#include <private/cocoa/CocoaDisplay.h>
+#include <lsp-plug.in/ws/ISurface.h>
+#include <lsp-plug.in/common/debug.h>
+
+#include <cairo.h>
+#include <cairo-quartz.h>
+
+@implementation CocoaCairoView
+
+// We need an overloaded objective c - NSView Class for Rendering, drawRect is triggered on create/update
+- (void)drawRect:(NSRect)dirtyRect {
+    [super drawRect:dirtyRect];
+
+    if (self->_nextCursor != NULL)
+    {
+        //[self discardCursorRects];
+        [self addCursorRect:[self bounds] cursor: self->_nextCursor];
+    }
+
+    self->_needsRedrawing = false;
+    if (self->_imageSurface != NULL)
+    {
+        // Get current CGContext
+        CGContextRef context = [[NSGraphicsContext currentContext] CGContext];
+        CGImageRef image = [self renderCairoImage];
+
+        CGContextSaveGState(context);
+        // Flip vertically to match Cairo's coordinate system
+        CGContextTranslateCTM(context, 0, self.bounds.size.height);
+        CGContextScaleCTM(context, 1, -1);
+
+        CGRect rect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
+        CGContextDrawImage(context, rect, image);
+
+        CGContextRestoreGState(context);
+
+        CGImageRelease(image);
+
+        cairo_surface_destroy(self->_imageSurface);
+        self->_imageSurface = NULL;
+    } 
+    
+    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+    [center postNotificationName:@"RedrawRequest"
+            object:self];
+    
+}
+
+- (void)updateFrame:(NSRect)frameRect
+{
+    [super setFrame:frameRect];
+}
+
+// Only update the position from DAW, keep the current size
+- (void)setFrame:(NSRect)frameRect
+{
+    
+    NSRect currentFrame = [self frame];
+    NSRect newFrame = NSMakeRect(frameRect.origin.x, frameRect.origin.y, currentFrame.size.width, currentFrame.size.height);
+    [super setFrame:newFrame];
+}
+
+- (instancetype)initWithFrame:(NSRect)frameRect
+{
+    self = [super initWithFrame:frameRect];
+    if (self)
+    {
+        //lsp_trace("Register event for view: %p", self);
+        NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+        [center addObserverForName:@"ForceExpose"
+                object:self
+                queue:[NSOperationQueue mainQueue]
+                usingBlock:^(NSNotification * _Nonnull note)
+                {
+                    if ([note.userInfo[@"Surface"] pointerValue] != nil)
+                    {
+                        //lsp_trace("Update Surface!");
+                        if (self->_imageSurface)
+                        {
+                            cairo_surface_destroy(self->_imageSurface);
+                        }
+                        self->_imageSurface = (cairo_surface_t *)[note.userInfo[@"Surface"] pointerValue];
+                        self->_needsRedrawing = true;
+                    }
+                }
+        ];
+    }
+    return self;
+} 
+
+- (CGImageRef)renderCairoImage
+{
+    cairo_surface_flush(self->_imageSurface);
+
+    unsigned char *data = cairo_image_surface_get_data(self->_imageSurface);
+    int width = cairo_image_surface_get_width(self->_imageSurface);
+    int height = cairo_image_surface_get_height(self->_imageSurface);
+    int stride = cairo_image_surface_get_stride(self->_imageSurface);
+
+    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+    CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst;
+
+    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, data, stride * height, NULL);
+
+    CGImageRef image = CGImageCreate(width,  height, 8, 32, stride,
+        colorSpace, bitmapInfo, provider, NULL, false, kCGRenderingIntentDefault);
+
+    CGDataProviderRelease(provider);
+    CGColorSpaceRelease(colorSpace);
+    return image;
+}
+
+// Starts the redraw loop
+- (void)startRedrawLoop
+{
+    if (self->_redrawTimer == nil)
+    {
+        self->_redrawTimer = [NSTimer   scheduledTimerWithTimeInterval:(1.0/60.0)
+                                        target:self
+                                        selector:@selector(triggerRedraw)
+                                        userInfo:nil
+                                        repeats:YES];
+    }
+}
+
+// Stops the redraw loop
+- (void)stopRedrawLoop
+{
+    if (self->_redrawTimer != nil)
+    {
+        [self->_redrawTimer invalidate]; 
+        self->_redrawTimer = nil;
+    }
+
+}
+
+// Destructor
+- (void)dealloc
+{
+    [self stopRedrawLoop];
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+    if (self.trackingArea)
+    {
+        [self removeTrackingArea:self.trackingArea];
+        self.trackingArea = nil;
+    }
+    self.display = nullptr;
+    [super dealloc];
+}
+
+// Updates the view
+- (void)triggerRedraw
+{
+    if (self->_needsRedrawing)
+        [self setNeedsDisplay:YES];
+}
+
+// Sets the cairo image
+- (void)setImage:(cairo_surface_t *)image
+{
+    self->_imageSurface = image;
+}
+
+// Sets the cursor in window
+- (void)setCursor:(NSCursor *)cursor
+{
+    self->_nextCursor = cursor;
+}
+
+//TODO: Finish drag and drop, only a draft
+- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
+{
+    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+    [center postNotificationName:@"DragEnter"
+            object:[self window]];
+
+    return NSDragOperationCopy; 
+}
+
+- (void)draggingExited:(id<NSDraggingInfo>)sender
+{
+    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+    [center postNotificationName:@"DragExit"
+            object:[self window]];
+}
+
+- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
+{
+    return NSDragOperationCopy;
+}
+
+- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender
+{
+    NSPasteboard *pboard = [sender draggingPasteboard];
+
+    if ([[pboard types] containsObject:NSPasteboardTypeFileURL])
+    {
+        NSArray<NSURL *> *files = [pboard   readObjectsForClasses:@[[NSURL class]]
+                                            options:@{NSPasteboardURLReadingFileURLsOnlyKey: @YES}];
+        for (NSURL *url in files)
+        {
+            NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+            [center postNotificationName:@"DragDroped"
+                    object:[self window]
+                    userInfo:@{
+                        @"URL": url.path
+                    }
+            ];
+        }
+        return YES;
+    }
+    return NO;
+}
+
+- (void)updateTrackingAreas
+{
+    [super updateTrackingAreas];
+    if (self.trackingArea)
+    {
+        [self removeTrackingArea:self.trackingArea];
+    }
+    NSTrackingArea *area = [[NSTrackingArea alloc]  initWithRect:self.bounds
+                                                    options:
+                                                        NSTrackingMouseEnteredAndExited |
+                                                        NSTrackingActiveInActiveApp |
+                                                        NSTrackingInVisibleRect |
+                                                        NSTrackingMouseMoved |
+                                                        NSTrackingEnabledDuringMouseDrag
+                                                    owner:self
+                                                    userInfo:nil];
+    [self addTrackingArea:area];
+    self.trackingArea = area;
+}
+
+- (void)mouseDown:(NSEvent *)event
+{
+    lsp_trace("Mouse down event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)rightMouseDown:(NSEvent *)event
+{
+    lsp_trace("Mouse (right) down event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)otherMouseDown:(NSEvent *)event
+{
+    lsp_trace("Mouse (other) down event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)mouseUp:(NSEvent *)event
+{
+    lsp_trace("Mouse up event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)rightMouseUp:(NSEvent *)event
+{
+    lsp_trace("Mouse (right) up event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)otherMouseUp:(NSEvent *)event
+{
+    lsp_trace("Mouse (other) up event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)mouseMoved:(NSEvent *)event
+{
+    lsp_trace("Mouse moved event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)mouseDragged:(NSEvent *)event
+{
+    lsp_trace("Mouse dragged event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)mouseEntered:(NSEvent *)event
+{
+    lsp_trace("Mouse enterd event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)mouseExited:(NSEvent *)event
+{
+    lsp_trace("Mouse exited event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)scrollWheel:(NSEvent *)event
+{
+    lsp_trace("Mouse scroll event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)keyDown:(NSEvent *)event
+{
+    lsp_trace("Key down event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+- (void)keyUp:(NSEvent *)event
+{
+    lsp_trace("Key up event in CocoaCairoView: %p", self);
+    if (self.display)
+        self.display->handle_event(event);
+}
+
+@end
+
+#endif
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaDisplay.mm 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaDisplay.mm
--- 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaDisplay.mm	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaDisplay.mm	2025-08-26 18:15:42.570014511 +0000
@@ -0,0 +1,569 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 9 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#import <Cocoa/Cocoa.h>
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/common/new.h>
+#include <lsp-plug.in/io/charset.h>
+#include <lsp-plug.in/io/OutMemoryStream.h>
+#include <lsp-plug.in/stdlib/math.h>
+#include <lsp-plug.in/stdlib/string.h>
+#include <lsp-plug.in/runtime/system.h>
+#include <lsp-plug.in/runtime/LSPString.h>
+#include <lsp-plug.in/ws/types.h>
+#include <lsp-plug.in/ws/keycodes.h>
+#include <lsp-plug.in/ws/cocoa/decode.h>
+
+#include <lsp-plug.in/ws/IDisplay.h>
+#include <lsp-plug.in/ws/IWindow.h>
+
+#include <private/cocoa/CocoaDisplay.h>
+#include <private/cocoa/CocoaWindow.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace cocoa
+        {
+            CocoaDisplay::CocoaDisplay(): IDisplay()
+            {
+               bExit                   = false;
+            }
+
+            CocoaDisplay::~CocoaDisplay()
+            {
+            }
+
+            status_t CocoaDisplay::init(int argc, const char **argv)
+            {
+                if (NSApp == NULL)
+                {
+                    [NSApplication sharedApplication];
+                    [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
+                    [NSApp activateIgnoringOtherApps:YES];
+                    standaloneApp = true;
+                }
+                else 
+                    standaloneApp = false;
+
+                // Initialize font manager
+            #ifdef USE_LIBFREETYPE
+                {
+                    status_t fm_res    = sFontManager.init();
+                    if (fm_res != STATUS_OK)
+                        return fm_res;
+                }
+            #endif /* USE_LIBFREETYPE */
+
+                get_enviroment_frame_sizes();
+
+                // Create estimation surface
+                pEstimation     = new CocoaCairoSurface(this, 1, 1);
+                if (pEstimation == NULL)
+                    return STATUS_NO_MEM;
+
+                return IDisplay::init(argc, argv);
+            }
+
+            status_t CocoaDisplay::main()
+            {
+                while (!bExit)
+                {
+                    timestamp_t ts = system::get_time_millis();
+
+                    // Do one main iteration
+                    status_t result = do_main_iteration(ts);
+                    
+                    if (result != STATUS_OK)
+                        return result;
+                }
+                
+                return STATUS_OK;
+            }
+
+            void CocoaDisplay::get_enviroment_frame_sizes()
+            {
+                NSWindow *tempWindow = [[NSWindow alloc]  initWithContentRect:NSMakeRect(0,0,20,20)
+                                                          styleMask:(NSWindowStyleMaskTitled | NSWindowStyleMaskClosable)
+                                                          backing:NSBackingStoreBuffered
+                                                          defer:NO];
+
+                // Get frame and content rect
+                NSRect fRect = tempWindow.frame;
+                NSRect cRect = [tempWindow contentRectForFrameRect:fRect];
+
+                titleHeight = fRect.size.height - cRect.size.height;
+                borderWidth = fRect.size.width - cRect.size.width;
+
+                [tempWindow orderOut:nil];
+                [tempWindow close];
+                tempWindow = nil;  
+            }
+
+            size_t CocoaDisplay::get_window_title_height()
+            {
+                return titleHeight;
+            }
+
+            size_t CocoaDisplay::get_window_border_width()
+            {
+                return borderWidth;
+            }
+
+            ft::FontManager *CocoaDisplay::font_manager()
+            {
+            #ifdef USE_LIBFREETYPE
+                return &sFontManager;
+            #else
+                return NULL;
+            #endif /* USE_LIBFREETYPE */
+            }
+
+            status_t CocoaDisplay::do_main_iteration(timestamp_t ts)
+            {
+                // Here, any queued Cocoa events already handled via sendEvent.
+                // Use this to do your own rendering / app logic.
+                @autoreleasepool {
+                    if (standaloneApp)
+                    {
+                        NSEvent *event;
+                        while (
+                            (
+                                event = [NSApp  nextEventMatchingMask:NSEventMaskAny
+                                                untilDate:[NSDate distantPast]
+                                                inMode:NSDefaultRunLoopMode
+                                                dequeue:YES] 
+
+                            )
+                        )
+                        {
+                            [NSApp sendEvent:event];
+                            [NSApp updateWindows];
+
+                            //Dispatch to custom handler
+                            //handle_event(event);
+                        } 
+                    }
+
+                    // Handle internal tasks
+                    status_t result = process_pending_tasks(ts);
+
+                #ifdef USE_LIBFREETYPE
+                    sFontManager.gc();
+                #endif
+
+                    return result;
+                }
+            }
+
+            bool CocoaDisplay::r3d_backend_supported(const r3d::backend_metadata_t *meta)
+            {
+                // CoocaDisplay display supports only offscreen 
+                if (meta->wnd_type == r3d::WND_HANDLE_NONE)
+                    return true;
+                return IDisplay::r3d_backend_supported(meta);
+            }
+
+            void CocoaDisplay::handle_event(void *event)
+            {
+                NSEvent *nsevent = (__bridge NSEvent *)event;
+
+                if (!nsevent)
+                    return;
+
+                NSEventType type = [nsevent type];
+                NSWindow *nsWindow = [nsevent window];
+                CocoaWindow *target = find_window(nsWindow);
+
+                if (!target)
+                    return;
+                
+                event_t ue = {};
+                init_event(&ue);
+                ue.nTime = timestamp_t([nsevent timestamp] * 1000);
+
+                unsigned short keyCode = 65535;
+                NSString *chars = @"";
+                unichar keysym = 0;
+
+                NSPoint locInWindow = [nsevent locationInWindow];
+                NSView *targetView = [[nsWindow contentView] hitTest:locInWindow];
+                NSPoint locInView = [targetView convertPoint:locInWindow fromView:nil];
+                NSRect cFrame = [targetView frame];
+
+                ue.nLeft = locInView.x;
+                ue.nTop = cFrame.size.height - locInView.y;
+                //TODO: Is there any problem when the mouse nTop state can negativ?
+
+                switch (type)
+                {
+                    case NSEventTypeLeftMouseDown:
+                    case NSEventTypeRightMouseDown:
+                    case NSEventTypeOtherMouseDown:
+                        ue.nType = UIE_MOUSE_DOWN;
+                        ue.nCode = decode_mcb(nsevent);
+                        lastMouseButton = decode_modifier(nsevent);
+                        //ue.nState = decode_modifier(nsevent);
+                        break;
+
+                    case NSEventTypeLeftMouseUp:
+                    case NSEventTypeRightMouseUp:
+                    case NSEventTypeOtherMouseUp:
+                        ue.nType = UIE_MOUSE_UP;
+                        ue.nCode = decode_mcb(nsevent); //decode_mcb(nsevent);
+                        ue.nState = decode_modifier(nsevent);
+                        ue.nState = lastMouseButton;
+                        lastMouseButton = decode_modifier(nsevent);
+                        break;
+
+                    case NSEventTypeMouseMoved:
+                    case NSEventTypeLeftMouseDragged:
+                    case NSEventTypeRightMouseDragged:
+                    case NSEventTypeOtherMouseDragged:
+                        ue.nType = UIE_MOUSE_MOVE;
+                        ue.nState = lastMouseButton;
+                        //ue.nState = decode_modifier(nsevent);
+                        break;
+
+                    case NSEventTypeScrollWheel:
+                        ue.nType = UIE_MOUSE_SCROLL;
+                        ue.nCode = decode_mcd(nsevent);
+                        ue.nState = decode_modifier(nsevent);
+                        break;
+
+                    case NSEventTypeKeyDown:
+                        //TODO: implement mouse / keyboard button states
+                        keyCode = [nsevent keyCode];
+                        chars = [nsevent charactersIgnoringModifiers];
+                        keysym = [chars characterAtIndex:0];
+
+                        lsp_trace("Key Code: %hu", keyCode);
+                        ue.nType = UIE_KEY_DOWN;
+                        ue.nRawCode = keyCode;
+                        ue.nCode = keysym;
+                        ue.nState = decode_modifier(nsevent);
+                        break;
+
+                    case NSEventTypeKeyUp:
+                        //TODO: implement mouse / keyboard button states
+                        keyCode = [nsevent keyCode];
+                        chars = [nsevent charactersIgnoringModifiers];
+                        keysym = [chars characterAtIndex:0];
+
+                        lsp_trace("Key Code: %hu", keyCode);
+                        ue.nType = UIE_KEY_UP;
+                        ue.nRawCode = keyCode;
+                        ue.nCode = keysym;
+                        ue.nState = decode_modifier(nsevent);
+                        break;
+
+                    case NSEventTypeMouseEntered:
+                        ue.nType = UIE_MOUSE_IN;
+                        break;
+
+                    case NSEventTypeMouseExited:
+                        ue.nType = UIE_MOUSE_OUT;
+                        break;
+
+                    case NSEventTypeFlagsChanged:
+                        // Optional: Modifier key changes
+                        break;
+
+                    default:
+                        return;  // Unhandled
+                }
+
+                // If your architecture supports redirection or grabs, simulate it here
+                target->handle_event(&ue);
+            }
+
+            status_t CocoaDisplay::main_iteration()
+            {
+                timestamp_t ts = system::get_time_millis();
+                return do_main_iteration(ts);
+            }
+
+            void CocoaDisplay::quit_main()
+            {
+                bExit = true;
+            }
+
+            IWindow *CocoaDisplay::create_window()
+            {
+                lsp_trace("create_window 1");
+                CocoaWindow *wnd = new CocoaWindow(this, NULL, NULL, false);
+                add_window(wnd);
+                return wnd;
+            }
+
+            IWindow *CocoaDisplay::create_window(size_t screen)
+            {
+                lsp_trace("create_window 2");
+                CocoaWindow *wnd = new CocoaWindow(this, NULL, NULL, false);
+                add_window(wnd);
+                return wnd;
+            }
+
+            IWindow *CocoaDisplay::create_window(void *handle)
+            {
+                lsp_trace("create_window 3");
+                lsp_trace("handle = %p", handle);
+                //CocoaWindow *wnd = new CocoaWindow(this, NULL, NULL, false);
+                CocoaWindow *wnd = new CocoaWindow(this, (__bridge NSView*)handle, NULL, true);
+                add_window(wnd);
+                return wnd;
+            }
+
+            bool CocoaDisplay::add_window(CocoaWindow *wnd)
+            {
+                return vWindows.add(wnd);
+            }
+
+            bool CocoaDisplay::remove_window(CocoaWindow *wnd)
+            {
+                // Remove focus window
+                //if (pFocusWindow == wnd)
+                //    pFocusWindow = NULL;
+
+                // Remove window from list
+                if (!vWindows.premove(wnd))
+                    return false;
+
+                // Check if need to leave main cycle
+                if (vWindows.size() <= 0)
+                    bExit = true;
+                return true;
+            }
+
+            CocoaWindow *CocoaDisplay::find_window(void *wnd)
+            {
+                NSWindow *nswnd = (__bridge NSWindow *)wnd;
+                
+                size_t n = vWindows.size();
+
+                for (size_t i = 0; i < n; ++i)
+                {
+                    CocoaWindow *w = vWindows.uget(i);
+                    if (w == NULL)
+                        continue;
+                    if (w->nswindow() == nswnd)
+                        return w;
+                }
+
+                return NULL;
+            }
+
+
+            void CocoaDisplay::destroy()
+            {
+                // Destroy font manager
+            #ifdef USE_LIBFREETYPE
+                sFontManager.destroy();
+            #endif /* USE_LIBFREETYPE */
+
+                if (standaloneApp)
+                    [NSApp terminate:nil];
+
+                IDisplay::destroy();
+            }
+
+            const MonitorInfo *CocoaDisplay::enum_monitors(size_t *count)
+            {
+                // Prepare result array
+                lltl::darray<MonitorInfo> result;
+
+                NSArray<NSScreen *> *screens = [NSScreen screens];
+                NSUInteger nmonitors = [screens count];
+
+                MonitorInfo *items = result.add_n(nmonitors);
+                if (items == nullptr)
+                    return nullptr;
+
+                for (NSUInteger i = 0; i < nmonitors; ++i)
+                {
+                    MonitorInfo *di = &items[i];
+                    new (&di->name, inplace_new_tag_t()) LSPString;
+
+                    NSScreen *screen = screens[i];
+                    NSRect frame = [screen frame];
+
+                    // Set screen bounds
+                    di->rect.nLeft   = static_cast<int>(frame.origin.x);
+                    di->rect.nTop    = static_cast<int>(frame.origin.y);
+                    di->rect.nWidth  = static_cast<int>(frame.size.width);
+                    di->rect.nHeight = static_cast<int>(frame.size.height);
+
+                    // Set primary flag (main screen)
+                    di->primary = (screen == [NSScreen mainScreen]);
+
+                    // No native way to get monitor name in Cocoa, so use fallback
+                    LSPString monitorName;
+                    monitorName.fmt_utf8("Monitor %lu", (unsigned long)i);
+                    di->name.set_utf8(monitorName.get_utf8());
+                }
+                
+                if (count)
+                    *count = result.size();
+                return result.release();
+            }
+
+            status_t CocoaDisplay::work_area_geometry(ws::rectangle_t *r)
+            {
+                if (r == nullptr)
+                    return STATUS_BAD_ARGUMENTS;
+
+                NSScreen *screen = [NSScreen mainScreen];
+                if (!screen)
+                    return STATUS_UNKNOWN_ERR;
+
+                NSRect frame = [screen visibleFrame];  // Excludes Dock & menu bar
+
+                r->nLeft   = static_cast<int>(frame.origin.x);
+                r->nTop    = static_cast<int>(frame.origin.y);
+                r->nWidth  = static_cast<int>(frame.size.width);
+                r->nHeight = static_cast<int>(frame.size.height);
+
+                return STATUS_OK;
+            }
+
+            status_t CocoaDisplay::screen_size(size_t screen, ssize_t *w, ssize_t *h)
+            {
+                NSScreen *mainScreen = [NSScreen mainScreen];
+                if (mainScreen == nil)
+                    return STATUS_UNKNOWN_ERR;
+
+                NSRect frame = [mainScreen frame];
+                CGFloat width = frame.size.width;
+                CGFloat height = frame.size.height;
+
+                if (width <= 0 || height <= 0)
+                    return STATUS_UNKNOWN_ERR;
+
+                if (w != NULL)
+                    *w = static_cast<ssize_t>(width);
+                if (h != NULL)
+                    *h = static_cast<ssize_t>(height);
+
+                return STATUS_OK;
+            }
+
+
+            status_t CocoaDisplay::add_font(const char *name, io::IInStream *is)
+            {
+                if ((name == NULL) || (is == NULL))
+                    return STATUS_BAD_ARGUMENTS;
+
+                status_t res    = STATUS_OK;
+
+            #ifdef USE_LIBFREETYPE
+                if ((res = sFontManager.add(name, is)) != STATUS_OK)
+                    return res;
+            #endif /* USE_LIBFREETYPE */
+                
+                return res;
+            }
+
+            status_t CocoaDisplay::add_font_alias(const char *name, const char *alias)
+            {
+                if ((name == NULL) || (alias == NULL))
+                    return STATUS_BAD_ARGUMENTS;
+
+                status_t res    = STATUS_OK;
+            #ifdef USE_LIBFREETYPE
+                if ((res = sFontManager.add_alias(name, alias)) != STATUS_OK)
+                    return res;
+            #endif /* USE_LIBFREETYPE */
+
+                return res;
+            }
+            
+            status_t CocoaDisplay::remove_font(const char *name)
+            {
+                if (name == NULL)
+                    return STATUS_BAD_ARGUMENTS;
+
+                status_t res;
+            #ifdef USE_LIBFREETYPE
+                if ((res = sFontManager.remove(name)) != STATUS_OK)
+                    return res;
+            #endif /* USE_LIBFREETYPE */
+
+                return res;
+            }
+
+            void CocoaDisplay::remove_all_fonts()
+            {
+            #ifdef USE_LIBFREETYPE
+                sFontManager.clear();
+            #endif /* USE_LIBFREETYPE */
+            }
+
+            bool CocoaDisplay::get_font_parameters(const Font &f, font_parameters_t *fp)
+            {
+                // Redirect the request to estimation surface
+                pEstimation->begin();
+                lsp_finally{ pEstimation->end(); };
+                return pEstimation->get_font_parameters(f, fp);
+            }
+
+            bool CocoaDisplay::get_text_parameters(const Font &f, text_parameters_t *tp, const char *text)
+            {
+                // Redirect the request to estimation surface
+                pEstimation->begin();
+                lsp_finally{ pEstimation->end(); };
+                return pEstimation->get_text_parameters(f, tp, text);
+            }
+
+            bool CocoaDisplay::get_text_parameters(const Font &f, text_parameters_t *tp, const LSPString *text, ssize_t first, ssize_t last)
+            {
+                // Redirect the request to estimation surface
+                pEstimation->begin();
+                lsp_finally{ pEstimation->end(); };
+                return pEstimation->get_text_parameters(f, tp, text, first, last);
+            }
+
+            status_t CocoaDisplay::get_pointer_location(size_t *screen, ssize_t *left, ssize_t *top)
+            {
+                //TODO: can we detect the screen?
+                ssize_t sw, sh;
+                this->screen_size(0, &sw, &sh);
+
+                NSPoint mouseLocation = [NSEvent mouseLocation];
+                *screen = 0;
+                *left = (size_t)mouseLocation.x;
+                *top = sh - (size_t)mouseLocation.y;
+
+                return STATUS_OK;
+            }
+
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* PLATFORM_MACOSX */
\ No newline at end of file
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaWindow.mm 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaWindow.mm
--- 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/CocoaWindow.mm	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/CocoaWindow.mm	2025-08-26 18:15:42.570014511 +0000
@@ -0,0 +1,1061 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 9 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#import <Cocoa/Cocoa.h>
+
+#include <lsp-plug.in/common/alloc.h>
+#include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/common/new.h>
+#include <lsp-plug.in/io/charset.h>
+#include <lsp-plug.in/io/OutMemoryStream.h>
+#include <lsp-plug.in/stdlib/math.h>
+#include <lsp-plug.in/stdlib/string.h>
+#include <lsp-plug.in/runtime/system.h>
+
+#include <lsp-plug.in/ws/IDisplay.h>
+#include <lsp-plug.in/ws/IWindow.h>
+
+#include <private/cocoa/CocoaDisplay.h>
+#include <private/cocoa/CocoaWindow.h>
+#include <private/cocoa/CocoaCairoSurface.h>
+#include <private/cocoa/CocoaCairoView.h>
+
+#include <cairo.h>
+#include <cairo-quartz.h>
+
+#include <thread>
+#include <chrono>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace cocoa
+        {
+            
+            CocoaWindow::CocoaWindow(CocoaDisplay *dpy, NSView *view, IEventHandler *handler, bool wrapper): ws::IWindow(dpy, handler)
+            {
+                lsp_trace("%zu", wrapper);
+
+                pCocoaDisplay = dpy;
+               
+                nActions                = WA_SINGLE;
+                enPointer               = MP_DEFAULT;
+                enState                 = WS_NORMAL;
+
+                bWrapper                = wrapper;
+
+                if (bWrapper) {
+                    pCocoaWindow = [view window];
+                }
+
+                sSize.nLeft             = 0;
+                sSize.nTop              = 0;
+                sSize.nWidth            = 320;
+                sSize.nHeight           = 320;
+
+                sConstraints.nMinWidth  = -1;
+                sConstraints.nMinHeight = -1;
+                sConstraints.nMaxWidth  = -1;
+                sConstraints.nMaxHeight = -1;
+                sConstraints.nPreWidth  = -1;
+                sConstraints.nPreHeight = -1;
+
+                windowObserverTokens = [[NSMutableArray alloc] init];
+                viewObserverTokens = [[NSMutableArray alloc] init];
+            }
+
+            CocoaWindow::~CocoaWindow()
+            {
+                pCocoaDisplay   = NULL;
+                pCocoaWindow    = NULL;
+            }
+
+            status_t CocoaWindow::init()
+            {
+                // Initialize parent class
+                status_t res = IWindow::init();
+                if (res != STATUS_OK)
+                    return res;
+
+                if (!bWrapper)
+                {
+                    ssize_t screenWidth, screenHeight;
+                    pCocoaDisplay->screen_size(0, &screenWidth, &screenHeight);
+                    NSRect frame = NSMakeRect(sSize.nLeft, screenHeight - sSize.nTop - sSize.nHeight + pCocoaDisplay->get_window_title_height(), sSize.nWidth, sSize.nHeight + pCocoaDisplay->get_window_title_height());    
+
+                    // Create a window
+                    NSWindow *window = [[NSWindow alloc]
+                                                initWithContentRect:frame
+                                                styleMask:(NSWindowStyleMaskTitled |
+                                                            NSWindowStyleMaskClosable |
+                                                            NSWindowStyleMaskResizable)
+                                                backing:NSBackingStoreBuffered
+                                                defer:NO];
+
+                    pCocoaWindow = window;
+                    [pCocoaWindow setIsVisible:NO];
+
+                    // Create a cocoa view and set it to window
+                    CocoaCairoView *view = [[CocoaCairoView alloc] initWithFrame:frame];
+                    view.display = pCocoaDisplay;
+                    pCocoaView = view;
+                    [pCocoaWindow setContentView:pCocoaView];
+                    [pCocoaView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
+                    [pCocoaView registerForDraggedTypes:@[NSPasteboardTypeFileURL]];
+                    [pCocoaWindow makeFirstResponder:pCocoaView];
+                    
+                    set_border_style(BS_SIZEABLE);
+                    set_window_actions(WA_ALL);
+                    init_notification_center(pCocoaWindow);
+                    init_notification_center(pCocoaView);
+                }
+                else
+                {
+                    CocoaCairoView *wrapperView = [[CocoaCairoView alloc] initWithFrame:[[pCocoaWindow contentView] bounds]];
+                    [[pCocoaWindow contentView] addSubview:wrapperView positioned:NSWindowAbove relativeTo:nil];
+                    wrapperView.display = pCocoaDisplay;
+                    pCocoaView = wrapperView;
+                    [pCocoaView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
+                    [pCocoaWindow makeFirstResponder:pCocoaView];
+                    
+                    init_notification_center(pCocoaView);
+                }
+
+                
+                set_mouse_pointer(MP_DEFAULT);
+                bInvalidate = true;
+
+                return STATUS_OK;
+            }
+
+            void CocoaWindow::init_notification_center(NSWindow *window)
+            {
+                NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
+
+                id didBecomeKeyNotificationToken = [center addObserverForName:NSWindowDidBecomeKeyNotification
+                                    object:window
+                                    queue:[NSOperationQueue mainQueue]
+                                    usingBlock:^(NSNotification *note) {
+                                        lsp_trace("UIE_FOCUS_IN");
+                                        event_t ue;
+                                        init_event(&ue);
+                                        ue.nType       = UIE_FOCUS_IN;
+                                        handle_event(&ue);
+                                    }];
+                [windowObserverTokens addObject:didBecomeKeyNotificationToken];
+
+                id didResignKeyNotificationToken = [center addObserverForName:NSWindowDidResignKeyNotification
+                                    object:window
+                                    queue:[NSOperationQueue mainQueue]
+                                    usingBlock:^(NSNotification *note) {
+                                        lsp_trace("UIE_FOCUS_OUT");
+                                        event_t ue;
+                                        init_event(&ue);
+                                        ue.nType       = UIE_FOCUS_OUT;
+                                        handle_event(&ue);
+                                    }];
+                [windowObserverTokens addObject:didResignKeyNotificationToken];
+
+                id didMiniaturizeNotificationToken = [center addObserverForName:NSWindowDidMiniaturizeNotification
+                                    object:window
+                                    queue:[NSOperationQueue mainQueue]
+                                    usingBlock:^(NSNotification *note) {
+                                        lsp_trace("UIE_HIDE");
+                                        event_t ue;
+                                        init_event(&ue);
+                                        ue.nType       = UIE_HIDE;
+                                        handle_event(&ue);
+                                    }];
+                [windowObserverTokens addObject:didMiniaturizeNotificationToken];
+
+                id didDeminiaturizeNotificationToken = [center addObserverForName:NSWindowDidDeminiaturizeNotification
+                                    object:window
+                                    queue:[NSOperationQueue mainQueue]
+                                    usingBlock:^(NSNotification *note) {
+                                        lsp_trace("UIE_SHOW");
+                                        event_t ue;
+                                        init_event(&ue);
+                                        ue.nType       = UIE_SHOW;
+                                        handle_event(&ue);
+                                    }];
+                [windowObserverTokens addObject:didDeminiaturizeNotificationToken];
+
+                id willCloseNotificationToken = [center addObserverForName:NSWindowWillCloseNotification
+                                    object:window
+                                    queue:[NSOperationQueue mainQueue]
+                                    usingBlock:^(NSNotification *note) {
+                                        lsp_trace("UIE_CLOSE");
+                                        event_t ue;
+                                        init_event(&ue);
+                                        ue.nType       = UIE_CLOSE;
+                                        handle_event(&ue);
+                                    }];
+                [windowObserverTokens addObject:willCloseNotificationToken];
+
+                id dragEnterToken = [center addObserverForName:@"DragEnter"
+                                    object:window
+                                    queue:[NSOperationQueue mainQueue]
+                                    usingBlock:^(NSNotification *note) {
+                                        lsp_trace("UIE_DRAG_ENTER");
+                                        event_t ue;
+                                        init_event(&ue);
+                                        ue.nType       = UIE_DRAG_ENTER;
+                                        handle_event(&ue);
+                                    }];
+                [windowObserverTokens addObject:dragEnterToken];
+
+                id dragExitToken = [center addObserverForName:@"DragExit"
+                                    object:window
+                                    queue:[NSOperationQueue mainQueue]
+                                    usingBlock:^(NSNotification *note) {
+                                        lsp_trace("UIE_DRAG_LEAVE");
+                                        event_t ue;
+                                        init_event(&ue);
+                                        ue.nType       = UIE_DRAG_LEAVE;
+                                        handle_event(&ue);
+                                    }];
+                [windowObserverTokens addObject:dragExitToken];
+
+                //TODO: implement all notification events
+                
+                id didResizeNotificationToken = [center addObserverForName:NSWindowDidResizeNotification
+                                    object:window
+                                    queue:[NSOperationQueue mainQueue]
+                                    usingBlock:^(NSNotification *note) {
+                                        ssize_t screenWidth, screenHeight;
+                                        pCocoaDisplay->screen_size(0, &screenWidth, &screenHeight);
+                                        NSWindow *nsWindow = note.object;
+                                        NSRect wFrame = [nsWindow frame];
+                                        NSRect cFrame = [[nsWindow contentView] frame];
+                                        event_t ue;
+                                        init_event(&ue);
+                                        ue.nType       = UIE_RESIZE;
+                                        ue.nTop        = screenHeight - wFrame.origin.y - cFrame.size.height;
+                                        ue.nLeft       = wFrame.origin.x;
+                                        ue.nWidth      = cFrame.size.width;
+                                        ue.nHeight     = cFrame.size.height;
+                                        lsp_trace("UIE_RESIZE: {l=%d, t=%d, w=%d, h=%d}", int(ue.nLeft), int(ue.nTop), int(ue.nWidth), int(ue.nHeight));
+                                        handle_event(&ue);
+                                    }];
+                [windowObserverTokens addObject:didResizeNotificationToken];
+            }
+
+            void CocoaWindow::init_notification_center(CocoaCairoView *view)
+            {
+                NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
+
+                id redrawRequestToken = [center addObserverForName:@"RedrawRequest"
+                                    object:view
+                                    queue:[NSOperationQueue mainQueue]
+                                    usingBlock:^(NSNotification *note) {
+                                        if (bInvalidate) {
+                                            event_t ue;
+                                            init_event(&ue);
+                                            ue.nType       = UIE_REDRAW;
+                                            handle_event(&ue);
+                                            bInvalidate = false;
+                                        }
+                                    }];
+                [viewObserverTokens addObject:redrawRequestToken];
+
+            }
+
+            void CocoaWindow::destroy()
+            {
+                if (bWrapper)
+                {
+                    for (id token in viewObserverTokens)
+                    {
+                        [[NSNotificationCenter defaultCenter] removeObserver:token];
+                    }
+                    [[NSNotificationCenter defaultCenter] removeObserver:pCocoaView];
+                    [viewObserverTokens removeAllObjects];
+                }
+                else
+                {
+                    for (id token in windowObserverTokens)
+                    {
+                        [[NSNotificationCenter defaultCenter] removeObserver:token];
+                    }
+                    [[NSNotificationCenter defaultCenter] removeObserver:pCocoaWindow];
+                    [windowObserverTokens removeAllObjects];
+                }
+
+                if ([pCocoaView superview])
+                {
+                    [pCocoaView removeFromSuperview];
+                    [pCocoaView release];
+                    pCocoaView = NULL;
+                }
+                    
+                hide();
+                drop_surface();
+
+                // Surface related
+                if (pSurface != NULL)
+                {
+                    pSurface->destroy();
+                    delete pSurface;
+                    pSurface = NULL;
+                }
+
+                if (pCocoaDisplay != NULL)  
+                    pCocoaDisplay->vWindows.qpremove(this);
+                
+                if (!bWrapper && pCocoaWindow != NULL)
+                    [pCocoaWindow close];
+                
+                pCocoaDisplay = NULL;
+                IWindow::destroy();
+            }
+
+            NSWindow *CocoaWindow::nswindow() const
+            {
+                return pCocoaWindow;
+            }
+
+            ISurface *CocoaWindow::create_surface(CocoaDisplay *display, CocoaCairoView *view, size_t width, size_t height)
+            {
+                ISurface *result = NULL;
+
+                if (result == NULL)
+                {
+                    
+                    result = new CocoaCairoSurface(display, view, width, height);
+                    if (result != NULL)
+                        lsp_trace("Using CocoaCairoSurface ptr=%p", result);
+                }
+                return result;
+            }
+
+            // Triggers redraw from app and tests
+            status_t CocoaWindow::invalidate()
+            {
+                if (pSurface == NULL)
+                    return STATUS_BAD_STATE;
+
+                bInvalidate = true;
+
+                
+                event_t ue;
+                init_event(&ue);
+
+                ue.nType       = UIE_REDRAW;
+                ue.nLeft       = sSize.nLeft;
+                ue.nTop        = sSize.nHeight;
+                ue.nWidth      = sSize.nWidth;
+                ue.nHeight     = sSize.nHeight;
+
+                handle_event(&ue);
+               
+/*
+                NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+                [center postNotificationName:@"RedrawRequest"
+                                    object:pCocoaWindow];
+*/
+                //Trigger CocoaCairoView to redraw!
+                //[pCocoaView setCursor: pCocoaCursor];
+                //[pCocoaView setImage: get_image_surface()];
+                //[pCocoaView triggerRedraw];
+                
+                return STATUS_OK;
+            }
+
+
+            ISurface *CocoaWindow::get_surface()
+            {
+                /*
+                if(bWrapper)
+                    return NULL;
+                */
+                if (pSurface != NULL)
+                    return pSurface;
+
+                return NULL;
+            }
+
+            cairo_surface_t *CocoaWindow::get_image_surface()
+            {
+                if (pSurface != NULL)
+                {
+                    return reinterpret_cast<CocoaCairoSurface *>(pSurface)->get_image_surface();
+                }
+
+                return NULL;
+            }
+
+            void CocoaWindow::drop_surface()
+            {
+                if (pSurface != NULL)
+                {
+                    pSurface->destroy();
+                    delete pSurface;
+                    pSurface = NULL;
+                }
+            }
+
+            //TODO: Translate all Cursors!
+            static NSCursor* translate_cursor(mouse_pointer_t pointer)
+            {
+                using namespace lsp::ws;
+                switch (pointer)
+                {
+                    case MP_ARROW:        return [NSCursor arrowCursor];
+                    /* TODO: implement custom cursor?
+                    MP_ARROW_LEFT,      // Arrow left
+                    MP_ARROW_RIGHT,     // Arrow right
+                    MP_ARROW_UP,        // Arrow up
+                    MP_ARROW_DOWN,      // Arrow down
+                    MP_DRAW,            // Drawing tool (pencil)
+                    MP_PLUS,            // Plus
+                    MP_SIZE,            // Size
+                    MP_SIZE_NESW,       // Sizing cursor oriented diagonally from northeast to southwest
+                    MP_SIZE_NWSE,       // Sizing cursor oriented diagonally from northwest to southeast
+                    MP_UP_ARROW,        // Arrow pointing up
+                    MP_HOURGLASS,       // Hourglass
+                    MP_DRAG,            // Arrow with a blank page in the lower-right corner
+                    MP_HSPLIT,          // Black double-vertical bar with arrows pointing right and left
+                    MP_VSPLIT,          // Black double-horizontal bar with arrows pointing up and down
+                    MP_MULTIDRAG,       // Arrow with three blank pages in the lower-right corner
+                    MP_APP_START,       // Arrow combined with an hourglass
+                    MP_HELP,            // Arrow next to a black question mark
+                    */
+                    case MP_DRAG:         return [NSCursor closedHandCursor];
+                    case MP_DANGER:
+                    case MP_NO_DROP:      return [NSCursor operationNotAllowedCursor];
+                    case MP_IBEAM:        return [NSCursor IBeamCursor];
+                    case MP_PLUS:
+                    case MP_CROSS:        return [NSCursor crosshairCursor];
+                    case MP_HAND:         return [NSCursor pointingHandCursor];
+                    case MP_SIZE_NS:      return [NSCursor resizeUpDownCursor];
+                    case MP_SIZE_WE:      return [NSCursor resizeLeftRightCursor];
+                    default:              return [NSCursor arrowCursor]; // Fallback to default cursor
+                }
+            }
+
+            status_t CocoaWindow::set_mouse_pointer(mouse_pointer_t pointer)
+            {
+                if (pCocoaWindow == nullptr)  // NSWindow*
+                    return STATUS_BAD_STATE;
+                if (enPointer == pointer)
+                    return STATUS_OK;
+
+                NSCursor* cursor = translate_cursor(pointer);
+                if (!cursor)
+                    return STATUS_UNKNOWN_ERR;
+
+                pCocoaCursor = cursor;
+                enPointer = pointer;
+
+                [pCocoaView setCursor: pCocoaCursor];
+
+                return STATUS_OK;
+            }
+
+            mouse_pointer_t CocoaWindow::get_mouse_pointer()
+            {
+                return enPointer;
+            } 
+
+            status_t CocoaWindow::set_caption(const LSPString *caption)
+            {
+                if (caption == nullptr)
+                    return STATUS_BAD_ARGUMENTS;
+                if (pCocoaWindow == nullptr)
+                    return STATUS_BAD_STATE;
+
+                NSString *title = [NSString stringWithCharacters:reinterpret_cast<const unichar *>(caption->get_utf16())
+                                            length: caption->length()];
+                if (!title)
+                    return STATUS_NO_MEM;
+
+                lsp_trace("%s, %p", caption->get_utf8(), pCocoaWindow);
+                [pCocoaWindow setTitle:title];
+                return STATUS_OK;
+            }
+
+            status_t CocoaWindow::set_caption(const char *caption)
+            {
+                if (caption == nullptr)
+                    return STATUS_BAD_ARGUMENTS;
+
+                LSPString tmp;
+                return (tmp.set_utf8(caption)) ? set_caption(&tmp) : STATUS_NO_MEM;
+            }
+
+            status_t CocoaWindow::get_caption(LSPString *text)
+            {
+                if (text == nullptr)
+                    return STATUS_BAD_ARGUMENTS;
+                if (pCocoaWindow == nullptr)
+                    return STATUS_BAD_STATE;
+
+                NSString *title = [pCocoaWindow title];
+                const char *utf8 = [title UTF8String];
+                return (text->set_utf8(utf8)) ? STATUS_OK : STATUS_NO_MEM;
+            }
+
+            status_t CocoaWindow::get_caption(char *text, size_t len)
+            {
+                if (text == nullptr)
+                    return STATUS_BAD_ARGUMENTS;
+                if (len < 1)
+                    return STATUS_TOO_BIG;
+
+                LSPString tmp;
+                status_t res = get_caption(&tmp);
+                if (res != STATUS_OK)
+                    return res;
+
+                const char *utf8 = tmp.get_utf8();
+                size_t count = strlen(utf8) + 1;
+                if (len < count)
+                    return STATUS_TOO_BIG;
+
+                memcpy(text, utf8, count);
+                return STATUS_OK;
+            }
+
+            //TODO: Translate all Window Border Styles!
+            NSWindowStyleMask CocoaWindow::get_ns_style(border_style_t style, size_t wa)
+            {
+                NSUInteger styleMask = NSWindowStyleMaskTitled;
+
+                if (has_parent())
+                {
+                    // Child windows typically don't need special style on macOS
+                    // Possibly NSBorderlessWindowMask if it's not intended to be interactive
+                    styleMask = NSWindowStyleMaskBorderless;
+                }
+                else
+                {
+                    switch (style)
+                    {
+                        case BS_DIALOG:
+                            styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable;
+                            break;
+
+                        case BS_SINGLE:
+                            styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable;
+                            if (wa & WA_MINIMIZE)
+                                styleMask |= NSWindowStyleMaskMiniaturizable;
+                            if (wa & WA_MAXIMIZE)
+                                styleMask |= NSWindowStyleMaskResizable;
+                            break;
+
+                        case BS_SIZEABLE:
+                            styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable;
+                            if (wa & WA_MINIMIZE)
+                                styleMask |= NSWindowStyleMaskMiniaturizable;
+                            if (wa & WA_MAXIMIZE)
+                                styleMask |= NSWindowStyleMaskResizable;
+                            break;
+
+                        case BS_POPUP:
+                        case BS_COMBO:
+                        case BS_DROPDOWN:
+                            styleMask = NSWindowStyleMaskBorderless;
+                            [pCocoaWindow setLevel:NSFloatingWindowLevel];
+                            break;
+
+                        case BS_NONE:
+                        default:
+                            styleMask = NSWindowStyleMaskBorderless;
+                            break;
+                    }
+                }
+
+                return styleMask;
+            }
+
+            status_t CocoaWindow::get_border_style(border_style_t *style)
+            {
+                using namespace lsp::ws;
+
+                if (style == NULL)
+                    return STATUS_BAD_ARGUMENTS;
+                if (pCocoaWindow == NULL)
+                    return STATUS_BAD_STATE;
+
+                *style    = enBorderStyle;
+                return STATUS_OK;
+            }
+
+            status_t CocoaWindow::set_border_style(border_style_t style)
+            {
+                if (!pCocoaWindow)
+                    return STATUS_BAD_STATE;
+
+                enBorderStyle = style;
+                commit_border_style(enBorderStyle, nActions);
+
+                return STATUS_OK;
+            }
+
+            status_t CocoaWindow::set_window_actions(size_t actions)
+            {
+                if (pCocoaWindow == NULL)
+                {
+                    nActions = actions;
+                    return STATUS_OK;
+                }
+
+                return (nActions != actions) ? commit_border_style(enBorderStyle, actions) : STATUS_OK;
+            }
+
+            status_t CocoaWindow::get_window_actions(size_t *actions)
+            {
+                if (actions == NULL)
+                    return STATUS_BAD_ARGUMENTS;
+                if (pCocoaWindow == NULL)
+                    return STATUS_BAD_STATE;
+
+                *actions    = nActions;
+                return STATUS_OK;
+            }
+
+            NSWindow* CocoaWindow::get_window_handler() 
+            {
+                return pCocoaWindow;
+            }
+
+            status_t CocoaWindow::resize(ssize_t width, ssize_t height) {
+                rectangle_t rect = sSize;
+                rect.nWidth = width;
+                rect.nHeight = height;
+                return set_geometry(&rect);
+            }
+
+            void CocoaWindow::apply_constraints(rectangle_t *dst, const rectangle_t *req)
+            {
+                *dst = *req;
+
+                if ((sConstraints.nMaxWidth >= 0) && (dst->nWidth > sConstraints.nMaxWidth))
+                    dst->nWidth = sConstraints.nMaxWidth;
+                if ((sConstraints.nMaxHeight >= 0) && (dst->nHeight > sConstraints.nMaxHeight))
+                    dst->nHeight = sConstraints.nMaxHeight;
+                if ((sConstraints.nMinWidth >= 0) && (dst->nWidth < sConstraints.nMinWidth))
+                    dst->nWidth = sConstraints.nMinWidth;
+                if ((sConstraints.nMinHeight >= 0) && (dst->nHeight < sConstraints.nMinHeight))
+                    dst->nHeight = sConstraints.nMinHeight;
+
+                lsp_trace("minW=%d, minH=%d, maxW=%d, maxH=%d", int(sConstraints.nMinWidth), int(sConstraints.nMinHeight), int(sConstraints.nMaxWidth), int(sConstraints.nMaxHeight));
+            }
+
+            status_t CocoaWindow::set_size_constraints(const size_limit_t *c)
+            {
+                sConstraints    = *c;
+                if (sConstraints.nMinWidth == 0)
+                    sConstraints.nMinWidth  = 1;
+                if (sConstraints.nMinHeight == 0)
+                    sConstraints.nMinHeight = 1;
+
+                // Apply constrains to Cocoa Window
+                if ([pCocoaView window] != NULL) {
+                    [[pCocoaView window] setContentMinSize:NSMakeSize(sConstraints.nMinWidth, sConstraints.nMinHeight)];
+                    [[pCocoaView window] setContentMaxSize:NSMakeSize(sConstraints.nMaxWidth, sConstraints.nMaxHeight)];
+                }
+                lsp_trace("constrained: l=%d, t=%d, w=%d, h=%d", int(sSize.nLeft), int(sSize.nTop), int(sSize.nWidth), int(sSize.nHeight));
+
+                return set_geometry(&sSize);
+            }
+
+            status_t CocoaWindow::get_size_constraints(size_limit_t *c)
+            {
+                *c = sConstraints;
+                return STATUS_OK;
+            }
+
+            status_t CocoaWindow::set_geometry(const rectangle_t *realize)
+            {
+                if (!pCocoaWindow)
+                    return STATUS_BAD_STATE;
+
+                rectangle_t old = sSize;
+                apply_constraints(&sSize, realize);
+
+                if ((old.nLeft == sSize.nLeft) &&
+                    (old.nTop == sSize.nTop) &&
+                    (old.nWidth == sSize.nWidth) &&
+                    (old.nHeight == sSize.nHeight))
+                        return STATUS_OK;
+                
+                return set_geometry_impl();
+            }
+
+            status_t CocoaWindow::set_geometry_impl()
+            {
+                if (![pCocoaView window])
+                    return STATUS_BAD_STATE;
+
+                // Calculate the frame rect from the content rect
+                lsp_trace("Resize / move window {nL=%d, nT=%d, nW=%d, nH=%d}\n", int(sSize.nLeft), int(sSize.nTop), int(sSize.nWidth), int(sSize.nHeight));
+
+                // TODO: handle case when window is resized in wrapper mode with some menu added from DAW
+                ssize_t screenWidth, screenHeight;
+                pCocoaDisplay->screen_size(0, &screenWidth, &screenHeight);
+                if ([pCocoaView window] != NULL) {
+                    //NSRect currentFrame = [[pCocoaView window] frame];
+                    NSRect contentRect = NSMakeRect(sSize.nLeft, screenHeight - sSize.nTop - sSize.nHeight + pCocoaDisplay->get_window_title_height(), sSize.nWidth, sSize.nHeight);
+                    NSRect frameRect = [[pCocoaView window] frameRectForContentRect:contentRect];
+                
+                    [[pCocoaView window] setFrame:frameRect display:YES animate:NO];             
+                    NSRect newContentBounds = [[pCocoaView window] contentView].bounds;
+                    [pCocoaView updateFrame:newContentBounds];
+
+                    if (pSurface != nullptr) {
+                        pSurface->resize(sSize.nWidth, sSize.nHeight);
+                    }
+                }
+                return STATUS_OK;
+            }
+
+            status_t CocoaWindow::show()
+            {
+                lsp_trace("Show window this=%p, window=%p, position={l=%d, t=%d, w=%d, h=%d} \n",
+                    this, "pCocoaWindow",
+                    int(sSize.nLeft), int(sSize.nTop), int(sSize.nWidth), int(sSize.nHeight));
+
+                if (pCocoaWindow == nil)
+                    return STATUS_BAD_STATE;
+
+                commit_border_style(enBorderStyle, nActions);
+                transientParent = nil;
+
+                if (bWrapper && pCocoaView && pCocoaWindow) {
+                    NSRect contentRect = [[pCocoaWindow contentView] bounds];
+                    [pCocoaView updateFrame:contentRect];
+
+                    [pCocoaView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
+                    if (pSurface != nullptr) {
+                        pSurface->resize(contentRect.size.width, contentRect.size.height);
+                    } 
+                } 
+
+                [pCocoaWindow makeKeyAndOrderFront:nil];
+
+                // Simulate missing show event
+                event_t ue;
+                init_event(&ue);
+                ue.nType       = UIE_SHOW;
+                handle_event(&ue);
+
+                return STATUS_OK;
+            }
+
+            status_t CocoaWindow::show(IWindow *over)
+            {
+                lsp_trace("Show window this=%p, window=%p, position={l=%d, t=%d, w=%d, h=%d}, over=%p \n",
+                    this, pCocoaWindow,
+                    int(sSize.nLeft), int(sSize.nTop), int(sSize.nWidth), int(sSize.nHeight),
+                    over);
+
+                if (pCocoaWindow == nil)
+                    return STATUS_BAD_STATE;
+
+                transientParent = nil;
+
+                if (over != nullptr)
+                {
+                    NSView *view = (__bridge NSView *)(over->handle());
+                    transientParent = [view window];
+                    [pCocoaWindow setLevel:NSFloatingWindowLevel];
+                    [pCocoaWindow setParentWindow:transientParent];
+                }
+
+                if (!has_parent())
+                {
+                    place_above(transientParent);
+                }
+
+                [pCocoaWindow makeKeyAndOrderFront:nil];
+
+                // Simulate missing show event
+                event_t ue;
+                init_event(&ue);
+                ue.nType       = UIE_SHOW;
+                handle_event(&ue);
+
+                return STATUS_OK;
+            }
+
+            void CocoaWindow::place_above(NSWindow *parent)
+            {
+                if (!pCocoaWindow || !parent)
+                    return;
+
+                [parent addChildWindow:pCocoaWindow ordered:NSWindowAbove];
+            }
+
+            status_t CocoaWindow::hide()
+            {
+                bVisible        = false;
+                if(pCocoaWindow != NULL) {
+                    [pCocoaWindow orderOut:nil];
+                }
+
+                return STATUS_OK;
+            }
+
+            bool CocoaWindow::is_visible()
+            {
+                return bVisible;
+            }
+
+            status_t CocoaWindow::commit_border_style(border_style_t bs, size_t wa)
+            {
+                if (pCocoaWindow == nil)
+                    return STATUS_BAD_STATE;
+
+                NSWindowStyleMask desiredStyle = get_ns_style(bs, wa);
+                [pCocoaWindow setStyleMask:desiredStyle];
+
+                return STATUS_OK;
+            }
+
+            status_t CocoaWindow::get_geometry(rectangle_t *realize)
+            {
+                if (realize == NULL)
+                    return STATUS_BAD_ARGUMENTS;
+
+                *realize            = sSize;
+
+                return STATUS_OK;
+            }
+
+            status_t CocoaWindow::get_absolute_geometry(rectangle_t *realize)
+            {
+                if (realize == nullptr)
+                    return STATUS_BAD_ARGUMENTS;
+                if (pCocoaWindow == nil)
+                    return STATUS_BAD_STATE;
+
+                NSRect frame = [pCocoaWindow frame]; // Frame in screen coordinates
+                NSRect cFrame = [pCocoaView frame];
+
+                ssize_t screenWidth, screenHeight;
+                pCocoaDisplay->screen_size(0, &screenWidth, &screenHeight);
+
+                realize->nLeft   = static_cast<ssize_t>(frame.origin.x);
+                realize->nTop    = static_cast<ssize_t>(screenHeight - frame.origin.y - cFrame.size.height + pCocoaDisplay->get_window_title_height() /*frame.origin.y*/);
+                realize->nWidth  = static_cast<ssize_t>(cFrame.size.width);
+                realize->nHeight = static_cast<ssize_t>(cFrame.size.height);
+
+                return STATUS_OK;
+            }
+
+            void *CocoaWindow::handle()
+            {   
+                return (__bridge void*)pCocoaView;
+            }
+
+            //TODO: we need to map all events, and handle create_surface
+            status_t CocoaWindow::handle_event(const event_t *ev)
+            {
+                // Additionally generated event
+                event_t gen;
+                init_event(&gen);
+                gen.nType = UIE_UNKNOWN;
+
+                IEventHandler *handler = pHandler;
+
+                switch (ev->nType)
+                {
+                    case UIE_SHOW:
+                    {
+                        bVisible = true;
+                        //if (bWrapper) break;
+
+                        if (pCocoaView == nullptr) break;
+
+                        drop_surface();
+                        pSurface = create_surface(pCocoaDisplay, pCocoaView, sSize.nWidth, sSize.nHeight);
+
+                        [pCocoaView startRedrawLoop];
+                        break;
+                    }
+
+                    case UIE_HIDE:
+                    {
+                        bVisible = false;
+                        //if (bWrapper) break;
+
+                        [pCocoaView stopRedrawLoop];
+                        drop_surface();
+                        break;
+                    }
+
+                    case UIE_REDRAW:
+                    {
+                        break;
+                    }
+
+                    case UIE_SIZE_REQUEST:
+                    {
+                        //TODO: Resize logic
+                        break;
+                    }
+
+                    case UIE_RESIZE:
+                    {
+                        lsp_trace("Resize event: {l=%d, t=%d, w=%d, h=%d}", int(ev->nLeft), int(ev->nTop), int(ev->nWidth), int(ev->nHeight));
+                        if (bWrapper) break;
+
+                        sSize.nLeft = ev->nLeft;
+                        sSize.nTop = ev->nTop;
+                        sSize.nWidth = ev->nWidth;
+                        sSize.nHeight = ev->nHeight;
+
+                        if (pSurface != nullptr)
+                            pSurface->resize(sSize.nWidth, sSize.nHeight);
+                        break;
+                    }
+
+                    case UIE_MOUSE_MOVE:
+                    {
+                        break;
+                    }
+
+                    case UIE_MOUSE_DOWN:
+                    {
+                        vBtnEvent[0] = vBtnEvent[1];
+                        vBtnEvent[1] = vBtnEvent[2];
+                        vBtnEvent[2].sDown = *ev;
+                        init_event(&vBtnEvent[2].sUp);
+                        break;
+                    }
+
+                    case UIE_MOUSE_UP:
+                    {
+                        vBtnEvent[2].sUp = *ev;
+
+                        if (check_click(&vBtnEvent[2]))
+                        {
+                            gen = *ev;
+                            gen.nType = UIE_MOUSE_CLICK;
+                            gen.nLeft = ev->nLeft;
+                            gen.nTop =  ev->nTop;
+
+                            if (check_double_click(&vBtnEvent[1], &vBtnEvent[2]))
+                            {
+                                gen.nType = UIE_MOUSE_DBL_CLICK;
+
+                                if (check_double_click(&vBtnEvent[0], &vBtnEvent[1]))
+                                    gen.nType = UIE_MOUSE_TRI_CLICK;
+                            }
+                        }
+                        break;
+                    }
+
+                    case UIE_STATE:
+                    {
+                        if (ev->nCode == enState)
+                            return STATUS_OK;
+
+                        enState = static_cast<window_state_t>(ev->nCode);
+                        lsp_trace("Window state changed to: %d", int(ev->nCode));
+                        break;
+                    }
+
+                    case UIE_CLOSE:
+                    {
+                        if (handler == nullptr)
+                        {
+                            this->destroy();
+                            delete this;
+                        }
+                        break;
+                    }
+
+                    default:
+                        break;
+                }
+
+                // Pass event to handler
+                if (handler != nullptr)
+                {
+                    handler->handle_event(ev);
+                    if (gen.nType != UIE_UNKNOWN)
+                        handler->handle_event(&gen);
+                }
+
+                return STATUS_OK;
+            }
+
+            bool CocoaWindow::check_click(const btn_event_t *ev)
+            {
+                if ((ev->sDown.nType != UIE_MOUSE_DOWN) || (ev->sUp.nType != UIE_MOUSE_UP))
+                    return false;
+                if (ev->sDown.nCode != ev->sUp.nCode)
+                    return false;
+                if ((ev->sUp.nTime < ev->sDown.nTime) || ((ev->sUp.nTime - ev->sDown.nTime) > 400))
+                    return false;
+
+                return (ev->sDown.nLeft == ev->sUp.nLeft) && (ev->sDown.nTop == ev->sUp.nTop);
+            }
+
+            bool CocoaWindow::check_double_click(const btn_event_t *pe, const btn_event_t *ev)
+            {
+                if (!check_click(pe))
+                    return false;
+
+                if (pe->sDown.nCode != ev->sDown.nCode)
+                    return false;
+                if ((ev->sUp.nTime < pe->sUp.nTime) || ((ev->sUp.nTime - pe->sUp.nTime) > 400))
+                    return false;
+
+                return (pe->sUp.nLeft == ev->sUp.nLeft) && (pe->sUp.nTop == ev->sUp.nTop);
+            }
+
+            ssize_t CocoaWindow::left()
+            {
+                return sSize.nLeft;
+            }
+
+            ssize_t CocoaWindow::top()
+            {
+                return sSize.nTop;
+            }
+
+            ssize_t CocoaWindow::width()
+            {
+                return sSize.nWidth;
+            }
+
+            ssize_t CocoaWindow::height()
+            {
+                return sSize.nHeight;
+            }
+
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* PLATFORM_MACOSX */
+
+
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/decode.mm 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/decode.mm
--- 1.2.21-5/modules/lsp-ws-lib/src/main/cocoa/decode.mm	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/cocoa/decode.mm	2025-08-26 18:15:42.570014511 +0000
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *           (C) 2025 Marvin Edeler <marvin.edeler@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 16 June 2025
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/common/types.h>
+
+#ifdef PLATFORM_MACOSX
+
+#include <lsp-plug.in/ws/cocoa/decode.h>
+#include <Cocoa/Cocoa.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace cocoa
+        {
+            mcb_t decode_mcb(const NSEvent* event) 
+            {
+                const NSUInteger mouseButton = [event buttonNumber]; // Get mouse button index
+                switch (mouseButton)
+                {
+                    case 0: return MCB_LEFT;
+                    case 1: return MCB_RIGHT;
+                    case 2: return MCB_MIDDLE;
+                    default: break;
+                }
+                return MCB_NONE;
+            }
+
+            // TODO: do we need to map scroll direction set by user? macos scrolls inverted by default.
+            mcd_t decode_mcd(const NSEvent* event) 
+            {
+                if ([event type] != NSEventTypeScrollWheel)
+                    return MCD_NONE;
+            
+                const CGFloat dx   = [event scrollingDeltaX];
+                const CGFloat dy   = [event scrollingDeltaY];
+                const CGFloat adx   = fabs(dx);
+            
+                if (fabs(dy) > adx)
+                    return (dy > 0) ? MCD_UP : MCD_DOWN;
+                else if (adx > 0)
+                    return (dx > 0) ? MCD_LEFT : MCD_RIGHT;
+            
+                return MCD_NONE;
+            }
+
+            size_t decode_modifier(const NSEvent* event)
+            {
+                const NSEventModifierFlags code = [event modifierFlags];
+                const NSInteger mouseButton = [event buttonNumber];
+                const NSEventType type = [event type];
+
+                size_t result = 0;
+                #define DC(mask, flag)  \
+                    if (code & mask) \
+                        result |= flag; \
+
+                DC(NSEventModifierFlagShift,    MCF_SHIFT);
+                DC(NSEventModifierFlagControl,  MCF_CONTROL);
+                DC(NSEventModifierFlagOption,   MCF_ALT);
+                DC(NSEventModifierFlagCommand,  MCF_META);
+                DC(NSEventModifierFlagCapsLock, MCF_LOCK);
+                //TODO: implement more flags?
+
+                #undef DC
+
+                switch (type)
+                {
+                    case NSEventTypeLeftMouseDown:
+                    case NSEventTypeRightMouseDown:
+                    case NSEventTypeOtherMouseDown:
+                    {
+                        switch (mouseButton)
+                        {
+                            case 0: result     |= MCF_LEFT; break;
+                            case 1: result     |= MCF_RIGHT; break;
+                            case 2: result     |= MCF_MIDDLE; break;
+                            default: break;
+                        }
+                        break;
+                    }
+                    default:
+                        break;
+                }
+                
+                return result;
+            }
+
+            code_t decode_keycode(unsigned long code)
+            {
+                return code;
+            }
+
+        } /* namespace cocoa */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* PLATFORM_MACOSX */
+
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/factory.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/factory.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/factory.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/factory.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -25,10 +25,11 @@
 
 #if defined(PLATFORM_WINDOWS)
     #include <private/win/WinDisplay.h>
+#elif defined(PLATFORM_MACOSX)
+    #include <private/cocoa/CocoaDisplay.h>
 #elif defined(USE_LIBX11)
     #include <private/x11/X11Display.h>
-#endif /* PLATFORM_WINDOWS, USE_LIBX11 */
-
+#endif /* PLATFORM_WINDOWS, PLATFORM_MACOSX, USE_LIBX11 */
 namespace lsp
 {
     namespace ws
@@ -43,6 +44,18 @@ namespace lsp
                 if (dpy != NULL)
                 {
                     status_t res = dpy->init(argc, argv);
+                    if (res == STATUS_OK)
+                        return dpy;
+                    free_display(dpy);
+                }
+            }
+        #elif defined(PLATFORM_MACOSX)
+            // Create MacOS / Cocoa display dummy
+            {
+                cocoa::CocoaDisplay *dpy = new cocoa::CocoaDisplay();
+                if (dpy != NULL)
+                {
+                    status_t res = dpy->init(argc, argv);
                     if (res == STATUS_OK)
                         return dpy;
                     free_display(dpy);
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/freetype/bitmap.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/freetype/bitmap.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/freetype/bitmap.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/freetype/bitmap.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -30,7 +30,11 @@
 
 #ifdef USE_LIBCAIRO
 
-#include <cairo/cairo.h>
+#ifdef PLATFORM_MACOSX  
+    #include <cairo.h>  
+#else  
+    #include <cairo/cairo.h>  
+#endif /* PLATFORM_MACOSX */  
 
 #endif /* USE_LIBCAIRO */
 
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Allocator.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Allocator.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Allocator.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Allocator.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 2 июн. 2025 г.
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <private/gl/Allocator.h>
+
+#ifdef LSP_PLUGINS_USE_OPENGL
+
+#include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/runtime/system.h>
+
+#include <private/gl/Stats.h>
+#include <private/gl/Texture.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace gl
+        {
+            Allocator::Allocator()
+            {
+                pFree                   = NULL;
+            }
+
+            Allocator::~Allocator()
+            {
+                clear();
+            }
+
+            void Allocator::clear()
+            {
+                // Destroy all released draws
+                for (batch_draw_t *draw = pFree; draw != NULL; )
+                {
+                    batch_draw_t *next  = draw->next;
+                    destroy_draw(draw);
+                    draw                = next;
+                }
+
+                // Cleanup pointer
+                pFree           = NULL;
+
+                OPENGL_OUTPUT_STATS(true);
+            }
+
+            batch_draw_t *Allocator::alloc_draw(const batch_header_t & header)
+            {
+                // Check if we can reuse some draw batch
+                batch_draw_t *draw      = pFree;
+                if (draw != NULL)
+                {
+                    OPENGL_INC_STATS(draw_acquire);
+                    pFree                   = draw->next;
+
+                    draw->header            = header;
+                    draw->vertices.count    = 0;
+                    draw->indices.count     = 0;
+                    draw->next              = NULL;
+                    draw->ttl               = 0;
+
+                    safe_acquire(draw->header.pTexture);
+
+                    return draw;
+                }
+
+                // Allocate new draw element
+                draw                    = static_cast<batch_draw_t *>(malloc(sizeof(batch_draw_t)));
+                if (draw == NULL)
+                    return NULL;
+
+                OPENGL_INC_STATS(draw_alloc);
+
+                draw->header            = header;
+                draw->vertices.v        = NULL;
+                draw->vertices.count    = 0;
+                draw->vertices.capacity = 0x40;
+
+                draw->indices.data      = NULL;
+                draw->indices.count     = 0;
+                draw->indices.capacity  = 0x100;
+                draw->indices.szof      = sizeof(uint8_t);
+
+                draw->next              = NULL;
+                draw->ttl               = 0;
+
+                safe_acquire(draw->header.pTexture);
+
+                lsp_finally { destroy_draw(draw); };
+
+                // Initialize new draw batch
+                draw->vertices.v        = static_cast<vertex_t *>(malloc(sizeof(vertex_t) * draw->vertices.capacity));
+                if (draw->vertices.v == NULL)
+                    return NULL;
+
+                OPENGL_INC_STATS(vertex_alloc);
+
+                draw->indices.data      = malloc(sizeof(uint8_t) * draw->indices.capacity);
+                if (draw->indices.data == NULL)
+                    return NULL;
+
+                OPENGL_INC_STATS(index_alloc);
+
+                return release_ptr(draw);
+            }
+
+            void Allocator::release_draw(batch_draw_t *draw)
+            {
+                if (draw == NULL)
+                    return;
+
+                OPENGL_INC_STATS(draw_release);
+
+                safe_release(draw->header.pTexture);
+
+                draw->vertices.count    = 0;
+                draw->indices.count     = 0;
+                draw->next              = pFree;
+                pFree                   = draw;
+            }
+
+            void Allocator::destroy_draw(batch_draw_t *draw)
+            {
+                if (draw == NULL)
+                    return;
+
+                safe_release(draw->header.pTexture);
+
+                if (draw->vertices.v != NULL)
+                {
+                    free(draw->vertices.v);
+                    draw->vertices.v        = NULL;
+                }
+                if (draw->indices.data != NULL)
+                {
+                    free(draw->indices.data);
+                    draw->indices.data      = NULL;
+                }
+
+                free(draw);
+
+                OPENGL_INC_STATS(draw_free);
+            }
+
+            void Allocator::perform_gc()
+            {
+                // Destroy all outdated draws
+                for (batch_draw_t **pdraw = &pFree; *pdraw != NULL; )
+                {
+                    batch_draw_t * const draw = *pdraw;
+                    if ((draw->ttl++) >= 16)
+                    {
+                        *pdraw          = draw->next;
+                        destroy_draw(draw);
+                    }
+                    else
+                        pdraw           = &draw->next;
+                }
+            }
+
+        } /* namespace gl */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* LSP_PLUGINS_USE_OPENGL */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Batch.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Batch.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Batch.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Batch.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -19,11 +19,15 @@
  * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
  */
 
-#include <private/gl/Batch.h>
+#include <private/gl/defs.h>
 
 #ifdef LSP_PLUGINS_USE_OPENGL
 
+#include <private/gl/Batch.h>
+#include <private/gl/Stats.h>
+
 #include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/runtime/system.h>
 
 #include <stddef.h>
 
@@ -35,9 +39,12 @@ namespace lsp
         {
             inline bool Batch::header_mismatch(const batch_header_t & a, const batch_header_t & b)
             {
-                return (a.enProgram != b.enProgram) ||
-                       (a.nFlags != b.nFlags) ||
-                       (a.pTexture != b.pTexture);
+                return
+                    (a.enProgram != b.enProgram) ||
+                    (a.nLeft != b.nLeft) ||
+                    (a.nTop != b.nTop) ||
+                    (a.nFlags != b.nFlags) ||
+                    (a.pTexture != b.pTexture);
             }
 
             template<class D, class S>
@@ -47,43 +54,36 @@ namespace lsp
                     dst[i]      = src[i];
             }
 
-            void Batch::destroy(draw_t *draw)
-            {
-                if (draw == NULL)
-                    return;
-
-                safe_release(draw->header.pTexture);
-
-                if (draw->vertices.v != NULL)
-                {
-                    free(draw->vertices.v);
-                    draw->vertices.v        = NULL;
-                }
-                if (draw->indices.data != NULL)
-                {
-                    free(draw->indices.data);
-                    draw->indices.data      = NULL;
-                }
-
-                free(draw);
-            }
-
-            Batch::Batch()
+            Batch::Batch(Allocator *alloc)
             {
                 vCommands.data      = NULL;
                 vCommands.count     = 0;
                 vCommands.capacity  = 0;
                 pCurrent            = NULL;
+                pAllocator          = alloc;
+
+                OPENGL_INC_STATS(batch_alloc);
             }
 
             Batch::~Batch()
             {
-                clear();
+                OPENGL_INC_STATS(batch_free);
+
+                // Destroy all acquired draws
+                for (size_t i=0, n=vBatches.size(); i < n; ++i)
+                    pAllocator->release_draw(vBatches.uget(i));
+
+                // Destroy command buffer
                 if (vCommands.data != NULL)
                 {
                     free(vCommands.data);
                     vCommands.data      = NULL;
+                    vCommands.count     = 0;
+                    vCommands.capacity  = 0;
                 }
+
+                // Clear pointer to current batch
+                pCurrent            = NULL;
             }
 
             status_t Batch::init()
@@ -97,6 +97,8 @@ namespace lsp
                 if (vCommands.data == NULL)
                     return STATUS_NO_MEM;
 
+                OPENGL_INC_STATS(cmd_alloc);
+
                 bzero(vCommands.data, vCommands.capacity * sizeof(float));
 
                 return STATUS_OK;
@@ -104,34 +106,14 @@ namespace lsp
 
             status_t Batch::begin(const batch_header_t & header)
             {
-                draw_t *draw            = vBatches.last();
+                batch_draw_t *draw      = vBatches.last();
                 if ((draw == NULL) || (header_mismatch(draw->header, header)))
                 {
-                    // Create new draw batch
-                    draw                    = static_cast<draw_t *>(malloc(sizeof(draw_t)));
+                    // Allocate new draw batch
+                    draw                    = pAllocator->alloc_draw(header);
                     if (draw == NULL)
                         return STATUS_NO_MEM;
-                    draw->header            = header;
-                    draw->vertices.v        = NULL;
-                    draw->vertices.count    = 0;
-                    draw->vertices.capacity = 0x40;
-
-                    safe_acquire(draw->header.pTexture);
-
-                    draw->indices.data      = NULL;
-                    draw->indices.count     = 0;
-                    draw->indices.capacity  = 0x100;
-                    draw->indices.szof      = sizeof(uint8_t);
-
-                    lsp_finally { destroy(draw); };
-
-                    // Initialize new draw batch
-                    draw->vertices.v        = static_cast<vertex_t *>(malloc(sizeof(vertex_t) * draw->vertices.capacity));
-                    if (draw->vertices.v == NULL)
-                        return STATUS_NO_MEM;
-                    draw->indices.data      = malloc(sizeof(uint8_t) * draw->indices.capacity);
-                    if (draw->indices.data == NULL)
-                        return STATUS_NO_MEM;
+                    lsp_finally { pAllocator->release_draw(draw); };
 
                     // Add new batch to list
                     if (!vBatches.add(draw))
@@ -152,9 +134,9 @@ namespace lsp
                 // Destroy all batches except current
                 for (size_t i=0, n=vBatches.size(); i < n; ++i)
                 {
-                    draw_t *draw = vBatches.uget(i);
+                    batch_draw_t *draw = vBatches.uget(i);
                     if (draw != pCurrent)
-                        destroy(draw);
+                        pAllocator->release_draw(draw);
                 }
                 vBatches.clear();
                 vCommands.count     = 0;
@@ -164,7 +146,7 @@ namespace lsp
                 {
                     if (!vBatches.add(pCurrent))
                     {
-                        destroy(pCurrent);
+                        pAllocator->release_draw(pCurrent);
                         pCurrent        = NULL;
                     }
                 }
@@ -181,7 +163,7 @@ namespace lsp
                     if (!(pCurrent->header.nFlags & BATCH_IMPORTANT_FLAGS))
                     {
                         vBatches.pop();
-                        destroy(pCurrent);
+                        pAllocator->release_draw(pCurrent);
                     }
                 }
 
@@ -276,11 +258,12 @@ namespace lsp
 
                 for (size_t i=0, n=vBatches.size(); i<n; ++i)
                 {
-                    draw_t *draw        = vBatches.uget(i);
+                    batch_draw_t *draw  = vBatches.uget(i);
                     const size_t flags  = draw->header.nFlags;
+                    const gl::program_t program = draw->header.enProgram;
 
                     // Get the program
-                    status_t res = ctx->program(&program_id, draw->header.enProgram);
+                    status_t res = ctx->program(&program_id, program);
                     if (res != STATUS_OK)
                         return res;
 
@@ -292,6 +275,11 @@ namespace lsp
                         bind_uniforms(vtbl, program_id, uniforms);
                     }
 
+                    // Origin
+                    const GLint u_origin = vtbl->glGetUniformLocation(program_id, "u_origin");
+                    if (u_origin >= 0)
+                        vtbl->glUniform2f(u_origin, draw->header.nLeft, draw->header.nTop);
+
                     // Command buffer
                     const GLint u_commands = vtbl->glGetUniformLocation(program_id, "u_commands");
                     if (u_commands >= 0)
@@ -311,19 +299,22 @@ namespace lsp
                     {
                         vtbl->glUniform1i(u_texture, 1);
 
-                        mask_texture = draw->header.pTexture;
-                        if ((mask_texture != NULL) && (mask_texture->valid()))
+                        mask_texture    = draw->header.pTexture;
+                        if ((mask_texture != NULL) && (mask_texture->valid()) && (mask_texture->multisampling() <= 0))
                             mask_texture->bind(GL_TEXTURE1);
                         else
+                        {
+                            mask_texture    = NULL;
                             ctx->bind_empty_texture(GL_TEXTURE1, 0);
+                        }
                     }
                     lsp_finally {
                         if (u_texture >= 0)
                         {
-                            if ((mask_texture != NULL) && (mask_texture->valid()))
-                                mask_texture->unbind();
+                            if (mask_texture != NULL)
+                                mask_texture->unbind(GL_TEXTURE1);
                             else
-                                ctx->unbind_empty_texture(GL_TEXTURE1, 0);
+                                ctx->unbind_empty_texture(GL_TEXTURE1, false);
                         }
                     };
 
@@ -334,19 +325,22 @@ namespace lsp
                     {
                         vtbl->glUniform1i(u_ms_texture, 2);
 
-                        ms_mask_texture = draw->header.pTexture;
-                        if ((ms_mask_texture != NULL) && (ms_mask_texture->valid()))
+                        ms_mask_texture     = draw->header.pTexture;
+                        if ((ms_mask_texture != NULL) && (ms_mask_texture->valid()) && (ms_mask_texture->multisampling() > 0))
                             ms_mask_texture->bind(GL_TEXTURE2);
                         else
+                        {
+                            ms_mask_texture     = NULL;
                             ctx->bind_empty_texture(GL_TEXTURE2, ctx->multisample());
+                        }
                     }
                     lsp_finally {
                         if (u_ms_texture >= 0)
                         {
-                            if ((ms_mask_texture != NULL) && (ms_mask_texture->valid()))
-                                ms_mask_texture->unbind();
+                            if (ms_mask_texture != NULL)
+                                ms_mask_texture->unbind(GL_TEXTURE2);
                             else
-                                ctx->unbind_empty_texture(GL_TEXTURE2, ctx->multisample());
+                                ctx->unbind_empty_texture(GL_TEXTURE2, true);
                         }
                     };
 
@@ -443,9 +437,9 @@ namespace lsp
                     lsp_finally { vtbl->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_NONE); };
 
                     // Bind vertex attributes
-                    const GLint a_vertex = vtbl->glGetAttribLocation(program_id, "a_vertex");
-                    const GLint a_texcoord = vtbl->glGetAttribLocation(program_id, "a_texcoord");
-                    const GLint a_command = vtbl->glGetAttribLocation(program_id, "a_command");
+                    const GLint a_vertex = ctx->attribute_location(program, gl::VERTEX_COORDS);
+                    const GLint a_texcoord = ctx->attribute_location(program, gl::TEXTURE_COORDS);
+                    const GLint a_command = ctx->attribute_location(program, gl::COMMAND_BUFFER);
 
                     // position attribute
                     if (a_vertex >= 0)
@@ -501,7 +495,7 @@ namespace lsp
                 );
 
                 // Check if we need to resize the buffer
-                vbuffer_t & buf = pCurrent->vertices;
+                batch_vbuffer_t & buf = pCurrent->vertices;
                 const size_t new_count = buf.count + count;
                 if (new_count > buf.capacity)
                 {
@@ -513,6 +507,9 @@ namespace lsp
                     vertex_t *ptr           = static_cast<vertex_t *>(realloc(buf.v, sizeof(vertex_t) * new_cap));
                     if (ptr == NULL)
                         return -STATUS_NO_MEM;
+
+                    OPENGL_INC_STATS(vertex_realloc);
+
                     buf.v                   = ptr;
                     buf.capacity            = new_cap;
                 }
@@ -529,7 +526,7 @@ namespace lsp
                 if (index < 0)
                     return index;
 
-                vbuffer_t & buf         = pCurrent->vertices;
+                batch_vbuffer_t & buf   = pCurrent->vertices;
                 vertex_t *v             = &buf.v[index];
                 v->x                    = x;
                 v->y                    = y;
@@ -546,7 +543,7 @@ namespace lsp
                 if (index < 0)
                     return index;
 
-                vbuffer_t & buf         = pCurrent->vertices;
+                batch_vbuffer_t & buf   = pCurrent->vertices;
                 vertex_t *v             = &buf.v[index];
                 v->x                    = x;
                 v->y                    = y;
@@ -563,10 +560,16 @@ namespace lsp
                 return (index >= 0) ? &pCurrent->vertices.v[index] : NULL;
             }
 
+            void Batch::release_vertices(size_t count)
+            {
+                batch_vbuffer_t & buf = pCurrent->vertices;
+                buf.count   -= lsp_min(count, buf.count);
+            }
+
             ssize_t Batch::alloc_indices(size_t count, uint32_t max_index)
             {
                 // Check indices
-                ibuffer_t & buf         = pCurrent->indices;
+                batch_ibuffer_t & buf   = pCurrent->indices;
                 const size_t new_size   = buf.count + count;
                 const size_t szof       =
                     (max_index > UINT16_MAX) ? sizeof(uint32_t) :
@@ -577,7 +580,9 @@ namespace lsp
                 if ((new_size > buf.capacity) || (szof > buf.szof))
                 {
                     // Check if we need to widen the indices
-                    const size_t new_cap    = (new_size > buf.capacity) ? buf.capacity << 1 : buf.capacity;
+                    size_t new_cap          = buf.capacity;
+                    while (new_cap < new_size)
+                        new_cap               <<= 1;
                     void *data              = NULL;
 
                     if (szof > buf.szof)
@@ -585,6 +590,8 @@ namespace lsp
                         if ((data = malloc(new_cap * szof)) == NULL)
                             return -STATUS_NO_MEM;
 
+                        OPENGL_INC_STATS(index_alloc);
+
                         // Perform widening
                         if (szof > sizeof(uint16_t))
                         {
@@ -607,6 +614,8 @@ namespace lsp
                         // We can perform simple realloc operation
                         if ((data = realloc(buf.data, new_cap * buf.szof)) == NULL)
                             return -STATUS_NO_MEM;
+
+                        OPENGL_INC_STATS(index_realloc);
                     }
 
                     // Store new pointer
@@ -627,7 +636,7 @@ namespace lsp
                 if (index < 0)
                     return index;
 
-                ibuffer_t & buf     = pCurrent->indices;
+                batch_ibuffer_t & buf   = pCurrent->indices;
                 if (buf.szof > sizeof(uint16_t))
                 {
                     buf.u32[index]      = a;
@@ -656,7 +665,7 @@ namespace lsp
                 if (index < 0)
                     return index;
 
-                ibuffer_t & buf     = pCurrent->indices;
+                batch_ibuffer_t & buf   = pCurrent->indices;
                 if (buf.szof > sizeof(uint16_t))
                 {
                     buf.u32[index]      = a;
@@ -679,6 +688,113 @@ namespace lsp
                 return index;
             }
 
+            ssize_t Batch::htriangle_fan(uint32_t v0i, uint32_t count)
+            {
+                const ssize_t index     = alloc_indices(count * 3, v0i + count + 2);
+                if (index < 0)
+                    return index;
+
+                batch_ibuffer_t & buf   = pCurrent->indices;
+                uint32_t v1i            = v0i + 1;
+                if (buf.szof > sizeof(uint16_t))
+                {
+                    uint32_t *dst   = &buf.u32[index];
+                    for (size_t i=0; i<count; ++i, dst += 3)
+                    {
+                        dst[0]          = v0i;
+                        dst[1]          = v1i;
+                        dst[2]          = ++v1i;
+                    }
+                }
+                else if (buf.szof > sizeof(uint8_t))
+                {
+                    uint16_t *dst   = &buf.u16[index];
+                    for (size_t i=0; i<count; ++i, dst += 3)
+                    {
+                        dst[0]          = uint16_t(v0i);
+                        dst[1]          = uint16_t(v1i);
+                        dst[2]          = uint16_t(++v1i);
+                    }
+                }
+                else
+                {
+                    uint8_t *dst    = &buf.u8[index];
+                    for (size_t i=0; i<count; ++i, dst += 3)
+                    {
+                        dst[0]          = uint8_t(v0i);
+                        dst[1]          = uint8_t(v1i);
+                        dst[2]          = uint8_t(++v1i);
+                    }
+                }
+
+                return index;
+            }
+
+            ssize_t Batch::hrectangle_fan(uint32_t v0i, uint32_t count)
+            {
+                const ssize_t index     = alloc_indices(count * 6, v0i + count*2 + 1);
+                if (index < 0)
+                    return index;
+
+                batch_ibuffer_t & buf   = pCurrent->indices;
+                if (buf.szof > sizeof(uint16_t))
+                {
+                    uint32_t *dst   = &buf.u32[index];
+                    for (size_t i=0; i<count; ++i, dst += 6)
+                    {
+                        const uint32_t p1   = v0i + 1;
+                        const uint32_t p2   = v0i + 2;
+
+                        dst[0]          = v0i;
+                        dst[1]          = p1;
+                        dst[2]          = p2;
+                        dst[3]          = p2;
+                        dst[4]          = p1;
+                        dst[5]          = v0i + 3;
+
+                        v0i            += 2;
+                    }
+                }
+                else if (buf.szof > sizeof(uint8_t))
+                {
+                    uint16_t *dst   = &buf.u16[index];
+                    for (size_t i=0; i<count; ++i, dst += 6)
+                    {
+                        const uint16_t p1   = uint16_t(v0i + 1);
+                        const uint16_t p2   = uint16_t(v0i + 2);
+
+                        dst[0]          = uint16_t(v0i);
+                        dst[1]          = p1;
+                        dst[2]          = p2;
+                        dst[3]          = p2;
+                        dst[4]          = p1;
+                        dst[5]          = uint16_t(v0i + 3);
+
+                        v0i            += 2;
+                    }
+                }
+                else
+                {
+                    uint8_t *dst    = &buf.u8[index];
+                    for (size_t i=0; i<count; ++i, dst += 6)
+                    {
+                        const uint8_t p1    = uint8_t(v0i + 1);
+                        const uint8_t p2    = uint8_t(v0i + 2);
+
+                        dst[0]          = uint8_t(v0i);
+                        dst[1]          = p1;
+                        dst[2]          = p2;
+                        dst[3]          = p2;
+                        dst[4]          = p1;
+                        dst[5]          = uint8_t(v0i + 3);
+
+                        v0i            += 2;
+                    }
+                }
+
+                return index;
+            }
+
             ssize_t Batch::rectangle(uint32_t a, uint32_t b, uint32_t c, uint32_t d)
             {
                 const ssize_t index     = alloc_indices(6, lsp_max(a, b, c, d));
@@ -686,7 +802,7 @@ namespace lsp
                     return index;
 
                 // Append vertex indices
-                ibuffer_t & buf     = pCurrent->indices;
+                batch_ibuffer_t & buf   = pCurrent->indices;
                 if (buf.szof > sizeof(uint16_t))
                 {
                     buf.u32[index]      = a;
@@ -725,7 +841,7 @@ namespace lsp
                     return index;
 
                 // Append vertex indices
-                ibuffer_t & buf     = pCurrent->indices;
+                batch_ibuffer_t & buf   = pCurrent->indices;
                 if (buf.szof > sizeof(uint16_t))
                 {
                     buf.u32[index]      = a;
@@ -757,6 +873,38 @@ namespace lsp
                 return index;
             }
 
+            void *Batch::add_indices(size_t count, size_t max_value)
+            {
+                const ssize_t index     = alloc_indices(count, max_value);
+                if (index < 0)
+                    return NULL;
+
+                batch_ibuffer_t & buf   = pCurrent->indices;
+                if (buf.szof > sizeof(uint16_t))
+                    return &buf.u32[index];
+                else if (buf.szof > sizeof(uint8_t))
+                    return &buf.u16[index];
+
+                return &buf.u8[index];
+            }
+
+            void Batch::release_indices(size_t count)
+            {
+                batch_ibuffer_t & buf   = pCurrent->indices;
+                buf.count              -= lsp_min(count, buf.count);
+            };
+
+            index_format_t Batch::index_format() const
+            {
+                const batch_ibuffer_t & buf   = pCurrent->indices;
+                if (buf.szof > sizeof(uint16_t))
+                    return INDEX_FMT_U32;
+                else if (buf.szof > sizeof(uint8_t))
+                    return INDEX_FMT_U16;
+
+                return INDEX_FMT_U8;
+            }
+
             ssize_t Batch::command(float **data, size_t count)
             {
                 IF_DEBUG(
@@ -767,7 +915,7 @@ namespace lsp
                 const size_t to_alloc   = (count + 3) & (~size_t(3));
 
                 // Check if we need to resize the buffer
-                cbuffer_t & buf     = vCommands;
+                batch_cbuffer_t & buf   = vCommands;
                 if ((buf.count + to_alloc) > buf.capacity)
                 {
                     const size_t new_cap    = buf.capacity << 2;
@@ -777,6 +925,8 @@ namespace lsp
 
                     bzero(&ptr[buf.capacity], (new_cap - buf.capacity) * sizeof(float));
 
+                    OPENGL_INC_STATS(cmd_realloc);
+
                     buf.data                = ptr;
                     buf.size              <<= 1;
                     buf.capacity            = new_cap;
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/gl/IContext.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/IContext.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/gl/IContext.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/IContext.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -86,6 +86,8 @@ namespace lsp
                     free(const_cast<vtbl_t *>(pVtbl));
                     pVtbl           = NULL;
                 }
+
+                OPENGL_OUTPUT_STATS(true);
             }
 
             uatomic_t IContext::reference_up()
@@ -155,6 +157,8 @@ namespace lsp
 
             void IContext::perform_gc()
             {
+                sAllocator.perform_gc();
+
                 if (vGcFramebuffers.size() > 0)
                 {
                     trace_array("glDeleteFramebuffers", vGcFramebuffers);
@@ -177,6 +181,9 @@ namespace lsp
 
             void IContext::cleanup()
             {
+                // Cleanup all allocations
+                sAllocator.clear();
+
                 // Flush GC buffers as they are not needed
                 vGcFramebuffers.flush();
                 vGcRenderbuffers.flush();
@@ -244,6 +251,11 @@ namespace lsp
                 return STATUS_NOT_IMPLEMENTED;
             }
 
+            GLint IContext::attribute_location(program_t program, attribute_t attribute)
+            {
+                return -STATUS_NOT_FOUND;
+            }
+
             uint32_t IContext::multisample() const
             {
                 return 0;
@@ -401,25 +413,31 @@ namespace lsp
                         return STATUS_NO_MEM;
                 }
 
-                // Initialize and bind texture
+                // Activate texture unit
                 pVtbl->glActiveTexture(GL_TEXTURE0);
-                pVtbl->glBindTexture(GL_TEXTURE_2D, nCommandsId);
 
                 // Load full texture if size has changed or partial texture if size didn't change
                 if (nCommandsSize != size)
                 {
+                    pVtbl->glBindTexture(GL_TEXTURE_2D, nCommandsId);
                     pVtbl->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, size, size, 0, GL_RGBA, GL_FLOAT, buf);
+                    pVtbl->glBindTexture(GL_TEXTURE_2D, GL_NONE);
                     nCommandsSize   = size;
                 }
                 else
                 {
                     const size_t stride = size * 4;
                     const size_t rows = (length + stride - 1) / stride;
-                    pVtbl->glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, size, rows, GL_RGBA, GL_FLOAT, buf);
-                }
 
-                // Unbind texture
-                pVtbl->glBindTexture(GL_TEXTURE_2D, 0);
+                    if (pVtbl->glTextureSubImage2D)
+                        pVtbl->glTextureSubImage2D(nCommandsId, 0, 0, 0, size, rows, GL_RGBA, GL_FLOAT, buf);
+                    else
+                    {
+                        pVtbl->glBindTexture(GL_TEXTURE_2D, nCommandsId);
+                        pVtbl->glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, size, rows, GL_RGBA, GL_FLOAT, buf);
+                        pVtbl->glBindTexture(GL_TEXTURE_2D, GL_NONE);
+                    }
+                }
 
                 return STATUS_OK;
             }
@@ -449,7 +467,7 @@ namespace lsp
 
                 // Initialize and bind texture
                 pVtbl->glActiveTexture(nCommandsProcessor);
-                pVtbl->glBindTexture(GL_TEXTURE_2D, 0);
+                pVtbl->glBindTexture(GL_TEXTURE_2D, GL_NONE);
                 nCommandsProcessor          = GL_NONE;
             }
 
@@ -507,9 +525,9 @@ namespace lsp
                 return STATUS_OK;
             }
 
-            void IContext::unbind_empty_texture(GLuint processor_id, size_t samples)
+            void IContext::unbind_empty_texture(GLuint processor_id, bool multisample)
             {
-                const GLuint tex_kind = (samples > 0) ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;
+                const GLuint tex_kind = (multisample) ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;
                 pVtbl->glBindTexture(tex_kind, GL_NONE);
             }
 
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Stats.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Stats.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Stats.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Stats.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 2 июн. 2025 г.
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <private/gl/Stats.h>
+
+#ifdef TRACE_OPENGL_STATS
+
+#include <lsp-plug.in/runtime/system.h>
+
+namespace lsp
+{
+    namespace ws
+    {
+        namespace gl
+        {
+            static system::time_millis_t stat_time = 0;
+            gl_stats_t gl_stats;
+
+            gl_stats_t::gl_stats_t()
+            {
+                surface_alloc   = 0;
+                surface_free    = 0;
+                batch_alloc     = 0;
+                batch_free      = 0;
+                draw_alloc      = 0;
+                draw_free       = 0;
+                draw_acquire    = 0;
+                draw_release    = 0;
+                cmd_alloc       = 0;
+                cmd_realloc     = 0;
+                vertex_alloc    = 0;
+                vertex_realloc  = 0;
+                index_alloc     = 0;
+                index_realloc   = 0;
+            }
+
+            void output_stats(bool immediate)
+            {
+                const system::time_millis_t ctime = system::get_time_millis();
+                if ((immediate) || ((ctime - stat_time) >= 1000))
+                {
+                    lsp_trace(
+                        "Batch allocation statistics: "
+                        "batches=[alloc=%d, free=%d], "
+                        "draws=[alloc=%d, free=%d, acq=%d, rel=%d], "
+                        "indices=[alloc=%d, realloc=%d], "
+                        "vertices=[alloc=%d, realloc=%d], "
+                        "commands=[alloc=%d, realloc=%d], "
+                        "surface=[alloc=%d, free=%d]",
+                        int(gl_stats.batch_alloc), int(gl_stats.batch_free),
+                        int(gl_stats.draw_alloc), int(gl_stats.draw_free), int(gl_stats.draw_acquire), int(gl_stats.draw_release),
+                        int(gl_stats.index_alloc), int(gl_stats.index_realloc),
+                        int(gl_stats.vertex_alloc), int(gl_stats.vertex_realloc),
+                        int(gl_stats.cmd_alloc), int(gl_stats.cmd_realloc),
+                        int(gl_stats.surface_alloc), int(gl_stats.surface_free));
+                    stat_time       = ctime;
+                }
+            }
+
+        } /* namespace gl */
+    } /* namespace ws */
+} /* namespace lsp */
+
+#endif /* TRACE_OPENGL_STATS */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Surface.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Surface.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Surface.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Surface.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -33,6 +33,7 @@
 #include <private/freetype/FontManager.h>
 #include <private/gl/Batch.h>
 #include <private/gl/Gradient.h>
+#include <private/gl/Stats.h>
 #include <private/gl/Surface.h>
 #include <private/x11/X11Display.h>
 
@@ -52,11 +53,29 @@ namespace lsp
 
             #define ADD_VERTEX(v, v_ci, v_x, v_y)  ADD_TVERTEX(v, v_ci, v_x, v_y, 0.0f, 0.0f)
 
+            #define ADD_HRECTANGLE(v, a, b, c, d) \
+                v[0]        = a; \
+                v[1]        = b; \
+                v[2]        = c; \
+                v[3]        = a; \
+                v[4]        = c; \
+                v[5]        = d; \
+                v += 6;
+
+            #define ADD_HTRIANGLE(v, a, b, c) \
+                v[0]        = a; \
+                v[1]        = b; \
+                v[2]        = c; \
+                v += 3;
+
             constexpr float k_color = 1.0f / 255.0f;
 
             Surface::Surface(IDisplay *display, gl::IContext *ctx, size_t width, size_t height):
-                ISurface(width, height, ST_OPENGL)
+                ISurface(width, height, ST_OPENGL),
+                sBatch(ctx->allocator())
             {
+                OPENGL_INC_STATS(surface_alloc);
+
                 pDisplay        = display;
                 pContext        = safe_acquire(ctx);
                 pTexture        = NULL;
@@ -70,6 +89,8 @@ namespace lsp
 
                 bzero(vMatrix, sizeof(float) * 16);
                 bzero(vClips, sizeof(clip_rect_t) * MAX_CLIPS);
+                sOrigin.left    = 0;
+                sOrigin.top     = 0;
 
                 sBatch.init();
                 sync_matrix();
@@ -78,8 +99,11 @@ namespace lsp
             }
 
             Surface::Surface(gl::IContext *ctx, gl::TextAllocator *text, size_t width, size_t height):
-                ISurface(width, height, ST_OPENGL)
+                ISurface(width, height, ST_OPENGL),
+                sBatch(ctx->allocator())
             {
+                OPENGL_INC_STATS(surface_alloc);
+
                 pDisplay        = NULL;
                 pContext        = safe_acquire(ctx);
                 pTexture        = NULL;
@@ -93,6 +117,8 @@ namespace lsp
 
                 bzero(vMatrix, sizeof(float) * 16);
                 bzero(vClips, sizeof(clip_rect_t) * MAX_CLIPS);
+                sOrigin.left    = 0;
+                sOrigin.top     = 0;
 
                 sBatch.init();
                 sync_matrix();
@@ -112,10 +138,7 @@ namespace lsp
             {
                 Surface *s = create_nested(pText, width, height);
                 if (s != NULL)
-                {
                     s->pDisplay     = pDisplay;
-                    s->pContext     = safe_acquire(pContext);
-                }
 
                 return s;
             }
@@ -157,7 +180,11 @@ namespace lsp
 
             Surface::~Surface()
             {
+                OPENGL_INC_STATS(surface_free);
+
                 do_destroy();
+
+                OPENGL_OUTPUT_STATS(true);
             }
 
             void Surface::destroy()
@@ -210,10 +237,10 @@ namespace lsp
 
             inline float *Surface::serialize_texture(float *dst, const gl::Texture *t)
             {
-                dst[0]      = float(t->width());
-                dst[1]      = float(t->height());
-                dst[2]      = t->format();
-                dst[3]      = t->multisampling();
+                dst[0]          = float(t->width());
+                dst[1]          = float(t->height());
+                dst[2]          = t->format();
+                dst[3]          = t->multisampling();
 
                 return dst + 4;
             }
@@ -262,10 +289,10 @@ namespace lsp
 
             inline void Surface::limit_rect(clip_rect_t & rect)
             {
-                rect.left           = lsp_max(rect.left, 0.0f);
-                rect.top            = lsp_max(rect.top, 0.0f);
-                rect.right          = lsp_min(rect.right, float(nWidth));
-                rect.bottom         = lsp_min(rect.bottom, float(nHeight));
+                rect.left           = lsp_max(rect.left, -sOrigin.left);
+                rect.top            = lsp_max(rect.top, -sOrigin.top);
+                rect.right          = lsp_min(rect.right, float(nWidth) - sOrigin.left);
+                rect.bottom         = lsp_min(rect.bottom, float(nHeight) - sOrigin.top);
             }
 
             ssize_t Surface::start_batch(gl::program_t program, uint32_t flags, float r, float g, float b, float a)
@@ -277,8 +304,10 @@ namespace lsp
                 status_t res = sBatch.begin(
                     gl::batch_header_t {
                         program,
+                        sOrigin.left,
+                        sOrigin.top,
                         enrich_flags(flags),
-                        pText->current(),
+                        NULL,
                     });
                 if (res != STATUS_OK)
                     return -res;
@@ -304,8 +333,10 @@ namespace lsp
                 status_t res = sBatch.begin(
                     gl::batch_header_t {
                         program,
+                        sOrigin.left,
+                        sOrigin.top,
                         enrich_flags(flags),
-                        pText->current(),
+                        NULL,
                     });
                 if (res != STATUS_OK)
                     return -res;
@@ -333,8 +364,10 @@ namespace lsp
                 status_t res = sBatch.begin(
                     gl::batch_header_t {
                         program,
+                        sOrigin.left,
+                        sOrigin.top,
                         enrich_flags(flags),
-                        pText->current(),
+                        NULL,
                     });
                 if (res != STATUS_OK)
                     return -res;
@@ -365,6 +398,8 @@ namespace lsp
                 status_t res = sBatch.begin(
                     gl::batch_header_t {
                         program,
+                        sOrigin.left,
+                        sOrigin.top,
                         enrich_flags(flags),
                         t,
                     });
@@ -379,7 +414,7 @@ namespace lsp
 
                 buf     = serialize_clipping(buf);
                 buf     = serialize_color(buf, 1.0f, 1.0f, 1.0f, a);
-                buf     = serialize_texture(buf, t);
+                serialize_texture(buf, t);
 
                 return make_command(index, C_TEXTURE);
             }
@@ -395,6 +430,8 @@ namespace lsp
                 status_t res = sBatch.begin(
                     gl::batch_header_t {
                         program,
+                        sOrigin.left,
+                        sOrigin.top,
                         enrich_flags(flags),
                         t,
                     });
@@ -409,7 +446,7 @@ namespace lsp
 
                 buf     = serialize_clipping(buf);
                 buf     = serialize_color(buf, color);
-                buf     = serialize_texture(buf, t);
+                serialize_texture(buf, t);
 
                 return make_command(index, C_TEXTURE);
             }
@@ -481,6 +518,26 @@ namespace lsp
                 sBatch.hrectangle(vi, vi + 1, vi + 2, vi + 3);
             }
 
+            void Surface::fill_textured_rect(uint32_t ci, const texcoord_t & tex, float x0, float y0, float x1, float y1)
+            {
+                const uint32_t vi   = sBatch.next_vertex_index();
+                vertex_t *v         = sBatch.add_vertices(4);
+                if (v == NULL)
+                    return;
+
+                const float tx0     = (x0 - tex.x) * tex.sx;
+                const float tx1     = (x1 - tex.x) * tex.sx;
+                const float ty0     = (y0 - tex.y) * tex.sy;
+                const float ty1     = (y1 - tex.y) * tex.sy;
+
+                ADD_TVERTEX(v, ci, x0, y0, tx0, ty0);
+                ADD_TVERTEX(v, ci, x0, y1, tx0, ty1);
+                ADD_TVERTEX(v, ci, x1, y1, tx1, ty1);
+                ADD_TVERTEX(v, ci, x1, y0, tx1, ty0);
+
+                sBatch.hrectangle(vi, vi + 1, vi + 2, vi + 3);
+            }
+
             void Surface::draw_line(uint32_t ci, float x0, float y0, float x1, float y1, float width)
             {
                 // Find first not short segment
@@ -514,12 +571,13 @@ namespace lsp
                 if (n < 3)
                     return;
 
+                // Allocate resources
                 const uint32_t v0i  = sBatch.next_vertex_index();
                 vertex_t *v         = sBatch.add_vertices(n);
                 if (v == NULL)
                     return;
 
-                uint32_t vi         = v0i + 1;
+                // Fill geometry
                 ADD_VERTEX(v, ci, x[0], y[0]);
                 ADD_VERTEX(v, ci, x[1], y[1]);
 
@@ -532,11 +590,12 @@ namespace lsp
                 {
                     extend_rect(rect, x[i], y[i]);
                     ADD_VERTEX(v, ci, x[i], y[i]);
-                    sBatch.htriangle(v0i, vi, vi + 1);
-                    ++vi;
                 }
 
                 limit_rect(rect);
+
+                // Generate indices
+                sBatch.htriangle_fan(v0i, n - 2);
             }
 
             void Surface::fill_circle(uint32_t ci, float x, float y, float r)
@@ -549,16 +608,16 @@ namespace lsp
                 const float dy      = sinf(phi);
                 const size_t count  = M_PI * 2.0f / phi;
 
-                // Fill batch
-                float vx = r;
-                float vy = 0.0f;
-
+                // Allocate resources
                 const uint32_t v0i  = sBatch.next_vertex_index();
                 vertex_t *v         = sBatch.add_vertices(count + 3);
                 if (v == NULL)
                     return;
 
-                uint32_t v1i        = v0i + 1;
+                // Generate the geometry
+                float vx = r;
+                float vy = 0.0f;
+
                 ADD_VERTEX(v, ci, x, y);
                 ADD_VERTEX(v, ci, x + vx, y + vy);
 
@@ -570,12 +629,12 @@ namespace lsp
                     vy          = nvy;
 
                     ADD_VERTEX(v, ci, x + vx, y + vy);
-                    sBatch.htriangle(v0i, v1i, v1i + 1);
-                    ++v1i;
                 }
 
                 ADD_VERTEX(v, ci, x + r, y);
-                sBatch.htriangle(v0i, v1i, v1i + 1);
+
+                // Generate indices
+                sBatch.htriangle_fan(v0i, count + 1);
             }
 
             void Surface::fill_sector(uint32_t ci, float x, float y, float r, float a1, float a2)
@@ -594,16 +653,16 @@ namespace lsp
                 const float dy      = sinf(phi);
                 const ssize_t count = delta / phi;
 
-                // Generate the geometry
-                float vx            = cosf(a1) * r;
-                float vy            = sinf(a1) * r;
-
+                // Allocate resources
                 const uint32_t v0i  = sBatch.next_vertex_index();
                 vertex_t *v         = sBatch.add_vertices(count + 3);
                 if (v == NULL)
                     return;
 
-                uint32_t v1i        = v0i + 1;
+                // Generate the geometry
+                float vx            = cosf(a1) * r;
+                float vy            = sinf(a1) * r;
+
                 ADD_VERTEX(v, ci, x, y);
                 ADD_VERTEX(v, ci, x + vx, y + vy);
 
@@ -615,12 +674,69 @@ namespace lsp
                     vy          = nvy;
 
                     ADD_VERTEX(v, ci, x + vx, y + vy);
-                    sBatch.htriangle(v0i, v1i, v1i + 1);
-                    ++v1i;
                 }
 
                 ADD_VERTEX(v, ci, x + ex, y + ey);
-                sBatch.htriangle(v0i, v1i, v1i + 1);
+
+                // Generate indices
+                sBatch.htriangle_fan(v0i, count + 1);
+            }
+
+            void Surface::fill_textured_sector(uint32_t ci, const texcoord_t & tex, float x, float y, float r, float a1, float a2)
+            {
+                // Compute parameters
+                if (r <= 0.0f)
+                    return;
+                const float delta = a2 - a1;
+                if (delta == 0.0f)
+                    return;
+
+                const float phi     = (delta > 0.0f) ? lsp_min(M_PI / r, M_PI_4) : lsp_min(-M_PI / r, M_PI_4);
+                const float ex      = cosf(a2) * r;
+                const float ey      = sinf(a2) * r;
+                const float dx      = cosf(phi);
+                const float dy      = sinf(phi);
+                const ssize_t count = delta / phi;
+
+                // Allocate resources
+                const uint32_t v0i  = sBatch.next_vertex_index();
+                vertex_t *v         = sBatch.add_vertices(count + 3);
+                if (v == NULL)
+                    return;
+
+                // Generate the geometry
+                float vx            = cosf(a1) * r;
+                float vy            = sinf(a1) * r;
+
+                ADD_TVERTEX(v, ci, x, y, (x - tex.x) * tex.sx, (y - tex.y) * tex.sy);
+                float xx            = x + vx;
+                float yy            = y + vy;
+                float txx           = (xx - tex.x) * tex.sx;
+                float tyy           = (yy - tex.y) * tex.sy;
+                ADD_TVERTEX(v, ci, xx, yy, txx, tyy);
+
+                for (ssize_t i=0; i<count; ++i)
+                {
+                    float nvx   = vx*dx - vy*dy;
+                    float nvy   = vx*dy + vy*dx;
+                    vx          = nvx;
+                    vy          = nvy;
+
+                    xx          = x + vx;
+                    yy          = y + vy;
+                    txx         = (xx - tex.x) * tex.sx;
+                    tyy         = (yy - tex.y) * tex.sy;
+                    ADD_TVERTEX(v, ci, xx, yy, txx, tyy);
+                }
+
+                xx          = x + ex;
+                yy          = y + ey;
+                txx         = (xx - tex.x) * tex.sx;
+                tyy         = (yy - tex.y) * tex.sy;
+                ADD_TVERTEX(v, ci, xx, yy, txx, tyy);
+
+                // Generate indices
+                sBatch.htriangle_fan(v0i, count + 1);
             }
 
             void Surface::fill_corner(uint32_t ci, float x, float y, float xd, float yd, float r, float a)
@@ -635,18 +751,18 @@ namespace lsp
                 const float dy      = sinf(phi);
                 const ssize_t count = delta / phi;
 
+                // Allocate resources
+                const uint32_t v0i  = sBatch.next_vertex_index();
+                vertex_t *v         = sBatch.add_vertices(count + 3);
+                if (v == NULL)
+                    return;
+
                 // Generate the geometry
                 float vx            = cosf(a) * r;
                 float vy            = sinf(a) * r;
                 const float ex      = -vy;
                 const float ey      = vx;
 
-                const uint32_t v0i  = sBatch.next_vertex_index();
-                vertex_t *v         = sBatch.add_vertices(count + 3);
-                if (v == NULL)
-                    return;
-
-                uint32_t v1i        = v0i + 1;
                 ADD_VERTEX(v, ci, xd, yd);
                 ADD_VERTEX(v, ci, x + vx, y + vy);
 
@@ -658,12 +774,12 @@ namespace lsp
                     vy          = nvy;
 
                     ADD_VERTEX(v, ci, x + vx, y + vy);
-                    sBatch.htriangle(v0i, v1i, v1i + 1);
-                    ++v1i;
                 }
 
                 ADD_VERTEX(v, ci, x + ex, y + ey);
-                sBatch.htriangle(v0i, v1i, v1i + 1);
+
+                // Generate indices
+                sBatch.htriangle_fan(v0i, count + 1);
             }
 
             void Surface::wire_arc(uint32_t ci, float x, float y, float r, float a1, float a2, float width)
@@ -687,15 +803,16 @@ namespace lsp
                 const float dy      = sinf(phi);
                 const ssize_t count = delta / phi;
 
-                // Fill batch
-                float vx            = cosf(a1) * ro;
-                float vy            = sinf(a1) * ro;
-
-                uint32_t v0i        = sBatch.next_vertex_index();
+                // Allocate resources
+                const uint32_t v0i  = sBatch.next_vertex_index();
                 vertex_t *v         = sBatch.add_vertices(count*2 + 4);
                 if (v == NULL)
                     return;
 
+                // Generate the geometry
+                float vx            = cosf(a1) * ro;
+                float vy            = sinf(a1) * ro;
+
                 ADD_VERTEX(v, ci, x + vx * kr, y + vy * kr);
                 ADD_VERTEX(v, ci, x + vx, y + vy);
 
@@ -708,13 +825,13 @@ namespace lsp
 
                     ADD_VERTEX(v, ci, x + vx * kr, y + vy * kr);
                     ADD_VERTEX(v, ci, x + vx, y + vy);
-                    sBatch.hrectangle(v0i + 2, v0i, v0i + 1, v0i + 3);
-                    v0i        += 2;
                 }
 
                 ADD_VERTEX(v, ci, x + ex * kr, y + ey * kr);
                 ADD_VERTEX(v, ci, x + ex, y + ey);
-                sBatch.hrectangle(v0i + 2, v0i, v0i + 1, v0i + 3);
+
+                // Generate indices
+                sBatch.hrectangle_fan(v0i, count + 1);
             }
 
             void Surface::fill_rect(uint32_t ci, size_t mask, float radius, float left, float top, float width, float height)
@@ -762,6 +879,51 @@ namespace lsp
                 fill_rect(ci, left, top, right, bottom);
             }
 
+            void Surface::fill_textured_rect(uint32_t ci, const texcoord_t & tex, size_t mask, float radius, float left, float top, float width, float height)
+            {
+                float right     = left + width;
+                float bottom    = top + height;
+
+                if (mask & SURFMASK_T_CORNER)
+                {
+                    float l         = left;
+                    float r         = right;
+                    top            += radius;
+
+                    if (mask & SURFMASK_LT_CORNER)
+                    {
+                        l              += radius;
+                        fill_textured_sector(ci, tex, l, top, radius, M_PI, M_PI * 1.5f);
+                    }
+                    if (mask & SURFMASK_RT_CORNER)
+                    {
+                        r              -= radius;
+                        fill_textured_sector(ci, tex, r, top, radius, M_PI * 1.5f, M_PI * 2.0f);
+                    }
+                    fill_textured_rect(ci, tex, l, top - radius, r, top);
+                }
+                if (mask & SURFMASK_B_CORNER)
+                {
+                    float l         = left;
+                    float r         = right;
+                    bottom         -= radius;
+
+                    if (mask & SURFMASK_LB_CORNER)
+                    {
+                        l              += radius;
+                        fill_textured_sector(ci, tex, l, bottom, radius, M_PI * 0.5f, M_PI);
+                    }
+                    if (mask & SURFMASK_RB_CORNER)
+                    {
+                        r              -= radius;
+                        fill_textured_sector(ci, tex, r, bottom, radius, 0.0f, M_PI * 0.5f);
+                    }
+                    fill_textured_rect(ci, tex, l, bottom, r, bottom + radius);
+                }
+
+                fill_textured_rect(ci, tex, left, top, right, bottom);
+            }
+
             void Surface::wire_rect(uint32_t ci, size_t mask, float radius, float left, float top, float width, float height, float line_width)
             {
                 const float xr      = radius - line_width * 0.5f;
@@ -851,17 +1013,20 @@ namespace lsp
                     fill_corner(ci, ixe - r, iye - r, ixe, iye, r, 0.0f);
             }
 
-            void Surface::draw_polyline(uint32_t ci, clip_rect_t &rect, const float *x, const float *y, float width, size_t n)
+            template <class T>
+            inline void Surface::draw_polyline(vertex_t * & vertices, T * & indices, T vi, uint32_t ci, const float *x, const float *y, float width, size_t n)
             {
+                vertex_t *v     = vertices;
+                T *iv           = indices;
+                lsp_finally
+                {
+                    vertices        = v;
+                    indices         = iv;
+                };
+
                 size_t i;
                 float dx, dy, d;
                 float kd, ndx, ndy;
-                float px, py;
-
-                rect.left       = nWidth;
-                rect.top        = nHeight;
-                rect.right      = 0.0f;
-                rect.bottom     = 0.0f;
 
                 // Find first not short segment
                 width          *= 0.5f;
@@ -882,11 +1047,75 @@ namespace lsp
                 ndx             = -dy * kd;
                 ndy             = dx * kd;
 
-                uint32_t vi     = sBatch.next_vertex_index();
-                vertex_t *v     = sBatch.add_vertices(4);
-                if (v == NULL)
+                ADD_VERTEX(v, ci, x[i] + ndx, y[i] + ndy);
+                ADD_VERTEX(v, ci, x[i] - ndx, y[i] - ndy);
+                ADD_VERTEX(v, ci, x[si] - ndx, y[si] - ndy);
+                ADD_VERTEX(v, ci, x[si] + ndx, y[si] + ndy);
+
+                ADD_HRECTANGLE(iv, vi, vi + 1, vi + 2, vi + 3);
+                si                  = i++;
+
+                // Draw the rest segments
+                for (; i < n; ++i)
+                {
+                    dx              = x[i] - x[si];
+                    dy              = y[i] - y[si];
+                    d               = dx*dx + dy*dy;
+                    if (d > 1e-10f)
+                    {
+                        kd              = width / sqrtf(d);
+                        ndx             = -dy * kd;
+                        ndy             = dx * kd;
+
+                        ADD_VERTEX(v, ci, x[i] + ndx, y[i] + ndy);
+                        ADD_VERTEX(v, ci, x[i] - ndx, y[i] - ndy);
+                        ADD_VERTEX(v, ci, x[si] - ndx, y[si] - ndy);
+                        ADD_VERTEX(v, ci, x[si] + ndx, y[si] + ndy);
+
+                        ADD_HRECTANGLE(iv, vi + 4, vi + 5, vi + 6, vi + 7);
+                        ADD_HRECTANGLE(iv, vi, vi + 6, vi + 1, vi + 7);
+
+                        si              = i;
+                        vi             += 4;
+                    }
+                }
+            }
+
+            template <class T>
+            inline void Surface::draw_polyline(vertex_t * & vertices, T * & indices, T vi, uint32_t ci, clip_rect_t &rect, const float *x, const float *y, float width, size_t n)
+            {
+                vertex_t *v     = vertices;
+                T *iv           = indices;
+                lsp_finally
+                {
+                    vertices        = v;
+                    indices         = iv;
+                };
+
+                size_t i;
+                float dx, dy, d;
+                float kd, ndx, ndy;
+                float px, py;
+
+                // Find first not short segment
+                width          *= 0.5f;
+                size_t si       = 0;
+                for (i = 1; i < n; ++i)
+                {
+                    dx              = x[i] - x[si];
+                    dy              = y[i] - y[si];
+                    d               = dx*dx + dy*dy;
+                    if (d > 1e-10f)
+                        break;
+                }
+                if (i >= n)
                     return;
 
+                // Draw first segment
+                kd              = width / sqrtf(d);
+                ndx             = -dy * kd;
+                ndy             = dx * kd;
+
                 px              = x[i] + ndx;
                 py              = y[i] + ndy;
                 extend_rect(rect, px, py);
@@ -907,7 +1136,7 @@ namespace lsp
                 extend_rect(rect, px, py);
                 ADD_VERTEX(v, ci, px, py);
 
-                sBatch.hrectangle(vi, vi+1, vi+2, vi+3);
+                ADD_HRECTANGLE(iv, vi, vi + 1, vi + 2, vi + 3);
                 si                  = i++;
 
                 // Draw the rest segments
@@ -922,10 +1151,6 @@ namespace lsp
                         ndx             = -dy * kd;
                         ndy             = dx * kd;
 
-                        v               = sBatch.add_vertices(4);
-                        if (v == NULL)
-                            return;
-
                         px              = x[i] + ndx;
                         py              = y[i] + ndy;
                         extend_rect(rect, px, py);
@@ -946,84 +1171,136 @@ namespace lsp
                         extend_rect(rect, px, py);
                         ADD_VERTEX(v, ci, px, py);
 
-                        sBatch.hrectangle(vi + 4, vi + 5, vi + 6, vi + 7);
-                        sBatch.hrectangle(vi, vi + 6, vi + 1, vi + 7);
+                        ADD_HRECTANGLE(iv, vi + 4, vi + 5, vi + 6, vi + 7);
+                        ADD_HRECTANGLE(iv, vi, vi + 6, vi + 1, vi + 7);
 
                         si              = i;
                         vi             += 4;
                     }
                 }
-
-                // Limit the rectangle
-                limit_rect(rect);
             }
 
             void Surface::draw_polyline(uint32_t ci, const float *x, const float *y, float width, size_t n)
             {
-                size_t i;
-                float dx, dy, d;
-                float kd, ndx, ndy;
+                // Allocate vertices
+                const uint32_t segs = n - 1;
+                const uint32_t v_reserve = segs * 4;
+                const uint32_t vi   = sBatch.next_vertex_index();
+                vertex_t *v         = sBatch.add_vertices(v_reserve);
+                if (v == NULL)
+                    return;
+                const vertex_t *v_tail = &v[v_reserve];
+                lsp_finally {
+                    if (v_tail > v)
+                        sBatch.release_vertices(v_tail - v);
+                };
 
-                // Find first not short segment
-                width          *= 0.5f;
-                size_t si       = 0;
-                for (i = 1; i < n; ++i)
+                // Allocate indices
+                const uint32_t iv_reserve = (2*segs - 1) * 6;
+                void *iv_raw    = sBatch.add_indices(iv_reserve, vi + v_reserve - 1);
+                if (iv_raw == NULL)
+                    return;
+                ssize_t iv_release = iv_reserve;
+                lsp_finally {
+                    if (iv_release > 0)
+                        sBatch.release_indices(iv_release);
+                };
+
+                switch (sBatch.index_format())
                 {
-                    dx              = x[i] - x[si];
-                    dy              = y[i] - y[si];
-                    d               = dx*dx + dy*dy;
-                    if (d > 1e-10f)
+                    case INDEX_FMT_U8:
+                    {
+                        uint8_t *iv     = static_cast<uint8_t *>(iv_raw);
+                        const uint8_t *iv_tail = &iv[iv_reserve];
+                        draw_polyline<uint8_t>(v, iv, uint8_t(vi), ci, x, y, width, n);
+                        iv_release      = iv_tail - iv;
+                        break;
+                    }
+                    case INDEX_FMT_U16:
+                    {
+                        uint16_t *iv    = static_cast<uint16_t *>(iv_raw);
+                        const uint16_t *iv_tail = &iv[iv_reserve];
+                        draw_polyline<uint16_t>(v, iv, uint16_t(vi), ci, x, y, width, n);
+                        iv_release      = iv_tail - iv;
+                        break;
+                    }
+                    case INDEX_FMT_U32:
+                    {
+                        uint32_t *iv    = static_cast<uint32_t *>(iv_raw);
+                        const uint32_t *iv_tail = &iv[iv_reserve];
+                        draw_polyline<uint32_t>(v, iv, uint32_t(vi), ci, x, y, width, n);
+                        iv_release      = iv_tail - iv;
+                        break;
+                    }
+                    default:
                         break;
                 }
-                if (i >= n)
-                    return;
+            }
 
-                // Draw first segment
-                kd              = width / sqrtf(d);
-                ndx             = -dy * kd;
-                ndy             = dx * kd;
+            void Surface::draw_polyline(uint32_t ci, clip_rect_t &rect, const float *x, const float *y, float width, size_t n)
+            {
+                // Initialize rectangle of invalid size
+                rect.left       = nWidth;
+                rect.top        = nHeight;
+                rect.right      = 0.0f;
+                rect.bottom     = 0.0f;
 
-                uint32_t vi     = sBatch.next_vertex_index();
-                vertex_t *v     = sBatch.add_vertices(4);
+                // Allocate vertices
+                const uint32_t segs = n - 1;
+                const uint32_t v_reserve = segs * 4;
+                const uint32_t vi   = sBatch.next_vertex_index();
+                vertex_t *v         = sBatch.add_vertices(v_reserve);
                 if (v == NULL)
                     return;
+                const vertex_t *v_tail = &v[v_reserve];
+                lsp_finally {
+                    if (v_tail > v)
+                        sBatch.release_vertices(v_tail - v);
+                };
 
-                ADD_VERTEX(v, ci, x[i] + ndx, y[i] + ndy);
-                ADD_VERTEX(v, ci, x[i] - ndx, y[i] - ndy);
-                ADD_VERTEX(v, ci, x[si] - ndx, y[si] - ndy);
-                ADD_VERTEX(v, ci, x[si] + ndx, y[si] + ndy);
-
-                sBatch.hrectangle(vi, vi + 1, vi + 2, vi + 3);
-                si                  = i++;
+                // Allocate indices
+                const uint32_t iv_reserve = (2*segs - 1) * 6;
+                void *iv_raw    = sBatch.add_indices(iv_reserve, vi + v_reserve - 1);
+                if (iv_raw == NULL)
+                    return;
+                ssize_t iv_release = iv_reserve;
+                lsp_finally {
+                    if (iv_release > 0)
+                        sBatch.release_indices(iv_release);
+                };
 
-                // Draw the rest segments
-                for (; i < n; ++i)
+                switch (sBatch.index_format())
                 {
-                    dx              = x[i] - x[si];
-                    dy              = y[i] - y[si];
-                    d               = dx*dx + dy*dy;
-                    if (d > 1e-10f)
+                    case INDEX_FMT_U8:
                     {
-                        kd              = width / sqrtf(d);
-                        ndx             = -dy * kd;
-                        ndy             = dx * kd;
-
-                        v               = sBatch.add_vertices(4);
-                        if (v == NULL)
-                            return;
-
-                        ADD_VERTEX(v, ci, x[i] + ndx, y[i] + ndy);
-                        ADD_VERTEX(v, ci, x[i] - ndx, y[i] - ndy);
-                        ADD_VERTEX(v, ci, x[si] - ndx, y[si] - ndy);
-                        ADD_VERTEX(v, ci, x[si] + ndx, y[si] + ndy);
-
-                        sBatch.hrectangle(vi + 4, vi + 5, vi + 6, vi + 7);
-                        sBatch.hrectangle(vi, vi + 6, vi + 1, vi + 7);
-
-                        si              = i;
-                        vi             += 4;
+                        uint8_t *iv     = static_cast<uint8_t *>(iv_raw);
+                        const uint8_t *iv_tail = &iv[iv_reserve];
+                        draw_polyline<uint8_t>(v, iv, uint8_t(vi), ci, rect, x, y, width, n);
+                        iv_release      = iv_tail - iv;
+                        break;
+                    }
+                    case INDEX_FMT_U16:
+                    {
+                        uint16_t *iv    = static_cast<uint16_t *>(iv_raw);
+                        const uint16_t *iv_tail = &iv[iv_reserve];
+                        draw_polyline<uint16_t>(v, iv, uint16_t(vi), ci, rect, x, y, width, n);
+                        iv_release      = iv_tail - iv;
+                        break;
                     }
+                    case INDEX_FMT_U32:
+                    {
+                        uint32_t *iv    = static_cast<uint32_t *>(iv_raw);
+                        const uint32_t *iv_tail = &iv[iv_reserve];
+                        draw_polyline<uint32_t>(v, iv, uint32_t(vi), ci, rect, x, y, width, n);
+                        iv_release      = iv_tail - iv;
+                        break;
+                    }
+                    default:
+                        break;
                 }
+
+                // Limit the rectangle
+                limit_rect(rect);
             }
 
             bool Surface::valid() const
@@ -1234,6 +1511,7 @@ namespace lsp
                 {
                     if (pContext->activate() == STATUS_OK)
                         bIsDrawing  = true;
+                    OPENGL_OUTPUT_STATS(false);
                 }
 
                 sBatch.clear();
@@ -1481,6 +1759,64 @@ namespace lsp
                 fill_rect(uint32_t(res), mask, radius, r->nLeft, r->nTop, r->nWidth, r->nHeight);
             }
 
+            void Surface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height)
+            {
+                // Create texture
+                if (!bIsDrawing)
+                    return;
+                if (s->type() != ST_OPENGL)
+                    return;
+
+                gl::Surface *gls = static_cast<gl::Surface *>(s);
+                gl::Texture *t = gls->pTexture;
+                if (t == NULL)
+                    return;
+
+                // Start batch
+                const ssize_t res = start_batch(gl::GEOMETRY, gl::BATCH_WRITE_COLOR, t, alpha);
+                if (res < 0)
+                    return;
+                lsp_finally { sBatch.end(); };
+
+                // Draw primitives
+                texcoord_t tex;
+                tex.x       = left;
+                tex.y       = top + height;
+                tex.sx      = 1.0f / width;
+                tex.sy      = -1.0f / height;
+
+                fill_textured_rect(uint32_t(res), tex, mask, radius, left, top, width, height);
+            }
+
+            void Surface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r)
+            {
+                // Create texture
+                if (!bIsDrawing)
+                    return;
+                if (s->type() != ST_OPENGL)
+                    return;
+
+                gl::Surface *gls = static_cast<gl::Surface *>(s);
+                gl::Texture *t = gls->pTexture;
+                if (t == NULL)
+                    return;
+
+                // Start batch
+                const ssize_t res = start_batch(gl::GEOMETRY, gl::BATCH_WRITE_COLOR, t, alpha);
+                if (res < 0)
+                    return;
+                lsp_finally { sBatch.end(); };
+
+                // Draw primitives
+                texcoord_t tex;
+                tex.x       = r->nLeft;
+                tex.y       = r->nTop + r->nHeight;
+                tex.sx      = 1.0f / r->nWidth;
+                tex.sy      = -1.0f / r->nHeight;
+
+                fill_textured_rect(uint32_t(res), tex, mask, radius, r->nLeft, r->nTop, r->nWidth, r->nHeight);
+            }
+
             void Surface::fill_sector(const Color &c, float x, float y, float r, float a1, float a2)
             {
                 // Start batch
@@ -1849,6 +2185,30 @@ namespace lsp
                 return old;
             }
 
+            ws::point_t Surface::set_origin(const ws::point_t & origin)
+            {
+                ws::point_t result;
+                result.nLeft    = sOrigin.left;
+                result.nTop     = sOrigin.top;
+
+                sOrigin.left    = int32_t(origin.nLeft);
+                sOrigin.top     = int32_t(origin.nTop);
+
+                return result;
+            }
+
+            ws::point_t Surface::set_origin(ssize_t left, ssize_t top)
+            {
+                ws::point_t result;
+                result.nLeft    = sOrigin.left;
+                result.nTop     = sOrigin.top;
+
+                sOrigin.left    = int32_t(left);
+                sOrigin.top     = int32_t(top);
+
+                return result;
+            }
+
             void Surface::clip_begin(float x, float y, float w, float h)
             {
                 if (!bIsDrawing)
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/gl/TextAllocator.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/TextAllocator.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/gl/TextAllocator.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/TextAllocator.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -145,13 +145,14 @@ namespace lsp
                         NULL,
                         TEXT_ATLAS_SIZE, TEXT_ATLAS_SIZE,
                         0, gl::TEXTURE_ALPHA8);
+                    if (res != STATUS_OK)
+                        return NULL;
                 }
 
                 res = pTexture->set_subimage(
                     data,
                     rect->nLeft, rect->nTop, rect->nWidth, rect->nHeight,
                     stride);
-
                 if (res != STATUS_OK)
                     return NULL;
 
@@ -210,7 +211,7 @@ namespace lsp
 
             gl::Texture *TextAllocator::current()
             {
-                return safe_acquire(pTexture);
+                return pTexture;
             }
 
         } /* namespace gl */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Texture.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Texture.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/gl/Texture.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/gl/Texture.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -32,16 +32,16 @@ namespace lsp
     {
         namespace gl
         {
-            constexpr GLuint INVALID_PROCESSOR_ID   = ~GLuint(0);
-
             Texture::Texture(gl::IContext *ctx)
             {
                 pContext            = safe_acquire(ctx);
                 atomic_store(&nReferences, 1);
-                nTextureId          = 0;
-                nFrameBufferId      = 0;
-                nStencilBufferId    = 0;
-                nProcessorId        = INVALID_PROCESSOR_ID;
+                nTextureId          = GL_NONE;
+                nFrameBufferId      = GL_NONE;
+                nStencilBufferId    = GL_NONE;
+                for (size_t i=0; i<MAX_PROCESSOR_IDS; ++i)
+                    vProcessorIds[i]    = 0;
+                nProcessorIds       = 0;
                 nWidth              = 0;
                 nHeight             = 0;
                 enFormat            = gl::TEXTURE_UNKNOWN;
@@ -84,7 +84,7 @@ namespace lsp
 
             GLuint Texture::allocate_framebuffer()
             {
-                if (nFrameBufferId != 0)
+                if (nFrameBufferId != GL_NONE)
                     return nFrameBufferId;
 
                 nFrameBufferId = pContext->alloc_framebuffer();
@@ -95,7 +95,7 @@ namespace lsp
 
             GLuint Texture::allocate_stencil()
             {
-                if (nStencilBufferId != 0)
+                if (nStencilBufferId != GL_NONE)
                     return nStencilBufferId;
 
                 nStencilBufferId = pContext->alloc_renderbuffer();
@@ -131,7 +131,7 @@ namespace lsp
 
                 vtbl->glBindTexture(GL_TEXTURE_2D, texture_id);
                 vtbl->glTexImage2D(GL_TEXTURE_2D, 0, int_format, width, height, 0, tex_format, GL_UNSIGNED_BYTE, buf);
-                vtbl->glBindTexture(GL_TEXTURE_2D, 0);
+                vtbl->glBindTexture(GL_TEXTURE_2D, GL_NONE);
 
                 if (num_of_pixels != width)
                     vtbl->glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
@@ -166,7 +166,7 @@ namespace lsp
 
                 vtbl->glBindTexture(GL_TEXTURE_2D, nTextureId);
                 vtbl->glTexImage2D(GL_TEXTURE_2D, 0, int_format, width, height, 0, tex_format, GL_UNSIGNED_BYTE, NULL);
-                vtbl->glBindTexture(GL_TEXTURE_2D, 0);
+                vtbl->glBindTexture(GL_TEXTURE_2D, GL_NONE);
 
                 // Update texture settings
                 nWidth      = uint32_t(width);
@@ -191,20 +191,71 @@ namespace lsp
                 vtbl->glPixelStorei(GL_UNPACK_ROW_LENGTH, stride / pixel_size);
                 lsp_finally { vtbl->glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); };
 
-                vtbl->glBindTexture(GL_TEXTURE_2D, nTextureId);
-                vtbl->glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, tex_format, GL_UNSIGNED_BYTE, buf);
-                vtbl->glBindTexture(GL_TEXTURE_2D, 0);
+                if (vtbl->glTextureSubImage2D)
+                    vtbl->glTextureSubImage2D(nTextureId, 0, x, y, width, height, tex_format, GL_UNSIGNED_BYTE, buf);
+                else
+                {
+                    vtbl->glBindTexture(GL_TEXTURE_2D, nTextureId);
+                    vtbl->glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, tex_format, GL_UNSIGNED_BYTE, buf);
+                    vtbl->glBindTexture(GL_TEXTURE_2D, GL_NONE);
+                }
 
                 nSamples    = 0;
 
                 return STATUS_OK;
             }
 
+            bool Texture::bind_processor(GLuint processor_id)
+            {
+                if (nProcessorIds >= MAX_PROCESSOR_IDS)
+                    return false;
+
+                // Check that we do not contain specified processor
+                for (size_t i=0; i<nProcessorIds; ++i)
+                    if (vProcessorIds[i] == processor_id)
+                        return false;
+
+                vProcessorIds[nProcessorIds++] = processor_id;
+                return true;
+            }
+
+            bool Texture::unbind_processor(GLuint processor_id)
+            {
+                if (nProcessorIds <= 0)
+                    return false;
+
+                GLuint *dst = vProcessorIds;
+                GLuint *end = &vProcessorIds[nProcessorIds];
+
+                // Find matching processor
+                for ( ; dst < end; ++dst)
+                    if (*dst == processor_id)
+                        break;
+
+                if (dst == end)
+                    return false;
+
+                // Move data
+                for ( ++dst; dst < end; ++dst)
+                    dst[-1]     = dst[0];
+                dst[-1]     = 0;
+
+                --nProcessorIds;
+
+                return true;
+            }
+
             void Texture::bind(GLuint processor_id)
             {
                 if (pContext == NULL)
                     return;
 
+                if (!bind_processor(processor_id))
+                {
+                    lsp_warn("Error binding texture %p to processor %d", this, int(processor_id));
+                    return;
+                }
+
                 const vtbl_t *vtbl = pContext->vtbl();
 
                 const GLenum tex_kind = (nSamples > 0) ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;
@@ -215,22 +266,24 @@ namespace lsp
                 vtbl->glTexParameteri(tex_kind, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
                 vtbl->glTexParameteri(tex_kind, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
                 vtbl->glTexParameteri(tex_kind, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-
-                nProcessorId        = processor_id;
             }
 
-            void Texture::unbind()
+            void Texture::unbind(GLuint processor_id)
             {
-                if ((pContext == NULL) || (nProcessorId == INVALID_PROCESSOR_ID))
+                if (pContext == NULL)
                     return;
 
+                if (!unbind_processor(processor_id))
+                {
+                    lsp_warn("Error unbinding texture %p to processor %d", this, int(processor_id));
+                    return;
+                }
+
                 const vtbl_t *vtbl = pContext->vtbl();
 
                 const GLenum tex_kind = (nSamples > 0) ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;
-                vtbl->glActiveTexture(nProcessorId);
-                vtbl->glBindTexture(tex_kind, 0);
-
-                nProcessorId        = 0;
+                vtbl->glActiveTexture(processor_id);
+                vtbl->glBindTexture(tex_kind, GL_NONE);
             }
 
             void Texture::deallocate_buffers()
@@ -289,11 +342,11 @@ namespace lsp
 
                 // Ensure that we have associated frame buffer
                 GLuint fb_id        = nFrameBufferId;
-                if (fb_id == 0)
+                if (fb_id == GL_NONE)
                 {
                     // Allocate framebuffer
                     fb_id = allocate_framebuffer();
-                    if (fb_id == 0)
+                    if (fb_id == GL_NONE)
                         return STATUS_NO_MEM;
 
                     // Setup clear flag
@@ -304,16 +357,16 @@ namespace lsp
                 vtbl->glBindFramebuffer(GL_FRAMEBUFFER, fb_id);
                 lsp_finally {
                     if (failed)
-                        vtbl->glBindFramebuffer(GL_FRAMEBUFFER, 0);
+                        vtbl->glBindFramebuffer(GL_FRAMEBUFFER, GL_NONE);
                 };
 
                 // Ensure that stencil buffer is set and has proper parameters
                 GLuint stencil_id = nStencilBufferId;
-                if ((stencil_id == 0) || (cap_changed))
+                if ((stencil_id == GL_NONE) || (cap_changed))
                 {
                     // Allocate stencil buffer if needed
                     stencil_id  = allocate_stencil();
-                    if (stencil_id == 0)
+                    if (stencil_id == GL_NONE)
                         return STATUS_NO_MEM;
 
                     // Initialize stencil buffer
@@ -322,7 +375,7 @@ namespace lsp
                         vtbl->glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, GL_STENCIL_INDEX8, width, height);
                     else
                         vtbl->glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, width, height);
-                    vtbl->glBindRenderbuffer(GL_RENDERBUFFER, 0);
+                    vtbl->glBindRenderbuffer(GL_RENDERBUFFER, GL_NONE);
 
                     // Setup clear flag
                     clear           = true;
@@ -339,18 +392,18 @@ namespace lsp
                 GLuint texture_id   = nTextureId;
                 const GLuint tex_kind   = (samples > 0) ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;
 
-                if ((texture_id == 0) || (cap_changed) || (enFormat != format))
+                if ((texture_id == GL_NONE) || (cap_changed) || (enFormat != format))
                 {
                     // Allocate texture if needed
                     texture_id          = allocate_texture();
-                    if (texture_id == 0)
+                    if (texture_id == GL_NONE)
                         return STATUS_NO_MEM;
 
                     const GLuint int_format = (format == gl::TEXTURE_ALPHA8) ? GL_RED : GL_RGBA;
 
                     // Bind texture and set size
                     vtbl->glBindTexture(tex_kind, texture_id);
-                    if (samples > 0)
+                    if (tex_kind == GL_TEXTURE_2D_MULTISAMPLE)
                         vtbl->glTexImage2DMultisample(tex_kind, samples, int_format, width, height, GL_TRUE);
                     else
                         vtbl->glTexImage2D(tex_kind, 0, int_format, width, height, 0, int_format, GL_UNSIGNED_BYTE, NULL);
@@ -359,7 +412,7 @@ namespace lsp
                     nWidth          = uint32_t(width);
                     nHeight         = uint32_t(height);
                     enFormat        = format;
-                    nSamples        = GLuint(samples);
+                    nSamples        = (tex_kind == GL_TEXTURE_2D_MULTISAMPLE) ? GLuint(samples) : GLuint(0);
 
                     // Setup clear flag
                     clear           = true;
@@ -371,7 +424,7 @@ namespace lsp
                 }
                 lsp_finally {
                     if (failed)
-                        vtbl->glBindTexture(tex_kind, 0);
+                        vtbl->glBindTexture(tex_kind, GL_NONE);
                 };
 
                 // Attach texture to framebuffer
@@ -382,7 +435,7 @@ namespace lsp
                 vtbl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex_kind, texture_id, 0);
                 lsp_finally {
                     if (failed)
-                        vtbl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex_kind, 0, 0);
+                        vtbl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex_kind, GL_NONE, 0);
                 };
 
                 // Set the list of draw buffers
@@ -422,15 +475,15 @@ namespace lsp
                 vtbl->glDrawBuffers(0, NULL);
 
                 // Unbind resources from frame buffer
-                if (nFrameBufferId != 0)
+                if (nFrameBufferId != GL_NONE)
                 {
                     // Unbind stencil buffer if present
-                    if (nStencilBufferId != 0)
-                        vtbl->glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0);
+                    if (nStencilBufferId != GL_NONE)
+                        vtbl->glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, GL_NONE);
 
                     // Unbind texture
-                    vtbl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex_kind, 0, 0);
-                    vtbl->glBindFramebuffer(GL_FRAMEBUFFER, 0);
+                    vtbl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex_kind, GL_NONE, 0);
+                    vtbl->glBindFramebuffer(GL_FRAMEBUFFER, GL_NONE);
                 }
             }
 
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/glx/Context.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/glx/Context.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/glx/Context.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/glx/Context.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -25,6 +25,7 @@
 
 #include <private/glx/Context.h>
 #include <lsp-plug.in/common/debug.h>
+#include <lsp-plug.in/runtime/LSPString.h>
 #include <lsp-plug.in/stdlib/string.h>
 
 #include <private/glx/shaders.h>
@@ -56,11 +57,17 @@ namespace lsp
                 NULL
             };
 
-            static const int glx_context_attribs[] =
+            typedef struct glx_context_version_t
             {
-                GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
-                GLX_CONTEXT_MINOR_VERSION_ARB, 1,
-                None
+                uint8_t major;
+                uint8_t minor;
+                uint32_t features;
+            } glx_context_version_t;
+
+            static const glx_context_version_t glx_context_versions[] =
+            {
+                { 3, 3, Context::LAYOUT_SUPPORT | Context::OPENGL_3_3_OR_ABOVE  },
+                { 3, 0, Context::NO_FEATURES                                    },
             };
 
             typedef GLXContext (*glXCreateContextAttribsARBProc)(
@@ -127,6 +134,7 @@ namespace lsp
                     if ((max_sample_buffers > 0) && (max_samples > 0))
                     {
                     #ifdef LSP_TRACE
+                        int fbconfig_id = 0;
                         int red_size = 0;
                         int green_size = 0;
                         int blue_size = 0;
@@ -134,6 +142,7 @@ namespace lsp
                         int depth_size = 0;
                         int stencil_size = 0;
 
+                        ::glXGetFBConfigAttrib(dpy, result, GLX_FBCONFIG_ID, &fbconfig_id);
                         ::glXGetFBConfigAttrib(dpy, result, GLX_RED_SIZE, &red_size);
                         ::glXGetFBConfigAttrib(dpy, result, GLX_GREEN_SIZE, &green_size);
                         ::glXGetFBConfigAttrib(dpy, result, GLX_BLUE_SIZE, &blue_size);
@@ -141,8 +150,8 @@ namespace lsp
                         ::glXGetFBConfigAttrib(dpy, result, GLX_DEPTH_SIZE, &depth_size);
                         ::glXGetFBConfigAttrib(dpy, result, GLX_STENCIL_SIZE, &stencil_size);
 
-                        lsp_trace("Selected fb_config: rgba={%d, %d, %d, %d}, depth=%d, stencil=%d, multisampling={%d, %d}",
-                            red_size, green_size, blue_size, alpha_size, depth_size, stencil_size, max_sample_buffers, max_samples);
+                        lsp_trace("Selected fb_config: id=0x%x, rgba={%d, %d, %d, %d}, depth=%d, stencil=%d, multisampling={%d, %d}",
+                            fbconfig_id, red_size, green_size, blue_size, alpha_size, depth_size, stencil_size, max_sample_buffers, max_samples);
                     #endif /* LSP_TRACE */
 
                         return result;
@@ -181,12 +190,13 @@ namespace lsp
                 return nMultisample;
             }
 
-            Context::Context(::Display *dpy, ::GLXContext ctx, ::Window window, vtbl_t *vtbl, uint32_t multisample)
+            Context::Context(::Display *dpy, ::GLXContext ctx, ::Window window, vtbl_t *vtbl, uint32_t features, uint32_t multisample)
                 : IContext(vtbl)
             {
                 pDisplay        = dpy;
                 hContext        = ctx;
                 hWindow         = window;
+                nFeatures       = features;
                 nMultisample    = multisample;
 
                 lsp_gl_trace("Created GLX context ptr=%p", this);
@@ -239,9 +249,9 @@ namespace lsp
                 {
                     if (!::glXMakeCurrent(pDisplay, hWindow, hContext))
                         return STATUS_UNKNOWN_ERR;
-                }
 
-                perform_gc();
+                    perform_gc();
+                }
 
                 return STATUS_OK;
             }
@@ -288,7 +298,7 @@ namespace lsp
                 ::glXSwapBuffers(pDisplay, hWindow);
             }
 
-            const char *Context::vertex_shader(size_t program_id)
+            const char *Context::vertex_shader(gl::program_t program_id)
             {
                 switch (program_id)
                 {
@@ -299,7 +309,7 @@ namespace lsp
                 return NULL;
             }
 
-            const char *Context::fragment_shader(size_t program_id)
+            const char *Context::fragment_shader(gl::program_t program_id)
             {
                 switch (program_id)
                 {
@@ -310,9 +320,58 @@ namespace lsp
                 return NULL;
             }
 
-            void Context::clear_errors()
+            GLint Context::attribute_location(gl::program_t program, gl::attribute_t attribute)
             {
-                while (glGetError() != GL_NO_ERROR);
+                // If we support layouts, then just return index of the binding
+                if (nFeatures & LAYOUT_SUPPORT)
+                {
+                    switch (program)
+                    {
+                        case gl::GEOMETRY:
+                        {
+                            switch (attribute)
+                            {
+                                case gl::VERTEX_COORDS: return 0;
+                                case gl::TEXTURE_COORDS: return 1;
+                                case gl::COMMAND_BUFFER: return 2;
+                                default: break;
+                            }
+                        }
+                        break;
+
+                        case gl::STENCIL:
+                        {
+                            switch (attribute)
+                            {
+                                case gl::VERTEX_COORDS: return 0;
+                                default: break;
+                            }
+                        }
+                        break;
+
+                        default: break;
+                    }
+
+                    return -STATUS_NOT_FOUND;
+                }
+
+                // Otherwise resolve shader parameter by name
+                const size_t index = size_t(program);
+                program_t *prog = vPrograms.get(index);
+                if (prog == NULL)
+                    return -STATUS_BAD_STATE;
+
+                const char *name = NULL;
+                switch (attribute)
+                {
+                    case gl::VERTEX_COORDS:     name = "a_vertex"; break;
+                    case gl::TEXTURE_COORDS:    name = "a_texcoord"; break;
+                    case gl::COMMAND_BUFFER:    name = "a_command"; break;
+                    default: return -STATUS_INVALID_VALUE;
+                }
+
+                const GLint result = pVtbl->glGetAttribLocation(prog->nProgramId, name);
+                return (result >= 0) ? result : -STATUS_NOT_FOUND;
             }
 
             bool Context::check_gl_error(const char *context)
@@ -320,7 +379,7 @@ namespace lsp
                 size_t count = 0;
                 while (true)
                 {
-                    const GLenum error = glGetError();
+                    const GLenum error = pVtbl->glGetError();
                     if (error == GL_NO_ERROR)
                         return count > 0;
 
@@ -370,185 +429,296 @@ namespace lsp
                 return false;
             }
 
+            bool Context::make_shader(LSPString &dst, const char *text) const
+            {
+                const char *version = (nFeatures & OPENGL_3_3_OR_ABOVE) ? "#version 330 core\n\n" : "#version 140\n\n";
+                if (!dst.append_ascii(version))
+                    return false;
+
+                if (nFeatures & LAYOUT_SUPPORT)
+                {
+                    if (!dst.append_ascii("#define USE_LAYOUTS\n"))
+                        return false;
+                }
+                if (nFeatures & TEXTURE_MULTISAMPLE)
+                {
+                    if (!dst.append_ascii("#define USE_TEXTURE_MULTISAMPLE\n"))
+                        return false;
+                    if (!dst.append_ascii("#extension GL_ARB_texture_multisample : enable\n"))
+                        return false;
+                }
+
+                if (!dst.append('\n'))
+                    return false;
+
+                return dst.append_ascii(text);
+            }
+
             status_t Context::program(size_t *id, gl::program_t program)
             {
                 if (!active())
                     return STATUS_BAD_STATE;
 
-                clear_errors();
-
+                // Check that program has successfully been compiled
                 const size_t index = size_t(program);
                 program_t *prog = vPrograms.get(index);
-                if (prog == NULL)
+                if (prog != NULL)
                 {
-                    // Obtain source code for shaders
-                    const char *vertex  = vertex_shader(index);
-                    if (vertex == NULL)
-                    {
-                        lsp_error("Vertex shader not defined for program id=%d", int(index));
-                        return STATUS_BAD_STATE;
-                    }
+                    *id = prog->nProgramId;
+                    return STATUS_OK;
+                }
 
-                    const char *fragment= fragment_shader(index);
-                    if (fragment == NULL)
-                    {
-                        lsp_error("Fragment shader not defined for program id=%d", int(index));
-                        return STATUS_BAD_STATE;
-                    }
+                // Obtain source code for shaders
+                const char *vertex  = vertex_shader(program);
+                if (vertex == NULL)
+                {
+                    lsp_error("Vertex shader not defined for program id=%d", int(index));
+                    return STATUS_BAD_STATE;
+                }
+                LSPString vertex_code;
+                if (!make_shader(vertex_code, vertex))
+                    return STATUS_NO_MEM;
 
-                    // Create new program
-                    program_t *prg  = static_cast<program_t *>(malloc(sizeof(program_t)));
-                    if (prg == NULL)
-                        return STATUS_NO_MEM;
+                const char *fragment= fragment_shader(program);
+                if (fragment == NULL)
+                {
+                    lsp_error("Fragment shader not defined for program id=%d", int(index));
+                    return STATUS_BAD_STATE;
+                }
+                LSPString fragment_code;
+                if (!make_shader(fragment_code, fragment))
+                    return STATUS_NO_MEM;
 
-                    prg->nVertexId  = 0;
-                    prg->nFragmentId= 0;
-                    prg->nProgramId = 0;
-                    prg->nFlags     = 0;
-                    lsp_finally { destroy(prg); };
+                // Create new program
+                program_t *prg  = static_cast<program_t *>(malloc(sizeof(program_t)));
+                if (prg == NULL)
+                    return STATUS_NO_MEM;
 
-                    // Compile vertex shader
-                    if ((prg->nVertexId = pVtbl->glCreateShader(GL_VERTEX_SHADER)) == 0)
-                    {
-                        check_gl_error("create vertex shader");
-                        return STATUS_UNKNOWN_ERR;
-                    }
-                    lsp_gl_trace("glCreateShader(%d)", int(prg->nVertexId));
-                    prg->nFlags    |= PF_VERTEX;
-                    pVtbl->glShaderSource(prg->nVertexId, 1, &vertex, NULL);
-                    if (check_gl_error("set vertex shader source"))
-                        return STATUS_UNKNOWN_ERR;
-                    pVtbl->glCompileShader(prg->nVertexId);
-                    if (check_compile_status("compile vertex shader", prg->nVertexId, SHADER))
-                    {
-                        lsp_trace("Vertex shader:\n%s", vertex);
-                        return STATUS_UNKNOWN_ERR;
-                    }
-                    if (check_gl_error("compile vertex shader"))
-                        return STATUS_UNKNOWN_ERR;
+                prg->nVertexId  = 0;
+                prg->nFragmentId= 0;
+                prg->nProgramId = 0;
+                prg->nFlags     = 0;
+                lsp_finally { destroy(prg); };
 
-                    // Compile fragment shader
-                    if ((prg->nFragmentId = pVtbl->glCreateShader(GL_FRAGMENT_SHADER)) == 0)
-                    {
-                        check_gl_error("create fragment shader");
-                        return STATUS_UNKNOWN_ERR;
-                    }
-                    lsp_gl_trace("glCreateShader(%d)", int(prg->nFragmentId));
-                    prg->nFlags    |= PF_FRAGMENT;
-                    pVtbl->glShaderSource(prg->nFragmentId, 1, &fragment, NULL);
-                    if (check_gl_error("set fragment shader source"))
-                        return STATUS_UNKNOWN_ERR;
-                    pVtbl->glCompileShader(prg->nFragmentId);
-                    if (check_compile_status("compile fragment shader", prg->nFragmentId, SHADER))
-                    {
-                        lsp_trace("Fragment shader:\n%s", vertex);
-                        return STATUS_UNKNOWN_ERR;
-                    }
-                    if (check_gl_error("compile fragment shader"))
-                        return STATUS_UNKNOWN_ERR;
+                // Compile vertex shader
+                if ((prg->nVertexId = pVtbl->glCreateShader(GL_VERTEX_SHADER)) == GL_NONE)
+                {
+                    check_gl_error("create vertex shader");
+                    return STATUS_UNKNOWN_ERR;
+                }
+                lsp_gl_trace("glCreateShader(%d)", int(prg->nVertexId));
+                prg->nFlags    |= PF_VERTEX;
 
-                    // Link program
-                    if ((prg->nProgramId = pVtbl->glCreateProgram()) == 0)
-                    {
-                        check_gl_error("create program");
-                        return STATUS_UNKNOWN_ERR;
-                    }
-                    lsp_gl_trace("glCreateProgram(%d)", int(prg->nFragmentId));
-                    prg->nFlags    |= PF_PROGRAM;
-                    pVtbl->glAttachShader(prg->nProgramId, prg->nVertexId);
-                    if (check_gl_error("attach vertex shader to program"))
-                        return STATUS_UNKNOWN_ERR;
-                    pVtbl->glAttachShader(prg->nProgramId, prg->nFragmentId);
-                    if (check_gl_error("attach fragment shader to program"))
-                        return STATUS_UNKNOWN_ERR;
-                    pVtbl->glLinkProgram(prg->nProgramId);
-                    if (check_compile_status("link program", prg->nProgramId, PROGRAM))
-                    {
-                        lsp_trace("Vertex shader:\n%s", vertex);
-                        lsp_trace("Fragment shader:\n%s", vertex);
-                        return STATUS_UNKNOWN_ERR;
-                    }
-                    if (check_gl_error("link program"))
-                        return STATUS_UNKNOWN_ERR;
+                const char *vertex_source = vertex_code.get_ascii();
+                pVtbl->glShaderSource(prg->nVertexId, 1, &vertex_source, NULL);
+                pVtbl->glCompileShader(prg->nVertexId);
+                if (check_compile_status("compile vertex shader", prg->nVertexId, SHADER))
+                {
+                    lsp_trace("Vertex shader:\n%s", vertex_source);
+                    check_gl_error("compile vertex shader");
+                    return STATUS_UNKNOWN_ERR;
+                }
 
-                    // Now we can delete compiled shaders
-                    pVtbl->glDeleteShader(prg->nVertexId);
-                    if (check_gl_error("delete vertex shader"))
-                        return STATUS_UNKNOWN_ERR;
-                    lsp_gl_trace("glDeleteShader(%d)", int(prg->nVertexId));
-                    prg->nFlags    &= ~PF_VERTEX;
+                // Compile fragment shader
+                if ((prg->nFragmentId = pVtbl->glCreateShader(GL_FRAGMENT_SHADER)) == GL_NONE)
+                {
+                    check_gl_error("create fragment shader");
+                    return STATUS_UNKNOWN_ERR;
+                }
+                lsp_gl_trace("glCreateShader(%d)", int(prg->nFragmentId));
+                prg->nFlags    |= PF_FRAGMENT;
 
-                    pVtbl->glDeleteShader(prg->nFragmentId);
-                    if (check_gl_error("delete fragment shader"))
-                        return STATUS_UNKNOWN_ERR;
-                    lsp_gl_trace("glDeleteShader(%d)", int(prg->nFragmentId));
-                    prg->nFlags    &= ~PF_FRAGMENT;
+                const char *fragment_source = fragment_code.get_ascii();
+                pVtbl->glShaderSource(prg->nFragmentId, 1, &fragment_source, NULL);
+                pVtbl->glCompileShader(prg->nFragmentId);
+                if (check_compile_status("compile fragment shader", prg->nFragmentId, SHADER))
+                {
+                    lsp_trace("Fragment shader:\n%s", fragment_source);
+                    check_gl_error("compile fragment shader");
+                    return STATUS_UNKNOWN_ERR;
+                }
 
-                    // Add program to list
-                    const size_t count  = index + 1 - vPrograms.size();
-                    if (count > 0)
-                    {
-                        program_t **ptr     = vPrograms.append_n(count);
-                        if (ptr == NULL)
-                            return STATUS_NO_MEM;
-                        for (size_t i=0; i<count; ++i)
-                            ptr[i]              = NULL;
-                    }
-                    if (!vPrograms.set(index, prg))
-                        return STATUS_UNKNOWN_ERR;
+                // Link program
+                if ((prg->nProgramId = pVtbl->glCreateProgram()) == GL_NONE)
+                {
+                    check_gl_error("create program");
+                    return STATUS_UNKNOWN_ERR;
+                }
+                lsp_gl_trace("glCreateProgram(%d)", int(prg->nFragmentId));
+                prg->nFlags    |= PF_PROGRAM;
+                pVtbl->glAttachShader(prg->nProgramId, prg->nVertexId);
+                pVtbl->glAttachShader(prg->nProgramId, prg->nFragmentId);
+                pVtbl->glLinkProgram(prg->nProgramId);
+                if (check_compile_status("link program", prg->nProgramId, PROGRAM))
+                {
+                    lsp_trace("Vertex shader:\n%s", vertex_source);
+                    lsp_trace("Fragment shader:\n%s", fragment_source);
+                    check_gl_error("link program");
+                    return STATUS_UNKNOWN_ERR;
+                }
+
+                // Now we can delete compiled shaders
+                pVtbl->glDeleteShader(prg->nVertexId);
+                lsp_gl_trace("glDeleteShader(%d)", int(prg->nVertexId));
+                prg->nFlags    &= ~PF_VERTEX;
+
+                pVtbl->glDeleteShader(prg->nFragmentId);
+                lsp_gl_trace("glDeleteShader(%d)", int(prg->nFragmentId));
+                prg->nFlags    &= ~PF_FRAGMENT;
 
-                    prog            = release_ptr(prg);
+                // Add program to list
+                const size_t count  = index + 1 - vPrograms.size();
+                if (count > 0)
+                {
+                    program_t **ptr     = vPrograms.append_n(count);
+                    if (ptr == NULL)
+                        return STATUS_NO_MEM;
+                    for (size_t i=0; i<count; ++i)
+                        ptr[i]              = NULL;
                 }
+                if (!vPrograms.set(index, prg))
+                    return STATUS_UNKNOWN_ERR;
 
-                *id = prog->nProgramId;
+                prog            = release_ptr(prg);
+                *id             = prog->nProgramId;
 
                 return STATUS_OK;
             }
 
+            static int create_context_error_handler(Display *dpy, XErrorEvent *ev)
+            {
+                return 0;
+            }
+
+            static uint32_t test_features(const char *str)
+            {
+                uint32_t features   = Context::NO_FEATURES;
+                if (check_gl_extension(str, "GL_ARB_texture_multisample"))
+                    features               |= Context::TEXTURE_MULTISAMPLE;
+
+                return features;
+            }
+
+            static uint32_t detect_features(glx::vtbl_t *vtbl)
+            {
+                uint32_t features   = Context::NO_FEATURES;
+
+                const char *extensions = reinterpret_cast<const char *>(vtbl->glGetString(GL_EXTENSIONS));
+                if (extensions != NULL)
+                {
+                    lsp_gl_trace("OpenGL extensions: %s", extensions);
+                    features               |= test_features(extensions);
+                }
+
+                lsp_gl_trace("OpenGL extensions: %s", extensions);
+
+                GLint num_extensions = 0;
+                vtbl->glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
+                for (GLint i = 0; i<num_extensions; ++i)
+                {
+                    extensions              = reinterpret_cast<const char *>(vtbl->glGetStringi(GL_EXTENSIONS, i));
+                    features               |= test_features(extensions);
+
+                    lsp_gl_trace("%s", extensions);
+                }
+
+                return features;
+            }
+
             gl::IContext *create_context(Display *dpy, int screen, Window window)
             {
-                // Choose FBConfig
-                GLXFBConfig fb_config = choose_fb_config(dpy, screen);
-                if (fb_config == NULL)
+                // Query extensions
+                const char *extensions  = ::glXQueryExtensionsString(dpy, screen);
+                lsp_gl_trace("GLX extensions: %s", extensions);
+                if (!check_gl_extension(extensions, "GLX_ARB_create_context"))
+                {
+                    lsp_trace("GLX_ARB_create_context not supported");
                     return NULL;
+                }
 
                 // Create virtual table
                 glx::vtbl_t *vtbl       = glx::create_vtbl();
                 if (vtbl == NULL)
                     return NULL;
-                lsp_finally { free(vtbl); };
+                lsp_finally {
+                    if (vtbl != NULL)
+                        free(vtbl);
+                };
+                if (vtbl->glXCreateContextAttribsARB == NULL)
+                {
+                    lsp_trace("No glXCreateContextAttribsARB implementation");
+                    return NULL;
+                }
+
+                // Choose FBConfig
+                GLXFBConfig fb_config = choose_fb_config(dpy, screen);
+                if (fb_config == NULL)
+                    return NULL;
 
                 // Try to create OpenGL 3.0+ context
                 GLXContext ctx = NULL;
-                const char *extensions = ::glXQueryExtensionsString(dpy, screen);
-                if ((check_gl_extension(extensions, "GLX_ARB_create_context")) &&
-                    (vtbl->glXCreateContextAttribsARB != NULL))
-                {
-                    ctx = vtbl->glXCreateContextAttribsARB(dpy, fb_config, 0, GL_TRUE, glx_context_attribs);
-                    if (ctx == NULL)
-                        ctx = vtbl->glXCreateContextAttribsARB(dpy, fb_config, 0, GL_FALSE, glx_context_attribs);
+                int glx_context_attribs[] =
+                {
+                    GLX_CONTEXT_MAJOR_VERSION_ARB, 0,
+                    GLX_CONTEXT_MINOR_VERSION_ARB, 0,
+                    None
+                };
+
+                uint32_t features       = Context::NO_FEATURES;
+                for (size_t i=0; i < sizeof(glx_context_versions) / sizeof(glx_context_version_t); ++i)
+                {
+                    const glx_context_version_t *version = &glx_context_versions[i];
+                    glx_context_attribs[1]  = version->major;
+                    glx_context_attribs[3]  = version->minor;
+
+                    {
+                        XErrorHandler old = ::XSetErrorHandler(create_context_error_handler);
+                        lsp_finally {
+                            ::XSetErrorHandler(old);
+                        };
+
+                        ctx = vtbl->glXCreateContextAttribsARB(dpy, fb_config, 0, GL_TRUE, glx_context_attribs);
+                        if (ctx == NULL)
+                            ctx = vtbl->glXCreateContextAttribsARB(dpy, fb_config, 0, GL_FALSE, glx_context_attribs);
+                    }
+
+                    if (ctx != NULL)
+                    {
+                        // Query extensions
+                        if (!::glXMakeCurrent(dpy, window, ctx))
+                            return NULL;
+                        features       |= detect_features(vtbl);
+                        ::glXMakeCurrent(dpy, None, NULL);
+
+                        features       |= version->features;
+
+                        break;
+                    }
                 }
 
-                if (ctx == NULL)
-                    ctx = ::glXCreateNewContext(dpy, fb_config, GLX_RGBA_TYPE, NULL, GL_TRUE);
-                if (ctx == NULL)
-                    ctx = ::glXCreateNewContext(dpy, fb_config, GLX_RGBA_TYPE, NULL, GL_FALSE);
+                // If we could not create OpenGL context, return NULL
                 if (ctx == NULL)
                     return NULL;
+                lsp_finally {
+                    if (ctx != NULL)
+                        ::glXDestroyContext(dpy, ctx);
+                };
 
                 lsp_gl_trace("glXCreateContext(%p)", ctx);
 
-                // Wrap the created context with context wrapper.
+                // Wrap the created context with context wrapper
                 int max_multisampling = 0;
-                glXGetFBConfigAttrib(dpy, fb_config, GLX_SAMPLES, &max_multisampling);
-                glx::Context *glx_ctx = new glx::Context(dpy, ctx, window, vtbl, max_multisampling);
+                if (features & Context::TEXTURE_MULTISAMPLE)
+                    glXGetFBConfigAttrib(dpy, fb_config, GLX_SAMPLES, &max_multisampling);
+
+                glx::Context *glx_ctx = new glx::Context(dpy, ctx, window, vtbl, features, max_multisampling);
                 if (glx_ctx == NULL)
-                {
-                    ::glXDestroyContext(dpy, ctx);
                     return NULL;
-                }
 
+                // Release tracked pointers
+                ctx             = NULL;
                 vtbl            = NULL;
+
                 return glx_ctx;
             }
         } /* namespace glx */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/glx/vtbl.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/glx/vtbl.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/glx/vtbl.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/glx/vtbl.cpp	2025-08-26 18:15:42.570014511 +0000
@@ -209,6 +209,9 @@ namespace lsp
                 FETCH(glGetFloati_v);
                 FETCH(glGetDoublei_v);
                 FETCH(glGetInteger64i_v);
+                FETCH(glGetString);
+                FETCH(glGetStringi);
+                FETCH(glGetError);
 
                 // Drawing operations
                 FETCH(glClearColor);
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/win/WinDDSurface.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/win/WinDDSurface.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/win/WinDDSurface.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/win/WinDDSurface.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -102,6 +102,8 @@ namespace lsp
                 nVersion            = pShared->nVersion;
                 pDC                 = NULL;
                 pStrokeStyle        = NULL;
+                fOriginX            = 0.0f;
+                fOriginY            = 0.0f;
                 bNested             = false;
 
             #ifdef LSP_DEBUG
@@ -116,6 +118,8 @@ namespace lsp
                 nVersion            = pShared->nVersion;
                 pDC                 = dc;
                 pStrokeStyle        = NULL;
+                fOriginX            = 0.0f;
+                fOriginY            = 0.0f;
                 bNested             = true;
 
             #ifdef LSP_DEBUG
@@ -344,6 +348,76 @@ namespace lsp
                     ));
             }
 
+            ID2D1PathGeometry *WinDDSurface::make_rounded_rectangle(const D2D_RECT_F &rect, size_t mask, float radius)
+            {
+                // Create geometry object
+                ID2D1PathGeometry *g = NULL;
+                if (FAILED(pShared->pDisplay->d2d_factory()->CreatePathGeometry(&g)))
+                    return NULL;
+                lsp_finally{ safe_release(g); };
+
+                // Create sink
+                ID2D1GeometrySink *s = NULL;
+                if (FAILED(g->Open(&s)))
+                    return NULL;
+                lsp_finally{ safe_release(s); };
+                s->SetFillMode(D2D1_FILL_MODE_ALTERNATE);
+
+                // Generate geometry for the rounded rectangle
+                D2D1_ARC_SEGMENT arc = D2D1::ArcSegment(
+                    D2D1::Point2F(0.0f, 0.0f),
+                    D2D1::SizeF(radius, radius),
+                    0.0f,
+                    D2D1_SWEEP_DIRECTION_CLOCKWISE,
+                    D2D1_ARC_SIZE_SMALL);
+
+                D2D1_FIGURE_BEGIN mode = D2D1_FIGURE_BEGIN_FILLED;
+                if (mask & SURFMASK_LT_CORNER)
+                {
+                    s->BeginFigure(
+                        D2D1::Point2F(rect.left, rect.top + radius),
+                        mode);
+                    arc.point   = D2D1::Point2F(rect.left + radius, rect.top);
+                    s->AddArc(&arc);
+                }
+                else
+                    s->BeginFigure(
+                        D2D1::Point2F(rect.left, rect.top),
+                        mode);
+
+                if (mask & SURFMASK_RT_CORNER)
+                {
+                    s->AddLine(D2D1::Point2F(rect.right - radius, rect.top));
+                    arc.point   = D2D1::Point2F(rect.right, rect.top + radius);
+                    s->AddArc(&arc);
+                }
+                else
+                    s->AddLine(D2D1::Point2F(rect.right, rect.top));
+
+                if (mask & SURFMASK_RB_CORNER)
+                {
+                    s->AddLine(D2D1::Point2F(rect.right, rect.bottom - radius));
+                    arc.point   = D2D1::Point2F(rect.right - radius, rect.bottom);
+                    s->AddArc(&arc);
+                }
+                else
+                    s->AddLine(D2D1::Point2F(rect.right, rect.bottom));
+
+                if (mask & SURFMASK_LB_CORNER)
+                {
+                    s->AddLine(D2D1::Point2F(rect.left + radius, rect.bottom));
+                    arc.point   = D2D1::Point2F(rect.left, rect.bottom - radius);
+                    s->AddArc(&arc);
+                }
+                else
+                    s->AddLine(D2D1::Point2F(rect.left, rect.bottom));
+
+                s->EndFigure(D2D1_FIGURE_END_CLOSED);
+                s->Close();
+
+                return release_ptr(g);
+            }
+
             void WinDDSurface::draw_rounded_rectangle(const D2D_RECT_F &rect, size_t mask, float radius, float line_width, ID2D1Brush *brush)
             {
                 // Simple geometry?
@@ -592,6 +666,63 @@ namespace lsp
                 draw_rounded_rectangle(rect, mask, radius, -1.0f, brush);
             }
 
+            void WinDDSurface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height)
+            {
+                if (bad_state())
+                    return;
+                if (s->type() != ST_IMAGE)
+                    return;
+
+                // Get the source surface
+                WinDDSurface *ws            = static_cast<WinDDSurface *>(s);
+                if (ws->pDC == NULL)
+                    return;
+                ID2D1BitmapRenderTarget *dc = static_cast<ID2D1BitmapRenderTarget *>(ws->pDC);
+
+                // Get the bitmap of the surface
+                ID2D1Bitmap *bm             = NULL;
+                if (FAILED(dc->GetBitmap(&bm)))
+                    return;
+                lsp_finally{ safe_release(bm); };
+
+                // Create pattern
+                D2D_RECT_F rect;
+                rect.left       = left;
+                rect.top        = top;
+                rect.right      = left + width;
+                rect.bottom     = top + height;
+                ID2D1PathGeometry *path = make_rounded_rectangle(rect, mask, radius);
+                if (path == NULL)
+                    return;
+                lsp_finally { safe_release(path); };
+
+                // Create the clipping layer
+                ID2D1Layer *layer = NULL;
+                if (!SUCCEEDED(pDC->CreateLayer(NULL, &layer)))
+                    return;
+                lsp_finally{ safe_release(layer); };
+
+                // Apply the clipping layer
+                pDC->PushLayer(
+                    D2D1::LayerParameters(D2D1::RectF(left, top, left + width, top + height), path),
+                    layer);
+
+                // Draw the bitmap
+                pDC->DrawBitmap(
+                    bm,
+                    rect,
+                    1.0f - alpha,
+                    D2D1_BITMAP_INTERPOLATION_MODE_LINEAR);
+
+                // Pop the clipping layer
+                pDC->PopLayer();
+            }
+
+            void WinDDSurface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r)
+            {
+                fill_rect(s, alpha, mask, radius, r->nLeft, r->nTop, r->nWidth, r->nHeight);
+            }
+
             void WinDDSurface::fill_sector(const Color &c, float x, float y, float r, float a1, float a2)
             {
                 if (bad_state())
@@ -1699,6 +1830,28 @@ namespace lsp
                 return old;
             }
 
+            ws::point_t WinDDSurface::set_origin(const ws::point_t & origin)
+            {
+                return set_origin(origin.nLeft, origin.nTop);
+            }
+
+            ws::point_t WinDDSurface::set_origin(ssize_t left, ssize_t top)
+            {
+                ws::point_t result;
+                result.nLeft    = fOriginX;
+                result.nTop     = fOriginY;
+
+                if (bad_state())
+                    return result;
+
+                fOriginX        = left;
+                fOriginY        = top;
+
+                pDC->SetTransform(D2D1::Matrix3x2F::Translation(fOriginX, fOriginY));
+
+                return result;
+            }
+
         } /* namespace win */
     } /* namespace ws */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/win/WinWindow.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/win/WinWindow.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/win/WinWindow.cpp	2025-03-01 12:42:55.528655973 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/win/WinWindow.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -93,6 +93,7 @@ namespace lsp
 
                 enPointer               = MP_DEFAULT;
                 enBorderStyle           = BS_SIZEABLE;
+                enState                 = WS_NORMAL;
                 nActions                = WA_ALL;
 
                 sMousePos.x             = 0;
@@ -654,6 +655,33 @@ namespace lsp
                         break;
                     }
 
+                    case WM_SYSCOMMAND:
+                    {
+                        // Check state
+                        switch (wParam & 0xfff0)
+                        {
+                            case SC_MAXIMIZE:
+                                ue.nType        = UIE_STATE;
+                                ue.nCode        = WS_MAXIMIZED;
+                                break;
+                            case SC_MINIMIZE:
+                                ue.nType        = UIE_STATE;
+                                ue.nCode        = WS_MINIMIZED;
+                                break;
+                            case SC_RESTORE:
+                                ue.nType        = UIE_STATE;
+                                ue.nCode        = WS_NORMAL;
+                                break;
+                            default:
+                                break;
+                        }
+
+                        if (ue.nType != UIE_UNKNOWN)
+                            handle_event(&ue);
+
+                        break;
+                    }
+
 //                    case WM_CHAR:
 //                        lsp_trace("WM_CHAR code=0x%x", wParam);
 //                        return 0;
@@ -737,6 +765,16 @@ namespace lsp
                         break;
                     }
 
+                    case UIE_STATE:
+                    {
+                        if (enState == ev->nCode)
+                            return STATUS_OK;
+
+                        lsp_trace("Window state changed to %d", int(ev->nCode));
+                        enState = static_cast<window_state_t>(ev->nCode);
+                        break;
+                    }
+
                     case UIE_RESIZE:
                     {
                         if (bWrapper)
@@ -921,6 +959,8 @@ namespace lsp
                 if (hWindow == NULL)
                     return STATUS_BAD_STATE;
 
+                commit_border_style(enBorderStyle, nActions);
+
                 hTransientFor       = NULL;
                 if (!has_parent())
                 {
@@ -934,7 +974,7 @@ namespace lsp
                         SWP_NOSIZE | SWP_NOMOVE // uFlags
                     );
                 }
-                ShowWindow(hWindow, SW_SHOW);
+                ShowWindow(hWindow, encode_window_state(enState));
                 return STATUS_OK;
             }
 
@@ -970,7 +1010,7 @@ namespace lsp
 //                    );
                 }
 
-                ShowWindow(hWindow, SW_SHOW);
+                ShowWindow(hWindow, encode_window_state(enState));
 
                 return STATUS_OK;
             }
@@ -1235,7 +1275,10 @@ namespace lsp
             status_t WinWindow::set_window_actions(size_t actions)
             {
                 if (hWindow == NULL)
-                    return STATUS_BAD_STATE;
+                {
+                    nActions = actions;
+                    return STATUS_OK;
+                }
 
                 return (nActions != actions) ? commit_border_style(enBorderStyle, actions) : STATUS_OK;
             }
@@ -1769,6 +1812,34 @@ namespace lsp
 
                 return false;
             }
+
+            DWORD WinWindow::encode_window_state(window_state_t state)
+            {
+                switch (state)
+                {
+                    case WS_MAXIMIZED: return SW_SHOWMAXIMIZED;
+                    case WS_MINIMIZED: return SW_SHOWMINIMIZED;
+                    default: break;
+                }
+                return SW_SHOWNORMAL;
+            }
+
+            status_t WinWindow::get_window_state(window_state_t *state)
+            {
+                *state      = enState;
+                return STATUS_OK;
+            }
+
+            status_t WinWindow::set_window_state(window_state_t state)
+            {
+                enState     = state;
+                if (!is_visible())
+                    return STATUS_OK;
+
+                ShowWindow(hWindow, encode_window_state(enState));
+                return STATUS_OK;
+            }
+
         } /* namespace win */
     } /* namespace ws */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/x11/X11CairoSurface.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/x11/X11CairoSurface.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/x11/X11CairoSurface.cpp	2025-03-01 12:42:55.532655950 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/x11/X11CairoSurface.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -60,6 +60,9 @@ namespace lsp
                 pFO             = NULL;
                 pRoot           = ::cairo_xlib_surface_create(dpy->x11display(), drawable, visual, width, height);
                 pSurface        = ::cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+                fOriginX        = 0.0f;
+                fOriginY        = 0.0f;
+
             #ifdef LSP_DEBUG
                 nNumClips       = 0;
             #endif /* LSP_DEBUG */
@@ -73,6 +76,9 @@ namespace lsp
                 pFO             = NULL;
                 pRoot           = NULL;
                 pSurface        = ::cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+                fOriginX        = 0.0f;
+                fOriginY        = 0.0f;
+
             #ifdef LSP_DEBUG
                 nNumClips       = 0;
             #endif /* LSP_DEBUG */
@@ -86,6 +92,9 @@ namespace lsp
                 pFO             = NULL;
                 pRoot           = NULL;
                 pSurface        = ::cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+                fOriginX        = 0.0f;
+                fOriginY        = 0.0f;
+
 //                pSurface        = ::cairo_surface_create_similar(surface, CAIRO_CONTENT_COLOR_ALPHA, width, height);
             #ifdef LSP_DEBUG
                 nNumClips       = 0;
@@ -199,7 +208,7 @@ namespace lsp
                     return;
 
                 // Draw one surface on another
-                float sw = fabs(sx * s->width()), sh = fabs(sy * s->height());
+                float sw = fabsf(sx * s->width()), sh = fabsf(sy * s->height());
                 ::cairo_save(pCR);
                 lsp_finally { ::cairo_restore(pCR); };
 
@@ -625,13 +634,58 @@ namespace lsp
                 cairo_fill(pCR);
             }
 
+            void X11CairoSurface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, float left, float top, float width, float height)
+            {
+                if (pCR == NULL)
+                    return;
+                surface_type_t type = s->type();
+                if ((type != ST_IMAGE) && (type != ST_SIMILAR))
+                    return;
+
+                X11CairoSurface *cs = static_cast<X11CairoSurface *>(s);
+                if (cs->pSurface == NULL)
+                    return;
+
+                // Draw one surface on another
+                ::cairo_save(pCR);
+                lsp_finally { ::cairo_restore(pCR); };
+
+                cairo_pattern_t *p = ::cairo_pattern_create_for_surface(cs->pSurface);
+                if (p == NULL)
+                    return;
+                lsp_finally { ::cairo_pattern_destroy(p); };
+
+                cairo_matrix_t matrix;
+                matrix.xx       = 1.0f;
+                matrix.xy       = 0.0f;
+                matrix.x0       = -(fOriginX + left);
+
+                matrix.yx       = 0.0f;
+                matrix.yy       = 1.0f;
+                matrix.y0       = -(fOriginY + top);
+
+                ::cairo_pattern_set_matrix(p, &matrix);
+                ::cairo_pattern_set_extend(p, CAIRO_EXTEND_NONE);
+                ::cairo_pattern_set_filter(p, CAIRO_FILTER_BILINEAR);
+
+                ::cairo_set_source(pCR, p);
+                drawRoundRect(left, top, width, height, radius, mask);
+                ::cairo_clip(pCR);
+                ::cairo_paint_with_alpha(pCR, 1.0f - alpha);
+            }
+
+            void X11CairoSurface::fill_rect(ISurface *s, float alpha, size_t mask, float radius, const ws::rectangle_t *r)
+            {
+                fill_rect(s, alpha, mask, radius, r->nLeft, r->nTop, r->nWidth, r->nHeight);
+            }
+
             void X11CairoSurface::fill_sector(const Color &c, float x, float y, float r, float a1, float a2)
             {
                 if (pCR == NULL)
                     return;
 
                 setSourceRGBA(c);
-                if (fabs(a2 - a1) < 2.0f * M_PI)
+                if (fabsf(a2 - a1) < 2.0f * M_PI)
                 {
                     cairo_move_to(pCR, x, y);
 
@@ -857,18 +911,19 @@ namespace lsp
                         lsp_finally{ cairo_surface_destroy(fs); };
 
                         setSourceRGBA(color);
-                        x += tr.x_bearing;
-                        y += tr.y_bearing;
-                        cairo_mask_surface(pCR, fs, x, y);
+                        const float sx  = x + tr.x_bearing;
+                        const float sy  = y + tr.y_bearing;
+                        cairo_mask_surface(pCR, fs, sx, sy);
 
                         // Draw underline if required
                         if (f.is_underline())
                         {
-                            float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float bottom  = y + width * 1.5f;
 
                             cairo_set_line_width(pCR, width);
-                            cairo_move_to(pCR, x, y + tr.y_advance + 1 + width);
-                            cairo_line_to(pCR, x + tr.x_advance, y + tr.y_advance + 1 + width);
+                            cairo_move_to(pCR, sx, bottom);
+                            cairo_line_to(pCR, sx + tr.x_advance, bottom);
                             cairo_stroke(pCR);
                         }
 
@@ -929,18 +984,19 @@ namespace lsp
                         lsp_finally{ cairo_surface_destroy(fs); };
 
                         setSourceRGBA(color);
-                        x += tr.x_bearing;
-                        y += tr.y_bearing;
-                        cairo_mask_surface(pCR, fs, x, y);
+                        const float sx = x + tr.x_bearing;
+                        const float sy = y + tr.y_bearing;
+                        cairo_mask_surface(pCR, fs, sx, sy);
 
                         // Draw underline if required
                         if (f.is_underline())
                         {
-                            float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float bottom  = y + width * 1.5f;
 
                             cairo_set_line_width(pCR, width);
-                            cairo_move_to(pCR, x, y + tr.y_advance + 1 + width);
-                            cairo_line_to(pCR, x + tr.x_advance, y + tr.y_advance + 1 + width);
+                            cairo_move_to(pCR, sx, bottom);
+                            cairo_line_to(pCR, sx + tr.x_advance, bottom);
                             cairo_stroke(pCR);
                         }
 
@@ -1020,11 +1076,12 @@ namespace lsp
                         // Draw underline if required
                         if (f.is_underline())
                         {
-                            float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float bottom  = fy + width * 1.5f;
 
                             cairo_set_line_width(pCR, width);
-                            cairo_move_to(pCR, fx, fy + tr.y_advance + 1 + width);
-                            cairo_line_to(pCR, fx + tr.x_advance, fy + tr.y_advance + 1 + width);
+                            cairo_move_to(pCR, fx, bottom);
+                            cairo_line_to(pCR, fx + tr.x_advance, bottom);
                             cairo_stroke(pCR);
                         }
 
@@ -1044,8 +1101,8 @@ namespace lsp
 
                 r_w   = te.x_advance;
                 r_h   = -te.y_bearing;
-                fx    = x - te.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx;
-                fy    = y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy;
+                fx    = truncf(x - te.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx);
+                fy    = truncf(y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy);
 
                 setSourceRGBA(color);
                 cairo_move_to(pCR, fx, fy);
@@ -1094,18 +1151,19 @@ namespace lsp
                         setSourceRGBA(color);
                         r_w   = tr.x_advance;
                         r_h   = -tr.y_bearing;
-                        fx    = x - tr.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx;
-                        fy    = y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy;
+                        fx    = truncf(x - tr.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx);
+                        fy    = truncf(y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy);
                         cairo_mask_surface(pCR, fs, fx + tr.x_bearing, fy + tr.y_bearing);
 
                         // Draw underline if required
                         if (f.is_underline())
                         {
-                            float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float width = lsp_max(1.0f, f.get_size() / 12.0f);
+                            const float bottom  = fy + width * 1.5f;
 
                             cairo_set_line_width(pCR, width);
-                            cairo_move_to(pCR, fx, fy + tr.y_advance + 1 + width);
-                            cairo_line_to(pCR, fx + tr.x_advance, fy + tr.y_advance + 1 + width);
+                            cairo_move_to(pCR, fx, bottom);
+                            cairo_line_to(pCR, fx + tr.x_advance, bottom);
                             cairo_stroke(pCR);
                         }
 
@@ -1129,8 +1187,8 @@ namespace lsp
 
                 r_w   = te.x_advance;
                 r_h   = -te.y_bearing;
-                fx    = x - te.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx;
-                fy    = y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy;
+                fx    = truncf(x - te.x_bearing - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx);
+                fy    = truncf(y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy);
 
                 setSourceRGBA(color);
                 cairo_move_to(pCR, fx, fy);
@@ -1187,7 +1245,7 @@ namespace lsp
                 setSourceRGBA(color);
                 cairo_set_line_width(pCR, width);
 
-                if (fabs(a) > fabs(b))
+                if (fabsf(a) > fabsf(b))
                 {
                     cairo_move_to(pCR, - c / a, 0.0f);
                     cairo_line_to(pCR, -(c + b*nHeight)/a, nHeight);
@@ -1211,7 +1269,7 @@ namespace lsp
                 setSourceRGBA(color);
                 cairo_set_line_width(pCR, width);
 
-                if (fabs(a) > fabs(b))
+                if (fabsf(a) > fabsf(b))
                 {
                     cairo_move_to(pCR, roundf(-(c + b*top)/a), roundf(top));
                     cairo_line_to(pCR, roundf(-(c + b*bottom)/a), roundf(bottom));
@@ -1237,7 +1295,7 @@ namespace lsp
                 X11CairoGradient *cg = static_cast<X11CairoGradient *>(g);
                 cg->apply(pCR);
 
-                if (fabs(a1) > fabs(b1))
+                if (fabsf(a1) > fabsf(b1))
                 {
                     cairo_move_to(pCR, ssize_t(-(c1 + b1*top)/a1), ssize_t(top));
                     cairo_line_to(pCR, ssize_t(-(c1 + b1*bottom)/a1), ssize_t(bottom));
@@ -1248,7 +1306,7 @@ namespace lsp
                     cairo_line_to(pCR, ssize_t(right), ssize_t(-(c1 + a1*right)/b1));
                 }
 
-                if (fabs(a2) > fabs(b2))
+                if (fabsf(a2) > fabsf(b2))
                 {
                     cairo_line_to(pCR, ssize_t(-(c2 + b2*bottom)/a2), ssize_t(bottom));
                     cairo_line_to(pCR, ssize_t(-(c2 + b2*top)/a2), ssize_t(top));
@@ -1272,7 +1330,7 @@ namespace lsp
                 r = lsp_max(0.0f, r - width * 0.5f);
                 setSourceRGBA(c);
                 cairo_set_line_width(pCR, width);
-                if (fabs(a2 - a1) >= 2.0f * M_PI)
+                if (fabsf(a2 - a1) >= 2.0f * M_PI)
                     cairo_arc(pCR, x, y, r, 0.0f, 2.0f * M_PI);
                 else if (a2 < a1)
                     cairo_arc_negative(pCR, x, y, r, a1, a2);
@@ -1548,6 +1606,37 @@ namespace lsp
                 return old;
             }
 
+            ws::point_t X11CairoSurface::set_origin(const ws::point_t & origin)
+            {
+                return set_origin(origin.nLeft, origin.nTop);
+            }
+
+            ws::point_t X11CairoSurface::set_origin(ssize_t left, ssize_t top)
+            {
+                ws::point_t result;
+                result.nLeft    = fOriginX;
+                result.nTop     = fOriginY;
+
+                if (pCR == NULL)
+                    return result;
+
+                fOriginX        = left;
+                fOriginY        = top;
+
+                cairo_matrix_t matrix;
+                matrix.xx       = 1.0f;
+                matrix.xy       = 0.0f;
+                matrix.x0       = fOriginX;
+
+                matrix.yx       = 0.0f;
+                matrix.yy       = 1.0f;
+                matrix.y0       = fOriginY;
+
+                cairo_set_matrix(pCR, &matrix);
+
+                return result;
+            }
+
             void X11CairoSurface::clip_begin(float x, float y, float w, float h)
             {
                 if (pCR == NULL)
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/x11/X11Display.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/x11/X11Display.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/x11/X11Display.cpp	2025-03-01 12:42:55.532655950 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/x11/X11Display.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -679,8 +679,7 @@ namespace lsp
 //                        lsp_trace("XPropertyEvent for window 0x%lx, property %ld (%s), state=%d", long(sc->window), long(sc->atom), name, int(sc->state));
                         ::XFree(name);
                         #endif
-                        handle_property_notify(sc);
-                        return true;
+                        return handle_property_notify(sc);
                     }
                     case SelectionClear:
                     {
@@ -894,8 +893,10 @@ namespace lsp
                 }
             }
 
-            void X11Display::handle_property_notify(XPropertyEvent *ev)
+            bool X11Display::handle_property_notify(XPropertyEvent *ev)
             {
+                size_t matched = 0;
+
                 for (size_t i=0, n=sAsync.size(); i<n; ++i)
                 {
                     x11_async_t *task = sAsync.uget(i);
@@ -907,17 +908,24 @@ namespace lsp
                     {
                         case X11ASYNC_CB_RECV:
                             if (task->cb_recv.hProperty == ev->atom)
+                            {
+                                ++matched;
                                 task->result = handle_property_notify(&task->cb_recv, ev);
+                            }
                             break;
                         case X11ASYNC_DND_RECV:
                             if ((task->dnd_recv.hProperty == ev->atom) &&
                                 (task->dnd_recv.hTarget == ev->window))
+                            {
+                                ++matched;
                                 task->result = handle_property_notify(&task->dnd_recv, ev);
+                            }
                             break;
                         case X11ASYNC_CB_SEND:
                             if ((task->cb_send.hProperty == ev->atom) &&
                                 (task->cb_send.hRequestor == ev->window))
                             {
+                                ++matched;
                                 task->result = update_status(task->result, handle_property_notify(&task->cb_send, ev));
                             }
                             break;
@@ -928,6 +936,8 @@ namespace lsp
                     if (task->result != STATUS_OK)
                         task->cb_common.bComplete   = true;
                 }
+
+                return matched > 0;
             }
 
             void X11Display::complete_async_tasks()
@@ -1684,8 +1694,8 @@ namespace lsp
 
                     case ClientMessage:
                     {
-                        XClientMessageEvent *ce = &ev->xclient;
-                        Atom type = ce->message_type;
+                        const XClientMessageEvent *ce = &ev->xclient;
+                        const Atom type = ce->message_type;
 
                         if (type == sAtoms.X11_WM_PROTOCOLS)
                         {
@@ -1711,19 +1721,83 @@ namespace lsp
                         break;
                     }
 
+                    case PropertyNotify:
+                    {
+                        const XPropertyEvent *pe = &ev->xproperty;
+
+                        if (pe->atom == sAtoms.X11__NET_WM_STATE)
+                        {
+                            // Ensure that we're still handling events for the window
+                            if (find_window(pe->window) != NULL)
+                            {
+                                lsp_trace("PropertyNotify hWindow = 0x%lx", pe->window);
+
+                                window_state_t state = WS_NORMAL;
+                                read_window_state(&state, pe->window);
+
+                                ue->nType       = UIE_STATE;
+                                ue->nCode       = state;
+                            }
+                        }
+                        break;
+                    }
+
                     default:
                         break;
                 }
             }
 
+            status_t X11Display::read_window_state(window_state_t *state, Window wnd)
+            {
+                uint8_t *data   = NULL;
+                Atom xtype      = 0;
+                size_t size     = 0;
+
+                // status_t X11Display::read_property(Window wnd, Atom property, Atom ptype, uint8_t **data, size_t *size, Atom *type)
+                status_t res    = read_property(wnd, sAtoms.X11__NET_WM_STATE, sAtoms.X11_XA_ATOM, &data, &size, &xtype);
+                if ((res != STATUS_OK) || (data == NULL) || (xtype != sAtoms.X11_XA_ATOM))
+                    return STATUS_INVALID_VALUE;
+                lsp_finally { ::free(data); };
+
+                lsp_trace("NET_WM_STATE res=%d, xtype=%d, size=%d", int(res), int(xtype), int(size));
+
+                const uint32_t *list    = reinterpret_cast<const uint32_t *>(data); // read_property compresses long -> uint32_t
+                for (size_t i=0, count = size/sizeof(uint32_t); i<count; ++i)
+                {
+                    if (list[i] == sAtoms.X11__NET_WM_STATE_HIDDEN)
+                    {
+                        *state      = WS_MINIMIZED;
+                        return STATUS_OK;
+                    }
+                    else if (list[i] == sAtoms.X11__NET_WM_STATE_MAXIMIZED_HORZ)
+                    {
+                        *state      = WS_MAXIMIZED;
+                        return STATUS_OK;
+                    }
+                    else if (list[i] == sAtoms.X11__NET_WM_STATE_MAXIMIZED_VERT)
+                    {
+                        *state      = WS_MAXIMIZED;
+                        return STATUS_OK;
+                    }
+                    else if (list[i] == sAtoms.X11__NET_WM_STATE_FULLSCREEN)
+                    {
+                        *state      = WS_MAXIMIZED;
+                        return STATUS_OK;
+                    }
+                }
+
+                *state          = WS_NORMAL;
+                return STATUS_OK;
+            }
+
             void X11Display::handle_event(XEvent *ev)
             {
                 if (ev->type > LASTEvent)
                     return;
 
                 #if 0
-                lsp_trace("Received event: %d (%s), serial = %ld, window = %x",
-                    int(ev->type), event_name(ev->type), long(ev->xany.serial), int(ev->xany.window));
+//                lsp_trace("Received event: %d (%s), serial = %ld, window = %x",
+//                    int(ev->type), event_name(ev->type), long(ev->xany.serial), int(ev->xany.window));
 
 
                 if (ev->type == PropertyNotify)
@@ -1743,45 +1817,20 @@ namespace lsp
                     complete_async_tasks();
                     return;
                 }
-
-                if (handle_drag_event(ev))
+                else if (handle_drag_event(ev))
                 {
                     complete_async_tasks();
                     return;
                 }
 
-                // Find the target window
-                X11Window *target = NULL;
-                for (size_t i=0, nwnd=vWindows.size(); i<nwnd; ++i)
-                {
-                    X11Window *wnd = vWindows[i];
-                    if (wnd == NULL)
-                        continue;
-                    if (wnd->x11handle() == ev->xany.window)
-                    {
-                        target      = wnd;
-                        break;
-                    }
-//                    else if ((ev->type == ConfigureNotify) &&
-//                            (wnd->x11parent() != None) &&
-//                            (wnd->x11parent() == ev->xany.window))
-//                    {
-//                        lsp_trace("resize window: handle=%lx, width=%d, height=%d",
-//                                long(wnd->x11handle()),
-//                                int(ev->xconfigure.width),
-//                                int(ev->xconfigure.height));
-//                        ::XResizeWindow(pDisplay, wnd->x11handle(), ev->xconfigure.width, ev->xconfigure.height);
-//                        ::XFlush(pDisplay);
-//                        return;
-//                    }
-                }
-
                 // Analyze event type
                 event_t ue;
                 decode_event(&ue, ev);
                 if (ue.nType == UIE_UNKNOWN)
                     return;
 
+                // Find the target window
+                X11Window *target   = find_window(ev->xany.window);
                 Window child        = None;
                 event_t se          = ue;
 
@@ -3947,6 +3996,20 @@ namespace lsp
                 XFlush(pDisplay);
             }
 
+            status_t X11Display::get_file_descriptor(int *fd)
+            {
+                if (fd == NULL)
+                    return STATUS_BAD_ARGUMENTS;
+
+                if (pDisplay == NULL)
+                    return STATUS_BAD_STATE;
+
+                const int x11_fd    = ConnectionNumber(pDisplay);
+                *fd     = x11_fd;
+
+                return STATUS_OK;
+            }
+
         } /* namespace x11 */
     } /* namespace ws */
 } /* namespace lsp */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/x11/X11GLSurface.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/x11/X11GLSurface.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/x11/X11GLSurface.cpp	2025-03-01 12:42:55.532655950 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/x11/X11GLSurface.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -199,22 +199,21 @@ namespace lsp
                     lsp_finally { sBatch.end(); };
 
                     // Draw primitives
-                    x                  += tr.x_bearing;
-                    y                  += tr.y_bearing;
-
                     const uint32_t ci   = uint32_t(res);
-                    const float xe      = x + bitmap->width;
-                    const float ye      = y + bitmap->height;
+                    const float xs      = x + tr.x_bearing;
+                    const float ys      = y + tr.y_bearing;
+                    const float xe      = xs + bitmap->width;
+                    const float ye      = ys + bitmap->height;
 
                     const uint32_t vi   = sBatch.next_vertex_index();
                     gl::vertex_t *v     = sBatch.add_vertices(4);
                     if (v == NULL)
                         return;
 
-                    ADD_TVERTEX(v, ci, x, y, rect.sb, rect.tb);
-                    ADD_TVERTEX(v, ci, x, ye, rect.sb, rect.te);
+                    ADD_TVERTEX(v, ci, xs, ys, rect.sb, rect.tb);
+                    ADD_TVERTEX(v, ci, xs, ye, rect.sb, rect.te);
                     ADD_TVERTEX(v, ci, xe, ye, rect.se, rect.te);
-                    ADD_TVERTEX(v, ci, xe, y, rect.se, rect.tb);
+                    ADD_TVERTEX(v, ci, xe, ys, rect.se, rect.tb);
 
                     sBatch.hrectangle(vi, vi + 1, vi + 2, vi + 3);
                 }
@@ -227,10 +226,10 @@ namespace lsp
                         return;
                     lsp_finally { sBatch.end(); };
 
-                    const float width = lsp_max(1.0f, f.get_size() / 12.0f);
-                    fill_rect(uint32_t(res),
-                        x, y + tr.y_advance + 1.0f + width * 0.5f,
-                        x + tr.x_advance, y + tr.y_advance + 1.0f + width * 1.5f);
+                    const float width   = lsp_max(1.0f, f.get_size() / 12.0f);
+                    const float xs      = x + tr.x_bearing;
+                    const float bottom  = y + width * 2.0f;
+                    fill_rect(uint32_t(res), xs, bottom - width, xs + tr.x_advance, bottom);
                 }
 
             #endif /* USE_LIBFREETYPE */
@@ -287,8 +286,8 @@ namespace lsp
                     r_h                 = -tr.y_bearing;
                     fx                  = truncf(x - float(tr.x_bearing) - r_w * 0.5f + (r_w + 4.0f) * 0.5f * dx);
                     fy                  = truncf(y + r_h * 0.5f - (r_h + 4.0f) * 0.5f * dy);
-                    x                   = fx + float(tr.x_bearing);
-                    y                   = fy + float(tr.y_bearing);
+                    x                   = fx + tr.x_bearing;
+                    y                   = fy + tr.y_bearing;
 
                     const uint32_t ci   = uint32_t(res);
                     const float xe      = x + bitmap->width;
@@ -315,10 +314,10 @@ namespace lsp
                         return;
                     lsp_finally { sBatch.end(); };
 
-                    const float width = lsp_max(1.0f, f.get_size() / 12.0f);
-                    fill_rect(uint32_t(res),
-                        fx, fy + tr.y_advance + 1.0f + width * 0.5f,
-                        fx + tr.x_advance, fy + tr.y_advance + 1.0f + width * 1.5f);
+                    x                   = x + tr.x_bearing;
+                    const float width   = lsp_max(1.0f, f.get_size() / 12.0f);
+                    const float bottom  = fy + width * 2.0f;
+                    fill_rect(uint32_t(res), x, bottom - width, x + tr.x_advance, bottom);
                 }
 
             #endif /* USE_LIBFREETYPE */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/main/x11/X11Window.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/x11/X11Window.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/main/x11/X11Window.cpp	2025-03-01 12:42:55.532655950 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/main/x11/X11Window.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -179,6 +179,7 @@ namespace lsp
                 nActions                = WA_SINGLE;
                 nFlags                  = 0;
                 enPointer               = MP_DEFAULT;
+                enState                 = WS_NORMAL;
 
                 sSize.nLeft             = 0;
                 sSize.nTop              = 0;
@@ -431,6 +432,8 @@ namespace lsp
 
             void X11Window::destroy()
             {
+                lsp_trace("hWindow=0x%lx", hWindow);
+
                 // Drop surface
                 hide();
                 drop_surface();
@@ -700,6 +703,16 @@ namespace lsp
                         break;
                     }
 
+                    case UIE_STATE:
+                    {
+                        if (ev->nCode == enState)
+                            return STATUS_OK;
+
+                        enState             = static_cast<window_state_t>(ev->nCode);
+                        lsp_trace("Window state changed to: %d", int(ev->nCode));
+                        break;
+                    }
+
                     case UIE_CLOSE:
                     {
 //                        lsp_trace("close request on window");
@@ -762,6 +775,11 @@ namespace lsp
                 if (hWindow == None)
                     return STATUS_OK;
 
+                // Set window state
+                status_t res = set_window_state(enState);
+                if (res != STATUS_OK)
+                    return res;
+
                 // Send changes to X11
                 const x11_atoms_t &a = pX11Display->atoms();
 
@@ -803,6 +821,7 @@ namespace lsp
                         atoms[n_items++] = a.X11__NET_WM_WINDOW_TYPE_NORMAL;
                         break;
                 }
+                atoms[n_items] = 0;
 
 //                lsp_trace("Setting _NET_WM_WINDOW_TYPE...");
                 XChangeProperty(
@@ -816,41 +835,6 @@ namespace lsp
                     n_items
                 );
 
-                // Set window state
-                n_items = 0;
-                switch (style)
-                {
-                    case BS_DIALOG:         // Not resizable; no minimize/maximize menu
-                        atoms[n_items++] = a.X11__NET_WM_STATE_MODAL;
-                        if (hTransientFor != None)
-                            atoms[n_items++] = a.X11__NET_WM_STATE_SKIP_TASKBAR;
-                        break;
-                    case BS_NONE:           // Not resizable; no visible border line
-                    case BS_POPUP:
-                    case BS_COMBO:
-                    case BS_DROPDOWN:
-                        atoms[n_items++] = a.X11__NET_WM_STATE_ABOVE;
-                        atoms[n_items++] = a.X11__NET_WM_STATE_SKIP_TASKBAR;
-                        break;
-
-                    case BS_SINGLE:         // Not resizable; minimize/maximize menu
-                    case BS_SIZEABLE:       // Standard resizable border
-                        break;
-                }
-
-//                lsp_trace("Setting _NET_WM_STATE...");
-                XChangeProperty(
-                    pX11Display->x11display(),
-                    hWindow,
-                    a.X11__NET_WM_STATE,
-                    a.X11_XA_ATOM,
-                    32,
-                    PropModeReplace,
-                    reinterpret_cast<unsigned char *>(&atoms[0]),
-                    n_items
-                );
-
-
                 // Set MOTIF hints
 //                lsp_trace("Setting _MOTIF_WM_HINTS...");
                 XChangeProperty(
@@ -1221,21 +1205,23 @@ namespace lsp
                 }
 
                 // Bring window to top
-
-                XEvent ev;
-                ev.xclient.type = ClientMessage;
-                ev.xclient.serial = 0;
-                ev.xclient.send_event = True;
-                ev.xclient.message_type = pX11Display->atoms().X11__NET_ACTIVE_WINDOW;
-                ev.xclient.window = hWindow;
-                ev.xclient.format = 32;
-
-                XSendEvent(
-                    dpy,
-                    pX11Display->x11root(),
-                    False,
-                    SubstructureRedirectMask | SubstructureNotifyMask,
-                    &ev);
+                if (enState != WS_MINIMIZED)
+                {
+                    XEvent ev;
+                    ev.xclient.type = ClientMessage;
+                    ev.xclient.serial = 0;
+                    ev.xclient.send_event = True;
+                    ev.xclient.message_type = pX11Display->atoms().X11__NET_ACTIVE_WINDOW;
+                    ev.xclient.window = hWindow;
+                    ev.xclient.format = 32;
+
+                    XSendEvent(
+                        dpy,
+                        pX11Display->x11root(),
+                        False,
+                        SubstructureRedirectMask | SubstructureNotifyMask,
+                        &ev);
+                }
 
                 return STATUS_OK;
             }
@@ -1750,6 +1736,188 @@ namespace lsp
 
                 return STATUS_OK;
             }
+
+            status_t X11Window::get_window_state(window_state_t *state)
+            {
+                *state = enState;
+                return STATUS_OK;
+            }
+
+            template <class T>
+            inline bool find_atom(Atom lookup, const T *list, size_t count)
+            {
+                for (size_t i=0; i<count; ++i)
+                    if (list[i] == lookup)
+                        return true;
+                return false;
+            }
+
+            status_t X11Window::set_window_state(window_state_t state)
+            {
+                // Update state
+                enState     = state;
+                if (hWindow == None)
+                    return STATUS_OK;
+
+                lsp_trace("hWindow = 0x%lx, state = %d", hWindow, state);
+
+                // Set window state
+                Atom atoms[32];
+                size_t n_items = 0;
+                const x11_atoms_t &a = pX11Display->atoms();
+
+                switch (enBorderStyle)
+                {
+                    case BS_DIALOG:         // Not resizable; no minimize/maximize menu
+                        atoms[n_items++] = a.X11__NET_WM_STATE_MODAL;
+                        if (hTransientFor != None)
+                            atoms[n_items++] = a.X11__NET_WM_STATE_SKIP_TASKBAR;
+                        break;
+                    case BS_NONE:           // Not resizable; no visible border line
+                    case BS_POPUP:
+                    case BS_COMBO:
+                    case BS_DROPDOWN:
+                        atoms[n_items++] = a.X11__NET_WM_STATE_ABOVE;
+                        atoms[n_items++] = a.X11__NET_WM_STATE_SKIP_TASKBAR;
+                        break;
+
+                    case BS_SINGLE:         // Not resizable; minimize/maximize menu
+                    case BS_SIZEABLE:       // Standard resizable border
+                        break;
+                }
+
+                if (enState == WS_MAXIMIZED)
+                {
+                    atoms[n_items++]    = a.X11__NET_WM_STATE_MAXIMIZED_HORZ;
+                    atoms[n_items++]    = a.X11__NET_WM_STATE_MAXIMIZED_VERT;
+                }
+                else if (enState == WS_MINIMIZED)
+                    atoms[n_items++]    = a.X11__NET_WM_STATE_HIDDEN;
+
+                // Read old window state before changing it
+                uint8_t *data   = NULL;
+                Atom xtype      = 0;
+                size_t size     = 0;
+
+                lsp_trace("hWindow = 0x%lx, state = %d", hWindow, state);
+                pX11Display->read_property(hWindow, a.X11__NET_WM_STATE, a.X11_XA_ATOM, &data, &size, &xtype);
+                lsp_finally {
+                    if (data != NULL)
+                        free(data);
+                };
+
+                // Set new window state
+//                lsp_trace("Setting _NET_WM_STATE...");
+                XChangeProperty(
+                    pX11Display->x11display(),
+                    hWindow,
+                    a.X11__NET_WM_STATE,
+                    a.X11_XA_ATOM,
+                    32,
+                    PropModeReplace,
+                    reinterpret_cast<unsigned char *>(&atoms[0]),
+                    n_items
+                );
+
+                Display *dpy        = pX11Display->x11display();
+                Window root         = pX11Display->hRootWnd;
+
+                XEvent xe;
+                XClientMessageEvent *xev = &xe.xclient;
+                xev->type           = ClientMessage;
+                xev->serial         = 0;
+                xev->send_event     = True;
+                xev->display        = dpy;
+                xev->window         = hWindow;
+                xev->message_type   = a.X11__NET_WM_STATE;
+                xev->format         = 32;
+                xev->data.l[0]      = 0;        // _NET_WM_STATE_REMOVE
+                xev->data.l[1]      = 0;
+                xev->data.l[2]      = 0;
+                xev->data.l[3]      = 1;        // Source indicator: Normal application
+                xev->data.l[4]      = 0;
+
+                const uint32_t *old_atoms   = reinterpret_cast<const uint32_t *>(data); // read_property compresses long -> uint32_t
+                const size_t old_n_items    = size / sizeof(uint32_t);
+
+                // Remove old properties
+                bool full_removed   = false;
+                for (size_t i=0; i<old_n_items; ++i)
+                {
+                    const Atom atom     = old_atoms[i];
+                    if (!find_atom(atom, atoms, n_items))
+                    {
+                        if ((atom == a.X11__NET_WM_STATE_MAXIMIZED_HORZ) ||
+                            (atom == a.X11__NET_WM_STATE_MAXIMIZED_VERT))
+                        {
+                            if (!full_removed)
+                            {
+                                xev->data.l[1]  = a.X11__NET_WM_STATE_MAXIMIZED_HORZ;
+                                xev->data.l[2]  = a.X11__NET_WM_STATE_MAXIMIZED_VERT;
+                                full_removed    = true;
+
+                                ::XSendEvent(dpy, root, False, SubstructureNotifyMask, &xe);
+                            }
+                        }
+                        else
+                        {
+                            xev->data.l[1]  = atom;
+                            xev->data.l[2]  = 0;
+
+                            ::XSendEvent(dpy, root, False, SubstructureNotifyMask, &xe);
+                        }
+                    }
+                }
+
+                // Add new properties
+                xev->data.l[0]      = 1;        // _NET_WM_STATE_ADD
+                bool full_added     = false;
+
+                for (size_t i=0; i<n_items; ++i)
+                {
+                    const Atom atom     = atoms[i];
+                    if (!find_atom(atom, old_atoms, old_n_items))
+                    {
+                        if ((atom == a.X11__NET_WM_STATE_MAXIMIZED_HORZ) ||
+                            (atom == a.X11__NET_WM_STATE_MAXIMIZED_VERT))
+                        {
+                            if (!full_added)
+                            {
+                                xev->data.l[1]  = a.X11__NET_WM_STATE_MAXIMIZED_HORZ;
+                                xev->data.l[2]  = a.X11__NET_WM_STATE_MAXIMIZED_VERT;
+                                full_added      = true;
+
+                                ::XSendEvent(dpy, root, False, SubstructureNotifyMask, &xe);
+                            }
+                        }
+                        else
+                        {
+                            xev->data.l[1]  = atom;
+                            xev->data.l[2]  = 0;
+
+                            ::XSendEvent(dpy, root, False, SubstructureNotifyMask, &xe);
+                        }
+                    }
+                }
+
+                // Iconify window if state is minimized
+                if (enState == WS_MINIMIZED)
+                {
+                    xev->message_type   = a.X11_WM_CHANGE_STATE;
+                    xev->format         = 32;
+                    xev->data.l[0]      = IconicState;
+                    xev->data.l[1]      = 0;
+                    xev->data.l[2]      = 0;
+                    xev->data.l[3]      = 0;
+                    xev->data.l[4]      = 0;
+
+                    ::XSendEvent(dpy, root, False, SubstructureRedirectMask | SubstructureNotifyMask, &xe);
+                }
+
+                pX11Display->flush();
+
+                return STATUS_OK;
+            }
 
         } /* namespace x11 */
     } /* namespace ws */
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/font.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/font.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/font.cpp	2025-03-01 12:42:55.532655950 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/font.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -20,6 +20,7 @@
  */
 
 #include <lsp-plug.in/ws/factory.h>
+#include <lsp-plug.in/common/debug.h>
 #include <lsp-plug.in/ws/IEventHandler.h>
 #include <lsp-plug.in/test-fw/mtest.h>
 
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/origin.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/origin.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/origin.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/origin.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 28 мар. 2025 г.
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/ws/factory.h>
+#include <lsp-plug.in/ws/IEventHandler.h>
+#include <lsp-plug.in/stdlib/math.h>
+#include <lsp-plug.in/test-fw/mtest.h>
+
+MTEST_BEGIN("ws.display", origin)
+
+    class Handler: public ws::IEventHandler
+    {
+        private:
+            test_type_t    *pTest;
+            ws::IWindow    *pWnd;
+
+        public:
+            inline Handler(test_type_t *test, ws::IWindow *wnd)
+            {
+                pTest       = test;
+                pWnd        = wnd;
+            }
+
+            virtual status_t handle_event(const ws::event_t *ev)
+            {
+                switch (ev->nType)
+                {
+                    case ws::UIE_REDRAW:
+                    {
+                        Color c(0.0f, 0.5f, 0.75f);
+                        ws::ISurface *s = pWnd->get_surface();
+                        if (s == NULL)
+                            return STATUS_OK;
+
+                        // Perform drawing
+                        s->begin();
+                        s->clear(c);
+
+                        // Center: circle
+                        const ssize_t dw = s->width() / 4;
+                        const ssize_t dh = s->height() / 4;
+
+                        c.set_rgb24(0xff0000);
+                        const ws::point_t origin = s->set_origin(dw * 2, dh * 2);
+                        lsp_finally {
+                            s->set_origin(origin);
+                        };
+                        s->fill_circle(c, 0.0f, 0.0f, 32);
+
+                        // Left top: triangle
+                        c.set_rgb24(0x00ff00);
+                        s->set_origin(dw, dh);
+                        {
+                            s->fill_triangle(c,
+                                32.0f, 0.0f,
+                                cosf(2.0f * M_PI / 3.0f) * 32.0f, sinf(2.0f * M_PI / 3.0f) * 32.0f,
+                                cosf(4.0f * M_PI / 3.0f) * 32.0f, sinf(4.0f * M_PI / 3.0f) * 32.0f);
+                        }
+
+                        // Right top: solid quad
+                        c.set_rgb24(0x0000ff);
+                        s->set_origin(dw * 3, dh);
+                        s->fill_rect(c,
+                            SURFMASK_NO_CORNER,
+                            0.0f,
+                            -32.0f, -32.0f,
+                            64.0f, 64.0f);
+
+                        // Left bottom: linear gradient triangle
+                        s->set_origin(dw, dh * 3);
+                        ws::IGradient *g = s->linear_gradient(-16.0f, -16.0f, 16.0f, 16.0f);
+                        if (g != NULL)
+                        {
+                            lsp_finally {
+                                delete g;
+                                g = NULL;
+                            };
+
+                            c.set_rgb24(0x0000ff);
+                            c.alpha(0.25f);
+                            g->set_start(c);
+                            c.set_rgb24(0xffff00);
+                            c.alpha(0.0f);
+                            g->set_stop(c);
+
+                            s->fill_triangle(g,
+                                32.0f, 0.0f,
+                                cosf(2.0f * M_PI / 3.0f) * 32.0f, sinf(2.0f * M_PI / 3.0f) * 32.0f,
+                                cosf(4.0f * M_PI / 3.0f) * 32.0f, sinf(4.0f * M_PI / 3.0f) * 32.0f);
+                        }
+
+                        // Right bottom: radial gradient quad
+                        s->set_origin(dw * 3, dh * 3);
+
+                        g = s->radial_gradient(-8.0f, -8.0f, -8.0f, -8.0f, 64.0f);
+                        if (g != NULL)
+                        {
+                            lsp_finally {
+                                delete g;
+                                g = NULL;
+                            };
+
+                            c.set_rgb24(0xff00ff);
+                            c.alpha(0.0f);
+                            g->set_start(c);
+                            c.set_rgb24(0x00ffff);
+                            c.alpha(0.25f);
+                            g->set_stop(c);
+
+                            s->fill_rect(g,
+                                SURFMASK_NO_CORNER,
+                                0.0f,
+                                -32.0f, -32.0f,
+                                64.0f, 64.0f);
+                        }
+
+                        s->end();
+
+                        return STATUS_OK;
+                    }
+
+                    case ws::UIE_CLOSE:
+                    {
+                        pWnd->hide();
+                        pWnd->display()->quit_main();
+                        break;
+                    }
+
+                    default:
+                        return IEventHandler::handle_event(ev);
+                }
+
+                return STATUS_OK;
+            }
+    };
+
+    MTEST_MAIN
+    {
+        ws::IDisplay *dpy = ws::create_display(0, NULL);
+        MTEST_ASSERT(dpy != NULL);
+        lsp_finally { ws::free_display(dpy); };
+
+        ws::IWindow *wnd = dpy->create_window();
+        MTEST_ASSERT(wnd != NULL);
+        lsp_finally {
+            wnd->destroy();
+            delete wnd;
+        };
+
+        MTEST_ASSERT(wnd->init() == STATUS_OK);
+        MTEST_ASSERT(wnd->set_caption("Test surface origin") == STATUS_OK);
+        MTEST_ASSERT(wnd->set_window_actions(ws::WA_MOVE | ws::WA_CLOSE) == STATUS_OK);
+        MTEST_ASSERT(wnd->set_size_constraints(640, 400, 640, 400) == STATUS_OK);
+
+        Handler h(this, wnd);
+        wnd->set_handler(&h);
+
+        MTEST_ASSERT(wnd->show() == STATUS_OK);
+        MTEST_ASSERT(!wnd->has_parent());
+
+        MTEST_ASSERT(dpy->main() == STATUS_OK);
+    }
+
+MTEST_END
+
+
+
+
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/rtext.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/rtext.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/rtext.cpp	2025-03-01 12:42:55.532655950 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/rtext.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2022 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2022 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-ws-lib
  * Created on: 12 июл. 2022 г.
@@ -57,6 +57,10 @@ MTEST_BEGIN("ws.display", rtext)
                         // Draw the text
                         ws::Font f;
                         f.set_name("arial");
+                        f.set_underline(true);
+
+                        LSPString str;
+                        str.set_utf8("Text");
 
                         s->set_antialiasing(false);
                         for (size_t y=0; y<3; ++y)
@@ -69,7 +73,7 @@ MTEST_BEGIN("ws.display", rtext)
 
                                 c.set_rgb24(0x000000);
                                 f.set_size(32);
-                                s->out_text_relative(f, c, xx, yy, dx, dy, "Text");
+                                s->out_text_relative(f, c, xx, yy, dx, dy, &str);
 
                                 c.set_rgb24(0x00cc00);
                                 f.set_size(12);
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/srectangles.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/srectangles.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/srectangles.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/srectangles.cpp	2025-08-26 18:15:42.574014472 +0000
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
+ *
+ * This file is part of lsp-ws-lib
+ * Created on: 1 апр. 2025 г.
+ *
+ * lsp-ws-lib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * lsp-ws-lib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with lsp-ws-lib. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <lsp-plug.in/ws/factory.h>
+#include <lsp-plug.in/ws/IEventHandler.h>
+#include <lsp-plug.in/test-fw/mtest.h>
+
+MTEST_BEGIN("ws.display", srectangles)
+
+    class Handler: public ws::IEventHandler
+    {
+        private:
+            test_type_t    *pTest;
+            ws::IWindow    *pWnd;
+
+        public:
+            inline Handler(test_type_t *test, ws::IWindow *wnd)
+            {
+                pTest       = test;
+                pWnd        = wnd;
+            }
+
+            virtual status_t handle_event(const ws::event_t *ev)
+            {
+                switch (ev->nType)
+                {
+                    case ws::UIE_REDRAW:
+                    {
+                        ws::ISurface *s = pWnd->get_surface();
+                        if (s == NULL)
+                            return STATUS_OK;
+
+                        s->begin();
+                        {
+                            // Prepare source surface
+                            ws::ISurface *src = s->create(64, 64);
+                            if (src == NULL)
+                                return STATUS_OK;
+                            lsp_finally {
+                                src->destroy();
+                                delete src;
+                            };
+
+                            // Draw gradient on a source surface
+                            {
+                                ws::IGradient *g = src->radial_gradient(32.0f, 32.0f, 32.0f, 32.0f, 48.0f);
+                                if (g == NULL)
+                                    return STATUS_OK;
+                                lsp_finally { delete g; };
+
+                                Color c;
+                                g->set_start_rgb(0xff00ff);
+                                g->set_stop_rgb(0x00ffff);
+                                src->begin();
+                                {
+                                    src->fill_rect(g, SURFMASK_NO_CORNER, 0, 0.0f, 0.0f, 64.0f, 64.0f);
+                                }
+                                src->end();
+                            }
+
+                            // Perform drawing
+                            Color c(0.0f, 0.5f, 0.75f);
+
+                            s->clear(c);
+
+                            s->draw(src, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
+
+                            for (size_t xi=0; xi<4; ++xi)
+                                for (size_t yi=0; yi<4; ++yi)
+                                {
+                                    const size_t mask = (yi << 2) | xi;
+
+                                    size_t x = 76 * (xi + 1);
+                                    size_t y = 76 * (yi + 1);
+
+                                    s->fill_rect(
+                                        src, xi * 0.125f,
+                                        mask, 12.0f,
+                                        x, y,
+                                        src->width(), src->height());
+                                }
+
+                        }
+                        s->end();
+
+                        return STATUS_OK;
+                    }
+
+                    case ws::UIE_CLOSE:
+                    {
+                        pWnd->hide();
+                        pWnd->display()->quit_main();
+                        break;
+                    }
+
+                    default:
+                        return IEventHandler::handle_event(ev);
+                }
+
+                return STATUS_OK;
+            }
+    };
+
+    MTEST_MAIN
+    {
+        ws::IDisplay *dpy = ws::create_display(0, NULL);
+        MTEST_ASSERT(dpy != NULL);
+        lsp_finally { ws::free_display(dpy); };
+
+        ws::IWindow *wnd = dpy->create_window();
+        MTEST_ASSERT(wnd != NULL);
+        lsp_finally {
+            wnd->destroy();
+            delete wnd;
+        };
+
+        MTEST_ASSERT(wnd->init() == STATUS_OK);
+        MTEST_ASSERT(wnd->set_caption("Test surface rectangles") == STATUS_OK);
+        MTEST_ASSERT(wnd->set_window_actions(ws::WA_MOVE | ws::WA_CLOSE) == STATUS_OK);
+        MTEST_ASSERT(wnd->set_size_constraints(640, 400, 640, 400) == STATUS_OK);
+
+        Handler h(this, wnd);
+        wnd->set_handler(&h);
+
+        MTEST_ASSERT(wnd->show() == STATUS_OK);
+        MTEST_ASSERT(!wnd->has_parent());
+
+        MTEST_ASSERT(dpy->main() == STATUS_OK);
+    }
+
+MTEST_END
+
+
+
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/text.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/text.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/text.cpp	2025-03-01 12:42:55.532655950 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/text.cpp	2025-08-26 18:15:42.578014432 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2022 Linux Studio Plugins Project <https://lsp-plug.in/>
- *           (C) 2022 Vladimir Sadovnikov <sadko4u@gmail.com>
+ * Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
+ *           (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
  *
  * This file is part of lsp-ws-lib
  * Created on: 11 июл. 2022 г.
@@ -62,6 +62,9 @@ MTEST_BEGIN("ws.display", text)
                         ws::font_parameters_t fp;
                         ws::text_parameters_t tp1, tp2;
 
+                        LSPString str;
+                        str.set_utf8("Text");
+
                         for (size_t i=0; i<=0x07; ++i)
                         {
                             f.set_bold(i & 0x1);
@@ -95,7 +98,7 @@ MTEST_BEGIN("ws.display", text)
                             // Output text
                             c.set_rgb24(0x000000);
                             c.alpha(0.25f);
-                            s->out_text(f, c, x, y, "Text");
+                            s->out_text(f, c, x, y, &str);
 
                             // Update position
                             y += 40;
diff -pruN 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/window.cpp 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/window.cpp
--- 1.2.21-5/modules/lsp-ws-lib/src/test/mtest/display/window.cpp	2025-03-01 12:42:55.532655950 +0000
+++ 1.2.23-0ubuntu1/modules/lsp-ws-lib/src/test/mtest/display/window.cpp	2025-08-26 18:15:42.578014432 +0000
@@ -87,6 +87,12 @@ MTEST_BEGIN("ws.display", window)
                         break;
                     }
 
+                    case ws::UIE_STATE:
+                    {
+                        pTest->printf("Current window state is: %d\n", int(ev->nCode));
+                        break;
+                    }
+
                     default:
                         return IEventHandler::handle_event(ev);
                 }
@@ -139,8 +145,8 @@ MTEST_BEGIN("ws.display", window)
         MTEST_ASSERT(wnd->set_caption("Test window") == STATUS_OK);
         MTEST_ASSERT(wnd->get_caption(&dst) == STATUS_OK);
         MTEST_ASSERT(dst.equals_ascii("Test window"));
-        MTEST_ASSERT(wnd->set_border_style(ws::BS_DIALOG) == STATUS_OK);
-        MTEST_ASSERT(wnd->set_window_actions(ws::WA_MOVE | ws::WA_RESIZE | ws::WA_CLOSE) == STATUS_OK);
+        MTEST_ASSERT(wnd->set_border_style(ws::BS_SIZEABLE) == STATUS_OK);
+        MTEST_ASSERT(wnd->set_window_actions(ws::WA_MOVE | ws::WA_RESIZE | ws::WA_CLOSE | ws::WA_MAXIMIZE | ws::WA_MINIMIZE) == STATUS_OK);
 
         MTEST_ASSERT(wnd->resize(320, 200) == STATUS_OK);
         MTEST_ASSERT(wnd->set_size_constraints(160, 100, 640, 400) == STATUS_OK);
diff -pruN 1.2.21-5/modules.mk 1.2.23-0ubuntu1/modules.mk
--- 1.2.21-5/modules.mk	2025-03-01 12:43:22.992491120 +0000
+++ 1.2.23-0ubuntu1/modules.mk	2025-08-26 18:16:40.709450247 +0000
@@ -19,358 +19,379 @@
 #
 
 # Variables that describe dependencies
-LSP_3RD_PARTY_VERSION      := 1.0.21
+LSP_3RD_PARTY_VERSION      := 1.0.23
 LSP_3RD_PARTY_NAME         := lsp-3rd-party
 LSP_3RD_PARTY_TYPE         := hdr
 LSP_3RD_PARTY_INC_OPT      := -idirafter
 LSP_3RD_PARTY_URL_RO       := https://github.com/lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 LSP_3RD_PARTY_URL_RW       := git@github.com:lsp-plugins/$(LSP_3RD_PARTY_NAME).git
 
-LSP_COMMON_LIB_VERSION     := 1.0.41
+LSP_COMMON_LIB_VERSION     := 1.0.43
 LSP_COMMON_LIB_NAME        := lsp-common-lib
 LSP_COMMON_LIB_TYPE        := src
 LSP_COMMON_LIB_URL_RO      := https://github.com/lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 LSP_COMMON_LIB_URL_RW      := git@github.com:lsp-plugins/$(LSP_COMMON_LIB_NAME).git
 
-LSP_DSP_LIB_VERSION        := 1.0.29
+LSP_DSP_LIB_VERSION        := 1.0.31
 LSP_DSP_LIB_NAME           := lsp-dsp-lib
 LSP_DSP_LIB_TYPE           := src
 LSP_DSP_LIB_URL_RO         := https://github.com/lsp-plugins/$(LSP_DSP_LIB_NAME).git
 LSP_DSP_LIB_URL_RW         := git@github.com:lsp-plugins/$(LSP_DSP_LIB_NAME).git
 
-LSP_DSP_UNITS_VERSION      := 1.0.28
+LSP_DSP_UNITS_VERSION      := 1.0.30
 LSP_DSP_UNITS_NAME         := lsp-dsp-units
 LSP_DSP_UNITS_TYPE         := src
 LSP_DSP_UNITS_URL_RO       := https://github.com/lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 LSP_DSP_UNITS_URL_RW       := git@github.com:lsp-plugins/$(LSP_DSP_UNITS_NAME).git
 
-LSP_LLTL_LIB_VERSION       := 1.0.24
+LSP_LLTL_LIB_VERSION       := 1.0.26
 LSP_LLTL_LIB_NAME          := lsp-lltl-lib
 LSP_LLTL_LIB_TYPE          := src
 LSP_LLTL_LIB_URL_RO        := https://github.com/lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 LSP_LLTL_LIB_URL_RW        := git@github.com:lsp-plugins/$(LSP_LLTL_LIB_NAME).git
 
-LSP_R3D_BASE_LIB_VERSION   := 1.0.23
+LSP_R3D_BASE_LIB_VERSION   := 1.0.25
 LSP_R3D_BASE_LIB_NAME      := lsp-r3d-base-lib
 LSP_R3D_BASE_LIB_TYPE      := src
 LSP_R3D_BASE_LIB_URL_RO    := https://github.com/lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 LSP_R3D_BASE_LIB_URL_RW    := git@github.com:lsp-plugins/$(LSP_R3D_BASE_LIB_NAME).git
 
-LSP_R3D_IFACE_VERSION      := 1.0.23
+LSP_R3D_IFACE_VERSION      := 1.0.25
 LSP_R3D_IFACE_NAME         := lsp-r3d-iface
 LSP_R3D_IFACE_TYPE         := src
 LSP_R3D_IFACE_URL_RO       := https://github.com/lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 LSP_R3D_IFACE_URL_RW       := git@github.com:lsp-plugins/$(LSP_R3D_IFACE_NAME).git
 
-LSP_R3D_GLX_LIB_VERSION    := 1.0.23
+LSP_R3D_GLX_LIB_VERSION    := 1.0.25
 LSP_R3D_GLX_LIB_NAME       := lsp-r3d-glx-lib
 LSP_R3D_GLX_LIB_TYPE       := bin
 LSP_R3D_GLX_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 LSP_R3D_GLX_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_GLX_LIB_NAME).git
 
-LSP_R3D_WGL_LIB_VERSION    := 1.0.18
+LSP_R3D_WGL_LIB_VERSION    := 1.0.20
 LSP_R3D_WGL_LIB_NAME       := lsp-r3d-wgl-lib
 LSP_R3D_WGL_LIB_TYPE       := bin
 LSP_R3D_WGL_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 LSP_R3D_WGL_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_R3D_WGL_LIB_NAME).git
 
-LSP_RUNTIME_LIB_VERSION    := 1.0.27
+LSP_RUNTIME_LIB_VERSION    := 1.0.29
 LSP_RUNTIME_LIB_NAME       := lsp-runtime-lib
 LSP_RUNTIME_LIB_TYPE       := src
 LSP_RUNTIME_LIB_URL_RO     := https://github.com/lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 LSP_RUNTIME_LIB_URL_RW     := git@github.com:lsp-plugins/$(LSP_RUNTIME_LIB_NAME).git
 
-LSP_TEST_FW_VERSION        := 1.0.30
+LSP_TEST_FW_VERSION        := 1.0.32
 LSP_TEST_FW_NAME           := lsp-test-fw
 LSP_TEST_FW_TYPE           := src
 LSP_TEST_FW_URL_RO         := https://github.com/lsp-plugins/$(LSP_TEST_FW_NAME).git
 LSP_TEST_FW_URL_RW         := git@github.com:lsp-plugins/$(LSP_TEST_FW_NAME).git
 
-LSP_TK_LIB_VERSION         := 1.0.27
+LSP_TK_LIB_VERSION         := 1.0.29
 LSP_TK_LIB_NAME            := lsp-tk-lib
 LSP_TK_LIB_TYPE            := src
 LSP_TK_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_TK_LIB_NAME).git
 LSP_TK_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_TK_LIB_NAME).git
 
-LSP_WS_LIB_VERSION         := 1.0.27
+LSP_WS_LIB_VERSION         := 1.0.29
 LSP_WS_LIB_NAME            := lsp-ws-lib
 LSP_WS_LIB_TYPE            := src
 LSP_WS_LIB_URL_RO          := https://github.com/lsp-plugins/$(LSP_WS_LIB_NAME).git
 LSP_WS_LIB_URL_RW          := git@github.com:lsp-plugins/$(LSP_WS_LIB_NAME).git
 
 # Plugin-related module dependencies
-LSP_PLUGIN_FW_VERSION      := 1.0.29
+LSP_PLUGIN_FW_VERSION      := 1.0.31
 LSP_PLUGIN_FW_NAME         := lsp-plugin-fw
 LSP_PLUGIN_FW_TYPE         := src
 LSP_PLUGIN_FW_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 LSP_PLUGIN_FW_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGIN_FW_NAME).git
 
-LSP_PLUGINS_SHARED_VERSION := 1.0.28
+LSP_PLUGINS_SHARED_VERSION := 1.0.30
 LSP_PLUGINS_SHARED_NAME    := lsp-plugins-shared
 LSP_PLUGINS_SHARED_TYPE    := src
 LSP_PLUGINS_SHARED_URL_RO  := https://github.com/lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 LSP_PLUGINS_SHARED_URL_RW  := git@github.com:lsp-plugins/$(LSP_PLUGINS_SHARED_NAME).git
 
 # Specify description of plugin dependencies
-LSP_PLUGINS_AB_TESTER_VERSION           := 1.0.16
+LSP_PLUGINS_AB_TESTER_VERSION           := 1.0.18
 LSP_PLUGINS_AB_TESTER_NAME              := lsp-plugins-ab-tester
 LSP_PLUGINS_AB_TESTER_TYPE              := plug
 LSP_PLUGINS_AB_TESTER_URL_RO            := https://github.com/lsp-plugins/$(LSP_PLUGINS_AB_TESTER_NAME).git
 LSP_PLUGINS_AB_TESTER_URL_RW            := git@github.com:lsp-plugins/$(LSP_PLUGINS_AB_TESTER_NAME).git
 
-LSP_PLUGINS_ART_DELAY_VERSION           := 1.0.25
+LSP_PLUGINS_ART_DELAY_VERSION           := 1.0.27
 LSP_PLUGINS_ART_DELAY_NAME              := lsp-plugins-art-delay
 LSP_PLUGINS_ART_DELAY_TYPE              := plug
 LSP_PLUGINS_ART_DELAY_URL_RO            := https://github.com/lsp-plugins/$(LSP_PLUGINS_ART_DELAY_NAME).git
 LSP_PLUGINS_ART_DELAY_URL_RW            := git@github.com:lsp-plugins/$(LSP_PLUGINS_ART_DELAY_NAME).git
 
-LSP_PLUGINS_AUTOGAIN_VERSION            := 1.0.10
+LSP_PLUGINS_AUTOGAIN_VERSION            := 1.0.12
 LSP_PLUGINS_AUTOGAIN_NAME               := lsp-plugins-autogain
 LSP_PLUGINS_AUTOGAIN_TYPE               := plug
 LSP_PLUGINS_AUTOGAIN_URL_RO             := https://github.com/lsp-plugins/$(LSP_PLUGINS_AUTOGAIN_NAME).git
 LSP_PLUGINS_AUTOGAIN_URL_RW             := git@github.com:lsp-plugins/$(LSP_PLUGINS_AUTOGAIN_NAME).git
 
-LSP_PLUGINS_BEAT_BREATHER_VERSION       := 1.0.13
+LSP_PLUGINS_BEAT_BREATHER_VERSION       := 1.0.15
 LSP_PLUGINS_BEAT_BREATHER_NAME          := lsp-plugins-beat-breather
 LSP_PLUGINS_BEAT_BREATHER_TYPE          := plug
 LSP_PLUGINS_BEAT_BREATHER_URL_RO        := https://github.com/lsp-plugins/$(LSP_PLUGINS_BEAT_BREATHER_NAME).git
 LSP_PLUGINS_BEAT_BREATHER_URL_RW        := git@github.com:lsp-plugins/$(LSP_PLUGINS_BEAT_BREATHER_NAME).git
 
-LSP_PLUGINS_CHORUS_VERSION              := 1.0.6
+LSP_PLUGINS_CHORUS_VERSION              := 1.0.8
 LSP_PLUGINS_CHORUS_NAME                 := lsp-plugins-chorus
 LSP_PLUGINS_CHORUS_TYPE                 := plug
 LSP_PLUGINS_CHORUS_URL_RO               := https://github.com/lsp-plugins/$(LSP_PLUGINS_CHORUS_NAME).git
 LSP_PLUGINS_CHORUS_URL_RW               := git@github.com:lsp-plugins/$(LSP_PLUGINS_CHORUS_NAME).git
 
-LSP_PLUGINS_CLIPPER_VERSION             := 1.0.8
+LSP_PLUGINS_CLIPPER_VERSION             := 1.0.10
 LSP_PLUGINS_CLIPPER_NAME                := lsp-plugins-clipper
 LSP_PLUGINS_CLIPPER_TYPE                := plug
 LSP_PLUGINS_CLIPPER_URL_RO              := https://github.com/lsp-plugins/$(LSP_PLUGINS_CLIPPER_NAME).git
 LSP_PLUGINS_CLIPPER_URL_RW              := git@github.com:lsp-plugins/$(LSP_PLUGINS_CLIPPER_NAME).git
 
-LSP_PLUGINS_COMP_DELAY_VERSION          := 1.0.28
+LSP_PLUGINS_COMP_DELAY_VERSION          := 1.0.30
 LSP_PLUGINS_COMP_DELAY_NAME             := lsp-plugins-comp-delay
 LSP_PLUGINS_COMP_DELAY_TYPE             := plug
 LSP_PLUGINS_COMP_DELAY_URL_RO           := https://github.com/lsp-plugins/$(LSP_PLUGINS_COMP_DELAY_NAME).git
 LSP_PLUGINS_COMP_DELAY_URL_RW           := git@github.com:lsp-plugins/$(LSP_PLUGINS_COMP_DELAY_NAME).git
 
-LSP_PLUGINS_COMPRESSOR_VERSION          := 1.0.29
+LSP_PLUGINS_COMPRESSOR_VERSION          := 1.0.31
 LSP_PLUGINS_COMPRESSOR_NAME             := lsp-plugins-compressor
 LSP_PLUGINS_COMPRESSOR_TYPE             := plug
 LSP_PLUGINS_COMPRESSOR_URL_RO           := https://github.com/lsp-plugins/$(LSP_PLUGINS_COMPRESSOR_NAME).git
 LSP_PLUGINS_COMPRESSOR_URL_RW           := git@github.com:lsp-plugins/$(LSP_PLUGINS_COMPRESSOR_NAME).git
 
-LSP_PLUGINS_CROSSOVER_VERSION           := 1.0.25
+LSP_PLUGINS_CROSSOVER_VERSION           := 1.0.27
 LSP_PLUGINS_CROSSOVER_NAME              := lsp-plugins-crossover
 LSP_PLUGINS_CROSSOVER_TYPE              := plug
 LSP_PLUGINS_CROSSOVER_URL_RO            := https://github.com/lsp-plugins/$(LSP_PLUGINS_CROSSOVER_NAME).git
 LSP_PLUGINS_CROSSOVER_URL_RW            := git@github.com:lsp-plugins/$(LSP_PLUGINS_CROSSOVER_NAME).git
 
-LSP_PLUGINS_DYNA_PROCESSOR_VERSION      := 1.0.28
+LSP_PLUGINS_DYNA_PROCESSOR_VERSION      := 1.0.30
 LSP_PLUGINS_DYNA_PROCESSOR_NAME         := lsp-plugins-dyna-processor
 LSP_PLUGINS_DYNA_PROCESSOR_TYPE         := plug
 LSP_PLUGINS_DYNA_PROCESSOR_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGINS_DYNA_PROCESSOR_NAME).git
 LSP_PLUGINS_DYNA_PROCESSOR_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGINS_DYNA_PROCESSOR_NAME).git
 
-LSP_PLUGINS_EXPANDER_VERSION            := 1.0.28
+LSP_PLUGINS_EXPANDER_VERSION            := 1.0.30
 LSP_PLUGINS_EXPANDER_NAME               := lsp-plugins-expander
 LSP_PLUGINS_EXPANDER_TYPE               := plug
 LSP_PLUGINS_EXPANDER_URL_RO             := https://github.com/lsp-plugins/$(LSP_PLUGINS_EXPANDER_NAME).git
 LSP_PLUGINS_EXPANDER_URL_RW             := git@github.com:lsp-plugins/$(LSP_PLUGINS_EXPANDER_NAME).git
 
-LSP_PLUGINS_FILTER_VERSION             	:= 1.0.13
+LSP_PLUGINS_FILTER_VERSION             	:= 1.0.15
 LSP_PLUGINS_FILTER_NAME                	:= lsp-plugins-filter
 LSP_PLUGINS_FILTER_TYPE                	:= plug
 LSP_PLUGINS_FILTER_URL_RO              	:= https://github.com/lsp-plugins/$(LSP_PLUGINS_FILTER_NAME).git
 LSP_PLUGINS_FILTER_URL_RW              	:= git@github.com:lsp-plugins/$(LSP_PLUGINS_FILTER_NAME).git
 
-LSP_PLUGINS_FLANGER_VERSION             := 1.0.13
+LSP_PLUGINS_FLANGER_VERSION             := 1.0.15
 LSP_PLUGINS_FLANGER_NAME                := lsp-plugins-flanger
 LSP_PLUGINS_FLANGER_TYPE                := plug
 LSP_PLUGINS_FLANGER_URL_RO              := https://github.com/lsp-plugins/$(LSP_PLUGINS_FLANGER_NAME).git
 LSP_PLUGINS_FLANGER_URL_RW              := git@github.com:lsp-plugins/$(LSP_PLUGINS_FLANGER_NAME).git
 
-LSP_PLUGINS_GATE_VERSION                := 1.0.28
+LSP_PLUGINS_GATE_VERSION                := 1.0.30
 LSP_PLUGINS_GATE_NAME                   := lsp-plugins-gate
 LSP_PLUGINS_GATE_TYPE                   := plug
 LSP_PLUGINS_GATE_URL_RO                 := https://github.com/lsp-plugins/$(LSP_PLUGINS_GATE_NAME).git
 LSP_PLUGINS_GATE_URL_RW                 := git@github.com:lsp-plugins/$(LSP_PLUGINS_GATE_NAME).git
 
-LSP_PLUGINS_GOTT_COMPRESSOR_VERSION     := 1.0.13
+LSP_PLUGINS_GOTT_COMPRESSOR_VERSION     := 1.0.15
 LSP_PLUGINS_GOTT_COMPRESSOR_NAME        := lsp-plugins-gott-compressor
 LSP_PLUGINS_GOTT_COMPRESSOR_TYPE        := plug
 LSP_PLUGINS_GOTT_COMPRESSOR_URL_RO      := https://github.com/lsp-plugins/$(LSP_PLUGINS_GOTT_COMPRESSOR_NAME).git
 LSP_PLUGINS_GOTT_COMPRESSOR_URL_RW      := git@github.com:lsp-plugins/$(LSP_PLUGINS_GOTT_COMPRESSOR_NAME).git
 
-LSP_PLUGINS_GRAPH_EQUALIZER_VERSION     := 1.0.28
+LSP_PLUGINS_GRAPH_EQUALIZER_VERSION     := 1.0.30
 LSP_PLUGINS_GRAPH_EQUALIZER_NAME        := lsp-plugins-graph-equalizer
 LSP_PLUGINS_GRAPH_EQUALIZER_TYPE        := plug
 LSP_PLUGINS_GRAPH_EQUALIZER_URL_RO      := https://github.com/lsp-plugins/$(LSP_PLUGINS_GRAPH_EQUALIZER_NAME).git
 LSP_PLUGINS_GRAPH_EQUALIZER_URL_RW      := git@github.com:lsp-plugins/$(LSP_PLUGINS_GRAPH_EQUALIZER_NAME).git
 
-LSP_PLUGINS_IMPULSE_RESPONSES_VERSION   := 1.0.28
+LSP_PLUGINS_IMPULSE_RESPONSES_VERSION   := 1.0.30
 LSP_PLUGINS_IMPULSE_RESPONSES_NAME      := lsp-plugins-impulse-responses
 LSP_PLUGINS_IMPULSE_RESPONSES_TYPE      := plug
 LSP_PLUGINS_IMPULSE_RESPONSES_URL_RO    := https://github.com/lsp-plugins/$(LSP_PLUGINS_IMPULSE_RESPONSES_NAME).git
 LSP_PLUGINS_IMPULSE_RESPONSES_URL_RW    := git@github.com:lsp-plugins/$(LSP_PLUGINS_IMPULSE_RESPONSES_NAME).git
 
-LSP_PLUGINS_IMPULSE_REVERB_VERSION      := 1.0.25
+LSP_PLUGINS_IMPULSE_REVERB_VERSION      := 1.0.27
 LSP_PLUGINS_IMPULSE_REVERB_NAME         := lsp-plugins-impulse-reverb
 LSP_PLUGINS_IMPULSE_REVERB_TYPE         := plug
 LSP_PLUGINS_IMPULSE_REVERB_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGINS_IMPULSE_REVERB_NAME).git
 LSP_PLUGINS_IMPULSE_REVERB_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGINS_IMPULSE_REVERB_NAME).git
 
-LSP_PLUGINS_LATENCY_METER_VERSION       := 1.0.24
+LSP_PLUGINS_LATENCY_METER_VERSION       := 1.0.26
 LSP_PLUGINS_LATENCY_METER_NAME          := lsp-plugins-latency-meter
 LSP_PLUGINS_LATENCY_METER_TYPE          := plug
 LSP_PLUGINS_LATENCY_METER_URL_RO        := https://github.com/lsp-plugins/$(LSP_PLUGINS_LATENCY_METER_NAME).git
 LSP_PLUGINS_LATENCY_METER_URL_RW        := git@github.com:lsp-plugins/$(LSP_PLUGINS_LATENCY_METER_NAME).git
 
-LSP_PLUGINS_LIMITER_VERSION             := 1.0.26
+LSP_PLUGINS_LIMITER_VERSION             := 1.0.28
 LSP_PLUGINS_LIMITER_NAME                := lsp-plugins-limiter
 LSP_PLUGINS_LIMITER_TYPE                := plug
 LSP_PLUGINS_LIMITER_URL_RO              := https://github.com/lsp-plugins/$(LSP_PLUGINS_LIMITER_NAME).git
 LSP_PLUGINS_LIMITER_URL_RW              := git@github.com:lsp-plugins/$(LSP_PLUGINS_LIMITER_NAME).git
 
-LSP_PLUGINS_LOUD_COMP_VERSION           := 1.0.24
+LSP_PLUGINS_LOUD_COMP_VERSION           := 1.0.26
 LSP_PLUGINS_LOUD_COMP_NAME              := lsp-plugins-loud-comp
 LSP_PLUGINS_LOUD_COMP_TYPE              := plug
 LSP_PLUGINS_LOUD_COMP_URL_RO            := https://github.com/lsp-plugins/$(LSP_PLUGINS_LOUD_COMP_NAME).git
 LSP_PLUGINS_LOUD_COMP_URL_RW            := git@github.com:lsp-plugins/$(LSP_PLUGINS_LOUD_COMP_NAME).git
 
-LSP_PLUGINS_MB_CLIPPER_VERSION       	:= 1.0.8
+LSP_PLUGINS_MB_CLIPPER_VERSION       	:= 1.0.10
 LSP_PLUGINS_MB_CLIPPER_NAME          	:= lsp-plugins-mb-clipper
 LSP_PLUGINS_MB_CLIPPER_TYPE          	:= plug
 LSP_PLUGINS_MB_CLIPPER_URL_RO        	:= https://github.com/lsp-plugins/$(LSP_PLUGINS_MB_CLIPPER_NAME).git
 LSP_PLUGINS_MB_CLIPPER_URL_RW        	:= git@github.com:lsp-plugins/$(LSP_PLUGINS_MB_CLIPPER_NAME).git
 
-LSP_PLUGINS_MB_COMPRESSOR_VERSION       := 1.0.26
+LSP_PLUGINS_MB_COMPRESSOR_VERSION       := 1.0.28
 LSP_PLUGINS_MB_COMPRESSOR_NAME          := lsp-plugins-mb-compressor
 LSP_PLUGINS_MB_COMPRESSOR_TYPE          := plug
 LSP_PLUGINS_MB_COMPRESSOR_URL_RO        := https://github.com/lsp-plugins/$(LSP_PLUGINS_MB_COMPRESSOR_NAME).git
 LSP_PLUGINS_MB_COMPRESSOR_URL_RW        := git@github.com:lsp-plugins/$(LSP_PLUGINS_MB_COMPRESSOR_NAME).git
 
-LSP_PLUGINS_MB_DYNA_PROCESSOR_VERSION   := 1.0.21
+LSP_PLUGINS_MB_DYNA_PROCESSOR_VERSION   := 1.0.23
 LSP_PLUGINS_MB_DYNA_PROCESSOR_NAME      := lsp-plugins-mb-dyna-processor
 LSP_PLUGINS_MB_DYNA_PROCESSOR_TYPE      := plug
 LSP_PLUGINS_MB_DYNA_PROCESSOR_URL_RO    := https://github.com/lsp-plugins/$(LSP_PLUGINS_MB_DYNA_PROCESSOR_NAME).git
 LSP_PLUGINS_MB_DYNA_PROCESSOR_URL_RW    := git@github.com:lsp-plugins/$(LSP_PLUGINS_MB_DYNA_PROCESSOR_NAME).git
 
-LSP_PLUGINS_MB_EXPANDER_VERSION         := 1.0.24
+LSP_PLUGINS_MB_EXPANDER_VERSION         := 1.0.26
 LSP_PLUGINS_MB_EXPANDER_NAME            := lsp-plugins-mb-expander
 LSP_PLUGINS_MB_EXPANDER_TYPE            := plug
 LSP_PLUGINS_MB_EXPANDER_URL_RO          := https://github.com/lsp-plugins/$(LSP_PLUGINS_MB_EXPANDER_NAME).git
 LSP_PLUGINS_MB_EXPANDER_URL_RW          := git@github.com:lsp-plugins/$(LSP_PLUGINS_MB_EXPANDER_NAME).git
 
-LSP_PLUGINS_MB_GATE_VERSION             := 1.0.24
+LSP_PLUGINS_MB_GATE_VERSION             := 1.0.26
 LSP_PLUGINS_MB_GATE_NAME                := lsp-plugins-mb-gate
 LSP_PLUGINS_MB_GATE_TYPE                := plug
 LSP_PLUGINS_MB_GATE_URL_RO              := https://github.com/lsp-plugins/$(LSP_PLUGINS_MB_GATE_NAME).git
 LSP_PLUGINS_MB_GATE_URL_RW              := git@github.com:lsp-plugins/$(LSP_PLUGINS_MB_GATE_NAME).git
 
-LSP_PLUGINS_MB_LIMITER_VERSION          := 1.0.13
+LSP_PLUGINS_MB_LIMITER_VERSION          := 1.0.15
 LSP_PLUGINS_MB_LIMITER_NAME             := lsp-plugins-mb-limiter
 LSP_PLUGINS_MB_LIMITER_TYPE             := plug
 LSP_PLUGINS_MB_LIMITER_URL_RO           := https://github.com/lsp-plugins/$(LSP_PLUGINS_MB_LIMITER_NAME).git
 LSP_PLUGINS_MB_LIMITER_URL_RW           := git@github.com:lsp-plugins/$(LSP_PLUGINS_MB_LIMITER_NAME).git
 
-LSP_PLUGINS_MIXER_VERSION             	:= 1.0.16
+LSP_PLUGINS_MIXER_VERSION             	:= 1.0.18
 LSP_PLUGINS_MIXER_NAME                	:= lsp-plugins-mixer
 LSP_PLUGINS_MIXER_TYPE                	:= plug
 LSP_PLUGINS_MIXER_URL_RO              	:= https://github.com/lsp-plugins/$(LSP_PLUGINS_MIXER_NAME).git
 LSP_PLUGINS_MIXER_URL_RW              	:= git@github.com:lsp-plugins/$(LSP_PLUGINS_MIXER_NAME).git
 
-LSP_PLUGINS_NOISE_GENERATOR_VERSION     := 1.0.19
+LSP_PLUGINS_NOISE_GENERATOR_VERSION     := 1.0.21
 LSP_PLUGINS_NOISE_GENERATOR_NAME        := lsp-plugins-noise-generator
 LSP_PLUGINS_NOISE_GENERATOR_TYPE        := plug
 LSP_PLUGINS_NOISE_GENERATOR_URL_RO      := https://github.com/lsp-plugins/$(LSP_PLUGINS_NOISE_GENERATOR_NAME).git
 LSP_PLUGINS_NOISE_GENERATOR_URL_RW      := git@github.com:lsp-plugins/$(LSP_PLUGINS_NOISE_GENERATOR_NAME).git
 
-LSP_PLUGINS_OSCILLATOR_VERSION          := 1.0.24
+LSP_PLUGINS_OSCILLATOR_VERSION          := 1.0.26
 LSP_PLUGINS_OSCILLATOR_NAME             := lsp-plugins-oscillator
 LSP_PLUGINS_OSCILLATOR_TYPE             := plug
 LSP_PLUGINS_OSCILLATOR_URL_RO           := https://github.com/lsp-plugins/$(LSP_PLUGINS_OSCILLATOR_NAME).git
 LSP_PLUGINS_OSCILLATOR_URL_RW           := git@github.com:lsp-plugins/$(LSP_PLUGINS_OSCILLATOR_NAME).git
 
-LSP_PLUGINS_OSCILLOSCOPE_VERSION        := 1.0.24
+LSP_PLUGINS_OSCILLOSCOPE_VERSION        := 1.0.26
 LSP_PLUGINS_OSCILLOSCOPE_NAME           := lsp-plugins-oscilloscope
 LSP_PLUGINS_OSCILLOSCOPE_TYPE           := plug
 LSP_PLUGINS_OSCILLOSCOPE_URL_RO         := https://github.com/lsp-plugins/$(LSP_PLUGINS_OSCILLOSCOPE_NAME).git
 LSP_PLUGINS_OSCILLOSCOPE_URL_RW         := git@github.com:lsp-plugins/$(LSP_PLUGINS_OSCILLOSCOPE_NAME).git
 
-LSP_PLUGINS_PARA_EQUALIZER_VERSION      := 1.0.29
+LSP_PLUGINS_PARA_EQUALIZER_VERSION      := 1.0.31
 LSP_PLUGINS_PARA_EQUALIZER_NAME         := lsp-plugins-para-equalizer
 LSP_PLUGINS_PARA_EQUALIZER_TYPE         := plug
 LSP_PLUGINS_PARA_EQUALIZER_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGINS_PARA_EQUALIZER_NAME).git
 LSP_PLUGINS_PARA_EQUALIZER_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGINS_PARA_EQUALIZER_NAME).git
 
-LSP_PLUGINS_PHASE_DETECTOR_VERSION      := 1.0.24
+LSP_PLUGINS_PHASE_DETECTOR_VERSION      := 1.0.26
 LSP_PLUGINS_PHASE_DETECTOR_NAME         := lsp-plugins-phase-detector
 LSP_PLUGINS_PHASE_DETECTOR_TYPE         := plug
 LSP_PLUGINS_PHASE_DETECTOR_URL_RO       := https://github.com/lsp-plugins/$(LSP_PLUGINS_PHASE_DETECTOR_NAME).git
 LSP_PLUGINS_PHASE_DETECTOR_URL_RW       := git@github.com:lsp-plugins/$(LSP_PLUGINS_PHASE_DETECTOR_NAME).git
 
-LSP_PLUGINS_PROFILER_VERSION            := 1.0.24
+LSP_PLUGINS_PHASER_VERSION              := 1.0.1
+LSP_PLUGINS_PHASER_NAME                 := lsp-plugins-phaser
+LSP_PLUGINS_PHASER_TYPE                 := plug
+LSP_PLUGINS_PHASER_URL_RO               := https://github.com/lsp-plugins/$(LSP_PLUGINS_PHASER_NAME).git
+LSP_PLUGINS_PHASER_URL_RW               := git@github.com:lsp-plugins/$(LSP_PLUGINS_PHASER_NAME).git
+
+LSP_PLUGINS_PROFILER_VERSION            := 1.0.26
 LSP_PLUGINS_PROFILER_NAME               := lsp-plugins-profiler
 LSP_PLUGINS_PROFILER_TYPE               := plug
 LSP_PLUGINS_PROFILER_URL_RO             := https://github.com/lsp-plugins/$(LSP_PLUGINS_PROFILER_NAME).git
 LSP_PLUGINS_PROFILER_URL_RW             := git@github.com:lsp-plugins/$(LSP_PLUGINS_PROFILER_NAME).git
 
-LSP_PLUGINS_REFERENCER_VERSION          := 1.0.1
+LSP_PLUGINS_REFERENCER_VERSION          := 1.0.3
 LSP_PLUGINS_REFERENCER_NAME             := lsp-plugins-referencer
 LSP_PLUGINS_REFERENCER_TYPE             := plug
 LSP_PLUGINS_REFERENCER_URL_RO           := https://github.com/lsp-plugins/$(LSP_PLUGINS_REFERENCER_NAME).git
 LSP_PLUGINS_REFERENCER_URL_RW           := git@github.com:lsp-plugins/$(LSP_PLUGINS_REFERENCER_NAME).git
 
-LSP_PLUGINS_RETURN_VERSION              := 1.0.3
+LSP_PLUGINS_RETURN_VERSION              := 1.0.5
 LSP_PLUGINS_RETURN_NAME                 := lsp-plugins-return
 LSP_PLUGINS_RETURN_TYPE                 := plug
 LSP_PLUGINS_RETURN_URL_RO               := https://github.com/lsp-plugins/$(LSP_PLUGINS_RETURN_NAME).git
 LSP_PLUGINS_RETURN_URL_RW               := git@github.com:lsp-plugins/$(LSP_PLUGINS_RETURN_NAME).git
 
-LSP_PLUGINS_ROOM_BUILDER_VERSION        := 1.0.25
+LSP_PLUGINS_ROOM_BUILDER_VERSION        := 1.0.27
 LSP_PLUGINS_ROOM_BUILDER_NAME           := lsp-plugins-room-builder
 LSP_PLUGINS_ROOM_BUILDER_TYPE           := plug
 LSP_PLUGINS_ROOM_BUILDER_URL_RO         := https://github.com/lsp-plugins/$(LSP_PLUGINS_ROOM_BUILDER_NAME).git
 LSP_PLUGINS_ROOM_BUILDER_URL_RW         := git@github.com:lsp-plugins/$(LSP_PLUGINS_ROOM_BUILDER_NAME).git
 
-LSP_PLUGINS_SAMPLER_VERSION             := 1.0.28
+LSP_PLUGINS_SAMPLER_VERSION             := 1.0.30
 LSP_PLUGINS_SAMPLER_NAME                := lsp-plugins-sampler
 LSP_PLUGINS_SAMPLER_TYPE                := plug
 LSP_PLUGINS_SAMPLER_URL_RO              := https://github.com/lsp-plugins/$(LSP_PLUGINS_SAMPLER_NAME).git
 LSP_PLUGINS_SAMPLER_URL_RW              := git@github.com:lsp-plugins/$(LSP_PLUGINS_SAMPLER_NAME).git
 
-LSP_PLUGINS_SEND_VERSION                := 1.0.3
+LSP_PLUGINS_SEND_VERSION                := 1.0.5
 LSP_PLUGINS_SEND_NAME                   := lsp-plugins-send
 LSP_PLUGINS_SEND_TYPE                   := plug
 LSP_PLUGINS_SEND_URL_RO                 := https://github.com/lsp-plugins/$(LSP_PLUGINS_SEND_NAME).git
 LSP_PLUGINS_SEND_URL_RW                 := git@github.com:lsp-plugins/$(LSP_PLUGINS_SEND_NAME).git
 
-LSP_PLUGINS_SLAP_DELAY_VERSION          := 1.0.25
+LSP_PLUGINS_SLAP_DELAY_VERSION          := 1.0.27
 LSP_PLUGINS_SLAP_DELAY_NAME             := lsp-plugins-slap-delay
 LSP_PLUGINS_SLAP_DELAY_TYPE             := plug
 LSP_PLUGINS_SLAP_DELAY_URL_RO           := https://github.com/lsp-plugins/$(LSP_PLUGINS_SLAP_DELAY_NAME).git
 LSP_PLUGINS_SLAP_DELAY_URL_RW           := git@github.com:lsp-plugins/$(LSP_PLUGINS_SLAP_DELAY_NAME).git
 
-LSP_PLUGINS_SPECTRUM_ANALYZER_VERSION   := 1.0.30
+LSP_PLUGINS_SPECTRUM_ANALYZER_VERSION   := 1.0.32
 LSP_PLUGINS_SPECTRUM_ANALYZER_NAME      := lsp-plugins-spectrum-analyzer
 LSP_PLUGINS_SPECTRUM_ANALYZER_TYPE      := plug
 LSP_PLUGINS_SPECTRUM_ANALYZER_URL_RO    := https://github.com/lsp-plugins/$(LSP_PLUGINS_SPECTRUM_ANALYZER_NAME).git
 LSP_PLUGINS_SPECTRUM_ANALYZER_URL_RW    := git@github.com:lsp-plugins/$(LSP_PLUGINS_SPECTRUM_ANALYZER_NAME).git
 
-LSP_PLUGINS_SURGE_FILTER_VERSION        := 1.0.24
+LSP_PLUGINS_SURGE_FILTER_VERSION        := 1.0.26
 LSP_PLUGINS_SURGE_FILTER_NAME           := lsp-plugins-surge-filter
 LSP_PLUGINS_SURGE_FILTER_TYPE           := plug
 LSP_PLUGINS_SURGE_FILTER_URL_RO         := https://github.com/lsp-plugins/$(LSP_PLUGINS_SURGE_FILTER_NAME).git
 LSP_PLUGINS_SURGE_FILTER_URL_RW         := git@github.com:lsp-plugins/$(LSP_PLUGINS_SURGE_FILTER_NAME).git
 
-LSP_PLUGINS_TRIGGER_VERSION             := 1.0.26
+LSP_PLUGINS_TRIGGER_VERSION             := 1.0.28
 LSP_PLUGINS_TRIGGER_NAME                := lsp-plugins-trigger
 LSP_PLUGINS_TRIGGER_TYPE                := plug
 LSP_PLUGINS_TRIGGER_URL_RO              := https://github.com/lsp-plugins/$(LSP_PLUGINS_TRIGGER_NAME).git
 LSP_PLUGINS_TRIGGER_URL_RW              := git@github.com:lsp-plugins/$(LSP_PLUGINS_TRIGGER_NAME).git
 
 # System libraries
+LIBAUDIOTOOLBOX_VERSION    := system
+LIBAUDIOTOOLBOX_NAME       := libaudiotoolbox
+LIBAUDIOTOOLBOX_TYPE       := opt
+LIBAUDIOTOOLBOX_LDFLAGS    := -framework AudioToolbox
+
+LIBCOREFOUNDATION_VERSION  := system
+LIBCOREFOUNDATION_NAME     := libcorefoundation
+LIBCOREFOUNDATION_TYPE     := opt
+LIBCOREFOUNDATION_LDFLAGS  := -framework CoreFoundation
+
+LIBCOCOA_VERSION           := system
+LIBCOCOA_NAME              := libcocoa
+LIBCOCOA_TYPE              := opt
+LIBCOCOA_LDFLAGS           := -framework Cocoa
+
 LIBADVAPI_VERSION          := system
 LIBADVAPI_NAME             := libadvapi32
 LIBADVAPI_TYPE             := opt
diff -pruN 1.2.21-5/plugins.mk 1.2.23-0ubuntu1/plugins.mk
--- 1.2.21-5/plugins.mk	2025-03-01 12:43:22.992491120 +0000
+++ 1.2.23-0ubuntu1/plugins.mk	2025-08-26 18:16:40.709450247 +0000
@@ -58,6 +58,7 @@ PLUGIN_DEPENDENCIES     = \
   LSP_PLUGINS_OSCILLOSCOPE \
   LSP_PLUGINS_PARA_EQUALIZER \
   LSP_PLUGINS_PHASE_DETECTOR \
+  LSP_PLUGINS_PHASER \
   LSP_PLUGINS_PROFILER \
   LSP_PLUGINS_REFERENCER \
   LSP_PLUGINS_RETURN \
diff -pruN 1.2.21-5/project.mk 1.2.23-0ubuntu1/project.mk
--- 1.2.21-5/project.mk	2025-03-01 12:43:22.992491120 +0000
+++ 1.2.23-0ubuntu1/project.mk	2025-08-26 18:16:40.709450247 +0000
@@ -25,4 +25,5 @@ ARTIFACT_TYPE               = plug
 ARTIFACT_DESC               = Linux Studio Plugins
 ARTIFACT_HEADERS            = lsp-plug.in
 ARTIFACT_EXPORT_HEADERS     = 0
-ARTIFACT_VERSION            = 1.2.21
+ARTIFACT_VERSION            = 1.2.23
+
